-
Notifications
You must be signed in to change notification settings - Fork 4
Description
Although this project began with relatively modest goals (shared low-level hardware drivers), it is often necessary to think about the bigger picture in order to settle on the smaller details. To in this thread let's collect ideas about what an ideal data acquisition platform would look like. I am not interested in applications here, but just ideal infrastructure that would allow one to most easily write any application they wanted (if such a thing can even exist).
We now have a mixed audience here including optical microscopy, robotics, electrophysiology, particle physics, etc. One question we could try to answer here is whether it even makes sense for all of these fields to attempt a shared acquisition platform.
Must-have features for a data acquisition platform (these are things I've seen so far in discussions here; will update this list as needed):
- A hardware abstraction layer that provides a standard API for similar device types.
- Distributed architecture: should be able to coordinate devices that exist in the same thread, different threads, different processes, or different machines.
a. Object proxying so that all possibilities in (2) can be used with only minimal changes to the application code. - Coordinate system modeling - keep track of where your hardware is in physical space, and make it easy to transform data between reference frames.
- Resource locking / sharing - a way to have multiple synchronous procedures safely accessing the same hardware.
- Acquisition engine(s) - systems that automate common workflows for configuring / synchronizing hardware and recording results. It's likely that multiple acquisition engines would be needed to cover a variety of different workflows.
- Basic common data / metadata structures like annotated arrays, units, etc. Probably few of these need to be implemented by the platform; we could just agree on a standard set of tools.
Note: these are not features that all users would want; probably most users will only need a subset. The list should be complete, though, to avoid "I can't use this framework because it lacks X critical feature" for the most common use cases. Features should also be independent and optional if possible to avoid bloat when they are not needed.