ATLAS Offline Software
jFexTower2SCellDecorator.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 //***************************************************************************
6 // jFexTower2SCellDecorator - description
7 // -------------------
8 // This reentrant algorithm is meant to decorate the FEX Towers (input data and simulation) with the corresponding matching set of SuperCell from LAr
9 // Information about SCellContainer objetcs are in:
10 // - https://gitlab.cern.ch/atlas/athena/-/blob/22.0/Calorimeter/CaloEvent/CaloEvent/CaloCell.h
11 //
12 // begin : 01 09 2022
13 // email : sergi.rodriguez@cern.ch
14 //***************************************************************************/
15 
16 
19 
20 #include <iostream>
21 #include <fstream>
22 #include <sstream>
23 #include <algorithm>
24 #include <string>
25 #include <optional>
26 #include <stdio.h>
27 
28 namespace {
29 
30 template <class T>
31 std::optional<SG::WriteDecorHandle<xAOD::jFexTowerContainer, T> >
33  const EventContext& ctx,
34  bool flag)
35 {
36  std::optional<SG::WriteDecorHandle<xAOD::jFexTowerContainer, T> > h;
37  if (flag)
38  h.emplace (key, ctx);
39  return h;
40 }
41 
42 
43 }
44 
45 namespace LVL1 {
46 
48 
50 
51  ATH_MSG_INFO( "Initializing L1CaloFEXTools/jFexTower2SCellDecorator algorithm with name: "<< name());
52  ATH_MSG_INFO( "Decorating SG key: "<< m_jTowersReadKey);
53 
55  ATH_CHECK( m_triggerTowerKey.initialize() );
56  ATH_CHECK( m_jTowersReadKey.initialize() );
57 
58  // This will avoid extra variables when the Key is different than DataTowers
59  if( (m_jTowersReadKey.key()).compare("L1_jFexDataTowers") != 0 ){
60  m_save_emulated_var = false;
61  }
62 
63  //Decarator keys
64  ATH_CHECK( m_jtowerEtMeVdecorKey.initialize() );
65  ATH_CHECK( m_SCellEtMeVdecorKey.initialize() );
66  ATH_CHECK( m_TileEtMeVdecorKey.initialize() );
68 
77 
78 
79 
80  //Reading from CVMFS Trigger Tower and their corresponding SCell ID
83 
84  return StatusCode::SUCCESS;
85 }
86 
87 StatusCode jFexTower2SCellDecorator::execute(const EventContext& ctx) const {
88 
89  //Reading the Scell container
90  SG::ReadHandle<CaloCellContainer> ScellContainer(m_SCellKey, ctx);
91  if(!ScellContainer.isValid()) {
92  ATH_MSG_ERROR("Could not retrieve collection " << ScellContainer.key() );
93  return StatusCode::FAILURE;
94  }
95 
96  //Reading the TriggerTower container
98  if(!triggerTowerContainer.isValid()) {
99  ATH_MSG_ERROR("Could not retrieve collection " << triggerTowerContainer.key() );
100  return StatusCode::FAILURE;
101  }
102 
103  //Reading the jTower container
105  if(!jTowerContainer.isValid()) {
106  ATH_MSG_ERROR("Could not retrieve collection " << jTowerContainer.key() );
107  return StatusCode::FAILURE;
108  }
109 
110  if(ScellContainer->empty() || triggerTowerContainer->empty() || jTowerContainer->empty() ){
111  ATH_MSG_DEBUG("Nothing to decorate here, at least one container is empty. ScellContainer.size="<<ScellContainer->size() << " or jTowerContainer.size=" << jTowerContainer->size() << " or triggerTowerContainer.size=" << triggerTowerContainer->size() );
112  return StatusCode::SUCCESS;
113  }
114 
115  // building Scell ID pointers
116  std::unordered_map< uint64_t, const CaloCell*> map_ScellID2ptr;
117 
118  for(const CaloCell* scell : *ScellContainer){
119  const uint64_t ID = scell->ID().get_compact();
120  map_ScellID2ptr[ID] = scell;
121  }
122 
123  // building Tile ID pointers
124  std::unordered_map< uint32_t, const xAOD::TriggerTower*> map_TileID2ptr;
125 
126  for(const xAOD::TriggerTower* tower : *triggerTowerContainer){
127 
128  // keeping just
129  if(std::abs(tower->eta())>1.5 || tower->sampling()!=1) continue;
130  map_TileID2ptr[tower->coolId()]=tower;
131  }
132 
133  // FIXME: In C++20, we could do this more nicely with a templated lambda.
134  auto jTowerSCellEt = makeOptionalKey<std::vector<float> > (m_SCellEtdecorKey, ctx, m_save_extras);
135  auto jTowerSCellEta = makeOptionalKey<std::vector<float> > (m_SCellEtadecorKey, ctx, m_save_extras);
136  auto jTowerSCellPhi = makeOptionalKey<std::vector<float> > (m_SCellPhidecorKey, ctx, m_save_extras);
137  auto jTowerSCellID = makeOptionalKey<std::vector<int> > (m_SCellIDdecorKey, ctx, m_save_extras);
138  auto jTowerSCellMask = makeOptionalKey<std::vector<bool> > (m_SCellMaskdecorKey, ctx, m_save_extras);
139  auto jTowerTileEt = makeOptionalKey<int> (m_TileEtdecorKey, ctx, m_save_extras);
140  auto jTowerTileEta = makeOptionalKey<float> (m_TileEtadecorKey, ctx, m_save_extras);
141  auto jTowerTilePhi = makeOptionalKey<float> (m_TilePhidecorKey, ctx, m_save_extras);
142  auto jTowerEtencoded = makeOptionalKey<int> (m_jTowerEtdecorKey, ctx, m_save_emulated_var);
143 
147 
148  //looping over the jTowers to decorate them!
149  for(const xAOD::jFexTower* jTower : *jTowerContainer){
150 
151  uint32_t jFexID = jTower->jFEXtowerID();
152  uint8_t source = jTower->Calosource();
153  int jFexEt = 0;
154  uint16_t jFexEtencoded = 0;
155 
156  if(source >=7){
157  ATH_MSG_WARNING("Undefined source element: "<<source);
158  }
159 
160  std::vector<float> scEt;
161  std::vector<float> scEta;
162  std::vector<float> scPhi;
163  std::vector<int> scID;
164  std::vector<bool> scMask;
165  float SCellEt = 0.0;
166  int TileEt = 0;
167  float TileEta = -99.0;
168  float TilePhi = -99.0;
169 
170  if(source != 1){ // Source == 1 is belong to Tile Calorimeter, and of course the is not SCell information!
171 
172  const std::unordered_map< uint32_t, std::vector<uint64_t> > * ptr_TTower2Cells;
173 
174  //HAD layer for HEC, FCAL2 and FCAL3
175  if(source == 3 or source > 4){
176  ptr_TTower2Cells = &m_map_TTower2SCellsHAD;
177  }
178  else{
179  ptr_TTower2Cells = &m_map_TTower2SCellsEM;
180  }
181 
182  //check that the jFEX Tower ID exists in the map
183  auto it_TTower2SCells = (*ptr_TTower2Cells).find(jFexID);
184  if(it_TTower2SCells == (*ptr_TTower2Cells).end()) {
185  ATH_MSG_ERROR("ID: "<<jFexID<< " not found on map m_map_TTower2SCellsEM/HAD");
186  return StatusCode::FAILURE;
187  }
188 
189  for (auto const& SCellID : it_TTower2SCells->second ) {
190 
191  //check that the SCell Identifier exists in the map
192  auto it_ScellID2ptr = map_ScellID2ptr.find(SCellID);
193  if(it_ScellID2ptr == map_ScellID2ptr.end()) {
194  ATH_MSG_DEBUG("Scell ID: 0x"<<std::hex<<(SCellID >> 32)<<std::dec<< " not found on map map_ScellID2ptr");
195 
196  scEt.push_back(0);
197  scEta.push_back(-99);
198  scPhi.push_back(-99);
199  // bit shifting to get only a 32 bit number
200  scID.push_back( SCellID >> 32 );
201  scMask.push_back(0);
202 
203  }
204  else{
205  const CaloCell* myCell = it_ScellID2ptr->second;
206 
207  float et = myCell->et();
208  bool masked = 0;
209 
210  if( (myCell->provenance() >> 7 & 0x1) and m_apply_masking ) {
211  //if masked then Et = 0
212  et = 0.0;
213  masked = 1;
214  }
215 
216  scEt.push_back(et);
217  scEta.push_back(myCell->eta());
218  scPhi.push_back(myCell->phi());
219  // bit shifting to get only a 32 bit number
220  scID.push_back( SCellID >> 32 );
221  scMask.push_back( masked );
222  }
223  }
224 
225  //emulated encoded Et
226  float tmpSCellEt = 0;
227  for(const auto& tmpet : scEt){
228  tmpSCellEt += tmpet;
229  }
230 
231  //How many SCell are masked? if all then send invalid code
232  unsigned int count_scMask =0;
233  for(const bool masked : scMask){
234  if(masked) count_scMask++;
235  }
236 
237  SCellEt = tmpSCellEt;
238  jFexEtencoded = jFEXCompression::Compress( tmpSCellEt, count_scMask == scMask.size() ? true : false );
239  jFexEt = jFEXCompression::Expand( jTower->jTowerEt() );
240  }
241  else if(source == 1){
242 
243  //check that the jFEX Tower ID exists in the map
244  auto it_TTower2Tile = m_map_TTower2Tile.find(jFexID);
245  if(it_TTower2Tile == m_map_TTower2Tile.end()) {
246  ATH_MSG_ERROR("ID: "<<jFexID<< " not found on map m_map_TTower2Tile");
247  return StatusCode::FAILURE;
248  }
249 
250  uint32_t TileID = std::get<0>( it_TTower2Tile->second );
251 
252  //check that the Tile Identifier exists in the map
253  auto it_TileID2ptr = map_TileID2ptr.find(TileID);
254  if(it_TileID2ptr == map_TileID2ptr.end()) {
255  ATH_MSG_WARNING("Scell ID: 0x"<<std::hex<<TileID<<std::dec<< " not found on map map_TileID2ptr");
256 
257  jFexEtencoded = 0;
258  TileEt = 0;
259  TileEta = -99;
260  TilePhi = -99;
261  }
262  else{
263  jFexEtencoded = (it_TileID2ptr->second)->cpET();
264  TileEt = jFexEtencoded*500; // cf 500 since it is cpET
265  TileEta = (it_TileID2ptr->second)->eta();
266  float phi = (it_TileID2ptr->second)->phi() < M_PI ? (it_TileID2ptr->second)->phi() : (it_TileID2ptr->second)->phi()-2*M_PI;
267  TilePhi = phi;
268 
269  }
270 
271  jFexEt = jTower->jTowerEt()*500; // cf 500 since it is cpET
272 
273  }
274 
275  // Decorating the tower with the corresponding information
276  //Setup Decorator Handlers
277  if(m_save_extras) {
278  (*jTowerSCellEt) (*jTower) = scEt;
279  (*jTowerSCellEta) (*jTower) = scEta;
280  (*jTowerSCellPhi) (*jTower) = scPhi;
281  (*jTowerSCellID) (*jTower) = scID;
282  (*jTowerSCellMask) (*jTower) = scMask;
283  (*jTowerTileEt) (*jTower) = static_cast<int>( TileEt );
284  (*jTowerTileEta) (*jTower) = TileEta;
285  (*jTowerTilePhi) (*jTower) = TilePhi;
286  }
287 
288  jTowerEtMeV (*jTower) = jFexEt;
289  SCellEtMeV (*jTower) = SCellEt;
290  TileEtMeV (*jTower) = TileEt;
291 
293  (*jTowerEtencoded) (*jTower) = jFexEtencoded;
294  }
295 
296 
297  }
298 
299  // Return gracefully
300  return StatusCode::SUCCESS;
301 }
302 
303 
305 
306  std::string myline;
307 
308  //openning file with ifstream
309  std::ifstream myfile(fileName);
310 
311  if ( !myfile.is_open() ){
312  ATH_MSG_ERROR("Could not open file:" << fileName);
313  return StatusCode::FAILURE;
314  }
315 
316  //loading the mapping information into an unordered_map <Fex Tower ID, vector of SCell IDs>
317  while ( std::getline (myfile, myline) ) {
318  std::vector<uint64_t> SCellvectorEM;
319  SCellvectorEM.clear();
320  std::vector<uint64_t> SCellvectorHAD;
321  SCellvectorHAD.clear();
322 
323  //removing the header of the file (it is just information!)
324  if(myline[0] == '#') continue;
325 
326  //Splitting myline in different substrings
327  std::stringstream oneSCellID(myline);
328 
329  //reading elements
330  std::string substr = "";
331  int TTID = 0;
332  int elem = 0;
333 
334  while(std::getline(oneSCellID, substr, ' '))
335  {
336  ++elem;
337  if(elem == 1){
338  TTID = std::stoi(substr);
339  }
340  else{
341  //Check if it looks like a SCell Identifier
342  if(isBadSCellID(substr)){
343  return StatusCode::FAILURE;
344  }
345 
346  // converts hex number to unsigned long long int
347  uint64_t scid_uint64 = std::strtoull(substr.c_str(), nullptr, 0);
348 
349  //empty slots are filled with 0xffffffffffffffff
350  if(scid_uint64 == 0xffffffffffffffff) continue;
351 
352  //from element from 2 to 13 are EM SCells, element 14 is a HAD SCell
353  if(elem<14) SCellvectorEM.push_back(scid_uint64);
354  else SCellvectorHAD.push_back(scid_uint64);
355  }
356  }
357 
358  m_map_TTower2SCellsEM[TTID] = SCellvectorEM;
359  m_map_TTower2SCellsHAD[TTID] = SCellvectorHAD;
360 
361  }
362  myfile.close();
363 
364  return StatusCode::SUCCESS;
365 }
366 
367 bool jFexTower2SCellDecorator::isBadSCellID(const std::string& ID) const{
368 
369  // does it start with "0x"?, if so then is a GOOD SCell ID!
370  if (ID.find("0x") == std::string::npos) {
371  ATH_MSG_ERROR("Invalid SuperCell ID " << ID << ". Expecting hexadecimal number on the mapping file");
372  return true;
373  }
374  return false;
375 }
376 
377 
378 
379 
381 
382  std::string myline;
383 
384  //openning file with ifstream
385  std::ifstream myfile(fileName);
386 
387  if ( !myfile.is_open() ){
388  ATH_MSG_ERROR("Could not open file:" << fileName);
389  return StatusCode::FAILURE;
390  }
391 
392  //loading the mapping information into an unordered_map <Fex Tower ID, vector of SCell IDs>
393  while ( std::getline (myfile, myline) ) {
394 
395  //removing the header of the file (it is just information!)
396  if(myline[0] == '#') continue;
397 
398  //Splitting myline in different substrings
399  std::stringstream oneLine(myline);
400 
401  std::vector<std::string> elements;
402  std::string element = "";
403 
404  while(std::getline(oneLine, element, ' ')){
405  elements.push_back(element);
406  }
407 
408  if(elements.size() != 4){
409  ATH_MSG_ERROR("Invalid number of element in " << myline << ". Expecting 4 elements {jFexID, TileID, eta, phi}");
410  return StatusCode::FAILURE;
411  }
412 
413  uint32_t jFexID = std::stoi( elements.at(0) );
414  uint32_t TileID = std::stoi( elements.at(1) );
415  float eta = std::stof( elements.at(2) );
416  float phi = std::stof( elements.at(3) );
417 
418  m_map_TTower2Tile[jFexID] = {TileID,eta,phi};
419 
420  }
421  myfile.close();
422 
423  return StatusCode::SUCCESS;
424 }
425 
426 
427 
428 
429 
430 }
LVL1::jFexTower2SCellDecorator::m_SCellKey
SG::ReadHandleKey< CaloCellContainer > m_SCellKey
Definition: jFexTower2SCellDecorator.h:45
SG::WriteDecorHandleKey
Property holding a SG store/key/clid/attr name from which a WriteDecorHandle is made.
Definition: StoreGate/StoreGate/WriteDecorHandleKey.h:89
plotBeamSpotCompare.x1
x1
Definition: plotBeamSpotCompare.py:216
LVL1::jFexTower2SCellDecorator::m_jFEX2Scellmapping
Gaudi::Property< std::string > m_jFEX2Scellmapping
Definition: jFexTower2SCellDecorator.h:74
et
Extra patterns decribing particle interation process.
CaloCell::phi
virtual double phi() const override final
get phi (through CaloDetDescrElement)
Definition: CaloCell.h:359
LVL1::jFexTower2SCellDecorator::m_SCellMaskdecorKey
SG::WriteDecorHandleKey< xAOD::jFexTowerContainer > m_SCellMaskdecorKey
Definition: jFexTower2SCellDecorator.h:58
LVL1::jFexTower2SCellDecorator::m_map_TTower2SCellsEM
std::unordered_map< uint32_t, std::vector< uint64_t > > m_map_TTower2SCellsEM
Definition: jFexTower2SCellDecorator.h:83
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
ID
std::vector< Identifier > ID
Definition: CalibHitIDCheck.h:24
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:557
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
LVL1::jFexTower2SCellDecorator::isBadSCellID
bool isBadSCellID(const std::string &) const
Definition: jFexTower2SCellDecorator.cxx:367
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
LVL1::jFexTower2SCellDecorator::m_TileEtadecorKey
SG::WriteDecorHandleKey< xAOD::jFexTowerContainer > m_TileEtadecorKey
Definition: jFexTower2SCellDecorator.h:60
M_PI
#define M_PI
Definition: ActiveFraction.h:11
LVL1::jFexTower2SCellDecorator::m_jTowersReadKey
SG::ReadHandleKey< xAOD::jFexTowerContainer > m_jTowersReadKey
Definition: jFexTower2SCellDecorator.h:51
jFexTower2SCellDecorator.h
CaloCell::provenance
uint16_t provenance() const
get provenance (data member)
Definition: CaloCell.h:338
LVL1
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...
Definition: ICMMCPHitsCnvTool.h:18
LVL1::jFexTower2SCellDecorator::m_save_extras
Gaudi::Property< bool > m_save_extras
Definition: jFexTower2SCellDecorator.h:71
LVL1::jFexTower2SCellDecorator::m_map_TTower2Tile
std::unordered_map< uint32_t, std::tuple< uint32_t, float, float > > m_map_TTower2Tile
Definition: jFexTower2SCellDecorator.h:85
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:83
LVL1::jFEXCompression::Expand
static int Expand(unsigned int code)
Uncompress data.
Definition: jFEXCompression.cxx:58
LVL1::jFexTower2SCellDecorator::jFexTower2SCellDecorator
jFexTower2SCellDecorator(const std::string &name, ISvcLocator *svc)
Definition: jFexTower2SCellDecorator.cxx:47
FortranAlgorithmOptions.fileName
fileName
Definition: FortranAlgorithmOptions.py:13
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
LVL1::jFexTower2SCellDecorator::m_save_emulated_var
bool m_save_emulated_var
Definition: jFexTower2SCellDecorator.h:81
xAOD::uint16_t
setWord1 uint16_t
Definition: eFexEMRoI_v1.cxx:93
LVL1::jFexTower2SCellDecorator::m_TileEtdecorKey
SG::WriteDecorHandleKey< xAOD::jFexTowerContainer > m_TileEtdecorKey
Definition: jFexTower2SCellDecorator.h:59
LVL1::jFexTower2SCellDecorator::m_TileEtMeVdecorKey
SG::WriteDecorHandleKey< xAOD::jFexTowerContainer > m_TileEtMeVdecorKey
Definition: jFexTower2SCellDecorator.h:65
LVL1::jFexTower2SCellDecorator::m_SCellEtMeVdecorKey
SG::WriteDecorHandleKey< xAOD::jFexTowerContainer > m_SCellEtMeVdecorKey
Definition: jFexTower2SCellDecorator.h:64
LVL1::jFexTower2SCellDecorator::execute
virtual StatusCode execute(const EventContext &) const override
Function executing the algorithm.
Definition: jFexTower2SCellDecorator.cxx:87
TileID
Helper class for TileCal offline identifiers.
Definition: TileID.h:68
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
extractSporadic.h
list h
Definition: extractSporadic.py:97
LVL1::jFEXCompression::Compress
static unsigned int Compress(float floatEt, bool empty=false)
Compress data.
Definition: jFEXCompression.cxx:25
SG::WriteDecorHandle
Handle class for adding a decoration to an object.
Definition: StoreGate/StoreGate/WriteDecorHandle.h:100
master.flag
bool flag
Definition: master.py:29
xAOD::TriggerTower_v2
Description of TriggerTower_v2.
Definition: TriggerTower_v2.h:49
CaloCell::et
virtual double et() const override final
get et
Definition: CaloCell.h:407
xAOD::uint64_t
uint64_t
Definition: EventInfo_v1.cxx:123
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
Handler::svc
AthROOTErrorHandlerSvc * svc
Definition: AthROOTErrorHandlerSvc.cxx:10
LVL1::jFexTower2SCellDecorator::m_SCellEtdecorKey
SG::WriteDecorHandleKey< xAOD::jFexTowerContainer > m_SCellEtdecorKey
Definition: jFexTower2SCellDecorator.h:54
LVL1::jTowerContainer
Definition: jTowerContainer.h:33
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
LVL1::jFexTower2SCellDecorator::ReadSCfromFile
StatusCode ReadSCfromFile(const std::string &)
Definition: jFexTower2SCellDecorator.cxx:304
TrigConf::name
Definition: HLTChainList.h:35
LVL1::jFexTower2SCellDecorator::m_apply_masking
Gaudi::Property< bool > m_apply_masking
Definition: jFexTower2SCellDecorator.h:70
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
SG::VarHandleBase::key
virtual const std::string & key() const override final
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleBase.cxx:64
LVL1::jFexTower2SCellDecorator::m_map_TTower2SCellsHAD
std::unordered_map< uint32_t, std::vector< uint64_t > > m_map_TTower2SCellsHAD
Definition: jFexTower2SCellDecorator.h:84
LVL1::jFexTower2SCellDecorator::m_SCellPhidecorKey
SG::WriteDecorHandleKey< xAOD::jFexTowerContainer > m_SCellPhidecorKey
Definition: jFexTower2SCellDecorator.h:56
LVL1::jFexTower2SCellDecorator::ReadTilefromFile
StatusCode ReadTilefromFile(const std::string &)
Definition: jFexTower2SCellDecorator.cxx:380
LVL1::jFexTower2SCellDecorator::m_jtowerEtMeVdecorKey
SG::WriteDecorHandleKey< xAOD::jFexTowerContainer > m_jtowerEtMeVdecorKey
Definition: jFexTower2SCellDecorator.h:63
h
CaloCell
Data object for each calorimeter readout cell.
Definition: CaloCell.h:57
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
jFEXCompression.h
LVL1::jFexTower2SCellDecorator::m_TilePhidecorKey
SG::WriteDecorHandleKey< xAOD::jFexTowerContainer > m_TilePhidecorKey
Definition: jFexTower2SCellDecorator.h:61
LVL1::jTower
The jTower class is an interface object for jFEX trigger algorithms The purposes are twofold:
Definition: jTower.h:40
copySelective.source
string source
Definition: copySelective.py:32
LVL1::jFexTower2SCellDecorator::initialize
virtual StatusCode initialize() override
Function initialising the algorithm.
Definition: jFexTower2SCellDecorator.cxx:49
LVL1::jFexTower2SCellDecorator::m_SCellEtadecorKey
SG::WriteDecorHandleKey< xAOD::jFexTowerContainer > m_SCellEtadecorKey
Definition: jFexTower2SCellDecorator.h:55
LVL1::jFexTower2SCellDecorator::m_triggerTowerKey
SG::ReadHandleKey< xAOD::TriggerTowerContainer > m_triggerTowerKey
Definition: jFexTower2SCellDecorator.h:48
xAOD::jFexTower_v1
Class describing input data of a LVL1 jFEX.
Definition: jFexTower_v1.h:22
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
LVL1::jFexTower2SCellDecorator::m_jFEX2Tilemapping
Gaudi::Property< std::string > m_jFEX2Tilemapping
Definition: jFexTower2SCellDecorator.h:75
DataVector::empty
bool empty() const noexcept
Returns true if the collection is empty.
CaloCell::eta
virtual double eta() const override final
get eta (through CaloDetDescrElement)
Definition: CaloCell.h:366
LVL1::jFexTower2SCellDecorator::m_SCellIDdecorKey
SG::WriteDecorHandleKey< xAOD::jFexTowerContainer > m_SCellIDdecorKey
Definition: jFexTower2SCellDecorator.h:57
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
LVL1::jFexTower2SCellDecorator::m_jTowerEtdecorKey
SG::WriteDecorHandleKey< xAOD::jFexTowerContainer > m_jTowerEtdecorKey
Definition: jFexTower2SCellDecorator.h:66