mu2e_artdaq_core  v1_02_05
 All Classes Functions
DebugFragmentReader.hh
1 #ifndef mu2e_artdaq_core_Overlays_DebugFragmentReader_hh
2 #define mu2e_artdaq_core_Overlays_DebugFragmentReader_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 DebugFragmentReader;
16 }
17 
19 
20  public:
21 
22  DebugFragmentReader(artdaq::Fragment const & f);
24 
25  // Debug Packet methods:
26  mu2e::DetectorFragment::adc_t serialFIFO_empty();
27  mu2e::DetectorFragment::adc_t serialFIFO_full();
28  mu2e::DetectorFragment::adc_t numEmptyFIFO();
29  mu2e::DetectorFragment::adc_t numFilledFIFO();
30  std::vector<mu2e::DetectorFragment::adc_t> debugData();
31  std::vector< std::vector<mu2e::DetectorFragment::adc_t> > debugInfo();
32  void printAll();
33 
34 };
35 
36 mu2e::DebugFragmentReader::DebugFragmentReader(artdaq::Fragment const & f ) :
37  DetectorFragment(f) {
38 }
39 
40 mu2e::DebugFragmentReader::~DebugFragmentReader() {
41 }
42 
43 
45 // Debug Header Packet methods
47 mu2e::DetectorFragment::adc_t mu2e::DebugFragmentReader::serialFIFO_empty() {
48  return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()),127-105,127-104);
49 }
50 
51 mu2e::DetectorFragment::adc_t mu2e::DebugFragmentReader::serialFIFO_full() {
52  return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()),127-106,127-105);
53 }
54 
55 mu2e::DetectorFragment::adc_t mu2e::DebugFragmentReader::numEmptyFIFO() {
56  return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()),127-120,127-112);
57 }
58 
59 mu2e::DetectorFragment::adc_t mu2e::DebugFragmentReader::numFilledFIFO() {
60  return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()),127-128,127-120);
61 }
63 
64 
65 
67 // Debug Data Packet methods
69 
70 std::vector<mu2e::DetectorFragment::adc_t> mu2e::DebugFragmentReader::debugData() {
71  std::vector<adc_t> theVector;
72  // Start after at the 0th 16-bit block of the first debug data packet:
73  for(size_t curPacketNum=0; curPacketNum<packetCount(); curPacketNum++) {
74  for(size_t adcIdx=1; adcIdx<8; adcIdx+=2) { // The Deserialized Data is in every other position starting at 1
75  theVector.push_back( *((adc_t const *)( (dataBlockBegin()+8+0) + adcIdx )) );
76  }
77  }
78  return theVector;
79 }
80 
81 std::vector< std::vector<mu2e::DetectorFragment::adc_t> > mu2e::DebugFragmentReader::debugInfo() {
82  std::vector< std::vector<adc_t> > theVector;
83  // Start after at the 0th 16-bit block of the first debug data packet:
84  for(size_t curPacketNum=0; curPacketNum<packetCount(); curPacketNum++) {
85  std::bitset<128> bitarray;
86  fillBitArray(bitarray,dataBlockBegin()+8+curPacketNum*8);
87  for(size_t adcIdx=0; adcIdx<8; adcIdx+=2) { // The info field is in every other position starting at 1
88  std::vector<adc_t> infoVector;
89 
90  // FIFO Count
91  infoVector.push_back( convertFromBinary(bitarray,127-adcIdx*16-11,127-adcIdx*16-0) );
92 
93  // serialFifo_empty
94  infoVector.push_back( convertFromBinary(bitarray,127-adcIdx*16-13,127-adcIdx*16-12) );
95 
96  // serialFifo_full
97  infoVector.push_back( convertFromBinary(bitarray,127-adcIdx*16-14,127-adcIdx*16-13) );
98 
99  theVector.push_back(infoVector);
100  }
101  }
102  return theVector;
103 }
104 
105 //mu2e::DetectorFragment::adc_t mu2e::DebugFragmentReader::numSamples() {
106 // return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()+8),127-48,127-32);
107 //}
108 
109 void mu2e::DebugFragmentReader::printAll() {
110  std::cout << "\t\t" << "Binary Representation: ";
111  printBitArray(bitArray(dataBlockBegin()+8));
112 
113  std::cout << "\t\t" << "Packet Type: " << (int)packetType() << std::endl;
114  std::cout << "\t\t" << "Packet Count: " << (int)packetCount() << std::endl;
115  std::cout << "\t\t" << "Serial FIFO Empty: " << (int)serialFIFO_empty() << std::endl;
116  std::cout << "\t\t" << "Serial FIFO Full: " << (int)serialFIFO_full() << std::endl;
117  std::cout << "\t\t" << "# Empty FIFO Entries: " << (int)numEmptyFIFO() << std::endl;
118  std::cout << "\t\t" << "# Filled FIFO Entries: " << (int)numFilledFIFO() << std::endl;
119 
120  std::cout << "\t\t" << "Debug Data: {[";
121  std::vector<mu2e::DetectorFragment::adc_t> ADCarray = debugData();
122  for(size_t i=0; i<ADCarray.size(); i++) {
123  std::cout << (int)ADCarray[i];
124  if(i<ADCarray.size()-1) {
125  std::cout << ",";
126  }
127  }
128  std::cout << "]}" << std::endl;
129 
130  std::cout << "\t\t" << "Debug Info: {[";
131  std::vector< std::vector<mu2e::DetectorFragment::adc_t> > InfoArray = debugInfo();
132  for(size_t i=0; i<InfoArray.size(); i++) {
133  std::cout << "{" << (int)InfoArray[i][0] << ","
134  << (int)InfoArray[i][1] << ","
135  << (int)InfoArray[i][2] << "}";
136  if(i<InfoArray.size()-1) {
137  std::cout << ",";
138  }
139  }
140  std::cout << "]}" << std::endl;
141 }
142 
143 #endif /* mu2e_artdaq_core_Overlays_DebugFragmentReader_hh */