In [2]:
import tellurium as te
import urllib2
%matplotlib inline


/usr/lib/python2.7/dist-packages/tellurium/tellurium.py:66: UserWarning:

plotly could not be initialized. Unable to use Plotly for plotting.

Roadrunner Methoden

Antimony Modell aus Modell-Datenbank abfragen:

Lade mithilfe von urllib2 das Antimony-Modell des "Repressilator" herunter. Benutze dazu die urllib2 Methoden urlopen() und read()

Die URL für den Repressilator lautet: http://antimony.sourceforge.net/examples/biomodels/BIOMD0000000012.txt

Elowitz, M. B., & Leibler, S. (2000). A synthetic oscillatory network of transcriptional regulators. Nature, 403(6767), 335-338.


In [3]:
Repressilator =

Erstelle eine Instanz von roadrunner, indem du gleichzeitig den Repressilator als Modell lädst. Benutze dazu loada() von tellurium.


In [4]:

Im folgenden Teil wollen wir einige der Methoden von telluriums roadrunner ausprobieren. Lass dir dazu das Modell als Antimony oder SBML anzeigen. Dies erreichst du mit getAntimony() oder getSBML().


In [5]:



// Created by libAntimony v2.9.4
model *BIOMD0000000012()

  // Compartments and Species:
  compartment cell;
  substanceOnly species PX in cell, PY in cell, PZ in cell, X in cell, Y in cell;
  substanceOnly species Z in cell;

  // Assignment Rules:
  beta := tau_mRNA/tau_prot;
  alpha0 := a0_tr*eff*tau_prot/(ln(2)*KM);
  a0_tr := ps_0*60;
  alpha := a_tr*eff*tau_prot/(ln(2)*KM);
  a_tr := (ps_a - ps_0)*60;
  t_ave := tau_mRNA/ln(2);
  kd_mRNA := ln(2)/tau_mRNA;
  kd_prot := ln(2)/tau_prot;
  k_tl := eff/t_ave;

  // Reactions:
  Reaction1: X => ; kd_mRNA*X;
  Reaction2: Y => ; kd_mRNA*Y;
  Reaction3: Z => ; kd_mRNA*Z;
  Reaction4:  => PX; k_tl*X;
  Reaction5:  => PY; k_tl*Y;
  Reaction6:  => PZ; k_tl*Z;
  Reaction7: PX => ; kd_prot*PX;
  Reaction8: PY => ; kd_prot*PY;
  Reaction9: PZ => ; kd_prot*PZ;
  Reaction10:  => X; a0_tr + a_tr*KM^n/(KM^n + PZ^n);
  Reaction11:  => Y; a0_tr + a_tr*KM^n/(KM^n + PX^n);
  Reaction12:  => Z; a0_tr + a_tr*KM^n/(KM^n + PY^n);

  // Species initializations:
  PX = 0;
  PY = 0;
  PZ = 0;
  X = 0;
  Y = 20/cell;
  Z = 0;

  // Compartment initializations:
  cell = 1;

  // Variable initializations:
  tau_mRNA = 2;
  tau_prot = 10;
  eff = 20;
  KM = 40;
  ps_0 = 0.0005;
  ps_a = 0.5;
  n = 2;

  // Other declarations:
  var beta, alpha0, a0_tr, alpha, a_tr, t_ave, kd_mRNA, kd_prot, k_tl;
  const cell, tau_mRNA, tau_prot, eff, KM, ps_0, ps_a, n;

  // Unit definitions:
  unit volume = 1e-15 litre;
  unit substance = item;
  unit time_unit = 6e1 second;

  // Display Names:
  volume is "cubic microns";
  substance is "item";
  time_unit is "minute";
  PX is "LacI protein";
  PY is "TetR protein";
  PZ is "cI protein";
  X is "LacI mRNA";
  Y is "TetR mRNA";
  Z is "cI mRNA";
  tau_mRNA is "mRNA half life";
  tau_prot is "protein half life";
  eff is "translation efficiency";
  ps_0 is "tps_repr";
  ps_a is "tps_active";
  t_ave is "average mRNA life time";
  Reaction1 is "degradation of LacI transcripts";
  Reaction2 is "degradation of TetR transcripts";
  Reaction3 is "degradation of CI transcripts";
  Reaction4 is "translation of LacI";
  Reaction5 is "translation of TetR";
  Reaction6 is "translation of CI";
  Reaction7 is "degradation of LacI";
  Reaction8 is "degradation of TetR";
  Reaction9 is "degradation of CI";
  Reaction10 is "transcription of LacI";
  Reaction11 is "transcription of TetR";
  Reaction12 is "transcription of CI";
