Skip to content

Fluxomics: Use Cases and ChEMROF Extensions

This document surveys fluxomics — the quantitative study of metabolic reaction rates (fluxes) in a biological system — and analyzes how the ChEMROF schema can be used as-is and where it could be extended to serve as a chemical-entity backbone for fluxomics data and models.

It began as a scoping/explanation document. Most of it still describes potential directions, but the kinetic-modeling thread has since been partly implemented: ChEMROF gained reaction-mechanism, enzyme-regulation, and related slots, and a chemrof convert-maud command maps Maud kinetic models into ChEMROF (see Appendix A). Sections describing the isotope/atom-mapping and flux/experiment layers remain proposals.

1. What is fluxomics?

Fluxomics is the "-omics" layer concerned with flux — the rate at which metabolites are interconverted through a metabolic network, conventionally expressed in units such as mmol·gDW⁻¹·h⁻¹ (millimoles per gram dry weight per hour) for cellular systems. Unlike concentrations (metabolomics) or expression levels (transcriptomics/proteomics), a flux is not a pool size but a throughput through a reaction. Fluxes are not measured directly; they are inferred by combining:

  • a reaction network (stoichiometry + reversibility/directionality),
  • constraints (thermodynamic, capacity, uptake/secretion bounds), and
  • experimental data (extracellular rates and/or stable-isotope labeling patterns).

The two dominant methodological families are constraint-based modeling (Flux Balance Analysis and relatives) and isotope-based Metabolic Flux Analysis (¹³C-MFA and its non-stationary variant). They impose quite different data requirements, and ChEMROF is differentially ready for each.

2. Core use cases and their data requirements

2.1 Constraint-based modeling / Flux Balance Analysis (FBA)

FBA operates on a genome-scale metabolic model (GEM/GSMM). The network is encoded as a stoichiometric matrix S (rows = metabolites, columns = reactions, entries = stoichiometric coefficients). Assuming metabolic steady state (S·v = 0), linear programming finds a flux vector v that optimizes an objective function (commonly biomass production) subject to flux bounds (lb ≤ v ≤ ub).

Data requirements:

  • Metabolites with compartment assignment (e.g. cytosol c, mitochondrion m, extracellular e) and database cross-references.
  • Reactions with signed, possibly non-integer stoichiometric coefficients, reversibility/bounds, gene–protein–reaction (GPR) associations, and a classification (internal / transport / exchange / biomass pseudo-reaction).
  • An objective (which reaction(s) to maximize/minimize, and weights).

The de-facto standard is SBML Level 3 with the Flux Balance Constraints (fbc) package (objective functions, flux bounds, charge/formula for balancing). Models are richly cross-referenced via MIRIAM identifiers and annotated with Systems Biology Ontology (SBO) terms (e.g. distinguishing biomass pseudo-reactions, transport reactions, exchange reactions). Reference resources include BiGG Models, MetaNetX, KEGG, MetaCyc/BioCyc, and Rhea. The FROG report (Flux variability, Reaction deletion, Objective, Gene deletion) is an emerging reproducibility standard for curated GEMs.

2.2 Stable-isotope ¹³C Metabolic Flux Analysis (¹³C-MFA)

¹³C-MFA is considered the "gold standard" for intracellular flux quantification under metabolic (quasi-)steady state. Cells are fed a ¹³C-labeled substrate (e.g. [1-¹³C] or [U-¹³C] glucose); the label propagates through the network, and the resulting labeling patterns of downstream metabolites (measured by MS or NMR) are fit to a model to estimate fluxes.

