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
18void
19register_tdeeth(py::module& m)
20{
21
22 // NOLINTBEGIN(build/unsigned)
23
24 // py::class_<TDEEthFrame::TDEHeader>(m, "TDEHeader")
25 // .def_property("channel",
26 // [](TDEEthFrame::TDEHeader& self) -> uint32_t {return self.channel;},
27 // [](TDEEthFrame::TDEHeader& self, uint32_t channel) {self.channel = channel;}
28 // )
29 // .def_property("version",
30 // [](TDEEthFrame::TDEHeader& self) -> uint32_t {return self.version;},
31 // [](TDEEthFrame::TDEHeader& self, uint32_t version) {self.version = version;}
32 // )
33 // // .def_property("reserved",
34 // // [](TDEEthFrame::TDEHeader& self) -> uint32_t {return self.reserved;},
35 // // [](TDEEthFrame::TDEHeader& self, uint32_t reserved) {self.reserved = reserved;}
36 // // )
37 // .def_property("cd",
38 // [](TDEEthFrame::TDEHeader& self) -> uint32_t {return self.cd;},
39 // [](TDEEthFrame::TDEHeader& self, uint32_t cd) {self.version = cd;}
40 // )
41 // .def_property("context",
42 // [](TDEEthFrame::TDEHeader& self) -> uint32_t {return self.context;},
43 // [](TDEEthFrame::TDEHeader& self, uint32_t context) {self.version = context;}
44 // )
45 // .def_property("ready",
46 // [](TDEEthFrame::TDEHeader& self) -> uint32_t {return self.ready;},
47 // [](TDEEthFrame::TDEHeader& self, uint32_t ready) {self.ready = ready;}
48 // )
49 // .def_property("calibration",
50 // [](TDEEthFrame::TDEHeader& self) -> uint32_t {return self.calibration;},
51 // [](TDEEthFrame::TDEHeader& self, uint32_t calibration) {self.calibration = calibration;}
52 // )
53 // .def_property("pulser",
54 // [](TDEEthFrame::TDEHeader& self) -> uint32_t {return self.pulser;},
55 // [](TDEEthFrame::TDEHeader& self, uint32_t pulser) {self.pulser = pulser;}
56 // )
57 // .def_property("femb_sync",
58 // [](TDEEthFrame::TDEHeader& self) -> uint32_t {return self.femb_sync;},
59 // [](TDEEthFrame::TDEHeader& self, uint32_t femb_sync) {self.femb_sync = femb_sync;}
60 // )
61 // .def_property("wib_sync",
62 // [](TDEEthFrame::TDEHeader& self) -> uint32_t {return self.wib_sync;},
63 // [](TDEEthFrame::TDEHeader& self, uint32_t wib_sync) {self.wib_sync = wib_sync;}
64 // )
65 // .def_property("lol",
66 // [](TDEEthFrame::TDEHeader& self) -> uint32_t {return self.lol;},
67 // [](TDEEthFrame::TDEHeader& self, uint32_t lol) {self.lol = lol;}
68 // )
69 // .def_property("link_valid",
70 // [](TDEEthFrame::TDEHeader& self) -> uint32_t {return self.link_valid;},
71 // [](TDEEthFrame::TDEHeader& self, uint32_t link_valid) {self.link_valid = link_valid;}
72 // )
73 // .def_property("crc_err",
74 // [](TDEEthFrame::TDEHeader& self) -> uint32_t {return self.crc_err;},
75 // [](TDEEthFrame::TDEHeader& self, uint32_t crc_err) {self.crc_err = crc_err;}
76 // )
77 // .def_property("colddata_timestamp_1",
78 // [](TDEEthFrame::TDEHeader& self) -> uint32_t {return self.colddata_timestamp_1;},
79 // [](TDEEthFrame::TDEHeader& self, uint32_t colddata_timestamp_1) {self.lol = colddata_timestamp_1;}
80 // )
81 // .def_property("colddata_timestamp_0",
82 // [](TDEEthFrame::TDEHeader& self) -> uint32_t {return self.colddata_timestamp_0;},
83 // [](TDEEthFrame::TDEHeader& self, uint32_t colddata_timestamp_0) {self.colddata_timestamp_0 =
84 // colddata_timestamp_0;}
85 // )
86 // .def_property("extra_data",
87 // [](TDEEthFrame::TDEHeader& self) -> uint64_t {return self.extra_data;},
88 // [](TDEEthFrame::TDEHeader& self, uint64_t extra_data) {self.extra_data = extra_data;}
89 // )
90 // ;
91
92 py::class_<TDEEthFrame::TDEEthHeader>(m, "TDEEthHeader")
93 .def_property(
94 "channel",
95 [](TDEEthFrame::TDEEthHeader& self) -> uint16_t { return self.channel; },
96 [](TDEEthFrame::TDEEthHeader& self, uint16_t channel) { self.channel = channel; })
97 .def_property(
98 "version",
99 [](TDEEthFrame::TDEEthHeader& self) -> uint16_t { return self.version; },
100 [](TDEEthFrame::TDEEthHeader& self, uint16_t version) { self.version = version; })
101 .def_property(
102 "tde_header",
103 [](TDEEthFrame::TDEEthHeader& self) -> uint16_t { return self.tde_header; },
104 [](TDEEthFrame::TDEEthHeader& self, uint16_t tde_header) { self.tde_header = tde_header; })
105 .def_property(
106 "tde_errors",
107 [](TDEEthFrame::TDEEthHeader& self) -> uint16_t { return self.tde_errors; },
108 [](TDEEthFrame::TDEEthHeader& self, uint16_t tde_errors) { self.tde_errors = tde_errors; })
109 .def_property(
110 "TAItime",
111 [](TDEEthFrame::TDEEthHeader& self) -> uint64_t { return self.TAItime; },
112 [](TDEEthFrame::TDEEthHeader& self, uint64_t TAItime) { self.TAItime = TAItime; });
113
114 py::class_<TDEEthFrame>(m, "TDEEthFrame", py::buffer_protocol())
115 .def(py::init())
116 .def(py::init([](py::capsule capsule) {
117 auto tfp = *static_cast<TDEEthFrame*>(capsule.get_pointer());
118 return tfp;
119 }))
120 .def(py::init([](py::bytes bytes) {
121 py::buffer_info info(py::buffer(bytes).request());
122 auto tfp = *static_cast<TDEEthFrame*>(info.ptr);
123 return tfp;
124 }))
125 .def(
126 "get_daqheader",
127 [](TDEEthFrame& self) -> const detdataformats::DAQEthHeader& { return self.daq_header; },
128 py::return_value_policy::reference_internal)
129 .def(
130 "get_tdeheader",
131 [](TDEEthFrame& self) -> const TDEEthFrame::TDEEthHeader& { return self.header; },
132 py::return_value_policy::reference_internal)
133 .def("get_adc", &TDEEthFrame::get_adc)
134 .def("set_adc", &TDEEthFrame::set_adc)
135 .def("get_timestamp", &TDEEthFrame::get_timestamp)
136 .def("set_timestamp", &TDEEthFrame::set_timestamp)
137 .def("get_channel", &TDEEthFrame::get_channel)
138 .def("set_channel", &TDEEthFrame::set_channel)
139 .def_static("sizeof", []() { return sizeof(TDEEthFrame); })
140 .def("get_bytes", [](TDEEthFrame* fr) -> py::bytes {
141 return py::bytes(reinterpret_cast<char*>(fr), sizeof(TDEEthFrame)); // NOLINT reinterpret_cast
142 });
143}
144
145// NOLINTEND(build/unsigned)
146
147} // namespace dunedaq::fddetdataformats::python
Class for accessing raw WIB eth frames, as used in ProtoDUNE-II.
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.
uint8_t get_channel() const
Get the channel identifier of the frame.
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.
void register_tdeeth(pybind11::module &)
DAQEthHeader is a versioned and unified structure for every FE electronics.