about summary refs log tree commit diff
diff options
context:
space:
mode:
authorZachary Sloan2013-03-12 22:22:49 +0000
committerZachary Sloan2013-03-12 22:22:49 +0000
commite71ec85ba3fc7ac45d035c7c1363b36aed709433 (patch)
tree7d64d2b2d5cedf0db0150076c6f0e2b5fdd31496
parent990d72e48c9fbf3fa976e435ad7645cfb8f3301d (diff)
downloadgenenetwork2-e71ec85ba3fc7ac45d035c7c1363b36aed709433.tar.gz
Got cashing working with pickle
-rwxr-xr-xwqflask/base/data_set.py45
-rw-r--r--wqflask/base/species.py2
-rw-r--r--wqflask/utility/helper_functions.py4
-rwxr-xr-xwqflask/wqflask/show_trait/show_trait.py10
-rw-r--r--wqflask/wqflask/static/new/javascript/marker_regression.coffee32
-rw-r--r--wqflask/wqflask/static/new/javascript/marker_regression.js28
-rw-r--r--wqflask/wqflask/templates/marker_regression.html11
-rw-r--r--wqflask/wqflask/templates/show_trait_mapping_tools.html18
-rw-r--r--wqflask/wqflask/views.py29
9 files changed, 83 insertions, 96 deletions
diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py
index d474302c..10f047f8 100755
--- a/wqflask/base/data_set.py
+++ b/wqflask/base/data_set.py
@@ -95,11 +95,14 @@ class DatasetGroup(object):
         if self.name == 'BXD300':
             self.name = "BXD"
         
+        self.f1list = None
+        self.parlist = None        
+        self.get_f1_parent_strains()
+        print("parents/f1s: {}:{}".format(self.parlist, self.f1list))
+        
         self.species = webqtlDatabaseFunction.retrieve_species(self.name)
         
         self.incparentsf1 = False
-        self.f1list = None
-        self.parlist = None
         self.allsamples = None
         self.markers = Markers(self.name)
 
@@ -117,6 +120,18 @@ class DatasetGroup(object):
     #    markers = json.load(json_data)
     #    
 
+    def get_f1_parent_strains(self):
+        try:
+            # NL, 07/27/2010. ParInfo has been moved from webqtlForm.py to webqtlUtil.py;
+            f1, f12, maternal, paternal = webqtlUtil.ParInfo[self.name]
+        except KeyError:
+            f1 = f12 = maternal = paternal = None
+            
+        if f1 and f12:
+            self.f1list = [f1, f12]
+        if maternal and paternal:
+            self.parlist = [maternal, paternal]
+            
     def read_genotype_file(self):
         '''Read genotype from .geno file instead of database'''
         #if self.group == 'BXD300':
@@ -128,38 +143,24 @@ class DatasetGroup(object):
         #genotype_2 is Dataset Object with parents and f1 (not for intercross)
 
         genotype_1 = reaper.Dataset()
-        
+
         # reaper barfs on unicode filenames, so here we ensure it's a string
         full_filename = str(os.path.join(webqtlConfig.GENODIR, self.name + '.geno'))
         genotype_1.read(full_filename)
 
-        print("Got to after read")
-
-        try:
-            # NL, 07/27/2010. ParInfo has been moved from webqtlForm.py to webqtlUtil.py;
-            f1, f12, maternal, paternal = webqtlUtil.ParInfo[self.name]
-        except KeyError:
-            f1 = f12 = maternal = paternal = None
-
-
-        if genotype_1.type == "group" and maternal and paternal:
-            genotype_2 = genotype_1.add(Mat=maternal, Pat=paternal)       #, F1=_f1)
+        if genotype_1.type == "group" and self.parlist:
+            genotype_2 = genotype_1.add(Mat=self.parlist[0], Pat=self.parlist[1])       #, F1=_f1)
         else:
             genotype_2 = genotype_1
 
         #determine default genotype object
         if self.incparentsf1 and genotype_1.type != "intercross":
-            self.genotype = genotype_2
+            genotype = genotype_2
         else:
             self.incparentsf1 = 0
-            self.genotype = genotype_1
-
-        self.samplelist = list(self.genotype.prgy)
+            genotype = genotype_1
 
-        if f1 and f12:
-            self.f1list = [f1, f12]
-        if maternal and paternal:
-            self.parlist = [maternal, paternal]
+        self.samplelist = list(genotype.prgy)
 
 
 class DataSet(object):
