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