aboutsummaryrefslogtreecommitdiff
path: root/web/webqtl/networkGraph/networkGraphPage.py
diff options
context:
space:
mode:
Diffstat (limited to 'web/webqtl/networkGraph/networkGraphPage.py')
-rwxr-xr-xweb/webqtl/networkGraph/networkGraphPage.py335
1 files changed, 0 insertions, 335 deletions
diff --git a/web/webqtl/networkGraph/networkGraphPage.py b/web/webqtl/networkGraph/networkGraphPage.py
deleted file mode 100755
index fb4021f0..00000000
--- a/web/webqtl/networkGraph/networkGraphPage.py
+++ /dev/null
@@ -1,335 +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 2010/02/11
-
-#!/usr/bin/python
-# networkGraph.py
-# Author: Stephen Pitts
-# 6/2/2004
-#
-# a script to take a matrix of data from a WebQTL job and generate a
-# graph using the neato package from GraphViz
-#
-# See graphviz for documentation of the parameters
-#
-
-
-#from mod_python import apache, util, Cookie
-#import cgi
-import tempfile
-import os
-import time
-import sys
-import cgitb
-import string
-
-from htmlgen import HTMLgen2 as HT
-
-from base.templatePage import templatePage
-import networkGraphUtils
-from base import webqtlConfig
-from utility import webqtlUtil
-from base.webqtlTrait import webqtlTrait
-import compareCorrelates.trait as smpTrait
-from GraphPage import GraphPage
-from networkGraphPageBody import networkGraphPageBody
-from correlationMatrix.tissueCorrelationMatrix import tissueCorrelationMatrix
-
-cgitb.enable()
-
-
-class networkGraphPage(templatePage):
-
- def __init__(self,fd,InputData=None):
-
- templatePage.__init__(self, fd)
-
- if not self.openMysql():
- return
-
- if not fd.genotype:
- fd.readGenotype()
-
- self.searchResult = fd.formdata.getvalue('searchResult')
-
- self.tissueProbeSetFeezeId = "1" #XZ, Jan 03, 2010: currently, this dataset is "UTHSC Illumina V6.2 RankInv B6 D2 average CNS GI average (May 08)"
- TissueCorrMatrixObject = tissueCorrelationMatrix(tissueProbeSetFreezeId=self.tissueProbeSetFeezeId)
-
- if type("1") == type(self.searchResult):
- self.searchResult = string.split(self.searchResult, '\t')
-
- if (not self.searchResult or (len(self.searchResult) < 2)):
- heading = 'Network Graph'
- detail = ['You need to select at least two traits in order to generate Network Graph.']
- self.error(heading=heading,detail=detail)
- print 'Content-type: text/html\n'
- self.write()
- return
-
- if self.searchResult:
- if len(self.searchResult) > webqtlConfig.MAXCORR:
- heading = 'Network Graph'
- detail = ['In order to display Network Graph properly, Do not select more than %d traits for Network Graph.' % webqtlConfig.MAXCORR]
- self.error(heading=heading,detail=detail)
- print 'Content-type: text/html\n'
- self.write()
- return
- else:
- pass
-
- 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 = 'Network Graph'
- detail = [HT.Font('Error : ',color='red'),HT.Font('Error occurs while retrieving data from database.',color='black')]
- self.error(heading=heading,detail=detail)
- print 'Content-type: text/html\n'
- self.write()
- return
-
- NNN = len(traitList)
-
- if NNN < 2:
- templatePage.__init__(self, fd)
- heading = 'Network Graph'
- detail = ['You need to select at least two traits in order to generate a Network Graph']
- print 'Content-type: text/html\n'
- self.write()
- return
- else:
- pearsonArray = [([0] * (NNN))[:] for i in range(NNN)]
- spearmanArray = [([0] * (NNN))[:] for i in range(NNN)]
- GeneIdArray = []
- GeneSymbolList = [] #XZ, Jan 03, 2011: holds gene symbols for calculating tissue correlation
- traitInfoArray = []
-
- i = 0
- nnCorr = len(fd.strainlist)
- for i, thisTrait in enumerate(traitList):
- 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)
- pearsonArray[i][j] = corr
- pearsonArray[j][i] = corr
- elif j == i:
- pearsonArray[i][j] = 1.0
- spearmanArray[i][j] = 1.0
- else:
- corr,nOverlap = webqtlUtil.calCorrelationRank(traitDataList[i],traitDataList[j],nnCorr)
- spearmanArray[i][j] = corr
- spearmanArray[j][i] = corr
-
- GeneId1 = None
- tmpSymbol = None
- if thisTrait.db.type == 'ProbeSet':
- try:
- GeneId1 = int(thisTrait.geneid)
- except:
- GeneId1 = 0
- if thisTrait.symbol:
- tmpSymbol = thisTrait.symbol.lower()
- GeneIdArray.append(GeneId1)
- GeneSymbolList.append(tmpSymbol)
-
- _traits = []
- _matrix = []
-
- for i in range(NNN):
- turl = webqtlConfig.CGIDIR + webqtlConfig.SCRIPTFILE + '?FormID=showDatabase&database=%s&ProbeSetID=%s' % (traitList[i].db.name, traitList[i].name)
- if traitList[i].cellid:
- turl += "&CellID=%s" % traitList[i].cellid
-
- if traitList[i].db.type == 'ProbeSet':
- if traitList[i].symbol:
- _symbol = traitList[i].symbol
- else:
- _symbol = 'unknown'
- elif traitList[i].db.type == 'Publish':
- _symbol = traitList[i].name
- if traitList[i].confidential:
- if webqtlUtil.hasAccessToConfidentialPhenotypeTrait(privilege=self.privilege, userName=self.userName, authorized_users=traitList[i].authorized_users):
- if traitList[i].post_publication_abbreviation:
- _symbol = traitList[i].post_publication_abbreviation
- else:
- if traitList[i].pre_publication_abbreviation:
- _symbol = traitList[i].pre_publication_abbreviation
- else:
- if traitList[i].post_publication_abbreviation:
- _symbol = traitList[i].post_publication_abbreviation
-
- #XZ, 05/26/2009: Xiaodong add code for Geno data
- elif traitList[i].db.type == 'Geno':
- _symbol = traitList[i].name
- else:
- _symbol = traitList[i].description
- #####if this trait entered by user
- if _symbol.__contains__('entered'):
- _symbol = _symbol[:_symbol.index('entered')]
- #####if this trait generaged by genenetwork
- elif _symbol.__contains__('generated'):
- _symbol = _symbol[_symbol.rindex(':')+1:]
-
- newTrait = smpTrait.Trait(name=str(traitList[i]), href=turl, symbol=_symbol)
- newTrait.color = "black"
- _traits.append(newTrait)
-
- for j in range(i+1, NNN):
- dataPoint = smpTrait.RawPoint(i, j)
- dataPoint.spearman = spearmanArray[i][j]
- dataPoint.pearson = pearsonArray[i][j]
-
- #XZ: get literature correlation info.
- if GeneIdArray[i] and GeneIdArray[j]:
- if GeneIdArray[i] == GeneIdArray[j]:
- dataPoint.literature = 1
- else:
- self.cursor.execute("SELECT Value from LCorrRamin3 WHERE (GeneId1 = %d and GeneId2 = %d) or (GeneId1 = %d and GeneId2 = %d)" % (GeneIdArray[i], GeneIdArray[j], GeneIdArray[j], GeneIdArray[i]))
- try:
- dataPoint.literature = self.cursor.fetchone()[0]
- except:
- dataPoint.literature = 0
- else:
- dataPoint.literature = 0
-
- #XZ: get tissue correlation info
- if GeneSymbolList[i] and GeneSymbolList[j]:
- dataPoint.tissue = 0
- geneSymbolPair = []
- geneSymbolPair.append(GeneSymbolList[i])
- geneSymbolPair.append(GeneSymbolList[j])
- corrArray,pvArray = TissueCorrMatrixObject.getCorrPvArrayForGeneSymbolPair(geneNameLst=geneSymbolPair)
- if corrArray[1][0]:
- dataPoint.tissue = corrArray[1][0]
- else:
- dataPoint.tissue = 0
-
- _matrix.append(dataPoint)
-
- OrigDir = os.getcwd()
-
- sessionfile = fd.formdata.getvalue('session')
-
- inputFilename = fd.formdata.getvalue('inputFile')
-
- #If there is no sessionfile generate one and dump all matrix/trait values
- if not sessionfile:
- filename = webqtlUtil.generate_session()
- webqtlUtil.dump_session([_matrix, _traits], os.path.join(webqtlConfig.TMPDIR, filename + '.session'))
- sessionfile = filename
-
- startTime = time.time()
-
- #Build parameter dictionary used by networkGraphPage class using buildParamDict function
- params = networkGraphUtils.buildParamDict(fd, sessionfile)
-
- nodes = len(_traits)
- rawEdges = len(_matrix)
-
- if params["tune"] == "yes":
- params = networkGraphUtils.tuneParamDict(params, nodes, rawEdges)
-
- matrix = networkGraphUtils.filterDataMatrix(_matrix, params)
-
- optimalNode = networkGraphUtils.optimalRadialNode(matrix)
-
- if not inputFilename:
- inputFilename = tempfile.mktemp()
-
- inputFilename = webqtlConfig.IMGDIR + inputFilename.split("/")[2]
-
- #writes out 4 graph files for exporting
- graphFile = "/image/" + networkGraphUtils.writeGraphFile(matrix, _traits, inputFilename, params)
-
- networkGraphUtils.processDataMatrix(matrix, params)
-
- edges = 0
-
- for edge in matrix:
- if edge.value != 0:
- edges +=1
-
- for trait in _traits:
- trait.name = networkGraphUtils.fixLabel(trait.name)
-
- RootDir = webqtlConfig.IMGDIR
- RootDirURL = "/image/"
-
-
-
- #This code writes the datafile that the graphviz function runNeato uses to generate the
- #"digraph" file that defines the graphs parameters
- datafile = networkGraphUtils.writeNeatoFile(matrix=matrix, traits=_traits, filename=inputFilename, GeneIdArray=GeneIdArray, p=params)
-
- #Generate graph in various file types
- layoutfile = networkGraphUtils.runNeato(datafile, "dot", "dot", params["gType"]) # XZ, 09/11/2008: add module name
- # ZS 03/04/2010 This second output file (layoutfile_pdf) is rotated by 90 degrees to prevent an issue with pdf output being cut off at the edges
- layoutfile_pdf = networkGraphUtils.runNeato(datafile + "_pdf", "dot", "dot", params["gType"]) # ZS 03/04/2010
- pngfile = networkGraphUtils.runNeato(layoutfile, "png", "png", params["gType"])
- mapfile = networkGraphUtils.runNeato(layoutfile, "cmapx", "cmapx", params["gType"])# XZ, 09/11/2008: add module name
- giffile = networkGraphUtils.runNeato(layoutfile, "gif", "gif", params["gType"])# XZ, 09/11/2008:add module name
- psfile = networkGraphUtils.runNeato(layoutfile_pdf, "ps", "ps", params["gType"])# XZ, 09/11/2008: add module name
- pdffile = networkGraphUtils.runPsToPdf(psfile, params["width"], params["height"])# XZ, 09/11/2008: add module name
-
- #This generates text files in XGGML (standardized graphing language) and plain text
- #so the user can create his/her own graphs in a program like Cytoscape
-
- htmlfile1 = datafile + ".html"
- htmlfile2 = datafile + ".graph.html"
-
- os.chdir(OrigDir)
-
- #This generates the graph in various image formats
- giffile = RootDirURL + giffile
- pngfile = RootDirURL + pngfile
- pdffile = RootDirURL + pdffile
- endTime = time.time()
- totalTime = endTime - startTime
-
- os.chdir(RootDir)
-
- page2 = GraphPage(giffile, mapfile)
- page2.writeToFile(htmlfile2)
-
- #This generates the HTML for the body of the Network Graph page
- page1 = networkGraphPageBody(fd, matrix, _traits, htmlfile2, giffile, pdffile, nodes, edges, rawEdges, totalTime, params, page2.content, graphFile, optimalNode)
-
- #Adds the javascript colorSel to the body to allow line color selection
- self.dict["js1"] = '<SCRIPT SRC="/javascript/colorSel.js"></SCRIPT><BR>'
- #self.dict["js1"] += '<SCRIPT SRC="/javascript/networkGraph.js"></SCRIPT>'
-
- #Set body of current templatePage to body of the templatePage networkGraphPage
- self.dict['body'] = page1.dict['body']
-
-