NEST main@caf0ae8
 
Loading...
Searching...
No Matches
nest::eprop_iaf Class Reference

Class implementing a LIF neuron model for e-prop plasticity with additional biological features. More...

#include <eprop_iaf.h>

Inheritance diagram for nest::eprop_iaf:
[legend]
Collaboration diagram for nest::eprop_iaf:
[legend]

Classes

struct  Buffers_
 Structure of buffers. More...
 
struct  Parameters_
 Structure of parameters. More...
 
struct  State_
 Structure of state variables. More...
 
struct  Variables_
 Structure of internal variables. More...
 

Public Member Functions

 eprop_iaf ()
 Default constructor.
 
 eprop_iaf (const eprop_iaf &)
 Copy constructor.
 
size_t send_test_event (Node &, size_t, synindex, bool) override
 Send an event to the receiving_node passed as an argument.
 
void handle (SpikeEvent &) override
 Handle incoming spike events.
 
void handle (CurrentEvent &) override
 Handler for current events.
 
void handle (LearningSignalConnectionEvent &) override
 Handler for learning signal connection events.
 
void handle (DataLoggingRequest &) override
 Handler for universal data logging request.
 
size_t handles_test_event (SpikeEvent &, size_t) override
 Check if the node can handle a particular event and receptor type.
 
size_t handles_test_event (CurrentEvent &, size_t) override
 
size_t handles_test_event (LearningSignalConnectionEvent &, size_t) override
 
size_t handles_test_event (DataLoggingRequest &, size_t) override
 
void get_status (Dictionary &) const override
 Export properties of the node by setting entries in the status dictionary.
 
void set_status (const Dictionary &) override
 Change properties of the node according to the entries in the dictionary.
 
virtual void handle (SpikeEvent &e)
 Handle incoming spike events.
 
virtual void handle (WeightRecorderEvent &e)
 Handle incoming weight recording events.
 
virtual void handle (RateEvent &e)
 Handler for rate events.
 
virtual void handle (DataLoggingRequest &e)
 Handler for universal data logging request.
 
virtual void handle (DataLoggingReply &e)
 Handler for universal data logging request.
 
virtual void handle (CurrentEvent &e)
 Handler for current events.
 
virtual void handle (ConductanceEvent &e)
 Handler for conductance events.
 
virtual void handle (DoubleDataEvent &e)
 Handler for DoubleData events.
 
virtual void handle (GapJunctionEvent &e)
 Handler for gap junction events.
 
virtual void handle (InstantaneousRateConnectionEvent &e)
 Handler for rate neuron events.
 
virtual void handle (DiffusionConnectionEvent &e)
 Handler for rate neuron events.
 
virtual void handle (DelayedRateConnectionEvent &e)
 Handler for delay rate neuron events.
 
virtual void handle (LearningSignalConnectionEvent &e)
 Handler for learning signal connection events.
 
virtual void handle (SICEvent &e)
 Handler for slow inward current events (SICEvents).
 
virtual size_t handles_test_event (SpikeEvent &, size_t receptor_type)
 Check if the node can handle a particular event and receptor type.
 
virtual size_t handles_test_event (WeightRecorderEvent &, size_t receptor_type)
 
virtual size_t handles_test_event (RateEvent &, size_t receptor_type)
 
virtual size_t handles_test_event (DataLoggingRequest &, size_t receptor_type)
 
virtual size_t handles_test_event (CurrentEvent &, size_t receptor_type)
 
virtual size_t handles_test_event (ConductanceEvent &, size_t receptor_type)
 
virtual size_t handles_test_event (DoubleDataEvent &, size_t receptor_type)
 
virtual size_t handles_test_event (DSSpikeEvent &, size_t receptor_type)
 
virtual size_t handles_test_event (DSCurrentEvent &, size_t receptor_type)
 
virtual size_t handles_test_event (GapJunctionEvent &, size_t receptor_type)
 
virtual size_t handles_test_event (InstantaneousRateConnectionEvent &, size_t receptor_type)
 
virtual size_t handles_test_event (DiffusionConnectionEvent &, size_t receptor_type)
 
virtual size_t handles_test_event (DelayedRateConnectionEvent &, size_t receptor_type)
 
virtual size_t handles_test_event (LearningSignalConnectionEvent &, size_t receptor_type)
 
virtual size_t handles_test_event (SICEvent &, size_t receptor_type)
 
- Public Member Functions inherited from nest::EpropArchivingNodeRecurrent< false >
 EpropArchivingNodeRecurrent ()
 Constructs a new EpropArchivingNodeRecurrent object.
 
 EpropArchivingNodeRecurrent (const EpropArchivingNodeRecurrent &other)
 Constructs an EpropArchivingNodeRecurrent object by copying another EpropArchivingNodeRecurrent object.
 
surrogate_gradient_function find_surrogate_gradient (const std::string &surrogate_gradient_function_name)
 Validates and finds surrogate gradient function based on the specified name.
 
double compute_piecewise_linear_surrogate_gradient (const double r, const double v_m, const double v_th, const double height, const double width)
 Computes a piecewise-linear function as the surrogate gradient.
 
double compute_exponential_surrogate_gradient (const double r, const double v_m, const double v_th, const double height, const double width)
 Computes an exponential function as the surrogate gradient.
 
double compute_fast_sigmoid_derivative_surrogate_gradient (const double r, const double v_m, const double v_th, const double height, const double width)
 Computes the derivative of a fast-sigmoid surrogate function as the surrogate gradient.
 
