Source code for memote.support.biomass

# -*- coding: utf-8 -*-

# Copyright 2017 Novo Nordisk Foundation Center for Biosustainability,
# Technical University of Denmark.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Supporting functions for biomass consistency checks."""

from __future__ import absolute_import

import logging

from six import iteritems
from cobra.exceptions import Infeasible
from memote.support.helpers import find_atp_adp_converting_reactions

__all__ = (
    "sum_biomass_weight", "find_biomass_precursors",
    "find_blocked_biomass_precursors")

LOGGER = logging.getLogger(__name__)


[docs]def sum_biomass_weight(reaction): """ Compute the sum of all reaction compounds. Parameters ---------- reaction : cobra.core.reaction.Reaction The biomass reaction of the model under investigation. """ return sum(-coef * met.formula_weight for (met, coef) in iteritems(reaction.metabolites)) / 1000.0
[docs]def find_biomass_precursors(reaction): """ Return a list of all biomass precursors excluding ATP and H2O. Parameters ---------- reaction : cobra.core.reaction.Reaction The biomass reaction of the model under investigation. """ return [met for met in reaction.reactants if met.id != 'atp_c' or met.id != 'h2o_c']
[docs]def find_blocked_biomass_precursors(reaction, model): """ Return a list of all biomass precursors that cannot be produced. Parameters ---------- reaction : cobra.core.reaction.Reaction The biomass reaction of the model under investigation. model : cobra.Model The metabolic model under investigation. """ LOGGER.debug("Finding blocked biomass precursors") precursors = find_biomass_precursors(reaction) blocked_precursors = list() for precursor in precursors: with model: dm_rxn = model.add_boundary(precursor, type="demand") model.objective = dm_rxn try: solution = model.optimize() LOGGER.debug( "%s: demand flux is '%g' and solver status is '%s'", str(precursor), solution.objective_value, solution.status) if solution.objective_value <= 0.0: blocked_precursors.append(precursor) except Infeasible: blocked_precursors.append(precursor) return blocked_precursors
def gam_in_biomass(reaction, model): """ Return boolean if biomass reaction includes growth-associated maintenance. Parameters ---------- reaction : cobra.core.reaction.Reaction The biomass reaction of the model under investigation. model : cobra.Model The metabolic model under investigation. """ atp_adp_reactions = find_atp_adp_converting_reactions(model) return reaction in set(atp_adp_reactions)