The distinguishing data requirement beyond FBA is the atom mapping (a.k.a. atom transition network): for each reaction, a one-to-one correspondence between each substrate atom and the product atom it becomes. Carbon atom mappings are what let a model predict how label flows. Key concepts:

  • Atom mapping / atom transition — substrate-atom → product-atom correspondence per reaction (e.g. encoded as mapped reaction SMILES/SMIRKS, RXN files, or RInChI). Curated mappings are available from MetaCyc and the open MetAMDB (~43,000 reactions).
  • Isotopomer — a specific labeling configuration of a molecule (which positions carry the heavy isotope); for n carbons there are 2ⁿ isotopomers.
  • Isotopologue / mass isotopomer — molecules that differ only in number of heavy atoms (M+0, M+1, M+2, …), without regard to position; what a mass spectrometer typically resolves.
  • Mass Isotopomer Distribution (MID) / Mass Distribution Vector (MDV) — the fractional abundances of M+0, M+1, … normalized to sum 1; the primary measurement input.
  • Elementary Metabolite Unit (EMU) framework — a decomposition that reduces the isotopomer balance equations (1000s) to a much smaller EMU set (100s), the computational backbone of modern simulators (INCA, 13CFLUX2, OpenFLUX, mfapy, etc.).

The dominant exchange format is FluxML — an XML language semantically similar to SBML but extended with atom mappings, parameter constraints (net/exchange fluxes), and measurement configurations.

2.3 Isotopically non-stationary MFA (INST-MFA)

For systems where isotopic steady state is impractical (e.g. autotrophs, photosynthesis), INST-MFA fits the time course of label incorporation. This adds a temporal dimension (time-series MIDs) and requires metabolite pool sizes (concentrations) as additional parameters, coupling fluxomics to metabolomics.

2.4 Kinetic / mechanistic modeling

Beyond steady-state flux estimation, kinetic models express each reaction rate v as an explicit function of metabolite concentrations and kinetic parameters (e.g. kcat, Km, Vmax, rate constants). These are the bridge from fluxomics to dynamic simulation and parameter-estimation tools.

2.5 A typology of fluxomics experiments

"Fluxomics" is not one experiment but a family, and the experiment type dictates which data (and therefore which schema constructs) are needed. It is useful to type an experiment along four orthogonal axes:

Axis A — inference paradigm

Type Tracer? Steady state Primary inputs
Constraint-based (FBA, and pFBA/FVA/MOMA/dFBA variants) no metabolic stoichiometry, bounds, objective
Stoichiometric MFA / metabolite balancing no metabolic stoichiometry + measured uptake/secretion rates
Stationary ¹³C-MFA (SS-MFA) yes metabolic and isotopic atom mappings + MIDs at steady state
Isotopically non-stationary MFA (INST-MFA) yes metabolic only time-series MIDs + pool sizes
Dynamic MFA (DMFA) optional none time-series rates/labeling
¹³C flux-ratio analysis (METAFoR) yes isotopic local labeling patterns → flux ratios

Axis B — labeling design

  • Single-tracer vs parallel labeling experiments (PLE) — two or more tracer cultures fit jointly to one model. Using complementary parallel tracers is the COMPLETE-MFA approach, now regarded as the gold standard for flux precision/observability.
  • Tracer positional design: positional (e.g. [1-¹³C], [1,2-¹³C], [1,6-¹³C] glucose) vs uniform ([U-¹³C₆]).

Axis C — tracer isotope — ¹³C dominates, but ²H, ¹⁵N, ¹⁷O/¹⁸O are used, and combined designs exist (e.g. one-shot ¹³C/¹⁵N for simultaneous carbon and nitrogen flux).

Axis D — measurement platform — GC-MS, LC-MS/MS, tandem MS (MS/MS), and NMR (¹H/¹³C/¹⁵N HSQC). The platform determines whether positional isotopomers (NMR, MS/MS) or only mass isotopologues / MIDs (single-stage MS) are observed — a distinction ChEMROF can already express via isotopomer_of vs isotopologue_of.

These axes combine: a typical study is e.g. stationary ¹³C-MFA, parallel [1,2-¹³C] + [U-¹³C₆] glucose, GC-MS, central-carbon model. A fluxomics schema should therefore treat "experiment type" as a small set of controlled vocabularies (one per axis) rather than a single flat enum, and let a FluxomicsExperiment carry one or more Tracer specifications plus its measurement platform and timepoints (sketched in §7.4).

3. Standards landscape (for alignment)

