32 #define METAB_MOIETY 7
50 mConc(std::numeric_limits<
C_FLOAT64>::quiet_NaN()),
56 mIsInitialConcentrationChangeAllowed(true)
79 mConcRate(src.mConcRate),
82 mpMoiety(src.mpMoiety),
83 mIsInitialConcentrationChangeAllowed(src.mIsInitialConcentrationChangeAllowed)
120 if (
mpModel == NULL)
return "";
146 if (CompartmentUnit ==
"")
151 return "1/" + CompartmentUnit;
154 if (CompartmentUnit ==
"")
159 return Unit +
"/" + CompartmentUnit;
165 if (CompartmentUnit ==
"")
172 return "1/" + TimeUnit;
177 return "1/" + CompartmentUnit;
180 return "1/(" + CompartmentUnit +
"*" + TimeUnit +
")";
184 if (CompartmentUnit ==
"")
191 return Unit +
"/" + TimeUnit;
196 return Unit +
"/" + CompartmentUnit;
199 return Unit +
"/(" + CompartmentUnit +
"*" + TimeUnit +
")";
227 {
mTT = transitionTime;}
238 if (CurrentStatus !=
FIXED)
254 mConc = concentration;
259 mIConc = initialConcentration;
297 if (status == OldStatus)
return;
314 if (pVolumeReference)
315 Dependencies.insert(pVolumeReference);
335 if (pVolumeReference)
336 Dependencies.insert(pVolumeReference);
341 Dependencies.clear();
344 if (pVolumeReference)
345 Dependencies.insert(pVolumeReference);
359 if (pVolumeReference)
360 Dependencies.insert(pVolumeReference);
368 Dependencies.clear();
370 if (pVolumeReference)
371 Dependencies.insert(pVolumeReference);
412 std::set<const CCopasiObject *> Dependencies;
413 std::vector< CCopasiContainer * > listOfContainer;
425 if (pVolumeReference)
426 Dependencies.insert(pVolumeReference);
432 Dependencies.clear();
441 if (pVolumeReference)
442 Dependencies.insert(pVolumeReference);
450 mTT = std::numeric_limits<C_FLOAT64>::infinity();
466 mRate = std::numeric_limits< C_FLOAT64 >::quiet_NaN();
467 mConcRate = std::numeric_limits< C_FLOAT64 >::quiet_NaN();
468 mTT = std::numeric_limits< C_FLOAT64 >::quiet_NaN();
475 if (pVolumeReference)
476 Dependencies.insert(pVolumeReference);
485 if (pVolumeReference)
486 Dependencies.insert(pVolumeReference);
490 Dependencies.clear();
496 if (pVolumeReference)
497 Dependencies.insert(pVolumeReference);
504 Dependencies.clear();
511 Dependencies.clear();
518 if (pVolumeReference)
519 Dependencies.insert(pVolumeReference);
524 Dependencies.clear();
531 for (; it != end; ++it)
534 (*it)->getChemEq().getBalances();
538 for (; itChem != endChem; ++itChem)
539 if ((*itChem)->getMetaboliteKey() ==
mKey)
542 if (itChem != endChem)
544 Dependencies.insert((*it)->getParticleFluxReference());
546 std::pair< C_FLOAT64, const C_FLOAT64 * > Insert;
547 Insert.first = (*itChem)->getMultiplicity();
548 Insert.second = &(*it)->getParticleFlux();
562 Dependencies.clear();
568 if (pVolumeReference)
569 Dependencies.insert(pVolumeReference);
576 Dependencies.clear();
593 std::set<const CCopasiObject *> Dependencies;
594 std::vector< CCopasiContainer * > listOfContainer;
613 Dependencies.clear();
632 Dependencies.clear();
713 std::vector< std::pair< C_FLOAT64, const C_FLOAT64 * > >::const_iterator it =
715 std::vector< std::pair< C_FLOAT64, const C_FLOAT64 * > >::const_iterator end =
718 for (; it != end; ++it)
719 mRate += it->first * *it->second;
748 std::vector< std::pair< C_FLOAT64, const C_FLOAT64 * > >::const_iterator it =
750 std::vector< std::pair< C_FLOAT64, const C_FLOAT64 * > >::const_iterator end =
753 for (; it != end; ++it)
755 Flux = it->first * *it->second;
758 PositiveFlux += Flux;
760 NegativeFlux -= Flux;
763 Flux =
std::min(PositiveFlux, NegativeFlux);
766 mTT = std::numeric_limits<C_FLOAT64>::infinity();
781 assert(pValue != NULL);
788 assert(pValue != NULL);
821 bool MustBeDeleted =
false;
825 DataObjectSet::const_iterator it = ChildObjects.begin();
826 DataObjectSet::const_iterator end = ChildObjects.end();
828 for (; it != end; ++it)
832 if ((*it)->CCopasiObject::mustBeDeleted(deletedObjects))
834 MustBeDeleted =
true;
851 if ((*it)->mustBeDeleted(deletedObjects))
853 MustBeDeleted =
true;
858 return MustBeDeleted;
903 os <<
" mConc " << d.
mConc <<
" mIConc " << d.
mIConc << std::endl;
904 os <<
" mValue (particle number) " << *d.
mpValue <<
" mIValue " << *d.
mpIValue << std::endl;
905 os <<
" mRate " << d.
mRate <<
" mTT " << d.
mTT <<
" mStatus " << d.
getStatus() << std::endl;
910 os <<
" mpCompartment == 0 " << std::endl;
913 os <<
" mpModel == " << d.
mpModel << std::endl;
915 os <<
" mpModel == 0 " << std::endl;
917 os <<
" ----CMetab " << std::endl;
927 Fail = configbuffer.
getVariable(
"Metabolite",
"string",
936 Fail = configbuffer.
getVariable(
"InitialConcentration",
"C_FLOAT64",
944 (
void *) & GepasiStatus);
952 if ((GepasiStatus < 0) || (GepasiStatus > 7))
955 "The file specifies a non-existing type "
956 "for '%s'.\nReset to internal species.",
965 "The file specifies a negative concentration "
966 "for '%s'.\nReset to default.",
1009 mStatus(src.mStatus),
1010 mCompartment(src.mCompartment)
1021 Fail = configbuffer.
getVariable(
"Metabolite",
"string",
1030 Fail = configbuffer.
getVariable(
"Concentration",
"C_FLOAT64",
1036 Fail = configbuffer.
getVariable(
"Compartment",
"C_INT32",
1044 Fail = configbuffer.
getVariable(
"Type",
"C_INT32",
1056 "The file specifies a non-existing type "
1057 "for '%s'.\nReset to internal species.",
1066 "The file specifies a negative concentration "
1067 "for '%s'.\nReset to default.",
1084 mpApplyInitialValuesRefresh(NULL)
1086 const CMetab * pMetab =
static_cast< const CMetab *
>(pParent);
1096 mpApplyInitialValuesRefresh(NULL)
1098 const CMetab * pMetab =
static_cast< const CMetab *
>(pParent);
1115 if (context.count(
this) > 0)
1129 if (changedObjects.find(
this) != changedObjects.end())
1164 if (context.count(
this) > 0)
1172 if (pSpecies == NULL ||
1197 if (pConcentrationReference != NULL &&
1198 context.count(pConcentrationReference) > 0)
1212 if (pMoiety != NULL)
1234 if (changedObjects.find(
this) != changedObjects.end())
1253 if (changedObjects.find(pConcentrationReference) != changedObjects.end())
Header file of class CExpression.
CCopasiDataModel * getObjectDataModel()
CCopasiContainer * getObjectAncestor(const std::string &type) const
bool remove(const std::string &key)
static DataObjectSet EmptyDependencies
virtual std::string getObjectDisplayName(bool regular=true, bool richtext=false) const
void clearDirectDependencies()
void setRefresh(CType *pType, void(CType::*method)(void))
CCopasiObjectReference< C_FLOAT64 > * mpIValueReference
std::string getTimeUnitsDisplayString() const
CExpression * mpInitialExpression
const C_FLOAT64 & getRate() const
const std::string & getObjectName() const
std::string getFrequencyUnitsDisplayString() const
static DataObjectSet EmptyDependencies
bool hasCircularDependencies(DataObjectSet &candidates, DataObjectSet &verified, const DataObjectSet &context) const
CCopasiObject * getInitialValueReference() const
void setDirectDependencies(const DataObjectSet &directDependencies)
CCopasiObjectReference< C_FLOAT64 > * mpRateReference
CConcentrationReference()
virtual bool compile(std::vector< CCopasiContainer * > listOfContainer=CCopasiContainer::EmptyList)
static CExpression * createInitialExpression(const CExpression &expression, const CCopasiDataModel *pDataModel)
virtual bool isPrerequisiteForContext(const CObjectInterface *pObject, const CMath::SimulationContextFlag &context, const CObjectInterface::ObjectSet &changedObjects) const
virtual const DataObjectSet & getDirectDependencies(const DataObjectSet &context=DataObjectSet()) const
const C_FLOAT64 & getInitialValue() const
virtual std::string getChildObjectUnits(const CCopasiObject *pObject) const
const C_FLOAT64 & getQuantity2NumberFactor() const
const C_FLOAT64 & getNumber2QuantityFactor() const
virtual const C_FLOAT64 & calcValue()
virtual void setStatus(const CModelEntity::Status &status)
Refresh * mpApplyInitialValuesRefresh
~CConcentrationReference()
std::string getInitialExpression() const
const C_FLOAT64 & getDependentNumber() const
CCopasiObjectReference< C_FLOAT64 > * mpValueReference
std::string add(const std::string &prefix, CCopasiObject *pObject)
virtual std::set< const CCopasiObject * > getDeletedObjects() const
virtual void * getValuePointer() const
std::set< const CObjectInterface * > ObjectSet
virtual const DataObjectSet & getDirectDependencies(const DataObjectSet &context=DataObjectSet()) const
virtual bool setObjectParent(const CCopasiContainer *pParent)
std::string getQuantityUnitsDisplayString() const
const C_FLOAT64 & getValue() const
static CKeyFactory * getKeyFactory()
Refresh * getApplyInitialValueRefresh() const
CExpression * mpExpression
virtual const DataObjectSet & getDirectDependencies(const DataObjectSet &context=DataObjectSet()) const
CCopasiVectorNS< CReaction > & getReactions()
virtual void setInitialValue(const C_FLOAT64 &initialValue)
C_INT32 getVariable(const std::string &name, const std::string &type, void *pout, CReadConfig::Mode mode=CReadConfig::NEXT)
virtual const CObjectInterface::ObjectSet & getPrerequisites() const
const CModelEntity::Status & getStatus() const
bool setObjectName(const std::string &name)
CCopasiObject * getRateReference() const
std::set< const CCopasiObject * > DataObjectSet
CCopasiObject * addObjectReference(const std::string &name, CType &reference, const unsigned C_INT32 &flag=0)
const std::string & getInfix() const
CCopasiObject * getDependentNumberReference() const
CCopasiContainer * getObjectParent() const
#define CONSTRUCTOR_TRACE
virtual bool isPrerequisiteForContext(const CObjectInterface *pObject, const CMath::SimulationContextFlag &context, const CObjectInterface::ObjectSet &changedObjects) const
CCopasiObject * getValueReference() const