38 mGlobalQuantities.insert(x);
48 if (dynamic_cast<const CCompartment*>(x))
50 addCompartment(dynamic_cast<const CCompartment*>(x));
54 if (dynamic_cast<const CMetab*>(x))
56 addMetab(dynamic_cast<const CMetab*>(x));
60 if (dynamic_cast<const CReaction*>(x))
62 addReaction(dynamic_cast<const CReaction*>(x));
66 if (dynamic_cast<const CModelValue*>(x))
68 addGlobalQuantity(dynamic_cast<const CModelValue*>(x));
72 if (dynamic_cast<const CEvent*>(x))
74 addEvent(dynamic_cast<const CEvent*>(x));
83 if (mCompartments.find(static_cast<const CCompartment*>(x)) != mCompartments.end())
86 if (mMetabs.find(static_cast<const CMetab*>(x)) != mMetabs.end())
89 if (mReactions.find(static_cast<const CReaction*>(x)) != mReactions.end())
92 if (mGlobalQuantities.find(static_cast<const CModelValue*>(x)) != mGlobalQuantities.end())
95 if (mEvents.find(static_cast<const CEvent*>(x)) != mEvents.end())
106 return contains(tmp);
116 std::set< const CCopasiObject * > combinedSet;
118 std::set<const CCompartment*>::const_iterator itComp;
120 for (itComp = mCompartments.begin(); itComp != mCompartments.end(); ++itComp)
122 std::set< const CCopasiObject * > tmp = (*itComp)->getDeletedObjects();
123 combinedSet.insert(tmp.begin(), tmp.end());
126 std::set<const CMetab*>::const_iterator itMetab;
128 for (itMetab = mMetabs.begin(); itMetab != mMetabs.end(); ++itMetab)
130 std::set< const CCopasiObject * > tmp = (*itMetab)->getDeletedObjects();
131 combinedSet.insert(tmp.begin(), tmp.end());
134 std::set<const CReaction*>::const_iterator itReac;
136 for (itReac = mReactions.begin(); itReac != mReactions.end(); ++itReac)
138 std::set< const CCopasiObject * > tmp = (*itReac)->getDeletedObjects();
139 combinedSet.insert(tmp.begin(), tmp.end());
142 std::set<const CModelValue*>::const_iterator itQuant;
144 for (itQuant = mGlobalQuantities.begin(); itQuant != mGlobalQuantities.end(); ++itQuant)
146 std::set< const CCopasiObject * > tmp = (*itQuant)->getDeletedObjects();
147 combinedSet.insert(tmp.begin(), tmp.end());
162 std::set< const CCopasiObject * > reacs, metabs, comps, values, events;
166 std::set< const CCopasiObject * >::const_iterator it;
168 for (it = reacs.begin(); it != reacs.end(); ++it)
169 addReaction(dynamic_cast<const CReaction*>(*it));
171 for (it = metabs.begin(); it != metabs.end(); ++it)
172 addMetab(dynamic_cast<const CMetab*>(*it));
174 for (it = comps.begin(); it != comps.end(); ++it)
175 addCompartment(dynamic_cast<const CCompartment*>(*it));
177 for (it = values.begin(); it != values.end(); ++it)
178 addGlobalQuantity(dynamic_cast<const CModelValue*>(*it));
180 for (it = events.begin(); it != events.end(); ++it)
181 addEvent(dynamic_cast<const CEvent*>(*it));
211 std::map<const CCopasiObject*, CCopasiObject*>::const_iterator it;
212 it = mMap.find(source);
213 return (it != mMap.end() && it->second != NULL);
229 std::map<const CCopasiObject*, CCopasiObject*>::const_iterator it;
230 it = mMap.find(source);
232 if (it != mMap.end())
292 std::string indexstr =
"[1]";
312 if (listOfMetabolites.size() > 0)
316 std::string original_metab_key = listOfMetabolites[0];
341 std::vector<CModelValue*> diffusionConstants;
342 std::set<std::string>::const_iterator itMetab;
344 for (itMetab = setOfMetabolites.begin(); itMetab != setOfMetabolites.end(); ++itMetab)
362 diffusionConstants.push_back(newObj);
367 std::vector<ElementsMap> maps;
370 for (i = 0; i < n; ++i)
372 std::ostringstream indexstr;
373 indexstr <<
"[" << i <<
"]";
374 duplicate(source, indexstr.str(), maps[i]);
379 std::vector<CModelValue*>::const_iterator itDiff;
381 for (itMetab = setOfMetabolites.begin(), itDiff = diffusionConstants.begin();
382 itMetab != setOfMetabolites.end();
385 std::ostringstream diffname;
386 diffname << (*itDiff)->getObjectName() <<
"[" << i - 1 <<
"-" << i <<
"]";
388 maps[i - 1].getDuplicateKey(*itMetab),
389 maps[i].getDuplicateKey(*itMetab), (*itDiff)->getKey());
402 std::vector<CModelValue*> diffusionConstants;
403 std::set<std::string>::const_iterator itMetab;
405 for (itMetab = setOfMetabolites.begin(); itMetab != setOfMetabolites.end(); ++itMetab)
423 diffusionConstants.push_back(newObj);
428 std::vector<std::vector<ElementsMap> > maps;
431 for (i = 0; i < nx; ++i)
434 for (i = 0; i < nx; ++i)
435 for (j = 0; j < ny; ++j)
437 std::ostringstream indexstr;
438 indexstr <<
"[" << i <<
"," << j <<
"]";
439 duplicate(source, indexstr.str(), maps[i][j]);
444 std::vector<CModelValue*>::const_iterator itDiff;
446 for (itMetab = setOfMetabolites.begin(), itDiff = diffusionConstants.begin();
447 itMetab != setOfMetabolites.end();
450 std::ostringstream diffname;
451 diffname << (*itDiff)->getObjectName() <<
"[" << i - 1 <<
"-" << i <<
"," << j <<
"]";
453 maps[i - 1][j].getDuplicateKey(*itMetab),
454 maps[i][j].getDuplicateKey(*itMetab), (*itDiff)->getKey());
460 std::vector<CModelValue*>::const_iterator itDiff;
462 for (itMetab = setOfMetabolites.begin(), itDiff = diffusionConstants.begin();
463 itMetab != setOfMetabolites.end();
466 std::ostringstream diffname;
467 diffname << (*itDiff)->getObjectName() <<
"[" << i <<
"," << j - 1 <<
"-" << j <<
"]";
469 maps[i][j - 1].getDuplicateKey(*itMetab),
470 maps[i][j].getDuplicateKey(*itMetab), (*itDiff)->getKey());
485 duplicate(sourceElements,
"[merge]", map);
488 std::set<CCopasiObject*> ret;
489 std::map<const CCopasiObject*, CCopasiObject*>::const_iterator it;
491 for (it = map.
getMap().begin(); it != map.
getMap().end(); ++it)
493 ret.insert(it->second);
502 std::set<const CCompartment*>::const_iterator itComp;
509 std::set<const CMetab*>::const_iterator itMetab;
511 for (itMetab = source.
mMetabs.begin(); itMetab != source.
mMetabs.end(); ++itMetab)
516 std::set<const CReaction*>::const_iterator itReac;
523 std::set<const CModelValue*>::const_iterator itME;
530 std::set<const CEvent*>::const_iterator itEvent;
532 for (itEvent = source.
mEvents.begin(); itEvent != source.
mEvents.end(); ++itEvent)
534 duplicateEvent(const_cast<CEvent*>(*itEvent), index, source, emap);
550 std::ostringstream infix;
554 std::ostringstream name;
562 emap.
add(source, newObj);
593 if (!sourceSet.
contains(sourceParent))
595 parent = sourceParent;
603 if (!emap.
exists(sourceParent))
613 std::ostringstream infix;
617 std::ostringstream name;
630 emap.
add(source, newObj);
652 std::ostringstream infix;
656 std::ostringstream name;
664 emap.
add(source, newObj);
672 const CMetab* pMetab = NULL;
693 const CMetab* pMetab = NULL;
714 const CMetab* pMetab = NULL;
757 std::string targetKey;
840 std::ostringstream infix;
844 std::ostringstream name;
852 emap.
add(source, newObj);
883 std::ostringstream infix;
887 std::ostringstream name;
895 emap.
add(source, newObj);
914 emap.
add(source, newObj);
958 std::vector< CEvaluationNode * >::const_iterator it = exp->
getNodeList().begin();
959 std::vector< CEvaluationNode * >::const_iterator end = exp->
getNodeList().end();
961 for (; it != end; ++it)
970 std::string refname =
"";
971 std::string reftype =
"";
1001 std::cout <<
"!!!" << std::endl;
1003 if (dynamic_cast<const CCompartment*>(pObj))
1006 if (dynamic_cast<const CMetab*>(pObj))
1007 duplicateMetab(dynamic_cast<const CMetab*>(pObj), index, sourceSet, emap);
1009 if (dynamic_cast<const CModelValue*>(pObj))
1012 if (dynamic_cast<const CReaction*>(pObj))
1013 duplicateReaction(dynamic_cast<const CReaction*>(pObj), index, sourceSet, emap);
1040 std::vector< CEvaluationNode * >::const_iterator it = exp->
getNodeList().begin();
1041 std::vector< CEvaluationNode * >::const_iterator end = exp->
getNodeList().end();
1043 for (; it != end; ++it)
1067 const std::string & metabkey1,
const std::string & metabkey2,
1068 const std::string & parameterkey)
1072 std::ostringstream name_;
1102 std::vector<CMetab*> metvec;
1107 for (i = 0; i < metvec.size(); ++i)
1123 std::map<const CCopasiObject*, CCopasiObject*>::const_iterator it;
1125 for (it = emap.
getMap().begin(); it != emap.
getMap().end(); ++it)
1127 if (dynamic_cast<const CCompartment*>(it->first))
1133 if (dynamic_cast<const CMetab*>(it->first))
1139 if (dynamic_cast<const CReaction*>(it->first))
1145 if (dynamic_cast<const CModelValue*>(it->first))
1151 if (dynamic_cast<const CEvent*>(it->first))
1153 mpModel->
removeEvent(const_cast<CEvent*>(dynamic_cast<const CEvent*>(it->first)),
true);
1175 bool success =
false;
1253 if (targetKey !=
"")
1290 if (replacekey !=
"")
1301 std::vector< CEvaluationNode * >::const_iterator it = exp->
getNodeList().begin();
1302 std::vector< CEvaluationNode * >::const_iterator end = exp->
getNodeList().end();
1304 for (; it != end; ++it)
1313 std::string refname =
"";
1314 std::string reftype =
"";
1353 size_t s2 = sme.
mMetabs.size();
1356 size_t s5 = sme.
mEvents.size();
void replaceInExpression(CExpression *exp, const ElementsMap &emap)
const CExpression * getExpressionPtr() const
Header file of class CExpression.
void setReversible(bool reversible)
const CCopasiVectorN< CEventAssignment > & getAssignments() const
std::set< CCopasiObject * > copyCompleteModel(const CModel *pSourceModel)
const bool & getDelayAssignment() const
bool addMetabolite(CMetab *metabolite)
CEvent * createEvent(const std::string &name)
CCopasiVectorN< CEvent > & getEvents()
CCopasiVectorNS< CMetab > & getMetabolites()
virtual CCopasiObjectName getCN() const
bool addSubstrate(const std::string &metabKey, const C_FLOAT64 &multiplicity=1.0)
void addReaction(const CReaction *x)
const CCopasiVector< CMetab > & getMetabolites() const
const CObjectInterface * getObjectInterfacePtr() const
const std::string & getObjectName() const
void simpleCall(const CCompartment *source, std::vector< std::string > listOfMetabolites, int mult, bool diff)
CCopasiObjectName getRemainder() const
bool setDimensionality(unsigned C_INT32 dim)
const CCopasiVectorN< CModelValue > & getModelValues() const
virtual const CObjectInterface * getObject(const CCopasiObjectName &cn) const
unsigned C_INT32 getDimensionality() const
virtual size_t size() const
const CRegisteredObjectName & getObjectCN() const
bool removeMetabolite(const std::string &key, const bool &recursive=true)
std::set< const CEvent * > mEvents
const std::string & getTargetKey() const
std::set< const CCompartment * > mCompartments
CCopasiObject * get(const std::string &key)
virtual const std::string & getKey() const
void setParameterValue(const std::string ¶meterName, const C_FLOAT64 &value, const bool &updateStatus=true)
bool removeCompartment(const size_t index, const bool &recursive=true)
const CMetab * getMetabolite() const
void replaceInModelEntity(CModelEntity *pX, const ElementsMap &emap)
void setNotes(const std::string ¬es)
const CExpression * getExpressionPtr() const
bool setExpression(const std::string &expression)
bool addProduct(const std::string &metabKey, const C_FLOAT64 &multiplicity=1.0)
bool isLocalParameter(const size_t &index) const
void addGlobalQuantity(const CModelValue *x)
const std::string & getObjectType() const
bool setInitialExpression(const std::string &expression)
void replaceInReaction(CReaction *pX, const ElementsMap &emap)
std::string getExpression() const
void clearParameterMapping(const std::string ¶meterName)
std::string getTriggerExpression() const
std::string getObjectType() const
virtual bool compile(std::vector< CCopasiContainer * > listOfContainer=CCopasiContainer::EmptyList)
CModelValue * createModelValue(const std::string &name, const C_FLOAT64 &value=0.0)
void setMiriamAnnotation(const std::string &miriamAnnotation, const std::string &newId, const std::string &oldId)
bool setTargetKey(const std::string &targetKey)
bool expressionContainsObject(const CExpression *exp, const SetOfModelElements &sourceSet)
void duplicateMetab(const CMetab *source, const std::string &index, const SetOfModelElements &sourceSet, ElementsMap &emap)
const std::string & getMiriamAnnotation() const
bool duplicate(const SetOfModelElements &source, const std::string &index, ElementsMap &emap)
CExpression * getDelayExpressionPtr()
CCopasiObjectName getPrimary() const
virtual const std::string & getKey() const
bool removeModelValue(const CModelValue *pModelValue, const bool &recursive=true)
void duplicateEvent(CEvent *source, const std::string &index, const SetOfModelElements &sourceSet, ElementsMap &emap)
const C_FLOAT64 & getInitialValue() const
const CCopasiVector< CChemEqElement > & getProducts() const
const CFunction * getFunction() const
void addMetab(const CMetab *x)
bool appendDependentModelObjects(const std::set< const CCopasiObject * > &candidates, std::set< const CCopasiObject * > &dependentReactions, std::set< const CCopasiObject * > &dependentMetabolites, std::set< const CCopasiObject * > &dependentCompartments, std::set< const CCopasiObject * > &dependentModelValues, std::set< const CCopasiObject * > &dependentEvents) const
void createRectangularArray(const SetOfModelElements &source, size_t nx, size_t ny, const std::set< std::string > &setOfMetabolites)
const CFunctionParameters & getFunctionParameters() const
virtual bool add(const CType &src)
void createDiffusionReaction(const std::string &name, const std::string &metabkey1, const std::string &metabkey2, const std::string ¶meterkey)
bool addModifier(const std::string &metabKey, const C_FLOAT64 &multiplicity=1.0)
void setMetabolite(const std::string &key)
bool existDependentEntities(const CCopasiObject *pObj)
const std::string & getNotes() const
bool setFunction(const std::string &functionName)
virtual const std::string & getKey() const
virtual void setStatus(const CModelEntity::Status &status)
CReaction * createReaction(const std::string &name)
bool setTriggerExpression(const std::string &expression)
const C_FLOAT64 & getMultiplicity() const
void add(const CCopasiObject *source, CCopasiObject *copy)
add a source->duplicate mapping
std::string getInitialExpression() const
void replaceInMetab(CMetab *pX, const ElementsMap &emap)
void initializeMetabolites()
std::string getDuplicateKey(const std::string &sourceKey) const
find the key of the duplicated object from the source object (if it exists)
void setDelayAssignment(const bool &delayCalculation)
void duplicateReaction(const CReaction *source, const std::string &index, const SetOfModelElements &sourceSet, ElementsMap &emap)
void replaceInEvent(CEvent *pX, const ElementsMap &emap)
const CCopasiVector< CChemEqElement > & getSubstrates() const
bool isReversible() const
void createLinearArray(const SetOfModelElements &source, size_t n, const std::set< std::string > &setOfMetabolites)
std::string getDelayExpression() const
void addEvent(const CEvent *x)
void setCompileFlag(bool flag=true)
void fillDependencies(const CModel *pModel)
virtual void remove(const std::string &name)
CModelExpansion(CModel *pModel)
CCopasiVectorNS< CCompartment > & getCompartments()
bool contains(const CCopasiObject *x) const
const CExpression * getTriggerExpressionPtr() const
bool addObject(const CCopasiObject *x)
void addCompartment(const CCompartment *x)
static CKeyFactory * getKeyFactory()
void duplicateGlobalQuantity(const CModelValue *source, const std::string &index, const SetOfModelElements &sourceSet, ElementsMap &emap)
bool setDelayExpression(const std::string &expression)
bool compileIfNecessary(CProcessReport *pProcessReport)
const CCopasiVector< CChemEqElement > & getModifiers() const
std::set< const CModelValue * > mGlobalQuantities
void replaceInCompartment(CCompartment *pX, const ElementsMap &emap)
void setParameterMapping(const size_t &index, const std::string &key)
CCopasiVectorNS< CReaction > & getReactions()
void fillComplete(const CModel *pModel)
virtual bool setData(const Data &data)
void replaceInModel(const ElementsMap &emap, bool remove)
void duplicateCompartment(const CCompartment *source, const std::string &index, const SetOfModelElements &sourceSet, ElementsMap &emap)
virtual const CObjectInterface * getObject(const CCopasiObjectName &cn) const
const CModelEntity::Status & getStatus() const
const std::vector< std::vector< std::string > > & getParameterMappings() const
bool setExpression(const std::string &expression)
const std::map< const CCopasiObject *, CCopasiObject * > & getMap() const
bool setObjectName(const std::string &name)
const std::vector< CEvaluationNode * > & getNodeList() const
void updateExpression(CExpression *exp, const std::string &index, const SetOfModelElements &sourceSet, ElementsMap &emap)
std::set< const CMetab * > mMetabs
const CChemEq & getChemEq() const
virtual const std::string & getKey() const
const C_FLOAT64 & getParameterValue(const std::string ¶meterName) const
CCopasiObject * getDuplicatePtr(const CCopasiObject *source) const
find the pointer of the duplicated object from the pointer to the source object (if it exists) ...
bool exists(const CCopasiObject *source) const
does a copy of the source object exist?
const CModel * mpSourceModel
CCopasiContainer * getObjectParent() const
std::string getExpression() const
const CExpression * getInitialExpressionPtr() const
void addParameterMapping(const size_t &index, const std::string &key)
bool removeEvent(const size_t index, const bool &recursive=true)
bool removeReaction(const CReaction *pReaction, const bool &recursive=true)
CCompartment * createCompartment(const std::string &name, const C_FLOAT64 &volume=1.0)
void setModel(CModel *pModel)
bool forceCompile(CProcessReport *pProcessReport)
std::set< const CReaction * > mReactions
CMetab * createMetabolite(const std::string &name, const std::string &compartment, const C_FLOAT64 &iconc=1.0, const CModelEntity::Status &status=CModelEntity::REACTIONS)