aboutsummaryrefslogtreecommitdiff
path: root/wqflask
diff options
context:
space:
mode:
authorZachary Sloan2014-05-19 22:03:31 +0000
committerZachary Sloan2014-05-19 22:03:31 +0000
commit515662ecabd5d3a90eef6987aa5f8d4dbe63611f (patch)
tree60fd5f393190dad650e527f8cdff365e313039c9 /wqflask
parent759a7a23b0ea848b8c8ffe2804841322254d8696 (diff)
downloadgenenetwork2-515662ecabd5d3a90eef6987aa5f8d4dbe63611f.tar.gz
Fixed sorting on the show trait page
Added/improved the x and y axis on the bar graph and histogram GEMMA working but still really slow
Diffstat (limited to 'wqflask')
-rwxr-xr-xwqflask/wqflask/marker_regression/marker_regression.py6
-rwxr-xr-xwqflask/wqflask/show_trait/show_trait.py5
-rwxr-xr-xwqflask/wqflask/static/new/css/bar_chart.css4
-rwxr-xr-xwqflask/wqflask/static/new/javascript/histogram.coffee38
-rwxr-xr-xwqflask/wqflask/static/new/javascript/histogram.js16
-rwxr-xr-xwqflask/wqflask/static/new/javascript/show_trait.coffee1
-rwxr-xr-xwqflask/wqflask/static/new/javascript/show_trait_mapping_tools.coffee35
-rwxr-xr-xwqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js36
-rwxr-xr-xwqflask/wqflask/templates/show_trait.html126
-rwxr-xr-xwqflask/wqflask/templates/show_trait_mapping_tools.html65
10 files changed, 270 insertions, 62 deletions
diff --git a/wqflask/wqflask/marker_regression/marker_regression.py b/wqflask/wqflask/marker_regression/marker_regression.py
index 54cc9006..c220d2c9 100755
--- a/wqflask/wqflask/marker_regression/marker_regression.py
+++ b/wqflask/wqflask/marker_regression/marker_regression.py
@@ -58,6 +58,8 @@ class MarkerRegression(object):
if self.mapping_method == "gemma":
qtl_results = self.run_gemma()
+ elif self.mapping_method == "plink":
+ qtl_results = self.run_plink()
elif self.mapping_method == "pylmm":
#self.qtl_results = self.gen_data(tempdata)
qtl_results = self.gen_data(str(temp_uuid))
@@ -151,6 +153,10 @@ class MarkerRegression(object):
#
#
+ def run_plink(self):
+
+ os.chdir("/home/zas1024/plink")
+
#def gen_data(self, tempdata):
def gen_data(self, temp_uuid):
"""Generates p-values for each marker"""
diff --git a/wqflask/wqflask/show_trait/show_trait.py b/wqflask/wqflask/show_trait/show_trait.py
index db8d4f1a..6f0ff44b 100755
--- a/wqflask/wqflask/show_trait/show_trait.py
+++ b/wqflask/wqflask/show_trait/show_trait.py
@@ -98,7 +98,10 @@ class ShowTrait(object):
hddn['trait_id'] = self.trait_id
hddn['dataset'] = self.dataset.name
hddn['method'] = "pylmm"
-
+ hddn['mapping_display_all'] = True
+ hddn['suggestive'] = 0
+ hddn['maf'] = 0.01
+
# We'll need access to this_trait and hddn in the Jinja2 Template, so we put it inside self
self.hddn = hddn
diff --git a/wqflask/wqflask/static/new/css/bar_chart.css b/wqflask/wqflask/static/new/css/bar_chart.css
index c8e081f9..3e6e7bd6 100755
--- a/wqflask/wqflask/static/new/css/bar_chart.css
+++ b/wqflask/wqflask/static/new/css/bar_chart.css
@@ -9,7 +9,7 @@
fill: steelblue;
shape-rendering: crispEdges;
}
-
+/*
.x.axis path {
display: none;
-} \ No newline at end of file
+}*/ \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/histogram.coffee b/wqflask/wqflask/static/new/javascript/histogram.coffee
index 6c1e65e9..98f89ac6 100755
--- a/wqflask/wqflask/static/new/javascript/histogram.coffee
+++ b/wqflask/wqflask/static/new/javascript/histogram.coffee
@@ -41,13 +41,15 @@ class Histogram
create_x_scale: () ->
console.log("min/max:", d3.min(@sample_vals) + "," + d3.max(@sample_vals))
- if (d3.min(@sample_vals) < 0)
- min_domain = d3.min(@sample_vals)
- else
- min_domain = 0
+ x0 = Math.max(-d3.min(@sample_vals), d3.max(@sample_vals))
+ #if (d3.min(@sample_vals) < 0)
+ # min_domain = d3.min(@sample_vals)
+ #else
+ # min_domain = 0
@x_scale = d3.scale.linear()
- .domain([min_domain, parseFloat(d3.max(@sample_vals))])
- .range([0, @plot_width])
+ .domain([d3.min(@sample_vals), d3.max(@sample_vals)])
+ .range([0, @plot_width])
+ .nice()
get_histogram_data: () ->
console.log("sample_vals:", @sample_vals)
@@ -62,6 +64,7 @@ class Histogram
create_graph: () ->
@add_x_axis()
+ @add_y_axis()
@add_bars()
add_x_axis: () ->
@@ -74,11 +77,32 @@ class Histogram
.attr("transform", "translate(0," + @plot_height + ")")
.call(x_axis)
+ #add_y_axis: () ->
+ # y_axis = d3.svg.axis()
+ # .scale(@y_scale)
+ # .orient("left")
+ # .ticks(5)
+ #
+ # @svg.append("g")
+ # .attr("class", "y axis")
+ # #.attr("transform", "translate(0," + @plot_width + ")")
+ # .call(y_axis)
+
+
add_y_axis: () ->
- y_axis = d3.svg.axis()
+ yAxis = d3.svg.axis()
.scale(@y_scale)
.orient("left")
.ticks(5)
+
+ @svg.append("g")
+ .attr("class", "y axis")
+ .call(yAxis)
+ .append("text")
+ .attr("transform", "rotate(-90)")
+ .attr("y", 6)
+ .attr("dy", ".71em")
+ .style("text-anchor", "end")
add_bars: () ->
console.log("bar_width:", @x_scale(@histogram_data[0].dx))
diff --git a/wqflask/wqflask/static/new/javascript/histogram.js b/wqflask/wqflask/static/new/javascript/histogram.js
index 1603cb77..d8067ced 100755
--- a/wqflask/wqflask/static/new/javascript/histogram.js
+++ b/wqflask/wqflask/static/new/javascript/histogram.js
@@ -55,14 +55,10 @@
};
Histogram.prototype.create_x_scale = function() {
- var min_domain;
+ var x0;
console.log("min/max:", d3.min(this.sample_vals) + "," + d3.max(this.sample_vals));
- if (d3.min(this.sample_vals) < 0) {
- min_domain = d3.min(this.sample_vals);
- } else {
- min_domain = 0;
- }
- return this.x_scale = d3.scale.linear().domain([min_domain, parseFloat(d3.max(this.sample_vals))]).range([0, this.plot_width]);
+ x0 = Math.max(-d3.min(this.sample_vals), d3.max(this.sample_vals));
+ return this.x_scale = d3.scale.linear().domain([d3.min(this.sample_vals), d3.max(this.sample_vals)]).range([0, this.plot_width]).nice();
};
Histogram.prototype.get_histogram_data = function() {
@@ -82,6 +78,7 @@
Histogram.prototype.create_graph = function() {
this.add_x_axis();
+ this.add_y_axis();
return this.add_bars();
};
@@ -92,8 +89,9 @@
};
Histogram.prototype.add_y_axis = function() {
- var y_axis;
- return y_axis = d3.svg.axis().scale(this.y_scale).orient("left").ticks(5);
+ var yAxis;
+ yAxis = d3.svg.axis().scale(this.y_scale).orient("left").ticks(5);
+ return this.svg.append("g").attr("class", "y axis").call(yAxis).append("text").attr("transform", "rotate(-90)").attr("y", 6).attr("dy", ".71em").style("text-anchor", "end");
};
Histogram.prototype.add_bars = function() {
diff --git a/wqflask/wqflask/static/new/javascript/show_trait.coffee b/wqflask/wqflask/static/new/javascript/show_trait.coffee
index 84e465e8..a410baf3 100755
--- a/wqflask/wqflask/static/new/javascript/show_trait.coffee
+++ b/wqflask/wqflask/static/new/javascript/show_trait.coffee
@@ -204,6 +204,7 @@ $ ->
name = $.trim(name)
real_value = $(row).find('.edit_sample_value').val()
console.log("real_value:", real_value)
+
checkbox = $(row).find(".edit_sample_checkbox")
checked = $(checkbox).attr('checked')
diff --git a/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.coffee b/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.coffee
index f1024cd1..1d375686 100755
--- a/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.coffee
+++ b/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.coffee
@@ -56,6 +56,9 @@ $ ->
console.log("In interval mapping")
$("#progress_bar_container").modal()
url = "/interval_mapping"
+ $('input[name=method]').val("reaper")
+ $('input[name=mapping_display_all]').val($('input[name=display_all_reaper]'))
+ $('input[name=suggestive]').val($('input[name=suggestive_reaper]'))
form_data = $('#trait_data_form').serialize()
console.log("form_data is:", form_data)
$.ajax(
@@ -116,9 +119,41 @@ $ ->
return false
)
+ $("#plink_compute").click(() =>
+ url = "/marker_regression"
+ $('input[name=method]').val("plink")
+ $('input[name=mapping_display_all]').val($('input[name=display_all_plink]'))
+ $('input[name=suggestive]').val($('input[name=suggestive_plink]'))
+ $('input[name=maf]').val($('input[name=maf_plink]'))
+ form_data = $('#trait_data_form').serialize()
+ console.log("form_data is:", form_data)
+ $.ajax(
+ type: "POST"
+ url: url
+ data: form_data
+ error: (xhr, ajaxOptions, thrownError) =>
+ alert("Sorry, an error occurred")
+ console.log(xhr)
+ clearInterval(this.my_timer)
+ $('#progress_bar_container').modal('hide')
+ $("body").html("We got an error.")
+ success: (data) =>
+ clearInterval(this.my_timer)
+ $('#progress_bar_container').modal('hide')
+ $("body").html(data)
+ )
+ console.log("settingInterval")
+
+ this.my_timer = setInterval(get_progress, 1000)
+ return false
+ )
+
$("#gemma_compute").click(() =>
url = "/marker_regression"
$('input[name=method]').val("gemma")
+ $('input[name=mapping_display_all]').val($('input[name=display_all_gemma]'))
+ $('input[name=suggestive]').val($('input[name=suggestive_gemma]'))
+ $('input[name=maf]').val($('input[name=maf_gemma]'))
form_data = $('#trait_data_form').serialize()
console.log("form_data is:", form_data)
$.ajax(
diff --git a/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js b/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js
index a5a49ace..dbc26e3b 100755
--- a/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js
+++ b/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js
@@ -67,6 +67,9 @@
console.log("In interval mapping");
$("#progress_bar_container").modal();
url = "/interval_mapping";
+ $('input[name=method]').val("reaper");
+ $('input[name=mapping_display_all]').val($('input[name=display_all_reaper]'));
+ $('input[name=suggestive]').val($('input[name=suggestive_reaper]'));
form_data = $('#trait_data_form').serialize();
console.log("form_data is:", form_data);
$.ajax({
@@ -127,10 +130,43 @@
_this.my_timer = setInterval(get_progress, 1000);
return false;
});
+ $("#plink_compute").click(function() {
+ var form_data, url;
+ url = "/marker_regression";
+ $('input[name=method]').val("plink");
+ $('input[name=mapping_display_all]').val($('input[name=display_all_plink]'));
+ $('input[name=suggestive]').val($('input[name=suggestive_plink]'));
+ $('input[name=maf]').val($('input[name=maf_plink]'));
+ form_data = $('#trait_data_form').serialize();
+ console.log("form_data is:", form_data);
+ $.ajax({
+ type: "POST",
+ url: url,
+ data: form_data,
+ error: function(xhr, ajaxOptions, thrownError) {
+ alert("Sorry, an error occurred");
+ console.log(xhr);
+ clearInterval(_this.my_timer);
+ $('#progress_bar_container').modal('hide');
+ return $("body").html("We got an error.");
+ },
+ success: function(data) {
+ clearInterval(_this.my_timer);
+ $('#progress_bar_container').modal('hide');
+ return $("body").html(data);
+ }
+ });
+ console.log("settingInterval");
+ _this.my_timer = setInterval(get_progress, 1000);
+ return false;
+ });
$("#gemma_compute").click(function() {
var form_data, url;
url = "/marker_regression";
$('input[name=method]').val("gemma");
+ $('input[name=mapping_display_all]').val($('input[name=display_all_gemma]'));
+ $('input[name=suggestive]').val($('input[name=suggestive_gemma]'));
+ $('input[name=maf]').val($('input[name=maf_gemma]'));
form_data = $('#trait_data_form').serialize();
console.log("form_data is:", form_data);
$.ajax({
diff --git a/wqflask/wqflask/templates/show_trait.html b/wqflask/wqflask/templates/show_trait.html
index e15d043b..ff05e859 100755
--- a/wqflask/wqflask/templates/show_trait.html
+++ b/wqflask/wqflask/templates/show_trait.html
@@ -69,38 +69,98 @@
<script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.naturalSort.js"></script>
<script language="javascript" type="text/javascript" src="/static/packages/DT_bootstrap/DT_bootstrap.js"></script>
<script language="javascript" type="text/javascript" src="/static/packages/TableTools/media/js/TableTools.min.js"></script>
+ <script type="text/javascript" charset="utf-8">
+
+ function getValue(x) {
+ if (x.indexOf('input') >= 0) {
+ if ($(x).val() == 'x') {
+ return 0
+ }
+ else {
+ return parseFloat($(x).val());
+ }
+ }
+ return parseFloat(x);
+ }
+
+ jQuery.fn.dataTableExt.oSort['cust-txt-asc'] = function (a, b) {
+ var x = getValue(a);
+ var y = getValue(b);
+ return ((x < y) ? -1 : ((x > y) ? 1 : 0));
+ };
+
+ jQuery.fn.dataTableExt.oSort['cust-txt-desc'] = function (a, b) {
+ var x = getValue(a);
+ var y = getValue(b);
+ return ((x < y) ? 1 : ((x > y) ? -1 : 0));
+ };
+
+ $(document).ready( function () {
+ console.time("Creating table");
+
+ {% if sample_groups[0].se_exists() %}
+ $('#samples_primary, #samples_other').dataTable( {
+ //"sDom": "<<'span3'l><'span3'T><'span4'f>'row-fluid'r>t<'row-fluid'<'span6'i><'span6'p>>",
+ "aoColumns": [
+ { "sType": "natural" },
+ null,
+ { "sType": "cust-txt" },
+ { "bSortable": false },
+ { "sType": "cust-txt" }
+ ],
+ "sDom": "ftr",
+ "oTableTools": {
+ "aButtons": [
+ "copy",
+ "print",
+ {
+ "sExtends": "collection",
+ "sButtonText": 'Save <span class="caret" />',
+ "aButtons": [ "csv", "xls", "pdf" ]
+ }
+ ],
+ "sSwfPath": "/static/packages/TableTools/media/swf/copy_csv_xls_pdf.swf"
+ },
+ "bPaginate": false,
+ "bLengthChange": true,
+ "bDeferRender": true,
+ "bSortClasses": false
+ } );
+ console.timeEnd("Creating table");
+
+ {% else %}
+
+
+ console.time("Creating table");
+
+ $('#samples_primary, #samples_other').dataTable( {
+ //"sDom": "<<'span3'l><'span3'T><'span4'f>'row-fluid'r>t<'row-fluid'<'span6'i><'span6'p>>",
+ "aoColumns": [
+ { "sType": "natural" },
+ null,
+ { "sType": "cust-txt" }
+ ],
+ "sDom": "ftr",
+ "oTableTools": {
+ "aButtons": [
+ "copy",
+ "print",
+ {
+ "sExtends": "collection",
+ "sButtonText": 'Save <span class="caret" />',
+ "aButtons": [ "csv", "xls", "pdf" ]
+ }
+ ],
+ "sSwfPath": "/static/packages/TableTools/media/swf/copy_csv_xls_pdf.swf"
+ },
+ "bPaginate": false,
+ "bLengthChange": true,
+ "bDeferRender": true,
+ "bSortClasses": false
+ } );
+ console.timeEnd("Creating table");
+ {% endif %}
+ });
+ </script>
- <script type="text/javascript" charset="utf-8">
- $(document).ready( function () {
- console.time("Creating table");
- $('#samples_primary, #samples_other').dataTable( {
- //"sDom": "<<'span3'l><'span3'T><'span4'f>'row-fluid'r>t<'row-fluid'<'span6'i><'span6'p>>",
- "aoColumns": [
- { "sType": "natural" },
- null,
- null,
- { "bSortable": false },
- null
- ],
- "sDom": "ftr",
- "oTableTools": {
- "aButtons": [
- "copy",
- "print",
- {
- "sExtends": "collection",
- "sButtonText": 'Save <span class="caret" />',
- "aButtons": [ "csv", "xls", "pdf" ]
- }
- ],
- "sSwfPath": "/static/packages/TableTools/media/swf/copy_csv_xls_pdf.swf"
- },
- "bPaginate": false,
- "bLengthChange": true,
- "bDeferRender": true,
- "bSortClasses": false
- } );
- console.timeEnd("Creating table");
- });
- </script>
{% endblock %}
diff --git a/wqflask/wqflask/templates/show_trait_mapping_tools.html b/wqflask/wqflask/templates/show_trait_mapping_tools.html
index cc995f2f..f380988e 100755
--- a/wqflask/wqflask/templates/show_trait_mapping_tools.html
+++ b/wqflask/wqflask/templates/show_trait_mapping_tools.html
@@ -10,6 +10,9 @@
<a href="#marker_regression" data-toggle="tab">Marker Regression</a>
</li>
<li>
+ <a href="#plink" data-toggle="tab">PLINK</a>
+ </li>
+ <li>
<a href="#gemma" data-toggle="tab">GEMMA</a>
</li>
<!--<li>
@@ -114,20 +117,20 @@
<label class="control-label">Display all</label>
<div class="controls">
<label class="radio inline">
- <input type="radio" name="display_all" value="True" checked>
+ <input type="radio" name="display_all_reaper" value="True" checked>
Yes
</label>
<label class="radio inline">
- <input type="radio" name="display_all" value="False">
+ <input type="radio" name="display_all_reaper" value="False">
No
</label>
</div>
</div>
<div class="control-group" id="suggestive" >
- <label for="suggestive" class="control-label"
+ <label for="suggestive_reaper" class="control-label"
title="Control Locus">LOD score greater than: </label>
<div class="controls">
- <input name="suggestive" type="text" value="0"/>
+ <input name="suggestive_reaper" type="text" value="0"/>
</div>
</div>
@@ -151,32 +154,74 @@
</div>
+ <div class="tab-pane" id="plink">
+ <div class="control-group" id="display_all_div">
+ <label class="control-label">Display all</label>
+ <div class="controls">
+ <label class="radio inline">
+ <input type="radio" name="display_all_plink" value="True" checked>
+ Yes
+ </label>
+ <label class="radio inline">
+ <input type="radio" name="display_all_plink" value="False">
+ No
+ </label>
+ </div>
+ </div>
+ <div class="control-group" id="suggestive" >
+ <label for="suggestive_plink" class="control-label"
+ title="Control Locus">LOD score greater than: </label>
+ <div class="controls">
+ <input name="suggestive_plink" type="text" value="0"/>
+ </div>
+ </div>
+ <div class="control-group" id="suggestive" >
+ <label for="maf_plink" class="control-label"
+ title="Control Locus">Minor allele threshold: </label>
+ <div class="controls">
+ <input name="maf_plink" type="text" value="0.01"/>
+ </div>
+ </div>
+
+ <div class="control-group">
+ <div class="controls">
+ <button id="plink_compute"
+ class="btn btn-inverse submit_special"
+ data-url="/marker_regression"
+ title="Compute using PLINK">
+ <i class="icon-ok-circle icon-white"></i> Compute
+ </button>
+ </div>
+ </div>
+
+ </div>
+
<div class="tab-pane" id="gemma">
<div class="control-group" id="display_all_div">
<label class="control-label">Display all</label>
<div class="controls">
<label class="radio inline">
- <input type="radio" name="display_all" value="True" checked>
+ <input type="radio" name="display_all_gemma" value="True" checked>
Yes
</label>
<label class="radio inline">
- <input type="radio" name="display_all" value="False">
+ <input type="radio" name="display_all_gemma" value="False">
No
</label>
</div>
</div>
<div class="control-group" id="suggestive" >
- <label for="suggestive" class="control-label"
+ <label for="suggestive_gemma" class="control-label"
title="Control Locus">LOD score greater than: </label>
<div class="controls">
- <input name="suggestive" type="text" value="0"/>
+ <input name="suggestive_gemma" type="text" value="0"/>
</div>
</div>
<div class="control-group" id="suggestive" >
- <label for="maf" class="control-label"
+ <label for="maf_gemma" class="control-label"
title="Control Locus">Minor allele threshold: </label>
<div class="controls">
- <input name="maf" type="text" value="0.01"/>
+ <input name="maf_gemma" type="text" value="0.01"/>
</div>
</div>