Chapter 3.  Writing SBML for MesoRD

Table of Contents

Systems Biology Markup Language
General SBML Structure
Departures from Standard SBML Level 2
Unit
Compartment
Species
Parameter
Reaction
Event
Function
Rule

Systems Biology Markup Language

General SBML Structure

The basic structure of an SBML model definition is given in Example 3.1, “ The basic structure of an SBML file used in MesoRD is ”. The leading ?xml tag should alway be included, as the character encoding for SBML is always UTF-8. The outermost enclosing sbml tag should used verbatim in any models used with MesoRD, since MesoRD only supports SBML level 2 version 4. Not all of the features built into SBML are utilised in MesoRD. Similarly, there are some features required by MesoRD which are not provided in SBML. The departures in SBML files for use with MesoRD with respect to standard level 2 version 4 are briefly listed in the section called “ Departures from Standard SBML Level 2 ”.

Example 3.1.  The basic structure of an SBML file used in MesoRD is

<?xml version="1.0" encoding="UTF-8"?>
  <sbml xmlns="http://www.sbml.org/sbml/level2/version4" level="2" version="4">
    <model id="My_Model">
      <listOfUnitDefinitions>
        ...
      </listOfUnitDefinitions>

      <listOfCompartments>
        ...
      </listOfCompartments>

      <listOfSpecies>
        ...
      </listOfSpecies>

      <listOfParameters>
        ...
	 
      </listOfParameters>

      <listOfReactions>
        ...
      </listOfReactions>
    </model>
  </sbml>
	

Note that the above outline is a subset of the structures available in SBML. MesoRD does not support Functions, Events, SpeciesTypes, CompartmentTypes, Rules, Initial assignments, or Constraints. Note that none of the components in the skeletal SBML file above, or the structures directly above, are actually mandatory: if there are no parameters in a model, it makes no sense to include an empty listOfParameters. This also means that MesoRD is not breaking any SBML standard by not implementing them. The following sections discuss each part in turn, focusing on where the user has to take special care when writing model definitions for MesoRD.

Departures from Standard SBML Level 2

This section briefly presents the key topics where MesoRD and SBML disagree as far as the format of input files is concerned. It would seem that by introducing these changes, we are breaking the major purpose of SBML: interchangeability. This is entirely true. It is also the reason why we have attempted to make this section as small as possible. On the other hand: if we didn't reinterpret SBML a little, we could not have achieved what we wanted.

  • MesoRD does not support the set of reserved, predefined units, such as volume and area. In fact, to be safe, you should define everything you use.

  • Compartments for use in MesoRD must have the default setting of spatialDimensions="3" or spatialDimensions="2". Furthermore, compartments must have constant="true".

  • Species must be defined once for every compartment where they can be found. [6] Each definition must include diffusion constant for diffusion from the compartment of definition to all other compartments in the model.

  • Reactions in MesoRD are single-compartment. Reactions must include reversible="false". Using stoichiometryMath is completely unsupported.

Note that in cases where MesoRD requires additional information in form of SBML annotations, these elements are defined in the name space identified by http://www.icm.uu.se. Note also that the URI reference in arguments such as xmlns:MesoRD="http://www.icm.uu.se", is not directly usable; it does not identify an actual, retrievable document or resource on the Internet. It is simply intended to make the name space unique.

Unit

Figure 3.1.  The SBML definition of UnitDefinition

UnitDefinition
id SId
name string { use="optional" }
unit Unit[1..*]

Figure 3.2.  The SBML definition of Unit

Unit
kind UnitKind
exponent integer { use="optional" default="1" }
scale integer { use="optional" default="0" }
multiplier double { use="optional" default="1" }

SBML gives the user the possibility to define a name for a unit. The defined name can subsequently be used in the expression of quantities in a model. Novel units in SBML are composed of a set of predefined units. These predefined units are listed in [Hucka et al 2008]. A new unitdefinition is constructed as follows: unew = ({multiplier}*10{scale} * u){exponent}, where u is one of predefined units. Units are constructed through multiplication of unitdefinitions as U = u1 * ... * uN, where U is the constructed unit and u1...N are unitdefinitions. For instance, some of the sample model files included in the distribution define a unit um for micrometre. This unit is then used when defining the geometry of the system.

