CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
L1MuGMTPhiProjectionUnit.cc
Go to the documentation of this file.
1 //-------------------------------------------------
2 //
3 // Class: L1MuGMTPhiProjectionUnit
4 //
5 // Description: GMT Phi Projection Unit
6 //
7 //
8 //
9 // Author :
10 // H. Sakulin CERN EP
11 //
12 // Migrated to CMSSW:
13 // I. Mikulec
14 //
15 //--------------------------------------------------
16 
17 //-----------------------
18 // This Class's Header --
19 //-----------------------
20 
22 
23 //---------------
24 // C++ Headers --
25 //---------------
26 
27 #include <iostream>
28 #include <vector>
29 #include <cmath>
30 
31 //-------------------------------
32 // Collaborating Class Headers --
33 //-------------------------------
34 
37 
39 
44 
46 
47 // --------------------------------
48 // class L1MuGMTPhiProjectionUnit
49 //---------------------------------
50 
51 //----------------
52 // Constructors --
53 //----------------
55  : m_MIAU(miau), m_id(id), m_mu(nullptr) {}
56 
57 //--------------
58 // Destructor --
59 //--------------
61 
62 //--------------
63 // Operations --
64 //--------------
65 
66 //
67 // run phi projection unit
68 //
70  load();
71  if (m_mu && (!m_mu->empty())) {
72  int lut_id = m_id / 4;
73 
74  // obtain inputs as coded in HW
75  unsigned pt = m_mu->pt_packed();
76  unsigned charge = m_mu->charge_packed();
77  unsigned eta = m_mu->eta_packed();
78  unsigned phi = m_mu->phi_packed();
79 
80  // split phi in fine and coarse
81  unsigned phi_fine = phi & ((1 << 3) - 1); // lower 3 bits
82  unsigned phi_coarse = phi >> 3; // upper 5 bits
83 
84  // eta conversion lookup
86  unsigned eta4bit = etaconv_lut->SpecificLookup_eta_out(lut_id, eta);
87 
88  // phi projection 1 lookups
90  unsigned cphi_fine = phipro1_lut->SpecificLookup_cphi_fine(lut_id, phi_fine, eta4bit, pt, charge);
91  unsigned cphi_ofs = phipro1_lut->SpecificLookup_cphi_ofs(lut_id, phi_fine, eta4bit, pt, charge);
92 
93  // phi projection 2 lookup
95  unsigned phi_sel_bits = phipro2_lut->SpecificLookup_phi_sel(lut_id, phi_coarse, cphi_fine, cphi_ofs, charge);
96 
97  // convert to bit array
98  //
99  // see comments in L1MuGMTMIAUEtaProLUT.cc
100  //
101  m_phi_select = (unsigned)0;
102 
103  // shift by 9 bits //FIXME: fix when calo delivers the MIP bits correctly!
104  for (unsigned int i = 0; i < 9; i++)
105  if ((phi_sel_bits & (1 << i)) == (unsigned)(1 << i))
106  m_phi_select[i + 9] = true;
107 
108  for (unsigned int i = 9; i < 18; i++)
109  if ((phi_sel_bits & (1 << i)) == (unsigned)(1 << i))
110  m_phi_select[i - 9] = true;
111 
113  }
114 }
115 
116 //
117 // reset phi projection unit
118 //
120  m_mu = nullptr;
121  m_iphi = 0;
122  m_fphi = 0.;
123  m_phi_select = (unsigned int)0;
124 }
125 
126 //
127 // print results of phi projection
128 //
130  edm::LogVerbatim("GMT_PhiProjection_info") << "Phi select bits: ";
131  for (int i = 0; i < 18; i++) {
132  edm::LogVerbatim("GMT_PhiProjection_info") << m_phi_select[i] << " ";
133  }
134  edm::LogVerbatim("GMT_PhiProjection_info") << " ";
135 }
136 
137 //
138 // load 1 muon into phi projection unit
139 //
141  // retrieve muon from MIP & ISO bit assignment unit
142  m_mu = m_MIAU.muon(m_id % 8);
143 }
Log< level::Info, true > LogVerbatim
void print() const
print results after phi projection
static L1MuGMTMIAUPhiPro2LUT * getMIAUPhiPro2LUT()
virtual bool empty() const
return empty flag
unsigned charge_packed() const
return charge packed as in hardware (0=pos, 1=neg)
virtual ~L1MuGMTPhiProjectionUnit()
destructor
L1MuGMTPhiProjectionUnit(const L1MuGMTMipIsoAU &miau, int id)
constructor
static L1MuGMTMIAUEtaConvLUT * getMIAUEtaConvLUT()
const L1MuGlobalMuonTrigger & GMT() const
unsigned SpecificLookup_cphi_fine(int idx, unsigned phi_fine, unsigned eta, unsigned pt, unsigned charge) const
specific lookup function for cphi_fine
void run()
run phi projection unit
unsigned eta_packed() const
return eta packed as in hardware
unsigned SpecificLookup_phi_sel(int idx, unsigned cphi_start, unsigned cphi_fine, unsigned cphi_ofs, unsigned charge) const
specific lookup function for phi_sel
m_id("(unknown)")
unsigned SpecificLookup_cphi_ofs(int idx, unsigned phi_fine, unsigned eta, unsigned pt, unsigned charge) const
specific lookup function for cphi_ofs
const L1MuGMTMipIsoAU & m_MIAU
unsigned SpecificLookup_eta_out(int idx, unsigned eta_in) const
specific lookup function for eta_out
void SetPhiSelBits(int idx, unsigned phisel)
Set phi select bits for current bx.
static L1MuGMTMIAUPhiPro1LUT * getMIAUPhiPro1LUT()
void reset()
clear phi projection unit
unsigned pt_packed() const
return pt packed as in hardware
const L1MuRegionalCand * m_mu
L1MuGMTDebugBlock * DebugBlockForFill() const
for debug: return the debug block (in order to fill it)
const L1MuRegionalCand * muon(int idx) const
return input muon (idx: 0..3: DT/CSC, 4..7: RPC)
unsigned phi_packed() const
return phi packed as in hardware