DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dunedaq::daqdataformats::TriggerRecordHeader Class Reference

C++ representation of a TriggerRecordHeader, which wraps a flat array that is the TriggerRecordHeader's "actual" form. More...

#include <TriggerRecordHeader.hpp>

Public Member Functions

 TriggerRecordHeader (const std::vector< ComponentRequest > &components)
 Construct a TriggerRecordHeader using a vector of ComponentRequest objects.
 
 TriggerRecordHeader (void *existing_trigger_record_header_buffer, bool copy_from_buffer=false)
 Construct a TriggerRecordHeader using an existing TriggerRecordHeader data array.
 
 TriggerRecordHeader (TriggerRecordHeader const &other)
 TriggerRecordHeader Copy Constructor.
 
TriggerRecordHeaderoperator= (TriggerRecordHeader const &other)
 TriggerRecordHeader copy assignment operator.
 
 TriggerRecordHeader (TriggerRecordHeader &&other)
 
TriggerRecordHeaderoperator= (TriggerRecordHeader &&other)
 
 ~TriggerRecordHeader ()
 TriggerRecordHeader destructor.
 
TriggerRecordHeaderData get_header () const
 Get a copy of the TriggerRecordHeaderData struct.
 
trigger_number_t get_trigger_number () const
 Get the trigger number for this TriggerRecordHeader.
 
void set_trigger_number (trigger_number_t trigger_number)
 Set the trigger number for this TriggerRecordHeader.
 
timestamp_t get_trigger_timestamp () const
 Get the trigger_timestamp stored in this TriggerRecordHeader.
 
void set_trigger_timestamp (timestamp_t trigger_timestamp)
 Set the trigger timestamp for this TriggerRecordHeader.
 
uint64_t get_num_requested_components () const
 Get the number of ComponentRequest objects stored in this TriggerRecordHeader.
 
run_number_t get_run_number () const
 Get the run_number stored in this TriggerRecordHeader.
 
void set_run_number (run_number_t run_number)
 Set the run number for this TriggerRecordHeader.
 
std::bitset< 32 > get_error_bits () const
 Get the error_bits header field as a bitset.
 
void set_error_bits (std::bitset< 32 > bits)
 Overwrite error bits using the given bitset.
 
bool get_error_bit (TriggerRecordErrorBits bit) const
 Get the value of the given error bit.
 
void set_error_bit (TriggerRecordErrorBits bit, bool value)
 Set the given error bit to the given value.
 
trigger_type_t get_trigger_type () const
 Get the trigger_type field from the data struct.
 
void set_trigger_type (trigger_type_t trigger_type)
 Set the trigger_type header field to the given value.
 
trigger_number_t get_sequence_number () const
 Get the sequence number for this TriggerRecordHeader.
 
void set_sequence_number (sequence_number_t number)
 Set the sequence number for this TriggerRecordHeader.
 
trigger_number_t get_max_sequence_number () const
 Get the maximum sequence number for this TriggerRecordHeader.
 
void set_max_sequence_number (sequence_number_t number)
 Set the maxiumum sequence number for this TriggerRecordHeader.
 
SourceID get_element_id () const
 Get the SourceID for this TriggerRecordHeader.
 
void set_element_id (SourceID source_id)
 Set the SourceID for 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.
 
ComponentRequest at (size_t idx) const
 Access ComponentRequest and copy result.
 
ComponentRequestoperator[] (size_t idx)
 Operator[] to access ComponentRequests by index.
 
ComponentRequest const & get_component_for_source_id (SourceID const &source_id) const
 Access ComponentRequest by SourceID.
 

Private Member Functions

TriggerRecordHeaderDataheader_ () const
 Get the TriggerRecordHeaderData from the m_data_arr array.
 

Private Attributes

void * m_data_arr
 Flat memory containing a TriggerRecordHeaderData header and an array of ComponentRequests.
 
bool m_alloc { false }
 Whether the TriggerRecordHeader owns the memory pointed by m_data_arr.
 

Detailed Description

C++ representation of a TriggerRecordHeader, which wraps a flat array that is the TriggerRecordHeader's "actual" form.

Definition at line 32 of file TriggerRecordHeader.hpp.

Constructor & Destructor Documentation

◆ TriggerRecordHeader() [1/4]

dunedaq::daqdataformats::TriggerRecordHeader::TriggerRecordHeader ( const std::vector< ComponentRequest > & components)
inlineexplicit

