class brainpy.channels.CalciumDetailed(size, keep_size=False, T=36.0, d=1.0, C_rest=0.00024, tau=5.0, C0=2.0, C_initializer=OneInit(value=0.00024), method='exp_auto', name=None, mode=None, **channels)[source]#

Dynamical Calcium model proposed.

1. The dynamics of intracellular \(Ca^{2+}\)

The dynamics of intracellular \(Ca^{2+}\) were determined by two contributions [1] :

(i) Influx of \(Ca^{2+}\) due to Calcium currents

\(Ca^{2+}\) ions enter through \(Ca^{2+}\) channels and diffuse into the interior of the cell. Only the \(Ca^{2+}\) concentration in a thin shell beneath the membrane was modeled. The influx of \(Ca^{2+}\) into such a thin shell followed:

\[[Ca]_{i}=-\frac{k}{2 F d} I_{Ca}\]

where \(F=96489\, \mathrm{C\, mol^{-1}}\) is the Faraday constant, \(d=1\, \mathrm{\mu m}\) is the depth of the shell beneath the membrane, the unit conversion constant is \(k=0.1\) for \(I_T\) in \(\mathrm{\mu A/cm^{2}}\) and \([Ca]_{i}\) in millimolar, and \(I_{Ca}\) is the summation of all \(Ca^{2+}\) currents.

(ii) Efflux of \(Ca^{2+}\) due to an active pump

In a thin shell beneath the membrane, \(Ca^{2+}\) retrieval usually consists of a combination of several processes, such as binding to \(Ca^{2+}\) buffers, calcium efflux due to \(Ca^{2+}\) ATPase pump activity and diffusion to neighboring shells. Only the \(Ca^{2+}\) pump was modeled here. We adopted the following kinetic scheme:

\[Ca _{i}^{2+}+ P \overset{c_1}{\underset{c_2}{\rightleftharpoons}} CaP \xrightarrow{c_3} P+ Ca _{0}^{2+}\]

where P represents the \(Ca^{2+}\) pump, CaP is an intermediate state, \(Ca _{ o }^{2+}\) is the extracellular \(Ca^{2+}\) concentration, and \(c_{1}, c_{2}\) and \(c_{3}\) are rate constants. \(Ca^{2+}\) ions have a high affinity for the pump \(P\), whereas extrusion of \(Ca^{2+}\) follows a slower process (Blaustein, 1988 ). Therefore, \(c_{3}\) is low compared to \(c_{1}\) and \(c_{2}\) and the Michaelis-Menten approximation can be used for describing the kinetics of the pump. According to such a scheme, the kinetic equation for the \(Ca^{2+}\) pump is:


where \(K_{T}=10^{-4}\, \mathrm{mM\, ms^{-1}}\) is the product of \(c_{3}\) with the total concentration of \(P\) and \(K_{d}=c_{2} / c_{1}=10^{-4}\, \mathrm{mM}\) is the dissociation constant, which can be interpreted here as the value of \([Ca]_{i}\) at which the pump is half activated (if \([Ca]_{i} \ll K_{d}\) then the efflux is negligible).

2.A simple first-order model

While, in (Bazhenov, et al., 1998) [2], the \(Ca^{2+}\) dynamics is described by a simple first-order model,

\[\frac{d\left[Ca^{2+}\right]_{i}}{d t}=-\frac{I_{Ca}}{z F d}+\frac{\left[Ca^{2+}\right]_{rest}-\left[C a^{2+}\right]_{i}}{\tau_{Ca}}\]

where \(I_{Ca}\) is the summation of all \(Ca ^{2+}\) currents, \(d\) is the thickness of the perimembrane “shell” in which calcium is able to affect membrane properties \((1.\, \mathrm{\mu M})\), \(z=2\) is the valence of the \(Ca ^{2+}\) ion, \(F\) is the Faraday constant, and \(\tau_{C a}\) is the \(Ca ^{2+}\) removal rate. The resting \(Ca ^{2+}\) concentration was set to be \(\left[ Ca ^{2+}\right]_{\text {rest}}=.05\, \mathrm{\mu M}\) .

3. The reversal potential

The reversal potential of calcium \(Ca ^{2+}\) is calculated according to the Nernst equation:

\[E = k'{RT \over 2F} log{[Ca^{2+}]_0 \over [Ca^{2+}]_i}\]

where \(R=8.31441 \, \mathrm{J} /(\mathrm{mol}^{\circ} \mathrm{K})\), \(T=309.15^{\circ} \mathrm{K}\), \(F=96,489 \mathrm{C} / \mathrm{mol}\), and \(\left[\mathrm{Ca}^{2+}\right]_{0}=2 \mathrm{mM}\).

  • d (float) – The thickness of the peri-membrane “shell”.

  • F (float) – The Faraday constant. (\(C*mmol^{-1}\))

  • tau (float) – The time constant of the \(Ca ^{2+}\) removal rate. (ms)

  • C_rest (float) – The resting \(Ca ^{2+}\) concentration.

  • C0 (float) – The \(Ca ^{2+}\) concentration outside of the membrane.

  • R (float) – The gas constant. (:math:` J*mol^{-1}*K^{-1}`)


__init__(size, keep_size=False, T=36.0, d=1.0, C_rest=0.00024, tau=5.0, C0=2.0, C_initializer=OneInit(value=0.00024), method='exp_auto', name=None, mode=None, **channels)[source]#


__init__(size[, keep_size, T, d, C_rest, ...])


Clear inputs in the children classes.


Move all variable into the CPU device.


Move all variables into the GPU device.

current(V[, C_Ca, E_Ca])

derivative(C, t, V)

get_delay_data(identifier, delay_step, *indices)

Get delay data according to the provided delay steps.

load_state_dict(state_dict[, warn, compatible])

Copy parameters and buffers from state_dict into this module and its descendants.

load_states(filename[, verbose])

Load the model states.

nodes([method, level, include_self])

Collect all children nodes.

register_delay(identifier, delay_step, ...)

Register delay variable.

register_implicit_nodes(*channels, ...)

register_implicit_vars(*variables[, var_cls])

reset(V[, batch_size])

Reset function which reset the whole variables in the model.


Reset local delay variables.

reset_state(V[, C_Ca, E_Ca, batch_size])

Reset function which reset the states in the model.

save_states(filename[, variables])

Save the model states.


Returns a dictionary containing a whole state of the module.


Moves all variables into the given device.


Move all variables into the TPU device.

train_vars([method, level, include_self])

The shortcut for retrieving all trainable variables.


Flattens the object as a PyTree.

tree_unflatten(aux, dynamic_values)

Unflatten the data to construct an object of this class.

unique_name([name, type_])

Get the unique name for this object.

update(tdi, V)

Update function of a container.


Update local delay variables.

vars([method, level, include_self, ...])

Collect all variables in this node and the children nodes.





Global delay data, which stores the delay variables and corresponding delay targets.


Mode of the model, which is useful to control the multiple behaviors of the model.


Name of the model.