TITLE AMPACOD
COMMENT
AMPA model from Paper (version 15 sept 2004).
ENDCOMMENT
NEURON {
POINT_PROCESS AmpaCOD
NONSPECIFIC_CURRENT i
RANGE r1FIX,r2,r3,r4,r5,r1,r6,r6FIX
RANGE g,gmax,kB,Cdur,Erev
RANGE gg1,gg2,gg3,Tdiff
RANGE T,Tmax,Trelease
RANGE tau_1,tau_rec,tau_facil,U,u0
RANGE A1,A2,A3,tau_dec1,tau_dec2,tau_dec3 : comes from fit
RANGE tdelay,ton
}
UNITS {
(nA) = (nanoamp)
(mV) = (millivolt)
(mM) = (milli/liter)
(pS) = (picosiemens)
(nS) = (nanosiemens)
(um) = (micrometer)
PI = (pi)(1)
}
PARAMETER {
: Parametri Postsinaptici
r1FIX = 5.4 (/ms/mM)
r2 = 0.82 (/ms)
r3 = 0 (/ms)
r4 = 0 (/ms)
r5 = 0.013 (/ms)
r6FIX = 1.12 (/ms/mM)
gmax = 700 (nS)
Cdur = 0.3 (ms)
Erev = 0 (mV)
kB = 0.44 (mM)
: Diffusion: M=21500, R=1.033, D=0.223, lamd=0.02
A1 = 0.131837
A2 = 0.0555027
A3 = 0.0135232
tau_dec1 = 3.4958
tau_dec2 = 16.6317
tau_dec3 = 128.983
: Parametri Presinaptici
tau_1 = 3 (ms) < 1e-9, 1e9 >
tau_rec = 35.1 (ms) < 1e-9, 1e9 >
tau_facil = 10.8 (ms) < 0, 1e9 >
U = 0.416 (1) < 0, 1 >
u0 = 0 (1) < 0, 1 > : se u0=0 al primo colpo y=U
Tmax = 1 (mM)
}
ASSIGNED {
v (mV) : postsynaptic voltage
i (nA) : current = g*(v - Erev)
g (pS) : conductance
r1 (/ms)
r6 (/ms)
T (mM)
Trelease (mM)
Tdiff (mM)
tdelay (ms)
Tdiff_0 (mM)
ton (ms)
x
PRE
}
STATE {
C
O
D
gg1
gg2
gg3
sink
}
INITIAL {
C = 1
O = 0
D = 0
T = 0 (mM)
Tdiff = 0 (mM)
Trelease = 0 (mM)
Tdiff_0 = 0 (mM)
gg1 = 0
gg2 = 0
gg3 = 0
ton = -1 (ms)
PRE = 0
}
FUNCTION SET_tdelay(R,D){ tdelay=0.25*R*R/D }
BREAKPOINT {
if( (t-ton)>tdelay ){
Tdiff=gg1+gg2+gg3
Tdiff_0 = Tdiff
}else{
Tdiff=Tdiff_0+(A1+A2+A3)*PRE*(t-ton)/tdelay
}
Trelease=T+Tdiff
SOLVE kstates METHOD sparse
g =gmax * O
i = (1e-6) * g * (v - Erev)
}
KINETIC kstates {
: Postsynaptic scheme
r1 = r1FIX * Trelease^2 / (Trelease + kB)^2
r6 = r6FIX * Trelease^2 / (Trelease + kB)^2
~ C <-> O (r1,r2)
~ O <-> D (r3,r4)
~ D <-> C (r5,r6)
CONSERVE C+O+D = 1
: Glutamate diffusion wave
~ gg1 <-> sink (1/tau_dec1,0)
~ gg2 <-> sink (1/tau_dec2,0)
~ gg3 <-> sink (1/tau_dec3,0)
}
NET_RECEIVE(weight, on, nspike, flagtdel,t0 (ms),y, z, u, tsyn (ms)) {
INITIAL {
flagtdel=1
nspike = 1
Tdiff=0
y=0
z=0
u=u0
tsyn=t
}
if (flag == 0) {
nspike = nspike + 1
if (!on) {
ton=t
t0=t
on=1
z=z*exp(-(t-tsyn)/tau_rec)
z=z+(y*(exp(-(t - tsyn)/tau_1)-exp(-(t-tsyn)/tau_rec))/(tau_1/tau_rec-1))
y=y*exp(-(t-tsyn)/tau_1)
x=1-y-z
if(tau_facil>0){
u=u*exp(-(t-tsyn)/tau_facil)
u=u+U*(1-u)
}else{u=U}
y=y+x*u
PRE=y
T=Tmax*y
tsyn=t
}
net_send(Cdur,nspike)
net_send(tdelay,flagtdel)
}
if(flag==nspike){
T = 0
on = 0
}
if (flag == flagtdel){
flagtdel = flagtdel+1
state_discontinuity(gg1,gg1+A1*x*u)
state_discontinuity(gg2,gg2+A2*x*u)
state_discontinuity(gg3,gg3+A3*x*u)
}
}