aboutsummaryrefslogtreecommitdiff
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'
)