"""Example for substance units."""
from sbmlutils.examples import templates
from sbmlutils.factory import *
from sbmlutils.metadata.sbo import *
[docs]class U(Units):
"""UnitsDefinitions."""
[docs] kg = UnitDefinition("kg", "kg")
[docs] min = UnitDefinition("min", "min")
[docs] m2 = UnitDefinition("m2", "meter^2")
[docs] m3 = UnitDefinition("m3", "meter^3")
[docs] mM = UnitDefinition("mM", "mmole/liter")
[docs] mmole = UnitDefinition("mmole", "mmole")
[docs] per_mmole = UnitDefinition("per_mmole", "1/mmole")
[docs] mmole_per_min = UnitDefinition("mmole_per_min", "mmole/min")
[docs] per_min = UnitDefinition("per_min", "1/min")
[docs]model = Model(
"multiple_substance_units",
name="model with multiple substance units",
notes="""
# Example model for multiple substance units
The substance units for species are restricted to a single substance unit so that
reaction rates are in [substance_units/time_units] in an SBML model.
Applying species conversion factors allows to have distinct subsets of species with
different units in a single model.
A typical example is the combination of metabolic compounds (simple chemicals) often
in mmole with proteins in a single model.
"""
+ templates.terms_of_use,
creators=templates.creators,
units=U,
model_units=ModelUnits(
time=U.min,
extent=U.mmole,
substance=U.mmole,
length=U.meter,
area=U.m2,
volume=U.liter,
),
compartments=[
Compartment(
sid="cyto",
value=1.0,
unit=U.liter,
name="cytosol",
sboTerm=SBO.PHYSICAL_COMPARTMENT,
),
],
parameters=[
Parameter(
sid="cf_units_per_mmole",
value=1.0,
unit=U.per_mmole,
name="dimensionless species conversion",
sboTerm=SBO.QUANTITATIVE_SYSTEMS_DESCRIPTION_PARAMETER,
)
],
species=[
Species(
sid="glc",
compartment="cyto",
initialConcentration=3.0,
substanceUnit=U.mmole,
name="D-glucose",
sboTerm=SBO.SIMPLE_CHEMICAL,
),
Species(
sid="glc6p",
compartment="cyto",
initialConcentration=0.5,
substanceUnit=U.mmole,
name="D-glucose 6-phosphate",
sboTerm=SBO.SIMPLE_CHEMICAL,
),
Species(
sid="hex1",
compartment="cyto",
initialConcentration=1.0,
substanceUnit=U.dimensionless,
name="hexokinase protein",
sboTerm=SBO.MACROMOLECULE,
conversionFactor="cf_units_per_mmole",
hasOnlySubstanceUnits=True,
notes="""
extent * conversionfactor = substanceUnit
mmole * 1/mmole = dimensionless
""",
),
],
)
model.reactions = [
Reaction(
sid="HEX1SYNTHESIS",
name="hexokinase synthesis",
equation="-> hex1",
compartment="cyto",
sboTerm=SBO.BIOCHEMICAL_REACTION,
pars=[
Parameter(
sid="HEX1SYNTHESIS_k",
value=1.0,
unit=U.mmole_per_min,
sboTerm=SBO.MAXIMAL_VELOCITY,
),
],
formula=(
"HEX1SYNTHESIS_k",
U.mmole_per_min,
),
),
Reaction(
sid="HEX1",
name="hexokinase",
equation="glc -> glc6p [hex1]",
compartment="cyto",
sboTerm=SBO.BIOCHEMICAL_REACTION,
pars=[
Parameter(
sid="HEX1_Vmax",
value=1.0,
unit=U.mmole_per_min,
sboTerm=SBO.MAXIMAL_VELOCITY,
),
Parameter(
sid="HEX1_Km_glc",
value=0.1,
unit=U.mM,
sboTerm=SBO.MICHAELIS_CONSTANT,
),
],
formula=(
"HEX1_Vmax * hex1 * glc/(HEX1_Km_glc + glc)",
U.mmole_per_min,
),
),
]
if __name__ == "__main__":
from sbmlutils.resources import EXAMPLES_DIR
create_model(
model=model,
filepath=EXAMPLES_DIR / f"{model.sid}.xml",
)