diff --git a/wqflask/base/species.py b/wqflask/base/species.py
index 9d4cac4c..689e5c05 100644
--- a/wqflask/base/species.py
+++ b/wqflask/base/species.py
@@ -62,7 +62,7 @@ class Chromosomes(object):
             self.chromosomes[item.Name] = IndChromosome(item.Length)
         
         self.set_mb_graph_interval()
-        self.get_cm_length_list()
+        #self.get_cm_length_list()
 
 
     def set_mb_graph_interval(self):
diff --git a/wqflask/utility/helper_functions.py b/wqflask/utility/helper_functions.py
index 56b409e6..28242c27 100644
--- a/wqflask/utility/helper_functions.py
+++ b/wqflask/utility/helper_functions.py
@@ -12,7 +12,7 @@ def get_species_dataset_trait(self, start_vars):
     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
+    #self.genotype = self.dataset.group.genotype
diff --git a/wqflask/wqflask/show_trait/show_trait.py b/wqflask/wqflask/show_trait/show_trait.py
index 16aec827..12d512b2 100755
--- a/wqflask/wqflask/show_trait/show_trait.py
+++ b/wqflask/wqflask/show_trait/show_trait.py
@@ -51,10 +51,10 @@ class ShowTrait(object):
         #                          cellid=None)
         #
         #
-        #self.dataset.group.read_genotype_file()
+        self.dataset.group.read_genotype_file()
 
-        if not self.dataset.group.genotype:
-            self.read_data(include_f1=True) 
+        #if not self.dataset.group.genotype:
+        #    self.read_data(include_f1=True) 
 
       
         # Todo: Add back in the ones we actually need from below, as we discover we need them
@@ -163,8 +163,8 @@ class ShowTrait(object):
         #if incf1 == None:
         #    incf1 = []
 
-        if not self.genotype:
-            self.dataset.read_genotype_file()
+        #if not self.genotype:
+        #    self.dataset.read_genotype_file()
         if not samplelist:
             if include_f1:
                 samplelist = self.f1list + self.samplelist
diff --git a/wqflask/wqflask/static/new/javascript/marker_regression.coffee b/wqflask/wqflask/static/new/javascript/marker_regression.coffee
index ef56dc99..ebd96b19 100644
--- a/wqflask/wqflask/static/new/javascript/marker_regression.coffee
+++ b/wqflask/wqflask/static/new/javascript/marker_regression.coffee
@@ -10,10 +10,11 @@ $ ->
 
             @x_coords = []
             @y_coords = []
-            @marker_names = []    
+            @marker_names = []
+            console.time('Create coordinates')
             @create_coordinates()
+            console.timeEnd('Create coordinates')
             [@chr_lengths, @cumulative_chr_lengths] = @get_chr_lengths()
-            console.log("cumulative_chr_len: ", @cumulative_chr_lengths)
 
             # Buffer to allow for the ticks/labels to be drawn
             @x_buffer = @plot_width/30
@@ -25,15 +26,17 @@ $ ->
 
             @svg = @create_svg()
             @plot_coordinates = _.zip(@x_coords, @y_coords, @marker_names)
+            
             @plot_height -= @y_buffer
             @create_scales()
+            console.time('Create graph')
             @create_graph()
+            console.timeEnd('Create graph')
 
         get_max_chr: () ->
             max_chr = 0
             for result in @qtl_results
                 chr = parseInt(result.chr)
-                console.log("foo:", chr, typeof(chr))
                 if not _.isNaN(chr) 
                     if chr > max_chr
                         max_chr = chr
@@ -56,7 +59,7 @@ $ ->
                 cumulative_chr_lengths.push(total_length + this_length)
                 total_length += this_length
                 
-            console.log("total length is:", total_length)
+            #console.log("total length is:", total_length)
 
             return [chr_lengths, cumulative_chr_lengths]
 
@@ -70,13 +73,13 @@ $ ->
                     chr_lengths.push(chr_length) 
                     if result.chr != "1"
                         @total_length += chr_lengths[chr_lengths.length - 2]
-                        console.log("total_length is:", @total_length)                
                 @x_coords.push(@total_length + parseFloat(result.Mb))
                 @y_coords.push(result.lod_score)
                 @marker_names.push(result.name)
             @total_length += chr_lengths[chr_lengths.length-1]
 
         show_marker_in_table: (marker_info) ->
