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