1 #ifndef OPERATION_MANAGER_hh_
2 #define OPERATION_MANAGER_hh_
4 #include <unordered_map>
8 #include "Mu2e-STMDAQ/utils/async_logger.hh"
10 #include "Mu2e-STMDAQ/utils/signal_handler.hh"
12 #include "Mu2e-STMDAQ/processing/udp.hh"
14 #include "Mu2e-STMDAQ/processing/check_data.hh"
16 #include "Mu2e-STMDAQ/processing/form_events.hh"
18 #include "Mu2e-STMDAQ/processing/baseline.hh"
20 #include "Mu2e-STMDAQ/processing/zero_suppress.hh"
22 #include "Mu2e-STMDAQ/processing/noise.hh"
24 #include "Mu2e-STMDAQ/processing/mwd.hh"
26 #include "Mu2e-STMDAQ/processing/pulse_height.hh"
28 #include "Mu2e-STMDAQ/processing/prescale.hh"
30 #include "Mu2e-STMDAQ/processing/template_module.hh"
32 #include "Mu2e-STMDAQ/processing/write_manager.hh"
34 #include "Mu2e-STMDAQ/processing/tcp.hh"
36 #include "Mu2e-STMDAQ/processing/dqm_manager.hh"
38 #include "Mu2e-STMDAQ/debug/test_funcs.hh"
40 #include "Mu2e-STMDAQ/utils/shm_manager.hh"
51 const std::shared_ptr<AsyncLogger>& logger;
54 const std::shared_ptr<STMdata>& stm;
57 const std::shared_ptr<SignalHandler>& signal;
60 std::unordered_map<std::string, std::shared_ptr<OperationBase>> classes;
62 std::vector<std::pair<std::string, op_any>> useOps;
64 std::vector<std::pair<std::string,std::string>> useOpsFlag;
68 std::function<std::shared_ptr<OperationBase>()> constructor;
69 std::vector<std::string> operations;
73 const std::unordered_map<std::string, ClassEntry> class_map = {
75 { [
this]() {
return std::make_shared<UDP>(logger, stm, signal,
false); },
78 { [
this]() {
return std::make_shared<CheckData>(logger,stm); },
81 { [
this]() {
return std::make_shared<FormEvents>(logger,stm); },
84 { [
this]() {
return std::make_shared<Baseline>(cfg,logger,stm); },
87 { [
this]() {
return std::make_shared<MWD>(logger, stm);},
88 {
"subtract_baseline",
"deconv",
"diff",
"averaging",
"find_peaks"} }},
90 { [
this]() {
return std::make_shared<ZeroSuppress>(cfg,logger,stm, signal);},
91 {
"prep_data",
"find_peaks",
"suppress_data"} }},
93 { [
this]() {
return std::make_shared<PulseHeight>(cfg, logger, stm);},
94 {
"detectPulseCandidates",
"processPulseCandidates"} }},
96 { [
this]() {
return std::make_shared<Noise>(cfg, logger, stm);},
97 {
"get_noise_data",
"check_noise",
"noise_fft"} }},
99 { [
this]() {
return std::make_shared<Prescale>(logger,stm);},
100 {
"prescale_data"} }},
102 { [
this]() {
return std::make_shared<TemplateClass>(logger, stm);},
103 {
"temp_func_1",
"temp_func_2"} }},
105 { [
this]() {
return std::make_shared<WriteManager>(logger, stm, signal);},
106 {
"write_events",
"write_raw",
"write_zs",
"write_ph"} }},
108 { [
this]() {
return std::make_shared<TCP>(logger, stm, signal); },
111 { [
this]() {
return std::make_shared<DQM>(cfg,logger, stm, signal,
this); },
114 { [
this]() {
return std::make_shared<TestFuncs>(signal); },
115 {
"mod_prev_buffer",
"read_mod_buffer",
"check_form_events",
"do_nothing"} }}
122 const std::shared_ptr<AsyncLogger>& logger,
123 const std::shared_ptr<STMdata>& stm_,
124 const std::shared_ptr<SignalHandler>& signal_);
127 std::vector<std::pair<std::string, op_any>> getUseOps()
const;
130 std::size_t class_num()
const {
return classes.size(); }
133 bool isValidClass(std::string_view class_) {
134 for (
const auto& [className, map] : class_map) {
135 if (className == class_)
return true;
141 bool isValidOp(std::string_view class_, std::string_view op_) {
142 for (
const auto& [className, map] : class_map) {
143 if (className == class_) {
144 for (
const auto& op : map.operations) {
155 std::shared_ptr<OperationBase>& get_class(std::string name){
156 if (classes.find(name) == classes.end()){
157 if (name ==
"Baseline"){
158 static std::shared_ptr<OperationBase> null_ptr =
nullptr;
162 logger->log(
"ERROR in operation_manager.hh. Cannot find class named: " + name +
". Exiting...",0);
165 return classes[name];
169 bool check_class(std::string name){
171 auto it = classes.find(name);
173 if (it != classes.end()) {
184 if (logger) logger->log(
"Operation Manager destructor called.",1);