CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Private Member Functions | Private Attributes
L1MuBMEUX Class Reference

#include <L1MuBMEUX.h>

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...
 
 L1MuBMEUX (const L1MuBMSectorProcessor &sp, const L1MuBMSEU &seu, int id)
 constructor More...
 
void load (const L1MuBMTrackSegPhi *start_ts, const L1MuBMTrackSegPhi *target_ts)
 load data into EUX More...
 
bool operator== (const L1MuBMEUX &) const
 equal operator More...
 
unsigned int quality () const
 return extrapolation quality More...
 
void reset ()
 reset Extrapolator More...
 
bool result () const
 return extrapolation result More...
 
void run (const L1TMuonBarrelParams &c)
 run Extrapolator More...
 
std::pair< const L1MuBMTrackSegPhi *, const L1MuBMTrackSegPhi * > ts () const
 return pointer to start and target track segment More...
 
 ~L1MuBMEUX ()
 destructor 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 L1MuBMSEUm_seu
 
const L1MuBMSectorProcessorm_sp
 
const L1MuBMTrackSegPhim_start
 
const L1MuBMTrackSegPhim_target
 
unsigned short const nbit_phi = 12
 
unsigned short const nbit_phib = 10
 
L1MuDTTFParameters pars
 
int const theExtFilter = 1
 
L1MuBMLUTHandlertheExtLUTs
 

Detailed Description

Extrapolator:

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

N. Neumeister CERN EP

Definition at line 50 of file L1MuBMEUX.h.

Constructor & Destructor Documentation

◆ L1MuBMEUX()

L1MuBMEUX::L1MuBMEUX ( const L1MuBMSectorProcessor sp,
const L1MuBMSEU seu,
int  id 
)

constructor

Definition at line 50 of file L1MuBMEUX.cc.

51  : m_sp(sp),
52  m_seu(seu),
53  m_id(id),
54  m_result(false),
55  m_quality(0),
56  m_address(15),
57  m_start(nullptr),
58  m_target(nullptr),
const L1MuBMSEU & m_seu
Definition: L1MuBMEUX.h:109
static int getNbitsExtPhi()
static int getNbitsExtPhib()
static int getExtTSFilter()
int m_id
Definition: L1MuBMEUX.h:110
unsigned short int m_address
Definition: L1MuBMEUX.h:114
const L1MuBMTrackSegPhi * m_target
Definition: L1MuBMEUX.h:117
const L1MuBMTrackSegPhi * m_start
Definition: L1MuBMEUX.h:116
const L1MuBMSectorProcessor & m_sp
Definition: L1MuBMEUX.h:108
int const theExtFilter
Definition: L1MuBMEUX.h:120
bool m_result
Definition: L1MuBMEUX.h:112
unsigned short const nbit_phi
Definition: L1MuBMEUX.h:121
unsigned short const nbit_phib
Definition: L1MuBMEUX.h:122
unsigned short int m_quality
Definition: L1MuBMEUX.h:113

◆ ~L1MuBMEUX()

L1MuBMEUX::~L1MuBMEUX ( )

destructor

Definition at line 67 of file L1MuBMEUX.cc.

67 {}

Member Function Documentation

◆ address()

unsigned short int L1MuBMEUX::address ( ) const
inline

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

Definition at line 101 of file L1MuBMEUX.h.

References m_address.

Referenced by operator==().

101 { return m_address; }
unsigned short int m_address
Definition: L1MuBMEUX.h:114

◆ id()

int L1MuBMEUX::id ( void  ) const
inline

return Extrapolation identifier

Definition at line 92 of file L1MuBMEUX.h.

References m_id.

Referenced by operator==().

92 { return m_id; }
int m_id
Definition: L1MuBMEUX.h:110

◆ load()

void L1MuBMEUX::load ( const L1MuBMTrackSegPhi start_ts,
const L1MuBMTrackSegPhi target_ts 
)

load data into EUX

Definition at line 216 of file L1MuBMEUX.cc.

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

216  {
217  m_start = start_ts;
218  m_target = target_ts;
219 
220  // in case of EX34 and EX21 exchange start and target
221  if ((m_seu.ext() == EX34) || (m_seu.ext() == EX21)) {
222  m_start = target_ts;
223  m_target = start_ts;
224  }
225 }
const L1MuBMSEU & m_seu
Definition: L1MuBMEUX.h:109
const L1MuBMTrackSegPhi * m_target
Definition: L1MuBMEUX.h:117
const L1MuBMTrackSegPhi * m_start
Definition: L1MuBMEUX.h:116
Extrapolation ext() const
return extrapolation type
Definition: L1MuBMSEU.h:78

◆ operator==()

