23 #ifndef STDP_DOPA_CONNECTION_H
24 #define STDP_DOPA_CONNECTION_H
141 template<
typename target
identifierT>
217 throw BadProperty(
"No volume transmitter has been assigned to the dopamine synapse.");
256 template<
typename target
identifierT>
267 template<
typename target
identifierT>
270 weight_(rhs.weight_),
274 dopa_spikes_idx_(rhs.dopa_spikes_idx_),
275 t_last_update_(rhs.t_last_update_)
278 template<
typename target
identifierT>
283 ConnectionBase::get_status(d);
287 def<double_t>(
d,
"c", c_);
288 def<double_t>(
d,
"n", n_);
291 template<
typename target
identifierT>
295 ConnectionBase::set_status(d, cm);
298 updateValue<double_t>(
d,
"c", c_);
299 updateValue<double_t>(
d,
"n", n_);
302 template<
typename target
identifierT>
306 double_t minus_dt = dopa_spikes[dopa_spikes_idx_].spike_time_ - dopa_spikes[dopa_spikes_idx_+1].spike_time_;
308 n_ = n_ * std::exp( minus_dt / cp.
tau_n_ ) + dopa_spikes[dopa_spikes_idx_].multiplicity_ / cp.
tau_n_;
311 template<
typename target
identifierT>
318 if ( weight_ < cp.
Wmin_ )
320 if ( weight_ > cp.
Wmax_ )
324 template<
typename target
identifierT>
331 if ( ( dopa_spikes.size() > dopa_spikes_idx_+1 ) && ( dopa_spikes[dopa_spikes_idx_+1].spike_time_ <= t1 ) )
336 double_t n0 = n_ * std::exp( ( dopa_spikes[dopa_spikes_idx_].spike_time_ - t0 ) / cp.
tau_n_ );
337 update_weight_(c_, n0, t0 - dopa_spikes[dopa_spikes_idx_+1].spike_time_, cp);
338 update_dopamine_(dopa_spikes, cp);
342 while ( ( dopa_spikes.size() > dopa_spikes_idx_+1 ) && ( dopa_spikes[dopa_spikes_idx_+1].spike_time_ <= t1 ) )
346 cd = c_ * std::exp( ( t0 - dopa_spikes[dopa_spikes_idx_].spike_time_ ) / cp.
tau_c_ );
347 update_weight_(cd, n_, dopa_spikes[dopa_spikes_idx_].spike_time_ - dopa_spikes[dopa_spikes_idx_+1].spike_time_, cp);
348 update_dopamine_(dopa_spikes, cp);
353 cd = c_ * std::exp( ( t0 - dopa_spikes[dopa_spikes_idx_].spike_time_ ) / cp.
tau_c_ );
354 update_weight_(cd, n_, dopa_spikes[dopa_spikes_idx_].spike_time_ - t1, cp);
360 double_t n0 = n_ * std::exp( ( dopa_spikes[dopa_spikes_idx_].spike_time_ - t0 ) / cp.
tau_n_ );
361 update_weight_(c_, n0, t0 - t1, cp);
365 c_ = c_ * std::exp( ( t0 - t1 ) / cp.
tau_c_ );
368 template<
typename target
identifierT>
375 template<
typename target
identifierT>
388 template<
typename target
identifierT>
397 double_t dendritic_delay = get_delay();
405 std::deque<histentry>::iterator
start;
406 std::deque<histentry>::iterator finish;
407 target->
get_history(t_last_update_ - dendritic_delay, t_spike - dendritic_delay, &start, &finish);
412 while ( start != finish )
414 process_dopa_spikes_(dopa_spikes, t0, start->t_ + dendritic_delay, cp);
415 t0 = start->t_ + dendritic_delay;
416 minus_dt = t_last_update_ - t0;
417 if ( start->t_ < t_spike )
418 facilitate_(Kplus_ * std::exp( minus_dt / cp.
tau_plus_ ), cp);
423 process_dopa_spikes_(dopa_spikes, t0, t_spike, cp);
424 depress_(target->
get_K_value(t_spike - dendritic_delay), cp);
432 Kplus_ = Kplus_ * std::exp( ( t_last_update_ - t_spike ) / cp.
tau_plus_) + 1.0;
436 template<
typename target
identifierT>
445 double_t dendritic_delay = get_delay();
448 std::deque<histentry>::iterator
start;
449 std::deque<histentry>::iterator finish;
450 get_target(t)->get_history(t_last_update_ - dendritic_delay, t_trig - dendritic_delay, &start, &finish);
455 while ( start != finish )
457 process_dopa_spikes_(dopa_spikes, t0, start->t_ + dendritic_delay, cp);
458 t0 = start->t_ + dendritic_delay;
459 minus_dt = t_last_update_ - t0;
460 facilitate_(Kplus_ * std::exp( minus_dt / cp.
tau_plus_ ), cp);
466 process_dopa_spikes_(dopa_spikes, t0, t_trig, cp);
467 n_ = n_ * std::exp( ( dopa_spikes[dopa_spikes_idx_].spike_time_ - t_trig ) / cp.
tau_n_ );
468 Kplus_ = Kplus_ * std::exp( ( t_last_update_ - t_trig ) / cp.
tau_plus_);
470 t_last_update_ = t_trig;
471 dopa_spikes_idx_ = 0;
476 #endif // of #ifndef STDP_DOPA_CONNECTION_H
size_t index
Unsigned long type for enumerations.
Definition: nest.h:109
Connection< targetidentifierT > ConnectionBase
Definition: stdp_dopa_connection.h:148
void check_connection(Node &s, Node &t, rport receptor_type, double_t t_lastspike, const CommonPropertiesType &cp)
Definition: stdp_dopa_connection.h:214
void set_rport(rport p)
Set the receiver port number (r-port).
Definition: event.h:817
void set_receiver(Node &)
Change pointer to receiving Node.
Definition: event.h:708
const Name receptor_type("receptor_type")
Connection parameters.
Definition: nest_names.h:240
void set_status(const DictionaryDatum &d, ConnectorModel &cm)
Set properties from the values given in dictionary.
Definition: stdp_dopa_connection.cpp:69
index get_gid() const
Return global Network ID.
Definition: node.h:753
const Name d("d")
Specific to Izhikevich 2003.
Definition: nest_names.h:83
virtual double_t get_K_value(double_t t)
return the Kminus value at t (in ms).
Definition: node.cpp:273
double_t weight_
Definition: stdp_dopa_connection.h:239
long_t get_delay_steps() const
Return the delay of the connection in steps.
Definition: connection.h:126
void check_connection_(Node &dummy_target, Node &source, Node &target, rport receptor_type)
This function calls check_connection() on the sender to check if the receiver accepts the event type ...
Definition: connection.h:183
Node * get_node()
Definition: stdp_dopa_connection.cpp:92
const rport invalid_port_
Value for invalid connection port number.
Definition: nest.h:160
const Name weight("weight")
Connection parameters.
Definition: nest_names.h:344
Encapsulates information which is sent between Nodes.
Definition: event.h:73
double_t c_
Definition: stdp_dopa_connection.h:241
void process_dopa_spikes_(const vector< spikecounter > &dopa_spikes, double_t t0, double_t t1, const STDPDopaCommonProperties &cp)
Definition: stdp_dopa_connection.h:326
const vector< spikecounter > & deliver_spikes()
Definition: volume_transmitter.h:199
void set_weight(weight t)
Set weight of the event.
Definition: event.h:751
long_t rport
Connection port number to distinguish incoming connections, also called receiver port.
Definition: nest.h:147
double expm1(double x)
Supply expm1() function independent of system.
Definition: numerics.h:42
double_t A_minus_
Definition: stdp_dopa_connection.h:119
double_t Kplus_
Definition: stdp_dopa_connection.h:240
STDPDopaCommonProperties CommonPropertiesType
Definition: stdp_dopa_connection.h:147
void get_status(DictionaryDatum &d) const
Get all properties of this connection and put them into a dictionary.
Definition: stdp_dopa_connection.h:279
long_t get_vt_gid() const
Definition: stdp_dopa_connection.h:129
Node * get_target(thread t) const
Definition: connection.h:155
Class containing the common properties for all synapses of type dopamine connection.
Definition: stdp_dopa_connection.h:93
STDPDopaCommonProperties()
Default constructor.
Definition: stdp_dopa_connection.cpp:37
void update_weight_(double_t c0, double_t n0, double_t minus_dt, const STDPDopaCommonProperties &cp)
Definition: stdp_dopa_connection.h:313
STDPDopaConnection()
Default Constructor.
Definition: stdp_dopa_connection.h:257
double_t get_delay() const
Return the delay of the connection in ms.
Definition: connection.h:121
const Name w("w")
Specific to Brette & Gerstner 2005 (aeif_cond-*)
Definition: nest_names.h:343
double_t tau_n_
Definition: stdp_dopa_connection.h:122
void set_delay(delay)
Set the transmission delay of the event.
Definition: event.h:781
void update_dopamine_(const vector< spikecounter > &dopa_spikes, const STDPDopaCommonProperties &cp)
Definition: stdp_dopa_connection.h:304
double_t tau_plus_
Definition: stdp_dopa_connection.h:120
double_t Wmax_
Definition: stdp_dopa_connection.h:125
virtual void get_history(double_t t1, double_t t2, std::deque< histentry >::iterator *start, std::deque< histentry >::iterator *finish)
return the spike history for (t1,t2].
Definition: node.cpp:284
Time const & get_stamp() const
Return time stamp of the event.
Definition: event.h:757
const Name target("target")
Connection parameters.
Definition: nest_names.h:282
const Name start("start")
Device parameters.
Definition: nest_names.h:263
Base class for dummy nodes used in connection testing.
Definition: connection.h:64
volume transmitter class.
Definition: volume_transmitter.h:106
void get_status(DictionaryDatum &d) const
Get all properties and put them into a dictionary.
Definition: stdp_dopa_connection.cpp:50
volume_transmitter * vt_
Definition: stdp_dopa_connection.h:117
Class representing an STDPDopaConnection with homogeneous parameters, i.e.
Definition: stdp_dopa_connection.h:142
void send(Event &e, thread t, double_t, const STDPDopaCommonProperties &cp)
Send an event to the receiver of this connection.
Definition: stdp_dopa_connection.h:390
void trigger_update_weight(thread t, const vector< spikecounter > &dopa_spikes, double_t t_trig, const STDPDopaCommonProperties &cp)
Definition: stdp_dopa_connection.h:438
Exception to be thrown if a status parameter is incomplete or inconsistent.
Definition: exceptions.h:420
virtual void register_stdp_connection(double_t)
Register a STDP connection.
Definition: node.cpp:178
long_t port
Connection port number to distinguis outgoing connections.
Definition: nest.h:155
double double_t
Double precision floating point numbers.
Definition: nest.h:93
void set_status(const DictionaryDatum &d, ConnectorModel &cm)
Set properties of this connection from the values given in dictionary.
Definition: stdp_dopa_connection.h:292
void set_weight(double_t w)
Definition: stdp_dopa_connection.h:225
rport get_rport() const
Definition: connection.h:156
virtual port handles_test_event(SpikeEvent &, rport receptor_type)
Check if the node can handle a particular event and receptor type.
Definition: node.cpp:203
double_t get_ms() const
Definition: nest_time.h:389
index dopa_spikes_idx_
Definition: stdp_dopa_connection.h:246
Class containing the common properties for all connections of a certain type.
Definition: common_synapse_properties.h:44
double_t b_
Definition: stdp_dopa_connection.h:123
void facilitate_(double_t kplus, const STDPDopaCommonProperties &cp)
Definition: stdp_dopa_connection.h:370
Part of definition of volume_transmitter to record and manage spike times and multiplicity of neurons...
Base class for representing connections.
Definition: connection.h:85
double_t Wmin_
Definition: stdp_dopa_connection.h:124
double_t A_plus_
Definition: stdp_dopa_connection.h:118
Event for spike information.
Definition: event.h:320
Base class for all NEST network objects.
Definition: node.h:96
void depress_(double_t kminus, const STDPDopaCommonProperties &cp)
Definition: stdp_dopa_connection.h:377
double_t tau_c_
Definition: stdp_dopa_connection.h:121
Definition: connector_model.h:38
int_t thread
Thread index type.
Definition: nest.h:133
double_t t_last_update_
Definition: stdp_dopa_connection.h:249
long long_t
Integer number with at least 32 bit.
Definition: nest.h:96
const double e
Definition: numerics.cpp:62
port handles_test_event(SpikeEvent &, rport)
Check if the node can handle a particular event and receptor type.
Definition: stdp_dopa_connection.h:195
double_t n_
Definition: stdp_dopa_connection.h:242
const Name t_spike("t_spike")
Time of last spike.
Definition: nest_names.h:281
Definition: stdp_dopa_connection.h:189