16 # pragma warning (disable: 4786)
17 # pragma warning (disable: 4243)
19 # pragma warning (disable: 4355)
90 if ((pParm =
getParameter(
"STOCH.UseRandomSeed")) != NULL)
135 while (time < endtime)
190 for (i = 0; i <
mNumbers.size(); ++i)
241 if (rate_factor < 0.0)
249 mAmu[index] = rate_factor;
272 for (
size_t i = 0; i < substrates.size(); i++)
274 num_ident = substrates[i].mMultiplicity;
279 number =
mNumbers[substrates[i].mIndex];
280 lower_bound = number - num_ident;
281 substrate_factor = substrate_factor * pow((
double) number, (
int)(num_ident - 1));
285 while (number > lower_bound)
293 if ((amu == 0) || (substrate_factor == 0))
306 amu *= rate_factor / substrate_factor;
311 mAmu[index] = rate_factor;
328 std::vector<CStochBalance>::const_iterator bi;
331 for (bi = bals.begin(); bi != bals.end(); bi++)
353 for (i = 0; i < imax; ++i)
370 std::set<size_t>::const_iterator it;
373 for (it = dep_nodes.begin(); it != dep_nodes.end(); it++)
410 if (
mA0 == 0)
return std::numeric_limits<C_FLOAT64>::infinity();
413 return - 1 * log(rand2) /
mA0;
418 if (
mAmu[reaction_index] == 0)
return std::numeric_limits<C_FLOAT64>::infinity();
421 return - 1 * log(rand2) /
mAmu[reaction_index];
427 std::vector< std::set<std::string>* > DependsOn;
428 std::vector< std::set<std::string>* > Affects;
456 std::set<std::string>::iterator iter = Affects[i]->begin();
458 for (; iter != Affects[i]->end(); iter++)
460 if (DependsOn[j]->count(*iter))
489 for (j = 0; j < bbb->
size(); j++)
493 assert((*bbb)[j]->getMetabolite());
507 for (j = 0; j < bbb->
size(); j++)
511 assert((*bbb)[j]->getMetabolite());
536 std::set<std::string> *retset =
new std::set<std::string>;
541 for (i = 0; i < imax; ++i)
547 const std::vector <std::string> & metabKeylist =
549 jmax = metabKeylist.size();
551 for (j = 0; j < jmax; ++j)
553 retset->insert(metabKeylist[j]);
562 std::set<std::string> *retset =
new std::set<std::string>;
568 for (
size_t i = 0; i < balances.
size(); i++)
570 if (!balances[i]->getMetabolite())
continue;
572 if (fabs(balances[i]->getMultiplicity()) >= 0.1)
575 retset->insert(balances[i]->getMetabolite()->
getKey());
606 for (i = 0; i < imax; ++i)
618 for (i = 0; i < imax; ++i)
630 for (i = 0; i < imax; ++i)
680 for (i = 0; i < imax; ++i)
692 for (i = 0; i < imax; ++i)
704 for (i = 0; i < imax; ++i)
size_t generateReactionIndex()
std::vector< C_FLOAT64 > mAmu
virtual void initMethod(C_FLOAT64 start_time)=0
virtual C_FLOAT64 doSingleStep(C_FLOAT64 time, C_FLOAT64 endtime)=0
std::set< std::string > * getAffects(size_t reaction_index)
CCopasiVectorN< CEvent > & getEvents()
C_INT32 updatePropensities()
const CCopasiVector< CMetab > & getMetabolites() const
std::set< std::string > * getDependsOn(size_t reaction_index)
std::vector< std::vector< CStochBalance > > mLocalBalances
const CCopasiVectorN< CModelValue > & getModelValues() const
virtual C_FLOAT64 getRandomOO()
virtual size_t size() const
void addDependent(const size_t &node, const size_t &dependent)
std::vector< C_FLOAT64 > mAmuOld
size_t getNumMetabs() const
void initializeParameter()
void updateSimulatedValues(const bool &updateMoieties)
virtual bool elevateChildren()
const std::set< size_t > & getDependents(const size_t &node) const
CTrajectoryProblem * mpProblem
virtual void setValue(const C_FLOAT64 &value)
size_t getIndex(const CModelEntity *entity) const
std::vector< std::vector< CStochBalance > > mLocalSubstrates
static C_INT32 checkModel(CModel *pmodel)
virtual bool isValidProblem(const CCopasiProblem *pProblem)
void setTime(const C_FLOAT64 &time)
size_t getTotSteps() const
void resize(const size_t &n)
bool removeParameter(const std::string &name)
#define MCTrajectoryMethod
static CRandom * createGenerator(CRandom::Type type=CRandom::mt19937, unsigned C_INT32 seed=0)
size_t getNumVariableMetabs() const
const C_FLOAT64 & getDuration() const
virtual const std::string & getKey() const
virtual void start(const CState *initialState)
const Value & getValue() const
bool setValue(const std::string &name, const CType &value)
CCopasiParameter * getParameter(const std::string &name)
C_INT32 updateSystemState(size_t reaction_index, const C_FLOAT64 &time)
void setTime(const C_FLOAT64 &time)
CCopasiVectorNS< CCompartment > & getCompartments()
const C_FLOAT64 & getTime() const
CStochMethod(const CCopasiContainer *pParent=NULL)
virtual size_t getIndex(const CCopasiObject *pObject) const
const CStateTemplate & getStateTemplate() const
size_t getNumModelValues() const
C_INT32 calculateAmu(size_t reaction_index)
const ModelType & getModelType() const
C_INT64 mMaxIntBeforeStep
CCopasiVectorNS< CReaction > & getReactions()
void setupDependencyGraphAndBalances()
CCopasiParameter * assertParameter(const std::string &name, const CCopasiParameter::Type type, const CType &defaultValue)
const CState & getState() const
CRandom * mpRandomGenerator
C_FLOAT64 generateReactionTime()
const CCopasiVector< CMetab > & getMetabolitesX() const
std::vector< C_INT64 > mNumbers
std::string suitableForStochasticSimulation() const
virtual bool isValidProblem(const CCopasiProblem *pProblem)
CModel * getModel() const
virtual Status step(const double &deltaT)
C_FLOAT64 * beginIndependent()
virtual void initialize(unsigned C_INT32 seed=CRandom::getSystemSeed())
static bool modelHasAssignments(const CModel *pModel)