ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
LArCalorimeter
LArRawEvent
src
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
5
#include "
LArRawEvent/LArAccumulatedCalibDigit.h
"
6
#include <cmath>
7
#include <iostream>
8
#include <limits>
9
11
LArAccumulatedCalibDigit::~LArAccumulatedCalibDigit
()
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) {
61
mean
=((double)
m_sampleSum
[i])/((
double
)
m_nTriggers
);
62
rms2=((double)
m_sample2Sum
[i])/((
double
)
m_nTriggers
)-
mean
*
mean
;
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
) {
74
m_sampleSum
=
sampleSum
;
75
}
76
77
void
LArAccumulatedCalibDigit::setSample2Sum
(
const
std::vector < uint64_t >&
sample2Sum
) {
78
m_sample2Sum
=
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];
95
if
(
m_sampleSum
[i]>=std::numeric_limits<uint64_t>::max()-samples[i]) {
96
return
false
;
//ERROR, overflow!
97
}
98
if
(
m_sample2Sum
[i]>=std::numeric_limits<uint64_t>::max()-s2) {
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++) {
128
if
(
m_sampleSum
[is]>=std::numeric_limits<uint64_t>::max()-
sampleSum
[is]) {
129
return
false
;
//ERROR, overflow!
130
}
131
if
(
m_sample2Sum
[is]>=std::numeric_limits<uint64_t>::max()-
sample2Sum
[is]) {
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
LArAccumulatedCalibDigit.h
LArAccumulatedCalibDigit::m_sampleSum
std::vector< uint64_t > m_sampleSum
vector of sample sums
Definition
LArAccumulatedCalibDigit.h:53
LArAccumulatedCalibDigit::setSample2Sum
void setSample2Sum(const std::vector< uint64_t > &sample2Sum)
Set the sample2Sum.
Definition
LArAccumulatedCalibDigit.cxx:77
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::~LArAccumulatedCalibDigit
virtual ~LArAccumulatedCalibDigit()
Destructor.
LArAccumulatedCalibDigit::m_sample2Sum
std::vector< uint64_t > m_sample2Sum
vector of sample square sums
Definition
LArAccumulatedCalibDigit.h:56
LArAccumulatedCalibDigit::sampleSum
const std::vector< uint64_t > & sampleSum() const
return a reference to a stl vector containing the sample-sums
Definition
LArAccumulatedCalibDigit.h:123
LArAccumulatedCalibDigit::RMS
std::vector< float > RMS() const
Calculates and returns the RMS value of each ADC sample.
Definition
LArAccumulatedCalibDigit.cxx:50
LArAccumulatedCalibDigit::mean
std::vector< float > mean() const
Calculates and returns the Mean value of each ADC sample.
Definition
LArAccumulatedCalibDigit.cxx:36
LArAccumulatedCalibDigit::setSampleSum
void setSampleSum(const std::vector< uint64_t > &sampleSum)
Set the sampleSum.
Definition
LArAccumulatedCalibDigit.cxx:73
LArAccumulatedCalibDigit::m_nTriggers
uint32_t m_nTriggers
number of samples
Definition
LArAccumulatedCalibDigit.h:62
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
LArAccumulatedCalibDigit::setAddDigit
bool setAddDigit(const std::vector< short > &samples)
Sum up with another (individual) LArCalibDigit.
Definition
LArAccumulatedCalibDigit.cxx:82
Generated on
for ATLAS Offline Software by
1.17.0