CMS 3D CMS Logo

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

#include <L1MuDTEUX.h>

Inheritance diagram for L1MuDTEUX:
L1AbstractProcessor

Classes

class  EUX_Comp
 helper class for finding the best and second best extrapolation More...
 

Public Member Functions

unsigned short int address () const
 return extrapolation address (0-11) (address = 15 indicates negative ext. result) More...
 
int id () const
 return Extrapolation identifier More...
 
 L1MuDTEUX (const L1MuDTSectorProcessor &sp, const L1MuDTSEU &seu, int id)
 constructor More...
 
void load (const L1MuDTTrackSegPhi *start_ts, const L1MuDTTrackSegPhi *target_ts)
 load data into EUX More...
 
bool operator== (const L1MuDTEUX &) const
 equal operator More...
 
unsigned int quality () const
 return extrapolation quality More...
 
virtual void reset ()
 reset Extrapolator More...
 
bool result () const
 return extrapolation result More...
 
virtual void run (const edm::EventSetup &c)
 run Extrapolator More...
 
std::pair< const
L1MuDTTrackSegPhi *, const
L1MuDTTrackSegPhi * > 
ts () const
 return pointer to start and target track segment More...
 
virtual ~L1MuDTEUX ()
 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 sec_mod (int) const
 output sector numbers in the range -6 to +5 More...
 

Private Attributes

unsigned short int m_address
 
int m_id
 
unsigned short int m_quality
 
bool m_result
 
const L1MuDTSEUm_seu
 
const L1MuDTSectorProcessorm_sp
 
const L1MuDTTrackSegPhim_start
 
const L1MuDTTrackSegPhim_target
 
edm::ESHandle< L1MuDTTFParameterspars
 
edm::ESHandle< L1MuDTExtLuttheExtLUTs
 

Static Private Attributes

static unsigned short nbit_phi = 12
 
static unsigned short nbit_phib = 10
 
static int theExtFilter = 1
 

Detailed Description

Extrapolator:

The Extrapolator receives a start and a target track segment and performs the actual extrapolation

Date:
2008/11/28 10:30:51
Revision:
1.5

N. Neumeister CERN EP

Definition at line 50 of file L1MuDTEUX.h.

Constructor & Destructor Documentation

L1MuDTEUX::L1MuDTEUX ( const L1MuDTSectorProcessor sp,
const L1MuDTSEU seu,
int  id 
)

constructor

Definition at line 52 of file L1MuDTEUX.cc.

References setPrecision().

52  :
53  m_sp(sp), m_seu(seu), m_id(id),
54  m_result(false), m_quality(0), m_address(15),
55  m_start(0), m_target(0) {
56 
57  setPrecision();
58 
59 }
bool m_result
Definition: L1MuDTEUX.h:115
const L1MuDTSEU & m_seu
Definition: L1MuDTEUX.h:112
static void setPrecision()
set precision of phi and phib
Definition: L1MuDTEUX.cc:254
const L1MuDTTrackSegPhi * m_target
Definition: L1MuDTEUX.h:120
unsigned short int m_quality
Definition: L1MuDTEUX.h:116
const L1MuDTSectorProcessor & m_sp
Definition: L1MuDTEUX.h:111
int m_id
Definition: L1MuDTEUX.h:113
const L1MuDTTrackSegPhi * m_start
Definition: L1MuDTEUX.h:119
unsigned short int m_address
Definition: L1MuDTEUX.h:117
L1MuDTEUX::~L1MuDTEUX ( )
virtual

destructor

Definition at line 66 of file L1MuDTEUX.cc.

66 {}

Member Function Documentation

unsigned short int L1MuDTEUX::address ( ) const
inline

return extrapolation address (0-11) (address = 15 indicates negative ext. result)

Definition at line 102 of file L1MuDTEUX.h.

References m_address.

Referenced by operator==().

102 { return m_address; }
unsigned short int m_address
Definition: L1MuDTEUX.h:117
int L1MuDTEUX::id ( void  ) const
inline

