CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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 ( 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 ( )

destructor

Definition at line 67 of file L1MuBMEUX.cc.

67 {}

Member Function Documentation

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
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
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 }
Extrapolation ext() const
return extrapolation type
Definition: L1MuBMSEU.h:78
const L1MuBMSEU & m_seu
Definition: L1MuBMEUX.h:109
const L1MuBMTrackSegPhi * m_target
Definition: L1MuBMEUX.h:117
const L1MuBMTrackSegPhi * m_start
Definition: L1MuBMEUX.h:116
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 }
int m_id
Definition: L1MuBMEUX.h:110
unsigned short int m_address
Definition: L1MuBMEUX.h:114
int id() const
return Extrapolation identifier
Definition: L1MuBMEUX.h:92
bool result() const
return extrapolation result
Definition: L1MuBMEUX.h:95
bool m_result
Definition: L1MuBMEUX.h:112
unsigned int quality() const
return extrapolation quality
Definition: L1MuBMEUX.h:98
unsigned short int address() const
return extrapolation address (0-11) (address = 15 indicates negative ext. result) ...
Definition: L1MuBMEUX.h:101
unsigned short int m_quality
Definition: L1MuBMEUX.h:113
unsigned int L1MuBMEUX::quality ( void  ) const
inline

return extrapolation quality

Definition at line 98 of file L1MuBMEUX.h.

References m_quality.

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

98 { return m_quality; }
unsigned short int m_quality
Definition: L1MuBMEUX.h:113
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
bool L1MuBMEUX::result ( ) const
inline

return extrapolation result

Definition at line 95 of file L1MuBMEUX.h.

References m_result.

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

95 { return m_result; }
bool m_result
Definition: L1MuBMEUX.h:112
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(), L1MuBMSectorProcessor::id(), L1TMuonBarrelParams::l1mudttfparams, 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 }
Extrapolation ext() const
return extrapolation type
Definition: L1MuBMSEU.h:78
const L1MuBMSEU & m_seu
Definition: L1MuBMEUX.h:109
L1MuBMLUTHandler * theExtLUTs
Definition: L1MuBMEUX.h:119
static bool getopenLUTs()
int wheel() const
return wheel
int m_id
Definition: L1MuBMEUX.h:110
unsigned short int m_address
Definition: L1MuBMEUX.h:114
int getLow(int ext_ind, int address) const
get low_value for a given address
const L1MuBMTrackSegPhi * m_target
Definition: L1MuBMEUX.h:117
L1MuDTTFParameters pars
Definition: L1MuBMEUX.h:124
int getHigh(int ext_ind, int address) const
get high_value for a given address
int sec_mod(int) const
output sector numbers in the range -6 to +5
Definition: L1MuBMEUX.cc:251
const L1MuBMTrackSegPhi * m_start
Definition: L1MuBMEUX.h:116
unsigned short int get_soc_qcut_st1(int wh, int sc) const
int sector() const
return sector number
int phib() const
return phib
const L1MuBMSectorProcessor & m_sp
Definition: L1MuBMEUX.h:108
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
Extrapolation
const L1MuBMSecProcId & id() const
return Sector Processor identifier
int phi() const
return phi
unsigned short int get_soc_qcut_st2(int wh, int sc) const
bool get_soc_openlut_extr(int wh, int sc) const
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
unsigned short int m_quality
Definition: L1MuBMEUX.h:113
tuple cout
Definition: gather_cfg.py:144
unsigned short int get_soc_qcut_st4(int wh, int sc) const
int sector() const
return sector
int quality() const
return quality code
int wheel() const
return wheel number
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 }
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

unsigned short int L1MuBMEUX::m_address
private

Definition at line 114 of file L1MuBMEUX.h.

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

int L1MuBMEUX::m_id
private

Definition at line 110 of file L1MuBMEUX.h.

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

unsigned short int L1MuBMEUX::m_quality
private

Definition at line 113 of file L1MuBMEUX.h.

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

bool L1MuBMEUX::m_result
private

Definition at line 112 of file L1MuBMEUX.h.

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

const L1MuBMSEU& L1MuBMEUX::m_seu
private

Definition at line 109 of file L1MuBMEUX.h.

Referenced by load(), and run().

const L1MuBMSectorProcessor& L1MuBMEUX::m_sp
private

Definition at line 108 of file L1MuBMEUX.h.

Referenced by run().

const L1MuBMTrackSegPhi* L1MuBMEUX::m_start
private

Definition at line 116 of file L1MuBMEUX.h.

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

const L1MuBMTrackSegPhi* L1MuBMEUX::m_target
private

Definition at line 117 of file L1MuBMEUX.h.

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

unsigned short const L1MuBMEUX::nbit_phi = 12
private

Definition at line 121 of file L1MuBMEUX.h.

Referenced by run().

unsigned short const L1MuBMEUX::nbit_phib = 10
private

Definition at line 122 of file L1MuBMEUX.h.

Referenced by run().

L1MuDTTFParameters L1MuBMEUX::pars
private

Definition at line 124 of file L1MuBMEUX.h.

Referenced by run().

int const L1MuBMEUX::theExtFilter = 1
private

Definition at line 120 of file L1MuBMEUX.h.

L1MuBMLUTHandler* L1MuBMEUX::theExtLUTs
private

Definition at line 119 of file L1MuBMEUX.h.

Referenced by run().