NEST main@caf0ae8
 
Loading...
Searching...
No Matches
eprop_iaf_bsshslm_2020.h
Go to the documentation of this file.
1/*
2 * eprop_iaf_bsshslm_2020.h
3 *
4 * This file is part of NEST.
5 *
6 * Copyright (C) 2004 The NEST Initiative
7 *
8 * NEST is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * NEST is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with NEST. If not, see <http://www.gnu.org/licenses/>.
20 *
21 */
22
23#ifndef EPROP_IAF_BSSHSLM_2020_H
24#define EPROP_IAF_BSSHSLM_2020_H
25
26// nestkernel
27#include "connection.h"
30#include "event.h"
31#include "nest_types.h"
32#include "ring_buffer.h"
34
35namespace nest
36{
37
38/* BeginUserDocs: neuron, e-prop plasticity, current-based, integrate-and-fire, hard threshold, Bellec
39
40Short description
41+++++++++++++++++
42
43Current-based leaky integrate-and-fire neuron model with delta-shaped or exponentially filtered
44postsynaptic currents for e-prop plasticity
45
46Description
47+++++++++++
48
49``eprop_iaf_bsshslm_2020`` is an implementation of a leaky integrate-and-fire
50neuron model with delta-shaped postsynaptic currents used for eligibility
51propagation (e-prop) plasticity.
52
53E-prop plasticity was originally introduced and implemented in TensorFlow in :footcite:p:`Bellec2020`.
54
55The suffix ``_bsshslm_2020`` follows the NEST convention to indicate in the
56model name the paper that introduced it by the first letter of the authors' last
57names and the publication year.
58
59.. note::
60 The neuron dynamics of the ``eprop_iaf_bsshslm_2020`` model (excluding e-prop
61 plasticity) are similar to the neuron dynamics of the ``iaf_psc_delta`` model,
62 with minor differences, such as the propagator of the post-synaptic current
63 and the voltage reset upon a spike.
64
65The membrane voltage time course :math:`v_j^t` of the neuron :math:`j` is given by:
66
67.. math::
68 v_j^t &= \alpha v_j^{t-1} + \zeta \sum_{i \neq j} W_{ji}^\text{rec} z_i^{t-1}
69 + \zeta \sum_i W_{ji}^\text{in} x_i^t - z_j^{t-1} v_\text{th} \,, \\
70 \alpha &= e^{ -\frac{ \Delta t }{ \tau_\text{m} } } \,, \\
71 \zeta &=
72 \begin{cases}
73 1 \\
74 1 - \alpha
75 \end{cases} \,, \\
76
77where :math:`W_{ji}^\text{rec}` and :math:`W_{ji}^\text{in}` are the recurrent and
78input synaptic weight matrices, and :math:`z_i^{t-1}` is the recurrent presynaptic
79state variable, while :math:`x_i^t` represents the input at time :math:`t`.
80
81Descriptions of further parameters and variables can be found in the table below.
82
83The spike state variable is expressed by a Heaviside function:
84
85.. math::
86 z_j^t = H \left( v_j^t - v_\text{th} \right) \,. \\
87
88If the membrane voltage crosses the threshold voltage :math:`v_\text{th}`, a spike is
89emitted and the membrane voltage is reduced by :math:`v_\text{th}` in the next
90time step. After the time step of the spike emission, the neuron is not
91able to spike for an absolute refractory period :math:`t_\text{ref}`.
92
93An additional state variable and the corresponding differential equation
94represents a piecewise constant external current.
95
96See the documentation on the :doc:`iaf_psc_delta<../models/iaf_psc_delta/>` neuron model
97for more information on the integration of the subthreshold dynamics.
98
99The change of the synaptic weight is calculated from the gradient :math:`g` of
100the loss :math:`E` with respect to the synaptic weight :math:`W_{ji}`:
101:math:`\frac{ \text{d}E }{ \text{d} W_{ij} }`
102which depends on the presynaptic
103spikes :math:`z_i^{t-1}`, the surrogate gradient or pseudo-derivative
104of the spike state variable with respect to the postsynaptic membrane
105voltage :math:`\psi_j^t` (the product of which forms the eligibility
106trace :math:`e_{ji}^t`), and the learning signal :math:`L_j^t` emitted
107by the readout neurons.
108
109.. math::
110 \frac{ \text{d} E }{ \text{d} W_{ji} } &= \sum_t L_j^t \bar{e}_{ji}^t \,, \\
111 e_{ji}^t &= \psi^t_j \bar{z}_i^{t-1} \,, \\
112
113.. include:: ../models/eprop_iaf.rst
114 :start-after: .. start_surrogate-gradient-functions
115 :end-before: .. end_surrogate-gradient-functions
116
117The eligibility trace and the presynaptic spike trains are low-pass filtered
118with the following exponential kernels:
119
120.. math::
121 \bar{e}_{ji}^t &= \mathcal{F}_\kappa \left( e_{ji}^t \right) \,, \\
122 \kappa &= e^{ -\frac{\Delta t }{ \tau_\text{m,out} }} \,, \\
123 \bar{z}_i^t &= \mathcal{F}_\alpha(z_i^t) \,, \\
124 \mathcal{F}_\alpha \left( z_i^t \right) &= \alpha \mathcal{F}_\alpha \left( z_i^{t-1} \right) + z_i^t \,, \\
125 \mathcal{F}_\alpha \left( z_i^0 \right) &= z_i^0 \,, \\
126
127where :math:`\tau_\text{m,out}` is the membrane time constant of the readout neuron.
128
129Furthermore, a firing rate regularization mechanism keeps the average firing
130rate :math:`f^\text{av}_j` of the postsynaptic neuron close to a target firing rate
131:math:`f^\text{target}`. The gradient :math:`g_\text{reg}` of the regularization loss :math:`E_\text{reg}`
132with respect to the synaptic weight :math:`W_{ji}` is given by:
133
134.. math::
135 \frac{ \text{d} E_\text{reg} }{ \text{d} W_{ji} }
136 = c_\text{reg} \sum_t \frac{ 1 }{ T n_\text{trial} }
137 \left( f^\text{target} - f^\text{av}_j \right) e_{ji}^t \,, \\
138
139where :math:`c_\text{reg}` is a constant scaling factor and the average
140is taken over the time that passed since the previous update, that is, the number of
141trials :math:`n_\text{trial}` times the duration of an update interval :math:`T`.
142
143The overall gradient is given by the addition of the two gradients.
144
145For more information on e-prop plasticity, see the documentation on the other e-prop models:
146
147 * :doc:`eprop_iaf_adapt_bsshslm_2020<../models/eprop_iaf_adapt_bsshslm_2020/>`
148 * :doc:`eprop_readout_bsshslm_2020<../models/eprop_readout_bsshslm_2020/>`
149 * :doc:`eprop_synapse_bsshslm_2020<../models/eprop_synapse_bsshslm_2020/>`
150 * :doc:`eprop_learning_signal_connection_bsshslm_2020<../models/eprop_learning_signal_connection_bsshslm_2020/>`
151
152Details on the event-based NEST implementation of e-prop can be found in :footcite:p:`KorcsakGorzo2025`.
153
154Parameters
155++++++++++
156
157The following parameters can be set in the status dictionary.
158
159=========================== ======= ======================= ================ ===================================
160**Neuron parameters**
161----------------------------------------------------------------------------------------------------------------
162Parameter Unit Math equivalent Default Description
163=========================== ======= ======================= ================ ===================================
164``C_m`` pF :math:`C_\text{m}` 250.0 Capacitance of the membrane
165``E_L`` mV :math:`E_\text{L}` -70.0 Leak / resting membrane potential
166``I_e`` pA :math:`I_\text{e}` 0.0 Constant external input current
167``regular_spike_arrival`` Boolean ``True`` If ``True``, the input spikes
168 arrive at the end of the time step,
169 if ``False`` at the beginning
170 (determines PSC scale)
171``t_ref`` ms :math:`t_\text{ref}` 2.0 Duration of the refractory period
172``tau_m`` ms :math:`\tau_\text{m}` 10.0 Time constant of the membrane
173``V_min`` mV :math:`v_\text{min}` negative maximum Absolute lower bound of the
174 value membrane voltage
175 representable by
176 ``double``
177 type in C++
178``V_th`` mV :math:`v_\text{th}` -55.0 Spike threshold voltage
179=========================== ======= ======================= ================ ===================================
180
181=============================== ==== ======================= ================== ================================
182**E-prop parameters**
183----------------------------------------------------------------------------------------------------------------
184Parameter Unit Math equivalent Default Description
185=============================== ==== ======================= ================== ================================
186``flush_event_send_interval`` ms maximum value Interval since previous
187 representable by event after which a flush event
188 ``double`` type in is sent
189 in C++
190``c_reg`` :math:`c_\text{reg}` 0.0 Coefficient of firing rate
191 regularization
192``f_target`` Hz :math:`f^\text{target}` 10.0 Target firing rate of rate
193 regularization
194``surrogate_gradient_function`` :math:`\psi` "piecewise_linear" Surrogate gradient /
195 pseudo-derivative function
196 ["piecewise_linear",
197 "exponential",
198 "fast_sigmoid_derivative",
199 "arctan_derivative"]
200``surrogate_gradient_height`` :math:`\gamma` 0.3 Height scaling of surrogate
201 gradient / pseudo-derivative of
202 membrane voltage
203``surrogate_gradient_width`` :math:`1/\beta` 1.0 Width scaling of surrogate
204 gradient / pseudo-derivative of
205 membrane voltage
206=============================== ==== ======================= ================== ================================
207
208Recordables
209+++++++++++
210
211The following state variables evolve during simulation and can be recorded.
212
213================== ==== =============== ============= ================
214**Neuron state variables and recordables**
215----------------------------------------------------------------------
216State variable Unit Math equivalent Initial value Description
217================== ==== =============== ============= ================
218``V_m`` mV :math:`v_j` -70.0 Membrane voltage
219================== ==== =============== ============= ================
220
221====================== ==== =============== ============= =========================================
222**E-prop state variables and recordables**
223---------------------------------------------------------------------------------------------------
224State variable Unit Math equivalent Initial value Description
225====================== ==== =============== ============= =========================================
226``learning_signal`` pA :math:`L_j` 0.0 Learning signal
227``surrogate_gradient`` :math:`\psi_j` 0.0 Surrogate gradient / pseudo-derivative of
228 membrane voltage
229====================== ==== =============== ============= =========================================
230
231Usage
232+++++
233
234This model can only be used in combination with the other e-prop models
235and the network architecture requires specific wiring, input, and output.
236The usage is demonstrated in several
237:doc:`supervised regression and classification tasks <../auto_examples/eprop_plasticity/index>`
238reproducing among others the original proof-of-concept tasks in :footcite:p:`Bellec2020`.
239
240References
241++++++++++
242
243.. footbibliography::
244
245Sends
246+++++
247
248SpikeEvent
249
250Receives
251++++++++
252
253SpikeEvent, CurrentEvent, LearningSignalConnectionEvent, DataLoggingRequest
254
255See also
256++++++++
257
258Examples using this model
259+++++++++++++++++++++++++
260
261.. listexamples:: eprop_iaf_bsshslm_2020
262
263EndUserDocs */
264
265void register_eprop_iaf_bsshslm_2020( const std::string& name );
266
274{
275
276public:
279
282
283 using Node::handle;
285
286 size_t send_test_event( Node&, size_t, synindex, bool ) override;
287
288 void handle( SpikeEvent& ) override;
289 void handle( CurrentEvent& ) override;
290 void handle( LearningSignalConnectionEvent& ) override;
291 void handle( DataLoggingRequest& ) override;
292
293 size_t handles_test_event( SpikeEvent&, size_t ) override;
294 size_t handles_test_event( CurrentEvent&, size_t ) override;
295 size_t handles_test_event( LearningSignalConnectionEvent&, size_t ) override;
296 size_t handles_test_event( DataLoggingRequest&, size_t ) override;
297
298 void get_status( Dictionary& ) const override;
299 void set_status( const Dictionary& ) override;
300
301private:
302 void init_buffers_() override;
303 void pre_run_hook() override;
304
305 void update( Time const&, const long, const long ) override;
306
307 double compute_gradient( std::vector< long >&, const long, const long, const double, const bool ) override;
308
309 long get_shift() const override;
310 bool is_eprop_recurrent_node() const override;
311
314
316 friend class UniversalDataLogger< eprop_iaf_bsshslm_2020 >;
317
320 {
322 double C_m_;
323
325 double c_reg_;
326
328 double E_L_;
329
331 double f_target_;
332
334 double I_e_;
335
338
342
345
348
350 double t_ref_;
351
353 double tau_m_;
354
356 double V_min_;
357
359 double V_th_;
360
362 Parameters_();
363
365 void get( Dictionary& ) const;
366
368 double set( const Dictionary&, Node* );
369 };
370
372 struct State_
373 {
376
378 int r_;
379
382
384 double i_in_;
385
387 double v_m_;
388
390 double z_;
391
393 double z_in_;
394
396 State_();
397
399 void get( Dictionary&, const Parameters_& ) const;
400
402 void set( const Dictionary&, const Parameters_&, double, Node* );
403 };
404
423
426 {
428 double P_v_m_;
429
432 double P_z_in_;
433
435 double P_i_in_;
436
439 };
440
442 double
443 get_v_m_() const
444 {
445 return S_.v_m_ + P_.E_L_;
446 }
447
449 double
451 {
452 return S_.surrogate_gradient_;
453 }
454
456 double
458 {
459 return S_.learning_signal_;
460 }
461
462 // the order in which the structure instances are defined is important for speed
463
466
469
472
475
478};
479
480inline long
485
486inline bool
488{
489 return true;
490}
491
492inline size_t
493eprop_iaf_bsshslm_2020::send_test_event( Node& target, size_t receptor_type, synindex, bool )
494{
495 SpikeEvent e;
496 e.set_sender( *this );
497 return target.handles_test_event( e, receptor_type );
498}
499
500inline size_t
502{
503 if ( receptor_type != 0 )
504 {
505 throw UnknownReceptorType( receptor_type, get_name() );
506 }
507
508 return 0;
509}
510
511inline size_t
513{
514 if ( receptor_type != 0 )
515 {
516 throw UnknownReceptorType( receptor_type, get_name() );
517 }
518
519 return 0;
520}
521
522inline size_t
524{
525 if ( receptor_type != 0 )
526 {
527 throw UnknownReceptorType( receptor_type, get_name() );
528 }
529
530 return 0;
531}
532
533inline size_t
535{
536 if ( receptor_type != 0 )
537 {
538 throw UnknownReceptorType( receptor_type, get_name() );
539 }
540
541 return B_.logger_.connect_logging_device( dlr, recordablesMap_ );
542}
543
544inline void
552
553inline void
555{
557 // temporary copies in case of errors
558 Parameters_ ptmp = P_;
559 State_ stmp = S_;
560
561 // make sure that ptmp and stmp consistent - throw BadProperty if not
562 const double delta_EL = ptmp.set( d, this );
563 stmp.set( d, ptmp, delta_EL, this );
564
565 P_ = ptmp;
566 S_ = stmp;
567}
568
569} // namespace nest
570
571#endif // EPROP_IAF_BSSHSLM_2020_H
Dictionary class for interface to Python and C++ API.
Definition dictionary.h:213
Event for electrical currents.
Definition event.h:569
Request data to be logged/logged data to be sent.
Definition event.h:636
Class implementing an intermediate archiving node model for recurrent node models supporting e-prop p...
Definition eprop_archiving_node_recurrent.h:43
void set_status(const Dictionary &d) override
Change properties of the node according to the entries in the dictionary.
Definition eprop_archiving_node_recurrent.h:286
void get_status(Dictionary &d) const override
Export properties of the node by setting entries in the status dictionary.
Definition eprop_archiving_node_recurrent.h:273
const long delay_in_rec_
Transmission delay from input to recurrent neurons.
Definition eprop_archiving_node.h:171
const long offset_gen_
Offset since generator signals start from time step 1.
Definition eprop_archiving_node.h:168
Event for learning signal connections.
Definition secondary_event.h:384
Base class for all NEST network objects.
Definition node.h:99
std::string get_name() const
Return class name.
Definition node.cpp:105
Map names of recordables to data access functions.
Definition recordables_map.h:61
Buffer Layout.
Definition ring_buffer.h:83
Event for spike information.
Definition event.h:418
Definition nest_time.h:135
Exception to be thrown if the specified receptor type does not exist in the node.
Definition exceptions.h:417
Class implementing a LIF neuron model for e-prop plasticity.
Definition eprop_iaf_bsshslm_2020.h:274
size_t send_test_event(Node &, size_t, synindex, bool) override
Send an event to the receiving_node passed as an argument.
Definition eprop_iaf_bsshslm_2020.h:493
double get_learning_signal_() const
Get the current value of the learning signal.
Definition eprop_iaf_bsshslm_2020.h:457
void set_status(const Dictionary &) override
Change properties of the node according to the entries in the dictionary.
Definition eprop_iaf_bsshslm_2020.h:554
void pre_run_hook() override
Re-calculate dependent parameters of the node.
Definition eprop_iaf_bsshslm_2020.cpp:251
static RecordablesMap< eprop_iaf_bsshslm_2020 > recordablesMap_
Map storing a static set of recordables.
Definition eprop_iaf_bsshslm_2020.h:477
bool is_eprop_recurrent_node() const override
Checks if the node is part of the recurrent network and thus not a readout neuron.
Definition eprop_iaf_bsshslm_2020.h:487
void init_buffers_() override
Configure persistent internal data structures.
Definition eprop_iaf_bsshslm_2020.cpp:243
State_ S_
Structure of state variables.
Definition eprop_iaf_bsshslm_2020.h:468
size_t handles_test_event(SpikeEvent &, size_t) override
Check if the node can handle a particular event and receptor type.
Definition eprop_iaf_bsshslm_2020.h:501
double get_surrogate_gradient_() const
Get the current value of the surrogate gradient.
Definition eprop_iaf_bsshslm_2020.h:450
Variables_ V_
Structure of internal variables.
Definition eprop_iaf_bsshslm_2020.h:471
double get_v_m_() const
Get the current value of the membrane voltage.
Definition eprop_iaf_bsshslm_2020.h:443
friend class UniversalDataLogger< eprop_iaf_bsshslm_2020 >
Logger for universal data supporting the data logging request / reply mechanism. Populated with a rec...
Definition eprop_iaf_bsshslm_2020.h:316
long get_shift() const override
Retrieves the temporal shift of the signal.
Definition eprop_iaf_bsshslm_2020.h:481
void handle(SpikeEvent &) override
Handle incoming spike events.
Definition eprop_iaf_bsshslm_2020.cpp:354
void update(Time const &, const long, const long) override
Advance the state of the node in time through the given interval.
Definition eprop_iaf_bsshslm_2020.cpp:273
Buffers_ B_
Structure of buffers.
Definition eprop_iaf_bsshslm_2020.h:474
void get_status(Dictionary &) const override
Export properties of the node by setting entries in the status dictionary.
Definition eprop_iaf_bsshslm_2020.h:545
double compute_gradient(std::vector< long > &, const long, const long, const double, const bool) override
Compute gradient change for eprop synapses.
Definition eprop_iaf_bsshslm_2020.cpp:392
eprop_iaf_bsshslm_2020()
Default constructor.
Definition eprop_iaf_bsshslm_2020.cpp:221
Parameters_ P_
Structure of parameters.
Definition eprop_iaf_bsshslm_2020.h:465
virtual size_t handles_test_event(SpikeEvent &, size_t receptor_type)
Check if the node can handle a particular event and receptor type.
Definition node.cpp:271
virtual void handle(SpikeEvent &e)
Handle incoming spike events.
Definition node.cpp:265
const std::string recordables("recordables")
Namespace for the NEST simulation kernel.
Definition beta_normalization_factor.h:33
void register_eprop_iaf_bsshslm_2020(const std::string &name)
Definition eprop_iaf_bsshslm_2020.cpp:44
size_t synindex
For enumerations of synapse types.
Definition nest_types.h:115
Structure of buffers.
Definition eprop_iaf_bsshslm_2020.h:407
RingBuffer spikes_
Buffer for incoming spikes.
Definition eprop_iaf_bsshslm_2020.h:415
UniversalDataLogger< eprop_iaf_bsshslm_2020 > logger_
Logger for universal data.
Definition eprop_iaf_bsshslm_2020.h:421
RingBuffer currents_
Buffer for incoming currents.
Definition eprop_iaf_bsshslm_2020.h:418
Structure of parameters.
Definition eprop_iaf_bsshslm_2020.h:320
double c_reg_
Coefficient of firing rate regularization.
Definition eprop_iaf_bsshslm_2020.h:325
double surrogate_gradient_height_
Height scaling of surrogate gradient / pseudo-derivative of membrane voltage.
Definition eprop_iaf_bsshslm_2020.h:344
Parameters_()
Default constructor.
Definition eprop_iaf_bsshslm_2020.cpp:69
double V_min_
Absolute lower bound of the membrane voltage relative to the leak membrane potential (mV).
Definition eprop_iaf_bsshslm_2020.h:356
std::string surrogate_gradient_function_
Surrogate gradient / pseudo-derivative function of the membrane voltage ["piecewise_linear",...
Definition eprop_iaf_bsshslm_2020.h:341
double surrogate_gradient_width_
Width scaling of surrogate gradient / pseudo-derivative of membrane voltage.
Definition eprop_iaf_bsshslm_2020.h:347
double V_th_
Spike threshold voltage relative to the leak membrane potential (mV).
Definition eprop_iaf_bsshslm_2020.h:359
double t_ref_
Duration of the refractory period (ms).
Definition eprop_iaf_bsshslm_2020.h:350
void get(Dictionary &) const
Get the parameters and their values.
Definition eprop_iaf_bsshslm_2020.cpp:112
double I_e_
Constant external input current (pA).
Definition eprop_iaf_bsshslm_2020.h:334
double E_L_
Leak / resting membrane potential (mV).
Definition eprop_iaf_bsshslm_2020.h:328
double tau_m_
Time constant of the membrane (ms).
Definition eprop_iaf_bsshslm_2020.h:353
double C_m_
Capacitance of the membrane (pF).
Definition eprop_iaf_bsshslm_2020.h:322
double f_target_
Target firing rate of rate regularization (spikes/s).
Definition eprop_iaf_bsshslm_2020.h:331
bool regular_spike_arrival_
If True, the input spikes arrive at the beginning of the time step, if False at the end (determines P...
Definition eprop_iaf_bsshslm_2020.h:337
double set(const Dictionary &, Node *)
Set the parameters and throw errors in case of invalid values.
Definition eprop_iaf_bsshslm_2020.cpp:130
Structure of state variables.
Definition eprop_iaf_bsshslm_2020.h:373
double z_in_
Binary input spike state variable - 1.0 if the neuron has spiked in the previous time step and 0....
Definition eprop_iaf_bsshslm_2020.h:393
double i_in_
Input current (pA).
Definition eprop_iaf_bsshslm_2020.h:384
double learning_signal_
Learning signal. Sum of weighted error signals coming from the readout neurons.
Definition eprop_iaf_bsshslm_2020.h:375
void set(const Dictionary &, const Parameters_ &, double, Node *)
Set the state variables.
Definition eprop_iaf_bsshslm_2020.cpp:212
int r_
Number of remaining refractory steps.
Definition eprop_iaf_bsshslm_2020.h:378
double z_
Binary spike state variable - 1.0 if the neuron has spiked in the previous time step and 0....
Definition eprop_iaf_bsshslm_2020.h:390
double v_m_
Membrane voltage relative to the leak membrane potential (mV).
Definition eprop_iaf_bsshslm_2020.h:387
State_()
Default constructor.
Definition eprop_iaf_bsshslm_2020.cpp:86
double surrogate_gradient_
Surrogate gradient / pseudo-derivative of the membrane voltage.
Definition eprop_iaf_bsshslm_2020.h:381
void get(Dictionary &, const Parameters_ &) const
Get the state variables and their values.
Definition eprop_iaf_bsshslm_2020.cpp:204
Structure of internal variables.
Definition eprop_iaf_bsshslm_2020.h:426
double P_v_m_
Propagator matrix entry for evolving the membrane voltage (mathematical symbol "alpha" in user docume...
Definition eprop_iaf_bsshslm_2020.h:428
double P_z_in_
Propagator matrix entry for evolving the incoming spike state variables (mathematical symbol "zeta" i...
Definition eprop_iaf_bsshslm_2020.h:432
double P_i_in_
Propagator matrix entry for evolving the incoming currents.
Definition eprop_iaf_bsshslm_2020.h:435
int RefractoryCounts_
Total refractory steps.
Definition eprop_iaf_bsshslm_2020.h:438