end


In [6]:



<?xml version="1.0" encoding="UTF-8"?>
<!-- Created by libAntimony version v2.9.4 with libSBML version 5.15.2. -->
<sbml xmlns="http://www.sbml.org/sbml/level3/version1/core" level="3" version="1">
  <model id="BIOMD0000000012" name="BIOMD0000000012" substanceUnits="substance" timeUnits="time_unit" volumeUnits="volume">
    <listOfUnitDefinitions>
      <unitDefinition id="volume" name="cubic microns">
        <listOfUnits>
          <unit kind="litre" exponent="1" scale="-15" multiplier="1"/>
        </listOfUnits>
      </unitDefinition>
      <unitDefinition id="substance" name="item">
        <listOfUnits>
          <unit kind="item" exponent="1" scale="0" multiplier="1"/>
        </listOfUnits>
      </unitDefinition>
      <unitDefinition id="time_unit" name="minute">
        <listOfUnits>
          <unit kind="second" exponent="1" scale="1" multiplier="6"/>
        </listOfUnits>
      </unitDefinition>
    </listOfUnitDefinitions>
    <listOfCompartments>
      <compartment id="cell" spatialDimensions="3" size="1" constant="true"/>
    </listOfCompartments>
    <listOfSpecies>
      <species id="PX" name="LacI protein" compartment="cell" initialConcentration="0" hasOnlySubstanceUnits="true" boundaryCondition="false" constant="false"/>
      <species id="PY" name="TetR protein" compartment="cell" initialConcentration="0" hasOnlySubstanceUnits="true" boundaryCondition="false" constant="false"/>
      <species id="PZ" name="cI protein" compartment="cell" initialConcentration="0" hasOnlySubstanceUnits="true" boundaryCondition="false" constant="false"/>
      <species id="X" name="LacI mRNA" compartment="cell" initialConcentration="0" hasOnlySubstanceUnits="true" boundaryCondition="false" constant="false"/>
      <species id="Y" name="TetR mRNA" compartment="cell" initialAmount="20" hasOnlySubstanceUnits="true" boundaryCondition="false" constant="false"/>
      <species id="Z" name="cI mRNA" compartment="cell" initialConcentration="0" hasOnlySubstanceUnits="true" boundaryCondition="false" constant="false"/>
    </listOfSpecies>
    <listOfParameters>
      <parameter id="beta" constant="false"/>
      <parameter id="tau_mRNA" name="mRNA half life" value="2" constant="true"/>
      <parameter id="tau_prot" name="protein half life" value="10" constant="true"/>
      <parameter id="alpha0" constant="false"/>
      <parameter id="a0_tr" constant="false"/>
      <parameter id="eff" name="translation efficiency" value="20" constant="true"/>
      <parameter id="KM" value="40" constant="true"/>
      <parameter id="ps_0" name="tps_repr" value="0.0005" constant="true"/>
      <parameter id="alpha" constant="false"/>
      <parameter id="a_tr" constant="false"/>
      <parameter id="ps_a" name="tps_active" value="0.5" constant="true"/>
      <parameter id="t_ave" name="average mRNA life time" constant="false"/>
      <parameter id="kd_mRNA" constant="false"/>
      <parameter id="kd_prot" constant="false"/>
      <parameter id="k_tl" constant="false"/>
      <parameter id="n" value="2" constant="true"/>
    </listOfParameters>
    <listOfRules>
      <assignmentRule variable="beta">
        <math xmlns="http://www.w3.org/1998/Math/MathML">
          <apply>
            <divide/>
            <ci> tau_mRNA </ci>
            <ci> tau_prot </ci>
          </apply>
        </math>
      </assignmentRule>
      <assignmentRule variable="alpha0">
        <math xmlns="http://www.w3.org/1998/Math/MathML">
          <apply>
            <divide/>
            <apply>
              <times/>
              <ci> a0_tr </ci>
              <ci> eff </ci>
              <ci> tau_prot </ci>
            </apply>
            <apply>
              <times/>
              <apply>
                <ln/>
                <cn type="integer"> 2 </cn>
              </apply>
              <ci> KM </ci>
            </apply>
          </apply>
        </math>
      </assignmentRule>
      <assignmentRule variable="a0_tr">
        <math xmlns="http://www.w3.org/1998/Math/MathML">
          <apply>
            <times/>
            <ci> ps_0 </ci>
            <cn type="integer"> 60 </cn>
          </apply>
        </math>
      </assignmentRule>
      <assignmentRule variable="alpha">
        <math xmlns="http://www.w3.org/1998/Math/MathML">
          <apply>
            <divide/>
            <apply>
              <times/>
              <ci> a_tr </ci>
              <ci> eff </ci>
              <ci> tau_prot </ci>
            </apply>
            <apply>
              <times/>
              <apply>
                <ln/>
                <cn type="integer"> 2 </cn>
              </apply>
              <ci> KM </ci>
            </apply>
          </apply>
        </math>
      </assignmentRule>
      <assignmentRule variable="a_tr">
        <math xmlns="http://www.w3.org/1998/Math/MathML">
          <apply>
            <times/>
            <apply>
              <minus/>
              <ci> ps_a </ci>
              <ci> ps_0 </ci>
            </apply>
            <cn type="integer"> 60 </cn>
          </apply>
        </math>
      </assignmentRule>
      <assignmentRule variable="t_ave">
        <math xmlns="http://www.w3.org/1998/Math/MathML">
          <apply>
            <divide/>
            <ci> tau_mRNA </ci>
            <apply>
              <ln/>
              <cn type="integer"> 2 </cn>
            </apply>
          </apply>
        </math>
      </assignmentRule>
      <assignmentRule variable="kd_mRNA">
        <math xmlns="http://www.w3.org/1998/Math/MathML">
          <apply>
            <divide/>
            <apply>
              <ln/>
              <cn type="integer"> 2 </cn>
            </apply>
            <ci> tau_mRNA </ci>
          </apply>
        </math>
      </assignmentRule>
      <assignmentRule variable="kd_prot">
        <math xmlns="http://www.w3.org/1998/Math/MathML">
          <apply>
            <divide/>
            <apply>
              <ln/>
              <cn type="integer"> 2 </cn>
            </apply>
            <ci> tau_prot </ci>
          </apply>
        </math>
      </assignmentRule>
      <assignmentRule variable="k_tl">
        <math xmlns="http://www.w3.org/1998/Math/MathML">
          <apply>
            <divide/>
            <ci> eff </ci>
            <ci> t_ave </ci>
          </apply>
        </math>
      </assignmentRule>
    </listOfRules>
    <listOfReactions>
      <reaction id="Reaction1" name="degradation of LacI transcripts" reversible="false" fast="false">
        <listOfReactants>
          <speciesReference species="X" stoichiometry="1" constant="true"/>
        </listOfReactants>
        <kineticLaw>
          <math xmlns="http://www.w3.org/1998/Math/MathML">
            <apply>
              <times/>
              <ci> kd_mRNA </ci>
              <ci> X </ci>
            </apply>
          </math>
        </kineticLaw>
      </reaction>
      <reaction id="Reaction2" name="degradation of TetR transcripts" reversible="false" fast="false">
        <listOfReactants>
          <speciesReference species="Y" stoichiometry="1" constant="true"/>
        </listOfReactants>
        <kineticLaw>
          <math xmlns="http://www.w3.org/1998/Math/MathML">
            <apply>
              <times/>
              <ci> kd_mRNA </ci>
              <ci> Y </ci>
            </apply>
          </math>
        </kineticLaw>
      </reaction>
      <reaction id="Reaction3" name="degradation of CI transcripts" reversible="false" fast="false">
        <listOfReactants>
          <speciesReference species="Z" stoichiometry="1" constant="true"/>
        </listOfReactants>
        <kineticLaw>
          <math xmlns="http://www.w3.org/1998/Math/MathML">
            <apply>
              <times/>
              <ci> kd_mRNA </ci>
              <ci> Z </ci>
            </apply>
          </math>
        </kineticLaw>
      </reaction>
      <reaction id="Reaction4" name="translation of LacI" reversible="false" fast="false">
        <listOfProducts>
          <speciesReference species="PX" stoichiometry="1" constant="true"/>
        </listOfProducts>
        <listOfModifiers>
          <modifierSpeciesReference species="X"/>
        </listOfModifiers>
        <kineticLaw>
          <math xmlns="http://www.w3.org/1998/Math/MathML">
            <apply>
              <times/>
              <ci> k_tl </ci>
              <ci> X </ci>
            </apply>
          </math>
        </kineticLaw>
      </reaction>
      <reaction id="Reaction5" name="translation of TetR" reversible="false" fast="false">
        <listOfProducts>
          <speciesReference species="PY" stoichiometry="1" constant="true"/>
        </listOfProducts>
        <listOfModifiers>
          <modifierSpeciesReference species="Y"/>
        </listOfModifiers>
        <kineticLaw>
          <math xmlns="http://www.w3.org/1998/Math/MathML">
            <apply>
              <times/>
              <ci> k_tl </ci>
              <ci> Y </ci>
            </apply>
          </math>
        </kineticLaw>
      </reaction>
      <reaction id="Reaction6" name="translation of CI" reversible="false" fast="false">
        <listOfProducts>
          <speciesReference species="PZ" stoichiometry="1" constant="true"/>
        </listOfProducts>
        <listOfModifiers>
          <modifierSpeciesReference species="Z"/>
        </listOfModifiers>
        <kineticLaw>
          <math xmlns="http://www.w3.org/1998/Math/MathML">
            <apply>
              <times/>
              <ci> k_tl </ci>
              <ci> Z </ci>
            </apply>
          </math>
        </kineticLaw>
      </reaction>
      <reaction id="Reaction7" name="degradation of LacI" reversible="false" fast="false">
        <listOfReactants>
          <speciesReference species="PX" stoichiometry="1" constant="true"/>
        </listOfReactants>
        <kineticLaw>
          <math xmlns="http://www.w3.org/1998/Math/MathML">
            <apply>
              <times/>
              <ci> kd_prot </ci>
              <ci> PX </ci>
            </apply>
          </math>
        </kineticLaw>
      </reaction>
      <reaction id="Reaction8" name="degradation of TetR" reversible="false" fast="false">
        <listOfReactants>
          <speciesReference species="PY" stoichiometry="1" constant="true"/>
        </listOfReactants>
        <kineticLaw>
          <math xmlns="http://www.w3.org/1998/Math/MathML">
            <apply>
              <times/>
              <ci> kd_prot </ci>
              <ci> PY </ci>
            </apply>
          </math>
        </kineticLaw>
      </reaction>
      <reaction id="Reaction9" name="degradation of CI" reversible="false" fast="false">
        <listOfReactants>
          <speciesReference species="PZ" stoichiometry="1" constant="true"/>
        </listOfReactants>
        <kineticLaw>
          <math xmlns="http://www.w3.org/1998/Math/MathML">
            <apply>
              <times/>
              <ci> kd_prot </ci>
              <ci> PZ </ci>
            </apply>
          </math>
        </kineticLaw>
      </reaction>
      <reaction id="Reaction10" name="transcription of LacI" reversible="false" fast="false">
        <listOfProducts>
          <speciesReference species="X" stoichiometry="1" constant="true"/>
        </listOfProducts>
        <listOfModifiers>
          <modifierSpeciesReference species="PZ"/>
        </listOfModifiers>
        <kineticLaw>
          <math xmlns="http://www.w3.org/1998/Math/MathML">
            <apply>
              <plus/>
              <ci> a0_tr </ci>
              <apply>
                <divide/>
                <apply>
                  <times/>
                  <ci> a_tr </ci>
                  <apply>
                    <power/>
                    <ci> KM </ci>
                    <ci> n </ci>
                  </apply>
                </apply>
                <apply>
                  <plus/>
                  <apply>
                    <power/>
                    <ci> KM </ci>
                    <ci> n </ci>
                  </apply>
                  <apply>
                    <power/>
                    <ci> PZ </ci>
                    <ci> n </ci>
                  </apply>
                </apply>
              </apply>
            </apply>
          </math>
        </kineticLaw>
      </reaction>
      <reaction id="Reaction11" name="transcription of TetR" reversible="false" fast="false">
        <listOfProducts>
          <speciesReference species="Y" stoichiometry="1" constant="true"/>
        </listOfProducts>
        <listOfModifiers>
          <modifierSpeciesReference species="PX"/>
        </listOfModifiers>
        <kineticLaw>
          <math xmlns="http://www.w3.org/1998/Math/MathML">
            <apply>
              <plus/>
              <ci> a0_tr </ci>
              <apply>
                <divide/>
                <apply>
                  <times/>
                  <ci> a_tr </ci>
                  <apply>
                    <power/>
                    <ci> KM </ci>
                    <ci> n </ci>
                  </apply>
                </apply>
                <apply>
                  <plus/>
                  <apply>
                    <power/>
                    <ci> KM </ci>
                    <ci> n </ci>
                  </apply>
                  <apply>
                    <power/>
                    <ci> PX </ci>
                    <ci> n </ci>
                  </apply>
                </apply>
              </apply>
            </apply>
          </math>
        </kineticLaw>
      </reaction>
      <reaction id="Reaction12" name="transcription of CI" reversible="false" fast="false">
        <listOfProducts>
          <speciesReference species="Z" stoichiometry="1" constant="true"/>
        </listOfProducts>
        <listOfModifiers>
          <modifierSpeciesReference species="PY"/>
        </listOfModifiers>
        <kineticLaw>
          <math xmlns="http://www.w3.org/1998/Math/MathML">
            <apply>
              <plus/>
              <ci> a0_tr </ci>
              <apply>
                <divide/>
                <apply>
                  <times/>
                  <ci> a_tr </ci>
                  <apply>
                    <power/>
                    <ci> KM </ci>
                    <ci> n </ci>
                  </apply>
                </apply>
                <apply>
                  <plus/>
                  <apply>
                    <power/>
                    <ci> KM </ci>
                    <ci> n </ci>
                  </apply>
                  <apply>
                    <power/>
                    <ci> PY </ci>
                    <ci> n </ci>
                  </apply>
                </apply>
              </apply>
            </apply>
          </math>
        </kineticLaw>
      </reaction>
    </listOfReactions>
  </model>
