DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
daqdataformats
include
daqdataformats
TriggerRecordHeader.hpp
Go to the documentation of this file.
1
11
12
#ifndef DAQDATAFORMATS_INCLUDE_DAQDATAFORMATS_TRIGGERRECORDHEADER_HPP_
13
#define DAQDATAFORMATS_INCLUDE_DAQDATAFORMATS_TRIGGERRECORDHEADER_HPP_
14
15
#include "
daqdataformats/ComponentRequest.hpp
"
16
#include "
daqdataformats/SourceID.hpp
"
17
#include "
daqdataformats/TriggerRecordHeaderData.hpp
"
18
#include "
daqdataformats/Types.hpp
"
19
20
#include <bitset>
21
#include <cstddef>
22
#include <cstring>
23
#include <format>
24
#include <new>
25
#include <ostream>
26
#include <stdexcept>
27
#include <string>
28
#include <vector>
29
30
namespace
dunedaq::daqdataformats
{
31
36
class
TriggerRecordHeader
37
{
38
public
:
43
explicit
TriggerRecordHeader
(
const
std::vector<ComponentRequest>& components);
44
51
explicit
TriggerRecordHeader
(
void
* existing_trigger_record_header_buffer,
bool
copy_from_buffer =
false
);
52
53
TriggerRecordHeaderData
get_header
()
const
{
return
*
header_
(); }
54
55
trigger_number_t
get_trigger_number
()
const
{
return
header_
()->
trigger_number
; }
56
void
set_trigger_number
(
trigger_number_t
trigger_number) {
header_
()->
trigger_number
= trigger_number; }
57
58
timestamp_t
get_trigger_timestamp
()
const
{
return
header_
()->
trigger_timestamp
; }
59
void
set_trigger_timestamp
(
timestamp_t
trigger_timestamp) {
header_
()->
trigger_timestamp
= trigger_timestamp; }
60
61
uint64_t
get_num_requested_components
() const
// NOLINT(build/unsigned)
62
{
63
return
header_
()->
num_requested_components
;
64
}
65
66
run_number_t
get_run_number
()
const
{
return
header_
()->
run_number
; }
67
void
set_run_number
(
run_number_t
run_number) {
header_
()->
run_number
= run_number; }
68
69
std::bitset<32>
get_status_bits
()
const
{
return
header_
()->
status_bits
; }
70
void
set_status_bits
(std::bitset<32> bits) {
header_
()->
status_bits
= bits.to_ulong(); }
71
77
bool
get_status_bit
(
TriggerRecordStatusBits
bit)
const
{
return
get_status_bits
()[
static_cast<
size_t
>
(bit)]; }
83
void
set_status_bit
(
TriggerRecordStatusBits
bit,
bool
value)
84
{
85
auto
bits =
get_status_bits
();
86
bits[
static_cast<
size_t
>
(bit)] = value;
87
set_status_bits
(bits);
88
}
89
90
trigger_type_t
get_trigger_type
()
const
{
return
header_
()->
trigger_type
; }
91
void
set_trigger_type
(
trigger_type_t
trigger_type) {
header_
()->
trigger_type
= trigger_type; }
92
93
trigger_number_t
get_sequence_number
()
const
{
return
header_
()->
sequence_number
; }
94
void
set_sequence_number
(
sequence_number_t
number) {
header_
()->
sequence_number
= number; }
95
96
trigger_number_t
get_max_sequence_number
()
const
{
return
header_
()->
max_sequence_number
; }
97
void
set_max_sequence_number
(
sequence_number_t
number) {
header_
()->
max_sequence_number
= number; }
98
103
SourceID
get_element_id
()
const
{
return
header_
()->
element_id
; }
108
void
set_element_id
(
SourceID
source_id) {
header_
()->
element_id
= source_id; }
109
111
size_t
get_total_size_bytes
()
const
112
{
113
return
header_
()->
num_requested_components
*
sizeof
(
ComponentRequest
) +
sizeof
(
TriggerRecordHeaderData
);
114
}
115
117
const
void
*
get_storage_location
()
const
{
return
m_data_arr
; }
118
125
const
ComponentRequest
&
at
(
size_t
idx)
const
;
126
133
ComponentRequest
const
&
get_component_for_source_id
(
SourceID
const
& source_id)
const
;
134
135
TriggerRecordHeader
(
TriggerRecordHeader
const
& other);
136
TriggerRecordHeader
&
operator=
(
TriggerRecordHeader
const
& other);
137
138
TriggerRecordHeader
(
TriggerRecordHeader
&& other)
139
{
140
m_alloc
= other.m_alloc;
141
other.m_alloc =
false
;
142
m_data_arr
= other.m_data_arr;
143
}
144
TriggerRecordHeader
&
operator=
(
TriggerRecordHeader
&& other)
145
{
146
m_alloc
= other.m_alloc;
147
other.m_alloc =
false
;
148
m_data_arr
= other.m_data_arr;
149
return
*
this
;
150
}
151
152
~TriggerRecordHeader
()
153
{
154
if
(
m_alloc
)
155
free(
m_data_arr
);
// NOLINT
156
}
157
158
private
:
163
TriggerRecordHeaderData
*
header_
()
const
{
return
static_cast<
TriggerRecordHeaderData
*
>
(
m_data_arr
); }
164
165
void
*
m_data_arr
{
166
nullptr
167
};
168
bool
m_alloc
{
false
};
169
};
170
171
//------
172
173
inline
TriggerRecordHeader::TriggerRecordHeader
(
const
std::vector<ComponentRequest>& components)
174
{
175
size_t
size
=
sizeof
(
TriggerRecordHeaderData
) + components.size() *
sizeof
(
ComponentRequest
);
176
177
m_data_arr
= malloc(
size
);
// NOLINT
178
if
(
m_data_arr
==
nullptr
) {
179
throw
std::bad_alloc();
180
}
181
m_alloc
=
true
;
182
183
TriggerRecordHeaderData
header;
184
header.
num_requested_components
= components.size();
185
std::memcpy(
m_data_arr
, &header,
sizeof
(header));
186
std::memcpy(
static_cast<
uint8_t*
>
(
m_data_arr
) +
sizeof
(header),
// NOLINT
187
components.data(),
188
sizeof
(
ComponentRequest
) * components.size());
189
}
190
191
inline
TriggerRecordHeader::TriggerRecordHeader
(
void
* existing_trigger_record_header_buffer,
bool
copy_from_buffer)
192
{
193
if
(!copy_from_buffer) {
194
m_data_arr
= existing_trigger_record_header_buffer;
195
}
else
{
196
auto
header =
reinterpret_cast<
TriggerRecordHeaderData
*
>
(existing_trigger_record_header_buffer);
// NOLINT
197
size_t
size
= header->num_requested_components *
sizeof
(
ComponentRequest
) +
sizeof
(
TriggerRecordHeaderData
);
198
199
m_data_arr
= malloc(
size
);
// NOLINT
200
if
(
m_data_arr
==
nullptr
) {
201
throw
std::bad_alloc();
202
}
203
m_alloc
=
true
;
204
std::memcpy(
m_data_arr
, existing_trigger_record_header_buffer,
size
);
205
}
206
}
207
208
inline
TriggerRecordHeader::TriggerRecordHeader
(
TriggerRecordHeader
const
& other)
209
:
TriggerRecordHeader
(other.
m_data_arr
, true)
210
{
211
}
212
213
inline
TriggerRecordHeader
&
214
TriggerRecordHeader::operator=
(
TriggerRecordHeader
const
& other)
215
{
216
if
(&other ==
this
)
217
return
*
this
;
218
219
if
(
m_alloc
) {
220
free(
m_data_arr
);
// NOLINT
221
}
222
m_data_arr
= malloc(other.
get_total_size_bytes
());
// NOLINT
223
if
(
m_data_arr
==
nullptr
) {
224
throw
std::bad_alloc();
225
}
226
m_alloc
=
true
;
227
std::memcpy(
m_data_arr
, other.
m_data_arr
, other.
get_total_size_bytes
());
228
return
*
this
;
229
}
230
231
inline
const
ComponentRequest
&
232
TriggerRecordHeader::at
(
size_t
idx)
const
233
{
234
if
(idx >=
header_
()->num_requested_components) {
235
throw
std::range_error(std::format(
236
"Supplied ComponentRequest index {} out of range (size: {})"
, idx,
header_
()->num_requested_components));
237
}
238
239
// Increment header pointer by one to skip header
240
return
*(
reinterpret_cast<
ComponentRequest
*
>
(
header_
() + 1) + idx);
// NOLINT
241
}
242
243
inline
ComponentRequest
const
&
244
TriggerRecordHeader::get_component_for_source_id
(
SourceID
const
& source_id)
const
245
{
246
for
(uint64_t idx = 0; idx <
get_num_requested_components
(); ++idx) {
// NOLINT(build/unsigned)
247
ComponentRequest
const
& component_obj = *(
reinterpret_cast<
ComponentRequest
*
>
(
header_
() + 1) + idx);
// NOLINT
248
if
(source_id == component_obj.
component
) {
249
return
component_obj;
250
}
251
}
252
throw
std::invalid_argument(
"Supplied SourceID ("
+ source_id.
to_string
() +
253
") was not found in the ComponentRequest list."
);
254
}
255
256
}
// namespace dunedaq::daqdataformats
257
258
#endif
// DAQDATAFORMATS_INCLUDE_DAQDATAFORMATS_TRIGGERRECORDHEADER_HPP_
ComponentRequest.hpp
SourceID.hpp
TriggerRecordHeaderData.hpp
dunedaq::daqdataformats::TriggerRecordHeader
C++ representation of a TriggerRecordHeader, which wraps a flat array that is the TriggerRecordHeader...
Definition
TriggerRecordHeader.hpp:37
dunedaq::daqdataformats::TriggerRecordHeader::m_alloc
bool m_alloc
Whether the TriggerRecordHeader owns the memory pointed by m_data_arr.
Definition
TriggerRecordHeader.hpp:168
dunedaq::daqdataformats::TriggerRecordHeader::set_status_bit
void set_status_bit(TriggerRecordStatusBits bit, bool value)
Set the given status bit to the given value.
Definition
TriggerRecordHeader.hpp:83
dunedaq::daqdataformats::TriggerRecordHeader::set_sequence_number
void set_sequence_number(sequence_number_t number)
Definition
TriggerRecordHeader.hpp:94
dunedaq::daqdataformats::TriggerRecordHeader::~TriggerRecordHeader
~TriggerRecordHeader()
Definition
TriggerRecordHeader.hpp:152
dunedaq::daqdataformats::TriggerRecordHeader::TriggerRecordHeader
TriggerRecordHeader(const std::vector< ComponentRequest > &components)
Construct a TriggerRecordHeader using a vector of ComponentRequest objects.
Definition
TriggerRecordHeader.hpp:173
dunedaq::daqdataformats::TriggerRecordHeader::header_
TriggerRecordHeaderData * header_() const
Get the TriggerRecordHeaderData from the m_data_arr array.
Definition
TriggerRecordHeader.hpp:163
dunedaq::daqdataformats::TriggerRecordHeader::get_num_requested_components
uint64_t get_num_requested_components() const
Definition
TriggerRecordHeader.hpp:61
dunedaq::daqdataformats::TriggerRecordHeader::set_element_id
void set_element_id(SourceID source_id)
Set the SourceID for this TriggerRecordHeader.
Definition
TriggerRecordHeader.hpp:108
dunedaq::daqdataformats::TriggerRecordHeader::at
const ComponentRequest & at(size_t idx) const
Access ComponentRequest by index.
Definition
TriggerRecordHeader.hpp:232
dunedaq::daqdataformats::TriggerRecordHeader::get_total_size_bytes
size_t get_total_size_bytes() const
Get the total size of the TriggerRecordHeader, including header and all component requests.
Definition
TriggerRecordHeader.hpp:111
dunedaq::daqdataformats::TriggerRecordHeader::get_storage_location
const void * get_storage_location() const
Get read-only access to the underlying flat data array.
Definition
TriggerRecordHeader.hpp:117
dunedaq::daqdataformats::TriggerRecordHeader::set_run_number
void set_run_number(run_number_t run_number)
Definition
TriggerRecordHeader.hpp:67
dunedaq::daqdataformats::TriggerRecordHeader::set_max_sequence_number
void set_max_sequence_number(sequence_number_t number)
Definition
TriggerRecordHeader.hpp:97
dunedaq::daqdataformats::TriggerRecordHeader::get_component_for_source_id
ComponentRequest const & get_component_for_source_id(SourceID const &source_id) const
Access ComponentRequest by SourceID.
Definition
TriggerRecordHeader.hpp:244
dunedaq::daqdataformats::TriggerRecordHeader::set_trigger_type
void set_trigger_type(trigger_type_t trigger_type)
Definition
TriggerRecordHeader.hpp:91
dunedaq::daqdataformats::TriggerRecordHeader::get_max_sequence_number
trigger_number_t get_max_sequence_number() const
Definition
TriggerRecordHeader.hpp:96
dunedaq::daqdataformats::TriggerRecordHeader::get_trigger_type
trigger_type_t get_trigger_type() const
Definition
TriggerRecordHeader.hpp:90
dunedaq::daqdataformats::TriggerRecordHeader::set_trigger_timestamp
void set_trigger_timestamp(timestamp_t trigger_timestamp)
Definition
TriggerRecordHeader.hpp:59
dunedaq::daqdataformats::TriggerRecordHeader::get_run_number
run_number_t get_run_number() const
Definition
TriggerRecordHeader.hpp:66
dunedaq::daqdataformats::TriggerRecordHeader::get_element_id
SourceID get_element_id() const
Get the SourceID for this TriggerRecordHeader.
Definition
TriggerRecordHeader.hpp:103
dunedaq::daqdataformats::TriggerRecordHeader::get_header
TriggerRecordHeaderData get_header() const
Definition
TriggerRecordHeader.hpp:53
dunedaq::daqdataformats::TriggerRecordHeader::get_trigger_timestamp
timestamp_t get_trigger_timestamp() const
Definition
TriggerRecordHeader.hpp:58
dunedaq::daqdataformats::TriggerRecordHeader::operator=
TriggerRecordHeader & operator=(TriggerRecordHeader &&other)
Definition
TriggerRecordHeader.hpp:144
dunedaq::daqdataformats::TriggerRecordHeader::get_status_bits
std::bitset< 32 > get_status_bits() const
Definition
TriggerRecordHeader.hpp:69
dunedaq::daqdataformats::TriggerRecordHeader::set_status_bits
void set_status_bits(std::bitset< 32 > bits)
Definition
TriggerRecordHeader.hpp:70
dunedaq::daqdataformats::TriggerRecordHeader::m_data_arr
void * m_data_arr
Flat memory containing a TriggerRecordHeaderData header and an array of ComponentRequests.
Definition
TriggerRecordHeader.hpp:165
dunedaq::daqdataformats::TriggerRecordHeader::set_trigger_number
void set_trigger_number(trigger_number_t trigger_number)
Definition
TriggerRecordHeader.hpp:56
dunedaq::daqdataformats::TriggerRecordHeader::get_trigger_number
trigger_number_t get_trigger_number() const
Definition
TriggerRecordHeader.hpp:55
dunedaq::daqdataformats::TriggerRecordHeader::get_sequence_number
trigger_number_t get_sequence_number() const
Definition
TriggerRecordHeader.hpp:93
dunedaq::daqdataformats::TriggerRecordHeader::get_status_bit
bool get_status_bit(TriggerRecordStatusBits bit) const
Get the value of the given status bit.
Definition
TriggerRecordHeader.hpp:77
dunedaq::daqdataformats::TriggerRecordHeader::TriggerRecordHeader
TriggerRecordHeader(TriggerRecordHeader &&other)
Definition
TriggerRecordHeader.hpp:138
dunedaq::daqdataformats::TriggerRecordHeader::operator=
TriggerRecordHeader & operator=(TriggerRecordHeader const &other)
Definition
TriggerRecordHeader.hpp:214
Types.hpp
dunedaq::daqdataformats
Definition
ComponentRequest.hpp:20
dunedaq::daqdataformats::run_number_t
uint32_t run_number_t
Definition
Types.hpp:17
dunedaq::daqdataformats::trigger_number_t
uint64_t trigger_number_t
Definition
Types.hpp:18
dunedaq::daqdataformats::TriggerRecordStatusBits
TriggerRecordStatusBits
This enumeration lists all defined status bits, as well as a short documentation of their meaning whe...
Definition
TriggerRecordHeaderData.hpp:70
dunedaq::daqdataformats::sequence_number_t
uint16_t sequence_number_t
Type used to represent sequence within a trigger record.
Definition
Types.hpp:38
dunedaq::daqdataformats::timestamp_t
uint64_t timestamp_t
Type used to represent DUNE timing system timestamps.
Definition
Types.hpp:26
dunedaq::daqdataformats::trigger_type_t
uint64_t trigger_type_t
Type used to represent Trigger Decision trigger types.
Definition
Types.hpp:35
dunedaq::size
FELIX Initialization std::string initerror FELIX queue timed std::string queuename Unexpected chunk size
Definition
FelixIssues.hpp:28
dunedaq::daqdataformats::ComponentRequest
A request sent to a Component, including the SourceID of the component and the window offset and widt...
Definition
ComponentRequest.hpp:26
dunedaq::daqdataformats::ComponentRequest::component
SourceID component
The ID of the Requested Component.
Definition
ComponentRequest.hpp:32
dunedaq::daqdataformats::SourceID
SourceID is a generalized representation of the source of a piece of data in the DAQ....
Definition
SourceID.hpp:32
dunedaq::daqdataformats::SourceID::to_string
std::string to_string() const
Definition
SourceID.hpp:69
dunedaq::daqdataformats::TriggerRecordHeaderData
Data fields associated with a TriggerRecordHeader.
Definition
TriggerRecordHeaderData.hpp:28
dunedaq::daqdataformats::TriggerRecordHeaderData::max_sequence_number
sequence_number_t max_sequence_number
Maximum sequence number of TriggerRecords corresponding to this trigger.
Definition
TriggerRecordHeaderData.hpp:60
dunedaq::daqdataformats::TriggerRecordHeaderData::trigger_number
trigger_number_t trigger_number
Definition
TriggerRecordHeaderData.hpp:41
dunedaq::daqdataformats::TriggerRecordHeaderData::sequence_number
sequence_number_t sequence_number
Sequence number of this TriggerRecord within the trigger response.
Definition
TriggerRecordHeaderData.hpp:57
dunedaq::daqdataformats::TriggerRecordHeaderData::element_id
SourceID element_id
Definition
TriggerRecordHeaderData.hpp:64
dunedaq::daqdataformats::TriggerRecordHeaderData::trigger_timestamp
timestamp_t trigger_timestamp
Timestamp of the TriggerDecision.
Definition
TriggerRecordHeaderData.hpp:44
dunedaq::daqdataformats::TriggerRecordHeaderData::num_requested_components
uint64_t num_requested_components
Number of ComponentRequest objects stored in the TriggerRecordHeader.
Definition
TriggerRecordHeaderData.hpp:47
dunedaq::daqdataformats::TriggerRecordHeaderData::status_bits
uint32_t status_bits
Definition
TriggerRecordHeaderData.hpp:51
dunedaq::daqdataformats::TriggerRecordHeaderData::trigger_type
trigger_type_t trigger_type
Type of the TriggerDecision.
Definition
TriggerRecordHeaderData.hpp:54
dunedaq::daqdataformats::TriggerRecordHeaderData::run_number
run_number_t run_number
Definition
TriggerRecordHeaderData.hpp:49
Generated on
for DUNE-DAQ by
1.17.0