Caffeine Effects

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"#13#15"{Float64, Int64, Symbolics.Num}}, CaMKIIModel.var"#13#15"{Float64, Int64, Symbolics.Num}, DiffEqCallbacks.PresetTimeFunction{StepRange{Int64, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#13#15"{Float64, Int64, Symbolics.Num}}, typeof(SciMLBase.FINALIZE_DEFAULT), Nothing}, SciMLBase.DiscreteCallback{DiffEqCallbacks.PresetTimeFunction{StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#14#16"{Float64, Int64, Symbolics.Num}}, CaMKIIModel.var"#14#16"{Float64, Int64, Symbolics.Num}, DiffEqCallbacks.PresetTimeFunction{StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#14#16"{Float64, Int64, Symbolics.Num}}, typeof(SciMLBase.FINALIZE_DEFAULT), Nothing}}}((), (SciMLBase.DiscreteCallback{DiffEqCallbacks.PresetTimeFunction{StepRange{Int64, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#13#15"{Float64, Int64, Symbolics.Num}}, CaMKIIModel.var"#13#15"{Float64, Int64, Symbolics.Num}, DiffEqCallbacks.PresetTimeFunction{StepRange{Int64, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#13#15"{Float64, Int64, Symbolics.Num}}, typeof(SciMLBase.FINALIZE_DEFAULT), Nothing}(DiffEqCallbacks.PresetTimeFunction{StepRange{Int64, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#13#15"{Float64, Int64, Symbolics.Num}}(100000:1000:300000, true, SciMLBase.INITIALIZE_DEFAULT, CaMKIIModel.var"#13#15"{Float64, Int64, Symbolics.Num}(-80.0, 1, Istim)), CaMKIIModel.var"#13#15"{Float64, Int64, Symbolics.Num}(-80.0, 1, Istim), DiffEqCallbacks.PresetTimeFunction{StepRange{Int64, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#13#15"{Float64, Int64, Symbolics.Num}}(100000:1000:300000, true, SciMLBase.INITIALIZE_DEFAULT, CaMKIIModel.var"#13#15"{Float64, Int64, Symbolics.Num}(-80.0, 1, 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"#14#16"{Float64, Int64, Symbolics.Num}}, CaMKIIModel.var"#14#16"{Float64, Int64, Symbolics.Num}, DiffEqCallbacks.PresetTimeFunction{StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#14#16"{Float64, Int64, Symbolics.Num}}, typeof(SciMLBase.FINALIZE_DEFAULT), Nothing}(DiffEqCallbacks.PresetTimeFunction{StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#14#16"{Float64, Int64, Symbolics.Num}}(100000.5:1000.0:300000.5, true, SciMLBase.INITIALIZE_DEFAULT, CaMKIIModel.var"#14#16"{Float64, Int64, Symbolics.Num}(0.0, 1, Istim)), CaMKIIModel.var"#14#16"{Float64, Int64, Symbolics.Num}(0.0, 1, Istim), DiffEqCallbacks.PresetTimeFunction{StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#14#16"{Float64, Int64, Symbolics.Num}}(100000.5:1000.0:300000.5, true, SciMLBase.INITIALIZE_DEFAULT, CaMKIIModel.var"#14#16"{Float64, Int64, Symbolics.Num}(0.0, 1, 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"#13#15"{Float64, Int64, Symbolics.Num}}, CaMKIIModel.var"#13#15"{Float64, Int64, Symbolics.Num}, DiffEqCallbacks.PresetTimeFunction{StepRange{Int64, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#13#15"{Float64, Int64, Symbolics.Num}}, typeof(SciMLBase.FINALIZE_DEFAULT), Nothing}, SciMLBase.DiscreteCallback{DiffEqCallbacks.PresetTimeFunction{StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#14#16"{Float64, Int64, Symbolics.Num}}, CaMKIIModel.var"#14#16"{Float64, Int64, Symbolics.Num}, DiffEqCallbacks.PresetTimeFunction{StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#14#16"{Float64, Int64, Symbolics.Num}}, typeof(SciMLBase.FINALIZE_DEFAULT), Nothing}, SciMLBase.DiscreteCallback{DiffEqCallbacks.PresetTimeFunction{Vector{Float64}, typeof(SciMLBase.INITIALIZE_DEFAULT), typeof(Main.var"##237".add_coffee_affect!)}, typeof(Main.var"##237".add_coffee_affect!), DiffEqCallbacks.PresetTimeFunction{Vector{Float64}, typeof(SciMLBase.INITIALIZE_DEFAULT), typeof(Main.var"##237".add_coffee_affect!)}, typeof(SciMLBase.FINALIZE_DEFAULT), Nothing}}}((), (SciMLBase.DiscreteCallback{DiffEqCallbacks.PresetTimeFunction{StepRange{Int64, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#13#15"{Float64, Int64, Symbolics.Num}}, CaMKIIModel.var"#13#15"{Float64, Int64, Symbolics.Num}, DiffEqCallbacks.PresetTimeFunction{StepRange{Int64, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#13#15"{Float64, Int64, Symbolics.Num}}, typeof(SciMLBase.FINALIZE_DEFAULT), Nothing}(DiffEqCallbacks.PresetTimeFunction{StepRange{Int64, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#13#15"{Float64, Int64, Symbolics.Num}}(100000:1000:300000, true, SciMLBase.INITIALIZE_DEFAULT, CaMKIIModel.var"#13#15"{Float64, Int64, Symbolics.Num}(-80.0, 1, Istim)), CaMKIIModel.var"#13#15"{Float64, Int64, Symbolics.Num}(-80.0, 1, Istim), DiffEqCallbacks.PresetTimeFunction{StepRange{Int64, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#13#15"{Float64, Int64, Symbolics.Num}}(100000:1000:300000, true, SciMLBase.INITIALIZE_DEFAULT, CaMKIIModel.var"#13#15"{Float64, Int64, Symbolics.Num}(-80.0, 1, 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"#14#16"{Float64, Int64, Symbolics.Num}}, CaMKIIModel.var"#14#16"{Float64, Int64, Symbolics.Num}, DiffEqCallbacks.PresetTimeFunction{StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#14#16"{Float64, Int64, Symbolics.Num}}, typeof(SciMLBase.FINALIZE_DEFAULT), Nothing}(DiffEqCallbacks.PresetTimeFunction{StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#14#16"{Float64, Int64, Symbolics.Num}}(100000.5:1000.0:300000.5, true, SciMLBase.INITIALIZE_DEFAULT, CaMKIIModel.var"#14#16"{Float64, Int64, Symbolics.Num}(0.0, 1, Istim)), CaMKIIModel.var"#14#16"{Float64, Int64, Symbolics.Num}(0.0, 1, Istim), DiffEqCallbacks.PresetTimeFunction{StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, typeof(SciMLBase.INITIALIZE_DEFAULT), CaMKIIModel.var"#14#16"{Float64, Int64, Symbolics.Num}}(100000.5:1000.0:300000.5, true, SciMLBase.INITIALIZE_DEFAULT, CaMKIIModel.var"#14#16"{Float64, Int64, Symbolics.Num}(0.0, 1, Istim)), SciMLBase.FINALIZE_DEFAULT, Bool[1, 1], nothing), SciMLBase.DiscreteCallback{DiffEqCallbacks.PresetTimeFunction{Vector{Float64}, typeof(SciMLBase.INITIALIZE_DEFAULT), typeof(Main.var"##237".add_coffee_affect!)}, typeof(Main.var"##237".add_coffee_affect!), DiffEqCallbacks.PresetTimeFunction{Vector{Float64}, typeof(SciMLBase.INITIALIZE_DEFAULT), typeof(Main.var"##237".add_coffee_affect!)}, typeof(SciMLBase.FINALIZE_DEFAULT), Nothing}(DiffEqCallbacks.PresetTimeFunction{Vector{Float64}, typeof(SciMLBase.INITIALIZE_DEFAULT), typeof(Main.var"##237".add_coffee_affect!)}([200000.0], true, SciMLBase.INITIALIZE_DEFAULT, Main.var"##237".add_coffee_affect!), Main.var"##237".add_coffee_affect!, DiffEqCallbacks.PresetTimeFunction{Vector{Float64}, typeof(SciMLBase.INITIALIZE_DEFAULT), typeof(Main.var"##237".add_coffee_affect!)}([200000.0], true, SciMLBase.INITIALIZE_DEFAULT, Main.var"##237".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)
  1.790825 seconds (132.74 k allocations: 459.683 MiB, 4.12% gc time)
  5.352794 seconds (5.04 M allocations: 745.463 MiB, 2.57% gc time, 64.61% compilation time)
retcode: Success
Interpolation: 3rd order Hermite
t: 8895-element Vector{Float64}:
      0.0
      0.019333123284849308
      0.09098129546757994
      0.20735582943983855
      0.45611910276862533
      1.0472562928406122
      2.0342667657223696
      3.451776641148454
      6.733792423912806
     12.450117081023194
      ⋮
 404642.83277566
 414876.95827256143
 425667.56049853395
 437210.42549690785
 449697.91880315664
 462185.41210940544
 477837.27149518696
 495715.4129214641
 500000.0
u: 8895-element Vector{Vector{Float64}}:
 [0.12113, 0.12113, 0.12113, 0.12113, 0.12113, 0.12113, 0.12113, 0.12113, 0.12113, 0.12113  …  0.9911, 0.61179, 0.09243, 0.00702, 0.966, 0.22156, 0.07192, 150952.75035000002, 13838.37602, -68.79268]
 [0.12112999999999999, 0.12113, 0.12113, 0.12113, 0.12113, 0.12113, 0.12113, 0.12113, 0.12113, 0.12113  …  0.9911240298625772, 0.61179209692054, 0.09242766669618695, 0.007020208561323646, 0.9660018276402699, 0.2215639938807744, 0.07192100954852718, 150952.7504077194, 13838.375711519551, -68.79732946186226]
 [0.12113000000531939, 0.12113000000024629, 0.12112999999996936, 0.12112999999998814, 0.12112999999999756, 0.12112999999999959, 0.12112999999999993, 0.12112999999999999, 0.12112999999999999, 0.12113  …  0.9912126672514168, 0.6118012235185329, 0.09241901973901424, 0.00702008986027517, 0.9660085993318799, 0.2215787945110049, 0.0719247622956487, 150952.75062244057, 13838.374513299192, -68.81607005265552]
 [0.12113000352486501, 0.12113000071464508, 0.12113000013259279, 0.12113000002221791, 0.12113000000324825, 0.12113000000037327, 0.12113000000001811, 0.12112999999999313, 0.12112999999999685, 0.12112999999999911  …  0.9913552605900093, 0.6118207061207029, 0.09240497563401104, 0.007017234889558555, 0.9660195931792828, 0.22160283236040595, 0.07193089713793946, 150952.7509740238, 13838.372555328333, -68.84681913285226]
 [0.12113031246875829, 0.12113011855881943, 0.12113004261415268, 0.1211300145224514, 0.1211300046922744, 0.12113000143526587, 0.12113000041393686, 0.12113000011158663, 0.12113000002760377, 0.12113000000599933  …  0.9916544804172969, 0.6118814305717646, 0.0923749578279845, 0.0070030143052343926, 0.9660430731013478, 0.2216542075240971, 0.07194417536281429, 150952.7517373371, 13838.368384399068, -68.91207316777846]
 [0.12113664606535107, 0.12113391404700644, 0.12113223891788369, 0.12113124406405289, 0.12113067160353039, 0.12113035232069681, 0.12113017964115647, 0.12113008904213221, 0.12113004292180056, 0.12113002016884632  …  0.9923360674037417, 0.6121262615921059, 0.09230364339951613, 0.006946470397388757, 0.9660987611411453, 0.22177624785138977, 0.07197662797870664, 150952.75361533565, 13838.358559292059, -69.06429960994137]
 [0.12116110329207945, 0.12115245907382813, 0.12114597183088456, 0.12114118504637392, 0.12113771307938385, 0.12113523852752958, 0.12113350680291797, 0.1211323190247843, 0.12113152423329539, 0.1211310117677002  …  0.9933874251519441, 0.6128292434834117, 0.09218462776986637, 0.0068337541728754475, 0.9661914345949096, 0.2219798989175973, 0.07203363801526848, 150952.75694915713, 13838.34240329337, -69.31024285744343]
 [0.12120423665656944, 0.12118928168345969, 0.12117695409406527, 0.12116690224321353, 0.12115880345210753, 0.12115236793976296, 0.12114734156698287, 0.12114350756515986, 0.12114068746411359, 0.12113874145120666  …  0.9947260029718878, 0.61441610851668, 0.09201383579531924, 0.006675512062656749, 0.9663239343003682, 0.22227216398019892, 0.0721216517759309, 150952.76215620188, 13838.319723120678, -69.64637448767432]
 [0.1212995420290433, 0.12127783468666772, 0.1212589040374779, 0.1212425879351912, 0.12122873583441052, 0.12121721111566237, 0.12120789316717222, 0.12120067917599112, 0.12119548558727024, 0.1211922491964778  …  0.9971828595843288, 0.6201838932607627, 0.09161908329520764, 0.006355039713677859, 0.9666286957812559, 0.22294828828976576, 0.07235305497134359, 150952.77598869594, 13838.2694938995, -70.35063788657428]
 [0.1214553971027536, 0.12143259661681072, 0.12141268299068807, 0.12139558631643757, 0.12138124198529929, 0.12136959056512987, 0.12136057763401646, 0.12135415355743052, 0.1213502731984364, 0.12134889555279481  …  0.9999327439121073, 0.6347673874618533, 0.09093422465365385, 0.005926150085676071, 0.9671554512230358, 0.22412560303273427, 0.07284451729172227, 150952.80529264064, 13838.18882346682, -71.35304509818071]
 ⋮
 [0.13230253996101826, 0.13230273816801472, 0.13230292659367762, 0.13230310558126085, 0.1323032754554494, 0.13230343652359774, 0.13230358907686976, 0.13230373339129042, 0.13230386972871644, 0.13230399833773276  …  1.002944345386089, 0.6516129661193587, 0.0016646983815692801, 0.006580600194152512, 0.9997081294533996, 0.9997100452130583, 0.19745030028537736, 151635.85176429956, 13242.93290911982, -69.75660133663108]
 [0.13176871816275915, 0.1317689069015036, 0.13176908638030396, 0.131769256924982, 0.13176941884372176, 0.13176957242824536, 0.1317697179548963, 0.13176985568563807, 0.1317699858689761, 0.13177010874080958  …  1.002973525166985, 0.6482292507639522, 0.0016861437195107762, 0.006620636256263728, 0.9997024615622259, 0.9997043491012538, 0.19521428913251113, 151681.0019641985, 13197.792180049079, -69.66737703562086]
 [0.13123944894651923, 0.13123962941428202, 0.1312398010800073, 0.1312399642540523, 0.13124011922996826, 0.13124026628562105, 0.13124040568422315, 0.13124053767528554, 0.13124066249549615, 0.13124078036953163  …  1.0030023909115091, 0.6447714643607224, 0.0017082448122875819, 0.006661615302732723, 0.9996965815013198, 0.9996984372138297, 0.19295802740081244, 151726.4018089741, 13152.4013865953, -69.57660462496446]
 [0.13070905263720778, 0.13070922344674485, 0.13070938596242332, 0.13070954047713584, 0.13070968726790952, 0.13070982659696392, 0.13070995871268545, 0.13071008385052604, 0.13071020223383245, 0.13071031407461284  …  1.0030312547188769, 0.6411956362427048, 0.0017312934486810522, 0.0067040686796661685, 0.9996904063719019, 0.9996922269409797, 0.19065582662169026, 151772.58197647546, 13106.229735704763, -69.4831494968822]
 [0.130173899868798, 0.13017406037397658, 0.1301742131098183, 0.13017435835118074, 0.13017449635802672, 0.13017462737641747, 0.13017475163942746, 0.1301748693679879, 0.1301749807716654, 0.1301750860493814  …  1.0030603104147524, 0.6374682612491688, 0.0017555295550836388, 0.006748407523602339, 0.9996838655867535, 0.999685647100363, 0.18828932309571023, 151819.90843748907, 13058.911138469968, -69.3861692531407]
 [0.12967543443279292, 0.1296755872334186, 0.1296757327012847, 0.129675871095613, 0.12967600266159562, 0.12967612763133088, 0.12967624622468446, 0.12967635865008414, 0.12967646510525294, 0.12967656577788678  …  1.0030873159739828, 0.633886345255617, 0.0017790381092313405, 0.0067911037218831806, 0.9996774770878921, 0.9996792154158324, 0.18604437954184003, 151864.64616886844, 13014.180737794004, -69.29337825572438]
 [0.129099043560525, 0.1290991856719102, 0.12909932101965577, 0.12909944984259794, 0.12909957236666467, 0.1290996888057362, 0.12909979936243746, 0.12909990422886908, 0.12910000358728174, 0.12910009761069963  …  1.003118471860971, 0.6295957283134835, 0.0018074665321006207, 0.006842367227161771, 0.9996696908725424, 0.999671374620776, 0.1833950736928509, 151917.28332729914, 12961.55130107898, -69.18273023196485]
 [0.1285000269706695, 0.1285001576635081, 0.12850028218437473, 0.12850040075123842, 0.12850051357029676, 0.12850062083676, 0.1285007227355737, 0.12850081944208552, 0.12850091112266, 0.12850099793524744  …  1.0031507722265691, 0.6249562948797135, 0.0018385490698334065, 0.006897952780560491, 0.9996611034756407, 0.9996627216027754, 0.18057689264680477, 151973.07404221184, 12905.767953448014, -69.06367776062568]
 [0.1283653265014929, 0.1283654544944815, 0.1283655764488252, 0.1283656925781329, 0.1283658030844674, 0.12836590815911514, 0.1283660079832955, 0.12836610272881455, 0.12836619255866857, 0.1283662776276018  …  1.0031580247983174, 0.6238856889173915, 0.0018457731212769503, 0.006910803734865474, 0.9996590963966429, 0.9996606997486412, 0.17993347582736016, 151985.78419648315, 12893.059355695705, -69.03628984930079]
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)")
_images/431a55e082b9930ab5708a00c87b18ff0adba01b1780b4acdb09c1a84d3a1ebc.png
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)")
_images/83f85791dad5685d5f256e71cc24cae8baf58d57d6265f6087371f9e5e4adbca.png
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)")
_images/a64a6a10acf367041666655816ef82e5e73f33b2b563d5ade7282945ede9be09.png
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))
_images/d3fa667e5b29ddac7c156c681abfd96fc106d85e00e599c210b4ecc4f62ac298.png
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)")
_images/61126e67a4786b6d83d2f3b2b8f85ad575e95ae3828d0beae3a2aee1885a6951.png
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)")
_images/c2be2f3dc8b43b8a92321611d34d6b16dce4f00e27985f4a3f6b16c9193f4845.png
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)")
_images/005435958e313a7bff662433ecf775dfc0af20ee1335a3d62eaf606f289f91f1.png

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)
  0.849882 seconds (62.38 k allocations: 215.018 MiB, 5.26% gc time)
  0.796574 seconds (63.04 k allocations: 220.361 MiB, 2.60% gc time, 1.34% compilation time)
  0.793442 seconds (46.35 k allocations: 148.538 MiB, 2.01% gc time)