Example 3.2.  Unit Definition.

<listOfUnitDefinitions>
  <unitDefinition id="um">
    <listOfUnits>
      <unit kind="metre" scale="-6"/>
    </listOfUnits>
  </unitDefinition>
</listOfUnitDefinitions>
	  


Warning

Please note that the relation between multiplier and exponent has changed compared to old versions of MesoRD. For example, the unit centimetre squared would in version 0.2.1 and below be defined as <unit kind="metre" exponent="2" scale="-4"/>, whereas version 0.3 and above use <unit kind="metre" exponent="2" scale="-2"/>. The reason we changed is that the SBML standard changed.

It may be interesting to know that MesoRD internally only uses basic SI units, as defined in for instance [Physics Handbook]. Any units are converted to products of these units when parsing the SBML. Thus you could for instance define a unit fulmeter as one Joule per Newton, and specify all your lengths in fulmeter in the unit definitions.

Warning

[Hucka et al 2008] defines default units for several entities in the model. The specification also says that one can redefine these default units throughout the model. You should not use default units in MesoRD! You should instead always define units explicitly, whenever possible.

Compartment

Figure 3.3.  The SBML definition of Compartment. Unsupported SBML features are marked with a star.

Compartment
id SId
name string { use="optional" }
compartmentType* string { use="optional" }
spatialDimensions integer { maxInclusive="3" minInclusive="0" use="optional" default="3"}
size* double { use="optional" }
units SId { use="optional" }
outside* SId { use="optional" }
constant* boolean { use="optional" default="true" }

In SBML, a compartment is a container of finite size for substances. Note that compartments do not necessarily have to correspond to actual structures inside or outside of a cell [7]. It is important to remember that we cannot have a substance without having a unique compartment to contain it. This is the source of some trouble when it comes to species that can cross compartment boundaries. MesoRD's approach to resolve the problem is discussed in the section called “ Species ”. When using a concentration for defining the initial concentration of species, units has to be defined. See the section called “ Species ” for more information

Warning

Please note that the format for defining compartments has changed between version 0.2 and 0.3 of MesoRD.

The most important modification of compartments for use in MesoRD compared to their definition in SBML, is that every compartment needs a geometry definition. Exactly how these geometries are defined is discussed in Chapter 4, Constructive Solid Geometry . Suffice it here to say that the model excerpt below will result in ellipsoid spanning two micrometres in the x-direction, and one micrometre in the y- and z-direction respectively.

Example 3.3.  Compartment Definition.

<listOfCompartments>
  <compartment id="CompartmentOne">
    <annotation>
      <MesoRD:csg xmlns:mesoRD="http://www.icm.uu.se">
        <MesoRD:scale MesoRD:x="2"
                      MesoRD:y="1"
                      MesoRD:z="1">
          <MesoRD:sphere MesoRD:radius="1"
                         MesoRD:units="um"/>
        </MesoRD:scale>
      </MesoRD:csg>
    </annotation>
  </compartment>
</listOfCompartments>
	

For three-dimensional models the computed volume of a subvolume is recorded as global parameter with the id volume_subvolume. For two-dimensional models the computed area of a subarea is recorded as area_subarea. The area or volumes of compartments are recorded as global parameters with the id of the compartment. If one wishes to include these parameters in kinetic rate expressions the correct procedure is to define parameters with the id and name that are the same as the compartment id. The value of a particular parameter is irrelevant. When simulating, MesoRD will replace the value, in litres for volumes and micrometre squared for areas, with the volume or area as computed. The side length of a subvolume and a subarea are stored as size_subvolume and size_subarea, respectively.

The most common problem during early development of MesoRD turned out to be that the geometry of the compartment was empty. It is not very difficult to inadvertently accomplish such a feat. If one for instance were to model a box, the shortest side of which is 10 nanometre, using cubic subvolumes of side length 100 nanometre, the resulting geometry may not contain any subvolumes, even though the specified volume is in fact three dimensional.

