ATLAS Offline Software
egammaSumCellsGainAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // $Id: egammaSumCellsGainAlg.cxx 775880 2016-09-29 15:35:25Z ssnyder $
14 #include "egammaSumCellsGainAlg.h"
16 #include "xAODEgamma/Egamma.h"
19 
20 
21 namespace D3PD {
22 
23 
25  ISvcLocator* svcloc)
26  : AthAlgorithm (name, svcloc),
27  m_getter (this)
28 {
29  declareProperty ("AuxPrefix", m_auxPrefix,
30  "Prefix to add to aux data items.");
31  declareProperty ("AllowMissing", m_allowMissing = false,
32  "If true, don't complain if input objects are missing.");
33  declareProperty ("Getter", m_getter,
34  "Getter instance for the input egamma objects.");
35 }
36 
37 
42 {
44  CHECK( m_getter.retrieve() );
45  CHECK( m_getter->configureD3PD<xAOD::Egamma>() );
46  return StatusCode::SUCCESS;
47 }
48 
49 
54 {
55  StatusCode sc = StatusCode::SUCCESS;
56 
57  ATH_MSG_DEBUG( " In execute: Getting egamma Objects " );
58 
59 #define DECOR(TYPE,N) xAOD::Egamma::Decorator<TYPE> N (m_auxPrefix + #N)
60  DECOR (float, Es0LowGain);
61  DECOR (float, Es0MedGain);
62  DECOR (float, Es0HighGain);
63 
64  DECOR (float, Es1LowGain);
65  DECOR (float, Es1MedGain);
66  DECOR (float, Es1HighGain);
67 
68  DECOR (float, Es2LowGain);
69  DECOR (float, Es2MedGain);
70  DECOR (float, Es2HighGain);
71 
72  DECOR (float, Es3LowGain);
73  DECOR (float, Es3MedGain);
74  DECOR (float, Es3HighGain);
75 #undef DECOR
76 
77  CHECK( m_getter->reset (m_allowMissing) );
78  while (const xAOD::Egamma* eg = m_getter->next<xAOD::Egamma>()){
79  const xAOD::CaloCluster *cluster = eg->caloCluster();
80 
81  float cell_sum_energy_gainlow[4];
82  float cell_sum_energy_gainmed[4];
83  float cell_sum_energy_gainhgh[4];
84  for(int i=0; i<4; i++){
85  cell_sum_energy_gainlow[i]=0;
86  cell_sum_energy_gainmed[i]=0;
87  cell_sum_energy_gainhgh[i]=0;
88  }
89 
90  ATH_MSG_DEBUG(" Checking Cluster " );
91 
92  if(cluster) {
93  if(cluster->getCellLinks()) {
94 
95  for (const CaloCell* cell : *cluster) {
96  int sampling = cell->caloDDE()->getSampling();
97  int layer = -1;
98  switch(sampling){
101  layer=0;
102  break;
103  case CaloCell_ID::EMB1:
104  case CaloCell_ID::EME1:
105  layer=1;
106  break;
107  case CaloCell_ID::EMB2:
108  case CaloCell_ID::EME2:
109  layer=2;
110  break;
111  case CaloCell_ID::EMB3:
112  case CaloCell_ID::EME3:
113  layer=3;
114  break;
115  default:
116  break;
117  }
118 
119  if(layer < 0) continue;
120 
121  switch(cell->gain()){
122  case 0: cell_sum_energy_gainhgh[layer] += cell->energy(); break;
123  case 1: cell_sum_energy_gainmed[layer] += cell->energy(); break;
124  case 2: cell_sum_energy_gainlow[layer] += cell->energy(); break;
125  default: break;
126  }
127  }
128  }
129  }
130 
131  Es0LowGain(*eg) = cell_sum_energy_gainlow[0];
132  Es0MedGain(*eg) = cell_sum_energy_gainmed[0];
133  Es0HighGain(*eg) = cell_sum_energy_gainhgh[0];
134 
135  Es1LowGain(*eg) = cell_sum_energy_gainlow[1];
136  Es1MedGain(*eg) = cell_sum_energy_gainmed[1];
137  Es1HighGain(*eg) = cell_sum_energy_gainhgh[1];
138 
139  Es2LowGain(*eg) = cell_sum_energy_gainlow[2];
140  Es2MedGain(*eg) = cell_sum_energy_gainmed[2];
141  Es2HighGain(*eg) = cell_sum_energy_gainhgh[2];
142 
143  Es3LowGain(*eg) = cell_sum_energy_gainlow[3];
144  Es3MedGain(*eg) = cell_sum_energy_gainmed[3];
145  Es3HighGain(*eg) = cell_sum_energy_gainhgh[3];
146 
147  m_getter->releaseElement (eg);
148  }
149 
150  return sc;
151 }
152 
153 
154 } // namespace D3PD
constants.EMB1
int EMB1
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:53
ReadCellNoiseFromCool.cell
cell
Definition: ReadCellNoiseFromCool.py:53
ParticleTest.eg
eg
Definition: ParticleTest.py:29
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
initialize
void initialize()
Definition: run_EoverP.cxx:894
D3PD::egammaSumCellsGainAlg::egammaSumCellsGainAlg
egammaSumCellsGainAlg(const std::string &name, ISvcLocator *svcloc)
Standard Gaudi algorithm constructor.
Definition: egammaSumCellsGainAlg.cxx:24
ICollectionGetterTool.h
Abstract interface to get a collection of objects and iterate over it.
xAOD::Egamma_v1
Definition: Egamma_v1.h:56
D3PD::egammaSumCellsGainAlg::m_auxPrefix
std::string m_auxPrefix
Property: Prefix to add to aux data items.
Definition: egammaSumCellsGainAlg.h:57
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
Egamma.h
xAOD::CaloCluster_v1
Description of a calorimeter cluster.
Definition: CaloCluster_v1.h:59
D3PD
Block filler tool for noisy FEB information.
Definition: InnerDetector/InDetMonitoring/InDetGlobalMonitoring/macros/EnhancedPrimaryVertexMonitoring/TrigD3PD/ChainGroup.h:21
D3PD::egammaSumCellsGainAlg::initialize
virtual StatusCode initialize()
Standard Gaudi initialize method.
Definition: egammaSumCellsGainAlg.cxx:41
constants.EMB2
int EMB2
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:54
lumiFormat.i
int i
Definition: lumiFormat.py:92
CaloCluster.h
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
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
constants.EME1
int EME1
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:55
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
xAOD::CaloCluster_v1::getCellLinks
const CaloClusterCellLink * getCellLinks() const
Get a pointer to the CaloClusterCellLink object (const version)
Definition: CaloCluster_v1.cxx:905
AthAlgorithm
Definition: AthAlgorithm.h:47
D3PD::egammaSumCellsGainAlg::m_getter
ToolHandle< ICollectionGetterTool > m_getter
Property: Getter for input egamma objects.
Definition: egammaSumCellsGainAlg.h:60
D3PD::egammaSumCellsGainAlg::execute
virtual StatusCode execute()
Standard Gaudi execute method.
Definition: egammaSumCellsGainAlg.cxx:53
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
CaloCell_ID_FCS::EME3
@ EME3
Definition: FastCaloSim_CaloCell_ID.h:26
errorcheck.h
Helpers for checking error return status codes and reporting errors.
egammaSumCellsGainAlg.h
Sum cell energies with given gain.
CaloCell
Data object for each calorimeter readout cell.
Definition: CaloCell.h:57
CaloCell_ID_FCS::PreSamplerE
@ PreSamplerE
Definition: FastCaloSim_CaloCell_ID.h:23
CaloCell_ID_FCS::PreSamplerB
@ PreSamplerB
Definition: FastCaloSim_CaloCell_ID.h:19
D3PD::egammaSumCellsGainAlg::m_allowMissing
bool m_allowMissing
Property: If true, don't complain if input objects are missing.
Definition: egammaSumCellsGainAlg.h:63
DECOR
#define DECOR(TYPE, N)
CaloCell_ID_FCS::EMB3
@ EMB3
Definition: FastCaloSim_CaloCell_ID.h:22
constants.EME2
int EME2
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:56