libSBML C++ API  5.20.2
groups_example2.cpp

Simple example of writing a model that uses the SBML Level 3 Groups package and also the SBML Level 3 Layout package.

/**
* @file example2.cpp
* @brief SBML Groups/Layout example
* @author Ralph Gauges
* @author Akiya Jouraku (Modified for layout and groups extensions in libSBML 5)
*
*/
/*
* This file is part of libSBML. Please visit http://sbml.org for more
* information about SBML, and the latest version of libSBML.
*
* Copyright 2004 European Media Laboratories Research gGmbH
*/
#include "sbml/SBMLTypes.h"
LIBSBML_CPP_NAMESPACE_USE
int main(int argc,char** argv){
//
// set the SBMLNamespaces with Layout Level 3 Version 1 Package Version1
// and Groups Level 3 Version 1 Package Version 1
//
SBMLNamespaces sbmlns(3,1);
sbmlns.addPkgNamespace("layout",1);
sbmlns.addPkgNamespace("groups",1);
//
// (NOTES) The above code creating an SBMLNamespaces object can be replaced
// with one of the following other styles.
//
// (1) Creates an SBMLNamespace object with the given SBML level, version,
// and one of pakage names, packge version, and then adds a namespace
// of another package to the object.
//
// SBMLNamespaces sbmlns(3,1,"layout",1);
// sbmlns.addPkgNamespace("groups",1);
//
// OR
//
// SBMLNamespaces sbmlns(3,1,"groups",1);
// sbmlns.addPkgNamespace("layout",1);
//
// (2) Creates a GroupsPkgNamespaces object (SBMLNamespace derived class for
// groups package. The class is basically used for createing an SBase derived
// objects defined in the groups package) with the given SBML level, version,
// and package version and then adds a namespace of another package to the object.
//
// GroupsPkgNamespaces sbmlns(3,1,1);
// sbmlns.addPkgNamespace("layout",1);
//
// (3) Creates a LayoutPkgNamespaces object (SBMLNamespace derived class for
// layout package. The class is basically used for createing an SBase derived
// objects defined in the layout package) with the given SBML level, version,
// and package version and then adds a namespace of another package to the object.
//
// LayoutPkgNamespaces sbmlns(3,1,1);
// sbmlns.addPkgNamespace("groups",1);
//
// create the document
SBMLDocument *document=new SBMLDocument(&sbmlns);
document->setPackageRequired("groups", false);
document->setPackageRequired("layout", false);
// create the Model
Model* model=document->createModel();
model->setId("TestModel");
document->setModel(model);
// create the Compartment
Compartment* compartment=model->createCompartment();
compartment->setId("Compartment_1");
compartment->setConstant(true);
// create the Species
Species* species1=model->createSpecies();
species1->setId("Species_1");
species1->setCompartment(compartment->getId());
species1->setHasOnlySubstanceUnits(false);
species1->setBoundaryCondition(false);
species1->setConstant(false);
Species* species2=model->createSpecies();
species2->setId("Species_2");
species2->setCompartment(compartment->getId());
species2->setHasOnlySubstanceUnits(false);
species2->setBoundaryCondition(false);
species2->setConstant(false);
// create the Reactions
Reaction* reaction1=model->createReaction();
reaction1->setId("Reaction_1");
reaction1->setReversible(false);
reaction1->setFast(false);
SpeciesReference* reference1=reaction1->createReactant();
reference1->setSpecies(species1->getId());
reference1->setId("SpeciesReference_1");
reference1->setConstant(false);
SpeciesReference* reference2=reaction1->createProduct();
reference2->setSpecies(species2->getId());
reference2->setId("SpeciesReference_2");
reference2->setConstant(false);
Reaction* reaction2=model->createReaction();
reaction2->setId("Reaction_2");
reaction2->setReversible(false);
reaction2->setFast(false);
SpeciesReference* reference3=reaction2->createReactant();
reference3->setSpecies(species2->getId());
reference3->setId("SpeciesReference_3");
reference3->setConstant(false);
SpeciesReference* reference4=reaction2->createProduct();
reference4->setSpecies(species1->getId());
reference4->setId("SpeciesReference_4");
reference4->setConstant(false);
// create the Layout
LayoutPkgNamespaces layoutns(3,1,1);
//
// 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.
//
LayoutModelPlugin* mpluginLayout = static_cast<LayoutModelPlugin*>(model->getPlugin("layout"));
Layout* layout=mpluginLayout->createLayout();
layout->setId("Layout_1");
Dimensions dim(&layoutns, 400.0,220.0);
layout->setDimensions(&dim);
// create the CompartmentGlyph
CompartmentGlyph* compartmentGlyph=layout->createCompartmentGlyph();
compartmentGlyph->setId("CompartmentGlyph_1");
compartmentGlyph->setCompartmentId(compartment->getId());
BoundingBox bb(&layoutns, "bb1",5,5,390,210);
compartmentGlyph->setBoundingBox(&bb);
// create the SpeciesGlyphs
SpeciesGlyph* speciesGlyph1=layout->createSpeciesGlyph();
speciesGlyph1->setId("SpeciesGlyph_1");
speciesGlyph1->setSpeciesId(species1->getId());
bb=BoundingBox(&layoutns, "bb2",80,26,240,24);
speciesGlyph1->setBoundingBox(&bb);
TextGlyph* textGlyph1=layout->createTextGlyph();
textGlyph1->setId("TextGlyph_01");
bb=BoundingBox(&layoutns, "bbA",92,26,228,24);
textGlyph1->setBoundingBox(&bb);
textGlyph1->setOriginOfTextId(speciesGlyph1->getId());
textGlyph1->setGraphicalObjectId(speciesGlyph1->getId());
SpeciesGlyph* speciesGlyph2=layout->createSpeciesGlyph();
speciesGlyph2->setId("SpeciesGlyph_2");
speciesGlyph2->setSpeciesId(species2->getId());
bb=BoundingBox(&layoutns, "bb3",80,170,240,24);
speciesGlyph2->setBoundingBox(&bb);
TextGlyph* textGlyph2=layout->createTextGlyph();
textGlyph2->setId("TextGlyph_02");
bb=BoundingBox(&layoutns, "bbB",92,170,228,24);
textGlyph2->setBoundingBox(&bb);
textGlyph2->setOriginOfTextId(speciesGlyph2->getId());
textGlyph2->setGraphicalObjectId(speciesGlyph2->getId());
// create the ReactionGlyphs
ReactionGlyph* reactionGlyph1=layout->createReactionGlyph();
reactionGlyph1->setId("ReactionGlyph_1");
reactionGlyph1->setReactionId(reaction1->getId());
Curve* reactionCurve1=reactionGlyph1->getCurve();
LineSegment* ls=reactionCurve1->createLineSegment();
Point p(&layoutns,165,105);
ls->setStart(&p);
p=Point(&layoutns,165,115);
ls->setEnd(&p);
ReactionGlyph* reactionGlyph2=layout->createReactionGlyph();
reactionGlyph2->setId("ReactionGlyph_1");
reactionGlyph2->setReactionId(reaction2->getId());
Curve* reactionCurve2=reactionGlyph2->getCurve();
ls=reactionCurve2->createLineSegment();
p=Point(&layoutns,235,105);
ls->setStart(&p);
p=Point(&layoutns,235,115);
ls->setEnd(&p);
// add the SpeciesReferenceGlyphs
SpeciesReferenceGlyph* speciesReferenceGlyph1=reactionGlyph1->createSpeciesReferenceGlyph();
speciesReferenceGlyph1->setId("SpeciesReferenceGlyph_1");
speciesReferenceGlyph1->setSpeciesGlyphId(speciesGlyph1->getId());
speciesReferenceGlyph1->setSpeciesReferenceId(reference1->getId());
speciesReferenceGlyph1->setRole(SPECIES_ROLE_SUBSTRATE);
Curve* speciesReferenceCurve1=speciesReferenceGlyph1->getCurve();
CubicBezier* cb=speciesReferenceCurve1->createCubicBezier();
p=Point(&layoutns,165,105);
cb->setStart(&p);
p=Point(&layoutns,165,90);
cb->setBasePoint1(&p);
p=Point(&layoutns,165,90);
cb->setBasePoint2(&p);
p=Point(&layoutns,195,60);
cb->setEnd(&p);
SpeciesReferenceGlyph* speciesReferenceGlyph2=reactionGlyph1->createSpeciesReferenceGlyph();
speciesReferenceGlyph2->setId("SpeciesReferenceGlyph_2");
speciesReferenceGlyph2->setSpeciesGlyphId(speciesGlyph2->getId());
speciesReferenceGlyph2->setSpeciesReferenceId(reference2->getId());
speciesReferenceGlyph2->setRole(SPECIES_ROLE_PRODUCT);
Curve* speciesReferenceCurve2=speciesReferenceGlyph2->getCurve();
cb=speciesReferenceCurve2->createCubicBezier();
p=Point(&layoutns,165,115);
cb->setStart(&p);
p=Point(&layoutns,165,130);
cb->setBasePoint1(&p);
p=Point(&layoutns,165,130);
cb->setBasePoint2(&p);
p=Point(&layoutns,195,160);
cb->setEnd(&p);
SpeciesReferenceGlyph* speciesReferenceGlyph3=reactionGlyph2->createSpeciesReferenceGlyph();
speciesReferenceGlyph3->setId("SpeciesReferenceGlyph_3");
speciesReferenceGlyph3->setSpeciesGlyphId(speciesGlyph2->getId());
speciesReferenceGlyph3->setSpeciesReferenceId(reference3->getId());
speciesReferenceGlyph3->setRole(SPECIES_ROLE_SUBSTRATE);
Curve* speciesReferenceCurve3=speciesReferenceGlyph3->getCurve();
cb=speciesReferenceCurve3->createCubicBezier();
p=Point(&layoutns,235,115);
cb->setStart(&p);
p=Point(&layoutns,235,130);
cb->setBasePoint1(&p);
p=Point(&layoutns,235,130);
cb->setBasePoint2(&p);
p=Point(&layoutns,205,160);
cb->setEnd(&p);
SpeciesReferenceGlyph* speciesReferenceGlyph4=reactionGlyph2->createSpeciesReferenceGlyph();
speciesReferenceGlyph4->setId("SpeciesReferenceGlyph_4");
speciesReferenceGlyph4->setSpeciesGlyphId(speciesGlyph1->getId());
speciesReferenceGlyph4->setSpeciesReferenceId(reference4->getId());
speciesReferenceGlyph4->setRole(SPECIES_ROLE_PRODUCT);
Curve* speciesReferenceCurve4=speciesReferenceGlyph4->getCurve();
cb=speciesReferenceCurve4->createCubicBezier();
p=Point(&layoutns,235,105);
cb->setStart(&p);
p=Point(&layoutns,235,90);
cb->setBasePoint1(&p);
p=Point(&layoutns,235,90);
cb->setBasePoint2(&p);
p=Point(&layoutns,205,60);
cb->setEnd(&p);
//
// Create Group
//
//
// Get a GroupsModelPlugin 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.
//
GroupsModelPlugin* mpluginGroups = static_cast<GroupsModelPlugin*>(model->getPlugin("groups"));
//
// Creates a Group object via GroupsModelPlugin object.
//
Group* group = mpluginGroups->createGroup();
group->setId("role_substrate");
Member* member = group->createMember();
member->setIdRef("SpeciesReferenceGlyph_1");
member = group->createMember();
member->setIdRef("SpeciesReferenceGlyph_3");
group = mpluginGroups->createGroup();
group->setId("role_product");
member = group->createMember();
member->setIdRef("SpeciesReferenceGlyph_2");
member = group->createMember();
member->setIdRef("SpeciesReferenceGlyph_4");
writeSBML(document,"groups_example2.xml");
delete document;
}
@ GROUP_KIND_CLASSIFICATION
Definition: GroupsExtension.h:405
Definition of GroupsExtensionTypes.
Include all SBML types of layout extension in a single header file.
Include all SBML types in a single header file.
int writeSBML(const SBMLDocument_t *d, const char *filename)
Writes the given SBML document d to the file named by filename.
@ SPECIES_ROLE_SUBSTRATE
Definition: SpeciesReferenceRole.h:61
@ SPECIES_ROLE_PRODUCT
Definition: SpeciesReferenceRole.h:62
Definition: BoundingBox.h:64
Definition: CompartmentGlyph.h:60
int setCompartmentId(const std::string &id)
Sets the id of the associated compartment.
Definition: CompartmentGlyph.cpp:223
Definition: Compartment.h:490
virtual const std::string & getId() const
Returns the value of the "id" attribute of this Compartment.
Definition: Compartment.cpp:243
int setConstant(bool value)
Sets the value of the "constant" attribute of this Compartment object.
Definition: Compartment.cpp:661
virtual int setId(const std::string &sid)
Sets the value of the "id" attribute of this Compartment object.
Definition: Compartment.cpp:479
Definition: CubicBezier.h:71
void setBasePoint2(const Point *p)
Initializes second base point with a copy of the given point.
Definition: CubicBezier.cpp:457
void setBasePoint1(const Point *p)
Initializes first base point with a copy of the given point.
Definition: CubicBezier.cpp:408
Definition: Curve.h:217
LineSegment * createLineSegment()
Creates a new LineSegment and adds it to the end of the list.
Definition: Curve.cpp:364
CubicBezier * createCubicBezier()
Creates a new CubicBezier and adds it to the end of the list.
Definition: Curve.cpp:379
Definition: Dimensions.h:71
virtual int setId(const std::string &sid)
Sets the value of the "id" attribute of this GraphicalObject.
Definition: GraphicalObject.cpp:390
void setBoundingBox(const BoundingBox *bb)
Sets the boundingbox for the GraphicalObject.
Definition: GraphicalObject.cpp:475
virtual const std::string & getId() const
Returns the value of the "id" attribute of this GraphicalObject.
Definition: GraphicalObject.cpp:372
Definition: Group.h:177
Member * createMember()
Creates a new Member object, adds it to this Group object and returns the Member object created.
Definition: Group.cpp:448
int setKind(const GroupKind_t kind)
Sets the value of the "kind" attribute of this Group.
Definition: Group.cpp:234
virtual int setId(const std::string &id)
Sets the value of the "id" attribute of this Group.
Definition: Group.cpp:213
Definition: GroupsModelPlugin.h:66
Group * createGroup()
Creates a new Group object, adds it to this GroupsModelPlugin object and returns the Group object cre...
Definition: GroupsModelPlugin.cpp:232
Definition: Layout.h:789
virtual int setId(const std::string &sid)
Sets the value of the "id" attribute of this Layout.
Definition: Layout.cpp:454
CompartmentGlyph * createCompartmentGlyph()
Creates a CompartmentGlyph object, adds it to the end of the compartment glyph objects list and retur...
Definition: Layout.cpp:1385
ReactionGlyph * createReactionGlyph()
Creates a ReactionGlyph object, adds it to the end of the reaction glyph objects list and returns a p...
Definition: Layout.cpp:1417
void setDimensions(const Dimensions *dimensions)
Sets the dimensions of the layout.
Definition: Layout.cpp:520
TextGlyph * createTextGlyph()
Creates a TextGlyph object, adds it to the end of the text glyph objects list and returns a pointer t...
Definition: Layout.cpp:1448
SpeciesGlyph * createSpeciesGlyph()
Creates a SpeciesGlyph object, adds it to the end of the species glyph objects list and returns a poi...
Definition: Layout.cpp:1401
Definition: LayoutModelPlugin.h:68
Layout * createLayout()
Creates a new layout object and adds it to the list of layout objects and returns it.
Definition: LayoutModelPlugin.cpp:480
Definition: LineSegment.h:69
void setEnd(const Point *end)
Initializes the end point with a copy of the given Point object.
Definition: LineSegment.cpp:374
void setStart(const Point *start)
Initializes the start point with a copy of the given Point object.
Definition: LineSegment.cpp:327
Definition: Member.h:85
int setIdRef(const std::string &idRef)
Sets the value of the "idRef" attribute of this Member.
Definition: Member.cpp:239
Definition: Model.h:485
Reaction * createReaction()
Creates a new Reaction inside this Model and returns it.
Definition: Model.cpp:1782
virtual int setId(const std::string &sid)
Sets the value of the "id" attribute of this Model.
Definition: Model.cpp:717
Species * createSpecies()
Creates a new Species inside this Model and returns it.
Definition: Model.cpp:1586
Compartment * createCompartment()
Creates a new Compartment inside this Model and returns it.
Definition: Model.cpp:1558
Definition: Point.h:65
Definition: ReactionGlyph.h:255
SpeciesReferenceGlyph * createSpeciesReferenceGlyph()
Creates a new SpeciesReferenceGlyph object, adds it to the end of the list of species reference objec...
Definition: ReactionGlyph.cpp:501
int setReactionId(const std::string &id)
Sets the id of the associated reaction.
Definition: ReactionGlyph.cpp:324
const Curve * getCurve() const
Returns the curve object for the reaction glyph.
Definition: ReactionGlyph.cpp:452
Definition: Reaction.h:224
SpeciesReference * createReactant()
Creates a new SpeciesReference, adds it to this Reaction's list of reactants, and returns it.
Definition: Reaction.cpp:954
int setReversible(bool value)
Sets the value of the "reversible" attribute of this Reaction.
Definition: Reaction.cpp:599
virtual int setId(const std::string &sid)
Sets the value of the "id" attribute of this Reaction.
Definition: Reaction.cpp:517
virtual const std::string & getId() const
Returns the value of the "id" attribute of this Reaction.
Definition: Reaction.cpp:376
SpeciesReference * createProduct()
Creates a new SpeciesReference, adds it to this Reaction's list of products, and returns it.
Definition: Reaction.cpp:983
int setFast(bool value)
Sets the value of the "fast" attribute of this Reaction.
Definition: Reaction.cpp:612
Definition: SBMLDocument.h:349
int setPackageRequired(const std::string &package, bool flag)
Sets the required attribute value of the given package extension.
Definition: SBMLDocument.cpp:1414
Model * createModel(const std::string sid="")
Creates a new Model inside this SBMLDocument, and returns a pointer to it.
Definition: SBMLDocument.cpp:627
int setModel(const Model *m)
Sets the Model for this SBMLDocument to a copy of the given Model.
Definition: SBMLDocument.cpp:583
Definition: SBMLNamespaces.h:145
SBasePlugin * getPlugin(const std::string &package)
Returns a plug-in object (extension interface) for an SBML Level&#160;3 package extension with the given p...
Definition: SBase.cpp:3530
virtual int setId(const std::string &sid)
Sets the value of the "id" attribute of this SimpleSpeciesReference.
Definition: SimpleSpeciesReference.cpp:214
virtual const std::string & getId() const
Returns the value of the "id" attribute of this SimpleSpeciesReference.
Definition: SimpleSpeciesReference.cpp:132
int setSpecies(const std::string &sid)
Sets the "species" attribute of this SimpleSpeciesReference.
Definition: SimpleSpeciesReference.cpp:196
Definition: SpeciesGlyph.h:65
void setSpeciesId(const std::string &id)
Sets the id of the associated species object.
Definition: SpeciesGlyph.cpp:206
Definition: Species.h:429
int setCompartment(const std::string &sid)
Sets the "compartment" attribute of this Species object.
Definition: Species.cpp:661
int setConstant(bool value)
Sets the "constant" attribute of this Species object.
Definition: Species.cpp:820
virtual const std::string & getId() const
Returns the value of the "id" attribute of this Species.
Definition: Species.cpp:278
int setBoundaryCondition(bool value)
Sets the "boundaryCondition" attribute of this Species object.
Definition: Species.cpp:787
virtual int setId(const std::string &sid)
Sets the value of the "id" attribute of this Species.
Definition: Species.cpp:591
int setHasOnlySubstanceUnits(bool value)
Sets the "hasOnlySubstanceUnits" attribute of this Species object.
Definition: Species.cpp:767
Definition: SpeciesReferenceGlyph.h:71
void setSpeciesReferenceId(const std::string &id)
Sets the id of the associated species reference.
Definition: SpeciesReferenceGlyph.cpp:309
Curve * getCurve()
Returns the curve object for the species reference glyph.
Definition: SpeciesReferenceGlyph.cpp:370
void setSpeciesGlyphId(const std::string &speciesGlyphId)
Sets the id of the associated species glyph.
Definition: SpeciesReferenceGlyph.cpp:289
void setRole(const std::string &role)
Sets the role based on a string.
Definition: SpeciesReferenceGlyph.cpp:343
Definition: SpeciesReference.h:281
int setConstant(bool flag)
Sets the "constant" attribute of this SpeciesReference to the given boolean flag.
Definition: SpeciesReference.cpp:400
Definition: TextGlyph.h:65
int setOriginOfTextId(const std::string &orig)
Sets the id of the origin of text.
Definition: TextGlyph.cpp:266
int setGraphicalObjectId(const std::string &id)
Sets the id of the associated graphical object.
Definition: TextGlyph.cpp:246