about summary refs log tree commit diff
path: root/wqflask/utility
diff options
context:
space:
mode:
authorGN22020-03-27 16:32:29 -0500
committerGN22020-03-27 16:32:29 -0500
commit8fda0e93cbf10cfcd6f97fd67cb3a175d62cb48d (patch)
treeb7b8930b379440033893e77acfbe371f23994d25 /wqflask/utility
parent3dc5931e6729631affe23cfa736c98836e5e171b (diff)
parent0e240cbfc6034b65b42c2d21f59ae2663dd2f6ec (diff)
downloadgenenetwork2-8fda0e93cbf10cfcd6f97fd67cb3a175d62cb48d.tar.gz
Merge branch 'testing' of https://github.com/genenetwork/genenetwork2 into HEAD
Diffstat (limited to 'wqflask/utility')
-rw-r--r--wqflask/utility/gen_geno_ob.py91
1 files changed, 63 insertions, 28 deletions
diff --git a/wqflask/utility/gen_geno_ob.py b/wqflask/utility/gen_geno_ob.py
index 44e2722f..aa5b27c4 100644
--- a/wqflask/utility/gen_geno_ob.py
+++ b/wqflask/utility/gen_geno_ob.py
@@ -1,5 +1,8 @@
 from __future__ import absolute_import, division, print_function
 
+import utility.logger
+logger = utility.logger.getLogger(__name__ )
+
 class genotype(object):
     """
     Replacement for reaper.Dataset so we can remove qtlreaper use while still generating mapping output figure
@@ -34,8 +37,34 @@ class genotype(object):
     def __len__(self):
         return len(self.chromosomes)
 
-    def read_file(self, filename):
+    def read_rdata_output(self, qtl_results):
+        #ZS: This is necessary because R/qtl requires centimorgan marker positions, which it normally gets from the .geno file, but that doesn't exist for HET3-ITP (which only has RData), so it needs to read in the marker cM positions from the results
+        self.chromosomes = [] #ZS: Overwriting since the .geno file's contents are just placeholders
+
+        this_chr = "" #ZS: This is so it can track when the chromosome changes as it iterates through markers
+        chr_ob = None
+        for marker in qtl_results:
+            locus = Locus(self)
+            if str(marker['chr']) != this_chr:
+                if this_chr != "":
+                    self.chromosomes.append(chr_ob)
+                this_chr = str(marker['chr'])
+                chr_ob = Chr(this_chr, self)
+            if 'chr' in marker:
+                locus.chr = str(marker['chr'])
+            if 'name' in marker:
+                locus.name = marker['name']
+            if 'Mb' in marker:
+                locus.Mb = marker['Mb']
+            if 'cM' in marker:
+                locus.cM = marker['cM']
+            chr_ob.loci.append(locus)
+
+        self.chromosomes.append(chr_ob)
+
+        return self
 
+    def read_file(self, filename):
         with open(filename, 'r') as geno_file:
             lines = geno_file.readlines()
 
@@ -109,33 +138,39 @@ class Chr(object):
         return len(self.loci)
 
     def add_marker(self, marker_row):
-        self.loci.append(Locus(marker_row, self.geno_ob))
+        self.loci.append(Locus(self.geno_ob, marker_row))
 
 class Locus(object):
-    def __init__(self, marker_row, geno_ob):
-        self.chr = marker_row[0]
-        self.name = marker_row[1]
-        try:
-            self.cM = float(marker_row[geno_ob.cm_column])
-        except:
-            self.cM = float(marker_row[geno_ob.mb_column]) if geno_ob.mb_exists else 0
-        self.Mb = float(marker_row[geno_ob.mb_column]) if geno_ob.mb_exists else None
-
-        geno_table = {
-            geno_ob.mat: -1,
-            geno_ob.pat: 1,
-            geno_ob.het: 0,
-            geno_ob.unk: "U"
-        }
-
+    def __init__(self, geno_ob, marker_row = None):
+        self.chr = None
+        self.name = None
+        self.cM = None
+        self.Mb = None
         self.genotype = []
-        if geno_ob.mb_exists:
-            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])
-            else: #ZS: Some genotype appears that isn't specified in the metadata, make it unknown
-                self.genotype.append("U")
\ No newline at end of file
+        if marker_row:
+            self.chr = marker_row[0]
+            self.name = marker_row[1]
+            try:
+                self.cM = float(marker_row[geno_ob.cm_column])
+            except:
+                self.cM = float(marker_row[geno_ob.mb_column]) if geno_ob.mb_exists else 0
+            self.Mb = float(marker_row[geno_ob.mb_column]) if geno_ob.mb_exists else None
+
+            geno_table = {
+                geno_ob.mat: -1,
+                geno_ob.pat: 1,
+                geno_ob.het: 0,
+                geno_ob.unk: "U"
+            }
+
+            self.genotype = []
+            if geno_ob.mb_exists:
+                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])
+                else: #ZS: Some genotype appears that isn't specified in the metadata, make it unknown
+                    self.genotype.append("U")
\ No newline at end of file