-
Notifications
You must be signed in to change notification settings - Fork 2
/
MC_def.hoc
315 lines (240 loc) · 5.37 KB
/
MC_def.hoc
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
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
// Mitral cell model template
begintemplate Mitral
public soma, prim, dend, tuft, all
public AMPA, GABAA, spiketimes, dendspike, tuftspike, spikecount, spikecount2, spikecount3
create soma, prim, dend, tuft
//objref real
objref AMPA, GABAA, spikecount, spikecount2, spikecount3
objref spiketimes, dendspike, tuftspike
proc celldef() {
topol()
subsets()
geom()
biophys($1)
// geom_nseg()
}
proc topol() {
connect dend(0), soma(1)
connect prim(1), soma(0)
connect tuft(1), prim(0)
}
// create subsets
objref all
proc subsets() {
all = new SectionList()
soma all.append
prim all.append
dend all.append
tuft all.append
}
// The following parameters are adapted from Shen et al. JNP, 1999
proc geom() {
soma {
L = 25
diam = 20
nseg = 1
}
prim {
L = 370
diam = 3.5
nseg = 5
}
dend {
L = 500
diam = 3.4 // 3.4 !!!
nseg = 7
}
tuft {
L = 20
diam = 0.5
nseg = 1
}
forall {
//nseg = 1
//nseg = int((L/(0.1*lambda_f(100))+0.9)/2)*2 + 1
}
}
func lambda_f() {
return 1e5*sqrt(diam/(4*PI*$1*Ra*cm))
}
proc biophys() { local El, RM, AMPAtau, AMPArev, GABAAtau GABAArev
RM = 30e3 // ohm.cm2 Shen et al. JNP, 1999
El = -60 // -60 !!!
ENa = 45
Ek = -80
AMPAtau = 10
AMPArev = 0
GABAAtau = 18
GABAArev = -70
shell_depth = 1
spike_threshold = -10
//==========================================================
gNa_soma = 50e-3
gNa_dend = 30e-3
gNa_prim = 20e-3
gNa_tuft = 20e-3
sh_Na = -3 // -3
gKdr_soma = 30e-3
gKdr_dend = 20e-3
gKdr_prim = 10e-3
gKdr_tuft = 10e-3
gA_soma = 10e-3
gA_dend = 0e-3
gA_prim = 0e-3
gA_tuft = 0e-3
Sha_A = 9.9
Shi_A = 5.7
ScaleNP = 1.0 // 1.0/1.5 !!! (1.4/1.5/1.6)
ScaleKS = 1.0 // 1.0/1.3 !!! (1.2/1.2/1.3)
gNaP_soma = ScaleNP*0.2e-3 // 0.2
gNaP_dend = ScaleNP*0.02e-3 // 0.02
gNaP_prim = ScaleNP*0.10e-3 // 0.1
gNaP_tuft = ScaleNP*0.10e-3 // 0.1
gKs_soma = ScaleKS*42e-3 // 42
gKs_dend = ScaleKS*8e-3 // 8
gKs_prim = ScaleKS*18e-3 // 18
gKs_tuft = ScaleKS*18e-3 // 18
tau_KS = 10 // Default: 10 !!!
kh_KS = 1.5 // Default: 1.5
gCa_soma = 0.4e-3
gCa_dend = 0.05e-3
gCa_prim = 0.2e-3
gCa_tuft = 0.2e-3
gKCa_soma = 5e-3 // 5
spiketimes = new Vector()
dendspike = new Vector()
tuftspike = new Vector()
forsec all {
Ra = 70 // ohm*cm; Shen et al. JNP, 1999
cm = 1.2 // uF/cm^2; Shen et al. JNP, 1999
}
soma {
insert pas
e_pas = El
g_pas = 1/RM
insert Inic
enic_Inic = 0
gbar_Inic = 0.0e-3 // 0.1
insert nafast
gnabar_nafast = gNa_soma
sh_nafast = sh_Na
insert kfasttab
gkbar_kfasttab = gKdr_soma
insert kamt
gbar_kamt = gA_soma
sha_kamt = Sha_A
shi_kamt = Shi_A
insert IKs
gbar_IKs = gKs_soma
tauM_IKs = tau_KS
kh_IKs = kh_KS
insert INaP
gbar_INaP = gNaP_soma
insert ICa
gcabar_ICa = gCa_soma
insert Ikca
gkbar_Ikca = gKCa_soma
insert cad
depth_cad = shell_depth
spikecount = new APCount(0.5)
spikecount.thresh = spike_threshold
spikecount.record(spiketimes)
}
dend {
insert pas
e_pas = El
g_pas = 1/RM
insert nafast
gnabar_nafast = gNa_dend
sh_nafast = sh_Na
insert kfasttab
gkbar_kfasttab = gKdr_dend
insert kamt
gbar_kamt = gA_dend
sha_kamt = Sha_A
shi_kamt = Shi_A
insert IKs
gbar_IKs = gKs_dend
tauM_IKs = tau_KS
kh_IKs = kh_KS
insert INaP
gbar_INaP = gNaP_dend
insert ICa
gcabar_ICa = gCa_dend
insert cad
depth_cad = shell_depth
GABAA = new ExpSyn(0.5)
GABAA.tau = GABAAtau
GABAA.e = GABAArev
spikecount2 = new APCount(1.0)
spikecount2.thresh = spike_threshold
spikecount2.record(dendspike)
}
prim {
insert pas
e_pas = El
g_pas = 1/RM
insert nafast
gnabar_nafast = gNa_prim
sh_nafast = sh_Na
insert kfasttab
gkbar_kfasttab = gKdr_prim
insert kamt
gbar_kamt = gA_prim
sha_kamt = Sha_A
shi_kamt = Shi_A
insert IKs
gbar_IKs = gKs_prim
tauM_IKs = tau_KS
kh_IKs = kh_KS
insert INaP
gbar_INaP = gNaP_prim
insert ICa
gcabar_ICa = gCa_prim
insert cad
depth_cad = shell_depth
}
tuft {
insert pas
e_pas = El
g_pas = 1/RM
insert Inic
enic_Inic = 3.2
gbar_Inic = $1
insert nafast
gnabar_nafast = gNa_tuft
sh_nafast = sh_Na
insert kfasttab
gkbar_kfasttab = gKdr_tuft
insert kamt
gbar_kamt = gA_tuft
sha_kamt = Sha_A
shi_kamt = Shi_A
insert IKs
gbar_IKs = gKs_tuft
tauM_IKs = tau_KS
kh_IKs = kh_KS
insert INaP
gbar_INaP = gNaP_tuft
insert ICa
gcabar_ICa = gCa_tuft
insert cad
depth_cad = shell_depth
AMPA = new ExpSyn(0.5)
AMPA.tau = AMPAtau
AMPA.e = AMPArev
spikecount3 = new APCount(0.5)
spikecount3.thresh = spike_threshold
spikecount3.record(tuftspike)
}
forall if (ismembrane("na_ion")) {
ena = ENa
}
forall if (ismembrane("k_ion")) {
ek = Ek
}
}
proc init() {
celldef($1)
}
endtemplate Mitral