mu2e_artdaq_core  v1_02_14
 All Classes Functions
CosmicVetoFragmentReader.hh
1 #ifndef mu2e_artdaq_core_Overlays_CosmicVetoFragmentReader_hh
2 #define mu2e_artdaq_core_Overlays_CosmicVetoFragmentReader_hh
3 
4 #include "artdaq-core/Data/Fragment.hh"
5 #include "cetlib_except/exception.h"
6 
7 #include "mu2e-artdaq-core/Overlays/DetectorFragment.hh"
8 
9 #include <bitset>
10 #include <iostream>
11 #include <ostream>
12 #include <vector>
13 
14 namespace mu2e {
15 class CosmicVetoFragmentReader;
16 }
17 
19 {
20 public:
21  CosmicVetoFragmentReader(artdaq::Fragment const &f);
23 
24  // Calorimeter-specific methods:
25  mu2e::DetectorFragment::adc_t sipmID();
26  mu2e::DetectorFragment::adc_t time();
27  mu2e::DetectorFragment::adc_t numSamples();
28  std::vector<mu2e::DetectorFragment::adc_t> cosmicADC();
29  void printAll();
30 };
31 
32 mu2e::CosmicVetoFragmentReader::CosmicVetoFragmentReader(artdaq::Fragment const &f)
33  : DetectorFragment(f) {}
34 
35 mu2e::CosmicVetoFragmentReader::~CosmicVetoFragmentReader() {}
36 
37 mu2e::DetectorFragment::adc_t mu2e::CosmicVetoFragmentReader::sipmID()
38 {
39  // The calorimeter data packets begin 8*16=128 bits after the beginning of the fragment data
40  // Bits 0 to 15
41  return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin() + 8), 127 - 16, 127 - 0);
42 }
43 
44 mu2e::DetectorFragment::adc_t mu2e::CosmicVetoFragmentReader::time()
45 {
46  return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin() + 8), 127 - 32, 127 - 16);
47 }
48 
49 mu2e::DetectorFragment::adc_t mu2e::CosmicVetoFragmentReader::numSamples()
50 {
51  return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin() + 8), 127 - 48, 127 - 32);
52 }
53 
54 std::vector<mu2e::DetectorFragment::adc_t> mu2e::CosmicVetoFragmentReader::cosmicADC()
55 {
56  std::vector<adc_t> theVector;
57  // Start after the 3rd 16-bit block of the first CRV DTC data packet:
58  for (size_t adcIdx = 0; adcIdx < numSamples(); adcIdx++) {
59  theVector.push_back(*((adc_t const *)((dataBlockBegin() + 8 + 3) + adcIdx)));
60  }
61  return theVector;
62 }
63 
64 void mu2e::CosmicVetoFragmentReader::printAll()
65 {
66  std::cout << "\t\t"
67  << "SiPM ID: " << (int)sipmID() << std::endl;
68  std::cout << "\t\t"
69  << "Time: " << (int)time() << std::endl;
70  std::cout << "\t\t"
71  << "Num Samples: " << (int)numSamples() << std::endl;
72  std::cout << "\t\t"
73  << "ADC: {[";
74  std::vector<mu2e::DetectorFragment::adc_t> ADCarray = cosmicADC();
75  for (size_t i = 0; i < ADCarray.size(); i++) {
76  std::cout << (int)ADCarray[i];
77  if (i < ADCarray.size() - 1) {
78  std::cout << ",";
79  }
80  }
81  std::cout << "]}" << std::endl;
82 }
83 
84 #endif /* mu2e_artdaq_core_Overlays_CosmicVetoFragmentReader_hh */