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