View Message
More complete Zika virus antibody analysis by peptide array david h oconnor  2016-08-24
 

Comparison of SIV-specific and ZIKV-specific antibody responses in macaques

2016-08-24

O'Connor experiment 17912

Background correction

Peptide array data was generated by Roche/Nimblegen as part of an early access program. Ten macaque plasma and serum samples were run on each of three plates. Two negative controls (secondary antibody only) were also run on each plate. For each peptide on the array in each of the two plates, we calculated the mean and standard deviation of the two negative controls. The sum of the mean and standard deviation of the negative controls were subtracted from the signal intensity of the experimental samples tested against the corresponding peptide in the same plate. These corrected signal intensities are used as the basis for this analysis.

In [2]:
# import Python3 modules needed for analysis
# use Cufflinks and Plotly to produce interactive heatmaps
import numpy
import pandas
import cufflinks
import plotly.graph_objs as go
import plotly.tools as tls
import plotly.plotly as py

Data import

A CSV file containing signal intensities for all thirty samples will be used for this analysis. Since the peptide array also contains peptides from hundreds of other viral proteins, we will simplify the analysis by only sharing the SIV and ZIKV peptide data. If you would like to collaborate with us on analyses of other targets, or wish to get the data for other purposes, please contact us. Use of the data may require MTAs with either Roche/Nimblegen or UW-Madison, but we can cross that bridge if we come to it.

In [3]:
# import CSV file containing all samples
df = pandas.read_csv('/Users/dho/Downloads/peptidearray_results_backgroun_2016-08-19_19-59-01.csv')

Prepare data

Simplify sample descriptions

The original sample descriptors used are complex. In the next step, these complex identifiers will be replaced with simple identifiers. To reduce confusion, public IDs from the Zika Open portal will be used whenever possible. The exact transformation is masked because some of the sample identifiers have not been cleared for public distribution. Only samples relevant to a particular analysis are shown (e.g., samples from SIV-infected animals are shown in the HIV/SIV comparisons)

In [18]:
renamed_df = df.replace({
       'XXX': '28-Baboon 001 - post-arterivirus - 2014-04-15',
       'XXX': '27-Baboon 001 - pre-arterivirus - 2007-07-23',
       'XXX': '29-Baboon 002 - pre-arterivirus - 2013-12-11',
       'XXX': '30-Baboon 002 - post-arterivirus - 2014-04-15',
       'XXX':  '23-Cynomolgus 001 - pre-SIV - 2012-06-28',
       'XXX': '24-Cynomolgus 001 - 52 weeks post-SIV - 2013-09-10',
       'XXX': '21-Cynomolgus 002 - pre-GBV-C - 2014-03-10',
       'XXX': '22-Cynomolgus 002 - post-GBV-C - 2014-07-29',
       'XXX': '19-Cynomolgus 002 - pre-SIV - 2012-06-25',
       'XXX': '20-Cynomolgus 002 - 52 weeks post-SIV - 2013-09-24',
       'XXX': '25-Cynomolgus 003 - pre-GBV-C - 2014-05-27',
       'XXX': '26-Cynomolgus 003 - post-GBV-C - 2014-10-07',
       'XXX': '01-295022 ZIKV-002 0 days post-ZIKV',
       'XXX': '02-295022 ZIKV-002 67 days post-ZIKV',
       'XXX': '03-295022 ZIKV-002 98 days post-ZIKV',
       'XXX': '04-562876 ZIKV-002 0 days post-ZIKV',
       'XXX': '05-562876 ZIKV-002 67 days post-ZIKV',
       'XXX': '06-562876 ZIKV-002 98 days post-ZIKV',
       'XXX': '07-405734 ZIKV-002 0 days post-ZIKV',
       'XXX': '08-405734 ZIKV-002 67 days post-ZIKV',
       'XXX': '09-405734 ZIKV-002 98 days post-ZIKV',
       'XXX': '10-610107 ZIKV-004 0 days post-ZIKV',
       'XXX': '11-610107 ZIKV-004 67 days post-ZIKV',
       'XXX': '12-610107 ZIKV-004 99 days post-ZIKV',
       'XXX': '13-181856 ZIKV-004 0 days post-ZIKV',
       'XXX': '14-181856 ZIKV-004 67 days post-ZIKV',
       'XXX': '15-181856 ZIKV-004 99 days post-ZIKV',
       'XXX': '16-411359 ZIKV-004 0 days post-ZIKV',
       'XXX': '17-411359 ZIKV-004 67 days post-ZIKV',
       'XXX': '18-411359 ZIKV-004 99 days post-ZIKV'
})

