In [2]:
% matplotlib inline

In [26]:
from __future__ import print_function, division
import tellurium as te

# Defining the model as one antimony is working
antOne = """
    model one()
        J0: S1 -> S2; k1*S1;
        S1=10.0; S2=0.0; k1=0.1;
    end
"""

antTwo = """
    model one()
        J0: S1 -> S2; k1*S1;
        S1=10.0; S2=0.0; k1=0.1;
    end

    model two()
        A: one();
        A.k1 is k1;
        k1 := time+0.1;
    end
"""
rOne = te.loada(antOne)
rTwo = te.loada(antTwo)

# Referencing another model not in the string 
# is not working
# this is crucial to modify other sbml models
antThreeMods = """
    model three()
        A: one();
        A.k1 is k1;
        k1 := time+0.1;
    end
"""
antThree = antOne + antThreeMods
print(antThree)
rThree = te.loada(antThree)
sOne = rOne.simulate()
rOne.plot(sOne)
sTwo = rTwo.simulate()
rTwo.plot(sTwo)
sThree = rThree.simulate()
rThree.plot(sThree)


    model one()
        J0: S1 -> S2; k1*S1;
        S1=10.0; S2=0.0; k1=0.1;
    end

    model three()
        A: one();
        A.k1 is k1;
        k1 := time+0.1;
    end

Out[26]:
<module 'matplotlib.pyplot' from '/usr/local/lib/python2.7/dist-packages/matplotlib/pyplot.pyc'>

In [32]:
from __future__ import print_function, division
import tellurium as te

# Load an SBML model
r = te.loads("Koenig_demo_10.xml")
antDemo = r.getAntimony()

# Simulate unmodified model
sr = r.simulate(0, 10, 101)
r.plot(sr)

# Change Km_A value over time (original model is required as part of antimony string)
antMod1 = """
model Mod1()
    A: Koenig_demo_10();
    A.Km_A is Km_A;
    Km_A := 1.1+sin(time);
end
"""

# Simulate the modified model
antDemoMod1 = antDemo + antMod1
rMod1 = te.loada(antDemoMod1)
sMod1 = rMod1.simulate(0, 10, 101)
rMod1.plot(sMod1)

print('*** Modified Antimony model ***')
print(antDemoMod1)
print('*** Modified SBML model ***')
print(rMod1.getSBML())


