CMS 3D CMS Logo

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

#include <L1MuBMEtaProcessor.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...
 
 L1MuBMEtaProcessor (const L1MuBMTrackFinder &, int id, edm::ConsumesCollector &&iC)
 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 L1MuBMTrackFindertf () const
 return reference to barrel MTTF More...
 
virtual ~L1MuBMEtaProcessor ()
 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

edm::ESHandle< L1TMuonBarrelParamsbmtfParamsHandle
 
int m_address [12]
 
edm::EDGetTokenT< L1MuDTChambThContainerm_DTDigiToken
 
int m_epid
 
int m_eta [12]
 
bool m_fine [12]
 
std::vector< int > m_foundPattern
 
int m_mask
 
int m_pattern [12]
 
const L1MuBMTrackFinderm_tf
 
L1MuBMTrackm_TrackCand [12]
 
L1MuBMTrackm_TracKCand [12]
 
std::vector< const L1MuBMTrackSegEta * > m_tseta
 
L1MuDTTFMasks msks
 
L1MuDTEtaPatternLut theEtaPatternLUT
 
L1MuDTQualPatternLut theQualPatternLUT
 

Detailed Description

Eta Processor:

An Eta Processor consists of :

N. Neumeister CERN EP J. Troconiz UAM Madrid

Definition at line 62 of file L1MuBMEtaProcessor.h.

Constructor & Destructor Documentation

L1MuBMEtaProcessor::L1MuBMEtaProcessor ( const L1MuBMTrackFinder tf,
int  id,
edm::ConsumesCollector &&  iC 
)

constructor

Definition at line 61 of file L1MuBMEtaProcessor.cc.

References m_tseta.

61  :
63  {
64 
65  m_tseta.reserve(15);
66 
67 }
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
const L1MuBMTrackFinder & m_tf
static edm::InputTag getBMThetaDigiInputTag()
std::vector< int > m_foundPattern
edm::EDGetTokenT< L1MuDTChambThContainer > m_DTDigiToken
std::vector< const L1MuBMTrackSegEta * > m_tseta
L1MuBMEtaProcessor::~L1MuBMEtaProcessor ( )
virtual

destructor

Definition at line 74 of file L1MuBMEtaProcessor.cc.

74 {}

Member Function Documentation

void L1MuBMEtaProcessor::assign ( )
private

assign eta and etaFineBit

Definition at line 440 of file L1MuBMEtaProcessor.cc.

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

Referenced by fineBit(), and run().

440  {
441 
442  for ( int i = 0; i < 12; i++ ) {
443  if ( m_TrackCand[i] ) {
444  if ( m_eta[i] != 99 ) {
445  m_TrackCand[i]->setEta(m_eta[i]);
446  m_TracKCand[i]->setEta(m_eta[i]);
447  }
448  else {
449  // if ( i/2 != 2 ) cerr << "L1MuBMEtaProcessor: assign invalid eta" << " " << m_address[i] << endl;
450  }
451  if ( m_fine[i] ) {
454  // find all contributing track segments
456  vector<const L1MuBMTrackSegEta*> TSeta;
457  const L1MuBMTrackSegEta* ts = 0;
458  for ( int stat = 0; stat < 3; stat++ ) {
459  int wh = p.wheel(stat+1);
460  int pos = p.position(stat+1);
461  if ( pos == 0 ) continue;
462  ts = m_tseta[wh+2 + stat*5];
463  TSeta.push_back(ts);
464  }
465  m_TrackCand[i]->setTSeta(TSeta);
466  m_TracKCand[i]->setTSeta(TSeta);
467  }
468  }
469  }
470 
471 }
L1MuBMTrack * m_TrackCand[12]
L1MuBMTrack * m_TracKCand[12]
int position(int station) const
return position in station [1,3]
L1MuDTEtaPattern getPattern(int id) const
get pattern with a given ID
void setTSeta(const std::vector< const L1MuBMTrackSegEta * > &tsList)
set eta track segments used to form the muon candidate
Definition: L1MuBMTrack.cc:186
L1MuDTEtaPatternLut theEtaPatternLUT
void setFineEtaBit()
set fine eta bit
Definition: L1MuBMTrack.h:154
void setEta(int eta)
set eta-code of muon candidate
Definition: L1MuBMTrack.cc:118
int wheel(int station) const
return wheel number in station [1,3]
std::vector< const L1MuBMTrackSegEta * > m_tseta
int L1MuBMEtaProcessor::eta ( int  id) const
inline