retcode: Success
Interpolation: 3rd order Hermite
t: 2868-element Vector{Float64}:
      0.0
      0.18425139527478848
      0.9881940796459161
      4.071256017362852
     11.468832187792005
     25.162966825599597
     49.58587839022985
     83.36319012003779
    137.50264344533196
    206.18151029038174
      ⋮
 144682.34715339995
 149346.8761972228
 154991.36767138157
 161143.70394410985
 169121.91852735105
 177100.13311059226
 185078.34769383346
 197689.40033937484
 205000.0
u: 2868-element Vector{Vector{Float64}}:
 [0.12238733167270603, 0.12238733221197831, 0.12238733272724227, 0.12238733321935895, 0.12238733368914284, 0.12238733413736505, 0.12238733456475603, 0.12238733497200831, 0.12238733535977889, 0.12238733572869155  …  1.0034759747556823, 0.561096202818949, 0.0023072148842124274, 0.007684767636822426, 0.9995225266338769, 0.9995225405201699, 0.14609038459579196, 152640.0578278563, 12238.83254347433, -67.47367186574421]
 [0.12238733165222836, 0.12238733219150018, 0.12238733270676372, 0.12238733319888004, 0.12238733366866354, 0.12238733411688536, 0.12238733454427599, 0.12238733495152793, 0.12238733533929816, 0.12238733570821056  …  1.0034759814713825, 0.5610965935701008, 0.002307214790760048, 0.007684572543147688, 0.9995225266978792, 0.9995225405254387, 0.14609038655427123, 152640.0578306603, 12238.832540749278, -67.47605251892988]
 [0.1223873315629591, 0.12238733210229981, 0.12238733261768986, 0.12238733311003108, 0.12238733358019983, 0.12238733402904992, 0.12238733445739194, 0.12238733486590683, 0.12238733525488807, 0.12238733562357636  …  1.0034760804403486, 0.5611072427622734, 0.0023072121612038644, 0.007681125807797031, 0.9995225284768817, 0.9995225406880335, 0.14609044391072148, 152640.0578451476, 12238.832531947546, -67.48631060627581]
 [0.12238731004325584, 0.12238730114252364, 0.12238728839312016, 0.12238727039591668, 0.12238724529939186, 0.12238721067743402, 0.12238716338311624, 0.12238709937695279, 0.12238701352921472, 0.12238689939732801  …  1.0034768755007826, 0.561270604650486, 0.0023071698550189276, 0.007661891748759978, 0.9995225569593011, 0.9995225433362335, 0.14609137645118755, 152640.05793487077, 12238.832565489933, -67.52372601542784]
 [0.12238359487594734, 0.12238302199102875, 0.12238236343446476, 0.12238161061222315, 0.12238075411931214, 0.12237978375471872, 0.12237868853992576, 0.12237745674199535, 0.12237607590208212, 0.12237453287010613  …  1.0034796801417414, 0.5622675069459114, 0.0023068805363223896, 0.007620396438019491, 0.9995227501175904, 0.9995225614983173, 0.1460978397714653, 152640.05835365388, 12238.833087866316, -67.60263606447346]
 [0.12235262102909561, 0.1223505061887389, 0.12234818027412997, 0.12234564032934107, 0.12234288283027242, 0.12233990374019298, 0.12233669856327517, 0.12233326239628643, 0.1223295899785786, 0.12232567574049184  …  1.0034853566060795, 0.5652920194886493, 0.00230578434678232, 0.00756174700195705, 0.9995234711126995, 0.9995226305072725, 0.1461228514322879, 152640.05975333837, 12238.835441676905, -67.71484836504314]
 [0.12224768065803422, 0.12224421986740436, 0.12224044090454088, 0.12223634849747257, 0.12223194684350289, 0.12222723965196412, 0.12222223018444886, 0.12221692129272536, 0.12221131545452076, 0.1222054148073345  …  1.00349461738332, 0.5710550878943647, 0.0023026556336594953, 0.0074985047316384855, 0.9995254780798671, 0.999522829040684, 0.14619637458951876, 152640.0636252763, 12238.842597433308, -67.8367736701131]
 [0.12205954889570506, 0.12205569011082192, 0.1220514602109072, 0.12204686770783249, 0.12204192058919949, 0.12203662635564257, 0.12203099205543959, 0.1220250243166698, 0.1220187293771315, 0.12201211311221109  …  1.0035059736437004, 0.5764573560099102, 0.0022971349878566217, 0.007458475265389554, 0.9995288919184037, 0.9995231857713638, 0.1463304777909497, 152640.07052879035, 12238.855384925153, -67.91450590058889]
 [0.12173493093367777, 0.1217314196609422, 0.1217275183776644, 0.12172323713085627, 0.12171858543860864, 0.12171357232597577, 0.12170820635806362, 0.12170249567057527, 0.12169644799804033, 0.12169007069993196  …  1.0035226949710132, 0.5800829486605268, 0.002287510074190084, 0.007435527224834682, 0.9995345131932374, 0.9995238305653655, 0.146573802312664, 152640.08301367864, 12238.877065652541, -67.95940449801374]
 [0.12133040242466495, 0.12132762337909783, 0.12132445313692856, 0.1213209021442985, 0.12131698030815043, 0.12131269703249513, 0.12130806125181635, 0.12130308146187388, 0.12129776574813804, 0.12129212181206553  …  1.003542653550216, 0.5816158836512224, 0.00227539728287464, 0.007422450753897355, 0.999541028486866, 0.999524689188347, 0.14689596042242734, 152640.09967526072, 12238.90251878437, -67.98521869700394]
 ⋮
 [0.11570157469381276, 0.11570157857788242, 0.11570158247925415, 0.1157015863991012, 0.11570159033850397, 0.1157015942984567, 0.11570159827987357, 0.11570160228359407, 0.11570160631038823, 0.11570161036096109  …  1.003822951502743, 0.5859080968648788, 0.0021160362549558598, 0.007373498872505528, 0.9995812989050218, 0.9990203837225287, 0.15849723454794576, 152692.6913143602, 12186.05826673025, -68.08245408961771]
 [0.11570548316055033, 0.11570548354944851, 0.11570548394672078, 0.11570548435267716, 0.1157054847676015, 0.11570548519175393, 0.11570548562537263, 0.11570548606867516, 0.11570548652186062, 0.11570548698511013  …  1.0038227545886, 0.5859348068064407, 0.0021158385041036448, 0.007373223783360072, 0.9995810074525405, 0.9994192445109599, 0.15850691570272984, 152692.4156913224, 12186.333422679514, -68.08311434730263]
 [0.11570928411680412, 0.11570928093100091, 0.11570927788240758, 0.11570927496593246, 0.1157092721767786, 0.11570926951042446, 0.11570926696260568, 0.11570926452929865, 0.11570926220670523, 0.11570925999123852  …  1.0038225634535716, 0.5859637036554985, 0.002115623778432234, 0.007372804596170483, 0.9995809818466276, 0.9995452505784503, 0.15852218932461068, 152692.0899660807, 12186.659100015748, -68.08382472257246]
 [0.11571290577526114, 0.11571290245053577, 0.11571289925799577, 0.11571289619265081, 0.11571289324978973, 0.11571289042496181, 0.11571288771395975, 0.11571288511280368, 0.1157128826177267, 0.11571288022516125  …  1.0038223783574196, 0.5859945172097851, 0.0021153872671605184, 0.007372404422837147, 0.9995812520242215, 0.9995742656069727, 0.1585386296776153, 152691.74363530107, 12187.005520232442, -68.08458948678185]
 [0.1157171258033431, 0.11571712146640603, 0.11571711731465478, 0.1157171133412441, 0.11571710953971392, 0.1157171059039637, 0.11571710242822887, 0.11571709910705874, 0.11571709593529647, 0.11571709290806044  …  1.0038221585647649, 0.586034759403473, 0.00211509189899938, 0.007371968100154295, 0.9995820143714245, 0.9995804756002032, 0.15855982627537119, 152691.3085338657, 12187.440748549287, -68.08558017442597]
 [0.11572169022706906, 0.11572168663711974, 0.11572168316012961, 0.11572167979231363, 0.11572167653009223, 0.11572167337007767, 0.11572167030906182, 0.11572166734400464, 0.11572166447202373, 0.11572166169038446  …  1.0038219284294474, 0.586071786969813, 0.0021148172940791583, 0.007371446784124117, 0.9995812895297641, 0.999581556007581, 0.1585796645027409, 152690.88830240598, 12187.860956642113, -68.08649922107871]
 [0.1157253745250583, 0.11572537163022813, 0.11572536885941385, 0.11572536620807754, 0.11572536367192825, 0.11572536124690547, 0.11572535892916383, 0.11572535671505889, 0.11572535460113421, 0.11572535258410926  …  1.0038217377058587, 0.5861093172800101, 0.0021145348275201257, 0.00737102051507276, 0.9995817424815623, 0.999581570148838, 0.15859912115613667, 152690.48246872867, 12188.266926488974, -68.08742917422042]
 [0.11573152328052567, 0.11573152051862035, 0.1157315178729057, 0.11573151533910139, 0.11573151291315914, 0.11573151059124726, 0.11573150836973636, 0.11573150624518627, 0.11573150421433386, 0.11573150227408177  …  1.003821422862468, 0.5861649700763885, 0.0021141198023521077, 0.007370346110320382, 0.9995817896550815, 0.9995816603414815, 0.1586281559527884, 152689.8691212533, 12188.880424950856, -68.08880550176323]
 [0.11573495711197798, 0.1157349544327682, 0.11573495186411627, 0.11573494940197104, 0.11573494704250019, 0.11573494478207545, 0.11573494261725942, 0.11573494054479304, 0.11573493856158422, 0.11573493666469731  …  1.003821246482322, 0.5861957164355727, 0.0021138895265808643, 0.007369927278281768, 0.9995818765625492, 0.9995817253017426, 0.1586443831216739, 152689.52874543268, 12189.220868933515, -68.08956608800719]
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)")
_images/1efc3347c6c9234c8300341426f51cca8d81ad8cd11e2a6330c3b16f1cbf8eac.png
savefig("caf-ap.pdf")
savefig("caf-ap.png")
"/home/runner/work/camkii-cardiomyocyte-model/camkii-cardiomyocyte-model/.cache/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/.cache/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)
_images/4cf9c27f22e8fbd9749cd62ff67dad4700141e3a97662c9ccdf5d10e28d82b6e.png
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)")
_images/fb77b19580d6aed7d49b450ef7f892e1d50e198906dd3d7808f64b8a76d9575a.png
savefig("caf-camkact.pdf")
savefig("caf-camkact.png")
"/home/runner/work/camkii-cardiomyocyte-model/camkii-cardiomyocyte-model/.cache/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")
_images/c1d50585135f3fae158c7d5d9bc48b7ddad93745fb72f8b005b27093602d1c5b.png
savefig("caf-exp.pdf")
"/home/runner/work/camkii-cardiomyocyte-model/camkii-cardiomyocyte-model/.cache/docs/caf-exp.pdf"

This notebook was generated using Literate.jl.