CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Static Public Attributes | Private Member Functions | Private Attributes
L1MuGMTMatcher Class Reference

#include <L1MuGMTMatcher.h>

Public Member Functions

int id () const
 return identifier More...
 
 L1MuGMTMatcher (const L1MuGlobalMuonTrigger &gmt, int id)
 constructor More...
 
const L1MuGMTMatrix< bool > & pairM () const
 return pair matrix More...
 
bool pairM (int i, int j) const
 return pair matrix More...
 
void print ()
 print matching results More...
 
void reset ()
 clear Matcher More...
 
void run ()
 run Matcher More...
 
virtual ~L1MuGMTMatcher ()
 destructor More...
 

Static Public Attributes

static const unsigned int MaxMatch = 4
 

Private Member Functions

void load ()
 
int lookup_mq (int i, int j)
 
void match ()
 

Private Attributes

std::vector< const
L1MuRegionalCand * > 
first
 
const L1MuGlobalMuonTriggerm_gmt
 
int m_id
 
L1MuGMTMatrix< int > matchQuality
 
L1MuGMTMatrix< bool > pairMatrix
 
std::vector< const
L1MuRegionalCand * > 
second
 

Detailed Description

Matching Unit in the L1 Global Muon Trigger.

Definition at line 41 of file L1MuGMTMatcher.h.

Constructor & Destructor Documentation

L1MuGMTMatcher::L1MuGMTMatcher ( const L1MuGlobalMuonTrigger gmt,
int  id 
)

constructor

Definition at line 60 of file L1MuGMTMatcher.cc.

References first, MaxMatch, and second.

60  :
61  m_gmt(gmt), m_id(id), first(MaxMatch), second(MaxMatch),
63 
64  first.reserve(MaxMatch);
65  second.reserve(MaxMatch);
66 
67 }
const L1MuGlobalMuonTrigger & m_gmt
std::vector< const L1MuRegionalCand * > second
std::vector< const L1MuRegionalCand * > first
L1MuGMTMatrix< bool > pairMatrix
static const unsigned int MaxMatch
L1MuGMTMatrix< int > matchQuality
L1MuGMTMatcher::~L1MuGMTMatcher ( )
virtual

destructor

Definition at line 72 of file L1MuGMTMatcher.cc.

References reset().

72  {
73 
74  reset();
75 
76 }
void reset()
clear Matcher

Member Function Documentation

int L1MuGMTMatcher::id ( void  ) const
inline

return identifier

Definition at line 63 of file L1MuGMTMatcher.h.

References m_id.

63 { return m_id; }
void L1MuGMTMatcher::load ( )
private

Definition at line 130 of file L1MuGMTMatcher.cc.

References L1MuGMTPSB::CSCMuon(), L1MuGlobalMuonTrigger::Data(), L1MuGMTPSB::DTBXMuon(), first, irpc, m_gmt, m_id, L1MuGMTConfig::MAXCSC, L1MuGMTConfig::MAXDTBX, L1MuGMTConfig::MAXRPCbarrel, L1MuGMTConfig::MAXRPCendcap, L1MuGMTPSB::RPCMuon(), and second.

Referenced by run().