bool L1MuBMEUX::operator== ( const L1MuBMEUX eux) const

equal operator

Definition at line 76 of file L1MuBMEUX.cc.

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

76  {
77  if (m_id != eux.id())
78  return false;
79  if (m_result != eux.result())
80  return false;
81  if (m_quality != eux.quality())
82  return false;
83  if (m_address != eux.address())
84  return false;
85  return true;
86 }
unsigned int quality() const
return extrapolation quality
Definition: L1MuBMEUX.h:98
int m_id
Definition: L1MuBMEUX.h:110
unsigned short int m_address
Definition: L1MuBMEUX.h:114
bool m_result
Definition: L1MuBMEUX.h:112
bool result() const
return extrapolation result
Definition: L1MuBMEUX.h:95
unsigned short int m_quality
Definition: L1MuBMEUX.h:113
unsigned short int address() const
return extrapolation address (0-11) (address = 15 indicates negative ext. result) ...
Definition: L1MuBMEUX.h:101
int id() const
return Extrapolation identifier
Definition: L1MuBMEUX.h:92

◆ quality()

unsigned int L1MuBMEUX::quality ( void  ) const
inline

return extrapolation quality

Definition at line 98 of file L1MuBMEUX.h.

References m_quality.

Referenced by operator==().

98 { return m_quality; }
unsigned short int m_quality
Definition: L1MuBMEUX.h:113

◆ reset()

void L1MuBMEUX::reset ( void  )

reset Extrapolator

Definition at line 231 of file L1MuBMEUX.cc.

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

231  {
232  m_result = false;
233  m_quality = 0;
234  m_address = 15;
235 
236  m_start = nullptr;
237  m_target = nullptr;
238 }
unsigned short int m_address
Definition: L1MuBMEUX.h:114
const L1MuBMTrackSegPhi * m_target
Definition: L1MuBMEUX.h:117
const L1MuBMTrackSegPhi * m_start
Definition: L1MuBMEUX.h:116
bool m_result
Definition: L1MuBMEUX.h:112
unsigned short int m_quality
Definition: L1MuBMEUX.h:113

◆ result()

bool L1MuBMEUX::result ( ) const
inline

return extrapolation result

Definition at line 95 of file L1MuBMEUX.h.

References m_result.

Referenced by operator==().

95 { return m_result; }
bool m_result
Definition: L1MuBMEUX.h:112

◆ run()

void L1MuBMEUX::run ( const L1TMuonBarrelParams c)

run Extrapolator

< ext look-up tables

Definition at line 91 of file L1MuBMEUX.cc.

References funct::abs(), gather_cfg::cout, L1MuBMTFConfig::Debug(), change_name::diff, EX12, EX13, EX14, EX15, EX21, EX23, EX24, EX25, EX34, L1MuBMSEU::ext(), L1MuDTTFParameters::get_soc_openlut_extr(), L1MuDTTFParameters::get_soc_qcut_st1(), L1MuDTTFParameters::get_soc_qcut_st2(), L1MuDTTFParameters::get_soc_qcut_st4(), L1MuBMLUTHandler::getHigh(), L1MuBMLUTHandler::getLow(), L1MuBMTFConfig::getopenLUTs(), LaserClient_cfi::high, L1MuBMSectorProcessor::id(), L1TMuonBarrelParams::l1mudttfparams, LaserClient_cfi::low, m_address, m_id, m_quality, m_result, m_seu, m_sp, m_start, m_target, nbit_phi, nbit_phib, hltrates_dqm_sourceclient-live_cfg::offset, pars, L1MuBMTrackSegPhi::phi(), L1MuBMTrackSegPhi::phib(), L1MuBMTrackSegPhi::quality(), sec_mod(), L1MuBMSecProcId::sector(), L1MuBMTrackSegPhi::sector(), theExtLUTs, L1MuBMSecProcId::wheel(), and L1MuBMTrackSegPhi::wheel().