Visualize responses to SIV and HIV Env

In the SIV+ samples, we expect robust antibody responses directed against epitopes in SIVmac239, the challenge strain. Weaker responses would be expected against heterologous SIV isolates, with very weak responses against HIV Env, if responses are detected at all.

In [19]:
# select pre- and post-infection SIV samples

siv_samples_df = renamed_df[renamed_df['sample_description'].isin([
        '23-Cynomolgus 001 - pre-SIV - 2012-06-28',
        '24-Cynomolgus 001 - 52 weeks post-SIV - 2013-09-10',
        '19-Cynomolgus 002 - pre-SIV - 2012-06-25',
        '20-Cynomolgus 002 - 52 weeks post-SIV - 2013-09-24',
        '21-Cynomolgus 002 - pre-GBV-C - 2014-03-10',
        '22-Cynomolgus 002 - post-GBV-C - 2014-07-29'
        ])]

Antibody responses to homologous SIVmac239

First, examine responses against SIVmac239. Set minimum value for plotting to 0 (so any signal intensities below the negative control threshold will all be plotted as 0). The maxiumum value for plotting will be the maximum observed intensity or 10,000 units, whichever is lower. This prevents extremely high values from making it difficult to visualize lower values.

In [51]:
# plot responses to SIVmac239 Env probes

# select rows containing data with SIVmac239 Env probes
sid_df = siv_samples_df[siv_samples_df['seq_id'] == 'Q88018']

# make pivot table
pivoted = sid_df.pivot_table(index='position_id', columns='sample_description', values='subtract_mean_background_plus_1_stddev_signal')

# set title
title = sid_df.seq_id.unique()[0] + ' - ' + sid_df.description.unique()[0]

# set layout options
layout = go.Layout(
title=title,
autosize=False,
width=1000,
height=600,
margin=go.Margin(
    l=350,
    r=200,
    b=100,
    t=100,
    pad=4
))

# make heatmap and save as figure
dataframe_fig = pivoted.iplot(kind='heatmap',
          layout=layout,
          colorscale='rdylbu',
          world_readable=False,
          asFigure=True)

# set zmin = 0 to not plot negative values
dataframe_fig['data'][0]['zmin'] = 0

# set zmax to 10000 or maximum observed value in figure, whichever is lower
zmax_obs = numpy.amax(dataframe_fig['data'][0]['z'])
if zmax_obs > 10000:
    dataframe_fig['data'][0]['zmax'] = 10000
elif zmax_obs > 10000:
    dataframe_fig['data'][0]['zmax'] = zmax_obs

# set filename
filename = 'cufflinks/17912/ZikaOpen' + '/' + title

py.iplot(dataframe_fig, filename=filename)

Out[51]:

SIVmac239 Env-specific responses in the two animals after SIV infection are robust. Pre-infection responses are very low. This demonstrates that the technology platform is able to detect homologous responses that we anticipate based on these animals' infection histories.

Antibody responses to SIVsmE660

SIVsmE660 is more distantly related to SIVmac239. We would expect more modest antibody responses to SIVsmE660 peptides. Below the responses to SIVsmE660 are plotted:

In [52]:
# plot responses to SIVsmE660 Env probes

# select rows containing data with SIVsmE660 Env probes
sid_df = siv_samples_df[siv_samples_df['seq_id'] == 'I6TPL2']

# make pivot table
pivoted = sid_df.pivot_table(index='position_id', columns='sample_description', values='subtract_mean_background_plus_1_stddev_signal')

# set title
title = sid_df.seq_id.unique()[0] + ' - ' + sid_df.description.unique()[0]

