ATLAS Offline Software
Loading...
Searching...
No Matches
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}
std::vector< size_t > vec
constexpr int nEta
Default bin number of eta for vertex map.
constexpr int nPhi
Default bin number of phi for vertex map.

The documentation for this class was generated from the following files: