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() { return PlayRecordEventType; }
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:
51  PlayRecord(double* pd, Object* ppobj = nil);
52  virtual ~PlayRecord();
53  virtual void install(Cvode* cv){ cvode_ = cv; } // cvode play or record list?
54  virtual void play_init(){} // called near beginning of finitialize
55  virtual void record_init(){} // called near end of finitialize and frecord_init()
56  virtual void continuous(double t){} // play - every f(y, t) or res(y', y, t); record - advance_tn and initialize flag
57  virtual void deliver(double t, NetCvode*){} // at associated DiscreteEvent
58  virtual PlayRecordEvent* event() { return nil;}
59  virtual void pr(); // print identifying info
60  virtual int type() { return 0; }
61 
62  // install normally calls one of these. Cvode may be nil.
63  void play_add(Cvode*);
64  void record_add(Cvode*);
65 
66  // administration
67  virtual void update_ptr(double*);
68  virtual void disconnect(Observable*);
69  virtual void update(Observable* o) {disconnect(o);}
70  virtual bool uses(void*) { return false; }
71  virtual void frecord_init(TQItem*) {}
72  // for example, subclasses use things that may not go out of existence but wish us
73  // to remove ourselves from the PlayRecord system. e.g Vector.play_remove().
74 
75  virtual PlayRecordSave* savestate_save();
76  static PlayRecordSave* savestate_read(FILE*);
77 
78  double* pd_;
81  int ith_; // The thread index
82 };
83 
85 
86 class PlayRecordSave {
87 public:
88  PlayRecordSave(PlayRecord*);
89  virtual ~PlayRecordSave();
90  virtual void savestate_restore(){};
91  virtual void savestate_write(FILE*){}
92  virtual void savestate_read(FILE*){}
93  void check();
94 
95  PlayRecord* pr_;
96  int prl_index_;
97 };
98 
99 class TvecRecord: public PlayRecord {
100 public:
101  TvecRecord(Section*, IvocVect* tvec, Object* ppobj = nil);
102  virtual ~TvecRecord();
103  virtual void install(Cvode*);
104  virtual void record_init();
105  virtual void continuous(double t);
106  virtual int type() { return TvecRecordType; }
107 
108  virtual void disconnect(Observable*);
109  virtual bool uses(void* v) { return (void*)t_ == v; }
110 
113 };
114 
115 class YvecRecord : public PlayRecord {
116 public:
117  YvecRecord(double*, IvocVect* y, Object* ppobj = nil);
118  virtual ~YvecRecord();
119  virtual void install(Cvode*);
120  virtual void record_init();
121  virtual void continuous(double t);
122  virtual int type() { return YvecRecordType; }
123 
124  virtual void disconnect(Observable*);
125  virtual bool uses(void* v) { return (void*)y_== v ;}
126 
128 };
129 
131 public:
132  VecRecordDiscrete(double*, IvocVect* y, IvocVect* t, Object* ppobj = nil);
133  virtual ~VecRecordDiscrete();
134  virtual void install(Cvode*);
135  virtual void record_init();
136  virtual PlayRecordEvent* event() { return e_;}
137  virtual void deliver(double t, NetCvode*);
138 
139  virtual void disconnect(Observable*);
140  virtual bool uses(void* v) { return (void*)y_== v || (void*)t_ == v;}
141 
142  virtual void frecord_init(TQItem*);
143 
144  virtual int type() { return VecRecordDiscreteType; }
145  virtual PlayRecordSave* savestate_save();
146 
150 };
151 
152 class VecRecordDiscreteSave : public PlayRecordSave {
153 public:
155  virtual ~VecRecordDiscreteSave();
156  virtual void savestate_restore();
157  virtual void savestate_write(FILE*);
158  virtual void savestate_read(FILE*);
159  int cursize_;
160 };
161 
162 class VecRecordDt : public PlayRecord {
163 public:
164  VecRecordDt(double*, IvocVect* y, double dt, Object* ppobj = nil);
165  virtual ~VecRecordDt();
166  virtual void install(Cvode*);
167  virtual void record_init();
168  virtual void deliver(double t, NetCvode*);
169  virtual PlayRecordEvent* event() { return e_;}
170 
171  virtual void disconnect(Observable*);
172  virtual bool uses(void* v) { return (void*)y_== v;}
173 
174  virtual void frecord_init(TQItem*);
175  virtual int type() { return VecRecordDtType; }
176  virtual PlayRecordSave* savestate_save();
177 
179  double dt_;
181 };
182 
183 class VecRecordDtSave : public PlayRecordSave {
184 public:
186  virtual ~VecRecordDtSave();
187  virtual void savestate_restore();
188 };
189 
190 class VecPlayStep : public PlayRecord {
191 public:
192  VecPlayStep(double*, IvocVect* y, IvocVect* t, double dt, Object* ppobj = nil);
193  VecPlayStep( const char* s, IvocVect* y, IvocVect* t, double dt, Object* ppobj = nil);
194  void init(IvocVect* y, IvocVect* t, double dt);
195  virtual ~VecPlayStep();
196  virtual void install(Cvode*);
197  virtual void play_init();
198  virtual void deliver(double t, NetCvode*);
199  virtual PlayRecordEvent* event() { return e_;}
200  virtual void pr();
201 
202  virtual void disconnect(Observable*);
203  virtual bool uses(void* v) { return (void*)y_== v || (void*)t_ == v;}
204  virtual int type() { return VecPlayStepType; }
205  virtual PlayRecordSave* savestate_save();
206 
209  double dt_;
211 
214 };
215 class VecPlayStepSave : public PlayRecordSave {
216 public:
218  virtual ~VecPlayStepSave();
219  virtual void savestate_restore();
220  virtual void savestate_write(FILE*);
221  virtual void savestate_read(FILE*);
223 };
224 
226 public:
227  VecPlayContinuous(double*, IvocVect* y, IvocVect* t, IvocVect* discon, Object* ppobj = nil);
228  VecPlayContinuous( const char* s, IvocVect* y, IvocVect* t, IvocVect* discon, Object* ppobj = nil);
229  virtual ~VecPlayContinuous();
230  void init(IvocVect* y, IvocVect* t, IvocVect* tdiscon);
231  virtual void install(Cvode*);
232  virtual void play_init();
233  virtual void deliver(double t, NetCvode*);
234  virtual PlayRecordEvent* event() { return e_;}
235  virtual void pr();
236 
237  void continuous(double tt);
238  double interpolate(double tt);
239  double interp(double th, double x0, double x1){ return x0 + (x1 - x0)*th; }
240  void search(double tt);
241 
242  virtual void disconnect(Observable*);
243  virtual bool uses(void* v) { return (void*)y_== v || (void*)t_ == v || (void*)discon_indices_ == v;}
244  virtual int type() { return VecPlayContinuousType; }
245  virtual PlayRecordSave* savestate_save();
246 
253 
256 };
257 class VecPlayContinuousSave : public PlayRecordSave {
258 public:
260  virtual ~VecPlayContinuousSave();
261  virtual void savestate_restore();
262  virtual void savestate_write(FILE*);
263  virtual void savestate_read(FILE*);
267 };
268 
269 #endif
o
Definition: seclist.cpp:180
virtual bool uses(void *v)
Definition: vrecitem.h:203
IvocVect * y_
Definition: vrecitem.h:207
virtual void disconnect(Observable *)
Definition: netcon.h:64
virtual bool uses(void *v)
Definition: vrecitem.h:172
virtual void savestate_restore(double deliverytime, NetCvode *)
Definition: netcvode.cpp:330
virtual void deliver(double, NetCvode *, NrnThread *)
Definition: netcvode.cpp:3464
Represent main neuron object computed by single thread.
Definition: multicore.h:58
IvocVect * y_
Definition: vrecitem.h:147
PlayRecordEvent * e_
Definition: vrecitem.h:254
virtual int type()
Definition: vrecitem.h:60
virtual void record_init()
Definition: vrecitem.h:55
#define v
Definition: md1redef.h:4
Section * sec_
Definition: vrecitem.h:112
PlayRecordEvent * e_
Definition: vrecitem.h:149
#define PlayRecordEventType
Definition: netcon.h:49
Definition: bbtqueue.h:6
virtual NrnThread * thread()
Definition: netcvode.cpp:3473
double * pd_
Definition: vrecitem.h:78
virtual bool uses(void *v)
Definition: vrecitem.h:109
virtual bool uses(void *)
Definition: vrecitem.h:70
void init()
Definition: init.cpp:169
double dt
Definition: init.cpp:123
double dt_
Definition: vrecitem.h:209
StmtInfo * si_
Definition: vrecitem.h:213
static unsigned long playrecord_send_
Definition: vrecitem.h:39
virtual DiscreteEvent * savestate_save()
Definition: netcvode.cpp:325
virtual void update(Observable *o)
Definition: vrecitem.h:69
#define install
Definition: redef.h:82
virtual int type()
Definition: vrecitem.h:37
IvocVect * t_
Definition: vrecitem.h:248
static double check(double t, Daspk *ida)
Definition: nrndaspk.cpp:214
virtual void install(Cvode *cv)
Definition: vrecitem.h:53
_CONST char * s
Definition: system.cpp:74
#define VecRecordDiscreteType
Definition: vrecitem.h:19
virtual int type()
Definition: vrecitem.h:244
declarePtrList(PlayRecList, PlayRecord) class PlayRecordSave
Definition: vrecitem.h:84
virtual void play_init()
Definition: vrecitem.h:54
virtual void frecord_init(TQItem *q)
Definition: netcvode.cpp:3460
virtual int type()
Definition: vrecitem.h:204
static double interpolate(double x0, double x1, double y0, double y1, double xnew)
Definition: nrnpy_nrn.cpp:1406
#define TvecRecordType
Definition: vrecitem.h:23
virtual void frecord_init(TQItem *)
Definition: vrecitem.h:71
virtual int type()
Definition: vrecitem.h:144
double dt_
Definition: vrecitem.h:179
PlayRecordEvent * e_
Definition: vrecitem.h:180
static N_Vector y_
#define nil
Definition: enter-scope.h:36
static DiscreteEvent * savestate_read(FILE *)
Definition: netcvode.cpp:338
static unsigned long playrecord_deliver_
Definition: vrecitem.h:40
IvocVect * t_
Definition: vrecitem.h:111
virtual int type()
Definition: vrecitem.h:122
virtual bool uses(void *v)
Definition: vrecitem.h:125
#define VecRecordDtType
Definition: vrecitem.h:20
IvocVect * t_
Definition: vrecitem.h:208
IvocVect * y_
Definition: vrecitem.h:178
IvocVect * t_
Definition: vrecitem.h:148
IvocVect * y_
Definition: vrecitem.h:247
virtual void savestate_write(FILE *)
Definition: netcvode.cpp:333
Definition: hocdec.h:226
Definition: cvodeobj.h:75
double interp(double th, double x0, double x1)
Definition: vrecitem.h:239
Cvode * cvode_
Definition: vrecitem.h:80
Object * ppobj_
Definition: vrecitem.h:79
virtual PlayRecordEvent * event()
Definition: vrecitem.h:199
#define VecPlayContinuousType
Definition: vrecitem.h:22
int current_index_
Definition: vrecitem.h:210
virtual bool uses(void *v)
Definition: vrecitem.h:140
PlayRecord * plr_
Definition: vrecitem.h:38
virtual void pr(const char *, double t, NetCvode *)
Definition: netcvode.cpp:3475
virtual int type()
Definition: vrecitem.h:106
virtual void continuous(double t)
Definition: vrecitem.h:56
virtual void deliver(double t, NetCvode *)
Definition: vrecitem.h:57
double t
Definition: init.cpp:123
#define YvecRecordType
Definition: vrecitem.h:24
#define VecPlayStepType
Definition: vrecitem.h:21
size_t q
virtual bool uses(void *v)
Definition: vrecitem.h:243
virtual int type()
Definition: vrecitem.h:175
virtual PlayRecordEvent * event()
Definition: vrecitem.h:234
virtual PlayRecordEvent * event()
Definition: vrecitem.h:58
IvocVect * y_
Definition: vrecitem.h:127
virtual PlayRecordEvent * event()
Definition: vrecitem.h:169
StmtInfo * si_
Definition: vrecitem.h:255
int ith_
Definition: vrecitem.h:81
virtual ~PlayRecordEvent()
Definition: netcvode.cpp:323
IvocVect * discon_indices_
Definition: vrecitem.h:249
virtual PlayRecordEvent * event()
Definition: vrecitem.h:136
PlayRecordEvent * e_
Definition: vrecitem.h:212