# set layout options
layout = go.Layout(
title=title,
autosize=False,
width=1000,
height=600,
margin=go.Margin(
    l=350,
    r=200,
    b=100,
    t=100,
    pad=4
))

# make heatmap and save as figure
dataframe_fig = pivoted.iplot(kind='heatmap',
          layout=layout,
          colorscale='rdylbu',
          world_readable=False,
          asFigure=True)

# set zmin = 0 to not plot negative values
dataframe_fig['data'][0]['zmin'] = 0

# set zmax to 10000 or maximum observed value in figure, whichever is lower
zmax_obs = numpy.amax(dataframe_fig['data'][0]['z'])
if zmax_obs > 10000:
    dataframe_fig['data'][0]['zmax'] = 10000
elif zmax_obs > 10000:
    dataframe_fig['data'][0]['zmax'] = zmax_obs

# set filename
filename = 'cufflinks/17912/ZikaOpen' + '/' + title

py.iplot(dataframe_fig, filename=filename)

Out[52]:

Some responses are still detected, but note that the response directed against ~aa 500 in SIVmac239 is no longer detected against SIVsmE660 peptides

Antibody responses to HIV-2

HIV-2 Env sequences are divergent from SIVmac239, so antibody responses against SIVmac239 peptides are unlikely to cross-react extensively. Yet SIV and HIV-2 are both originally derived from sooty mangabeys. What do these responses look like?

In [53]:
# plot responses to HIV-2 Env probes

# select rows containing data with HIV-2 Env probes
sid_df = siv_samples_df[siv_samples_df['seq_id'] == 'P18094']

# make pivot table
pivoted = sid_df.pivot_table(index='position_id', columns='sample_description', values='subtract_mean_background_plus_1_stddev_signal')

# set title
title = sid_df.seq_id.unique()[0] + ' - ' + sid_df.description.unique()[0]

# set layout options
layout = go.Layout(
title=title,
autosize=False,
width=1000,
height=600,
margin=go.Margin(
    l=350,
    r=200,
    b=100,
    t=100,
    pad=4
))

# make heatmap and save as figure
dataframe_fig = pivoted.iplot(kind='heatmap',
          layout=layout,
          colorscale='rdylbu',
          world_readable=False,
          asFigure=True)

# set zmin = 0 to not plot negative values
dataframe_fig['data'][0]['zmin'] = 0

# set zmax to 10000 or maximum observed value in figure, whichever is lower
zmax_obs = numpy.amax(dataframe_fig['data'][0]['z'])
if zmax_obs > 10000:
    dataframe_fig['data'][0]['zmax'] = 10000
elif zmax_obs > 10000:
    dataframe_fig['data'][0]['zmax'] = zmax_obs

# set filename
filename = 'cufflinks/17912/ZikaOpen' + '/' + title

py.iplot(dataframe_fig, filename=filename)

Out[53]:

Some responses are preserved, but others are lost. Interestingly, there is a response in Cynomolgus 002 around amino acid 487 that isn't seem against either of the two SIV peptide sets. Perhaps this is a response against an escape variant that arose during SIVmac239 infection.

Antibody responses to HIV-1

HIV-1 is a fundamentally different from from HIV-2/SIV. It originated in chimpanzees, not sooty mangabeys, and has extensive sequence divergence. Antibody responses would not expect to cross-react.

In [54]:
# plot responses to HIV-1 Env probes

# select rows containing data with HIV-1 Env probes
sid_df = siv_samples_df[siv_samples_df['seq_id'] == 'P04578']

# make pivot table
pivoted = sid_df.pivot_table(index='position_id', columns='sample_description', values='subtract_mean_background_plus_1_stddev_signal')

# set title
title = sid_df.seq_id.unique()[0] + ' - ' + sid_df.description.unique()[0]

# set layout options
layout = go.Layout(
title=title,
autosize=False,
width=1000,
height=600,
margin=go.Margin(
    l=350,
    r=200,
    b=100,
    t=100,
    pad=4
))