+            console.log("in show_marker_in_table")
             ### Searches for the select marker in the results table below ###
             if marker_info
                 marker_name = marker_info[2]
@@ -148,11 +151,10 @@ $ ->
                 tick_val = parseInt(@cumulative_chr_lengths[i-1])
                 for tick in [0..(tick_count-1)]
                     tick_val += 25
-                    console.log("tick_val is:", tick_val)
                     chr_ticks.push(tick_val)
                 Array::push.apply tick_vals, chr_ticks    
                     
-            console.log("tick_vals:", tick_vals)
+            #console.log("tick_vals:", tick_vals)
             return tick_vals
 
         add_x_axis: () ->
@@ -176,7 +178,6 @@ $ ->
                     else
                         tmp_tick_val += 25
                         tick_val = tmp_tick_val
-                console.log("tick_val: ", tick_val)
                 return (tick_val)
             )
 
@@ -242,7 +243,6 @@ $ ->
             for key of @chromosomes
                 chr_names.push(key)
             chr_info = _.zip(chr_names, @chr_lengths, @cumulative_chr_lengths)
-            console.log("chr_info is", chr_info)                     
             @svg.selectAll("text")
                 .data(chr_info, (d) =>
                     return d
@@ -250,7 +250,6 @@ $ ->
                 .enter()
                 .append("text")
                 .text((d) =>
-                    console.log("d[0] is ", d[0])
                     return d[0]
                 )
                 .attr("x", (d) =>
@@ -263,9 +262,7 @@ $ ->
                 .attr("font-size", "18px")
                 .attr("fill", "grey")
 
-
         add_plot_points: () ->
-            console.log("x_max is:", @x_max)
             @svg.selectAll("circle")
                 .data(@plot_coordinates)
                 .enter()
@@ -279,16 +276,21 @@ $ ->
                 .attr("r", 2)
                 .classed("circle", true)
                 .on("mouseover", (d) =>
-                    d3.select(d3.event.target).classed("d3_highlight", true)
+                    console.log("this:", this)
+                    console.log("d3.event is:", d3.event)
+                    console.log("d is:", d)
+                    d3.select(d3.event)
                         .attr("r", 5)
                         .attr("fill", "yellow")
                         .call(@show_marker_in_table(d))
                 )
                 .on("mouseout", () =>
-                    d3.select(d3.event.target).classed("d3_highlight", false)
+                    d3.select(d3.event)
                         .attr("r", 2)
                         .attr("fill", "black")
                         .call(@show_marker_in_table())
                 )
 
-    new Manhattan_Plot(600, 1200)
\ No newline at end of file
+    console.time('Create manhattan plot')
+    new Manhattan_Plot(600, 1200)
+    console.timeEnd('Create manhattan plot')
\ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/marker_regression.js b/wqflask/wqflask/static/new/javascript/marker_regression.js
index efe6f508..25a8d5b5 100644
--- a/wqflask/wqflask/static/new/javascript/marker_regression.js
+++ b/wqflask/wqflask/static/new/javascript/marker_regression.js
@@ -17,9 +17,10 @@
         this.x_coords = [];
         this.y_coords = [];
         this.marker_names = [];
+        console.time('Create coordinates');
         this.create_coordinates();
+        console.timeEnd('Create coordinates');
         _ref = this.get_chr_lengths(), this.chr_lengths = _ref[0], this.cumulative_chr_lengths = _ref[1];
-        console.log("cumulative_chr_len: ", this.cumulative_chr_lengths);
         this.x_buffer = this.plot_width / 30;
         this.y_buffer = this.plot_height / 20;
         this.x_max = this.total_length;
@@ -28,7 +29,9 @@
         this.plot_coordinates = _.zip(this.x_coords, this.y_coords, this.marker_names);
         this.plot_height -= this.y_buffer;
         this.create_scales();
+        console.time('Create graph');
         this.create_graph();
+        console.timeEnd('Create graph');
       }
 
       Manhattan_Plot.prototype.get_max_chr = function() {
@@ -38,7 +41,6 @@
         for (_i = 0, _len = _ref.length; _i < _len; _i++) {
           result = _ref[_i];
           chr = parseInt(result.chr);
-          console.log("foo:", chr, typeof chr);
           if (!_.isNaN(chr)) {
             if (chr > max_chr) {
               max_chr = chr;
@@ -65,7 +67,6 @@
           cumulative_chr_lengths.push(total_length + this_length);
           total_length += this_length;
         }
-        console.log("total length is:", total_length);
         return [chr_lengths, cumulative_chr_lengths];
       };
 
@@ -82,7 +83,6 @@
             chr_lengths.push(chr_length);
             if (result.chr !== "1") {
               this.total_length += chr_lengths[chr_lengths.length - 2];
-              console.log("total_length is:", this.total_length);
             }
           }
           this.x_coords.push(this.total_length + parseFloat(result.Mb));
@@ -93,10 +93,11 @@
       };
 
       Manhattan_Plot.prototype.show_marker_in_table = function(marker_info) {
+        var marker_name;
+        console.log("in show_marker_in_table");
         /* Searches for the select marker in the results table below
         */
 
-        var marker_name;
         if (marker_info) {
           marker_name = marker_info[2];
         } else {
@@ -160,12 +161,10 @@
           tick_val = parseInt(this.cumulative_chr_lengths[i - 1]);
           for (tick = _k = 0, _ref2 = tick_count - 1; 0 <= _ref2 ? _k <= _ref2 : _k >= _ref2; tick = 0 <= _ref2 ? ++_k : --_k) {
             tick_val += 25;
-            console.log("tick_val is:", tick_val);
             chr_ticks.push(tick_val);
           }
           Array.prototype.push.apply(tick_vals, chr_ticks);
         }
-        console.log("tick_vals:", tick_vals);
         return tick_vals;
       };
 
@@ -191,7 +190,6 @@
               tick_val = tmp_tick_val;
             }
           }
