TITLE IzhikevichCurrent
COMMENT
The module implements Izhikevich's model as a non-specific current. Module is defined as point-process
to be able send and receive net events.
The module treats Izhikevich's system of equations as
v'=(Iizh(v)+i)/cm
where Iizh(v)=e*v^2+f*v+g-u is a transmembrane current. u is a state variable
Do not forget setup:
cm in 1uF
L in 1um
diam in 1/PI
Here an example, who to use it in hoc file.
objref izh
soma{
L=1
diam=1/PI
nseg=1
izh = new izhcur(0.5)
cm=1
}
Parameters are given by Izhikevich matlab code:
a b c d I
================================================================================
0.02 0.2 -65 6 14 % tonic spiking
0.02 0.25 -65 6 0.5 % phasic spiking
0.02 0.2 -50 2 15 % tonic bursting
0.02 0.25 -55 0.05 0.6 % phasic bursting
0.02 0.2 -55 4 10 % mixed mode
0.01 0.2 -65 8 30 % spike frequency adaptation
0.02 -0.1 -55 6 0 % Class 1
0.2 0.26 -65 0 0 % Class 2
0.02 0.2 -65 6 7 % spike latency
0.05 0.26 -60 0 0 % subthreshold oscillations
0.1 0.26 -60 -1 0 % resonator
0.02 -0.1 -55 6 0 % integrator
0.03 0.25 -60 4 0 % rebound spike
0.03 0.25 -52 0 0 % rebound burst
0.03 0.25 -60 4 0 % threshold variability
1 1.5 -60 0 -65 % bistability
1 0.2 -60 -21 0 % DAP
0.02 1 -55 4 0 % accomodation
-0.02 -1 -60 8 80 % inhibition-induced spiking
-0.026 -1 -45 0 80 % inhibition-induced bursting
written by Ruben Tikidji-Hamburyan <rth@nisms.krinc.ru>, 2013 - 1015
ENDCOMMENT
NEURON {
POINT_PROCESS izhcur
NONSPECIFIC_CURRENT i_izh
RANGE a,b,c,d,e,f,g,uinit,F,u,I
}
PARAMETER {
a = 0.01 (1)
b = 0.2 (1)
c = -65 (mV)
d = 2 (1)
e = 0.04 (1)
f = 5 (1)
g = 140 (1)
uinit = -14 (1)
F = 1 (1) : speedup / slowdown parameter
I = 0 (mA/cm2) : doesn't work yet
}
UNITS {
(mV) = (millivolt)
(mA) = (milliamp)
}
ASSIGNED {
v (mV)
i_izh (mA)
}
STATE { u }
BREAKPOINT {
SOLVE states METHOD cnexp
i_izh = (-1e-5)*F*(vinfi(v)-u)-I :minus, because it is inward current
}
INITIAL {
u = uinit
net_send(0,1) :we have send first event
}
DERIVATIVE states {
UNITSOFF
u'= F*a*(b*v-u)
UNITSON
}
FUNCTION vinfi(v (mV)) {
UNITSOFF
vinfi = e*v*v + f*v + g
UNITSON
}
NET_RECEIVE (w) {
if (flag == 1) {
WATCH (v > 30.0) 2
} else {
net_event(t)
v = c
u = u+d
}
}