# make heatmap and save as figure
dataframe_fig = pivoted.iplot(kind='heatmap',
          layout=layout,
          colorscale='rdylbu',
          world_readable=False,
          asFigure=True)

# set zmin = 0 to not plot negative values
dataframe_fig['data'][0]['zmin'] = 0

# set zmax to 10000 or maximum observed value in figure, whichever is lower
zmax_obs = numpy.amax(dataframe_fig['data'][0]['z'])
if zmax_obs > 10000:
    dataframe_fig['data'][0]['zmax'] = 10000
elif zmax_obs > 10000:
    dataframe_fig['data'][0]['zmax'] = zmax_obs

# set filename
filename = 'cufflinks/17912/ZikaOpen' + '/' + title

py.iplot(dataframe_fig, filename=filename)

Out[54]:

As anticipated, there are no strong responses directed against HIV-1 peptides, even in SIV+ samples. This provides evidence that positive reactivity is observed against homologous viral peptides, as expected, but not against divergent viral peptides. Demonstrating that the peptide array platform performs well against HIV/SIV provides confidence that the results we observed in ZIKV-infected animals using the same platform are beleivable.

Visualize responses to Zika virus

Samples from two different Zika virus studies were included in this analysis. ZIKV-002 macaques were infected with African-lineage Zika virus and rechallenged with Asian-lineage Zika virus 70 days later. ZIKV-004 macaques were infected with Asian-lineage Zika virus and rechallenged with the same Asian-lineage Zika virus 70 days later. The three timepoints from each animal correspond to pre-ZIKV infection, immediately before rechallenge, and approximately one month following rechallenge.

In [34]:
# select pre- and post-infection ZIKV samples

zikv_samples_df = renamed_df[renamed_df['sample_description'].isin([
'01-295022 ZIKV-002 0 days post-ZIKV',
'02-295022 ZIKV-002 67 days post-ZIKV',
'03-295022 ZIKV-002 98 days post-ZIKV',
'04-562876 ZIKV-002 0 days post-ZIKV',
'05-562876 ZIKV-002 67 days post-ZIKV',
'06-562876 ZIKV-002 98 days post-ZIKV',
'07-405734 ZIKV-002 0 days post-ZIKV',
'08-405734 ZIKV-002 67 days post-ZIKV',
'09-405734 ZIKV-002 98 days post-ZIKV',
'10-610107 ZIKV-004 0 days post-ZIKV',
'11-610107 ZIKV-004 67 days post-ZIKV',
'12-610107 ZIKV-004 99 days post-ZIKV',
'13-181856 ZIKV-004 0 days post-ZIKV',
'14-181856 ZIKV-004 67 days post-ZIKV',
'15-181856 ZIKV-004 99 days post-ZIKV',
'16-411359 ZIKV-004 0 days post-ZIKV',
'17-411359 ZIKV-004 67 days post-ZIKV',
'18-411359 ZIKV-004 99 days post-ZIKV'
])]

Antibody responses to African-lineage Zika virus

ZIKV-002 animals were infected with Zika virus/R.macaque-tc/UGA/1947/MR766-3329. Responses to the entire polyprotein are shown.

In [62]:
# plot responses to ZIKV MR766 probes

# select rows containing data with ZIKV MR766 probes
sid_df = zikv_samples_df[zikv_samples_df['seq_id'] == 'A0A140D2T1']

# make pivot table
pivoted = sid_df.pivot_table(index='position_id', columns='sample_description', values='subtract_mean_background_plus_1_stddev_signal')

# set title
title = sid_df.seq_id.unique()[0] + ' - ' + sid_df.description.unique()[0]

# set layout options
layout = go.Layout(
title=title,
autosize=False,
width=1000,
height=900,
margin=go.Margin(
    l=350,
    r=200,
    b=100,
    t=100,
    pad=4
))

# make heatmap and save as figure
dataframe_fig = pivoted.iplot(kind='heatmap',
          layout=layout,
          colorscale='rdylbu',
          world_readable=False,
          asFigure=True)

# set zmin = 0 to not plot negative values
dataframe_fig['data'][0]['zmin'] = 0

