aboutsummaryrefslogtreecommitdiff
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
+