ATLAS Offline Software
LArCalibTriggerAccumulator.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // Dear emacs, this is -*-c++-*-
6 
7 
21 #ifndef LARCALIBTRIGGERACCUMULATOR
22 #define LARCALIBTRIGGERACCUMULATOR
23 
24 
25 #include <vector>
26 #include "stdint.h"
27 #include <limits>
28 #include <cstddef>
29 
31 
32 private:
33 
35  std::vector<uint64_t> m_sampleSum;
36 
38  std::vector<uint64_t> m_sample2Sum;
39 
42 
43 
44  public:
45 
46  enum ERRTYPE {
50  };
51 
52 
54 
55  LArCalibTriggerAccumulator(const std::vector<uint64_t>& sampleSum,
56  const std::vector<uint64_t>& sample2Sum, uint32_t m_nTrigger);
57 
58 
60  uint32_t nTriggers() const {return m_nTrigger;}
61 
63  size_t nsamples() const {return m_sampleSum.size();}
64 
66  const std::vector < uint64_t > & sampleSum() const { return m_sampleSum; }
67 
69  const std::vector < uint64_t > & sample2Sum() const { return m_sample2Sum; }
70 
72  ERRTYPE add(const std::vector<short>& digits);
73 
74 
76  template<class INTTYPE>
77  ERRTYPE add(const std::vector<INTTYPE>& sampleSum,
78  const std::vector<INTTYPE>& sample2Sum, const uint32_t nTrigger);
79 
81  std::vector<float> mean() const;
82 
84  std::vector<float> RMS() const;
85 
86 
88  double mean(const size_t i) const;
89 
91  double RMS(const size_t i) const;
92 
93 };
94 
95 
96 template<class INTTYPE>
98  const std::vector<INTTYPE>& sample2Sum, const uint32_t nTrigger) {
99  const size_t nS=sampleSum.size();
100  if (m_sampleSum.size()==0 && m_sample2Sum.size()==0) {
101  m_sampleSum.resize(nS);
102  m_sample2Sum.resize(nS);
103  }
104  else if (m_sampleSum.size()!=nS || m_sample2Sum.size()!=nS || sample2Sum.size()!=nS)
105  return WrongNSamples; //ERROR: Inconsistent number of samples
106 
107  for (size_t i=0;i<nS;++i) {
109  //ERROR: Numeric overflow!
110  //Roll back changes:
111  for (size_t j=0;j<i;++j) {
112  m_sampleSum[j]-=sampleSum[j];
113  m_sample2Sum[j]-=sample2Sum[j];
114  }
115  return NumericOverflow;
116  }
119  }
120  m_nTrigger+=nTrigger;
121 
122  return NoError;
123 }
124 
125 #endif
max
#define max(a, b)
Definition: cfImp.cxx:41
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
LArCalibTriggerAccumulator::add
ERRTYPE add(const std::vector< short > &digits)
accumulated individual set of digits.
Definition: LArCalibTriggerAccumulator.cxx:17
LArCalibTriggerAccumulator::LArCalibTriggerAccumulator
LArCalibTriggerAccumulator()
Definition: LArCalibTriggerAccumulator.cxx:8
LArCalibTriggerAccumulator::nsamples
size_t nsamples() const
return number of samples
Definition: LArCalibTriggerAccumulator.h:63
LArCalibTriggerAccumulator
Helper class to accumulate calibration triggers.
Definition: LArCalibTriggerAccumulator.h:30
lumiFormat.i
int i
Definition: lumiFormat.py:92
LArCalibTriggerAccumulator::m_sample2Sum
std::vector< uint64_t > m_sample2Sum
sum of squares of samples
Definition: LArCalibTriggerAccumulator.h:38
LArCalibTriggerAccumulator::NumericOverflow
@ NumericOverflow
Definition: LArCalibTriggerAccumulator.h:49
LArCalibTriggerAccumulator::mean
std::vector< float > mean() const
Calculates and returns the Mean value of each ADC sample.
Definition: LArCalibTriggerAccumulator.cxx:68
LArCalibTriggerAccumulator::nTriggers
uint32_t nTriggers() const
return the number of triggers
Definition: LArCalibTriggerAccumulator.h:60
LArCalibTriggerAccumulator::m_sampleSum
std::vector< uint64_t > m_sampleSum
sum of samples
Definition: LArCalibTriggerAccumulator.h:35
LArCalibTriggerAccumulator::sample2Sum
const std::vector< uint64_t > & sample2Sum() const
return a reference to a stl vector containing the sum of the squares of the sample
Definition: LArCalibTriggerAccumulator.h:69
LArCalibTriggerAccumulator::sampleSum
const std::vector< uint64_t > & sampleSum() const
return a reference to a stl vector containing the sample-sums
Definition: LArCalibTriggerAccumulator.h:66
LArCalibTriggerAccumulator::m_nTrigger
uint32_t m_nTrigger
number of triggers
Definition: LArCalibTriggerAccumulator.h:41
LArCalibTriggerAccumulator::NoError
@ NoError
Definition: LArCalibTriggerAccumulator.h:47
LArCalibTriggerAccumulator::ERRTYPE
ERRTYPE
Definition: LArCalibTriggerAccumulator.h:46
LArCalibTriggerAccumulator::WrongNSamples
@ WrongNSamples
Definition: LArCalibTriggerAccumulator.h:48
LArCalibTriggerAccumulator::RMS
std::vector< float > RMS() const
Calculates and returns the RMS value of each ADC sample.
Definition: LArCalibTriggerAccumulator.cxx:82