Core SBML - A Core Language for Systems Biology

Joachim Niehren, Inria Center of University of Lille & BioComputing Team of University of Lille, France

Last update on 21 Feb 2024 @Copyright 2023

Introduction

The system biology markup language (SBML) is the most frequently used language to describe reaction networks in systems biology. Each SBML models describes a system of differential equations for the deterministic behaviour of the reaction network. But note that SBML is not limited to dynamical system in systems biology.

Why a Core Language?

SBML lacks a formal semantics making it impossible to state the correctness when converting different languages for reaction networks to SBML. This makes it difficult to use SBML as an exchange format for systems biology, and also to compare their expressiveness formally. This is stated in the SBML specification as follows:

Criticism from the SBML Web page

The precise meaning of the SBML specification, however, is not always clear, reflecting the lack of a formal semantics. As a consequence, in order to understand the advanced topics of SBML, even experts often need to inspect the differential equations on SBML example models as produced by Copasi or SBML2Latex. Yet, this does not make it easy to compare the expressiveness of different languages for describing reaction networks with the deterministic semantics. For instance, what is the difference in expressiveness between BioCham's reaction networks and SBML models?

Coverage

Core SBML is a novel language with a formal semantics with the same expressiveness as SBML level 2 (from version 0.95 upwards when delays were added to differential equations and events). Not only ordinary and algebraic differential equations are covered but also delay differential equations, based on a delay operator in arithmetic expressions (as in SBML). Furthermore, events may have delays.

Any SBML level 2 model can be compiled to Core SBML network and vice versa. In practice, this can be done by using the XSLT compilers in the software package made available below. More generally, a core of a language must not be a sublanguage, but may be another language that can be compiled to a sublanguage of the full expressiveness. The ideas of the compilers are described in the following scientific paper.

