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 | Static Private Member Functions | Private Attributes
L1MuDTEtaProcessor Class Reference

#include <L1MuDTEtaProcessor.h>

Public Member Functions

int eta (int id) const
 return eta values, index [0,11] More...
 
bool fineBit (int id) const
 return fine bit, index [0,11] More...
 
int id () const
 return Eta Processor identifier (0-11) More...
 
 L1MuDTEtaProcessor (const L1MuDTTrackFinder &, int id)
 constructor More...
 
void print () const
 print muon candidates found by the Eta Processor More...
 
virtual void reset ()
 reset the Eta Processor More...
 
virtual void run (int bx, const edm::Event &e, const edm::EventSetup &c)
 run the Eta Processor More...
 
const L1MuDTTrackFindertf () const
 return reference to barrel MTTF More...
 
virtual ~L1MuDTEtaProcessor ()
 destructor More...
 

Private Member Functions

void assign ()
 assign eta and etaFineBit More...
 
void receiveAddresses ()
 receive addresses (from 6 Sector Processors) More...
 
void receiveData (int bx, const edm::Event &e, const edm::EventSetup &c)
 receive data (eta trigger primitives) More...
 
void runEtaMatchingUnit (const edm::EventSetup &c)
 run Eta Matching Unit (EMU) More...
 
void runEtaTrackFinder (const edm::EventSetup &c)
 run Eta Track Finder (ETF) More...
 

Static Private Member Functions

static int quality (int id, int stat)
 get quality code; id [0,26], stat [1,3] More...
 

Private Attributes

int m_address [12]
 
int m_epid
 
int m_eta [12]
 
bool m_fine [12]
 
std::vector< int > m_foundPattern
 
int m_mask
 
int m_pattern [12]
 
const L1MuDTTrackFinderm_tf
 
L1MuDTTrackm_TrackCand [12]
 
L1MuDTTrackm_TracKCand [12]
 
std::vector< const
L1MuDTTrackSegEta * > 
m_tseta
 
edm::ESHandle< L1MuDTTFMasksmsks
 
edm::ESHandle
< L1MuDTEtaPatternLut
theEtaPatternLUT
 
edm::ESHandle
< L1MuDTQualPatternLut
theQualPatternLUT
 

Detailed Description

Eta Processor:

An Eta Processor consists of :

N. Neumeister CERN EP J. Troconiz UAM Madrid

Definition at line 52 of file L1MuDTEtaProcessor.h.

Constructor & Destructor Documentation

L1MuDTEtaProcessor::L1MuDTEtaProcessor ( const L1MuDTTrackFinder tf,
int  id 
)

constructor

Definition at line 63 of file L1MuDTEtaProcessor.cc.

References m_tseta.

63  :
64  m_tf(tf), m_epid(id), m_foundPattern(0), m_tseta(15) {
65 
66  m_tseta.reserve(15);
67 
68 }
const L1MuDTTrackFinder & m_tf
std::vector< const L1MuDTTrackSegEta * > m_tseta
std::vector< int > m_foundPattern
L1MuDTEtaProcessor::~L1MuDTEtaProcessor ( )
virtual

destructor

Definition at line 75 of file L1MuDTEtaProcessor.cc.

75 {}

Member Function Documentation

void L1MuDTEtaProcessor::assign ( )
private

assign eta and etaFineBit

Definition at line 426 of file L1MuDTEtaProcessor.cc.

References i, m_eta, m_fine, m_pattern, m_TrackCand, m_TracKCand, m_tseta, AlCaHLTBitMon_ParallelJobs::p, L1MuDTEtaPattern::position(), L1MuDTTrack::setEta(), L1MuDTTrack::setFineEtaBit(), L1MuDTTrack::setTSeta(), theEtaPatternLUT, and L1MuDTEtaPattern::wheel().

Referenced by run().

