From 25d91ca2264a1ef0a7a41c0e71c0a1138e764065 Mon Sep 17 00:00:00 2001 From: Ethan Willis Date: Mon, 19 Oct 2015 23:37:59 -0500 Subject: Enhancement of fix for bug #98. Refuses submission of search form if search terms are empty. This avoids an internal server error. --- wqflask/wqflask/templates/index_page.html | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/wqflask/wqflask/templates/index_page.html b/wqflask/wqflask/templates/index_page.html index 6c630344..8b66a5b0 100755 --- a/wqflask/wqflask/templates/index_page.html +++ b/wqflask/wqflask/templates/index_page.html @@ -270,10 +270,13 @@ function pressed(e) { // Has the enter key been pressed? if ( (window.event ? event.keyCode : e.which) == 13) { - // If it has been so, manually submit the
- document.forms[1].submit(); + // If enter key has been pressed and the search fields are non-empty + // manually submit the + if( event.target.value != "" ) { + document.forms[1].submit(); + } } } -{% endblock %} \ No newline at end of file +{% endblock %} -- cgit v1.2.3 From d43cece0a78ef5aaba736fcc1e91fba5ed2312df Mon Sep 17 00:00:00 2001 From: Ethan Willis Date: Tue, 20 Oct 2015 00:48:35 -0500 Subject: Updated wgcna_setup to use Bootstrap error messages and form styling. --- wqflask/wqflask/templates/wgcna_setup.html | 66 ++++++++++++++++++++---------- 1 file changed, 45 insertions(+), 21 deletions(-) diff --git a/wqflask/wqflask/templates/wgcna_setup.html b/wqflask/wqflask/templates/wgcna_setup.html index 49181938..8ab8c4a0 100644 --- a/wqflask/wqflask/templates/wgcna_setup.html +++ b/wqflask/wqflask/templates/wgcna_setup.html @@ -2,27 +2,51 @@ {% block title %}WCGNA analysis{% endblock %} {% block content %} - -
- -

WGCNA analysis parameters

- {% if request.form['trait_list'].split(",")|length <= 4 %} - -

ERROR: Too few phenotypes as input

- Please make sure you select enough phenotypes / genes to perform WGCNA, - your collection needs to contain at least 4 different phenotypes. You provided {{request.form['trait_list'].split(',')|length}} phenotypes as input +

WGCNA analysis parameters

+
+ {% if request.form['trait_list'].split(",")|length <= 4 %} + {% else %} - - - - - - -
Soft threshold:
Minimum module size:
TOMtype:
mergeCutHeight:
- - {% endif %} -
- +
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+
+
+ {% endif %} +
{% endblock %} - -- cgit v1.2.3 From e8667004745087b045b323ea44949bb6d58770dd Mon Sep 17 00:00:00 2001 From: zsloan Date: Thu, 22 Oct 2015 17:43:06 +0000 Subject: Added factor loadings table and plot (though need to finish improving plot still) Fixed issue where cM locations for R/qtl were displayed as Mb and had used Mb Chr lenghts for the scale --- .../wqflask/correlation_matrix/show_corr_matrix.py | 51 ++++++++++++++-------- .../wqflask/marker_regression/marker_regression.py | 4 ++ wqflask/wqflask/static/new/css/corr_matrix.css | 18 ++++++++ .../wqflask/static/new/javascript/chr_lod_chart.js | 19 ++++++-- .../static/new/javascript/create_lodchart.js | 4 +- wqflask/wqflask/static/new/javascript/lod_chart.js | 13 ++++-- wqflask/wqflask/static/new/javascript/panelutil.js | 12 ++++- wqflask/wqflask/templates/correlation_matrix.html | 45 ++++++++++++++++--- wqflask/wqflask/templates/marker_regression.html | 4 ++ wqflask/wqflask/templates/search_result_page.html | 4 ++ 10 files changed, 137 insertions(+), 37 deletions(-) diff --git a/wqflask/wqflask/correlation_matrix/show_corr_matrix.py b/wqflask/wqflask/correlation_matrix/show_corr_matrix.py index 2cdd989f..6bc0ef77 100755 --- a/wqflask/wqflask/correlation_matrix/show_corr_matrix.py +++ b/wqflask/wqflask/correlation_matrix/show_corr_matrix.py @@ -95,35 +95,24 @@ class CorrelationMatrix(object): #self.sample_data[this_trait.name].append('') self.sample_data.append(this_trait_vals) + self.lowest_overlap = 8 #ZS: Variable set to the lowest overlapping samples in order to notify user, or 8, whichever is lower (since 8 is when we want to display warning) + self.corr_results = [] - self.corr_results_for_pca = [] + self.pca_corr_results = [] for trait_db in self.trait_list: this_trait = trait_db[0] this_db = trait_db[1] this_db_samples = this_db.group.samplelist - - #for sample in this_db_samples: - # if sample not in self.samples: - # self.samples.append(sample) - this_sample_data = this_trait.data - print("this_sample_data", len(this_sample_data)) - - #for sample in this_sample_data: - # if sample not in self.all_sample_list: - # self.all_sample_list.append(sample) corr_result_row = [] + pca_corr_result_row = [] is_spearman = False #ZS: To determine if it's above or below the diagonal for target in self.trait_list: target_trait = target[0] target_db = target[1] target_samples = target_db.group.samplelist - - #if this_trait == target_trait and this_db == target_db: - # corr_result_row.append(1) - # continue target_sample_data = target_trait.data print("target_samples", len(target_samples)) @@ -139,19 +128,26 @@ class CorrelationMatrix(object): target_vals.append(target_sample_value) this_trait_vals, target_vals, num_overlap = corr_result_helpers.normalize_values(this_trait_vals, target_vals) + + if num_overlap < self.lowest_overlap: + self.lowest_overlap = num_overlap if num_overlap == 0: corr_result_row.append([target_trait, 0, num_overlap]) + pca_corr_result_row.append(0) else: + pearson_r, pearson_p = scipy.stats.pearsonr(this_trait_vals, target_vals) if is_spearman == False: - sample_r, sample_p = scipy.stats.pearsonr(this_trait_vals, target_vals) + sample_r, sample_p = pearson_r, pearson_p if sample_r == 1: is_spearman = True else: sample_r, sample_p = scipy.stats.spearmanr(this_trait_vals, target_vals) corr_result_row.append([target_trait, sample_r, num_overlap]) + pca_corr_result_row.append(pearson_r) self.corr_results.append(corr_result_row) + self.pca_corr_results.append(pca_corr_result_row) print("corr_results:", pf(self.corr_results)) @@ -159,8 +155,9 @@ class CorrelationMatrix(object): for sample in self.all_sample_list: groups.append(1) - #pca = self.calculate_pca(self.corr_results, range(len(self.traits))) + pca = self.calculate_pca(self.pca_corr_results, range(len(self.traits))) + self.loadings_array = self.process_loadings() self.js_data = dict(traits = [trait.name for trait in self.traits], groups = groups, @@ -211,8 +208,24 @@ class CorrelationMatrix(object): print("eigen:", eigen) pca = stats.princomp(m, cor = "TRUE") print("pca:", pca) - print("loadings:", pca.rx('loadings')) + self.loadings = pca.rx('loadings') + self.scores = pca.rx('scores') + self.scale = pca.rx('scale') print("scores:", pca.rx('scores')) print("scale:", pca.rx('scale')) - return pca \ No newline at end of file + return pca + + def process_loadings(self): + loadings_array = [] + loadings_row = [] + print("before loop:", self.loadings[0]) + for i in range(len(self.trait_list)): + loadings_row = [] + for j in range(3): + position = i + len(self.trait_list)*j + loadings_row.append(self.loadings[0][position]) + loadings_array.append(loadings_row) + print("loadings:", loadings_array) + return loadings_array + diff --git a/wqflask/wqflask/marker_regression/marker_regression.py b/wqflask/wqflask/marker_regression/marker_regression.py index b33efc1f..dc7ebfcc 100755 --- a/wqflask/wqflask/marker_regression/marker_regression.py +++ b/wqflask/wqflask/marker_regression/marker_regression.py @@ -74,6 +74,7 @@ class MarkerRegression(object): self.significant = "" self.pair_scan = False # Initializing this since it is checked in views to determine which template to use self.score_type = "LRS" #ZS: LRS or LOD + self.mapping_scale = "megabase" self.dataset.group.get_markers() if self.mapping_method == "gemma": @@ -86,6 +87,7 @@ class MarkerRegression(object): results = self.run_rqtl_plink() elif self.mapping_method == "rqtl_geno": self.score_type = "LOD" + self.mapping_scale = "centimorgan" if start_vars['num_perm'] == "": self.num_perm = 0 else: @@ -136,6 +138,7 @@ class MarkerRegression(object): data_set = self.dataset.name, maf = self.maf, manhattan_plot = self.manhattan_plot, + mapping_scale = self.mapping_scale, qtl_results = self.qtl_results, ) @@ -191,6 +194,7 @@ class MarkerRegression(object): data_set = self.dataset.name, maf = self.maf, manhattan_plot = self.manhattan_plot, + mapping_scale = self.mapping_scale, chromosomes = chromosome_mb_lengths, qtl_results = self.qtl_results, ) diff --git a/wqflask/wqflask/static/new/css/corr_matrix.css b/wqflask/wqflask/static/new/css/corr_matrix.css index f4838f77..495ca28c 100755 --- a/wqflask/wqflask/static/new/css/corr_matrix.css +++ b/wqflask/wqflask/static/new/css/corr_matrix.css @@ -10,3 +10,21 @@ width: 100px; float: left; } + +.chart { + +} + +.main text { + font: 10px sans-serif; +} + +.axis line, .axis path { + shape-rendering: crispEdges; + stroke: black; + fill: none; +} + +circle { + fill: steelblue; +} diff --git a/wqflask/wqflask/static/new/javascript/chr_lod_chart.js b/wqflask/wqflask/static/new/javascript/chr_lod_chart.js index 616a89f6..60878978 100644 --- a/wqflask/wqflask/static/new/javascript/chr_lod_chart.js +++ b/wqflask/wqflask/static/new/javascript/chr_lod_chart.js @@ -2,11 +2,12 @@ var Chr_Lod_Chart; Chr_Lod_Chart = (function() { - function Chr_Lod_Chart(plot_height, plot_width, chr, manhattanPlot) { + function Chr_Lod_Chart(plot_height, plot_width, chr, manhattanPlot, mappingScale) { this.plot_height = plot_height; this.plot_width = plot_width; this.chr = chr; this.manhattanPlot = manhattanPlot; + this.mappingScale = mappingScale; this.qtl_results = js_data.qtl_results; console.log("qtl_results are:", this.qtl_results); console.log("chr is:", this.chr); @@ -65,8 +66,6 @@ Chr_Lod_Chart = (function() { } else { this_chr = result.chr; } - console.log("this_chr is:", this_chr); - console.log("@chr[0] is:", parseInt(this.chr[0])); if (this_chr > parseInt(this.chr[0])) { break; } @@ -120,7 +119,19 @@ Chr_Lod_Chart = (function() { }; Chr_Lod_Chart.prototype.create_scales = function() { - this.x_scale = d3.scale.linear().domain([0, this.chr[1]]).range([this.x_buffer, this.plot_width]); + if (this.mappingScale == "centimorgan") { + max_pos = 0 + for (i = 0, len = this.these_results.length; i < len; i++) { + marker = this.these_results[i] + if (parseFloat(marker['Mb']) > max_pos){ + max_pos = parseFloat(marker.Mb) + } + } + this.x_scale = d3.scale.linear().domain([0, max_pos]).range([this.x_buffer, this.plot_width]); + } + else { + this.x_scale = d3.scale.linear().domain([0, this.chr[1]]).range([this.x_buffer, this.plot_width]); + } return this.y_scale = d3.scale.linear().domain([0, this.y_max]).range([this.plot_height, this.y_buffer]); }; diff --git a/wqflask/wqflask/static/new/javascript/create_lodchart.js b/wqflask/wqflask/static/new/javascript/create_lodchart.js index b8fcf1f8..c756d842 100644 --- a/wqflask/wqflask/static/new/javascript/create_lodchart.js +++ b/wqflask/wqflask/static/new/javascript/create_lodchart.js @@ -16,8 +16,8 @@ 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").manhattanPlot(js_data.manhattan_plot); + 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(); diff --git a/wqflask/wqflask/static/new/javascript/lod_chart.js b/wqflask/wqflask/static/new/javascript/lod_chart.js index d0d39fe6..014bf59b 100644 --- a/wqflask/wqflask/static/new/javascript/lod_chart.js +++ b/wqflask/wqflask/static/new/javascript/lod_chart.js @@ -2,7 +2,7 @@ var lodchart; lodchart = function() { - var additive, additive_ylab, additive_ylim, additive_yscale, additive_yticks, additivelinecolor, axispos, chart, chrGap, chrSelect, darkrect, height, lightrect, linewidth, lodcurve, lodlinecolor, lodvarname, manhattanPlot, margin, markerSelect, nyticks, pad4heatmap, pointcolor, pointsAtMarkers, pointsize, pointstroke, rotate_ylab, significantcolor, suggestivecolor, title, titlepos, width, xlab, xscale, ylab, ylim, yscale, yticks; + var additive, additive_ylab, additive_ylim, additive_yscale, additive_yticks, additivelinecolor, axispos, chart, chrGap, chrSelect, darkrect, height, lightrect, linewidth, lodcurve, lodlinecolor, lodvarname, manhattanPlot, mappingScale, margin, markerSelect, nyticks, pad4heatmap, pointcolor, pointsAtMarkers, pointsize, pointstroke, rotate_ylab, significantcolor, suggestivecolor, title, titlepos, width, xlab, xscale, ylab, ylim, yscale, yticks; width = 800; height = 500; margin = { @@ -97,7 +97,7 @@ lodchart = function() { additive_yticks = additive_yticks != null ? additive_yticks : additive_yscale.ticks(nyticks); } reorgLodData(data, lodvarname); - data = chrscales(data, width, chrGap, margin.left, pad4heatmap); + data = chrscales(data, width, chrGap, margin.left, pad4heatmap, mappingScale); xscale = data.xscale; chrSelect = g.append("g").attr("class", "chrRect").selectAll("empty").data(data.chrnames).enter().append("rect").attr("id", function(d) { return "chrrect" + d[0]; @@ -133,7 +133,7 @@ lodchart = function() { var chr_plot; $('#topchart').remove(); $('#chart_container').append('
'); - return chr_plot = new Chr_Lod_Chart(600, 1200, chr_ob, manhattanPlot); + return chr_plot = new Chr_Lod_Chart(600, 1200, chr_ob, manhattanPlot, mappingScale); }; rotate_ylab = rotate_ylab != null ? rotate_ylab : ylab.length > 1; yaxis = g.append("g").attr("class", "y axis"); @@ -305,6 +305,13 @@ lodchart = function() { manhattanPlot = value; return chart; }; + chart.mappingScale = function(value) { + if (!arguments.length) { + return mappingScale; + } + mappingScale = value; + return chart; + }; chart.ylim = function(value) { if (!arguments.length) { return ylim; diff --git a/wqflask/wqflask/static/new/javascript/panelutil.js b/wqflask/wqflask/static/new/javascript/panelutil.js index 113512b4..5a931f7d 100644 --- a/wqflask/wqflask/static/new/javascript/panelutil.js +++ b/wqflask/wqflask/static/new/javascript/panelutil.js @@ -105,7 +105,7 @@ reorgLodData = function(data, lodvarname) { return data; }; -chrscales = function(data, width, chrGap, leftMargin, pad4heatmap) { +chrscales = function(data, width, chrGap, leftMargin, pad4heatmap, mappingScale) { var L, chr, chrEnd, chrLength, chrStart, cur, d, i, maxd, rng, totalChrLength, w, _i, _j, _len, _len1, _ref, _ref1; chrStart = []; chrEnd = []; @@ -156,7 +156,15 @@ chrscales = function(data, width, chrGap, leftMargin, pad4heatmap) { w = Math.round((width - chrGap * (data.chrnames.length - pad4heatmap)) / totalChrLength * chrLength[i]); data.chrEnd.push(cur + w); cur = data.chrEnd[i] + chrGap; - data.xscale[chr[0]] = d3.scale.linear().domain([chrStart[i], chrEnd[i]]).range([data.chrStart[i], data.chrEnd[i]]); + + if (mappingScale == "centimorgan") { + max_pos = d3.max(data.posByChr[chr[0]]) + console.log("max_pos:", max_pos) + data.xscale[chr[0]] = d3.scale.linear().domain([chrStart[i], max_pos]).range([data.chrStart[i], data.chrEnd[i]]); + } + else { + data.xscale[chr[0]] = d3.scale.linear().domain([chrStart[i], chrEnd[i]]).range([data.chrStart[i], data.chrEnd[i]]); + } } return data; }; diff --git a/wqflask/wqflask/templates/correlation_matrix.html b/wqflask/wqflask/templates/correlation_matrix.html index c822b8bc..593c7bea 100755 --- a/wqflask/wqflask/templates/correlation_matrix.html +++ b/wqflask/wqflask/templates/correlation_matrix.html @@ -12,7 +12,9 @@ {{ header("Correlation Matrix") }} - +{% if lowest_overlap < 8 %} +
Caution: This matrix of correlations contains some cells with small sample sizes of fewer than 8.
+{% endif %} @@ -42,18 +44,48 @@
+
+ +
+ + + + + + + + + + + + {% for row in loadings_array %} + {% set row_counter = loop.index-1 %} + + + {% for column in row %} + + {% endfor %} + + {% endfor %} + + +
Factor 1Factor 2Factor 2
+ + {{ traits[loop.index-1].name }} + + {{ '%0.3f' % loadings_array[row_counter][loop.index-1]|float }}
{% endblock %} {% block js %} @@ -65,7 +97,6 @@ - - + {% endblock %} diff --git a/wqflask/wqflask/templates/marker_regression.html b/wqflask/wqflask/templates/marker_regression.html index 2d0b6256..ad117337 100755 --- a/wqflask/wqflask/templates/marker_regression.html +++ b/wqflask/wqflask/templates/marker_regression.html @@ -36,7 +36,11 @@ Index {{ score_type }} Chr + {% if mapping_scale == "centimorgan" %} + cM + {% else %} Mb + {% endif %} Locus diff --git a/wqflask/wqflask/templates/search_result_page.html b/wqflask/wqflask/templates/search_result_page.html index f29b907d..e304be1c 100755 --- a/wqflask/wqflask/templates/search_result_page.html +++ b/wqflask/wqflask/templates/search_result_page.html @@ -15,6 +15,7 @@ +

We searched {{ dataset.fullname }} to find all records that match {% for word in search_terms %} @@ -49,6 +50,8 @@

+ {% endif %}

-- cgit v1.2.3 From 6c48172bcff84c35151797ab8aab0cf30d5aea93 Mon Sep 17 00:00:00 2001 From: Ethan Willis Date: Thu, 22 Oct 2015 20:57:41 -0500 Subject: Fixes issue #98. Doesn't submit search request if the search request contains *only* whitespace. --- wqflask/wqflask/templates/index_page.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wqflask/wqflask/templates/index_page.html b/wqflask/wqflask/templates/index_page.html index 8b66a5b0..4803b17c 100755 --- a/wqflask/wqflask/templates/index_page.html +++ b/wqflask/wqflask/templates/index_page.html @@ -272,7 +272,7 @@ if ( (window.event ? event.keyCode : e.which) == 13) { // If enter key has been pressed and the search fields are non-empty // manually submit the - if( event.target.value != "" ) { + if( event.target.value.trim() != "" ) { document.forms[1].submit(); } } -- cgit v1.2.3 From a32c43862e8296d6add32c0df5a3507229d79009 Mon Sep 17 00:00:00 2001 From: Ethan Willis Date: Thu, 22 Oct 2015 21:56:04 -0500 Subject: Fixes issue #126. Fixed broken references to dbdoc folder. They now all point to static/dbdoc. Added static/dbdoc folder. --- .DS_Store | Bin 0 -> 6148 bytes wqflask/.DS_Store | Bin 0 -> 6148 bytes wqflask/wqflask/.DS_Store | Bin 0 -> 6148 bytes wqflask/wqflask/static/dbdoc/TODO.md | 1 + wqflask/wqflask/templates/correlation_page.html | 4 ++-- wqflask/wqflask/templates/search_result_page.html | 2 +- wqflask/wqflask/templates/show_trait_details.html | 2 +- 7 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 .DS_Store create mode 100644 wqflask/.DS_Store create mode 100644 wqflask/wqflask/.DS_Store create mode 100644 wqflask/wqflask/static/dbdoc/TODO.md diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 00000000..d992942f Binary files /dev/null and b/.DS_Store differ diff --git a/wqflask/.DS_Store b/wqflask/.DS_Store new file mode 100644 index 00000000..d992942f Binary files /dev/null and b/wqflask/.DS_Store differ diff --git a/wqflask/wqflask/.DS_Store b/wqflask/wqflask/.DS_Store new file mode 100644 index 00000000..a119e235 Binary files /dev/null and b/wqflask/wqflask/.DS_Store differ diff --git a/wqflask/wqflask/static/dbdoc/TODO.md b/wqflask/wqflask/static/dbdoc/TODO.md new file mode 100644 index 00000000..c0a8bab7 --- /dev/null +++ b/wqflask/wqflask/static/dbdoc/TODO.md @@ -0,0 +1 @@ +TODO: Add all database documentation into this folder diff --git a/wqflask/wqflask/templates/correlation_page.html b/wqflask/wqflask/templates/correlation_page.html index b2d17b62..9dddc7ce 100755 --- a/wqflask/wqflask/templates/correlation_page.html +++ b/wqflask/wqflask/templates/correlation_page.html @@ -15,8 +15,8 @@

Correlation Table

-

Values of record {{ this_trait.name }} in the {{ dataset.fullname }} - dataset were compared to all records in the {{ target_dataset.fullname }} +

Values of record {{ this_trait.name }} in the {{ dataset.fullname }} + dataset were compared to all records in the {{ target_dataset.fullname }} dataset. The top {{ return_number }} correlations ranked by the {{ formatted_corr_type }} are displayed. You can resort this list by clicking the headers. Select the Record ID to open the trait data and analysis page. diff --git a/wqflask/wqflask/templates/search_result_page.html b/wqflask/wqflask/templates/search_result_page.html index e304be1c..d7f67f74 100755 --- a/wqflask/wqflask/templates/search_result_page.html +++ b/wqflask/wqflask/templates/search_result_page.html @@ -16,7 +16,7 @@ -

We searched {{ dataset.fullname }} +

We searched {{ dataset.fullname }} to find all records that match {% for word in search_terms %} {{word.search_term[0]}} {% if not loop.last %} or {% endif %} diff --git a/wqflask/wqflask/templates/show_trait_details.html b/wqflask/wqflask/templates/show_trait_details.html index cdaa919e..16c5dc47 100755 --- a/wqflask/wqflask/templates/show_trait_details.html +++ b/wqflask/wqflask/templates/show_trait_details.html @@ -17,7 +17,7 @@

Database
- + {{ dataset.name }}
-- cgit v1.2.3 From 72f7f223d362311a25d7ffce4c4c17e192c9f5fd Mon Sep 17 00:00:00 2001 From: zsloan Date: Fri, 23 Oct 2015 16:39:40 +0000 Subject: Fixed error if you click search after entering white spaces; Ethan's fix only worked when the user hits enter --- wqflask/wqflask/search_results.py | 26 +++++++++++++++--------- wqflask/wqflask/templates/marker_regression.html | 10 ++++++++- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/wqflask/wqflask/search_results.py b/wqflask/wqflask/search_results.py index 12ea44d8..fb03f027 100755 --- a/wqflask/wqflask/search_results.py +++ b/wqflask/wqflask/search_results.py @@ -93,8 +93,10 @@ class SearchResultPage(object): else: dataset_type = "ProbeSet" self.dataset = create_dataset(kw['dataset'], dataset_type) + print("KEYWORD:", self.search_terms) self.search() - self.gen_search_result() + if self.search_term_exists: + self.gen_search_result() @@ -253,15 +255,19 @@ class SearchResultPage(object): results = the_search.execute(final_query) self.results.extend(results) else: - for a_search in self.search_terms: - the_search = self.get_search_ob(a_search) - if the_search != None: - self.results.extend(the_search.run()) - else: - self.search_term_exists = False - - if the_search != None: - self.header_fields = the_search.header_fields + if self.search_terms == []: + self.search_term_exists = False + else: + for a_search in self.search_terms: + the_search = self.get_search_ob(a_search) + if the_search != None: + self.results.extend(the_search.run()) + else: + self.search_term_exists = False + + if self.search_term_exists: + if the_search != None: + self.header_fields = the_search.header_fields def get_search_ob(self, a_search): print("[kodak] item is:", pf(a_search)) diff --git a/wqflask/wqflask/templates/marker_regression.html b/wqflask/wqflask/templates/marker_regression.html index ad117337..b633f815 100755 --- a/wqflask/wqflask/templates/marker_regression.html +++ b/wqflask/wqflask/templates/marker_regression.html @@ -62,7 +62,15 @@ {% endif %} - + {% endif %} {% endfor %} -- cgit v1.2.3 From f93874f512ee07072bab46bfacc9282df4e12172 Mon Sep 17 00:00:00 2001 From: zsloan Date: Thu, 5 Nov 2015 22:49:49 +0000 Subject: Fixed issue where misplaced html comment end hid all phenotype table results --- wqflask/wqflask/templates/search_result_page.html | 43 ++--------------------- wqflask/wqflask/views.py | 13 ++++--- 2 files changed, 10 insertions(+), 46 deletions(-) diff --git a/wqflask/wqflask/templates/search_result_page.html b/wqflask/wqflask/templates/search_result_page.html index d7f67f74..7b3df00f 100755 --- a/wqflask/wqflask/templates/search_result_page.html +++ b/wqflask/wqflask/templates/search_result_page.html @@ -62,8 +62,9 @@

