00001 #ifndef artdaq_Application_MPI2_DataReceiverCore_hh 00002 #define artdaq_Application_MPI2_DataReceiverCore_hh 00003 00004 #include <string> 00005 #include <atomic> 00006 00007 #include "fhiclcpp/ParameterSet.h" 00008 #include "canvas/Persistency/Provenance/RunID.h" 00009 00010 #include "artdaq-utilities/Plugins/MetricManager.hh" 00011 00012 #include "artdaq/DAQrate/DataReceiverManager.hh" 00013 #include "artdaq/Application/StatisticsHelper.hh" 00014 00015 namespace artdaq 00016 { 00017 class DataReceiverCore; 00018 } 00019 00024 class artdaq::DataReceiverCore 00025 { 00026 public: 00027 00031 DataReceiverCore(); 00032 00036 DataReceiverCore(DataReceiverCore const&) = delete; 00037 00041 virtual ~DataReceiverCore(); 00042 00047 DataReceiverCore& operator=(DataReceiverCore const&) = delete; 00048 00068 virtual bool initialize(fhicl::ParameterSet const& pset) = 0; 00069 00075 bool start(art::RunID id); 00076 00081 bool stop(); 00082 00087 bool pause(); 00088 00093 bool resume(); 00094 00099 bool shutdown(); 00100 00106 bool soft_initialize(fhicl::ParameterSet const& pset); 00107 00113 bool reinitialize(fhicl::ParameterSet const& pset); 00114 00120 bool rollover_subrun(uint64_t eventNum); 00121 00133 std::string report(std::string const& which) const; 00134 00135 protected: 00143 bool initializeDataReceiver(fhicl::ParameterSet const& pset, fhicl::ParameterSet const& data_pset, fhicl::ParameterSet const& metric_pset); 00144 00145 std::unique_ptr<DataReceiverManager> receiver_ptr_; 00146 std::shared_ptr<SharedMemoryEventManager> event_store_ptr_; 00147 std::atomic<bool> stop_requested_; 00148 std::atomic<bool> pause_requested_; 00149 std::atomic<bool> run_is_paused_; 00150 bool verbose_; 00151 00152 MetricManager metricMan_; 00153 00158 void logMessage_(std::string const& text); 00159 }; 00160 00161 #endif /* artdaq_Application_MPI2_DataReceiverCore_hh */