ATLAS Offline Software
Loading...
Searching...
No Matches
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
18
19
20
21#ifndef LARCALIBTRIGGERACCUMULATOR
22#define LARCALIBTRIGGERACCUMULATOR
23
24
25#include <vector>
26#include "stdint.h"
27#include <limits>
28#include <cstddef>
29
31
32private:
33
35 std::vector<uint64_t> m_sampleSum;
36
38 std::vector<uint64_t> m_sample2Sum;
39
41 uint32_t m_nTrigger;
42
43
44 public:
45
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
96template<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) {
108 if (m_sample2Sum[i]>=std::numeric_limits<uint64_t>::max()-sample2Sum[i]) {
109 //ERROR: Numeric overflow!
110 //Roll back changes:
111 for (size_t j=0;j<i;++j) {
112 m_sampleSum[j]-=sampleSum[j];
114 }
115 return NumericOverflow;
116 }
117 m_sampleSum[i]+=sampleSum[i];
119 }
120 m_nTrigger+=nTrigger;
121
122 return NoError;
123}
124
125#endif
uint32_t nTriggers() const
return the number of triggers
std::vector< float > mean() const
Calculates and returns the Mean value of each ADC sample.
const std::vector< uint64_t > & sample2Sum() const
return a reference to a stl vector containing the sum of the squares of the sample
std::vector< float > RMS() const
Calculates and returns the RMS value of each ADC sample.
std::vector< uint64_t > m_sample2Sum
sum of squares of samples
std::vector< uint64_t > m_sampleSum
sum of samples
uint32_t m_nTrigger
number of triggers
size_t nsamples() const
return number of samples
const std::vector< uint64_t > & sampleSum() const
return a reference to a stl vector containing the sample-sums
ERRTYPE add(const std::vector< short > &digits)
accumulated individual set of digits.