/* * Copy constructor. */ SampledFieldGeometry::SampledFieldGeometry(const SampledFieldGeometry& source) : GeometryDefinition(source) { this->setSpatialId(source.getSpatialId()); this->mSampledVolumes = source.mSampledVolumes; if (source.mSampledField) { mSampledField = static_cast<SampledField*>( source.mSampledField->clone() ); } connectToChild(); }
void readSpatialSBML() { SBMLDocument *document2 = readSBML("spatial_example0.xml"); Model *model2 = document2->getModel(); Compartment *comp; SpatialCompartmentPlugin* cplugin; RequiredElementsSBasePlugin* reqplugin; for (unsigned int i = 0; i < model2->getNumCompartments(); i++) { comp = model2->getCompartment(i); cout << "Compartment" << i << ": " << comp->getId() << endl; reqplugin = static_cast<RequiredElementsSBasePlugin*>(comp->getPlugin("req")); if (!reqplugin->getMathOverridden().empty()) { cout << "Comp" << i << " req mathOverridden: " << reqplugin->getMathOverridden() << endl; } cplugin = static_cast<SpatialCompartmentPlugin*>(comp->getPlugin("spatial")); if (cplugin->getCompartmentMapping()->isSetSpatialId()) { cout << "Comp" << i << " CMSpId: " << cplugin->getCompartmentMapping()->getSpatialId() << endl; cout << "Comp" << i << " CM_Comp: " << cplugin->getCompartmentMapping()->getCompartment() << endl; cout << "Comp" << i << " CM_DType: " << cplugin->getCompartmentMapping()->getDomainType() << endl; cout << "Comp" << i << " CM_UnitSz: " << cplugin->getCompartmentMapping()->getUnitSize() << endl; } } Species *sp; SpatialSpeciesRxnPlugin* srplugin; for (unsigned int i = 0; i < model2->getNumSpecies(); i++) { sp = model2->getSpecies(i); cout << "Species" << i << ": " << sp->getId() << endl; srplugin = static_cast<SpatialSpeciesRxnPlugin*>(sp->getPlugin("spatial")); if (srplugin->getIsSpatial()) { cout << "species" << i << " isSpatial: " << srplugin->getIsSpatial() << endl; } } Parameter *param; SpatialParameterPlugin* pplugin; for (unsigned int i = 0; i < model2->getNumParameters(); i++) { param = model2->getParameter(i); cout << "Parameter" << i << ": " << param->getId() << endl; reqplugin = static_cast<RequiredElementsSBasePlugin*>(param->getPlugin("req")); if (!reqplugin->getMathOverridden().empty()) { cout << "Parameter" << i << " req mathOverridden: " << reqplugin->getMathOverridden() << endl; } pplugin = static_cast<SpatialParameterPlugin*>(param->getPlugin("spatial")); if (pplugin->getSpatialSymbolReference()->isSetSpatialId()) { cout << "Parameter" << i << " SpRefId: " << pplugin->getSpatialSymbolReference()->getSpatialId() << endl; cout << "Parameter" << i << " SpRefType: " << pplugin->getSpatialSymbolReference()->getType() << endl; } if (pplugin->getDiffusionCoefficient()->isSetVariable()) { cout << "Diff_" << i << " SpeciesVarId: " << pplugin->getDiffusionCoefficient()->getVariable() << endl; cout << "Diff_" << i << " SpCoordIndex: " << pplugin->getDiffusionCoefficient()->getCoordinateIndex() << endl; } if (pplugin->getAdvectionCoefficient()->isSetVariable()) { cout << "Adv_" << i << " SpeciesVarId: " << pplugin->getAdvectionCoefficient()->getVariable() << endl; cout << "Adv_" << i << " SpCoordIndex: " << pplugin->getAdvectionCoefficient()->getCoordinateIndex() << endl; } if (pplugin->getBoundaryCondition()->isSetVariable()) { cout << "BC_" << i << " SpeciesVarId: " << pplugin->getBoundaryCondition()->getVariable() << endl; cout << "BC_" << i << " SpCoordBoundary: " << pplugin->getBoundaryCondition()->getCoordinateBoundary() << endl; cout << "BC_" << i << " SpBoundaryType: " << pplugin->getBoundaryCondition()->getType() << endl; } } Reaction *rxn; for (unsigned int i = 0; i < model2->getNumReactions(); i++) { rxn = model2->getReaction(i); cout << "Reaction" << i << ": " << rxn->getId() << endl; srplugin = static_cast<SpatialSpeciesRxnPlugin*>(rxn->getPlugin("spatial")); if (srplugin->getIsLocal()) { cout << "rxn" << i << " isLocal: " << srplugin->getIsLocal() << endl; } } Rule *rule; for (unsigned int i = 0; i < model2->getNumRules(); i++) { rule = model2->getRule(i); cout << "Rule" << i << ": " << rule->getVariable() << endl; } // // 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 cast for the // corresponding derived class. // SpatialModelPlugin* mplugin2; mplugin2 = static_cast<SpatialModelPlugin*>(model2->getPlugin("spatial")); cout << "URI: " << mplugin2->getURI() << endl; cout << "prefix: " << mplugin2->getPrefix() << endl; // get a Geometry object via SpatialModelPlugin object. Geometry* geometry2 = mplugin2->getGeometry(); cout << "Geometry coordSystem: " << geometry2->getCoordinateSystem() << endl; // get a CoordComponent object via the Geometry object. CoordinateComponent* coordComp = geometry2->getCoordinateComponent(0); std::cout << "CoordComponent spatialId: " << coordComp->getSpatialId() << std::endl; std::cout << "CoordComponent compType: " << coordComp->getComponentType() << std::endl; std::cout << "CoordComponent sbmlUnit: " << coordComp->getSbmlUnit() << std::endl; std::cout << "CoordComponent index: " << coordComp->getIndex() << std::endl; BoundaryMin* minX = coordComp->getBoundaryMin(); std::cout << "minX name: " << minX->getSpatialId() << std::endl; std::cout << "minX value: " << minX->getValue() << std::endl; BoundaryMax* maxX = coordComp->getBoundaryMax(); std::cout << "maxX name: " << maxX->getSpatialId() << std::endl; std::cout << "maxX value: " << maxX->getValue() << std::endl; // get a DomainType object via the Geometry object. DomainType* domainType2 = geometry2->getDomainType(0); std::cout << "DomainType spatialId: " << domainType2->getSpatialId() << std::endl; std::cout << "DomainType spatialDim: " << domainType2->getSpatialDimensions() << std::endl; // get a Domain object via the Geometry object. Domain* domain = geometry2->getDomain(0); std::cout << "Domain1 spatialId: " << domain->getSpatialId() << std::endl; std::cout << "Domain1 implicit: " << domain->getImplicit() << std::endl; std::cout << "Domain1 domainType: " << domain->getDomainType() << std::endl; std::cout << "Domain1 Shape: " << domain->getShapeId() << std::endl; // get an internal point via the domain object InteriorPoint* internalPt = domain->getInteriorPoint(0); std::cout << "InternalPt_1 coord1: " << internalPt->getCoord1() << std::endl; // get a Domain object via the Geometry object. domain = geometry2->getDomain(1); std::cout << "Domain2 spatialId: " << domain->getSpatialId() << std::endl; std::cout << "Domain2 implicit: " << domain->getImplicit() << std::endl; std::cout << "Domain2 domainType: " << domain->getDomainType() << std::endl; std::cout << "Domain2 Shape: " << domain->getShapeId() << std::endl; // get an internal point via the domain object internalPt = domain->getInteriorPoint(0); std::cout << "InternalPt_2 coord1: " << internalPt->getCoord1() << std::endl; // get an AdjacentDomains object via the Geometry object. AdjacentDomains* adjDomain = geometry2->getAdjacentDomains(0); std::cout << "AdjDomain spatialId: " << adjDomain->getSpatialId() << std::endl; std::cout << "AdjDomain domain1: " << adjDomain->getDomain1() << std::endl; std::cout << "AdjDomain domain2: " << adjDomain->getDomain2() << std::endl; // get the different GeometryDefinition objects via the Geometry object. GeometryDefinition* gd; for (unsigned int i = 0; i < geometry2->getNumGeometryDefinitions(); i++) { gd = geometry2->getGeometryDefinition(i); if (gd->isAnalyticGeometry()) { AnalyticGeometry* analyticalGeom = static_cast<AnalyticGeometry*>(gd); std::cout << "AnalGeom spatialId: " << analyticalGeom->getSpatialId() << std::endl; // analVol from analGeom. AnalyticVolume* av = analyticalGeom->getAnalyticVolume(0); std::cout << "AnalVol spatialId: " << av->getSpatialId() << std::endl; std::cout << "AnalVol domainType: " << av->getDomainType() << std::endl; std::cout << "AnalVol funcType: " << av->getFunctionType() << std::endl; std::cout << "AnalVol ordinal: " << av->getOrdinal() << std::endl; const ASTNode* mathNode = av->getMath(); char* mathStr = writeMathMLToString(mathNode); std::cout << "AnalVol math: " << mathStr << std::endl; } if (gd->isSampledFieldGeometry()) { SampledFieldGeometry* sfGeom = static_cast<SampledFieldGeometry*>(gd); std::cout << "SampledFieldGeom spatialId: " << sfGeom->getSpatialId() << std::endl; // sampledField from sfGeom SampledField* sf = sfGeom->getSampledField(); std::cout << "SampledField spatialId: " << sf->getSpatialId() << std::endl; std::cout << "SampledField dataType: " << sf->getDataType() << std::endl; std::cout << "SampledField interpolation: " << sf->getInterpolationType() << std::endl; std::cout << "SampledField encoding: " << sf->getEncoding() << std::endl; std::cout << "SampledField numSamples1: " << sf->getNumSamples1() << std::endl; std::cout << "SampledField numSamples2: " << sf->getNumSamples2() << std::endl; std::cout << "SampledField numSamples3: " << sf->getNumSamples3() << std::endl; const ImageData* id = sf->getImageData(); int* samples = new int[id->getSamplesLength()]; id->getSamples(samples); std::cout << "ImageData samples[0]: " << samples[0] << std::endl; std::cout << "ImageData samplesLen: " << id->getSamplesLength() << std::endl; std::cout << "ImageData dataType: " << id->getDataType() << std::endl; // sampledVolVol from sfGeom. SampledVolume* sv = sfGeom->getSampledVolume(0); std::cout << "SampledVol spatialId: " << sv->getSpatialId() << std::endl; std::cout << "SampledVol domainType: " << sv->getDomainType() << std::endl; std::cout << "SampledVol sampledVal: " << sv->getSampledValue() << std::endl; std::cout << "SampledVol min: " << sv->getMinValue() << std::endl; std::cout << "SampledVol max: " << sv->getMaxValue() << std::endl; } if (gd->isParametricGeometry()) { ParametricGeometry* pGeom = static_cast<ParametricGeometry*>(gd); std::cout << "ParametricGeometry spatialId: " << pGeom->getSpatialId() << std::endl; // parametricObject from pGeom ParametricObject* pObj = pGeom->getParametricObject(0); std::cout << "ParametricObj spatialId: " << pObj->getSpatialId() << std::endl; std::cout << "ParametricObj domain: " << pObj->getDomain() << std::endl; std::cout << "ParametricObj polygonType: " << pObj->getPolygonType() << std::endl; const PolygonObject* po = pObj->getPolygonObject(); int* ptInd = new int[po->getIndicesLength()]; po->getPointIndices(ptInd); std::cout << "PolygonObj ptIndices[0]: " << ptInd[0] << std::endl; std::cout << "PolygonObj indLen: " << po->getIndicesLength() << std::endl; // SpatialPoint from pGeom. SpatialPoint* sp = pGeom->getSpatialPoint(0); std::cout << "SpatialPt spatialId: " << sp->getSpatialId() << std::endl; std::cout << "SpatialPt domain: " << sp->getDomain() << std::endl; std::cout << "SpatialPt coord1: " << sp->getCoord1() << std::endl; std::cout << "SpatialPt coord2: " << sp->getCoord2() << std::endl; std::cout << "SpatialPt coord3: " << sp->getCoord3() << std::endl; } if (gd->isCSGeometry()) { CSGeometry* csGeom = static_cast<CSGeometry*>(gd); std::cout << "CSGeometry spatialId: " << csGeom->getSpatialId() << std::endl; // CSGObject-CSGOperator from csGeom CSGObject* csgo; for (unsigned int i = 0; i < csGeom->getNumCSGObjects(); i++) { csgo = csGeom->getCSGObject(i); std::cout << "CSGObject spatialId: " << csgo->getSpatialId() << std::endl; std::cout << "CSGObject domainType: " << csgo->getDomainType() << std::endl; const CSGNode* csgnode = csgo->getCSGNodeRoot(); if (csgnode->isCSGTransformation()) { CSGTransformation* transf = (CSGTransformation*)csgnode; if (transf->isCSGScale()) { CSGScale* scale = static_cast<CSGScale*>(transf); std::cout << "CSGScale scaleX: " << scale->getScaleX() << std::endl; std::cout << "CSGScale scaleY: " << scale->getScaleY() << std::endl; std::cout << "CSGScale scaleZ: " << scale->getScaleZ() << std::endl; const CSGNode* scaleChild = scale->getChild(); if (scaleChild->isCSGPrimitive()) { CSGPrimitive* prim = (CSGPrimitive*)scaleChild; std::cout << "CSGPrimitive primitiveType: " << prim->getPrimitiveType() << std::endl; } } } if (csgnode->isCSGSetOperator()) { CSGSetOperator* setop = (CSGSetOperator*)(csgnode); std::cout << "CSGSetOperator opType: " << setop->getOperationType() << std::endl; for (unsigned int k = 0; k < setop->getNumCSGNodeChildren(); k++) { CSGNode* csgNode = setop->getCSGNodeChild(k); std::cout << "CSGNode type: " << csgNode->getTypeCode() << std::endl; } } } } } delete document2; }