ATLAS Offline Software
LArAccumulatedCalibDigit.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 #include <cmath>
7 #include <iostream>
8 #include <limits>
9 
12 = default;
13 
14 
15 float LArAccumulatedCalibDigit::mean(const size_t i) const {
16 
17  if (i<m_sampleSum.size() && i<m_sample2Sum.size() && m_nTriggers>0)
18  return ((double)m_sampleSum[i])/((double)m_nTriggers);
19  else
20  return 0.0;
21 }
22 
23 float LArAccumulatedCalibDigit::RMS(const size_t i) const {
24 
25  if (i<m_sampleSum.size() && i<m_sample2Sum.size() && m_nTriggers>0) {
26  const double mean=((double)m_sampleSum[i])/((double)m_nTriggers);
27  const double rms2=((double)m_sample2Sum[i])/((double)m_nTriggers)-mean*mean;
28  if (rms2<=0.0) return 0.0; //W.L 2010-12-07 protect against FPE due to rounding error
29  return sqrt(rms2);
30  }
31  else
32  return 0.0;
33 }
34 
35 
36 std::vector<float> LArAccumulatedCalibDigit::mean() const {
37 
38  const size_t nS=m_sampleSum.size();
39  std::vector<float> mean;
40  if (m_nTriggers==0)
41  return mean;
42  else {
43  mean.resize(nS,0.0);
44  for (size_t i=0;i<nS;++i)
45  mean[i]=((double)m_sampleSum[i])/((double)m_nTriggers);
46  return mean;
47  }
48 }
49 
50 std::vector<float> LArAccumulatedCalibDigit::RMS() const {
51  std::vector<float> rms;
52  const size_t nS=m_sampleSum.size();
53  if (m_sample2Sum.size()!=nS || m_nTriggers==0)
54  return rms;// ERROR, return emtpy vector
55 
56  double mean=0;
57  double rms2=0;
58  rms.resize(nS,0.0);
59 
60  for (size_t i=0;i<nS;++i) {
63  if (rms2<=0.0) //W.L 2010-12-07 protect against FPE due to rounding error
64  rms[i]=0.0;
65  else
66  rms[i]=sqrt(rms2);
67  }
68  return rms;
69 }
70 
71 
72 
73 void LArAccumulatedCalibDigit::setSampleSum(const std::vector < uint64_t >& sampleSum) {
75 }
76 
77 void LArAccumulatedCalibDigit::setSample2Sum(const std::vector < uint64_t >& sample2Sum) {
79 }
80 
81 
82 bool LArAccumulatedCalibDigit::setAddDigit(const std::vector<short>& samples) {
83  const size_t nS=samples.size();
84  if (m_sampleSum.empty() && m_sample2Sum.empty()) {
85  m_sampleSum.resize(nS,0);
86  m_sample2Sum.resize(nS,0);
87  }
88  else
89  if (m_sampleSum.size() != nS || m_sample2Sum.size() != nS) {
90  return false; //ERROR, number of samples doesn't match!
91  }
92 
93  for(size_t i=0;i<nS;++i) {
94  const uint64_t s2=samples[i]*samples[i];
96  return false; //ERROR, overflow!
97  }
99  return false; //ERROR, overflow!
100  }
101 
102  m_sampleSum[i]+=samples[i];
103  m_sample2Sum[i]+=s2;
104  ++m_nTriggers;
105  }
106  return true;
107 }
108 
109 
110 
111 
112 bool LArAccumulatedCalibDigit::setAddSubStep(const std::vector < uint64_t >& sampleSum,
113  const std::vector < uint64_t >& sample2Sum, const uint32_t nTriggerPerStep) {
114 
115 
116  const size_t nS=sampleSum.size();
117 
118  if (m_sampleSum.empty() && m_sample2Sum.empty()) {
119  m_sampleSum.resize(nS,0);
120  m_sample2Sum.resize(nS,0);
121  }
122  else
123  if (m_sampleSum.size() != nS || m_sample2Sum.size() != nS || sample2Sum.size() != nS) {
124  return false; //ERROR, number of samples doesn't match!
125  }
126 
127  for(size_t is=0; is<nS; is++) {
129  return false; //ERROR, overflow!
130  }
132  return false; //ERROR, overflow!
133  }
134 
135  m_sampleSum[is] += sampleSum[is];
136  m_sample2Sum[is] += sample2Sum[is];
137  }
138 
139  m_nTriggers += nTriggerPerStep;
140  return true;
141 }
142 
max
#define max(a, b)
Definition: cfImp.cxx:41
LArAccumulatedCalibDigit::setAddDigit
bool setAddDigit(const std::vector< short > &samples)
Sum up with another (individual) LArCalibDigit.
Definition: LArAccumulatedCalibDigit.cxx:82
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
LArAccumulatedCalibDigit::m_sample2Sum
std::vector< uint64_t > m_sample2Sum
vector of sample square sums
Definition: LArAccumulatedCalibDigit.h:56
LArAccumulatedCalibDigit::m_sampleSum
std::vector< uint64_t > m_sampleSum
vector of sample sums
Definition: LArAccumulatedCalibDigit.h:53
LArAccumulatedCalibDigit::sampleSum
const std::vector< uint64_t > & sampleSum() const
return a reference to a stl vector containing the sample-sums
Definition: LArAccumulatedCalibDigit.h:123
lumiFormat.i
int i
Definition: lumiFormat.py:92
LArAccumulatedCalibDigit::RMS
std::vector< float > RMS() const
Calculates and returns the RMS value of each ADC sample.
Definition: LArAccumulatedCalibDigit.cxx:50
01SubmitToGrid.samples
samples
Definition: 01SubmitToGrid.py:58
LArAccumulatedCalibDigit::m_nTriggers
uint32_t m_nTriggers
number of samples
Definition: LArAccumulatedCalibDigit.h:62
xAOD::uint64_t
uint64_t
Definition: EventInfo_v1.cxx:123
xAOD::double
double
Definition: CompositeParticle_v1.cxx:159
LArAccumulatedCalibDigit.h
LArAccumulatedCalibDigit::mean
std::vector< float > mean() const
Calculates and returns the Mean value of each ADC sample.
Definition: LArAccumulatedCalibDigit.cxx:36
LArAccumulatedCalibDigit::setSample2Sum
void setSample2Sum(const std::vector< uint64_t > &sample2Sum)
Set the sample2Sum.
Definition: LArAccumulatedCalibDigit.cxx:77
LArAccumulatedCalibDigit::~LArAccumulatedCalibDigit
virtual ~LArAccumulatedCalibDigit()
Destructor.
ReadCellNoiseFromCoolCompare.s2
s2
Definition: ReadCellNoiseFromCoolCompare.py:379
beamspotnt.rms
rms
Definition: bin/beamspotnt.py:1266
LArAccumulatedCalibDigit::setAddSubStep
bool setAddSubStep(const std::vector< uint64_t > &sampleSum, const std::vector< uint64_t > &sample2Sum, const uint32_t nTriggerPerStep)
Sum up with another substep.
Definition: LArAccumulatedCalibDigit.cxx:112
LArAccumulatedCalibDigit::setSampleSum
void setSampleSum(const std::vector< uint64_t > &sampleSum)
Set the sampleSum.
Definition: LArAccumulatedCalibDigit.cxx:73
LArAccumulatedCalibDigit::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: LArAccumulatedCalibDigit.h:126