otsdaq-mu2e-stm  5.02.01
buffer_config.hh
1 #ifndef BUFFER_CONFIG_HH_
2 #define BUFFER_CONFIG_HH_
3 
4 // Include config files
5 #include "Mu2e-STMDAQ/config/config.hh"
6 #include "Mu2e-STMDAQ/config/include/zs_config.hh"
7 
8 // Buffer configurable variables
9 struct buffer_info{
10 
11  // Raw data buffer size (bytes, int16_t data type)
12  const size_t raw_size;
13  // Raw data buffer len (ADC values)
14  const size_t raw_len;
15 
16  // Maximum number of packets in buffer
17  const size_t max_packet_num;
18  // Maximum size of packet data in buffer (bytes)
19  const size_t max_packet_size;
20  // Maximum length of packetm data in buffer
21  const size_t max_packet_len;
22 
23  // Maximum number of mu2e events in buffer
24  const size_t max_event_num;
25 
26  // ZS data buffer size (bytes, int16_t data type)
27  const size_t zs_size;
28  // ZS data buffer len (ADC values)
29  const size_t zs_len;
30 
31  // Pulse height buffer (bytes, double data type)
32  const size_t ph_size;
33  // PH data buffer len (ADC values)
34  const size_t ph_len;
35 
36  // ADC baseline buffer (bytes, double data type)
37  const size_t baseline_size;
38  // ADC baseline data buffer len (ADC values)
39  const size_t baseline_len;
40 
41  // Additional of the total allocated buffer size for extras
42  const double extra;
43 
44  // Queue capacity per operation
45  const size_t queue_capacity;
46 
47  // Buffer pool size per operation
48  const size_t pool_size;
49 
50  // Constructor
51  buffer_info(Config& cfg,
52  const std::shared_ptr<AsyncLogger> logger,
53  fw_info fw_config,
54  mu2e_info mu2e_config,
55  zs_info zs_config,
56  const uint16_t MAX_PACKET_SIZE) :
57  raw_size(cfg.getValue<int>("stm.buffers.raw_size")), // bytes, int16_t type
58  raw_len(raw_size/sizeof(int16_t)),
59  max_packet_num(std::floor(( // Max number of packets = round down (
60  (double)raw_size // Raw data size
61  - (double)mu2e_config.max_event_size) // - space for 1 max size mu2e event (for FormEvents)
62  /(double)MAX_PACKET_SIZE // Divided by max packet size
63  )),
64  max_packet_size(max_packet_num*MAX_PACKET_SIZE),
65  max_packet_len(max_packet_size/sizeof(int16_t)),
66  max_event_num(std::ceil((double)max_packet_size // Max packet size (ignore headers = extra space)
67  /(double)mu2e_config.min_event_size) // Divded by min event size
68  + 1), // Plus 1 extra mu2e event (for FormEvents)
69  zs_size(raw_size), // bytes, int16_t type
70  zs_len(zs_size/sizeof(int16_t)),
71  ph_size(raw_size/sizeof(int16_t)*sizeof(double)), // bytes, double type
72  ph_len(ph_size/sizeof(double)),
73  baseline_size(cfg.getValue<int>("stm.buffers.baseline_size")), // bytes, int16_t type
74  baseline_len(baseline_size/sizeof(int16_t)),
75  extra(cfg.getValue<double>("stm.buffers.extra")),
76  queue_capacity(cfg.getValue<int>("stm.buffers.queue_capacity")),
77  pool_size(cfg.getValue<int>("stm.buffers.buffer_pool_size"))
78  {
79 
80  // Notify user
81  if (logger){
82  logger->log("Config:buffer_info: Raw data (int16_t) buffer size = " +
83  std::to_string(raw_size) + " bytes = " +
84  std::to_string(raw_len) + " ADC values.",1);
85  logger->log("Config:buffer_info: Maximum 8198 byte packets per raw buffer = " +
86  std::to_string(max_packet_num) + " packets = " +
87  std::to_string(max_packet_size) + " bytes.",1);
88  logger->log("Config:buffer_info: Maximum number of " +
89  std::to_string(mu2e_config.min_event_period) +
90  " us (minimum) Mu2e events per raw buffer = " +
91  std::to_string(max_event_num) + " events.",1);
92  logger->log("Config:buffer_info: Zero suppressed (int16_t) data buffer size = " +
93  std::to_string(zs_size) + " bytes = " +
94  std::to_string(zs_len) + " ADC values.",1);
95  logger->log("Config:buffer_info: Pulse height (double) data buffer size = " +
96  std::to_string(ph_size) + " bytes = " +
97  std::to_string(ph_len) + " ADC values.",1);
98  logger->log("Config:buffer_info: ADC baseline (int16_t) data buffer size = " +
99  std::to_string(baseline_size) + " bytes = " +
100  std::to_string(baseline_len) + " ADC values = " +
101  std::to_string(baseline_len*fw_config.tADC) + " us .",1);
102  logger->log("Config:buffer_info: % extra of total allocated buffer size (metadata) = " +
103  std::to_string(extra) + " %.",1);
104  logger->log("Config:buffer_info: Queue capacity for each operation = " +
105  std::to_string(queue_capacity) + " .",1);
106  logger->log("Config:buffer_info: Buffer pool for each operation = " +
107  std::to_string(pool_size) + " .",1);
108 
109  }
110  }
111 
112 };
113 
114 #endif
Definition: config.hh:19