Concern Standard / resource
Constraint-based model exchange SBML L3 + fbc package
Isotope-labeling model exchange FluxML; OpenFLUX/INCA/13CFLUX2 formats
Kinetic / Bayesian model exchange SBML (kinetics); Maud (TOML)
Semantic typing of model parts Systems Biology Ontology (SBO)
Reaction identity & balancing Rhea, RInChI, reaction SMILES/SMIRKS
Atom mappings MetaCyc, MetAMDB (RXN/SMILES with atom maps)
Metabolite/reaction identifiers BiGG, MetaNetX, KEGG, ChEBI, HMDB
Reproducibility report FROG

ChEMROF already lists RHEA, KEGG.REACTION, MetaCyc, EC, MetaNetX.reaction, SEED, RetroRules, RXNO, bigg.metabolite, MetaNetX.chemical etc. among its id_prefixes, so it is well-positioned to cross-reference these resources.

3.1 Do we have FluxML mappings? (a crosswalk)

Short answer: no — there are currently no FluxML (or SBML/fbc/SBO) mappings in the schema, and FluxML is not the kind of artifact you map to directly. Two clarifications:

  1. FluxML is an exchange format (an XML schema), not a controlled vocabulary with stable term IRIs. So there is nothing to put in a LinkML exact_mappings/SSSOM table for FluxML the way there is for, say, RXNO: or CHEBI:. What you can map are (a) the entity identifiers that FluxML documents reference (Rhea/KEGG/BiGG/MetaNetX metabolite and reaction IDs) and (b) the structural elements of a FluxML document onto ChEMROF classes/slots (an element-level crosswalk).

  2. At the identifier level we are already aligned: ChEMROF's id_prefixes for metabolites (CHEBI, bigg.metabolite, KEGG, MetaNetX.chemical, HMDB, …) and reactions (RHEA, KEGG.REACTION, MetaCyc, EC, MetaNetX.reaction, bigg.metabolite/MetaNetX.reaction) cover the namespaces FluxML/SBML models use, so ChEMROF can serve as the chemical-identity hub for the metabolites and reactions a FluxML model names.

What is missing is the structural crosswalk. A proposed element-level mapping (to be implemented in a companion schema that imports ChEMROF):

