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/exception.h"
00006
00007 #include "mu2e-artdaq-core/Overlays/DetectorFragment.hh"
00008
00009 #include <iostream>
00010 #include <ostream>
00011 #include <vector>
00012 #include <bitset>
00013
00014 namespace mu2e {
00015 class DebugFragmentReader;
00016 }
00017
00018 class mu2e::DebugFragmentReader: public mu2e::DetectorFragment {
00019
00020 public:
00021
00022 DebugFragmentReader(artdaq::Fragment const & f);
00023 ~DebugFragmentReader();
00024
00025
00026 mu2e::DetectorFragment::adc_t serialFIFO_empty();
00027 mu2e::DetectorFragment::adc_t serialFIFO_full();
00028 mu2e::DetectorFragment::adc_t numEmptyFIFO();
00029 mu2e::DetectorFragment::adc_t numFilledFIFO();
00030 std::vector<mu2e::DetectorFragment::adc_t> debugData();
00031 std::vector< std::vector<mu2e::DetectorFragment::adc_t> > debugInfo();
00032 void printAll();
00033
00034 };
00035
00036 mu2e::DebugFragmentReader::DebugFragmentReader(artdaq::Fragment const & f ) :
00037 DetectorFragment(f) {
00038 }
00039
00040 mu2e::DebugFragmentReader::~DebugFragmentReader() {
00041 }
00042
00043
00045
00047 mu2e::DetectorFragment::adc_t mu2e::DebugFragmentReader::serialFIFO_empty() {
00048 return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()),127-105,127-104);
00049 }
00050
00051 mu2e::DetectorFragment::adc_t mu2e::DebugFragmentReader::serialFIFO_full() {
00052 return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()),127-106,127-105);
00053 }
00054
00055 mu2e::DetectorFragment::adc_t mu2e::DebugFragmentReader::numEmptyFIFO() {
00056 return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()),127-120,127-112);
00057 }
00058
00059 mu2e::DetectorFragment::adc_t mu2e::DebugFragmentReader::numFilledFIFO() {
00060 return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()),127-128,127-120);
00061 }
00063
00064
00065
00067
00069
00070 std::vector<mu2e::DetectorFragment::adc_t> mu2e::DebugFragmentReader::debugData() {
00071 std::vector<adc_t> theVector;
00072
00073 for(size_t curPacketNum=0; curPacketNum<packetCount(); curPacketNum++) {
00074 for(size_t adcIdx=1; adcIdx<8; adcIdx+=2) {
00075 theVector.push_back( *((adc_t const *)( (dataBlockBegin()+8+0) + adcIdx )) );
00076 }
00077 }
00078 return theVector;
00079 }
00080
00081 std::vector< std::vector<mu2e::DetectorFragment::adc_t> > mu2e::DebugFragmentReader::debugInfo() {
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 std::cout << "\t\t" << "Binary Representation: ";
00111 printBitArray(bitArray(dataBlockBegin()+8));
00112
00113 std::cout << "\t\t" << "Packet Type: " << (int)packetType() << std::endl;
00114 std::cout << "\t\t" << "Packet Count: " << (int)packetCount() << std::endl;
00115 std::cout << "\t\t" << "Serial FIFO Empty: " << (int)serialFIFO_empty() << std::endl;
00116 std::cout << "\t\t" << "Serial FIFO Full: " << (int)serialFIFO_full() << std::endl;
00117 std::cout << "\t\t" << "# Empty FIFO Entries: " << (int)numEmptyFIFO() << std::endl;
00118 std::cout << "\t\t" << "# Filled FIFO Entries: " << (int)numFilledFIFO() << std::endl;
00119
00120 std::cout << "\t\t" << "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" << "Debug Info: {[";
00131 std::vector< std::vector<mu2e::DetectorFragment::adc_t> > InfoArray = debugInfo();
00132 for(size_t i=0; i<InfoArray.size(); i++) {
00133 std::cout << "{" << (int)InfoArray[i][0] << ","
00134 << (int)InfoArray[i][1] << ","
00135 << (int)InfoArray[i][2] << "}";
00136 if(i<InfoArray.size()-1) {
00137 std::cout << ",";
00138 }
00139 }
00140 std::cout << "]}" << std::endl;
00141 }
00142
00143 #endif