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 &);
38 typedef uint8_t data_t;
39 typedef uint32_t run_number_t;
48 run_number_t run_number;
50 static size_t const size_words = 8ul;
53 static_assert(
sizeof(
Metadata) == Metadata::size_words *
sizeof(Metadata::data_t),
54 "DTCFragment::Metadata size changed");
67 typedef uint8_t data_t;
69 typedef uint64_t timestamp_t;
70 typedef uint32_t data_size_t;
72 data_size_t event_size;
74 timestamp_t timestamp : 48;
75 timestamp_t unused : 16;
77 static size_t const size_words = 16ul;
80 static_assert(
sizeof(
Header) == Header::size_words *
sizeof(Header::data_t),
"DTCFragment::Header size changed");
85 DTCFragment(artdaq::Fragment
const &f) : artdaq_Fragment_(f) {}
88 Header::data_size_t hdr_packet_count()
const {
return header_()->event_size; }
89 Header::timestamp_t hdr_timestamp()
const {
return header_()->timestamp; }
91 static constexpr
size_t hdr_size_words() {
return Header::size_words; }
93 size_t dataSize()
const {
return hdr_packet_count() * words_per_packet_(); }
96 packet_t
const *dataBegin()
const {
return reinterpret_cast<packet_t
const *
>(header_() + 1); }
99 packet_t
const *dataEnd()
const {
return dataBegin() + hdr_packet_count(); }
107 static constexpr
size_t words_per_packet_() {
return sizeof(packet_t) /
sizeof(Header::data_t); }
109 static constexpr
size_t words_per_frag_word_() {
110 return sizeof(artdaq::Fragment::value_type) /
sizeof(Header::data_t);
117 Header
const *header_()
const {
118 return reinterpret_cast<DTCFragment::Header
const *
>(&*artdaq_Fragment_.dataBegin());
122 artdaq::Fragment
const &artdaq_Fragment_;