FluxML element / concept ChEMROF equivalent Status
<metabolitepool> (id, atoms) ChemicalEntity (+ has_atom_occurrences) identifiers ✅, atom count via occurrences ✅
<reaction> Reaction
<reduct> / <rproduct> (educt/product, with carbon labels) ReactionParticipant (left/right_participants) partial — see atom mapping
atom-transition string (e.g. A#abc + B#de -> C#abcde) AtomTransition over AtomOccurrence (proposed §7.2) ❌ not yet
net / exchange (forward/back) flux, <constraint>/<flux> MetabolicFlux + bounds (proposed §7.4) ❌ not yet
isotopomer / cumomer / EMU labeling state isotopomer_of / isotopologue_of; MassIsotopomerDistribution (proposed §7.3) relations ✅, distribution object ❌
<measurement> (MS/MS/NMR config + data) FluxomicsExperiment measurement (proposed §7.4) ❌ not yet
<configuration> / tracer input (<input> labeling) Tracer (proposed §7.4) ❌ not yet

So: identifier-level mappings exist today; the structural FluxML↔ChEMROF crosswalk, and especially atom transitions and labeling-data objects, are the concrete pieces to add. Building a small FluxML↔ChEMROF round-trip converter (validating on one published model) would be the most direct way to prove the crosswalk and surface remaining gaps.

4. What ChEMROF already provides

ChEMROF is primarily a chemical-entity ontology/schema, but it already contains the chemistry that fluxomics models hang their data on:

  • Reaction (RXNO:0000000) with left_participants / right_participants (each a ReactionParticipant), direction, is_balanced, is_transport, is_fully_characterized, reaction_center, and reaction-level cross-refs to RHEA/KEGG/MetaCyc/EC/MetaNetX/SEED/BiGG.
  • ReactionParticipant linking a Reaction to a ChemicalEntity with a stoichiometry slot.
  • Kinetic slots already on Reaction/elsewhere: reaction_rate (v, units mol·m⁻³·s⁻¹), reaction_rate_coefficient, plus kcat (turnover number) and michaelis_constant (Km).
  • Reaction-structure representations: has_reaction_smiles_representation, has_reaction_smarts_representation, has_rinchi_representation, has_smirks_representation, has_reaction_representation — directly relevant to encoding atom-mapped reactions.
  • Isotope machinery: Isotope/Nuclide classes, and the relations isotopologue_of and isotopomer_of (alongside related nuclear-family relations such as isobar_of, isotone_of, isotope_of), plus an isomeric_smiles_string whose description already cites [13C]. This is the conceptual vocabulary that ¹³C-MFA needs.
  • Per-atom individuation: AtomOccurrence ("one of two occurrences of oxygen in nitrate") with occurrence_of → Atom, valence, oxidation_number, etc., reached via has_atom_occurrences. This is the natural anchor for atom mapping, because atom transitions are relations between individuated substrate and product atom occurrences.
  • Concentration (Concentration class + concentration slot + ConcentrationUnitEnum) — supports the pool-size / metabolomics coupling needed by INST-MFA.
  • ReactionGroupingClass and ReactionTypeEnum for classifying reactions (currently organic-synthesis flavored: oxidation, hydrolysis, isomerization, …).

In short: ChEMROF already models reactions, participants, stoichiometry, isotopes/isotopologues/isotopomers, per-atom occurrences, reaction-structure linear notations, concentrations, and basic enzyme kinetics. That is a surprisingly large fraction of the chemistry underlying fluxomics.

5. Gaps relative to fluxomics use cases

The gaps are mostly about quantitative network modeling rather than chemistry per se — i.e. the parts that SBML-fbc/FluxML add on top of a chemical reaction network:

  1. Stoichiometry is integer-only and unsigned. ReactionParticipant.stoichiometry has range: integer. GEMs routinely use fractional coefficients (biomass reactions, lumped reactions, cofactor ratios). Left/right is captured by participant lists, but a single signed float coefficient is the modeling convention.

  2. No flux quantity. reaction_rate exists as an intrinsic kinetic rate, but there is no notion of an estimated/observed network flux with its units (mmol·gDW⁻¹·h⁻¹), confidence interval, and the experiment/condition it pertains to. Flux is condition-specific data, not an intrinsic property of a reaction.

  3. No flux bounds / objective / FBA scaffolding. No lower_bound, upper_bound, reversible flag, or objective-function representation.

  4. No compartment / cellular-location model. Metabolites and reactions in GEMs are compartmentalized; transport reactions move species between compartments. ChEMROF has is_transport: boolean but no compartment entity or per-participant compartment.

  5. No first-class atom-mapping / atom-transition construct. AtomOccurrence exists, but there is no relation asserting "substrate atom occurrence X becomes product atom occurrence Y in reaction R." Atom-mapped reaction SMILES could carry this implicitly, but a structured construct is what MFA tooling consumes.

  6. No measurement/distribution model for labeling. No MassIsotopomerDistribution (MID/MDV vector), no per-position labeling state, no EMU construct, and no way to attach measured labeling data to a metabolite in an experiment.

  7. No experiment / dataset context, and no notion of experiment type. Fluxes and MIDs are only meaningful relative to an organism, strain, growth condition, tracer, timepoint, measurement platform, and the kind of experiment (FBA vs stationary ¹³C-MFA vs INST-MFA vs parallel/COMPLETE-MFA; see the typology in §2.5). ChEMROF has no such context or experiment-type construct (appropriately — it is a chemistry schema), so a fluxomics extension must decide what lives here vs. in a companion schema (§7.4).

  8. GPR associations (gene/enzyme → reaction) are out of scope for a chemistry schema and would belong in a companion model that references ChEMROF reactions.

The worked example in Appendix A (a Bayesian kinetic model) surfaces three further gaps that matter for the kinetic/dynamic experiment type:

  1. No reaction rate-law / mechanism typing. Kinetic models tag each reaction with a rate law (e.g. reversible vs irreversible Michaelis–Menten, mass-action, a "drain"/boundary flux). ChEMROF has the parameters (kcat, michaelis_constant) but no controlled vocabulary for the mechanism they parameterize, and no inhibition constant (Ki).

  2. No enzyme-regulation relationships. Allosteric activation/inhibition and competitive inhibition (metabolite → enzyme effects) are central to kinetic models. ChEMROF has ChemicalRole/has_chemical_role but nothing for metabolite-on-enzyme regulatory interactions (these may belong in a companion enzyme/kinetics schema).

  3. No reaction thermodynamics. Standard Gibbs free energy of formation (ΔGf°, the dgf priors in the example), temperature, transported charge, and membrane potential drive reversibility/direction. ChEMROF has assorted thermophysical_property slots but no ΔGf°/ΔGr° for reactions or a thermodynamics-based directionality model.

6. Two strategic options

Option A — ChEMROF as the chemistry substrate, fluxomics in a companion schema (recommended). Keep ChEMROF focused on chemical entities and reactions, and build a thin fluxomics LinkML module that imports ChEMROF and adds the modeling/experiment layer (fluxes, bounds, objectives, compartments, MIDs, experiments). This mirrors how SBML-fbc and FluxML sit on top of a reaction network, and keeps ChEMROF from absorbing systems-biology scope. The companion would reuse ChEMROF Reaction, ReactionParticipant, ChemicalEntity, Concentration, Isotope, and AtomOccurrence.

Option B — Extend ChEMROF in place. Add the minimal chemistry-adjacent pieces that clearly belong here (atom transitions, signed/float stoichiometry, isotopologue/MID vocabulary) and leave the network-modeling layer to consumers.

A pragmatic split: do the chemistry-adjacent items (Sections 7.1–7.3) in ChEMROF, and the modeling/experiment items (7.4–7.5) in a companion schema.

7. Concrete extension sketches

These are illustrative LinkML fragments for discussion, not finished schema.

7.1 Allow signed, fractional stoichiometry (small, in-place)

slots:
  stoichiometry:
    range: float          # was: integer
    description: >-
      Signed stoichiometric coefficient of the participant in the reaction
      (negative for consumed, positive for produced, by convention), allowing
      fractional values as used in genome-scale biomass and lumped reactions.

(If integer semantics are still wanted for elementary reactions, keep stoichiometry: integer and add a separate stoichiometric_coefficient: float for network modeling.)

7.2 Atom transitions (atom mapping) using existing AtomOccurrence

classes:
  AtomTransition:
    is_a: ChemicalRelationship
    description: >-
      Asserts that a substrate atom occurrence corresponds to (becomes) a
      product atom occurrence within a specific reaction — the unit of an atom
      mapping / atom transition network used in 13C-MFA.
    attributes:
      reactant_atom:
        range: AtomOccurrence
        required: true
      product_atom:
        range: AtomOccurrence
        required: true
slots:
  has_atom_transitions:
    range: AtomTransition
    multivalued: true
    inlined: true
    domain: Reaction

This lets ChEMROF represent the same information as MetAMDB / mapped reaction SMILES, but in a queryable structured form, while reusing AtomOccurrence.

7.3 Isotope-labeling vocabulary (chemistry-adjacent)

classes:
  MassIsotopomerDistribution:
    description: >-
      The fractional abundances (summing to 1) of the mass isotopologues
      (M+0, M+1, M+2, …) of a chemical entity or molecular fragment; the
      primary measurement in 13C-MFA (a.k.a. mass distribution vector, MDV).
    attributes:
      fragment_of:
        range: ChemicalEntity
      fractions:                 # ordered M+0, M+1, ...
        range: float
        multivalued: true
      tracer:
        description: e.g. "[U-13C6] glucose"

Isotopologue/isotopomer relations already exist; this adds the distribution object that fluxomics measures. (EMU could be added later as a fragment construct if structured isotope simulation is in scope.)

7.4 Network-modeling layer (companion schema, sketch)

classes:
  Compartment:
    description: A bounded cellular space (e.g. cytosol, mitochondrion).
  MetabolicFlux:
    description: >-
      An estimated or observed throughput through a reaction under a specific
      condition, with units and uncertainty.
    attributes:
      reaction:        {range: Reaction}
      value:           {range: float}
      unit:            {description: e.g. mmol/gDW/h}
      lower_bound:     {range: float}
      upper_bound:     {range: float}
      confidence_low:  {range: float}
      confidence_high: {range: float}
      condition:       {range: GrowthCondition}
  Objective:
    description: FBA objective (reaction coefficients to maximize/minimize).
  Tracer:
    description: >-
      A labeled substrate used in an isotope-labeling experiment, specifying
      which isotope sits at which atom position(s).
    attributes:
      substrate:        {range: ChemicalEntity}
      isotope:          {range: Isotope}        # e.g. carbon-13
      labeled_positions:                        # e.g. [1, 2] for [1,2-13C]
        range: integer
        multivalued: true
      purity:           {range: float}          # fractional isotopic purity
  FluxomicsExperiment:
    description: >-
      A single fluxomics experiment, typed along the axes in section 2.5.
    attributes:
      inference_paradigm: {range: FluxInferenceParadigmEnum}
      tracers:            {range: Tracer, multivalued: true}  # >1 ⇒ parallel/COMPLETE-MFA
      measurement_platform: {range: FluxMeasurementPlatformEnum}
      isotopic_steady_state: {range: boolean}
      timepoints:         {range: float, multivalued: true}   # for INST/dynamic
      condition:          {range: GrowthCondition}
enums:
  FluxInferenceParadigmEnum:    # Axis A
    permissible_values:
      flux_balance_analysis: {}
      stoichiometric_mfa: {}
      stationary_13C_mfa: {}
      nonstationary_mfa: {}      # INST-MFA
      dynamic_mfa: {}
      flux_ratio_analysis: {}
  FluxMeasurementPlatformEnum:  # Axis D
    permissible_values:
      GC_MS: {}
      LC_MS: {}
      tandem_MS: {}
      NMR: {}

A multivalued tracers slot naturally captures parallel labeling / COMPLETE-MFA (more than one tracer for the same model), and isotope + labeled_positions on Tracer covers Axes B and C (positional vs uniform, ¹³C vs ¹⁵N/²H/¹⁸O). This keeps "experiment type" as a few small controlled vocabularies rather than one flat enum.

7.5 SBO/SBML alignment

Tag reaction subtypes (transport, exchange, biomass pseudo-reaction) so models round-trip with SBML-fbc. ChEMROF already has is_transport; an enum or SBO cross-reference for exchange / biomass / demand/sink reactions would complete the picture.

8. Recommendation

  1. Adopt Option A as the overall architecture: a fluxomics LinkML module that imports ChEMROF, keeping systems-biology scope out of the chemistry schema.
  2. In ChEMROF itself, make the small chemistry-adjacent additions that are independently useful and clearly in-scope:
  3. signed/float stoichiometry (or a parallel stoichiometric_coefficient),
  4. an AtomTransition construct reusing AtomOccurrence,
  5. a MassIsotopomerDistribution class to complement the existing isotopologue/isotopomer relations.
  6. Validate against real examples: (a) for the isotope path, encode one well-characterized pathway (e.g. glycolysis/TCA) with atom mappings and a [U-¹³C]glucose tracer and round-trip a small FBA model from BiGG; (b) for the kinetic path, reuse the methionine-cycle Maud model dissected in Appendix A — its metabolites already carry InChIKeys and BiGG IDs, so it is a ready-made test of ChEMROF as the metabolite/reaction identity provider.
  7. Engage standards: align reaction typing with SBO, and ensure reaction and metabolite identifiers map cleanly to BiGG/MetaNetX/Rhea so ChEMROF can act as the chemical-identity hub for fluxomics datasets.

Appendix A. Worked example: the biosustain methionine-cycle (Maud) model

To ground the analysis, this appendix dissects a real public model — biosustain/Methionine_model (data/methionine). It is a Maud model: Bayesian inference of a kinetic metabolic model with thermodynamic constraints (Stan/HMC under the hood). It is the kinetic / dynamic experiment type from §2.5 — not ¹³C-MFA — which makes it a useful contrast: it stresses ChEMROF's kinetics and identity features and needs none of the isotope/atom-mapping machinery.

The methionine cycle is modeled in one compartment (c) with 10 reactions (METAT, METH, GNMT, AHC, MS, BHMT, CBS, MTHFR, PROT, plus a met-L-source drain) over 19 metabolites (methionine, ATP, S-adenosyl­methionine, S-adenosyl­homocysteine, homocysteine, 5-methyl-THF, …).

What maps cleanly onto ChEMROF today

  • Metabolites → ChemicalEntity. Every metabolite is given by InChIKey and a BiGG source URL, e.g. met-L → FFEARJCKVFRZRR-BYPYZUCNSA-N (bigg met__L). ChEMROF already has inchi_key_string and the bigg.metabolite prefix — this is exactly the identity-hub role ChEMROF is built for, and is its clearest immediate value to such a project.
  • Reactions → Reaction + ReactionParticipant. Each reaction has a signed stoichiometry table; e.g. METAT: met-L −1, atp −1, pi +1, ppi +1, amet +1.
  • Kinetic parameters → existing slots. Priors are specified for kcat (per enzyme/reaction) and km (per metabolite/enzyme/reaction) — directly the ChEMROF kcat and michaelis_constant slots.

What the example proves ChEMROF is missing (cross-referencing §5)

Maud construct (this model) ChEMROF status
stoichiometry = -1.0 / 1.0 (signed float) gap #1 — ChEMROF stoichiometry is integer
target_type = "flux" measurements with error gap #2 — no measured/estimated flux quantity
compartment + metabolite_in_compartment (balanced = internal/boundary) gap #4 — no compartment model
mechanism = irreversible_michaelis_menten / reversible_michaelis_menten / drain gap #9 — no rate-law/mechanism vocabulary
ki priors; allostery (activation/inhibition); competitive_inhibition gaps #9/#10 — no Ki, no enzyme-regulation relations
dgf (ΔGf°), temperature, transported_charge, psi gap #11 — no reaction thermodynamics
experiment blocks with is_train/is_test, enzyme_knockouts gap #7 — no experiment/condition context
enzyme / enzyme_reaction / subunits gap #8 — GPR; out of ChEMROF scope

Two things worth emphasizing

  • No atom mappings, isotopomers, or MIDs appear anywhere in this model. That is not a deficiency — it confirms §2.5's claim that the experiment type selects which extensions matter. A kinetic model needs mechanism/Ki/ΔGf° and measured flux+concentration; the §7.2–7.3 isotope constructs are simply irrelevant here.
  • ChEMROF already does the part that is hardest to get right — unambiguous chemical identity (InChIKey, formula, charge, and the cross-refs needed to later attach ΔGf° and pKa). The missing pieces are the systems-biology modeling layer, which (per Option A) belongs in a companion schema that imports ChEMROF and reuses ChemicalEntity/Reaction/Concentration.

Implemented proof of concept. This converter now exists: chemrof convert-maud <model.toml> (module chemrof.converter.maud) ingests a Maud kinetic model and emits a ChEMROF Collection of SmallMolecule records (keyed by InChIKey) plus Reaction/ReactionParticipant records, including the reaction mechanism and regulation. To support it, ChEMROF gained (in-place, per the agreed scope):

  • a reaction_mechanism slot + ReactionMechanismEnum (reversible/irreversible Michaelis-Menten, mass action, drain);
  • AllostericRegulation and CompetitiveInhibition classes (with an EnzymeModificationTypeEnum), attached to Reaction via has_allosteric_regulation / has_competitive_inhibition;
  • an inhibition_constant (Ki) slot alongside kcat/michaelis_constant;
  • float stoichiometry on ReactionParticipant (and the participant/ stoichiometry slots are now properly attached to that class);
  • inchi_key_string added to ChemicalEntity.

The full methionine_cycle.toml round-trips and validates against the schema (29 entities). Bayesian priors, measured fluxes/concentrations, compartments, and thermodynamics (ΔGf°) remain future work for a companion modelling layer.

9. Sources