# set zmax to 10000 or maximum observed value in figure, whichever is lower
zmax_obs = numpy.amax(dataframe_fig['data'][0]['z'])
if zmax_obs > 10000:
    dataframe_fig['data'][0]['zmax'] = 10000
elif zmax_obs > 10000:
    dataframe_fig['data'][0]['zmax'] = zmax_obs

# set filename
filename = 'cufflinks/17912/ZikaOpen' + '/' + title

py.iplot(dataframe_fig, filename=filename)

Out[62]:

The responses vary between macaques. ZIKV-002 animal 295022 shows nice reactivity against aa ~1420 and ~3060 only in the post-infection timepoints. Responses in the other two ZIKV-002 macaques are generally weak. Note that these animals were protected from heterologous rechallenge, so it could be that non-linear epitopes (which will likely be missed by this peptide array) are important for protection. Alternately, weak responses relative to the maximal responses may be relevant to protection. View the same data again, but this time limiting the maximum color intensity to 1000 signal units.

In [63]:
# plot responses to ZIKV MR766 probes

# select rows containing data with ZIKV MR766 probes
sid_df = zikv_samples_df[zikv_samples_df['seq_id'] == 'A0A140D2T1']

# make pivot table
pivoted = sid_df.pivot_table(index='position_id', columns='sample_description', values='subtract_mean_background_plus_1_stddev_signal')

# set title
title = sid_df.seq_id.unique()[0] + ' - ' + sid_df.description.unique()[0]

# set layout options
layout = go.Layout(
title=title,
autosize=False,
width=1000,
height=900,
margin=go.Margin(
    l=350,
    r=200,
    b=100,
    t=100,
    pad=4
))

# make heatmap and save as figure
dataframe_fig = pivoted.iplot(kind='heatmap',
          layout=layout,
          colorscale='rdylbu',
          world_readable=False,
          asFigure=True)

# set zmin = 0 to not plot negative values
dataframe_fig['data'][0]['zmin'] = 0

# set zmax to 1000 to amplify modest responses
dataframe_fig['data'][0]['zmax'] = 1000

# set filename
filename = 'cufflinks/17912/ZikaOpen' + '/' + title + 'zmax1000'

py.iplot(dataframe_fig, filename=filename)

Out[63]:

Low-level responses in the other two animal after Zika virus infection are observed, but additional work would be necessary to validate these responses. Interestingly, all three ZIKV-004 animals have responses at d67 and 99 against aa ~420 and ~530. This region also shows a subtle reactivity in 562876 and 295022. Though there is no evidence for reactivity in the third ZIKV-002 animal.

Antibody responses to Asian-lineage Zika virus

ZIKV-004 animals were infected with Zika virus/H.sapiens-tc/FRA/2013/FrenchPolynesia-01_v1c1. Responses to the entire polyprotein are shown.

In [57]:
# plot responses to ZIKV FP probes

# select rows containing data with ZIKV FP probes
sid_df = zikv_samples_df[zikv_samples_df['seq_id'] == 'A0A024B7W1']

# make pivot table
pivoted = sid_df.pivot_table(index='position_id', columns='sample_description', values='subtract_mean_background_plus_1_stddev_signal')

# set title
title = sid_df.seq_id.unique()[0] + ' - ' + sid_df.description.unique()[0]

# set layout options
layout = go.Layout(
title=title,
autosize=False,
width=1000,
height=900,
margin=go.Margin(
    l=350,
    r=200,
    b=100,
    t=100,
    pad=4
))

# make heatmap and save as figure
dataframe_fig = pivoted.iplot(kind='heatmap',
          layout=layout,
          colorscale='rdylbu',
          world_readable=False,
          asFigure=True)

# set zmin = 0 to not plot negative values
dataframe_fig['data'][0]['zmin'] = 0

# set zmax to 10000 or maximum observed value in figure, whichever is lower
zmax_obs = numpy.amax(dataframe_fig['data'][0]['z'])
if zmax_obs > 10000:
    dataframe_fig['data'][0]['zmax'] = 10000
elif zmax_obs > 10000:
    dataframe_fig['data'][0]['zmax'] = zmax_obs

