-
Notifications
You must be signed in to change notification settings - Fork 1
/
traub.hoc
341 lines (260 loc) · 8.5 KB
/
traub.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
338
339
340
/*
Traub CA3 compartmental model
*/
// the variable figNumber is defined in each GenerateFigX.hoc file
// divide both gKahp and gKc conductances by 20 as per the legend of Fig. 4 in Traub et al. 1991
if ( figNumber == 4 ) { scaleFactor = 20 } else { scaleFactor = 1 }
/*
***Note on the CaShell mechanism***
This mechanism implements the Ca dynamics of the Traub model according to
d xi_i / dt = -phi_i I_Ca,i - beta_xi xi_i
where xi_i is the calcium concentration variable (dimensionless),
phi_i is a compartment-dependent conversion factor for the Ca current to
calcium concentration change, and beta_xi is a time constant of calcium
clearance.
In the Traub model, the current is in units of nA, time is in units of ms.
So the units of phi_i are 1/(ms nA). In NEURON, time is in units of ms,
but current is in units of mA/cm^2. So we need to convert the current to
units of nA. For this we compute the surface area (S_A) of the compartment,
S_A_um2 = pi * diam * L, in units of um^2. Since 1 um = 10^-4 cm, we multiply
by 10^-8 to obtain S_A_cm2 in units of cm^2. If we multiply I_Ca,i (NEURON) by
S_A_cm2, we obtain the current in units of mA. To convert to nA, we need to
multiply by 1 mA = 10^6 nA. Hence,
phi_i (Traub) * I_Ca,i (Traub) = phi_i (Traub) * I_Ca,i (NEURON) * S_A_cm2 * 10^6 (mA to nA)
Therefore the ph_i constant in NEURON is given by
phi_i (NEURON) = phi_i (Traub) * S_A_cm2 * 10^6 = phi_i (Traub) * S_A_um2 * 10^-8 * 10^6
phi_i (NEURON) = phi_i (Traub) * S_A_um2 * 10^-2
Traub et al. (1991) phi_i values:
phi_9 = 17,402 (our soma, use 17.402)
phi_1 to phi_7 = 7,769 (our basal[7] to basal[1], use 7.769)
phi_8 = 34,530 (our basal[0], use 34.530)
phi_10 = 26,404 (our apical[0], use 26.404)
phi_11 to phi_19 = 5,941 (our apical[1] to apical[9], use 5.941)
Note: as explained in Traub et al. (1994), these values are wrong by a factor
1,000 and should be replaced by the ones in parentheses.
Since there are no gCa in basal[7] and in apical[9], there is
no need to insert CaShell there. We compute the NEURON values
immediately below.
*/
//Set resting membrane potential to 0 mV
v_init = 0
rss_gCa=0
//Set Initial Ca level
cai0_CaShell=0
diam_soma = 4.23 * 2 // from Methods of Traub 1991, radius = 4.23 um
L_soma = 125 // um
phi_soma_traub_corrected = 17.402
phi_soma = phi_soma_traub_corrected * PI * diam_soma * L_soma * 1e-2
diam_basal = 2.42 * 2 // according to Traub 1991 radius = 2.42 um
L_basal = 110.0 // um
phi_basal_1_6_traub_corrected = 7.769
phi_basal_1_6 = phi_basal_1_6_traub_corrected * PI * diam_basal * L_basal * 1e-2
phi_basal_0_traub_corrected = 34.530
phi_basal_0 = phi_basal_0_traub_corrected * PI * diam_basal * L_basal * 1e-2
// these morphology values give a smaller area than reported in the paper
// (2.8935 µm radius and 120.35 µm length give 2188 um2 area)
diam_apical = 2.89 * 2 // according to Traub 1991 radius = 2.89 um
L_apical = 120 // um
phi_apical_0_traub_corrected = 26.404
phi_apical_0 = phi_apical_0_traub_corrected * PI * diam_apical * L_apical * 1e-2
phi_apical_1_8_traub_corrected = 5.941
phi_apical_1_8 = phi_apical_1_8_traub_corrected * PI * diam_apical * L_apical * 1e-2
// Reversal potentials for the different ions
ek_rev = -15
ena_rev = 115
eca_rev = 140
// Now create model compartments
create soma
create basal[8]
create apical[10]
//setup topology
connect apical[0](0), soma(1) //child, parent
connect basal[0](0), soma(0)
if ( figNumber != 4 ) {
//connect basal dendrites in chain order to soma
for i = 1, 7 {
connect basal[i](0), basal[i-1](1) // child, parent
}
// As above, results in apical[9](0) -> apical[8](1) -> apical[8](0) -> ... apical[1](0) -> apical[0](1)
// where we use the notation " child -> parent" to denote child compartment connected to
// parent compartment
for i = 1, 9 {
connect apical[i](0), apical[i-1](1) // child, parent
}
}
Cm_t = 3 // uF/cm^2
Ra_t = 100 // Ohm cm
gm_t = 1/10000 // S/cm^2
ep_t = 0 // mV
// Setup all conductances in soma
soma { //
nseg = 1
diam = diam_soma
L = L_soma
Ra=Ra_t
cm=Cm_t
insert pas
e_pas= ep_t
g_pas = gm_t // in units of S/cm^2
insert gNa
gmax_gNa = 0.03
insert gKdr
gmax_gKdr = 0.015
insert gKa
gmax_gKa = 0.005
insert gCa
gmax_gCa = 0.004
insert CaShell
phi_CaShell = phi_soma
// divide both gKahp and gKc conductances by 20 as per the legend of Fig. 4 in Traub et al. 1991
insert gKahp
gmax_gKahp = 0.0008/scaleFactor
insert gKc
gmax_gKc = 0.010/scaleFactor
//compartment ions: Na, K, Ca
ena = ena_rev
ek = ek_rev
eca = eca_rev
// this following allows cai/cao to be state variables and eca to be a parameter
// needs to be at end of insertion process not to be overridden by other
// Ca related mechanism insertions
ion_style("ca_ion",3,1,0,0,0)
}
// Setup basic passive parameters in basal and apical compartments
for i = 0, 7 {
basal[i] {
Ra=Ra_t
cm=Cm_t
insert pas
e_pas= ep_t
g_pas = gm_t
nseg = 1
diam = diam_basal
L = L_basal
}
}
for i = 0, 9 {
apical[i] {
Ra=Ra_t
cm=Cm_t
insert pas
e_pas= ep_t
g_pas = gm_t
nseg = 1
diam = diam_apical
L = L_apical
}
}
define_shape()
// Setup active conductances in basal and apical compartments
//setup a vector containing the conductances for each basal compartement
objref gCa_basal
gCa_basal = new Vector(7, 0.0) // the last compartment has no gCa
gCa_basal.x[0] = 0.008 // S/cm^2
gCa_basal.x[1] = 0.005
gCa_basal.fill(0.012, 2, 4) // values at index 2, 3 and 4
gCa_basal.fill(0.005, 5, 6) // values at index 5 and 6
// divide both gKahp and gKc conductances by 20 as per the legend of Fig. 4 in Traub et al. 1991
objref gKahp_basal
gKahp_basal = new Vector(7, 0.0008/scaleFactor) // the last compartment has no gKahp
objref gKc_basal
gKc_basal = new Vector(7, 0.0) // the last compartment has no gKc
gKc_basal.x[0] = 0.020/scaleFactor // S/cm^2
gKc_basal.x[1] = 0.005/scaleFactor
gKc_basal.fill(0.010/scaleFactor, 2, 4) // values at index 2, 3 and 4
gKc_basal.fill(0.005/scaleFactor, 5, 6) // values at index 5 and 6
for i = 0, 6 {
basal[i] {
insert gCa
gmax_gCa = gCa_basal.x[i]
insert CaShell
if ( i == 0 ) {
phi_CaShell = phi_basal_0
} else {
phi_CaShell = phi_basal_1_6
}
insert gKahp
gmax_gKahp = gKahp_basal.x[i]
insert gKc
gmax_gKc = gKc_basal.x[i]
// Compartment ions: Ca, K
ek = ek_rev
eca = eca_rev
ion_style("ca_ion",3,1,0,0,0)
}
}
// add the gNa and gKdr conductances in the subset of basal compartments specified by Traub 1991
basal[0] {
insert gNa
gmax_gNa = 0.015
insert gKdr
gmax_gKdr = 0.005
// Compartment ions: Na, K
ek = ek_rev
ena = ena_rev
}
basal[2] {
insert gNa
gmax_gNa = 0.020
insert gKdr
gmax_gKdr = 0.020
// Compartment ions: Na, K
ek = ek_rev
ena = ena_rev
}
// setup a vector containing the conductances for each apical compartment
objref gCa_apical
gCa_apical = new Vector(9, 0.0) // the last compartment has no gCa
gCa_apical.x[0] = 0.008 // S/cm^2
gCa_apical.x[1] = 0.005
gCa_apical.fill(0.017, 2, 4) // values at index 2, 3 and 4
gCa_apical.fill(0.010, 5, 6) // values at index 5 and 6
gCa_apical.fill(0.005, 7, 8) // values at index 7 and 8
// divide both gKahp and gKc conductances by 20 as per the legend of Fig. 4 in Traub et al. 1991
objref gKahp_apical
gKahp_apical = new Vector(9, 0.0008/scaleFactor) // the last compartment has no gKahp
objref gKc_apical
gKc_apical = new Vector(9, 0.0) // the last compartment has no gKc
gKc_apical.x[0] = 0.020/scaleFactor // S/cm^2
gKc_apical.x[1] = 0.005/scaleFactor
gKc_apical.fill(0.015/scaleFactor, 2, 6) // values at index 2 to 6
gKc_apical.fill(0.005/scaleFactor, 7, 8) // values at index 7 and 8
for i = 0, 8 {
apical[i] {
insert gCa
gmax_gCa = gCa_apical.x[i]
insert CaShell
if ( i == 0 ) {
phi_CaShell = phi_apical_0
} else {
phi_CaShell = phi_apical_1_8
}
insert gKahp
gmax_gKahp = gKahp_apical.x[i]
insert gKc
gmax_gKc = gKc_apical.x[i]
// Compartment ions: Ca, K
ek = ek_rev
eca = eca_rev
ion_style("ca_ion",3,1,0,0,0)
}
}
// add the gNa and gKdr conductances in the subset of apical compartments specified by Traub 1991
apical[0] {
insert gNa
gmax_gNa = 0.015
insert gKdr
gmax_gKdr = 0.005
// Compartment ions: Na, K
ek = ek_rev
ena = ena_rev
}
apical[2] {
insert gNa
gmax_gNa = 0.020
insert gKdr
gmax_gKdr = 0.020
// Compartment ions: Na, K
ek = ek_rev
ena = ena_rev
}