DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
daphnestream.cpp
Go to the documentation of this file.
1
8
10
11#include <pybind11/pybind11.h>
12#include <pybind11/stl.h>
13
14namespace py = pybind11;
15
17
18// NOLINTBEGIN(build/unsigned)
19
20void
22{
23
24 py::class_<DAPHNEStreamFrame::Header>(m, "DAPHNEStreamHeader")
25 .def_property(
26 "channel_0",
27 [](DAPHNEStreamFrame::Header& self) -> uint32_t { return self.channel_0; },
28 [](DAPHNEStreamFrame::Header& self, uint32_t channel_0) { self.channel_0 = channel_0; })
29 .def_property(
30 "channel_1",
31 [](DAPHNEStreamFrame::Header& self) -> uint32_t { return self.channel_1; },
32 [](DAPHNEStreamFrame::Header& self, uint32_t channel_1) { self.channel_1 = channel_1; })
33 .def_property(
34 "channel_2",
35 [](DAPHNEStreamFrame::Header& self) -> uint32_t { return self.channel_2; },
36 [](DAPHNEStreamFrame::Header& self, uint32_t channel_2) { self.channel_2 = channel_2; })
37 .def_property(
38 "channel_3",
39 [](DAPHNEStreamFrame::Header& self) -> uint32_t { return self.channel_3; },
40 [](DAPHNEStreamFrame::Header& self, uint32_t channel_3) { self.channel_3 = channel_3; })
41 .def_property_readonly_static("s_expected_bytes",
42 [](py::object /*self*/) { return sizeof(DAPHNEStreamFrame::Header); });
43
44 py::class_<DAPHNEStreamFrame>(m, "DAPHNEStreamFrame", py::buffer_protocol())
45 .def(py::init())
46 .def(py::init([](py::capsule capsule) {
47 auto wfp = *static_cast<DAPHNEStreamFrame*>(capsule.get_pointer());
48 return wfp;
49 }))
50 .def(py::init([](py::bytes bytes) {
51 py::buffer_info info(py::buffer(bytes).request());
52 auto wfp = *static_cast<DAPHNEStreamFrame*>(info.ptr);
53 return wfp;
54 }))
55 .def_property_readonly(
56 "daq_header",
57 [](DAPHNEStreamFrame& self) -> detdataformats::DAQHeader& { return self.daq_header; },
58 py::return_value_policy::reference_internal)
59 .def_property_readonly(
60 "header",
61 [](DAPHNEStreamFrame& self) -> DAPHNEStreamFrame::Header& { return self.header; },
62 py::return_value_policy::reference_internal)
63 .def("get_timestamp", &DAPHNEStreamFrame::get_timestamp)
64 .def("set_timestamp", &DAPHNEStreamFrame::set_timestamp)
65 .def("get_adc", &DAPHNEStreamFrame::get_adc)
66 .def("set_adc", &DAPHNEStreamFrame::set_adc)
67 .def("__lt__", [](const DAPHNEStreamFrame& lhs, const DAPHNEStreamFrame& rhs) { return lhs < rhs; })
68 .def_property_readonly_static("s_bits_per_adc",
69 [](py::object /*self*/) { return DAPHNEStreamFrame::s_bits_per_adc; })
70 .def_property_readonly_static("s_bits_per_word",
71 [](py::object /*self*/) { return DAPHNEStreamFrame::s_bits_per_word; })
72 .def_property_readonly_static("s_channels_per_frame",
73 [](py::object /*self*/) { return DAPHNEStreamFrame::s_channels_per_frame; })
74 .def_property_readonly_static("s_adcs_per_channel",
75 [](py::object /*self*/) { return DAPHNEStreamFrame::s_adcs_per_channel; })
76 .def_property_readonly_static("s_daphnes_per_frame",
77 [](py::object /*self*/) { return DAPHNEStreamFrame::s_daphnes_per_frame; })
78 .def_property_readonly_static("s_num_adc_words",
79 [](py::object /*self*/) { return DAPHNEStreamFrame::s_num_adc_words; })
80 .def_property_readonly_static("s_expected_bytes",
81 [](py::object /*self*/) { return DAPHNEStreamFrame::s_expected_bytes; })
82 .def("get_channel0", &DAPHNEStreamFrame::get_channel0)
83 .def("get_channel1", &DAPHNEStreamFrame::get_channel1)
84 .def("get_channel2", &DAPHNEStreamFrame::get_channel2)
85 .def("get_channel3", &DAPHNEStreamFrame::get_channel3)
86 .def_static("sizeof", []() { return sizeof(DAPHNEStreamFrame); })
87 .def("get_bytes", [](DAPHNEStreamFrame* fr) -> py::bytes {
88 return py::bytes(reinterpret_cast<char*>(fr), sizeof(DAPHNEStreamFrame)); // NOLINT
89 });
90}
91
92// NOLINTEND(build/unsigned)
93
94} // namespace dunedaq::fddetdataformats::python
void register_daphnestream(py::module &m)
DAQHeader is a versioned and unified structure for every FE electronics.
Definition DAQHeader.hpp:23
void set_adc(int i, int i_channel, uint16_t val)
Set the i ADC value of chn in the frame to val.
void set_timestamp(const uint64_t new_timestamp)
Set the 64-bit timestamp of the frame.
uint16_t get_adc(int i_adc, int i_channel) const
Get the i ADC value of chn in the frame.