130  {
131 
132  // barrel matcher gets DTBX and barrel RPC muons
133  if ( m_id == 0 ) {
134  for ( unsigned idt = 0; idt < L1MuGMTConfig::MAXDTBX; idt++ ) {
135  first[idt] = m_gmt.Data()->DTBXMuon(idt);
136  }
137  for ( unsigned irpc = 0; irpc < L1MuGMTConfig::MAXRPCbarrel; irpc++ ) {
138  second[irpc] = m_gmt.Data()->RPCMuon(irpc);
139  }
140  }
141 
142  // endcap matcher gets CSC and endcap RPC muons
143  if ( m_id == 1 ) {
144  for ( unsigned icsc = 0; icsc < L1MuGMTConfig::MAXCSC; icsc++ ) {
145  first[icsc] = m_gmt.Data()->CSCMuon(icsc);
146  }
147  for ( unsigned irpc = 0; irpc < L1MuGMTConfig::MAXRPCendcap; irpc++ ) {
148  second[irpc] = m_gmt.Data()->RPCMuon(irpc+4);
149  }
150  }
151 
152  // matcher in DT/CSC cancel-out unit gets DTBX and CSC muons
153  if ( m_id == 2 ) {
154  for ( unsigned idt = 0; idt < L1MuGMTConfig::MAXDTBX; idt++ ) {
155  first[idt] = m_gmt.Data()->DTBXMuon(idt);
156  }
157  for ( unsigned icsc = 0; icsc < L1MuGMTConfig::MAXCSC; icsc++ ) {
158  second[icsc] = m_gmt.Data()->CSCMuon(icsc);
159  }
160  }
161 
162  // matcher in CSC/DT cancel-out unit gets CSC and DTBX muons
163  if ( m_id==3 ) {
164  for ( unsigned icsc = 0; icsc < L1MuGMTConfig::MAXCSC; icsc++ ) {
165  first[icsc] = m_gmt.Data()->CSCMuon(icsc);
166  }
167  for ( unsigned idt = 0; idt < L1MuGMTConfig::MAXDTBX; idt++ ) {
168  second[idt] = m_gmt.Data()->DTBXMuon(idt);
169  }
170  }
171 
172  // bRPC/CSC gets barrel RPC and CSC muons
173  if ( m_id == 4 ) {
174  for ( unsigned irpc = 0; irpc < L1MuGMTConfig::MAXRPCbarrel; irpc++ ) {
175  first[irpc] = m_gmt.Data()->RPCMuon(irpc);
176  }
177  for ( unsigned icsc = 0; icsc < L1MuGMTConfig::MAXCSC; icsc++ ) {
178  second[icsc] = m_gmt.Data()->CSCMuon(icsc);
179  }
180  }
181 
182  // bRPC/DT matcher gets forward RPC and DTBX muons
183  if ( m_id == 5 ) {
184  for ( unsigned irpc = 0; irpc < L1MuGMTConfig::MAXRPCendcap; irpc++ ) {
185  first[irpc] = m_gmt.Data()->RPCMuon(irpc+4);
186  }
187  for ( unsigned idt = 0; idt < L1MuGMTConfig::MAXDTBX; idt++ ) {
188  second[idt] = m_gmt.Data()->DTBXMuon(idt);
189  }
190  }
191 }
const L1MuGlobalMuonTrigger & m_gmt
const L1MuRegionalCand * CSCMuon(int index) const
get CSC muon
Definition: L1MuGMTPSB.cc:254
std::vector< const L1MuRegionalCand * > second
const L1MuGMTPSB * Data() const
return pointer to PSB
const L1MuRegionalCand * RPCMuon(int index) const
get RPC muon
Definition: L1MuGMTPSB.cc:234
int irpc
static const unsigned int MAXCSC
Definition: L1MuGMTConfig.h:89
static const unsigned int MAXDTBX
Definition: L1MuGMTConfig.h:89
static const unsigned int MAXRPCendcap
Definition: L1MuGMTConfig.h:88
std::vector< const L1MuRegionalCand * > first
const L1MuRegionalCand * DTBXMuon(int index) const
get DTBX muon
Definition: L1MuGMTPSB.cc:244
static const unsigned int MAXRPCbarrel
Definition: L1MuGMTConfig.h:88
int L1MuGMTMatcher::lookup_mq ( int  i,
int  j 
)
private

Definition at line 271 of file L1MuGMTMatcher.cc.

References kinem::delta_phi(), relativeConstraints::empty, first, L1MuGMTConfig::getLFCOUDeltaEtaLUT(), L1MuGMTConfig::getLFDeltaEtaLUT(), L1MuGMTConfig::getLFDisableHotLUT(), L1MuGMTConfig::getLFMatchQualLUT(), L1MuGMTConfig::getLFOvlEtaConvLUT(), i, L1MuGMTSortRankUnit::isDisabled(), j, m_id, L1MuSignedPacking< Bits >::packedFromIdx(), second, L1MuGMTLFCOUDeltaEtaLUT::SpecificLookup_delta_eta(), L1MuGMTLFDeltaEtaLUT::SpecificLookup_delta_eta(), L1MuGMTLFDisableHotLUT::SpecificLookup_disable_hot(), L1MuGMTLFOvlEtaConvLUT::SpecificLookup_eta_ovl(), and L1MuGMTLFMatchQualLUT::SpecificLookup_mq().

Referenced by match().

