CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes
L1MuDTAssignmentUnit Class Reference

#include <L1MuDTAssignmentUnit.h>

Inheritance diagram for L1MuDTAssignmentUnit:
L1AbstractProcessor

Public Member Functions

 L1MuDTAssignmentUnit (L1MuDTSectorProcessor &sp, int id)
 constructor More...
 
void PhiAU (const edm::EventSetup &c)
 assign phi More...
 
void PtAU (const edm::EventSetup &c)
 assign pt and charge More...
 
void QuaAU ()
 assign quality More...
 
virtual void reset ()
 reset Assignment Unit More...
 
virtual void run (const edm::EventSetup &c)
 run Assignment Unit More...
 
virtual ~L1MuDTAssignmentUnit ()
 destructor More...
 
- Public Member Functions inherited from L1AbstractProcessor
virtual void run ()
 run processor logic More...
 
virtual ~L1AbstractProcessor ()
 destructor More...
 

Static Public Member Functions

static void setPrecision ()
 set precision of phi and phib More...
 

Private Member Functions

int getPtAddress (PtAssMethod, int bendcharge=0) const
 calculate bend angle More...
 
PtAssMethod getPtMethod () const
 determine pt assignment method More...
 
const L1MuDTTrackSegPhigetTSphi (int station) const
 get track segment from a given station More...
 
int phiDiff (int stat1, int stat2) const
 build difference of two phi values More...
 
void TSR ()
 Track Segment Router. More...
 

Static Private Member Functions

static int convertSector (int)
 convert sector Id to 8 bit code (= sector center) More...
 
static int getCharge (PtAssMethod)
 determine charge More...
 

Private Attributes

L1MuDTAddressArray m_addArray
 
int m_id
 
PtAssMethod m_ptAssMethod
 
L1MuDTSectorProcessorm_sp
 
std::vector< const
L1MuDTTrackSegPhi * > 
m_TSphi
 
edm::ESHandle< L1MuDTPhiLutthePhiLUTs
 phi-assignment look-up tables More...
 
edm::ESHandle< L1MuDTPtaLutthePtaLUTs
 pt-assignment look-up tables More...
 

Static Private Attributes

static unsigned short nbit_phi = 12
 

of bits used for pt-assignment

More...
 
static unsigned short nbit_phib = 10
 

of bits used for pt-assignment

More...
 

Detailed Description

Assignment Unit:

assigns pt, charge, phi and quality to a muon candidate found by the Track Assembler

N. Neumeister CERN EP J. Troconiz UAM Madrid

Definition at line 50 of file L1MuDTAssignmentUnit.h.

Constructor & Destructor Documentation

L1MuDTAssignmentUnit::L1MuDTAssignmentUnit ( L1MuDTSectorProcessor sp,
int  id 
)

constructor

Definition at line 56 of file L1MuDTAssignmentUnit.cc.

References m_TSphi, reset(), and setPrecision().

56  :
57  m_sp(sp), m_id(id),
59 
60  m_TSphi.reserve(4); // a track candidate can consist of max 4 TS
61  reset();
62 
63  setPrecision();
64 
65 }
L1MuDTAddressArray m_addArray
L1MuDTSectorProcessor & m_sp
std::vector< const L1MuDTTrackSegPhi * > m_TSphi
virtual void reset()
reset Assignment Unit
static void setPrecision()
set precision of phi and phib
L1MuDTAssignmentUnit::~L1MuDTAssignmentUnit ( )
virtual

destructor

Definition at line 72 of file L1MuDTAssignmentUnit.cc.

72 {}

Member Function Documentation

int L1MuDTAssignmentUnit::convertSector ( int  sector)
staticprivate

convert sector Id to 8 bit code (= sector center)

Definition at line 314 of file L1MuDTAssignmentUnit.cc.

Referenced by PhiAU().

314  {
315 
316  // assert( sector >=0 && sector < 12 );
317  const int sectorvalues[12] = { 0, 12, 24, 36, 48, 60, 72, 84,
318  96, 108, 120, 132 };
319 
320  return sectorvalues[sector];
321 
322 }
int L1MuDTAssignmentUnit::getCharge ( PtAssMethod  method)
staticprivate

determine charge

Definition at line 328 of file L1MuDTAssignmentUnit.cc.

