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