</sbml>

Solver Methoden

Achtung: Obwohl resetToOrigin() das Modell in den ursprünglichen Zustand zurück setzt, bleiben Solver-spezifische Einstellungen erhalten. Daher benutze am besten immer te.loada() als vollständigen Reset!

Mit getIntegrator() ist es möglich, den Solver und dessen gesetzte Einstellungen anzeigen zu lassen.


In [7]:
rr = te.loada(Repressilator)


< roadrunner.Integrator() >
  name: cvode
  settings:
      relative_tolerance: 0.000001
      absolute_tolerance: 0.000000000001
                   stiff: true
       maximum_bdf_order: 5
     maximum_adams_order: 12
       maximum_num_steps: 20000
       maximum_time_step: 0
       minimum_time_step: 0
       initial_time_step: 0
          multiple_steps: false
      variable_step_size: false

Ändere den verwendeten Solver von 'CVODE' auf Runge-Kutta 'rk45' und lass dir die Settings nochmals anzeigen. Verwende dazu setIntegrator() und getIntegrator(). Was fällt auf?


In [8]:
rr = te.loada(Repressilator)


< roadrunner.Integrator() >
  name: rk45
  settings:
      variable_step_size: true
       minimum_time_step: 0.000000000001
       maximum_time_step: 1
                 epsilon: 0.000000000001

