Esempio n. 1
0
def create_port_doc():
    sbmlns = libsbml.SBMLNamespaces(3, 1, "comp", 1)
    doc = libsbml.SBMLDocument(sbmlns)
    doc.setPackageRequired("comp", True)
    model = doc.createModel()
    model.setId("toy_update")
    model.setName("toy (UPDATE submodel)")
    model.setSBOTerm(SBO_CONTINOUS_FRAMEWORK)

    objects = [
        fac.Compartment(
            sid="extern",
            value=1.0,
            unit="m3",
            constant=True,
            name="external compartment",
        ),
        fac.Species(
            sid="A",
            name="A",
            initialConcentration=10.0,
            hasOnlySubstanceUnits=True,
            compartment="extern",
        ),
        fac.Species(
            sid="C",
            name="C",
            initialConcentration=0,
            hasOnlySubstanceUnits=True,
            compartment="extern",
        ),
        fac.Parameter(sid="EX_A",
                      value=1.0,
                      constant=False,
                      sboTerm="SBO:0000613"),
        fac.Parameter(sid="EX_C",
                      value=1.0,
                      constant=False,
                      sboTerm="SBO:0000613"),
    ]
    fac.create_objects(model, obj_iter=objects)
    return doc
Esempio n. 2
0
def create_fba_doc():
    sbmlns = libsbml.SBMLNamespaces(3, 1)
    sbmlns.addPackageNamespace("fbc", 2)
    sbmlns.addPackageNamespace("comp", 1)

    doc = libsbml.SBMLDocument(sbmlns)
    doc.setPackageRequired("comp", True)
    doc.setPackageRequired("fbc", False)
    model = doc.createModel()
    mplugin = model.getPlugin("fbc")
    mplugin.setStrict(True)

    objects = [
        fac.Compartment(sid='cell', value=1.0),
        fac.Species(sid='A', initialConcentration=0, compartment="cell"),
        fac.Species(sid='B', initialConcentration=0, compartment="cell"),
    ]
    fac.create_objects(model, objects)

    return doc
Esempio n. 3
0
def fba_model(sbml_file, directory, annotations=None):
    """ FBA model
    
    :param sbml_file: output file name 
    :param directory: output directory
    :return: SBMLDocument
    """
    fba_notes = notes.format("""
    <h2>FBA submodel</h2>
    <p>DFBA fba submodel. Unbalanced metabolites are encoded via exchange fluxes.</p>
    """)
    doc = builder.template_doc_fba(settings.MODEL_ID)
    model = doc.getModel()
    utils.set_model_info(model,
                         notes=fba_notes,
                         creators=creators,
                         units=units,
                         main_units=main_units)

    objects = [
        # compartments
        mc.Compartment(sid='cell',
                       value=1.0,
                       unit=UNIT_VOLUME,
                       constant=True,
                       name='cell',
                       spatialDimensions=3),

        # exchange species
        mc.Species(sid='atp',
                   name="ATP",
                   initialConcentration=0,
                   substanceUnit=UNIT_AMOUNT,
                   hasOnlySubstanceUnits=False,
                   compartment="cell"),
        mc.Species(sid='adp',
                   name="ADP",
                   initialConcentration=0,
                   substanceUnit=UNIT_AMOUNT,
                   hasOnlySubstanceUnits=False,
                   compartment="cell"),
        mc.Species(sid='glc',
                   name="Glucose",
                   initialConcentration=0,
                   substanceUnit=UNIT_AMOUNT,
                   hasOnlySubstanceUnits=False,
                   compartment="cell"),
        mc.Species(sid='pyr',
                   name='Pyruvate',
                   initialConcentration=0,
                   substanceUnit=UNIT_AMOUNT,
                   hasOnlySubstanceUnits=False,
                   compartment="cell"),

        # internal species
        mc.Species(sid='fru16bp',
                   name='Fructose 1,6-bisphospate',
                   initialConcentration=0,
                   substanceUnit=UNIT_AMOUNT,
                   hasOnlySubstanceUnits=False,
                   compartment="cell"),
        mc.Species(sid='pg2',
                   name='2-Phosphoglycerate',
                   initialConcentration=0,
                   substanceUnit=UNIT_AMOUNT,
                   hasOnlySubstanceUnits=False,
                   compartment="cell"),

        # bounds
        mc.Parameter(sid="ub_R3",
                     value=1.0,
                     unit=UNIT_FLUX,
                     constant=True,
                     sboTerm=builder.FLUX_BOUND_SBO),
        mc.Parameter(sid="zero",
                     value=0.0,
                     unit=UNIT_FLUX,
                     constant=True,
                     sboTerm=builder.FLUX_BOUND_SBO),
        mc.Parameter(sid="ub_default",
                     value=builder.UPPER_BOUND_DEFAULT,
                     unit=UNIT_FLUX,
                     constant=True,
                     sboTerm=builder.FLUX_BOUND_SBO),
    ]
    mc.create_objects(model, objects)

    # reactions
    r1 = mc.create_reaction(model,
                            rid="R1",
                            name="glu + 2 atp -> fru16bp + 2 adp",
                            fast=False,
                            reversible=False,
                            reactants={
                                "glc": 1,
                                "atp": 2
                            },
                            products={
                                "fru16bp": 1,
                                'adp': 2
                            },
                            compartment='cell')
    r2 = mc.create_reaction(model,
                            rid="R2",
                            name="fru16bp -> 2 pg2",
                            fast=False,
                            reversible=False,
                            reactants={"fru16bp": 1},
                            products={"pg2": 2},
                            compartment='cell')
    r3 = mc.create_reaction(model,
                            rid="R3",
                            name="pg2 + adp -> pyr + atp",
                            fast=False,
                            reversible=False,
                            reactants={
                                "pg2": 1,
                                "adp": 2
                            },
                            products={
                                "pyr": 1,
                                "atp": 2
                            },
                            compartment='cell')

    # flux bounds
    fbc.set_flux_bounds(r1, lb="zero", ub="ub_default")
    fbc.set_flux_bounds(r2, lb="zero", ub="ub_default")
    fbc.set_flux_bounds(r3, lb="zero", ub="ub_R3")
    # fbc.set_flux_bounds(ratp, lb="zero", ub="ub_RATP")

    # exchange reactions
    for sid in ['atp', 'adp', 'glc', 'pyr']:
        builder.create_exchange_reaction(model,
                                         species_id=sid,
                                         flux_unit=UNIT_FLUX)

    # objective function
    model_fbc = model.getPlugin("fbc")
    fbc.create_objective(model_fbc,
                         oid="RATP_maximize",
                         otype="maximize",
                         fluxObjectives={"R3": 1.0},
                         active=True)

    if annotations:
        annotator.annotate_sbml_doc(doc, annotations)

    # write SBML
    sbmlio.write_sbml(doc,
                      filepath=os.path.join(directory, sbml_file),
                      validate=True)
    return doc
