mu2e_artdaq_core  v1_02_00
 All Classes
ArtFragmentReader.hh
1 #ifndef mu2e_artdaq_core_Overlays_ArtFragmentReader_hh
2 #define mu2e_artdaq_core_Overlays_ArtFragmentReader_hh
3 
5 // ArtFragmentReader
6 //
7 // Class derived from mu2eFragment which provides additional methods
8 // for accessing data stored in a mu2eFragment
9 //
11 
12 #include "artdaq-core/Data/Fragment.hh"
13 #include "mu2e-artdaq-core/Overlays/ArtFragment.hh"
14 
15 #include <iostream>
16 #include "trace.h"
17 
18 namespace mu2e {
19  class ArtFragmentReader;
20 }
21 
23  public:
24 
25  ArtFragmentReader(artdaq::Fragment const & f) : ArtFragment(f) {};
26 
27  // DataBlock Header Accessor Methods (by block address)
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);
43 
44  // TRK DataBlock Payload Accessor Methods (by block address)
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);
49 
50  // CAL DataBlock Payload Accessor Methods (by block address)
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);
56 
57 };
58 
60 // DataBlock Header Accessor Methods (by block address)
62 
63 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_ByteCount(adc_t const *pos) {
64  return *(pos+0);
65 }
66 
67 bool mu2e::ArtFragmentReader::DBH_Valid(adc_t const *pos) {
68  return (*(pos+1) >> 15) & 0x0001;
69 }
70 
71 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_ROCID(adc_t const *pos) {
72  return *(pos+1) & 0x000F; // 0x000F = 0b1111
73 }
74 
75 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_RingID(adc_t const *pos) {
76  return (*(pos+1) >> 8) & 0x0007; // 0x0007 = 0b0111
77 }
78 
79 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_PacketType(adc_t const *pos) {
80  return (*(pos+1) >> 4) & 0x000F; // 0x000F = 0b1111
81 }
82 
83 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_PacketCount(adc_t const *pos) {
84  return *(pos+2) & 0x07FF; // 0x07FF = 0b0111 1111 1111
85 }
86 
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);
89 }
90 
91 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_TimestampLow(adc_t const *pos) {
92  return *(pos+3);
93 }
94 
95 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_TimestampMedium(adc_t const *pos) {
96  return *(pos+4);
97 }
98 
99 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_TimestampHigh(adc_t const *pos) {
100  return *(pos+5);
101 }
102 
103 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_Status(adc_t const *pos) {
104  return *(pos+6) & 0x00FF; // 0x00FF = 0b1111 1111
105 }
106 
107 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_FormatVersion(adc_t const *pos) {
108  return *(pos+6) >> 8;
109 }
110 
111 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_EVBMode(adc_t const *pos) {
112  return *(pos+7) >> 8;
113 }
114 
115 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_SubsystemID(adc_t const *pos) {
116  return (*(pos+7) >> 6) & 0x0003; //0x0003 = 0b0011
117 }
118 
119 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBH_DTCID(adc_t const *pos) {
120  return *(pos+7) & 0x003F; // 0x003F = 0b0011 1111
121 }
122 
124 // TRK DataBlock Payload Accessor Methods (by block address)
126 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBT_StrawIndex(adc_t const *pos) {
127  return *(pos+8+0);
128 }
129 
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));
132 }
133 
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);
136 }
137 
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));
142  }
143  return waveform;
144 }
145 
147 // CAL DataBlock Payload Accessor Methods (by block address)
149 
150 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBC_CrystalID(adc_t const *pos) {
151  return *(pos+8+0) & 0x0FFF; // 0x0FFF = 0b1111 1111 1111
152 }
153 
154 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBC_apdID(adc_t const *pos) {
155  return *(pos+8+0) >> 12;
156 }
157 
158 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBC_Time(adc_t const *pos) {
159  return *(pos+8+1);
160 }
161 
162 mu2e::ArtFragmentReader::adc_t mu2e::ArtFragmentReader::DBC_NumSamples(adc_t const *pos) {
163  return *(pos+8+2);
164 }
165 
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));
170  }
171  return waveform;
172 }
173 
174 
175 
176 
177 
178 #endif /* mu2e_artdaq_Overlays_ArtFragmentReader_hh */
179