Preface |
|
xvii | |
Acknowledgments |
|
xix | |
|
A tour of the Neuron simulation environment |
|
|
1 | (31) |
|
Modeling and understanding |
|
|
1 | (1) |
|
|
1 | (1) |
|
|
2 | (1) |
|
Formulate a conceptual model |
|
|
3 | (2) |
|
Implement the model in Neuron |
|
|
5 | (13) |
|
Starting and stopping Neuron |
|
|
6 | (1) |
|
Bringing up a CellBuilder |
|
|
6 | (2) |
|
Entering the specifications of the model cell |
|
|
8 | (1) |
|
|
8 | (2) |
|
|
10 | (2) |
|
|
12 | (1) |
|
|
13 | (3) |
|
|
16 | (1) |
|
Executing the model specification |
|
|
16 | (2) |
|
|
18 | (3) |
|
|
18 | (2) |
|
|
20 | (1) |
|
Set up controls for running the simulation |
|
|
21 | (1) |
|
Save model with instrumentation and run control |
|
|
21 | (2) |
|
Run the simulation experiment |
|
|
23 | (1) |
|
|
24 | (8) |
|
|
30 | (2) |
|
|
32 | (4) |
|
|
32 | (1) |
|
From physical system to computational model |
|
|
33 | (3) |
|
Conceptual model: a simplified representation of a physical system |
|
|
33 | (1) |
|
Computational model: an accurate representation of a conceptual model |
|
|
33 | (1) |
|
|
34 | (2) |
|
Expressing conceptual models in mathematical terms |
|
|
36 | (19) |
|
|
36 | (8) |
|
Flux and conservation in kinetic schemes |
|
|
37 | (2) |
|
Stoichiometry, flux, and mole equivalents |
|
|
39 | (2) |
|
|
41 | (2) |
|
|
43 | (1) |
|
|
44 | (6) |
|
|
50 | (5) |
|
|
54 | (1) |
|
Essentials of numerical methods for neural modeling |
|
|
55 | (35) |
|
Spatial and temporal error in discretized cable equations |
|
|
56 | (6) |
|
Analytic solutions: continuous in time and space |
|
|
56 | (1) |
|
|
57 | (3) |
|
Adding temporal discretization |
|
|
60 | (2) |
|
Numerical integration methods |
|
|
62 | (21) |
|
Forward Euler: simple, inaccurate and unstable |
|
|
62 | (2) |
|
|
64 | (2) |
|
Backward Euler: inaccurate but stable |
|
|
66 | (2) |
|
Crank-Nicholson: stable and more accurate |
|
|
68 | (2) |
|
Efficient handling of nonlinearity |
|
|
70 | (2) |
|
Adaptive integration: fast or accurate, occasionally both |
|
|
72 | (1) |
|
Implementational considerations |
|
|
73 | (2) |
|
|
75 | (5) |
|
Local variable time step method |
|
|
80 | (3) |
|
Discrete event simulations |
|
|
83 | (1) |
|
|
83 | (3) |
|
Summary of NEURON's integration methods |
|
|
86 | (4) |
|
Fixed time step integrators |
|
|
86 | (1) |
|
|
86 | (1) |
|
|
86 | (1) |
|
|
87 | (1) |
|
|
88 | (1) |
|
|
88 | (1) |
|
|
88 | (2) |
|
Representing neurons with a digital computer |
|
|
90 | (38) |
|
|
90 | (2) |
|
How Neuron separates anatomy and biophysics from purely numerical issues |
|
|
92 | (6) |
|
Sections and section variables |
|
|
92 | (1) |
|
Range and range variables |
|
|
93 | (2) |
|
|
95 | (1) |
|
Implications and applications of this strategy |
|
|
96 | (1) |
|
|
96 | (1) |
|
A practical test of spatial accuracy |
|
|
97 | (1) |
|
How to specify model properties |
|
|
98 | (3) |
|
Which section do we mean? |
|
|
98 | (1) |
|
|
99 | (1) |
|
|
99 | (1) |
|
|
100 | (1) |
|
How to set up model topology |
|
|
101 | (2) |
|
|
101 | (1) |
|
A section may have only one parent |
|
|
101 | (1) |
|
|
101 | (1) |
|
Attach sections at 0 or 1 for accuracy |
|
|
102 | (1) |
|
Checking the tree structure with topology ( ) |
|
|
102 | (1) |
|
Viewing topology with a Shape plot |
|
|
103 | (1) |
|
|
103 | (8) |
|
|
104 | (1) |
|
|
105 | (2) |
|
|
107 | (1) |
|
|
107 | (1) |
|
Stylized specification may be reinterpreted as 3-D specification |
|
|
108 | (3) |
|
How to specify biophysical properties |
|
|
111 | (6) |
|
|
111 | (1) |
|
|
112 | (1) |
|
|
113 | (1) |
|
Working with range variables |
|
|
114 | (1) |
|
|
114 | (1) |
|
|
115 | (1) |
|
How changing nseg affects range variables |
|
|
115 | (2) |
|
|
117 | (11) |
|
A consideration of intent and judgment |
|
|
118 | (3) |
|
Discretization guidelines |
|
|
121 | (1) |
|
|
122 | (4) |
|
|
126 | (2) |
|
How to build and use models of individual cells |
|
|
128 | (29) |
|
Graphical user interface vs. hoc code: which to use, and when? |
|
|
128 | (1) |
|
Hidden secrets of the GUI |
|
|
129 | (1) |
|
Implementing a model with hoc |
|
|
130 | (9) |
|
|
130 | (2) |
|
|
132 | (1) |
|
|
133 | (1) |
|
Testing the model implementation |
|
|
133 | (2) |
|
An aside: how does our model implementation in hoc compare with the output of the Cell Builder? |
|
|
135 | (4) |
|
Instrumenting a model with hoc |
|
|
139 | (1) |
|
Setting up simulation control with hoc |
|
|
139 | (2) |
|
Testing simulation control |
|
|
141 | (1) |
|
Evaluating and using the model |
|
|
141 | (1) |
|
Combining hoc and the GUI |
|
|
141 | (13) |
|
No Neuron Main Menu toolbar? |
|
|
142 | (1) |
|
Default section? We ain't got no default section! |
|
|
142 | (2) |
|
|
144 | (1) |
|
|
144 | (4) |
|
The case of the disappearing section |
|
|
148 | (3) |
|
|
151 | (1) |
|
Conflicts between hoc code and GUI tools |
|
|
152 | (2) |
|
Elementary project management |
|
|
154 | (3) |
|
Iterative program development |
|
|
155 | (1) |
|
|
156 | (1) |
|
How to control simulations |
|
|
157 | (26) |
|
Simulation control with the graphical user interface |
|
|
157 | (2) |
|
|
159 | (5) |
|
An outline of the standard run system |
|
|
160 | (1) |
|
|
160 | (1) |
|
|
161 | (1) |
|
|
161 | (1) |
|
steprun ( ) and continuerun ( ) |
|
|
162 | (1) |
|
|
163 | (1) |
|
|
164 | (15) |
|
The fixed step methods: backward Euler and Crank--Nicholson |
|
|
165 | (6) |
|
|
171 | (2) |
|
Local time step integration with discrete events |
|
|
173 | (6) |
|
Global time step integration with discrete events |
|
|
179 | (1) |
|
Incorporating Graphs and new objects into the plotting system |
|
|
179 | (4) |
|
|
181 | (2) |
|
How to initialize simulations |
|
|
183 | (24) |
|
State variables and STATE variables |
|
|
183 | (2) |
|
Basic initialization in NEURON: finitialize ( ) |
|
|
185 | (2) |
|
Default initialization in the standard run system: stdinit ( ) and init ( ) |
|
|
187 | (8) |
|
|
188 | (2) |
|
Default vs. explicit initialization of STATEs |
|
|
190 | (1) |
|
Ion concentrations and equilibrium potentials |
|
|
190 | (5) |
|
Examples of custom initializations |
|
|
195 | (12) |
|
Initializing to a particular resting potential |
|
|
195 | (2) |
|
Initializing to steady state |
|
|
197 | (1) |
|
Initializing to a desired state |
|
|
198 | (1) |
|
Initializing by changing model parameters |
|
|
199 | (1) |
|
|
200 | (2) |
|
Initializing the mechanism |
|
|
202 | (4) |
|
|
206 | (1) |
|
How to expand NEURON's library of mechanisms |
|
|
207 | (58) |
|
|
207 | (1) |
|
Example 9.1: A passive ``leak'' current |
|
|
208 | (6) |
|
|
210 | (1) |
|
Variable declaration blocks |
|
|
211 | (1) |
|
|
212 | (1) |
|
|
212 | (1) |
|
Equation definition blocks |
|
|
213 | (1) |
|
|
213 | (1) |
|
|
214 | (1) |
|
Example 9.2: A localized shunt |
|
|
214 | (3) |
|
|
215 | (1) |
|
Variable declaration blocks |
|
|
215 | (1) |
|
Equation definition blocks |
|
|
216 | (1) |
|
|
216 | (1) |
|
|
217 | (1) |
|
Example 9.3: An intracellular stimulating electrode |
|
|
217 | (3) |
|
|
218 | (1) |
|
Equation definition blocks |
|
|
218 | (1) |
|
|
218 | (1) |
|
|
219 | (1) |
|
|
219 | (1) |
|
Example 9.4: A voltage-gated current |
|
|
220 | (8) |
|
|
222 | (1) |
|
|
222 | (1) |
|
Variable declaration blocks |
|
|
222 | (1) |
|
|
222 | (1) |
|
|
223 | (1) |
|
Equation definition blocks |
|
|
223 | (1) |
|
|
223 | (1) |
|
|
224 | (1) |
|
|
225 | (1) |
|
|
226 | (1) |
|
|
227 | (1) |
|
Example 9.5: A calcium-activated. voltage-gated current |
|
|
228 | (5) |
|
|
230 | (1) |
|
|
231 | (1) |
|
Variable declaration blocks |
|
|
231 | (1) |
|
|
231 | (1) |
|
|
232 | (1) |
|
Equation definition blocks |
|
|
232 | (1) |
|
|
232 | (1) |
|
|
232 | (1) |
|
The Function and Procedure blocks |
|
|
232 | (1) |
|
|
233 | (1) |
|
Example 9.6: Extracellular potassium accumulation |
|
|
233 | (5) |
|
|
235 | (1) |
|
Variable declaration blocks |
|
|
236 | (1) |
|
|
236 | (1) |
|
|
236 | (1) |
|
Equation definition blocks |
|
|
236 | (1) |
|
|
236 | (1) |
|
|
236 | (1) |
|
|
237 | (1) |
|
|
237 | (1) |
|
General comments about kinetic schemes |
|
|
238 | (2) |
|
Example 9.7: Kinetic scheme for a voltage-gated current |
|
|
240 | (5) |
|
|
242 | (1) |
|
Variable declaration blocks |
|
|
242 | (1) |
|
|
242 | (1) |
|
Equation definition blocks |
|
|
243 | (1) |
|
|
243 | (1) |
|
|
243 | (1) |
|
|
243 | (1) |
|
|
244 | (1) |
|
|
245 | (1) |
|
Example 9.8: Calcium diffusion with buffering |
|
|
245 | (10) |
|
Modeling diffusion with kinetic schemes |
|
|
246 | (4) |
|
|
250 | (1) |
|
|
250 | (1) |
|
Variable declaration blocks |
|
|
250 | (1) |
|
|
250 | (1) |
|
|
250 | (1) |
|
Local variables declared outside of equation definition blocks |
|
|
251 | (1) |
|
Equation definition blocks |
|
|
251 | (1) |
|
|
251 | (1) |
|
|
252 | (1) |
|
|
252 | (2) |
|
|
254 | (1) |
|
Example 9.9: A calcium pump |
|
|
255 | (5) |
|
|
255 | (1) |
|
|
256 | (1) |
|
Variable declaration blocks |
|
|
256 | (1) |
|
|
256 | (1) |
|
|
257 | (1) |
|
|
257 | (1) |
|
|
257 | (1) |
|
Equation definition blocks |
|
|
257 | (1) |
|
|
257 | (1) |
|
|
258 | (1) |
|
|
259 | (1) |
|
|
260 | (1) |
|
Models with discontinuities |
|
|
260 | (3) |
|
Discontinuities in Parameters and Assigned variables |
|
|
260 | (1) |
|
Discontinuities in States |
|
|
261 | (2) |
|
|
263 | (1) |
|
Time-dependent Parameter changes |
|
|
263 | (2) |
|
|
264 | (1) |
|
Synaptic transmission and artificial spiking cells |
|
|
265 | (41) |
|
Modeling communication between cells |
|
|
266 | (23) |
|
Example 10.1: Graded synaptic transmission |
|
|
266 | (2) |
|
|
268 | (1) |
|
|
269 | (1) |
|
|
269 | (2) |
|
Example 10.2: A gap junction |
|
|
271 | (1) |
|
|
272 | (1) |
|
Modeling spike-triggered synaptic transmission: an event-based strategy |
|
|
272 | (1) |
|
|
273 | (1) |
|
|
274 | (3) |
|
Example 10.3: Synapse with exponential decay |
|
|
277 | (1) |
|
|
278 | (1) |
|
|
278 | (1) |
|
|
278 | (1) |
|
|
278 | (2) |
|
Example 10.4: Alpha function synapse |
|
|
280 | (1) |
|
Example 10.5: Use-dependent synaptic plasticity |
|
|
281 | (2) |
|
|
283 | (1) |
|
Example 10.6: Saturating synapses |
|
|
284 | (3) |
|
|
287 | (1) |
|
|
287 | (1) |
|
|
287 | (1) |
|
The Breakpoint and Derivative blocks |
|
|
288 | (1) |
|
|
288 | (1) |
|
|
289 | (17) |
|
Example 10.7: IntFirel, a basic integrate and fire model |
|
|
290 | (1) |
|
|
291 | (1) |
|
|
292 | (1) |
|
Enhancements to the basic mechanism |
|
|
292 | (5) |
|
Example 10.8: IntFire2, firing rate proportional to input |
|
|
297 | (1) |
|
|
298 | (3) |
|
Example 10.9: IntFire4, different synaptic time constants |
|
|
301 | (3) |
|
Other comments regarding artificial spiking cells |
|
|
304 | (1) |
|
|
305 | (1) |
|
|
306 | (37) |
|
Building a simple network with the GUI |
|
|
307 | (1) |
|
|
308 | (1) |
|
Adding a new artificial spiking cell to Neuron |
|
|
309 | (2) |
|
Creating a prototype net with the GUI |
|
|
311 | (13) |
|
Define the types of cells |
|
|
311 | (1) |
|
Create each cell in the network |
|
|
312 | (3) |
|
|
315 | (1) |
|
Setting up network architecture |
|
|
315 | (1) |
|
Specifying delays and weights |
|
|
316 | (2) |
|
|
318 | (1) |
|
Set up controls for running simulations |
|
|
319 | (3) |
|
|
322 | (1) |
|
Caveats and other comments |
|
|
322 | (1) |
|
Changing the properties of an existing network |
|
|
322 | (1) |
|
|
323 | (1) |
|
Combining the GUI and programming |
|
|
324 | (19) |
|
Creating a hoc file from the NetWork Builder |
|
|
324 | (2) |
|
|
326 | (1) |
|
|
326 | (1) |
|
Network specification interface |
|
|
327 | (1) |
|
|
328 | (1) |
|
Exploiting the reusable code |
|
|
328 | (13) |
|
|
341 | (2) |
|
hoc, NEURON's interpreter |
|
|
343 | (20) |
|
|
344 | (1) |
|
Adding new mechanisms to the interpreter |
|
|
345 | (1) |
|
The stand-alone interpreter |
|
|
346 | (4) |
|
Starting and exiting the interpreter |
|
|
346 | (2) |
|
|
348 | (2) |
|
|
350 | (13) |
|
|
350 | (1) |
|
|
350 | (3) |
|
|
353 | (1) |
|
|
354 | (1) |
|
|
355 | (1) |
|
|
355 | (1) |
|
|
356 | (1) |
|
|
357 | (1) |
|
|
358 | (1) |
|
Call by reference vs. call by value |
|
|
359 | (1) |
|
|
360 | (1) |
|
|
360 | (1) |
|
|
361 | (1) |
|
|
362 | (1) |
|
|
362 | (1) |
|
Object-oriented programming |
|
|
363 | (15) |
|
|
363 | (1) |
|
|
364 | (1) |
|
Objects and object references |
|
|
364 | (8) |
|
Declaring an object reference |
|
|
364 | (1) |
|
Creating and destroying an object |
|
|
365 | (1) |
|
Using an object reference |
|
|
366 | (1) |
|
Passing objrefs (and objects) to functions |
|
|
366 | (1) |
|
|
367 | (1) |
|
|
368 | (1) |
|
Initializing variables in an object |
|
|
368 | (1) |
|
|
369 | (1) |
|
Object references vs. object names |
|
|
370 | (1) |
|
An example of the didactic use of object names |
|
|
371 | (1) |
|
Using objects to solve programming problems |
|
|
372 | (4) |
|
Dealing with collections or sets |
|
|
372 | (1) |
|
|
372 | (1) |
|
|
373 | (2) |
|
|
375 | (1) |
|
Polymorphism and inheritance |
|
|
376 | (2) |
|
|
377 | (1) |
|
How to modify Neuron itself |
|
|
378 | (21) |
|
A word about graphics terminology |
|
|
378 | (1) |
|
Graphical interface programming |
|
|
378 | (21) |
|
|
380 | (1) |
|
A pattern for defining a GUI tool template |
|
|
381 | (2) |
|
Enclosing the GUI tool in a single window |
|
|
383 | (2) |
|
Saving the window to a session |
|
|
385 | (4) |
|
Tool-specific development |
|
|
389 | (1) |
|
|
389 | (3) |
|
|
392 | (3) |
|
|
395 | (4) |
|
Appendix A1 Mathematical analysis of IntFire 4 |
|
|
399 | (7) |
|
Proof that the estimate is never later than the true firing time |
|
|
401 | (5) |
|
Part 1: If m0 ≤ 0, then m(t)remains < 1 |
|
|
402 | (2) |
|
Part 2: If m' > 0, (1 -- m)/m' underestimates the firing time |
|
|
404 | (2) |
|
Appendix A2 Neuron's built-in editor |
|
|
406 | (6) |
|
|
407 | (1) |
|
Switching from hoc to emacs |
|
|
407 | (1) |
|
Returning from emacs to hoc |
|
|
407 | (1) |
|
Killing the current command |
|
|
407 | (1) |
|
|
407 | (1) |
|
|
408 | (1) |
|
|
408 | (1) |
|
Blocks of text: marking, cutting, and pasting |
|
|
408 | (1) |
|
|
409 | (1) |
|
Text formatting and other tricks |
|
|
409 | (1) |
|
|
409 | (1) |
|
|
410 | (1) |
|
Macros and repeating commands |
|
|
411 | (1) |
|
|
411 | (1) |
Epilogue |
|
412 | (1) |
Index |
|
413 | |