ATLAS Offline Software
Loading...
Searching...
No Matches
CaloInfoFillerTool.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#include "CaloInfoFillerTool.h"
13#include "CaloEvent/CaloCell.h"
14#include "CaloGeoHelpers/CaloSampling.h"
24
25#include <sstream>
26
27
28namespace D3PD {
29
30
38 (const std::string& type,
39 const std::string& name,
40 const IInterface* parent)
42{
43
44 declareProperty("PosNeg",m_posneg = 0);
45 declareProperty("DoEt",m_doEt = 0);
46
47 CaloInfoFillerTool::book().ignore(); // Avoid coverity warnings
48}
49
50
55{
56
57 CHECK( addVariable("Nh_Calo",m_Nh_Calo));
58 CHECK( addVariable("Eh_Calo",m_Eh_Calo));
59 CHECK( addVariable("Nh_EM",m_Nh_EM));
60 CHECK( addVariable("Eh_EM",m_Eh_EM));
61 CHECK( addVariable("Nh_HAD",m_Nh_HAD));
62 CHECK( addVariable("Eh_HAD",m_Eh_HAD));
63 CHECK( addVariable("Nh_PresB",m_Nh_PresB));
64 CHECK( addVariable("Eh_PresB",m_Eh_PresB));
65 CHECK( addVariable("Nh_EMB",m_Nh_EMB));
66 CHECK( addVariable("Eh_EMB",m_Eh_EMB));
67 CHECK( addVariable("Nh_EMEC",m_Nh_EMEC));
68 CHECK( addVariable("Eh_EMEC",m_Eh_EMEC));
69 CHECK( addVariable("Nh_Tile",m_Nh_Tile));
70 CHECK( addVariable("Eh_Tile",m_Eh_Tile));
71 CHECK( addVariable("Nh_TileGap",m_Nh_TileGap));
72 CHECK( addVariable("Eh_TileGap",m_Eh_TileGap));
73 CHECK( addVariable("Nh_HEC",m_Nh_HEC));
74 CHECK( addVariable("Eh_HEC",m_Eh_HEC));
75 CHECK( addVariable("Nh_FCal",m_Nh_FCal));
76 CHECK( addVariable("Eh_FCal",m_Eh_FCal));
77 CHECK( addVariable("Nh_PresE",m_Nh_PresE));
78 CHECK( addVariable("Eh_PresE",m_Eh_PresE));
79 CHECK( addVariable("Nh_Scint",m_Nh_Scint));
80 CHECK( addVariable("Eh_Scint",m_Eh_Scint));
81
82 return StatusCode::SUCCESS;
83}
84
85
94StatusCode CaloInfoFillerTool::fill (const CaloCellContainer& cellCont)
95{
96 *m_Nh_EM=0 ;
97 *m_Nh_HAD=0 ;
98 *m_Nh_PresB=0 ;
99 *m_Nh_PresE=0 ;
100 *m_Nh_EMB=0 ;
101 *m_Nh_EMEC=0 ;
102 *m_Nh_Tile=0 ;
103 *m_Nh_TileGap=0 ;
104 *m_Nh_Scint=0 ;
105 *m_Nh_HEC=0 ;
106 *m_Nh_FCal=0 ;
107 *m_Eh_Calo=0. ;
108 *m_Eh_EM=0. ;
109 *m_Eh_HAD=0. ;
110
111 m_Eh_PresB->clear();
112 m_Eh_PresB->resize(1,0.);
113
114 m_Eh_EMB->clear() ;
115 m_Eh_EMB->resize(3,0.);
116
117
118 m_Eh_EMEC->clear() ;
119 m_Eh_EMEC->resize(3,0.);
120
121 m_Eh_Tile->clear() ;
122 m_Eh_Tile->resize(4,0.);
123
124 m_Eh_TileGap->clear() ;
125 m_Eh_TileGap->resize(1,0.);
126
127 m_Eh_HEC->clear() ;
128 m_Eh_HEC->resize(4,0.);
129
130 m_Eh_FCal->clear() ;
131 m_Eh_FCal->resize(3,0.);
132
133 m_Eh_PresE->clear() ;
134 m_Eh_PresE->resize(1,0.);
135
136 m_Eh_Scint->clear() ;
137 m_Eh_Scint->resize(1,0.);
138
141
142
145
148
151
152 for (const CaloCell* cell : cellCont)
153 {
154 double theCellE=cell->energy();
155 if (m_doEt) theCellE *= cell->sinTh(); // calculate a basic Et
156
157 int inum = CaloSamplingHelper::getSampling( *cell );
158
159 const CaloDetDescrElement * caloDDE=cell->caloDDE();
160
161 // check if only one side is requested.
162 if ( ( m_posneg==-1 && caloDDE->eta_raw()>0 ) || ( m_posneg==1 && caloDDE->eta_raw()<0 ) )
163 continue ;
164
165 *m_Eh_Calo += theCellE ;
166
167 CaloCell_ID::SUBCALO theSUBCALO = caloDDE->getSubCalo() ;
168
169 // count EM energy separately
170 if (theSUBCALO==CaloCell_ID::LAREM) {
171 *m_Eh_EM += theCellE;
172 }
173 else {
174 *m_Eh_HAD += theCellE;
175 }
176
177 //now layer per layer energy
178 if (CaloSampling::PreSamplerB == inum) {
179 *m_Nh_PresB += 1;
180 (*m_Eh_PresB)[0] += theCellE;
181 }
182 else if (CaloSampling::PreSamplerE == inum) {
183 *m_Nh_PresE += 1;
184 (*m_Eh_PresE)[0] += theCellE;
185 }
186 else if (CaloSampling::EMB1 == inum || CaloSampling::EMB2 == inum
187 || CaloSampling::EMB3 == inum) {
188 *m_Nh_EMB += 1;
189 if (CaloSampling::EMB1 == inum) (*m_Eh_EMB)[0] += theCellE;
190 if (CaloSampling::EMB2 == inum) (*m_Eh_EMB)[1] += theCellE;
191 if (CaloSampling::EMB3 == inum) (*m_Eh_EMB)[2] += theCellE;
192 }
193 else if (CaloSampling::EME1 == inum || CaloSampling::EME2 == inum
194 || CaloSampling::EME3 == inum) {
195 *m_Nh_EMEC += 1;
196 if (CaloSampling::EME1 == inum) (*m_Eh_EMEC)[0] += theCellE;
197 if (CaloSampling::EME2 == inum) (*m_Eh_EMEC)[1] += theCellE;
198 if (CaloSampling::EME3 == inum) (*m_Eh_EMEC)[2] += theCellE;
199 }
200 else if (CaloSampling::TileBar0 == inum ||
201 CaloSampling::TileBar1 == inum ||
202 CaloSampling::TileBar2 == inum ||
203 CaloSampling::TileExt0 == inum ||
204 CaloSampling::TileExt1 == inum ||
205 CaloSampling::TileExt2 == inum ) {
206 *m_Nh_Tile += 1;
207 if (CaloSampling::TileBar0 == inum ||
208 CaloSampling::TileExt0 == inum )
209 (*m_Eh_Tile)[0] += theCellE;
210 if (CaloSampling::TileBar1 == inum ||
211 CaloSampling::TileExt1 == inum )
212 (*m_Eh_Tile)[1] += theCellE;
213 if (CaloSampling::TileBar2 == inum ||
214 CaloSampling::TileExt2 == inum )
215 (*m_Eh_Tile)[2] += theCellE;
216 }
217 else if (CaloSampling::TileGap1 == inum ||
218 CaloSampling::TileGap2 == inum ||
219 CaloSampling::TileGap3 == inum ) {
220 *m_Nh_TileGap += 1;
221 (*m_Eh_TileGap)[0] += theCellE;
222 if (CaloSampling::TileGap3 == inum ) {
223 *m_Nh_Scint += 1;
224 (*m_Eh_Scint)[0] += theCellE;
225 }
226 }
227 else if (CaloSampling::HEC0 == inum ||
228 CaloSampling::HEC1 == inum ||
229 CaloSampling::HEC2 == inum ||
230 CaloSampling::HEC3 == inum ) {
231 *m_Nh_HEC += 1;
232 if (CaloSampling::HEC0 == inum ) (*m_Eh_HEC)[0] += theCellE;
233 if (CaloSampling::HEC1 == inum ) (*m_Eh_HEC)[1] += theCellE;
234 if (CaloSampling::HEC2 == inum ) (*m_Eh_HEC)[2] += theCellE;
235 if (CaloSampling::HEC3 == inum ) (*m_Eh_HEC)[3] += theCellE;
236 }
237 else if (CaloSampling::FCAL0 == inum ||
238 CaloSampling::FCAL1 == inum ||
239 CaloSampling::FCAL2 == inum ) {
240 *m_Nh_FCal += 1;
241 if (CaloSampling::FCAL0 == inum ) (*m_Eh_FCal)[0] += theCellE;
242 if (CaloSampling::FCAL1 == inum ) (*m_Eh_FCal)[1] += theCellE;
243 if (CaloSampling::FCAL2 == inum ) (*m_Eh_FCal)[2] += theCellE;
244 }
245 }
246
247 ATH_MSG_DEBUG(" EM Cell hits: "<< *m_Nh_EM );
248 ATH_MSG_DEBUG(" total energy in EM: "<< *m_Eh_EM );
249 ATH_MSG_DEBUG(" total energy in EM barrel PS: "<< (*m_Eh_PresB)[0] );
250 ATH_MSG_DEBUG(" total energy in EM endcap PS "<< (*m_Eh_PresE)[0] );
251
252 ATH_MSG_DEBUG(" HAD Cell hits: "<< *m_Nh_HAD );
253 ATH_MSG_DEBUG(" total energy in HAD: "<< *m_Eh_HAD );
254
255 return StatusCode::SUCCESS;
256}
257
258
259} // namespace D3PD
#define ATH_MSG_DEBUG(x)
Helpers for checking error return status codes and reporting errors.
#define CHECK(...)
Evaluate an expression and check for errors.
Container class for CaloCell.
int nCellsCalo(const CaloCell_ID::SUBCALO caloNum) const
get number of cels of given calorimeter
CaloCell_Base_ID::SUBCALO SUBCALO
Definition CaloCell_ID.h:50
Data object for each calorimeter readout cell.
Definition CaloCell.h:57
This class groups all DetDescr information related to a CaloCell.
static CaloSample getSampling(const CaloCell &c)
Retrieves the sampling indicator for a cell.
virtual StatusCode addVariable(const std::string &name, const std::type_info &ti, void *&ptr, const std::string &docstring="", const void *defval=0)
Type-safe wrapper for block filler tools.
std::vector< float > * m_Eh_EMB
std::vector< float > * m_Eh_TileGap
std::vector< float > * m_Eh_Scint
std::vector< float > * m_Eh_Tile
virtual StatusCode book()
Book variables for this block.
std::vector< float > * m_Eh_EMEC
std::vector< float > * m_Eh_PresE
virtual StatusCode fill(const CaloCellContainer &p)
Fill one block — type-safe version.
std::vector< float > * m_Eh_FCal
std::vector< float > * m_Eh_HEC
CaloInfoFillerTool(const std::string &type, const std::string &name, const IInterface *parent)
Standard Gaudi tool constructor.
std::vector< float > * m_Eh_PresB
Block filler tool for noisy FEB information.