References NODEF, PT12H, PT12HO, PT12L, PT12LO, PT13H, PT13HO, PT13L, PT13LO, PT14H, PT14HO, PT14L, PT14LO, PT15HO, PT15LO, PT23H, PT23HO, PT23L, PT23LO, PT24H, PT24HO, PT24L, PT24LO, PT25HO, PT25LO, PT34H, PT34HO, PT34L, and PT34LO.

Referenced by PtAU().

328  {
329 
330  int chargesign = 0;
331  switch ( method ) {
332  case PT12L : { chargesign = -1; break; }
333  case PT12H : { chargesign = -1; break; }
334  case PT13L : { chargesign = -1; break; }
335  case PT13H : { chargesign = -1; break; }
336  case PT14L : { chargesign = -1; break; }
337  case PT14H : { chargesign = -1; break; }
338  case PT23L : { chargesign = -1; break; }
339  case PT23H : { chargesign = -1; break; }
340  case PT24L : { chargesign = -1; break; }
341  case PT24H : { chargesign = -1; break; }
342  case PT34L : { chargesign = 1; break; }
343  case PT34H : { chargesign = 1; break; }
344  case PT12LO : { chargesign = -1; break; }
345  case PT12HO : { chargesign = -1; break; }
346  case PT13LO : { chargesign = -1; break; }
347  case PT13HO : { chargesign = -1; break; }
348  case PT14LO : { chargesign = -1; break; }
349  case PT14HO : { chargesign = -1; break; }
350  case PT23LO : { chargesign = -1; break; }
351  case PT23HO : { chargesign = -1; break; }
352  case PT24LO : { chargesign = -1; break; }
353  case PT24HO : { chargesign = -1; break; }
354  case PT34LO : { chargesign = 1; break; }
355  case PT34HO : { chargesign = 1; break; }
356  case PT15LO : { chargesign = -1; break; }
357  case PT15HO : { chargesign = -1; break; }
358  case PT25LO : { chargesign = -1; break; }
359  case PT25HO : { chargesign = -1; break; }
360  case NODEF : { chargesign = 0;
361  // cerr << "AssignmentUnit::getCharge : undefined PtAssMethod!"
362  // << endl;
363  break;
364  }
365  }
366 
367  return chargesign;
368 
369 }
int L1MuDTAssignmentUnit::getPtAddress ( PtAssMethod  method,
int  bendcharge = 0 
) const
private

calculate bend angle

Definition at line 442 of file L1MuDTAssignmentUnit.cc.

References NODEF, phiDiff(), PT12H, PT12HO, PT12L, PT12LO, PT13H, PT13HO, PT13L, PT13LO, PT14H, PT14HO, PT14L, PT14LO, PT15HO, PT15LO, PT23H, PT23HO, PT23L, PT23LO, PT24H, PT24HO, PT24L, PT24LO, PT25HO, PT25LO, PT34H, PT34HO, PT34L, and PT34LO.

Referenced by PtAU().

442  {
443 
444  // calculate bend angle as difference of two azimuthal positions
445 
446  int bendangle = 0;
447  switch (method) {
448  case PT12L : { bendangle = phiDiff(1,2); break; }
449  case PT12H : { bendangle = phiDiff(1,2); break; }
450  case PT13L : { bendangle = phiDiff(1,3); break; }
451  case PT13H : { bendangle = phiDiff(1,3); break; }
452  case PT14L : { bendangle = phiDiff(1,4); break; }
453  case PT14H : { bendangle = phiDiff(1,4); break; }
454  case PT23L : { bendangle = phiDiff(2,3); break; }
455  case PT23H : { bendangle = phiDiff(2,3); break; }
456  case PT24L : { bendangle = phiDiff(2,4); break; }
457  case PT24H : { bendangle = phiDiff(2,4); break; }
458  case PT34L : { bendangle = phiDiff(4,3); break; }
459  case PT34H : { bendangle = phiDiff(4,3); break; }
460  case PT12LO : { bendangle = phiDiff(1,2); break; }
461  case PT12HO : { bendangle = phiDiff(1,2); break; }
462  case PT13LO : { bendangle = phiDiff(1,3); break; }
463  case PT13HO : { bendangle = phiDiff(1,3); break; }
464  case PT14LO : { bendangle = phiDiff(1,4); break; }
465  case PT14HO : { bendangle = phiDiff(1,4); break; }
466  case PT23LO : { bendangle = phiDiff(2,3); break; }
467  case PT23HO : { bendangle = phiDiff(2,3); break; }
468  case PT24LO : { bendangle = phiDiff(2,4); break; }
469  case PT24HO : { bendangle = phiDiff(2,4); break; }
470  case PT34LO : { bendangle = phiDiff(4,3); break; }
471  case PT34HO : { bendangle = phiDiff(4,3); break; }
472  case PT15LO : { bendangle = phiDiff(1,3); break; }
473  case PT15HO : { bendangle = phiDiff(1,3); break; }
474  case PT25LO : { bendangle = phiDiff(2,3); break; }
475  case PT25HO : { bendangle = phiDiff(2,3); break; }
476  case NODEF : { bendangle = 0;
477  // cerr << "AssignmentUnit::getPtAddress : undefined PtAssMethod" << endl;
478  break;
479  }
480  }
481 
482  int signo = 1;
483  bendangle = (bendangle+8192)%4096;
484  if ( bendangle > 2047 ) bendangle -= 4096;
485  if ( bendangle < 0 ) signo = -1;
486 
487  if (bendcharge) return signo;
488 
489  bendangle = (bendangle+2048)%1024;
490  if ( bendangle > 511 ) bendangle -= 1024;
491 
492  return bendangle;
493 
494 }
int phiDiff(int stat1, int stat2) const
build difference of two phi values
PtAssMethod L1MuDTAssignmentUnit::getPtMethod ( ) const
private

