Skip to content

Discussion: Channel data types #651

@aacuevas

Description

@aacuevas

The intention of this post is to start a conversation on what I believe should be one of the next points of improvement for the GUI at large.

Historically, the GUI has had support for 3 "channel types", all derived from what the acquisition board could produce: "headstage" (in the uV range), "ADC" in the V range and "AUX" in the "mv" range, even if this last one represented the accelerometer values, so the actual output is somewhat arbitrary.

However, the GUI is steadily expanding towards supporting more and more devices, each with different kinds of continuous streaming data.

An existing example is the plugin that @bparks13 is developing, which include IMU data. This device produces 4 channels of quaternion data, 3 channels of linear accelerometer data, 3 channels of gravity vector and 3 channels of Euler angles, with units being either m/s^2 or angular degrees.

The first point to address would be how to distribute these data. One idea is to create an independent stream for each data type, thus redefining a stream as a specific type. However, in my opinion, this could lead to having too many streams when multiple devices are attached. Another way is to actually using the same scheme the GUI uses now, in which streams do not care about the data type but the source. In this case, in the IMU all data is produced by the same device and at the same exact rate (i.e.: they are "fields" of a larger sample structure sent by the device), so all data is packed into the same stream, using the channel metadata to distinguish it, exactly the same as now all data coming from an acquisition board is in a single stream, but channels can be DATA, ADC or AUX. We need to discuss which approach would be preferable here.

The second point would be to expand the data definition behind these three. Instead of a fixed Type enum, I believe we should use the identifier field, an extension of it, or something akin to it, to declare the type. We would define a set of "known" or "official" types for typical data, but any plugin could create their own data type if needed. Downstream processors like the LFP viewer would then list all the data types available in a stream. Eventually, the channel settings could be expanded to include a field indicating the units, and how the bitVolt field relate to this conversion, so all data types could be properly represented.

These are just a couple of thoughts, but this should be the start of a conversation going forward. In summary, the GUI is expanding to support more devices and data types, always constrained to analog continuous data streams (events aside, of course), which could and would include different ranges for neural data (eg. amplifiers for EEG) and I believe a more general approach to data types should be discussed.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions