: HH calcium-mediated potassium current

NEURON{
	SUFFIX ikCa
	NONSPECIFIC_CURRENT i
	USEION k READ ek WRITE ik
	RANGE g, gCa, rev_ca, tau_ca,i
}

UNITS{
	(mS) = (millisiemens)
	(mV) = (millivolt)
	(uA) = (microamp)
}

PARAMETER{ 
	g = 5.0 (mS/cm2)
	gCa = 0.1 (mS/cm2)
	rev_ca = 120 (mV)
	cai_init = 0.000 (mM)
	tau_ca = 80 (ms)
}

ASSIGNED{
	v (mV)
	ek (mV)
	ik (uA/cm2)
	i (uA/cm2)
}

STATE {xcai}
BREAKPOINT{
	SOLVE states METHOD cnexp

	: ik = g*(v-ek)*(xcai/(1.0+xcai))*0.001 :factor to convert to mA/cm2
	ik = g*(v-ek)*(xcai/(1.0+xcai))*0.001 
	i = current_ca(v)*0.001	
	:i = 0
}

INITIAL {
	xcai= cai_init
}
DERIVATIVE states{
	: xcai' = -0.002*gCa*(v-rev_ca)/(1+exp(-(v+25)/2.5)) - xcai/tau_ca
	: xcai' = -0.002*gCa*(v-rev_ca)/gating_kca(v) - xcai/tau_ca
	xcai' = -0.002*current_ca(v) - xcai/tau_ca

}

FUNCTION current_ca(Vm (mV)){
	LOCAL x
	UNITSOFF
	current_ca = gCa*(Vm-rev_ca)/gating_kca(Vm)
	UNITSON
}

FUNCTION gating_kca(Vm (mV)){
	LOCAL x
	UNITSOFF
	x = -(Vm+25)/2.5
	if (x>700){
		x=700
	: printf("gating_kca, time: %g, current: %g, voltage: %g \n", t, i, Vm)

	}
	gating_kca = 1+exp(x)
	UNITSON
}