Departure from standard SBML level 2 version 4

Notable differences between SBML and MesoRD compartments are listed below. At present, one should not rely on MesoRD reporting any violations against these requirements. If the program silently breaks, it may be worthwhile verifying that the below conditions are satisfied.

  • Compartments for use in MesoRD must have spatialDimensions set to either 3 or 2. MesoRD does currently not support 1-dimensional objects. MesoRD strictly requires that all compartments in the model have the same spatial dimension.

  • Although it is not fatally wrong to specify the size of an compartment, it is unnecessary. Because MesoRD will discretise the compartment from fixed sized sub volumes, it is difficult to say beforehand exactly how large a compartment will be. Note that it is the internally computed size that will be used if the amount of any given species is specified in terms of concentrations, as opposed to absolute numbers of molecules.

  • Although it may seem useless to define units, since size it not used by MesoRD; units is, however, used when defining initial concentrations of species.

  • Currently, MesoRD only supports the default constant compartments. This means that one should not set constant="false". The size of the individual subvolumes which compose a compartment is fixed throughout the entire simulation. Although it would be possible to change the size of compartment during a simulation by dynamically adding or removing subvolumes, this is currently not implemented.

  • There is no need for the outside attribute to be specified, as far MesoRD is concerned. The topology of the different compartments in the model is completely covered by the geometry description.

Species

Figure 3.4.  The SBML definition of Species. Unsupported SBML features are marked with a star

Species
id SId
name string { use="optional" }
speciesType* SId { use="optional" }
compartment SId
initialAmount double { use="optional" }
initialConcentration double { use="optional" }
substanceUnits SId { use="optional" }
hasOnlySubstanceUnits boolean { use="optional" default="false" }
boundaryCondition* boolean { use="optional" default="false" }
charge* integer { use="optional" }
constant* boolean { use="optional" default="true" }

SBML defines species as substances or entities that take part in one or more reactions. Clearly, ATP and glucose are species. However, large complexes such as ribosomes fit the SBML definition of species as well. In SBML, species are defined in exactly one compartment. We shall call this compartment the "home compartment" of a species for the remainder of this section. The existence of a unique home compartment leads to problems when we have species that can cross compartment boundaries. The way the problem is solved in MesoRD is that a species that can occur in several compartment is defined several times, once for every compartment in which it can occur. To prevent violation of the uniqueness criteria for SBML ID:s, every definition must have a unique ID. In order to keep track of which species are actually the same, such species must share the same name. One may think that this is extremely redundant. However, the next paragraph explains why it is in fact only very redundant. [8]

Figure 3.5.  The XML definition of SpeciesDiffusion.

SpeciesDiffusion
diffusion Diffusion[1..*]

Figure 3.6.  The XML definition of Diffusion.

Diffusion
compartmentId SId
rate double
units SId

Another requirement that MesoRD introduces that is absent in SBML is the need for diffusion rate constant. This is accomplished by the species_diffusion annotation. Every species definition must define a rate constant for diffusion from the home compartment into every other compartment, including the diffusion rate within the home compartment itself. Thus we see that this partially offsets the redundancy introduced by having to define the same species several times: it need not be the case the diffusion constant for diffusion from compartment one to compartment two is equal to the diffusion constant from compartment two to compartment one, which could be useful to model active transport. The diffusion rate constant must be defined with a length unit squared per time, and we recommend using centimetres squared per second.

To set the initial number to a fixed value regardless of the compartment size use the initialAmount, and set the hasOnlySubstanceUnits to true. To set the initial concentration of a molecule in a compartment set the hasOnlySubstanceUnits to false and substanceUnits to either mole or item. Finally set the units in the corresponding compartment to a unit that can be reduced to m3 in a three-dimensional model and m2 in a two-dimensional model.

Warning

