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 64 of file L1MuBMEtaProcessor.cc.

References m_tseta.

65  : m_tf(tf),
66  m_epid(id),
67  m_foundPattern(0),
68  m_tseta(15),
70  m_tseta.reserve(15);
71 }
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 77 of file L1MuBMEtaProcessor.cc.

77 {}

Member Function Documentation

void L1MuBMEtaProcessor::assign ( )
private

assign eta and etaFineBit

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

429  {
430  for (int i = 0; i < 12; i++) {
431  if (m_TrackCand[i]) {
432  if (m_eta[i] != 99) {
433  m_TrackCand[i]->setEta(m_eta[i]);
434  m_TracKCand[i]->setEta(m_eta[i]);
435  } else {
436  // if ( i/2 != 2 ) cerr << "L1MuBMEtaProcessor: assign invalid eta" << " " << m_address[i] << endl;
437  }
438  if (m_fine[i]) {
441  // find all contributing track segments
443  vector<const L1MuBMTrackSegEta*> TSeta;
444  const L1MuBMTrackSegEta* ts = nullptr;
445  for (int stat = 0; stat < 3; stat++) {
446  int wh = p.wheel(stat + 1);
447  int pos = p.position(stat + 1);
448  if (pos == 0)
449  continue;
450  ts = m_tseta[wh + 2 + stat * 5];
451  TSeta.push_back(ts);
452  }
453  m_TrackCand[i]->setTSeta(TSeta);
454  m_TracKCand[i]->setTSeta(TSeta);
455  }
456  }
457  }
458 }
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:160
void setFineEtaBit()
set fine eta bit
Definition: L1MuBMTrack.h:153
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 86 of file L1MuBMEtaProcessor.h.

References id(), and m_eta.

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