271  {
272 
273  bool empty1 = ( first[i] != 0 ) ? first[i]->empty() : true;
274  bool empty2 = ( second[j] != 0 ) ? second[j]->empty() : true;
275  if ( empty1 || empty2) return 0;
276 
277  //
278  // (1) calculate delta-phi (integer version)
279  //
280  unsigned phi1 = first[i]->phi_packed();
281  unsigned phi2 = second[j]->phi_packed();
282 
283  int delta_phi = ( ( phi1 - phi2 + 3*72 ) % 144 ) - 72;
284 
285  if (delta_phi < -3 || delta_phi >3)
286  delta_phi = -4;
287 
288  L1MuSignedPacking<3> DPhiPacking;
289  unsigned delta_phi_packed = DPhiPacking.packedFromIdx (delta_phi);
290 
291  //
292  // (2) look-up delta-eta
293  //
294  unsigned eta1 = first[i]->eta_packed();
295  unsigned eta2 = second[j]->eta_packed();
296 
297  unsigned delta_eta_packed = 0;
298 
299  if (m_id == 0 || m_id == 1) { // main matching units
300  // first is dt/csc, second is rpc
301 
302  bool disable1 = L1MuGMTSortRankUnit::isDisabled(first[i]);
303  bool disable2 = L1MuGMTSortRankUnit::isDisabled(second[j]);;
304 
305  if (disable1 || disable2) return 0;
306 
308  delta_eta_packed = de_lut->SpecificLookup_delta_eta (m_id, eta1, eta2);
309  }
310  else { // overlap cancel-out matching units
311  // first is own chip, second is other chip
312  int idx1 = first[i]->type_idx();
313  int idx1_dcrr = (idx1==1)?2:(idx1==2)?1:idx1;
314 
315  int idx2 = second[j]->type_idx();
316  int idx2_dcrr = (idx2==1)?2:(idx2==2)?1:idx2;
317 
318  bool disable1 = L1MuGMTSortRankUnit::isDisabled(first[i]);
319 
321  bool disable2 = dishot_lut->SpecificLookup_disable_hot (idx2_dcrr,
322  second[j]->eta_packed(),
323  second[j]->phi_packed()) == 1;
324 
325  if (disable1 || disable2) return 0;
326 
327  // convert eta to 4-bit, first
329 
330 
331  unsigned eta1_4bit = econv_lut->SpecificLookup_eta_ovl (idx1_dcrr, eta1);
332  unsigned eta2_4bit = econv_lut->SpecificLookup_eta_ovl (idx2_dcrr, eta2);
333 
334  // look up delta eta
336  delta_eta_packed = cou_de_lut->SpecificLookup_delta_eta (m_id-2, eta1_4bit, eta2_4bit);
337  }
338 
339  //
340  // (3) look up match quality
341  //
343 
344  unsigned mq = mq_lut->SpecificLookup_mq(m_id, delta_eta_packed, delta_phi_packed);
345 
346  return mq;
347 }
int i
Definition: DBlmapReader.cc:9
virtual unsigned packedFromIdx(int idx) const
get the packed notation of a value, check range
Definition: L1MuPacking.h:100
static bool isDisabled(const L1MuRegionalCand *)
Diable bit.
unsigned SpecificLookup_eta_ovl(int idx, unsigned eta6) const
specific lookup function for eta_ovl
static L1MuGMTLFMatchQualLUT * getLFMatchQualLUT()
static L1MuGMTLFOvlEtaConvLUT * getLFOvlEtaConvLUT()
unsigned SpecificLookup_mq(int idx, unsigned delta_eta, unsigned delta_phi) const
specific lookup function for mq
std::vector< const L1MuRegionalCand * > second
static L1MuGMTLFDeltaEtaLUT * getLFDeltaEtaLUT()
unsigned SpecificLookup_delta_eta(int idx, unsigned eta_dtcsc, unsigned eta_rpc) const
specific lookup function for delta_eta
int j
Definition: DBlmapReader.cc:9
static L1MuGMTLFDisableHotLUT * getLFDisableHotLUT()
std::vector< const L1MuRegionalCand * > first
double delta_phi(double ph11, double phi2)
Definition: AnglesUtil.h:91
static L1MuGMTLFCOUDeltaEtaLUT * getLFCOUDeltaEtaLUT()
unsigned SpecificLookup_disable_hot(int idx, unsigned eta, unsigned phi) const
specific lookup function for disable_hot
unsigned SpecificLookup_delta_eta(int idx, unsigned eta1, unsigned eta2) const
specific lookup function for delta_eta
void L1MuGMTMatcher::match ( )
private

