: Threshold Function, Bob Calin-Jageman 9/20/2002
: This model implements a threshold function described by
: Getting, 1989 and utilized by Lieb and Frost, 1998.
:
:
: Created by Bob Calin-Jageman
:
: Created 9/20/2002
: Modified 9/20/2002
:
: Mathcheck - Complete 9/31/2002
: Unitscheck - Complete 9/31/2002
:
: Explanation
: With every action potential (v.pre > threshold), the threshold
: is reset to RESET and then decays back to STEADYSTATE with time constant
: DECAYTC.
:
: This model is used in conjunction with a netcon object, which detects when
: the membrane potential of a neuron exceed a set threshold. THe pointer
: nc_thresh is set to point at the threshold of the netcon. Thus, this model
: causes a typical netcon to have a variable threshold that changes with
: activity.
:
: This model must also receive input from the netcon to detect the occurance
: of spike. The hoc code for this model should look like this
:
:Example Usage
:
: soma {sthold = new thold(0.5)}
: sthold.steadystate = sthold_steadystate
: sthold.reset = sthold_reset
: sthold.decaytc = sthold_decaytc
:
: soma stholdnc = new NetCon(&v(0.5), sthold, 0, 0, 1)
: setpointer sthold.nc_thresh, stholdnc.threshold
:
: References
: Getting, P.A. (1989) "Reconstruction of small neural networks" in
: Methods in Neuronal Modeling: From Synapses to Networks (1st ed), Kock & Segev
: eds, MIT Press.
:
: Lieb JR & Frost WN (1997) "Realistic Simulation of the Aplysia Siphon
: Withdrawal Reflex Circuit: Roles of Circuit Elements in Producing Motor Output"
: p. 1249 */
:
NEURON {
POINT_PROCESS thold
RANGE steadystate, reset, decaytc, lastspike, thresh, spikecount, prior2spike, burstmaxint, burstminsize, bursting, burstcount, burststart, burstno, freq
POINTER nc_thresh
}
UNITS {
(mV) = (millivolt)
}
PARAMETER {
steadystate = -37.8 (mV) : resting threshold level
reset = 200 (mV) : with each spike, threshold reset to here
decaytc = 11.5 (ms) : threshold decays back to steadystate with this time constant
nc_thresh (mV) : pointer. Modifies the threshold for a netcon object
lastspike (ms) : time of last spike. initialized to 0 don't modify extern
thresh (mV) : current threshold
spikecount :
prior2spike : time of spike before lasrt. initialized to -1 don't modify extern
burstmaxint = 1000
burstminsize = 3
bursting = 0
burstcount = 0
burststart = 0
burstno = 0
freq = 0
}
ASSIGNED {
v (mV)
}
BREAKPOINT {
thresh = steadystate + (reset - steadystate) * (exp((lastspike - t) / decaytc))
nc_thresh = thresh : set netcon object to reflect current thresh
}
INITIAL {
thresh = reset
nc_thresh = thresh
lastspike = 0
spikecount = 0
prior2spike = -1
bursting = 0
burstcount = 0
burststart = 0
burstno = 0
freq = 0
}
NET_RECEIVE(weight (microsiemens)) {
if (spikecount > 0) {
freq = (1/ (t - lastspike)* 1000)
if ((t - lastspike) < burstmaxint) {
burstcount = burstcount + 1
if (burstcount == 1) { burststart = lastspike }
if (burstcount > burstminsize) { bursting = 1 }
}
if ((t - lastspike) > burstmaxint) {
bursting = 0
burstcount = 0
burststart = 0
}
}
prior2spike = lastspike
lastspike = t : recieved from netcon when v > thresh.
spikecount = spikecount + 1 : increment spike count
}