CMS 3D CMS Logo

MuonGeometrySanityCheck.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: MuonGeometrySanityCheck
4 // Class: MuonGeometrySanityCheck
5 //
13 //
14 // Original Author: Jim Pivarski
15 // Created: Sat Jul 3 13:33:13 CDT 2010
16 // $Id: MuonGeometrySanityCheck.cc,v 1.3 2011/10/12 22:13:00 khotilov Exp $
17 //
18 //
19 
20 // system include files
29 
42 
43 //
44 // class decleration
45 //
46 
48 public:
50 
55 };
56 
58 public:
60  const std::map<std::string, const MuonGeometrySanityCheckCustomFrame *> &frames);
61 
63 
65 
66  std::string detName() const;
67 
68  int type;
70  int frame;
78 
79 private:
80  bool numeric(std::string s);
81  int number(std::string s);
82 };
83 
85 public:
86  explicit MuonGeometrySanityCheck(const edm::ParameterSet &iConfig);
87  ~MuonGeometrySanityCheck() override;
88 
89 private:
90  void analyze(const edm::Event &, const edm::EventSetup &iConfig) override;
91 
93  double tolerance;
95  std::map<std::string, const MuonGeometrySanityCheckCustomFrame *> m_frames;
96  std::vector<MuonGeometrySanityCheckPoint> m_points;
97 
100 };
101 
102 //
103 // constants, enums and typedefs
104 //
105 
106 //
107 // static data member definitions
108 //
109 
110 //
111 // constructors and destructor
112 //
113 
115  : dtGeomToken_(esConsumes<edm::Transition::BeginRun>()), cscGeomToken_(esConsumes<edm::Transition::BeginRun>()) {
116  printout = iConfig.getParameter<std::string>("printout");
117  if (printout != std::string("all") && printout != std::string("bad")) {
118  throw cms::Exception("BadConfig") << "Printout must be \"all\" or \"bad\"." << std::endl;
119  }
120 
121  tolerance = iConfig.getParameter<double>("tolerance");
122  if (tolerance <= 0) {
123  throw cms::Exception("BadConfig") << "Tolerance must be positive." << std::endl;
124  }
125 
126  prefix = iConfig.getParameter<std::string>("prefix");
127 
128  std::vector<edm::ParameterSet> frames = iConfig.getParameter<std::vector<edm::ParameterSet> >("frames");
129  for (std::vector<edm::ParameterSet>::const_iterator frame = frames.begin(); frame != frames.end(); ++frame) {
130  std::string name = frame->getParameter<std::string>("name");
131  if (m_frames.find(name) != m_frames.end()) {
132  throw cms::Exception("BadConfig") << "Custom frame \"" << name << "\" has been defined twice." << std::endl;
133  }
135  }
136 
137  std::vector<edm::ParameterSet> points = iConfig.getParameter<std::vector<edm::ParameterSet> >("points");
138  for (std::vector<edm::ParameterSet>::const_iterator point = points.begin(); point != points.end(); ++point) {
140  }
141 }
142 
144  for (std::map<std::string, const MuonGeometrySanityCheckCustomFrame *>::iterator iter = m_frames.begin();
145  iter != m_frames.end();
146  ++iter) {
147  delete iter->second;
148  }
149 }
150 
152  std::string name) {
153  std::vector<double> numbers = iConfig.getParameter<std::vector<double> >("matrix");
154  if (numbers.size() != 9) {
155  throw cms::Exception("BadConfig") << "Custom frame \"" << name << "\" has a matrix which is not 3x3." << std::endl;
156  }
157 
158  matrix = AlgebraicMatrix(3, 3);
159  matrix[0][0] = numbers[0];
160  matrix[0][1] = numbers[1];
161  matrix[0][2] = numbers[2];
162  matrix[1][0] = numbers[3];
163  matrix[1][1] = numbers[4];
164  matrix[1][2] = numbers[5];
165  matrix[2][0] = numbers[6];
166  matrix[2][1] = numbers[7];
167  matrix[2][2] = numbers[8];
168 
169  int ierr;
171  matrixInverse.invert(ierr);
172  if (ierr != 0) {
173  throw cms::Exception("BadConfig") << "Could not invert matrix for custom frame \"" << name << "\"." << std::endl;
174  }
175 }
176 
179  input[0] = point.x();
180  input[1] = point.x();
181  input[2] = point.x();
183  return GlobalPoint(output[0], output[1], output[3]);
184 }
185 
188  input[0] = point.x();
189  input[1] = point.x();
190  input[2] = point.x();
192  return GlobalPoint(output[0], output[1], output[3]);
193 }
194 
196  return (s == std::string("0") || s == std::string("1") || s == std::string("2") || s == std::string("3") ||
197  s == std::string("4") || s == std::string("5") || s == std::string("6") || s == std::string("7") ||
198  s == std::string("8") || s == std::string("9"));
199 }
200 
202  if (s == std::string("0"))
203  return 0;
204  else if (s == std::string("1"))
205  return 1;
206  else if (s == std::string("2"))
207  return 2;
208  else if (s == std::string("3"))
209  return 3;
210  else if (s == std::string("4"))
211  return 4;
212  else if (s == std::string("5"))
213  return 5;
214  else if (s == std::string("6"))
215  return 6;
216  else if (s == std::string("7"))
217  return 7;
218  else if (s == std::string("8"))
219  return 8;
220  else if (s == std::string("9"))
221  return 9;
222  else
223  assert(false);
224 }
225 
227  const edm::ParameterSet &iConfig, const std::map<std::string, const MuonGeometrySanityCheckCustomFrame *> &frames) {
228  std::string detName = iConfig.getParameter<std::string>("detector");
229 
230  bool parsing_error = false;
231 
232  bool barrel = (detName.substr(0, 2) == std::string("MB"));
233  bool endcap = (detName.substr(0, 2) == std::string("ME"));
234  if (!barrel && !endcap)
235  parsing_error = true;
236 
237  if (!parsing_error && barrel) {
238  int index = 2;
239 
240  bool plus = true;
241  if (detName.substr(index, 1) == std::string("+")) {
242  plus = true;
243  index++;
244  } else if (detName.substr(index, 1) == std::string("-")) {
245  plus = false;
246  index++;
247  }
248 
249  int wheel = 0;
250  bool wheel_digit = false;
251  while (!parsing_error && numeric(detName.substr(index, 1))) {
252  wheel *= 10;
253  wheel += number(detName.substr(index, 1));
254  wheel_digit = true;
255  index++;
256  }
257  if (!plus)
258  wheel *= -1;
259  if (!wheel_digit)
260  parsing_error = true;
261 
262  if (detName.substr(index, 1) != std::string("/"))
263  parsing_error = true;
264  index++;
265 
266  int station = 0;
267  bool station_digit = false;
268  while (!parsing_error && numeric(detName.substr(index, 1))) {
269  station *= 10;
270  station += number(detName.substr(index, 1));
271  station_digit = true;
272  index++;
273  }
274  if (!station_digit)
275  parsing_error = true;
276 
277  if (detName.substr(index, 1) != std::string("/"))
278  parsing_error = true;
279  index++;
280 
281  int sector = 0;
282  bool sector_digit = false;
283  while (!parsing_error && numeric(detName.substr(index, 1))) {
284  sector *= 10;
285  sector += number(detName.substr(index, 1));
286  sector_digit = true;
287  index++;
288  }
289  if (!sector_digit)
290  parsing_error = true;
291 
292  // these are optional
293  int superlayer = 0;
294  bool superlayer_digit = false;
295  int layer = 0;
296  if (detName.substr(index, 1) == std::string("/")) {
297  index++;
298  while (!parsing_error && numeric(detName.substr(index, 1))) {
299  superlayer *= 10;
300  superlayer += number(detName.substr(index, 1));
301  superlayer_digit = true;
302  index++;
303  }
304  if (!superlayer_digit)
305  parsing_error = true;
306 
307  if (detName.substr(index, 1) == std::string("/")) {
308  index++;
309  while (!parsing_error && numeric(detName.substr(index, 1))) {
310  layer *= 10;
311  layer += number(detName.substr(index, 1));
312  index++;
313  }
314  }
315  }
316 
317  if (!parsing_error) {
318  bool no_such_chamber = false;
319 
320  if (wheel < -2 || wheel > 2)
321  no_such_chamber = true;
322  if (station < 1 || station > 4)
323  no_such_chamber = true;
324  if (station == 4 && (sector < 1 || sector > 14))
325  no_such_chamber = true;
326  if (station < 4 && (sector < 1 || sector > 12))
327  no_such_chamber = true;
328 
329  if (no_such_chamber) {
330  throw cms::Exception("BadConfig") << "Chamber doesn't exist: MB" << (plus ? "+" : "-") << wheel << "/"
331  << station << "/" << sector << std::endl;
332  }
333 
334  if (superlayer == 0) {
336  type = kDTChamber;
337  } else {
338  bool no_such_superlayer = false;
339  if (superlayer < 1 || superlayer > 3)
340  no_such_superlayer = true;
341  if (station == 4 && superlayer == 2)
342  no_such_superlayer = true;
343 
344  if (no_such_superlayer) {
345  throw cms::Exception("BadConfig") << "Superlayer doesn't exist: MB" << (plus ? "+" : "-") << wheel << "/"
346  << station << "/" << sector << "/" << superlayer << std::endl;
347  }
348 
349  if (layer == 0) {
350  detector = DTSuperLayerId(wheel, station, sector, superlayer);
352  } else {
353  bool no_such_layer = false;
354  if (layer < 1 || layer > 4)
355  no_such_layer = true;
356 
357  if (no_such_layer) {
358  throw cms::Exception("BadConfig")
359  << "Layer doesn't exist: MB" << (plus ? "+" : "-") << wheel << "/" << station << "/" << sector << "/"
360  << superlayer << "/" << layer << std::endl;
361  }
362 
363  detector = DTLayerId(wheel, station, sector, superlayer, layer);
364  type = kDTLayer;
365  }
366  }
367  }
368  } else if (!parsing_error && endcap) {
369  int index = 2;
370 
371  bool plus = true;
372  if (detName.substr(index, 1) == std::string("+")) {
373  plus = true;
374  index++;
375  } else if (detName.substr(index, 1) == std::string("-")) {
376  plus = false;
377  index++;
378  } else
379  parsing_error = true;
380 
381  int station = 0;
382  bool station_digit = false;
383  while (!parsing_error && numeric(detName.substr(index, 1))) {
384  station *= 10;
385  station += number(detName.substr(index, 1));
386  station_digit = true;
387  index++;
388  }
389  if (!plus)
390  station *= -1;
391  if (!station_digit)
392  parsing_error = true;
393 
394  if (detName.substr(index, 1) != std::string("/"))
395  parsing_error = true;
396  index++;
397 
398  int ring = 0;
399  bool ring_digit = false;
400  while (!parsing_error && numeric(detName.substr(index, 1))) {
401  ring *= 10;
402  ring += number(detName.substr(index, 1));
403  ring_digit = true;
404  index++;
405  }
406  if (!ring_digit)
407  parsing_error = true;
408 
409  if (detName.substr(index, 1) != std::string("/"))
410  parsing_error = true;
411  index++;
412 
413  int chamber = 0;
414  bool chamber_digit = false;
415  while (!parsing_error && numeric(detName.substr(index, 1))) {
416  chamber *= 10;
417  chamber += number(detName.substr(index, 1));
418  chamber_digit = true;
419  index++;
420  }
421  if (!chamber_digit)
422  parsing_error = true;
423 
424  // this is optional
425  int layer = 0;
426  bool layer_digit = false;
427  if (detName.substr(index, 1) == std::string("/")) {
428  index++;
429  while (!parsing_error && numeric(detName.substr(index, 1))) {
430  layer *= 10;
431  layer += number(detName.substr(index, 1));
432  layer_digit = true;
433  index++;
434  }
435  if (!layer_digit)
436  parsing_error = true;
437  }
438 
439  if (!parsing_error) {
440  bool no_such_chamber = false;
441 
442  int endcap = (station > 0 ? 1 : 2);
443  station = abs(station);
444  if (station < 1 || station > 4)
445  no_such_chamber = true;
446  if (station == 1 && (ring < 1 || ring > 4))
447  no_such_chamber = true;
448  if (station > 1 && (ring < 1 || ring > 2))
449  no_such_chamber = true;
450  if (station == 1 && (chamber < 1 || chamber > 36))
451  no_such_chamber = true;
452  if (station > 1 && ring == 1 && (chamber < 1 || chamber > 18))
453  no_such_chamber = true;
454  if (station > 1 && ring == 2 && (chamber < 1 || chamber > 36))
455  no_such_chamber = true;
456 
457  if (no_such_chamber) {
458  throw cms::Exception("BadConfig") << "Chamber doesn't exist: ME" << (endcap == 1 ? "+" : "-") << station << "/"
459  << ring << "/" << chamber << std::endl;
460  }
461 
462  if (layer == 0) {
464  type = kCSCChamber;
465  } else {
466  bool no_such_layer = false;
467  if (layer < 1 || layer > 6)
468  no_such_layer = true;
469 
470  if (no_such_layer) {
471  throw cms::Exception("BadConfig") << "Layer doesn't exist: ME" << (endcap == 1 ? "+" : "-") << station << "/"
472  << ring << "/" << chamber << "/" << layer << std::endl;
473  }
474 
476  type = kCSCLayer;
477  }
478  }
479  }
480 
481  if (parsing_error) {
482  throw cms::Exception("BadConfig") << "Detector name is malformed: " << detName << std::endl;
483  }
484 
485  std::string frameName = iConfig.getParameter<std::string>("frame");
486  const std::map<std::string, const MuonGeometrySanityCheckCustomFrame *>::const_iterator frameIter =
487  frames.find(frameName);
488  if (frameName == std::string("global")) {
489  frame = kGlobal;
490  customFrame = nullptr;
491  } else if (frameName == std::string("local")) {
492  frame = kLocal;
493  customFrame = nullptr;
494  } else if (frameName == std::string("chamber")) {
495  frame = kChamber;
496  customFrame = nullptr;
497  } else if (frameIter != frames.end()) {
498  frame = kCustom;
499  customFrame = frameIter->second;
500  } else {
501  throw cms::Exception("BadConfig") << "Frame \"" << frameName << "\" has not been defined." << std::endl;
502  }
503 
504  std::vector<double> point = iConfig.getParameter<std::vector<double> >("displacement");
505  if (point.size() != 3) {
506  throw cms::Exception("BadConfig") << "Displacement relative to detector " << detName
507  << " doesn't have exactly three components." << std::endl;
508  }
509 
510  displacement = GlobalPoint(point[0], point[1], point[2]);
511 
512  const edm::Entry *entry = iConfig.retrieveUnknown("expectation");
513  if (entry != nullptr) {
514  has_expectation = true;
515 
516  point = iConfig.getParameter<std::vector<double> >("expectation");
517  if (point.size() != 3) {
518  throw cms::Exception("BadConfig") << "Expectation for detector " << detName << ", displacement " << displacement
519  << " doesn't have exactly three components." << std::endl;
520  }
521 
522  expectation = GlobalPoint(point[0], point[1], point[2]);
523  } else {
524  has_expectation = false;
525  }
526 
527  entry = iConfig.retrieveUnknown("name");
528  if (entry != nullptr) {
529  name = iConfig.getParameter<std::string>("name");
530  } else {
531  name = std::string("anonymous");
532  }
533 
534  entry = iConfig.retrieveUnknown("outputFrame");
535  if (entry != nullptr) {
536  frameName = iConfig.getParameter<std::string>("outputFrame");
537  const std::map<std::string, const MuonGeometrySanityCheckCustomFrame *>::const_iterator frameIter =
538  frames.find(frameName);
539  if (frameName == std::string("global")) {
541  outputCustomFrame = nullptr;
542  } else if (frameName == std::string("local")) {
544  outputCustomFrame = nullptr;
545  } else if (frameName == std::string("chamber")) {
547  outputCustomFrame = nullptr;
548  } else if (frameIter != frames.end()) {
550  outputCustomFrame = frameIter->second;
551  } else {
552  throw cms::Exception("BadConfig") << "Frame \"" << frameName << "\" has not been defined." << std::endl;
553  }
554  } else {
556  outputCustomFrame = nullptr;
557  }
558 }
559 
561  std::stringstream output;
562  if (type == kDTChamber) {
564  output << "MB" << (id.wheel() > 0 ? "+" : "") << id.wheel() << "/" << id.station() << "/" << id.sector();
565  } else if (type == kDTSuperLayer) {
567  output << "MB" << (id.wheel() > 0 ? "+" : "") << id.wheel() << "/" << id.station() << "/" << id.sector() << "/"
568  << id.superlayer();
569  } else if (type == kDTLayer) {
571  output << "MB" << (id.wheel() > 0 ? "+" : "") << id.wheel() << "/" << id.station() << "/" << id.sector() << "/"
572  << id.superlayer() << "/" << id.layer();
573  } else if (type == kCSCChamber) {
575  output << "ME" << (id.endcap() == 1 ? "+" : "-") << id.station() << "/" << id.ring() << "/" << id.chamber();
576  } else if (type == kCSCLayer) {
578  output << "ME" << (id.endcap() == 1 ? "+" : "-") << id.station() << "/" << id.ring() << "/" << id.chamber() << "/"
579  << id.layer();
580  } else
581  assert(false);
582  return output.str();
583 }
584 
585 // ------------ method called to for each event ------------
587  const DTGeometry *dtGeometry = &iSetup.getData(dtGeomToken_);
588  const CSCGeometry *cscGeometry = &iSetup.getData(cscGeomToken_);
589 
590  int num_transformed = 0;
591  int num_tested = 0;
592  int num_bad = 0;
593  for (std::vector<MuonGeometrySanityCheckPoint>::const_iterator point = m_points.begin(); point != m_points.end();
594  ++point) {
595  num_transformed++;
596 
597  bool dt = (point->detector.subdetId() == MuonSubdetId::DT);
598 
599  // convert the displacement vector into the chosen coordinate system and add it to the chamber's position
600  GlobalPoint chamberPos;
601  if (dt)
602  chamberPos = dtGeometry->idToDet(point->detector)->surface().toGlobal(LocalPoint(0., 0., 0.));
603  else
604  chamberPos = cscGeometry->idToDet(point->detector)->surface().toGlobal(LocalPoint(0., 0., 0.));
605 
608  result = GlobalPoint(chamberPos.x() + point->displacement.x(),
609  chamberPos.y() + point->displacement.y(),
610  chamberPos.z() + point->displacement.z());
611  }
612 
613  else if (point->frame == MuonGeometrySanityCheckPoint::kLocal) {
614  if (dt)
615  result = dtGeometry->idToDet(point->detector)
616  ->surface()
617  .toGlobal(LocalPoint(point->displacement.x(), point->displacement.y(), point->displacement.z()));
618  else
619  result = cscGeometry->idToDet(point->detector)
620  ->surface()
621  .toGlobal(LocalPoint(point->displacement.x(), point->displacement.y(), point->displacement.z()));
622  }
623 
624  else if (point->frame == MuonGeometrySanityCheckPoint::kChamber) {
625  if (point->detector.subdetId() == MuonSubdetId::DT) {
626  DTChamberId id(point->detector);
627  if (dt)
628  result = dtGeometry->idToDet(id)->surface().toGlobal(
629  LocalPoint(point->displacement.x(), point->displacement.y(), point->displacement.z()));
630  else
631  result = cscGeometry->idToDet(id)->surface().toGlobal(
632  LocalPoint(point->displacement.x(), point->displacement.y(), point->displacement.z()));
633  } else if (point->detector.subdetId() == MuonSubdetId::CSC) {
634  CSCDetId cscid(point->detector);
635  CSCDetId id(cscid.endcap(), cscid.station(), cscid.ring(), cscid.chamber());
636  if (dt)
637  result = dtGeometry->idToDet(id)->surface().toGlobal(
638  LocalPoint(point->displacement.x(), point->displacement.y(), point->displacement.z()));
639  else
640  result = cscGeometry->idToDet(id)->surface().toGlobal(
641  LocalPoint(point->displacement.x(), point->displacement.y(), point->displacement.z()));
642  } else {
643  assert(false);
644  }
645  }
646 
647  else if (point->frame == MuonGeometrySanityCheckPoint::kCustom) {
648  GlobalPoint transformed = point->customFrame->transform(point->displacement);
650  chamberPos.x() + transformed.x(), chamberPos.y() + transformed.y(), chamberPos.z() + transformed.z());
651  }
652 
653  else {
654  assert(false);
655  }
656 
657  // convert the result into the chosen output coordinate system
658  if (point->outputFrame == MuonGeometrySanityCheckPoint::kGlobal) {
659  }
660 
661  else if (point->outputFrame == MuonGeometrySanityCheckPoint::kLocal) {
662  LocalPoint transformed;
663  if (dt)
664  transformed = dtGeometry->idToDet(point->detector)->surface().toLocal(result);
665  else
666  transformed = cscGeometry->idToDet(point->detector)->surface().toLocal(result);
667  result = GlobalPoint(transformed.x(), transformed.y(), transformed.z());
668  }
669 
670  else if (point->outputFrame == MuonGeometrySanityCheckPoint::kChamber) {
671  if (point->detector.subdetId() == MuonSubdetId::DT) {
672  DTChamberId id(point->detector);
673  LocalPoint transformed;
674  if (dt)
675  transformed = dtGeometry->idToDet(id)->surface().toLocal(result);
676  else
677  transformed = cscGeometry->idToDet(id)->surface().toLocal(result);
678  result = GlobalPoint(transformed.x(), transformed.y(), transformed.z());
679  } else if (point->detector.subdetId() == MuonSubdetId::CSC) {
680  CSCDetId cscid(point->detector);
681  CSCDetId id(cscid.endcap(), cscid.station(), cscid.ring(), cscid.chamber());
682  LocalPoint transformed;
683  if (dt)
684  transformed = dtGeometry->idToDet(id)->surface().toLocal(result);
685  else
686  transformed = cscGeometry->idToDet(id)->surface().toLocal(result);
687  result = GlobalPoint(transformed.x(), transformed.y(), transformed.z());
688  } else {
689  assert(false);
690  }
691  }
692 
693  else if (point->outputFrame == MuonGeometrySanityCheckPoint::kCustom) {
694  result = point->outputCustomFrame->transformInverse(result);
695  }
696 
697  std::stringstream output;
698  output << prefix << " " << point->name << " " << point->detName() << " " << result.x() << " " << result.y() << " "
699  << result.z();
700 
701  bool bad = false;
702  if (point->has_expectation) {
703  num_tested++;
704  double residx = result.x() - point->expectation.x();
705  double residy = result.y() - point->expectation.y();
706  double residz = result.z() - point->expectation.z();
707 
708  if (fabs(residx) > tolerance || fabs(residy) > tolerance || fabs(residz) > tolerance) {
709  num_bad++;
710  bad = true;
711  output << " BAD " << residx << " " << residy << " " << residz << std::endl;
712  } else {
713  output << " GOOD " << residx << " " << residy << " " << residz << std::endl;
714  }
715  } else {
716  output << " UNTESTED 0 0 0" << std::endl;
717  }
718 
719  if (printout == std::string("all") || (printout == std::string("bad") && bad)) {
720  std::cout << output.str();
721  }
722  }
723 
724  std::cout << std::endl
725  << "SUMMARY transformed: " << num_transformed << " tested: " << num_tested << " bad: " << num_bad
726  << " good: " << (num_tested - num_bad) << std::endl;
727 }
728 
729 //define this as a plug-in
std::vector< MuonGeometrySanityCheckPoint > m_points
float dt
Definition: AMPTWrapper.h:136
void analyze(const edm::Event &, const edm::EventSetup &iConfig) override
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
Point3DBase< Scalar, LocalTag > LocalPoint
Definition: Definitions.h:30
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
T z() const
Definition: PV3DBase.h:61
const MuonGeometrySanityCheckCustomFrame * outputCustomFrame
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
std::map< std::string, const MuonGeometrySanityCheckCustomFrame * > m_frames
LocalPoint toLocal(const GlobalPoint &gp) const
assert(be >=bs)
static std::string const input
Definition: EdmProvDump.cc:50
constexpr std::array< uint8_t, layerIndexSize< TrackerTraits > > layer
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
int iEvent
Definition: GenABIO.cc:224
CLHEP::HepMatrix AlgebraicMatrix
const GeomDet * idToDet(DetId) const override
Definition: DTGeometry.cc:77
MuonGeometrySanityCheckPoint(const edm::ParameterSet &iConfig, const std::map< std::string, const MuonGeometrySanityCheckCustomFrame *> &frames)
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
Transition
Definition: Transition.h:12
int chamber() const
Definition: CSCDetId.h:62
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
const edm::ESGetToken< CSCGeometry, MuonGeometryRecord > cscGeomToken_
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:79
Definition: DetId.h:17
MuonGeometrySanityCheckCustomFrame(const edm::ParameterSet &iConfig, std::string name)
CLHEP::HepVector AlgebraicVector
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
int station() const
Definition: CSCDetId.h:79
Entry const * retrieveUnknown(char const *) const
int endcap() const
Definition: CSCDetId.h:85
GlobalPoint transform(GlobalPoint point) const
HLT enums.
Definition: output.py:1
static constexpr int DT
Definition: MuonSubdetId.h:11
int ring() const
Definition: CSCDetId.h:68
const edm::ESGetToken< DTGeometry, MuonGeometryRecord > dtGeomToken_
MuonGeometrySanityCheck(const edm::ParameterSet &iConfig)
static constexpr int CSC
Definition: MuonSubdetId.h:12
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
Definition: invegas.h:5
GlobalPoint transformInverse(GlobalPoint point) const
const MuonGeometrySanityCheckCustomFrame * customFrame
const GeomDet * idToDet(DetId) const override
Definition: CSCGeometry.cc:91