Definition at line 197 of file L1MuGMTMatcher.cc.

References L1MuGlobalMuonTrigger::DebugBlockForFill(), i, L1MuGMTMatrix< T >::init(), L1MuGMTMatrix< T >::isMax(), j, lookup_mq(), m_gmt, m_id, matchQuality, max(), MaxMatch, pairMatrix, L1MuGMTDebugBlock::SetMQMatrix(), and L1MuGMTDebugBlock::SetPairMatrix().

Referenced by run().

197  {
198 
200  L1MuGMTMatrix<bool> disableMatrix(MaxMatch,MaxMatch);
201  maxMatrix.init(false);
202  disableMatrix.init(false);
203 
204  // loop over all combinations
205 
206  unsigned i,j;
207  for ( i = 0; i < MaxMatch; i++ )
208  for ( j = 0; j < MaxMatch; j++ )
209  matchQuality(i,j) = lookup_mq(i,j);
210 
211  // store in debug block
213 
214  // fill MAX matrix
215 
216  for ( i = 0; i < MaxMatch; i++ )
217  for ( j = 0; j < MaxMatch; j++ )
218  maxMatrix(i,j) = matchQuality.isMax(i,j) && (matchQuality(i,j) != 0);
219 
220  // fill disable matrix
221 
222  for ( i = 0; i < MaxMatch; i++ )
223  for ( j = 0; j < MaxMatch; j++ ) {
224 
225  for ( unsigned i1 = 0; i1 < MaxMatch; i1++ )
226  if ( i1 != i ) disableMatrix(i,j) = disableMatrix(i,j) || maxMatrix(i1,j);
227 
228  for ( unsigned j1 = 0; j1 < MaxMatch; j1++ )
229  if ( j1 != j ) disableMatrix(i,j) = disableMatrix(i,j) || maxMatrix(i,j1);
230  }
231 
232  // fill pair matrix
233 
234  for ( i = 0; i < MaxMatch; i++ ) {
235  for ( j = 0; j < MaxMatch; j++ ) {
236 
237  bool max = true;
238 
239  for ( unsigned i1 = 0; i1 < i; i1++ ) {
240  max = max && ((matchQuality(i,j) > matchQuality(i1,j)) ||
241  disableMatrix(i1,j));
242  }
243 
244  for ( unsigned i1 = i+1; i1 < MaxMatch; i1++ ) {
245  max = max && ((matchQuality(i,j) >= matchQuality(i1,j)) ||
246  disableMatrix(i1,j));
247  }
248 
249  for ( unsigned j1 = 0; j1 < j; j1++ ) {
250  max = max && ((matchQuality(i,j) > matchQuality(i,j1)) ||
251  disableMatrix(i,j1));
252  }
253 
254  for ( unsigned j1 = j+1; j1 < MaxMatch; j1++ ) {
255  max = max && ((matchQuality(i,j) >= matchQuality(i,j1)) ||
256  disableMatrix(i,j1));
257  }
258 
259  pairMatrix(i,j) = max && (matchQuality(i,j) != 0);
260 
261  }
262  }
263 
264  // store in debug block
266 }
int i
Definition: DBlmapReader.cc:9
const L1MuGlobalMuonTrigger & m_gmt
bool isMax(int r, int c) const
is the element (r,c) the max. entry in its row and column?
int lookup_mq(int i, int j)
const T & max(const T &a, const T &b)
void SetPairMatrix(int idx, L1MuGMTMatrix< bool > pm)
Set pair matrices.
int j
Definition: DBlmapReader.cc:9
void SetMQMatrix(int idx, L1MuGMTMatrix< int > mqm)
Set match quality matrices.
L1MuGMTMatrix< bool > pairMatrix
static const unsigned int MaxMatch
L1MuGMTMatrix< int > matchQuality
L1MuGMTDebugBlock * DebugBlockForFill() const
for debug: return the debug block (in order to fill it)
const L1MuGMTMatrix<bool>& L1MuGMTMatcher::pairM ( ) const
inline

return pair matrix

Definition at line 66 of file L1MuGMTMatcher.h.

References pairMatrix.