determine pt assignment method

Definition at line 375 of file L1MuDTAssignmentUnit.cc.

References funct::abs(), getTSphi(), m_addArray, m_id, m_sp, PFRecoTauDiscriminationAgainstElectronMVA3GBR_cfi::method, NODEF, L1MuDTSectorProcessor::ovl(), L1MuDTTrackSegPhi::phib(), PT12H, PT12HO, PT12L, PT12LO, PT13H, PT13HO, PT13L, PT13LO, PT14H, PT14HO, PT14L, PT14LO, PT15HO, PT15LO, PT23H, PT23HO, PT23L, PT23LO, PT24H, PT24HO, PT24L, PT24LO, PT25HO, PT25LO, PT34H, PT34HO, PT34L, PT34LO, alignCSCRings::s, L1MuDTAddressArray::station(), L1MuDTSectorProcessor::TA(), thePtaLUTs, dtDQMClient_cfg::threshold, and L1MuDTTrackAssembler::trackBitMap().

Referenced by PtAU().

375  {
376 
377  // determine which pt-assignment method should be used as a function
378  // of the track class and
379  // of the phib values of the track segments making up this track candidate.
380 
381  // get bitmap of track candidate
382  const bitset<4> s = m_sp.TA()->trackBitMap(m_id);
383 
384  int method = -1;
385 
386  if ( s.test(0) && s.test(3) ) method = 2; // stations 1 and 4
387  if ( s.test(0) && s.test(2) ) method = 1; // stations 1 and 3
388  if ( s.test(0) && s.test(1) ) method = 0; // stations 1 and 2
389  if ( !s.test(0) && s.test(1) && s.test(3) ) method = 4; // stations 2 and 4
390  if ( !s.test(0) && s.test(1) && s.test(2) ) method = 3; // stations 2 and 3
391  if ( !s.test(0) && !s.test(1) && s.test(2) && s.test(3) ) method = 5; // stations 3 and 4
392 
393  if ( m_sp.ovl() ) {
394  int adr = m_addArray.station(3);
395  bool s5 = (adr == 15) ? false : ((adr/2)%2 == 1);
396  if ( s.test(0) && s.test(3) ) method = 8; // stations 1 and 4
397  if ( s.test(0) && s.test(2) && s5 ) method = 12; // stations 1 and 5
398  if ( s.test(0) && s.test(2) && !s5 ) method = 7; // stations 1 and 3
399  if ( s.test(0) && s.test(1) ) method = 6; // stations 1 and 2
400  if ( !s.test(0) && s.test(1) && s.test(3) ) method = 10; // stations 2 and 4
401  if ( !s.test(0) && s.test(1) && s.test(2) && s5 ) method = 13; // stations 2 and 5
402  if ( !s.test(0) && s.test(1) && s.test(2) && !s5 ) method = 9; // stations 2 and 3
403  if ( !s.test(0) && !s.test(1) && s.test(2) && s.test(3) ) method = 11; // stations 3 and 4
404  }
405 
406  int threshold = thePtaLUTs->getPtLutThreshold(method);
407 
408  // phib values of track segments from stations 1, 2 and 4
409  int phib1 = ( getTSphi(1) != 0 ) ? getTSphi(1)->phib() : 0;
410  int phib2 = ( getTSphi(2) != 0 ) ? getTSphi(2)->phib() : 0;
411  int phib4 = ( getTSphi(4) != 0 ) ? getTSphi(4)->phib() : 0;
412 
413  PtAssMethod pam = NODEF;
414 
415  switch ( method ) {
416  case 0 : { pam = ( abs(phib1) < threshold ) ? PT12H : PT12L; break; }
417  case 1 : { pam = ( abs(phib1) < threshold ) ? PT13H : PT13L; break; }
418  case 2 : { pam = ( abs(phib1) < threshold ) ? PT14H : PT14L; break; }
419  case 3 : { pam = ( abs(phib2) < threshold ) ? PT23H : PT23L; break; }
420  case 4 : { pam = ( abs(phib2) < threshold ) ? PT24H : PT24L; break; }
421  case 5 : { pam = ( abs(phib4) < threshold ) ? PT34H : PT34L; break; }
422  case 6 : { pam = ( abs(phib1) < threshold ) ? PT12HO : PT12LO; break; }
423  case 7 : { pam = ( abs(phib1) < threshold ) ? PT13HO : PT13LO; break; }
424  case 8 : { pam = ( abs(phib1) < threshold ) ? PT14HO : PT14LO; break; }
425  case 9 : { pam = ( abs(phib2) < threshold ) ? PT23HO : PT23LO; break; }
426  case 10 : { pam = ( abs(phib2) < threshold ) ? PT24HO : PT24LO; break; }
427  case 11 : { pam = ( abs(phib4) < threshold ) ? PT34HO : PT34LO; break; }
428  case 12 : { pam = ( abs(phib1) < threshold ) ? PT15HO : PT15LO; break; }
429  case 13 : { pam = ( abs(phib2) < threshold ) ? PT25HO : PT25LO; break; }
430  default : ;
431  //cout << "L1MuDTAssignmentUnit : Error in PT ass method evaluation" << endl;
432  }
433 
434  return pam;
435 
436 }
edm::ESHandle< L1MuDTPtaLut > thePtaLUTs
pt-assignment look-up tables
L1MuDTAddressArray m_addArray
L1MuDTSectorProcessor & m_sp
const L1MuDTTrackAssembler * TA() const
return pointer to Track Assembler
const L1MuDTTrackSegPhi * getTSphi(int station) const
get track segment from a given station
const std::bitset< 4 > & trackBitMap(int id) const
return bitmap of found track
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
int phib() const
return phib
unsigned short station(int stat) const
get address of a given station [1-4]
bool ovl() const
is it an overlap region Sector Processor?
PtAssMethod
const L1MuDTTrackSegPhi * L1MuDTAssignmentUnit::getTSphi ( int  station) const
private

