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