aboutsummaryrefslogtreecommitdiff
path: root/wqflask
diff options
context:
space:
mode:
authorZachary Sloan2013-02-19 15:09:38 -0600
committerZachary Sloan2013-02-19 15:09:38 -0600
commitb4d6873f8d6327ae7cd64c80f31348728322f719 (patch)
tree28d5ead2acb19597471656b9b7015af55bb6dc50 /wqflask
parent5648a1c878686d3698c376d4167922590ba8e350 (diff)
downloadgenenetwork2-b4d6873f8d6327ae7cd64c80f31348728322f719.tar.gz
Made lines for manhattan plot proportional to chromosome lengths
Diffstat (limited to 'wqflask')
-rw-r--r--wqflask/utility/helper_functions.py6
-rwxr-xr-xwqflask/wqflask/marker_regression/marker_regression.py35
-rwxr-xr-xwqflask/wqflask/show_trait/show_trait.py2
-rw-r--r--wqflask/wqflask/static/new/javascript/marker_regression.coffee57
-rw-r--r--wqflask/wqflask/static/new/javascript/marker_regression.js43
-rw-r--r--wqflask/wqflask/views.py2
6 files changed, 97 insertions, 48 deletions
diff --git a/wqflask/utility/helper_functions.py b/wqflask/utility/helper_functions.py
index 920d9ac6..d2567b63 100644
--- a/wqflask/utility/helper_functions.py
+++ b/wqflask/utility/helper_functions.py
@@ -2,14 +2,16 @@ from __future__ import absolute_import, print_function, division
from base.trait import GeneralTrait
from base import data_set
+from base.species import TheSpecies
-def get_dataset_and_trait(self, start_vars):
+def get_species_dataset_trait(self, start_vars):
#assert type(read_genotype) == type(bool()), "Expecting boolean value for read_genotype"
self.dataset = data_set.create_dataset(start_vars['dataset'])
+ self.species = TheSpecies(dataset=self.dataset)
self.this_trait = GeneralTrait(dataset=self.dataset.name,
name=start_vars['trait_id'],
cellid=None)
#if read_genotype:
self.dataset.group.read_genotype_file()
- self.genotype = self.dataset.group.genotype \ No newline at end of file
+ self.genotype = self.dataset.group.genotype
diff --git a/wqflask/wqflask/marker_regression/marker_regression.py b/wqflask/wqflask/marker_regression/marker_regression.py
index 81bf3825..50739614 100755
--- a/wqflask/wqflask/marker_regression/marker_regression.py
+++ b/wqflask/wqflask/marker_regression/marker_regression.py
@@ -24,6 +24,7 @@ from utility import Plot, Bunch
from wqflask.interval_analyst import GeneUtil
from base.trait import GeneralTrait
from base import data_set
+from base import species
from base.templatePage import templatePage
from utility import webqtlUtil, helper_functions
from base import webqtlConfig
@@ -60,7 +61,7 @@ class MarkerRegression(object):
#print("start_vars are: ", pf(start_vars))
- helper_functions.get_dataset_and_trait(self, start_vars)
+ helper_functions.get_species_dataset_trait(self, start_vars)
self.num_perm = int(start_vars['num_perm'])
@@ -306,7 +307,14 @@ class MarkerRegression(object):
# end: common part with human data
+ chromosome_mb_lengths = {}
+ for key in self.species.chromosomes.chromosomes.keys():
+ chromosome_mb_lengths[key] = self.species.chromosomes.chromosomes[key].mb_length
+
+ print("chromosomes is:", pf(chromosome_mb_lengths))
+
self.js_data = dict(
+ chromosomes = chromosome_mb_lengths,
qtl_results = self.pure_qtl_results,
lrs_values = self.lrs_values,
)
@@ -476,25 +484,24 @@ class MarkerRegression(object):
#prep_data.PrepData(self.vals, genotype_data)
pheno_vector = np.array([float(val) for val in self.vals if val!="x"])
- print("genotypes was:", pf(trimmed_genotype_data))
- for item in trimmed_genotype_data:
- if type(item) != type(list()):
- print(" --->", type(item))
- for counter, part in enumerate(item):
- if type(part) != type(float()):
- print(" ------>", type(part), " : ", part)
- if counter % 100 == 0:
- print(" ------>", type(part))
+ #for item in trimmed_genotype_data:
+ # if type(item) != type(list()):
+ # print(" --->", type(item))
+ # for counter, part in enumerate(item):
+ # if type(part) != type(float()):
+ # print(" ------>", type(part), " : ", part)
+ # if counter % 100 == 0:
+ # print(" ------>", type(part))
genotypes = np.array(trimmed_genotype_data).T
- print("genotypes is:", pf(genotypes))
+ #print("genotypes is:", pf(genotypes))
#genotypes = np.genfromtxt(os.path.join(webqtlConfig.TMPDIR,
# self.dataset.group.name + '.snps.new')).T
- print("pheno_vector is:", pf(pheno_vector.shape))
- print("genotypes is:", pf(genotypes.shape))
+ #print("pheno_vector is:", pf(pheno_vector.shape))
+ #print("genotypes is:", pf(genotypes.shape))
kinship_matrix = lmm.calculateKinship(genotypes)
- print("kinship_matrix is:", pf(kinship_matrix))
+ #print("kinship_matrix is:", pf(kinship_matrix))
lmm_ob = lmm.LMM(pheno_vector, kinship_matrix)
lmm_ob.fit()
diff --git a/wqflask/wqflask/show_trait/show_trait.py b/wqflask/wqflask/show_trait/show_trait.py
index 33ea6e86..720515c1 100755
--- a/wqflask/wqflask/show_trait/show_trait.py
+++ b/wqflask/wqflask/show_trait/show_trait.py
@@ -38,7 +38,7 @@ class ShowTrait(object):
print("in ShowTrait, kw are:", kw)
self.trait_id = kw['trait_id']
- helper_functions.get_dataset_and_trait(self, kw)
+ helper_functions.get_species_dataset_trait(self, kw)
#self.dataset = create_dataset(kw['dataset'])
#
diff --git a/wqflask/wqflask/static/new/javascript/marker_regression.coffee b/wqflask/wqflask/static/new/javascript/marker_regression.coffee
index 41632723..6bdb3ac6 100644
--- a/wqflask/wqflask/static/new/javascript/marker_regression.coffee
+++ b/wqflask/wqflask/static/new/javascript/marker_regression.coffee
@@ -4,7 +4,9 @@ $ ->
constructor: ->
@qtl_results = js_data.qtl_results
+ @chromosomes = js_data.chromosomes
@max_chr = @get_max_chr()
+ @cumulative_chr_lengths = @get_cumulative_chr_lengths()
@plot_height = 500
@plot_width = 1000
@@ -31,9 +33,22 @@ $ ->
max_chr = chr
return max_chr
+ get_cumulative_chr_lengths: () ->
+ cumulative_chr_lengths = []
+ total_length = 0
+ for key of @chromosomes
+ this_length = @chromosomes[key]
+ cumulative_chr_lengths.push(total_length + this_length)
+ total_length += this_length
+ console.log("lengths:", cumulative_chr_lengths)
+ return cumulative_chr_lengths
+
get_coordinates: () ->
+ total_length = 0
+ chr_lengths = []
for result in js_data.qtl_results
+ chr_length = @chromosomes[result.chr]
chr = parseInt(result.chr)
if _.isNaN(chr)
if result.chr == "X"
@@ -41,9 +56,17 @@ $ ->
else if result.chr == "Y"
chr = @max_chr + 2
- @x_coords.push(((chr-1) * 200) + parseFloat(result.Mb))
+ @x_coords.push(total_length + parseFloat(result.Mb))
@y_coords.push(result.lrs_value)
@marker_names.push(result.name)
+
+ if chr_length in chr_lengths
+ continue
+ else
+ chr_lengths.push(chr_length)
+ total_length += chr_length
+
+ console.log("chr_lengths are:", @chr_lengths)
display_info: (d) ->
@@ -56,20 +79,20 @@ $ ->
.attr("width", @plot_width)
.attr("height", @plot_height)
- svg.selectAll("text")
- .data(@plot_coordinates)
- .enter()
- .append("text")
- .attr("x", (d) =>
- return (@plot_width * d[0]/@x_max)
- )
- .attr("y", (d) =>
- return @plot_height - ((0.8*@plot_height) * d[1]/@y_max)
- )
- .text((d) => d[2])
- .attr("font-family", "sans-serif")
- .attr("font-size", "12px")
- .attr("fill", "black");
+ #svg.selectAll("text")
+ # .data(@plot_coordinates)
+ # .enter()
+ # .append("text")
+ # .attr("x", (d) =>
+ # return (@plot_width * d[0]/@x_max)
+ # )
+ # .attr("y", (d) =>
+ # return @plot_height - ((0.8*@plot_height) * d[1]/@y_max)
+ # )
+ # .text((d) => d[2])
+ # .attr("font-family", "sans-serif")
+ # .attr("font-size", "12px")
+ # .attr("fill", "black");
svg.selectAll("circle")
.data(@plot_coordinates)
@@ -116,7 +139,7 @@ $ ->
)
.on("mouseout", () =>
d3.select(d3.event.target).classed("d3_highlight", false)
- .attr("r", 2)
+ .attr("r", 2)
.attr("fill", "black")
)
.attr("title", "foobar")
@@ -132,7 +155,7 @@ $ ->
.range([0, @plot_height])
svg.selectAll("line")
- .data(x.ticks(@max_chr))
+ .data(@cumulative_chr_lengths)
.enter()
.append("line")
.attr("x1", x)
diff --git a/wqflask/wqflask/static/new/javascript/marker_regression.js b/wqflask/wqflask/static/new/javascript/marker_regression.js
index 68e04034..19fec21e 100644
--- a/wqflask/wqflask/static/new/javascript/marker_regression.js
+++ b/wqflask/wqflask/static/new/javascript/marker_regression.js
@@ -1,5 +1,6 @@
// Generated by CoffeeScript 1.3.3
(function() {
+ var __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
$(function() {
var Manhattan_Plot;
@@ -7,7 +8,9 @@
function Manhattan_Plot() {
this.qtl_results = js_data.qtl_results;
+ this.chromosomes = js_data.chromosomes;
this.max_chr = this.get_max_chr();
+ this.cumulative_chr_lengths = this.get_cumulative_chr_lengths();
this.plot_height = 500;
this.plot_width = 1000;
this.x_coords = [];
@@ -37,12 +40,27 @@
return max_chr;
};
+ Manhattan_Plot.prototype.get_cumulative_chr_lengths = function() {
+ var cumulative_chr_lengths, key, this_length, total_length;
+ cumulative_chr_lengths = [];
+ total_length = 0;
+ for (key in this.chromosomes) {
+ this_length = this.chromosomes[key];
+ cumulative_chr_lengths.push(total_length + this_length);
+ total_length += this_length;
+ }
+ console.log("lengths:", cumulative_chr_lengths);
+ return cumulative_chr_lengths;
+ };
+
Manhattan_Plot.prototype.get_coordinates = function() {
- var chr, result, _i, _len, _ref, _results;
+ var chr, chr_length, chr_lengths, result, total_length, _i, _len, _ref;
+ total_length = 0;
+ chr_lengths = [];
_ref = js_data.qtl_results;
- _results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
result = _ref[_i];
+ chr_length = this.chromosomes[result.chr];
chr = parseInt(result.chr);
if (_.isNaN(chr)) {
if (result.chr === "X") {
@@ -51,11 +69,17 @@
chr = this.max_chr + 2;
}
}
- this.x_coords.push(((chr - 1) * 200) + parseFloat(result.Mb));
+ this.x_coords.push(total_length + parseFloat(result.Mb));
this.y_coords.push(result.lrs_value);
- _results.push(this.marker_names.push(result.name));
+ this.marker_names.push(result.name);
+ if (__indexOf.call(chr_lengths, chr_length) >= 0) {
+ continue;
+ } else {
+ chr_lengths.push(chr_length);
+ total_length += chr_length;
+ }
}
- return _results;
+ return console.log("chr_lengths are:", this.chr_lengths);
};
Manhattan_Plot.prototype.display_info = function(d) {
@@ -66,13 +90,6 @@
var svg, x, y,
_this = this;
svg = d3.select("#manhattan_plots").append("svg").style('border', '2px solid black').attr("width", this.plot_width).attr("height", this.plot_height);
- svg.selectAll("text").data(this.plot_coordinates).enter().append("text").attr("x", function(d) {
- return _this.plot_width * d[0] / _this.x_max;
- }).attr("y", function(d) {
- return _this.plot_height - ((0.8 * _this.plot_height) * d[1] / _this.y_max);
- }).text(function(d) {
- return d[2];
- }).attr("font-family", "sans-serif").attr("font-size", "12px").attr("fill", "black");
svg.selectAll("circle").data(this.plot_coordinates).enter().append("circle").attr("cx", function(d) {
return _this.plot_width * d[0] / _this.x_max;
}).attr("cy", function(d) {
@@ -84,7 +101,7 @@
}).attr("title", "foobar");
x = d3.scale.linear().domain([0, this.x_max]).range([0, this.plot_width]);
y = d3.scale.linear().domain([0, this.y_max]).range([0, this.plot_height]);
- return svg.selectAll("line").data(x.ticks(this.max_chr)).enter().append("line").attr("x1", x).attr("x2", x).attr("y1", 0).attr("y2", this.plot_height).style("stroke", "#ccc");
+ return svg.selectAll("line").data(this.cumulative_chr_lengths).enter().append("line").attr("x1", x).attr("x2", x).attr("y1", 0).attr("y2", this.plot_height).style("stroke", "#ccc");
};
return Manhattan_Plot;
diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py
index 81777742..5f2df8a4 100644
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -154,7 +154,7 @@ def marker_regression_page():
template_vars.js_data = json.dumps(template_vars.js_data,
default=json_default_handler,
indent=" ")
- print("[dub] js_data after dump:", template_vars.js_data)
+ #print("[dub] js_data after dump:", template_vars.js_data)
#print("marker_regression template_vars:", pf(template_vars.__dict__))
return render_template("marker_regression.html", **template_vars.__dict__)