NEURON
vrecitem.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <InterViews/observe.h>
4 #include <netcon.h>
5 #include <ivocvect.h>
6 
7 class PlayRecord;
8 class PlayRecordSave;
10 class VecPlayStepSave;
12 class StmtInfo;
13 struct NrnThread;
14 struct Section;
15 
16 // SaveState subtypes for PlayRecordType and trajectory return type
17 #define VecRecordDiscreteType 1
18 #define VecRecordDtType 2
19 #define VecPlayStepType 3
20 #define VecPlayContinuousType 4
21 #define TvecRecordType 5
22 #define YvecRecordType 6
23 #define GLineRecordType 7
24 #define GVectorRecordType 8
25 
26 // used by PlayRecord subclasses that utilize discrete events
28  public:
30  virtual ~PlayRecordEvent();
31  virtual void deliver(double, NetCvode*, NrnThread*);
32  virtual void pr(const char*, double t, NetCvode*);
33  virtual void frecord_init(TQItem* q);
34  virtual NrnThread* thread();
35  virtual int type() {
36  return PlayRecordEventType;
37  }
39  static unsigned long playrecord_send_;
40  static unsigned long playrecord_deliver_;
41 
42  virtual DiscreteEvent* savestate_save();
43  virtual void savestate_restore(double deliverytime, NetCvode*);
44  virtual void savestate_write(FILE*);
45  static DiscreteEvent* savestate_read(FILE*);
46 };
47 
48 // common interface for Play and Record for all integration methods.
49 class PlayRecord: public Observer {
50  public:
52  virtual ~PlayRecord();
53  virtual void install(Cvode* cv) {
54  cvode_ = cv;
55  } // cvode play or record list?
56  virtual void play_init() {} // called near beginning of finitialize
57  virtual void record_init() {} // called near end of finitialize and frecord_init()
58  virtual void continuous(double t) {
59  } // play - every f(y, t) or res(y', y, t); record - advance_tn and initialize flag
60  virtual void deliver(double t, NetCvode*) {} // at associated DiscreteEvent
61  virtual PlayRecordEvent* event() {
62  return nullptr;
63  }
64  virtual void pr(); // print identifying info
65  virtual int type() {
66  return 0;
67  }
68 
69  // install normally calls one of these. Cvode may be nullptr.
70  void play_add(Cvode*);
71  void record_add(Cvode*);
72 
73  // administration
74  virtual void disconnect(Observable*);
75  virtual void update(Observable* o) {
76  disconnect(o);
77  }
78  virtual bool uses(void*) {
79  return false;
80  }
81  virtual void frecord_init(TQItem*) {}
82  // for example, subclasses use things that may not go out of existence but wish us
83  // to remove ourselves from the PlayRecord system. e.g Vector.play_remove().
84 
85  virtual PlayRecordSave* savestate_save();
86  static PlayRecordSave* savestate_read(FILE*);
87 
88  // pd_ can refer to a voltage, and those are stored in a modern container,
89  // so we need to use data_handle
93  int ith_; // The thread index
94 };
95 
97  public:
99  virtual ~PlayRecordSave();
100  virtual void savestate_restore(){};
101  virtual void savestate_write(FILE*) {}
102  virtual void savestate_read(FILE*) {}
103  void check();
104 
107 };
108 
109 class TvecRecord: public PlayRecord {
110  public:
111  TvecRecord(Section*, IvocVect* tvec, Object* ppobj = nullptr);
112  virtual ~TvecRecord();
113  virtual void install(Cvode*);
114  virtual void record_init();
115  virtual void continuous(double t);
116  virtual int type() {
117  return TvecRecordType;
118  }
119 
120  virtual void disconnect(Observable*);
121  virtual bool uses(void* v) {
122  return (void*) t_ == v;
123  }
124 
127 };
128 
129 class YvecRecord: public PlayRecord {
130  public:
132  virtual ~YvecRecord();
133  virtual void install(Cvode*);
134  virtual void record_init();
135  virtual void continuous(double t);
136  virtual int type() {
137  return YvecRecordType;
138  }
139 
140  virtual void disconnect(Observable*);
141  virtual bool uses(void* v) {
142  return (void*) y_ == v;
143  }
144 
146 };
147 
149  public:
151  IvocVect* y,
152  IvocVect* t,
153  Object* ppobj = nullptr);
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 
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:
192  IvocVect* y,
193  double dt,
194  Object* ppobj = nullptr);
195  virtual ~VecRecordDt();
196  virtual void install(Cvode*);
197  virtual void record_init();
198  virtual void deliver(double t, NetCvode*);
199  virtual PlayRecordEvent* event() {
200  return e_;
201  }
202 
203  virtual void disconnect(Observable*);
204  virtual bool uses(void* v) {
205  return (void*) y_ == v;
206  }
207 
208  virtual void frecord_init(TQItem*);
209  virtual int type() {
210  return VecRecordDtType;
211  }
212  virtual PlayRecordSave* savestate_save();
213 
215  double dt_;
217 };
218 
220  public:
222  virtual ~VecRecordDtSave();
223  virtual void savestate_restore();
224 };
225 
226 class VecPlayStep: public PlayRecord {
227  public:
229  IvocVect* y,
230  IvocVect* t,
231  double dt,
232  Object* ppobj = nullptr);
233  VecPlayStep(const char* s, IvocVect* y, IvocVect* t, double dt, Object* ppobj = nullptr);
234  void init(IvocVect* y, IvocVect* t, double dt);
235  virtual ~VecPlayStep();
236  virtual void install(Cvode*);
237  virtual void play_init();
238  virtual void deliver(double t, NetCvode*);
239  virtual PlayRecordEvent* event() {
240  return e_;
241  }
242  virtual void pr();
243 
244  virtual void disconnect(Observable*);
245  virtual bool uses(void* v) {
246  return (void*) y_ == v || (void*) t_ == v;
247  }
248  virtual int type() {
249  return VecPlayStepType;
250  }
251  virtual PlayRecordSave* savestate_save();
252 
255  double dt_;
257 
260 };
262  public:
264  virtual ~VecPlayStepSave();
265  virtual void savestate_restore();
266  virtual void savestate_write(FILE*);
267  virtual void savestate_read(FILE*);
269 };
270 
272  public:
274  IvocVect* y,
275  IvocVect* t,
276  IvocVect* discon,
277  Object* ppobj = nullptr);
278  VecPlayContinuous(const char* s,
279  IvocVect* y,
280  IvocVect* t,
281  IvocVect* discon,
282  Object* ppobj = nullptr);
283  virtual ~VecPlayContinuous();
284  void init(IvocVect* y, IvocVect* t, IvocVect* tdiscon);
285  virtual void install(Cvode*);
286  virtual void play_init();
287  virtual void deliver(double t, NetCvode*);
288  virtual PlayRecordEvent* event() {
289  return e_;
290  }
291  virtual void pr();
292 
293  void continuous(double tt);
294  double interpolate(double tt);
295  double interp(double th, double x0, double x1) {
296  return x0 + (x1 - x0) * th;
297  }
298  void search(double tt);
299 
300  virtual void disconnect(Observable*);
301  virtual bool uses(void* v) {
302  return (void*) y_ == v || (void*) t_ == v || (void*) discon_indices_ == v;
303  }
304  virtual int type() {
305  return VecPlayContinuousType;
306  }
307  virtual PlayRecordSave* savestate_save();
308 
315 
318 };
320  public:
322  virtual ~VecPlayContinuousSave();
323  virtual void savestate_restore();
324  virtual void savestate_write(FILE*);
325  virtual void savestate_read(FILE*);
329 };
Definition: cvodeobj.h:97
virtual void deliver(double, NetCvode *, NrnThread *)
Definition: netcvode.cpp:3303
virtual void frecord_init(TQItem *q)
Definition: netcvode.cpp:3299
virtual int type()
Definition: vrecitem.h:35
static unsigned long playrecord_send_
Definition: vrecitem.h:39
virtual ~PlayRecordEvent()
Definition: netcvode.cpp:296
static DiscreteEvent * savestate_read(FILE *)
Definition: netcvode.cpp:311
PlayRecord * plr_
Definition: vrecitem.h:38
virtual NrnThread * thread()
Definition: netcvode.cpp:3312
virtual void savestate_restore(double deliverytime, NetCvode *)
Definition: netcvode.cpp:303
virtual void pr(const char *, double t, NetCvode *)
Definition: netcvode.cpp:3316
static unsigned long playrecord_deliver_
Definition: vrecitem.h:40
virtual void savestate_write(FILE *)
Definition: netcvode.cpp:306
virtual DiscreteEvent * savestate_save()
Definition: netcvode.cpp:298
static PlayRecordSave * savestate_read(FILE *)
Definition: netcvode.cpp:325
virtual ~PlayRecord()
Definition: netcvode.cpp:6069
Cvode * cvode_
Definition: vrecitem.h:92
neuron::container::data_handle< double > pd_
Definition: vrecitem.h:90
Object * ppobj_
Definition: vrecitem.h:91
PlayRecord(neuron::container::data_handle< double > pd, Object *ppobj=nullptr)
Definition: netcvode.cpp:6054
virtual void frecord_init(TQItem *)
Definition: vrecitem.h:81
virtual void pr()
Definition: netcvode.cpp:6099
virtual bool uses(void *)
Definition: vrecitem.h:78
void play_add(Cvode *)
Definition: netcvode.cpp:6091
virtual void play_init()
Definition: vrecitem.h:56
virtual void disconnect(Observable *)
Definition: netcvode.cpp:6078
virtual void update(Observable *o)
Definition: vrecitem.h:75
virtual PlayRecordSave * savestate_save()
Definition: netcvode.cpp:321
void record_add(Cvode *)
Definition: netcvode.cpp:6083
virtual PlayRecordEvent * event()
Definition: vrecitem.h:61
int ith_
Definition: vrecitem.h:93
virtual void deliver(double t, NetCvode *)
Definition: vrecitem.h:60
virtual void install(Cvode *cv)
Definition: vrecitem.h:53
virtual void continuous(double t)
Definition: vrecitem.h:58
virtual int type()
Definition: vrecitem.h:65
virtual void record_init()
Definition: vrecitem.h:57
PlayRecord * pr_
Definition: vrecitem.h:105
virtual void savestate_read(FILE *)
Definition: vrecitem.h:102
PlayRecordSave(PlayRecord *)
Definition: netcvode.cpp:355
virtual void savestate_restore()
Definition: vrecitem.h:100
virtual void savestate_write(FILE *)
Definition: vrecitem.h:101
virtual ~PlayRecordSave()
Definition: netcvode.cpp:360
virtual int type()
Definition: vrecitem.h:116
virtual bool uses(void *v)
Definition: vrecitem.h:121
virtual void record_init()
Definition: netcvode.cpp:6124
TvecRecord(Section *, IvocVect *tvec, Object *ppobj=nullptr)
Definition: netcvode.cpp:6103
IvocVect * t_
Definition: vrecitem.h:125
virtual void disconnect(Observable *)
Definition: netcvode.cpp:6115
virtual void install(Cvode *)
Definition: netcvode.cpp:6120
virtual ~TvecRecord()
Definition: netcvode.cpp:6110
virtual void continuous(double t)
Definition: netcvode.cpp:6128
Section * sec_
Definition: vrecitem.h:126
virtual int type()
Definition: vrecitem.h:304
virtual PlayRecordEvent * event()
Definition: vrecitem.h:288
void continuous(double tt)
Definition: vrecord.cpp:345
virtual void play_init()
Definition: vrecord.cpp:297
virtual void pr()
Definition: vrecord.cpp:398
VecPlayContinuous(neuron::container::data_handle< double > pd, IvocVect *y, IvocVect *t, IvocVect *discon, Object *ppobj=nullptr)
Definition: vrecord.cpp:235
virtual ~VecPlayContinuous()
Definition: vrecord.cpp:275
StmtInfo * si_
Definition: vrecitem.h:317
PlayRecordEvent * e_
Definition: vrecitem.h:316
IvocVect * discon_indices_
Definition: vrecitem.h:311
double interp(double th, double x0, double x1)
Definition: vrecitem.h:295
virtual void install(Cvode *)
Definition: vrecord.cpp:293
IvocVect * y_
Definition: vrecitem.h:309
virtual PlayRecordSave * savestate_save()
Definition: vrecord.cpp:433
virtual void disconnect(Observable *)
Definition: vrecord.cpp:288
IvocVect * t_
Definition: vrecitem.h:310
double interpolate(double tt)
Definition: vrecord.cpp:356
virtual bool uses(void *v)
Definition: vrecitem.h:301
virtual void deliver(double t, NetCvode *)
Definition: vrecord.cpp:318
void search(double tt)
Definition: vrecord.cpp:388
void init(IvocVect *y, IvocVect *t, IvocVect *tdiscon)
Definition: vrecord.cpp:256
virtual ~VecPlayContinuousSave()
Definition: vrecord.cpp:444
VecPlayContinuousSave(PlayRecord *)
Definition: vrecord.cpp:437
virtual void savestate_write(FILE *)
Definition: vrecord.cpp:453
virtual void savestate_restore()
Definition: vrecord.cpp:445
virtual void savestate_read(FILE *)
Definition: vrecord.cpp:456
double dt_
Definition: vrecitem.h:255
virtual void install(Cvode *)
Definition: vrecord.cpp:176
virtual ~VecPlayStep()
Definition: vrecord.cpp:159
PlayRecordEvent * e_
Definition: vrecitem.h:258
int current_index_
Definition: vrecitem.h:256
virtual void disconnect(Observable *)
Definition: vrecord.cpp:171
IvocVect * t_
Definition: vrecitem.h:254
virtual void pr()
Definition: vrecord.cpp:230
IvocVect * y_
Definition: vrecitem.h:253
virtual PlayRecordSave * savestate_save()
Definition: vrecord.cpp:403
virtual PlayRecordEvent * event()
Definition: vrecitem.h:239
VecPlayStep(neuron::container::data_handle< double >, IvocVect *y, IvocVect *t, double dt, Object *ppobj=nullptr)
Definition: vrecord.cpp:128
void init(IvocVect *y, IvocVect *t, double dt)
Definition: vrecord.cpp:145
virtual void deliver(double t, NetCvode *)
Definition: vrecord.cpp:195
virtual void play_init()
Definition: vrecord.cpp:180
virtual int type()
Definition: vrecitem.h:248
StmtInfo * si_
Definition: vrecitem.h:259
virtual bool uses(void *v)
Definition: vrecitem.h:245
virtual void savestate_write(FILE *)
Definition: vrecord.cpp:424
VecPlayStepSave(PlayRecord *)
Definition: vrecord.cpp:407
virtual ~VecPlayStepSave()
Definition: vrecord.cpp:411
virtual void savestate_read(FILE *)
Definition: vrecord.cpp:427
virtual void savestate_restore()
Definition: vrecord.cpp:412
IvocVect * y_
Definition: vrecitem.h:174
virtual void frecord_init(TQItem *)
Definition: netcvode.cpp:6225
virtual bool uses(void *v)
Definition: vrecitem.h:163
virtual void install(Cvode *)
Definition: netcvode.cpp:6214
VecRecordDiscrete(neuron::container::data_handle< double >, IvocVect *y, IvocVect *t, Object *ppobj=nullptr)
Definition: netcvode.cpp:6164
virtual void deliver(double t, NetCvode *)
Definition: netcvode.cpp:6229
virtual ~VecRecordDiscrete()
Definition: netcvode.cpp:6178
virtual PlayRecordSave * savestate_save()
Definition: netcvode.cpp:6185
virtual PlayRecordEvent * event()
Definition: vrecitem.h:157
virtual void record_init()
Definition: netcvode.cpp:6218
virtual void disconnect(Observable *)
Definition: netcvode.cpp:6209
IvocVect * t_
Definition: vrecitem.h:175
PlayRecordEvent * e_
Definition: vrecitem.h:176
virtual int type()
Definition: vrecitem.h:169
VecRecordDiscreteSave(PlayRecord *)
Definition: netcvode.cpp:6189
virtual ~VecRecordDiscreteSave()
Definition: netcvode.cpp:6193
virtual void savestate_write(FILE *)
Definition: netcvode.cpp:6200
virtual void savestate_read(FILE *)
Definition: netcvode.cpp:6203
virtual void savestate_restore()
Definition: netcvode.cpp:6194
virtual bool uses(void *v)
Definition: vrecitem.h:204
PlayRecordEvent * e_
Definition: vrecitem.h:216
virtual void record_init()
Definition: netcvode.cpp:6276
virtual PlayRecordEvent * event()
Definition: vrecitem.h:199
virtual void disconnect(Observable *)
Definition: netcvode.cpp:6267
virtual int type()
Definition: vrecitem.h:209
virtual ~VecRecordDt()
Definition: netcvode.cpp:6250
double dt_
Definition: vrecitem.h:215
virtual void frecord_init(TQItem *)
Definition: netcvode.cpp:6281
virtual void deliver(double t, NetCvode *)
Definition: netcvode.cpp:6285
virtual void install(Cvode *)
Definition: netcvode.cpp:6272
VecRecordDt(neuron::container::data_handle< double >, IvocVect *y, double dt, Object *ppobj=nullptr)
Definition: netcvode.cpp:6237
IvocVect * y_
Definition: vrecitem.h:214
virtual PlayRecordSave * savestate_save()
Definition: netcvode.cpp:6256
VecRecordDtSave(PlayRecord *)
Definition: netcvode.cpp:6260
virtual ~VecRecordDtSave()
Definition: netcvode.cpp:6262
virtual void savestate_restore()
Definition: netcvode.cpp:6263
virtual void disconnect(Observable *)
Definition: netcvode.cpp:6144
virtual void install(Cvode *)
Definition: netcvode.cpp:6149
YvecRecord(neuron::container::data_handle< double >, IvocVect *y, Object *ppobj=nullptr)
Definition: netcvode.cpp:6132
IvocVect * y_
Definition: vrecitem.h:145
virtual ~YvecRecord()
Definition: netcvode.cpp:6139
virtual void continuous(double t)
Definition: netcvode.cpp:6160
virtual int type()
Definition: vrecitem.h:136
virtual void record_init()
Definition: netcvode.cpp:6153
virtual bool uses(void *v)
Definition: vrecitem.h:141
#define v
Definition: md1redef.h:11
#define PlayRecordEventType
Definition: vrecitem.h:18
#define YvecRecordType
Definition: vrecitem.h:22
#define VecPlayContinuousType
Definition: vrecitem.h:20
#define VecRecordDiscreteType
Definition: vrecitem.h:17
#define TvecRecordType
Definition: vrecitem.h:21
#define VecPlayStepType
Definition: vrecitem.h:19
#define VecRecordDtType
Definition: vrecitem.h:18
size_t q
s
Definition: multisend.cpp:521
Represent main neuron object computed by single thread.
Definition: multicore.h:58
Definition: hocdec.h:173
Definition: tqitem.hpp:3