aboutsummaryrefslogtreecommitdiff
path: root/web/webqtl/compareCorrelates/htmlModule.py
diff options
context:
space:
mode:
Diffstat (limited to 'web/webqtl/compareCorrelates/htmlModule.py')
-rwxr-xr-xweb/webqtl/compareCorrelates/htmlModule.py279
1 files changed, 279 insertions, 0 deletions
diff --git a/web/webqtl/compareCorrelates/htmlModule.py b/web/webqtl/compareCorrelates/htmlModule.py
new file mode 100755
index 00000000..ebba3b86
--- /dev/null
+++ b/web/webqtl/compareCorrelates/htmlModule.py
@@ -0,0 +1,279 @@
+# 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 sys
+import string
+import os
+import MySQLdb
+import cgi
+
+from htmlgen import HTMLgen2 as HT
+
+from base import webqtlConfig
+
+
+# XZ 08/14/2008: When I tried to replace 'from webqtlConfig import *' with 'import webqtlConfig'
+# XZ 08/14/2008: I found some problems. I discussed with Hongqiang and the below is conclusion.
+# XZ 08/14/2008: The program uses webqtlConfig.DB_NAME, webqtlConfig.MYSQL_SERVER and so on
+# XZ 08/14/2008: without 'import webqtlConfig'. This program will not work.
+# XZ 08/14/2008: CONFIG_htmlpath doesn't exist in webqtlConfig.py
+# XZ 08/14/2008: Hongqian said this was done by Fan Zhang, and this program was not tested.
+# XZ 08/14/2008: So nobody realize these bugs.
+
+# XZ, 09/09/2008: This function is not called any where.
+# XZ, 09/09/2008: Actually, I don't think this function works.
+def genHeaderFooter(i=1,title='',basehref='',js1='',js2='',layer='',body=''):
+ """
+ generate footer and header HTML code
+ default is header
+ i = 0 is footer+header
+ i = 1 is header
+ i = 2 is footer
+ """
+ try:
+ temp_file = CONFIG_htmlpath + 'beta-template.html'
+ fp = open(temp_file, 'rb')
+ template = fp.read()
+ fp.close()
+ template = template % (title,basehref,js1,js2,layer,body, "")
+ header,footer = string.split(template,'<!-- split from Here -->')
+ if i == 0:
+ return header + footer
+ elif i == 1:
+ return header
+ elif i == 2:
+ return footer
+ else:
+ return ""
+ except:
+ if i == 0:
+ return "header + footer"
+ elif i == 1:
+ return "header"
+ elif i == 2:
+ return "footer"
+ else:
+ return ""
+
+# XZ, 09/09/2008: This function is only used in multitrait.py where it is called with value assigned to db.
+# XZ, 09/09/2008: So the try-except block is not executed.
+# XZ, 09/09/2008: This explains why no error was generated even without 'import webqtlConfig'
+def genDatabaseMenu(db = None, public =1, RISetgp = 'BXD', selectname = 'database', selected = ""):
+ """
+ generate database Menu
+ public = 0 : search3.html databases Menu
+ public = 1 : search.html databases Menu
+ """
+ if not db:
+ try:
+ # import MySQLdb
+ # con = MySQLdb.Connect(db='db_webqtl')
+ # Modified by Fan Zhang
+ con = MySQLdb.Connect(db=webqtlConfig.DB_NAME,host=webqtlConfig.MYSQL_SERVER, user=webqtlConfig.DB_USER,passwd=webqtlConfig.DB_PASSWD)
+ db = con.cursor()
+ except:
+ return "Connect MySQL Server Error"
+ else:
+ pass
+
+ databaseMenu = HT.Select(name=selectname)
+ nmenu = 0
+
+ # here's a hack: bxd and bxd300 can be correlated against each other
+ # if either of those are the group, we put in special SQL that pulls both
+ if RISetgp in ("BXD", "BXD300"):
+ ibsNameQry = '(InbredSet.Name = "BXD" OR InbredSet.Name = "BXD300")'
+ else:
+ ibsNameQry = 'InbredSet.Name = "%s"' % RISetgp
+
+ #Publish Database
+ db.execute('''
+ SelecT
+ PublishFreeze.FullName,
+ PublishFreeze.Name
+ from
+ PublishFreeze,
+ InbredSet
+ where
+ PublishFreeze.InbredSetId = InbredSet.Id and
+ %s
+ ''' % ibsNameQry)
+ for item in db.fetchall():
+ databaseMenu.append(item)
+ nmenu += 1
+
+ #Genome Database
+ db.execute('''
+ SelecT
+ GenoFreeze.FullName,
+ GenoFreeze.Name
+ from
+ GenoFreeze,InbredSet
+ where
+ GenoFreeze.InbredSetId = InbredSet.Id and
+ %s
+ ''' % ibsNameQry)
+ for item in db.fetchall():
+ databaseMenu.append(item)
+ nmenu += 1
+
+ #Microarray Database
+ db.execute('SelecT Id, Name from Tissue')
+ for item in db.fetchall():
+ TId, TName = item
+ databaseMenuSub = HT.Optgroup(label = '%s ------' % TName)
+ db.execute('''
+ SelecT
+ ProbeSetFreeze.FullName,
+ ProbeSetFreeze.Name
+ from
+ ProbeSetFreeze,
+ ProbeFreeze,
+ InbredSet
+ where
+ ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id and
+ ProbeFreeze.TissueId = %d and
+ ProbeSetFreeze.public > %d and
+ ProbeFreeze.InbredSetId = InbredSet.Id and
+ %s
+ order by
+ ProbeSetFreeze.CreateTime desc,
+ ProbeSetFreeze.AvgId
+ ''' % (TId,public,ibsNameQry))
+ for item2 in db.fetchall():
+ databaseMenuSub.append(item2)
+ nmenu += 1
+ databaseMenu.append(databaseMenuSub)
+
+ if nmenu:
+ if selected:
+ databaseMenu.selected.append(selected)
+ return str(databaseMenu)
+ else:
+ return ''
+
+
+# XZ, 09/09/2008: This function is not called any where.
+# XZ, 09/09/2008: Actually, I don't think this function works.
+# XZ, 09/09/2008: There is no 'DataForm' file now. It should be webqtlForm.py
+def genRISample():
+ import glob
+ import reaper
+ import random
+ import math
+ import webqtlUtil
+ risets = filter(lambda X:X.find('F2')<0, map(os.path.basename, glob.glob(os.path.join(CONFIG_genodir, "*.geno"))))
+ risets = map(lambda X:X.split('.')[0], risets)
+ risets.remove("BayXSha")
+ risets.sort()
+ body = HT.Blockquote()
+ NPerRow = 6
+ for item in risets:
+ values = []
+ if item == 'AXBXA': item2='AXB/BXA'
+ elif item == 'HXBBXH': item2='HXB/BXH'
+ else: item2=item
+ body.append(HT.Paragraph(item2, Class='subtitle'))
+ tbl = HT.TableLite(Class="collap")
+ dataset = reaper.Dataset()
+ dataset.read(os.path.join(CONFIG_genodir, "%s.geno"%item))
+ prgy = webqtlUtil.ParInfo[item] + list(dataset.prgy)
+
+ mean = random.random()*100
+ variance = random.random()*500
+ variables = []
+ while len(variables) < len(prgy):
+ S = 2
+ while (S>=1):
+ U1= random.random()
+ U2= random.random()
+ V1= 2*U1-1.0
+ V2= 2*U2-1.0
+ S=V1*V1+V2*V2
+ X= math.sqrt(-2 * math.log(S) / S) * V1
+ Y= math.sqrt(-2 * math.log(S) / S) * V2
+ variables.append(mean + math.sqrt(variance) * X)
+ variables.append(mean + math.sqrt(variance) * Y)
+
+ tempTR = HT.TR()
+ for i, strain in enumerate(prgy):
+ if i and i%NPerRow==0:
+ tbl.append(tempTR)
+ tempTR = HT.TR()
+ if random.random() < 0.2:
+ variable = 'X'
+ else:
+ variable = "%2.3f" % variables[i]
+
+ tempTR.append(HT.TD(strain, Class="strains", width=80))
+ tempTR.append(HT.TD(variable, Class="values", width=60))
+ values.append(variable)
+
+ for j in range(NPerRow-i%NPerRow-1):
+ tempTR.append(HT.TD())
+ tbl.append(tempTR)
+ body.append(tbl)
+ body.append(HT.Paragraph("Copy the following line to paste into the GeneNetwork entry box:"))
+ body.append(HT.Code(string.join(values, " ")))
+ body.append(HT.HR(width="90%"))
+ return body
+
+if __name__ == "__main__":
+ if os.environ.has_key('SCRIPT_FILENAME'):
+ script_filename = os.environ['SCRIPT_FILENAME']
+ else:
+ script_filename = ''
+ #Used as cgi script
+ if script_filename and script_filename[-2:] == 'py':
+ print 'Content-type: text/html\n'
+ formdata = cgi.FieldStorage()
+ sys.stderr = sys.stdout
+ try:
+ getID = string.lower(formdata.getvalue('get'))
+ except:
+ getID = ''
+ #Used as command
+ else:
+ if len(sys.argv) >= 2:
+ getID = string.lower(sys.argv[1])
+ else:
+ getID = ''
+
+ if getID == 'headerfooter':
+ print genHeaderFooter(0)
+ elif getID == 'header':
+ print genHeaderFooter(1)
+ elif getID == 'footer':
+ print genHeaderFooter(2)
+ elif getID == 'databasemenu':
+ print genDatabaseMenu(public=0)
+ elif getID == 'datasample':
+ print genRISample()
+ else:
+ print genHeaderFooter(0)
+else:
+ pass
+