*** Modified Antimony model ***
// Created by libAntimony v2.9.0
model *Koenig_demo_10()

  // Compartments and Species:
  compartment e, c;
  species e__A in e, e__C in e, e__B in e, c__C in c, c__B in c, c__A in c;

  // Reactions:
  bA: e__A => c__A; scale_f*(Vmax_bA/Km_A)*(e__A - c__A)/(1 dimensionless + e__A/Km_A + c__A/Km_A);
  bB: c__B => e__B; scale_f*(Vmax_bB/Km_B)*(c__B - e__B)/(1 dimensionless + e__B/Km_B + c__B/Km_B);
  bC: c__C => e__C; scale_f*(Vmax_bC/Km_C)*(c__C - e__C)/(1 dimensionless + e__C/Km_C + c__C/Km_C);
  v1 in c: c__A => c__B; (scale_f*Vmax_v1/Km_A)*(c__A - (1 dimensionless/Keq_v1)*c__B);
  v2 in c: c__A => c__C; (scale_f*Vmax_v2/Km_A)*c__A;
  v3 in c: c__C => c__A; (scale_f*Vmax_v3/Km_A)*c__C;
  v4 in c: c__C => c__B; (scale_f*Vmax_v4/Km_A)*(c__C - (1 dimensionless/Keq_v4)*c__B);

  // Species initializations:
  e__A = 10;
  e__A has mM;
  e__C = 0;
  e__C has mM;
  e__B = 0;
  e__B has mM;
  c__C = 0;
  c__C has mM;
  c__B = 0;
  c__B has mM;
  c__A = 0;
  c__A has mM;

  // Compartment initializations:
  e = 1e-06;
  e has m3;
  c = 1e-06;
  c has m3;

  // Variable initializations:
  Km_C = 3;
  Km_C has mM;
  scale_f = 1e-06;
  scale_f has dimensionless;
  Vmax_bB = 2;
  Vmax_bB has mole_per_s;
  Vmax_bC = 2;
  Vmax_bC has mole_per_s;
  Vmax_bA = 5;
  Vmax_bA has mole_per_s;
  Vmax_v2 = 0.5;
  Vmax_v2 has mole_per_s;
  Vmax_v3 = 0.5;
  Vmax_v3 has mole_per_s;
  Vmax_v1 = 1;
  Vmax_v1 has mole_per_s;
  Km_A = 1;
  Km_A has mM;
  Vmax_v4 = 0.5;
  Vmax_v4 has mole_per_s;
  Km_B = 0.5;
  Km_B has mM;
  Keq_v4 = 2;
  Keq_v4 has dimensionless;
  Keq_v1 = 10;
  Keq_v1 has dimensionless;

  // Other declarations:
  var e, c;
  const Km_C, scale_f, Vmax_bB, Vmax_bC, Vmax_bA, Vmax_v2, Vmax_v3, Vmax_v1;
  const Km_A, Vmax_v4, Km_B, Keq_v4, Keq_v1;

  // Unit definitions:
  unit kg = kilogram;
  unit mM = mole / metre^3;
  unit m = metre;
  unit s = second;
  unit m3 = metre^3;
  unit m2 = metre^2;
  unit mole_per_s = mole / second;
  unit length = m;
  unit area = m2;
  unit volume = m3;
  unit substance = mole;
  unit extent = mole;
  unit time_unit = s;

  // Display Names:
  m is "plasma membrane";
  e is "external compartment";
  c is "cell compartment";
  e__A is "A";
  e__C is "C";
  e__B is "B";
  c__C is "C";
  c__B is "B";
  c__A is "A";
  scale_f is "metabolic scaling factor";
  bA is "bA (A import)";
  bB is "bB (B export)";
  bC is "bC (C export)";
  v1 is "v1 (A -> B)";
  v2 is "v2 (A -> C)";
  v3 is "v3 (C -> A)";
  v4 is "v4 (C -> B)";
end

model Mod1()
    A: Koenig_demo_10();
    A.Km_A is Km_A;
    Km_A := 1.1+sin(time);
end

