NEURON
kssingle.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <math.h>
4 #include <mymath.h>
5 #include <kschan.h>
6 #include <netcon.h>
7 
8 #include <mcran4.h>
9 
10 class KSSingleTrans;
11 class KSSingleState;
12 class KSSingle;
13 class KSChan;
14 
16  public:
18  virtual ~KSSingleNodeData();
19 
20  // subclassed DiscreteEvent methods
21  virtual void deliver(double t, NetCvode*, NrnThread*);
22  virtual void pr(const char*, double t, NetCvode*);
23 
24  // specific to KSSingleNodeData
25  int nsingle_;
26  Prop* prop_{};
27  int statepop_offset_{std::numeric_limits<int>::max()}; // what used to be statepop_[i] is now
28  // _prop->param(statepop_offset_ + i)
29  /**
30  * @brief Replacement for old double* statepop_ member.
31  */
32  double& statepop(int i) {
33  assert(prop_);
34  assert(statepop_offset_ != std::numeric_limits<int>::max());
35  return prop_->param(statepop_offset_ + i);
36  }
37  int filledstate_; // used when nsingle_ == 1, index of populated state
38  double vlast_; // voltage at which the transition rates were calculated
39  double t0_; // last transition time. <= t on entry to step calculations.
40  double t1_; // next. > t + dt on exit from step calculations.
41  int next_trans_; // if t1_ takes effect, this is the trans.
45 };
46 
47 class KSSingle {
48  public:
49  KSSingle(KSChan*);
50  virtual ~KSSingle();
51 
52  void alloc(Prop*, int sindex);
53  void init(double v,
54  KSSingleNodeData* snd,
55  NrnThread*,
56  Memb_list*,
57  std::size_t instance,
58  std::size_t offset);
59 
60  void state(Node*, Datum*, NrnThread*);
61  void cv_update(Node*, Datum*, NrnThread*);
62  void one(double, KSSingleNodeData*, NrnThread*);
65  void multi(double, KSSingleNodeData*, NrnThread*);
68 
69  bool vsame(double x, double y) {
70  return MyMath::eq(x, y, vres_);
71  }
72  double exprand() {
73  return -log(mcell_ran4a(&idum_));
74  }
75  double unifrand(double range) {
76  return mcell_ran4a(&idum_) * range;
77  }
78  int rvalrand(int);
79 
83  double* rval_;
85  static double vres_;
86  static unsigned int idum_;
87 
88  static unsigned long singleevent_deliver_;
89  static unsigned long singleevent_move_;
90 };
91 
93  public:
94  KSSingleTrans();
95  virtual ~KSSingleTrans();
96  double rate(Point_process*);
97  double rate(double v) {
98  return fac_ * (f_ ? kst_->alpha(v) : kst_->beta(v));
99  }
100  double rate(Datum* pd) {
101  return fac_ * (f_ ? kst_->alpha(pd) : kst_->beta());
102  }
103  int src_;
104  int target_;
106  bool f_;
107  double fac_;
108 };
109 
111  public:
112  KSSingleState();
113  virtual ~KSSingleState();
114  int ntrans_;
116 };
Definition: kschan.h:336
double unifrand(double range)
Definition: kssingle.h:75
double * rval_
Definition: kssingle.h:83
double exprand()
Definition: kssingle.h:72
int rvalrand(int)
Definition: kssingle.cpp:274
void alloc(Prop *, int sindex)
Definition: kssingle.cpp:368
void nextNtrans(KSSingleNodeData *)
Definition: kssingle.cpp:351
KSSingleTrans * transitions_
Definition: kssingle.h:81
virtual ~KSSingle()
Definition: kssingle.cpp:186
int nstate_
Definition: kssingle.h:80
void one(double, KSSingleNodeData *, NrnThread *)
Definition: kssingle.cpp:286
void next1trans(KSSingleNodeData *)
Definition: kssingle.cpp:308
int sndindex_
Definition: kssingle.h:80
void doNtrans(KSSingleNodeData *)
Definition: kssingle.cpp:340
static unsigned long singleevent_deliver_
Definition: kssingle.h:88
int ntrans_
Definition: kssingle.h:80
void state(Node *, Datum *, NrnThread *)
Definition: kssingle.cpp:239
void do1trans(KSSingleNodeData *)
Definition: kssingle.cpp:298
static unsigned int idum_
Definition: kssingle.h:86
bool vsame(double x, double y)
Definition: kssingle.h:69
void init(double v, KSSingleNodeData *snd, NrnThread *, Memb_list *, std::size_t instance, std::size_t offset)
Definition: kssingle.cpp:381
static unsigned long singleevent_move_
Definition: kssingle.h:89
void multi(double, KSSingleNodeData *, NrnThread *)
Definition: kssingle.cpp:328
static double vres_
Definition: kssingle.h:85
KSSingle(KSChan *)
Definition: kssingle.cpp:135
KSSingleState * states_
Definition: kssingle.h:82
void cv_update(Node *, Datum *, NrnThread *)
Definition: kssingle.cpp:254
bool uses_ligands_
Definition: kssingle.h:84
virtual ~KSSingleNodeData()
Definition: kssingle.cpp:216
Prop * prop_
Definition: kssingle.h:26
double vlast_
Definition: kssingle.h:38
virtual void pr(const char *, double t, NetCvode *)
Definition: kssingle.cpp:235
double & statepop(int i)
Replacement for old double* statepop_ member.
Definition: kssingle.h:32
TQItem * qi_
Definition: kssingle.h:44
Point_process ** ppnt_
Definition: kssingle.h:42
virtual void deliver(double t, NetCvode *, NrnThread *)
Definition: kssingle.cpp:218
int statepop_offset_
Definition: kssingle.h:27
KSSingle * kss_
Definition: kssingle.h:43
virtual ~KSSingleState()
Definition: kssingle.cpp:196
int * transitions_
Definition: kssingle.h:115
double rate(double v)
Definition: kssingle.h:97
double rate(Datum *pd)
Definition: kssingle.h:100
double fac_
Definition: kssingle.h:107
virtual ~KSSingleTrans()
Definition: kssingle.cpp:203
KSTransition * kst_
Definition: kssingle.h:105
double rate(Point_process *)
Definition: kssingle.cpp:204
double alpha(double v)
Definition: kschan.h:160
double beta(double v)
Definition: kschan.h:163
static bool eq(T x, T y, T e)
Definition: mymath.h:63
#define v
Definition: md1redef.h:11
#define i
Definition: md1redef.h:19
constexpr auto range(T &&iterable)
Definition: enumerate.h:32
#define assert(ex)
Definition: hocassrt.h:24
double mcell_ran4a(uint32_t *high)
Definition: mcran4.cpp:67
log
Definition: extdef.h:4
A view into a set of mechanism instances.
Definition: nrnoc_ml.h:34
Definition: section.h:105
Represent main neuron object computed by single thread.
Definition: multicore.h:58
A point process is computed just like regular mechanisms.
Definition: section_fwd.hpp:77
Definition: section.h:231
double & param(int field_index, int array_index=0)
Return a reference to the i-th floating point data field associated with this Prop.
Definition: section.h:294
Definition: tqitem.hpp:3
Non-template stable handle to a generic value.