aboutsummaryrefslogtreecommitdiff
path: root/gn3/utility/species.py
diff options
context:
space:
mode:
Diffstat (limited to 'gn3/utility/species.py')
-rw-r--r--gn3/utility/species.py71
1 files changed, 71 insertions, 0 deletions
diff --git a/gn3/utility/species.py b/gn3/utility/species.py
new file mode 100644
index 0000000..0140d41
--- /dev/null
+++ b/gn3/utility/species.py
@@ -0,0 +1,71 @@
+"""module contains species and chromosomes classes"""
+import collections
+
+from flask import g
+
+
+from gn3.utility.logger import getLogger
+logger = getLogger(__name__)
+
+ # pylint: disable=too-few-public-methods
+ # intentionally disabled check for few public methods
+
+class TheSpecies:
+ """class for Species"""
+
+ 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 IndChromosome:
+ """class for 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
+
+
+
+
+class Chromosomes:
+ """class for 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)