Simuliere den Repressilator von 0s bis 1000s und plotte die Ergebnisse für verschiedene steps-Werte (z.b. steps = 10 oder 10000) in der simulate-Methode. Was macht das Argument steps?


In [9]:
rr = te.loada(Repressilator)


Benutze weiterhin 'CVODE' und verändere den Paramter 'relative_tolerance' des Solvers (z.b. 1 oder 10). Verwendete dabei steps = 10000 in simulate(). Was fällt auf?

Hinweis - die nötige Methode lautet roadrunner.getIntegrator().setValue().


In [1]:
rr = te.loada(Repressilator)


------------------------------------------------------------------
NameError                        Traceback (most recent call last)
<ipython-input-1-323adb0b2c56> in <module>()
----> 1 rr = te.loada(Repressilator)

NameError: name 'te' is not defined

ODE-Modell als Objekt in Python

Oben haben wir gesehen, dass tellurium eine Instanz von RoadRunner erzeugt, wenn ein Modell eingelesen wird.

Außerdem ist der Zugriff auf das eigentliche Modell möglich. Unter Verwendung von .model gibt es zusätzliche Methoden um das eigentliche Modell zu manipulieren:


In [11]:
rr = te.loada(Repressilator)
print type(rr)
print type(rr.model)


<class 'tellurium.roadrunner.extended_roadrunner.ExtendedRoadRunner'>
<class 'roadrunner.roadrunner.ExecutableModel'>

