about summary refs log tree commit diff
diff options
context:
space:
mode:
-rwxr-xr-xwqflask/utility/helper_functions.py3
-rwxr-xr-xwqflask/wqflask/interval_mapping/interval_mapping.py2
-rwxr-xr-xwqflask/wqflask/marker_regression/marker_regression.py78
-rwxr-xr-xwqflask/wqflask/show_trait/show_trait.py36
-rw-r--r--wqflask/wqflask/static/new/css/panelutil.css4
-rw-r--r--wqflask/wqflask/static/new/javascript/chr_interval_map.coffee63
-rw-r--r--wqflask/wqflask/static/new/javascript/create_manhattan_plot.coffee5
-rw-r--r--wqflask/wqflask/static/new/javascript/create_manhattan_plot.js3
-rwxr-xr-xwqflask/wqflask/static/new/javascript/get_traits_from_collection.coffee7
-rwxr-xr-xwqflask/wqflask/static/new/javascript/get_traits_from_collection.js5
-rw-r--r--wqflask/wqflask/static/new/javascript/lod_chart.coffee188
-rw-r--r--wqflask/wqflask/static/new/javascript/lod_chart.js65
-rw-r--r--wqflask/wqflask/static/new/javascript/manhattan_plot.coffee92
-rwxr-xr-xwqflask/wqflask/static/new/javascript/marker_regression.coffee37
-rwxr-xr-xwqflask/wqflask/static/new/javascript/marker_regression.js54
-rwxr-xr-xwqflask/wqflask/static/new/javascript/search_results.coffee10
-rwxr-xr-xwqflask/wqflask/static/new/javascript/search_results.js12
-rwxr-xr-xwqflask/wqflask/static/new/javascript/show_trait_mapping_tools.coffee3
-rwxr-xr-xwqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js1
-rwxr-xr-xwqflask/wqflask/templates/correlation_page.html1
-rwxr-xr-xwqflask/wqflask/templates/marker_regression.html3
-rwxr-xr-xwqflask/wqflask/templates/search_result_page.html30
-rwxr-xr-xwqflask/wqflask/templates/show_trait.html3
-rwxr-xr-xwqflask/wqflask/templates/show_trait_mapping_tools.html28
-rwxr-xr-xwqflask/wqflask/views.py3
25 files changed, 279 insertions, 457 deletions
diff --git a/wqflask/utility/helper_functions.py b/wqflask/utility/helper_functions.py
index ca3e2350..15f60765 100755
--- a/wqflask/utility/helper_functions.py
+++ b/wqflask/utility/helper_functions.py
@@ -13,7 +13,8 @@ def get_species_dataset_trait(self, start_vars):
     print("After creating species")
     self.this_trait = GeneralTrait(dataset=self.dataset,
                                    name=start_vars['trait_id'],
-                                   cellid=None)
+                                   cellid=None,
+                                   get_qtl_info=True)
     print("After creating trait")
 
     #if read_genotype:
diff --git a/wqflask/wqflask/interval_mapping/interval_mapping.py b/wqflask/wqflask/interval_mapping/interval_mapping.py
index e70f11cb..1b651411 100755
--- a/wqflask/wqflask/interval_mapping/interval_mapping.py
+++ b/wqflask/wqflask/interval_mapping/interval_mapping.py
@@ -95,7 +95,7 @@ class IntervalMapping(object):
         #if self.plotScale == 'physic' and not fd.genotype.Mbmap:
         #    self.plotScale = 'morgan'
         #self.method = start_vars['mapping_method']
-        self.num_permutations = int(start_vars['num_permutations'])
+        self.num_permutations = int(start_vars['num_perm'])
         #self.do_bootstrap = start_vars['do_bootstrap']
         #self.selected_chr = start_vars['chromosome']
         if start_vars['display_additive'] == "yes":
diff --git a/wqflask/wqflask/marker_regression/marker_regression.py b/wqflask/wqflask/marker_regression/marker_regression.py
index 59d87b36..1524143e 100755
--- a/wqflask/wqflask/marker_regression/marker_regression.py
+++ b/wqflask/wqflask/marker_regression/marker_regression.py
@@ -71,7 +71,10 @@ class MarkerRegression(object):
         elif self.mapping_method == "rqtl_geno":

             self.num_perm = start_vars['num_perm']

             self.control = start_vars['control_marker']

-            self.control_db = start_vars['control_marker_db']

+            if start_vars['manhattan_plot'] == "true":

+                self.manhattan_plot = True

+            else:

+                self.manhattan_plot = False

             print("doing rqtl_geno")

             qtl_results = self.run_rqtl_geno()

             print("qtl_results:", qtl_results)

@@ -122,11 +125,13 @@ class MarkerRegression(object):
         

         print("json_data:", self.json_data)

         

+

         self.js_data = dict(

             json_data = self.json_data,

             this_trait = self.this_trait.name,

             data_set = self.dataset.name,

             maf = self.maf,

+            manhattan_plot = self.manhattan_plot,

             chromosomes = chromosome_mb_lengths,

             qtl_results = self.filtered_markers,

         )

@@ -218,6 +223,7 @@ class MarkerRegression(object):
         robjects.packages.importr("qtl")

         robjects.r('the_cross <- read.cross(format="csvr", dir="/home/zas1024/PLINK2RQTL/test", file="BXD.csvr")')

         robjects.r('the_cross <- calc.genoprob(the_cross)')

+        

         pheno_as_string = "c("

         #for i, val in enumerate(self.vals):

         #    if val == "x":

@@ -243,47 +249,59 @@ class MarkerRegression(object):
             

         pheno_as_string += ")"

         

+        robjects.r('the_cross$pheno <- cbind(pull.pheno(the_cross), the_pheno = '+ pheno_as_string +')')

+        

         print("self.control:", self.control)

+        

         if self.control != "":

-            print("self.control_db:", self.control_db)

-            control_trait = GeneralTrait(name=str(self.control), dataset_name=str(self.control_db))

-            control_vals = []

-            for sample in self.dataset.group.samplelist:

-                if sample in control_trait.data:

-                    control_vals.append(control_trait.data[sample].value)

-                else:

-                    control_vals.append("x")

-            print("control_vals:", control_vals)

-            control_as_string = "c("

-            for j, val2 in enumerate(control_vals):

-                if val2 == "x":

-                    if j < (len(control_vals) - 1):

-                        control_as_string +=  "NA,"

+            control_markers = self.control.split(",")

+            control_string = ""

+            for i, control in enumerate(control_markers):

+                control_trait = GeneralTrait(name=str(control), dataset_name=str(self.dataset.group.name + "Geno"))

+                control_vals = []

+                for sample in self.dataset.group.samplelist:

+                    if sample in control_trait.data:

+                        control_vals.append(control_trait.data[sample].value)

                     else:

-                        control_as_string += "NA"

-                else:

-                    if j < (len(control_vals) - 1):

-                        control_as_string += str(val2) + ","

+                        control_vals.append("x")

+                print("control_vals:", control_vals)

+                control_as_string = "c("

+                for j, val2 in enumerate(control_vals):

+                    if val2 == "x":

+                        if j < (len(control_vals) - 1):

+                            control_as_string +=  "NA,"

+                        else:

+                            control_as_string += "NA"

                     else:

-                        control_as_string += str(val2)

-                #if i < (len(control_vals) - 1):

-                #    control_as_string += str(new_val2) + ","

-                #else:

-                #    control_as_string += str(new_val2)

-            control_as_string += ")"

-            print("control_as_string:", control_as_string)

-        

-            r_string = 'scanone(the_cross, pheno.col='+pheno_as_string+', n.perm='+self.num_perm+', addcovar='+control_as_string+')'

+                        if j < (len(control_vals) - 1):

+                            control_as_string += str(val2) + ","

+                        else:

+                            control_as_string += str(val2)

+                    #if i < (len(control_vals) - 1):

+                    #    control_as_string += str(new_val2) + ","

+                    #else:

+                    #    control_as_string += str(new_val2)

+                control_as_string += ")"

+                print("control_as_string:", control_as_string)

+                if i < (len(control_markers)-1):

