You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
197 lines
5.6 KiB
197 lines
5.6 KiB
2 years ago
|
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.
|
||
|
Last modif. Sept 8, 1993.
|
||
|
|
||
|
Reference:
|
||
|
|
||
|
Destexhe, A., Mainen, Z. and Sejnowski, T.J. An efficient method for
|
||
|
computing synaptic conductances based on a kinetic model of receptor binding.
|
||
|
Neural Computation, 6: 14-18, 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_GABA[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_GABA(i, x)}
|
||
|
Notice that loc_GABA() must be executed first since that function also
|
||
|
allocates space for the synapse.
|
||
|
-----------------------------------------------------------------------------
|
||
|
GLY SYNAPSE (GLY receptors)
|
||
|
|
||
|
currently parameters are same as GABA-A until I get the Harty data in here
|
||
|
P. Manis 2/10/2000
|
||
|
|
||
|
-----------------------------------------------------------------------------
|
||
|
ENDCOMMENT
|
||
|
|
||
|
INDEPENDENT {t FROM 0 TO 1 WITH 1 (ms)}
|
||
|
|
||
|
NEURON {
|
||
|
POINT_PROCESS GLY2
|
||
|
POINTER pre
|
||
|
RANGE C, R, R0, R1, g, gmax, Erev, lastrelease, Prethresh
|
||
|
NONSPECIFIC_CURRENT i
|
||
|
GLOBAL Cmax, Cdur, Alpha, Beta, 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 = 0.53 (/ms mM) : forward (binding) rate
|
||
|
Beta = 0.18 (/ms) : backward (unbinding) rate
|
||
|
Erev = -80 (mV) : reversal potential
|
||
|
Prethresh = 0 : voltage level nec for release
|
||
|
Deadtime = 1 (ms) : mimimum time between release events
|
||
|
gmax (umho) : maximum conductance
|
||
|
}
|
||
|
|
||
|
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
|
||
|
}
|
||
|
|
||
|
INITIAL {
|
||
|
R = 0
|
||
|
C = 0
|
||
|
R0 = 0
|
||
|
R1 = 0
|
||
|
Rinf = Cmax*Alpha / (Cmax*Alpha + Beta)
|
||
|
Rtau = 1 / ((Alpha * Cmax) + Beta)
|
||
|
lastrelease = -999
|
||
|
}
|
||
|
|
||
|
BREAKPOINT {
|
||
|
SOLVE release
|
||
|
g = gmax * R
|
||
|
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
|
||
|
lastrelease = t
|
||
|
}
|
||
|
|
||
|
} else if (q < 0) { : still releasing?
|
||
|
|
||
|
: do nothing
|
||
|
|
||
|
} else if (C == Cmax) { : in dead time after release
|
||
|
R1 = R
|
||
|
C = 0.
|
||
|
}
|
||
|
|
||
|
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.
|
||
|
}
|
||
|
}
|