ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
LArCalorimeter
LArCellRec
src
LArCellMaskingTool.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
/********************************************************************
6
7
NAME: CaloCellMaskingTool
8
PACKAGE: offline/Calorimeter/CaloRec
9
10
********************************************************************/
11
12
#include "
LArCellMaskingTool.h
"
13
#include "
LArIdentifier/LArOnlID_Exception.h
"
14
#include "
CaloEvent/CaloCellContainer.h
"
15
16
18
// CONSTRUCTOR:
20
21
LArCellMaskingTool::LArCellMaskingTool
(
22
const
std::string&
type
,
23
const
std::string& name,
24
const
IInterface* parent)
25
: base_class (
type
, name, parent),
26
m_onlineID
(nullptr),
27
m_offlineID
(nullptr),
28
m_mapInitialized
(false)
29
{
30
//List of strings to determine detector parts to be masked.
31
//Syntax: barrel_endcap pos_neg Feedthrough slot channel (integers separated by white space)
32
//Feedthrough, slot, and channel can be left out. In this case all channels belonging to this
33
//Subdetector, Feedthrough or FEB will be masked.
34
declareProperty (
"RejectLArChannels"
,
m_rejLArChannels
);
35
}
36
37
38
39
41
// INITIALIZE:
42
// The initialize method will create all the required algorithm objects
44
45
StatusCode
LArCellMaskingTool::initialize
()
46
{
47
ATH_CHECK
( detStore()->retrieve(
m_offlineID
) );
48
ATH_CHECK
( detStore()->retrieve(
m_onlineID
) );
49
ATH_CHECK
(
m_cablingKey
.initialize());
50
51
// Get hash ranges
52
m_offlinehashMax
=
m_offlineID
->calo_cell_hash_max();
53
ATH_MSG_DEBUG
(
"CaloCell Hash Max: "
<<
m_offlinehashMax
);
54
55
// m_onlinehashMax=m_onlineID->hash_max();
56
// (*m_log) << MSG::DEBUG << "CaloCell Hash Max: " << m_offlinehashMax << endmsg;
57
58
//Fill the bit map
59
m_includedCellsMap.set();
// By default include all cells
60
61
ATH_MSG_INFO
(
" Will exclude "
<< m_includedCellsMap.size() - m_includedCellsMap.count() <<
" cells from CaloCellContainer"
);
62
63
64
return
StatusCode::SUCCESS;
65
66
}
67
68
StatusCode
LArCellMaskingTool::fillIncludedCellsMap
(
const
LArOnOffIdMapping
* cabling)
const
69
{
70
for
(
const
std::string& s :
m_rejLArChannels
) {
71
std::stringstream is;
72
is << s;
73
bool
haveFT=
false
, haveSlot=
false
, haveChannel=
false
;
74
int
bec=0, pn=0, FT=0, slot=1,channel=0;
75
//Want at least subdetector (=pn & bec)
76
is >> bec >> pn;
77
if
(is.bad()) {
78
ATH_MSG_ERROR
(
"jO problem: Malformed string ["
<< s <<
"]"
);
79
return
StatusCode::FAILURE;
80
}
81
82
int
FTmax;
83
if
(bec==0)
84
FTmax=32;
//Barrel
85
else
86
FTmax=24;
//Endcap
87
88
89
90
if
(!is.eof()) {
//have FT
91
is >> FT;
92
haveFT=
true
;
93
//check good?
94
}
95
if
(!is.eof()) {
//have slot
96
is >> slot;
97
haveSlot=
true
;
98
}
99
if
(!is.eof()) {
//have channel
100
is >> channel;
101
haveChannel=
true
;
102
}
103
104
msg
() << MSG::DEBUG <<
"Will exclude: bec="
<< bec <<
" pn="
<< pn;
105
if
(haveFT)
msg
() <<
" FT="
<< FT;
106
if
(haveSlot)
msg
() <<
" slot="
<< slot;
107
if
(haveChannel)
msg
() <<
" channel="
<< channel;
108
msg
() <<
endmsg
;
109
110
unsigned
nChannels=0;
111
unsigned
nDisconnected=0;
112
HWIdentifier
chanId;
113
do
{
//loop over FTs (only once if FT is set
114
//Number of channels for this FT
115
int
slotMax=15;
116
do
{
117
int
channelMax=128;
118
do
{
//loop over channels in slot
119
nChannels++;
120
try
{
121
chanId=
m_onlineID
->channel_Id(bec,pn,FT,slot,channel);
122
if
(cabling->isOnlineConnected(chanId)) {
123
const
Identifier
cellId=cabling->cnvToIdentifier(chanId);
124
const
IdentifierHash
cellhash=
m_offlineID
->calo_cell_hash(cellId);
125
m_includedCellsMap.reset(cellhash);
126
//std::cout << "Block channel: bec="<< bec << " pn=" << pn
127
// << " FT=" << FT <<":" << haveFT << " slot=" << slot << ":" << haveSlot << " channel=" << channel <<":" << haveChannel<< std::endl;
128
}
129
else
130
nDisconnected++;
131
}
132
catch
(
const
LArOnlID_Exception
&) {
133
}
134
catch
(
const
LArID_Exception
&) {
135
}
136
if
(!haveChannel) channel++;
137
}
while
(!haveChannel && channel<channelMax);
138
if
(!haveChannel) channel=0;
139
if
(!haveSlot) slot++;
140
}
while
(!haveSlot && slot<slotMax);
141
if
(!haveSlot) slot=0;
142
if
(!haveFT) FT++;
143
}
while
(!haveFT && FT<FTmax);
144
ATH_MSG_DEBUG
(
"Channels selected for exclusion: "
<< nChannels <<
". Disconnected: "
<< nDisconnected);
145
}
// end loop over strings
146
return
StatusCode::SUCCESS;
147
}
148
149
150
151
StatusCode
LArCellMaskingTool::process
(
CaloCellContainer
* theCont,
152
const
EventContext& ctx)
const
153
{
154
if
(!
m_mapInitialized
) {
155
// FIXME: Can we do this in start()?
156
std::lock_guard<std::mutex>
lock
(
m_mutex
);
157
// cppcheck-suppress identicalInnerCondition
158
if
(!
m_mapInitialized
) {
159
SG::ReadCondHandle<LArOnOffIdMapping>
cablingHdl (
m_cablingKey
, ctx);
160
const
LArOnOffIdMapping
* cabling=*cablingHdl;
161
ATH_CHECK
(
fillIncludedCellsMap
(cabling));
162
m_mapInitialized
=
true
;
163
}
164
}
165
166
//Build bitmap to keep track which cells have been added to reducedCellContainer;
167
unsigned
cnt=0;
168
CaloCellContainer::iterator
it=theCont->
begin
();
169
while
(it!=theCont->
end
()) {
170
const
IdentifierHash
cellHash=(*it)->caloDDE()->calo_hash();
171
if
(!m_includedCellsMap.test(cellHash)) {
172
//Possible optimization: check how many consecutive cells to be deleted and erase a range
173
it=theCont->
erase
(it);
174
cnt++;
175
}
176
else
177
++it;
178
}
179
ATH_MSG_DEBUG
(
"Removed "
<< cnt <<
" Cells from container"
);
180
return
StatusCode::SUCCESS ;
181
}
182
183
184
StatusCode
LArCellMaskingTool::finalize
() {
185
return
StatusCode::SUCCESS;
186
}
187
188
189
190
191
endmsg
#define endmsg
Definition
AnalysisConfig_Ntuple.cxx:54
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
CaloCellContainer.h
lock
virtual void lock()=0
Interface to allow an object to lock itself when made const in SG.
LArCellMaskingTool.h
LArOnlID_Exception.h
CaloCellContainer
Container class for CaloCell.
Definition
CaloCellContainer.h:55
DataVector< CaloCell >::iterator
DataModel_detail::iterator< DataVector > iterator
Definition
DataVector.h:842
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
DataVector::erase
iterator erase(iterator position)
Remove element at a given position.
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
HWIdentifier
Definition
HWIdentifier.h:13
IdentifierHash
This is a "hash" representation of an Identifier.
Definition
IdentifierHash.h:25
LArCellMaskingTool::initialize
virtual StatusCode initialize() override
Definition
LArCellMaskingTool.cxx:45
LArCellMaskingTool::m_onlineID
const LArOnlineID * m_onlineID
Definition
LArCellMaskingTool.h:42
LArCellMaskingTool::m_offlinehashMax
IdentifierHash m_offlinehashMax
Definition
LArCellMaskingTool.h:51
LArCellMaskingTool::m_rejLArChannels
std::vector< std::string > m_rejLArChannels
Definition
LArCellMaskingTool.h:47
LArCellMaskingTool::m_offlineID
const CaloCell_ID * m_offlineID
Definition
LArCellMaskingTool.h:43
LArCellMaskingTool::LArCellMaskingTool
LArCellMaskingTool(const std::string &type, const std::string &name, const IInterface *parent)
Definition
LArCellMaskingTool.cxx:21
LArCellMaskingTool::m_mapInitialized
std::atomic< bool > m_mapInitialized
Definition
LArCellMaskingTool.h:50
LArCellMaskingTool::finalize
virtual StatusCode finalize() override
Definition
LArCellMaskingTool.cxx:184
LArCellMaskingTool::fillIncludedCellsMap
StatusCode fillIncludedCellsMap(const LArOnOffIdMapping *cabling) const
Definition
LArCellMaskingTool.cxx:68
LArCellMaskingTool::process
virtual StatusCode process(CaloCellContainer *theCellContainer, const EventContext &ctx) const override
Definition
LArCellMaskingTool.cxx:151
LArCellMaskingTool::m_mutex
std::mutex m_mutex
Definition
LArCellMaskingTool.h:53
LArCellMaskingTool::m_cablingKey
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKey
Definition
LArCellMaskingTool.h:44
LArID_Exception
Exception class for LAr Identifiers.
Definition
LArID_Exception.h:20
LArOnOffIdMapping
Definition
LArOnOffIdMapping.h:20
LArOnlID_Exception
Exception class for LAr online Identifiers.
Definition
LArOnlID_Exception.h:16
SG::ReadCondHandle
Definition
ReadCondHandle.h:40
Identifier
Definition
IdentifierFieldParser.cxx:14
type
msg
MsgStream & msg
Definition
testRead.cxx:32
Generated on
for ATLAS Offline Software by
1.17.0