CMS 3D CMS Logo

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

#include <CSCSectorReceiverMiniLUT.h>

Static Public Member Functions

static global_eta_data calcGlobalEtaMEMini (unsigned short endcap, unsigned short sector, unsigned short station, unsigned short subsector, unsigned theadd, const bool gangedME1a)
 
static global_phi_data calcGlobalPhiMBMini (unsigned short endcap, unsigned short sector, unsigned short subsector, unsigned theadd, const bool gangedME1a)
 
static global_phi_data calcGlobalPhiMEMini (unsigned short endcap, unsigned short sector, unsigned short station, unsigned short subsector, unsigned theadd, const bool gangedME1a)
 
static lclphidat calcLocalPhiMini (unsigned theadd, const bool gangedME1a)
 

Static Private Attributes

static const unsigned short int gbl_eta_bounds [2][6][4][2][4][9][2]
 
static const float gbl_eta_params [2][6][4][2][4][9][3]
 
static const float gbl_phi_mb_params [2][6][2][9][2]
 
static const float gbl_phi_me_params [2][6][4][2][9][2]
 
static const float lcl_phi_param0 [1<< 4]
 
static const float lcl_phi_param1 = 6.4
 

Detailed Description

Author
Brett Jackson

Provides a new way of defining the Lookup tables used by the core. Defines the lookup tables as parameterized functions in order to save on memory usage when compared to the current standard definitions of LUTs

Definition at line 15 of file CSCSectorReceiverMiniLUT.h.

Member Function Documentation

global_eta_data CSCSectorReceiverMiniLUT::calcGlobalEtaMEMini ( unsigned short  endcap,
unsigned short  sector,
unsigned short  station,
unsigned short  subsector,
unsigned  theadd,
const bool  gangedME1a 
)
static

Definition at line 50 of file CSCSectorReceiverMiniLUT.cc.

References data, gbl_eta_bounds, gbl_eta_params, log, and CSCConstants::MAX_NUM_WIREGROUPS.

Referenced by CSCSectorReceiverLUT::globalEtaME().

