COMMENT
Decay of internal calcium concentration

Internal calcium concentration due to calcium currents and pump.

Differential equations.

Simple model of ATPase pump with 3 kinetic constants (Destexhe 92)
     Cai + P <-> CaP -> Cao + P  (k1,k2,k3)
A Michaelis-Menten approximation is assumed, which reduces the complexity
of the system to 2 parameters: 
    kt = <tot enzyme concentration> * k3  -> TIME CONSTANT OF THE PUMP
	kd = k2/k1 (dissociation constant)    -> EQUILIBRIUM CALCIUM VALUE
The values of these parameters are chosen assuming a high affinity of 
the pump to calcium and a low transport capacity (cfr. Blaustein, 
TINS, 11: 438, 1988, and references therein).  

Units checked using "modlunit" -> factor 10000 needed in ca entry

VERSION OF PUMP + DECAY (decay can be viewed as simplified buffering)

All variables are range variables

This mechanism was published in:  Destexhe, A. Babloyantz, A. and 
Sejnowski, TJ.  Ionic mechanisms for intrinsic slow oscillations in
thalamic relay neurons. Biophys. J. 65: 1538-1552, 1993)

Written by Alain Destexhe, Salk Institute, Nov 12, 1992

26 Ago 2002 Modification of original channel to allow 
variable time step and to correct an initialization error.
Done by Michael Hines(michael.hines@yale.e) and 
Ruggero Scorcioni(rscorcio@gmu.edu) at EU Advance Course 
in Computational Neuroscience. Obidos, Portugal

20110202 replaced METHOD euler with METHOD cnexp
and made threadsafe by Ted Carnevale's suggestions
20120105 replaced cnexp with derivimplicit - TMM
ENDCOMMENT

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

NEURON {
    THREADSAFE
	SUFFIX cad
	USEION ca READ ica, cai WRITE cai
	RANGE ca
	GLOBAL depth,cainf,taur
}

UNITS {
	(molar) = (1/liter)			: moles do not appear in units
	(mM)	= (millimolar)
	(um)	= (micron)
	(mA)	= (milliamp)
	(msM)	= (ms mM)
	FARADAY = (faraday) (coulomb)
}


PARAMETER {
	depth	= .1	(um)		: depth of shell
	taur	= 200	(ms)		: rate of calcium removal
	cainf	= 100e-6(mM)
	cai		(mM)
}

STATE {
	ca		(mM) <1e-5>
}

INITIAL {
	ca = cainf
	cai = ca
}

ASSIGNED {
	ica		(mA/cm2)
	drive_channel	(mM/ms)
}
	
BREAKPOINT {
:	SOLVE state METHOD euler
	SOLVE state METHOD derivimplicit
}

DERIVATIVE state { 

	drive_channel =  - (10000) * ica / (2 * FARADAY * depth)
	if (drive_channel <= 0.) { drive_channel = 0. }	: cannot pump inward

	ca' = drive_channel + (cainf-ca)/taur
	cai = ca
}