Line data Source code
1 : /**
2 : * @file daphne.cpp Python bindings for the DAPHNEFrame format
3 : *
4 : * This is part of the DUNE DAQ Software Suite, copyright 2020.
5 : * Licensing/copyright details are in the COPYING file that you should have
6 : * received with this code.
7 : */
8 :
9 : #include "fddetdataformats/DAPHNEFrame.hpp"
10 : #include "fddetdataformats/DAPHNEStreamFrame.hpp"
11 :
12 : #include <pybind11/pybind11.h>
13 : #include <pybind11/stl.h>
14 :
15 : namespace py = pybind11;
16 :
17 : namespace dunedaq::fddetdataformats::python {
18 :
19 : // NOLINTBEGIN(build/unsigned)
20 :
21 : void
22 0 : register_daphne(py::module& m)
23 : {
24 :
25 0 : py::class_<DAPHNEFrame>(m, "DAPHNEFrame", py::buffer_protocol())
26 0 : .def(py::init())
27 0 : .def(py::init([](py::capsule capsule) {
28 0 : auto wfp = *static_cast<DAPHNEFrame*>(capsule.get_pointer());
29 0 : return wfp;
30 : }))
31 0 : .def(py::init([](py::bytes bytes) {
32 0 : py::buffer_info info(py::buffer(bytes).request());
33 0 : auto wfp = *static_cast<DAPHNEFrame*>(info.ptr);
34 0 : return wfp;
35 0 : }))
36 0 : .def(
37 : "get_daqheader",
38 0 : [](DAPHNEFrame& self) -> const detdataformats::DAQHeader& { return self.daq_header; },
39 0 : py::return_value_policy::reference_internal)
40 0 : .def(
41 : "get_header",
42 0 : [](DAPHNEFrame& self) -> const DAPHNEFrame::Header& { return self.header; },
43 0 : py::return_value_policy::reference_internal)
44 0 : .def(
45 : "get_peaks_data",
46 0 : [](DAPHNEFrame& self) -> const DAPHNEFrame::PeakDescriptorData& { return self.peaks_data; },
47 0 : py::return_value_policy::reference_internal)
48 0 : .def("get_adc", static_cast<uint16_t (DAPHNEFrame::*)(const int) const>(&DAPHNEFrame::get_adc))
49 0 : .def("get_timestamp", &DAPHNEFrame::get_timestamp)
50 0 : .def("get_channel", &DAPHNEFrame::get_channel)
51 0 : .def_static("sizeof", []() { return sizeof(DAPHNEFrame); });
52 :
53 0 : py::class_<DAPHNEFrame::Header>(m, "DAPHNEFrameHeader")
54 0 : .def_property(
55 : "channel",
56 0 : [](DAPHNEFrame::Header& self) -> uint8_t { return self.channel; },
57 0 : [](DAPHNEFrame::Header& self, uint8_t channel) { self.channel = channel; })
58 0 : .def_property(
59 : "algorithm_id",
60 0 : [](DAPHNEFrame::Header& self) -> uint8_t { return self.algorithm_id; },
61 0 : [](DAPHNEFrame::Header& self, uint8_t algorithm_id) { self.algorithm_id = algorithm_id; })
62 0 : .def_property(
63 : "r1",
64 0 : [](DAPHNEFrame::Header& self) -> uint8_t { return self.r1; },
65 0 : [](DAPHNEFrame::Header& self, uint8_t r1) { self.r1 = r1; })
66 0 : .def_property(
67 : "trigger_sample_value",
68 0 : [](DAPHNEFrame::Header& self) -> uint16_t { return self.trigger_sample_value; },
69 0 : [](DAPHNEFrame::Header& self, uint16_t tsv) { self.trigger_sample_value = tsv; })
70 0 : .def_property(
71 : "threshold",
72 0 : [](DAPHNEFrame::Header& self) -> uint16_t { return self.threshold; },
73 0 : [](DAPHNEFrame::Header& self, uint16_t threshold) { self.threshold = threshold; })
74 0 : .def_property(
75 : "baseline",
76 0 : [](DAPHNEFrame::Header& self) -> uint16_t { return self.baseline; },
77 0 : [](DAPHNEFrame::Header& self, uint16_t baseline) { self.baseline = baseline; });
78 :
79 0 : py::class_<DAPHNEFrame::PeakDescriptorData>(m, "DAPHNEFramePeakDescriptorData")
80 0 : .def("is_found", &DAPHNEFrame::PeakDescriptorData::is_found)
81 0 : .def("set_found", &DAPHNEFrame::PeakDescriptorData::set_found)
82 :
83 0 : .def("get_adc_integral", &DAPHNEFrame::PeakDescriptorData::get_adc_integral)
84 0 : .def("set_adc_integral", &DAPHNEFrame::PeakDescriptorData::set_adc_integral)
85 :
86 0 : .def("get_num_subpeaks", &DAPHNEFrame::PeakDescriptorData::get_num_subpeaks)
87 0 : .def("set_num_subpeaks", &DAPHNEFrame::PeakDescriptorData::set_num_subpeaks)
88 :
89 0 : .def("get_samples_over_baseline", &DAPHNEFrame::PeakDescriptorData::get_samples_over_baseline)
90 0 : .def("set_samples_over_baseline", &DAPHNEFrame::PeakDescriptorData::set_samples_over_baseline)
91 :
92 0 : .def("get_adc_max", &DAPHNEFrame::PeakDescriptorData::get_adc_max)
93 0 : .def("set_adc_max", &DAPHNEFrame::PeakDescriptorData::set_adc_max)
94 :
95 0 : .def("get_sample_start", &DAPHNEFrame::PeakDescriptorData::get_sample_start)
96 0 : .def("set_sample_start", &DAPHNEFrame::PeakDescriptorData::set_sample_start)
97 :
98 0 : .def_property(
99 : "num_subpeaks_0",
100 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint8_t { return self.num_subpeaks_0; },
101 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint8_t val) { self.num_subpeaks_0 = val; })
102 0 : .def_property(
103 : "adc_integral_0",
104 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint32_t { return self.adc_integral_0; },
105 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint32_t val) { self.adc_integral_0 = val; })
106 0 : .def_property(
107 : "found_0",
108 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint8_t { return self.found_0; },
109 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint8_t val) { self.found_0 = val; })
110 0 : .def_property(
111 : "adc_max_0",
112 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.adc_max_0; },
113 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.adc_max_0 = val; })
114 0 : .def_property(
115 : "sample_max_0",
116 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.sample_max_0; },
117 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.sample_max_0 = val; })
118 0 : .def_property(
119 : "samples_over_baseline_0",
120 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.samples_over_baseline_0; },
121 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.samples_over_baseline_0 = val; })
122 :
123 0 : .def_property(
124 : "num_subpeaks_1",
125 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint8_t { return self.num_subpeaks_1; },
126 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint8_t val) { self.num_subpeaks_1 = val; })
127 0 : .def_property(
128 : "adc_integral_1",
129 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint32_t { return self.adc_integral_1; },
130 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint32_t val) { self.adc_integral_1 = val; })
131 0 : .def_property(
132 : "found_1",
133 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint8_t { return self.found_1; },
134 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint8_t val) { self.found_1 = val; })
135 0 : .def_property(
136 : "adc_max_1",
137 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.adc_max_1; },
138 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.adc_max_1 = val; })
139 0 : .def_property(
140 : "sample_max_1",
141 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.sample_max_1; },
142 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.sample_max_1 = val; })
143 0 : .def_property(
144 : "samples_over_baseline_1",
145 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.samples_over_baseline_1; },
146 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.samples_over_baseline_1 = val; })
147 :
148 0 : .def_property(
149 : "num_subpeaks_2",
150 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint8_t { return self.num_subpeaks_2; },
151 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint8_t val) { self.num_subpeaks_2 = val; })
152 0 : .def_property(
153 : "adc_integral_2",
154 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint32_t { return self.adc_integral_2; },
155 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint32_t val) { self.adc_integral_2 = val; })
156 0 : .def_property(
157 : "found_2",
158 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint8_t { return self.found_2; },
159 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint8_t val) { self.found_2 = val; })
160 0 : .def_property(
161 : "adc_max_2",
162 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.adc_max_2; },
163 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.adc_max_2 = val; })
164 0 : .def_property(
165 : "sample_max_2",
166 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.sample_max_2; },
167 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.sample_max_2 = val; })
168 0 : .def_property(
169 : "samples_over_baseline_2",
170 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.samples_over_baseline_2; },
171 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.samples_over_baseline_2 = val; })
172 :
173 0 : .def_property(
174 : "num_subpeaks_3",
175 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint8_t { return self.num_subpeaks_3; },
176 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint8_t val) { self.num_subpeaks_3 = val; })
177 0 : .def_property(
178 : "adc_integral_3",
179 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint32_t { return self.adc_integral_3; },
180 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint32_t val) { self.adc_integral_3 = val; })
181 0 : .def_property(
182 : "found_3",
183 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint8_t { return self.found_3; },
184 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint8_t val) { self.found_3 = val; })
185 0 : .def_property(
186 : "adc_max_3",
187 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.adc_max_3; },
188 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.adc_max_3 = val; })
189 0 : .def_property(
190 : "sample_max_3",
191 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.sample_max_3; },
192 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.sample_max_3 = val; })
193 0 : .def_property(
194 : "samples_over_baseline_3",
195 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.samples_over_baseline_3; },
196 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.samples_over_baseline_3 = val; })
197 :
198 0 : .def_property(
199 : "num_subpeaks_4",
200 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint8_t { return self.num_subpeaks_4; },
201 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint8_t val) { self.num_subpeaks_4 = val; })
202 0 : .def_property(
203 : "adc_integral_4",
204 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint32_t { return self.adc_integral_4; },
205 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint32_t val) { self.adc_integral_4 = val; })
206 0 : .def_property(
207 : "found_4",
208 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint8_t { return self.found_4; },
209 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint8_t val) { self.found_4 = val; })
210 0 : .def_property(
211 : "adc_max_4",
212 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.adc_max_4; },
213 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.adc_max_4 = val; })
214 0 : .def_property(
215 : "sample_max_4",
216 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.sample_max_4; },
217 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.sample_max_4 = val; })
218 0 : .def_property(
219 : "samples_over_baseline_4",
220 0 : [](DAPHNEFrame::PeakDescriptorData& self) -> uint16_t { return self.samples_over_baseline_4; },
221 0 : [](DAPHNEFrame::PeakDescriptorData& self, uint16_t val) { self.samples_over_baseline_4 = val; });
222 :
223 0 : py::class_<DAPHNEStreamFrame::Header>(m, "DAPHNEStreamHeader")
224 0 : .def_property(
225 : "channel_0",
226 0 : [](DAPHNEStreamFrame::Header& self) -> uint32_t { return self.channel_0; },
227 0 : [](DAPHNEStreamFrame::Header& self, uint32_t channel_0) { self.channel_0 = channel_0; })
228 0 : .def_property(
229 : "channel_1",
230 0 : [](DAPHNEStreamFrame::Header& self) -> uint32_t { return self.channel_1; },
231 0 : [](DAPHNEStreamFrame::Header& self, uint32_t channel_1) { self.channel_1 = channel_1; })
232 0 : .def_property(
233 : "channel_2",
234 0 : [](DAPHNEStreamFrame::Header& self) -> uint32_t { return self.channel_2; },
235 0 : [](DAPHNEStreamFrame::Header& self, uint32_t channel_2) { self.channel_2 = channel_2; })
236 0 : .def_property(
237 : "channel_3",
238 0 : [](DAPHNEStreamFrame::Header& self) -> uint32_t { return self.channel_3; },
239 0 : [](DAPHNEStreamFrame::Header& self, uint32_t channel_3) { self.channel_3 = channel_3; });
240 :
241 0 : py::class_<DAPHNEStreamFrame>(m, "DAPHNEStreamFrame", py::buffer_protocol())
242 0 : .def(py::init())
243 0 : .def(py::init([](py::capsule capsule) {
244 0 : auto wfp = *static_cast<DAPHNEStreamFrame*>(capsule.get_pointer());
245 0 : return wfp;
246 : }))
247 0 : .def(
248 : "get_daqheader",
249 0 : [](DAPHNEStreamFrame& self) -> const detdataformats::DAQHeader& { return self.daq_header; },
250 0 : py::return_value_policy::reference_internal)
251 0 : .def(
252 : "get_header",
253 0 : [](DAPHNEStreamFrame& self) -> const DAPHNEStreamFrame::Header& { return self.header; },
254 0 : 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 0 : .def("get_timestamp", &DAPHNEStreamFrame::get_timestamp)
258 0 : .def("set_timestamp", &DAPHNEStreamFrame::set_timestamp)
259 0 : .def("get_adc", &DAPHNEStreamFrame::get_adc)
260 0 : .def("set_adc", &DAPHNEStreamFrame::set_adc)
261 0 : .def("get_channel0", &DAPHNEStreamFrame::get_channel0)
262 0 : .def("get_channel1", &DAPHNEStreamFrame::get_channel1)
263 0 : .def("get_channel2", &DAPHNEStreamFrame::get_channel2)
264 0 : .def("get_channel3", &DAPHNEStreamFrame::get_channel3)
265 0 : .def_static("sizeof", []() { return sizeof(DAPHNEStreamFrame); })
266 0 : .def("get_bytes", [](DAPHNEStreamFrame* fr) -> py::bytes {
267 0 : return py::bytes(reinterpret_cast<char*>(fr), sizeof(DAPHNEStreamFrame)); // NOLINT
268 : });
269 0 : } // NOLINT function length
270 :
271 : // NOLINTEND(build/unsigned)
272 :
273 : } // namespace dunedaq::fddetdataformats::python
|