double compute_arctan_derivative_surrogate_gradient (const double r, const double v_m, const double v_th, const double height, const double width)
 Computes the derivative of an arctan surrogate function as the surrogate gradient.
 
void append_new_eprop_history_entry (const long time_step)
 Creates an entry for the specified time step at the end of the eprop history.
 
void write_surrogate_gradient_to_history (const long time_step, const double surrogate_gradient)
 Writes the surrogate gradient to the eprop history entry at the specified time step.
 
void write_learning_signal_to_history (const long time_step, const double learning_signal)
 Writes the learning signal to the eprop history entry at the specifed time step.
 
void write_firing_rate_reg_to_history (const long t_current_update, const double f_target, const double c_reg)
 Calculates the firing rate regularization for the current update and writes it to a new entry in the firing rate regularization history.
 
void write_firing_rate_reg_to_history (const long time_step, const double z, const double f_target, const double kappa_reg, const double c_reg)
 Calculates the current firing rate regularization and writes it to the eprop history at the specified time step.
 
double get_firing_rate_reg_history (const long time_step)
 Retrieves the firing rate regularization at the specified time step from the firing rate regularization history.
 
double get_learning_signal_from_history (const long time_step)
 Retrieves the learning signal from the eprop history at the specified time step.
 
void erase_used_firing_rate_reg_history ()
 Erases the history of the used firing rate regularization history.
 
void count_spike ()
 Counts an emitted spike for the firing rate regularization.
 
void reset_spike_count ()
 Resets the spike count for the firing rate regularization.
 
void get_status (Dictionary &d) const override
 Export properties of the node by setting entries in the status dictionary.
 
void set_status (const Dictionary &d) override
 Change properties of the node according to the entries in the dictionary.
 
- Public Member Functions inherited from nest::EpropArchivingNode< HistEntryEpropRecurrent >
 EpropArchivingNode ()
 Constructs a new EpropArchivingNode object.
 
 EpropArchivingNode (const EpropArchivingNode &n)
 Constructs a new EpropArchivingNode object by copying another EpropArchivingNode object.
 
void register_eprop_connection () override
 Registers an eprop connection.
 
void initialize_update_history () override
 Initializes the update history.
 
void write_update_to_history (const long t_previous_update, const long t_current_update, const bool is_flush_event, const bool previous_was_flush_event) override
 Registers the current update in the update history and deregisters the previous update.
 
void require_eprop_history_entry (const typename std::vector< HistEntryEpropRecurrent >::iterator eprop_hist_it, const long time_step) const
 Requires that an e-prop history iterator points to the expected time step.
 
std::vector< HistEntryEpropUpdate >::iterator get_update_history (const long time_step)
 Retrieves the update history entry for a specific time step.
 
std::vector< HistEntryEpropRecurrent >::iterator get_eprop_history (const long time_step)
 Retrieves the eprop history entry for a specified time step.
 
void erase_used_eprop_history () override
 Erases the used eprop history for bsshslm_2020 models.
 
void erase_used_eprop_history (const long t_spike, const long t_spike_previous) override
 Erases the used eprop history.
 
double get_eprop_history_duration () const
 Retrieves eprop history size.
 
long get_eprop_isi_trace_cutoff () const
 Retrieves the eprop ISI trace cutoff.
 
- Public Member Functions inherited from nest::Node
 Node ()
 
 Node (Node const &)
 
virtual ~Node ()
 
virtual Node * clone () const
 This function creates a new object by calling the derived class' copy constructor and returning its pointer.
 
virtual bool has_proxies () const
 Returns true if the node has proxies on remote threads.
 
virtual bool supports_urbanczik_archiving () const
 Returns true if the node supports the Urbanczik-Senn plasticity rule.
 
virtual bool local_receiver () const
 Returns true if the node only receives events from nodes/devices on the same thread.
 
virtual bool one_node_per_process () const
 Returns true if the node exists only once per process, but does not have proxies on remote threads.
 
virtual bool is_off_grid () const
 Returns true if the node sends/receives off-grid events.
 
virtual bool is_proxy () const
 Returns true if the node is a proxy node.
 
std::string get_name () const
 Return class name.
 
virtual std::string get_element_type () const
 Return the element type of the node.
 
size_t get_node_id () const
 Return global Network ID.
 
int get_model_id () const
 Return model ID of the node.
 
bool is_frozen () const
 Returns true if node is frozen, i.e., shall not be updated.
 
bool node_uses_wfr () const
 Returns true if the node uses the waveform relaxation method.
 
void set_node_uses_wfr (const bool)
 Sets node_uses_wfr_ member variable (to be able to set it to "true" for any class derived from Node)
 
void init ()
 Initialize node prior to first simulation after node has been created.
 
virtual void calibrate_time (const TimeConverter &)
 Re-calculate time-based properties of the node.
 
virtual void post_run_cleanup ()
 Cleanup node after Run.
 
virtual void finalize ()
 Finalize node.
 
virtual bool wfr_update (Time const &, const long, const long)
 Advance the state of the node in time through the given interval (see Node::update() for more details).
 
virtual void sends_secondary_event (GapJunctionEvent &ge)
 Required to check, if source neuron may send a SecondaryEvent.
 
virtual void sends_secondary_event (InstantaneousRateConnectionEvent &re)
 Required to check, if source neuron may send a SecondaryEvent.
 
virtual void sends_secondary_event (DiffusionConnectionEvent &de)
 Required to check, if source neuron may send a SecondaryEvent.
 
virtual void sends_secondary_event (DelayedRateConnectionEvent &re)
 Required to check, if source neuron may send a SecondaryEvent.
 
