23#ifndef PP_COND_EXP_MC_URBANCZIK_H
24#define PP_COND_EXP_MC_URBANCZIK_H
35#include <gsl/gsl_errno.h>
36#include <gsl/gsl_matrix.h>
37#include <gsl/gsl_odeiv.h>
60extern "C" int pp_cond_exp_mc_urbanczik_dynamics(
double,
const double*,
double*,
void* );
73class pp_cond_exp_mc_urbanczik_parameters
75 friend class pp_cond_exp_mc_urbanczik;
76 friend class UrbanczikArchivingNode< pp_cond_exp_mc_urbanczik_parameters >;
91 double phi(
double u )
const;
92 double h(
double u )
const;
96 double g_conn[ NCOMP ];
247void register_pp_cond_exp_mc_urbanczik(
const std::string& name );
249class pp_cond_exp_mc_urbanczik :
public UrbanczikArchivingNode< pp_cond_exp_mc_urbanczik_parameters >
255 pp_cond_exp_mc_urbanczik();
256 pp_cond_exp_mc_urbanczik(
const pp_cond_exp_mc_urbanczik& );
257 ~pp_cond_exp_mc_urbanczik()
override;
265 using Node::handles_test_event;
267 size_t send_test_event( Node&,
size_t, synindex,
bool )
override;
269 void handle( SpikeEvent& )
override;
270 void handle( CurrentEvent& )
override;
271 void handle( DataLoggingRequest& )
override;
273 size_t handles_test_event( SpikeEvent&,
size_t )
override;
274 size_t handles_test_event( CurrentEvent&,
size_t )
override;
275 size_t handles_test_event( DataLoggingRequest&,
size_t )
override;
277 void get_status(
Dictionary& )
const override;
278 void set_status(
const Dictionary& )
override;
281 void init_buffers_()
override;
282 void pre_run_hook()
override;
283 void update( Time
const&,
const long,
const long )
override;
300 static const size_t MIN_SPIKE_RECEPTOR = 1;
305 enum SpikeSynapseTypes
307 SOMA_EXC = MIN_SPIKE_RECEPTOR,
314 static const size_t NUM_SPIKE_RECEPTORS = SUP_SPIKE_RECEPTOR - MIN_SPIKE_RECEPTOR;
321 static const size_t MIN_CURR_RECEPTOR = SUP_SPIKE_RECEPTOR;
326 enum CurrentSynapseTypes
328 I_SOMA = MIN_CURR_RECEPTOR,
333 static const size_t NUM_CURR_RECEPTORS = SUP_CURR_RECEPTOR - MIN_CURR_RECEPTOR;
337 friend int pp_cond_exp_mc_urbanczik_dynamics(
double,
const double*,
double*,
void* );
339 friend class RecordablesMap< pp_cond_exp_mc_urbanczik >;
340 friend class UniversalDataLogger< pp_cond_exp_mc_urbanczik >;
366 double E_ex[ NCOMP ];
367 double E_in[ NCOMP ];
370 pp_cond_exp_mc_urbanczik_parameters urbanczik_params;
376 Parameters_(
const Parameters_& );
377 Parameters_& operator=(
const Parameters_& );
414 double y_[ STATE_VEC_SIZE ];
417 State_(
const Parameters_& );
418 State_(
const State_& );
420 State_& operator=(
const State_& );
423 void set(
const Dictionary&,
const Parameters_& );
433 idx(
size_t comp, StateVecElems_ elem )
435 assert( comp * STATE_VEC_COMPS + elem < STATE_VEC_SIZE );
436 return comp * STATE_VEC_COMPS + elem;
448 Buffers_( pp_cond_exp_mc_urbanczik& );
450 Buffers_(
const Buffers_&, pp_cond_exp_mc_urbanczik& );
453 UniversalDataLogger< pp_cond_exp_mc_urbanczik > logger_;
458 std::vector< RingBuffer > spikes_;
459 std::vector< RingBuffer > currents_;
463 gsl_odeiv_control* c_;
464 gsl_odeiv_evolve* e_;
465 gsl_odeiv_system sys_;
472 double IntegrationStep_;
481 double I_stim_[ NCOMP ];
491 int RefractoryCounts_;
504 template < State_::StateVecElems_ elem, Compartments_ comp >
508 return S_.y_[ S_.idx( comp, elem ) ];
515 return Time::get_resolution().get_ms() * S_.r_;
526 static std::vector< std::string > comp_names_;
531 static RecordablesMap< pp_cond_exp_mc_urbanczik > recordablesMap_;
537pp_cond_exp_mc_urbanczik_parameters::phi(
double u )
const
543pp_cond_exp_mc_urbanczik_parameters::h(
double u )
const
545 return 15.0 *
beta / ( 1.0 + ( 1.0 /
rate_slope ) * exp( -beta * ( theta - u ) ) );
551pp_cond_exp_mc_urbanczik::send_test_event( Node& target,
size_t receptor_type,
synindex,
bool )
554 e.set_sender( *
this );
555 return target.handles_test_event( e, receptor_type );
559pp_cond_exp_mc_urbanczik::handles_test_event( SpikeEvent&,
size_t receptor_type )
561 if ( receptor_type < MIN_SPIKE_RECEPTOR or receptor_type >= SUP_SPIKE_RECEPTOR )
563 if ( receptor_type >= SUP_CURR_RECEPTOR )
565 throw UnknownReceptorType( receptor_type, get_name() );
569 throw IncompatibleReceptorType( receptor_type, get_name(),
"SpikeEvent" );
576pp_cond_exp_mc_urbanczik::handles_test_event( CurrentEvent&,
size_t receptor_type )
578 if ( receptor_type < MIN_CURR_RECEPTOR or receptor_type >= SUP_CURR_RECEPTOR )
580 if ( receptor_type < MIN_CURR_RECEPTOR )
582 throw IncompatibleReceptorType( receptor_type, get_name(),
"CurrentEvent" );
586 throw UnknownReceptorType( receptor_type, get_name() );
593pp_cond_exp_mc_urbanczik::handles_test_event( DataLoggingRequest& dlr,
size_t receptor_type )
595 if ( receptor_type != 0 )
597 if ( receptor_type >= SUP_CURR_RECEPTOR )
599 throw UnknownReceptorType( receptor_type, get_name() );
603 throw IncompatibleReceptorType( receptor_type, get_name(),
"DataLoggingRequest" );
606 return B_.logger_.connect_logging_device( dlr, recordablesMap_ );
610pp_cond_exp_mc_urbanczik::get_status(
Dictionary& d )
const
636pp_cond_exp_mc_urbanczik::set_status(
const Dictionary& d )
638 Parameters_ ptmp = P_;
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 urbanczik_archiving_node_impl.h:47
void set_status(const Dictionary &d) override
Change properties of the node according to the entries in the dictionary.
Definition urbanczik_archiving_node_impl.h:54
const std::string dendritic_exc("dendritic_exc")
const std::string t_ref("t_ref")
const std::string tau_syn_in("tau_syn_in")
const std::string E_L("E_L")
const std::string I_e("I_e")
const std::string dendritic_curr("dendritic_curr")
const std::string phi_max("phi_max")
const std::string recordables("recordables")
const std::string C_m("C_m")
const std::string receptor_types("receptor_types")
const std::string receptor_type("receptor_type")
const std::string rate_slope("rate_slope")
const std::string E_in("E_in")
const std::string soma_exc("soma_exc")
const std::string beta("beta")
const std::string target("target")
const std::string tau_syn_ex("tau_syn_ex")
const std::string dendritic_inh("dendritic_inh")
const std::string soma_curr("soma_curr")
const std::string theta("theta")
const std::string E_ex("E_ex")
const std::string soma_inh("soma_inh")
const std::string g_L("g_L")
Namespace for the NEST simulation kernel.
Definition beta_normalization_factor.h:33
RandomDistribution< std::poisson_distribution< unsigned long > > poisson_distribution
Definition random_generators.h:60
BaseRandomGenerator * RngPtr
Definition random_generators.h:50
constexpr auto to_underlying(E e) noexcept
Cast enum value to underlying integer type.
Definition nest_types.h:182
size_t synindex
For enumerations of synapse types.
Definition nest_types.h:115
const double e
Definition numerics.cpp:32