1 #ifndef artdaq_Application_MPI2_BoardReaderCore_hh
2 #define artdaq_Application_MPI2_BoardReaderCore_hh
6 #include "artdaq-utilities/Plugins/MetricManager.hh"
7 #include "artdaq/Application/Commandable.hh"
8 #include "artdaq/DAQrate/DataSenderManager.hh"
9 #include "artdaq/DAQrate/StatisticsHelper.hh"
10 #include "artdaq/Generators/CommandableFragmentGenerator.hh"
11 #include "canvas/Persistency/Provenance/RunID.h"
12 #include "fhiclcpp/ParameterSet.h"
15 class BoardReaderCore;
73 bool initialize(fhicl::ParameterSet
const& pset, uint64_t timeout, uint64_t timestamp);
82 bool start(art::RunID
id, uint64_t timeout, uint64_t timestamp);
90 bool stop(uint64_t timeout, uint64_t timestamp);
98 bool pause(uint64_t timeout, uint64_t timestamp);
106 bool resume(uint64_t timeout, uint64_t timestamp);
122 bool soft_initialize(fhicl::ParameterSet
const& pset, uint64_t timeout, uint64_t timestamp);
131 bool reinitialize(fhicl::ParameterSet
const& pset, uint64_t timeout, uint64_t timestamp);
149 std::string
report(std::string
const& which)
const;
157 bool metaCommand(std::string
const& command, std::string
const& arg);
173 std::unique_ptr<CommandableFragmentGenerator> generator_ptr_;
176 fhicl::ParameterSet data_pset_;
178 bool skip_seqId_test_;
180 static std::unique_ptr<artdaq::DataSenderManager> sender_ptr_;
182 std::atomic<size_t> fragment_count_;
183 artdaq::Fragment::sequence_id_t prev_seq_id_;
184 std::atomic<bool> stop_requested_;
185 std::atomic<bool> pause_requested_;
190 std::string buildStatisticsString_();
200 void logMessage_(std::string
const& text);
This class manages MonitoredQuantity instances for the *Core classes.
size_t GetFragmentsProcessed()
Get the number of Fragments processed this run
Commandable is the base class for all artdaq components which implement the artdaq state machine...
Sends Fragment objects using TransferInterface plugins. Uses Routing Tables if confgiured, otherwise will Round-Robin Fragments to the destinations.
bool initialize(fhicl::ParameterSet const &pset, uint64_t timeout, uint64_t timestamp)
Initialize the BoardReaderCore.
static DataSenderManager * GetDataSenderManagerPtr()
Gets a handle to the DataSenderManager.
static const std::string FRAGMENTS_PROCESSED_STAT_KEY
Key for the Fragments Processed MonitoredQuantity.
bool reinitialize(fhicl::ParameterSet const &pset, uint64_t timeout, uint64_t timestamp)
Reinitialize the BoardReader. No-Op.
static const std::string INPUT_WAIT_STAT_KEY
Key for the Input Wait MonitoredQuantity.
bool stop(uint64_t timeout, uint64_t timestamp)
Stop the BoardReader, and the CommandableFragmentGenerator.
BoardReaderCore implements the state machine for the BoardReader artdaq application. It contains a CommandableFragmentGenerator, which generates Fragments which are then sent to a DataSenderManager by BoardReaderCore.
virtual ~BoardReaderCore()
BoardReaderCore Destructor.
BoardReaderCore(Commandable &parent_application)
BoardReaderCore Constructor.
static const std::string BRSYNC_WAIT_STAT_KEY
Key for the Sync Wait MonitoredQuantity.
static const std::string FRAGMENTS_PER_READ_STAT_KEY
Key for the Fragments Per Read MonitoredQuantity.
static const std::string OUTPUT_WAIT_STAT_KEY
Key for the Output Wait MonitoredQuantity.
bool soft_initialize(fhicl::ParameterSet const &pset, uint64_t timeout, uint64_t timestamp)
Soft-Initialize the BoardReader. No-Op.
std::string report(std::string const &which) const
Send a report on a given run-time quantity.
void process_fragments()
Main working loop of the BoardReaderCore.
bool shutdown(uint64_t timeout)
Shutdown the BoardReader, and the CommandableFragmentGenerator.
bool start(art::RunID id, uint64_t timeout, uint64_t timestamp)
Start the BoardReader, and the CommandableFragmentGenerator.
bool resume(uint64_t timeout, uint64_t timestamp)
Resume the BoardReader, and the CommandableFragmentGenerator.
bool pause(uint64_t timeout, uint64_t timestamp)
Pause the BoardReader, and the CommandableFragmentGenerator.
bool metaCommand(std::string const &command, std::string const &arg)
Run a user-defined command on the CommandableFragmentGenerator.
BoardReaderCore & operator=(BoardReaderCore const &)=delete
Copy Assignment Operator is deleted.