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*);
49  void do1trans(KSSingleNodeData*);
50  void next1trans(KSSingleNodeData*);
51  void multi(double, KSSingleNodeData*, NrnThread*);
52  void doNtrans(KSSingleNodeData*);
53  void nextNtrans(KSSingleNodeData*);
54 
55  bool vsame(double x, double y) {return Math::equal(x, y, vres_);}
56  double exprand() { return -log(mcell_ran4a(&idum_)); }
57  double unifrand(double range) { return mcell_ran4a(&idum_)*range; }
58  int rvalrand(int);
59 
60  int ntrans_, nstate_, sndindex_;
63  double* rval_;
65  static double vres_;
66  static unsigned int idum_;
67 
68  static unsigned long singleevent_deliver_;
69  static unsigned long singleevent_move_;
70 };
71 
73 public:
74  KSSingleTrans();
75  virtual ~KSSingleTrans();
76  double rate(Point_process*);
77  double rate(double v) { return fac_ * (f_ ? kst_->alpha(v) : kst_->beta(v)); }
78  double rate(Datum* pd) { return fac_ * (f_ ? kst_->alpha(pd) : kst_->beta()); }
79  int src_;
80  int target_;
82  bool f_;
83  double fac_;
84 };
85 
87 public:
88  KSSingleState();
89  virtual ~KSSingleState();
90  int ntrans_;
92 };
93 
94 #endif
TQItem * qi_
Definition: kssingle.h:35
KSSingleState * states_
Definition: kssingle.h:62
double unifrand(double range)
Definition: kssingle.h:57
static unsigned int idum_
Definition: kssingle.h:66
double vlast_
Definition: kssingle.h:29
KSSingle * kss_
Definition: kssingle.h:34
int * transitions_
Definition: kssingle.h:91
bool uses_ligands_
Definition: kssingle.h:64
virtual void pr(const char *, double t, NetCvode *)
Definition: kssingle.cpp:238
static bool equal(float x, float y, float e)
Definition: math.h:108
Represent main neuron object computed by single thread.
Definition: multicore.h:58
log
Definition: extdef.h:3
Point_process ** ppnt_
Definition: kssingle.h:33
KSTransition * kst_
Definition: kssingle.h:81
#define v
Definition: md1redef.h:4
static unsigned long singleevent_move_
Definition: kssingle.h:69
static double vres_
Definition: kssingle.h:65
Definition: bbtqueue.h:6
void init()
Definition: init.cpp:169
_CONST char * s
Definition: system.cpp:74
static unsigned long singleevent_deliver_
Definition: kssingle.h:68
virtual ~KSSingleNodeData()
Definition: kssingle.cpp:218
double mcell_ran4a(uint32_t *high)
Definition: mcran4.cpp:63
double rate(double v)
Definition: kssingle.h:77
static int nstate_[MAXKINBLK]
Definition: kinetic.cpp:107
Definition: section.h:213
double fac_
Definition: kssingle.h:83
KSSingleTrans * transitions_
Definition: kssingle.h:61
double rate(Datum *pd)
Definition: kssingle.h:78
double exprand()
Definition: kssingle.h:56
double * statepop_
Definition: kssingle.h:27
Definition: kschan.h:239
double t
Definition: init.cpp:123
Definition: section.h:132
virtual void deliver(double t, NetCvode *, NrnThread *)
Definition: kssingle.cpp:221
Definition: hocdec.h:176
double * rval_
Definition: kssingle.h:63
int sndindex_
Definition: kssingle.h:60
bool vsame(double x, double y)
Definition: kssingle.h:55