426  {
427 
428  for ( int i = 0; i < 12; i++ ) {
429  if ( m_TrackCand[i] ) {
430  if ( m_eta[i] != 99 ) {
431  m_TrackCand[i]->setEta(m_eta[i]);
432  m_TracKCand[i]->setEta(m_eta[i]);
433  }
434  else {
435  // if ( i/2 != 2 ) cerr << "L1MuDTEtaProcessor: assign invalid eta" << " " << m_address[i] << endl;
436  }
437  if ( m_fine[i] ) {
440  // find all contributing track segments
441  const L1MuDTEtaPattern p = theEtaPatternLUT->getPattern(m_pattern[i]);
442  vector<const L1MuDTTrackSegEta*> TSeta;
443  const L1MuDTTrackSegEta* ts = 0;
444  for ( int stat = 0; stat < 3; stat++ ) {
445  int wh = p.wheel(stat+1);
446  int pos = p.position(stat+1);
447  if ( pos == 0 ) continue;
448  ts = m_tseta[wh+2 + stat*5];
449  TSeta.push_back(ts);
450  }
451  m_TrackCand[i]->setTSeta(TSeta);
452  m_TracKCand[i]->setTSeta(TSeta);
453  }
454  }
455  }
456 
457 }
void setFineEtaBit()
set fine eta bit
Definition: L1MuDTTrack.h:144
int i
Definition: DBlmapReader.cc:9
edm::ESHandle< L1MuDTEtaPatternLut > theEtaPatternLUT
L1MuDTTrack * m_TracKCand[12]
int position(int station) const
return position in station [1,3]
void setEta(int eta)
set eta-code of muon candidate
Definition: L1MuDTTrack.cc:114
void setTSeta(const std::vector< const L1MuDTTrackSegEta * > &tsList)
set eta track segments used to form the muon candidate
Definition: L1MuDTTrack.cc:183
std::vector< const L1MuDTTrackSegEta * > m_tseta
int wheel(int station) const
return wheel number in station [1,3]
L1MuDTTrack * m_TrackCand[12]
int L1MuDTEtaProcessor::eta ( int  id) const
inline

return eta values, index [0,11]

Definition at line 78 of file L1MuDTEtaProcessor.h.

References id(), and m_eta.

Referenced by Particle.Particle::__str__(), Muon.Muon::absEffAreaIso(), Jet.Jet::jetID(), and Jet.Jet::puJetId().

78 { return m_eta[id]; }
int id() const
return Eta Processor identifier (0-11)
bool L1MuDTEtaProcessor::fineBit ( int  id) const
inline

return fine bit, index [0,11]

Definition at line 81 of file L1MuDTEtaProcessor.h.

References id(), and m_fine.

81 { return m_fine[id]; }
int id() const
return Eta Processor identifier (0-11)
int L1MuDTEtaProcessor::id ( void  ) const
inline

return Eta Processor identifier (0-11)

Definition at line 63 of file L1MuDTEtaProcessor.h.

References m_epid.

Referenced by eta(), fineBit(), and quality().

63 { return m_epid; }
void L1MuDTEtaProcessor::print ( void  ) const

print muon candidates found by the Eta Processor

Definition at line 135 of file L1MuDTEtaProcessor.cc.

References gather_cfg::cout, L1MuDTEtaPattern::eta(), i, L1MuDTEtaPattern::id(), getDQMSummary::iter, j, m_address, m_epid, m_eta, m_fine, m_foundPattern, m_pattern, m_tseta, AlCaHLTBitMon_ParallelJobs::p, position, L1MuDTEtaPattern::quality(), quality(), relativeConstraints::station, theEtaPatternLUT, and theQualPatternLUT.

