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.
TriggerRecordHeaderData get_header () const
trigger_number_t get_trigger_number () const
void set_trigger_number (trigger_number_t trigger_number)
timestamp_t get_trigger_timestamp () const
void set_trigger_timestamp (timestamp_t trigger_timestamp)
uint64_t get_num_requested_components () const
run_number_t get_run_number () const
void set_run_number (run_number_t run_number)
std::bitset< 32 > get_status_bits () const
void set_status_bits (std::bitset< 32 > bits)
bool get_status_bit (TriggerRecordStatusBits bit) const
 Get the value of the given status bit.
void set_status_bit (TriggerRecordStatusBits bit, bool value)
 Set the given status bit to the given value.
trigger_type_t get_trigger_type () const
void set_trigger_type (trigger_type_t trigger_type)
trigger_number_t get_sequence_number () const
void set_sequence_number (sequence_number_t number)
trigger_number_t get_max_sequence_number () const
void set_max_sequence_number (sequence_number_t number)
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, including header and all component requests.
const void * get_storage_location () const
 Get read-only access to the underlying flat data array.
const ComponentRequestat (size_t idx) const
 Access ComponentRequest by index.
ComponentRequest const & get_component_for_source_id (SourceID const &source_id) const
 Access ComponentRequest by SourceID.
 TriggerRecordHeader (TriggerRecordHeader const &other)
TriggerRecordHeaderoperator= (TriggerRecordHeader const &other)
 TriggerRecordHeader (TriggerRecordHeader &&other)
TriggerRecordHeaderoperator= (TriggerRecordHeader &&other)
 ~TriggerRecordHeader ()

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 36 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 173 of file TriggerRecordHeader.hpp.

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}
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.
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 191 of file TriggerRecordHeader.hpp.

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}

◆ TriggerRecordHeader() [3/4]

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

Definition at line 208 of file TriggerRecordHeader.hpp.

209 : TriggerRecordHeader(other.m_data_arr, true)
210{
211}
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 138 of file TriggerRecordHeader.hpp.

139 {
140 m_alloc = other.m_alloc;
141 other.m_alloc = false;
142 m_data_arr = other.m_data_arr;
143 }

◆ ~TriggerRecordHeader()

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

Definition at line 152 of file TriggerRecordHeader.hpp.

153 {
154 if (m_alloc)
155 free(m_data_arr); // NOLINT
156 }

Member Function Documentation

◆ at()

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

Access ComponentRequest by index.

Parameters
idxIndex for access
Returns
Const reference of ComponentRequest at index
Exceptions
std::range_errorexception if idx is outside of allowable range

Definition at line 232 of file TriggerRecordHeader.hpp.

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}
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 244 of file TriggerRecordHeader.hpp.

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}

◆ 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 103 of file TriggerRecordHeader.hpp.

◆ get_header()

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

Definition at line 53 of file TriggerRecordHeader.hpp.

53{ return *header_(); }

◆ get_max_sequence_number()

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

Definition at line 96 of file TriggerRecordHeader.hpp.

96{ 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

Definition at line 61 of file TriggerRecordHeader.hpp.

62 {
64 }
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_sequence_number()

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

Definition at line 93 of file TriggerRecordHeader.hpp.

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

◆ get_status_bit()

bool dunedaq::daqdataformats::TriggerRecordHeader::get_status_bit ( TriggerRecordStatusBits bit) const
inline

Get the value of the given status bit.

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

Definition at line 77 of file TriggerRecordHeader.hpp.

77{ return get_status_bits()[static_cast<size_t>(bit)]; }

◆ get_status_bits()

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

◆ get_storage_location()

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

Get read-only access to the underlying flat data array.

Definition at line 117 of file TriggerRecordHeader.hpp.

117{ 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, including header and all component requests.

Definition at line 111 of file TriggerRecordHeader.hpp.

112 {
113 return header_()->num_requested_components * sizeof(ComponentRequest) + sizeof(TriggerRecordHeaderData);
114 }

◆ get_trigger_number()

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

◆ get_trigger_timestamp()

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

Definition at line 58 of file TriggerRecordHeader.hpp.

58{ 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

Definition at line 90 of file TriggerRecordHeader.hpp.

90{ 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 163 of file TriggerRecordHeader.hpp.

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

◆ operator=() [1/2]

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

Definition at line 144 of file TriggerRecordHeader.hpp.

145 {
146 m_alloc = other.m_alloc;
147 other.m_alloc = false;
148 m_data_arr = other.m_data_arr;
149 return *this;
150 }

◆ operator=() [2/2]

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

Definition at line 214 of file TriggerRecordHeader.hpp.

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}

◆ 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 108 of file TriggerRecordHeader.hpp.

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

◆ set_max_sequence_number()

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

Definition at line 97 of file TriggerRecordHeader.hpp.

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

◆ set_run_number()

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

Definition at line 67 of file TriggerRecordHeader.hpp.

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

◆ set_sequence_number()

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

Definition at line 94 of file TriggerRecordHeader.hpp.

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

◆ set_status_bit()

void dunedaq::daqdataformats::TriggerRecordHeader::set_status_bit ( TriggerRecordStatusBits bit,
bool value )
inline

Set the given status bit to the given value.

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

Definition at line 83 of file TriggerRecordHeader.hpp.

84 {
85 auto bits = get_status_bits();
86 bits[static_cast<size_t>(bit)] = value;
87 set_status_bits(bits);
88 }

◆ set_status_bits()

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

Definition at line 70 of file TriggerRecordHeader.hpp.

70{ header_()->status_bits = bits.to_ulong(); }

◆ set_trigger_number()

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

Definition at line 56 of file TriggerRecordHeader.hpp.

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

◆ set_trigger_timestamp()

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

Definition at line 59 of file TriggerRecordHeader.hpp.

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

◆ set_trigger_type()

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

Definition at line 91 of file TriggerRecordHeader.hpp.

91{ 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 168 of file TriggerRecordHeader.hpp.

168{ 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 165 of file TriggerRecordHeader.hpp.

165 {
166 nullptr
167 };

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