DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
daphne.cpp
Go to the documentation of this file.
1
8
11
12#include <pybind11/pybind11.h>
13#include <pybind11/stl.h>
14
15namespace py = pybind11;
16
18
19// NOLINTBEGIN(build/unsigned)
20
21void
22register_daphne(py::module& m)
23{
24
25 py::class_<DAPHNEFrame>(m, "DAPHNEFrame", py::buffer_protocol())
26 .def(py::init())
27 .def(py::init([](py::capsule capsule) {
28 auto wfp = *static_cast<DAPHNEFrame*>(capsule.get_pointer());
29 return wfp;
30 }))
31 .def(py::init([](py::bytes bytes) {
32 py::buffer_info info(py::buffer(bytes).request());
33 auto wfp = *static_cast<DAPHNEFrame*>(info.ptr);
34 return wfp;
35 }))
36 .def(
37 "get_daqheader",
38 [](DAPHNEFrame& self) -> const detdataformats::DAQHeader& { return self.daq_header; },
39 py::return_value_policy::reference_internal)
40 .def(
41 "get_header",
42 [](DAPHNEFrame& self) -> const DAPHNEFrame::Header& { return self.header; },
43 py::return_value_policy::reference_internal)
44 .def(
45 "get_peaks_data",
46 [](DAPHNEFrame& self) -> const DAPHNEFrame::PeakDescriptorData& { return self.peaks_data; },
47 py::return_value_policy::reference_internal)
48 .def("get_adc", static_cast<uint16_t (DAPHNEFrame::*)(const int) const>(&DAPHNEFrame::get_adc))
49 .def("get_timestamp", &DAPHNEFrame::get_timestamp)
50 .def("get_channel", &DAPHNEFrame::get_channel)
51 .def_static("sizeof", []() { return sizeof(DAPHNEFrame); });
52
53 py::class_<DAPHNEFrame::Header>(m, "DAPHNEFrameHeader")
54 .def_property(
55 "channel",
56 [](DAPHNEFrame::Header& self) -> uint8_t { return self.channel; },
57 [](DAPHNEFrame::Header& self, uint8_t channel) { self.channel = channel; })
58 .def_property(
59 "algorithm_id",
60 [](DAPHNEFrame::Header& self) -> uint8_t { return self.algorithm_id; },
61 [](DAPHNEFrame::Header& self, uint8_t algorithm_id) { self.algorithm_id = algorithm_id; })
62 .def_property(
63 "r1",
64 [](DAPHNEFrame::Header& self) -> uint8_t { return self.r1; },
65 [](DAPHNEFrame::Header& self, uint8_t r1) { self.r1 = r1; })
66 .def_property(
67 "trigger_sample_value",
68 [](DAPHNEFrame::Header& self) -> uint16_t { return self.trigger_sample_value; },
69 [](DAPHNEFrame::Header& self, uint16_t tsv) { self.trigger_sample_value = tsv; })
70 .def_property(
71 "threshold",
72 [](DAPHNEFrame::Header& self) -> uint16_t { return self.threshold; },
73 [](DAPHNEFrame::Header& self, uint16_t threshold) { self.threshold = threshold; })
74 .def_property(
75 "baseline",
76 [](DAPHNEFrame::Header& self) -> uint16_t { return self.baseline; },
77 [](DAPHNEFrame::Header& self, uint16_t baseline) { self.baseline = baseline; });
78
79 py::class_<DAPHNEFrame::PeakDescriptorData>(m, "DAPHNEFramePeakDescriptorData")
82
85
88
89 .def("get_samples_over_baseline", &DAPHNEFrame::PeakDescriptorData::get_samples_over_baseline)
90 .def("set_samples_over_baseline", &DAPHNEFrame::PeakDescriptorData::set_samples_over_baseline)
91
94
97
98 .def_property(
99 "num_subpeaks_0",
100 [](DAPHNEFrame::PeakDescriptorData& self) -> uint8_t { return self.num_subpeaks_0; },
101 [](DAPHNEFrame::PeakDescriptorData& self, uint8_t val) { self.num_subpeaks_0 = val; })
102 .def_property(
103 "adc_integral_0",
104 [](DAPHNEFrame::PeakDescriptorData& self) -> uint32_t { return self.adc_integral_0; },
105 [](DAPHNEFrame::PeakDescriptorData& self, uint32_t val) { self.adc_integral_0 = val; })
106 .def_property(
107 "found_0",
108 [](DAPHNEFrame::PeakDescriptorData& self) -> uint8_t { return self.found_0; },
109 [](DAPHNEFrame::PeakDescriptorData& self, uint8_t val) { self.found_0 = val; })
110 .def_property(
111 "adc_max_0",
112 [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.adc_max_0; },
113 [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.adc_max_0 = val; })
114 .def_property(
115 "sample_max_0",
116 [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.sample_max_0; },
117 [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.sample_max_0 = val; })
118 .def_property(
119 "samples_over_baseline_0",
120 [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.samples_over_baseline_0; },
121 [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.samples_over_baseline_0 = val; })
122
123 .def_property(
124 "num_subpeaks_1",
125 [](DAPHNEFrame::PeakDescriptorData& self) -> uint8_t { return self.num_subpeaks_1; },
126 [](DAPHNEFrame::PeakDescriptorData& self, uint8_t val) { self.num_subpeaks_1 = val; })
127 .def_property(
128 "adc_integral_1",
129 [](DAPHNEFrame::PeakDescriptorData& self) -> uint32_t { return self.adc_integral_1; },
130 [](DAPHNEFrame::PeakDescriptorData& self, uint32_t val) { self.adc_integral_1 = val; })
131 .def_property(
132 "found_1",
133 [](DAPHNEFrame::PeakDescriptorData& self) -> uint8_t { return self.found_1; },
134 [](DAPHNEFrame::PeakDescriptorData& self, uint8_t val) { self.found_1 = val; })
135 .def_property(
136 "adc_max_1",
137 [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.adc_max_1; },
138 [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.adc_max_1 = val; })
139 .def_property(
140 "sample_max_1",
141 [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.sample_max_1; },
142 [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.sample_max_1 = val; })
143 .def_property(
144 "samples_over_baseline_1",
145 [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.samples_over_baseline_1; },
146 [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.samples_over_baseline_1 = val; })
147
148 .def_property(
149 "num_subpeaks_2",
150 [](DAPHNEFrame::PeakDescriptorData& self) -> uint8_t { return self.num_subpeaks_2; },
151 [](DAPHNEFrame::PeakDescriptorData& self, uint8_t val) { self.num_subpeaks_2 = val; })
152 .def_property(
153 "adc_integral_2",
154 [](DAPHNEFrame::PeakDescriptorData& self) -> uint32_t { return self.adc_integral_2; },
155 [](DAPHNEFrame::PeakDescriptorData& self, uint32_t val) { self.adc_integral_2 = val; })
156 .def_property(
157 "found_2",
158 [](DAPHNEFrame::PeakDescriptorData& self) -> uint8_t { return self.found_2; },
159 [](DAPHNEFrame::PeakDescriptorData& self, uint8_t val) { self.found_2 = val; })
160 .def_property(
161 "adc_max_2",
162 [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.adc_max_2; },
163 [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.adc_max_2 = val; })
164 .def_property(
165 "sample_max_2",
166 [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.sample_max_2; },
167 [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.sample_max_2 = val; })
168 .def_property(
169 "samples_over_baseline_2",
170 [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.samples_over_baseline_2; },
171 [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.samples_over_baseline_2 = val; })
172
173 .def_property(
174 "num_subpeaks_3",
175 [](DAPHNEFrame::PeakDescriptorData& self) -> uint8_t { return self.num_subpeaks_3; },
176 [](DAPHNEFrame::PeakDescriptorData& self, uint8_t val) { self.num_subpeaks_3 = val; })
177 .def_property(
178 "adc_integral_3",
179 [](DAPHNEFrame::PeakDescriptorData& self) -> uint32_t { return self.adc_integral_3; },
180 [](DAPHNEFrame::PeakDescriptorData& self, uint32_t val) { self.adc_integral_3 = val; })
181 .def_property(
182 "found_3",
183 [](DAPHNEFrame::PeakDescriptorData& self) -> uint8_t { return self.found_3; },
184 [](DAPHNEFrame::PeakDescriptorData& self, uint8_t val) { self.found_3 = val; })
185 .def_property(
186 "adc_max_3",
187 [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.adc_max_3; },
188 [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.adc_max_3 = val; })
189 .def_property(
190 "sample_max_3",
191 [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.sample_max_3; },
192 [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.sample_max_3 = val; })
193 .def_property(
194 "samples_over_baseline_3",
195 [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.samples_over_baseline_3; },
196 [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.samples_over_baseline_3 = val; })
197
198 .def_property(
199 "num_subpeaks_4",
200 [](DAPHNEFrame::PeakDescriptorData& self) -> uint8_t { return self.num_subpeaks_4; },
201 [](DAPHNEFrame::PeakDescriptorData& self, uint8_t val) { self.num_subpeaks_4 = val; })
202 .def_property(
203 "adc_integral_4",
204 [](DAPHNEFrame::PeakDescriptorData& self) -> uint32_t { return self.adc_integral_4; },
205 [](DAPHNEFrame::PeakDescriptorData& self, uint32_t val) { self.adc_integral_4 = val; })
206 .def_property(
207 "found_4",
208 [](DAPHNEFrame::PeakDescriptorData& self) -> uint8_t { return self.found_4; },
209 [](DAPHNEFrame::PeakDescriptorData& self, uint8_t val) { self.found_4 = val; })
210 .def_property(
211 "adc_max_4",
212 [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.adc_max_4; },
213 [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.adc_max_4 = val; })
214 .def_property(
215 "sample_max_4",
216 [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.sample_max_4; },
217 [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.sample_max_4 = val; })
218 .def_property(
219 "samples_over_baseline_4",
220 [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.samples_over_baseline_4; },
221 [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.samples_over_baseline_4 = val; });
222
223 py::class_<DAPHNEStreamFrame::Header>(m, "DAPHNEStreamHeader")
224 .def_property(
225 "channel_0",
226 [](DAPHNEStreamFrame::Header& self) -> uint32_t { return self.channel_0; },
227 [](DAPHNEStreamFrame::Header& self, uint32_t channel_0) { self.channel_0 = channel_0; })
228 .def_property(
229 "channel_1",
230 [](DAPHNEStreamFrame::Header& self) -> uint32_t { return self.channel_1; },
231 [](DAPHNEStreamFrame::Header& self, uint32_t channel_1) { self.channel_1 = channel_1; })
232 .def_property(
233 "channel_2",
234 [](DAPHNEStreamFrame::Header& self) -> uint32_t { return self.channel_2; },
235 [](DAPHNEStreamFrame::Header& self, uint32_t channel_2) { self.channel_2 = channel_2; })
236 .def_property(
237 "channel_3",
238 [](DAPHNEStreamFrame::Header& self) -> uint32_t { return self.channel_3; },
239 [](DAPHNEStreamFrame::Header& self, uint32_t channel_3) { self.channel_3 = channel_3; });
240
241 py::class_<DAPHNEStreamFrame>(m, "DAPHNEStreamFrame", py::buffer_protocol())
242 .def(py::init())
243 .def(py::init([](py::capsule capsule) {
244 auto wfp = *static_cast<DAPHNEStreamFrame*>(capsule.get_pointer());
245 return wfp;
246 }))
247 .def(
248 "get_daqheader",
249 [](DAPHNEStreamFrame& self) -> const detdataformats::DAQHeader& { return self.daq_header; },
250 py::return_value_policy::reference_internal)
251 .def(
252 "get_header",
253 [](DAPHNEStreamFrame& self) -> const DAPHNEStreamFrame::Header& { return self.header; },
254 py::return_value_policy::reference_internal)
255 //.def("get_trailer", [](DAPHNEStreamFrame& self) -> const DAPHNEStreamFrame::PeakDescriptorData& {return
256 //self.trailer;}, py::return_value_policy::reference_internal)
257 .def("get_timestamp", &DAPHNEStreamFrame::get_timestamp)
258 .def("set_timestamp", &DAPHNEStreamFrame::set_timestamp)
259 .def("get_adc", &DAPHNEStreamFrame::get_adc)
260 .def("set_adc", &DAPHNEStreamFrame::set_adc)
261 .def("get_channel0", &DAPHNEStreamFrame::get_channel0)
262 .def("get_channel1", &DAPHNEStreamFrame::get_channel1)
263 .def("get_channel2", &DAPHNEStreamFrame::get_channel2)
264 .def("get_channel3", &DAPHNEStreamFrame::get_channel3)
265 .def_static("sizeof", []() { return sizeof(DAPHNEStreamFrame); })
266 .def("get_bytes", [](DAPHNEStreamFrame* fr) -> py::bytes {
267 return py::bytes(reinterpret_cast<char*>(fr), sizeof(DAPHNEStreamFrame)); // NOLINT
268 });
269} // NOLINT function length
270
271// NOLINTEND(build/unsigned)
272
273} // namespace dunedaq::fddetdataformats::python
detdataformats::DAQHeader daq_header
uint64_t get_timestamp() const
Get the 64-bit timestamp of the frame.
uint16_t get_adc(int i) const
Get the ith ADC value in the frame.
uint8_t get_channel1() const
Get the channel 1 from the DAPHNE Stream frame header.
void set_timestamp(const uint64_t new_timestamp)
Set the 64-bit timestamp of the frame.
uint16_t get_adc(uint i_adc, uint i_channel) const
Get the i ADC value of chn in the frame.
uint8_t get_channel2() const
Get the channel 2 from the DAPHNE Stream frame header.
uint8_t get_channel0() const
Get the channel 0 from the DAPHNE Stream frame header.
uint8_t get_channel3() const
Get the channel 3 from the DAPHNE Stream frame header.
void set_adc(uint i, uint chn, uint16_t val)
Set the i ADC value of chn in the frame to val.
void register_daphne(py::module &m)
Definition daphne.cpp:22
DAQHeader is a versioned and unified structure for every FE electronics.
Definition DAQHeader.hpp:23
bool is_found(int idx) const
Get the Found value for a specific peak (channel) from the trailer. (Word 2*idx, bit 31).
void set_adc_integral(uint32_t val, int idx)
Set the ADC_Integral value for a specific peak.
uint16_t get_adc_max(int idx) const
Get the ADC Max value for a specific peak. (Word 2*idx+1, bits [31:18]).
void set_num_subpeaks(uint8_t val, int idx)
Set the Num_SubPeaks value for a specific peak.
uint16_t get_sample_start(int idx) const
Get the Time_Start value for a given index (0-4).
void set_found(uint8_t val, int idx)
Set the Found value for a specific peak (channel) in the trailer.
uint32_t get_adc_integral(int idx) const
Get the ADC_Integral value for a specific peak. (Word 2*idx, bits [30:8]).
void set_sample_start(uint16_t val, int idx)
Set the time_start field for Peak index 0–4 using bit shifts.
void set_adc_max(uint16_t val, int idx)
Set the ADC Max value for a specific peak.
uint8_t get_num_subpeaks(int idx) const
Get the Num_SubPeaks value for a specific peak. (Word 2*idx, bits [3:0]).
uint16_t get_samples_over_baseline(int idx) const
Get the Time_Over_Baseline value for a specific peak. (Word 2*idx+1, bits [8:0]).