return eta values, index [0,11]

Definition at line 88 of file L1MuBMEtaProcessor.h.

References id(), and m_eta.

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

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

return fine bit, index [0,11]

Definition at line 91 of file L1MuBMEtaProcessor.h.

References assign(), id(), m_fine, quality(), receiveAddresses(), receiveData(), runEtaMatchingUnit(), and runEtaTrackFinder().

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

return Eta Processor identifier (0-11)

Definition at line 73 of file L1MuBMEtaProcessor.h.

References EnergyCorrector::c, MillePedeFileConverter_cfg::e, m_epid, print(), reset(), and run().

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

73 { return m_epid; }
void L1MuBMEtaProcessor::print ( void  ) const

print muon candidates found by the Eta Processor

Definition at line 134 of file L1MuBMEtaProcessor.cc.

References gather_cfg::cout, L1MuDTEtaPattern::eta(), L1MuDTQualPatternLut::getCoarseEta(), L1MuDTEtaPatternLut::getPattern(), mps_fire::i, L1MuDTEtaPattern::id(), 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.

Referenced by id().

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

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

Definition at line 477 of file L1MuBMEtaProcessor.cc.

References id().

Referenced by fineBit(), print(), and runEtaTrackFinder().

477  {
478 
479  // quality codes as defined in CMS Note 2001/027
480  // This QualityPatterns are used to have a defined Quality-Identifier for
481  // all possible found tracks.
482  // Therefore three integer numbers ( Station 1, 2, 3 from left to right )
483  // can have numbers like 0, 1 or 2
484  // 0 ... no hit is given
485  // 1 ... a LTRG is given
486  // 2 ... a HTRG is given
487 
488  const int qualcode[27][3] = { {0,0,0},{1,0,0},{0,1,0},{0,0,1},{2,0,0},
489  {0,2,0},{0,0,2},{1,1,0},{1,0,1},{0,1,1},
490  {2,1,0},{1,2,0},{2,0,1},{1,0,2},{0,2,1},
491  {0,1,2},{2,2,0},{2,0,2},{0,2,2},{1,1,1},
492  {2,1,1},{1,2,1},{1,1,2},{2,2,1},{2,1,2},
493  {1,2,2},{2,2,2} };
494 
495  return qualcode[id][stat-1];
496 
497 }
int id() const
return Eta Processor identifier (0-11)
void L1MuBMEtaProcessor::receiveAddresses ( )
private

receive addresses (from 6 Sector Processors)

Definition at line 279 of file L1MuBMEtaProcessor.cc.

References L1MuBMTrack::address(), L1MuBMTrack::empty(), mps_fire::i, m_address, m_epid, m_tf, m_TrackCand, m_TracKCand, L1MuBMTrackFinder::sp(), L1MuBMSectorProcessor::track(), L1MuBMSectorProcessor::tracK(), L1MuBMAddressArray::trackAddressCode(), and makeMuonMisalignmentScenario::wheel.

Referenced by fineBit(), and run().

279  {
280 
281  // get track address code of all track segments
282  // 6*2 times 5 bits; valid range [1-22]
283 
284  int sector = m_epid;
285 
286  int i = 0;
287  for ( int wheel = -3; wheel <= 3; wheel++ ) {
288  if ( wheel == 0 ) continue;
289  L1MuBMSecProcId tmpspid(wheel,sector);
290  for ( int number = 0; number < 2; number++ ) {
291  const L1MuBMTrack* cand = m_tf.sp(tmpspid)->track(number);
292  const L1MuBMTrack* canD = m_tf.sp(tmpspid)->tracK(number);
293  if ( cand ) {
294  m_address[i] = cand->address().trackAddressCode();
295  if ( !cand->empty() ) {
296  m_TrackCand[i] = const_cast<L1MuBMTrack*>(cand);
297  m_TracKCand[i] = const_cast<L1MuBMTrack*>(canD);
298  }
299  i++;
300  }
301  }
302  }
303 
304 }
const L1MuBMTrackFinder & m_tf
int trackAddressCode() const
get track address code (for eta track finder)
L1MuBMTrack * m_TrackCand[12]
L1MuBMTrack * m_TracKCand[12]
L1MuBMAddressArray address() const
get address-array for this muon candidate
Definition: L1MuBMTrack.h:103
L1MuBMTrack * tracK(int id) const
return pointer to muon candidate, index [0,1]
const L1MuBMSectorProcessor * sp(const L1MuBMSecProcId &) const
get a pointer to a Sector Processor
L1MuBMTrack * track(int id) const
return pointer to muon candidate, index [0,1]
bool empty() const
is it an empty muon candidate?
Definition: L1MuBMTrack.h:97
void L1MuBMEtaProcessor::receiveData ( int  bx,
const edm::Event e,
const edm::EventSetup c 
)
private

