Source code for cobra.core.Gene

#cobra.Gene.py
#######################
#BEGIN Class Gene
#
import re
from .Metabolite import Metabolite
[docs]class Gene(Metabolite): """A Gene is a special class of metabolite. TODO: Make design decisions about TUs and such """ def __init__(self, id, formula=None, name=None, compartment=None, strand='+', locus_start=0, locus_end=0, functional=True): """ id: A string. formula: cobra.Formula or String of a chemical formula. Defaults to None to save time in pickling and such. name: String. A human readable name. compartment: None or a dictionary indicating the cellular location of the metabolite. Used when in a cobra.Reaction or Model object strand: '+' or '-' to indicate forward or reverse strand for DNA. locus_start: Int. The index of the starting base for the gene. locus_end: Int. The index of the last base for the gene. functional: Boolean. Indicate whether the gene is functional. If it is not functional then it cannot be used in an enzyme complex nor can its products be used. """ Metabolite.__init__(self, id, formula=formula, name=name, compartment=compartment) self.locus_start = locus_start self.locus_end = locus_end self.strand = strand self.functional = functional
[docs] def guided_copy(self, the_model): """Trying to make a faster copy proceedure for cases where large numbers of metabolites might be copied. Such as when copying reactions. """ the_copy = Metabolite.guided_copy(self, the_model) return(the_copy)
[docs] def remove_from_model(self, the_model, make_dependent_reactions_nonfunctional=True): """Removes the association the_model: :class:`~cobra.core.Model` object. Remove the reaction from this model. make_dependent_reactions_nonfunctional: Boolean. If True then replace the gene with 'False' in the gene association, else replace the gene with 'True' TODO: Better handling of the gene association """ if make_dependent_reactions_nonfunctional: gene_state = 'False' else: gene_state = 'True' the_gene_re = re.compile('(^|(?<=( |\()))%s(?=( |\)|$))'%re.escape(self.id)) if the_model != self._model: raise Exception('%s not in %s ergo it cannot be removed. (%s)'%(self, the_model, self._model)) self._model.genes.remove(self) self._model = None for the_reaction in self._reaction: the_reaction.gene_reaction_rule = the_gene_re.sub(gene_state, the_reaction.gene_reaction_rule) the_reaction._genes.pop(self) #Now deactivate the reaction if its gene association evaluates to False the_gene_reaction_relation = the_reaction.gene_reaction_rule for other_gene in the_reaction._genes: other_gene_re = re.compile('(^|(?<=( |\()))%s(?=( |\)|$))'%re.escape(other_gene.id)) the_gene_reaction_relation = other_gene_re.sub('True', the_gene_reaction_relation) # if not eval(the_gene_reaction_relation): the_reaction.lower_bound = 0 the_reaction.upper_bound = 0 # #END Class Gene ########################