Source code for etfl.data.ecoli_utils

import sympy

from ..core.enzyme import Enzyme
from ..utils.parsing import parse_gpr

[docs]def infer_enzyme_from_gpr(reaction, default_kcat, default_kdeg): new_enzymes = list() compositions = compositions_from_gpr(reaction) for e,composition in enumerate(compositions): new_enzyme = Enzyme(id = reaction.id + '_inferred_{}'.format(e), kcat=default_kcat, kdeg=default_kdeg, composition=composition) new_enzymes.append(new_enzyme) return new_enzymes
[docs]def compositions_from_gpr(reaction): """ *Warning*: Use this function only if you have no information on the enzymes. Logically parses the GPR to automatically find isozymes ( logical OR ) and subunits ( logical AND ), and creates the necessary complexation reactions: 1 per isozyme, requiring the peptides of each subunit :param reaction: :type reaction: cobra.Reaction :return: """ model = reaction.model this_gpr = reaction.gene_reaction_rule sym_gpr = parse_gpr(this_gpr) if isinstance(sym_gpr, sympy.Symbol): # GPR of the type: '(gene0)' # Gene <=> Protein isozymes = [sym_gpr] elif isinstance(sym_gpr, sympy.And): # GPR of the type: '(gene0 & gene1)' # Subunits of one enzyme isozymes = [sym_gpr] elif isinstance(sym_gpr, sympy.Or): # GPR of the type: '(gene0 | gene1)', '((gene0 & gene1) | gene2)' # Two isozymes that are the arguments of the OR isozymes = sym_gpr.args compositions = [] for e, this_isozyme in enumerate(isozymes): if isinstance(this_isozyme, sympy.And): # this is a GPR with several subunits peptides = {x.name: 1 \ for x in this_isozyme.args} elif isinstance(this_isozyme, sympy.Symbol): # there is only one subunit peptides = {this_isozyme.name: 1} else: # The GPR has been incorrectly parsed model.logger.error('Incorrect parsing of {}'.format(isozymes)) raise TypeError compositions += [peptides] return compositions