23#ifndef GIF_COND_EXP_MULTISYNAPSE_H
24#define GIF_COND_EXP_MULTISYNAPSE_H
31#include <gsl/gsl_errno.h>
32#include <gsl/gsl_matrix.h>
33#include <gsl/gsl_odeiv.h>
47extern "C" int gif_cond_exp_multisynapse_dynamics(
double,
const double*,
double*,
void* );
216void register_gif_cond_exp_multisynapse(
const std::string& name );
218class gif_cond_exp_multisynapse :
public ArchivingNode
222 gif_cond_exp_multisynapse();
223 gif_cond_exp_multisynapse(
const gif_cond_exp_multisynapse& );
224 ~gif_cond_exp_multisynapse()
override;
232 using Node::handles_test_event;
234 size_t send_test_event( Node&,
size_t, synindex,
bool )
override;
236 void handle( SpikeEvent& )
override;
237 void handle( CurrentEvent& )
override;
238 void handle( DataLoggingRequest& )
override;
240 size_t handles_test_event( SpikeEvent&,
size_t )
override;
241 size_t handles_test_event( CurrentEvent&,
size_t )
override;
242 size_t handles_test_event( DataLoggingRequest&,
size_t )
override;
245 void get_status(
Dictionary& )
const override;
246 void set_status(
const Dictionary& )
override;
249 void init_buffers_()
override;
250 void pre_run_hook()
override;
252 void update( Time
const&,
const long,
const long )
override;
255 friend int gif_cond_exp_multisynapse_dynamics(
double,
const double*,
double*,
void* );
258 friend class RecordablesMap< gif_cond_exp_multisynapse >;
259 friend class UniversalDataLogger< gif_cond_exp_multisynapse >;
285 std::vector< double > tau_stc_;
288 std::vector< double > q_stc_;
291 std::vector< double > tau_sfa_;
294 std::vector< double > q_sfa_;
297 std::vector< double > tau_syn_;
299 std::vector< double > E_rev_;
305 bool has_connections_;
318 return E_rev_.size();
337 static const size_t NUMBER_OF_FIXED_STATES_ELEMENTS = 1;
338 static const size_t NUM_STATE_ELEMENTS_PER_RECEPTOR = 1;
340 std::vector< double > y_;
346 std::vector< double > sfa_elems_;
347 std::vector< double > stc_elems_;
352 State_(
const Parameters_& );
354 void get(
Dictionary&,
const Parameters_& )
const;
355 void set(
const Dictionary&,
const Parameters_&, Node* );
366 Buffers_( gif_cond_exp_multisynapse& );
367 Buffers_(
const Buffers_&, gif_cond_exp_multisynapse& );
370 std::vector< RingBuffer > spikes_;
371 RingBuffer currents_;
374 UniversalDataLogger< gif_cond_exp_multisynapse > logger_;
378 gsl_odeiv_control* c_;
379 gsl_odeiv_evolve* e_;
380 gsl_odeiv_system sys_;
386 double IntegrationStep_;
396 std::vector< double > P_sfa_;
397 std::vector< double > P_stc_;
400 unsigned int RefractoryCounts_;
406 template < State_::StateVecElems elem >
410 return S_.y_[ elem ];
442 static RecordablesMap< gif_cond_exp_multisynapse > recordablesMap_;
446gif_cond_exp_multisynapse::send_test_event( Node& target,
size_t receptor_type,
synindex,
bool )
449 e.set_sender( *
this );
451 return target.handles_test_event( e, receptor_type );
455gif_cond_exp_multisynapse::handles_test_event( SpikeEvent&,
size_t receptor_type )
457 if ( receptor_type <= 0 or receptor_type > P_.n_receptors() )
459 throw IncompatibleReceptorType( receptor_type, get_name(),
"SpikeEvent" );
462 P_.has_connections_ =
true;
467gif_cond_exp_multisynapse::handles_test_event( CurrentEvent&,
size_t receptor_type )
469 if ( receptor_type != 0 )
471 throw UnknownReceptorType( receptor_type, get_name() );
477gif_cond_exp_multisynapse::handles_test_event( DataLoggingRequest& dlr,
size_t receptor_type )
479 if ( receptor_type != 0 )
481 throw UnknownReceptorType( receptor_type, get_name() );
483 return B_.logger_.connect_logging_device( dlr, recordablesMap_ );
487gif_cond_exp_multisynapse::get_status(
Dictionary& d )
const
496gif_cond_exp_multisynapse::set_status(
const Dictionary& d )
498 Parameters_ ptmp = P_;
501 stmp.set( d, ptmp,
this );
Dictionary class for interface to Python and C++ API.
Definition dictionary.h:213
void get_status(Dictionary &d) const override
Export properties of the node by setting entries in the status dictionary.
Definition archiving_node.cpp:220
void set_status(const Dictionary &d) override
Change properties of the node according to the entries in the dictionary.
Definition archiving_node.cpp:236
const std::string recordables("recordables")
const std::string gsl_error_tol("gsl_error_tol")
const std::string receptor_type("receptor_type")
const std::string n_receptors("n_receptors")
const std::string target("target")
Namespace for the NEST simulation kernel.
Definition beta_normalization_factor.h:33
BaseRandomGenerator * RngPtr
Definition random_generators.h:50
size_t synindex
For enumerations of synapse types.
Definition nest_types.h:115
const double e
Definition numerics.cpp:32