: from https://senselab.med.yale.edu/ModelDB/ShowModel.cshtml?model=168148&file=/stadler2014_layerV/kBK.mod
TITLE large-conductance calcium-activated potassium channel (BK)
	:Mechanism according to Gong et al 2001 and Womack&Khodakakhah 2002,
	:adapted for Layer V cells on the basis of Benhassine&Berger 2005.
	:NB: concentrations in mM
	
NEURON {
	SUFFIX kBK
	USEION k READ ek WRITE ik
	USEION ca READ cai
	RANGE gpeak, gkact, caPh, caPk, caPmax, caPmin
	RANGE caVhh, CaVhk, caVhmax, caVhmin, k, tau
        GLOBAL pinfmin : cutoff - if pinf < pinfmin, set to 0.; by default cutoff not used (pinfmin==0)
}


UNITS {
	(mA) = (milliamp)
	(mV) = (millivolt)
	(molar) = (1/liter)
	(mM) 	= (millimolar)
}


PARAMETER {
		:maximum conductance (Benhassine 05)
	gpeak   = 268e-4	(mho/cm2) <0, 1e9>
	
	                                    : Calcium dependence of opening probability (Gong 2001)
	caPh    = 2e-3     (mM)             : conc. with half maximum open probaility
	caPk    = 1                         : Steepness of calcium dependence curve
	caPmax  = 1                         : max and
	caPmin  = 0                         : min open probability
		
	                                    : Calcium dependence of Vh shift (Womack 2002)
	caVhh   = 2e-3    (mM)              : Conc. for half of the Vh shift
	caVhk   = -0.94208                  : Steepness of the Vh-calcium dependence curve
	caVhmax = 155.67 (mV)               : max and
	caVhmin = -46.08 (mV)               : min Vh
	
	                                    : Voltage dependence of open probability (Gong 2001)
	                                    : must not be zero
	k       = 17	(mV)
	
	                                    : Timeconstant of channel kinetics
	                                    : no data for a description of a calcium&voltage dependence
	                                    : some points (room temp) in Behassine 05 & Womack 02
	tau     = 1 (ms) <1e-12, 1e9>
	scale   = 100                       : scaling to incorporate higher ca conc near ca channels
        
        pinfmin = 0.0                       : cutoff for pinf - less than that set pinf to 0.0

} 	


ASSIGNED {
	v 		(mV)
	ek		(mV)
	ik 		(mA/cm2)
    	cai  		(mM)
	caiScaled	(mM)
	pinf		(1)
}


STATE {
        p
}

BREAKPOINT {
	SOLVE states METHOD cnexp
	ik = gpeak*p* (v - ek)
}

DERIVATIVE states {     
        rate(v, cai)
        p' =  (pinf - p)/tau
}

INITIAL {     
        rate(v, cai)
        p = pinf
}

PROCEDURE rate(v(mV), ca(mM))  {
        caiScaled = ca*scale	
        pinf = P0ca(caiScaled) / ( 1 + exp( (Vhca(caiScaled)-v)/k ) )
        if(pinf < pinfmin) { pinf = 0.0 }
}

FUNCTION P0ca(ca(mM)) (1) {
		
	if (ca < 1E-18) { 		:check for division by zero		
	P0ca = caPmin
	} else {
	P0ca = caPmin + ( (caPmax - caPmin) / ( 1 + (caPh/ca)^caPk ))
	}
}

FUNCTION Vhca(ca(mM)) (mV) {
		
	if (ca < 1E-18) {		:check for division by zero
	Vhca = caVhmax
	} else {
	Vhca = caVhmin + ( (caVhmax - caVhmin ) / ( 1 + ((caVhh/ca)^caVhk)) )
	}
}