Referenced by L1MuGMTCancelOutUnit::decide(), and L1MuGMTMerger::merge().

66 { return pairMatrix; }
L1MuGMTMatrix< bool > pairMatrix
bool L1MuGMTMatcher::pairM ( int  i,
int  j 
) const
inline

return pair matrix

Definition at line 69 of file L1MuGMTMatcher.h.

References pairMatrix.

69 { return pairMatrix(i,j); }
int i
Definition: DBlmapReader.cc:9
int j
Definition: DBlmapReader.cc:9
L1MuGMTMatrix< bool > pairMatrix
void L1MuGMTMatcher::print ( void  )

print matching results

Definition at line 111 of file L1MuGMTMatcher.cc.

References L1MuGMTConfig::Debug(), matchQuality, pairMatrix, and L1MuGMTMatrix< T >::print().

Referenced by L1MuGlobalMuonTrigger::produce(), and L1MuGMTCancelOutUnit::run().

111  {
112 
113  edm::LogVerbatim("GMT_Matcher_info");
114  if ( L1MuGMTConfig::Debug(4) ) {
115  edm::LogVerbatim("GMT_Matcher_info") << "MATCH Quality : ";
117  }
118 
119  edm::LogVerbatim("GMT_Matcher_info") << "PAIR Matrix : ";
120  pairMatrix.print();
121 
122  edm::LogVerbatim("GMT_Matcher_info");
123 
124 }
static bool Debug()
void print() const
print matrix
L1MuGMTMatrix< bool > pairMatrix
L1MuGMTMatrix< int > matchQuality
void L1MuGMTMatcher::reset ( void  )

clear Matcher

Definition at line 95 of file L1MuGMTMatcher.cc.

References first, i, L1MuGMTMatrix< T >::init(), matchQuality, MaxMatch, pairMatrix, and second.

Referenced by L1MuGlobalMuonTrigger::reset(), L1MuGMTCancelOutUnit::reset(), and ~L1MuGMTMatcher().

95  {
96 
97  matchQuality.init(0);
98  pairMatrix.init(false);
99 
100  for ( unsigned i = 0; i < MaxMatch; i++ ) {
101  first[i] = 0;
102  second[i] = 0;
103  }
104 
105 }
int i
Definition: DBlmapReader.cc:9
void init(T v=0)
initialize matrix
std::vector< const L1MuRegionalCand * > second
std::vector< const L1MuRegionalCand * > first
L1MuGMTMatrix< bool > pairMatrix
static const unsigned int MaxMatch
L1MuGMTMatrix< int > matchQuality
void L1MuGMTMatcher::run ( void  )

run Matcher

Definition at line 85 of file L1MuGMTMatcher.cc.

References load(), and match().

Referenced by L1MuGlobalMuonTrigger::produce(), and L1MuGMTCancelOutUnit::run().

85  {
86 
87  load();
88  match();
89 
90 }

Member Data Documentation

std::vector<const L1MuRegionalCand*> L1MuGMTMatcher::first
private

Definition at line 85 of file L1MuGMTMatcher.h.

Referenced by L1MuGMTMatcher(), load(), lookup_mq(), and reset().

const L1MuGlobalMuonTrigger& L1MuGMTMatcher::m_gmt
private

Definition at line 82 of file L1MuGMTMatcher.h.

Referenced by load(), and match().

int L1MuGMTMatcher::m_id
private

Definition at line 83 of file L1MuGMTMatcher.h.

Referenced by id(), load(), lookup_mq(), and match().

L1MuGMTMatrix<int> L1MuGMTMatcher::matchQuality
private

Definition at line 88 of file L1MuGMTMatcher.h.

Referenced by match(), print(), and reset().

const unsigned int L1MuGMTMatcher::MaxMatch = 4
static

Definition at line 45 of file L1MuGMTMatcher.h.

Referenced by L1MuGMTMatcher(), match(), and reset().

L1MuGMTMatrix<bool> L1MuGMTMatcher::pairMatrix
private

Definition at line 89 of file L1MuGMTMatcher.h.

Referenced by match(), pairM(), print(), and reset().

std::vector<const L1MuRegionalCand*> L1MuGMTMatcher::second
private

Definition at line 86 of file L1MuGMTMatcher.h.

Referenced by L1MuGMTMatcher(), load(), lookup_mq(), and reset().