CMS 3D CMS Logo

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::L1MuGMTMatcher ( const L1MuGlobalMuonTrigger gmt,
int  id 
)

constructor

Definition at line 60 of file L1MuGMTMatcher.cc.

References first, MaxMatch, and second.

61  : m_gmt(gmt),
62  m_id(id),
63  first(MaxMatch),
66  pairMatrix(MaxMatch, MaxMatch, false) {
67  first.reserve(MaxMatch);
68  second.reserve(MaxMatch);
69 }
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::~L1MuGMTMatcher ( )
virtual

destructor

Definition at line 74 of file L1MuGMTMatcher.cc.

References reset().

74 { reset(); }
void reset()
clear Matcher

Member Function Documentation

◆ id()

int L1MuGMTMatcher::id ( void  ) const
inline

return identifier

Definition at line 61 of file L1MuGMTMatcher.h.

References m_id.

61 { return m_id; }

◆ load()

void L1MuGMTMatcher::load ( )
private

Definition at line 120 of file L1MuGMTMatcher.cc.

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

Referenced by run().

120  {
121  // barrel matcher gets DTBX and barrel RPC muons
122  if (m_id == 0) {
123  for (unsigned idt = 0; idt < L1MuGMTConfig::MAXDTBX; idt++) {
124  first[idt] = m_gmt.Data()->DTBXMuon(idt);
125  }
126  for (unsigned irpc = 0; irpc < L1MuGMTConfig::MAXRPCbarrel; irpc++) {
127  second[irpc] = m_gmt.Data()->RPCMuon(irpc);
128  }
129  }
130 
131  // endcap matcher gets CSC and endcap RPC muons
132  if (m_id == 1) {
133  for (unsigned icsc = 0; icsc < L1MuGMTConfig::MAXCSC; icsc++) {
134  first[icsc] = m_gmt.Data()->CSCMuon(icsc);
135  }
136  for (unsigned irpc = 0; irpc < L1MuGMTConfig::MAXRPCendcap; irpc++) {
137  second[irpc] = m_gmt.Data()->RPCMuon(irpc + 4);
138  }
139  }
140 
141  // matcher in DT/CSC cancel-out unit gets DTBX and CSC muons
142  if (m_id == 2) {
143  for (unsigned idt = 0; idt < L1MuGMTConfig::MAXDTBX; idt++) {
144  first[idt] = m_gmt.Data()->DTBXMuon(idt);
145  }
146  for (unsigned icsc = 0; icsc < L1MuGMTConfig::MAXCSC; icsc++) {
147  second[icsc] = m_gmt.Data()->CSCMuon(icsc);
148  }
149  }
150 
151  // matcher in CSC/DT cancel-out unit gets CSC and DTBX muons
152  if (m_id == 3) {
153  for (unsigned icsc = 0; icsc < L1MuGMTConfig::MAXCSC; icsc++) {
154  first[icsc] = m_gmt.Data()->CSCMuon(icsc);
155  }
156  for (unsigned idt = 0; idt < L1MuGMTConfig::MAXDTBX; idt++) {
157  second[idt] = m_gmt.Data()->DTBXMuon(idt);
158  }
159  }
160 
161  // bRPC/CSC gets barrel RPC and CSC muons
162  if (m_id == 4) {
163  for (unsigned irpc = 0; irpc < L1MuGMTConfig::MAXRPCbarrel; irpc++) {
164  first[irpc] = m_gmt.Data()->RPCMuon(irpc);
165  }
166  for (unsigned icsc = 0; icsc < L1MuGMTConfig::MAXCSC; icsc++) {
167  second[icsc] = m_gmt.Data()->CSCMuon(icsc);
168  }
169  }
170 
171  // bRPC/DT matcher gets forward RPC and DTBX muons
172  if (m_id == 5) {
173  for (unsigned irpc = 0; irpc < L1MuGMTConfig::MAXRPCendcap; irpc++) {
174  first[irpc] = m_gmt.Data()->RPCMuon(irpc + 4);
175  }
176  for (unsigned idt = 0; idt < L1MuGMTConfig::MAXDTBX; idt++) {
177  second[idt] = m_gmt.Data()->DTBXMuon(idt);
178  }
179  }
180 }
const L1MuGlobalMuonTrigger & m_gmt
const L1MuRegionalCand * RPCMuon(int index) const
get RPC muon
Definition: L1MuGMTPSB.cc:224
const L1MuRegionalCand * DTBXMuon(int index) const
get DTBX muon
Definition: L1MuGMTPSB.cc:231
std::vector< const L1MuRegionalCand * > second
const L1MuRegionalCand * CSCMuon(int index) const
get CSC muon
Definition: L1MuGMTPSB.cc:238
static const unsigned int MAXCSC
Definition: L1MuGMTConfig.h:85
static const unsigned int MAXDTBX
Definition: L1MuGMTConfig.h:85
static const unsigned int MAXRPCendcap
Definition: L1MuGMTConfig.h:85
std::vector< const L1MuRegionalCand * > first
static const unsigned int MAXRPCbarrel
Definition: L1MuGMTConfig.h:85
const L1MuGMTPSB * Data() const
return pointer to PSB