return Extrapolation identifier

Definition at line 93 of file L1MuDTEUX.h.

References m_id.

Referenced by operator==().

93 { return m_id; }
int m_id
Definition: L1MuDTEUX.h:113
void L1MuDTEUX::load ( const L1MuDTTrackSegPhi start_ts,
const L1MuDTTrackSegPhi target_ts 
)

load data into EUX

Definition at line 192 of file L1MuDTEUX.cc.

References EX21, EX34, L1MuDTSEU::ext(), m_seu, m_start, and m_target.

193  {
194 
195  m_start = start_ts;
196  m_target = target_ts;
197 
198  // in case of EX34 and EX21 exchange start and target
199  if ( ( m_seu.ext() == EX34 ) || ( m_seu.ext() == EX21 ) ) {
200  m_start = target_ts;
201  m_target = start_ts;
202  }
203 
204 }
Extrapolation ext() const
return extrapolation type
Definition: L1MuDTSEU.h:82
const L1MuDTSEU & m_seu
Definition: L1MuDTEUX.h:112
const L1MuDTTrackSegPhi * m_target
Definition: L1MuDTEUX.h:120
const L1MuDTTrackSegPhi * m_start
Definition: L1MuDTEUX.h:119
bool L1MuDTEUX::operator== ( const L1MuDTEUX eux) const

equal operator

Definition at line 76 of file L1MuDTEUX.cc.

References address(), id(), m_address, m_id, m_quality, m_result, quality(), and result().

76  {
77 
78  if ( m_id != eux.id() ) return false;
79  if ( m_result != eux.result() ) return false;
80  if ( m_quality != eux.quality() ) return false;
81  if ( m_address != eux.address() ) return false;
82  return true;
83 
84 }
bool m_result
Definition: L1MuDTEUX.h:115
unsigned short int address() const
return extrapolation address (0-11) (address = 15 indicates negative ext. result) ...
Definition: L1MuDTEUX.h:102
unsigned short int m_quality
Definition: L1MuDTEUX.h:116
int id() const
return Extrapolation identifier
Definition: L1MuDTEUX.h:93
unsigned int quality() const
return extrapolation quality
Definition: L1MuDTEUX.h:99
int m_id
Definition: L1MuDTEUX.h:113
unsigned short int m_address
Definition: L1MuDTEUX.h:117
bool result() const
return extrapolation result
Definition: L1MuDTEUX.h:96
unsigned int L1MuDTEUX::quality ( void  ) const
inline

return extrapolation quality

Definition at line 99 of file L1MuDTEUX.h.

References m_quality.

Referenced by L1MuDTEUX::EUX_Comp::operator()(), and operator==().

99 { return m_quality; }
unsigned short int m_quality
Definition: L1MuDTEUX.h:116
void L1MuDTEUX::reset ( void  )
virtual

reset Extrapolator

Implements L1AbstractProcessor.

Definition at line 211 of file L1MuDTEUX.cc.

References m_address, m_quality, m_result, m_start, and m_target.

211  {
212 
213  m_result = false;
214  m_quality = 0;
215  m_address = 15;
216 
217  m_start = 0;
218  m_target = 0;
219 
220 }
bool m_result
Definition: L1MuDTEUX.h:115
const L1MuDTTrackSegPhi * m_target
Definition: L1MuDTEUX.h:120
unsigned short int m_quality
Definition: L1MuDTEUX.h:116
const L1MuDTTrackSegPhi * m_start
Definition: L1MuDTEUX.h:119
unsigned short int m_address
Definition: L1MuDTEUX.h:117
bool L1MuDTEUX::result ( ) const
inline

return extrapolation result

Definition at line 96 of file L1MuDTEUX.h.

References m_result.

Referenced by L1MuDTEUX::EUX_Comp::operator()(), and operator==().

96 { return m_result; }
bool m_result
Definition: L1MuDTEUX.h:115
void L1MuDTEUX::run ( const edm::EventSetup c)
virtual

