ATLAS Offline Software
Loading...
Searching...
No Matches
egammaNbCellsGainAlg.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: egammaNbCellsGainAlg.cxx 775880 2016-09-29 15:35:25Z ssnyder $
11
12
15#include "xAODEgamma/Egamma.h"
18
19
20
21namespace 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{
43 ATH_MSG_INFO(" Starting egammaNbCellsGainAlg" );
44
45 CHECK( AthAlgorithm::initialize() );
46 CHECK( m_getter.retrieve() );
47 CHECK( m_getter->configureD3PD<xAOD::Egamma>() );
48 return StatusCode::SUCCESS;
49}
50
51
56{
57 StatusCode sc = StatusCode::SUCCESS;
58
59 ATH_MSG_DEBUG( " In execute: Getting egamma Objects " );
60
61#define DECOR(TYPE,N) xAOD::Egamma::Decorator<TYPE> N (m_auxPrefix + #N)
62 DECOR(int, nbCells_s0LowGain);
63 DECOR(int, nbCells_s0MedGain);
64 DECOR(int, nbCells_s0HighGain);
65
66 DECOR(int, nbCells_s1LowGain);
67 DECOR(int, nbCells_s1MedGain);
68 DECOR(int, nbCells_s1HighGain);
69
70 DECOR(int, nbCells_s2LowGain);
71 DECOR(int, nbCells_s2MedGain);
72 DECOR(int, nbCells_s2HighGain);
73
74 DECOR(int, nbCells_s3LowGain);
75 DECOR(int, nbCells_s3MedGain);
76 DECOR(int, nbCells_s3HighGain);
77#undef DECOR
78
79 CHECK( m_getter->reset (m_allowMissing) );
80 while (const xAOD::Egamma* eg = m_getter->next<xAOD::Egamma>()){
81 const xAOD::CaloCluster *cluster = eg->caloCluster();
82
83 int cell_nbcells_gainlow[4];
84 int cell_nbcells_gainmed[4];
85 int cell_nbcells_gainhgh[4];
86
87 for(int i=0; i<4; i++){
88 cell_nbcells_gainlow[i]=0;
89 cell_nbcells_gainmed[i]=0;
90 cell_nbcells_gainhgh[i]=0;
91 }
92
93 ATH_MSG_DEBUG(" Checking Cluster " );
94
95 if(cluster){
96 if(cluster->getCellLinks()){
97
98 for (const CaloCell* cell : *cluster) {
99 int sampling = cell->caloDDE()->getSampling();
100 int layer = -1;
101 switch(sampling){
102 case CaloCell_ID::PreSamplerB:
103 case CaloCell_ID::PreSamplerE:
104 layer=0;
105 break;
106 case CaloCell_ID::EMB1:
107 case CaloCell_ID::EME1:
108 layer=1;
109 break;
110 case CaloCell_ID::EMB2:
111 case CaloCell_ID::EME2:
112 layer=2;
113 break;
114 case CaloCell_ID::EMB3:
115 case CaloCell_ID::EME3:
116 layer=3;
117 break;
118 default:
119 break;
120 }
121
122 if(layer < 0) continue;
123
124 switch(cell->gain()){
125 case 0: cell_nbcells_gainhgh[layer]++; break;
126 case 1: cell_nbcells_gainmed[layer]++; break;
127 case 2: cell_nbcells_gainlow[layer]++; break;
128 default: break;
129 }
130 }
131 }
132 }
133
134 nbCells_s0LowGain(*eg) = cell_nbcells_gainlow[0];
135 nbCells_s0MedGain(*eg) = cell_nbcells_gainmed[0];
136 nbCells_s0HighGain(*eg) = cell_nbcells_gainhgh[0];
137
138 nbCells_s1LowGain(*eg) = cell_nbcells_gainlow[1];
139 nbCells_s1MedGain(*eg) = cell_nbcells_gainmed[1];
140 nbCells_s1HighGain(*eg) = cell_nbcells_gainhgh[1];
141
142 nbCells_s2LowGain(*eg) = cell_nbcells_gainlow[2];
143 nbCells_s2MedGain(*eg) = cell_nbcells_gainmed[2];
144 nbCells_s2HighGain(*eg) = cell_nbcells_gainhgh[2];
145
146 nbCells_s3LowGain(*eg) = cell_nbcells_gainlow[3];
147 nbCells_s3MedGain(*eg) = cell_nbcells_gainmed[3];
148 nbCells_s3HighGain(*eg) = cell_nbcells_gainhgh[3];
149
150 m_getter->releaseElement (eg);
151 }
152
153 return sc;
154}
155}
#define ATH_MSG_INFO(x)
#define ATH_MSG_DEBUG(x)
Helpers for checking error return status codes and reporting errors.
#define CHECK(...)
Evaluate an expression and check for errors.
Abstract interface to get a collection of objects and iterate over it.
static Double_t sc
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Data object for each calorimeter readout cell.
Definition CaloCell.h:57
egammaNbCellsGainAlg(const std::string &name, ISvcLocator *svcloc)
Standard Gaudi algorithm constructor.
ToolHandle< ICollectionGetterTool > m_getter
Property: Getter for input egamma objects.
std::string m_auxPrefix
Property: Prefix to add to aux data items.
bool m_allowMissing
Property: If true, don't complain if input objects are missing.
virtual StatusCode execute()
Standard Gaudi execute method.
virtual StatusCode initialize()
Standard Gaudi initialize method.
const CaloClusterCellLink * getCellLinks() const
Get a pointer to the CaloClusterCellLink object (const version)
#define DECOR(TYPE, N)
Number of cells with given gain by layer.
Block filler tool for noisy FEB information.
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.
Egamma_v1 Egamma
Definition of the current "egamma version".
Definition Egamma.h:17