receive data (eta trigger primitives)

Definition at line 214 of file L1MuBMEtaProcessor.cc.

References bmtfParamsHandle, L1MuDTChambThContainer::chThetaSegm(), L1TMuonBarrelParams::LUTParams::eta_lut_, edm::EventSetup::get(), edm::eventsetup::EventSetupRecord::get(), L1MuDTTFMasks::get_etsoc_chdis_st1(), L1MuDTTFMasks::get_etsoc_chdis_st2(), L1MuDTTFMasks::get_etsoc_chdis_st3(), edm::Event::getByToken(), mps_fire::i, L1TMuonBarrelParams::l1mudttfmasks, L1TMuonBarrelParams::lutparams_, m_DTDigiToken, m_epid, L1MuDTEtaPatternLut::m_lut, L1MuDTQualPatternLut::m_lut, m_mask, m_tseta, msks, L1MuDTChambThDigi::position(), edm::ESHandle< T >::product(), L1TMuonBarrelParams::LUTParams::qp_lut_, L1MuDTChambThDigi::quality(), theEtaPatternLUT, theQualPatternLUT, and makeMuonMisalignmentScenario::wheel.

Referenced by fineBit(), and run().

214  {
215 
216  //c.get< L1MuDTTFMasksRcd >().get( msks );
217  const L1TMuonBarrelParamsRcd& bmtfParamsRcd = c.get<L1TMuonBarrelParamsRcd>();
218  bmtfParamsRcd.get(bmtfParamsHandle);
219  const L1TMuonBarrelParams& bmtfParams = *bmtfParamsHandle.product();
220  msks = bmtfParams.l1mudttfmasks;
221  theEtaPatternLUT.m_lut = bmtfParams.lutparams_.eta_lut_; //l1mudttfetaplut; // ETF look-up table
222  theQualPatternLUT.m_lut = bmtfParams.lutparams_.qp_lut_; //l1mudttfqualplut; // EMU look-up tables
223 
225 // e.getByLabel(L1MuBMTFConfig::getBMThetaDigiInputTag(),dttrig);
226  e.getByToken(m_DTDigiToken,dttrig);
227 
228  // const int bx_offset = dttrig->correctBX();
229  int bx_offset=0;
230  bx = bx + bx_offset;
231 
232  //
233  // get 5*3 eta track segments
234  //
235  int sector = m_epid;
236  for ( int stat = 1; stat <= 3; stat++ ) {
237  for ( int wheel = -2; wheel <= 2; wheel++ ) {
238  L1MuDTChambThDigi const* tseta = dttrig->chThetaSegm(wheel,stat,sector,bx);
239  bitset<7> pos;
240  bitset<7> qual;
241 
242  int lwheel = wheel+1;
243  if ( wheel < 0 ) lwheel = wheel-1;
244 
245  bool masked = false;
246  if ( stat == 1 ) masked = msks.get_etsoc_chdis_st1(lwheel, sector);
247  if ( stat == 2 ) masked = msks.get_etsoc_chdis_st2(lwheel, sector);
248  if ( stat == 3 ) masked = msks.get_etsoc_chdis_st3(lwheel, sector);
249 
250  if ( !masked ) m_mask = false;
251 
252  if ( tseta && !masked ) {
253 
254  if ( wheel == -2 || wheel == -1 ||
255  ( wheel == 0 && (sector == 0 || sector == 3 || sector == 4 || sector == 7 || sector == 8 || sector == 11) ) ) {
256  for ( int i = 0; i < 7; i++ ) {
257  if ( tseta->position(i) ) pos.set(6-i);
258  if ( tseta->quality(i) ) qual.set(6-i);
259  }
260  } else {
261  for ( int i = 0; i < 7; i++ ) {
262  if ( tseta->position(i) ) pos.set(i);
263  if ( tseta->quality(i) ) qual.set(i);
264  }
265  }
266  }
267 
268  const L1MuBMTrackSegEta* tmpts = new L1MuBMTrackSegEta(wheel,sector,stat,pos.to_ulong(),qual.to_ulong(),bx-bx_offset);
269  m_tseta.push_back(tmpts);
270  }
271  }
272 
273 }
edm::ESHandle< L1TMuonBarrelParams > bmtfParamsHandle
bool get_etsoc_chdis_st3(int wh, int sc) const
L1MuDTQualPatternLut theQualPatternLUT
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:460
int quality(const int i) const
int position(const int i) const
L1MuDTTFMasks l1mudttfmasks
void get(HolderT &iHolder) const
bool get_etsoc_chdis_st2(int wh, int sc) const
L1MuDTEtaPatternLut theEtaPatternLUT
edm::EDGetTokenT< L1MuDTChambThContainer > m_DTDigiToken
const T & get() const
Definition: EventSetup.h:56
L1MuDTChambThDigi const * chThetaSegm(int wheel, int stat, int sect, int bx) const
std::vector< const L1MuBMTrackSegEta * > m_tseta
bool get_etsoc_chdis_st1(int wh, int sc) const
T const * product() const
Definition: ESHandle.h:86
void L1MuBMEtaProcessor::reset ( void  )
virtual

