Skip to content

Commit

Permalink
Add redirects to nextstrain.org/flu and archive old auspice
Browse files Browse the repository at this point in the history
  • Loading branch information
trvrb committed Mar 21, 2018
1 parent 0aa2ae4 commit cf5bf37
Show file tree
Hide file tree
Showing 9 changed files with 221 additions and 69 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ auspice/cdc/
auspice/crick/
auspice/niid/
auspice/vidrl/
auspice/deprecated/

# Jekyll #
##########
Expand Down
32 changes: 32 additions & 0 deletions auspice/_data/viruses.json
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,38 @@
"segments":["HA", "NA"],
"resolutions": ["2y", "3y", "6y", "12y"]
},
{
"virus": "H3N2",
"site": "deprecated",
"default": "/H3N2/3y/",
"name": "A/H3N2",
"segments":["HA", "NA"],
"resolutions": ["2y", "3y", "6y", "12y"]
},
{
"virus": "H1N1pdm",
"site": "deprecated",
"default": "/H1N1pdm/3y/",
"name": "A/H1N1pdm",
"segments":["HA", "NA"],
"resolutions": ["2y", "3y", "6y", "12y"]
},
{
"virus": "Vic",
"site": "deprecated",
"default": "/Vic/3y/",
"name": "B/Vic",
"segments":["HA", "NA"],
"resolutions": ["2y", "3y", "6y", "12y"]
},
{
"virus": "Yam",
"site": "deprecated",
"default": "/Yam/3y/",
"name": "B/Yam",
"segments":["HA", "NA"],
"resolutions": ["2y", "3y", "6y", "12y"]
},
{
"virus": "H3N2",
"site": "WHO",
Expand Down
14 changes: 11 additions & 3 deletions auspice/_layouts/default.html
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,9 @@
</head>

{% assign prefix = "" %}
{% if page.site == 'GISAID' %}
{% if page.site == 'deprecated' %}
{% assign prefix = "/deprecated" %}
{% elsif page.site == 'GISAID' %}
{% assign prefix = "/gisaid" %}
{% elsif page.site == 'WHO' %}
{% assign prefix = page.build | downcase | prepend: "/" %}
Expand Down Expand Up @@ -97,7 +99,13 @@
<p class="navbar-text navbar-right nav-tabs">WHO Version</p>
{% endif %}
<div class="navbar-header">
{% if page.site == 'GISAID' %}
{% if page.site == 'deprecated' %}
<a class="navbar-brand" href="/deprecated/">
<div class="navtitle">
<span class="c2">n</span><span class="c3">e</span><span class="c4">x</span><span class="c5">t</span><span class="c6">f</span><span class="c7">l</span><span class="c8">u</span>
</div>
</a>
{% elsif page.site == 'GISAID' %}
<a class="navbar-brand" href="/gisaid/">
<div class="navtitle">
<span class="c2">n</span><span class="c3">e</span><span class="c4">x</span><span class="c5">t</span><span class="c6">f</span><span class="c7">l</span><span class="c8">u</span>
Expand All @@ -110,7 +118,7 @@
</div>
</a>
{% else %}
<a class="navbar-brand" href="/">
<a class="navbar-brand" href="/deprecated/">
<div class="navtitle">
<span class="c2">n</span><span class="c3">e</span><span class="c4">x</span><span class="c5">t</span><span class="c6">f</span><span class="c7">l</span><span class="c8">u</span>
</div>
Expand Down
106 changes: 90 additions & 16 deletions auspice/provision_directories.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,23 +88,10 @@ def printdir():

indexfile = open("index.html", "w")
indexfile.write("---\n")
indexfile.write("title: nextflu / %s / %s / %s\n" % (virus, segment, resolution))
indexfile.write("layout: auspice\n")
indexfile.write("virus: %s\n" % virus)
indexfile.write("segment: %s\n" % segment)
indexfile.write("resolution: %s\n" % resolution)
indexfile.write("coloring: %s\n" % virus_to_coloring[(virus,segment)])
indexfile.write("gtplaceholder: HA1 positions...\n")
indexfile.write("freqdefault: %s\n" % virus_to_freqdefault[(virus,segment)])
indexfile.write("site: public\n")
indexfile.write("title: nextflu / %s / %s / %s \n" % (virus, segment, resolution))
indexfile.write("layout: redirect\n")
indexfile.write("rurl: https://nextstrain.org/flu/%s/%s/%s/\n" % (vpath, spath, rpath))
indexfile.write("---\n")
indexfile.write("\n")
indexfile.write("<script>\n")
indexfile.write("var file_prefix = \"flu_%s_%s_%s_\";\n" % (virus.lower(), segment.lower(), resolution.lower()))
indexfile.write("var useTiters = false;\n")
indexfile.write("{%% include %s_meta.js %%}\n" % virus)
indexfile.write("{%% include %s_meta.js %%}\n" % resolution)
indexfile.write("</script>\n")
indexfile.close()

os.chdir("..")
Expand Down Expand Up @@ -132,6 +119,93 @@ def printdir():

os.chdir("..")

# provision deprecated site
if os.path.isdir("deprecated"):
shutil.rmtree("deprecated")
os.makedirs("deprecated")
os.chdir("deprecated")
printdir()

indexfile = open("index.html", "w")
indexfile.write("---\n")
indexfile.write("title: nextflu\n")
indexfile.write("layout: redirect\n")
indexfile.write("rurl: /deprecated/h3n2/ha/3y/\n")
indexfile.write("---\n")
indexfile.close()

for virus in viruses:

vpath = virus.lower()
if os.path.isdir(vpath):
shutil.rmtree(vpath)
os.makedirs(vpath)
os.chdir(vpath)
printdir()

indexfile = open("index.html", "w")
indexfile.write("---\n")
indexfile.write("title: nextflu / %s \n" % virus)
indexfile.write("layout: redirect\n")
indexfile.write("rurl: /%s/ha/3y/\n" % vpath)
indexfile.write("---\n")
indexfile.close()

for segment in segments:

spath = segment.lower()
if os.path.isdir(spath):
shutil.rmtree(spath)
os.makedirs(spath)
os.chdir(spath)
printdir()

indexfile = open("index.html", "w")
indexfile.write("---\n")
indexfile.write("title: nextflu / %s / %s \n" % (virus, segment))
indexfile.write("layout: redirect\n")
indexfile.write("rurl: /%s/%s/3y/\n" % (vpath, spath))
indexfile.write("---\n")
indexfile.close()

for resolution in resolutions:

rpath = resolution.lower()
if os.path.isdir(rpath):
shutil.rmtree(rpath)
os.makedirs(rpath)
os.chdir(rpath)
printdir()

indexfile = open("index.html", "w")
indexfile.write("---\n")
indexfile.write("title: nextflu / %s / %s / %s\n" % (virus, segment, resolution))
indexfile.write("layout: auspice\n")
indexfile.write("virus: %s\n" % virus)
indexfile.write("segment: %s\n" % segment)
indexfile.write("resolution: %s\n" % resolution)
indexfile.write("coloring: %s\n" % virus_to_coloring[(virus,segment)])
indexfile.write("gtplaceholder: HA1 positions...\n")
indexfile.write("freqdefault: %s\n" % virus_to_freqdefault[(virus,segment)])
indexfile.write("site: deprecated\n")
indexfile.write("---\n")
indexfile.write("\n")
indexfile.write("<script>\n")
indexfile.write("var file_prefix = \"flu_%s_%s_%s_\";\n" % (virus.lower(), segment.lower(), resolution.lower()))
indexfile.write("var useTiters = false;\n")
indexfile.write("{%% include %s_meta.js %%}\n" % virus)
indexfile.write("{%% include %s_meta.js %%}\n" % resolution)
indexfile.write("</script>\n")
indexfile.close()

os.chdir("..")

os.chdir("..")

os.chdir("..")

os.chdir("..")

# provision GISAID site
if os.path.isdir("gisaid"):
shutil.rmtree("gisaid")
Expand Down
74 changes: 37 additions & 37 deletions auspice/reports/_posts/2015-09-16-sep-2015.html
Original file line number Diff line number Diff line change
@@ -1,50 +1,50 @@
---
layout: report
title: Seasonal influenza circulation patterns and future projections
title: Seasonal influenza circulation patterns and projections for Sep 2015 to Sep 2016
linktitle: Sep 2015
categories:
categories:
- reports
---

<div class="row">
<div class="col-md-3">
<div class="io-container title">
A/H3N2
</div>
<div class="spacer"></div>
</div>
<div class="spacer"></div>
</div>
<div class="col-md-9">

<b>We expect clade 3c2.a viruses to further predominate over 3c3.a and 3c3.b viruses. We do not observe the appearance of additional fast growing clades indicative of the emergence of new antigenic variants.</b>

<div class="spacer"></div>

There were 4 clades of H3N2 viruses circulating in 2015 (3c2.a, 3c3.a, 3c3.b and ancestral 3c3). 3c2.a viruses have predominated with 78% of 2015 viruses belonging to clade 3c2.a, while 12% of viruses belonged to clade 3c3.a and 6% of viruses belonged to clade 3c3.b. Clades 3c2.a, 3c3.a and 3c3.b can easily be distinguished by the residue at HA1 site 159. In 3c2.a this is tyrosine (Y), in 3c3.a this is serine (S) and in 3c3.b this is phenylalanine (F).

{% embed_image /reports/figures/sep-2015/H3N2_HA1-159.png 10 %}

3c2.a has been increasing in frequency, going from 50% globally in October 2014 to 80% of post-July viruses. 3c3.a has been steadily decreasing in frequency, going from a peak of 54% in August 2014 to a present low of 10% of post-July viruses. The first 3c3.b viruses appear in the database in August 2014. They have been slow to take off; just 2% of post-July viruses belong to clade 3c3.b. In fact, 3c3.b viruses appear to have peaked in frequency in May/June at 8%. For perspective, 3c2.a viruses first appear in the database in November 2013 and reach 10% frequency two months later in January 2014 and 50% eleven months later. 3c3.b viruses show no where near this level of success. Barring additional antigenic changes, it appears that 3c2.a viruses will take over the virus population and that 3c3.a and 3c3.b will soon be extinct.

{% embed_image /reports/figures/sep-2015/H3N2_frequencies.png 12 %}

These patterns of clade growth and decline extend to the regional level. 3c2.a viruses now dominate throughout the world. 3c3.b viruses briefly increased in frequency in Europe, but have declined in frequency in recent samples.

{% embed_image /reports/figures/sep-2015/H3N2_HA1-159_frequencies.png 8 %}

The continued dominance of 3c2.a is corroborated with a large local branching index and comparatively low mutational load as measured by the number of non-epitope substitutions since the root of the tree. Within 3c2.a, one clade (the uppermost clade with in 3c2.a) is starting to dominate but this clade is not characterized by any amino acid differences within HA. We observe no rapidly expanding subclades within 3c2.a or 3c3.b.

{% embed_image /reports/figures/sep-2015/H3N2_lbi.png 10 %}

<div class="spacer"></div>

Summarizing data from <a href="http://www.crick.ac.uk/research/worldwide-influenza-centre/annual-and-interim-reports/">recent reports by the WHO CC London</a>, we observe approximately a 2.8-fold drop in titer between serum raised against vaccine strain A/Switzerland/9715293/2013 and 3c2.a viruses. This corresponds to a 1.5 antigenic unit distance between clades. This can be seen on the left in the raw titer data (viruses are colored based on titer drop relative to A/Switzerland/9715293/2013 serum) and also on the right in a statistical model of titer drop. The statistical model finds that 3c2.a and 3c3.a both appear homogeneous in terms of titer measurements within the clade, further supporting the absence of new adaptive variants. Note however, that this analysis is averaging across the serum NIBF13/14 raised against cell-culture virus and the serum F25/14 raised against egg-culture virus.

{% embed_image /reports/figures/sep-2015/H3N2_HI_titers.png 12 %}

Here we compare titer measurements between cell-culture based serum NIBF13/14 on the left and the egg-culture based serum F25/14 on the right. Averaged across measurements, titer drop between cell-culture serum and egg-culture serum is similar with an average antigenic distance of 1.5 for cell-culture measurements and an average antigenic distance of 1.5 for egg-culture measurements. Note however, that absolute titers against F25/14 are higher than against NIBF13/14. This suggests higher "serum potency" in the egg-culture serum, although we do not observe a difference in titer drop. This suggests that egg-adaptation during production of serum F25/14 did not result in antigenic change relative to 3c2.a viruses.

{% embed_image /reports/figures/sep-2015/H3N2_HI_titers_ce.png 12 %}

Thus, 3c2.a and 3c3.a viruses, although not antigenically identical appear quite similar. Observed rapid displacement of 3c3.a viruses by 3c2.a viruses makes sense in this context, i.e. we expect strong immunological competition between clades.

</div>
Expand All @@ -60,27 +60,27 @@
<div class="col-md-3">
<div class="io-container title">
A/H1N1pdm
</div>
<div class="spacer"></div>
</div>
<div class="spacer"></div>
</div>
<div class="col-md-9">

<b>We observe the continued dominance of clade 6b viruses, although the substitution HA1:84N has recently risen to high frequency in South Asia.</b>

<div class="spacer"></div>

For H1N1pdm viruses, the clade 6b has been slowly increasing in frequency since 2013, so that we now find that 99.5% of 2015 viruses belong to clade 6b. Within this clade two recent substitutions in particular have reached appreciable frequency, HA1:84N and HA2:164G. We find that 20% of 2015 viruses are 84N and 11% of 2015 viruses are 164G.

{% embed_image /reports/figures/sep-2015/H1N1pdm_HA2-164_HA1-84.png 10 %}

The HA1:84N substitution shows substantial geographic subdivision with this clade predominating in South Asia. Fully 66% of 2015 viruses isolated from South Asia possess HA1:84N.
The HA1:84N substitution shows substantial geographic subdivision with this clade predominating in South Asia. Fully 66% of 2015 viruses isolated from South Asia possess HA1:84N.

{% embed_image /reports/figures/sep-2015/H1N1pdm_geo.png 10 %}

Analyzing frequency trajectories of HA1:84N and HA2:164G shows a similar picture with a recent increase in frequency of 84N in South Asia. It remains to be fully resolved whether there is an association between the HA1:84N substitution and the severe <a href="https://en.wikipedia.org/wiki/2015_Indian_swine_flu_outbreak">2015 Indian H1N1pdm epidemic</a>.

{% embed_image /reports/figures/sep-2015/H1N1pdm_HA1-84_HA1-164_frequencies.png 10 %}

We observe no emerging clades of H1N1pdm that appear to be rapidly expanding, suggesting the absence of novel antigenic variants. Still, in light of the previous season's Indian outbreak, we suggest careful attention to the HA1:84N substitution to monitor further geographic spread and clade growth.

</div>
Expand All @@ -96,21 +96,21 @@
<div class="col-md-3">
<div class="io-container title">
B/Vic
</div>
<div class="spacer"></div>
</div>
<div class="spacer"></div>
</div>
<div class="col-md-9">

<b>Clade 1A viruses have predominated the B/Vic population with a recent emergence and spread of substitution HA1:129D</b>

<div class="spacer"></div>

B/Victoria viruses isolated during 2015 were almost entirely 1A viruses, with 1B viruses almost entirely extinct. Within 1A viruses, there were three main groups: ancestral 1A viruses possessing 129N and 209K, derived viruses possessing 129N and 209N and derived viruses possessing 129D and 209K.

{% embed_image /reports/figures/sep-2015/Vic_HA1-129_HA1-209.png 10 %}

The 129D/209K clade has been continually expanding after first appearing in late 2012. It comprised 77% of 2015 viruses.

{% embed_image /reports/figures/sep-2015/Vic_frequencies.png 12 %}

</div>
Expand All @@ -126,26 +126,26 @@
<div class="col-md-3">
<div class="io-container title">
B/Yam
</div>
<div class="spacer"></div>
</div>
<div class="spacer"></div>
</div>
<div class="col-md-9">

<b>Clade 3 has predominated the B/Yamagata population with the recent emergence and spread of the substitution HA1:172Q.</b>

<div class="spacer"></div>

B/Yamagata viruses isolated during 2015 were predominately clade 3, with 97% of viruses belonging to clade 3 and just 3% belonging to clade 2. Within clade 3 viruses, the substitution HA1:172Q rose rapidly in frequency during 2014.

{% embed_image /reports/figures/sep-2015/Yam_HA1-172.png 10 %}

{% embed_image /reports/figures/sep-2015/Yam_HA1-172_frequencies.png 12 %}

More recently, the substitution HA1:251V has emerged within the HA1:172Q clade of viruses. The HA1:251V substitution has steadily increased in frequency throughout 2015.

{% embed_image /reports/figures/sep-2015/Yam_HA1-251.png 10 %}

{% embed_image /reports/figures/sep-2015/Yam_HA1-251_frequencies.png 12 %}
{% embed_image /reports/figures/sep-2015/Yam_HA1-251_frequencies.png 12 %}

</div>
</div>
Loading

0 comments on commit cf5bf37

Please sign in to comment.