Esempio n. 4
0
for unit in units:
    ports.append(
        mcomp.Port(sid="{}{}".format(unit.sid, PORT_SUFFIX), unitRef=unit.sid))

##############################################################
# Functions
##############################################################
functions = []

##############################################################
# Compartments
##############################################################
compartments = [
    mc.Compartment('Vpl',
                   value=3.0,
                   unit=UNIT_KIND_LITRE,
                   constant=False,
                   name='plasma',
                   port=True),
    mc.Compartment('Vrbc',
                   value=0.0,
                   unit=UNIT_KIND_LITRE,
                   constant=False,
                   name='erythrocyte'),
]

##############################################################
# Species
##############################################################

# tissue metabolites
species = [
Esempio n. 5
0
for unit in units:
    ports.append(
        mcomp.Port(sid="{}{}".format(unit.sid, PORT_SUFFIX), unitRef=unit.sid)
    )

##############################################################
# Functions
##############################################################
functions = []

##############################################################
# Compartments
##############################################################
compartments = [
    mc.Compartment('Vli', value=1.47, unit=UNIT_KIND_LITRE, constant=False, name='liver', port=True),
    mc.Compartment('Vext', value=1.0, unit=UNIT_KIND_LITRE, constant=False, name='liver blood', port=True),
]

##############################################################
# Species
##############################################################
species = [
    mc.Species('Aext_glc', compartment="Vext", initialConcentration=5.0, unit='mmole',
               name="glucose", hasOnlySubstanceUnits=True, port=True),
    mc.Species('Aext_lac', compartment="Vext", initialConcentration=0.8, unit='mmole',
               name="lactate", hasOnlySubstanceUnits=True, port=True),
    mc.Species('Ali_glc', compartment="Vli", initialConcentration=5.0, unit='mmole',
               name="glucose", hasOnlySubstanceUnits=True),
    mc.Species('Ali_lac', compartment="Vli", initialConcentration=0.8, unit='mmole',
               name="lactate", hasOnlySubstanceUnits=True),
Esempio n. 6
0
def fba_model(sbml_file, directory, annotations=None):
    """ FBA model
    
    :param sbml_file: output file name 
    :param directory: output directory
    :return: SBMLDocument
    """
    fba_notes = notes.format("""
    <h2>FBA submodel</h2>
    <p>DFBA fba submodel. Unbalanced metabolites are encoded via exchange fluxes.</p>
    """)
    doc = builder.template_doc_fba(settings.MODEL_ID)
    model = doc.getModel()
    utils.set_model_info(model,
                         notes=fba_notes,
                         creators=creators,
                         units=units,
                         main_units=main_units)

    objects = [
        # compartments
        mc.Compartment(sid='extern',
                       value=1.0,
                       unit=UNIT_VOLUME,
                       constant=True,
                       name='external compartment',
                       spatialDimensions=3),
        mc.Compartment(sid='cell',
                       value=1.0,
                       unit=UNIT_VOLUME,
                       constant=True,
                       name='cell',
                       spatialDimensions=3),
        mc.Compartment(sid='membrane',
                       value=1.0,
                       unit=UNIT_AREA,
                       constant=True,
                       name='membrane',
                       spatialDimensions=2),

        # exchange species
        mc.Species(sid='A',
                   name="A",
                   initialConcentration=0,
                   substanceUnit=UNIT_AMOUNT,
                   hasOnlySubstanceUnits=True,
                   compartment="extern"),
        mc.Species(sid='C',
                   name="C",
                   initialConcentration=0,
                   substanceUnit=UNIT_AMOUNT,
                   hasOnlySubstanceUnits=True,
                   compartment="extern"),

        # internal species
        mc.Species(sid='B1',
                   name="B1",
                   initialConcentration=0,
                   substanceUnit=UNIT_AMOUNT,
                   hasOnlySubstanceUnits=True,
                   compartment="cell"),
        mc.Species(sid='B2',
                   name="B2",
                   initialConcentration=0,
                   substanceUnit=UNIT_AMOUNT,
                   hasOnlySubstanceUnits=True,
                   compartment="cell"),

        # bounds
        mc.Parameter(sid="ub_R1",
                     value=1.0,
                     unit=UNIT_FLUX,
                     constant=True,
                     sboTerm=builder.FLUX_BOUND_SBO),
        mc.Parameter(sid="zero",
                     value=0.0,
                     unit=UNIT_FLUX,
                     constant=True,
                     sboTerm=builder.FLUX_BOUND_SBO),
        mc.Parameter(sid="ub_default",
                     value=builder.UPPER_BOUND_DEFAULT,
                     unit=UNIT_FLUX,
                     constant=True,
                     sboTerm=builder.FLUX_BOUND_SBO),
    ]
    mc.create_objects(model, objects)

    # reactions
    r1 = mc.create_reaction(model,
                            rid="R1",
                            name="A import (R1)",
                            fast=False,
                            reversible=True,
                            reactants={"A": 1},
                            products={"B1": 1},
                            compartment='membrane')
    r2 = mc.create_reaction(model,
                            rid="R2",
                            name="B1 <-> B2 (R2)",
                            fast=False,
                            reversible=True,
                            reactants={"B1": 1},
                            products={"B2": 1},
                            compartment='cell')
    r3 = mc.create_reaction(model,
                            rid="R3",
                            name="B2 export (R3)",
                            fast=False,
                            reversible=True,
                            reactants={"B2": 1},
                            products={"C": 1},
                            compartment='membrane')

    # flux bounds
    fbc.set_flux_bounds(r1, lb="zero", ub="ub_R1")
    fbc.set_flux_bounds(r2, lb="zero", ub="ub_default")
    fbc.set_flux_bounds(r3, lb="zero", ub="ub_default")

    # exchange reactions
    builder.create_exchange_reaction(model,
                                     species_id="A",
                                     flux_unit=UNIT_FLUX)
    builder.create_exchange_reaction(model,
                                     species_id="C",
                                     flux_unit=UNIT_FLUX)

    # objective function
    model_fbc = model.getPlugin("fbc")
    fbc.create_objective(model_fbc,
                         oid="R3_maximize",
                         otype="maximize",
                         fluxObjectives={"R3": 1.0},
                         active=True)

    # create ports for kinetic bounds
    comp.create_ports(model, portType=comp.PORT_TYPE_PORT, idRefs=["ub_R1"])

    # write SBML
    if annotations:
        annotator.annotate_sbml_doc(doc, annotations)
    sbml.write_sbml(doc,
                    filepath=os.path.join(directory, sbml_file),
                    validate=True)
    return doc
Esempio n. 7
0
])