---> {% endif %} +--> +
{{marker.chr}} {{ '%0.6f' | format(marker.Mb|float) }}{{marker.name}} + {{ marker.name }} + +
@@ -163,39 +164,6 @@ } - function filtering( oSettings, aData, iDataIndex, column) { - var iColumn = column; - if (document.getElementById('min').value){ - var iMin = document.getElementById('min').value * 1; - } else { - var iMin = 0 - } - if (document.getElementById('max').value){ - var iMax = document.getElementById('max').value * 1; - } else { - var iMax = 10000 - } - - var iVersion = aData[iColumn] == "-" ? 0 : aData[iColumn]*1; - if ( iMin === "" && iMax === "" ) - { - return true; - } - else if ( iMin === "" && iVersion < iMax ) - { - return true; - } - else if ( iMin < iVersion && "" === iMax ) - { - return true; - } - else if ( iMin < iVersion && iVersion < iMax ) - { - return true; - } - return false; - } - jQuery.fn.dataTableExt.oSort['cust-txt-asc'] = function (a, b) { var x = getValue(a); var y = getValue(b); @@ -310,13 +278,6 @@ table.colReorder.reset() }); - $('#min').keyup( function() { table.draw(); } ); - $('#max').keyup( function() { table.draw(); } ); - - $('#open_options').click( function () { - $('#extra_options').toggle(); - }); - }); {% endblock %} diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py index dc199ab2..ba96428d 100755 --- a/wqflask/wqflask/views.py +++ b/wqflask/wqflask/views.py @@ -42,6 +42,7 @@ from wqflask.show_trait import show_trait from wqflask.show_trait import export_trait_data from wqflask.heatmap import heatmap from wqflask.marker_regression import marker_regression +#from wqflask.marker_regression import marker_regression_gn1 from wqflask.interval_mapping import interval_mapping from wqflask.correlation import show_corr_results from wqflask.correlation_matrix import show_corr_matrix @@ -132,7 +133,7 @@ def search_page(): else: return render_template("data_sharing.html", **template_vars.__dict__) else: - key = "search_results:v2:" + json.dumps(request.args, sort_keys=True) + key = "search_results:v3:" + json.dumps(request.args, sort_keys=True) print("key is:", pf(key)) with Bench("Loading cache"): result = Redis.get(key) @@ -351,7 +352,7 @@ def marker_regression_page(): if key in wanted or key.startswith(('value:')): start_vars[key] = value - version = "v3" + version = "v4" key = "marker_regression:{}:".format(version) + json.dumps(start_vars, sort_keys=True) print("key is:", pf(key)) with Bench("Loading cache"): @@ -374,14 +375,15 @@ def marker_regression_page(): indent=" ") result = template_vars.__dict__ - - print("DATASET:", pf(result['dataset'])) + print("initial result:", result['qtl_results']) for item in template_vars.__dict__.keys(): print(" ---**--- {}: {}".format(type(template_vars.__dict__[item]), item)) #causeerror + #gn1_template_vars = marker_regression_gn1.MarkerRegression(template_vars) + #qtl_length = len(result['js_data']['qtl_results']) #print("qtl_length:", qtl_length) pickled_result = pickle.dumps(result, pickle.HIGHEST_PROTOCOL) @@ -402,7 +404,8 @@ def marker_regression_page(): result['pair_scan_array'] = bytesarray rendered_template = render_template("pair_scan_results.html", **result) else: - rendered_template = render_template("marker_regression.html", **result) + #rendered_template = render_template("marker_regression.html", **result) + rendered_template = render_template("marker_regression_gn1.html", **result) return rendered_template -- cgit v1.2.3 From 74ba4029f0160f0c4708a8c4b291c05184d3993d Mon Sep 17 00:00:00 2001 From: zsloan Date: Mon, 9 Nov 2015 17:38:50 +0000 Subject: Fixed issue that caused mapping to not work; for some reason the path to pylmm was wrong --- genotype_files/genotypes/HSNIH.geno | 4 ++-- wqflask/base/data_set.py | 5 ++++- wqflask/utility/tools.py | 2 +- wqflask/wqflask/marker_regression/marker_regression.py | 4 ++-- wqflask/wqflask/my_pylmm/data/genofile_parser.py | 10 +++++----- wqflask/wqflask/show_trait/show_trait.py | 2 +- wqflask/wqflask/static/new/javascript/chr_lod_chart.js | 2 +- wqflask/wqflask/static/new/javascript/panelutil.js | 2 +- wqflask/wqflask/views.py | 8 +++++--- 9 files changed, 22 insertions(+), 17 deletions(-) diff --git a/genotype_files/genotypes/HSNIH.geno b/genotype_files/genotypes/HSNIH.geno index 525f0183..1817e252 100755 --- a/genotype_files/genotypes/HSNIH.geno +++ b/genotype_files/genotypes/HSNIH.geno @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:550df9276046d5aef116e9ab3dff6a03a137e74ba0c21cc0ae59d1f83e9b9673 -size 22560 +oid sha256:719bbdea26ebc969ce82bb4f668630e179ddb796e9e4095b44a0fa9b7b9da22d +size 23006 diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py index d6a46c2e..5603fe2e 100755 --- a/wqflask/base/data_set.py +++ b/wqflask/base/data_set.py @@ -158,7 +158,10 @@ class Markers(object): """Todo: Build in cacheing so it saves us reading the same file more than once""" def __init__(self, name): json_data_fh = open(os.path.join(webqtlConfig.NEWGENODIR + name + '.json')) - markers = json.load(json_data_fh) + try: + markers = json.load(json_data_fh) + except: + markers = [] for marker in markers: if (marker['chr'] != "X") and (marker['chr'] != "Y"): diff --git a/wqflask/utility/tools.py b/wqflask/utility/tools.py index 760ded7c..b8a41f60 100644 --- a/wqflask/utility/tools.py +++ b/wqflask/utility/tools.py @@ -63,7 +63,7 @@ def plink_command(default=None): else: None - guess = os.environ.get('HOME')+'/plink' + guess = os.environ.get('HOME')+'/plink_gemma' path = get_setting('PLINK_PATH',default,guess,get_valid_path) plink_command = path+'/plink' return path,plink_command diff --git a/wqflask/wqflask/marker_regression/marker_regression.py b/wqflask/wqflask/marker_regression/marker_regression.py index dc7ebfcc..553b4358 100755 --- a/wqflask/wqflask/marker_regression/marker_regression.py +++ b/wqflask/wqflask/marker_regression/marker_regression.py @@ -74,7 +74,7 @@ class MarkerRegression(object): self.significant = "" self.pair_scan = False # Initializing this since it is checked in views to determine which template to use self.score_type = "LRS" #ZS: LRS or LOD - self.mapping_scale = "megabase" + self.mapping_scale = "physic" self.dataset.group.get_markers() if self.mapping_method == "gemma": @@ -87,7 +87,7 @@ class MarkerRegression(object): results = self.run_rqtl_plink() elif self.mapping_method == "rqtl_geno": self.score_type = "LOD" - self.mapping_scale = "centimorgan" + self.mapping_scale = "morgan" if start_vars['num_perm'] == "": self.num_perm = 0 else: diff --git a/wqflask/wqflask/my_pylmm/data/genofile_parser.py b/wqflask/wqflask/my_pylmm/data/genofile_parser.py index 9191f345..61a00136 100755 --- a/wqflask/wqflask/my_pylmm/data/genofile_parser.py +++ b/wqflask/wqflask/my_pylmm/data/genofile_parser.py @@ -65,11 +65,11 @@ class ConvertGenoFile(object): self.configurations = {} #self.skipped_cols = 3 - if self.input_file.endswith(".geno.gz"): - print("self.input_file: ", self.input_file) - self.input_fh = gzip.open(self.input_file) - else: - self.input_fh = open(self.input_file) + #if self.input_file.endswith(".geno.gz"): + # print("self.input_file: ", self.input_file) + # self.input_fh = gzip.open(self.input_file) + #else: + self.input_fh = open(self.input_file) with open(self.output_file, "w") as self.output_fh: #if self.file_type == "geno": diff --git a/wqflask/wqflask/show_trait/show_trait.py b/wqflask/wqflask/show_trait/show_trait.py index 850c99a7..aa6f9562 100755 --- a/wqflask/wqflask/show_trait/show_trait.py +++ b/wqflask/wqflask/show_trait/show_trait.py @@ -167,7 +167,7 @@ class ShowTrait(object): return False def check_pylmm_rqtl(): - if os.path.isfile(webqtlConfig.GENODIR+self.dataset.group.name+".geno"): + if os.path.isfile(webqtlConfig.GENODIR+self.dataset.group.name+".geno") and (os.path.getsize(webqtlConfig.NEWGENODIR+self.dataset.group.name+".json") > 0): return True else: return False diff --git a/wqflask/wqflask/static/new/javascript/chr_lod_chart.js b/wqflask/wqflask/static/new/javascript/chr_lod_chart.js index 60878978..c6fb52d8 100644 --- a/wqflask/wqflask/static/new/javascript/chr_lod_chart.js +++ b/wqflask/wqflask/static/new/javascript/chr_lod_chart.js @@ -119,7 +119,7 @@ Chr_Lod_Chart = (function() { }; Chr_Lod_Chart.prototype.create_scales = function() { - if (this.mappingScale == "centimorgan") { + if (this.mappingScale == "morgan") { max_pos = 0 for (i = 0, len = this.these_results.length; i < len; i++) { marker = this.these_results[i] diff --git a/wqflask/wqflask/static/new/javascript/panelutil.js b/wqflask/wqflask/static/new/javascript/panelutil.js index 5a931f7d..4c8e77ba 100644 --- a/wqflask/wqflask/static/new/javascript/panelutil.js +++ b/wqflask/wqflask/static/new/javascript/panelutil.js @@ -157,7 +157,7 @@ chrscales = function(data, width, chrGap, leftMargin, pad4heatmap, mappingScale) data.chrEnd.push(cur + w); cur = data.chrEnd[i] + chrGap; - if (mappingScale == "centimorgan") { + if (mappingScale == "morgan") { max_pos = d3.max(data.posByChr[chr[0]]) console.log("max_pos:", max_pos) data.xscale[chr[0]] = d3.scale.linear().domain([chrStart[i], max_pos]).range([data.chrStart[i], data.chrEnd[i]]); diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py index ba96428d..588433f0 100755 --- a/wqflask/wqflask/views.py +++ b/wqflask/wqflask/views.py @@ -335,6 +335,8 @@ def marker_regression_page(): 'trait_id', 'dataset', 'method', + 'mapping_scale', + 'score_type', 'suggestive', 'num_perm', 'maf', @@ -352,7 +354,7 @@ def marker_regression_page(): if key in wanted or key.startswith(('value:')): start_vars[key] = value - version = "v4" + version = "v1" key = "marker_regression:{}:".format(version) + json.dumps(start_vars, sort_keys=True) print("key is:", pf(key)) with Bench("Loading cache"): @@ -404,8 +406,8 @@ def marker_regression_page(): result['pair_scan_array'] = bytesarray 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", **result) + rendered_template = render_template("marker_regression.html", **result) + #rendered_template = render_template("marker_regression_gn1.html", **result) return rendered_template -- cgit v1.2.3 From 933b90b8eba789dd89555ec31a6ff8db30808eac Mon Sep 17 00:00:00 2001 From: zsloan Date: Wed, 18 Nov 2015 17:04:54 +0000 Subject: Fixed issue where literature and tissue correlation didn't work Scatterplot matrix feature only appears if user is logged in now Committing current progress on mapping page (it can at least import the file now, but there are still errors) --- wqflask/base/mrna_assay_tissue_data.py | 10 +- .../wqflask/marker_regression/marker_regression.py | 12 +- .../marker_regression/marker_regression_gn1.py | 2745 ++++++++++++++++++++ .../wqflask/templates/marker_regression_gn1.html | 204 ++ .../templates/show_trait_statistics_new.html | 4 + wqflask/wqflask/views.py | 4 +- 6 files changed, 2969 insertions(+), 10 deletions(-) create mode 100644 wqflask/wqflask/marker_regression/marker_regression_gn1.py create mode 100644 wqflask/wqflask/templates/marker_regression_gn1.html diff --git a/wqflask/base/mrna_assay_tissue_data.py b/wqflask/base/mrna_assay_tissue_data.py index 54a7ce8e..ba82057a 100755 --- a/wqflask/base/mrna_assay_tissue_data.py +++ b/wqflask/base/mrna_assay_tissue_data.py @@ -19,7 +19,7 @@ class MrnaAssayTissueData(object): if self.gene_symbols == None: self.gene_symbols = [] - print("self.gene_symbols:", self.gene_symbols) + #print("self.gene_symbols:", self.gene_symbols) self.data = collections.defaultdict(Bunch) @@ -57,9 +57,15 @@ class MrnaAssayTissueData(object): results = g.db.execute(query).fetchall() + lower_symbols = [] + for gene_symbol in gene_symbols: + if gene_symbol != None: + lower_symbols.append(gene_symbol.lower()) + for result in results: symbol = result[0] - if symbol.lower() in [gene_symbol.lower() for gene_symbol in gene_symbols]: + #if symbol.lower() in [gene_symbol.lower() for gene_symbol in gene_symbols]: + if symbol.lower() in lower_symbols: #gene_symbols.append(symbol) symbol = symbol.lower() diff --git a/wqflask/wqflask/marker_regression/marker_regression.py b/wqflask/wqflask/marker_regression/marker_regression.py index 553b4358..05bb5b60 100755 --- a/wqflask/wqflask/marker_regression/marker_regression.py +++ b/wqflask/wqflask/marker_regression/marker_regression.py @@ -75,6 +75,7 @@ class MarkerRegression(object): self.pair_scan = False # Initializing this since it is checked in views to determine which template to use self.score_type = "LRS" #ZS: LRS or LOD self.mapping_scale = "physic" + self.num_perm = 0 self.dataset.group.get_markers() if self.mapping_method == "gemma": @@ -94,7 +95,6 @@ class MarkerRegression(object): self.num_perm = start_vars['num_perm'] self.control = start_vars['control_marker'] self.do_control = start_vars['do_control'] - print("StartVars:", start_vars) self.method = start_vars['mapmethod_rqtl_geno'] self.model = start_vars['mapmodel_rqtl_geno'] @@ -102,7 +102,7 @@ class MarkerRegression(object): self.pair_scan = True results = self.run_rqtl_geno() - print("qtl_results:", results) + #print("qtl_results:", results) elif self.mapping_method == "plink": results = self.run_plink() #print("qtl_results:", pf(results)) @@ -163,8 +163,8 @@ class MarkerRegression(object): #Need to convert the QTL objects that qtl reaper returns into a json serializable dictionary for index, qtl in enumerate(self.qtl_results): - if index<40: - print("lod score is:", qtl['lod_score']) + #if index<40: + # print("lod score is:", qtl['lod_score']) if qtl['chr'] == highest_chr and highest_chr != "X" and highest_chr != "X/Y": print("changing to X") self.json_data['chr'].append("X") @@ -241,7 +241,7 @@ class MarkerRegression(object): included_markers.append(line.split("\t")[1]) p_values.append(float(line.split("\t")[10])) #p_values[line.split("\t")[1]] = float(line.split("\t")[10]) - print("p_values: ", p_values) + #print("p_values: ", p_values) return included_markers, p_values def gen_pheno_txt_file(self): @@ -784,7 +784,7 @@ class MarkerRegression(object): json_results = Redis.blpop("pylmm:results:" + temp_uuid, 45*60) results = json.loads(json_results[1]) p_values = [float(result) for result in results['p_values']] - print("p_values:", p_values[:10]) + #print("p_values:", p_values[:10]) #p_values = self.trim_results(p_values) t_stats = results['t_stats'] diff --git a/wqflask/wqflask/marker_regression/marker_regression_gn1.py b/wqflask/wqflask/marker_regression/marker_regression_gn1.py new file mode 100644 index 00000000..5deeb305 --- /dev/null +++ b/wqflask/wqflask/marker_regression/marker_regression_gn1.py @@ -0,0 +1,2745 @@ +# Copyright (C) University of Tennessee Health Science Center, Memphis, TN. +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU Affero General Public License +# as published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Affero General Public License for more details. +# +# This program is available from Source Forge: at GeneNetwork Project +# (sourceforge.net/projects/genenetwork/). +# +# Contact Drs. Robert W. Williams and Xiaodong Zhou (2010) +# at rwilliams@uthsc.edu and xzhou15@uthsc.edu +# +# +# +# This module is used by GeneNetwork project (www.genenetwork.org) +# +# Created by GeneNetwork Core Team 2010/08/10 +# +# Last updated by Zach 12/14/2010 + + +import time +import string +from math import * +import piddle as pid +import sys,os +import cPickle +import httplib, urllib + +from flask import Flask, g + +from htmlgen import HTMLgen2 as HT + +from utility import helper_functions +from utility import Plot +from base import webqtlConfig +#from intervalAnalyst import GeneUtil +#from base.webqtlTrait import webqtlTrait +#from base.templatePage import templatePage +#from utility import webqtlUtil +#from utility.THCell import THCell +#from utility.TDCell import TDCell +#from dbFunction import webqtlDatabaseFunction +#from base.GeneralObject import GeneralObject + +#import logging +#logging.basicConfig(filename="/tmp/gn_leiyan.log", level=logging.INFO) +#_log = logging.getLogger("gn\web\webqtl\intervalMapping\IntervalMappingPage.py") + +######################################### +# Inteval Mapping Plot Page +######################################### +class MarkerRegression(object): + cMGraphInterval = 5 + maxBootStrap = 50 + GRAPH_MIN_WIDTH = 900 + GRAPH_MAX_WIDTH = 10000 # Don't set this too high + GRAPH_DEFAULT_WIDTH = 1280 + MULT_GRAPH_DEFAULT_WIDTH = 2000 + MULT_GRAPH_MIN_WIDTH = 1400 + MULT_GRAPH_DEFAULT_WIDTH = 1600 + GRAPH_DEFAULT_HEIGHT = 600 + + + # Display order: + # UCSC BAND ========= + # ENSEMBL BAND -=-=-= + # ** GENES ********** + BAND_SPACING = 4 + + #ENSEMBL_BAND_Y = UCSC_BAND_Y + UCSC_BAND_HEIGHT + BAND_SPACING + UCSC_BAND_HEIGHT = 10 + ENSEMBL_BAND_HEIGHT = 10 + WEBQTL_BAND_HEIGHT = 10 + + #GENE_START_Y = ENSEMBL_BAND_Y + ENSEMBL_BAND_HEIGHT + BAND_SPACING + NUM_GENE_ROWS = 10 + EACH_GENE_HEIGHT = 6 # number of pixels tall, for each gene to display + EACH_GENE_ARROW_WIDTH = 5 + EACH_GENE_ARROW_SPACING = 14 + DRAW_DETAIL_MB = 4 + DRAW_UTR_LABELS_MB = 4 + + MIN_PIXELS_BETWEEN_LABELS = 50 + + qmarkImg = HT.Image('/images/qmarkBoxBlue.gif', width=10, height=13, border=0, alt='Glossary') + # Note that "qmark.gif" is a similar, smaller, rounded-edges question mark. It doesn't look + # like the ones on the image, though, which is why we don't use it here. + + HELP_WINDOW_NAME = 'helpWind' + + ## BEGIN HaplotypeAnalyst + NR_INDIVIDUALS = 0 + ## END HaplotypeAnalyst + + ALEX_DEBUG_BOOL_COLORIZE_GENES = 1 # 0=don't colorize, 1=colorize + ALEX_DEBUG_BOOL_PRINT_GENE_LIST = 1 + + kWIDTH_DEFAULT=1 + + kONE_MILLION = 1000000 + + LODFACTOR = 4.61 + + SNP_COLOR = pid.orange # Color for the SNP "seismograph" + TRANSCRIPT_LOCATION_COLOR = pid.mediumpurple + + GENE_FILL_COLOR = pid.HexColor(0x6666FF) + GENE_OUTLINE_COLOR = pid.HexColor(0x000077) + BOOTSTRAP_BOX_COLOR = pid.yellow + LRS_COLOR = pid.HexColor(0x0000FF) + LRS_LINE_WIDTH = 2 + SIGNIFICANT_COLOR = pid.HexColor(0xEBC7C7) + SUGGESTIVE_COLOR = pid.gainsboro + SIGNIFICANT_WIDTH = 5 + SUGGESTIVE_WIDTH = 5 + ADDITIVE_COLOR_POSITIVE = pid.green + ADDITIVE_COLOR_NEGATIVE = pid.red + ADDITIVE_COLOR = ADDITIVE_COLOR_POSITIVE + DOMINANCE_COLOR_POSITIVE = pid.darkviolet + DOMINANCE_COLOR_NEGATIVE = pid.orange + + ## BEGIN HaplotypeAnalyst + HAPLOTYPE_POSITIVE = pid.green + HAPLOTYPE_NEGATIVE = pid.red + HAPLOTYPE_HETEROZYGOUS = pid.blue + HAPLOTYPE_RECOMBINATION = pid.darkgray + ## END HaplotypeAnalyst + + QMARK_EDGE_COLOR = pid.HexColor(0x718118) + QMARK_FILL_COLOR = pid.HexColor(0xDEE3BB) + + TOP_RIGHT_INFO_COLOR = pid.black + X_AXIS_LABEL_COLOR = pid.black #HexColor(0x505050) + + MINI_VIEW_MAGNIFIED_REGION_COLOR = pid.HexColor(0xCC0000) + MINI_VIEW_OUTSIDE_REGION_COLOR = pid.HexColor(0xEEEEEE) + MINI_VIEW_BORDER_COLOR = pid.black + + CLICKABLE_WEBQTL_REGION_COLOR = pid.HexColor(0xF5D3D3) + CLICKABLE_WEBQTL_REGION_OUTLINE_COLOR = pid.HexColor(0xFCE9E9) + CLICKABLE_WEBQTL_TEXT_COLOR = pid.HexColor(0x912828) + + CLICKABLE_UCSC_REGION_COLOR = pid.HexColor(0xDDDDEE) + CLICKABLE_UCSC_REGION_OUTLINE_COLOR = pid.HexColor(0xEDEDFF) + CLICKABLE_UCSC_TEXT_COLOR = pid.HexColor(0x333366) + + CLICKABLE_ENSEMBL_REGION_COLOR = pid.HexColor(0xEEEEDD) + CLICKABLE_ENSEMBL_REGION_OUTLINE_COLOR = pid.HexColor(0xFEFEEE) + CLICKABLE_ENSEMBL_TEXT_COLOR = pid.HexColor(0x555500) + + GRAPH_BACK_LIGHT_COLOR = pid.HexColor(0xFBFBFF) + GRAPH_BACK_DARK_COLOR = pid.HexColor(0xF1F1F9) + + HELP_PAGE_REF = '/glossary.html' + + DRAW_UTR_LABELS=0 + + def __init__(self, start_vars): + + #templatePage.__init__(self, fd) + + #if not self.openMysql(): + # return + + #helper_functions.get_species_dataset_trait(self, start_vars) + + self.dataset = start_vars['dataset'] + self.this_trait = start_vars['this_trait'] + self.species = start_vars['species'] + + #ZS: Think I can just get all this from dataset object now + #RISet and Species + #if not fd.genotype: + # fd.readGenotype() + # + #fd.parentsf14regression = fd.formdata.getvalue('parentsf14regression') + # + #if ((fd.parentsf14regression == 'on') and fd.genotype_2): + # fd.genotype = fd.genotype_2 + #else: + # fd.genotype = fd.genotype_1 + #fd.strainlist = list(fd.genotype.prgy) + # + #self.species = webqtlDatabaseFunction.retrieveSpecies(cursor=self.cursor, RISet=fd.RISet) + + if self.dataset.species == "rat": + self._ucscDb = "rn3" + elif self.dataset.species == "mouse": + self._ucscDb = "mm9" + else: + self._ucscDb = "" + + ##################################### + # Options + ##################################### + #Mapping options + self.plotScale = start_vars['mapping_scale'] + #self.plotScale = fd.formdata.getvalue('scale', 'physic') + #if self.plotScale == 'physic' and not fd.genotype.Mbmap: #ZS: Not sure where "Mbmap" is stored, if at all; should be fine without this though + # self.plotScale = 'morgan' + if start_vars['num_perm'] != "": + self.nperm = int(start_vars['num_perm']) + else: + self.nperm = 0 + if (start_vars['num_perm'] == "") or (start_vars['num_perm'] < 1): + self.permChecked = False + else: + self.permChecked = True + #self.permChecked = fd.formdata.getvalue('permCheck', True) + self.bootChecked = False #ZS: For now setting to False, I'll add this option later once rest of figure works + #self.bootChecked = fd.formdata.getvalue('bootCheck', '') + if 'control' in start_vars.keys(): + self.controlLocus = start_vars['control'] + else: + self.controlLocus = "" + #self.controlLocus = fd.formdata.getvalue('controlLocus', '') + + #try: + # self.selectedChr = int(fd.formdata.getvalue('chromosomes', "-1")) + #except: + self.selectedChr = -1 + + #whether include parents and F1 for InbredSet + #fd.parentsf14regression = fd.formdata.getvalue('parentsf14regression') + #if ((fd.parentsf14regression == 'on') and fd.genotype_2): + # fd.genotype = fd.genotype_2 + #else: + # fd.genotype = fd.genotype_1 + + self.strainlist = self.dataset.group.samplelist + self.genotype = self.dataset.group.read_genotype_file() + + #Darwing Options + try: + if self.selectedChr > -1: + self.graphWidth = min(self.GRAPH_MAX_WIDTH, self.GRAPH_MIN_WIDTH) + else: + self.graphWidth = min(self.GRAPH_MAX_WIDTH, self.MULT_GRAPH_MIN_WIDTH) + except: + if self.selectedChr > -1: + self.graphWidth = self.GRAPH_DEFAULT_WIDTH + else: + self.graphWidth = self.MULT_GRAPH_DEFAULT_WIDTH + + #try: + # if self.selectedChr > -1: + # self.graphWidth = min(self.GRAPH_MAX_WIDTH, max(self.GRAPH_MIN_WIDTH, int(fd.formdata.getvalue('graphWidth')))) + # else: + # self.graphWidth = min(self.GRAPH_MAX_WIDTH, max(self.MULT_GRAPH_MIN_WIDTH, int(fd.formdata.getvalue('graphWidth')))) + #except: + # if self.selectedChr > -1: + # self.graphWidth = self.GRAPH_DEFAULT_WIDTH + # else: + # self.graphWidth = self.MULT_GRAPH_DEFAULT_WIDTH + +## BEGIN HaplotypeAnalyst + #self.haplotypeAnalystChecked = fd.formdata.getvalue('haplotypeAnalystCheck') + self.haplotypeAnalystChecked = False +## END HaplotypeAnalyst + + + self.graphHeight = self.GRAPH_DEFAULT_HEIGHT + self.additiveChecked = False + self.dominanceChecked = False + self.LRS_LOD = start_vars['score_type'] + self.intervalAnalystChecked = False + self.legendChecked = False + self.geneChecked = False + self.SNPChecked = False + self.draw2X = False + self.lrsMax = 0 + self.startMb = -1 + self.endMb = -1 + + #self.additiveChecked = fd.formdata.getvalue('additiveCheck') + #self.dominanceChecked = fd.formdata.getvalue('dominanceCheck') + #self.LRS_LOD = fd.formdata.getvalue('LRSCheck', 'LRS') + #self.intervalAnalystChecked = fd.formdata.getvalue('intervalAnalystCheck') + #self.legendChecked = fd.formdata.getvalue('viewLegend') + #self.geneChecked = fd.formdata.getvalue('showGenes') + #self.SNPChecked = fd.formdata.getvalue('showSNP') + #self.draw2X = fd.formdata.getvalue('draw2X') + #self.lrsMax = float(fd.formdata.getvalue('lrsMax', 0)) + #self.startMb = fd.formdata.getvalue('startMb', "-1") + #self.endMb = fd.formdata.getvalue('endMb', "-1") + + #try: + # self.startMb = float(self.startMb) + # self.endMb = float(self.endMb) + # if self.startMb > self.endMb: + # temp = self.startMb + # self.startMb = self.endMb + # self.endMb = temp + # #minimal distance 10bp + # if self.endMb - self.startMb < 0.00001: + # self.endMb = self.startMb + 0.00001 + #except: + # self.startMb = self.endMb = -1 + + #Trait Infos + self.identification = "" + #self.identification = fd.formdata.getvalue('identification', "") + + ################################################################ + # Generate Chr list and Retrieve Length Information + ################################################################ + self.ChrList = [("All", -1)] + for i, indChr in enumerate(self.genotype): + self.ChrList.append((indChr.name, i)) + + + + self.ChrLengthMbList = g.db.execute(""" + Select + Length from Chr_Length, InbredSet + where + Chr_Length.SpeciesId = InbredSet.SpeciesId AND + InbredSet.Name = '%s' AND + Chr_Length.Name in (%s) + Order by + Chr_Length.OrderId + """ % (self.dataset.group.name, string.join(map(lambda X: "'%s'" % X[0], self.ChrList[1:]), ", "))) + + self.ChrLengthMbList = map(lambda x: x[0]/1000000.0, self.ChrLengthMbList) + self.ChrLengthMbSum = reduce(lambda x, y:x+y, self.ChrLengthMbList, 0.0) + if self.ChrLengthMbList: + self.MbGraphInterval = self.ChrLengthMbSum/(len(self.ChrLengthMbList)*12) #Empirical Mb interval + else: + self.MbGraphInterval = 1 + + self.ChrLengthCMList = [] + for i, _chr in enumerate(self.genotype): + self.ChrLengthCMList.append(_chr[-1].cM - _chr[0].cM) + self.ChrLengthCMSum = reduce(lambda x, y:x+y, self.ChrLengthCMList, 0.0) + + if self.plotScale == 'physic': + self.GraphInterval = self.MbGraphInterval #Mb + else: + self.GraphInterval = self.cMGraphInterval #cM + + + + ################################################################ + # Get Trait Values and Infomation + ################################################################ + ##input from search page or selection page + #self.searchResult = fd.formdata.getvalue('searchResult') + ##convert single selection into a list + #if type("1") == type(self.searchResult): + # self.searchResult = string.split(self.searchResult,'\t') + # + #self.traitList = [] + #if self.searchResult and len(self.searchResult) > webqtlConfig.MULTIPLEMAPPINGLIMIT: + # heading = 'Multiple Interval Mapping' + # detail = ['In order to get clear result, do not select more than %d traits for \ + # Multiple Interval Mapping analysis.' % webqtlConfig.MULTIPLEMAPPINGLIMIT] + # self.error(heading=heading,detail=detail) + # return + #elif self.searchResult: + # self.dataSource = 'selectionPage' + # for item in self.searchResult: + # thisTrait = webqtlTrait(fullname=item, cursor=self.cursor) + # thisTrait.retrieveInfo() + # thisTrait.retrieveData(fd.strainlist) + # self.traitList.append(thisTrait) + #else: + + #input from data editing page + #fd.readData() + #if not fd.allTraitData: + # heading = "Mapping" + # detail = ['No trait data was selected for %s data set. No mapping attempted.' % fd.RISet] + # self.error(heading=heading,detail=detail) + # return + + self.dataSource = 'editingPage' + self.traitList = [] + thisTrait = start_vars['this_trait'] + #fullname = fd.formdata.getvalue('fullname', '') + #if fullname: + # thisTrait = webqtlTrait(fullname=fullname, data=fd.allTraitData, cursor=self.cursor) + # thisTrait.retrieveInfo() + #else: + # thisTrait = webqtlTrait(data=fd.allTraitData) + self.traitList.append(thisTrait) + + +## BEGIN HaplotypeAnalyst +## count the amount of individuals to be plotted, and increase self.graphHeight + #if self.haplotypeAnalystChecked and self.selectedChr > -1: + # thisTrait = self.traitList[0] + # _strains, _vals, _vars = thisTrait.exportInformative() + # smd=[] + # for ii, _val in enumerate(_vals): + # temp = GeneralObject(name=_strains[ii], value=_val) + # smd.append(temp) + # bxdlist=list(self.genotype.prgy) + # for j,_geno in enumerate (self.genotype[0][1].genotype): + # for item in smd: + # if item.name == bxdlist[j]: + # self.NR_INDIVIDUALS = self.NR_INDIVIDUALS + 1 +## default: + # self.graphHeight = self.graphHeight + 2 * (self.NR_INDIVIDUALS+10) * self.EACH_GENE_HEIGHT +## for paper: + # #self.graphHeight = self.graphHeight + 1 * self.NR_INDIVIDUALS * self.EACH_GENE_HEIGHT - 180 +## END HaplotypeAnalyst + + ################################################################ + # Calculations QTL goes here + ################################################################ + self.multipleInterval = len(self.traitList) > 1 + self.qtlresults = start_vars['qtl_results'] + #errorMessage = self.calculateAllResult(fd) + #if errorMessage: + # heading = "Mapping" + # detail = ['%s' % errorMessage] + # self.error(heading=heading,detail=detail) + # return + + if self.multipleInterval: + self.colorCollection = Plot.colorSpectrum(len(self.qtlresults)) + else: + self.colorCollection = [self.LRS_COLOR] + + + ######################### + ## Get the sorting column + ######################### + RISet = self.dataset.group.name + if RISet in ('AXB', 'BXA', 'AXBXA'): + self.diffCol = ['B6J', 'A/J'] + elif RISet in ('BXD', 'BXD300', 'B6D2F2', 'BDF2-2005', 'BDF2-1999', 'BHHBF2'): + self.diffCol = ['B6J', 'D2J'] + elif RISet in ('CXB'): + self.diffCol = ['CBY', 'B6J'] + elif RISet in ('BXH', 'BHF2'): + self.diffCol = ['B6J', 'C3H'] + elif RISet in ('B6BTBRF2'): + self.diffCol = ['B6J', 'BTB'] + elif RISet in ('LXS'): + self.diffCol = ['ILS', 'ISS'] + else: + self.diffCol= [] + + for i, strain in enumerate(self.diffCol): + self.diffCol[i] = g.db.execute("select Id from Strain where Symbol = %s", strain).fetchone()[0] + #self.cursor.execute("select Id from Strain where Symbol = %s", strain) + #self.diffCol[i] = self.cursor.fetchone()[0] + #print self.diffCol + + ################################################################ + # GeneCollection goes here + ################################################################ + if self.plotScale == 'physic': + #StartMb or EndMb + if self.startMb < 0 or self.endMb < 0: + self.startMb = 0 + self.endMb = self.ChrLengthMbList[self.selectedChr] + + geneTable = "" + + #if self.plotScale == 'physic' and self.selectedChr > -1 and (self.intervalAnalystChecked or self.geneChecked): + # chrName = self.genotype[0].name + # # Draw the genes for this chromosome / region of this chromosome + # if self.traitList and self.traitList[0] and len(self.traitList) == 1 and self.dataset.name: + # webqtldatabase = self.dataset.name + # #webqtldatabase = self.traitList[0].db.name + # else: + # webqtldatabase = None + # + # self.geneCol = None + # + # if self.species == "mouse": + # self.geneCol = GeneUtil.loadGenes(self.cursor, chrName, self.diffCol, self.startMb, self.endMb, webqtldatabase, "mouse") + # elif self.species == "rat": + # self.geneCol = GeneUtil.loadGenes(self.cursor, chrName, self.diffCol, self.startMb, self.endMb, webqtldatabase, "rat") + # else: + # self.geneCol = None + # + # if self.geneCol and self.intervalAnalystChecked: + # ####################################################################### + # #Nick use GENEID as RefGene to get Literature Correlation Informations# + # #For Interval Mapping, Literature Correlation isn't useful, so skip it# + # #through set GENEID is None # + # ####################################################################### + # + # #GENEID = fd.formdata.getvalue('GeneId') or None + # GENEID = None + # + # geneTableContainer = HT.Div(Id="sortable") #Div to hold table + # geneTable = self.geneTable(self.geneCol,GENEID) + # geneTableContainer.append(geneTable) + # + # mainfmName = webqtlUtil.genRandStr("fm_") + # tableForm = HT.Form(cgi=os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE), enctype='multipart/form-data', name=mainfmName, submit=HT.Input(type='hidden')) + # tableForm.append(HT.Input(name='FormID', value='', type='hidden')) + # tableForm.append(geneTableContainer) + # + #else: + self.geneCol = None + + ################################################################ + # Plots goes here + ################################################################ + if self.plotScale != 'physic' or self.multipleInterval: + showLocusForm = webqtlUtil.genRandStr("fm_") + else: + showLocusForm = "" + intCanvas = pid.PILCanvas(size=(self.graphWidth,self.graphHeight)) + gifmap = self.plotIntMapping(intCanvas, startMb = self.startMb, endMb = self.endMb, showLocusForm= showLocusForm) + + filename= webqtlUtil.genRandStr("Itvl_") + intCanvas.save(os.path.join(webqtlConfig.IMGDIR, filename), format='png') + intImg=HT.Image('/image/'+filename+'.png', border=0, usemap='#WebQTLImageMap') + + #Scales plot differently for high resolution + if self.draw2X: + intCanvasX2 = pid.PILCanvas(size=(self.graphWidth*2,self.graphHeight*2)) + gifmapX2 = self.plotIntMapping(intCanvasX2, startMb = self.startMb, endMb = self.endMb, showLocusForm= showLocusForm, zoom=2) + intCanvasX2.save(os.path.join(webqtlConfig.IMGDIR, filename+"X2"), format='png') + #DLintImgX2=HT.Href(text='Download',url = '/image/'+filename+'X2.png', Class='smallsize', target='_blank') + + textUrl = self.writeQTL2Text(fd, filename) + + ################################################################ + # Info tables goes here + ################################################################ + #traitInfoTD = self.traitInfoTD(fd) + + #if self.draw2X: + # traitInfoTD.append(HT.P(), DLintImgX2, ' a higher resolution 2X image. ') + #else: + # traitInfoTD.append(HT.P()) + #if textUrl: + # traitInfoTD.append(HT.BR(), textUrl, ' results in tab-delimited text format.') + #traitRemapTD = self.traitRemapTD(self.cursor, fd) + #topTable = HT.TableLite(HT.TR(traitInfoTD, HT.TD(" ", width=25), traitRemapTD), border=0, cellspacing=0, cellpadding=0) + + ################################################################ + # Outputs goes here + ################################################################ + #this form is used for opening Locus page or trait page, only available for genetic mapping + if showLocusForm: + showLocusForm = HT.Form(cgi= os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE), enctype='multipart/form-data', + name=showLocusForm, submit=HT.Input(type='hidden')) + hddn = {'FormID':'showDatabase', 'ProbeSetID':'_','database':fd.RISet+"Geno",'CellID':'_', 'RISet':fd.RISet, 'incparentsf1':'ON'} + for key in hddn.keys(): + showLocusForm.append(HT.Input(name=key, value=hddn[key], type='hidden')) + showLocusForm.append(intImg) + else: + showLocusForm = intImg + + if self.permChecked and not self.multipleInterval and 0 -1: + drawAreaHeight -= self.ENSEMBL_BAND_HEIGHT + self.UCSC_BAND_HEIGHT+ self.WEBQTL_BAND_HEIGHT + 3*self.BAND_SPACING+ 10*zoom + if self.geneChecked: + drawAreaHeight -= self.NUM_GENE_ROWS*self.EACH_GENE_HEIGHT + 3*self.BAND_SPACING + 10*zoom + else: + if self.selectedChr > -1: + drawAreaHeight -= 20 + else: + drawAreaHeight -= 30 + +## BEGIN HaplotypeAnalyst + if self.haplotypeAnalystChecked and self.selectedChr > -1: + drawAreaHeight -= self.EACH_GENE_HEIGHT * (self.NR_INDIVIDUALS+10) * 2 * zoom +## END HaplotypeAnalyst + + if zoom == 2: + drawAreaHeight -= 60 + + #Image map + gifmap = HT.Map(name='WebQTLImageMap') + + newoffset = (xLeftOffset, xRightOffset, yTopOffset, yBottomOffset) + # Draw the alternating-color background first and get plotXScale + plotXScale = self.drawGraphBackground(canvas, gifmap, offset=newoffset, zoom= zoom, startMb=startMb, endMb = endMb) + + #draw bootstap + #if self.bootChecked and not self.multipleInterval: + # self.drawBootStrapResult(canvas, fd.nboot, drawAreaHeight, plotXScale, offset=newoffset) + + # Draw clickable region and gene band if selected + if self.plotScale == 'physic' and self.selectedChr > -1: + self.drawClickBand(canvas, gifmap, plotXScale, offset=newoffset, zoom = zoom, startMb=startMb, endMb = endMb) + if self.geneChecked and self.geneCol: + self.drawGeneBand(canvas, gifmap, plotXScale, offset=newoffset, zoom = zoom, startMb=startMb, endMb = endMb) + if self.SNPChecked: + self.drawSNPTrackNew(canvas, offset=newoffset, zoom = 2*zoom, startMb=startMb, endMb = endMb) +## BEGIN HaplotypeAnalyst + if self.haplotypeAnalystChecked: + self.drawHaplotypeBand(canvas, gifmap, plotXScale, offset=newoffset, zoom = zoom, startMb=startMb, endMb = endMb) +## END HaplotypeAnalyst + # Draw X axis + self.drawXAxis(canvas, drawAreaHeight, gifmap, plotXScale, showLocusForm, offset=newoffset, zoom = zoom, startMb=startMb, endMb = endMb) + # Draw QTL curve + self.drawQTL(canvas, drawAreaHeight, gifmap, plotXScale, offset=newoffset, zoom= zoom, startMb=startMb, endMb = endMb) + + #draw legend + if self.multipleInterval: + self.drawMultiTraitName(fd, canvas, gifmap, showLocusForm, offset=newoffset) + elif self.legendChecked: + self.drawLegendPanel(fd, canvas, offset=newoffset, zoom = zoom) + else: + pass + + #draw position, no need to use a separate function + if self.genotype.Mbmap: + self.drawProbeSetPosition(canvas, plotXScale, offset=newoffset, zoom = zoom) + + return gifmap + + def drawBootStrapResult(self, canvas, nboot, drawAreaHeight, plotXScale, offset= (40, 120, 80, 10), zoom = 1, startMb = None, endMb = None): + xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset + plotWidth = canvas.size[0] - xLeftOffset - xRightOffset + plotHeight = canvas.size[1] - yTopOffset - yBottomOffset + yZero = canvas.size[1] - yBottomOffset + fontZoom = zoom + if zoom == 2: + fontZoom = 1.5 + + bootHeightThresh = drawAreaHeight*3/4 + + #break bootstrap result into groups + BootCoord = [] + i = 0 + startX = xLeftOffset + for j, _chr in enumerate(self.genotype): + BootCoord.append( []) + for _locus in _chr: + if self.plotScale == 'physic': + Xc = startX + (_locus.Mb-self.startMb)*plotXScale + else: + Xc = startX + (_locus.cM-_chr[0].cM)*plotXScale + BootCoord[-1].append([Xc, self.bootResult[i]]) + i += 1 + startX += (self.ChrLengthDistList[j] + self.GraphInterval)*plotXScale + + #reduce bootResult + if self.selectedChr > -1: + maxBootBar = 80.0 + else: + maxBootBar = 200.0 + stepBootStrap = plotWidth/maxBootBar + reducedBootCoord = [] + maxBootCount = 0 + + for BootChrCoord in BootCoord: + nBoot = len(BootChrCoord) + bootStartPixX = BootChrCoord[0][0] + bootCount = BootChrCoord[0][1] + for i in range(1, nBoot): + if BootChrCoord[i][0] - bootStartPixX < stepBootStrap: + bootCount += BootChrCoord[i][1] + continue + else: + if maxBootCount < bootCount: + maxBootCount = bootCount + # end if + reducedBootCoord.append([bootStartPixX, BootChrCoord[i][0], bootCount]) + bootStartPixX = BootChrCoord[i][0] + bootCount = BootChrCoord[i][1] + # end else + # end for + #add last piece + if BootChrCoord[-1][0] - bootStartPixX > stepBootStrap/2.0: + reducedBootCoord.append([bootStartPixX, BootChrCoord[-1][0], bootCount]) + else: + reducedBootCoord[-1][2] += bootCount + reducedBootCoord[-1][1] = BootChrCoord[-1][0] + # end else + if maxBootCount < reducedBootCoord[-1][2]: + maxBootCount = reducedBootCoord[-1][2] + # end if + for item in reducedBootCoord: + if item[2] > 0: + if item[0] < xLeftOffset: + item[0] = xLeftOffset + if item[0] > xLeftOffset+plotWidth: + item[0] = xLeftOffset+plotWidth + if item[1] < xLeftOffset: + item[1] = xLeftOffset + if item[1] > xLeftOffset+plotWidth: + item[1] = xLeftOffset+plotWidth + if item[0] != item[1]: + canvas.drawRect(item[0], yZero, item[1], yZero - item[2]*bootHeightThresh/maxBootCount, + fillColor=self.BOOTSTRAP_BOX_COLOR) + + ###draw boot scale + highestPercent = (maxBootCount*100.0)/nboot + bootScale = Plot.detScale(0, highestPercent) + bootScale = Plot.frange(bootScale[0], bootScale[1], bootScale[1]/bootScale[2]) + bootScale = bootScale[:-1] + [highestPercent] + + bootOffset = 50*fontZoom + bootScaleFont=pid.Font(ttf="verdana",size=13*fontZoom,bold=0) + canvas.drawRect(canvas.size[0]-bootOffset,yZero-bootHeightThresh,canvas.size[0]-bootOffset-15*zoom,yZero,fillColor = pid.yellow) + canvas.drawLine(canvas.size[0]-bootOffset+4, yZero, canvas.size[0]-bootOffset, yZero, color=pid.black) + canvas.drawString('0%' ,canvas.size[0]-bootOffset+10,yZero+5,font=bootScaleFont,color=pid.black) + for item in bootScale: + if item == 0: + continue + bootY = yZero-bootHeightThresh*item/highestPercent + canvas.drawLine(canvas.size[0]-bootOffset+4,bootY,canvas.size[0]-bootOffset,bootY,color=pid.black) + canvas.drawString('%2.1f'%item ,canvas.size[0]-bootOffset+10,bootY+5,font=bootScaleFont,color=pid.black) + + if self.legendChecked: + startPosY = 30 + nCol = 2 + smallLabelFont = pid.Font(ttf="trebuc", size=12*fontZoom, bold=1) + leftOffset = xLeftOffset+(nCol-1)*200 + canvas.drawRect(leftOffset,startPosY-6, leftOffset+12,startPosY+6, fillColor=pid.yellow) + canvas.drawString('Frequency of the Peak LRS',leftOffset+ 20, startPosY+5,font=smallLabelFont,color=pid.black) + + def drawProbeSetPosition(self, canvas, plotXScale, offset= (40, 120, 80, 10), zoom = 1, startMb = None, endMb = None): + if len(self.traitList) != 1: + return + + xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset + plotWidth = canvas.size[0] - xLeftOffset - xRightOffset + plotHeight = canvas.size[1] - yTopOffset - yBottomOffset + yZero = canvas.size[1] - yBottomOffset + fontZoom = zoom + if zoom == 2: + fontZoom = 1.5 + + try: + Chr = self.traitList[0].chr + Mb = self.traitList[0].mb + except: + return + + if self.plotScale == 'physic': + if self.selectedChr > -1: + if self.genotype[0].name != Chr or Mb < self.startMb or Mb > self.endMb: + return + else: + locPixel = xLeftOffset + (Mb-self.startMb)*plotXScale + else: + locPixel = xLeftOffset + for i, _chr in enumerate(self.genotype): + if _chr.name != Chr: + locPixel += (self.ChrLengthDistList[i] + self.GraphInterval)*plotXScale + else: + locPixel += Mb*plotXScale + break + else: + if self.selectedChr > -1: + if self.genotype[0].name != Chr: + return + else: + for i, _locus in enumerate(self.genotype[0]): + #the trait's position is on the left of the first genotype + if i==0 and _locus.Mb >= Mb: + locPixel=-1 + break + + #the trait's position is between two traits + if i > 0 and self.genotype[0][i-1].Mb < Mb and _locus.Mb >= Mb: + locPixel = xLeftOffset + plotXScale*(self.genotype[0][i-1].cM+(_locus.cM-self.genotype[0][i-1].cM)*(Mb -self.genotype[0][i-1].Mb)/(_locus.Mb-self.genotype[0][i-1].Mb)) + break + + #the trait's position is on the right of the last genotype + if i==len(self.genotype[0]) and Mb>=_locus.Mb: + locPixel = -1 + else: + locPixel = xLeftOffset + for i, _chr in enumerate(self.genotype): + if _chr.name != Chr: + locPixel += (self.ChrLengthDistList[i] + self.GraphInterval)*plotXScale + else: + locPixel += (Mb*(_chr[-1].cM-_chr[0].cM)/self.ChrLengthCMList[i])*plotXScale + break + if locPixel >= 0: + traitPixel = ((locPixel, yZero), (locPixel-6, yZero+12), (locPixel+6, yZero+12)) + canvas.drawPolygon(traitPixel, edgeColor=pid.black, fillColor=self.TRANSCRIPT_LOCATION_COLOR, closed=1) + + if self.legendChecked: + startPosY = 15 + nCol = 2 + smallLabelFont = pid.Font(ttf="trebuc", size=12*fontZoom, bold=1) + leftOffset = xLeftOffset+(nCol-1)*200*fontZoom + canvas.drawPolygon(((leftOffset+6, startPosY-6), (leftOffset, startPosY+6), (leftOffset+12, startPosY+6)), edgeColor=pid.black, fillColor=self.TRANSCRIPT_LOCATION_COLOR, closed=1) + canvas.drawString("Sequence Site", (leftOffset+15), (startPosY+5), smallLabelFont, self.TOP_RIGHT_INFO_COLOR) + + + def drawSNPTrackNew(self, canvas, offset= (40, 120, 80, 10), zoom = 1, startMb = None, endMb = None): + if self.plotScale != 'physic' or self.selectedChr == -1 or not self.diffCol: + return + + SNP_HEIGHT_MODIFIER = 18.0 + + xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset + plotWidth = canvas.size[0] - xLeftOffset - xRightOffset + plotHeight = canvas.size[1] - yTopOffset - yBottomOffset + yZero = canvas.size[1] - yBottomOffset + fontZoom = zoom + if zoom == 2: + fontZoom = 1.5 + + drawSNPLocationY = yTopOffset + plotHeight + chrName = self.genotype[0].name + + stepMb = (endMb-startMb)/plotWidth + strainId1, strainId2 = self.diffCol + SNPCounts = [] + + while startMb= %2.6f AND Mb < %2.6f AND + StrainId1 = %d AND StrainId2 = %d + """ % (chrName, startMb, startMb+stepMb, strainId1, strainId2)) + SNPCounts.append(self.cursor.fetchone()[0]) + startMb += stepMb + + if (len(SNPCounts) > 0): + maxCount = max(SNPCounts) + if maxCount>0: + for i in range(xLeftOffset, xLeftOffset + plotWidth): + snpDensity = float(SNPCounts[i-xLeftOffset]*SNP_HEIGHT_MODIFIER/maxCount) + canvas.drawLine(i, drawSNPLocationY+(snpDensity)*zoom, i, drawSNPLocationY-(snpDensity)*zoom, color=self.SNP_COLOR, width=1) + + def drawMultiTraitName(self, fd, canvas, gifmap, showLocusForm, offset= (40, 120, 80, 10), zoom = 1, locLocation= None): + nameWidths = [] + yPaddingTop = 10 + colorFont=pid.Font(ttf="trebuc",size=12,bold=1) + if len(self.qtlresults) >20 and self.selectedChr > -1: + rightShift = 20 + rightShiftStep = 60 + rectWidth = 10 + else: + rightShift = 40 + rightShiftStep = 80 + rectWidth = 15 + + for k, thisTrait in enumerate(self.traitList): + thisLRSColor = self.colorCollection[k] + kstep = k % 4 + if k!=0 and kstep==0: + if nameWidths: + rightShiftStep = max(nameWidths[-4:]) + rectWidth + 20 + rightShift += rightShiftStep + + name = thisTrait.displayName() + nameWidth = canvas.stringWidth(name,font=colorFont) + nameWidths.append(nameWidth) + + canvas.drawRect(rightShift,yPaddingTop+kstep*15, rectWidth+rightShift,yPaddingTop+10+kstep*15, fillColor=thisLRSColor) + canvas.drawString(name,rectWidth+2+rightShift,yPaddingTop+10+kstep*15,font=colorFont,color=pid.black) + if thisTrait.db: + + COORDS = "%d,%d,%d,%d" %(rectWidth+2+rightShift,yPaddingTop+kstep*15,rectWidth+2+rightShift+nameWidth,yPaddingTop+10+kstep*15,) + HREF= "javascript:showDatabase3('%s','%s','%s','');" % (showLocusForm, thisTrait.db.name, thisTrait.name) + Areas = HT.Area(shape='rect',coords=COORDS,href=HREF) + gifmap.areas.append(Areas) + + + def drawLegendPanel(self, fd, canvas, offset= (40, 120, 80, 10), zoom = 1, locLocation= None): + xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset + plotWidth = canvas.size[0] - xLeftOffset - xRightOffset + plotHeight = canvas.size[1] - yTopOffset - yBottomOffset + yZero = canvas.size[1] - yBottomOffset + fontZoom = zoom + if zoom == 2: + fontZoom = 1.5 + + + labelFont=pid.Font(ttf="trebuc",size=12*fontZoom, bold=1) + startPosY = 15 + stepPosY = 12*fontZoom + canvas.drawLine(xLeftOffset,startPosY,xLeftOffset+32,startPosY,color=self.LRS_COLOR, width=2) + canvas.drawString(self.LRS_LOD, xLeftOffset+40,startPosY+5,font=labelFont,color=pid.black) + startPosY += stepPosY + + if self.additiveChecked: + startPosX = xLeftOffset + canvas.drawLine(startPosX,startPosY,startPosX+17,startPosY,color=self.ADDITIVE_COLOR_POSITIVE, width=2) + canvas.drawLine(startPosX+18,startPosY,startPosX+32,startPosY,color=self.ADDITIVE_COLOR_NEGATIVE, width=2) + canvas.drawString('Additive Effect',startPosX+40,startPosY+5,font=labelFont,color=pid.black) + + if self.genotype.type == 'intercross' and self.dominanceChecked: + startPosX = xLeftOffset + startPosY += stepPosY + canvas.drawLine(startPosX,startPosY,startPosX+17,startPosY,color=self.DOMINANCE_COLOR_POSITIVE, width=4) + canvas.drawLine(startPosX+18,startPosY,startPosX+35,startPosY,color=self.DOMINANCE_COLOR_NEGATIVE, width=4) + canvas.drawString('Dominance Effect',startPosX+42,startPosY+5,font=labelFont,color=pid.black) + + if self.haplotypeAnalystChecked: + startPosY += stepPosY + startPosX = xLeftOffset + canvas.drawLine(startPosX,startPosY,startPosX+17,startPosY,color=self.HAPLOTYPE_POSITIVE, width=4) + canvas.drawLine(startPosX+18,startPosY,startPosX+35,startPosY,color=self.HAPLOTYPE_NEGATIVE, width=4) + canvas.drawLine(startPosX+36,startPosY,startPosX+53,startPosY,color=self.HAPLOTYPE_HETEROZYGOUS, width=4) + canvas.drawLine(startPosX+54,startPosY,startPosX+67,startPosY,color=self.HAPLOTYPE_RECOMBINATION, width=4) + canvas.drawString('Haplotypes (Pat, Mat, Het, Unk)',startPosX+76,startPosY+5,font=labelFont,color=pid.black) + + if self.permChecked: + startPosY += stepPosY + startPosX = xLeftOffset + canvas.drawLine(startPosX, startPosY, startPosX + 32, startPosY, color=self.SIGNIFICANT_COLOR, width=self.SIGNIFICANT_WIDTH) + canvas.drawLine(startPosX, startPosY + stepPosY, startPosX + 32, startPosY + stepPosY, color=self.SUGGESTIVE_COLOR, width=self.SUGGESTIVE_WIDTH) + lod = 1 + if self.LRS_LOD == 'LOD': + lod = self.LODFACTOR + canvas.drawString('Significant %s = %2.2f' % (self.LRS_LOD, self.significance/lod),xLeftOffset+42,startPosY +5,font=labelFont,color=pid.black) + canvas.drawString('Suggestive %s = %2.2f' % (self.LRS_LOD, self.suggestive/lod),xLeftOffset+42,startPosY + 5 +stepPosY,font=labelFont,color=pid.black) + + + + labelFont=pid.Font(ttf="verdana",size=12*fontZoom) + labelColor = pid.black + if self.selectedChr == -1: + string1 = 'Mapping for Dataset: %s, mapping on All Chromosomes' % fd.RISet + else: + string1 = 'Mapping for Dataset: %s, mapping on Chromosome %s' % (fd.RISet,self.genotype[0].name) + if self.controlLocus: + string2 = 'Using %s as control' % self.controlLocus + else: + string2 = 'Using Haldane mapping function with no control for other QTLs' + d = 4+ max(canvas.stringWidth(string1,font=labelFont),canvas.stringWidth(string2,font=labelFont)) + if fd.identification: + identification = "Trait ID: %s" % fd.identification + canvas.drawString(identification,canvas.size[0] - xRightOffset-d,20*fontZoom,font=labelFont,color=labelColor) + + canvas.drawString(string1,canvas.size[0] - xRightOffset-d,35*fontZoom,font=labelFont,color=labelColor) + canvas.drawString(string2,canvas.size[0] - xRightOffset-d,50*fontZoom,font=labelFont,color=labelColor) + + + def drawGeneBand(self, canvas, gifmap, plotXScale, offset= (40, 120, 80, 10), zoom = 1, startMb = None, endMb = None): + if self.plotScale != 'physic' or self.selectedChr == -1 or not self.geneCol: + return + + xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset + plotWidth = canvas.size[0] - xLeftOffset - xRightOffset + plotHeight = canvas.size[1] - yTopOffset - yBottomOffset + yZero = canvas.size[1] - yBottomOffset + fontZoom = zoom + if zoom == 2: + fontZoom = 1.5 + + yPaddingTop = yTopOffset + + displayStartInBases = startMb*self.kONE_MILLION + displayEndInBases = endMb*self.kONE_MILLION + + for gIndex, theGO in enumerate(self.geneCol): + geneNCBILink = 'http://www.ncbi.nlm.nih.gov/gene?term=%s' + if self.species == "mouse": + txStart = theGO["TxStart"] + txEnd = theGO["TxEnd"] + geneLength = (txEnd - txStart)*1000.0 + tenPercentLength = geneLength*0.0001 + SNPdensity = theGO["snpCount"]/geneLength + + exonStarts = map(float, theGO['exonStarts'].split(",")[:-1]) + exonEnds = map(float, theGO['exonEnds'].split(",")[:-1]) + cdsStart = theGO['cdsStart'] + cdsEnd = theGO['cdsEnd'] + accession = theGO['NM_ID'] + geneId = theGO['GeneID'] + geneSymbol = theGO["GeneSymbol"] + strand = theGO["Strand"] + exonCount = theGO["exonCount"] + + geneStartPix = xLeftOffset + plotXScale*(float(txStart) - startMb) + geneEndPix = xLeftOffset + plotXScale*(float(txEnd) - startMb) #at least one pixel + + if (geneEndPix < xLeftOffset): + return; # this gene is not on the screen + elif (geneEndPix > xLeftOffset + plotWidth): + geneEndPix = xLeftOffset + plotWidth; # clip the last in-range gene + if (geneStartPix > xLeftOffset + plotWidth): + return; # we are outside the valid on-screen range, so stop drawing genes + elif (geneStartPix < xLeftOffset): + geneStartPix = xLeftOffset; # clip the first in-range gene + + #color the gene based on SNP density + + + #found earlier, needs to be recomputed as snps are added + + #always apply colors now, even if SNP Track not checked - Zach 11/24/2010 + + densities=[1.0000000000000001e-05, 0.094094033555233408, 0.3306166377816987, 0.88246026851027781, 2.6690084029581951, 4.1, 61.0] + if SNPdensity < densities[0]: + myColor = pid.black + elif SNPdensity < densities[1]: + myColor = pid.purple + elif SNPdensity < densities[2]: + myColor = pid.darkblue + elif SNPdensity < densities[3]: + myColor = pid.darkgreen + elif SNPdensity < densities[4]: + myColor = pid.gold + elif SNPdensity < densities[5]: + myColor = pid.darkorange + else: + myColor = pid.darkred + + outlineColor = myColor + fillColor = myColor + + TITLE = "Gene: %s (%s)\nFrom %2.3f to %2.3f Mb (%s)\nNum. exons: %d." % (geneSymbol, accession, float(txStart), float(txEnd), strand, exonCount) + # NL: 06-02-2011 Rob required to change this link for gene related + HREF=geneNCBILink %geneSymbol + + elif self.species == "rat": + exonStarts = [] + exonEnds = [] + txStart = theGO["TxStart"] + txEnd = theGO["TxEnd"] + cdsStart = theGO["TxStart"] + cdsEnd = theGO["TxEnd"] + geneId = theGO["GeneID"] + geneSymbol = theGO["GeneSymbol"] + strand = theGO["Strand"] + exonCount = 0 + + geneStartPix = xLeftOffset + plotXScale*(float(txStart) - startMb) + geneEndPix = xLeftOffset + plotXScale*(float(txEnd) - startMb) #at least one pixel + + if (geneEndPix < xLeftOffset): + return; # this gene is not on the screen + elif (geneEndPix > xLeftOffset + plotWidth): + geneEndPix = xLeftOffset + plotWidth; # clip the last in-range gene + if (geneStartPix > xLeftOffset + plotWidth): + return; # we are outside the valid on-screen range, so stop drawing genes + elif (geneStartPix < xLeftOffset): + geneStartPix = xLeftOffset; # clip the first in-range gene + + outlineColor = pid.darkblue + fillColor = pid.darkblue + TITLE = "Gene: %s\nFrom %2.3f to %2.3f Mb (%s)" % (geneSymbol, float(txStart), float(txEnd), strand) + # NL: 06-02-2011 Rob required to change this link for gene related + HREF=geneNCBILink %geneSymbol + else: + outlineColor = pid.orange + fillColor = pid.orange + TITLE = "Gene: %s" % geneSymbol + + #Draw Genes + geneYLocation = yPaddingTop + (gIndex % self.NUM_GENE_ROWS) * self.EACH_GENE_HEIGHT*zoom + + if 1:#drawClickableRegions: + geneYLocation += self.UCSC_BAND_HEIGHT + self.BAND_SPACING + self.ENSEMBL_BAND_HEIGHT + self.BAND_SPACING + self.WEBQTL_BAND_HEIGHT + self.BAND_SPACING + else: + geneYLocation += self.BAND_SPACING + + #draw the detail view + if self.endMb - self.startMb <= self.DRAW_DETAIL_MB and geneEndPix - geneStartPix > self.EACH_GENE_ARROW_SPACING * 3: + utrColor = pid.Color(0.66, 0.66, 0.66) + arrowColor = pid.Color(0.7, 0.7, 0.7) + + #draw the line that runs the entire length of the gene + #canvas.drawString(str(geneStartPix), 300, 400) + canvas.drawLine(geneStartPix, geneYLocation + self.EACH_GENE_HEIGHT/2*zoom, geneEndPix, geneYLocation + self.EACH_GENE_HEIGHT/2*zoom, color=outlineColor, width=1) + + #draw the arrows + for xCoord in range(0, geneEndPix-geneStartPix): + + if (xCoord % self.EACH_GENE_ARROW_SPACING == 0 and xCoord + self.EACH_GENE_ARROW_SPACING < geneEndPix-geneStartPix) or xCoord == 0: + if strand == "+": + canvas.drawLine(geneStartPix + xCoord, geneYLocation, geneStartPix + xCoord + self.EACH_GENE_ARROW_WIDTH, geneYLocation +(self.EACH_GENE_HEIGHT / 2)*zoom, color=arrowColor, width=1) + canvas.drawLine(geneStartPix + xCoord, geneYLocation + self.EACH_GENE_HEIGHT*zoom, geneStartPix + xCoord+self.EACH_GENE_ARROW_WIDTH, geneYLocation + (self.EACH_GENE_HEIGHT / 2) * zoom, color=arrowColor, width=1) + else: + canvas.drawLine(geneStartPix + xCoord + self.EACH_GENE_ARROW_WIDTH, geneYLocation, geneStartPix + xCoord, geneYLocation +(self.EACH_GENE_HEIGHT / 2)*zoom, color=arrowColor, width=1) + canvas.drawLine(geneStartPix + xCoord + self.EACH_GENE_ARROW_WIDTH, geneYLocation + self.EACH_GENE_HEIGHT*zoom, geneStartPix + xCoord, geneYLocation + (self.EACH_GENE_HEIGHT / 2)*zoom, color=arrowColor, width=1) + + #draw the blocks for the exon regions + for i in range(0, len(exonStarts)): + exonStartPix = (exonStarts[i]-startMb)*plotXScale + xLeftOffset + exonEndPix = (exonEnds[i]-startMb)*plotXScale + xLeftOffset + if (exonStartPix < xLeftOffset): + exonStartPix = xLeftOffset + if (exonEndPix < xLeftOffset): + exonEndPix = xLeftOffset + if (exonEndPix > xLeftOffset + plotWidth): + exonEndPix = xLeftOffset + plotWidth + if (exonStartPix > xLeftOffset + plotWidth): + exonStartPix = xLeftOffset + plotWidth + canvas.drawRect(exonStartPix, geneYLocation, exonEndPix, (geneYLocation + self.EACH_GENE_HEIGHT*zoom), edgeColor = outlineColor, fillColor = fillColor) + + #draw gray blocks for 3' and 5' UTR blocks + if cdsStart and cdsEnd: + + utrStartPix = (txStart-startMb)*plotXScale + xLeftOffset + utrEndPix = (cdsStart-startMb)*plotXScale + xLeftOffset + if (utrStartPix < xLeftOffset): + utrStartPix = xLeftOffset + if (utrEndPix < xLeftOffset): + utrEndPix = xLeftOffset + if (utrEndPix > xLeftOffset + plotWidth): + utrEndPix = xLeftOffset + plotWidth + if (utrStartPix > xLeftOffset + plotWidth): + utrStartPix = xLeftOffset + plotWidth + canvas.drawRect(utrStartPix, geneYLocation, utrEndPix, (geneYLocation+self.EACH_GENE_HEIGHT*zoom), edgeColor=utrColor, fillColor =utrColor) + + if self.DRAW_UTR_LABELS and self.endMb - self.startMb <= self.DRAW_UTR_LABELS_MB: + if strand == "-": + labelText = "3'" + else: + labelText = "5'" + canvas.drawString(labelText, utrStartPix-9, geneYLocation+self.EACH_GENE_HEIGHT, pid.Font(face="helvetica", size=2)) + + #the second UTR region + + utrStartPix = (cdsEnd-startMb)*plotXScale + xLeftOffset + utrEndPix = (txEnd-startMb)*plotXScale + xLeftOffset + if (utrStartPix < xLeftOffset): + utrStartPix = xLeftOffset + if (utrEndPix < xLeftOffset): + utrEndPix = xLeftOffset + if (utrEndPix > xLeftOffset + plotWidth): + utrEndPix = xLeftOffset + plotWidth + if (utrStartPix > xLeftOffset + plotWidth): + utrStartPix = xLeftOffset + plotWidth + canvas.drawRect(utrStartPix, geneYLocation, utrEndPix, (geneYLocation+self.EACH_GENE_HEIGHT*zoom), edgeColor=utrColor, fillColor =utrColor) + + if self.DRAW_UTR_LABELS and self.endMb - self.startMb <= self.DRAW_UTR_LABELS_MB: + if tstrand == "-": + labelText = "5'" + else: + labelText = "3'" + canvas.drawString(labelText, utrEndPix+2, geneYLocation+self.EACH_GENE_HEIGHT, pid.Font(face="helvetica", size=2)) + + #draw the genes as rectangles + else: + canvas.drawRect(geneStartPix, geneYLocation, geneEndPix, (geneYLocation + self.EACH_GENE_HEIGHT*zoom), edgeColor = outlineColor, fillColor = fillColor) + + COORDS = "%d, %d, %d, %d" %(geneStartPix, geneYLocation, geneEndPix, (geneYLocation + self.EACH_GENE_HEIGHT)) + # NL: 06-02-2011 Rob required to display NCBI info in a new window + gifmap.areas.append(HT.Area(shape='rect',coords=COORDS,href=HREF, title=TITLE,target="_blank")) + +## BEGIN HaplotypeAnalyst + def drawHaplotypeBand(self, canvas, gifmap, plotXScale, offset= (40, 120, 80, 10), zoom = 1, startMb = None, endMb = None): + if self.plotScale != 'physic' or self.selectedChr == -1 or not self.geneCol: + return + + + fpText = open(os.path.join(webqtlConfig.TMPDIR, "hallo") + '.txt','wb') + + clickableRegionLabelFont=pid.Font(ttf="verdana", size=9, bold=0) + + xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset + plotWidth = canvas.size[0] - xLeftOffset - xRightOffset + plotHeight = canvas.size[1] - yTopOffset - yBottomOffset + yZero = canvas.size[1] - yBottomOffset + fontZoom = zoom + widthMultiplier = 1 + + yPaddingTop = yTopOffset + + exprdrawn = 0 + + thisTrait = self.traitList[0] + _strains, _vals, _vars = thisTrait.exportInformative() + + smd=[] + for ii, _val in enumerate(_vals): + temp = GeneralObject(name=_strains[ii], value=_val) + smd.append(temp) + + smd.sort(lambda A, B: cmp(A.value, B.value)) + smd.reverse() + + bxdlist=list(self.genotype.prgy) + + oldgeneEndPix = -1 + #Initializing plotRight, error before + plotRight = xRightOffset + +#### find out PlotRight + for i, _locus in enumerate(self.genotype[0]): + txStart = self.genotype[0][i].Mb + txEnd = self.genotype[0][i].Mb + + geneStartPix = xLeftOffset + plotXScale*(float(txStart) - startMb) - 0 + geneEndPix = xLeftOffset + plotXScale*(float(txEnd) - startMb) - 0 + + drawit = 1 + if (geneStartPix < xLeftOffset): + drawit = 0; + if (geneStartPix > xLeftOffset + plotWidth): + drawit = 0; + + if drawit == 1: + + if self.genotype[0][i].name != " - " : + + plotRight = geneEndPix + 4 + + + +#### end find out PlotRight + + firstGene = 1 + lastGene = 0 + + #Sets the length to the length of the strain list. Beforehand, "oldgeno = self.genotype[0][i].genotype" + #was the only place it was initialized, which worked as long as the very start (startMb = None/0) wasn't being mapped. + #Now there should always be some value set for "oldgeno" - Zach 12/14/2010 + oldgeno = [None]*len(self.strainlist) + + for i, _locus in enumerate(self.genotype[0]): + txStart = self.genotype[0][i].Mb + txEnd = self.genotype[0][i].Mb + + geneStartPix = xLeftOffset + plotXScale*(float(txStart) - startMb) - 0 + geneEndPix = xLeftOffset + plotXScale*(float(txEnd) - startMb) + 0 + + if oldgeneEndPix >= xLeftOffset: + drawStart = oldgeneEndPix + 4 + else: + drawStart = xLeftOffset + 3 + + drawEnd = plotRight - 9 + + drawit = 1 + + if (geneStartPix < xLeftOffset): + if firstGene == 1: + drawit = 1 + else: + drawit = 0 + + elif (geneStartPix > (xLeftOffset + plotWidth - 3)): + if lastGene == 0: + drawit = 1 + drawEnd = xLeftOffset + plotWidth - 6 + lastGene = 1 + else: + break + + else: + firstGene = 0 + drawit = 1 + + if drawit == 1: + myColor = pid.darkblue + outlineColor = myColor + fillColor = myColor + + maxind=0 + + #Draw Genes + + geneYLocation = yPaddingTop + self.NUM_GENE_ROWS * (self.EACH_GENE_HEIGHT)*zoom + + if 1:#drawClickableRegions: + geneYLocation += self.UCSC_BAND_HEIGHT + self.BAND_SPACING + self.ENSEMBL_BAND_HEIGHT + self.BAND_SPACING + self.WEBQTL_BAND_HEIGHT + self.BAND_SPACING + else: + geneYLocation += self.BAND_SPACING + + if self.genotype[0][i].name != " - " : + + if (firstGene == 1) and (lastGene != 1): + oldgeneEndPix = drawStart = xLeftOffset + oldgeno = self.genotype[0][i].genotype + continue + + for j,_geno in enumerate (self.genotype[0][i].genotype): + + plotbxd=0 + for item in smd: + if item.name == bxdlist[j]: + plotbxd=1 + + if (plotbxd == 1): + ind = 0 + counter = 0 + for item in smd: + counter = counter + 1 + if item.name == bxdlist[j]: + ind = counter + maxind=max(ind,maxind) + + # lines + if (oldgeno[j] == -1 and _geno == -1): + mylineColor = self.HAPLOTYPE_NEGATIVE + elif (oldgeno[j] == 1 and _geno == 1): + mylineColor = self.HAPLOTYPE_POSITIVE + elif (oldgeno[j] == 0 and _geno == 0): + mylineColor = self.HAPLOTYPE_HETEROZYGOUS + else: + mylineColor = self.HAPLOTYPE_RECOMBINATION # XZ: Unknown + + canvas.drawLine(drawStart, geneYLocation+7+2*ind*self.EACH_GENE_HEIGHT*zoom, drawEnd, geneYLocation+7+2*ind*self.EACH_GENE_HEIGHT*zoom, color = mylineColor, width=zoom*(self.EACH_GENE_HEIGHT+2)) + + fillColor=pid.black + outlineColor=pid.black + if lastGene == 0: + canvas.drawRect(geneStartPix, geneYLocation+2*ind*self.EACH_GENE_HEIGHT*zoom, geneEndPix, geneYLocation+2*ind*self.EACH_GENE_HEIGHT+ 2*self.EACH_GENE_HEIGHT*zoom, edgeColor = outlineColor, fillColor = fillColor) + + + COORDS = "%d, %d, %d, %d" %(geneStartPix, geneYLocation+ind*self.EACH_GENE_HEIGHT, geneEndPix+1, (geneYLocation + ind*self.EACH_GENE_HEIGHT)) + TITLE = "Strain: %s, marker (%s) \n Position %2.3f Mb." % (bxdlist[j], self.genotype[0][i].name, float(txStart)) + HREF = '' + gifmap.areas.append(HT.Area(shape='rect',coords=COORDS,href=HREF, title=TITLE)) + + # if there are no more markers in a chromosome, the plotRight value calculated above will be before the plotWidth + # resulting in some empty space on the right side of the plot area. This draws an "unknown" bar from plotRight to the edge. + if (plotRight < (xLeftOffset + plotWidth - 3)) and (lastGene == 0): + drawEnd = xLeftOffset + plotWidth - 6 + mylineColor = self.HAPLOTYPE_RECOMBINATION + canvas.drawLine(plotRight, geneYLocation+7+2*ind*self.EACH_GENE_HEIGHT*zoom, drawEnd, geneYLocation+7+2*ind*self.EACH_GENE_HEIGHT*zoom, color = mylineColor, width=zoom*(self.EACH_GENE_HEIGHT+2)) + + + if lastGene == 0: + canvas.drawString("%s" % (self.genotype[0][i].name), geneStartPix , geneYLocation+17+2*maxind*self.EACH_GENE_HEIGHT*zoom, font=pid.Font(ttf="verdana", size=12, bold=0), color=pid.black, angle=-90) + + oldgeneEndPix = geneEndPix; + oldgeno = self.genotype[0][i].genotype + firstGene = 0 + else: + lastGene = 0 + + for j,_geno in enumerate (self.genotype[0][1].genotype): + + plotbxd=0 + for item in smd: + if item.name == bxdlist[j]: + plotbxd=1 + + if (plotbxd == 1): + + ind = 0 + counter = 0 + expr = 0 + for item in smd: + counter = counter + 1 + if item.name == bxdlist[j]: + ind = counter + expr = item.value + + # Place where font is hardcoded + canvas.drawString("%s" % (bxdlist[j]), (xLeftOffset + plotWidth + 10) , geneYLocation+8+2*ind*self.EACH_GENE_HEIGHT*zoom, font=pid.Font(ttf="verdana", size=12, bold=0), color=pid.black) + canvas.drawString("%2.2f" % (expr), (xLeftOffset + plotWidth + 60) , geneYLocation+8+2*ind*self.EACH_GENE_HEIGHT*zoom, font=pid.Font(ttf="verdana", size=12, bold=0), color=pid.black) + + fpText.close() + +## END HaplotypeAnalyst + + def drawClickBand(self, canvas, gifmap, plotXScale, offset= (40, 120, 80, 10), zoom = 1, startMb = None, endMb = None): + if self.plotScale != 'physic' or self.selectedChr == -1: + return + + xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset + plotWidth = canvas.size[0] - xLeftOffset - xRightOffset + plotHeight = canvas.size[1] - yTopOffset - yBottomOffset + yZero = canvas.size[1] - yBottomOffset + fontZoom = zoom + if zoom == 2: + fontZoom = 1.5 + + # only draw this many clickable regions (if you set it higher, you get more precision in clicking, + # but it makes the HTML huge, and takes forever to render the page in the first place) + # Draw the bands that you can click on to go to UCSC / Ensembl + MAX_CLICKABLE_REGION_DIVISIONS = 100 + clickableRegionLabelFont=pid.Font(ttf="verdana", size=9, bold=0) + pixelStep = max(5, int(float(plotWidth)/MAX_CLICKABLE_REGION_DIVISIONS)) + # pixelStep: every N pixels, we make a new clickable area for the user to go to that area of the genome. + + numBasesCurrentlyOnScreen = self.kONE_MILLION*abs(startMb - endMb) # Number of bases on screen now + flankingWidthInBases = int ( min( (float(numBasesCurrentlyOnScreen) / 2.0), (5*self.kONE_MILLION) ) ) + webqtlZoomWidth = numBasesCurrentlyOnScreen / 16.0 + # Flanking width should be such that we either zoom in to a 10 million base region, or we show the clicked region at the same scale as we are currently seeing. + + currentChromosome = self.genotype[0].name + i = 0 + + paddingTop = yTopOffset + ucscPaddingTop = paddingTop + self.WEBQTL_BAND_HEIGHT + self.BAND_SPACING + ensemblPaddingTop = ucscPaddingTop + self.UCSC_BAND_HEIGHT + self.BAND_SPACING + + if zoom == 1: + for pixel in range(xLeftOffset, xLeftOffset + plotWidth, pixelStep): + + calBase = self.kONE_MILLION*(startMb + (endMb-startMb)*(pixel-xLeftOffset-0.0)/plotWidth) + + xBrowse1 = pixel + xBrowse2 = min(xLeftOffset + plotWidth, (pixel + pixelStep - 1)) + + WEBQTL_COORDS = "%d, %d, %d, %d" % (xBrowse1, paddingTop, xBrowse2, (paddingTop+self.WEBQTL_BAND_HEIGHT)) + bandWidth = xBrowse2 - xBrowse1 + WEBQTL_HREF = "javascript:centerIntervalMapOnRange2('%s', %f, %f, document.changeViewForm)" % (currentChromosome, max(0, (calBase-webqtlZoomWidth))/1000000.0, (calBase+webqtlZoomWidth)/1000000.0) + + WEBQTL_TITLE = "Click to view this section of the genome in WebQTL" + gifmap.areas.append(HT.Area(shape='rect',coords=WEBQTL_COORDS,href=WEBQTL_HREF, title=WEBQTL_TITLE)) + canvas.drawRect(xBrowse1, paddingTop, xBrowse2, (paddingTop + self.WEBQTL_BAND_HEIGHT), edgeColor=self.CLICKABLE_WEBQTL_REGION_COLOR, fillColor=self.CLICKABLE_WEBQTL_REGION_COLOR) + canvas.drawLine(xBrowse1, paddingTop, xBrowse1, (paddingTop + self.WEBQTL_BAND_HEIGHT), color=self.CLICKABLE_WEBQTL_REGION_OUTLINE_COLOR) + + UCSC_COORDS = "%d, %d, %d, %d" %(xBrowse1, ucscPaddingTop, xBrowse2, (ucscPaddingTop+self.UCSC_BAND_HEIGHT)) + if self.species == "mouse": + UCSC_HREF = "http://genome.ucsc.edu/cgi-bin/hgTracks?db=%s&position=chr%s:%d-%d&hgt.customText=%s/snp/chr%s" % (self._ucscDb, currentChromosome, max(0, calBase-flankingWidthInBases), calBase+flankingWidthInBases, webqtlConfig.PORTADDR, currentChromosome) + else: + UCSC_HREF = "http://genome.ucsc.edu/cgi-bin/hgTracks?db=%s&position=chr%s:%d-%d" % (self._ucscDb, currentChromosome, max(0, calBase-flankingWidthInBases), calBase+flankingWidthInBases) + UCSC_TITLE = "Click to view this section of the genome in the UCSC Genome Browser" + gifmap.areas.append(HT.Area(shape='rect',coords=UCSC_COORDS,href=UCSC_HREF, title=UCSC_TITLE)) + canvas.drawRect(xBrowse1, ucscPaddingTop, xBrowse2, (ucscPaddingTop+self.UCSC_BAND_HEIGHT), edgeColor=self.CLICKABLE_UCSC_REGION_COLOR, fillColor=self.CLICKABLE_UCSC_REGION_COLOR) + canvas.drawLine(xBrowse1, ucscPaddingTop, xBrowse1, (ucscPaddingTop+self.UCSC_BAND_HEIGHT), color=self.CLICKABLE_UCSC_REGION_OUTLINE_COLOR) + + ENSEMBL_COORDS = "%d, %d, %d, %d" %(xBrowse1, ensemblPaddingTop, xBrowse2, (ensemblPaddingTop+self.ENSEMBL_BAND_HEIGHT)) + if self.species == "mouse": + ENSEMBL_HREF = "http://www.ensembl.org/Mus_musculus/contigview?highlight=&chr=%s&vc_start=%d&vc_end=%d&x=35&y=12" % (currentChromosome, max(0, calBase-flankingWidthInBases), calBase+flankingWidthInBases) + else: + ENSEMBL_HREF = "http://www.ensembl.org/Rattus_norvegicus/contigview?chr=%s&start=%d&end=%d" % (currentChromosome, max(0, calBase-flankingWidthInBases), calBase+flankingWidthInBases) + ENSEMBL_TITLE = "Click to view this section of the genome in the Ensembl Genome Browser" + gifmap.areas.append(HT.Area(shape='rect',coords=ENSEMBL_COORDS,href=ENSEMBL_HREF, title=ENSEMBL_TITLE)) + canvas.drawRect(xBrowse1, ensemblPaddingTop, xBrowse2, (ensemblPaddingTop+self.ENSEMBL_BAND_HEIGHT), edgeColor=self.CLICKABLE_ENSEMBL_REGION_COLOR, fillColor=self.CLICKABLE_ENSEMBL_REGION_COLOR) + canvas.drawLine(xBrowse1, ensemblPaddingTop, xBrowse1, (ensemblPaddingTop+self.ENSEMBL_BAND_HEIGHT), color=self.CLICKABLE_ENSEMBL_REGION_OUTLINE_COLOR) + # end for + + canvas.drawString("Click to view the corresponding section of the genome in an 8x expanded WebQTL map", (xLeftOffset + 10), paddingTop + self.WEBQTL_BAND_HEIGHT/2, font=clickableRegionLabelFont, color=self.CLICKABLE_WEBQTL_TEXT_COLOR) + canvas.drawString("Click to view the corresponding section of the genome in the UCSC Genome Browser", (xLeftOffset + 10), ucscPaddingTop + self.UCSC_BAND_HEIGHT/2, font=clickableRegionLabelFont, color=self.CLICKABLE_UCSC_TEXT_COLOR) + canvas.drawString("Click to view the corresponding section of the genome in the Ensembl Genome Browser", (xLeftOffset+10), ensemblPaddingTop + self.ENSEMBL_BAND_HEIGHT/2, font=clickableRegionLabelFont, color=self.CLICKABLE_ENSEMBL_TEXT_COLOR) + + #draw the gray text + chrFont = pid.Font(ttf="verdana", size=26*zoom, bold=1) + traitFont = pid.Font(ttf="verdana", size=14, bold=0) + chrX = xLeftOffset + plotWidth - 2 - canvas.stringWidth("Chr %s" % currentChromosome, font=chrFont) + canvas.drawString("Chr %s" % currentChromosome, chrX, ensemblPaddingTop-5, font=chrFont, color=pid.gray) + traitX = chrX - 28 - canvas.stringWidth("database", font=traitFont) + # end of drawBrowserClickableRegions + else: + #draw the gray text + chrFont = pid.Font(ttf="verdana", size=26*zoom, bold=1) + traitFont = pid.Font(ttf="verdana", size=14, bold=0) + chrX = xLeftOffset + (plotWidth - canvas.stringWidth("Chr %s" % currentChromosome, font=chrFont))/2 + canvas.drawString("Chr %s" % currentChromosome, chrX, 32, font=chrFont, color=pid.gray) + traitX = chrX - 28 - canvas.stringWidth("database", font=traitFont) + # end of drawBrowserClickableRegions + pass + + def drawXAxis(self, canvas, drawAreaHeight, gifmap, plotXScale, showLocusForm, offset= (40, 120, 80, 10), zoom = 1, startMb = None, endMb = None): + xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset + plotWidth = canvas.size[0] - xLeftOffset - xRightOffset + plotHeight = canvas.size[1] - yTopOffset - yBottomOffset + yZero = canvas.size[1] - yBottomOffset + fontZoom = zoom + if zoom == 2: + fontZoom = 1.5 + + #Parameters + NUM_MINOR_TICKS = 5 # Number of minor ticks between major ticks + X_MAJOR_TICK_THICKNESS = 2 + X_MINOR_TICK_THICKNESS = 1 + X_AXIS_THICKNESS = 1*zoom + + # ======= Alex: Draw the X-axis labels (megabase location) + MBLabelFont = pid.Font(ttf="verdana", size=15*zoom, bold=0) + xMajorTickHeight = 10 * zoom # How high the tick extends below the axis + xMinorTickHeight = 5*zoom + xAxisTickMarkColor = pid.black + xAxisLabelColor = pid.black + fontHeight = 12*fontZoom # How tall the font that we're using is + spacingFromLabelToAxis = 5 + spacingFromLineToLabel = 3 + + if self.plotScale == 'physic': + strYLoc = yZero + spacingFromLabelToAxis + canvas.fontHeight(MBLabelFont) + ###Physical single chromosome view + if self.selectedChr > -1: + graphMbWidth = endMb - startMb + XScale = Plot.detScale(startMb, endMb) + XStart, XEnd, XStep = XScale + if XStep < 8: + XStep *= 2 + spacingAmtX = spacingAmt = (XEnd-XStart)/XStep + + j = 0 + while abs(spacingAmtX -int(spacingAmtX)) >= spacingAmtX/100.0 and j < 6: + j += 1 + spacingAmtX *= 10 + + formatStr = '%%2.%df' % j + + for counter, _Mb in enumerate(Plot.frange(XStart, XEnd, spacingAmt / NUM_MINOR_TICKS)): + if _Mb < startMb or _Mb > endMb: + continue + Xc = xLeftOffset + plotXScale*(_Mb - startMb) + if counter % NUM_MINOR_TICKS == 0: # Draw a MAJOR mark, not just a minor tick mark + canvas.drawLine(Xc, yZero, Xc, yZero+xMajorTickHeight, color=xAxisTickMarkColor, width=X_MAJOR_TICK_THICKNESS) # Draw the MAJOR tick mark + labelStr = str(formatStr % _Mb) # What Mbase location to put on the label + strWidth = canvas.stringWidth(labelStr, font=MBLabelFont) + drawStringXc = (Xc - (strWidth / 2.0)) + canvas.drawString(labelStr, drawStringXc, strYLoc, font=MBLabelFont, color=xAxisLabelColor, angle=0) + else: + canvas.drawLine(Xc, yZero, Xc, yZero+xMinorTickHeight, color=xAxisTickMarkColor, width=X_MINOR_TICK_THICKNESS) # Draw the MINOR tick mark + # end else + + ###Physical genome wide view + else: + distScale = 0 + startPosX = xLeftOffset + for i, distLen in enumerate(self.ChrLengthDistList): + if distScale == 0: #universal scale in whole genome mapping + if distLen > 75: + distScale = 25 + elif distLen > 30: + distScale = 10 + else: + distScale = 5 + for tickdists in range(distScale, ceil(distLen), distScale): + canvas.drawLine(startPosX + tickdists*plotXScale, yZero, startPosX + tickdists*plotXScale, yZero + 7, color=pid.black, width=1*zoom) + canvas.drawString(str(tickdists), startPosX+tickdists*plotXScale, yZero + 10*zoom, color=pid.black, font=MBLabelFont, angle=270) + startPosX += (self.ChrLengthDistList[i]+self.GraphInterval)*plotXScale + + megabaseLabelFont = pid.Font(ttf="verdana", size=18*zoom*1.5, bold=0) + canvas.drawString("Megabases", xLeftOffset + (plotWidth - canvas.stringWidth("Megabases", font=megabaseLabelFont))/2, + strYLoc + canvas.fontHeight(MBLabelFont)+ 10*(zoom%2) + 10, font=megabaseLabelFont, color=pid.black) + pass + else: + ChrAInfo = [] + preLpos = -1 + distinctCount = 0.0 + if len(self.genotype) > 1: + for i, _chr in enumerate(self.genotype): + thisChr = [] + Locus0CM = _chr[0].cM + nLoci = len(_chr) + if nLoci <= 8: + for _locus in _chr: + if _locus.name != ' - ': + if _locus.cM != preLpos: + distinctCount += 1 + preLpos = _locus.cM + thisChr.append([_locus.name, _locus.cM-Locus0CM]) + else: + for j in (0, nLoci/4, nLoci/2, nLoci*3/4, -1): + while _chr[j].name == ' - ': + j += 1 + if _chr[j].cM != preLpos: + distinctCount += 1 + preLpos = _chr[j].cM + thisChr.append([_chr[j].name, _chr[j].cM-Locus0CM]) + ChrAInfo.append(thisChr) + else: + for i, _chr in enumerate(self.genotype): + thisChr = [] + Locus0CM = _chr[0].cM + for _locus in _chr: + if _locus.name != ' - ': + if _locus.cM != preLpos: + distinctCount += 1 + preLpos = _locus.cM + thisChr.append([_locus.name, _locus.cM-Locus0CM]) + ChrAInfo.append(thisChr) + + stepA = (plotWidth+0.0)/distinctCount + + LRectWidth = 10 + LRectHeight = 3 + offsetA = -stepA + lineColor = pid.lightblue + startPosX = xLeftOffset + for j, ChrInfo in enumerate(ChrAInfo): + preLpos = -1 + for i, item in enumerate(ChrInfo): + Lname,Lpos = item + if Lpos != preLpos: + offsetA += stepA + differ = 1 + else: + differ = 0 + preLpos = Lpos + Lpos *= plotXScale + if self.selectedChr > -1: + Zorder = i % 5 + else: + Zorder = 0 + if differ: + canvas.drawLine(startPosX+Lpos,yZero,xLeftOffset+offsetA,\ + yZero+25, color=lineColor) + canvas.drawLine(xLeftOffset+offsetA,yZero+25,xLeftOffset+offsetA,\ + yZero+40+Zorder*(LRectWidth+3),color=lineColor) + rectColor = pid.orange + else: + canvas.drawLine(xLeftOffset+offsetA, yZero+40+Zorder*(LRectWidth+3)-3,\ + xLeftOffset+offsetA, yZero+40+Zorder*(LRectWidth+3),color=lineColor) + rectColor = pid.deeppink + canvas.drawRect(xLeftOffset+offsetA, yZero+40+Zorder*(LRectWidth+3),\ + xLeftOffset+offsetA-LRectHeight,yZero+40+Zorder*(LRectWidth+3)+LRectWidth,\ + edgeColor=rectColor,fillColor=rectColor,edgeWidth = 0) + COORDS="%d,%d,%d,%d"%(xLeftOffset+offsetA-LRectHeight, yZero+40+Zorder*(LRectWidth+3),\ + xLeftOffset+offsetA,yZero+40+Zorder*(LRectWidth+3)+LRectWidth) + HREF="javascript:showDatabase3('%s','%s','%s','');" % (showLocusForm,fd.RISet+"Geno", Lname) + Areas=HT.Area(shape='rect',coords=COORDS,href=HREF, title="Locus : " + Lname) + gifmap.areas.append(Areas) + ##piddle bug + if j == 0: + canvas.drawLine(startPosX,yZero,startPosX,yZero+40, color=lineColor) + startPosX += (self.ChrLengthDistList[j]+self.GraphInterval)*plotXScale + + canvas.drawLine(xLeftOffset, yZero, xLeftOffset+plotWidth, yZero, color=pid.black, width=X_AXIS_THICKNESS) # Draw the X axis itself + + + def drawQTL(self, canvas, drawAreaHeight, gifmap, plotXScale, offset= (40, 120, 80, 10), zoom = 1, startMb = None, endMb = None): + xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset + plotWidth = canvas.size[0] - xLeftOffset - xRightOffset + plotHeight = canvas.size[1] - yTopOffset - yBottomOffset + fontZoom = zoom + if zoom == 2: + fontZoom = 1.5 + + INTERCROSS = (self.genotype.type=="intercross") + + LRSHeightThresh = drawAreaHeight + AdditiveHeightThresh = drawAreaHeight/2 + DominanceHeightThresh = drawAreaHeight/2 + + #draw the LRS scale + #We first determine whether or not we are using a sliding scale. + #If so, we need to compute the maximum LRS value to determine where the max y-value should be, and call this LRSMax. + #LRSTop is then defined to be above the LRSMax by enough to add one additional LRSScale increment. + #if we are using a set-scale, then we set LRSTop to be the user's value, and LRSMax doesn't matter. + + if self.LRS_LOD == 'LOD': + lodm = self.LODFACTOR + else: + lodm = 1.0 + + if self.lrsMax <= 0: #sliding scale + LRSMax = max(map(max, self.qtlresults)).lrs + #genotype trait will give infinite LRS + LRSMax = min(LRSMax, webqtlConfig.MAXLRS) + if self.permChecked and not self.multipleInterval: + self.significance = min(self.significance, webqtlConfig.MAXLRS) + self.suggestive = min(self.suggestive, webqtlConfig.MAXLRS) + LRSMax = max(self.significance, LRSMax) + else: + LRSMax = self.lrsMax*lodm + + if LRSMax/lodm > 100: + LRSScale = 20.0 + elif LRSMax/lodm > 20: + LRSScale = 5.0 + elif LRSMax/lodm > 7.5: + LRSScale = 2.5 + else: + LRSScale = 1.0 + + LRSAxisList = Plot.frange(LRSScale, LRSMax/lodm, LRSScale) + #make sure the user's value appears on the y-axis + #update by NL 6-21-2011: round the LOD value to 100 when LRSMax is equal to 460 + LRSAxisList.append(round(LRSMax/lodm)) + + #draw the "LRS" or "LOD" string to the left of the axis + LRSScaleFont=pid.Font(ttf="verdana", size=16*zoom, bold=0) + LRSLODFont=pid.Font(ttf="verdana", size=18*zoom*1.5, bold=0) + yZero = yTopOffset + plotHeight + + canvas.drawString(self.LRS_LOD, xLeftOffset - canvas.stringWidth("999.99", font=LRSScaleFont) - 15*(zoom-1), \ + yZero - 150 - 300*(zoom - 1), font=LRSLODFont, color=pid.black, angle=90) + + for item in LRSAxisList: + if LRSMax == 0.0: + LRSMax = 0.000001 + yLRS = yZero - (item*lodm/LRSMax) * LRSHeightThresh + canvas.drawLine(xLeftOffset, yLRS, xLeftOffset - 4, yLRS, color=self.LRS_COLOR, width=1*zoom) + scaleStr = "%2.1f" % item + #Draw the LRS/LOD Y axis label + canvas.drawString(scaleStr, xLeftOffset-4-canvas.stringWidth(scaleStr, font=LRSScaleFont)-5, yLRS+3, font=LRSScaleFont, color=self.LRS_COLOR) + + + #"Significant" and "Suggestive" Drawing Routine + # ======= Draw the thick lines for "Significant" and "Suggestive" ===== (crowell: I tried to make the SNPs draw over these lines, but piddle wouldn't have it...) + if self.permChecked and not self.multipleInterval: + significantY = yZero - self.significance*LRSHeightThresh/LRSMax + suggestiveY = yZero - self.suggestive*LRSHeightThresh/LRSMax + startPosX = xLeftOffset + for i, _chr in enumerate(self.genotype): + rightEdge = int(startPosX + self.ChrLengthDistList[i]*plotXScale - self.SUGGESTIVE_WIDTH/1.5) + canvas.drawLine(startPosX+self.SUGGESTIVE_WIDTH/1.5, suggestiveY, rightEdge, suggestiveY, color=self.SUGGESTIVE_COLOR, + width=self.SUGGESTIVE_WIDTH*zoom, clipX=(xLeftOffset, xLeftOffset + plotWidth-2)) + canvas.drawLine(startPosX+self.SUGGESTIVE_WIDTH/1.5, significantY, rightEdge, significantY, color=self.SIGNIFICANT_COLOR, + width=self.SIGNIFICANT_WIDTH*zoom, clipX=(xLeftOffset, xLeftOffset + plotWidth-2)) + sugg_coords = "%d, %d, %d, %d" % (startPosX, suggestiveY-2, rightEdge + 2*zoom, suggestiveY+2) + sig_coords = "%d, %d, %d, %d" % (startPosX, significantY-2, rightEdge + 2*zoom, significantY+2) + if self.LRS_LOD == 'LRS': + sugg_title = "Suggestive LRS = %0.2f" % self.suggestive + sig_title = "Significant LRS = %0.2f" % self.significance + else: + sugg_title = "Suggestive LOD = %0.2f" % (self.suggestive/4.61) + sig_title = "Significant LOD = %0.2f" % (self.significance/4.61) + Areas1 = HT.Area(shape='rect',coords=sugg_coords,title=sugg_title) + Areas2 = HT.Area(shape='rect',coords=sig_coords,title=sig_title) + gifmap.areas.append(Areas1) + gifmap.areas.append(Areas2) + + startPosX += (self.ChrLengthDistList[i]+self.GraphInterval)*plotXScale + + + if self.multipleInterval: + lrsEdgeWidth = 1 + else: + additiveMax = max(map(lambda X : abs(X.additive), self.qtlresults[0])) + if INTERCROSS: + dominanceMax = max(map(lambda X : abs(X.dominance), self.qtlresults[0])) + else: + dominanceMax = -1 + lrsEdgeWidth = 2 + + if zoom == 2: + lrsEdgeWidth = 2 * lrsEdgeWidth + for i, qtlresult in enumerate(self.qtlresults): + m = 0 + startPosX = xLeftOffset + thisLRSColor = self.colorCollection[i] + for j, _chr in enumerate(self.genotype): + LRSCoordXY = [] + AdditiveCoordXY = [] + DominanceCoordXY = [] + for k, _locus in enumerate(_chr): + if self.plotScale == 'physic': + Xc = startPosX + (_locus.Mb-startMb)*plotXScale + else: + Xc = startPosX + (_locus.cM-_chr[0].cM)*plotXScale + # updated by NL 06-18-2011: + # fix the over limit LRS graph issue since genotype trait may give infinite LRS; + # for any lrs is over than 460(LRS max in this system), it will be reset to 460 + if qtlresult[m].lrs> 460 or qtlresult[m].lrs=='inf': + Yc = yZero - webqtlConfig.MAXLRS*LRSHeightThresh/LRSMax + else: + Yc = yZero - qtlresult[m].lrs*LRSHeightThresh/LRSMax + + LRSCoordXY.append((Xc, Yc)) + if not self.multipleInterval and self.additiveChecked: + if additiveMax == 0.0: + additiveMax = 0.000001 + Yc = yZero - qtlresult[m].additive*AdditiveHeightThresh/additiveMax + AdditiveCoordXY.append((Xc, Yc)) + if not self.multipleInterval and INTERCROSS and self.additiveChecked: + Yc = yZero - qtlresult[m].dominance*DominanceHeightThresh/dominanceMax + DominanceCoordXY.append((Xc, Yc)) + m += 1 + canvas.drawPolygon(LRSCoordXY,edgeColor=thisLRSColor,closed=0, edgeWidth=lrsEdgeWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth)) + + lineWidth = 1 + 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)) + if not self.multipleInterval and INTERCROSS and self.dominanceChecked: + plusColor = self.DOMINANCE_COLOR_POSITIVE + minusColor = self.DOMINANCE_COLOR_NEGATIVE + for k, aPoint in enumerate(DominanceCoordXY): + if k > 0: + Xc0, Yc0 = DominanceCoordXY[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)) + startPosX += (self.ChrLengthDistList[j]+self.GraphInterval)*plotXScale + + ###draw additive scale + if not self.multipleInterval and self.additiveChecked: + additiveScaleFont=pid.Font(ttf="verdana",size=16*zoom,bold=0) + additiveScale = Plot.detScaleOld(0,additiveMax) + additiveStep = (additiveScale[1]-additiveScale[0])/additiveScale[2] + additiveAxisList = Plot.frange(0, additiveScale[1], additiveStep) + maxAdd = additiveScale[1] + addPlotScale = AdditiveHeightThresh/additiveMax + + additiveAxisList.append(additiveScale[1]) + for item in additiveAxisList: + additiveY = yZero - item*addPlotScale + canvas.drawLine(xLeftOffset + plotWidth,additiveY,xLeftOffset+4+ plotWidth,additiveY,color=self.ADDITIVE_COLOR_POSITIVE, width=1*zoom) + scaleStr = "%2.3f" % item + canvas.drawString(scaleStr,xLeftOffset + plotWidth +6,additiveY+5,font=additiveScaleFont,color=self.ADDITIVE_COLOR_POSITIVE) + + canvas.drawLine(xLeftOffset+plotWidth,additiveY,xLeftOffset+plotWidth,yZero,color=self.ADDITIVE_COLOR_POSITIVE, width=1*zoom) + + canvas.drawLine(xLeftOffset, yZero, xLeftOffset, yTopOffset + 30*(zoom - 1), color=self.LRS_COLOR, width=1*zoom) #the blue line running up the y axis + + + def drawGraphBackground(self, canvas, gifmap, offset= (80, 120, 80, 50), zoom = 1, startMb = None, endMb = None): + ##conditions + ##multiple Chromosome view + ##single Chromosome Physical + ##single Chromosome Genetic + xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset + plotWidth = canvas.size[0] - xLeftOffset - xRightOffset + plotHeight = canvas.size[1] - yTopOffset - yBottomOffset + yBottom = yTopOffset+plotHeight + fontZoom = zoom + if zoom == 2: + fontZoom = 1.5 + yTopOffset += 30 + + #calculate plot scale + if self.plotScale != 'physic': + self.ChrLengthDistList = self.ChrLengthCMList + drawRegionDistance = self.ChrLengthCMSum + else: + self.ChrLengthDistList = self.ChrLengthMbList + drawRegionDistance = self.ChrLengthMbSum + + if self.selectedChr > -1: #single chromosome view + spacingAmt = plotWidth/13.5 + i = 0 + for startPix in Plot.frange(xLeftOffset, xLeftOffset+plotWidth, spacingAmt): + if (i % 2 == 0): + theBackColor = self.GRAPH_BACK_DARK_COLOR + else: + theBackColor = self.GRAPH_BACK_LIGHT_COLOR + i += 1 + canvas.drawRect(startPix, yTopOffset, min(startPix+spacingAmt, xLeftOffset+plotWidth), \ + yBottom, edgeColor=theBackColor, fillColor=theBackColor) + + drawRegionDistance = self.ChrLengthDistList[self.selectedChr] + self.ChrLengthDistList = [drawRegionDistance] + if self.plotScale == 'physic': + plotXScale = plotWidth / (endMb-startMb) + else: + plotXScale = plotWidth / drawRegionDistance + + else: #multiple chromosome view + plotXScale = plotWidth / ((len(self.genotype)-1)*self.GraphInterval + drawRegionDistance) + + startPosX = xLeftOffset + if fontZoom == 1.5: + chrFontZoom = 2 + else: + chrFontZoom = 1 + chrLabelFont=pid.Font(ttf="verdana",size=24*chrFontZoom,bold=0) + + for i, _chr in enumerate(self.genotype): + if (i % 2 == 0): + theBackColor = self.GRAPH_BACK_DARK_COLOR + else: + theBackColor = self.GRAPH_BACK_LIGHT_COLOR + + #draw the shaded boxes and the sig/sug thick lines + canvas.drawRect(startPosX, yTopOffset, startPosX + self.ChrLengthDistList[i]*plotXScale, \ + yBottom, edgeColor=pid.gainsboro,fillColor=theBackColor) + + chrNameWidth = canvas.stringWidth(_chr.name, font=chrLabelFont) + chrStartPix = startPosX + (self.ChrLengthDistList[i]*plotXScale -chrNameWidth)/2 + chrEndPix = startPosX + (self.ChrLengthDistList[i]*plotXScale +chrNameWidth)/2 + + canvas.drawString(_chr.name, chrStartPix, yTopOffset + 20 ,font = chrLabelFont,color=pid.black) + COORDS = "%d,%d,%d,%d" %(chrStartPix, yTopOffset, chrEndPix,yTopOffset +20) + + #add by NL 09-03-2010 + HREF = "javascript placeholder" + #HREF = "javascript:changeView(%d,%s);" % (i,self.ChrLengthMbList) + Areas = HT.Area(shape='rect',coords=COORDS,href=HREF) + gifmap.areas.append(Areas) + startPosX += (self.ChrLengthDistList[i]+self.GraphInterval)*plotXScale + + return plotXScale + + def calculateAllResult(self, fd): + + weightedRegression = fd.formdata.getvalue('applyVarianceSE') + + self.genotype = self.genotype.addinterval() + resultSlice = [] + controlGeno = [] + + if self.multipleInterval: + self.suggestive = 0 + self.significance = 0 + if self.selectedChr > -1: + self.genotype.chromosome = [self.genotype[self.selectedChr]] + else: + #single interval mapping + try: + self.suggestive = float(fd.formdata.getvalue('permSuggestive')) + self.significance = float(fd.formdata.getvalue('permSignificance')) + except: + self.suggestive = None + self.significance = None + + _strains, _vals, _vars = self.traitList[0].exportInformative(weightedRegression) + + if webqtlUtil.ListNotNull(_vars): + pass + else: + weightedRegression = 0 + _strains, _vals, _vars = self.traitList[0].exportInformative() + + ##locate genotype of control Locus + if self.controlLocus: + controlGeno2 = [] + _FIND = 0 + for _chr in self.genotype: + for _locus in _chr: + if _locus.name == self.controlLocus: + controlGeno2 = _locus.genotype + _FIND = 1 + break + if _FIND: + break + if controlGeno2: + _prgy = list(self.genotype.prgy) + for _strain in _strains: + _idx = _prgy.index(_strain) + controlGeno.append(controlGeno2[_idx]) + else: + return "The control marker you selected is not in the genofile." + + if weightedRegression: + self.LRSArray = self.genotype.permutation(strains = _strains, trait = _vals, + variance = _vars, nperm=self.nperm) + else: + self.LRSArray = self.genotype.permutation(strains = _strains, trait = _vals, + nperm=self.nperm) + + if self.significance and self.suggestive: + pass + else: + if self.nperm < 100: + self.suggestive = 0 + self.significance = 0 + else: + self.suggestive = self.LRSArray[int(self.nperm*0.37-1)] + self.significance = self.LRSArray[int(self.nperm*0.95-1)] + + #calculating bootstrap + #from now on, genotype could only contain a single chromosome + #permutation need to be performed genome wide, this is not the case for bootstrap + + #due to the design of qtlreaper, composite regression need to be performed genome wide + if not self.controlLocus and self.selectedChr > -1: + self.genotype.chromosome = [self.genotype[self.selectedChr]] + elif self.selectedChr > -1: #self.controlLocus and self.selectedChr > -1 + lociPerChr = map(len, self.genotype) + resultSlice = reduce(lambda X, Y: X+Y, lociPerChr[:self.selectedChr], 0) + resultSlice = [resultSlice,resultSlice+lociPerChr[self.selectedChr]] + else: + pass + + #calculate QTL for each trait + self.qtlresults = [] + + for thisTrait in self.traitList: + _strains, _vals, _vars = thisTrait.exportInformative(weightedRegression) + if self.controlLocus: + if weightedRegression: + qtlresult = self.genotype.regression(strains = _strains, trait = _vals, + variance = _vars, control = self.controlLocus) + else: + qtlresult = self.genotype.regression(strains = _strains, trait = _vals, + control = self.controlLocus) + if resultSlice: + qtlresult = qtlresult[resultSlice[0]:resultSlice[1]] + else: + if weightedRegression: + qtlresult = self.genotype.regression(strains = _strains, trait = _vals, + variance = _vars) + else: + qtlresult = self.genotype.regression(strains = _strains, trait = _vals) + + self.qtlresults.append(qtlresult) + + if not self.multipleInterval: + if self.controlLocus and self.selectedChr > -1: + self.genotype.chromosome = [self.genotype[self.selectedChr]] + + if self.bootChecked: + if controlGeno: + self.bootResult = self.genotype.bootstrap(strains = _strains, trait = _vals, + control = controlGeno, nboot=fd.nboot) + elif weightedRegression: + self.bootResult = self.genotype.bootstrap(strains = _strains, trait = _vals, + variance = _vars, nboot=fd.nboot) + else: + self.bootResult = self.genotype.bootstrap(strains = _strains, trait = _vals, + nboot=fd.nboot) + else: + self.bootResult = [] + + def calculatePValue (self, query_LRS, permutation_LRS_array): + query_index = len(permutation_LRS_array) + for i, one_permutation_LRS in enumerate(permutation_LRS_array): + if one_permutation_LRS >= query_LRS: + query_index = i + break + try: + P_value = float(len(permutation_LRS_array) - query_index) / len(permutation_LRS_array) + except: + P_value = '' + return P_value + + def helpButton(self, anchor): + return HT.Href(self.HELP_PAGE_REF + '#%s' % anchor, self.qmarkImg, target=self.HELP_WINDOW_NAME) + + + def traitRemapTD(self, cursor, fd): + chrList = HT.Select(name="chromosomes", data=self.ChrList, selected=[self.selectedChr], + onChange="chrLength(this.form.chromosomes.value, this.form.scale.value, this.form, self.ChrLengthMbList);") + + physicOnly = HT.Span(' *', Class="cr") + + showSNPCheck = HT.Input(type='checkbox', Class='checkbox', name='showSNP', value='ON', checked=self.SNPChecked) + showSNPText = HT.Span('SNP Track ', self.helpButton("snpSeismograph"), Class="fs12 fwn") + + showGenesCheck = HT.Input(type='checkbox', Class='checkbox', name='showGenes', value='ON', checked=self.geneChecked) + showGenesText = HT.Span('Gene Track', Class="fs12 fwn") + + showIntervalAnalystCheck = HT.Input(type='checkbox', Class='checkbox', name='intervalAnalystCheck', value='ON', checked=self.intervalAnalystChecked) + showIntervalAnalystText = HT.Span('Interval Analyst', Class="fs12 fwn") +## BEGIN HaplotypeAnalyst + + showHaplotypeAnalystCheck = HT.Input(type='checkbox', Class='checkbox', name='haplotypeAnalystCheck', value='ON', checked=self.haplotypeAnalystChecked) + showHaplotypeAnalystText = HT.Span('Haplotype Analyst', Class="fs12 fwn") +## END HaplotypeAnalyst + + leftBox = HT.Input(type="text", name="startMb", size=10) + rightBox = HT.Input(type="text", name="endMb", size=10) + if self.selectedChr > -1 and self.plotScale=='physic': + leftBox.value = self.startMb + rightBox.value = self.endMb + + scaleBox = HT.Select(name="scale", onChange="chrLength(this.form.chromosomes.value, this.form.scale.value, this.form, self.ChrLengthMbList);") + scaleBox.append(("Genetic", "morgan")) + if fd.genotype.Mbmap: + scaleBox.append(("Physical", "physic")) + scaleBox.selected.append(self.plotScale) + + permBox = HT.Input(type="checkbox", name="permCheck", value='ON', checked=self.permChecked, Class="checkbox") + permText = HT.Span("Permutation Test ", self.helpButton("Permutation"), Class="fs12 fwn") + bootBox = HT.Input(type="checkbox", name="bootCheck", value='ON', checked=self.bootChecked, Class="checkbox") + bootText = HT.Span("Bootstrap Test ", self.helpButton("bootstrap"), Class="fs12 fwn") + additiveBox = HT.Input(type="checkbox", name="additiveCheck", value='ON', checked=self.additiveChecked, Class="checkbox") + additiveText = HT.Span("Allele Effects ", self.helpButton("additive"), Class="fs12 fwn") + dominanceBox = HT.Input(type="checkbox", name="dominanceCheck", value='ON', checked=self.dominanceChecked, Class="checkbox") + dominanceText = HT.Span("Dominance Effects ", self.helpButton("Dominance"), Class="fs12 fwn") + + lrsRadio = HT.Input(type="radio", name="LRSCheck", value='LRS', checked = (self.LRS_LOD == "LRS")) + lodRadio = HT.Input(type="radio", name="LRSCheck", value='LOD', checked = (self.LRS_LOD != "LRS")) + lrsMaxBox = HT.Input(type="text", name="lrsMax", value=self.lrsMax, size=3) + widthBox = HT.Input(type="text", name="graphWidth", size=5, value=str(self.graphWidth)) + legendBox = HT.Input(type="checkbox", name="viewLegend", value='ON', checked=self.legendChecked, Class="checkbox") + legendText = HT.Span("Legend", Class="fs12 fwn") + + draw2XBox = HT.Input(type="checkbox", name="draw2X", value='ON', Class="checkbox") + draw2XText = HT.Span("2X Plot", Class="fs12 fwn") + + regraphButton = HT.Input(type="button", Class="button", onClick="javascript:databaseFunc(this.form,'showIntMap');", value="Remap") + controlsForm = HT.Form(cgi= os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE), enctype="multipart/form-data", name="changeViewForm", submit=HT.Input(type='hidden')) + controlsTable = HT.TableLite(border=0) + innerControlsTable = HT.TableLite(border=0) + if self.selectedChr == -1: + minimumGraphWidth = self.MULT_GRAPH_MIN_WIDTH + else: + minimumGraphWidth = self.GRAPH_MIN_WIDTH + innerControlsTable.append( + HT.TR(HT.TD("Chr: ", Class="fs12 fwb ffl"),HT.TD(chrList, scaleBox, regraphButton)), + HT.TR(HT.TD("View: ", Class="fs12 fwb ffl"),HT.TD(leftBox, " to ", rightBox, "Mb", physicOnly, NOWRAP="on")), + HT.TR(HT.TD("Units: ", Class="fs12 fwb ffl"), HT.TD(lrsRadio, "LRS ", lodRadio, "LOD ", self.helpButton("LOD"))), + HT.TR(HT.TD(" ", Class="fs12 fwb ffl"), HT.TD(lrsMaxBox, "units on Y-axis (0 for default)", Class="fs11 fwn")), + HT.TR(HT.TD("Width: ", Class="fs12 fwb ffl"), HT.TD(widthBox, "pixels (minimum=%d)" % minimumGraphWidth, Class="fs11 fwn ")) + ) + #whether SNP + # comment this, because this will make caculation very slow. + #cursor.execute("Select Species.Id from SnpAll, Species where SnpAll.SpeciesId = Species.Id and Species.Name = %s limit 1", self.species) + #SNPorNot = cursor.fetchall() + SNPorNot = True + #Whether Gene + cursor.execute("Select Species.Id from GeneList, Species where GeneList.SpeciesId = Species.Id and Species.Name = %s limit 1", self.species) + GeneorNot = cursor.fetchall() + + if self.multipleInterval: + optionPanel = HT.TD(valign="top", NOWRAP="on") + else: + optionPanel = HT.TD(permBox, permText, HT.BR(), bootBox, bootText, HT.BR(), additiveBox, additiveText, HT.BR(), valign="top", NOWRAP="on") + #whether dominance + if self.genotype.type == 'intercross': + optionPanel.append(dominanceBox, dominanceText, HT.BR()) + if SNPorNot: + optionPanel.append(showSNPCheck, showSNPText, physicOnly, HT.BR()) + if GeneorNot: + optionPanel.append(showGenesCheck, showGenesText, physicOnly, HT.BR(), + showIntervalAnalystCheck, showIntervalAnalystText, physicOnly, HT.BR()) +## BEGIN HaplotypeAnalyst + optionPanel.append(showHaplotypeAnalystCheck, showHaplotypeAnalystText, physicOnly, HT.BR()) +## END HaplotypeAnalyst + optionPanel.append(legendBox, legendText, HT.BR(),draw2XBox, draw2XText) + controlsTable.append( + HT.TR(HT.TD(innerControlsTable, valign="top"), + HT.TD(" ", width=15), optionPanel), + HT.TR(HT.TD(physicOnly, " only apply to single chromosome physical mapping", align="Center", colspan=3, Class="fs11 fwn")) + ) + controlsForm.append(controlsTable) + + controlsForm.append(HT.Input(name="permSuggestive", value=self.suggestive, type="hidden")) + controlsForm.append(HT.Input(name="permSignificance", value=self.significance, type="hidden")) + +## BEGIN HaplotypeAnalyst #### haplotypeAnalystCheck added below +## END HaplotypeAnalyst + + for key in fd.formdata.keys(): + if key == "searchResult" and type([]) == type(fd.formdata.getvalue(key)): + controlsForm.append(HT.Input(name=key, value=string.join(fd.formdata.getvalue(key), "\t"), type="hidden")) + elif key not in ("endMb", "startMb", "chromosomes", "scale", "permCheck", "bootCheck", "additiveCheck", "dominanceCheck", + "LRSCheck", "intervalAnalystCheck", "haplotypeAnalystCheck", "lrsMax", "graphWidth", "viewLegend", 'showGenes', 'showSNP', 'draw2X', + 'permSuggestive', "permSignificance"): + controlsForm.append(HT.Input(name=key, value=fd.formdata.getvalue(key), type="hidden")) + else: + pass + + # updated by NL, move function changeView(i) to webqtl.js and change it to function changeView(i, Chr_Mb_list) + # move function chrLength(a, b, c) to webqtl.js and change it to function chrLength(a, b, c, Chr_Mb_list) + self.dict['js1'] = '' + return HT.TD(controlsForm, Class="doubleBorder", width=400) + + def traitInfoTD(self, fd): + if self.selectedChr == -1: + intMapHeading = HT.Paragraph('Map Viewer: Whole Genome', Class="title") + else: + intMapHeading = HT.Paragraph('Map Viewer: Chr %s' % self.genotype[0].name, Class="title") + + heading2 = HT.Paragraph(HT.Strong('Population: '), "%s %s" % (self.species.title(), fd.RISet) , HT.BR()) + #Trait is from an database + if self.traitList and self.traitList[0] and self.traitList[0].db: + #single trait + if len(self.traitList) == 1: + thisTrait = self.traitList[0] + trait_url = HT.Href(text=thisTrait.name, url = os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE) + \ + "?FormID=showDatabase&incparentsf1=1&database=%s&ProbeSetID=%s" % (thisTrait.db.name, thisTrait.name), \ + target='_blank', Class="normalsize") + heading2.append(HT.Strong("Database: "), HT.Href(text=thisTrait.db.fullname, url = webqtlConfig.INFOPAGEHREF % thisTrait.db.name ,\ + target='_blank',Class="normalsize"),HT.BR()) + if thisTrait.db.type == 'ProbeSet': + heading2.append(HT.Strong('Trait ID: '), trait_url, HT.BR(), + HT.Strong("Gene Symbol: "), HT.Italic('%s' % thisTrait.symbol,id="green"),HT.BR()) + if thisTrait.chr and thisTrait.mb: + heading2.append(HT.Strong("Location: "), 'Chr %s @ %s Mb' % (thisTrait.chr, thisTrait.mb)) + elif thisTrait.db.type == 'Geno': + heading2.append(HT.Strong('Locus : '), trait_url, HT.BR()) + if thisTrait.chr and thisTrait.mb: + heading2.append(HT.Strong("Location: "), 'Chr %s @ %s Mb' % (thisTrait.chr, thisTrait.mb)) + elif thisTrait.db.type == 'Publish': + heading2.append(HT.Strong('Record ID: '), trait_url, HT.BR()) + else: + pass + else: + heading2.append(HT.Strong("Traits: "), "Multiple Traits") + else: + heading2.append(HT.Strong("Trait Name: "), fd.identification) + return HT.TD(intMapHeading, heading2, valign="top") + + def drawPermutationHistogram(self): + ######################################### + # Permutation Graph + ######################################### + myCanvas = pid.PILCanvas(size=(400,300)) + #plotBar(myCanvas,10,10,390,290,LRSArray,XLabel='LRS',YLabel='Frequency',title=' Histogram of Permutation Test',identification=fd.identification) + Plot.plotBar(myCanvas, self.LRSArray,XLabel='LRS',YLabel='Frequency',title=' Histogram of Permutation Test') + filename= webqtlUtil.genRandStr("Reg_") + myCanvas.save(webqtlConfig.IMGDIR+filename, format='gif') + img=HT.Image('/image/'+filename+'.gif',border=0,alt='Histogram of Permutation Test') + + + self.suggestive = self.LRSArray[int(self.nperm*0.37-1)] + self.significant = self.LRSArray[int(self.nperm*0.95-1)] + self.highlysignificant = self.LRSArray[int(self.nperm*0.99-1)] + + permutationHeading = HT.Paragraph('Histogram of Permutation Test') + permutationHeading.__setattr__("class","title") + + permutation = HT.TableLite() + permutation.append(HT.TR(HT.TD(img)), + HT.TR(HT.TD('')), + HT.TR(HT.TD('Total of %d permutations'%self.nperm))) + + return permutation + + def permutationTextFile(self): + filename= webqtlUtil.genRandStr("Reg_") + fpText = open('%s.txt' % (webqtlConfig.TMPDIR+filename), 'wb') + fpText.write('Suggestive LRS (p = 0.63) = %3.2f\n'%self.suggestive) + fpText.write('Significant LRS (p = 0.05) = %3.2f\n'%self.significant) + fpText.write('Highly Significant LRS (p = 0.01) = %3.2f\n\n'%self.highlysignificant) + fpText.write('%s Permutations\n\n' % str(len(self.LRSArray))) + LRSInfo =HT.Paragraph('    Suggestive LRS = %3.2f\n'%self.suggestive, + HT.BR(), + '    Significant LRS =%3.2f\n'%self.significant, + HT.BR(), + '    Highly Significant LRS =%3.2f\n' % self.highlysignificant) + + for lrs_value in self.LRSArray: + fpText.write(str(lrs_value) + "\n") + + textUrl = HT.Href(text = 'Download Permutation Results', url= '/tmp/'+filename+'.txt', target = "_blank", Class='fs12 fwn') + + return textUrl + + def geneTable(self, geneCol, refGene=None): + #SNPLink = 0 #Not sure what this is used for + + if self.species == 'mouse' or self.species == 'rat': + + gene_tblobj = {} + gene_tblobj["header"] = self.getGeneTableHeader(refGene=None) + gene_tblobj["body"] = self.getGeneTableBody(geneCol, refGene=None) + + sortby = self.getSortByValue() + + filename= webqtlUtil.genRandStr("Mapping_") + + objfile = open('%s.obj' % (webqtlConfig.TMPDIR+filename), 'wb') + cPickle.dump(gene_tblobj, objfile) + objfile.close() + + gene_table = webqtlUtil.genTableObj(tblobj=gene_tblobj, file=filename, sortby=sortby, tableID="sortable", addIndex="0") + + else: + gene_table = "" + + return gene_table + + def getLiteratureCorrelation(cursor,geneId1=None,geneId2=None): + if not geneId1 or not geneId2: + return None + if geneId1 == geneId2: + return 1.0 + geneId1 = str(geneId1) + geneId2 = str(geneId2) + lCorr = None + try: + query = 'SELECT Value FROM LCorrRamin3 WHERE GeneId1 = %s and GeneId2 = %s' + for x,y in [(geneId1,geneId2),(geneId2,geneId1)]: + cursor.execute(query,(x,y)) + lCorr = cursor.fetchone() + if lCorr: + lCorr = lCorr[0] + break + except: raise #lCorr = None + return lCorr + + def getGeneTableHeader(self, refGene=None): + + gene_tblobj_header = [] + + col_class = "fs14 fwb ffl b1 cw cbrb" + + if self.species == "mouse": + + if refGene: + gene_tblobj_header = [[THCell(HT.TD('Index', HT.BR(), HT.BR(), align='left', width=50, Class=col_class), text="index", idx=0), + THCell(HT.TD('Symbol', HT.BR(), HT.BR(), align='left', width=100, Class=col_class), text="symbol", idx=1), + THCell(HT.TD('Mb Start',HT.BR(),'(mm9)', align='left', width=100, Class=col_class), text="mb_start_mm9", idx=2), + THCell(HT.TD('Length (Kb)', HT.BR(), HT.BR(), align='left', width=100, Class=col_class), text="length", idx=3), + THCell(HT.TD('SNP',HT.BR(),'Count', align='left', width=47, Class=col_class), text="snp_count", idx=4), + THCell(HT.TD('SNP',HT.BR(),'Density', align='left', width=78, Class=col_class), text="snp_density", idx=5), + THCell(HT.TD('Avg',HT.BR(),'Expr', HT.BR(), HT.BR(), align='left', width=44, Class=col_class), sort=0, idx=6), + THCell(HT.TD('Human',HT.BR(),'Chr', align='left', width=60, Class=col_class), text="human_chr", idx=7), + THCell(HT.TD('Mb Start',HT.BR(),'(hg19)', align='left', width=100, Class=col_class), text="mb_start_hg19", idx=8), + THCell(HT.TD('Literature',HT.BR(),'Correlation', align='left', width=100, Class=col_class), text="lit_corr", idx=9), + THCell(HT.TD('Gene Description', HT.BR(), HT.BR(), align='left', width=290, Class=col_class), text="description", idx=10), + THCell(HT.TD('PolymiRTS',HT.BR(),'Database', HT.BR(), HT.Href(url='http://compbio.uthsc.edu/miRSNP/', text='>>', target="_blank", Class="normalsize"), + align='left', width=100, Class=col_class), sort=0, idx=11), + THCell(HT.TD('Gene Weaver', HT.BR(), 'Info Content', HT.BR(), HT.Href(url='http://geneweaver.org/', text='>>', target="_blank", Class="normalsize"), + align='left', width=110, Class=col_class), sort=0, idx=12), + ]] + else: + gene_tblobj_header = [[THCell(HT.TD('Index', HT.BR(), HT.BR(), align='left', width=50, Class=col_class), text="index", idx=0), + THCell(HT.TD('Symbol', HT.BR(), HT.BR(), align='left', width=100, Class=col_class), text="symbol", idx=1), + THCell(HT.TD('Mb Start',HT.BR(),'(mm9)', align='left', width=100, Class=col_class), text="mb_start_mm9", idx=2), + THCell(HT.TD('Length (Kb)', HT.BR(), HT.BR(), align='left', width=100, Class=col_class), text="length", idx=3), + THCell(HT.TD('SNP',HT.BR(),'Count', align='left', width=47, Class=col_class), text="snp_count", idx=4), + THCell(HT.TD('SNP',HT.BR(),'Density', align='left', width=78, Class=col_class), text="snp_density", idx=5), + THCell(HT.TD('Avg',HT.BR(),'Expr', HT.BR(), HT.BR(), align='left', width=44, Class=col_class), sort=0, idx=6), + THCell(HT.TD('Human',HT.BR(),'Chr', align='left', width=60, Class=col_class), text="human_chr", idx=7), + THCell(HT.TD('Mb Start',HT.BR(),'(hg19)', align='left', width=100, Class=col_class), text="mb_start_hg19", idx=8), + THCell(HT.TD('Gene Description', HT.BR(), HT.BR(), align='left', width=290, Class=col_class), text="description", idx=9), + THCell(HT.TD('PolymiRTS',HT.BR(),'Database', HT.BR(), HT.Href(url='http://compbio.uthsc.edu/miRSNP/', text='>>', target="_blank", Class="normalsize"), + align='left', width=100, Class=col_class), sort=0, idx=10), + THCell(HT.TD('Gene Weaver', HT.BR(), 'Info Content', HT.BR(), HT.Href(url='http://geneweaver.org/', text='>>', target="_blank", Class="normalsize"), + align='left', width=110, Class=col_class), sort=0, idx=11), + ]] + + elif self.species == "rat": + + gene_tblobj_header = [[THCell(HT.TD('Index', HT.BR(), HT.BR(), align='left', width=50, Class=col_class), text="index", idx=0), + THCell(HT.TD('Symbol', HT.BR(), HT.BR(), align='left', width=100, Class=col_class), text="symbol", idx=1), + THCell(HT.TD('Mb Start',HT.BR(),'(rn3)', align='left', width=100, Class=col_class), text="mb_start_rn3", idx=2), + THCell(HT.TD('Length (Kb)', HT.BR(), HT.BR(), align='left', width=100, Class=col_class), text="length", idx=3), + THCell(HT.TD('Avg',HT.BR(),'Expr', HT.BR(), HT.BR(), align='left', width=44, Class=col_class), sort=0, idx=4), + THCell(HT.TD('Mouse',HT.BR(),'Chr', align='left', width=60, Class=col_class), text="mouse_chr", idx=5), + THCell(HT.TD('Mb Start',HT.BR(),'(mm9)', align='left', width=100, Class=col_class), text="mb_start_mm9", idx=6), + THCell(HT.TD('Human',HT.BR(),'Chr', align='left', width=60, Class=col_class), text="human_chr", idx=7), + THCell(HT.TD('Mb Start',HT.BR(),'(hg19)', align='left', width=100, Class=col_class), text="mb_start_hg19", idx=8), + THCell(HT.TD('Gene Description', HT.BR(), HT.BR(), align='left', Class=col_class), text="description", idx=9)]] + + else: + pass + + return gene_tblobj_header + + def getGeneTableBody(self, geneCol, refGene=None): + + tblobj_body = [] #contains table rows + className = "fs13 b1 c222" + + tableIterationsCnt = 0 + if self.species == "mouse": + + # polymiRTS + # http://lily.uthsc.edu:8080/20090422_UTHSC_cuiyan/PolymiRTS_CLS?chrom=2&chrom_from=115&chrom_to=125 + #XZ: We can NOT assume their web service is always on. We must put this block of code in try except. + try: + conn = httplib.HTTPConnection("lily.uthsc.edu:8080") + conn.request("GET", "/20090422_UTHSC_cuiyan/PolymiRTS_CLS?chrom=%s&chrom_from=%s&chrom_to=%s" % (self.genotype[0].name, self.startMb, self.endMb)) + response = conn.getresponse() + data = response.read() + data = data.split() + conn.close() + dic = {} + index = 0 + for i in data: + if index%3==0: + dic[data[index]] = HT.Href(url=data[index+2], text=data[index+1], target="_blank", Class="normalsize") + index = index+1 + except Exception: + dic={} + + for gIndex, theGO in enumerate(geneCol): + + tableIterationsCnt = tableIterationsCnt + 1 + + this_row = [] #container for the cells of each row + selectCheck = HT.Input(type="checkbox", name="searchResult", value=theGO["GeneSymbol"], Class="checkbox", onClick="highlight(this)") #checkbox for each row + + geneLength = (theGO["TxEnd"] - theGO["TxStart"])*1000.0 + tenPercentLength = geneLength*0.0001 + txStart = theGO["TxStart"] + txEnd = theGO["TxEnd"] + theGO["snpDensity"] = theGO["snpCount"]/geneLength + if self.ALEX_DEBUG_BOOL_PRINT_GENE_LIST: + #accessionString = 'http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?CMD=Display&DB=gene&term=%s' % theGO["NM_ID"] + geneIdString = 'http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=gene&cmd=Retrieve&dopt=Graphics&list_uids=%s' % theGO["GeneID"] + + allProbeString = '%s?cmd=sch&gene=%s&alias=1' % (os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE), theGO["GeneSymbol"]) + if theGO["snpCount"]: + snpString = HT.Href(url="%s&chr=%s&start=%s&end=%s&geneName=%s&s1=%d&s2=%d" % (os.path.join(webqtlConfig.CGIDIR, 'main.py?FormID=snpBrowser'), + theGO["Chromosome"], theGO["TxStart"], theGO["TxEnd"], theGO["GeneSymbol"], self.diffCol[0], self.diffCol[1]), + text=theGO["snpCount"], target="_blank", Class="normalsize") + else: + snpString = 0 + + mouseStartString = "http://genome.ucsc.edu/cgi-bin/hgTracks?clade=vertebrate&org=Mouse&db=mm9&position=chr" + theGO["Chromosome"] + "%3A" + str(int(theGO["TxStart"] * 1000000.0)) + "-" + str(int(theGO["TxEnd"]*1000000.0)) +"&pix=620&Submit=submit" + + #Used for sorting + mouseStartValue = int(theGO["TxStart"]) + + + #the chromosomes for human 1 are 1qXX.XX + if theGO['humanGene']: + if theGO['humanGene']["TxStart"] == '': + humanStartDisplay = "" + else: + humanStartDisplay = "%0.6f" % theGO['humanGene']["TxStart"] + + humanChr = theGO['humanGene']["Chromosome"] + if humanChr.find('q'): + humanChrSort = humanChr[:humanChr.find("q")].join(humanChr[(humanChr.find("q")+1):]) #value used when sorting table + elif humanChr.find('p'): + humanChrSort = humanChr[:humanChr.find("p")].join(humanChr[(humanChr.find("p")+1):]) #value used when sorting table + else: + humanChrSort = humanChr + humanTxStart = theGO['humanGene']["TxStart"] + + #Used for sorting + humanStartValue = float(theGO['humanGene']["TxStart"]) + + humanStartString = "http://genome.ucsc.edu/cgi-bin/hgTracks?clade=vertebrate&org=Human&db=hg17&position=chr%s:%d-%d" % (humanChr, int(1000000*theGO['humanGene']["TxStart"]), int(1000000*theGO['humanGene']["TxEnd"])) + else: + humanStartString = humanChr = humanChrSort = humanStartDisplay = humanStartValue = "--" + + geneDescription = theGO["GeneDescription"] + if len(geneDescription) > 26: + geneDescription = geneDescription[:26]+"..." + probeSetSearch = HT.Href(allProbeString, HT.Image("/images/webqtl_search.gif", border=0), target="_blank") + + if theGO["snpDensity"] < 0.000001: + snpDensityStr = "0" + else: + snpDensityStr = "%0.6f" % theGO["snpDensity"] + + avgExpr = [] #theGO["avgExprVal"] + if avgExpr in ([], None): + avgExpr = "--" + else: + avgExpr = "%0.6f" % avgExpr + + # polymiRTS + polymiRTS = ' ' + if dic.has_key(theGO["GeneID"]): + polymiRTS = dic[theGO["GeneID"]] + + # If we have a referenceGene then we will show the Literature Correlation + if refGene: + try: + literatureCorrelation = self.getLiteratureCorrelation(self.cursor,refGene,theGO['GeneID']) + except: + literatureCorrelation = "N/A" + + literatureCorrelationString = str(self.getLiteratureCorrelation(self.cursor,refGene,theGO['GeneID']) or "N/A") + + this_row.append(TDCell(HT.TD(tableIterationsCnt, selectCheck, width=30, align='right', Class=className), tableIterationsCnt, tableIterationsCnt)) + this_row.append(TDCell(HT.TD(HT.Href(geneIdString, theGO["GeneSymbol"], target="_blank"), " ", probeSetSearch, align='right', Class=className), theGO["GeneSymbol"], theGO["GeneSymbol"])) + this_row.append(TDCell(HT.TD(HT.Href(mouseStartString, "%0.6f" % txStart, target="_blank"), align='right', Class=className), str(mouseStartValue), mouseStartValue)) + this_row.append(TDCell(HT.TD(HT.Href("javascript:centerIntervalMapOnRange2('%s', " % theGO["Chromosome"]+str(txStart-tenPercentLength) + ", " + str(txEnd+tenPercentLength) + ", document.changeViewForm)", "%0.3f" % geneLength), align='right', Class=className), "%0.3f" % geneLength, geneLength)) + this_row.append(TDCell(HT.TD(snpString, align='right', Class=className), str(theGO["snpCount"]), theGO["snpCount"])) + this_row.append(TDCell(HT.TD(snpDensityStr, align='right', Class=className), snpDensityStr, theGO["snpDensity"])) + this_row.append(TDCell(HT.TD(avgExpr, align='right', Class=className), "--", "--")) + this_row.append(TDCell(HT.TD(humanChr, align='right', Class=className), humanChr, humanChrSort)) + this_row.append(TDCell(HT.TD(HT.Href(humanStartString, humanStartDisplay, target="_blank"), align='right', Class=className), humanStartDisplay, humanStartValue)) + this_row.append(TDCell(HT.TD(literatureCorrelationString, align='right', Class=className), literatureCorrelationString, literatureCorrelation)) + this_row.append(TDCell(HT.TD(geneDescription, align='right', Class=className), geneDescription, geneDescription)) + this_row.append(TDCell(HT.TD(polymiRTS, align='right', Class=className), "", "")) + this_row.append(TDCell(HT.TD("", align='right', Class=className), "", "")) + + else: + this_row.append(TDCell(HT.TD(tableIterationsCnt, selectCheck, width=30, align='right', Class=className), tableIterationsCnt, tableIterationsCnt)) + this_row.append(TDCell(HT.TD(HT.Href(geneIdString, theGO["GeneSymbol"], target="_blank"), " ", probeSetSearch, align='right', Class=className), theGO["GeneSymbol"], theGO["GeneSymbol"])) + this_row.append(TDCell(HT.TD(HT.Href(mouseStartString, "%0.6f" % txStart, target="_blank"), align='right', Class=className), str(mouseStartValue), mouseStartValue)) + this_row.append(TDCell(HT.TD(HT.Href("javascript:centerIntervalMapOnRange2('%s', " % theGO["Chromosome"]+str(txStart-tenPercentLength) + ", " + str(txEnd+tenPercentLength) + ", document.changeViewForm)", "%0.3f" % geneLength), align='right', Class=className), "%0.3f" % geneLength, geneLength)) + this_row.append(TDCell(HT.TD(snpString, align='right', Class=className), str(theGO["snpCount"]), theGO["snpCount"])) + this_row.append(TDCell(HT.TD(snpDensityStr, align='right', Class=className), snpDensityStr, theGO["snpDensity"])) + this_row.append(TDCell(HT.TD(avgExpr, align='right', Class=className), "--", "--")) + this_row.append(TDCell(HT.TD(humanChr, align='right', Class=className), humanChr, humanChrSort)) + this_row.append(TDCell(HT.TD(HT.Href(humanStartString, humanStartDisplay, target="_blank"), align='right', Class=className), humanStartDisplay, humanStartValue)) + this_row.append(TDCell(HT.TD(geneDescription, align='right', Class=className), geneDescription, geneDescription)) + this_row.append(TDCell(HT.TD(polymiRTS, align='right', Class=className), "", "")) + this_row.append(TDCell(HT.TD("", align='right', Class=className), "", "")) + + tblobj_body.append(this_row) + + elif self.species == 'rat': + + for gIndex, theGO in enumerate(geneCol): + + this_row = [] #container for the cells of each row + selectCheck = HT.Input(type="checkbox", name="searchResult", Class="checkbox", onClick="highlight(this)") #checkbox for each row + + webqtlSearch = HT.Href(os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE)+"?cmd=sch&gene=%s&alias=1&species=rat" % theGO["GeneSymbol"], HT.Image("/images/webqtl_search.gif", border=0), target="_blank") + + if theGO["GeneID"] != "": + geneSymbolNCBI = HT.Href("http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=gene&cmd=Retrieve&dopt=Graphics&list_uids=%s" % theGO["GeneID"], theGO["GeneSymbol"], Class="normalsize", target="_blanK") + else: + geneSymbolNCBI = theGO["GeneSymbol"] + + geneLength = (float(theGO["TxEnd"]) - float(theGO["TxStart"])) + geneLengthURL = "javascript:centerIntervalMapOnRange2('%s', %f, %f, document.changeViewForm)" % (theGO["Chromosome"], float(theGO["TxStart"])-(geneLength*0.1), float(theGO["TxEnd"])+(geneLength*0.1)) + + avgExprVal = [] + if avgExprVal != "" and avgExprVal: + avgExprVal = "%0.5f" % float(avgExprVal) + else: + avgExprVal = "" + + #Mouse Gene + if theGO['mouseGene']: + mouseChr = theGO['mouseGene']["Chromosome"] + mouseTxStart = theGO['mouseGene']["TxStart"] + else: + mouseChr = mouseTxStart = "" + + #the chromosomes for human 1 are 1qXX.XX + if theGO['humanGene']: + humanChr = theGO['humanGene']["Chromosome"] + if 'q' in humanChr: + humanChrSort = humanChr[:humanChr.find("q")].join(humanChr[(humanChr.find("q")+1):]) #value used when sorting table + elif 'p' in humanChr: + humanChrSort = humanChr[:humanChr.find("p")].join(humanChr[(humanChr.find("p")+1):]) #value used when sorting table + else: + humanChrSort = humanChr + humanTxStart = theGO['humanGene']["TxStart"] + else: + humanChr = humanTxStart = humanChrSort = "" + + geneDesc = theGO["GeneDescription"] + if geneDesc == "---": + geneDesc = "" + + """ + if len(geneDesc) > 40: + geneDesc = gene0So apparently Angola prison (which used to be a slave plantation) has a rodeo that they invite the general public to. +The prisoners are not trained before hand +But its cool because its completely voluntary. +And by voluntary, according to HFG when I talked to him, they have a choice between doing it or door number two and "door number 2 is... rather worse than volunteering"Desc[:37] + "..." + """ + + this_row.append(TDCell(HT.TD(gIndex + 1, selectCheck, align='left', Class=className), str(gIndex+1), gIndex+1)) + this_row.append(TDCell(HT.TD(webqtlSearch, geneSymbolNCBI, align='left', Class=className), theGO["GeneSymbol"], theGO["GeneSymbol"])) + this_row.append(TDCell(HT.TD(theGO["TxStart"], align='left', Class=className), theGO["TxStart"], theGO["TxStart"])) + this_row.append(TDCell(HT.TD(HT.Href(geneLengthURL, "%0.3f" % (geneLength*1000.0)), align='left', Class=className), "%0.3f" % (geneLength*1000.0), (geneLength*1000.0))) + this_row.append(TDCell(HT.TD(avgExprVal, align='left', Class=className), "", "")) + this_row.append(TDCell(HT.TD(mouseChr, align='left', Class=className), mouseChr, mouseChr)) + this_row.append(TDCell(HT.TD(mouseTxStart, align='left', Class=className), mouseTxStart, mouseTxStart)) + this_row.append(TDCell(HT.TD(humanChr, align='left', Class=className), humanChr, humanChrSort)) + this_row.append(TDCell(HT.TD(humanTxStart, align='left', Class=className), humanTxStart, humanTxStart)) + this_row.append(TDCell(HT.TD(geneDesc, align='left', Class=className), geneDesc, geneDesc)) + + tblobj_body.append(this_row) + + else: + pass + + return tblobj_body + + + def getSortByValue(self): + + sortby = ("", "") + + return sortby \ No newline at end of file diff --git a/wqflask/wqflask/templates/marker_regression_gn1.html b/wqflask/wqflask/templates/marker_regression_gn1.html new file mode 100644 index 00000000..29f69dea --- /dev/null +++ b/wqflask/wqflask/templates/marker_regression_gn1.html @@ -0,0 +1,204 @@ + + + + +Mapping + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +
+ + + + +
+
+ + +
+

