aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--wqflask/wqflask/marker_regression/marker_regression.py30
-rw-r--r--wqflask/wqflask/marker_regression/marker_regression_gn1.py116
-rw-r--r--wqflask/wqflask/templates/marker_regression_gn1.html42
-rw-r--r--wqflask/wqflask/views.py1
4 files changed, 123 insertions, 66 deletions
diff --git a/wqflask/wqflask/marker_regression/marker_regression.py b/wqflask/wqflask/marker_regression/marker_regression.py
index 112dcd5c..86fced39 100644
--- a/wqflask/wqflask/marker_regression/marker_regression.py
+++ b/wqflask/wqflask/marker_regression/marker_regression.py
@@ -103,10 +103,13 @@ class MarkerRegression(object):
self.permCheck = False
self.num_perm = int(start_vars['num_perm'])
+ self.LRSCheck = start_vars['LRSCheck']
+
if "showGenes" in start_vars:
self.showGenes = start_vars['showGenes']
else:
self.showGenes = False
+
if "viewLegend" in start_vars:
self.viewLegend = start_vars['viewLegend']
else:
@@ -120,6 +123,7 @@ class MarkerRegression(object):
except:
self.num_perm = 0
+ self.LRSCheck = self.score_type
self.permCheck = "ON"
self.showGenes = "ON"
self.viewLegend = "ON"
@@ -660,18 +664,18 @@ class MarkerRegression(object):
if samples[i] in self.dataset.group.samplelist:
trimmed_samples.append(samples[i])
trimmed_values.append(values[i])
-
- self.lrs_array = genotype.permutation(strains = trimmed_samples,
- trait = trimmed_values,
- nperm= self.num_perm)
-
- self.suggestive = self.lrs_array[int(self.num_perm*0.37-1)]
- self.significant = self.lrs_array[int(self.num_perm*0.95-1)]
+
+ if self.num_perm < 100:
+ self.suggestive = 0
+ self.significant = 0
+ else:
+ self.perm_output = genotype.permutation(strains = trimmed_samples, trait = trimmed_values, nperm=self.num_perm)
+ self.suggestive = self.perm_output[int(self.num_perm*0.37-1)]
+ self.significant = self.perm_output[int(self.num_perm*0.95-1)]
+
self.json_data['suggestive'] = self.suggestive
self.json_data['significant'] = self.significant
- #print("samples:", trimmed_samples)
-
if self.control_marker != "" and self.do_control == "true":
reaper_results = genotype.regression(strains = trimmed_samples,
trait = trimmed_values,
@@ -706,14 +710,6 @@ class MarkerRegression(object):
self.bootstrap_results = genotype.bootstrap(strains = trimmed_samples,
trait = trimmed_values,
nboot = self.num_bootstrap)
-
- if self.num_perm < 100:
- self.suggestive = 0
- self.significant = 0
- else:
- self.perm_output = genotype.permutation(strains = trimmed_samples, trait = trimmed_values, nperm=self.num_perm)
- self.suggestive = self.perm_output[int(self.num_perm*0.37-1)]
- self.significant = self.perm_output[int(self.num_perm*0.95-1)]
self.json_data['chr'] = []
self.json_data['pos'] = []
diff --git a/wqflask/wqflask/marker_regression/marker_regression_gn1.py b/wqflask/wqflask/marker_regression/marker_regression_gn1.py
index 692e381b..45d98554 100644
--- a/wqflask/wqflask/marker_regression/marker_regression_gn1.py
+++ b/wqflask/wqflask/marker_regression/marker_regression_gn1.py
@@ -293,7 +293,7 @@ class MarkerRegression(object):
self.graphHeight = self.GRAPH_DEFAULT_HEIGHT
self.manhattan_plot = start_vars['manhattan_plot']
self.dominanceChecked = False
- self.LRS_LOD = start_vars['score_type']
+ self.LRS_LOD = start_vars['LRSCheck']
self.cutoff = start_vars['cutoff']
self.intervalAnalystChecked = False
if 'additiveCheck' in start_vars.keys():
@@ -1108,7 +1108,6 @@ class MarkerRegression(object):
if zoom == 2:
fontZoom = 1.5
-
labelFont=pid.Font(ttf="trebuc",size=12*fontZoom, bold=1)
startPosY = 15
stepPosY = 12*fontZoom
@@ -1146,10 +1145,8 @@ class MarkerRegression(object):
lod = 1
if self.LRS_LOD == 'LOD':
lod = self.LODFACTOR
- canvas.drawString('Significant %s = %2.2f' % (self.LRS_LOD, self.significant/lod),xLeftOffset+42,startPosY +5,font=labelFont,color=pid.black)
- canvas.drawString('Suggestive %s = %2.2f' % (self.LRS_LOD, self.suggestive/lod),xLeftOffset+42,startPosY + 5 +stepPosY,font=labelFont,color=pid.black)
-
-
+ canvas.drawString('Significant %s = %2.2f' % (self.LRS_LOD, self.significant),xLeftOffset+42,startPosY +5,font=labelFont,color=pid.black)
+ canvas.drawString('Suggestive %s = %2.2f' % (self.LRS_LOD, self.suggestive),xLeftOffset+42,startPosY + 5 +stepPosY,font=labelFont,color=pid.black)
labelFont=pid.Font(ttf="verdana",size=12*fontZoom)
labelColor = pid.black
@@ -1865,46 +1862,66 @@ class MarkerRegression(object):
#draw the LRS scale
#We first determine whether or not we are using a sliding scale.
- #If so, we need to compute the maximum LRS value to determine where the max y-value should be, and call this LRSMax.
- #LRSTop is then defined to be above the LRSMax by enough to add one additional LRSScale increment.
- #if we are using a set-scale, then we set LRSTop to be the user's value, and LRSMax doesn't matter.
+ #If so, we need to compute the maximum LRS value to determine where the max y-value should be, and call this LRS_LOD_Max.
+ #LRSTop is then defined to be above the LRS_LOD_Max by enough to add one additional LRSScale increment.
+ #if we are using a set-scale, then we set LRSTop to be the user's value, and LRS_LOD_Max doesn't matter.
#ZS: I'm not sure what this if statement is supposed to do. It appears to work correctly for both LOD and LRS if I just set lodm to 1.0
- #if self.LRS_LOD == 'LRS':
- # lodm = self.LODFACTOR
- #else:
- # lodm = 1.0
- lodm = 1.0
+ # if self.LRS_LOD == 'LRS':
+ # lodm = self.LODFACTOR
+ # else:
+ # lodm = 1.0
+ #ZS: This is a mess, but I don't know a better way to account for different mapping methods returning results in different formats + the option to change between LRS and LOD
if self.lrsMax <= 0: #sliding scale
- if self.LRS_LOD == "LRS" and "lrs_value" in self.qtlresults[0]:
- LRSMax = max([result['lrs_value'] for result in self.qtlresults])
- #LRSMax = max(map(max, self.qtlresults)).lrs_value
- else:
- LRSMax = max([result['lod_score'] for result in self.qtlresults])
- #LRSMax = max(map(max, self.qtlresults)).lod_score
- #genotype trait will give infinite LRS
- LRSMax = min(LRSMax, webqtlConfig.MAXLRS)
+ if "lrs_value" in self.qtlresults[0]:
+ LRS_LOD_Max = max([result['lrs_value'] for result in self.qtlresults])
+ if self.LRS_LOD == "LOD":
+ LRS_LOD_Max = LRS_LOD_Max / self.LODFACTOR
+ if self.permChecked and self.nperm > 0 and not self.multipleInterval:
+ self.significant = min(self.significant / self.LODFACTOR, webqtlConfig.MAXLRS)
+ self.suggestive = min(self.suggestive / self.LODFACTOR, webqtlConfig.MAXLRS)
+ else:
+ if self.permChecked and self.nperm > 0 and not self.multipleInterval:
+ self.significant = min(self.significant, webqtlConfig.MAXLRS)
+ self.suggestive = min(self.suggestive, webqtlConfig.MAXLRS)
+ else:
+ pass
+ else:
+ LRS_LOD_Max = max([result['lod_score'] for result in self.qtlresults])
+ if self.LRS_LOD == "LRS":
+ LRS_LOD_Max = LRS_LOD_Max * self.LODFACTOR
+ if self.permChecked and self.nperm > 0 and not self.multipleInterval:
+ self.significant = min(self.significant * self.LODFACTOR, webqtlConfig.MAXLRS)
+ self.suggestive = min(self.suggestive * self.LODFACTOR, webqtlConfig.MAXLRS)
+ else:
+ if self.permChecked and self.nperm > 0 and not self.multipleInterval:
+ self.significant = min(self.significant, webqtlConfig.MAXLRS)
+ self.suggestive = min(self.suggestive, webqtlConfig.MAXLRS)
+ else:
+ pass
+
if self.permChecked and self.nperm > 0 and not self.multipleInterval:
- self.significant = min(self.significant, webqtlConfig.MAXLRS)
- self.suggestive = min(self.suggestive, webqtlConfig.MAXLRS)
- LRSMax = max(self.significant, LRSMax)
+ LRS_LOD_Max = max(self.significant, LRS_LOD_Max)
+
+ #genotype trait will give infinite LRS
+ LRS_LOD_Max = min(LRS_LOD_Max, webqtlConfig.MAXLRS)
else:
- LRSMax = self.lrsMax*lodm
+ LRS_LOD_Max = self.lrsMax
- if LRSMax/lodm > 100:
+ if LRS_LOD_Max > 100:
LRSScale = 20.0
- elif LRSMax/lodm > 20:
+ elif LRS_LOD_Max > 20:
LRSScale = 5.0
- elif LRSMax/lodm > 7.5:
+ elif LRS_LOD_Max > 7.5:
LRSScale = 2.5
else:
LRSScale = 1.0
- LRSAxisList = Plot.frange(LRSScale, LRSMax/lodm, LRSScale)
+ LRSAxisList = Plot.frange(LRSScale, LRS_LOD_Max, LRSScale)
#make sure the user's value appears on the y-axis
- #update by NL 6-21-2011: round the LOD value to 100 when LRSMax is equal to 460
- LRSAxisList.append(round(LRSMax/lodm))
+ #update by NL 6-21-2011: round the LOD value to 100 when LRS_LOD_Max is equal to 460
+ LRSAxisList.append(round(LRS_LOD_Max))
#draw the "LRS" or "LOD" string to the left of the axis
LRSScaleFont=pid.Font(ttf="verdana", size=16*zoom, bold=0)
@@ -1915,17 +1932,17 @@ class MarkerRegression(object):
yZero - 150 - 300*(zoom - 1), font=LRSLODFont, color=pid.black, angle=90)
for item in LRSAxisList:
- if LRSMax == 0.0:
- LRSMax = 0.000001
- yLRS = yZero - (item*lodm/LRSMax) * LRSHeightThresh
+ if LRS_LOD_Max == 0.0:
+ LRS_LOD_Max = 0.000001
+ yLRS = yZero - (item/LRS_LOD_Max) * LRSHeightThresh
canvas.drawLine(xLeftOffset, yLRS, xLeftOffset - 4, yLRS, color=self.LRS_COLOR, width=1*zoom)
scaleStr = "%2.1f" % item
#Draw the LRS/LOD Y axis label
canvas.drawString(scaleStr, xLeftOffset-4-canvas.stringWidth(scaleStr, font=LRSScaleFont)-5, yLRS+3, font=LRSScaleFont, color=self.LRS_COLOR)
if self.permChecked and self.nperm > 0 and not self.multipleInterval:
- significantY = yZero - self.significant*LRSHeightThresh/LRSMax
- suggestiveY = yZero - self.suggestive*LRSHeightThresh/LRSMax
+ significantY = yZero - self.significant*LRSHeightThresh/LRS_LOD_Max
+ suggestiveY = yZero - self.suggestive*LRSHeightThresh/LRS_LOD_Max
startPosX = xLeftOffset
#"Significant" and "Suggestive" Drawing Routine
@@ -2025,21 +2042,30 @@ class MarkerRegression(object):
# updated by NL 06-18-2011:
# fix the over limit LRS graph issue since genotype trait may give infinite LRS;
# for any lrs is over than 460(LRS max in this system), it will be reset to 460
- if self.LRS_LOD == "LRS":
- if qtlresult['lrs_value'] > 460 or qtlresult['lrs_value']=='inf':
- Yc = yZero - webqtlConfig.MAXLRS*LRSHeightThresh/LRSMax
+ if 'lrs_value' in qtlresult:
+ if self.LRS_LOD == "LOD":
+ if qtlresult['lrs_value'] > 460 or qtlresult['lrs_value']=='inf':
+ Yc = yZero - webqtlConfig.MAXLRS*LRSHeightThresh/(LRS_LOD_Max*self.LODFACTOR)
+ else:
+ Yc = yZero - qtlresult['lrs_value']*LRSHeightThresh/(LRS_LOD_Max*self.LODFACTOR)
else:
- Yc = yZero - qtlresult['lrs_value']*LRSHeightThresh/LRSMax
+ if qtlresult['lrs_value'] > 460 or qtlresult['lrs_value']=='inf':
+ Yc = yZero - webqtlConfig.MAXLRS*LRSHeightThresh/LRS_LOD_Max
+ else:
+ Yc = yZero - qtlresult['lrs_value']*LRSHeightThresh/LRS_LOD_Max
else:
if qtlresult['lod_score'] > 100 or qtlresult['lod_score']=='inf':
- Yc = yZero - webqtlConfig.MAXLRS*LRSHeightThresh/LRSMax
+ Yc = yZero - webqtlConfig.MAXLRS*LRSHeightThresh/LRS_LOD_Max
else:
- Yc = yZero - qtlresult['lod_score']*LRSHeightThresh/LRSMax
+ if self.LRS_LOD == "LRS":
+ Yc = yZero - qtlresult['lod_score']*self.LODFACTOR*LRSHeightThresh/LRS_LOD_Max
+ else:
+ Yc = yZero - qtlresult['lod_score']*LRSHeightThresh/LRS_LOD_Max
#if qtlresult['lrs_value'] > 460 or qtlresult['lrs_value']=='inf':
#if self.qtlresults[j]['lrs_value'] > 460 or self.qtlresults[j]['lrs_value']=='inf':
- # Yc = yZero - webqtlConfig.MAXLRS*LRSHeightThresh/LRSMax
+ # Yc = yZero - webqtlConfig.MAXLRS*LRSHeightThresh/LRS_LOD_Max
#else:
- # Yc = yZero - qtlresult['lrs_value']*LRSHeightThresh/LRSMax
+ # Yc = yZero - qtlresult['lrs_value']*LRSHeightThresh/LRS_LOD_Max
if self.manhattan_plot == True:
canvas.drawEllipse(Xc-1, Yc-1, Xc+1, Yc+1, fillColor=pid.black)
diff --git a/wqflask/wqflask/templates/marker_regression_gn1.html b/wqflask/wqflask/templates/marker_regression_gn1.html
index 8ec8a104..11c0f859 100644
--- a/wqflask/wqflask/templates/marker_regression_gn1.html
+++ b/wqflask/wqflask/templates/marker_regression_gn1.html
@@ -61,6 +61,20 @@
</td>
</tr>
<tr>
+ <td><b>Units:&nbsp;</b></td>
+ <td style="padding: 5px;">
+ <label class="radio-inline">
+ <input type="radio" name="LRSCheck" value="LRS" {% if LRS_LOD == "LRS" %}checked{% endif %}>LRS
+ </label>
+ <label class="radio-inline">
+ <input type="radio" name="LRSCheck" value="LOD" {% if LRS_LOD == "LOD" %}checked{% endif %}>LOD
+ </label>
+ <a href="http://genenetwork.org/glossary.html#LOD" target="_blank">
+ <sup style="color:#f00"> ?</sup>
+ </a>
+ </td>
+ </tr>
+ <tr>
<td><b>Width:&nbsp;</b></td>
<td>
<input type="text" name="graphWidth" value="{% if graphWidth is defined %}{{ graphWidth }}{% else %}1600{% endif %}" size="5"><span style="font-size: 11px;"> pixels (minimum=900)</span>
@@ -70,13 +84,25 @@
</div>
<div class="col-xs-4" style="padding: 0px;">
{% if (mapping_method == "reaper" or mapping_method == "rqtl_geno") and nperm > 0 %}
- <input type="checkbox" name="permCheck" class="checkbox" style="display: inline; margin-top: 0px;" {% if permChecked|upper == "ON" %}value="ON" checked{% endif %}> <span style="font-size: 12px;">Permutation Test <br>
+ <input type="checkbox" name="permCheck" class="checkbox" style="display: inline; margin-top: 0px;" {% if permChecked|upper == "ON" %}value="ON" checked{% endif %}> <span style="font-size: 12px;">Permutation Test
+ <a href="http://genenetwork.org/glossary.html#Permutation" target="_blank">
+ <sup style="color:#f00"> ?</sup>
+ </a>
+ <br>
{% endif %}
{% if mapping_method == "reaper" and nboot > 0 %}
- <input type="checkbox" name="bootCheck" class="checkbox" style="display: inline; margin-top: 0px;" {% if bootChecked|upper == "ON" %}value="ON" checked{% endif %}> <span style="font-size: 12px;">Bootstrap Test <br>
+ <input type="checkbox" name="bootCheck" class="checkbox" style="display: inline; margin-top: 0px;" {% if bootChecked|upper == "ON" %}value="ON" checked{% endif %}> <span style="font-size: 12px;">Bootstrap Test
+ <a href="http://genenetwork.org/glossary.html#bootstrap" target="_blank">
+ <sup style="color:#f00"> ?</sup>
+ </a>
+ <br>
{% endif %}
{% 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>
+ <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
+ <a href="http://genenetwork.org/glossary.html#additive" target="_blank">
+ <sup style="color:#f00"> ?</sup>
+ </a>
+ <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>
@@ -151,12 +177,20 @@
class="checkbox edit_sample_checkbox"
value="{{ marker.name }}" checked="checked">
</td>
- <Td align="right">{{ loop.index }}</Td>
+ <td align="right">{{ loop.index }}</td>
{% if LRS_LOD == "LOD" %}
+ {% if 'lod_score' in marker %}
<td>{{ '%0.2f' | format(marker.lod_score|float) }}</td>
{% else %}
+ <td>{{ '%0.2f' | format(marker.lrs_value|float / 4.16) }}</td>
+ {% endif %}
+ {% else %}
+ {% if 'lod_score' in marker %}
+ <td>{{ '%0.2f' | format(marker.lod_score|float * 4.16) }}</td>
+ {% else %}
<td>{{ '%0.2f' | format(marker.lrs_value|float) }}</td>
{% endif %}
+ {% endif %}
<td>{{marker.chr}}</td>
<td>{{ '%0.6f' | format(marker.Mb|float) }}</td>
<td>
diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py
index acfc5fc6..2e846066 100644
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -354,6 +354,7 @@ def marker_regression_page():
'num_bootstrap',
'bootCheck',
'bootstrap_results',
+ 'LRSCheck',
'maf',
'manhattan_plot',
'control_marker',