TITLE Cardiac IKur  current & nonspec cation current with identical kinetics
: Hodgkin - Huxley type channels, modified to fit IKur data from Feng et al Am J Physiol 1998 275:H1717 - H 1725
: Suffix from Kv15 to Kv1_5

NEURON {
	SUFFIX Kv1_5
	USEION k READ ek WRITE ik : is not working with ,ki,ko
	:USEION na READ nai,nao
	:USEION no WRITE ino VALENCE 1: nonspecific cation current
	RANGE gKur, ik, ino, Tauact, Tauinactf,Tauinacts, gnonspec, nao, nai, ko,ki
	RANGE minf, ninf, uinf, mtau , ntau, utau
}

UNITS {
	(mA) = (milliamp)
	(mV) = (millivolt)
        (mM) = (milli/liter)
	F = (faraday) (coulombs)
	R 	= (k-mole)	(joule/degC)
}

PARAMETER {
	 gKur= 0.13195e-3 (S/cm2) <0,1e9>
	Tauact=1 (ms)
	Tauinactf=1 (ms)
	Tauinacts=1 (ms)
	:gnonspec=0   (S/cm2) <0,1e9>
}
STATE {
	 m n u
}

ASSIGNED {
	v (mV)
	celsius (degC) : 37
    ik (mA/cm2)
	minf ninf uinf
	mtau (ms)
    ntau (ms)
	utau (ms)
	ek (mV)
	ino (mA/cm2)
	ki (mM)
	ko (mM)
	nai (mM)
	nao (mM)
}

INITIAL {
	rates(v)
	m = minf
    n = ninf
	u = uinf
}

BREAKPOINT { LOCAL z
	z = (R*(celsius+273.15))/F
	SOLVE states METHOD derivimplicit
    ik = gKur*((0.1 + 1/(1 + exp(-(v - 15)/13)))*m*m*m*n*u*(v - ek))
	:ino=gnonspec*(0.1 + 1/(1 + exp(-(v - 15)/13)))*m*m*m*n*u*(v - z*log((nao+ko)/(nai+ki)))
	
    :printf("ik: %g \n", ik)
}

DERIVATIVE states {	: exact when v held constant
	rates(v)
	m' = (minf - m)/mtau
    n' = (ninf - n)/ntau
	u' = (uinf - u)/utau
}

UNITSOFF
FUNCTION alp(v(mV),i) { LOCAL q10 : order m n
	v = v
	q10 = 2.2^((celsius - 37)/10)
       if (i==0) {
	          alp = q10*0.65/(exp(-(v + 10)/8.5) + exp(-(v - 30)/59))
          } else if (i==1) {
                   alp = 0.001*q10/(2.4 +10.9* exp(-(v + 90)/78))
          }
	
}

FUNCTION bet(v(mV),i) (/ms) { LOCAL q10 : order m n u
	v = v 
	q10 = 2.2^((celsius - 37)/10)
        if (i==0){
	         bet = q10*0.65/(2.5 + exp((v + 82)/17))
        }else if (i==1){
                  bet = q10*0.001*exp((v - 168)/16)
        }
}
                
FUNCTION ce(v(mV),i)(/ms) {   :  order m n u 
        v = v
       
        if (i==0) {
                ce = 1/(1 + exp(-(v + 30.3)/9.6))
        }else if (i==1){
                ce = 1*(0.25+1/(1.35 + exp((v + 7)/14)))
       
        }else if (i==2){
                ce = 1*(0.1+1/(1.1 + exp((v + 7)/14)))
        }
}


PROCEDURE rates(v) {LOCAL a,b,c :
	
		a = alp(v,0)  b=bet(v,0) c = ce(v,0)
		mtau = 1/(a + b)/3*Tauact
		minf = c
               a = alp(v,1)  b=bet(v,1) c = ce(v,1)
		ntau = 1/(a + b)/3*Tauinactf
		ninf = c
		c = ce(v,2)
		uinf = c
		utau = 6800*Tauinacts
}
UNITSON