Construct a TriggerRecordHeader using a vector of ComponentRequest objects.

Parameters
componentsVector of ComponentRequests to copy into TriggerRecordHeader

Definition at line 257 of file TriggerRecordHeader.hpp.

258{
259 size_t size = sizeof(TriggerRecordHeaderData) + components.size() * sizeof(ComponentRequest);
260
261 m_data_arr = malloc(size); // NOLINT(build/unsigned)
262 if (m_data_arr == nullptr) {
263 throw std::bad_alloc();
264 }
265 m_alloc = true;
266
267 TriggerRecordHeaderData header;
268 header.num_requested_components = components.size();
269 std::memcpy(m_data_arr, &header, sizeof(header));
270
271 size_t offset = sizeof(header);
272 for (auto const& component : components) {
273 std::memcpy(static_cast<uint8_t*>(m_data_arr) + offset, &component, sizeof(component)); // NOLINT
274 offset += sizeof(component);
275 }
276}
bool m_alloc
Whether the TriggerRecordHeader owns the memory pointed by m_data_arr.
void * m_data_arr
Flat memory containing a TriggerRecordHeaderData header and an array of ComponentRequests.
double offset
daqdataformats::ComponentRequest ComponentRequest
Copy daqdataformats::ComponentRequest.
Definition Types.hpp:33
FELIX Initialization std::string initerror FELIX queue timed std::string queuename Unexpected chunk size

◆ TriggerRecordHeader() [2/4]

dunedaq::daqdataformats::TriggerRecordHeader::TriggerRecordHeader ( void * existing_trigger_record_header_buffer,
bool copy_from_buffer = false )
inlineexplicit

Construct a TriggerRecordHeader using an existing TriggerRecordHeader data array.

Parameters
existing_trigger_record_header_bufferPointer to existing TriggerRecordHeader array
copy_from_bufferWhether to create a copy of the exiting buffer (true) or use that memory without taking ownership (false)

Definition at line 278 of file TriggerRecordHeader.hpp.

279{
280 if (!copy_from_buffer) {
281 m_data_arr = existing_trigger_record_header_buffer;
282 } else {
283 auto header = reinterpret_cast<TriggerRecordHeaderData*>(existing_trigger_record_header_buffer); // NOLINT
284 size_t size = header->num_requested_components * sizeof(ComponentRequest) + sizeof(TriggerRecordHeaderData);
285
286 m_data_arr = malloc(size);
287 if (m_data_arr == nullptr) {
288 throw std::bad_alloc();
289 }
290 m_alloc = true;
291 std::memcpy(m_data_arr, existing_trigger_record_header_buffer, size);
292 }
293}

◆ TriggerRecordHeader() [3/4]

dunedaq::daqdataformats::TriggerRecordHeader::TriggerRecordHeader ( TriggerRecordHeader const & other)
inline

TriggerRecordHeader Copy Constructor.

Parameters
otherTriggerRecordHeader to copy

Definition at line 295 of file TriggerRecordHeader.hpp.

296 : TriggerRecordHeader(other.m_data_arr, true)
297{}
TriggerRecordHeader(const std::vector< ComponentRequest > &components)
Construct a TriggerRecordHeader using a vector of ComponentRequest objects.

◆ TriggerRecordHeader() [4/4]

dunedaq::daqdataformats::TriggerRecordHeader::TriggerRecordHeader ( TriggerRecordHeader && other)
inline

Definition at line 61 of file TriggerRecordHeader.hpp.

62 {
63 m_alloc = other.m_alloc;
64 other.m_alloc = false;
65 m_data_arr = other.m_data_arr;
66 }

◆ ~TriggerRecordHeader()

dunedaq::daqdataformats::TriggerRecordHeader::~TriggerRecordHeader ( )
inline

TriggerRecordHeader destructor.

Definition at line 78 of file TriggerRecordHeader.hpp.

79 {
80 if (m_alloc)
81 free(m_data_arr);
82 }

Member Function Documentation

◆ at()

ComponentRequest dunedaq::daqdataformats::TriggerRecordHeader::at ( size_t idx) const
inline

Access ComponentRequest and copy result.

Parameters
idxIndex to access
Returns
Copy of ComponentRequest at index
Exceptions
std::range_errorexception if idx is outside of allowable range

Definition at line 318 of file TriggerRecordHeader.hpp.

319{
320 if (idx >= header_()->num_requested_components) {
321 throw std::range_error("Supplied ComponentRequest index is larger than the maximum index.");
322 }
323 // Increment header pointer by one to skip header
324 return *(reinterpret_cast<ComponentRequest*>(header_() + 1) + idx); // NOLINT
325}
TriggerRecordHeaderData * header_() const
Get the TriggerRecordHeaderData from the m_data_arr array.

◆ get_component_for_source_id()

ComponentRequest const & dunedaq::daqdataformats::TriggerRecordHeader::get_component_for_source_id ( SourceID const & source_id) const
inline

Access ComponentRequest by SourceID.

Parameters
source_idSourceID to access
Returns
ComponentRequest constant reference
Exceptions
std::invalid_argumentexception if source_id is not in ComponentRequest list

Definition at line 338 of file TriggerRecordHeader.hpp.

339{
340 for (uint64_t idx = 0; idx < get_num_requested_components(); ++idx) {
341 ComponentRequest const& component_obj = *(reinterpret_cast<ComponentRequest*>(header_() + 1) + idx); // NOLINT
342 if (source_id == component_obj.component) {
343 return component_obj;
344 }
345 }
346 throw std::invalid_argument("Supplied SourceID (" + source_id.to_string() + ") was not found in the ComponentRequest list.");
347}
uint64_t get_num_requested_components() const
Get the number of ComponentRequest objects stored in this TriggerRecordHeader.

◆ get_element_id()

SourceID dunedaq::daqdataformats::TriggerRecordHeader::get_element_id ( ) const
inline

Get the SourceID for this TriggerRecordHeader.

Returns
The element_id TriggerRecordHeaderData field

Definition at line 196 of file TriggerRecordHeader.hpp.

◆ get_error_bit()

bool dunedaq::daqdataformats::TriggerRecordHeader::get_error_bit ( TriggerRecordErrorBits bit) const
inline

Get the value of the given error bit.

Parameters
bitBit to get
Returns
Value of bit (true/false)

Definition at line 146 of file TriggerRecordHeader.hpp.

146{ return get_error_bits()[static_cast<size_t>(bit)]; }
std::bitset< 32 > get_error_bits() const
Get the error_bits header field as a bitset.

◆ get_error_bits()

std::bitset< 32 > dunedaq::daqdataformats::TriggerRecordHeader::get_error_bits ( ) const
inline

Get the error_bits header field as a bitset.

Returns
bitset containing error_bits header field

Definition at line 135 of file TriggerRecordHeader.hpp.

135{ return header_()->error_bits; }
uint32_t error_bits
Error bits for the TriggerRecord.

◆ get_header()

TriggerRecordHeaderData dunedaq::daqdataformats::TriggerRecordHeader::get_header ( ) const
inline

Get a copy of the TriggerRecordHeaderData struct.

Returns
A copy of the TriggerRecordHeaderData struct stored in this TriggerRecordHeader

Definition at line 88 of file TriggerRecordHeader.hpp.

88{ return *header_(); }

◆ get_max_sequence_number()

trigger_number_t dunedaq::daqdataformats::TriggerRecordHeader::get_max_sequence_number ( ) const
inline

Get the maximum sequence number for this TriggerRecordHeader.

Returns
The max_sequence_number TriggerRecordHeaderData field

Definition at line 185 of file TriggerRecordHeader.hpp.

185{ return header_()->max_sequence_number; }
sequence_number_t max_sequence_number
Maximum sequence number of TriggerRecords corresponding to this trigger.

◆ get_num_requested_components()

uint64_t dunedaq::daqdataformats::TriggerRecordHeader::get_num_requested_components ( ) const
inline

Get the number of ComponentRequest objects stored in this TriggerRecordHeader.

Returns
The num_requested_components TriggerRecordHeaderData field

Definition at line 115 of file TriggerRecordHeader.hpp.

116 {
118 }
uint64_t num_requested_components
Number of ComponentRequest objects stored in the TriggerRecordHeader.

◆ get_run_number()

run_number_t dunedaq::daqdataformats::TriggerRecordHeader::get_run_number ( ) const
inline

Get the run_number stored in this TriggerRecordHeader.

Returns
The run_number TriggerRecordHeaderData field

Definition at line 124 of file TriggerRecordHeader.hpp.

124{ return header_()->run_number; }
run_number_t run_number
Run Number for the TriggerRecord.

◆ get_sequence_number()

trigger_number_t dunedaq::daqdataformats::TriggerRecordHeader::get_sequence_number ( ) const
inline

Get the sequence number for this TriggerRecordHeader.

