Function executing the algorithm.
55 {
56
57
58 SG::ReadHandle<CaloCellContainer> ScellContainer(
m_SCellKey, ctx);
59 if(!ScellContainer.isValid()) {
60 ATH_MSG_FATAL(
"Could not retrieve collection " << ScellContainer.key() );
61 return StatusCode::FAILURE;
62 }
63
64
65 SG::ReadHandle<xAOD::TriggerTowerContainer> triggerTowerContainer(
m_triggerTowerKey, ctx);
66 if(!triggerTowerContainer.isValid()) {
67 ATH_MSG_FATAL(
"Could not retrieve collection " << triggerTowerContainer.key() );
68 return StatusCode::FAILURE;
69 }
70
71
72 SG::ReadHandle<xAOD::gFexTowerContainer> gTowerContainer(
m_gTowersReadKey, ctx);
73 if(!gTowerContainer.isValid()) {
74 ATH_MSG_FATAL(
"Could not retrieve collection " << gTowerContainer.key() );
75 return StatusCode::FAILURE;
76 }
77
78 if(ScellContainer->empty() || triggerTowerContainer->empty() || gTowerContainer->empty() ){
79 ATH_MSG_WARNING(
"Nothing to decorate here, at least one container is empty. ScellContainer.size="<<ScellContainer->size() <<
" or gTowerContainer.size=" << gTowerContainer->size() <<
" or triggerTowerContainer.size=" << triggerTowerContainer->size() );
80 return StatusCode::SUCCESS;
81 }
82
83
84 std::unordered_map< uint64_t, const CaloCell*> map_ScellID2ptr;
85
86 for(const CaloCell* scell : *ScellContainer){
88 map_ScellID2ptr[
ID] = scell;
89 }
90
91
92 std::unordered_map< uint32_t, const xAOD::TriggerTower*> map_TileID2ptr;
93
95
96
97 if(std::abs(tower->eta())>1.5 || tower->sampling()!=1) continue;
98 map_TileID2ptr[tower->coolId()]=tower;
99 }
100
101
102 SG::WriteDecorHandle<xAOD::gFexTowerContainer, std::vector<float> > gTowerSCellEt (
m_gSCellEtdecorKey , ctx);
103 SG::WriteDecorHandle<xAOD::gFexTowerContainer, std::vector<float> > gTowerSCellEta (
m_gSCellEtadecorKey , ctx);
104 SG::WriteDecorHandle<xAOD::gFexTowerContainer, std::vector<float> > gTowerSCellPhi (
m_gSCellPhidecorKey , ctx);
105 SG::WriteDecorHandle<xAOD::gFexTowerContainer, std::vector<int> > gTowerSCellID (
m_gSCellIDdecorKey , ctx);
106 SG::WriteDecorHandle<xAOD::gFexTowerContainer, std::vector<int> > gTowerSCellSample(
m_gSCellSampledecorKey , ctx);
108 SG::WriteDecorHandle<xAOD::gFexTowerContainer, int > gTowerSCEtEncoded(
m_gTowerEtdecorKey , ctx);
109 SG::WriteDecorHandle<xAOD::gFexTowerContainer, std::vector<int> > gTowerTileEt (
m_gTileEtMeVdecorKey , ctx);
110 SG::WriteDecorHandle<xAOD::gFexTowerContainer, std::vector<int> > gTowerTileID (
m_gTileEtMeVdecorKey , ctx);
111 SG::WriteDecorHandle<xAOD::gFexTowerContainer, std::vector<float> > gTowerTileEta (
m_gTileEtadecorKey , ctx);
112 SG::WriteDecorHandle<xAOD::gFexTowerContainer, std::vector<float> > gTowerTilePhi (
m_gTilePhidecorKey , ctx);
113
114
116
117 uint32_t gFexID = gTower->gFEXtowerID();
118 uint16_t gFexEt = gTower->towerEt();
120
121 std::vector<float> scEt;
122 std::vector<float> scEta;
123 std::vector<float> scPhi;
124 std::vector<int> scID;
125 std::vector<int> scSample;
126
127 std::vector<int> TileEt;
128 std::vector<float> TileEta;
129 std::vector<float> TilePhi;
130 std::vector<int> TileID;
131
132
135 ATH_MSG_ERROR(
"ID: "<<gFexID<<
" not found on map m_map_TTower2SCells");
136 return StatusCode::FAILURE;
137 }
138
139 for (auto const& SCellID : it_TTower2SCells->second ) {
140
141
142 auto it_ScellID2ptr = map_ScellID2ptr.find(SCellID);
143 if(it_ScellID2ptr == map_ScellID2ptr.end()) {
144 ATH_MSG_WARNING(
"Scell ID: 0x"<<std::hex<<(SCellID >> 32)<<std::dec<<
" not found on map map_ScellID2ptr");
145
146 scEt.push_back(-9999);
147 scEta.push_back(-99);
148 scPhi.push_back(-99);
149
150 scID.push_back( SCellID >> 32 );
151 scSample.push_back(-99);
152
153 }
154
155 else{
156
157 const CaloCell* myCell = it_ScellID2ptr->second;
158 float et = myCell->
et();
160
161
162
163 int prov = (myCell)->provenance();
164 int SCprov = prov&0xFFF;
165 bool isMasked = (SCprov&0x80)==0x80;
167
169 scEta.push_back(myCell->
eta());
170 scPhi.push_back(myCell->
phi());
171
172 scID.push_back( SCellID >> 32 );
173 scSample.push_back(sample);
174
175 }
176 }
177
178
179 float tmpSCellEt = 0;
180 for(const auto& tmpet : scEt){
181 tmpSCellEt += tmpet;
182 }
183
185
186
187 gTowerSCellEt (*gTower) = std::move(scEt);
188 gTowerSCellEta (*gTower) = std::move(scEta);
189 gTowerSCellPhi (*gTower) = std::move(scPhi);
190 gTowerSCellID (*gTower) = std::move(scID);
191 gTowerSCellSample (*gTower) = std::move(scSample);
192 gTowerEtMeV (*gTower) = gFexEt * 200;
193 gTowerSCEtEncoded (*gTower) = scSumEtEncoded;
194
195
197
199 continue;
200 }
201
202 for (auto const& TileTowerID : it_TTower2Tile->second ) {
203
204
205 auto it_TileID2ptr = map_TileID2ptr.find(TileTowerID);
206 if(it_TileID2ptr == map_TileID2ptr.end()) {
207
208 ATH_MSG_WARNING(
"Tile ID: "<<TileID<<std::dec<<
" not found on map map_TileID2ptr");
209
210 TileEt.push_back(-9999);
211 TileEta.push_back(-99);
212 TilePhi.push_back(-99);
213 TileID.push_back(-99);
214 }
215 else{
216
218 TileEt.push_back(tileTower->
jepET()*1000);
219 TileEta.push_back(tileTower->
eta());
221 TilePhi.push_back(
phi);
222 TileID.push_back(TileTowerID);
223
224 }
225
226
227 }
228
229
230
231 gTowerTileEt (*gTower) = std::move(TileEt);
232 gTowerTileID (*gTower) = std::move(TileID);
233 gTowerTileEta (*gTower) = std::move(TileEta);
234 gTowerTilePhi (*gTower) = std::move(TilePhi);
235 }
236
237
238 return StatusCode::SUCCESS;
239}
Scalar phi() const
phi method
#define ATH_MSG_WARNING(x)
std::vector< Identifier > ID
float et(const xAOD::jFexSRJetRoI *j)
virtual double phi() const override final
get phi (through CaloDetDescrElement)
virtual double eta() const override final
get eta (through CaloDetDescrElement)
virtual double et() const override final
get et
static unsigned int compress(float Energy)
Compress data.
SG::WriteDecorHandleKey< xAOD::gFexTowerContainer > m_gTileEtadecorKey
SG::WriteDecorHandleKey< xAOD::gFexTowerContainer > m_gtowerEtMeVdecorKey
std::unordered_map< uint32_t, std::vector< uint64_t > > m_map_TTower2SCells
SG::WriteDecorHandleKey< xAOD::gFexTowerContainer > m_gSCellPhidecorKey
SG::ReadHandleKey< CaloCellContainer > m_SCellKey
std::unordered_map< uint32_t, std::vector< uint32_t > > m_map_TTower2Tile
SG::WriteDecorHandleKey< xAOD::gFexTowerContainer > m_gSCellEtadecorKey
SG::ReadHandleKey< xAOD::gFexTowerContainer > m_gTowersReadKey
SG::WriteDecorHandleKey< xAOD::gFexTowerContainer > m_gSCellSampledecorKey
SG::WriteDecorHandleKey< xAOD::gFexTowerContainer > m_gSCellEtdecorKey
SG::ReadHandleKey< xAOD::TriggerTowerContainer > m_triggerTowerKey
SG::WriteDecorHandleKey< xAOD::gFexTowerContainer > m_gTilePhidecorKey
SG::WriteDecorHandleKey< xAOD::gFexTowerContainer > m_gTowerEtdecorKey
SG::WriteDecorHandleKey< xAOD::gFexTowerContainer > m_gTileEtMeVdecorKey
SG::WriteDecorHandleKey< xAOD::gFexTowerContainer > m_gSCellIDdecorKey
uint8_t jepET() const
get jepET from peak of lut_jep
virtual double eta() const final
The pseudorapidity ( ) of the particle.
virtual double phi() const final
The azimuthal angle ( ) of the particle.
std::string find(const std::string &s)
return a remapped string
gFexTower_v1 gFexTower
Define the latest version of the TriggerTower class.
TriggerTower_v2 TriggerTower
Define the latest version of the TriggerTower class.