1 #ifndef mu2e_artdaq_core_Overlays_ArtFragmentReader_hh
2 #define mu2e_artdaq_core_Overlays_ArtFragmentReader_hh
12 #include "artdaq-core/Data/Fragment.hh"
13 #include "mu2e-artdaq-core/Overlays/ArtFragment.hh"
19 class ArtFragmentReader;
28 adc_t DBH_ByteCount(adc_t
const *pos);
29 bool DBH_Valid(adc_t
const *pos);
30 adc_t DBH_ROCID(adc_t
const *pos);
31 adc_t DBH_RingID(adc_t
const *pos);
32 adc_t DBH_PacketType(adc_t
const *pos);
33 adc_t DBH_PacketCount(adc_t
const *pos);
34 uint64_t DBH_Timestamp(adc_t
const *pos);
35 adc_t DBH_TimestampLow(adc_t
const *pos);
36 adc_t DBH_TimestampMedium(adc_t
const *pos);
37 adc_t DBH_TimestampHigh(adc_t
const *pos);
38 adc_t DBH_Status(adc_t
const *pos);
39 adc_t DBH_FormatVersion(adc_t
const *pos);
40 adc_t DBH_EVBMode(adc_t
const *pos);
41 adc_t DBH_SubsystemID(adc_t
const *pos);
42 adc_t DBH_DTCID(adc_t
const *pos);
45 adc_t DBT_StrawIndex(adc_t
const *pos);
46 uint32_t DBT_TDC0(adc_t
const *pos);
47 uint32_t DBT_TDC1(adc_t
const *pos);
48 std::vector<adc_t> DBT_Waveform(adc_t
const *pos);
51 adc_t DBC_CrystalID(adc_t
const *pos);
52 adc_t DBC_apdID(adc_t
const *pos);
53 adc_t DBC_Time(adc_t
const *pos);
54 adc_t DBC_NumSamples(adc_t
const *pos);
55 std::vector<adc_t> DBC_Waveform(adc_t
const *pos);
63 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_ByteCount(adc_t
const *pos) {
67 bool mu2e::ArtFragmentReader::DBH_Valid(adc_t
const *pos) {
68 return (*(pos+1) >> 15) & 0x0001;
71 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_ROCID(adc_t
const *pos) {
72 return *(pos+1) & 0x000F;
75 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_RingID(adc_t
const *pos) {
76 return (*(pos+1) >> 8) & 0x0007;
79 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_PacketType(adc_t
const *pos) {
80 return (*(pos+1) >> 4) & 0x000F;
83 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_PacketCount(adc_t
const *pos) {
84 return *(pos+2) & 0x07FF;
87 uint64_t mu2e::ArtFragmentReader::DBH_Timestamp(adc_t
const *pos) {
88 return uint64_t(*(pos+3)) + (uint64_t(*(pos+4)) << 16) + (uint64_t(*(pos+5)) << 32);
91 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_TimestampLow(adc_t
const *pos) {
95 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_TimestampMedium(adc_t
const *pos) {
99 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_TimestampHigh(adc_t
const *pos) {
103 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_Status(adc_t
const *pos) {
104 return *(pos+6) & 0x00FF;
107 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_FormatVersion(adc_t
const *pos) {
108 return *(pos+6) >> 8;
111 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_EVBMode(adc_t
const *pos) {
112 return *(pos+7) >> 8;
115 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_SubsystemID(adc_t
const *pos) {
116 return (*(pos+7) >> 6) & 0x0003;
119 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_DTCID(adc_t
const *pos) {
120 return *(pos+7) & 0x003F;
126 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBT_StrawIndex(adc_t
const *pos) {
130 uint32_t mu2e::ArtFragmentReader::DBT_TDC0(adc_t
const *pos) {
131 return ((uint32_t(*(pos+8+2)) & 0x00FF) << 16) + uint32_t(*(pos+8+1));
134 uint32_t mu2e::ArtFragmentReader::DBT_TDC1(adc_t
const *pos) {
135 return (uint32_t(*(pos+8+3)) << 8) + uint32_t(*(pos+8+2) >> 8);
138 std::vector<mu2e::ArtFragmentReader::adc_t> mu2e::ArtFragmentReader::DBT_Waveform(adc_t
const *pos) {
139 std::vector<adc_t> waveform;
140 for(
size_t i=0; i<12; i++) {
141 waveform.push_back(*(pos+8+4+i));
150 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBC_CrystalID(adc_t
const *pos) {
151 return *(pos+8+0) & 0x0FFF;
154 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBC_apdID(adc_t
const *pos) {
155 return *(pos+8+0) >> 12;
158 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBC_Time(adc_t
const *pos) {
162 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBC_NumSamples(adc_t
const *pos) {
166 std::vector<mu2e::ArtFragmentReader::adc_t> mu2e::ArtFragmentReader::DBC_Waveform(adc_t
const *pos) {
167 std::vector<adc_t> waveform;
168 for(
size_t i=0; i<DBC_NumSamples(pos); i++) {
169 waveform.push_back(*(pos+8+3+i));