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
L1MuBMAssignmentUnit Class Reference

#include <L1MuBMAssignmentUnit.h>

Inheritance diagram for L1MuBMAssignmentUnit:
L1AbstractProcessor

Public Member Functions

 L1MuBMAssignmentUnit (L1MuBMSectorProcessor &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...
 
unsigned int Quality ()
 
virtual void reset ()
 reset Assignment Unit More...
 
virtual void run (const edm::EventSetup &c)
 run Assignment Unit More...
 
virtual ~L1MuBMAssignmentUnit ()
 destructor More...
 
- Public Member Functions inherited from L1AbstractProcessor
virtual void run ()
 run processor logic More...
 
virtual void run ()
 run processor logic More...
 
virtual ~L1AbstractProcessor ()
 destructor More...
 
virtual ~L1AbstractProcessor ()
 destructor More...
 

Static Public Member Functions

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

Private Member Functions

int getPt1Address (L1MuBMLUTHandler::PtAssMethod) const
 
L1MuBMLUTHandler::PtAssMethod getPt1Method (L1MuBMLUTHandler::PtAssMethod) const
 
int getPt2Address (L1MuBMLUTHandler::PtAssMethod) const
 
L1MuBMLUTHandler::PtAssMethod getPt2Method (L1MuBMLUTHandler::PtAssMethod) const
 
int getPtAddress (L1MuBMLUTHandler::PtAssMethod, int bendcharge=0) const
 calculate bend angle More...
 
L1MuBMLUTHandler::PtAssMethod getPtMethod () const
 determine pt assignment method More...
 
const L1MuBMTrackSegPhigetTSphi (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 (L1MuBMLUTHandler::PtAssMethod)
 determine charge More...
 

Private Attributes

edm::ESHandle
< L1TMuonBarrelParams
bmtfParamsHandle
 
L1MuBMAddressArray m_addArray
 
int m_id
 
L1MuBMLUTHandler::PtAssMethod m_ptAssMethod
 
L1MuBMSectorProcessorm_sp
 
std::vector< const
L1MuBMTrackSegPhi * > 
m_TSphi
 
L1MuBMLUTHandlerthePhiLUTs
 phi-assignment look-up tables More...
 
L1MuBMLUTHandlerthePtaLUTs
 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 L1MuBMAssignmentUnit.h.

Constructor & Destructor Documentation

L1MuBMAssignmentUnit::L1MuBMAssignmentUnit ( L1MuBMSectorProcessor sp,
int  id 
)

constructor

Definition at line 54 of file L1MuBMAssignmentUnit.cc.

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

54  :
55  m_sp(sp), m_id(id),
57 
58  m_TSphi.reserve(4); // a track candidate can consist of max 4 TS
59  reset();
60  setPrecision();
61 
62 }
std::vector< const L1MuBMTrackSegPhi * > m_TSphi
static void setPrecision()
set precision of phi and phib
L1MuBMAddressArray m_addArray
virtual void reset()
reset Assignment Unit
L1MuBMSectorProcessor & m_sp
L1MuBMLUTHandler::PtAssMethod m_ptAssMethod
L1MuBMAssignmentUnit::~L1MuBMAssignmentUnit ( )
virtual

destructor

Definition at line 69 of file L1MuBMAssignmentUnit.cc.

69  {
70 }

Member Function Documentation

int L1MuBMAssignmentUnit::convertSector ( int  sector)
staticprivate

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

Definition at line 361 of file L1MuBMAssignmentUnit.cc.

361  {
362 
363  // assert( sector >=0 && sector < 12 );
364  const int sectorvalues[12] = { 0, 12, 24, 36, 48, 60, 72, 84,
365  96, 108, 120, 132 };
366 
367  return sectorvalues[sector];
368 
369 }
int L1MuBMAssignmentUnit::getCharge ( L1MuBMLUTHandler::PtAssMethod  method)
staticprivate

determine charge

Definition at line 375 of file L1MuBMAssignmentUnit.cc.

References L1MuBMLUTHandler::NODEF, L1MuBMLUTHandler::PT12H, L1MuBMLUTHandler::PT12L, L1MuBMLUTHandler::PT13H, L1MuBMLUTHandler::PT13L, L1MuBMLUTHandler::PT14H, L1MuBMLUTHandler::PT14L, L1MuBMLUTHandler::PT23H, L1MuBMLUTHandler::PT23L, L1MuBMLUTHandler::PT24H, L1MuBMLUTHandler::PT24L, L1MuBMLUTHandler::PT34H, and L1MuBMLUTHandler::PT34L.

Referenced by PtAU().

375  {
376 
377  int chargesign = 0;
378  switch ( method ) {
379  case L1MuBMLUTHandler::PT12L : { chargesign = -1; break; }
380  case L1MuBMLUTHandler::PT12H : { chargesign = -1; break; }
381  case L1MuBMLUTHandler::PT13L : { chargesign = -1; break; }
382  case L1MuBMLUTHandler::PT13H : { chargesign = -1; break; }
383  case L1MuBMLUTHandler::PT14L : { chargesign = -1; break; }
384  case L1MuBMLUTHandler::PT14H : { chargesign = -1; break; }
385  case L1MuBMLUTHandler::PT23L : { chargesign = -1; break; }
386  case L1MuBMLUTHandler::PT23H : { chargesign = -1; break; }
387  case L1MuBMLUTHandler::PT24L : { chargesign = -1; break; }
388  case L1MuBMLUTHandler::PT24H : { chargesign = -1; break; }
389  case L1MuBMLUTHandler::PT34L : { chargesign = 1; break; }
390  case L1MuBMLUTHandler::PT34H : { chargesign = 1; break; }
391 
392  case L1MuBMLUTHandler::NODEF : { chargesign = 0;
393  // cerr << "AssignmentUnit::getCharge : undefined PtAssMethod!"
394  // << endl;
395  break;
396  }
397  default : { chargesign = 0; }
398  }
399 
400  return chargesign;
401 
402 }
int L1MuBMAssignmentUnit::getPt1Address ( L1MuBMLUTHandler::PtAssMethod  method) const
private

Definition at line 585 of file L1MuBMAssignmentUnit.cc.

References getTSphi(), L1MuBMLUTHandler::NODEF, L1MuBMTrackSegPhi::phib(), L1MuBMLUTHandler::PT12H, L1MuBMLUTHandler::PT13H, L1MuBMLUTHandler::PT14H, L1MuBMLUTHandler::PT23H, L1MuBMLUTHandler::PT24H, and L1MuBMLUTHandler::PT34H.

Referenced by PtAU().

585  {
586 
587  // phib values of track segments from stations 1, 2 and 4
588  int phib1 = ( getTSphi(1) != 0 ) ? getTSphi(1)->phib() : -999;
589  int phib2 = ( getTSphi(2) != 0 ) ? getTSphi(2)->phib() : -999;
590  int phib4 = ( getTSphi(4) != 0 ) ? getTSphi(4)->phib() : -999;
591 
592 
593  int bendangle = -999;
594  switch (method) {
595  case L1MuBMLUTHandler::PT12H : { bendangle = phib1; break; }
596  case L1MuBMLUTHandler::PT13H : { bendangle = phib1; break; }
597  case L1MuBMLUTHandler::PT14H : { bendangle = phib1; break; }
598  case L1MuBMLUTHandler::PT23H : { bendangle = phib2; break; }
599  case L1MuBMLUTHandler::PT24H : { bendangle = phib2; break; }
600  case L1MuBMLUTHandler::PT34H : { bendangle = phib4; break; }
601  case L1MuBMLUTHandler::NODEF : { bendangle = -999; break; }
602  default : { bendangle = -999; }
603  }
604 
605  return bendangle;
606 
607 }
int phib() const
return phib
const L1MuBMTrackSegPhi * getTSphi(int station) const
get track segment from a given station
L1MuBMLUTHandler::PtAssMethod L1MuBMAssignmentUnit::getPt1Method ( L1MuBMLUTHandler::PtAssMethod  method) const
private

Definition at line 530 of file L1MuBMAssignmentUnit.cc.

References getTSphi(), L1MuBMLUTHandler::NODEF, L1MuBMLUTHandler::PB12H, L1MuBMLUTHandler::PB13H, L1MuBMLUTHandler::PB14H, L1MuBMLUTHandler::PB23H, L1MuBMLUTHandler::PB24H, L1MuBMLUTHandler::PB34H, L1MuBMLUTHandler::PT12H, L1MuBMLUTHandler::PT13H, L1MuBMLUTHandler::PT14H, L1MuBMLUTHandler::PT23H, L1MuBMLUTHandler::PT24H, L1MuBMLUTHandler::PT34H, and L1MuBMTrackSegPhi::quality().

Referenced by PtAU().

530  {
531 
532  // quality values of track segments from stations 1, 2 and 4
533  int qual1 = ( getTSphi(1) != 0 ) ? getTSphi(1)->quality() : 0;
534  int qual2 = ( getTSphi(2) != 0 ) ? getTSphi(2)->quality() : 0;
535  int qual4 = ( getTSphi(4) != 0 ) ? getTSphi(4)->quality() : 0;
536 
538 
539  switch ( method ) {
540  case L1MuBMLUTHandler::PT12H : { if (qual1 > 3) pam = L1MuBMLUTHandler::PB12H; break; }
541  case L1MuBMLUTHandler::PT13H : { if (qual1 > 3) pam = L1MuBMLUTHandler::PB13H; break; }
542  case L1MuBMLUTHandler::PT14H : { if (qual1 > 3) pam = L1MuBMLUTHandler::PB14H; break; }
543  case L1MuBMLUTHandler::PT23H : { if (qual2 > 3) pam = L1MuBMLUTHandler::PB23H; break; }
544  case L1MuBMLUTHandler::PT24H : { if (qual2 > 3) pam = L1MuBMLUTHandler::PB24H; break; }
545  case L1MuBMLUTHandler::PT34H : { if (qual4 > 3) pam = L1MuBMLUTHandler::PB34H; break; }
546  case L1MuBMLUTHandler::NODEF : { pam = L1MuBMLUTHandler::NODEF; break;}
547  default : { pam = L1MuBMLUTHandler::NODEF; }
548  }
549 
550  return pam;
551 
552 }
const L1MuBMTrackSegPhi * getTSphi(int station) const
get track segment from a given station
int quality() const
return quality code
int L1MuBMAssignmentUnit::getPt2Address ( L1MuBMLUTHandler::PtAssMethod  method) const
private

Definition at line 613 of file L1MuBMAssignmentUnit.cc.

References getTSphi(), L1MuBMLUTHandler::NODEF, L1MuBMTrackSegPhi::phib(), L1MuBMLUTHandler::PT12H, L1MuBMLUTHandler::PT14H, and L1MuBMLUTHandler::PT24H.

Referenced by PtAU().

613  {
614 
615  // phib values of track segments from stations 1, 2 and 4
616  int phib2 = ( getTSphi(2) != 0 ) ? getTSphi(2)->phib() : -999;
617  int phib4 = ( getTSphi(4) != 0 ) ? getTSphi(4)->phib() : -999;
618 
619 
620  int bendangle = -999;
621  switch (method) {
622  case L1MuBMLUTHandler::PT12H : { bendangle = phib2; break; }
623  case L1MuBMLUTHandler::PT14H : { bendangle = phib4; break; }
624  case L1MuBMLUTHandler::PT24H : { bendangle = phib4; break; }
625  //case L1MuBMLUTHandler::PT12HO : { bendangle = phib2; break; }
626  //case L1MuBMLUTHandler::PT14HO : { bendangle = phib4; break; }
627  //case L1MuBMLUTHandler::PT24HO : { bendangle = phib4; break; }
628  case L1MuBMLUTHandler::NODEF : { bendangle = -999; break; }
629  default : { bendangle = -999; }
630  }
631 
632  return bendangle;
633 
634 }
int phib() const
return phib
const L1MuBMTrackSegPhi * getTSphi(int station) const
get track segment from a given station
L1MuBMLUTHandler::PtAssMethod L1MuBMAssignmentUnit::getPt2Method ( L1MuBMLUTHandler::PtAssMethod  method) const
private

Definition at line 558 of file L1MuBMAssignmentUnit.cc.

References getTSphi(), L1MuBMLUTHandler::NODEF, L1MuBMLUTHandler::PB21H, L1MuBMLUTHandler::PT12H, and L1MuBMTrackSegPhi::quality().

Referenced by PtAU().

558  {
559 
560  // quality values of track segments from stations 2 and 4
561  int qual2 = ( getTSphi(2) != 0 ) ? getTSphi(2)->quality() : 0;
562  // int qual4 = ( getTSphi(4) != 0 ) ? getTSphi(4)->quality() : 0;
563 
565 
566  switch ( method ) {
567  case L1MuBMLUTHandler::PT12H : { if (qual2 > 3) pam = L1MuBMLUTHandler::PB21H; break; }
568  // case PT14H : { if (qual4 > 3) pam = PB34H; break; }
569  // case PT24H : { if (qual4 > 3) pam = PB34H; break; }
570  //case PT12HO : { if (qual2 > 3) pam = PB21HO; break; }
571  // case PT14HO : { if (qual4 > 3) pam = PB34HO; break; }
572  // case PT24HO : { if (qual4 > 3) pam = PB34HO; break; }
573  case L1MuBMLUTHandler::NODEF : { pam = L1MuBMLUTHandler::NODEF; break; }
574  default : { pam = L1MuBMLUTHandler::NODEF; }
575  }
576 
577  return pam;
578 
579 }
const L1MuBMTrackSegPhi * getTSphi(int station) const
get track segment from a given station
int quality() const
return quality code
int L1MuBMAssignmentUnit::getPtAddress ( L1MuBMLUTHandler::PtAssMethod  method,
int  bendcharge = 0 
) const
private

calculate bend angle

Definition at line 454 of file L1MuBMAssignmentUnit.cc.

References L1MuBMLUTHandler::NODEF, phiDiff(), L1MuBMLUTHandler::PT12H, L1MuBMLUTHandler::PT12L, L1MuBMLUTHandler::PT13H, L1MuBMLUTHandler::PT13L, L1MuBMLUTHandler::PT14H, L1MuBMLUTHandler::PT14L, L1MuBMLUTHandler::PT23H, L1MuBMLUTHandler::PT23L, L1MuBMLUTHandler::PT24H, L1MuBMLUTHandler::PT24L, L1MuBMLUTHandler::PT34H, and L1MuBMLUTHandler::PT34L.

Referenced by PtAU().

454  {
455 
456  // calculate bend angle as difference of two azimuthal positions
457 
458  int bendangle = 0;
459  switch (method) {
460  case L1MuBMLUTHandler::PT12L : { bendangle = phiDiff(1,2); break; }
461  case L1MuBMLUTHandler::PT12H : { bendangle = phiDiff(1,2); break; }
462  case L1MuBMLUTHandler::PT13L : { bendangle = phiDiff(1,3); break; }
463  case L1MuBMLUTHandler::PT13H : { bendangle = phiDiff(1,3); break; }
464  case L1MuBMLUTHandler::PT14L : { bendangle = phiDiff(1,4); break; }
465  case L1MuBMLUTHandler::PT14H : { bendangle = phiDiff(1,4); break; }
466  case L1MuBMLUTHandler::PT23L : { bendangle = phiDiff(2,3); break; }
467  case L1MuBMLUTHandler::PT23H : { bendangle = phiDiff(2,3); break; }
468  case L1MuBMLUTHandler::PT24L : { bendangle = phiDiff(2,4); break; }
469  case L1MuBMLUTHandler::PT24H : { bendangle = phiDiff(2,4); break; }
470  case L1MuBMLUTHandler::PT34L : { bendangle = phiDiff(4,3); break; }
471  case L1MuBMLUTHandler::PT34H : { bendangle = phiDiff(4,3); break; }
472  case L1MuBMLUTHandler::NODEF : { bendangle = 0;
473  // cerr << "AssignmentUnit::getPtAddress : undefined PtAssMethod" << endl;
474  break;
475  }
476  default : { bendangle = 0; }
477 
478  }
479 
480  int signo = 1;
481  bendangle = (bendangle+8192)%4096;
482  if ( bendangle > 2047 ) bendangle -= 4096;
483  if ( bendangle < 0 ) signo = -1;
484 
485  if (bendcharge) return signo;
486 
487  bendangle = (bendangle+2048)%1024;
488  if ( bendangle > 511 ) bendangle -= 1024;
489 
490  return bendangle;
491 
492 }
int phiDiff(int stat1, int stat2) const
build difference of two phi values
L1MuBMLUTHandler::PtAssMethod L1MuBMAssignmentUnit::getPtMethod ( ) const
private

determine pt assignment method

Definition at line 409 of file L1MuBMAssignmentUnit.cc.

References funct::abs(), L1MuBMLUTHandler::getPtLutThreshold(), getTSphi(), m_id, m_sp, PFRecoTauDiscriminationAgainstElectronMVA3GBR_cfi::method, L1MuBMLUTHandler::NODEF, L1MuBMTrackSegPhi::phib(), L1MuBMLUTHandler::PT12H, L1MuBMLUTHandler::PT12L, L1MuBMLUTHandler::PT13H, L1MuBMLUTHandler::PT13L, L1MuBMLUTHandler::PT14H, L1MuBMLUTHandler::PT14L, L1MuBMLUTHandler::PT23H, L1MuBMLUTHandler::PT23L, L1MuBMLUTHandler::PT24H, L1MuBMLUTHandler::PT24L, L1MuBMLUTHandler::PT34H, L1MuBMLUTHandler::PT34L, alignCSCRings::s, L1MuBMSectorProcessor::TA(), thePtaLUTs, dtDQMClient_cfg::threshold, and L1MuBMTrackAssembler::trackBitMap().

Referenced by PtAU().

409  {
410 
411  // determine which pt-assignment method should be used as a function
412  // of the track class and
413  // of the phib values of the track segments making up this track candidate.
414 
415  // get bitmap of track candidate
416  const bitset<4> s = m_sp.TA()->trackBitMap(m_id);
417 
418  int method = -1;
419 
420  if ( s.test(0) && s.test(3) ) method = 2; // stations 1 and 4
421  if ( s.test(0) && s.test(2) ) method = 1; // stations 1 and 3
422  if ( s.test(0) && s.test(1) ) method = 0; // stations 1 and 2
423  if ( !s.test(0) && s.test(1) && s.test(3) ) method = 4; // stations 2 and 4
424  if ( !s.test(0) && s.test(1) && s.test(2) ) method = 3; // stations 2 and 3
425  if ( !s.test(0) && !s.test(1) && s.test(2) && s.test(3) ) method = 5; // stations 3 and 4
426  int threshold = thePtaLUTs->getPtLutThreshold(method);
427 
428  // phib values of track segments from stations 1, 2 and 4
429  int phib1 = ( getTSphi(1) != 0 ) ? getTSphi(1)->phib() : 0;
430  int phib2 = ( getTSphi(2) != 0 ) ? getTSphi(2)->phib() : 0;
431  int phib4 = ( getTSphi(4) != 0 ) ? getTSphi(4)->phib() : 0;
432 
434 
435  switch ( method ) {
436  case 0 : { pam = ( abs(phib1) < threshold ) ? L1MuBMLUTHandler::PT12H : L1MuBMLUTHandler::PT12L; break; }
437  case 1 : { pam = ( abs(phib1) < threshold ) ? L1MuBMLUTHandler::PT13H : L1MuBMLUTHandler::PT13L; break; }
438  case 2 : { pam = ( abs(phib1) < threshold ) ? L1MuBMLUTHandler::PT14H : L1MuBMLUTHandler::PT14L; break; }
439  case 3 : { pam = ( abs(phib2) < threshold ) ? L1MuBMLUTHandler::PT23H : L1MuBMLUTHandler::PT23L; break; }
440  case 4 : { pam = ( abs(phib2) < threshold ) ? L1MuBMLUTHandler::PT24H : L1MuBMLUTHandler::PT24L; break; }
441  case 5 : { pam = ( abs(phib4) < threshold ) ? L1MuBMLUTHandler::PT34H : L1MuBMLUTHandler::PT34L; break; }
442  default : ;
443  //cout << "L1MuBMAssignmentUnit : Error in PT ass method evaluation" << endl;
444  }
445 
446  return pam;
447 
448 }
L1MuBMLUTHandler * thePtaLUTs
pt-assignment look-up tables
int getPtLutThreshold(int pta_ind) const
get pt-assignment LUT threshold
int phib() const
return phib
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const L1MuBMTrackAssembler * TA() const
return pointer to Track Assembler
const L1MuBMTrackSegPhi * getTSphi(int station) const
get track segment from a given station
const std::bitset< 4 > & trackBitMap(int id) const
return bitmap of found track
L1MuBMSectorProcessor & m_sp
const L1MuBMTrackSegPhi * L1MuBMAssignmentUnit::getTSphi ( int  station) const
private

get track segment from a given station

Definition at line 342 of file L1MuBMAssignmentUnit.cc.

References m_TSphi, and L1MuBMTrackSegPhi::station().

Referenced by getPt1Address(), getPt1Method(), getPt2Address(), getPt2Method(), getPtMethod(), PhiAU(), and phiDiff().

342  {
343 
344  vector<const L1MuBMTrackSegPhi*>::const_iterator iter;
345  for ( iter = m_TSphi.begin(); iter != m_TSphi.end(); iter++ ) {
346  int stat = (*iter)->station();
347  if ( station == stat ) {
348  return (*iter);
349  break;
350  }
351  }
352 
353  return 0;
354 
355 }
std::vector< const L1MuBMTrackSegPhi * > m_TSphi
void L1MuBMAssignmentUnit::PhiAU ( const edm::EventSetup c)

assign phi

< phi-assignment look-up tables

Definition at line 134 of file L1MuBMAssignmentUnit.cc.

References bmtfParamsHandle, plotBeamSpotDB::first, edm::EventSetup::get(), edm::eventsetup::EventSetupRecord::get(), L1MuBMLUTHandler::getDeltaPhi(), L1MuBMTFConfig::getNbitsPhiPhi(), L1MuBMTFConfig::getNbitsPhiPhib(), getTSphi(), L1MuBMSectorProcessor::id(), relval_2017::k, m_id, m_sp, phi, L1MuBMTrackSegPhi::phi(), L1MuBMTrackSegPhi::phib(), edm::ESHandle< class >::product(), edm::second(), L1MuBMSecProcId::sector(), L1MuBMTrackSegPhi::sector(), L1MuBMTrack::setPhi(), thePhiLUTs, L1MuBMSectorProcessor::track(), and L1MuBMSectorProcessor::tracK().

Referenced by run().

134  {
135 
136  const L1TMuonBarrelParamsRcd& bmtfParamsRcd = c.get<L1TMuonBarrelParamsRcd>();
137  bmtfParamsRcd.get(bmtfParamsHandle);
138  const L1TMuonBarrelParams& bmtfParams = *bmtfParamsHandle.product();
139  thePhiLUTs = new L1MuBMLUTHandler(bmtfParams);
140  //thePhiLUTs->print();
141  // calculate phi at station 2 using 8 bits (precision = 0.625 degrees)
142  int sh_phi = 12 - L1MuBMTFConfig::getNbitsPhiPhi();
143  int sh_phib = 10 - L1MuBMTFConfig::getNbitsPhiPhib();
144 
145  const L1MuBMTrackSegPhi* second = getTSphi(2); // track segment at station 2
146  const L1MuBMTrackSegPhi* first = getTSphi(1); // track segment at station 1
147  const L1MuBMTrackSegPhi* forth = getTSphi(4); // track segment at station 4
148 
149  int phi2 = 0; // phi-value at station 2
150  int sector = 0;
151  if ( second ) {
152  phi2 = second->phi() >> sh_phi;
153  sector = second->sector();
154  }
155  else if ( second == 0 && first ) {
156  phi2 = first->phi() >> sh_phi;
157  sector = first->sector();
158  }
159  else if ( second == 0 && forth ) {
160  phi2 = forth->phi() >> sh_phi;
161  sector = forth->sector();
162  }
163 
164  int sector0 = m_sp.id().sector();
165 
166  // convert sector difference to values in the range -6 to +5
167 
168  int sectordiff = (sector - sector0)%12;
169  if ( sectordiff >= 6 ) sectordiff -= 12;
170  if ( sectordiff < -6 ) sectordiff += 12;
171 
172  // convert phi to 0.625 degree precision
173  int phi_precision = 4096 >> sh_phi;
174  const double k = 57.2958/0.625/static_cast<float>(phi_precision);
175  double phi_f = static_cast<double>(phi2);
176  int phi_8 = static_cast<int>(floor(phi_f*k));
177 
178  if ( second == 0 && first ) {
179  int bend_angle = (first->phib() >> sh_phib) << sh_phib;
180  phi_8 = phi_8 + thePhiLUTs->getDeltaPhi(0,bend_angle);
181  //phi_8 = phi_8 + getDeltaPhi(0, bend_angle, bmtfParams->phi_lut());
182  }
183  else if ( second == 0 && forth ) {
184 
185  int bend_angle = (forth->phib() >> sh_phib) << sh_phib;
186  phi_8 = phi_8 + thePhiLUTs->getDeltaPhi(1,bend_angle);
187  //phi_8 = phi_8 + getDeltaPhi(1, bend_angle, bmtfParams->phi_lut());
188  }
189 
190  //If muon is found at the neighbour sector - second station
191  //a shift is needed by 48
192  phi_8 += sectordiff*48;
193 
194  int phi = phi_8 + 24;
195  if (phi > 55) phi = 55;
196  if (phi < -8) phi = -8;
197 
198  m_sp.track(m_id)->setPhi(phi); // Regional
199  m_sp.tracK(m_id)->setPhi(phi);
200 
201 delete thePhiLUTs;
202 }
static int getNbitsPhiPhi()
static int getNbitsPhiPhib()
edm::ESHandle< L1TMuonBarrelParams > bmtfParamsHandle
void setPhi(int phi)
set phi-code of muon candidate
Definition: L1MuBMTrack.h:148
U second(std::pair< T, U > const &p)
L1MuBMTrack * tracK(int id) const
return pointer to muon candidate, index [0,1]
int sector() const
return sector number
int phib() const
return phib
L1MuBMLUTHandler * thePhiLUTs
phi-assignment look-up tables
void get(HolderT &iHolder) const
const L1MuBMSecProcId & id() const
return Sector Processor identifier
L1MuBMTrack * track(int id) const
return pointer to muon candidate, index [0,1]
int phi() const
return phi
int getDeltaPhi(int idx, int address) const
get delta-phi for a given address (bend-angle)
const T & get() const
Definition: EventSetup.h:56
T const * product() const
Definition: ESHandle.h:86
const L1MuBMTrackSegPhi * getTSphi(int station) const
get track segment from a given station
L1MuBMSectorProcessor & m_sp
int sector() const
return sector
int L1MuBMAssignmentUnit::phiDiff ( int  stat1,
int  stat2 
) const
private

build difference of two phi values

Definition at line 498 of file L1MuBMAssignmentUnit.cc.

References getTSphi(), nbit_phi, hltrates_dqm_sourceclient-live_cfg::offset, L1MuBMTrackSegPhi::phi(), and L1MuBMTrackSegPhi::sector().

Referenced by getPtAddress().

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

assign pt and charge

< pt-assignment look-up tables

Definition at line 208 of file L1MuBMAssignmentUnit.cc.

References funct::abs(), bmtfParamsHandle, RecoTauCleanerPlugins::charge, L1TMuonBarrelParams::fwVersion(), edm::EventSetup::get(), edm::eventsetup::EventSetupRecord::get(), getCharge(), L1MuBMLUTHandler::getPt(), getPt1Address(), getPt1Method(), getPt2Address(), getPt2Method(), getPtAddress(), getPtMethod(), m_id, m_ptAssMethod, m_sp, L1MuBMLUTHandler::NODEF, edm::ESHandle< class >::product(), EnergyCorrector::pt, Quality(), L1MuBMTrack::setCharge(), L1MuBMTrack::setPt(), thePtaLUTs, L1MuBMSectorProcessor::track(), and L1MuBMSectorProcessor::tracK().

Referenced by run().

208  {
209 
210  const L1TMuonBarrelParamsRcd& bmtfParamsRcd = c.get<L1TMuonBarrelParamsRcd>();
211  bmtfParamsRcd.get(bmtfParamsHandle);
212  const L1TMuonBarrelParams& bmtfParams = *bmtfParamsHandle.product();
213  thePtaLUTs = new L1MuBMLUTHandler(bmtfParams);
214  //thePtaLUTs->print();
215  // get pt-assignment method as function of track class and TS phib values
216  //m_ptAssMethod = getPtMethod(bmtfParams);
218  // get input address for look-up table
219  int bend_angle = getPtAddress(m_ptAssMethod);
220  int bend_carga = getPtAddress(m_ptAssMethod, 1);
221 
222  // retrieve pt value from look-up table
223  int lut_idx = m_ptAssMethod;
224  int pt = thePtaLUTs->getPt(lut_idx,bend_angle );
225  //int pt = getPt(lut_idx, bend_angle, bmtfParams->pta_lut());
226 
227 if(bmtfParams.fwVersion()==2){
228  if (Quality() < 4) {
229  int ptj = pt;
232  if (jj1 != L1MuBMLUTHandler::NODEF) {
233  lut_idx = jj1;
234  bend_angle = getPt1Address(m_ptAssMethod);
235  if (abs(bend_angle) < 512) ptj = thePtaLUTs->getPt(lut_idx,bend_angle );
236  }
237  else if (jj2 != L1MuBMLUTHandler::NODEF) {
238  lut_idx = jj2;
239  bend_angle = getPt2Address(m_ptAssMethod);
240  if (abs(bend_angle) < 512) ptj = thePtaLUTs->getPt(lut_idx,bend_angle );
241  }
242  if (ptj < pt) pt = ptj;
243  }
244 }
245 
246  m_sp.track(m_id)->setPt(pt);
247  m_sp.tracK(m_id)->setPt(pt);
248 
249  // assign charge
250  int chsign = getCharge(m_ptAssMethod);
251  int charge = ( bend_carga >= 0 ) ? chsign : -1 * chsign;
252  m_sp.track(m_id)->setCharge(charge);
253  m_sp.tracK(m_id)->setCharge(charge);
254  delete thePtaLUTs;
255 
256 }
L1MuBMLUTHandler::PtAssMethod getPtMethod() const
determine pt assignment method
void setPt(int pt)
set pt-code of muon candidate
Definition: L1MuBMTrack.h:157
edm::ESHandle< L1TMuonBarrelParams > bmtfParamsHandle
int getPt(int pta_ind, int address) const
get pt-value for a given address
int getPtAddress(L1MuBMLUTHandler::PtAssMethod, int bendcharge=0) const
calculate bend angle
void setCharge(int charge)
set charge of muon candidate
Definition: L1MuBMTrack.h:160
L1MuBMLUTHandler * thePtaLUTs
pt-assignment look-up tables
L1MuBMLUTHandler::PtAssMethod getPt1Method(L1MuBMLUTHandler::PtAssMethod) const
L1MuBMTrack * tracK(int id) const
return pointer to muon candidate, index [0,1]
void get(HolderT &iHolder) const
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
L1MuBMTrack * track(int id) const
return pointer to muon candidate, index [0,1]
unsigned fwVersion() const
int getPt1Address(L1MuBMLUTHandler::PtAssMethod) const
const T & get() const
Definition: EventSetup.h:56
T const * product() const
Definition: ESHandle.h:86
static int getCharge(L1MuBMLUTHandler::PtAssMethod)
determine charge
int getPt2Address(L1MuBMLUTHandler::PtAssMethod) const
L1MuBMLUTHandler::PtAssMethod getPt2Method(L1MuBMLUTHandler::PtAssMethod) const
L1MuBMSectorProcessor & m_sp
L1MuBMLUTHandler::PtAssMethod m_ptAssMethod
void L1MuBMAssignmentUnit::QuaAU ( )

assign quality

Two LSBs of BMTF Q = Nstations-1

Two MSB of BMTF Q = 11

Definition at line 262 of file L1MuBMAssignmentUnit.cc.

References m_id, m_sp, HLT_FULL_cff::quality, L1MuBMTrack::setQuality(), T12, T123, T1234, T124, T13, T134, T14, T23, T234, T24, T34, L1MuBMSectorProcessor::TA(), L1MuBMSectorProcessor::track(), L1MuBMSectorProcessor::tracK(), and L1MuBMTrackAssembler::trackClass().

Referenced by run().

262  {
263 
264  unsigned int quality = 0;
265 
266  const TrackClass tc = m_sp.TA()->trackClass(m_id);
267 
269  switch ( tc ) {
270  case T1234 : { quality = 3; break; }
271  case T123 : { quality = 2; break; }
272  case T124 : { quality = 2; break; }
273  case T134 : { quality = 2; break; }
274  case T234 : { quality = 2; break; }
275  case T12 : { quality = 1; break; }
276  case T13 : { quality = 1; break; }
277  case T14 : { quality = 1; break; }
278  case T23 : { quality = 0; break; }
279  case T24 : { quality = 0; break; }
280  case T34 : { quality = 0; break; }
281  default : { quality = 0; break; }
282  }
283 
285  quality += 12;
286 
287  m_sp.track(m_id)->setQuality(quality);
288  m_sp.tracK(m_id)->setQuality(quality);
289 
290 }
void setQuality(unsigned int quality)
set quality of muon candidate
Definition: L1MuBMTrack.h:166
L1MuBMTrack * tracK(int id) const
return pointer to muon candidate, index [0,1]
TrackClass trackClass(int id) const
return Track Class of found track
const L1MuBMTrackAssembler * TA() const
return pointer to Track Assembler
L1MuBMTrack * track(int id) const
return pointer to muon candidate, index [0,1]
L1MuBMSectorProcessor & m_sp
unsigned int L1MuBMAssignmentUnit::Quality ( )

Definition at line 296 of file L1MuBMAssignmentUnit.cc.

References m_id, m_sp, HLT_FULL_cff::quality, T12, T123, T1234, T124, T13, T134, T14, T23, T234, T24, T34, L1MuBMSectorProcessor::TA(), and L1MuBMTrackAssembler::trackClass().

Referenced by PtAU().

296  {
297 
298  unsigned int quality = 0;
299 
300  const TrackClass tc = m_sp.TA()->trackClass(m_id);
301 
302  switch ( tc ) {
303  case T1234 : { quality = 7; break; }
304  case T123 : { quality = 6; break; }
305  case T124 : { quality = 6; break; }
306  case T134 : { quality = 5; break; }
307  case T234 : { quality = 4; break; }
308  case T12 : { quality = 3; break; }
309  case T13 : { quality = 3; break; }
310  case T14 : { quality = 3; break; }
311  case T23 : { quality = 2; break; }
312  case T24 : { quality = 2; break; }
313  case T34 : { quality = 1; break; }
314  default : { quality = 0; }
315  }
316 
317  return quality;
318 
319 }
TrackClass trackClass(int id) const
return Track Class of found track
const L1MuBMTrackAssembler * TA() const
return pointer to Track Assembler
L1MuBMSectorProcessor & m_sp
void L1MuBMAssignmentUnit::reset ( void  )
virtual

reset Assignment Unit

Implements L1AbstractProcessor.

Definition at line 122 of file L1MuBMAssignmentUnit.cc.

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

Referenced by L1MuBMAssignmentUnit().

122  {
123 
124  m_addArray.reset();
125  m_TSphi.clear();
127 
128 }
std::vector< const L1MuBMTrackSegPhi * > m_TSphi
L1MuBMAddressArray m_addArray
void reset()
reset address array
L1MuBMLUTHandler::PtAssMethod m_ptAssMethod
void L1MuBMAssignmentUnit::run ( const edm::EventSetup c)
virtual

run Assignment Unit

Reimplemented from L1AbstractProcessor.

Definition at line 80 of file L1MuBMAssignmentUnit.cc.

References L1MuBMTrackAssembler::address(), L1MuBMTrack::enable(), m_addArray, m_id, m_sp, m_TSphi, PhiAU(), PtAU(), QuaAU(), L1MuBMTrack::setAddresses(), L1MuBMTrack::setBx(), L1MuBMTrack::setTC(), L1MuBMTrack::setTSphi(), L1MuBMSectorProcessor::TA(), L1MuBMSectorProcessor::track(), L1MuBMSectorProcessor::tracK(), L1MuBMTrackAssembler::trackClass(), and TSR().

80  {
81 
82  // enable track candidate
83  m_sp.track(m_id)->enable();
84  m_sp.tracK(m_id)->enable();
85 
86  // set track class
87  TrackClass tc = m_sp.TA()->trackClass(m_id);
88  m_sp.track(m_id)->setTC(tc);
89  m_sp.tracK(m_id)->setTC(tc);
90 
91  // get relative addresses of matching track segments
95 
96  // get track segments (track segment router)
97  TSR();
100 
101  // set bunch-crossing (use first track segment)
102  vector<const L1MuBMTrackSegPhi*>::const_iterator iter = m_TSphi.begin();
103  int bx = (*iter)->bx();
104  m_sp.track(m_id)->setBx(bx);
105  m_sp.tracK(m_id)->setBx(bx);
106 
107  // assign phi
108  PhiAU(c);
109 
110  // assign pt and charge
111  PtAU(c);
112 
113  // assign quality
114  QuaAU();
115 
116 }
void setTC(TrackClass tc)
set track-class of muon candidate
Definition: L1MuBMTrack.h:145
void QuaAU()
assign quality
void PtAU(const edm::EventSetup &c)
assign pt and charge
void setAddresses(const L1MuBMAddressArray &addr)
set relative addresses of muon candidate
Definition: L1MuBMTrack.h:169
void TSR()
Track Segment Router.
void enable()
enable muon candidate
Definition: L1MuBMTrack.h:136
std::vector< const L1MuBMTrackSegPhi * > m_TSphi
L1MuBMTrack * tracK(int id) const
return pointer to muon candidate, index [0,1]
TrackClass trackClass(int id) const
return Track Class of found track
const L1MuBMTrackAssembler * TA() const
return pointer to Track Assembler
void setBx(int bx)
set charge of muon candidate
Definition: L1MuBMTrack.h:163
L1MuBMTrack * track(int id) const
return pointer to muon candidate, index [0,1]
void setTSphi(const std::vector< const L1MuBMTrackSegPhi * > &tsList)
set phi track segments used to form the muon candidate
Definition: L1MuBMTrack.cc:170
L1MuBMAddressArray m_addArray
L1MuBMSectorProcessor & m_sp
void PhiAU(const edm::EventSetup &c)
assign phi
int address(int id, int stat) const
get address of a single station of selected track candidate
void L1MuBMAssignmentUnit::setPrecision ( )
static

set precision of phi and phib

Definition at line 640 of file L1MuBMAssignmentUnit.cc.

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

Referenced by L1MuBMAssignmentUnit().

640  {
641 
644 
645 }
static int getNbitsPtaPhi()
static int getNbitsPtaPhib()
static unsigned short nbit_phib
of bits used for pt-assignment
static unsigned short nbit_phi
of bits used for pt-assignment
void L1MuBMAssignmentUnit::TSR ( )
private

Track Segment Router.

Definition at line 324 of file L1MuBMAssignmentUnit.cc.

References L1MuBMSectorProcessor::data(), L1MuBMDataBuffer::getTSphi(), m_addArray, m_sp, m_TSphi, and L1MuBMAddressArray::station().

Referenced by run().

324  {
325 
326  // get the track segments from the data buffer
327  const L1MuBMTrackSegPhi* ts = 0;
328  for ( int stat = 1; stat <= 4; stat++ ) {
329  int adr = m_addArray.station(stat);
330  if ( adr != 15 ) {
331  ts = m_sp.data()->getTSphi(stat,adr);
332  if ( ts != 0 ) m_TSphi.push_back( ts );
333  }
334  }
335 
336 }
unsigned short station(int stat) const
get address of a given station [1-4]
std::vector< const L1MuBMTrackSegPhi * > m_TSphi
L1MuBMAddressArray m_addArray
const TSPhivector & getTSphi() const
get all track segments from the buffer
const L1MuBMDataBuffer * data() const
return pointer to Data Buffer
L1MuBMSectorProcessor & m_sp

Member Data Documentation

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

Definition at line 115 of file L1MuBMAssignmentUnit.h.

Referenced by PhiAU(), and PtAU().

L1MuBMAddressArray L1MuBMAssignmentUnit::m_addArray
private

Definition at line 111 of file L1MuBMAssignmentUnit.h.

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

int L1MuBMAssignmentUnit::m_id
private

Definition at line 109 of file L1MuBMAssignmentUnit.h.

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

L1MuBMLUTHandler::PtAssMethod L1MuBMAssignmentUnit::m_ptAssMethod
private

Definition at line 113 of file L1MuBMAssignmentUnit.h.

Referenced by PtAU(), and reset().

L1MuBMSectorProcessor& L1MuBMAssignmentUnit::m_sp
private

Definition at line 108 of file L1MuBMAssignmentUnit.h.

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

std::vector<const L1MuBMTrackSegPhi*> L1MuBMAssignmentUnit::m_TSphi
private

Definition at line 112 of file L1MuBMAssignmentUnit.h.

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

unsigned short int L1MuBMAssignmentUnit::nbit_phi = 12
staticprivate

of bits used for pt-assignment

Definition at line 118 of file L1MuBMAssignmentUnit.h.

Referenced by phiDiff(), and setPrecision().

unsigned short int L1MuBMAssignmentUnit::nbit_phib = 10
staticprivate

of bits used for pt-assignment

Definition at line 119 of file L1MuBMAssignmentUnit.h.

Referenced by setPrecision().

L1MuBMLUTHandler* L1MuBMAssignmentUnit::thePhiLUTs
private

phi-assignment look-up tables

Definition at line 117 of file L1MuBMAssignmentUnit.h.

Referenced by PhiAU().

L1MuBMLUTHandler* L1MuBMAssignmentUnit::thePtaLUTs
private

pt-assignment look-up tables

Definition at line 116 of file L1MuBMAssignmentUnit.h.

Referenced by getPtMethod(), and PtAU().