# set filename
filename = 'cufflinks/17912/ZikaOpen' + '/' + title

py.iplot(dataframe_fig, filename=filename)

Out[57]:

Robust post-challenge antibody responses are detected in two of the three ZIKV-004 animals, as well as ZIKV-002 animal 295022. Regions where reactivity is detected in two or more animals may be good targets for assessing antibody responses using focused, more sensitive tools. In particular, the regions from ~aa 450-460 and 515-530 are intriguing because responses are seen in all three ZIKV-004 animals. For these responses to be useful for diagnostics, they need to be specific for Zika virus. What about cross-reactivity against other flaviviruses?

Antibody responses to Dengue virus

Responses against D1/PF/FP1104/2001 French Polynesia are shown

In [58]:
# plot responses to D1/PF/FP1104/2001 French Polynesia probes

# select rows containing data with D1/PF/FP1104/2001 French Polynesia probes
sid_df = zikv_samples_df[zikv_samples_df['seq_id'] == 'A6XDI1']

# make pivot table
pivoted = sid_df.pivot_table(index='position_id', columns='sample_description', values='subtract_mean_background_plus_1_stddev_signal')

# set title
title = sid_df.seq_id.unique()[0] + ' - ' + sid_df.description.unique()[0]

# set layout options
layout = go.Layout(
title=title,
autosize=False,
width=1000,
height=900,
margin=go.Margin(
    l=350,
    r=200,
    b=100,
    t=100,
    pad=4
))

# make heatmap and save as figure
dataframe_fig = pivoted.iplot(kind='heatmap',
          layout=layout,
          colorscale='rdylbu',
          world_readable=False,
          asFigure=True)

# set zmin = 0 to not plot negative values
dataframe_fig['data'][0]['zmin'] = 0

# set zmax to 10000 or maximum observed value in figure, whichever is lower
zmax_obs = numpy.amax(dataframe_fig['data'][0]['z'])
if zmax_obs > 10000:
    dataframe_fig['data'][0]['zmax'] = 10000
elif zmax_obs > 10000:
    dataframe_fig['data'][0]['zmax'] = zmax_obs

# set filename
filename = 'cufflinks/17912/ZikaOpen' + '/' + title

py.iplot(dataframe_fig, filename=filename)

Out[58]:

The numbering between ZIKV and DENV isn't perfectly concordant, but there is no clear evidence for post-challenge responses against the corresponding region of DENV-1. Next, repeat for DENV-2, DENV-3, and DENV-4.

In [59]:
# plot responses to DENV 2 98900665 DF DV-2 Indonesia 1998 human probes

# select rows containing data with DENV 2 98900665 DF DV-2 Indonesia 1998 human probes
sid_df = zikv_samples_df[zikv_samples_df['seq_id'] == 'Q689G0']

# make pivot table
pivoted = sid_df.pivot_table(index='position_id', columns='sample_description', values='subtract_mean_background_plus_1_stddev_signal')

# set title
title = sid_df.seq_id.unique()[0] + ' - ' + sid_df.description.unique()[0]

# set layout options
layout = go.Layout(
title=title,
autosize=False,
width=1000,
height=900,
margin=go.Margin(
    l=350,
    r=200,
    b=100,
    t=100,
    pad=4
))

# make heatmap and save as figure
dataframe_fig = pivoted.iplot(kind='heatmap',
          layout=layout,
          colorscale='rdylbu',
          world_readable=False,
          asFigure=True)

# set zmin = 0 to not plot negative values
dataframe_fig['data'][0]['zmin'] = 0

# set zmax to 10000 or maximum observed value in figure, whichever is lower
zmax_obs = numpy.amax(dataframe_fig['data'][0]['z'])
if zmax_obs > 10000:
    dataframe_fig['data'][0]['zmax'] = 10000
elif zmax_obs > 10000:
    dataframe_fig['data'][0]['zmax'] = zmax_obs

# set filename
filename = 'cufflinks/17912/ZikaOpen' + '/' + title

py.iplot(dataframe_fig, filename=filename)

