-
Notifications
You must be signed in to change notification settings - Fork 1
/
GRC_GABA.mod
219 lines (183 loc) · 4.17 KB
/
GRC_GABA.mod
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
TITLE
COMMENT
Reference: Pugh JR and Raman I, Biophysical Journal Volume 88, March 2005 1740-1754
Model adapted from patch to slice.
ENDCOMMENT
NEURON {
POINT_PROCESS GRC_GABA
NONSPECIFIC_CURRENT i
RANGE g,Cdur,Erev,Open,OpenScaled,ScaleFactor
:RANGE r1,r2,kon,koff,d1,d2,a1,a2,b1,b2
RANGE kon,koff,d3,r3,d1d2,r1r2,a1,b1,a2,b2,r1,r2,d1,d2
RANGE Tmax,gmax,onSET
RANGE tau_1,tau_rec,tau_facil,U,T
RANGE diff_flag,M,Rd,Diff,lamd
RANGE nd
}
UNITS {
(nA) = (nanoamp)
(mV) = (millivolt)
(umho) = (micromho)
(mM) = (milli/liter)
(pS) = (picosiemens)
PI = (pi)(1)
}
PARAMETER {
: Parametri Postsinaptici
gmax = 756.35 (pS) :1750
Cdur = 0.3 (ms)
kon = 20 (/ms/mM)
koff = 2 (/ms)
d3 = 15 (/ms)
r3 = 3.75 (/ms) : 0.15, use 3.75 for slices
d1d2 = 15 (/ms/mM)
r1r2 = 0.007 (/ms)
a1 = 0.06 (/ms)
b1 = 0.03 (/ms)
a2 = 0.4 (/ms)
b2 = 10 (/ms)
r1 = 7e-4 (/ms)
r2 = 6e-3 (/ms)
d1 = 3.3e-4 (/ms)
d2 = 1.2 (/ms)
Erev = -65 (mV)
: Parametri Presinaptici
tau_1 = 0.1 (ms) < 1e-9, 1e9 >
tau_rec = 43.4 (ms) < 1e-9, 1e9 > :55.11 15.7 (first fit!)
tau_facil = 6.22 (ms) < 0, 1e9 > :2.66 4.85 (first fit!)
U = 0.35 < 0, 1 > :0.24 0.18 (first fit!)
Tmax = 1 (mM)
onSET = 1
: Diffusion parameters
: Diffusion: M=21.500, R=1.033, D=0.223, lamd=0.02 as in excitatory synapses
M = 52.76 : 46.93 : 20.95 (first fit!)
: numero di (kilo) molecole in una vescicola
Rd = 4.79 (um) :4.96 : 4.96 (first fit!)
Diff = 0.223 (um2/ms)
lamd = 20 (nm)
diff_flag = 1 : flag diffusion on/off
nd = 1 : kernel exponent of diffusion
ScaleFactor = 1 : for fit purposes
}
ASSIGNED {
v (mV) : postsynaptic voltage
i (nA) : current = g*(v - Erev)
g (pS) : conductance
Open
OpenScaled : for fit purposes
T (mM)
Trelease (mM)
Mres (mM)
tpre (ms)
tspike[50] (ms) : will be initialized by the pointprocess
PRE[50]
numpulses
tzero
}
STATE {
C
CA1
CA2
DA1
DA2
DA2f
OA1
OA2
}
INITIAL {
C=1
CA1=0
CA2=0
DA1=0
DA2=0
DA2f=0
OA1=0
OA2=0
CA1=0
CA2=0
Open=0
T=0 (mM)
:tpre=1e8 (ms)
numpulses=0
Mres=1e3* (1e3 * 1e15 / 6.022e23 * M) : (M) to (mM) so 1e3, 1um^3=1dm^3*1e-15 so 1e15
FROM i=1 TO 50{ PRE[i-1]=0 tspike[i-1]=0}
tspike[0]=1e12 (ms)
if(tau_1>=tau_rec){
printf("Warning: tau_1 (%g) should never be higher neither equal to tau_rec (%g)!\n",tau_1,tau_rec)
tau_rec=tau_1+1e-5
:printf("tau_rec has been set to %g\n",tau_rec)
}
}
FUNCTION diffusione(){
LOCAL DifWave,i
DifWave=0
FROM i=1 TO numpulses{
tzero=tspike[i-1]
if(t>tzero){
DifWave=DifWave+PRE[i-1]*Mres*exp(-Rd*Rd/(4*Diff*(t-tzero)))/((4*PI*Diff*(1e-3)*lamd)*(t-tzero))^nd
}
}
diffusione=DifWave :Mres*exp(-Rd*Rd/(4*Diff*(t-tpre)))/((4*PI*Diff*(1e-3)*lamd)*(t-tpre))
}
BREAKPOINT {
SOLVE kstates METHOD sparse
Open = OA1 + OA2
OpenScaled=Open*ScaleFactor
g = gmax * Open
i = (1e-6) * g * (v - Erev)
}
KINETIC kstates {
if ( diff_flag ) { Trelease = T + diff_flag * diffusione() } else { Trelease = T }
: second row
~ C <-> CA1 (2*kon*Trelease,koff)
~ CA1 <-> CA2 (kon*Trelease,2*koff)
~ CA2 <-> DA2f (d3,r3)
: third row
~ DA1 <-> DA2 (d1d2*Trelease,r1r2)
: first <=> second row
~ OA1 <-> CA1 (a1,b1)
~ OA2 <-> CA2 (a2,b2)
: third <=> second row
~ DA1 <-> CA1 (r1,d1)
~ DA2 <-> CA2 (r2,d2)
CONSERVE C+CA1+CA2+DA1+DA2+DA2f+OA1+OA2 = 1
}
NET_RECEIVE(weight, on, nspike, tzero (ms),x,y, z, u, tsyn (ms)) {
INITIAL {
x = 0
y = 0
z = 0
u = 0 :u0
tsyn = t
nspike = 1
}
if(onSET){on=0 onSET=0}
if (flag == 0) {
: Qui faccio rientrare la modulazione presinaptica
nspike = nspike + 1
if (!on) {
tzero = t
tpre=t : activates diffusion
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
T=Tmax*y
PRE[numpulses]=y
tspike[numpulses]=t
numpulses=numpulses+1
tsyn = t
}
net_send(Cdur, nspike)
}
if (flag == nspike) {
T = 0
on = 0
}
}