List of Errata for the Enhanced Preprint of "Expanding NEURON's Repertoire of Mechanisms with NMODL"

These corrections pertain to the "enhanced preprint" of "Expanding NEURON's repertoire of mechanisms with NMODL." They do not apply to the paper as it appeared in Neural Computation, because the latter did not present extensively detailed model source code.


Hines, M.L. and Carnevale, N.T. Expanding NEURON's Repertoire of Mechanisms with NMODL. Neural Computation 12:995-1007, 2000.

Example 9: a calcium pump

To calculate the flux of calcium via ion channels into the ca[0] state, this mechanism must subtract the pump's own current from the total calcium current. The description in the pdf file subtracts ica_pmp, which is the pump's current computed at the present time. With fixed time step methods, this is incorrect--instead it should subtract the pump current computed at the end of the previous time step. The code as described in the pdf produces simulations in which the time course of calcium concentration is affected by the calcium concentration at the end of the previous simulation.

The fix is merely to introduce a new variable ica_pmp_last whose value is the pump current at the end of the previous step. This requires proper declaration and initialization of ica_pmp and ica_pmp_last, which involves the following changes to the mod file. For the convenience of users, at the end of this erratum is a link to a version of the mod file cdp.mod that contains all of the necessary changes.

Page 44 The ASSIGNED block

This needs to have _four_ additions:

cao            (mM)
ica_pmp        (mA/cm2)
ica_pmp_last   (mA/cm2)
parea          (um)     : pump area per unit length

Page 45 The BREAKPOINT block

This should include a statement that assigns a value to ica_pmp_last

  SOLVE state METHOD sparse
  ica_pmp_last = ica_pmp
  ica = ica_pmp

Page 45 The INITIAL block

For the "alternative style of initialization," in which NEURON calculates the values of pump and pumpca, the statements

should be
ica_pmp = 0
ica_pmp_last = 0
Note that the KINETIC block on page 46 already contains the CONSERVE statement
CONSERVE pump + pumpca = TotalPump * parea * (1e10)
that is necessary for independence of the equations that describe free and bound buffer.

Page 46 The STATE block

This section of the paper should actually be called The KINETIC block. The LONGITUDINAL_DIFFUSION statement should be changed from

LONGITUDINAL_DIFFUSION i, DCa*diam*diam*vrat[i] {ca}
i.e. exactly as in Listing 8 on page 38.

The expression for the flux into ca[0] should subtract ica_pmp_last instead of ica_pmp, i.e. it should be changed from

~ ca[0] << (-(ica - ica_pmp)*PI*diam/(2*FARADAY))  : ica is Ca efflux
~ ca[0] << (-(ica - ica_pmp_last)*PI*diam/(2*FARADAY))  : ica is Ca efflux

Complete listing of cdp.mod

Here is the complete, correct cdp.mod for four radial compartments (Nannuli == 4).

Page and graphics copyright © 2008 N.T. Carnevale and M.L. Hines, All Rights Reserved.