mu2e_artdaq_core  v1_02_01a
 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/exception.h"
6 
7 #include "mu2e-artdaq-core/Overlays/DetectorFragment.hh"
8 
9 #include <iostream>
10 #include <ostream>
11 #include <vector>
12 #include <bitset>
13 
14 namespace mu2e {
15  class CosmicVetoFragmentReader;
16 }
17 
19 
20  public:
21 
22  CosmicVetoFragmentReader(artdaq::Fragment const & f);
24 
25  // Calorimeter-specific methods:
26  mu2e::DetectorFragment::adc_t sipmID();
27  mu2e::DetectorFragment::adc_t time();
28  mu2e::DetectorFragment::adc_t numSamples();
29  std::vector<mu2e::DetectorFragment::adc_t> cosmicADC();
30  void printAll();
31 
32 };
33 
34 mu2e::CosmicVetoFragmentReader::CosmicVetoFragmentReader(artdaq::Fragment const & f ) :
35  DetectorFragment(f) {
36 }
37 
38 mu2e::CosmicVetoFragmentReader::~CosmicVetoFragmentReader() {
39 }
40 
41 mu2e::DetectorFragment::adc_t mu2e::CosmicVetoFragmentReader::sipmID() {
42  // The calorimeter data packets begin 8*16=128 bits after the beginning of the fragment data
43  // Bits 0 to 15
44  return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()+8),127-16,127-0);
45 }
46 
47 mu2e::DetectorFragment::adc_t mu2e::CosmicVetoFragmentReader::time() {
48  return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()+8),127-32,127-16);
49 }
50 
51 mu2e::DetectorFragment::adc_t mu2e::CosmicVetoFragmentReader::numSamples() {
52  return mu2e::DetectorFragment::convertFromBinary(bitArray(dataBlockBegin()+8),127-48,127-32);
53 }
54 
55 std::vector<mu2e::DetectorFragment::adc_t> mu2e::CosmicVetoFragmentReader::cosmicADC() {
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  std::cout << "\t\t" << "SiPM ID: " << (int)sipmID() << std::endl;
66  std::cout << "\t\t" << "Time: " << (int)time() << std::endl;
67  std::cout << "\t\t" << "Num Samples: " << (int)numSamples() << std::endl;
68  std::cout << "\t\t" << "ADC: {[";
69  std::vector<mu2e::DetectorFragment::adc_t> ADCarray = cosmicADC();
70  for(size_t i=0; i<ADCarray.size(); i++) {
71  std::cout << (int)ADCarray[i];
72  if(i<ADCarray.size()-1) {
73  std::cout << ",";
74  }
75  }
76  std::cout << "]}" << std::endl;
77 }
78 
79 #endif /* mu2e_artdaq_core_Overlays_CosmicVetoFragmentReader_hh */