about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSam Ockman2012-06-02 04:43:31 -0400
committerSam Ockman2012-06-02 04:43:31 -0400
commit93fdf06d57770c985e0ca8169977c210a891e262 (patch)
treed6007a2838a25ac0e5e23c4663ea81c99dec6a2f
parentf7c2c6ff903f835ddef2daffa368ae1aa26e136a (diff)
downloadgenenetwork2-93fdf06d57770c985e0ca8169977c210a891e262.tar.gz
Coming along in trying to get trait page working
-rwxr-xr-xwqflask/utility/Plot.py334
-rw-r--r--wqflask/wqflask/show_trait/show_trait_page.py40
-rw-r--r--wqflask/wqflask/views.py2
3 files changed, 188 insertions, 188 deletions
diff --git a/wqflask/utility/Plot.py b/wqflask/utility/Plot.py
index 2401c85c..e00b8e9e 100755
--- a/wqflask/utility/Plot.py
+++ b/wqflask/utility/Plot.py
@@ -24,7 +24,7 @@
 #
 # Last updated by GeneNetwork Core Team 2010/10/20
 
-import piddle as pid
+#import piddle as pid
 from math import *
 import random
 import sys, os
@@ -41,7 +41,7 @@ from base import webqtlConfig
 def cformat(d, rank=0):
 	'custom string format'
 	strD = "%2.6f" % d
-	
+
 	if rank == 0:
 		while strD[-1] in ('0','.'):
 			if strD[-1] == '0' and strD[-2] == '.' and len(strD) <= 4:
@@ -51,29 +51,29 @@ def cformat(d, rank=0):
 				break
 			else:
 				strD = strD[:-1]
-	
+
 	else:
-		strD = strD.split(".")[0]		
+		strD = strD.split(".")[0]
 
 	if strD == '-0.0':
 		strD = '0.0'
 	return strD
-	
-def frange(start, end=None, inc=1.0): 
-	"A faster range-like function that does accept float increments..." 
-	if end == None: 
-		end = start + 0.0 
-		start = 0.0 
-	else: 
-		start += 0.0 # force it to be a float 
-	count = int((end - start) / inc) 
-	if start + count * inc != end: 
-	# Need to adjust the count. AFAICT, it always comes up one short. 
-		count += 1 
-	L = [start] * count 
-	for i in xrange(1, count): 
-		L[i] = start + i * inc 
-	return L 
+
+def frange(start, end=None, inc=1.0):
+	"A faster range-like function that does accept float increments..."
+	if end == None:
+		end = start + 0.0
+		start = 0.0
+	else:
+		start += 0.0 # force it to be a float
+	count = int((end - start) / inc)
+	if start + count * inc != end:
+	# Need to adjust the count. AFAICT, it always comes up one short.
+		count += 1
+	L = [start] * count
+	for i in xrange(1, count):
+		L[i] = start + i * inc
+	return L
 
 
 def gammln(xx):
@@ -85,15 +85,15 @@ def gammln(xx):
 	for item in cof:
 		x+=1.0
 		ser+=item/x
-	
+
 	return -tmp+log(2.50662827465*ser)
-	
+
 
 def gser(a,x):
 	gln=gammln(a)
 	ITMAX=100
 	EPS=3.0e-7
-	
+
 	if x<=0.0:
 		gamser=0.0
 		return [gamser,gln]
@@ -109,7 +109,7 @@ def gser(a,x):
 				gamser=sum*exp(-x+a*log(x)-gln)
 				return [gamser,gln]
 	return None
-	
+
 def gcf(a,x):
 	ITMAX=100
 	EPS=3.0e-7
@@ -119,7 +119,7 @@ def gcf(a,x):
 	b0=0.0
 	a0=1.0
 	gln=gammln(a)
-	
+
 	a1=x
 	for n in range(1,ITMAX+1):
 		an=n+0.0
@@ -137,7 +137,7 @@ def gcf(a,x):
 				return [gammcf,gln]
 			gold=g
 	return None
-	
+
 def gammp(a,x):
 	if x<0.0 or a<=0.0:
 		return None
@@ -155,7 +155,7 @@ def U(n):
 		m.append(a)
 	m.append(x)
 	return m
-		
+
 def erf(x):
 	if x<0.0:
 		return -gammp(0.5,x*x)
@@ -170,7 +170,7 @@ def erfcc(x):
 		return ans
 	else:
 		return 2.0-ans
-		
+
 def calMeanVar(data):
 	n=len(data)
 	if n<2:
@@ -187,7 +187,7 @@ def calMeanVar(data):
 		for i in range(n):
 			z[i]=z[i]/variance
 		return z
-		
+
 def inverseCumul(p):
 	#Coefficients in rational approximations.
 	a = [-3.969683028665376e+01,2.209460984245205e+02,-2.759285104469687e+02,1.383577518672690e+02,-3.066479806614716e+01,2.506628277459239e+00]
@@ -227,7 +227,7 @@ def inverseCumul(p):
 		return None
 
 	if p>0 and p < 1:
-   		e = 0.5 * erfcc(-x/sqrt(2)) - p 
+   		e = 0.5 * erfcc(-x/sqrt(2)) - p
    		u = e * sqrt(2*pi) * exp(x*x/2)
    		x = x - u/(1 + x*u/2)
 		return x
@@ -252,7 +252,7 @@ def gmedian(lst2):
 			return (lst[N/2]+lst[(N-2)/2])/2.0
 		else:
 			return lst[(N-1)/2]
-			
+
 def gpercentile(lst2, np):
 	lst = lst2[:]
 	N = len(lst)
@@ -269,21 +269,21 @@ def gpercentile(lst2, np):
 			return lst[N-1]
 		else:
 			return lst[k-1] + d*(lst[k] - lst[k-1])
-		
+
 def findOutliers(vals):
-	
+
 	valsOnly = []
 	dataXZ = vals[:]
 	for i in range(len(dataXZ)):
 		valsOnly.append(dataXZ[i][1])
-		
-	data = [('', valsOnly[:])]	
-	
+
+	data = [('', valsOnly[:])]
+
 	for item in data:
 		itemvalue = item[1]
 		nValue = len(itemvalue)
 		catValue = []