##############################################################
# Functions
##############################################################
functions.extend([
    mc.Function('max', 'lambda(x,y, piecewise(x,gt(x,y),y) )', name='minimum of arguments'),
    mc.Function('min', 'lambda(x,y, piecewise(x,lt(x,y),y) )', name='maximum of arguments'),
])

##############################################################
# Compartments
##############################################################
compartments.extend([
    mc.Compartment(sid='ext', unit=UNIT_KIND_LITRE, constant=False, value=1.0, name='blood', port=True),
    mc.Compartment(sid='cyto', unit=UNIT_KIND_LITRE, constant=False, value='V_cyto', name='cytosol', port=True),
    mc.Compartment(sid='mito', unit=UNIT_KIND_LITRE, constant=False, value='V_mito', name='mitochondrion'),
    mc.Compartment(sid='pm', spatialDimensions=2, unit='m2', constant=True, value='1.0 m2', name='plasma membrane'),
    mc.Compartment(sid='mm', spatialDimensions=2, unit='m2', constant=True, value='1.0 m2',
                   name='mitochondrial membrane'),
])

##############################################################
# Species
##############################################################
species.extend([
    mc.Species('Aatp', compartment='cyto', initialConcentration=2.8000, unit='mmole', boundaryCondition=True, hasOnlySubstanceUnits=True, name='ATP'),
    mc.Species('Aadp', compartment='cyto', initialConcentration=0.8000, unit='mmole', boundaryCondition=True, hasOnlySubstanceUnits=True, name='ADP'),
    mc.Species('Aamp', compartment='cyto', initialConcentration=0.1600, unit='mmole', boundaryCondition=True, hasOnlySubstanceUnits=True, name='AMP'),
    mc.Species('Autp', compartment='cyto', initialConcentration=0.2700, unit='mmole', boundaryCondition=False, hasOnlySubstanceUnits=True, name='UTP'),
Esempio n. 8
0
def test_modelcreator_notebook():
    """
    If this test fails the respective notebook must be updated:
    :return:
    """

    import libsbml
    from libsbml import (UNIT_KIND_SECOND, UNIT_KIND_ITEM, UNIT_KIND_MOLE,
                         UNIT_KIND_KILOGRAM, UNIT_KIND_METRE, UNIT_KIND_LITRE)

    from sbmlutils import comp
    from sbmlutils import fbc
    from sbmlutils import sbmlio
    from sbmlutils import factory as fac
    from sbmlutils.dfba import builder, utils

    main_units = {
        'time': 's',
        'extent': UNIT_KIND_ITEM,
        'substance': UNIT_KIND_ITEM,
        'length': 'm',
        'area': 'm2',
        'volume': 'm3',
    }
    units = [
        fac.Unit('s', [(UNIT_KIND_SECOND, 1.0)]),
        fac.Unit('item', [(UNIT_KIND_ITEM, 1.0)]),
        fac.Unit('kg', [(UNIT_KIND_KILOGRAM, 1.0)]),
        fac.Unit('m', [(UNIT_KIND_METRE, 1.0)]),
        fac.Unit('m2', [(UNIT_KIND_METRE, 2.0)]),
        fac.Unit('m3', [(UNIT_KIND_METRE, 3.0)]),
        fac.Unit('mM', [(UNIT_KIND_MOLE, 1.0, 0),
                        (UNIT_KIND_METRE, -3.0)]),
        fac.Unit('per_s', [(UNIT_KIND_SECOND, -1.0)]),
        fac.Unit('item_per_s', [(UNIT_KIND_ITEM, 1.0),
                                (UNIT_KIND_SECOND, -1.0)]),
        fac.Unit('item_per_m3', [(UNIT_KIND_ITEM, 1.0),
                                 (UNIT_KIND_METRE, -3.0)]),
    ]

    UNIT_TIME = 's'
    UNIT_AMOUNT = 'item'
    UNIT_AREA = 'm2'
    UNIT_VOLUME = 'm3'
    UNIT_CONCENTRATION = 'item_per_m3'
    UNIT_FLUX = 'item_per_s'

    # Create SBMLDocument with fba
    doc = builder.template_doc_fba(model_id="toy")
    model = doc.getModel()

    utils.set_units(model, units)
    utils.set_main_units(model, main_units)

    objects = [
        # compartments
        fac.Compartment(sid='extern', value=1.0, unit=UNIT_VOLUME, constant=True, name='external compartment',
                        spatialDimensions=3),
        fac.Compartment(sid='cell', value=1.0, unit=UNIT_VOLUME, constant=True, name='cell', spatialDimensions=3),
        fac.Compartment(sid='membrane', value=1.0, unit=UNIT_AREA, constant=True, name='membrane', spatialDimensions=2),

        # exchange species
        fac.Species(sid='A', name="A", value=0, substanceUnit=UNIT_AMOUNT, hasOnlySubstanceUnits=True,
                    compartment="extern"),
        fac.Species(sid='C', name="C", value=0, substanceUnit=UNIT_AMOUNT, hasOnlySubstanceUnits=True,
                    compartment="extern"),

        # internal species
        fac.Species(sid='B1', name="B1", value=0, substanceUnit=UNIT_AMOUNT, hasOnlySubstanceUnits=True,
                    compartment="cell"),
        fac.Species(sid='B2', name="B2", value=0, substanceUnit=UNIT_AMOUNT, hasOnlySubstanceUnits=True,
                    compartment="cell"),

        # bounds
        fac.Parameter(sid="ub_R1", value=1.0, unit=UNIT_FLUX, constant=True, sboTerm=builder.FLUX_BOUND_SBO),
        fac.Parameter(sid="zero", value=0.0, unit=UNIT_FLUX, constant=True, sboTerm=builder.FLUX_BOUND_SBO),
        fac.Parameter(sid="ub_default", value=builder.UPPER_BOUND_DEFAULT, unit=UNIT_FLUX, constant=True,
                      sboTerm=builder.FLUX_BOUND_SBO),
    ]
    fac.create_objects(model, objects)

    # reactions
    r1 = fac.create_reaction(model, rid="R1", name="A import (R1)", fast=False, reversible=True,
                             reactants={"A": 1}, products={"B1": 1}, compartment='membrane')
    r2 = fac.create_reaction(model, rid="R2", name="B1 <-> B2 (R2)", fast=False, reversible=True,
                             reactants={"B1": 1}, products={"B2": 1}, compartment='cell')
    r3 = fac.create_reaction(model, rid="R3", name="B2 export (R3)", fast=False, reversible=True,
                             reactants={"B2": 1}, products={"C": 1}, compartment='membrane')

    # flux bounds
    fbc.set_flux_bounds(r1, lb="zero", ub="ub_R1")
    fbc.set_flux_bounds(r2, lb="zero", ub="ub_default")
    fbc.set_flux_bounds(r3, lb="zero", ub="ub_default")

    # exchange reactions
    builder.create_exchange_reaction(model, species_id="A", flux_unit=UNIT_FLUX)
    builder.create_exchange_reaction(model, species_id="C", flux_unit=UNIT_FLUX)

    # objective function
    model_fbc = model.getPlugin("fbc")
    fac.create_objective(model_fbc, oid="R3_maximize", otype="maximize",
                         fluxObjectives={"R3": 1.0}, active=True)

    # write SBML file
    import tempfile
    sbml_file = tempfile.NamedTemporaryFile(suffix=".xml")
    sbmlio.write_sbml(doc=doc, filepath=sbml_file.name)
                        (UNIT_KIND_SECOND, -1.0, 0, 3600)]),
    mc.Unit('min_per_h', [(UNIT_KIND_SECOND, 1.0, 0, 60),
                          (UNIT_KIND_SECOND, -1.0, 0, 3600)]),
    mc.Unit('ml_per_litre', [(UNIT_KIND_LITRE, 1.0, -3, 1.0),
                             (UNIT_KIND_LITRE, -1.0, 0, 1)]),
    mc.Unit('mulitre_per_g', [(UNIT_KIND_LITRE, 1.0, -6, 1.0),
                              (UNIT_KIND_GRAM, -1.0, 0, 1)]),
]

