Line data Source code
1 : /**
2 : * @file trigger_record.cpp
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 "daqdataformats/TriggerRecord.hpp"
10 : #include "daqdataformats/TriggerRecordHeader.hpp"
11 :
12 : #include <pybind11/pybind11.h>
13 : #include <pybind11/stl.h>
14 :
15 : #include <memory>
16 : #include <sstream>
17 : #include <vector>
18 :
19 : namespace py = pybind11;
20 :
21 : namespace dunedaq::daqdataformats::python {
22 :
23 : void
24 0 : register_trigger_record(py::module& m)
25 : {
26 0 : py::class_<TriggerRecordHeader>(m, "TriggerRecordHeader", pybind11::buffer_protocol())
27 0 : .def(py::init<std::vector<ComponentRequest> const&>())
28 0 : .def(py::init([](py::capsule capsule, bool copy_from_buffer) {
29 0 : return std::make_unique<TriggerRecordHeader>(capsule.get_pointer(), copy_from_buffer);
30 : }))
31 0 : .def(py::init<TriggerRecordHeader const&>())
32 0 : .def("get_header", &TriggerRecordHeader::get_header)
33 0 : .def("get_trigger_number", &TriggerRecordHeader::get_trigger_number)
34 : //.def("set_trigger_number", &TriggerRecordHeader::set_trigger_number)
35 0 : .def("get_trigger_timestamp", &TriggerRecordHeader::get_trigger_timestamp)
36 : //.def("set_trigger_timestamp", &TriggerRecordHeader::set_trigger_timestamp)
37 0 : .def("get_num_requested_components", &TriggerRecordHeader::get_num_requested_components)
38 0 : .def("get_run_number", &TriggerRecordHeader::get_run_number)
39 : //.def("set_run_number", &TriggerRecordHeader::set_run_number)
40 0 : .def("get_status_bits", &TriggerRecordHeader::get_status_bits)
41 : //.def("set_status_bits", &TriggerRecordHeader::set_status_bits)
42 0 : .def("get_status_bit", &TriggerRecordHeader::get_status_bit)
43 : //.def("set_status_bit", &TriggerRecordHeader::set_status_bit)
44 0 : .def("get_trigger_type", &TriggerRecordHeader::get_trigger_type)
45 : //.def("set_trigger_type", &TriggerRecordHeader::set_trigger_type)
46 0 : .def("get_sequence_number", &TriggerRecordHeader::get_sequence_number)
47 : //.def("set_sequence_number", &TriggerRecordHeader::set_sequence_number)
48 0 : .def("get_max_sequence_number", &TriggerRecordHeader::get_max_sequence_number)
49 : //.def("set_max_sequence_number", &TriggerRecordHeader::set_max_sequence_number)
50 0 : .def("get_total_size_bytes", &TriggerRecordHeader::get_total_size_bytes)
51 0 : .def(
52 0 : "get_storage_location", &TriggerRecordHeader::get_storage_location, py::return_value_policy::reference_internal)
53 0 : .def("get_element_id", &TriggerRecordHeader::get_element_id)
54 0 : .def("get_component_for_source_id",
55 0 : &TriggerRecordHeader::get_component_for_source_id,
56 0 : py::return_value_policy::reference_internal)
57 0 : .def("at", &TriggerRecordHeader::at)
58 0 : .def("__getitem__", &TriggerRecordHeader::at, py::return_value_policy::reference_internal);
59 :
60 0 : py::class_<TriggerRecordHeaderData>(m, "TriggerRecordHeaderData")
61 0 : .def(py::init<>())
62 0 : .def_property_readonly_static("s_trigger_record_header_magic",
63 0 : [](const py::object&) -> uint32_t { // NOLINT(build/unsigned)
64 : return TriggerRecordHeaderData::s_trigger_record_header_magic;
65 : })
66 0 : .def_property_readonly_static("s_trigger_record_header_version",
67 0 : [](const py::object&) -> uint32_t { // NOLINT(build/unsigned)
68 : return TriggerRecordHeaderData::s_trigger_record_header_version;
69 : })
70 0 : .def_property_readonly_static("s_invalid_number_components",
71 0 : [](const py::object&) -> uint64_t { // NOLINT(build/unsigned)
72 : return TriggerRecordHeaderData::s_invalid_number_components;
73 : })
74 0 : .def_property_readonly_static("s_default_status_bits",
75 0 : [](const py::object&) -> uint32_t { // NOLINT(build/unsigned)
76 : return TriggerRecordHeaderData::s_default_status_bits;
77 : })
78 0 : .def_property_readonly("trigger_record_header_marker",
79 0 : [](const TriggerRecordHeaderData& self) -> uint32_t { // NOLINT(build/unsigned)
80 0 : return self.trigger_record_header_marker;
81 : })
82 0 : .def_property_readonly(
83 0 : "version", [](const TriggerRecordHeaderData& self) -> uint32_t { return self.version; }) // NOLINT(build/unsigned)
84 0 : .def_property_readonly("trigger_number",
85 0 : [](const TriggerRecordHeaderData& self) -> trigger_number_t { return self.trigger_number; })
86 0 : .def_property_readonly("trigger_timestamp",
87 0 : [](const TriggerRecordHeaderData& self) -> timestamp_t { return self.trigger_timestamp; })
88 0 : .def_property_readonly("num_requested_components",
89 0 : [](const TriggerRecordHeaderData& self) -> uint64_t { // NOLINT(build/unsigned)
90 0 : return self.num_requested_components;
91 : })
92 0 : .def_property_readonly("run_number",
93 0 : [](const TriggerRecordHeaderData& self) -> run_number_t { return self.run_number; })
94 0 : .def_property_readonly(
95 : "status_bits",
96 0 : [](const TriggerRecordHeaderData& self) -> uint32_t { return self.status_bits; }) // NOLINT(build/unsigned)
97 0 : .def_property_readonly("trigger_type",
98 0 : [](const TriggerRecordHeaderData& self) -> trigger_type_t { return self.trigger_type; })
99 0 : .def_property_readonly(
100 0 : "sequence_number", [](const TriggerRecordHeaderData& self) -> sequence_number_t { return self.sequence_number; })
101 0 : .def_property_readonly(
102 : "max_sequence_number",
103 0 : [](const TriggerRecordHeaderData& self) -> sequence_number_t { return self.max_sequence_number; })
104 0 : .def_property_readonly("element_id",
105 0 : [](const TriggerRecordHeaderData& self) -> SourceID { return self.element_id; })
106 0 : .def("__str__",
107 0 : [](const TriggerRecordHeaderData& hdr) {
108 0 : std::ostringstream oss;
109 0 : oss << hdr;
110 0 : return oss.str();
111 0 : })
112 0 : .def("__repr__", [](const TriggerRecordHeaderData& hdr) {
113 0 : std::ostringstream oss;
114 0 : oss << "<daqdataformats::TriggerRecordHeaderData " << hdr << ">";
115 0 : return oss.str();
116 0 : });
117 :
118 0 : py::enum_<TriggerRecordStatusBits>(m, "TriggerRecordStatusBits")
119 0 : .value("kIncomplete", TriggerRecordStatusBits::kIncomplete)
120 0 : .value("kMismatch", TriggerRecordStatusBits::kMismatch)
121 0 : .value("kUnassigned2", TriggerRecordStatusBits::kUnassigned2)
122 0 : .value("kUnassigned3", TriggerRecordStatusBits::kUnassigned3)
123 0 : .value("kUnassigned4", TriggerRecordStatusBits::kUnassigned4)
124 0 : .value("kUnassigned5", TriggerRecordStatusBits::kUnassigned5)
125 0 : .value("kUnassigned6", TriggerRecordStatusBits::kUnassigned6)
126 0 : .value("kUnassigned7", TriggerRecordStatusBits::kUnassigned7)
127 0 : .value("kUnassigned8", TriggerRecordStatusBits::kUnassigned8)
128 0 : .value("kUnassigned9", TriggerRecordStatusBits::kUnassigned9)
129 0 : .value("kUnassigned10", TriggerRecordStatusBits::kUnassigned10)
130 0 : .value("kUnassigned11", TriggerRecordStatusBits::kUnassigned11)
131 0 : .value("kUnassigned12", TriggerRecordStatusBits::kUnassigned12)
132 0 : .value("kUnassigned13", TriggerRecordStatusBits::kUnassigned13)
133 0 : .value("kUnassigned14", TriggerRecordStatusBits::kUnassigned14)
134 0 : .value("kUnassigned15", TriggerRecordStatusBits::kUnassigned15)
135 0 : .value("kUnassigned16", TriggerRecordStatusBits::kUnassigned16)
136 0 : .value("kUnassigned17", TriggerRecordStatusBits::kUnassigned17)
137 0 : .value("kUnassigned18", TriggerRecordStatusBits::kUnassigned18)
138 0 : .value("kUnassigned19", TriggerRecordStatusBits::kUnassigned19)
139 0 : .value("kUnassigned20", TriggerRecordStatusBits::kUnassigned20)
140 0 : .value("kUnassigned21", TriggerRecordStatusBits::kUnassigned21)
141 0 : .value("kUnassigned22", TriggerRecordStatusBits::kUnassigned22)
142 0 : .value("kUnassigned23", TriggerRecordStatusBits::kUnassigned23)
143 0 : .value("kUnassigned24", TriggerRecordStatusBits::kUnassigned24)
144 0 : .value("kUnassigned25", TriggerRecordStatusBits::kUnassigned25)
145 0 : .value("kUnassigned26", TriggerRecordStatusBits::kUnassigned26)
146 0 : .value("kUnassigned27", TriggerRecordStatusBits::kUnassigned27)
147 0 : .value("kUnassigned28", TriggerRecordStatusBits::kUnassigned28)
148 0 : .value("kUnassigned29", TriggerRecordStatusBits::kUnassigned29)
149 0 : .value("kUnassigned30", TriggerRecordStatusBits::kUnassigned30)
150 0 : .value("kUnassigned31", TriggerRecordStatusBits::kUnassigned31)
151 0 : .value("kInvalid", TriggerRecordStatusBits::kInvalid);
152 :
153 0 : py::class_<TriggerRecord> py_trigger_record(m, "TriggerRecord", pybind11::buffer_protocol());
154 0 : py_trigger_record.def(py::init<TriggerRecordHeader const&>())
155 0 : .def(py::init<std::vector<ComponentRequest> const&>())
156 0 : .def(
157 : "get_header_ref",
158 0 : [](TriggerRecord& self) { return self.get_header_ref(); },
159 0 : py::return_value_policy::reference_internal)
160 0 : .def("get_header_data", &TriggerRecord::get_header_data)
161 0 : .def(
162 : "get_fragments_ref",
163 0 : [](TriggerRecord& self) {
164 0 : auto fragments = py::list();
165 0 : for (auto& fragment : self.get_fragments_ref()) {
166 0 : auto py_fragment = py::cast(*fragment, py::return_value_policy::reference);
167 0 : fragments.append(py_fragment);
168 0 : }
169 0 : return fragments;
170 0 : },
171 0 : py::return_value_policy::reference_internal)
172 0 : .def("get_total_size_bytes", &TriggerRecord::get_total_size_bytes);
173 0 : } // NOLINT
174 :
175 : } // namespace dunedaq::daqdataformats::python
|