NEST  2.6.0,not_revisioned_source_dir@0
connector_base.h
Go to the documentation of this file.
1 /*
2  * connector_base.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 CONNECTOR_BASE_H
24 #define CONNECTOR_BASE_H
25 
26 #include <vector>
27 
28 #include "node.h"
29 #include "event.h"
30 #include "network.h"
31 #include "dictutils.h"
32 #include "spikecounter.h"
33 #include "nest_names.h"
34 #include "connector_model.h"
35 #include "nest_datums.h"
36 #ifdef _OPENMP
37 #include <omp.h>
38 #endif
39 
40 
41 #ifdef USE_PMA
42 
43 #ifdef IS_K
44 
46 
47 #else
48 
50 
51 #ifdef _OPENMP
52 #pragma omp threadprivate(poormansallocpool)
53 #endif
54 
55 #endif
56 
57 #endif
58 
59 template<typename Tnew, typename Told, typename C>
60 inline
61 Tnew* suicide_and_resurrect(Told* connector, C connection)
62 {
63 #ifdef USE_PMA
64 #ifdef IS_K
65  Tnew* p = new (poormansallocpool[omp_get_thread_num()].alloc(sizeof(Tnew))) Tnew(*connector, connection);
66 #else
67  Tnew* p = new (poormansallocpool.alloc(sizeof(Tnew))) Tnew(*connector, connection);
68 #endif
69  connector->~Told();
70 #else
71  Tnew* p = new Tnew(*connector, connection);
72  delete connector; // suicide
73 #endif
74  return p;
75 }
76 
77 
78 // when to truncate the recursive instantiation
79 #define K_cutoff 3
80 
81 namespace nest
82 {
83 
84  // base clase to provide interface to decide
85  // - homogeneous connector (containing =1 synapse type)
86  // -- which synapse type stored (syn_id)
87  // - heterogeneous connector (containing >1 synapse type)
89  {
90 
91  public:
92 
93  ConnectorBase();
94 
95  virtual void get_synapse_status(synindex syn_id, DictionaryDatum & d, port p) const = 0;
96  virtual void set_synapse_status(synindex syn_id, ConnectorModel & cm, const DictionaryDatum & d, port p) = 0;
97 
98  virtual size_t get_num_connections() = 0;
99  virtual size_t get_num_connections(synindex syn_id) = 0;
100 
101  virtual void get_connections(size_t source_gid, size_t thrd, synindex synapse_id, ArrayDatum &conns) const =0;
102 
103  virtual void get_connections(size_t source_gid, size_t target_gid, size_t thrd, size_t synapse_id, ArrayDatum &conns) const = 0;
104 
105  virtual void send(Event & e, thread t, const std::vector<ConnectorModel*> & cm) = 0;
106 
107  virtual void trigger_update_weight(long_t vt_gid, thread t, const vector<spikecounter>& dopa_spikes,
108  double_t t_trig, const std::vector<ConnectorModel*> & cm) = 0;
109 
110  // returns id of synapse type
111  virtual synindex get_syn_id() const = 0;
112 
113  // returns true, if all synapse models are of same type
114  virtual bool homogeneous_model() = 0;
115 
116  // destructor needed to delete connections
117  virtual ~ConnectorBase() { };
118 
120  void set_t_lastspike(const double_t t_lastspike) { t_lastspike_ = t_lastspike; }
121 
122  private:
123 
125 
126  };
127 
128  // vector with 1 vtable overhead
129  // vector like base class to abstract away the template argument K
130  // provides interface like vector i.p. (suicidal) push_back
131  template < typename ConnectionT >
132  class vector_like : public ConnectorBase
133  {
134 
135  public:
136 
137  virtual ConnectorBase & push_back(const ConnectionT & c) = 0;
138 
139  };
140 
141  // homogeneous connector containing K entries
142  template < size_t K, typename ConnectionT >
143  class Connector : public vector_like < ConnectionT > // unfortunately, we need the virtual base class
144  {
145  ConnectionT C_[K];
146 
147  public:
148 
149  Connector(const Connector<K-1, ConnectionT> & Cm1, const ConnectionT & c) //: syn_id_(Cm1.get_syn_id())
150  {
151  for (size_t i=0; i<K-1; i++)
152  C_[i] = Cm1.get_C()[i];
153  C_[K-1] = c;
154  }
155 
157  {}
158 
160  {
161  if ( syn_id == C_[0].get_syn_id() )
162  {
163  assert (p >= 0 && static_cast<size_t>(p) < K);
164  C_[p].get_status(d);
165  }
166  }
167 
169  {
170  if ( syn_id == C_[0].get_syn_id() )
171  {
172  assert (p >= 0 && static_cast<size_t>(p) < K);
173  C_[p].set_status(d, static_cast< GenericConnectorModel<ConnectionT> & > (cm));
174  }
175  }
176 
178  {
179  return K;
180  }
181 
183  {
184  if (syn_id == get_syn_id())
185  return K;
186  else
187  return 0;
188  }
189 
190  Connector<K+1, ConnectionT> & push_back(const ConnectionT & c)
191  {
192  return *suicide_and_resurrect< Connector<K+1, ConnectionT> >(this, c);
193  }
194 
195  void get_connections(size_t source_gid, size_t thrd, synindex synapse_id, ArrayDatum &conns) const
196  {
197  for ( size_t i=0; i<K; i++ )
198  if(get_syn_id()==synapse_id)
199  conns.push_back(ConnectionDatum(ConnectionID(source_gid, C_[i].get_target(thrd)->get_gid() , thrd, synapse_id, i)));
200  }
201 
202  void get_connections(size_t source_gid, size_t target_gid, size_t thrd, size_t synapse_id, ArrayDatum &conns) const
203  {
204  for ( size_t i=0; i<K; i++ )
205  if(get_syn_id()==synapse_id)
206  if (C_[i].get_target(thrd)->get_gid() == target_gid)
207  conns.push_back(ConnectionDatum(ConnectionID(source_gid, target_gid, thrd, synapse_id, i)));
208  }
209 
210  void send(Event &e, thread t, const std::vector<ConnectorModel*> & cm)
211  {
212  synindex syn_id = C_[0].get_syn_id();
213  for(size_t i=0; i<K; i++)
214  {
215  e.set_port(i);
216  C_[i].send( e, t, ConnectorBase::get_t_lastspike(), static_cast< GenericConnectorModel<ConnectionT> * > ( cm[syn_id] )->get_common_properties() );
217  }
219  }
220 
221  void trigger_update_weight(long_t vt_gid, thread t, const vector<spikecounter>& dopa_spikes, double_t t_trig, const std::vector<ConnectorModel*> & cm)
222  {
223  synindex syn_id = C_[0].get_syn_id();
224  for(size_t i=0; i<K; i++)
225  if(static_cast< GenericConnectorModel<ConnectionT> * > ( cm[syn_id] )->get_common_properties().get_vt_gid() == vt_gid)
226  C_[i].trigger_update_weight(t, dopa_spikes, t_trig, static_cast< GenericConnectorModel<ConnectionT> * > ( cm[syn_id] )->get_common_properties());
227  }
228 
230  {
231  //return syn_id_;
232  return C_[0].get_syn_id();
233  }
234 
235  const ConnectionT* get_C() const { return C_; }
236 
237  bool homogeneous_model() { return true; }
238 
239  };
240 
241  // homogeneous connector containing 1 entry (specialization to define constructor)
242  template<typename ConnectionT>
243  class Connector<1, ConnectionT> : public vector_like<ConnectionT>
244  {
245  ConnectionT C_[1];
246 
247  public:
248 
249  //Connector(const ConnectionT &c, synindex syn_id) : syn_id_(syn_id)
250  Connector(const ConnectionT &c)
251  {
252  C_[0] = c;
253  };
254 
256  {}
257 
259  {
260  if ( syn_id == C_[0].get_syn_id() )
261  {
262  assert (static_cast<size_t>(p) == 0);
263  C_[0].get_status(d);
264  }
265  }
266 
268  {
269  if ( syn_id == C_[0].get_syn_id() )
270  {
271  assert (static_cast<size_t>(p) == 0 );
272  C_[0].set_status(d, static_cast< GenericConnectorModel<ConnectionT> & > (cm));
273  }
274  }
275 
277  {
278  return 1;
279  }
280 
282  {
283  if (syn_id == get_syn_id())
284  return 1;
285  else
286  return 0;
287  }
288 
289  Connector<2, ConnectionT> & push_back(const ConnectionT & c)
290  {
291  return *suicide_and_resurrect< Connector<2, ConnectionT> >(this, c);
292  }
293 
294  void get_connections(size_t source_gid, size_t thrd, synindex synapse_id, ArrayDatum &conns) const
295  {
296  if(get_syn_id()==synapse_id)
297  {
298  conns.push_back(ConnectionDatum(ConnectionID(source_gid, C_[0].get_target(thrd)->get_gid(), thrd, synapse_id, 0)));
299  }
300  }
301 
302  void get_connections(size_t source_gid, size_t target_gid, size_t thrd, size_t synapse_id, ArrayDatum &conns) const
303  {
304  if(get_syn_id()==synapse_id)
305  {
306  if (C_[0].get_target(thrd)->get_gid() == target_gid)
307  conns.push_back(ConnectionDatum(ConnectionID(source_gid, target_gid, thrd, synapse_id, 0)));
308  }
309  }
310 
311  void send(Event & e, thread t, const std::vector<ConnectorModel*> & cm)
312  {
313  e.set_port(0);
314  C_[0].send( e, t, ConnectorBase::get_t_lastspike(), static_cast< GenericConnectorModel<ConnectionT> * > ( cm[ C_[0].get_syn_id() ] )->get_common_properties() );
316  }
317 
318  void trigger_update_weight(long_t vt_gid, thread t, const vector<spikecounter>& dopa_spikes, double_t t_trig, const std::vector<ConnectorModel*> & cm)
319  {
320  synindex syn_id = C_[0].get_syn_id();
321  if(static_cast< GenericConnectorModel<ConnectionT> * > ( cm[syn_id] )->get_common_properties().get_vt_gid() == vt_gid)
322  C_[0].trigger_update_weight(t, dopa_spikes, t_trig, static_cast< GenericConnectorModel<ConnectionT> * > ( cm[syn_id] )->get_common_properties());
323  }
324 
326  {
327  return C_[0].get_syn_id();
328  }
329 
330  const ConnectionT* get_C() const { return C_; }
331 
332  bool homogeneous_model() { return true; }
333 
334  };
335 
336 
337  // homogeneous connector containing >=K_cutoff entries
338  // specialization to define recursion termination for push_back
339  // internally use a normal vector to store elements
340  template < typename ConnectionT >
341  class Connector<K_cutoff, ConnectionT> : public vector_like<ConnectionT>
342  {
343  std::vector<ConnectionT> C_;
344 
345  public:
346 
347  Connector(const Connector<K_cutoff-1, ConnectionT> &C, const ConnectionT &c) : C_(K_cutoff)//, syn_id_(C.get_syn_id())
348  {
349  for (size_t i=0; i<K_cutoff-1; i++)
350  C_[i] = C.get_C()[i];
351  C_[K_cutoff-1] = c;
352  };
353 
355  {}
356 
358  {
359  if ( syn_id == C_[0].get_syn_id() )
360  {
361  assert (p >= 0 && static_cast<size_t>(p) < C_.size());
362  C_[p].get_status(d);
363  }
364  }
365 
367  {
368  if ( syn_id == C_[0].get_syn_id() )
369  {
370  assert (p >= 0 && static_cast<size_t>(p) < C_.size());
371  C_[p].set_status(d, static_cast< GenericConnectorModel<ConnectionT> & > (cm));
372  }
373  }
374 
376  {
377  return C_.size();
378  }
379 
381  {
382  if (syn_id == get_syn_id())
383  return C_.size();
384  else
385  return 0;
386  }
387 
389  {
390  C_.push_back(c);
391  return *this;
392  }
393 
394  void get_connections(size_t source_gid, size_t thrd, synindex synapse_id, ArrayDatum &conns) const
395  {
396  for ( size_t i=0; i<C_.size(); i++ )
397  if(get_syn_id()==synapse_id)
398  conns.push_back(ConnectionDatum(ConnectionID(source_gid, C_[i].get_target(thrd)->get_gid(), thrd, synapse_id, i)));
399  }
400 
401  void get_connections(size_t source_gid, size_t target_gid, size_t thrd, size_t synapse_id, ArrayDatum &conns) const
402  {
403  if(get_syn_id()==synapse_id)
404  for ( size_t i=0; i<C_.size(); i++ )
405  if (C_[i].get_target(thrd)->get_gid() == target_gid)
406  conns.push_back(ConnectionDatum(ConnectionID(source_gid, target_gid, thrd, synapse_id, i)));
407  }
408 
409  void send(Event &e, thread t, const std::vector<ConnectorModel*> & cm)
410  {
411  synindex syn_id = C_[0].get_syn_id();
412 
413  for(size_t i=0; i<C_.size(); i++)
414  {
415 
416  e.set_port(i);
417  C_[i].send( e, t, ConnectorBase::get_t_lastspike(), static_cast< GenericConnectorModel<ConnectionT> * > ( cm[syn_id] )->get_common_properties() );
418  }
419 
421  }
422 
423  void trigger_update_weight(long_t vt_gid, thread t, const vector<spikecounter>& dopa_spikes, double_t t_trig, const std::vector<ConnectorModel*> & cm)
424  {
425  synindex syn_id = C_[0].get_syn_id();
426  for(size_t i=0; i<C_.size(); i++)
427  if(static_cast< GenericConnectorModel<ConnectionT> * > ( cm[syn_id] )->get_common_properties().get_vt_gid() == vt_gid)
428  C_[i].trigger_update_weight(t, dopa_spikes, t_trig, static_cast< GenericConnectorModel<ConnectionT> * > ( cm[syn_id] )->get_common_properties());
429  }
430 
432  {
433  return C_[0].get_syn_id();
434  }
435 
436  bool homogeneous_model() { return true; }
437 
438  };
439 
440  // heterogeneous connector containing different types of synapses
441  // each entry is of type connectorbase, so in principle the structure could be
442  // nested indefinitely
443  // the logic in add_connection, however, assumes that these entries are
444  // homogeneous connectors
445  class HetConnector : public vector<ConnectorBase*>, public ConnectorBase
446  {
447 
448  public:
449 
450  virtual ~HetConnector()
451  {
452  for (size_t i=0; i<size(); i++)
453 #ifdef USE_PMA
454  at(i)->~ConnectorBase();
455 #else
456  delete at(i);
457 #endif
458  }
459 
461  {
462  for (size_t i=0; i<size(); i++)
463  at(i)->get_synapse_status(syn_id, d, p);
464  }
465 
467  {
468  for (size_t i=0; i<size(); i++)
469  at(i)->set_synapse_status(syn_id, cm, d, p);
470  }
471 
473  {
474  size_t n=0;
475  for ( size_t i=0; i<size(); i++)
476  {
477  n += at(i)->get_num_connections();
478  }
479  return n;
480  }
481 
483  {
484  for (size_t i=0; i<size(); i++)
485  if (syn_id == at(i)->get_syn_id())
486  return at(i)->get_num_connections();
487  return 0;
488  }
489 
490  void get_connections(size_t source_gid, size_t thrd, synindex synapse_id, ArrayDatum &conns) const
491  {
492  for ( size_t i=0; i<size(); i++ )
493  at(i)->get_connections(source_gid,thrd,synapse_id,conns);
494  }
495 
496  void get_connections(size_t source_gid, size_t target_gid, size_t thrd, size_t synapse_id, ArrayDatum &conns) const
497  {
498  for ( size_t i=0; i<size(); i++ )
499  at(i)->get_connections(source_gid,target_gid,thrd,synapse_id,conns);
500  }
501 
502  void send(Event &e, thread t, const std::vector<ConnectorModel*> & cm)
503  {
504  // for all delegate send to homogeneous connectors
505  for (size_t i=0; i<size(); i++)
506  at(i)->send(e, t, cm);
507  }
508 
509  void trigger_update_weight(long_t vt_gid, thread t, const vector<spikecounter>& dopa_spikes, double_t t_trig, const std::vector<ConnectorModel*> & cm)
510  {
511  for (size_t i=0; i<size(); i++)
512  at(i)->trigger_update_weight(vt_gid, t, dopa_spikes, t_trig, cm);
513  }
514 
515  // returns id of synapse type
517 
518  // returns true, if all synapse models are of same type
519  bool homogeneous_model() { return false; }
520 
521  };
522 
523 } // of namespace nest
524 
525 #endif
bool homogeneous_model()
Definition: connector_base.h:237
void set_synapse_status(synindex syn_id, ConnectorModel &cm, const DictionaryDatum &d, port p)
Definition: connector_base.h:267
double_t t_lastspike_
Definition: connector_base.h:124
Connector< 2, ConnectionT > & push_back(const ConnectionT &c)
Definition: connector_base.h:289
PaddedPMA poormansallocpool[]
Definition: connector_base.h:49
virtual ~ConnectorBase()
Definition: connector_base.h:117
synindex get_syn_id() const
Definition: connector_base.h:516
const Name d("d")
Specific to Izhikevich 2003.
Definition: nest_names.h:83
synindex get_syn_id() const
Definition: connector_base.h:325
~Connector()
Definition: connector_base.h:156
size_t get_num_connections()
Definition: connector_base.h:276
Declarations for base class Node.
void get_connections(size_t source_gid, size_t thrd, synindex synapse_id, ArrayDatum &conns) const
Definition: connector_base.h:490
synindex get_syn_id() const
Definition: connector_base.h:229
Definition: connector_base.h:88
void set_synapse_status(synindex syn_id, ConnectorModel &cm, const DictionaryDatum &d, port p)
Definition: connector_base.h:366
Encapsulates information which is sent between Nodes.
Definition: event.h:73
void get_connections(size_t source_gid, size_t target_gid, size_t thrd, size_t synapse_id, ArrayDatum &conns) const
Definition: connector_base.h:401
~Connector()
Definition: connector_base.h:255
size_t get_num_connections()
Definition: connector_base.h:472
double_t get_t_lastspike() const
Definition: connector_base.h:119
Definition: connection_id.h:32
const ConnectionT * get_C() const
Definition: connector_base.h:235
The Fujitsu compiler on K cannot handle OpenMP thread-private properly.
Definition: allocator.h:270
const synindex invalid_synindex
Definition: nest.h:116
const ConnectionT * get_C() const
Definition: connector_base.h:330
virtual void get_synapse_status(synindex syn_id, DictionaryDatum &d, port p) const =0
void push_back(const Token &t)
Definition: tokenarray.h:236
void send(Event &e, thread t, const std::vector< ConnectorModel * > &cm)
Definition: connector_base.h:210
bool homogeneous_model()
Definition: connector_base.h:436
void send(Event &e, thread t, const std::vector< ConnectorModel * > &cm)
Definition: connector_base.h:409
void trigger_update_weight(long_t vt_gid, thread t, const vector< spikecounter > &dopa_spikes, double_t t_trig, const std::vector< ConnectorModel * > &cm)
Definition: connector_base.h:509
void trigger_update_weight(long_t vt_gid, thread t, const vector< spikecounter > &dopa_spikes, double_t t_trig, const std::vector< ConnectorModel * > &cm)
Definition: connector_base.h:423
ConnectionT::CommonPropertiesType const & get_common_properties() const
Definition: connector_model.h:145
void get_synapse_status(synindex syn_id, DictionaryDatum &d, port p) const
Definition: connector_base.h:159
assert(pNet!=0)
void get_synapse_status(synindex syn_id, DictionaryDatum &d, port p) const
Definition: connector_base.h:258
void get_connections(size_t source_gid, size_t thrd, synindex synapse_id, ArrayDatum &conns) const
Definition: connector_base.h:394
void get_synapse_status(synindex syn_id, DictionaryDatum &d, port p) const
Definition: connector_base.h:357
bool homogeneous_model()
Definition: connector_base.h:519
Definition: connector_base.h:341
ConnectorBase()
Definition: connector_base.cpp:29
void set_port(port p)
Set the port number.
Definition: event.h:811
Time const & get_stamp() const
Return time stamp of the event.
Definition: event.h:757
Definition: connector_base.h:445
Declarations for class Network.
void get_connections(size_t source_gid, size_t target_gid, size_t thrd, size_t synapse_id, ArrayDatum &conns) const
Definition: connector_base.h:496
void set_t_lastspike(const double_t t_lastspike)
Definition: connector_base.h:120
void send(Event &e, thread t, const std::vector< ConnectorModel * > &cm)
Definition: connector_base.h:311
~Connector()
Definition: connector_base.h:354
std::vector< ConnectionT > C_
Definition: connector_base.h:343
size_t get_num_connections(synindex syn_id)
Definition: connector_base.h:482
virtual size_t get_num_connections()=0
virtual void get_connections(size_t source_gid, size_t thrd, synindex synapse_id, ArrayDatum &conns) const =0
void * alloc(size_t obj_size)
Definition: allocator.cpp:174
bool homogeneous_model()
Definition: connector_base.h:332
Definition: connector_base.h:143
long_t port
Connection port number to distinguis outgoing connections.
Definition: nest.h:155
Connector< K_cutoff, ConnectionT > & push_back(const ConnectionT &c)
Definition: connector_base.h:388
virtual void set_synapse_status(synindex syn_id, ConnectorModel &cm, const DictionaryDatum &d, port p)=0
double double_t
Double precision floating point numbers.
Definition: nest.h:93
virtual void trigger_update_weight(long_t vt_gid, thread t, const vector< spikecounter > &dopa_spikes, double_t t_trig, const std::vector< ConnectorModel * > &cm)=0
double_t get_ms() const
Definition: nest_time.h:389
The poor man's allocator is a simple pool-based allocator, used to allocate storage for connections i...
Definition: allocator.h:201
unsigned char synindex
Unsigned char type for enumerations of synapse types.
Definition: nest.h:115
Tnew * suicide_and_resurrect(Told *connector, C connection)
Definition: connector_base.h:61
void set_synapse_status(synindex syn_id, ConnectorModel &cm, const DictionaryDatum &d, port p)
Definition: connector_base.h:466
void get_connections(size_t source_gid, size_t thrd, synindex synapse_id, ArrayDatum &conns) const
Definition: connector_base.h:294
Connector(const ConnectionT &c)
Definition: connector_base.h:250
const Name n("n")
Number of synaptic release sites (int >=0) (Tsodyks2_connection)
Definition: nest_names.h:202
void set_synapse_status(synindex syn_id, ConnectorModel &cm, const DictionaryDatum &d, port p)
Definition: connector_base.h:168
size_t get_num_connections(synindex syn_id)
Definition: connector_base.h:380
Part of definition of volume_transmitter to record and manage spike times and multiplicity of neurons...
size_t get_num_connections()
Definition: connector_base.h:177
void get_synapse_status(synindex syn_id, DictionaryDatum &d, port p) const
Definition: connector_base.h:460
void get_connections(size_t source_gid, size_t target_gid, size_t thrd, size_t synapse_id, ArrayDatum &conns) const
Definition: connector_base.h:202
size_t get_num_connections(synindex syn_id)
Definition: connector_base.h:281
virtual ConnectorBase & push_back(const ConnectionT &c)=0
Connector(const Connector< K-1, ConnectionT > &Cm1, const ConnectionT &c)
Definition: connector_base.h:149
synindex get_syn_id() const
Definition: connector_base.h:431
size_t get_num_connections(synindex syn_id)
Definition: connector_base.h:182
void trigger_update_weight(long_t vt_gid, thread t, const vector< spikecounter > &dopa_spikes, double_t t_trig, const std::vector< ConnectorModel * > &cm)
Definition: connector_base.h:318
ConnectionT C_[K]
Definition: connector_base.h:145
void get_connections(size_t source_gid, size_t thrd, synindex synapse_id, ArrayDatum &conns) const
Definition: connector_base.h:195
AggregateDatum< nest::ConnectionID,&nest::NestModule::ConnectionType > ConnectionDatum
SLI Datum types related to the NEST kernel.
Definition: nest_datums.h:36
Connector(const Connector< K_cutoff-1, ConnectionT > &C, const ConnectionT &c)
Definition: connector_base.h:347
Connector< K+1, ConnectionT > & push_back(const ConnectionT &c)
Definition: connector_base.h:190
virtual bool homogeneous_model()=0
size_t get_num_connections()
Definition: connector_base.h:375
const Name p("p")
current release probability (Tsodyks2_connection)
Definition: nest_names.h:218
const Name c("c")
Specific to Izhikevich 2003.
Definition: nest_names.h:62
Definition: connector_model.h:38
void get_connections(size_t source_gid, size_t target_gid, size_t thrd, size_t synapse_id, ArrayDatum &conns) const
Definition: connector_base.h:302
int_t thread
Thread index type.
Definition: nest.h:133
long long_t
Integer number with at least 32 bit.
Definition: nest.h:96
Definition: connector_base.h:132
Definition: connector_model.h:113
const double e
Definition: numerics.cpp:62
virtual ~HetConnector()
Definition: connector_base.h:450
virtual synindex get_syn_id() const =0
void trigger_update_weight(long_t vt_gid, thread t, const vector< spikecounter > &dopa_spikes, double_t t_trig, const std::vector< ConnectorModel * > &cm)
Definition: connector_base.h:221
void send(Event &e, thread t, const std::vector< ConnectorModel * > &cm)
Definition: connector_base.h:502
virtual void send(Event &e, thread t, const std::vector< ConnectorModel * > &cm)=0