55  {
56  if (endcap < 1 || endcap > 2)
57  edm::LogWarning("CSCSectorReceiverMiniLUT")
58  << "+++ Value of endcap, " << endcap << ", is out of bounds, [1, 2] +++\n";
59  if (sector < 1 || sector > 6)
60  edm::LogWarning("CSCSectorReceiverMiniLUT")
61  << "+++ Value of sector, " << sector << ", is out of bounds, [1, 6] +++\n";
62  if (station < 1 || station > 4)
63  edm::LogWarning("CSCSectorReceiverMiniLUT")
64  << "+++ Value of station, " << station << ", is out of bounds, [1, 4] +++\n";
65 
66  gbletadat data(0);
67 
68  unsigned short int tcscid = ((theadd >> 15) & 0xf);
69  unsigned short int lclPhi = ((theadd >> 6) & 0x3);
70  unsigned short int WG = ((theadd >> 8) & 0x7f);
71  unsigned short int bend = ((theadd)&0x3f);
72 
73  int eta_temp = 999, eta_min = 999, eta_max = 999;
74 
75  if ((tcscid > 0) && (tcscid <= 12) && (WG < CSCConstants::MAX_NUM_WIREGROUPS)) {
76  unsigned short int cscid = (tcscid > 9) ? tcscid - 9 : tcscid;
77  if (station == 1) {
78  unsigned short int lclPhip = 0;
79  if (lclPhi == 1 || lclPhi == 3)
80  lclPhip = 2;
81  // use only eta correction for first and last third of ME1/1 chamber since local phi scaling changed
82  if (gangedME1a) {
83  eta_temp =
84  (gbl_eta_params[endcap - 1][sector - 1][station - 1][subsector - 1][lclPhi][cscid - 1][0] +
85  gbl_eta_params[endcap - 1][sector - 1][station - 1][subsector - 1][lclPhi][cscid - 1][1] *
86  log(gbl_eta_params[endcap - 1][sector - 1][station - 1][subsector - 1][lclPhi][cscid - 1][2] + WG));
87  eta_min = gbl_eta_bounds[endcap - 1][sector - 1][station - 1][subsector - 1][lclPhi][cscid - 1][0];
88  eta_max = gbl_eta_bounds[endcap - 1][sector - 1][station - 1][subsector - 1][lclPhi][cscid - 1][1];
89  } else { // DA and MDG, if unganged replace "lclPhi" index with "lclPhip"
90  eta_temp =
91  (gbl_eta_params[endcap - 1][sector - 1][station - 1][subsector - 1][lclPhip][cscid - 1][0] +
92  gbl_eta_params[endcap - 1][sector - 1][station - 1][subsector - 1][lclPhip][cscid - 1][1] *
93  log(gbl_eta_params[endcap - 1][sector - 1][station - 1][subsector - 1][lclPhip][cscid - 1][2] + WG));
94  eta_min = gbl_eta_bounds[endcap - 1][sector - 1][station - 1][subsector - 1][lclPhip][cscid - 1][0];
95  eta_max = gbl_eta_bounds[endcap - 1][sector - 1][station - 1][subsector - 1][lclPhip][cscid - 1][1];
96  }
97 
98  // add offset to ME+11a, subtract for ME-11a (wire tilt and strip direction)1
99  // only is ganged
100  if (gangedME1a && (tcscid < 4) && (lclPhi == 3)) {
101  if (endcap == 1)
102  eta_temp += 3;
103  else
104  eta_temp -= 3;
105  }
106  } else {
107  eta_temp = (gbl_eta_params[endcap - 1][sector - 1][station - 1][0][lclPhi][cscid - 1][0] +
108  gbl_eta_params[endcap - 1][sector - 1][station - 1][0][lclPhi][cscid - 1][1] *
109  log(gbl_eta_params[endcap - 1][sector - 1][station - 1][0][lclPhi][cscid - 1][2] + WG));
110  eta_min = gbl_eta_bounds[endcap - 1][sector - 1][station - 1][0][lclPhi][cscid - 1][0];
111  eta_max = gbl_eta_bounds[endcap - 1][sector - 1][station - 1][0][lclPhi][cscid - 1][1];
112  }
113  } else {
114  edm::LogWarning("CSCSectorReceiverMiniLUT")
115  << "+++ Value of cscid, " << tcscid << ", is out of bounds, [1, 9] -- or --"
116  << " Value of wire group, " << WG << ", exceeds max allowed, " << CSCConstants::MAX_NUM_WIREGROUPS << " +++\n";
117  }
118 
119  // protect from negative numbers. If the value of eta_temp is <0, set global eta to the minimum value
120  if ((eta_temp >= eta_min) && (eta_temp <= eta_max))
121  data.global_eta = eta_temp;
122  else if (eta_temp < eta_min)
123  data.global_eta = eta_min;
124  else
125  data.global_eta = eta_max;
126 
127  // data.global_bend = 0;
128  // Just pass through lowest 5 bits of local bend (drop 1 MSB)
129  data.global_bend = bend & 0x1F;
130 
131  return data;
132 }
static std::vector< std::string > checklist log
static const unsigned short int gbl_eta_bounds[2][6][4][2][4][9][2]
static const float gbl_eta_params[2][6][4][2][4][9][3]
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
Log< level::Warning, false > LogWarning
class global_eta_data gbletadat
global_phi_data CSCSectorReceiverMiniLUT::calcGlobalPhiMBMini ( unsigned short  endcap,
unsigned short  sector,
unsigned short  subsector,
unsigned  theadd,
const bool  gangedME1a 
)
static

Definition at line 217 of file CSCSectorReceiverMiniLUT.cc.

References data, gbl_phi_mb_params, CSCBitWidths::kGlobalPhiDataBitWidth, and CSCBitWidths::kLocalPhiDataBitWidth.