get track segment from a given station

Definition at line 295 of file L1MuDTAssignmentUnit.cc.

References getDQMSummary::iter, and m_TSphi.

Referenced by getPtMethod(), PhiAU(), and phiDiff().

295  {
296 
297  vector<const L1MuDTTrackSegPhi*>::const_iterator iter;
298  for ( iter = m_TSphi.begin(); iter != m_TSphi.end(); iter++ ) {
299  int stat = (*iter)->station();
300  if ( station == stat ) {
301  return (*iter);
302  break;
303  }
304  }
305 
306  return 0;
307 
308 }
std::vector< const L1MuDTTrackSegPhi * > m_TSphi
void L1MuDTAssignmentUnit::PhiAU ( const edm::EventSetup c)

assign phi

Definition at line 143 of file L1MuDTAssignmentUnit.cc.

References convertSector(), first, edm::EventSetup::get(), L1MuDTTFConfig::getNbitsPhiPhi(), L1MuDTTFConfig::getNbitsPhiPhib(), getTSphi(), L1MuDTSectorProcessor::id(), roll_playback::k, m_id, m_sp, phi, L1MuDTTrackSegPhi::phi(), L1MuDTTrackSegPhi::phib(), edm::second(), L1MuDTSecProcId::sector(), L1MuDTTrackSegPhi::sector(), L1MuDTTrack::setPhi(), thePhiLUTs, L1MuDTSectorProcessor::track(), and L1MuDTSectorProcessor::tracK().

Referenced by run().

