about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--[-rwxr-xr-x]wqflask/wqflask/interval_analyst/GeneUtil.py98
-rw-r--r--wqflask/wqflask/marker_regression/marker_regression.py22
-rw-r--r--wqflask/wqflask/marker_regression/marker_regression_gn1.py83
-rw-r--r--wqflask/wqflask/templates/marker_regression_gn1.html7
-rw-r--r--wqflask/wqflask/views.py1
5 files changed, 93 insertions, 118 deletions
diff --git a/wqflask/wqflask/interval_analyst/GeneUtil.py b/wqflask/wqflask/interval_analyst/GeneUtil.py
index 43008ecf..a8a48786 100755..100644
--- a/wqflask/wqflask/interval_analyst/GeneUtil.py
+++ b/wqflask/wqflask/interval_analyst/GeneUtil.py
@@ -1,46 +1,24 @@
-# Copyright (C) University of Tennessee Health Science Center, Memphis, TN.
-#
-# This program is free software: you can redistribute it and/or modify it
-# under the terms of the GNU Affero General Public License
-# as published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the GNU Affero General Public License for more details.
-#
-# This program is available from Source Forge: at GeneNetwork Project
-# (sourceforge.net/projects/genenetwork/).
-#
-# Contact Drs. Robert W. Williams and Xiaodong Zhou (2010)
-# at rwilliams@uthsc.edu and xzhou15@uthsc.edu
-#
-#
-#
-# This module is used by GeneNetwork project (www.genenetwork.org)
-#
-# Created by GeneNetwork Core Team 2010/08/10
-#
-# Last updated by GeneNetwork Core Team 2010/10/20
+from __future__ import absolute_import, print_function, division
 
 import string
 
+from flask import Flask, g
+
 #Just return a list of dictionaries
 #each dictionary contains sub-dictionary
-def loadGenes(cursor, chrName, diffCol, startMb, endMb, webqtlDb =None, species='mouse'):
-	#cursor.execute("desc GeneList")
-	#results = cursor.fetchall()
-	#fetchFields = map(lambda X:X[0], results)
+def loadGenes(chrName, diffCol, startMb, endMb, webqtlDb =None, species='mouse'):
 	fetchFields = ['SpeciesId', 'Id', 'GeneSymbol', 'GeneDescription', 'Chromosome', 'TxStart', 'TxEnd', 
 	'Strand', 'GeneID', 'NM_ID', 'kgID', 'GenBankID', 'UnigenID', 'ProteinID', 'AlignID', 
 	'exonCount', 'exonStarts', 'exonEnds', 'cdsStart', 'cdsEnd']
 	
 	##List All Species in the Gene Table
 	speciesDict = {}
-	cursor.execute("select Species.Name, GeneList.SpeciesId from Species, GeneList where \
-			GeneList.SpeciesId = Species.Id group by GeneList.SpeciesId")
-	results = cursor.fetchall()
+	results = g.db.execute("""
+                SELECT Species.Name, GeneList.SpeciesId
+                FROM Species, GeneList
+                WHERE GeneList.SpeciesId = Species.Id 
+                GROUP BY GeneList.SpeciesId""").fetchall()
+
 	for item in results:
 		speciesDict[item[0]] = item[1]
 	
