1 #ifndef BASELINE_CONFIG_HH_
2 #define BASELINE_CONFIG_HH_
8 #include "Mu2e-STMDAQ/config/config.hh"
9 #include "Mu2e-STMDAQ/config/include/fw_config.hh"
10 #include "Mu2e-STMDAQ/config/include/buffer_config.hh"
16 const size_t hist_bin_num;
17 const int16_t hist_min_adc;
18 const int16_t hist_max_adc;
19 const double hist_bin_width;
20 const double hist_inv_bin_width;
21 const std::vector<double> hist_bin_centres;
24 const double hist_window_period;
25 const size_t hist_window_buffers;
26 const bool window_delay;
29 const size_t EM_max_iters;
30 const double EM_LL_tol;
31 const double EM_var_floor;
34 const double prev_mean, prev_sigma;
39 double max_adc_in_buffer) :
40 hist_bin_num(cfg.getValue<
int>(
"stm.baseline.hist.bin_num")),
41 hist_min_adc(std::clamp(cfg.getValue<
int>(
"stm.baseline.hist.min_adc"),
42 static_cast<int>(std::numeric_limits<int16_t>::min()),
43 static_cast<int>(std::numeric_limits<int16_t>::max()))),
44 hist_max_adc(std::clamp(cfg.getValue<
int>(
"stm.baseline.hist.max_adc"),
45 static_cast<int>(std::numeric_limits<int16_t>::min()),
46 static_cast<int>(std::numeric_limits<int16_t>::max()))),
47 hist_bin_width(((
double)hist_max_adc - (
double)hist_min_adc)/(
double)hist_bin_num),
48 hist_inv_bin_width(1/hist_bin_width),
49 hist_bin_centres([&] {
50 std::vector<double> centres(hist_bin_num);
51 for (std::size_t i = 0; i < hist_bin_num; ++i) {
53 static_cast<double>(hist_min_adc) +
54 (
static_cast<double>(i) + 0.5) * hist_bin_width;
58 hist_window_period(cfg.getValue<
double>(
"stm.baseline.hist.window_period")),
59 hist_window_buffers(std::ceil(hist_window_period*1e6/(
double)(max_adc_in_buffer*buffer_config.max_packet_num*fw_config.tADC))),
60 window_delay(cfg.getValue<
int>(
"stm.baseline.window_delay")),
61 EM_max_iters(cfg.getValue<
int>(
"stm.baseline.EM.max_iters")),
62 EM_LL_tol(cfg.getValue<
double>(
"stm.baseline.EM.LL_tol")),
63 EM_var_floor(cfg.getValue<
double>(
"stm.baseline.EM.var_floor")),
64 prev_mean(cfg.getValue<
double>(
"stm.baseline.last_value.mean")),
65 prev_sigma(cfg.getValue<
double>(
"stm.baseline.last_value.sigma"))
70 logger->log(
"Config:baseline_info: Number of histogram bins = " +
71 std::to_string(hist_bin_num) +
73 logger->log(
"Config:baseline_info: Histogram ADC range set between " +
74 std::to_string(hist_min_adc) +
76 std::to_string(hist_max_adc) +
78 logger->log(
"Config:baseline_info: Histogram bin width = " +
79 std::to_string(hist_bin_width) +
81 std::to_string(hist_inv_bin_width) +
83 logger->log(
"Config:baseline_info: Histogram window period = " +
84 std::to_string(hist_window_period) +
86 std::to_string(hist_window_buffers) +
88 std::to_string(buffer_config.raw_size*1e-3) +
89 " kB raw data buffers.",1);
92 const bool ops_baseline_class =
93 cfg.getValue<
int>(
"stm.operations.Baseline");
94 const bool ops_baseline_func =
95 cfg.getValue<
int>(
"stm.operations.Baseline.calc_baseline");
98 if (!ops_baseline_class || !ops_baseline_func){
100 "Config:baseline_info: Baseline operations disabled in config. Forcing baseline calculation window delay to be OFF.";
103 const_cast<bool&
>(window_delay) =
false;
106 logger->log(std::string(
"Config:baseline_info: Delay DAQ by 1 window period to calculate baseline = ") +
107 (window_delay ?
"TRUE." :
"FALSE."),1);
108 logger->log(
"Config:baseline_info: Maximum EM iterations = " +
109 std::to_string(EM_max_iters) +
111 logger->log(
"Config:baseline_info: EM Convergence tolerance = " +
112 std::to_string(EM_LL_tol) +
114 logger->log(
"Config:baseline_info: EM Minimum variance = " +
115 std::to_string(EM_var_floor) +
117 logger->log(
"Config:baseline_info: Baseline value from previous run = " +
118 std::to_string(prev_mean) +
" ± " + std::to_string(prev_sigma) +