Running Time Series¶
First generate a model
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | import os
from pycotools3 import model, tasks
model_string = """
model model1()
R1: => A ; k1*S;
R2: A => ; k2*A;
R3: => B ; k3*A;
R4: B => ; k4*B*C; //feedback term
R5: => C ; k5*B;
R6: C => ; k6*C;
S = 1;
k1 = 0.1;
k2 = 0.1;
k3 = 0.1;
k4 = 0.1;
k5 = 0.1;
k6 = 0.1;
A = 0;
B = 0;
C = 0;
APlusB := A + B;
end
"""
# when running from a script you can use the special __file__ variable
if os.path.isfile(__file__):
copasi_file = os.path.join(os.path.dirname(__file__), 'copasi_file.cps')
else:
copasi_file = os.path.join(os.path.abspath(''), 'copasi_file.cps')
# create a copasi model
mod = model.loada(model_string, copasi_file)
assert isinstance(mod, model.Model)
|
To run a time course simulation use:
>>> # from 0 to 100 by step size of 0.1
>>> mod.simulate(0, 100, 0.1, variables='m')
A B C
Time
0 0.000000 0.000000 0.000000
1 0.095163 0.004837 0.000159
2 0.181269 0.018730 0.001208
3 0.259182 0.040810 0.003882
4 0.329680 0.070277 0.008766
5 0.393469 0.106377 0.016316
6 0.451188 0.148384 0.026874
7 0.503415 0.195577 0.040682
8 0.550671 0.247230 0.057889
9 0.593430 0.302596 0.078559
10 0.632121 0.360899 0.102679
The output is a :py:class:`pandas.DataFrame <https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html>`_.
Note
The variables argument is ‘m’ by default.
This gives you the time series of all the metabolites. If you also want global quantities (or even local parameters - though they are constants anyway) you can use ‘g’ or ‘l’.
For instance:
Return time series for global variables
>>> mod.simulate(0, 100, 0.1, variables='g')
APlusB S k1 k2 k3 k4 k5 k6
Time
0 0.000000 1 0.1 0.1 0.1 0.1 0.1 0.1
1 0.100000 1 0.1 0.1 0.1 0.1 0.1 0.1
2 0.199999 1 0.1 0.1 0.1 0.1 0.1 0.1
3 0.299992 1 0.1 0.1 0.1 0.1 0.1 0.1
4 0.399957 1 0.1 0.1 0.1 0.1 0.1 0.1
5 0.499847 1 0.1 0.1 0.1 0.1 0.1 0.1
6 0.599572 1 0.1 0.1 0.1 0.1 0.1 0.1
7 0.698992 1 0.1 0.1 0.1 0.1 0.1 0.1
8 0.797901 1 0.1 0.1 0.1 0.1 0.1 0.1
9 0.896026 1 0.1 0.1 0.1 0.1 0.1 0.1
10 0.993020 1 0.1 0.1 0.1 0.1 0.1 0.1
Return time series for metabolites and global variables
>>> mod.simulate(0, 100, 0.1, variables='mg')
A APlusB B C S … k2 k3 k4 k5 k6
Time … 0 0.000000 0.000000 0.000000 0.000000 1 … 0.1 0.1 0.1 0.1 0.1 1 0.095163 0.100000 0.004837 0.000159 1 … 0.1 0.1 0.1 0.1 0.1 2 0.181269 0.199999 0.018730 0.001208 1 … 0.1 0.1 0.1 0.1 0.1 3 0.259182 0.299992 0.040810 0.003882 1 … 0.1 0.1 0.1 0.1 0.1 4 0.329680 0.399957 0.070277 0.008766 1 … 0.1 0.1 0.1 0.1 0.1 5 0.393469 0.499847 0.106377 0.016316 1 … 0.1 0.1 0.1 0.1 0.1 6 0.451188 0.599572 0.148384 0.026874 1 … 0.1 0.1 0.1 0.1 0.1 7 0.503415 0.698992 0.195577 0.040682 1 … 0.1 0.1 0.1 0.1 0.1 8 0.550671 0.797901 0.247230 0.057889 1 … 0.1 0.1 0.1 0.1 0.1 9 0.593430 0.896026 0.302596 0.078559 1 … 0.1 0.1 0.1 0.1 0.1 10 0.632121 0.993020 0.360899 0.102679 1 … 0.1 0.1 0.1 0.1 0.1
Return time series for metabolites, global variables and local parameters (though remember there are none in this current topology)
>>> mod.simulate(0, 100, 0.1, variables='mgl')
A B C
Time
0 1.000000 1.000000 1.00000
1 0.082146 0.072788 2.81673
2 0.069317 0.062367 2.83276
3 0.068980 0.062080 2.82647
4 0.068817 0.061934 2.81989
5 0.068657 0.061789 2.81332
6 0.068497 0.061645 2.80677
7 0.068337 0.061502 2.80023
8 0.068178 0.061358 2.79371
9 0.068019 0.061215 2.78720
10 0.067861 0.061073 2.78071
Alternative simulation methods¶
Copasi supports several model simulation algorithms. PyCoTools supports most of these, including:
- deterministic (the default)
- direct
- gibson_bruck
- tau_leap
- adaptive_tau_leap
- hybrid_runge_kutta
- hybrid_lsoda
- hybrid_rk45
To use one of these alternative methods, ensure your model
is adequate for the simulation you are performing (i.e. no reversible
reactions and low enough copy numbers for stochastic simulation)
and use the method argument to pycotools3.model.Model.simulate()
Note
The example model above is not suitable to stochastic simulation
Plotting¶
If you have used pycotools3.model.Model.simulate()
then you will
have a pandas.DataFrame
. In this case, you might as well use
either pandas plotting facilities or matplotlib with seaborn. You could also
use plotly, plotly with dash or bokeh.
There are also some inherent plotting facilities in pycotools.
With PyCoTools¶
Visualisation in pycotools works by passing a plotter class an instance of a task. In this case we need a handle to the TimeCourse task.
>>> from pycotools3 import tasks, viz
>>> tc = tasks.TimeCourse(model=mod, start=0, end=10, step_size=1)
>>> viz.PlotTimeCourse(tc, savefig=True, show=True)
Since the inherent plotting module is basically just a wrapper around matplotlib and seaborn, it might be a good idea to use these tools instead.
Here’s an example.
With matplotlib¶
Here’s a very simple example using matplotlib.