Right now, the Recorder classes are implemented specially for each model. However, the fundamental operation of a recorder is as follows:
- A set of variables is specified for recording. Each variable has a name and dimensions (it may be the case that one of the dimensions is unknown ahead of time, for example, for the list of spike times produced by neurons — we know how many neurons, but we don't know how many spikes each neuron will produce).
- Each variable has a temporal resolution. Some variables need to be recorded (can update) every time step; some will not update more often than once per epoch.
- In addition, as set of constants may be specified. These are values that do not change during the simulation, such as neuron types, vertex locations, etc.
- The recorder has an output format, which is captured by the subclass, currently XML or HDF5.
Can we do something like the ParameterManager, where we register variables with a recorder object, providing whatever information is needed at that time (variable name as a string, variable update interval, variable dimensions)? The recorder would have a method that is periodically called to buffer/output variable contents. Using the above scheme, perhaps we would no longer need to provide a list of vertices to attach recorders to, since recording would be at a variable basis and so could be completely generic (we could record edge variables, for instance).
Right now, the Recorder classes are implemented specially for each model. However, the fundamental operation of a recorder is as follows:
Can we do something like the ParameterManager, where we register variables with a recorder object, providing whatever information is needed at that time (variable name as a string, variable update interval, variable dimensions)? The recorder would have a method that is periodically called to buffer/output variable contents. Using the above scheme, perhaps we would no longer need to provide a list of vertices to attach recorders to, since recording would be at a variable basis and so could be completely generic (we could record edge variables, for instance).