Fig 5.10, 5.11

Fig 5.10, 5.11#

Methionine model

using DifferentialEquations
using ModelingToolkit
using Plots
Plots.default(linewidth=2)
hil(x, k=one(x)) = x / (x + k)
hil(x, k, n) = hil(x^n, k^n)
hil (generic function with 3 methods)

Model

@independent_variables t
@variables AdoMet(t) = 10 AdoHcy(t) = 10 Hcy(t)
@variables v_MATI(t) v_MATIII(t) K_MATIII_m1(t) v_MATIII(t) v_GNMT(t) K_MET_m1(t) v_MET(t) v_D(t)
D = Differential(t)
@parameters begin
    K_AHC = 0.1
    Adenosine = 1
    v_MATI_max = 561
    Met = 48.5
    K_MATI_m = 41
    K_MATI_i = 50
    v_MATIII_max = 22870
    K_MATIII_m2 = 21.1
    v_GNMT_max = 10600
    K_GNMT_m = 4500
    K_GNMT_i = 20
    v_MET_max = 4544
    A_over_K_MET_m2 = 0.1
    alpha_d = 1333
end

eqs = [
    Hcy ~ AdoHcy * K_AHC / Adenosine,
    v_MATI ~ v_MATI_max * hil(Met * hil(K_MATI_i, AdoMet), K_MATI_m),
    K_MATIII_m1 ~ 20000 / (1 + 5.7 * hil(AdoMet, 600)^2),
    v_MATIII ~ v_MATIII_max * hil(Met, K_MATIII_m1 * hil(K_MATIII_m2, Met)),
    v_GNMT ~ v_GNMT_max * hil(AdoMet, K_GNMT_m, 2.3) * hil(K_GNMT_i, AdoHcy),
    K_MET_m1 ~ 10 + 2.5 * AdoHcy,
    v_MET ~ v_MET_max * hil(AdoMet, K_MET_m1) * hil(A_over_K_MET_m2),
    v_D ~ alpha_d * Hcy,
    D(AdoMet) ~ (v_MATI + v_MATIII) - (v_GNMT + v_MET),
    D(AdoHcy) ~ (v_GNMT + v_MET - v_D) * hil(Adenosine, K_AHC),
]

@mtkbuild osys = ODESystem(eqs, t)
\[\begin{split} \begin{align} \frac{\mathrm{d} \mathtt{AdoMet}\left( t \right)}{\mathrm{d}t} &= - \mathtt{v\_MET}\left( t \right) - \mathtt{v\_GNMT}\left( t \right) + \mathtt{v\_MATIII}\left( t \right) + \mathtt{v\_MATI}\left( t \right) \\ \frac{\mathrm{d} \mathtt{AdoHcy}\left( t \right)}{\mathrm{d}t} &= \frac{\mathtt{Adenosine} \left( \mathtt{v\_MET}\left( t \right) + \mathtt{v\_GNMT}\left( t \right) - \mathtt{v\_D}\left( t \right) \right)}{\mathtt{Adenosine} + \mathtt{K\_AHC}} \end{align} \end{split}\]

Figure 5.10#

tend = 5.0
prob = ODEProblem(osys, [], tend, [])
sol = solve(prob)
plot(sol, title="Figure 5.10", xlabel="Time (hr)", ylabel="Concentration (μM)", xlims=(0, 1), legend=:right)
../_images/7e89304df04e3a8679e666070ff5a09c37e38d55de6a4e260e53dd1dfc066689.png

Figure 5.11 A#

rx = range(0, 1200, 101)
ry = range(0, 6, 101)

∂A1 = (x, y) -> prob.f([x, y], prob.p, nothing)[1]
∂B1 = (x, y) -> prob.f([x, y], prob.p, nothing)[2]

fig = plot(title="Figure 5.11A")
contour!(fig, rx, ry, ∂A1, levels=[0], cbar=false, line=(:black))
plot!(fig, Float64[], Float64[], line=(:black), label="AdoMet nullcline")
contour!(fig, rx, ry, ∂B1, levels=[0], cbar=false, line=(:black, :dash))
plot!(fig, Float64[], Float64[], line=(:black, :dash), label="AdoHcy nullcline")

tend = 15.0
u0s = [
    [AdoMet => 500.0, AdoHcy => 1.5],
    [AdoMet => 900.0, AdoHcy => 2.5],
    [AdoMet => 1100.0, AdoHcy => 3.5],
    [AdoMet => 400.0, AdoHcy => 5.0],
    [AdoMet => 800.0, AdoHcy => 5.5],
    [AdoMet => 1000.0, AdoHcy => 5.75],
    [AdoMet => 300.0, AdoHcy => 1],
    [AdoMet => 700.0, AdoHcy => 2],
    [AdoMet => 200.0, AdoHcy => 5],
    [AdoMet => 600.0, AdoHcy => 5.25]
]

sols = map(u0s) do u0
    sol = solve(remake(prob, u0=u0, tspan=tend))
end

for sol in sols
    plot!(fig, sol, idxs=(AdoMet, AdoHcy), label=false, alpha=0.5)
end

plot!(fig, xlims=(0, 1200), ylims=(0, 6), xlabel="AdoMet (μM)", ylabel="AdoHcy (μM)", legend=:bottomright)
../_images/0b452816ae8ef82920b2633689b01b5415f7c3ca4b40ce0f05d16e2b5d2ae792.png

Figure 5.11 B#

Increase methionine level

prob2 = remake(prob, p=[Met => 51])

rx = range(0, 1200, 101)
ry = range(0, 6, 101)

∂A2 = (x, y) -> prob2.f([x, y], prob2.p, nothing)[1]
∂B2 = (x, y) -> prob2.f([x, y], prob2.p, nothing)[2]

fig = plot(title="Figure 5.11B")
contour!(fig, rx, ry, ∂A2, levels=[0], cbar=false, line=(:black))
plot!(fig, Float64[], Float64[], line=(:black), label="AdoMet nullcline")
contour!(fig, rx, ry, ∂B2, levels=[0], cbar=false, line=(:black, :dash))
plot!(fig, Float64[], Float64[], line=(:black, :dash), label="AdoHcy nullcline")

tend = 15.0
u0s =[
    [AdoMet => 420, AdoHcy => 1.5],
    [AdoMet => 820, AdoHcy => 2.5],
    [AdoMet => 1120, AdoHcy => 3.5],
    [AdoMet => 520, AdoHcy => 5.0],
    [AdoMet => 620, AdoHcy => 2],
    [AdoMet => 240, AdoHcy => 4.5],
    [AdoMet => 720, AdoHcy => 5.5]
]

sols = map(u0s) do u0
    sol = solve(remake(prob2, u0=u0, tspan=tend))
end

for sol in sols
    plot!(fig, sol, idxs=(AdoMet, AdoHcy), label=false, alpha=0.5)
end

plot!(fig, xlims=(0, 1200), ylims=(0, 6), xlabel="AdoMet (μM)", ylabel="AdoHcy (μM)", legend=:bottomright)
../_images/b9b920a9bd4fd7afb97fd7670bd0e579bb8428cd9306c1cd3c314a33ff379e29.png

This notebook was generated using Literate.jl.