TITLE Hippocampal HH channels
: 
:
: Fast Na+ and K+ currents responsible for action potentials
: Iterative equations
:
: Equations modified by Traub, for Hippocampal Pyramidal cells, in:
: Traub & Miles, Neuronal Networks of the Hippocampus, Cambridge, 1991
:
: range variable vtraub adjust threshold
:
: Written by Alain Destexhe, Salk Institute, Aug 1992
:

: 2019: From ModelDB, accession no. 279
: Modified vtraub, vtraub2 by Elisabetta Iavarone @ Blue Brain Project
: See PARAMETER section for references

INDEPENDENT {t FROM 0 TO 1 WITH 1 (ms)}

NEURON {
	SUFFIX TC_HHna16
	USEION na READ ena WRITE ina
	:USEION k READ ek WRITE ik
	:RANGE gna_max, gk_max, vtraub, vtraub2, i_rec
        RANGE gna_max, vtraub, i_rec
	RANGE m_inf, h_inf :, n_inf
	RANGE tau_m, tau_h :, tau_n
	:RANGE m_exp, h_exp :, n_exp
	RANGE ina :, ik
}


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

PARAMETER {
	gna_max	= 1.0e-1 	(S/cm2) 
:	gk_max	= 1.0e-1 	(S/cm2) 

	celsius         (degC)
	dt              (ms)
	v               (mV)
	vtraub = -55.5  : Average of original value and Amarillo et al., J Neurophysiol 112:393-410, 2014
:	vtraub2 = -45.5  : Shift for K current
}

STATE {
:	m h n
  m h 
}

ASSIGNED {
	ina	(mA/cm2)
	:ik	(mA/cm2)
	ena	(mV)
	:ek	(mV)
	i_rec	(mA/cm2)
	m_inf
	h_inf
	:n_inf
	tau_m
	tau_h
	:tau_n
	:m_exp
	:h_exp
	:n_exp
	tcorr
}


BREAKPOINT {
	SOLVE states METHOD cnexp
	ina   = gna_max * m*m*m*h * (v - ena)
	:ik    = gk_max * n*n*n*n * (v - ek)
	:i_rec = ina + ik
        i_rec = ina
}


DERIVATIVE states {   : exact Hodgkin-Huxley equations
	evaluate_fct(v)
	m' = (m_inf - m) / tau_m
	h' = (h_inf - h) / tau_h
	:n' = (n_inf - n) / tau_n
}

:PROCEDURE states() {	: exact when v held constant
:	evaluate_fct(v)
:	m = m + m_exp * (m_inf - m)
:	h = h + h_exp * (h_inf - h)
:	n = n + n_exp * (n_inf - n)
:	VERBATIM
:	return 0;
:	ENDVERBATIM
:}

UNITSOFF
INITIAL {
:	n = n_inf
:
:  Q10 was assumed to be 3 for both currents
:
: original measurements at roomtemperature?
  	tcorr = 3.0 ^ ((celsius-36)/ 10 )
        evaluate_fct(v)
	m = m_inf
	h = h_inf


}

PROCEDURE evaluate_fct(v(mV)) { LOCAL a,b,v2, v3

	v2 = v - vtraub + 15: convert to traub convention
        v3 = v - vtraub + 15: convert to traub convention
	:v3 = v - vtraub2 : EI: shift only K

	if(v2 == 13 || v2 == 40 || v2 == 15 ){
    	v = v+0.0001
    }

	a = 0.32 * (13-v2) / ( exp((13-v2)/(1.2*4)) - 1)
	b = 0.28 * (v2-40) / ( exp((v2-40)/(1.2*5)) - 1)
	tau_m = 1 / (a + b) / tcorr
	m_inf = a / (a + b)

                                
        a = 0.128 * exp((17-v3)/18) 
        b = 4 / ( 1 + exp((40-v3)/5) )
	tau_h = 1 / (a + b) / tcorr
        h_inf = a / (a + b)

                                
 

	:a = 0.032 * (15-v3) / ( exp((15-v3)/5) - 1)
	:b = 0.5 * exp((10-v3)/40)
	:tau_n = 1 / (a + b) / tcorr
	:n_inf = a / (a + b)

	:m_exp = 1 - exp(-dt/tau_m)
	:h_exp = 1 - exp(-dt/tau_h)
	:n_exp = 1 - exp(-dt/tau_n)

}

UNITSON