91  {
92  pars = bmtfParams.l1mudttfparams;
93  theExtLUTs = new L1MuBMLUTHandler(bmtfParams);
94 
95  if (L1MuBMTFConfig::Debug(4))
96  cout << "Run EUX " << m_id << endl;
97  if (L1MuBMTFConfig::Debug(4))
98  cout << "start : " << *m_start << endl;
99  if (L1MuBMTFConfig::Debug(4))
100  cout << "target : " << *m_target << endl;
101 
102  if (m_start == nullptr || m_target == nullptr) {
103  if (L1MuBMTFConfig::Debug(4))
104  cout << "Error: EUX has no data loaded" << endl;
105  delete theExtLUTs;
106  return;
107  }
108 
109  // start sector
110  int sector_st = m_start->sector();
111 
112  // target sector
113  int sector_ta = m_target->sector();
114 
115  // get index of look-up table
116  int lut_idx = m_seu.ext();
117  if (abs(m_target->wheel()) == 3) {
118  switch (m_seu.ext()) {
119  case EX13: {
120  lut_idx = EX15;
121  break;
122  }
123  case EX23: {
124  lut_idx = EX25;
125  break;
126  }
127  default: {
128  lut_idx = m_seu.ext();
129  break;
130  }
131  }
132  }
133 
134  if (L1MuBMTFConfig::Debug(5))
135  cout << "EUX : using look-up table : " << static_cast<Extrapolation>(lut_idx) << endl;
136 
137  // Extrapolation TS quality filter
138  int qcut = 0;
139  if (m_seu.ext() == EX12)
140  qcut = pars.get_soc_qcut_st1(m_sp.id().wheel(), m_sp.id().sector());
141  if (m_seu.ext() == EX13)
142  qcut = pars.get_soc_qcut_st1(m_sp.id().wheel(), m_sp.id().sector());
143  if (m_seu.ext() == EX14)
144  qcut = pars.get_soc_qcut_st1(m_sp.id().wheel(), m_sp.id().sector());
145  if (m_seu.ext() == EX21)
146  qcut = pars.get_soc_qcut_st2(m_sp.id().wheel(), m_sp.id().sector());
147  if (m_seu.ext() == EX23)
148  qcut = pars.get_soc_qcut_st2(m_sp.id().wheel(), m_sp.id().sector());
149  if (m_seu.ext() == EX24)
150  qcut = pars.get_soc_qcut_st2(m_sp.id().wheel(), m_sp.id().sector());
151  if (m_seu.ext() == EX34)
152  qcut = pars.get_soc_qcut_st4(m_sp.id().wheel(), m_sp.id().sector());
153 
154  if (m_start->quality() < qcut) {
155  delete theExtLUTs;
156  return;
157  }
158  // calculate bit shift
159  int sh_phi = 12 - nbit_phi;
160  int sh_phib = 10 - nbit_phib;
161 
162  int phi_target = m_target->phi() >> sh_phi;
163  int phi_start = m_start->phi() >> sh_phi;
164  int phib_start = (m_start->phib() >> sh_phib) << sh_phib;
165  if (phib_start < 0)
166  phib_start += (1 << sh_phib) - 1;
167 
168  // compute difference in phi
169  int diff = phi_target - phi_start;
170 
171  // get low and high values from look-up table
172  // and add offset (30 degrees ) for extrapolation to adjacent sector
173  int offset = -2144 >> sh_phi;
174  offset *= sec_mod(sector_ta - sector_st);
175  int low = theExtLUTs->getLow(lut_idx, phib_start);
176  int high = theExtLUTs->getHigh(lut_idx, phib_start);
177  if (low < 0)
178  low += (1 << sh_phi) - 1;
179  if (high < 0)
180  high += (1 << sh_phi) - 1;
181  low = (low >> sh_phi) + offset;
182  high = (high >> sh_phi) + offset;
183 
184  int phi_offset = phi_target - offset;
185  if ((lut_idx == EX34) || (lut_idx == EX21))
186  phi_offset = phi_start + offset;
187  if (phi_offset >= (1 << (nbit_phi - 1)) - 1) {
188  delete theExtLUTs;
189  return;
190  }
191  if (phi_offset < -(1 << (nbit_phi - 1)) + 1) {
192  delete theExtLUTs;
193  return;
194  }
195  // is phi-difference within the extrapolation window?
196  bool openlut = pars.get_soc_openlut_extr(m_sp.id().wheel(), m_sp.id().sector());
197  if ((diff >= low && diff <= high) || L1MuBMTFConfig::getopenLUTs() || openlut) {
198  m_result = true;
199  int qual_st = m_start->quality();
200  int qual_ta = m_target->quality();
201  if (m_seu.ext() == EX34 || m_seu.ext() == EX21) {
202  m_quality = (qual_st == 7) ? 0 : qual_st + 1;
203  } else {
204  m_quality = (qual_ta == 7) ? 0 : qual_ta + 1;
205  }
206  m_address = m_id;
207  }
208  delete theExtLUTs;
209  if (L1MuBMTFConfig::Debug(5))
210  cout << "diff : " << low << " " << diff << " " << high << " : " << m_result << " " << endl;
211 }
const L1MuBMSEU & m_seu
Definition: L1MuBMEUX.h:109
L1MuBMLUTHandler * theExtLUTs
Definition: L1MuBMEUX.h:119
const L1MuBMSecProcId & id() const
return Sector Processor identifier
static bool getopenLUTs()
int m_id
Definition: L1MuBMEUX.h:110
unsigned short int m_address
Definition: L1MuBMEUX.h:114
int wheel() const
return wheel
int wheel() const
return wheel number
const L1MuBMTrackSegPhi * m_target
Definition: L1MuBMEUX.h:117
L1MuDTTFParameters pars
Definition: L1MuBMEUX.h:124
unsigned short int get_soc_qcut_st2(int wh, int sc) const
unsigned short int get_soc_qcut_st1(int wh, int sc) const
const L1MuBMTrackSegPhi * m_start
Definition: L1MuBMEUX.h:116
unsigned short int get_soc_qcut_st4(int wh, int sc) const
int quality() const
return quality code
const L1MuBMSectorProcessor & m_sp
Definition: L1MuBMEUX.h:108
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
int phib() const
return phib
Extrapolation
int getHigh(int ext_ind, int address) const
get high_value for a given address
int sector() const
return sector number
int getLow(int ext_ind, int address) const
get low_value for a given address
int sec_mod(int) const
output sector numbers in the range -6 to +5
Definition: L1MuBMEUX.cc:251
bool m_result
Definition: L1MuBMEUX.h:112
static bool Debug()
unsigned short const nbit_phi
Definition: L1MuBMEUX.h:121
unsigned short const nbit_phib
Definition: L1MuBMEUX.h:122
int sector() const
return sector
int phi() const
return phi
unsigned short int m_quality
Definition: L1MuBMEUX.h:113
Extrapolation ext() const
return extrapolation type
Definition: L1MuBMSEU.h:78
bool get_soc_openlut_extr(int wh, int sc) const

