"""Annotation example.
Model demonstrates how to annotate model objects with SBOTerms and Terms from
other ontologies. Annotations use the functionality from `pymetadata`.
"""
from sbmlutils.examples import templates
from sbmlutils.factory import *
from sbmlutils.metadata import *
from sbmlutils.resources import EXAMPLES_DIR
[docs]class U(Units):
"""ModelDefinitions."""
[docs] mM = UnitDefinition("mM", "mmole/l")
[docs] m2 = UnitDefinition("m2", "meter^2")
[docs] m3 = UnitDefinition("m3", "meter^3")
[docs] kg = UnitDefinition("kg", "kg")
[docs] per_s = UnitDefinition("per_s", "1/s")
[docs] mole_per_s = UnitDefinition("mole_per_s", "mole/s")
[docs]model = Model(
sid="annotation",
name="model with inline annotations",
notes="""
# Model with inline annotations
Test model demonstrating inline annotations.
"""
+ templates.terms_of_use,
creators=templates.creators,
units=U,
model_units=ModelUnits(
time=U.second,
extent=U.mole,
substance=U.mole,
length=U.meter,
area=U.m2,
volume=U.m3,
),
)
model.compartments = [
Compartment(
sid="ext",
value="Vol_e",
unit=U.m3,
constant=True,
name="external",
sboTerm=SBO.PHYSICAL_COMPARTMENT,
annotations=[
(BQB.IS, "bto/BTO:0000089"), # blood
],
),
Compartment(
sid="cyto",
value="Vol_c",
unit=U.m3,
constant=False,
name="cytosol",
sboTerm=SBO.PHYSICAL_COMPARTMENT,
annotations=[
(BQB.IS, "go/GO:0005829"), # cytosol
(BQB.IS, "https://en.wikipedia.org/wiki/Cytosol"), # cytosol
],
),
Compartment(
sid="pm",
value="A_m",
unit=U.m2,
constant=True,
spatialDimensions=2,
name="membrane",
sboTerm=SBO.PHYSICAL_COMPARTMENT,
annotations=[
(BQB.IS, "go/GO:0005886"), # plasma membrane
],
),
]
model.species = [
Species(
sid="e__gal",
compartment="ext",
initialConcentration=3.0,
substanceUnit=U.mole,
boundaryCondition=True,
name="D-galactose",
sboTerm=SBO.SIMPLE_CHEMICAL,
annotations=[
(BQB.IS, "bigg.metabolite/gal"), # galactose
(BQB.IS, "chebi/CHEBI:28061"), # alpha-D-galactose
(BQB.IS, "vmhmetabolite/gal"),
],
),
Species(
sid="c__gal",
compartment="cyto",
initialConcentration=0.00012,
substanceUnit=U.mole,
boundaryCondition=False,
name="D-galactose",
sboTerm=SBO.SIMPLE_CHEMICAL,
),
]
model.parameters = [
Parameter(
sid="x_cell", value=25e-6, unit=U.meter, constant=True, name="cell diameter"
),
Parameter(
sid="Vol_e", value=100e-14, unit=U.m3, constant=True, name="external volume"
),
Parameter(sid="A_m", value=1.0, unit=U.m2, constant=True, name="membrane area"),
]
model.assignments = [
InitialAssignment(symbol="Vol_c", value="x_cell*x_cell*x_cell", unit=U.m3),
]
model.reactions = [
Reaction(
sid="e__GLUT2_GAL",
name="galactose transport [e__]",
equation="e__gal <-> c__gal []",
# C6H1206 (0) <-> C6H1206 (0)
compartment="pm",
pars=[
Parameter(sid="GLUT2_Vmax", value=1e-13, unit=U.mole_per_s),
Parameter("GLUT2_k_gal", 1.0, U.mM),
Parameter("GLUT2_keq", 1.0, U.dimensionless),
],
formula=(
"GLUT2_Vmax/GLUT2_k_gal * (e__gal - c__gal/GLUT2_keq)/"
"(1 dimensionless + c__gal/GLUT2_k_gal + e__gal/GLUT2_k_gal)",
U.mole_per_s,
),
annotations=[
(BQB.IS, "sbo/SBO:0000284"), # transporter
],
)
]
if __name__ == "__main__":
create_model(model=model, filepath=EXAMPLES_DIR / f"{model.sid}.xml")