Kinetic Modelling

Loading a model

The general form of the description of a kinetic model has been covered in the pages on the ScrumPy Model Description Language. Consider this model file an example. It contains two reaction definitions with their kinetic equations, followed by initial assignments of the parameters and the variable (B).

There are two limitations on the syntax for kinetic models:

  1. The identifiers cannot be quoted, and
  2. No c or C++ key words can be used as identifiers.

On the other hand, it is possible to compute the values to be assigned, as in this example of adjusting an equilibrium constant to its apparent value at the prevailing pH:

If the two reaction model above is saved as a spy file, it can be loaded into ScrumPy to create an instance of a model object as follows:

Inspecting and assigning values

Once it has been loaded, values can be inspected, e.g.:

They can, of course, also be changed:

However, note:

That is, the computation of the rate is not updated until m.Eval() is called to force a re-evaluation of the rate with current parameters and concentration values.

The following table shows the methods/attributes of any model instance m that return lists of the corresponding entities:

The corresponding method SetVec takes as parameters one of the same codes as GetVec followed by a vector of values, but the vector must be the correct length ( as indicated by, e.g. len(m.ParamNames)).

Moiety conservation parameters

ScrumPy takes care of any dependencies between metabolites by computing the moiety conservation relationships from the stoichiometry matrix. These arise, for example, where coenzymes such as NAD and NADH occur in a model, but the nucleotide moieties are not synthesised and degraded by the model reactions.

In such cases, a new parameter, with an identifier starting CSUM_, is created and assigned a value that is the sum of the initialised concentrations of the metabolites in the conservation group. One of the metabolite concentrations will then not be integrated, but will have its concentration determined as the difference between the CSUM parameter and the sum of all the remaining metabolite concentrations.

Insert Conservation methods etc.

It is strongly recommended that you do not try to anticipate dependencies by manually eliminating one of the conserved group metabolites from your model. ScrumPy uses a mathematically-validated method to determine the conservation relationships, which can be complicated and non-intuitive, especially where two conservation groups intersect. Furthermore, without the conservation sum constraint, steady state solvers cannot be guaranteed to respect the conserved total.

Examining steady states of the model

The steady state of the model can be determined with m.FindSS(); if the steady state is found successfully, than m.IsOK() will return True.

A straightforward way to record a series of steady states as a parameter is changed uses the AddStatMonitor method. For example:

results is a ScrumPy matrix, the columns of which (results.cnames) contain the time, rates, concentrations and parameter values of the model (though the time is always zero in this case). A row is added to the matrix with each successful steady state determination, recording the steady state values.

There are methods for plotting the outcome of the set of analyses that are described more fully in Secondary Analysis of Model Results (link to be made). A simple example is:

resulting in

PlotSSeg.png

What to do if a steady state is not found

Before looking for potential problems with the numerical solution of your model, check via structural analysis (insert links) that your model has elementary modes connecting inputs to outputs, and that there are no structurally dead reactions (other than those that can attain equilibrium).

Options in FindSS and pre-simulation.