218  {
219  if (endcap < 1 || endcap > 2)
220  edm::LogWarning("CSCSectorReceiverMiniLUT")
221  << "+++ Value of endcap, " << endcap << ", is out of bounds, [1, 2] +++\n";
222  if (sector < 1 || sector > 6)
223  edm::LogWarning("CSCSectorReceiverMiniLUT")
224  << "+++ Value of sector, " << sector << ", is out of bounds, [1, 6] +++\n";
225 
226  gblphidat data(0);
227 
228  unsigned short int maxPhiL = 1 << CSCBitWidths::kLocalPhiDataBitWidth;
229  unsigned short int maxPhiG = 1 << CSCBitWidths::kGlobalPhiDataBitWidth;
230  unsigned short int cscid = ((theadd >> 15) & 0xf);
231  unsigned short int lclPhi = (theadd & 0x3ff);
232  if (!gangedME1a)
233  lclPhi = lclPhi / 0.625; // DA and MDG, recover old scaling of local phi
234 
235  if ((cscid <= 3) || (cscid >= 7))
236  maxPhiL =
237  maxPhiL *
238  (64. / 80); // currently a hack that is in place to handle the different number of strips in ME1/1 and ME1/3
239 
240  if ((cscid > 0) && (cscid <= 9)) {
241  if (lclPhi < maxPhiL)
242  data.global_phi = (gbl_phi_mb_params[endcap - 1][sector - 1][subsector - 1][cscid - 1][0] +
243  gbl_phi_mb_params[endcap - 1][sector - 1][subsector - 1][cscid - 1][1] * lclPhi);
244  else
245  data.global_phi = (gbl_phi_mb_params[endcap - 1][sector - 1][subsector - 1][cscid - 1][0] +
246  gbl_phi_mb_params[endcap - 1][sector - 1][subsector - 1][cscid - 1][1] * (maxPhiL - 1));
247  } else
248  edm::LogWarning("CSCSectorReceiverMiniLUT")
249  << "+++ Value of cscid, " << cscid << ", is out of bounds, [1, 9] +++\n";
250 
251  if (data.global_phi >= maxPhiG)
252  edm::LogWarning("CSCSectorReceiverMiniLUT")
253  << "+++ Value of global_phi, " << data.global_phi << ", exceeds max allowed, " << maxPhiG - 1 << " +++\n";
254 
255  if (data.global_phi >= maxPhiG)
256  edm::LogWarning("CSCSectorReceiverMiniLUT")
257  << "+++ Value of global_phi, " << data.global_phi << ", exceeds max allowed, " << maxPhiG - 1 << " +++\n";
258 
259  return data;
260 }
class global_phi_data gblphidat
static const float gbl_phi_mb_params[2][6][2][9][2]
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
Log< level::Warning, false > LogWarning
global_phi_data CSCSectorReceiverMiniLUT::calcGlobalPhiMEMini ( unsigned short  endcap,
unsigned short  sector,
unsigned short  station,
unsigned short  subsector,
unsigned  theadd,
const bool  gangedME1a 
)
static

Definition at line 134 of file CSCSectorReceiverMiniLUT.cc.

References data, gbl_phi_me_params, CSCBitWidths::kGlobalPhiDataBitWidth, CSCBitWidths::kLocalPhiDataBitWidth, CSCConstants::MAX_NUM_STRIPS_RUN1, and digitizers_cfi::strip.

Referenced by CSCSectorReceiverLUT::globalPhiME().