Returns
The sequence_number TriggerRecordHeaderData field

Definition at line 174 of file TriggerRecordHeader.hpp.

174{ return header_()->sequence_number; }
sequence_number_t sequence_number
Sequence number of this TriggerRecord within the trigger response.

◆ get_storage_location()

const void * dunedaq::daqdataformats::TriggerRecordHeader::get_storage_location ( ) const
inline

Get the location of the flat data array for output.

Returns
Pointer to the TriggerRecordHeader data array

Definition at line 216 of file TriggerRecordHeader.hpp.

216{ return m_data_arr; }

◆ get_total_size_bytes()

size_t dunedaq::daqdataformats::TriggerRecordHeader::get_total_size_bytes ( ) const
inline

Get the total size of the TriggerRecordHeader.

Returns
The size of the TriggerRecordHeader, including header and all component requests

Definition at line 207 of file TriggerRecordHeader.hpp.

208 {
209 return header_()->num_requested_components * sizeof(ComponentRequest) + sizeof(TriggerRecordHeaderData);
210 }

◆ get_trigger_number()

trigger_number_t dunedaq::daqdataformats::TriggerRecordHeader::get_trigger_number ( ) const
inline

Get the trigger number for this TriggerRecordHeader.

Returns
The trigger_number TriggerRecordHeaderData field

Definition at line 94 of file TriggerRecordHeader.hpp.

94{ return header_()->trigger_number; }

◆ get_trigger_timestamp()

timestamp_t dunedaq::daqdataformats::TriggerRecordHeader::get_trigger_timestamp ( ) const
inline

Get the trigger_timestamp stored in this TriggerRecordHeader.

Returns
The trigger_timestamp TriggerRecordHeaderData field

Definition at line 104 of file TriggerRecordHeader.hpp.

104{ return header_()->trigger_timestamp; }
timestamp_t trigger_timestamp
Timestamp of the TriggerDecision.

◆ get_trigger_type()

trigger_type_t dunedaq::daqdataformats::TriggerRecordHeader::get_trigger_type ( ) const
inline

Get the trigger_type field from the data struct.

Returns
The trigger_type field from the TriggerRecordHeaderData struct

Definition at line 163 of file TriggerRecordHeader.hpp.

163{ return header_()->trigger_type; }
trigger_type_t trigger_type
Type of the TriggerDecision.

◆ header_()

TriggerRecordHeaderData * dunedaq::daqdataformats::TriggerRecordHeader::header_ ( ) const
inlineprivate

Get the TriggerRecordHeaderData from the m_data_arr array.

Returns
Pointer to the TriggerRecordHeaderData

Definition at line 247 of file TriggerRecordHeader.hpp.

247{ return static_cast<TriggerRecordHeaderData*>(m_data_arr); }

◆ operator=() [1/2]

TriggerRecordHeader & dunedaq::daqdataformats::TriggerRecordHeader::operator= ( TriggerRecordHeader && other)
inline

Definition at line 67 of file TriggerRecordHeader.hpp.

68 {
69 m_alloc = other.m_alloc;
70 other.m_alloc = false;
71 m_data_arr = other.m_data_arr;
72 return *this;
73 }

◆ operator=() [2/2]

TriggerRecordHeader & dunedaq::daqdataformats::TriggerRecordHeader::operator= ( TriggerRecordHeader const & other)
inline

TriggerRecordHeader copy assignment operator.

Parameters
otherTriggerRecordHeader to copy
Returns
Reference to TriggerRecordHeader copy

Definition at line 300 of file TriggerRecordHeader.hpp.

301{
302 if (&other == this)
303 return *this;
304
305 if (m_alloc) {
306 free(m_data_arr);
307 }
308 m_data_arr = malloc(other.get_total_size_bytes());
309 if (m_data_arr == nullptr) {
310 throw std::bad_alloc();
311 }
312 m_alloc = true;
313 std::memcpy(m_data_arr, other.m_data_arr, other.get_total_size_bytes());
314 return *this;
315}

◆ operator[]()

ComponentRequest & dunedaq::daqdataformats::TriggerRecordHeader::operator[] ( size_t idx)
inline

Operator[] to access ComponentRequests by index.

Parameters
idxIndex to access
Returns
ComponentRequest reference
Exceptions
std::range_errorexception if idx is outside of allowable range

Definition at line 328 of file TriggerRecordHeader.hpp.