The formal semantics of Core SBML is defined on top of its abstract syntax. This makes Core SBML a better exchange language for systems biology. Other formats of reaction networks (such as BioCham's can be mapped to Core SMBL in a provably correct manner, and from there to SMBL. In turn, the abstract syntax of Core SBML induces a concrete XML syntax that is different from that of SBML. Still, it can be compiled to SBML straightforwardly.

Compilers

The Core-SBML package provides the following compilers on XML documents that we implemented with Saxon XSLT:

Application to Curated BioModels

We applied our compiler to all 542 SBML models of the curated part of the BioModels database. Of those, only 18 networks use delays, so all others can be compiled further to BioCham. Our compilers produce for all curated BioModels:
network.csbml
a Core SBML network (compatible with the schema),
core-graph.pdf
a PDF document with the graph of the network and its differential equations, and
network.bc
a BioCham 4 reaction network, if the SBML model does not contain delays.
network.jl
a Julia's Catalyst reaction network, if the SBML model does not contain events.

Software Downloads

Which kinds of reaction networks?

Each Core SBML network defines a system of algebraic differential equations with delays. So there are not only ordinary differential equations (ODEs), but also algebraic equations, and delay differential equations. The equations use four kinds of variables:

Species variables
are defined by chemical reactions in which they may occur as reactants and products. Chemical reactions have a kinetic law, which is an arithmetic expression in which all three kinds of variables may occur (possibly with the delay operator delay_k(e)):
Algebraic variables
come with an arithmetic expression that may contain delay operators. There is an algebraic equation for each algebraic variable possibly extended with delays. Macros are distinguished algebraic variables whose arithmetic expression is given by the macro's definition.
Differential variables
have a rate defining a differential equation.
Control variables
Some differential variables are distinguished as control parameters. These always have rate 0, so that their values are constant over time, except that they may be changed by events.

XML Schema

The XML Schema of Core SBML consists of a DTD and a Schematron. The comments of the DTD contain constraints that are formalized by the Schematron. An online documentation of the current version of the DTD csmbl-1.21.dtd is available. It is generated from the same sources than the DTD itself: csbml-1.21.dtd . A validator and the sources for the DTD and the Schematron can be downloaded with the package of the compilers. It runs on MacOS and Linux (and developers should be able to make it run under Windows).

Example of BioModel B111

Graph of B111

An example graph generated for the Core SBML network compiled from the curated BioModels model B111=BIOMD0000000111 is given below. B111=BioMod000000111

Macros definitions for B111

This network uses the following definition of macros by arithmetic expressions:
Macro definitions for  B111

Differential Equations

This differential equations of the networks are composed of the kinetic laws of the reactions:

Kinetic Laws of Reactions for  B111

In addition, there are the linear equations for the species depending on the stoichiometries of the species for the reactions.

differential equations for species of  B111

There are also equations for algebraic and differential variables:

Algebraic and differential variables of  B111

Initial Values

The initial values of the species are as follows:

Initial values for the species of B111

The initial values of the control parameters are:

Events

There are two events updating species amounts and control parameters.

Events of B111

XML Syntax

XML Syntax of Core SBML network for B111

click here.
    
<network id="Novak2001_FissionYeast_CellCycle" name="Novak2001_FissionYeast_CellCycle" biomodels="B111" csbml-version="1.12" ><!--
	+++ start species +++++
      --><!-- species without initial assignment -->
   <variable type="species" id="cdc13T" latex-look="Total cdc13" initial="0.2" concentration="conc_cdc13T" compartment="cell" />
   <expression id="conc_cdc13T" latex-look="\CONC[Total cdc13]" >
      <divide>
         <var type="species" id="cdc13T" />
         <expr id="cell" />
      </divide>
   </expression>
   <!-- species without initial assignment -->
   <variable type="species" id="preMPF" initial="0" concentration="conc_preMPF" compartment="cell" />
   <expression id="conc_preMPF" latex-look="\CONC[preMPF]" >
      <divide>
         <var type="species" id="preMPF" />
         <expr id="cell" />
      </divide>
   </expression>
   <!-- species without initial assignment -->
   <variable type="species" id="ste9" initial="1" concentration="conc_ste9" compartment="cell" />
   <expression id="conc_ste9" latex-look="\CONC[ste9]" >
      <divide>
         <var type="species" id="ste9" />
         <expr id="cell" />
      </divide>
   </expression>
   <!-- species without initial assignment -->
   <variable type="species" id="slp1T" initial="0" concentration="conc_slp1T" compartment="cell" />
   <expression id="conc_slp1T" latex-look="\CONC[slp1T]" >
      <divide>
         <var type="species" id="slp1T" />
         <expr id="cell" />
      </divide>
   </expression>
   <!-- species without initial assignment -->
   <variable type="species" id="slp1" initial="2.2" concentration="conc_slp1" compartment="cell" />
   <expression id="conc_slp1" latex-look="\CONC[slp1]" >
      <divide>
         <var type="species" id="slp1" />
         <expr id="cell" />
      </divide>
   </expression>
   <!-- species without initial assignment -->
   <variable type="species" id="IEP" initial="0" concentration="conc_IEP" compartment="cell" />
   <expression id="conc_IEP" latex-look="\CONC[IEP]" >
      <divide>
         <var type="species" id="IEP" />
         <expr id="cell" />
      </divide>
   </expression>
   <!-- species without initial assignment -->
   <variable type="species" id="rum1T" initial="0" concentration="conc_rum1T" compartment="cell" />
   <expression id="conc_rum1T" latex-look="\CONC[rum1T]" >
      <divide>
         <var type="species" id="rum1T" />
         <expr id="cell" />
      </divide>
   </expression>
   <!-- species without initial assignment -->
   <variable type="species" id="SK" initial="0" concentration="conc_SK" compartment="cell" />
   <expression id="conc_SK" latex-look="\CONC[SK]" >
      <divide>
         <var type="species" id="SK" />
         <expr id="cell" />
      </divide>
   </expression>
   <!-- species without initial assignment -->
   <variable type="species" id="M" latex-look="Cell Mass" initial="1" concentration="conc_M" compartment="cell" />
   <expression id="conc_M" latex-look="\CONC[Cell Mass]" >
      <divide>
         <var type="species" id="M" />
         <expr id="cell" />
      </divide>
   </expression>
   <!-- species with assignmentRule -->
   <variable type="algebraic" id="MPF" latex-look="M-phase promoting factor" concentration="conc_MPF" compartment="cell" >
      <kinetic-expression>
         <divide>
            <times>
               <minus>
                  <var type="species" id="cdc13T" />
                  <var type="species" id="preMPF" />
               </minus>
               <minus>
                  <var type="species" id="cdc13T" />
                  <!--  nonconstant parameter without rule nor event-->
                  <expr id="Trimer" />
               </minus>
            </times>
            <var type="species" id="cdc13T" />
         </divide>
      </kinetic-expression>
   </variable>
   <expression id="conc_MPF" latex-look="\CONC[M-phase promoting factor]" >
      <divide>
         <var type="algebraic" id="MPF" />
         <expr id="cell" />
      </divide>
   </expression>
   <!-- +++ start reactions +++++-->
   <reaction id="R1" >
      <kinetic-expression>
         <times>
            <expr id="k1" />
            <var type="species" id="M" />
         </times>
      </kinetic-expression>
      <product spec="cdc13T" />
   </reaction>
   <reaction id="R2" >
      <kinetic-expression>
         <times>
            <plus>
               <expr id="k2_prime" />
               <times>
                  <expr id="k2_double_prime" />
                  <var type="species" id="ste9" />
               </times>
               <times>
                  <expr id="k2_triple_prime" />
                  <var type="species" id="slp1" />
               </times>
            </plus>
            <var type="species" id="cdc13T" />
         </times>
      </kinetic-expression>
      <reactant spec="cdc13T" />
   </reaction>
   <reaction id="R3" >
      <kinetic-expression>
         <times><!--  nonconstant parameter without rule nor event-->
            <expr id="kwee" />
            <minus>
               <var type="species" id="cdc13T" />
               <var type="species" id="preMPF" />
            </minus>
         </times>
      </kinetic-expression>
      <product spec="preMPF" />
   </reaction>
   <reaction id="R4" >
      <kinetic-expression>
         <times><!--  nonconstant parameter without rule nor event-->
            <expr id="k25" />
            <var type="species" id="preMPF" />
         </times>
      </kinetic-expression>
      <reactant spec="preMPF" />
   </reaction>
   <reaction id="R5" >
      <kinetic-expression>
         <times>
            <plus>
               <expr id="k2_prime" />
               <times>
                  <expr id="k2_double_prime" />
                  <var type="species" id="ste9" />
               </times>
               <times>
                  <expr id="k2_triple_prime" />
                  <var type="species" id="slp1" />
               </times>
            </plus>
            <var type="species" id="preMPF" />
         </times>
      </kinetic-expression>
      <reactant spec="preMPF" />
   </reaction>
   <reaction id="R6" >
      <kinetic-expression>
         <divide>
            <times>
               <plus>
                  <expr id="k3_prime" />
                  <times>
                     <expr id="k3_double_prime" />
                     <var type="species" id="slp1" />
                  </times>
               </plus>
               <minus>
                  <constant value="1" />
                  <var type="species" id="ste9" />
               </minus>
            </times>
            <minus>
               <plus>
                  <expr id="J3" />
                  <constant value="1" />
               </plus>
               <var type="species" id="ste9" />
            </minus>
         </divide>
      </kinetic-expression>
      <product spec="ste9" />
   </reaction>
   <reaction id="R7" >
      <kinetic-expression>
         <divide>
            <times>
               <plus>
                  <times>
                     <expr id="k4_prime" />
                     <var type="species" id="SK" />
                  </times>
                  <times>
                     <expr id="k4" />
                     <var type="algebraic" id="MPF" />
                  </times>
               </plus>
               <var type="species" id="ste9" />
            </times>
            <plus>
               <expr id="J4" />
               <var type="species" id="ste9" />
            </plus>
         </divide>
      </kinetic-expression>
      <reactant spec="ste9" />
   </reaction>
   <reaction id="R8" >
      <kinetic-expression>
         <plus>
            <expr id="k5_prime" />
            <divide>
               <times>
                  <expr id="k5_double_prime" />
                  <power>
                     <var type="algebraic" id="MPF" />
                     <constant value="4" />
                  </power>
               </times>
               <plus>
                  <power>
                     <expr id="J5" />
                     <constant value="4" />
                  </power>
                  <power>
                     <var type="algebraic" id="MPF" />
                     <constant value="4" />
                  </power>
               </plus>
            </divide>
         </plus>
      </kinetic-expression>
      <product spec="slp1T" />
   </reaction>
   <reaction id="R9" >
      <kinetic-expression>
         <times>
            <expr id="k6" />
            <var type="species" id="slp1T" />
         </times>
      </kinetic-expression>
      <reactant spec="slp1T" />
   </reaction>
   <reaction id="R10" >
      <kinetic-expression>
         <divide>
            <times>
               <expr id="k7" />
               <var type="species" id="IEP" />
               <minus>
                  <var type="species" id="slp1T" />
                  <var type="species" id="slp1" />
               </minus>
            </times>
            <minus>
               <plus>
                  <expr id="J7" />
                  <var type="species" id="slp1T" />
               </plus>
               <var type="species" id="slp1" />
            </minus>
         </divide>
      </kinetic-expression>
      <product spec="slp1" />
   </reaction>
   <reaction id="R11" >
      <kinetic-expression>
         <divide>
            <times>
               <expr id="k8" />
               <var type="species" id="slp1" />
            </times>
            <plus>
               <expr id="J8" />
               <var type="species" id="slp1" />
            </plus>
         </divide>
      </kinetic-expression>
      <reactant spec="slp1" />
   </reaction>
   <reaction id="R12" >
      <kinetic-expression>
         <times>
            <expr id="k6" />
            <var type="species" id="slp1" />
         </times>
      </kinetic-expression>
      <reactant spec="slp1" />
   </reaction>
   <reaction id="R13" >
      <kinetic-expression>
         <divide>
            <times>
               <expr id="k9" />
               <var type="algebraic" id="MPF" />
               <minus>
                  <constant value="1" />
                  <var type="species" id="IEP" />
               </minus>
            </times>
            <minus>
               <plus>
                  <expr id="J9" />
                  <constant value="1" />
               </plus>
               <var type="species" id="IEP" />
            </minus>
         </divide>
      </kinetic-expression>
      <product spec="IEP" />
   </reaction>
   <reaction id="R14" >
      <kinetic-expression>
         <divide>
            <times>
               <expr id="k10" />
               <var type="species" id="IEP" />
            </times>
            <plus>
               <expr id="J10" />
               <var type="species" id="IEP" />
            </plus>
         </divide>
      </kinetic-expression>
      <reactant spec="IEP" />
   </reaction>
   <reaction id="R15" >
      <kinetic-expression>
         <expr id="k11" />
      </kinetic-expression>
      <product spec="rum1T" />
   </reaction>
   <reaction id="R16" >
      <kinetic-expression>
         <times>
            <plus>
               <expr id="k12" />
               <times>
                  <expr id="k12_prime" />
                  <var type="species" id="SK" />
               </times>
               <times>
                  <expr id="k12_double_prime" />
                  <var type="algebraic" id="MPF" />
               </times>
            </plus>
            <var type="species" id="rum1T" />
         </times>
      </kinetic-expression>
      <reactant spec="rum1T" />
   </reaction>
   <reaction id="R17" >
      <kinetic-expression>
         <times>
            <expr id="k13" />
            <!--  nonconstant parameter without rule nor event-->
            <expr id="TF" />
         </times>
      </kinetic-expression>
      <product spec="SK" />
   </reaction>
   <reaction id="R18" >
      <kinetic-expression>
         <times>
            <expr id="k14" />
            <var type="species" id="SK" />
         </times>
      </kinetic-expression>
      <reactant spec="SK" />
   </reaction>
   <reaction id="R19" >
      <kinetic-expression>
         <times>
            <expr id="mu" />
            <var type="species" id="M" />
         </times>
      </kinetic-expression>
      <product spec="M" />
   </reaction>
   <!-- +++ start parameters +++++ -->
   <variable type="control" id="flag_MPF" initial="0" />
   <!--   with assignment rule -->
   <expression id="sigma" >
      <plus>
         <var type="species" id="cdc13T" />
         <var type="species" id="rum1T" />
         <expr id="Kdiss" />
      </plus>
   </expression>
   <expression id="Kdiss" >
      <constant value="0.001" />
   </expression>
   <!--   with assignment rule -->
   <expression id="Trimer" >
      <divide>
         <times>
            <constant value="2" />
            <var type="species" id="cdc13T" />
            <var type="species" id="rum1T" />
         </times>
         <plus><!--  nonconstant parameter without rule nor event-->
            <expr id="sigma" />
            <power>
               <minus>
                  <power><!--  nonconstant parameter without rule nor event-->
                     <expr id="sigma" />
                     <constant value="2" />
                  </power>
                  <times>
                     <constant value="4" />
                     <var type="species" id="cdc13T" />
                     <var type="species" id="rum1T" />
                  </times>
               </minus>
               <constant value="0.5" />
            </power>
         </plus>
      </divide>
   </expression>
   <!--   with assignment rule -->
   <expression id="TF" >
      <divide>
         <times>
            <constant value="2" />
            <expr id="k15" />
            <var type="species" id="M" />
            <expr id="J16" />
         </times>
         <plus>
            <minus>
               <plus>
                  <expr id="k16_prime" />
                  <times>
                     <expr id="k16_double_prime" />
                     <var type="algebraic" id="MPF" />
                  </times>
               </plus>
               <times>
                  <expr id="k15" />
                  <var type="species" id="M" />
               </times>
            </minus>
            <times>
               <plus>
                  <expr id="k16_prime" />
                  <times>
                     <expr id="k16_double_prime" />
                     <var type="algebraic" id="MPF" />
                  </times>
               </plus>
               <expr id="J15" />
            </times>
            <times>
               <expr id="k15" />
               <var type="species" id="M" />
               <expr id="J16" />
            </times>
            <power>
               <minus>
                  <power>
                     <plus>
                        <minus>
                           <plus>
                              <expr id="k16_prime" />
                              <times>
                                 <expr id="k16_double_prime" />
                                 <var type="algebraic" id="MPF" />
                              </times>
                           </plus>
                           <times>
                              <expr id="k15" />
                              <var type="species" id="M" />
                           </times>
                        </minus>
                        <times>
                           <plus>
                              <expr id="k16_prime" />
                              <times>
                                 <expr id="k16_double_prime" />
                                 <var type="algebraic" id="MPF" />
                              </times>
                           </plus>
                           <expr id="J15" />
                        </times>
                        <times>
                           <expr id="k15" />
                           <var type="species" id="M" />
                           <expr id="J16" />
                        </times>
                     </plus>
                     <constant value="2" />
                  </power>
                  <times>
                     <constant value="4" />
                     <minus>
                        <plus>
                           <expr id="k16_prime" />
                           <times>
                              <expr id="k16_double_prime" />
                              <var type="algebraic" id="MPF" />
                           </times>
                        </plus>
                        <times>
                           <expr id="k15" />
                           <var type="species" id="M" />
                        </times>
                     </minus>
                     <expr id="k15" />
                     <var type="species" id="M" />
                     <expr id="J16" />
                  </times>
               </minus>
               <constant id="div-degree" value="0.5" />
            </power>
         </plus>
      </divide>
   </expression>
   <expression id="k15" >
      <constant value="1.5" />
   </expression>
   <expression id="J16" >
      <constant value="0.01" />
   </expression>
   <expression id="k16_prime" >
      <constant value="1" />
   </expression>
   <expression id="k16_double_prime" >
      <constant value="2" />
   </expression>
   <expression id="J15" >
      <constant value="0.01" />
   </expression>
   <!--   with assignment rule -->
   <expression id="kwee" >
      <plus>
         <expr id="kwee_prime" />
         <times>
            <minus>
               <expr id="kwee_double_prime" />
               <expr id="kwee_prime" />
            </minus>
            <divide>
               <times>
                  <constant value="2" />
                  <expr id="Vawee" />
                  <expr id="Jiwee" />
               </times>
               <plus>
                  <minus>
                     <times>
                        <expr id="Viwee" />
                        <var type="algebraic" id="MPF" />
                     </times>
                     <expr id="Vawee" />
                  </minus>
                  <times>
                     <expr id="Viwee" />
                     <var type="algebraic" id="MPF" />
                     <expr id="Jawee" />
                  </times>
                  <times>
                     <expr id="Vawee" />
                     <expr id="Jiwee" />
                  </times>
                  <power>
                     <minus>
                        <power>
                           <plus>
                              <minus>
                                 <times>
                                    <expr id="Viwee" />
                                    <var type="algebraic" id="MPF" />
                                 </times>
                                 <expr id="Vawee" />
                              </minus>
                              <times>
                                 <expr id="Viwee" />
                                 <var type="algebraic" id="MPF" />
                                 <expr id="Jawee" />
                              </times>
                              <times>
                                 <expr id="Vawee" />
                                 <expr id="Jiwee" />
                              </times>
                           </plus>
                           <constant value="2" />
                        </power>
                        <times>
                           <constant value="4" />
                           <minus>
                              <times>
                                 <expr id="Viwee" />
                                 <var type="algebraic" id="MPF" />
                              </times>
                              <expr id="Vawee" />
                           </minus>
                           <expr id="Vawee" />
                           <expr id="Jiwee" />
                        </times>
                     </minus>
                     <constant id="div-degree" value="0.5" />
                  </power>
               </plus>
            </divide>
         </times>
      </plus>
   </expression>
   <expression id="kwee_prime" >
      <constant value="0.15" />
   </expression>
   <expression id="kwee_double_prime" >
      <constant value="1.3" />
   </expression>
   <expression id="Vawee" >
      <constant value="0.25" />
   </expression>
   <expression id="Jiwee" >
      <constant value="0.01" />
   </expression>
   <expression id="Viwee" >
      <constant value="1" />
   </expression>
   <expression id="Jawee" >
      <constant value="0.01" />
   </expression>
   <!--   with assignment rule -->
   <expression id="k25" >
      <plus>
         <expr id="k25_prime" />
         <times>
            <minus>
               <expr id="k25_double_prime" />
               <expr id="k25_prime" />
            </minus>
            <divide>
               <times>
                  <constant value="2" />
                  <expr id="Va25" />
                  <var type="algebraic" id="MPF" />
                  <expr id="Ji25" />
               </times>
               <plus>
                  <minus>
                     <expr id="Vi25" />
                     <times>
                        <expr id="Va25" />
                        <var type="algebraic" id="MPF" />
                     </times>
                  </minus>
                  <times>
                     <expr id="Vi25" />
                     <expr id="Ja25" />
                  </times>
                  <times>
                     <expr id="Va25" />
                     <var type="algebraic" id="MPF" />
                     <expr id="Ji25" />
                  </times>
                  <power>
                     <minus>
                        <power>
                           <plus>
                              <minus>
                                 <expr id="Vi25" />
                                 <times>
                                    <expr id="Va25" />
                                    <var type="algebraic" id="MPF" />
                                 </times>
                              </minus>
                              <times>
                                 <expr id="Vi25" />
                                 <expr id="Ja25" />
                              </times>
                              <times>
                                 <expr id="Va25" />
                                 <var type="algebraic" id="MPF" />
                                 <expr id="Ji25" />
                              </times>
                           </plus>
                           <constant value="2" />
                        </power>
                        <times>
                           <constant value="4" />
                           <minus>
                              <expr id="Vi25" />
                              <times>
                                 <expr id="Va25" />
                                 <var type="algebraic" id="MPF" />
                              </times>
                           </minus>
                           <expr id="Va25" />
                           <var type="algebraic" id="MPF" />
                           <expr id="Ji25" />
                        </times>
                     </minus>
                     <constant id="div-degree" value="0.5" />
                  </power>
               </plus>
            </divide>
         </times>
      </plus>
   </expression>
   <expression id="k25_prime" >
      <constant value="0.05" />
   </expression>
   <expression id="k25_double_prime" >
      <constant value="5" />
   </expression>
   <expression id="Va25" >
      <constant value="1" />
   </expression>
   <expression id="Ji25" >
      <constant value="0.01" />
   </expression>
   <expression id="Vi25" >
      <constant value="0.25" />
   </expression>
   <expression id="Ja25" >
      <constant value="0.01" />
   </expression>
   <expression id="k1" >
      <constant value="0.03" />
   </expression>
   <expression id="k2_prime" >
      <constant value="0.03" />
   </expression>
   <expression id="k2_double_prime" >
      <constant value="1" />
   </expression>
   <expression id="k2_triple_prime" >
      <constant value="0.1" />
   </expression>
   <expression id="k3_prime" >
      <constant value="1" />
   </expression>
   <expression id="k3_double_prime" >
      <constant value="10" />
   </expression>
   <expression id="J3" >
      <constant value="0.01" />
   </expression>
   <expression id="k4_prime" >
      <constant value="2" />
   </expression>
   <expression id="k4" >
      <constant value="35" />
   </expression>
   <expression id="J4" >
      <constant value="0.01" />
   </expression>
   <expression id="k5_prime" >
      <constant value="0.005" />
   </expression>
   <expression id="k5_double_prime" >
      <constant value="0.3" />
   </expression>
   <expression id="J5" >
      <constant value="0.3" />
   </expression>
   <expression id="k6" >
      <constant value="0.1" />
   </expression>
   <expression id="k7" >
      <constant value="1" />
   </expression>
   <expression id="J7" >
      <constant value="0.001" />
   </expression>
   <expression id="k8" >
      <constant value="0.25" />
   </expression>
   <expression id="J8" >
      <constant value="0.001" />
   </expression>
   <expression id="k9" >
      <constant value="0.1" />
   </expression>
   <expression id="J9" >
      <constant value="0.01" />
   </expression>
   <expression id="k10" >
      <constant value="0.04" />
   </expression>
   <expression id="J10" >
      <constant value="0.01" />
   </expression>
   <expression id="k11" >
      <constant value="0.1" />
   </expression>
   <expression id="k12" >
      <constant value="0.01" />
   </expression>
   <expression id="k12_prime" >
      <constant value="1" />
   </expression>
   <expression id="k12_double_prime" >
      <constant value="3" />
   </expression>
   <expression id="k13" >
      <constant value="0.1" />
   </expression>
   <expression id="k14" >
      <constant value="0.1" />
   </expression>
   <expression id="mu" >
      <constant value="0.005" />
   </expression>
   <!-- +++ start compartments -->
   <!--constant compartment -->
   <expression id="cell" >
      <constant value="1" />
   </expression>
   <!-- +++ start events -->
   <event id="event_0000001" >
      <condition>
         <and>
            <leq>
               <var type="algebraic" id="MPF" />
               <constant value="0.1" />
            </leq>
            <eq><!--  control parameter  -->
               <var type="control" id="flag_MPF" />
               <constant value="1" />
            </eq>
         </and>
      </condition>
      <update><!-- species without boundaryCondition-->
         <var type="species" id="M" />
         <divide>
            <var type="species" id="M" />
            <constant value="2" />
         </divide>
      </update>
      <update><!-- no rule but event -->
         <var type="control" id="flag_MPF" />
         <constant value="0" />
      </update>
   </event>
   <event id="event_0000002" >
      <condition>
         <lt>
            <constant value="0.1" />
            <var type="algebraic" id="MPF" />
         </lt>
      </condition>
      <update><!-- no rule but event -->
         <var type="control" id="flag_MPF" />
         <constant value="1" />
      </update>
   </event>
</network>

Conversion to BioCham

BioCham network for Core SBML network for B111

click here
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Network: Novak2001_FissionYeast_CellCycle
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
              
%%%%  reaction rules %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% R1
(k1 * M) for _ =>cdc13T.
% R2
((k2_prime + (k2_double_prime * ste9) + (k2_triple_prime * slp1)) * cdc13T) for cdc13T=>_.
% R3
(kwee * (cdc13T - preMPF)) for _=>preMPF.
% R4
(k25 * preMPF) for preMPF=>_.
% R5
((k2_prime + (k2_double_prime * ste9) + (k2_triple_prime * slp1)) * preMPF) for preMPF=>_.
% R6
(((k3_prime + (k3_double_prime * slp1)) * (1 - ste9)) / ((J3 + 1) - ste9)) for _=>ste9.
% R7
((((k4_prime * SK) + (k4 * MPF)) * ste9) / (J4 + ste9)) for ste9=>_.
% R8
(k5_prime + ((k5_double_prime * (MPF^4)) / ((J5^4) + (MPF^4)))) for _=>slp1T.
% R9
(k6 * slp1T) for slp1T=>_.
% R10
((k7 * IEP * (slp1T - slp1)) / ((J7 + slp1T) - slp1)) for _=>slp1.
% R11
((k8 * slp1) / (J8 + slp1)) for slp1=>_.
% R12
(k6 * slp1) for slp1=>_.
% R13
((k9 * MPF * (1 - IEP)) / ((J9 + 1) - IEP)) for _=>IEP.
% R14
((k10 * IEP) / (J10 + IEP)) for IEP=>_.
% R15
k11 for _=>rum1T.
% R16
((k12 + (k12_prime * SK) + (k12_double_prime * MPF)) * rum1T) for rum1T=>_.
% R17
(k13 * TF) for _=>SK.
% R18
(k14 * SK) for SK=>_.
% R19
(mu * M) for _=>M.

% bug fix for Time
1 for _ => RealTime.

%%%% initial values %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

present(cdc13T,0.2).
present(preMPF,0).
present(ste9,1).
present(slp1T,0).
present(slp1,2.2).
present(IEP,0).
present(rum1T,0).
present(SK,0).
present(M,1).

present(RealTime,0.0).

%%%%% macros  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% for algebraic variables  %%%%%%%%%%%%%%%%%%%%%%%%%%
  
function(MPF=(((cdc13T - preMPF) * (cdc13T - Trimer)) / cdc13T)).

% for parameters and expressions  %%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
function(conc_cdc13T=(cdc13T / cell)).
function(conc_preMPF=(preMPF / cell)).
function(conc_ste9=(ste9 / cell)).
function(conc_slp1T=(slp1T / cell)).
function(conc_slp1=(slp1 / cell)).
function(conc_IEP=(IEP / cell)).
function(conc_rum1T=(rum1T / cell)).
function(conc_SK=(SK / cell)).
function(conc_M=(M / cell)).
function(conc_MPF=(MPF / cell)).
function(sigma=(cdc13T + rum1T + Kdiss)).
function(Kdiss=0.001).
function(Trimer=((2 * cdc13T * rum1T) / (sigma + sqrt(((sigma^2) - (4 * cdc13T * rum1T)))))).
function(TF=((2 * k15 * M * J16) / (((k16_prime + (k16_double_prime * MPF)) - (k15 * M)) + ((k16_prime + (k16_double_prime * MPF)) * J15) + (k15 * M * J16) + sqrt((((((k16_prime + (k16_double_prime * MPF)) - (k15 * M)) + ((k16_prime + (k16_double_prime * MPF)) * J15) + (k15 * M * J16))^2) - (4 * ((k16_prime + (k16_double_prime * MPF)) - (k15 * M)) * k15 * M * J16)))))).
function(k15=1.5).
function(J16=0.01).
function(k16_prime=1).
function(k16_double_prime=2).
function(J15=0.01).
function(kwee=(kwee_prime + ((kwee_double_prime - kwee_prime) * ((2 * Vawee * Jiwee) / (((Viwee * MPF) - Vawee) + (Viwee * MPF * Jawee) + (Vawee * Jiwee) + sqrt((((((Viwee * MPF) - Vawee) + (Viwee * MPF * Jawee) + (Vawee * Jiwee))^2) - (4 * ((Viwee * MPF) - Vawee) * Vawee * Jiwee)))))))).
function(kwee_prime=0.15).
function(kwee_double_prime=1.3).
function(Vawee=0.25).
function(Jiwee=0.01).
function(Viwee=1).
function(Jawee=0.01).
function(k25=(k25_prime + ((k25_double_prime - k25_prime) * ((2 * Va25 * MPF * Ji25) / ((Vi25 - (Va25 * MPF)) + (Vi25 * Ja25) + (Va25 * MPF * Ji25) + sqrt(((((Vi25 - (Va25 * MPF)) + (Vi25 * Ja25) + (Va25 * MPF * Ji25))^2) - (4 * (Vi25 - (Va25 * MPF)) * Va25 * MPF * Ji25)))))))).
function(k25_prime=0.05).
function(k25_double_prime=5).
function(Va25=1).
function(Ji25=0.01).
function(Vi25=0.25).
function(Ja25=0.01).
function(k1=0.03).
function(k2_prime=0.03).
function(k2_double_prime=1).
function(k2_triple_prime=0.1).
function(k3_prime=1).
function(k3_double_prime=10).
function(J3=0.01).
function(k4_prime=2).
function(k4=35).
function(J4=0.01).
function(k5_prime=0.005).
function(k5_double_prime=0.3).
function(J5=0.3).
function(k6=0.1).
function(k7=1).
function(J7=0.001).
function(k8=0.25).
function(J8=0.001).
function(k9=0.1).
function(J9=0.01).
function(k10=0.04).
function(J10=0.01).
function(k11=0.1).
function(k12=0.01).
function(k12_prime=1).
function(k12_double_prime=3).
function(k13=0.1).
function(k14=0.1).
function(mu=0.005).
function(cell=1).
parameter(flag_MPF=0).
%%%% events  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
add_event(((MPF<=0.1) and (flag_MPF=1)),M=(M / 2),flag_MPF=0).
add_event((0.1<MPF),flag_MPF=1).

Conversion to Juila's Catalyst

Julia's Catalyst network for Core SBML network for B111

click here
############################################
# Network:   Novak2001_FissionYeast_CellCycle
#####################################################

#=
  Start Catalyst by feeding the following commented line first.

using Catalyst
  
  Then feed the whole buffer for defining with catalyst a
  reaction network and simulating it

=#

begin

#### identity signal t for real time ########################

   @variables t

#### species with their initial values ######################

   @species begin
     cdc13T(t)=0.2
      rum1T(t)=0
      preMPF(t)=0
      ste9(t)=1
      slp1T(t)=0
      slp1(t)=2.2
      IEP(t)=0
      SK(t)=0
      M(t)=1
 
  end




##### algebraic equations (may use functions and species)  ########

  
   Kdiss = 0.001
   sigma = (cdc13T + rum1T + Kdiss)
   Trimer = ((2 * cdc13T * rum1T) / (sigma + sqrt(((sigma^2) - (4 * cdc13T * rum1T)))))
   MPF = (((cdc13T - preMPF) * (cdc13T - Trimer)) / cdc13T)
   k15 = 1.5
   J16 = 0.01
   k16_prime = 1
   k16_double_prime = 2
   J15 = 0.01
   kwee_prime = 0.15
   kwee_double_prime = 1.3
   Vawee = 0.25
   Jiwee = 0.01
   Viwee = 1
   Jawee = 0.01
   k25_prime = 0.05
   k25_double_prime = 5
   Va25 = 1
   Ji25 = 0.01
   Vi25 = 0.25
   Ja25 = 0.01
   cell = 1
   conc_cdc13T = (cdc13T / cell)
   conc_preMPF = (preMPF / cell)
   conc_ste9 = (ste9 / cell)
   conc_slp1T = (slp1T / cell)
   conc_slp1 = (slp1 / cell)
   conc_IEP = (IEP / cell)
   conc_rum1T = (rum1T / cell)
   conc_SK = (SK / cell)
   conc_M = (M / cell)
   conc_MPF = (MPF / cell)
   TF = ((2 * k15 * M * J16) / (((k16_prime + (k16_double_prime * MPF)) - (k15 * M)) + ((k16_prime + (k16_double_prime * MPF)) * J15) + (k15 * M * J16) + sqrt((((((k16_prime + (k16_double_prime * MPF)) - (k15 * M)) + ((k16_prime + (k16_double_prime * MPF)) * J15) + (k15 * M * J16))^2) - (4 * ((k16_prime + (k16_double_prime * MPF)) - (k15 * M)) * k15 * M * J16)))))
   kwee = (kwee_prime + ((kwee_double_prime - kwee_prime) * ((2 * Vawee * Jiwee) / (((Viwee * MPF) - Vawee) + (Viwee * MPF * Jawee) + (Vawee * Jiwee) + sqrt((((((Viwee * MPF) - Vawee) + (Viwee * MPF * Jawee) + (Vawee * Jiwee))^2) - (4 * ((Viwee * MPF) - Vawee) * Vawee * Jiwee)))))))
   k25 = (k25_prime + ((k25_double_prime - k25_prime) * ((2 * Va25 * MPF * Ji25) / ((Vi25 - (Va25 * MPF)) + (Vi25 * Ja25) + (Va25 * MPF * Ji25) + sqrt(((((Vi25 - (Va25 * MPF)) + (Vi25 * Ja25) + (Va25 * MPF * Ji25))^2) - (4 * (Vi25 - (Va25 * MPF)) * Va25 * MPF * Ji25)))))))
   k1 = 0.03
   k2_prime = 0.03
   k2_double_prime = 1
   k2_triple_prime = 0.1
   k3_prime = 1
   k3_double_prime = 10
   J3 = 0.01
   k4_prime = 2
   k4 = 35
   J4 = 0.01
   k5_prime = 0.005
   k5_double_prime = 0.3
   J5 = 0.3
   k6 = 0.1
   k7 = 1
   J7 = 0.001
   k8 = 0.25
   J8 = 0.001
   k9 = 0.1
   J9 = 0.01
   k10 = 0.04
   J10 = 0.01
   k11 = 0.1
   k12 = 0.01
   k12_prime = 1
   k12_double_prime = 3
   k13 = 0.1
   k14 = 0.1
   mu = 0.005

#  control variables ##########################

   flag_MPF=0


####  reaction network ###################################

    rn = @reaction_network begin
     # R1
     ($k1 * $M) , 0  =>  $cdc13T
     # R2
     (($k2_prime + ($k2_double_prime * $ste9) + ($k2_triple_prime * $slp1)) * $cdc13T) , $cdc13T  =>  0
     # R3
     ($kwee * ($cdc13T - $preMPF)) , 0  =>  $preMPF
     # R4
     ($k25 * $preMPF) , $preMPF  =>  0
     # R5
     (($k2_prime + ($k2_double_prime * $ste9) + ($k2_triple_prime * $slp1)) * $preMPF) , $preMPF  =>  0
     # R6
     ((($k3_prime + ($k3_double_prime * $slp1)) * (1 - $ste9)) / (($J3 + 1) - $ste9)) , 0  =>  $ste9
     # R7
     (((($k4_prime * $SK) + ($k4 * $MPF)) * $ste9) / ($J4 + $ste9)) , $ste9  =>  0
     # R8
     ($k5_prime + (($k5_double_prime * ($MPF^4)) / (($J5^4) + ($MPF^4)))) , 0  =>  $slp1T
     # R9
     ($k6 * $slp1T) , $slp1T  =>  0
     # R10
     (($k7 * $IEP * ($slp1T - $slp1)) / (($J7 + $slp1T) - $slp1)) , 0  =>  $slp1
     # R11
     (($k8 * $slp1) / ($J8 + $slp1)) , $slp1  =>  0
     # R12
     ($k6 * $slp1) , $slp1  =>  0
     # R13
     (($k9 * $MPF * (1 - $IEP)) / (($J9 + 1) - $IEP)) , 0  =>  $IEP
     # R14
     (($k10 * $IEP) / ($J10 + $IEP)) , $IEP  =>  0
     # R15
     $k11 , 0  =>  $rum1T
     # R16
     (($k12 + ($k12_prime * $SK) + ($k12_double_prime * $MPF)) * $rum1T) , $rum1T  =>  0
     # R17
     ($k13 * $TF) , 0  =>  $SK
     # R18
     ($k14 * $SK) , $SK  =>  0
     # R19
     ($mu * $M) , 0  =>  $M

   end

###  numerical simulation ################################

   using DifferentialEquations

   odes = convert(ODESystem, rn)
   prob = ODEProblem(odes, [], (0.0, 100.0), [])
   

#   tsidas_alg = AutoTsit5(Rodas5())
#   sol = solve(prob, tsidas_alg)

   using LSODA
   sol = solve(prob, lsoda())
   
   using Plots
   plot(sol)

end