-		
+
 		for item2 in itemvalue:
 			try:
 				tstrain, tvalue = item2
@@ -293,18 +293,18 @@ def findOutliers(vals):
 				continue
 			else:
 				catValue.append(tvalue)
-				
+
 		if catValue != []:
 			lowHinge = gpercentile(catValue, 25)
 			upHinge = gpercentile(catValue, 75)
 			Hstep = 1.5*(upHinge - lowHinge)
-			
+
 			outlier = []
 			extreme = []
-			
+
 			upperBound = upHinge + Hstep
 			lowerBound = lowHinge - Hstep
-			
+
 			for item in catValue:
 				if item >= upHinge + 2*Hstep:
 					extreme.append(item)
@@ -312,7 +312,7 @@ def findOutliers(vals):
 					outlier.append(item)
 				else:
 					pass
-				
+
 			for item in catValue:
 				if item <= lowHinge - 2*Hstep:
 					extreme.append(item)
@@ -323,10 +323,10 @@ def findOutliers(vals):
 		else:
 			upperBound = 1000
 			lowerBound = -1000
-				
+
 	return upperBound, lowerBound
-					
-					
+
+
 def plotBoxPlot(canvas, data, offset= (40, 40, 40, 40), XLabel="Category", YLabel="Value"):
 	xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
 	plotWidth = canvas.size[0] - xLeftOffset - xRightOffset