Map Viewer: Whole Genome

+

+ Population: {{ dataset.species }} {{ dataset.group.name }}
+ Database: {{ dataset.fullname }}
+ Trait ID: {{ marker.name }}
+ {% if this_trait.symbol != None %} + Gene Symbol: this_trait.symbol
+ {% if this_trait.dataset.type != 'Publish' %} + Location: {{ this_trait.location_fmt }} + {% endif %} +

+

+
Download results in tab-delimited text format.

  + +
Chr: + + +
View: + to +Mb *
Units: +LRS +LOD Glossary
+units on Y-axis (0 for default)
Width: +pixels (minimum=1400)
  +Permutation Test Glossary
+Bootstrap Test Glossary
+Allele Effects Glossary
+SNP Track Glossary *
+Gene Track *
+Interval Analyst *
+Haplotype Analyst *
+Legend
+2X Plot
* only apply to single chromosome physical mapping
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +Itvl_bnCx5c3U.png +

+


A positive additive coefficient (green line) indicates that DBA/2J alleles increase trait values. In contrast, a negative additive coefficient (red line) indicates that C57BL/6J alleles increase trait values.

+

+
Histogram of Permutation Test
Total of 1000 permutations
+

+Download Permutation Results

+
+ + + + + + + + + + \ No newline at end of file diff --git a/wqflask/wqflask/templates/show_trait_statistics_new.html b/wqflask/wqflask/templates/show_trait_statistics_new.html index 1932d968..34fa2216 100755 --- a/wqflask/wqflask/templates/show_trait_statistics_new.html +++ b/wqflask/wqflask/templates/show_trait_statistics_new.html @@ -13,9 +13,11 @@
  • Probability Plot
  • + {% if g.user_session.user_ob %}
  • Scatterplot Matrix
  • + {% endif %} @@ -127,6 +129,7 @@
    --> + {% if g.user_session.user_ob %}
    @@ -141,6 +144,7 @@
    + {% endif %} diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py index 588433f0..3b100fa6 100755 --- a/wqflask/wqflask/views.py +++ b/wqflask/wqflask/views.py @@ -42,7 +42,7 @@ from wqflask.show_trait import show_trait from wqflask.show_trait import export_trait_data from wqflask.heatmap import heatmap from wqflask.marker_regression import marker_regression -#from wqflask.marker_regression import marker_regression_gn1 +from wqflask.marker_regression import marker_regression_gn1 from wqflask.interval_mapping import interval_mapping from wqflask.correlation import show_corr_results from wqflask.correlation_matrix import show_corr_matrix @@ -384,7 +384,7 @@ def marker_regression_page(): #causeerror - #gn1_template_vars = marker_regression_gn1.MarkerRegression(template_vars) + gn1_template_vars = marker_regression_gn1.MarkerRegression(result) #qtl_length = len(result['js_data']['qtl_results']) #print("qtl_length:", qtl_length) -- cgit v1.2.3 From 5ec99c0ddaa605df282876613eff20b9c09656ac Mon Sep 17 00:00:00 2001 From: zsloan Date: Fri, 4 Dec 2015 22:48:27 +0000 Subject: Commented out code related to additive/dominance effect in gn1 marker regression code; gn1 code now runs without errors but still need to give output to template --- wqflask/htmlgen.py | 14 ------- .../marker_regression/marker_regression_gn1.py | 47 +++++++++++++--------- wqflask/wqflask/views.py | 17 +++++--- 3 files changed, 39 insertions(+), 39 deletions(-) delete mode 100755 wqflask/htmlgen.py diff --git a/wqflask/htmlgen.py b/wqflask/htmlgen.py deleted file mode 100755 index 8406d925..00000000 --- a/wqflask/htmlgen.py +++ /dev/null @@ -1,14 +0,0 @@ -from __future__ import absolute_import, division, print_function - -class HTMLgen(object): - """A redefined HT until we manage to completely eliminate it""" - def __getattr__(self, name): - return "" - - def Item(self, *args, **kw): - print("This way of generating html is obsolete!") - return "foo" - - Href = Span = TD = Blockquote = Image = Item - -HTMLgen2 = HTMLgen() diff --git a/wqflask/wqflask/marker_regression/marker_regression_gn1.py b/wqflask/wqflask/marker_regression/marker_regression_gn1.py index 5deeb305..c838b3ec 100644 --- a/wqflask/wqflask/marker_regression/marker_regression_gn1.py +++ b/wqflask/wqflask/marker_regression/marker_regression_gn1.py @@ -626,6 +626,9 @@ class MarkerRegression(object): self.dict['body'] = TD_LR self.dict['title'] = "Mapping" + + print("AT END OF GN1 MAPPING") + def writeQTL2Text(self, filename): if self.multipleInterval: return "" @@ -756,7 +759,8 @@ class MarkerRegression(object): drawAreaHeight -= 60 #Image map - gifmap = HT.Map(name='WebQTLImageMap') + gifmap = HT.Map(name = "WebQTLImageMap") + #gifmap = None newoffset = (xLeftOffset, xRightOffset, yTopOffset, yBottomOffset) # Draw the alternating-color background first and get plotXScale @@ -1689,7 +1693,7 @@ class MarkerRegression(object): distScale = 10 else: distScale = 5 - for tickdists in range(distScale, ceil(distLen), distScale): + for tickdists in range(distScale, int(ceil(distLen)), distScale): canvas.drawLine(startPosX + tickdists*plotXScale, yZero, startPosX + tickdists*plotXScale, yZero + 7, color=pid.black, width=1*zoom) canvas.drawString(str(tickdists), startPosX+tickdists*plotXScale, yZero + 10*zoom, color=pid.black, font=MBLabelFont, angle=270) startPosX += (self.ChrLengthDistList[i]+self.GraphInterval)*plotXScale @@ -1809,7 +1813,12 @@ class MarkerRegression(object): lodm = 1.0 if self.lrsMax <= 0: #sliding scale - LRSMax = max(map(max, self.qtlresults)).lrs + if "lrs_value" in self.qtlresults[0]: + LRSMax = max([result['lrs_value'] for result in self.qtlresults]) + #LRSMax = max(map(max, self.qtlresults)).lrs_value + else: + LRSMax = max([result['lod_score'] for result in self.qtlresults]) + #LRSMax = max(map(max, self.qtlresults)).lod_score #genotype trait will give infinite LRS LRSMax = min(LRSMax, webqtlConfig.MAXLRS) if self.permChecked and not self.multipleInterval: @@ -1882,11 +1891,11 @@ class MarkerRegression(object): if self.multipleInterval: lrsEdgeWidth = 1 else: - additiveMax = max(map(lambda X : abs(X.additive), self.qtlresults[0])) - if INTERCROSS: - dominanceMax = max(map(lambda X : abs(X.dominance), self.qtlresults[0])) - else: - dominanceMax = -1 + #additiveMax = max(map(lambda X : abs(X.additive), self.qtlresults[0])) + #if INTERCROSS: + # dominanceMax = max(map(lambda X : abs(X.dominance), self.qtlresults[0])) + #else: + # dominanceMax = -1 lrsEdgeWidth = 2 if zoom == 2: @@ -1894,7 +1903,7 @@ class MarkerRegression(object): for i, qtlresult in enumerate(self.qtlresults): m = 0 startPosX = xLeftOffset - thisLRSColor = self.colorCollection[i] + thisLRSColor = self.colorCollection[0] for j, _chr in enumerate(self.genotype): LRSCoordXY = [] AdditiveCoordXY = [] @@ -1907,20 +1916,20 @@ class MarkerRegression(object): # updated by NL 06-18-2011: # fix the over limit LRS graph issue since genotype trait may give infinite LRS; # for any lrs is over than 460(LRS max in this system), it will be reset to 460 - if qtlresult[m].lrs> 460 or qtlresult[m].lrs=='inf': + if qtlresult['lrs_value'] > 460 or qtlresult['lrs_value']=='inf': Yc = yZero - webqtlConfig.MAXLRS*LRSHeightThresh/LRSMax else: - Yc = yZero - qtlresult[m].lrs*LRSHeightThresh/LRSMax + Yc = yZero - qtlresult['lrs_value']*LRSHeightThresh/LRSMax LRSCoordXY.append((Xc, Yc)) - if not self.multipleInterval and self.additiveChecked: - if additiveMax == 0.0: - additiveMax = 0.000001 - Yc = yZero - qtlresult[m].additive*AdditiveHeightThresh/additiveMax - AdditiveCoordXY.append((Xc, Yc)) - if not self.multipleInterval and INTERCROSS and self.additiveChecked: - Yc = yZero - qtlresult[m].dominance*DominanceHeightThresh/dominanceMax - DominanceCoordXY.append((Xc, Yc)) + #if not self.multipleInterval and self.additiveChecked: + # if additiveMax == 0.0: + # additiveMax = 0.000001 + # Yc = yZero - qtlresult[m].additive*AdditiveHeightThresh/additiveMax + # AdditiveCoordXY.append((Xc, Yc)) + #if not self.multipleInterval and INTERCROSS and self.additiveChecked: + # Yc = yZero - qtlresult[m].dominance*DominanceHeightThresh/dominanceMax + # DominanceCoordXY.append((Xc, Yc)) m += 1 canvas.drawPolygon(LRSCoordXY,edgeColor=thisLRSColor,closed=0, edgeWidth=lrsEdgeWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth)) diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py index 3b100fa6..23c74817 100755 --- a/wqflask/wqflask/views.py +++ b/wqflask/wqflask/views.py @@ -354,11 +354,12 @@ def marker_regression_page(): if key in wanted or key.startswith(('value:')): start_vars[key] = value - version = "v1" + version = "v3" key = "marker_regression:{}:".format(version) + json.dumps(start_vars, sort_keys=True) print("key is:", pf(key)) with Bench("Loading cache"): - result = Redis.get(key) + result = None # Just for testing + #result = Redis.get(key) #print("************************ Starting result *****************") #print("result is [{}]: {}".format(type(result), result)) @@ -377,14 +378,18 @@ def marker_regression_page(): indent=" ") result = template_vars.__dict__ - print("initial result:", result['qtl_results']) + #print("initial result:", result['qtl_results']) - for item in template_vars.__dict__.keys(): - print(" ---**--- {}: {}".format(type(template_vars.__dict__[item]), item)) + #for item in template_vars.__dict__.keys(): + # print(" ---**--- {}: {}".format(type(template_vars.__dict__[item]), item)) #causeerror - gn1_template_vars = marker_regression_gn1.MarkerRegression(result) + print("TESTING GN1!!!") + gn1_template_vars = marker_regression_gn1.MarkerRegression(result).__dict__ + print("gn1_template_vars:", gn1_template_vars) + causeerror + #qtl_length = len(result['js_data']['qtl_results']) #print("qtl_length:", qtl_length) -- cgit v1.2.3 From d734346335f056955fb2e3b657c45eb2f6ae1f81 Mon Sep 17 00:00:00 2001 From: zsloan Date: Wed, 9 Dec 2015 16:57:05 +0000 Subject: Fixed search result page text to make sense for all working search terms Added a bunch of print statements to GN1 mapping code to locate where code stalls --- wqflask/wqflask/do_search.py | 5 +++- .../marker_regression/marker_regression_gn1.py | 16 +++++++++++-- wqflask/wqflask/templates/search_result_page.html | 27 ++++++++++++++++++++-- 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/wqflask/wqflask/do_search.py b/wqflask/wqflask/do_search.py index 617d7942..a6f9c949 100755 --- a/wqflask/wqflask/do_search.py +++ b/wqflask/wqflask/do_search.py @@ -861,7 +861,10 @@ class PositionSearch(DoSearch): try: self.chr = int(self.chr) except: - self.chr = int(self.chr.replace('chr', '')) + if 'chr' in self.chr: + self.chr = int(self.chr.replace('chr', '')) + else: + self.chr = int(self.chr.replace('CHR', '')) def run(self): diff --git a/wqflask/wqflask/marker_regression/marker_regression_gn1.py b/wqflask/wqflask/marker_regression/marker_regression_gn1.py index c838b3ec..f2fc12a4 100644 --- a/wqflask/wqflask/marker_regression/marker_regression_gn1.py +++ b/wqflask/wqflask/marker_regression/marker_regression_gn1.py @@ -344,8 +344,6 @@ class MarkerRegression(object): self.GraphInterval = self.MbGraphInterval #Mb else: self.GraphInterval = self.cMGraphInterval #cM - - ################################################################ # Get Trait Values and Infomation @@ -509,12 +507,16 @@ class MarkerRegression(object): ################################################################ # Plots goes here ################################################################ + print("BEFORE GN1 PLOT") if self.plotScale != 'physic' or self.multipleInterval: showLocusForm = webqtlUtil.genRandStr("fm_") else: showLocusForm = "" + print("BEFORE PIL CANVAS") intCanvas = pid.PILCanvas(size=(self.graphWidth,self.graphHeight)) + print("BEFORE PLOTINTMAPPING") gifmap = self.plotIntMapping(intCanvas, startMb = self.startMb, endMb = self.endMb, showLocusForm= showLocusForm) + print("AFTER PLOTINTMAPPING") filename= webqtlUtil.genRandStr("Itvl_") intCanvas.save(os.path.join(webqtlConfig.IMGDIR, filename), format='png') @@ -527,6 +529,8 @@ class MarkerRegression(object): intCanvasX2.save(os.path.join(webqtlConfig.IMGDIR, filename+"X2"), format='png') #DLintImgX2=HT.Href(text='Download',url = '/image/'+filename+'X2.png', Class='smallsize', target='_blank') + print("AFTER GN1 PLOT") + textUrl = self.writeQTL2Text(fd, filename) ################################################################ @@ -739,6 +743,7 @@ class MarkerRegression(object): endPixelX = (xLeftOffset + plotWidth) #Drawing Area Height + print("DRAWING AREA HEIGHT") drawAreaHeight = plotHeight if self.plotScale == 'physic' and self.selectedChr > -1: drawAreaHeight -= self.ENSEMBL_BAND_HEIGHT + self.UCSC_BAND_HEIGHT+ self.WEBQTL_BAND_HEIGHT + 3*self.BAND_SPACING+ 10*zoom @@ -764,6 +769,7 @@ class MarkerRegression(object): newoffset = (xLeftOffset, xRightOffset, yTopOffset, yBottomOffset) # Draw the alternating-color background first and get plotXScale + print("DRAW BACKGROUND") plotXScale = self.drawGraphBackground(canvas, gifmap, offset=newoffset, zoom= zoom, startMb=startMb, endMb = endMb) #draw bootstap @@ -772,6 +778,7 @@ class MarkerRegression(object): # Draw clickable region and gene band if selected if self.plotScale == 'physic' and self.selectedChr > -1: + print("DRAW CLICKABLE REGION") self.drawClickBand(canvas, gifmap, plotXScale, offset=newoffset, zoom = zoom, startMb=startMb, endMb = endMb) if self.geneChecked and self.geneCol: self.drawGeneBand(canvas, gifmap, plotXScale, offset=newoffset, zoom = zoom, startMb=startMb, endMb = endMb) @@ -779,14 +786,18 @@ class MarkerRegression(object): self.drawSNPTrackNew(canvas, offset=newoffset, zoom = 2*zoom, startMb=startMb, endMb = endMb) ## BEGIN HaplotypeAnalyst if self.haplotypeAnalystChecked: + print("DRAW HAPLOTYPE") self.drawHaplotypeBand(canvas, gifmap, plotXScale, offset=newoffset, zoom = zoom, startMb=startMb, endMb = endMb) ## END HaplotypeAnalyst # Draw X axis + print("DRAW X AXIS") self.drawXAxis(canvas, drawAreaHeight, gifmap, plotXScale, showLocusForm, offset=newoffset, zoom = zoom, startMb=startMb, endMb = endMb) # Draw QTL curve + print("DRAW QTL CURVE") self.drawQTL(canvas, drawAreaHeight, gifmap, plotXScale, offset=newoffset, zoom= zoom, startMb=startMb, endMb = endMb) #draw legend + print("DRAW LEGEND") if self.multipleInterval: self.drawMultiTraitName(fd, canvas, gifmap, showLocusForm, offset=newoffset) elif self.legendChecked: @@ -795,6 +806,7 @@ class MarkerRegression(object): pass #draw position, no need to use a separate function + print("DRAW PROBESET POSITION") if self.genotype.Mbmap: self.drawProbeSetPosition(canvas, plotXScale, offset=newoffset, zoom = zoom) diff --git a/wqflask/wqflask/templates/search_result_page.html b/wqflask/wqflask/templates/search_result_page.html index 7b3df00f..7b7f0037 100755 --- a/wqflask/wqflask/templates/search_result_page.html +++ b/wqflask/wqflask/templates/search_result_page.html @@ -17,9 +17,32 @@

    We searched {{ dataset.fullname }} - to find all records that match + to find all records {% for word in search_terms %} - {{word.search_term[0]}} {% if not loop.last %} or {% endif %} + {% if word.key|lower == "rif" %} + with GeneRIF containing {{ word.search_term[0] }}{% if not loop.last %} and {% endif %} + {% elif word.key|lower == "go" %} + with Gene Ontology ID {{ word.search_term[0] }}{% if not loop.last %} and {% endif %} + {% elif word.key|lower == "wiki" %} + with GeneWiki containing {{ word.search_term[0] }}{% if not loop.last %} and {% endif %} + {% elif word.key|lower == "mean" %} + with MEAN between {{ word.search_term[0] }} and {{ word.search_term[1] }}{% if not loop.last %} and {% endif %} + {% elif word.key|lower == "lrs" or word.key|lower == "translrs" or word.key|lower == "cislrs" %} + {% if word.search_term|length == 1 %} + with {% if word.key|lower == "translrs" %}trans{% elif word.key|lower == "cislrs" %}cis{% endif %}LRS {% if word.separator == ">" %} greater than {% elif word.separator == "<" %} less than {% elif word.separator == ">=" %} greater than or equal to {% elif word.separator == "<=" %} less than or equal to {% endif %} {{ word.search_term[0] }}{% if not loop.last %} and {% endif %} + {% elif word.search_term|length == 2 %} + with LRS between {{ word.search_term[0] }} and {{ word.search_term[1] }}{% if not loop.last %} and {% endif %} + {% elif word.search_term|length == 3 %} + with LRS between {{ word.search_term[0] }} and {{ word.search_term[1] }} on chromosome {{ word.search_term[2] }}{% if not loop.last %} and {% endif %} + {% elif word.search_term|length == 5 %} + with LRS between {{ word.search_term[0] }} and {{ word.search_term[1] }} on chromosome {{ word.search_term[2] }} between {{ word.search_term[3] }} and {{ word.search_term[4] }} Mb{% if not loop.last %} and {% endif %} + {% endif %} + {% elif word.key|lower == "position" %} + with target genes on chromosome {% if word.search_term[0].split('chr')|length > 1 %}{{ word.search_term[0].split('chr')[1] }}{% elif word.search_term[0].split('CHR')|length > 1 %}{{ word.search_term[0].split('CHR')[1] }}{% else %}{{ word.search_term[0] }}{% endif %} between {{ word.search_term[1] }} and {{ word.search_term[2] }} Mb{% if not loop.last %} and {% endif %} + {% else %} + with {{ word.key|lower }} matching {{ word.search_term[0] }} + {% endif %} + {% endfor %}.

    -- cgit v1.2.3 From 90417f4399633e1d737d70bedc9fd4a4b26ab2f1 Mon Sep 17 00:00:00 2001 From: zsloan Date: Wed, 9 Dec 2015 17:09:07 +0000 Subject: Disabled GN1 mapping for master branch; mistakenly pushed with it enabled before --- wqflask/wqflask/views.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py index 23c74817..4446b431 100755 --- a/wqflask/wqflask/views.py +++ b/wqflask/wqflask/views.py @@ -133,7 +133,7 @@ def search_page(): else: return render_template("data_sharing.html", **template_vars.__dict__) else: - key = "search_results:v3:" + json.dumps(request.args, sort_keys=True) + key = "search_results:v1:" + json.dumps(request.args, sort_keys=True) print("key is:", pf(key)) with Bench("Loading cache"): result = Redis.get(key) @@ -385,10 +385,10 @@ def marker_regression_page(): #causeerror - print("TESTING GN1!!!") - gn1_template_vars = marker_regression_gn1.MarkerRegression(result).__dict__ - print("gn1_template_vars:", gn1_template_vars) - causeerror + #print("TESTING GN1!!!") + #gn1_template_vars = marker_regression_gn1.MarkerRegression(result).__dict__ + #print("gn1_template_vars:", gn1_template_vars) + #causeerror #qtl_length = len(result['js_data']['qtl_results']) -- cgit v1.2.3 From 97b83d20a5f6896614024a3cc40535bfb738ef51 Mon Sep 17 00:00:00 2001 From: zsloan Date: Sat, 12 Dec 2015 00:01:06 +0000 Subject: Changed loop drawing qtl curve to fix some issues; still need to make it draw to different chr areas though --- .gitignore | 1 + wqflask/base/webqtlConfig.py | 2 +- .../marker_regression/marker_regression_gn1.py | 65 ++++++++++++++-------- wqflask/wqflask/views.py | 8 +-- 4 files changed, 48 insertions(+), 28 deletions(-) diff --git a/.gitignore b/.gitignore index 1ab1e727..f4693a9a 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ web/new_genotypes/HSNIH.json wqflask/secure_server.py wqflask/base/webqtlConfig.py +wqflask/output/* diff --git a/wqflask/base/webqtlConfig.py b/wqflask/base/webqtlConfig.py index 330fec56..4f9b3af3 100755 --- a/wqflask/base/webqtlConfig.py +++ b/wqflask/base/webqtlConfig.py @@ -55,7 +55,7 @@ COMMON_LIB = GNROOT + 'support/admin' HTMLPATH = GNROOT + 'genotype_files/' PYLMM_PATH = '/home/zas1024/plink_gemma/' SNP_PATH = '/home/zas1024/snps/' -IMGDIR = GNROOT + '/wqflask/wqflask/images/' +IMGDIR = GNROOT + '/wqflask/output/' IMAGESPATH = HTMLPATH + 'images/' UPLOADPATH = IMAGESPATH + 'upload/' TMPDIR = '/home/zas1024/tmp/' # Will remove this and dependent items later diff --git a/wqflask/wqflask/marker_regression/marker_regression_gn1.py b/wqflask/wqflask/marker_regression/marker_regression_gn1.py index f2fc12a4..c2cd5e97 100644 --- a/wqflask/wqflask/marker_regression/marker_regression_gn1.py +++ b/wqflask/wqflask/marker_regression/marker_regression_gn1.py @@ -37,13 +37,14 @@ from flask import Flask, g from htmlgen import HTMLgen2 as HT + from utility import helper_functions from utility import Plot from base import webqtlConfig #from intervalAnalyst import GeneUtil #from base.webqtlTrait import webqtlTrait #from base.templatePage import templatePage -#from utility import webqtlUtil +from utility import webqtlUtil #from utility.THCell import THCell #from utility.TDCell import TDCell #from dbFunction import webqtlDatabaseFunction @@ -507,19 +508,16 @@ class MarkerRegression(object): ################################################################ # Plots goes here ################################################################ - print("BEFORE GN1 PLOT") if self.plotScale != 'physic' or self.multipleInterval: showLocusForm = webqtlUtil.genRandStr("fm_") else: showLocusForm = "" - print("BEFORE PIL CANVAS") intCanvas = pid.PILCanvas(size=(self.graphWidth,self.graphHeight)) - print("BEFORE PLOTINTMAPPING") gifmap = self.plotIntMapping(intCanvas, startMb = self.startMb, endMb = self.endMb, showLocusForm= showLocusForm) print("AFTER PLOTINTMAPPING") filename= webqtlUtil.genRandStr("Itvl_") - intCanvas.save(os.path.join(webqtlConfig.IMGDIR, filename), format='png') + intCanvas.save(os.path.join(webqtlConfig.IMGDIR, filename), format='jpeg') intImg=HT.Image('/image/'+filename+'.png', border=0, usemap='#WebQTLImageMap') #Scales plot differently for high resolution @@ -743,7 +741,6 @@ class MarkerRegression(object): endPixelX = (xLeftOffset + plotWidth) #Drawing Area Height - print("DRAWING AREA HEIGHT") drawAreaHeight = plotHeight if self.plotScale == 'physic' and self.selectedChr > -1: drawAreaHeight -= self.ENSEMBL_BAND_HEIGHT + self.UCSC_BAND_HEIGHT+ self.WEBQTL_BAND_HEIGHT + 3*self.BAND_SPACING+ 10*zoom @@ -769,7 +766,6 @@ class MarkerRegression(object): newoffset = (xLeftOffset, xRightOffset, yTopOffset, yBottomOffset) # Draw the alternating-color background first and get plotXScale - print("DRAW BACKGROUND") plotXScale = self.drawGraphBackground(canvas, gifmap, offset=newoffset, zoom= zoom, startMb=startMb, endMb = endMb) #draw bootstap @@ -778,7 +774,6 @@ class MarkerRegression(object): # Draw clickable region and gene band if selected if self.plotScale == 'physic' and self.selectedChr > -1: - print("DRAW CLICKABLE REGION") self.drawClickBand(canvas, gifmap, plotXScale, offset=newoffset, zoom = zoom, startMb=startMb, endMb = endMb) if self.geneChecked and self.geneCol: self.drawGeneBand(canvas, gifmap, plotXScale, offset=newoffset, zoom = zoom, startMb=startMb, endMb = endMb) @@ -786,18 +781,14 @@ class MarkerRegression(object): self.drawSNPTrackNew(canvas, offset=newoffset, zoom = 2*zoom, startMb=startMb, endMb = endMb) ## BEGIN HaplotypeAnalyst if self.haplotypeAnalystChecked: - print("DRAW HAPLOTYPE") self.drawHaplotypeBand(canvas, gifmap, plotXScale, offset=newoffset, zoom = zoom, startMb=startMb, endMb = endMb) ## END HaplotypeAnalyst # Draw X axis - print("DRAW X AXIS") self.drawXAxis(canvas, drawAreaHeight, gifmap, plotXScale, showLocusForm, offset=newoffset, zoom = zoom, startMb=startMb, endMb = endMb) # Draw QTL curve - print("DRAW QTL CURVE") self.drawQTL(canvas, drawAreaHeight, gifmap, plotXScale, offset=newoffset, zoom= zoom, startMb=startMb, endMb = endMb) #draw legend - print("DRAW LEGEND") if self.multipleInterval: self.drawMultiTraitName(fd, canvas, gifmap, showLocusForm, offset=newoffset) elif self.legendChecked: @@ -806,7 +797,6 @@ class MarkerRegression(object): pass #draw position, no need to use a separate function - print("DRAW PROBESET POSITION") if self.genotype.Mbmap: self.drawProbeSetPosition(canvas, plotXScale, offset=newoffset, zoom = zoom) @@ -1823,7 +1813,7 @@ class MarkerRegression(object): lodm = self.LODFACTOR else: lodm = 1.0 - + if self.lrsMax <= 0: #sliding scale if "lrs_value" in self.qtlresults[0]: LRSMax = max([result['lrs_value'] for result in self.qtlresults]) @@ -1874,6 +1864,7 @@ class MarkerRegression(object): #"Significant" and "Suggestive" Drawing Routine # ======= Draw the thick lines for "Significant" and "Suggestive" ===== (crowell: I tried to make the SNPs draw over these lines, but piddle wouldn't have it...) + print("DRAW SUGGESTIVE/SIGNFICANT LINES") if self.permChecked and not self.multipleInterval: significantY = yZero - self.significance*LRSHeightThresh/LRSMax suggestiveY = yZero - self.suggestive*LRSHeightThresh/LRSMax @@ -1912,23 +1903,37 @@ class MarkerRegression(object): if zoom == 2: lrsEdgeWidth = 2 * lrsEdgeWidth + print("DRAW QTL RESULT CURVE") + + LRSCoordXY = [] + AdditiveCoordXY = [] + DominanceCoordXY = [] + + previous_chr = 1 + previous_chr_as_int = 1 for i, qtlresult in enumerate(self.qtlresults): m = 0 startPosX = xLeftOffset thisLRSColor = self.colorCollection[0] - for j, _chr in enumerate(self.genotype): - LRSCoordXY = [] - AdditiveCoordXY = [] - DominanceCoordXY = [] - for k, _locus in enumerate(_chr): + #for j, _chr in enumerate(self.genotype): + if 1 == 1: + #LRSCoordXY = [] + #AdditiveCoordXY = [] + #DominanceCoordXY = [] + #for k, _locus in enumerate(_chr): + if 1 == 1: if self.plotScale == 'physic': - Xc = startPosX + (_locus.Mb-startMb)*plotXScale + #Xc = startPosX + (_locus.Mb-startMb)*plotXScale + Xc = startPosX + (qtlresult['Mb']-startMb)*plotXScale else: - Xc = startPosX + (_locus.cM-_chr[0].cM)*plotXScale + #Xc = startPosX + (_locus.cM-_chr[0].cM)*plotXScale + Xc = startPosX + (qtlresult['cM']-qtlresult[0]['cM'])*plotXScale + # updated by NL 06-18-2011: # fix the over limit LRS graph issue since genotype trait may give infinite LRS; # for any lrs is over than 460(LRS max in this system), it will be reset to 460 if qtlresult['lrs_value'] > 460 or qtlresult['lrs_value']=='inf': + #if self.qtlresults[j]['lrs_value'] > 460 or self.qtlresults[j]['lrs_value']=='inf': Yc = yZero - webqtlConfig.MAXLRS*LRSHeightThresh/LRSMax else: Yc = yZero - qtlresult['lrs_value']*LRSHeightThresh/LRSMax @@ -1943,7 +1948,7 @@ class MarkerRegression(object): # Yc = yZero - qtlresult[m].dominance*DominanceHeightThresh/dominanceMax # DominanceCoordXY.append((Xc, Yc)) m += 1 - canvas.drawPolygon(LRSCoordXY,edgeColor=thisLRSColor,closed=0, edgeWidth=lrsEdgeWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth)) + #canvas.drawPolygon(LRSCoordXY,edgeColor=thisLRSColor,closed=0, edgeWidth=lrsEdgeWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth)) lineWidth = 1 if not self.multipleInterval and self.additiveChecked: @@ -2004,7 +2009,21 @@ 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)) - startPosX += (self.ChrLengthDistList[j]+self.GraphInterval)*plotXScale + + print("previous_chr:", previous_chr_as_int) + startPosX += (self.ChrLengthDistList[previous_chr_as_int-1]+self.GraphInterval)*plotXScale + #startPosX += (self.ChrLengthDistList[j]+self.GraphInterval)*plotXScale + + if qtlresult['chr'] != previous_chr: + previous_chr = qtlresult['chr'] + try: + previous_chr_as_int = int(previous_chr) + except: + previous_chr_as_int += 1 + + canvas.drawPolygon(LRSCoordXY,edgeColor=thisLRSColor,closed=0, edgeWidth=lrsEdgeWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth)) + + print("AFTER QTL CURVE") ###draw additive scale if not self.multipleInterval and self.additiveChecked: diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py index 4446b431..c17d6274 100755 --- a/wqflask/wqflask/views.py +++ b/wqflask/wqflask/views.py @@ -385,10 +385,10 @@ def marker_regression_page(): #causeerror - #print("TESTING GN1!!!") - #gn1_template_vars = marker_regression_gn1.MarkerRegression(result).__dict__ - #print("gn1_template_vars:", gn1_template_vars) - #causeerror + print("TESTING GN1!!!") + gn1_template_vars = marker_regression_gn1.MarkerRegression(result).__dict__ + print("gn1_template_vars:", gn1_template_vars) + causeerror #qtl_length = len(result['js_data']['qtl_results']) -- cgit v1.2.3 From fdc0cdeda64213c82512da20b10264238bd210ea Mon Sep 17 00:00:00 2001 From: zsloan Date: Wed, 27 Jan 2016 21:02:03 +0000 Subject: Added info button to Dataset dropdown on index page Fixed script that generates dataset dropdown json file to include accession id Fixed dataset link on search results page --- wqflask/maintenance/gen_select_dataset.py | 21 +- .../new/javascript/dataset_menu_structure.json | 687 +++++++++++++++++---- .../static/new/javascript/dataset_select_menu.js | 12 +- wqflask/wqflask/templates/index_page.html | 7 +- wqflask/wqflask/templates/search_result_page.html | 2 +- 5 files changed, 613 insertions(+), 116 deletions(-) diff --git a/wqflask/maintenance/gen_select_dataset.py b/wqflask/maintenance/gen_select_dataset.py index a2ad8c91..fda46792 100755 --- a/wqflask/maintenance/gen_select_dataset.py +++ b/wqflask/maintenance/gen_select_dataset.py @@ -123,12 +123,12 @@ def get_types(groups): def phenotypes_exist(group_name): - print("group_name:", group_name) + #print("group_name:", group_name) Cursor.execute("""select Name from PublishFreeze where PublishFreeze.Name = %s""", (group_name+"Publish")) results = Cursor.fetchone() - print("RESULTS:", results) + #print("RESULTS:", results) if results != None: return True @@ -136,12 +136,12 @@ def phenotypes_exist(group_name): return False def genotypes_exist(group_name): - print("group_name:", group_name) + #print("group_name:", group_name) Cursor.execute("""select Name from GenoFreeze where GenoFreeze.Name = %s""", (group_name+"Geno")) results = Cursor.fetchone() - print("RESULTS:", results) + #print("RESULTS:", results) if results != None: return True @@ -220,7 +220,7 @@ def build_datasets(species, group, type_name): # and ProbeFreeze.TissueId = Tissue.Id and ProbeFreeze.InbredSetId = # InbredSet.Id and ProbeSetFreeze.public > 0 order by # ProbeSetFreeze.CreateTime desc""".format(species, group, type_name)) - Cursor.execute("""select ProbeSetFreeze.Name, ProbeSetFreeze.FullName from + Cursor.execute("""select ProbeSetFreeze.Id, ProbeSetFreeze.Name, ProbeSetFreeze.FullName from ProbeSetFreeze, ProbeFreeze, InbredSet, Tissue, Species where Species.Name = %s and Species.Id = InbredSet.SpeciesId and InbredSet.Name = %s and @@ -228,7 +228,16 @@ def build_datasets(species, group, type_name): and ProbeFreeze.TissueId = Tissue.Id and ProbeFreeze.InbredSetId = InbredSet.Id and ProbeSetFreeze.public > 0 order by ProbeSetFreeze.CreateTime desc""", (species, group, type_name)) - return Cursor.fetchall() + + dataset_results = Cursor.fetchall() + datasets = [] + for dataset_info in dataset_results: + this_dataset_info = [] + for info in dataset_info: + this_dataset_info.append(str(info)) + datasets.append(this_dataset_info) + + return datasets def main(): diff --git a/wqflask/wqflask/static/new/javascript/dataset_menu_structure.json b/wqflask/wqflask/static/new/javascript/dataset_menu_structure.json index e790c9c0..da9beb9b 100755 --- a/wqflask/wqflask/static/new/javascript/dataset_menu_structure.json +++ b/wqflask/wqflask/static/new/javascript/dataset_menu_structure.json @@ -58,18 +58,22 @@ "QSM": { "Leaf mRNA": [ [ + "236", "B1LI0809R", "Barley1 Leaf INOC TTKS (Aug09) RMA" ], [ + "235", "B1LI0809M5", "Barley1 Leaf INOC TTKS (Aug09) MAS5" ], [ + "237", "B1MI0809M5", "Barley1 Leaf MOCK TTKS (Aug09) MAS5" ], [ + "238", "B1MI0809R", "Barley1 Leaf MOCK TTKS (Aug09) RMA" ] @@ -78,14 +82,17 @@ "SXM": { "Embryo mRNA": [ [ + "128", "B139_K_1206_R", "Barley1 Embryo gcRMA SCRI (Dec06)" ], [ + "124", "B139_K_1206_M", "Barley1 Embryo MAS 5.0 SCRI (Dec06)" ], [ + "114", "B150_K_0406_R", "Barley1 Embryo0 gcRMA SCRI (Apr06)" ] @@ -98,16 +105,19 @@ ], "Leaf mRNA": [ [ + "127", "B30_K_1206_M", "Barley1 Leaf MAS 5.0 SCRI (Dec06)" ], [ - "B30_K_1206_R", - "Barley1 Leaf gcRMA SCRI (Dec06)" - ], - [ + "126", "B30_K_1206_Rn", "Barley1 Leaf gcRMAn SCRI (Dec06)" + ], + [ + "125", + "B30_K_1206_R", + "Barley1 Leaf gcRMA SCRI (Dec06)" ] ], "Phenotypes": [ @@ -122,6 +132,7 @@ "DGRP": { "Whole Body mRNA": [ [ + "297", "NCSU_DrosWB_LC_RMA_0111", "NCSU Drosophila Whole Body (Jan11) RMA" ] @@ -130,10 +141,12 @@ "Oregon-R_x_2b3": { "Whole Body mRNA": [ [ + "249", "UAB_DrosWB_LC_RMA_1009", "UAB Whole body D.m. mRNA control (Oct09) RMA" ], [ + "250", "UAB_DrosWB_LE_RMA_1009", "UAB Whole body D.m. mRNA lead (pbAc) (Oct09) RMA" ] @@ -144,18 +157,22 @@ "AD-cases-controls": { "Brain mRNA": [ [ + "314", "GSE5281_F_RMA_N_0709", "GSE5281 Human Brain Normal Full Liang (Jul09) RMA" ], [ + "313", "GSE5281_F_RMA_Alzh_0709", "GSE5281 Human Brain Alzheimer Full Liang (Jul09) RMA" ], [ + "233", "GSE5281_F_RMA0709", "GSE5281 Human Brain Full Liang (Jul09) RMA" ], [ + "232", "GSE5281_RMA0709", "GSE5281 Human Brain Best 102 Liang (Jul09) RMA" ] @@ -164,14 +181,17 @@ "AD-cases-controls-Myers": { "Brain mRNA": [ [ + "234", "GSE15222_F_RI_0409", "GSE15222 Human Brain All Cases Myers (Apr09) RankInv" ], [ + "290", "GSE15222_F_N_RI_0409", "GSE15222 Human Brain Normal Myers (Apr09) RankInv" ], [ + "289", "GSE15222_F_A_RI_0409", "GSE15222 Human Brain Alzheimer Myers (Apr09) RankInv" ] @@ -186,24 +206,28 @@ "Aging-Brain-UCI": { "Entorhinal Cortex mRNA": [ [ + "460", "UCI_EC_0913", "GSE11882 UCI Human Entorhinal Cortex Affy U133 Plus2 (Sep13) RMA" ] ], "Hippocampus mRNA": [ [ + "461", "UCI_HC_0913", "GSE11882 UCI Human Hippocampus Affy U133 Plus2 (Sep13) RMA" ] ], "Postcentral Gyrus mRNA": [ [ + "462", "UCI_PCG_0913", "GSE11882 UCI Human Postcentral Gyrus Affy U133 Plus2 (Sep13) RMA" ] ], "Superior Frontal Gyrus mRNA": [ [ + "463", "UCI_SG_0913", "GSE11882 UCI Human Superior Frontal Gyrus Affy U133 Plus2 (Sep13) RMA" ] @@ -212,24 +236,28 @@ "Brain-Normal-NIH-Gibbs": { "Cerebellum mRNA": [ [ + "481", "GSE15745-GPL6104_Cer0510", "GSE15745 NIH Human Brain Cerebellum ILM humanRef-8 v2.0 (May10) RankInv" ] ], "Pons mRNA": [ [ + "484", "GSE15745-GPL6104_Po0510", "GSE15745 NIH Human Brain Pons ILM humanRef-8 v2.0 (May10) RankInv" ] ], "Prefrontal Cortex mRNA": [ [ + "482", "GSE15745-GPL6104_PFC0510", "GSE15745 NIH Human Brain Prefrontal Cortex ILM humanRef-8 v2.0 (May10) RankInv" ] ], "Temporal Cerebral Wall mRNA": [ [ + "483", "GSE15745-GPL6104_TC0510", "GSE15745 NIH Human Brain Temporal Cerebral ILM humanRef-8 v2.0 (May10) RankInv" ] @@ -238,16 +266,19 @@ "CANDLE": { "Methylation": [ [ + "423", "CANDLE_Meth27_0313", "CANDLE Newborn Cord ILM HumanMethylation27 (Mar13) **" ], [ + "422", "CANDLE_Meth_0313", "CANDLE Newborn Cord ILM HumanMethylation27 (Mar13) Z-Score **" ] ], "Newborn Cord Blood mRNA": [ [ + "324", "CANDLE_NB_0711", "CANDLE Newborn Cord ILMv6.3 (Jun11) QUANT" ] @@ -262,10 +293,12 @@ "CEPH-2004": { "Lymphoblast B-cell mRNA": [ [ + "241", "UT_CEPH_RankInv0909", "UTHSC CEPH B-cells Illumina (Sep09) RankInv" ], [ + "215", "Human_1008", "Monks CEPH B-cells Agilent (Dec04) Log10Ratio" ] @@ -274,470 +307,564 @@ "GTEx": { "Adrenal Gland mRNA": [ [ + "545", "GTEx_log2_Adren_0314", "GTEx Human Adrenal Gland (Mar14) RPKM Log2" ], [ + "495", "GTEx_Adren_0414", "GTEx Human Adrenal Gland (Apr14) RPKM" ] ], "Amygdala mRNA": [ [ + "542", "GTEx_log2_AMY_0314", "GTEx Human Amygdala (Mar14) RPKM Log2" ], [ + "492", "GTEx_AMY_0314", "GTEx Human Amygdala (Mar14) RPKM" ] ], "Anterior Cingulate Cortex mRNA": [ [ + "546", "GTEx_log2_Anter_0314", "GTEx Human Anterior Cingulate Cortex (Mar14) RPKM Log2" ], [ + "496", "GTEx_Anter_0414", "GTEx Human Anterior Cingulate Cortex (Apr14) RPKM" ] ], "Aorta mRNA": [ [ + "547", "GTEx_log2_Aorta_0314", "GTEx Human Aorta (Mar14) RPKM Log2" ], [ + "497", "GTEx_Aorta_0414", "GTEx Human Aorta (Apr14) RPKM" ] ], "Blood, Cells - EBV-Transformed Lymphocytes mRNA": [ [ + "548", "GTEx_log2_Blood_0314", "GTEx Human Blood, Cells - EBV-Transformed Lymphocytes (Mar14) RPKM Log2" ], [ + "498", "GTEx_Blood_0414", "GTEx Human Blood, Cells - EBV-Transformed Lymphocytes (Apr14) RPKM" ] ], "Breast - Mammary Tissue mRNA": [ [ + "549", "GTEx_log2_Breas_0314", "GTEx Human Breast - Mammary Tissue (Mar14) RPKM Log2" ], [ + "499", "GTEx_Breas_0414", "GTEx Human Breast - Mammary Tissue (Apr14) RPKM" ] ], "Caudate mRNA": [ [ + "550", "GTEx_log2_Cauda_0314", "GTEx Human Caudate (Mar14) RPKM Log2" ], [ + "500", "GTEx_Cauda_0414", "GTEx Human Caudate (Apr14) RPKM" ] ], "Cells - EBV-Transformed Lymphocytes mRNA": [ [ + "551", "GTEx_log2_CellsEBV_0314", "GTEx Human Cells - EBV-Transformed Lymphocytes (Mar14) RPKM Log2" ], [ + "501", "GTEx_CellsEBV_0414", "GTEx Human Cells - EBV-Transformed Lymphocytes (Apr14) RPKM" ] ], "Cells - Leukemia Cell Line (CML) mRNA": [ [ + "552", "GTEx_log2_CellsLe_0314", "GTEx Human Cells - Leukemia Cell Line (CML) (Mar14) RPKM Log2" ], [ + "502", "GTEx_CellsLe_0414", "GTEx Human Cells - Leukemia Cell Line (CML) (Apr14) RPKM" ] ], "Cells - Transformed Fibroblasts mRNA": [ [ + "553", "GTEx_log2_CellsTr_0314", "GTEx Human Cells - Transformed Fibroblasts (Mar14) RPKM Log2" ], [ + "503", "GTEx_CellsTr_0414", "GTEx Human Cells - Transformed Fibroblasts (Apr14) RPKM" ] ], "Cerebellar Cortex mRNA": [ [ + "554", "GTEx_log2_CerebC_0314", "GTEx Human Cerebellar Cortex (Mar14) RPKM Log2" ], [ + "504", "GTEx_CerebC_0414", "GTEx Human Cerebellar Cortex (Apr14) RPKM" ] ], "Cerebellar Hemisphere mRNA": [ [ + "555", "GTEx_log2_CerebH_0314", "GTEx Human Cerebellar Hemisphere (Mar14) RPKM Log2" ], [ + "505", "GTEx_CerebH_0414", "GTEx Human Cerebellar Hemisphere (Apr14) RPKM" ] ], "Cerebellum mRNA": [ [ + "543", "GTEx_log2_CER_0314", "GTEx Human Cerebellum (Mar14) RPKM Log2" ], [ + "493", "GTEx_CER_0314", "GTEx Human Cerebellum (Mar14) RPKM" ] ], "Colon - Transverse mRNA": [ [ + "556", "GTEx_log2_Colon_0314", "GTEx Human Colon - Transverse (Mar14) RPKM Log2" ], [ + "506", "GTEx_Colon_0414", "GTEx Human Colon - Transverse (Apr14) RPKM" ] ], "Coronary mRNA": [ [ + "557", "GTEx_log2_Coron_0314", "GTEx Human Coronary (Mar14) RPKM Log2" ], [ + "507", "GTEx_Coron_0414", "GTEx Human Coronary (Apr14) RPKM" ] ], "Esophagus - Mucosa mRNA": [ [ + "558", "GTEx_log2_EsophMuc_0314", "GTEx Human Esophagus - Mucosa (Mar14) RPKM Log2" ], [ + "508", "GTEx_EsophMuc_0414", "GTEx Human Esophagus - Mucosa (Apr14) RPKM" ] ], "Esophagus - Muscularis mRNA": [ [ + "559", "GTEx_log2_EsophMus_0314", "GTEx Human Esophagus - Muscularis (Mar14) RPKM Log2" ], [ + "509", "GTEx_EsophMus_0414", "GTEx Human Esophagus - Muscularis (Apr14) RPKM" ] ], "Fallopian Tube mRNA": [ [ + "560", "GTEx_log2_Fallo_0314", "GTEx Human Fallopian Tube (Mar14) RPKM Log2" ], [ + "510", "GTEx_Fallo_0414", "GTEx Human Fallopian Tube (Apr14) RPKM" ] ], "Frontal Cortex mRNA": [ [ + "561", "GTEx_log2_Front_0314", "GTEx Human Frontal Cortex (Mar14) RPKM Log2" ], [ + "511", "GTEx_Front_0414", "GTEx Human Frontal Cortex (Apr14) RPKM" ] ], "Heart - Atrial Appendage mRNA": [ [ + "562", "GTEx_log2_HeartAt_0314", "GTEx Human Heart - Atrial Appendage (Mar14) RPKM Log2" ], [ + "512", "GTEx_HeartAt_0414", "GTEx Human Heart - Atrial Appendage (Apr14) RPKM" ] ], "Heart - Left Ventricle mRNA": [ [ + "563", "GTEx_log2_HeartLV_0314", "GTEx Human Heart - Left Ventricle (Mar14) RPKM Log2" ], [ + "513", "GTEx_HeartLV_0414", "GTEx Human Heart - Left Ventricle (Apr14) RPKM" ] ], "Hippocampus mRNA": [ [ + "544", "GTEx_log2_HIP_0314", "GTEx Human Hippocampus (Mar14) RPKM Log2" ], [ + "494", "GTEx_HIP_0314", "GTEx Human Hippocampus (Mar14) RPKM" ] ], "Hypothalamus mRNA": [ [ + "564", "GTEx_log2_Hypot_0314", "GTEx Human Hypothalamus (Mar14) RPKM Log2" ], [ + "514", "GTEx_Hypot_0414", "GTEx Human Hypothalamus (Apr14) RPKM" ] ], "Kidney mRNA": [ [ + "565", "GTEx_log2_Kidne_0314", "GTEx Human Kidney (Mar14) RPKM Log2" ], [ + "515", "GTEx_Kidne_0414", "GTEx Human Kidney (Apr14) RPKM" ] ], "Liver mRNA": [ [ + "566", "GTEx_log2_Liver_0314", "GTEx Human Liver (Mar14) RPKM Log2" ], [ + "516", "GTEx_Liver_0414", "GTEx Human Liver (Apr14) RPKM" ] ], "Lung mRNA": [ [ + "567", "GTEx_log2_Lung_0314", "GTEx Human Lung (Mar14) RPKM Log2" ], [ + "517", "GTEx_Lung _0414", "GTEx Human Lung (Apr14) RPKM" ] ], "Muscle mRNA": [ [ + "568", "GTEx_log2_Muscle_0314", "GTEx Human Muscle (Mar14) RPKM Log2" ], [ + "518", "GTEx_Muscl_0414", "GTEx Human Muscle (Apr14) RPKM" ] ], "Nerve - Tibial mRNA": [ [ + "569", "GTEx_log2_Nerve_0314", "GTEx Human Nerve - Tibial (Mar14) RPKM Log2" ], [ + "519", "GTEx_Nerve_0414", "GTEx Human Nerve - Tibial (Apr14) RPKM" ] ], "Nucleus Accumbens mRNA": [ [ + "570", "GTEx_log2_Nucle_0314", "GTEx Human Nucleus Accumbens (Mar14) RPKM Log2" ], [ + "520", "GTEx_Nucle_0414", "GTEx Human Nucleus Accumbens (Apr14) RPKM" ] ], "Ovary mRNA": [ [ + "571", "GTEx_log2_Ovary_0314", "GTEx Human Ovary (Mar14) RPKM Log2" ], [ + "521", "GTEx_Ovary_0414", "GTEx Human Ovary (Apr14) RPKM" ] ], "Pancreas mRNA": [ [ + "572", "GTEx_log2_Pancr_0314", "GTEx Human Pancreas (Mar14) RPKM Log2" ], [ + "522", "GTEx_Pancr_0414", "GTEx Human Pancreas (Apr14) RPKM" ] ], "Pituitary Gland mRNA": [ [ + "573", "GTEx_log2_Pitui_0314", "GTEx Human Pituitary (Mar14) RPKM Log2" ], [ + "523", "GTEx_Pitui_0414", "GTEx Human Pituitary (Apr14) RPKM" ] ], "Prostate mRNA": [ [ + "574", "GTEx_log2_Prost_0314", "GTEx Human Prostate (Mar14) RPKM Log2" ], [ + "524", "GTEx_Prost_0414", "GTEx Human Prostate (Apr14) RPKM" ] ], "Putamen mRNA": [ [ + "575", "GTEx_log2_Putam_0314", "GTEx Human Putamen (Mar14) RPKM Log2" ], [ + "525", "GTEx_Putam_0414", "GTEx Human Putamen (Apr14) RPKM" ] ], "Skin - Not Sun Exposed (Suprapubic) mRNA": [ [ + "576", "GTEx_log2_SkinN_0314", "GTEx Human Skin-Not Sun Exposed (Suprapubic) (Mar14) RPKM Log2" ], [ + "526", "GTEx_SkinN_0414", "GTEx Human Skin-Not Sun Exposed (Suprapubic) (Apr14) RPKM" ] ], "Skin - Sun Exposed (Lower leg) mRNA": [ [ + "577", "GTEx_log2_SkinE_0314", "GTEx Human Skin-Sun Exposed (Lower leg) (Mar14) RPKM Log2" ], [ + "527", "GTEx_SkinE_0414", "GTEx Human Skin-Sun Exposed (Lower leg) (Apr14) RPKM" ] ], "Spinal Cord mRNA": [ [ + "578", "GTEx_log2_Spina_0314", "GTEx Human Spinal Cord (Mar14) RPKM Log2" ], [ + "528", "GTEx_Spina_0414", "GTEx Human Spinal Cord (Apr14) RPKM" ] ], "Stomach mRNA": [ [ + "579", "GTEx_log2_Stoma_0314", "GTEx Human Stomach (Mar14) RPKM Log2" ], [ + "529", "GTEx_Stoma_0414", "GTEx Human Stomach (Apr14) RPKM" ] ], "Subcutaneous mRNA": [ [ + "580", "GTEx_log2_Subcu_0314", "GTEx Human Subcutaneous (Mar14) RPKM Log2" ], [ + "530", "GTEx_Subcu_0414", "GTEx Human Subcutaneous (Apr14) RPKM" ] ], "Substantia Nigra mRNA": [ [ + "581", "GTEx_log2_Subst_0314", "GTEx Human Substantia Nigra (Mar14) RPKM Log2" ], [ + "531", "GTEx_Subst_0414", "GTEx Human Substantia Nigra (Apr14) RPKM" ] ], "Testis mRNA": [ [ + "582", "GTEx_log2_Testi_0314", "GTEx Human Testis (Mar14) RPKM Log2" ], [ + "532", "GTEx_Testi_0414", "GTEx Human Testis (Apr14) RPKM" ] ], "Thyroid mRNA": [ [ + "583", "GTEx_log2_Thyro_0314", "GTEx Human Thyroid (Mar14) RPKM Log2" ], [ + "533", "GTEx_Thyro_0414", "GTEx Human Thyroid (Apr14) RPKM" ] ], "Tibial mRNA": [ [ + "584", "GTEx_log2_Tibial_0314", "GTEx Human Tibial (Mar14) RPKM Log2" ], [ + "534", "GTEx_Tibia_0414", "GTEx Human Tibial (Apr14) RPKM" ] ], "Uterus mRNA": [ [ + "585", "GTEx_log2_Uterus_0314", "GTEx Human Uterus (Mar14) RPKM Log2" ], [ + "535", "GTEx_Uteru_0414", "GTEx Human Uterus (Apr14) RPKM" ] ], "Vagina mRNA": [ [ + "586", "GTEx_log2_Vagin_0314", "GTEx Human Vagina (Mar14) RPKM Log2" ], [ + "536", "GTEx_Vagin_0414", "GTEx Human Vagina (Apr14) RPKM" ] ], "Visceral mRNA": [ [ + "587", "GTEx_log2_Visce_0314", "GTEx Human Visceral (Mar14) RPKM Log2" ], [ + "537", "GTEx_Visce_0414", "GTEx Human Visceral (Apr14) RPKM" ] ], "Whole Blood mRNA": [ [ + "588", "GTEx_log2_WholeB_0314", "GTEx Human Whole Blood (Mar14) RPKM Log2" ], [ + "538", "GTEx_Whole_0414", "GTEx Human Whole Blood (Apr14) RPKM" ] @@ -746,54 +873,66 @@ "HB": { "Cerebellum mRNA": [ [ + "326", "HBTRC-MLC_0611", "HBTRC-MLC Human Cerebellum Agilent (Jun11) mlratio" ], [ + "361", "HBTRC-MLC_N_0611", "HBTRC-MLC Human Cerebellum Agilent Normal (Jun11) mlratio" ], [ + "362", "HBTRC-MLC_AD_0611", "HBTRC-MLC Human Cerebellum Agilent AD (Jun11) mlratio" ], [ + "363", "HBTRC-MLC_HD_0611", "HBTRC-MLC Human Cerebellum Agilent HD (Jun11) mlratio" ] ], "Prefrontal Cortex mRNA": [ [ + "328", "HBTRC-MLPFC_0611", "HBTRC-MLC Human Prefrontal Cortex Agilent (Jun11) mlratio" ], [ + "367", "HBTRC-MLPFC_N_0611", "HBTRC-MLC Human Prefrontal Cortex Agilent Normal (Jun11) mlratio" ], [ + "368", "HBTRC-MLPFC_AD_0611", "HBTRC-MLC Human Prefrontal Cortex Agilent AD (Jun11) mlratio" ], [ + "369", "HBTRC-MLPFC_HD_0611", "HBTRC-MLC Human Prefrontal Cortex Agilent HD (Jun11) mlratio" ] ], "Primary Visual Cortex mRNA": [ [ + "327", "HBTRC-MLVC_0611", "HBTRC-MLC Human Visual Cortex Agilent (Jun11) mlratio" ], [ + "364", "HBTRC-MLVC_N_0611", "HBTRC-MLC Human Visual Cortex Agilent Normal (Jun11) mlratio" ], [ + "365", "HBTRC-MLVC_AD_0611", "HBTRC-MLC Human Visual Cortex Agilent AD (Jun11) mlratio" ], [ + "366", "HBTRC-MLVC_HD_0611", "HBTRC-MLC Human Visual Cortex Agilent HD (Jun11) mlratio" ] @@ -810,14 +949,17 @@ "HLC": { "Liver mRNA": [ [ + "320", "HLC_0311", "GSE9588 Human Liver Normal (Mar11) Both Sexes" ], [ + "383", "HLCM_0311", "GSE9588 Human Liver Normal (Mar11) Males" ], [ + "384", "HLCF_0311", "GSE9588 Human Liver Normal (Mar11) Females" ] @@ -832,18 +974,22 @@ "HLT": { "Lung mRNA": [ [ + "455", "GSE23546HLT0613", "Super Series GSE23546 Whole-Genome GXD Non-Tumorous Human Lung Tissues Affy HuRSTA array (Jun11) RMA" ], [ + "452", "luCA_GSE23352HLT0613", "UL/GSE23352 Whole-Genome GXD Non-Tumorous Human Lung Tissues Affy HuRSTA (Jun11) RMA" ], [ + "453", "UBC-GSE23529HLT0613", "UBC/GSE23529 Whole-Genome GXD Non-Tumorous Human Lung Tissues Affy HuRSTA array (Jun11) RMA" ], [ + "454", "GRNG-GSE23545HLT0613", "GRNG/GSE23545 Whole-Genome GXD Non-Tumorous Human Lung Tissues Affy HuRSTA array (Jun11) RMA" ] @@ -852,96 +998,112 @@ "HSB": { "Amygdala mRNA": [ [ + "330", "KIN_YSM_AMY_0711", "GN330 Human Amygdala Affy Hu-Exon 1.0 ST (Jul11) Quantile" ] ], "Cerebellar Cortex mRNA": [ [ + "331", "KIN_YSM_CBC_0711", "Human Cerebellar Cortex Affy Hu-Exon 1.0 ST (Jul11) Quantile" ] ], "Dorsolateral Prefrontal Cortex mRNA": [ [ + "333", "KIN_YSM_DFC_0711", "Human Dorsolateral Prefrontal Cortex Affy Hu-Exon 1.0 ST (Jul11) Quantile" ] ], "Hippocampus mRNA": [ [ + "337", "KIN_YSM_HIP_0711", "Human Hippocampus Affy Hu-Exon 1.0 ST (Jul11) Quantile" ] ], "Inferior Temporal Cortex mRNA": [ [ + "339", "KIN_YSM_ITC_0711", "Human Inferior Temporal Cortex Affy Hu-Exon 1.0 ST (Jul11) Quantile" ] ], "Medial Prefrontal Cortex mRNA": [ [ + "343", "KIN_YSM_MFC_0711", "Human Medial Prefrontal Cortex Affy Hu-Exon 1.0 ST (Jul11) Quantile" ] ], "Mediodorsal Nucleus of Thalamus mRNA": [ [ + "342", "KIN_YSM_MD_0711", "Human Mediodorsal Nucleus of Thalamus Affy Hu-Exon 1.0 ST (Jul11) Quantile" ] ], "Orbital Prefrontal Cortex mRNA": [ [ + "347", "KIN_YSM_OFC_0711", "Human Orbital Prefrontal Cortex Affy Hu-Exon 1.0 ST (Jul11) Quantile" ] ], "Posterior Inferior Parietal Cortex mRNA": [ [ + "338", "KIN_YSM_IPC_0711", "Human Posterior Inferior Parietal Cortex Affy Hu-Exon 1.0 ST (Jul11) Quantile" ] ], "Posterior Superior Temporal Cortex mRNA": [ [ + "350", "KIN_YSM_STC_0711", "Human Posterior Superior Temporal Cortex Affy Hu-Exon 1.0 ST (Jul11) Quantile" ] ], "Primary Auditory (A1) Cortex mRNA": [ [ + "329", "KIN_YSM_A1C_0711", "Human Primary Auditory (A1) Cortex Affy Hu-Exon 1.0 ST (Jul11) Quantile" ] ], "Primary Motor (M1) Cortex mRNA": [ [ + "341", "KIN_YSM_M1C_0711", "Human Primary Motor (M1) Cortex Affy Hu-Exon 1.0 ST (Jul11) Quantile" ] ], "Primary Somatosensory (S1) Cortex mRNA": [ [ + "349", "KIN_YSM_S1C_0711", "Human Primary Somatosensory (S1) Cortex Affy Hu-Exon 1.0 ST (Jul11) Quantile" ] ], "Primary Visual Cortex mRNA": [ [ + "354", "KIN_YSM_V1C_0711", "Human Primary Visual Cortex Affy Hu-Exon 1.0 ST (Jul11) Quantile" ] ], "Striatum mRNA": [ [ + "351", "KIN_YSM_STR_0711", "Human Striatum Affy Hu-Exon 1.0 ST (Jul11) Quantile" ] ], "Ventrolateral Prefrontal Cortex mRNA": [ [ + "356", "KIN_YSM_VFC_0711", "Human Ventrolateral Prefrontal Cortex Affy Hu-Exon 1.0 ST (Jul11) Quantile" ] @@ -952,30 +1114,35 @@ "Macaca-fasicularis": { "Amygdala mRNA": [ [ + "255", "INIA_MacFas_AMG_RMA_0110", "INIA Macaca fasicularis Amygdala (Jan10) RMA **" ] ], "Brain mRNA": [ [ + "251", "INIA_MacFas_brain_RMA_0110", "INIA Macaca fasicularis Brain (Jan10) RMA **" ] ], "Hippocampus mRNA": [ [ + "254", "INIA_MacFas_Hc_RMA_0110", "INIA Macaca fasicularis Hippocampus (Jan10) RMA **" ] ], "Nucleus Accumbens mRNA": [ [ + "253", "INIA_MacFas_Ac_RMA_0110", "INIA Macaca fasicularis Nucleus Accumbens (Jan10) RMA **" ] ], "Prefrontal Cortex mRNA": [ [ + "252", "INIA_MacFas_Pf_RMA_0110", "INIA Macaca fasicularis Prefrontal Cortex (Jan10) RMA **" ] @@ -992,28 +1159,33 @@ ], "Mammary Tumors mRNA": [ [ + "224", "NCI_Agil_Mam_Tum_RMA_0409", "NCI Mammary LMT miRNA v2 (Apr09) RMA" ], [ - "MA_M_0704_M", - "NCI Mammary mRNA M430 (July04) MAS5" - ], - [ + "37", "MA_M_0704_R", "NCI Mammary mRNA M430 (July04) RMA" + ], + [ + "36", + "MA_M_0704_M", + "NCI Mammary mRNA M430 (July04) MAS5" ] ] }, "AXBXA": { "Bone Femur mRNA": [ [ + "411", "UCLA_AXB/BXA_Femur_0113_RSN", "UCLA GSE27483 AXB/BXA Bone Femur ILM Mouse WG-6 v1, v1.1 (Jan13) RSN" ] ], "Eye mRNA": [ [ + "210", "Eye_AXBXA_1008_RankInv", "Eye AXBXA Illumina V6.2(Oct08) RankInv Beta" ] @@ -1026,12 +1198,14 @@ ], "Heart mRNA": [ [ + "421", "IRCM_AXBXA_HRI0213", "IRCM AXB/BXA Mouse Heart ILM MouseRef-8 v2.0 (Feb13) RankInv" ] ], "Liver mRNA": [ [ + "352", "GSE16780AB_UCLA_ML0911", "GSE16780 UCLA Mouse AXB/BXA Liver Affy HT M430A (Sep11) RMA" ] @@ -1052,12 +1226,14 @@ ], "Liver mRNA": [ [ - "LVF2_M_0704_M", - "(B6 x BTBR)F2-ob/ob Liver mRNA M430 (Jul04) MAS5" - ], - [ + "39", "LVF2_M_0704_R", "(B6 x BTBR)F2-ob/ob Liver mRNA M430 (Jul04) RMA" + ], + [ + "38", + "LVF2_M_0704_M", + "(B6 x BTBR)F2-ob/ob Liver mRNA M430 (Jul04) MAS5" ] ], "Phenotypes": [ @@ -1070,28 +1246,34 @@ "B6D2F2": { "Brain mRNA": [ [ + "76", + "BRF2_M_0805_M", + "OHSU/VA B6D2F2 Brain mRNA M430 (Aug05) MAS5" + ], + [ + "78", "BRF2_M_0805_P", "OHSU/VA B6D2F2 Brain mRNA M430 (Aug05) PDNN" ], [ + "77", "BRF2_M_0805_R", "OHSU/VA B6D2F2 Brain mRNA M430 (Aug05) RMA" ], [ - "BRF2_M_0805_M", - "OHSU/VA B6D2F2 Brain mRNA M430 (Aug05) MAS5" - ], - [ + "33", "BRF2_M_0304_P", "OHSU/VA B6D2F2 Brain mRNA M430A (Mar04) PDNN" ], [ - "BRF2_M_0304_M", - "OHSU/VA B6D2F2 Brain mRNA M430A (Mar04) MAS5" - ], - [ + "32", "BRF2_M_0304_R", "OHSU/VA B6D2F2 Brain mRNA M430A (Mar04) RMA" + ], + [ + "31", + "BRF2_M_0304_M", + "OHSU/VA B6D2F2 Brain mRNA M430A (Mar04) MAS5" ] ], "Genotypes": [ @@ -1110,18 +1292,22 @@ ], "Muscle mRNA": [ [ + "134", "PSU-B6D2F2_0812", "PSU B6D2F2 Muscle Affy Mouse Genome 430 2.0 (Aug12) RMA **" ], [ + "404", "PSU-B6D2F2_F0812", "PSU B6D2F2 Muscle Affy Mouse Genome 430 2.0 (Aug12) RMA Females **" ], [ + "405", "PSU-B6D2F2_M0812", "PSU B6D2F2 Muscle Affy Mouse Genome 430 2.0 (Aug12) RMA Males **" ], [ + "406", "PSU-B6D2F2_M2000812", "PSU B6D2F2 Muscle Affy Mouse Genome 430 2.0 (Aug12) RMA Males Aged 200 **" ] @@ -1130,6 +1316,7 @@ "B6D2RI": { "Hippocampus mRNA": [ [ + "391", "UTHSC_B6D2RI_H_0912", "UTHSC B6D2RI Aged Hippocampus Affy Mouse Gene 1.0 ST (Sep12) RMA **" ] @@ -1144,6 +1331,7 @@ ], "Liver mRNA": [ [ + "169", "UCLA_BDF2_LIVER_1999", "UCLA BDF2 Liver (1999) mlratio" ] @@ -1158,44 +1346,53 @@ ], "Striatum mRNA": [ [ + "84", + "SA_M2_0905_R", + "OHSU/VA B6D2F2 Striatum M430v2 (Sep05) RMA" + ], + [ + "83", "SA_M2_0905_M", "OHSU/VA B6D2F2 Striatum M430v2 (Sep05) MAS5" ], [ + "85", "SA_M2_0905_P", "OHSU/VA B6D2F2 Striatum M430v2 (Sep05) PDNN" - ], - [ - "SA_M2_0905_R", - "OHSU/VA B6D2F2 Striatum M430v2 (Sep05) RMA" ] ] }, "BHF2": { "Adipose mRNA": [ [ - "UCLA_BHF2_ADIPOSE_FEMALE", - "UCLA BHF2 Adipose Female mlratio" - ], - [ + "196", "UCLA_BHF2_ADIPOSE_MALE", "UCLA BHF2 Adipose Male mlratio" ], [ + "197", + "UCLA_BHF2_ADIPOSE_FEMALE", + "UCLA BHF2 Adipose Female mlratio" + ], + [ + "165", "UCLA_BHF2_ADIPOSE_0605", "UCLA BHF2 Adipose (June05) mlratio" ] ], "Brain mRNA": [ [ - "UCLA_BHF2_BRAIN_FEMALE", - "UCLA BHF2 Brain Female mlratio" - ], - [ + "198", "UCLA_BHF2_BRAIN_MALE", "UCLA BHF2 Brain Male mlratio" ], [ + "199", + "UCLA_BHF2_BRAIN_FEMALE", + "UCLA BHF2 Brain Female mlratio" + ], + [ + "166", "UCLA_BHF2_BRAIN_0605", "UCLA BHF2 Brain (June05) mlratio" ] @@ -1208,28 +1405,34 @@ ], "Liver mRNA": [ [ - "UCLA_BHF2_LIVER_FEMALE", - "UCLA BHF2 Liver Female mlratio" - ], - [ + "200", "UCLA_BHF2_LIVER_MALE", "UCLA BHF2 Liver Male mlratio" ], [ + "201", + "UCLA_BHF2_LIVER_FEMALE", + "UCLA BHF2 Liver Female mlratio" + ], + [ + "167", "UCLA_BHF2_LIVER_0605", "UCLA BHF2 Liver (June05) mlratio" ] ], "Muscle mRNA": [ [ - "UCLA_BHF2_MUSCLE_FEMALE", - "UCLA BHF2 Muscle Female mlratio **" - ], - [ + "202", "UCLA_BHF2_MUSCLE_MALE", "UCLA BHF2 Muscle Male mlratio **" ], [ + "203", + "UCLA_BHF2_MUSCLE_FEMALE", + "UCLA BHF2 Muscle Female mlratio **" + ], + [ + "168", "UCLA_BHF2_MUSCLE_0605", "UCLA BHF2 Muscle (June05) mlratio **" ] @@ -1238,28 +1441,34 @@ "BHHBF2": { "Adipose mRNA": [ [ + "174", "UCLA_BHHBF2_ADIPOSE_2005", "UCLA BHHBF2 Adipose (2005) mlratio" ], [ + "180", "UCLA_BHHBF2_ADIPOSE_MALE", "UCLA BHHBF2 Adipose Male Only" ], [ + "181", "UCLA_BHHBF2_ADIPOSE_FEMALE", "UCLA BHHBF2 Adipose Female Only" ] ], "Brain mRNA": [ [ + "175", "UCLA_BHHBF2_BRAIN_2005", "UCLA BHHBF2 Brain (2005) mlratio" ], [ + "182", "UCLA_BHHBF2_BRAIN_MALE", "UCLA BHHBF2 Brain Male Only" ], [ + "183", "UCLA_BHHBF2_BRAIN_FEMALE", "UCLA BHHBF2 Brain Female Only" ] @@ -1272,28 +1481,34 @@ ], "Liver mRNA": [ [ + "176", "UCLA_BHHBF2_LIVER_2005", "UCLA BHHBF2 Liver (2005) mlratio" ], [ + "184", "UCLA_BHHBF2_LIVER_MALE", "UCLA BHHBF2 Liver Male Only" ], [ + "185", "UCLA_BHHBF2_LIVER_FEMALE", "UCLA BHHBF2 Liver Female Only" ] ], "Muscle mRNA": [ [ + "177", "UCLA_BHHBF2_MUSCLE_2005", "UCLA BHHBF2 Muscle (2005) mlratio" ], [ + "186", "UCLA_BHHBF2_MUSCLE_MALE", "UCLA BHHBF2 Muscle Male Only" ], [ + "187", "UCLA_BHHBF2_MUSCLE_FEMALE", "UCLA BHHBF2 Muscle Female Only" ] @@ -1302,250 +1517,308 @@ "BXD": { "Adipose mRNA": [ [ + "469", "EPFLADGL1013", "EPFL/LISP BXD CD Brown Adipose Affy Mouse Gene 2.0 ST Gene Level (Oct13) RMA" ], [ + "470", "EPFLADEL1013", "EPFL/LISP BXD CD Brown Adipose Affy Mouse Gene 2.0 ST Exon Level (Oct13) RMA" ] ], "Adrenal Gland mRNA": [ [ + "388", "INIA_Adrenal_RMA_0612", "INIA Adrenal Affy MoGene 1.0ST (Jun12) RMA" ], [ + "426", "INIA_Adrenal_RMA_F_0612", "INIA Adrenal Affy MoGene 1.0ST (Jun12) RMA Females" ], [ + "425", "INIA_Adrenal_RMA_M_0612", "INIA Adrenal Affy MoGene 1.0ST (Jun12) RMA Males" ], [ + "334", "INIA_Adrenal_RMA_Ex_0612", "INIA Adrenal Affy MoGene 1.0ST (Jun12) RMA Exon Level" ] ], "Amygdala mRNA": [ [ + "323", "INIA_AmgCoh_0311", "INIA Amygdala Cohort Affy MoGene 1.0 ST (Mar11) RMA" ], [ + "280", "INIA_Amg_BLA_RMA_1110", "INIA Amygdala Affy MoGene 1.0 ST (Nov10) RMA" ], [ + "316", "INIA_Amg_BLA_RMA_M_1110", "INIA Amygdala Affy MoGene 1.0 ST (Nov10) RMA Male" ], [ + "315", "INIA_Amg_BLA_RMA_F_1110", "INIA Amygdala Affy MoGene 1.0 ST (Nov10) RMA Female" ], [ + "158", "INIA_Amg_BLA_Ex-RMA_1110", "INIA Amygdala Exon Affy MoGene 1.0 ST (Nov10) RMA" ] ], "Bone Femur mRNA": [ [ + "410", "UCLA_BXD_Femur_0113_RSN", "UCLA GSE27483 BXD Bone Femur ILM Mouse WG-6 v1, v1.1 (Jan13) RSN" ], [ + "414", "UCLA_BXD-on_Femur_0113_RSN", "UCLA GSE27483 BXD Only Bone Femur ILM Mouse WG-6 v2.0 (Jan13) RSN" ], [ + "464", "UTHSCWGU88BFMG1013", "UTHSC WGU88 Male Bone Femur AFFY Mouse Gene ST 2.0 Gene Level (Oct13) RMA **" ], [ + "465", "UTHSCWGU88BFMEx1013", "UTHSC WGU88 Male Bone Femur AFFY Mouse Gene ST 2.0 Exon Level (Oct13) RMA **" ], [ + "466", "UTHSCWGU88BFFG1013", "UTHSC WGU88 Female Bone Femur AFFY Mouse Gene ST 2.0 Gene Level (Oct13) RMA **" ], [ + "467", "UTHSCWGU88BFFEx1013", "UTHSC WGU88 Female Bone Femur AFFY Mouse Gene ST 2.0 Exon Level (Oct13) RMA **" ] ], "Brain mRNA": [ [ + "589", "UTHSC_BXD_WB_RNASeqtrim1112", "UTHSC Mouse BXD Whole Brain RNA Sequence (Nov12) RPKM Trimmed 2.0" ], [ - "UTHSC_BXD_WB_RNASeqtrim1_1112", - "UTHSC Mouse BXD Whole Brain RNA Sequence (Nov12) RPKM Trimmed 1.0" - ], - [ + "164", "UTHSC_BXD_WB_RNASeq1112", "UTHSC Mouse BXD Whole Brain RNA Sequence (Nov12) RPKM Untrimmed" ], [ + "590", + "UTHSC_BXD_WB_RNASeqtrim1_1112", + "UTHSC Mouse BXD Whole Brain RNA Sequence (Nov12) RPKM Trimmed 1.0" + ], + [ + "394", "UTHSC_BXD_WB_RNASeqEx1112", "UTHSC Mouse BXD Whole Brain RNA Sequence Exon Level (Nov12) RPKM" ], [ + "123", "BR_M2_1106_R", "UCHSC BXD Whole Brain M430 2.0 (Nov06) RMA" ], [ + "95", "BR_U_1105_P", "UTHSC Brain mRNA U74Av2 (Nov05) PDNN" ], [ - "BR_U_0805_P", - "UTHSC Brain mRNA U74Av2 (Aug05) PDNN" - ], - [ + "80", "BR_U_0805_M", "UTHSC Brain mRNA U74Av2 (Aug05) MAS5" ], [ + "82", "BR_U_0805_R", "UTHSC Brain mRNA U74Av2 (Aug05) RMA" ], [ + "81", + "BR_U_0805_P", + "UTHSC Brain mRNA U74Av2 (Aug05) PDNN" + ], + [ + "42", "CB_M_0204_P", "INIA Brain mRNA M430 (Feb04) PDNN" ] ], "Cartilage mRNA": [ [ + "208", "UCLA_BXDBXH_CARTILAGE_V2", "UCLA BXD and BXH Cartilage v2" ], [ + "204", "UCLA_BXDBXH_CARTILAGE", "UCLA BXD and BXH Cartilage" ], [ + "178", "UCLA_BXD_CARTILAGE", "UCLA BXD Cartilage" ] ], "Cerebellum mRNA": [ [ + "46", "CB_M_1004_R", "SJUT Cerebellum mRNA M430 (Oct04) RMA" ], [ + "45", "CB_M_1004_P", "SJUT Cerebellum mRNA M430 (Oct04) PDNN" ], [ + "44", "CB_M_1004_M", "SJUT Cerebellum mRNA M430 (Oct04) MAS5" ], [ + "9", "CB_M_1003_M", "SJUT Cerebellum mRNA M430 (Oct03) MAS5" ], [ + "436", "CMMTUBCBXDCerILM0513", "UBC/CMMT BXD Cerebellum All Ages Combined ILM Mouse WG-6 v2.0 (May13) RankInv **" ], [ + "441", "CMMTUBCBXDG12CerILM0513", "UBC/CMMT BXD E12 Cerebellum ILM Mouse WG-6 v2.0 (May13) RankInv **" ], [ + "442", "CMMTUBCBXDG15CerILM0513", "UBC/CMMT BXD E15 Cerebellum ILM Mouse WG-6 v2.0 (May13) RankInv **" ], [ + "443", "CMMTUBCBXDG18CerILM0513", "UBC/CMMT BXD E18 Cerebellum ILM Mouse WG-6 v2.0 (May13) RankInv **" ], [ + "437", "CMMTUBCBXDP00CerILM0513", "UBC/CMMT BXD P0 Cerebellum ILM Mouse WG-6 v2.0 (May13) RankInv **" ], [ + "438", "CMMTUBCBXDP03CerILM0513", "UBC/CMMT BXD P3 Cerebellum ILM Mouse WG-6 v2.0 (May13) RankInv **" ], [ + "439", "CMMTUBCBXDP06CerILM0513", "UBC/CMMT BXD P6 Cerebellum ILM Mouse WG-6 v2.0 (May13) RankInv **" ], [ + "440", "CMMTUBCBXDP09CerILM0513", "UBC/CMMT BXD P9 Cerebellum ILM Mouse WG-6 v2.0 (May13) RankInv **" ], [ + "415", "GenEx_BXD_CerebEt_RMA_0213", "GenEx BXD EtOH Cerebellum Affy M430 2.0 (Feb13) RMA Both Sexes **" ], [ + "416", "GenEx_BXD_CerebEt_RMA_F_0213", "GenEx BXD EtOH Cerebellum Affy M430 2.0 (Feb13) RMA Females **" ], [ + "417", "GenEx_BXD_CerebEt_RMA_M_0213", "GenEx BXD EtOH Cerebellum Affy M430 2.0 (Feb13) RMA Males **" ], [ + "418", "GenEx_BXD_CerebSal_RMA_0213", "GenEx BXD Sal Cerebellum Affy M430 2.0 (Feb13) RMA Both Sexes **" ], [ + "419", "GenEx_BXD_CerebSal_RMA_F_0213", "GenEx BXD Sal Cerebellum Affy M430 2.0 (Feb13) RMA Females **" ], [ + "420", "GenEx_BXD_CerebSal_RMA_M_0213", "GenEx BXD Sal Cerebellum Affy M430 2.0 (Feb13) RMA Males **" ] ], "Eye mRNA": [ [ + "207", "Eye_M2_0908_R", "Eye M430v2 (Sep08) RMA" ], [ + "10", "gn10", "Eye M430v2 No Mutant/Mutant (Aug12) RMA **" ], [ + "261", "Eye_M2_0908_R_NB", "Eye M430v2 Mutant Gpnmb (Sep08) RMA **" ], [ + "262", "Eye_M2_0908_R_ND", "Eye M430v2 WT Gpnmb (Sep08) RMA **" ], [ + "278", + "Eye_M2_0908_R_MT", + "Eye M430v2 Mutant Tyrp1 (Sep08) RMA **" + ], + [ + "382", "Eye_M2_0908_WTWT", "Eye M430v2 WT WT (Sep08) RMA **" ], [ + "279", "Eye_M2_0908_R_WT", "Eye M430v2 WT Tyrp1 (Sep08) RMA **" ], [ - "Eye_M2_0908_R_MT", - "Eye M430v2 Mutant Tyrp1 (Sep08) RMA **" - ], - [ + "400", "DBA2J-ONH-1212", "Howell et al. 2011, DBA/2J Glaucoma Optic Nerve Head M430 2.0 (Dec12) RMA" ], [ + "360", "BXD_GLA_0911", "Howell et al. 2011, DBA/2J Glaucoma Retina M430 2.0 (Sep11) RMA" ] ], "Gastrointestinal mRNA": [ [ + "539", "UTHSC_GutGL_0414", "UTHSC Mouse BXD Gastrointestinal Affy MoGene 1.0 ST Gene Level (Apr14) RMA **" ] @@ -1558,408 +1831,502 @@ ], "Heart mRNA": [ [ + "485", "EPFL-LISPBXDHeCD0114", "EPFL/LISP BXD CD Heart Affy Mouse Gene 2.0 ST Gene Level (Jan14) RMA **" ], [ + "486", "EPFL-LISPBXDHeHFD0114", "EPFL/LISP BXD HFD Heart Affy Mouse Gene 2.0 ST Gene Level (Jan14) RMA **" ], [ + "487", "EPFL-LISPBXDHeCDEx0114", "EPFL/LISP BXD CD Heart Affy Mouse Gene 2.0 ST Exon Level (Jan14) RMA **" ], [ + "488", "EPFL-LISPBXDHeHFDEx0114", "EPFL/LISP BXD HFD Heart Affy Mouse Gene 2.0 ST Exon Level (Jan14) RMA **" ] ], "Hematopoietic Cells mRNA": [ [ + "149", "UMCG_0907_HemaStem_ori", "UMCG Stem Cells ILM6v1.1 (Apr09) original" ], [ + "145", "UMCG_0907_HemaStem", "UMCG Stem Cells ILM6v1.1 (Apr09) transformed" ], [ + "151", "UMCG_0907_Pro_ori", "UMCG Progenitor Cells ILM6v1.1 (Apr09) original" ], [ + "147", "UMCG_0907_Pro", "UMCG Progenitor Cells ILM6v1.1 (Apr09) transformed" ], [ + "150", "UMCG_0907_Eryth_ori", "UMCG Erythroid Cells ILM6v1.1 (Apr09) original" ], [ + "146", "UMCG_0907_Eryth", "UMCG Erythroid Cells ILM6v1.1 (Apr09) transformed" ], [ + "148", "UMCG_0907_Myeloid_ori", "UMCG Myeloid Cells ILM6v1.1 (Apr09) original" ], [ + "144", "UMCG_0907_Myeloid", "UMCG Myeloid Cells ILM6v1.1 (Apr09) transformed" ], [ + "7", "HC_U_0304_R", "GNF Stem Cells U74Av2 (Mar04) RMA" ] ], "Hippocampus mRNA": [ [ + "112", "HC_M2_0606_P", "Hippocampus Consortium M430v2 (Jun06) PDNN" ], [ + "111", "HC_M2_0606_M", "Hippocampus Consortium M430v2 (Jun06) MAS5" ], [ + "110", "HC_M2_0606_R", "Hippocampus Consortium M430v2 (Jun06) RMA" ], [ + "291", "UT_ILM_BXD_hipp_5T_1112", "UTHSC Hippocampus Illumina v6.1 All Combined (Nov12) RankInv" ], [ + "292", "UT_ILM_BXD_hipp_NON_1112", "UTHSC Hippocampus Illumina v6.1 NON (Nov12) RankInv" ], [ + "293", "UT_ILM_BXD_hipp_NOS_1112", "UTHSC Hippocampus Illumina v6.1 NOS (Nov12) RankInv" ], [ + "294", "UT_ILM_BXD_hipp_NOE_1112", "UTHSC Hippocampus Illumina v6.1 NOE (Nov12) RankInv" ], [ + "295", "UT_ILM_BXD_hipp_RSS_1112", "UTHSC Hippocampus Illumina v6.1 RSS (Nov12) RankInv" ], [ - "UT_ILM_BXD_hipp_RSE_1112", - "UTHSC Hippocampus Illumina v6.1 RSE (Nov12) RankInv" - ], - [ + "206", "UMUTAffyExon_0209_RMA", "UMUTAffy Hippocampus Exon (Feb09) RMA" ], [ + "296", + "UT_ILM_BXD_hipp_RSE_1112", + "UTHSC Hippocampus Illumina v6.1 RSE (Nov12) RankInv" + ], + [ + "242", "UT_ILM_BXD_hipp_NON_0909", "UTHSC Hippocampus Illumina v6.1 NON (Sep09) RankInv" ], [ + "243", "UT_ILM_BXD_hipp_NOS_0909", "UTHSC Hippocampus Illumina v6.1 NOS (Sep09) RankInv" ], [ + "246", "UT_ILM_BXD_hipp_NOE_0909", "UTHSC Hippocampus Illumina v6.1 NOE (Sep09) RankInv" ], [ + "244", "UT_ILM_BXD_hipp_RSS_0909", "UTHSC Hippocampus Illumina v6.1 RSS (Sep09) RankInv" ], [ + "245", "UT_ILM_BXD_hipp_RSE_0909", "UTHSC Hippocampus Illumina v6.1 RSE (Sep09) RankInv" ], [ + "393", "UTHSC_BXD_HArev3_0912", "UTHSC BXD Aged Hippocampus rev3 Affy Mouse Gene 1.0 ST (Sep12) RMA **" ], [ + "392", "UTHSC_BXD_H_0912", "UTHSC BXD Aged Hippocampus Affy Mouse Gene 1.0 ST (Sep12) RMA Exon Level **" ] ], "Hippocampus microRNA": [ [ + "491", "UTHSC_BXD_Hip_miRNASeq0214", "UTHSC BXD Hippocampus Ion Torrent microRNA (Feb14) RPKM **" ] ], "Hypothalamus mRNA": [ [ + "281", "INIA_Hyp_RMA_1110", "INIA Hypothalamus Affy MoGene 1.0 ST (Nov10)" ], [ + "318", "INIA_Hyp_M_RMA_1110", "INIA Hypothalamus Affy MoGene 1.0 ST (Nov10) Male" ], [ + "317", "INIA_Hyp_F_RMA_1110", "INIA Hypothalamus Affy MoGene 1.0 ST (Nov10) Female" ], [ + "459", "INIA_Hyp_PCA_0813_v4", "INIA Hypothalamus Affy MoGene 1.0 ST (Nov10) PCA Test v080913" ], [ + "458", "INIA_Hyp_PCA_0813_v3", "INIA Hypothalamus Affy MoGene 1.0 ST (Nov10) PCA Test v080813" ], [ + "457", "INIA_Hyp_PCA_0813_v2", "INIA Hypothalamus Affy MoGene 1.0 ST (Nov10) PCA Test v080513" ], [ + "456", "INIA_Hyp_PCA_0813", "INIA Hypothalamus Affy MoGene 1.0 ST (Nov10) PCA Test v080213" ], [ + "159", "INIA_Hyp_RMA_Ex-1110", "INIA Hypothalamus Exon Affy MoGene 1.0 ST (Nov10)" ] ], "Kidney mRNA": [ [ + "240", "MA_M2M_0706_R", "Mouse kidney M430v2 Male (Aug06) RMA" ], [ + "239", "MA_M2F_0706_R", "Mouse kidney M430v2 Female (Aug06) RMA" ], [ + "118", "MA_M2_0806_R", "Mouse kidney M430v2 Sex Balanced (Aug06) RMA" ], [ + "117", "MA_M2_0806_P", "Mouse Kidney M430v2 Sex Balanced (Aug06) PDNN" ], [ - "MA_M2_0706_R", - "Mouse Kidney M430v2 (Jul06) RMA" - ], - [ + "116", "MA_M2_0706_P", "Mouse Kidney M430v2 (Jul06) PDNN" + ], + [ + "115", + "MA_M2_0706_R", + "Mouse Kidney M430v2 (Jul06) RMA" ] ], "Leucocytes mRNA": [ [ + "218", "Illum_BXD_PBL_1108", "UWA Illumina PBL (Nov08) RSN **" ] ], "Liver Metabolome": [ [ + "474", "EPFL-LISP_LivPMetHFD1213", "EPFL/LISP BXD Liver Polar Metabolites HFD (Jun14) **" ], [ + "475", "EPFL-LISP_LivPMetCD1213", "EPFL/LISP BXD Liver Polar Metabolites CD (Jun14) **" ] ], "Liver Proteome": [ [ - "EPFLETHZBXDprotCD0514", - "EPFL/ETHZ BXD Liver, Soluble Proteins CD (May14) SWATH **" - ], - [ + "541", "EPFLETHZBXDprotHFD0514", "EPFL/ETHZ BXD Liver, Soluble Proteins HFD (May14) SWATH **" ], [ + "540", + "EPFLETHZBXDprotCD0514", + "EPFL/ETHZ BXD Liver, Soluble Proteins CD (May14) SWATH **" + ], + [ + "489", "EPFLBXDprotHFDRPN0214", "EPFL/LISP BXD Liver, Soluble Proteins HFD (Feb14) SRM **" ], [ + "490", "EPFLBXDprotCDRPN0214", "EPFL/LISP BXD Liver, Soluble Proteins CD (Feb14) SRM **" ] ], "Liver mRNA": [ [ + "373", "GSE16780_UCLA_ML0911", "GSE16780 UCLA Hybrid MDP Liver Affy HT M430A (Sep11) RMA" ], [ + "325", "SUH_Liv_RMA_0611", "SUH BXD Liver CCl4-treated Affy Mouse Gene 1.0 ST (Jun11) RMA" ], [ + "430", "EPFLMouseLiverRMA0413", "EPFL/LISP BXD CD+HFD Liver Affy Mouse Gene 1.0 ST (Apr13) RMA" ], [ + "431", "EPFLMouseLiverHFDRMA0413", "EPFL/LISP BXD HFD Liver Affy Mouse Gene 1.0 ST (Apr13) RMA" ], [ + "432", "EPFLMouseLiverCDRMA0413", "EPFL/LISP BXD CD Liver Affy Mouse Gene 1.0 ST (Apr13) RMA" ], [ + "433", "EPFLMouseLiverBothExRMA0413", "EPFL/LISP BXD CD+HFD Liver Affy Mouse Gene 1.0 ST (Apr13) RMA Exon Level **" ], [ + "256", "GenEx_BXD_liverEt_M5_0912", "GenEx BXD EtOH Liver Affy M430 2.0 (Sep12) MAS5 Both Sexes **" ], [ + "257", "GenEx_BXD_liverEt_M5M_0912", "GenEx BXD EtOH Liver Affy M430 2.0 (Sep12) MAS5 Males **" ], [ + "258", "GenEx_BXD_liverEt_M5F_0912", "GenEx BXD EtOH Liver Affy M430 2.0 (Sep12) MAS5 Females **" ], [ + "307", "GenEx_BXD_liverEt_RMA_0211", "GenEx BXD EtOH Liver Affy M430 2.0 (Feb11) RMA Both Sexes **" ], [ + "308", "GenEx_BXD_liverEt_RMA_M_0211", "GenEx BXD EtOH Liver Affy M430 2.0 (Feb11) RMA Males **" ], [ + "309", "GenEx_BXD_liverEt_RMA_F_0211", "GenEx BXD EtOH Liver Affy M430 2.0 (Feb11) RMA Females **" ], [ + "310", "GenEx_BXD_liverSal_RMA_0211", "GenEx BXD Sal Liver Affy M430 2.0 (Feb11) RMA Both Sexes **" ], [ + "311", "GenEx_BXD_liverSal_RMA_M_0211", "GenEx BXD Sal Liver Affy M430 2.0 (Feb11) RMA Males **" ], [ + "312", "GenEx_BXD_liverSal_RMA_F_0211", "GenEx BXD Sal Liver Affy M430 2.0 (Feb11) RMA Females **" ] ], "Lung mRNA": [ [ + "160", "HZI_0408_R", "HZI Lung M430v2 (Apr08) RMA" ], [ + "161", "HZI_0408_M", "HZI Lung M430v2 (Apr08) MAS5" ], [ + "468", "HZI_PR8M-F_1113", "HZI PR8M-Infected Lungs Females RNAseq (Nov13) RPKM **" ], [ + "387", "HZI_PR8M_Q_0612", "HZI PR8M-Infected Lungs Agilent4x44 (Apr12) Quantile Females **" ], [ + "424", "HZI_LTCF_0313", "HZI Lung Time Course Flu PR8M (Mar13) Schughart **" ] ], "Midbrain mRNA": [ [ + "381", "VUBXDMouseMidBrainQ0512", "VU BXD Midbrain Agilent SurePrint G3 Mouse GE (May12) Quantile" ] ], "Muscle Metabolome": [ [ + "477", "EPFL-LISP_MusPMetHFD1213", "EPFL/LISP BXD Muscle Polar Metabolites HFD (Jun14) **" ], [ + "478", "EPFL-LISP_MusPMetCD1213", "EPFL/LISP BXD Muscle Polar Metabolites CD (Jun14) **" ] ], "Muscle mRNA": [ [ + "395", "EPFLMouseMuscleRMA_Ex1112", "EPFL/LISP BXD CD+HFD Muscle Affy Mouse Gene 1.0 ST (Nov12) RMA Exon Level" ], [ + "396", "EPFLMouseMuscleHFDRMAEx1112", "EPFL/LISP BXD HFD Muscle Affy Mouse Gene 1.0 ST (Nov12) RMA Exon Level" ], [ + "397", "EPFLMouseMuscleCDRMAEx1112", "EPFL/LISP BXD CD Muscle Affy Mouse Gene 1.0 ST (Nov12) RMA Exon Level" ], [ + "378", "EPFLMouseMuscleRMA1211", "EPFL/LISP BXD CD+HFD Muscle Affy Mouse Gene 1.0 ST (Dec11) RMA" ], [ + "380", "EPFLMouseMuscleHFDRMA1211", "EPFL/LISP BXD HFD Muscle Affy Mouse Gene 1.0 ST (Dec11) RMA" ], [ + "379", "EPFLMouseMuscleCDRMA1211", "EPFL/LISP BXD CD Muscle Affy Mouse Gene 1.0 ST (Dec11) RMA" ] ], "Neocortex mRNA": [ [ - "DevNeocortex_ILM6.2P3RInv_1111", - "BIDMC/UTHSC Dev Neocortex P3 ILMv6.2 (Nov11) RankInv" - ], - [ + "375", "DevNeocortex_ILM6.2P14RInv_1111", "BIDMC/UTHSC Dev Neocortex P14 ILMv6.2 (Nov11) RankInv" ], [ + "374", + "DevNeocortex_ILM6.2P3RInv_1111", + "BIDMC/UTHSC Dev Neocortex P3 ILMv6.2 (Nov11) RankInv" + ], + [ + "284", "HQFNeoc_1210v2_RankInv", "HQF BXD Neocortex ILM6v1.1 (Dec10v2) RankInv" ], [ + "282", "HQFNeoc_1210_RankInv", "HQF BXD Neocortex ILM6v1.1 (Dec10) RankInv" ], [ + "157", "HQFNeoc_0208_RankInv", "HQF BXD Neocortex ILM6v1.1 (Feb08) RankInv" ], [ - "DevNeocortex_ILM6.2P14RInv_1110", - "BIDMC/UTHSC Dev Neocortex P14 ILMv6.2 (Nov10) RankInv" - ], - [ + "274", "DevNeocortex_ILM6.2P3RInv_1110", "BIDMC/UTHSC Dev Neocortex P3 ILMv6.2 (Nov10) RankInv" + ], + [ + "275", + "DevNeocortex_ILM6.2P14RInv_1110", + "BIDMC/UTHSC Dev Neocortex P14 ILMv6.2 (Nov10) RankInv" ] ], "Nucleus Accumbens mRNA": [ [ + "156", "VCUSalo_1007_R", "VCU BXD NAc Sal M430 2.0 (Oct07) RMA" ], [ + "155", "VCUEtOH_1007_R", "VCU BXD NAc EtOH M430 2.0 (Oct07) RMA **" ], [ + "154", "VCUSal_1007_R", "VCU BXD NAc EtOH vs Sal M430 2.0 (Oct07) Sscore **" ], [ + "409", "VCU_NAc_Air_0113_R", "VCU BXD NAc CIE Air M430 2.0 (Jan13) RMA **" ], [ + "408", "VCU_NAc_Et_0113_R", "VCU BXD NAc CIE EtOH M430 2.0 (Jan13) RMA **" ], [ + "407", "VCU_NAc_AvE_0113_Ss", "VCU BXD NAc EtOH vs CIE Air M430 2.0 (Jan13) Sscore **" ] @@ -1972,246 +2339,301 @@ ], "Pituitary Gland mRNA": [ [ + "389", "INIA_PG_RMA_0612", "INIA Pituitary Affy MoGene 1.0ST (Jun12) RMA" ], [ + "427", "INIA_Pituitary_RMA_F_0612", "INIA Pituitary Affy MoGene 1.0ST (Jun12) RMA Females" ], [ + "428", "INIA_Pituitary_RMA_M_0612", "INIA Pituitary Affy MoGene 1.0ST (Jun12) RMA Males" ], [ + "335", "INIA_PG_RMA_Ex_0612", "INIA Pituitary Affy MoGene 1.0ST (Jun12) RMA Exon Level" ] ], "Popliteal Lymph Node mRNA": [ [ + "390", "STJ_PLN_0912", "St Jude BXD Popliteal Lymph Node Affy HT MG-430 PM (Sep12) RMA **" ] ], "Prefrontal Cortex mRNA": [ [ + "135", "VCUSal_1206_R", "VCU BXD PFC Sal M430 2.0 (Dec06) RMA" ], [ + "136", "VCUEtOH_1206_R", "VCU BXD PFC EtOH M430 2.0 (Dec06) RMA" ], [ + "137", "VCUSal_1006_R", "VCU BXD PFC Et vs Sal M430 2.0 (Dec06) Sscore" ], [ + "299", "VCU_PF_AvE_0111_Ss", "VCU BXD PFC EtOH vs CIE Air M430 2.0 (Jan11) Sscore **" ], [ + "300", "VCU_PF_Et_0111_R", "VCU BXD PFC CIE EtOH M430 2.0 (Jan11) RMA **" ], [ + "301", "VCU_PF_Air_0111_R", "VCU BXD PFC CIE Air M430 2.0 (Jan11) RMA **" ] ], "Retina mRNA": [ [ + "302", "G2NEI_ILM_Retina_BXD_RI0410", "Normal HEI Retina (April 2010) RankInv" ], [ + "267", "Illum_Retina_BXD_RankInv0410", "Full HEI Retina (April 2010) RankInv" ], [ + "385", "ONCRetILM6_0412", "ONC HEI Retina (April 2012) RankInv" ], [ - "DoDTATRCRetExMoGene2_1313", - "DoD TATRC Retina Affy MoGene 2.0 ST (Dec13) RMA Exon Level" - ], - [ + "471", "DoDTATRCRetMoGene2_1313", "DoD TATRC Retina Affy MoGene 2.0 ST (Dec13) RMA" ], [ + "472", + "DoDTATRCRetExMoGene2_1313", + "DoD TATRC Retina Affy MoGene 2.0 ST (Dec13) RMA Exon Level" + ], + [ + "434", "ONCRetMoGene2_0413", "DoD TATRC Retina Affy MoGene 2.0 ST (Oct13) RMA **" ], [ + "435", "ONCRetExMoGene2_0413", "DoD TATRC Retina Affy MoGene 2.0 ST (Oct13) RMA Exon Level **" ], [ + "479", "DoDTATRCRetBLMoGene2_1213", "DoD TATRC Retina Blast Affy MoGene 2.0 ST (Dec13) RMA **" ], [ + "480", "DoDTATRCRetBLExMoGene2_1213", "DoD TATRC Retina Blast Affy MoGene 2.0 ST (Dec13) RMA Exon Level **" ], [ + "386", "B6D2ONCILM_0412", "B6D2 ONC Retina (April 2012) RankInv **" ], [ - "G2HEIONCRetILM6_0911", - "G2 HEI ONC Retina Illumina V6.2 (Sep11) RankInv **" - ], - [ + "371", "HEIONCvsCRetILM6_0911", "HEI ONC vs Control Retina Illumina V6.2 (Sep11) RankInv **" + ], + [ + "372", + "G2HEIONCRetILM6_0911", + "G2 HEI ONC Retina Illumina V6.2 (Sep11) RankInv **" ] ], "Spleen mRNA": [ [ + "283", "UTHSC_SPL_RMA_1210", "UTHSC Affy MoGene 1.0 ST Spleen (Dec10) RMA" ], [ + "286", "UTHSC_SPL_RMA_1210M", "UTHSC Affy MoGene 1.0 ST Spleen (Dec10) RMA Males" ], [ + "287", "UTHSC_SPL_RMA_1210F", "UTHSC Affy MoGene 1.0 ST Spleen (Dec10) RMA Females" ], [ + "429", "UTHSC_SPL_RMAEx_1210", "UTHSC Affy MoGene 1.0 ST Spleen (Dec10) RMA Exon Level" ], [ + "271", "UTHSC_SPL_RMA_1010", "UTHSC Affy MoGene 1.0 ST Spleen (Oct10) RMA" ], [ + "260", "UTK_BXDSpl_VST_0110", "UTK Spleen ILM6.1 (Jan10) VST" ], [ + "227", "IoP_SPL_RMA_0509", "IoP Affy MOE 430v2 Spleen (May09) RMA" ], [ + "216", "Illum_BXD_Spl_1108", "UWA Illumina Spleen (Nov08) RSN **" ] ], "Striatum mRNA": [ [ + "399", "Striatum_Exon_1212", "HQF Striatum Affy Mouse Exon 1.0ST Gene Level (Dec09) RMA" ], [ + "163", "Striatum_Exon_0209", "HQF Striatum Affy Mouse Exon 1.0ST Exon Level (Dec09) RMA" ], [ + "285", "UTHSC_Striatum_RankInv_1210", "HQF BXD Striatum ILM6.1 (Dec10v2) RankInv" ], [ + "298", "UTHSC_Str_RankInv_1210", "HQF BXD Striatum ILM6.1 (Dec10) RankInv" ], [ + "152", "UTHSC_1107_RankInv", "HQF BXD Striatum ILM6.1 (Nov07) RankInv" ], [ + "74", "SA_M2_0405_MC", "HBP Rosen Striatum M430V2 (Apr05) MAS5 Clean" ], [ + "69", "SA_M2_0405_RC", "HBP Rosen Striatum M430V2 (Apr05) RMA Clean" ], [ + "68", "SA_M2_0405_PC", "HBP Rosen Striatum M430V2 (Apr05) PDNN Clean" ], [ + "67", "SA_M2_0405_SS", "HBP Rosen Striatum M430V2 (Apr05) SScore" ], [ + "66", "SA_M2_0405_RR", "HBP Rosen Striatum M430V2 (Apr05) RMA Orig" ], [ + "376", "DevStriatum_ILM6.2P3RInv_1111", "BIDMC/UTHSC Dev Striatum P3 ILMv6.2 (Nov11) RankInv **" ], [ + "377", "DevStriatum_ILM6.2P14RInv_1111", "BIDMC/UTHSC Dev Striatum P14 ILMv6.2 (Nov11) RankInv **" ], [ - "DevStriatum_ILM6.2P3RInv_1110", - "BIDMC/UTHSC Dev Striatum P3 ILMv6.2 (Nov10) RankInv **" - ], - [ + "277", "DevStriatum_ILM6.2P14RInv_1110", "BIDMC/UTHSC Dev Striatum P14 ILMv6.2 (Nov10) RankInv **" + ], + [ + "276", + "DevStriatum_ILM6.2P3RInv_1110", + "BIDMC/UTHSC Dev Striatum P3 ILMv6.2 (Nov10) RankInv **" ] ], "T Cell (helper) mRNA": [ [ + "319", "RTHC_0211_R", "HZI Thelp M430v2 (Feb11) RMA" ] ], "T Cell (regulatory) mRNA": [ [ + "122", "RTC_1106_R", "HZI Treg M430v2 (Feb11) RMA" ] ], "Thymus mRNA": [ [ + "217", "Illum_BXD_Thy_1108", "UWA Illumina Thymus (Nov08) RSN **" ] ], "Ventral Tegmental Area mRNA": [ [ + "229", + "VCUEtOH_0609_R", + "VCU BXD VTA EtOH M430 2.0 (Jun09) RMA **" + ], + [ + "228", "VCUSal_0609_R", "VCU BXD VTA Sal M430 2.0 (Jun09) RMA **" ], [ + "230", "VCUEtvsSal_0609_R", "VCU BXD VTA Et vs Sal M430 2.0 (Jun09) Sscore **" - ], - [ - "VCUEtOH_0609_R", - "VCU BXD VTA EtOH M430 2.0 (Jun09) RMA **" ] ] }, "BXH": { "Bone Femur mRNA": [ [ + "412", "UCLA_BXH_Femur_0113_RSN", "UCLA GSE27483 BXH Bone Femur ILM Mouse WG-6 v1, v1.1 (Jan13) RSN" ] ], "Cartilage mRNA": [ [ + "209", "UCLA_BXHBXD_CARTILAGE_V2", "UCLA BXH and BXD Cartilage v2" ], [ + "205", "UCLA_BXHBXD_CARTILAGE", "UCLA BXH and BXD Cartilage" ], [ + "179", "UCLA_BXH_CARTILAGE", "UCLA BXH Cartilage" ] @@ -2224,6 +2646,7 @@ ], "Liver mRNA": [ [ + "353", "GSE16780BXH_UCLA_ML0911", "GSE16780 UCLA Mouse BXH Liver Affy HT M430A (Sep11) RMA" ] @@ -2252,28 +2675,34 @@ "CTB6F2": { "Adipose mRNA": [ [ + "170", "UCLA_CTB6B6CTF2_ADIPOSE_2005", "UCLA CTB6/B6CTF2 Adipose (2005) mlratio" ], [ + "189", "UCLA_CTB6B6CTF2_ADIPOSE_FEMALE", "UCLA CTB6B6CTF2 Adipose Female mlratio **" ], [ + "188", "UCLA_CTB6B6CTF2_ADIPOSE_MALE", "UCLA CTB6B6CTF2 Adipose Male mlratio **" ] ], "Brain mRNA": [ [ + "171", "UCLA_CTB6B6CTF2_BRAIN_2005", "UCLA CTB6/B6CTF2 Brain (2005) mlratio" ], [ + "190", "UCLA_CTB6B6CTF2_BRAIN_MALE", "UCLA CTB6/B6CTF2 Brain Males (2005) mlratio" ], [ + "191", "UCLA_CTB6B6CTF2_BRAIN_FEMALE", "UCLA CTB6/B6CTF2 Brain Females (2005) mlratio" ] @@ -2286,28 +2715,34 @@ ], "Liver mRNA": [ [ + "172", "UCLA_CTB6B6CTF2_LIVER_2005", "UCLA CTB6/B6CTF2 Liver (2005) mlratio" ], [ + "193", "UCLA_CTB6B6CTF2_LIVER_FEMALE", "UCLA CTB6B6CTF2 Liver Female mlratio **" ], [ + "192", "UCLA_CTB6B6CTF2_LIVER_MALE", "UCLA CTB6B6CTF2 Liver Male mlratio **" ] ], "Muscle mRNA": [ [ + "173", "UCLA_CTB6B6CTF2_MUSCLE_2005", "UCLA CTB6/B6CTF2 Muscle (2005) mlratio" ], [ + "195", "UCLA_CTB6B6CTF2_MUSCLE_FEMALE", "UCLA CTB6B6CTF2 Muscle Female mlratio **" ], [ + "194", "UCLA_CTB6B6CTF2_MUSCLE_MALE", "UCLA CTB6B6CTF2 Muscle Male mlratio **" ] @@ -2328,12 +2763,14 @@ ], "Hippocampus mRNA": [ [ - "HC_M2CB_1205_P", - "Hippocampus Consortium M430v2 CXB (Dec05) PDNN" - ], - [ + "100", "HC_M2CB_1205_R", "Hippocampus Consortium M430v2 CXB (Dec05) RMA" + ], + [ + "99", + "HC_M2CB_1205_P", + "Hippocampus Consortium M430v2 CXB (Dec05) PDNN" ] ], "Phenotypes": [ @@ -2344,6 +2781,7 @@ ], "Spleen mRNA": [ [ + "153", "STSPL_1107_R", "Stuart Spleen M430v2 (Nov07) RMA" ] @@ -2352,18 +2790,21 @@ "HS": { "Hippocampus mRNA": [ [ + "268", "OXUKHS_ILMHipp_RI0510", "OX UK HS ILM6v1.1 Hippocampus (May 2010) RankInv" ] ], "Liver mRNA": [ [ + "269", "OXUKHS_ILMLiver_RI0510", "OX UK HS ILM6v1.1 Liver (May 2010) RankInv" ] ], "Lung mRNA": [ [ + "270", "OXUKHS_ILMLung_RI0510", "OX UK HS ILM6v1.1 Lung (May 2010) RankInv" ] @@ -2378,6 +2819,7 @@ "HS-CC": { "Striatum mRNA": [ [ + "304", "OHSU_HS-CC_ILMStr_0211", "OHSU HS-CC Striatum ILM6v1 (Feb11) RankInv" ] @@ -2392,52 +2834,64 @@ ], "Hippocampus mRNA": [ [ + "143", "Illum_LXS_Hipp_loess0807", "Hippocampus Illumina (Aug07) LOESS" ], [ + "142", "Illum_LXS_Hipp_loess_nb0807", "Hippocampus Illumina (Aug07) LOESS_NB" ], [ + "141", "Illum_LXS_Hipp_quant0807", "Hippocampus Illumina (Aug07) QUANT" ], [ + "140", "Illum_LXS_Hipp_quant_nb0807", "Hippocampus Illumina (Aug07) QUANT_NB" ], [ + "139", "Illum_LXS_Hipp_rsn0807", "Hippocampus Illumina (Aug07) RSN" ], [ + "138", "Illum_LXS_Hipp_rsn_nb0807", "Hippocampus Illumina (Aug07) RSN_NB" ], [ + "133", "Hipp_Illumina_RankInv_0507", "Hippocampus Illumina (May07) RankInv" ], [ + "212", + "Illum_LXS_Hipp_RSE_1008", + "Hippocampus Illumina RSE (Oct08) RankInv beta" + ], + [ + "214", "Illum_LXS_Hipp_NOE_1008", "Hippocampus Illumina NOE (Oct08) RankInv beta" ], [ + "211", "Illum_LXS_Hipp_RSS_1008", "Hippocampus Illumina RSS (Oct08) RankInv beta" ], [ + "213", "Illum_LXS_Hipp_NOS_1008", "Hippocampus Illumina NOS (Oct08) RankInv beta" ], [ + "219", "Illum_LXS_Hipp_NON_1008", "Hippocampus Illumina NON (Oct08) RankInv beta" - ], - [ - "Illum_LXS_Hipp_RSE_1008", - "Hippocampus Illumina RSE (Oct08) RankInv beta" ] ], "Phenotypes": [ @@ -2448,16 +2902,19 @@ ], "Prefrontal Cortex mRNA": [ [ + "131", + "VCUEtOH_0806_R", + "VCU LXS PFC EtOH M430A 2.0 (Aug06) RMA **" + ], + [ + "130", "VCUSal_0806_R", "VCU LXS PFC Sal M430A 2.0 (Aug06) RMA" ], [ + "132", "VCUEt_vs_Sal_0806_R", "VCU LXS PFC Et vs Sal M430A 2.0 (Aug06) Sscore **" - ], - [ - "VCUEtOH_0806_R", - "VCU LXS PFC EtOH M430A 2.0 (Aug06) RMA **" ] ] }, @@ -2478,12 +2935,14 @@ "MDP": { "Bone Femur mRNA": [ [ + "413", "UCLA_MDP_Femur_0113_RSN", "UCLA GSE27483 MDP Bone Femur ILM Mouse WG-6 v1, v1.1 (Jan13) RSN" ] ], "Dorsal Root Ganglia mRNA": [ [ + "402", "TSRI-DRG-AffyMOE430_0113-MDP", "TSRI DRG Affy Mouse Genome 430 2.0 (Jan13) RMA MDP" ] @@ -2496,32 +2955,39 @@ ], "Hippocampus mRNA": [ [ - "HC_M2_0606_MDP", - "Hippocampus Consortium M430v2 (Jun06) RMA MDP" - ], - [ + "273", "UMUTAffyExon_0209_RMA_MDP", "UMUTAffy Hippocampus Exon (Feb09) RMA MDP" + ], + [ + "272", + "HC_M2_0606_MDP", + "Hippocampus Consortium M430v2 (Jun06) RMA MDP" ] ], "Liver mRNA": [ [ + "370", "GSE16780MDP_UCLA_ML0911", "GSE16780 UCLA Mouse MDP Liver Affy HT M430A (Sep11) RMA" ], [ + "357", "JAX_CSB_L_0711", "JAX Liver Affy M430 2.0 (Jul11) MDP" ], [ + "358", "JAX_CSB_L_HF_0711", "JAX Liver HF Affy M430 2.0 (Jul11) MDP" ], [ + "359", "JAX_CSB_L_6C_0711", "JAX Liver 6C Affy M430 2.0 (Jul11) MDP" ], [ + "403", "JAX_liver_agil_MDP-0113", "Harrill-Rusyn MDP Liver Acetaminophen Tox Study (G4121A, 2009)" ] @@ -2536,6 +3002,7 @@ "NZBXFVB-N2": { "Mammary Tumors mRNA": [ [ + "225", "NCI_Mam_Tum_RMA_0409", "NCI Mammary M430v2 (Apr09) RMA" ] @@ -2558,10 +3025,12 @@ "Scripps-2013": { "Anterior Cingulate Cortex mRNA": [ [ + "450", "ScrBXDACC4G0513", "Scripps BXD ACC 4 Groups Affy Mouse Gene 1.0 ST (May13) RMA Gene Level **" ], [ + "451", "ScrBXDACC4GEx0513", "Scripps BXD ACC 4 Groups Affy Mouse Gene 1.0 ST (May13) RMA Exon Level **" ] @@ -2580,6 +3049,7 @@ "HXBBXH": { "Adrenal Gland mRNA": [ [ + "220", "HXB_Adrenal_1208", "MDC/CAS/UCL Adrenal 230A (Dec08) RMA" ] @@ -2592,42 +3062,50 @@ ], "Heart mRNA": [ [ + "221", "HXB_Heart_1208", "MDC/CAS/UCL Heart 230_V2 (Dec08) RMA" ] ], "Hippocampus mRNA": [ [ + "231", "UT_HippRatEx_RMA_0709", "UT Hippocampus Affy RaEx 1.0 Exon (Jul09) RMA" ] ], "Kidney mRNA": [ [ + "70", "KI_2A_0405_M", "MDC/CAS/ICL Kidney 230A (Apr05) MAS5" ], [ + "65", "KI_2A_0405_Rz", "MDC/CAS/ICL Kidney 230A (Apr05) RMA 2z+8" ], [ + "64", "KI_2A_0405_R", "MDC/CAS/ICL Kidney 230A (Apr05) RMA" ] ], "Liver mRNA": [ [ + "222", "HXB_Liver_1208", "MDC/CAS/UCL Liver 230v2 (Dec08) RMA" ] ], "Peritoneal Fat mRNA": [ [ + "79", "FT_2A_0805_M", "MDC/CAS/ICL Peritoneal Fat 230A (Aug05) MAS5" ], [ + "75", "FT_2A_0605_Rz", "MDC/CAS/ICL Peritoneal Fat 230A (Jun05) RMA 2z+8" ] @@ -2642,6 +3120,7 @@ "SRxSHRSPF2": { "Eye mRNA": [ [ + "226", "UIOWA_Eye_RMA_0906", "UIOWA Eye mRNA RAE230v2 (Sep06) RMA" ] diff --git a/wqflask/wqflask/static/new/javascript/dataset_select_menu.js b/wqflask/wqflask/static/new/javascript/dataset_select_menu.js index f91504be..1fe4cf75 100644 --- a/wqflask/wqflask/static/new/javascript/dataset_select_menu.js +++ b/wqflask/wqflask/static/new/javascript/dataset_select_menu.js @@ -28,6 +28,7 @@ $(function() { window.populate_group = populate_group; populate_type = function() { var group, species, type_list; + console.log("in populate type"); species = $('#species').val(); group = $('#group').val(); type_list = this.jdata.types[species][group]; @@ -37,6 +38,7 @@ $(function() { window.populate_type = populate_type; populate_dataset = function() { var dataset_list, group, species, type; + console.log("in populate dataset"); species = $('#species').val(); group = $('#group').val(); type = $('#type').val(); @@ -53,7 +55,11 @@ $(function() { _results = []; for (_i = 0, _len = items.length; _i < _len; _i++) { item = items[_i]; - _results.push(dropdown.append($("