*** Modified SBML model ***
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created by libAntimony version v2.9.0 with libSBML version 5.12.1. -->
<sbml xmlns="http://www.sbml.org/sbml/level3/version1/core" level="3" version="1">
  <model id="Koenig_demo_10" name="Koenig_demo_10" substanceUnits="substance" timeUnits="time_unit" volumeUnits="volume" areaUnits="area" lengthUnits="length" extentUnits="extent">
    <listOfUnitDefinitions>
      <unitDefinition id="mM">
        <listOfUnits>
          <unit kind="mole" exponent="1" scale="0" multiplier="1"/>
          <unit kind="metre" exponent="-3" scale="0" multiplier="1"/>
        </listOfUnits>
      </unitDefinition>
      <unitDefinition id="m3">
        <listOfUnits>
          <unit kind="metre" exponent="3" scale="0" multiplier="1"/>
        </listOfUnits>
      </unitDefinition>
      <unitDefinition id="mole_per_s">
        <listOfUnits>
          <unit kind="mole" exponent="1" scale="0" multiplier="1"/>
          <unit kind="second" exponent="-1" scale="0" multiplier="1"/>
        </listOfUnits>
      </unitDefinition>
      <unitDefinition id="kg">
        <listOfUnits>
          <unit kind="kilogram" exponent="1" scale="0" multiplier="1"/>
        </listOfUnits>
      </unitDefinition>
      <unitDefinition id="m" name="plasma membrane">
        <listOfUnits>
          <unit kind="metre" exponent="1" scale="0" multiplier="1"/>
        </listOfUnits>
      </unitDefinition>
      <unitDefinition id="s">
        <listOfUnits>
          <unit kind="second" exponent="1" scale="0" multiplier="1"/>
        </listOfUnits>
      </unitDefinition>
      <unitDefinition id="m2">
        <listOfUnits>
          <unit kind="metre" exponent="2" scale="0" multiplier="1"/>
        </listOfUnits>
      </unitDefinition>
      <unitDefinition id="length">
        <listOfUnits>
          <unit kind="metre" exponent="1" scale="0" multiplier="1"/>
        </listOfUnits>
      </unitDefinition>
      <unitDefinition id="area">
        <listOfUnits>
          <unit kind="metre" exponent="2" scale="0" multiplier="1"/>
        </listOfUnits>
      </unitDefinition>
      <unitDefinition id="volume">
        <listOfUnits>
          <unit kind="metre" exponent="3" scale="0" multiplier="1"/>
        </listOfUnits>
      </unitDefinition>
      <unitDefinition id="substance">
        <listOfUnits>
          <unit kind="mole" exponent="1" scale="0" multiplier="1"/>
        </listOfUnits>
      </unitDefinition>
      <unitDefinition id="extent">
        <listOfUnits>
          <unit kind="mole" exponent="1" scale="0" multiplier="1"/>
        </listOfUnits>
      </unitDefinition>
      <unitDefinition id="time_unit">
        <listOfUnits>
          <unit kind="second" exponent="1" scale="0" multiplier="1"/>
        </listOfUnits>
      </unitDefinition>
    </listOfUnitDefinitions>
    <listOfCompartments>
      <compartment id="e" name="external compartment" spatialDimensions="3" size="1e-06" units="m3" constant="false"/>
      <compartment id="c" name="cell compartment" spatialDimensions="3" size="1e-06" units="m3" constant="false"/>
    </listOfCompartments>
    <listOfSpecies>
      <species id="e__A" name="A" compartment="e" initialConcentration="10" substanceUnits="mole" hasOnlySubstanceUnits="false" boundaryCondition="false" constant="false"/>
      <species id="e__C" name="C" compartment="e" initialConcentration="0" substanceUnits="mole" hasOnlySubstanceUnits="false" boundaryCondition="false" constant="false"/>
      <species id="e__B" name="B" compartment="e" initialConcentration="0" substanceUnits="mole" hasOnlySubstanceUnits="false" boundaryCondition="false" constant="false"/>
      <species id="c__C" name="C" compartment="c" initialConcentration="0" substanceUnits="mole" hasOnlySubstanceUnits="false" boundaryCondition="false" constant="false"/>
      <species id="c__B" name="B" compartment="c" initialConcentration="0" substanceUnits="mole" hasOnlySubstanceUnits="false" boundaryCondition="false" constant="false"/>
      <species id="c__A" name="A" compartment="c" initialConcentration="0" substanceUnits="mole" hasOnlySubstanceUnits="false" boundaryCondition="false" constant="false"/>
    </listOfSpecies>
    <listOfParameters>
      <parameter id="scale_f" name="metabolic scaling factor" value="1e-06" units="dimensionless" constant="true"/>
      <parameter id="Vmax_bA" value="5" units="mole_per_s" constant="true"/>
      <parameter id="Km_A" value="1" units="mM" constant="true"/>
      <parameter id="Vmax_bB" value="2" units="mole_per_s" constant="true"/>
      <parameter id="Km_B" value="0.5" units="mM" constant="true"/>
      <parameter id="Vmax_bC" value="2" units="mole_per_s" constant="true"/>
      <parameter id="Km_C" value="3" units="mM" constant="true"/>
      <parameter id="Vmax_v1" value="1" units="mole_per_s" constant="true"/>
      <parameter id="Keq_v1" value="10" units="dimensionless" constant="true"/>
      <parameter id="Vmax_v2" value="0.5" units="mole_per_s" constant="true"/>
      <parameter id="Vmax_v3" value="0.5" units="mole_per_s" constant="true"/>
      <parameter id="Vmax_v4" value="0.5" units="mole_per_s" constant="true"/>
      <parameter id="Keq_v4" value="2" units="dimensionless" constant="true"/>
    </listOfParameters>
    <listOfReactions>
      <reaction id="bA" name="bA (A import)" reversible="false" fast="false">
        <listOfReactants>
          <speciesReference species="e__A" stoichiometry="1" constant="true"/>
        </listOfReactants>
        <listOfProducts>
          <speciesReference species="c__A" stoichiometry="1" constant="true"/>
        </listOfProducts>
        <kineticLaw>
          <math xmlns="http://www.w3.org/1998/Math/MathML" xmlns:sbml="http://www.sbml.org/sbml/level3/version1/core">
            <apply>
              <divide/>
              <apply>
                <times/>
                <ci> scale_f </ci>
                <apply>
                  <divide/>
                  <ci> Vmax_bA </ci>
                  <ci> Km_A </ci>
                </apply>
                <apply>
                  <minus/>
                  <ci> e__A </ci>
                  <ci> c__A </ci>
                </apply>
              </apply>
              <apply>
                <plus/>
                <cn sbml:units="dimensionless" type="integer"> 1 </cn>
                <apply>
                  <divide/>
                  <ci> e__A </ci>
                  <ci> Km_A </ci>
                </apply>
                <apply>
                  <divide/>
                  <ci> c__A </ci>
                  <ci> Km_A </ci>
                </apply>
              </apply>
            </apply>
          </math>
        </kineticLaw>
      </reaction>
      <reaction id="bB" name="bB (B export)" reversible="false" fast="false">
        <listOfReactants>
          <speciesReference species="c__B" stoichiometry="1" constant="true"/>
        </listOfReactants>
        <listOfProducts>
          <speciesReference species="e__B" stoichiometry="1" constant="true"/>
        </listOfProducts>
        <kineticLaw>
          <math xmlns="http://www.w3.org/1998/Math/MathML" xmlns:sbml="http://www.sbml.org/sbml/level3/version1/core">
            <apply>
              <divide/>
              <apply>
                <times/>
                <ci> scale_f </ci>
                <apply>
                  <divide/>
                  <ci> Vmax_bB </ci>
                  <ci> Km_B </ci>
                </apply>
                <apply>
                  <minus/>
                  <ci> c__B </ci>
                  <ci> e__B </ci>
                </apply>
              </apply>
              <apply>
                <plus/>
                <cn sbml:units="dimensionless" type="integer"> 1 </cn>
                <apply>
                  <divide/>
                  <ci> e__B </ci>
                  <ci> Km_B </ci>
                </apply>
                <apply>
                  <divide/>
                  <ci> c__B </ci>
                  <ci> Km_B </ci>
                </apply>
              </apply>
            </apply>
          </math>
        </kineticLaw>
      </reaction>
      <reaction id="bC" name="bC (C export)" reversible="false" fast="false">
        <listOfReactants>
          <speciesReference species="c__C" stoichiometry="1" constant="true"/>
        </listOfReactants>
        <listOfProducts>
          <speciesReference species="e__C" stoichiometry="1" constant="true"/>
        </listOfProducts>
        <kineticLaw>
          <math xmlns="http://www.w3.org/1998/Math/MathML" xmlns:sbml="http://www.sbml.org/sbml/level3/version1/core">
            <apply>
              <divide/>
              <apply>
                <times/>
                <ci> scale_f </ci>
                <apply>
                  <divide/>
                  <ci> Vmax_bC </ci>
                  <ci> Km_C </ci>
                </apply>
                <apply>
                  <minus/>
                  <ci> c__C </ci>
                  <ci> e__C </ci>
                </apply>
              </apply>
              <apply>
                <plus/>
                <cn sbml:units="dimensionless" type="integer"> 1 </cn>
                <apply>
                  <divide/>
                  <ci> e__C </ci>
                  <ci> Km_C </ci>
                </apply>
                <apply>
                  <divide/>
                  <ci> c__C </ci>
                  <ci> Km_C </ci>
                </apply>
              </apply>
            </apply>
          </math>
        </kineticLaw>
      </reaction>
      <reaction id="v1" name="v1 (A -&gt; B)" reversible="false" fast="false" compartment="c">
        <listOfReactants>
          <speciesReference species="c__A" stoichiometry="1" constant="true"/>
        </listOfReactants>
        <listOfProducts>
          <speciesReference species="c__B" stoichiometry="1" constant="true"/>
        </listOfProducts>
        <kineticLaw>
          <math xmlns="http://www.w3.org/1998/Math/MathML" xmlns:sbml="http://www.sbml.org/sbml/level3/version1/core">
            <apply>
              <times/>
              <apply>
                <divide/>
                <apply>
                  <times/>
                  <ci> scale_f </ci>
                  <ci> Vmax_v1 </ci>
                </apply>
                <ci> Km_A </ci>
              </apply>
              <apply>
                <minus/>
                <ci> c__A </ci>
                <apply>
                  <times/>
                  <apply>
                    <divide/>
                    <cn sbml:units="dimensionless" type="integer"> 1 </cn>
                    <ci> Keq_v1 </ci>
                  </apply>
                  <ci> c__B </ci>
                </apply>
              </apply>
            </apply>
          </math>
        </kineticLaw>
      </reaction>
      <reaction id="v2" name="v2 (A -&gt; C)" reversible="false" fast="false" compartment="c">
        <listOfReactants>
          <speciesReference species="c__A" stoichiometry="1" constant="true"/>
        </listOfReactants>
        <listOfProducts>
          <speciesReference species="c__C" stoichiometry="1" constant="true"/>
        </listOfProducts>
        <kineticLaw>
          <math xmlns="http://www.w3.org/1998/Math/MathML">
            <apply>
              <times/>
              <apply>
                <divide/>
                <apply>
                  <times/>
                  <ci> scale_f </ci>
                  <ci> Vmax_v2 </ci>
                </apply>
                <ci> Km_A </ci>
              </apply>
              <ci> c__A </ci>
            </apply>
          </math>
        </kineticLaw>
      </reaction>
      <reaction id="v3" name="v3 (C -&gt; A)" reversible="false" fast="false" compartment="c">
        <listOfReactants>
          <speciesReference species="c__C" stoichiometry="1" constant="true"/>
        </listOfReactants>
        <listOfProducts>
          <speciesReference species="c__A" stoichiometry="1" constant="true"/>
        </listOfProducts>
        <kineticLaw>
          <math xmlns="http://www.w3.org/1998/Math/MathML">
            <apply>
              <times/>
              <apply>
                <divide/>
                <apply>
                  <times/>
                  <ci> scale_f </ci>
                  <ci> Vmax_v3 </ci>
                </apply>
                <ci> Km_A </ci>
              </apply>
              <ci> c__C </ci>
            </apply>
          </math>
        </kineticLaw>
      </reaction>
      <reaction id="v4" name="v4 (C -&gt; B)" reversible="false" fast="false" compartment="c">
        <listOfReactants>
          <speciesReference species="c__C" stoichiometry="1" constant="true"/>
        </listOfReactants>
        <listOfProducts>
          <speciesReference species="c__B" stoichiometry="1" constant="true"/>
        </listOfProducts>
        <kineticLaw>
          <math xmlns="http://www.w3.org/1998/Math/MathML" xmlns:sbml="http://www.sbml.org/sbml/level3/version1/core">
            <apply>
              <times/>
              <apply>
                <divide/>
                <apply>
                  <times/>
                  <ci> scale_f </ci>
                  <ci> Vmax_v4 </ci>
                </apply>
                <ci> Km_A </ci>
              </apply>
              <apply>
                <minus/>
                <ci> c__C </ci>
                <apply>
                  <times/>
                  <apply>
                    <divide/>
                    <cn sbml:units="dimensionless" type="integer"> 1 </cn>
                    <ci> Keq_v4 </ci>
                  </apply>
                  <ci> c__B </ci>
                </apply>
              </apply>
            </apply>
          </math>
        </kineticLaw>
      </reaction>
    </listOfReactions>
  </model>
</sbml>


In [ ]: