#include <L1MuGMTMatcher.h>
Public Member Functions | |
int | id () const |
return identifier | |
L1MuGMTMatcher (const L1MuGlobalMuonTrigger &gmt, int id) | |
constructor | |
bool | pairM (int i, int j) const |
return pair matrix | |
const L1MuGMTMatrix< bool > & | pairM () const |
return pair matrix | |
void | print () |
print matching results | |
void | reset () |
clear Matcher | |
void | run () |
run Matcher | |
virtual | ~L1MuGMTMatcher () |
destructor | |
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 L1MuGlobalMuonTrigger & | m_gmt |
int | m_id |
L1MuGMTMatrix< int > | matchQuality |
L1MuGMTMatrix< bool > | pairMatrix |
std::vector< const L1MuRegionalCand * > | second |
Matching Unit in the L1 Global Muon Trigger.
Definition at line 43 of file L1MuGMTMatcher.h.
L1MuGMTMatcher::L1MuGMTMatcher | ( | const L1MuGlobalMuonTrigger & | gmt, |
int | id | ||
) |
L1MuGMTMatcher::~L1MuGMTMatcher | ( | ) | [virtual] |
int L1MuGMTMatcher::id | ( | void | ) | const [inline] |
void L1MuGMTMatcher::load | ( | ) | [private] |
Definition at line 132 of file L1MuGMTMatcher.cc.
References L1MuGMTPSB::CSCMuon(), L1MuGlobalMuonTrigger::Data(), L1MuGMTPSB::DTBXMuon(), first, m_gmt, m_id, MAXCSC, MAXDTBX, L1MuGMTConfig::MAXRPCbarrel, L1MuGMTConfig::MAXRPCendcap, L1MuGMTPSB::RPCMuon(), and second.
Referenced by run().
{ // barrel matcher gets DTBX and barrel RPC muons if ( m_id == 0 ) { for ( unsigned idt = 0; idt < L1MuGMTConfig::MAXDTBX; idt++ ) { first[idt] = m_gmt.Data()->DTBXMuon(idt); } for ( unsigned irpc = 0; irpc < L1MuGMTConfig::MAXRPCbarrel; irpc++ ) { second[irpc] = m_gmt.Data()->RPCMuon(irpc); } } // endcap matcher gets CSC and endcap RPC muons if ( m_id == 1 ) { for ( unsigned icsc = 0; icsc < L1MuGMTConfig::MAXCSC; icsc++ ) { first[icsc] = m_gmt.Data()->CSCMuon(icsc); } for ( unsigned irpc = 0; irpc < L1MuGMTConfig::MAXRPCendcap; irpc++ ) { second[irpc] = m_gmt.Data()->RPCMuon(irpc+4); } } // matcher in DT/CSC cancel-out unit gets DTBX and CSC muons if ( m_id == 2 ) { for ( unsigned idt = 0; idt < L1MuGMTConfig::MAXDTBX; idt++ ) { first[idt] = m_gmt.Data()->DTBXMuon(idt); } for ( unsigned icsc = 0; icsc < L1MuGMTConfig::MAXCSC; icsc++ ) { second[icsc] = m_gmt.Data()->CSCMuon(icsc); } } // matcher in CSC/DT cancel-out unit gets CSC and DTBX muons if ( m_id==3 ) { for ( unsigned icsc = 0; icsc < L1MuGMTConfig::MAXCSC; icsc++ ) { first[icsc] = m_gmt.Data()->CSCMuon(icsc); } for ( unsigned idt = 0; idt < L1MuGMTConfig::MAXDTBX; idt++ ) { second[idt] = m_gmt.Data()->DTBXMuon(idt); } } // bRPC/CSC gets barrel RPC and CSC muons if ( m_id == 4 ) { for ( unsigned irpc = 0; irpc < L1MuGMTConfig::MAXRPCbarrel; irpc++ ) { first[irpc] = m_gmt.Data()->RPCMuon(irpc); } for ( unsigned icsc = 0; icsc < L1MuGMTConfig::MAXCSC; icsc++ ) { second[icsc] = m_gmt.Data()->CSCMuon(icsc); } } // bRPC/DT matcher gets forward RPC and DTBX muons if ( m_id == 5 ) { for ( unsigned irpc = 0; irpc < L1MuGMTConfig::MAXRPCendcap; irpc++ ) { first[irpc] = m_gmt.Data()->RPCMuon(irpc+4); } for ( unsigned idt = 0; idt < L1MuGMTConfig::MAXDTBX; idt++ ) { second[idt] = m_gmt.Data()->DTBXMuon(idt); } } }
int L1MuGMTMatcher::lookup_mq | ( | int | i, |
int | j | ||
) | [private] |
Definition at line 273 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().
{ bool empty1 = ( first[i] != 0 ) ? first[i]->empty() : true; bool empty2 = ( second[j] != 0 ) ? second[j]->empty() : true; if ( empty1 || empty2) return 0; // // (1) calculate delta-phi (integer version) // unsigned phi1 = first[i]->phi_packed(); unsigned phi2 = second[j]->phi_packed(); int delta_phi = ( ( phi1 - phi2 + 3*72 ) % 144 ) - 72; if (delta_phi < -3 || delta_phi >3) delta_phi = -4; L1MuSignedPacking<3> DPhiPacking; unsigned delta_phi_packed = DPhiPacking.packedFromIdx (delta_phi); // // (2) look-up delta-eta // unsigned eta1 = first[i]->eta_packed(); unsigned eta2 = second[j]->eta_packed(); unsigned delta_eta_packed = 0; if (m_id == 0 || m_id == 1) { // main matching units // first is dt/csc, second is rpc bool disable1 = L1MuGMTSortRankUnit::isDisabled(first[i]); bool disable2 = L1MuGMTSortRankUnit::isDisabled(second[j]);; if (disable1 || disable2) return 0; L1MuGMTLFDeltaEtaLUT* de_lut = L1MuGMTConfig::getLFDeltaEtaLUT(); delta_eta_packed = de_lut->SpecificLookup_delta_eta (m_id, eta1, eta2); } else { // overlap cancel-out matching units // first is own chip, second is other chip int idx1 = first[i]->type_idx(); int idx1_dcrr = (idx1==1)?2:(idx1==2)?1:idx1; int idx2 = second[j]->type_idx(); int idx2_dcrr = (idx2==1)?2:(idx2==2)?1:idx2; bool disable1 = L1MuGMTSortRankUnit::isDisabled(first[i]); L1MuGMTLFDisableHotLUT* dishot_lut = L1MuGMTConfig::getLFDisableHotLUT(); bool disable2 = dishot_lut->SpecificLookup_disable_hot (idx2_dcrr, second[j]->eta_packed(), second[j]->phi_packed()) == 1; if (disable1 || disable2) return 0; // convert eta to 4-bit, first L1MuGMTLFOvlEtaConvLUT* econv_lut = L1MuGMTConfig::getLFOvlEtaConvLUT(); unsigned eta1_4bit = econv_lut->SpecificLookup_eta_ovl (idx1_dcrr, eta1); unsigned eta2_4bit = econv_lut->SpecificLookup_eta_ovl (idx2_dcrr, eta2); // look up delta eta L1MuGMTLFCOUDeltaEtaLUT* cou_de_lut = L1MuGMTConfig::getLFCOUDeltaEtaLUT(); delta_eta_packed = cou_de_lut->SpecificLookup_delta_eta (m_id-2, eta1_4bit, eta2_4bit); } // // (3) look up match quality // L1MuGMTLFMatchQualLUT* mq_lut = L1MuGMTConfig::getLFMatchQualLUT(); unsigned mq = mq_lut->SpecificLookup_mq(m_id, delta_eta_packed, delta_phi_packed); return mq; }
void L1MuGMTMatcher::match | ( | ) | [private] |
Definition at line 199 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().
{ L1MuGMTMatrix<bool> maxMatrix(MaxMatch,MaxMatch); L1MuGMTMatrix<bool> disableMatrix(MaxMatch,MaxMatch); maxMatrix.init(false); disableMatrix.init(false); // loop over all combinations unsigned i,j; for ( i = 0; i < MaxMatch; i++ ) for ( j = 0; j < MaxMatch; j++ ) matchQuality(i,j) = lookup_mq(i,j); // store in debug block m_gmt.DebugBlockForFill()->SetMQMatrix( m_id, matchQuality) ; // fill MAX matrix for ( i = 0; i < MaxMatch; i++ ) for ( j = 0; j < MaxMatch; j++ ) maxMatrix(i,j) = matchQuality.isMax(i,j) && (matchQuality(i,j) != 0); // fill disable matrix for ( i = 0; i < MaxMatch; i++ ) for ( j = 0; j < MaxMatch; j++ ) { for ( unsigned i1 = 0; i1 < MaxMatch; i1++ ) if ( i1 != i ) disableMatrix(i,j) = disableMatrix(i,j) || maxMatrix(i1,j); for ( unsigned j1 = 0; j1 < MaxMatch; j1++ ) if ( j1 != j ) disableMatrix(i,j) = disableMatrix(i,j) || maxMatrix(i,j1); } // fill pair matrix for ( i = 0; i < MaxMatch; i++ ) { for ( j = 0; j < MaxMatch; j++ ) { bool max = true; for ( unsigned i1 = 0; i1 < i; i1++ ) { max = max && ((matchQuality(i,j) > matchQuality(i1,j)) || disableMatrix(i1,j)); } for ( unsigned i1 = i+1; i1 < MaxMatch; i1++ ) { max = max && ((matchQuality(i,j) >= matchQuality(i1,j)) || disableMatrix(i1,j)); } for ( unsigned j1 = 0; j1 < j; j1++ ) { max = max && ((matchQuality(i,j) > matchQuality(i,j1)) || disableMatrix(i,j1)); } for ( unsigned j1 = j+1; j1 < MaxMatch; j1++ ) { max = max && ((matchQuality(i,j) >= matchQuality(i,j1)) || disableMatrix(i,j1)); } pairMatrix(i,j) = max && (matchQuality(i,j) != 0); } } // store in debug block m_gmt.DebugBlockForFill()->SetPairMatrix( m_id, pairMatrix) ; }
bool L1MuGMTMatcher::pairM | ( | int | i, |
int | j | ||
) | const [inline] |
return pair matrix
Definition at line 71 of file L1MuGMTMatcher.h.
References pairMatrix.
{ return pairMatrix(i,j); }
const L1MuGMTMatrix<bool>& L1MuGMTMatcher::pairM | ( | ) | const [inline] |
return pair matrix
Definition at line 68 of file L1MuGMTMatcher.h.
References pairMatrix.
Referenced by L1MuGMTCancelOutUnit::decide(), and L1MuGMTMerger::merge().
{ return pairMatrix; }
void L1MuGMTMatcher::print | ( | void | ) |
print matching results
Definition at line 113 of file L1MuGMTMatcher.cc.
References L1MuGMTConfig::Debug(), matchQuality, pairMatrix, and L1MuGMTMatrix< T >::print().
Referenced by L1MuGlobalMuonTrigger::produce(), and L1MuGMTCancelOutUnit::run().
{ edm::LogVerbatim("GMT_Matcher_info"); if ( L1MuGMTConfig::Debug(4) ) { edm::LogVerbatim("GMT_Matcher_info") << "MATCH Quality : "; matchQuality.print(); } edm::LogVerbatim("GMT_Matcher_info") << "PAIR Matrix : "; pairMatrix.print(); edm::LogVerbatim("GMT_Matcher_info"); }
void L1MuGMTMatcher::reset | ( | void | ) |
clear Matcher
Definition at line 97 of file L1MuGMTMatcher.cc.
References first, i, L1MuGMTMatrix< T >::init(), matchQuality, MaxMatch, pairMatrix, and second.
Referenced by L1MuGlobalMuonTrigger::reset(), L1MuGMTCancelOutUnit::reset(), and ~L1MuGMTMatcher().
void L1MuGMTMatcher::run | ( | void | ) |
run Matcher
Definition at line 87 of file L1MuGMTMatcher.cc.
References load(), and match().
Referenced by L1MuGlobalMuonTrigger::produce(), and L1MuGMTCancelOutUnit::run().
std::vector<const L1MuRegionalCand*> L1MuGMTMatcher::first [private] |
Definition at line 87 of file L1MuGMTMatcher.h.
Referenced by L1MuGMTMatcher(), load(), lookup_mq(), and reset().
const L1MuGlobalMuonTrigger& L1MuGMTMatcher::m_gmt [private] |
Definition at line 84 of file L1MuGMTMatcher.h.
int L1MuGMTMatcher::m_id [private] |
Definition at line 85 of file L1MuGMTMatcher.h.
Referenced by id(), load(), lookup_mq(), and match().
L1MuGMTMatrix<int> L1MuGMTMatcher::matchQuality [private] |
Definition at line 90 of file L1MuGMTMatcher.h.
const unsigned int L1MuGMTMatcher::MaxMatch = 4 [static] |
Definition at line 47 of file L1MuGMTMatcher.h.
Referenced by L1MuGMTMatcher(), match(), and reset().
L1MuGMTMatrix<bool> L1MuGMTMatcher::pairMatrix [private] |
std::vector<const L1MuRegionalCand*> L1MuGMTMatcher::second [private] |
Definition at line 88 of file L1MuGMTMatcher.h.
Referenced by L1MuGMTMatcher(), load(), lookup_mq(), and reset().