Ca_ZH2019_IO#

class braincell.channel.Ca_ZH2019_IO(size, g_max=Quantity(0.4, 'mS / cm^2'), E=Quantity(120., 'mV'), mMidV=Quantity(-61., 'mV'), freeze_m_inf=True, name=None)#

Somatic calcium current of the inferior-olive model (Zhang 2019).

A fixed-reversal-potential calcium current with an instantaneous, non-stateful cubic activation and one dynamic inactivation gate, used for the single-compartment inferior-olive neuron model of (Zhang & Santaniello, 2019) [2]:

\[\begin{split}\begin{aligned} I_{Ca} &= g_{max} \cdot m_\infty \cdot h \cdot (E - V) \\ m_\infty &= \left(\frac{1}{1 + \exp((V_{mid} - V) / 4.2)}\right)^3 \\ h_\infty &= \frac{1}{1 + \exp((V + 85.5) / 8.6)} \\ \tau_h &= 40 + 30 \cdot \frac{1}{1 + \exp((V + 84) / 7.3)} \cdot \exp\!\left(\frac{V + 160}{30}\right) \end{aligned}\end{split}\]

Only \(h\) is an integrated Gate state (gates = (Gate("h"),)); \(m_\infty\) is recomputed from \(V\) on every call to current() rather than tracked as a channel state (see Notes).

Parameters:
  • size (int | Sequence[int] | integer | Sequence[integer]) – Channel state shape.

  • g_max (Array | ndarray | bool | number | bool | int | float | complex | Quantity | Callable) – Maximum conductance density. Defaults to 0.4 mS/cm**2.

  • E (Array | ndarray | bool | number | bool | int | float | complex | Quantity | Callable) – Fixed calcium current reversal potential (this class does not derive \(E\) from an ion concentration). Defaults to 120.0 mV.

  • mMidV (Array | ndarray | bool | number | bool | int | float | complex | Quantity | Callable) – Midpoint voltage of the instantaneous activation curve. Defaults to -61.0 mV.

  • freeze_m_inf (bool) – If True (the default), block autodiff through the instantaneous activation factor with jax.lax.stop_gradient() while leaving the forward current value unchanged; see Notes.

  • name (str | None) – Optional channel name.

See also

Ca_ZH2019_IO_Frozen

Registry alias that forces freeze_m_inf=True unconditionally.

braincell.channel.hyperpolarization_activated.HCN_ZH2019_IO

Sibling inferior-olive current from the same import family (different bibliography origin; see Notes).

Notes

Ported from IO/channel/Ca_ZH19_IO.mod, whose header credits “Ca channel from Manor (Rinzel, Segev, Yarom) 1997” and porter “B. Torben-Nielsen @ HUJI, 7-10-2010” – i.e. the kinetics originate with Manor, Rinzel, Segev & Yarom (1997) [1] and were ported to NEURON by Torben-Nielsen, Segev & Yarom (2012), whose inferior-olive model in turn was reused, without further modification credit, by Zhang & Santaniello (2019) [2]. The 2012 port paper is cited here only in this prose, per house style, not as a numbered reference.

The inferior-olive neurons in both the Torben-Nielsen et al. (2012) and Zhang & Santaniello (2019) models are single-compartment (nseg = 1); the multi-compartment part of that lineage is a separate Purkinje-cell population, not the inferior olive. This docstring does not describe this mechanism as multi-compartment.

In the imported .mod file, the shared rates(v) helper that recomputes minf/hinf/htau was called from BREAKPOINT in the original NEURON mechanism; BrainCell’s port (like the rest of this ZH19/IO import family) evaluates the equivalent expressions from DERIVATIVE-time state updates instead, so m_inf/h_inf/tau_h are refreshed before, rather than after, the state integration step within a given call.

m carries no persistent state and is not part of gates: current() calls f_m_inf() fresh on every evaluation, so nothing “evolves” over time for the activation term – it is a purely algebraic function of the instantaneous voltage. Setting freeze_m_inf=True (the default) wraps that same forward value in jax.lax.stop_gradient(); it changes only which terms appear in gradients taken through this channel, never the forward current or the value of m_inf itself.

References

current(V)[source]#

Calculate the current for this ion channel.

This method should be implemented by subclasses to compute the current based on the channel’s specific properties and state.

Parameters:
  • *args – Variable length argument list.

  • **kwargs – Arbitrary keyword arguments.

Raises:

NotImplementedError – This method must be implemented by subclasses.

root_type#

alias of HHTypedNeuron