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