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 00033 DataReceiverCore(int rank, std::string name); 00034 00038 DataReceiverCore(DataReceiverCore const&) = delete; 00039 00043 virtual ~DataReceiverCore(); 00044 00049 DataReceiverCore& operator=(DataReceiverCore const&) = delete; 00050 00070 virtual bool initialize(fhicl::ParameterSet const& pset) = 0; 00071 00077 bool start(art::RunID id); 00078 00083 bool stop(); 00084 00089 bool pause(); 00090 00095 bool resume(); 00096 00101 bool shutdown(); 00102 00108 bool soft_initialize(fhicl::ParameterSet const& pset); 00109 00115 bool reinitialize(fhicl::ParameterSet const& pset); 00116 00128 std::string report(std::string const& which) const; 00129 00130 protected: 00138 bool initializeDataReceiver(fhicl::ParameterSet const& pset, fhicl::ParameterSet const& data_pset, fhicl::ParameterSet const& metric_pset); 00139 00140 std::string name_; 00141 00142 std::unique_ptr<DataReceiverManager> receiver_ptr_; 00143 std::shared_ptr<SharedMemoryEventManager> event_store_ptr_; 00144 std::atomic<bool> stop_requested_; 00145 std::atomic<bool> pause_requested_; 00146 std::atomic<bool> run_is_paused_; 00147 bool verbose_; 00148 00149 MetricManager metricMan_; 00150 00155 void logMessage_(std::string const& text); 00156 }; 00157 00158 #endif /* artdaq_Application_MPI2_DataReceiverCore_hh */