This software offers various tools for creating a data acquisition system.
DAQ++ is built around the DAQpp::Module object. This object represents a detector or DAQ unit and implements basic DAQ commands for getting ready, starting, stopping, and retrieving data, among others. A group of modules that are being run under the same conditions are managed by a DAQpp::RunManager. This object maintains a list of these modules and distributes the DAQ commands to all of them. DAQ commands are distributed using DAQpp::RunCommand objects that notify any DAQ command to the Observer classes, which are the DAQpp::Module registered.
To monitor the status of the Module and RunManager objects, the software provides DAQpp::RunState objects. These objects are both Observers and Observables. They observe the status of the Module or RunManager to which they are associated and will notify any change to any subscribed Observer.
At the top of the model, there is a DAQpp::DAQmanager object. This object is a singleton that controls the entire acquisition process. It provides the standard operations for a DAQ controller, such as StartRun, StopRun, Acquire, and WaitForEndOfRun. It propagates the DAQ commands to all the active RunManagers, which, in turn, distribute them to their associated Modules.
Overall, DAQ++ provides a comprehensive set of features for developing and managing your data acquisition system. Its Observer model simplifies communication between objects, while the DAQpp::Module and RunManager objects provide essential control over the acquisition process. The DAQpp::RunState objects allow you to monitor the status of the system in real-time. The DAQpp::DAQmanager object provides a centralized point of control, making it easy to manage the entire acquisition system.