+                    control_string += control_as_string + ","

+                else:

+                    control_string += control_as_string

+                    

+            robjects.r('covariates <- cbind( '+ control_string +')')

+            

+            r_string = 'scanone(the_cross, pheno.col="the_pheno", n.perm='+self.num_perm+', addcovar=covariates, intcovar=covariates[,'+ str(len(control_markers)) +'])'

+            print("r_string:", r_string)

             

             if self.num_perm > 0:

                 thresholds = robjects.r(r_string)

                 print("thresholds:", thresholds)

             

             #r_string = 'scanone(the_cross, pheno.col='+pheno_as_string+', addcovar='+control_as_string+')'

-            print("r_string:", r_string)

+            

         else:

         #r_string = 'scanone(the_cross, pheno.col='+pheno_as_string+', n.perm='+self.num_perm+')'

-            r_string = 'scanone(the_cross, pheno.col='+pheno_as_string+')'

+            r_string = 'scanone(the_cross, pheno.col="the_pheno", n.perm='+self.num_perm+')'

             

         print("r_string:", r_string)

         result_data_frame = robjects.r(r_string)

diff --git a/wqflask/wqflask/show_trait/show_trait.py b/wqflask/wqflask/show_trait/show_trait.py
index a4a24fd4..51cf337c 100755
--- a/wqflask/wqflask/show_trait/show_trait.py
+++ b/wqflask/wqflask/show_trait/show_trait.py
@@ -91,8 +91,10 @@ class ShowTrait(object):
         self.build_correlation_tools(self.this_trait)
 
         #Get nearest marker for composite mapping
-        self.nearest_marker, self.nearest_marker_db = get_nearest_marker(self.this_trait)
-    
+
+        if self.dataset.type != "Geno":
+            self.nearest_marker1 = get_nearest_marker(self.this_trait, self.dataset)[0]
+            self.nearest_marker2 = get_nearest_marker(self.this_trait, self.dataset)[1]
 
         self.make_sample_lists(self.this_trait)
 
@@ -106,8 +108,9 @@ class ShowTrait(object):
         hddn['mapping_display_all'] = True
         hddn['suggestive'] = 0
         hddn['num_perm'] = 0
-        hddn['control_marker'] = self.nearest_marker
-        hddn['control_marker_db'] = self.nearest_marker_db
+        hddn['manhattan_plot'] = False
+        if self.dataset.type != "Geno":
+            hddn['control_marker'] = self.nearest_marker1+","+self.nearest_marker2
         hddn['maf'] = 0.01
         hddn['compare_traits'] = []
     
@@ -1275,20 +1278,23 @@ def get_samplelist_from_trait_data(this_trait, all_samples_ordered):
             
     return other_sample_names, all_samples_ordered
 
-def get_nearest_marker(this_trait):
-    this_chr = this_trait.chr
-    this_mb = this_trait.mb
-    query = """SELECT ProbeSet.Name, ProbeSetFreeze.Name
-               FROM ProbeSet, ProbeSetXRef, ProbeSetFreeze
-               WHERE ProbeSet.Chr = '{}' AND
-                     ProbeSet.Id=ProbeSetXRef.ProbeSetId AND
-                     ProbeSetXRef.ProbeSetFreezeId=ProbeSetFreeze.Id AND
-                     ProbeSetFreeze.Name='{}'
-               ORDER BY ABS( Mb - {}) LIMIT 2""".format(this_trait.chr, this_trait.dataset.name, this_trait.mb)
+def get_nearest_marker(this_trait, this_db):
+    this_chr = this_trait.locus_chr
+    print("this_chr:", this_chr)
+    this_mb = this_trait.locus_mb
+    print("this_mb:", this_mb)
+    query = """SELECT Geno.Name
+               FROM Geno, GenoXRef, GenoFreeze
+               WHERE Geno.Chr = '{}' AND
+                     GenoXRef.GenoId = Geno.Id AND
+                     GenoFreeze.Id = GenoXRef.GenoFreezeId AND
+                     GenoFreeze.Name = '{}'
+               ORDER BY ABS( Geno.Mb - {}) LIMIT 2""".format(this_chr, this_db.group.name+"Geno", this_mb)
     print("query:", query)
 
     result = g.db.execute(query).fetchall()
+    print("result:", result)
 
-    return result[1][0], result[1][1]
+    return result[0][0], result[1][0]
     
     
diff --git a/wqflask/wqflask/static/new/css/panelutil.css b/wqflask/wqflask/static/new/css/panelutil.css
index ff363e49..ccd7eb01 100644
--- a/wqflask/wqflask/static/new/css/panelutil.css
+++ b/wqflask/wqflask/static/new/css/panelutil.css
@@ -43,12 +43,12 @@ div.qtlcharts line.x.axis.grid {
 

 div.qtlcharts line.y.axis.grid {

   stroke: white;

-}

+}*/

 

 div.qtlcharts .extent {

   fill: #cac;

   opacity: 0.3;

-}*/

