ATLAS Offline Software
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 
12 #include "CaloInfoFillerTool.h"
13 #include "CaloEvent/CaloCell.h"
14 #include "CaloGeoHelpers/CaloSampling.h"
18 #include "StoreGate/StoreGateSvc.h"
22 #include "CaloIdentifier/TileID.h"
24 
25 #include <sstream>
26 
27 
28 namespace 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 
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 
149  *m_Nh_HAD += cellCont.nCellsCalo(CaloCell_ID::TILE);
150  *m_Nh_Calo += cellCont.nCellsCalo(CaloCell_ID::TILE);
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
D3PD::CaloInfoFillerTool::m_Nh_EM
int * m_Nh_EM
Definition: CaloInfoFillerTool.h:73
CaloCell_Base_ID::LARFCAL
@ LARFCAL
Definition: CaloCell_Base_ID.h:46
D3PD::CaloInfoFillerTool::m_Nh_EMEC
int * m_Nh_EMEC
Definition: CaloInfoFillerTool.h:85
CaloCell_ID_FCS::TileExt2
@ TileExt2
Definition: FastCaloSim_CaloCell_ID.h:39
LArEM_ID.h
constants.EMB1
int EMB1
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:53
ReadCellNoiseFromCool.cell
cell
Definition: ReadCellNoiseFromCool.py:53
CaloCell_ID_FCS::TileExt0
@ TileExt0
Definition: FastCaloSim_CaloCell_ID.h:37
CaloCell_ID_FCS::TileBar1
@ TileBar1
Definition: FastCaloSim_CaloCell_ID.h:32
CaloDetDescrElement
This class groups all DetDescr information related to a CaloCell. Provides a generic interface for al...
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:66
CaloInfoFillerTool.h
D3PD::CaloInfoFillerTool::CaloInfoFillerTool
CaloInfoFillerTool(const std::string &type, const std::string &name, const IInterface *parent)
Standard Gaudi tool constructor.
Definition: CaloInfoFillerTool.cxx:38
CaloCell_ID_FCS::FCAL1
@ FCAL1
Definition: FastCaloSim_CaloCell_ID.h:41
CaloCell.h
CaloCell_Base_ID::LARHEC
@ LARHEC
Definition: CaloCell_Base_ID.h:46
D3PD::AddVariable::addVariable
virtual StatusCode addVariable(const std::string &name, const std::type_info &ti, void *&ptr, const std::string &docstring="", const void *defval=0)
Add a variable to the tuple.
Definition: AddVariable.cxx:85
CaloCell_ID_FCS::HEC2
@ HEC2
Definition: FastCaloSim_CaloCell_ID.h:29
D3PD::CaloInfoFillerTool::m_Eh_FCal
std::vector< float > * m_Eh_FCal
Definition: CaloInfoFillerTool.h:101
D3PD::CaloInfoFillerTool::m_Eh_Calo
float * m_Eh_Calo
Definition: CaloInfoFillerTool.h:71
LArHEC_ID.h
D3PD::CaloInfoFillerTool::m_Eh_PresB
std::vector< float > * m_Eh_PresB
Definition: CaloInfoFillerTool.h:80
CaloCell_ID_FCS::TileGap3
@ TileGap3
Definition: FastCaloSim_CaloCell_ID.h:36
D3PD::CaloInfoFillerTool::m_Eh_HEC
std::vector< float > * m_Eh_HEC
Definition: CaloInfoFillerTool.h:98
D3PD::CaloInfoFillerTool::m_Eh_PresE
std::vector< float > * m_Eh_PresE
Definition: CaloInfoFillerTool.h:104
D3PD::CaloInfoFillerTool::m_Nh_HEC
int * m_Nh_HEC
Definition: CaloInfoFillerTool.h:97
D3PD::CaloInfoFillerTool::m_Nh_FCal
int * m_Nh_FCal
Definition: CaloInfoFillerTool.h:100
TileID.h
D3PD::CaloInfoFillerTool::m_Nh_Tile
int * m_Nh_Tile
Definition: CaloInfoFillerTool.h:88
CaloDetDescrElement::eta_raw
float eta_raw() const
cell eta_raw
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:350
D3PD::CaloInfoFillerTool::m_Eh_EMEC
std::vector< float > * m_Eh_EMEC
Definition: CaloInfoFillerTool.h:86
D3PD::CaloInfoFillerTool::m_Nh_HAD
int * m_Nh_HAD
Definition: CaloInfoFillerTool.h:76
CaloDetDescrElement::getSubCalo
CaloCell_ID::SUBCALO getSubCalo() const
cell subcalo
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:433
D3PD::CaloInfoFillerTool::m_Nh_TileGap
int * m_Nh_TileGap
Definition: CaloInfoFillerTool.h:91
CaloSamplingHelper.h
D3PD::CaloInfoFillerTool::m_Eh_HAD
float * m_Eh_HAD
Definition: CaloInfoFillerTool.h:77
D3PD
Block filler tool for noisy FEB information.
Definition: CaloCellDetailsFillerTool.cxx:29
D3PD::CaloInfoFillerTool::m_Nh_Calo
int * m_Nh_Calo
Definition: CaloInfoFillerTool.h:70
D3PD::CaloInfoFillerTool::m_Eh_EMB
std::vector< float > * m_Eh_EMB
Definition: CaloInfoFillerTool.h:83
CaloCell_ID_FCS::HEC1
@ HEC1
Definition: FastCaloSim_CaloCell_ID.h:28
constants.EMB2
int EMB2
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:54
D3PD::CaloInfoFillerTool::m_Eh_TileGap
std::vector< float > * m_Eh_TileGap
Definition: CaloInfoFillerTool.h:92
CaloCell_ID_FCS::TileBar0
@ TileBar0
Definition: FastCaloSim_CaloCell_ID.h:31
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
CaloCell_ID_FCS::TileGap2
@ TileGap2
Definition: FastCaloSim_CaloCell_ID.h:35
D3PD::CaloInfoFillerTool::m_Eh_Scint
std::vector< float > * m_Eh_Scint
Definition: CaloInfoFillerTool.h:95
CaloCell_Base_ID::SUBCALO
SUBCALO
enumeration of sub calorimeters
Definition: CaloCell_Base_ID.h:46
CaloCellContainer::nCellsCalo
int nCellsCalo(const CaloCell_ID::SUBCALO caloNum) const
get number of cels of given calorimeter
Definition: CaloCellContainer.cxx:145
test_pyathena.parent
parent
Definition: test_pyathena.py:15
constants.EME1
int EME1
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:55
D3PD::BlockFillerTool
Type-safe wrapper for block filler tools.
Definition: BlockFillerTool.h:68
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
CaloCell_Base_ID::TILE
@ TILE
Definition: CaloCell_Base_ID.h:46
CaloCell_ID_FCS::TileGap1
@ TileGap1
Definition: FastCaloSim_CaloCell_ID.h:34
D3PD::CaloInfoFillerTool::m_Nh_Scint
int * m_Nh_Scint
Definition: CaloInfoFillerTool.h:94
D3PD::CaloInfoFillerTool::fill
virtual StatusCode fill(const CaloCellContainer &p)
Fill one block — type-safe version.
Definition: CaloInfoFillerTool.cxx:94
D3PD::CaloInfoFillerTool::m_Nh_PresB
int * m_Nh_PresB
Definition: CaloInfoFillerTool.h:79
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
CaloCell_ID_FCS::TileExt1
@ TileExt1
Definition: FastCaloSim_CaloCell_ID.h:38
CaloCell_ID_FCS::EME3
@ EME3
Definition: FastCaloSim_CaloCell_ID.h:26
errorcheck.h
Helpers for checking error return status codes and reporting errors.
D3PD::CaloInfoFillerTool::m_posneg
int m_posneg
Definition: CaloInfoFillerTool.h:107
CaloCellContainer.h
CaloCellContainer
Container class for CaloCell.
Definition: CaloCellContainer.h:55
D3PD::CaloInfoFillerTool::m_Nh_EMB
int * m_Nh_EMB
Definition: CaloInfoFillerTool.h:82
CaloCell_ID_FCS::HEC0
@ HEC0
Definition: FastCaloSim_CaloCell_ID.h:27
LArFCAL_ID.h
CaloSamplingHelper::getSampling
static CaloSample getSampling(const CaloCell &c)
Retrieves the sampling indicator for a cell.
Definition: CaloEvent/src/CaloSamplingHelper.cxx:39
D3PD::CaloInfoFillerTool::book
virtual StatusCode book()
Book variables for this block.
Definition: CaloInfoFillerTool.cxx:54
CaloCell
Data object for each calorimeter readout cell.
Definition: CaloCell.h:57
D3PD::CaloInfoFillerTool::m_doEt
bool m_doEt
Definition: CaloInfoFillerTool.h:108
CaloCell_ID_FCS::PreSamplerE
@ PreSamplerE
Definition: FastCaloSim_CaloCell_ID.h:23
CaloCell_ID_FCS::PreSamplerB
@ PreSamplerB
Definition: FastCaloSim_CaloCell_ID.h:19
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
D3PD::CaloInfoFillerTool::m_Eh_Tile
std::vector< float > * m_Eh_Tile
Definition: CaloInfoFillerTool.h:89
CaloCell_ID_FCS::FCAL2
@ FCAL2
Definition: FastCaloSim_CaloCell_ID.h:42
D3PD::CaloInfoFillerTool::m_Eh_EM
float * m_Eh_EM
Definition: CaloInfoFillerTool.h:74
CaloCell_ID_FCS::HEC3
@ HEC3
Definition: FastCaloSim_CaloCell_ID.h:30
CaloCell_Base_ID::LAREM
@ LAREM
Definition: CaloCell_Base_ID.h:46
CaloCell_ID_FCS::FCAL0
@ FCAL0
Definition: FastCaloSim_CaloCell_ID.h:40
CaloCell_ID_FCS::EMB3
@ EMB3
Definition: FastCaloSim_CaloCell_ID.h:22
StoreGateSvc.h
CaloCell_ID_FCS::TileBar2
@ TileBar2
Definition: FastCaloSim_CaloCell_ID.h:33
D3PD::CaloInfoFillerTool::m_Nh_PresE
int * m_Nh_PresE
Definition: CaloInfoFillerTool.h:103
constants.EME2
int EME2
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:56
LArOnlineID.h