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);
}
示例#3
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 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

  }
示例#4
0
  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

  }
示例#7
0
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;


}
示例#8
0
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");

}
示例#9
0
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");

}
示例#10
0
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;
}