DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
tdeeth.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
21register_tdeeth(py::module& m)
22{
23 py::class_<TDEEthFrame::TDEEthHeader>(m, "TDEEthHeader")
24 .def_property(
25 "channel",
26 [](TDEEthFrame::TDEEthHeader& self) -> uint16_t { return self.channel; },
27 [](TDEEthFrame::TDEEthHeader& self, uint16_t channel) { self.channel = channel; })
28 .def_property(
29 "version",
30 [](TDEEthFrame::TDEEthHeader& self) -> uint16_t { return self.version; },
31 [](TDEEthFrame::TDEEthHeader& self, uint16_t version) { self.version = version; })
32 .def_property(
33 "tde_header",
34 [](TDEEthFrame::TDEEthHeader& self) -> uint16_t { return self.tde_header; },
35 [](TDEEthFrame::TDEEthHeader& self, uint16_t tde_header) { self.tde_header = tde_header; })
36 .def_property(
37 "tde_errors",
38 [](TDEEthFrame::TDEEthHeader& self) -> uint16_t { return self.tde_errors; },
39 [](TDEEthFrame::TDEEthHeader& self, uint16_t tde_errors) { self.tde_errors = tde_errors; })
40 .def_property(
41 "TAItime",
42 [](TDEEthFrame::TDEEthHeader& self) -> uint64_t { return self.TAItime; },
43 [](TDEEthFrame::TDEEthHeader& self, uint64_t TAItime) { self.TAItime = TAItime; })
44 .def_property_readonly_static("s_expected_bytes",
45 [](py::object /*self*/) { return TDEEthFrame::TDEEthHeader::s_expected_bytes; });
46
47 py::class_<TDEEthFrame>(m, "TDEEthFrame", py::buffer_protocol())
48 .def(py::init())
49 .def(py::init([](py::capsule capsule) {
50 auto tfp = *static_cast<TDEEthFrame*>(capsule.get_pointer());
51 return tfp;
52 }))
53 .def(py::init([](py::bytes bytes) {
54 py::buffer_info info(py::buffer(bytes).request());
55 auto tfp = *static_cast<TDEEthFrame*>(info.ptr);
56 return tfp;
57 }))
58 .def(
59 "get_daqheader",
60 [](TDEEthFrame& self) -> const detdataformats::DAQEthHeader& { return self.daq_header; },
61 py::return_value_policy::reference_internal)
62 .def(
63 "get_tdeheader",
64 [](TDEEthFrame& self) -> const TDEEthFrame::TDEEthHeader& { return self.header; },
65 py::return_value_policy::reference_internal)
66 .def_property_readonly(
67 "daq_header",
68 [](TDEEthFrame& self) -> detdataformats::DAQEthHeader& { return self.daq_header; },
69 py::return_value_policy::reference_internal)
70 .def_property_readonly(
71 "header",
72 [](TDEEthFrame& self) -> TDEEthFrame::TDEEthHeader& { return self.header; },
73 py::return_value_policy::reference_internal)
74 .def("get_adc", &TDEEthFrame::get_adc)
75 .def("set_adc", &TDEEthFrame::set_adc)
76 .def("get_timestamp", &TDEEthFrame::get_timestamp)
77 .def("set_timestamp", &TDEEthFrame::set_timestamp)
78 .def("get_channel", &TDEEthFrame::get_channel)
79 .def("set_channel", &TDEEthFrame::set_channel)
80 .def("__lt__", [](const TDEEthFrame& lhs, const TDEEthFrame& rhs) { return lhs < rhs; })
81 .def_property_readonly_static("s_bits_per_adc", [](py::object /*self*/) { return TDEEthFrame::s_bits_per_adc; })
82 .def_property_readonly_static("s_bits_per_word", [](py::object /*self*/) { return TDEEthFrame::s_bits_per_word; })
83 .def_property_readonly_static("s_time_samples_per_frame",
84 [](py::object /*self*/) { return TDEEthFrame::s_time_samples_per_frame; })
85 .def_property_readonly_static("s_channels_per_half_femb",
86 [](py::object /*self*/) { return TDEEthFrame::s_channels_per_half_femb; })
87 .def_property_readonly_static("s_half_fembs_per_frame",
88 [](py::object /*self*/) { return TDEEthFrame::s_half_fembs_per_frame; })
89 .def_property_readonly_static("s_num_channels", [](py::object /*self*/) { return TDEEthFrame::s_num_channels; })
90 .def_property_readonly_static("s_num_adc_words_per_ts",
91 [](py::object /*self*/) { return TDEEthFrame::s_num_adc_words_per_ts; })
92 .def_property_readonly_static("s_expected_bytes", [](py::object /*self*/) { return TDEEthFrame::s_expected_bytes; })
93 .def_static("sizeof", []() { return sizeof(TDEEthFrame); })
94 .def("get_bytes", [](TDEEthFrame* fr) -> py::bytes {
95 return py::bytes(reinterpret_cast<char*>(fr), sizeof(TDEEthFrame)); // NOLINT reinterpret_cast
96 });
97} // NOLINT (defensible use of "overly long" function)
98
99// NOLINTEND(build/unsigned)
100
101} // namespace dunedaq::fddetdataformats::python
void register_tdeeth(pybind11::module &)
DAQEthHeader is a versioned and unified structure for every FE electronics.
Struct for accessing raw TDE eth frames, as used in ProtoDUNE-II.
static constexpr int s_channels_per_half_femb
static constexpr size_t s_expected_bytes
void set_channel(const uint8_t new_channel)
Set the channel identifier of the frame.
uint16_t get_adc(int i_channel, int i_sample=0) const
Get the i_channel-th ADC value in the i_sample-th time sample.
void set_adc(int i_channel, int i_sample, uint16_t val)
Set the i_channel-th ADC value in the i_sample-th time sample to val.
static constexpr int s_time_samples_per_frame
uint8_t get_channel() const
Get the channel identifier of the frame.
static constexpr int s_num_adc_words_per_ts
void set_timestamp(const uint64_t new_timestamp)
Set the starting 64-bit timestamp of the frame.
uint64_t get_timestamp() const
Get the starting 64-bit timestamp of the frame.
static constexpr int s_half_fembs_per_frame