diff --git a/exac.py b/exac.py index fa0950f..bad5d17 100644 --- a/exac.py +++ b/exac.py @@ -32,6 +32,9 @@ ], )) +import math +app.jinja_env.globals.update(log=math.log) + def connect_db(): """ @@ -320,10 +323,13 @@ def region_page(region_id): def dbsnp_page(rsid): db = get_db() variant = lookups.get_variants_by_rsid(db, rsid) + print variant return render_template( 'region.html', rsid=rsid, variants_in_region=variant, + coverage=None, + genes_in_region=None ) @app.route('/howtouse') diff --git a/parsing.py b/parsing.py index 4384a31..4bc961a 100644 --- a/parsing.py +++ b/parsing.py @@ -96,15 +96,23 @@ def get_variants_from_sites_vcf(sites_vcf): variant['site_quality'] = float(fields[5]) variant['filter'] = fields[6] variant['vep_annotations'] = vep_annotations - variant['allele_count'] = int(info_field['AC'].split(',')[i]) - variant['allele_freq'] = float(info_field['AF'].split(',')[i]) - # variant['pop_acs'] = dict([(x, info_field[x].split(',')[i]) for x in info_field if x.startswith('AC_')]) - # variant['pop_ans'] = dict([(x, info_field[x].split(',')[i]) for x in info_field if x.startswith('AN_')]) - # variant['pop_homs'] = dict([(x, info_field[x]) for x in info_field if x.startswith('Hom_')]) + + variant['allele_count'] = int(info_field['AC_Adj'].split(',')[i]) + variant['allele_num'] = int(info_field['AN_Adj']) + + if variant['allele_num'] > 0: + variant['allele_freq'] = float(info_field['AC_Adj'].split(',')[i])/float(info_field['AN_Adj']) + else: + variant['allele_freq'] = None + variant['pop_acs'] = dict([(POPS[x], int(info_field['AC_%s' % x].split(',')[i])) for x in POPS]) variant['pop_ans'] = dict([(POPS[x], int(info_field['AN_%s' % x])) for x in POPS]) variant['pop_homs'] = dict([(POPS[x], int(info_field['Hom_%s' % x].split(',')[i])) for x in POPS]) - variant['num_alleles'] = int(info_field['AN']) + + variant['pop_acs']['Other'] = int(info_field['AC_Adj'].split(',')[i]) - sum(variant['pop_acs'].values()) + variant['pop_ans']['Other'] = int(info_field['AN_Adj']) - sum(variant['pop_ans'].values()) + variant['pop_homs']['Other'] = int(info_field['AC_Hom']) - sum(variant['pop_homs'].values()) + variant['genes'] = list({annotation['Gene'] for annotation in vep_annotations}) variant['transcripts'] = list({annotation['Feature'] for annotation in vep_annotations}) diff --git a/src/precompute_histogram.py b/src/precompute_histogram.py index af537ef..b85eea7 100644 --- a/src/precompute_histogram.py +++ b/src/precompute_histogram.py @@ -83,6 +83,7 @@ def get_histogram_for_variant(vcf_line, metric="DP", num_bins=40, midpoints=True for sample in fields[9:]: # This is only DP/GQ for now sample_info = sample.split(':') + if sample_info[0] == './.': continue if idx < len(sample_info) and sample_info[idx] != '.': distr.append(sample_info[idx]) diff --git a/static/exac.js b/static/exac.js index de6c98c..8f3169f 100644 --- a/static/exac.js +++ b/static/exac.js @@ -4,7 +4,6 @@ quality_chart_margin = {top: 10, right: 30, bottom: 50, left: 50}, function draw_histogram_d3(data) { - console.log(data); var x = d3.scale.linear() .domain([d3.min(data, function(d) { return d[0]; }), d3.max(data, function(d) { return d[0]; })]) .range([0, quality_chart_width]); diff --git a/templates/region.html b/templates/region.html index 4d271d8..d9ae560 100644 --- a/templates/region.html +++ b/templates/region.html @@ -6,7 +6,9 @@ window.variants = {{ variants_in_region|tojson|safe }}; $(document).ready(function() { - region_chart(window.coverage_stats, window.variants); + if (window.coverage_stats != null) { + region_chart(window.coverage_stats, window.variants); + } });
@@ -15,11 +17,11 @@

RSID: {{ rsid }}

{% else %}

Region: {{ chrom }} / {{ start }} / {{ stop }}

{% endif %} -

Coverage summary

-
- {% include 'region_display.html' %} -
{% if genes_in_region %} +

Coverage summary

+
+ {% include 'region_display.html' %} +
@@ -186,6 +186,14 @@

Population Frequencies

{% endfor %} + + + Total + {{ variant.pop_acs.values()|sum }} + {{ variant.pop_homs.values()|sum }} + {{ variant.allele_freq }} + +
diff --git a/templates/variant_table.html b/templates/variant_table.html index a76d023..396d053 100644 --- a/templates/variant_table.html +++ b/templates/variant_table.html @@ -7,12 +7,41 @@ $("#variants_table_container").show(); $("#variant_table").tablesorter({ widthFixed: true, - sortList: [[1,0]] + sortList: [[1,0]], + headers: { + 6: { sorter: false, parser: false } + } }); {# .tablesorterPager({container: $("#pager"), positionFixed: false});#} {# if (window.table_variants.length <= 10) {#} $('#pager').hide(); {# }#} + $(document).ready(function() { + var data = window.table_variants; + + var width = 50; + var height = 15; + + var x = d3.scale.log() + .domain([d3.min(data, function(d) { return d.allele_freq; })/2, 1]) + .range([0, width]); + + var svg; + $.each(data, function(i, d) { + svg = d3.select('#variant_af_box_' + d.variant_id) + .append("svg") + .attr("width", width) + .attr("height", height) + .append("g"); + + svg.append('rect') + .style('fill', 'steelblue') + .attr('x', 0) + .attr('y', 0) + .attr('width', x(d.allele_freq)) + .attr('height', height); + }); + }); });
Loading variants...
@@ -26,6 +55,7 @@ Annotation Allele Count Allele Frequency + @@ -57,7 +87,10 @@ {{ variant.filter }} {{ variant.major_consequence }} {{ variant.allele_count }} - {{ variant.allele_freq }} + + {{ variant.allele_freq }} + + {% endfor %}