139  {
140  if (endcap < 1 || endcap > 2)
141  edm::LogWarning("CSCSectorReceiverMiniLUT")
142  << "+++ Value of endcap, " << endcap << ", is out of bounds, [1, 2] +++\n";
143  if (sector < 1 || sector > 6)
144  edm::LogWarning("CSCSectorReceiverMiniLUT")
145  << "+++ Value of sector, " << sector << ", is out of bounds, [1, 6] +++\n";
146  if (station < 1 || station > 4)
147  edm::LogWarning("CSCSectorReceiverMiniLUT")
148  << "+++ Value of station, " << station << ", is out of bounds, [1, 4] +++\n";
149 
150  gblphidat data(0);
151 
152  unsigned short int maxPhiL = 1 << CSCBitWidths::kLocalPhiDataBitWidth;
153  unsigned short int maxPhiG = 1 << CSCBitWidths::kGlobalPhiDataBitWidth;
154  unsigned short int cscid = ((theadd >> 15) & 0xf);
155  unsigned short int lclPhi = (theadd & 0x3ff);
156  if (!gangedME1a)
157  lclPhi = lclPhi / 0.625; // DA and MDG recover old scaling of local phi
158 
159  // 12/11/09
160  // GP et DA: how to identify the strip number and isolate and shift the localPhi value
161  const double binPhiL = static_cast<double>(maxPhiL) / (2 * CSCConstants::MAX_NUM_STRIPS_RUN1);
162 
163  int strip = static_cast<int>(lclPhi / binPhiL);
164  if (station == 1 && (cscid <= 3) &&
165  (strip >= 127 && strip < 224)) { // 160 --> 224, change range for ME1/1a acceptance, DA and MDG
166  // in this case need to redefine lclPhi in order to
167  // place local phi in the middle of the 5th CFEB
168  // and not on the first third of the CFEB as default
169 
170  gangedME1a
171  ? lclPhi = (strip - 127 + 31) * (4 * binPhiL / 3)
172  : lclPhi =
173  (strip - 127) *
174  (4 * binPhiL /
175  3); //DA and MDG remove offset to center of ME1/1a (no ganging), and reset ME1/1a strip number to start from 0, and scale 48 strips to match ME1/1b 64 strips
176  }
177  // end GP et DA
178 
179  if (station == 1 && ((cscid <= 3) || (cscid >= 7))) {
180  //if ( (strip >= 127 && strip < 160) || (cscid >= 10) ) // VK: the || (cscid >= 10) for unganged ME1a
181  // maxPhiL = maxPhiL*(48./80); // GP et DA: currently a hack that is in place to handle the different number of strips in ME1/1a and ME1/3
182  //else
183  maxPhiL =
184  maxPhiL *
185  (64. / 80); // currently a hack that is in place to handle the different number of strips in ME1/1 and ME1/3
186  }
187 
188  // VK: The the unganged ME1a hack
189  if (station == 1 && (cscid >= 10)) {
190  lclPhi = strip * (4 * binPhiL / 3);
191  cscid = cscid - 9; // back to normal 1-9 range
192  }
193  // end VK
194 
195  if ((cscid > 0) && (cscid <= 9)) {
196  if ((station == 1) && (lclPhi < maxPhiL))
197  data.global_phi = (gbl_phi_me_params[endcap - 1][sector - 1][station - 1][subsector - 1][cscid - 1][0] +
198  gbl_phi_me_params[endcap - 1][sector - 1][station - 1][subsector - 1][cscid - 1][1] * lclPhi);
199  else if ((station == 1) && (lclPhi >= maxPhiL))
200  data.global_phi =
201  (gbl_phi_me_params[endcap - 1][sector - 1][station - 1][subsector - 1][cscid - 1][0] +
202  gbl_phi_me_params[endcap - 1][sector - 1][station - 1][subsector - 1][cscid - 1][1] * (maxPhiL - 1));
203  else
204  data.global_phi = (gbl_phi_me_params[endcap - 1][sector - 1][station - 1][0][cscid - 1][0] +
205  gbl_phi_me_params[endcap - 1][sector - 1][station - 1][0][cscid - 1][1] * lclPhi);
206  } else
207  edm::LogWarning("CSCSectorReceiverMiniLUT")
208  << "+++ Value of cscid, " << cscid << ", is out of bounds, [1, 9] +++\n";
209 
210  if (data.global_phi >= maxPhiG)
211  edm::LogWarning("CSCSectorReceiverMiniLUT")
212  << "+++ Value of global_phi, " << data.global_phi << ", exceeds max allowed, " << maxPhiG - 1 << " +++\n";
213 
214  return data;
215 }
class global_phi_data gblphidat
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
static const float gbl_phi_me_params[2][6][4][2][9][2]
Log< level::Warning, false > LogWarning
lclphidat CSCSectorReceiverMiniLUT::calcLocalPhiMini ( unsigned  theadd,
const bool  gangedME1a 
)
static

