-
Notifications
You must be signed in to change notification settings - Fork 0
/
ohara-cipa-v1-2017.mmt
1232 lines (1178 loc) · 37.4 KB
/
ohara-cipa-v1-2017.mmt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
[[model]]
name: dutta-2017
version: 20240904
mmt_authors: Michael Clerx
display_name: Dutta et al., 2017
desc: """
The 2017 "CiPA v1" update [1, 2, 3] of the O'Hara et al. model of the human
ventricular AP [4].
This Myokit implementation was based on CellML code [5], published by Chang
et al. [3]. The CellML authors checked the CellML output (after converting
to Chaste using PyCML) against derivatives calculated with the original
code published by the FDA [6].
The model differs from the original O'Hara model [4] in the following
aspects:
- The IKr formulation was replaced entirely, as described in [2, 3].
- Conductances for INaL, ICaL, IKs, and IK1 were rescaled, as described
in [1].
This Myokit implementation includes a further two corrections to INaK, as
documented in [7]. Compared to the CellML [5], it uses a simpler fix for
discontinuities in the phiCaL parameters, and it has a more readable
notation for the IKr model.
The stimulus was set to 0.5ms and approximately twice the threshold for
depolarisation.
References:
[1] Dutta, S., Chang, K. C., Beattie, K. A., Sheng, J., Tran, P. N., Wu,
W. W., Wu, M., Strauss, D. G., Colatsky, T., & Li, Z. (2017).
Optimization of an In silico Cardiac Cell Model for Proarrhythmia Risk
Assessment. Frontiers in Physiology, 8, 616.
https://doi.org/10.3389/fphys.2017.00616
[2] Li, Z., Dutta, S., Sheng, J., Tran, P. N., Wu, W., Chang, K., Mdluli,
T., Strauss, D. G., & Colatsky, T. (2017). Improving the In Silico
Assessment of Proarrhythmia Risk by Combining hERG (Human
Ether-a-go-go-Related Gene) Channel-Drug Binding Kinetics and
Multichannel Pharmacology. Circulation: Arrhythmia and
Electrophysiology, 10(2), e004628.
https://doi.org/10.1161/CIRCEP.116.004628
[3] Chang, K. C., Dutta, S., Mirams, G. R., Beattie, K. A., Sheng, J.,
Tran, P. N., Wu, M., Wu, W. W., Colatsky, T., Strauss, D. G., & Li,
Z. (2017). Uncertainty quantification reveals the importance of data
variability and experimental design considerations for in silico
proarrhythmia risk assessment. Frontiers in physiology, 8, 917.
https://doi.org/10.3389/fphys.2017.00917
[4] O'Hara, T., Virág, L., Varró, A., & Rudy, Y. (2011). Simulation of the
Undiseased Human Cardiac Ventricular Action Potential: Model
Formulation and Experimental Validation. PLOS Computational Biology,
7(5), e1002061.
https://doi.org/10.1371/journal.pcbi.1002061
[5] https://models.cellml.org/e/4e8/ohara_rudy_cipa_v1_2017.cellml/view
[6] https://github.com/FDA/CiPA/blob/master/AP_simulation/models/newordherg_qNet.c
[7] https://docs.google.com/document/d/111fqNzQGvGAjB_PrkvejEhzqwROrR6czz_OBz7Ep-iM
"""
# Initial values
membrane.V = -8.80019046500000002e1
sodium.Na_i = 7.26800449799999981
sodium.Na_ss = 7.26808997699999981
potassium.K_i = 1.44655591799999996e2
potassium.K_ss = 1.44655565099999990e2
calcium.Ca_i = 8.6e-5
calcium.Ca_ss = 8.49e-5
calcium.Ca_nsr = 1.61957453799999995
calcium.Ca_jsr = 1.57123401400000007
ina.m = 7.34412110199999992e-3
ina.hf = 6.98107191299999985e-1
ina.hs = 6.98089580099999996e-1
ina.j = 6.97990843200000044e-1
ina.hsp = 4.54948552499999992e-1
ina.jp = 6.97924586499999999e-1
inal.m = 1.88261727299999989e-4
inal.h = 5.00854885500000013e-1
inal.hp = 2.69306535700000016e-1
ito.a = 1.00109768699999991e-3
ito.if = 9.99554174499999948e-1
ito.is = 5.86506173600000014e-1
ito.ap = 5.10086293400000023e-4
ito.ifp = 9.99554182300000038e-1
ito.isp = 6.39339948199999952e-1
ical.d = 2.34e-9
ical.ff = 9.99999990900000024e-1
ical.fs = 9.10241277699999962e-1
ical.fcaf = 9.99999990900000024e-1
ical.fcas = 9.99804677700000033e-1
ical.jca = 9.99973831200000052e-1
ical.ffp = 9.99999990900000024e-1
ical.fcafp = 9.99999990900000024e-1
ical.nca = 2.74941404400000020e-3
ikr.IC1 = 0.999637
ikr.IC2 = 6.83207999999999982e-5
ikr.IO = 5.67622999999999969e-5
ikr.C1 = 1.80144999999999990e-8
ikr.C2 = 8.26618999999999954e-5
ikr.O = 1.55510000000000007e-4
ikr.IObound = 0
ikr.Obound = 0
ikr.Cbound = 0
iks.x1 = 2.70775802499999996e-1
iks.x2 = 1.92850342599999990e-4
ik1.x = 9.96759759399999945e-1
ryr.Jrelnp = 2.5e-7
ryr.Jrelp = 3.12e-7
camk.CaMK_trapped = 1.25840446999999998e-2
#
# Simulator variables
#
[engine]
time = 0 [ms]
in [ms]
bind time
pace = 0 bind pace
#
# Membrane potential
# Unchanged in [1,2,3], see page 5 of the supplement to [4]
#
[membrane]
dot(V) = -(i_ion + stimulus.i_stim)
in [mV]
label membrane_potential
i_ion = (
+ sodium.INa_tot
+ sodium.INa_ss_tot
+ calcium.ICa_tot
+ calcium.ICa_ss_tot
+ potassium.IK_tot
+ potassium.IK_ss_tot
)
label cellular_current
in [A/F]
#
# Stimulus current
# Unchanged in [1,2,3], see page 5 of the supplement to [4]
#
[stimulus]
i_stim = engine.pace * amplitude
in [A/F]
amplitude = -58 [A/F] * 2
in [A/F]
#
# Cell geometry
# Unchanged in [1,2,3], see page 6 of the supplement to [4]
#
[cell]
mode = 1
desc: The type of cell. Endo = 0, Epi = 1, Mid = 2
L = 0.01 [cm] : Cell length
in [cm]
r = 0.0011 [cm] : Cell radius
in [cm]
vcell = 1000 [uL/mL] * 3.14 * r * r * L
in [uL]
desc: Cell volume
Ageo = 2 * 3.14 * r * r + 2 * 3.14 * r * L
in [cm^2]
desc: Geometric cell area
Acap = 2 * Ageo
in [cm^2]
desc: Capacitative membrane area
AFC = Acap / phys.F * 1 [uF/cm^2]
in [uF*mol/C]
vmyo = 0.68 * vcell
in [uL]
desc: Volume of the cytosolic compartment
vnsr = 0.0552 * vcell
in [uL]
desc: Volume of the NSR compartment
vjsr = 0.0048 * vcell
in [uL]
desc: Volume of the JSR compartment
vss = 0.02 * vcell
in [uL]
desc: Volume of the Submembrane space near the T-tubules
#
# Physical constants
# Unchanged in [1,2,3], see page 2 of the appendix to [4]
#
[phys]
R = 8314 [J/kmol/K] : Gas constant
in [J/kmol/K]
T = 310 [K] : Temperature
in [K]
F = 96485 [C/mol] : Faraday constant
in [C/mol]
RTF = R * T / F
in [mV]
FRT = F / (R * T)
in [1/mV]
FFRT = F * FRT
in [C/mol/mV]
#
# Extracellular concentrations
# Unchanged in [1,2,3], see page 5 of the supplement to [4]
#
[extra]
Na_o = 140 [mM] : Extracellular Na+ concentration
in [mM]
Ca_o = 1.8 [mM] : Extracellular Ca2+ concentration
in [mM]
K_o = 5.4 [mM] : Extracellular K+ concentration
in [mM]
#
# Reversal potentials
# Unchanged in [1,2,3], see page 6 of the supplement to [4]
#
[rev]
ENa = phys.RTF * log(extra.Na_o / sodium.Na_i)
in [mV]
desc: Reversal potential for sodium currents
EK = phys.RTF * log(extra.K_o / potassium.K_i)
in [mV]
desc: Reversal potential for potassium currents
PKNa = 0.01833
desc: Permeability ratio K+ to Na+
EKs = phys.RTF * log((extra.K_o + PKNa * extra.Na_o) / (potassium.K_i + PKNa * sodium.Na_i))
in [mV]
desc: Reversal potential for IKs
#
# INa: Fast sodium current
# Unchanged in [1,2,3], see page 6 of the supplement to [4]
#
# The fast sodium current is modelled using a Hodgkin-Huxley type formulation
# including activation (m), slow and fast components of inactivation (h) and
# recovery from inactivation (j). The slow component of inactivation and
# recovery from inactivation have an alternative formulation for CaMKII-
# phosphorylated channels.
#
[ina]
use membrane.V
# m-gates
sm = 1 / (1 + exp((V + 39.57 [mV]) / -9.871 [mV]))
desc: Steady state value for m-gates
tm = 1 [ms] / (6.765 * exp((V + 11.64 [mV]) / 34.77 [mV]) + 8.552 * exp(-(V + 77.42 [mV]) / 5.955 [mV]))
in [ms]
desc: Time constant for m-gates
dot(m) = (sm - m) / tm
desc: Activation gate for INa
# h-gates
sh = 1 / (1 + exp((V + 82.9 [mV]) / 6.086 [mV]))
desc: Steady-state value for h-gates
thf = 1 [ms] / (1.432e-5 * exp((V + 1.196 [mV]) / -6.285 [mV]) + 6.149 * exp((V + 0.5096 [mV]) / 20.27 [mV]))
in [ms]
desc: Time constant for fast development of inactivation in INa
ths = 1 [ms] / (0.009794 * exp((V + 17.95 [mV]) / -28.05 [mV]) + 0.3343 * exp((V + 5.73 [mV]) / 56.66 [mV]))
in [ms]
desc: Time constant for slow development of inactivation in INa
Ahf = 0.99 : Fraction of INa channels with fast inactivation
Ahs = 1 - Ahf : Fraction of INa channels with slow inactivation
dot(hf) = (sh - hf) / thf
desc: Fast component of inactivation for INa
dot(hs) = (sh - hs) / ths
desc: Slow component of inactivation for non-phosphorylated INa
h = Ahf * hf + Ahs * hs
desc: Inactivation gate for INa
# j-gates
sj = sh
desc: Steady-state value for j-gate in INa
tj = 2.038 [ms] + 1 [ms] / (0.02136 * exp((V + 100.6 [mV]) / -8.281 [mV]) + 0.3052 * exp((V + 0.9941 [mV]) / 38.45 [mV]))
in [ms]
desc: Time constant for j-gate in INa
dot(j) = (sj - j) / tj
desc: Recovery from inactivation gate for non-phosphorylated INa
# Phosphorylated channels
thsp = 3 * ths
in [ms]
desc: Time constant for h-gate of phosphorylated INa
shsp = 1 / (1 + exp((V + 89.1 [mV]) / 6.086 [mV]))
desc: Steady-state value for h-gate of phosphorylated INa
dot(hsp) = (shsp - hsp) / thsp
desc: Slow componennt of the inactivation gate for phosphorylated INa
hp = Ahf * hf + Ahs * hsp
desc: Inactivation gate for phosphorylated INa
tjp = 1.46 * tj
desc: Time constant for the j-gate of phosphorylated INa
in [ms]
dot(jp) = (sj - jp) / tjp
desc: Recovery from inactivation gate for phosphorylated INa
# Current
gNa = 75 [mS/uF] : Maximum conductance of INa
in [mS/uF]
INa = gNa * (V - rev.ENa) * m^3 * ((1 - camk.f) * h * j + camk.f * hp * jp)
in [A/F]
desc: Fast sodium current
#
# INaL: Late component of the sodium current
# Rescaled but otherwise unchanged, see page 7 of the supplement to [4]
#
[inal]
use membrane.V
use ina.tm
sm = 1 / (1 + exp((V + 42.85 [mV]) / -5.264 [mV]))
desc: Steady state value of m-gate for INaL
dot(m) = (sm - m) / tm
desc: Activation gate for INaL
th = 200 [ms] : Time constant for inactivation of non-phosphorylated INaL
in [ms]
sh = 1 / (1 + exp((V + 87.61 [mV]) / 7.488 [mV]))
desc: Steady-state value for inactivation of non-phosphorylated INaL
dot(h) = (sh - h) / th
desc: Inactivation gate for non-phosphorylated INaL
thp = 3 * th
in [ms]
desc: Time constant for inactivation of phosphorylated INaL
shp = 1 / (1 + exp((V + 93.81 [mV]) / 7.488 [mV]))
desc: Steady state value for inactivation of phosphorylated INaL
dot(hp) = (shp - hp) / thp
desc: Inactivation gate for phosphorylated INaL
# Current
gNaL = 0.0075 [mS/uF] : Maximum conductance of INaL
in [mS/uF]
fNaL = if(cell.mode == 1, 0.6, 1) * 2.661
desc: Adjustment for different cell types
INaL = fNaL * gNaL * (V - rev.ENa) * m * ((1 - camk.f) * h + camk.f * hp)
in [A/F]
#
# Ito: Transient outward potassium current
# Unchanged in [1,2,3], see page 8 of the supplement to [4]
#
[ito]
use membrane.V
ta = 1.0515 [ms] / (one + two)
in [ms]
one = 1 / (1.2089 * (1 + exp((V - 18.4099 [mV]) / -29.3814 [mV])))
two = 3.5 / (1 + exp((V + 100 [mV]) / 29.3814 [mV]))
desc: Time constant for Ito activation
sa = 1 / (1 + exp((V - 14.34 [mV]) / -14.82 [mV]))
desc: Steady-state value for Ito activation
dot(a) = (sa - a) / ta
desc: Ito activation gate
si = 1 / (1 + exp((V + 43.94 [mV]) / 5.711 [mV]))
desc: Steady-state value for Ito inactivation
delta_epi = if(cell.mode == 1,
1 - 0.95 / (1 + exp((V + 70 [mV]) / 5 [mV])),
1)
desc: Adjustment for different cell types
tif = (4.562 [ms] + 1 [ms] / (0.3933 * exp((V + 100 [mV]) / -100 [mV]) + 0.08004 * exp((V + 50 [mV]) / 16.59 [mV]))) * delta_epi
desc: Time constant for fast component of Ito inactivation
in [ms]
tis = (23.62 [ms] + 1 [ms] / (0.001416 * exp((V + 96.52 [mV]) / -59.05 [mV]) + 1.78e-8 * exp((V + 114.1 [mV]) / 8.079 [mV]))) * delta_epi
desc: Time constant for slow component of Ito inactivation
in [ms]
dot(if) = (si - if) / tif
desc: Fast component of Ito activation
dot(is) = (si - is) / tis
desc: Slow component of Ito activation
Aif = 1 / (1 + exp((V - 213.6 [mV]) / 151.2 [mV]))
desc: Fraction of fast inactivating Ito
Ais = 1 - Aif
desc: Fraction of slow inactivating Ito
i = Aif * if + Ais * is
desc: Inactivation gate for non-phosphorylated Ito
dot(ap) = (sap - ap) / ta
sap = 1 / (1 + exp((V - 24.34 [mV]) / -14.82 [mV]))
dti_develop = 1.354 + 1e-4 / (exp((V - 167.4 [mV]) / 15.89 [mV]) + exp((V - 12.23 [mV]) / -0.2154 [mV]))
dti_recover = 1 - 0.5 / (1 + exp((V + 70 [mV]) / 20 [mV]))
tifp = dti_develop * dti_recover * tif
desc: Time constant for fast component of inactivation of phosphorylated Ito
in [ms]
tisp = dti_develop * dti_recover * tis
desc: Time constant for slot component of inactivation of phosphorylated Ito
in [ms]
dot(ifp) = (si - ifp) / tifp
desc: Fast component of inactivation of phosphorylated Ito
dot(isp) = (si - isp) / tisp
desc: Slow component of inactivation of phosphorylated Ito
ip = Aif * ifp + Ais * isp
desc: Inactivation gate for phosphorylated Ito
# Current
gto = 0.02 [mS/uF]
in [mS/uF]
desc: Maximum conductance of Ito
fto = if(cell.mode == 0, 1, 4)
Ito = fto * gto * (V - rev.EK) * ((1 - camk.f) * a * i + camk.f * ap * ip)
desc: Transient outward potassium current
in [A/F]
#
# ICaL: L-type calcium current
# ICaNa: Sodium current through the L-type calcium channel
# ICaK: Potassium current through the L-type calcium channel
# Rescaled but otherwise unchanged, see page 9 of the supplement to [4]
#
# The ICaL channel is modeled using activation, inactivation (fast and slow),
# Ca-dependent inactivation (fast and slow) and recovery from Ca-dependent
# inactivation.
# Inactivation and Ca-dependent inactivation have an alternative formulation
# for CaMKII phosphorylated channels.
#
[ical]
use membrane.V
use extra.Ca_o, extra.K_o, extra.Na_o
use calcium.Ca_ss, potassium.K_ss, sodium.Na_ss
# Activation
dot(d) = (inf - d) / tau
inf = 1 / (1 + exp((V + 3.94 [mV]) / -4.23 [mV]))
tau = 0.6 [ms] + 1 [ms] / (exp(-0.05 [1/mV] * (V + 6 [mV])) + exp(0.09 [1/mV] * (V + 14 [mV])))
in [ms]
# Voltage-dependent inactivation (fast and slow)
f_inf = 1 / (1 + exp((V + 19.58 [mV]) / 3.696 [mV]))
ff_tau = 7 [ms] + 1 [ms] / (0.0045 * exp((V + 20 [mV]) / -10 [mV]) + 0.0045 * exp((V + 20 [mV]) / 10 [mV]))
in [ms]
fs_tau = 1000 [ms] + 1 [ms] / (3.5e-5 * exp((V + 5 [mV]) / -4 [mV]) + 3.5e-5 * exp((V + 5 [mV]) / 6 [mV]))
in [ms]
dot(ff) = (f_inf - ff) / ff_tau
dot(fs) = (f_inf - fs) / fs_tau
Aff = 0.6 : Fraction of channels with fast inactivation
f = Aff * ff + (1 - Aff) * fs : Total voltage-dependent inactivation
# Calcium-dependent inactivation of non-phosphorylated channels
fcaf_tau = 7 [ms] + 1 [ms] / (0.04 * exp((V - 4 [mV]) / -7 [mV]) + 0.04 * exp((V - 4 [mV]) / 7 [mV]))
in [ms]
fcas_tau = 100 [ms] + 1 [ms] / (0.00012 * exp(V / -3 [mV]) + 0.00012 * exp(V / 7 [mV]))
in [ms]
dot(fcaf) = (f_inf - fcaf) / fcaf_tau
dot(fcas) = (f_inf - fcas) / fcas_tau
Afcaf = 0.3 + 0.6 / (1 + exp((V - 10 [mV]) / 10 [mV]))
desc: Fraction of ICaL channels with fast Ca-dependent inactivation
fca = Afcaf * fcaf + (1 - Afcaf) * fcas
desc: Ca-dependent inactivation of non-phosphorylated ICaL
# Recovery from Ca-dependent inactivation
jca_tau = 75 [ms]
in [ms]
dot(jca) = (f_inf - jca) / jca_tau
desc: Recovery from Ca-dependent inactivation
# Voltage-dependent inactivation of phosphorylated channels
dot(ffp) = (f_inf - ffp) / (2.5 * ff_tau)
fp = Aff * ffp + (1 - Aff) * fs
desc: Voltage-dependent inactivation of phosphorylated ICaL
# Calcium-dependent inactivation of phosphorylated channels
dot(fcafp) = (f_inf - fcafp) / (2.5 * fcaf_tau)
fcap = Afcaf * fcafp + (1 - Afcaf) * fcas
desc: Ca-dependent inactivation of phosphorylated channels
# Fraction of channels in Ca-dependent inactivation mode
Kmn = 0.002 [mM] in [mM]
k2n = 1000 [1/ms] in [1/ms]
km2n = jca * 1 [1/ms] in [1/ms]
anca = 1 / (k2n / km2n + (1 + Kmn / Ca_ss)^4)
dot(nca) = anca * k2n - nca * km2n
desc: Fraction of channels in Ca-dependent inactivation mode
# Permeabilities
vf = V * phys.FRT
vff = V * phys.FFRT
in [C/mol]
evf = exp(vf)
evf2 = exp(2 * vf)
PhiCa = if(abs(vf) < 1e-6,
2 * phys.F * (Ca_ss - 0.341 * Ca_o),
4 * vff * (Ca_ss * evf2 - 0.341 * Ca_o) / (evf2 - 1))
in [mC/L]
PhiNa = if(abs(vf) < 1e-6,
0.75 * phys.F * (Na_ss - Na_o),
0.75 * vff * (Na_ss * evf - Na_o) / (evf - 1))
in [mC/L]
PhiK = if(abs(vf) < 1e-6,
0.75 * phys.F * (K_ss - K_o),
0.75 * vff * (K_ss * evf - K_o) / (evf - 1))
in [mC/L]
PCa_base = 0.0001 [L/F/ms]
in [L/F/ms]
label g_CaL
PCa = PCa_base * piecewise(cell.mode == 0, 1, cell.mode == 1, 1.2, 2.5) * 1.007
in [L/F/ms]
PNa = 0.00125 * PCa
in [L/F/ms]
PK = 3.574e-4 * PCa
in [L/F/ms]
Pp = 1.1
desc: Permeability multiplication factor for phosphorylated channels
# Conductivity (weighted sum of gates)
g = d * ((f * (1 - nca) + jca * fca * nca) * (1 - camk.f) +
(fp * (1 - nca) + jca * fcap * nca) * camk.f * Pp)
# Current
ICaLCa = g * PCa * PhiCa
in [A/F]
desc: Ca-component of L-type calcium current
ICaLNa = g * PNa * PhiNa
in [A/F]
desc: Na-component of L-type calcium current
ICaLK = g * PK * PhiK
in [A/F]
desc: K-component of L-type calcium current
ICaL_tot = ICaLCa + ICaLK + ICaLNa
in [A/F]
label I_CaL
#
# IKr: Rapid delayed rectifier potassium current
# New formulation, described in [1,2].
#
[ikr]
use membrane.V
# Rate parameters
a1 = 0.0264 [1/ms] in [1/ms]
a2 = 4.986e-6 [1/ms] in [1/ms]
a3 = 0.001214 [1/ms] in [1/ms]
a4 = 1.854e-5 [1/ms] in [1/ms]
a11 = 0.0007868 [1/ms] in [1/ms]
a21 = 5.455e-6 [1/ms] in [1/ms]
a31 = 0.005509 [1/ms] in [1/ms]
a41 = 0.001416 [1/ms] in [1/ms]
a51 = 0.4492 [1/ms] in [1/ms]
a52 = 0.3181 [1/ms] in [1/ms]
a53 = 0.149 [1/ms] in [1/ms]
a61 = 0.01241 [1/ms] in [1/ms]
a62 = 0.3226 [1/ms] in [1/ms]
a63 = 0.008978 [1/ms] in [1/ms]
b1 = 4.631e-5 [1/mV] in [1/mV]
b2 = -0.004226 [1/mV] in [1/mV]
b3 = 0.008516 [1/mV] in [1/mV]
b4 = -0.04641 [1/mV] in [1/mV]
b11 = 1.535e-8 [1/mV] in [1/mV]
b21 = -0.1688 [1/mV] in [1/mV]
b31 = 7.771e-9 [1/mV] in [1/mV]
b41 = -0.02877 [1/mV] in [1/mV]
b51 = 0.008595 [1/mV] in [1/mV]
b52 = 3.613e-8 [1/mV] in [1/mV]
b53 = 0.004668 [1/mV] in [1/mV]
b61 = 0.1725 [1/mV] in [1/mV]
b62 = -6.575e-4 [1/mV] in [1/mV]
b63 = -0.02215 [1/mV] in [1/mV]
# Temperature parameters
Temp = 37
q1 = 4.843
q2 = 4.23
q3 = 4.962
q4 = 3.769
q11 = 4.942
q21 = 4.156
q31 = 4.22
q41 = 1.459
q51 = 5
q52 = 4.663
q53 = 2.412
q61 = 5.568
q62 = 5
q63 = 5.682
# Drug binding parameters
Kt = 0 [1/ms] in [1/ms]
Ku = 0 [1/ms] in [1/ms]
Vhalf = 1 [mV] in [mV]
halfmax = 1
n = 1
Kmax = 0
D = 0 [mM]
in [mM]
desc: Drug concentration
# Rates
k1 = a1 * exp(b1 * V) * exp((Temp - 20) * log(q1) / 10)
in [1/ms]
k2 = a2 * exp(b2 * V) * exp((Temp - 20) * log(q2) / 10)
in [1/ms]
k3 = a3 * exp(b3 * V) * exp((Temp - 20) * log(q3) / 10)
in [1/ms]
k4 = a4 * exp(b4 * V) * exp((Temp - 20) * log(q4) / 10)
in [1/ms]
k11 = a11 * exp(b11 * V) * exp((Temp - 20) * log(q11) / 10)
in [1/ms]
k21 = a21 * exp(b21 * V) * exp((Temp - 20) * log(q21) / 10)
in [1/ms]
k31 = a31 * exp(b31 * V) * exp((Temp - 20) * log(q31) / 10)
in [1/ms]
k41 = a41 * exp(b41 * V) * exp((Temp - 20) * log(q41) / 10)
in [1/ms]
k51 = a51 * exp(b51 * V) * exp((Temp - 20) * log(q51) / 10)
in [1/ms]
k52 = a52 * exp(b52 * V) * exp((Temp - 20) * log(q52) / 10)
in [1/ms]
k53 = a53 * exp(b53 * V) * exp((Temp - 20) * log(q53) / 10)
in [1/ms]
k61 = a61 * exp(b61 * V) * exp((Temp - 20) * log(q61) / 10)
in [1/ms]
k62 = a62 * exp(b62 * V) * exp((Temp - 20) * log(q62) / 10)
in [1/ms]
k63 = a63 * exp(b63 * V) * exp((Temp - 20) * log(q63) / 10)
in [1/ms]
r1 = if(D == 0 [mM], 0 [1/ms], Kmax * Ku * exp(n * log(D / 1 [mM])) / (exp(n * log(D / 1 [mM])) + halfmax))
in [1/ms]
r2 = Ku * k53 / k63
in [1/ms]
r3 = Kt / (1 + exp(-(V - Vhalf) / 6.789 [mV]))
in [1/ms]
# States
dot(IC1) = -(k11 * IC1 - k21 * IC2) + (k51 * C1 - k61 * IC1)
dot(IC2) = (k11 * IC1 - k21 * IC2) - (k3 * IC2 - k4 * IO) + (k52 * C2 - k62 * IC2)
dot(IO) = (k3 * IC2 - k4 * IO) + (k53 * O - k63 * IO) - (r1 * IO - r2 * IObound)
dot(C1) = -(k1 * C1 - k2 * C2) - (k51 * C1 - k61 * IC1)
dot(C2) = (k1 * C1 - k2 * C2) - (k31 * C2 - k41 * O) - (k52 * C2 - k62 * IC2)
dot(O) = (k31 * C2 - k41 * O) - (k53 * O - k63 * IO) - (r1 * O - Ku * Obound)
dot(IObound) = (r1 * IO - r2 * IObound) + (r3 * Cbound - Kt * IObound)
dot(Obound) = (r1 * O - Ku * Obound) + (r3 * Cbound - Kt * Obound)
dot(Cbound) = -(r3 * Cbound - Kt * Obound) - (r3 * Cbound - Kt * IObound)
# Current
fKr = piecewise(cell.mode == 0, 1, cell.mode == 1, 1.3, 0.8)
gKr = 4.65854545454545618e-2 [mS/uF]
in [mS/uF]
label g_Kr
IKr = fKr * gKr * sqrt(extra.K_o / 5.4 [mM]) * O * (V - rev.EK)
in [A/F]
#
# IKs: Slow delayed rectifier potassium current
# Rescaled but otherwise unchanged, see page 11 of the supplement to [4]
#
# Modelled with two activation gates
#
[iks]
use membrane.V
sx = 1 / (1 + exp((V + 11.6 [mV]) / -8.932 [mV]))
desc: Steady-state value for activation of IKs
dot(x1) = (sx - x1) / tau
desc: Slow, low voltage IKs activation
tau = 817.3 [ms] + 1 [ms] / (2.326e-4 * exp((V + 48.28 [mV]) / 17.8 [mV]) + 0.001292 * exp((V + 210 [mV]) / -230 [mV]))
desc: Time constant for slow, low voltage IKs activation
in [ms]
dot(x2) = (sx - x2) / tau
desc: Fast, high voltage IKs activation
tau = 1 [ms] / (0.01 * exp((V - 50 [mV]) / 20 [mV]) + 0.0193 * exp((V + 66.54 [mV]) / -31 [mV]))
desc: Time constant for fast, high voltage IKs activation
in [ms]
KsCa = 1 + 0.6 / (1 + (3.8e-5 [mM] / calcium.Ca_i)^1.4)
fKs = if(cell.mode == 1, 1.4, 1) * 1.87
gKs = 0.0034 [mS/uF]
in [mS/uF]
IKs = fKs * gKs * KsCa * x1 * x2 * (V - rev.EKs)
desc: Slow delayed rectifier potassium current
in [A/F]
#
# IK1: Inward rectifier potassium current
# Rescaled but otherwise unchanged, see page 12 of the supplement to [4]
#
# Modelled with an activation channel and an instantaneous inactivation channel
#
[ik1]
use membrane.V
use extra.K_o
dot(x) = (inf - x) / tau
desc: Time-dependent inactivation at hyperpolarised (low) potentials
inf = 1 / (1 + exp(-(V + 2.5538 [mV/mM] * K_o + 144.59 [mV]) / (1.5692 [mV/mM] * K_o + 3.8115 [mV])))
tau = 122.2 [ms] / (exp((V + 127.2 [mV]) / -20.36 [mV]) + exp((V + 236.8 [mV]) / 69.33 [mV]))
in [ms]
r = 1 / (1 + exp((V + 105.8 [mV] - 2.6 [mV/mM] * K_o) / 9.493 [mV]))
desc: Instantaneous rectification
fK1 = piecewise(cell.mode == 0, 1, cell.mode == 1, 1.2, 1.3) * 1.698
gK1 = 0.1908 [mS/uF]
in [mS/uF]
desc: Maximum conductance for IK1
IK1 = fK1 * gK1 * sqrt(K_o / 1 [mM]) * r * x * (V - rev.EK)
in [A/F]
desc: Inward rectifier potassium current
#
# INaCa: Sodium/calcium exchange current
# Unchanged in [1,2,3], see page 12 of the supplement to [4]
#
# Adapted from Kang & Hilgemann 2004.
#
[inaca]
use extra.Na_o, extra.Ca_o
use sodium.Na_i, calcium.Ca_i
kna1 = 15 [mM]
in [mM]
kna2 = 5 [mM]
in [mM]
kna3 = 88.12 [mM]
in [mM]
kasymm = 12.5
wna = 6e4 [1/s]
in [1/s]
wca = 6e4 [1/s]
in [1/s]
wnaca = 5e3 [1/s]
in [1/s]
kcaon = 1.5e6 [1/mM/s]
in [1/mM/s]
kcaoff = 5e3 [1/s]
in [1/s]
qna = 0.5224
qca = 0.167
hca = exp(qca * membrane.V * phys.FRT)
hna = exp(qna * membrane.V * phys.FRT)
# h parameters
h1 = 1 + Na_i / kna3 * (1 + hna)
h2 = Na_i * hna / (kna3 * h1)
h3 = 1 / h1
h4 = 1 + Na_i / kna1 * (1 + Na_i / kna2)
h5 = Na_i * Na_i / (h4 * kna1 * kna2)
h6 = 1 / h4
h7 = 1 + Na_o / kna3 * (1 + 1 / hna)
h8 = Na_o / (kna3 * hna * h7)
h9 = 1 / h7
h10 = kasymm + 1 + Na_o / kna1 * (1 + Na_o / kna2)
h11 = Na_o * Na_o / (h10 * kna1 * kna2)
h12 = 1 / h10
# k parameters
k1 = h12 * Ca_o * kcaon
in [1/s]
k2 = kcaoff
in [1/s]
k3p = h9 * wca
in [1/s]
k3pp = h8 * wnaca
in [1/s]
k3 = k3p + k3pp
in [1/s]
k4p = h3 * wca / hca
in [1/s]
k4pp = h2 * wnaca
in [1/s]
k4 = k4p + k4pp
in [1/s]
k5 = kcaoff
in [1/s]
k6 = h6 * Ca_i * kcaon
in [1/s]
k7 = h5 * h2 * wna
in [1/s]
k8 = h8 * h11 * wna
in [1/s]
x1 = k2 * k4 * (k7 + k6) + k5 * k7 * (k2 + k3)
in [s^-3]
x2 = k1 * k7 * (k4 + k5) + k4 * k6 * (k1 + k8)
in [s^-3]
x3 = k1 * k3 * (k7 + k6) + k8 * k6 * (k2 + k3)
in [s^-3]
x4 = k2 * k8 * (k4 + k5) + k3 * k5 * (k1 + k8)
in [s^-3]
E1 = x1 / (x1 + x2 + x3 + x4)
E2 = x2 / (x1 + x2 + x3 + x4)
E3 = x3 / (x1 + x2 + x3 + x4)
E4 = x4 / (x1 + x2 + x3 + x4)
KmCaAct = 150e-6 [mM]
in [mM]
allo = 1 / (1 + (KmCaAct / Ca_i)^2)
JncxNa = 3 * (E4 * k7 - E1 * k8) + E3 * k4pp - E2 * k3pp
in [1/s]
JncxCa = E2 * k2 - E1 * k1
in [1/s]
fNaCa = piecewise(cell.mode == 0, 1, cell.mode == 1, 1.1, 1.4)
gNaCa = 0.0008 [C/F]
in [C/F]
INaCa = 0.8 * fNaCa * gNaCa * allo * (JncxNa + 2 * JncxCa)
in [A/F]
desc: Sodium/calcium exchange current
#
# INaCa_ss: Sodium/calcium exchanger current into the L-type subspace
# Unchanged in [1,2,3], see page 12 of the supplement to [4]
#
[inacass]
use extra.Na_o, extra.Ca_o
use sodium.Na_ss, calcium.Ca_ss
use inaca.kna1, inaca.kna2, inaca.kna3, inaca.hna
# Parameters h
h1 = 1 + Na_ss / kna3 * (1 + hna)
h2 = Na_ss * hna / (kna3 * h1)
h3 = 1 / h1
h4 = 1 + Na_ss / kna1 * (1 + Na_ss / kna2)
h5 = Na_ss * Na_ss / (h4 * kna1 * kna2)
h6 = 1 / h4
h7 = 1 + Na_o / kna3 * (1 + 1 / hna)
h8 = Na_o / (kna3 * hna * h7)
h9 = 1 / h7
h10 = inaca.kasymm + 1 + Na_o / kna1 * (1 + Na_o / kna2)
h11 = Na_o * Na_o / (h10 * kna1 * kna2)
h12 = 1 / h10
# Parameters k
k1 = h12 * Ca_o * inaca.kcaon
in [1/s]
k2 = inaca.kcaoff
in [1/s]
k3p = h9 * inaca.wca
in [1/s]
k3pp = h8 * inaca.wnaca
in [1/s]
k3 = k3p + k3pp
in [1/s]
k4p = h3 * inaca.wca / inaca.hca
in [1/s]
k4pp = h2 * inaca.wnaca
in [1/s]
k4 = k4p + k4pp
in [1/s]
k5 = inaca.kcaoff
in [1/s]
k6 = h6 * Ca_ss * inaca.kcaon
in [1/s]
k7 = h5 * h2 * inaca.wna
in [1/s]
k8 = h8 * h11 * inaca.wna
in [1/s]
x1 = k2 * k4 * (k7 + k6) + k5 * k7 * (k2 + k3)
in [s^-3]
x2 = k1 * k7 * (k4 + k5) + k4 * k6 * (k1 + k8)
in [s^-3]
x3 = k1 * k3 * (k7 + k6) + k8 * k6 * (k2 + k3)
in [s^-3]
x4 = k2 * k8 * (k4 + k5) + k3 * k5 * (k1 + k8)
in [s^-3]
E1 = x1 / (x1 + x2 + x3 + x4)
E2 = x2 / (x1 + x2 + x3 + x4)
E3 = x3 / (x1 + x2 + x3 + x4)
E4 = x4 / (x1 + x2 + x3 + x4)
allo = 1 / (1 + (inaca.KmCaAct / Ca_ss)^2)
JncxNa = 3 * (E4 * k7 - E1 * k8) + E3 * k4pp - E2 * k3pp
in [1/s]
JncxCa = E2 * k2 - E1 * k1
in [1/s]
INaCa_ss = 0.2 * inaca.fNaCa * inaca.gNaCa * allo * (JncxNa + 2 * JncxCa)
in [A/F]
desc: Sodium/calcium exchange current into the T-Tubule subspace
INaCa_tot = inaca.INaCa + INaCa_ss
in [A/F]
#
# INaK: Sodium/potassium ATPase current
# Based on Smith & Crampin 2004 https://doi.org/10.1016/j.pbiomolbio.2004.01.010
# The formulation below was corrected from the O'Hara implementation, see [7].
#
# Unchanged in [1,2,3], see page 14 of the supplement to [4]
#
[inak]
use membrane.V
use extra.Na_o, sodium.Na_i
use extra.K_o, potassium.K_i
MgATP = 9.8 [mM]
in [mM]
desc: Intracellular MgATP concentration
MgADP = 0.05 [mM]
in [mM]
desc: Intracellular MgADP concentration
eP = 4.2 [mM]
in [mM]
desc: The total concentration of inorganic phosphate (free + bound)
H = 1e-4 [mM]
in [mM]
desc: Intracellular H+
note: Corrected to 1e-7 [M] (pH 7) from original value of 1e-7 [mM]
Khp = 1.698e-7 [mM]
in [mM]
desc: Dissociation constant relating [HPi] and [H]
Kxkur = 292 [mM]
in [mM]
desc: Dissociation constant relating [KPi] and [K]i
Knap = 224 [mM]
in [mM]
desc: Dissociation constant relating [NaPi] and [Na]i
k1p = 949.5 [1/s]
in [1/s]
k1m = 182.4 [1/s/mM]
in [1/s/mM]
k2p = 687.2 [1/s]
in [1/s]
k2m = 39.4 [1/s]
in [1/s]
k3p = 1899 [1/s]
in [1/s]
k3m = 79300 [1/s/mM^2]
in [1/s/mM^2]
k4p = 639 [1/s]
in [1/s]
k4m = 40 [1/s]
in [1/s]
Knao0 = 27.78 [mM]
in [mM]
desc: Extracellular Na+ dissociation constant at 0mV
Knai0 = 9.073 [mM]
in [mM]
desc: Intracellular Na+ dissociation constant at 0mV
Kko = 0.3582 [mM]
in [mM]
desc: Extracellular K+ dissociation constant
Kki = 0.5 [mM]
in [mM]
desc: Intracellular K+ dissociation constant
Kmgatp = 1.698e-7 [mM]
in [mM]
desc: Intracellular MgATP dissociation constant
delta = -0.155
desc: """A constant that "determines how the voltage dependence is
partitioned between intra and extracellular Na+ dissociation
reactions."""
# Voltage-dependent Na+ dissociation constants
Knai = Knai0 * exp(delta * V * phys.FRT / 3)
in [mM]
Knao = Knao0 * exp((1 - delta) * V * phys.FRT / 3)
in [mM]
# Forward (clockwise) rates
a1 = k1p * (Na_i / Knai)^3 / ((1 + Na_i / Knai)^3 + (1 + K_i / Kki)^2 - 1)
in [1/s]
a2 = k2p
in [1/s]
a3 = k3p * (K_o / Kko)^2 / ((1 + Na_o / Knao)^3 + (1 + K_o / Kko)^2 - 1)
in [1/s]
a4 = k4p * MgATP / Kmgatp / (1 + MgATP / Kmgatp)
in [1/s]
# Backward (anticlockwise) rates
b1 = k1m * MgADP
in [1/s]
b2 = k2m * (Na_o / Knao)^3 / ((1 + Na_o / Knao)^3 + (1 + K_o / Kko)^2 - 1)
in [1/s]
b3 = k3m * P * H / (1 + MgATP / Kmgatp)
in [1/s]
b4 = k4m * (K_i / Kki)^2 / ((1 + Na_i / Knai)^3 + (1 + K_i / Kki)^2 - 1)
in [1/s]
P = eP / (1 + H / Khp + Na_i / Knap + K_i / Kxkur)
in [mM]
x1 = a4 * a1 * a2 + b1 * b4 * b3 + a2 * b4 * b3 + b3 * a1 * a2
in [s^-3]
note: Corrected from the original code (b1 in second term)
x2 = b2 * b1 * b4 + a1 * a2 * a3 + a3 * b1 * b4 + a2 * a3 * b4
in [s^-3]
x3 = a2 * a3 * a4 + b3 * b2 * b1 + b2 * b1 * a4 + a3 * a4 * b1
in [s^-3]
x4 = b4 * b3 * b2 + a3 * a4 * a1 + b2 * a4 * a1 + b3 * b2 * a1
in [s^-3]
# Cycle rate (obtained by writing any one of the four flux equations: they all
# give the same result so that the pump count is conserved).
r = (a1 * a2 * a3 * a4 - b1 * b2 * b3 * b4) / (x1 + x2 + x3 + x4)
in [1/s]
# Current
JnakNa = 3 * r
in [1/s]
JnakK = -2 * r
in [1/s]
fNaK = piecewise(cell.mode == 0, 1, cell.mode == 1, 0.9, 0.7)
PNaK = 30 [C/F]
in [C/F]
INaK = fNaK * PNaK * (JnakNa + JnakK)
in [A/F]
desc: Sodium/potassium ATPase current
#
# IKb: Background potassium current
# Unchanged in [1,2,3], see page 15 of the supplement to [4]
#
[ikb]
use membrane.V
xkb = 1 / (1 + exp((V - 14.48 [mV]) / -18.34 [mV]))
fKb = if(cell.mode == 1, 0.6, 1)
gKb = 0.003 [mS/uF]
in [mS/uF]
IKb = fKb * gKb * xkb * (V - rev.EK)
in [A/F]
desc: Background potassium current
#
# INab: Background sodium current
# Unchanged in [1,2,3], see page 15 of the supplement to [4]
#
[inab]
use membrane.V
PNab = 3.75e-10 [L/F/ms]
in [L/F/ms]
INab = PNab * V * phys.FFRT * (sodium.Na_i * evf - extra.Na_o) / (evf - 1)
in [A/F]
evf = exp(V * phys.FRT)
desc: Background sodium current
#
# ICab: Background calcium current
# Unchanged in [1,2,3], see page 15 of the supplement to [4]
#
[icab]
use membrane.V
PCab = 2.5e-8 [L/F/ms]
in [L/F/ms]
ICab = PCab * 4 * V * phys.FFRT * (calcium.Ca_i * evf2 - 0.341 * extra.Ca_o) / (evf2 - 1)
in [A/F]
evf2 = exp(2 * V * phys.FRT)
desc: Background calcium current
#
# IpCa: Sarcolemmal calcium pump current
# Unchanged in [1,2,3], see page 15 of the supplement to [4]
#
[ipca]
gpCa = 0.0005 [A/F]
in [A/F]
IpCa = gpCa * calcium.Ca_i / (0.0005 [mM] + calcium.Ca_i)
desc: Sarcolemmal calcium pump current
in [A/F]