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"
18 class ArtFragmentReader;
27 adc_t DBH_ByteCount(adc_t
const *pos);
28 bool DBH_Valid(adc_t
const *pos);
29 adc_t DBH_ROCID(adc_t
const *pos);
30 adc_t DBH_PacketType(adc_t
const *pos);
31 adc_t DBH_PacketCount(adc_t
const *pos);
32 uint64_t DBH_Timestamp(adc_t
const *pos);
33 adc_t DBH_TimestampLow(adc_t
const *pos);
34 adc_t DBH_TimestampMedium(adc_t
const *pos);
35 adc_t DBH_TimestampHigh(adc_t
const *pos);
36 adc_t DBH_Status(adc_t
const *pos);
37 adc_t DBH_FormatVersion(adc_t
const *pos);
38 adc_t DBH_EVBMode(adc_t
const *pos);
39 adc_t DBH_SubsystemID(adc_t
const *pos);
40 adc_t DBH_DTCID(adc_t
const *pos);
43 adc_t DBT_StrawIndex(adc_t
const *pos);
44 adc_t DBT_TDC0(adc_t
const *pos);
45 adc_t DBT_TDC1(adc_t
const *pos);
46 adc_t DBT_TOT0(adc_t
const *pos);
47 adc_t DBT_TOT1(adc_t
const *pos);
48 std::array<adc_t,15> DBT_Waveform(adc_t
const *pos);
49 adc_t DBT_Flags(adc_t
const *pos);
52 adc_t DBC_CrystalID(adc_t
const *pos);
53 adc_t DBC_apdID(adc_t
const *pos);
54 adc_t DBC_Time(adc_t
const *pos);
55 adc_t DBC_NumSamples(adc_t
const *pos);
56 adc_t DBC_PeakSampleIdx(adc_t
const *pos);
57 std::vector<int> DBC_Waveform(adc_t
const *pos);
65 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_ByteCount(adc_t
const *pos) {
69 bool mu2e::ArtFragmentReader::DBH_Valid(adc_t
const *pos) {
70 return (*(pos+1) >> 15) & 0x0001;
73 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_ROCID(adc_t
const *pos) {
74 return *(pos+1) & 0x000F;
77 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_PacketType(adc_t
const *pos) {
78 return (*(pos+1) >> 4) & 0x000F;
81 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_PacketCount(adc_t
const *pos) {
82 return *(pos+2) & 0x07FF;
85 uint64_t mu2e::ArtFragmentReader::DBH_Timestamp(adc_t
const *pos) {
86 return uint64_t(*(pos+3)) + (uint64_t(*(pos+4)) << 16) + (uint64_t(*(pos+5)) << 32);
89 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_TimestampLow(adc_t
const *pos) {
93 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_TimestampMedium(adc_t
const *pos) {
97 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_TimestampHigh(adc_t
const *pos) {
101 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_Status(adc_t
const *pos) {
102 return *(pos+6) & 0x00FF;
105 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_FormatVersion(adc_t
const *pos) {
106 return *(pos+6) >> 8;
109 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_EVBMode(adc_t
const *pos) {
110 return *(pos+7) >> 8;
113 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_SubsystemID(adc_t
const *pos) {
114 return (*(pos+7) >> 6) & 0x0003;
117 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_DTCID(adc_t
const *pos) {
118 return *(pos+7) & 0x003F;
124 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBT_StrawIndex(adc_t
const *pos) {
128 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBT_TDC0(adc_t
const *pos) {
129 return (uint32_t(*(pos+8+1)) & 0xFFFF);
132 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBT_TDC1(adc_t
const *pos) {
133 return (uint32_t(*(pos+8+2)) & 0xFFFF);
137 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBT_TOT0(adc_t
const *pos) {
138 return (uint32_t(*(pos+8+3)) & 0x00FF) ;
141 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBT_TOT1(adc_t
const *pos) {
142 return ( (uint32_t(*(pos+8+3)) >> 8) & 0x00FF) ;
145 std::array<mu2e::ArtFragmentReader::adc_t,15> mu2e::ArtFragmentReader::DBT_Waveform(adc_t
const *pos) {
146 std::array<adc_t,15> waveform;
151 for (
size_t i = 0; i < 4; i+=1){
152 waveform[0 + i*4] = *(pos+8+4+i*3) & 0x0FFF ;
153 waveform[1 + i*4] = ((*(pos+8+4+i*3+1) & 0x00FF) << 4) | (*(pos+8+4+i*3) >> 12) ;
154 waveform[2 + i*4] = ((*(pos+8+4+i*3+2) & 0x000F) << 8) | (*(pos+8+4+i*3+1) >> 8) ;
156 waveform[3 + i*4] = (*(pos+8+4+i*3+2) >> 4) ;
163 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBT_Flags(adc_t
const *pos) {
165 return (*(pos+8+15) >> 8);
173 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBC_CrystalID(adc_t
const *pos) {
174 return *(pos+8+0) & 0x0FFF;
177 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBC_apdID(adc_t
const *pos) {
178 return *(pos+8+0) >> 12;
181 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBC_Time(adc_t
const *pos) {
185 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBC_NumSamples(adc_t
const *pos) {
186 return *(pos+8+2) & 0x00FF;
189 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBC_PeakSampleIdx(adc_t
const *pos) {
190 return *(pos+8+2) >> 8;
193 std::vector<int> mu2e::ArtFragmentReader::DBC_Waveform(adc_t
const *pos) {
194 std::vector<int> waveform;
195 for(
size_t i=0; i<DBC_NumSamples(pos); i++) {
196 waveform.push_back(*(pos+8+3+i));