135  {
136 
137  bool empty1 = true;
138  for ( int i = 0; i < 15; i++ ) {
139  empty1 &= ( m_tseta[i] == 0 || m_tseta[i]->empty() );
140  }
141 
142  bool empty2 = true;
143  for ( int i = 0; i < 12; i++ ) {
144  empty2 &= ( m_address[i] == 0 );
145  }
146 
147  if ( !empty1 || !empty2 ) {
148  cout << "Eta processor " << m_epid << " : " << endl;
149 
150  // print local pattern
151  if ( !empty1 ) {
152  cout << "Local pattern : " << endl;
153  for ( int i = 0; i < 15; i++ ) {
154  if ( (i+5)%5 == 0 ) cout << "station " << m_tseta[i]->station() << " : ";
155  bitset<7> pos(m_tseta[i]->position());
156  bitset<7> qua(m_tseta[i]->quality());
157  for ( int j = 6; j >= 0; j-- ) {
158  cout << pos[j]+qua[j];
159  }
160  cout << " ";
161  if ( (i+1)%5 == 0 ) cout << endl;
162  }
163  cout << "Found patterns :" << endl;
164  vector<int>::const_iterator iter;
165  for ( iter = m_foundPattern.begin(); iter != m_foundPattern.end(); iter++ ) {
166  const L1MuDTEtaPattern p = theEtaPatternLUT->getPattern(*iter);
167  int qualitycode = p.quality();
168  cout << "ID = " << setw(4) << p.id() << " "
169  << "eta = " << setw(3) << p.eta() << " "
170  << "quality = " << setw(2) << qualitycode << " ("
171  << quality(qualitycode,1) << " "
172  << quality(qualitycode,2) << " "
173  << quality(qualitycode,3) << ")";
174  for ( int i = 0; i < 12; i++ ) {
175  if ( m_pattern[i] == p.id() ) cout << " <--";
176  }
177  cout << endl;
178  }
179  }
180 
181  cout << "Received addresses : " << endl;
182  for ( int i = 0; i < 12; i++ ) cout << setw(3) << m_address[i] << " ";
183  cout << endl;
184 
185  if ( !empty1 ) {
186  cout << "Matched patterns : " << endl;
187  for ( int i = 0; i < 12; i++ ) {
188  if ( m_fine[i] ) {
189  const L1MuDTEtaPattern p = theEtaPatternLUT->getPattern(m_pattern[i]);
190  int fineeta = p.eta();
191  int coarseeta = theQualPatternLUT->getCoarseEta(i/2+1,m_address[i]);
192  cout << "Index = " << setw(2) << i << ", "
193  << "address = " << setw(2) << m_address[i] << " --> "
194  << "pattern = " << setw(4) << m_pattern[i] << " "
195  << "eta (coarse) = " << setw(3) << coarseeta << " "
196  << "eta (fine) = " << setw(3) << fineeta << " "
197  << "quality = " << setw(2) << p.quality() << endl;
198  }
199  }
200  }
201 
202  cout << "Eta values and fine bits : " << endl;
203  for ( int i = 0; i < 12; i++ ) cout << setw(3) << m_eta[i] << " ";
204  cout << endl;
205  for ( int i = 0; i < 12; i++ ) cout << setw(3) << m_fine[i] << " ";
206  cout << endl;
207  }
208 
209 }
int i
Definition: DBlmapReader.cc:9
edm::ESHandle< L1MuDTEtaPatternLut > theEtaPatternLUT
int quality() const
return quality
edm::ESHandle< L1MuDTQualPatternLut > theQualPatternLUT
static int quality(int id, int stat)
get quality code; id [0,26], stat [1,3]
int id() const
return id
int eta() const
return eta
std::vector< const L1MuDTTrackSegEta * > m_tseta
int j
Definition: DBlmapReader.cc:9
std::vector< int > m_foundPattern
static int position[264][3]
Definition: ReadPGInfo.cc:509
tuple cout
Definition: gather_cfg.py:121
int L1MuDTEtaProcessor::quality ( int  id,
int  stat 
)
staticprivate

get quality code; id [0,26], stat [1,3]

Definition at line 463 of file L1MuDTEtaProcessor.cc.

References id().

Referenced by print(), and runEtaTrackFinder().

463  {
464 
465  // quality codes as defined in CMS Note 2001/027
466  // This QualityPatterns are used to have a defined Quality-Identifier for
467  // all possible found tracks.
468  // Therefore three integer numbers ( Station 1, 2, 3 from left to right )
469  // can have numbers like 0, 1 or 2
470  // 0 ... no hit is given
471  // 1 ... a LTRG is given
472  // 2 ... a HTRG is given
473 
474  const int qualcode[27][3] = { {0,0,0},{1,0,0},{0,1,0},{0,0,1},{2,0,0},
475  {0,2,0},{0,0,2},{1,1,0},{1,0,1},{0,1,1},
476  {2,1,0},{1,2,0},{2,0,1},{1,0,2},{0,2,1},
477  {0,1,2},{2,2,0},{2,0,2},{0,2,2},{1,1,1},
478  {2,1,1},{1,2,1},{1,1,2},{2,2,1},{2,1,2},
479  {1,2,2},{2,2,2} };
480 
481  return qualcode[id][stat-1];
482 
483 }
int id() const
return Eta Processor identifier (0-11)
void L1MuDTEtaProcessor::receiveAddresses ( )
private

receive addresses (from 6 Sector Processors)

