ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Calorimeter
CaloUtils
src
CaloCellList.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
// Given an input eta,phi, deta,dphi - this class will return you
6
// either an iterator over a list of cells (pointers) in this cone
7
// and the total cell energy of the cells in this cone.
8
// (11/10/2004) Method added: returns number of strips for an input
9
// eta,phi,ncell_eta,ncell_phi. The List of cells replaced by
10
// the Vector of cells.
11
12
#include "
CaloUtils/CaloCellList.h
"
13
#include "
CaloDetDescr/CaloDetDescrManager.h
"
14
#include "
CaloEvent/CaloCell.h
"
15
#include "
CaloEvent/CaloCellContainer.h
"
16
#include "CaloGeoHelpers/CaloSampling.h"
17
#include "
CaloGeoHelpers/proxim.h
"
18
19
#include <cmath>
20
21
namespace
{
22
inline
double
23
square(
double
x
)
24
{
25
return
x
*
x
;
26
}
27
}
28
29
CaloCellList::CaloCellList
(
const
CaloDetDescrManager
* mgr,
const
CaloCellContainer
* cell_container)
30
:
m_cellcont
(*cell_container)
31
,
m_mgr
(*mgr)
32
,
m_energy
(0)
33
,
m_et
(0)
34
{
35
m_caloNums
.clear();
36
// NSUBCALO indicate take them all
37
m_caloNums
.push_back(
CaloCell_ID::NSUBCALO
);
38
}
39
40
CaloCellList::CaloCellList
(
const
CaloDetDescrManager
& mgr,
const
CaloCellContainer
& cell_container)
41
:
m_cellcont
(cell_container)
42
,
m_mgr
(mgr)
43
,
m_energy
(0)
44
,
m_et
(0)
45
{
46
m_caloNums
.clear();
47
// NSUBCALO indicate take them all
48
m_caloNums
.push_back(
CaloCell_ID::NSUBCALO
);
49
}
50
51
// specify one calo number
52
CaloCellList::CaloCellList
(
const
CaloDetDescrManager
* mgr,
const
CaloCellContainer
* cell_container,
const
CaloCell_ID::SUBCALO
caloNum)
53
:
m_cellcont
(*cell_container)
54
,
m_mgr
(*mgr)
55
,
m_energy
(0)
56
,
m_et
(0)
57
{
58
m_caloNums
.clear();
59
m_caloNums
.push_back(caloNum);
60
}
61
62
// specify a vector of calonumber
63
// (if all calo it is more efficient to not specify anything)
64
CaloCellList::CaloCellList
(
const
CaloDetDescrManager
* mgr,
const
CaloCellContainer
* cell_container,
65
const
std::vector<CaloCell_ID::SUBCALO>& caloNums)
66
:
m_cellcont
(*cell_container)
67
,
m_mgr
(*mgr)
68
,
m_energy
(0)
69
,
m_et
(0)
70
71
{
72
m_caloNums
.clear();
73
std::copy(caloNums.begin(), caloNums.end(), back_inserter(
m_caloNums
));
74
}
75
76
CaloCellList::CaloCellList
(
const
CaloSuperCellDetDescrManager
* mgr,
const
CaloCellContainer
* cell_container)
77
:
m_cellcont
(*cell_container)
78
,
m_mgr
(*mgr)
79
,
m_energy
(0)
80
,
m_et
(0)
81
{
82
m_caloNums
.clear();
83
// NSUBCALO indicate take them all
84
m_caloNums
.push_back(
CaloCell_ID::NSUBCALO
);
85
}
86
87
88
void
89
CaloCellList::select
(
double
eta
,
double
phi
,
double
deta,
double
dphi)
90
{
91
doSelect
(
eta
,
phi
, deta, dphi, -1);
92
}
93
94
void
95
CaloCellList::select
(
double
eta
,
double
phi
,
double
deta,
double
dphi,
int
sam)
96
{
97
doSelect
(
eta
,
phi
, deta, dphi, -1,
static_cast<
CaloCell_ID::CaloSample
>
(sam));
98
}
99
100
void
101
CaloCellList::select
(
double
eta
,
double
phi
,
double
dR)
102
{
103
doSelect
(
eta
,
phi
, dR, dR, dR);
104
}
105
106
void
107
CaloCellList::select
(
double
eta
,
double
phi
,
double
dR,
int
sam)
108
{
109
doSelect
(
eta
,
phi
, dR, dR, dR,
static_cast<
CaloCell_ID::CaloSample
>
(sam));
110
}
111
112
void
113
CaloCellList::doSelect
(
double
eta
,
114
double
phi
,
115
double
deta,
116
double
dphi,
117
double
dR,
118
CaloCell_ID::CaloSample
sam
/*= CaloCell_ID::Unknown*/
)
119
{
120
121
m_theCellVector
.clear();
122
m_energy
= 0;
123
m_et
= 0;
124
m_nBadT0
= 0;
125
m_nBadT12
= 0;
126
if
(
m_cellcont
.empty()){
127
return
;
128
}
129
std::vector<IdentifierHash> calo_mgr_vect;
130
std::vector<CaloCell_ID::SUBCALO>::const_iterator itrCaloNum =
m_caloNums
.begin();
131
std::vector<CaloCell_ID::SUBCALO>::const_iterator itrEndCaloNum =
m_caloNums
.end();
132
133
double
dR2 = dR*dR;
134
135
for
(; itrCaloNum != itrEndCaloNum; ++itrCaloNum) {
136
CaloCell_ID::SUBCALO
caloNum = *itrCaloNum;
137
if
(sam != CaloCell_ID::Unknown) {
138
m_mgr
.cellsInZone(
eta
- deta,
eta
+ deta,
phi
- dphi,
phi
+ dphi, sam, calo_mgr_vect);
139
itrCaloNum = itrEndCaloNum - 1;
140
}
else
if
(caloNum ==
CaloCell_ID::NSUBCALO
) {
141
m_mgr
.cellsInZone(
eta
- deta,
eta
+ deta,
phi
- dphi,
phi
+ dphi, calo_mgr_vect);
142
}
else
if
(caloNum !=
CaloCell_ID::NOT_VALID
) {
143
m_mgr
.cellsInZone(
eta
- deta,
eta
+ deta,
phi
- dphi,
phi
+ dphi, caloNum, calo_mgr_vect);
144
}
else
{
145
continue
;
146
}
147
m_theCellVector
.reserve(
m_theCellVector
.size() + calo_mgr_vect.size());
148
149
for
(
unsigned
int
i = 0; i < calo_mgr_vect.size(); i++) {
150
const
CaloCell
* cell =
m_cellcont
.findCell(calo_mgr_vect[i]);
151
if
(cell) {
152
double
pphi =
proxim
(cell->phi(),
phi
);
153
if
( (dR > 0 && square(
eta
- cell->eta()) + square(pphi -
phi
) < dR2) ||
154
(dR < 0 && std::fabs(
eta
- cell->eta()) < deta && std::fabs(
phi
- pphi) < dphi) ) {
155
m_theCellVector
.push_back(cell);
156
m_energy
+= cell->energy();
157
m_et
+= cell->et();
158
if
(cell->badcell()) {
159
if
(sam == CaloCell_ID::TileBar0 || sam == CaloCell_ID::TileExt0)
160
m_nBadT0
++;
161
else
if
(sam == CaloCell_ID::TileBar1 || sam == CaloCell_ID::TileExt1 ||
162
sam == CaloCell_ID::TileBar2 || sam == CaloCell_ID::TileExt2 ||
163
sam == CaloCell_ID::TileGap1 || sam == CaloCell_ID::TileGap2)
164
m_nBadT12
++;
165
}
166
}
167
}
168
}
169
}
// end loop on calorimeters
170
}
171
eta
Scalar eta() const
pseudorapidity method
Definition
AmgMatrixBasePlugin.h:83
phi
Scalar phi() const
phi method
Definition
AmgMatrixBasePlugin.h:67
CaloCellContainer.h
CaloCellList.h
CaloCell.h
CaloDetDescrManager.h
Definition of CaloDetDescrManager.
x
#define x
CaloCellContainer
Container class for CaloCell.
Definition
CaloCellContainer.h:55
CaloCellList::doSelect
void doSelect(double eta, double phi, double deta, double dphi, double dR, CaloCell_ID::CaloSample sam=CaloCell_ID::Unknown)
Definition
CaloCellList.cxx:113
CaloCellList::m_theCellVector
vector_type m_theCellVector
Definition
CaloCellList.h:82
CaloCellList::m_nBadT0
unsigned short m_nBadT0
Definition
CaloCellList.h:85
CaloCellList::CaloCellList
CaloCellList()=delete
CaloCellList::m_cellcont
const CaloCellContainer & m_cellcont
Definition
CaloCellList.h:79
CaloCellList::m_mgr
const CaloDetDescrManager_Base & m_mgr
Definition
CaloCellList.h:80
CaloCellList::select
void select(double eta, double phi, double deta, double dphi)
Definition
CaloCellList.cxx:89
CaloCellList::m_nBadT12
unsigned short m_nBadT12
Definition
CaloCellList.h:85
CaloCellList::m_energy
double m_energy
Definition
CaloCellList.h:83
CaloCellList::m_et
double m_et
Definition
CaloCellList.h:84
CaloCellList::m_caloNums
std::vector< CaloCell_ID::SUBCALO > m_caloNums
Definition
CaloCellList.h:81
CaloCell_Base_ID::NOT_VALID
@ NOT_VALID
Definition
CaloCell_Base_ID.h:45
CaloCell_Base_ID::NSUBCALO
@ NSUBCALO
Definition
CaloCell_Base_ID.h:45
CaloCell_ID::SUBCALO
CaloCell_Base_ID::SUBCALO SUBCALO
Definition
CaloCell_ID.h:50
CaloCell_ID::CaloSample
CaloSampling::CaloSample CaloSample
Definition
CaloCell_ID.h:53
CaloCell
Data object for each calorimeter readout cell.
Definition
CaloCell.h:57
CaloDetDescrManager
This class provides the client interface for accessing the detector description information common to...
Definition
CaloDetDescrManager.h:469
CaloSuperCellDetDescrManager
Definition
CaloDetDescrManager.h:486
proxim.h
proxim
double proxim(double b, double a)
Definition
proxim.h:17
Generated on
for ATLAS Offline Software by
1.17.0