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
 
L1MuBMTEtaPatternLut theEtaPatternLUT
 
L1MuBMTQualPatternLut 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 63 of file L1MuBMEtaProcessor.cc.

References m_tseta.

63  :
65  {
66 
67  m_tseta.reserve(15);
68 
69 }
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 76 of file L1MuBMEtaProcessor.cc.

76 {}

Member Function Documentation

void L1MuBMEtaProcessor::assign ( )
private

assign eta and etaFineBit

Definition at line 433 of file L1MuBMEtaProcessor.cc.

References L1MuBMTEtaPatternLut::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().

433  {
434 
435  for ( int i = 0; i < 12; i++ ) {
436  if ( m_TrackCand[i] ) {
437  if ( m_eta[i] != 99 ) {
438  m_TrackCand[i]->setEta(m_eta[i]);
439  m_TracKCand[i]->setEta(m_eta[i]);
440  }
441  else {
442  // if ( i/2 != 2 ) cerr << "L1MuBMEtaProcessor: assign invalid eta" << " " << m_address[i] << endl;
443  }
444  if ( m_fine[i] ) {
447  // find all contributing track segments
449  vector<const L1MuBMTrackSegEta*> TSeta;
450  const L1MuBMTrackSegEta* ts = 0;
451  for ( int stat = 0; stat < 3; stat++ ) {
452  int wh = p.wheel(stat+1);
453  int pos = p.position(stat+1);
454  if ( pos == 0 ) continue;
455  ts = m_tseta[wh+2 + stat*5];
456  TSeta.push_back(ts);
457  }
458  m_TrackCand[i]->setTSeta(TSeta);
459  m_TracKCand[i]->setTSeta(TSeta);
460  }
461  }
462  }
463 
464 }
L1MuBMTrack * m_TrackCand[12]
L1MuBMTrack * m_TracKCand[12]
L1MuDTEtaPattern getPattern(int id) const
get pattern with a given ID
int position(int station) const
return position in station [1,3]
L1MuBMTEtaPatternLut theEtaPatternLUT
void setTSeta(const std::vector< const L1MuBMTrackSegEta * > &tsList)
set eta track segments used to form the muon candidate
Definition: L1MuBMTrack.cc:186
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 136 of file L1MuBMEtaProcessor.cc.

References gather_cfg::cout, L1MuDTEtaPattern::eta(), L1MuBMTQualPatternLut::getCoarseEta(), L1MuBMTEtaPatternLut::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().

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

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

Definition at line 470 of file L1MuBMEtaProcessor.cc.

References id().

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

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

receive addresses (from 6 Sector Processors)

Definition at line 281 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().

281  {
282 
283  // get track address code of all track segments
284  // 6*2 times 5 bits; valid range [1-22]
285 
286  int sector = m_epid;
287 
288  int i = 0;
289  for ( int wheel = -3; wheel <= 3; wheel++ ) {
290  if ( wheel == 0 ) continue;
291  L1MuBMSecProcId tmpspid(wheel,sector);
292  for ( int number = 0; number < 2; number++ ) {
293  const L1MuBMTrack* cand = m_tf.sp(tmpspid)->track(number);
294  const L1MuBMTrack* canD = m_tf.sp(tmpspid)->tracK(number);
295  if ( cand ) {
296  m_address[i] = cand->address().trackAddressCode();
297  if ( !cand->empty() ) {
298  m_TrackCand[i] = const_cast<L1MuBMTrack*>(cand);
299  m_TracKCand[i] = const_cast<L1MuBMTrack*>(canD);
300  }
301  i++;
302  }
303  }
304  }
305 
306 }
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 216 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, L1MuBMTEtaPatternLut::m_lut, L1MuBMTQualPatternLut::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().

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

reset the Eta Processor

Definition at line 104 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().

104  {
105 
106  vector<const L1MuBMTrackSegEta*>::iterator iter = m_tseta.begin();
107  while ( iter != m_tseta.end() ) {
108  if ( *iter ) {
109  delete *iter;
110  *iter = 0;
111  }
112  iter++;
113  }
114 
115  m_tseta.clear();
116 
117  for ( int i = 0; i < 12; i++ ) {
118  m_eta[i] = 99;
119  m_fine[i] = false;
120  m_pattern[i] = 0;
121  m_address[i] = 0;
122  m_TrackCand[i] = 0;
123  m_TracKCand[i] = 0;
124  }
125 
126  m_foundPattern.clear();
127 
128  m_mask = true;
129 
130 }
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 86 of file L1MuBMEtaProcessor.cc.

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