##############################################################
# Compartments
##############################################################
compartments = [
    mc.Compartment('Vre',
                   value=1,
                   unit=UNIT_KIND_LITRE,
                   constant=False,
                   name='rest of body'),
    mc.Compartment('Vgu',
                   value=1,
                   unit=UNIT_KIND_LITRE,
                   constant=False,
                   name='gut'),
    mc.Compartment('Vki',
                   value=1,
                   unit=UNIT_KIND_LITRE,
                   constant=False,
                   name='kidney'),
    mc.Compartment('Vli',
                   value=1,
                   unit=UNIT_KIND_LITRE,
Esempio n. 10
0
for unit in units:
    ports.append(
        mcomp.Port(sid="{}{}".format(unit.sid, PORT_SUFFIX), unitRef=unit.sid))

##############################################################
# Functions
##############################################################
functions = []

##############################################################
# Compartments
##############################################################
compartments = [
    mc.Compartment('Vbr',
                   value=1.4,
                   unit=UNIT_KIND_LITRE,
                   constant=False,
                   name='brain tissue',
                   port=True),
    mc.Compartment('Vext',
                   value=1.0,
                   unit=UNIT_KIND_LITRE,
                   constant=False,
                   name='brain blood',
                   port=True),
]

##############################################################
# Species
##############################################################
species = [
    mc.Species('Aext_glc',