143  {
144 
145  // calculate phi at station 2 using 8 bits (precision = 2.5 degrees)
146 
147  c.get< L1MuDTPhiLutRcd >().get( thePhiLUTs );
148 
149  int sh_phi = 12 - L1MuDTTFConfig::getNbitsPhiPhi();
150  int sh_phib = 10 - L1MuDTTFConfig::getNbitsPhiPhib();
151 
152  const L1MuDTTrackSegPhi* second = getTSphi(2); // track segment at station 2
153  const L1MuDTTrackSegPhi* first = getTSphi(1); // track segment at station 1
154  const L1MuDTTrackSegPhi* forth = getTSphi(4); // track segment at station 4
155 
156  int phi2 = 0; // phi-value at station 2
157  int sector = 0;
158 
159  if ( second ) {
160  phi2 = second->phi() >> sh_phi;
161  sector = second->sector();
162  }
163  else if ( second == 0 && first ) {
164  phi2 = first->phi() >> sh_phi;
165  sector = first->sector();
166  }
167  else if ( second == 0 && forth ) {
168  phi2 = forth->phi() >> sh_phi;
169  sector = forth->sector();
170  }
171 
172  int sector0 = m_sp.id().sector();
173 
174  // convert sector difference to values in the range -6 to +5
175 
176  int sectordiff = (sector - sector0)%12;
177  if ( sectordiff >= 6 ) sectordiff -= 12;
178  if ( sectordiff < -6 ) sectordiff += 12;
179 
180  // assert( abs(sectordiff) <= 1 );
181 
182  // get sector center in 8 bit coding
183  int sector_8 = convertSector(sector0);
184 
185  // convert phi to 2.5 degree precision
186  int phi_precision = 4096 >> sh_phi;
187  const double k = 57.2958/2.5/static_cast<float>(phi_precision);
188  double phi_f = static_cast<double>(phi2);
189  int phi_8 = static_cast<int>(floor(phi_f*k));
190 
191  if ( second == 0 && first ) {
192  int bend_angle = (first->phib() >> sh_phib) << sh_phib;
193  phi_8 = phi_8 + thePhiLUTs->getDeltaPhi(0,bend_angle);
194  }
195  else if ( second == 0 && forth ) {
196  int bend_angle = (forth->phib() >> sh_phib) << sh_phib;
197  phi_8 = phi_8 + thePhiLUTs->getDeltaPhi(1,bend_angle);
198  }
199 
200  phi_8 += sectordiff*12;
201 
202  if (phi_8 > 15) phi_8 = 15;
203  if (phi_8 < -16) phi_8 = -16;
204 
205  int phi = (sector_8 + phi_8 + 144)%144;
206  phi_8 = (phi_8 + 32)%32;
207 
208  m_sp.track(m_id)->setPhi(phi);
209  m_sp.tracK(m_id)->setPhi(phi_8);
210 
211 }
L1MuDTTrack * tracK(int id) const
return pointer to muon candidate, index [0,1]
edm::ESHandle< L1MuDTPhiLut > thePhiLUTs
phi-assignment look-up tables
int phi() const
return phi
static int getNbitsPhiPhi()
int sector() const
return sector number
U second(std::pair< T, U > const &p)
L1MuDTSectorProcessor & m_sp
const L1MuDTTrackSegPhi * getTSphi(int station) const
get track segment from a given station
int phib() const
return phib
const L1MuDTSecProcId & id() const
return Sector Processor identifier
bool first
Definition: L1TdeRCT.cc:75
static int getNbitsPhiPhib()
static int convertSector(int)
convert sector Id to 8 bit code (= sector center)
const T & get() const
Definition: EventSetup.h:55
int sector() const
return sector
L1MuDTTrack * track(int id) const
return pointer to muon candidate, index [0,1]
void setPhi(int phi)
set phi-code of muon candidate
Definition: L1MuDTTrack.h:138
Definition: DDAxes.h:10
int L1MuDTAssignmentUnit::phiDiff ( int  stat1,
int  stat2 
) const
private

build difference of two phi values

Definition at line 500 of file L1MuDTAssignmentUnit.cc.

References getTSphi(), nbit_phi, evf::evtn::offset(), L1MuDTTrackSegPhi::phi(), and L1MuDTTrackSegPhi::sector().

Referenced by getPtAddress().

500  {
501 
502  // calculate bit shift
503 
504  int sh_phi = 12 - nbit_phi;
505 
506  // get 2 phi values and add offset (30 degrees ) for adjacent sector
507  int sector1 = getTSphi(stat1)->sector();
508  int sector2 = getTSphi(stat2)->sector();
509  int phi1 = getTSphi(stat1)->phi() >> sh_phi;
510  int phi2 = getTSphi(stat2)->phi() >> sh_phi;
511 
512  // convert sector difference to values in the range -6 to +5
513 
514  int sectordiff = (sector2 - sector1)%12;
515  if ( sectordiff >= 6 ) sectordiff -= 12;
516  if ( sectordiff < -6 ) sectordiff += 12;
517 
518  // assert( abs(sectordiff) <= 1 );
519 
520  int offset = (2144 >> sh_phi) * sectordiff;
521  int bendangle = (phi2 - phi1 + offset) << sh_phi;
522 
523  return bendangle;
524 
525 }
int phi() const
return phi
const L1MuDTTrackSegPhi * getTSphi(int station) const
get track segment from a given station
unsigned int offset(bool)
int sector() const
return sector
static unsigned short nbit_phi
of bits used for pt-assignment
void L1MuDTAssignmentUnit::PtAU ( const edm::EventSetup c)

assign pt and charge

Definition at line 217 of file L1MuDTAssignmentUnit.cc.

References edm::EventSetup::get(), getCharge(), getPtAddress(), getPtMethod(), m_id, m_ptAssMethod, m_sp, EnergyCorrector::pt, L1MuDTTrack::setCharge(), L1MuDTTrack::setPt(), thePtaLUTs, L1MuDTSectorProcessor::track(), and L1MuDTSectorProcessor::tracK().

Referenced by run().

217  {
218 
219  c.get< L1MuDTPtaLutRcd >().get( thePtaLUTs );
220 
221  // get pt-assignment method as function of track class and TS phib values
223 
224  // get input address for look-up table
225  int bend_angle = getPtAddress(m_ptAssMethod);
226  int bend_carga = getPtAddress(m_ptAssMethod, 1);
227 
228  // retrieve pt value from look-up table
229  int lut_idx = m_ptAssMethod;
230  int pt = thePtaLUTs->getPt(lut_idx,bend_angle );
231 
232  m_sp.track(m_id)->setPt(pt);
233  m_sp.tracK(m_id)->setPt(pt);
234 
235  // assign charge
236  int chsign = getCharge(m_ptAssMethod);
237  int charge = ( bend_carga >= 0 ) ? chsign : -1 * chsign;
238  m_sp.track(m_id)->setCharge(charge);
239  m_sp.tracK(m_id)->setCharge(charge);
240 
241 }
void setPt(int pt)
set pt-code of muon candidate
Definition: L1MuDTTrack.h:147
L1MuDTTrack * tracK(int id) const
return pointer to muon candidate, index [0,1]
edm::ESHandle< L1MuDTPtaLut > thePtaLUTs
pt-assignment look-up tables
static int getCharge(PtAssMethod)
determine charge
L1MuDTSectorProcessor & m_sp
const T & get() const
Definition: EventSetup.h:55
int getPtAddress(PtAssMethod, int bendcharge=0) const
calculate bend angle
PtAssMethod getPtMethod() const
determine pt assignment method
L1MuDTTrack * track(int id) const
return pointer to muon candidate, index [0,1]
void setCharge(int charge)
set charge of muon candidate
Definition: L1MuDTTrack.h:150
void L1MuDTAssignmentUnit::QuaAU ( )

assign quality

Definition at line 247 of file L1MuDTAssignmentUnit.cc.

References m_id, m_sp, L1MuDTTrack::setQuality(), T12, T123, T1234, T124, T13, T134, T14, T23, T234, T24, T34, L1MuDTSectorProcessor::TA(), L1MuDTSectorProcessor::track(), L1MuDTSectorProcessor::tracK(), and L1MuDTTrackAssembler::trackClass().

Referenced by run().

