diff options
Diffstat (limited to 'gn3/utility/species.py')
-rw-r--r-- | gn3/utility/species.py | 71 |
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) |