virtual void sends_secondary_event (LearningSignalConnectionEvent &re)
 Required to check if source node may send a LearningSignalConnectionEvent.
 
virtual void sends_secondary_event (SICEvent &sic)
 Required to check if source node may send a SICEvent.
 
virtual void register_stdp_connection (double, double)
 Register a STDP connection.
 
virtual double get_Ca_minus () const
 Return the Ca_minus value at time Ca_t which corresponds to the time of the last update in Calcium concentration which is performed each time a Node spikes.
 
virtual double get_synaptic_elements (std::string) const
 Get the number of synaptic element for the current Node at Ca_t which corresponds to the time of the last spike.
 
virtual int get_synaptic_elements_vacant (std::string) const
 Get the number of vacant synaptic element for the current Node Return 0 if not overridden.
 
virtual int get_synaptic_elements_connected (std::string) const
 Get the number of connected synaptic element for the current Node.
 
virtual std::map< std::string, double > get_synaptic_elements () const
 Get the number of all synaptic elements for the current Node at time t.
 
virtual void update_synaptic_elements (double)
 Triggers the update of all SynapticElements stored in the synaptic_element_map_.
 
virtual void decay_synaptic_elements_vacant ()
 Is used to reduce the number of synaptic elements in the node through time.
 
virtual void connect_synaptic_element (std::string, int)
 Is used to update the number of connected synaptic elements (SynapticElement::z_connected_) when a synapse is formed or deleted.
 
virtual double get_K_value (double t)
 return the Kminus value at t (in ms).
 
virtual double get_LTD_value (double t)
 
virtual void get_K_values (double t, double &Kminus, double &nearest_neighbor_Kminus, double &Kminus_triplet)
 write the Kminus, nearest_neighbor_Kminus, and Kminus_triplet values at t (in ms) to the provided locations.
 
virtual void get_history (double t1, double t2, std::deque< histentry >::iterator *start, std::deque< histentry >::iterator *finish)
 return the spike history for (t1,t2].
 
virtual void get_LTP_history (double t1, double t2, std::deque< histentry_extended >::iterator *start, std::deque< histentry_extended >::iterator *finish)
 
virtual void get_urbanczik_history (double t1, double t2, std::deque< histentry_extended >::iterator *start, std::deque< histentry_extended >::iterator *finish, int)
 
virtual double get_C_m (int comp)
 
virtual double get_g_L (int comp)
 
virtual double get_tau_L (int comp)
 
virtual double get_tau_s (int comp)
 
virtual double get_tau_syn_ex (int comp)
 
virtual double get_tau_syn_in (int comp)
 
virtual double compute_gradient (std::vector< long > &presyn_isis, const long t_previous_update, const long t_previous_trigger_spike, const double kappa, const bool average_gradient)
 Compute gradient change for eprop synapses.
 
virtual void event_hook (DSSpikeEvent &)
 Modify Event object parameters during event delivery.
 
virtual void event_hook (DSCurrentEvent &)
 
void set_thread (size_t)
 Store the number of the thread to which the node is assigned.
 
size_t get_thread () const
 Retrieve the number of the thread to which the node is assigned.
 
void set_vp (size_t)
 Store the number of the virtual process to which the node is assigned.
 
size_t get_vp () const
 Retrieve the number of the virtual process to which the node is assigned.
 
void set_model_id (int)
 Set the model id.
 
void set_initialized ()
 Execute post-initialization actions in node models.
 
virtual SignalType sends_signal () const
 
virtual SignalType receives_signal () const
 
Dictionary get_status_base ()
 Return a dictionary with the node's properties.
 
void set_status_base (const Dictionary &)
 Set status dictionary of a node.
 
bool is_model_prototype () const
 Returns true if node is model prototype.
 
void set_thread_lid (const size_t)
 set thread local index
 
size_t get_thread_lid () const
 get thread local index
 
virtual void set_local_device_id (const size_t lsdid)
 Sets the local device id.
 
virtual size_t get_local_device_id () const
 Gets the local device id.
 
void set_tmp_nc_index (size_t index)
 Set index in node collection; required by ThirdOutBuilder.
 
size_t get_tmp_nc_index ()
 Return and invalidate index in node collection; required by ThirdOutBuilder.
 
- Public Member Functions inherited from nest::FlushEventMechanism
 FlushEventMechanism ()
 Default constructor.
 
 FlushEventMechanism (const FlushEventMechanism &n)
 Copy constructor.
 
virtual ~FlushEventMechanism ()=default
 Destructor.
 
void set_last_event_time (const long last_event_time)
 Sets the time the neuron last sent an event (spike or flush event).
 
long get_last_event_time () const
 Gets the last time the neuron sent an event (spike or flush event).
 
void pre_run_hook ()
 Re-calculates dependent parameters.
 
bool flush_event_is_due (const long current_time) const
 Checks if a flush event is due at the current time.
 
void get_status (Dictionary &d) const
 Retrieves parameters and adds them to the status dictionary.
 
void set_status (const Dictionary &d, Node *node, const bool check_eprop_constraint=false)
 Sets and validates parameters from the status dictionary.
 
- Public Member Functions inherited from nest::IgnoreAndSpikeMechanism
 IgnoreAndSpikeMechanism ()
 Default constructor.
 
 IgnoreAndSpikeMechanism (const IgnoreAndSpikeMechanism &n)
 Copy constructor.
 
virtual ~IgnoreAndSpikeMechanism ()=default
 Virtual destructor.
 
bool spike_event_is_due (bool emit_dynamic_spike)
 Updates spike schedule and returns whether a spike should be emitted.
 