Definition at line 273 of file L1MuDTEtaProcessor.cc.

References L1MuDTTrack::address(), L1MuDTTrack::empty(), i, m_address, m_epid, m_tf, m_TrackCand, m_TracKCand, contentValuesFiles::number, L1MuDTTrackFinder::sp(), L1MuDTSectorProcessor::track(), L1MuDTSectorProcessor::tracK(), and L1MuDTAddressArray::trackAddressCode().

Referenced by run().

273  {
274 
275  // get track address code of all track segments
276  // 6*2 times 5 bits; valid range [1-22]
277 
278  int sector = m_epid;
279 
280  int i = 0;
281  for ( int wheel = -3; wheel <= 3; wheel++ ) {
282  if ( wheel == 0 ) continue;
283  L1MuDTSecProcId tmpspid(wheel,sector);
284  for ( int number = 0; number < 2; number++ ) {
285  const L1MuDTTrack* cand = m_tf.sp(tmpspid)->track(number);
286  const L1MuDTTrack* canD = m_tf.sp(tmpspid)->tracK(number);
287  if ( cand ) {
288  m_address[i] = cand->address().trackAddressCode();
289  if ( !cand->empty() ) {
290  m_TrackCand[i] = const_cast<L1MuDTTrack*>(cand);
291  m_TracKCand[i] = const_cast<L1MuDTTrack*>(canD);
292  }
293  i++;
294  }
295  }
296  }
297 
298 }
int i
Definition: DBlmapReader.cc:9
const L1MuDTTrackFinder & m_tf
L1MuDTTrack * m_TracKCand[12]
L1MuDTTrack * tracK(int id) const
return pointer to muon candidate, index [0,1]
L1MuDTAddressArray address() const
get address-array for this muon candidate
Definition: L1MuDTTrack.h:96
int trackAddressCode() const
get track address code (for eta track finder)
const L1MuDTSectorProcessor * sp(const L1MuDTSecProcId &) const
get a pointer to a Sector Processor
bool empty() const
is it an empty muon candidate?
Definition: L1MuDTTrack.h:90
L1MuDTTrack * m_TrackCand[12]
L1MuDTTrack * track(int id) const
return pointer to muon candidate, index [0,1]
void L1MuDTEtaProcessor::receiveData ( int  bx,
const edm::Event e,
const edm::EventSetup c 
)
private

receive data (eta trigger primitives)

Definition at line 215 of file L1MuDTEtaProcessor.cc.

References edm::EventSetup::get(), edm::Event::getByLabel(), L1MuDTTFConfig::getDTDigiInputTag(), i, m_epid, m_mask, m_tseta, msks, L1MuDTChambThDigi::position(), and L1MuDTChambThDigi::quality().

Referenced by run().

215  {
216 
217  c.get< L1MuDTTFMasksRcd >().get( msks );
218 
221 
222  // const int bx_offset = dttrig->correctBX();
223  int bx_offset=0;
224  bx = bx + bx_offset;
225 
226  //
227  // get 5*3 eta track segments
228  //
229  int sector = m_epid;
230  for ( int stat = 1; stat <= 3; stat++ ) {
231  for ( int wheel = -2; wheel <= 2; wheel++ ) {
232  L1MuDTChambThDigi const* tseta = dttrig->chThetaSegm(wheel,stat,sector,bx);
233  bitset<7> pos;
234  bitset<7> qual;
235 
236  int lwheel = wheel+1;
237  if ( wheel < 0 ) lwheel = wheel-1;
238 
239  bool masked = false;
240  if ( stat == 1 ) masked = msks->get_etsoc_chdis_st1(lwheel, sector);
241  if ( stat == 2 ) masked = msks->get_etsoc_chdis_st2(lwheel, sector);
242  if ( stat == 3 ) masked = msks->get_etsoc_chdis_st3(lwheel, sector);
243 
244  if ( !masked ) m_mask = false;
245 
246  if ( tseta && !masked ) {
247 
248  if ( wheel == -2 || wheel == -1 ||
249  ( wheel == 0 && (sector == 0 || sector == 3 || sector == 4 || sector == 7 || sector == 8 || sector == 11) ) ) {
250  for ( int i = 0; i < 7; i++ ) {
251  if ( tseta->position(i) ) pos.set(6-i);
252  if ( tseta->quality(i) ) qual.set(6-i);
253  }
254  } else {
255  for ( int i = 0; i < 7; i++ ) {
256  if ( tseta->position(i) ) pos.set(i);
257  if ( tseta->quality(i) ) qual.set(i);
258  }
259  }
260  }
261 
262  const L1MuDTTrackSegEta* tmpts = new L1MuDTTrackSegEta(wheel,sector,stat,pos.to_ulong(),qual.to_ulong(),bx-bx_offset);
263  m_tseta.push_back(tmpts);
264  }
265  }
266 
267 }
int i
Definition: DBlmapReader.cc:9
int quality(const int i) const
int position(const int i) const
std::vector< const L1MuDTTrackSegEta * > m_tseta
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:405
const T & get() const
Definition: EventSetup.h:55
static edm::InputTag getDTDigiInputTag()
edm::ESHandle< L1MuDTTFMasks > msks
void L1MuDTEtaProcessor::reset ( void  )
virtual

