about summary refs log tree commit diff
path: root/web/webqtl/compareCorrelates/htmlModule.py
diff options
context:
space:
mode:
authorroot2012-05-08 18:39:56 -0500
committerroot2012-05-08 18:39:56 -0500
commitea46f42ee640928b92947bfb204c41a482d80937 (patch)
tree9b27a4eb852d12539b543c3efee9d2a47ef470f3 /web/webqtl/compareCorrelates/htmlModule.py
parent056b5253fc3857b0444382aa39944f6344dc1ceb (diff)
downloadgenenetwork2-ea46f42ee640928b92947bfb204c41a482d80937.tar.gz
Add all the source codes into the github.
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
+