void get_status (Dictionary &d) const
 Retrieves parameters and adds them to the status dictionary.
 
void set_status (const Dictionary &d, Node *node)
 Sets and validates parameters from the status dictionary.
 

Private Member Functions

void init_buffers_ () override
 Configure persistent internal data structures.
 
void pre_run_hook () override
 Re-calculate dependent parameters of the node.
 
void update (Time const &, const long, const long) override
 Advance the state of the node in time through the given interval.
 
void compute_gradient (const long, const long, double &, double &, double &, double &, double &, double &, const CommonSynapseProperties &, WeightOptimizer *, const bool, const bool, double &, long &, long &) override
 Compute gradient change for eprop synapses.
 
long get_shift () const override
 Retrieves the temporal shift of the signal.
 
bool is_eprop_recurrent_node () const override
 Checks if the node is part of the recurrent network and thus not a readout neuron.
 
double get_v_m_ () const
 Get the current value of the membrane voltage.
 
double get_surrogate_gradient_ () const
 Get the current value of the surrogate gradient.
 
double get_learning_signal_ () const
 Get the current value of the learning signal.
 

Private Attributes

Parameters_ P_
 Structure of parameters.
 
State_ S_
 Structure of state variables.
 
Variables_ V_
 Structure of internal variables.
 
Buffers_ B_
 Structure of buffers.
 

Static Private Attributes

static RecordablesMap< eprop_iaf > recordablesMap_
 Map storing a static set of recordables.
 

Friends

class RecordablesMap< eprop_iaf >
 Map for storing a static set of recordables.
 
class UniversalDataLogger< eprop_iaf >
 Logger for universal data supporting the data logging request / reply mechanism. Populated with a recordables map.
 

Additional Inherited Members

- Public Types inherited from nest::EpropArchivingNodeRecurrent< false >
typedef double(EpropArchivingNodeRecurrent::* surrogate_gradient_function) (double, double, double, double, double)
 Defines the pointer-to-member function type for the surrogate gradient function.
 
- Public Attributes inherited from nest::EpropArchivingNodeRecurrent< false >
double firing_rate_reg_
 Firing rate regularization.
 
double f_av_
 Average firing rate.
 
- Public Attributes inherited from nest::Node
DeprecationWarning deprecation_warning
 Member of DeprecationWarning class to be used by models if parameters are deprecated.
 
- Protected Member Functions inherited from nest::EpropArchivingNodeRecurrent< false >
long model_dependent_history_shift_ () const override
 Returns the correct shift for history depending on whether it is a normal or a bsshslm_2020 model.
 
- Protected Member Functions inherited from nest::Node
virtual void init_state_ ()
 Configure state variables depending on runtime information.
 
virtual void set_initialized_ ()
 
Model & get_model_ () const
 
void set_frozen_ (bool frozen)
 Mark node as frozen.
 
template<typename ConcreteNode >
const ConcreteNode & downcast (const Node &)
 Auxiliary function to downcast a Node to a concrete class derived from Node.
 
- Protected Attributes inherited from nest::EpropArchivingNodeRecurrent< false >
surrogate_gradient_function compute_surrogate_gradient_
 Pointer to member function selected for computing the surrogate gradient.
 
- Protected Attributes inherited from nest::EpropArchivingNode< HistEntryEpropRecurrent >
size_t eprop_indegree_
 Number of incoming eprop synapses.
 
double eprop_isi_trace_cutoff_
 Time interval from the previous spike until the cutoff of e-prop update computation between two spikes (ms).
 
std::vector< HistEntryEpropUpdate > update_history_
 History of updates still needed by at least one synapse.
 
std::vector< HistEntryEpropRecurrent > eprop_history_
 History of dynamic variables needed for e-prop plasticity.
 
const long offset_gen_
 Offset since generator signals start from time step 1.
 
const long delay_in_rec_
 Transmission delay from input to recurrent neurons.
 
const long delay_rec_out_
 Transmission delay from recurrent to output neurons.
 
const long delay_out_norm_
 Transmission delay between output neurons for normalization.
 
const long delay_out_rec_
 Transmission delay from output neurons to recurrent neurons.
 
- Protected Attributes inherited from nest::FlushEventMechanism
double flush_event_send_interval_
 Interval since previous event after which a flush event is sent (ms).
 
long flush_event_send_interval_steps_
 Interval since previous event after which a flush event is sent (steps).
 
long last_event_time_
 Time of last spike or flush event (steps).
 

Detailed Description

Class implementing a LIF neuron model for e-prop plasticity with additional biological features.

Class implementing a current-based leaky integrate-and-fire neuron model with delta-shaped postsynaptic currents for e-prop plasticity according to Bellec et al. (2020) with additional biological features described in Korcsak-Gorzo et al. (2025).

Constructor & Destructor Documentation

◆ eprop_iaf() [1/2]

nest::eprop_iaf::eprop_iaf ( )

Default constructor.

References recordablesMap_.

◆ eprop_iaf() [2/2]

nest::eprop_iaf::eprop_iaf ( const eprop_iaf &  n)

Copy constructor.

Member Function Documentation

◆ compute_gradient()

void nest::eprop_iaf::compute_gradient ( const long  t_spike,
const long  t_spike_previous,
double &  z_previous_buffer,
double &  z_bar,
double &  e_bar,
double &  e_bar_reg,
double &  epsilon,
double &  weight,
const CommonSynapseProperties &  cp,
WeightOptimizer *  optimizer,
const bool  is_flush_event,
const bool  previous_was_flush_event,
double &  sum_grad,
long &  remaining_steps_until_cutoff,
long &  decay_steps 
)
overrideprivatevirtual