Please note that the format for defining species has changed between version 0.2 and 0.3 of MesoRD

  • spatialSizeUnit is not present in SBML level 2 version 4. This is now represented by the unit on the Compartment, see the section called “ Compartment ”. In order to set an initial concentration in molar set substanceUnits to mole and set the units on the corresponding compartment to litre. See example Example 3.4, “ Species Definition. ”

  • Each annotation block now always starts with <MesoRD:species_diffusion xmlns:mesoRD="http://www.icm.uu.se">, and ends with </MesoRD:species_diffusion>

The example below defines an hypothetical species A in a two-compartment system. Note that the initial amount in CompartmentOne is given in number of molecules since hasOnlySubstanceUnits="true", but that the initial amount in CompartmentTwo is given as a concentration in units of mole per litre. Furthermore, note that the diffusion constants are different for diffusion within two compartments.

Example 3.4.  Species Definition.


<listOfCompartments>
  <compartment id="CompartmentOne"
               units="litre">
    <annotation>
      <MesoRD:csg xmlns:MesoRD="http://www.icm.uu.se">
        <MesoRD:translation MesoRD:x="0"
                            MesoRD:y="1"
                            MesoRD:z="0"
                            MesoRD:units="um">
          <MesoRD:box MesoRD:x="0.4"
                      MesoRD:y="0.4"
                      MesoRD:z="0.4"
                      MesoRD:units="um"/>
        </MesoRD:translation>
      </MesoRD:csg>
    </annotation>
  </compartment>

  <compartment id="CompartmentTwo" units="litre">
    <annotation>
      <MesoRD:csg xmlns:MesoRD="http://www.icm.uu.se">
        <MesoRD:difference>
          <MesoRD:box MesoRD:x="0.4"
                      MesoRD:y="4.0"
                      MesoRD:z="0.4"
                      MesoRD:units="um">
            <MesoRD:pbc MesoRD:x="false"
                        MesoRD:y="true"
                        MesoRD:z="false"/>
          </MesoRD:box>
          <MesoRD:compartment MesoRD:id="CompartmentOne"/>
        </MesoRD:difference>
      </MesoRD:csg>
    </annotation>
  </compartment>
</listOfCompartments>

<listOfSpecies>
  <species id="A1"
           compartment="CompartmentOne"
           hasOnlySubstanceUnits="true"
           initialAmount="10000"
           name="A"
           substanceUnits="item">
    <annotation>
      <MesoRD:species_diffusion xmlns:MesoRD="http://www.icm.uu.se">
        <MesoRD:diffusion MesoRD:compartment="CompartmentOne"
                          MesoRD:rate="6e-8"
                          MesoRD:units="cm2ps"/>
        <MesoRD:diffusion MesoRD:compartment="CompartmentTwo"
                          MesoRD:rate="6e-8"
                          MesoRD:units="cm2ps"/>
      </MesoRD:speces_diffusion>
    </annotation>
  </species>

  <species id="A2"
           compartment="CompartmentTwo"
           hasOnlySubstanceUnits="false"
           initialConcentration="1e-5"
           name="A"
           substanceUnits="mole">
    <annotation>
      <MesoRD:species_diffusion xmlns:MesoRD="http://www.icm.uu.se">
        <MesoRD:diffusion MesoRD:compartment="CompartmentOne"
                          MesoRD:rate="6e-8"
                          MesoRD:units="cm2ps"/>
        <MesoRD:diffusion MesoRD:compartment="CompartmentTwo"
                          MesoRD:rate="3e-8"
                          MesoRD:units="cm2ps"/>
      </MesoRD:species_diffusion>
    </annotation>
  </species>
<listOfSpecies>
      

Other things to keep in mind when defining species are listed below.

  • No matter how the initial amount of a species is declared, MesoRD internally uses numbers of molecules. If the initial amount is given as a concentration, the volume of the home compartment, not the entire system, is used in determining the amount of the species.

  • Though it is not incorrect to only specify the species in the compartments in which they physically can exist it is recommended (at least for now) to specify all species in all compartments. Why? The only reason is that the output from the program depends on the names of the species. If a species is not defined in a compartment it will take the name of a species in another compartment which might be confusing to interpret if you are looking at the output.