329{
330 if (idx >= header_()->num_requested_components) {
331 throw std::range_error("Supplied ComponentRequest index is larger than the maximum index.");
332 }
333 // Increment header pointer by one to skip header
334 return *(reinterpret_cast<ComponentRequest*>(header_() + 1) + idx); // NOLINT
335}

◆ set_element_id()

void dunedaq::daqdataformats::TriggerRecordHeader::set_element_id ( SourceID source_id)
inline

Set the SourceID for this TriggerRecordHeader.

Parameters
source_idSourceID value to set

Definition at line 201 of file TriggerRecordHeader.hpp.

201{ header_()->element_id = source_id; }

◆ set_error_bit()

void dunedaq::daqdataformats::TriggerRecordHeader::set_error_bit ( TriggerRecordErrorBits bit,
bool value )
inline

Set the given error bit to the given value.

Parameters
bitBit to set
valueValue to set (true/false)

Definition at line 152 of file TriggerRecordHeader.hpp.

153 {
154 auto bits = get_error_bits();
155 bits[static_cast<size_t>(bit)] = value;
156 set_error_bits(bits);
157 }
void set_error_bits(std::bitset< 32 > bits)
Overwrite error bits using the given bitset.

◆ set_error_bits()

void dunedaq::daqdataformats::TriggerRecordHeader::set_error_bits ( std::bitset< 32 > bits)
inline

Overwrite error bits using the given bitset.

Parameters
bitsBitset of error bits to set

Definition at line 140 of file TriggerRecordHeader.hpp.

140{ header_()->error_bits = bits.to_ulong(); }

◆ set_max_sequence_number()

void dunedaq::daqdataformats::TriggerRecordHeader::set_max_sequence_number ( sequence_number_t number)
inline

Set the maxiumum sequence number for this TriggerRecordHeader.

Parameters
max_sequence_numberMaximum sequence number to set

Definition at line 190 of file TriggerRecordHeader.hpp.

190{ header_()->max_sequence_number = number; }

◆ set_run_number()

void dunedaq::daqdataformats::TriggerRecordHeader::set_run_number ( run_number_t run_number)
inline

Set the run number for this TriggerRecordHeader.

Parameters
run_numberRun number to set

Definition at line 129 of file TriggerRecordHeader.hpp.

129{ header_()->run_number = run_number; }

◆ set_sequence_number()

void dunedaq::daqdataformats::TriggerRecordHeader::set_sequence_number ( sequence_number_t number)
inline

Set the sequence number for this TriggerRecordHeader.

Parameters
sequence_numberSequence number to set

Definition at line 179 of file TriggerRecordHeader.hpp.

179{ header_()->sequence_number = number; }

◆ set_trigger_number()

void dunedaq::daqdataformats::TriggerRecordHeader::set_trigger_number ( trigger_number_t trigger_number)
inline

Set the trigger number for this TriggerRecordHeader.

Parameters
trigger_numberTrigger nunmber to set

Definition at line 99 of file TriggerRecordHeader.hpp.

99{ header_()->trigger_number = trigger_number; }

◆ set_trigger_timestamp()

void dunedaq::daqdataformats::TriggerRecordHeader::set_trigger_timestamp ( timestamp_t trigger_timestamp)
inline

Set the trigger timestamp for this TriggerRecordHeader.

Parameters
trigger_timestampTrigger timestamp to set

Definition at line 109 of file TriggerRecordHeader.hpp.

109{ header_()->trigger_timestamp = trigger_timestamp; }

◆ set_trigger_type()

void dunedaq::daqdataformats::TriggerRecordHeader::set_trigger_type ( trigger_type_t trigger_type)
inline

Set the trigger_type header field to the given value.

Parameters
trigger_typeValue of trigger_type to set

Definition at line 168 of file TriggerRecordHeader.hpp.

168{ header_()->trigger_type = trigger_type; }

Member Data Documentation

◆ m_alloc

bool dunedaq::daqdataformats::TriggerRecordHeader::m_alloc { false }
private

Whether the TriggerRecordHeader owns the memory pointed by m_data_arr.

Definition at line 252 of file TriggerRecordHeader.hpp.

252{ false };

◆ m_data_arr

void* dunedaq::daqdataformats::TriggerRecordHeader::m_data_arr
private
Initial value:
{
nullptr
}

Flat memory containing a TriggerRecordHeaderData header and an array of ComponentRequests.

Definition at line 249 of file TriggerRecordHeader.hpp.

249 {
250 nullptr
251 };

The documentation for this class was generated from the following file: