1 #ifndef mu2e_artdaq_core_Overlays_DTCFragment_hh
2 #define mu2e_artdaq_core_Overlays_DTCFragment_hh
4 #include "artdaq-core/Data/Fragment.hh"
6 #include "cetlib_except/exception.h"
17 typedef uint8_t packet_t[16];
19 std::ostream &operator<<(std::ostream &, DTCFragment
const &);
40 typedef uint8_t data_t;
41 typedef uint32_t run_number_t;
50 run_number_t run_number;
52 static size_t const size_words = 8ul;
55 static_assert(
sizeof(
Metadata) == Metadata::size_words *
sizeof(Metadata::data_t),
56 "DTCFragment::Metadata size changed");
70 typedef uint8_t data_t;
72 typedef uint64_t timestamp_t;
73 typedef uint32_t data_size_t;
75 data_size_t event_size;
77 timestamp_t timestamp : 48;
78 timestamp_t unused : 16;
80 static size_t const size_words = 16ul;
83 static_assert(
sizeof(
Header) == Header::size_words *
sizeof(Header::data_t),
"DTCFragment::Header size changed");
89 : artdaq_Fragment_(f) {}
92 Header::data_size_t hdr_packet_count()
const {
return header_()->event_size; }
93 Header::timestamp_t hdr_timestamp()
const {
return header_()->timestamp; }
95 static constexpr
size_t hdr_size_words() {
return Header::size_words; }
97 size_t dataSize()
const {
return hdr_packet_count() * words_per_packet_(); }
100 packet_t
const *dataBegin()
const {
return reinterpret_cast<packet_t
const *
>(header_() + 1); }
103 packet_t
const *dataEnd()
const {
return dataBegin() + hdr_packet_count(); }
111 static constexpr
size_t words_per_packet_() {
return sizeof(packet_t) /
sizeof(Header::data_t); }
113 static constexpr
size_t words_per_frag_word_()
115 return sizeof(artdaq::Fragment::value_type) /
sizeof(Header::data_t);
122 Header
const *header_()
const
124 return reinterpret_cast<DTCFragment::Header
const *
>(&*artdaq_Fragment_.dataBegin());
128 artdaq::Fragment
const &artdaq_Fragment_;