00001 #ifndef mu2e_artdaq_core_Overlays_TrackerFragmentReader_hh
00002 #define mu2e_artdaq_core_Overlays_TrackerFragmentReader_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 TrackerFragmentReader;
00016 }
00017
00018 class mu2e::TrackerFragmentReader: public mu2e::DetectorFragment {
00019
00020 public:
00021
00022 TrackerFragmentReader(artdaq::Fragment const & f);
00023 ~TrackerFragmentReader();
00024
00025
00026 mu2e::DetectorFragment::adc_t strawIndex();
00027 mu2e::DetectorFragment::adc_t firstTDC();
00028 mu2e::DetectorFragment::adc_t secondTDC();
00029 std::vector<mu2e::DetectorFragment::adc_t> trackerADC();
00030 void printAll();
00031
00032 };
00033
00034 mu2e::TrackerFragmentReader::TrackerFragmentReader(artdaq::Fragment const & f ) :
00035 DetectorFragment(f) {
00036 }
00037
00038 mu2e::TrackerFragmentReader::~TrackerFragmentReader() {
00039 }
00040
00041 mu2e::DetectorFragment::adc_t mu2e::TrackerFragmentReader::strawIndex() {
00042
00043 return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()+8),127-8*2,127-8*0);
00044 }
00045
00046 mu2e::DetectorFragment::adc_t mu2e::TrackerFragmentReader::firstTDC() {
00047 return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()+8),127-8*4,127-8*2);
00048 }
00049
00050 mu2e::DetectorFragment::adc_t mu2e::TrackerFragmentReader::secondTDC() {
00051 return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()+8),127-8*6,127-8*4);
00052 }
00053
00054 std::vector<mu2e::DetectorFragment::adc_t> mu2e::TrackerFragmentReader::trackerADC() {
00055
00056 std::vector<adc_t> theVector;
00057 std::bitset<128> bitarray;
00058 fillBitArray(bitarray,dataBlockBegin()+8);
00059
00060 for(int i=0; i<8; i++) {
00061 theVector.push_back(convertFromBinary(bitarray,127-8*6-10*(1+i),127-8*6-10*(0+i)));
00062 }
00063
00064 return theVector;
00065 }
00066
00067 void mu2e::TrackerFragmentReader::printAll() {
00068 std::cout << "\t\t" << "Straw Index: " << (int)strawIndex() << std::endl;
00069 std::cout << "\t\t" << "First TDC: " << (int)firstTDC() << std::endl;
00070 std::cout << "\t\t" << "Second TDC: " << (int)secondTDC() << std::endl;
00071 std::cout << "\t\t" << "ADC: {[";
00072 std::vector<mu2e::DetectorFragment::adc_t> ADCarray = trackerADC();
00073 for(int i=0; i<8; i++) {
00074 std::cout << (int)ADCarray[i];
00075 if(i<7) {
00076 std::cout << ",";
00077 }
00078 }
00079 std::cout << "]}" << std::endl;
00080 }
00081
00082 #endif