/* * Model Status * * This model is known to run in OpenCell and COR to reproduce * the output shown in the publication. The units have been checked * and they are consistent. * * Model Structure * * ABSTRACT: Mathematical modeling of the cardiac action potential * has proven to be a powerful tool for illuminating various aspects * of cardiac function, including cardiac arrhythmias. However, * no currently available detailed action potential model accurately * reproduces the dynamics of the cardiac action potential and * intracellular calcium (Ca(i)) cycling at rapid heart rates relevant * to ventricular tachycardia and fibrillation. The aim of this * study was to develop such a model. Using an existing rabbit * ventricular action potential model, we modified the L-type calcium * (Ca) current (I(Ca,L)) and Ca(i) cycling formulations based * on new experimental patch-clamp data obtained in isolated rabbit * ventricular myocytes, using the perforated patch configuration * at 35-37 degrees C. Incorporating a minimal seven-state Markovian * model of I(Ca,L) that reproduced Ca- and voltage-dependent kinetics * in combination with our previously published dynamic Ca(i) cycling * model, the new model replicates experimentally observed action * potential duration and Ca(i) transient alternans at rapid heart * rates, and accurately reproduces experimental action potential * duration restitution curves obtained by either dynamic or S1S2 * pacing. * * model diagram * * [[Image file: mahajan_2008.png]] * * Schematic diagram of the Mahajan et al model, featuring whole-cell * model showing basic elements of Ca cycling machinery and membrane * ion currents, as well as a seven-state Markovian model of the * L-type Ca channel. * * The original publication reference is cited below: * * A rabbit ventricular action potential model replicating cardiac * dynamics at rapid heart rates, Mahajan A, Shiferaw Y, Sato D, * Baher A, Olcese R, Xie LH, Yang MJ, Chen PS, Restrepo JG, Karma * A, Garfinkel A, Qu Z, Weiss JN, 2008 Biophysical Journal, 94(2):392-410 * PubMed ID: 18160660 */ import nsrunit; unit conversion on; unit u_per_m=.001 dimensionless; unit ms=.001 second^1; unit per_ms=1E3 second^(-1); unit mV=.001 kilogram^1*meter^2*second^(-3)*ampere^(-1); unit per_mV=1E3 kilogram^(-1)*meter^(-2)*second^3*ampere^1; unit uS_per_nF=1E3 second^(-1); unit nA_per_nF=1 kilogram^1*meter^2*second^(-4)*ampere^(-1); // unit molar predefined unit mM=1 meter^(-3)*mole^1; unit uM=1E-3 meter^(-3)*mole^1; unit mM4=1 meter^(-12)*mole^4; unit mV_per_uM=1 kilogram^1*meter^5*second^(-3)*ampere^(-1)*mole^(-1); unit uM_per_ms=1 meter^(-3)*second^(-1)*mole^1; unit per_uM_per_ms=1E6 meter^3*second^(-1)*mole^(-1); unit J_per_moleK=1 kilogram^1*meter^2*second^(-2)*kelvin^(-1)*mole^(-1); unit coulomb_per_mmole=1E3 second^1*ampere^1*mole^(-1); unit cm_per_s=.01 meter^1*second^(-1); unit mA_per_cm2=10 meter^(-2)*ampere^1; unit mmole_per_coulomb_cm=.1 meter^(-1)*second^(-1)*ampere^(-1)*mole^1; math main { realDomain time ms; time.min=0; extern time.max; extern time.delta; real R J_per_moleK; R=8.314472; real T kelvin; T=308; real F coulomb_per_mmole; F=96.4853415; real K_o mM; K_o=5.4; real Ca_o mM; Ca_o=1.8; real Na_o mM; Na_o=136; real FonRT per_mV; real V(time) mV; when(time=time.min) V=-87.169816169406; real xik1(time) nA_per_nF; real xito(time) nA_per_nF; real xiNaK(time) nA_per_nF; real wca mV_per_uM; wca=8; real xiNaCa(time) nA_per_nF; real xica(time) nA_per_nF; real Itotal(time) nA_per_nF; real xina(time) nA_per_nF; real xikr(time) nA_per_nF; real xiks(time) nA_per_nF; real i_Stim(time) nA_per_nF; real stim_offset ms; stim_offset=0; real stim_period ms; stim_period=400; real stim_duration ms; stim_duration=3; real stim_amplitude nA_per_nF; stim_amplitude=-15; real past(time) ms; real ena(time) mV; real xm(time) dimensionless; when(time=time.min) xm=0.001075453357; real xh(time) dimensionless; when(time=time.min) xh=0.990691306716; real xj(time) dimensionless; when(time=time.min) xj=0.993888937283; real gna uS_per_nF; gna=12; real am(time) per_ms; real bm(time) per_ms; real ah(time) per_ms; real bh(time) per_ms; real aj(time) per_ms; real bj(time) per_ms; real Ca_dyad(time) uM; when(time=time.min) Ca_dyad=1.716573130685; real csm(time) mM; real c1(time) dimensionless; when(time=time.min) c1=0.000018211252; real c2(time) dimensionless; when(time=time.min) c2=0.979322592773; real xi1ca(time) dimensionless; when(time=time.min) xi1ca=0.001208153482; real xi1ba(time) dimensionless; when(time=time.min) xi1ba=0.000033616596; real xi2ca(time) dimensionless; when(time=time.min) xi2ca=0.004173008466; real xi2ba(time) dimensionless; when(time=time.min) xi2ba=0.015242594688; real gca mmole_per_coulomb_cm; gca=182; real pca cm_per_s; pca=0.00054; real za(time) dimensionless; real poinf(time) dimensionless; real fca(time) dimensionless; real vth mV; vth=0; real s6 mV; s6=8; real vx mV; vx=-40; real sx mV; sx=3; real vy mV; vy=-40; real sy mV; sy=4; real vyr mV; vyr=-40; real syr mV; syr=11.32; real cat uM; cat=3; real cpt uM; cpt=6.09365; real alpha(time) per_ms; real beta(time) per_ms; real k1(time) per_ms; real k2 per_ms; k2=1.03615e-4; real k1t per_ms; k1t=0.00413; real k2t per_ms; k2t=0.00224; real k3(time) per_ms; real k3t(time) per_ms; real k6(time) per_ms; real k5(time) per_ms; real k6t(time) per_ms; real k5t(time) per_ms; real k4(time) per_ms; real k4t(time) per_ms; real r1 per_ms; r1=0.3; real r2 per_ms; r2=3; real s1(time) per_ms; real s1t per_ms; s1t=0.00195; real s2(time) per_ms; real s2t per_ms; real recov(time) ms; real tca ms; tca=78.0329; real tau_ca(time) ms; real tauca(time) ms; real tauba(time) ms; real taupo ms; taupo=1; real tau3 ms; tau3=3; real Pr(time) dimensionless; real Ps(time) dimensionless; real poi(time) dimensionless; real po(time) dimensionless; real rxa(time) mA_per_cm2; real jca(time) uM_per_ms; real ek mV; real gkix uS_per_nF; gkix=0.3; real aki(time) per_ms; real bki(time) per_ms; real xkin(time) dimensionless; real xr(time) dimensionless; when(time=time.min) xr=0.007074239331; real gkr uS_per_nF; gkr=0.0125; real xkrv1(time) per_ms; real xkrv2(time) per_ms; real taukr(time) ms; real xkrinf(time) dimensionless; real rg(time) dimensionless; real Ca_i(time) uM; when(time=time.min) Ca_i=0.256752008084; real gks uS_per_nF; gks=0.1386; real xs1(time) dimensionless; when(time=time.min) xs1=0.048267587131; real xs2(time) dimensionless; when(time=time.min) xs2=0.105468807033; real eks(time) mV; real xs1ss(time) dimensionless; real xs2ss(time) dimensionless; real tauxs1(time) ms; real tauxs2(time) ms; real gksx(time) dimensionless; real xitos(time) nA_per_nF; real xitof(time) nA_per_nF; real xtos(time) dimensionless; when(time=time.min) xtos=0.00364776906; real ytos(time) dimensionless; when(time=time.min) ytos=0.174403618112; real xtof(time) dimensionless; when(time=time.min) xtof=0.003643592594; real ytof(time) dimensionless; when(time=time.min) ytof=0.993331326442; real gtos uS_per_nF; gtos=0.04; real gtof uS_per_nF; gtof=0.11; real rt1(time) dimensionless; real rt2(time) dimensionless; real rt3(time) dimensionless; real rt4(time) dimensionless; real rt5(time) dimensionless; real xtos_inf(time) dimensionless; real ytos_inf(time) dimensionless; real xtof_inf(time) dimensionless; real ytof_inf(time) dimensionless; real rs_inf(time) dimensionless; real txs(time) ms; real tys(time) ms; real txf(time) ms; real tyf(time) ms; real Na_i(time) mM; when(time=time.min) Na_i=11.441712311614; real gNaK nA_per_nF; gNaK=1.5; real xkmko mM; xkmko=1.5; real xkmnai mM; xkmnai=12; real sigma dimensionless; real fNaK(time) dimensionless; real Ca_submem(time) uM; when(time=time.min) Ca_submem=0.226941113355; real gNaCa uM_per_ms; gNaCa=0.84; real aloss(time) dimensionless; real yz1(time) mM4; real yz2(time) mM4; real yz3(time) mM4; real yz4(time) mM4; real zw3(time) mM4; real zw4(time) dimensionless; real zw8(time) mM4; real jNaCa(time) uM_per_ms; real xkdna uM; xkdna=0.3; real xmcao mM; xmcao=1.3; real xmnao mM; xmnao=87.5; real xmnai mM; xmnai=12.3; real xmcai mM; xmcai=0.0036; real Ca_NSR(time) uM; when(time=time.min) Ca_NSR=104.450004990523; real dCa_JSR(time) uM_per_ms; real cstar uM; cstar=90; real Ca_JSR(time) uM; when(time=time.min) Ca_JSR=97.505463697266; real gryr per_ms; gryr=2.58079; real gbarsr dimensionless; gbarsr=26841.8; real gdyad mmole_per_coulomb_cm; gdyad=9000; real ax per_mV; ax=0.3576; real ay per_mV; ay=0.05; real av per_ms; av=11.3; real bv uM_per_ms; real Qr0(time) uM_per_ms; real Qr(time) uM_per_ms; real sparkV(time) dimensionless; real spark_rate(time) per_ms; real taua ms; taua=100; real taur ms; taur=30; real xirp(time) uM_per_ms; real xicap(time) uM_per_ms; real xiryr(time) uM_per_ms; real xir(time) uM_per_ms; when(time=time.min) xir=0.006679257264; real jup(time) uM_per_ms; real jleak(time) uM_per_ms; real cup uM; cup=0.5; real kj uM; kj=50; real vup uM_per_ms; vup=0.4; real gleak per_ms; gleak=0.00002069; real bcal uM; bcal=24; real xkcal uM; xkcal=7; real srmax uM; srmax=47; real srkd uM; srkd=0.6; real bmem uM; bmem=15; real kmem uM; kmem=0.3; real bsar uM; bsar=42; real ksar uM; ksar=13; real bpxs(time) dimensionless; real spxs(time) dimensionless; real mempxs(time) dimensionless; real sarpxs(time) dimensionless; real dcsib(time) dimensionless; real bpxi(time) dimensionless; real spxi(time) dimensionless; real mempxi(time) dimensionless; real sarpxi(time) dimensionless; real dciib(time) dimensionless; real xkon per_uM_per_ms; xkon=0.0327; real xkoff per_ms; xkoff=0.0196; real btrop uM; btrop=70; real xbi(time) uM_per_ms; real xbs(time) uM_per_ms; real tropi(time) uM; when(time=time.min) tropi=22.171689894953; real trops(time) uM; when(time=time.min) trops=19.864701949854; real taud ms; taud=4; real taups ms; taups=0.5; real jd(time) uM_per_ms; real K_i mM; K_i=140; real prNaK dimensionless; prNaK=0.01833; // FonRT=(F/(R*T)); // past=(floor(time/stim_period)*stim_period); i_Stim=(if (((time-past)>=stim_offset) and ((time-past)<=(stim_offset+stim_duration))) stim_amplitude else (0 nA_per_nF)); Itotal=((-1)*(xina+xik1+xikr+xiks+xito+xiNaCa+xica+xiNaK+i_Stim)); V:time=Itotal; // am=(if (abs(V+(47.13 mV))>(.001 mV)) (.32 per_ms)*(1 per_mV)*(V+(47.13 mV))/(1-exp((-1)*(.1 per_mV)*(V+(47.13 mV)))) else (3.2 per_ms)); bm=((.08 per_ms)*exp((-1)*V/(11 mV))); ah=(if (V<((-1)*(40 mV))) (.135 per_ms)*exp(((80 mV)+V)/((-1)*(6.8 mV))) else (0 per_ms)); bh=(if (V<((-1)*(40 mV))) (3.56 per_ms)*exp((.079 per_mV)*V)+(3.1E5 per_ms)*exp((.35 per_mV)*V) else (1 per_ms)/(.13*(1+exp((V+(10.66 mV))/((-1)*(11.1 mV)))))); aj=(if (V<((-1)*(40 mV))) ((-1)*(127140 per_ms)*exp((.2444 per_mV)*V)-(3.474E-5 per_ms)*exp((-1)*(.04391 per_mV)*V))*(1 per_mV)*(V+(37.78 mV))/(1+exp((.311 per_mV)*(V+(79.23 mV)))) else (0 per_ms)); bj=(if (V<((-1)*(40 mV))) (.1212 per_ms)*exp((-1)*(.01052 per_mV)*V)/(1+exp((-1)*(.1378 per_mV)*(V+(40.14 mV)))) else (.3 per_ms)*exp((-1)*(2.535E-7 per_mV)*V)/(1+exp((-1)*(.1 per_mV)*(V+(32 mV))))); xh:time=(ah*(1-xh)-bh*xh); xj:time=(aj*(1-xj)-bj*xj); xm:time=(am*(1-xm)-bm*xm); xina=(gna*xh*xj*xm*xm*xm*(V-ena)); // za=(V*2*FonRT); rxa=(if (abs(za)<.001) 4*pca*F*FonRT*(csm*exp(za)-.341*Ca_o)/(2*FonRT) else 4*pca*V*F*FonRT*(csm*exp(za)-.341*Ca_o)/(exp(za)-1)); poinf=(1/(1+exp((-1)*(V-vth)/s6))); alpha=(poinf/taupo); beta=((1-poinf)/taupo); fca=(1/(1+(cat/Ca_dyad)^3)); s1=((.0182688 per_ms)*fca); k1=((.024168 per_ms)*fca); s2=(s1*r1/r2*k2/k1); s2t=(s1t*r1/r2*k2t/k1t); poi=(1/(1+exp((-1)*(V-vx)/sx))); k3=((1-poi)/tau3); k3t=k3; Pr=(1-1/(1+exp((-1)*(V-vy)/sy))); recov=((10 ms)+(4954 ms)*exp(V/(15.6 mV))); tau_ca=(tca/(1+(Ca_dyad/cpt)^4)+(.1 ms)); tauca=((recov-tau_ca)*Pr+tau_ca); tauba=((recov-(450 ms))*Pr+(450 ms)); Ps=(1/(1+exp((-1)*(V-vyr)/syr))); k6=(fca*Ps/tauca); k5=((1-Ps)/tauca); k6t=(Ps/tauba); k5t=((1-Ps)/tauba); k4=(k3*alpha/beta*k1/k2*k5/k6); k4t=(k3t*alpha/beta*k1t/k2t*k5t/k6t); po=(1-xi1ca-xi2ca-xi1ba-xi2ba-c1-c2); c1:time=(alpha*c2+k2*xi1ca+k2t*xi1ba+r2*po-(beta+r1+k1t+k1)*c1); c2:time=(beta*c1+k5*xi2ca+k5t*xi2ba-(k6+k6t+alpha)*c2); xi1ca:time=(k1*c1+k4*xi2ca+s1*po-(k3+k2+s2)*xi1ca); xi1ba:time=(k1t*c1+k4t*xi2ba+s1t*po-(k3t+k2t+s2t)*xi1ba); xi2ca:time=(k3*xi1ca+k6*c2-(k5+k4)*xi2ca); xi2ba:time=(k3t*xi1ba+k6t*c2-(k5t+k4t)*xi2ba); jca=(gca*po*rxa); xica=(2*wca*jca); // aki=((1.02 per_ms)/(1+exp((.2385 per_mV)*(V-ek-(59.215 mV))))); bki=(((.49124 per_ms)*exp((.08032 per_mV)*(V-ek+(5.476 mV)))+(1 per_ms)*exp((.06175 per_mV)*(V-ek-(594.31 mV))))/(1+exp((-1)*(.5143 per_mV)*(V-ek+(4.753 mV))))); xkin=(aki/(aki+bki)); xik1=(gkix*sqrt(K_o/(5.4 mM))*xkin*(V-ek)); // xkrv1=(if (abs(V+(7 mV))>(.001 mV)) (.00138 per_ms)*(1 per_mV)*(V+(7 mV))/(1-exp((-1)*(.123 per_mV)*(V+(7 mV)))) else (.00138 per_ms)/.123); xkrv2=(if (abs(V+(10 mV))>(.001 mV)) (6.1E-4 per_ms)*(1 per_mV)*(V+(10 mV))/(exp((.145 per_mV)*(V+(10 mV)))-1) else (6.1E-4 per_ms)/.145); taukr=(1/(xkrv1+xkrv2)); xkrinf=(1/(1+exp((-1)*(V+(50 mV))/(7.5 mV)))); rg=(1/(1+exp((V+(33 mV))/(22.4 mV)))); xikr=(gkr*sqrt(K_o/(5.4 mM))*xr*rg*(V-ek)); xr:time=((xkrinf-xr)/taukr); // xs1ss=(1/(1+exp((-1)*(V-(1.5 mV))/(16.7 mV)))); xs2ss=xs1ss; tauxs1=(if (abs(V+(30 mV))<((.001 mV)/.0687)) (1 ms)/(7.19E-5/.148+1.31E-4/.0687) else (1 ms)/((7.19E-5 per_mV)*(V+(30 mV))/(1-exp((-1)*(.148 per_mV)*(V+(30 mV))))+(1.31E-4 per_mV)*(V+(30 mV))/(exp((.0687 per_mV)*(V+(30 mV)))-1))); tauxs2=(4*tauxs1); gksx=(1+.8/(1+((.5 uM)/Ca_i)^3)); xiks=(gks*gksx*xs1*xs2*(V-eks)); xs1:time=((xs1ss-xs1)/tauxs1); xs2:time=((xs2ss-xs2)/tauxs2); // rt1=((-1)*(V+(3 mV))/(15 mV)); rt2=((V+(33.5 mV))/(10 mV)); rt3=((V+(60 mV))/(10 mV)); rt4=((-1)*V/(30 mV)*V/(30 mV)); rt5=((V+(33.5 mV))/(10 mV)); xtos_inf=(1/(1+exp(rt1))); ytos_inf=(1/(1+exp(rt2))); xtof_inf=xtos_inf; ytof_inf=ytos_inf; rs_inf=(1/(1+exp(rt2))); txs=((9 ms)/(1+exp((-1)*rt1))+(.5 ms)); tys=((3E3 ms)/(1+exp(rt3))+(30 ms)); txf=((3.5 ms)*exp(rt4)+(1.5 ms)); tyf=((20 ms)/(1+exp(rt5))+(20 ms)); xtos:time=((xtos_inf-xtos)/txs); ytos:time=((ytos_inf-ytos)/tys); xtof:time=((xtof_inf-xtof)/txf); ytof:time=((ytof_inf-ytof)/tyf); xitos=(gtos*xtos*(ytos+.5*rs_inf)*(V-ek)); xitof=(gtof*xtof*ytof*(V-ek)); xito=(xitos+xitof); // sigma=((exp(Na_o/(67.3 mM))-1)/7); fNaK=(1/(1+.1245*exp((-1)*.1*V*FonRT)+.0365*sigma*exp((-1)*V*FonRT))); xiNaK=(gNaK*fNaK*Na_i/(Na_i+xkmnai)*K_o/(K_o+xkmko)); // zw3=(Na_i^3*Ca_o*exp(V*.35*FonRT)-Na_o^3*csm*exp(V*(.35-1)*FonRT)); zw4=(1+.2*exp(V*(.35-1)*FonRT)); aloss=(1/(1+(xkdna/Ca_submem)^3)); yz1=(xmcao*Na_i^3+xmnao^3*csm); yz2=(xmnai^3*Ca_o*(1+csm/xmcai)); yz3=(xmcai*Na_o^3*(1+(Na_i/xmnai)^3)); yz4=(Na_i^3*Ca_o+Na_o^3*csm); zw8=(yz1+yz2+yz3+yz4); jNaCa=(gNaCa*aloss*zw3/(zw4*zw8)); xiNaCa=(wca*jNaCa); // Ca_JSR:time=((Ca_NSR-Ca_JSR)/taua); bv=(((1 per_ms)-av)*cstar-(50 uM_per_ms)); Qr0=(if ((Ca_JSR>(50 uM)) and (Ca_JSR=cstar) av*Ca_JSR+bv else (0 uM_per_ms)); Qr=(Ca_NSR*Qr0/cstar); sparkV=(exp((-1)*ay*(V+(30 mV)))/(1+exp((-1)*ay*(V+(30 mV))))); spark_rate=(gryr/(1 mA_per_cm2)*po*abs(rxa)*sparkV); xir:time=(spark_rate*Qr-xir*(1-taur*dCa_JSR/Ca_NSR)/taur); xirp=(po*Qr*abs(rxa)*gbarsr/(1 mA_per_cm2)*exp((-1)*ax*(V+(30 mV)))/(1+exp((-1)*ax*(V+(30 mV))))); xicap=(po*gdyad*abs(rxa)); xiryr=(xirp+xicap); // jup=(vup*Ca_i*Ca_i/(Ca_i*Ca_i+cup*cup)); jleak=(gleak*Ca_NSR*Ca_NSR/(Ca_NSR*Ca_NSR+kj*kj)*(Ca_NSR*16.667-Ca_i)); // Na_i:time=((-1)*(xina+3*xiNaK+3*xiNaCa)/(wca*(1E3 u_per_m))); // bpxs=(bcal*xkcal/((xkcal+Ca_submem)*(xkcal+Ca_submem))); spxs=(srmax*srkd/((srkd+Ca_submem)*(srkd+Ca_submem))); mempxs=(bmem*kmem/((kmem+Ca_submem)*(kmem+Ca_submem))); sarpxs=(bsar*ksar/((ksar+Ca_submem)*(ksar+Ca_submem))); dcsib=(1/(1+bpxs+spxs+mempxs+sarpxs)); bpxi=(bcal*xkcal/((xkcal+Ca_i)*(xkcal+Ca_i))); spxi=(srmax*srkd/((srkd+Ca_i)*(srkd+Ca_i))); mempxi=(bmem*kmem/((kmem+Ca_i)*(kmem+Ca_i))); sarpxi=(bsar*ksar/((ksar+Ca_i)*(ksar+Ca_i))); dciib=(1/(1+bpxi+spxi+mempxi+sarpxi)); jd=((Ca_submem-Ca_i)/taud); xbi=(xkon*Ca_i*(btrop-tropi)-xkoff*tropi); xbs=(xkon*Ca_submem*(btrop-trops)-xkoff*trops); dCa_JSR=((-1)*xir+jup-jleak); Ca_dyad:time=(xiryr-(Ca_dyad-Ca_submem)/taups); Ca_submem:time=(dcsib*(50*(xir-jd-jca+jNaCa)-xbs)); Ca_i:time=(dciib*(jd-jup+jleak-xbi)); Ca_NSR:time=dCa_JSR; tropi:time=xbi; trops:time=xbs; csm=(Ca_submem/(1E3 u_per_m)); // ek=(1/FonRT*ln(K_o/K_i)); eks=(1/FonRT*ln((K_o+prNaK*Na_o)/(K_i+prNaK*Na_i))); ena=(1/FonRT*ln(Na_o/Na_i)); }