ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
LArCalorimeter
LArCalibUtils
src
LArPedestalMaker.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
/********************************************************************
6
7
NAME: LArPedestalMaker.cxx
8
PACKAGE: offline/LArCalorimeter/LArCalibUtils
9
10
AUTHORS: M. AHARROUCHE
11
CREATED: Jan. 12, 2004
12
UPDATED: Mar. 10, 2004 by Remi Lafaye and later
13
14
PURPOSE: Computes the pedestal and rms for each cell
15
at each gain and records them in the TDS
16
HISTORY:
17
- Jen. 12, 2003: M. Aharrouche: creation
18
- March 1st, 2004: S. Laplace: write result into DB instead of ASCII file
19
- October 4th, 2007: M. Delmastro: removed NovaDB support
20
21
********************************************************************/
22
23
// Include files
24
#include "
LArCalibUtils/LArPedestalMaker.h
"
25
26
#include "
LArIdentifier/LArOnlineID.h
"
27
28
#include <cmath>
29
#include <unistd.h>
30
#include <vector>
31
32
33
LArPedestalMaker::LArPedestalMaker
(
const
std::string& name, ISvcLocator* pSvcLocator)
34
:
AthAlgorithm
(name, pSvcLocator),
35
m_groupingType
(
"SubDetector"
)
// SubDetector, Single, FeedThrough
36
{
37
m_nref
= 50;
38
m_rms_cut
= 5.0;
39
declareProperty
(
"KeyList"
,
m_keylist
);
40
declareProperty
(
"KeyOutput"
,
m_keyoutput
=
"LArPedestal"
);
41
declareProperty
(
"events_ref"
,
m_nref
);
42
declareProperty
(
"nsigma"
,
m_rms_cut
);
43
declareProperty
(
"which_sample"
,
m_which_sample
=-1);
44
declareProperty
(
"sample_min"
,
m_sample_min
=-1);
45
declareProperty
(
"sample_max"
,
m_sample_max
=-1);
46
declareProperty
(
"GroupingType"
,
m_groupingType
);
47
}
48
49
LArPedestalMaker::~LArPedestalMaker
()
50
=
default
;
51
52
StatusCode
LArPedestalMaker::initialize
()
53
{
54
ATH_MSG_INFO
(
">>> Initialize"
);
55
56
m_mean
.resize(1);
57
m_rms
.resize(1);
58
59
// m_fullFolderName="/lar/"+m_folderName+"/LArPedestal";
60
if
(
m_keylist
.empty())
// Not key list given
61
{
m_keylist
.emplace_back(
"HIGH"
);
62
m_keylist
.emplace_back(
"MEDIUM"
);
63
m_keylist
.emplace_back(
"LOW"
);
64
m_keylist
.emplace_back(
"FREE"
);
//For H6....
65
}
66
//m_EventCounters.resize(CaloGain::LARNGAIN,0); //Initialize Event counters, one per container
67
m_pedestal
.setGroupingType(
LArConditionsContainerBase::SingleGroup
);
68
ATH_CHECK
(
m_pedestal
.initialize() );
69
return
StatusCode::SUCCESS;
70
}
71
72
73
//---------------------------------------------------------------------------
74
StatusCode
LArPedestalMaker::execute
(
const
EventContext&
/*ctx*/
)
75
//---------------------------------------------------------------------------
76
{
77
if
(
m_keylist
.empty()) {
78
ATH_MSG_ERROR
(
"Key list is empty! No containers to process!"
);
79
return
StatusCode::FAILURE;
80
}
81
const
LArDigitContainer
* larDigitContainer =
nullptr
;
82
83
for
(
const
std::string& key :
m_keylist
) {
84
StatusCode
sc
=
evtStore
()->retrieve(larDigitContainer,key);
85
if
(
sc
.isFailure() || !larDigitContainer) {
86
ATH_MSG_DEBUG
(
"Cannot read LArCalibDigitContainer from StoreGate! key="
<< key );
87
continue
;
88
}
89
if
(larDigitContainer->
empty
()) {
90
ATH_MSG_DEBUG
(
"Got empty LArDigitContainer (key="
<< key <<
")."
);
91
continue
;
92
}
93
for
(
const
LArDigit
* digit : *larDigitContainer) {
94
const
HWIdentifier
chid=digit->hardwareID();
95
const
CaloGain::CaloGain
gain=digit->gain();
96
//LArPedestal& thisPed=m_pedestal[gain][chid];
97
LArPedestal
& thisPed=
m_pedestal
.get(chid,gain);
98
//log << MSG::DEBUG << "Cell: " << icell << " with gain " << gain << endmsg;
99
if
(gain<0 || gain>
CaloGain::LARNGAIN
) {
100
ATH_MSG_ERROR
(
"Found odd gain number ("
<< (
int
)gain <<
")"
);
101
return
StatusCode::FAILURE;
102
}
103
const
std::vector<short> & samples = digit->samples();
104
if
(thisPed.
get_max
()!=-1)
//Have already boundaries set
105
{
//Check samples are in range
106
std::vector<short>::const_iterator s_it=samples.begin();
107
std::vector<short>::const_iterator s_it_e=samples.end();
108
const
short
&
min
=thisPed.
get_min
();
109
const
short
&
max
=thisPed.
get_max
();
110
for
(;s_it!=s_it_e && *s_it>=
min
&& *s_it<=
max
;++s_it)
111
;
//Loop over samples to check....
112
if
(s_it==s_it_e)
//Reached end of loop?
113
thisPed.
add
(samples);
114
}
115
else
{
//number of entries smaller or equal to than m_nref
116
thisPed.
add
(samples);
117
if
(thisPed.
get_nentries
()==
m_nref
&&
m_nref
>0) {
//Set window size
118
const
double
mean
= thisPed.
get_mean
();
119
const
double
noise = thisPed.
get_rms
();
120
const
short
min
= (short)floor(
mean
-
m_rms_cut
*noise);
121
const
short
max
= (short)ceil(
mean
+
m_rms_cut
*noise);
122
thisPed.
set_min
(
min
);
123
thisPed.
set_max
(
max
);
124
thisPed.
zero
();
125
}
//end if nentries==m_nref
126
}
// end else
127
}
//End loop over all cells
128
}
// End loop over all containers
129
return
StatusCode::SUCCESS;
130
}
131
132
133
//---------------------------------------------------------------------------
134
StatusCode
LArPedestalMaker::stop
()
135
//---------------------------------------------------------------------------
136
{
137
ATH_MSG_INFO
(
">>> Stop"
);
138
139
if
(
m_keylist
.empty()) {
140
ATH_MSG_ERROR
(
"Key list is empty! No containers processed!"
);
141
return
StatusCode::FAILURE;
142
}
143
144
// Create the LArPedestalComplete object
145
auto
larPedestalComplete = std::make_unique<LArPedestalComplete>();
146
147
ATH_CHECK
( larPedestalComplete->setGroupingType(
m_groupingType
,
msg
()) );
148
ATH_CHECK
( larPedestalComplete->initialize() );
149
150
//Outermost loop goes over all gains (different containers).
151
for
(
int
gain=0;gain<(int)
CaloGain::LARNGAIN
;gain++) {
152
//log << MSG::INFO << "Gain " << gain << ", m_pedestal size for this gain = " << m_pedestal[gain].size() << endmsg;
153
154
LARPEDMAP::ConditionsMapIterator
cell_it=
m_pedestal
.begin(gain);
155
LARPEDMAP::ConditionsMapIterator
cell_it_e=
m_pedestal
.end(gain);
156
157
//Inner loop goes over the cells.
158
int
n_zero,n_min, n_max, n_cur;
159
n_zero=0; n_max=n_min=-1;
160
for
(;cell_it!=cell_it_e;cell_it++) {
161
// Check number of entries
162
LArPedestal
thisPed=*cell_it;
163
if
(thisPed.
get_nentries
()==0) { n_zero++;
continue
; }
164
// Get the mean and rms
165
if
(
m_sample_min
>=0 ) {
166
m_mean
[0] = thisPed.
get_mean
(
m_sample_min
,
m_sample_max
);
167
m_rms
[0] = thisPed.
get_rms
(
m_sample_max
,
m_sample_max
);
168
}
169
else
if
(
m_which_sample
==-1 ||
m_which_sample
>=(
int
)thisPed.
get_nsamples
()) {
170
m_mean
[0] = thisPed.
get_mean
();
171
m_rms
[0] = thisPed.
get_rms
();
172
}
173
else
{
174
m_mean
[0] = thisPed.
get_mean
(
m_which_sample
);
175
m_rms
[0] = thisPed.
get_rms
(
m_which_sample
);
176
}
177
n_cur = thisPed.
get_nentries
();
178
if
(n_cur<n_min || n_min<0) n_min=n_cur;
179
if
(n_cur>n_max || n_max<0) n_max=n_cur;
180
181
HWIdentifier
ch_id = cell_it.
channelId
();
182
183
// Fill the data class with pedestal and rms values
184
if
(ch_id!=0)
185
larPedestalComplete->
set
(ch_id,gain,
m_mean
[0],
m_rms
[0]);
186
}
187
188
ATH_MSG_INFO
(
"Gain "
<< gain <<
" Number of cells with 0 events to compute pedestal: "
<< n_zero );
189
ATH_MSG_INFO
(
"Gain "
<< gain <<
" Minimum number of events|samples to compute pedestal: "
<< n_min );
190
ATH_MSG_INFO
(
"Gain "
<< gain <<
" Maximum number of events|samples to compute pedestal: "
<< n_max );
191
}
192
193
ATH_MSG_INFO
(
" Summary : Number of cells with a pedestal value computed : "
<< larPedestalComplete->totalNumberOfConditions() );
194
ATH_MSG_INFO
(
" Summary : Number of Barrel PS cells side A or C (connected+unconnected): 4096 "
);
195
ATH_MSG_INFO
(
" Summary : Number of Barrel cells side A or C (connected+unconnected): 53248 "
);
196
ATH_MSG_INFO
(
" Summary : Number of EMEC cells side A or C (connected+unconnected): 35328 "
);
197
ATH_MSG_INFO
(
" Summary : Number of HEC cells side A or C (connected+unconnected): 3072 "
);
198
ATH_MSG_INFO
(
" Summary : Number of FCAL cells side A or C (connected+unconnected): 1792 "
);
199
200
// Record LArPedestalComplete
201
ATH_CHECK
(
detStore
()->record(std::move(larPedestalComplete),
m_keyoutput
) );
202
203
ATH_MSG_INFO
(
">>> End of finalize"
);
204
return
StatusCode::SUCCESS;
205
}
206
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition
AthMsgStreamMacros.h:33
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition
AthMsgStreamMacros.h:31
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
LArOnlineID.h
LArPedestalMaker.h
sc
static Double_t sc
Definition
LArPhysWaveHECTool.cxx:37
min
#define min(a, b)
Definition
cfImp.cxx:40
max
#define max(a, b)
Definition
cfImp.cxx:41
AthAlgorithm::AthAlgorithm
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
Definition
AthAlgorithm.cxx:10
AthCommonAlgorithm< Gaudi::Algorithm >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Definition
AthCommonDataStore.h:145
AthCommonAlgorithm< Gaudi::Algorithm >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
Definition
AthCommonDataStore.h:85
AthCommonAlgorithm< Gaudi::Algorithm >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
Definition
AthCommonDataStore.h:95
AthCommonAlgorithm< Gaudi::Algorithm >::msg
MsgStream & msg() const
Definition
AthCommonMsg.h:24
DataVector::empty
bool empty() const noexcept
Returns true if the collection is empty.
HWIdentifier
Definition
HWIdentifier.h:13
Identifier::set
void set(std::string_view id)
build from a string form - hexadecimal
Definition
Identifier.cxx:25
LArConditionsContainerBase::SingleGroup
@ SingleGroup
Definition
LArConditionsContainerBase.h:46
LArConditionsContainerDB::iteratorT::channelId
HWIdentifier channelId() const
LArConditionsContainer< LArPedestal >::ConditionsMapIterator
ConditionsMap::iterator ConditionsMapIterator
Definition
LArConditionsContainer.h:87
LArDigitContainer
Container class for LArDigit.
Definition
LArDigitContainer.h:24
LArDigit
Liquid Argon digit base class.
Definition
LArDigit.h:25
LArPedestalMaker::m_sample_max
int m_sample_max
Definition
LArPedestalMaker.h:73
LArPedestalMaker::LArPedestalMaker
LArPedestalMaker(const std::string &name, ISvcLocator *pSvcLocator)
Definition
LArPedestalMaker.cxx:33
LArPedestalMaker::m_rms
std::vector< float > m_rms
Definition
LArPedestalMaker.h:82
LArPedestalMaker::stop
StatusCode stop()
Definition
LArPedestalMaker.cxx:134
LArPedestalMaker::m_which_sample
int m_which_sample
Definition
LArPedestalMaker.h:70
LArPedestalMaker::initialize
StatusCode initialize()
Definition
LArPedestalMaker.cxx:52
LArPedestalMaker::execute
StatusCode execute(const EventContext &ctx)
Execute method.
Definition
LArPedestalMaker.cxx:74
LArPedestalMaker::m_rms_cut
double m_rms_cut
Definition
LArPedestalMaker.h:67
LArPedestalMaker::m_groupingType
std::string m_groupingType
Definition
LArPedestalMaker.h:61
LArPedestalMaker::m_mean
std::vector< float > m_mean
Definition
LArPedestalMaker.h:81
LArPedestalMaker::m_sample_min
int m_sample_min
Definition
LArPedestalMaker.h:72
LArPedestalMaker::m_keyoutput
std::string m_keyoutput
Definition
LArPedestalMaker.h:58
LArPedestalMaker::~LArPedestalMaker
~LArPedestalMaker()
LArPedestalMaker::m_nref
int m_nref
Definition
LArPedestalMaker.h:64
LArPedestalMaker::m_keylist
std::vector< std::string > m_keylist
Definition
LArPedestalMaker.h:57
LArPedestalMaker::m_pedestal
LARPEDMAP m_pedestal
Definition
LArPedestalMaker.h:78
LArPedestal
Definition
LArCalibUtils/LArCalibUtils/LArPedestal.h:27
LArPedestal::get_nentries
int get_nentries() const
Definition
LArCalibUtils/LArCalibUtils/LArPedestal.h:58
LArPedestal::add
void add(const std::vector< short > &samples)
Definition
LArCalibUtils/src/LArPedestal.cxx:170
LArPedestal::get_min
const short & get_min() const
Definition
LArCalibUtils/LArCalibUtils/LArPedestal.h:78
LArPedestal::get_max
const short & get_max() const
Definition
LArCalibUtils/LArCalibUtils/LArPedestal.h:81
LArPedestal::set_max
void set_max(const short max)
Definition
LArCalibUtils/src/LArPedestal.cxx:44
LArPedestal::get_nsamples
unsigned get_nsamples() const
Definition
LArCalibUtils/LArCalibUtils/LArPedestal.h:75
LArPedestal::get_rms
double get_rms() const
Definition
LArCalibUtils/src/LArPedestal.cxx:151
LArPedestal::get_mean
double get_mean() const
Definition
LArCalibUtils/src/LArPedestal.cxx:102
LArPedestal::zero
void zero()
Definition
LArCalibUtils/src/LArPedestal.cxx:188
LArPedestal::set_min
void set_min(const short min)
Definition
LArCalibUtils/src/LArPedestal.cxx:37
mean
void mean(std::vector< double > &bins, std::vector< double > &values, const std::vector< std::string > &files, const std::string &histname, const std::string &tplotname, const std::string &label="")
Definition
dependence.cxx:254
CaloGain::CaloGain
CaloGain
Definition
CaloGain.h:11
CaloGain::LARNGAIN
@ LARNGAIN
Definition
CaloGain.h:19
Generated on
for ATLAS Offline Software by
1.17.0