NEURON
vrecitem.h
Go to the documentation of this file.
1 #ifndef vrecitem_h
2 #define vrecitem_h
3 
4 #include <OS/list.h>
5 #include <InterViews/observe.h>
6 #include <netcon.h>
7 #include <ivocvect.h>
8 
9 class PlayRecord;
10 class PlayRecordSave;
12 class VecPlayStepSave;
14 class StmtInfo;
15 struct NrnThread;
16 struct Section;
17 
18 // SaveState subtypes for PlayRecordType and trajectory return type
19 #define VecRecordDiscreteType 1
20 #define VecRecordDtType 2
21 #define VecPlayStepType 3
22 #define VecPlayContinuousType 4
23 #define TvecRecordType 5
24 #define YvecRecordType 6
25 #define GLineRecordType 7
26 #define GVectorRecordType 8
27 
28 // used by PlayRecord subclasses that utilize discrete events
30  public:
32  virtual ~PlayRecordEvent();
33  virtual void deliver(double, NetCvode*, NrnThread*);
34  virtual void pr(const char*, double t, NetCvode*);
35  virtual void frecord_init(TQItem* q);
36  virtual NrnThread* thread();
37  virtual int type() {
38  return PlayRecordEventType;
39  }
41  static unsigned long playrecord_send_;
42  static unsigned long playrecord_deliver_;
43 
44  virtual DiscreteEvent* savestate_save();
45  virtual void savestate_restore(double deliverytime, NetCvode*);
46  virtual void savestate_write(FILE*);
47  static DiscreteEvent* savestate_read(FILE*);
48 };
49 
50 // common interface for Play and Record for all integration methods.
51 class PlayRecord: public Observer {
52  public:
53  PlayRecord(double* pd, Object* ppobj = nil);
54  virtual ~PlayRecord();
55  virtual void install(Cvode* cv) {
56  cvode_ = cv;
57  } // cvode play or record list?
58  virtual void play_init() {} // called near beginning of finitialize
59  virtual void record_init() {} // called near end of finitialize and frecord_init()
60  virtual void continuous(double t) {
61  } // play - every f(y, t) or res(y', y, t); record - advance_tn and initialize flag
62  virtual void deliver(double t, NetCvode*) {} // at associated DiscreteEvent
63  virtual PlayRecordEvent* event() {
64  return nil;
65  }
66  virtual void pr(); // print identifying info
67  virtual int type() {
68  return 0;
69  }
70 
71  // install normally calls one of these. Cvode may be nil.
72  void play_add(Cvode*);
73  void record_add(Cvode*);
74 
75  // administration
76  virtual void update_ptr(double*);
77  virtual void disconnect(Observable*);
78  virtual void update(Observable* o) {
79  disconnect(o);
80  }
81  virtual bool uses(void*) {
82  return false;
83  }
84  virtual void frecord_init(TQItem*) {}
85  // for example, subclasses use things that may not go out of existence but wish us
86  // to remove ourselves from the PlayRecord system. e.g Vector.play_remove().
87 
88  virtual PlayRecordSave* savestate_save();
89  static PlayRecordSave* savestate_read(FILE*);
90 
91  double* pd_;
94  int ith_; // The thread index
95 };
96 
98 
99 class PlayRecordSave {
100  public:
101  PlayRecordSave(PlayRecord*);
102  virtual ~PlayRecordSave();
103  virtual void savestate_restore(){};
104  virtual void savestate_write(FILE*) {}
105  virtual void savestate_read(FILE*) {}
106  void check();
107 
108  PlayRecord* pr_;
109  int prl_index_;
110 };
111 
112 class TvecRecord: public PlayRecord {
113  public:
114  TvecRecord(Section*, IvocVect* tvec, Object* ppobj = nil);
115  virtual ~TvecRecord();
116  virtual void install(Cvode*);
117  virtual void record_init();
118  virtual void continuous(double t);
119  virtual int type() {
120  return TvecRecordType;
121  }
122 
123  virtual void disconnect(Observable*);
124  virtual bool uses(void* v) {
125  return (void*) t_ == v;
126  }
127 
130 };
131 
132 class YvecRecord: public PlayRecord {
133  public:
134  YvecRecord(double*, IvocVect* y, Object* ppobj = nil);
135  virtual ~YvecRecord();
136  virtual void install(Cvode*);
137  virtual void record_init();
138  virtual void continuous(double t);
139  virtual int type() {
140  return YvecRecordType;
141  }
142 
143  virtual void disconnect(Observable*);
144  virtual bool uses(void* v) {
145  return (void*) y_ == v;
146  }
147 
149 };
150 
152  public:
153  VecRecordDiscrete(double*, IvocVect* y, IvocVect* t, Object* ppobj = nil);
154  virtual ~VecRecordDiscrete();
155  virtual void install(Cvode*);
156  virtual void record_init();
157  virtual PlayRecordEvent* event() {
158  return e_;
159  }
160  virtual void deliver(double t, NetCvode*);
161 
162  virtual void disconnect(Observable*);
163  virtual bool uses(void* v) {
164  return (void*) y_ == v || (void*) t_ == v;
165  }
166 
167  virtual void frecord_init(TQItem*);
168 
169  virtual int type() {
170  return VecRecordDiscreteType;
171  }
172  virtual PlayRecordSave* savestate_save();
173 
177 };
178 
179 class VecRecordDiscreteSave: public PlayRecordSave {
180  public:
182  virtual ~VecRecordDiscreteSave();
183  virtual void savestate_restore();
184  virtual void savestate_write(FILE*);
185  virtual void savestate_read(FILE*);
186  int cursize_;
187 };
188 
189 class VecRecordDt: public PlayRecord {
190  public:
191  VecRecordDt(double*, IvocVect* y, double dt, Object* ppobj = nil);
192  virtual ~VecRecordDt();
193  virtual void install(Cvode*);
194  virtual void record_init();
195  virtual void deliver(double t, NetCvode*);
196  virtual PlayRecordEvent* event() {
197  return e_;
198  }
199 
200  virtual void disconnect(Observable*);
201  virtual bool uses(void* v) {
202  return (void*) y_ == v;
203  }
204 
205  virtual void frecord_init(TQItem*);
206  virtual int type() {
207  return VecRecordDtType;
208  }
209  virtual PlayRecordSave* savestate_save();
210 
212  double dt_;
214 };
215 
216 class VecRecordDtSave: public PlayRecordSave {
217  public:
219  virtual ~VecRecordDtSave();
220  virtual void savestate_restore();
221 };
222 
223 class VecPlayStep: public PlayRecord {
224  public:
225  VecPlayStep(double*, IvocVect* y, IvocVect* t, double dt, Object* ppobj = nil);
226  VecPlayStep(const char* s, IvocVect* y, IvocVect* t, double dt, Object* ppobj = nil);
227  void init(IvocVect* y, IvocVect* t, double dt);
228  virtual ~VecPlayStep();
229  virtual void install(Cvode*);
230  virtual void play_init();
231  virtual void deliver(double t, NetCvode*);
232  virtual PlayRecordEvent* event() {
233  return e_;
234  }
235  virtual void pr();
236 
237  virtual void disconnect(Observable*);
238  virtual bool uses(void* v) {
239  return (void*) y_ == v || (void*) t_ == v;
240  }
241  virtual int type() {
242  return VecPlayStepType;
243  }
244  virtual PlayRecordSave* savestate_save();
245 
248  double dt_;
250 
253 };
254 class VecPlayStepSave: public PlayRecordSave {
255  public:
257  virtual ~VecPlayStepSave();
258  virtual void savestate_restore();
259  virtual void savestate_write(FILE*);
260  virtual void savestate_read(FILE*);
262 };
263 
265  public:
266  VecPlayContinuous(double*, IvocVect* y, IvocVect* t, IvocVect* discon, Object* ppobj = nil);
267  VecPlayContinuous(const char* s,
268  IvocVect* y,
269  IvocVect* t,
270  IvocVect* discon,
271  Object* ppobj = nil);
272  virtual ~VecPlayContinuous();
273  void init(IvocVect* y, IvocVect* t, IvocVect* tdiscon);
274  virtual void install(Cvode*);
275  virtual void play_init();
276  virtual void deliver(double t, NetCvode*);
277  virtual PlayRecordEvent* event() {
278  return e_;
279  }
280  virtual void pr();
281 
282  void continuous(double tt);
283  double interpolate(double tt);
284  double interp(double th, double x0, double x1) {
285  return x0 + (x1 - x0) * th;
286  }
287  void search(double tt);
288 
289  virtual void disconnect(Observable*);
290  virtual bool uses(void* v) {
291  return (void*) y_ == v || (void*) t_ == v || (void*) discon_indices_ == v;
292  }
293  virtual int type() {
294  return VecPlayContinuousType;
295  }
296  virtual PlayRecordSave* savestate_save();
297 
304 
307 };
308 class VecPlayContinuousSave: public PlayRecordSave {
309  public:
311  virtual ~VecPlayContinuousSave();
312  virtual void savestate_restore();
313  virtual void savestate_write(FILE*);
314  virtual void savestate_read(FILE*);
318 };
319 
320 #endif
#define nil
Definition: enter-scope.h:36
Definition: cvodeobj.h:76
virtual void deliver(double, NetCvode *, NrnThread *)
Definition: netcvode.cpp:3565
virtual void frecord_init(TQItem *q)
Definition: netcvode.cpp:3561
virtual int type()
Definition: vrecitem.h:37
static unsigned long playrecord_send_
Definition: vrecitem.h:41
virtual ~PlayRecordEvent()
Definition: netcvode.cpp:345
static DiscreteEvent * savestate_read(FILE *)
Definition: netcvode.cpp:360
PlayRecord * plr_
Definition: vrecitem.h:40
virtual NrnThread * thread()
Definition: netcvode.cpp:3574
virtual void savestate_restore(double deliverytime, NetCvode *)
Definition: netcvode.cpp:352
virtual void pr(const char *, double t, NetCvode *)
Definition: netcvode.cpp:3578
static unsigned long playrecord_deliver_
Definition: vrecitem.h:42
virtual void savestate_write(FILE *)
Definition: netcvode.cpp:355
virtual DiscreteEvent * savestate_save()
Definition: netcvode.cpp:347
virtual void update_ptr(double *)
Definition: netcvode.cpp:6321
static PlayRecordSave * savestate_read(FILE *)
Definition: netcvode.cpp:374
virtual ~PlayRecord()
Definition: netcvode.cpp:6312
Cvode * cvode_
Definition: vrecitem.h:93
Object * ppobj_
Definition: vrecitem.h:92
virtual void frecord_init(TQItem *)
Definition: vrecitem.h:84
double * pd_
Definition: vrecitem.h:91
virtual void pr()
Definition: netcvode.cpp:6348
virtual bool uses(void *)
Definition: vrecitem.h:81
void play_add(Cvode *)
Definition: netcvode.cpp:6340
PlayRecord(double *pd, Object *ppobj=nil)
Definition: netcvode.cpp:6297
virtual void play_init()
Definition: vrecitem.h:58
virtual void disconnect(Observable *)
Definition: netcvode.cpp:6327
virtual void update(Observable *o)
Definition: vrecitem.h:78
virtual PlayRecordSave * savestate_save()
Definition: netcvode.cpp:370
void record_add(Cvode *)
Definition: netcvode.cpp:6332
virtual PlayRecordEvent * event()
Definition: vrecitem.h:63
int ith_
Definition: vrecitem.h:94
virtual void deliver(double t, NetCvode *)
Definition: vrecitem.h:62
virtual void install(Cvode *cv)
Definition: vrecitem.h:55
virtual void continuous(double t)
Definition: vrecitem.h:60
virtual int type()
Definition: vrecitem.h:67
virtual void record_init()
Definition: vrecitem.h:59
Definition: bbtqueue.h:6
virtual int type()
Definition: vrecitem.h:119
virtual bool uses(void *v)
Definition: vrecitem.h:124
virtual void record_init()
Definition: netcvode.cpp:6373
IvocVect * t_
Definition: vrecitem.h:128
virtual void disconnect(Observable *)
Definition: netcvode.cpp:6364
virtual void install(Cvode *)
Definition: netcvode.cpp:6369
virtual ~TvecRecord()
Definition: netcvode.cpp:6359
TvecRecord(Section *, IvocVect *tvec, Object *ppobj=nil)
Definition: netcvode.cpp:6352
virtual void continuous(double t)
Definition: netcvode.cpp:6377
Section * sec_
Definition: vrecitem.h:129
virtual int type()
Definition: vrecitem.h:293
virtual PlayRecordEvent * event()
Definition: vrecitem.h:277
void continuous(double tt)
Definition: vrecord.cpp:337
virtual void play_init()
Definition: vrecord.cpp:289
virtual void pr()
Definition: vrecord.cpp:390
virtual ~VecPlayContinuous()
Definition: vrecord.cpp:267
StmtInfo * si_
Definition: vrecitem.h:306
PlayRecordEvent * e_
Definition: vrecitem.h:305
IvocVect * discon_indices_
Definition: vrecitem.h:300
double interp(double th, double x0, double x1)
Definition: vrecitem.h:284
virtual void install(Cvode *)
Definition: vrecord.cpp:285
IvocVect * y_
Definition: vrecitem.h:298
virtual PlayRecordSave * savestate_save()
Definition: vrecord.cpp:425
virtual void disconnect(Observable *)
Definition: vrecord.cpp:280
IvocVect * t_
Definition: vrecitem.h:299
double interpolate(double tt)
Definition: vrecord.cpp:348
virtual bool uses(void *v)
Definition: vrecitem.h:290
virtual void deliver(double t, NetCvode *)
Definition: vrecord.cpp:310
void search(double tt)
Definition: vrecord.cpp:380
VecPlayContinuous(double *, IvocVect *y, IvocVect *t, IvocVect *discon, Object *ppobj=nil)
Definition: vrecord.cpp:227
void init(IvocVect *y, IvocVect *t, IvocVect *tdiscon)
Definition: vrecord.cpp:248
virtual ~VecPlayContinuousSave()
Definition: vrecord.cpp:436
VecPlayContinuousSave(PlayRecord *)
Definition: vrecord.cpp:429
virtual void savestate_write(FILE *)
Definition: vrecord.cpp:445
virtual void savestate_restore()
Definition: vrecord.cpp:437
virtual void savestate_read(FILE *)
Definition: vrecord.cpp:448
double dt_
Definition: vrecitem.h:248
virtual void install(Cvode *)
Definition: vrecord.cpp:175
virtual ~VecPlayStep()
Definition: vrecord.cpp:158
PlayRecordEvent * e_
Definition: vrecitem.h:251
int current_index_
Definition: vrecitem.h:249
virtual void disconnect(Observable *)
Definition: vrecord.cpp:170
IvocVect * t_
Definition: vrecitem.h:247
virtual void pr()
Definition: vrecord.cpp:222
IvocVect * y_
Definition: vrecitem.h:246
virtual PlayRecordSave * savestate_save()
Definition: vrecord.cpp:395
virtual PlayRecordEvent * event()
Definition: vrecitem.h:232
void init(IvocVect *y, IvocVect *t, double dt)
Definition: vrecord.cpp:144
virtual void deliver(double t, NetCvode *)
Definition: vrecord.cpp:194
virtual void play_init()
Definition: vrecord.cpp:179
virtual int type()
Definition: vrecitem.h:241
StmtInfo * si_
Definition: vrecitem.h:252
virtual bool uses(void *v)
Definition: vrecitem.h:238
VecPlayStep(double *, IvocVect *y, IvocVect *t, double dt, Object *ppobj=nil)
Definition: vrecord.cpp:131
virtual void savestate_write(FILE *)
Definition: vrecord.cpp:416
VecPlayStepSave(PlayRecord *)
Definition: vrecord.cpp:399
virtual ~VecPlayStepSave()
Definition: vrecord.cpp:403
virtual void savestate_read(FILE *)
Definition: vrecord.cpp:419
virtual void savestate_restore()
Definition: vrecord.cpp:404
IvocVect * y_
Definition: vrecitem.h:174
virtual void frecord_init(TQItem *)
Definition: netcvode.cpp:6468
virtual bool uses(void *v)
Definition: vrecitem.h:163
virtual void install(Cvode *)
Definition: netcvode.cpp:6457
virtual void deliver(double t, NetCvode *)
Definition: netcvode.cpp:6472
virtual ~VecRecordDiscrete()
Definition: netcvode.cpp:6421
virtual PlayRecordSave * savestate_save()
Definition: netcvode.cpp:6428
VecRecordDiscrete(double *, IvocVect *y, IvocVect *t, Object *ppobj=nil)
Definition: netcvode.cpp:6410
virtual PlayRecordEvent * event()
Definition: vrecitem.h:157
virtual void record_init()
Definition: netcvode.cpp:6461
virtual void disconnect(Observable *)
Definition: netcvode.cpp:6452
IvocVect * t_
Definition: vrecitem.h:175
PlayRecordEvent * e_
Definition: vrecitem.h:176
virtual int type()
Definition: vrecitem.h:169
VecRecordDiscreteSave(PlayRecord *)
Definition: netcvode.cpp:6432
virtual ~VecRecordDiscreteSave()
Definition: netcvode.cpp:6436
virtual void savestate_write(FILE *)
Definition: netcvode.cpp:6443
virtual void savestate_read(FILE *)
Definition: netcvode.cpp:6446
virtual void savestate_restore()
Definition: netcvode.cpp:6437
virtual bool uses(void *v)
Definition: vrecitem.h:201
PlayRecordEvent * e_
Definition: vrecitem.h:213
virtual void record_init()
Definition: netcvode.cpp:6516
virtual PlayRecordEvent * event()
Definition: vrecitem.h:196
virtual void disconnect(Observable *)
Definition: netcvode.cpp:6507
virtual int type()
Definition: vrecitem.h:206
virtual ~VecRecordDt()
Definition: netcvode.cpp:6490
double dt_
Definition: vrecitem.h:212
virtual void frecord_init(TQItem *)
Definition: netcvode.cpp:6521
virtual void deliver(double t, NetCvode *)
Definition: netcvode.cpp:6525
virtual void install(Cvode *)
Definition: netcvode.cpp:6512
IvocVect * y_
Definition: vrecitem.h:211
virtual PlayRecordSave * savestate_save()
Definition: netcvode.cpp:6496
VecRecordDt(double *, IvocVect *y, double dt, Object *ppobj=nil)
Definition: netcvode.cpp:6480
VecRecordDtSave(PlayRecord *)
Definition: netcvode.cpp:6500
virtual ~VecRecordDtSave()
Definition: netcvode.cpp:6502
virtual void savestate_restore()
Definition: netcvode.cpp:6503
virtual void disconnect(Observable *)
Definition: netcvode.cpp:6393
virtual void install(Cvode *)
Definition: netcvode.cpp:6398
YvecRecord(double *, IvocVect *y, Object *ppobj=nil)
Definition: netcvode.cpp:6381
IvocVect * y_
Definition: vrecitem.h:148
virtual ~YvecRecord()
Definition: netcvode.cpp:6388
virtual void continuous(double t)
Definition: netcvode.cpp:6406
virtual int type()
Definition: vrecitem.h:139
virtual void record_init()
Definition: netcvode.cpp:6402
virtual bool uses(void *v)
Definition: vrecitem.h:144
double dt
Definition: netcvode.cpp:76
double t
Definition: cvodeobj.cpp:59
#define v
Definition: md1redef.h:4
#define PlayRecordEventType
Definition: netcon.h:45
static double check(double t, Daspk *ida)
Definition: nrndaspk.cpp:209
size_t q
o
Definition: seclist.cpp:175
Represent main neuron object computed by single thread.
Definition: multicore.h:58
Definition: hocdec.h:227
#define YvecRecordType
Definition: vrecitem.h:24
#define VecPlayContinuousType
Definition: vrecitem.h:22
#define VecRecordDiscreteType
Definition: vrecitem.h:19
#define TvecRecordType
Definition: vrecitem.h:23
#define VecPlayStepType
Definition: vrecitem.h:21
#define VecRecordDtType
Definition: vrecitem.h:20
declarePtrList(PlayRecList, PlayRecord) class PlayRecordSave
Definition: vrecitem.h:97