run Extrapolator

Reimplemented from L1AbstractProcessor.

Definition at line 90 of file L1MuDTEUX.cc.

References abs, gather_cfg::cout, L1MuDTTFConfig::Debug(), diffTreeTool::diff, EX12, EX13, EX14, EX15, EX21, EX23, EX24, EX25, EX34, L1MuDTSEU::ext(), edm::EventSetup::get(), L1MuDTTFConfig::getopenLUTs(), L1MuDTSectorProcessor::id(), m_address, m_id, m_quality, m_result, m_seu, m_sp, m_start, m_target, nbit_phi, nbit_phib, evf::evtn::offset(), pars, L1MuDTTrackSegPhi::phi(), L1MuDTTrackSegPhi::phib(), L1MuDTTrackSegPhi::quality(), sec_mod(), L1MuDTSecProcId::sector(), L1MuDTTrackSegPhi::sector(), theExtLUTs, L1MuDTSecProcId::wheel(), and L1MuDTTrackSegPhi::wheel().

90  {
91 
92  c.get< L1MuDTExtLutRcd >().get( theExtLUTs );
93  c.get< L1MuDTTFParametersRcd >().get( pars );
94 
95  if ( L1MuDTTFConfig::Debug(4) ) cout << "Run EUX " << m_id << endl;
96  if ( L1MuDTTFConfig::Debug(4) ) cout << "start : " << *m_start << endl;
97  if ( L1MuDTTFConfig::Debug(4) ) cout << "target : " << *m_target << endl;
98 
99  if ( m_start == 0 || m_target == 0 ) {
100  if ( L1MuDTTFConfig::Debug(4) ) cout << "Error: EUX has no data loaded" << endl;
101  return;
102  }
103 
104  // start sector
105  int sector_st = m_start->sector();
106 
107  // target sector
108  int sector_ta = m_target->sector();
109 
110  // get index of look-up table
111  int lut_idx = m_seu.ext();
112  if ( abs(m_target->wheel()) == 3 ) {
113 
114  switch ( m_seu.ext() ) {
115  case EX13 : { lut_idx = EX15; break; }
116  case EX23 : { lut_idx = EX25; break; }
117  default : { lut_idx = m_seu.ext(); break; }
118  }
119 
120  }
121 
122  if ( L1MuDTTFConfig::Debug(5) ) cout << "EUX : using look-up table : "
123  << static_cast<Extrapolation>(lut_idx)
124  << endl;
125 
126  // Extrapolation TS quality filter
127  int qcut = 0;
128  if ( m_seu.ext() == EX12 ) qcut = pars->get_soc_qcut_st1(m_sp.id().wheel(), m_sp.id().sector());
129  if ( m_seu.ext() == EX13 ) qcut = pars->get_soc_qcut_st1(m_sp.id().wheel(), m_sp.id().sector());
130  if ( m_seu.ext() == EX14 ) qcut = pars->get_soc_qcut_st1(m_sp.id().wheel(), m_sp.id().sector());
131  if ( m_seu.ext() == EX21 ) qcut = pars->get_soc_qcut_st2(m_sp.id().wheel(), m_sp.id().sector());
132  if ( m_seu.ext() == EX23 ) qcut = pars->get_soc_qcut_st2(m_sp.id().wheel(), m_sp.id().sector());
133  if ( m_seu.ext() == EX24 ) qcut = pars->get_soc_qcut_st2(m_sp.id().wheel(), m_sp.id().sector());
134  if ( m_seu.ext() == EX34 ) qcut = pars->get_soc_qcut_st4(m_sp.id().wheel(), m_sp.id().sector());
135 
136  if ( m_start->quality() < qcut ) return;
137 
138  // calculate bit shift
139  int sh_phi = 12 - nbit_phi;
140  int sh_phib = 10 - nbit_phib;
141 
142  int phi_target = m_target->phi() >> sh_phi;
143  int phi_start = m_start->phi() >> sh_phi;
144  int phib_start = (m_start->phib() >> sh_phib) << sh_phib;
145  if ( phib_start < 0 ) phib_start += (1 << sh_phib) -1;
146 
147  // compute difference in phi
148  int diff = phi_target - phi_start;
149 
150  // get low and high values from look-up table
151  // and add offset (30 degrees ) for extrapolation to adjacent sector
152  int offset = -2144 >> sh_phi;
153  offset *= sec_mod(sector_ta - sector_st);
154  int low = theExtLUTs->getLow(lut_idx,phib_start );
155  int high = theExtLUTs->getHigh(lut_idx,phib_start );
156  if ( low < 0 ) low += (1 << sh_phi) - 1;
157  if ( high < 0 ) high += (1 << sh_phi) - 1;
158  low = (low >> sh_phi) + offset;
159  high = (high >> sh_phi) + offset;
160 
161  int phi_offset = phi_target - offset;
162  if ( ( lut_idx == EX34 ) || ( lut_idx == EX21 ) )
163  phi_offset = phi_start + offset;
164  if ( phi_offset >= (1 << (nbit_phi-1)) -1 ) return;
165  if ( phi_offset < -(1 << (nbit_phi-1)) +1 ) return;
166 
167  // is phi-difference within the extrapolation window?
168  bool openlut = pars->get_soc_openlut_extr(m_sp.id().wheel(), m_sp.id().sector());
169  if (( diff >= low && diff <= high ) || L1MuDTTFConfig::getopenLUTs() || openlut ) {
170  m_result = true;
171  int qual_st = m_start->quality();
172  int qual_ta = m_target->quality();
173  if ( m_seu.ext() == EX34 || m_seu.ext() == EX21 ) {
174  m_quality = ( qual_st == 7 ) ? 0 : qual_st + 1;
175  }
176  else {
177  m_quality = ( qual_ta == 7 ) ? 0 : qual_ta + 1;
178  }
179  m_address = m_id;
180  }
181 
182  if ( L1MuDTTFConfig::Debug(5) ) cout << "diff : " << low << " "
183  << diff << " " << high << " : "
184  << m_result << " " << endl;
185 
186 }
Extrapolation ext() const
return extrapolation type
Definition: L1MuDTSEU.h:82
int quality() const
return quality code
bool m_result
Definition: L1MuDTEUX.h:115
edm::ESHandle< L1MuDTExtLut > theExtLUTs
Definition: L1MuDTEUX.h:122
#define abs(x)
Definition: mlp_lapack.h:159
int phi() const
return phi
const L1MuDTSEU & m_seu
Definition: L1MuDTEUX.h:112
int sec_mod(int) const
output sector numbers in the range -6 to +5
Definition: L1MuDTEUX.cc:237
int sector() const
return sector number
static bool getopenLUTs()
int phib() const
return phib
static bool Debug()
const L1MuDTSecProcId & id() const
return Sector Processor identifier
unsigned int offset(bool)
Extrapolation
static unsigned short nbit_phi
Definition: L1MuDTEUX.h:124
static unsigned short nbit_phib
Definition: L1MuDTEUX.h:125
edm::ESHandle< L1MuDTTFParameters > pars
Definition: L1MuDTEUX.h:127
const T & get() const
Definition: EventSetup.h:55
const L1MuDTTrackSegPhi * m_target
Definition: L1MuDTEUX.h:120
unsigned short int m_quality
Definition: L1MuDTEUX.h:116
const L1MuDTSectorProcessor & m_sp
Definition: L1MuDTEUX.h:111
int sector() const
return sector
int wheel() const
return wheel
int wheel() const
return wheel number
tuple cout
Definition: gather_cfg.py:121
int m_id
Definition: L1MuDTEUX.h:113
const L1MuDTTrackSegPhi * m_start
Definition: L1MuDTEUX.h:119
unsigned short int m_address
Definition: L1MuDTEUX.h:117
int L1MuDTEUX::sec_mod ( int  sector) const
private

