diff options
-rwxr-xr-x | wqflask/base/data_set.py | 9 | ||||
-rwxr-xr-x | wqflask/base/trait.py | 2 | ||||
-rwxr-xr-x | wqflask/wqflask/gsearch.py | 2 | ||||
-rw-r--r-- | wqflask/wqflask/marker_regression/marker_regression_gn1.py | 7 | ||||
-rw-r--r-- | wqflask/wqflask/static/new/javascript/create_lodchart.coffee | 4 | ||||
-rw-r--r-- | wqflask/wqflask/static/new/javascript/create_lodchart.js | 87 | ||||
-rw-r--r-- | wqflask/wqflask/templates/marker_regression_gn1.html | 110 | ||||
-rwxr-xr-x | wqflask/wqflask/views.py | 11 |
8 files changed, 163 insertions, 69 deletions
diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py index 6cabadb1..e37a838f 100755 --- a/wqflask/base/data_set.py +++ b/wqflask/base/data_set.py @@ -54,7 +54,7 @@ from pprint import pformat as pf # Each subclass will add to this DS_NAME_MAP = {} -def create_dataset(dataset_name, dataset_type = None): +def create_dataset(dataset_name, dataset_type = None, get_samplelist = True): if not dataset_type: dataset_type = Dataset_Getter(dataset_name) #dataset_type = get_dataset_type_from_json(dataset_name) @@ -71,7 +71,7 @@ def create_dataset(dataset_name, dataset_type = None): dataset_ob = DS_NAME_MAP[dataset_type] dataset_class = globals()[dataset_ob] - return dataset_class(dataset_name) + return dataset_class(dataset_name, get_samplelist) #def get_dataset_type_from_json(dataset_name): @@ -501,7 +501,7 @@ class DataSet(object): """ - def __init__(self, name): + def __init__(self, name, get_samplelist = True): assert name, "Need a name" self.name = name @@ -517,7 +517,8 @@ class DataSet(object): self.retrieve_other_names() self.group = DatasetGroup(self) # sets self.group and self.group_id and gets genotype - self.group.get_samplelist() + if get_samplelist == True: + self.group.get_samplelist() self.species = species.TheSpecies(self) diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py index ff149ba3..acff38d9 100755 --- a/wqflask/base/trait.py +++ b/wqflask/base/trait.py @@ -67,7 +67,7 @@ class GeneralTrait(object): # Todo: These two lines are necessary most of the time, but perhaps not all of the time # So we could add a simple if statement to short-circuit this if necessary self.retrieve_info(get_qtl_info=get_qtl_info) - if kw.get('get_sample_info') != False: + if get_sample_info != False: self.retrieve_sample_data() diff --git a/wqflask/wqflask/gsearch.py b/wqflask/wqflask/gsearch.py index a6efb47f..4179dc48 100755 --- a/wqflask/wqflask/gsearch.py +++ b/wqflask/wqflask/gsearch.py @@ -46,7 +46,7 @@ class GSearch(object): self.trait_list = [] with Bench("Creating trait objects"): for line in re: - dataset = create_dataset(line[3], "ProbeSet") + dataset = create_dataset(line[3], "ProbeSet", get_samplelist=False) trait_id = line[4] #with Bench("Building trait object"): this_trait = GeneralTrait(dataset=dataset, name=trait_id, get_qtl_info=True, get_sample_info=False) diff --git a/wqflask/wqflask/marker_regression/marker_regression_gn1.py b/wqflask/wqflask/marker_regression/marker_regression_gn1.py index 56286ee6..e9052290 100644 --- a/wqflask/wqflask/marker_regression/marker_regression_gn1.py +++ b/wqflask/wqflask/marker_regression/marker_regression_gn1.py @@ -295,10 +295,13 @@ class MarkerRegression(object): self.SNPChecked = False self.draw2X = False self.lrsMax = 0 - if 'mb_range' in start_vars: - self.startMb, self.endMb = [float(x) for x in start_vars['mb_range'].split(',')] + if 'startMb' in start_vars: + self.startMb = start_vars['startMb'] else: self.startMb = -1 + if 'endMb' in start_vars: + self.endMb = start_vars['endMb'] + else: self.endMb = -1 #self.additiveChecked = fd.formdata.getvalue('additiveCheck') diff --git a/wqflask/wqflask/static/new/javascript/create_lodchart.coffee b/wqflask/wqflask/static/new/javascript/create_lodchart.coffee index 472ec12d..88003f4e 100644 --- a/wqflask/wqflask/static/new/javascript/create_lodchart.coffee +++ b/wqflask/wqflask/static/new/javascript/create_lodchart.coffee @@ -46,9 +46,5 @@ create_lod_chart = -> .transition().duration(500).attr("r", r) $ -> - #window.setTimeout ( -> - # console.log(js_data) - #), 1000 - #window.setTimeout(create_lod_chart(), 1000) root.create_lod_chart = create_lod_chart diff --git a/wqflask/wqflask/static/new/javascript/create_lodchart.js b/wqflask/wqflask/static/new/javascript/create_lodchart.js index c756d842..778eed3a 100644 --- a/wqflask/wqflask/static/new/javascript/create_lodchart.js +++ b/wqflask/wqflask/static/new/javascript/create_lodchart.js @@ -1,45 +1,50 @@ -// Generated by CoffeeScript 1.9.2 -(function() { - var create_lod_chart; +//var create_lod_chart; - create_lod_chart = function() { - var chrrect, data, h, halfh, margin, mychart, totalh, totalw, w; - h = 500; - w = 1200; - margin = { - left: 60, - top: 40, - right: 40, - bottom: 40, - inner: 5 - }; - halfh = h + margin.top + margin.bottom; - totalh = halfh * 2; - totalw = w + margin.left + margin.right; - console.log("js_data:", js_data); - mychart = lodchart().lodvarname("lod.hk").height(h).width(w).margin(margin).ylab(js_data.result_score_type + " score").mappingScale(js_data.mapping_scale).manhattanPlot(js_data.manhattan_plot); - data = js_data.json_data; - d3.select("div#topchart").datum(data).call(mychart); - chrrect = mychart.chrSelect(); - chrrect.on("mouseover", function() { - return d3.select(this).attr("fill", "#E9CFEC"); - }).on("mouseout", function(d, i) { - return d3.select(this).attr("fill", function() { - if (i % 2) { - return "#F1F1F9"; - } - return "#FBFBFF"; - }); - }); - return mychart.markerSelect().on("click", function(d) { - var r; - r = d3.select(this).attr("r"); - return d3.select(this).transition().duration(500).attr("r", r * 3).transition().duration(500).attr("r", r); - }); +create_lod_chart = function() { + var additive, chrrect, data, h, halfh, margin, mychart, totalh, totalw, w; + h = 500; + w = 1200; + margin = { + left: 60, + top: 40, + right: 40, + bottom: 40, + inner: 5 }; - - $(function() { - return root.create_lod_chart = create_lod_chart; + halfh = h + margin.top + margin.bottom; + totalh = halfh * 2; + totalw = w + margin.left + margin.right; + if ('additive' in js_data) { + additive = js_data.additive; + } else { + additive = false; + } + console.log("js_data:", js_data); + mychart = lodchart().lodvarname("lod.hk").height(h).width(w).margin(margin).ylab(js_data.result_score_type + " score").manhattanPlot(js_data.manhattan_plot); + data = js_data.json_data; + d3.select("div#topchart").datum(data).call(mychart); + chrrect = mychart.chrSelect(); + chrrect.on("mouseover", function() { + return d3.select(this).attr("fill", "#E9CFEC"); + }).on("mouseout", function(d, i) { + return d3.select(this).attr("fill", function() { + if (i % 2) { + return "#F1F1F9"; + } + return "#FBFBFF"; + }); + }); + return mychart.markerSelect().on("click", function(d) { + var r; + r = d3.select(this).attr("r"); + return d3.select(this).transition().duration(500).attr("r", r * 3).transition().duration(500).attr("r", r); }); +}; + +create_lod_chart() -}).call(this); +/* +$(function() { + return root.create_lod_chart = create_lod_chart; +}); +*/
\ No newline at end of file diff --git a/wqflask/wqflask/templates/marker_regression_gn1.html b/wqflask/wqflask/templates/marker_regression_gn1.html index dd8ae236..4eb5862a 100644 --- a/wqflask/wqflask/templates/marker_regression_gn1.html +++ b/wqflask/wqflask/templates/marker_regression_gn1.html @@ -3,22 +3,23 @@ {% block css %} <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/css/jquery.dataTables.css" /> <link rel="stylesheet" type="text/css" href="/static/packages/DT_bootstrap/DT_bootstrap.css" /> + + <link rel="stylesheet" type="text/css" href="/static/new/css/marker_regression.css" /> + <link rel="stylesheet" type="text/css" href="/static/new/css/panelutil.css" /> {% endblock %} {% from "base_macro.html" import header %} {% block content %} - {{ header("Whole Genome Mapping Results", - '{}: {}'.format(this_trait.name, this_trait.description_fmt)) }} - <div class="container"> <form method="post" target="_blank" action="/marker_regression" name="marker_regression" id="marker_regression_form"> <input type="hidden" name="temp_uuid" value="{{ temp_uuid }}"> <input type="hidden" name="trait_id" value="{{ this_trait.name }}"> <input type="hidden" name="dataset" value="{{ dataset.name }}"> + <input type="hidden" name="method" value="{{ mapping_method }}"> + {% if mapping_method != "gemma" %} {% for sample in dataset.group.samplelist %} <input type="hidden" name="value:{{ sample }}" value="{{ vals[loop.index - 1] }}"> {% endfor %} <input type="hidden" name="maf"> - <input type="hidden" name="method" value="{{ mapping_method }}"> <input type="hidden" name="selected_chr" value="{{ selectedChr }}"> <input type="hidden" name="mb_range" value="{{ startMb|string + "," + endMb|string }}"> <input type="hidden" name="manhattan_plot"> @@ -28,13 +29,80 @@ <input type="hidden" name="mapmethod_rqtl_geno" value="{{ mapmethod_rqtl_geno }}"> <input type="hidden" name="mapmodel_rqtl_geno" value="{{ mapmodel_rqtl_geno }}"> <input type="hidden" name="pair_scan" value="{{ pair_scan }}"> - <div id="chart_container"> - <div class="qtlcharts" id="topchart"> - {{ gifmap|safe }} - <img src="/static/output/{{ filename }}.jpeg" usemap="#WebQTLImageMap"> + {% endif %} + + <div class="container"> + <div class="col-xs-5"> + <h2>Map Viewer: Whole Genome</h2><br> + <b>Population:</b> {{ dataset.group.species|capitalize }} {{ dataset.group.name }}<br> + <b>Database:</b> {{ dataset.fullname }}<br> + {% if dataset.type == "ProbeSet" %}<b>Trait ID:</b>{% else %}<b>Record ID:</b>{% endif %} <a href="/show_trait?trait_id={{ this_trait.name }}&dataset={{ dataset.name }}">{{ this_trait.name }}</a><br> + {% if dataset.type == "ProbeSet" %} + <b>Gene Symbol:</b> <i>{{ this_trait.symbol }}</i><br> + <b>Location:</b> Chr {{ this_trait.chr }} @ {{ this_trait.mb }} Mb + {% endif %} + </div> + {% if mapping_method != "gemma" %} + <div id="gn1_map_options" class="col-xs-5" style="border:2px solid black; padding: 10px; margin: 10px;"> + <div class="col-xs-7" style="padding-left: 0px;"> + <table> + <tr> + <td><b>Chr: </b></td> + <td> + <select name="chromosomes" size="1"> + {% for chr in ChrList %} + <option value="{{ chr[1] }}">{{ chr[0] }}</option> + {% endfor %} + </select> + <button type="button" class="btn btn-primary">Remap</button> + </td> + </tr> + <tr> + <td><b>View: </b></td> + <td> + <input type="text" name="startMb" + </td> + </tr> + </table> + </div> + <div class="col-xs-3"> + </div> + </div> + </div> + {% endif %} + + + <div class="tabbable" style="margin: 10px;"> + <ul class="nav nav-tabs"> + {% if mapping_method != "gemma" %} + <li id="gn1_map_tab"> + <a href="#gn1_map" data-toggle="tab" aria-expanded="true">GN1 Map</a> + </li> + {% endif %} + <li id="vector_map_tab"> + <a href="#vector_map" data-toggle="tab" {% if mapping_method != "gemma" %}aria-expanded="false"{% else %}aria-expanded="true"{% endif %}>Vector Map</a> + </li> + </ul> + <div class="tab-content"> + {% if mapping_method != "gemma" %} + <div class="tab-pane active" id="gn1_map"> + <div class="qtlcharts"> + {{ gifmap|safe }} + <img src="/static/output/{{ filename }}.jpeg" usemap="#WebQTLImageMap"> + </div> </div> + {% endif %} + <div class="tab-pane {% if mapping_method == "gemma" %}active{% endif %}" id="vector_map"> + <div id="chart_container"> + <div class="qtlcharts" id="topchart"></div> + </div> + </div> + </div> </div> + </form> + + {% if mapping_method != "gemma" %} <div style="width:48%;"> <h2> Results @@ -87,6 +155,7 @@ </tbody> </table> </div> + {% endif %} </div> <!-- End of body --> @@ -95,8 +164,10 @@ {% block js %} + <script type="text/javascript" src="http://d3js.org/d3.v3.min.js"></script> <script type="text/javascript" src="/static/new/js_external/underscore-min.js"></script> <script type="text/javascript" src="/static/new/js_external/underscore.string.min.js"></script> + <script type="text/javascript" src="/static/new/js_external/d3-tip.min.js"></script> <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.dataTables.js"></script> <script language="javascript" type="text/javascript" src="https://cdn.datatables.net/buttons/1.0.0/js/dataTables.buttons.min.js"></script> @@ -111,6 +182,11 @@ js_data = {{ js_data | safe }} </script> + <script language="javascript" type="text/javascript" src="/static/new/javascript/panelutil.js"></script> + <script language="javascript" type="text/javascript" src="/static/new/javascript/chr_lod_chart.js"></script> + <script language="javascript" type="text/javascript" src="/static/new/javascript/lod_chart.js"></script> + <script language="javascript" type="text/javascript" src="/static/new/javascript/create_lodchart.js"></script> + <script type="text/javascript" charset="utf-8"> $(document).ready( function () { console.time("Creating table"); @@ -137,7 +213,15 @@ } ); console.timeEnd("Creating table"); - }); + $('#vector_map_tab').click(function(){ + $('div#gn1_map_options').hide(); + }); + + $('#gn1_map_tab').click(function(){ + $('div#gn1_map_options').show(); + }); + + }); chrView = function(this_chr, chr_mb_list) { $('input[name=selected_chr]').val(this_chr + 1) @@ -148,10 +232,10 @@ rangeView = function(this_chr, start_mb, end_mb) { $('input[name=selected_chr]').val(this_chr) - $('input[name=mb_range]').val(start_mb + "," + end_mb) - - console.log("mb_range:", $('input[name=mb_range]').val()) - + $('input[name=startMb]').val(start_mb) + $('input[name=endMb]').val(end_mb) + //$('input[name=mb_range]').val(start_mb + "," + end_mb) + return $('#marker_regression_form').submit(); }; diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py index 65b6dae4..17845826 100755 --- a/wqflask/wqflask/views.py +++ b/wqflask/wqflask/views.py @@ -352,7 +352,8 @@ def marker_regression_page(): 'control_marker_db', 'do_control', 'pair_scan', - 'mb_range', + 'startMb', + 'endMb', 'mapmethod_rqtl_geno', 'mapmodel_rqtl_geno' ) @@ -391,7 +392,8 @@ def marker_regression_page(): #for item in template_vars.__dict__.keys(): # print(" ---**--- {}: {}".format(type(template_vars.__dict__[item]), item)) - gn1_template_vars = marker_regression_gn1.MarkerRegression(result).__dict__ + if start_vars['method'] != "gemma": + gn1_template_vars = marker_regression_gn1.MarkerRegression(result).__dict__ #qtl_length = len(result['js_data']['qtl_results']) #print("qtl_length:", qtl_length) @@ -414,7 +416,10 @@ def marker_regression_page(): rendered_template = render_template("pair_scan_results.html", **result) else: #rendered_template = render_template("marker_regression.html", **result) - rendered_template = render_template("marker_regression_gn1.html", **gn1_template_vars) + if start_vars['method'] != "gemma": + rendered_template = render_template("marker_regression_gn1.html", **gn1_template_vars) + else: + rendered_template = render_template("marker_regression_gn1.html", **result) return rendered_template |