-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathDCN_mechs2.hoc
337 lines (267 loc) · 8.56 KB
/
DCN_mechs2.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
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
// CN model used in Saak V Ovsepian, Volker Steuber, Marie Le
// Berre, Liam O'Hara, Valerie B O'Leary, and J. Oliver Dolly
// (2013). A Defined Heteromeric KV1 Channel Stabilizes the
// Intrinsic Pacemaking and Regulates the Efferent Code of Deep
// Cerebellar Nuclear Neurons to Thalamic Targets. Journal of
// Physiology (epub ahead of print.
//
// written by Johannes Luthman, modified by Volker Steuber
//
// cell mechanisms for the simulations that replicate Figure 9A-D
// in Ovsepian et al. (2013)
objref ampa[EXCTOTALSYNAPSES]
objref fnmda[EXCTOTALSYNAPSES]
objref snmda[EXCTOTALSYNAPSES]
objref gaba[INHTOTALSYNAPSES]
objref axIS_cip
objref soma_cip1
objref soma_cip2
objref ouinoise
proc DCNmechs() {
setBiophysics()
insertChannels()
insertSynapses()
insertIClamp()
insertOUCurrentNoise()
fixCaIons()
}
proc setBiophysics() {
// insert biophysics common to all compartments
forall {
cm = CM
Ra = RA
insert pasDCN
gbar_pasDCN = PASSCOND
}
// Change conductance and resistivity of the axon, the only compartment type with
// "non-standard" conductance and resistivity.
forsec axNode {
cm = CMMYEL
gbar_pasDCN = PASSCONDMYEL
}
}
proc insertOUCurrentNoise() {
soma {
ouinoise = new Ifluct8(0.5)
ouinoise.i0 = 0.0 //0.0 // nA
ouinoise.tau = 2 // ms
ouinoise.std = 0.2 //0.1 // nA
}
}
proc insertIClamp() {
// insert current clamp stimulus into soma and axon initial segment
// used to replicate data from Ovsepian
soma {
soma_cip1 = new IClamp(0.5)
soma_cip1.del = SOMACIP1DEL
soma_cip1.dur = SOMACIP1DUR
soma_cip1.amp = SOMACIP1AMP
soma_cip2 = new IClamp(0.5)
soma_cip2.del = SOMACIP2DEL
soma_cip2.dur = SOMACIP2DUR
soma_cip2.amp = SOMACIP2AMP
}
axIS[9] {
axIS_cip = new IClamp(0.5)
axIS_cip.del = AXISCIPDEL
axIS_cip.dur = AXISCIPDUR
axIS_cip.amp = AXISCIPAMP
}
}
proc insertChannels() {
// For each type of compartment, insert NMODL mechanisms
// (ion channels and ca-concentration).
// The qdeltat variable is GLOBAL in the NMODLs, meaning that it only needs to be
// specified once for each mechanism, here in the soma (which contains a copy of
// each mechanism).
soma {
insert NaF
gbar_NaF = gNaFsoma
qdeltat_NaF = QdTchannelGating
insert NaP
gbar_NaP = gNaPsoma
qdeltat_NaP = QdTchannelGating
ena = SodiumRevPot
insert fKdr
gbar_fKdr = gfKdrsoma
qdeltat_fKdr = QdTchannelGating
insert sKdr
gbar_sKdr = gsKdrsoma
qdeltat_sKdr = QdTchannelGating
insert SK
gbar_SK = gSKsoma
qdeltat_SK = QdTchannelGating
ek = PotassiumRevPot
insert h
gbar_h = gHsoma
qdeltat_h = QdTchannelGating
eh_h = hRevPot
insert TNC
gbar_TNC = gTNCsoma
eTNC_TNC = TNCrevPot
// calcium channels - they use the Goldman-Hodgkin-Katz (GHK) current equation
// and so don't have a set reversal potential.
insert CaLVA
perm_CaLVA = permCaLVAsoma
qdeltat_CaLVA = QdTchannelGating
insert CaHVA
perm_CaHVA = permCaHVAsoma
qdeltat_CaHVA = QdTchannelGating
// insert a hypothetical shell below the membrane of the cell to keep track of the
// calcium entering the cell through the CaHVA and CaLVA channels, respectively.
// The resulting calcium concentration is used to calculate the current flow through
// through those channels.
// For the CaHVA channel:
insert CaConc
tauCa_CaConc = tauCaConcSoma
kCa_CaConc = kCaCaConcSoma
// For the soma, the calculation of shell thickness is different from
// the dendrites since it is a sphere in GENESIS and a cylinder
// in NEURON. See how it's done in GENESIS file cn_comp_dj10.g and
// divide that expression by the surface area of the NEURON soma to get
// the following expression:
depth_CaConc = SHELLTHICK - 2*SHELLTHICK^2/diam + \
4*SHELLTHICK^3/(3*diam^2) // =0.196215
// For the CaLVA channel:
insert CalConc
tauCal_CalConc = tauCaConcSoma
kCal_CalConc = kCaCaConcSoma
depth_CalConc = SHELLTHICK - 2*SHELLTHICK^2/diam + \
4*SHELLTHICK^3/(3*diam^2) // =0.196215
}
forsec axHillock {
insert NaF
gbar_NaF = gNaFaxHill
ena = SodiumRevPot
insert fKdr
gbar_fKdr = gfKdraxHill
insert sKdr
gbar_sKdr = gsKdraxHill
ek = PotassiumRevPot
insert TNC
gbar_TNC = gTNCaxHill
eTNC_TNC = TNCrevPot
}
forsec axIniSeg {
insert NaF
gbar_NaF = gNaFaxIniSeg
ena = SodiumRevPot
insert fKdr
gbar_fKdr = gfKdraxIniSeg
insert sKdr
gbar_sKdr = gsKdraxIniSeg
ek = PotassiumRevPot
insert TNC
gbar_TNC = gTNCaxIniSeg
eTNC_TNC = TNCrevPot
}
// No channels in the axon.
// forsec axNode {
// }
forsec proxDend {
insert NaF
gbar_NaF = gNaFpDend
ena = SodiumRevPot
insert fKdr
gbar_fKdr = gfKdrpDend
insert sKdr
gbar_sKdr = gsKdrpDend
insert SK
gbar_SK = gSKpDend
ek = PotassiumRevPot
insert h
gbar_h = gHpDend
eh_h = hRevPot
insert TNC
gbar_TNC = gTNCpDend
eTNC_TNC = TNCrevPot
insert CaLVA
perm_CaLVA = permCaLVAdend
insert CaHVA
perm_CaHVA = permCaHVAdend
insert CaConc
kCa_CaConc = kCaCaConcDend
depth_CaConc = SHELLTHICK - (SHELLTHICK*SHELLTHICK/diam)
insert CalConc
kCal_CalConc = kCaCaConcDend
depth_CalConc = SHELLTHICK - (SHELLTHICK*SHELLTHICK/diam)
}
forsec distDend {
insert SK
gbar_SK = gSKdDend
ek = PotassiumRevPot
insert h
gbar_h = gHdDend
eh_h = hRevPot
insert CaLVA
perm_CaLVA = permCaLVAdend
insert CaHVA
perm_CaHVA = permCaHVAdend
insert CaConc
kCa_CaConc = kCaCaConcDend
depth_CaConc = SHELLTHICK - (SHELLTHICK*SHELLTHICK/diam)
insert CalConc
kCal_CalConc = kCaCaConcDend
depth_CalConc = SHELLTHICK - (SHELLTHICK*SHELLTHICK/diam)
}
} // end proc insertChannels()
proc insertSynapses() {
// GABAergic synapses
// If the short term depression variant of the GABA synapse is used, then calculate
// the depression level to start out with. Set the level to that reached at steady state
// with the present input frequency, using the equation from DCNsynGABA.mod giving "relProbSS".
if (useGABAsyndep == 1) {
initDeprLevel = 0.08 + 0.60*exp(-2.84*inhibitoryHz) + 0.32*exp(-0.02*inhibitoryHz)
}
c = 0
forsec inhSynapseComps {
if (useGABAsyndep == 1) {
gaba[c] = new DCNsynGABA(0.5)
gaba[c].startDeprLevel = initDeprLevel
} else {
gaba[c] = new DCNsyn(0.5)
}
gaba[c].tauRise = tauRiseGABA
gaba[c].tauFall = tauFallGABA
gaba[c].e = GABARevPot
c+=1
}
// Excitatory synapses
c = 0
forsec excSynapseComps {
ampa[c] = new DCNsyn(0.5)
ampa[c].tauRise = tauRiseAMPA
ampa[c].tauFall = tauFallAMPA
ampa[c].e = ExcitSynRevPot
fnmda[c] = new DCNsynNMDA(0.5)
fnmda[c].tauRise = tauRisefNMDA
fnmda[c].tauFall = tauFallfNMDA
fnmda[c].e = ExcitSynRevPot
fnmda[c].MgFactor = MgFactorfNMDA
fnmda[c].gamma = gammafNMDA
snmda[c] = new DCNsynNMDA(0.5)
snmda[c].tauRise = tauRisesNMDA
snmda[c].tauFall = tauFallsNMDA
snmda[c].e = ExcitSynRevPot
snmda[c].MgFactor = MgFactorsNMDA
snmda[c].gamma = gammasNMDA
c+=1
}
} // end of proc insertSynapses()
proc fixCaIons() {
// Set some specifications for the Ca and Cal ions. The following ion_style
// statements don't affect the behaviour of the model but compared to not giving
// them, speed up the simulation ca 5%, probably due to preventing eca from being
// calculated each dt. ion_style has to be set for each compartment where the Ca ion
// is used but gives no error when set for those compartments that don't use the ion.
forall {
ion_style("ca_ion", 2, 0, 0, 0, 1)
}
forall {
ion_style("cal_ion", 2, 0, 0, 0, 1)
}
// Set the extracellular calcium concentrations (mM):
cao0_ca_ion = 2
calo0_cal_ion = 2
}
//DCNmechs()