1 #ifndef mu2e_artdaq_core_Overlays_CalorimeterFragmentReader_hh
2 #define mu2e_artdaq_core_Overlays_CalorimeterFragmentReader_hh
4 #include "artdaq-core/Data/Fragment.hh"
5 #include "cetlib_except/exception.h"
7 #include "mu2e-artdaq-core/Overlays/DetectorFragment.hh"
15 class CalorimeterFragmentReader;
26 mu2e::DetectorFragment::adc_t crystalID();
27 mu2e::DetectorFragment::adc_t apdID();
28 mu2e::DetectorFragment::adc_t time();
29 mu2e::DetectorFragment::adc_t numSamples();
30 std::vector<mu2e::DetectorFragment::adc_t> calorimeterADC();
35 mu2e::CalorimeterFragmentReader::CalorimeterFragmentReader(artdaq::Fragment
const & f ) :
39 mu2e::CalorimeterFragmentReader::~CalorimeterFragmentReader() {
42 mu2e::DetectorFragment::adc_t mu2e::CalorimeterFragmentReader::crystalID() {
45 return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()+8),127-12,127-0);
48 mu2e::DetectorFragment::adc_t mu2e::CalorimeterFragmentReader::apdID() {
50 return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()+8),127-16,127-12);
53 mu2e::DetectorFragment::adc_t mu2e::CalorimeterFragmentReader::time() {
54 return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()+8),127-32,127-16);
57 mu2e::DetectorFragment::adc_t mu2e::CalorimeterFragmentReader::numSamples() {
58 return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()+8),127-48,127-32);
61 std::vector<mu2e::DetectorFragment::adc_t> mu2e::CalorimeterFragmentReader::calorimeterADC() {
62 std::vector<adc_t> theVector;
64 for(
size_t adcIdx=0; adcIdx<numSamples(); adcIdx++) {
65 theVector.push_back( *((adc_t
const *)( (dataBlockBegin()+8+3) + adcIdx )) );
70 void mu2e::CalorimeterFragmentReader::printAll() {
71 std::cout <<
"\t\t" <<
"Binary Representation: ";
72 printBitArray(bitArray(dataBlockBegin()+8));
73 std::cout <<
"\t\t" <<
"Crystal IDX: " << (int)crystalID() << std::endl;
74 std::cout <<
"\t\t" <<
"APD ID: " << (int)apdID() << std::endl;
75 std::cout <<
"\t\t" <<
"Time: " << (int)time() << std::endl;
76 std::cout <<
"\t\t" <<
"Num Samples: " << (int)numSamples() << std::endl;
77 std::cout <<
"\t\t" <<
"ADC: {[";
78 std::vector<mu2e::DetectorFragment::adc_t> ADCarray = calorimeterADC();
79 for(
size_t i=0; i<ADCarray.size(); i++) {
80 std::cout << (int)ADCarray[i];
81 if(i<ADCarray.size()-1) {
85 std::cout <<
"]}" << std::endl;