NEST main@caf0ae8
 
Loading...
Searching...
No Matches
cm_compartmentcurrents.h
Go to the documentation of this file.
1/*
2 * cm_compartmentcurrents.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#ifndef CM_COMPARTMENTCURRENTS_H
23#define CM_COMPARTMENTCURRENTS_H
24
25#include <stdlib.h>
26
27#include "ring_buffer.h"
28
29namespace nest
30{
31
32
47class Na
48{
49private:
51 double m_Na_;
52 double h_Na_;
53
55 double gbar_Na_; // uS
56 double e_Na_; // mV
57
59 double q10_;
60
61public:
62 Na( double v_comp );
63 explicit Na( double v_comp, const Dictionary& channel_params );
64 ~Na() {};
65
66 void init_statevars( double v_init );
67 void pre_run_hook() {};
69 void append_recordables( std::map< std::string, double* >* recordables, const long compartment_idx );
70
72 std::pair< double, double > compute_statevar_m( double v_comp );
73 std::pair< double, double > compute_statevar_h( double v_comp );
74
76 std::pair< double, double > f_numstep( const double v_comp );
77};
78
79
90class K
91{
92private:
94 double n_K_ = 0.0;
95
97 double gbar_K_; // uS
98 double e_K_; // mV
99
101 double q10_;
102
103public:
104 K( double v_comp );
105 explicit K( double v_comp, const Dictionary& channel_params );
106 ~K() {};
107
108 void init_statevars( double v_init );
109 void pre_run_hook() {};
111 void append_recordables( std::map< std::string, double* >* recordables, const long compartment_idx );
112
114 std::pair< double, double > compute_statevar_n( double v_comp );
115
117 std::pair< double, double > f_numstep( const double v_comp );
118};
119
120
121class AMPA
122{
123private:
125 long syn_idx = 0;
126
128 double g_r_AMPA_;
129 double g_d_AMPA_;
130
132 double e_rev_; // mV
133 double tau_r_; // ms
134 double tau_d_; // ms
135
137 double g_norm_;
138
140 double prop_r_;
141 double prop_d_;
142
145
146public:
147 explicit AMPA( const long syn_index );
148 AMPA( const long syn_index, const Dictionary& receptor_params );
149 ~AMPA() {};
150
151 long
153 {
154 return syn_idx;
155 };
156
158 void
160 {
161 const double dt = Time::get_resolution().get_ms();
162 // construct propagators
163 prop_r_ = std::exp( -dt / tau_r_ );
164 prop_d_ = std::exp( -dt / tau_d_ );
165
166 b_spikes_->clear();
167 };
168
170 void append_recordables( std::map< std::string, double* >* recordables );
171
173 void
174 set_buffer_ptr( std::vector< RingBuffer >& syn_buffers )
175 {
176 b_spikes_ = &syn_buffers[ syn_idx ];
177 };
178
180 std::pair< double, double > f_numstep( const double v_comp, const long lag );
181};
182
183
184class GABA
185{
186private:
188 long syn_idx = 0;
189
191 double g_r_GABA_;
192 double g_d_GABA_;
193
195 double e_rev_; // mV
196 double tau_r_; // ms
197 double tau_d_; // ms
198
200 double g_norm_;
201
203 double prop_r_;
204 double prop_d_;
205
208
209public:
210 explicit GABA( const long syn_index );
211 GABA( const long syn_index, const Dictionary& receptor_params );
212 ~GABA() {};
213
214 long
216 {
217 return syn_idx;
218 };
219
221 void
223 {
224 const double dt = Time::get_resolution().get_ms();
225 // construct propagators
226 prop_r_ = std::exp( -dt / tau_r_ );
227 prop_d_ = std::exp( -dt / tau_d_ );
228
229 b_spikes_->clear();
230 };
231
233 void append_recordables( std::map< std::string, double* >* recordables );
234
236 void
237 set_buffer_ptr( std::vector< RingBuffer >& syn_buffers )
238 {
239 b_spikes_ = &syn_buffers[ syn_idx ];
240 };
241
243 std::pair< double, double > f_numstep( const double v_comp, const long lag );
244};
245
246
247class NMDA
248{
249private:
251 long syn_idx = 0;
252
254 double g_r_NMDA_;
255 double g_d_NMDA_;
256
258 double e_rev_; // mV
259 double tau_r_; // ms
260 double tau_d_; // ms
261
263 double g_norm_;
264
266 double prop_r_;
267 double prop_d_;
268
271
272public:
273 explicit NMDA( const long syn_index );
274 NMDA( const long syn_index, const Dictionary& receptor_params );
275 ~NMDA() {};
276
277 long
279 {
280 return syn_idx;
281 };
282
284 void
286 {
287 const double dt = Time::get_resolution().get_ms();
288 // construct propagators
289 prop_r_ = std::exp( -dt / tau_r_ );
290 prop_d_ = std::exp( -dt / tau_d_ );
291
292 b_spikes_->clear();
293 };
294
296 void append_recordables( std::map< std::string, double* >* recordables );
297
299 void
300 set_buffer_ptr( std::vector< RingBuffer >& syn_buffers )
301 {
302 b_spikes_ = &syn_buffers[ syn_idx ];
303 };
304
306 std::pair< double, double > f_numstep( const double v_comp, const long lag );
307
309 inline std::pair< double, double >
311 {
312 double exp__v_comp = std::exp( -.1 * v_comp );
313 double denom = 1. + 0.3 * exp__v_comp;
314
315 return std::make_pair( 1. / denom, 0.03 * exp__v_comp / std::pow( denom, 2 ) );
316 }
317};
318
319
321{
322private:
324 long syn_idx = 0;
325
331
333 double e_rev_; // mV
334 double tau_r_AMPA_; // ms
335 double tau_d_AMPA_; // ms
336 double tau_r_NMDA_; // ms
337 double tau_d_NMDA_; // ms
339
343
349
352
353public:
354 // constructor, destructor
355 explicit AMPA_NMDA( const long syn_index );
356 AMPA_NMDA( const long syn_index, const Dictionary& receptor_params );
358
359 long
361 {
362 return syn_idx;
363 };
364
366 void
368 {
369 const double dt = Time::get_resolution().get_ms();
370 prop_r_AMPA_ = std::exp( -dt / tau_r_AMPA_ );
371 prop_d_AMPA_ = std::exp( -dt / tau_d_AMPA_ );
372 prop_r_NMDA_ = std::exp( -dt / tau_r_NMDA_ );
373 prop_d_NMDA_ = std::exp( -dt / tau_d_NMDA_ );
374
375 b_spikes_->clear();
376 };
377
379 void append_recordables( std::map< std::string, double* >* recordables );
380
382 void
383 set_buffer_ptr( std::vector< RingBuffer >& syn_buffers )
384 {
385 b_spikes_ = &syn_buffers[ syn_idx ];
386 };
387
389 std::pair< double, double > f_numstep( const double v_comp, const long lag );
390
392 inline std::pair< double, double >
394 {
395 double exp__v_comp = std::exp( -.1 * v_comp );
396 double denom = 1. + 0.3 * exp__v_comp;
397
398 return std::make_pair( 1. / denom, 0.03 * exp__v_comp / std::pow( denom, 2 ) );
399 }
400};
401
402
404{
405private:
406 // ion channels
409 // synapses
410 std::vector< AMPA > AMPA_syns_;
411 std::vector< GABA > GABA_syns_;
412 std::vector< NMDA > NMDA_syns_;
413 std::vector< AMPA_NMDA > AMPA_NMDA_syns_;
414
415public:
416 CompartmentCurrents( double v_comp );
417 CompartmentCurrents( double v_comp, const Dictionary& channel_params );
419
420 void
422 {
423 // calibrate ion channels
426
427 // calibrate AMPA synapses
428 for ( auto syn_it = AMPA_syns_.begin(); syn_it != AMPA_syns_.end(); ++syn_it )
429 {
430 syn_it->pre_run_hook();
431 }
432 // calibrate GABA synapses
433 for ( auto syn_it = GABA_syns_.begin(); syn_it != GABA_syns_.end(); ++syn_it )
434 {
435 syn_it->pre_run_hook();
436 }
437 // calibrate NMDA synapses
438 for ( auto syn_it = NMDA_syns_.begin(); syn_it != NMDA_syns_.end(); ++syn_it )
439 {
440 syn_it->pre_run_hook();
441 }
442 // calibrateialization of AMPA_NMDA synapses
443 for ( auto syn_it = AMPA_NMDA_syns_.begin(); syn_it != AMPA_NMDA_syns_.end(); ++syn_it )
444 {
445 syn_it->pre_run_hook();
446 }
447 }
448
449 void
450 add_synapse( const std::string& type, const long syn_idx )
451 {
452 if ( type == "AMPA" )
453 {
454 AMPA syn( syn_idx );
455 AMPA_syns_.push_back( syn );
456 }
457 else if ( type == "GABA" )
458 {
459 GABA syn( syn_idx );
460 GABA_syns_.push_back( syn );
461 }
462 else if ( type == "NMDA" )
463 {
464 NMDA syn( syn_idx );
465 NMDA_syns_.push_back( syn );
466 }
467 else if ( type == "AMPA_NMDA" )
468 {
469 AMPA_NMDA syn( syn_idx );
470 AMPA_NMDA_syns_.push_back( syn );
471 }
472 else
473 {
474 assert( false );
475 }
476 };
477 void
478 add_synapse( const std::string& type, const long syn_idx, const Dictionary& receptor_params )
479 {
480 receptor_params.init_access_flags();
481
482 if ( type == "AMPA" )
483 {
484 AMPA syn( syn_idx, receptor_params );
485 AMPA_syns_.push_back( syn );
486 }
487 else if ( type == "GABA" )
488 {
489 GABA syn( syn_idx, receptor_params );
490 GABA_syns_.push_back( syn );
491 }
492 else if ( type == "NMDA" )
493 {
494 NMDA syn( syn_idx, receptor_params );
495 NMDA_syns_.push_back( syn );
496 }
497 else if ( type == "AMPA_NMDA" )
498 {
499 AMPA_NMDA syn( syn_idx, receptor_params );
500 AMPA_NMDA_syns_.push_back( syn );
501 }
502 else
503 {
504 assert( false );
505 }
506
507 receptor_params.all_entries_accessed( "receptor_params", "Unread dictionary entries: " );
508 };
509
510 void
511 add_receptor_info( std::vector< Dictionary >& info, const long compartment_index )
512 {
513 // receptor info for AMPA synapses
514 for ( auto syn_it = AMPA_syns_.begin(); syn_it != AMPA_syns_.end(); ++syn_it )
515 {
516 Dictionary dd;
517 dd[ names::receptor_idx ] = syn_it->get_syn_idx();
518 dd[ names::comp_idx ] = compartment_index;
519 dd[ names::receptor_type ] = std::string( "AMPA" );
520 info.push_back( dd );
521 }
522 // receptor info for GABA synapses
523 for ( auto syn_it = GABA_syns_.begin(); syn_it != GABA_syns_.end(); ++syn_it )
524 {
525 Dictionary dd;
526 dd[ names::receptor_idx ] = syn_it->get_syn_idx();
527 dd[ names::comp_idx ] = compartment_index;
528 dd[ names::receptor_type ] = std::string( "GABA" );
529 info.push_back( dd );
530 }
531 // receptor info for NMDA synapses
532 for ( auto syn_it = NMDA_syns_.begin(); syn_it != NMDA_syns_.end(); ++syn_it )
533 {
534 Dictionary dd;
535 dd[ names::receptor_idx ] = syn_it->get_syn_idx();
536 dd[ names::comp_idx ] = compartment_index;
537 dd[ names::receptor_type ] = std::string( "NMDA" );
538 info.push_back( dd );
539 }
540 // receptor info for AMPA_NMDA synapses
541 for ( auto syn_it = AMPA_NMDA_syns_.begin(); syn_it != AMPA_NMDA_syns_.end(); ++syn_it )
542 {
543 Dictionary dd;
544 dd[ names::receptor_idx ] = syn_it->get_syn_idx();
545 dd[ names::comp_idx ] = compartment_index;
546 dd[ names::receptor_type ] = std::string( "AMPA_NMDA" );
547 info.push_back( dd );
548 }
549 };
550
551 void
552 set_syn_buffers( std::vector< RingBuffer >& syn_buffers )
553 {
554 // syn_buffers for AMPA synapses
555 for ( auto syn_it = AMPA_syns_.begin(); syn_it != AMPA_syns_.end(); ++syn_it )
556 {
557 syn_it->set_buffer_ptr( syn_buffers );
558 }
559 // syn_buffers for GABA synapses
560 for ( auto syn_it = GABA_syns_.begin(); syn_it != GABA_syns_.end(); ++syn_it )
561 {
562 syn_it->set_buffer_ptr( syn_buffers );
563 }
564 // syn_buffers for NMDA synapses
565 for ( auto syn_it = NMDA_syns_.begin(); syn_it != NMDA_syns_.end(); ++syn_it )
566 {
567 syn_it->set_buffer_ptr( syn_buffers );
568 }
569 // syn_buffers for AMPA_NMDA synapses
570 for ( auto syn_it = AMPA_NMDA_syns_.begin(); syn_it != AMPA_NMDA_syns_.end(); ++syn_it )
571 {
572 syn_it->set_buffer_ptr( syn_buffers );
573 }
574 }
575
576 std::map< std::string, double* >
577 get_recordables( const long compartment_idx )
578 {
579
580 std::map< std::string, double* > recordables;
581
582 // recordables sodium channel
583 Na_chan_.append_recordables( &recordables, compartment_idx );
584 // recordables potassium channel
585 K_chan_.append_recordables( &recordables, compartment_idx );
586
587 // recordables AMPA synapses
588 for ( auto syn_it = AMPA_syns_.begin(); syn_it != AMPA_syns_.end(); syn_it++ )
589 {
590 syn_it->append_recordables( &recordables );
591 }
592 // recordables GABA synapses
593 for ( auto syn_it = GABA_syns_.begin(); syn_it != GABA_syns_.end(); syn_it++ )
594 {
595 syn_it->append_recordables( &recordables );
596 }
597 // recordables NMDA synapses
598 for ( auto syn_it = NMDA_syns_.begin(); syn_it != NMDA_syns_.end(); syn_it++ )
599 {
600 syn_it->append_recordables( &recordables );
601 }
602 // recordables AMPA_NMDA synapses
603 for ( auto syn_it = AMPA_NMDA_syns_.begin(); syn_it != AMPA_NMDA_syns_.end(); syn_it++ )
604 {
605 syn_it->append_recordables( &recordables );
606 }
607
608 return recordables;
609 };
610
611 std::pair< double, double >
612 f_numstep( const double v_comp, const long lag )
613 {
614 std::pair< double, double > gi( 0., 0. );
615 double g_val = 0.;
616 double i_val = 0.;
617
618 // contribution of Na channel
619 gi = Na_chan_.f_numstep( v_comp );
620
621 g_val += gi.first;
622 i_val += gi.second;
623
624 // contribution of K channel
625 gi = K_chan_.f_numstep( v_comp );
626
627 g_val += gi.first;
628 i_val += gi.second;
629
630 // contribution of AMPA synapses
631 for ( auto syn_it = AMPA_syns_.begin(); syn_it != AMPA_syns_.end(); ++syn_it )
632 {
633 gi = syn_it->f_numstep( v_comp, lag );
634
635 g_val += gi.first;
636 i_val += gi.second;
637 }
638 // contribution of GABA synapses
639 for ( auto syn_it = GABA_syns_.begin(); syn_it != GABA_syns_.end(); ++syn_it )
640 {
641 gi = syn_it->f_numstep( v_comp, lag );
642
643 g_val += gi.first;
644 i_val += gi.second;
645 }
646 // contribution of NMDA synapses
647 for ( auto syn_it = NMDA_syns_.begin(); syn_it != NMDA_syns_.end(); ++syn_it )
648 {
649 gi = syn_it->f_numstep( v_comp, lag );
650
651 g_val += gi.first;
652 i_val += gi.second;
653 }
654 // contribution of AMPA_NMDA synapses
655 for ( auto syn_it = AMPA_NMDA_syns_.begin(); syn_it != AMPA_NMDA_syns_.end(); ++syn_it )
656 {
657 gi = syn_it->f_numstep( v_comp, lag );
658
659 g_val += gi.first;
660 i_val += gi.second;
661 }
662
663 return std::make_pair( g_val, i_val );
664 };
665};
666
667} // namespace
668
669#endif /* #ifndef CM_COMPARTMENTCURRENTS_H */
Dictionary class for interface to Python and C++ API.
Definition dictionary.h:213
void all_entries_accessed(const std::string &where, const std::string &what, const bool thread_local_dict=false) const
Confirm that all entries in dictionary have been accessed.
Definition dictionary.h:701
void init_access_flags(const bool thread_local_dict=false) const
Initialize access flags to prepare for later error checking with all_entries_accessed.
Definition dictionary.h:695
Definition cm_compartmentcurrents.h:321
double g_norm_AMPA_
assigned variables
Definition cm_compartmentcurrents.h:341
double tau_d_AMPA_
Definition cm_compartmentcurrents.h:335
double tau_r_NMDA_
Definition cm_compartmentcurrents.h:336
double g_norm_NMDA_
Definition cm_compartmentcurrents.h:342
double g_d_AN_AMPA_
Definition cm_compartmentcurrents.h:328
void pre_run_hook()
initialization of the state variables
Definition cm_compartmentcurrents.h:367
void set_buffer_ptr(std::vector< RingBuffer > &syn_buffers)
associate the receptor with a spike buffer
Definition cm_compartmentcurrents.h:383
std::pair< double, double > NMDA_sigmoid__and__d_NMDAsigmoid_dv(double v_comp)
synapse specific function (NMDA nonlinearity)
Definition cm_compartmentcurrents.h:393
double prop_d_NMDA_
Definition cm_compartmentcurrents.h:348
double g_r_AN_NMDA_
Definition cm_compartmentcurrents.h:329
long syn_idx
global synapse index
Definition cm_compartmentcurrents.h:324
double g_r_AN_AMPA_
state variables
Definition cm_compartmentcurrents.h:327
RingBuffer * b_spikes_
spike buffer
Definition cm_compartmentcurrents.h:351
double tau_r_AMPA_
Definition cm_compartmentcurrents.h:334
~AMPA_NMDA()
Definition cm_compartmentcurrents.h:357
double g_d_AN_NMDA_
Definition cm_compartmentcurrents.h:330
long get_syn_idx()
Definition cm_compartmentcurrents.h:360
double prop_r_NMDA_
Definition cm_compartmentcurrents.h:347
void append_recordables(std::map< std::string, double * > *recordables)
make the state variables of this receptor accessible
Definition cm_compartmentcurrents.cpp:657
double prop_d_AMPA_
Definition cm_compartmentcurrents.h:346
double prop_r_AMPA_
propagators
Definition cm_compartmentcurrents.h:345
double tau_d_NMDA_
Definition cm_compartmentcurrents.h:337
double e_rev_
user defined parameters
Definition cm_compartmentcurrents.h:333
std::pair< double, double > f_numstep(const double v_comp, const long lag)
advance receptor by one numerical integration step
Definition cm_compartmentcurrents.cpp:666
double NMDA_ratio_
Definition cm_compartmentcurrents.h:338
Definition cm_compartmentcurrents.h:122
long get_syn_idx()
Definition cm_compartmentcurrents.h:152
void pre_run_hook()
initialization of the state variables
Definition cm_compartmentcurrents.h:159
~AMPA()
Definition cm_compartmentcurrents.h:149
void append_recordables(std::map< std::string, double * > *recordables)
make the state variables of this receptor accessible
Definition cm_compartmentcurrents.cpp:357
void set_buffer_ptr(std::vector< RingBuffer > &syn_buffers)
associate the receptor with a spike buffer
Definition cm_compartmentcurrents.h:174
double tau_r_
Definition cm_compartmentcurrents.h:133
double e_rev_
user defined parameters
Definition cm_compartmentcurrents.h:132
double prop_r_
propagators
Definition cm_compartmentcurrents.h:140
double tau_d_
Definition cm_compartmentcurrents.h:134
double prop_d_
Definition cm_compartmentcurrents.h:141
RingBuffer * b_spikes_
spike buffer
Definition cm_compartmentcurrents.h:144
double g_r_AMPA_
state variables
Definition cm_compartmentcurrents.h:128
std::pair< double, double > f_numstep(const double v_comp, const long lag)
advance receptor by one numerical integration step
Definition cm_compartmentcurrents.cpp:364
long syn_idx
global synapse index
Definition cm_compartmentcurrents.h:125
double g_norm_
assigned variables
Definition cm_compartmentcurrents.h:137
double g_d_AMPA_
Definition cm_compartmentcurrents.h:129
Definition cm_compartmentcurrents.h:404
std::vector< AMPA_NMDA > AMPA_NMDA_syns_
Definition cm_compartmentcurrents.h:413
std::vector< NMDA > NMDA_syns_
Definition cm_compartmentcurrents.h:412
K K_chan_
Definition cm_compartmentcurrents.h:408
void pre_run_hook()
Definition cm_compartmentcurrents.h:421
void set_syn_buffers(std::vector< RingBuffer > &syn_buffers)
Definition cm_compartmentcurrents.h:552
void add_synapse(const std::string &type, const long syn_idx)
Definition cm_compartmentcurrents.h:450
void add_synapse(const std::string &type, const long syn_idx, const Dictionary &receptor_params)
Definition cm_compartmentcurrents.h:478
~CompartmentCurrents()
Definition cm_compartmentcurrents.h:418
Na Na_chan_
Definition cm_compartmentcurrents.h:407
std::vector< AMPA > AMPA_syns_
Definition cm_compartmentcurrents.h:410
std::pair< double, double > f_numstep(const double v_comp, const long lag)
Definition cm_compartmentcurrents.h:612
void add_receptor_info(std::vector< Dictionary > &info, const long compartment_index)
Definition cm_compartmentcurrents.h:511
std::vector< GABA > GABA_syns_
Definition cm_compartmentcurrents.h:411
std::map< std::string, double * > get_recordables(const long compartment_idx)
Definition cm_compartmentcurrents.h:577
Definition cm_compartmentcurrents.h:185
RingBuffer * b_spikes_
spike buffer
Definition cm_compartmentcurrents.h:207
void set_buffer_ptr(std::vector< RingBuffer > &syn_buffers)
associate the receptor with a spike buffer
Definition cm_compartmentcurrents.h:237
double prop_r_
propagators
Definition cm_compartmentcurrents.h:203
long syn_idx
global synapse index
Definition cm_compartmentcurrents.h:188
double g_d_GABA_
Definition cm_compartmentcurrents.h:192
void pre_run_hook()
initialization of the state variables
Definition cm_compartmentcurrents.h:222
double tau_d_
Definition cm_compartmentcurrents.h:197
double e_rev_
user defined parameters
Definition cm_compartmentcurrents.h:195
void append_recordables(std::map< std::string, double * > *recordables)
make the state variables of this receptor accessible
Definition cm_compartmentcurrents.cpp:444
~GABA()
Definition cm_compartmentcurrents.h:212
std::pair< double, double > f_numstep(const double v_comp, const long lag)
advance receptor by one numerical integration step
Definition cm_compartmentcurrents.cpp:451
double tau_r_
Definition cm_compartmentcurrents.h:196
double g_norm_
assigned variables
Definition cm_compartmentcurrents.h:200
double g_r_GABA_
state variables
Definition cm_compartmentcurrents.h:191
double prop_d_
Definition cm_compartmentcurrents.h:204
long get_syn_idx()
Definition cm_compartmentcurrents.h:215
Channel taken from the following .mod file: https://senselab.med.yale.edu/ModelDB/ShowModel?...
Definition cm_compartmentcurrents.h:91
double gbar_K_
user-defined parameters potassium channel (maximal conductance, reversal potential)
Definition cm_compartmentcurrents.h:97
void append_recordables(std::map< std::string, double * > *recordables, const long compartment_idx)
make the state variables of this channel accessible
Definition cm_compartmentcurrents.cpp:233
double q10_
temperature factor for reaction rates
Definition cm_compartmentcurrents.h:101
double e_K_
Definition cm_compartmentcurrents.h:98
~K()
Definition cm_compartmentcurrents.h:106
std::pair< double, double > f_numstep(const double v_comp)
advance channel by one numerical integration step
Definition cm_compartmentcurrents.cpp:275
std::pair< double, double > compute_statevar_n(double v_comp)
compute state variable time scale and asymptotic values
Definition cm_compartmentcurrents.cpp:239
void pre_run_hook()
Definition cm_compartmentcurrents.h:109
double n_K_
state variables potassium channel
Definition cm_compartmentcurrents.h:94
void init_statevars(double v_init)
Definition cm_compartmentcurrents.cpp:225
Definition cm_compartmentcurrents.h:248
double tau_d_
Definition cm_compartmentcurrents.h:260
double g_d_NMDA_
Definition cm_compartmentcurrents.h:255
double g_r_NMDA_
state variables
Definition cm_compartmentcurrents.h:254
void pre_run_hook()
initialization of the state variables
Definition cm_compartmentcurrents.h:285
double tau_r_
Definition cm_compartmentcurrents.h:259
double g_norm_
assigned variables
Definition cm_compartmentcurrents.h:263
std::pair< double, double > NMDA_sigmoid__and__d_NMDAsigmoid_dv(double v_comp)
synapse specific function (NMDA nonlinearity)
Definition cm_compartmentcurrents.h:310
RingBuffer * b_spikes_
spike buffer
Definition cm_compartmentcurrents.h:270
double e_rev_
user defined parameters
Definition cm_compartmentcurrents.h:258
~NMDA()
Definition cm_compartmentcurrents.h:275
long syn_idx
global synapse index
Definition cm_compartmentcurrents.h:251
void set_buffer_ptr(std::vector< RingBuffer > &syn_buffers)
associate the receptor with a spike buffer
Definition cm_compartmentcurrents.h:300
std::pair< double, double > f_numstep(const double v_comp, const long lag)
advance receptor by one numerical integration step
Definition cm_compartmentcurrents.cpp:538
double prop_r_
propagators
Definition cm_compartmentcurrents.h:266
void append_recordables(std::map< std::string, double * > *recordables)
make the state variables of this receptor accessible
Definition cm_compartmentcurrents.cpp:531
long get_syn_idx()
Definition cm_compartmentcurrents.h:278
double prop_d_
Definition cm_compartmentcurrents.h:267
Channel taken from the following .mod file: https://senselab.med.yale.edu/ModelDB/ShowModel?...
Definition cm_compartmentcurrents.h:48
double gbar_Na_
user-defined parameters sodium channel (maximal conductance, reversal potential)
Definition cm_compartmentcurrents.h:55
double e_Na_
Definition cm_compartmentcurrents.h:56
std::pair< double, double > f_numstep(const double v_comp)
advance channel by one numerical integration step
Definition cm_compartmentcurrents.cpp:152
double q10_
temperature factor for reaction rates
Definition cm_compartmentcurrents.h:59
std::pair< double, double > compute_statevar_m(double v_comp)
compute state variable time scale and asymptotic values
Definition cm_compartmentcurrents.cpp:80
void init_statevars(double v_init)
Definition cm_compartmentcurrents.cpp:62
void append_recordables(std::map< std::string, double * > *recordables, const long compartment_idx)
make the state variables of this channel accessible
Definition cm_compartmentcurrents.cpp:73
~Na()
Definition cm_compartmentcurrents.h:64
std::pair< double, double > compute_statevar_h(double v_comp)
Definition cm_compartmentcurrents.cpp:115
void pre_run_hook()
Definition cm_compartmentcurrents.h:67
double m_Na_
state variables sodium channel
Definition cm_compartmentcurrents.h:51
double h_Na_
Definition cm_compartmentcurrents.h:52
Buffer Layout.
Definition ring_buffer.h:83
void clear()
Initialize the buffer with noughts.
Definition ring_buffer.cpp:44
static Time get_resolution()
Definition nest_time.h:325
double get_ms() const
Definition nest_time.h:490
const std::string receptor_type("receptor_type")
const std::string comp_idx("comp_idx")
const std::string receptor_idx("receptor_idx")
Namespace for the NEST simulation kernel.
Definition beta_normalization_factor.h:33