86 { 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 89 of file L1MuBMEtaProcessor.h.

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

89 { 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 71 of file L1MuBMEtaProcessor.h.

References l1GtPatternGenerator_cfi::bx, HltBtagPostValidation_cff::c, MillePedeFileConverter_cfg::e, m_epid, print(), reset(), and run().

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

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

print muon candidates found by the Eta Processor

Definition at line 130 of file L1MuBMEtaProcessor.cc.

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

Referenced by id().

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

References id().

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

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

receive addresses (from 6 Sector Processors)

Definition at line 282 of file L1MuBMEtaProcessor.cc.

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

Referenced by fineBit(), and run().

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)
291  continue;
292  L1MuBMSecProcId tmpspid(wheel, sector);
293  for (int number = 0; number < 2; number++) {
294  const L1MuBMTrack* cand = m_tf.sp(tmpspid)->track(number);
295  const L1MuBMTrack* canD = m_tf.sp(tmpspid)->tracK(number);
296  if (cand) {
297  m_address[i] = cand->address().trackAddressCode();
298  if (!cand->empty()) {
299  m_TrackCand[i] = const_cast<L1MuBMTrack*>(cand);
300  m_TracKCand[i] = const_cast<L1MuBMTrack*>(canD);
301  }
302  i++;
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:99
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:93
void L1MuBMEtaProcessor::receiveData ( int  bx,
const edm::Event e,
const edm::EventSetup c 
)
private

receive data (eta trigger primitives)

Definition at line 211 of file L1MuBMEtaProcessor.cc.

References bmtfParamsHandle, L1MuDTChambThContainer::chThetaSegm(), L1TMuonBarrelParams::LUTParams::eta_lut_, edm::EventSetup::get(), edm::eventsetup::EventSetupRecordImplementation< T >::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().

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

reset the Eta Processor

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

101  {
102  vector<const L1MuBMTrackSegEta*>::iterator iter = m_tseta.begin();
103  while (iter != m_tseta.end()) {
104  if (*iter) {
105  delete *iter;
106  *iter = nullptr;
107  }
108  iter++;
109  }
110 
111  m_tseta.clear();
112 
113  for (int i = 0; i < 12; i++) {
114  m_eta[i] = 99;
115  m_fine[i] = false;
116  m_pattern[i] = 0;
117  m_address[i] = 0;
118  m_TrackCand[i] = nullptr;
119  m_TracKCand[i] = nullptr;
120  }
121 
122  m_foundPattern.clear();
123 
124  m_mask = true;
125 }
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  {
88  receiveData(bx, e, c);
90  }
91 
94 
95  assign();
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::EventSetupRecordImplementation< T >::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().

361  {
362  //c.get< L1MuDTQualPatternLutRcd >().get( theQualPatternLUT );
363  const L1TMuonBarrelParamsRcd& bmtfParamsRcd = c.get<L1TMuonBarrelParamsRcd>();
364  bmtfParamsRcd.get(bmtfParamsHandle);
365  const L1TMuonBarrelParams& bmtfParams = *bmtfParamsHandle.product();
366  theQualPatternLUT.m_lut = bmtfParams.lutparams_.qp_lut_; //l1mudttfqualplut; // EMU look-up tables
367 
368  // loop over all addresses
369  for (int i = 0; i < 12; i++) {
370  int adr = m_address[i];
371  if (adr == 0)
372  continue;
373  int sp = i / 2 + 1; //sector processor [1,6]
374 
375  // assign coarse eta value
376  if (!m_mask)
378 
379  if (m_foundPattern.empty())
380  continue;
381 
382  // get list of qualified patterns ordered by quality
383  // and compare with found patterns
384  const vector<short>& qualifiedPatterns = theQualPatternLUT.getQualifiedPatterns(sp, adr);
385  vector<short>::const_iterator iter;
386  vector<int>::const_iterator f_iter;
387  for (iter = qualifiedPatterns.begin(); iter != qualifiedPatterns.end(); iter++) {
388  f_iter = find(m_foundPattern.begin(), m_foundPattern.end(), (*iter));
389  // found
390  if (f_iter != m_foundPattern.end()) {
392  // assign fine eta value
393  m_fine[i] = true;
394  m_eta[i] = p.eta(); // improved eta
395  ;
396  m_pattern[i] = (*f_iter);
397  break;
398  }
399  }
400  }
401 
402  // if both tracks from one sector processor deliver the same track address
403  // both tracks get only a coarse eta value!
404 
405  // loop over sector processors
406  for (int i = 0; i < 6; i++) {
407  int idx1 = 2 * i;
408  int idx2 = 2 * i + 1;
409  int adr1 = m_address[idx1];
410  int adr2 = m_address[idx2];
411  if (adr1 == 0 || adr2 == 0)
412  continue;
413  if (adr1 == adr2 && !m_mask) {
414  // both tracks get coarse (default) eta value
415  m_eta[idx1] = theQualPatternLUT.getCoarseEta(i + 1, adr1);
416  m_pattern[idx1] = 0;
417  m_fine[idx1] = false;
418  m_eta[idx2] = theQualPatternLUT.getCoarseEta(i + 1, adr2);
419 
420  m_pattern[idx2] = 0;
421  m_fine[idx2] = false;
422  }
423  }
424 }
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:19
PRODUCT const & get(ESGetToken< PRODUCT, T > const &iToken) const
L1MuBMTEtaPatternLut theEtaPatternLUT
int eta() const
return eta
std::vector< int > m_foundPattern
T get() const
Definition: EventSetup.h:73
T const * product() const
Definition: ESHandle.h:86
L1MuBMTQualPatternLut theQualPatternLUT
edm::ESHandle< L1TMuonBarrelParams > bmtfParamsHandle
void L1MuBMEtaProcessor::runEtaTrackFinder ( const edm::EventSetup c)
private

run Eta Track Finder (ETF)

Definition at line 311 of file L1MuBMEtaProcessor.cc.

References L1MuBMTEtaPatternLut::begin(), newFWLiteAna::bin, bmtfParamsHandle, relativeConstraints::empty, L1MuBMTEtaPatternLut::end(), L1TMuonBarrelParams::LUTParams::eta_lut_, edm::EventSetup::get(), edm::eventsetup::EventSetupRecordImplementation< T >::get(), mps_fire::i, L1MuDTEtaPattern::id(), L1TMuonBarrelParams::lutparams_, m_foundPattern, L1MuBMTEtaPatternLut::m_lut, m_tseta, topSingleLeptonDQM_PU_cfi::pattern, L1MuDTEtaPattern::position(), edm::ESHandle< T >::product(), data-class-funcs::q, L1MuDTEtaPattern::quality(), quality(), relativeConstraints::station, theEtaPatternLUT, L1MuDTEtaPattern::wheel(), and makeMuonMisalignmentScenario::wheel.

Referenced by fineBit(), and run().

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)
324  return;
325 
326  // Pattern comparator:
327  // loop over all patterns and compare with local chamber pattern
328  // result : list of valid pattern IDs ( m_foundPattern )
330  while (it != theEtaPatternLUT.end()) {
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)
341  continue;
342  bitset<7> pos = m_tseta[wheel + 2 + station * 5]->position();
343  bitset<7> qual = m_tseta[wheel + 2 + station * 5]->quality();
344  // compare position
345  good &= pos.test(bin - 1);
346  // compare quality
347  if (q == 2)
348  good &= qual.test(bin - 1);
349  }
350 
351  if (good)
352  m_foundPattern.push_back(pattern.id());
353 
354  it++;
355  }
356 }
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]
PRODUCT const & get(ESGetToken< PRODUCT, T > const &iToken) const
L1MuBMTEtaPatternLut theEtaPatternLUT
int id() const
return id
std::vector< int > m_foundPattern
static int quality(int id, int stat)
get quality code; id [0,26], stat [1,3]
T get() const
Definition: EventSetup.h:73
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
edm::ESHandle< L1TMuonBarrelParams > bmtfParamsHandle
const L1MuBMTrackFinder& L1MuBMEtaProcessor::tf ( ) const
inline

