38 const std::string & metabName,
39 const std::string & compName,
size_t l)
41 out <<
SPC(l + 0) <<
"<mfrac>" << std::endl;
42 out <<
SPC(l + 1) <<
"<mrow>" << std::endl;
43 out <<
SPC(l + 2) <<
"<mo>d</mo>" << std::endl;
44 out <<
SPC(l + 2) <<
"<mfenced>" << std::endl;
45 out <<
SPC(l + 3) <<
"<mrow>" << std::endl;
48 out <<
SPC(l + 4) <<
"<mo>" <<
"·" <<
"</mo>" << std::endl;
49 out <<
SPC(l + 4) <<
"<msub><mi>V</mi><mi>" <<
CMathMl::fixName(compName) <<
"</mi></msub>" << std::endl;
51 out <<
SPC(l + 3) <<
"</mrow>" << std::endl;
53 out <<
SPC(l + 2) <<
"</mfenced>" << std::endl;
54 out <<
SPC(l + 1) <<
"</mrow>" << std::endl;
55 out <<
SPC(l + 1) <<
"<mrow>" << std::endl;
56 out <<
SPC(l + 2) <<
"<mo>d</mo><mi>t</mi>" << std::endl;
57 out <<
SPC(l + 1) <<
"</mrow>" << std::endl;
58 out <<
SPC(l + 0) <<
"</mfrac>" << std::endl;
63 bool numbers,
bool expand,
bool expandFull,
68 out <<
SPC(l + 0) <<
"Error: invalid metabolite" << std::endl;
74 out <<
SPC(l + 0) <<
"Error: invalid reaction" << std::endl;
82 size_t i, imax = balances.
size();
84 for (i = 0; i < imax; ++i)
86 if (balances[i]->getMetaboliteKey() == pMetab->
getKey())
88 balance = balances[i]->getMultiplicity();
93 if (0 == balance)
return;
95 out <<
SPC(l + 0) <<
"<mrow>" << std::endl;
100 out <<
SPC(l + 1) <<
"<mo>" <<
"+" <<
"</mo>" << std::endl;
102 else if (balance == -1.0)
104 out <<
SPC(l + 1) <<
"<mo>" <<
"-" <<
"</mo>" << std::endl;
106 else if (balance < 0.0)
108 out <<
SPC(l + 1) <<
"<mo>" <<
"-" <<
"</mo><mn>" << -balance <<
"</mn>"
109 <<
"<mo>" <<
"·" <<
"</mo>" << std::endl;
113 out <<
SPC(l + 1) <<
"<mo>" <<
"+" <<
"</mo><mn>" << balance <<
"</mn>"
114 <<
"<mo>" <<
"·" <<
"</mo>" << std::endl;
122 <<
"</mi></msub>" << std::endl;
123 out <<
SPC(l + 1) <<
"<mo>" <<
"·" <<
"</mo>" << std::endl;
129 std::vector<std::vector<std::string> > params;
132 if (expand) out <<
SPC(l + 1) <<
"<mfenced>" << std::endl;
136 if (expand) out <<
SPC(l + 1) <<
"</mfenced>" << std::endl;
139 out <<
SPC(l + 0) <<
"</mrow>" << std::endl;
143 std::vector<std::vector<std::string> > & params,
151 size_t i, imax = functionParams.
size();
154 for (i = 0; i < imax; ++i)
161 switch (functionParams[i]->getUsage())
186 params[i].resize(jmax);
188 for (j = 0; j < jmax; ++j)
205 std::ostringstream number;
207 params[i][0] =
"<mn>" + number.str() +
"</mn>";
233 params[i][0] =
"<mi>time</mi>";
243 const std::string & valueName,
size_t l)
245 out <<
SPC(l + 0) <<
"<mfrac>" << std::endl;
246 out <<
SPC(l + 1) <<
"<mrow>" << std::endl;
247 out <<
SPC(l + 2) <<
"<mo>d</mo>" << std::endl;
249 out <<
SPC(l + 1) <<
"</mrow>" << std::endl;
250 out <<
SPC(l + 1) <<
"<mrow>" << std::endl;
251 out <<
SPC(l + 2) <<
"<mo>d</mo><mi>t</mi>" << std::endl;
252 out <<
SPC(l + 1) <<
"</mrow>" << std::endl;
253 out <<
SPC(l + 0) <<
"</mfrac>" << std::endl;
258 bool expandFull,
size_t l)
262 out <<
SPC(l + 0) <<
"Error: invalid model entity" << std::endl;
268 out <<
SPC(l + 0) <<
"Error: no expression" << std::endl;
272 out <<
SPC(l + 0) <<
"<mrow>" << std::endl;
276 out <<
SPC(l + 0) <<
"</mrow>" << std::endl;
281 bool hasContents =
false;
285 mml <<
SPC(l) <<
"<mtable>" << std::endl;
290 for (i = 0; i < imax; i++)
294 mml <<
SPC(l + 1) <<
"<mtr>" << std::endl;
297 mml <<
SPC(l + 2) <<
"<mtd>" << std::endl;
299 mml <<
SPC(l + 3) <<
"<mfrac>" << std::endl;
300 mml <<
SPC(l + 4) <<
"<mrow>" << std::endl;
301 mml <<
SPC(l + 5) <<
"<mo>d</mo>" << std::endl;
303 mml <<
SPC(l + 5) <<
"<msub><mi>V</mi><mi>"
305 <<
"</mi></msub>" << std::endl;
307 mml <<
SPC(l + 4) <<
"</mrow>" << std::endl;
308 mml <<
SPC(l + 3) <<
"<mrow>" << std::endl;
309 mml <<
SPC(l + 2) <<
"<mo>d</mo><mi>t</mi>" << std::endl;
310 mml <<
SPC(l + 1) <<
"</mrow>" << std::endl;
311 mml <<
SPC(l + 0) <<
"</mfrac>" << std::endl;
313 mml <<
SPC(l + 2) <<
"</mtd>" << std::endl;
316 mml <<
SPC(l + 2) <<
"<mtd>" << std::endl;
317 mml <<
SPC(l + 3) <<
"<mo>=</mo>" << std::endl;
318 mml <<
SPC(l + 2) <<
"</mtd>" << std::endl;
321 mml <<
SPC(l + 2) <<
"<mtd columnalign='left'>" << std::endl;
325 mml <<
SPC(l + 2) <<
"</mtd>" << std::endl;
327 mml <<
SPC(l + 1) <<
"</mtr>" << std::endl;
331 mml <<
SPC(l + 1) <<
"<mtr>" << std::endl;
334 mml <<
SPC(l + 2) <<
"<mtd>" << std::endl;
335 mml <<
SPC(l + 3) <<
"<msub><mi>V</mi><mi>"
337 <<
"</mi></msub>" << std::endl;
338 mml <<
SPC(l + 2) <<
"</mtd>" << std::endl;
341 mml <<
SPC(l + 2) <<
"<mtd>" << std::endl;
342 mml <<
SPC(l + 3) <<
"<mo>=</mo>" << std::endl;
343 mml <<
SPC(l + 2) <<
"</mtd>" << std::endl;
346 mml <<
SPC(l + 2) <<
"<mtd columnalign='left'>" << std::endl;
349 mml <<
SPC(l + 2) <<
"</mtd>" << std::endl;
351 mml <<
SPC(l + 1) <<
"</mtr>" << std::endl;
358 for (i = 0; i < imax; i++)
364 std::set<std::string>::const_iterator it, itEnd = reacKeys.end();
366 for (it = reacKeys.begin(); it != itEnd; ++it)
370 mml <<
SPC(l + 1) <<
"<mtr>" << std::endl;
373 mml <<
SPC(l + 2) <<
"<mtd>" << std::endl;
375 if (it == reacKeys.begin())
379 mml <<
SPC(l + 2) <<
"</mtd>" << std::endl;
382 mml <<
SPC(l + 2) <<
"<mtd>" << std::endl;
384 if (it == reacKeys.begin())
385 mml <<
SPC(l + 3) <<
"<mo>=</mo>" << std::endl;
387 mml <<
SPC(l + 2) <<
"</mtd>" << std::endl;
390 mml <<
SPC(l + 2) <<
"<mtd columnalign='left'>" << std::endl;
393 localParameterNumbers, expand, expandFull, l + 3);
394 mml <<
SPC(l + 2) <<
"</mtd>" << std::endl;
396 mml <<
SPC(l + 1) <<
"</mtr>" << std::endl;
401 mml <<
SPC(l + 1) <<
"<mtr>" << std::endl;
404 mml <<
SPC(l + 2) <<
"<mtd>" << std::endl;
407 mml <<
SPC(l + 2) <<
"</mtd>" << std::endl;
410 mml <<
SPC(l + 2) <<
"<mtd>" << std::endl;
411 mml <<
SPC(l + 3) <<
"<mo>=</mo>" << std::endl;
412 mml <<
SPC(l + 2) <<
"</mtd>" << std::endl;
415 mml <<
SPC(l + 2) <<
"<mtd columnalign='left'>" << std::endl;
419 <<
"</mi></msub>" << std::endl;
420 mml <<
SPC(l + 3) <<
"<mo>" <<
"·" <<
"</mo>" << std::endl;
424 mml <<
SPC(l + 2) <<
"</mtd>" << std::endl;
426 mml <<
SPC(l + 1) <<
"</mtr>" << std::endl;
430 mml <<
SPC(l + 1) <<
"<mtr>" << std::endl;
433 mml <<
SPC(l + 2) <<
"<mtd>" << std::endl;
435 mml <<
SPC(l + 2) <<
"</mtd>" << std::endl;
438 mml <<
SPC(l + 2) <<
"<mtd>" << std::endl;
439 mml <<
SPC(l + 3) <<
"<mo>=</mo>" << std::endl;
440 mml <<
SPC(l + 2) <<
"</mtd>" << std::endl;
443 mml <<
SPC(l + 2) <<
"<mtd columnalign='left'>" << std::endl;
446 mml <<
SPC(l + 2) <<
"</mtd>" << std::endl;
448 mml <<
SPC(l + 1) <<
"</mtr>" << std::endl;
455 for (i = 0; i < imax; ++i)
459 mml <<
SPC(l + 1) <<
"<mtr>" << std::endl;
462 mml <<
SPC(l + 2) <<
"<mtd columnalign='right'>" << std::endl;
464 mml <<
SPC(l + 2) <<
"</mtd>" << std::endl;
467 mml <<
SPC(l + 2) <<
"<mtd>" << std::endl;
468 mml <<
SPC(l + 3) <<
"<mo>=</mo>" << std::endl;
469 mml <<
SPC(l + 2) <<
"</mtd>" << std::endl;
472 mml <<
SPC(l + 2) <<
"<mtd columnalign='left'>" << std::endl;
475 mml <<
SPC(l + 2) <<
"</mtd>" << std::endl;
477 mml <<
SPC(l + 1) <<
"</mtr>" << std::endl;
483 for (i = 0; i < imax; ++i)
487 mml <<
SPC(l + 1) <<
"<mtr>" << std::endl;
490 mml <<
SPC(l + 2) <<
"<mtd columnalign='right'>" << std::endl;
493 mml <<
SPC(l + 2) <<
"</mtd>" << std::endl;
496 mml <<
SPC(l + 2) <<
"<mtd>" << std::endl;
497 mml <<
SPC(l + 3) <<
"<mo>=</mo>" << std::endl;
498 mml <<
SPC(l + 2) <<
"</mtd>" << std::endl;
501 mml <<
SPC(l + 2) <<
"<mtd columnalign='left'>" << std::endl;
504 mml <<
SPC(l + 2) <<
"</mtd>" << std::endl;
506 mml <<
SPC(l + 1) <<
"</mtr>" << std::endl;
509 mml <<
SPC(l) <<
"</mtable>" << std::endl;
513 const std::string & key)
515 std::set<std::string> Keys;
517 size_t j, jmax = Reactions.
size();
519 for (j = 0; j < jmax; j++)
522 size_t i, imax = Balances.
size();
524 for (i = 0; i < imax; i++)
525 if (key == Balances[i]->getMetaboliteKey() && Balances[i]->getMultiplicity() != 0)
527 Keys.insert(Reactions[j]->getKey());
const CExpression * getExpressionPtr() const
Header file of class CExpression.
static void writeRHS_ModelEntity(std::ostream &out, const CModelEntity *pEntity, bool expandFull, size_t l)
virtual std::string getObjectDisplayName(bool regular=true, bool richtext=false) const
const CCopasiVector< CMetab > & getMetabolites() const
const std::string & getObjectName() const
const CCopasiVectorN< CModelValue > & getModelValues() const
virtual size_t size() const
CCopasiObject * get(const std::string &key)
static std::string fixName(const std::string &name)
bool isLocalParameter(const size_t &index) const
const CCopasiVector< CChemEqElement > & getBalances() const
static void writeLHS(std::ostream &out, const std::string &metabName, const std::string &compName, size_t l)
virtual const std::string & getKey() const
const CFunction * getFunction() const
static void createParameterMapping(const CReaction *pReac, std::vector< std::vector< std::string > > ¶ms, bool numbers)
const CFunctionParameters & getFunctionParameters() const
virtual const std::string & getKey() const
virtual void writeMathML(std::ostream &out, size_t l=0) const
static std::set< std::string > listReactionsForMetab(const CModel *model, const std::string &key)
static void writeRHS(std::ostream &out, const CMetab *pMetab, const CReaction *pReac, bool numbers, bool expand, bool expandFull, size_t l)
CCopasiVectorNS< CCompartment > & getCompartments()
static CKeyFactory * getKeyFactory()
size_t getCompartmentNumber() const
CCopasiVectorNS< CReaction > & getReactions()
void writeMathML(std::ostream &out, bool fullExpand, size_t l) const
const std::vector< std::vector< std::string > > & getParameterMappings() const
static void writeDifferentialEquations(std::ostream &mml, CModel *model, bool localParameterNumbers, bool expand, bool expandFull)
const CChemEq & getChemEq() const
const C_FLOAT64 & getParameterValue(const std::string ¶meterName) const
static void writeLHS_ModelValue(std::ostream &out, const std::string &valueName, size_t l)