Departure from standard SBML level 2 version 4

  • There is no support for boundaryCondition, and its default value must not be changed by setting boundaryCondition="true". This has to do with the fact that MesoRD does not implement SBML rates.

  • MesoRD does not honour the constant flag.

  • The species charge is completely ignored.

  • MesoRD does not support initialAssignments, thus the initialAmounts and concentrations set in Species cannot be changed by other parts of the SBML file.

Parameter

Figure 3.7.  The SBML definition of ParameterUnsupported SBML features are marked with a star

Parameter
id SId
name string { use="optional" }
value double { use="optional" }
units SId
constant* boolean { use="optional" default="true" }

A parameter in SBML associates a quantity with a symbolic name. The symbols may be used in mathematical formula which in turn define kinetic rate laws that control the reactions. Note also that reactions can have local parameters, as well as access to the global ones.

  • No matter what, MesoRD will always (re)create some additional parameters in the model. One of these is volume_subvolume, which gives the volume and unit of each individual sub volume. Another is one_molecule_molar, which gives the concentration of one molecule in a subvolume. Furthermore, for every compartment, MesoRD records a parameter with ID COMPARTMENTID, where COMPARTMENTID is the ID of the compartment. These latter parameters give the volume and unit of the respective compartments. If one wants to use these parameters in the model, one should define them in the parameter section of the definition first. Before simulation begins, MesoRD will replace the values and units with values as calculated from the geometry.

Warning

Since MesoRD version 0.3, volume_subvolme has only lower case (as compared to volume_subVolme earlier releases of MesoRD).

Departure from standard SBML level 2 version 4

  • All parameters are effectively constant, since the lack of SBML rules means that there is no way to update a parameter value. The units tag needs to be defined as defined in the section called “ Unit ”.

  • units is not optional in MesoRD.

Reaction

Figure 3.8.  The SBML definition of Reaction. Unsupported SBML features are indicated with a star.

Reaction
id SId
name string { use="optional" }
listOfReactants SpeciesReference[0..*]
listOfProducts SpeciesReference[0..*]
listOfModifiers ModifierSpeciesReference[0..*]
kineticLaw KineticLaw { minOccurs="0" }
reversible* boolean { use="optional" default="true" }
fast* boolean { use="optional" }

Figure 3.9.  The SBML definition of SpeciesReference. Unsupported SBML features are indicated with a star.

SpeciesReference
species SId
stoichiometry double { use="optional" default="1" }
stoichiometryMath* StoichiometryMath { use="optional" }

Figure 3.10.  The SBML definition of ModifierSpeciesReference

ModifierSpeciesReference
species SId

Figure 3.11.  The SBML definition of KineticLaw

KineticLaw
math Math { namespace="http://www.w3.org/1998/Math/MathML" }
listOfParameters Parameter[0..*]

An SBML reaction is a statement describing some transformation, transport or binding process that can change the amount of one or more species. Typically, an SBML reaction represents a chemical reaction which in turn describes how certain reactants are transformed into products. Reactions have associated kinetic rate expressions describing how often they take place.

Note that [Hucka et al 2008] states that reaction rate expressions should be written such that their units evaluate to "per second". This is a little awkward for the type of reactions MesoRD deals with, because doing so would require one to include the reaction volume in the mathematical expression. In MesoRD the reaction volume is identical to the volume of a subvolume, and this quantity in turn is not necessarily part of the model. Therefore, MesoRD allows reaction rates to be specified in molar per second. If a rate expression evaluates in concentration per time MesoRD attempts to transform the rate to in molar per second automatically. If the reaction rate has the per second unit, MesoRD will assume you know what you are doing and apply no transformations. Thus MesoRD has relaxed the SBML specification a little, not restricted it. However, to make thing simple we strongly recommend that your rate expressions evaluates in concentration per time, or you will have problems every time you change the subvolume size.

