[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
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){


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