CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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.1 2010/07/10 00:24:50 pivarski Exp $
17 //
18 //
19 
20 
21 // system include files
30 
43 
44 //
45 // class decleration
46 //
47 
49  public:
50  MuonGeometrySanityCheckCustomFrame(const edm::ParameterSet &iConfig, std::string name);
51 
56 };
57 
59  public:
60  MuonGeometrySanityCheckPoint(const edm::ParameterSet &iConfig, const std::map<std::string,const MuonGeometrySanityCheckCustomFrame*> &frames);
61 
62  enum {
68  };
69 
70  enum {
75  };
76 
77  std::string detName() const;
78 
79  int type;
81  int frame;
86  std::string name;
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);
99 
100  private:
101  virtual void analyze(const edm::Event&, const edm::EventSetup &iConfig);
102 
103  std::string printout;
104  double tolerance;
105  std::string prefix;
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) {
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  bool layer_digit = false;
282  if (detName.substr(index, 1) == std::string("/")) {
283  index++;
284  while (!parsing_error && numeric(detName.substr(index, 1))) {
285  superlayer *= 10;
286  superlayer += number(detName.substr(index, 1));
287  superlayer_digit = true;
288  index++;
289  }
290  if (!superlayer_digit) parsing_error = true;
291 
292  if (detName.substr(index, 1) == std::string("/")) {
293  index++;
294  while (!parsing_error && numeric(detName.substr(index, 1))) {
295  layer *= 10;
296  layer += number(detName.substr(index, 1));
297  layer_digit = true;
298  index++;
299  }
300  }
301  }
302 
303  if (!parsing_error) {
304  bool no_such_chamber = false;
305 
306  if (wheel < -2 || wheel > 2) no_such_chamber = true;
307  if (station < 1 || station > 4) no_such_chamber = true;
308  if (station == 4 && (sector < 1 || sector > 14)) no_such_chamber = true;
309  if (station < 4 && (sector < 1 || sector > 12)) no_such_chamber = true;
310 
311  if (no_such_chamber) {
312  throw cms::Exception("BadConfig") << "Chamber doesn't exist: MB" << (plus ? "+" : "-") << wheel << "/" << station << "/" << sector << std::endl;
313  }
314 
315  if (superlayer == 0) {
316  detector = DTChamberId(wheel, station, sector);
317  type = kDTChamber;
318  }
319  else {
320  bool no_such_superlayer = false;
321  if (superlayer < 1 || superlayer > 3) no_such_superlayer = true;
322  if (station == 4 && superlayer == 2) no_such_superlayer = true;
323 
324  if (no_such_superlayer) {
325  throw cms::Exception("BadConfig") << "Superlayer doesn't exist: MB" << (plus ? "+" : "-") << wheel << "/" << station << "/" << sector << "/" << superlayer << std::endl;
326  }
327 
328  if (layer == 0) {
329  detector = DTSuperLayerId(wheel, station, sector, superlayer);
331  }
332  else {
333  bool no_such_layer = false;
334  if (layer < 1 || layer > 4) no_such_layer = true;
335 
336  if (no_such_layer) {
337  throw cms::Exception("BadConfig") << "Layer doesn't exist: MB" << (plus ? "+" : "-") << wheel << "/" << station << "/" << sector << "/" << superlayer << "/" << layer << std::endl;
338  }
339 
340  detector = DTLayerId(wheel, station, sector, superlayer, layer);
341  type = kDTLayer;
342  }
343  }
344  }
345  }
346  else if (!parsing_error && endcap) {
347  int index = 2;
348 
349  bool plus = true;
350  if (detName.substr(index, 1) == std::string("+")) {
351  plus = true;
352  index++;
353  }
354  else if (detName.substr(index, 1) == std::string("-")) {
355  plus = false;
356  index++;
357  }
358  else parsing_error = true;
359 
360  int station = 0;
361  bool station_digit = false;
362  while (!parsing_error && numeric(detName.substr(index, 1))) {
363  station *= 10;
364  station += number(detName.substr(index, 1));
365  station_digit = true;
366  index++;
367  }
368  if (!plus) station *= -1;
369  if (!station_digit) parsing_error = true;
370 
371  if (detName.substr(index, 1) != std::string("/")) parsing_error = true;
372  index++;
373 
374  int ring = 0;
375  bool ring_digit = false;
376  while (!parsing_error && numeric(detName.substr(index, 1))) {
377  ring *= 10;
378  ring += number(detName.substr(index, 1));
379  ring_digit = true;
380  index++;
381  }
382  if (!ring_digit) parsing_error = true;
383 
384  if (detName.substr(index, 1) != std::string("/")) parsing_error = true;
385  index++;
386 
387  int chamber = 0;
388  bool chamber_digit = false;
389  while (!parsing_error && numeric(detName.substr(index, 1))) {
390  chamber *= 10;
391  chamber += number(detName.substr(index, 1));
392  chamber_digit = true;
393  index++;
394  }
395  if (!chamber_digit) parsing_error = true;
396 
397  // this is optional
398  int layer = 0;
399  bool layer_digit = false;
400  if (detName.substr(index, 1) == std::string("/")) {
401  index++;
402  while (!parsing_error && numeric(detName.substr(index, 1))) {
403  layer *= 10;
404  layer += number(detName.substr(index, 1));
405  layer_digit = true;
406  index++;
407  }
408  if (!layer_digit) parsing_error = true;
409  }
410 
411  if (!parsing_error) {
412  bool no_such_chamber = false;
413 
414  int endcap = (station > 0 ? 1 : 2);
415  station = abs(station);
416  if (station < 1 || station > 4) no_such_chamber = true;
417  if (station == 1 && (ring < 1 || ring > 4)) no_such_chamber = true;
418  if (station > 1 && (ring < 1 || ring > 2)) no_such_chamber = true;
419  if (station == 1 && (chamber < 1 || chamber > 36)) no_such_chamber = true;
420  if (station > 1 && ring == 1 && (chamber < 1 || chamber > 18)) no_such_chamber = true;
421  if (station > 1 && ring == 2 && (chamber < 1 || chamber > 36)) no_such_chamber = true;
422 
423  if (no_such_chamber) {
424  throw cms::Exception("BadConfig") << "Chamber doesn't exist: ME" << (endcap == 1 ? "+" : "-") << station << "/" << ring << "/" << chamber << std::endl;
425  }
426 
427  if (layer == 0) {
428  detector = CSCDetId(endcap, station, ring, chamber);
429  type = kCSCChamber;
430  }
431  else {
432  bool no_such_layer = false;
433  if (layer < 1 || layer > 6) no_such_layer = true;
434 
435  if (no_such_layer) {
436  throw cms::Exception("BadConfig") << "Layer doesn't exist: ME" << (endcap == 1 ? "+" : "-") << station << "/" << ring << "/" << chamber << "/" << layer << std::endl;
437  }
438 
439  detector = CSCDetId(endcap, station, ring, chamber, layer);
440  type = kCSCLayer;
441  }
442  }
443  }
444 
445  if (parsing_error) {
446  throw cms::Exception("BadConfig") << "Detector name is malformed: " << detName << std::endl;
447  }
448 
449  std::string frameName = iConfig.getParameter<std::string>("frame");
450  const std::map<std::string,const MuonGeometrySanityCheckCustomFrame*>::const_iterator frameIter = frames.find(frameName);
451  if (frameName == std::string("global")) {
452  frame = kGlobal;
453  customFrame = NULL;
454  }
455  else if (frameName == std::string("local")) {
456  frame = kLocal;
457  customFrame = NULL;
458  }
459  else if (frameName == std::string("chamber")) {
460  frame = kChamber;
461  customFrame = NULL;
462  }
463  else if (frameIter != frames.end()) {
464  frame = kCustom;
465  customFrame = frameIter->second;
466  }
467  else {
468  throw cms::Exception("BadConfig") << "Frame \"" << frameName << "\" has not been defined." << std::endl;
469  }
470 
471  std::vector<double> point = iConfig.getParameter<std::vector<double> >("displacement");
472  if (point.size() != 3) {
473  throw cms::Exception("BadConfig") << "Displacement relative to detector " << detName << " doesn't have exactly three components." << std::endl;
474  }
475 
476  displacement = GlobalPoint(point[0], point[1], point[2]);
477 
478  const edm::Entry *entry = iConfig.retrieveUnknown("expectation");
479  if (entry != NULL) {
480  has_expectation = true;
481 
482  point = iConfig.getParameter<std::vector<double> >("expectation");
483  if (point.size() != 3) {
484  throw cms::Exception("BadConfig") << "Expectation for detector " << detName << ", displacement " << displacement << " doesn't have exactly three components." << std::endl;
485  }
486 
487  expectation = GlobalPoint(point[0], point[1], point[2]);
488  }
489  else {
490  has_expectation = false;
491  }
492 
493  entry = iConfig.retrieveUnknown("name");
494  if (entry != NULL) {
495  name = iConfig.getParameter<std::string>("name");
496  }
497  else {
498  name = std::string("anonymous");
499  }
500 
501  entry = iConfig.retrieveUnknown("outputFrame");
502  if (entry != NULL) {
503  frameName = iConfig.getParameter<std::string>("outputFrame");
504  const std::map<std::string,const MuonGeometrySanityCheckCustomFrame*>::const_iterator frameIter = frames.find(frameName);
505  if (frameName == std::string("global")) {
508  }
509  else if (frameName == std::string("local")) {
512  }
513  else if (frameName == std::string("chamber")) {
516  }
517  else if (frameIter != frames.end()) {
519  outputCustomFrame = frameIter->second;
520  }
521  else {
522  throw cms::Exception("BadConfig") << "Frame \"" << frameName << "\" has not been defined." << std::endl;
523  }
524  }
525  else {
528  }
529 }
530 
532  std::stringstream output;
533  if (type == kDTChamber) {
534  DTChamberId id(detector);
535  output << "MB" << (id.wheel() > 0 ? "+" : "") << id.wheel() << "/" << id.station() << "/" << id.sector();
536  }
537  else if (type == kDTSuperLayer) {
539  output << "MB" << (id.wheel() > 0 ? "+" : "") << id.wheel() << "/" << id.station() << "/" << id.sector() << "/" << id.superlayer();
540  }
541  else if (type == kDTLayer) {
542  DTLayerId id(detector);
543  output << "MB" << (id.wheel() > 0 ? "+" : "") << id.wheel() << "/" << id.station() << "/" << id.sector() << "/" << id.superlayer() << "/" << id.layer();
544  }
545  else if (type == kCSCChamber) {
546  CSCDetId id(detector);
547  output << "ME" << (id.endcap() == 1 ? "+" : "-") << id.station() << "/" << id.ring() << "/" << id.chamber();
548  }
549  else if (type == kCSCLayer) {
550  CSCDetId id(detector);
551  output << "ME" << (id.endcap() == 1 ? "+" : "-") << id.station() << "/" << id.ring() << "/" << id.chamber() << "/" << id.layer();
552  }
553  else assert(false);
554  return output.str();
555 }
556 
557 // ------------ method called to for each event ------------
558 void
560  edm::ESHandle<DTGeometry> dtGeometry;
561  iSetup.get<MuonGeometryRecord>().get(dtGeometry);
562 
563  edm::ESHandle<CSCGeometry> cscGeometry;
564  iSetup.get<MuonGeometryRecord>().get(cscGeometry);
565 
566  int num_transformed = 0;
567  int num_tested = 0;
568  int num_bad = 0;
569  for (std::vector<MuonGeometrySanityCheckPoint>::const_iterator point = m_points.begin(); point != m_points.end(); ++point) {
570  num_transformed++;
571 
572  bool dt = (point->detector.subdetId() == MuonSubdetId::DT);
573 
574  // convert the displacement vector into the chosen coordinate system and add it to the chamber's position
575  GlobalPoint chamberPos;
576  if (dt) chamberPos = dtGeometry->idToDet(point->detector)->surface().toGlobal(LocalPoint(0., 0., 0.));
577  else chamberPos = cscGeometry->idToDet(point->detector)->surface().toGlobal(LocalPoint(0., 0., 0.));
578 
581  result = GlobalPoint(chamberPos.x() + point->displacement.x(), chamberPos.y() + point->displacement.y(), chamberPos.z() + point->displacement.z());
582  }
583 
584  else if (point->frame == MuonGeometrySanityCheckPoint::kLocal) {
585  if (dt) result = dtGeometry->idToDet(point->detector)->surface().toGlobal(LocalPoint(point->displacement.x(), point->displacement.y(), point->displacement.z()));
586  else result = cscGeometry->idToDet(point->detector)->surface().toGlobal(LocalPoint(point->displacement.x(), point->displacement.y(), point->displacement.z()));
587  }
588 
589  else if (point->frame == MuonGeometrySanityCheckPoint::kChamber) {
590  if (point->detector.subdetId() == MuonSubdetId::DT) {
591  DTChamberId id(point->detector);
592  if (dt) result = dtGeometry->idToDet(id)->surface().toGlobal(LocalPoint(point->displacement.x(), point->displacement.y(), point->displacement.z()));
593  else result = cscGeometry->idToDet(id)->surface().toGlobal(LocalPoint(point->displacement.x(), point->displacement.y(), point->displacement.z()));
594  }
595  else if (point->detector.subdetId() == MuonSubdetId::CSC) {
596  CSCDetId cscid(point->detector);
597  CSCDetId id(cscid.endcap(), cscid.station(), cscid.ring(), cscid.chamber());
598  if (dt) result = dtGeometry->idToDet(id)->surface().toGlobal(LocalPoint(point->displacement.x(), point->displacement.y(), point->displacement.z()));
599  else result = cscGeometry->idToDet(id)->surface().toGlobal(LocalPoint(point->displacement.x(), point->displacement.y(), point->displacement.z()));
600  }
601  else { assert(false); }
602  }
603 
604  else if (point->frame == MuonGeometrySanityCheckPoint::kCustom) {
605  GlobalPoint transformed = point->customFrame->transform(point->displacement);
606  result = GlobalPoint(chamberPos.x() + transformed.x(), chamberPos.y() + transformed.y(), chamberPos.z() + transformed.z());
607  }
608 
609  else { assert(false); }
610 
611  // convert the result into the chosen output coordinate system
612  if (point->outputFrame == MuonGeometrySanityCheckPoint::kGlobal) { }
613 
614  else if (point->outputFrame == MuonGeometrySanityCheckPoint::kLocal) {
615  LocalPoint transformed;
616  if (dt) transformed = dtGeometry->idToDet(point->detector)->surface().toLocal(result);
617  else transformed = cscGeometry->idToDet(point->detector)->surface().toLocal(result);
618  result = GlobalPoint(transformed.x(), transformed.y(), transformed.z());
619  }
620 
621  else if (point->outputFrame == MuonGeometrySanityCheckPoint::kChamber) {
622  if (point->detector.subdetId() == MuonSubdetId::DT) {
623  DTChamberId id(point->detector);
624  LocalPoint transformed;
625  if (dt) transformed = dtGeometry->idToDet(id)->surface().toLocal(result);
626  else transformed = cscGeometry->idToDet(id)->surface().toLocal(result);
627  result = GlobalPoint(transformed.x(), transformed.y(), transformed.z());
628  }
629  else if (point->detector.subdetId() == MuonSubdetId::CSC) {
630  CSCDetId cscid(point->detector);
631  CSCDetId id(cscid.endcap(), cscid.station(), cscid.ring(), cscid.chamber());
632  LocalPoint transformed;
633  if (dt) transformed = dtGeometry->idToDet(id)->surface().toLocal(result);
634  else transformed = cscGeometry->idToDet(id)->surface().toLocal(result);
635  result = GlobalPoint(transformed.x(), transformed.y(), transformed.z());
636  }
637  else { assert(false); }
638  }
639 
640  else if (point->outputFrame == MuonGeometrySanityCheckPoint::kCustom) {
641  result = point->outputCustomFrame->transformInverse(result);
642  }
643 
644  std::stringstream output;
645  output << prefix << " " << point->name << " " << point->detName() << " " << result.x() << " " << result.y() << " " << result.z();
646 
647  bool bad = false;
648  if (point->has_expectation) {
649  num_tested++;
650  double residx = result.x() - point->expectation.x();
651  double residy = result.y() - point->expectation.y();
652  double residz = result.z() - point->expectation.z();
653 
654  if (fabs(residx) > tolerance || fabs(residy) > tolerance || fabs(residz) > tolerance) {
655  num_bad++;
656  bad = true;
657  output << " BAD " << residx << " " << residy << " " << residz << std::endl;
658  }
659  else {
660  output << " GOOD " << residx << " " << residy << " " << residz << std::endl;
661  }
662  }
663  else {
664  output << " UNTESTED 0 0 0" << std::endl;
665  }
666 
667  if (printout == std::string("all") || (printout == std::string("bad") && bad)) {
668  std::cout << output.str();
669  }
670  }
671 
672  std::cout << std::endl << "SUMMARY transformed: " << num_transformed << " tested: " << num_tested << " bad: " << num_bad << " good: " << (num_tested - num_bad) << std::endl;
673 }
674 
675 //define this as a plug-in
std::vector< MuonGeometrySanityCheckPoint > m_points
int chamber() const
Definition: CSCDetId.h:70
type
Definition: HCALResponse.h:22
T getParameter(std::string const &) const
float dt
Definition: AMPTWrapper.h:126
std::map< std::string, const MuonGeometrySanityCheckCustomFrame * > m_frames
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
Entry const *const retrieveUnknown(char const *) const
const MuonGeometrySanityCheckCustomFrame * outputCustomFrame
DTSuperLayerId
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
T y() const
Definition: PV3DBase.h:57
#define abs(x)
Definition: mlp_lapack.h:159
#define NULL
Definition: scimark2.h:8
GlobalPoint transform(GlobalPoint point) const
virtual void analyze(const edm::Event &, const edm::EventSetup &iConfig)
int bad(Items const &cont)
int endcap() const
Definition: CSCDetId.h:95
int iEvent
Definition: GenABIO.cc:243
static const int CSC
Definition: MuonSubdetId.h:15
CLHEP::HepMatrix AlgebraicMatrix
std::pair< std::string, MonitorElement * > entry
Definition: ME_MAP.h:8
T z() const
Definition: PV3DBase.h:58
tuple result
Definition: query.py:137
MuonGeometrySanityCheckPoint(const edm::ParameterSet &iConfig, const std::map< std::string, const MuonGeometrySanityCheckCustomFrame * > &frames)
tuple input
Definition: collect_tpl.py:10
int ring() const
Definition: CSCDetId.h:77
Definition: DetId.h:20
MuonGeometrySanityCheckCustomFrame(const edm::ParameterSet &iConfig, std::string name)
CLHEP::HepVector AlgebraicVector
const T & get() const
Definition: EventSetup.h:55
GlobalPoint transformInverse(GlobalPoint point) const
Local3DPoint LocalPoint
Definition: LocalPoint.h:11
int station() const
Definition: CSCDetId.h:88
tuple cout
Definition: gather_cfg.py:41
static const int DT
Definition: MuonSubdetId.h:14
string s
Definition: asciidump.py:422
MuonGeometrySanityCheck(const edm::ParameterSet &iConfig)
T x() const
Definition: PV3DBase.h:56
*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