DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
trigger_record.cpp
Go to the documentation of this file.
1
11
12#include <pybind11/pybind11.h>
13#include <pybind11/stl.h>
14
15#include <memory>
16#include <vector>
17
18namespace py = pybind11;
19
20namespace dunedaq {
21namespace daqdataformats {
22namespace python {
23
24void
26{
27 py::class_<TriggerRecordHeader>(m, "TriggerRecordHeader", pybind11::buffer_protocol())
28 .def(py::init<std::vector<ComponentRequest> const&>())
29 .def(py::init([](py::capsule capsule, bool copy_from_buffer) {
30 return std::unique_ptr<TriggerRecordHeader>(new TriggerRecordHeader(capsule.get_pointer(), copy_from_buffer));
31 }))
32 .def(py::init<TriggerRecordHeader const&>())
33 .def("get_header", &TriggerRecordHeader::get_header)
34 .def("get_trigger_number", &TriggerRecordHeader::get_trigger_number)
35 //.def("set_trigger_number", &TriggerRecordHeader::set_trigger_number)
36 .def("get_trigger_timestamp", &TriggerRecordHeader::get_trigger_timestamp)
37 //.def("set_trigger_timestamp", &TriggerRecordHeader::set_trigger_timestamp)
38 .def("get_num_requested_components", &TriggerRecordHeader::get_num_requested_components)
39 .def("get_run_number", &TriggerRecordHeader::get_run_number)
40 //.def("set_run_number", &TriggerRecordHeader::set_run_number)
41 .def("get_error_bits", &TriggerRecordHeader::get_error_bits)
42 //.def("set_error_bits", &TriggerRecordHeader::set_error_bits)
43 .def("get_error_bit", &TriggerRecordHeader::get_error_bit)
44 //.def("set_error_bit", &TriggerRecordHeader::set_error_bit)
45 .def("get_trigger_type", &TriggerRecordHeader::get_trigger_type)
46 //.def("set_trigger_type", &TriggerRecordHeader::set_trigger_type)
47 .def("get_sequence_number", &TriggerRecordHeader::get_sequence_number)
48 //.def("set_sequence_number", &TriggerRecordHeader::set_sequence_number)
49 .def("get_max_sequence_number", &TriggerRecordHeader::get_max_sequence_number)
50 //.def("set_max_sequence_number", &TriggerRecordHeader::set_max_sequence_number)
51 .def("get_total_size_bytes", &TriggerRecordHeader::get_total_size_bytes)
52 .def(
53 "get_storage_location", &TriggerRecordHeader::get_storage_location, py::return_value_policy::reference_internal)
54 .def("at", &TriggerRecordHeader::at)
55 .def("__getitem__", &TriggerRecordHeader::operator[], py::return_value_policy::reference_internal);
56
57 py::class_<TriggerRecordHeaderData>(m, "TriggerRecordHeaderData")
58 .def_property_readonly_static("s_trigger_record_header_magic",
59 [](const TriggerRecordHeaderData& self) -> uint32_t { // NOLINT(build/unsigned)
61 })
62 .def_property_readonly_static("s_trigger_record_header_version",
63 [](const TriggerRecordHeaderData& self) -> uint32_t { // NOLINT(build/unsigned)
65 })
66 .def_property_readonly_static("s_invalid_number_components",
67 [](const TriggerRecordHeaderData& self) -> uint64_t { // NOLINT(build/unsigned)
69 })
70 .def_property_readonly_static("s_default_error_bits",
71 [](const TriggerRecordHeaderData& self) -> uint32_t { // NOLINT(build/unsigned)
72 return self.s_default_error_bits;
73 })
74 .def_property_readonly("trigger_record_header_marker",
75 [](const TriggerRecordHeaderData& self) -> uint32_t { // NOLINT(build/unsigned)
77 })
78 .def_property_readonly(
79 "version", [](const TriggerRecordHeaderData& self) -> uint32_t { return self.version; }) // NOLINT(build/unsigned)
80 .def_property_readonly("trigger_number",
81 [](const TriggerRecordHeaderData& self) -> trigger_number_t { return self.trigger_number; })
82 .def_property_readonly("trigger_timestamp",
83 [](const TriggerRecordHeaderData& self) -> timestamp_t { return self.trigger_timestamp; })
84 .def_property_readonly("num_requested_components",
85 [](const TriggerRecordHeaderData& self) -> uint64_t { // NOLINT(build/unsigned)
86 return self.num_requested_components;
87 })
88 .def_property_readonly("run_number",
89 [](const TriggerRecordHeaderData& self) -> run_number_t { return self.run_number; })
90 .def_property_readonly(
91 "error_bits",
92 [](const TriggerRecordHeaderData& self) -> uint32_t { return self.error_bits; }) // NOLINT(build/unsigned)
93 .def_property_readonly("trigger_type",
94 [](const TriggerRecordHeaderData& self) -> trigger_type_t { return self.trigger_type; })
95 .def_property_readonly(
96 "sequence_number", [](const TriggerRecordHeaderData& self) -> sequence_number_t { return self.sequence_number; })
97 .def_property_readonly("max_sequence_number", [](const TriggerRecordHeaderData& self) -> sequence_number_t {
98 return self.max_sequence_number;
99 });
100
101 py::enum_<TriggerRecordErrorBits>(m, "TriggerRecordErrorBits")
102 .value("kIncomplete", TriggerRecordErrorBits::kIncomplete)
103 .value("kMismatch", TriggerRecordErrorBits::kMismatch)
104 .value("kUnassigned2", TriggerRecordErrorBits::kUnassigned2)
105 .value("kUnassigned3", TriggerRecordErrorBits::kIncomplete)
106 .value("kUnassigned4", TriggerRecordErrorBits::kUnassigned4)
107 .value("kUnassigned5", TriggerRecordErrorBits::kUnassigned5)
108 .value("kUnassigned6", TriggerRecordErrorBits::kUnassigned6)
109 .value("kUnassigned7", TriggerRecordErrorBits::kUnassigned7)
110 .value("kUnassigned8", TriggerRecordErrorBits::kUnassigned8)
111 .value("kUnassigned9", TriggerRecordErrorBits::kUnassigned9)
112 .value("kUnassigned10", TriggerRecordErrorBits::kUnassigned10)
113 .value("kUnassigned11", TriggerRecordErrorBits::kUnassigned11)
114 .value("kUnassigned12", TriggerRecordErrorBits::kUnassigned12)
115 .value("kUnassigned13", TriggerRecordErrorBits::kUnassigned13)
116 .value("kUnassigned14", TriggerRecordErrorBits::kUnassigned14)
117 .value("kUnassigned15", TriggerRecordErrorBits::kUnassigned15)
118 .value("kUnassigned16", TriggerRecordErrorBits::kUnassigned16)
119 .value("kUnassigned17", TriggerRecordErrorBits::kUnassigned17)
120 .value("kUnassigned18", TriggerRecordErrorBits::kUnassigned18)
121 .value("kUnassigned19", TriggerRecordErrorBits::kUnassigned19)
122 .value("kUnassigned20", TriggerRecordErrorBits::kUnassigned20)
123 .value("kUnassigned21", TriggerRecordErrorBits::kUnassigned21)
124 .value("kUnassigned22", TriggerRecordErrorBits::kUnassigned22)
125 .value("kUnassigned23", TriggerRecordErrorBits::kUnassigned23)
126 .value("kUnassigned24", TriggerRecordErrorBits::kUnassigned24)
127 .value("kUnassigned25", TriggerRecordErrorBits::kUnassigned25)
128 .value("kUnassigned26", TriggerRecordErrorBits::kUnassigned26)
129 .value("kUnassigned27", TriggerRecordErrorBits::kUnassigned27)
130 .value("kUnassigned28", TriggerRecordErrorBits::kUnassigned28)
131 .value("kUnassigned29", TriggerRecordErrorBits::kUnassigned29)
132 .value("kUnassigned30", TriggerRecordErrorBits::kUnassigned30)
133 .value("kUnassigned31", TriggerRecordErrorBits::kUnassigned31)
134 .value("kInvalid", TriggerRecordErrorBits::kInvalid);
135
136 py::class_<TriggerRecord> py_trigger_record(m, "TriggerRecord", pybind11::buffer_protocol());
137 py_trigger_record.def(py::init<TriggerRecordHeader const&>())
138 .def(py::init<std::vector<ComponentRequest> const&>())
139 .def(
140 "get_header_ref",
141 [](TriggerRecord& self) { return self.get_header_ref(); },
142 py::return_value_policy::reference_internal)
143 // .def("set_header", &TriggerRecord::set_header)
144 .def("get_header_data", &TriggerRecord::get_header_data)
145 .def(
146 "get_fragments_ref",
147 [](TriggerRecord& self) {
148 auto fragments = py::list();
149 for (auto& fragment : self.get_fragments_ref()) {
150 auto py_fragment = py::cast(*fragment, py::return_value_policy::reference);
151 fragments.append(py_fragment);
152 }
153 return fragments;
154 },
155 py::return_value_policy::reference_internal)
156 .def("get_total_size_bytes", &TriggerRecord::get_total_size_bytes)
157 .def("get_sum_of_fragment_payload_sizes", &TriggerRecord::get_sum_of_fragment_payload_sizes);
158} // NOLINT
159
160} // namespace python
161} // namespace daqdataformats
162} // namespace dunedaq
C++ representation of a TriggerRecordHeader, which wraps a flat array that is the TriggerRecordHeader...
bool get_error_bit(TriggerRecordErrorBits bit) const
Get the value of the given error bit.
uint64_t get_num_requested_components() const
Get the number of ComponentRequest objects stored in this TriggerRecordHeader.
size_t get_total_size_bytes() const
Get the total size of the TriggerRecordHeader.
const void * get_storage_location() const
Get the location of the flat data array for output.
trigger_number_t get_max_sequence_number() const
Get the maximum sequence number for this TriggerRecordHeader.
trigger_type_t get_trigger_type() const
Get the trigger_type field from the data struct.
run_number_t get_run_number() const
Get the run_number stored in this TriggerRecordHeader.
std::bitset< 32 > get_error_bits() const
Get the error_bits header field as a bitset.
ComponentRequest at(size_t idx) const
Access ComponentRequest and copy result.
TriggerRecordHeaderData get_header() const
Get a copy of the TriggerRecordHeaderData struct.
timestamp_t get_trigger_timestamp() const
Get the trigger_timestamp stored in this TriggerRecordHeader.
trigger_number_t get_trigger_number() const
Get the trigger number for this TriggerRecordHeader.
trigger_number_t get_sequence_number() const
Get the sequence number for this TriggerRecordHeader.
C++ Representation of a DUNE TriggerRecord, consisting of a TriggerRecordHeader object and a vector o...
TriggerRecordHeaderData get_header_data() const
Get a copy of the TriggerRecordHeaderData from the TriggerRecordHeader.
size_t get_total_size_bytes() const
Get size of trigger record from underlying TriggerRecordHeader and Fragments.
size_t get_sum_of_fragment_payload_sizes() const
Get the sum of the fragment payload sizes.
void register_trigger_record(py::module &)
uint32_t run_number_t
Type used to represent run number.
Definition Types.hpp:20
uint64_t trigger_number_t
Type used to represent trigger number.
Definition Types.hpp:24
uint16_t sequence_number_t
Type used to represent sequence within a trigger record.
Definition Types.hpp:45
@ kUnassigned20
Error bit 20 is not assigned.
@ kUnassigned13
Error bit 13 is not assigned.
@ kUnassigned26
Error bit 26 is not assigned.
@ kUnassigned6
Error bit 6 is not assigned.
@ kMismatch
We have as many fragments as requested but they do not match the requested components.
@ kUnassigned14
Error bit 14 is not assigned.
@ kUnassigned4
Error bit 4 is not assigned.
@ kUnassigned2
Error bit 2 is not assigned.
@ kUnassigned16
Error bit 16 is not assigned.
@ kUnassigned27
Error bit 27 is not assigned.
@ kUnassigned10
Error bit 10 is not assigned.
@ kIncomplete
Indicates a trigger record with incomplete fragments.
@ kUnassigned9
Error bit 9 is not assigned.
@ kUnassigned24
Error bit 24 is not assigned.
@ kUnassigned7
Error bit 7 is not assigned.
@ kUnassigned28
Error bit 28 is not assigned.
@ kUnassigned21
Error bit 21 is not assigned.
@ kUnassigned31
Error bit 31 is not assigned.
@ kInvalid
Error bit 32 and higher are not valid (error_bits is only 32 bits)
@ kUnassigned18
Error bit 18 is not assigned.
@ kUnassigned25
Error bit 25 is not assigned.
@ kUnassigned19
Error bit 19 is not assigned.
@ kUnassigned5
Error bit 5 is not assigned.
@ kUnassigned29
Error bit 29 is not assigned.
@ kUnassigned23
Error bit 23 is not assigned.
@ kUnassigned11
Error bit 11 is not assigned.
@ kUnassigned15
Error bit 15 is not assigned.
@ kUnassigned17
Error bit 17 is not assigned.
@ kUnassigned22
Error bit 22 is not assigned.
@ kUnassigned12
Error bit 12 is not assigned.
@ kUnassigned30
Error bit 30 is not assigned.
@ kUnassigned8
Error bit 8 is not assigned.
uint64_t timestamp_t
Type used to represent DUNE timing system timestamps.
Definition Types.hpp:36
uint64_t trigger_type_t
Type used to represent Trigger Decision trigger types.
Definition Types.hpp:41
Including Qt Headers.
Additional data fields associated with a TriggerRecordHeader.
uint32_t version
Version of the TriggerRecordHeaderData structure.
static constexpr uint32_t s_default_error_bits
By default, all error bits are unset.
sequence_number_t max_sequence_number
Maximum sequence number of TriggerRecords corresponding to this trigger.
sequence_number_t sequence_number
Sequence number of this TriggerRecord within the trigger response.
timestamp_t trigger_timestamp
Timestamp of the TriggerDecision.
uint64_t num_requested_components
Number of ComponentRequest objects stored in the TriggerRecordHeader.
trigger_type_t trigger_type
Type of the TriggerDecision.
static constexpr uint32_t s_trigger_record_header_version
The current version of the TriggerRecordHeader.
uint32_t trigger_record_header_marker
Magic bytes used to identify a TriggerRecordHeaderData struct in a raw data stream.
static constexpr uint32_t s_trigger_record_header_magic
Magic bytes to identify a TriggerRecordHeader entry in a raw data stream.
run_number_t run_number
Run Number for the TriggerRecord.
static constexpr uint64_t s_invalid_number_components
An invalid number of components.
uint32_t error_bits
Error bits for the TriggerRecord.