output sector numbers in the range -6 to +5

Definition at line 237 of file L1MuDTEUX.cc.

Referenced by run().

237  {
238 
239  int new_sector = sector%12;
240  if ( new_sector >= 6 )
241  new_sector = new_sector - 12;
242  if ( new_sector < -6 )
243  new_sector = new_sector + 12;
244 
245  return new_sector;
246 
247 }
void L1MuDTEUX::setPrecision ( )
static

set precision of phi and phib

Definition at line 254 of file L1MuDTEUX.cc.

References L1MuDTTFConfig::getExtTSFilter(), L1MuDTTFConfig::getNbitsExtPhi(), L1MuDTTFConfig::getNbitsExtPhib(), nbit_phi, nbit_phib, and theExtFilter.

Referenced by L1MuDTEUX().

254  {
255 
258 
260 
261 }
static int getNbitsExtPhi()
static int getNbitsExtPhib()
static int getExtTSFilter()
static int theExtFilter
Definition: L1MuDTEUX.h:123
static unsigned short nbit_phi
Definition: L1MuDTEUX.h:124
static unsigned short nbit_phib
Definition: L1MuDTEUX.h:125
pair< const L1MuDTTrackSegPhi *,const L1MuDTTrackSegPhi * > L1MuDTEUX::ts ( ) const

