ATLAS Offline Software
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 
24 namespace 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 
51 KeyUtilities::KeyUtilities(double phi, double eta) :
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 
65 }
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 
77 unsigned 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 
96 unsigned int KeyUtilities::key(const Coordinate& coord) {
97  return key(coord.phi(), coord.eta());
98 }
99 
105 ICoordinate* KeyUtilities::convertCoordsToIntegers(double phi, double eta){
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 
145 double LVL1::KeyUtilities::eta() const{
146  return m_centralEta;
147 }
148 
149 
150 
151 
154 double LVL1::KeyUtilities::phi() const{
155  return m_centralPhi;
156 }
157 
159 int LVL1::KeyUtilities::sign(int temp) const{
160  return ((temp >= 0) ? 1 : -1);
161 }
162 
164 int LVL1::KeyUtilities::sign(double temp) const{
165  return ((temp >= 0.0) ? 1 : -1);
166 }
167 
169  ICoordinate* iCoord = convertCoordsToIntegers(m_phi, m_eta);
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 
180 int 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 
189 int 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 
201 }
LVL1::KeyUtilities::sign
virtual int sign(int temp) const
returns -1 if temp is -ve and +1 if it is +ve.
Definition: KeyUtilities.cxx:164
LVL1::KeyUtilities::phi
virtual double phi() const
returns phi coordinate of centre of relevant trigger tower.
Definition: KeyUtilities.cxx:159
LVL1::KeyUtilities::m_phi
double m_phi
phi coordinate of key
Definition: KeyUtilities.h:112
LVL1::Coordinate::phi
double phi() const
return phi
Definition: Coordinate.cxx:50
LVL1::KeyUtilities::sharpRound
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.
Definition: KeyUtilities.cxx:190
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
LVL1::KeyUtilities::key
unsigned int key(double phi, double eta)
calculates a map key from passed phi, eta coordinates
Definition: KeyUtilities.cxx:82
M_PI
#define M_PI
Definition: ActiveFraction.h:11
LVL1::KeyUtilities::m_etaBin
int m_etaBin
eta bin
Definition: KeyUtilities.h:116
LVL1
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...
Definition: ICMMCPHitsCnvTool.h:18
LVL1::KeyUtilities::m_debug
bool m_debug
turns DEBUG code on and off
Definition: KeyUtilities.h:124
LVL1::KeyUtilities::KeyUtilities
KeyUtilities()
the constructor is protected so a user can never make a KeyUtilities object
Definition: KeyUtilities.cxx:42
LVL1::ICoordinate
Used by Key Classes, returns and integer coorginate for the bin Eta-Phi.
Definition: ICoordinate.h:31
LVL1::KeyUtilities::eta
virtual double eta() const
returns the centre of the TT at eta_coord:
Definition: KeyUtilities.cxx:150
LVL1::KeyUtilities::coord
Coordinate coord() const
return central coords of current key value.
Definition: KeyUtilities.cxx:199
LVL1::Coordinate
Coordinate class declaration.
Definition: TrigT1/TrigT1Interfaces/TrigT1Interfaces/Coordinate.h:50
LVL1::BinAndCoord
Used to pass data between the methods of the Key Classes: Returns the Eta and Phi bins,...
Definition: BinAndCoord.h:40
LVL1::KeyUtilities::setupThisKeyValues
void setupThisKeyValues()
Definition: KeyUtilities.cxx:173
sign
int sign(int a)
Definition: TRT_StrawNeighbourSvc.h:127
LVL1::BinAndCoord::phiBin
int phiBin() const
Definition: BinAndCoord.h:54
LVL1::KeyUtilities::round
int round(double a) const
rounds number to nearest whole number
Definition: KeyUtilities.cxx:185
LVL1::KeyUtilities::~KeyUtilities
virtual ~KeyUtilities()
Definition: KeyUtilities.cxx:69
LVL1::KeyUtilities::m_centralPhi
double m_centralPhi
this is the coordinate of the centre of the relevant trigger tower.
Definition: KeyUtilities.h:119
LVL1::KeyUtilities::m_eta
double m_eta
eta coordinate of key
Definition: KeyUtilities.h:110
KeyUtilities.h
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
LVL1::KeyUtilities::convertCoordsToIntegers
ICoordinate * convertCoordsToIntegers(double phi, double eta)
converts the coordinates and corrects for overflows etc.
Definition: KeyUtilities.cxx:110
JetVoronoiDiagramHelpers::coord
double coord
Definition: JetVoronoiDiagramHelpers.h:45
LVL1::Coordinate::eta
double eta() const
return eta
Definition: Coordinate.cxx:45
a
TList * a
Definition: liststreamerinfos.cxx:10
LVL1::BinAndCoord::etaBin
int etaBin() const
Definition: BinAndCoord.h:55
LVL1::KeyUtilities::m_phiBin
int m_phiBin
phi bin
Definition: KeyUtilities.h:114
LVL1::BinAndCoord::coords
const Coordinate * coords() const
Definition: BinAndCoord.h:56
LVL1::KeyUtilities::m_centralEta
double m_centralEta
this is the coordinate of the centre of the relevant trigger tower.
Definition: KeyUtilities.h:122
LVL1::KeyUtilities::sharpRound2
int sharpRound2(int a, int b) const
divides a/b and returns a number as follows (where +b means +ve b): if 0<a<+b, then n=1,...
Definition: KeyUtilities.cxx:194
LVL1::KeyUtilities::calculateTriggerBin
virtual BinAndCoord * calculateTriggerBin(ICoordinate *iCoord)=0
converts integer phi, eta coordinates to phi, eta trigger bins.