ATLAS Offline Software
Public Member Functions | List of all members
Gep::TopoTowerMaker Class Reference

#include <TopoTowerMaker.h>

Inheritance diagram for Gep::TopoTowerMaker:
Collaboration diagram for Gep::TopoTowerMaker:

Public Member Functions

 TopoTowerMaker ()=default
 
 ~TopoTowerMaker ()=default
 
std::vector< Gep::ClustermakeTowers (const xAOD::CaloClusterContainer &clusters, const CaloCellContainer &cells) const override
 
std::string getName () const override
 

Detailed Description

Definition at line 23 of file TopoTowerMaker.h.

Constructor & Destructor Documentation

◆ TopoTowerMaker()

Gep::TopoTowerMaker::TopoTowerMaker ( )
default

◆ ~TopoTowerMaker()

Gep::TopoTowerMaker::~TopoTowerMaker ( )
default

Member Function Documentation

◆ getName()

std::string Gep::TopoTowerMaker::getName ( ) const
overridevirtual

Implements Gep::ITowerMaker.

Definition at line 56 of file TopoTowerMaker.cxx.

56  {
57  return "TopoTower";
58 }

◆ makeTowers()

std::vector< Gep::Cluster > Gep::TopoTowerMaker::makeTowers ( const xAOD::CaloClusterContainer clusters,
const CaloCellContainer cells 
) const
overridevirtual

Implements Gep::ITowerMaker.

Definition at line 7 of file TopoTowerMaker.cxx.

7  {
8 
9  std::vector<Gep::Cluster> customTowers;
10 
11  // Define tower array (98 eta bins x 64 phi bins)
12  static constexpr int nEta{98};
13  static constexpr int nPhi{64};
14  //avoid stack use of 605kb
15  auto tow = new Gep::Cluster[nEta][nPhi]();
16 
17 
18  // Loop over clusters and their associated cells
19  for (const auto* iClust : clusters) {
20  CaloClusterCellLink::const_iterator cellBegin = iClust->cell_begin();
21  CaloClusterCellLink::const_iterator cellEnd = iClust->cell_end();
22 
23  for (; cellBegin != cellEnd; ++cellBegin) {
24  unsigned int cellIndex = cellBegin.index();
25  if (cellIndex >= cells.size()) continue; // avoid out-of-bounds
26  const CaloCell* cell = cells[cellIndex];
27  if (!cell) continue;
28 
29  // Compute eta and phi indices (binning in steps of 0.1)
30  int eta_index = static_cast<int>(std::floor(cell->eta() * 10)) + 49;
31  int phi_index = static_cast<int>(std::floor(cell->phi() * 10)) + 32;
32 
33  // Ensure indices are within bounds
34  if (eta_index < 0 || eta_index >= nEta || phi_index < 0 || phi_index >= nPhi) continue;
35 
36  // Accumulate cell data into the corresponding tower
37  TLorentzVector cellVector;
38  cellVector.SetPtEtaPhiE(cell->energy() * 1.0 / TMath::CosH(cell->eta()),
39  cell->eta(), cell->phi(), cell->energy());
40  tow[eta_index][phi_index].vec += cellVector;
41  }
42  }
43 
44  // Collect non-empty towers into a vector
45  for (int i = 0; i < nEta; ++i) {
46  for (int j = 0; j < nPhi; ++j) {
47  if (tow[i][j].vec.Et() > 0) {
48  customTowers.push_back(tow[i][j]);
49  }
50  }
51  }
52  delete[] tow;
53  return customTowers;
54 }

The documentation for this class was generated from the following files:
RunTileCalibRec.cells
cells
Definition: RunTileCalibRec.py:281
ReadCellNoiseFromCool.cell
cell
Definition: ReadCellNoiseFromCool.py:53
Gep::Cluster
Definition: Trigger/TrigT1/TrigGepPerf/src/Cluster.h:13
vec
std::vector< size_t > vec
Definition: CombinationsGeneratorTest.cxx:9
TrigVSI::AlgConsts::nPhi
constexpr int nPhi
Default bin number of phi for vertex map.
Definition: Trigger/TrigTools/TrigVrtSecInclusive/TrigVrtSecInclusive/Constants.h:27
lumiFormat.i
int i
Definition: lumiFormat.py:85
createCablingJSON.eta_index
int eta_index
Definition: createCablingJSON.py:14
CaloCell
Data object for each calorimeter readout cell.
Definition: CaloCell.h:57
RunTileMonitoring.clusters
clusters
Definition: RunTileMonitoring.py:133
TrigVSI::AlgConsts::nEta
constexpr int nEta
Default bin number of eta for vertex map.
Definition: Trigger/TrigTools/TrigVrtSecInclusive/TrigVrtSecInclusive/Constants.h:26