Custom Visualizations
Posted: 06 Aug 2013, 16:42
All,
A few of my colleagues and I are trying to add some custom visualization functionality to a number of self-paced SMR BCI paradigms. Specifically we would like to add a window, displayed in addition to standard visual feedback for the task, that displays the control signal power for the current sample block (imagine a vertical power meter). We could not find this functionality within the BCI framework so started working on a custom implementation but ran in to a few questions:
First, since this is going to be used with a variety of different application modules, we wanted to make the incorporation of the visualizer as simple as possible. The main approach we're considering is implementing a custom filter (effectively a copy of DummyFilter) that would be put at the end of the SignalProcessing filter chain and handles the visualization on its own. Since all of our BCI paradigms use the same SignalProcessing module, this wouldn't require addition of code to each Application module. However, it makes the assumption that the SignalProcessing and Application modules are being run on the same machine (always the case for us), which didn't seem to fit within the BCI2000 model. Alternatively, we considered building an Extension [1] (a la EyeTrackerLogger), but these appear to only have access to states, not signals. Does anyone have suggestions for the cleanest / easiest way to get the functionality we want?
Second, we went down the path of implementing a custom filter [2], and could tinker with the GenericVisualization class as is demonstrated in the programming tutorial, however it wasn't readily apparent to us how we could replace GenericVisualization with a custom class that has the desired visualization behavior (i.e. what functionality to override when subclassing GenericVisualization). If anyone has ideas/experience on this front that would be very helpful.
It may end up being that the simplest path to success is to build our own QT objects in a custom filter, but before going that route, we wanted to float our questions out to the Crowd to see if anyone had suggestions.
Thanks!
Jeremiah
[1] http://www.bci2000.org/wiki/index.php/C ... Extensions
[2] http://www.bci2000.org/wiki/index.php/P ... ing_Filter
A few of my colleagues and I are trying to add some custom visualization functionality to a number of self-paced SMR BCI paradigms. Specifically we would like to add a window, displayed in addition to standard visual feedback for the task, that displays the control signal power for the current sample block (imagine a vertical power meter). We could not find this functionality within the BCI framework so started working on a custom implementation but ran in to a few questions:
First, since this is going to be used with a variety of different application modules, we wanted to make the incorporation of the visualizer as simple as possible. The main approach we're considering is implementing a custom filter (effectively a copy of DummyFilter) that would be put at the end of the SignalProcessing filter chain and handles the visualization on its own. Since all of our BCI paradigms use the same SignalProcessing module, this wouldn't require addition of code to each Application module. However, it makes the assumption that the SignalProcessing and Application modules are being run on the same machine (always the case for us), which didn't seem to fit within the BCI2000 model. Alternatively, we considered building an Extension [1] (a la EyeTrackerLogger), but these appear to only have access to states, not signals. Does anyone have suggestions for the cleanest / easiest way to get the functionality we want?
Second, we went down the path of implementing a custom filter [2], and could tinker with the GenericVisualization class as is demonstrated in the programming tutorial, however it wasn't readily apparent to us how we could replace GenericVisualization with a custom class that has the desired visualization behavior (i.e. what functionality to override when subclassing GenericVisualization). If anyone has ideas/experience on this front that would be very helpful.
It may end up being that the simplest path to success is to build our own QT objects in a custom filter, but before going that route, we wanted to float our questions out to the Crowd to see if anyone had suggestions.
Thanks!
Jeremiah
[1] http://www.bci2000.org/wiki/index.php/C ... Extensions
[2] http://www.bci2000.org/wiki/index.php/P ... ing_Filter