ATLAS Offline Software
Loading...
Searching...
No Matches
KeyUtilities.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 KeyUtilities.cpp - description
6 -------------------
7 begin : Tue Sep 26 2000
8 email : e.moyse@qmw.ac.uk
9 ***************************************************************************/
10
11
12#ifndef TRIGGERSPACE
13// running in Athena
15
16#else
17// running in TRIGGERSPACE
18#include "KeyUtilities.h"
19
20#endif
21
22#include <cmath>
23
24namespace LVL1 {
25
29//Del by KDevelop: KeyUtilities::KeyUtilities(double phi, double eta) {
30//Del by KDevelop: m_phi=phi;
31//Del by KDevelop: m_eta=eta;
32//Del by KDevelop: convertCoordsToIntegers();
33//Del by KDevelop: //std::cout << "m_ieta : "<<m_ieta<<std::endl;
34//Del by KDevelop: }
35
38 m_iphi(0),
39 m_ieta(0),
40 m_eta(0.0),
41 m_phi(0.0),
42 m_phiBin(0),
43 m_etaBin(0),
44 m_centralPhi(0.0),
45 m_centralEta(0.0),
46 m_debug(false)
47{
48}
49
52 m_iphi(0),
53 m_ieta(0),
54 m_eta(eta),
55 m_phi(phi),
56 m_phiBin(0),
57 m_etaBin(0),
58 m_centralPhi(0.0),
59 m_centralEta(0.0),
60 m_debug(false)
61{
62}
63
66
68//Del by KDevelop: unsigned int KeyUtilities::key() {
69//Del by KDevelop: calculateTriggerBin();
70//Del by KDevelop: unsigned int temp=(m_etaBin<<6) + m_phiBin;
71//Del by KDevelop: //int temp=m_phiBin;
72//Del by KDevelop: return temp;
73//Del by KDevelop: }
74
77unsigned int KeyUtilities::key( double phi, double eta) {
78 m_eta=eta;
79 m_phi=phi;
81 BinAndCoord bandc = calculateTriggerBin(iCoord);
82 if (m_debug) std::cout << "KU : key: got bandc "<<std::endl;
83 m_phiBin=bandc.phiBin();
84 m_etaBin=bandc.etaBin();
85 m_centralPhi=bandc.coords().phi();
86 m_centralEta=bandc.coords().eta();
87 int temp=((m_etaBin+50)<<6) + m_phiBin;
88
89 if (m_debug) std::cout << "KU : key: returning - "<<temp<<std::endl;
90 return static_cast<unsigned int>(temp);
91}
92
94unsigned int KeyUtilities::key(const Coordinate& coord) {
95 return key(coord.phi(), coord.eta());
96}
97
104
105 double phiBinWidth=((2*M_PI)/64.0);
106 // there are a maximum of 64 cells in the phi direction
107 // stretching from 0 to ~2*PI.
108 if (m_debug) std::cout << "KU : (phi, eta) ("<<phi<<","<<eta<<")"<<std::endl;
109 int iphi=sharpRound(phi/phiBinWidth);
110 int ieta=0;
111
112 // Now check that m_iphi is between 0 and 64.
113 iphi = iphi%64;
114 if (iphi<0) iphi = 64+iphi;
115
116 // Make m_ieta symmetrical:
117 // o no cell at m_ieta=0
118 // o first cells at +-1
119 // o last cells at about +- 50
120 // this gives us a more useful numerical symmetry.
121
122 // So to get integer value we do:
123 int temp_sign=sign(eta);
124 double temp_abs=eta*temp_sign;
125
126 double temp_double=(temp_abs*10.0+1.0)*temp_sign;
127 if (m_debug) std::cout << "KU : temp_abs, temp_sign, temp_double : "<<temp_abs<<","<<temp_sign<<","<<temp_double<<std::endl;
128// if (m_eta>=0.0){
129// temp_double=m_eta*10.0+1.0;
130// }else{
131// temp_double=m_eta*10.0-1.0;
132// }
133
134 ieta=static_cast<int>(temp_double);
135 if (m_debug) std::cout << "KU : (iphi, ieta) ("<<iphi<<","<<ieta<<")"<<std::endl;
136 return ICoordinate(iphi, ieta, eta);
137}
138
139
143 return m_centralEta;
144}
145
146
147
148
152 return m_centralPhi;
153}
154
156int LVL1::KeyUtilities::sign(int temp) const{
157 return ((temp >= 0) ? 1 : -1);
158}
159
161int LVL1::KeyUtilities::sign(double temp) const{
162 return ((temp >= 0.0) ? 1 : -1);
163}
164
173
175int LVL1::KeyUtilities::round(double a) const {
176 return static_cast<int>(a<0.0?ceil(a-0.5):a>0.0?floor(a+0.5):0.0);
177}
178
181 return static_cast<int>(a<0.0?(a-1.0):a>0.0?(a):0.0);
182}
183
184int LVL1::KeyUtilities::sharpRound2(int a, int b) const {
185 int temp=(abs(a)-1)/b+1;
186 return temp*sign(a);
187}
188
189} // end LVL1 namespace
190
191
192
#define M_PI
static Double_t a
int sign(int a)
Used to pass data between the methods of the Key Classes: Returns the Eta and Phi bins,...
Definition BinAndCoord.h:35
int phiBin() const
Definition BinAndCoord.h:44
int etaBin() const
Definition BinAndCoord.h:45
const Coordinate & coords() const
Definition BinAndCoord.h:46
double phi() const
return phi
double eta() const
return eta
Used by Key Classes, returns and integer coorginate for the bin Eta-Phi.
Definition ICoordinate.h:26
virtual BinAndCoord calculateTriggerBin(const ICoordinate &iCoord)=0
converts integer phi, eta coordinates to phi, eta trigger bins.
virtual double eta() const
returns the centre of the TT at eta_coord:
virtual int sign(int temp) const
returns -1 if temp is -ve and +1 if it is +ve.
ICoordinate convertCoordsToIntegers(double phi, double eta)
converts the coordinates and corrects for overflows etc.
int m_ieta
integer eta coord
int sharpRound2(int a, int b) const
divides a/b and returns a number as follows (where +b means +ve b): if 0
virtual double phi() const
returns phi coordinate of centre of relevant trigger tower.
int sharpRound(double a) const
rounds number as follows (-1.0 to 0.0) -> -1, (0.0 to 1.0) -> 0, (1.0 to 2.0)->1 etc.
int m_iphi
integer phi coord
double m_centralEta
this is the coordinate of the centre of the relevant trigger tower.
int round(double a) const
rounds number to nearest whole number
unsigned int key(double phi, double eta)
calculates a map key from passed phi, eta coordinates
Coordinate coord() const
return central coords of current key value.
double m_centralPhi
this is the coordinate of the centre of the relevant trigger tower.
KeyUtilities()
the constructor is protected so a user can never make a KeyUtilities object
bool m_debug
turns DEBUG code on and off
double m_phi
phi coordinate of key
double m_eta
eta coordinate of key
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...