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