Skip to content

Commit

Permalink
Tweaks to o'hara based models
Browse files Browse the repository at this point in the history
  • Loading branch information
MichaelClerx committed Aug 16, 2024
1 parent b56541a commit 84e82f0
Show file tree
Hide file tree
Showing 4 changed files with 305 additions and 313 deletions.
135 changes: 77 additions & 58 deletions c/bartolucci-2020.mmt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[[model]]
name: bartolucci-2020
version: 20240815
version: 20240816
mmt_authors: Michael Clerx
desc: """
The 2020 "BPS" model of the human ventricular AP by Bartolucci et al. [1].
Expand Down Expand Up @@ -121,8 +121,8 @@ pace = 0 bind pace
#
[membrane]
dot(V) = -(i_ion + stimulus.i_stim)
label membrane_potential
in [mV]
label membrane_potential
i_ion = (+ ina.INa
+ inal.INaL
+ ito.Ito
Expand Down Expand Up @@ -230,7 +230,7 @@ ENa = phys.RTF * log(extra.Na_o / sodium.Na_i)
desc: Reversal potential for Sodium currents
EK = phys.RTF * log(extra.K_o / potassium.K_i)
in [mV]
desc: Reversal potential for Potassium currents
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))
Expand Down Expand Up @@ -393,7 +393,7 @@ gto = 0.02 [mS/uF]
fto = if(cell.mode == 0, 1, 4)
# Everything except the V - EK below is shifted by 8mV
Ito = fto * gto * (membrane.V - rev.EK) * ((1 - camk.f) * a * i + camk.f * ap * ip)
desc: Transient outward Potassium current
desc: Transient outward potassium current
in [A/F]

#
Expand Down Expand Up @@ -467,14 +467,14 @@ dot(CCa) = beta * OCa + psi * I2Ca - (omega + alpha) * CCa + r_up * C - r_down *
OCa = 1 - CCa - I1Ca - I2Ca - C - I1 - I2 - O
# Permeability
fCa = piecewise(cell.mode == 0, 1, cell.mode == 1, 1.4, 2)
PCa_base = 0.0001 [L/ms/F]
in [L/ms/F]
PCa_base = 0.0001 [L/F/ms]
in [L/F/ms]
PCa = 0.9 * fCa * PCa_base
in [L/ms/F]
in [L/F/ms]
PNa = 0.00125 * PCa
in [L/ms/F]
in [L/F/ms]
PK = 0.0003574 * PCa
in [L/ms/F]
in [L/F/ms]
PhiCa = 4 * V * FFRT * (1.2 * Ca_ss * exp(2 * V * FRT) - 0.341 * Ca_o) / (exp(2 * V * FRT) - 1)
in [mC/L]
PhiNa = V * FFRT * (0.75 * Na_ss * exp(V * FRT) - 0.75 * Na_o) / (exp(V * FRT) - 1)
Expand Down Expand Up @@ -637,12 +637,12 @@ gKs = 0.0034 [mS/uF]
in [mS/uF]
# Everything except V - E is shifted by EKshift
IKs = fKs * gKs * KsCa * x1 * x2 * (membrane.V - rev.EKs)
desc: Slow delayed rectifier Potassium current
desc: Slow delayed rectifier potassium current
in [A/F]

#
# IK1: Inward rectifier potassium current
# Modified r gate, rescaled, and with the EKshift applied.
# Modified rectification, rescaled, and with the EKshift applied.
#
[ik1]
use extra.K_o
Expand All @@ -662,14 +662,13 @@ gK1 = 0.1908 [mS/uF]
# Potential is shifted everywhere except in V - E
IK1 = fK1 * gK1 * sqrt(K_o / 1 [mM]) * r * x * (membrane.V - rev.EK)
in [A/F]
desc: Inward rectifier Potassium current
desc: Inward rectifier potassium current

#
# INaCa: Sodium/calcium exchange current
# Rescaled but otherwise unchanged from [3]
#
[inaca]
use membrane.V
use extra.Na_o, extra.Ca_o
use sodium.Na_i, calcium.Ca_i
kna1 = 15 [mM]
Expand All @@ -691,9 +690,9 @@ kcaoff = 5e3 [1/s]
in [1/s]
qna = 0.5224
qca = 0.167
hca = exp(qca * V * phys.FRT)
hna = exp(qna * V * phys.FRT)
# Parameters h
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
Expand All @@ -706,7 +705,7 @@ h9 = 1 / h7
h10 = kasymm + 1 + Na_o / kna1 * (1 + Na_o / kna2)
h11 = Na_o * Na_o / (h10 * kna1 * kna2)
h12 = 1 / h10
# Parameters k
# k parameters
k1 = h12 * Ca_o * kcaon
in [1/s]
k2 = kcaoff
Expand Down Expand Up @@ -762,7 +761,6 @@ INaCa = 0.8 * fNaCa * gNaCa * allo * (JncxNa + 2 * JncxCa)
# Rescaled (via fNaCa) but otherwise unchanged from [3]
#
[inacass]
use membrane.V
use extra.Na_o, extra.Ca_o
use sodium.Na_ss, calcium.Ca_ss
use inaca.kna1, inaca.kna2, inaca.kna3, inaca.hna
Expand Down Expand Up @@ -831,8 +829,30 @@ INaCa_ss = 0.2 * inaca.fNaCa * inaca.gNaCa * allo * (JncxNa + 2 * JncxCa)
#
[inak]
use membrane.V
use extra.Na_o, sodium.Na_i, sodium.Na_ss
use extra.K_o, potassium.K_i, potassium.K_ss
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]
Expand All @@ -849,54 +869,50 @@ k4p = 639 [1/s]
in [1/s]
k4m = 40 [1/s]
in [1/s]
Knai0 = 9.073 [mM]
in [mM]
Knao0 = 27.78 [mM]
in [mM]
Kki = 0.5 [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]
delta = -0.155
MgADP = 0.05 [mM]
in [mM]
MgATP = 9.8 [mM]
desc: Extracellular K+ dissociation constant
Kki = 0.5 [mM]
in [mM]
desc: Intracellular K+ dissociation constant
Kmgatp = 1.698e-7 [mM]
in [mM]
H = 1e-4 [mM]
in [mM]
note: Corrected to 1e-7 [M] (pH 7) from original value of 1e-7 [mM]
eP = 4.2 [mM]
in [mM]
Khp = 1.698e-7 [mM]
in [mM]
Knap = 224 [mM]
in [mM]
Kxkur = 292 [mM]
in [mM]
P = eP / (1 + H / Khp + Na_i / Knap + K_i / Kxkur)
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]
b1 = k1m * MgADP
in [1/s]
a2 = k2p
in [1/s]
b2 = k2m * (Na_o / Knao)^3 / ((1 + Na_o / Knao)^3 + (1 + K_o / Kko)^2 - 1)
in [1/s]
a3 = k3p * (K_o / Kko)^2 / ((1 + Na_o / Knao)^3 + (1 + K_o / Kko)^2 - 1)
in [1/s]
b3 = k3m * P * H / (1 + MgATP / Kmgatp)
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)
Expand All @@ -906,8 +922,11 @@ 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
Expand All @@ -917,7 +936,7 @@ PNaK = 30 [C/F]
in [C/F]
INaK = fNaK * PNaK * (JnakNa + JnakK)
in [A/F]
desc: Sodium/Potassium ATPase current
desc: Sodium/potassium ATPase current

#
# IKb: Background potassium current
Expand All @@ -931,29 +950,29 @@ gKb = 0.003 [mS/uF]
in [mS/uF]
IKb = fKb * gKb * xkb * (V - rev.EK)
in [A/F]
desc: Background Potassium current
desc: Background potassium current

#
# INab: Background sodium current
# Unchanged from [3]
#
[inab]
use membrane.V
PNab = 3.75e-10 [L/ms/F]
in [L/ms/F]
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
desc: Background sodium current

#
# ICab: Background calcium current
# Rescaled and GHK equation modified from [3]
#
[icab]
use membrane.V
PCab = 2.5e-8 [L/ms/F]
in [L/ms/F]
PCab = 2.5e-8 [L/F/ms]
in [L/F/ms]
ICab = PCab * 16 * V * phys.FFRT * (1.2 * calcium.Ca_i * evf2 - 0.341 * extra.Ca_o) / (evf2 - 1)
in [A/F]
evf2 = exp(2 * V * phys.FRT)
Expand All @@ -964,10 +983,10 @@ ICab = PCab * 16 * V * phys.FFRT * (1.2 * calcium.Ca_i * evf2 - 0.341 * extra.Ca
# Unchanged from [3]
#
[ipca]
GpCa = 0.0005 [A/F]
gpCa = 0.0005 [A/F]
in [A/F]
IpCa = GpCa * calcium.Ca_i / (0.0005 [mM] + calcium.Ca_i)
desc: Sarcolemmal Calcium pump current
IpCa = gpCa * calcium.Ca_i / (0.0005 [mM] + calcium.Ca_i)
desc: Sarcolemmal calcium pump current
in [A/F]

#
Expand Down Expand Up @@ -1053,7 +1072,7 @@ use cell.AFC, cell.vss, cell.vmyo
INa_tot = ina.INa + inal.INaL + inab.INab + 3 * inaca.INaCa + 3 * inak.INaK
in [A/F]
dot(Na_i) = -INa_tot * AFC / vmyo + diff.JdiffNa * vss / vmyo
desc: Intracellular Potassium concentration
desc: Intracellular potassium concentration
in [mM]
INa_ss_tot = ical.ICaNa + 3 * inacass.INaCa_ss
in [A/F]
Expand All @@ -1078,7 +1097,7 @@ IK_tot = (
IK_ss_tot = ical.ICaK
in [A/F]
dot(K_i) = -(IK_tot + stimulus.i_stim) * AFC / vmyo + diff.JdiffK * vss / vmyo
desc: Intracellular Potassium concentration
desc: Intracellular potassium concentration
in [mM]
dot(K_ss) = -IK_ss_tot * AFC / vss - diff.JdiffK
desc: Potassium concentration in the T-Tubule subspace
Expand Down
Loading

0 comments on commit 84e82f0

Please sign in to comment.