aboutsummaryrefslogtreecommitdiff
path: root/wqflask
diff options
context:
space:
mode:
Diffstat (limited to 'wqflask')
-rw-r--r--wqflask/utility/gen_geno_ob.py15
-rw-r--r--wqflask/wqflask/marker_regression/display_mapping_results.py2
-rw-r--r--wqflask/wqflask/marker_regression/qtlreaper_mapping.py17
-rw-r--r--wqflask/wqflask/templates/mapping_results.html2
-rw-r--r--wqflask/wqflask/templates/show_trait_statistics.html2
5 files changed, 27 insertions, 11 deletions
diff --git a/wqflask/utility/gen_geno_ob.py b/wqflask/utility/gen_geno_ob.py
index e8780879..44e2722f 100644
--- a/wqflask/utility/gen_geno_ob.py
+++ b/wqflask/utility/gen_geno_ob.py
@@ -47,20 +47,20 @@ class genotype(object):
elif line[0] == "@":
label = line.split(":")[0][1:]
if label == "name":
- self.group = line.split(":")[1]
+ self.group = line.split(":")[1].strip()
elif label == "filler":
- if line.split(":")[1] == "yes":
+ if line.split(":")[1].strip() == "yes":
self.filler = True
elif label == "type":
- self.type = line.split(":")[1]
+ self.type = line.split(":")[1].strip()
elif label == "mat":
- self.mat = line.split(":")[1]
+ self.mat = line.split(":")[1].strip()
elif label == "pat":
- self.pat = line.split(":")[1]
+ self.pat = line.split(":")[1].strip()
elif label == "het":
- self.het = line.split(":")[1]
+ self.het = line.split(":")[1].strip()
elif label == "unk":
- self.unk = line.split(":")[1]
+ self.unk = line.split(":")[1].strip()
else:
continue
elif line[:3] == "Chr":
@@ -133,6 +133,7 @@ class Locus(object):
start_pos = 4
else:
start_pos = 3
+
for allele in marker_row[start_pos:]:
if allele in geno_table.keys():
self.genotype.append(geno_table[allele])
diff --git a/wqflask/wqflask/marker_regression/display_mapping_results.py b/wqflask/wqflask/marker_regression/display_mapping_results.py
index f3755758..a2f9651b 100644
--- a/wqflask/wqflask/marker_regression/display_mapping_results.py
+++ b/wqflask/wqflask/marker_regression/display_mapping_results.py
@@ -1341,7 +1341,7 @@ class DisplayMappingResults(object):
for i, _chr in enumerate(self.genotype):
if _chr.name == self.ChrList[self.selectedChr][0]:
- for j, _geno in enumerate(_chr[1]):
+ for j, _geno in enumerate(_chr[1].genotype):
plotbxd=0
for item in smd:
diff --git a/wqflask/wqflask/marker_regression/qtlreaper_mapping.py b/wqflask/wqflask/marker_regression/qtlreaper_mapping.py
index 50e6bd7e..fe216166 100644
--- a/wqflask/wqflask/marker_regression/qtlreaper_mapping.py
+++ b/wqflask/wqflask/marker_regression/qtlreaper_mapping.py
@@ -1,4 +1,4 @@
-import os, math, string, random, json
+import os, math, string, random, json, re
from base import webqtlConfig
from base.trait import GeneralTrait
@@ -105,6 +105,9 @@ def parse_reaper_output(gwa_filename, permu_filename, bootstrap_filename):
marker['additive'] = float(line.split("\t")[6])
marker_obs.append(marker)
+ #ZS: Results have to be reordered because the new reaper returns results sorted alphabetically by chr for some reason, resulting in chr 1 being followed by 10, etc
+ sorted_indices = natural_sort(marker_obs)
+
permu_vals = []
if permu_filename:
with open("{}{}.txt".format(webqtlConfig.GENERATED_IMAGE_DIR, permu_filename)) as permu_file:
@@ -117,6 +120,9 @@ def parse_reaper_output(gwa_filename, permu_filename, bootstrap_filename):
for line in bootstrap_file:
bootstrap_vals.append(int(line))
+ marker_obs = [marker_obs[i] for i in sorted_indices]
+ bootstrap_vals = [bootstrap_vals[i] for i in sorted_indices]
+
return marker_obs, permu_vals, bootstrap_vals
def run_original_reaper(this_trait, dataset, samples_before, trait_vals, json_data, num_perm, bootCheck, num_bootstrap, do_control, control_marker, manhattan_plot):
@@ -210,3 +216,12 @@ def run_original_reaper(this_trait, dataset, samples_before, trait_vals, json_da
"cM":reaper_locus.cM, "name":reaper_locus.name, "additive":qtl.additive, "dominance":qtl.dominance}
qtl_results.append(qtl)
return qtl_results, json_data, perm_output, suggestive, significant, bootstrap_results
+
+def natural_sort(marker_list):
+ """
+ Function to naturally sort numbers + strings, adopted from user Mark Byers here: https://stackoverflow.com/questions/4836710/does-python-have-a-built-in-function-for-string-natural-sort
+ Changed to return indices instead of values, though, since the same reordering needs to be applied to bootstrap results
+ """
+ convert = lambda text: int(text) if text.isdigit() else text.lower()
+ alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', str(marker_list[key]['chr'])) ]
+ return sorted(range(len(marker_list)), key = alphanum_key) \ No newline at end of file
diff --git a/wqflask/wqflask/templates/mapping_results.html b/wqflask/wqflask/templates/mapping_results.html
index 1fc792d8..8422b1d2 100644
--- a/wqflask/wqflask/templates/mapping_results.html
+++ b/wqflask/wqflask/templates/mapping_results.html
@@ -144,7 +144,7 @@
<span style="color:red;">*</span>
<br>
<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>
- {% if plotScale != "morgan" and mapping_method != "gemma" and mapping_method != "plink" %}
+ {% if plotScale != "morgan" %}
<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><br>
{% endif %}
<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>
diff --git a/wqflask/wqflask/templates/show_trait_statistics.html b/wqflask/wqflask/templates/show_trait_statistics.html
index 1093e1bb..4653b398 100644
--- a/wqflask/wqflask/templates/show_trait_statistics.html
+++ b/wqflask/wqflask/templates/show_trait_statistics.html
@@ -70,7 +70,7 @@
</select>
</div>
{% endif %}
- <div id="update_bar_chart" class="btn-group">
+ <div id="update_bar_chart" class="btn-group" style="margin-bottom: 5px;">
<button type="button" class="btn btn-default sort_by_name" value="name">
<i class="icon-resize-horizontal"></i> Sort By Name
</button>