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

Date:
2008/02/18 17:38:04
Revision:
1.4

N. Neumeister CERN EP J. Troconiz UAM Madrid

Definition at line 52 of file L1MuDTAssignmentUnit.h.

Constructor & Destructor Documentation

L1MuDTAssignmentUnit::L1MuDTAssignmentUnit ( L1MuDTSectorProcessor sp,
int  id 
)

constructor

Definition at line 58 of file L1MuDTAssignmentUnit.cc.

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

58  :
59  m_sp(sp), m_id(id),
61 
62  m_TSphi.reserve(4); // a track candidate can consist of max 4 TS
63  reset();
64 
65  setPrecision();
66 
67 }
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 74 of file L1MuDTAssignmentUnit.cc.

74 {}

Member Function Documentation

int L1MuDTAssignmentUnit::convertSector ( int  sector)
staticprivate

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

Definition at line 316 of file L1MuDTAssignmentUnit.cc.

Referenced by PhiAU().

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

determine charge

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

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

calculate bend angle

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

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

References abs, getTSphi(), m_addArray, m_id, m_sp, PFRecoTauDiscriminationAgainstElectronMVA2_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().

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

References m_TSphi, and L1MuDTTrackSegPhi::station().

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

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

assign phi

Definition at line 145 of file L1MuDTAssignmentUnit.cc.

References convertSector(), first, edm::EventSetup::get(), L1MuDTTFConfig::getNbitsPhiPhi(), L1MuDTTFConfig::getNbitsPhiPhib(), getTSphi(), L1MuDTSectorProcessor::id(), gen::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().

145  {
146 
147  // calculate phi at station 2 using 8 bits (precision = 2.5 degrees)
148 
149  c.get< L1MuDTPhiLutRcd >().get( thePhiLUTs );
150 
151  int sh_phi = 12 - L1MuDTTFConfig::getNbitsPhiPhi();
152  int sh_phib = 10 - L1MuDTTFConfig::getNbitsPhiPhib();
153 
154  const L1MuDTTrackSegPhi* second = getTSphi(2); // track segment at station 2
155  const L1MuDTTrackSegPhi* first = getTSphi(1); // track segment at station 1
156  const L1MuDTTrackSegPhi* forth = getTSphi(4); // track segment at station 4
157 
158  int phi2 = 0; // phi-value at station 2
159  int sector = 0;
160 
161  if ( second ) {
162  phi2 = second->phi() >> sh_phi;
163  sector = second->sector();
164  }
165  else if ( second == 0 && first ) {
166  phi2 = first->phi() >> sh_phi;
167  sector = first->sector();
168  }
169  else if ( second == 0 && forth ) {
170  phi2 = forth->phi() >> sh_phi;
171  sector = forth->sector();
172  }
173 
174  int sector0 = m_sp.id().sector();
175 
176  // convert sector difference to values in the range -6 to +5
177 
178  int sectordiff = (sector - sector0)%12;
179  if ( sectordiff >= 6 ) sectordiff -= 12;
180  if ( sectordiff < -6 ) sectordiff += 12;
181 
182  // assert( abs(sectordiff) <= 1 );
183 
184  // get sector center in 8 bit coding
185  int sector_8 = convertSector(sector0);
186 
187  // convert phi to 2.5 degree precision
188  int phi_precision = 4096 >> sh_phi;
189  const double k = 57.2958/2.5/static_cast<float>(phi_precision);
190  double phi_f = static_cast<double>(phi2);
191  int phi_8 = static_cast<int>(floor(phi_f*k));
192 
193  if ( second == 0 && first ) {
194  int bend_angle = (first->phib() >> sh_phib) << sh_phib;
195  phi_8 = phi_8 + thePhiLUTs->getDeltaPhi(0,bend_angle);
196  }
197  else if ( second == 0 && forth ) {
198  int bend_angle = (forth->phib() >> sh_phib) << sh_phib;
199  phi_8 = phi_8 + thePhiLUTs->getDeltaPhi(1,bend_angle);
200  }
201 
202  phi_8 += sectordiff*12;
203 
204  if (phi_8 > 15) phi_8 = 15;
205  if (phi_8 < -16) phi_8 = -16;
206 
207  int phi = (sector_8 + phi_8 + 144)%144;
208  phi_8 = (phi_8 + 32)%32;
209 
210  m_sp.track(m_id)->setPhi(phi);
211  m_sp.tracK(m_id)->setPhi(phi_8);
212 
213 }
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:94
int k[5][pyjets_maxn]
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:140
Definition: DDAxes.h:10
int L1MuDTAssignmentUnit::phiDiff ( int  stat1,
int  stat2 
) const
private