Definition at line 18 of file CSCSectorReceiverMiniLUT.cc.

References data, CSCBitWidths::kLocalPhiDataBitWidth, lcl_phi_param0, lcl_phi_param1, CSCConstants::MAX_NUM_STRIPS_RUN1, CSCConstants::NUM_CLCT_PATTERNS, and digitizers_cfi::strip.

Referenced by CSCSectorReceiverLUT::localPhi().

18  {
19  // This method is ripped from CSCSectorReceverLUT.cc with minor changes
20 
22 
23  constexpr int maxPhiL = 1 << CSCBitWidths::kLocalPhiDataBitWidth;
24  unsigned short int pattern = ((theadd >> 8) & 0xf);
25  unsigned short int strip = (theadd & 0xff);
26 
27  if (strip < 2 * (CSCConstants::MAX_NUM_STRIPS_RUN1 * 7 / 5) &&
28  pattern <
30  NUM_CLCT_PATTERNS) { // MDG, DA and RW, for ME1 we have 7CFEBs and not just 5, so the num_strips can go up to 16 * 7 but only for ME1
31  data.phi_local = gangedME1a ? static_cast<unsigned>((lcl_phi_param0[pattern] + strip) * lcl_phi_param1)
32  : static_cast<unsigned>((lcl_phi_param0[pattern] + strip) * 0.625 * lcl_phi_param1);
33  //DA and MDG, rescale range of local phi so ME1/1b fits in 0-511
34  } else
35  edm::LogWarning("CSCSectorReceiverMiniLUT") << "+++ Value of strip, " << strip << ", exceeds max allowed, "
36  << 2 * CSCConstants::MAX_NUM_STRIPS_RUN1 - 1 << " +++\n";
37 
38  if (data.phi_local >= maxPhiL)
39  edm::LogWarning("CSCSectorReceiverMiniLUT")
40  << "+++ Value of phi_local, " << data.phi_local << ", exceeds max allowed, "
41  << CSCConstants::NUM_CLCT_PATTERNS - 1 << " +++\n";
42 
43  // data.phi_bend_local = 0;
44  // Just pass through all bits of pattern as bend angle (so 2 MSB unfilled)
45  data.phi_bend_local = pattern & 0x3F;
46 
47  return data;
48 }
static const float lcl_phi_param0[1<< 4]
class local_phi_data lclphidat
Data Types.
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
Log< level::Warning, false > LogWarning

Member Data Documentation

const unsigned short int CSCSectorReceiverMiniLUT::gbl_eta_bounds
staticprivate

Definition at line 40 of file CSCSectorReceiverMiniLUT.h.

Referenced by calcGlobalEtaMEMini().

const float CSCSectorReceiverMiniLUT::gbl_eta_params
staticprivate

Definition at line 38 of file CSCSectorReceiverMiniLUT.h.

Referenced by calcGlobalEtaMEMini().

const float CSCSectorReceiverMiniLUT::gbl_phi_mb_params
staticprivate

Definition at line 44 of file CSCSectorReceiverMiniLUT.h.

Referenced by calcGlobalPhiMBMini().

const float CSCSectorReceiverMiniLUT::gbl_phi_me_params
staticprivate

Definition at line 42 of file CSCSectorReceiverMiniLUT.h.

Referenced by calcGlobalPhiMEMini().

const float CSCSectorReceiverMiniLUT::lcl_phi_param0
staticprivate
Initial value:
= {
0.50, 0.50, -0.10, 1.10, -0.14, 1.14, 0.27, 0.73, 0.29, 0.71, 0.50, 0, 0, 0, 0, 0}

Definition at line 34 of file CSCSectorReceiverMiniLUT.h.

Referenced by calcLocalPhiMini().

const float CSCSectorReceiverMiniLUT::lcl_phi_param1 = 6.4
staticprivate

Definition at line 35 of file CSCSectorReceiverMiniLUT.h.

Referenced by calcLocalPhiMini().