Compute gradient change for eprop synapses.

This method is called from an eprop synapse on the eprop target neuron. It updates various parameters related to e-prop plasticity according to Bellec et al. (2020) with additional biological features described in Korcsak-Gorzo et al. (2025).

Parameters
t_spike[in] Time of the current spike.
t_spike_previous[in] Time of the previous spike.
z_previous_buffer[in, out] Value of presynaptic spiking variable from previous time step.
z_bar[in, out] Filtered presynaptic spiking variable.
e_bar[in, out] Filtered eligibility trace.
e_bar_reg[in, out] Filtered eligibility trace for firing rate regularization.
epsilon[out] Component of eligibility vector corresponding to the adaptive firing threshold variable.
weight[in, out] Synaptic weight.
cp[in] Common properties for synapses.
optimizer[in] Instance of weight optimizer.

Reimplemented from nest::Node.

References nest::EpropArchivingNode< HistEntryEpropRecurrent >::get_eprop_history(), nest::EpropArchivingNode< HistEntryEpropRecurrent >::get_eprop_isi_trace_cutoff(), nest::eprop_iaf::Parameters_::kappa_, nest::eprop_iaf::Parameters_::kappa_reg_, nest::EpropSynapseCommonProperties::optimizer_cp_, P_, nest::eprop_iaf::Variables_::P_v_m_, nest::EpropArchivingNode< HistEntryEpropRecurrent >::require_eprop_history_entry(), and V_.

Here is the call graph for this function:

◆ get_learning_signal_()

double nest::eprop_iaf::get_learning_signal_ ( ) const
inlineprivate

Get the current value of the learning signal.

References nest::eprop_iaf::State_::learning_signal_, and S_.

Referenced by nest::RecordablesMap< HostNode >::create().

Here is the caller graph for this function:

◆ get_shift()

long nest::eprop_iaf::get_shift ( ) const
inlineoverrideprivatevirtual

Retrieves the temporal shift of the signal.

Retrieves the number of steps the time-point of the signal has to be shifted to place it at the correct location in the e-prop-related histories.

Note
Unlike the original e-prop, where signals arise instantaneously, NEST considers connection delays. Thus, to reproduce the original results, we compensate for the delays and synchronize the signals by shifting the history.
Returns
The number of time steps to shift.
Exceptions
IllegalConnection

Reimplemented from nest::Node.

References nest::EpropArchivingNode< HistEntryEpropRecurrent >::delay_in_rec_, and nest::EpropArchivingNode< HistEntryEpropRecurrent >::offset_gen_.

◆ get_status()

void nest::eprop_iaf::get_status ( Dictionary &  ) const
inlineoverridevirtual

Export properties of the node by setting entries in the status dictionary.

Parameters
dDictionary.

Implements nest::Node.

References nest::eprop_iaf::Parameters_::get(), nest::eprop_iaf::State_::get(), nest::EpropArchivingNodeRecurrent< hist_shift_required >::get_status(), P_, nest::names::recordables(), recordablesMap_, and S_.

Here is the call graph for this function:

◆ get_surrogate_gradient_()

double nest::eprop_iaf::get_surrogate_gradient_ ( ) const
inlineprivate

Get the current value of the surrogate gradient.

References S_, and nest::eprop_iaf::State_::surrogate_gradient_.

Referenced by nest::RecordablesMap< HostNode >::create().

Here is the caller graph for this function:

◆ get_v_m_()

double nest::eprop_iaf::get_v_m_ ( ) const
inlineprivate

Get the current value of the membrane voltage.

References nest::eprop_iaf::Parameters_::E_L_, P_, S_, and nest::eprop_iaf::State_::v_m_.

Referenced by nest::RecordablesMap< HostNode >::create().

Here is the caller graph for this function:

◆ handle() [1/18]

void nest::Node::handle ( ConductanceEvent &  e)
virtual

Handler for conductance events.

See also
handle(thread, SpikeEvent&)
Exceptions
UnexpectedEvent

Reimplemented from nest::Node.

◆ handle() [2/18]

void nest::eprop_iaf::handle ( CurrentEvent &  e)
overridevirtual

Handler for current events.

See also
handle(thread, SpikeEvent&)
Exceptions
UnexpectedEvent

Reimplemented from nest::Node.

References nest::RingBuffer::add_value(), B_, nest::eprop_iaf::Buffers_::currents_, and nest::kernel().

Here is the call graph for this function:

◆ handle() [3/18]

void nest::Node::handle ( CurrentEvent &  e)
virtual

Handler for current events.

See also
handle(thread, SpikeEvent&)
Exceptions
UnexpectedEvent

Reimplemented from nest::Node.

◆ handle() [4/18]

void nest::Node::handle ( DataLoggingReply &  e)
virtual

Handler for universal data logging request.

See also
handle(SpikeEvent&)
Exceptions
UnexpectedEvent
Note
There is no connect_sender() for DataLoggingReply, since this event is only used as "back channel" for DataLoggingRequest.

Reimplemented from nest::Node.

◆ handle() [5/18]

void nest::eprop_iaf::handle ( DataLoggingRequest &  e)
overridevirtual

Handler for universal data logging request.

See also
handle(SpikeEvent&)
Exceptions
UnexpectedEvent

Reimplemented from nest::Node.

References B_, and nest::eprop_iaf::Buffers_::logger_.

◆ handle() [6/18]

void nest::Node::handle ( DataLoggingRequest &  e)
virtual

