51 m_sp(sp), m_seu(seu),
m_id(id),
52 m_result(
false), m_quality(0), m_address(15),
53 m_start(0), m_target(0),
77 if (
m_id != eux.
id() )
return false;
114 case EX13 : { lut_idx =
EX15;
break; }
115 case EX23 : { lut_idx =
EX25;
break; }
116 default : { lut_idx =
m_seu.
ext();
break; }
143 int phib_start = (
m_start->
phib() >> sh_phib) << sh_phib;
144 if ( phib_start < 0 ) phib_start += (1 << sh_phib) -1;
147 int diff = phi_target - phi_start;
151 int offset = -2144 >> sh_phi;
152 offset *=
sec_mod(sector_ta - sector_st);
153 int low =
theExtLUTs->getLow(lut_idx,phib_start );
154 int high =
theExtLUTs->getHigh(lut_idx,phib_start );
155 if ( low < 0 ) low += (1 << sh_phi) - 1;
156 if ( high < 0 ) high += (1 << sh_phi) - 1;
157 low = (low >> sh_phi) + offset;
158 high = (high >> sh_phi) + offset;
160 int phi_offset = phi_target -
offset;
161 if ( ( lut_idx ==
EX34 ) || ( lut_idx ==
EX21 ) )
162 phi_offset = phi_start +
offset;
163 if ( phi_offset >= (1 << (
nbit_phi-1)) -1 )
return;
164 if ( phi_offset < -(1 << (
nbit_phi-1)) +1 )
return;
173 m_quality = ( qual_st == 7 ) ? 0 : qual_st + 1;
176 m_quality = ( qual_ta == 7 ) ? 0 : qual_ta + 1;
182 << diff <<
" " << high <<
" : "
225 pair<const L1MuDTTrackSegPhi* ,const L1MuDTTrackSegPhi*>
L1MuDTEUX::ts()
const {
227 return pair<const L1MuDTTrackSegPhi*, const L1MuDTTrackSegPhi*>(
m_start,
m_target);
238 int new_sector = sector%12;
239 if ( new_sector >= 6 )
240 new_sector = new_sector - 12;
241 if ( new_sector < -6 )
242 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
void load(const L1MuDTTrackSegPhi *start_ts, const L1MuDTTrackSegPhi *target_ts)
load data into EUX
int sec_mod(int) const
output sector numbers in the range -6 to +5
int sector() const
return sector number
bool operator==(const L1MuDTEUX &) const
equal operator
static bool getopenLUTs()
unsigned short const nbit_phib
virtual void run()
run processor logic
unsigned short const nbit_phi
Abs< T >::type abs(const T &t)
int phib() const
return phib
const L1MuDTSecProcId & id() const
return Sector Processor identifier
virtual ~L1MuDTEUX()
destructor
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
volatile std::atomic< bool > shutdown_flag false
unsigned int quality() const
return extrapolation quality
const L1MuDTTrackSegPhi * m_start
unsigned short int m_address
bool result() const
return extrapolation result