-          console.log("tick_val: ", tick_val);
           return tick_val;
         });
         return this.svg.append("g").attr("class", "x_axis").attr("transform", "translate(0," + this.plot_height + ")").call(xAxis).selectAll("text").attr("text-anchor", "right").attr("dx", "-1.6em").attr("transform", function(d) {
@@ -235,11 +233,9 @@
           chr_names.push(key);
         }
         chr_info = _.zip(chr_names, this.chr_lengths, this.cumulative_chr_lengths);
-        console.log("chr_info is", chr_info);
         return this.svg.selectAll("text").data(chr_info, function(d) {
           return d;
         }).enter().append("text").text(function(d) {
-          console.log("d[0] is ", d[0]);
           return d[0];
         }).attr("x", function(d) {
           return _this.x_scale(d[2] - d[1] / 2);
@@ -248,22 +244,26 @@
 
       Manhattan_Plot.prototype.add_plot_points = function() {
         var _this = this;
-        console.log("x_max is:", this.x_max);
         return this.svg.selectAll("circle").data(this.plot_coordinates).enter().append("circle").attr("cx", function(d) {
           return _this.x_buffer + ((_this.plot_width - _this.x_buffer) * d[0] / _this.x_max);
         }).attr("cy", function(d) {
           return _this.plot_height - ((_this.plot_height - _this.y_buffer) * d[1] / _this.y_max);
         }).attr("r", 2).classed("circle", true).on("mouseover", function(d) {
-          return d3.select(d3.event.target).classed("d3_highlight", true).attr("r", 5).attr("fill", "yellow").call(_this.show_marker_in_table(d));
+          console.log("this:", _this);
+          console.log("d3.event is:", d3.event);
+          console.log("d is:", d);
+          return d3.select(d3.event).attr("r", 5).attr("fill", "yellow").call(_this.show_marker_in_table(d));
         }).on("mouseout", function() {
-          return d3.select(d3.event.target).classed("d3_highlight", false).attr("r", 2).attr("fill", "black").call(_this.show_marker_in_table());
+          return d3.select(d3.event).attr("r", 2).attr("fill", "black").call(_this.show_marker_in_table());
         });
       };
 
       return Manhattan_Plot;
 
     })();
-    return new Manhattan_Plot(600, 1200);
+    console.time('Create manhattan plot');
+    new Manhattan_Plot(600, 1200);
+    return console.timeEnd('Create manhattan plot');
   });
 
 }).call(this);
diff --git a/wqflask/wqflask/templates/marker_regression.html b/wqflask/wqflask/templates/marker_regression.html
index fc068d21..afbbb7c9 100644
--- a/wqflask/wqflask/templates/marker_regression.html
+++ b/wqflask/wqflask/templates/marker_regression.html
@@ -69,18 +69,18 @@
     <!--[if lt IE 9]>
         <script language="javascript" type="text/javascript" src="/static/packages/jqplot/excanvas.js"></script>
     <![endif]-->
