about summary refs log tree commit diff
path: root/wqflask/base/species.py
diff options
context:
space:
mode:
Diffstat (limited to 'wqflask/base/species.py')
-rw-r--r--wqflask/base/species.py83
1 files changed, 67 insertions, 16 deletions
diff --git a/wqflask/base/species.py b/wqflask/base/species.py
index 85f076ca..9d4cac4c 100644
--- a/wqflask/base/species.py
+++ b/wqflask/base/species.py
@@ -6,14 +6,17 @@ from flask import Flask, g
 
 #from MySQLdb import escape_string as escape
 
+from utility import Bunch
+
 from pprint import pformat as pf
 
 class TheSpecies(object):
     def __init__(self, dataset):
         self.dataset = dataset
         print("self.dataset is:", pf(self.dataset.__dict__))
-        self.chromosomes = Chromosomes(self.dataset.group.name)
-        self.genome_length = self.chromosomes.get_genome_length()
+        self.chromosomes = Chromosomes(self.dataset)
+        self.genome_mb_length = self.chromosomes.get_genome_mb_length()
+        
         
     #@property
     #def chromosomes(self):
@@ -27,10 +30,22 @@ class TheSpecies(object):
     #            
     #    return chromosomes
 
+class IndChromosome(object):
+    def __init__(self, length):
+        self.length = length
+        
+    @property
+    def mb_length(self):
+        """Chromosome length in megabases"""
+        return self.length / 1000000
+    
+    def set_cm_length(self, genofile_chr):
+        self.cm_length = genofile_chr[-1].cM - genofile_chr[0].cM
 
 
 class Chromosomes(object):
-    def __init__(self, group_name):
+    def __init__(self, dataset):
+        self.dataset = dataset
         self.chromosomes = collections.OrderedDict()
 
         results = g.db.execute("""
@@ -40,27 +55,63 @@ class Chromosomes(object):
                         Chr_Length.SpeciesId = InbredSet.SpeciesId AND
                         InbredSet.Name = %s
                 Order by OrderId
-                """, group_name).fetchall()
+                """, self.dataset.group.name).fetchall()
         print("bike:", results)
 
         for item in results:
-            self.chromosomes[item.Name] = item.Length
+            self.chromosomes[item.Name] = IndChromosome(item.Length)
+        
+        self.set_mb_graph_interval()
+        self.get_cm_length_list()
+
+
+    def set_mb_graph_interval(self):
+        """Empirical megabase interval"""
+        
+        #if self.chromosomes:
+        assert self.chromosomes, "Have to add some code back in apparently to set it to 1"
+        self.mb_graph_interval = self.get_genome_mb_length()/(len(self.chromosomes)*12)
+        #else:
+            #self.mb_graph_interval = 1
 
-        print("self.chromosomes:", self.chromosomes)
 
+    def get_genome_mb_length(self):
+        """Gets the sum of each chromosome's length in megabases"""
 
-    def get_mb_length(self):
-        """Gets the chromosome length in megabases"""
+        return sum([ind_chromosome.mb_length for ind_chromosome in self.chromosomes.values()])
 
-        mb_lengths = chr_length/1000000.0 for name, chr_length in self.chromosomes
 
-        return mb_lengths
+    def get_genome_cm_length(self):
+        """Gets the sum of each chromosome's length in centimorgans"""
 
-    def get_genome_length(self):
-        """Gets the sum of each chromosome's length"""
+        return sum([ind_chromosome.cm_length for ind_chromosome in self.chromosomes.values()])
 
-        genome_length = 0
-        for name, value in self.chromosomes.items():
-            genome_length += value
+    def get_cm_length_list(self):
+        """Chromosome length in centimorgans
+        
+        Calculates the length in centimorgans by subtracting the centimorgan position
+        of the last marker in a chromosome by the position of the first marker
+        
+        """
+        
+        self.dataset.group.read_genotype_file()
+        
+        self.cm_length_list = []
+        
+        for chromosome in self.dataset.group.genotype:
+            self.cm_length_list.append(chromosome[-1].cM - chromosome[0].cM)
+            
+        print("self.cm_length_list:", pf(self.cm_length_list))
+        
+        assert len(self.cm_length_list) == len(self.chromosomes), "Uh-oh lengths should be equal!"
+        for counter, chromosome in enumerate(self.chromosomes.values()):
+            chromosome.cm_length = self.cm_length_list[counter]
+            #self.chromosomes[counter].cm_length = item
+            
+        for key, value in self.chromosomes.items():
+            print("bread - %s: %s" % (key, pf(vars(value))))
+        
 
-        return genome_length
\ No newline at end of file
+# Testing                
+#if __name__ == '__main__':    
+#    foo = dict(bar=dict(length))
\ No newline at end of file