ATLAS Offline Software
Loading...
Searching...
No Matches
KeyUtilities.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2018 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 delete bandc;
88 delete iCoord;
89 int temp=((m_etaBin+50)<<6) + m_phiBin;
90
91 if (m_debug) std::cout << "KU : key: returning - "<<temp<<std::endl;
92 return static_cast<unsigned int>(temp);
93}
94
96unsigned int KeyUtilities::key(const Coordinate& coord) {
97 return key(coord.phi(), coord.eta());
98}
99
106
107 double phiBinWidth=((2*M_PI)/64.0);
108 // there are a maximum of 64 cells in the phi direction
109 // stretching from 0 to ~2*PI.
110 if (m_debug) std::cout << "KU : (phi, eta) ("<<phi<<","<<eta<<")"<<std::endl;
111 int iphi=sharpRound(phi/phiBinWidth);
112 int ieta=0;
113
114 // Now check that m_iphi is between 0 and 64.
115 iphi = iphi%64;
116 if (iphi<0) iphi = 64+iphi;
117
118 // Make m_ieta symmetrical:
119 // o no cell at m_ieta=0
120 // o first cells at +-1
121 // o last cells at about +- 50
122 // this gives us a more useful numerical symmetry.
123
124 // So to get integer value we do:
125 int temp_sign=sign(eta);
126 double temp_abs=eta*temp_sign;
127
128 double temp_double=(temp_abs*10.0+1.0)*temp_sign;
129 if (m_debug) std::cout << "KU : temp_abs, temp_sign, temp_double : "<<temp_abs<<","<<temp_sign<<","<<temp_double<<std::endl;
130// if (m_eta>=0.0){
131// temp_double=m_eta*10.0+1.0;
132// }else{
133// temp_double=m_eta*10.0-1.0;
134// }
135
136 ieta=static_cast<int>(temp_double);
137 if (m_debug) std::cout << "KU : (iphi, ieta) ("<<iphi<<","<<ieta<<")"<<std::endl;
138 ICoordinate* iCoord=new ICoordinate(iphi, ieta, eta);
139 return iCoord;
140}
141
142
146 return m_centralEta;
147}
148
149
150
151
155 return m_centralPhi;
156}
157
159int LVL1::KeyUtilities::sign(int temp) const{
160 return ((temp >= 0) ? 1 : -1);
161}
162
164int LVL1::KeyUtilities::sign(double temp) const{
165 return ((temp >= 0.0) ? 1 : -1);
166}
167
170 BinAndCoord* bandc = calculateTriggerBin(iCoord);
171 m_phiBin=bandc->phiBin();
172 m_etaBin=bandc->etaBin();
173 m_centralPhi=bandc->coords()->phi();
174 m_centralEta=bandc->coords()->eta();
175 delete bandc;
176 delete iCoord;
177}
178
180int LVL1::KeyUtilities::round(double a) const {
181 return static_cast<int>(a<0.0?ceil(a-0.5):a>0.0?floor(a+0.5):0.0);
182}
183
186 return static_cast<int>(a<0.0?(a-1.0):a>0.0?(a):0.0);
187}
188
189int LVL1::KeyUtilities::sharpRound2(int a, int b) const {
190 int temp=(abs(a)-1)/b+1;
191 return temp*sign(a);
192}
193
194} // end LVL1 namespace
195
196
197
#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
const Coordinate * coords() const
Definition BinAndCoord.h:46
int phiBin() const
Definition BinAndCoord.h:44
int etaBin() const
Definition BinAndCoord.h:45
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 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.
virtual BinAndCoord * calculateTriggerBin(ICoordinate *iCoord)=0
converts integer phi, eta coordinates to phi, eta trigger bins.
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.
ICoordinate * convertCoordsToIntegers(double phi, double eta)
converts the coordinates and corrects for overflows 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...