Departure from standard SBML level 2 version 4

  • Note that only a subset of MathML is supported by SBML for use in kinetic rate laws. To make matters even worse, only a subset of the SBML-supported features of MathML are supported in MesoRD. The SBML-supported MathML that is unsupported in MesoRD is limited to some of the less common trigonometric functions. The reason is that internally, MesoRD for efficiency reasons only works with real numbers, as opposed to complex numbers. On the other hand, the reactions one could define using the unsupported features, would probably be non-physical.

  • Internally MesoRD ignores the modifier species since they only defined which species that are allowed to be included into the kineticLaw.

  • In contrast to the SBML standard, all species IDs occurring in the kinetic rate expressions are treated as concentrations counted in Molar. The volume used in calculating concentrations from absolute numbers of molecules in a subvolume is volume_subvolume.

  • MesoRD does currently not support reversible reactions. Since the default is that any given reaction is reversible, reactions must include reversible="false". If one wants reversible reactions, one should define an additional reaction going backwards relative to the former.

  • The fast argument is completely ignored by MesoRD. fast reactions are not meaningful in the stochastic treatment as performed by the program.

  • For species, using the stoichiometryMath is unsupported. Rather, one must define the stoichiometry as a constant, floating point value. It is actually recommended in [Hucka et al 2008] to do it this way (event though the specification also says that software, for inter-operability reasons, should be able to handle all possible cases).

  • Because user-defined functions are not supported by MesoRD, we cannot have functions in the kinetic rate expressions.

  • Reactions in MesoRD occur in a single compartment only. This is different from SBML, where reactions are multi-compartment by design. There is however no need to specify the compartment in which a reaction occurs. Since the species that take part in a reaction are defined in a unique compartment, MesoRD can figure out the compartment to which a reaction belongs by checking the participating species. This can obviously not be done if the participating species were defined in different compartments. Therefore: all species that take part in a given reaction must be defined in the same compartment and the species must be referred to by the species id, not their names.

The example below show the very hypothetical reaction A+B->C , with a reaction-rate constant k.

Example 3.5.  Reaction Definition.

<reaction id="Reaction1" reversible="false">
  <listOfReactants>
    <speciesReference species="A"/>
    <speciesReference species="B"/>
  </listOfReactants>
  <listOfProducts>
    <speciesReference species="C"/>
  </listOfProducts>
  <kineticLaw>
    <math xmlns="http://www.w3.org/1998/Math/MathML">
      <apply>
        <times/>
          <ci>k</ci>
          <ci>A</ci>
          <ci>B</ci>
      </apply>
    </math>
  </kineticLaw>
</reaction>
	  


Microscopic scaling of reaction rates

Except from taking notice of the units used in the definition of reaction rates, one should also be aware of the need for subvolume size dependent scaling of the reaction rates in the limit of small subvolumes when running stochastic simulations [Fange et al. 2010]. This is due to the breakdown of the assumption that the commonly used association rate constant include both the time to react at the target and the time to diffuse to the binding target. When the subvolumes are small, diffusion is handled explicitly by MesoRD and should therefore be removed in appropriate amounts from the reaction rate constants. Details on how MesoRD does this is given in the section called “ Scale dependent association rate constants ”.

As of the release 1.0, MesoRD can automatically scale the reaction rate constants for bimolecular association and dissociation reactions. Automatic scaling is turned on by adding a microscopicParameters node to an annotation block of the bi-molecular association reaction. MesoRD will internally find the corresponding dissociation reaction, which should also be scaled appropriately.

Warning

The association reaction needs to be specified before the dissociation reaction.

Warning

The microscopic scalings are not not well defined in determinstic, PDE, simulations, i.e. DO NOT use microscopic scaling in deterministic simulations.

To make corrections MesoRD requires either associationRateConst or degreeOfDiffusionControl and reactionRadius to be defined. The associationRateConst is the reaction rate when the molecules are at the reaction radii of each other [Collins & Kimball 1949][Berg 1978]. The associationRateConstant must have a unit that can be reduced to cubic metres per second (such as per molar per second, i.e. litre/(mole second)) in 3D, and square metres per second in 2D. reactionRadius is the sum of the reaction radii of the two molecules. The degreeOfDiffusionControl is defined as and in 3D and 2D respectively. Here is the association rate constant when on the reaction radii, is the sum of the reaction radii, and is the sum of the diffusion constants of the two reactants. In addition MesoRD needs the equilibrium constant for the bi-molecular reaction to make the correction. This is taken from the ratio of the rate constants for the association and dissociation respectively. This means that MesoRD does not break the SBML standard for other softwares that do not implement scale dependent rates constants.