Referenced by id().

86  {
87 
88  if ( L1MuBMTFConfig::getEtaTF() ) {
89  receiveData(bx,e,c);
91  }
92 
95 
96  assign();
97 
98 }
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 363 of file L1MuBMEtaProcessor.cc.

References bmtfParamsHandle, L1MuDTEtaPattern::eta(), spr::find(), edm::EventSetup::get(), edm::eventsetup::EventSetupRecord::get(), L1MuBMTQualPatternLut::getCoarseEta(), L1MuBMTEtaPatternLut::getPattern(), L1MuBMTQualPatternLut::getQualifiedPatterns(), mps_fire::i, L1TMuonBarrelParams::lutparams_, m_address, m_eta, m_fine, m_foundPattern, L1MuBMTQualPatternLut::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().

363  {
364 
365  //c.get< L1MuDTQualPatternLutRcd >().get( theQualPatternLUT );
366  const L1TMuonBarrelParamsRcd& bmtfParamsRcd = c.get<L1TMuonBarrelParamsRcd>();
367  bmtfParamsRcd.get(bmtfParamsHandle);
368  const L1TMuonBarrelParams& bmtfParams = *bmtfParamsHandle.product();
369  theQualPatternLUT.m_lut = bmtfParams.lutparams_.qp_lut_; //l1mudttfqualplut; // EMU look-up tables
370 
371  // loop over all addresses
372  for ( int i = 0; i < 12; i++ ) {
373 
374  int adr = m_address[i];
375  if ( adr == 0 ) continue;
376  int sp = i/2 + 1; //sector processor [1,6]
377 
378  // assign coarse eta value
379  if ( !m_mask ) m_eta[i] = theQualPatternLUT.getCoarseEta(sp,adr);
380 
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 ;
398  m_pattern[i] = (*f_iter);
399  break;
400  }
401  }
402 
403  }
404 
405  // if both tracks from one sector processor deliver the same track address
406  // both tracks get only a coarse eta value!
407 
408  // loop over sector processors
409  for ( int i = 0; i < 6; i++ ) {
410  int idx1 = 2*i;
411  int idx2 = 2*i+1;
412  int adr1 = m_address[idx1];
413  int adr2 = m_address[idx2];
414  if ( adr1 == 0 || adr2 == 0 ) continue;
415  if ( adr1 == adr2 && !m_mask ) {
416  // both tracks get coarse (default) eta value
417  m_eta[idx1] = theQualPatternLUT.getCoarseEta(i+1,adr1);
418  m_pattern[idx1] = 0;
419  m_fine[idx1] = false;
420  m_eta[idx2] = theQualPatternLUT.getCoarseEta(i+1,adr2);
421 
422  m_pattern[idx2] = 0;
423  m_fine[idx2] = false;
424  }
425  }
426 
427 }
edm::ESHandle< L1TMuonBarrelParams > bmtfParamsHandle
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] ...
int getCoarseEta(int sp, int adr) const
get coarse eta value for a given sector processor [1-6] and address [1-22]
L1MuDTEtaPattern getPattern(int id) const
get pattern with a given ID
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:20
L1MuBMTEtaPatternLut theEtaPatternLUT
int eta() const
return eta
void get(HolderT &iHolder) const
std::vector< int > m_foundPattern
const T & get() const
Definition: EventSetup.h:56
Definition: sp.h:21
T const * product() const
Definition: ESHandle.h:86
L1MuBMTQualPatternLut theQualPatternLUT
void L1MuBMEtaProcessor::runEtaTrackFinder ( const edm::EventSetup c)
private

run Eta Track Finder (ETF)

Definition at line 312 of file L1MuBMEtaProcessor.cc.

References L1MuBMTEtaPatternLut::begin(), stringResolutionProvider_cfi::bin, bmtfParamsHandle, relativeConstraints::empty, L1MuBMTEtaPatternLut::end(), L1TMuonBarrelParams::LUTParams::eta_lut_, edm::EventSetup::get(), edm::eventsetup::EventSetupRecord::get(), mps_fire::i, L1MuDTEtaPattern::id(), L1TMuonBarrelParams::lutparams_, m_foundPattern, L1MuBMTEtaPatternLut::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().

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

L1MuBMTEtaPatternLut L1MuBMEtaProcessor::theEtaPatternLUT
private
L1MuBMTQualPatternLut L1MuBMEtaProcessor::theQualPatternLUT
private

Definition at line 137 of file L1MuBMEtaProcessor.h.

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