about summary refs log tree commit diff
path: root/gn3/base/species.py
diff options
context:
space:
mode:
Diffstat (limited to 'gn3/base/species.py')
-rw-r--r--gn3/base/species.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/gn3/base/species.py b/gn3/base/species.py
new file mode 100644
index 0000000..9fb08fb
--- /dev/null
+++ b/gn3/base/species.py
@@ -0,0 +1,64 @@
+
+# pylint: disable-all
+import collections
+from flask import g
+from dataclasses import dataclass
+
+class TheSpecies:
+    def __init__(self, dataset=None, species_name=None):
+        if species_name is not None:
+            self.name = species_name
+
+            self.chromosomes = Chromosomes(species=self.name)
+
+        else:
+            self.dataset = dataset
+            self.chromosomes = Chromosomes(dataset=self.dataset)
+
+
+class Chromosomes:
+    def __init__(self, dataset=None, species=None):
+        self.chromosomes = collections.OrderedDict()
+
+        if species is not None:
+            query = """
+                Select
+                        Chr_Length.Name, Chr_Length.OrderId, Length from Chr_Length, Species
+                where
+                        Chr_Length.SpeciesId = Species.SpeciesId AND
+                        Species.Name = '%s'
+                Order by OrderId
+                """ % species.capitalize()
+
+        else:
+            self.dataset = dataset
+
+            query = """
+                Select
+                        Chr_Length.Name, Chr_Length.OrderId, Length from Chr_Length, InbredSet
+                where
+                        Chr_Length.SpeciesId = InbredSet.SpeciesId AND
+                        InbredSet.Name = '%s'
+                Order by OrderId
+                """ % self.dataset.group.name
+
+            # logger.sql(query)
+
+            results = g.db.execute(query).fetchall()
+
+            for item in results:
+                self.chromosomes[item.OrderId] = IndChromosome(
+                    item.Name, item.Length)
+
+
+# @dataclass
+class IndChromosome:
+    def __init__(self,name,length):
+        self.name= name
+        self.length = length
+
+    @property
+    def mb_length(self):
+        """Chromosome length in megabases"""
+        return self.length/ 1000000
+