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 public:
00020 DebugFragmentReader(artdaq::Fragment const &f);
00021 ~DebugFragmentReader();
00022
00023
00024 mu2e::DetectorFragment::adc_t serialFIFO_empty();
00025 mu2e::DetectorFragment::adc_t serialFIFO_full();
00026 mu2e::DetectorFragment::adc_t numEmptyFIFO();
00027 mu2e::DetectorFragment::adc_t numFilledFIFO();
00028 std::vector<mu2e::DetectorFragment::adc_t> debugData();
00029 std::vector<std::vector<mu2e::DetectorFragment::adc_t> > debugInfo();
00030 void printAll();
00031 };
00032
00033 mu2e::DebugFragmentReader::DebugFragmentReader(artdaq::Fragment const &f) : DetectorFragment(f) {}
00034
00035 mu2e::DebugFragmentReader::~DebugFragmentReader() {}
00036
00038
00040 mu2e::DetectorFragment::adc_t mu2e::DebugFragmentReader::serialFIFO_empty() {
00041 return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()), 127 - 105, 127 - 104);
00042 }
00043
00044 mu2e::DetectorFragment::adc_t mu2e::DebugFragmentReader::serialFIFO_full() {
00045 return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()), 127 - 106, 127 - 105);
00046 }
00047
00048 mu2e::DetectorFragment::adc_t mu2e::DebugFragmentReader::numEmptyFIFO() {
00049 return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()), 127 - 120, 127 - 112);
00050 }
00051
00052 mu2e::DetectorFragment::adc_t mu2e::DebugFragmentReader::numFilledFIFO() {
00053 return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()), 127 - 128, 127 - 120);
00054 }
00056
00058
00060
00061 std::vector<mu2e::DetectorFragment::adc_t> mu2e::DebugFragmentReader::debugData() {
00062 std::vector<adc_t> theVector;
00063
00064 for (size_t curPacketNum = 0; curPacketNum < packetCount(); curPacketNum++) {
00065 for (size_t adcIdx = 1; adcIdx < 8;
00066 adcIdx += 2) {
00067 theVector.push_back(*((adc_t const *)((dataBlockBegin() + 8 + 0) + adcIdx)));
00068 }
00069 }
00070 return theVector;
00071 }
00072
00073 std::vector<std::vector<mu2e::DetectorFragment::adc_t> > mu2e::DebugFragmentReader::debugInfo() {
00074 std::vector<std::vector<adc_t> > theVector;
00075
00076 for (size_t curPacketNum = 0; curPacketNum < packetCount(); curPacketNum++) {
00077 std::bitset<128> bitarray;
00078 fillBitArray(bitarray, dataBlockBegin() + 8 + curPacketNum * 8);
00079 for (size_t adcIdx = 0; adcIdx < 8; adcIdx += 2) {
00080 std::vector<adc_t> infoVector;
00081
00082
00083 infoVector.push_back(convertFromBinary(bitarray, 127 - adcIdx * 16 - 11, 127 - adcIdx * 16 - 0));
00084
00085
00086 infoVector.push_back(convertFromBinary(bitarray, 127 - adcIdx * 16 - 13, 127 - adcIdx * 16 - 12));
00087
00088
00089 infoVector.push_back(convertFromBinary(bitarray, 127 - adcIdx * 16 - 14, 127 - adcIdx * 16 - 13));
00090
00091 theVector.push_back(infoVector);
00092 }
00093 }
00094 return theVector;
00095 }
00096
00097
00098
00099
00100
00101 void mu2e::DebugFragmentReader::printAll() {
00102 std::cout << "\t\t"
00103 << "Binary Representation: ";
00104 printBitArray(bitArray(dataBlockBegin() + 8));
00105
00106 std::cout << "\t\t"
00107 << "Packet Type: " << (int)packetType() << std::endl;
00108 std::cout << "\t\t"
00109 << "Packet Count: " << (int)packetCount() << std::endl;
00110 std::cout << "\t\t"
00111 << "Serial FIFO Empty: " << (int)serialFIFO_empty() << std::endl;
00112 std::cout << "\t\t"
00113 << "Serial FIFO Full: " << (int)serialFIFO_full() << std::endl;
00114 std::cout << "\t\t"
00115 << "# Empty FIFO Entries: " << (int)numEmptyFIFO() << std::endl;
00116 std::cout << "\t\t"
00117 << "# Filled FIFO Entries: " << (int)numFilledFIFO() << std::endl;
00118
00119 std::cout << "\t\t"
00120 << "Debug Data: {[";
00121 std::vector<mu2e::DetectorFragment::adc_t> ADCarray = debugData();
00122 for (size_t i = 0; i < ADCarray.size(); i++) {
00123 std::cout << (int)ADCarray[i];
00124 if (i < ADCarray.size() - 1) {
00125 std::cout << ",";
00126 }
00127 }
00128 std::cout << "]}" << std::endl;
00129
00130 std::cout << "\t\t"
00131 << "Debug Info: {[";
00132 std::vector<std::vector<mu2e::DetectorFragment::adc_t> > InfoArray = debugInfo();
00133 for (size_t i = 0; i < InfoArray.size(); i++) {
00134 std::cout << "{" << (int)InfoArray[i][0] << "," << (int)InfoArray[i][1] << "," << (int)InfoArray[i][2] << "}";
00135 if (i < InfoArray.size() - 1) {
00136 std::cout << ",";
00137 }
00138 }
00139 std::cout << "]}" << std::endl;
00140 }
00141
00142 #endif