[sbml-discuss] type of stoichiometry
Herbert Sauro
Herbert_Sauro at kgi.edu
Wed Feb 9 06:53:52 PST 2005
We probably should have introduced an additional data type for arbitrary length integers into sbml so that we could deal with any rational number. I prefer rational numbers to double because one can do precise arithmetic on the stoichiometry matrix but there is a price in terms of storage etc.
Herbert Sauro
-----Original Message-----
From: Joerg R. Weimar [mailto:J.Weimar at tu-bs.de]
Sent: Wed 2/9/2005 12:06 AM
To: SBML Discussion List
Cc:
Subject: Re: [sbml-discuss] type of stoichiometry
Many such reactions with non-integer stoichiometry are lumped reactions
for complex processes not modeled in detail. Examples are:
0.015 ATP + 0.00247 ATPX + 0.00254 CTP + 0.00254 GTP + 0.00247 UTP-> DNA
which also could be expressed as
1500 ATP + 247 ATPX + 254 CTP + 254 GTP + 247 UTP -> 100000 DNA
But this is not equivalent if stochastic simulation is considered.
Here DNA is not one molecule, but a quantity later used in a similar
reaction producing biomass.
For expressing such reactions we introduced the "denominator" field in
L1V2 to enable rational numbers, and simplfied this to a floating number
in L2. Be careful when doing the above conversion, as I have encountered
many cases in elementary mode analysis, where this expansion leads to
stoichiometries that do not fit into an "int", but require a "long"!
This is difficult to notice, since negative stoichiometries ( this is
what you get when an int overflows) are in in many cases permitted (but
not in SBML representation).
As a followup to Jeremys answer:
Most modelers write such reactions using floating point numbers. They
can be converted to rational numbers without any "mathematical" loss,
but rational numbers will be more difficult to read. The opposite
conversion is more difficult, which is why SBML L2 also permits MathML
stoichiometries. Just consider the stoichiometry of
1/3 A -> B
Converting this to float leads to
0.333333333 A -> B
and (possibly) converting back to integer, if done in the simple way my
program currenty does it leads to
333333333 -> 1000000000 B
Which is not really what one wants. Better would be
A -> 3 B
Does anyone have a good short Java or C routine for
long[] rationalize(double a, double epsilon){
???
}
Jörg.
Hiroyuki Kuwahara wrote:
> Hi,
>
> What's the reason behind the type of stoichiometry to be double?
> Is there a case when stoichiometry is not integer?
>
> Thanks,
>
> hiro
>
>
--
Privatdozent Dr. Jörg R. Weimar, Arbeitsgruppe Bioinformatik,
Institut für Informationssysteme, TU-Braunschweig
J.Weimar at tu-bs.de, http://www.jweimar.de
Tel. +49-531-2096237 Mühlenpfordtstr.23 D-38106 Braunschweig
More information about the Sbml-discuss
mailing list