aboutsummaryrefslogtreecommitdiff
path: root/wqflask
diff options
context:
space:
mode:
Diffstat (limited to 'wqflask')
-rw-r--r--wqflask/wqflask/marker_regression/marker_regression.py23
-rw-r--r--wqflask/wqflask/marker_regression/marker_regression_gn1.py51
-rw-r--r--wqflask/wqflask/templates/marker_regression_gn1.html6
3 files changed, 43 insertions, 37 deletions
diff --git a/wqflask/wqflask/marker_regression/marker_regression.py b/wqflask/wqflask/marker_regression/marker_regression.py
index 85404f58..6ce35a6c 100644
--- a/wqflask/wqflask/marker_regression/marker_regression.py
+++ b/wqflask/wqflask/marker_regression/marker_regression.py
@@ -337,9 +337,6 @@ class MarkerRegression(object):
count, p_values = self.parse_rqtl_output(plink_output_filename)
def geno_to_rqtl_function(self): # TODO: Need to figure out why some genofiles have the wrong format and don't convert properly
- print("Adding some custom helper functions to the R environment")
-
-
ro.r("""
trim <- function( x ) { gsub("(^[[:space:]]+|[[:space:]]+$)", "", x) }
@@ -371,8 +368,6 @@ class MarkerRegression(object):
""" % (self.dataset.group.name + ".geno"))
def run_rqtl_geno(self):
- print("Calling R/qtl")
-
self.geno_to_rqtl_function()
## Get pointers to some common R functions
@@ -397,7 +392,7 @@ class MarkerRegression(object):
genofilelocation = webqtlConfig.HTMLPATH + "genotypes/" + self.dataset.group.name + ".geno"
crossfilelocation = webqtlConfig.HTMLPATH + "genotypes/" + self.dataset.group.name + ".cross"
- print("Conversion of geno to cross at location:", genofilelocation, " to ", crossfilelocation)
+ #print("Conversion of geno to cross at location:", genofilelocation, " to ", crossfilelocation)
cross_object = GENOtoCSVR(genofilelocation, crossfilelocation) # TODO: Add the SEX if that is available
@@ -419,7 +414,7 @@ class MarkerRegression(object):
else:
print("No covariates"); result_data_frame = scantwo(cross_object, pheno = "the_pheno", model=self.model, method=self.method, n_cluster = 16)
- print("Pair scan results:", result_data_frame)
+ #print("Pair scan results:", result_data_frame)
self.pair_scan_filename = webqtlUtil.genRandStr("scantwo_") + ".png"
png(file=webqtlConfig.TMPDIR+self.pair_scan_filename)
@@ -454,13 +449,13 @@ class MarkerRegression(object):
ro.r('genotypes <- pull.geno(the_cross)') # Get the genotype matrix
userinputS = self.control.replace(" ", "").split(",") # TODO: sanitize user input, Never Ever trust a user
covariate_names = ', '.join('"{0}"'.format(w) for w in userinputS)
- print("Marker names of selected covariates:", covariate_names)
+ #print("Marker names of selected covariates:", covariate_names)
ro.r('covnames <- c(' + covariate_names + ')')
ro.r('covInGeno <- which(covnames %in% colnames(genotypes))')
ro.r('covnames <- covnames[covInGeno]')
ro.r("cat('covnames (purged): ', covnames,'\n')")
ro.r('covariates <- genotypes[,covnames]') # Get the covariate matrix by using the marker name as index to the genotype file
- print("R/qtl matrix of covariates:", ro.r["covariates"])
+ #print("R/qtl matrix of covariates:", ro.r["covariates"])
return ro.r["covariates"]
def sanitize_rqtl_phenotype(self):
@@ -484,7 +479,7 @@ class MarkerRegression(object):
result = result[1]
output = [tuple([result[j][i] for j in range(result.ncol)]) for i in range(result.nrow)]
- print("R/qtl scantwo output:", output)
+ #print("R/qtl scantwo output:", output)
for i, line in enumerate(result.iter_row()):
marker = {}
@@ -494,7 +489,7 @@ class MarkerRegression(object):
marker['chr2'] = int(output[i][2])
pair_scan_results.append(marker)
- print("pair_scan_results:", pair_scan_results)
+ #print("pair_scan_results:", pair_scan_results)
return pair_scan_results
@@ -502,7 +497,7 @@ class MarkerRegression(object):
qtl_results = []
output = [tuple([result[j][i] for j in range(result.ncol)]) for i in range(result.nrow)]
- print("R/qtl scanone output:", output)
+ #print("R/qtl scanone output:", output)
for i, line in enumerate(result.iter_row()):
marker = {}
@@ -517,7 +512,7 @@ class MarkerRegression(object):
def process_rqtl_perm_results(self, results):
perm_vals = []
for line in str(results).split("\n")[1:(int(self.num_perm)+1)]:
- print("R/qtl permutation line:", line.split())
+ #print("R/qtl permutation line:", line.split())
perm_vals.append(float(line.split()[1]))
self.suggestive = np.percentile(np.array(perm_vals), 67)
@@ -532,7 +527,7 @@ class MarkerRegression(object):
self.gen_pheno_txt_file_plink(pheno_filename = plink_output_filename)
plink_command = PLINK_COMMAND + ' --noweb --bed %s/%s.bed --bim %s/%s.bim --fam %s/%s.fam --no-fid --no-parents --no-sex --no-pheno --pheno %s%s.txt --pheno-name %s --maf %s --missing-phenotype -9999 --out %s%s --assoc ' % (PLINK_PATH, self.dataset.group.name, PLINK_PATH, self.dataset.group.name, PLINK_PATH, self.dataset.group.name, webqtlConfig.TMPDIR, plink_output_filename, self.this_trait.name, self.maf, webqtlConfig.TMPDIR, plink_output_filename)
- print("plink_command:", plink_command)
+ #print("plink_command:", plink_command)
os.system(plink_command)
diff --git a/wqflask/wqflask/marker_regression/marker_regression_gn1.py b/wqflask/wqflask/marker_regression/marker_regression_gn1.py
index e3466bef..19d521a4 100644
--- a/wqflask/wqflask/marker_regression/marker_regression_gn1.py
+++ b/wqflask/wqflask/marker_regression/marker_regression_gn1.py
@@ -485,7 +485,7 @@ class MarkerRegression(object):
################################################################
# GeneCollection goes here
################################################################
- if self.plotScale == 'physic':
+ if self.plotScale == 'physic' and self.selectedChr != -1:
#StartMb or EndMb
if self.startMb < 0 or self.endMb < 0:
self.startMb = 0
@@ -594,7 +594,7 @@ class MarkerRegression(object):
if self.traitList and self.traitList[0].dataset and self.traitList[0].dataset.type == 'Geno':
btminfo.append(HT.BR(), 'Mapping using genotype data as a trait will result in infinity LRS at one locus. In order to display the result properly, all LRSs higher than 100 are capped at 100.')
- if self.permChecked and not self.multipleInterval and 0<self.nperm:
+ if self.permChecked and not self.multipleInterval and 0 < self.nperm:
TD_LR = HT.TD(HT.Blockquote(gifmap, showLocusForm, HT.P(), btminfo, HT.P(), perm_histogram, HT.P(), perm_text_file), bgColor='#eeeeee', height = 200)
#TD_LR = HT.TD(HT.Blockquote(topTable), HT.Blockquote(gifmap, showLocusForm, HT.P(), btminfo, HT.P(), perm_histogram, HT.P(), perm_text_file), bgColor='#eeeeee', height = 200)
else:
@@ -1129,7 +1129,7 @@ class MarkerRegression(object):
if self.selectedChr == -1:
string1 = 'Mapping for Dataset: %s, mapping on All Chromosomes' % self.dataset.group.name
else:
- string1 = 'Mapping for Dataset: %s, mapping on Chromosome %s' % (self.dataset.group.name, self.selectedChr)
+ string1 = 'Mapping for Dataset: %s, mapping on Chromosome %s' % (self.dataset.group.name, self.ChrList[self.selectedChr][0])
if self.controlLocus:
string2 = 'Using %s as control' % self.controlLocus
else:
@@ -1640,8 +1640,8 @@ class MarkerRegression(object):
#draw the gray text
chrFont = pid.Font(ttf="verdana", size=26*zoom, bold=1)
traitFont = pid.Font(ttf="verdana", size=14, bold=0)
- chrX = xLeftOffset + plotWidth - 2 - canvas.stringWidth("Chr %s" % self.selectedChr, font=chrFont)
- canvas.drawString("Chr %s" % self.selectedChr, chrX, ensemblPaddingTop-5, font=chrFont, color=pid.gray)
+ chrX = xLeftOffset + plotWidth - 2 - canvas.stringWidth("Chr %s" % self.ChrList[self.selectedChr][0], font=chrFont)
+ canvas.drawString("Chr %s" % self.ChrList[self.selectedChr][0], chrX, ensemblPaddingTop-5, font=chrFont, color=pid.gray)
traitX = chrX - 28 - canvas.stringWidth("database", font=traitFont)
# end of drawBrowserClickableRegions
else:
@@ -1736,7 +1736,9 @@ class MarkerRegression(object):
ChrAInfo = []
preLpos = -1
distinctCount = 0.0
- if len(self.genotype) > 1:
+
+ #if len(self.genotype) > 1:
+ if self.selectedChr == -1: #ZS: If viewing full genome/all chromosomes
for i, _chr in enumerate(self.genotype):
thisChr = []
Locus0CM = _chr[0].cM
@@ -1759,15 +1761,16 @@ class MarkerRegression(object):
ChrAInfo.append(thisChr)
else:
for i, _chr in enumerate(self.genotype):
- thisChr = []
- Locus0CM = _chr[0].cM
- for _locus in _chr:
- if _locus.name != ' - ':
- if _locus.cM != preLpos:
- distinctCount += 1
- preLpos = _locus.cM
- thisChr.append([_locus.name, _locus.cM-Locus0CM])
- ChrAInfo.append(thisChr)
+ if _chr.name == self.ChrList[self.selectedChr][0]:
+ thisChr = []
+ Locus0CM = _chr[0].cM
+ for _locus in _chr:
+ if _locus.name != ' - ':
+ if _locus.cM != preLpos:
+ distinctCount += 1
+ preLpos = _locus.cM
+ thisChr.append([_locus.name, _locus.cM-Locus0CM])
+ ChrAInfo.append(thisChr)
stepA = (plotWidth+0.0)/distinctCount
@@ -1776,8 +1779,8 @@ class MarkerRegression(object):
offsetA = -stepA
lineColor = pid.lightblue
startPosX = xLeftOffset
+
for j, ChrInfo in enumerate(ChrAInfo):
- if ChrInfo == self.selectedChr:
preLpos = -1
for i, item in enumerate(ChrInfo):
Lname,Lpos = item
@@ -1809,7 +1812,7 @@ class MarkerRegression(object):
xLeftOffset+offsetA,yZero+40+Zorder*(LRectWidth+3)+LRectWidth)
HREF="/show_trait?trait_id=%s&dataset=%s" % (Lname, self.dataset.group.name+"Geno")
#HREF="javascript:showDatabase3('%s','%s','%s','');" % (showLocusForm,fd.RISet+"Geno", Lname)
- Areas=HT.Area(shape='rect',coords=COORDS,href=HREF, title="Locus : " + Lname)
+ Areas=HT.Area(shape='rect', coords=COORDS, href=HREF, target="_blank", title="Locus : " + Lname)
gifmap.areas.append(Areas)
##piddle bug
if j == 0:
@@ -1923,7 +1926,8 @@ class MarkerRegression(object):
if self.multipleInterval:
lrsEdgeWidth = 1
else:
- additiveMax = max(map(lambda X : abs(X['additive']), self.qtlresults))
+ if self.additiveChecked:
+ additiveMax = max(map(lambda X : abs(X['additive']), self.qtlresults))
#if INTERCROSS:
# dominanceMax = max(map(lambda X : abs(X.dominance), self.qtlresults[0]))
#else:
@@ -1957,8 +1961,13 @@ class MarkerRegression(object):
#startPosX += (self.ChrLengthDistList[j]+self.GraphInterval)*plotXScale
- #for j, _chr in enumerate(self.genotype):
- if self.selectedChr == -1 or qtlresult['chr'] == self.selectedChr:
+ #for j, _chr in enumerate(self.genotype):
+ #ZS: This is beause the chromosome value stored in qtlresult['chr'] can be (for example) either X or 20 depending upon the mapping method/scale used
+ if self.plotScale == "physic":
+ this_chr = str(self.ChrList[self.selectedChr][0])
+ else:
+ this_chr = str(self.ChrList[self.selectedChr][1]+1)
+ if self.selectedChr == -1 or str(qtlresult['chr']) == this_chr:
#LRSCoordXY = []
#AdditiveCoordXY = []
#DominanceCoordXY = []
@@ -2127,7 +2136,7 @@ class MarkerRegression(object):
canvas.drawRect(startPix, yTopOffset, min(startPix+spacingAmt, xLeftOffset+plotWidth), \
yBottom, edgeColor=theBackColor, fillColor=theBackColor)
- drawRegionDistance = self.ChrLengthDistList[self.selectedChr]
+ drawRegionDistance = self.ChrLengthDistList[self.ChrList[self.selectedChr][1]]
self.ChrLengthDistList = [drawRegionDistance]
if self.plotScale == 'physic':
plotXScale = plotWidth / (endMb-startMb)
diff --git a/wqflask/wqflask/templates/marker_regression_gn1.html b/wqflask/wqflask/templates/marker_regression_gn1.html
index 550173fc..b2679fbf 100644
--- a/wqflask/wqflask/templates/marker_regression_gn1.html
+++ b/wqflask/wqflask/templates/marker_regression_gn1.html
@@ -39,7 +39,7 @@
<b>Location:</b> Chr {{ this_trait.chr }} @ {{ this_trait.mb }} Mb
{% endif %}
</div>
- <div id="gn1_map_options" class="col-xs-5" style="border:2px solid black; padding: 10px; margin: 10px;">
+ <div id="gn1_map_options" class="col-xs-5" style="outline: 3px double #AAAAAA; padding: 10px; margin: 10px;">
<div class="col-xs-8" style="padding: 0px;">
<table>
<tr>
@@ -56,7 +56,7 @@
<tr>
<td><b>View:&nbsp;</b></td>
<td style="padding: 5px;">
- <input type="text" name="startMb" size="10" value="{{ startMb }}"> to <input type="text" name="endMb" size="10" value="{{ endMb }}">
+ <input type="text" name="startMb" size="10" value="{% if startMb != -1 %}{{ startMb }}{% endif %}"> to <input type="text" name="endMb" size="10" value="{% if endMb != -1 %}{{ endMb }}{% endif %}">
</td>
</tr>
<tr>
@@ -68,7 +68,9 @@
</table>
</div>
<div class="col-xs-4" style="padding: 0px;">
+ {% if mapping_method == "reaper" %}
<input type="checkbox" name="additiveCheck" class="checkbox" style="display: inline; margin-top: 0px;" {% if additiveChecked|upper == "ON" %}value="ON" checked{% endif %}> <span style="font-size: 12px;">Allele Effects<br>
+ {% endif %}
<input type="checkbox" name="showGenes" class="checkbox" style="display: inline; margin-top: 0px;" {% if geneChecked|upper == "ON" %}value="ON" checked{% endif %}> <span style="font-size: 12px;">Gene Track </span> <span style="color:red;">*</span><br>
<input type="checkbox" name="viewLegend" class="checkbox" style="display: inline; margin-top: 0px;" {% if legendChecked|upper == "ON" %}value="ON" checked{% endif %}> <span style="font-size: 12px;">Legend </span><br>
<input type="checkbox" name="haplotypeAnalystCheck" class="checkbox" style="display: inline; margin-top: 0px;" {% if haplotypeAnalystChecked|upper == "ON" %}value="ON" checked{% endif %}> <span style="font-size: 12px;">Haplotype Analyst </span> <span style="color:red;">*</span>