jaxley.synapses.AlphaSynapse#

class AlphaSynapse(name=None)[source]#

Bases: Synapse

Alpha synapse which responds to binary pre-synaptic spike trains.

This synapse is meant to be used together with pre-synaptic neurons whose voltage is binary (indicating spike or no spike).

This synapse is implemented as two cascaded first-order linear ODEs:

\[\tau_{\mathrm{rise}}\frac{d r(t)}{d t} = -r(t) + x(t)\]
\[\tau_{\mathrm{decay}}\frac{d s(t)}{d t} = -s(t) + r(t)\]
\[I = \overline{g}\, \cdot s \cdot (E - V_{\text{post}})\]

Here, \(x(t)\) denotes the presynaptic input (typically a binary spike train), \(r(t)\) is an intermediate rise state, and \(s(t)\) is the synaptic state that determines the synaptic conductance.

For an impulse input \(x(t) = \delta(t)\), the resulting synaptic kernel is

\[s(t) \propto e^{-t / \tau_{\mathrm{decay}}} - e^{-t / \tau_{\mathrm{rise}}}, \qquad t \ge 0.\]
The synaptic parameters are:
  • gS: the maximal conductance \(\overline{g}\) (uS).

  • tau_decay: The decay time constant \(\tau_{\text{rise}}\) (ms).

  • tau_rise: The rise time constant \(\tau_{\text{decay}}\) (ms).

The inserted cellular parameters are:
  • e_syn: The synaptic reversal potential \(E\) (mV). This synapse uses the pre-synaptic reveral potential to compute the current, thereby directly enforcing Dale’s law.

The synaptic state is:
  • r: Intermediate state representing the rising phase.

  • s: Activity level of the synapse.

Example usage#

import jaxley as jx
from jaxley.connect import connect
from jaxley.synapses import AlphaSynapse
from jaxley.channels import Leak

dummy = jx.Cell()
cell = jx.read_swc("morph_ca1_n120.swc", ncomp=1)
net = jx.Network([dummy, cell])
net.cell(1).insert(Leak())

# Connect pre-synaptic dummy to the morphologically detailed cell.
connect(net.cell(0), net.cell(1).branch(5).comp(0), AlphaSynapse())
net.set("AlphaSynapse_gS", 0.1)  # Synaptic strength.
net.set("AlphaSynapse_tau_decay", 5.0)  # Decay time in ms

# Clamp the voltage of the pre-synaptic cell to the spike train.
net.cell(0).set("v", 0.0)  # Initial state.
net.cell(0).clamp("v", spike_train)

net.cell(1).branch(5).comp(0).record()
v = jx.integrate(net, delta_t=dt)
synapse_params = None#
synapse_states = None#
update_states(synapse_states, synapse_params, pre_voltage, post_voltage, pre_states, post_states, pre_params, post_params, delta_t)[source]#

Return updated synapse state and current.

Parameters:
Return type:

dict

compute_current(synapse_states, synapse_params, pre_voltage, post_voltage, pre_states, post_states, pre_params, post_params, delta_t)[source]#

Return updated synapse state and current.

Parameters:
Return type:

float

change_name(new_name)#

Change the synapse name.

Parameters:

new_name (str) – The new name of the channel.

Returns:

Renamed channel, such that this function is chainable.

property name: str | None#
Parameters:

name (str | None)