Synapse Models

The following synapse models are supported:

  • Dirac-Delta
  • Alpha
  • Excitatory post-synaptic potential (EPSP)

The following wrapper types are also supported:

Default function implementations

Some function implementations apply to all synapses (unless they override them) that inherit from AbstractSynapse.

SpikingNN.excite!Method
excite!(synapse::AbstractSynapse, spikes::Vector{<:Integer})
excite!(synapses::AbstractArray{<:AbstractSynapse}, spikes::Vector{<:Integer})

Excite a synapse with a vector of spikes by calling excite!(synapse, spike) for spike in spikes.

source
SpikingNN.spike!Method
spike!(synapse::AbstractSynapse, spike::Integer; dt::Real = 1.0)
spike!(synapse::AbstractArray{<:AbstractSynapse}, spikes::AbstractArray{<:Integer}; dt::Real = 1.0)

Notify a synapse that the post-synaptic neuron has released a spike. The default implmentation is to do nothing. Override this behavior by dispatching on your synapse type.

source

Dirac-Delta

SpikingNN.excite!Method
excite!(synapse::Delta, spike::Integer)
excite!(synapses::AbstractArray{<:Delta}, spike::Integer)

Excite synapse with a spike (spike == time step of spike).

source
SpikingNN.evaluate!Method
evaluate!(synapse::Delta, t::Integer; dt::Real = 1.0)
(synapse::Delta)(t::Integer; dt::Real = 1.0)
evaluate!(synapses::AbstractArray{<:Delta}, t::Integer; dt::Real = 1.0)

Return synapse.q if t == synapse.lastspike otherwise return zero.

source
SpikingNN.reset!Method
reset!(synapse::Delta)
reset!(synapses::AbstractArray{<:Delta})

Reset synapse.

source

Alpha

SpikingNN.Synapse.AlphaType
Alpha{IT<:Integer, VT<:Real}

Synapse that returns (t - lastspike) * (q / τ) * exp(-(t - lastspike - τ) / τ) Θ(t - lastspike) (where Θ is the Heaviside function).

source
SpikingNN.excite!Method
excite!(synapse::Alpha, spike::Integer)
excite!(synapses::AbstractArray{<:Alpha}, spike::Integer)

Excite synapse with a spike (spike == time step of spike).

source
SpikingNN.evaluate!Method
evaluate!(synapse::Alpha, t::Integer; dt::Real = 1.0)
(synapse::Alpha)(t::Integer; dt::Real = 1.0)
evaluate!(synapses::AbstractArray{<:Alpha}, t::Integer; dt::Real = 1.0)

Evaluate an alpha synapse. See Synapse.Alpha.

source
SpikingNN.reset!Method
reset!(synapse::Alpha)
reset!(synapses::AbstractArray{<:Alpha})

Reset synapse.

source

Exitatory Post-Synaptic Potential

SpikingNN.excite!Method
excite!(synapse::EPSP, spike::Integer)
excite!(synapses::AbstractArray{<:EPSP}, spike::Integer)

Excite synapse with a spike (spike == time step of spike).

source
SpikingNN.spike!Method
spike!(synapse::EPSP, spike::Integer; dt::Real = 1.0)
spike!(synapses::AbstractArray{<:EPSP}, spikes; dt::Real = 1.0)

Reset synapse when the post-synaptic neuron spikes.

source
SpikingNN.evaluate!Method
evaluate!(synapse::EPSP, t::Integer; dt::Real = 1.0)
(synapse::EPSP)(t::Integer; dt::Real = 1.0)
evaluate!(synapses::AbstractArray{<:EPSP}, t::Integer; dt::Real = 1.0)

Evaluate an EPSP synapse. See Synapse.EPSP.

source

Queued Synapse

SpikingNN.Synapse.QueuedSynapseType
QueuedSynapse{ST<:AbstractSynapse, IT<:Integer}

A QueuedSynapse excites its internal synapse when the timestep matches the head of the queue. Wrapping a synapse in this type allows you to pre-load several spike excitation times, and the internal synapse will be excited as those time stamps are evaluated. This can be useful for cases where it is more efficient to load all the input spikes before simulation.

Note: currently only supported on CPU.

source
SpikingNN.excite!Method
excite!(synapse::QueuedSynapse, spike::Integer)
excite!(synapses::AbstractArray{<:QueuedSynapse}, spike::Integer)

Excite synapse with a spike (spike == time step of spike) by pushing spike onto synapse.queue.

source
SpikingNN.evaluate!Method
evaluate!(synapse::QueuedSynapse, t::Integer; dt::Real = 1.0)
(synapse::QueuedSynapse)(t::Integer; dt::Real = 1.0)
evaluate!(synapses::AbstractArray{<:QueuedSynapse}, t::Integer; dt::Real = 1.0)

Evaluate synapse at time t by first exciting synapse.core with a spike if there is one to process, then evaluating synapse.core.

source
SpikingNN.reset!Method
reset!(synapse::QueuedSynapse)
reset!(synapses::AbstractArray{<:QueuedSynapse})

Clear synapse.queue and reset synapse.core.

source

Delayed Synapse

SpikingNN.excite!Method
excite!(synapse::DelayedSynapse, spike::Integer)
excite!(synapses::AbstractArray{<:DelayedSynapse}, spike::Integer)

Excite synapse.core with a spike + synapse.delay (spike == time step of spike).

source
SpikingNN.evaluate!Method
evaluate!(synapse::DelayedSynapse, t::Integer; dt::Real = 1.0)
(synapse::DelayedSynapse)(t::Integer; dt::Real = 1.0)
evaluate!(synapses::AbstractArray{<:DelayedSynapse}, t::Integer; dt::Real = 1.0)

Evaluate synapse.core at time t.

source
SpikingNN.reset!Method
reset!(synapse::DelayedSynapse)
reset!(synapses::AbstractArray{<:DelayedSynapse})

Reset synapse.core.

source