aboutsummaryrefslogtreecommitdiff
path: root/web/webqtl/correlationMatrix
diff options
context:
space:
mode:
authorzsloan2015-03-27 20:28:51 +0000
committerzsloan2015-03-27 20:28:51 +0000
commitd0911a04958a04042da02a334ccc528dae79cc17 (patch)
tree3c48e2e937c1dbeaf00a5697c87ed251afa5c8f1 /web/webqtl/correlationMatrix
parenta840ad18e1fe3db98a359a159e9b9b72367a2839 (diff)
downloadgenenetwork2-d0911a04958a04042da02a334ccc528dae79cc17.tar.gz
Removed everything from 'web' directory except genofiles and renamed the directory to 'genotype_files'
Diffstat (limited to 'web/webqtl/correlationMatrix')
-rwxr-xr-xweb/webqtl/correlationMatrix/CorrelationMatrixPage.py595
-rwxr-xr-xweb/webqtl/correlationMatrix/TissueAbbreviationPage.py79
-rwxr-xr-xweb/webqtl/correlationMatrix/TissueCorrelationPage.py673
-rwxr-xr-xweb/webqtl/correlationMatrix/__init__.py0
-rwxr-xr-xweb/webqtl/correlationMatrix/tissueCorrelationMatrix.py132
5 files changed, 0 insertions, 1479 deletions
diff --git a/web/webqtl/correlationMatrix/CorrelationMatrixPage.py b/web/webqtl/correlationMatrix/CorrelationMatrixPage.py
deleted file mode 100755
index a01111f5..00000000
--- a/web/webqtl/correlationMatrix/CorrelationMatrixPage.py
+++ /dev/null
@@ -1,595 +0,0 @@
-# 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 NL 2011/02/14
-
-import os
-import string
-from htmlgen import HTMLgen2 as HT
-import sys
-import time
-import numarray
-import numarray.linear_algebra as la
-import piddle as pid
-import math
-
-from base.templatePage import templatePage
-from base import webqtlConfig
-from base.webqtlTrait import webqtlTrait
-from utility import webqtlUtil
-from utility import Plot
-
-
-
-# XZ, 09/09/2008: After adding several traits to collection, click "Correlation Matrix" button,
-# XZ, 09/09/2008: This class will generate what you see.
-#########################################
-# Correlation Matrix Page
-#########################################
-
-class CorrelationMatrixPage(templatePage):
-
- def __init__(self,fd,InputData=None):
-
- templatePage.__init__(self, fd)
-
- self.dict['title'] = 'Correlation Matrix'
-
- if not self.openMysql():
- return
-
- if not fd.genotype:
- fd.readGenotype()
- fd.strainlist = fd.f1list + fd.strainlist
-
- #self.searchResult = fd.formdata.getvalue('searchResult')
- self.oldSearchResult = fd.formdata.getvalue('oldSearchResult')
-
- if self.oldSearchResult:
- try:
- self.searchResult = fd.formdata.getvalue('oldSearchResult')
- except:
- self.searchResult = fd.formdata.getvalue('searchResult')
-
- else:
- self.searchResult = fd.formdata.getvalue('searchResult')
-
- if not self.searchResult:
- heading = 'Correlation Matrix'
- detail = ['You need to select at least two traits in order to generate correlation matrix.']
- self.error(heading=heading,detail=detail)
- return
- if type("1") == type(self.searchResult):
- self.searchResult = [self.searchResult]
-
- if self.searchResult:
- #testvals,names,dbInfos = self.getAllSearchResult(fd,self.searchResult)
- if len(self.searchResult) > webqtlConfig.MAXCORR:
- heading = 'Correlation Matrix'
- detail = ['In order to display Correlation Matrix properly, Do not select more than %d traits for Correlation Matrix.' % webqtlConfig.MAXCORR]
- self.error(heading=heading,detail=detail)
- return
-
- #XZ, 7/22/2009: this block is not necessary
- #elif len(self.searchResult) > 40:
- # noPCA = 1
- #else:
- # noPCA = 0
-
- traitList = []
- traitDataList = []
- for item in self.searchResult:
- thisTrait = webqtlTrait(fullname=item, cursor=self.cursor)
- thisTrait.retrieveInfo()
- thisTrait.retrieveData(fd.strainlist)
- traitList.append(thisTrait)
- traitDataList.append(thisTrait.exportData(fd.strainlist))
-
- else:
- heading = 'Correlation Matrix'
- detail = [HT.Font('Error : ',color='red'),HT.Font('Error occurs while retrieving data FROM database.',color='black')]
- self.error(heading=heading,detail=detail)
- return
-
- NNN = len(traitList)
-
- if NNN == 0:
- heading = "Correlation Matrix"
- detail = ['No trait was selected for %s data set. No matrix generated.' % self.data.RISet]
- self.error(heading=heading,detail=detail)
- return
- elif NNN < 2:
- heading = 'Correlation Matrix'
- detail = ['You need to select at least two traits in order to generate correlation matrix.']
- self.error(heading=heading,detail=detail)
- return
- else:
-
-
-
- corArray = [([0] * (NNN+1))[:] for i in range(NNN+1)]
- pearsonArray = [([0] * (NNN))[:] for i in range(NNN)]
- spearmanArray = [([0] * (NNN))[:] for i in range(NNN)]
- corArray[0][0] = 'Correlation'
- TD_LR = HT.TD(colspan=2,width="100%",bgColor='#eeeeee')
- form = HT.Form( cgi= os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE), enctype='multipart/form-data', name='showDatabase', submit=HT.Input(type='hidden'))
- hddn = {'FormID':'showDatabase', 'ProbeSetID':'_','database':'_',
- 'CellID':'_','ProbeSetID2':'_','database2':'_','CellID2':'_',
- 'newNames':fd.formdata.getvalue("newNames", "_"),
- 'RISet':fd.RISet,'ShowStrains':'ON','ShowLine':'ON', 'rankOrder':'_',
- "allstrainlist":string.join(fd.strainlist, " "), 'traitList':string.join(self.searchResult, "\t")}
- if fd.incparentsf1:
- hddn['incparentsf1']='ON'
-
- for key in hddn.keys():
- form.append(HT.Input(name=key, value=hddn[key], type='hidden'))
-
- for item in self.searchResult:
- form.append(HT.Input(name='oldSearchResult', value=str(item), type='hidden'))
-
- traiturls = []
- traiturls2 = []
- shortNames = []
- verboseNames = []
- verboseNames2 = []
- verboseNames3 = []
- abbreviation = ''
-
- #dbInfo.ProbeSetID = ProbeSetID
- #dbInfo.CellID = CellID
- for i, thisTrait in enumerate(traitList):
- _url = "javascript:showDatabase2('%s','%s','%s');" % (thisTrait.db.name, thisTrait.name, thisTrait.cellid)
- #_text = 'Trait%d: ' % (i+1)+str(thisTrait)
- _text = 'Trait %d: ' % (i+1)+thisTrait.displayName()
-
- if thisTrait.db.type == 'Geno':
- _shortName = 'Genotype'
- abbreviation = 'Genotype'
- _verboseName = 'Locus %s' % (thisTrait.name)
- _verboseName2 = 'Chr %s @ %s Mb' % (thisTrait.chr, '%2.3f' % thisTrait.mb)
- _verboseName3 = ''
- elif thisTrait.db.type == 'Publish':
- if thisTrait.post_publication_abbreviation:
- AbbreviationString = thisTrait.post_publication_abbreviation
- else:
- AbbreviationString = ''
- if thisTrait.confidential:
- if not webqtlUtil.hasAccessToConfidentialPhenotypeTrait(privilege=self.privilege, userName=self.userName, authorized_users=thisTrait.authorized_users):
- if thisTrait.pre_publication_abbreviation:
- AbbreviationString = thisTrait.pre_publication_abbreviation
- else:
- AbbreviationString = ''
- _shortName = 'Phenotype: %s' % (AbbreviationString)
- _verboseName2 = ''
- _verboseName3 = ''
- if thisTrait.pubmed_id:
- _verboseName = 'PubMed %d: ' % thisTrait.pubmed_id
- else:
- _verboseName = 'Unpublished '
- _verboseName += 'RecordID/%s' % (thisTrait.name)
- PhenotypeString = thisTrait.post_publication_description
- if thisTrait.confidential:
- if not webqtlUtil.hasAccessToConfidentialPhenotypeTrait(privilege=self.privilege, userName=self.userName, authorized_users=thisTrait.authorized_users):
- PhenotypeString = thisTrait.pre_publication_description
- _verboseName2 = 'Phenotype: %s' % (PhenotypeString)
- if thisTrait.authors:
- a1 = string.split(thisTrait.authors,',')[0]
- while a1[0] == '"' or a1[0] == "'" :
- a1 = a1[1:]
- _verboseName += ' by '
- _verboseName += HT.Italic('%s, and colleagues' % (a1))
- elif thisTrait.db.type == 'Temp':
- abbreviation = ''
- _shortName = thisTrait.name
- if thisTrait.description:
- _verboseName = thisTrait.description
- else:
- _verboseName = 'Temp'
- _verboseName2 = ''
- _verboseName3 = ''
- else:
- abbreviation = thisTrait.symbol
- _shortName = 'Symbol: %s ' % thisTrait.symbol
- _verboseName = thisTrait.symbol
- _verboseName2 = ''
- _verboseName3 = ''
- if thisTrait.chr and thisTrait.mb:
- _verboseName += ' on Chr %s @ %s Mb' % (thisTrait.chr,thisTrait.mb)
- if thisTrait.description:
- _verboseName2 = '%s' % (thisTrait.description)
- if thisTrait.probe_target_description:
- _verboseName3 = '%s' % (thisTrait.probe_target_description)
-
- cururl = HT.Href(text=_text, url=_url,Class='fs12')
- cururl2 = HT.Href(text='Trait%d' % (i+1),url=_url,Class='fs12')
- traiturls.append(cururl)
- traiturls2.append(cururl2)
- shortName = HT.Div(id="shortName_" + str(i), style="display:none")
- shortName.append(_shortName)
- shortNames.append(shortName)
- verboseName = HT.Div(id="verboseName_" + str(i), style="display:none")
- verboseName.append(_verboseName)
- verboseNames.append(verboseName)
- verboseName2 = HT.Div(id="verboseName2_" + str(i), style="display:none")
- verboseName2.append(_verboseName2)
- verboseNames2.append(verboseName2)
- verboseName3 = HT.Div(id="verboseName3_" + str(i), style="display:none")
- verboseName3.append(_verboseName3)
- verboseNames3.append(verboseName3)
-
-
-
- corArray[i+1][0] = 'Trait%d: ' % (i+1)+str(thisTrait) + '/' + str(thisTrait) + ': ' + abbreviation + '/' + str(thisTrait) + ': ' + str(_verboseName) + ' : ' + str(_verboseName2) + ' : ' + str(_verboseName3)
- corArray[0][i+1] = 'Trait%d: ' % (i+1)+str(thisTrait)
-
- corMatrixHeading = HT.Paragraph('Correlation Matrix', Class="title")
-
- tbl = HT.TableLite(Class="collap", border=0, cellspacing=1,
- cellpadding=5, width='100%')
- row1 = HT.TR(HT.TD(Class="fs14 fwb ffl b1 cw cbrb"),
- HT.TD('Spearman Rank Correlation (rho)', Class="fs14 fwb ffl b1 cw cbrb", colspan= NNN+1,align="center")
- )
- row2 = HT.TR(
- HT.TD("P e a r s o n &nbsp;&nbsp;&nbsp; r", rowspan= NNN+1,Class="fs14 fwb ffl b1 cw cbrb", width=10,align="center"),
- HT.TD(Class="b1", width=300))
- for i in range(NNN):
- row2.append(HT.TD(traiturls2[i], Class="b1", align="center"))
- tbl.append(row1,row2)
-
- nOverlapTrait =9999
- nnCorr = len(fd.strainlist)
- for i, thisTrait in enumerate(traitList):
- newrow = HT.TR()
- newrow.append(HT.TD(traiturls[i], shortNames[i], verboseNames[i], verboseNames2[i],
- verboseNames3[i], Class="b1"))
- names1 = [thisTrait.db.name, thisTrait.name, thisTrait.cellid]
- for j, thisTrait2 in enumerate(traitList):
- names2 = [thisTrait2.db.name, thisTrait2.name, thisTrait2.cellid]
- if j < i:
- corr,nOverlap = webqtlUtil.calCorrelation(traitDataList[i],traitDataList[j],nnCorr)
-
- rank = fd.formdata.getvalue("rankOrder", "0")
-
- if nOverlap < nOverlapTrait:
- nOverlapTrait = nOverlap
- if corr > 0.7:
- fontcolor="red"
- elif corr > 0.5:
- fontcolor="#FF6600"
- elif corr < -0.7:
- fontcolor="blue"
- elif corr < -0.5:
- fontcolor="#009900"
- else:
- fontcolor ="#000000"
-
- pearsonArray[i][j] = corr
- pearsonArray[j][i] = corr
- if corr!= 0.0:
- corArray[i+1][j+1] = '%2.3f/%d' % (corr,nOverlap)
- thisurl = HT.Href(text=HT.Font('%2.3f'% corr,HT.BR(),'%d' % nOverlap ,color=fontcolor, Class="fs11 fwn"),url = "javascript:showCorrelationPlot2(db='%s',ProbeSetID='%s',CellID='%s',db2='%s',ProbeSetID2='%s',CellID2='%s',rank='%s')" % (names1[0], names1[1], names1[2], names2[0], names2[1], names2[2], rank))
- else:
- corArray[i+1][j+1] = '---/%d' % nOverlap
- thisurl = HT.Font('---',HT.BR(), '%d' % nOverlap)
-
- newrow.append(HT.TD(thisurl,Class="b1",NOWRAP="ON",align="middle"))
- elif j == i:
- corr,nOverlap = webqtlUtil.calCorrelation(traitDataList[i],traitDataList[j],nnCorr)
- pearsonArray[i][j] = 1.0
- spearmanArray[i][j] = 1.0
- corArray[i+1][j+1] = '%2.3f/%d' % (corr,nOverlap)
- nOverlap = webqtlUtil.calCorrelation(traitDataList[i],traitDataList[j],nnCorr)[1]
- newrow.append(HT.TD(HT.Href(text=HT.Font(HT.Italic("n"),HT.BR(),str(nOverlap),Class="fs11 fwn b1",align="center", color="000000"), url="javascript:showDatabase2('%s','%s','%s')" % (thisTrait.db.name, thisTrait.name, thisTrait.cellid)), bgColor='#cccccc', align="center", Class="b1", NOWRAP="ON"))
- else:
- corr,nOverlap = webqtlUtil.calCorrelationRank(traitDataList[i],traitDataList[j],nnCorr)
-
- rank = fd.formdata.getvalue("rankOrder", "1")
-
- if corr > 0.7:
- fontcolor="red"
- elif corr > 0.5:
- fontcolor="#FF6600"
- elif corr < -0.7:
- fontcolor="blue"
- elif corr < -0.5:
- fontcolor="#009900"
- else:
- fontcolor ="#000000"
- spearmanArray[i][j] = corr
- spearmanArray[j][i] = corr
- if corr!= 0.0:
- corArray[i+1][j+1] = '%2.3f/%d' % (corr,nOverlap)
- thisurl = HT.Href(text=HT.Font('%2.3f'% corr,HT.BR(),'%d' % nOverlap ,color=fontcolor, Class="fs11 fwn"),url = "javascript:showCorrelationPlot2(db='%s',ProbeSetID='%s',CellID='%s',db2='%s',ProbeSetID2='%s',CellID2='%s',rank='%s')" % (names1[0], names1[1], names1[2], names2[0], names2[1], names2[2], rank))
- else:
- corArray[i+1][j+1] = '---/%d' % nOverlap
- thisurl = HT.Span('---',HT.BR(), '%d' % nOverlap, Class="fs11 fwn")
- newrow.append(HT.TD(thisurl,Class="b1", NOWRAP="ON",align="middle"))
- tbl.append(newrow)
-
- info = HT.Blockquote('Lower left cells list Pearson product-moment correlations; upper right cells list Spearman rank order correlations. Each cell also contains the n of cases. Values higher than 0.7 are displayed in ',HT.Font('red', color='red'),'; those between 0.5 and 0.7 in ',HT.Font('orange', color='#FF6600'),'; Values lower than -0.7 are in ',HT.Font('blue', color='blue'),'; between -0.5 and -0.7 in ',HT.Font('green', color='#009900'),'. Select any cell to generate a scatter plot. Select trait labels for more information.', Class="fs13 fwn")
-
- exportbutton = HT.Input(type='button', name='export', value='Export', onClick="exportText(allCorrelations);",Class="button")
- shortButton = HT.Input(type='button' ,name='dispShort',value=' Short Labels ', onClick="displayShortName();",Class="button")
- verboseButton = HT.Input(type='button' ,name='dispVerbose',value=' Long Labels ', onClick="displayVerboseName();", Class="button")
- form.append(HT.Blockquote(tbl,HT.P(),shortButton,verboseButton,exportbutton))
- TD_LR.append(corMatrixHeading,info,form,HT.P())
-
- #if noPCA:
- # TD_LR.append(HT.Blockquote('No PCA is computed if more than 32 traits are selected.'))
-
- #print corArray
- exportScript = """
- <SCRIPT language=JavaScript>
- var allCorrelations = %s;
- </SCRIPT>
-
- """
- exportScript = exportScript % str(corArray)
- self.dict['js1'] = exportScript+'<SCRIPT SRC="/javascript/correlationMatrix.js"></SCRIPT><BR>'
- self.dict['body'] = str(TD_LR)
-
- #don't calculate PCA while number exceed 32
- #if noPCA:
- # return
-
- #XZ, 7/22/2009: deal with PCA stuff
- #Only for Array Data
-
- if NNN > 2:
-
- traitname = map(lambda X:str(X.name), traitList)
-
- #generate eigenvalues
-
- # import sys
- sys.argv=[" "]
- # import numarray
- # import numarray.linear_algebra as la
- #spearmanEigen = eigenvectors(array(spearmanArray))
- pearsonEigen = la.eigenvectors(numarray.array(pearsonArray))
- #spearmanEigenValue,spearmanEigenVectors = self.sortEigenVectors(spearmanEigen)
- pearsonEigenValue,pearsonEigenVectors = self.sortEigenVectors(pearsonEigen)
-
-
- """
- for i in range(len(pearsonEigenValue)):
- if type(pearsonEigenValue[i]).__name__ == 'complex':
- pearsonEigenValue[i] = pearsonEigenValue[i].real
- for i in range(len(pearsonEigenVectors)):
- for j in range(len(pearsonEigenVectors[i])):
- if type(pearsonEigenVectors[i][j]).__name__ == 'complex':
- pearsonEigenVectors[i][j] = pearsonEigenVectors[i][j].real
- if type(pearsonEigenVectors[i][j]).__name__ == 'complex':
- pearsonEigenVectors[i][j] = pearsonEigenVectors[i][j].real
- """
-
- if type(pearsonEigenValue[0]).__name__ == 'complex':
- pass
- else:
- traitHeading = HT.Paragraph('PCA Traits',align='left', Class="title")
-
- tbl2 = self.calcPCATraits(traitDataList=traitDataList, nnCorr=nnCorr, NNN=NNN, pearsonEigenValue=pearsonEigenValue,
- pearsonEigenVectors=pearsonEigenVectors, form=form, fd=fd)
- #Buttons on search page
- #mintmap = HT.Input(type='button' ,name='mintmap',value='Multiple Mapping', onClick="databaseFunc(this.form,'showIntMap');",Class="button")
- addselect = HT.Input(type='button' ,name='addselect',value='Add to Collection', onClick="addRmvSelection('%s', this.form, 'addToSelection');" % fd.RISet,Class="button")
- selectall = HT.Input(type='button' ,name='selectall',value='Select All', onClick="checkAll(this.form);",Class="button")
- reset = HT.Input(type='reset',name='',value='Select None',Class="button")
- updateNames = HT.Input(type='button', name='updateNames',value='Update Trait Names', onClick="editPCAName(this.form);", Class="button")
- chrMenu = HT.Input(type='hidden',name='chromosomes',value='all')
-
- """
- #need to be refined
- if fd.genotype.Mbmap:
- scaleMenu = HT.Select(name='scale')
- scaleMenu.append(tuple(["Genetic Map",'morgan']))
- scaleMenu.append(tuple(["Physical Map",'physic']))
- else:
- scaleMenu = ""
- """
-
- tbl2.append(HT.TR(HT.TD(HT.P(),chrMenu,updateNames,selectall,reset,addselect,colspan=3)))
- form.append(HT.P(),traitHeading,HT.Blockquote(tbl2))
-
- plotHeading1 = HT.Paragraph('Scree Plot', Class="title")
- TD_LR.append(plotHeading1)
- img1 = self.screePlot(NNN=NNN, pearsonEigenValue=pearsonEigenValue)
-
- TD_LR.append(HT.Blockquote(img1))
-
- plotHeading2 = HT.Paragraph('Factor Loadings Plot', Class="title")
- TD_LR.append(plotHeading2)
- img2 = self.factorLoadingsPlot(pearsonEigenVectors=pearsonEigenVectors, traitList=traitList)
-
- TD_LR.append(HT.Blockquote(img2))
-
- self.dict['body'] = str(TD_LR)
-
- def screePlot(self, NNN=0, pearsonEigenValue=None):
-
- c1 = pid.PILCanvas(size=(700,500))
- Plot.plotXY(canvas=c1, dataX=range(1,NNN+1), dataY=pearsonEigenValue, rank=0, labelColor=pid.blue,plotColor=pid.red, symbolColor=pid.blue, XLabel='Factor Number', connectdot=1,YLabel='Percent of Total Variance %', title='Pearson\'s R Scree Plot')
- filename= webqtlUtil.genRandStr("Scree_")
- c1.save(webqtlConfig.IMGDIR+filename, format='gif')
- img=HT.Image('/image/'+filename+'.gif',border=0)
-
- return img
-
- def factorLoadingsPlot(self, pearsonEigenVectors=None, traitList=None):
-
- traitname = map(lambda X:str(X.name), traitList)
- c2 = pid.PILCanvas(size=(700,500))
- Plot.plotXY(c2, pearsonEigenVectors[0],pearsonEigenVectors[1], 0, dataLabel = traitname, labelColor=pid.blue, plotColor=pid.red, symbolColor=pid.blue,XLabel='Factor (1)', connectdot=1, YLabel='Factor (2)', title='Factor Loadings Plot (Pearson)', loadingPlot=1)
- filename= webqtlUtil.genRandStr("FacL_")
- c2.save(webqtlConfig.IMGDIR+filename, format='gif')
- img = HT.Image('/image/'+filename+'.gif',border=0)
-
- return img
-
- def calcPCATraits(self, traitDataList=None, nnCorr=0, NNN=0, pearsonEigenValue=None, pearsonEigenVectors=None, form=None, fd=None):
- """
- This function currently returns the html to be displayed instead of the traits themselves. Need to fix later.
- """
-
- detailInfo = string.split(self.searchResult[0],':')
-
- self.sameProbeSet = 'yes'
- for item in self.searchResult[1:]:
- detailInfo2 = string.split(item,':')
- if detailInfo[0] != detailInfo2[0] or detailInfo[1] != detailInfo2[1]:
- self.sameProbeSet = None
- break
-
- for item in traitDataList:
- if len(item) != nnCorr:
- return
- infoStrains = []
- infoStrainsPos = []
- dataArray = [[] for i in range(NNN)]
-
- for i in range(len(traitDataList[0])):
- currentStrain = 1
- for j in range(NNN):
- if not traitDataList[j][i]:
- currentStrain = 0
- break
- if currentStrain == 1:
- infoStrains.append(fd.strainlist[i])
- infoStrainsPos.append(i)
- for j in range(NNN):
- dataArray[j].append(traitDataList[j][i])
-
-
- self.cursor.execute('delete Temp, TempData FROM Temp, TempData WHERE Temp.DataId = TempData.Id and UNIX_TIMESTAMP()-UNIX_TIMESTAMP(CreateTime)>%d;' % webqtlConfig.MAXLIFE)
-
- StrainIds = []
- for item in infoStrains:
- self.cursor.execute('SELECT Strain.Id FROM Strain,StrainXRef, InbredSet WHERE Strain.Name="%s" and Strain.Id = StrainXRef.StrainId and StrainXRef.InbredSetId = InbredSet.Id and InbredSet.Name = "%s"' % (item, fd.RISet))
- StrainIds.append('%d' % self.cursor.fetchone()[0])
-
- """
- #minimal 12 overlapping strains
- if len(dataArray[0]) < 12:
- form.append(HT.P(),traitHeading,HT.Blockquote(HT.Paragraph('The number of overlapping strains is less than 12, no PCA scores computed.',align='left')))
- self.dict['body'] = str(TD_LR)
- return
- """
- dataArray = self.zScore(dataArray)
- dataArray = numarray.array(dataArray)
- dataArray2 = numarray.dot(pearsonEigenVectors,dataArray)
-
- tbl2 = HT.TableLite(cellSpacing=2,cellPadding=0,border=0, width="100%")
-
- ct0 = time.localtime(time.time())
- ct = time.strftime("%B/%d %H:%M:%S",ct0)
- if self.sameProbeSet:
- newDescription = 'PCA Traits generated at %s from %s' % (ct,detailInfo[1])
- else:
- newDescription = 'PCA Traits generated at %s from traits selected' % ct
-
-
- j = 1
- self.cursor.execute('SELECT Id FROM InbredSet WHERE Name = "%s"' % fd.RISet)
- InbredSetId = self.cursor.fetchall()[0][0]
- user_ip = fd.remote_ip
- if fd.formdata.getvalue("newNames"):
- newNames = fd.formdata.getvalue("newNames").split(",")
- else:
- newNames = 0
-
- for item in dataArray2:
- if pearsonEigenValue[j-1] < 100.0/NNN:
- break
-
- if (newNames == 0):
- description = '%s : PC%02d' % (newDescription, j)
- else:
- description = '%s : %s' % (newDescription, newNames[j-1])
-
- self.cursor.execute('SELECT max(id) FROM TempData')
- try:
- DataId = self.cursor.fetchall()[0][0] + 1
- except:
- DataId = 1
- newProbeSetID = webqtlUtil.genRandStr("PCA_Tmp_")
- self.cursor.execute('insert into Temp(Name,description, createtime,DataId,InbredSetId,IP) values(%s,%s,Now(),%s,%s,%s)' ,(newProbeSetID, description, DataId,InbredSetId,user_ip))
-
- k = 0
- for StrainId in StrainIds:
- self.cursor.execute('insert into TempData(Id, StrainId, value) values(%s,%s,%s)' % (DataId, StrainId, item[k]*(-1.0)))
- k += 1
- setDescription = HT.Div(id="pcaTrait%s" % j)
- descriptionLink = HT.Href(text=description, url="javascript:showDatabase2('Temp','%s','')" % newProbeSetID, Class="fwn")
- descriptionEdit = HT.Input(type='text', value='', name='editName%s' % j)
-
- #onBlur='editPDAName(this.form, %s);' % j
-
- setDescription.append(descriptionLink)
- setDescription.append(descriptionEdit)
-
- traitName = "%s:%s" % ('Temp',newProbeSetID)
- tbl2.append(HT.TR(HT.TD("%d."%j,align="right",valign="top"),HT.TD(HT.Input(type="checkbox", Class="checkbox", name="searchResult",value=traitName),valign="top",width=50),HT.TD(setDescription)))
- j += 1
-
- return tbl2
-
- def zScore(self,dataArray):
- NN = len(dataArray[0])
- if NN < 10:
- return dataArray
- else:
- i = 0
- for data in dataArray:
- N = len(data)
- S = reduce(lambda x,y: x+y, data, 0.)
- SS = reduce(lambda x,y: x+y*y, data, 0.)
- mean = S/N
- var = SS - S*S/N
- stdev = math.sqrt(var/(N-1))
- data2 = map(lambda x:(x-mean)/stdev,data)
- dataArray[i] = data2
- i += 1
- return dataArray
-
- def sortEigenVectors(self,vector):
- try:
- eigenValues = vector[0].tolist()
- eigenVectors = vector[1].tolist()
- combines = []
- i = 0
- for item in eigenValues:
- combines.append([eigenValues[i],eigenVectors[i]])
- i += 1
- combines.sort(webqtlUtil.cmpEigenValue)
- A = []
- B = []
- for item in combines:
- A.append(item[0])
- B.append(item[1])
- sum = reduce(lambda x,y: x+y, A, 0.0)
- A = map(lambda x:x*100.0/sum, A)
- return [A,B]
- except:
- return []
-
diff --git a/web/webqtl/correlationMatrix/TissueAbbreviationPage.py b/web/webqtl/correlationMatrix/TissueAbbreviationPage.py
deleted file mode 100755
index ad8f0ac7..00000000
--- a/web/webqtl/correlationMatrix/TissueAbbreviationPage.py
+++ /dev/null
@@ -1,79 +0,0 @@
-# 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 2011/12/7
-#
-# Last updated by GeneNetwork Core Team 2011/12/7
-
-
-from base.templatePage import templatePage
-from htmlgen import HTMLgen2 as HT
-
-import string
-import os
-
-
-class TissueAbbreviationPage (templatePage):
-
- def __init__(self,fd):
- templatePage.__init__(self, fd)
-
- shortName=fd.formdata.getfirst("shortTissueName", ',')
- fullName=fd.formdata.getfirst("fullTissueName", ',')
- shortNameList=[]
- fullNameList=[]
-
- if shortName:
- shortNameList=shortName.split(',')
-
- if fullName:
- fullNameList=fullName.split(',')
-
- tissueAbbrDict={}
- for i, item in enumerate(shortNameList):
- tissueAbbrDict[item]=fullNameList[i]
-
- if tissueAbbrDict:
-
- # Creates the table for the fullname and shortname of Tissue
- tissueAbbrTable = HT.TableLite(border=1, cellspacing=5, cellpadding=3, Class="collap")
- shortNameList = tissueAbbrDict.keys()
- shortNameList.sort()
- abbrHeaderStyle="fs14 fwb ffl"
- abbrStyle="fs14 fwn ffl"
-
- tissueAbbrTable.append(HT.TR(HT.TD('Abbr&nbsp;&nbsp;', Class=abbrHeaderStyle, NOWRAP = 1),HT.TD('Full Name&nbsp;&nbsp;', Class=abbrHeaderStyle, NOWRAP = 1)))
- for item in shortNameList:
- thisTR = HT.TR(HT.TD(item, Class=abbrStyle, NOWRAP = 1))
- thisTR.append(HT.TD(tissueAbbrDict[item], Class=abbrStyle, NOWRAP = 1))
-
- tissueAbbrTable.append(thisTR)
-
- self.dict['body'] = HT.TD(HT.Paragraph("Tissue Abbreviation", Class="title"), HT.Blockquote(tissueAbbrTable))
- self.dict['title'] = "Tissue Abbreviation"
- else:
- heading = "Tissue abbreviation"
- detail = ["Cannot found Tissue Abbreviation. Please try again later."]
- self.error(heading=heading,detail=detail)
- return
-
-
diff --git a/web/webqtl/correlationMatrix/TissueCorrelationPage.py b/web/webqtl/correlationMatrix/TissueCorrelationPage.py
deleted file mode 100755
index 7cb86d8c..00000000
--- a/web/webqtl/correlationMatrix/TissueCorrelationPage.py
+++ /dev/null
@@ -1,673 +0,0 @@
-# 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)
-# user can search correlation value and P-Value by inputting one pair gene symbols or multiple gene symbols.
-
-# Created by GeneNetwork Core Team 2010/07/07
-# Last updated by NL, 2011/03/25
-
-from htmlgen import HTMLgen2 as HT
-import os
-import sys
-import time
-import string
-import pyXLWriter as xl
-import cPickle
-
-from base.templatePage import templatePage
-from base import webqtlConfig
-from base.webqtlTrait import webqtlTrait
-from correlationMatrix.tissueCorrelationMatrix import tissueCorrelationMatrix
-from utility import webqtlUtil
-from utility.THCell import THCell
-from utility.TDCell import TDCell
-
-
-#########################################
-# Tissue Correlation Page
-#########################################
-
-class TissueCorrelationPage(templatePage):
-
- def __init__(self, fd):
-
- templatePage.__init__(self, fd)
-
- if not self.openMysql():
- return
-
- #read input fields
- self.action = fd.formdata.getvalue("action", "").strip()
- self.geneSymbols = fd.formdata.getvalue("geneSymbols","").strip()
- self.tissueProbeSetFeezeId = fd.formdata.getvalue("tissueProbeSetFeezeId", "").strip()
- self.recordReturnNum = fd.formdata.getvalue("recordReturnNum", "0").strip()
- self.calculateMethod = fd.formdata.getvalue("calculateMethod", "0").strip()
-
- TissueCorrMatrixObject = tissueCorrelationMatrix(tissueProbeSetFreezeId=self.tissueProbeSetFeezeId)
-
- if not self.geneSymbols:
- # default page
-
- Heading = HT.Paragraph("Tissue Correlation", Class="title")
- Intro = HT.Blockquote("This function computes correlations between transcript expression across different organs and tissues.")
- Intro.append(HT.BR(),"Select a data set from the pull-down menu and then compute correlations.")
-
- formName='searchTissueCorrelation'
- form = HT.Form(cgi= os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE), target='_blank',enctype='multipart/form-data', name= formName, submit=HT.Input(type='hidden'))
- form.append(HT.Input(type="hidden", name="FormID", value=""))
- form.append(HT.Input(type="hidden", name="action", value="disp"))
-
- # added by NL 10/12/2010, retreive dataSet info from TissueProbeSetFreeze to get all TissueProbeSetFreezeId, datasetName and FullName
- tissProbeSetFreezeIds,dataSetNames,dataSetfullNames = TissueCorrMatrixObject.getTissueDataSet()
-
- dataSetList=[]
- for i in range(len(tissProbeSetFreezeIds)):
- dataSetList.append((dataSetfullNames[i], tissProbeSetFreezeIds[i]))
- dataSetMenu = HT.Select(dataSetList,name="tissueProbeSetFeezeId")
-
- InfoFile =HT.Input(type="button", Class="button", value=" Info ", onClick="tissueDatasetInfo(this.form.tissueProbeSetFeezeId,%s);"%(dataSetNames))
- form.append(HT.Strong("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"),dataSetMenu,InfoFile,HT.BR());
-
- form.append(HT.BR(),HT.Strong("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Please enter only one gene symbol/ENTREZ gene Id per line."),HT.BR(),HT.Strong("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"),HT.Textarea(name="geneSymbols", rows=10, cols=50, text=""),HT.BR(),HT.BR())
- # calculate method radio button
- calculateMethodMenu =HT.Input(type="radio", name="calculateMethod", value="0", checked="checked")
- calculateMethodMenu1 =HT.Input(type="radio", name="calculateMethod", value="1")
- # record Return method dropdown menu
- recordReturnMenu = HT.Select(name="recordReturnNum")
- recordReturnMenu.append(('Top 100','0'))
- recordReturnMenu.append(('Top 200','1'))
- recordReturnMenu.append(('Top 500','2'))
- recordReturnMenu.append(('Top 1000','3'))
- recordReturnMenu.append(('Top 2000','4'))
- recordReturnMenu.append(('All','5'))
-
- # working for input symbol has only one;
- form.append(HT.Strong("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"),HT.Span("Return:", Class="ffl fwb fs12"),HT.Strong("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"),recordReturnMenu,HT.BR());
- form.append(HT.BR(),HT.Strong("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"),'Pearson',calculateMethodMenu,"&nbsp;"*3,'Spearman Rank',calculateMethodMenu1,HT.BR(),HT.BR());
- form.append(HT.Strong("&nbsp;&nbsp;&nbsp;"),HT.Input(type="button", value="&nbsp;Compute&nbsp;", Class="button",onClick="selectFormIdForTissueCorr('%s');"%formName))
- form.append(HT.Strong("&nbsp;&nbsp;&nbsp;&nbsp;"),HT.Input(type="button", Class="button", value="&nbsp;Make Default&nbsp;", onClick = "makeTissueCorrDefault(this.form);"))
-
- TD_LR = HT.TD(height=200,width="100%",bgcolor='#eeeeee',align="left")
- TD_LR.append(Heading,Intro,form)
- self.content_type = 'text/html'
- self.dict['js1'] = '<SCRIPT SRC="/javascript/correlationMatrix.js"></SCRIPT><BR>'
- # get tissueProbesetFreezeId from cookie
- self.dict['js2'] = 'onload ="getTissueCorrDefault(\'searchTissueCorrelation\');"'
- self.dict['body'] = str(TD_LR)
- self.dict['title'] = "Tissue Correlation"
- elif self.action == 'disp':
- TissueCount =TissueCorrMatrixObject.getTissueCountofCurrentDataset()
-
- # add by NL for first Note part in the tissue correlation page. 2010-12-23
- note =""
- dataSetName=""
- datasetFullName=""
- dataSetName, datasetFullName= TissueCorrMatrixObject.getFullnameofCurrentDataset()
-
- noteURL = "../dbdoc/"+ dataSetName+".html"
- noteText = " was used to compute expression correlation across %s samples of tissues and organs.&nbsp["%TissueCount
- # dataset download
- datasetURL = "../dbdoc/"+ dataSetName+".xls"
- datasetDownload =HT.Href(text="Download experiment data",url=datasetURL,Class='fs13',target="_blank")
- note = HT.Blockquote(HT.Href(text=datasetFullName,url=noteURL,Class='fs13',target="_blank"),noteText, datasetDownload,"]",HT.BR())
-
- geneSymbolLst = [] # gene Symbol list
- geneSymbolLst = TissueCorrMatrixObject.getGeneSymbolLst(self.geneSymbols)
-
- symbolCount = len(geneSymbolLst)
- # The input symbol limit is 100.
- heading = "Tissue Correlation"
- if symbolCount > 100:
- detail = ['The Gene symbols you have input are more than 100. Please limit them to 100.']
- self.error(heading=heading,detail=detail)
- return
- elif symbolCount==0:
- detail = ['No Gene Symbol was input. No Tissue Correlation matrix generated.' ]
- self.error(heading=heading,detail=detail)
- return
- else:
- # search result page
- # The input symbols should be no less than 1.
- self.content_type = 'text/html'
- if symbolCount == 1:
- self.displaySingleSymbolResultPage(primaryGeneSymbol=geneSymbolLst[0],datasetFullName=datasetFullName,tProbeSetFreezeId=self.tissueProbeSetFeezeId, TissueCorrMatrixObject =TissueCorrMatrixObject,recordReturnNum=self.recordReturnNum,method=self.calculateMethod, note=note,TissueCount =TissueCount)
- else:
- self.displayMultiSymbolsResultPage(geneSymbolLst=geneSymbolLst, symbolCount=symbolCount, tProbeSetFreezeId=self.tissueProbeSetFeezeId,TissueCorrMatrixObject =TissueCorrMatrixObject,note=note,TissueCount =TissueCount)
-
- else:
- heading = "Tissue Correlation"
- detail = ['There\'s something wrong with input gene symbol(s), or the value of parameter [action] is not right.' ]
- self.error(heading=heading,detail=detail)
- return
-#############################
-# functions
-#############################
-
- # result page when input symbol has only one
- def displaySingleSymbolResultPage(self,primaryGeneSymbol=None, datasetFullName=None,tProbeSetFreezeId=None, TissueCorrMatrixObject =None,recordReturnNum=None,method=None,note=None,TissueCount =None):
- formName = webqtlUtil.genRandStr("fm_")
- form = HT.Form(cgi= os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE), enctype='multipart/form-data',name= formName, submit=HT.Input(type='hidden'))
- # the following hidden elements are required parameter in Class(PlotCorrelationPage). So we need to define them here.
- form.append(HT.Input(type="hidden", name="action", value="disp"))
- form.append(HT.Input(type="hidden", name="FormID", value="dispSingleTissueCorrelation"))
- form.append(HT.Input(type="hidden", name="X_geneSymbol", value=""))
- form.append(HT.Input(type="hidden", name="Y_geneSymbol", value=""))
- form.append(HT.Input(type="hidden", name="ProbeSetID", value=""))
- # RISet is not using in Tissue correlation, but is a required parameter in Class(PlotCorrelationPage). So we set dummy value(BXD).
- form.append(HT.Input(type="hidden", name="RISet", value="BXD"))
- form.append(HT.Input(type="hidden", name="ShowLine", value="1"))
- form.append(HT.Input(type="hidden", name="TissueProbeSetFreezeId", value=tProbeSetFreezeId))
- form.append(HT.Input(type="hidden", name="rankOrder", value=0))
-
- traitList =[]
- try:
- symbolCorrDict, symbolPvalueDict = TissueCorrMatrixObject.calculateCorrOfAllTissueTrait(primaryTraitSymbol=primaryGeneSymbol,method=method)
- except:
- heading = "Tissue Correlation"
- detail = ['Please use the official NCBI gene symbol.' ]
- self.error(heading=heading,detail=detail)
- return
-
- symbolList0,geneIdDict,dataIdDict,ChrDict,MbDict,descDict,pTargetDescDict=TissueCorrMatrixObject.getTissueProbeSetXRefInfo(GeneNameLst=[])
- # In case, upper case and lower case issue of symbol, mappedByTargetList function will update input geneSymbolLst based on database search result
- tempPrimaryGeneSymbol =self.mappedByTargetList(primaryList=symbolList0,targetList=[primaryGeneSymbol])
- primaryGeneSymbol =tempPrimaryGeneSymbol[0]
-
- returnNum = self.getReturnNum(recordReturnNum)
- symbolListSorted=[]
- symbolList=[]
- # get key(list) of symbolCorrDict(dict) based on sorting symbolCorrDict(dict) by its' value in desc order
- symbolListSorted=sorted(symbolCorrDict, key=symbolCorrDict.get, reverse=True)
- symbolList = self.mappedByTargetList(primaryList=symbolList0,targetList=symbolListSorted)
-
- if returnNum==None:
- returnNum =len(symbolList0)
- IntroReturnNum ="All %d "%returnNum
- else:
- IntroReturnNum ="The Top %d" %returnNum
-
- symbolList = symbolList[:returnNum]
-
- pageTable = HT.TableLite(cellSpacing=0,cellPadding=0,width="100%", border=0, align="Left")
-
- ##############
- # Excel file #
- ##############
- filename= webqtlUtil.genRandStr("Corr_")
- xlsUrl = HT.Input(type='button', value = 'Download Table', onClick= "location.href='/tmp/%s.xls'" % filename, Class='button')
- # Create a new Excel workbook
- workbook = xl.Writer('%s.xls' % (webqtlConfig.TMPDIR+filename))
- headingStyle = workbook.add_format(align = 'center', bold = 1, border = 1, size=13, fg_color = 0x1E, color="white")
- #There are 6 lines of header in this file.
- worksheet = self.createExcelFileWithTitleAndFooter(workbook=workbook, datasetName=datasetFullName, returnNumber=returnNum)
- newrow = 6
- pageTable.append(HT.TR(HT.TD(xlsUrl,height=40)))
-
- # get header part of result table and export excel file
- tblobj = {}
- tblobj['header'], worksheet = self.getTableHeader( method=method, worksheet=worksheet, newrow=newrow, headingStyle=headingStyle)
- newrow += 1
-
- # get body part of result table and export excel file
- tblobj['body'], worksheet = self.getTableBody(symbolCorrDict=symbolCorrDict, symbolPvalueDict=symbolPvalueDict,symbolList=symbolList,geneIdDict=geneIdDict,ChrDict=ChrDict,MbDict=MbDict,descDict=descDict,pTargetDescDict=pTargetDescDict,primarySymbol=primaryGeneSymbol,TissueCount=TissueCount, formName=formName, worksheet=worksheet, newrow=newrow,method=method)
- workbook.close()
- # creat object for result table for sort function
- objfile = open('%s.obj' % (webqtlConfig.TMPDIR+filename), 'wb')
- cPickle.dump(tblobj, objfile)
- objfile.close()
-
- sortby = ("tissuecorr", "down")
- div = HT.Div(webqtlUtil.genTableObj(tblobj=tblobj, file=filename, sortby=sortby, tableID = "sortable", addIndex = "1"), Id="sortable")
-
- if method =="0":
- IntroMethod="Pearson\'s r "
- else:
- IntroMethod="Spearman\'s rho "
- Intro = HT.Blockquote('%s correlations ranked by the %s are displayed.' % (IntroReturnNum,IntroMethod),
- ' You can resort this list using the small arrowheads in the top row.')
- Intro.append(HT.BR(),' Click the correlation values to generate scatter plots. Select the symbol to open NCBI Entrez.')
-
- pageTable.append(HT.TR(HT.TD(div)))
- form.append(HT.P(), HT.P(),pageTable)
- corrHeading = HT.Paragraph('Tissue Correlation Table', Class="title")
- TD_LR = HT.TD(height=200,width="100%",bgcolor='#eeeeee',align="left")
- TD_LR.append(corrHeading,note,Intro, form, HT.P())
-
- self.dict['body'] = str(TD_LR)
- self.dict['js1'] = '<SCRIPT SRC="/javascript/correlationMatrix.js"></SCRIPT><BR>'
- self.dict['title'] = 'Tissue Correlation Result'
-
- return
-
- # result page when input symbols are more than 1
- def displayMultiSymbolsResultPage(self, geneSymbolLst=None, symbolCount=None, tProbeSetFreezeId=None,TissueCorrMatrixObject=None,note=None,TissueCount =None):
-
- formName = webqtlUtil.genRandStr("fm_")
- form = HT.Form(cgi= os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE), enctype='multipart/form-data',name= formName, submit=HT.Input(type='hidden'))
- # the following hidden elements are required parameter in Class(PlotCorrelationPage). So we need to define them here.
- form.append(HT.Input(type="hidden", name="action", value="disp"))
- form.append(HT.Input(type="hidden", name="FormID", value="dispMultiTissueCorrelation"))
- form.append(HT.Input(type="hidden", name="X_geneSymbol", value=""))
- form.append(HT.Input(type="hidden", name="Y_geneSymbol", value=""))
- form.append(HT.Input(type="hidden", name="ProbeSetID", value=""))
- # RISet is not using in Tissue correlation, but is a required parameter in Class(PlotCorrelationPage). So we set dummy value(BXD).
- form.append(HT.Input(type="hidden", name="RISet", value="BXD"))
- form.append(HT.Input(type="hidden", name="ShowLine", value="1"))
- form.append(HT.Input(type="hidden", name="TissueProbeSetFreezeId", value=tProbeSetFreezeId))
- form.append(HT.Input(type="hidden", name="rankOrder", value=0))
-
- # updated by NL, 2011-01-06, build multi list for later use to descrease access to db again
- symbolList,geneIdDict,dataIdDict,ChrDict,MbDict,descDict,pTargetDescDict = TissueCorrMatrixObject.getTissueProbeSetXRefInfo(GeneNameLst=geneSymbolLst)
- # In case, upper case and lower case issue of symbol, mappedByTargetList function will update input geneSymbolLst based on database search result
- geneSymbolLst =self.mappedByTargetList(primaryList=symbolList,targetList=geneSymbolLst)
-
- # Added by NL, 2011-01-06, get all shortNames, verboseNames, verboseNames2, verboseNames3, exportArray
- # for Short Label, Long Label, Export functions
- geneIdLst,shortNames, verboseNames, verboseNames2, verboseNames3, exportArray = self.getAllLabelsInfo(geneSymbolList =geneSymbolLst, geneIdDict=geneIdDict,ChrDict=ChrDict, MbDict=MbDict, descDict=descDict, pTargetDescDict=pTargetDescDict)
-
- heading = "Tissue Correlation Matrix"
-
- #get correlation value and p value based on Gene Symbols list, and return the values in corrArray and pvArray seperately
- corrArray,pvArray = TissueCorrMatrixObject.getTissueCorrPvArray(geneNameLst=geneSymbolLst,dataIdDict=dataIdDict)
-
- # in the matrix table, top right corner displays Spearman Rank Correlation's Values and P-Values for each pair of geneSymbols;
- # left bottom displays Pearson Correlation values and P-Vlues for each pair of geneSymbols.
- tissueCorrMatrixHeading = HT.Paragraph(heading,Class="title")
- tcmTable = HT.TableLite(Class="collap", border=0, cellspacing=1, cellpadding=5, width='100%')
- row1 = HT.TR(HT.TD(Class="fs14 fwb ffl b1 cw cbrb"),HT.TD('Spearman Rank Correlation (rho)' , Class="fs14 fwb ffl b1 cw cbrb", colspan= symbolCount+2,align="center"))
- col1 = HT.TR(HT.TD("P e a r s o n &nbsp;&nbsp;&nbsp; r", rowspan= symbolCount+1,Class="fs14 fwb ffl b1 cw cbrb", width=10,align="center"),HT.TD("Gene Symbol",Class="fs13 fwb cb b1", width=300))
- for i in range(symbolCount):
- GeneSymbol=geneSymbolLst[i].strip()
- geneId = geneIdLst[i]
-
- if geneId!=0:
- _url="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=gene&cmd=Retrieve&dopt=Graphics&list_uids=%s" % geneId
- curURL = HT.Href(text=GeneSymbol,url=_url,Class='fs13',target="_blank")
- else:
- curURL = GeneSymbol
- col1.append(HT.TD(curURL,Class="b1", align="center"))
-
- tcmTable.append(row1,col1)
- # to decide to whether to show note for "*" or not
- flag = 0
- for i in range(symbolCount):
- GeneSymbol=geneSymbolLst[i].strip()
- geneId = geneIdLst[i]
-
- newrow = HT.TR()
- newrow.append(HT.Input(name="Symbol", value=GeneSymbol, type='hidden'))
-
- if geneId!=0:
- _url="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=gene&cmd=Retrieve&dopt=Graphics&list_uids=%s" %geneId
- geneIdURL = HT.Href(text="%s "%GeneSymbol,url=_url,Class="b1",target="_blank")
- else:
- # flag =1 will show note for "*"
- flag = 1
- geneIdURL =HT.Italic("%s"%GeneSymbol,HT.Font('*', color='red'))
- newrow.append(HT.TD(geneIdURL,shortNames[i],verboseNames[i],verboseNames2[i],verboseNames3[i], Class="b1", align="left",NOWRAP="ON"))
-
- for j in range(symbolCount):
- GeneSymbol2=geneSymbolLst[j].strip()
- corr = corrArray[i][j]
- pValue = pvArray[i][j]
- Color=''
-
- if j==i:
- newrow.append(HT.TD(HT.Font(HT.Italic("n"),HT.BR(),str(TissueCount),Class="fs11 fwn b1",align="center", color="000000"), bgColor='#cccccc', align="center", Class="b1", NOWRAP="ON"))
- exportArray[i+1][j+1] = '%d/%d' % (TissueCount,TissueCount)
- else:
- if corr:
- corr = float(corr)
- tCorr = "%2.3f" % corr
- pValue = float(pValue)
- tPV = "%2.3f" % pValue
-
- # updated by NL, based on Rob's requirement: delete p value, 2010-02-14
- # set color for cells by correlationValue
- if corr > 0.7:
- fontcolor="red"
- elif corr > 0.5:
- fontcolor="#FF6600"
- elif corr < -0.7:
- fontcolor="blue"
- elif corr < -0.5:
- fontcolor="#009900"
- else:
- fontcolor ="#000000"
-
- # set label for cells
- # if rank is equal to 0, pearson correlation plot will be the first one;
- # if rank is equal to 1, spearman ran correlation plot will be the first one.
- if j>i:
- exportArray[i+1][j+1] =tCorr+"/"+tPV
- rank =1
- elif j<i:
- exportArray[i+1][j+1] =tCorr+"/"+tPV
- rank =0
-
- tCorrStr= tCorr
- tPVStr = tPV
- tCorrPlotURL = "javascript:showTissueCorrPlot('%s','%s','%s',%d)" %(formName,GeneSymbol, GeneSymbol2,rank)
- corrURL= HT.Href(text=HT.Font(tCorrStr,HT.BR(),color=fontcolor, Class="fs11 fwn"), url = tCorrPlotURL)
- else:
- corr = 'N/A'
- corrURL= HT.Font(corr)
- exportArray[i+1][j+1] ="---/---"
-
- newrow.append(HT.TD(corrURL,bgColor=Color,Class="b1",NOWRAP="ON",align="middle"))
-
- tcmTable.append(newrow)
-
-
-
- Intro = HT.Blockquote('Lower left cells list Pearson ',HT.EM('r'),' values; upper right cells list Spearman rho values. Each cell also contains the n samples of tissues and organs. Values higher than 0.7 are displayed in ',HT.Font('red', color='red'),'; those between 0.5 and 0.7 in ',HT.Font('orange', color='#FF6600'),'; Values lower than -0.7 are in ',HT.Font('blue', color='blue'),'; between -0.5 and -0.7 in ',HT.Font('green', color='#009900'),'.', HT.BR(),HT.BR(), HT.Strong('Make scatter plots by clicking on cell values '),'(', HT.EM('r'),' or rho). ', Class="fs13 fwn")
-
- shortButton = HT.Input(type='button' ,name='dispShort',value=' Short Labels ', onClick="displayTissueShortName();",Class="button")
- verboseButton = HT.Input(type='button' ,name='dispVerbose',value=' Long Labels ', onClick="displayTissueVerboseName();", Class="button")
- exportbutton = HT.Input(type='button', name='export', value='Export', onClick="exportTissueText(allCorrelations);",Class="button")
- lableNote = HT.Blockquote(HT.Italic(HT.Font('*', color='red',Class="fs9 fwn"), ' Symbol(s) can not be found in database.'))
-
- # flag =1 will show note for "*", which means there's unidentified symbol.
- if flag==1:
- form.append(HT.Blockquote(tcmTable,lableNote,HT.P(),shortButton,verboseButton,exportbutton))
- else:
- form.append(HT.Blockquote(tcmTable,HT.P(),shortButton,verboseButton,exportbutton))
-
- exportScript = """
- <SCRIPT language=JavaScript>
- var allCorrelations = %s;
- </SCRIPT>
- """
- exportScript = exportScript % str(exportArray)
- self.dict['js1'] = exportScript+'<SCRIPT SRC="/javascript/correlationMatrix.js"></SCRIPT><BR>'
-
- TD_LR = HT.TD(colspan=2,width="100%",bgcolor="#eeeeee")
- TD_LR.append(tissueCorrMatrixHeading,note,Intro,form,HT.P())
- self.dict['body'] = str(TD_LR)
- self.dict['title'] = 'Tissue Correlation Result'
- return
-
- # Added by NL, 2011-01-06, get all shortNames, verboseNames, verboseNames2, verboseNames3, exportArray
- # for Short Label, Long Label, Export functions
- def getAllLabelsInfo(self, geneSymbolList=None,geneIdDict=None,ChrDict=None,MbDict=None,descDict=None,pTargetDescDict=None):
-
- symbolCount= len(geneSymbolList)
- geneIdLst =[]
- exportArray = [([0] * (symbolCount+1))[:] for i in range(symbolCount+1)]
- exportArray[0][0] = 'Tissue Correlation'
- shortNames = []
- verboseNames = []
- verboseNames2 = []
- verboseNames3 = []
-
- # added by NL, 2010-12-21, build DIV and array for short label, long label and export functions
- for i, geneSymbolItem in enumerate(geneSymbolList):
- geneSymbol =geneSymbolItem.lower()
- _shortName =HT.Italic("%s" %geneSymbolItem)
- _verboseName =''
- _verboseName2 = ''
- _verboseName3 = ''
- if geneIdDict.has_key(geneSymbol):
- geneIdLst.append(geneIdDict[geneSymbol])
- else:
- geneIdLst.append(0)
- if ChrDict.has_key(geneSymbol) and MbDict.has_key(geneSymbol):
- _verboseName = ' on Chr %s @ %s Mb' % (ChrDict[geneSymbol],MbDict[geneSymbol])
- if descDict.has_key(geneSymbol):
- _verboseName2 = '%s' % (descDict[geneSymbol])
- if pTargetDescDict.has_key(geneSymbol):
- _verboseName3 = '%s' % (pTargetDescDict[geneSymbol])
-
- shortName = HT.Div(id="shortName_" + str(i), style="display:none")
- shortName.append('Symbol: ')
- shortName.append(_shortName)
- shortNames.append(shortName)
-
- verboseName = HT.Div(id="verboseName_" + str(i), style="display:none")
- verboseName.append(_shortName)
- verboseName.append(_verboseName)
- verboseNames.append(verboseName)
- verboseName2 = HT.Div(id="verboseName2_" + str(i), style="display:none")
- verboseName2.append(_verboseName2)
- verboseNames2.append(verboseName2)
- verboseName3 = HT.Div(id="verboseName3_" + str(i), style="display:none")
- verboseName3.append(_verboseName3)
- verboseNames3.append(verboseName3)
-
- # exportTissueText in webqtl.js is using '/' as delimilator; add '/', otherwise the last letter in geneSymbol will missing
- exportArray[i+1][0] =geneSymbolItem+ '/' + geneSymbolItem + '/' +geneSymbolItem + ':' + str(_verboseName) + ' : ' + str(_verboseName2) + ' : ' + str(_verboseName3)
- exportArray[0][i+1] =geneSymbolItem+ '/'
-
- return geneIdLst,shortNames, verboseNames, verboseNames2, verboseNames3, exportArray
-
-
-########################################################################
-# functions for display and download when input symbol has only one #
-########################################################################
-
- # build header and footer parts for export excel file
- def createExcelFileWithTitleAndFooter(self, workbook=None, datasetName=None,returnNumber=None):
-
- worksheet = workbook.add_worksheet()
- titleStyle = workbook.add_format(align = 'left', bold = 0, size=14, border = 1, border_color="gray")
-
- ##Write title Info
- worksheet.write([1, 0], "Citations: Please see %s/reference.html" % webqtlConfig.PORTADDR, titleStyle)
- worksheet.write([2, 0], "Dataset : %s" % datasetName, titleStyle)
- worksheet.write([3, 0], "Date : %s" % time.strftime("%B %d, %Y", time.gmtime()), titleStyle)
- worksheet.write([4, 0], "Time : %s GMT" % time.strftime("%H:%M ", time.gmtime()), titleStyle)
- worksheet.write([5, 0], "Status of data ownership: Possibly unpublished data; please see %s/statusandContact.html for details on sources, ownership, and usage of these data." % webqtlConfig.PORTADDR, titleStyle)
- #Write footer info
- worksheet.write([8 + returnNumber, 0], "Funding for The GeneNetwork: NIAAA (U01AA13499, U24AA13513), NIDA, NIMH, and NIAAA (P20-DA21131), NCI MMHCC (U01CA105417), and NCRR (U01NR 105417)", titleStyle)
- worksheet.write([9 + returnNumber, 0], "PLEASE RETAIN DATA SOURCE INFORMATION WHENEVER POSSIBLE", titleStyle)
-
- return worksheet
-
- # build header of table when input symbol has only one
- def getTableHeader(self, method='0', worksheet=None, newrow=None, headingStyle=None):
-
- tblobj_header = []
- exportList=[]
- header=[]
- header = [THCell(HT.TD(' ', Class="fs13 fwb ffl b1 cw cbrb",nowrap='ON'), sort=0),
- THCell(HT.TD('Symbol',HT.BR(),HT.BR(), Class="fs13 fwb ffl b1 cw cbrb"), text="symbol", idx=1),
- THCell(HT.TD('Description',HT.BR(),HT.BR(), Class="fs13 fwb ffl b1 cw cbrb"), text="desc", idx=2),
- THCell(HT.TD('Location',HT.BR(),'Chr and Mb ', Class="fs13 fwb ffl b1 cw cbrb"), text="location", idx=3),
- THCell(HT.TD('N Cases',HT.BR(),HT.BR(), Class="fs13 fwb ffl b1 cw cbrb",nowrap='ON'), text="nstr", idx=4)]
- if method =="0":# Pearson Correlation
- header.append( THCell(HT.TD(HT.Href(
- text = HT.Span(' r ', HT.Sup(' ?', style="color:#f00"),HT.BR(),HT.BR(), Class="fs13 fwb ffl cw"),
- target = '_blank',
- url = "/correlationAnnotation.html#tissue_r"),
- Class="fs13 fwb ffl b1 cw cbrb", nowrap='ON'), text="tissuecorr", idx=5))
- header.append( THCell(HT.TD(HT.Href(
- text = HT.Span(' p(r) ', HT.Sup(' ?', style="color:#f00"),HT.BR(),HT.BR(), Class="fs13 fwb ffl cw"),
- target = '_blank',
- url = "/correlationAnnotation.html#tissue_p_r"),
- Class="fs13 fwb ffl b1 cw cbrb", nowrap='ON'), text="tissuepvalue", idx=6))
-
- exportList =[ 'Gene ID', 'Symbol', 'Description', 'Location', 'N Cases', ' r ', ' p(r) ']
-
- else:# Spearman Correlation
- header.append( THCell(HT.TD(HT.Href(
- text = HT.Span(' rho ', HT.Sup(' ?', style="color:#f00"),HT.BR(),HT.BR(), Class="fs13 fwb ffl cw"),
- target = '_blank',
- url = "/correlationAnnotation.html#tissue_rho"),
- Class="fs13 fwb ffl b1 cw cbrb", nowrap='ON'), text="tissuecorr", idx=5))
- header.append( THCell(HT.TD(HT.Href(
- text = HT.Span('p(rho)', HT.Sup(' ?', style="color:#f00"),HT.BR(), HT.BR(),Class="fs13 fwb ffl cw"),
- target = '_blank',
- url = "/correlationAnnotation.html#tissue_p_rho"),
- Class="fs13 fwb ffl b1 cw cbrb", nowrap='ON'), text="tissuepvalue", idx=6))
- exportList = ['Gene ID', 'Symbol', 'Description', 'Location', 'N Cases','rho', ' p(rho) ']
-
- # build header of excel for download function
- for ncol, item in enumerate(exportList):
- worksheet.write([newrow, ncol], item, headingStyle)
- worksheet.set_column([ncol, ncol], 2*len(item))
-
- tblobj_header.append(header)
-
- return tblobj_header, worksheet
-
- # build body of table when input symbol has only one
- def getTableBody(self, symbolCorrDict={}, symbolPvalueDict={},symbolList=[],geneIdDict={},ChrDict={},MbDict={},descDict={},pTargetDescDict={},primarySymbol=None, TissueCount=None,formName=None, worksheet=None, newrow=None,method="0"):
-
- tblobj_body = []
-
- for symbolItem in symbolList:
- symbol =symbolItem.lower()
- if symbol:
- pass
- else:
- symbol ="N/A"
-
- if geneIdDict.has_key(symbol) and geneIdDict[symbol]:
- geneId = geneIdDict[symbol]
- ncbiUrl = HT.Href(text="NCBI",target='_blank',url=webqtlConfig.NCBI_LOCUSID % geneIdDict[symbol], Class="fs10 fwn")
- else:
- geneId ="N/A"
- symbolItem =symbolItem.replace('"','') # some symbol is saved in ["symbol"]format
- ncbiUrl = HT.Href(text="NCBI",target='_blank',url="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?CMD=search&DB=gene&term=%s" % symbol, Class="fs10 fwn")
-
- _Species="mouse"
- similarTraitUrl = "%s?cmd=sch&gene=%s&alias=1&species=%s" % (os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE), symbolItem, _Species)
- gnUrl = HT.Href(text="GN",target='_blank',url=similarTraitUrl, Class="fs10 fwn")
-
- tr = []
- # updated by NL, 04/25/2011: add checkbox and highlight function
- # first column of table
- # updated by NL. 12-7-2011
- tr.append(TDCell(HT.TD(HT.Input(type="checkbox", Class="checkbox", name="tissueResult",value=symbol, onClick="highlight(this)"), align='right',Class="fs12 fwn b1 c222 fsI",nowrap='ON'),symbol,symbol))
- # updated by NL, 04/26/2011: add GN and NCBI links
- #gene symbol (symbol column)
- tr.append(TDCell(HT.TD(HT.Italic(symbolItem), HT.BR(),gnUrl,"&nbsp;&nbsp|&nbsp;&nbsp", ncbiUrl, Class="fs12 fwn b1 c222"),symbolItem, symbolItem))
-
- #description and probe target description(description column)
- description_string=''
- if descDict.has_key(symbol):
- description_string = str(descDict[symbol]).strip()
- if pTargetDescDict.has_key(symbol):
- target_string = str(pTargetDescDict[symbol]).strip()
-
- description_display = ''
- if len(description_string) > 1 and description_string != 'None':
- description_display = description_string
- else:
- description_display = symbolItem
-
- if len(description_display) > 1 and description_display != 'N/A' and len(target_string) > 1 and target_string != 'None':
- description_display = description_display + '; ' + target_string.strip()
-
- tr.append(TDCell(HT.TD(description_display, Class="fs12 fwn b1 c222"), description_display, description_display))
-
- #trait_location_value is used for sorting (location column)
- trait_location_repr = 'N/A'
- trait_location_value = 1000000
-
- if ChrDict.has_key(symbol) and MbDict.has_key(symbol):
-
- if ChrDict[symbol] and MbDict[symbol]:
- mb = float(MbDict[symbol])
- try:
- trait_location_value = int(ChrDict[symbol])*1000 + mb
- except:
- if ChrDict[symbol].upper() == 'X':
- trait_location_value = 20*1000 + mb
- else:
- trait_location_value = ord(str(ChrDict[symbol]).upper()[0])*1000 + mb
-
- trait_location_repr = 'Chr%s: %.6f' % (ChrDict[symbol], mb )
- else:
- trait_location_repr="N/A"
- trait_location_value ="N/A"
-
- tr.append(TDCell(HT.TD(trait_location_repr, Class="fs12 fwn b1 c222", nowrap="on"), trait_location_repr, trait_location_value))
-
- # number of overlaped cases (N Case column)
- tr.append(TDCell(HT.TD(TissueCount, Class="fs12 fwn ffl b1 c222", align='right'),TissueCount,TissueCount))
-
- #tissue correlation (Tissue r column)
- TCorr = 0.0
- TCorrStr = "N/A"
- if symbolCorrDict.has_key(symbol):
- TCorr = symbolCorrDict[symbol]
- TCorrStr = "%2.3f" % TCorr
- symbol2 =symbolItem.replace('"','') # some symbol is saved in "symbol" format
- # add a new parameter rankOrder for js function 'showTissueCorrPlot'
- rankOrder = int(method)
- TCorrPlotURL = "javascript:showTissueCorrPlot('%s','%s','%s',%d)" %(formName, primarySymbol, symbol2,rankOrder)
- tr.append(TDCell(HT.TD(HT.Href(text=TCorrStr, url=TCorrPlotURL, Class="fs12 fwn ff1"), Class="fs12 fwn ff1 b1 c222", align='right'), TCorrStr, abs(TCorr)))
- else:
- tr.append(TDCell(HT.TD(TCorrStr, Class="fs12 fwn b1 c222", align='right'), TCorrStr, abs(TCorr)))
-
- #p value of tissue correlation (Tissue p(r) column)
- TPValue = 1.0
- TPValueStr = "N/A"
- if symbolPvalueDict.has_key(symbol):
- TPValue = symbolPvalueDict[symbol]
- #TPValueStr = "%2.3f" % TPValue
- TPValueStr=webqtlUtil.SciFloat(TPValue)
- tr.append(TDCell(HT.TD(TPValueStr, Class="fs12 fwn b1 c222", align='right'), TPValueStr, TPValue))
-
- tblobj_body.append(tr)
- # build body(records) of excel for download function
- for ncol, item in enumerate([geneId, symbolItem, description_display, trait_location_repr,TissueCount, TCorr, TPValue]):
- worksheet.write([newrow, ncol], item)
-
- newrow += 1
-
- return tblobj_body, worksheet
-
-
- # get return number of records when input symbol has only one
- def getReturnNum(self,recordReturnNum="0"):
- if recordReturnNum=="0":
- returnNum=100
- elif recordReturnNum=="1":
- returnNum=200
- elif recordReturnNum=="2":
- returnNum=500
- elif recordReturnNum=="3":
- returnNum=1000
- elif recordReturnNum=="4":
- returnNum=2000
- elif recordReturnNum=="5":
- returnNum= None
-
- return returnNum
-
- # map list based on the order of target List
- # if item.lower() exist in both lists, then compare the difference of item's original value of two lists
- # if not equal, then replace the item in targetList by using the item in primaryList(list from database)
-
- def mappedByTargetList(self,primaryList=[],targetList=[]):
-
- tempPrimaryList =[x.lower() for x in primaryList]
- testTargetList =[y.lower() for y in targetList]
-
- for i, item in enumerate(tempPrimaryList):
- if item in testTargetList:
- index = testTargetList.index(item)
- if primaryList[i]!=targetList[index]:
- targetList[index]= primaryList[i]
-
- return targetList
diff --git a/web/webqtl/correlationMatrix/__init__.py b/web/webqtl/correlationMatrix/__init__.py
deleted file mode 100755
index e69de29b..00000000
--- a/web/webqtl/correlationMatrix/__init__.py
+++ /dev/null
diff --git a/web/webqtl/correlationMatrix/tissueCorrelationMatrix.py b/web/webqtl/correlationMatrix/tissueCorrelationMatrix.py
deleted file mode 100755
index 23dc14eb..00000000
--- a/web/webqtl/correlationMatrix/tissueCorrelationMatrix.py
+++ /dev/null
@@ -1,132 +0,0 @@
-# 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/11/10
-#
-# Last updated by Ning Liu, 2011/01/26
-
-
-#tissueCorrelationMatrix: funciton part for TissueCorrelationPage.py
-from htmlgen import HTMLgen2 as HT
-from correlation import correlationFunction
-from dbFunction import webqtlDatabaseFunction
-import sys
-
-#########################################
-# Tissue Correlation Page
-#########################################
-
-class tissueCorrelationMatrix:
- def __init__(self,tissueProbeSetFreezeId=None):
-
- #initialize parameters
- self.tProbeSetFreezeId = tissueProbeSetFreezeId
- self.cursor = webqtlDatabaseFunction.getCursor()
-
-
-
- #retreive dataSet info from database table TissueProbeSetFreeze to get all TissueProbeSetFreezeId(List), Name(List) and FullName(List)
- def getTissueDataSet(self):
- tissProbeSetFreezeIds,Names,fullNames = webqtlDatabaseFunction.getTissueDataSet(cursor=self.cursor)
- return tissProbeSetFreezeIds,Names,fullNames
-
-
- #retrieve DatasetName, DatasetFullName based on TissueProbeSetFreezeId, return DatasetName(string), DatasetFullName(string)
- def getFullnameofCurrentDataset(self):
-
- DatasetName, DatasetFullName =webqtlDatabaseFunction.getDatasetNamesByTissueProbeSetFreezeId(cursor=self.cursor, TissueProbeSetFreezeId=self.tProbeSetFreezeId)
- return DatasetName, DatasetFullName
-
-
- #retrieve how many tissue used in the specific dataset based on TissueProbeSetFreezeId, return TissueCount(int)
- def getTissueCountofCurrentDataset(self):
-
- TissueCount =webqtlDatabaseFunction.getTissueCountByTissueProbeSetFreezeId(cursor=self.cursor,TissueProbeSetFreezeId=self.tProbeSetFreezeId)
- return TissueCount
-
-
-
- #retrieve corrArray(array), pvArray(array) for display by calling calculation function:calZeroOrderCorrForTiss
- def getTissueCorrPvArray(self,geneNameLst=None,dataIdDict=None):
- #retrieve SymbolValuePairDict(Dict), dictionary of Symbol and Value Pair.key is symbol, value is one list of expression values of one probeSet
- symbolValuepairDict =correlationFunction.getGeneSymbolTissueValueDict(cursor=self.cursor,symbolList=geneNameLst,dataIdDict=dataIdDict)
- corrArray,pvArray = correlationFunction.getCorrPvArray(cursor=self.cursor,priGeneSymbolList=geneNameLst,symbolValuepairDict=symbolValuepairDict)
- return corrArray,pvArray
-
-
-
- #retrieve symbolList,geneIdList,dataIdList,ChrList,MbList,descList,pTargetDescList (all are list type) to
- #get multi lists for short and long label functions, and for getSymbolValuePairDict and
- #getGeneSymbolTissueValueDict to build dict to get CorrPvArray
- def getTissueProbeSetXRefInfo(self,GeneNameLst=[]):
- symbolList,geneIdDict,dataIdDict,ChrDict,MbDict,descDict,pTargetDescDict =correlationFunction.getTissueProbeSetXRefInfo(cursor=self.cursor,GeneNameLst=GeneNameLst,TissueProbeSetFreezeId=self.tProbeSetFreezeId)
- return symbolList,geneIdDict,dataIdDict,ChrDict,MbDict,descDict,pTargetDescDict
-
-
-
- #retrieve corrArray(array), pvArray(array) for gene symbol pair
- def getCorrPvArrayForGeneSymbolPair(self,geneNameLst=None):
- corrArray = None
- pvArray = None
-
- if len(geneNameLst) == 2:
- #retrieve SymbolValuePairDict(Dict), dictionary of Symbol and Value Pair.key is symbol, value is one list of expression values of one probeSet
- symbolList,geneIdDict,dataIdDict,ChrDict,MbDict,descDict,pTargetDescDict =correlationFunction.getTissueProbeSetXRefInfo(cursor=self.cursor,GeneNameLst=geneNameLst,TissueProbeSetFreezeId=self.tProbeSetFreezeId)
- symbolValuepairDict =correlationFunction.getGeneSymbolTissueValueDict(cursor=self.cursor,symbolList=geneNameLst,dataIdDict=dataIdDict)
- corrArray,pvArray = correlationFunction.getCorrPvArray(cursor=self.cursor,priGeneSymbolList=geneNameLst,symbolValuepairDict=symbolValuepairDict)
-
- return corrArray,pvArray
-
-
- #retrieve symbolCorrDict(dict), symbolPvalueDict(dict) to get all tissues' correlation value and P value; key is symbol
- def calculateCorrOfAllTissueTrait(self, primaryTraitSymbol=None, method='0'):
- symbolCorrDict, symbolPvalueDict = correlationFunction.calculateCorrOfAllTissueTrait(cursor=self.cursor, primaryTraitSymbol=primaryTraitSymbol, TissueProbeSetFreezeId=self.tProbeSetFreezeId,method=method)
-
- return symbolCorrDict, symbolPvalueDict
-
- #Translate GeneId to gene symbol and keep the original order.
- def getGeneSymbolLst(self, geneSymbols=None):
- geneSymbolLst=[]
- geneIdLst=[]
- #split the input string at every occurrence of the delimiter '\r', and return the substrings in an array.
- tokens=geneSymbols.strip().split('\r')
-
- #Ning: To keep the original order of input symbols and GeneIds
- for i in tokens:
- i=i.strip()
- if (len(i) >0) and (i not in geneSymbolLst):
- geneSymbolLst.append(i)
- # if input includes geneId(s), then put it/them into geneIdLst
- if i.isdigit():
- geneIdLst.append(i)
-
- #Ning: Replace GeneId with symbol if applicable
- if len(geneIdLst)>0:
- # if input includes geneId(s), replace geneId by geneSymbol;
- geneIdSymbolPair =webqtlDatabaseFunction.getGeneIdSymbolPairByGeneId(cursor=self.cursor, geneIdLst =geneIdLst)
- for geneId in geneIdLst:
- if geneIdSymbolPair[geneId]:
- index = geneSymbolLst.index(geneId)
- geneSymbolLst[index] =geneIdSymbolPair[geneId]
-
- return geneSymbolLst
-
-
-