CMS 3D CMS Logo

MillePedeDQMModule.cc
Go to the documentation of this file.
1 
9 /*** header-file ***/
11 
12 /*** ROOT objects ***/
13 #include "TH1F.h"
14 
15 /*** Core framework functionality ***/
18 
19 /*** Alignment ***/
23 
24 /*** Necessary Framework infrastructure ***/
27 
29  : tTopoToken_(esConsumes<edm::Transition::BeginRun>()),
30  gDetToken_(esConsumes<edm::Transition::BeginRun>()),
31  ptpToken_(esConsumes<edm::Transition::BeginRun>()),
32  aliThrToken_(esConsumes<edm::Transition::BeginRun>()),
33  geomToken_(esConsumes<edm::Transition::BeginRun>()),
34  mpReaderConfig_(config.getParameter<edm::ParameterSet>("MillePedeFileReader")),
35  isHG_(mpReaderConfig_.getParameter<bool>("isHG")) {
36  consumes<AlignmentToken, edm::InProcess>(config.getParameter<edm::InputTag>("alignmentTokenSrc"));
37 }
38 
40 
41 //=============================================================================
42 //=== INTERFACE IMPLEMENTATION ===
43 //=============================================================================
44 
46  edm::LogInfo("MillePedeDQMModule") << "Booking histograms";
47 
48  booker.cd();
49  if (!isHG_) {
50  booker.setCurrentFolder("AlCaReco/SiPixelAli/");
51  h_xPos = booker.book1D("Xpos", "Alignment fit #DeltaX;;#mum", 36, 0., 36.);
52  h_xRot = booker.book1D("Xrot", "Alignment fit #Delta#theta_{X};;#murad", 36, 0., 36.);
53  h_yPos = booker.book1D("Ypos", "Alignment fit #DeltaY;;#mum", 36, 0., 36.);
54  h_yRot = booker.book1D("Yrot", "Alignment fit #Delta#theta_{Y};;#murad", 36, 0., 36.);
55  h_zPos = booker.book1D("Zpos", "Alignment fit #DeltaZ;;#mum", 36, 0., 36.);
56  h_zRot = booker.book1D("Zrot", "Alignment fit #Delta#theta_{Z};;#murad", 36, 0., 36.);
57  statusResults = booker.book2D("statusResults", "Status of SiPixelAli PCL workflow;;", 6, 0., 6., 1, 0., 1.);
58  } else {
59  booker.setCurrentFolder("AlCaReco/SiPixelAliHG/");
60 
61  layerVec = {{"Layer1", pixelTopologyMap_->getPXBLadders(1)},
62  {"Layer2", pixelTopologyMap_->getPXBLadders(2)},
63  {"Layer3", pixelTopologyMap_->getPXBLadders(3)},
64  {"Layer4", pixelTopologyMap_->getPXBLadders(4)},
65  {"Disk-3", pixelTopologyMap_->getPXFBlades(-3) * 2},
66  {"Disk-2", pixelTopologyMap_->getPXFBlades(-2) * 2},
67  {"Disk-1", pixelTopologyMap_->getPXFBlades(-1) * 2},
68  {"Disk1", pixelTopologyMap_->getPXFBlades(1) * 2},
69  {"Disk2", pixelTopologyMap_->getPXFBlades(2) * 2},
70  {"Disk3", pixelTopologyMap_->getPXFBlades(3) * 2}};
71 
72  for (const auto& layer : layerVec) {
73  h_xPos_HG[layer.first] = booker.book1D("Xpos_HG_" + layer.first,
74  "Alignment fit #DeltaX for " + layer.first + ";;#mum",
75  layer.second + 5,
76  0.,
77  layer.second + 5);
78  h_xRot_HG[layer.first] = booker.book1D("Xrot_HG_" + layer.first,
79  "Alignment fit #Delta#theta_{X} for " + layer.first + ";;#murad",
80  layer.second + 5,
81  0.,
82  layer.second + 5);
83  h_yPos_HG[layer.first] = booker.book1D("Ypos_HG_" + layer.first,
84  "Alignment fit #DeltaY for " + layer.first + ";;#mum",
85  layer.second + 5,
86  0.,
87  layer.second + 5);
88  h_yRot_HG[layer.first] = booker.book1D("Yrot_HG_" + layer.first,
89  "Alignment fit #Delta#theta_{Y} for " + layer.first + ";;#murad",
90  layer.second + 5,
91  0.,
92  layer.second + 5);
93  h_zPos_HG[layer.first] = booker.book1D("Zpos_HG_" + layer.first,
94  "Alignment fit #DeltaZ for " + layer.first + ";;#mum",
95  layer.second + 5,
96  0.,
97  layer.second + 5);
98  h_zRot_HG[layer.first] = booker.book1D("Zrot_HG_" + layer.first,
99  "Alignment fit #Delta#theta_{Z} for " + layer.first + ";;#murad",
100  layer.second + 5,
101  0.,
102  layer.second + 5);
103  }
104 
105  statusResults =
106  booker.book2D("statusResults", "Fraction threshold check for SiPixelAliHG PCL;;", 6, 0., 6., 10, 0., 10.);
107  }
108 
109  binariesAvalaible = booker.bookInt("BinariesFound");
110  exitCode = booker.bookString("PedeExitCode", "");
111  isVetoed = booker.bookString("IsVetoed", "");
112 
113  booker.cd();
114 }
115 
117  bookHistograms(booker);
118  if (mpReader_) {
119  mpReader_->read();
120  } else {
121  throw cms::Exception("LogicError") << "@SUB=MillePedeDQMModule::dqmEndJob\n"
122  << "Try to read MillePede results before initializing MillePedeFileReader";
123  }
124  if (!isHG_) {
127  } else {
130  }
131  binariesAvalaible->Fill(mpReader_->binariesAmount());
132  auto theResults = mpReader_->getResults();
133  std::string exitCodeStr = theResults.getExitMessage();
134 
135  std::string vetoStr{};
136  if (mpReader_->storeAlignments()) {
137  vetoStr = "DB Updated!"; /* easy peasy, fait accompli an alignment is there */
138  } else {
139  if (theResults.isHighGranularity()) { /* HG case */
140  if (theResults.getDBVetoed() && theResults.getDBUpdated()) {
141  vetoStr = "DB Update Vetoed"; /* this can happen in the HG PCL case */
142  } else {
143  vetoStr = "N/A";
144  }
145  } else { /* LG case */
146  if (theResults.exceedsCutoffs()) {
147  vetoStr = "DB Update Vetoed"; /* this can happen in the LG PCL case */
148  } else {
149  vetoStr = "N/A";
150  } // if the alignment exceeds the cutoffs
151  } // LG case
152  } // if the alignment was not stored
153 
154  exitCode->Fill(exitCodeStr);
155  isVetoed->Fill(vetoStr);
156 }
157 
158 //=============================================================================
159 //=== PRIVATE METHOD IMPLEMENTATION ===
160 //=============================================================================
161 
163  if (!setupChanged(setup))
164  return;
165 
166  const TrackerTopology* const tTopo = &setup.getData(tTopoToken_);
167  const GeometricDet* geometricDet = &setup.getData(gDetToken_);
168  const PTrackerParameters* ptp = &setup.getData(ptpToken_);
169  const TrackerGeometry* geom = &setup.getData(geomToken_);
170 
171  pixelTopologyMap_ = std::make_shared<PixelTopologyMap>(geom, tTopo);
172 
173  // take the thresholds from DB
174  const auto& thresholds_ = &setup.getData(aliThrToken_);
175 
176  auto myThresholds = std::make_shared<AlignPCLThresholdsHG>();
177  myThresholds->setAlignPCLThresholds(thresholds_->getNrecords(), thresholds_->getThreshold_Map());
178  myThresholds->setFloatMap(thresholds_->getFloatMap());
179 
181 
182  const auto trackerGeometry = builder.build(geometricDet, *ptp, tTopo);
183  tracker_ = std::make_unique<AlignableTracker>(trackerGeometry, tTopo);
184 
185  const std::string labelerPlugin{"PedeLabeler"};
186  edm::ParameterSet labelerConfig{};
187  labelerConfig.addUntrackedParameter("plugin", labelerPlugin);
188  labelerConfig.addUntrackedParameter("RunRangeSelection", edm::VParameterSet{});
189 
190  std::shared_ptr<PedeLabelerBase> pedeLabeler{PedeLabelerPluginFactory::get()->create(
191  labelerPlugin, PedeLabelerBase::TopLevelAlignables(tracker_.get(), nullptr, nullptr), labelerConfig)};
192 
193  mpReader_ = std::make_unique<MillePedeFileReader>(
194  mpReaderConfig_, pedeLabeler, std::shared_ptr<const AlignPCLThresholdsHG>(myThresholds), pixelTopologyMap_);
195 }
196 
198  TH2F* histo_status = statusHisto->getTH2F();
199  auto theResults = mpReader_->getResults();
200  theResults.print();
201  histo_status->SetBinContent(1, 1, theResults.getDBUpdated());
202  histo_status->GetXaxis()->SetBinLabel(1, "DB updated");
203  histo_status->SetBinContent(2, 1, theResults.exceedsCutoffs());
204  histo_status->GetXaxis()->SetBinLabel(2, "significant movement");
205  histo_status->SetBinContent(3, 1, theResults.getDBVetoed());
206  histo_status->GetXaxis()->SetBinLabel(3, "DB update vetoed");
207  histo_status->SetBinContent(4, 1, !theResults.exceedsThresholds());
208  histo_status->GetXaxis()->SetBinLabel(4, "within max movement");
209  histo_status->SetBinContent(5, 1, !theResults.exceedsMaxError());
210  histo_status->GetXaxis()->SetBinLabel(5, "within max error");
211  histo_status->SetBinContent(6, 1, !theResults.belowSignificance());
212  histo_status->GetXaxis()->SetBinLabel(6, "above significance");
213 }
214 
216  TH2F* histo_status = statusHisto->getTH2F();
217  auto& theResults = mpReader_->getResultsHG();
218  histo_status->GetXaxis()->SetBinLabel(1, "#DeltaX");
219  histo_status->GetXaxis()->SetBinLabel(2, "#DeltaY");
220  histo_status->GetXaxis()->SetBinLabel(3, "#DeltaZ");
221  histo_status->GetXaxis()->SetBinLabel(4, "#Delta#theta_{X}");
222  histo_status->GetXaxis()->SetBinLabel(5, "#Delta#theta_{Y}");
223  histo_status->GetXaxis()->SetBinLabel(6, "#Delta#theta_{Z}");
224 
225  int i = 0;
226  for (const auto& result : theResults) {
227  histo_status->GetYaxis()->SetBinLabel(i + 1, result.first.data());
228  for (std::size_t j = 0; j < result.second.size(); ++j) {
229  histo_status->SetBinContent(j + 1, i + 1, result.second[j]);
230  }
231  i++;
232  }
233 }
234 
236  std::array<double, SIZE_INDEX> Xcut_, sigXcut_, maxMoveXcut_, maxErrorXcut_;
237  std::array<double, SIZE_INDEX> tXcut_, sigtXcut_, maxMovetXcut_, maxErrortXcut_;
238 
239  std::array<double, SIZE_INDEX> Ycut_, sigYcut_, maxMoveYcut_, maxErrorYcut_;
240  std::array<double, SIZE_INDEX> tYcut_, sigtYcut_, maxMovetYcut_, maxErrortYcut_;
241 
242  std::array<double, SIZE_INDEX> Zcut_, sigZcut_, maxMoveZcut_, maxErrorZcut_;
243  std::array<double, SIZE_INDEX> tZcut_, sigtZcut_, maxMovetZcut_, maxErrortZcut_;
244 
245  auto myMap = mpReader_->getThresholdMap();
246 
247  std::vector<std::string> alignablesList;
248  for (auto it = myMap.begin(); it != myMap.end(); ++it) {
249  alignablesList.push_back(it->first);
250  }
251 
252  for (auto& alignable : alignablesList) {
253  int detIndex = getIndexFromString(alignable);
254 
255  Xcut_[detIndex] = myMap[alignable].getXcut();
256  sigXcut_[detIndex] = myMap[alignable].getSigXcut();
257  maxMoveXcut_[detIndex] = myMap[alignable].getMaxMoveXcut();
258  maxErrorXcut_[detIndex] = myMap[alignable].getErrorXcut();
259 
260  Ycut_[detIndex] = myMap[alignable].getYcut();
261  sigYcut_[detIndex] = myMap[alignable].getSigYcut();
262  maxMoveYcut_[detIndex] = myMap[alignable].getMaxMoveYcut();
263  maxErrorYcut_[detIndex] = myMap[alignable].getErrorYcut();
264 
265  Zcut_[detIndex] = myMap[alignable].getZcut();
266  sigZcut_[detIndex] = myMap[alignable].getSigZcut();
267  maxMoveZcut_[detIndex] = myMap[alignable].getMaxMoveZcut();
268  maxErrorZcut_[detIndex] = myMap[alignable].getErrorZcut();
269 
270  tXcut_[detIndex] = myMap[alignable].getThetaXcut();
271  sigtXcut_[detIndex] = myMap[alignable].getSigThetaXcut();
272  maxMovetXcut_[detIndex] = myMap[alignable].getMaxMoveThetaXcut();
273  maxErrortXcut_[detIndex] = myMap[alignable].getErrorThetaXcut();
274 
275  tYcut_[detIndex] = myMap[alignable].getThetaYcut();
276  sigtYcut_[detIndex] = myMap[alignable].getSigThetaYcut();
277  maxMovetYcut_[detIndex] = myMap[alignable].getMaxMoveThetaYcut();
278  maxErrortYcut_[detIndex] = myMap[alignable].getErrorThetaYcut();
279 
280  tZcut_[detIndex] = myMap[alignable].getThetaZcut();
281  sigtZcut_[detIndex] = myMap[alignable].getSigThetaZcut();
282  maxMovetZcut_[detIndex] = myMap[alignable].getMaxMoveThetaZcut();
283  maxErrortZcut_[detIndex] = myMap[alignable].getErrorThetaZcut();
284  }
285 
286  fillExpertHisto(h_xPos, Xcut_, sigXcut_, maxMoveXcut_, maxErrorXcut_, mpReader_->getXobs(), mpReader_->getXobsErr());
288  h_xRot, tXcut_, sigtXcut_, maxMovetXcut_, maxErrortXcut_, mpReader_->getTXobs(), mpReader_->getTXobsErr());
289 
290  fillExpertHisto(h_yPos, Ycut_, sigYcut_, maxMoveYcut_, maxErrorYcut_, mpReader_->getYobs(), mpReader_->getYobsErr());
292  h_yRot, tYcut_, sigtYcut_, maxMovetYcut_, maxErrortYcut_, mpReader_->getTYobs(), mpReader_->getTYobsErr());
293 
294  fillExpertHisto(h_zPos, Zcut_, sigZcut_, maxMoveZcut_, maxErrorZcut_, mpReader_->getZobs(), mpReader_->getZobsErr());
296  h_zRot, tZcut_, sigtZcut_, maxMovetZcut_, maxErrortZcut_, mpReader_->getTZobs(), mpReader_->getTZobsErr());
297 }
298 
300  const std::array<double, SIZE_INDEX>& cut,
301  const std::array<double, SIZE_INDEX>& sigCut,
302  const std::array<double, SIZE_INDEX>& maxMoveCut,
303  const std::array<double, SIZE_INDEX>& maxErrorCut,
304  const std::array<double, SIZE_LG_STRUCTS>& obs,
305  const std::array<double, SIZE_LG_STRUCTS>& obsErr) {
306  TH1F* histo_0 = histo->getTH1F();
307 
308  double max_ = *std::max_element(maxMoveCut.begin(), maxMoveCut.end());
309 
310  histo_0->SetMinimum(-(max_));
311  histo_0->SetMaximum(max_);
312 
313  // Schematics of the bin contents
314  //
315  // XX XX XX XX XX XX OO OO OO OO II II II II
316  // |--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|
317  // | 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|12|13|14|15|16|17| ...
318  //
319  // |-----------------| |-----------| |-----------|
320  // |observed movement| |thresholds1| |thresholds2|
321 
322  for (size_t i = 0; i < obs.size(); ++i) {
323  // fist obs.size() bins for observed movements
324  histo_0->SetBinContent(i + 1, obs[i]);
325  histo_0->SetBinError(i + 1, obsErr[i]);
326 
327  // then at bin 8,8+5,8+10,... for cutoffs
328  // 5 bins is the space allocated for the 4 other thresholds + 1 empty separation bin
329  histo_0->SetBinContent(8 + i * 5, cut[i]);
330 
331  // then at bin 9,9+5,9+10,... for significances
332  histo_0->SetBinContent(9 + i * 5, sigCut[i]);
333 
334  // then at bin 10,10+5,10+10,... for maximum movements
335  histo_0->SetBinContent(10 + i * 5, maxMoveCut[i]);
336 
337  // then at bin 11,11+5,11+10,... for maximum errors
338  histo_0->SetBinContent(11 + i * 5, maxErrorCut[i]);
339  }
340 }
341 
343  std::array<double, SIZE_INDEX> Xcut_, sigXcut_, maxMoveXcut_, maxErrorXcut_;
344  std::array<double, SIZE_INDEX> tXcut_, sigtXcut_, maxMovetXcut_, maxErrortXcut_;
345 
346  std::array<double, SIZE_INDEX> Ycut_, sigYcut_, maxMoveYcut_, maxErrorYcut_;
347  std::array<double, SIZE_INDEX> tYcut_, sigtYcut_, maxMovetYcut_, maxErrortYcut_;
348 
349  std::array<double, SIZE_INDEX> Zcut_, sigZcut_, maxMoveZcut_, maxErrorZcut_;
350  std::array<double, SIZE_INDEX> tZcut_, sigtZcut_, maxMovetZcut_, maxErrortZcut_;
351 
352  auto myMap = mpReader_->getThresholdMap();
353 
354  std::vector<std::string> alignablesList;
355  for (auto it = myMap.begin(); it != myMap.end(); ++it) {
356  alignablesList.push_back(it->first);
357  }
358 
359  for (auto& alignable : alignablesList) {
360  int detIndex = getIndexFromString(alignable);
361 
362  Xcut_[detIndex] = myMap[alignable].getXcut();
363  sigXcut_[detIndex] = myMap[alignable].getSigXcut();
364  maxMoveXcut_[detIndex] = myMap[alignable].getMaxMoveXcut();
365  maxErrorXcut_[detIndex] = myMap[alignable].getErrorXcut();
366 
367  Ycut_[detIndex] = myMap[alignable].getYcut();
368  sigYcut_[detIndex] = myMap[alignable].getSigYcut();
369  maxMoveYcut_[detIndex] = myMap[alignable].getMaxMoveYcut();
370  maxErrorYcut_[detIndex] = myMap[alignable].getErrorYcut();
371 
372  Zcut_[detIndex] = myMap[alignable].getZcut();
373  sigZcut_[detIndex] = myMap[alignable].getSigZcut();
374  maxMoveZcut_[detIndex] = myMap[alignable].getMaxMoveZcut();
375  maxErrorZcut_[detIndex] = myMap[alignable].getErrorZcut();
376 
377  tXcut_[detIndex] = myMap[alignable].getThetaXcut();
378  sigtXcut_[detIndex] = myMap[alignable].getSigThetaXcut();
379  maxMovetXcut_[detIndex] = myMap[alignable].getMaxMoveThetaXcut();
380  maxErrortXcut_[detIndex] = myMap[alignable].getErrorThetaXcut();
381 
382  tYcut_[detIndex] = myMap[alignable].getThetaYcut();
383  sigtYcut_[detIndex] = myMap[alignable].getSigThetaYcut();
384  maxMovetYcut_[detIndex] = myMap[alignable].getMaxMoveThetaYcut();
385  maxErrortYcut_[detIndex] = myMap[alignable].getErrorThetaYcut();
386 
387  tZcut_[detIndex] = myMap[alignable].getThetaZcut();
388  sigtZcut_[detIndex] = myMap[alignable].getSigThetaZcut();
389  maxMovetZcut_[detIndex] = myMap[alignable].getMaxMoveThetaZcut();
390  maxErrortZcut_[detIndex] = myMap[alignable].getErrorThetaZcut();
391  }
392 
394  h_xPos_HG, Xcut_, sigXcut_, maxMoveXcut_, maxErrorXcut_, mpReader_->getXobs_HG(), mpReader_->getXobsErr_HG());
396  tXcut_,
397  sigtXcut_,
398  maxMovetXcut_,
399  maxErrortXcut_,
400  mpReader_->getTXobs_HG(),
401  mpReader_->getTXobsErr_HG());
402 
404  h_yPos_HG, Ycut_, sigYcut_, maxMoveYcut_, maxErrorYcut_, mpReader_->getYobs_HG(), mpReader_->getYobsErr_HG());
406  tYcut_,
407  sigtYcut_,
408  maxMovetYcut_,
409  maxErrortYcut_,
410  mpReader_->getTYobs_HG(),
411  mpReader_->getTYobsErr_HG());
412 
414  h_zPos_HG, Zcut_, sigZcut_, maxMoveZcut_, maxErrorZcut_, mpReader_->getZobs_HG(), mpReader_->getZobsErr_HG());
416  tZcut_,
417  sigtZcut_,
418  maxMovetZcut_,
419  maxErrortZcut_,
420  mpReader_->getTZobs_HG(),
421  mpReader_->getTZobsErr_HG());
422 }
423 
424 void MillePedeDQMModule ::fillExpertHisto_HG(std::map<std::string, MonitorElement*>& histo_map,
425  const std::array<double, SIZE_INDEX>& cut,
426  const std::array<double, SIZE_INDEX>& sigCut,
427  const std::array<double, SIZE_INDEX>& maxMoveCut,
428  const std::array<double, SIZE_INDEX>& maxErrorCut,
429  const std::array<double, SIZE_HG_STRUCTS>& obs,
430  const std::array<double, SIZE_HG_STRUCTS>& obsErr) {
431  int currentStart = 0;
432  int bin = 0;
433  double max_ = 0;
434 
435  for (const auto& layer : layerVec) {
436  TH1F* histo_0 = histo_map[layer.first]->getTH1F();
437 
438  max_ = -1;
439  for (int i = currentStart; i < (currentStart + layer.second); ++i) {
440  // first obs.size() bins for observed movements
441  bin = i - currentStart + 1;
442 
443  // fill observed values
444  histo_0->SetBinContent(bin, obs[i]);
445  histo_0->SetBinError(bin, obsErr[i]);
446 
447  if (std::abs(obs[i]) > max_) {
448  max_ = std::abs(obs[i]);
449  }
450  }
451 
452  // five extra bins at the end, one empty, one with threshold, one with sigCut, one with maxMoveCut, one with MaxErrorCut
453  histo_0->SetBinContent(bin + 1, 0);
454  histo_0->SetBinError(bin + 1, 0);
455 
456  int detIndex;
457  if (layer.first.find("Disk") != std::string::npos) {
458  // 7 is the detId for panels, see getIndexFromString
459  detIndex = 7;
460  histo_0->GetXaxis()->SetTitle("Panel");
461  } else {
462  // 6 is the detId for ladders, see getIndexFromString
463  detIndex = 6;
464  histo_0->GetXaxis()->SetTitle("Ladder");
465  }
466 
467  histo_0->SetBinContent(bin + 2, cut[detIndex]);
468  histo_0->SetBinError(bin + 2, 0);
469  histo_0->SetBinContent(bin + 3, sigCut[detIndex]);
470  histo_0->SetBinError(bin + 3, 0);
471  histo_0->SetBinContent(bin + 4, maxMoveCut[detIndex]);
472  histo_0->SetBinError(bin + 4, 0);
473  histo_0->SetBinContent(bin + 5, maxErrorCut[detIndex]);
474  histo_0->SetBinError(bin + 5, 0);
475 
476  // always scale so the cutoff is visible
477  max_ = std::max(cut[detIndex] * 1.2, max_);
478 
479  histo_0->SetMinimum(-(max_)*1.2);
480  histo_0->SetMaximum(max_ * 1.2);
481 
482  currentStart += layer.second;
483  }
484 }
485 
487  bool changed{false};
488 
490  changed = true;
492  changed = true;
494  changed = true;
495 
496  return changed;
497 }
498 
500  if (alignableId == "TPBHalfBarrelXminus") {
501  return 3;
502  } else if (alignableId == "TPBHalfBarrelXplus") {
503  return 2;
504  } else if (alignableId == "TPEHalfCylinderXminusZminus") {
505  return 1;
506  } else if (alignableId == "TPEHalfCylinderXplusZminus") {
507  return 0;
508  } else if (alignableId == "TPEHalfCylinderXminusZplus") {
509  return 5;
510  } else if (alignableId == "TPEHalfCylinderXplusZplus") {
511  return 4;
512  } else if (alignableId.rfind("TPBLadder", 0) == 0) {
513  return 6;
514  } else if (alignableId.rfind("TPEPanel", 0) == 0) {
515  return 7;
516  } else {
517  throw cms::Exception("LogicError") << "@SUB=MillePedeDQMModule::getIndexFromString\n"
518  << "Retrieving conversion for not supported Alignable partition" << alignableId;
519  }
520 }
void fillExpertHisto(MonitorElement *histo, const std::array< double, SIZE_INDEX > &cut, const std::array< double, SIZE_INDEX > &sigCut, const std::array< double, SIZE_INDEX > &maxMoveCut, const std::array< double, SIZE_INDEX > &maxErrorCut, const std::array< double, SIZE_LG_STRUCTS > &obs, const std::array< double, SIZE_LG_STRUCTS > &obsErr)
const edm::ParameterSet mpReaderConfig_
void fillStatusHisto(MonitorElement *statusHisto)
std::map< std::string, MonitorElement * > h_xRot_HG
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
std::vector< std::pair< std::string, int > > layerVec
std::map< std::string, MonitorElement * > h_yPos_HG
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
std::vector< ParameterSet > VParameterSet
Definition: ParameterSet.h:34
bool setupChanged(const edm::EventSetup &)
void dqmEndJob(DQMStore::IBooker &, DQMStore::IGetter &) override
MonitorElement * h_zPos
DQM Plotter for PCL-Alignment.
TrackerGeometry * build(const GeometricDet *gd, const PTrackerParameters &ptp, const TrackerTopology *tTopo)
const edm::ESGetToken< GeometricDet, IdealGeometryRecord > gDetToken_
Definition: config.py:1
std::map< std::string, MonitorElement * > h_zRot_HG
MonitorElement * binariesAvalaible
MonitorElement * bookString(TString const &name, TString const &value, FUNC onbooking=NOOP())
Definition: DQMStore.h:87
constexpr std::array< uint8_t, layerIndexSize< TrackerTraits > > layer
void Fill(long long x)
virtual TH2F * getTH2F() const
edm::ESWatcher< IdealGeometryRecord > watchIdealGeometryRcd_
MonitorElement * isVetoed
MillePedeDQMModule(const edm::ParameterSet &)
std::map< std::string, MonitorElement * > h_yRot_HG
void bookHistograms(DQMStore::IBooker &)
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
Transition
Definition: Transition.h:12
std::map< std::string, MonitorElement * > h_xPos_HG
MonitorElement * h_xPos
void beginRun(const edm::Run &, const edm::EventSetup &) override
MonitorElement * h_yPos
Log< level::Info, false > LogInfo
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > tTopoToken_
std::shared_ptr< PixelTopologyMap > pixelTopologyMap_
void addUntrackedParameter(std::string const &name, T const &value)
Definition: ParameterSet.h:192
const edm::ESGetToken< AlignPCLThresholdsHG, AlignPCLThresholdsHGRcd > aliThrToken_
MonitorElement * statusResults
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
Definition: DQMStore.h:212
MonitorElement * bookInt(TString const &name, FUNC onbooking=NOOP())
Definition: DQMStore.h:73
bool check(const edm::EventSetup &iSetup)
Definition: ESWatcher.h:57
edm::ESWatcher< TrackerTopologyRcd > watchTrackerTopologyRcd_
int currentStart
Definition: mps_splice.py:66
edm::ESWatcher< PTrackerParametersRcd > watchPTrackerParametersRcd_
MonitorElement * h_xRot
HLT enums.
const edm::ESGetToken< PTrackerParameters, PTrackerParametersRcd > ptpToken_
std::unique_ptr< AlignableTracker > tracker_
std::unique_ptr< MillePedeFileReader > mpReader_
int getIndexFromString(const std::string &alignableId)
#define get
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
MonitorElement * h_zRot
MonitorElement * exitCode
std::map< std::string, MonitorElement * > h_zPos_HG
~MillePedeDQMModule() override
void fillStatusHistoHG(MonitorElement *statusHisto)
MonitorElement * h_yRot
Definition: Run.h:45
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > geomToken_
void fillExpertHisto_HG(std::map< std::string, MonitorElement *> &histo_map, const std::array< double, SIZE_INDEX > &cut, const std::array< double, SIZE_INDEX > &sigCut, const std::array< double, SIZE_INDEX > &maxMoveCut, const std::array< double, SIZE_INDEX > &maxErrorCut, const std::array< double, SIZE_HG_STRUCTS > &obs, const std::array< double, SIZE_HG_STRUCTS > &obsErr)