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