00001 #ifndef mu2e_artdaq_core_Overlays_DebugFragmentReader_hh
00002 #define mu2e_artdaq_core_Overlays_DebugFragmentReader_hh
00003
00004 #include "artdaq-core/Data/Fragment.hh"
00005 #include "cetlib_except/exception.h"
00006
00007 #include "mu2e-artdaq-core/Overlays/DetectorFragment.hh"
00008
00009 #include <bitset>
00010 #include <iostream>
00011 #include <ostream>
00012 #include <vector>
00013
00014 namespace mu2e {
00015 class DebugFragmentReader;
00016 }
00017
00018 class mu2e::DebugFragmentReader : public mu2e::DetectorFragment
00019 {
00020 public:
00021 DebugFragmentReader(artdaq::Fragment const &f);
00022 ~DebugFragmentReader();
00023
00024
00025 mu2e::DetectorFragment::adc_t serialFIFO_empty();
00026 mu2e::DetectorFragment::adc_t serialFIFO_full();
00027 mu2e::DetectorFragment::adc_t numEmptyFIFO();
00028 mu2e::DetectorFragment::adc_t numFilledFIFO();
00029 std::vector<mu2e::DetectorFragment::adc_t> debugData();
00030 std::vector<std::vector<mu2e::DetectorFragment::adc_t> > debugInfo();
00031 void printAll();
00032 };
00033
00034 mu2e::DebugFragmentReader::DebugFragmentReader(artdaq::Fragment const &f)
00035 : DetectorFragment(f) {}
00036
00037 mu2e::DebugFragmentReader::~DebugFragmentReader() {}
00038
00040
00042 mu2e::DetectorFragment::adc_t mu2e::DebugFragmentReader::serialFIFO_empty()
00043 {
00044 return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()), 127 - 105, 127 - 104);
00045 }
00046
00047 mu2e::DetectorFragment::adc_t mu2e::DebugFragmentReader::serialFIFO_full()
00048 {
00049 return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()), 127 - 106, 127 - 105);
00050 }
00051
00052 mu2e::DetectorFragment::adc_t mu2e::DebugFragmentReader::numEmptyFIFO()
00053 {
00054 return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()), 127 - 120, 127 - 112);
00055 }
00056
00057 mu2e::DetectorFragment::adc_t mu2e::DebugFragmentReader::numFilledFIFO()
00058 {
00059 return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()), 127 - 128, 127 - 120);
00060 }
00062
00064
00066
00067 std::vector<mu2e::DetectorFragment::adc_t> mu2e::DebugFragmentReader::debugData()
00068 {
00069 std::vector<adc_t> theVector;
00070
00071 for (size_t curPacketNum = 0; curPacketNum < packetCount(); curPacketNum++) {
00072 for (size_t adcIdx = 1; adcIdx < 8;
00073 adcIdx += 2) {
00074 theVector.push_back(*((adc_t const *)((dataBlockBegin() + 8 + 0) + adcIdx)));
00075 }
00076 }
00077 return theVector;
00078 }
00079
00080 std::vector<std::vector<mu2e::DetectorFragment::adc_t> > mu2e::DebugFragmentReader::debugInfo()
00081 {
00082 std::vector<std::vector<adc_t> > theVector;
00083
00084 for (size_t curPacketNum = 0; curPacketNum < packetCount(); curPacketNum++) {
00085 std::bitset<128> bitarray;
00086 fillBitArray(bitarray, dataBlockBegin() + 8 + curPacketNum * 8);
00087 for (size_t adcIdx = 0; adcIdx < 8; adcIdx += 2) {
00088 std::vector<adc_t> infoVector;
00089
00090
00091 infoVector.push_back(convertFromBinary(bitarray, 127 - adcIdx * 16 - 11, 127 - adcIdx * 16 - 0));
00092
00093
00094 infoVector.push_back(convertFromBinary(bitarray, 127 - adcIdx * 16 - 13, 127 - adcIdx * 16 - 12));
00095
00096
00097 infoVector.push_back(convertFromBinary(bitarray, 127 - adcIdx * 16 - 14, 127 - adcIdx * 16 - 13));
00098
00099 theVector.push_back(infoVector);
00100 }
00101 }
00102 return theVector;
00103 }
00104
00105
00106
00107
00108
00109 void mu2e::DebugFragmentReader::printAll()
00110 {
00111 std::cout << "\t\t"
00112 << "Binary Representation: ";
00113 printBitArray(bitArray(dataBlockBegin() + 8));
00114
00115 std::cout << "\t\t"
00116 << "Packet Type: " << (int)packetType() << std::endl;
00117 std::cout << "\t\t"
00118 << "Packet Count: " << (int)packetCount() << std::endl;
00119 std::cout << "\t\t"
00120 << "Serial FIFO Empty: " << (int)serialFIFO_empty() << std::endl;
00121 std::cout << "\t\t"
00122 << "Serial FIFO Full: " << (int)serialFIFO_full() << std::endl;
00123 std::cout << "\t\t"
00124 << "# Empty FIFO Entries: " << (int)numEmptyFIFO() << std::endl;
00125 std::cout << "\t\t"
00126 << "# Filled FIFO Entries: " << (int)numFilledFIFO() << std::endl;
00127
00128 std::cout << "\t\t"
00129 << "Debug Data: {[";
00130 std::vector<mu2e::DetectorFragment::adc_t> ADCarray = debugData();
00131 for (size_t i = 0; i < ADCarray.size(); i++) {
00132 std::cout << (int)ADCarray[i];
00133 if (i < ADCarray.size() - 1) {
00134 std::cout << ",";
00135 }
00136 }
00137 std::cout << "]}" << std::endl;
00138
00139 std::cout << "\t\t"
00140 << "Debug Info: {[";
00141 std::vector<std::vector<mu2e::DetectorFragment::adc_t> > InfoArray = debugInfo();
00142 for (size_t i = 0; i < InfoArray.size(); i++) {
00143 std::cout << "{" << (int)InfoArray[i][0] << "," << (int)InfoArray[i][1] << "," << (int)InfoArray[i][2] << "}";
00144 if (i < InfoArray.size() - 1) {
00145 std::cout << ",";
00146 }
00147 }
00148 std::cout << "]}" << std::endl;
00149 }
00150
00151 #endif