COMMENT
-----------------------------------------------------------------------------
Simple synaptic mechanism derived for first order kinetics of
binding of transmitter to postsynaptic receptors.
A. Destexhe & Z. Mainen, The Salk Institute, March 12, 1993.
General references:
Destexhe, A., Mainen, Z.F. and Sejnowski, T.J. An efficient method for
computing synaptic conductances based on a kinetic model of receptor binding
Neural Computation 6: 10-14, 1994.
Destexhe, A., Mainen, Z.F. and Sejnowski, T.J. Synthesis of models for
excitable membranes, synaptic transmission and neuromodulation using a
common kinetic formalism, Journal of Computational Neuroscience 1:
195-230, 1994.
-----------------------------------------------------------------------------
During the arrival of the presynaptic spike (detected by threshold
crossing), it is assumed that there is a brief pulse (duration=Cdur)
of neurotransmitter C in the synaptic cleft (the maximal concentration
of C is Cmax). Then, C is assumed to bind to a receptor Rc according
to the following first-order kinetic scheme:
Rc + C ---(Alpha)--> Ro (1)
<--(Beta)---
where Rc and Ro are respectively the closed and open form of the
postsynaptic receptor, Alpha and Beta are the forward and backward
rate constants. If R represents the fraction of open gates Ro,
then one can write the following kinetic equation:
dR/dt = Alpha * C * (1-R) - Beta * R (2)
and the postsynaptic current is given by:
Isyn = gmax * R * (V-Erev) (3)
where V is the postsynaptic potential, gmax is the maximal conductance
of the synapse and Erev is the reversal potential.
If C is assumed to occur as a pulse in the synaptic cleft, such as
C _____ . . . . . . Cmax
| |
_____| |______ . . . 0
t0 t1
then one can solve the kinetic equation exactly, instead of solving
one differential equation for the state variable and for each synapse,
which would be greatly time consuming...
Equation (2) can be solved as follows:
1. during the pulse (from t=t0 to t=t1), C = Cmax, which gives:
R(t-t0) = Rinf + [ R(t0) - Rinf ] * exp (- (t-t0) / Rtau ) (4)
where
Rinf = Alpha * Cmax / (Alpha * Cmax + Beta)
and
Rtau = 1 / (Alpha * Cmax + Beta)
2. after the pulse (t>t1), C = 0, and one can write:
R(t-t1) = R(t1) * exp (- Beta * (t-t1) ) (5)
There is a pointer called "pre" which must be set to the variable which
is supposed to trigger synaptic release. This variable is usually the
presynaptic voltage but it can be the presynaptic calcium concentration,
or other. Prethresh is the value of the threshold at which the release is
initiated.
Once pre has crossed the threshold value given by Prethresh, a pulse
of C is generated for a duration of Cdur, and the synaptic conductances
are calculated accordingly to eqs (4-5). Another event is not allowed to
occur for Deadtime milliseconds following after pre rises above threshold.
The user specifies the presynaptic location in hoc via the statement
connect pre_GLU[i] , v.section(x)
where x is the arc length (0 - 1) along the presynaptic section (the currently
specified section), and i is the synapse number (Which is located at the
postsynaptic location in the usual way via
postsynaptic_section {loc_GLU(i, x)}
Notice that loc_GLU() must be executed first since that function also
allocates space for the synapse.
-----------------------------------------------------------------------------
KINETIC MODEL FOR GLUTAMATERGIC AMPA/KAINATE RECEPTORS
Whole-cell recorded postsynaptic currents mediated by AMPA/Kainate receptors
(Xiang et al., J. Neurophysiol. 71: 2552-2556, 1994) were used to estimate the
parameters of the present model; the fit was performed using a simplex
algorithm (see Destexhe et al., J. Computational Neurosci. 1: 195-230, 1994).
-----------------------------------------------------------------------------
ENDCOMMENT
INDEPENDENT {t FROM 0 TO 1 WITH 1 (ms)}
NEURON {
POINT_PROCESS AMPActx
POINTER pre
RANGE C, R, R0, R1, g, gmax, lastrelease, F, F0, F1
NONSPECIFIC_CURRENT i
GLOBAL Cmax, Cdur, Alpha, Beta, Erev, Prethresh, Deadtime, Rinf, Rtau
}
UNITS {
(nA) = (nanoamp)
(mV) = (millivolt)
(umho) = (micromho)
(mM) = (milli/liter)
}
PARAMETER {
Cmax = 1 (mM) : max transmitter concentration
Cdur = 1 (ms) : transmitter duration (rising phase)
Alpha = 1.1 (/ms mM) : forward (binding) rate
Beta = 0.19 (/ms) : backward (unbinding) rate
Erev = 0 (mV) : reversal potential
Prethresh = 0 : voltage level nec for release
Deadtime = 1 (ms) : mimimum time between release events
gmax (umho) : maximum conductance
f = 0.0 : 0.1 incremental increase in facilitation (F) with arrival of presyn AP
Ftau = 50 (ms) : 50 time constant for decay of F back to 1
Finf = 1 : F always decays back to 1
}
ASSIGNED {
v (mV) : postsynaptic voltage
i (nA) : current = g*(v - Erev)
g (umho) : conductance
C (mM) : transmitter concentration
R : fraction of open channels
R0 : open channels at start of release
R1 : open channels at end of release
Rinf : steady state channels open
Rtau (ms) : time constant of channel binding
pre : pointer to presynaptic variable
lastrelease (ms) : time of last spike
F : facilitation factor
F0 : facilitation factor at start of release
F1 : facilitation factor at end of release
}
INITIAL {
R = 0
C = 0
F = 1
F0 = 1
F1 = 1
Rinf = Cmax*Alpha / (Cmax*Alpha + Beta)
Rtau = 1 / ((Alpha * Cmax) + Beta)
lastrelease = -9e9
}
BREAKPOINT {
SOLVE release
g = gmax * R * F
i = g*(v - Erev)
}
PROCEDURE release() { LOCAL q
:will crash if user hasn't set pre with the connect statement
q = ((t - lastrelease) - Cdur) : time since last release ended
: ready for another release?
if (q > Deadtime) {
if (pre > Prethresh) { : spike occured?
C = Cmax : start new release
R0 = R
F = F + f
F0 = F
lastrelease = t
}
} else if (q < 0) { : still releasing?
: do nothing
} else if (C == Cmax) { : in dead time after release
R1 = R
C = 0
F1 = F
}
F = Finf + (F0 - Finf) * exp(- (t - lastrelease) / Ftau)
if (C > 0) { : transmitter being released?
R = Rinf + (R0 - Rinf) * exptable (- (t - lastrelease) / Rtau)
} else { : no release occuring
R = R1 * exptable (- Beta * (t - (lastrelease + Cdur)))
}
VERBATIM
return 0;
ENDVERBATIM
}
FUNCTION exptable(x) {
TABLE FROM -10 TO 10 WITH 2000
if ((x > -10) && (x < 10)) {
exptable = exp(x)
} else {
exptable = 0.
}
}