247  {
248 
249  unsigned int quality = 0;
250 
251  const TrackClass tc = m_sp.TA()->trackClass(m_id);
252 
253  switch ( tc ) {
254  case T1234 : { quality = 7; break; }
255  case T123 : { quality = 6; break; }
256  case T124 : { quality = 6; break; }
257  case T134 : { quality = 5; break; }
258  case T234 : { quality = 4; break; }
259  case T12 : { quality = 3; break; }
260  case T13 : { quality = 3; break; }
261  case T14 : { quality = 3; break; }
262  case T23 : { quality = 2; break; }
263  case T24 : { quality = 2; break; }
264  case T34 : { quality = 1; break; }
265  default : { quality = 0; break; }
266  }
267 
268  m_sp.track(m_id)->setQuality(quality);
269  m_sp.tracK(m_id)->setQuality(quality);
270 
271 }
L1MuDTTrack * tracK(int id) const
return pointer to muon candidate, index [0,1]
L1MuDTSectorProcessor & m_sp
const L1MuDTTrackAssembler * TA() const
return pointer to Track Assembler
void setQuality(unsigned int quality)
set quality of muon candidate
Definition: L1MuDTTrack.h:153
TrackClass trackClass(int id) const
return Track Class of found track
L1MuDTTrack * track(int id) const
return pointer to muon candidate, index [0,1]
void L1MuDTAssignmentUnit::reset ( void  )
virtual

reset Assignment Unit

Implements L1AbstractProcessor.

Definition at line 131 of file L1MuDTAssignmentUnit.cc.

References m_addArray, m_ptAssMethod, m_TSphi, NODEF, and L1MuDTAddressArray::reset().

Referenced by L1MuDTAssignmentUnit().

131  {
132 
133  m_addArray.reset();
134  m_TSphi.clear();
136 
137 }
void reset()
reset address array
L1MuDTAddressArray m_addArray
std::vector< const L1MuDTTrackSegPhi * > m_TSphi
void L1MuDTAssignmentUnit::run ( const edm::EventSetup c)
virtual

run Assignment Unit

Reimplemented from L1AbstractProcessor.

Definition at line 82 of file L1MuDTAssignmentUnit.cc.

References L1MuDTTrackAssembler::address(), L1MuDTTrack::enable(), getDQMSummary::iter, m_addArray, m_id, m_sp, m_TSphi, PhiAU(), PtAU(), QuaAU(), L1MuDTTrack::setAddresses(), L1MuRegionalCand::setBx(), L1MuDTTrack::setTC(), L1MuDTTrack::setTSphi(), L1MuDTSectorProcessor::TA(), L1MuDTSectorProcessor::track(), L1MuDTSectorProcessor::tracK(), L1MuDTTrackAssembler::trackClass(), and TSR().

82  {
83 
84  // enable track candidate
85  m_sp.track(m_id)->enable();
86  m_sp.tracK(m_id)->enable();
87 
88  // set track class
89  TrackClass tc = m_sp.TA()->trackClass(m_id);
90  m_sp.track(m_id)->setTC(tc);
91  m_sp.tracK(m_id)->setTC(tc);
92 
93  // get relative addresses of matching track segments
97 
98  // get track segments (track segment router)
99  TSR();
102 
103  // set bunch-crossing (use first track segment)
104  vector<const L1MuDTTrackSegPhi*>::const_iterator iter = m_TSphi.begin();
105  int bx = (*iter)->bx();
106  m_sp.track(m_id)->setBx(bx);
107  m_sp.tracK(m_id)->setBx(bx);
108 
109  // assign phi
110  PhiAU(c);
111 
112  // assign pt and charge
113  PtAU(c);
114 
115  // assign quality
116  QuaAU();
117 
118  // special hack for overlap region
119  // for ( iter = m_TSphi.begin(); iter != m_TSphi.end(); iter++ ) {
120  // int wheel = abs((*iter)->wheel());
121  // if ( wheel == 3 && (*iter)->etaFlag() ) m_sp.track(m_id)->disable();
122  // if ( wheel == 3 && (*iter)->etaFlag() ) m_sp.tracK(m_id)->disable();
123  // }
124 
125 }
void PtAU(const edm::EventSetup &c)
assign pt and charge
L1MuDTTrack * tracK(int id) const
return pointer to muon candidate, index [0,1]
void QuaAU()
assign quality
void setTSphi(const std::vector< const L1MuDTTrackSegPhi * > &tsList)
set phi track segments used to form the muon candidate
Definition: L1MuDTTrack.cc:168
void setTC(TrackClass tc)
set track-class of muon candidate
Definition: L1MuDTTrack.h:135
L1MuDTAddressArray m_addArray
void setAddresses(const L1MuDTAddressArray &addr)
set relative addresses of muon candidate
Definition: L1MuDTTrack.h:156
void enable()
enable muon candidate
Definition: L1MuDTTrack.h:126
L1MuDTSectorProcessor & m_sp
void setBx(int bx)
Set Bunch Crossing.
std::vector< const L1MuDTTrackSegPhi * > m_TSphi
const L1MuDTTrackAssembler * TA() const
return pointer to Track Assembler
void TSR()
Track Segment Router.
void PhiAU(const edm::EventSetup &c)
assign phi
TrackClass trackClass(int id) const
return Track Class of found track
L1MuDTTrack * track(int id) const
return pointer to muon candidate, index [0,1]
int address(int id, int stat) const
get address of a single station of selected track candidate
void L1MuDTAssignmentUnit::setPrecision ( )
static