@@ -49,14 +27,17 @@ def loadGenes(cursor, chrName, diffCol, startMb, endMb, webqtlDb =None, species=
 	otherSpecies = map(lambda X: [X, speciesDict[X]], speciesDict.keys())
 	otherSpecies.remove([species, speciesId])
 
-	cursor.execute("""SELECT %s from GeneList 
-						where 
-					SpeciesId = %d AND Chromosome = '%s' AND
-					((TxStart > %f and TxStart <= %f) OR (TxEnd > %f and TxEnd <= %f))
-					order by txStart
-					""" 
-					% (string.join(fetchFields, ", "), speciesId, chrName, startMb, endMb, startMb, endMb))
-	results = cursor.fetchall()
+	results = g.db.execute("""
+                SELECT %s FROM GeneList 
+				WHERE SpeciesId = %d AND 
+                      Chromosome = '%s' AND
+					  ((TxStart > %f and TxStart <= %f) OR (TxEnd > %f and TxEnd <= %f))
+				ORDER BY txStart
+                """ % (string.join(fetchFields, ", "), 
+                       speciesId, chrName, 
+                       startMb, endMb, 
+                       startMb, endMb)).fetchall()
+
 	GeneList = []
 
 	if results:
@@ -66,14 +47,13 @@ def loadGenes(cursor, chrName, diffCol, startMb, endMb, webqtlDb =None, species=
 				newdict[item] = result[j]
 			#count SNPs if possible	
 			if diffCol and species=='mouse':
-				cursor.execute("""
-					select 
-						count(*) from BXDSnpPosition
-					where 
-						Chr = '%s' AND Mb >= %2.6f AND Mb < %2.6f AND
-						StrainId1 = %d AND StrainId2 = %d
-				""" % (chrName, newdict["TxStart"], newdict["TxEnd"], diffCol[0], diffCol[1]))
-				newdict["snpCount"] = cursor.fetchone()[0]
+				newdict["snpCount"] = g.db.execute("""
+                                        SELECT count(*) 
+                                        FROM BXDSnpPosition
+                                        WHERE Chr = '%s' AND 
+                                              Mb >= %2.6f AND Mb < %2.6f AND
+                                              StrainId1 = %d AND StrainId2 = %d
+                                        """ % (chrName, newdict["TxStart"], newdict["TxEnd"], diffCol[0], diffCol[1])).fetchone()[0]
 				newdict["snpDensity"] = newdict["snpCount"]/(newdict["TxEnd"]-newdict["TxStart"])/1000.0
 			else:
 				newdict["snpDensity"] = newdict["snpCount"] = 0
@@ -88,24 +68,24 @@ def loadGenes(cursor, chrName, diffCol, startMb, endMb, webqtlDb =None, species=
 				othSpec, othSpecId = item
 				newdict2 = {}
 				
-				cursor.execute("SELECT %s from GeneList where SpeciesId = %d and geneSymbol= '%s' limit 1" % 
-							(string.join(fetchFields, ", "), othSpecId, newdict["GeneSymbol"]))
-				resultsOther = cursor.fetchone()
+				resultsOther = g.db.execute("SELECT %s FROM GeneList WHERE SpeciesId = %d AND geneSymbol= '%s' LIMIT 1" % (string.join(fetchFields, ", "), 
+                                                                                                                           othSpecId, 
+                                                                                                                           newdict["GeneSymbol"])).fetchone()
+
 				if resultsOther:
 					for j, item in enumerate(fetchFields):
 						newdict2[item] = resultsOther[j]
 							
 					#count SNPs if possible, could be a separate function	
 					if diffCol and othSpec == 'mouse':
-						cursor.execute("""
-							select
-								count(*) from BXDSnpPosition
-							where
-								Chr = '%s' AND Mb >= %2.6f AND Mb < %2.6f AND
-								StrainId1 = %d AND StrainId2 = %d
-							""" % (chrName, newdict["TxStart"], newdict["TxEnd"], diffCol[0], diffCol[1]))
+						newdict2["snpCount"] = g.db.execute("""
+                                                    SELECT count(*) 
+                                                    FROM BXDSnpPosition
+                                                    WHERE Chr = '%s' AND 
+                                                          Mb >= %2.6f AND Mb < %2.6f AND
+                                                          StrainId1 = %d AND StrainId2 = %d
+                                                    """ % (chrName, newdict["TxStart"], newdict["TxEnd"], diffCol[0], diffCol[1])).fetchone()[0]
 
-						newdict2["snpCount"] = cursor.fetchone()[0]
 						newdict2["snpDensity"] = newdict2["snpCount"]/(newdict2["TxEnd"]-newdict2["TxStart"])/1000.0
 					else:
 						newdict2["snpDensity"] = newdict2["snpCount"] = 0
diff --git a/wqflask/wqflask/marker_regression/marker_regression.py b/wqflask/wqflask/marker_regression/marker_regression.py
index 6d996bd3..fb7efd0f 100644
--- a/wqflask/wqflask/marker_regression/marker_regression.py
+++ b/wqflask/wqflask/marker_regression/marker_regression.py
@@ -32,15 +32,15 @@ from base import data_set
 from base import species
 from base import webqtlConfig
 from utility import webqtlUtil
-#from wqflask.marker_regression import qtl_reaper_mapping
-#from wqflask.marker_regression import plink_mapping
-from wqflask.marker_regression import gemma_mapping
-#from wqflask.marker_regression import rqtl_mapping
 from utility import helper_functions
 from utility import Plot, Bunch
 from utility import temp_data
 from utility.benchmark import Bench
 from utility.tools import pylmm_command, plink_command, gemma_command
+from wqflask.marker_regression import gemma_mapping
+#from wqflask.marker_regression import qtl_reaper_mapping
+#from wqflask.marker_regression import plink_mapping
+#from wqflask.marker_regression import rqtl_mapping
 
 PYLMM_PATH,PYLMM_COMMAND = pylmm_command()
 PLINK_PATH,PLINK_COMMAND = plink_command()
@@ -83,14 +83,22 @@ class MarkerRegression(object):
 
         #ZS: This is passed to GN1 code for single chr mapping
         self.selected_chr = -1
-        #if "chromosomes" in start_vars:
-        #    self.selected_chr = int(start_vars['chromosomes']) + 1
         if "selected_chr" in start_vars:
-            self.selected_chr = int(start_vars['selected_chr']) + 1
+            if int(start_vars['selected_chr']) != -1: #ZS: Needs to be -1 if showing full map; there's probably a better way to fix this
+                self.selected_chr = int(start_vars['selected_chr']) + 1
+            else:
+                self.selected_chr = int(start_vars['selected_chr'])
         if "startMb" in start_vars:
             self.startMb = start_vars['startMb']
         if "endMb" in start_vars:
             self.endMb = start_vars['endMb']
+        if "startMb" in start_vars: #ZS: This is to ensure showGenes is checked the first time you open the mapping page, since startMb will only not be set during the first load
+            if "showGenes" in start_vars:
+                self.showGenes = start_vars['showGenes']
+            else:
+                self.showGenes = False 
+        else:
+            self.showGenes = "ON"
  
         self.dataset.group.get_markers()
         if self.mapping_method == "gemma":
diff --git a/wqflask/wqflask/marker_regression/marker_regression_gn1.py b/wqflask/wqflask/marker_regression/marker_regression_gn1.py
index bb8f7b11..83b33353 100644
--- a/wqflask/wqflask/marker_regression/marker_regression_gn1.py
+++ b/wqflask/wqflask/marker_regression/marker_regression_gn1.py
@@ -36,18 +36,18 @@ from flask import Flask, g
 
 from htmlgen import HTMLgen2 as HT
 
-
-from utility import helper_functions
-from utility import Plot
 from base import webqtlConfig
-#from intervalAnalyst import GeneUtil
 #from base.webqtlTrait import webqtlTrait
 #from base.templatePage import templatePage
+#from base.GeneralObject import GeneralObject
 from utility import webqtlUtil
+from utility import helper_functions
+from utility import Plot
 #from utility.THCell import THCell
 #from utility.TDCell import TDCell
+from wqflask.interval_analyst import GeneUtil
+
 #from dbFunction import webqtlDatabaseFunction
-#from base.GeneralObject import GeneralObject
 
 #import logging
 #logging.basicConfig(filename="/tmp/gn_leiyan.log", level=logging.INFO)
@@ -228,8 +228,9 @@ class MarkerRegression(object):
         else:
             self.permChecked = True
         #self.permChecked = fd.formdata.getvalue('permCheck', True)
-        self.bootChecked = False #ZS: For now setting to False, I'll add this option later once rest of figure works
         #self.bootChecked = fd.formdata.getvalue('bootCheck', '')
+        self.bootChecked = False #ZS: For now setting to False, I'll add this option later once rest of figure works
+
         if 'do_control' in start_vars.keys():
             self.doControl = start_vars['do_control']
         else:
@@ -258,26 +259,15 @@ class MarkerRegression(object):
 
         #Darwing Options
         try:
-            if self.selectedChr > -1:
-                self.graphWidth  = min(self.GRAPH_MAX_WIDTH, self.GRAPH_MIN_WIDTH)
-            else:
-                self.graphWidth  = min(self.GRAPH_MAX_WIDTH, self.MULT_GRAPH_MIN_WIDTH)
+           if self.selectedChr > -1:
+               self.graphWidth  = min(self.GRAPH_MAX_WIDTH, max(self.GRAPH_MIN_WIDTH, int(fd.formdata.getvalue('graphWidth'))))
+           else:
+               self.graphWidth  = min(self.GRAPH_MAX_WIDTH, max(self.MULT_GRAPH_MIN_WIDTH, int(fd.formdata.getvalue('graphWidth'))))
         except:
-            if self.selectedChr > -1:
-                self.graphWidth  = self.GRAPH_DEFAULT_WIDTH
-            else:
-                self.graphWidth  = self.MULT_GRAPH_DEFAULT_WIDTH
-
-        #try:
-        #    if self.selectedChr > -1:
-        #        self.graphWidth  = min(self.GRAPH_MAX_WIDTH, max(self.GRAPH_MIN_WIDTH, int(fd.formdata.getvalue('graphWidth'))))
-        #    else:
-        #        self.graphWidth  = min(self.GRAPH_MAX_WIDTH, max(self.MULT_GRAPH_MIN_WIDTH, int(fd.formdata.getvalue('graphWidth'))))
-        #except:
-        #    if self.selectedChr > -1:
-        #        self.graphWidth  = self.GRAPH_DEFAULT_WIDTH
-        #    else:
-        #        self.graphWidth  = self.MULT_GRAPH_DEFAULT_WIDTH
+           if self.selectedChr > -1:
+               self.graphWidth  = self.GRAPH_DEFAULT_WIDTH
+           else:
+               self.graphWidth  = self.MULT_GRAPH_DEFAULT_WIDTH
 
 ## BEGIN HaplotypeAnalyst
         #self.haplotypeAnalystChecked = fd.formdata.getvalue('haplotypeAnalystCheck')
@@ -293,7 +283,10 @@ class MarkerRegression(object):
         self.cutoff = start_vars['cutoff']
         self.intervalAnalystChecked = False
         self.legendChecked = False
-        self.geneChecked = False
+        if 'showGenes' in start_vars.keys():
+            self.geneChecked = start_vars['showGenes']
+        else:
+            self.geneChecked = False
         self.SNPChecked  = False
         self.draw2X = False
         self.lrsMax = 0
@@ -491,23 +484,17 @@ class MarkerRegression(object):
 
         geneTable = ""
 
-        #if self.plotScale == 'physic' and self.selectedChr > -1 and (self.intervalAnalystChecked  or self.geneChecked):
-        #    chrName = self.genotype[0].name
-        #    # Draw the genes for this chromosome / region of this chromosome
-        #    if self.traitList and self.traitList[0] and len(self.traitList) == 1 and self.dataset.name:
-        #        webqtldatabase = self.dataset.name
-        #        #webqtldatabase = self.traitList[0].db.name
-        #    else:
-        #        webqtldatabase = None
-        #
-        #    self.geneCol = None
-        #
-        #    if self.species == "mouse":
-        #        self.geneCol = GeneUtil.loadGenes(self.cursor, chrName, self.diffCol, self.startMb, self.endMb, webqtldatabase, "mouse")
-        #    elif self.species == "rat":
-        #        self.geneCol = GeneUtil.loadGenes(self.cursor, chrName, self.diffCol, self.startMb, self.endMb, webqtldatabase, "rat")
-        #    else:
-        #        self.geneCol = None
+        self.geneCol = None
+        if self.plotScale == 'physic' and self.selectedChr > -1 and (self.intervalAnalystChecked  or self.geneChecked):
+           chrName = self.selectedChr
+           # Draw the genes for this chromosome / region of this chromosome
+           webqtldatabase = self.dataset.name
+        
+           if self.dataset.group.species == "mouse":
+               self.geneCol = GeneUtil.loadGenes(chrName, self.diffCol, self.startMb, self.endMb, webqtldatabase, "mouse")
+           elif self.dataset.group.species == "rat":
+               self.geneCol = GeneUtil.loadGenes(chrName, self.diffCol, self.startMb, self.endMb, webqtldatabase, "rat")
+
         #
         #    if self.geneCol and self.intervalAnalystChecked:
         #        #######################################################################
@@ -527,9 +514,7 @@ class MarkerRegression(object):
         #        tableForm = HT.Form(cgi=os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE), enctype='multipart/form-data', name=mainfmName, submit=HT.Input(type='hidden'))
         #        tableForm.append(HT.Input(name='FormID', value='', type='hidden'))
         #        tableForm.append(geneTableContainer)
-        #
-        #else:
-        self.geneCol = None
+
 
         ################################################################
         # Plots goes here
@@ -1168,7 +1153,7 @@ class MarkerRegression(object):
 
         for gIndex, theGO in enumerate(self.geneCol):
             geneNCBILink = 'http://www.ncbi.nlm.nih.gov/gene?term=%s'
-            if self.species == "mouse":
+            if self.dataset.group.species == "mouse":
                 txStart = theGO["TxStart"]
                 txEnd = theGO["TxEnd"]
                 geneLength = (txEnd - txStart)*1000.0
@@ -1227,7 +1212,7 @@ class MarkerRegression(object):
                 # NL: 06-02-2011 Rob required to change this link for gene related
                 HREF=geneNCBILink %geneSymbol
 
-            elif self.species == "rat":
+            elif self.dataset.group.species == "rat":
                 exonStarts = []
                 exonEnds = []
                 txStart = theGO["TxStart"]
@@ -1641,7 +1626,7 @@ class MarkerRegression(object):
             chrFont = pid.Font(ttf="verdana", size=26*zoom, bold=1)
             traitFont = pid.Font(ttf="verdana", size=14, bold=0)
             chrX = xLeftOffset + plotWidth - 2 - canvas.stringWidth("Chr %s" % self.selectedChr, font=chrFont)
-            canvas.drawString("Chr %s" % currentChromosome, chrX, ensemblPaddingTop-5, font=chrFont, color=pid.gray)
+            canvas.drawString("Chr %s" % self.selectedChr, chrX, ensemblPaddingTop-5, font=chrFont, color=pid.gray)
             traitX = chrX - 28 - canvas.stringWidth("database", font=traitFont)
             # end of drawBrowserClickableRegions
         else:
diff --git a/wqflask/wqflask/templates/marker_regression_gn1.html b/wqflask/wqflask/templates/marker_regression_gn1.html
index 767befd8..33335615 100644
--- a/wqflask/wqflask/templates/marker_regression_gn1.html
+++ b/wqflask/wqflask/templates/marker_regression_gn1.html
@@ -40,7 +40,7 @@
               {% endif %}
           </div>
           <div id="gn1_map_options" class="col-xs-5" style="border:2px solid black; padding: 10px; margin: 10px;">
-            <div class="col-xs-9" style="padding-left: 0px;">
+            <div class="col-xs-8" style="padding-left: 0px;">
               <table>
                 <tr>
                   <td><b>Chr:&nbsp;</b></td>
@@ -62,12 +62,13 @@
                 <tr>
                   <td><b>Width:&nbsp;</b></td>
                   <td>
-                    <input type="text" name="graphWidth" value="1600" size="5">
+                    <input type="text" name="graphWidth" value="1600" size="5"><span style="font-size: 11px;"> pixels (minimum=900)</span>
                   </td>
                 </tr>
               </table>
               </div>
-              <div class="col-xs-3">
+              <div class="col-xs-4">
+                  <input type="checkbox" name="showGenes" class="checkbox" style="display: inline;" {% if geneChecked|upper == "ON" %}value="ON" checked{% endif %}> <span>Gene Track </span> <span style="color:red;">*</span>
               </div>
           </div>
         </div>
diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py
index b5b6fa82..23073f88 100644
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -356,6 +356,7 @@ def marker_regression_page():
         'pair_scan',
         'startMb',
         'endMb',
+        'showGenes',
         'mapmethod_rqtl_geno',
         'mapmodel_rqtl_geno'
     )