1- # Good old 16-state CICR (Cortassa 2006), including L-type calcium channel (LCC) and Ryanodine receptor (RyR)
2- " LCC ODE system"
3- function get_lcc_sys (; ca_ss, ca_o, k_i, k_o, vm, name= :cicrsys )
1+ # 16-state CICR from Cortassa et al. (2006), including L-type calcium channels (LCC) and Ryanodine receptors (RyR)
2+ function get_cicr16_eqs (; vm, ca_ss, ca_i, ca_jsr, ca_nsr, k_i, ca_o, k_o)
43 @parameters begin
4+ R_TR = inv (9.09 ms) # Diffusion rate between JSR and NSR
5+ R_XFER= inv (0.5747 ms) # Diffusion rate between subspace and cytosol
6+ # # L-type calcium channels
57 A_LCC = 2
68 B_LCC = 1 / 2
79 ω_LCC = 0.01 kHz
@@ -11,6 +13,114 @@ function get_lcc_sys(; ca_ss, ca_o, k_i, k_o, vm, name=:cicrsys)
1113 P_CA_LCC = 1E-3 cm * Hz # 1.24E-3cm * Hz
1214 P_K_LCC = 1.11E-11 cm * Hz
1315 I_CA_HALF_LCC = - 0.4583 μAcm⁻²
16+ # # Ryanodine receptors
17+ R_RYR = 3.6 kHz
18+ KA_P_RYR = 1.125E10 / (mM^ 4 * ms)
19+ KA_M_RYR = 0.576 kHz
20+ KB_P_RYR = 4.05E6 / (mM^ 3 * ms)
21+ KB_M_RYR = 1.93 kHz
22+ KC_P_RYR = 0.1 kHz
23+ KC_M_RYR = 8E-4 kHz
24+ end
25+
26+ @variables begin
27+ # State transition rates
28+ α_lcc (t)
29+ β_lcc (t)
30+ # Closed LCC state
31+ c0_lcc (t) # Conserved
32+ c1_lcc (t) = 0
33+ c2_lcc (t) = 0
34+ c3_lcc (t) = 0
35+ c4_lcc (t) = 0
36+ # Opened LCC state
37+ o_lcc (t) = 0
38+ # Ca-inhibited LCC states
39+ cca0_lcc (t) = 0
40+ cca1_lcc (t) = 0
41+ cca2_lcc (t) = 0
42+ cca3_lcc (t) = 0
43+ cca4_lcc (t) = 0
44+ # Voltage-gated LCC
45+ x_yca (t) = 1
46+ y_inf (t)
47+ τ_yca (t)
48+ # RyR
49+ po1_ryr (t) = 0
50+ po2_ryr (t) = 0
51+ pc1_ryr (t) # # Conserved
52+ pc2_ryr (t) = 0
53+ # Currents
54+ ICaMax (t)
55+ ICaK (t)
56+ ICaL (t)
57+ Jrel (t)
58+ Jtr (t)
59+ Jxfer (t)
60+ end
61+
62+ ω, f, g = ω_LCC, f_LCC, g_LCC
63+ α = α_lcc
64+ β = β_lcc
65+ α′ = A_LCC * α
66+ β′ = B_LCC * β
67+ γ = γ_LCC * ca_ss
68+ rs_lcc = Dict ()
69+ add_rate! (rs_lcc, 4 α, c0_lcc, β, c1_lcc)
70+ add_rate! (rs_lcc, 3 α, c1_lcc, 2 β, c2_lcc)
71+ add_rate! (rs_lcc, 2 α, c2_lcc, 3 β, c3_lcc)
72+ add_rate! (rs_lcc, α, c3_lcc, 4 β, c4_lcc)
73+ add_rate! (rs_lcc, f, c4_lcc, g, o_lcc)
74+ add_rate! (rs_lcc, 4 α′, cca0_lcc, β′, cca1_lcc)
75+ add_rate! (rs_lcc, 3 α′, cca1_lcc, 2 β′, cca2_lcc)
76+ add_rate! (rs_lcc, 2 α′, cca2_lcc, 3 β′, cca3_lcc)
77+ add_rate! (rs_lcc, α′, cca3_lcc, 4 β′, cca4_lcc)
78+ add_rate! (rs_lcc, γ, c0_lcc, ω, cca0_lcc)
79+ add_rate! (rs_lcc, A_LCC * γ, c1_lcc, B_LCC * ω, cca1_lcc)
80+ add_rate! (rs_lcc, A_LCC^ 2 * γ, c2_lcc, B_LCC^ 2 * ω, cca2_lcc)
81+ add_rate! (rs_lcc, A_LCC^ 3 * γ, c3_lcc, B_LCC^ 3 * ω, cca3_lcc)
82+ add_rate! (rs_lcc, A_LCC^ 4 * γ, c4_lcc, B_LCC^ 4 * ω, cca4_lcc)
83+ lcceqs = [ D (x) ~ rs_lcc[x] for x in (c1_lcc, c2_lcc, c3_lcc, c4_lcc, o_lcc, cca0_lcc, cca1_lcc, cca2_lcc, cca3_lcc, cca4_lcc) ]
84+
85+ rs_ryr = Dict ()
86+ add_rate! (rs_ryr, KA_P_RYR * ca_ss^ 4 , pc1_ryr, KA_M_RYR, po1_ryr)
87+ add_rate! (rs_ryr, KB_P_RYR * ca_ss^ 3 , po1_ryr, KB_M_RYR, po2_ryr)
88+ add_rate! (rs_ryr, KC_P_RYR, po1_ryr, KC_M_RYR, pc2_ryr)
89+ ryreqs = [D (x) ~ rs_ryr[x] for x in (po1_ryr, po2_ryr, pc2_ryr)]
90+
91+ eqs = [
92+ 1 ~ c0_lcc + c1_lcc + c2_lcc + c3_lcc + c4_lcc + o_lcc + cca0_lcc + cca1_lcc + cca2_lcc + cca3_lcc + cca4_lcc,
93+ 1 ~ pc1_ryr + po1_ryr + po2_ryr + pc2_ryr,
94+ α_lcc ~ 0.4 kHz * exp ((vm + 2 mV) * inv (10 mV)),
95+ β_lcc ~ 0.05 kHz * exp (- (vm + 2 mV) * inv (13 mV)),
96+ y_inf ~ expit (- (vm + 55 mV) * inv (7.5 mV)) + 0.5 * expit ((vm - 21 mV) * inv (6 mV)),
97+ τ_yca ~ 20 ms + 600 ms * expit (- (vm + 30 mV) * inv (9.5 mV)),
98+ D (x_yca) ~ (y_inf - x_yca) / τ_yca,
99+ ICaMax ~ ghk (P_CA_LCC, vm, 1 μM, 0.341 * ca_o, 2 ) ,
100+ ICaL ~ 6 * x_yca * o_lcc * ICaMax,
101+ ICaK ~ hil (I_CA_HALF_LCC, ICaMax) * x_yca * o_lcc * ghk (P_K_LCC, vm, k_i, k_o),
102+ Jrel ~ R_RYR * (po1_ryr + po2_ryr) * (ca_jsr - ca_ss),
103+ Jtr ~ R_TR * (ca_nsr - ca_jsr),
104+ Jxfer ~ R_XFER * (ca_ss - ca_i),
105+ ]
106+
107+ eqs_cicr16 = [ryreqs; lcceqs; eqs]
108+
109+ return (; eqs_cicr16, ICaL, ICaK, Jrel, Jtr, Jxfer)
110+ end
111+
112+ " LCC ODE system"
113+ function get_lcc_sys (; ca_ss, ca_o, k_i, k_o, vm, name= :cicrsys )
114+ @parameters begin
115+ A_LCC = 2
116+ B_LCC = 1 / 2
117+ ω_LCC = 10 Hz
118+ f_LCC = 300 Hz
119+ g_LCC = 2 kHz
120+ γ_LCC = 0.1875 / (ms * mM)
121+ P_CA_LCC = 1E-3 cm * Hz # 1.24E-3cm * Hz
122+ P_K_LCC = 1.11E-11 cm * Hz
123+ I_CA_HALF_LCC = - 0.4583 μAcm⁻²
14124 end
15125
16126 @variables begin
@@ -35,13 +145,18 @@ function get_lcc_sys(; ca_ss, ca_o, k_i, k_o, vm, name=:cicrsys)
35145 x_yca (t) = 1
36146 y_inf (t)
37147 τ_yca (t)
148+ # RyR
149+ po1_ryr (t) = 0
150+ po2_ryr (t) = 0
151+ pc1_ryr (t) # # Conserved
152+ pc2_ryr (t) = 0
38153 # Currents
39154 ICaMax (t)
40155 ICaK (t)
41156 ICaL (t)
157+ Jrel (t)
42158 end
43159
44- v = vm / mV
45160 ω, f, g = ω_LCC, f_LCC, g_LCC
46161 α = α_lcc
47162 β = β_lcc
@@ -64,8 +179,8 @@ function get_lcc_sys(; ca_ss, ca_o, k_i, k_o, vm, name=:cicrsys)
64179 vc4ca4 = 16 γ * c4_lcc - ω / 16 * cca4_lcc
65180
66181 eqs = [
67- α_lcc ~ 0.4 kHz * exp ((v + 2 mV) * inv (10 mV)),
68- β_lcc ~ 0.05 kHz * exp (- (v + 2 mV) * inv (13 mV)),
182+ α_lcc ~ 0.4 kHz * exp ((vm + 2 mV) * inv (10 mV)),
183+ β_lcc ~ 0.05 kHz * exp (- (vm + 2 mV) * inv (13 mV)),
69184 1 ~ c0_lcc + c1_lcc + c2_lcc + c3_lcc + c4_lcc + o_lcc + cca0_lcc + cca1_lcc + cca2_lcc + cca3_lcc + cca4_lcc,
70185 # D(c0_lcc) ~ -vc0c1 - vc0ca0,
71186 D (c1_lcc) ~ vc0c1 - vc1c2 - vc1ca1,
@@ -78,8 +193,8 @@ function get_lcc_sys(; ca_ss, ca_o, k_i, k_o, vm, name=:cicrsys)
78193 D (cca2_lcc) ~ vc2ca2 + vca1ca2 - vca2ca3,
79194 D (cca3_lcc) ~ vc3ca3 + vca2ca3 - vca3ca4,
80195 D (cca4_lcc) ~ vca3ca4 + vc4ca4,
81- y_inf ~ expit (- (v + 55 mV) * inv (7.5 mV)) + 0.5 * expit ((v - 21 mV) * inv (6 mV)),
82- τ_yca ~ 20 ms + 600 ms * expit (- (v + 30 mV) * inv (9.5 mV)),
196+ y_inf ~ expit (- (vm + 55 mV) * inv (7.5 mV)) + 0.5 * expit ((vm - 21 mV) * inv (6 mV)),
197+ τ_yca ~ 20 ms + 600 ms * expit (- (vm + 30 mV) * inv (9.5 mV)),
83198 D (x_yca) ~ (y_inf - x_yca) / τ_yca,
84199 ICaMax ~ ghk (P_CA_LCC, vm, 1 μM, 0.341 * ca_o, 2 ) ,
85200 ICaL ~ 6 * x_yca * o_lcc * ICaMax,
0 commit comments