+}

 

 div.qtlcharts circle.selected {

   fill: hotpink;

diff --git a/wqflask/wqflask/static/new/javascript/chr_interval_map.coffee b/wqflask/wqflask/static/new/javascript/chr_interval_map.coffee
index 62ce4d3d..e1993032 100644
--- a/wqflask/wqflask/static/new/javascript/chr_interval_map.coffee
+++ b/wqflask/wqflask/static/new/javascript/chr_interval_map.coffee
@@ -214,69 +214,6 @@ class Chr_Interval_Map
                         .attr("stroke-width", 1)

                         .attr("fill", "none")

 

-

-    #add_plot_points: () ->

-    #    @plot_point = @svg.selectAll("circle")

-    #        .data(@plot_coordinates)

-    #        .enter()

-    #        .append("circle")

-    #        .attr("cx", (d) =>

-    #            return @x_scale(d[0])

-    #        )

-    #        .attr("cy", (d) =>

-    #            return @y_scale(d[1])

-    #        )

-    #        .attr("r", (d) =>

-    #            #if d[1] > 2

-    #            #    return 3

-    #            #else

-    #            return 2

-    #        )

-    #        .attr("fill", (d) =>

-    #            #if d[1] > 2

-    #            #    return "white"

-    #            #else

-    #            return "black"

-    #        )

-    #        .attr("stroke", "black")

-    #        .attr("stroke-width", "1")

-    #        .attr("id", (d) =>

-    #            return "point_" + String(d[2])

-    #        )

-    #        .classed("circle", true)

-    #        .on("mouseover", (d) =>

-    #            console.log("d3.event is:", d3.event)

-    #            console.log("d is:", d)

-    #            this_id = "point_" + String(d[2])

-    #            d3.select("#" + this_id).classed("d3_highlight", true)

-    #                .attr("r", 5)

-    #                .attr("stroke", "none")

-    #                .attr("fill", "blue")

-    #                .call(@show_marker_in_table(d))

-    #        )

-    #        .on("mouseout", (d) =>

-    #            this_id = "point_" + String(d[2])

-    #            d3.select("#" + this_id).classed("d3_highlight", false)

-    #                .attr("r", (d) =>

-    #                    #if d[1] > 2

-    #                    #    return 3

-    #                    #else

-    #                    return 2

-    #                )

-    #                .attr("fill", (d) =>

-    #                    #if d[1] > 2

-    #                    #    return "white"

-    #                    #else

-    #                    return "black"

-    #                )

-    #                .attr("stroke", "black")

-    #                .attr("stroke-width", "1")

-    #        )

-    #        .append("svg:title")

-    #            .text((d) =>

-    #                return d[2]

-    #            )

-

     return_to_full_view: () ->

         $('#topchart').remove()

         $('#chart_container').append('<div class="qtlcharts" id="topchart"></div>')

diff --git a/wqflask/wqflask/static/new/javascript/create_manhattan_plot.coffee b/wqflask/wqflask/static/new/javascript/create_manhattan_plot.coffee
index 05ad5419..0cd9e124 100644
--- a/wqflask/wqflask/static/new/javascript/create_manhattan_plot.coffee
+++ b/wqflask/wqflask/static/new/javascript/create_manhattan_plot.coffee
@@ -6,13 +6,16 @@ create_manhattan_plot = ->
     totalh = halfh*2

     totalw = (w+margin.left+margin.right)

     

+    console.log("js_data:", js_data)

+    

     # simplest use

     #d3.json "data.json", (data) ->

     mychart = lodchart().lodvarname("lod.hk")

                         .height(h)

                         .width(w)

                         .margin(margin)

-    

+                        .manhattanPlot(js_data.manhattan_plot)

+                        

     data = js_data.json_data

     

     d3.select("div#topchart")

diff --git a/wqflask/wqflask/static/new/javascript/create_manhattan_plot.js b/wqflask/wqflask/static/new/javascript/create_manhattan_plot.js
index 62584fb2..d30e8e6a 100644
--- a/wqflask/wqflask/static/new/javascript/create_manhattan_plot.js
+++ b/wqflask/wqflask/static/new/javascript/create_manhattan_plot.js
@@ -15,7 +15,8 @@ create_manhattan_plot = function() {
   halfh = h + margin.top + margin.bottom;
   totalh = halfh * 2;
   totalw = w + margin.left + margin.right;
-  mychart = lodchart().lodvarname("lod.hk").height(h).width(w).margin(margin);
+  console.log("js_data:", js_data);
+  mychart = lodchart().lodvarname("lod.hk").height(h).width(w).margin(margin).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/get_traits_from_collection.coffee b/wqflask/wqflask/static/new/javascript/get_traits_from_collection.coffee
index 78d69f7a..ff7c041c 100755
--- a/wqflask/wqflask/static/new/javascript/get_traits_from_collection.coffee
+++ b/wqflask/wqflask/static/new/javascript/get_traits_from_collection.coffee
@@ -109,9 +109,10 @@ get_trait_data = (trait_data, textStatus, jqXHR) ->
     #console.log("json_data[1]:", json_data[1])
     
     console.log("THE LENGTH IS:", $('input[name=vals]').length)
-    if $('input[name=vals]').length == 1
-        create_scatterplot(samples, [this_trait_vals, vals])
+    #if $('input[name=vals]').length == 1
+    #    create_scatterplot(samples, [this_trait_vals, vals])
 
+    color_by_trait(trait_sample_data)
 
 get_this_trait_vals = (samples) ->
     this_trait_vals = []
@@ -142,7 +143,7 @@ assemble_into_json = (this_trait_vals) ->
 
 color_by_trait =  (trait_sample_data, textStatus, jqXHR) ->
     #trait_sample_data = trait_sample_data
-    #console.log('in color_by_trait:', trait_sample_data)
+    console.log('in color_by_trait:', trait_sample_data)
     root.bar_chart.color_by_trait(trait_sample_data)
 
 process_traits = (trait_data, textStatus, jqXHR) ->
diff --git a/wqflask/wqflask/static/new/javascript/get_traits_from_collection.js b/wqflask/wqflask/static/new/javascript/get_traits_from_collection.js
index 402d62f4..68635118 100755
--- a/wqflask/wqflask/static/new/javascript/get_traits_from_collection.js
+++ b/wqflask/wqflask/static/new/javascript/get_traits_from_collection.js
@@ -111,9 +111,7 @@ get_trait_data = function(trait_data, textStatus, jqXHR) {
   $('#hidden_inputs').append('<input type="hidden" name="vals" value="[' + vals.toString() + ']" />');
   this_trait_vals = get_this_trait_vals(samples);
   console.log("THE LENGTH IS:", $('input[name=vals]').length);
-  if ($('input[name=vals]').length === 1) {
-    return create_scatterplot(samples, [this_trait_vals, vals]);
-  }
+  return color_by_trait(trait_sample_data);
 };
 
 get_this_trait_vals = function(samples) {
@@ -149,6 +147,7 @@ assemble_into_json = function(this_trait_vals) {
 };
 
 color_by_trait = function(trait_sample_data, textStatus, jqXHR) {
+  console.log('in color_by_trait:', trait_sample_data);
   return root.bar_chart.color_by_trait(trait_sample_data);
 };
 
diff --git a/wqflask/wqflask/static/new/javascript/lod_chart.coffee b/wqflask/wqflask/static/new/javascript/lod_chart.coffee
index dd2ad31d..309cec9e 100644
--- a/wqflask/wqflask/static/new/javascript/lod_chart.coffee
+++ b/wqflask/wqflask/static/new/javascript/lod_chart.coffee
@@ -4,6 +4,7 @@ lodchart = () ->
     margin = {left:60, top:40, right:40, bottom: 40, inner:5}

     axispos = {xtitle:25, ytitle:30, xlabel:5, ylabel:5}

     titlepos = 20

+    manhattanPlot = false

     ylim = null

     additive_ylim = null

     nyticks = 5

@@ -34,6 +35,7 @@ lodchart = () ->
     markerSelect = null

     chrSelect = null

     pointsAtMarkers = true

+    

   

     ## the main function

     chart = (selection) ->

@@ -41,6 +43,10 @@ lodchart = () ->
         

         #console.log("data:", data)

         

+        if manhattanPlot == true

+            pointcolor = "darkslateblue"

+            pointsize = 2

+        

         lodvarname = lodvarname ? data.lodnames[0]

         data[lodvarname] = (Math.abs(x) for x in data[lodvarname]) # take absolute values

         if 'additive' of data

@@ -115,6 +121,7 @@ lodchart = () ->
                       lightrect)

                    .attr("stroke", "none")

                    .on("click", (d) ->

+                      console.log("d is:", d)

                       redraw_plot(d)

                     )   

   

@@ -146,7 +153,7 @@ lodchart = () ->
              #console.log("chr_length is:", chr_ob[1])

              $('#topchart').remove()

              $('#chart_container').append('<div class="qtlcharts" id="topchart"></div>')

-             chr_plot = new Chr_Interval_Map(600, 1200, chr_ob)

+             chr_plot = new Chr_Manhattan_Plot(600, 1200, chr_ob)

   

         # y-axis

         rotate_ylab = rotate_ylab ? (ylab.length > 1)

@@ -247,43 +254,46 @@ lodchart = () ->
                  .attr("stroke", significantcolor)

                  .attr("stroke-width", 5)

                  .style("pointer-events", "none")

-  

-        # lod curves by chr

-        lodcurve = (chr, lodcolumn) ->

-            d3.svg.line()

-              .x((d) -> xscale[chr](d))

-              .y((d,i) -> yscale(data.lodByChr[chr][i][lodcolumn]))

-              

-        #if 'additive' of data

-        #    additivecurve = (chr, lodcolumn) ->

-        #        d3.svg.line()

-        #          .x((d) -> xscale[chr](d))

-        #          .y((d,i) -> additive_yscale(data.additiveByChr[chr][i][lodcolumn]))

-  

-        curves = g.append("g").attr("id", "curves")

-  

-        for chr in data.chrnames

-          curves.append("path")

-                .datum(data.posByChr[chr[0]])

-                .attr("d", lodcurve(chr[0], lodvarnum))

-                .attr("stroke", lodlinecolor)

-                .attr("fill", "none")

-                .attr("stroke-width", linewidth)

-                .style("pointer-events", "none")

+                 

+        if manhattanPlot == false

+            # lod curves by chr

+            lodcurve = (chr, lodcolumn) ->

+                d3.svg.line()

+                  .x((d) -> xscale[chr](d))

+                  .y((d,i) -> yscale(data.lodByChr[chr][i][lodcolumn]))

+                  

+            #if 'additive' of data

+            #    additivecurve = (chr, lodcolumn) ->

+            #        d3.svg.line()

+            #          .x((d) -> xscale[chr](d))

+            #          .y((d,i) -> additive_yscale(data.additiveByChr[chr][i][lodcolumn]))

+      

+            curves = g.append("g").attr("id", "curves")

+      

+            for chr in data.chrnames

+              curves.append("path")

+                    .datum(data.posByChr[chr[0]])

+                    .attr("d", lodcurve(chr[0], lodvarnum))

+                    .attr("stroke", lodlinecolor)

+                    .attr("fill", "none")

+                    .attr("stroke-width", linewidth)

+                    .style("pointer-events", "none")

+            

+            ##if data['additive'].length > 0

+            #if 'additive' of data

+            #    for chr in data.chrnames

+            #        curves.append("path")

+            #              .datum(data.posByChr[chr[0]])

+            #              .attr("d", additivecurve(chr[0], lodvarnum))

+            #              .attr("stroke", additivelinecolor)

+            #              .attr("fill", "none")

+            #              .attr("stroke-width", 1)

+            #              .style("pointer-events", "none")

         

-        ##if data['additive'].length > 0

-        #if 'additive' of data

-        #    for chr in data.chrnames

-        #        curves.append("path")

-        #              .datum(data.posByChr[chr[0]])

-        #              .attr("d", additivecurve(chr[0], lodvarnum))

-        #              .attr("stroke", additivelinecolor)

-        #              .attr("fill", "none")

-        #              .attr("stroke-width", 1)

-        #              .style("pointer-events", "none")

-        #

         # points at markers

+        console.log("before pointsize")

         if pointsize > 0

+            console.log("pointsize > 0 !!!")

           markerpoints = g.append("g").attr("id", "markerpoints_visible")

           markerpoints.selectAll("empty")

                       .data(data.markers)

@@ -347,8 +357,6 @@ lodchart = () ->
                            d3.select(this).attr("opacity", 0)

                                           .call(markertip.hide)

   

-

-  

     ## configuration parameters

     chart.width = (value) ->

       return width unless arguments.length

@@ -374,6 +382,11 @@ lodchart = () ->
       return axispos unless arguments.length

       axispos = value

       chart

+      

+    chart.manhattanPlot = (value) ->

+      return manhattanPlot unless arguments.length

+      manhattanPlot = value

+      chart

   

     chart.ylim = (value) ->

       return ylim unless arguments.length

@@ -481,8 +494,9 @@ lodchart = () ->
     chart.xscale = () ->

       return xscale

   

-    chart.lodcurve = () ->

-      return lodcurve

+    if manhattanPlot == false

+        chart.lodcurve = () ->

+          return lodcurve

     

     #if data['additive'].length > 0

     chart.additivecurve = () ->

@@ -497,99 +511,3 @@ lodchart = () ->
     # return the chart function

     chart

 

-# reorganize lod/pos by chromosome

-# lodvarname==null    -> case for multiple LOD columns (lodheatmap)

-# lodvarname provided -> case for one LOD column (lodchart)

-#reorgLodData = (data, lodvarname=null) ->

-#    data.posByChr = {}

-#    data.lodByChr = {}

-#    data.additiveByChr = {}

-#    

-#    for chr,i in data.chrnames

-#      data.posByChr[chr[0]] = []

-#      data.lodByChr[chr[0]] = []

-#      data.additiveByChr[chr[0]] = []

-#      for pos, j in data.pos

-#        if data.chr[j] == chr[0]

-#          data.posByChr[chr[0]].push(pos)

-#          data.lodnames = [data.lodnames] unless Array.isArray(data.lodnames)

-#          if 'additive' of data  

-#          #if data['additive'].length > 0

-#            additiveval = (data['additive'][j] for lodcolumn in data.lodnames)

-#          lodval = (data[lodcolumn][j] for lodcolumn in data.lodnames)

-#          data.additiveByChr[chr[0]].push(additiveval)

-#          data.lodByChr[chr[0]].push(lodval)

-#

-#    

-#    if lodvarname?

-#      data.markers = []

-#      for marker,i in data.markernames

-#        if marker != ""

-#          data.markers.push({name:marker, chr:data.chr[i], pos:data.pos[i], lod:data[lodvarname][i]})

-#    

-#    data

-

-

-# calculate chromosome start/end + scales, for heat map

-#chrscales = (data, width, chrGap, leftMargin, pad4heatmap) ->

-#    # start and end of chromosome positions

-#    chrStart = []

-#    chrEnd = []

-#    chrLength = []

-#    totalChrLength = 0

-#    maxd = 0

-#    for chr in data.chrnames

-#      d = maxdiff(data.posByChr[chr[0]])

-#      maxd = d if d > maxd

-#  

-#      rng = d3.extent(data.posByChr[chr[0]])

-#      chrStart.push(rng[0])

-#      chrEnd.push(rng[1])

-#      L = rng[1] - rng[0]

-#      chrLength.push(L)

-#      totalChrLength += L

-#  

-#    # adjust lengths for heatmap

-#    if pad4heatmap

-#      data.recwidth = maxd

-#      chrStart = chrStart.map (x) -> x-maxd/2

-#      chrEnd = chrEnd.map (x) -> x+maxd/2

-#      chrLength = chrLength.map (x) -> x+maxd

-#      totalChrLength += (chrLength.length*maxd)

-#  

-#    # break up x axis into chromosomes by length, with gaps

-#    data.chrStart = []

-#    data.chrEnd = []

-#    cur = leftMargin

-#    cur += chrGap/2 unless pad4heatmap

-#    data.xscale = {}

-#    for chr,i in data.chrnames

-#      data.chrStart.push(cur)

-#      w = Math.round((width-chrGap*(data.chrnames.length-pad4heatmap))/totalChrLength*chrLength[i])

-#      data.chrEnd.push(cur + w)

-#      cur = data.chrEnd[i] + chrGap

-#      # x-axis scales, by chromosome

-#      data.xscale[chr[0]] = d3.scale.linear()

-#                           .domain([chrStart[i], chrEnd[i]])

-#                           .range([data.chrStart[i], data.chrEnd[i]])

-#  

-#    # return data with new stuff added

-#    data

-    

-# maximum difference between adjacent values in a vector

-#maxdiff = (x) ->

-#    return null if x.length < 2

-#    result = x[1] - x[0]

-#    return result if x.length < 3

-#    for i in [2...x.length]

-#      d = x[i] - x[i-1]

-#      result = d if d > result

-#    result

-#    

-## determine rounding of axis labels

-#formatAxis = (d) ->

-#    d = d[1] - d[0]

-#    ndig = Math.floor( Math.log(d % 10) / Math.log(10) )

-#    ndig = 0 if ndig > 0

-#    ndig = Math.abs(ndig)

-#    d3.format(".#{ndig}f")

diff --git a/wqflask/wqflask/static/new/javascript/lod_chart.js b/wqflask/wqflask/static/new/javascript/lod_chart.js
index 49ca962f..e6f34854 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_ylab, additive_ylim, additive_yscale, additive_yticks, additivelinecolor, axispos, chart, chrGap, chrSelect, darkrect, height, lightrect, linewidth, lodcurve, lodlinecolor, lodvarname, margin, markerSelect, nyticks, pad4heatmap, pointcolor, pointsAtMarkers, pointsize, pointstroke, rotate_ylab, significantcolor, suggestivecolor, title, titlepos, width, xlab, xscale, ylab, ylim, yscale, yticks;
+  var 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;
   width = 800;
   height = 500;
   margin = {
@@ -19,6 +19,7 @@ lodchart = function() {
     ylabel: 5
   };
   titlepos = 20;
+  manhattanPlot = false;
   ylim = null;
   additive_ylim = null;
   nyticks = 5;
@@ -52,6 +53,10 @@ lodchart = function() {
   chart = function(selection) {
     return selection.each(function(data) {
       var additive_yaxis, chr, curves, g, gEnter, hiddenpoints, lodvarnum, markerpoints, markertip, redraw_plot, rotate_additive_ylab, suggestive_bar, svg, titlegrp, x, xaxis, yaxis, _i, _len, _ref;
+      if (manhattanPlot === true) {
+        pointcolor = "darkslateblue";
+        pointsize = 2;
+      }
       lodvarname = lodvarname != null ? lodvarname : data.lodnames[0];
       data[lodvarname] = (function() {
         var _i, _len, _ref, _results;
@@ -114,6 +119,7 @@ lodchart = function() {
         }
         return lightrect;
       }).attr("stroke", "none").on("click", function(d) {
+        console.log("d is:", d);
         return redraw_plot(d);
       });
       xaxis = g.append("g").attr("class", "x axis");
@@ -129,7 +135,7 @@ lodchart = function() {
         var chr_plot;
         $('#topchart').remove();
         $('#chart_container').append('<div class="qtlcharts" id="topchart"></div>');
-        return chr_plot = new Chr_Interval_Map(600, 1200, chr_ob);
+        return chr_plot = new Chr_Manhattan_Plot(600, 1200, chr_ob);
       };
       rotate_ylab = rotate_ylab != null ? rotate_ylab : ylab.length > 1;
       yaxis = g.append("g").attr("class", "y axis");
@@ -175,27 +181,31 @@ lodchart = function() {
           return yscale(d);
         }).attr("x1", margin.left).attr("x2", margin.left + width).attr("fill", "none").attr("stroke", significantcolor).attr("stroke-width", 5).style("pointer-events", "none");
       }
-      lodcurve = function(chr, lodcolumn) {
-        return d3.svg.line().x(function(d) {
-          return xscale[chr](d);
-        }).y(function(d, i) {
-          return yscale(data.lodByChr[chr][i][lodcolumn]);
-        });
-      };
-      curves = g.append("g").attr("id", "curves");
-      _ref = data.chrnames;
-      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-        chr = _ref[_i];
-        curves.append("path").datum(data.posByChr[chr[0]]).attr("d", lodcurve(chr[0], lodvarnum)).attr("stroke", lodlinecolor).attr("fill", "none").attr("stroke-width", linewidth).style("pointer-events", "none");
+      if (manhattanPlot === false) {
+        lodcurve = function(chr, lodcolumn) {
+          return d3.svg.line().x(function(d) {
+            return xscale[chr](d);
+          }).y(function(d, i) {
+            return yscale(data.lodByChr[chr][i][lodcolumn]);
+          });
+        };
+        curves = g.append("g").attr("id", "curves");
+        _ref = data.chrnames;
+        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+          chr = _ref[_i];
+          curves.append("path").datum(data.posByChr[chr[0]]).attr("d", lodcurve(chr[0], lodvarnum)).attr("stroke", lodlinecolor).attr("fill", "none").attr("stroke-width", linewidth).style("pointer-events", "none");
+        }
       }
+      console.log("before pointsize");
       if (pointsize > 0) {
-        markerpoints = g.append("g").attr("id", "markerpoints_visible");
-        markerpoints.selectAll("empty").data(data.markers).enter().append("circle").attr("cx", function(d) {
-          return xscale[d.chr](d.pos);
-        }).attr("cy", function(d) {
-          return yscale(d.lod);
-        }).attr("r", pointsize).attr("fill", pointcolor).attr("stroke", pointstroke).attr("pointer-events", "hidden");
+        console.log("pointsize > 0 !!!");
       }
+      markerpoints = g.append("g").attr("id", "markerpoints_visible");
+      markerpoints.selectAll("empty").data(data.markers).enter().append("circle").attr("cx", function(d) {
+        return xscale[d.chr](d.pos);
+      }).attr("cy", function(d) {
+        return yscale(d.lod);
+      }).attr("r", pointsize).attr("fill", pointcolor).attr("stroke", pointstroke).attr("pointer-events", "hidden");
       titlegrp = g.append("g").attr("class", "title").append("text").attr("x", margin.left + width / 2).attr("y", margin.top - titlepos).text(title);
       g.append("rect").attr("x", margin.left).attr("y", margin.top).attr("height", height).attr("width", function() {
         if (pad4heatmap) {
@@ -259,6 +269,13 @@ lodchart = function() {
     axispos = value;
     return chart;
   };
+  chart.manhattanPlot = function(value) {
+    if (!arguments.length) {
+      return manhattanPlot;
+    }
+    manhattanPlot = value;
+    return chart;
+  };
   chart.ylim = function(value) {
     if (!arguments.length) {
       return ylim;
@@ -402,9 +419,11 @@ lodchart = function() {
   chart.xscale = function() {
     return xscale;
   };
-  chart.lodcurve = function() {
-    return lodcurve;
-  };
+  if (manhattanPlot === false) {
+    chart.lodcurve = function() {
+      return lodcurve;
+    };
+  }
   chart.additivecurve = function() {
     return additivecurve;
   };
diff --git a/wqflask/wqflask/static/new/javascript/manhattan_plot.coffee b/wqflask/wqflask/static/new/javascript/manhattan_plot.coffee
index cc087493..d637183d 100644
--- a/wqflask/wqflask/static/new/javascript/manhattan_plot.coffee
+++ b/wqflask/wqflask/static/new/javascript/manhattan_plot.coffee
@@ -370,95 +370,3 @@ lodchart = () ->
   

     # return the chart function

     chart

-

-

-# reorganize lod/pos by chromosome

-# lodvarname==null    -> case for multiple LOD columns (lodheatmap)

-# lodvarname provided -> case for one LOD column (lodchart)

-#reorgLodData = (data, lodvarname=null) ->

-#    data.posByChr = {}

-#    data.lodByChr = {}

-#    

-#    for chr,i in data.chrnames

-#      data.posByChr[chr[0]] = []

-#      data.lodByChr[chr[0]] = []

-#      for pos, j in data.pos

-#        if data.chr[j] == chr[0]

-#          data.posByChr[chr[0]].push(pos)

-#          data.lodnames = [data.lodnames] unless Array.isArray(data.lodnames)

-#          lodval = (data[lodcolumn][j] for lodcolumn in data.lodnames)

-#          data.lodByChr[chr[0]].push(lodval)

-#

-#

-#    if lodvarname?

-#      data.markers = []

-#      for marker,i in data.markernames

-#        if marker != ""

-#          data.markers.push({name:marker, chr:data.chr[i], pos:data.pos[i], lod:data[lodvarname][i]})

-#    

-#    data

-

-

-# calculate chromosome start/end + scales, for heat map

-#chrscales = (data, width, chrGap, leftMargin, pad4heatmap) ->

-#    # start and end of chromosome positions

-#    chrStart = []

-#    chrEnd = []

-#    chrLength = []

-#    totalChrLength = 0

-#    maxd = 0

-#    for chr in data.chrnames

-#      d = maxdiff(data.posByChr[chr[0]])

-#      maxd = d if d > maxd

-#  

-#      rng = d3.extent(data.posByChr[chr[0]])

-#      chrStart.push(rng[0])

-#      chrEnd.push(rng[1])

-#      L = rng[1] - rng[0]

-#      chrLength.push(L)

-#      totalChrLength += L

-#  

-#    # adjust lengths for heatmap

-#    if pad4heatmap

-#      data.recwidth = maxd

-#      chrStart = chrStart.map (x) -> x-maxd/2

-#      chrEnd = chrEnd.map (x) -> x+maxd/2

-#      chrLength = chrLength.map (x) -> x+maxd

-#      totalChrLength += (chrLength.length*maxd)

-#  

-#    # break up x axis into chromosomes by length, with gaps

-#    data.chrStart = []

-#    data.chrEnd = []

-#    cur = leftMargin

-#    cur += chrGap/2 unless pad4heatmap

-#    data.xscale = {}

-#    for chr,i in data.chrnames

-#      data.chrStart.push(cur)

-#      w = Math.round((width-chrGap*(data.chrnames.length-pad4heatmap))/totalChrLength*chrLength[i])

-#      data.chrEnd.push(cur + w)

-#      cur = data.chrEnd[i] + chrGap

-#      # x-axis scales, by chromosome

-#      data.xscale[chr[0]] = d3.scale.linear()

-#                           .domain([chrStart[i], chrEnd[i]])

-#                           .range([data.chrStart[i], data.chrEnd[i]])

-#  

-#    # return data with new stuff added

-#    data

-#    

-## maximum difference between adjacent values in a vector

-#maxdiff = (x) ->

-#    return null if x.length < 2

-#    result = x[1] - x[0]

-#    return result if x.length < 3

-#    for i in [2...x.length]

-#      d = x[i] - x[i-1]

-#      result = d if d > result

-#    result

-#    

-## determine rounding of axis labels

-#formatAxis = (d) ->

-#    d = d[1] - d[0]

-#    ndig = Math.floor( Math.log(d % 10) / Math.log(10) )

-#    ndig = 0 if ndig > 0

-#    ndig = Math.abs(ndig)

-#    d3.format(".#{ndig}f")

diff --git a/wqflask/wqflask/static/new/javascript/marker_regression.coffee b/wqflask/wqflask/static/new/javascript/marker_regression.coffee
index 203c174c..959f2366 100755
--- a/wqflask/wqflask/static/new/javascript/marker_regression.coffee
+++ b/wqflask/wqflask/static/new/javascript/marker_regression.coffee
@@ -1,6 +1,6 @@
 root = exports ? this
 
-class Manhattan_Plot

+class Lod_Chart

 

     darkrect = "#F1F1F9"

     lightrect = "#FBFBFF"

@@ -375,36 +375,7 @@ class Manhattan_Plot
                         else

                             return lightrect

                     )

-            )

-            
-            
-    #fill_chr_areas2: () ->
-    #    console.log("cumu_chr_lengths:", @cumulative_chr_lengths)
-    #    console.log("example:", @x_scale(@cumulative_chr_lengths[0]))
-    #    @svg.selectAll("rect.chr_fill_area")
-    #        .data(_.zip(@chr_lengths, @cumulative_chr_lengths), (d) =>
-    #            return d
-    #        )
-    #        .enter()
-    #        .append("rect")
-    #        .attr("x", (d) =>
-    #            if i == 0
-    #                return @x_scale(0)
-    #            else
-    #                return @x_scale(d[1])
-    #        )
-    #        .attr("y", @y_buffer)
-    #        .attr("width", (d) =>
-    #            return @x_scale(d[0])
-    #        )
-    #        .attr("height", @height-@y_buffer)
-    #        .attr("fill", (d, i) =>
-    #            return "whitesmoke"
-    #            #if i%2
-    #            #    return "whitesmoke"
-    #            #else
-    #            #    return "none"
-    #        )
+            )
 
     add_chr_labels: () ->
         chr_names = []
@@ -533,6 +504,6 @@ class Manhattan_Plot
       @svg.select("path.line").attr("d", line);
     
     
-root.Manhattan_Plot = Manhattan_Plot
+#root.LodChart = Lod_Chart
 
-new Manhattan_Plot(600, 1200)
\ No newline at end of file
+new Lod_Chart(600, 1200)
\ 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 1fcee9fd..1bdc784f 100755
--- a/wqflask/wqflask/static/new/javascript/marker_regression.js
+++ b/wqflask/wqflask/static/new/javascript/marker_regression.js
@@ -1,10 +1,10 @@
 // Generated by CoffeeScript 1.7.1
-var Manhattan_Plot, root,
+var Lod_Chart, root,
   __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; };
 
 root = typeof exports !== "undefined" && exports !== null ? exports : this;
 
-Manhattan_Plot = (function() {
+Lod_Chart = (function() {
   var darkrect, hoverrect, lightrect;
 
   darkrect = "#F1F1F9";
@@ -13,7 +13,7 @@ Manhattan_Plot = (function() {
 
   hoverrect = "#E9CFEC";
 
-  function Manhattan_Plot(height, width) {
+  function Lod_Chart(height, width) {
     var _ref;
     this.height = height != null ? height : 800;
     this.width = width != null ? width : 1200;
@@ -54,7 +54,7 @@ Manhattan_Plot = (function() {
     console.timeEnd('Create graph');
   }
 
-  Manhattan_Plot.prototype.get_max_chr = function() {
+  Lod_Chart.prototype.get_max_chr = function() {
     var chr, max_chr, result, _i, _len, _ref;
     max_chr = 0;
     _ref = this.qtl_results;
@@ -71,7 +71,7 @@ Manhattan_Plot = (function() {
     return max_chr;
   };
 
-  Manhattan_Plot.prototype.get_chr_lengths = function() {
+  Lod_Chart.prototype.get_chr_lengths = function() {
 
     /*
      *Gets a list of both individual and cumulative (the position of one on the graph
@@ -93,7 +93,7 @@ Manhattan_Plot = (function() {
     return [chr_lengths, cumulative_chr_lengths];
   };
 
-  Manhattan_Plot.prototype.get_qtl_count = function() {
+  Lod_Chart.prototype.get_qtl_count = function() {
     var high_qtl_count, result, _i, _len, _ref;
     high_qtl_count = 0;
     _ref = js_data.qtl_results;
@@ -107,7 +107,7 @@ Manhattan_Plot = (function() {
     return this.y_axis_filter = 0;
   };
 
-  Manhattan_Plot.prototype.create_coordinates = function() {
+  Lod_Chart.prototype.create_coordinates = function() {
     var chr_length, chr_lengths, chr_seen, result, _i, _len, _ref, _ref1;
     chr_lengths = [];
     chr_seen = [];
@@ -139,7 +139,7 @@ Manhattan_Plot = (function() {
     return this.total_length += parseFloat(chr_lengths[chr_lengths.length - 1]);
   };
 
-  Manhattan_Plot.prototype.show_marker_in_table = function(marker_info) {
+  Lod_Chart.prototype.show_marker_in_table = function(marker_info) {
     var marker_name;
     console.log("in show_marker_in_table");
 
@@ -150,13 +150,13 @@ Manhattan_Plot = (function() {
     }
   };
 
-  Manhattan_Plot.prototype.create_svg = function() {
+  Lod_Chart.prototype.create_svg = function() {
     var svg;
     svg = d3.select("#manhattan_plot").append("svg").attr("class", "manhattan_plot").attr("width", this.width + this.x_buffer).attr("height", this.height + this.y_buffer).append("g");
     return svg;
   };
 
-  Manhattan_Plot.prototype.create_graph = function() {
+  Lod_Chart.prototype.create_graph = function() {
     this.create_legend();
     this.add_border();
     this.add_x_axis();
@@ -168,12 +168,12 @@ Manhattan_Plot = (function() {
     return this.add_plot_points();
   };
 
-  Manhattan_Plot.prototype.create_legend = function() {
+  Lod_Chart.prototype.create_legend = function() {
     this.svg.append("text").attr("class", "legend").text("Trait: " + this.this_trait + " : " + this.data_set).attr("x", this.x_buffer).attr("y", 20).attr("dx", "0em").attr("text-anchor", "left").attr("font-family", "sans-serif").attr("font-size", "16px").attr("fill", "black");
     return this.svg.append("text").attr("class", "legend").text("MAF: " + this.maf).attr("x", this.x_buffer).attr("y", 38).attr("dx", "0em").attr("text-anchor", "left").attr("font-family", "sans-serif").attr("font-size", "16px").attr("fill", "black");
   };
 
-  Manhattan_Plot.prototype.add_border = function() {
+  Lod_Chart.prototype.add_border = function() {
     var border_coords;
     border_coords = [[this.y_buffer + this.legend_buffer, this.height, this.x_buffer, this.x_buffer], [this.y_buffer + this.legend_buffer, this.height, this.width, this.width], [this.y_buffer + this.legend_buffer, this.y_buffer + this.legend_buffer, this.x_buffer, this.width], [this.height, this.height, this.x_buffer, this.width]];
     return this.svg.selectAll("line").data(border_coords).enter().append("line").attr("y1", (function(_this) {
@@ -195,7 +195,7 @@ Manhattan_Plot = (function() {
     })(this)).style("stroke", "#000");
   };
 
-  Manhattan_Plot.prototype.create_scales = function() {
+  Lod_Chart.prototype.create_scales = function() {
     console.log("y_axis_filter:", this.y_axis_filter);
     if ('24' in this.chromosomes) {
       console.log("@chromosomes[24]:", this.chromosomes['24']);
@@ -209,7 +209,7 @@ Manhattan_Plot = (function() {
     return this.y_scale = d3.scale.linear().domain([this.y_axis_filter, this.y_max]).range([this.height, this.y_buffer + this.legend_buffer]);
   };
 
-  Manhattan_Plot.prototype.create_x_axis_tick_values = function() {
+  Lod_Chart.prototype.create_x_axis_tick_values = function() {
     var chr_ticks, i, length, tick, tick_count, tick_val, tick_vals, val, _i, _j, _k, _len, _ref, _ref1, _ref2;
     tick_vals = [];
     for (val = _i = 25, _ref = this.cumulative_chr_lengths[0]; 25 <= _ref ? _i <= _ref : _i >= _ref; val = 25 <= _ref ? ++_i : --_i) {
@@ -235,7 +235,7 @@ Manhattan_Plot = (function() {
     return tick_vals;
   };
 
-  Manhattan_Plot.prototype.add_x_axis = function() {
+  Lod_Chart.prototype.add_x_axis = function() {
     var next_chr, tmp_tick_val;
     this.xAxis = d3.svg.axis().scale(this.x_scale).orient("bottom").tickValues(this.create_x_axis_tick_values());
     next_chr = 1;
@@ -267,16 +267,16 @@ Manhattan_Plot = (function() {
     })(this));
   };
 
-  Manhattan_Plot.prototype.add_y_axis = function() {
+  Lod_Chart.prototype.add_y_axis = function() {
     this.yAxis = d3.svg.axis().scale(this.y_scale).orient("left").ticks(5);
     return this.svg.append("g").attr("class", "y_axis").attr("transform", "translate(" + this.x_buffer + ",0)").call(this.yAxis);
   };
 
-  Manhattan_Plot.prototype.add_axis_labels = function() {
+  Lod_Chart.prototype.add_axis_labels = function() {
     return this.svg.append("text").attr("transform", "rotate(-90)").attr("y", 0 - (this.height / 2)).attr("x", this.x_buffer).attr("dy", "1em").style("text-anchor", "middle").text("LOD Score");
   };
 
-  Manhattan_Plot.prototype.add_chr_lines = function() {
+  Lod_Chart.prototype.add_chr_lines = function() {
     return this.svg.selectAll("line").data(this.cumulative_chr_lengths, (function(_this) {
       return function(d) {
         return d;
@@ -284,7 +284,7 @@ Manhattan_Plot = (function() {
     })(this)).enter().append("line").attr("x1", this.x_scale).attr("x2", this.x_scale).attr("y1", this.y_buffer + this.legend_buffer).attr("y2", this.height).style("stroke", "#ccc");
   };
 
-  Manhattan_Plot.prototype.fill_chr_areas = function() {
+  Lod_Chart.prototype.fill_chr_areas = function() {
     console.log("cumu_chr_lengths:", this.cumulative_chr_lengths);
     console.log("example:", this.x_scale(this.cumulative_chr_lengths[0]));
     return this.svg.selectAll("rect.chr_fill_area").data(_.zip(this.chr_lengths, this.cumulative_chr_lengths), (function(_this) {
@@ -338,7 +338,7 @@ Manhattan_Plot = (function() {
     })(this));
   };
 
-  Manhattan_Plot.prototype.add_chr_labels = function() {
+  Lod_Chart.prototype.add_chr_labels = function() {
     var chr_info, chr_names, key;
     chr_names = [];
     for (key in this.chromosomes) {
@@ -378,7 +378,7 @@ Manhattan_Plot = (function() {
     })(this));
   };
 
-  Manhattan_Plot.prototype.add_plot_points = function() {
+  Lod_Chart.prototype.add_plot_points = function() {
     return this.plot_point = this.svg.selectAll("circle").data(this.plot_coordinates).enter().append("circle").attr("cx", (function(_this) {
       return function(d) {
         return _this.x_scale(d[0]);
@@ -424,7 +424,7 @@ Manhattan_Plot = (function() {
     })(this));
   };
 
-  Manhattan_Plot.prototype.redraw_plot = function(chr_ob) {
+  Lod_Chart.prototype.redraw_plot = function(chr_ob) {
     console.log("chr_name is:", chr_ob[0]);
     console.log("chr_length is:", chr_ob[1]);
     $('#manhattan_plot').remove();
@@ -432,23 +432,21 @@ Manhattan_Plot = (function() {
     return root.chr_plot = new Chr_Manhattan_Plot(600, 1200, chr_ob);
   };
 
-  Manhattan_Plot.prototype.create_zoom_pane = function() {
+  Lod_Chart.prototype.create_zoom_pane = function() {
     var zoom;
     zoom = d3.behavior.zoom().on("zoom", draw);
     return this.svg.append("rect").attr("class", "pane").attr("width", this.width).attr("height", this.height).call(zoom);
   };
 
-  Manhattan_Plot.prototype.draw = function() {
+  Lod_Chart.prototype.draw = function() {
     this.svg.select("g.x_axis").call(this.xAxis);
     this.svg.select("g.y_axis").call(this.yAxis);
     this.svg.select("path.area").attr("d", area);
     return this.svg.select("path.line").attr("d", line);
   };
 
-  return Manhattan_Plot;
+  return Lod_Chart;
 
 })();
 
-root.Manhattan_Plot = Manhattan_Plot;
-
-new Manhattan_Plot(600, 1200);
+new Lod_Chart(600, 1200);
diff --git a/wqflask/wqflask/static/new/javascript/search_results.coffee b/wqflask/wqflask/static/new/javascript/search_results.coffee
index 84cf7f0a..c4e6b1a2 100755
--- a/wqflask/wqflask/static/new/javascript/search_results.coffee
+++ b/wqflask/wqflask/static/new/javascript/search_results.coffee
@@ -44,16 +44,16 @@ $ ->
             for item in buttons
                 console.log("  processing item:", item)
                 text = $(item).html()
-                if text.indexOf("Records") == -1
-                    text = text.replace("Record", "Records")
-                    $(item).html(text)
+                #if text.indexOf("Records") == -1
+                #    text = text.replace("Record", "Records")
+                #    $(item).html(text)
         else
             console.log("in loop")
             for item in buttons
                 console.log("  processing item:", item)
                 text = $(item).html()
-                text = text.replace("Records", "Record")
-                $(item).html(text)
+                #text = text.replace("Records", "Record")
+                #$(item).html(text)
 
 
     # remove is only used by collections view
diff --git a/wqflask/wqflask/static/new/javascript/search_results.js b/wqflask/wqflask/static/new/javascript/search_results.js
index e6f55624..6c077c67 100755
--- a/wqflask/wqflask/static/new/javascript/search_results.js
+++ b/wqflask/wqflask/static/new/javascript/search_results.js
@@ -49,13 +49,7 @@ $(function() {
       for (_k = 0, _len2 = buttons.length; _k < _len2; _k++) {
         item = buttons[_k];
         console.log("  processing item:", item);
-        text = $(item).html();
-        if (text.indexOf("Records") === -1) {
-          text = text.replace("Record", "Records");
-          _results.push($(item).html(text));
-        } else {
-          _results.push(void 0);
-        }
+        _results.push(text = $(item).html());
       }
       return _results;
     } else {
@@ -64,9 +58,7 @@ $(function() {
       for (_l = 0, _len3 = buttons.length; _l < _len3; _l++) {
         item = buttons[_l];
         console.log("  processing item:", item);
-        text = $(item).html();
-        text = text.replace("Records", "Record");
-        _results1.push($(item).html(text));
+        _results1.push(text = $(item).html());
       }
       return _results1;
     }
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 fc687c7a..72d2bbe4 100755
--- a/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.coffee
+++ b/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.coffee
@@ -171,11 +171,14 @@ $ ->
         #return false
     )
     
+    
+    
     $("#rqtl_geno_compute").click(() =>
         $("#progress_bar_container").modal()
         url = "/marker_regression"
         $('input[name=method]').val("rqtl_geno")
         $('input[name=num_perm]').val($('input[name=num_perm_rqtl_geno]').val())
+        $('input[name=manhattan_plot]').val($('input[name=manhattan_plot_rqtl]:checked').val())
         $('input[name=control_marker]').val($('input[name=control_rqtl_geno]').val())
         form_data = $('#trait_data_form').serialize()
         console.log("form_data is:", form_data)
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 a8a42ffa..4eaceffe 100755
--- a/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js
+++ b/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js
@@ -137,6 +137,7 @@ $(function() {
       url = "/marker_regression";
       $('input[name=method]').val("rqtl_geno");
       $('input[name=num_perm]').val($('input[name=num_perm_rqtl_geno]').val());
+      $('input[name=manhattan_plot]').val($('input[name=manhattan_plot_rqtl]:checked').val());
       $('input[name=control_marker]').val($('input[name=control_rqtl_geno]').val());
       form_data = $('#trait_data_form').serialize();
       console.log("form_data is:", form_data);
diff --git a/wqflask/wqflask/templates/correlation_page.html b/wqflask/wqflask/templates/correlation_page.html
index 61d17a22..88f6d65a 100755
--- a/wqflask/wqflask/templates/correlation_page.html
+++ b/wqflask/wqflask/templates/correlation_page.html
@@ -1,6 +1,5 @@
 {% extends "base.html" %}
 {% block css %}
-    <link rel="stylesheet" type="text/css" href="/static/packages/jqplot/jquery.jqplot.min.css" />
     <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/css/jquery.dataTables.css" />
     <link rel="stylesheet" type="text/css" href="/static/packages/DT_bootstrap/DT_bootstrap.css" />
     <link rel="stylesheet" type="text/css" href="/static/packages/TableTools/media/css/TableTools.css" />
diff --git a/wqflask/wqflask/templates/marker_regression.html b/wqflask/wqflask/templates/marker_regression.html
index 451b3754..51aab95c 100755
--- a/wqflask/wqflask/templates/marker_regression.html
+++ b/wqflask/wqflask/templates/marker_regression.html
@@ -88,7 +88,8 @@
     <script language="javascript" type="text/javascript" src="/static/new/packages/jsPDF/jspdf.plugin.from_html.js"></script>-->

     <script language="javascript" type="text/javascript" src="/static/new/javascript/panelutil.js"></script>

     <script language="javascript" type="text/javascript" src="/static/new/javascript/chr_manhattan_plot.js"></script>

-    <script language="javascript" type="text/javascript" src="/static/new/javascript/manhattan_plot.js"></script>

+<!--    <script language="javascript" type="text/javascript" src="/static/new/javascript/manhattan_plot.js"></script>-->

+    <script language="javascript" type="text/javascript" src="/static/new/javascript/lod_chart.js"></script>

     <script language="javascript" type="text/javascript" src="/static/new/javascript/create_manhattan_plot.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>

diff --git a/wqflask/wqflask/templates/search_result_page.html b/wqflask/wqflask/templates/search_result_page.html
index 5bd6534c..0baac2d3 100755
--- a/wqflask/wqflask/templates/search_result_page.html
+++ b/wqflask/wqflask/templates/search_result_page.html
@@ -1,5 +1,10 @@
 {% extends "base.html" %}
 {% block title %}Search Results{% endblock %}
+{% block css %}
+    <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/css/jquery.dataTables.css" />
+    <link rel="stylesheet" type="text/css" href="/static/packages/DT_bootstrap/DT_bootstrap.css" />
+    <link rel="stylesheet" type="text/css" href="/static/packages/TableTools/media/css/TableTools.css" />
+{% endblock %}
 {% block content %}
 <!-- Start of body -->
     {{ header("Search Results",
@@ -27,7 +32,7 @@
         Check records below and click Add button to add to selection.</p>
 
         <div class="bs-docs-example">
-            <table class="table table-hover" id='trait_table'>
+            <table class="table table-hover table-striped" id='trait_table'>
                 <thead>
                     <tr>
                     {% for header in header_fields %}
@@ -78,7 +83,8 @@
             </table>
 
             <br />
-
+            <br />
+            
             <button class="btn" id="select_all"><i class="icon-ok"></i> Select All</button>
             <button class="btn" id="deselect_all"><i class="icon-remove"></i> Deselect All</button>
             <button class="btn" id="invert"><i class="icon-resize-vertical"></i> Invert</button>
@@ -95,4 +101,24 @@
 
 {% block js %}
     <script type="text/javascript" src="/static/new/javascript/search_results.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/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">
+        $(document).ready( function () {
+            console.time("Creating table");
+            $('#trait_table').dataTable( {
+                //"sDom": "<<'span3'l><'span3'T><'span4'f>'row-fluid'r>t<'row-fluid'<'span6'i><'span6'p>>",
+                "sDom": "lftipr",
+                "iDisplayLength": 50,
+                "bLengthChange": true,
+                "bDeferRender": true,
+                "bSortClasses": false
+            } );
+            console.timeEnd("Creating table");
+        });
+    </script>
+    
 {% endblock %}
diff --git a/wqflask/wqflask/templates/show_trait.html b/wqflask/wqflask/templates/show_trait.html
index cbb06285..7bbebd72 100755
--- a/wqflask/wqflask/templates/show_trait.html
+++ b/wqflask/wqflask/templates/show_trait.html
@@ -109,7 +109,8 @@
                 console.time("Creating table");
                 
                 {% if sample_groups[0].se_exists() %}
-                    $('#samples_primary, #samples_other').find("tr.outlier").css('background-color', 'yellow').dataTable( {
+                    $('#samples_primary, #samples_other').find("tr.outlier").css('background-color', 'yellow')
+                    $('#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" },
diff --git a/wqflask/wqflask/templates/show_trait_mapping_tools.html b/wqflask/wqflask/templates/show_trait_mapping_tools.html
index c58b7729..e5d96490 100755
--- a/wqflask/wqflask/templates/show_trait_mapping_tools.html
+++ b/wqflask/wqflask/templates/show_trait_mapping_tools.html
@@ -135,14 +135,14 @@
                 
                 <div class="tab-pane" id="pylmm">
                     <div class="control-group" id="display_all_div">
-                        <label class="control-label">Display all</label>
+                        <label class="control-label">Manhattan Plot</label>
                         <div class="controls">                      
                             <label class="radio inline">
-                                <input type="radio" name="display_all_pylmm" value="True" checked>
+                                <input type="radio" name="manhattan_plot_pylmm" value=true checked>
                                 Yes
                             </label>
                             <label class="radio inline">
-                                <input type="radio" name="display_all_pylmm" value="False">
+                                <input type="radio" name="manhattan_plot_pylmm" value=false>
                                 No
                             </label>
                         </div>
@@ -185,9 +185,27 @@
                     <div class="control-group">
                         <label for="control_rqtl_geno" class="control-label">Control Marker</label>
                         <div class="controls">
-                            <input name="control_rqtl_geno" value="{{ nearest_marker }}" type="text" />
+                            {% if dataset.type == 'ProbeSet' %}
+                            <input name="control_rqtl_geno" value="{{ nearest_marker1+","+nearest_marker2 }}" type="text" />
+                            {% else %}
+                            <input name="control_rqtl_geno" value="" type="text" />
+                            {% endif %}
                         </div>
                     </div>
+                    <div class="control-group mapping_method_fields">
+                        <label class="control-label">Manhattan Plot</label>
+                        <div class="controls">                      
+                            <label class="radio inline">
+                                <input type="radio" name="manhattan_plot_rqtl" value=true checked>
+                                Yes
+                            </label>
+                            <label class="radio inline">
+                                <input type="radio" name="manhattan_plot_rqtl" value=false>
+                                No
+                            </label>
+                        </div>
+                    </div>
+
                     
                     <div class="control-group">
                         <div class="controls">
@@ -199,7 +217,7 @@
                             </button>
                         </div>
                     </div>
-                    
+       
                 </div>
                 
                 {% if dataset.group.species == 'human' %}
diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py
index 26e690d4..869bd621 100755
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -254,6 +254,7 @@ def marker_regression_page():
         'suggestive',
         'num_perm',
         'maf',
+        'manhattan_plot',
         'control_marker',
         'control_marker_db'
     )
@@ -337,7 +338,7 @@ def interval_mapping_page():
         'dataset',
         'mapping_method',
         'chromosome',
-        'num_permutations',
+        'num_perm',
         'do_bootstraps',
         'display_additive',
         'default_control_locus',