CMS 3D CMS Logo

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(0) {
56 }
57 
58 //--------------
59 // Destructor --
60 //--------------
62 
63  reset();
64 
65 }
66 
67 //--------------
68 // Operations --
69 //--------------
70 
71 //
72 // run phi projection unit
73 //
75 
76  load();
77  if (m_mu && ( !m_mu->empty() ) ) {
78  int lut_id = m_id / 4;
79 
80  // obtain inputs as coded in HW
81  unsigned pt = m_mu->pt_packed();
82  unsigned charge = m_mu->charge_packed();
83  unsigned eta = m_mu->eta_packed();
84  unsigned phi = m_mu->phi_packed();
85 
86  // split phi in fine and coarse
87  unsigned phi_fine = phi & ( (1<<3) - 1 ); // lower 3 bits
88  unsigned phi_coarse = phi >> 3; // upper 5 bits
89 
90  // eta conversion lookup
92  unsigned eta4bit = etaconv_lut->SpecificLookup_eta_out (lut_id, eta);
93 
94  // phi projection 1 lookups
96  unsigned cphi_fine = phipro1_lut->SpecificLookup_cphi_fine (lut_id, phi_fine, eta4bit, pt, charge);
97  unsigned cphi_ofs = phipro1_lut->SpecificLookup_cphi_ofs (lut_id, phi_fine, eta4bit, pt, charge);
98 
99  // phi projection 2 lookup
101  unsigned phi_sel_bits = phipro2_lut->SpecificLookup_phi_sel (lut_id, phi_coarse, cphi_fine, cphi_ofs, charge);
102 
103  // convert to bit array
104  //
105  // see comments in L1MuGMTMIAUEtaProLUT.cc
106  //
107  m_phi_select = (unsigned) 0;
108 
109  // shift by 9 bits //FIXME: fix when calo delivers the MIP bits correctly!
110  for (unsigned int i=0; i<9; i++)
111  if ( (phi_sel_bits & (1 << i)) == (unsigned) (1<<i))
112  m_phi_select[i+9] = 1;
113 
114  for (unsigned int i=9; i<18; i++)
115  if ( (phi_sel_bits & (1 << i)) == (unsigned) (1<<i))
116  m_phi_select[i-9] = 1;
117 
119  }
120 }
121 
122 
123 //
124 // reset phi projection unit
125 //
127 
128  m_mu = 0;
129  m_iphi = 0;
130  m_fphi = 0.;
131  m_phi_select = (unsigned int) 0;
132 }
133 
134 
135 //
136 // print results of phi projection
137 //
139 
140  edm::LogVerbatim("GMT_PhiProjection_info") << "Phi select bits: ";
141  for ( int i=0; i<18; i++ ) {
142  edm::LogVerbatim("GMT_PhiProjection_info") << m_phi_select[i] << " ";
143  }
144  edm::LogVerbatim("GMT_PhiProjection_info") << " ";
145 }
146 
147 
148 //
149 // load 1 muon into phi projection unit
150 //
152 
153  // retrieve muon from MIP & ISO bit assignment unit
154  m_mu = m_MIAU.muon( m_id % 8 );
155 }
156 
157 
int i
Definition: DBlmapReader.cc:9
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
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