Experiments vs simulations.
using ModelingToolkit
using OrdinaryDiffEq , SteadyStateDiffEq , DiffEqCallbacks
using Plots
using CSV
using DataFrames
using CaMKIIModel
using CaMKIIModel : second
Plots.default (lw= 1.5 )
[ Info: Precompiling GRIJuliaExt [84369c5d-ffb2-5a92-8288-3470980d96d0]
SYSTEM: caught exception of type :MethodError while trying to print a failed Task notice; giving up
[ Info: Precompiling IJuliaExt [2f4121a4-3b3a-5ce6-9c5e-1f2673ce168a]
SYSTEM: caught exception of type :MethodError while trying to print a failed Task notice; giving up
sys = build_neonatal_ecc_sys (simplify= true , reduce_iso= true , reduce_camk= true )
tend = 500 second
prob = ODEProblem (sys, [], tend)
stimstart = 100 second
stimend = 300 second
@unpack Istim = sys
alg = KenCarp47 ()
KenCarp47(; linsolve = nothing, nlsolve = NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Nothing}(1//100, 10, 1//5, 1//5, false, true, nothing), precs = DEFAULT_PRECS, smooth_est = true, extrapolant = linear, controller = PI, autodiff = ADTypes.AutoForwardDiff(),)
Pacing duration and CaMKII activity
Experiments
durationdf = CSV.read (joinpath (@__DIR__ , "data/CaMKAR-duration.csv" ), DataFrame)
ts = durationdf[!, "Time(sec)" ]
fifteen = durationdf[!, "1Hz 15sec (Mean)" ]
fifteen_error = durationdf[!, "1Hz 15sec (SD)" ] ./ sqrt .(durationdf[!, "1Hz 15sec (N)" ])
thirty = durationdf[!, "1Hz 30sec (Mean)" ] .+ 0.25
thirty_error = durationdf[!, "1Hz 30sec (SD)" ] ./ sqrt .(durationdf[!, "1Hz 30sec (N)" ])
sixty = durationdf[!, "1Hz 60sec (Mean)" ]
sixty_error = durationdf[!, "1Hz 60sec (SD)" ] ./ sqrt .(durationdf[!, "1Hz 60sec (N)" ])
ninety = durationdf[!, "1Hz 90sec (Mean)" ] .- 0.25
ninety_error = durationdf[!, "1Hz 90sec (SD)" ] ./ sqrt .(durationdf[!, "1Hz 90sec (N)" ])
## 30 sec timeseries +0.25 and 90 sec timeseries -0.25 for a consistent baseline before pacing.
plot (ts, fifteen, yerr= fifteen_error, lab= "15 sec" , color=: blue, markerstrokecolor=: blue)
plot! (ts, thirty, yerr= thirty_error, lab= "30 sec" , color=: red, markerstrokecolor=: red)
plot! (ts, sixty, yerr= sixty_error, lab= "60 sec" , color=: orange, markerstrokecolor=: orange)
plot! (ts, ninety, yerr= ninety_error, lab= "90 sec" , color=: green, markerstrokecolor=: green)
plot! (title= "Experiment" , xlabel= "Time (s)" , ylabel= "CaMKII activity (AU)" )
savefig ("pacing-duration-exp.pdf" )
"/home/runner/work/camkii-cardiomyocyte-model/camkii-cardiomyocyte-model/docs/pacing-duration-exp.pdf"
Simulation
stimstart = 30 second
callback15 = build_stim_callbacks (Istim, stimstart + 15 second; period= 1 second, starttime= stimstart)
sol15 = solve (prob, alg; callback= callback15)
callback30 = build_stim_callbacks (Istim, stimstart + 30 second; period= 1 second, starttime= stimstart)
sol30 = solve (prob, alg; callback= callback30)
callback60 = build_stim_callbacks (Istim, stimstart + 60 second; period= 1 second, starttime= stimstart)
sol60 = solve (prob, alg; callback= callback60)
callback90 = build_stim_callbacks (Istim, stimstart + 90 second; period= 1 second, starttime= stimstart)
sol90 = solve (prob, alg; callback= callback90)
idxs = (sys.t / 1000 , sys.CaMKAct * 100 )
plot (sol15, idxs= idxs, tspan= (0 second, 205 second), lab= "15 sec" , color=: blue)
plot! (sol30, idxs= idxs, tspan= (0 second, 205 second), lab= "30 sec" , color=: red)
plot! (sol60, idxs= idxs, tspan= (0 second, 205 second), lab= "60 sec" , color=: orange)
plot! (sol90, idxs= idxs, tspan= (0 second, 205 second), lab= "90 sec" , color=: green)
plot! (title= "Simulation" , xlabel= "Time (s)" , ylabel= "CaMKII activity (%)" )
savefig ("pacing-duration-sim.pdf" )
"/home/runner/work/camkii-cardiomyocyte-model/camkii-cardiomyocyte-model/docs/pacing-duration-sim.pdf"
Phosphorylated fraction
idxs = (sys.t / 1000 , (sys.CaMKP + sys.CaMKA + sys.CaMKA2) * 100 )
plot (sol15, idxs= idxs, tspan= (0 second, 205 second), lab= "15 sec" , color=: blue)
plot! (sol30, idxs= idxs, tspan= (0 second, 205 second), lab= "30 sec" , color=: red)
plot! (sol60, idxs= idxs, tspan= (0 second, 205 second), lab= "60 sec" , color=: orange)
plot! (sol90, idxs= idxs, tspan= (0 second, 205 second), lab= "90 sec" , color=: green)
plot! (title= "Simulation" , xlabel= "Time (s)" , ylabel= "Phosphorylated CaMKII (%)" )
savefig ("pacing-duration-phos.pdf" )
"/home/runner/work/camkii-cardiomyocyte-model/camkii-cardiomyocyte-model/docs/pacing-duration-phos.pdf"
Pacing frequency and CaMKII activity
Experiments
freqdf = CSV.read (joinpath (@__DIR__ , "data/CaMKAR-freq.csv" ), DataFrame)
ts = 0 : 5 : 205
onehz = freqdf[!, "1Hz (Mean)" ]
onehz_error = freqdf[!, "1Hz (SD)" ] ./ sqrt .(freqdf[!, "1Hz (N)" ])
twohz = freqdf[!, "2Hz (Mean)" ]
twohz_error = freqdf[!, "2Hz (SD)" ] ./ sqrt .(freqdf[!, "2Hz (N)" ])
plot (ts, onehz, yerr= onehz_error, lab= "1 Hz" , color=: blue, markerstrokecolor=: blue)
plot! (ts, twohz, yerr= twohz_error, lab= "2 Hz" , color=: red, markerstrokecolor=: red)
plot! (title= "Experiment" , xlabel= "Time (s)" , ylabel= "CaMKII activity (AU)" )
savefig ("pacing-frequency-exp.pdf" )
"/home/runner/work/camkii-cardiomyocyte-model/camkii-cardiomyocyte-model/docs/pacing-frequency-exp.pdf"
Simulations
tend = 205.0 second
prob = ODEProblem (sys, [], tend)
stimstart = 30.0 second
stimend = 120.0 second
callback = build_stim_callbacks (Istim, stimend; period= 1 second, starttime= stimstart)
sol1 = solve (prob, alg; callback)
callback2 = build_stim_callbacks (Istim, stimend; period= 0.5 second, starttime= stimstart)
sol2 = solve (prob, alg; callback= callback2)
idxs = (sys.t / 1000 , sys.CaMKAct * 100 )
plot (sol1, idxs= idxs, lab= "1 Hz" , color=: blue)
plot! (sol2, idxs= idxs, lab= "2 Hz" , color=: red)
plot! (title= "Simulation" , xlabel= "Time (s)" , ylabel= "CaMKII activity (%)" )
savefig ("pacing-frequency-sim.pdf" )
"/home/runner/work/camkii-cardiomyocyte-model/camkii-cardiomyocyte-model/docs/pacing-frequency-sim.pdf"
idxs = (sys.t / 1000 , (sys.CaMKP + sys.CaMKA + sys.CaMKA2) * 100 )
plot (sol1, idxs= idxs, lab= "1 Hz" , color=: blue)
plot! (sol2, idxs= idxs, lab= "2 Hz" , color=: red)
plot! (title= "Simulation" , xlabel= "Time (s)" , ylabel= "Phosphorylated CaMKII (%)" )
savefig ("pacing-frequency-phos.pdf" )
"/home/runner/work/camkii-cardiomyocyte-model/camkii-cardiomyocyte-model/docs/pacing-frequency-phos.pdf"
Back to top