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