Queue for all spikes arriving into a neuron. More...
#include <slice_ring_buffer.h>
Classes | |
| struct | SpikeInfo |
| Information about spike. More... | |
Public Member Functions | |
| SliceRingBuffer () | |
| void | add_spike (const long rel_delivery, const long stamp, const double ps_offset, const double weight) |
| Add spike to queue. | |
| void | add_refractory (const long stamp, const double ps_offset) |
| Add refractory event to queue. | |
| void | prepare_delivery () |
| Prepare for spike delivery in current slice by sorting. | |
| void | discard_events () |
| Discard all events in current slice. | |
| bool | get_next_spike (const long req_stamp, bool accumulate_simultaneous, double &ps_offset, double &weight, bool &end_of_refract) |
| Return next spike. | |
| void | clear () |
| Clear buffer. | |
| void | resize () |
| Resize the buffer according to min_delay and max_delay. | |
Private Attributes | |
| std::vector< std::vector< SpikeInfo > > | queue_ |
| entire queue, one slot per min_delay block within max_delay | |
| std::vector< SpikeInfo > * | deliver_ |
| slot to deliver from | |
| SpikeInfo | refract_ |
| pseudo-event for return from refractoriness | |
Queue for all spikes arriving into a neuron.
Spikes are stored unsorted on arrival, but are sorted when prepare_delivery() is called. They can then be retrieved one by one in correct temporal order. Coinciding spikes are combined into one, see get_next_spike().
Data is organized as follows:
| nest::SliceRingBuffer::SliceRingBuffer | ( | ) |
|
inline |
Add refractory event to queue.
The refractory event is actually stored as a pseudo-event.
| stamp | Delivery time |
| ps_offset | Precise timing offset of spike time |
References nest::SliceRingBuffer::SpikeInfo::ps_offset_, refract_, and nest::SliceRingBuffer::SpikeInfo::stamp_.
Referenced by nest::iaf_psc_delta_ps::update(), nest::iaf_psc_alpha_ps::update(), nest::iaf_psc_exp_ps::update(), and nest::iaf_psc_exp_ps_lossless::update().
|
inline |
Add spike to queue.
| rel_delivery | relative delivery time |
| stamp | Delivery time |
| ps_offset | Precise timing offset of spike time |
| weight | Weight of spike. |
References nest::KernelManager::event_delivery_manager, nest::EventDeliveryManager::get_slice_modulo(), nest::kernel(), and queue_.
Referenced by nest::iaf_psc_alpha_ps::handle(), nest::iaf_psc_delta_ps::handle(), nest::iaf_psc_exp_ps::handle(), nest::iaf_psc_exp_ps_lossless::handle(), and nest::parrot_neuron_ps::handle().
| void nest::SliceRingBuffer::clear | ( | ) |
Clear buffer.
References queue_.
Referenced by nest::iaf_psc_alpha_ps::init_buffers_(), nest::iaf_psc_delta_ps::init_buffers_(), nest::iaf_psc_exp_ps::init_buffers_(), nest::iaf_psc_exp_ps_lossless::init_buffers_(), nest::parrot_neuron_ps::init_buffers_(), and resize().
| void nest::SliceRingBuffer::discard_events | ( | ) |
Discard all events in current slice.
References deliver_, nest::KernelManager::event_delivery_manager, nest::EventDeliveryManager::get_slice_modulo(), nest::kernel(), and queue_.
|
inline |
Return next spike.
| req_stamp | Request spike with this stamp. Queue should never contain spikes with smaller stamps. Spikes with larger stamps are left in queue. |
| accumulate_simultaneous | If true, return summed weight of simultaneous input spikes, otherwise return one spike at a time. |
| ps_offset | PS-sense offset of spike time |
| weight | Spike weight |
| end_of_refract | True if spike is pseudo-spike marking end of refractory period |
References deliver_, nest::SliceRingBuffer::SpikeInfo::ps_offset_, refract_, and nest::SliceRingBuffer::SpikeInfo::stamp_.
Referenced by nest::iaf_psc_alpha_ps::get_next_event_(), nest::iaf_psc_delta_ps::update(), nest::parrot_neuron_ps::update(), nest::iaf_psc_exp_ps::update(), and nest::iaf_psc_exp_ps_lossless::update().
| void nest::SliceRingBuffer::prepare_delivery | ( | ) |
Prepare for spike delivery in current slice by sorting.
References deliver_, nest::KernelManager::event_delivery_manager, nest::EventDeliveryManager::get_slice_modulo(), nest::kernel(), and queue_.
Referenced by nest::iaf_psc_delta_ps::update(), nest::parrot_neuron_ps::update(), nest::iaf_psc_alpha_ps::update(), nest::iaf_psc_exp_ps::update(), and nest::iaf_psc_exp_ps_lossless::update().
| void nest::SliceRingBuffer::resize | ( | ) |
Resize the buffer according to min_delay and max_delay.
References clear(), nest::KernelManager::connection_manager, nest::ConnectionManager::get_max_delay(), nest::ConnectionManager::get_min_delay(), nest::kernel(), and queue_.
Referenced by nest::iaf_psc_alpha_ps::init_buffers_(), nest::iaf_psc_delta_ps::init_buffers_(), nest::iaf_psc_exp_ps::init_buffers_(), nest::iaf_psc_exp_ps_lossless::init_buffers_(), and nest::parrot_neuron_ps::init_buffers_().
|
private |
slot to deliver from
Referenced by discard_events(), get_next_spike(), and prepare_delivery().
|
private |
entire queue, one slot per min_delay block within max_delay
Referenced by add_spike(), clear(), discard_events(), prepare_delivery(), and resize().
|
private |
pseudo-event for return from refractoriness
Referenced by add_refractory(), and get_next_spike().