CMS 3D CMS Logo

CSCSectorReceiverLUT.cc
Go to the documentation of this file.
8 
13 
15 
17 
18 #include <fstream>
19 #include <cstring>
20 
23 
25  int endcap, int sector, int subsector, int station, const edm::ParameterSet& pset, bool TMB07)
26  : _endcap(endcap), _sector(sector), _subsector(subsector), _station(station), isTMB07(TMB07) {
27  LUTsFromFile = pset.getUntrackedParameter<bool>("ReadLUTs", false);
28  useMiniLUTs = pset.getUntrackedParameter<bool>("UseMiniLUTs", true);
29  isBinary = pset.getUntrackedParameter<bool>("Binary", false);
30 
31  me_global_eta = nullptr;
32  me_global_phi = nullptr;
33  mb_global_phi = nullptr;
34  if (LUTsFromFile && !useMiniLUTs) {
35  me_lcl_phi_file = pset.getUntrackedParameter<edm::FileInPath>(
36  "LocalPhiLUT",
37  edm::FileInPath(std::string("L1Trigger/CSCTrackFinder/LUTs/LocalPhiLUT" +
38  (isBinary ? std::string(".bin") : std::string(".dat")))));
39  me_gbl_phi_file = pset.getUntrackedParameter<edm::FileInPath>(
40  "GlobalPhiLUTME",
41  edm::FileInPath((std::string("L1Trigger/CSCTrackFinder/LUTs/GlobalPhiME") + encodeFileIndex() +
42  (isBinary ? std::string(".bin") : std::string(".dat")))));
43  if (station == 1)
44  mb_gbl_phi_file = pset.getUntrackedParameter<edm::FileInPath>(
45  "GlobalPhiLUTMB",
46  edm::FileInPath((std::string("L1Trigger/CSCTrackFinder/LUTs/GlobalPhiMB") + encodeFileIndex() +
47  (isBinary ? std::string(".bin") : std::string(".dat")))));
48  me_gbl_eta_file = pset.getUntrackedParameter<edm::FileInPath>(
49  "GlobalEtaLUTME",
50  edm::FileInPath((std::string("L1Trigger/CSCTrackFinder/LUTs/GlobalEtaME") + encodeFileIndex() +
51  (isBinary ? std::string(".bin") : std::string(".dat")))));
53  }
54 }
55 
57  : _endcap(lut._endcap),
58  _sector(lut._sector),
59  _subsector(lut._subsector),
60  _station(lut._station),
61  me_lcl_phi_file(lut.me_lcl_phi_file),
62  me_gbl_phi_file(lut.me_gbl_phi_file),
63  mb_gbl_phi_file(lut.mb_gbl_phi_file),
64  me_gbl_eta_file(lut.me_gbl_eta_file),
65  LUTsFromFile(lut.LUTsFromFile),
66  isBinary(lut.isBinary) {
67  if (lut.mb_global_phi) {
70  } else
71  mb_global_phi = nullptr;
72  if (lut.me_global_phi) {
75  } else
76  me_global_phi = nullptr;
77  if (lut.me_global_eta) {
80  } else
81  me_global_eta = nullptr;
82 }
83 
85  if (this != &lut) {
86  _endcap = lut._endcap;
87  _sector = lut._sector;
88  _subsector = lut._subsector;
89  _station = lut._station;
95  isBinary = lut.isBinary;
96 
97  if (lut.mb_global_phi) {
100  } else
101  mb_global_phi = nullptr;
102 
103  if (lut.me_global_phi) {
106  } else
107  me_global_phi = nullptr;
108 
109  if (lut.me_global_eta) {
112  } else
113  me_global_eta = nullptr;
114  }
115  return *this;
116 }
117 
119  if (me_lcl_phi_loaded) {
120  delete me_lcl_phi;
121  me_lcl_phi = nullptr;
122  me_lcl_phi_loaded = false;
123  }
124  if (me_global_eta) {
125  delete me_global_eta;
126  me_global_eta = nullptr;
127  }
128  if (me_global_phi) {
129  delete me_global_phi;
130  me_global_phi = nullptr;
131  }
132  if (mb_global_phi) {
133  delete mb_global_phi;
134  mb_global_phi = nullptr;
135  }
136 }
137 
139  lclphidat data;
140 
141  constexpr int maxPhiL = 1 << CSCBitWidths::kLocalPhiDataBitWidth;
142  double binPhiL = static_cast<double>(maxPhiL) / (2. * CSCConstants::MAX_NUM_STRIPS);
143 
144  double patternOffset;
145 
146  patternOffset = CSCPatternLUT::get2007Position((theadd.pattern_type << 3) + theadd.clct_pattern);
147 
148  // The phiL value stored is for the center of the half-/di-strip.
149  if (theadd.strip < 2 * CSCConstants::MAX_NUM_STRIPS)
150  if (theadd.pattern_type == 1 || isTMB07) // if halfstrip (Note: no distrips in TMB 2007 patterns)
151  data.phi_local = static_cast<unsigned>((0.5 + theadd.strip + patternOffset) * binPhiL);
152  else // if distrip
153  data.phi_local = static_cast<unsigned>((2 + theadd.strip + 4. * patternOffset) * binPhiL);
154  else {
155  throw cms::Exception("CSCSectorReceiverLUT") << "+++ Value of strip, " << theadd.strip << ", exceeds max allowed, "
156  << 2 * CSCConstants::MAX_NUM_STRIPS - 1 << " +++\n";
157  }
158 
159  if (data.phi_local >= maxPhiL) {
160  throw cms::Exception("CSCSectorReceiverLUT")
161  << "+++ Value of phi_local, " << data.phi_local << ", exceeds max allowed, " << maxPhiL - 1 << " +++\n";
162  }
163 
164  LogDebug("CSCSectorReceiver") << "endcap = " << _endcap << " station = " << _station << " maxPhiL = " << maxPhiL
165  << " binPhiL = " << binPhiL;
166  LogDebug("CSCSectorReceiver") << "strip # " << theadd.strip << " hs/ds = " << theadd.pattern_type
167  << " pattern = " << theadd.clct_pattern << " offset = " << patternOffset
168  << " phi_local = " << data.phi_local;
169 
171  data.phi_bend_local = 0;
172 
173  return data; //return LUT result
174 }
175 
177  // read data in from a file... Add this later.
178 }
179 
181  const int strip, const int pattern, const int quality, const int lr, const bool gangedME1a) const {
182  lclphiadd theadd;
183 
184  theadd.strip = strip;
185  theadd.clct_pattern = pattern & 0x7;
186  theadd.pattern_type = (pattern & 0x8) >> 3;
187  theadd.quality = quality;
188  theadd.lr = lr;
189  theadd.spare = 0;
190 
191  return localPhi(theadd, gangedME1a);
192 }
193 
194 lclphidat CSCSectorReceiverLUT::localPhi(unsigned address, const bool gangedME1a) const {
196  lclphiadd theadd(address);
197 
198  if (useMiniLUTs && isTMB07) {
200  } else if (LUTsFromFile)
201  result = me_lcl_phi[address];
202  else
203  result = calcLocalPhi(theadd);
204 
205  return result;
206 }
207 
210 
211  if (useMiniLUTs && isTMB07) {
213  } else if (LUTsFromFile)
214  result = me_lcl_phi[address.toint()];
215  else
216  result = calcLocalPhi(address);
217 
218  return result;
219 }
220 
222  const unsigned& strip,
223  const unsigned& wire_group) const {
224  double result = 0.0;
225  //CSCLayerGeometry* thegeom;
226  //LocalPoint lp;
227  //GlobalPoint gp;
228 
229  try {
230  //thegeom = const_cast<CSCLayerGeometry*>(thelayer->geometry());
231  //lp = thegeom->stripWireGroupIntersection(strip, wire_group);
232  //gp = thelayer->surface().toGlobal(lp);
233  result = thelayer->centerOfStrip(strip).phi(); //gp.phi();
234 
235  if (result < 0.)
236  result += 2. * M_PI;
237  } catch (edm::Exception& e) {
238  LogDebug("CSCSectorReceiverLUT|getGlobalPhiValue") << e.what();
239  }
240 
241  return result;
242 }
243 
245  gblphidat result(0);
246  const CSCChamber* thechamber = nullptr;
247  const CSCLayer* thelayer = nullptr;
248  const CSCLayerGeometry* layergeom = nullptr;
249  int cscid = address.cscid;
250  unsigned wire_group = address.wire_group;
251  unsigned local_phi = address.phi_local;
252  const double sectorOffset =
254 
255  //Number of global phi units per radian.
256  constexpr int maxPhiG = 1 << CSCBitWidths::kGlobalPhiDataBitWidth;
257  double binPhiG = static_cast<double>(maxPhiG) / CSCTFConstants::SECTOR_RAD;
258 
259  // We will use these to convert the local phi into radians.
260  constexpr unsigned int maxPhiL = 1 << CSCBitWidths::kLocalPhiDataBitWidth;
261  const double binPhiL = static_cast<double>(maxPhiL) / (2. * CSCConstants::MAX_NUM_STRIPS);
262 
263  if (cscid < CSCTriggerNumbering::minTriggerCscId()) {
264  edm::LogWarning("CSCSectorReceiverLUT|getGlobalPhiValue")
265  << " warning: cscId " << cscid << " is out of bounds [" << CSCTriggerNumbering::minTriggerCscId() << "-"
267  throw cms::Exception("CSCSectorReceiverLUT")
268  << "+++ Value of CSC ID, " << cscid << ", is out of bounds [" << CSCTriggerNumbering::minTriggerCscId() << "-"
269  << CSCTriggerNumbering::maxTriggerCscId() << "] +++\n";
270  }
271 
272  if (cscid > CSCTriggerNumbering::maxTriggerCscId()) {
273  edm::LogWarning("CSCSectorReceiverLUT|getGlobalPhiValue")
274  << " warning: cscId " << cscid << " is out of bounds [" << CSCTriggerNumbering::minTriggerCscId() << "-"
276  throw cms::Exception("CSCSectorReceiverLUT")
277  << "+++ Value of CSC ID, " << cscid << ", is out of bounds [" << CSCTriggerNumbering::minTriggerCscId() << "-"
278  << CSCTriggerNumbering::maxTriggerCscId() << "] +++\n";
279  }
280 
281  if (wire_group >= 1 << 5) {
282  edm::LogWarning("CSCSectorReceiverLUT|getGlobalPhiValue")
283  << "warning: wire_group" << wire_group << " is out of bounds (1-" << ((1 << 5) - 1) << "]\n";
284  throw cms::Exception("CSCSectorReceiverLUT")
285  << "+++ Value of wire_group, " << wire_group << ", is out of bounds (1-" << ((1 << 5) - 1) << "] +++\n";
286  }
287 
288  if (local_phi >= maxPhiL) {
289  edm::LogWarning("CSCSectorReceiverLUT|getGlobalPhiValue")
290  << "warning: local_phi" << local_phi << " is out of bounds [0-" << maxPhiL << ")\n";
291  throw cms::Exception("CSCSectorReceiverLUT")
292  << "+++ Value of local_phi, " << local_phi << ", is out of bounds [0-, " << maxPhiL << ") +++\n";
293  }
294 
295  try {
298  CSCDetId detid(_endcap, _station, ring, chid, 0);
299  thechamber = const_cast<const CSCChamber*>(csc_g->chamber(detid));
300  if (thechamber) {
301  layergeom = thechamber->layer(CSCConstants::KEY_CLCT_LAYER)->geometry();
302  thelayer = thechamber->layer(CSCConstants::KEY_CLCT_LAYER);
303  const int nStrips = layergeom->numberOfStrips();
304  // PhiL is the strip number converted into some units between 0 and
305  // 1023. When we did the conversion in fillLocalPhiTable(), we did
306  // not know for which chamber we do it (and, therefore, how many strips
307  // it has), and always used the maximum possible number of strips
308  // per chamber, MAX_NUM_STRIPS=80. Now, since we know the chamber id
309  // and how many strips the chamber has, we can re-adjust the scale.
310  //const double scale = static_cast<double>(CSCConstants::MAX_NUM_STRIPS)/nStrips;
311 
312  int strip = 0, halfstrip = 0;
313 
314  halfstrip = static_cast<int>(local_phi / binPhiL);
315  strip = halfstrip / 2;
316 
317  // Find the phi width of the chamber and the position of its "left"
318  // (lower phi) edge (both in radians).
319  // Phi positions of the centers of the first and of the last strips
320  // in the chamber.
321  const double phi_f = getGlobalPhiValue(thelayer, 1, wire_group);
322  const double phi_l = getGlobalPhiValue(thelayer, nStrips, wire_group);
323  // Phi widths of the half-strips at both ends of the chamber;
324  // surprisingly, they are not the same.
325  const double hsWidth_f = fabs(getGlobalPhiValue(thelayer, 2, wire_group) - phi_f) / 2.;
326  const double hsWidth_l = fabs(phi_l - getGlobalPhiValue(thelayer, nStrips - 1, wire_group)) / 2.;
327 
328  // The "natural" match between the strips and phi values -- when
329  // a larger strip number corresponds to a larger phi value, i.e. strips
330  // are counted clockwise if we look at them from the inside of the
331  // detector -- is reversed for some stations. At the moment, these
332  // are stations 3 and 4 of the 1st endcap, and stations 1 and 2 of
333  // the 2nd endcap. Instead of using
334  // if ((theEndcap == 1 && theStation <= 2) ||
335  // (theEndcap == 2 && theStation >= 3)),
336  // we get the order from the phi values of the first and the last strip
337  // in a chamber, just in case the counting scheme changes in the future.
338  // Once we know how the strips are counted, we can go from the middle
339  // of the strips to their outer edges.
340  bool clockwiseOrder;
341  double leftEdge, rightEdge;
342  if (fabs(phi_f - phi_l) < M_PI) {
343  if (phi_f < phi_l)
344  clockwiseOrder = true;
345  else
346  clockwiseOrder = false;
347  } else { // the chamber crosses the phi = pi boundary
348  if (phi_f < phi_l)
349  clockwiseOrder = false;
350  else
351  clockwiseOrder = true;
352  }
353  if (clockwiseOrder) {
354  leftEdge = phi_f - hsWidth_f;
355  rightEdge = phi_l + hsWidth_l;
356  } else {
357  leftEdge = phi_l - hsWidth_l;
358  rightEdge = phi_f + hsWidth_f;
359  }
360  if (fabs(phi_f - phi_l) >= M_PI) {
361  rightEdge += 2. * M_PI;
362  }
363  //double chamberWidth = (rightEdge - leftEdge);
364 
365  // Chamber offset, relative to the edge of the sector.
366  //double chamberOffset = leftEdge - sectorOffset;
367  //if (chamberOffset < -M_PI) chamberOffset += 2*M_PI;
368 
369  double temp_phi = 0.0, strip_phi = 0.0, delta_phi = 0.0;
370  double distFromHalfStripCenter = 0.0, halfstripWidth = 0.0;
371 
372  if (strip < nStrips) {
373  // Approximate distance from the center of the half-strip to the center
374  // of this phil bin, in units of half-strip width.
375  distFromHalfStripCenter = (local_phi + 0.5) / binPhiL - halfstrip - 0.5;
376  // Half-strip width (in rad), calculated as the half-distance between
377  // the adjacent strips. Since in the current ORCA implementation
378  // the half-strip width changes from strip to strip, base the choice
379  // of the adjacent strip on the half-strip number.
380  if ((halfstrip % 2 == 0 && halfstrip != 0) || halfstrip == 2 * nStrips - 1) {
381  halfstripWidth = fabs(getGlobalPhiValue(thelayer, strip + 1, wire_group) -
382  getGlobalPhiValue(thelayer, strip, wire_group)) /
383  2.;
384  } else {
385  halfstripWidth = fabs(getGlobalPhiValue(thelayer, strip + 1, wire_group) -
386  getGlobalPhiValue(thelayer, strip + 2, wire_group)) /
387  2.;
388  }
389  // Correction for the strips crossing the 180 degree boundary.
390  if (halfstripWidth > M_PI / 2.)
391  halfstripWidth = M_PI - halfstripWidth;
392  // Phi at the center of the strip.
393  strip_phi = getGlobalPhiValue(thelayer, strip + 1, wire_group);
394  // Distance between the center of the strip and the phil position.
395  delta_phi = halfstripWidth * (((halfstrip % 2) - 0.5) + distFromHalfStripCenter);
396  if (clockwiseOrder)
397  temp_phi = strip_phi + delta_phi;
398  else
399  temp_phi = strip_phi - delta_phi;
400  } else {
401  // PhiL values that do not have corresponding strips (the chamber
402  // has less than 80 strips assumed in fillLocalPhi). It does not
403  // really matter what we do with these values; at the moment, just
404  // set them to the phis of the edges of the chamber.
405  if (clockwiseOrder)
406  temp_phi = rightEdge;
407  else
408  temp_phi = leftEdge;
409  }
410 
411  // Finally, subtract the sector offset and convert to the scale of
412  // the global phi.
413 
414  temp_phi -= sectorOffset;
415 
416  if (temp_phi < 0.)
417  temp_phi += 2. * M_PI;
418 
419  temp_phi *= binPhiG;
420 
421  if (temp_phi < 0.) {
422  result.global_phi = 0;
423  } else if (temp_phi >= maxPhiG) {
424  result.global_phi = maxPhiG - 1;
425  } else {
426  result.global_phi = static_cast<unsigned short>(temp_phi);
427  }
428 
429  LogDebug("CSCSectorReceiverLUT") << "local_phi = " << local_phi << " halfstrip = " << halfstrip
430  << " strip = " << strip
431  << " distFromHalfStripCenter = " << distFromHalfStripCenter
432  << " halfstripWidth = " << halfstripWidth
433  << " strip phi = " << strip_phi / (M_PI / 180.)
434  << " temp_phi = " << temp_phi * CSCTFConstants::SECTOR_DEG / maxPhiG
435  << " global_phi = " << result.global_phi << " "
436  << result.global_phi * CSCTFConstants::SECTOR_DEG / maxPhiG;
437  }
438  } catch (edm::Exception& e) {
439  edm::LogError("CSCSectorReceiverLUT|getGlobalPhiValue") << e.what();
440  }
441 
442  return result;
443 }
444 
445 gblphidat CSCSectorReceiverLUT::globalPhiME(int phi_local, int wire_group, int cscid, const bool gangedME1a) const {
447  gblphiadd theadd;
448  theadd.phi_local = phi_local;
449  theadd.wire_group = ((1 << 5) - 1) & (wire_group >> 2); // want 2-7 of wg
450  theadd.cscid = cscid;
451 
452  if (useMiniLUTs && isTMB07)
454  _endcap, _sector, _station, _subsector, theadd.toint(), gangedME1a);
455  else if (LUTsFromFile)
456  result = me_global_phi[theadd.toint()];
457  else
458  result = calcGlobalPhiME(theadd);
459 
460  return result;
461 }
462 
463 gblphidat CSCSectorReceiverLUT::globalPhiME(unsigned address, const bool gangedME1a) const {
465 
466  if (useMiniLUTs && isTMB07)
468  else if (LUTsFromFile)
469  result = me_global_phi[address];
470  else
471  result = calcGlobalPhiME(gblphiadd(address));
472 
473  return result;
474 }
475 
478 
479  if (useMiniLUTs && isTMB07)
481  _endcap, _sector, _station, _subsector, address.toint(), gangedME1a);
482  else if (LUTsFromFile)
483  result = me_global_phi[address.toint()];
484  else
485  result = calcGlobalPhiME(address);
486 
487  return result;
488 }
489 
491  gblphidat dtlut;
492 
493  // The following method was ripped from D. Holmes' LUT conversion program
494  // modifications from Darin and GP
495  int GlobalPhiMin = (_subsector == 1) ? 0x42 : 0x800; // (0.999023 : 31 in degrees)
496  int GlobalPhiMax = (_subsector == 1) ? 0x7ff : 0xfbd; // (30.985 : 60.986 in degrees)
497  double GlobalPhiShift = (1.0 * GlobalPhiMin + (GlobalPhiMax - GlobalPhiMin) / 2.0);
498 
499  double dt_out = static_cast<double>(csclut.global_phi) - GlobalPhiShift;
500 
501  // these numbers are 62 deg / 1 rad (CSC phi scale vs. DT phi scale)
502  dt_out = (dt_out / 1982) * 2145; //CSC phi 62 degrees; DT phi 57.3 degrees
503 
504  if (dt_out >= 0) // msb != 1
505  {
506  dtlut.global_phi = 0x7ff & static_cast<unsigned>(dt_out);
507  } else {
508  dtlut.global_phi = static_cast<unsigned>(-dt_out);
509  dtlut.global_phi = ~dtlut.global_phi;
510  dtlut.global_phi |= 0x800;
511  }
512 
513  return dtlut;
514 }
515 
516 gblphidat CSCSectorReceiverLUT::globalPhiMB(int phi_local, int wire_group, int cscid, const bool gangedME1a) const {
517  gblphiadd address;
519 
520  address.cscid = cscid;
521  address.wire_group = ((1 << 5) - 1) & (wire_group >> 2);
522  address.phi_local = phi_local;
523 
524  // comment for now
525  // if(useMiniLUTs && isTMB07) result = CSCSectorReceiverMiniLUT::calcGlobalPhiMBMini(_endcap, _sector, _subsector, address.toint());
526  //else
527  if (LUTsFromFile)
528  result = mb_global_phi[address.toint()];
529  else
531 
532  return result;
533 }
534 
535 gblphidat CSCSectorReceiverLUT::globalPhiMB(unsigned address, const bool gangedME1a) const {
537  gblphiadd theadd(address);
538 
539  //if(useMiniLUTs && isTMB07) result = CSCSectorReceiverMiniLUT::calcGlobalPhiMBMini(_endcap, _sector, _subsector, address);
540  //else
541  if (LUTsFromFile)
542  result = mb_global_phi[theadd.toint()];
543  else
545 
546  return result;
547 }
548 
551 
552  //if(useMiniLUTs && isTMB07) result = CSCSectorReceiverMiniLUT::calcGlobalPhiMBMini(_endcap, _sector, _subsector, address.toint());
553  //else
554  if (LUTsFromFile)
555  result = mb_global_phi[address.toint()];
556  else
558 
559  return result;
560 }
561 
562 double CSCSectorReceiverLUT::getGlobalEtaValue(const unsigned& thecscid,
563  const unsigned& thewire_group,
564  const unsigned& thephi_local) const {
565  double result = 0.0;
566  unsigned wire_group = thewire_group;
567  int cscid = thecscid;
568  unsigned phi_local = thephi_local;
569 
570  // Flag to be set if one wants to apply phi corrections ONLY in ME1/1.
571  // Turn it into a parameter?
572  bool me1ir_only = false;
573 
575  edm::LogWarning("CSCSectorReceiverLUT|getEtaValue")
576  << " warning: cscId " << cscid << " is out of bounds [1-" << CSCTriggerNumbering::maxTriggerCscId() << "]\n";
578  }
579 
580  CSCLayerGeometry* layerGeom = nullptr;
581  const unsigned numBins = 1 << 2; // 4 local phi bins
582 
583  if (phi_local > numBins - 1) {
584  edm::LogWarning("CSCSectorReceiverLUT|getEtaValue")
585  << "warning: phiL " << phi_local << " is out of bounds [0-" << numBins - 1 << "]\n";
586  phi_local = numBins - 1;
587  }
588  try {
591  CSCDetId detid(_endcap, _station, ring, chid, 0);
592  const CSCChamber* thechamber = const_cast<const CSCChamber*>(csc_g->chamber(detid));
593  if (thechamber) {
594  layerGeom = const_cast<CSCLayerGeometry*>(thechamber->layer(CSCConstants::KEY_ALCT_LAYER)->geometry());
595  const unsigned nWireGroups = layerGeom->numberOfWireGroups();
596 
597  // Check wire group numbers; expect them to be counted from 0, as in
598  // CorrelatedLCTDigi class.
599  if (wire_group >= nWireGroups) {
600  edm::LogWarning("CSCSectorReceiverLUT|getEtaValue")
601  << "warning: wireGroup " << wire_group << " is out of bounds [0-" << nWireGroups << ")\n";
602  wire_group = nWireGroups - 1;
603  }
604  // Convert to [1; nWireGroups] range used in geometry methods.
605  wire_group += 1;
606 
607  // If me1ir_only is set, apply phi corrections only in ME1/1.
608  if (me1ir_only && (_station != 1 || CSCTriggerNumbering::ringFromTriggerLabels(_station, cscid) != 1)) {
609  result = thechamber->layer(CSCConstants::KEY_ALCT_LAYER)->centerOfWireGroup(wire_group).eta();
610  } else {
611  const unsigned nStrips = layerGeom->numberOfStrips();
612  const unsigned nStripsPerBin = CSCConstants::MAX_NUM_STRIPS / numBins;
617  // Check that no strips will be left out.
618  if (nStrips % numBins != 0 || CSCConstants::MAX_NUM_STRIPS % numBins != 0)
619  edm::LogWarning("CSCSectorReceiverLUT")
620  << "getGlobalEtaValue warning: number of strips " << nStrips << " (" << CSCConstants::MAX_NUM_STRIPS
621  << ") is not divisible by numBins " << numBins << " Station " << _station << " sector " << _sector
622  << " subsector " << _subsector << " cscid " << cscid << "\n";
623 
624  unsigned maxStripPrevBin = 0, maxStripThisBin = 0;
625  unsigned correctionStrip;
626  LocalPoint lPoint;
627  GlobalPoint gPoint;
628  // Bins phi_local and find the the middle strip for each bin.
629  maxStripThisBin = nStripsPerBin * (phi_local + 1);
630  if (maxStripThisBin <= nStrips) {
631  correctionStrip = nStripsPerBin / 2 * (2 * phi_local + 1);
632  } else {
633  // If the actual number of strips in the chamber is smaller than
634  // the number of strips corresponding to the right edge of this phi
635  // local bin, we take the middle strip between number of strips
636  // at the left edge of the bin and the actual number of strips.
637  maxStripPrevBin = nStripsPerBin * phi_local;
638  correctionStrip = (nStrips + maxStripPrevBin) / 2;
639  }
640 
641  lPoint = layerGeom->stripWireGroupIntersection(correctionStrip, wire_group);
642  gPoint = thechamber->layer(CSCConstants::KEY_ALCT_LAYER)->surface().toGlobal(lPoint);
643 
644  // end calc of eta correction.
645  result = gPoint.eta();
646  }
647  }
648  } catch (cms::Exception& e) {
649  LogDebug("CSCSectorReceiver|OutofBoundInput") << e.what();
650  }
651 
652  return std::fabs(result);
653 }
654 
657  double float_eta = getGlobalEtaValue(address.cscid, address.wire_group, address.phi_local);
658  unsigned int_eta = 0;
659  unsigned bend_global = 0; // not filled yet... will change when it is.
661  const unsigned me12EtaCut = 56;
662 
663  if ((float_eta < CSCTFConstants::minEta) || (float_eta >= CSCTFConstants::maxEta)) {
664  edm::LogWarning("CSCSectorReceiverLUT:OutOfBounds")
665  << "CSCSectorReceiverLUT warning: float_eta = " << float_eta << " minEta = " << CSCTFConstants::minEta
666  << " maxEta = " << CSCTFConstants::maxEta << " station " << _station << " sector " << _sector << " chamber "
667  << address.cscid << " wire group " << address.wire_group;
668 
669  throw cms::Exception("CSCSectorReceiverLUT")
670  << "+++ Value of CSC ID, " << float_eta << ", is out of bounds [" << CSCTFConstants::minEta << "-"
671  << CSCTFConstants::maxEta << ") +++\n";
672 
673  //if (float_eta < CSCTFConstants::minEta)
674  //result.global_eta = 0;
675  //else if (float_eta >= CSCTFConstants::maxEta)
676  //result.global_eta = CSCTFConstants::etaBins - 1;
677  } else {
678  float_eta -= CSCTFConstants::minEta;
679  float_eta = float_eta / etaPerBin;
680  int_eta = static_cast<unsigned>(float_eta);
681  /* Commented until I find out its use.
682  // Fine-tune eta boundary between DT and CSC.
683  if ((intEta == L1MuCSCSetup::CscEtaStart() && (L1MuCSCSetup::CscEtaStartCorr() > 0.) ) ||
684  (intEta == L1MuCSCSetup::CscEtaStart() - 1 && (L1MuCSCSetup::CscEtaStartCorr() < 0.) ) ) {
685  bitEta = (thisEta-minEta-L1MuCSCSetup::CscEtaStartCorr())/EtaPerBin;
686  intEta = static_cast<int>(bitEta);
687  }
688  */
689  if (_station == 1 && address.cscid >= static_cast<unsigned>(CSCTriggerNumbering::minTriggerCscId()) &&
690  address.cscid <= static_cast<unsigned>(CSCTriggerNumbering::maxTriggerCscId())) {
691  unsigned ring = CSCTriggerNumbering::ringFromTriggerLabels(_station, address.cscid);
692 
693  if (ring == 1 && int_eta < me12EtaCut) {
694  int_eta = me12EtaCut;
695  } else if (ring == 2 && int_eta >= me12EtaCut) {
696  int_eta = me12EtaCut - 1;
697  }
698  }
699  result.global_eta = int_eta;
700  }
701  result.global_bend = bend_global;
702 
703  return result;
704 }
705 
707  int tphi_bend, int tphi_local, int twire_group, int tcscid, const bool gangedME1a) const {
709  gbletaadd theadd;
710 
711  theadd.phi_bend = tphi_bend;
712  theadd.phi_local = (tphi_local >> (CSCBitWidths::kLocalPhiDataBitWidth - 2)) & 0x3; // want 2 msb of local phi
713  theadd.wire_group = twire_group;
714  theadd.cscid = tcscid;
715  if (useMiniLUTs && isTMB07)
717  _endcap, _sector, _station, _subsector, theadd.toint(), gangedME1a);
718  else if (LUTsFromFile)
719  result = me_global_eta[theadd.toint()];
720  else
721  result = calcGlobalEtaME(theadd);
722 
723  return result;
724 }
725 
726 gbletadat CSCSectorReceiverLUT::globalEtaME(unsigned address, const bool gangedME1a) const {
728  gbletaadd theadd(address);
729 
730  if (useMiniLUTs && isTMB07)
732  else if (LUTsFromFile)
733  result = me_global_eta[address];
734  else
735  result = calcGlobalEtaME(theadd);
736  return result;
737 }
738 
741 
742  if (useMiniLUTs && isTMB07)
744  _endcap, _sector, _station, _subsector, address.toint(), gangedME1a);
745  else if (LUTsFromFile)
746  result = me_global_eta[address.toint()];
747  else
748  result = calcGlobalEtaME(address);
749  return result;
750 }
751 
753  std::string fileName = "";
754  if (_station == 1) {
755  if (_subsector == 1)
756  fileName += "1a";
757  if (_subsector == 2)
758  fileName += "1b";
759  } else if (_station == 2)
760  fileName += "2";
761  else if (_station == 3)
762  fileName += "3";
763  else if (_station == 4)
764  fileName += "4";
765  fileName += "End";
766  if (_endcap == 1)
767  fileName += "1";
768  else
769  fileName += "2";
770  fileName += "Sec";
771  if (_sector == 1)
772  fileName += "1";
773  else if (_sector == 2)
774  fileName += "2";
775  else if (_sector == 3)
776  fileName += "3";
777  else if (_sector == 4)
778  fileName += "4";
779  else if (_sector == 5)
780  fileName += "5";
781  else if (_sector == 6)
782  fileName += "6";
783  fileName += "LUT";
784  return fileName;
785 }
786 
788  if (!me_lcl_phi_loaded) {
791  std::ifstream LocalPhiLUT;
792 
793  edm::LogInfo("CSCSectorReceiverLUT") << "Loading SR LUT: " << fName;
794 
795  if (isBinary) {
796  LocalPhiLUT.open(fName.c_str(), std::ios::binary);
797  LocalPhiLUT.seekg(0, std::ios::end);
798  int length = LocalPhiLUT.tellg();
799  if (length == (1 << CSCBitWidths::kLocalPhiAddressWidth) * sizeof(short)) {
800  LocalPhiLUT.seekg(0, std::ios::beg);
801  LocalPhiLUT.read(reinterpret_cast<char*>(me_lcl_phi), length);
802  LocalPhiLUT.close();
803  } else
804  edm::LogError("CSCSectorReceiverLUT") << "File " << fName << " is incorrect size!";
805  LocalPhiLUT.close();
806  } else {
807  LocalPhiLUT.open(fName.c_str());
808  unsigned i = 0;
809  unsigned short temp = 0;
810  while (!LocalPhiLUT.eof() && i < 1 << CSCBitWidths::kLocalPhiAddressWidth) {
811  LocalPhiLUT >> temp;
812  me_lcl_phi[i++] = (*reinterpret_cast<lclphidat*>(&temp));
813  }
814  LocalPhiLUT.close();
815  }
816  }
817  if (!me_global_phi) {
820  std::ifstream GlobalPhiLUT;
821 
822  edm::LogInfo("CSCSectorReceiverLUT") << "Loading SR LUT: " << fName;
823 
824  if (isBinary) {
825  GlobalPhiLUT.open(fName.c_str(), std::ios::binary);
826  GlobalPhiLUT.seekg(0, std::ios::end);
827  int length = GlobalPhiLUT.tellg();
828  if (length == (1 << CSCBitWidths::kGlobalPhiAddressWidth) * sizeof(short)) {
829  GlobalPhiLUT.seekg(0, std::ios::beg);
830  GlobalPhiLUT.read(reinterpret_cast<char*>(me_global_phi), length);
831  } else
832  edm::LogError("CSCSectorReceiverLUT") << "File " << fName << " is incorrect size!";
833  GlobalPhiLUT.close();
834  } else {
835  GlobalPhiLUT.open(fName.c_str());
836  unsigned short temp = 0;
837  unsigned i = 0;
838  while (!GlobalPhiLUT.eof() && i < 1 << CSCBitWidths::kGlobalPhiAddressWidth) {
839  GlobalPhiLUT >> temp;
840  me_global_phi[i++] = (*reinterpret_cast<gblphidat*>(&temp));
841  }
842  GlobalPhiLUT.close();
843  }
844  }
845  if (!mb_global_phi && _station == 1) // MB lut only in station one.
846  {
849  std::ifstream GlobalPhiLUT;
850 
851  edm::LogInfo("CSCSectorReceiverLUT") << "Loading SR LUT: " << fName;
852 
853  if (isBinary) {
854  GlobalPhiLUT.open(fName.c_str(), std::ios::binary);
855  GlobalPhiLUT.seekg(0, std::ios::end);
856  int length = GlobalPhiLUT.tellg();
857  if (length == (1 << CSCBitWidths::kGlobalPhiAddressWidth) * sizeof(short)) {
858  GlobalPhiLUT.seekg(0, std::ios::beg);
859  GlobalPhiLUT.read(reinterpret_cast<char*>(mb_global_phi), length);
860  } else
861  edm::LogError("CSCSectorReceiverLUT") << "File " << fName << " is incorrect size!";
862  GlobalPhiLUT.close();
863  } else {
864  GlobalPhiLUT.open(fName.c_str());
865  unsigned short temp = 0;
866  unsigned i = 0;
867  while (!GlobalPhiLUT.eof() && i < 1 << CSCBitWidths::kGlobalPhiAddressWidth) {
868  GlobalPhiLUT >> temp;
869  mb_global_phi[i++] = (*reinterpret_cast<gblphidat*>(&temp));
870  }
871  GlobalPhiLUT.close();
872  }
873  }
874  if (!me_global_eta) {
877  std::ifstream GlobalEtaLUT;
878 
879  edm::LogInfo("CSCSectorReceiverLUT") << "Loading SR LUT: " << fName;
880 
881  if (isBinary) {
882  GlobalEtaLUT.open(fName.c_str(), std::ios::binary);
883  GlobalEtaLUT.seekg(0, std::ios::end);
884  int length = GlobalEtaLUT.tellg();
885  if (length == (1 << CSCBitWidths::kGlobalEtaAddressWidth) * sizeof(short)) {
886  GlobalEtaLUT.seekg(0, std::ios::beg);
887  GlobalEtaLUT.read(reinterpret_cast<char*>(me_global_eta), length);
888  } else
889  edm::LogError("CSCSectorReceiverLUT") << "File " << fName << " is incorrect size!";
890  GlobalEtaLUT.close();
891  } else {
892  GlobalEtaLUT.open(fName.c_str());
893  unsigned short temp = 0;
894  unsigned i = 0;
895  while (!GlobalEtaLUT.eof() && i < 1 << CSCBitWidths::kGlobalEtaAddressWidth) {
896  GlobalEtaLUT >> temp;
897  me_global_eta[i++] = (*reinterpret_cast<gbletadat*>(&temp));
898  }
899  GlobalEtaLUT.close();
900  }
901  }
902 }
CSCBitWidths.h
HLT_2018_cff.delta_phi
delta_phi
Definition: HLT_2018_cff.py:10311
CSCSectorReceiverMiniLUT::calcGlobalEtaMEMini
static global_eta_data calcGlobalEtaMEMini(unsigned short endcap, unsigned short sector, unsigned short station, unsigned short subsector, unsigned theadd, const bool gangedME1a)
Definition: CSCSectorReceiverMiniLUT.cc:51
CSCSectorReceiverLUT
Definition: CSCSectorReceiverLUT.h:19
CSCSectorReceiverLUT::localPhi
lclphidat localPhi(int strip, int pattern, int quality, int lr, const bool gangedME1a=false) const
Geometry Lookup Tables.
Definition: CSCSectorReceiverLUT.cc:180
mps_fire.i
i
Definition: mps_fire.py:355
MessageLogger.h
CSCChamber::layer
const CSCLayer * layer(CSCDetId id) const
Return the layer corresponding to the given id.
Definition: CSCChamber.cc:30
CSCSectorReceiverLUT::calcGlobalEtaME
gbletadat calcGlobalEtaME(const gbletaadd &address) const
Global Eta LUT.
Definition: CSCSectorReceiverLUT.cc:655
CSCSectorReceiverMiniLUT::calcLocalPhiMini
static lclphidat calcLocalPhiMini(unsigned theadd, const bool gangedME1a)
Definition: CSCSectorReceiverMiniLUT.cc:19
lclphidat
class local_phi_data lclphidat
Data Types.
relativeConstraints.station
station
Definition: relativeConstraints.py:67
digitizers_cfi.strip
strip
Definition: digitizers_cfi.py:19
CSCBitWidths::kLocalPhiAddressWidth
Definition: CSCBitWidths.h:18
csctfTrackDigis_cfi.isTMB07
isTMB07
Definition: csctfTrackDigis_cfi.py:121
gbletaadd
class global_eta_address gbletaadd
CSCSectorReceiverLUT::me_global_phi
gblphidat * me_global_phi
Definition: CSCSectorReceiverLUT.h:85
edm::LogInfo
Definition: MessageLogger.h:254
CSCSectorReceiverMiniLUT.h
CSCSectorReceiverLUT::~CSCSectorReceiverLUT
~CSCSectorReceiverLUT()
Definition: CSCSectorReceiverLUT.cc:118
CSCSectorReceiverLUT::operator=
CSCSectorReceiverLUT & operator=(const CSCSectorReceiverLUT &)
Definition: CSCSectorReceiverLUT.cc:84
CSCConstants::KEY_ALCT_LAYER
Definition: CSCConstants.h:46
CSCLayer
Definition: CSCLayer.h:24
CSCSectorReceiverLUT::mb_global_phi
gblphidat * mb_global_phi
Definition: CSCSectorReceiverLUT.h:85
CSCSectorReceiverLUT::encodeFileIndex
std::string encodeFileIndex() const
Helpers.
Definition: CSCSectorReceiverLUT.cc:752
CSCSectorReceiverLUT::me_lcl_phi_file
edm::FileInPath me_lcl_phi_file
Definition: CSCSectorReceiverLUT.h:69
CSCSectorReceiverLUT::readLUTsFromFile
void readLUTsFromFile()
Definition: CSCSectorReceiverLUT.cc:787
MillePedeFileConverter_cfg.fileName
fileName
Definition: MillePedeFileConverter_cfg.py:32
makeMuonMisalignmentScenario.endcap
endcap
Definition: makeMuonMisalignmentScenario.py:320
CSCSectorReceiverLUT::csc_g
const CSCGeometry * csc_g
Definition: CSCSectorReceiverLUT.h:88
groupFilesInBlocks.temp
list temp
Definition: groupFilesInBlocks.py:142
end
#define end
Definition: vmac.h:39
MainPageGenerator.fName
fName
Definition: MainPageGenerator.py:301
edm::Exception
Definition: EDMException.h:77
CSCSectorReceiverLUT::_sector
int _sector
Definition: CSCSectorReceiverLUT.h:53
edm::FileInPath
Definition: FileInPath.h:64
GeomDet::surface
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
CSCConstants::MAX_NUM_STRIPS
Definition: CSCConstants.h:24
CSCLayerGeometry::stripWireGroupIntersection
LocalPoint stripWireGroupIntersection(int strip, int wireGroup) const
Definition: CSCLayerGeometry.cc:141
CSCSectorReceiverLUT::globalPhiME
gblphidat globalPhiME(int phi_local, int wire_group, int cscid, const bool gangedME1a=false) const
Definition: CSCSectorReceiverLUT.cc:445
CSCLayer::centerOfWireGroup
GlobalPoint centerOfWireGroup(int wireGroup) const
Definition: CSCLayer.cc:10
CSCLayerGeometry
Definition: CSCLayerGeometry.h:25
CSCSectorReceiverLUT::me_gbl_eta_file
edm::FileInPath me_gbl_eta_file
Definition: CSCSectorReceiverLUT.h:72
Surface::toGlobal
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:79
CSCTFConstants.h
CSCSectorReceiverLUT::isTMB07
bool isTMB07
Definition: CSCSectorReceiverLUT.h:77
CSCSectorReceiverLUT::_endcap
int _endcap
Definition: CSCSectorReceiverLUT.h:53
CSCChamber
Definition: CSCChamber.h:22
CSCLayerGeometry.h
CSCConstants.h
CSCTriggerNumbering.h
CSCSectorReceiverLUT::mb_gbl_phi_file
edm::FileInPath mb_gbl_phi_file
Definition: CSCSectorReceiverLUT.h:71
CSCSectorReceiverLUT::LUTsFromFile
bool LUTsFromFile
Definition: CSCSectorReceiverLUT.h:73
CSCFrontRearLUT.h
CSCLayer::geometry
const CSCLayerGeometry * geometry() const
Definition: CSCLayer.h:44
CSCSectorReceiverLUT::getGlobalPhiValue
double getGlobalPhiValue(const CSCLayer *thelayer, const unsigned &strip, const unsigned &wire_group) const
Definition: CSCSectorReceiverLUT.cc:221
CSCLayer::centerOfStrip
GlobalPoint centerOfStrip(int strip) const
Definition: CSCLayer.cc:4
CSCPatternLUT.h
Point3DBase< float, LocalTag >
CSCSectorReceiverLUT::isBinary
bool isBinary
Definition: CSCSectorReceiverLUT.h:75
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
CSCSectorReceiverLUT::me_gbl_phi_file
edm::FileInPath me_gbl_phi_file
Definition: CSCSectorReceiverLUT.h:70
CSCSectorReceiverLUT::globalPhiMB
gblphidat globalPhiMB(int phi_local, int wire_group, int cscid, const bool gangedME1a=false) const
Definition: CSCSectorReceiverLUT.cc:516
CSCSectorReceiverLUT::me_global_eta
gbletadat * me_global_eta
Definition: CSCSectorReceiverLUT.h:86
edm::LogWarning
Definition: MessageLogger.h:141
l1temulator_dqm_sourceclient-live_cfg.gangedME1a
gangedME1a
Definition: l1temulator_dqm_sourceclient-live_cfg.py:94
CSCSectorReceiverLUT::CSCSectorReceiverLUT
CSCSectorReceiverLUT(int endcap, int sector, int subsector, int station, const edm::ParameterSet &pset, bool TMB07)
Definition: CSCSectorReceiverLUT.cc:24
CSCTFConstants::SECTOR_DEG
const static double SECTOR_DEG
Definition: CSCTFConstants.h:54
CSCSectorReceiverLUT::calcLocalPhi
lclphidat calcLocalPhi(const lclphiadd &address) const
Local Phi LUT.
Definition: CSCSectorReceiverLUT.cc:138
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:670
edm::ParameterSet
Definition: ParameterSet.h:36
CSCPatternLUT::get2007Position
static double get2007Position(int pattern)
Definition: CSCPatternLUT.cc:3
edm::LogError
Definition: MessageLogger.h:183
CSCBitWidths::kGlobalEtaAddressWidth
Definition: CSCBitWidths.h:19
CSCSectorReceiverLUT::_station
int _station
Definition: CSCSectorReceiverLUT.h:53
CSCSectorReceiverMiniLUT::calcGlobalPhiMEMini
static global_phi_data calcGlobalPhiMEMini(unsigned short endcap, unsigned short sector, unsigned short station, unsigned short subsector, unsigned theadd, const bool gangedME1a)
Definition: CSCSectorReceiverMiniLUT.cc:135
CSCTriggerNumbering::minTriggerCscId
static int minTriggerCscId()
Definition: CSCTriggerNumbering.h:111
CSCSectorReceiverLUT::getGlobalEtaValue
double getGlobalEtaValue(const unsigned &cscid, const unsigned &wire_group, const unsigned &phi_local) const
Definition: CSCSectorReceiverLUT.cc:562
CSCTFConstants::SECTOR1_CENT_RAD
const static double SECTOR1_CENT_RAD
Definition: CSCTFConstants.h:46
CSCDetId
Definition: CSCDetId.h:26
CSCSectorReceiverLUT::calcGlobalPhiME
gblphidat calcGlobalPhiME(const gblphiadd &address) const
Global Phi LUT.
Definition: CSCSectorReceiverLUT.cc:244
gblphiadd
class global_phi_address gblphiadd
PV3DBase::eta
T eta() const
Definition: PV3DBase.h:73
CSCSectorReceiverLUT::calcGlobalPhiMB
gblphidat calcGlobalPhiMB(const gblphidat &me_gphi_data) const
Definition: CSCSectorReceiverLUT.cc:490
CSCTFConstants::minEta
const static double minEta
Definition: CSCTFConstants.h:39
CSCBitWidths::kGlobalPhiDataBitWidth
Definition: CSCBitWidths.h:28
M_PI
#define M_PI
Definition: BXVectorInputProducer.cc:50
topSingleLeptonDQM_PU_cfi.pattern
pattern
Definition: topSingleLeptonDQM_PU_cfi.py:39
CSCTriggerNumbering::ringFromTriggerLabels
static int ringFromTriggerLabels(int station, int triggerCSCID)
Definition: CSCTriggerNumbering.cc:5
CSCTriggerNumbering::chamberFromTriggerLabels
static int chamberFromTriggerLabels(int TriggerSector, int TriggerSubSector, int station, int TriggerCSCID)
Definition: CSCTriggerNumbering.cc:30
CSCTFConstants::etaBins
Definition: CSCTFConstants.h:34
me0TriggerPseudoDigis_cff.nStrips
nStrips
1.2 is to make the matching window safely the two nearest strips 0.35 is the size of an ME0 chamber i...
Definition: me0TriggerPseudoDigis_cff.py:26
lclphiadd
class local_phi_address lclphiadd
CSCBitWidths::kLocalPhiDataBitWidth
Definition: CSCBitWidths.h:25
gbletadat
class global_eta_data gbletadat
CSCSectorReceiverLUT::fillLocalPhiLUT
void fillLocalPhiLUT()
Definition: CSCSectorReceiverLUT.cc:176
CSCSectorReceiverLUT::me_lcl_phi_loaded
static bool me_lcl_phi_loaded
Definition: CSCSectorReceiverLUT.h:83
qcdUeDQM_cfi.quality
quality
Definition: qcdUeDQM_cfi.py:31
CSCTFConstants::maxEta
const static double maxEta
Definition: CSCTFConstants.h:40
LocalPoint.h
Exception
Definition: hltDiff.cc:246
CSCSectorReceiverLUT::useMiniLUTs
bool useMiniLUTs
Definition: CSCSectorReceiverLUT.h:74
CSCConstants::KEY_CLCT_LAYER
Definition: CSCConstants.h:46
relativeConstraints.ring
ring
Definition: relativeConstraints.py:68
CSCBitWidths::kGlobalPhiAddressWidth
Definition: CSCBitWidths.h:20
CSCSectorReceiverLUT::globalEtaME
gbletadat globalEtaME(int phi_bend, int phi_local, int wire_group, int cscid, const bool gangedME1a=false) const
Definition: CSCSectorReceiverLUT.cc:706
CSCTriggerNumbering::maxTriggerCscId
static int maxTriggerCscId()
Definition: CSCTriggerNumbering.h:110
gblphidat
class global_phi_data gblphidat
data
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
mps_fire.result
result
Definition: mps_fire.py:303
CSCTFConstants::SECTOR_RAD
const static double SECTOR_RAD
Definition: CSCTFConstants.h:55
cms::Exception
Definition: Exception.h:70
l1Tree_cfi.isBinary
isBinary
Definition: l1Tree_cfi.py:42
CSCSectorReceiverLUT::_subsector
int _subsector
Definition: CSCSectorReceiverLUT.h:53
CSCSectorReceiverLUT::me_lcl_phi
static lclphidat * me_lcl_phi
Definition: CSCSectorReceiverLUT.h:84
CSCLayerGeometry::numberOfStrips
int numberOfStrips() const
Definition: CSCLayerGeometry.h:66
CSCLayerGeometry::numberOfWireGroups
int numberOfWireGroups() const
Definition: CSCLayerGeometry.h:76
GlobalPoint.h
CSCSectorReceiverLUT.h
PV3DBase::phi
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
CSCGeometry::chamber
const CSCChamber * chamber(CSCDetId id) const
Return the chamber corresponding to given DetId.
Definition: CSCGeometry.cc:100
edm::FileInPath::fullPath
std::string fullPath() const
Definition: FileInPath.cc:163
muonDTDigis_cfi.pset
pset
Definition: muonDTDigis_cfi.py:27
CSCGeometry.h
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37