NEST main@caf0ae8
 
Loading...
Searching...
No Matches
stdp_dopamine_synapse.h
Go to the documentation of this file.
1/*
2 * stdp_dopamine_synapse.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 STDP_DOPAMINE_SYNAPSE_H
24#define STDP_DOPAMINE_SYNAPSE_H
25
26// Includes from libnestutil:
27#include "numerics.h"
28
29// Includes from models:
30#include "volume_transmitter.h"
31
32// Includes from nestkernel:
33#include "connection.h"
34#include "spikecounter.h"
35
36namespace nest
37{
38
39/* BeginUserDocs: synapse, chemical, functional, stdp, 3-factor
40
41Short description
42+++++++++++++++++
43
44Synapse type for dopamine-modulated spike-timing dependent plasticity
45
46Description
47+++++++++++
48
49``stdp_dopamine_synapse`` is a connection to create synapses with
50dopamine-modulated spike-timing dependent plasticity (used as a
51benchmark model in :footcite:p:`Potjans2010`, based on :footcite:p:`Izhikevich2007`). The dopaminergic signal is a
52low-pass filtered version of the spike rate of a user-specific pool
53of neurons. The spikes emitted by the pool of dopamine neurons are
54delivered to the synapse via the assigned volume transmitter. The
55dopaminergic dynamics is calculated in the synapse itself.
56
57.. warning::
58
59 This synaptic plasticity rule does not take
60 :ref:`precise spike timing <sim_precise_spike_times>` into
61 account. When calculating the weight update, the precise spike time part
62 of the timestamp is ignored.
63
64Parameters
65++++++++++
66
67=================== =========================== ======================================================
68**Common properties**
69------------------------------------------------------------------------------------------------------
70 volume_transmitter :py:class:`.NodeCollection` :doc:`Volume transmitter </models/volume_transmitter>`
71 collecting the spikes from the pool of dopamine
72 releasing neurons and transmitting the spikes to the
73 synapse.
74 A_plus real Multiplier applied to weight changes caused by
75 pre-before-post spike pairings. If b (dopamine
76 baseline concentration) is zero, then A_plus
77 is simply the multiplier for facilitation (as in the
78 stdp_synapse model). If b is not zero, then A_plus
79 will be the multiplier for facilitation only if n - b
80 is positive, where n is the instantaneous dopamine
81 concentration in the volume transmitter. If n - b is
82 negative, A_plus will be the multiplier for
83 depression.
84 A_minus real Multiplier applied to weight changes caused by
85 post-before-pre spike pairings. If b (dopamine
86 baseline concentration) is zero, then A_minus
87 is simply the multiplier for depression (as in the
88 stdp_synapse model). If b is not zero, then A_minus
89 will be the multiplier for depression only if n - b
90 is positive, where n is the instantaneous dopamine
91 concentration in the volume transmitter. If n - b is
92 negative, A_minus will be the multiplier for
93 facilitation.
94 tau_plus ms STDP time constant for weight changes caused by
95 pre-before-post spike pairings.
96 tau_c ms Time constant of eligibility trace
97 tau_n ms Time constant of dopaminergic trace
98 b real Dopaminergic baseline concentration
99 Wmin real Minimal synaptic weight
100 Wmax real Maximal synaptic weight
101=================== =========================== ======================================================
102
103The common properties can only be set by :py:func:`.SetDefaults` and apply
104to all instances of the synapse model.
105
106=== ====== =====================================
107**Individual properties**
108-------------------------------------------------
109 c real Eligibility trace
110 n real Neuromodulator concentration
111=== ====== =====================================
112
113References
114++++++++++
115
116.. footbibliography::
117
118Transmits
119+++++++++
120
121SpikeEvent
122
123See also
124++++++++
125
126volume_transmitter
127
128Examples using this model
129+++++++++++++++++++++++++
130
131.. listexamples:: stdp_dopamine_synapse
132
133EndUserDocs */
134
140{
141public:
147
151 void get_status( Dictionary& d ) const;
152
156 void set_status( const Dictionary& d, ConnectorModel& cm );
157
158 long get_vt_node_id() const;
159
161 double A_plus_;
162 double A_minus_;
163 double tau_plus_;
164 double tau_c_;
165 double tau_n_;
166 double b_;
167 double Wmin_;
168 double Wmax_;
169};
170
171inline long
173{
175 {
177 }
178 else
179 {
180 return -1;
181 }
182}
183
188void register_stdp_dopamine_synapse( const std::string& name );
189
190template < typename targetidentifierT >
191class stdp_dopamine_synapse : public Connection< targetidentifierT >
192{
193
194public:
197
201
207
214
215 // Explicitly declare all methods inherited from the dependent base
216 // ConnectionBase. This avoids explicit name prefixes in all places these
217 // functions are used. Since ConnectionBase depends on the template parameter,
218 // they are not automatically found in the base class.
223
227 void get_status( Dictionary& d ) const;
228
232 void set_status( const Dictionary& d, ConnectorModel& cm );
233
241 void check_synapse_params( const Dictionary& d ) const;
242
247 bool send( Event& e, size_t t, const STDPDopaCommonProperties& cp );
248
249 void trigger_update_weight( size_t t,
250 const std::vector< spikecounter >& dopa_spikes,
251 double t_trig,
252 const STDPDopaCommonProperties& cp );
253
255 {
256 public:
257 // Ensure proper overriding of overloaded virtual functions.
258 // Return values from functions are ignored.
260 size_t
261 handles_test_event( SpikeEvent&, size_t ) override
262 {
263 return invalid_port;
264 }
265 };
266
267 /*
268 * This function calls check_connection on the sender and checks if the
269 * receiver accepts the event type and receptor type requested by the sender.
270 * Node::check_connection() will either confirm the receiver port by returning
271 * true or false if the connection should be ignored.
272 * We have to override the base class' implementation, since for STDP
273 * connections we have to call register_stdp_pl_connection on the target
274 * neuron to inform the Archiver to collect spikes for this connection.
275 * Further, the STDP dopamine synapse requires a volume transmitter to be set
276 * before any simulation is performed. Checking this satisfies ticket #926.
277 *
278 * \param s The source node
279 * \param r The target node
280 * \param receptor_type The ID of the requested receptor type
281 */
282 void
283 check_connection( Node& s, Node& t, size_t receptor_type, const CommonPropertiesType& cp )
284 {
285 if ( not cp.volume_transmitter_ )
286 {
287 throw BadProperty( "No volume transmitter has been assigned to the dopamine synapse." );
288 }
289
290 ConnTestDummyNode dummy_target;
291 ConnectionBase::check_connection_( dummy_target, s, t, receptor_type );
292
294 }
295
296 void
297 set_weight( double w )
298 {
299 weight_ = w;
300 }
301
302private:
303 // update dopamine trace from last to current dopamine spike and increment
304 // index
305 void update_dopamine_( const std::vector< spikecounter >& dopa_spikes, const STDPDopaCommonProperties& cp );
306
307 void update_weight_( double c0, double n0, double minus_dt, const STDPDopaCommonProperties& cp );
308
309 void process_dopa_spikes_( const std::vector< spikecounter >& dopa_spikes,
310 double t0,
311 double t1,
312 const STDPDopaCommonProperties& cp );
313 void facilitate_( double kplus, const STDPDopaCommonProperties& cp );
314 void depress_( double kminus, const STDPDopaCommonProperties& cp );
315
316 // data members of each connection
317 double weight_;
318 double Kplus_;
319 double c_;
320 double n_;
321
322 // dopa_spikes_idx_ refers to the dopamine spike that has just been processes
323 // after trigger_update_weight a pseudo dopamine spike at t_trig is stored at
324 // index 0 and dopa_spike_idx_ = 0
326
327 // time of last update, which is either time of last presyn. spike or
328 // time-driven update
330
332};
333
334template < typename targetidentifierT >
336
337//
338// Implementation of class stdp_dopamine_synapse.
339//
340
341template < typename targetidentifierT >
344 , weight_( 1.0 )
345 , Kplus_( 0.0 )
346 , c_( 0.0 )
347 , n_( 0.0 )
348 , dopa_spikes_idx_( 0 )
349 , t_last_update_( 0.0 )
350 , t_lastspike_( 0.0 )
351{
352}
353
354template < typename targetidentifierT >
355void
357{
358
359 // base class properties, different for individual synapse
360 ConnectionBase::get_status( d );
361 d[ names::weight ] = weight_;
362
363 // own properties, different for individual synapse
364 d[ names::Kplus ] = Kplus_;
365 d[ names::c ] = c_;
366 d[ names::n ] = n_;
367}
368
369template < typename targetidentifierT >
370void
372{
373 // base class properties
374 ConnectionBase::set_status( d, cm );
375 d.update_value( names::weight, weight_ );
376
377 d.update_value( names::c, c_ );
378 d.update_value( names::n, n_ );
379
380 d.update_value( names::Kplus, Kplus_ );
381 if ( Kplus_ < 0 )
382 {
383 throw BadProperty( "Kplus must be non-negative." );
384 }
385}
386
387template < typename targetidentifierT >
388void
390{
391 // Setting of parameter c and n not thread safe.
392 if ( kernel().vp_manager.get_num_threads() > 1 )
393 {
394 if ( syn_spec.known( names::c ) )
395 {
396 throw NotImplemented(
397 "For multi-threading Connect doesn't support the setting "
398 "of parameter c in stdp_dopamine_synapse. "
399 "Use SetDefaults() or CopyModel()." );
400 }
401 if ( syn_spec.known( names::n ) )
402 {
403 throw NotImplemented(
404 "For multi-threading Connect doesn't support the setting "
405 "of parameter n in stdp_dopamine_synapse. "
406 "Use SetDefaults() or CopyModel()." );
407 }
408 }
409}
410
411template < typename targetidentifierT >
412inline void
413stdp_dopamine_synapse< targetidentifierT >::update_dopamine_( const std::vector< spikecounter >& dopa_spikes,
414 const STDPDopaCommonProperties& cp )
415{
416 double minus_dt = dopa_spikes[ dopa_spikes_idx_ ].spike_time_ - dopa_spikes[ dopa_spikes_idx_ + 1 ].spike_time_;
417 ++dopa_spikes_idx_;
418 n_ = n_ * std::exp( minus_dt / cp.tau_n_ ) + dopa_spikes[ dopa_spikes_idx_ ].multiplicity_ / cp.tau_n_;
419}
420
421template < typename targetidentifierT >
422inline void
424 double n0,
425 double minus_dt,
426 const STDPDopaCommonProperties& cp )
427{
428 const double taus_ = ( cp.tau_c_ + cp.tau_n_ ) / ( cp.tau_c_ * cp.tau_n_ );
429 weight_ = weight_
430 - c0
431 * ( n0 / taus_ * numerics::expm1( taus_ * minus_dt )
432 - cp.b_ * cp.tau_c_ * numerics::expm1( minus_dt / cp.tau_c_ ) );
433
434 if ( weight_ < cp.Wmin_ )
435 {
436 weight_ = cp.Wmin_;
437 }
438 if ( weight_ > cp.Wmax_ )
439 {
440 weight_ = cp.Wmax_;
441 }
442}
443
444template < typename targetidentifierT >
445inline void
446stdp_dopamine_synapse< targetidentifierT >::process_dopa_spikes_( const std::vector< spikecounter >& dopa_spikes,
447 double t0,
448 double t1,
449 const STDPDopaCommonProperties& cp )
450{
451 // process dopa spikes in (t0, t1]
452 // propagate weight from t0 to t1
453 if ( ( dopa_spikes.size() > dopa_spikes_idx_ + 1 )
454 and ( t1 - dopa_spikes[ dopa_spikes_idx_ + 1 ].spike_time_ > -1.0 * kernel().connection_manager.get_stdp_eps() ) )
455 {
456 // there is at least 1 dopa spike in (t0, t1]
457 // propagate weight up to first dopa spike and update dopamine trace
458 // weight and eligibility c are at time t0 but dopamine trace n is at time
459 // of last dopa spike
460 double n0 =
461 n_ * std::exp( ( dopa_spikes[ dopa_spikes_idx_ ].spike_time_ - t0 ) / cp.tau_n_ ); // dopamine trace n at time t0
462 update_weight_( c_, n0, t0 - dopa_spikes[ dopa_spikes_idx_ + 1 ].spike_time_, cp );
463 update_dopamine_( dopa_spikes, cp );
464
465 // process remaining dopa spikes in (t0, t1]
466 double cd;
467 while ( ( dopa_spikes.size() > dopa_spikes_idx_ + 1 )
468 and ( t1 - dopa_spikes[ dopa_spikes_idx_ + 1 ].spike_time_ > -1.0 * kernel().connection_manager.get_stdp_eps() ) )
469 {
470 // propagate weight up to next dopa spike and update dopamine trace
471 // weight and dopamine trace n are at time of last dopa spike td but
472 // eligibility c is at time
473 // t0
474 cd = c_
475 * std::exp( ( t0 - dopa_spikes[ dopa_spikes_idx_ ].spike_time_ ) / cp.tau_c_ ); // eligibility c at time of td
476 update_weight_(
477 cd, n_, dopa_spikes[ dopa_spikes_idx_ ].spike_time_ - dopa_spikes[ dopa_spikes_idx_ + 1 ].spike_time_, cp );
478 update_dopamine_( dopa_spikes, cp );
479 }
480
481 // propagate weight up to t1
482 // weight and dopamine trace n are at time of last dopa spike td but
483 // eligibility c is at time t0
484 cd = c_ * std::exp( ( t0 - dopa_spikes[ dopa_spikes_idx_ ].spike_time_ ) / cp.tau_c_ ); // eligibility c at time td
485 update_weight_( cd, n_, dopa_spikes[ dopa_spikes_idx_ ].spike_time_ - t1, cp );
486 }
487 else
488 {
489 // no dopamine spikes in (t0, t1]
490 // weight and eligibility c are at time t0 but dopamine trace n is at time
491 // of last dopa spike
492 double n0 =
493 n_ * std::exp( ( dopa_spikes[ dopa_spikes_idx_ ].spike_time_ - t0 ) / cp.tau_n_ ); // dopamine trace n at time t0
494 update_weight_( c_, n0, t0 - t1, cp );
495 }
496
497 // update eligibility trace c for interval (t0, t1]
498 c_ = c_ * std::exp( ( t0 - t1 ) / cp.tau_c_ );
499}
500
501template < typename targetidentifierT >
502inline void
504{
505 c_ += cp.A_plus_ * kplus;
506}
507
508template < typename targetidentifierT >
509inline void
511{
512 c_ -= cp.A_minus_ * kminus;
513}
514
520template < typename targetidentifierT >
521inline bool
523{
524 Node* target = get_target( t );
525
526 // purely dendritic delay
527 double dendritic_delay = get_delay();
528
529 double t_spike = e.get_stamp().get_ms();
530
531 // get history of dopamine spikes
532 const std::vector< spikecounter >& dopa_spikes = cp.volume_transmitter_->deliver_spikes();
533
534 // get spike history in relevant range (t_last_update, t_spike] from
535 // postsynaptic neuron
536 std::deque< histentry >::iterator start;
537 std::deque< histentry >::iterator finish;
538 target->get_history( t_last_update_ - dendritic_delay, t_spike - dendritic_delay, &start, &finish );
539
540 // facilitation due to postsynaptic spikes since last update
541 double t0 = t_last_update_;
542 double minus_dt;
543 while ( start != finish )
544 {
545 process_dopa_spikes_( dopa_spikes, t0, start->t_ + dendritic_delay, cp );
546 t0 = start->t_ + dendritic_delay;
547 minus_dt = t_last_update_ - t0;
548 // facilitate only in case of post- after presyn. spike
549 // skip facilitation if pre- and postsyn. spike occur at the same time
550 if ( t_spike - start->t_ > kernel().connection_manager.get_stdp_eps() )
551 {
552 facilitate_( Kplus_ * std::exp( minus_dt / cp.tau_plus_ ), cp );
553 }
554 ++start;
555 }
556
557 // depression due to new pre-synaptic spike
558 process_dopa_spikes_( dopa_spikes, t0, t_spike, cp );
559 depress_( target->get_K_value( t_spike - dendritic_delay ), cp );
560
561 e.set_receiver( *target );
562 e.set_weight( weight_ );
563 e.set_delay_steps( get_delay_steps() );
564 e.set_rport( get_rport() );
565 e();
566
567 Kplus_ = Kplus_ * std::exp( ( t_last_update_ - t_spike ) / cp.tau_plus_ ) + 1.0;
568 t_last_update_ = t_spike;
569 t_lastspike_ = t_spike;
570
571 return true;
572}
573
574template < typename targetidentifierT >
575inline void
577 const std::vector< spikecounter >& dopa_spikes,
578 const double t_trig,
579 const STDPDopaCommonProperties& cp )
580{
581 // propagate all state variables to time t_trig
582 // this does not include the depression trace K_minus, which is updated in the
583 // postsyn. neuron
584
585 // purely dendritic delay
586 double dendritic_delay = get_delay();
587
588 // get spike history in relevant range (t_last_update, t_trig] from postsyn.
589 // neuron
590 std::deque< histentry >::iterator start;
591 std::deque< histentry >::iterator finish;
592 get_target( t )->get_history( t_last_update_ - dendritic_delay, t_trig - dendritic_delay, &start, &finish );
593
594 // facilitation due to postsyn. spikes since last update
595 double t0 = t_last_update_;
596 double minus_dt;
597 while ( start != finish )
598 {
599 process_dopa_spikes_( dopa_spikes, t0, start->t_ + dendritic_delay, cp );
600 t0 = start->t_ + dendritic_delay;
601 minus_dt = t_last_update_ - t0;
602 facilitate_( Kplus_ * std::exp( minus_dt / cp.tau_plus_ ), cp );
603 ++start;
604 }
605
606 // propagate weight, eligibility trace c, dopamine trace n and facilitation
607 // trace K_plus to time t_trig but do not increment/decrement as there are no
608 // spikes to be handled at t_trig
609 process_dopa_spikes_( dopa_spikes, t0, t_trig, cp );
610 n_ = n_ * std::exp( ( dopa_spikes[ dopa_spikes_idx_ ].spike_time_ - t_trig ) / cp.tau_n_ );
611 Kplus_ = Kplus_ * std::exp( ( t_last_update_ - t_trig ) / cp.tau_plus_ );
612
613 t_last_update_ = t_trig;
614 dopa_spikes_idx_ = 0;
615}
616
617} // of namespace nest
618
619#endif // of #ifndef STDP_DOPAMINE_SYNAPSE_H
Dictionary class for interface to Python and C++ API.
Definition dictionary.h:213
bool known(const std::string &key) const
Check whether there exists a value with specified key in the dictionary.
Definition dictionary.h:677
Exception to be thrown if a status parameter is incomplete or inconsistent.
Definition exceptions.h:680
Class containing the common properties for all connections of a certain type.
Definition common_synapse_properties.h:50
Base class for dummy nodes used in connection testing.
Definition connection.h:67
Base class for representing connections.
Definition connection.h:110
void check_connection_(Node &dummy_target, Node &source, Node &target, const size_t receptor_type)
This function calls check_connection() on the sender to check if the receiver accepts the event type ...
Definition connection.h:319
long get_delay_steps() const
Return the delay of the connection in steps.
Definition connection.h:181
Node * get_target(const size_t tid) const
Definition connection.h:239
size_t get_rport() const
Definition connection.h:244
double get_delay() const
Return the delay of the connection in ms.
Definition connection.h:172
Definition connector_model.h:69
Encapsulate information sent between nodes.
Definition event.h:103
Base class for all NEST network objects.
Definition node.h:99
virtual void register_stdp_connection(double, double)
Register a STDP connection.
Definition node.cpp:211
size_t get_node_id() const
Return global Network ID.
Definition node.h:1200
Exception to be thrown if a feature is unavailable.
Definition exceptions.h:108
Class containing the common properties for all synapses of type dopamine connection.
Definition stdp_dopamine_synapse.h:140
double tau_n_
Definition stdp_dopamine_synapse.h:165
double A_plus_
Definition stdp_dopamine_synapse.h:161
volume_transmitter * volume_transmitter_
Definition stdp_dopamine_synapse.h:160
double b_
Definition stdp_dopamine_synapse.h:166
void get_status(Dictionary &d) const
Get all properties and put them into a dictionary.
Definition stdp_dopamine_synapse.cpp:60
long get_vt_node_id() const
Definition stdp_dopamine_synapse.h:172
double Wmin_
Definition stdp_dopamine_synapse.h:167
double A_minus_
Definition stdp_dopamine_synapse.h:162
void set_status(const Dictionary &d, ConnectorModel &cm)
Set properties from the values given in dictionary.
Definition stdp_dopamine_synapse.cpp:76
double tau_plus_
Definition stdp_dopamine_synapse.h:163
double tau_c_
Definition stdp_dopamine_synapse.h:164
double Wmax_
Definition stdp_dopamine_synapse.h:168
STDPDopaCommonProperties()
Default constructor.
Definition stdp_dopamine_synapse.cpp:45
Event for spike information.
Definition event.h:418
Definition stdp_dopamine_synapse.h:255
size_t handles_test_event(SpikeEvent &, size_t) override
Check if the node can handle a particular event and receptor type.
Definition stdp_dopamine_synapse.h:261
Definition stdp_dopamine_synapse.h:192
stdp_dopamine_synapse(const stdp_dopamine_synapse &)=default
Copy constructor from a property object.
double n_
Definition stdp_dopamine_synapse.h:320
void facilitate_(double kplus, const STDPDopaCommonProperties &cp)
Definition stdp_dopamine_synapse.h:503
void update_weight_(double c0, double n0, double minus_dt, const STDPDopaCommonProperties &cp)
Definition stdp_dopamine_synapse.h:423
void process_dopa_spikes_(const std::vector< spikecounter > &dopa_spikes, double t0, double t1, const STDPDopaCommonProperties &cp)
Definition stdp_dopamine_synapse.h:446
void trigger_update_weight(size_t t, const std::vector< spikecounter > &dopa_spikes, double t_trig, const STDPDopaCommonProperties &cp)
Definition stdp_dopamine_synapse.h:576
Connection< targetidentifierT > ConnectionBase
Definition stdp_dopamine_synapse.h:196
stdp_dopamine_synapse()
Default Constructor.
Definition stdp_dopamine_synapse.h:342
double t_lastspike_
Definition stdp_dopamine_synapse.h:331
void update_dopamine_(const std::vector< spikecounter > &dopa_spikes, const STDPDopaCommonProperties &cp)
Definition stdp_dopamine_synapse.h:413
void depress_(double kminus, const STDPDopaCommonProperties &cp)
Definition stdp_dopamine_synapse.h:510
static constexpr ConnectionModelProperties properties
Definition stdp_dopamine_synapse.h:198
double get_delay() const
Return the delay of the connection in ms.
Definition connection.h:172
void get_status(Dictionary &d) const
Get all properties of this connection and put them into a dictionary.
Definition stdp_dopamine_synapse.h:356
void check_connection(Node &s, Node &t, size_t receptor_type, const CommonPropertiesType &cp)
Definition stdp_dopamine_synapse.h:283
void check_synapse_params(const Dictionary &d) const
Checks to see if illegal parameters are given in syn_spec.
Definition stdp_dopamine_synapse.h:389
size_t dopa_spikes_idx_
Definition stdp_dopamine_synapse.h:325
void set_weight(double w)
Definition stdp_dopamine_synapse.h:297
double t_last_update_
Definition stdp_dopamine_synapse.h:329
void set_status(const Dictionary &d, ConnectorModel &cm)
Set properties of this connection from the values given in dictionary.
Definition stdp_dopamine_synapse.h:371
double Kplus_
Definition stdp_dopamine_synapse.h:318
bool send(Event &e, size_t t, const STDPDopaCommonProperties &cp)
Send an event to the receiver of this connection.
Definition stdp_dopamine_synapse.h:522
double weight_
Definition stdp_dopamine_synapse.h:317
double c_
Definition stdp_dopamine_synapse.h:319
STDPDopaCommonProperties CommonPropertiesType
Definition stdp_dopamine_synapse.h:195
stdp_dopamine_synapse & operator=(const stdp_dopamine_synapse &)=default
Definition volume_transmitter.h:114
const std::vector< spikecounter > & deliver_spikes()
Definition volume_transmitter.h:224
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
const std::string n("n")
const std::string Kplus("Kplus")
const std::string c("c")
const std::string weight("weight")
Namespace for the NEST simulation kernel.
Definition beta_normalization_factor.h:33
void register_stdp_dopamine_synapse(const std::string &name)
Class representing an stdp_dopamine_synapse with homogeneous parameters, i.e.
Definition stdp_dopamine_synapse.cpp:36
KernelManager & kernel()
Definition kernel_manager.h:311
ConnectionModelProperties
Definition connector_model.h:49
constexpr size_t invalid_port
Value for invalid connection port number.
Definition nest_types.h:141
double expm1(double x)
Definition numerics.h:44