◆ lookup_mq()

int L1MuGMTMatcher::lookup_mq ( int  i,
int  j 
)
private

Definition at line 251 of file L1MuGMTMatcher.cc.

References HLT_2024v14_cff::delta_phi, relativeConstraints::empty, HLT_2024v14_cff::eta1, HLT_2024v14_cff::eta2, first, L1MuGMTConfig::getLFCOUDeltaEtaLUT(), L1MuGMTConfig::getLFDeltaEtaLUT(), L1MuGMTConfig::getLFDisableHotLUT(), L1MuGMTConfig::getLFMatchQualLUT(), L1MuGMTConfig::getLFOvlEtaConvLUT(), mps_fire::i, L1MuGMTSortRankUnit::isDisabled(), dqmiolumiharvest::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().

251  {
252  bool empty1 = (first[i] != nullptr) ? first[i]->empty() : true;
253  bool empty2 = (second[j] != nullptr) ? second[j]->empty() : true;
254  if (empty1 || empty2)
255  return 0;
256 
257  //
258  // (1) calculate delta-phi (integer version)
259  //
260  unsigned phi1 = first[i]->phi_packed();
261  unsigned phi2 = second[j]->phi_packed();
262 
263  int delta_phi = ((phi1 - phi2 + 3 * 72) % 144) - 72;
264 
265  if (delta_phi < -3 || delta_phi > 3)
266  delta_phi = -4;
267 
268  L1MuSignedPacking<3> DPhiPacking;
269  unsigned delta_phi_packed = DPhiPacking.packedFromIdx(delta_phi);
270 
271  //
272  // (2) look-up delta-eta
273  //
274  unsigned eta1 = first[i]->eta_packed();
275  unsigned eta2 = second[j]->eta_packed();
276 
277  unsigned delta_eta_packed = 0;
278 
279  if (m_id == 0 || m_id == 1) { // main matching units
280  // first is dt/csc, second is rpc
281 
282  bool disable1 = L1MuGMTSortRankUnit::isDisabled(first[i]);
283  bool disable2 = L1MuGMTSortRankUnit::isDisabled(second[j]);
284  ;
285 
286  if (disable1 || disable2)
287  return 0;
288 
290  delta_eta_packed = de_lut->SpecificLookup_delta_eta(m_id, eta1, eta2);
291  } else { // overlap cancel-out matching units
292  // first is own chip, second is other chip
293  int idx1 = first[i]->type_idx();
294  int idx1_dcrr = (idx1 == 1) ? 2 : (idx1 == 2) ? 1 : idx1;
295 
296  int idx2 = second[j]->type_idx();
297  int idx2_dcrr = (idx2 == 1) ? 2 : (idx2 == 2) ? 1 : idx2;
298 
299  bool disable1 = L1MuGMTSortRankUnit::isDisabled(first[i]);
300 
302  bool disable2 =
303  dishot_lut->SpecificLookup_disable_hot(idx2_dcrr, second[j]->eta_packed(), second[j]->phi_packed()) == 1;
304 
305  if (disable1 || disable2)
306  return 0;
307 
308  // convert eta to 4-bit, first
310 
311  unsigned eta1_4bit = econv_lut->SpecificLookup_eta_ovl(idx1_dcrr, eta1);
312  unsigned eta2_4bit = econv_lut->SpecificLookup_eta_ovl(idx2_dcrr, eta2);
313 
314  // look up delta eta
316  delta_eta_packed = cou_de_lut->SpecificLookup_delta_eta(m_id - 2, eta1_4bit, eta2_4bit);
317  }
318 
319  //
320  // (3) look up match quality
321  //
323 
324  unsigned mq = mq_lut->SpecificLookup_mq(m_id, delta_eta_packed, delta_phi_packed);
325 
326  return mq;
327 }
unsigned SpecificLookup_disable_hot(int idx, unsigned eta, unsigned phi) const
specific lookup function for disable_hot
unsigned SpecificLookup_eta_ovl(int idx, unsigned eta6) const
specific lookup function for eta_ovl
static bool isDisabled(const L1MuRegionalCand *)
Diable bit.
static L1MuGMTLFMatchQualLUT * getLFMatchQualLUT()
static L1MuGMTLFOvlEtaConvLUT * getLFOvlEtaConvLUT()
unsigned SpecificLookup_delta_eta(int idx, unsigned eta_dtcsc, unsigned eta_rpc) const
specific lookup function for delta_eta
std::vector< const L1MuRegionalCand * > second
static L1MuGMTLFDeltaEtaLUT * getLFDeltaEtaLUT()
static L1MuGMTLFDisableHotLUT * getLFDisableHotLUT()
std::vector< const L1MuRegionalCand * > first
unsigned SpecificLookup_delta_eta(int idx, unsigned eta1, unsigned eta2) const
specific lookup function for delta_eta
unsigned packedFromIdx(int idx) const override
get the packed notation of a value, check range
Definition: L1MuPacking.h:109
static L1MuGMTLFCOUDeltaEtaLUT * getLFCOUDeltaEtaLUT()
unsigned SpecificLookup_mq(int idx, unsigned delta_eta, unsigned delta_phi) const
specific lookup function for mq

