TITLE Mouse Ventricular Myocyte Model

COMMENT
16-state Nav Markov model (+ FHF2)
ENDCOMMENT

NEURON {
	SUFFIX NAV_withF
	USEION na READ ena WRITE ina
	RANGE gnabar, ina, g, Oapp, Capp, Iapp
	RANGE gamma, delta, Con, Coff, Oon, Ooff
	RANGE Aalfa, Valfa, Abeta, Vbeta, Agamma, Adelta, ACon, ACoff, AOon, AOoff, Vshift
	RANGE n1, n2, n3, n4, n5, n6, s1, s2, s3, s4, s5, s6, V_threshold, use_threshold
}

UNITS {
	(mA) = (milliamp)
	(mV) = (millivolt)
}

PARAMETER {
	v (mV)
	Vshift = -54    (mV)
	celsius = 25  	(degC)
	ena = 87.39		(mV)
	gnabar = 0.036	(mho/cm2)
	Aalfa = 2.44375 ( /ms)
	Valfa = 9 ( /mV) 
	Abeta = 0.01325  ( /ms)
	Vbeta = 9 ( /mV)
	Agamma = 150 ( /ms)
	Adelta = 40  ( /ms)
	ACon = 0.004    ( /ms)
	ACoff = 0.05     ( /ms)
	AOon = 0.85     ( /ms)
	AOoff = 0.0005   ( /ms)
	n1 = 100
	n2 = 20
	n3 = 20
	n4 = 3
	n5 = 1.5
	n6 = 0.75
	s1 = 0.5
	s2 = 0.5
	s3 = 0.5
	s4 = 1.5
	s5 = 1.5
	s6 = 1.5
	V_threshold = -85 (mV)
	use_threshold = 0	
	
}

ASSIGNED {
	ina  (mA/cm2)
	g   (mho/cm2)
	Oapp
	Iapp
	Capp
	gamma
	delta
	Con
	Coff
	Oon
	Ooff
	a
	b
	Q10gate
	Q10cond
	
}

STATE {
	C1
	C2
	C3
	C4
	C5
	C6
	C7
	O
	I1
	I2
	I3
	I4
	I5
	I6
	I7
	I8

}

INITIAL {
	: C1=1
	: C2=0
	: C3=0
	: C4=0
	: C5=0
	: C6=0
	: C7=0
	: O=0
	: I1=0
	: I2=0
	: I3=0
	: I4=0
	: I5=0
	: I6=0
	: I7=0
	: I8=0
	Q10gate =2.3^((celsius-32.76(degC))/10 (degC))
	Q10cond =1.4^((celsius-25 (degC))/10 (degC))
	gamma = Q10gate * Agamma
	delta = Q10gate * Adelta
	Con = Q10gate * ACon
	Coff = Q10gate * ACoff
	Oon = Q10gate * AOon
	Ooff = Q10gate * AOoff
	a = (Oon/Con)^0.16667
	b = (Ooff/Coff)^0.16667
	SOLVE kstates STEADYSTATE sparse	
	
    }
    
BREAKPOINT {	    
    if ( use_threshold ) {
	if (v < V_threshold) {
	    delta = 1e10
	    gamma = 1e-10
	    :printf("%f\t",v)
	} else {
	    delta = Q10gate * Adelta
	    gamma = Q10gate * Agamma
	}
    }
 
    SOLVE kstates METHOD sparse
    g = Q10cond * gnabar * O	      	: (mho/cm2)
    ina = g * (v - ena)  	: (mA/cm2)
    Oapp = O*(ACon+ACoff)/ACoff
    Capp = (C1+C2+C3+C4+C5+C6+C7)*(ACon+ACoff)/ACoff
    Iapp = 1-Oapp-Capp
}

FUNCTION alfa(v(mV))(/ms){ 
	alfa = Q10gate*Aalfa*exp((v-Vshift)/Valfa) 
}

FUNCTION beta(v(mV))(/ms){ 
	beta = Q10gate*Abeta*exp((-v+Vshift)/Vbeta) 
}

KINETIC kstates {
	: 1st row
	~ C1 <-> C2 (n1*alfa(v),n6*beta(v))
	~ C2 <-> C3 (n2*alfa(v),n5*beta(v))
	~ C3 <-> C4 (n3*alfa(v),n4*beta(v))
	~ C4 <-> C5 (n4*alfa(v),n3*beta(v))
	~ C5 <-> C6 (n5*alfa(v),n2*beta(v))	
	~ C6 <-> C7 (n6*alfa(v),n1*beta(v))	
	~ C7 <-> O  (gamma,delta)
	
	: 2nd row
	~ I1 <-> I2	(n1*alfa(v)*a^s1,n6*beta(v)*b^s1)
	~ I2 <-> I3	(n2*alfa(v)*a^s2,n5*beta(v)*b^s2)
	~ I3 <-> I4	(n3*alfa(v)*a^s3,n4*beta(v)*b^s3)
	~ I4 <-> I5 (n4*alfa(v)*a^s4,n3*beta(v)*b^s4)
	~ I5 <-> I6 (n5*alfa(v)*a^s5,n2*beta(v)*b^s5)	
	~ I6 <-> I7 (n6*alfa(v)*a^s6,n1*beta(v)*b^s6)	
	~ I7 <-> I8 (gamma,delta)
	
		
	: connect 1st row with 2nd row
	~ C1 <-> I1 (Con,Coff)
	~ C2 <-> I2 (Con*a^s1,Coff*b^s1)
	~ C3 <-> I3 (Con*a^(s1+s2),Coff*b^(s1+s2))
	~ C4 <-> I4 (Con*a^(s1+s2+s3),Coff*b^(s1+s2+s3))
	~ C5 <-> I5 (Con*a^(s1+s2+s3+s4),Coff*b^(s1+s2+s3+s4))
	~ C6 <-> I6 (Con*a^(s1+s2+s3+s4+s5),Coff*b^(s1+s2+s3+s4+s5))	
	~ C7 <-> I7 (Con*a^(s1+s2+s3+s4+s5+s6),Coff*b^(s1+s2+s3+s4+s5+s6))	
	~  O <-> I8 (Oon,Ooff)
	
	
		
	CONSERVE C1+C2+C3+C4+C5+C6+C7+O+I1+I2+I3+I4+I5+I6+I7+I8=1

	
}