50 if (pTask == NULL)
return false;
54 if (
mpModel == NULL)
return false;
62 unsigned C_INT32 row, numRows = ModelStoi.numRows();
63 unsigned C_INT32 col, numCols = ModelStoi.numCols();
72 for (row = 0; row < numRows; row++)
74 if (Reaction[row]->isReversible())
78 unsigned C_INT32 numOrigRows = numRows;
84 mStoi.resize(numRows);
85 std::vector< std::vector< C_FLOAT64 > >::iterator it =
mStoi.begin();
86 std::vector< std::vector< C_FLOAT64 > >::iterator end =
mStoi.end();
88 for (; it != end; ++it)
93 mReorderedReactions.resize(numRows);
97 unsigned C_INT32 InsertReversible = 0;
98 unsigned C_INT32 InsertIrreversible = numRows - 1;
107 for (row = 0; row < numOrigRows; row++)
109 if (Reaction[row]->isReversible())
111 Insert = InsertReversible++;
118 Insert = InsertIrreversible--;
122 mReorderedReactions[Insert] = Reaction[row];
124 for (col = 0; col < numCols; col++)
126 mStoi[Insert][col] = ModelStoi(row, col);
128 if (Reaction[row]->isReversible())
129 mStoi[InsertReversible - 1][col] = - ModelStoi(row, col);
214 memset(outarray, 0, ijmax * ijmax *
sizeof(
C_FLOAT64));
216 for (
int ecIndex = 0; ecIndex < numECs; ++ecIndex)
221 for (
int i = 0; i < ijmax; ++i)
222 for (
int j = i; j < ijmax; ++j)
223 outarray[i + j * ijmax] = inarray[i + j * ijmax] + inarray[j + i * ijmax];
238 dsyev_(&jobz, &uplo, &n, A, &lda, eigenvalues, work, &lwork, &info);
248 int partMetabs[ijmax];
249 memset(&partMetabs, 0, ijmax *
sizeof(
int));
251 for (
int j = 0; j < EC.
size(); ++j)
258 std::string type = mReorderedReactions[j]->getFunction()->getObjectName();
260 if (type.find(
"Mass action") == std::string::npos &&
261 type.find(
"Constant flux") == std::string::npos)
267 for (
int i = 0; i < ijmax; ++i)
282 if (eigenvalues[ijmax - 1] > 0)
288 for (
int i = 0; i < ijmax && state == 1; ++i)
292 if (eigenvalues[i] == 0)
294 for (
int j = 0; j < ijmax; ++ j)
295 if (partMetabs[j] && outarray[i * ijmax + j])
328 std::vector< CVector<C_FLOAT64> >::iterator iter;
349 &beta, product.
array(), &m);
365 int numRows =
mStoi[0].size();
366 int numCols =
mStoi.size();
371 for (
int i = 0; i < numRows; ++i)
372 for (
int j = 0; j < numCols; ++j)
397 substrates = mReorderedReactions[ireac]->getChemEq().getProducts();
399 substrates = mReorderedReactions[ireac]->getChemEq().getSubstrates();
401 for (
int jsubst = 0; jsubst < substrates.
size(); ++jsubst)
405 substrates[jsubst]->getMetabolite());
407 if ((*found)->isDependent())
continue;
409 int kmetab = std::distance(metabOrder.
begin(), found);
424 std::vector< CFluxMode > fluxmodes = getFluxModes();
429 std::vector< CFluxMode >::iterator iter;
431 for (iter = fluxmodes.begin(); iter != fluxmodes.end(); ++iter)
436 for (i = 0; i < iter->size(); ++i)
438 extremecurrent[iter->getReactionIndex(i)] = iter->getMultiplier(i);
bool process(CProcessReport *handler)
std::vector< bool > mIsBackwardReaction
CCopasiProblem * getProblem()
std::vector< TriLogic > mIsMixingStable
unsigned C_INT32 mMaxStep
virtual size_t size() const
std::vector< std::vector< C_FLOAT64 > > mStoi
bool isReactionReversed(int index) const
virtual size_t numRows() const
void resize(size_t size, const bool ©=false)
const CMatrix< C_FLOAT64 > & getRedStoi() const
std::vector< CVector< C_FLOAT64 > > mExtremeCurrents
bool testForMixingStability()
CMatrix< C_FLOAT64 > mTransposedKineticMatrix
bool buildKineticMatrix()
void calculateFluxModes()
size_t addItem(const std::string &name, const std::string &value, const std::string *pEndValue=NULL)
TriLogic isMixingStable(int indexEC)
virtual bool finishItem(const size_t &handle)
int dgemm_(char *transa, char *transb, integer *m, integer *n, integer *k, doublereal *alpha, doublereal *a, integer *lda, doublereal *b, integer *ldb, doublereal *beta, doublereal *c, integer *ldc)
bool buildExtremeCurrents()
CCopasiVectorNS< CReaction > mReactions
virtual void resize(size_t rows, size_t cols, const bool ©=false)
size_t getNumIndependentReactionMetabs() const
std::vector< CMatrix< C_FLOAT64 > > mTransformedSubJacobians
bool buildStoichiometry()
CMatrix< CType > diag(CVector< CType > vector)
int dsyev_(char *jobz, char *uplo, integer *n, doublereal *a, integer *lda, doublereal *w, doublereal *work, integer *lwork, integer *info)
CMatrix< C_FLOAT64 > mStoichiometry
CCopasiVectorNS< CReaction > & getReactions()
CSSAMethod(const CSSAMethod &src, const CCopasiContainer *pParent=NULL)
const CCopasiVector< CMetab > & getMetabolitesX() const
virtual size_t numCols() const
CProcessReport * mpCallBack
CModel * getModel() const
CCopasiContainer * getObjectParent() const