Handler for universal data logging request.

See also
handle(SpikeEvent&)
Exceptions
UnexpectedEvent

Reimplemented from nest::Node.

◆ handle() [7/18]

void nest::Node::handle ( DelayedRateConnectionEvent &  e)
virtual

Handler for delay rate neuron events.

See also
handle(thread, DelayedRateConnectionEvent&)
Exceptions
UnexpectedEvent

Reimplemented from nest::Node.

◆ handle() [8/18]

void nest::Node::handle ( DiffusionConnectionEvent &  e)
virtual

Handler for rate neuron events.

See also
handle(thread, InstantaneousRateConnectionEvent&)
Exceptions
UnexpectedEvent

Reimplemented from nest::Node.

◆ handle() [9/18]

void nest::Node::handle ( DoubleDataEvent &  e)
virtual

Handler for DoubleData events.

See also
handle(thread, SpikeEvent&)
Exceptions
UnexpectedEvent

Reimplemented from nest::Node.

◆ handle() [10/18]

void nest::Node::handle ( GapJunctionEvent &  e)
virtual

Handler for gap junction events.

See also
handle(thread, GapJunctionEvent&)
Exceptions
UnexpectedEvent

Reimplemented from nest::Node.

◆ handle() [11/18]

void nest::Node::handle ( InstantaneousRateConnectionEvent &  e)
virtual

Handler for rate neuron events.

See also
handle(thread, InstantaneousRateConnectionEvent&)
Exceptions
UnexpectedEvent

Reimplemented from nest::Node.

◆ handle() [12/18]

void nest::eprop_iaf::handle ( LearningSignalConnectionEvent &  e)
overridevirtual

Handler for learning signal connection events.

See also
handle(thread, LearningSignalConnectionEvent&)
Exceptions
UnexpectedEvent

Reimplemented from nest::Node.

References nest::EpropArchivingNodeRecurrent< false >::write_learning_signal_to_history().

Here is the call graph for this function:

◆ handle() [13/18]

void nest::Node::handle ( LearningSignalConnectionEvent &  e)
virtual

Handler for learning signal connection events.

See also
handle(thread, LearningSignalConnectionEvent&)
Exceptions
UnexpectedEvent

Reimplemented from nest::Node.

◆ handle() [14/18]

void nest::Node::handle ( RateEvent &  e)
virtual

Handler for rate events.

See also
handle(SpikeEvent&)
Exceptions
UnexpectedEvent

Reimplemented from nest::Node.

◆ handle() [15/18]

void nest::Node::handle ( SICEvent &  e)
virtual

Handler for slow inward current events (SICEvents).

See also
handle(thread,SICEvent&)
Exceptions
UnexpectedEvent

Reimplemented from nest::Node.

◆ handle() [16/18]

void nest::eprop_iaf::handle ( SpikeEvent &  e)
overridevirtual

Handle incoming spike events.

Default implementation of event handlers just throws an UnexpectedEvent exception.

Parameters
thrdId of the calling thread.
eEvent object.

This handler has to be implemented if a Node should accept spike events.

See also
class SpikeEvent
class UnexpectedEvent
Exceptions
UnexpectedEventThis is the default event to throw.

Reimplemented from nest::Node.

References nest::RingBuffer::add_value(), B_, nest::kernel(), and nest::eprop_iaf::Buffers_::spikes_.

Here is the call graph for this function:

◆ handle() [17/18]

void nest::Node::handle ( SpikeEvent &  e)
virtual

Handle incoming spike events.

Default implementation of event handlers just throws an UnexpectedEvent exception.

Parameters
thrdId of the calling thread.
eEvent object.

This handler has to be implemented if a Node should accept spike events.

See also
class SpikeEvent
class UnexpectedEvent
Exceptions
UnexpectedEventThis is the default event to throw.

Reimplemented from nest::Node.

◆ handle() [18/18]

void nest::Node::handle ( WeightRecorderEvent &  e)
virtual

Handle incoming weight recording events.

Parameters
thrdId of the calling thread.
eEvent object.

This handler has to be implemented if a Node should accept weight recording events.

See also
class WeightRecordingEvent

Reimplemented from nest::Node.

◆ handles_test_event() [1/19]

size_t nest::Node::handles_test_event ( ConductanceEvent &  ,
size_t  receptor_type 
)
virtual

Reimplemented from nest::Node.

◆ handles_test_event() [2/19]

size_t nest::Node::handles_test_event ( CurrentEvent &  ,
size_t  receptor_type 
)
virtual

Reimplemented from nest::Node.

◆ handles_test_event() [3/19]

size_t nest::eprop_iaf::handles_test_event ( CurrentEvent &  ,
size_t  receptor_type 
)
inlineoverridevirtual

Reimplemented from nest::Node.

References nest::Node::get_name().

Here is the call graph for this function:

◆ handles_test_event() [4/19]

size_t nest::Node::handles_test_event ( DataLoggingRequest &  ,
size_t  receptor_type 
)
virtual

Reimplemented from nest::Node.

◆ handles_test_event() [5/19]

size_t nest::eprop_iaf::handles_test_event ( DataLoggingRequest &  dlr,
size_t  receptor_type 
)
inlineoverridevirtual

Reimplemented from nest::Node.

References B_, nest::Node::get_name(), nest::eprop_iaf::Buffers_::logger_, and recordablesMap_.

Here is the call graph for this function:

◆ handles_test_event() [6/19]

size_t nest::Node::handles_test_event ( DelayedRateConnectionEvent &  ,
size_t  receptor_type 
)
virtual

