otsdaq-mu2e-stm  5.02.01
zs_config.hh
1 #ifndef ZS_CONFIG_HH_
2 #define ZS_CONFIG_HH_
3 
4 // Include config files
5 #include "Mu2e-STMDAQ/config/config.hh"
6 #include "Mu2e-STMDAQ/config/include/fw_config.hh"
7 #include "Mu2e-STMDAQ/config/include/mu2e_config.hh"
8 
9 // Zero suppression configurable variables
10 struct zs_info{
11 
12  // Get the right channel sub-string
13  const std::string channel;
14 
15  // Time to store before peak (us)
16  const double before_peak_time;
17  // Number of ADC values to store before peak
18  const size_t before_peak;
19  // Time to store after peak (us)
20  const double after_peak_time;
21  // Number of ADC values to store after peak
22  const size_t after_peak;
23  // Total number of ADC values stored per peak
24  const size_t total_peak;
25 
26  // Gradient threshold
27  const int grad_threshold;
28  // Gradient window
29  const size_t grad_window;
30  // Gradient average number
31  const size_t grad_n_avg;
32 
33  // Maximum amount of overflow data to store from previous buffer
34  const size_t prev_data_max;
35 
36  // Constructor
37  zs_info(Config& cfg, const std::shared_ptr<AsyncLogger> logger,
38  master_info master_config,
39  fw_info fw_config,
40  mu2e_info mu2e_config) :
41  channel((master_config.ch_num) ? "stm.zs.labr." : "stm.zs.hpge."), // Channel descriptor
42  before_peak_time(cfg.getValue<double>(channel+"store_before_peak")), // Time to store before peak (us)
43  before_peak(before_peak_time*fw_config.fADC), // Number of ADC values to store before peak
44  after_peak_time(cfg.getValue<double>(channel+"store_after_peak")), // Time to store after peak (us)
45  after_peak(after_peak_time*fw_config.fADC), // Number of ADC values to store after peak
46  total_peak(before_peak+after_peak), // Total number of ADC values stored per peak
47  grad_threshold(cfg.getValue<int>(channel+"grad_threshold")), // Gradient threshold
48  grad_window(cfg.getValue<int>(channel+"grad_window")), // Gradient window
49  grad_n_avg(cfg.getValue<int>(channel+"n_avg")), // Gradient average number
50  prev_data_max(before_peak+grad_window+grad_n_avg) // Maximum overflow data to store from previous buffer
51  {
52  // Notify user
53  if (logger){
54  logger->log("Config:zs_info: Storing " +
55  std::to_string(before_peak_time) +
56  " us / " + std::to_string(before_peak) +
57  " ADC values / " +
58  std::to_string(before_peak*sizeof(int16_t)) +
59  " bytes before peak.",1);
60  logger->log("Config:zs_info: Storing " +
61  std::to_string(after_peak_time) +
62  " us / " + std::to_string(after_peak) +
63  " ADC values / " +
64  std::to_string(after_peak*sizeof(int16_t)) +
65  " bytes after peak.",1);
66  logger->log("Config:zs_info: Storing a total of " +
67  std::to_string(total_peak/fw_config.fADC) +
68  " us / " +
69  std::to_string(total_peak) +
70  " ADC values / " +
71  std::to_string(total_peak*sizeof(int16_t)) +
72  " bytes per peak.",1);
73  logger->log("Config:zs_info: Gradient threshold = " +
74  std::to_string(grad_threshold) +
75  ".",1);
76  logger->log("Config:zs_info: Gradient window = " +
77  std::to_string(grad_window) +
78  " ADC values.",1);
79  logger->log("Config:zs_info: Gradient average number = " +
80  std::to_string(grad_n_avg) +
81  " ADC values.",1);
82  logger->log("Config:zs_info: Maximum overflow data = before_peak + window + n_average = " +
83  std::to_string(prev_data_max) +
84  " ADC values.",1);
85  }
86  }
87 
88 
89 };
90 
91 #endif
Definition: config.hh:19