diff options
-rw-r--r--[-rwxr-xr-x] | wqflask/wqflask/interval_analyst/GeneUtil.py | 98 | ||||
-rw-r--r-- | wqflask/wqflask/marker_regression/marker_regression.py | 22 | ||||
-rw-r--r-- | wqflask/wqflask/marker_regression/marker_regression_gn1.py | 83 | ||||
-rw-r--r-- | wqflask/wqflask/templates/marker_regression_gn1.html | 7 | ||||
-rw-r--r-- | wqflask/wqflask/views.py | 1 |
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: </b></td> @@ -62,12 +62,13 @@ <tr> <td><b>Width: </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' ) |