build difference of two phi values

Definition at line 502 of file L1MuDTAssignmentUnit.cc.

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

Referenced by getPtAddress().

502  {
503 
504  // calculate bit shift
505 
506  int sh_phi = 12 - nbit_phi;
507 
508  // get 2 phi values and add offset (30 degrees ) for adjacent sector
509  int sector1 = getTSphi(stat1)->sector();
510  int sector2 = getTSphi(stat2)->sector();
511  int phi1 = getTSphi(stat1)->phi() >> sh_phi;
512  int phi2 = getTSphi(stat2)->phi() >> sh_phi;
513 
514  // convert sector difference to values in the range -6 to +5
515 
516  int sectordiff = (sector2 - sector1)%12;
517  if ( sectordiff >= 6 ) sectordiff -= 12;
518  if ( sectordiff < -6 ) sectordiff += 12;
519 
520  // assert( abs(sectordiff) <= 1 );
521 
522  int offset = (2144 >> sh_phi) * sectordiff;
523  int bendangle = (phi2 - phi1 + offset) << sh_phi;
524 
525  return bendangle;
526 
527 }
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 219 of file L1MuDTAssignmentUnit.cc.

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

Referenced by run().

219  {
220 
221  c.get< L1MuDTPtaLutRcd >().get( thePtaLUTs );
222 
223  // get pt-assignment method as function of track class and TS phib values
225 
226  // get input address for look-up table
227  int bend_angle = getPtAddress(m_ptAssMethod);
228  int bend_carga = getPtAddress(m_ptAssMethod, 1);
229 
230  // retrieve pt value from look-up table
231  int lut_idx = m_ptAssMethod;
232  int pt = thePtaLUTs->getPt(lut_idx,bend_angle );
233 
234  m_sp.track(m_id)->setPt(pt);
235  m_sp.tracK(m_id)->setPt(pt);
236 
237  // assign charge
238  int chsign = getCharge(m_ptAssMethod);
239  int charge = ( bend_carga >= 0 ) ? chsign : -1 * chsign;
240  m_sp.track(m_id)->setCharge(charge);
241  m_sp.tracK(m_id)->setCharge(charge);
242 
243 }
void setPt(int pt)
set pt-code of muon candidate
Definition: L1MuDTTrack.h:149
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
double charge(const std::vector< uint8_t > &Ampls)
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:152
void L1MuDTAssignmentUnit::QuaAU ( )

assign quality

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

249  {
250 
251  unsigned int quality = 0;
252 
253  const TrackClass tc = m_sp.TA()->trackClass(m_id);
254 
255  switch ( tc ) {
256  case T1234 : { quality = 7; break; }
257  case T123 : { quality = 6; break; }
258  case T124 : { quality = 6; break; }
259  case T134 : { quality = 5; break; }
260  case T234 : { quality = 4; break; }
261  case T12 : { quality = 3; break; }
262  case T13 : { quality = 3; break; }
263  case T14 : { quality = 3; break; }
264  case T23 : { quality = 2; break; }
265  case T24 : { quality = 2; break; }
266  case T34 : { quality = 1; break; }
267  default : { quality = 0; break; }
268  }
269 
270  m_sp.track(m_id)->setQuality(quality);
271  m_sp.tracK(m_id)->setQuality(quality);
272 
273 }
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:155
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 133 of file L1MuDTAssignmentUnit.cc.

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