reset the Eta Processor

Definition at line 102 of file L1MuBMEtaProcessor.cc.

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

Referenced by id().

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

run the Eta Processor

Definition at line 84 of file L1MuBMEtaProcessor.cc.

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

Referenced by id().

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

run Eta Matching Unit (EMU)

Definition at line 361 of file L1MuBMEtaProcessor.cc.

References bmtfParamsHandle, L1MuDTEtaPattern::eta(), spr::find(), edm::EventSetup::get(), edm::eventsetup::EventSetupRecord::get(), L1MuDTQualPatternLut::getCoarseEta(), L1MuDTEtaPatternLut::getPattern(), L1MuDTQualPatternLut::getQualifiedPatterns(), mps_fire::i, L1TMuonBarrelParams::lutparams_, m_address, m_eta, m_fine, m_foundPattern, L1MuDTQualPatternLut::m_lut, m_mask, m_pattern, AlCaHLTBitMon_ParallelJobs::p, edm::ESHandle< T >::product(), L1TMuonBarrelParams::LUTParams::qp_lut_, theEtaPatternLUT, and theQualPatternLUT.

Referenced by fineBit(), and run().

361  {
362 
363  //c.get< L1MuDTQualPatternLutRcd >().get( theQualPatternLUT );
364  const L1TMuonBarrelParamsRcd& bmtfParamsRcd = c.get<L1TMuonBarrelParamsRcd>();
365  bmtfParamsRcd.get(bmtfParamsHandle);
366  const L1TMuonBarrelParams& bmtfParams = *bmtfParamsHandle.product();
367  theQualPatternLUT.m_lut = bmtfParams.lutparams_.qp_lut_; //l1mudttfqualplut; // EMU look-up tables
368 
369  // loop over all addresses
370  for ( int i = 0; i < 12; i++ ) {
371 
372  int adr = m_address[i];
373  if ( adr == 0 ) continue;
374  int sp = i/2 + 1; //sector processor [1,6]
375 
376  // assign coarse eta value
377  if ( !m_mask ) m_eta[i] = theQualPatternLUT.getCoarseEta(sp,adr);
378  if ( m_eta[i] == 99 ) m_eta[i] = 32;
379  if ( m_eta[i] > 31 ) m_eta[i] -= 64;
380  //m_eta[i] += 32;
381 
382  if ( m_foundPattern.empty() ) continue;
383 
384  // get list of qualified patterns ordered by quality
385  // and compare with found patterns
386  const vector<short>& qualifiedPatterns = theQualPatternLUT.getQualifiedPatterns(sp,adr);
387  vector<short>::const_iterator iter;
388  vector<int>::const_iterator f_iter;
389  for ( iter = qualifiedPatterns.begin(); iter != qualifiedPatterns.end(); iter++ ) {
390  f_iter = find(m_foundPattern.begin(),m_foundPattern.end(),(*iter));
391  // found
392  if ( f_iter != m_foundPattern.end() ) {
394  // assign fine eta value
395  m_fine[i] = true;
396  m_eta[i] = p.eta(); // improved eta
397  if ( m_eta[i] == 99 ) m_eta[i] = 32;
398  if ( m_eta[i] > 31 ) m_eta[i] -= 64;
399  //m_eta[i] += 32;
400  m_pattern[i] = (*f_iter);
401  break;
402  }
403  }
404 
405  }
406 
407  // if both tracks from one sector processor deliver the same track address
408  // both tracks get only a coarse eta value!
409 
410  // loop over sector processors
411  for ( int i = 0; i < 6; i++ ) {
412  int idx1 = 2*i;
413  int idx2 = 2*i+1;
414  int adr1 = m_address[idx1];
415  int adr2 = m_address[idx2];
416  if ( adr1 == 0 || adr2 == 0 ) continue;
417  if ( adr1 == adr2 && !m_mask ) {
418  // both tracks get coarse (default) eta value
419  m_eta[idx1] = theQualPatternLUT.getCoarseEta(i+1,adr1);
420  if ( m_eta[idx1] == 99 ) m_eta[idx1] = 32;
421  if ( m_eta[idx1] > 31 ) m_eta[idx1] -= 64;
422  //m_eta[idx1] += 32;
423  m_pattern[idx1] = 0;
424  m_fine[idx1] = false;
425  m_eta[idx2] = theQualPatternLUT.getCoarseEta(i+1,adr2);
426  if ( m_eta[idx2] == 99 ) m_eta[idx2] = 32;
427  if ( m_eta[idx2] > 31 ) m_eta[idx2] -= 64;
428  //m_eta[idx2] += 32;
429  m_pattern[idx2] = 0;
430  m_fine[idx2] = false;
431  }
432  }
433 
434 }
edm::ESHandle< L1TMuonBarrelParams > bmtfParamsHandle
L1MuDTQualPatternLut theQualPatternLUT
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:20
L1MuDTEtaPattern getPattern(int id) const
get pattern with a given ID
int eta() const
return eta
int getCoarseEta(int sp, int adr) const
get coarse eta value for a given sector processor [1-6] and address [1-22]
void get(HolderT &iHolder) const
std::vector< int > m_foundPattern
L1MuDTEtaPatternLut theEtaPatternLUT
const T & get() const
Definition: EventSetup.h:56
Definition: sp.h:21
T const * product() const
Definition: ESHandle.h:86
const std::vector< short > & getQualifiedPatterns(int sp, int adr) const
get list of qualified patterns for a given sector processor [1-6] and address [1-22] ...
void L1MuBMEtaProcessor::runEtaTrackFinder ( const edm::EventSetup c)
private