Reimplemented from nest::Node.

◆ handles_test_event() [7/19]

size_t nest::Node::handles_test_event ( DiffusionConnectionEvent &  ,
size_t  receptor_type 
)
virtual

Reimplemented from nest::Node.

◆ handles_test_event() [8/19]

size_t nest::Node::handles_test_event ( DoubleDataEvent &  ,
size_t  receptor_type 
)
virtual

Reimplemented from nest::Node.

◆ handles_test_event() [9/19]

size_t nest::Node::handles_test_event ( DSCurrentEvent &  ,
size_t  receptor_type 
)
virtual

Reimplemented from nest::Node.

◆ handles_test_event() [10/19]

size_t nest::Node::handles_test_event ( DSSpikeEvent &  ,
size_t  receptor_type 
)
virtual

Reimplemented from nest::Node.

◆ handles_test_event() [11/19]

size_t nest::Node::handles_test_event ( GapJunctionEvent &  ,
size_t  receptor_type 
)
virtual

Reimplemented from nest::Node.

◆ handles_test_event() [12/19]

size_t nest::Node::handles_test_event ( InstantaneousRateConnectionEvent &  ,
size_t  receptor_type 
)
virtual

Reimplemented from nest::Node.

◆ handles_test_event() [13/19]

size_t nest::Node::handles_test_event ( LearningSignalConnectionEvent &  ,
size_t  receptor_type 
)
virtual

Reimplemented from nest::Node.

◆ handles_test_event() [14/19]

size_t nest::eprop_iaf::handles_test_event ( LearningSignalConnectionEvent &  ,
size_t  receptor_type 
)
inlineoverridevirtual

Reimplemented from nest::Node.

References nest::Node::get_name().

Here is the call graph for this function:

◆ handles_test_event() [15/19]

size_t nest::Node::handles_test_event ( RateEvent &  ,
size_t  receptor_type 
)
virtual

Reimplemented from nest::Node.

◆ handles_test_event() [16/19]

size_t nest::Node::handles_test_event ( SICEvent &  ,
size_t  receptor_type 
)
virtual

Reimplemented from nest::Node.

◆ handles_test_event() [17/19]

size_t nest::Node::handles_test_event ( SpikeEvent &  ,
size_t  receptor_type 
)
virtual

Check if the node can handle a particular event and receptor type.

This function is called upon connection setup by send_test_event().

handles_test_event() function is used to verify that the receiver can handle the event. It can also be used by the receiver to return information to the sender in form of the returned port. The default implementation throws an IllegalConnection exception. Any node class should define handles_test_event() functions for all those event types it can handle.

See Kunkel et al, Front Neuroinform 8:78 (2014), Sec 3.

Note
The semantics of all other handles_test_event() functions is identical.
Exceptions
IllegalConnection

Reimplemented from nest::Node.

◆ handles_test_event() [18/19]

size_t nest::eprop_iaf::handles_test_event ( SpikeEvent &  ,
size_t  receptor_type 
)
inlineoverridevirtual

Check if the node can handle a particular event and receptor type.

This function is called upon connection setup by send_test_event().

handles_test_event() function is used to verify that the receiver can handle the event. It can also be used by the receiver to return information to the sender in form of the returned port. The default implementation throws an IllegalConnection exception. Any node class should define handles_test_event() functions for all those event types it can handle.

See Kunkel et al, Front Neuroinform 8:78 (2014), Sec 3.

Note
The semantics of all other handles_test_event() functions is identical.
Exceptions
IllegalConnection

Reimplemented from nest::Node.

References nest::Node::get_name().

Here is the call graph for this function:

◆ handles_test_event() [19/19]

size_t nest::Node::handles_test_event ( WeightRecorderEvent &  ,
size_t  receptor_type 
)
virtual

Reimplemented from nest::Node.

◆ init_buffers_()

void nest::eprop_iaf::init_buffers_ ( )
overrideprivatevirtual

Configure persistent internal data structures.

Let node configure persistent internal data structures, such as input buffers or ODE solvers, to runtime information prior to first simulation.

Reimplemented from nest::Node.

References B_, nest::RingBuffer::clear(), nest::eprop_iaf::Buffers_::currents_, nest::eprop_iaf::Buffers_::logger_, and nest::eprop_iaf::Buffers_::spikes_.

Here is the call graph for this function:

◆ is_eprop_recurrent_node()

bool nest::eprop_iaf::is_eprop_recurrent_node ( ) const
inlineoverrideprivatevirtual

Checks if the node is part of the recurrent network and thus not a readout neuron.

Note
The e-prop synapse calls this function of the target node. If true, it skips weight updates within the first interval step of the update interval.
Returns
true if the node is an eprop recurrent node, false otherwise.
Exceptions
IllegalConnection

Reimplemented from nest::Node.

◆ pre_run_hook()

void nest::eprop_iaf::pre_run_hook ( )
overrideprivatevirtual

Re-calculate dependent parameters of the node.

This function is called each time a simulation is begun/resumed. It must re-calculate all internal Variables of the node required for spike handling or updating the node.

Implements nest::Node.

References B_, nest::eprop_iaf::Parameters_::C_m_, nest::Time::get_ms(), nest::Time::get_resolution(), nest::Time::get_steps(), nest::eprop_iaf::Buffers_::logger_, P_, nest::eprop_iaf::Variables_::P_i_in_, nest::eprop_iaf::Variables_::P_v_m_, nest::FlushEventMechanism::pre_run_hook(), nest::eprop_iaf::Variables_::RefractoryCounts_, nest::eprop_iaf::Parameters_::t_ref_, nest::eprop_iaf::Parameters_::tau_m_, and V_.

