TITLE Endoplasmic Reticulum
	
    UNITS {
	(molar) = (1/liter)	
	(mM)	= (millimolar)
	(nA) = (nanoamp)
    (mA) = (milliampere)

	
    (um) = (micron)
    FARADAY = (faraday) (coulomb)
    PI = (pi) (1)
    }

    NEURON {
	RANGE tau, beta, gamma, scale, t1, ical, ip3min, spkcnt, ip3ip
	USEION cal READ cali WRITE ical
	POINTER ip3im, ip3id
	}

    STATE {
	cali (mM)
    caer (mM)
	Jip3h (1)
	Jip3m (1)
	 
	Jip3z (mM/ms)
	ERrelz (mM/ms)
	ERfilz (mM/ms)
	ERlekz (mM/ms)

	ier (mA/cm2)

    }

    PARAMETER {
    fer = 0.0025              : ca buffering coefficient in ER from John Rinzel 1997
    kerm = 0.2e-3 (mM) : from Huang 2004
    kerrel = 3e-12  (/s): from Huang, to be adjusted
    kerfila = 0.75e-12 (mM/s) : from John Rinzel 1997
    kerfilb = 0.2e-3 (mM) : from John Rinzel 1997
    kerlek = 6.15e-14 (/s): from Huang, to be adjusted
    rhover = 0.15 : ratio of volume to cytoplasmic volume
    : total cell vol = vol_cytoplasm + vol_er
    : where vol_er = rhover * vol_cytoplasm
    : thus vol_er = v_cell * rhover / (1 + rhover)
    caer0 = 0.20 (mM)
	Jip3h0 =0.2
	Jip3m0 =0.2
	
	Vip3 = 1e-9:1e-5 (1/cm2/s):1e-8(1/cm2/ms):
	dact = 8.2e-5 (mM):8.2e-2(uM)
	dinh = 1.05e-3 (mM):1.05(uM)
	dip3 = 0.13e-3 (mM):0.13(uM)
	ddis = 0.94e-3 (mM):0.94(uM)
	aip3  = 0.42e6 (1/mM/s):0.42(1/uM/ms)
	bip3 = 4.1 (1/s):4.1e-3(1/ms)
	ainh = 2e-4 (mM/s):2e-4(uM/ms)
	   
    }

    ASSIGNED {
       diam (um)
       ical (mA/cm2)

		ip3ip (mM)
		ip3id (mM)
		ip3im (mM)

	}

    INITIAL {
       : custom initialization may be needed
   caer = caer0 : initial calcium concentration in ER
   Jip3h = Jip3h0
   Jip3m = Jip3m0
   
    }

    BREAKPOINT {
       SOLVE states METHOD derivimplicit
	:cnexp  euler  derivimplicit
	  
	     ip3ip=ip3im+ip3id

	  
	ical = -2*FARADAY*(2e8*Jip3(cali,caer, ip3ip, Vip3, dact, dinh, dip3, ddis) +errel(cali,caer,kerrel,kerm)-erfil(cali,caer,kerfila,kerfilb)+erlek(cali,caer,kerlek)) * diam * (1e-7) / 4
	
	
 	:ix = -ical
	ier=ical
	

	Jip3z=Jip3(cali,caer, ip3ip, Vip3, dact, dinh, dip3, ddis)
	ERrelz=errel(cali,caer,kerrel,kerm)
	ERfilz=erfil(cali,caer,kerfila,kerfilb)
	ERlekz=erlek(cali,caer,kerlek)
    }

DERIVATIVE states {
    caer' = -(0.001)*( Jip3(cali,caer, ip3ip, Vip3, dact, dinh, dip3, ddis)
+errel(cali,caer,kerrel,kerm)-erfil(cali,caer,kerfila,kerfilb)+erlek(cali,caer,kerlek))/(rhover/fer)

	Jip3h'=(Jip3hinf(ip3ip, cali, dinh, dip3, ddis)-Jip3h)/Jip3th (ip3ip , ainh , cali , dinh , dip3 , ddis )
	Jip3m'=(Jip3minf(ip3ip, cali, dip3, dact)-Jip3m)/Jip3tm (cali , bip3, aip3 )
}


	FUNCTION errel(cali (mM),caer (mM),kerrel (/s),kerm (mM)) (mM/s) { : from Huang
		errel = kerrel*pow((cali/(cali+kerm)),1)*(caer-cali)
	}

    FUNCTION erfil(cali (mM),caer (mM),kerfila (mM/s),kerfilb (mM)) (mM/s) { : from John Rinzel 1997
       erfil = kerfila * pow(cali/(1 (mM)),2) / ( pow(cali/(1 (mM)),2) + pow(kerfilb/(1 (mM)),2) )
    }

    FUNCTION erlek(cali (mM),caer(mM),kerlek (/s)) (mM/s) { : from Huang
		erlek = kerlek*(caer-cali)
    }
	
	
	FUNCTION Jip3(cali (mM),caer (mM), ip3ip (mM), Vip3 (1/cm2/ms), dact (mM), dinh (mM), dip3 (mM), ddis (mM)) (mM/s) {
       :Jip3 = Vip3*pow(Jip3m(ip3ip, cali, dip3, dact),3)*pow(Jip3hinf(ip3ip, cali, dinh, dip3, ddis),3)*(caer-cali)
	   Jip3 = Vip3*pow(Jip3m,3)*pow(Jip3h,3)*(caer-cali)
    }
	
	FUNCTION Jip3minf (ip3ip (mM), cali (mM), dip3 (mM), dact (mM)){
	Jip3minf = (ip3ip/(ip3ip+dip3)) * (cali/(cali+dact))
	}
	
	
	FUNCTION Jip3tm (cali (mM), bip3 (1/ms), aip3 (1/mM/ms)){
	Jip3tm = 1/(bip3+aip3*cali)	
	}
	
	FUNCTION Jip3hinf (ip3ip (mM), cali (mM), dinh (mM), dip3 (mM), ddis (mM)){
	Jip3hinf = Jip3Q(ip3ip, dinh, dip3, ddis) / (Jip3Q(ip3ip, dinh, dip3, ddis) + cali)
	}
	
	FUNCTION Jip3th (ip3ip (mM), ainh (mM/ms), cali (mM), dinh (mM), dip3 (mM), ddis (mM)){
	Jip3th = 1/(ainh*Jip3Q(ip3ip, dinh, dip3, ddis)+cali)
	}
	
	FUNCTION Jip3Q (ip3ip (mM), dinh (mM), dip3 (mM), ddis (mM)){
	Jip3Q = dinh*((ip3ip+dip3)/(ip3ip+ddis))
	}