set precision of phi and phib

Definition at line 532 of file L1MuDTAssignmentUnit.cc.

References L1MuDTTFConfig::getNbitsPtaPhi(), L1MuDTTFConfig::getNbitsPtaPhib(), nbit_phi, and nbit_phib.

Referenced by L1MuDTAssignmentUnit().

532  {
533 
536 
537 }
static int getNbitsPtaPhi()
static unsigned short nbit_phib
of bits used for pt-assignment
static int getNbitsPtaPhib()
static unsigned short nbit_phi
of bits used for pt-assignment
void L1MuDTAssignmentUnit::TSR ( )
private

Track Segment Router.

Definition at line 277 of file L1MuDTAssignmentUnit.cc.

References L1MuDTSectorProcessor::data(), L1MuDTDataBuffer::getTSphi(), m_addArray, m_sp, m_TSphi, and L1MuDTAddressArray::station().

Referenced by run().

277  {
278 
279  // get the track segments from the data buffer
280  const L1MuDTTrackSegPhi* ts = 0;
281  for ( int stat = 1; stat <= 4; stat++ ) {
282  int adr = m_addArray.station(stat);
283  if ( adr != 15 ) {
284  ts = m_sp.data()->getTSphi(stat,adr);
285  if ( ts != 0 ) m_TSphi.push_back( ts );
286  }
287  }
288 
289 }
L1MuDTAddressArray m_addArray
const L1MuDTDataBuffer * data() const
return pointer to Data Buffer
L1MuDTSectorProcessor & m_sp
std::vector< const L1MuDTTrackSegPhi * > m_TSphi
const TSPhivector & getTSphi() const
get all track segments from the buffer
unsigned short station(int stat) const
get address of a given station [1-4]

Member Data Documentation

L1MuDTAddressArray L1MuDTAssignmentUnit::m_addArray
private

Definition at line 106 of file L1MuDTAssignmentUnit.h.

Referenced by getPtMethod(), reset(), run(), and TSR().

int L1MuDTAssignmentUnit::m_id
private

Definition at line 104 of file L1MuDTAssignmentUnit.h.

Referenced by getPtMethod(), PhiAU(), PtAU(), QuaAU(), and run().

PtAssMethod L1MuDTAssignmentUnit::m_ptAssMethod
private

Definition at line 108 of file L1MuDTAssignmentUnit.h.

Referenced by PtAU(), and reset().

L1MuDTSectorProcessor& L1MuDTAssignmentUnit::m_sp
private

Definition at line 103 of file L1MuDTAssignmentUnit.h.

Referenced by getPtMethod(), PhiAU(), PtAU(), QuaAU(), run(), and TSR().

std::vector<const L1MuDTTrackSegPhi*> L1MuDTAssignmentUnit::m_TSphi
private

Definition at line 107 of file L1MuDTAssignmentUnit.h.

Referenced by getTSphi(), L1MuDTAssignmentUnit(), reset(), run(), and TSR().

unsigned short int L1MuDTAssignmentUnit::nbit_phi = 12
staticprivate

of bits used for pt-assignment

Definition at line 112 of file L1MuDTAssignmentUnit.h.

Referenced by phiDiff(), and setPrecision().

unsigned short int L1MuDTAssignmentUnit::nbit_phib = 10
staticprivate

of bits used for pt-assignment

Definition at line 113 of file L1MuDTAssignmentUnit.h.

Referenced by setPrecision().

edm::ESHandle< L1MuDTPhiLut > L1MuDTAssignmentUnit::thePhiLUTs
private

phi-assignment look-up tables

Definition at line 110 of file L1MuDTAssignmentUnit.h.

Referenced by PhiAU().

edm::ESHandle< L1MuDTPtaLut > L1MuDTAssignmentUnit::thePtaLUTs
private

pt-assignment look-up tables

Definition at line 111 of file L1MuDTAssignmentUnit.h.

Referenced by getPtMethod(), and PtAU().