Out[59]:
In [60]:
# plot responses to DENV 3 PF89/27643 French Polynesia 1989 human probes

# select rows containing data with DENV 3 PF89/27643 French Polynesia 1989 human human probes
sid_df = zikv_samples_df[zikv_samples_df['seq_id'] == 'Q3L302']

# make pivot table
pivoted = sid_df.pivot_table(index='position_id', columns='sample_description', values='subtract_mean_background_plus_1_stddev_signal')

# set title
title = sid_df.seq_id.unique()[0] + ' - ' + sid_df.description.unique()[0]

# set layout options
layout = go.Layout(
title=title,
autosize=False,
width=1000,
height=900,
margin=go.Margin(
    l=350,
    r=200,
    b=100,
    t=100,
    pad=4
))

# make heatmap and save as figure
dataframe_fig = pivoted.iplot(kind='heatmap',
          layout=layout,
          colorscale='rdylbu',
          world_readable=False,
          asFigure=True)

# set zmin = 0 to not plot negative values
dataframe_fig['data'][0]['zmin'] = 0

# set zmax to 10000 or maximum observed value in figure, whichever is lower
zmax_obs = numpy.amax(dataframe_fig['data'][0]['z'])
if zmax_obs > 10000:
    dataframe_fig['data'][0]['zmax'] = 10000
elif zmax_obs > 10000:
    dataframe_fig['data'][0]['zmax'] = zmax_obs

# set filename
filename = 'cufflinks/17912/ZikaOpen' + '/' + title

py.iplot(dataframe_fig, filename=filename)

Out[60]:
In [61]:
# plot responses to DENV 4 strain H241 Phillipines 1956 human probes

# select rows containing data with DENV 4 strain H241 Phillipines 1956 human probes
sid_df = zikv_samples_df[zikv_samples_df['seq_id'] == 'A0A0M4C4I5']

# make pivot table
pivoted = sid_df.pivot_table(index='position_id', columns='sample_description', values='subtract_mean_background_plus_1_stddev_signal')

# set title
title = sid_df.seq_id.unique()[0] + ' - ' + sid_df.description.unique()[0]

# set layout options
layout = go.Layout(
title=title,
autosize=False,
width=1000,
height=900,
margin=go.Margin(
    l=350,
    r=200,
    b=100,
    t=100,
    pad=4
))

# make heatmap and save as figure
dataframe_fig = pivoted.iplot(kind='heatmap',
          layout=layout,
          colorscale='rdylbu',
          world_readable=False,
          asFigure=True)

# set zmin = 0 to not plot negative values
dataframe_fig['data'][0]['zmin'] = 0

# set zmax to 10000 or maximum observed value in figure, whichever is lower
zmax_obs = numpy.amax(dataframe_fig['data'][0]['z'])
if zmax_obs > 10000:
    dataframe_fig['data'][0]['zmax'] = 10000
elif zmax_obs > 10000:
    dataframe_fig['data'][0]['zmax'] = zmax_obs

# set filename
filename = 'cufflinks/17912/ZikaOpen' + '/' + title

py.iplot(dataframe_fig, filename=filename)

Out[61]:

I don't know why DENV-4 isn't respecting the zmin=0 setting, but it doesn't really matter. It is still clear there is not much evidence for cross-reactivity against these interesting ZIKV regions in any of the DENV subtypes.

Conclusion

The Roche/Nimblegen peptide array detected strong antibody responses, as expected, in SIV+ plasma samples. Responses were weaker, in general, in samples from Zika virus-infected macaques. Strong post-infection responses were observed in some animals. Modest to strong responses against the same region of the virus proteome were observed in many Zika virus-infected macaques; this region could be attractive for future reagent development because there does not appear to be cross-reactivity against the same region of dengue viruses. There was also no increase in the magnitude of responses 28 days following Zika virus rechallenge, supporting the concept that immunity against the primary infection protected from acquistion of virus upon reinfection, rather than partially containing viral replication below thresholds detectably by qRT-PCR. The peptide array technology holds promise for quickly characterizing antibody responses against viruses where little is known about the immune response.

In [ ]: