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