run Eta Track Finder (ETF)

Definition at line 310 of file L1MuBMEtaProcessor.cc.

References L1MuDTEtaPatternLut::begin(), stringResolutionProvider_cfi::bin, bmtfParamsHandle, relativeConstraints::empty, L1MuDTEtaPatternLut::end(), L1TMuonBarrelParams::LUTParams::eta_lut_, edm::EventSetup::get(), edm::eventsetup::EventSetupRecord::get(), mps_fire::i, L1MuDTEtaPattern::id(), L1TMuonBarrelParams::lutparams_, m_foundPattern, L1MuDTEtaPatternLut::m_lut, m_tseta, listBenchmarks::pattern, L1MuDTEtaPattern::position(), edm::ESHandle< T >::product(), lumiQueryAPI::q, L1MuDTEtaPattern::quality(), quality(), relativeConstraints::station, theEtaPatternLUT, L1MuDTEtaPattern::wheel(), and makeMuonMisalignmentScenario::wheel.

Referenced by fineBit(), and run().

310  {
311 
312  //c.get< L1MuDTEtaPatternLutRcd >().get( theEtaPatternLUT );
313  const L1TMuonBarrelParamsRcd& bmtfParamsRcd = c.get<L1TMuonBarrelParamsRcd>();
314  bmtfParamsRcd.get(bmtfParamsHandle);
315  const L1TMuonBarrelParams& bmtfParams = *bmtfParamsHandle.product();
316  theEtaPatternLUT.m_lut = bmtfParams.lutparams_.eta_lut_; //l1mudttfetaplut; // ETF look-up table
317 
318  // check if there are any data
319  bool empty = true;
320  for ( int i = 0; i < 15; i++ ) {
321  empty &= m_tseta[i]->empty();
322  }
323  if ( empty ) return;
324 
325  // Pattern comparator:
326  // loop over all patterns and compare with local chamber pattern
327  // result : list of valid pattern IDs ( m_foundPattern )
329  while ( it != theEtaPatternLUT.end() ) {
330 
331  const L1MuDTEtaPattern pattern = (*it).second;
332  int qualitycode = pattern.quality();
333 
334  bool good = true;
335 
336  for ( int station = 0; station < 3; station++) {
337  int q = quality(qualitycode,station+1);
338  int wheel = pattern.wheel(station+1);
339  int bin = pattern.position(station+1);
340  if ( bin == 0 ) continue;
341  bitset<7> pos = m_tseta[wheel+2 + station*5]->position();
342  bitset<7> qual = m_tseta[wheel+2 + station*5]->quality();
343  // compare position
344  good &= pos.test(bin-1);
345  // compare quality
346  if ( q == 2 ) good &= qual.test(bin-1);
347  }
348 
349  if ( good ) m_foundPattern.push_back(pattern.id());
350 
351  it++;
352 
353  }
354 
355 }
edm::ESHandle< L1TMuonBarrelParams > bmtfParamsHandle
LUT::const_iterator ETFLut_iter
int quality() const
return quality
int position(int station) const
return position in station [1,3]
int id() const
return id
void get(HolderT &iHolder) const
ETFLut_iter begin() const
return iterator which points to the first entry of the LUT
std::vector< int > m_foundPattern
L1MuDTEtaPatternLut theEtaPatternLUT
bin
set the eta bin as selection string.
const T & get() const
Definition: EventSetup.h:56
static int quality(int id, int stat)
get quality code; id [0,26], stat [1,3]
ETFLut_iter end() const
return iterator which points to the one-past-last entry of the LUT
int wheel(int station) const
return wheel number in station [1,3]
std::vector< const L1MuBMTrackSegEta * > m_tseta
T const * product() const
Definition: ESHandle.h:86
const L1MuBMTrackFinder& L1MuBMEtaProcessor::tf ( ) const
inline