-    <script language="javascript" type="text/javascript" src="http://d3js.org/d3.v3.min.js"></script>
+    <script language="javascript" type="text/javascript" src="http://d3js.org/d3.v3.js"></script>
     <script language="javascript" type="text/javascript" src="/static/new/javascript/marker_regression.js"></script>
     <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.js"></script>
     <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.dataTables.min.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 language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script>
-    
-        
+
     
     <script type="text/javascript" charset="utf-8">
         $(document).ready( function () {
+            console.time("Creating table");
             $('#qtl_results').dataTable( {
                 //"sDom": "<<'span3'l><'span3'T><'span4'f>'row-fluid'r>t<'row-fluid'<'span6'i><'span6'p>>",
                 "sDom": "lTftipr",
@@ -97,8 +97,11 @@
                     "sSwfPath": "/static/packages/TableTools/media/swf/copy_csv_xls_pdf.swf"
                 },
                 "iDisplayLength": 50,
-                "bLengthChange": true
+                "bLengthChange": true,
+                "bDeferRender": true,
+                "bSortClasses": false
             } );
+            console.timeEnd("Creating table");
         });
     </script>
 {% endblock %}
\ No newline at end of file
diff --git a/wqflask/wqflask/templates/show_trait_mapping_tools.html b/wqflask/wqflask/templates/show_trait_mapping_tools.html
index 58174c78..a98a75c7 100644
--- a/wqflask/wqflask/templates/show_trait_mapping_tools.html
+++ b/wqflask/wqflask/templates/show_trait_mapping_tools.html
@@ -41,23 +41,7 @@
                             <input name="mapping_bootstraps" value="2000" type="text" />
                         </div>
                     </div>
-                    
-               
-                    {% if dataset.group.genotype.Mbmap %}
-                    <div class="control-group">
-                        <label class="control-label">Scale</label>
-                        <div class="controls">                      
-                        <label class="radio inline">
-                            <input type="radio" name="scale" id="scale" value="megabase" checked>
-                            Megabase
-                        </label>
-                        <label class="radio inline">
-                            <input type="radio" name="scale" id="scale" value="centimorgan">
-                            Centimorgan
-                        </label>
-                        </div>
-                    </div>
-                    {% endif %}
+
 
                     <div class="control-group">
                         <label class="control-label"><b>Composite Mapping</b></label>
diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py
index c8432877..46433430 100644
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -31,6 +31,7 @@ from utility import temp_data
 from wqflask.dataSharing import SharingInfo, SharingInfoPage
 
 from base import webqtlFormData
+from utility.benchmark import Bench
 
 from pprint import pformat as pf
 
@@ -168,25 +169,18 @@ def marker_regression_page():
             start_vars[key] = value
     
     version = "v5"
-    print("version is:", version)
     key = "marker_regression:{}:".format(version) + json.dumps(start_vars, sort_keys=True)
-    result = Redis.get(key)
+    with Bench("Loading cache"):
+        result = Redis.get(key)
     
-    print("************************ Starting result *****************")
+    #print("************************ Starting result *****************")
     #print("result is [{}]: {}".format(type(result), result))
-    print("************************ Ending result ********************")
+    #print("************************ Ending result ********************")
     
     if result:
-        with open("/tmp/result", "w") as fh:
-            fh.write(result)
         print("Cache hit!!!")
-        import __builtin__
-        import reaper
-        __builtin__.Dataset = reaper.Dataset
-        #result = yaml.load(result)
-        result = pickle.loads(result)
-        print("Done loading yaml")
-        
+        with Bench("Loading results"):
+            result = pickle.loads(result)
     else:
         print("Cache miss!!!")
         template_vars = marker_regression.MarkerRegression(start_vars, temp_uuid)
@@ -197,14 +191,17 @@ def marker_regression_page():
 
         result = template_vars.__dict__
      
-        for item in template_vars.__dict__.keys():
-            print("  ---**--- {}: {}".format(type(item), item))
+        #for item in template_vars.__dict__.keys():
+        #    print("  ---**--- {}: {}".format(type(template_vars.__dict__[item]), item))
         
         #causeerror
         Redis.set(key, pickle.dumps(result))
         Redis.expire(key, 60*60)
+        
+    with Bench("Rendering template"):
+        rendered_template = render_template("marker_regression.html", **result)
     
-    return render_template("marker_regression.html", **result)
+    return rendered_template
 
 
 @app.route("/corr_compute", methods=('POST',))