1 #ifndef DATA_STRUCT_HH_
2 #define DATA_STRUCT_HH_
5 #include "Mu2e-STMDAQ/config/stm_data.hh"
37 : time(t), height(h) {}
51 std::vector<zs_region> zs_regions;
52 bool prescale =
false;
59 bool prescale =
false;
65 sw_event_header hdr = {};
68 std::vector<pulse_height> ph;
69 bool bad_data =
false;
73 using EWTinfo = std::vector<EWT_info>;
82 bool do_not_use =
false;
85 alignas(64) std::vector<int16_t> raw;
86 std::vector<int16_t> zs;
87 std::vector<double> ph;
90 size_t orig_len = 0, raw_len = 0, zs_len = 0, noise_len = 0, ph_len = 0;
93 size_t packet_count = 0;
94 size_t dropped_packet_count = 0;
95 std::vector<std::pair<uint32_t,uint32_t>> dropped_packets;
96 bool has_idle_timeout;
100 size_t lost_EWT_count = 0;
101 std::vector<std::pair<uint64_t,uint64_t>> lost_EWTs;
102 std::vector<std::pair<uint64_t,uint64_t>> incomplete_EWTs;
109 size_t zs_overflow_num = 0;
110 std::vector<uint64_t> peak_index;
111 std::vector<zs_region>
zs_data;
112 std::atomic<bool> peak_finding_finished{
false};
115 std::vector<uint64_t> hist_counts_window;
116 std::vector<uint64_t> hist_counts_all;
117 uint64_t total_window = 0;
118 uint64_t total_all = 0;
123 double baseline_mean_avg = 0;
124 double baseline_sigma_avg = 0;
126 double baseline_mean_current = 0;
127 double baseline_sigma_current = 0;
129 std::vector<int16_t> noise_data;
130 std::vector<int16_t> noise_data_fft;
133 size_t peak_count = 0;
138 uint32_t ewtIndex = 0;
139 uint64_t ewtStart = 0;
142 int64_t pulseStartGlobal;
145 float adaptiveThreshold;
149 bool stitchedCandidate =
false;
152 std::vector<PulseCandidate> pulseCandidates;
155 std::vector<std::pair<const std::string, double>> cpu_performance;
158 std::vector<bool> raw_ps_bool;
161 DataStruct(
const std::shared_ptr<STMdata>& stm,
163 std::vector<std::string> op_names)
164 : buffer_num(buffer_num_),
165 raw(stm->buffer_config.raw_len),
166 zs(stm->buffer_config.zs_len),
167 ph(stm->buffer_config.ph_len),
168 EWTs(stm->buffer_config.max_event_num),
169 hist_counts_window(stm->baseline_config.hist_bin_num),
170 hist_counts_all(stm->baseline_config.hist_bin_num),
174 std::vector<std::pair<const std::string,double>> v;
175 v.reserve(op_names.size());
176 for (
const auto& name : op_names) {
177 v.emplace_back(name, 0.0);
182 noise_data.reserve(stm->buffer_config.baseline_len);
183 pulseCandidates.reserve(stm->buffer_config.ph_len/2);
191 std::fill(raw.begin(), raw.end(), 0);
192 std::fill(zs.begin(), zs.end(), 0);
193 std::fill(ph.begin(), ph.end(), 0);
194 orig_len = raw_len = zs_len = ph_len = 0;
196 dropped_packet_count = 0;
197 dropped_packets.resize(0);
198 has_idle_timeout =
false;
202 incomplete_EWTs.resize(0);
204 for (
auto& e : EWTs) {
208 e.zs.zs_regions.clear();
209 e.zs.prescale =
false;
214 peak_index.resize(0);
216 std::fill(hist_counts_window.begin(), hist_counts_window.end(), 0);
217 std::fill(hist_counts_all.begin(), hist_counts_all.end(), 0);
218 baseline_mean_avg = 0;
219 baseline_sigma_avg = 0;
220 baseline_mean_current = 0;
221 baseline_sigma_current = 0;
222 baseline_window.reset();
223 baseline_all.reset();
225 pulseCandidates.clear();
226 std::fill(raw_ps_bool.begin(), raw_ps_bool.end(), 0);
229 for (
auto& entry : cpu_performance) entry.second = 0.0;