reset the Eta Processor

Definition at line 103 of file L1MuDTEtaProcessor.cc.

References i, getDQMSummary::iter, m_address, m_eta, m_fine, m_foundPattern, m_mask, m_pattern, m_TrackCand, m_TracKCand, and m_tseta.

103  {
104 
105  vector<const L1MuDTTrackSegEta*>::iterator iter = m_tseta.begin();
106  while ( iter != m_tseta.end() ) {
107  if ( *iter ) {
108  delete *iter;
109  *iter = 0;
110  }
111  iter++;
112  }
113 
114  m_tseta.clear();
115 
116  for ( int i = 0; i < 12; i++ ) {
117  m_eta[i] = 99;
118  m_fine[i] = false;
119  m_pattern[i] = 0;
120  m_address[i] = 0;
121  m_TrackCand[i] = 0;
122  m_TracKCand[i] = 0;
123  }
124 
125  m_foundPattern.clear();
126 
127  m_mask = true;
128 
129 }
int i
Definition: DBlmapReader.cc:9
L1MuDTTrack * m_TracKCand[12]
std::vector< const L1MuDTTrackSegEta * > m_tseta
std::vector< int > m_foundPattern
L1MuDTTrack * m_TrackCand[12]
void L1MuDTEtaProcessor::run ( int  bx,
const edm::Event e,
const edm::EventSetup c 
)
virtual

run the Eta Processor

Definition at line 85 of file L1MuDTEtaProcessor.cc.

References assign(), L1MuDTTFConfig::getEtaTF(), receiveAddresses(), receiveData(), runEtaMatchingUnit(), and runEtaTrackFinder().

85  {
86 
87  if ( L1MuDTTFConfig::getEtaTF() ) {
88  receiveData(bx,e,c);
90  }
91 
94 
95  assign();
96 
97 }
void runEtaTrackFinder(const edm::EventSetup &c)
run Eta Track Finder (ETF)
void assign()
assign eta and etaFineBit
void receiveAddresses()
receive addresses (from 6 Sector Processors)
void runEtaMatchingUnit(const edm::EventSetup &c)
run Eta Matching Unit (EMU)
void receiveData(int bx, const edm::Event &e, const edm::EventSetup &c)
receive data (eta trigger primitives)
static bool getEtaTF()
void L1MuDTEtaProcessor::runEtaMatchingUnit ( const edm::EventSetup c)
private

run Eta Matching Unit (EMU)

Definition at line 351 of file L1MuDTEtaProcessor.cc.

References L1MuDTEtaPattern::eta(), spr::find(), edm::EventSetup::get(), i, getDQMSummary::iter, m_address, m_eta, m_fine, m_foundPattern, m_mask, m_pattern, AlCaHLTBitMon_ParallelJobs::p, theEtaPatternLUT, and theQualPatternLUT.

Referenced by run().

