COMMENT

ca.mod
Uses fixed eca instead of GHK eqn

HVA Ca current
Based on Reuveni, Friedman, Amitai and Gutnick (1993) J. Neurosci. 13:
4609-4621.

Author: Zach Mainen, Salk Institute, 1994, zach@salk.edu

ENDCOMMENT

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

NEURON {
	SUFFIX ca
	USEION ca READ eca WRITE ica
	RANGE m, h, gca, gbar
	RANGE minf, hinf, mtau, htau
	GLOBAL q10, temp, tadj, vmin, vmax, vshift
}

PARAMETER {
	gbar = 0.1   	(pS/um2)	: 0.12 mho/cm2
	vshift = 0	(mV)		: voltage shift (affects all)

	cao  = 2.5	(mM)	        : external ca concentration
	cai		(mM)
						
	temp = 23	(degC)		: original temp 
	q10  = 2.3			: temperature sensitivity

	v 		(mV)
	celsius		(degC)
	vmin = -120	(mV)
	vmax = 100	(mV)
}


UNITS {
	(mA) = (milliamp)
	(mV) = (millivolt)
	(pS) = (picosiemens)
	(um) = (micron)
	FARADAY = (faraday) (coulomb)
	R = (k-mole) (joule/degC)
	PI	= (pi) (1)
	(molar) = (1/liter)
	(mM) = (millimolar)
} 

ASSIGNED {
	ica 		(mA/cm2)
	gca		(pS/um2)
	eca		(mV)
	minf 		hinf
	mtau (ms)	htau (ms)
	tadj
}
 

STATE { m h }

INITIAL { 
:printf("ca INTIIAL entry t=%g cai=%g ica=%g eca=%g\n", t, cai, ica, eca)
	trates(v+vshift)
	m = minf
	h = hinf
:printf("ca INTIIAL exit t=%g cai=%g ica=%g eca=%g\n", t, cai, ica, eca)
}

BREAKPOINT {
        SOLVE states METHOD cnexp
:printf("ca BREAKPOINT entry t=%g cai=%g ica=%g eca=%g\n", t, cai, ica, eca)
        gca = tadj*gbar*m*m*h
	ica = (1e-4) * gca * (v - eca)
:printf("ca BREAKPOINT exit t=%g cai=%g ica=%g eca=%g\n", t, cai, ica, eca)
} 


DERIVATIVE states {
:printf("ca states entry t=%g cai=%g ica=%g eca=%g\n", t, cai, ica, eca)
        trates(v+vshift)      
        m' = (minf-m)/mtau
        h' = (hinf-h)/htau
:printf("ca states exit t=%g cai=%g ica=%g eca=%g\n", t, cai, ica, eca)
}


PROCEDURE trates(v (mV)) {  
                      
        TABLE minf, mtau, hinf, htau
	DEPEND celsius, temp
	
	FROM vmin TO vmax WITH 199

	rates(v): not consistently executed from here if usetable == 1

UNITSOFF
        tadj = q10^((celsius - temp)/10)
UNITSON
        mtau = mtau/tadj
        htau = htau/tadj
}


UNITSOFF
PROCEDURE rates(vm (mV)) {
        LOCAL  a, b

	a = 0.055*(-27 - vm)/(exp((-27-vm)/3.8) - 1)
	b = 0.94*exp((-75-vm)/17)
	
	mtau = 1/(a+b)
	minf = a*mtau

		:"h" inactivation 

	a = 0.000457*exp((-13-vm)/50)
	b = 0.0065/(exp((-vm-15)/28) + 1)

	htau = 1/(a+b)
	hinf = a*htau
}
UNITSON

FUNCTION efun(z) {
	if (fabs(z) < 1e-4) {
		efun = 1 - z/2
	}else{
		efun = z/(exp(z) - 1)
	}
}