aboutsummaryrefslogtreecommitdiff
path: root/web/webqtl/genomeGraph/genAllDbResultPage.py
diff options
context:
space:
mode:
Diffstat (limited to 'web/webqtl/genomeGraph/genAllDbResultPage.py')
-rwxr-xr-xweb/webqtl/genomeGraph/genAllDbResultPage.py309
1 files changed, 0 insertions, 309 deletions
diff --git a/web/webqtl/genomeGraph/genAllDbResultPage.py b/web/webqtl/genomeGraph/genAllDbResultPage.py
deleted file mode 100755
index f0663a7c..00000000
--- a/web/webqtl/genomeGraph/genAllDbResultPage.py
+++ /dev/null
@@ -1,309 +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 GeneNetwork Core Team 2010/10/20
-
-import string
-import os
-import time
-
-from htmlgen import HTMLgen2 as HT
-
-from base import webqtlConfig
-from utility import webqtlUtil
-from base.webqtlDataset import webqtlDataset
-from base.templatePage import templatePage
-
-
-#########################################
-# Genome Scan PAGE
-#########################################
-class genAllDbResultPage(templatePage):
-
- def __init__(self,fd):
-
- templatePage.__init__(self,fd)
-
- if not self.openMysql():
- return
-
- self.database = fd.formdata.getvalue('database', '')
- db = webqtlDataset(self.database, self.cursor)
-
- try:
- if db.type != "ProbeSet" or not db.id:
- raise DbNameError
- except:
- print 'Content-type: text/html\n'
- heading = "Download Results"
- detail = ["Only results of microarray database are available to download."]
- self.error(heading=heading,detail=detail)
- self.write()
- return
-
-
- #XZ, protect confidential dataset.
- userExist = None
- self.cursor.execute('SELECT Id, Name, FullName, confidentiality, AuthorisedUsers FROM ProbeSetFreeze WHERE Name = "%s"' % self.database)
- indId, indName, indFullName, indConfid, AuthorisedUsers = self.cursor.fetchall()[0]
- if indConfid == 1 and userExist == None:
- try:
-
- userExist = self.userName
-
- #for the dataset that confidentiality is 1
- #1. 'admin' and 'root' can see all of the dataset
- #2. 'user' can see the dataset that AuthorisedUsers contains his id(stored in the Id field of User table)
- if webqtlConfig.USERDICT[self.privilege] < webqtlConfig.USERDICT['admin']:
- if not AuthorisedUsers:
- userExist=None
- else:
- AuthorisedUsersList=AuthorisedUsers.split(',')
- if not AuthorisedUsersList.__contains__(self.userName):
- userExist=None
- except:
- pass
-
- if not userExist:
- #Error, Confidential Database
- heading = "Correlation Table"
- detail = ["The %s database you selected is not open to the public at this time, please go back and select other database." % indFullName]
- self.error(heading=heading,detail=detail,error="Confidential Database")
- return
-
- self.cursor.execute("""
- Select
- InbredSet.Name
- From
- ProbeSetFreeze, ProbeFreeze, InbredSet
- whERE
- ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id AND
- ProbeFreeze.InbredSetId = InbredSet.Id AND
- ProbeSetFreeze.Id = %d
- """ % db.id)
- thisRISet = self.cursor.fetchone()[0]
- if thisRISet =='BXD300':
- thisRISet = 'BXD'
-
- #XZ, 06/26/2009: It seems that this query is not neccessary. It doesn't return any result.
- #XZ: It seems it is just for test purpose. The next try-except block does the real work.
- #XZ: I think it should be deleted to shorten the response time.
- #self.cursor.execute("""
- # Select
- # ProbeSet.Name, ProbeSet.symbol, ProbeSet.description, ProbeSet.Chr, ProbeSet.Mb, ProbeSetXRef.Locus,
- # ProbeSetXRef.LRS, ProbeSetXRef.pValue, ProbeSetXRef.additive, ProbeSetXRef.mean
- # From
- # ProbeSet, ProbeSetXRef
- # whERE
- # ProbeSetXRef.ProbeSetFreezeId = %d AND
- # ProbeSetXRef.ProbeSetId = ProbeSet.Id AND
- # ProbeSetXRef.Locus is not NULL
- # Order by
- # ProbeSet.name_num
- # """ % db.id)
-
- filename = os.path.join(webqtlConfig.SECUREDIR, db.name+'.result.xls')
-
- try:
- import random234
- if random.choice(range(10)) == 0:
- raise "ReCalculate"
- fp = open(filename, 'rb')
- text = fp.read()
- fp.close()
- except:
- self.cursor.execute("Select ProbeSetXRef.ProbeSetId from ProbeSetXRef where ProbeSetFreezeId=%d" % db.id)
- ProbeSetIds = self.cursor.fetchall()
- self.mouseChrLengthDict, sum = self.readMouseGenome(thisRISet)
-
- if ProbeSetIds:
- import reaper
- markerGMb = {}
- genotype_1 = reaper.Dataset()
- genotype_1.read(os.path.join(webqtlConfig.GENODIR, thisRISet + '.geno'))
- for chr in genotype_1:
- chrlen = self.mouseChrLengthDict[chr.name]
- for locus in chr:
- markerGMb[locus.name] = [chr.name, locus.Mb, locus.Mb + chrlen]
-
- text = []
- text.append(['ProbeSetId', 'Symbol', 'Description', 'Target Description', 'Chr', 'TMb', 'TGMb', 'Locus', 'LRS', 'Additive', 'pvalue', 'markerChr', 'markerMb', 'markerGMb', 'meanExpression'])
- ProbeSetIdList = []
- for ProbeSetId in ProbeSetIds:
- ProbeSetIdList.append(ProbeSetId[0])
- if len(ProbeSetIdList)==1000:
- ProbeSetIdStr = ','.join(map(str, ProbeSetIdList))
- ProbeSetIdList = []
-
- cmd = """
- Select
- ProbeSet.Name, ProbeSet.symbol, ProbeSet.description,ProbeSet.Probe_Target_Description,ProbeSet.Chr, ProbeSet.Mb,
- ProbeSetXRef.Locus, ProbeSetXRef.LRS, ProbeSetXRef.pValue,
- ProbeSetXRef.additive, ProbeSetXRef.mean
- From
- ProbeSet, ProbeSetXRef
- Where
- ProbeSetXRef.ProbeSetFreezeId = %s AND
- ProbeSetXRef.ProbeSetId = ProbeSet.Id AND
- ProbeSetXRef.Locus is not NULL AND
- ProbeSet.Id in (%s)
- Order by
- ProbeSet.name_num
- """ % (db.id, ProbeSetIdStr)
-
- self.cursor.execute(cmd)
- results = self.cursor.fetchall()
-
- for result in results:
- _Id, _symbol, _desc,_targetDesc, _chr, _TMb, _marker, _lrs, _pvalue, _additive, _mean = result
- if _marker == "-":
- continue
- if not _additive:
- _additive = ""
-
- try:
- _TGMb = _TMb + self.mouseChrLengthDict[string.strip(_chr)]
- except:
- _TGMb = ""
-
- result2 = [_Id, _symbol, _desc, _targetDesc, _chr, _TMb, _TGMb, _marker, _lrs, _additive, _pvalue]
- try:
- result2 += markerGMb[_marker]
- except:
- result2 += ['', '', '']
- result2 += [_mean]
- text.append(map(str, result2))
-
- #XZ, 06/29/2007: This block is dealing with the last several probesets that fall out of the 1000-probeset block.
- if ProbeSetIdList:
- ProbeSetIdStr = ','.join(map(str, ProbeSetIdList))
-
- cmd = """
- Select
- ProbeSet.Name, ProbeSet.symbol, ProbeSet.description,ProbeSet.Probe_Target_Description, ProbeSet.Chr, ProbeSet.Mb,
- ProbeSetXRef.Locus, ProbeSetXRef.LRS, ProbeSetXRef.pValue,
- ProbeSetXRef.additive, ProbeSetXRef.mean
- From
- ProbeSet, ProbeSetXRef
- Where
- ProbeSetXRef.ProbeSetFreezeId = %s AND
- ProbeSetXRef.ProbeSetId = ProbeSet.Id AND
- ProbeSetXRef.Locus is not NULL AND
- ProbeSet.Id in (%s)
- Order by
- ProbeSet.name_num
- """ % (db.id, ProbeSetIdStr)
-
- self.cursor.execute(cmd)
- results = self.cursor.fetchall()
-
- for result in results:
- _Id, _symbol, _desc, _targetDesc,_chr, _TMb, _marker, _lrs, _pvalue, _additive, _mean = result
- if _marker == "-":
- continue
- if not _additive:
- _additive = ""
-
- try:
- _TGMb = _TMb + self.mouseChrLengthDict[string.strip(_chr)]
- except:
- _TGMb = ""
-
- result2 = [_Id, _symbol, _desc,_targetDesc, _chr, _TMb, _TGMb, _marker, _lrs, _additive, _pvalue]
- try:
- result2 += markerGMb[_marker]
- except:
- result2 += ['', '', '']
- result2 += [_mean]
- text.append(map(str, result2))
-
-
- import pyXLWriter as xl
- # Create a new Excel workbook
- workbook = xl.Writer(filename)
- worksheet = workbook.add_worksheet()
- heading = workbook.add_format(align = 'center', bold = 1, size=13, color = 'red')
- titleStyle = workbook.add_format(align = 'left', bold = 0, size=14, border = 1, border_color="gray")
-
- worksheet.write([0, 0], "Data source: The GeneNetwork at http://www.genenetwork.org", titleStyle)
- worksheet.write([1, 0], "Citations: Please see %s/reference.html" % webqtlConfig.PORTADDR, titleStyle)
- worksheet.write([2, 0], "Database : %s" % db.fullname, 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)
-
- table_row_start_index = 7
- nrow = table_row_start_index
- for row in text:
- for ncol, cell in enumerate(row):
- if nrow == table_row_start_index:
- worksheet.write([nrow, ncol], cell.strip(), heading)
- worksheet.set_column([ncol, ncol], 20)
- else:
- worksheet.write([nrow, ncol], cell.strip())
- nrow += 1
-
- worksheet.write([1+nrow, 0], "Funding for The GeneNetwork: NIAAA (U01AA13499, U24AA13513), NIDA, NIMH, and NIAAA (P20-DA21131), NCI MMHCC (U01CA105417), and NCRR (U01NR 105417)", titleStyle)
- worksheet.write([2+nrow, 0], "PLEASE RETAIN DATA SOURCE INFORMATION WHENEVER POSSIBLE", titleStyle)
-
- workbook.close()
-
- fp = open(filename, 'rb')
- text = fp.read()
- fp.close()
- else:
- heading = "Download Results"
- detail = ["Database calculation is not finished."]
- self.error(heading=heading,detail=detail)
- return
-
- self.content_type = 'application/xls'
- self.content_disposition = 'attachment; filename=%s' % ('export-%s.xls' % time.strftime("%y-%m-%d-%H-%M"))
- self.attachment = text
-
- def readMouseGenome(self, RISet):
- ldict = {}
- lengths = []
- sum = 0
- #####################################
- # Retrieve Chr Length Information
- #####################################
- self.cursor.execute("""
- Select
- Chr_Length.Name, Length from Chr_Length, InbredSet
- where
- Chr_Length.SpeciesId = InbredSet.SpeciesId AND
- InbredSet.Name = '%s'
- Order by
- OrderId
- """ % RISet)
- lengths = self.cursor.fetchall()
- ldict[lengths[0][0]] = 0
- prev = lengths[0][1]/1000000.0
- sum += lengths[0][1]/1000000.0
- for item in lengths[1:]:
- ldict[item[0]] = prev
- prev += item[1]/1000000.0
- sum += item[1]/1000000.0
- return ldict, sum