351  {
352 
354 
355  // loop over all addresses
356  for ( int i = 0; i < 12; i++ ) {
357 
358  int adr = m_address[i];
359  if ( adr == 0 ) continue;
360  int sp = i/2 + 1; //sector processor [1,6]
361 
362  // assign coarse eta value
363  if ( !m_mask ) m_eta[i] = theQualPatternLUT->getCoarseEta(sp,adr);
364  if ( m_eta[i] == 99 ) m_eta[i] = 32;
365  if ( m_eta[i] > 31 ) m_eta[i] -= 64;
366  m_eta[i] += 32;
367 
368  if ( m_foundPattern.empty() ) continue;
369 
370  // get list of qualified patterns ordered by quality
371  // and compare with found patterns
372  const vector<short>& qualifiedPatterns = theQualPatternLUT->getQualifiedPatterns(sp,adr);
373  vector<short>::const_iterator iter;
374  vector<int>::const_iterator f_iter;
375  for ( iter = qualifiedPatterns.begin(); iter != qualifiedPatterns.end(); iter++ ) {
376  f_iter = find(m_foundPattern.begin(),m_foundPattern.end(),(*iter));
377  // found
378  if ( f_iter != m_foundPattern.end() ) {
379  const L1MuDTEtaPattern p = theEtaPatternLUT->getPattern(*f_iter);
380  // assign fine eta value
381  m_fine[i] = true;
382  m_eta[i] = p.eta(); // improved eta
383  if ( m_eta[i] == 99 ) m_eta[i] = 32;
384  if ( m_eta[i] > 31 ) m_eta[i] -= 64;
385  m_eta[i] += 32;
386  m_pattern[i] = (*f_iter);
387  break;
388  }
389  }
390 
391  }
392 
393  // if both tracks from one sector processor deliver the same track address
394  // both tracks get only a coarse eta value!
395 
396  // loop over sector processors
397  for ( int i = 0; i < 6; i++ ) {
398  int idx1 = 2*i;
399  int idx2 = 2*i+1;
400  int adr1 = m_address[idx1];
401  int adr2 = m_address[idx2];
402  if ( adr1 == 0 || adr2 == 0 ) continue;
403  if ( adr1 == adr2 && !m_mask ) {
404  // both tracks get coarse (default) eta value
405  m_eta[idx1] = theQualPatternLUT->getCoarseEta(i+1,adr1);
406  if ( m_eta[idx1] == 99 ) m_eta[idx1] = 32;
407  if ( m_eta[idx1] > 31 ) m_eta[idx1] -= 64;
408  m_eta[idx1] += 32;
409  m_pattern[idx1] = 0;
410  m_fine[idx1] = false;
411  m_eta[idx2] = theQualPatternLUT->getCoarseEta(i+1,adr2);
412  if ( m_eta[idx2] == 99 ) m_eta[idx2] = 32;
413  if ( m_eta[idx2] > 31 ) m_eta[idx2] -= 64;
414  m_eta[idx2] += 32;
415  m_pattern[idx2] = 0;
416  m_fine[idx2] = false;
417  }
418  }
419 
420 }
int i
Definition: DBlmapReader.cc:9
edm::ESHandle< L1MuDTEtaPatternLut > theEtaPatternLUT
edm::ESHandle< L1MuDTQualPatternLut > theQualPatternLUT
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:7
int eta() const
return eta
std::vector< int > m_foundPattern
const T & get() const
Definition: EventSetup.h:55
void L1MuDTEtaProcessor::runEtaTrackFinder ( const edm::EventSetup c)
private

run Eta Track Finder (ETF)

Definition at line 304 of file L1MuDTEtaProcessor.cc.

References newFWLiteAna::bin, relativeConstraints::empty, edm::EventSetup::get(), i, L1MuDTEtaPattern::id(), m_foundPattern, m_tseta, listBenchmarks::pattern, L1MuDTEtaPattern::position(), lumiQueryAPI::q, L1MuDTEtaPattern::quality(), quality(), relativeConstraints::station, theEtaPatternLUT, and L1MuDTEtaPattern::wheel().

Referenced by run().

