CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
L1MuGMTCancelOutUnit Class Reference

#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 More...
 
const bool cancelOtherChipMuon (int idx) const
 return cancel bit for barrel RPC (m_id==2) or forward RPC (m_id==3) muon More...
 
int id () const
 return ID (0..DT/CSC in barrel chip, 1..DT/CSC in fwd chip, 2..CSC/bRPC, 3..DT/fRPC) More...
 
 L1MuGMTCancelOutUnit (const L1MuGlobalMuonTrigger &gmt, int id)
 constructor More...
 
void print ()
 print cancel-out bits More...
 
void reset ()
 clear cancel-out unit More...
 
void run ()
 run cancel-out unit More...
 
virtual ~L1MuGMTCancelOutUnit ()
 destructor More...
 

Private Member Functions

void decide ()
 

Private Attributes

const L1MuGlobalMuonTriggerm_gmt
 
int m_id
 
L1MuGMTMatcher m_matcher
 
std::vector< bool > m_MyChipCancelbits
 
std::vector< bool > m_OtherChipCancelbits
 

Detailed Description

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 67 of file L1MuGMTCancelOutUnit.h.

Constructor & Destructor Documentation

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

constructor

Definition at line 51 of file L1MuGMTCancelOutUnit.cc.

51  :
52  m_gmt(gmt), m_id(id), m_matcher(gmt, id+2), m_MyChipCancelbits(4), m_OtherChipCancelbits(4) {
53 
54 }
const L1MuGlobalMuonTrigger & m_gmt
std::vector< bool > m_MyChipCancelbits
std::vector< bool > m_OtherChipCancelbits
L1MuGMTCancelOutUnit::~L1MuGMTCancelOutUnit ( )
virtual

destructor

Definition at line 59 of file L1MuGMTCancelOutUnit.cc.

References reset().

59  {
60 
61  reset();
62 
63 }
void reset()
clear cancel-out unit

Member Function Documentation

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 89 of file L1MuGMTCancelOutUnit.h.

References training_settings::idx, and m_MyChipCancelbits.

Referenced by L1MuGMTMerger::merge().

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 92 of file L1MuGMTCancelOutUnit.h.

References decide(), training_settings::idx, and m_OtherChipCancelbits.

Referenced by L1MuGMTMerger::merge().

void L1MuGMTCancelOutUnit::decide ( )
private

Definition at line 126 of file L1MuGMTCancelOutUnit.cc.

References L1MuGMTMatrix< T >::colAny(), L1MuGlobalMuonTrigger::DebugBlockForFill(), L1MuGMTConfig::getRegCDLConfig(), L1MuGMTReg::getValue(), m_gmt, m_id, m_matcher, m_MyChipCancelbits, m_OtherChipCancelbits, RecoTauDiscriminantConfiguration::mask, L1MuGlobalMuonTrigger::Matcher(), L1MuGMTMatcher::pairM(), L1MuGMTMatrix< T >::rowAny(), and L1MuGMTDebugBlock::SetCancelBits().

Referenced by cancelOtherChipMuon(), and run().

126  {
127 
128  // CancelDecisionLogic configuration register
129  //
130  unsigned CDL_config = L1MuGMTConfig::getRegCDLConfig()->getValue(m_id);
131 
132  // compute cancel decsion for my chip muons (mine)
133 
134  for(int imine=0; imine<4; imine++) {
135  int idxother = m_matcher.pairM().rowAny(imine);
136  if (idxother != -1) {
137  int mine_is_matched = 0;
138  switch(m_id) {
139  case 0: mine_is_matched = m_gmt.Matcher(0)->pairM().rowAny(imine) != -1; break; //DT
140  case 1: mine_is_matched = m_gmt.Matcher(1)->pairM().rowAny(imine) != -1; break; //CSC
141  case 2: mine_is_matched = m_gmt.Matcher(0)->pairM().colAny(imine) != -1; break; //bRPC
142  case 3: mine_is_matched = m_gmt.Matcher(1)->pairM().colAny(imine) != -1; break; //fRPC
143  }
144  int other_is_matched = m_gmt.Matcher( 1-(m_id%2) )->pairM().rowAny(idxother) != -1;
145 
146  // calculate address of bit in CDL_config register
147  unsigned addr = (unsigned) (2*mine_is_matched + other_is_matched);
148  unsigned mask = (unsigned) 1 << addr;
149 
150  m_MyChipCancelbits[imine] = (CDL_config & mask) == mask;
151  }
152  }
153 
154  // compute cancel decsison for other chip muons (other)
155 
156  for(int iother=0; iother<4; iother++) {
157  int idxmine = m_matcher.pairM().colAny(iother);
158  if (idxmine != -1) {
159  int mine_is_matched = 0;
160  switch(m_id) {
161  case 0: mine_is_matched = m_gmt.Matcher(0)->pairM().rowAny(idxmine) != -1; break; //DT
162  case 1: mine_is_matched = m_gmt.Matcher(1)->pairM().rowAny(idxmine) != -1; break; //CSC
163  case 2: mine_is_matched = m_gmt.Matcher(0)->pairM().colAny(idxmine) != -1; break; //bRPC
164  case 3: mine_is_matched = m_gmt.Matcher(1)->pairM().colAny(idxmine) != -1; break; //fRPC
165  }
166  int other_is_matched = m_gmt.Matcher( 1-(m_id%2) )->pairM().rowAny(iother) != -1;
167 
168  // calculate address of bit in CDL_config register
169  unsigned addr = (unsigned) (2*other_is_matched + mine_is_matched);
170  unsigned mask = (unsigned)1 << (addr+4);
171 
172  m_OtherChipCancelbits[iother] = (CDL_config & mask) == mask;
173  }
174  }
175 
177 }
const L1MuGMTMatcher * Matcher(int id) const
return pointer to Matcher
unsigned getValue(int idx)
get Value
Definition: L1MuGMTReg.h:55
const L1MuGlobalMuonTrigger & m_gmt
int rowAny(int r) const
is any element in row r > 0 ? return index or -1
std::vector< bool > m_MyChipCancelbits
void SetCancelBits(int idx, const std::vector< bool > &mine, const std::vector< bool > &others)
Set cancel bits.
const L1MuGMTMatrix< bool > & pairM() const
return pair matrix
std::vector< bool > m_OtherChipCancelbits
static L1MuGMTRegCDLConfig * getRegCDLConfig()
int colAny(int c) const
is any element in column c > 0 ? return index or -1
L1MuGMTDebugBlock * DebugBlockForFill() const
for debug: return the debug block (in order to fill it)
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 86 of file L1MuGMTCancelOutUnit.h.

