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 uint32_t DBT_TOT0(adc_t
const *pos);
49 uint32_t DBT_TOT1(adc_t
const *pos);
51 std::vector<adc_t> DBT_Waveform(adc_t
const *pos);
54 adc_t DBC_CrystalID(adc_t
const *pos);
55 adc_t DBC_apdID(adc_t
const *pos);
56 adc_t DBC_Time(adc_t
const *pos);
57 adc_t DBC_NumSamples(adc_t
const *pos);
58 std::vector<adc_t> DBC_Waveform(adc_t
const *pos);
66 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_ByteCount(adc_t
const *pos) {
70 bool mu2e::ArtFragmentReader::DBH_Valid(adc_t
const *pos) {
71 return (*(pos+1) >> 15) & 0x0001;
74 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_ROCID(adc_t
const *pos) {
75 return *(pos+1) & 0x000F;
78 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_RingID(adc_t
const *pos) {
79 return (*(pos+1) >> 8) & 0x0007;
82 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_PacketType(adc_t
const *pos) {
83 return (*(pos+1) >> 4) & 0x000F;
86 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_PacketCount(adc_t
const *pos) {
87 return *(pos+2) & 0x07FF;
90 uint64_t mu2e::ArtFragmentReader::DBH_Timestamp(adc_t
const *pos) {
91 return uint64_t(*(pos+3)) + (uint64_t(*(pos+4)) << 16) + (uint64_t(*(pos+5)) << 32);
94 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_TimestampLow(adc_t
const *pos) {
98 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_TimestampMedium(adc_t
const *pos) {
102 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_TimestampHigh(adc_t
const *pos) {
106 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_Status(adc_t
const *pos) {
107 return *(pos+6) & 0x00FF;
110 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_FormatVersion(adc_t
const *pos) {
111 return *(pos+6) >> 8;
114 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_EVBMode(adc_t
const *pos) {
115 return *(pos+7) >> 8;
118 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_SubsystemID(adc_t
const *pos) {
119 return (*(pos+7) >> 6) & 0x0003;
122 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_DTCID(adc_t
const *pos) {
123 return *(pos+7) & 0x003F;
129 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBT_StrawIndex(adc_t
const *pos) {
133 uint32_t mu2e::ArtFragmentReader::DBT_TDC0(adc_t
const *pos) {
134 return (uint32_t(*(pos+8+1)) & 0xFFFF);
137 uint32_t mu2e::ArtFragmentReader::DBT_TDC1(adc_t
const *pos) {
138 return (uint32_t(*(pos+8+2)) & 0xFFFF);
142 uint32_t mu2e::ArtFragmentReader::DBT_TOT0(adc_t
const *pos) {
143 return (uint32_t(*(pos+8+3)) & 0x00FF) ;
146 uint32_t mu2e::ArtFragmentReader::DBT_TOT1(adc_t
const *pos) {
147 return ( (uint32_t(*(pos+8+3)) >> 8) & 0x00FF) ;
150 std::vector<mu2e::ArtFragmentReader::adc_t> mu2e::ArtFragmentReader::DBT_Waveform(adc_t
const *pos) {
151 std::vector<adc_t> waveform;
155 for (
size_t i = 0; i < 12; i+=4){
156 waveform.push_back(*(pos+8+4+i) & 0x0FFF );
157 waveform.push_back(((*(pos+8+4+i+1) & 0x00FF) << 4) | (*(pos+8+4+i) >> 12) );
158 waveform.push_back(((*(pos+8+4+i+2) & 0x000F) << 8) | (*(pos+8+4+i+1) >> 8));
159 waveform.push_back((*(pos+8+4+i+2) >> 4) );
175 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBC_CrystalID(adc_t
const *pos) {
176 return *(pos+8+0) & 0x0FFF;
179 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBC_apdID(adc_t
const *pos) {
180 return *(pos+8+0) >> 12;
183 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBC_Time(adc_t
const *pos) {
187 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBC_NumSamples(adc_t
const *pos) {
191 std::vector<mu2e::ArtFragmentReader::adc_t> mu2e::ArtFragmentReader::DBC_Waveform(adc_t
const *pos) {
192 std::vector<adc_t> waveform;
193 for(
size_t i=0; i<DBC_NumSamples(pos); i++) {
194 waveform.push_back(*(pos+8+3+i));