◆ sec_mod()

int L1MuBMEUX::sec_mod ( int  sector) const
private

output sector numbers in the range -6 to +5

Definition at line 251 of file L1MuBMEUX.cc.

Referenced by run().

251  {
252  int new_sector = sector % 12;
253  if (new_sector >= 6)
254  new_sector = new_sector - 12;
255  if (new_sector < -6)
256  new_sector = new_sector + 12;
257 
258  return new_sector;
259 }

◆ ts()

pair< const L1MuBMTrackSegPhi *, const L1MuBMTrackSegPhi * > L1MuBMEUX::ts ( ) const

return pointer to start and target track segment

Definition at line 243 of file L1MuBMEUX.cc.

References m_start, and m_target.

243  {
244  return pair<const L1MuBMTrackSegPhi*, const L1MuBMTrackSegPhi*>(m_start, m_target);
245 }
const L1MuBMTrackSegPhi * m_target
Definition: L1MuBMEUX.h:117
const L1MuBMTrackSegPhi * m_start
Definition: L1MuBMEUX.h:116

Member Data Documentation

◆ m_address

unsigned short int L1MuBMEUX::m_address
private

Definition at line 114 of file L1MuBMEUX.h.

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

◆ m_id

int L1MuBMEUX::m_id
private

Definition at line 110 of file L1MuBMEUX.h.

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

◆ m_quality

unsigned short int L1MuBMEUX::m_quality
private

Definition at line 113 of file L1MuBMEUX.h.

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

◆ m_result

bool L1MuBMEUX::m_result
private

Definition at line 112 of file L1MuBMEUX.h.

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

◆ m_seu

const L1MuBMSEU& L1MuBMEUX::m_seu
private

Definition at line 109 of file L1MuBMEUX.h.

Referenced by load(), and run().

◆ m_sp

const L1MuBMSectorProcessor& L1MuBMEUX::m_sp
private

Definition at line 108 of file L1MuBMEUX.h.

Referenced by run().

◆ m_start

const L1MuBMTrackSegPhi* L1MuBMEUX::m_start
private

Definition at line 116 of file L1MuBMEUX.h.

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

◆ m_target

const L1MuBMTrackSegPhi* L1MuBMEUX::m_target
private

Definition at line 117 of file L1MuBMEUX.h.

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

◆ nbit_phi

unsigned short const L1MuBMEUX::nbit_phi = 12
private

Definition at line 121 of file L1MuBMEUX.h.

Referenced by run().

◆ nbit_phib

unsigned short const L1MuBMEUX::nbit_phib = 10
private

Definition at line 122 of file L1MuBMEUX.h.

Referenced by run().

◆ pars

L1MuDTTFParameters L1MuBMEUX::pars
private

Definition at line 124 of file L1MuBMEUX.h.

Referenced by run().

◆ theExtFilter

int const L1MuBMEUX::theExtFilter = 1
private

Definition at line 120 of file L1MuBMEUX.h.

◆ theExtLUTs

L1MuBMLUTHandler* L1MuBMEUX::theExtLUTs
private

Definition at line 119 of file L1MuBMEUX.h.

Referenced by run().