$treeview $search $mathjax $extrastylesheet
artdaq
v3_04_00
$projectbrief
|
$projectbrief
|
$searchbox |
00001 #ifndef artdaq_Application_MPI2_BoardReaderCore_hh 00002 #define artdaq_Application_MPI2_BoardReaderCore_hh 00003 00004 #include <string> 00005 00006 #include "artdaq/Application/CommandableFragmentGenerator.hh" 00007 #include "artdaq/Application/Commandable.hh" 00008 #include "fhiclcpp/ParameterSet.h" 00009 #include "canvas/Persistency/Provenance/RunID.h" 00010 #include "artdaq/DAQrate/DataSenderManager.hh" 00011 #include "artdaq/Application/StatisticsHelper.hh" 00012 #include "artdaq-utilities/Plugins/MetricManager.hh" 00013 00014 namespace artdaq 00015 { 00016 class BoardReaderCore; 00017 } 00018 00023 class artdaq::BoardReaderCore 00024 { 00025 public: 00026 static const std::string FRAGMENTS_PROCESSED_STAT_KEY; 00027 static const std::string INPUT_WAIT_STAT_KEY; 00028 static const std::string BRSYNC_WAIT_STAT_KEY; 00029 static const std::string OUTPUT_WAIT_STAT_KEY; 00030 static const std::string FRAGMENTS_PER_READ_STAT_KEY; 00031 00036 BoardReaderCore(Commandable& parent_application); 00037 00041 BoardReaderCore(BoardReaderCore const&) = delete; 00042 00046 virtual ~BoardReaderCore(); 00047 00052 BoardReaderCore& operator=(BoardReaderCore const&) = delete; 00053 00072 bool initialize(fhicl::ParameterSet const& pset, uint64_t, uint64_t); 00073 00081 bool start(art::RunID id, uint64_t timeout, uint64_t timestamp); 00082 00089 bool stop(uint64_t timeout, uint64_t timestamp); 00090 00097 bool pause(uint64_t timeout, uint64_t timestamp); 00098 00105 bool resume(uint64_t timeout, uint64_t timestamp); 00106 00111 bool shutdown(uint64_t); 00112 00118 bool soft_initialize(fhicl::ParameterSet const& pset, uint64_t, uint64_t); 00119 00125 bool reinitialize(fhicl::ParameterSet const& pset, uint64_t, uint64_t); 00126 00133 void process_fragments(); 00134 00143 std::string report(std::string const& which) const; 00144 00151 bool metaCommand(std::string const& command, std::string const& arg); 00152 00157 static DataSenderManager* GetDataSenderManagerPtr() { return sender_ptr_.get(); } 00158 00163 size_t GetFragmentsProcessed() { return fragment_count_; } 00164 private: 00165 Commandable& parent_application_; 00166 std::unique_ptr<CommandableFragmentGenerator> generator_ptr_; 00167 art::RunID run_id_; 00168 00169 fhicl::ParameterSet data_pset_; 00170 int rt_priority_; 00171 bool skip_seqId_test_; 00172 00173 static std::unique_ptr<artdaq::DataSenderManager> sender_ptr_; 00174 00175 std::atomic<size_t> fragment_count_; 00176 artdaq::Fragment::sequence_id_t prev_seq_id_; 00177 std::atomic<bool> stop_requested_; 00178 std::atomic<bool> pause_requested_; 00179 00180 // attributes and methods for statistics gathering & reporting 00181 artdaq::StatisticsHelper statsHelper_; 00182 00183 std::string buildStatisticsString_(); 00184 00185 void sendMetrics_(); 00186 00187 bool verbose_; 00188 00193 void logMessage_(std::string const& text); 00194 }; 00195 00196 #endif /* artdaq_Application_MPI2_BoardReaderCore_hh */