CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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 69 of file L1MuGMTCancelOutUnit.h.

Constructor & Destructor Documentation

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

constructor

Definition at line 53 of file L1MuGMTCancelOutUnit.cc.

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

destructor

Definition at line 61 of file L1MuGMTCancelOutUnit.cc.

References reset().

61  {
62 
63  reset();
64 
65 }
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 91 of file L1MuGMTCancelOutUnit.h.

References m_MyChipCancelbits.

Referenced by L1MuGMTMerger::merge().

91 { return m_MyChipCancelbits[idx]; }
std::vector< bool > m_MyChipCancelbits
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().

94 { return m_OtherChipCancelbits[idx]; }
std::vector< bool > m_OtherChipCancelbits
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().

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

References m_id.

88 { 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().

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

87  {
88 
89  m_matcher.reset();
90 
91  for ( int i = 0; i < 4; i++ ) {
92  m_MyChipCancelbits[i] = false;
93  m_OtherChipCancelbits[i] = false;
94  }
95 }
int i
Definition: DBlmapReader.cc:9
std::vector< bool > m_MyChipCancelbits
void reset()
clear Matcher
std::vector< bool > m_OtherChipCancelbits
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().

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

Member Data Documentation

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.

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

L1MuGMTMatcher L1MuGMTCancelOutUnit::m_matcher
private

Definition at line 104 of file L1MuGMTCancelOutUnit.h.

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

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().