return reference to barrel MTTF

Definition at line 85 of file L1MuBMEtaProcessor.h.

References m_tf.

85 { return m_tf; }
const L1MuBMTrackFinder & m_tf

Member Data Documentation

edm::ESHandle< L1TMuonBarrelParams > L1MuBMEtaProcessor::bmtfParamsHandle
private

Definition at line 134 of file L1MuBMEtaProcessor.h.

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

int L1MuBMEtaProcessor::m_address[12]
private

Definition at line 126 of file L1MuBMEtaProcessor.h.

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

edm::EDGetTokenT<L1MuDTChambThContainer> L1MuBMEtaProcessor::m_DTDigiToken
private

Definition at line 139 of file L1MuBMEtaProcessor.h.

Referenced by receiveData().

int L1MuBMEtaProcessor::m_epid
private

Definition at line 116 of file L1MuBMEtaProcessor.h.

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

int L1MuBMEtaProcessor::m_eta[12]
private

Definition at line 120 of file L1MuBMEtaProcessor.h.

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

bool L1MuBMEtaProcessor::m_fine[12]
private

Definition at line 121 of file L1MuBMEtaProcessor.h.

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

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

Definition at line 123 of file L1MuBMEtaProcessor.h.

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

int L1MuBMEtaProcessor::m_mask
private

Definition at line 118 of file L1MuBMEtaProcessor.h.

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

int L1MuBMEtaProcessor::m_pattern[12]
private

Definition at line 124 of file L1MuBMEtaProcessor.h.

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

const L1MuBMTrackFinder& L1MuBMEtaProcessor::m_tf
private

Definition at line 115 of file L1MuBMEtaProcessor.h.

Referenced by receiveAddresses(), and tf().

L1MuBMTrack* L1MuBMEtaProcessor::m_TrackCand[12]
private

Definition at line 127 of file L1MuBMEtaProcessor.h.

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

L1MuBMTrack* L1MuBMEtaProcessor::m_TracKCand[12]
private

Definition at line 128 of file L1MuBMEtaProcessor.h.

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

std::vector<const L1MuBMTrackSegEta*> L1MuBMEtaProcessor::m_tseta
private
L1MuDTTFMasks L1MuBMEtaProcessor::msks
private

Definition at line 135 of file L1MuBMEtaProcessor.h.

Referenced by receiveData().

L1MuDTEtaPatternLut L1MuBMEtaProcessor::theEtaPatternLUT
private
L1MuDTQualPatternLut L1MuBMEtaProcessor::theQualPatternLUT
private

Definition at line 137 of file L1MuBMEtaProcessor.h.

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