48 #endif // COPASI_DEBUG
50 CCopasiMethod::stoichiometricStabilityAnalysis,
90 std::ostream * pOstream)
94 if (pMethod == NULL)
return false;
134 std::stringstream tmp;
135 tmp.flags(std::ios::fixed);
138 const std::vector< const CReaction * > & ReorderedReactions =
151 for (j = 0; j < jmax; j++)
155 std::string addstrng =
"";
157 if (ReorderedReactions[FluxModes[index].
getReactionIndex(j)]->isReversible())
159 addstrng =
" (Forward)";
162 addstrng =
" (Backward)";
165 tmp << FluxModes[index].getMultiplier(j) <<
" * "
166 << ReorderedReactions[FluxModes[index].getReactionIndex(j)]->getObjectName()
172 for (j = 0; itMode != endMode; ++itMode, j++)
176 tmp << itMode->second <<
" * "
177 << ReorderedReactions[itMode->first]->getObjectName();
201 std::string retstring = getReactionEquationForward(index1, index2);
205 if (method->
isReactionReversed(pMethod->getFluxModes()[index1].getReactionIndex(index2)))
206 retstring = getReactionEquationBackward(index1, index2);
217 const CMetab & metab)
const
226 std::string Key = metab.
getKey();
228 const std::vector< const CReaction * > & ReorderedReactions =
231 for (; itReaction != endReaction; ++itReaction)
233 const CReaction * pReaction = ReorderedReactions[itReaction->first];
235 if (itReaction->second < 0.0)
249 for (; it != end; ++it)
251 if ((*it)->getMetaboliteKey() == Key)
253 *pIn += fabs(itReaction->second) * (*it)->getMultiplicity();
261 for (; it != end; ++it)
263 if ((*it)->getMetaboliteKey() == Key)
265 *pOut += fabs(itReaction->second) * (*it)->getMultiplicity();
271 return std::make_pair(In, Out);
283 std::stringstream Substrates;
284 Substrates.flags(std::ios::fixed);
285 Substrates.precision(0);
286 std::string SubstratesSeparator =
"";
288 std::stringstream Products;
289 Products.flags(std::ios::fixed);
290 Products.precision(0);
291 std::string ProductsSeparator =
"";
293 std::map< const CMetab *, C_FLOAT64 >::const_iterator it = Data.begin();
294 std::map< const CMetab *, C_FLOAT64 >::const_iterator end = Data.end();
296 for (; it != end; ++it)
298 if (it->second > 100.0 * std::numeric_limits< C_FLOAT64 >::epsilon())
300 Products << ProductsSeparator;
302 if (it->second > 1.0 + 100.0 * std::numeric_limits< C_FLOAT64 >::epsilon())
304 Products << it->second <<
" * ";
308 ProductsSeparator =
" + ";
310 else if (it->second < -100.0 * std::numeric_limits< C_FLOAT64 >::epsilon())
312 Substrates << SubstratesSeparator;
314 if (it->second < -1.0 - 100.0 * std::numeric_limits< C_FLOAT64 >::epsilon())
316 Substrates << -it->second <<
" * ";
320 SubstratesSeparator =
" + ";
326 return Substrates.str() +
" = " + Products.str();
330 return Substrates.str() +
" -> " + Products.str();
343 std::stringstream Modifiers;
344 Modifiers.flags(std::ios::fixed);
345 Modifiers.precision(0);
346 std::string ModifiersSeparator =
"";
348 std::map< const CMetab *, C_FLOAT64 >::const_iterator it = Data.begin();
349 std::map< const CMetab *, C_FLOAT64 >::const_iterator end = Data.end();
351 for (; it != end; ++it)
353 if (fabs(it->second) < 100.0 * std::numeric_limits< C_FLOAT64 >::epsilon())
355 Modifiers << ModifiersSeparator;
357 ModifiersSeparator =
", ";
361 return Modifiers.str();
366 std::map< const CMetab *, C_FLOAT64 > NetReaction;
367 std::pair< C_FLOAT64, C_FLOAT64 > Changes;
372 const std::vector< const CReaction * > & ReorderedReactions =
377 for (; itReaction != endReaction; ++itReaction)
379 const CReaction * pReaction = ReorderedReactions[itReaction->first];
384 for (; it != end; ++it)
386 pSpecies = (*it)->getMetabolite();
388 if (NetReaction.count(pSpecies) == 0)
391 NetReaction[pSpecies] = Changes.second - Changes.first;
398 for (; it != end; ++it)
400 pSpecies = (*it)->getMetabolite();
402 if (NetReaction.count(pSpecies) == 0)
405 NetReaction[pSpecies] = Changes.second - Changes.first;
414 std::string CEFMTask::getReactionEquationForward(
unsigned C_INT32 index1,
unsigned C_INT32 index2)
const
425 int i = equation.find(
"=", 0);
426 equation.replace(i, 1,
"->");
432 std::string CEFMTask::getReactionEquationBackward(
unsigned C_INT32 index1,
unsigned C_INT32 index2)
const
443 int i = equation.find(
"=", 0);
444 std::string lhs = equation.substr(0, i - 1);
445 std::string rhs = equation.substr(i + 2 , equation.size() - i - 1);
446 equation = rhs +
" -> " + lhs;
virtual bool process(const bool &useInitialValues)
std::string getNetReaction(const CFluxMode &fluxMode) const
virtual bool setCallBack(CProcessReport *pCallBack)
static CEFMMethod * createMethod(CCopasiMethod::SubType subType=CCopasiMethod::EFMAlgorithm)
CCopasiProblem * getProblem()
std::string getReactionEquation(const std::map< size_t, C_FLOAT64 >::const_iterator &itReaction) const
std::pair< C_FLOAT64, C_FLOAT64 > getSpeciesChanges(const CFluxMode &fluxMode, const CMetab &metab) const
std::string getFluxModeDescription(const CFluxMode &fluxMode) const
virtual bool initialize(const OutputFlag &of, COutputHandler *pOutputHandler, std::ostream *pOstream)
bool isReactionReversed(int index) const
std::map< const CMetab *, C_FLOAT64 > getNetReactionData(const CFluxMode &fluxMode) const
virtual bool setCallBack(CProcessReport *pCallBack)
virtual bool initialize(const OutputFlag &of, COutputHandler *pOutputHandler, std::ostream *pOstream)
const std::vector< CFluxMode > & getFluxModes() const
const CCopasiMethod::SubType & getSubType() const
virtual bool isValidProblem(const CCopasiProblem *pProblem)
CCopasiProblem * mpProblem
const CCopasiVector< CChemEqElement > & getProducts() const
std::string getInternalSpecies(const CFluxMode &fluxMode) const
virtual const std::string & getKey() const
std::string getChemEqString(bool expanded) const
const_iterator begin() const
const std::vector< const CReaction * > & getReorderedReactions() const
const CCopasiVector< CChemEqElement > & getSubstrates() const
static const unsigned int ValidMethods[]
bool isReversible() const
CEFMTask(const CCopasiContainer *pParent=NULL)
std::map< size_t, C_FLOAT64 >::const_iterator const_iterator
virtual bool setCallBack(CProcessReport *pCallBack)
virtual bool add(CCopasiObject *pObject, const bool &adopt=true)
virtual bool setCallBack(CProcessReport *pCallBack)
virtual bool setMethodType(const int &type)
bool isReversible() const
size_t getReactionIndex(const CCopasiVector< CReaction > &reacs, const CReaction *react)
const CChemEq & getChemEq() const
CModel * getModel() const
const_iterator end() const
virtual CCopasiMethod * createMethod(const int &type) const