BioNMDA#

class brainpy.state.BioNMDA(in_size, name=None, alpha1=Quantity(2., "kHz"), beta1=Quantity(0.01, "kHz"), alpha2=Quantity(1., "1 / (mM * ms)"), beta2=Quantity(0.5, "kHz"), T=Quantity(1., "mM"), T_dur=Quantity(0.5, "ms"), g_initializer=Constant(value=0. mS), x_initializer=Constant(value=0.0))#

Biological NMDA receptor synapse model.

This class implements a detailed kinetic model of NMDA (N-methyl-D-aspartate) receptor-mediated synaptic transmission. NMDA receptors are ionotropic glutamate receptors that play a crucial role in synaptic plasticity, learning, and memory.

Unlike AMPA receptors, NMDA receptors exhibit both ligand-gating and voltage-dependent properties. The voltage dependence arises from the blocking of the receptor pore by extracellular magnesium ions (Mg²⁺) at resting potential. The model uses a second-order kinetic scheme to capture the dynamics of NMDA receptors:

\[ \frac{dg}{dt} = \alpha_1 x (1-g) - \beta_1 g \]

\[ \frac{dx}{dt} = \alpha_2 [T] (1-x) - \beta_2 x \]

\[ I_{syn} = g_{max} \cdot g \cdot g_{\infty}(V,[Mg^{2+}]_o) \cdot (V - E) \]

where:

  • \(g\) represents the fraction of receptors in the open state

  • \(x\) is an auxiliary variable representing an intermediate state

  • \(\alpha_1, \beta_1\) are the conversion rates for the \(g\) variable [ms^-1]

  • \(\alpha_2, \beta_2\) are the conversion rates for the \(x\) variable [ms^-1] or [ms^-1 mM^-1]

  • \([T]\) is the neurotransmitter (glutamate) concentration [mM]

  • \(g_{\infty}(V,[Mg^{2+}]_o)\) is the voltage-dependent magnesium block function

  • \(I_{syn}\) is the resulting synaptic current

  • \(g_{max}\) is the maximum conductance

  • \(V\) is the membrane potential

  • \(E\) is the reversal potential

The magnesium block is typically modeled as:

\[ g_{\infty}(V,[Mg^{2+}]_o) = \frac{1}{1 + [Mg^{2+}]_o \cdot \exp(-a \cdot V) / b} \]

The neurotransmitter concentration \([T]\) follows a square pulse of amplitude T and duration T_dur after each presynaptic spike.

Parameters:
  • in_size (Size) – Size of the input.

  • name (str, optional) – Name of the synapse instance.

  • alpha1 (ArrayLike, default 2.0/u.ms) – Conversion rate of g from inactive to active [ms^-1].

  • beta1 (ArrayLike, default 0.01/u.ms) – Conversion rate of g from active to inactive [ms^-1].

  • alpha2 (ArrayLike, default 1.0/(u.ms*u.mM)) – Conversion rate of x from inactive to active [ms^-1 mM^-1].

  • beta2 (ArrayLike, default 0.5/u.ms) – Conversion rate of x from active to inactive [ms^-1].

  • T (ArrayLike, default 1.0*u.mM) – Peak neurotransmitter concentration when released [mM].

  • T_dur (ArrayLike, default 0.5*u.ms) – Duration of neurotransmitter presence in the synaptic cleft [ms].

  • g_initializer (ArrayLike or Callable, default init.Constant(0. * u.mS)) – Initial value or initializer for the synaptic conductance.

  • x_initializer (ArrayLike or Callable, default init.Constant(0.)) – Initial value or initializer for the auxiliary state variable.

g#

Fraction of receptors in the open state.

Type:

HiddenState

x#

Auxiliary state variable representing intermediate receptor state.

Type:

HiddenState

spike_arrival_time#

Time of the most recent presynaptic spike.

Type:

ShortTermState

See also

AMPA

Fast excitatory AMPA receptor synapse model.

GABAa

Inhibitory GABAa receptor synapse model.

MgBlock

Voltage-dependent Mg2+ block output module.

Notes

  • NMDA receptors have slower kinetics compared to AMPA receptors [1], with rise times of several milliseconds and decay time constants of tens to hundreds of milliseconds.

  • The voltage-dependent magnesium block [4] is typically implemented in the output layer or postsynaptic neuron model, not in this synapse model itself.

  • NMDA receptors are permeable to calcium ions, which can trigger various intracellular signaling cascades important for synaptic plasticity [3].

  • This implementation uses an exponential Euler integration method for both state variables.

  • For structural information about NMDA receptors, see [2].

References

Examples

>>> import brainpy
>>> import brainstate
>>> import saiunit as u
>>> # Create an NMDA synapse
>>> nmda = brainpy.state.BioNMDA(100)
>>> nmda.init_state(batch_size=1)
init_state(batch_size=None, **kwargs)[source]#

State initialization function.

reset_state(batch_size=None, **kwargs)[source]#

State resetting function.