about summary refs log tree commit diff
path: root/web/webqtl/genomeGraph/cmdGenomeScanPage.py
diff options
context:
space:
mode:
Diffstat (limited to 'web/webqtl/genomeGraph/cmdGenomeScanPage.py')
-rwxr-xr-xweb/webqtl/genomeGraph/cmdGenomeScanPage.py532
1 files changed, 0 insertions, 532 deletions
diff --git a/web/webqtl/genomeGraph/cmdGenomeScanPage.py b/web/webqtl/genomeGraph/cmdGenomeScanPage.py
deleted file mode 100755
index d880ce69..00000000
--- a/web/webqtl/genomeGraph/cmdGenomeScanPage.py
+++ /dev/null
@@ -1,532 +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 piddle as pid
-import os
-import math
-
-from htmlgen import HTMLgen2 as HT
-
-from utility import svg
-from base import webqtlConfig
-from utility import Plot
-from utility import webqtlUtil
-from base.webqtlDataset import webqtlDataset
-from base.templatePage import templatePage
-
-
-######################################### 
-#      Genome Scan PAGE
-#########################################
-class cmdGenomeScanPage(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:
-			self.openURL = webqtlConfig.CGIDIR + webqtlConfig.SCRIPTFILE + \
-				'?FormID=showDatabase&database=%s&incparentsf1=1&ProbeSetID=' % self.database
-				
-			if db.type != "ProbeSet" or not db.id:
-				raise DbNameError
-			
-			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'
-
-			##################################################
-			#  exon data is too huge for GenoGraph, skip it  #
-			##################################################
-			self.cursor.execute('select count(*) from ProbeSetXRef where ProbeSetFreezeId=%d' % db.id)
-			amount = self.cursor.fetchall()
-			if amount:
-				amount = amount[0][0]
-				if amount>100000:
-					heading = "Whole Transcriptome Mapping"
-					detail = ["Whole Transcriptome Mapping is not available for this data set."]
-					self.error(heading=heading,detail=detail)
-					return
-
-			self.cursor.execute("""
-				Select 
-					ProbeSet.Id, ProbeSet.Name, ProbeSet.Chr, ProbeSet.Mb, ProbeSetXRef.Locus, ProbeSetXRef.pValue
-				From
-					ProbeSet, ProbeSetXRef
-				whERE
-					ProbeSetXRef.ProbeSetFreezeId = %d AND
-					ProbeSetXRef.ProbeSetId = ProbeSet.Id AND
-					ProbeSetXRef.Locus is not NULL 
-				""" % db.id)
-			results = self.cursor.fetchall()
-
-			if results:
-				self.mouseChrLengthDict, sum = self.readMouseGenome(thisRISet)
-				
-				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] = locus.Mb + chrlen
-  				
-				try:
-					FDR = float(fd.formdata.getvalue("fdr", ""))
-				except:
-					FDR = 0.2
-				self.grid = fd.formdata.getvalue("grid", "")
-				
-				NNN = len(results)
-				results = list(results)
-				results.sort(self.cmppValue)
-
-				MbCoord = []
-				MbCoord2 = []
-
-				for j in range(NNN, 0, -1):
-					if results[j-1][-1] <= (FDR*j)/NNN:
-						break
-
-				if j > 0:
-					for i in range(j-1, -1, -1):
-						_Id, _probeset, _chr, _Mb, _marker, _pvalue = results[i]
-						try:
-							MbCoord.append([markerGMb[_marker], _Mb+self.mouseChrLengthDict[string.strip(_chr)], _probeset, _chr, _Mb, _marker, _pvalue])
-						except:
-							pass
-          	
-				filename=webqtlUtil.genRandStr("gScan_")
-				canvas = pid.PILCanvas(size=(1280,880))
-				self.drawGraph(canvas, MbCoord, cLength=sum)
-		
-				canvas.save(os.path.join(webqtlConfig.IMGDIR, filename), format='png')
-	
-				canvasSVG = self.drawSVG(MbCoord, cLength=sum, size=(1280,880))
-				canvasSVG.toXml(os.path.join(webqtlConfig.IMGDIR, filename+'.svg')) #and write it to file
-				
-				img  = HT.Embed(src='/image/'+filename+'.png', width=1280, height=880, border=0, alt='Genome Scan')
-				img2 = HT.Embed(src='/image/'+filename+'.svg', width=1280, height=880, border=0)
-				TD_LR = HT.TD(colspan=2,height=200,width="100%",bgColor='#eeeeee')
-				
-				heading = HT.Paragraph('Whole Transcriptome Mapping')
-				heading.__setattr__("class","title")
-				intro = HT.Blockquote()
-				intro.append('The plot below is the Whole Transcriptome Mapping of Database ') 
-				intro.append(HT.Href(text=db.fullname, url = webqtlConfig.INFOPAGEHREF % db.name ,target='_blank',Class="normalsize"))
-				intro.append(". %d from a total of %d ProbeSets were utilized to generate this graph." % (len(MbCoord), len(results)))
-				
-				mainfm = HT.Form(cgi = os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE),  enctype='multipart/form-data', \
-					name=webqtlUtil.genRandStr("fm_"), submit=HT.Input(type='hidden'))
-				mainfm.append(HT.Input(name='database', value=self.database, type='hidden'))
-				mainfm.append(HT.Input(name='FormID', value='transciptMapping', type='hidden'))
-				
-				mainfm.append("<BLOCKQUOTE>")
-				mainfm.append("0 < FDR <= 1.0 ")
-				mainfm.append(HT.Input(name='fdr', value=FDR, type='text'))
-			
-				mainfm.append(HT.Input(name='submit', value='Redraw Graph', type='submit', Class='button'))
-				mainfm.append("</BLOCKQUOTE>")
-				mainfm.append("""
-<center>
-<div id="gallery">
-<div class="on"  title="img1"><span>Static</span></div>
-<div class="off" title="img2"><span>Interactive</span></div>
-</div>
-
-<div id="img1" class="show">
-""")           
-				mainfm.append(img)
-				mainfm.append("""
-</div>
-
-<div id="img2" class="hide">
-""")
-				mainfm.append(img2)
-				mainfm.append("""
-</div>
-</center>
-""")
-
-				TD_LR.append(heading, intro, HT.Paragraph(mainfm))
-				
-				self.dict['title'] = 'Whole Transcriptome Mapping'
-				self.dict['body'] = TD_LR
-			else:
-				heading = "Whole Transcriptome Mapping"
-				detail = ["Database calculation is not finished."]
-				self.error(heading=heading,detail=detail)
-				return
-		except:
-			heading = "Whole Transcriptome Mapping"
-			detail = ["Whole Transcriptome Mapping only apply to Microarray database."]
-			self.error(heading=heading,detail=detail)
-			return
-			
-	def drawSVG(self, data, cLength = 2500, offset= (80, 160, 60, 60), size=(1280,880), 
-			XLabel="Marker GMb", YLabel="Transcript GMb"):
-		entities = {
-				"colorText" : "fill:darkblue;",
-				"strokeText" : ";stroke:none;stroke-width:0;",
-				"allText" : "font-family:Helvetica;", 
-				"titleText" : "font-size:22;font-weight:bold;", 
-				"subtitleText" : "font-size:18;font-weight:bold;", 
-				"headlineText" : "font-size:14;font-weight:bold;", 
-				"normalText" : "font-size:12;", 
-				"legendText" : "font-size:11;text-anchor:end;", 
-				"valuesText" : "font-size:12;", 
-				"boldValuesText" : "font-size:12;font-weight:bold;", 
-				"smallText" : "font-size:10;", 
-				"vText" : "writing-mode:tb-rl",
-				"rightText" : "text-anchor:end;", 
-				"middleText" : "text-anchor:middle;", 
-				"bezgrenzstyle" : "fill:none;stroke:#11A0FF;stroke-width:40;stroke-antialiasing:true;", 
-				"rectstyle" : "fill:lightblue;stroke:none;opacity:0.2;", 
-				"fillUnbebaut" : "fill:#CCFFD4;stroke:none;", 
-				"fillNodata" : "fill:#E7E7E7;stroke:black;stroke-width:2;stroke-antialiasing:true;", 
-				"fillNodataLegend" : "fill:#E7E7E7;stroke:black;stroke-width:0.5;stroke-antialiasing:true;", 
-				"grundzeitstyle" : "fill:none;stroke:#E00004;stroke-width:60;stroke-antialiasing:true;", 
-				"bezgrenzstyle" : "fill:none;stroke:#11A0FF;stroke-width:40;stroke-antialiasing:true;", 
-				"mapAuthor" : "A. Neumann", 
-				}
-		cWidth, cHeight = size		
-		canvasSVG = svg.drawing(entities) #create a drawing
-		drawSpace=svg.svg((0, 0, cWidth, cHeight), cWidth, cHeight, xml__space="preserve", 
-			zoomAndPan="disable", onload="initMap(evt);", 
-			xmlns__a3="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/",
-			a3__scriptImplementation="Adobe") #create a svg drawingspace
-		canvasds=svg.description('Genome Graph') #define a description
-		drawSpace.addElement(canvasds) #add the description to the svg
-		
-		#need to be modified or deleted
-		xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
-		plotWidth = cWidth - xLeftOffset - xRightOffset
-		plotHeight = cHeight - yTopOffset - yBottomOffset
-		drawSpace.addElement(svg.script("", language="javascript", xlink__href="/javascript/svg.js"))
-		
-		#add defs
-		defs = svg.defs()
-		symbol1= svg.symbol(id="magnifyer", overflow="visible", 
-			style="fill:white;stroke:orange;stroke-width:2;")
-		symbol1.addElement(svg.line(0, 0, -8, 20))
-		symbol1.addElement(svg.circle(0, 0, 8))
-		symbol1.addElement(svg.line(-4, 0, 4, 0, style="stroke:orange;stroke-width:2;"))
-		defs.addElement(symbol1)
-		symbol2= svg.symbol(id="magnifyerZoomIn",overflow="visible")
-		symbol2.addElement(svg.use(link="#magnifyer", id="zoomIn"))
-		symbol2.addElement(svg.line(0, -4, 0, 4, style="stroke:orange;stroke-width:2;"))
-		defs.addElement(symbol2)
-		drawSpace.addElement(defs)
-		
-		symbol3= svg.symbol(id="msgbox", overflow="visible", 
-			style="fill:white;stroke:orange;stroke-width:1;opacity:0.8;")
-		symbol3.addElement(svg.rect(-80, -190, 300, 150, rx=10, ry=10))
-		symbol3.addElement(svg.line(21, -40, 58, -40, style="stroke:white;"))
-		symbol3.addElement(svg.polyline([[20, -40], [0, 0], [60, -40]]))
-		symbol3.addElement(svg.text(-60, -160, "ProbeSet ", style="&colorText; &allText; &subtitleText; &strokeText;"))
-		symbol3.addElement(svg.text(-60, -125, "Marker ", style="&colorText; &allText; &subtitleText; &strokeText;"))
-		symbol3.addElement(svg.text(-60, -90, "LRS ", style="&colorText; &allText; &subtitleText; &strokeText;"))
-		symbol3.addElement(svg.text(-60, -55, "P value ", style="&colorText; &allText; &subtitleText; &strokeText;"))
-		defs.addElement(symbol3)
-		
-		g = svg.group("title")
-		g.addElement(svg.text(cWidth-40, 30, "Genome Graph", style="&colorText; &allText; &titleText; &rightText;"))
-		g.addElement(svg.text(cWidth-40, 50, "Whole Transcriptome Mapping", style="&colorText; &allText; &subtitleText; &rightText;"))
-		drawSpace.addElement(g)
-		
-		#draw Main display area border
-		mainSquare = cHeight-60
-		cordZOOM = 10
-		drawSpace.addElement(svg.rect(8, 8, mainSquare+4, mainSquare+4,'none',"orange",0.5, rx="5", ry="5"))
-		drawSpace.addElement(svg.text(10+mainSquare/2, 40+mainSquare,'Marker GMb', 
-			style="&colorText; &allText; &titleText; &middleText;", id="XLabel"))
-		drawSpace.addElement(svg.text(mainSquare + 80, 10+mainSquare/2,'Transcript GMb', 
-			style="&colorText; &allText; &titleText; &middleText; &vText;", id="YLabel"))
-		
-		#draw overview display area
-		drawSpace.addElement(svg.rect(cWidth-40-260, 60, 260, 260,'none',"orange",0.5, rx="5", ry="5"))
-		drawSpaceThumb= svg.svg(id="overviewPlot",x=cWidth-40-260,y="60",width="260",
-			height="260",viewBox=(0, 0, mainSquare*cordZOOM, mainSquare*cordZOOM))
-		g = svg.group(style="&bezgrenzstyle;")
-		g.addElement(svg.use("#grid"))
-		drawSpaceThumb.addElement(g)
-		drawSpaceThumb.addElement(svg.rect(id="overviewRect",style="&rectstyle;",
-			x="0",y="0",width=mainSquare*cordZOOM,height=mainSquare*cordZOOM, 
-			onmouseover="statusChange('click and drag rectangle to change extent');",
-			onmousedown="beginPan(evt);", onmousemove="doPan(evt);", 
-			onmouseup="endPan();", onmouseout="endPan();"))
-		drawSpace.addElement(drawSpaceThumb)
-		
-		#draw navigator
-		g = svg.group(id="navigatorElements")
-		g.addElement(svg.use("#magnifyerZoomIn", id="zoomIn", transform="translate(%d,350)" % (cWidth-40-130-20), 
-			onmouseover="magnify(evt,1.3,'in');", onmouseout="magnify(evt,1,'in');", onclick="zoomIt('in');"))
-		g.addElement(svg.use("#magnifyer", id="zoomOut", transform="translate(%d,350)" % (cWidth-40-130+20),
-			onmouseover="magnify(evt,1.3,'out');",onmouseout="magnify(evt,1,'out');", onclick="zoomIt('out');"))
-		
-		drawSpace.addElement(g)
-		
-		g = svg.group(id="statusBar")
-		g.addElement(svg.text(cWidth-40-260, 360, "ZOOM: 100%", style="fill:orange; font-size:14;", id="zoomValueObj"))
-		g.addElement(svg.text(cWidth-40-260, 380, "Status:", style="&colorText; &allText; &smallText;"))
-		g.addElement(svg.text(cWidth-40-260, 395, "Loading Plot", style="&colorText; &allText; &smallText;", id="statusText"))
-		drawSpace.addElement(g)
-		
-		#draw main display area
-		drawSpaceMain= svg.svg((0, 0, mainSquare*cordZOOM, mainSquare*cordZOOM), mainSquare, mainSquare, 
-			id="mainPlot",x="10",y="10")
-		mPlotWidth = mPlotHeight = 0.8*mainSquare*cordZOOM
-		
-		drawSpaceMain.addElement(svg.rect(mainSquare*cordZOOM*0.1, mainSquare*cordZOOM*0.1, mPlotWidth, mPlotHeight,style="fill:white",
-			onmousemove="showChr(evt);", onmouseover="showChr(evt);", onmouseout="showNoChr(evt);"))
-		#draw grid
-		g = svg.group("grid", style="stroke:lightblue;stroke-width:3", 
-			transform="translate(%d,%d)" % (mainSquare*cordZOOM*0.1, mainSquare*cordZOOM*0.1))
-			
-		if 1: #self.grid == "on":
-			js = [] 
-			for key in self.mouseChrLengthDict.keys():
-				length = self.mouseChrLengthDict[key]
-				js.append(mPlotWidth*length/cLength)
-				if length != 0:
-					yCoord = mPlotHeight*(1.0-length/cLength)
-					l = svg.line(0,yCoord ,mPlotWidth, yCoord)
-					g.addElement(l)	
-					xCoord = mPlotWidth*length/cLength
-					l = svg.line(xCoord, 0 ,xCoord, mPlotHeight)
-					g.addElement(l)
-			js.sort()
-			drawSpace.addElement(svg.script("",language="javascript", cdata="var openURL=\"%s\";\nvar chrLength=%s;\n" % (self.openURL, js)))
-		
-		g.addElement(svg.rect(0, 0, mPlotWidth, mPlotHeight,'none','black',10))
-		drawSpaceMain.addElement(g)
-		
-		#draw Scale
-		g = svg.group("scale", style="stroke:black;stroke-width:0", 
-			transform="translate(%d,%d)" % (mainSquare*cordZOOM*0.1, mainSquare*cordZOOM*0.1))
-		i = 100
-		scaleFontSize = 11*cordZOOM
-		while i < cLength:
-			yCoord = mPlotHeight - mPlotHeight*i/cLength
-			l = svg.line(0,yCoord ,-5*cordZOOM, yCoord)
-			g.addElement(l)
-			t = svg.text(-40*cordZOOM, yCoord +5*cordZOOM, "%d"% i, 100, "verdana") # coordinate tag Y
-			g.addElement(t)
-			xCoord = mPlotWidth*i/cLength
-			l = svg.line(xCoord, mPlotHeight, xCoord, mPlotHeight+5*cordZOOM)
-			g.addElement(l)
-			if i%200 == 0:
-				t = svg.text(xCoord, mPlotHeight+10*cordZOOM, "%d"% i, 100, "verdana") # coordinate tag X
-				g.addElement(t)
-			i += 100
-			
-		drawSpaceMain.addElement(g)
-		#draw Points
-		finecolors = Plot.colorSpectrumSVG(12)
-		finecolors.reverse()
-		g = preColor = ""
-		for item in data:
-			_probeset, _chr, _Mb, _marker, _pvalue = item[2:]
-			try:
-				_idx = int((-math.log10(_pvalue))*12/6.0) # add module name
-				_color = finecolors[_idx]
-			except:
-				_color = finecolors[-1]
-			if _color != preColor:
-				preColor = _color
-				if g:
-					drawSpaceMain.addElement(g)
-				g = svg.group("points", style="stroke:%s;stroke-width:5" % _color, 
-					transform="translate(%d,%d)" % (mainSquare*cordZOOM*0.1, mainSquare*cordZOOM*0.1),
-					onmouseover="mvMsgBox(evt);", onmouseout="hdMsgBox();", onmousedown="openPage(evt);")
-			else:
-				pass
-			px = mPlotWidth*item[0]/cLength
-			py = mPlotHeight*(1.0-item[1]/cLength)
-			l = svg.line("%2.1f" % (px-3*cordZOOM), "%2.1f" % py, "%2.1f" % (px+3*cordZOOM), "%2.1f" % py, ps=_probeset, mk=_marker)
-			g.addElement(l)	
-
-		drawSpaceMain.addElement(g)
-		
-		"""
-		#draw spectrum
-		i = 0
-		j = 0
-		middleoffsetX = 40
-		labelFont=pid.Font(ttf="tahoma",size=12,bold=0)
-		for dcolor in finecolors:
-			drawSpace.drawLine(xLeftOffset+ plotWidth + middleoffsetX -15 , plotHeight + yTopOffset - i, \
-				xLeftOffset+ plotWidth + middleoffsetX+15 , plotHeight + yTopOffset - i, color=dcolor)
-			if i % 50 == 0:
-				drawSpace.drawLine(xLeftOffset+ plotWidth +middleoffsetX+15 ,plotHeight + yTopOffset - i,  \
-				xLeftOffset+ plotWidth +middleoffsetX+20,plotHeight + yTopOffset - i, color=pid.black)
-				drawSpace.drawString("%1.1f" % -j , xLeftOffset+ plotWidth +middleoffsetX+25 ,plotHeight + yTopOffset - i+5, font = labelFont)
-				j += 1
-			i += 1
-		drawSpace.drawLine(xLeftOffset+ plotWidth +middleoffsetX+15 ,plotHeight + yTopOffset - i+1,  \
-			xLeftOffset+ plotWidth +middleoffsetX+20,plotHeight + yTopOffset - i+1, color=pid.black)	
-		drawSpace.drawString("%1.1f" % -j , xLeftOffset+ plotWidth +middleoffsetX+25 ,plotHeight + yTopOffset - i+6, font = labelFont)
-		labelFont=pid.Font(ttf="tahoma",size=14,bold=1)	
-		drawSpace.drawString("Log(pValue)" , xLeftOffset+ plotWidth +middleoffsetX+60 ,plotHeight + yTopOffset - 100, font = labelFont, angle =90)
-		
-		labelFont=pid.Font(ttf="verdana",size=18,bold=0)
-		drawSpace.drawString(XLabel, xLeftOffset + (plotWidth -drawSpace.stringWidth(XLabel,font=labelFont))/2.0, plotHeight + yTopOffset +40, color=pid.blue, font=labelFont)
-		drawSpace.drawString(YLabel,xLeftOffset-60, plotHeight + yTopOffset-(plotHeight -drawSpace.stringWidth(YLabel,font=labelFont))/2.0, color=pid.blue, font=labelFont, angle =90)			
-		"""
-		drawSpace.addElement(drawSpaceMain)
-		
-		g= svg.group(id="dispBox", overflow="visible", 
-			style="fill:white;stroke:orange;stroke-width:1;opacity:0.85;",
-			transform="translate(%d,650)" % (cWidth-40-300), visibility="hidden")
-		g.addElement(svg.rect(-80, -190, 300, 150, rx=10, ry=10))
-		g.addElement(svg.line(21, -40, 58, -40, style="stroke:white;"))
-		g.addElement(svg.polyline([[20, -40], [0, 0], [60, -40]]))
-		g.addElement(svg.text(-60, -160, "ProbeSet ", style="&colorText; &allText; &subtitleText; &strokeText;", id="_probeset"))
-		g.addElement(svg.text(-60, -125, "Marker ", style="&colorText; &allText; &subtitleText; &strokeText;", id="_marker"))
-
-		drawSpace.addElement(g)
-
-		canvasSVG.setSVG(drawSpace) #set the svg of the drawing to the svg
-		return canvasSVG
-			
-
-	def drawGraph(self, canvas, data, cLength = 2500, offset= (80, 160, 60, 60), XLabel="QTL location (GMb)", YLabel="Gene location (GMb)"):
-		xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
-		plotWidth = canvas.size[0] - xLeftOffset - xRightOffset
-		plotHeight = canvas.size[1] - yTopOffset - yBottomOffset
-		
-		#draw Frame
-		canvas.drawRect(plotWidth+xLeftOffset, plotHeight + yTopOffset, xLeftOffset, yTopOffset)
-		
-		#draw Scale
-		i = 100
-		scaleFont=pid.Font(ttf="cour",size=11,bold=1)
-		while i < cLength:
-			yCoord = plotHeight + yTopOffset - plotHeight*i/cLength
-			canvas.drawLine(xLeftOffset,yCoord ,xLeftOffset-5, yCoord)
-			canvas.drawString("%d"% i,	xLeftOffset -40, yCoord +5,font=scaleFont)
-			xCoord = xLeftOffset + plotWidth*i/cLength
-			canvas.drawLine(xCoord, plotHeight + yTopOffset ,xCoord, plotHeight + yTopOffset+5)
-			canvas.drawString("%d"% i,	xCoord -10, plotHeight + yTopOffset+15,font=scaleFont)
-			i += 100
-
-		#draw Points
-		finecolors = Plot.colorSpectrum(300)
-		finecolors.reverse()
-		for item in data:
-			_pvalue = item[-1]
-			try:
-				_idx = int((-math.log10(_pvalue))*300/6.0) # XZ, 09/11/2008: add module name
-				_color = finecolors[_idx]
-			except:
-				_color = finecolors[-1]
-				
-			canvas.drawCross(xLeftOffset + plotWidth*item[0]/cLength, plotHeight + yTopOffset - plotHeight*item[1]/cLength, color=_color,size=3)
-		
-		#draw grid / always draw grid
-		if 1: #self.grid == "on":
-			for key in self.mouseChrLengthDict.keys():
-				length = self.mouseChrLengthDict[key]
-				if length != 0:
-					yCoord = plotHeight + yTopOffset - plotHeight*length/cLength
-					canvas.drawLine(xLeftOffset,yCoord ,xLeftOffset+plotWidth, yCoord, color=pid.lightgrey)
-					xCoord = xLeftOffset + plotWidth*length/cLength
-					canvas.drawLine(xCoord, plotHeight + yTopOffset ,xCoord, yTopOffset, color=pid.lightgrey)
-		
-		#draw spectrum
-		i = 0
-		j = 0
-		middleoffsetX = 40
-		labelFont=pid.Font(ttf="tahoma",size=12,bold=0)
-		for dcolor in finecolors:
-			canvas.drawLine(xLeftOffset+ plotWidth + middleoffsetX -15 , plotHeight + yTopOffset - i, \
-				xLeftOffset+ plotWidth + middleoffsetX+15 , plotHeight + yTopOffset - i, color=dcolor)
-			if i % 50 == 0:
-				canvas.drawLine(xLeftOffset+ plotWidth +middleoffsetX+15 ,plotHeight + yTopOffset - i,  \
-				xLeftOffset+ plotWidth +middleoffsetX+20,plotHeight + yTopOffset - i, color=pid.black)
-				canvas.drawString("%1.1f" % -j , xLeftOffset+ plotWidth +middleoffsetX+25 ,plotHeight + yTopOffset - i+5, font = labelFont)
-				j += 1
-			i += 1
-		canvas.drawLine(xLeftOffset+ plotWidth +middleoffsetX+15 ,plotHeight + yTopOffset - i+1,  \
-			xLeftOffset+ plotWidth +middleoffsetX+20,plotHeight + yTopOffset - i+1, color=pid.black)	
-		canvas.drawString("%1.1f" % -j , xLeftOffset+ plotWidth +middleoffsetX+25 ,plotHeight + yTopOffset - i+6, font = labelFont)
-		labelFont=pid.Font(ttf="tahoma",size=14,bold=1)	
-		canvas.drawString("Log(pValue)" , xLeftOffset+ plotWidth +middleoffsetX+60 ,plotHeight + yTopOffset - 100, font = labelFont, angle =90)
-		
-		labelFont=pid.Font(ttf="verdana",size=18,bold=0)
-		canvas.drawString(XLabel, xLeftOffset + (plotWidth -canvas.stringWidth(XLabel,font=labelFont))/2.0, plotHeight + yTopOffset +40, color=pid.blue, font=labelFont)
-		canvas.drawString(YLabel,xLeftOffset-60, plotHeight + yTopOffset-(plotHeight -canvas.stringWidth(YLabel,font=labelFont))/2.0, color=pid.blue, font=labelFont, angle =90)			
-		return
-	
-	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
-	
-	def cmppValue(self, A,B):
-		if A[-1] < B[-1]:
-			return -1
-		elif A[-1] == B[-1]:
-			return 0
-		else:
-			return 1
-