References m_id.

86 { return m_id; }
void L1MuGMTCancelOutUnit::print ( void  )

print cancel-out bits

Definition at line 99 of file L1MuGMTCancelOutUnit.cc.

References mps_fire::i, m_id, m_MyChipCancelbits, and m_OtherChipCancelbits.

Referenced by L1MuGlobalMuonTrigger::produce().

99  {
100 
101  std::stringstream outmy;
102  switch (m_id) {
103  case 0 : outmy << "DT " ; break;
104  case 1 : outmy << "CSC " ; break;
105  case 2 : outmy << "bRPC" ; break;
106  case 3 : outmy << "fRPC" ; break;
107  }
108  outmy << "(my chip) cancel-bits : " ;
109  for ( int i = 0; i < 4; i++ ) outmy << m_MyChipCancelbits[i] << " ";
110  edm::LogVerbatim("GMT_CancelOut_info") << outmy.str();
111 
112  std::stringstream outother;
113  if (m_id==2 || m_id==3) {
114  outother << (m_id==2 ? "CSC" : "DT" ) << "(other chip) cancel-bits : " ;
115  for ( int i = 0; i < 4; i++ ) outother << m_OtherChipCancelbits[i] << " ";
116  outother << std::endl;
117  }
118  edm::LogVerbatim("GMT_CancelOut_info") << outother.str();
119 }
std::vector< bool > m_MyChipCancelbits
std::vector< bool > m_OtherChipCancelbits
void L1MuGMTCancelOutUnit::reset ( void  )

clear cancel-out unit

Definition at line 85 of file L1MuGMTCancelOutUnit.cc.

References mps_fire::i, m_matcher, m_MyChipCancelbits, m_OtherChipCancelbits, and L1MuGMTMatcher::reset().

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

85  {
86 
87  m_matcher.reset();
88 
89  for ( int i = 0; i < 4; i++ ) {
90  m_MyChipCancelbits[i] = false;
91  m_OtherChipCancelbits[i] = false;
92  }
93 }
std::vector< bool > m_MyChipCancelbits
void reset()
clear Matcher
std::vector< bool > m_OtherChipCancelbits
void L1MuGMTCancelOutUnit::run ( )

run cancel-out unit

Definition at line 72 of file L1MuGMTCancelOutUnit.cc.

References L1MuGMTConfig::Debug(), decide(), m_matcher, L1MuGMTMatcher::print(), and L1MuGMTMatcher::run().

Referenced by L1MuGlobalMuonTrigger::produce().

72  {
73 
74  m_matcher.run();
75  if (L1MuGMTConfig::Debug(3)) {
76  edm::LogVerbatim("GMT_CancelOut_info") << "result of cancel-out matcher: ";
77  m_matcher.print();
78  }
79  decide();
80 }
void run()
run Matcher
void print()
print matching results
static bool Debug()

Member Data Documentation

const L1MuGlobalMuonTrigger& L1MuGMTCancelOutUnit::m_gmt
private

Definition at line 99 of file L1MuGMTCancelOutUnit.h.

Referenced by decide().

int L1MuGMTCancelOutUnit::m_id
private

Definition at line 100 of file L1MuGMTCancelOutUnit.h.

Referenced by decide(), id(), and print().

L1MuGMTMatcher L1MuGMTCancelOutUnit::m_matcher
private

Definition at line 102 of file L1MuGMTCancelOutUnit.h.

Referenced by decide(), reset(), and run().

std::vector<bool> L1MuGMTCancelOutUnit::m_MyChipCancelbits
private

Definition at line 103 of file L1MuGMTCancelOutUnit.h.

Referenced by cancelMyChipMuon(), decide(), print(), and reset().

std::vector<bool> L1MuGMTCancelOutUnit::m_OtherChipCancelbits
private

Definition at line 104 of file L1MuGMTCancelOutUnit.h.

Referenced by cancelOtherChipMuon(), decide(), print(), and reset().