Referenced by L1MuDTAssignmentUnit().

133  {
134 
135  m_addArray.reset();
136  m_TSphi.clear();
138 
139 }
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 84 of file L1MuDTAssignmentUnit.cc.

References L1MuDTTrackAssembler::address(), L1MuDTTrack::enable(), 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().

84  {
85 
86  // enable track candidate
87  m_sp.track(m_id)->enable();
88  m_sp.tracK(m_id)->enable();
89 
90  // set track class
91  TrackClass tc = m_sp.TA()->trackClass(m_id);
92  m_sp.track(m_id)->setTC(tc);
93  m_sp.tracK(m_id)->setTC(tc);
94 
95  // get relative addresses of matching track segments
99 
100  // get track segments (track segment router)
101  TSR();
104 
105  // set bunch-crossing (use first track segment)
106  vector<const L1MuDTTrackSegPhi*>::const_iterator iter = m_TSphi.begin();
107  int bx = (*iter)->bx();
108  m_sp.track(m_id)->setBx(bx);
109  m_sp.tracK(m_id)->setBx(bx);
110 
111  // assign phi
112  PhiAU(c);
113 
114  // assign pt and charge
115  PtAU(c);
116 
117  // assign quality
118  QuaAU();
119 
120  // special hack for overlap region
121  // for ( iter = m_TSphi.begin(); iter != m_TSphi.end(); iter++ ) {
122  // int wheel = abs((*iter)->wheel());
123  // if ( wheel == 3 && (*iter)->etaFlag() ) m_sp.track(m_id)->disable();
124  // if ( wheel == 3 && (*iter)->etaFlag() ) m_sp.tracK(m_id)->disable();
125  // }
126 
127 }
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:170
void setTC(TrackClass tc)
set track-class of muon candidate
Definition: L1MuDTTrack.h:137
L1MuDTAddressArray m_addArray
void setAddresses(const L1MuDTAddressArray &addr)
set relative addresses of muon candidate
Definition: L1MuDTTrack.h:158
void enable()
enable muon candidate
Definition: L1MuDTTrack.h:128
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 534 of file L1MuDTAssignmentUnit.cc.

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

Referenced by L1MuDTAssignmentUnit().

534  {
535 
538 
539 }
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 279 of file L1MuDTAssignmentUnit.cc.

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

Referenced by run().

279  {
280 
281  // get the track segments from the data buffer
282  const L1MuDTTrackSegPhi* ts = 0;
283  for ( int stat = 1; stat <= 4; stat++ ) {
284  int adr = m_addArray.station(stat);
285  if ( adr != 15 ) {
286  ts = m_sp.data()->getTSphi(stat,adr);
287  if ( ts != 0 ) m_TSphi.push_back( ts );
288  }
289  }
290 
291 }
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 108 of file L1MuDTAssignmentUnit.h.

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

int L1MuDTAssignmentUnit::m_id
private

Definition at line 106 of file L1MuDTAssignmentUnit.h.

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

PtAssMethod L1MuDTAssignmentUnit::m_ptAssMethod
private

Definition at line 110 of file L1MuDTAssignmentUnit.h.

Referenced by PtAU(), and reset().

L1MuDTSectorProcessor& L1MuDTAssignmentUnit::m_sp
private

Definition at line 105 of file L1MuDTAssignmentUnit.h.

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

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

Definition at line 109 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 114 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 115 of file L1MuDTAssignmentUnit.h.

Referenced by setPrecision().

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

phi-assignment look-up tables

Definition at line 112 of file L1MuDTAssignmentUnit.h.

Referenced by PhiAU().

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

pt-assignment look-up tables

Definition at line 113 of file L1MuDTAssignmentUnit.h.

Referenced by getPtMethod(), and PtAU().