◆ match()

void L1MuGMTMatcher::match ( )
private

Definition at line 185 of file L1MuGMTMatcher.cc.

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

Referenced by run().

185  {
186  L1MuGMTMatrix<bool> maxMatrix(MaxMatch, MaxMatch, false);
187  L1MuGMTMatrix<bool> disableMatrix(MaxMatch, MaxMatch, false);
188 
189  // loop over all combinations
190 
191  unsigned i, j;
192  for (i = 0; i < MaxMatch; i++)
193  for (j = 0; j < MaxMatch; j++)
194  matchQuality(i, j) = lookup_mq(i, j);
195 
196  // store in debug block
198 
199  // fill MAX matrix
200 
201  for (i = 0; i < MaxMatch; i++)
202  for (j = 0; j < MaxMatch; j++)
203  maxMatrix(i, j) = matchQuality.isMax(i, j) && (matchQuality(i, j) != 0);
204 
205  // fill disable matrix
206 
207  for (i = 0; i < MaxMatch; i++)
208  for (j = 0; j < MaxMatch; j++) {
209  for (unsigned i1 = 0; i1 < MaxMatch; i1++)
210  if (i1 != i)
211  disableMatrix(i, j) = disableMatrix(i, j) || maxMatrix(i1, j);
212 
213  for (unsigned j1 = 0; j1 < MaxMatch; j1++)
214  if (j1 != j)
215  disableMatrix(i, j) = disableMatrix(i, j) || maxMatrix(i, j1);
216  }
217 
218  // fill pair matrix
219 
220  for (i = 0; i < MaxMatch; i++) {
221  for (j = 0; j < MaxMatch; j++) {
222  bool max = true;
223 
224  for (unsigned i1 = 0; i1 < i; i1++) {
225  max = max && ((matchQuality(i, j) > matchQuality(i1, j)) || disableMatrix(i1, j));
226  }
227 
228  for (unsigned i1 = i + 1; i1 < MaxMatch; i1++) {
229  max = max && ((matchQuality(i, j) >= matchQuality(i1, j)) || disableMatrix(i1, j));
230  }
231 
232  for (unsigned j1 = 0; j1 < j; j1++) {
233  max = max && ((matchQuality(i, j) > matchQuality(i, j1)) || disableMatrix(i, j1));
234  }
235 
236  for (unsigned j1 = j + 1; j1 < MaxMatch; j1++) {
237  max = max && ((matchQuality(i, j) >= matchQuality(i, j1)) || disableMatrix(i, j1));
238  }
239 
240  pairMatrix(i, j) = max && (matchQuality(i, j) != 0);
241  }
242  }
243 
244  // store in debug block
246 }
bool isMax(int r, int c) const
is the element (r,c) the max. entry in its row and column?
const L1MuGlobalMuonTrigger & m_gmt
L1MuGMTDebugBlock * DebugBlockForFill() const
for debug: return the debug block (in order to fill it)
int lookup_mq(int i, int j)
void SetPairMatrix(int idx, L1MuGMTMatrix< bool > pm)
Set pair matrices.
void SetMQMatrix(int idx, L1MuGMTMatrix< int > mqm)
Set match quality matrices.
L1MuGMTMatrix< bool > pairMatrix
static const unsigned int MaxMatch
L1MuGMTMatrix< int > matchQuality

