ATLAS Offline Software
Loading...
Searching...
No Matches
gTowerBuilder.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4//***************************************************************************
5// gTowerBuilder - Builds gTowers (readout elements of gFEX)
6// -------------------
7// begin : 01 04 2021
8// email : cecilia.tosciri@cern.ch
9//***************************************************************************
10
12#include "gTowerBuilder.h"
13
14
15
16// TOWER IS A COLLECTION OF SUPER CELLS
17// IT SHOULD HAVE A UNIQUE ID
18// IT SHOULD BE ABLE TO RETURN LIST OF SUPER CELLS BELONGING TO IT
19
20// THIS IS A CLASS DESIGNED TO BUILD A GTOWER USING THE GTOWER CLASS AND THEN PRINT THE RELEVANT INFORMATION TO THE SCREEN USING FUNCTION CALLS FROM THE GTOWER CLASS
21
22namespace LVL1 {
23
24gTowerBuilder::gTowerBuilder(const std::string& type,const std::string& name,const IInterface* parent):
25 AthAlgTool(type,name,parent)
26{
27 declareInterface<IgTowerBuilder>(this);
28}
29
30
31
32 void gTowerBuilder::BuildAllTowers(std::unique_ptr<gTowerContainer> & gTowerContainerRaw) const
33{
34 gTowerContainerRaw->reserve(1152);
35
36 BuildEMBgTowers(gTowerContainerRaw);
37 BuildTransEMBgTowers(gTowerContainerRaw);
38 BuildEMEgTowers(gTowerContainerRaw);
39 BuildFwdEMECgTowers(gTowerContainerRaw);
40 BuildFCALgTowers(gTowerContainerRaw);
41
42 gTowerContainerRaw->fillContainerMap();
43}
44
45
46 // TOWER IDs FOR CLARITY (updated Jan 21, 2022)
47 // EM Calorimeter
48 // EMB region (gFEX Eta [0.0, 1.4])= 100000 + X (left); 200000 + X (right)
49 // EMB/EMEC region (gFEX Eta [1.4, 1.6])= 300000 + X (left); 400000 + X (right)
50 // EMEC region (gFEX Eta [1.6, 3.2])= 500000 + X (left); 600000 + X (right) (no overlap with FCAL)
51 // FCAL region (gFEX Eta [3.2, 4.9])= 900000 + X (left); 1000000 + X (right)
52 // HAD Calorimeter
53 // Tile region (gFEX Eta [0.0, 1.4])= 100000 + X (left); 200000 + X (right)
54 // Tile/HEC region (gFEX Eta [1.4, 1.6])= 300000 + X (left); 400000 + X (right)
55 // HEC region (gFEX Eta [1.6, 3.2])= 500000 + X (left); 600000 + X (right) (32 phi bins)
56
57
58
59 void gTowerBuilder::BuildEMBgTowers(std::unique_ptr<gTowerContainer> & gTowerContainerRaw) const
60{
61 int nphi = 32;
62 // This is pure EMB region (for gFEX: Eta Range 0.0-1.4)
63 for (int ieta = 0; ieta < 7; ++ieta) { // loop over 7 eta steps
64 for (int iphi = 0; iphi < nphi; ++iphi){ // loop over 32 phi steps
65 BuildSingleTower(gTowerContainerRaw, ieta, iphi, nphi, 100000, -1);
66 BuildSingleTower(gTowerContainerRaw, ieta, iphi, nphi, 200000, 1);
67 }
68 }
69
70}
71
72void gTowerBuilder::BuildTransEMBgTowers(std::unique_ptr<gTowerContainer> & gTowerContainerRaw) const
73{
74
75 int TRANSEMB_MODIFIER = 7;
76 int tmpVal = TRANSEMB_MODIFIER;
77 int nphi = 32;
78 //Transition region is where EMB and EMEC overlap (for gFEX: Eta Range 1.4-1.6)
79 for (int ieta = tmpVal; ieta < tmpVal + 1; ieta++){ // loop over eta steps
80 for (int iphi = 0; iphi < nphi; ++iphi){ // loop over 32 phi steps
81 BuildSingleTower(gTowerContainerRaw, ieta, iphi, nphi, 300000, -1);
82 BuildSingleTower(gTowerContainerRaw, ieta, iphi, nphi, 400000, 1);
83 }
84 }
85
86}
87
88void gTowerBuilder::BuildEMEgTowers(std::unique_ptr<gTowerContainer> & gTowerContainerRaw) const
89{
90 // This is pure EMEC region (for gFEX: Eta Range 1.6-3.3)
91 int EME_MODIFIER = 8;
92 int tmpVal = EME_MODIFIER;
93 int nphi = 32;
94 for (int ieta = tmpVal; ieta < tmpVal + 4; ++ieta){ // loop over eta steps
95 for (int iphi = 0; iphi < nphi; ++iphi){ // loop over 32 phi steps
96 BuildSingleTower(gTowerContainerRaw, ieta, iphi, nphi, 500000, -1);
97 BuildSingleTower(gTowerContainerRaw, ieta, iphi, nphi, 600000, 1);
98 }
99 }
100
101}
102
103void gTowerBuilder::BuildFwdEMECgTowers(std::unique_ptr<gTowerContainer> & gTowerContainerRaw) const
104{
105// Transition region between EMEC and FCAL (for gFEX: Eta Range 2.8-3.2)
106 int TRANSFCAL_MODIFIER = 12;
107 int tmpVal = TRANSFCAL_MODIFIER;
108 int nphi = 32;
109 for (int ieta = tmpVal; ieta < tmpVal + 4; ++ieta){ // loop over eta steps
110 for (int iphi = 0; iphi < nphi; ++iphi){ // loop over 32 phi steps
111 BuildSingleTower(gTowerContainerRaw, ieta, iphi, nphi, 700000, -1);
112 BuildSingleTower(gTowerContainerRaw, ieta, iphi, nphi, 800000, 1);
113 }
114 }
115
116}
117
118void gTowerBuilder::BuildFCALgTowers(std::unique_ptr<gTowerContainer> & gTowerContainerRaw) const
119{
120 // This is pure EMEC region (for gFEX: Eta Range 3.2-4.9)
121 int FCAL_MODIFIER = 16;
122 int tmpVal = FCAL_MODIFIER;
123 int nphi = 16;
124 for (int ieta = tmpVal; ieta < tmpVal + 4; ++ieta){ // loop over eta steps
125 for (int iphi = 0; iphi < nphi; ++iphi){ // loop over 16 phi steps
126 BuildSingleTower(gTowerContainerRaw, ieta, iphi, nphi, 900000, -1);
127 BuildSingleTower(gTowerContainerRaw, ieta, iphi, nphi, 1000000, 1);
128 }
129 }
130}
131
132 void gTowerBuilder::BuildSingleTower(std::unique_ptr<gTowerContainer> & gTowerContainerRaw, int ieta, int iphi, int nphi, int keybase, int posneg) const
133{
134 gTowerContainerRaw->push_back(ieta, iphi, nphi, keybase, posneg);
135}
136
137
138} // end of LVL1 namespace
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
virtual void BuildAllTowers(std::unique_ptr< gTowerContainer > &gTowerContainerRaw) const override
virtual void BuildSingleTower(std::unique_ptr< gTowerContainer > &gTowerContainerRaw, int eta, int phi, int nphi, int keybase, int posneg) const override
virtual void BuildFwdEMECgTowers(std::unique_ptr< gTowerContainer > &gTowerContainerRaw) const override
gTowerBuilder(const std::string &type, const std::string &name, const IInterface *parent)
virtual void BuildEMEgTowers(std::unique_ptr< gTowerContainer > &gTowerContainerRaw) const override
virtual void BuildEMBgTowers(std::unique_ptr< gTowerContainer > &gTowerContainerRaw) const override
virtual void BuildTransEMBgTowers(std::unique_ptr< gTowerContainer > &gTowerContainerRaw) const override
virtual void BuildFCALgTowers(std::unique_ptr< gTowerContainer > &gTowerContainerRaw) const override
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...