#include <L1MuGMTCancelOutUnit.h>
Public Member Functions | |
const bool | cancelMyChipMuon (int idx) const |
return cancel bit for DT (m_id==0 || m_id==3) or CSC (m_id==1 || m_id==2) muon | |
const bool | cancelOtherChipMuon (int idx) const |
return cancel bit for barrel RPC (m_id==2) or forward RPC (m_id==3) muon | |
int | id () const |
return ID (0..DT/CSC in barrel chip, 1..DT/CSC in fwd chip, 2..CSC/bRPC, 3..DT/fRPC) | |
L1MuGMTCancelOutUnit (const L1MuGlobalMuonTrigger &gmt, int id) | |
constructor | |
void | print () |
print cancel-out bits | |
void | reset () |
clear cancel-out unit | |
void | run () |
run cancel-out unit | |
virtual | ~L1MuGMTCancelOutUnit () |
destructor | |
Private Member Functions | |
void | decide () |
Private Attributes | |
const L1MuGlobalMuonTrigger & | m_gmt |
int | m_id |
L1MuGMTMatcher | m_matcher |
std::vector< bool > | m_MyChipCancelbits |
std::vector< bool > | m_OtherChipCancelbits |
L1 Global Muon Trigger Cancel-Out Unit.
It compares (attempts to match) muons in the overlap region in order to cancel out duplicates. The following four instances exist:
INPUTS idx unit where mu1 mu2 --------------------------------------- 0 DT/CSC brl DT CSC 1 CSC/DT fwd CSC DT 2 bRPC/CSC brl bRPC CSC 3 fRPC/DT fwd fRPC DT (mine) (other chip)
The first input muons are direct inputs to the chip where the COU is located, while the second muons are CSC or DT muon from the other Logic FPGA.
Along with the input muons to be compared the COU accesses information on whether the input muons are matched with a cnadiate from the complementary system in the respective main matcher.
The output are cancel-bits which indicate whether to delete one of the inputs.
Definition at line 69 of file L1MuGMTCancelOutUnit.h.
L1MuGMTCancelOutUnit::L1MuGMTCancelOutUnit | ( | const L1MuGlobalMuonTrigger & | gmt, |
int | id | ||
) |
constructor
Definition at line 53 of file L1MuGMTCancelOutUnit.cc.
: m_gmt(gmt), m_id(id), m_matcher(gmt, id+2), m_MyChipCancelbits(4), m_OtherChipCancelbits(4) { }
L1MuGMTCancelOutUnit::~L1MuGMTCancelOutUnit | ( | ) | [virtual] |
const bool L1MuGMTCancelOutUnit::cancelMyChipMuon | ( | int | idx | ) | const [inline] |
return cancel bit for DT (m_id==0 || m_id==3) or CSC (m_id==1 || m_id==2) muon
Definition at line 91 of file L1MuGMTCancelOutUnit.h.
References m_MyChipCancelbits.
Referenced by L1MuGMTMerger::merge().
{ return m_MyChipCancelbits[idx]; }
const bool L1MuGMTCancelOutUnit::cancelOtherChipMuon | ( | int | idx | ) | const [inline] |
return cancel bit for barrel RPC (m_id==2) or forward RPC (m_id==3) muon
Definition at line 94 of file L1MuGMTCancelOutUnit.h.
References m_OtherChipCancelbits.
Referenced by L1MuGMTMerger::merge().
{ return m_OtherChipCancelbits[idx]; }
void L1MuGMTCancelOutUnit::decide | ( | ) | [private] |
Definition at line 128 of file L1MuGMTCancelOutUnit.cc.
References L1MuGMTMatrix< T >::colAny(), L1MuGlobalMuonTrigger::DebugBlockForFill(), L1MuGMTConfig::getRegCDLConfig(), L1MuGMTReg::getValue(), m_gmt, m_id, m_matcher, m_MyChipCancelbits, m_OtherChipCancelbits, L1MuGlobalMuonTrigger::Matcher(), L1MuGMTMatcher::pairM(), L1MuGMTMatrix< T >::rowAny(), and L1MuGMTDebugBlock::SetCancelBits().
Referenced by run().
{ // CancelDecisionLogic configuration register // unsigned CDL_config = L1MuGMTConfig::getRegCDLConfig()->getValue(m_id); // compute cancel decsion for my chip muons (mine) for(int imine=0; imine<4; imine++) { int idxother = m_matcher.pairM().rowAny(imine); if (idxother != -1) { int mine_is_matched = 0; switch(m_id) { case 0: mine_is_matched = m_gmt.Matcher(0)->pairM().rowAny(imine) != -1; break; //DT case 1: mine_is_matched = m_gmt.Matcher(1)->pairM().rowAny(imine) != -1; break; //CSC case 2: mine_is_matched = m_gmt.Matcher(0)->pairM().colAny(imine) != -1; break; //bRPC case 3: mine_is_matched = m_gmt.Matcher(1)->pairM().colAny(imine) != -1; break; //fRPC } int other_is_matched = m_gmt.Matcher( 1-(m_id%2) )->pairM().rowAny(idxother) != -1; // calculate address of bit in CDL_config register unsigned addr = (unsigned) (2*mine_is_matched + other_is_matched); unsigned mask = (unsigned) 1 << addr; m_MyChipCancelbits[imine] = (CDL_config & mask) == mask; } } // compute cancel decsison for other chip muons (other) for(int iother=0; iother<4; iother++) { int idxmine = m_matcher.pairM().colAny(iother); if (idxmine != -1) { int mine_is_matched = 0; switch(m_id) { case 0: mine_is_matched = m_gmt.Matcher(0)->pairM().rowAny(idxmine) != -1; break; //DT case 1: mine_is_matched = m_gmt.Matcher(1)->pairM().rowAny(idxmine) != -1; break; //CSC case 2: mine_is_matched = m_gmt.Matcher(0)->pairM().colAny(idxmine) != -1; break; //bRPC case 3: mine_is_matched = m_gmt.Matcher(1)->pairM().colAny(idxmine) != -1; break; //fRPC } int other_is_matched = m_gmt.Matcher( 1-(m_id%2) )->pairM().rowAny(iother) != -1; // calculate address of bit in CDL_config register unsigned addr = (unsigned) (2*other_is_matched + mine_is_matched); unsigned mask = (unsigned)1 << (addr+4); m_OtherChipCancelbits[iother] = (CDL_config & mask) == mask; } } m_gmt.DebugBlockForFill()->SetCancelBits( m_id, m_MyChipCancelbits, m_OtherChipCancelbits) ; }
int L1MuGMTCancelOutUnit::id | ( | void | ) | const [inline] |
return ID (0..DT/CSC in barrel chip, 1..DT/CSC in fwd chip, 2..CSC/bRPC, 3..DT/fRPC)
Definition at line 88 of file L1MuGMTCancelOutUnit.h.
References m_id.
{ return m_id; }
void L1MuGMTCancelOutUnit::print | ( | void | ) |
print cancel-out bits
Definition at line 101 of file L1MuGMTCancelOutUnit.cc.
References i, m_id, m_MyChipCancelbits, and m_OtherChipCancelbits.
Referenced by L1MuGlobalMuonTrigger::produce().
{ std::stringstream outmy; switch (m_id) { case 0 : outmy << "DT " ; break; case 1 : outmy << "CSC " ; break; case 2 : outmy << "bRPC" ; break; case 3 : outmy << "fRPC" ; break; } outmy << "(my chip) cancel-bits : " ; for ( int i = 0; i < 4; i++ ) outmy << m_MyChipCancelbits[i] << " "; edm::LogVerbatim("GMT_CancelOut_info") << outmy.str(); std::stringstream outother; if (m_id==2 || m_id==3) { outother << (m_id==2 ? "CSC" : "DT" ) << "(other chip) cancel-bits : " ; for ( int i = 0; i < 4; i++ ) outother << m_OtherChipCancelbits[i] << " "; outother << std::endl; } edm::LogVerbatim("GMT_CancelOut_info") << outother.str(); }
void L1MuGMTCancelOutUnit::reset | ( | void | ) |
clear cancel-out unit
Definition at line 87 of file L1MuGMTCancelOutUnit.cc.
References i, m_matcher, m_MyChipCancelbits, m_OtherChipCancelbits, and L1MuGMTMatcher::reset().
Referenced by L1MuGlobalMuonTrigger::reset(), and ~L1MuGMTCancelOutUnit().
{ m_matcher.reset(); for ( int i = 0; i < 4; i++ ) { m_MyChipCancelbits[i] = false; m_OtherChipCancelbits[i] = false; } }
void L1MuGMTCancelOutUnit::run | ( | void | ) |
run cancel-out unit
Definition at line 74 of file L1MuGMTCancelOutUnit.cc.
References L1MuGMTConfig::Debug(), decide(), m_matcher, L1MuGMTMatcher::print(), and L1MuGMTMatcher::run().
Referenced by L1MuGlobalMuonTrigger::produce().
{ m_matcher.run(); if (L1MuGMTConfig::Debug(3)) { edm::LogVerbatim("GMT_CancelOut_info") << "result of cancel-out matcher: "; m_matcher.print(); } decide(); }
const L1MuGlobalMuonTrigger& L1MuGMTCancelOutUnit::m_gmt [private] |
Definition at line 101 of file L1MuGMTCancelOutUnit.h.
Referenced by decide().
int L1MuGMTCancelOutUnit::m_id [private] |
Definition at line 102 of file L1MuGMTCancelOutUnit.h.
Definition at line 104 of file L1MuGMTCancelOutUnit.h.
std::vector<bool> L1MuGMTCancelOutUnit::m_MyChipCancelbits [private] |
Definition at line 105 of file L1MuGMTCancelOutUnit.h.
Referenced by cancelMyChipMuon(), decide(), print(), and reset().
std::vector<bool> L1MuGMTCancelOutUnit::m_OtherChipCancelbits [private] |
Definition at line 106 of file L1MuGMTCancelOutUnit.h.
Referenced by cancelOtherChipMuon(), decide(), print(), and reset().