Figure 3.12.  The XML definition of MicroscopicParameters.

MicroscopicParameters
associationRateConst AssociationRateConst { use="optional" }
reactionRadius Radius[1]
degreeOfDiffusionControl DegreeOfDiffusionControl { use="optional" }

Figure 3.13.  The XML definition of AssociationRateConst.

AssociationRateConst
rate double
units SId

Figure 3.14.  The XML definition of ReactionRadius.

ReactionRadius
size double
units SId

Figure 3.15.  The XML definition of DegreeOfDiffusionControl.

DegreeOfDiffusionControl
size double

MesoRD will read the SBML file, and if it finds an MicroscopicParamter field use the microscopic parameters to calculate new association- and dissociation rate constants and then update them in the global parameter table. This means that the value for the association and dissociation rate presented in final parameter list in the MesoRD is after corrective scaling. The calculations of the new association and dissociation rates are executed in accordance with the theory in [Fange et al. 2010] and is described in the section called “ Scale dependent association rate constants ”

The example below shows a hypothetical association and dissociation of A and B using scale dependent reaction rates.

Example 3.6.  Reaction Definitions with scale dependent reaction rates.

    
<listOfReactions>
  <reaction id="Reaction1" reversible="false">
    <listOfReactants>
      <speciesReference species="A"/>
      <speciesReference species="B"/>        
    </listOfReactants>
    <listOfProducts>
      <speciesReference species="C"/>
    </listOfProducts>
    <kineticLaw>
      <math xmlns="http://www.w3.org/1998/Math/MathML">
        <apply>
          <times/>
            <ci>ka</ci>
            <ci>A</ci>
            <ci>B</ci>
        </apply>
      </math>
    </kineticLaw>

    <annotation>
      <MesoRD:microscopicParameters xmlns:MesoRD="http://www.icm.uu.se">
        <MesoRD:associationRateConstant MesoRD:rate="7.5672e9" 
                                        MesoRD:units="pMps"/>
        <MesoRD:reactionRadius MesoRD:size="10" 
                               MesoRD:units="nm"/>
      </MesoRD:microscopicParameters>
    </annotation>
  </reaction>

  <reaction id="Reaction2" reversible="false">
    <listOfReactants>
      <speciesReference species="C"/>
    </listOfReactants>
    <listOfProducts>
      <speciesReference species="A"/>
      <speciesReference species="B"/>
    </listOfProducts>
    <kineticLaw>
      <math xmlns="http://www.w3.org/1998/Math/MathML">
        <apply>
          <times/>
            <ci>kd</ci>
            <ci>C</ci>
        </apply>
      </math>
    </kineticLaw>
  </reaction>
<listOfReactions>
	    


Event

SBML provides events for modelling instantaneous, discontinuous change in a set of variables of any type. Events are triggered by certain conditions. Events are also not supported by MesoRD.

Function

SBML allows the definition of named mathematical functions that may be used throughout the rest of a model. This is a feature MesoRD does not support.

Rule

Rules in SBML are mathematical expressions used in combination with any equations derived from the reactions. Rules can be used to establish constraints between variables, define variable values in terms of other variables or define the rate of change of a variable. Rules are not supported at all by MesoRD.



[6] The recently added SBML feature SpeciesType is not yet implemented in MesoRD

[7] Rather, defining a part of a real cell compartment as a MesoRD compartment has proven to be very useful to create specific initial distributions of molecules or for monitoring the time evolution of a specific part of a cell.

[8] The latest SBML standard implements a feature called SpeciesType which may actually solve this problem, MesoRD does, however, not yet support this feature