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
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
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
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 = [
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),
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
]) ############################################################## # 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'),
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,
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',