CMS 3D CMS Logo

MicroGMTMatchQualFineLUT.cc
Go to the documentation of this file.
2 #include "TMath.h"
3 
5  const double maxDR,
6  const double fEta,
7  const double fEtaCoarse,
8  const double fPhi,
9  cancel_t cancelType)
10  : MicroGMTMatchQualLUT(), m_fEtaCoarse(fEtaCoarse) {
11  m_dEtaRedInWidth = 5;
12  m_dPhiRedInWidth = 3;
13  m_maxDR = maxDR;
14  m_fEta = fEta;
15  m_fPhi = fPhi;
16  m_cancelType = cancelType;
17 
19  m_outWidth = 1;
20 
21  m_dPhiRedMask = (1 << m_dPhiRedInWidth) - 1;
23  m_etaFineMask = 1 << (m_dEtaRedInWidth + m_dPhiRedInWidth);
24 
28 
29  m_phiScale = 2 * TMath::Pi() / 576.0;
30  m_etaScale = 0.010875;
31 
32  if (fname != std::string("")) {
33  load(fname);
34  } else {
35  initialize();
36  }
37 }
38 
40  : MicroGMTMatchQualLUT(lut) {
41  m_dEtaRedInWidth = 5;
42  m_dPhiRedInWidth = 3;
43  m_cancelType = cancelType;
44 
46  m_outWidth = 1;
47 
48  m_dPhiRedMask = (1 << m_dPhiRedInWidth) - 1;
50  m_etaFineMask = 1 << (m_dEtaRedInWidth + m_dPhiRedInWidth);
51 
55 
56  m_phiScale = 2 * TMath::Pi() / 576.0;
57  m_etaScale = 0.010875;
58 
59  m_initialized = true;
60 }
61 
62 int l1t::MicroGMTMatchQualFineLUT::lookup(int etaFine, int dEtaRed, int dPhiRed) const {
63  // normalize these two to the same scale and then calculate?
64  if (m_initialized) {
65  return data((unsigned)hashInput(
66  checkedInput(etaFine, 1), checkedInput(dEtaRed, m_dEtaRedInWidth), checkedInput(dPhiRed, m_dPhiRedInWidth)));
67  }
68  double dEta = m_fEtaCoarse * dEtaRed * m_etaScale;
69  if (etaFine > 0) {
70  dEta = m_fEta * dEtaRed * m_etaScale;
71  }
72  double dPhi = m_fPhi * dPhiRed * m_phiScale;
73  double dR = std::sqrt(dEta * dEta + dPhi * dPhi);
74 
75  int retVal = dR <= m_maxDR ? 1 : 0;
76 
77  return retVal;
78 }
79 
81  if (m_initialized) {
82  return data((unsigned)in);
83  }
84 
85  int etaFine = 0;
86  int dEtaRed = 0;
87  int dPhiRed = 0;
88  unHashInput(in, etaFine, dEtaRed, dPhiRed);
89  return lookup(etaFine, dEtaRed, dPhiRed);
90 }
91 
92 int l1t::MicroGMTMatchQualFineLUT::hashInput(int etaFine, int dEtaRed, int dPhiRed) const {
93  int result = 0;
94  result += dPhiRed;
95  result += dEtaRed << m_dPhiRedInWidth;
96  result += etaFine << (m_dEtaRedInWidth + m_dPhiRedInWidth);
97  return result;
98 }
99 
100 void l1t::MicroGMTMatchQualFineLUT::unHashInput(int input, int& etaFine, int& dEtaRed, int& dPhiRed) const {
101  dPhiRed = input & m_dPhiRedMask;
102  dEtaRed = (input & m_dEtaRedMask) >> m_dPhiRedInWidth;
103  etaFine = (input & m_etaFineMask) >> (m_dEtaRedInWidth + m_dPhiRedInWidth);
104 }
const double Pi
unsigned m_totalInWidth
Definition: MicroGMTLUT.h:34
int load(const std::string &inFileName)
Definition: MicroGMTLUT.cc:15
int checkedInput(unsigned in, unsigned maxWidth) const
Definition: MicroGMTLUT.cc:51
int lookupPacked(int in) const override
std::vector< MicroGMTConfiguration::input_t > m_inputs
Definition: MicroGMTLUT.h:36
static std::string const input
Definition: EdmProvDump.cc:48
void unHashInput(int input, int &etaFine, int &dEta, int &dPhi) const
int lookup(int etaFine, int dEta, int dPhi) const override
T sqrt(T t)
Definition: SSEVec.h:19
Definition: LUT.h:29
int hashInput(int etaFine, int dEta, int dPhi) const
string fname
main script
unsigned m_outWidth
Definition: MicroGMTLUT.h:35
int data(unsigned int address) const
Definition: LUT.h:46