return pointer to start and target track segment

Definition at line 226 of file L1MuDTEUX.cc.

References m_start, and m_target.

226  {
227 
228  return pair<const L1MuDTTrackSegPhi*, const L1MuDTTrackSegPhi*>(m_start,m_target);
229 
230 }
const L1MuDTTrackSegPhi * m_target
Definition: L1MuDTEUX.h:120
const L1MuDTTrackSegPhi * m_start
Definition: L1MuDTEUX.h:119

Member Data Documentation

unsigned short int L1MuDTEUX::m_address
private

Definition at line 117 of file L1MuDTEUX.h.

Referenced by address(), operator==(), reset(), and run().

int L1MuDTEUX::m_id
private

Definition at line 113 of file L1MuDTEUX.h.

Referenced by id(), operator==(), and run().

unsigned short int L1MuDTEUX::m_quality
private

Definition at line 116 of file L1MuDTEUX.h.

Referenced by operator==(), quality(), reset(), and run().

bool L1MuDTEUX::m_result
private

Definition at line 115 of file L1MuDTEUX.h.

Referenced by operator==(), reset(), result(), and run().

const L1MuDTSEU& L1MuDTEUX::m_seu
private

Definition at line 112 of file L1MuDTEUX.h.

Referenced by load(), and run().

const L1MuDTSectorProcessor& L1MuDTEUX::m_sp
private

Definition at line 111 of file L1MuDTEUX.h.

Referenced by run().

const L1MuDTTrackSegPhi* L1MuDTEUX::m_start
private

Definition at line 119 of file L1MuDTEUX.h.

Referenced by load(), reset(), run(), and ts().

const L1MuDTTrackSegPhi* L1MuDTEUX::m_target
private

Definition at line 120 of file L1MuDTEUX.h.

Referenced by load(), reset(), run(), and ts().

unsigned short int L1MuDTEUX::nbit_phi = 12
staticprivate

Definition at line 124 of file L1MuDTEUX.h.

Referenced by run(), and setPrecision().

unsigned short int L1MuDTEUX::nbit_phib = 10
staticprivate

Definition at line 125 of file L1MuDTEUX.h.

Referenced by run(), and setPrecision().

edm::ESHandle< L1MuDTTFParameters > L1MuDTEUX::pars
private

Definition at line 127 of file L1MuDTEUX.h.

Referenced by run().

int L1MuDTEUX::theExtFilter = 1
staticprivate

Definition at line 123 of file L1MuDTEUX.h.

Referenced by setPrecision().

edm::ESHandle< L1MuDTExtLut > L1MuDTEUX::theExtLUTs
private

Definition at line 122 of file L1MuDTEUX.h.

Referenced by run().