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),
"DTCFragment::Metadata size changed");
69 typedef uint8_t data_t;
71 typedef uint64_t timestamp_t;
72 typedef uint32_t data_size_t;
74 data_size_t event_size;
76 timestamp_t timestamp : 48;
77 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");
88 DTCFragment(artdaq::Fragment
const & f ) : artdaq_Fragment_(f) {}
91 Header::data_size_t hdr_packet_count()
const {
return header_()->event_size; }
92 Header::timestamp_t hdr_timestamp()
const {
return header_()->timestamp; }
94 static constexpr
size_t hdr_size_words() {
return Header::size_words; }
96 size_t dataSize()
const {
97 return hdr_packet_count() * words_per_packet_();
101 packet_t
const * dataBegin()
const {
102 return reinterpret_cast<packet_t
const *
>(header_() + 1);
106 packet_t
const * dataEnd()
const {
107 return dataBegin() + hdr_packet_count();
117 static constexpr
size_t words_per_packet_() {
118 return sizeof(packet_t) /
sizeof(Header::data_t);
121 static constexpr
size_t words_per_frag_word_() {
122 return sizeof(artdaq::Fragment::value_type) /
sizeof(Header::data_t);
129 Header
const * header_()
const {
130 return reinterpret_cast<DTCFragment::Header
const *
>(&*artdaq_Fragment_.dataBegin());
135 artdaq::Fragment
const & artdaq_Fragment_;