DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
RawTp.hpp
Go to the documentation of this file.
1
8#ifndef DETDATAFORMATS_INCLUDE_DETDATAFORMATS_FWTP_RAWTP_HPP_
9#define DETDATAFORMATS_INCLUDE_DETDATAFORMATS_FWTP_RAWTP_HPP_
10
11#include <bitset>
12#include <iostream>
13#include <vector>
14
15namespace dunedaq {
16namespace detdataformats {
17namespace fwtp {
18
19using tp_word_t = uint32_t; // NOLINT(build/unsigned)
20
21//===================
22// TP header struct
23//===================
25{
27 {
28 m_nhits = 1;
29 }
30
37
38 uint64_t get_timestamp() const // NOLINT(build/unsigned)
39 {
40 uint64_t timestamp = (m_timestamp_1 & 0xFFFF0000) >> 16;
41 timestamp += static_cast<int64_t>(m_timestamp_1 & 0xFFFF) << 16;
42 timestamp += static_cast<int64_t>(m_timestamp_2 & 0xFFFF0000) << 16;
43 timestamp += static_cast<int64_t>(m_timestamp_2 & 0xFFFF) << 48;
44 return timestamp;
45 }
46
47 void set_timestamp(const uint64_t new_timestamp) // NOLINT(build/unsigned)
48 {
49 m_timestamp_1 = (new_timestamp & 0xFFFF) << 16;
50 m_timestamp_1 += (new_timestamp & 0xFFFF0000) >> 16;
51 m_timestamp_2 = (new_timestamp & 0xFFFF00000000) >> 16;
52 m_timestamp_2 += (new_timestamp >> 48) & 0xFFFF;
53 }
54
56 {
57 return static_cast<int>(m_nhits);
58 }
59 void set_nhits(int nhits)
60 {
61 m_nhits = nhits;
62 }
63
64 uint16_t get_padding_3() // NOLINT(build/unsigned)
65 {
66 return m_padding_3;
67 }
68
69 // Print functions for debugging.
70 std::ostream& print(std::ostream& o) const
71 {
72 o << "Printing raw TP header:\n";
73 o << "flags:" << unsigned(m_flags) << " slot:" << unsigned(m_slot_no) << " wire:" << unsigned(m_wire_no)
74 << " fiber:" << unsigned(m_fiber_no) << " crate:" << unsigned(m_crate_no) << " timestamp:" << get_timestamp();
75 o << "\nPrinting raw TP pedinfo:\n";
76 o << "median:" << unsigned(m_median) << " accumulator:" << unsigned(m_accumulator)
77 << " nhits:" << unsigned(m_nhits) << " padding_1:" << unsigned(m_padding_1)
78 << " padding_2:" << unsigned(m_padding_2) << " padding_3:" << unsigned(m_padding_3);
79
80 return o << '\n';
81 }
82
83 std::ostream& print_hex(std::ostream& o) const
84 {
85 o << "Printing raw TP header:\n";
86 o << std::hex << "flags:" << m_flags << " slot:" << m_slot_no << " wire:" << m_wire_no << " fiber:" << m_fiber_no
87 << " crate:" << m_crate_no << " timestamp:" << get_timestamp();
88 o << "\nPrinting raw TP pedinfo:\n";
89 o << std::hex << "median:" << m_median << " accumulator:" << m_accumulator << " nhits:" << m_nhits
90 << " padding_1:" << m_padding_1 << " padding_2:" << m_padding_2 << " padding_3:" << m_padding_3;
91 return o << std::dec << '\n';
92 }
93
94 std::ostream& print_bits(std::ostream& o) const
95 {
96 o << "Printing raw TP header:\n";
97 o << "flags:" << std::bitset<13>(m_flags) << " slot:" << std::bitset<3>(m_slot_no)
98 << " wire:" << std::bitset<8>(m_wire_no) << " fiber:" << std::bitset<3>(m_fiber_no)
99 << " crate:" << std::bitset<5>(m_crate_no) << " timestamp:" << get_timestamp();
100 o << "\nPrinting raw TP pedinfo:\n";
101 o << "median:" << std::bitset<16>(m_accumulator) << " accumulator:" << std::bitset<16>(m_median)
102 << " nhits:" << std::bitset<16>(m_nhits) << " padding_1:" << std::bitset<16>(m_padding_1)
103 << " padding_2:" << std::bitset<16>(m_padding_2) << " padding_3:" << std::bitset<16>(m_padding_3);
104 return o << '\n';
105 }
106};
107
108inline std::ostream&
109operator<<(std::ostream& o, TpHeader const& h)
110{
111 o << "Printing raw TP header:\n";
112 o << "flags:" << unsigned(h.m_flags) << " slot:" << unsigned(h.m_slot_no) << " wire:" << unsigned(h.m_wire_no)
113 << " fiber:" << unsigned(h.m_fiber_no) << " crate:" << unsigned(h.m_crate_no) << " timestamp:" << h.get_timestamp();
114 o << "\nPrinting raw TP pedinfo:\n";
115 o << "median:" << unsigned(h.m_median) << " accumulator:" << unsigned(h.m_accumulator)
116 << " nhits:" << unsigned(h.m_nhits) << " padding_1:" << unsigned(h.m_padding_1)
117 << " padding_2:" << unsigned(h.m_padding_2) << " padding_3:" << unsigned(h.m_padding_3);
118 return o << '\n';
119}
120
121//========================
122// TP data struct
123//========================
124struct TpData
125{
126 // This struct contains three words of TP values that form the main repeating
127 // pattern in the TP block.
131
132 std::ostream& print(std::ostream& o) const
133 {
134 o << "Printing raw TP:\n";
135 o << "start_time:" << unsigned(m_start_time) << " end_time:" << unsigned(m_end_time)
136 << " peak_adc:" << unsigned(m_peak_adc) << " peak_time:" << unsigned(m_peak_time)
137 << " sum_adc:" << unsigned(m_sum_adc) << " flags:" << unsigned(m_tp_flags)
138 << " hit_continue:" << unsigned(m_hit_continue);
139 return o << '\n';
140 }
141
142 std::ostream& print_hex(std::ostream& o) const
143 {
144 o << "Printing raw TP:\n";
145 o << std::hex << "start_time:" << m_start_time << " end_time:" << m_end_time << " peak_adc:" << m_peak_adc
146 << " peak_time:" << m_peak_time << " sum_adc:" << m_sum_adc << " flags:" << m_tp_flags
147 << " hit_continue:" << m_hit_continue;
148 return o << std::dec << '\n';
149 }
150
151 std::ostream& print_bits(std::ostream& o) const
152 {
153 o << "Printing raw TP:\n";
154 o << "start_time:" << std::bitset<16>(m_start_time) << " end_time:" << std::bitset<16>(m_end_time)
155 << " peak_adc:" << std::bitset<16>(m_peak_adc) << " peak_time:" << std::bitset<16>(m_peak_time)
156 << " sum_adc:" << std::bitset<16>(m_sum_adc) << " flags:" << std::bitset<15>(m_tp_flags)
157 << " hit_continue:" << std::bitset<1>(m_hit_continue);
158 return o << '\n';
159 }
160};
161
162inline std::ostream&
163operator<<(std::ostream& o, TpData const& tp)
164{
165 o << "Printing raw TP:\n";
166 o << "start_time:" << unsigned(tp.m_start_time) << " end_time:" << unsigned(tp.m_end_time)
167 << " peak_adc:" << unsigned(tp.m_peak_adc) << " peak_time:" << unsigned(tp.m_peak_time)
168 << " sum_adc:" << unsigned(tp.m_sum_adc) << " flags:" << unsigned(tp.m_tp_flags)
169 << " hit_continue:" << unsigned(tp.m_hit_continue);
170 return o << '\n';
171}
172
173
174//========================
175// RawTp data struct
176//========================
177struct RawTp
178{
180 {
181 m_nhits = 1;
182 }
183
184 // mutators
185 void set_nhits(int nhits) {
186 m_nhits = nhits;
187 m_head.set_nhits(nhits);
188 }
189
190 // accessors
191 const TpHeader* get_tp_header() const { return &m_head; }
193
195 {
196 return sizeof(TpHeader);
197 }
199 {
200 return sizeof(TpHeader) + get_nhits() * sizeof(TpData);
201 }
202
203 uint64_t get_timestamp() const
204 {
205 return m_head.get_timestamp();
206 }
207 uint64_t get_timestamp()
208 {
209 return m_head.get_timestamp();
210 }
211 void set_timestamp(const uint64_t ts)
212 {
214 }
215
217 {
218 return m_head.get_nhits();
219 }
220 uint16_t get_padding_3()
221 {
222 return m_head.get_padding_3();
223 }
224
225private:
227
228public:
230#pragma GCC diagnostic push
231#pragma GCC diagnostic ignored "-Wpedantic"
233#pragma GCC diagnostic pop
234};
235
236inline std::ostream&
237operator<<(std::ostream& o, RawTp const& rwtp)
238{
239 o << "Printing raw TP frame:" << '\n';
240 o << rwtp.m_head << '\n';
241 return o;
242}
243
244} // namespace wib
245} // namespace detdataformats
246} // namespace dunedaq
247
248#endif // DETDATAFORMATS_INCLUDE_DETDATAFORMATS_FWTP_RAWTP_HPP_
std::ostream & operator<<(std::ostream &o, TpHeader const &h)
Definition RawTp.hpp:109
Including Qt Headers.
PDS Frame with unphysical timestamp detected with ts
const TpHeader * get_tp_header() const
Definition RawTp.hpp:191
void set_timestamp(const uint64_t ts)
Definition RawTp.hpp:211
std::ostream & print(std::ostream &o) const
Definition RawTp.hpp:132
std::ostream & print_bits(std::ostream &o) const
Definition RawTp.hpp:151
std::ostream & print_hex(std::ostream &o) const
Definition RawTp.hpp:142
std::ostream & print_hex(std::ostream &o) const
Definition RawTp.hpp:83
void set_timestamp(const uint64_t new_timestamp)
Definition RawTp.hpp:47
std::ostream & print_bits(std::ostream &o) const
Definition RawTp.hpp:94
std::ostream & print(std::ostream &o) const
Definition RawTp.hpp:70