From 2b47c104b3baeb2871f7669cef41ab5a112779ea Mon Sep 17 00:00:00 2001 From: zsloan Date: Wed, 13 Apr 2016 20:41:49 +0000 Subject: Global search should be able to return description and location columns now --- wqflask/base/trait.py | 50 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) (limited to 'wqflask') diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py index ce3a7608..51a4d986 100644 --- a/wqflask/base/trait.py +++ b/wqflask/base/trait.py @@ -2,7 +2,7 @@ from __future__ import absolute_import, division, print_function import string import resource - +import codecs from htmlgen import HTMLgen2 as HT @@ -309,6 +309,42 @@ class GeneralTrait(object): holder = unicode(trait_info[i], "utf8", "ignore") setattr(self, field, holder) + description_string = unicode(str(self.description).strip(codecs.BOM_UTF8), 'utf-8') + target_string = unicode(str(self.probe_target_description).strip(codecs.BOM_UTF8), 'utf-8') + + if len(description_string) > 1 and description_string != 'None': + description_display = description_string + else: + description_display = self.symbol + + if (len(description_display) > 1 and description_display != 'N/A' and + len(target_string) > 1 and target_string != 'None'): + description_display = description_display + '; ' + target_string.strip() + + # Save it for the jinja2 template + self.description_display = description_display + + #XZ: trait_location_value is used for sorting + trait_location_repr = 'N/A' + trait_location_value = 1000000 + + if self.chr and self.mb: + #Checks if the chromosome number can be cast to an int (i.e. isn't "X" or "Y") + #This is so we can convert the location to a number used for sorting + trait_location_value = convert_location_to_value(self.chr, self.mb) + #try: + # trait_location_value = int(self.chr)*1000 + self.mb + #except ValueError: + # if self.chr.upper() == 'X': + # trait_location_value = 20*1000 + self.mb + # else: + # trait_location_value = (ord(str(self.chr).upper()[0])*1000 + + # self.mb) + + #ZS: Put this in function currently called "convert_location_to_value" + self.location_repr = 'Chr%s: %.6f' % (self.chr, float(self.mb)) + self.location_value = trait_location_value + if self.dataset.type == 'Publish': self.confidential = 0 if self.pre_publication_description and not self.pubmed_id: @@ -662,7 +698,17 @@ class GeneralTrait(object): ZValue = ZValue*sqrt(self.overlap-3) self.p_value = 2.0*(1.0 - reaper.normp(abs(ZValue))) - +def convert_location_to_value(chromosome, mb): + try: + location_value = int(chromosome)*1000 + float(mb) + except ValueError: + if chromosome.upper() == 'X': + location_value = 20*1000 + float(mb) + else: + location_value = (ord(str(chromosome).upper()[0])*1000 + + float(mb)) + + return location_value @app.route("/trait/get_sample_data") def get_sample_data(): -- cgit v1.2.3 From 15b3a1543f59a097039ae964ba26775236022401 Mon Sep 17 00:00:00 2001 From: zsloan Date: Wed, 13 Apr 2016 21:16:22 +0000 Subject: Moved the code getting the description/location because it was throwing an error for phenotype traits --- wqflask/base/trait.py | 75 ++++++++++++++++++++++++++------------------------- 1 file changed, 38 insertions(+), 37 deletions(-) (limited to 'wqflask') diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py index 51a4d986..6c5ca8b2 100644 --- a/wqflask/base/trait.py +++ b/wqflask/base/trait.py @@ -308,42 +308,6 @@ class GeneralTrait(object): if isinstance(trait_info[i], basestring): holder = unicode(trait_info[i], "utf8", "ignore") setattr(self, field, holder) - - description_string = unicode(str(self.description).strip(codecs.BOM_UTF8), 'utf-8') - target_string = unicode(str(self.probe_target_description).strip(codecs.BOM_UTF8), 'utf-8') - - if len(description_string) > 1 and description_string != 'None': - description_display = description_string - else: - description_display = self.symbol - - if (len(description_display) > 1 and description_display != 'N/A' and - len(target_string) > 1 and target_string != 'None'): - description_display = description_display + '; ' + target_string.strip() - - # Save it for the jinja2 template - self.description_display = description_display - - #XZ: trait_location_value is used for sorting - trait_location_repr = 'N/A' - trait_location_value = 1000000 - - if self.chr and self.mb: - #Checks if the chromosome number can be cast to an int (i.e. isn't "X" or "Y") - #This is so we can convert the location to a number used for sorting - trait_location_value = convert_location_to_value(self.chr, self.mb) - #try: - # trait_location_value = int(self.chr)*1000 + self.mb - #except ValueError: - # if self.chr.upper() == 'X': - # trait_location_value = 20*1000 + self.mb - # else: - # trait_location_value = (ord(str(self.chr).upper()[0])*1000 + - # self.mb) - - #ZS: Put this in function currently called "convert_location_to_value" - self.location_repr = 'Chr%s: %.6f' % (self.chr, float(self.mb)) - self.location_value = trait_location_value if self.dataset.type == 'Publish': self.confidential = 0 @@ -378,8 +342,8 @@ class GeneralTrait(object): if self.pubmed_id: self.pubmed_link = webqtlConfig.PUBMEDLINK_URL % self.pubmed_id + self.homologeneid = None - if self.dataset.type == 'ProbeSet' and self.dataset.group and self.geneid: #XZ, 05/26/2010: From time to time, this query get error message because some geneid values in database are not number. #XZ: So I have to test if geneid is number before execute the query. @@ -407,6 +371,43 @@ class GeneralTrait(object): if result: self.homologeneid = result[0] + + description_string = unicode(str(self.description).strip(codecs.BOM_UTF8), 'utf-8') + target_string = unicode(str(self.probe_target_description).strip(codecs.BOM_UTF8), 'utf-8') + + if len(description_string) > 1 and description_string != 'None': + description_display = description_string + else: + description_display = self.symbol + + if (len(description_display) > 1 and description_display != 'N/A' and + len(target_string) > 1 and target_string != 'None'): + description_display = description_display + '; ' + target_string.strip() + + # Save it for the jinja2 template + self.description_display = description_display + + #XZ: trait_location_value is used for sorting + trait_location_repr = 'N/A' + trait_location_value = 1000000 + + if self.chr and self.mb: + #Checks if the chromosome number can be cast to an int (i.e. isn't "X" or "Y") + #This is so we can convert the location to a number used for sorting + trait_location_value = convert_location_to_value(self.chr, self.mb) + #try: + # trait_location_value = int(self.chr)*1000 + self.mb + #except ValueError: + # if self.chr.upper() == 'X': + # trait_location_value = 20*1000 + self.mb + # else: + # trait_location_value = (ord(str(self.chr).upper()[0])*1000 + + # self.mb) + + #ZS: Put this in function currently called "convert_location_to_value" + self.location_repr = 'Chr%s: %.6f' % (self.chr, float(self.mb)) + self.location_value = trait_location_value + if get_qtl_info: #LRS and its location -- cgit v1.2.3 From be3c688ac3ddcc4f10a359bf68792e05dca63973 Mon Sep 17 00:00:00 2001 From: zsloan Date: Thu, 14 Apr 2016 21:19:12 +0000 Subject: Fixed issue where qtl lines in interval mapping wouldn't connect between chromosomes Added text explaining what * indicates in the mapping options menu Removed ranges (log2 and fold) from stats table for phenotype traits --- wqflask/wqflask/marker_regression/marker_regression_gn1.py | 8 +++----- wqflask/wqflask/search_results.py | 4 ++-- wqflask/wqflask/show_trait/show_trait.py | 9 +++++---- wqflask/wqflask/static/new/javascript/show_trait.js | 3 +++ wqflask/wqflask/templates/marker_regression_gn1.html | 9 ++++++--- wqflask/wqflask/templates/show_trait_statistics.html | 1 - 6 files changed, 19 insertions(+), 15 deletions(-) mode change 100755 => 100644 wqflask/wqflask/static/new/javascript/show_trait.js (limited to 'wqflask') diff --git a/wqflask/wqflask/marker_regression/marker_regression_gn1.py b/wqflask/wqflask/marker_regression/marker_regression_gn1.py index 63f62411..c10aac73 100644 --- a/wqflask/wqflask/marker_regression/marker_regression_gn1.py +++ b/wqflask/wqflask/marker_regression/marker_regression_gn1.py @@ -2015,6 +2015,9 @@ class MarkerRegression(object): thisLRSColor = self.colorCollection[0] if qtlresult['chr'] != previous_chr and self.selectedChr == -1: + if self.manhattan_plot != True: + canvas.drawPolygon(LRSCoordXY,edgeColor=thisLRSColor,closed=0, edgeWidth=lrsEdgeWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth)) + LRSCoordXY = [] previous_chr = qtlresult['chr'] previous_chr_as_int += 1 @@ -2032,7 +2035,6 @@ class MarkerRegression(object): else: this_chr = str(self.ChrList[self.selectedChr][1]+1) if self.selectedChr == -1 or str(qtlresult['chr']) == this_chr: - #LRSCoordXY = [] #AdditiveCoordXY = [] #DominanceCoordXY = [] #for k, _locus in enumerate(_chr): @@ -2087,7 +2089,6 @@ class MarkerRegression(object): # Yc = yZero - qtlresult['dominance']*DominanceHeightThresh/dominanceMax # DominanceCoordXY.append((Xc, Yc)) m += 1 - #canvas.drawPolygon(LRSCoordXY,edgeColor=thisLRSColor,closed=0, edgeWidth=lrsEdgeWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth)) lineWidth = 1 @@ -2151,9 +2152,6 @@ class MarkerRegression(object): canvas.drawLine(Xc0, yZero - (Yc0-yZero), Xc, yZero - (Yc-yZero), color=minusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth)) - if self.manhattan_plot != True: - canvas.drawPolygon(LRSCoordXY,edgeColor=thisLRSColor,closed=0, edgeWidth=lrsEdgeWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth)) - ###draw additive scale if not self.multipleInterval and self.additiveChecked: additiveScaleFont=pid.Font(ttf="verdana",size=16*zoom,bold=0) diff --git a/wqflask/wqflask/search_results.py b/wqflask/wqflask/search_results.py index fb03f027..a57bfffe 100755 --- a/wqflask/wqflask/search_results.py +++ b/wqflask/wqflask/search_results.py @@ -119,9 +119,9 @@ class SearchResultPage(object): #### Excel file needs to be generated #### - print("foo locals are:", locals()) + #print("foo locals are:", locals()) trait_id = result[0] - this_trait = GeneralTrait(dataset=self.dataset, name=trait_id, get_qtl_info=True) + this_trait = GeneralTrait(dataset=self.dataset, name=trait_id, get_qtl_info=True, get_sample_info=False) self.trait_list.append(this_trait) self.dataset.get_trait_info(self.trait_list, species) diff --git a/wqflask/wqflask/show_trait/show_trait.py b/wqflask/wqflask/show_trait/show_trait.py index 3cc6121f..2d4c952a 100755 --- a/wqflask/wqflask/show_trait/show_trait.py +++ b/wqflask/wqflask/show_trait/show_trait.py @@ -152,10 +152,11 @@ class ShowTrait(object): self.trait_table_width = get_trait_table_width(self.sample_groups) - js_data = dict(sample_group_types = self.sample_group_types, - sample_lists = sample_lists, - attribute_names = self.sample_groups[0].attributes, - temp_uuid = self.temp_uuid) + js_data = dict(dataset_type = self.dataset.type, + sample_group_types = self.sample_group_types, + sample_lists = sample_lists, + attribute_names = self.sample_groups[0].attributes, + temp_uuid = self.temp_uuid) self.js_data = js_data def get_mapping_methods(self): diff --git a/wqflask/wqflask/static/new/javascript/show_trait.js b/wqflask/wqflask/static/new/javascript/show_trait.js old mode 100755 new mode 100644 index 8d5982b7..663f7f3b --- a/wqflask/wqflask/static/new/javascript/show_trait.js +++ b/wqflask/wqflask/static/new/javascript/show_trait.js @@ -186,6 +186,9 @@ the_rows = ""; for (_i = 0, _len = Stat_Table_Rows.length; _i < _len; _i++) { row = Stat_Table_Rows[_i]; + if ((row.vn == "range_fold" || row.vn == "range") && js_data.dataset_type == "Publish"){ + continue; + } console.log("rowing"); row_line = ""; if (row.url != null) { diff --git a/wqflask/wqflask/templates/marker_regression_gn1.html b/wqflask/wqflask/templates/marker_regression_gn1.html index d7950754..c65948c0 100644 --- a/wqflask/wqflask/templates/marker_regression_gn1.html +++ b/wqflask/wqflask/templates/marker_regression_gn1.html @@ -87,8 +87,8 @@ - -
+
+
{% if (mapping_method == "reaper" or mapping_method == "rqtl_geno") and nperm > 0 %} Permutation Test @@ -121,7 +121,10 @@ {% if plotScale != "morgan" %} Haplotype Analyst * {% endif %} -
+ +
+ * only apply to single chromosome physical mapping +
diff --git a/wqflask/wqflask/templates/show_trait_statistics.html b/wqflask/wqflask/templates/show_trait_statistics.html index 2183dd30..9c5c94b2 100755 --- a/wqflask/wqflask/templates/show_trait_statistics.html +++ b/wqflask/wqflask/templates/show_trait_statistics.html @@ -27,7 +27,6 @@
-
-- cgit v1.2.3 From e0c5c1aae3aaaa1d81bcec36835a97e169dcc2e2 Mon Sep 17 00:00:00 2001 From: zsloan Date: Mon, 18 Apr 2016 18:19:24 +0000 Subject: Additive effect lines are now separated by chromosome (like the qtl line in the last commit) Fixed order of stats table in trait page Removed the qtl results table from chromosome view; will add the Interval Analyst output later --- .../marker_regression/marker_regression_gn1.py | 38 +++++++++++++++++++++- .../wqflask/static/new/javascript/show_trait.js | 5 --- .../wqflask/templates/marker_regression_gn1.html | 2 ++ wqflask/wqflask/templates/show_trait.html | 14 ++++---- 4 files changed, 45 insertions(+), 14 deletions(-) (limited to 'wqflask') diff --git a/wqflask/wqflask/marker_regression/marker_regression_gn1.py b/wqflask/wqflask/marker_regression/marker_regression_gn1.py index c10aac73..01303b0f 100644 --- a/wqflask/wqflask/marker_regression/marker_regression_gn1.py +++ b/wqflask/wqflask/marker_regression/marker_regression_gn1.py @@ -2007,6 +2007,7 @@ class MarkerRegression(object): previous_chr = 1 previous_chr_as_int = 0 + lineWidth = 1 oldStartPosX = 0 startPosX = xLeftOffset for i, qtlresult in enumerate(self.qtlresults): @@ -2017,7 +2018,39 @@ class MarkerRegression(object): if qtlresult['chr'] != previous_chr and self.selectedChr == -1: if self.manhattan_plot != True: canvas.drawPolygon(LRSCoordXY,edgeColor=thisLRSColor,closed=0, edgeWidth=lrsEdgeWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth)) + + if not self.multipleInterval and self.additiveChecked: + plusColor = self.ADDITIVE_COLOR_POSITIVE + minusColor = self.ADDITIVE_COLOR_NEGATIVE + for k, aPoint in enumerate(AdditiveCoordXY): + if k > 0: + Xc0, Yc0 = AdditiveCoordXY[k-1] + Xc, Yc = aPoint + if (Yc0-yZero)*(Yc-yZero) < 0: + if Xc == Xc0: #genotype , locus distance is 0 + Xcm = Xc + else: + Xcm = (yZero-Yc0)/((Yc-Yc0)/(Xc-Xc0)) +Xc0 + if Yc0 < yZero: + canvas.drawLine(Xc0, Yc0, Xcm, yZero, color=plusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth)) + canvas.drawLine(Xcm, yZero, Xc, yZero-(Yc-yZero), color=minusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth)) + else: + canvas.drawLine(Xc0, yZero - (Yc0-yZero), Xcm, yZero, color=minusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth)) + canvas.drawLine(Xcm, yZero, Xc, Yc, color=plusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth)) + elif (Yc0-yZero)*(Yc-yZero) > 0: + if Yc < yZero: + canvas.drawLine(Xc0, Yc0, Xc, Yc, color=plusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth)) + else: + canvas.drawLine(Xc0, yZero - (Yc0-yZero), Xc, yZero - (Yc-yZero), color=minusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth)) + else: + minYc = min(Yc-yZero, Yc0-yZero) + if minYc < 0: + canvas.drawLine(Xc0, Yc0, Xc, Yc, color=plusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth)) + else: + canvas.drawLine(Xc0, yZero - (Yc0-yZero), Xc, yZero - (Yc-yZero), color=minusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth)) + LRSCoordXY = [] + AdditiveCoordXY = [] previous_chr = qtlresult['chr'] previous_chr_as_int += 1 @@ -2091,7 +2124,9 @@ class MarkerRegression(object): m += 1 #canvas.drawPolygon(LRSCoordXY,edgeColor=thisLRSColor,closed=0, edgeWidth=lrsEdgeWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth)) - lineWidth = 1 + if self.manhattan_plot != True: + canvas.drawPolygon(LRSCoordXY,edgeColor=thisLRSColor,closed=0, edgeWidth=lrsEdgeWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth)) + if not self.multipleInterval and self.additiveChecked: plusColor = self.ADDITIVE_COLOR_POSITIVE minusColor = self.ADDITIVE_COLOR_NEGATIVE @@ -2121,6 +2156,7 @@ class MarkerRegression(object): canvas.drawLine(Xc0, Yc0, Xc, Yc, color=plusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth)) else: canvas.drawLine(Xc0, yZero - (Yc0-yZero), Xc, yZero - (Yc-yZero), color=minusColor, width=lineWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth)) + if not self.multipleInterval and INTERCROSS and self.dominanceChecked: plusColor = self.DOMINANCE_COLOR_POSITIVE minusColor = self.DOMINANCE_COLOR_NEGATIVE diff --git a/wqflask/wqflask/static/new/javascript/show_trait.js b/wqflask/wqflask/static/new/javascript/show_trait.js index 663f7f3b..9e249c28 100644 --- a/wqflask/wqflask/static/new/javascript/show_trait.js +++ b/wqflask/wqflask/static/new/javascript/show_trait.js @@ -174,7 +174,6 @@ make_table = function() { var header, key, row, row_line, table, the_id, the_rows, value, _i, _len, _ref, _ref1; header = " "; - console.log("js_data.sample_group_types:", js_data.sample_group_types); _ref = js_data.sample_group_types; for (key in _ref) { if (!__hasProp.call(_ref, key)) continue; @@ -189,14 +188,12 @@ if ((row.vn == "range_fold" || row.vn == "range") && js_data.dataset_type == "Publish"){ continue; } - console.log("rowing"); row_line = ""; if (row.url != null) { row_line += "" + row.pretty + ""; } else { row_line += "" + row.pretty + ""; } - console.log("box - js_data.sample_group_types:", js_data.sample_group_types); _ref1 = js_data.sample_group_types; for (key in _ref1) { if (!__hasProp.call(_ref1, key)) continue; @@ -205,12 +202,10 @@ row_line += "foo"; } row_line += ""; - console.log("row line:", row_line); the_rows += row_line; } the_rows += ""; table = header + the_rows; - console.log("table is:", table); return $("#stats_table").append(table); }; process_id = function() { diff --git a/wqflask/wqflask/templates/marker_regression_gn1.html b/wqflask/wqflask/templates/marker_regression_gn1.html index c65948c0..f3f33fad 100644 --- a/wqflask/wqflask/templates/marker_regression_gn1.html +++ b/wqflask/wqflask/templates/marker_regression_gn1.html @@ -165,6 +165,7 @@
+ {% if selectedChr == -1 %}

Results @@ -222,6 +223,7 @@

+ {% endif %} diff --git a/wqflask/wqflask/templates/show_trait.html b/wqflask/wqflask/templates/show_trait.html index 62a08d85..7429cd5f 100755 --- a/wqflask/wqflask/templates/show_trait.html +++ b/wqflask/wqflask/templates/show_trait.html @@ -257,12 +257,10 @@ console.log("SAMPLE GROUP TYPES:", js_data.sample_group_types) if (Object.keys(js_data.sample_group_types).length > 1) { $('#stats_table').DataTable( { - "columns": [ - { "bSortable": false }, - { "bSortable": false }, - { "bSortable": false }, - { "bSortable": false } + "columnDefs": [ + { "orderable": false, "targets": [0, 1, 2, 3] } ], + "order": [], "sDom": "tr", "iDisplayLength": -1, "autoWidth": false, @@ -274,10 +272,10 @@ } else { $('#stats_table').DataTable( { - "columns": [ - { "bSortable": false }, - { "bSortable": false } + "columnDefs": [ + { "orderable": false, "targets": [0, 1] } ], + "order": [], "sDom": "tr", "iDisplayLength": -1, "autoWidth": false, -- cgit v1.2.3