@@ -338,8 +338,8 @@ def plotBoxPlot(canvas, data, offset= (40, 40, 40, 40), XLabel="Category", YLabe
 				iValues.append(item2[1])
 			except:
 				iValues.append(item2)
-	
-	#draw frame		
+
+	#draw frame
 	max_Y = max(iValues)
 	min_Y = min(iValues)
 	scaleY = detScale(min_Y, max_Y)
@@ -349,7 +349,7 @@ def plotBoxPlot(canvas, data, offset= (40, 40, 40, 40), XLabel="Category", YLabe
 	stepY = (Yur - Yll)/nStep
 	stepYPixel = plotHeight/(nStep)
 	canvas.drawRect(plotWidth+xLeftOffset, plotHeight + yTopOffset, xLeftOffset, yTopOffset)
-				
+
 	##draw Y Scale
 	YYY = Yll
 	YCoord = plotHeight + yTopOffset
@@ -361,7 +361,7 @@ def plotBoxPlot(canvas, data, offset= (40, 40, 40, 40), XLabel="Category", YLabe
 		canvas.drawString(strY,	xLeftOffset -30,YCoord +5,font=scaleFont)
 		YYY += stepY
 		YCoord -= stepYPixel
-				
+
 	##draw X Scale
 	stepX = plotWidth/len(data)
 	XCoord = xLeftOffset + 0.5*stepX
@@ -373,7 +373,7 @@ def plotBoxPlot(canvas, data, offset= (40, 40, 40, 40), XLabel="Category", YLabe
 		canvas.drawLine(XCoord, YCoord,XCoord, YCoord+5, color=pid.black)
 		canvas.drawString(itemname, XCoord - canvas.stringWidth(itemname,font=labelFont)/2.0,\
 		YCoord +20,font=labelFont)
-		
+
 		nValue = len(itemvalue)
 		catValue = []
 		for item2 in itemvalue:
@@ -391,10 +391,10 @@ def plotBoxPlot(canvas, data, offset= (40, 40, 40, 40), XLabel="Category", YLabe
 			lowHinge = gpercentile(catValue, 25)
 			upHinge = gpercentile(catValue, 75)
 			Hstep = 1.5*(upHinge - lowHinge)
-			
+
 			outlier = []
 			extrem = []
-			
+
 			upperAdj = None
 			for item in catValue:
 				if item >= upHinge + 2*Hstep:
@@ -431,7 +431,7 @@ def plotBoxPlot(canvas, data, offset= (40, 40, 40, 40), XLabel="Category", YLabe
 				XCoord, plotHeight + yTopOffset - (lowerAdj-Yll)*plotHeight/(Yur - Yll))
 				canvas.drawLine(XCoord-20, plotHeight + yTopOffset - (lowerAdj-Yll)*plotHeight/(Yur - Yll), \
 				XCoord+20, plotHeight + yTopOffset - (lowerAdj-Yll)*plotHeight/(Yur - Yll))
-			
+
 			outlierFont = pid.Font(ttf="cour",size=12,bold=0)
 			if outlier != []:
 				for item in outlier:
@@ -443,14 +443,14 @@ def plotBoxPlot(canvas, data, offset= (40, 40, 40, 40), XLabel="Category", YLabe
 					yc = plotHeight + yTopOffset - (item-Yll)*plotHeight/(Yur - Yll)
 					#canvas.drawEllipse(XCoord-3, yc-3, XCoord+3, yc+3)
 					canvas.drawString('*', XCoord-3, yc+6, font=outlierFont, color=pid.red)
-			
+
 			canvas.drawCross(XCoord, plotHeight + yTopOffset - (catMean-Yll)*plotHeight/(Yur - Yll), \
 				color=pid.blue,size=3)
 			#print (catMean, catMedian, cat25per, cat75per)
 			pass
-		
+
 		XCoord += stepX
-	
+
 	labelFont=pid.Font(ttf="verdana",size=18,bold=0)
 	canvas.drawString(XLabel, xLeftOffset + (plotWidth -canvas.stringWidth(XLabel,font=labelFont))/2.0, \
 	YCoord +40, font=labelFont)
@@ -465,48 +465,48 @@ def plotSecurity(canvas, text="12345"):
 	plotHeight = canvas.size[1]
 	if plotHeight<=0 or plotWidth<=0:
 		return
-		
+
 	bgColor = pid.Color(0.6+0.4*random.random(), 0.6+0.4*random.random(), 0.6+0.4*random.random())
 	canvas.drawRect(0,0,plotWidth,plotHeight, edgeColor=bgColor, fillColor=bgColor)
-	
+
 	for i in range(30):
 		randomColor = pid.Color(0.6+0.4*random.random(), 0.6+0.4*random.random(), 0.6+0.4*random.random())
 		scaleFont=pid.Font(ttf="cour",size=random.choice(range(20, 50)))
-		canvas.drawString(random.choice('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), 
-			int(random.random()*plotWidth), int(random.random()*plotHeight), font=scaleFont, 
+		canvas.drawString(random.choice('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'),
+			int(random.random()*plotWidth), int(random.random()*plotHeight), font=scaleFont,
 			color=randomColor, angle=random.choice(range(-45, 50)))
-			
+
 	step = (plotWidth-20)/len(text)
 	startX = 20
 	for item in text:
 		randomColor = pid.Color(0.6*random.random(),0.6*random.random(), 0.6*random.random())
 		scaleFont=pid.Font(ttf="verdana",size=random.choice(range(50, 60)),bold=1)
-		canvas.drawString(item, startX, plotHeight/2-10, font=scaleFont, 
+		canvas.drawString(item, startX, plotHeight/2-10, font=scaleFont,
 			color=randomColor, angle=random.choice(range(-45, 50)))
 		startX += step
- 
+
 # parameter: data is either object returned by reaper permutation function (called by MarkerRegressionPage.py)
-# or the first object returned by direct (pair-scan) permu function (called by DirectPlotPage.py)	 
+# or the first object returned by direct (pair-scan) permu function (called by DirectPlotPage.py)
 def plotBar(canvas, data, barColor=pid.blue, axesColor=pid.black, labelColor=pid.black, XLabel=None, YLabel=None, title=None, offset= (60, 20, 40, 40), zoom = 1):
-	
+
 	xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
-	
+
 	plotWidth = canvas.size[0] - xLeftOffset - xRightOffset
 	plotHeight = canvas.size[1] - yTopOffset - yBottomOffset
 	if plotHeight<=0 or plotWidth<=0:
 		return
-		
+
 	if len(data) < 2:
 		return
-		
+
 	max_D = max(data)
 	min_D = min(data)
 	#add by NL 06-20-2011: fix the error: when max_D is infinite, log function in detScale will go wrong
 	if max_D == float('inf') or max_D>webqtlConfig.MAXLRS:
 		max_D=webqtlConfig.MAXLRS #maximum LRS value
-		
+
 	xLow, xTop, stepX = detScale(min_D, max_D)
-	
+
 	#reduce data
 	step = ceil((xTop-xLow)/50.0)
 	j = xLow
@@ -515,27 +515,27 @@ def plotBar(canvas, data, barColor=pid.blue, axesColor=pid.black, labelColor=pid
 	while j <= xTop:
 		dataXY.append(j)
 		Count.append(0)
-		j += step 
-	
+		j += step
+
 	for i, item in enumerate(data):
 		if item == float('inf') or item>webqtlConfig.MAXLRS:
 			item = webqtlConfig.MAXLRS #maximum LRS value
 		j = int((item-xLow)/step)
-		Count[j] += 1	
-		
+		Count[j] += 1
+
 	yLow, yTop, stepY=detScale(0,max(Count))
-	
+
 	#draw data
 	xScale = plotWidth/(xTop-xLow)
 	yScale = plotHeight/(yTop-yLow)
 	barWidth = xScale*step
-	
+
 	for i, count in enumerate(Count):
 		if count:
 			xc = (dataXY[i]-xLow)*xScale+xLeftOffset
 			yc =-(count-yLow)*yScale+yTopOffset+plotHeight
 			canvas.drawRect(xc+2,yc,xc+barWidth-2,yTopOffset+plotHeight,edgeColor=barColor,fillColor=barColor)
-	
+
 	#draw drawing region
 	canvas.drawRect(xLeftOffset, yTopOffset, xLeftOffset+plotWidth, yTopOffset+plotHeight)
 
@@ -548,7 +548,7 @@ def plotBar(canvas, data, barColor=pid.blue, axesColor=pid.black, labelColor=pid
 		strX = cformat(d=x, rank=0)
 		canvas.drawString(strX,xc-canvas.stringWidth(strX,font=scaleFont)/2,yTopOffset+plotHeight+14,font=scaleFont)
 		x+= (xTop - xLow)/stepX
-		
+
 	y=yLow
 	for i in range(stepY+1):
 		yc=yTopOffset+plotHeight-(y-yLow)*yScale
@@ -556,13 +556,13 @@ def plotBar(canvas, data, barColor=pid.blue, axesColor=pid.black, labelColor=pid
 		strY = "%d" %y
 		canvas.drawString(strY,xLeftOffset-canvas.stringWidth(strY,font=scaleFont)-6,yc+5,font=scaleFont)
 		y+= (yTop - yLow)/stepY
-	
+
 	#draw label
 	labelFont=pid.Font(ttf="tahoma",size=17,bold=0)
 	if XLabel:
 		canvas.drawString(XLabel,xLeftOffset+(plotWidth-canvas.stringWidth(XLabel,font=labelFont))/2.0,
 			yTopOffset+plotHeight+yBottomOffset-10,font=labelFont,color=labelColor)
-	
+
 	if YLabel:
 		canvas.drawString(YLabel, 19, yTopOffset+plotHeight-(plotHeight-canvas.stringWidth(YLabel,font=labelFont))/2.0,
 			font=labelFont,color=labelColor,angle=90)
@@ -578,34 +578,34 @@ def plotBarText(canvas, data, label, variance=None, barColor=pid.blue, axesColor
 	plotHeight = canvas.size[1] - yTopOffset - yBottomOffset
 	if plotHeight<=0 or plotWidth<=0:
 		return
-	
+
 	NNN = len(data)
 	if NNN < 2 or NNN != len(label):
 		return
 	if variance and len(variance)!=NNN:
 		variance = []
-	
+
 	Y2 = data[:]
 	if variance:
 		for i in range(NNN):
 			if variance[i]:
 				Y2 += [data[i]-variance[i]]
-				
+
 	#Y axis
 	YLow, YTop, stepY = detScale(min(Y2), max(Y2))
 	YScale = plotHeight/(YTop - YLow)
-	
+
 	if YLow < 0  and  YTop > 0:
 		drawZero = 1
 	else:
 		drawZero = 0
-		
+
 	#X axis
 	X = range(NNN)
-	Xll= 0 
+	Xll= 0
 	Xur= NNN-1
-	
-	
+
+
 	if drawZero:
 		YZero = yTopOffset+plotHeight-YScale*(0-YLow)
 		canvas.drawLine(xLeftOffset, YZero, xLeftOffset+plotWidth, YZero)
@@ -616,9 +616,9 @@ def plotBarText(canvas, data, label, variance=None, barColor=pid.blue, axesColor
 	if spaceWidth < 1:
 		spaceWidth = 1
 	barWidth = int((plotWidth - (NNN-1.0)*spaceWidth)/NNN)
-	
+
 	xc= xLeftOffset
-	scaleFont=pid.Font(ttf="verdana",size=11,bold=0)	
+	scaleFont=pid.Font(ttf="verdana",size=11,bold=0)
 	for i in range(NNN):
 		yc = yTopOffset+plotHeight-(data[i]-YLow)*YScale
 		canvas.drawRect(xc,YZero,xc+barWidth-1, yc, edgeColor=barColor,fillColor=barColor)
@@ -633,13 +633,13 @@ def plotBarText(canvas, data, label, variance=None, barColor=pid.blue, axesColor
 			canvas.drawLine(xc+barWidth/2-2,yc+varlen,xc+barWidth/2+2,yc+varlen,color=pid.red)
 		strX = label[i]
 		canvas.drawString(strX,xc+barWidth/2.0+2,yTopOffset+plotHeight+2+canvas.stringWidth(strX,font=scaleFont),font=scaleFont,angle=90)
-		xc += barWidth + spaceWidth	
-		
+		xc += barWidth + spaceWidth
+
 	#draw drawing region
 	canvas.drawRect(xLeftOffset, yTopOffset, xLeftOffset+plotWidth, yTopOffset+plotHeight)
-	
+
 	#draw Y scale
-	scaleFont=pid.Font(ttf="cour",size=16,bold=1)		
+	scaleFont=pid.Font(ttf="cour",size=16,bold=1)
 	y=YLow
 	for i in range(stepY+1):
 		yc=yTopOffset+plotHeight-(y-YLow)*YScale
@@ -647,35 +647,35 @@ def plotBarText(canvas, data, label, variance=None, barColor=pid.blue, axesColor
 		strY = cformat(d=y, rank=0)
 		canvas.drawString(strY,xLeftOffset-canvas.stringWidth(strY,font=scaleFont)-6,yc+5,font=scaleFont)
 		y+= (YTop - YLow)/stepY
-	
+
 	#draw label
 	labelFont=pid.Font(ttf="verdana",size=17,bold=0)
 	if XLabel:
 		canvas.drawString(XLabel,xLeftOffset+(plotWidth-canvas.stringWidth(XLabel,font=labelFont))/2.0,yTopOffset+plotHeight+65,font=labelFont,color=labelColor)
-	
+
 	if YLabel:
 		canvas.drawString(YLabel,xLeftOffset-50, yTopOffset+plotHeight-(plotHeight-canvas.stringWidth(YLabel,font=labelFont))/2.0,font=labelFont,color=labelColor,angle=90)
-	
+
 	labelFont=pid.Font(ttf="verdana",size=18,bold=0)
 	if title:
 		canvas.drawString(title,xLeftOffset,yTopOffset-15,font=labelFont,color=labelColor)
-		
+
 	return
-		
+
 def plotXY(canvas, dataX, dataY, rank=0, dataLabel=[], plotColor = pid.black, axesColor=pid.black, labelColor=pid.black, lineSize="thin", lineColor=pid.grey, idFont="arial", idColor=pid.blue, idSize="14", symbolColor=pid.black, symbolType="circle", filled="yes", symbolSize="tiny", XLabel=None, YLabel=None, title=None, fitcurve=None, connectdot=1, displayR=None, loadingPlot = 0, offset= (80, 20, 40, 60), zoom = 1, specialCases=[], showLabel = 1, bufferSpace = 15):
 	'displayR : correlation scatter plot, loadings : loading plot'
-	
+
 	dataXRanked, dataYRanked = webqtlUtil.calRank(dataX, dataY, len(dataX))
-		
+
 	#get ID font size
-	idFontSize = int(idSize)	
-	
+	idFontSize = int(idSize)
+
 	#If filled is yes, set fill color
 	if filled == "yes":
 		fillColor = symbolColor
 	else:
-		fillColor = None	
-	
+		fillColor = None
+
 	if symbolSize == "large":
 		sizeModifier = 7
 		fontModifier = 12
@@ -687,8 +687,8 @@ def plotXY(canvas, dataX, dataY, rank=0, dataLabel=[], plotColor = pid.black, ax
 		fontModifier = 3
 	else:
 		sizeModifier = 1
-		fontModifier = -1	
-			
+		fontModifier = -1
+
 	if rank == 0:    # Pearson correlation
 		bufferSpace = 0
 		dataXPrimary = dataX
@@ -700,7 +700,7 @@ def plotXY(canvas, dataX, dataY, rank=0, dataLabel=[], plotColor = pid.black, ax
 		dataYPrimary = dataYRanked
 		dataXAlt = dataX    #Values used just for printing the other corr type to the graph image
 		dataYAlt = dataY    #Values used just for printing the other corr type to the graph image
-	
+
 	xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
 	plotWidth = canvas.size[0] - xLeftOffset - xRightOffset
 	plotHeight = canvas.size[1] - yTopOffset - yBottomOffset
@@ -708,29 +708,29 @@ def plotXY(canvas, dataX, dataY, rank=0, dataLabel=[], plotColor = pid.black, ax
 		return
 	if len(dataXPrimary) < 1 or  len(dataXPrimary) != len(dataYPrimary) or (dataLabel and len(dataXPrimary) != len(dataLabel)):
 		return
-	
+
 	max_X=max(dataXPrimary)
 	min_X=min(dataXPrimary)
 	max_Y=max(dataYPrimary)
 	min_Y=min(dataYPrimary)
-	
+
 	#for some reason I forgot why I need to do this
 	if loadingPlot:
 		min_X = min(-0.1,min_X)
 		max_X = max(0.1,max_X)
 		min_Y = min(-0.1,min_Y)
 		max_Y = max(0.1,max_Y)
-	
+
 	xLow, xTop, stepX=detScale(min_X,max_X)
 	yLow, yTop, stepY=detScale(min_Y,max_Y)
 	xScale = plotWidth/(xTop-xLow)
 	yScale = plotHeight/(yTop-yLow)
-	
+
 	#draw drawing region
 	canvas.drawRect(xLeftOffset-bufferSpace, yTopOffset, xLeftOffset+plotWidth, yTopOffset+plotHeight+bufferSpace)
 	canvas.drawRect(xLeftOffset-bufferSpace+1, yTopOffset, xLeftOffset+plotWidth, yTopOffset+plotHeight+bufferSpace-1)
 
-	#calculate data points	
+	#calculate data points
 	data = map(lambda X, Y: (X, Y), dataXPrimary, dataYPrimary)
 	xCoord = map(lambda X, Y: ((X-xLow)*xScale + xLeftOffset, yTopOffset+plotHeight-(Y-yLow)*yScale), dataXPrimary, dataYPrimary)
 
@@ -767,12 +767,12 @@ def plotXY(canvas, dataX, dataY, rank=0, dataLabel=[], plotColor = pid.black, ax
 			elif (symbolType == "diamond" and filled != "yes"):
 				canvas.drawString(",", item[0]-canvas.stringWidth(",",font=symbolFont)/2+2, item[1]+6, font=symbolFont, color=symbolColor)
 			elif (symbolType == "diamond" and filled == "yes"):
-				canvas.drawString("D", item[0]-canvas.stringWidth("D",font=symbolFont)/2+2, item[1]+6, font=symbolFont, color=symbolColor)	
+				canvas.drawString("D", item[0]-canvas.stringWidth("D",font=symbolFont)/2+2, item[1]+6, font=symbolFont, color=symbolColor)
 			elif symbolType == "4-star":
-				canvas.drawString("l", item[0]-canvas.stringWidth("l",font=symbolFont)/2+1, item[1]+3, font=symbolFont, color=symbolColor)	
+				canvas.drawString("l", item[0]-canvas.stringWidth("l",font=symbolFont)/2+1, item[1]+3, font=symbolFont, color=symbolColor)
 			elif symbolType == "3-star":
-				canvas.drawString("k", item[0]-canvas.stringWidth("k",font=symbolFont)/2+1, item[1]+3, font=symbolFont, color=symbolColor)	
-			else:	
+				canvas.drawString("k", item[0]-canvas.stringWidth("k",font=symbolFont)/2+1, item[1]+3, font=symbolFont, color=symbolColor)
+			else:
 				canvas.drawCross(item[0],item[1]-2,color=symbolColor, size=sizeModifier+2)
 
 		if showLabel and dataLabel:
@@ -784,10 +784,10 @@ def plotXY(canvas, dataX, dataY, rank=0, dataLabel=[], plotColor = pid.black, ax
 			    labelGap = 11
 			canvas.drawString(dataLabel[i], item[0]- canvas.stringWidth(dataLabel[i],
 				font=labelFont)/2 + 1, item[1]+(labelGap+sizeModifier+(idFontSize-12)), font=labelFont, color=idColor)
-                        	
+
 	#draw scale
 	scaleFont=pid.Font(ttf="cour",size=16,bold=1)
-	
+
 
 	x=xLow
 	for i in range(stepX+1):
@@ -795,14 +795,14 @@ def plotXY(canvas, dataX, dataY, rank=0, dataLabel=[], plotColor = pid.black, ax
 		if ((x == 0) & (rank == 1)):
 			pass
 		else:
-			canvas.drawLine(xc,yTopOffset+plotHeight + bufferSpace,xc,yTopOffset+plotHeight+5 + bufferSpace, color=axesColor)		
+			canvas.drawLine(xc,yTopOffset+plotHeight + bufferSpace,xc,yTopOffset+plotHeight+5 + bufferSpace, color=axesColor)
 		strX = cformat(d=x, rank=rank)
 		if ((strX == "0") & (rank == 1)):
 			pass
 		else:
 			canvas.drawString(strX,xc-canvas.stringWidth(strX,font=scaleFont)/2,yTopOffset+plotHeight+20 + bufferSpace,font=scaleFont)
 		x+= (xTop - xLow)/stepX
-	
+
 	y=yLow
 	for i in range(stepY+1):
 		yc=yTopOffset+plotHeight-(y-yLow)*yScale
@@ -816,23 +816,23 @@ def plotXY(canvas, dataX, dataY, rank=0, dataLabel=[], plotColor = pid.black, ax
 		else:
 			canvas.drawString(strY,xLeftOffset-canvas.stringWidth(strY,font=scaleFont)- 10 - bufferSpace,yc+4,font=scaleFont)
 		y+= (yTop - yLow)/stepY
-			
+
 	#draw label
 
 	labelFont=pid.Font(ttf="verdana",size=canvas.size[0]/45,bold=0)
 	titleFont=pid.Font(ttf="verdana",size=canvas.size[0]/40,bold=0)
-		
+
 	if (rank == 1 and not title):
 		canvas.drawString("Spearman Rank Correlation", xLeftOffset-canvas.size[0]*.025+(plotWidth-canvas.stringWidth("Spearman Rank Correlation",font=titleFont))/2.0,
 						  25,font=titleFont,color=labelColor)
 	elif (rank == 0 and not title):
 		canvas.drawString("Pearson Correlation", xLeftOffset-canvas.size[0]*.025+(plotWidth-canvas.stringWidth("Pearson Correlation",font=titleFont))/2.0,
 						  25,font=titleFont,color=labelColor)
-		
+
 	if XLabel:
 		canvas.drawString(XLabel,xLeftOffset+(plotWidth-canvas.stringWidth(XLabel,font=labelFont))/2.0,
 			yTopOffset+plotHeight+yBottomOffset-25,font=labelFont,color=labelColor)
-	
+
 	if YLabel:
 		canvas.drawString(YLabel, xLeftOffset-65, yTopOffset+plotHeight- (plotHeight-canvas.stringWidth(YLabel,font=labelFont))/2.0,
 			font=labelFont,color=labelColor,angle=90)
@@ -841,7 +841,7 @@ def plotXY(canvas, dataX, dataY, rank=0, dataLabel=[], plotColor = pid.black, ax
 	if title:
 		canvas.drawString(title,xLeftOffset+(plotWidth-canvas.stringWidth(title,font=labelFont))/2.0,
 			20,font=labelFont,color=labelColor)
-	
+
 	if fitcurve:
 		import sys
 		sys.argv = [ "mod_python" ]
@@ -852,9 +852,9 @@ def plotXY(canvas, dataX, dataY, rank=0, dataLabel=[], plotColor = pid.black, ax
 		AA = dot(fitXX,swapaxes(fitXX,0,1))
 		BB = dot(fitXX,fitYY)
 		bb = la.linear_least_squares(AA,BB)[0]
-		
+
 		xc1 = xLeftOffset
-		yc1 = yTopOffset+plotHeight-(bb[0]+bb[1]*xLow-yLow)*yScale 
+		yc1 = yTopOffset+plotHeight-(bb[0]+bb[1]*xLow-yLow)*yScale
 		if yc1 > yTopOffset+plotHeight:
 			yc1 = yTopOffset+plotHeight
 			xc1 = (yLow-bb[0])/bb[1]
@@ -865,8 +865,8 @@ def plotXY(canvas, dataX, dataY, rank=0, dataLabel=[], plotColor = pid.black, ax
 			xc1=(xc1-xLow)*xScale+xLeftOffset
 		else:
 			pass
-		
-		xc2 = xLeftOffset + plotWidth 
+
+		xc2 = xLeftOffset + plotWidth
 		yc2 = yTopOffset+plotHeight-(bb[0]+bb[1]*xTop-yLow)*yScale
 		if yc2 > yTopOffset+plotHeight:
 			yc2 = yTopOffset+plotHeight
@@ -885,8 +885,8 @@ def plotXY(canvas, dataX, dataY, rank=0, dataLabel=[], plotColor = pid.black, ax
 		if lineSize == "thick":
 			canvas.drawLine(xc1 - bufferSpace,yc1 + bufferSpace+1,xc2,yc2+1,color=lineColor)
 			canvas.drawLine(xc1 - bufferSpace,yc1 + bufferSpace-1,xc2,yc2-1,color=lineColor)
-		
-		
+
+
 	if displayR:
 		labelFont=pid.Font(ttf="trebuc",size=canvas.size[0]/60,bold=0)
 		NNN = len(dataX)
@@ -901,7 +901,7 @@ def plotXY(canvas, dataX, dataY, rank=0, dataLabel=[], plotColor = pid.black, ax
 				ZValue = 0.5*log((1.0+corr)/(1.0-corr))
 				ZValue = ZValue*sqrt(NNN-3)
 				corrPValue = 2.0*(1.0 - reaper.normp(abs(ZValue)))
-				
+
 		NStr = "N = %d" % NNN
 		strLenN = canvas.stringWidth(NStr,font=labelFont)
 
@@ -924,24 +924,24 @@ def plotXY(canvas, dataX, dataY, rank=0, dataLabel=[], plotColor = pid.black, ax
 
 def plotXYSVG(drawSpace, dataX, dataY, rank=0, dataLabel=[], plotColor = "black", axesColor="black", labelColor="black", symbolColor="red", XLabel=None, YLabel=None, title=None, fitcurve=None, connectdot=1, displayR=None, loadingPlot = 0, offset= (80, 20, 40, 60), zoom = 1, specialCases=[], showLabel = 1):
 	'displayR : correlation scatter plot, loadings : loading plot'
-	
+
 	dataXRanked, dataYRanked = webqtlUtil.calRank(dataX, dataY, len(dataX))
-			
-	# Switching Ranked and Unranked X and Y values if a Spearman Rank Correlation			
+
+	# Switching Ranked and Unranked X and Y values if a Spearman Rank Correlation
 	if rank == 0:
 		dataXPrimary = dataX
 		dataYPrimary = dataY
 		dataXAlt = dataXRanked
-		dataYAlt = dataYRanked		
-	
-	else:	
+		dataYAlt = dataYRanked
+
+	else:
 		dataXPrimary = dataXRanked
 		dataYPrimary = dataYRanked
 		dataXAlt = dataX
 		dataYAlt = dataY
 
 
-	
+
 	xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
 	plotWidth = drawSpace.attributes['width'] - xLeftOffset - xRightOffset
 	plotHeight = drawSpace.attributes['height'] - yTopOffset - yBottomOffset
@@ -949,34 +949,34 @@ def plotXYSVG(drawSpace, dataX, dataY, rank=0, dataLabel=[], plotColor = "black"
 		return
 	if len(dataXPrimary) < 1 or  len(dataXPrimary) != len(dataYPrimary) or (dataLabel and len(dataXPrimary) != len(dataLabel)):
 		return
-	
+
 	max_X=max(dataXPrimary)
 	min_X=min(dataXPrimary)
 	max_Y=max(dataYPrimary)
 	min_Y=min(dataYPrimary)
-	
+
 	#for some reason I forgot why I need to do this
 	if loadingPlot:
 		min_X = min(-0.1,min_X)
 		max_X = max(0.1,max_X)
 		min_Y = min(-0.1,min_Y)
 		max_Y = max(0.1,max_Y)
-	
+
 	xLow, xTop, stepX=detScale(min_X,max_X)
 	yLow, yTop, stepY=detScale(min_Y,max_Y)
 	xScale = plotWidth/(xTop-xLow)
 	yScale = plotHeight/(yTop-yLow)
-	
+
 	#draw drawing region
 	r = svg.rect(xLeftOffset, yTopOffset, plotWidth,  plotHeight, 'none', axesColor, 1)
 	drawSpace.addElement(r)
-	
-	#calculate data points	
+
+	#calculate data points
 	data = map(lambda X, Y: (X, Y), dataXPrimary, dataYPrimary)
 	xCoord = map(lambda X, Y: ((X-xLow)*xScale + xLeftOffset, yTopOffset+plotHeight-(Y-yLow)*yScale), dataXPrimary, dataYPrimary)
 	labelFontF = "verdana"
 	labelFontS = 11
-	
+
 	if loadingPlot:
 		xZero = -xLow*xScale+xLeftOffset
 		yZero = yTopOffset+plotHeight+yLow*yScale
@@ -988,7 +988,7 @@ def plotXYSVG(drawSpace, dataX, dataY, rank=0, dataLabel=[], plotColor = "black"
 			#drawSpace.drawPolygon(xCoord,edgeColor=plotColor,closed=0)
 		else:
 			pass
-			
+
 	for i, item in enumerate(xCoord):
 		if dataLabel and dataLabel[i] in specialCases:
 			drawSpace.addElement(svg.rect(item[0]-3, item[1]-3, 6, 6, "none", "green", 0.5))
@@ -998,11 +998,11 @@ def plotXYSVG(drawSpace, dataX, dataY, rank=0, dataLabel=[], plotColor = "black"
 			drawSpace.addElement(svg.line(item[0]+5,item[1],item[0]-5,item[1],symbolColor,1))
 		if showLabel and dataLabel:
 			pass
-			drawSpace.addElement(svg.text(item[0], item[1]+14, dataLabel[i], labelFontS, 
+			drawSpace.addElement(svg.text(item[0], item[1]+14, dataLabel[i], labelFontS,
 				labelFontF, text_anchor="middle", style="stroke:blue;stroke-width:0.5;"))
 			#canvas.drawString(, item[0]- canvas.stringWidth(dataLabel[i],
 			#	font=labelFont)/2, item[1]+14, font=labelFont, color=pid.blue)
-	
+
 	#draw scale
 	#scaleFont=pid.Font(ttf="cour",size=14,bold=1)
 	x=xLow
@@ -1012,7 +1012,7 @@ def plotXYSVG(drawSpace, dataX, dataY, rank=0, dataLabel=[], plotColor = "black"
 		strX = cformat(d=x, rank=rank)
 		drawSpace.addElement(svg.text(xc,yTopOffset+plotHeight+20,strX,13, "courier", text_anchor="middle"))
 		x+= (xTop - xLow)/stepX
-		
+
 	y=yLow
 	for i in range(stepY+1):
 		yc=yTopOffset+plotHeight-(y-yLow)*yScale
@@ -1020,7 +1020,7 @@ def plotXYSVG(drawSpace, dataX, dataY, rank=0, dataLabel=[], plotColor = "black"
 		strY = cformat(d=y, rank=rank)
 		drawSpace.addElement(svg.text(xLeftOffset-10,yc+5,strY,13, "courier", text_anchor="end"))
 		y+= (yTop - yLow)/stepY
-			
+
 	#draw label
 	labelFontF = "verdana"
 	labelFontS = 17
@@ -1028,7 +1028,7 @@ def plotXYSVG(drawSpace, dataX, dataY, rank=0, dataLabel=[], plotColor = "black"
 		drawSpace.addElement(svg.text(xLeftOffset+plotWidth/2.0,
 			yTopOffset+plotHeight+yBottomOffset-10,XLabel,
 			labelFontS, labelFontF, text_anchor="middle"))
-	
+
 	if YLabel:
 		drawSpace.addElement(svg.text(xLeftOffset-50,
 			 yTopOffset+plotHeight/2,YLabel,
@@ -1046,9 +1046,9 @@ def plotXYSVG(drawSpace, dataX, dataY, rank=0, dataLabel=[], plotColor = "black"
 		AA = dot(fitXX,swapaxes(fitXX,0,1))
 		BB = dot(fitXX,fitYY)
 		bb = la.linear_least_squares(AA,BB)[0]
-		
+
 		xc1 = xLeftOffset
-		yc1 = yTopOffset+plotHeight-(bb[0]+bb[1]*xLow-yLow)*yScale 
+		yc1 = yTopOffset+plotHeight-(bb[0]+bb[1]*xLow-yLow)*yScale
 		if yc1 > yTopOffset+plotHeight:
 			yc1 = yTopOffset+plotHeight
 			xc1 = (yLow-bb[0])/bb[1]
@@ -1059,8 +1059,8 @@ def plotXYSVG(drawSpace, dataX, dataY, rank=0, dataLabel=[], plotColor = "black"
 			xc1=(xc1-xLow)*xScale+xLeftOffset
 		else:
 			pass
-		
-		xc2 = xLeftOffset + plotWidth 
+
+		xc2 = xLeftOffset + plotWidth
 		yc2 = yTopOffset+plotHeight-(bb[0]+bb[1]*xTop-yLow)*yScale
 		if yc2 > yTopOffset+plotHeight:
 			yc2 = yTopOffset+plotHeight
@@ -1074,8 +1074,8 @@ def plotXYSVG(drawSpace, dataX, dataY, rank=0, dataLabel=[], plotColor = "black"
 			pass
 
 		drawSpace.addElement(svg.line(xc1,yc1,xc2,yc2,"green", 1))
-	
-	if displayR:		
+
+	if displayR:
 		labelFontF = "trebuc"
 		labelFontS = 14
 		NNN = len(dataX)
@@ -1091,24 +1091,24 @@ def plotXYSVG(drawSpace, dataX, dataY, rank=0, dataLabel=[], plotColor = "black"
 				ZValue = 0.5*log((1.0+corr)/(1.0-corr))
 				ZValue = ZValue*sqrt(NNN-3)
 				corrPValue = 2.0*(1.0 - reaper.normp(abs(ZValue)))
-				
+
 		NStr = "N of Cases=%d" % NNN
-		
+
 		if rank == 1:
 			corrStr = "Spearman's r=%1.3f P=%3.2E" % (corr, corrPValue)
 		else:
 			corrStr = "Pearson's r=%1.3f P=%3.2E" % (corr, corrPValue)
-		
+
 		drawSpace.addElement(svg.text(xLeftOffset,yTopOffset-10,NStr,
 			labelFontS, labelFontF, text_anchor="start"))
 		drawSpace.addElement(svg.text(xLeftOffset+plotWidth,yTopOffset-25,corrStr,
 			labelFontS, labelFontF, text_anchor="end"))
-	"""	
+	"""
 	"""
 	return
 
 
-# This function determines the scale of the plot	
+# This function determines the scale of the plot
 def detScaleOld(min,max):
 	if min>=max:
 		return None
@@ -1205,8 +1205,8 @@ def colorSpectrumOld(n):
 			colors.append(pid.Color(red,green,blue))
 			i += 1
 		return colors
-		
-		
+
+
 
 
 def bluefunc(x):
@@ -1273,7 +1273,7 @@ def BWSpectrum(n=100):
 		return [pid.Color(0,0,0),pid.Color(1,1,1)]
 	elif n == 3:
 		return [pid.Color(0,0,0),pid.Color(0.5,0.5,0.5),pid.Color(1,1,1)]
-	
+
 	step = 1.0/n
 	x = 0.0
 	out = []
diff --git a/wqflask/wqflask/show_trait/show_trait_page.py b/wqflask/wqflask/show_trait/show_trait_page.py
index 82511228..03f8b9b3 100644
--- a/wqflask/wqflask/show_trait/show_trait_page.py
+++ b/wqflask/wqflask/show_trait/show_trait_page.py
@@ -42,9 +42,9 @@ class ShowTraitPage(DataEditingPage):
 
 		if not self.openMysql():
 			return
-			
+
 		TD_LR = HT.TD(height=200,width="100%",bgColor='#eeeeee')
-		
+
 		if traitInfos:
 			database,ProbeSetID,CellID = traitInfos
 		else:
@@ -61,7 +61,7 @@ class ShowTraitPage(DataEditingPage):
 
 		if thisTrait.db.type == "ProbeSet":
 
-			self.cursor.execute('''SELECT Id, Name, FullName, confidentiality, AuthorisedUsers 
+			self.cursor.execute('''SELECT Id, Name, FullName, confidentiality, AuthorisedUsers
 						FROM ProbeSetFreeze WHERE Name = "%s"''' %  database)
 
 			indId, indName, indFullName, confidential, AuthorisedUsers = self.cursor.fetchall()[0]
@@ -86,7 +86,7 @@ class ShowTraitPage(DataEditingPage):
 					at this time, please go back and select other database." % indFullName]
 					self.error(heading=heading,detail=detail,error="Confidential Database")
 					return
-					
+
 		user_ip = fd.remote_ip
 		query = "SELECT count(id) FROM AccessLog WHERE ip_address = %s and \
 				UNIX_TIMESTAMP()-UNIX_TIMESTAMP(accesstime)<86400"
@@ -105,26 +105,26 @@ class ShowTraitPage(DataEditingPage):
 				pass
 		else:
 			pass
-		
+
 		if thisTrait.db.type != 'ProbeSet' and thisTrait.cellid:
 				heading = "Retrieve Data"
 				detail = ['The Record you requested doesn\'t exist!']
 				self.error(heading=heading,detail=detail)
 				return
 
-		#XZ: Aug 23, 2010: I commented out this block because this feature is not used anymore		
+		#XZ: Aug 23, 2010: I commented out this block because this feature is not used anymore
 		# check if animal information are available
 		"""
 		self.cursor.execute('''
-						SELECT 
-							SampleXRef.ProbeFreezeId 
-						FROM 
-							SampleXRef, ProbeSetFreeze 
-						WHERE 
+						SELECT
+							SampleXRef.ProbeFreezeId
+						FROM
+							SampleXRef, ProbeSetFreeze
+						WHERE
 							SampleXRef.ProbeFreezeId = ProbeSetFreeze.ProbeFreezeId AND
 							ProbeSetFreeze.Name = "%s"
-					 ''' % thisTrait.db.name)
-		
+						''' % thisTrait.db.name)
+
 		sampleId = self.cursor.fetchall()
 		if sampleId:
 			thisTrait.strainInfo = 1
@@ -136,12 +136,12 @@ class ShowTraitPage(DataEditingPage):
 		fd.identification = '%s : %s'%(thisTrait.db.shortname,ProbeSetID)
 		thisTrait.returnURL = webqtlConfig.CGIDIR + webqtlConfig.SCRIPTFILE + '?FormID=showDatabase&database=%s\
 			&ProbeSetID=%s&RISet=%s&parentsf1=on' %(database,ProbeSetID,fd.RISet)
-		
+
 		if CellID:
 			fd.identification = '%s/%s'%(fd.identification, CellID)
 			thisTrait.returnURL = '%s&CellID=%s' % (thisTrait.returnURL, CellID)
-		
-		#retrieve trait information		
+
+		#retrieve trait information
 		try:
 			thisTrait.retrieveInfo()
 			thisTrait.retrieveData()
@@ -153,18 +153,16 @@ class ShowTraitPage(DataEditingPage):
 			detail = ["The information you requested is not avaiable at this time."]
 			self.error(heading=heading,detail=detail)
 			return
-			
+
 		##read genotype file
 		fd.RISet = thisTrait.riset
 		fd.readGenotype()
-		
+
 		if webqtlUtil.ListNotNull(map(lambda x:x.var, thisTrait.data.values())):
 			fd.displayVariance = 1
 			fd.varianceDispName = 'SE'
 			fd.formID = 'varianceChoice'
-		
+
 		self.dict['body']= thisTrait
 		DataEditingPage.__init__(self, fd, thisTrait)
 		self.dict['title'] = '%s: Display Trait' % fd.identification
-
-
diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py
index 3e1c2729..611cc05b 100644
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -5,6 +5,7 @@ from wqflask import app
 from flask import render_template, request
 
 from wqflask import search_results
+from wqflask.show_trait import show_trait_page
 
 from pprint import pformat as pf
 
@@ -20,4 +21,5 @@ def search():
 
 @app.route("/showDatabaseBXD")
 def showDatabaseBXD():
+    template_vars = show_trait_page.ShowTraitPage(request.args)
     return render_template("trait_data_and_analysis.html")