Caffeine Effects#
Caffeine increase RyR opening sensitivity to luminal and subspace calcium In this model, we decrease the mid saturation sub-SR calcium concentration for the opening rate
using ModelingToolkit
using OrdinaryDiffEq, SteadyStateDiffEq, DiffEqCallbacks
using Plots
using CSV
using DataFrames
using Dates
using CaMKIIModel
using CaMKIIModel: second
Plots.default(lw=1.5)
sys = build_neonatal_ecc_sys(simplify=true, reduce_iso=true, reduce_camk=true)
tend = 500second
prob = ODEProblem(sys, [], tend)
stimstart = 100second
stimend = 300second
alg = KenCarp47()
function add_coffee_affect!(integrator)
integrator.ps[sys.RyRsensitivity] = 10
end
@unpack Istim = sys
callback = build_stim_callbacks(Istim, stimend; period=1second, starttime=stimstart)
SciMLBase.CallbackSet{Tuple{}, Tuple{SciMLBase.DiscreteCallback{DiffEqCallbacks.PresetTimeFunction{StepRange{Int64, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#15#17"{Float64, Float64, Symbolics.Num}}, CaMKIIModel.var"#15#17"{Float64, Float64, Symbolics.Num}, DiffEqCallbacks.PresetTimeFunction{StepRange{Int64, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#15#17"{Float64, Float64, Symbolics.Num}}, typeof(SciMLBase.FINALIZE_DEFAULT), Nothing, Tuple{}}, SciMLBase.DiscreteCallback{DiffEqCallbacks.PresetTimeFunction{StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#16#18"{Float64, Float64, Symbolics.Num}}, CaMKIIModel.var"#16#18"{Float64, Float64, Symbolics.Num}, DiffEqCallbacks.PresetTimeFunction{StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#16#18"{Float64, Float64, Symbolics.Num}}, typeof(SciMLBase.FINALIZE_DEFAULT), Nothing, Tuple{}}}}((), (SciMLBase.DiscreteCallback{DiffEqCallbacks.PresetTimeFunction{StepRange{Int64, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#15#17"{Float64, Float64, Symbolics.Num}}, CaMKIIModel.var"#15#17"{Float64, Float64, Symbolics.Num}, DiffEqCallbacks.PresetTimeFunction{StepRange{Int64, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#15#17"{Float64, Float64, Symbolics.Num}}, typeof(SciMLBase.FINALIZE_DEFAULT), Nothing, Tuple{}}(DiffEqCallbacks.PresetTimeFunction{StepRange{Int64, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#15#17"{Float64, Float64, Symbolics.Num}}(100000:1000:300000, true, SciMLBase.INITIALIZE_DEFAULT, CaMKIIModel.var"#15#17"{Float64, Float64, Symbolics.Num}(-80.0, 0.5, Istim)), CaMKIIModel.var"#15#17"{Float64, Float64, Symbolics.Num}(-80.0, 0.5, Istim), DiffEqCallbacks.PresetTimeFunction{StepRange{Int64, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#15#17"{Float64, Float64, Symbolics.Num}}(100000:1000:300000, true, SciMLBase.INITIALIZE_DEFAULT, CaMKIIModel.var"#15#17"{Float64, Float64, Symbolics.Num}(-80.0, 0.5, Istim)), SciMLBase.FINALIZE_DEFAULT, Bool[1, 1], nothing, ()), SciMLBase.DiscreteCallback{DiffEqCallbacks.PresetTimeFunction{StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#16#18"{Float64, Float64, Symbolics.Num}}, CaMKIIModel.var"#16#18"{Float64, Float64, Symbolics.Num}, DiffEqCallbacks.PresetTimeFunction{StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#16#18"{Float64, Float64, Symbolics.Num}}, typeof(SciMLBase.FINALIZE_DEFAULT), Nothing, Tuple{}}(DiffEqCallbacks.PresetTimeFunction{StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#16#18"{Float64, Float64, Symbolics.Num}}(100000.5:1000.0:300000.5, true, SciMLBase.INITIALIZE_DEFAULT, CaMKIIModel.var"#16#18"{Float64, Float64, Symbolics.Num}(0.0, 0.5, Istim)), CaMKIIModel.var"#16#18"{Float64, Float64, Symbolics.Num}(0.0, 0.5, Istim), DiffEqCallbacks.PresetTimeFunction{StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#16#18"{Float64, Float64, Symbolics.Num}}(100000.5:1000.0:300000.5, true, SciMLBase.INITIALIZE_DEFAULT, CaMKIIModel.var"#16#18"{Float64, Float64, Symbolics.Num}(0.0, 0.5, Istim)), SciMLBase.FINALIZE_DEFAULT, Bool[1, 1], nothing, ())))
Add caffeine at t = 200 econd
callback_caf = CallbackSet(build_stim_callbacks(Istim, stimend; period=1second, starttime=stimstart), PresetTimeCallback(200.0second, add_coffee_affect!))
SciMLBase.CallbackSet{Tuple{}, Tuple{SciMLBase.DiscreteCallback{DiffEqCallbacks.PresetTimeFunction{StepRange{Int64, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#15#17"{Float64, Float64, Symbolics.Num}}, CaMKIIModel.var"#15#17"{Float64, Float64, Symbolics.Num}, DiffEqCallbacks.PresetTimeFunction{StepRange{Int64, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#15#17"{Float64, Float64, Symbolics.Num}}, typeof(SciMLBase.FINALIZE_DEFAULT), Nothing, Tuple{}}, SciMLBase.DiscreteCallback{DiffEqCallbacks.PresetTimeFunction{StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#16#18"{Float64, Float64, Symbolics.Num}}, CaMKIIModel.var"#16#18"{Float64, Float64, Symbolics.Num}, DiffEqCallbacks.PresetTimeFunction{StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#16#18"{Float64, Float64, Symbolics.Num}}, typeof(SciMLBase.FINALIZE_DEFAULT), Nothing, Tuple{}}, SciMLBase.DiscreteCallback{DiffEqCallbacks.PresetTimeFunction{Vector{Float64}, typeof(SciMLBase.INITIALIZE_DEFAULT), typeof(Main.var"##239".add_coffee_affect!)}, typeof(Main.var"##239".add_coffee_affect!), DiffEqCallbacks.PresetTimeFunction{Vector{Float64}, typeof(SciMLBase.INITIALIZE_DEFAULT), typeof(Main.var"##239".add_coffee_affect!)}, typeof(SciMLBase.FINALIZE_DEFAULT), Nothing, Tuple{}}}}((), (SciMLBase.DiscreteCallback{DiffEqCallbacks.PresetTimeFunction{StepRange{Int64, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#15#17"{Float64, Float64, Symbolics.Num}}, CaMKIIModel.var"#15#17"{Float64, Float64, Symbolics.Num}, DiffEqCallbacks.PresetTimeFunction{StepRange{Int64, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#15#17"{Float64, Float64, Symbolics.Num}}, typeof(SciMLBase.FINALIZE_DEFAULT), Nothing, Tuple{}}(DiffEqCallbacks.PresetTimeFunction{StepRange{Int64, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#15#17"{Float64, Float64, Symbolics.Num}}(100000:1000:300000, true, SciMLBase.INITIALIZE_DEFAULT, CaMKIIModel.var"#15#17"{Float64, Float64, Symbolics.Num}(-80.0, 0.5, Istim)), CaMKIIModel.var"#15#17"{Float64, Float64, Symbolics.Num}(-80.0, 0.5, Istim), DiffEqCallbacks.PresetTimeFunction{StepRange{Int64, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#15#17"{Float64, Float64, Symbolics.Num}}(100000:1000:300000, true, SciMLBase.INITIALIZE_DEFAULT, CaMKIIModel.var"#15#17"{Float64, Float64, Symbolics.Num}(-80.0, 0.5, Istim)), SciMLBase.FINALIZE_DEFAULT, Bool[1, 1], nothing, ()), SciMLBase.DiscreteCallback{DiffEqCallbacks.PresetTimeFunction{StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#16#18"{Float64, Float64, Symbolics.Num}}, CaMKIIModel.var"#16#18"{Float64, Float64, Symbolics.Num}, DiffEqCallbacks.PresetTimeFunction{StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#16#18"{Float64, Float64, Symbolics.Num}}, typeof(SciMLBase.FINALIZE_DEFAULT), Nothing, Tuple{}}(DiffEqCallbacks.PresetTimeFunction{StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#16#18"{Float64, Float64, Symbolics.Num}}(100000.5:1000.0:300000.5, true, SciMLBase.INITIALIZE_DEFAULT, CaMKIIModel.var"#16#18"{Float64, Float64, Symbolics.Num}(0.0, 0.5, Istim)), CaMKIIModel.var"#16#18"{Float64, Float64, Symbolics.Num}(0.0, 0.5, Istim), DiffEqCallbacks.PresetTimeFunction{StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#16#18"{Float64, Float64, Symbolics.Num}}(100000.5:1000.0:300000.5, true, SciMLBase.INITIALIZE_DEFAULT, CaMKIIModel.var"#16#18"{Float64, Float64, Symbolics.Num}(0.0, 0.5, Istim)), SciMLBase.FINALIZE_DEFAULT, Bool[1, 1], nothing, ()), SciMLBase.DiscreteCallback{DiffEqCallbacks.PresetTimeFunction{Vector{Float64}, typeof(SciMLBase.INITIALIZE_DEFAULT), typeof(Main.var"##239".add_coffee_affect!)}, typeof(Main.var"##239".add_coffee_affect!), DiffEqCallbacks.PresetTimeFunction{Vector{Float64}, typeof(SciMLBase.INITIALIZE_DEFAULT), typeof(Main.var"##239".add_coffee_affect!)}, typeof(SciMLBase.FINALIZE_DEFAULT), Nothing, Tuple{}}(DiffEqCallbacks.PresetTimeFunction{Vector{Float64}, typeof(SciMLBase.INITIALIZE_DEFAULT), typeof(Main.var"##239".add_coffee_affect!)}([200000.0], true, SciMLBase.INITIALIZE_DEFAULT, Main.var"##239".add_coffee_affect!), Main.var"##239".add_coffee_affect!, DiffEqCallbacks.PresetTimeFunction{Vector{Float64}, typeof(SciMLBase.INITIALIZE_DEFAULT), typeof(Main.var"##239".add_coffee_affect!)}([200000.0], true, SciMLBase.INITIALIZE_DEFAULT, Main.var"##239".add_coffee_affect!), SciMLBase.FINALIZE_DEFAULT, Bool[1, 1], nothing, ())))
@time sol = solve(prob, alg; callback)
@time sol_caf = solve(prob, alg; callback=callback_caf)
2.312183 seconds (126.91 k allocations: 444.296 MiB, 24.33% gc time)
4.356511 seconds (4.63 M allocations: 706.510 MiB, 2.45% gc time, 58.51% compilation time)
retcode: Success
Interpolation: 3rd order Hermite
t: 8769-element Vector{Float64}:
0.0
0.019333123284849308
0.09098129546757994
0.20735582943983855
0.45611910276862533
1.0472562928406122
2.0342667657223696
3.451776641148454
6.733792423912806
12.450117081023194
⋮
410733.5618623793
421223.7787354648
432671.0133968798
444118.24805829476
455565.48271970975
467012.71738112473
481612.9643611904
498981.03509962815
500000.0
u: 8769-element Vector{Vector{Float64}}:
[150952.75035000002, 13838.37602, -68.79268, 0.12113, 0.12113, 0.12113, 0.12113, 0.12113, 0.12113, 0.12113 … 0.26081, 0.00977, 0.00188, 0.09243, 0.22156, 0.966, 0.00702, 830.0, 830.0, 0.0026]
[150952.7504077194, 13838.375711519551, -68.79732946186226, 0.1211319185255175, 0.1211301421535992, 0.12113000811850358, 0.12113000037367234, 0.12113000001389383, 0.12113000000038378, 0.12113000000000405 … 0.2608055799112056, 0.009769882842069916, 0.001879826176081169, 0.09242766669618695, 0.2215639938807744, 0.9660018276402699, 0.007020208561323646, 829.9999654017583, 829.9994975880693, 0.0025985659590295374]
[150952.75062244057, 13838.374513299192, -68.81607005265552, 0.12115248970210647, 0.12113624253259858, 0.12113143375871602, 0.12113027926811751, 0.12113004704056851, 0.12113000693481112, 0.12113000089551408 … 0.26078941009382306, 0.009769459049732313, 0.0018789042446514422, 0.09241901973901424, 0.2215787945110049, 0.9660085993318799, 0.00702008986027517, 829.9998348635061, 829.9976422525165, 0.002593310524681686]
[150952.7509740238, 13838.372555328333, -68.84681913285226, 0.12118951551963696, 0.12115723910142134, 0.12114109135582982, 0.12113403405679991, 0.12113131833063846, 0.12113038966346883, 0.12113010483012127 … 0.2607638707001999, 0.009768805322556195, 0.0018766436937193197, 0.09240497563401104, 0.22160283236040595, 0.9660195931792828, 0.007017234889558555, 829.9996133960318, 829.9946506157202, 0.0025849478335103777]
[150952.7517373371, 13838.368384399068, -68.91207316777846, 0.12125418995384041, 0.12120713813483534, 0.12117519662647316, 0.12115494411090462, 0.12114295934422187, 0.12113633873395535, 0.12113292110288301 … 0.2607122383588733, 0.00976754294689657, 0.0018699196262940568, 0.0923749578279845, 0.2216542075240971, 0.9660430731013478, 0.0070030143052343926, 829.9990964774663, 829.9883445519497, 0.00256770780104998]
[150952.75361533565, 13838.358559292059, -69.06429960994137, 0.12136450208851983, 0.1213063255235844, 0.12125925929399752, 0.12122229800810434, 0.12119414515426227, 0.1211733598588045, 0.12115849269665879 … 0.26060507831375035, 0.009765228548607825, 0.001850533769446942, 0.09230364339951613, 0.22177624785138977, 0.9660987611411453, 0.006946470397388757, 829.9976227528975, 829.9738229154025, 0.0025298083713907005]
[150952.75694915713, 13838.34240329337, -69.31024285744343, 0.1214919651325424, 0.12142927821043338, 0.12137426379919636, 0.12132672249013034, 0.12128628091507473, 0.12125242557826561, 0.12122454121844703 … 0.26047114911179464, 0.009763403076884485, 0.0018178174419014683, 0.09218462776986637, 0.2219798989175973, 0.9661914345949096, 0.0068337541728754475, 829.9944193668179, 829.9509077855928, 0.0024748079782158957]
[150952.76215620188, 13838.319723120678, -69.64637448767432, 0.12162015426876954, 0.12155743299711902, 0.12149988983034497, 0.1214475947100359, 0.12140052118634262, 0.12135855488207907, 0.12132150441596071 … 0.2603648729749554, 0.009765046552800477, 0.001773815690753224, 0.09201383579531924, 0.22227216398019892, 0.9663239343003682, 0.006675512062656749, 829.9883533251192, 829.9205247545176, 0.0024106893964811324]
[150952.77598869594, 13838.2694938995, -70.35063788657428, 0.12180447948880577, 0.12174768443532356, 0.12169340184085964, 0.12164180995533558, 0.12159304920072024, 0.12154722283384184, 0.12150439833798556 … 0.26041507667541997, 0.009786689200123853, 0.0016855899094922325, 0.09161908329520764, 0.22294828828976576, 0.9666286957812559, 0.006355039713677859, 829.9689941817725, 829.8589858006806, 0.002310655727734339]
[150952.80529264064, 13838.18882346682, -71.35304509818071, 0.12196378364408163, 0.12191937753328325, 0.12187579038290339, 0.12183318573340735, 0.12179171693004404, 0.12175152667167365, 0.12171274673876366 … 0.26104417804603025, 0.009873892913308327, 0.0015688568862426045, 0.09093422465365385, 0.22412560303273427, 0.9671554512230358, 0.005926150085676071, 829.923524981244, 829.7704141396295, 0.002228995040224517]
⋮
[151663.27769689527, 13215.513707614977, -69.70252844061322, 0.13198002872297873, 0.13198003369659003, 0.13198003457964635, 0.13198003129088554, 0.13198002374575196, 0.13198001185622854, 0.1319799955306582 … 0.0012491193046074232, 0.0016547150295928403, 0.002561357740604503, 0.001677661580946772, 0.9997066082809954, 0.9997047077869452, 0.0066048345850841595, 51.645918718831965, 50.35000355683728, 0.11382553618453263]
[151708.26295150942, 13170.53766553465, -69.61300454352889, 0.13145251795853566, 0.1314525213601432, 0.1314525208800499, 0.13145251644085387, 0.13145250796201288, 0.13145249535968373, 0.13145247854655262 … 0.0012665302487615687, 0.0016657566286461508, 0.002578445598218432, 0.0016993492783150294, 0.9997008230906133, 0.9996989532153318, 0.006645152470928976, 51.93681644224224, 50.650694840880554, 0.11229800421313912]
[151754.98289390284, 13123.826385624556, -69.51889338972768, 0.1309127848559794, 0.13091278727547712, 0.13091278604675594, 0.13091278109688267, 0.1309127723499544, 0.13091275972694708, 0.13091274314555465 … 0.0012851531482561272, 0.0016774440048661933, 0.0025965301347388955, 0.0017224387346534227, 0.9996946208608765, 0.9996927832407492, 0.006687799839584779, 52.23928877996558, 50.96315351147559, 0.110747732783798]
[151799.35267503094, 13079.464277155572, -69.42844321173756, 0.13040760291037187, 0.13040760425803738, 0.1304076021707582, 0.13040759657965617, 0.1304075874130412, 0.13040757459626803, 0.13040755805158372 … 0.0013032724156278714, 0.0016887522387758296, 0.0026140293618229656, 0.0017449216275823953, 0.9996885355395423, 0.9996867338789667, 0.006729044398397658, 52.52592703071625, 51.25911447878036, 0.10930787947469582]
[151841.49187169145, 13037.331839746745, -69.34154110325322, 0.1299346975576122, 0.12993469798750992, 0.1299346951812341, 0.12993468907370861, 0.12993467959719568, 0.12993466668115988, 0.12993465025212422 … 0.0013209161717959688, 0.001699687536546145, 0.0026309517890826094, 0.0017667932941289172, 0.9996825735692311, 0.999680809528814, 0.006768909008313067, 52.79764629892723, 51.53953755980907, 0.1079699828150799]
[151881.5138324263, 12997.316247749064, -69.25809823278014, 0.1294916450467245, 0.12949164427584933, 0.1294916404281681, 0.12949163344164238, 0.12949162325172212, 0.12949160979121713, 0.1294915929901613 … 0.0013380148940054298, 0.0017102514417849527, 0.0026473026363522537, 0.001788054003895111, 0.9996767365201336, 0.9996750147021922, 0.006807407521795386, 53.05424274434619, 51.804273203259584, 0.10672509390537063]
[151929.65697575032, 12949.179973426024, -69.15648646105984, 0.12896713823038625, 0.1289671365829355, 0.12896713208284424, 0.12896712467244634, 0.12896711429174684, 0.1289671008783034, 0.1289670843671 … 0.0013592126466206917, 0.0017232044321101923, 0.002667348637807253, 0.0018142738283496275, 0.9996694868459071, 0.9996678167162867, 0.006854582353973803, 53.36317254260231, 52.12280517337014, 0.1052626995511544]
[151982.96864890502, 12895.875193046884, -69.04237351489033, 0.12839688599694404, 0.12839688334354007, 0.12839687808426672, 0.12839687016624168, 0.1283968595344495, 0.1283968461316332, 0.12839682989817927 … 0.00138343721689547, 0.0017378671897066733, 0.0026900389718113394, 0.0018441620860377849, 0.9996611508042711, 0.9996595440738567, 0.006907947091545203, 53.70384041997998, 52.473881454982596, 0.10368621913609825]
[151985.96840840144, 12892.875789939704, -69.03589628114874, 0.12836519568650662, 0.12836519309208538, 0.12836518790620302, 0.12836518007626493, 0.12836516954755378, 0.1283651562631209, 0.12836514016367134 … 0.0013848269259465861, 0.0017387034665093972, 0.0026913330030161114, 0.0018458754694475248, 0.9996606715344514, 0.9996590674128528, 0.006910989250147859, 53.722974591760796, 52.493592824507274, 0.10359900307031657]
i = (sys.t / 1000, sys.vm)
plot(sol, idxs=i, title="Action potential", lab="Ctl", tspan=(198second, 205second))
plot!(sol_caf, idxs=i, lab="Caf", tspan=(198second, 205second), ylabel="Voltage (mV)", xlabel="Time (s)")
i = (sys.t / 1000, sys.Cai_sub_SR * 1000)
plot(sol, idxs=i, title="Calcium transient (During caffeine addition)", lab="Ctl", tspan=(198second, 205second))
plot!(sol_caf, idxs=i, tspan=(198second, 205second), lab="Caf", ylabel="Subspace calcium (nM)", xlabel="Time (s)")
i = (sys.t / 1000, sys.PO1RyR)
plot(sol, idxs=i, title="RyR open (During caffeine addition)", lab="Ctl", tspan=(198second, 205second))
plot!(sol_caf, idxs=i, tspan=(198second, 205second), lab="Caf", ylabel="Open probability", ylims=(0, 1), xlabel="Time (s)")
i = (sys.t / 1000, sys.Cai_sub_SR * 1000)
plot(sol, idxs=i, title="Calcium transient (After caffeine addition)", lab="Ctl", ylabel="Subspace calcium (nM)", tspan=(198second, 205second))
plot!(sol_caf, idxs=i, lab="Caf", xlabel="Time (s)", tspan=(198second, 205second))
i = (sys.t / 1000, sys.CaJSR)
plot(sol, idxs=i, title="SR Calcium (During caffeine addition)", lab="Ctl", ylabel="SR calcium (μM)", tspan=(198second, 205second))
plot!(sol_caf, idxs=i, tspan=(198second, 205second), lab="Caf", ylims=(0, 850), xlabel="Time (s)")
i = (sys.t / 1000, sys.Jrel)
plot(sol, idxs=sys.Jrel, title="Ca flux", lab="Ctl (Jrel)", tspan=(198second, 205second))
plot!(sol_caf, idxs=sys.Jrel, lab="Caf (Jrel)", tspan=(198second, 205second), ylabel="μM/ms", xlabel="Time (s)")
i = (sys.t / 1000, sys.CaMKAct * 100)
plot(sol, idxs=i, title="Active CaMKII", lab="Ctl")
plot!(sol_caf, idxs=i, lab="Caf", ylabel="CaMKII activity (%)", xlabel="Time (s)")
Simulation vs experimental data#
Add caffeine in the beginning of the simulation Add caffeine and nifedipine in the beginning of the simulation (nifedipine blocks 90% of L-type calcium channel)
sys = build_neonatal_ecc_sys(simplify=true, reduce_iso=true, reduce_camk=true)
tend = 205second
stimstart = 30second
stimend = 120second
alg = KenCarp47()
@unpack Istim = sys
callback = build_stim_callbacks(Istim, stimend; period=1second, starttime=stimstart)
prob = ODEProblem(sys, [], tend)
prob_caf = ODEProblem(sys, [sys.RyRsensitivity => 10], tend)
gCaL = prob.ps[sys.GCaL]
prob_nif_caf = ODEProblem(sys, [sys.RyRsensitivity => 10, sys.GCaL => 0.1 * gCaL], tend)
ssalg = DynamicSS(alg)
sprob_caf = SteadyStateProblem(prob_caf)
sssol = solve(sprob_caf, ssalg; abstol=1e-10, reltol=1e-10)
@time sol = solve(prob, alg; callback)
@time sol_caf = solve(remake(prob_caf, u0=sssol.u), alg; callback)
@time sol_nif_caf = solve(remake(prob_nif_caf, u0=sssol.u), alg; callback)
1.057926 seconds (61.80 k allocations: 208.078 MiB, 5.19% gc time)
0.927409 seconds (243.79 k allocations: 223.002 MiB, 4.60% gc time, 9.56% compilation time)
0.466060 seconds (45.93 k allocations: 122.814 MiB, 2.24% gc time)
retcode: Success
Interpolation: 3rd order Hermite
t: 2779-element Vector{Float64}:
0.0
0.18425164710745895
0.9881968891786936
4.071270110657321
11.468897716484786
25.163136004062377
49.58622336610172
83.36383106142347
137.50361695337466
206.18316321697307
⋮
144494.24258331547
149073.96837679698
154337.92267623727
162353.84439230544
168891.15388059878
175428.46336889212
184109.21706764342
195066.38406434815
205000.0
u: 2779-element Vector{Vector{Float64}}:
[152640.00597251163, 12238.884398036022, -67.47380947158396, 0.1223877320296651, 0.12238773198494962, 0.12238773192995428, 0.12238773186446368, 0.12238773178825384, 0.1223877317010915, 0.1223877316027339 … 0.001763860922444772, 0.0019523470685825558, 0.0030219031924643824, 0.002307169668687784, 0.9995225549031342, 0.9995225408000866, 0.007684695828104704, 57.61909255769596, 56.4967649846878, 0.08793781783891962]
[152640.00597535807, 12238.884395268526, -67.47619008701882, 0.12238180528243248, 0.12238518175664855, 0.12238676500423265, 0.1223874066735665, 0.12238763367430464, 0.12238770487895019, 0.12238772492566194 … 0.0017638612935034312, 0.0019523468981434465, 0.0030217676497593087, 0.0023071695752755277, 0.999522554908391, 0.9995225408640744, 0.007684500736796288, 57.61909257231998, 56.49676499967806, 0.087937817787133]
[152640.00599003056, 12238.884386281603, -67.48644802814846, 0.12236184154871016, 0.12236850685668701, 0.12237382725967631, 0.12237795052075698, 0.12238104564611738, 0.12238329331472309, 0.12238487167470105 … 0.0017638712393607664, 0.0019523291817324336, 0.0030198900671645663, 0.0023071669459609197, 0.9995225550709278, 0.999522542642948, 0.007681054053569664, 57.61909263612881, 56.496765065084915, 0.08793781756117303]
[152640.00608046405, 12238.884419113803, -67.52386288832177, 0.12231908456557655, 0.12232756416817914, 0.12233530309954924, 0.122342320678403, 0.12234864150245076, 0.12235429564104178, 0.12235931796996367 … 0.0017640168890572158, 0.0019519083256054573, 0.0030114910560057246, 0.002307124641653274, 0.999522557718822, 0.9995225711239405, 0.007661820429718684, 57.61909288086994, 56.49676531589329, 0.08793781670206566]
[152640.0065009527, 12238.884939787456, -67.60277182354385, 0.12224941172750843, 0.12225936357158378, 0.12226882382974452, 0.1222777984767955, 0.12228629463359973, 0.12229432062061814, 0.12230188594827711 … 0.0017648075074343122, 0.0019490568077314128, 0.002993778654533245, 0.0023068353319773585, 0.9995225758797562, 0.9995227642741393, 0.007620326085780995, 57.619091354058796, 56.4967661532288, 0.08793687990202351]
[152640.00790379502, 12238.887290445178, -67.71498197616297, 0.1221437439913276, 0.12215522982265414, 0.12216634762181161, 0.12217709971510807, 0.12218748881361839, 0.12219751800974833, 0.12220719077223507 … 0.0017666954027570647, 0.0019399597487554732, 0.0029687235698457395, 0.0023057391745070956, 0.999522644885227, 0.9995234852395498, 0.007561678306079314, 57.618993985290516, 56.496794363132196, 0.0879019981296342]
[152640.01178135257, 12238.894440545622, -67.8369037625009, 0.12197793956345102, 0.12199071110568502, 0.12200319986437422, 0.12201540526379749, 0.12202732682165468, 0.12203896414088505, 0.1220503169015488 … 0.0017687751860565176, 0.001921725091881603, 0.002941666253734278, 0.002302610561634407, 0.9995228434088902, 0.9995254921178498, 0.007498438426106791, 57.61823774750182, 56.497210288906714, 0.08768558548954591]
[152640.0186926198, 12238.907220159273, -67.91463286943976, 0.12176827338873729, 0.12178143269172914, 0.1217943514357399, 0.12180702739414903, 0.1218194583061066, 0.12183164187024356, 0.12184357573805953 … 0.001768404101456165, 0.00190358943617685, 0.0029245038627222237, 0.002297090103416995, 0.9995232001220485, 0.9995289057981203, 0.007458410918804918, 57.61668670322952, 56.49895351747599, 0.08722180308188877]
[152640.03118985487, 12238.9288880942, -67.95952916540769, 0.12145293734861017, 0.12146567642450293, 0.12147819381228052, 0.12149048662253202, 0.12150255188158227, 0.12151438652620096, 0.12152598739798387 … 0.0017641699748748648, 0.0018905746403119783, 0.002914650630393208, 0.002287465573411036, 0.999523844881324, 0.9995345267780834, 0.007435464253737163, 57.61560848422022, 56.504579248621894, 0.08638452827432895]
[152640.0478671261, 12238.954325043864, -67.9853424525158, 0.12107374819244374, 0.12108564075964685, 0.12109731854593242, 0.12110877854300539, 0.12112001764804026, 0.1211310326584631, 0.12114182026642548 … 0.001757274329162802, 0.0018848756874208943, 0.002909049471800105, 0.0022753532416452437, 0.9995247034605004, 0.99954104173997, 0.00742238835682836, 57.618682302715484, 56.516321927087745, 0.08533676591419492]
⋮
[152693.14474336142, 12185.604804871873, -68.08143639658921, 0.11569707281755083, 0.11569706774933985, 0.11569706271000565, 0.1156970576995915, 0.11569705271812282, 0.11569704776560655, 0.11569704284203007 … 0.0016062716976563785, 0.0018663671879082667, 0.0028888155050396844, 0.0021163435852003896, 0.9989949025845385, 0.9995812285446606, 0.007374006907542238, 62.65205075886283, 61.64562569373483, 0.07224666605613841]
[152692.86517570625, 12185.88387594838, -68.08207539960685, 0.11570114777851746, 0.1157011468584984, 0.11570114598291263, 0.1157011451523014, 0.11570114436722986, 0.11570114362828818, 0.11570114293609263 … 0.0016060550012975906, 0.0018662774527137102, 0.002888681052916776, 0.0021161457120668493, 0.9994077155006482, 0.9995809629439585, 0.007373685901257681, 62.65212711436838, 61.64561482906139, 0.0722573004900554]
[152692.55055695746, 12186.198443240732, -68.08277763820563, 0.11570471562786147, 0.1157047160099676, 0.1157047164393298, 0.11570471691678129, 0.11570471744319846, 0.11570471801950295, 0.11570471864666354 … 0.0016059195794429087, 0.0018661810013553303, 0.0028885292153207087, 0.00211594029525763, 0.9995385156315031, 0.9995812572371781, 0.007373345300829444, 62.64987053634589, 61.64329341161036, 0.07226519068857497]
[152692.0856466981, 12186.663461353055, -68.08382437101369, 0.11570958979635589, 0.11570959121576677, 0.11570959271442913, 0.11570959429395351, 0.1157095959560252, 0.11570959770240766, 0.11570959953494658 … 0.001605600767440278, 0.001866034577419952, 0.00288831043415991, 0.002115619789610662, 0.9995759971442738, 0.9995814285136717, 0.00737278877255268, 62.64517082211088, 61.63850209122965, 0.07227652664696282]
[152691.71832525483, 12187.030637775086, -68.08460113176247, 0.11571386714772544, 0.1157138695896729, 0.11571387206298121, 0.11571387456876153, 0.11571387710814934, 0.1157138796823058, 0.11571388229241919 … 0.00160555311491179, 0.001865931782433003, 0.0028881383987116632, 0.0021154094764972934, 0.9995806885708898, 0.9995818462849286, 0.007372454568432376, 62.64272580499838, 61.63598875980231, 0.07228562651672522]
[152691.36139451567, 12187.38768924761, -68.08546483520222, 0.11571640541697842, 0.11571640549074959, 0.1157164056301319, 0.11571640583643596, 0.11571640611103765, 0.11571640645538137, 0.11571640687098346 … 0.0016052808623838498, 0.0018658102232456523, 0.002887954275901275, 0.0021151326382049104, 0.9995814140053456, 0.9995815758046795, 0.007371946236008166, 62.64058584187258, 61.63380776747852, 0.07229100844746461]
[152690.90287891554, 12187.846345096434, -68.0864818159656, 0.11572117656651983, 0.11572117702559244, 0.11572117753783788, 0.11572117810442396, 0.11572117872656576, 0.11572117940552788, 0.11572118014262728 … 0.0016049956073137218, 0.001865668323590997, 0.0028877359847134946, 0.0021148196326325696, 0.999581496062965, 0.9995815441863072, 0.0073714998854752, 62.636430631475335, 61.62957246743992, 0.0723014926432383]
[152690.34839362281, 12188.400963240252, -68.08773034014246, 0.11572668897659169, 0.11572668937886764, 0.1157266898317868, 0.11572669033638855, 0.11572669089375745, 0.11572669150502547, 0.11572669217137439 … 0.0016046539059529532, 0.0018654946468077502, 0.002887468536225632, 0.002114438482349215, 0.9995814812848297, 0.9995814221077177, 0.007370876877745636, 62.63178293080287, 61.62483203457065, 0.07231353248143643]
[152689.86902099647, 12188.88044505848, -68.08880748891822, 0.11573142893343108, 0.11573142919724051, 0.11573142950808783, 0.11573142986696619, 0.1157314302749095, 0.11573143073299469, 0.11573143124234382 … 0.0016044190074023645, 0.0018653466897897142, 0.0028872383706026066, 0.0021141179646444828, 0.9995816832588605, 0.9995818132300542, 0.007370316093016996, 62.627760721406155, 61.62073030697992, 0.0723239638316063]
i = (sys.t / 1000, sys.vm)
tspan = (100second, 102second)
plot(sol, idxs=i, title="Action potential", lab="Ctl"; tspan)
plot!(sol_caf, idxs=i, lab="Caf"; tspan)
plot!(sol_nif_caf, idxs=i, lab="Caf + Nif", tspan=tspan, ylabel="Voltage (mV)", xlabel="Time (s)")
savefig("caf-ap.pdf")
savefig("caf-ap.png")
"/home/runner/work/camkii-cardiomyocyte-model/camkii-cardiomyocyte-model/docs/caf-ap.png"
i = (sys.t / 1000, sys.Cai_sub_SR * 1000)
tspan = (100second, 102second)
plot(sol, idxs=i, title="Calcium transient", lab="Ctl"; tspan)
plot!(sol_caf, idxs=i, lab="Caf"; tspan)
plot!(sol_nif_caf, idxs=i, lab="Caf + Nif", ylabel="Subspace calcium (nM)", xlabel="Time (s)"; tspan)
savefig("caf-cat.pdf")
savefig("caf-cat.png")
"/home/runner/work/camkii-cardiomyocyte-model/camkii-cardiomyocyte-model/docs/caf-cat.png"
i = (sys.t / 1000, sys.CaJSR)
tspan = (100second, 102second)
plot(sol, idxs=i, title="SR Calcium", lab="Ctl", ylabel="SR calcium (μM)"; tspan)
plot!(sol_caf, idxs=i, lab="Caf"; tspan)
plot!(sol_nif_caf, idxs=i, lab="Caf + Nif", ylims=(0, 850), xlabel="Time (s)"; tspan)
i = (sys.t / 1000, sys.CaMKAct * 100)
plot(sol, idxs=i, title="Simulation", lab="Ctl")
plot!(sol_caf, idxs=i, lab="Caf")
plot!(sol_nif_caf, idxs=i, lab="Caf + Nif", ylabel="CaMKII active fraction (%)", xlabel="Time (s)")
savefig("caf-camkact.pdf")
savefig("caf-camkact.png")
"/home/runner/work/camkii-cardiomyocyte-model/camkii-cardiomyocyte-model/docs/caf-camkact.png"
experiments
chemicaldf = CSV.read(joinpath(@__DIR__, "data/CaMKAR-chemical.csv"), DataFrame)
ts = Dates.value.(chemicaldf[!, "Time"]) ./ 10^9
ctl = chemicaldf[!, "Ctrl Mean"]
ctl_error = chemicaldf[!, "Ctrl SD"] ./ sqrt.(chemicaldf[!, "Ctrl N"])
caf = chemicaldf[!, "caffeine 20mM Mean"]
caf_error = chemicaldf[!, "caffeine 20mM SD"] ./ sqrt.(chemicaldf[!, "caffeine 20mM N"])
plot(ts, ctl, yerr=ctl_error, lab="Control", color=:blue, markerstrokecolor=:blue)
plot!(ts, caf, yerr=caf_error, lab="Caffeine 20mM", color=:red, markerstrokecolor=:red)
plot!(xlabel="Time (s)", ylabel="CaMKII activity (A.U.)", title= "Experiment")
savefig("caf-exp.pdf")
"/home/runner/work/camkii-cardiomyocyte-model/camkii-cardiomyocyte-model/docs/caf-exp.pdf"
This notebook was generated using Literate.jl.