Aufgabe 1 - Parameterscan:

A) Sieh dir die Implementierung des Modells 'Repressilator' an, welche Paramter gibt es?

B) Erstelle einen Parameterscan, welcher den Wert des Paramters mit der Bezeichnung 'n' im Repressilator ändert. (Beispielsweise für n=1,n=2,n=3,...)

Lasse das Modell für jedes gewählte 'n' simulieren.

Beantworte dazu folgende Fragen:

a) Welchen Zweck erfüllt 'n' im Modell im Hinblick auf die Reaktion, in der 'n' auftaucht?
b) Im Gegensatz dazu, welchen Effekt hat 'n' auf das Modellverhalten?
c) Kannst du einen Wert für 'n' angeben, bei dem sich das Verhalten des Modells qualitativ ändert?

C) Visualisiere die Simulationen. Welche Art von Plot ist günstig, um die Modellsimulation darzustellen? Es gibt mehrere geeignete Varianten, aber beschränke die Anzahl der Graphen im Plot(z.b. wähle eine Spezies und plotte).

Hinweise:

Nutze die "Autovervollständigung" des Python-Notebook und außerdem die offizielle Dokumentation von RoadRunner, um die Methoden zu finden, die für die Implementierung eines Parameterscans notwendig sind. Natürlich kannst du auch das Notebook von der Tellurium Einführung als Hilfe benutzen.

Ziehe in Erwägung, dass das Modell einen oder mehrere Resets benötigt. Überlege, an welcher Stelle deiner implementierung und welche Reset-Methode du idealerweise einsetzen solltest.


In [12]:
import matplotlib.pyplot as plt
import numpy as np

rr = te.loada(Repressilator)


1.0
1.7
3.0
10.0
1.0
1.7
3.0
10.0

Aufgabe 2 - (Initial value)-scan:

Erstelle einen "Scan", der den Anfwangswert von der Spezies Y ändert. Das Modellverhalten ist hierbei weniger interessant. Achte vielmehr darauf, die Resets so zu setzen, dass 'Y' bei der Simulation tatsächlich beim gesetzten Wert startet.


In [26]:
import matplotlib.pyplot as plt
import numpy as np

rr = te.loada(Repressilator)


['init(PX)', 'init(PY)', 'init(PZ)', 'init(X)', 'init(Y)', 'init(Z)']
[  0.   0.   0.   0.  20.   0.]