END_TEST #ifdef LIBSBML_HAS_PACKAGE_LAYOUT START_TEST (test_transfer_moddef) { string filename(TestDataDirectory); filename += "ModelDefWithLayout.xml"; SBMLDocument* doc = readSBMLFromFile(filename.c_str()); string origmodstr = writeSBMLToString(doc); fail_unless(origmodstr.find("layout:") != string::npos); CompSBMLDocumentPlugin* compdoc = static_cast<CompSBMLDocumentPlugin*>(doc->getPlugin("comp")); compdoc->setRequired(true); ModelDefinition* transfer = compdoc->getModelDefinition("QuorumTrigger"); SBMLNamespaces sbmlns(3,1,"comp",1); LayoutPkgNamespaces layoutns(3, 1, 1, "layout"); sbmlns.addNamespaces(layoutns.getNamespaces()); SBMLDocument transferdoc(&sbmlns); transferdoc.createModel(); compdoc = static_cast<CompSBMLDocumentPlugin*>(transferdoc.getPlugin("comp")); compdoc->setRequired(true); compdoc->addModelDefinition(transfer); SBMLDocumentPlugin* layoutdoc = static_cast<SBMLDocumentPlugin*>(transferdoc.getPlugin("layout")); layoutdoc->setRequired(false); string newmodstr = writeSBMLToString(&transferdoc); filename = TestDataDirectory; filename += "test_transfer_moddef.xml"; doc = readSBMLFromFile(filename.c_str()); string compare = writeSBMLToString(doc); fail_unless(newmodstr == compare); }
END_TEST START_TEST (test_transfer_moddef2mod) { string filename(TestDataDirectory); filename += "ModelDefWithLayout.xml"; SBMLDocument* doc = readSBMLFromFile(filename.c_str()); CompSBMLDocumentPlugin* compdoc = static_cast<CompSBMLDocumentPlugin*>(doc->getPlugin("comp")); fail_unless(compdoc != NULL); ModelDefinition* transfer = compdoc->getModelDefinition("QuorumTrigger"); fail_unless(transfer != NULL); SBMLNamespaces sbmlns(3,1,"comp",1); LayoutPkgNamespaces layoutns(3, 1, 1, "layout"); sbmlns.addNamespaces(layoutns.getNamespaces()); SBMLDocument transferdoc(&sbmlns); transferdoc.setModel(transfer); SBMLDocumentPlugin* layoutdoc = static_cast<SBMLDocumentPlugin*>(transferdoc.getPlugin("layout")); layoutdoc->setRequired(false); compdoc = static_cast<CompSBMLDocumentPlugin*>(transferdoc.getPlugin("comp")); compdoc->setRequired(true); Model* newmod = transferdoc.getModel(); fail_unless(newmod != NULL); string newmodstr = writeSBMLToString(&transferdoc); filename = TestDataDirectory; filename += "test_transfer_moddef2mod.xml"; doc = readSBMLFromFile(filename.c_str()); string compare = writeSBMLToString(doc); fail_unless(newmodstr == compare); }
void convertLayoutToL3() { if (_doc == NULL || _doc->getModel() == NULL) return; layoutNsUri = "http://www.sbml.org/sbml/level3/version1/layout/version1"; layoutNs = new LayoutPkgNamespaces(3, 1, 1); #ifdef LIBSBML_HAS_PACKAGE_RENDER renderNsUri = "http://www.sbml.org/sbml/level3/version1/render/version1"; renderNs = new RenderPkgNamespaces(3, 1, 1); #endif LayoutModelPlugin* plugin = (LayoutModelPlugin*)_doc->getModel()->getPlugin("layout"); if (plugin == NULL) return; ConversionProperties prop(new SBMLNamespaces(3, 1)); prop.addOption("strict", false); prop.addOption("setLevelAndVersion", true); prop.addOption("ignorePackages", true); if (_doc->convert(prop) != LIBSBML_OPERATION_SUCCESS) { cout << "Conversion failed!" << endl; _doc->printErrors(); exit(2); } //plugin->setElementNamespace(layoutNsUri); SBMLDocumentPlugin *docPlugin = (SBMLDocumentPlugin*)_doc->getPlugin("layout"); if (docPlugin != NULL) docPlugin->setElementNamespace(layoutNsUri); _doc->getSBMLNamespaces()->addPackageNamespace("layout", 1); _doc->setPackageRequired("layout", false); #ifdef LIBSBML_HAS_PACKAGE_RENDER SBMLDocumentPlugin *rdocPlugin = (SBMLDocumentPlugin*)_doc->getPlugin("render"); if (rdocPlugin != NULL) { //rdocPlugin->setElementNamespace(renderNsUri); _doc->getSBMLNamespaces()->addPackageNamespace("render", 1); } else { _doc->enablePackage(renderNsUri, "render", true); } _doc->setPackageRequired("render", false); #endif }
void convertLayoutToL2() { if (_doc == NULL || _doc->getModel() == NULL) return; layoutNsUri = "http://projects.eml.org/bcb/sbml/level2"; layoutNs = new LayoutPkgNamespaces(2, 1); #ifdef LIBSBML_HAS_PACKAGE_RENDER foundRenderElements = false; renderNsUri = "http://projects.eml.org/bcb/sbml/render/level2"; renderNs = new RenderPkgNamespaces(2, 1); #endif LayoutModelPlugin* plugin = (LayoutModelPlugin*)_doc->getModel()->getPlugin("layout"); if (plugin == NULL) return; ConversionProperties prop(new SBMLNamespaces(2, 4)); prop.addOption("strict", false); prop.addOption("setLevelAndVersion", true); prop.addOption("ignorePackages", true); if (_doc->convert(prop) != LIBSBML_OPERATION_SUCCESS) { cout << "Conversion failed!" << endl; _doc->printErrors(); exit(2); } plugin->setElementNamespace(layoutNsUri); SBMLDocumentPlugin *docPlugin = (SBMLDocumentPlugin*)_doc->getPlugin("layout"); if (docPlugin != NULL) docPlugin->setElementNamespace(layoutNsUri); updateNs(plugin->getListOfLayouts()); _doc->getSBMLNamespaces()->removePackageNamespace(3, 1, "layout", 1); #ifdef LIBSBML_HAS_PACKAGE_RENDER SBMLDocumentPlugin *rdocPlugin = (SBMLDocumentPlugin*)_doc->getPlugin("render"); if (rdocPlugin!= NULL) rdocPlugin->setElementNamespace(renderNsUri); _doc->getSBMLNamespaces()->removePackageNamespace(3, 1, "render", 1); #endif }
int main(int argc,char** argv){ if (argc != 3) { cerr << "usage: removeRenderInformation <input file> <output file>" << endl; cerr << " removes the render information object from the input file." << endl; return 1; } string inputFile = argv[1]; string outputFile = argv[2]; SBMLDocument* doc = readSBMLFromFile(inputFile.c_str()); unsigned int numErrors = doc->getErrorLog()->getNumFailsWithSeverity(LIBSBML_SEV_ERROR); if (numErrors > 0) { cerr << "Encountered errors while reading the file. " << endl; cerr << "Please correct the following errors and try again." << endl; doc->printErrors(); return 2; } SBMLDocumentPlugin* plugin = (SBMLDocumentPlugin*) doc->getPlugin("render"); if (plugin == NULL) { // if this is a level 2 model, it could be that simply a render annotation is in place if (doc->getLevel() < 3) { LayoutModelPlugin* lPlugin = (LayoutModelPlugin*)doc->getModel()->getPlugin("layout"); deleteRenderInformationFromLayout(lPlugin); } else { cout << "Warning: the document did not use the render information in the first place. " << endl; } } else { // simply disable the package, this will cause it to no longer being written out doc->disablePackage(plugin->getURI(), plugin->getPrefix()); } string sbml = writeSBMLToString(doc); writeSBMLToFile(doc, outputFile.c_str()); return 0; }
void convertLayoutToL3() { if (_doc == NULL || _doc->getModel() == NULL) return; layoutNsUri = "http://www.sbml.org/sbml/level3/version1/layout/version1"; layoutNs = new LayoutPkgNamespaces(3, 1, 1); #ifdef CONVERT_RENDER renderNsUri = "http://www.sbml.org/sbml/level3/version1/render/version1"; renderNs = new RenderPkgNamespaces(3, 1, 1); #endif LayoutModelPlugin* plugin = (LayoutModelPlugin*)_doc->getModel()->getPlugin("layout"); if (plugin == NULL) return; ConversionProperties prop(new SBMLNamespaces(3, 1)); prop.addOption("strict", false); prop.addOption("setLevelAndVersion", true); prop.addOption("ignorePackages", true); _doc->convert(prop); plugin->setElementNamespace(layoutNsUri); SBMLDocumentPlugin *docPlugin = (SBMLDocumentPlugin*)_doc->getPlugin("layout"); if (docPlugin != NULL) docPlugin->setElementNamespace(layoutNsUri); updateNs(plugin->getListOfLayouts()); _doc->getSBMLNamespaces()->addPackageNamespace("layout", 1); _doc->setPackageRequired("layout", false); #ifdef CONVERT_RENDER SBMLDocumentPlugin *rdocPlugin = (SBMLDocumentPlugin*)_doc->getPlugin("render"); if (rdocPlugin != NULL) rdocPlugin->setElementNamespace(renderNsUri); _doc->getSBMLNamespaces()->addPackageNamespace("render", 1); _doc->setPackageRequired("render", false); #endif }
LIBSBML_CPP_NAMESPACE_USE BEGIN_C_DECLS START_TEST (test_SBMLDocumentPlugin_create) { TestPkgNamespaces ns(3, 1, 1); string uri = TestExtension::getXmlnsL3V1V1(); string prefix = "prefix"; std::vector<std::string> packageURIs; packageURIs.push_back(uri); // create a creator for TestModelPlugins SBaseExtensionPoint sbmldocExtPoint("core",SBML_DOCUMENT); SBasePluginCreator<SBMLDocumentPlugin, TestExtension> sbmldocPluginCreator(sbmldocExtPoint,packageURIs); fail_unless(sbmldocPluginCreator.getNumOfSupportedPackageURI() == 1); fail_unless(strcmp(sbmldocPluginCreator.getSupportedPackageURI(0).c_str(), uri.c_str()) == 0); fail_unless(strcmp(sbmldocPluginCreator.getSupportedPackageURI(10000).c_str(), "") == 0); fail_unless(sbmldocPluginCreator.getTargetExtensionPoint().getPackageName() == sbmldocExtPoint.getPackageName()); fail_unless(sbmldocPluginCreator.getTargetExtensionPoint().getTypeCode() == sbmldocExtPoint.getTypeCode()); fail_unless(sbmldocPluginCreator.getTargetPackageName() == sbmldocExtPoint.getPackageName()); fail_unless(sbmldocPluginCreator.getTargetSBMLTypeCode() == sbmldocExtPoint.getTypeCode()); fail_unless(sbmldocPluginCreator.isSupported(uri)); SBMLDocumentPlugin *plugin = sbmldocPluginCreator.createPlugin(uri, prefix, ns.getNamespaces()); fail_unless(plugin != NULL); fail_unless(plugin->isSetRequired() == false); fail_unless(plugin->getRequired() == true); plugin->setRequired(false); fail_unless(plugin->isSetRequired() == true); fail_unless(plugin->getRequired() == false); delete plugin; }
void writeSpatialSBML() { /* // SBMLNamespaces of SBML Level 3 Version 1 with Spatial Version 1 SBMLNamespaces sbmlns(3,1,"spatial",1); // SpatialPkgNamespaces spatialns(3,1,1); // add Required Elements package namespace sbmlns.addPkgNamespace("req", 1); */ // SBMLNamespaces of SBML Level 3 Version 1 with 'req' Version 1 // then add 'spatial' package namespace. RequiredElementsPkgNamespaces sbmlns(3,1,1); sbmlns.addPkgNamespace("spatial",1); // create the L3V1 document with spatial package SBMLDocument document(&sbmlns); // set 'required' attribute on document for 'spatial' and 'req' packages to 'T'?? SBMLDocumentPlugin* dplugin; dplugin = static_cast<SBMLDocumentPlugin*>(document.getPlugin("spatial")); dplugin->setRequired(true); dplugin = static_cast<SBMLDocumentPlugin*>(document.getPlugin("req")); dplugin->setRequired(true); // create the Model Model *model = document.createModel(); model-> setId("trial_spatial"); model-> setName("trial_spatial"); // create the Compartments Compartment* compartment = model->createCompartment(); compartment->setId("cytosol"); compartment->setConstant(true); // create the Species Species* species1 = model->createSpecies(); species1->setId("ATPc"); species1->setCompartment("cytosol"); species1->setInitialConcentration(1.0); species1->setHasOnlySubstanceUnits(false); species1->setBoundaryCondition(false); species1->setConstant(false); // spatial package extension to species. // required elements package extention to parameter RequiredElementsSBasePlugin* reqplugin; reqplugin = static_cast<RequiredElementsSBasePlugin*>(species1->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(true); SpatialSpeciesRxnPlugin* srplugin; srplugin = static_cast<SpatialSpeciesRxnPlugin*>(species1->getPlugin("spatial")); srplugin->setIsSpatial(true); // add parameter for diff coeff of species1 Parameter* paramSp = model->createParameter(); paramSp->setId(species1->getId()+"_dc"); paramSp->setValue(1.0); // required elements package extention to parameter reqplugin = static_cast<RequiredElementsSBasePlugin*>(paramSp->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(true); // spatial package extension to parameter. SpatialParameterPlugin* pplugin; pplugin = static_cast<SpatialParameterPlugin*>(paramSp->getPlugin("spatial")); DiffusionCoefficient* diffCoeff = pplugin->getDiffusionCoefficient(); diffCoeff->setVariable(species1->getId()); diffCoeff->setCoordinateIndex(0); // add parameter for adv coeff of species1 paramSp = model->createParameter(); paramSp->setId(species1->getId()+"_ac"); paramSp->setValue(1.5); // required elements package extention to parameter reqplugin = static_cast<RequiredElementsSBasePlugin*>(paramSp->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(true); // spatial package extension to parameter. pplugin = static_cast<SpatialParameterPlugin*>(paramSp->getPlugin("spatial")); AdvectionCoefficient* advCoeff = pplugin->getAdvectionCoefficient(); advCoeff->setVariable(species1->getId()); advCoeff->setCoordinateIndex(0); // add parameter for boundary condition of species1 paramSp = model->createParameter(); paramSp->setId(species1->getId()+"_bc"); paramSp->setValue(2.0); // required elements package extention to parameter reqplugin = static_cast<RequiredElementsSBasePlugin*>(paramSp->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(true); // spatial package extension to parameter. pplugin = static_cast<SpatialParameterPlugin*>(paramSp->getPlugin("spatial")); BoundaryCondition* boundCon = pplugin->getBoundaryCondition(); boundCon->setVariable(species1->getId()); boundCon->setType("value"); boundCon->setCoordinateBoundary("Xmin"); Species* species2 = model->createSpecies(); species2->setId("ADPc"); species2->setCompartment("cytosol"); species2->setInitialConcentration(1); species2->setHasOnlySubstanceUnits(false); species2->setBoundaryCondition(false); species2->setConstant(false); srplugin = static_cast<SpatialSpeciesRxnPlugin*>(species2->getPlugin("spatial")); srplugin->setIsSpatial(true); /* // create a parameter Parameter* param = model->createParameter(); param->setId("k_1"); param->setValue(0.24); param->setConstant(true); // create an assignment rule AssignmentRule* assignRule = model->createAssignmentRule(); assignRule->setVariable(species1->getId()); assignRule->setFormula("species2+k_1"); */ /* reqplugin = static_cast<RequiredElementsSBasePlugin*>(assignRule->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(false); */ Reaction* reaction = model->createReaction(); reaction->setId("rxn1"); reaction->setReversible(false); reaction->setFast(false); reaction->setCompartment("cytosol"); srplugin = static_cast<SpatialSpeciesRxnPlugin*>(reaction->getPlugin("spatial")); srplugin->setIsLocal(true); // // Get a SpatialModelPlugin object plugged in the model object. // // The type of the returned value of SBase::getPlugin() function is // SBasePlugin*, and thus the value needs to be casted for the // corresponding derived class. // SpatialModelPlugin* mplugin; mplugin = static_cast<SpatialModelPlugin*>(model->getPlugin("spatial")); // // Creates a geometry object via SpatialModelPlugin object. // Geometry* geometry = mplugin->getGeometry(); geometry->setCoordinateSystem("XYZ"); CoordinateComponent* coordX = geometry->createCoordinateComponent(); coordX->setSpatialId("coordComp1"); coordX->setComponentType("cartesian"); coordX->setSbmlUnit("umeter"); coordX->setIndex(1); BoundaryMin* minX = coordX->createBoundaryMin(); minX->setSpatialId("Xmin"); minX->setValue(0.0); BoundaryMax* maxX = coordX->createBoundaryMax(); maxX->setSpatialId("Xmax"); maxX->setValue(10.0); Parameter* paramX = model->createParameter(); paramX->setId("x"); paramX->setValue(8.0); // required elements package extention to parameter // RequiredElementsSBasePlugin* reqplugin; reqplugin = static_cast<RequiredElementsSBasePlugin*>(paramX->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(true); // spatial package extension to parameter. // SpatialParameterPlugin* pplugin; pplugin = static_cast<SpatialParameterPlugin*>(paramX->getPlugin("spatial")); SpatialSymbolReference* spSymRef = pplugin->getSpatialSymbolReference(); spSymRef->setSpatialId(coordX->getSpatialId()); spSymRef->setType(coordX->getElementName()); DomainType* domainType = geometry->createDomainType(); domainType->setSpatialId("dtype1"); domainType->setSpatialDimensions(3); // Spatial package extension to compartment (mapping compartment with domainType) // required elements package extention to compartment reqplugin = static_cast<RequiredElementsSBasePlugin*>(compartment->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(true); SpatialCompartmentPlugin* cplugin; cplugin = static_cast<SpatialCompartmentPlugin*>(compartment->getPlugin("spatial")); CompartmentMapping* compMapping = cplugin->getCompartmentMapping(); compMapping->setSpatialId("compMap1"); compMapping->setCompartment(compartment->getId()); compMapping->setDomainType(domainType->getSpatialId()); compMapping->setUnitSize(1.0); Domain* domain = geometry->createDomain(); domain->setSpatialId("domain1"); domain->setDomainType("dtype1"); domain->setImplicit(false); domain->setShapeId("circle"); InteriorPoint* internalPt1 = domain->createInteriorPoint(); internalPt1->setCoord1(1.0); domain = geometry->createDomain(); domain->setSpatialId("domain2"); domain->setDomainType("dtype1"); domain->setImplicit(false); domain->setShapeId("square"); InteriorPoint* internalPt2 = domain->createInteriorPoint(); internalPt2->setCoord1(5.0); AdjacentDomains* adjDomain = geometry->createAdjacentDomains(); adjDomain->setSpatialId("adjDomain1"); adjDomain->setDomain1("domain1"); adjDomain->setDomain2("domain2"); AnalyticGeometry* analyticGeom = geometry->createAnalyticGeometry(); analyticGeom->setSpatialId("analyticGeom1"); AnalyticVolume* analyticVol = analyticGeom->createAnalyticVolume(); analyticVol->setSpatialId("analyticVol1"); analyticVol->setDomainType(domainType->getSpatialId()); analyticVol->setFunctionType("squareFn"); analyticVol->setOrdinal(1); const char* mathMLStr = "<math xmlns=\"http://www.w3.org/1998/Math/MathML\"><apply xmlns=\"\"><plus /><apply><times /><ci>x</ci><ci>x</ci></apply><apply><minus /><cn>1.0</cn></apply></apply></math>"; ASTNode* mathNode = readMathMLFromString(mathMLStr); analyticVol->setMath(mathNode); SampledFieldGeometry* sfg = geometry->createSampledFieldGeometry(); sfg->setSpatialId("sampledFieldGeom1"); SampledField* sampledField = sfg->createSampledField(); sampledField->setSpatialId("sampledField1"); sampledField->setNumSamples1(4); sampledField->setNumSamples2(4); sampledField->setNumSamples3(2); sampledField->setDataType("double"); sampledField->setInterpolationType("linear"); sampledField->setEncoding("encoding1"); //int samples[5] = {1, 2, 3, 4, 5}; int samples[32] = { // z=0 0,0,0,0, 0,1,1,0, 0,1,1,0, 0,0,0,0, // z=1 0,0,0,0, 0,1,1,0, 0,1,1,0, 0,0,0,0 }; ImageData* id = sampledField->createImageData(); id->setDataType("compressed"); id->setSamples(samples, 32); SampledVolume* sampledVol = sfg->createSampledVolume(); sampledVol->setSpatialId("sv_1"); sampledVol->setDomainType(domainType->getSpatialId()); sampledVol->setSampledValue(128.0); sampledVol->setMinValue(0.0); sampledVol->setMaxValue(255.0); ParametricGeometry* pg = geometry->createParametricGeometry(); pg->setSpatialId("parametricGeom1"); ParametricObject* paramObj = pg->createParametricObject(); paramObj->setSpatialId("po_1"); paramObj->setDomain(domain->getSpatialId()); paramObj->setPolygonType("hexagon"); int ptIndices[5] = {1, 2, 3, 4, 5}; PolygonObject* po = paramObj->createPolygonObject(); po->setPointIndices(ptIndices, 5); SpatialPoint* spPt = pg->createSpatialPoint(); spPt->setSpatialId("sp_1"); spPt->setDomain(domain->getSpatialId()); spPt->setCoord1(1); spPt->setCoord2(2); spPt->setCoord3(3); CSGeometry* csg = geometry->createCSGeometry(); csg->setSpatialId("csGeom1"); CSGObject* csgObj = csg->createCSGObject(); csgObj->setSpatialId("csg_csgo_1"); csgObj->setDomainType(domainType->getSpatialId()); csgObj->setOrdinal(1); CSGScale* scale = csgObj->createCSGScale(); scale->setScaleX(2.0); scale->setScaleY(3.0); scale->setScaleZ(4.0); CSGPrimitive* prim1 = scale->createCSGPrimitive(); prim1->setPrimitiveType("SOLID_SPHERE"); csgObj = csg->createCSGObject(); csgObj->setSpatialId("csg_csgo_2"); csgObj->setDomainType(domainType->getSpatialId()); CSGSetOperator* setUnion = csgObj->createCSGSetOperator(); setUnion->setOperationType("UNION"); /* CSGPrimitive* prim = setUnion->createCSGPrimitive(); prim->setPrimitiveType("SOLID_SPHERE"); CSGPrimitive* prim2 = setUnion->createCSGPrimitive(); prim2->setPrimitiveType("SOLID_CONE"); */ CSGPrimitive* prim2 = new CSGPrimitive(3,1,1); prim2->setSpatialId("cone0"); prim2->setPrimitiveType("SOLID_CONE"); CSGTranslation* translatedCone = new CSGTranslation(3,1,1); translatedCone->setSpatialId("translation0"); translatedCone->setTranslateX(2.0); translatedCone->setTranslateY(2.0); translatedCone->setTranslateZ(2.0); translatedCone->setChild(prim2); int n = setUnion->addCSGNodeChild(translatedCone); CSGPrimitive* prim3 = new CSGPrimitive(3,1,1); prim3->setSpatialId("sphere0"); prim3->setPrimitiveType("SOLID_SPHERE"); n = setUnion->addCSGNodeChild(prim3); writeSBML(&document, "spatial_example0.xml"); }
void writeSpatialSBML() { // SBMLNamespaces of SBML Level 3 Version 1 with 'req' Version 1 // then add 'spatial' package namespace. SpatialPkgNamespaces sbmlns(3,1,1); // create the L3V1 document with spatial package SBMLDocument document(&sbmlns); // set 'required' attribute on document for 'spatial' and 'req' packages to 'T'?? SBMLDocumentPlugin* dplugin; dplugin = static_cast<SBMLDocumentPlugin*>(document.getPlugin("spatial")); dplugin->setRequired(true); // create the Model Model *model = document.createModel(); model-> setId("trial_spatial"); model-> setName("trial_spatial"); // create the Compartments Compartment* compartment = model->createCompartment(); compartment->setId("cytosol"); compartment->setConstant(true); // create the Species Species* species1 = model->createSpecies(); species1->setId("ATPc"); species1->setCompartment("cytosol"); species1->setInitialConcentration(1.0); species1->setHasOnlySubstanceUnits(false); species1->setBoundaryCondition(false); species1->setConstant(false); // spatial package extension to species. SpatialSpeciesPlugin* srplugin; srplugin = static_cast<SpatialSpeciesPlugin*>(species1->getPlugin("spatial")); srplugin->setIsSpatial(true); // add parameter for diff coeff of species1 Parameter* paramSp = model->createParameter(); paramSp->setId(species1->getId()+"_dc"); paramSp->setValue(1.0); // spatial package extension to parameter. SpatialParameterPlugin* pplugin; pplugin = static_cast<SpatialParameterPlugin*>(paramSp->getPlugin("spatial")); DiffusionCoefficient* diffCoeff = pplugin->createDiffusionCoefficient(); diffCoeff->setVariable(species1->getId()); diffCoeff->setType(SPATIAL_DIFFUSIONKIND_ANISOTROPIC); CoordinateReference* coordRef = diffCoeff->createCoordinateReference(); coordRef->setCoordinate(SPATIAL_COORDINATEKIND_CARTESIAN_X); // add parameter for adv coeff of species1 paramSp = model->createParameter(); paramSp->setId(species1->getId()+"_ac"); paramSp->setValue(1.5); // spatial package extension to parameter. pplugin = static_cast<SpatialParameterPlugin*>(paramSp->getPlugin("spatial")); AdvectionCoefficient* advCoeff = pplugin->createAdvectionCoefficient(); advCoeff->setVariable(species1->getId()); advCoeff->setCoordinate(SPATIAL_COORDINATEKIND_CARTESIAN_X); // add parameter for boundary condition of species1 paramSp = model->createParameter(); paramSp->setId(species1->getId()+"_bc"); paramSp->setValue(2.0); // spatial package extension to parameter. pplugin = static_cast<SpatialParameterPlugin*>(paramSp->getPlugin("spatial")); BoundaryCondition* boundCon = pplugin->createBoundaryCondition(); boundCon->setVariable(species1->getId()); boundCon->setType(SPATIAL_BOUNDARYKIND_DIRICHLET); boundCon->setCoordinateBoundary("Xmin"); Species* species2 = model->createSpecies(); species2->setId("ADPc"); species2->setCompartment("cytosol"); species2->setInitialConcentration(1); species2->setHasOnlySubstanceUnits(false); species2->setBoundaryCondition(false); species2->setConstant(false); srplugin = static_cast<SpatialSpeciesPlugin*>(species2->getPlugin("spatial")); srplugin->setIsSpatial(true); Reaction* reaction = model->createReaction(); reaction->setId("rxn1"); reaction->setReversible(false); reaction->setFast(false); reaction->setCompartment("cytosol"); SpatialReactionPlugin* rplugin = static_cast<SpatialReactionPlugin*>(reaction->getPlugin("spatial")); rplugin->setIsLocal(true); // // Get a SpatialModelPlugin object plugged in the model object. // // The type of the returned value of SBase::getPlugin() function is // SBasePlugin*, and thus the value needs to be casted for the // corresponding derived class. // SpatialModelPlugin* mplugin; mplugin = static_cast<SpatialModelPlugin*>(model->getPlugin("spatial")); // // Creates a geometry object via SpatialModelPlugin object. // Geometry* geometry = mplugin->createGeometry(); geometry->setCoordinateSystem(SPATIAL_GEOMETRYKIND_CARTESIAN); CoordinateComponent* coordX = geometry->createCoordinateComponent(); coordX->setId("coordComp1"); coordX->setType(SPATIAL_COORDINATEKIND_CARTESIAN_X); coordX->setUnit("umeter"); Boundary* minX = coordX->createBoundaryMin(); minX->setId("Xmin"); minX->setValue(0.0); Boundary* maxX = coordX->createBoundaryMax(); maxX->setId("Xmax"); maxX->setValue(10.0); Parameter* paramX = model->createParameter(); paramX->setId("x"); paramX->setValue(8.0); // spatial package extension to parameter. // SpatialParameterPlugin* pplugin; pplugin = static_cast<SpatialParameterPlugin*>(paramX->getPlugin("spatial")); SpatialSymbolReference* spSymRef = pplugin->createSpatialSymbolReference(); spSymRef->setSpatialRef(coordX->getId()); DomainType* domainType = geometry->createDomainType(); domainType->setId("dtype1"); domainType->setSpatialDimension(3); // Spatial package extension to compartment (mapping compartment with domainType) SpatialCompartmentPlugin* cplugin; cplugin = static_cast<SpatialCompartmentPlugin*>(compartment->getPlugin("spatial")); CompartmentMapping* compMapping = cplugin->createCompartmentMapping(); compMapping->setId("compMap1"); compMapping->setDomainType(domainType->getId()); compMapping->setUnitSize(1.0); Domain* domain = geometry->createDomain(); domain->setId("domain1"); domain->setDomainType("dtype1"); InteriorPoint* internalPt1 = domain->createInteriorPoint(); internalPt1->setCoord1(1.0); domain = geometry->createDomain(); domain->setId("domain2"); domain->setDomainType("dtype1"); InteriorPoint* internalPt2 = domain->createInteriorPoint(); internalPt2->setCoord1(5.0); AdjacentDomains* adjDomain = geometry->createAdjacentDomains(); adjDomain->setId("adjDomain1"); adjDomain->setDomain1("domain1"); adjDomain->setDomain2("domain2"); AnalyticGeometry* analyticGeom = geometry->createAnalyticGeometry(); analyticGeom->setId("analyticGeom1"); AnalyticVolume* analyticVol = analyticGeom->createAnalyticVolume(); analyticVol->setId("analyticVol1"); analyticVol->setDomainType(domainType->getId()); analyticVol->setFunctionType(SPATIAL_FUNCTIONKIND_LAYERED); analyticVol->setOrdinal(1); const char* mathMLStr = "<math xmlns=\"http://www.w3.org/1998/Math/MathML\"><apply xmlns=\"\"><plus /><apply><times /><ci>x</ci><ci>x</ci></apply><apply><minus /><cn>1.0</cn></apply></apply></math>"; ASTNode* mathNode = readMathMLFromString(mathMLStr); analyticVol->setMath(mathNode); SampledFieldGeometry* sfg = geometry->createSampledFieldGeometry(); sfg->setId("sampledFieldGeom1"); SampledField* sampledField = sfg->createSampledField(); sampledField->setId("sampledField1"); sampledField->setNumSamples1(4); sampledField->setNumSamples2(4); sampledField->setNumSamples3(2); sampledField->setDataType("double"); sampledField->setInterpolationType("linear"); sampledField->setEncoding("encoding1"); //int samples[5] = {1, 2, 3, 4, 5}; int samples[32] = { // z=0 0,0,0,0, 0,1,1,0, 0,1,1,0, 0,0,0,0, // z=1 0,0,0,0, 0,1,1,0, 0,1,1,0, 0,0,0,0 }; ImageData* id = sampledField->createImageData(); id->setDataType("uint8"); id->setSamples(samples, 32); SampledVolume* sampledVol = sfg->createSampledVolume(); sampledVol->setId("sv_1"); sampledVol->setDomainType(domainType->getId()); sampledVol->setSampledValue(128.0); sampledVol->setMinValue(0.0); sampledVol->setMaxValue(255.0); writeSBML(&document, "spatial_example2.xml"); }
END_TEST START_TEST ( test_RenderExtension_convertLevel ) { string filename(TestDataDirectory); filename += "FutileCycle.xml"; // read document SBMLDocument* doc = readSBMLFromFile(filename.c_str()); doc->checkConsistency(); // assert all is good fail_unless (doc->getModel() != NULL); fail_unless (doc->getNumErrors(LIBSBML_SEV_ERROR) == 0); // convert to L3 *without* upgrading the layout / render package bool result = doc->setLevelAndVersion(3,1, false, true); fail_unless(result == true); // write to string std::string l3SBML = writeSBMLToStdString(doc); delete doc; // read string back doc = readSBMLFromString(l3SBML.c_str()); doc->checkConsistency(); // assert all is good fail_unless (doc->getModel() != NULL); fail_unless (doc->getNumErrors(LIBSBML_SEV_ERROR) == 0); delete doc; filename = TestDataDirectory; filename += "FutileCycle.xml"; // read document doc = readSBMLFromFile(filename.c_str()); SBMLNamespaces nsl3v1(3, 1); ConversionProperties prop(&nsl3v1); prop.addOption("strict", false); prop.addOption("setLevelAndVersion", true); prop.addOption("ignorePackages", true); fail_unless(doc->convert(prop) == LIBSBML_OPERATION_SUCCESS); // now upgrade layout / render package SBMLDocumentPlugin *docPlugin = (SBMLDocumentPlugin*)doc->getPlugin("layout"); if (docPlugin != NULL) docPlugin->setElementNamespace(LayoutExtension::getXmlnsL3V1V1()); doc->getSBMLNamespaces()->addPackageNamespace("layout", 1); doc->setPackageRequired("layout", false); docPlugin = (SBMLDocumentPlugin*)doc->getPlugin("render"); if (docPlugin != NULL) docPlugin->setElementNamespace(RenderExtension::getXmlnsL3V1V1()); else doc->enablePackage(RenderExtension::getXmlnsL3V1V1(), "render", true); doc->getSBMLNamespaces()->addPackageNamespace("render", 1); doc->setPackageRequired("render", false); doc->checkConsistency(); // assert all is good fail_unless (doc->getModel() != NULL); fail_unless (doc->getNumErrors(LIBSBML_SEV_ERROR) == 0); //l3SBML = writeSBMLToString(doc); delete doc; }