aboutsummaryrefslogtreecommitdiff
path: root/web/webqtl/qtlminer
diff options
context:
space:
mode:
Diffstat (limited to 'web/webqtl/qtlminer')
-rwxr-xr-xweb/webqtl/qtlminer/GeneUtil.py658
-rwxr-xr-xweb/webqtl/qtlminer/QTLminer.py1237
-rwxr-xr-xweb/webqtl/qtlminer/__init__.py0
3 files changed, 1895 insertions, 0 deletions
diff --git a/web/webqtl/qtlminer/GeneUtil.py b/web/webqtl/qtlminer/GeneUtil.py
new file mode 100755
index 00000000..3ae7f3c0
--- /dev/null
+++ b/web/webqtl/qtlminer/GeneUtil.py
@@ -0,0 +1,658 @@
+import string
+import os
+
+
+from base import webqtlConfig
+
+
+#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)
+ 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()
+ for item in results:
+ speciesDict[item[0]] = item[1]
+
+ ##List current Species and other Species
+ speciesId = speciesDict[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()
+ GeneList = []
+
+ if results:
+ for result in results:
+ newdict = {}
+ for j, item in enumerate(fetchFields):
+ 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["snpDensity"] = newdict["snpCount"]/(newdict["TxEnd"]-newdict["TxStart"])/1000.0
+ else:
+ newdict["snpDensity"] = newdict["snpCount"] = 0
+
+ try:
+ newdict['GeneLength'] = 1000.0*(newdict['TxEnd'] - newdict['TxStart'])
+ except:
+ pass
+
+ #load gene from other Species by the same name
+ for item in otherSpecies:
+ 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()
+ 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"] = cursor.fetchone()[0]
+ newdict2["snpDensity"] = newdict2["snpCount"]/(newdict2["TxEnd"]-newdict2["TxStart"])/1000.0
+ else:
+ newdict2["snpDensity"] = newdict2["snpCount"] = 0
+
+ try:
+ newdict2['GeneLength'] = 1000.0*(newdict2['TxEnd'] - newdict2['TxStart'])
+ except:
+ pass
+
+ newdict['%sGene' % othSpec] = newdict2
+
+ GeneList.append(newdict)
+
+ return GeneList
+
+
+
+
+
+
+def loadGenesForQTLminer(cursor, chrName, diffCol, startMb, endMb, webqtlDb =None, species='mouse', databaseA='HC_M2_0606_P', databaseB='HC_M2CB_1205_R', databaseC='Illum_LXS_Hipp_loess0807', str1='C57BL/6J', str2='DBA/2J'):
+ #cursor.execute("desc GeneList")
+ #results = cursor.fetchall()
+ #fetchFields = map(lambda X:X[0], results)
+ 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()
+ for item in results:
+ speciesDict[item[0]] = item[1]
+
+
+# fpText = open(os.path.join(webqtlConfig.TMPDIR, "strains") + str(j) + '.txt','wb')
+# fpText.write("strain: '%d' \n" % thisone )
+# fpText.close()
+# strainids.append(thisone)
+
+
+
+
+ ##List current Species and other Species
+ speciesId = speciesDict[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()
+ GeneList = []
+
+ if results:
+ for result in results:
+ newdict = {}
+ for j, item in enumerate(fetchFields):
+ newdict[item] = result[j]
+
+## get pathways
+
+ cursor.execute("""
+ select
+ pathway
+ FROM
+ kegg.mmuflat
+ where
+ gene = '%s'
+ """ % (newdict["GeneID"]) )
+
+ resAAA = cursor.fetchall()
+ if resAAA:
+ myFields = ['pathways']
+ for j, item in enumerate(myFields):
+ temp = []
+ for k in resAAA:
+ temp.append(k[j])
+ newdict["pathways"] = temp
+
+ cursor.execute("""
+ select
+ name
+ FROM
+ kegg.mmuflat
+ where
+ gene = '%s'
+ """ % (newdict["GeneID"]) )
+
+ resAAA = cursor.fetchall()
+ if resAAA:
+ myFields = ['pathwaynames']
+ for j, item in enumerate(myFields):
+ temp = []
+ for k in resAAA:
+ temp.append(k[j])
+ newdict["pathwaynames"] = temp
+
+## get GO terms
+
+ cursor.execute("""
+ SELECT
+ distinct go.term.name
+ FROM go.gene_product
+ INNER JOIN go.dbxref ON (go.gene_product.dbxref_id=go.dbxref.id)
+ INNER JOIN go.association ON (go.gene_product.id=go.association.gene_product_id)
+ INNER JOIN go.term ON (go.association.term_id=go.term.id)
+ WHERE
+ go.dbxref.xref_key = (select mgi from go.genemgi where gene='%s' limit 1)
+ AND
+ go.dbxref.xref_dbname = 'MGI'
+ AND
+ go.term.term_type='biological_process'
+ """ % (newdict["GeneID"]) )
+
+ resAAA = cursor.fetchall()
+ if resAAA:
+ myFields = ['goterms']
+ for j, item in enumerate(myFields):
+ temp = []
+ for k in resAAA:
+ temp.append(k[j])
+ newdict["goterms"] = temp
+
+
+
+
+
+
+ newdict["snpDensity"] = newdict["snpCount"] = newdict["snpCountall"] = newdict["snpCountmis"] = newdict["snpCountBXD"] = newdict["snpCountmissel"] = 0
+
+ #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["snpDensity"] = newdict["snpCount"]/(newdict["TxEnd"]-newdict["TxStart"])/1000.0
+ else:
+ newdict["snpDensity"] = newdict["snpCount"] = 0
+
+ try:
+ newdict['GeneLength'] = 1000.0*(newdict['TxEnd'] - newdict['TxStart'])
+ except:
+ pass
+
+
+
+#self.cursor.execute("SELECT geneSymbol, chromosome, txStart, txEnd from GeneList where SpeciesId= 1 and geneSymbol = %s", opt.geneName)
+
+
+
+
+ ## search with gene name... doesnt matter. it changed to start and end position anyway
+ ##self.cursor.execute("SELECT geneSymbol, chromosome, txStart, txEnd from GeneList where SpeciesId= 1 and geneSymbol = %s", newdict["GeneSymbol"])
+
+
+ #count SNPs for all strains
+ cursor.execute("""
+ SELECT
+ distinct SnpAll.Id
+ from
+ SnpAll
+ where
+ SpeciesId = '1' and SnpAll.Chromosome = '%s' AND
+ SnpAll.Position >= %2.6f and SnpAll.Position < %2.6f AND
+ SnpAll.Exon='Y'
+ """ % (newdict["Chromosome"], newdict["TxStart"], newdict["TxEnd"]))
+ snpfetch = cursor.fetchall()
+ newdict["snpCountmis"] = len(snpfetch)
+
+## # count SNPs for selected strains
+
+ sql = """SELECT
+ distinct SnpAll.Id, `%s`, `%s`
+ from
+ SnpAll, SnpPattern
+ where
+ SpeciesId = '1' and SnpAll.Chromosome = '%s' AND
+ SnpAll.Position >= %2.6f and SnpAll.Position < %2.6f and SnpAll.Id = SnpPattern.SnpId AND
+ SnpPattern.`%s` != SnpPattern.`%s` AND
+ SnpAll.Exon='Y'
+ """ % (str1, str2, newdict["Chromosome"], newdict["TxStart"], newdict["TxEnd"], str1, str2)
+ cursor.execute(sql)
+ ressnp = cursor.fetchall()
+ newdict["snpCountmissel"] = len(ressnp)
+ newdict["hassnp"] = 'n'
+ if len(ressnp)>0 :
+ newdict["hassnp"]= 'y'
+## ####################################### NEW NEW NEW
+
+
+
+
+
+
+
+ # count Indels for BXD mice
+ cursor.execute("""
+ SELECT
+ distinct IndelAll.Name, IndelAll.Chromosome, IndelAll.SourceId, IndelAll.Mb_start,
+ IndelAll.Mb_end, IndelAll.Strand, IndelAll.Type, IndelAll.Size, IndelAll.InDelSequence,
+ SnpSource.Name
+ from
+ SnpSource, IndelAll
+ where
+ IndelAll.SpeciesId = '1' and IndelAll.Chromosome = '%s' AND
+ IndelAll.Mb_start >= %2.6f and IndelAll.Mb_start < (%2.6f+.0010) AND
+ SnpSource.Id = IndelAll.SourceId
+ order by IndelAll.Mb_start
+ """ % (newdict["Chromosome"], newdict["TxStart"], newdict["TxEnd"]))
+
+ ressnp = cursor.fetchall()
+ newdict["indelCountBXD"] = len(ressnp)
+ newdict["hasindel"] = 'n'
+ newdict["hasexpr"] = 'n'
+ newdict["hascis"] = 'n'
+ newdict["score"] = 0
+ if len(ressnp)>0 :
+ newdict["hasindel"]= 'y'
+
+## # cursor.execute("""
+## # select
+## # Name from ProbeSet
+## # where
+## # GeneId = '%s' AND ChipId=4 limit 1
+## # """ % (newdict["GeneID"]))
+## # if species=='mouse':
+## # cursor.execute("""
+## # select
+## # Name from ProbeSet
+## # where
+## # GeneId = '%s' AND ChipId=4
+## # """ % (newdict["GeneID"]))
+## # results = cursor.fetchall()
+## # psets = []
+## # for item in results:
+## # psets.append(item)
+## # newdict["probeset"] = psets
+## #
+## # else:
+## # newdict["probeset"] = "empty"
+
+
+
+
+ if species=='mouse':
+ cursor.execute("""
+ select
+ distinct 0,
+ ProbeSet.Name as TNAME,
+ round(ProbeSetXRef.Mean,1) as TMEAN,
+ round(ProbeSetXRef.LRS,1) as TLRS,
+ ProbeSet.Chr_num as TCHR_NUM,
+ ProbeSet.Mb as TMB,
+ ProbeSet.Symbol as TSYMBOL,
+ ProbeSet.name_num as TNAME_NUM
+ FROM ProbeSetXRef, ProbeSetFreeze, ProbeSet
+ where
+ ( MATCH (ProbeSet.Name,ProbeSet.description,ProbeSet.symbol,
+ alias,GenbankId,UniGeneId, Probe_Target_Description)
+ AGAINST ('%s' IN BOOLEAN MODE) )
+ and ProbeSet.symbol = '%s'
+ and ProbeSet.Id = ProbeSetXRef.ProbeSetId
+ and ProbeSetXRef.ProbeSetFreezeId = ProbeSetFreeze.Id
+ and ProbeSetFreeze.Id = (select Id from ProbeSetFreeze where Name='%s' limit 1)
+ """ % (newdict["GeneSymbol"],newdict["GeneSymbol"],databaseA))
+ resA = cursor.fetchall()
+
+ if resA:
+ myFields = ['dummyA','probesetA','meanA','newlrsA','probesetchrA','probesetmbA','probesetsymbolA','probesetnamenumA']
+
+# fpText = open(os.path.join(webqtlConfig.TMPDIR, "res") + '.txt','wb')
+ #fpText.write("newdictgeneid '%s' \n" % newdict["GeneId"])
+ for j, item in enumerate(myFields):
+ temp = []
+ for k in resA:
+ # fpText.write("j: result: '%s' \n" % k[j])
+ temp.append(k[j])
+ newdict[item] = temp
+ # fpText.close()
+
+
+ # put probesetcisA here
+
+ cursor.execute("""
+ select
+ distinct 0,
+ if( (ProbeSet.Chr = Geno.Chr AND ProbeSetXRef.LRS > 10.0000000 and ABS(ProbeSet.Mb-Geno.Mb) < 10.0000000 ) , concat('yes(',round(ProbeSetXRef.LRS,1),')') , 'no') as cis
+ FROM Geno, ProbeSetXRef, ProbeSetFreeze, ProbeSet
+ where
+ ( MATCH (ProbeSet.Name,ProbeSet.description,ProbeSet.symbol,
+ alias,GenbankId,UniGeneId, Probe_Target_Description)
+ AGAINST ('%s' IN BOOLEAN MODE) )
+ and ProbeSet.symbol = '%s'
+ and ProbeSet.Id = ProbeSetXRef.ProbeSetId
+ and Geno.SpeciesId=1 #XZ: I add this line to speed up query
+ and ProbeSetXRef.Locus = Geno.name
+ and ProbeSetXRef.ProbeSetFreezeId = ProbeSetFreeze.Id
+ and ProbeSetFreeze.Id = (select Id from ProbeSetFreeze where Name='%s' limit 1)
+ """ % (newdict["GeneSymbol"],newdict["GeneSymbol"],databaseA))
+
+ resA2 = cursor.fetchall()
+ if resA2:
+ myFields = ['dummyA2','probesetcisA']
+ for j, item in enumerate(myFields):
+ temp = []
+ for k in resA2:
+ # fpText.write("j: result: '%s' \n" % k[j])
+ temp.append(k[j])
+ newdict[item] = temp
+ else:
+ newdict['probesetcisA'] = ''
+
+
+
+ # specially for this dataset only
+ newdict["hasexpr"] = 'n'
+ if len(newdict["meanA"])>0:
+ for mym in newdict["meanA"]:
+ if mym>8:
+ newdict["hasexpr"] = 'y'
+
+ # specially for this dataset only
+ newdict["hascis"] = 'n'
+ if len(newdict["probesetcisA"])>0:
+ for mym in newdict["probesetcisA"]:
+ if mym != 'no':
+ newdict["hascis"] = 'y'
+
+ else:
+ myFields = ['dummyA','probesetA,''meanA','newlrsA','probesetchrA','probesetmbA','probesetsymbolA','probesetnamenumA', 'probesetcisA']
+ for j, item in enumerate(myFields):
+ newdict[item] = "--"
+
+ # specially for this dataset only
+ newdict["hasexpr"] = 'n'
+ newdict["hascis"] = 'n'
+ newdict["score"] = 0
+
+########################## FOR B
+
+ newdict["score"] = 0
+ if newdict["hassnp"] == 'y':
+ newdict["score"] = newdict["score"] + 1
+ if newdict["hasexpr"] == 'y':
+ newdict["score"] = newdict["score"] + 1
+ if newdict["hasindel"] == 'y':
+ newdict["score"] = newdict["score"] + 1
+ if newdict["hascis"] == 'y':
+ newdict["score"] = newdict["score"] + 1
+
+
+
+ if species=='mouse':
+ cursor.execute("""
+ select
+ distinct 0,
+ ProbeSet.Name as TNAME,
+ round(ProbeSetXRef.Mean,1) as TMEAN,
+ round(ProbeSetXRef.LRS,1) as TLRS,
+ ProbeSet.Chr_num as TCHR_NUM,
+ ProbeSet.Mb as TMB,
+ ProbeSet.Symbol as TSYMBOL,
+ ProbeSet.name_num as TNAME_NUM
+ FROM ProbeSetXRef, ProbeSetFreeze, ProbeSet
+ where
+ ( MATCH (ProbeSet.Name,ProbeSet.description,ProbeSet.symbol,
+ alias,GenbankId,UniGeneId, Probe_Target_Description)
+ AGAINST ('%s' IN BOOLEAN MODE) )
+ and ProbeSet.symbol = '%s'
+ and ProbeSet.Id = ProbeSetXRef.ProbeSetId
+ and ProbeSetXRef.ProbeSetFreezeId = ProbeSetFreeze.Id
+ and ProbeSetFreeze.Id = (select Id from ProbeSetFreeze where Name='%s' limit 1)
+ """ % (newdict["GeneSymbol"],newdict["GeneSymbol"],databaseB))
+
+ resB = cursor.fetchall()
+ if resB:
+ myFields = ['dummyB','probesetB','meanB','newlrsB','probesetchrB','probesetmbB','probesetsymbolB','probesetnamenumB']
+
+# fpText = open(os.path.join(webqtlConfig.TMPDIR, "res") + '.txt','wb')
+ #fpText.write("newdictgeneid '%s' \n" % newdict["GeneId"])
+ for j, item in enumerate(myFields):
+ temp = []
+ for k in resB:
+ # fpText.write("j: result: '%s' \n" % k[j])
+ temp.append(k[j])
+ newdict[item] = temp
+ # fpText.close()
+
+
+ # put probesetcisB here
+ cursor.execute("""
+ select
+ distinct 0,
+ if( (ProbeSet.Chr = Geno.Chr AND ProbeSetXRef.LRS > 10.0000000 and ABS(ProbeSet.Mb-Geno.Mb) < 10.0000000 ) , concat('yes(',round(ProbeSetXRef.LRS,1),')') , 'no') as cis
+ FROM Geno, ProbeSetXRef, ProbeSetFreeze, ProbeSet
+ where
+ ( MATCH (ProbeSet.Name,ProbeSet.description,ProbeSet.symbol,
+ alias,GenbankId,UniGeneId, Probe_Target_Description)
+ AGAINST ('%s' IN BOOLEAN MODE) )
+ and ProbeSet.symbol = '%s'
+ and ProbeSet.Id = ProbeSetXRef.ProbeSetId
+ and Geno.SpeciesId=1 #XZ: I add this line to speed up query
+ and ProbeSetXRef.Locus = Geno.name
+ and ProbeSetXRef.ProbeSetFreezeId = ProbeSetFreeze.Id
+ and ProbeSetFreeze.Id = (select Id from ProbeSetFreeze where Name='%s' limit 1)
+ """ % (newdict["GeneSymbol"],newdict["GeneSymbol"],databaseB))
+
+ resB2 = cursor.fetchall()
+ if resB2:
+ myFields = ['dummyB2','probesetcisB']
+ for j, item in enumerate(myFields):
+ temp = []
+ for k in resB2:
+ # fpText.write("j: result: '%s' \n" % k[j])
+ temp.append(k[j])
+ newdict[item] = temp
+ else:
+ newdict['probesetcisB'] = ''
+
+
+ else:
+ myFields = ['dummyB','probesetB,''meanB','newlrsB','probesetchrB','probesetmbB','probesetsymbolB','probesetnamenumB', 'probesetcisB']
+ for j, item in enumerate(myFields):
+ newdict[item] = "--"
+
+
+
+##########################
+
+
+########################## FOR C
+
+
+ if species=='mouse':
+ cursor.execute("""
+ select
+ distinct 0,
+ ProbeSet.Name as TNAME,
+ round(ProbeSetXRef.Mean,1) as TMEAN,
+ round(ProbeSetXRef.LRS,1) as TLRS,
+ ProbeSet.Chr_num as TCHR_NUM,
+ ProbeSet.Mb as TMB,
+ ProbeSet.Symbol as TSYMBOL,
+ ProbeSet.name_num as TNAME_NUM
+ FROM ProbeSetXRef, ProbeSetFreeze, ProbeSet
+ where
+ ( MATCH (ProbeSet.Name,ProbeSet.description,ProbeSet.symbol,
+ alias,GenbankId,UniGeneId, Probe_Target_Description)
+ AGAINST ('%s' IN BOOLEAN MODE) )
+ and ProbeSet.symbol = '%s'
+ and ProbeSet.Id = ProbeSetXRef.ProbeSetId
+ and ProbeSetXRef.ProbeSetFreezeId = ProbeSetFreeze.Id
+ and ProbeSetFreeze.Id = (select Id from ProbeSetFreeze where Name='%s' limit 1)
+ """ % (newdict["GeneSymbol"],newdict["GeneSymbol"],databaseC))
+
+ resC = cursor.fetchall()
+ if resC:
+ myFields = ['dummyC','probesetC','meanC','newlrsC','probesetchrC','probesetmbC','probesetsymbolC','probesetnamenumC']
+
+# fpText = open(os.path.join(webqtlConfig.TMPDIR, "res") + '.txt','wb')
+ #fpText.write("newdictgeneid '%s' \n" % newdict["GeneId"])
+ for j, item in enumerate(myFields):
+ temp = []
+ for k in resC:
+ # fpText.write("j: result: '%s' \n" % k[j])
+ temp.append(k[j])
+ newdict[item] = temp
+ # fpText.close()
+
+
+ # put probesetcisC here
+ cursor.execute("""
+ select
+ distinct 0,
+ if( (ProbeSet.Chr = Geno.Chr AND ProbeSetXRef.LRS > 10.0000000 and ABS(ProbeSet.Mb-Geno.Mb) < 10.0000000 ) , concat('yes(',round(ProbeSetXRef.LRS,1),')') , 'no') as cis
+ FROM Geno, ProbeSetXRef, ProbeSetFreeze, ProbeSet
+ where
+ ( MATCH (ProbeSet.Name,ProbeSet.description,ProbeSet.symbol,
+ alias,GenbankId,UniGeneId, Probe_Target_Description)
+ AGAINST ('%s' IN BOOLEAN MODE) )
+ and ProbeSet.symbol = '%s'
+ and ProbeSet.Id = ProbeSetXRef.ProbeSetId
+ and Geno.SpeciesId=1 #XZ: I add this line to speed up query
+ and ProbeSetXRef.Locus = Geno.name
+ and ProbeSetXRef.ProbeSetFreezeId = ProbeSetFreeze.Id
+ and ProbeSetFreeze.Id = (select Id from ProbeSetFreeze where Name='%s' limit 1)
+ """ % (newdict["GeneSymbol"],newdict["GeneSymbol"],databaseC))
+
+ resC2 = cursor.fetchall()
+ if resC2:
+ myFields = ['dummyC2','probesetcisC']
+ for j, item in enumerate(myFields):
+ temp = []
+ for k in resC2:
+ # fpText.write("j: result: '%s' \n" % k[j])
+ temp.append(k[j])
+ newdict[item] = temp
+ else:
+ newdict['probesetcisC'] = ''
+
+ else:
+ myFields = ['dummyC','probesetC,''meanC','newlrsC','probesetchrC','probesetmbC','probesetsymbolC','probesetnamenumC', 'probesetcisC']
+ for j, item in enumerate(myFields):
+ newdict[item] = "--"
+
+
+
+
+
+
+
+
+ #load gene from other Species by the same name
+
+
+ for item in otherSpecies:
+ 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()
+ 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"] = cursor.fetchone()[0]
+ newdict2["snpDensity"] = newdict2["snpCount"]/(newdict2["TxEnd"]-newdict2["TxStart"])/1000.0
+ else:
+ newdict2["snpDensity"] = newdict2["snpCount"] = 0
+
+ try:
+ newdict2['GeneLength'] = 1000.0*(newdict2['TxEnd'] - newdict2['TxStart'])
+ except:
+ pass
+
+ newdict['%sGene' % othSpec] = newdict2
+
+ #newdict['RUDI']='hallo allemaal'
+
+ GeneList.append(newdict)
+
+
+ return GeneList
+
+
diff --git a/web/webqtl/qtlminer/QTLminer.py b/web/webqtl/qtlminer/QTLminer.py
new file mode 100755
index 00000000..e565cdd7
--- /dev/null
+++ b/web/webqtl/qtlminer/QTLminer.py
@@ -0,0 +1,1237 @@
+#Note that although this module gets imported a bit, the dict columnNames is never used outside this code.
+#Also note that snpBrowser also defines a columnNames dict; it's different. -KA
+
+from htmlgen import HTMLgen2 as HT
+import os
+import time
+import pyXLWriter as xl
+
+import GeneUtil
+from base.templatePage import templatePage
+from utility import webqtlUtil
+from base import webqtlConfig
+
+
+_scriptfile = "main.py?FormID=qtlminerresult"
+
+#A dictionary that lets us map the html form names "txStart_mm6" -> "Mb Start (mm8)"
+#the first item is the short name (column headers) and the second item is the long name (dropdown list)
+# [short name, long name, category]
+columnNames = {"GeneSymbol" : ["Gene", "Gene Name", 'gene'],
+ "GeneDescription" : ["Description", "Gene Description", 'species'],
+# "probeset" : ["ProbeSet", "ProbeSet", 'gene'],
+# "probesetsymbolA" : ["ProbeSet Symbol A", "ProbeSetsymbolA", 'gene'],
+# "probesetchrA" : ["probesetchrA", "probesetchrA", 'gene'],
+ "hassnp" : ["Has nsSNP", "Has nsSNP", 'gene'],
+ "hasindel" : ["Has indel", "Has indel", 'gene'],
+ "hasexpr" : ["Has expr", "Has expression", 'gene'],
+ "hascis" : ["Has cis", "Has cis regulation", 'gene'],
+ "score" : ["Score", "Score", 'gene'],
+ "meanA" : ["Expression A", "Expression in dataset 1", 'gene'],
+ "meanB" : ["Expression B", "Expression in dataset 2", 'gene'],
+ "meanC" : ["Expression C", "Expression in dataset 3", 'gene'],
+ "probesetcisA" : ["Cis A", "Cis regulation in dataset 1", 'gene'],
+ "probesetcisB" : ["Cis B", "Cis regulation in dataset 2", 'gene'],
+ "probesetcisC" : ["Cis C", "Cis regulation in dataset 3", 'gene'],
+ "probesetA" : ["ProbeSet A", "ProbeSet in dataset 1", 'gene'],
+ "probesetB" : ["ProbeSet B", "ProbeSet in dataset 2", 'gene'],
+ "probesetC" : ["ProbeSet C", "ProbeSet in dataset 3", 'gene'],
+ "goterms" : ["GO biological process", "GO biological process", 'gene'],
+ "pathways" : ["KEGG PathwayIDs", "KEGG PathwayIDs", 'gene'],
+ "pathwaynames" : ["KEGG Pathways", "KEGG Pathways", 'gene'],
+# "newlrsA" : ["Lrs A", "lrs A", 'gene'],
+# "probesetchrB" : ["probesetchrB", "probesetchrB", 'gene'],
+# "newlrsB" : ["lrs B", "lrs B", 'gene'],
+# "probesetchrC" : ["probesetchrC", "probesetchrC", 'gene'],
+# "newlrsC" : ["lrs C", "lrs C", 'gene'],
+ 'GeneNeighborsCount' : ["Neighbors", "Gene Neighbors", 'gene'],
+ 'GeneNeighborsRange' : ["Neighborhood", "Gene Neighborhood (Mb)", 'gene'],
+ 'GeneNeighborsDensity' : ["Gene Density", "Gene Density (Neighbors/Mb)", 'gene'],
+ "ProteinID" : ["Prot ID", "Protein ID", 'protein'],
+ "Chromosome" : ["Chr", "Chromosome", 'species'],
+ "TxStart" : ["Start", "Mb Start", 'species'],
+ "TxEnd" : ["End", "Mb End", 'species'],
+ "GeneLength" : ["Length", "Kb Length", 'species'],
+ "cdsStart" : ["CDS Start", "Mb CDS Start", 'species'],
+ "cdsEnd" : ["CDS End", "Mb CDS End", 'species'],
+ "exonCount" : ["Num Exons", "Exon Count", 'species'],
+ "exonStarts" : ["Exon Starts", "Exon Starts", 'species'],
+ "exonEnds" : ["Exon Ends", "Exon Ends", 'species'],
+ "Strand" : ["Strand", "Strand", 'species'],
+ "GeneID" : ["Gene ID", "Gene ID", 'species'],
+ "GenBankID" : ["GenBank", "GenBank ID", 'species'],
+ "UnigenID" : ["Unigen", "Unigen ID", 'species'],
+ "NM_ID" : ["NM ID", "NM ID", 'species'],
+ "kgID" : ["kg ID", "kg ID", 'species'],
+ "snpCountall" : ["SNPs", "SNP Count", 'species'],
+ "snpCountmis": ["nsSNPs all", "nsSNP Count all strains", 'species'],
+ "snpCountmissel": ["nsSNPs selected", "nsSNP Count selected strains", 'species'],
+ "snpDensity" : ["SNP Density", "SNP Density", 'species'],
+ "indelCountBXD" : ["Indels in BXD mice", "Indel Count in BXD mice", 'species'],
+ "lrs" : ["LRS", "Likelihood Ratio Statistic", 'misc'],
+ "lod" : ["LOD", "Likelihood Odds Ratio", 'misc'],
+ "pearson" : ["Pearson", "Pearson Product Moment", 'misc'],
+ "literature" : ["Lit Corr", "Literature Correlation", 'misc'],
+ }
+
+###Species Freeze
+speciesFreeze = {'mouse':'mm9', 'rat':'rn3', 'human':'hg19'}
+for key in speciesFreeze.keys():
+ speciesFreeze[speciesFreeze[key]] = key
+
+class QTLminer (templatePage): ###
+ filename = webqtlUtil.genRandStr("Itan_")
+
+ javascript_content = """
+<SCRIPT language="JAVASCRIPT">
+
+function update4(self,form) {
+ self.database='leeg';
+
+}
+
+
+
+
+</SCRIPT>
+"""
+ def __init__(self, fd):
+ templatePage.__init__(self, fd)
+ if not self.openMysql():
+ return
+
+ self.species = fd.formdata.getvalue("species", "mouse")
+ try:
+ self.startMb = float(fd.formdata.getvalue("startMb"))
+ except:
+ self.startMb = 173
+ try:
+ self.endMb = float(fd.formdata.getvalue("endMb"))
+ except:
+ self.endMb = self.startMb + 1
+
+ self.Chr = fd.formdata.getvalue("chromosome", "1")
+
+
+
+######################################################### FOR A
+ ###### species
+
+ self.cursor.execute("""
+ Select
+ Name, Id from Species
+ Order by
+ Id
+ """ )
+ res = self.cursor.fetchall()
+ self.spA = res
+ self.spAsel = fd.formdata.getvalue("myspeciesA", "mouse")
+
+ if not hasattr(self,"spA"):
+ self.spA = res2
+ self.spAsel = 'mouse'
+
+ ###### group
+
+ self.cursor.execute("""
+ select
+ distinct InbredSet.Name, InbredSet.FullName
+ from InbredSet, Species, ProbeFreeze, GenoFreeze, PublishFreeze
+ where
+ InbredSet.SpeciesId= Species.Id and
+ Species.Name='%s' and InbredSet.Name != 'BXD300' and
+ (PublishFreeze.InbredSetId = InbredSet.Id or GenoFreeze.InbredSetId = InbredSet.Id or ProbeFreeze.InbredSetId = InbredSet.Id)
+ order by
+ InbredSet.Name
+ """ % self.spAsel)
+
+ res = self.cursor.fetchall()
+
+ if not hasattr(self,"grA"):
+ self.grA = res
+ self.grAsel = 'BXD'
+
+ if fd.formdata.getvalue('submitter') == 'a1':
+ self.grA = res
+ self.grAsel = self.grA[0][0]
+ else:
+ self.grAsel = fd.formdata.getvalue("groupA","BXD")
+
+ ###### type
+
+ self.cursor.execute("""
+ select
+ distinct Tissue.Name, concat(Tissue.Name, ' mRNA')
+ from ProbeFreeze, ProbeSetFreeze, InbredSet, Tissue
+ where
+ ProbeFreeze.TissueId = Tissue.Id and
+ ProbeFreeze.InbredSetId = InbredSet.Id and
+ InbredSet.Name in ('%s') and
+ ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id and
+ ProbeSetFreeze.public > %d
+ order by Tissue.Name
+ """ % (self.grAsel,webqtlConfig.PUBLICTHRESH))
+
+ res = self.cursor.fetchall()
+
+ if not hasattr(self,"tyA"):
+ self.tyA = res
+ self.tyAsel = 'Hippocampus'
+
+ if fd.formdata.getvalue('submitter') in ['a1','a2'] :
+ self.tyA = res
+ self.tyAsel = self.tyA[0][0]
+ else:
+ self.tyAsel = fd.formdata.getvalue("typeA","Hippocampus")
+
+ ###### database
+
+ self.cursor.execute("""
+ select
+ ProbeSetFreeze.Name, ProbeSetFreeze.FullName
+ from ProbeSetFreeze, ProbeFreeze, InbredSet, Tissue
+ where ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id and
+ ProbeFreeze.TissueId = Tissue.Id and
+ ProbeFreeze.InbredSetId = InbredSet.Id and
+ InbredSet.Name in ('%s') and Tissue.name = '%s' and
+ ProbeSetFreeze.public > %d
+ order by ProbeSetFreeze.CreateTime desc
+ """ % (self.grAsel,self.tyAsel,webqtlConfig.PUBLICTHRESH))
+
+ res = self.cursor.fetchall()
+
+ if not hasattr(self,"daA"):
+ self.daA = res
+ self.daAsel = 'HC_M2_0606_P'
+
+ if fd.formdata.getvalue('submitter') in ['a1','a2','a3'] :
+ self.daA = res
+ self.daAsel = self.daA[0][0]
+ else:
+ self.daAsel = fd.formdata.getvalue("databaseA","HC_M2_0606_P")
+
+
+######################################################### FOR B
+ ###### species
+
+ self.cursor.execute("""
+ Select
+ Name, Id from Species
+ Order by
+ Id
+ """ )
+ res = self.cursor.fetchall()
+ self.spB = res
+ self.spBsel = fd.formdata.getvalue("myspeciesB", "mouse")
+
+ if not hasattr(self,"spB"):
+ self.spB = res
+ self.spBsel = 'mouse'
+
+ ###### group
+
+ self.cursor.execute("""
+ select
+ distinct InbredSet.Name, InbredSet.FullName
+ from InbredSet, Species, ProbeFreeze, GenoFreeze, PublishFreeze
+ where
+ InbredSet.SpeciesId= Species.Id and
+ Species.Name='%s' and InbredSet.Name != 'BXD300' and
+ (PublishFreeze.InbredSetId = InbredSet.Id or GenoFreeze.InbredSetId = InbredSet.Id or ProbeFreeze.InbredSetId = InbredSet.Id)
+ order by
+ InbredSet.Name
+ """ % self.spBsel)
+
+ res = self.cursor.fetchall()
+
+ if not hasattr(self,"grB"):
+ self.grB = res
+ self.grBsel = 'CXB'
+
+ if fd.formdata.getvalue('submitter') == 'b1':
+ self.grB = res
+ self.grBsel = self.grB[0][0]
+ else:
+ self.grBsel = fd.formdata.getvalue("groupB","CXB")
+
+ ###### type
+
+ self.cursor.execute("""
+ select
+ distinct Tissue.Name, concat(Tissue.Name, ' mRNA')
+ from ProbeFreeze, ProbeSetFreeze, InbredSet, Tissue
+ where
+ ProbeFreeze.TissueId = Tissue.Id and
+ ProbeFreeze.InbredSetId = InbredSet.Id and
+ InbredSet.Name in ('%s') and
+ ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id and
+ ProbeSetFreeze.public > %d
+ order by Tissue.Name
+ """ % (self.grBsel,webqtlConfig.PUBLICTHRESH))
+
+ res = self.cursor.fetchall()
+
+ if not hasattr(self,"tyB"):
+ self.tyB = res
+ self.tyBsel = 'Hippocampus'
+
+ if fd.formdata.getvalue('submitter') in ['b1','b2'] :
+ self.tyB = res
+ self.tyBsel = self.tyB[0][0]
+ else:
+ self.tyBsel = fd.formdata.getvalue("typeB","Hippocampus")
+
+ ###### database
+
+ self.cursor.execute("""
+ select
+ ProbeSetFreeze.Name, ProbeSetFreeze.FullName
+ from ProbeSetFreeze, ProbeFreeze, InbredSet, Tissue
+ where ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id and
+ ProbeFreeze.TissueId = Tissue.Id and
+ ProbeFreeze.InbredSetId = InbredSet.Id and
+ InbredSet.Name in ('%s') and Tissue.name = '%s' and
+ ProbeSetFreeze.public > %d
+ order by ProbeSetFreeze.CreateTime desc
+ """ % (self.grBsel,self.tyBsel,webqtlConfig.PUBLICTHRESH))
+
+ res = self.cursor.fetchall()
+
+ if not hasattr(self,"daB"):
+ self.daB = res
+ self.daBsel = 'HC_M2CB_1205_R'
+
+ if fd.formdata.getvalue('submitter') in ['b1','b2','b3'] :
+ self.daB = res
+ self.daBsel = self.daB[0][0]
+ else:
+ self.daBsel = fd.formdata.getvalue("databaseB","HC_M2CB_1205_R")
+
+
+
+######################################################### FOR C
+ ###### species
+
+ self.cursor.execute("""
+ Select
+ Name, Id from Species
+ Order by
+ Id
+ """ )
+ res = self.cursor.fetchall()
+ self.spC = res
+ self.spCsel = fd.formdata.getvalue("myspeciesC", "mouse")
+
+ if not hasattr(self,"spC"):
+ self.spC = res
+ self.spCsel = 'mouse'
+
+ ###### group
+
+ self.cursor.execute("""
+ select
+ distinct InbredSet.Name, InbredSet.FullName
+ from InbredSet, Species, ProbeFreeze, GenoFreeze, PublishFreeze
+ where
+ InbredSet.SpeciesId= Species.Id and
+ Species.Name='%s' and InbredSet.Name != 'BXD300' and
+ (PublishFreeze.InbredSetId = InbredSet.Id or GenoFreeze.InbredSetId = InbredSet.Id or ProbeFreeze.InbredSetId = InbredSet.Id)
+ order by
+ InbredSet.Name
+ """ % self.spCsel)
+
+ res = self.cursor.fetchall()
+
+ if not hasattr(self,"grC"):
+ self.grC = res
+ self.grCsel = 'LXS'
+
+ if fd.formdata.getvalue('submitter') == 'c1':
+ self.grC = res
+ self.grCsel = self.grC[0][0]
+ else:
+ self.grCsel = fd.formdata.getvalue("groupC","LXS")
+
+ ###### type
+
+ self.cursor.execute("""
+ select
+ distinct Tissue.Name, concat(Tissue.Name, ' mRNA')
+ from ProbeFreeze, ProbeSetFreeze, InbredSet, Tissue
+ where
+ ProbeFreeze.TissueId = Tissue.Id and
+ ProbeFreeze.InbredSetId = InbredSet.Id and
+ InbredSet.Name in ('%s') and
+ ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id and
+ ProbeSetFreeze.public > %d
+ order by Tissue.Name
+ """ % (self.grCsel,webqtlConfig.PUBLICTHRESH))
+
+ res = self.cursor.fetchall()
+
+ if not hasattr(self,"tyC"):
+ self.tyC = res
+ self.tyCsel = 'Hippocampus'
+
+ if fd.formdata.getvalue('submitter') in ['c1','c2'] :
+ self.tyC = res
+ self.tyCsel = self.tyC[0][0]
+ else:
+ self.tyCsel = fd.formdata.getvalue("typeC","Hippocampus")
+
+ ###### database
+
+
+ self.cursor.execute("""
+ select
+ ProbeSetFreeze.Name, ProbeSetFreeze.FullName
+ from ProbeSetFreeze, ProbeFreeze, InbredSet, Tissue
+ where ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id and
+ ProbeFreeze.TissueId = Tissue.Id and
+ ProbeFreeze.InbredSetId = InbredSet.Id and
+ InbredSet.Name in ('%s') and Tissue.name = '%s' and
+ ProbeSetFreeze.public > %d
+ order by ProbeSetFreeze.CreateTime desc
+ """ % (self.grCsel,self.tyCsel,webqtlConfig.PUBLICTHRESH))
+
+ res = self.cursor.fetchall()
+
+ if not hasattr(self,"daC"):
+ self.daC = res
+ self.daCsel = 'Illum_LXS_Hipp_loess0807'
+
+ if fd.formdata.getvalue('submitter') in ['c1','c2','c3'] :
+ self.daC = res
+ self.daCsel = self.daC[0][0]
+ else:
+ self.daCsel = fd.formdata.getvalue("databaseC","Illum_LXS_Hipp_loess0807")
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# self.myspeciesA = fd.formdata.getvalue("myspeciesA", "mouse")
+# self.groupA = fd.formdata.getvalue("groupA", "BXD")
+# self.typeA = fd.formdata.getvalue("typeA", "Spleen")
+# self.databaseA = fd.formdata.getvalue("databaseA", "IoP_SPL_RMA_0509")#
+
+# self.myspeciesB = fd.formdata.getvalue("myspeciesB", "mouse")
+# self.groupB = fd.formdata.getvalue("groupB", "BXD")
+# self.typeB = fd.formdata.getvalue("typeB", "Spleen")
+# self.databaseB = fd.formdata.getvalue("databaseB", "IoP_SPL_RMA_0509")
+
+ self.xls = fd.formdata.getvalue("xls", "1")
+ try:
+ s1 = int(fd.formdata.getvalue("s1"))
+ s2 = int(fd.formdata.getvalue("s2"))
+ self.diffColDefault = self.diffCol = [s1, s2]
+ except:
+ self.diffColDefault = self.diffCol = []
+ if self.species != 'mouse':
+ self.diffColDefault = [2, 3]#default is B6 and D2 for other species
+
+
+
+ self.str1 = fd.formdata.getvalue("str1", "C57BL/6J")
+ self.str2 = fd.formdata.getvalue("str2", "DBA/2J")
+ self.sorton = fd.formdata.getvalue("sorton", "Position")
+
+ controlFrm, dispFields, dispFields2 = self.genControlForm(fd)
+ ## if not fd.formdata.getvalue('submitter') in ['a1','a2','a3''a4'] :
+
+ self.cursor.execute("""select Id from Strain where Name='%s'
+ """ % self.str1 )
+ strain1 = self.cursor.fetchone()[0]
+ self.cursor.execute("""select Id from Strain where Name='%s'
+ """ % self.str2 )
+ strain2 = self.cursor.fetchone()[0]
+
+ filename=''
+ if fd.formdata.getvalue('submitter') in ['refresh'] or not hasattr(self,"daA"):
+ geneTable, filename = self.genGeneTable(fd, dispFields, strain1, strain2)
+
+ infoTD = HT.TD(width=400, valign= "top")
+ infoTD.append(HT.Paragraph("QTLminer : Chr %s" % self.Chr, Class="title"),
+# HT.Strong("Species : "), self.species.title(), HT.BR(),
+
+# HT.Strong("myspeciesA : "), self.myspeciesA, HT.BR(),
+# HT.Strong("groupA : "), self.groupA, HT.BR(),
+# HT.Strong("typeA : "), self.typeA, HT.BR(),
+# HT.Strong("databaseA : "), self.databaseA, HT.BR(),
+
+# HT.Strong("myspeciesB : "), self.myspeciesB, HT.BR(),
+# HT.Strong("groupB : "), self.groupB, HT.BR(),
+# HT.Strong("typeB : "), self.typeB, HT.BR(),
+# HT.Strong("databaseB : "), self.databaseB, HT.BR(),
+
+# HT.Strong("spAsel : "), self.spAsel, HT.BR(),
+# HT.Strong("grAsel : "), self.grAsel, HT.BR(),
+# HT.Strong("tyAsel : "), self.tyAsel, HT.BR(),
+# HT.Strong("daAsel : "), self.daAsel, HT.BR(),
+
+# HT.Strong("spBsel : "), self.spBsel, HT.BR(),
+# HT.Strong("grBsel : "), self.grBsel, HT.BR(),
+# HT.Strong("tyBsel : "), self.tyBsel, HT.BR(),
+# HT.Strong("daBsel : "), self.daBsel, HT.BR(),
+
+# HT.Strong("chr : "), self.Chr, HT.BR(),
+# HT.Strong("formdata.submitter :"), fd.formdata.getvalue("submitter"), HT.BR(),
+# HT.Strong("formdata.myspeciesA : "), fd.formdata.getvalue("myspeciesA"), HT.BR(),
+# HT.Strong("formdata.groupA: "), fd.formdata.getvalue("groupA") , HT.BR(),
+# HT.Strong("formdata.myspeciesB : "), fd.formdata.getvalue("myspeciesB"), HT.BR(),
+# HT.Strong("formdata.groupB: "), fd.formdata.getvalue("groupB") , HT.BR(),
+# HT.Strong("formdata.type: "), fd.formdata.getvalue("type") , HT.BR(),
+# HT.Strong("formdata.database: "), fd.formdata.getvalue("database") , HT.BR(),
+# HT.Strong("Database : "), "UCSC %s" % speciesFreeze[self.species], HT.BR(),
+ HT.Strong("Range : "), "%2.6f Mb - %2.6f Mb" % (self.startMb, self.endMb), HT.BR(),
+ )
+
+ if filename:
+ infoTD.append(HT.BR(), HT.BR(), HT.Href(text="Download", url = "/tmp/" + filename, Class="normalsize")
+ , " output in MS excel format.")
+
+ mainTable = HT.TableLite(HT.TR(infoTD, HT.TD(controlFrm, Class="doubleBorder", width=400), HT.TD("&nbsp;", width="")), cellpadding=10)
+
+ if fd.formdata.getvalue('submitter') in ['refresh'] or not hasattr(self,"daA"):
+ mainTable.append(HT.TR(HT.TD(geneTable, colspan=3)))
+
+ self.dict['body'] = HT.TD(mainTable)
+ self.dict['title'] = "QTLminer"
+
+ self.cursor.close();
+
+ def genGeneTable(self, fd, dispFields, strain1, strain2):
+
+ filename = ""
+ if self.xls:
+ #import pyXLWriter as xl
+ filename = "IntAn_Chr%s_%2.6f-%2.6f" % (self.Chr, self.startMb, self.endMb)
+ filename += ".xls"
+
+ # Create a new Excel workbook
+ workbook = xl.Writer(os.path.join(webqtlConfig.TMPDIR, filename))
+ worksheet = workbook.add_worksheet()
+ titleStyle = workbook.add_format(align = 'left', bold = 0, size=18, border = 1, border_color="gray")
+ headingStyle = workbook.add_format(align = 'center', bold = 1, size=13, fg_color = 0x1E, color="white", border = 1, border_color="gray")
+
+ ##Write title Info
+ worksheet.write([0, 0], "GeneNetwork Interval Analyst Table", titleStyle)
+ worksheet.write([1, 0], "%s%s" % (webqtlConfig.PORTADDR, os.path.join(webqtlConfig.CGIDIR, _scriptfile)))
+ #
+ worksheet.write([2, 0], "Date : %s" % time.strftime("%B %d, %Y", time.gmtime()))
+ worksheet.write([3, 0], "Time : %s GMT" % time.strftime("%H:%M ", time.gmtime()))
+ worksheet.write([4, 0], "Search by : %s" % fd.remote_ip)
+ worksheet.write([5, 0], "view region : Chr %s %2.6f - %2.6f Mb" % (self.Chr, self.startMb, self.endMb))
+ nTitleRow = 7
+
+ geneTable = HT.TableLite(Class="collap", cellpadding=5)
+ headerRow = HT.TR(HT.TD(" ", Class="fs13 fwb ffl b1 cw cbrb", width="1"))
+ if self.xls:
+ worksheet.write([nTitleRow, 0], "Index", headingStyle)
+
+ for ncol, column in enumerate(dispFields):
+ if column[0]=='meanA':
+ headerRow.append(HT.TD("Expression in" , HT.BR(), self.grAsel, HT.BR(), self.tyAsel, Class="fs13 fwb ffl b1 cw cbrb", NOWRAP=1,align="Center"))
+ if self.xls:
+ colTitle = columnNames[column[0]][0]
+ worksheet.write([nTitleRow, ncol+1], colTitle, headingStyle)
+ worksheet.set_column([ncol+1, ncol+1], 2*len(colTitle))
+ elif column[0]=='meanB':
+ headerRow.append(HT.TD("Expression in" , HT.BR(), self.grBsel, HT.BR(), self.tyBsel, Class="fs13 fwb ffl b1 cw cbrb", NOWRAP=1,align="Center"))
+ if self.xls:
+ colTitle = columnNames[column[0]][0]
+ worksheet.write([nTitleRow, ncol+1], colTitle, headingStyle)
+ worksheet.set_column([ncol+1, ncol+1], 2*len(colTitle))
+ elif column[0]=='meanC':
+ headerRow.append(HT.TD("Expression in" , HT.BR(), self.grCsel, HT.BR(), self.tyCsel, Class="fs13 fwb ffl b1 cw cbrb", NOWRAP=1,align="Center"))
+ if self.xls:
+ colTitle = columnNames[column[0]][0]
+ worksheet.write([nTitleRow, ncol+1], colTitle, headingStyle)
+ worksheet.set_column([ncol+1, ncol+1], 2*len(colTitle))
+ elif column[0]=='probesetcisA':
+ headerRow.append(HT.TD("Cis regulated in" , HT.BR(), self.grAsel, HT.BR(), self.tyAsel, Class="fs13 fwb ffl b1 cw cbrb", NOWRAP=1,align="Center"))
+ if self.xls:
+ colTitle = columnNames[column[0]][0]
+ worksheet.write([nTitleRow, ncol+1], colTitle, headingStyle)
+ worksheet.set_column([ncol+1, ncol+1], 2*len(colTitle))
+ elif column[0]=='probesetcisB':
+ headerRow.append(HT.TD("Cis regulated in" , HT.BR(), self.grBsel, HT.BR(), self.tyBsel, Class="fs13 fwb ffl b1 cw cbrb", NOWRAP=1,align="Center"))
+ if self.xls:
+ colTitle = columnNames[column[0]][0]
+ worksheet.write([nTitleRow, ncol+1], colTitle, headingStyle)
+ worksheet.set_column([ncol+1, ncol+1], 2*len(colTitle))
+ elif column[0]=='probesetcisC':
+ headerRow.append(HT.TD("Cis regulated in" , HT.BR(), self.grCsel, HT.BR(), self.tyCsel, Class="fs13 fwb ffl b1 cw cbrb", NOWRAP=1,align="Center"))
+ if self.xls:
+ colTitle = columnNames[column[0]][0]
+ worksheet.write([nTitleRow, ncol+1], colTitle, headingStyle)
+ worksheet.set_column([ncol+1, ncol+1], 2*len(colTitle))
+ elif column[0]=='probesetA':
+ headerRow.append(HT.TD("Probeset in" , HT.BR(), self.grAsel, HT.BR(), self.tyAsel, Class="fs13 fwb ffl b1 cw cbrb", NOWRAP=1,align="Center"))
+ if self.xls:
+ colTitle = columnNames[column[0]][0]
+ worksheet.write([nTitleRow, ncol+1], colTitle, headingStyle)
+ worksheet.set_column([ncol+1, ncol+1], 2*len(colTitle))
+ elif column[0]=='probesetB':
+ headerRow.append(HT.TD("Probeset in" , HT.BR(), self.grBsel, HT.BR(), self.tyBsel, Class="fs13 fwb ffl b1 cw cbrb", NOWRAP=1,align="Center"))
+ if self.xls:
+ colTitle = columnNames[column[0]][0]
+ worksheet.write([nTitleRow, ncol+1], colTitle, headingStyle)
+ worksheet.set_column([ncol+1, ncol+1], 2*len(colTitle))
+ elif column[0]=='probesetC':
+ headerRow.append(HT.TD("Probeset in" , HT.BR(), self.grCsel, HT.BR(), self.tyCsel, Class="fs13 fwb ffl b1 cw cbrb", NOWRAP=1,align="Center"))
+ if self.xls:
+ colTitle = columnNames[column[0]][0]
+ worksheet.write([nTitleRow, ncol+1], colTitle, headingStyle)
+ worksheet.set_column([ncol+1, ncol+1], 2*len(colTitle))
+ elif column[0]=='hasexpr':
+ headerRow.append(HT.TD("Has expression in" , HT.BR(), self.grAsel, HT.BR(), self.tyAsel, Class="fs13 fwb ffl b1 cw cbrb", NOWRAP=1,align="Center"))
+ if self.xls:
+ colTitle = columnNames[column[0]][0]
+ worksheet.write([nTitleRow, ncol+1], colTitle, headingStyle)
+ worksheet.set_column([ncol+1, ncol+1], 2*len(colTitle))
+ elif column[0]=='hascis':
+ headerRow.append(HT.TD("Cis regulated in" , HT.BR(), self.grAsel, HT.BR(), self.tyAsel, Class="fs13 fwb ffl b1 cw cbrb", NOWRAP=1,align="Center"))
+ if self.xls:
+ colTitle = columnNames[column[0]][0]
+ worksheet.write([nTitleRow, ncol+1], colTitle, headingStyle)
+ worksheet.set_column([ncol+1, ncol+1], 2*len(colTitle))
+ elif column[0]=='snpCountmis':
+ headerRow.append(HT.TD("nsSNPs" , HT.BR(), "all strains", HT.BR(), " ", Class="fs13 fwb ffl b1 cw cbrb", NOWRAP=1,align="Center"))
+ if self.xls:
+ colTitle = columnNames[column[0]][0]
+ worksheet.write([nTitleRow, ncol+1], colTitle, headingStyle)
+ worksheet.set_column([ncol+1, ncol+1], 2*len(colTitle))
+ elif column[0]=='snpCountmissel':
+ headerRow.append(HT.TD("nsSNPs" , HT.BR(), self.str1, " vs", HT.BR(), self.str2, Class="fs13 fwb ffl b1 cw cbrb", NOWRAP=1,align="Center"))
+ if self.xls:
+ colTitle = columnNames[column[0]][0]
+ worksheet.write([nTitleRow, ncol+1], colTitle, headingStyle)
+ worksheet.set_column([ncol+1, ncol+1], 2*len(colTitle))
+
+
+
+
+ elif len(column) == 1:
+ # header
+ headerRow.append(HT.TD(columnNames[column[0]][0], Class="fs13 fwb ffl b1 cw cbrb", NOWRAP=1,align="Center"))
+ if self.xls:
+ colTitle = columnNames[column[0]][0]
+ worksheet.write([nTitleRow, ncol+1], colTitle, headingStyle)
+ worksheet.set_column([ncol+1, ncol+1], 2*len(colTitle))
+ else:
+ # header
+ headerRow.append(HT.TD(columnNames[column[0]][0], HT.BR(), " (%s)" % speciesFreeze[column[1]],
+ Class="fs13 fwb ffl b1 cw cbrb", NOWRAP=1, align="Center"))
+ if self.xls:
+ colTitle = columnNames[column[0]][0] + " (%s)" % speciesFreeze[column[1]]
+ worksheet.write([nTitleRow, ncol+1], colTitle, headingStyle)
+ worksheet.set_column([ncol+1, ncol+1], 2*len(colTitle))
+ #headerRow.append(HT.TD(columnNames[column[0]][0], HT.BR(),
+ # "(%s %s)" % (column[1].title(), speciesFreeze[column[1]]),
+ # Class="colorBlue", NOWRAP=1, align="Center"))
+ geneTable.append(headerRow)
+
+ geneColnul = GeneUtil.loadGenesForQTLminer(self.cursor, self.Chr, self.diffColDefault, self.startMb, self.endMb, species=self.species, databaseA=self.daAsel, databaseB=self.daBsel, databaseC=self.daCsel, str1=self.str1, str2=self.str2)
+
+ # scores = []
+ # for gIndex, theGO in enumerate(geneCol):
+ # keyValue = ""
+ # fieldName = 'score'
+ # if theGO.has_key(fieldName):
+ # keyValue = theGO[fieldName]
+ # scores.append(keyValue)
+
+ sort_on = "TxStart"
+ myrev = False
+ if self.sorton == "Score":
+ sort_on = "score"
+ myrev = True
+ geneColeen = [(dict_[sort_on], dict_) for dict_ in geneColnul]
+ geneColeen.sort(reverse=myrev)
+ geneCol = [dict_ for (key, dict_) in geneColeen]
+
+
+
+ for gIndex, theGO in enumerate(geneCol):
+ geneRow = HT.TR(HT.TD(gIndex+1, Class="fs12 fwn b1", align="right"))
+ if self.xls:
+ nTitleRow += 1
+ worksheet.write([nTitleRow, 0], gIndex + 1)
+
+ for ncol, column in enumerate(dispFields):
+ if len(column) == 1 or column[1]== self.species:
+ keyValue = ""
+ fieldName = column[0]
+ curSpecies = self.species
+ curGO = theGO
+ if theGO.has_key(fieldName):
+ keyValue = theGO[fieldName]
+ else:
+ fieldName , othSpec = column
+ curSpecies = othSpec
+ subGO = '%sGene' % othSpec
+ keyValue = ""
+ curGO = theGO[subGO]
+ if theGO[subGO].has_key(fieldName):
+ keyValue = theGO[subGO][fieldName]
+
+ if self.xls:
+ worksheet.write([nTitleRow, ncol+1], keyValue)
+ geneRow.append(self.formatTD(keyValue, fieldName, curSpecies, curGO, strain1, strain2))
+
+ geneTable.append(geneRow)
+
+ if self.xls:
+ workbook.close()
+ return geneTable, filename
+
+ def formatTD(self, keyValue, fieldName, Species, theGO, strain1, strain2):
+ if keyValue is None:
+ keyValue = ""
+ if keyValue != "":
+ if fieldName in ("exonStarts", "exonEnds"):
+ keyValue = string.replace(keyValue, ',', ' ')
+ return HT.TD(HT.Span(keyValue, Class="code", Id="green"), width=350, Class="fs12 fwn b1")
+ elif fieldName in ("GeneDescription"):
+ if keyValue == "---":
+ keyValue = ""
+ return HT.TD(keyValue, Class="fs12 fwn b1", width=300)
+ elif fieldName in ("GeneSymbol"):
+ webqtlLink = HT.Href("./%s/%s?cmd=sch&gene=%s&alias=1&species=%s" % (webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE, keyValue, Species),
+ HT.Image("/images/webqtl_search.gif", border=0, valign="top"), target="_blank")
+ if theGO['GeneID']:
+ geneSymbolLink = HT.Href(webqtlConfig.NCBI_LOCUSID % theGO['GeneID'], keyValue, Class="normalsize", target="_blank")
+ else:
+ geneSymbolLink = keyValue
+ return HT.TD(webqtlLink, geneSymbolLink, Class="fs12 fwn b1",NOWRAP=1)
+ elif fieldName == 'UnigenID':
+ try:
+ gurl = HT.Href(webqtlConfig.UNIGEN_ID % tuple(string.split(keyValue,'.')[:2]), keyValue, Class="normalsize", target="_blank")
+ except:
+ gurl = keyValue
+ return HT.TD(gurl, Class="fs12 fwn b1",NOWRAP=1)
+ elif fieldName in ("exonCount", "Chromosome"):
+ return HT.TD(keyValue, Class="fs12 fwn b1",align="right")
+ elif fieldName in ("snpCount"):
+ return HT.TD(keyValue, Class="fs12 fwn b1",NOWRAP=1)
+ elif fieldName in ("snpCountmis"):
+ snpString = HT.Href(url="%s?FormID=SnpBrowserResultPage&submitStatus=1&chr=%s&start=%s&end=%s&domain=Exon&variant=SNP" % (os.path.join(webqtlConfig.CGIDIR, 'main.py'),theGO["Chromosome"], theGO["TxStart"], theGO["TxEnd"] ), text=theGO["snpCountmis"], target="_blank", Class="normalsize")
+ return HT.TD(snpString, Class="fs12 fwn b1",NOWRAP=1)
+ elif fieldName in ("snpCountmissel"):
+ snpString = HT.Href(url="%s?FormID=SnpBrowserResultPage&submitStatus=1&chr=%s&start=%s&end=%s&domain=Exon&variant=SNP&customStrain=1&diffAlleles=1&chosenStrains=%s,%s" % (os.path.join(webqtlConfig.CGIDIR, 'main.py'),theGO["Chromosome"], theGO["TxStart"], theGO["TxEnd"], self.str1, self.str2 ), text=theGO["snpCountmissel"], target="_blank", Class="normalsize")
+ return HT.TD(snpString, Class="fs12 fwn b1",NOWRAP=1)
+
+
+# if keyValue:
+# snpString = HT.Href(url="%s?chr=%s&start=%s&end=%s&geneName=%s&s1=%d&s2=%d" % (os.path.join(webqtlConfig.CGIDIR, 'snpBrowser.py'), theGO["Chromosome"], theGO["TxStart"], theGO["TxEnd"], theGO["GeneSymbol"], self.diffColDefault[0], self.diffColDefault[1]), text=theGO["snpCount"], target="_blank", Class="normalsize")
+# else:
+# snpString = keyValue
+# return HT.TD(snpString, Class="fs12 fwn b1",align="right")
+ elif fieldName in ("snpDensity", "GeneLength"):
+ if keyValue: keyValue = "%2.3f" % keyValue
+ else: keyValue = ""
+ return HT.TD(keyValue, Class="fs12 fwn b1",align="right")
+ elif fieldName in ("TxStart", "TxEnd"):
+ return HT.TD("%2.6f" % keyValue, Class="fs12 fwn b1",align="right")
+ elif fieldName in ("score"):
+ return HT.TD("%1d" % keyValue, Class="fs12 fwn b1",align="right")
+ elif fieldName in ("pathways", "pathwaynames", "goterms"):
+ html = HT.Paragraph(Class="fs12 fwn b1")
+ for kk in keyValue:
+ html.append(kk,HT.BR())
+ return HT.TD(html, Class="fs12 fwn b1",align="right",NOWRAP=1)
+ elif fieldName in ("probesetA", "probesetB", "probesetC"):
+ html = HT.Paragraph(Class="fs12 fwn b1")
+ for kk in keyValue:
+ html.append(kk,HT.BR())
+ return HT.TD(html, Class="fs12 fwn b1",align="right")
+ elif fieldName in ("probesetsymbolA"):
+ html = HT.Paragraph(Class="fs12 fwn b1")
+ for kk in keyValue:
+ html.append(kk,HT.BR())
+ return HT.TD(html, Class="fs12 fwn b1",align="right")
+ elif fieldName in ("meanA", "meanB", "meanC"):
+ html = HT.Paragraph(Class="fs12 fwn b1")
+ for kk in keyValue:
+ html.append(str(round(kk,1)),HT.BR())
+ return HT.TD(html, Class="fs12 fwn b1",align="right")
+ elif fieldName in ("hassnp", "hasindel", "hasexpr","hascis"):
+ html = HT.Paragraph(Class="fs12 fwn b1")
+ for kk in keyValue:
+ html.append(kk,HT.BR())
+ return HT.TD(html, Class="fs12 fwn b1",align="right")
+ elif fieldName in ("newlrsA", "newlrsB", "newlrsC"):
+ html = HT.Paragraph(Class="fs12 fwn b1")
+ for kk in keyValue:
+ html.append(str(round(kk,1)),HT.BR())
+ return HT.TD(html, Class="fs12 fwn b1",align="right")
+ elif fieldName in ("probesetcisA", "probesetcisB", "probesetcisC"):
+ html = HT.Paragraph(Class="fs12 fwn b1")
+ for kk in keyValue:
+ html.append(kk,HT.BR())
+# if kk==0:
+# html.append('no',HT.BR())
+# if kk==1:
+# html.append('yes',HT.BR())
+ return HT.TD(html, Class="fs12 fwn b1",align="right")
+ else:
+ return HT.TD(keyValue, Class="fs12 fwn b1",NOWRAP=1)
+ else:
+ return HT.TD(keyValue, Class="fs12 fwn b1",NOWRAP=1,align="right")
+
+# def getStrainNameList(self, strain_data):
+# return strain_data[1:]
+ def getStrainNamePair(self):
+ strainNamePair=[]
+ query ='SELECT * FROM SnpPattern limit 1'
+ self.cursor.execute(query)
+ num_fields = len(self.cursor.description)
+ field_names = [i[0] for i in self.cursor.description]
+ strainsNameList=field_names[1:]
+ for index, name in enumerate(strainsNameList):
+ strainNamePair.append((name,name))
+ return strainNamePair
+
+ def genControlForm(self, fd):
+ ##desc GeneList
+ self.cursor.execute("Desc GeneList")
+ GeneListFields = self.cursor.fetchall()
+ GeneListFields = map(lambda X: X[0], GeneListFields)
+
+ #group columns by category--used for creating the dropdown list of possible columns
+ categories = {}
+ for item in columnNames.keys():
+ category = columnNames[item]
+ if category[-1] not in categories.keys():
+ categories[category[-1]] = [item ]
+ else:
+ categories[category[-1]] = categories[category[-1]]+[item]
+
+ ##List All Species in the Gene Table
+ speciesDict = {}
+ self.cursor.execute("select Species.Name, GeneList.SpeciesId from Species, GeneList where \
+ GeneList.SpeciesId = Species.Id group by GeneList.SpeciesId order by Species.Id")
+ results = self.cursor.fetchall()
+ speciesField = categories.pop('species', [])
+ categoriesOrder = ['gene', 'protein']
+ for item in results:
+ specName, specId = item
+ categoriesOrder.append(specName)
+ speciesDict[specName] = specId
+ AppliedField = []
+ for item2 in speciesField:
+ if item2 in GeneListFields:
+ self.cursor.execute("select %s from GeneList where SpeciesId = %d and %s is not NULL limit 1 " % (item2, specId, item2))
+ columnApply = self.cursor.fetchone()
+ if not columnApply:
+ continue
+ elif specName != 'mouse' and item2 in ('snpCount', 'snpDensity'):
+ continue
+ else:
+ pass
+ AppliedField.append(item2)
+ categories[specName] = AppliedField
+
+ categoriesOrder += ['misc']
+
+ s1_data = self.getStrainNamePair()
+ self.allStrainNames = s1_data[1:]
+
+
+
+ ############################################################
+ ## Create the list of possible columns for the dropdown list
+ ############################################################
+ allColumnsList = HT.Select(name="allColumns", Class="snpBrowserDropBox")#onChange="addToList(this.form.allColumns.options[this.form.allColumns.selectedIndex].text, this.form.allColumns.options[this.form.allColumns.selectedIndex].value, this.form.columns)")
+
+ for category in categoriesOrder:
+ allFields = categories[category]
+ if allFields:
+ geneOpt = HT.Optgroup(label=category.title())
+ for item in allFields:
+ if category in speciesFreeze.keys():
+ geneOpt.append(("%s (%s %s)" % (columnNames[item][1], category.title(), speciesFreeze[category]),
+ "%s__%s" % (item, speciesFreeze[category])))
+ else:
+ geneOpt.append((columnNames[item][1], item))
+ geneOpt.sort()
+ allColumnsList.append(geneOpt)
+
+ allColumnsList2 = HT.Select(name="allColumns2", Class="snpBrowserDropBox")
+ for item in self.allStrainNames:
+ allColumnsList2.append(item)
+
+ ######################################
+ ## Create the list of selected columns
+ ######################################
+
+ #cols contains the value of all the selected columns
+ submitCols = cols = fd.formdata.getvalue("columns", "default")
+
+ if cols == "default":
+ if self.species=="mouse": #these are the same columns that are shown on intervalPage.py
+ cols = ['GeneSymbol', 'GeneDescription', 'goterms', 'pathwaynames', 'Chromosome', 'TxStart', 'snpCountmis', 'snpCountmissel', 'meanA', 'meanB', 'meanC', 'probesetcisA','probesetcisB','probesetcisC', 'probesetA','probesetB','probesetC', 'indelCountBXD','hassnp','hasindel','hasexpr','hascis','score']
+ elif self.species=="rat":
+ cols = ['GeneSymbol', 'GeneDescription', 'Chromosome', 'TxStart', 'GeneLength', 'Strand', 'GeneID', 'UnigenID']
+ else:
+ #should not happen
+ cols = []
+ else:
+ if type(cols)==type(""):
+ cols = [cols]
+
+ colsLst = []
+ dispFields = []
+ for column in cols:
+ if submitCols == "default" and column not in ('GeneSymbol') and (column in GeneListFields or column in speciesField):
+ colsLst.append(("%s (%s %s)" % (columnNames[column][1], self.species.title(), speciesFreeze[self.species]),
+ "%s__%s" % (column, speciesFreeze[self.species])))
+ dispFields.append([column, self.species])
+ else:
+ column2 = column.split("__")
+ if len(column2) == 1:
+ colsLst.append((columnNames[column2[0]][1], column))
+ dispFields.append([column])
+ else:
+ thisSpecies = speciesFreeze[column2[1]]
+ colsLst.append(("%s (%s %s)" % (columnNames[column2[0]][1], thisSpecies.title(), column2[1]),
+ column))
+ dispFields.append((column2[0], thisSpecies))
+ selectedColumnsList = HT.Select(name="columns", Class="snpBrowserSelectBox", multiple="true", data=colsLst, size=6)
+
+
+
+ ######### now for the strains!!!!!!
+
+ #cols contains the value of all the selected columns
+ submitCols2 = cols2 = fd.formdata.getvalue("columns2", "default")
+
+ if cols2 == "default":
+ if self.species=="mouse": #these are the same columns that are shown on intervalPage.py
+ cols2 = ['C57BL/6J', 'DBA/2J',]
+ else:
+ #should not happen
+ cols2 = []
+ else:
+ if type(cols2)==type(""):
+ cols2 = [cols2]
+
+ colsLst2 = []
+ dispFields2 = []
+ for column2 in cols2:
+# if submitCols2 == "default" and (column in GeneListFields or column in speciesField):
+# colsLst2.append(("%s (%s %s)" % (columnNames[column][1], self.species.title(), speciesFreeze[self.species]),
+# "%s__%s" % (column, speciesFreeze[self.species])))
+# dispFields.append([column, self.species])
+# else:
+# column2 = column.split("__")
+# if len(column2) == 1:
+ colsLst2.append((column2, column2))
+ dispFields2.append([column2])
+ selectedColumnsList2 = HT.Select(name="columns2", Class="snpBrowserSelectBox", multiple="true", data=colsLst2, size=6)
+
+ ######### now for the sorton
+
+ #cols contains the value of all the selected columns
+ submitCols3 = cols3 = fd.formdata.getvalue("columns3", "default")
+
+ if cols3 == "default":
+ if self.species=="mouse": #these are the same columns that are shown on intervalPage.py
+ cols3 = ['Position', 'Score',]
+ else:
+ #should not happen
+ cols3 = []
+ else:
+ if type(cols3)==type(""):
+ cols3 = [cols3]
+
+ colsLst3 = []
+ dispFields3 = []
+ for column3 in cols3:
+ colsLst3.append((column3, column3))
+ dispFields3.append([column3])
+ selectedColumnsList3 = HT.Select(name="columns3", Class="snpBrowserSelectBox", multiple="true", data=colsLst3, size=6)
+
+
+
+
+
+ ##########################
+ ## Create the columns form
+ ##########################
+ columnsForm = HT.Form(name="columnsForm", submit=HT.Input(type='hidden'), cgi=os.path.join(webqtlConfig.CGIDIR, _scriptfile), enctype="multipart/form-data")
+ columnsForm.append(HT.Input(type="hidden", name="fromdatabase", value= fd.formdata.getvalue("fromdatabase", "unknown")))
+ columnsForm.append(HT.Input(type="hidden", name="species", value=self.species))
+ columnsForm.append(HT.Input(type="hidden", name="submitter", value="empty"))
+ if self.diffCol:
+ columnsForm.append(HT.Input(type="hidden", name="s1", value=self.diffCol[0]))
+ columnsForm.append(HT.Input(type="hidden", name="s2", value=self.diffCol[1]))
+ startBox = HT.Input(type="text", name="startMb", value=self.startMb, size=10)
+ endBox = HT.Input(type="text", name="endMb", value=self.endMb, size=10)
+ addButton = HT.Input(type="button", name="add", value="Add", Class="button", onClick="addToList(this.form.allColumns.options[this.form.allColumns.selectedIndex].text, this.form.allColumns.options[this.form.allColumns.selectedIndex].value, this.form.columns)")
+# addButton2 = HT.Input(type="button", name="add", value="Add", Class="button", onClick="addToList(this.form.allColumns2.options[this.form.allColumns2.selectedIndex].text, this.form.allColumns2.options[this.form.allColumns2.selectedIndex].value, this.form.columns2)")
+ removeButton = HT.Input(type="button", name="remove", value="Remove", Class="button", onClick="removeFromList(this.form.columns.selectedIndex, this.form.columns)")
+# removeButton2 = HT.Input(type="button", name="remove", value="Remove", Class="button", onClick="removeFromList(this.form.columns2.selectedIndex, this.form.columns2)")
+ upButton = HT.Input(type="button", name="up", value="Up", Class="button", onClick="swapOptions(this.form.columns.selectedIndex, this.form.columns.selectedIndex-1, this.form.columns)")
+ downButton = HT.Input(type="button", name="down", value="Down", Class="button", onClick="swapOptions(this.form.columns.selectedIndex, this.form.columns.selectedIndex+1, this.form.columns)")
+ clearButton = HT.Input(type="button", name="clear", value="Clear", Class="button", onClick="deleteAllElements(this.form.columns)")
+ submitButton = HT.Input(type="submit", value="Analyze QTL interval", Class="button", onClick="Javascript:this.form.submitter.value='refresh';selectAllElements(this.form.columns)")
+
+
+ selectChrBox = HT.Select(name="chromosome")
+ self.cursor.execute("""
+ Select
+ Chr_Length.Name, Length from Chr_Length, Species
+ where
+ Chr_Length.SpeciesId = Species.Id AND
+ Species.Name = '%s'
+ Order by
+ Chr_Length.OrderId
+ """ % self.species)
+
+ results = self.cursor.fetchall()
+ for chrInfo in results:
+ selectChrBox.append((chrInfo[0], chrInfo[0]))
+ selectChrBox.selected.append(self.Chr)
+
+############################################ 2 strain boxes
+
+ selectstr1 = HT.Select(name="str1")
+ for item in self.allStrainNames:
+ selectstr1.append(item[0])
+ selectstr1.selected.append(self.str1)
+
+ selectstr2 = HT.Select(name="str2")
+ for item in self.allStrainNames:
+ selectstr2.append(item[0])
+ selectstr2.selected.append(self.str2)
+
+############################################ select sort on
+
+ selectsorton = HT.Select(name="sorton")
+ selectsorton.append('Position')
+ selectsorton.append('Score')
+ selectsorton.selected.append('Position')
+
+
+############################################
+ selectSpeciesBoxA = HT.Select(name="myspeciesA",onChange="Javascript:this.form.submitter.value='s2';submit();")
+ for speciesInfo in self.spA:
+ name = ''
+ if speciesInfo[0]=='mouse':
+ name='Mouse'
+ elif speciesInfo[0]=='rat':
+ name='Rat'
+ elif speciesInfo[0]=='arabidopsis':
+ name='Arabidopsis thaliana'
+ elif speciesInfo[0]=='human':
+ name='Human'
+ elif speciesInfo[0]=='barley':
+ name='Barley'
+ elif speciesInfo[0]=='drosophila':
+ name='Drosophila'
+ elif speciesInfo[0]=='macaque monkey':
+ name='Macaque Monkey'
+
+ selectSpeciesBoxA.append((name, speciesInfo[0]))
+ selectSpeciesBoxA.selected.append(self.spAsel)
+
+ selectGroupBoxA = HT.Select(name="groupA",onChange="Javascript:this.form.submitter.value='a2';submit();")
+ for groupInfo in self.grA:
+ selectGroupBoxA.append((groupInfo[1], groupInfo[0]))
+ selectGroupBoxA.selected.append(self.grAsel)
+
+ selectTypeBoxA = HT.Select(name="typeA",onChange="Javascript:this.form.submitter.value='a3';submit();")
+ for typeInfo in self.tyA:
+ selectTypeBoxA.append((typeInfo[0] + ' mRNA', typeInfo[0]))
+ selectTypeBoxA.selected.append(self.tyAsel)
+
+ selectDatabaseBoxA = HT.Select(name="databaseA",onChange="Javascript:this.form.submitter.value='a4';submit();")
+ for databaseInfo in self.daA:
+ selectDatabaseBoxA.append((databaseInfo[1], databaseInfo[0]))
+ selectDatabaseBoxA.selected.append(self.daAsel)
+
+#############################
+############################################
+ selectSpeciesBoxB = HT.Select(name="myspeciesB",onChange="Javascript:this.form.submitter.value='b1';submit();")
+ for speciesInfo in self.spB:
+ name = ''
+ if speciesInfo[0]=='mouse':
+ name='Mouse'
+ elif speciesInfo[0]=='rat':
+ name='Rat'
+ elif speciesInfo[0]=='arabidopsis':
+ name='Arabidopsis thaliana'
+ elif speciesInfo[0]=='human':
+ name='Human'
+ elif speciesInfo[0]=='barley':
+ name='Barley'
+ elif speciesInfo[0]=='drosophila':
+ name='Drosophila'
+ elif speciesInfo[0]=='macaque monkey':
+ name='Macaque Monkey'
+
+ selectSpeciesBoxB.append((name, speciesInfo[0]))
+ selectSpeciesBoxB.selected.append(self.spBsel)
+
+ selectGroupBoxB = HT.Select(name="groupB",onChange="Javascript:this.form.submitter.value='b2';submit();")
+ for groupInfo in self.grB:
+ selectGroupBoxB.append((groupInfo[1], groupInfo[0]))
+ selectGroupBoxB.selected.append(self.grBsel)
+
+ selectTypeBoxB = HT.Select(name="typeB",onChange="Javascript:this.form.submitter.value='b3';submit();")
+ for typeInfo in self.tyB:
+ selectTypeBoxB.append((typeInfo[0] + ' mRNA', typeInfo[0]))
+ selectTypeBoxB.selected.append(self.tyBsel)
+
+ selectDatabaseBoxB = HT.Select(name="databaseB",onChange="Javascript:this.form.submitter.value='b4';submit();")
+ for databaseInfo in self.daB:
+ selectDatabaseBoxB.append((databaseInfo[1], databaseInfo[0]))
+ selectDatabaseBoxB.selected.append(self.daBsel)
+
+############################################
+#############################
+############################################
+ selectSpeciesBoxC = HT.Select(name="myspeciesC",onChange="Javascript:this.form.submitter.value='c1';submit();")
+ for speciesInfo in self.spC:
+ name = ''
+ if speciesInfo[0]=='mouse':
+ name='Mouse'
+ elif speciesInfo[0]=='rat':
+ name='Rat'
+ elif speciesInfo[0]=='arabidopsis':
+ name='Arabidopsis thaliana'
+ elif speciesInfo[0]=='human':
+ name='Human'
+ elif speciesInfo[0]=='barley':
+ name='Barley'
+ elif speciesInfo[0]=='drosophila':
+ name='Drosophila'
+ elif speciesInfo[0]=='macaque monkey':
+ name='Macaque Monkey'
+
+ selectSpeciesBoxC.append((name, speciesInfo[0]))
+ selectSpeciesBoxC.selected.append(self.spCsel)
+
+ selectGroupBoxC = HT.Select(name="groupC",onChange="Javascript:this.form.submitter.value='c2';submit();")
+ for groupInfo in self.grC:
+ selectGroupBoxC.append((groupInfo[1], groupInfo[0]))
+ selectGroupBoxC.selected.append(self.grCsel)
+
+ selectTypeBoxC = HT.Select(name="typeC",onChange="Javascript:this.form.submitter.value='c3';submit();")
+ for typeInfo in self.tyC:
+ selectTypeBoxC.append((typeInfo[0] + ' mRNA', typeInfo[0]))
+ selectTypeBoxC.selected.append(self.tyCsel)
+
+ selectDatabaseBoxC = HT.Select(name="databaseC",onChange="Javascript:this.form.submitter.value='c4';submit();")
+ for databaseInfo in self.daC:
+ selectDatabaseBoxC.append((databaseInfo[1], databaseInfo[0]))
+ selectDatabaseBoxC.selected.append(self.daCsel)
+
+############################################
+
+
+
+
+#############################
+
+
+
+
+ innerColumnsTable = HT.TableLite(border=0, Class="collap", cellpadding = 2)
+ innerColumnsTable.append(HT.TR(HT.TD(selectedColumnsList)),
+ HT.TR(HT.TD(clearButton, removeButton, upButton, downButton)))
+# innerColumnsTable2 = HT.TableLite(border=0, Class="collap", cellpadding = 2)
+# innerColumnsTable2.append(HT.TR(HT.TD(selectedColumnsList2)),
+# HT.TR(HT.TD(removeButton2)))
+ columnsTable = HT.TableLite(border=0, cellpadding=2, cellspacing=0)
+ columnsTable.append(
+ HT.TR(HT.TD(HT.Font("&nbsp;")),
+ HT.TD(HT.Strong("Select the QTL interval"))),
+ HT.TR(HT.TD(HT.Font("Chr: ", size=-1)),
+ HT.TD(selectChrBox)),
+ HT.TR(HT.TD(HT.Font("View: ", size=-1)),
+ HT.TD(startBox, HT.Font("Mb to ", size=-1), endBox, HT.Font("Mb", size=-1))),
+ HT.TR(HT.TD(HT.Font("&nbsp;", size=-1)),
+ HT.TD("&nbsp;")),
+ HT.TR(HT.TD(HT.Font("&nbsp;")),
+ HT.TD(HT.Strong("Select two mouse strains for inclusion of nsSNP count"))),
+ HT.TR(HT.TD(HT.Font("Strains: ", size=-1)),
+ HT.TD(selectstr1,selectstr2)),
+ HT.TR(HT.TD(HT.Font("&nbsp;", size=-1)),
+ HT.TD("&nbsp;")),
+ HT.TR(HT.TD(HT.Font("&nbsp;")),
+ HT.TD(HT.Strong("Select 3 datasets for inclusion of expression and cis-activity data"))),
+ HT.TR(HT.TD(HT.Font("&nbsp;", size=-1)),
+ HT.TD("&nbsp;")),
+ HT.TR(HT.TD("&nbsp;"),
+ HT.TD(HT.Font("Dataset 1", size=-1))),
+ HT.TR(HT.TD(HT.Font("Species: ", size=-1)),
+ HT.TD(selectSpeciesBoxA)),
+ HT.TR(HT.TD(HT.Font("Group: ", size=-1)),
+ HT.TD(selectGroupBoxA)),
+ HT.TR(HT.TD(HT.Font("Type: ", size=-1)),
+ HT.TD(selectTypeBoxA)),
+ HT.TR(HT.TD(HT.Font("Database: ", size=-1)),
+ HT.TD(selectDatabaseBoxA)),
+ HT.TR(HT.TD(HT.Font("&nbsp;", size=-1)),
+ HT.TD("&nbsp;")),
+ HT.TR(HT.TD("&nbsp;"),
+ HT.TD(HT.Font("Dataset 2", size=-1))),
+ HT.TR(HT.TD(HT.Font("Species: ", size=-1)),
+ HT.TD(selectSpeciesBoxB)),
+ HT.TR(HT.TD(HT.Font("Group: ", size=-1)),
+ HT.TD(selectGroupBoxB)),
+ HT.TR(HT.TD(HT.Font("Type: ", size=-1)),
+ HT.TD(selectTypeBoxB)),
+ HT.TR(HT.TD(HT.Font("Database: ", size=-1)),
+ HT.TD(selectDatabaseBoxB)),
+ HT.TR(HT.TD(HT.Font("&nbsp;", size=-1)),
+ HT.TD("&nbsp;")),
+ HT.TR(HT.TD("&nbsp;"),
+ HT.TD(HT.Font("Dataset 3", size=-1))),
+ HT.TR(HT.TD(HT.Font("Species: ", size=-1)),
+ HT.TD(selectSpeciesBoxC)),
+ HT.TR(HT.TD(HT.Font("Group: ", size=-1)),
+ HT.TD(selectGroupBoxC)),
+ HT.TR(HT.TD(HT.Font("Type: ", size=-1)),
+ HT.TD(selectTypeBoxC)),
+ HT.TR(HT.TD(HT.Font("Database: ", size=-1)),
+ HT.TD(selectDatabaseBoxC)),
+# HT.TR(HT.TD(""),
+# HT.TD(innerColumnsTable2)),
+ HT.TR(HT.TD(HT.Font("&nbsp;", size=-1)),
+ HT.TD("&nbsp;")),
+ HT.TR(HT.TD(HT.Font("&nbsp;")),
+ HT.TD(HT.Strong("Optionally, choose additional data to display"))),
+ HT.TR(HT.TD(HT.Font("Show: ", size=-1)),
+ HT.TD(allColumnsList, addButton)),
+ HT.TR(HT.TD(HT.Font("Selected:",size=-1)),
+ HT.TD(innerColumnsTable)),
+ HT.TR(HT.TD(HT.Font("&nbsp;", size=-1)),
+ HT.TD("&nbsp;")),
+ HT.TR(HT.TD(HT.Font("Sort by: ", size=-1)),
+ HT.TD(selectsorton)),
+ HT.TR(HT.TD(HT.Font("&nbsp;", size=-1)),
+ HT.TD("&nbsp;")),
+ HT.TR(HT.TD(HT.Font("&nbsp;", size=-1)),
+ HT.TD(submitButton)),
+
+ )
+ columnsForm.append(columnsTable)
+ #columnsForm.append(HT.Input(type="hidden", name="sort", value=diffCol),
+ # HT.Input(type="hidden", name="identification", value=identification),
+ # HT.Input(type="hidden", name="traitInfo", value=traitInfo))
+
+ return columnsForm, dispFields, dispFields2
diff --git a/web/webqtl/qtlminer/__init__.py b/web/webqtl/qtlminer/__init__.py
new file mode 100755
index 00000000..e69de29b
--- /dev/null
+++ b/web/webqtl/qtlminer/__init__.py