return reference to barrel MTTF

Definition at line 83 of file L1MuBMEtaProcessor.h.

References m_tf.

83 { return m_tf; }
const L1MuBMTrackFinder & m_tf

Member Data Documentation

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

Definition at line 130 of file L1MuBMEtaProcessor.h.

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

int L1MuBMEtaProcessor::m_address[12]
private

Definition at line 122 of file L1MuBMEtaProcessor.h.

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

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

Definition at line 135 of file L1MuBMEtaProcessor.h.

Referenced by receiveData().

int L1MuBMEtaProcessor::m_epid
private

Definition at line 112 of file L1MuBMEtaProcessor.h.

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

int L1MuBMEtaProcessor::m_eta[12]
private

Definition at line 116 of file L1MuBMEtaProcessor.h.

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

bool L1MuBMEtaProcessor::m_fine[12]
private

Definition at line 117 of file L1MuBMEtaProcessor.h.

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

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

Definition at line 119 of file L1MuBMEtaProcessor.h.

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

int L1MuBMEtaProcessor::m_mask
private

Definition at line 114 of file L1MuBMEtaProcessor.h.

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

int L1MuBMEtaProcessor::m_pattern[12]
private

Definition at line 120 of file L1MuBMEtaProcessor.h.

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

const L1MuBMTrackFinder& L1MuBMEtaProcessor::m_tf
private

Definition at line 111 of file L1MuBMEtaProcessor.h.

Referenced by receiveAddresses(), and tf().

L1MuBMTrack* L1MuBMEtaProcessor::m_TrackCand[12]
private

Definition at line 123 of file L1MuBMEtaProcessor.h.

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

L1MuBMTrack* L1MuBMEtaProcessor::m_TracKCand[12]
private

Definition at line 124 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 131 of file L1MuBMEtaProcessor.h.

Referenced by receiveData().

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

Definition at line 133 of file L1MuBMEtaProcessor.h.

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