otsdaq-mu2e-stm  5.02.01
write_config.hh
1 #ifndef WRITE_CONFIG_HH_
2 #define WRITE_CONFIG_HH_
3 
4 #include <numeric> // std::accumulate
5 
6 // Include config files
7 #include "Mu2e-STMDAQ/config/config.hh"
8 #include "Mu2e-STMDAQ/config/include/fw_config.hh"
9 
10 // Zero suppression configurable variables
11 struct write_info{
12 
13  // Output directory for file writing
14  const std::string output_dir;
15 
16  // Filename prefixes
17  const std::string file_prefix;
18 
19  // Compile time write stream names
20  const std::vector<std::string> streamID = {"events","raw","zs","ph"};
21 
22  // Write stream enabled?
23  const std::vector<bool> stream_enabled;
24 
25  // Total number of stream enabled
26  const int tot_streams_enabled;
27 
28  // Maximum file size
29  const size_t max_file_size;
30 
31  // File pre-opening depth
32  const int file_buffer_depth;
33 
34  // Interval in seconds for stats logging
35  const int log_interval_sec;
36 
37  // Constructor
38  write_info(Config& cfg, const std::shared_ptr<AsyncLogger> logger) :
39  output_dir(cfg.getValue<std::string>("stm.write_data.write_dir")), // Directory
40  file_prefix(cfg.getValue<std::string>("stm.write_data.filename_prefix")), // Raw filename prefix
41  stream_enabled({cfg.getValue<bool>("stm.operations.WriteManager.write_events"), // Event write enabled
42  cfg.getValue<bool>("stm.operations.WriteManager.write_raw"), // Raw write enabled
43  cfg.getValue<bool>("stm.operations.WriteManager.write_zs"), // ZS write enbaled
44  cfg.getValue<bool>("stm.operations.WriteManager.write_ph")}), // PH write enabled
45  tot_streams_enabled(static_cast<int>(std::accumulate(
46  stream_enabled.begin(), stream_enabled.end(), 0,
47  [](int sum, bool b){ return sum + (b ? 1 : 0); }
48  ))),
49  max_file_size(cfg.getValue<double>("stm.write_data.max_file_size") * 1e9), // Maximum file size
50  file_buffer_depth(cfg.getValue<int>("stm.write_data.file_buffer")), // File pre-opening depth
51  log_interval_sec(cfg.getValue<int>("stm.write_data.log_interval")) // Stats logging interval
52  {
53  // Notify user
54  if (logger){
55  logger->log("Config:write_info: Output_dir = " + output_dir, 1);
56  logger->log("Config:write_info: Filename prefix = " + file_prefix, 1);
57  logger->log("Config:write_info: Maximum file size set to " +
58  std::to_string(max_file_size*1e-9) + " GB.", 1);
59  logger->log("Config:write_info: Set file buffer depth to " +
60  std::to_string(file_buffer_depth) + " files.", 1);
61  logger->log("Config:write_info: Set log interval = " +
62  std::to_string(log_interval_sec) + " s.", 1);
63  for (size_t i = 0; i < streamID.size(); i++){
64  logger->log("Config:write_info: " + streamID[i] + " stream " +
65  std::string(stream_enabled[i] ? "ENABLED" : "DISABLED"),1);
66  }
67  logger->log("Config:write_info: total number of enabled write streams = " +
68  std::to_string(tot_streams_enabled),1);
69 
70  }
71 
72  }
73 
74 };
75 
76 #endif
Definition: config.hh:19