TITLE  NMDA receptor with Ca influx and pre-synaptic short-term plasticity


COMMENT
Dynamic presynaptic activity based on Fuhrmann et al, 2002: "Coding of temporal information by activity-dependent synapses" 

Written by Paulo Aguiar and Mafalda Sousa, IBMC, May 2008
pauloaguiar@fc.up.pt ; mafsousa@ibmc.up.pt
ENDCOMMENT


NEURON {
	POINT_PROCESS NMDA_DynSyn
	USEION ca WRITE ica	
	USEION mg READ mgo VALENCE 2
	RANGE tau_rise, tau_decay
	RANGE U1, tau_rec, tau_fac, stp
	RANGE i, g, e, mgb, inon, ica, ca_ratio
	NONSPECIFIC_CURRENT inon
    }
    
UNITS {
	(nA) = (nanoamp)
	(mV) = (millivolt)
	(molar) = (1/liter)
	(mM) = (millimolar)
    }    
    
    PARAMETER {
  	tau_rise  = 5.0   (ms)  : dual-exponential conductance profile
	tau_decay = 70.0  (ms)  : IMPORTANT: tau_rise < tau_decay
	U1        = 1.0   (1)   : The parameter U1, tau_rec and tau_fac define
	tau_rec   = 0.1   (ms)  : the pre-synaptic SP short-term plasticity
	tau_fac   = 0.1   (ms)  : mechanism (see Fuhrmann et al, 2002)
	e         = 0.0   (mV)  : synapse reversal potential
	mgo		  = 1.0   (mM)  : external magnesium concentration
	ca_ratio  = 0.1   (1)   : ratio of calcium current to total current( Burnashev/Sakmann J Phys 1995 485 403-418)   2.B 0.0 to remove Ca effect of NMDA
	stp       = 1.0   (1)   : boolean for synaptic plasticity
    }
    
    
ASSIGNED {
	v		(mV)
	i		(nA)
	g		(umho)
	factor	(1)
	ica		(nA)
	inon	(nA)
	mgb
}

STATE {
	A
	B
}

INITIAL{
	LOCAL tp
	A = 0
	B = 0
	tp = (tau_rise*tau_decay)/(tau_decay-tau_rise)*log(tau_decay/tau_rise)
	factor = -exp(-tp/tau_rise)+exp(-tp/tau_decay)
	factor = 1/factor
}

BREAKPOINT {
	SOLVE state METHOD cnexp
	g = B-A
	mgb = mgblock(v)
	i = g*mgb*(v-e)
	ica = ca_ratio*i
	inon = (1-ca_ratio)*i
	:printf("\nt=%f\tinon=%f\tica=%f\ti=%f\tmgb=%f",t, inon, ica, i, mgblock(v))
}

DERIVATIVE state{
	A' = -A/tau_rise
	B' = -B/tau_decay
}

FUNCTION mgblock(v(mV)) {
	: from Jahr & Stevens 1990
	mgblock = 1 / (1 + exp(0.062 (/mV) * -v) * (mgo / 3.57 (mM)))
}

NET_RECEIVE (weight, Pv, P, Use, t0 (ms)){
	INITIAL{
		P=1
		Use=0
		t0=t
	}	

    if(stp){
        Use = Use * exp(-(t-t0)/tau_fac)
        Use = Use + U1*(1-Use)
        P   = 1-(1- P) * exp(-(t-t0)/tau_rec)
        Pv  = Use * P
        P   = P - Use * P

        t0 = t

        A = A + weight*factor*Pv
        B = B + weight*factor*Pv
    } else {
        A = A + weight*factor
        B = B + weight*factor
    }
}