1 #ifndef mu2e_artdaq_core_Overlays_DebugFragmentReader_hh
2 #define mu2e_artdaq_core_Overlays_DebugFragmentReader_hh
4 #include "artdaq-core/Data/Fragment.hh"
5 #include "cetlib_except/exception.h"
7 #include "mu2e-artdaq-core/Overlays/DetectorFragment.hh"
15 class DebugFragmentReader;
24 mu2e::DetectorFragment::adc_t serialFIFO_empty();
25 mu2e::DetectorFragment::adc_t serialFIFO_full();
26 mu2e::DetectorFragment::adc_t numEmptyFIFO();
27 mu2e::DetectorFragment::adc_t numFilledFIFO();
28 std::vector<mu2e::DetectorFragment::adc_t> debugData();
29 std::vector<std::vector<mu2e::DetectorFragment::adc_t> > debugInfo();
33 mu2e::DebugFragmentReader::DebugFragmentReader(artdaq::Fragment
const &f) :
DetectorFragment(f) {}
35 mu2e::DebugFragmentReader::~DebugFragmentReader() {}
40 mu2e::DetectorFragment::adc_t mu2e::DebugFragmentReader::serialFIFO_empty() {
41 return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()), 127 - 105, 127 - 104);
44 mu2e::DetectorFragment::adc_t mu2e::DebugFragmentReader::serialFIFO_full() {
45 return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()), 127 - 106, 127 - 105);
48 mu2e::DetectorFragment::adc_t mu2e::DebugFragmentReader::numEmptyFIFO() {
49 return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()), 127 - 120, 127 - 112);
52 mu2e::DetectorFragment::adc_t mu2e::DebugFragmentReader::numFilledFIFO() {
53 return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()), 127 - 128, 127 - 120);
61 std::vector<mu2e::DetectorFragment::adc_t> mu2e::DebugFragmentReader::debugData() {
62 std::vector<adc_t> theVector;
64 for (
size_t curPacketNum = 0; curPacketNum < packetCount(); curPacketNum++) {
65 for (
size_t adcIdx = 1; adcIdx < 8;
67 theVector.push_back(*((adc_t
const *)((dataBlockBegin() + 8 + 0) + adcIdx)));
73 std::vector<std::vector<mu2e::DetectorFragment::adc_t> > mu2e::DebugFragmentReader::debugInfo() {
74 std::vector<std::vector<adc_t> > theVector;
76 for (
size_t curPacketNum = 0; curPacketNum < packetCount(); curPacketNum++) {
77 std::bitset<128> bitarray;
78 fillBitArray(bitarray, dataBlockBegin() + 8 + curPacketNum * 8);
79 for (
size_t adcIdx = 0; adcIdx < 8; adcIdx += 2) {
80 std::vector<adc_t> infoVector;
83 infoVector.push_back(convertFromBinary(bitarray, 127 - adcIdx * 16 - 11, 127 - adcIdx * 16 - 0));
86 infoVector.push_back(convertFromBinary(bitarray, 127 - adcIdx * 16 - 13, 127 - adcIdx * 16 - 12));
89 infoVector.push_back(convertFromBinary(bitarray, 127 - adcIdx * 16 - 14, 127 - adcIdx * 16 - 13));
91 theVector.push_back(infoVector);
101 void mu2e::DebugFragmentReader::printAll() {
103 <<
"Binary Representation: ";
104 printBitArray(bitArray(dataBlockBegin() + 8));
107 <<
"Packet Type: " << (int)packetType() << std::endl;
109 <<
"Packet Count: " << (int)packetCount() << std::endl;
111 <<
"Serial FIFO Empty: " << (int)serialFIFO_empty() << std::endl;
113 <<
"Serial FIFO Full: " << (int)serialFIFO_full() << std::endl;
115 <<
"# Empty FIFO Entries: " << (int)numEmptyFIFO() << std::endl;
117 <<
"# Filled FIFO Entries: " << (int)numFilledFIFO() << std::endl;
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) {
128 std::cout <<
"]}" << std::endl;
132 std::vector<std::vector<mu2e::DetectorFragment::adc_t> > InfoArray = debugInfo();
133 for (
size_t i = 0; i < InfoArray.size(); i++) {
134 std::cout <<
"{" << (int)InfoArray[i][0] <<
"," << (
int)InfoArray[i][1] << "," << (
int)InfoArray[i][2] << "}";
135 if (i < InfoArray.size() - 1) {
139 std::cout <<
"]}" << std::endl;