mu2e_artdaq_core  v1_02_19
 All Classes Functions
TrackerFragmentReader.hh
1 #ifndef mu2e_artdaq_core_Overlays_TrackerFragmentReader_hh
2 #define mu2e_artdaq_core_Overlays_TrackerFragmentReader_hh
3 
4 #include "artdaq-core/Data/Fragment.hh"
5 #include "cetlib_except/exception.h"
6 
7 #include "mu2e-artdaq-core/Overlays/DetectorFragment.hh"
8 
9 #include <bitset>
10 #include <iostream>
11 #include <ostream>
12 #include <vector>
13 
14 namespace mu2e {
15 class TrackerFragmentReader;
16 }
17 
19 {
20 public:
21  TrackerFragmentReader(artdaq::Fragment const& f);
23 
24  // Tracker-specific methods:
25  mu2e::DetectorFragment::adc_t strawIndex();
26  mu2e::DetectorFragment::adc_t firstTDC();
27  mu2e::DetectorFragment::adc_t secondTDC();
28  std::vector<mu2e::DetectorFragment::adc_t> trackerADC();
29  void printAll();
30 };
31 
32 mu2e::TrackerFragmentReader::TrackerFragmentReader(artdaq::Fragment const& f)
33  : DetectorFragment(f) {}
34 
35 mu2e::TrackerFragmentReader::~TrackerFragmentReader() {}
36 
37 mu2e::DetectorFragment::adc_t mu2e::TrackerFragmentReader::strawIndex()
38 {
39  // The tracker data packets begin 8*16=128 bits after the beginning of the fragment data
40  return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin() + 8), 127 - 8 * 2, 127 - 8 * 0);
41 }
42 
43 mu2e::DetectorFragment::adc_t mu2e::TrackerFragmentReader::firstTDC()
44 {
45  return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin() + 8), 127 - 8 * 4, 127 - 8 * 2);
46 }
47 
48 mu2e::DetectorFragment::adc_t mu2e::TrackerFragmentReader::secondTDC()
49 {
50  return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin() + 8), 127 - 8 * 6, 127 - 8 * 4);
51 }
52 
53 std::vector<mu2e::DetectorFragment::adc_t> mu2e::TrackerFragmentReader::trackerADC()
54 {
55  std::vector<adc_t> theVector;
56  std::bitset<128> bitarray;
57  fillBitArray(bitarray, dataBlockBegin() + 8);
58 
59  for (int i = 0; i < 8; i++) {
60  theVector.push_back(convertFromBinary(bitarray, 127 - 8 * 6 - 10 * (1 + i), 127 - 8 * 6 - 10 * (0 + i)));
61  }
62 
63  return theVector;
64 }
65 
66 void mu2e::TrackerFragmentReader::printAll()
67 {
68  std::cout << "\t\t"
69  << "Straw Index: " << (int)strawIndex() << std::endl;
70  std::cout << "\t\t"
71  << "First TDC: " << (int)firstTDC() << std::endl;
72  std::cout << "\t\t"
73  << "Second TDC: " << (int)secondTDC() << std::endl;
74  std::cout << "\t\t"
75  << "ADC: {[";
76  std::vector<mu2e::DetectorFragment::adc_t> ADCarray = trackerADC();
77  for (int i = 0; i < 8; i++) {
78  std::cout << (int)ADCarray[i];
79  if (i < 7) {
80  std::cout << ",";
81  }
82  }
83  std::cout << "]}" << std::endl;
84 }
85 
86 #endif /* mu2e_artdaq_core_Overlays_TrackerFragmentReader_hh */