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) {
78 if (
m_id != eux.
id() )
return false;
115 case EX13 : { lut_idx =
EX15;
break; }
116 case EX23 : { lut_idx =
EX25;
break; }
117 default : { lut_idx =
m_seu.
ext();
break; }
144 int phib_start = (
m_start->
phib() >> sh_phib) << sh_phib;
145 if ( phib_start < 0 ) phib_start += (1 << sh_phib) -1;
148 int diff = phi_target - phi_start;
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;
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;
174 m_quality = ( qual_st == 7 ) ? 0 : qual_st + 1;
177 m_quality = ( qual_ta == 7 ) ? 0 : qual_ta + 1;
183 << diff <<
" " << high <<
" : "
226 pair<const L1MuDTTrackSegPhi* ,const L1MuDTTrackSegPhi*>
L1MuDTEUX::ts()
const {
228 return pair<const L1MuDTTrackSegPhi*, const L1MuDTTrackSegPhi*>(
m_start,
m_target);
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;
Extrapolation ext() const
return extrapolation type
int quality() const
return quality code
edm::ESHandle< L1MuDTExtLut > theExtLUTs
virtual void reset()
reset Extrapolator
int phi() const
return phi
static int getNbitsExtPhi()
void load(const L1MuDTTrackSegPhi *start_ts, const L1MuDTTrackSegPhi *target_ts)
load data into EUX
static int getNbitsExtPhib()
int sec_mod(int) const
output sector numbers in the range -6 to +5
static int getExtTSFilter()
int sector() const
return sector number
bool operator==(const L1MuDTEUX &) const
equal operator
static bool getopenLUTs()
virtual void run()
run processor logic
int phib() const
return phib
const L1MuDTSecProcId & id() const
return Sector Processor identifier
static void setPrecision()
set precision of phi and phib
unsigned int offset(bool)
virtual ~L1MuDTEUX()
destructor
static unsigned short nbit_phi
static unsigned short nbit_phib
edm::ESHandle< L1MuDTTFParameters > pars
unsigned short int address() const
return extrapolation address (0-11) (address = 15 indicates negative ext. result) ...
L1MuDTEUX(const L1MuDTSectorProcessor &sp, const L1MuDTSEU &seu, int id)
constructor
const L1MuDTTrackSegPhi * m_target
unsigned short int m_quality
const L1MuDTSectorProcessor & m_sp
std::pair< const L1MuDTTrackSegPhi *, const L1MuDTTrackSegPhi * > ts() const
return pointer to start and target track segment
int id() const
return Extrapolation identifier
int sector() const
return sector
int wheel() const
return wheel
int wheel() const
return wheel number
unsigned int quality() const
return extrapolation quality
const L1MuDTTrackSegPhi * m_start
unsigned short int m_address
bool result() const
return extrapolation result