1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
|
/**
* @file example2.cpp
* @brief SBML hierarchical composition example
* @author Lucian Smith
*
* This file is part of libSBML. Please visit http://sbml.org for more
* information about SBML, and the latest version of libSBML.
*/
#include <iostream>
#include <sstream>
#include <sbml/SBMLTypes.h>
#include <sbml/extension/SBMLExtensionRegister.h>
#include <sbml/extension/SBMLExtensionRegistry.h>
#include <sbml/packages/comp/extension/CompExtension.h>
#include <sbml/packages/comp/extension/CompSBasePlugin.h>
#include <sbml/packages/comp/extension/CompSBMLDocumentPlugin.h>
#include <sbml/packages/comp/extension/CompModelPlugin.h>
#ifdef WIN32
#include <conio.h>
#endif
LIBSBML_CPP_NAMESPACE_USE
using namespace std;
static SBMLExtensionRegister<CompExtension> compExtensionRegistry;
int main(int argc,char** argv){
int retval = 0;
SBMLNamespaces sbmlns(3,1,"comp",1);
// create the document
SBMLDocument *document = new SBMLDocument(&sbmlns);
CompSBMLDocumentPlugin* compdoc = static_cast<CompSBMLDocumentPlugin*>(document->getPlugin("comp"));
compdoc->setRequired(true);
ExternalModelDefinition* mod1 = compdoc->createExternalModelDefinition();
mod1->setId("teusink_glycolysis");
mod1->setName("Teusink2000_Glycolysis");
mod1->setSource("urn:miriam:biomodels.db:BIOMD0000000064");
// create the Model
Model* model=document->createModel();
model->setId("glycolysis_with_ports");
// Setup the submodel
CompModelPlugin* mplugin = static_cast<CompModelPlugin*>(model->getPlugin("comp"));
Submodel* submod1 = mplugin->createSubmodel();
submod1->setId("glycolysis");
submod1->setModelRef("teusink_glycolysis");
//Now create ports
Port port;
port.setId("cytosol_port");
port.setIdRef("glycolysis");
SBaseRef* sbr = port.createSBaseRef();
sbr->setIdRef("cytosol");
mplugin->addPort(&port);
port.setId("extracellular_port");
sbr->setIdRef("extracellular");
mplugin->addPort(&port);
/*$Glyc in cytosol, $Trh in cytosol, $CO2 in cytosol;
species $SUCC in cytosol, $GLCo in extracellular, $ETOH in cytosol, $GLY in cytosol;
species $ATP in cytosol, $ADP in cytosol, $AMP in cytosol, $SUM_P in cytosol;
species $F26BP in cytosol;
*/
port.setId("Glyc_port");
sbr->setIdRef("Glyc");
mplugin->addPort(&port);
port.setId("Trh_port");
sbr->setIdRef("Trh");
mplugin->addPort(&port);
port.setId("CO2_port");
sbr->setIdRef("CO2");
mplugin->addPort(&port);
port.setId("SUCC_port");
sbr->setIdRef("SUCC");
mplugin->addPort(&port);
port.setId("GLCo_port");
sbr->setIdRef("GLCo");
mplugin->addPort(&port);
port.setId("ETOH_port");
sbr->setIdRef("ETOH");
mplugin->addPort(&port);
port.setId("GLY_port");
sbr->setIdRef("GLY");
mplugin->addPort(&port);
port.setId("ATP_port");
sbr->setIdRef("ATP");
mplugin->addPort(&port);
port.setId("ADP_port");
sbr->setIdRef("ADP");
mplugin->addPort(&port);
port.setId("AMP_port");
sbr->setIdRef("AMP");
mplugin->addPort(&port);
port.setId("SUM_P_port");
sbr->setIdRef("SUM_P");
mplugin->addPort(&port);
port.setId("F26BP_port");
sbr->setIdRef("F26BP");
mplugin->addPort(&port);
writeSBMLToFile(document,"comp_example2.xml");
delete document;
document = readSBMLFromFile("comp_example2.xml");
if (document == NULL) {
cout << "Error reading back in file." << endl;
retval = -1;
}
else {
document->setConsistencyChecks(LIBSBML_CAT_UNITS_CONSISTENCY, false);
document->checkConsistency();
if (document->getErrorLog()->getNumFailsWithSeverity(2) > 0 || document->getErrorLog()->getNumFailsWithSeverity(3) > 0){
stringstream errorstream;
document->printErrors(errorstream);
cout << "Errors encoutered when round-tripping SBML file: \n" << errorstream.str() << endl;
retval = -1;
}
writeSBMLToFile(document, "comp_example2_rt.xml");
delete document;
}
#ifdef WIN32
if (retval != 0) {
cout << "(Press any key to exit.)" << endl;
_getch();
}
#endif
return retval;
}
|