00001 #ifndef mu2e_artdaq_core_Overlays_CosmicVetoFragmentReader_hh
00002 #define mu2e_artdaq_core_Overlays_CosmicVetoFragmentReader_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 CosmicVetoFragmentReader;
00016 }
00017
00018 class mu2e::CosmicVetoFragmentReader : public mu2e::DetectorFragment {
00019 public:
00020 CosmicVetoFragmentReader(artdaq::Fragment const &f);
00021 ~CosmicVetoFragmentReader();
00022
00023
00024 mu2e::DetectorFragment::adc_t sipmID();
00025 mu2e::DetectorFragment::adc_t time();
00026 mu2e::DetectorFragment::adc_t numSamples();
00027 std::vector<mu2e::DetectorFragment::adc_t> cosmicADC();
00028 void printAll();
00029 };
00030
00031 mu2e::CosmicVetoFragmentReader::CosmicVetoFragmentReader(artdaq::Fragment const &f) : DetectorFragment(f) {}
00032
00033 mu2e::CosmicVetoFragmentReader::~CosmicVetoFragmentReader() {}
00034
00035 mu2e::DetectorFragment::adc_t mu2e::CosmicVetoFragmentReader::sipmID() {
00036
00037
00038 return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin() + 8), 127 - 16, 127 - 0);
00039 }
00040
00041 mu2e::DetectorFragment::adc_t mu2e::CosmicVetoFragmentReader::time() {
00042 return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin() + 8), 127 - 32, 127 - 16);
00043 }
00044
00045 mu2e::DetectorFragment::adc_t mu2e::CosmicVetoFragmentReader::numSamples() {
00046 return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin() + 8), 127 - 48, 127 - 32);
00047 }
00048
00049 std::vector<mu2e::DetectorFragment::adc_t> mu2e::CosmicVetoFragmentReader::cosmicADC() {
00050 std::vector<adc_t> theVector;
00051
00052 for (size_t adcIdx = 0; adcIdx < numSamples(); adcIdx++) {
00053 theVector.push_back(*((adc_t const *)((dataBlockBegin() + 8 + 3) + adcIdx)));
00054 }
00055 return theVector;
00056 }
00057
00058 void mu2e::CosmicVetoFragmentReader::printAll() {
00059 std::cout << "\t\t"
00060 << "SiPM ID: " << (int)sipmID() << std::endl;
00061 std::cout << "\t\t"
00062 << "Time: " << (int)time() << std::endl;
00063 std::cout << "\t\t"
00064 << "Num Samples: " << (int)numSamples() << std::endl;
00065 std::cout << "\t\t"
00066 << "ADC: {[";
00067 std::vector<mu2e::DetectorFragment::adc_t> ADCarray = cosmicADC();
00068 for (size_t i = 0; i < ADCarray.size(); i++) {
00069 std::cout << (int)ADCarray[i];
00070 if (i < ADCarray.size() - 1) {
00071 std::cout << ",";
00072 }
00073 }
00074 std::cout << "]}" << std::endl;
00075 }
00076
00077 #endif