◆ pairM() [1/2]

const L1MuGMTMatrix<bool>& L1MuGMTMatcher::pairM ( ) const
inline

return pair matrix

Definition at line 64 of file L1MuGMTMatcher.h.

References pairMatrix.

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

64 { return pairMatrix; }
L1MuGMTMatrix< bool > pairMatrix

◆ pairM() [2/2]

bool L1MuGMTMatcher::pairM ( int  i,
int  j 
) const
inline

return pair matrix

Definition at line 67 of file L1MuGMTMatcher.h.

References mps_fire::i, dqmiolumiharvest::j, and pairMatrix.

67 { return pairMatrix(i, j); }
L1MuGMTMatrix< bool > pairMatrix

◆ print()

void L1MuGMTMatcher::print ( void  )

print matching results

Definition at line 104 of file L1MuGMTMatcher.cc.

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

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

104  {
105  edm::LogVerbatim("GMT_Matcher_info");
106  if (L1MuGMTConfig::Debug(4)) {
107  edm::LogVerbatim("GMT_Matcher_info") << "MATCH Quality : ";
109  }
110 
111  edm::LogVerbatim("GMT_Matcher_info") << "PAIR Matrix : ";
112  pairMatrix.print();
113 
114  edm::LogVerbatim("GMT_Matcher_info");
115 }
Log< level::Info, true > LogVerbatim
static bool Debug()
L1MuGMTMatrix< bool > pairMatrix
void print() const
print matrix
L1MuGMTMatrix< int > matchQuality

◆ reset()

void L1MuGMTMatcher::reset ( void  )

clear Matcher

Definition at line 91 of file L1MuGMTMatcher.cc.

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

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

91  {
93  pairMatrix.reset(false);
94 
95  for (unsigned i = 0; i < MaxMatch; i++) {
96  first[i] = nullptr;
97  second[i] = nullptr;
98  }
99 }
std::vector< const L1MuRegionalCand * > second
void reset(T v)
reset all elements
std::vector< const L1MuRegionalCand * > first
L1MuGMTMatrix< bool > pairMatrix
static const unsigned int MaxMatch
L1MuGMTMatrix< int > matchQuality

◆ run()

void L1MuGMTMatcher::run ( )

run Matcher

Definition at line 83 of file L1MuGMTMatcher.cc.

References load(), and match().

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

83  {
84  load();
85  match();
86 }

Member Data Documentation

◆ first

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

Definition at line 81 of file L1MuGMTMatcher.h.

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

◆ m_gmt

const L1MuGlobalMuonTrigger& L1MuGMTMatcher::m_gmt
private

Definition at line 78 of file L1MuGMTMatcher.h.

Referenced by load(), and match().

◆ m_id

int L1MuGMTMatcher::m_id
private

Definition at line 79 of file L1MuGMTMatcher.h.

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

◆ matchQuality

L1MuGMTMatrix<int> L1MuGMTMatcher::matchQuality
private

Definition at line 84 of file L1MuGMTMatcher.h.

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

◆ MaxMatch

const unsigned int L1MuGMTMatcher::MaxMatch = 4
static

Definition at line 43 of file L1MuGMTMatcher.h.

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

◆ pairMatrix

L1MuGMTMatrix<bool> L1MuGMTMatcher::pairMatrix
private

Definition at line 85 of file L1MuGMTMatcher.h.

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

◆ second

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

Definition at line 82 of file L1MuGMTMatcher.h.

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