ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
PhysicsAnalysis
D3PDMaker
CaloSysD3PDMaker
src
CaloCalibHitFillerTool.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3
*/
4
11
12
13
#include "
CaloCalibHitFillerTool.h
"
14
#include "
CaloEvent/CaloCellContainer.h
"
15
#include "GaudiKernel/ServiceHandle.h"
16
#include "
AthenaKernel/errorcheck.h
"
17
#include "
StoreGate/StoreGateSvc.h
"
18
#include "
CaloIdentifier/LArEM_ID.h
"
19
#include "
CaloIdentifier/LArHEC_ID.h
"
20
#include "
CaloIdentifier/LArFCAL_ID.h
"
21
#include "
CaloIdentifier/TileID.h
"
22
#include "
CaloIdentifier/CaloCell_ID.h
"
23
#include "
CaloIdentifier/CaloDM_ID.h
"
24
#include "
LArIdentifier/LArOnlineID.h
"
25
#include "CaloDetDescr/CaloDetDescrElement.h"
26
#include "
CaloDmDetDescr/CaloDmDescrManager.h
"
27
#include <sstream>
28
29
30
namespace
D3PD
{
31
32
33
CaloCalibHitFillerTool::CaloCalibHitFillerTool
34
(
const
std::string&
type
,
35
const
std::string& name,
36
const
IInterface* parent)
37
:
BlockFillerTool
<
CaloCalibrationHit
> (
type
, name, parent),
38
m_dm_ddm
(0),
39
m_emid
(0),
40
m_fcalid
(0),
41
m_hecid
(0),
42
m_tileid
(0),
43
m_onlineid
(0),
44
m_cellid
(0),
45
m_dmid
(0),
46
m_isDM
(false),
47
m_isbasic
(true),
48
m_savepartID
(false),
m_savefullID
(false),
49
m_savetoten
(true),
m_savevisen
(true),
m_saveallen
(false)
50
{
51
declareProperty(
"isDeadMaterial"
,
m_isDM
);
52
declareProperty(
"isBasic"
,
m_isbasic
);
53
declareProperty(
"SaveParticleID"
,
m_savepartID
);
54
declareProperty(
"SaveFullCellID"
,
m_savefullID
);
55
declareProperty(
"SaveTotalEnergy"
,
m_savetoten
);
56
declareProperty(
"SaveVisibleEnergy"
,
m_savevisen
);
57
declareProperty(
"SaveAllEnergies"
,
m_saveallen
);
58
CaloCalibHitFillerTool::book
().ignore();
59
}
60
61
62
StatusCode
CaloCalibHitFillerTool::initialize
()
63
{
64
ServiceHandle<StoreGateSvc>
detStore(
"DetectorStore"
, name());
65
ATH_CHECK
( detStore.retrieve() );
66
67
ATH_CHECK
(
m_caloMgrKey
.initialize() );
68
ATH_CHECK
( detStore->retrieve(
m_emid
) );
69
ATH_CHECK
( detStore->retrieve(
m_fcalid
) );
70
ATH_CHECK
( detStore->retrieve(
m_hecid
) );
71
ATH_CHECK
( detStore->retrieve(
m_tileid
) );
72
ATH_CHECK
( detStore->retrieve(
m_onlineid
));
73
if
(
m_isDM
) {
74
ATH_CHECK
( detStore->retrieve(
m_dmid
) );
75
m_dm_ddm
=
CaloDmDescrManager::instance
();
76
if
(!
m_dm_ddm
) {
77
std::cout<<
"Could not get CaloDmDescrManager"
<<std::endl;
78
return
StatusCode::FAILURE;
79
}
80
}
else
{
81
ATH_CHECK
( detStore->retrieve(
m_cellid
) );
82
}
83
84
if
(
m_saveallen
) {
m_savetoten
=
false
;
m_savevisen
=
false
; }
85
86
return
StatusCode::SUCCESS;
87
}
88
89
93
StatusCode
CaloCalibHitFillerTool::book
()
94
{
95
96
97
if
(
m_isbasic
) {
98
CHECK
(
addVariable
(
"eta"
,
m_eta
) );
99
CHECK
(
addVariable
(
"phi"
,
m_phi
) );
100
}
101
if
(
m_savepartID
) {
102
CHECK
(
addVariable
(
"particleID"
,
m_particleID
) );
103
}
104
if
(
m_savefullID
){
105
if
(
m_isDM
) {
106
CHECK
(
addVariable
(
"detzside"
,
m_det
) );
107
CHECK
(
addVariable
(
"type"
,
m_side
) );
108
CHECK
(
addVariable
(
"sampling"
,
m_sam
) );
109
CHECK
(
addVariable
(
"region"
,
m_reg
) );
110
CHECK
(
addVariable
(
"ieta"
,
m_etatow
) );
111
CHECK
(
addVariable
(
"iphi"
,
m_phimod
) );
112
}
else
{
113
CHECK
(
addVariable
(
"detector"
,
m_det
) );
114
CHECK
(
addVariable
(
"sample"
,
m_sam
) );
115
CHECK
(
addVariable
(
"side"
,
m_side
) );
116
CHECK
(
addVariable
(
"reg_sec"
,
m_reg
) );
117
CHECK
(
addVariable
(
"eta_tower"
,
m_etatow
) );
118
CHECK
(
addVariable
(
"phi_module"
,
m_phimod
) );
119
}
120
}
121
if
(
m_isbasic
){
122
CHECK
(
addVariable
(
"ID"
,
m_id
) );
123
}
124
if
(
m_savetoten
&&
m_isbasic
) {
125
CHECK
(
addVariable
(
"EnergyTot"
,
m_etot
) );
126
}
127
if
(
m_savevisen
&&
m_isbasic
) {
128
CHECK
(
addVariable
(
"EnergyVis"
,
m_evis
) );
129
}
130
if
(
m_saveallen
) {
131
CHECK
(
addVariable
(
"EnergyEm"
,
m_e_em
) );
132
CHECK
(
addVariable
(
"EnergyNonEm"
,
m_e_nonem
) );
133
CHECK
(
addVariable
(
"EnergyInv"
,
m_e_inv
) );
134
CHECK
(
addVariable
(
"EnergyEsc"
,
m_e_esc
) );
135
136
}
137
return
StatusCode::SUCCESS;
138
}
139
140
149
StatusCode
CaloCalibHitFillerTool::fill
(
const
CaloCalibrationHit
& p)
150
{
151
MsgStream log(msgSvc(), name());
152
153
Identifier
id
= p.cellID();
154
155
// Check if we have good ID
156
if
(
m_isDM
&& (! (
m_dmid
->is_lar(
id
) ||
m_dmid
->is_tile(
id
)))) {
157
ATH_MSG_ERROR
(
"Should be DM calibration hit, but do not have DM identifier: "
<<
id
.getString() );
158
return
StatusCode::FAILURE;
159
}
160
//bool fcal = m_tileid->is_lar_fcal(id);
161
162
if
(
m_saveallen
) {
163
*
m_e_em
= p.energyEM();
164
*
m_e_nonem
= p.energyNonEM();
165
*
m_e_inv
= p.energyInvisible();
166
*
m_e_esc
= p.energyEscaped();
167
}
168
if
(
m_savetoten
&&
m_isbasic
) *
m_etot
=p.energyTotal();
169
if
(
m_savevisen
&&
m_isbasic
) *
m_evis
=p.energyEM() + p.energyNonEM();
170
171
if
(
m_isbasic
) {
172
if
(!
m_isDM
) {
173
SG::ReadCondHandle<CaloDetDescrManager>
caloMgrHandle{
m_caloMgrKey
};
174
ATH_CHECK
(caloMgrHandle.
isValid
());
175
const
CaloDetDescrElement
* dde = (*caloMgrHandle)->get_element(
id
);
176
if
(dde) {
177
*
m_eta
= dde->
eta
();
178
*
m_phi
= dde->
phi
();
179
}
180
}
else
{
181
const
CaloDmDescrElement
*el =
m_dm_ddm
->get_element(
id
);
182
if
(el) {
183
*
m_eta
= el->eta();
184
*
m_phi
= el->phi();
185
}
186
}
187
}
188
if
(
m_savefullID
){
189
if
(
m_isDM
) {
190
*
m_det
=
m_dmid
->pos_neg_z(
id
);
191
*
m_side
=
m_dmid
->dmat(
id
);
192
*
m_sam
=
m_dmid
->sampling(
id
);
193
*
m_reg
=
m_dmid
->region(
id
);
194
*
m_etatow
=
m_dmid
->eta(
id
);
195
*
m_phimod
=
m_dmid
->phi(
id
);
196
}
else
{
197
*
m_det
=
m_cellid
->sub_calo(
id
);
198
*
m_sam
=
m_cellid
->calo_sample(
id
);
199
if
(
m_cellid
->is_tile(
id
)) {
200
*
m_side
=
m_cellid
->side(
id
);
201
*
m_reg
=
m_cellid
->section(
id
);
202
*
m_etatow
=
m_cellid
->tower(
id
);
203
*
m_phimod
=
m_cellid
->module(
id
);
204
}
else
{
205
*
m_side
=
m_cellid
->pos_neg(
id
);
206
*
m_reg
=
m_cellid
->region(
id
);
207
*
m_etatow
=
m_cellid
->eta(
id
);
208
*
m_phimod
=
m_cellid
->phi(
id
);
209
}
210
}
211
}
212
if
(
m_isbasic
){
213
*
m_id
=
CaloHit_GetDetectorInfo
(
id
);
214
}
215
216
return
StatusCode::SUCCESS;
217
}
218
219
220
221
unsigned
int
CaloCalibHitFillerTool::CaloHit_GetDetectorInfo
(
Identifier
&cellID)
222
{
223
if
(!
m_isDM
) {
224
// AtlasID bit (4)
225
// 1 : lar_em
226
// 2 : lar_hec
227
// 3 : lar_fcal
228
// 4 : tile
229
unsigned
ATbit1 =
m_emid
->is_lar_em(cellID) ? (1<<0) : 0;
230
unsigned
ATbit2 =
m_hecid
->is_lar_hec(cellID) ? (1<<1) : 0;
231
unsigned
ATbit3 =
m_fcalid
->is_lar_fcal(cellID) ? (1<<2) : 0;
232
unsigned
ATbit4 =
m_tileid
->is_tile(cellID) ? (1<<3) : 0;
233
unsigned
ATbit = (ATbit1 | ATbit2 | ATbit3 | ATbit4);
234
235
//std::cout << "ATLAS Calo(EM,HEC,FCal,Tile) : " << ATbit1 << " " << ATbit2 << " " << ATbit3 << " " << ATbit4 << std::endl;
236
237
// EM bit (5)
238
// 1-2 : sampling
239
// 0,1,2,3
240
// 0 presampler
241
// 1,2,3 each layer
242
// 3 : barrel
243
// 4 : endcap_inner
244
// 5 : endcap_outer
245
unsigned
EMbit1 = 0;
246
unsigned
EMbit3 = 0;
247
unsigned
EMbit4 = 0;
248
unsigned
EMbit5 = 0;
249
if
(ATbit1) {
250
EMbit1 = unsigned(
m_emid
->sampling(cellID));
251
EMbit3 =
m_emid
->is_em_barrel(cellID) ? (1<<2) : 0;
252
EMbit4 =
m_emid
->is_em_endcap_inner(cellID) ? (1<<3) : 0;
253
EMbit5 =
m_emid
->is_em_endcap_outer(cellID) ? (1<<4) : 0;
254
}
255
unsigned
EMbit = (EMbit1 | EMbit3 | EMbit4 | EMbit5);
256
257
//std::cout << "EM : " << EMbit1 << " " << EMbit3 << " " << EMbit4 << " " << EMbit5 << std::endl;
258
259
// HEC (2)
260
// 1-2: sampling
261
// 0,1 = first wheel
262
// 2,3 = second wheel
263
unsigned
HCbit1 = 0;
264
if
(ATbit2) {
265
HCbit1 = unsigned(
m_hecid
->sampling(cellID));
266
}
267
unsigned
HCbit = HCbit1;
268
269
//std::cout << "HEC : " << HCbit1 << std::endl;
270
271
// FCal (2)
272
// 1-2 : module
273
// 1,2,3
274
// 1 EM
275
// 2,3 Hadronic
276
//
277
unsigned
FCbit1 = 0;
278
if
(ATbit3) {
279
FCbit1 = unsigned(
m_fcalid
->module(cellID));
280
}
281
unsigned
FCbit = FCbit1;
282
283
//std::cout << "FCal : " << FCbit1 << std::endl;
284
285
// Tile bit (8)
286
// 1-3 : sample
287
// 0 = SAMP_A
288
// 1 = SAMP_B, SAMP_BC, SAMP_C
289
// 2 = SAMP_D
290
// 3 = SAMP_E
291
// 4 = SAMP_X
292
// 4 : barrel
293
// 5 : extbarrel
294
// 6 : gap
295
// 7 : gapscin
296
unsigned
TLbit1 = 0;
297
unsigned
TLbit4 = 0;
298
unsigned
TLbit5 = 0;
299
unsigned
TLbit6 = 0;
300
unsigned
TLbit7 = 0;
301
if
(ATbit4) {
302
TLbit1 = unsigned(
m_tileid
->sample(cellID));
303
TLbit4 =
m_tileid
->is_tile_barrel(cellID) ? (1<<3) : 0;
304
TLbit5 =
m_tileid
->is_tile_extbarrel(cellID) ? (1<<4) : 0;
305
TLbit6 =
m_tileid
->is_tile_gap(cellID) ? (1<<5) : 0;
306
TLbit7 =
m_tileid
->is_tile_gapscin(cellID) ? (1<<6) : 0;
307
}
308
unsigned
TLbit = (TLbit1 | TLbit4 | TLbit5 | TLbit6 | TLbit7);
309
310
//std::cout << "Tile : " << TLbit1 << " " << TLbit4 << " " << TLbit5 << " " << TLbit6 << " " << TLbit7 << std::endl;
311
312
unsigned
int
CombBit = (ATbit | (EMbit<<4) | (HCbit<<9) |
313
(FCbit<<11) | (TLbit<<13));
314
315
return
CombBit;
316
}
else
{
// How to code the DM identifier ?
317
unsigned
int
SideBit = 0;
// bit 0
318
if
(
m_dmid
->pos_neg_z(cellID) < 0) SideBit = 1;
319
unsigned
int
DetBit = 0;
// bit 1
320
if
(
m_dmid
->is_tile(cellID)) DetBit = (1<<1);
321
unsigned
int
TypeBit =
m_dmid
->dmat(cellID)<<2;
// bit 2-3
322
unsigned
int
SamplBit =
m_dmid
->sampling(cellID)<<4;
// bit 4-5
323
unsigned
int
RegionBit =
m_dmid
->region(cellID)<<6;
// bit 6-8
324
unsigned
int
EtaBit =
m_dmid
->eta(cellID)<<9;
// bit 9-14
325
unsigned
int
PhiBit =
m_dmid
->phi(cellID)<<15;
// bit 15-21
326
unsigned
int
CombBit = (SideBit | DetBit | TypeBit | SamplBit | RegionBit | EtaBit | PhiBit);
327
return
CombBit;
328
}
329
}
330
331
332
333
}
// namespace D3PD
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
CaloCalibHitFillerTool.h
CaloCellContainer.h
CaloCell_ID.h
CaloDM_ID.h
CaloDmDescrManager.h
errorcheck.h
Helpers for checking error return status codes and reporting errors.
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition
Control/AthenaKernel/AthenaKernel/errorcheck.h:422
LArEM_ID.h
LArFCAL_ID.h
LArHEC_ID.h
LArOnlineID.h
StoreGateSvc.h
TileID.h
CaloCalibrationHit
Class to store calorimeter calibration hit.
Definition
CaloCalibrationHit.h:24
CaloDetDescrElement
This class groups all DetDescr information related to a CaloCell.
Definition
Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:66
CaloDetDescrElement::eta
float eta() const
cell eta
Definition
Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:344
CaloDetDescrElement::phi
float phi() const
cell phi
Definition
Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:346
CaloDmDescrElement
Definition
CaloDmDescrManager.h:33
CaloDmDescrManager::instance
static const CaloDmDescrManager * instance()
Definition
CaloDmDescrManager.cxx:67
D3PD::BlockFillerTool< CaloCalibrationHit >::addVariable
virtual StatusCode addVariable(const std::string &name, const std::type_info &ti, void *&ptr, const std::string &docstring="", const void *defval=0)
Definition
AddVariable.cxx:85
D3PD::BlockFillerTool
Type-safe wrapper for block filler tools.
Definition
BlockFillerTool.h:65
D3PD::CaloCalibHitFillerTool::m_etot
float * m_etot
Definition
CaloCalibHitFillerTool.h:85
D3PD::CaloCalibHitFillerTool::m_particleID
unsigned int * m_particleID
Definition
CaloCalibHitFillerTool.h:91
D3PD::CaloCalibHitFillerTool::m_savefullID
bool m_savefullID
Definition
CaloCalibHitFillerTool.h:120
D3PD::CaloCalibHitFillerTool::m_hecid
const LArHEC_ID * m_hecid
Definition
CaloCalibHitFillerTool.h:109
D3PD::CaloCalibHitFillerTool::m_cellid
const CaloCell_ID * m_cellid
Definition
CaloCalibHitFillerTool.h:112
D3PD::CaloCalibHitFillerTool::initialize
virtual StatusCode initialize() override
Standard Gaudi initialize method.
Definition
CaloCalibHitFillerTool.cxx:62
D3PD::CaloCalibHitFillerTool::m_id
unsigned int * m_id
Definition
CaloCalibHitFillerTool.h:92
D3PD::CaloCalibHitFillerTool::fill
virtual StatusCode fill(const CaloCalibrationHit &p) override
Fill one block — type-safe version.
Definition
CaloCalibHitFillerTool.cxx:149
D3PD::CaloCalibHitFillerTool::CaloHit_GetDetectorInfo
unsigned int CaloHit_GetDetectorInfo(Identifier &HitID)
Definition
CaloCalibHitFillerTool.cxx:221
D3PD::CaloCalibHitFillerTool::m_isDM
bool m_isDM
Definition
CaloCalibHitFillerTool.h:117
D3PD::CaloCalibHitFillerTool::m_e_nonem
float * m_e_nonem
Definition
CaloCalibHitFillerTool.h:88
D3PD::CaloCalibHitFillerTool::m_onlineid
const LArOnlineID * m_onlineid
Definition
CaloCalibHitFillerTool.h:111
D3PD::CaloCalibHitFillerTool::m_caloMgrKey
SG::ReadCondHandleKey< CaloDetDescrManager > m_caloMgrKey
Definition
CaloCalibHitFillerTool.h:100
D3PD::CaloCalibHitFillerTool::m_savevisen
bool m_savevisen
Definition
CaloCalibHitFillerTool.h:122
D3PD::CaloCalibHitFillerTool::m_e_esc
float * m_e_esc
Definition
CaloCalibHitFillerTool.h:90
D3PD::CaloCalibHitFillerTool::m_emid
const LArEM_ID * m_emid
Definition
CaloCalibHitFillerTool.h:107
D3PD::CaloCalibHitFillerTool::m_fcalid
const LArFCAL_ID * m_fcalid
Definition
CaloCalibHitFillerTool.h:108
D3PD::CaloCalibHitFillerTool::m_evis
float * m_evis
Definition
CaloCalibHitFillerTool.h:86
D3PD::CaloCalibHitFillerTool::m_etatow
unsigned int * m_etatow
Definition
CaloCalibHitFillerTool.h:97
D3PD::CaloCalibHitFillerTool::m_dm_ddm
const CaloDmDescrManager * m_dm_ddm
Definition
CaloCalibHitFillerTool.h:106
D3PD::CaloCalibHitFillerTool::m_sam
unsigned int * m_sam
Definition
CaloCalibHitFillerTool.h:94
D3PD::CaloCalibHitFillerTool::m_side
unsigned int * m_side
Definition
CaloCalibHitFillerTool.h:95
D3PD::CaloCalibHitFillerTool::m_reg
unsigned int * m_reg
Definition
CaloCalibHitFillerTool.h:96
D3PD::CaloCalibHitFillerTool::m_e_inv
float * m_e_inv
Definition
CaloCalibHitFillerTool.h:89
D3PD::CaloCalibHitFillerTool::m_phimod
unsigned int * m_phimod
Definition
CaloCalibHitFillerTool.h:98
D3PD::CaloCalibHitFillerTool::m_phi
float * m_phi
Definition
CaloCalibHitFillerTool.h:84
D3PD::CaloCalibHitFillerTool::m_eta
float * m_eta
Variable: time, quality and id.
Definition
CaloCalibHitFillerTool.h:83
D3PD::CaloCalibHitFillerTool::m_saveallen
bool m_saveallen
Definition
CaloCalibHitFillerTool.h:123
D3PD::CaloCalibHitFillerTool::m_isbasic
bool m_isbasic
Definition
CaloCalibHitFillerTool.h:118
D3PD::CaloCalibHitFillerTool::m_tileid
const TileID * m_tileid
Definition
CaloCalibHitFillerTool.h:110
D3PD::CaloCalibHitFillerTool::CaloCalibHitFillerTool
CaloCalibHitFillerTool(const std::string &type, const std::string &name, const IInterface *parent)
Standard Gaudi tool constructor.
Definition
CaloCalibHitFillerTool.cxx:34
D3PD::CaloCalibHitFillerTool::m_savepartID
bool m_savepartID
Definition
CaloCalibHitFillerTool.h:119
D3PD::CaloCalibHitFillerTool::m_dmid
const CaloDM_ID * m_dmid
Definition
CaloCalibHitFillerTool.h:113
D3PD::CaloCalibHitFillerTool::book
virtual StatusCode book() override
Book variables for this block.
Definition
CaloCalibHitFillerTool.cxx:93
D3PD::CaloCalibHitFillerTool::m_det
unsigned int * m_det
Definition
CaloCalibHitFillerTool.h:93
D3PD::CaloCalibHitFillerTool::m_e_em
float * m_e_em
Definition
CaloCalibHitFillerTool.h:87
D3PD::CaloCalibHitFillerTool::m_savetoten
bool m_savetoten
Definition
CaloCalibHitFillerTool.h:121
SG::ReadCondHandle
Definition
ReadCondHandle.h:40
SG::ReadCondHandle::isValid
bool isValid()
Definition
ReadCondHandle.h:205
ServiceHandle
Definition
ClusterMakerTool.h:36
D3PD
Block filler tool for noisy FEB information.
Definition
CaloCellDetailsFillerTool.cxx:29
Identifier
Definition
IdentifierFieldParser.cxx:14
type
Generated on
for ATLAS Offline Software by
1.17.0