Elementary flux modes and extreme pathways
The toy network of Raman whose steady-state cone ElementaryModeAnalysis enumerates.
- Name:
elementary_flux_modes - Field:
biology/systems_biology - Formalism: static solution
- References: Raman 2021; Schuster and Hilgetag 1994; Schilling et al. 2000; Gagneur and Klamt 2004
Select this system
from skcomplex.systems import create_simulation, create_system, describe
system = create_system('elementary_flux_modes')
entry = describe('elementary_flux_modes')
trajectory = create_simulation('elementary_flux_modes').prepare().run().trajectory_
Factory
@register_system(
field='biology/systems_biology',
tags=('elementary flux modes', 'extreme pathways', 'linear program', 'metabolism', 'static'),
references=('Raman 2021', 'Schuster and Hilgetag 1994', 'Schilling et al. 2000', 'Gagneur and Klamt 2004'),
defaults={'until': 0.0},
)
def elementary_flux_modes(knockouts: Sequence[str] = ()) -> System:
"""Return the toy network of Raman whose steady-state cone `ElementaryModeAnalysis` enumerates.
Every steady-state flux of the network is a non-negative combination of the elementary modes of its cone (Raman
2021, Section 9.8). The toy network has two modes, through `v1` and through `v2` and `v3`, both with growth yield
`1/12` on `A`, so the bound 1000 on `v6` limits the growth to 50 whichever route carries the flux.
Args:
knockouts:
The reactions to fix at zero.
Returns:
system:
The system.
Examples:
>>> from skcomplex.core.analysis import ElementaryModeAnalysis
>>> from skcomplex.systems.biology.systems_biology import elementary_flux_modes
>>> analysis = ElementaryModeAnalysis(normalize='cell.v_b1').prepare(elementary_flux_modes()).run()
>>> analysis.modes_.shape[0]
2
"""
closed = {f'{bound}_{name}': 0.0 for name in knockouts for bound in ('lower', 'upper')}
return System(elements=[ToyNetworkElement('cell').set_params(**closed)], time=StaticTime())
Components
Elements:
ToyNetworkElement, fromDeclaredElement
class ToyNetworkElement(MetabolicNetworkElement):
"""The toy network of Table 8.2 of Raman (2021), which grows on A alone.
Args:
label:
The label of the element.
visual:
How the element is drawn, or `None` for the bars of its program.
objective:
The coefficient of every reaction in the objective, or `None` for `default_objective`.
parsimonious:
Whether to minimise the total absolute flux after the objective.
infeasible:
The infeasibility policy of the program.
name:
The name of the network.
reactions:
The reactions by name.
default_objective:
The objective of the network when `objective` is `None`.
variables:
The declared states and parameters that replace the ones of the reactions, by name, or `None` for none.
Examples:
>>> from skcomplex.systems.biology.common.metabolism import ToyNetworkElement
>>> ToyNetworkElement('cell').get_value('upper_v1')
1000.0
"""
def __init__(
self,
label: str,
visual: VisualSpec | None = None,
*,
objective: Mapping[str, float] | None = None,
parsimonious: bool = False,
infeasible: str = 'raise',
name: str | None = 'ToyNetwork',
reactions: Mapping[str, ReactionSpec] = TOY_REACTIONS,
default_objective: Mapping[str, float] = TOY_OBJECTIVE,
variables: Mapping[str, DeclaredVariableSpec] | None = None,
) -> None:
super().__init__(
label,
visual,
objective=objective,
parsimonious=parsimonious,
infeasible=infeasible,
name=name,
reactions=reactions,
default_objective=default_objective,
variables=variables,
)