NEURON
kssingle.h
Go to the documentation of this file.
1 #ifndef kssingle_h
2 #define kssingle_h
3 
4 #include <math.h>
5 #include <OS/math.h>
6 #include <kschan.h>
7 #include <netcon.h>
8 
9 #include <mcran4.h>
10 
11 class KSSingleTrans;
12 class KSSingleState;
13 class KSSingle;
14 class KSChan;
15 
17  public:
19  virtual ~KSSingleNodeData();
20 
21  // subclassed DiscreteEvent methods
22  virtual void deliver(double t, NetCvode*, NrnThread*);
23  virtual void pr(const char*, double t, NetCvode*);
24 
25  // specific to KSSingleNodeData
26  int nsingle_;
27  double* statepop_; // points to prop->param state array
28  int filledstate_; // used when nsingle_ == 1, index of populated state
29  double vlast_; // voltage at which the transition rates were calculated
30  double t0_; // last transition time. <= t on entry to step calculations.
31  double t1_; // next. > t + dt on exit from step calculations.
32  int next_trans_; // if t1_ takes effect, this is the trans.
36 };
37 
38 class KSSingle {
39  public:
40  KSSingle(KSChan*);
41  virtual ~KSSingle();
42 
43  void alloc(Prop*, int sindex);
44  void init(double v, double* s, KSSingleNodeData* snd, NrnThread*);
45 
46  void state(Node*, double*, Datum*, NrnThread*);
47  void cv_update(Node*, double*, Datum*, NrnThread*);
48  void one(double, KSSingleNodeData*, NrnThread*);
51  void multi(double, KSSingleNodeData*, NrnThread*);
54 
55  bool vsame(double x, double y) {
56  return Math::equal(x, y, vres_);
57  }
58  double exprand() {
59  return -log(mcell_ran4a(&idum_));
60  }
61  double unifrand(double range) {
62  return mcell_ran4a(&idum_) * range;
63  }
64  int rvalrand(int);
65 
69  double* rval_;
71  static double vres_;
72  static unsigned int idum_;
73 
74  static unsigned long singleevent_deliver_;
75  static unsigned long singleevent_move_;
76 };
77 
79  public:
80  KSSingleTrans();
81  virtual ~KSSingleTrans();
82  double rate(Point_process*);
83  double rate(double v) {
84  return fac_ * (f_ ? kst_->alpha(v) : kst_->beta(v));
85  }
86  double rate(Datum* pd) {
87  return fac_ * (f_ ? kst_->alpha(pd) : kst_->beta());
88  }
89  int src_;
90  int target_;
92  bool f_;
93  double fac_;
94 };
95 
97  public:
98  KSSingleState();
99  virtual ~KSSingleState();
100  int ntrans_;
102 };
103 
104 #endif
Definition: kschan.h:291
double unifrand(double range)
Definition: kssingle.h:61
double * rval_
Definition: kssingle.h:69
double exprand()
Definition: kssingle.h:58
int rvalrand(int)
Definition: kssingle.cpp:277
void alloc(Prop *, int sindex)
Definition: kssingle.cpp:371
void init(double v, double *s, KSSingleNodeData *snd, NrnThread *)
Definition: kssingle.cpp:383
void nextNtrans(KSSingleNodeData *)
Definition: kssingle.cpp:354
KSSingleTrans * transitions_
Definition: kssingle.h:67
virtual ~KSSingle()
Definition: kssingle.cpp:188
int nstate_
Definition: kssingle.h:66
void one(double, KSSingleNodeData *, NrnThread *)
Definition: kssingle.cpp:289
void next1trans(KSSingleNodeData *)
Definition: kssingle.cpp:311
int sndindex_
Definition: kssingle.h:66
void doNtrans(KSSingleNodeData *)
Definition: kssingle.cpp:343
static unsigned long singleevent_deliver_
Definition: kssingle.h:74
void state(Node *, double *, Datum *, NrnThread *)
Definition: kssingle.cpp:242
int ntrans_
Definition: kssingle.h:66
void cv_update(Node *, double *, Datum *, NrnThread *)
Definition: kssingle.cpp:257
void do1trans(KSSingleNodeData *)
Definition: kssingle.cpp:301
static unsigned int idum_
Definition: kssingle.h:72
bool vsame(double x, double y)
Definition: kssingle.h:55
static unsigned long singleevent_move_
Definition: kssingle.h:75
void multi(double, KSSingleNodeData *, NrnThread *)
Definition: kssingle.cpp:331
static double vres_
Definition: kssingle.h:71
KSSingle(KSChan *)
Definition: kssingle.cpp:137
KSSingleState * states_
Definition: kssingle.h:68
bool uses_ligands_
Definition: kssingle.h:70
double * statepop_
Definition: kssingle.h:27
virtual ~KSSingleNodeData()
Definition: kssingle.cpp:219
double vlast_
Definition: kssingle.h:29
virtual void pr(const char *, double t, NetCvode *)
Definition: kssingle.cpp:238
TQItem * qi_
Definition: kssingle.h:35
Point_process ** ppnt_
Definition: kssingle.h:33
virtual void deliver(double t, NetCvode *, NrnThread *)
Definition: kssingle.cpp:221
KSSingle * kss_
Definition: kssingle.h:34
virtual ~KSSingleState()
Definition: kssingle.cpp:198
int * transitions_
Definition: kssingle.h:101
double rate(double v)
Definition: kssingle.h:83
double rate(Datum *pd)
Definition: kssingle.h:86
double fac_
Definition: kssingle.h:93
virtual ~KSSingleTrans()
Definition: kssingle.cpp:205
KSTransition * kst_
Definition: kssingle.h:91
double rate(Point_process *)
Definition: kssingle.cpp:206
double alpha(double v)
Definition: kschan.h:165
double beta(double v)
Definition: kschan.h:168
static bool equal(float x, float y, float e)
Definition: math.h:108
Definition: bbtqueue.h:6
double t
Definition: cvodeobj.cpp:59
double mcell_ran4a(uint32_t *high)
Definition: mcran4.cpp:65
#define v
Definition: md1redef.h:4
log
Definition: extdef.h:4
Definition: section.h:133
Represent main neuron object computed by single thread.
Definition: multicore.h:58
Definition: section.h:214
Definition: hocdec.h:177