304  {
305 
307 
308  // check if there are any data
309  bool empty = true;
310  for ( int i = 0; i < 15; i++ ) {
311  empty &= m_tseta[i]->empty();
312  }
313  if ( empty ) return;
314 
315  // Pattern comparator:
316  // loop over all patterns and compare with local chamber pattern
317  // result : list of valid pattern IDs ( m_foundPattern )
319  while ( it != theEtaPatternLUT->end() ) {
320 
321  const L1MuDTEtaPattern pattern = (*it).second;
322  int qualitycode = pattern.quality();
323 
324  bool good = true;
325 
326  for ( int station = 0; station < 3; station++) {
327  int q = quality(qualitycode,station+1);
328  int wheel = pattern.wheel(station+1);
329  int bin = pattern.position(station+1);
330  if ( bin == 0 ) continue;
331  bitset<7> pos = m_tseta[wheel+2 + station*5]->position();
332  bitset<7> qual = m_tseta[wheel+2 + station*5]->quality();
333  // compare position
334  good &= pos.test(bin-1);
335  // compare quality
336  if ( q == 2 ) good &= qual.test(bin-1);
337  }
338 
339  if ( good ) m_foundPattern.push_back(pattern.id());
340 
341  it++;
342 
343  }
344 
345 }
int i
Definition: DBlmapReader.cc:9
LUT::const_iterator ETFLut_iter
edm::ESHandle< L1MuDTEtaPatternLut > theEtaPatternLUT
int quality() const
return quality
static int quality(int id, int stat)
get quality code; id [0,26], stat [1,3]
int position(int station) const
return position in station [1,3]
int id() const
return id
std::vector< const L1MuDTTrackSegEta * > m_tseta
std::vector< int > m_foundPattern
const T & get() const
Definition: EventSetup.h:55
int wheel(int station) const
return wheel number in station [1,3]
const L1MuDTTrackFinder& L1MuDTEtaProcessor::tf ( ) const
inline

return reference to barrel MTTF

Definition at line 75 of file L1MuDTEtaProcessor.h.

References m_tf.

75 { return m_tf; }
const L1MuDTTrackFinder & m_tf

Member Data Documentation

int L1MuDTEtaProcessor::m_address[12]
private

Definition at line 116 of file L1MuDTEtaProcessor.h.

Referenced by print(), receiveAddresses(), reset(), and runEtaMatchingUnit().

int L1MuDTEtaProcessor::m_epid
private

Definition at line 106 of file L1MuDTEtaProcessor.h.

Referenced by id(), print(), receiveAddresses(), and receiveData().

int L1MuDTEtaProcessor::m_eta[12]
private

Definition at line 110 of file L1MuDTEtaProcessor.h.

Referenced by assign(), eta(), print(), reset(), and runEtaMatchingUnit().

bool L1MuDTEtaProcessor::m_fine[12]
private

Definition at line 111 of file L1MuDTEtaProcessor.h.

Referenced by assign(), fineBit(), print(), reset(), and runEtaMatchingUnit().

std::vector<int> L1MuDTEtaProcessor::m_foundPattern
private

Definition at line 113 of file L1MuDTEtaProcessor.h.

Referenced by print(), reset(), runEtaMatchingUnit(), and runEtaTrackFinder().

int L1MuDTEtaProcessor::m_mask
private

Definition at line 108 of file L1MuDTEtaProcessor.h.

Referenced by receiveData(), reset(), and runEtaMatchingUnit().

int L1MuDTEtaProcessor::m_pattern[12]
private

Definition at line 114 of file L1MuDTEtaProcessor.h.

Referenced by assign(), print(), reset(), and runEtaMatchingUnit().

const L1MuDTTrackFinder& L1MuDTEtaProcessor::m_tf
private

Definition at line 105 of file L1MuDTEtaProcessor.h.

Referenced by receiveAddresses(), and tf().

L1MuDTTrack* L1MuDTEtaProcessor::m_TrackCand[12]
private

Definition at line 117 of file L1MuDTEtaProcessor.h.

Referenced by assign(), receiveAddresses(), and reset().

L1MuDTTrack* L1MuDTEtaProcessor::m_TracKCand[12]
private

Definition at line 118 of file L1MuDTEtaProcessor.h.

Referenced by assign(), receiveAddresses(), and reset().

std::vector<const L1MuDTTrackSegEta*> L1MuDTEtaProcessor::m_tseta
private
edm::ESHandle< L1MuDTTFMasks > L1MuDTEtaProcessor::msks
private

Definition at line 123 of file L1MuDTEtaProcessor.h.

Referenced by receiveData().

edm::ESHandle< L1MuDTEtaPatternLut > L1MuDTEtaProcessor::theEtaPatternLUT
private

Definition at line 121 of file L1MuDTEtaProcessor.h.

Referenced by assign(), print(), runEtaMatchingUnit(), and runEtaTrackFinder().

edm::ESHandle< L1MuDTQualPatternLut > L1MuDTEtaProcessor::theQualPatternLUT
private

Definition at line 122 of file L1MuDTEtaProcessor.h.

Referenced by print(), and runEtaMatchingUnit().