Here is the call graph for this function:

◆ send_test_event()

size_t nest::eprop_iaf::send_test_event ( Node &  receiving_node,
size_t  receptor_type,
synindex  syn_id,
bool  dummy_target 
)
inlineoverridevirtual

Send an event to the receiving_node passed as an argument.

Default implementation of check_connection just throws IllegalConnection.

This is required during the connection handshaking to test, if the receiving_node can handle the event type and receptor_type sent by the source node.

If dummy_target is true, this indicates that receiving_node is derived from ConnTestDummyNodeBase and used in the first call to send_test_event(). This can be ignored in most cases, but Nodes sending DS*Events to their own event hooks and then *Events to their proper targets must send DS*Events when called with the dummy target, and *Events when called with the real target, see #478.

Reimplemented from nest::Node.

◆ set_status()

void nest::eprop_iaf::set_status ( const Dictionary &  )
inlineoverridevirtual

Change properties of the node according to the entries in the dictionary.

Parameters
dDictionary with named parameter settings.

Implements nest::Node.

References P_, S_, nest::eprop_iaf::State_::set(), nest::eprop_iaf::Parameters_::set(), and nest::EpropArchivingNodeRecurrent< hist_shift_required >::set_status().

Here is the call graph for this function:

◆ update()

void nest::eprop_iaf::update ( Time const &  ,
const long  ,
const long   
)
overrideprivatevirtual

Advance the state of the node in time through the given interval.

This method advances the state of the node through the interval (origin+from, origin+to], which is at most min_delay long.

  • Precondition: State of the node corresponds to the time origin+from.
  • Postcondition: State of the node corresponds to the time origin+to.

Each step between from and to corresponds to one simulation timestep (nest.resolution).

If events are emitted, they have time stamps in the interval T+from+1 .. T+to.

Parameters
originnetwork time at beginning of time slice
frominitial step inside time slice
topost-final step inside time slice

Implements nest::Node.

References nest::EpropArchivingNodeRecurrent< false >::append_new_eprop_history_entry(), B_, nest::eprop_iaf::Parameters_::c_reg_, nest::EpropArchivingNodeRecurrent< false >::compute_surrogate_gradient_, nest::eprop_iaf::Buffers_::currents_, nest::KernelManager::event_delivery_manager, nest::eprop_iaf::Parameters_::f_target_, nest::FlushEventMechanism::flush_event_is_due(), nest::EpropArchivingNodeRecurrent< false >::get_learning_signal_from_history(), nest::RingBuffer::get_value(), nest::eprop_iaf::Parameters_::I_e_, nest::eprop_iaf::State_::i_in_, nest::eprop_iaf::Parameters_::kappa_reg_, nest::kernel(), nest::eprop_iaf::State_::learning_signal_, nest::eprop_iaf::Buffers_::logger_, P_, nest::eprop_iaf::Variables_::P_i_in_, nest::eprop_iaf::Variables_::P_v_m_, nest::eprop_iaf::State_::r_, nest::eprop_iaf::Variables_::RefractoryCounts_, S_, nest::EventDeliveryManager::send(), nest::Event::set_flush_event_flag(), nest::FlushEventMechanism::set_last_event_time(), nest::IgnoreAndSpikeMechanism::spike_event_is_due(), nest::eprop_iaf::Buffers_::spikes_, nest::eprop_iaf::State_::surrogate_gradient_, nest::eprop_iaf::Parameters_::surrogate_gradient_height_, nest::eprop_iaf::Parameters_::surrogate_gradient_width_, V_, nest::eprop_iaf::State_::v_m_, nest::eprop_iaf::Parameters_::V_min_, nest::eprop_iaf::Parameters_::V_th_, nest::EpropArchivingNodeRecurrent< false >::write_firing_rate_reg_to_history(), nest::EpropArchivingNodeRecurrent< false >::write_surrogate_gradient_to_history(), nest::eprop_iaf::State_::z_, and nest::eprop_iaf::State_::z_in_.

Here is the call graph for this function:

Friends And Related Symbol Documentation

◆ RecordablesMap< eprop_iaf >

friend class RecordablesMap< eprop_iaf >
friend

Map for storing a static set of recordables.

◆ UniversalDataLogger< eprop_iaf >

friend class UniversalDataLogger< eprop_iaf >
friend

Logger for universal data supporting the data logging request / reply mechanism. Populated with a recordables map.

Member Data Documentation

◆ B_

Buffers_ nest::eprop_iaf::B_
private

Structure of buffers.

Referenced by handle(), handle(), handle(), handles_test_event(), init_buffers_(), pre_run_hook(), and update().

◆ P_

Parameters_ nest::eprop_iaf::P_
private

Structure of parameters.

Referenced by compute_gradient(), get_status(), get_v_m_(), pre_run_hook(), set_status(), and update().

◆ recordablesMap_

RecordablesMap< eprop_iaf > nest::eprop_iaf::recordablesMap_
staticprivate

Map storing a static set of recordables.

Referenced by eprop_iaf(), get_status(), and handles_test_event().

◆ S_

State_ nest::eprop_iaf::S_
private

Structure of state variables.

Referenced by get_learning_signal_(), get_status(), get_surrogate_gradient_(), get_v_m_(), set_status(), and update().

◆ V_

Variables_ nest::eprop_iaf::V_
private

Structure of internal variables.

Referenced by compute_gradient(), pre_run_hook(), and update().


The documentation for this class was generated from the following files: