37 isHG_(mpReaderConfig_.getParameter<
bool>(
"isHG")) {
38 consumes<AlignmentToken, edm::InProcess>(
config.getParameter<
edm::InputTag>(
"alignmentTokenSrc"));
48 edm::LogInfo(
"MillePedeDQMModule") <<
"Booking histograms";
54 <<
"MillePedeDQMModule is configured as Low Granularity but the outputfolder is for High Granularity";
58 h_xPos = booker.
book1D(
"Xpos",
"Alignment fit #DeltaX;;#mum", 36, 0., 36.);
59 h_xRot = booker.
book1D(
"Xrot",
"Alignment fit #Delta#theta_{X};;#murad", 36, 0., 36.);
60 h_yPos = booker.
book1D(
"Ypos",
"Alignment fit #DeltaY;;#mum", 36, 0., 36.);
61 h_yRot = booker.
book1D(
"Yrot",
"Alignment fit #Delta#theta_{Y};;#murad", 36, 0., 36.);
62 h_zPos = booker.
book1D(
"Zpos",
"Alignment fit #DeltaZ;;#mum", 36, 0., 36.);
63 h_zRot = booker.
book1D(
"Zrot",
"Alignment fit #Delta#theta_{Z};;#murad", 36, 0., 36.);
64 statusResults = booker.
book2D(
"statusResults",
"Status of SiPixelAli PCL workflow;;", 6, 0., 6., 1, 0., 1.);
68 <<
"MillePedeDQMModule is configured as High Granularity but the outputfolder is for Low Granularity";
86 "Alignment fit #DeltaX for " +
layer.first +
";;#mum",
91 "Alignment fit #Delta#theta_{X} for " +
layer.first +
";;#murad",
96 "Alignment fit #DeltaY for " +
layer.first +
";;#mum",
101 "Alignment fit #Delta#theta_{Y} for " +
layer.first +
";;#murad",
106 "Alignment fit #DeltaZ for " +
layer.first +
";;#mum",
111 "Alignment fit #Delta#theta_{Z} for " +
layer.first +
";;#murad",
118 booker.
book2D(
"statusResults",
"Fraction threshold check for SiPixelAliHG PCL;;", 6, 0., 6., 10, 0., 10.);
133 throw cms::Exception(
"LogicError") <<
"@SUB=MillePedeDQMModule::dqmEndJob\n" 134 <<
"Try to read MillePede results before initializing MillePedeFileReader";
144 auto theResults =
mpReader_->getResults();
145 std::string exitCodeStr = theResults.getExitMessage();
149 vetoStr =
"DB Updated!";
151 if (theResults.isHighGranularity()) {
152 if (theResults.getDBVetoed() && theResults.getDBUpdated()) {
153 vetoStr =
"DB Update Vetoed";
158 if (theResults.exceedsCutoffs()) {
159 vetoStr =
"DB Update Vetoed";
189 auto myThresholds = std::make_shared<AlignPCLThresholdsHG>();
190 myThresholds->setAlignPCLThresholds(thresholds_->getNrecords(), thresholds_->getThreshold_Map());
191 myThresholds->setFloatMap(thresholds_->getFloatMap());
195 const auto trackerGeometry = builder.
build(geometricDet, ptitp, *ptp, tTopo);
196 tracker_ = std::make_unique<AlignableTracker>(trackerGeometry, tTopo);
206 mpReader_ = std::make_unique<MillePedeFileReader>(
211 TH2F* histo_status = statusHisto->
getTH2F();
212 auto theResults =
mpReader_->getResults();
214 histo_status->SetBinContent(1, 1, theResults.getDBUpdated());
215 histo_status->GetXaxis()->SetBinLabel(1,
"DB updated");
216 histo_status->SetBinContent(2, 1, theResults.exceedsCutoffs());
217 histo_status->GetXaxis()->SetBinLabel(2,
"significant movement");
218 histo_status->SetBinContent(3, 1, theResults.getDBVetoed());
219 histo_status->GetXaxis()->SetBinLabel(3,
"DB update vetoed");
220 histo_status->SetBinContent(4, 1, !theResults.exceedsThresholds());
221 histo_status->GetXaxis()->SetBinLabel(4,
"within max movement");
222 histo_status->SetBinContent(5, 1, !theResults.exceedsMaxError());
223 histo_status->GetXaxis()->SetBinLabel(5,
"within max error");
224 histo_status->SetBinContent(6, 1, !theResults.belowSignificance());
225 histo_status->GetXaxis()->SetBinLabel(6,
"above significance");
229 TH2F* histo_status = statusHisto->
getTH2F();
230 auto& theResults =
mpReader_->getResultsHG();
231 histo_status->GetXaxis()->SetBinLabel(1,
"#DeltaX");
232 histo_status->GetXaxis()->SetBinLabel(2,
"#DeltaY");
233 histo_status->GetXaxis()->SetBinLabel(3,
"#DeltaZ");
234 histo_status->GetXaxis()->SetBinLabel(4,
"#Delta#theta_{X}");
235 histo_status->GetXaxis()->SetBinLabel(5,
"#Delta#theta_{Y}");
236 histo_status->GetXaxis()->SetBinLabel(6,
"#Delta#theta_{Z}");
239 for (
const auto&
result : theResults) {
240 histo_status->GetYaxis()->SetBinLabel(
i + 1,
result.first.data());
241 for (std::size_t
j = 0;
j <
result.second.size(); ++
j) {
242 histo_status->SetBinContent(
j + 1,
i + 1,
result.second[
j]);
249 std::array<double, SIZE_INDEX> Xcut_, sigXcut_, maxMoveXcut_, maxErrorXcut_;
250 std::array<double, SIZE_INDEX> tXcut_, sigtXcut_, maxMovetXcut_, maxErrortXcut_;
252 std::array<double, SIZE_INDEX> Ycut_, sigYcut_, maxMoveYcut_, maxErrorYcut_;
253 std::array<double, SIZE_INDEX> tYcut_, sigtYcut_, maxMovetYcut_, maxErrortYcut_;
255 std::array<double, SIZE_INDEX> Zcut_, sigZcut_, maxMoveZcut_, maxErrorZcut_;
256 std::array<double, SIZE_INDEX> tZcut_, sigtZcut_, maxMovetZcut_, maxErrortZcut_;
258 auto myMap =
mpReader_->getThresholdMap();
260 std::vector<std::string> alignablesList;
261 for (
auto it = myMap.begin();
it != myMap.end(); ++
it) {
262 alignablesList.push_back(
it->first);
265 for (
auto& alignable : alignablesList) {
268 Xcut_[detIndex] = myMap[alignable].getXcut();
269 sigXcut_[detIndex] = myMap[alignable].getSigXcut();
270 maxMoveXcut_[detIndex] = myMap[alignable].getMaxMoveXcut();
271 maxErrorXcut_[detIndex] = myMap[alignable].getErrorXcut();
273 Ycut_[detIndex] = myMap[alignable].getYcut();
274 sigYcut_[detIndex] = myMap[alignable].getSigYcut();
275 maxMoveYcut_[detIndex] = myMap[alignable].getMaxMoveYcut();
276 maxErrorYcut_[detIndex] = myMap[alignable].getErrorYcut();
278 Zcut_[detIndex] = myMap[alignable].getZcut();
279 sigZcut_[detIndex] = myMap[alignable].getSigZcut();
280 maxMoveZcut_[detIndex] = myMap[alignable].getMaxMoveZcut();
281 maxErrorZcut_[detIndex] = myMap[alignable].getErrorZcut();
283 tXcut_[detIndex] = myMap[alignable].getThetaXcut();
284 sigtXcut_[detIndex] = myMap[alignable].getSigThetaXcut();
285 maxMovetXcut_[detIndex] = myMap[alignable].getMaxMoveThetaXcut();
286 maxErrortXcut_[detIndex] = myMap[alignable].getErrorThetaXcut();
288 tYcut_[detIndex] = myMap[alignable].getThetaYcut();
289 sigtYcut_[detIndex] = myMap[alignable].getSigThetaYcut();
290 maxMovetYcut_[detIndex] = myMap[alignable].getMaxMoveThetaYcut();
291 maxErrortYcut_[detIndex] = myMap[alignable].getErrorThetaYcut();
293 tZcut_[detIndex] = myMap[alignable].getThetaZcut();
294 sigtZcut_[detIndex] = myMap[alignable].getSigThetaZcut();
295 maxMovetZcut_[detIndex] = myMap[alignable].getMaxMoveThetaZcut();
296 maxErrortZcut_[detIndex] = myMap[alignable].getErrorThetaZcut();
313 const std::array<double, SIZE_INDEX>&
cut,
314 const std::array<double, SIZE_INDEX>&
sigCut,
315 const std::array<double, SIZE_INDEX>& maxMoveCut,
316 const std::array<double, SIZE_INDEX>& maxErrorCut,
317 const std::array<double, SIZE_LG_STRUCTS>& obs,
318 const std::array<double, SIZE_LG_STRUCTS>& obsErr) {
319 TH1F* histo_0 =
histo->getTH1F();
321 double max_ = *std::max_element(maxMoveCut.begin(), maxMoveCut.end());
323 histo_0->SetMinimum(-(max_));
324 histo_0->SetMaximum(max_);
335 for (
size_t i = 0;
i < obs.size(); ++
i) {
337 histo_0->SetBinContent(
i + 1, obs[
i]);
338 histo_0->SetBinError(
i + 1, obsErr[
i]);
342 histo_0->SetBinContent(8 +
i * 5,
cut[
i]);
345 histo_0->SetBinContent(9 +
i * 5,
sigCut[
i]);
348 histo_0->SetBinContent(10 +
i * 5, maxMoveCut[
i]);
351 histo_0->SetBinContent(11 +
i * 5, maxErrorCut[
i]);
356 std::array<double, SIZE_INDEX> Xcut_, sigXcut_, maxMoveXcut_, maxErrorXcut_;
357 std::array<double, SIZE_INDEX> tXcut_, sigtXcut_, maxMovetXcut_, maxErrortXcut_;
359 std::array<double, SIZE_INDEX> Ycut_, sigYcut_, maxMoveYcut_, maxErrorYcut_;
360 std::array<double, SIZE_INDEX> tYcut_, sigtYcut_, maxMovetYcut_, maxErrortYcut_;
362 std::array<double, SIZE_INDEX> Zcut_, sigZcut_, maxMoveZcut_, maxErrorZcut_;
363 std::array<double, SIZE_INDEX> tZcut_, sigtZcut_, maxMovetZcut_, maxErrortZcut_;
365 auto myMap =
mpReader_->getThresholdMap();
367 std::vector<std::string> alignablesList;
368 for (
auto it = myMap.begin();
it != myMap.end(); ++
it) {
369 alignablesList.push_back(
it->first);
372 for (
auto& alignable : alignablesList) {
375 Xcut_[detIndex] = myMap[alignable].getXcut();
376 sigXcut_[detIndex] = myMap[alignable].getSigXcut();
377 maxMoveXcut_[detIndex] = myMap[alignable].getMaxMoveXcut();
378 maxErrorXcut_[detIndex] = myMap[alignable].getErrorXcut();
380 Ycut_[detIndex] = myMap[alignable].getYcut();
381 sigYcut_[detIndex] = myMap[alignable].getSigYcut();
382 maxMoveYcut_[detIndex] = myMap[alignable].getMaxMoveYcut();
383 maxErrorYcut_[detIndex] = myMap[alignable].getErrorYcut();
385 Zcut_[detIndex] = myMap[alignable].getZcut();
386 sigZcut_[detIndex] = myMap[alignable].getSigZcut();
387 maxMoveZcut_[detIndex] = myMap[alignable].getMaxMoveZcut();
388 maxErrorZcut_[detIndex] = myMap[alignable].getErrorZcut();
390 tXcut_[detIndex] = myMap[alignable].getThetaXcut();
391 sigtXcut_[detIndex] = myMap[alignable].getSigThetaXcut();
392 maxMovetXcut_[detIndex] = myMap[alignable].getMaxMoveThetaXcut();
393 maxErrortXcut_[detIndex] = myMap[alignable].getErrorThetaXcut();
395 tYcut_[detIndex] = myMap[alignable].getThetaYcut();
396 sigtYcut_[detIndex] = myMap[alignable].getSigThetaYcut();
397 maxMovetYcut_[detIndex] = myMap[alignable].getMaxMoveThetaYcut();
398 maxErrortYcut_[detIndex] = myMap[alignable].getErrorThetaYcut();
400 tZcut_[detIndex] = myMap[alignable].getThetaZcut();
401 sigtZcut_[detIndex] = myMap[alignable].getSigThetaZcut();
402 maxMovetZcut_[detIndex] = myMap[alignable].getMaxMoveThetaZcut();
403 maxErrortZcut_[detIndex] = myMap[alignable].getErrorThetaZcut();
438 const std::array<double, SIZE_INDEX>&
cut,
439 const std::array<double, SIZE_INDEX>&
sigCut,
440 const std::array<double, SIZE_INDEX>& maxMoveCut,
441 const std::array<double, SIZE_INDEX>& maxErrorCut,
442 const std::array<double, SIZE_HG_STRUCTS>& obs,
443 const std::array<double, SIZE_HG_STRUCTS>& obsErr) {
449 TH1F* histo_0 = histo_map[
layer.first]->getTH1F();
457 histo_0->SetBinContent(
bin, obs[
i]);
458 histo_0->SetBinError(
bin, obsErr[
i]);
466 histo_0->SetBinContent(
bin + 1, 0);
467 histo_0->SetBinError(
bin + 1, 0);
470 if (
layer.first.find(
"Disk") != std::string::npos) {
473 histo_0->GetXaxis()->SetTitle(
"Panel");
477 histo_0->GetXaxis()->SetTitle(
"Ladder");
480 histo_0->SetBinContent(
bin + 2,
cut[detIndex]);
481 histo_0->SetBinError(
bin + 2, 0);
482 histo_0->SetBinContent(
bin + 3,
sigCut[detIndex]);
483 histo_0->SetBinError(
bin + 3, 0);
484 histo_0->SetBinContent(
bin + 4, maxMoveCut[detIndex]);
485 histo_0->SetBinError(
bin + 4, 0);
486 histo_0->SetBinContent(
bin + 5, maxErrorCut[detIndex]);
487 histo_0->SetBinError(
bin + 5, 0);
492 histo_0->SetMinimum(-(max_) * 1.2);
493 histo_0->SetMaximum(max_ * 1.2);
513 if (alignableId ==
"TPBHalfBarrelXminus") {
515 }
else if (alignableId ==
"TPBHalfBarrelXplus") {
517 }
else if (alignableId ==
"TPEHalfCylinderXminusZminus") {
519 }
else if (alignableId ==
"TPEHalfCylinderXplusZminus") {
521 }
else if (alignableId ==
"TPEHalfCylinderXminusZplus") {
523 }
else if (alignableId ==
"TPEHalfCylinderXplusZplus") {
525 }
else if (alignableId.rfind(
"TPBLadder", 0) == 0) {
527 }
else if (alignableId.rfind(
"TPEPanel", 0) == 0) {
530 throw cms::Exception(
"LogicError") <<
"@SUB=MillePedeDQMModule::getIndexFromString\n" 531 <<
"Retrieving conversion for not supported Alignable partition" << alignableId;
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
std::vector< std::pair< std::string, int > > layerVec
std::map< std::string, MonitorElement * > h_yPos_HG
void fillExpertHistos_HG()
virtual void setCurrentFolder(std::string const &fullpath)
std::vector< ParameterSet > VParameterSet
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
DQM Plotter for PCL-Alignment.
const edm::ESGetToken< GeometricDet, IdealGeometryRecord > gDetToken_
std::map< std::string, MonitorElement * > h_zRot_HG
MonitorElement * binariesAvalaible
MonitorElement * bookString(TString const &name, TString const &value, FUNC onbooking=NOOP())
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
void bookHistograms(DQMStore::IBooker &)
Abs< T >::type abs(const T &t)
std::map< std::string, MonitorElement * > h_xPos_HG
void beginRun(const edm::Run &, const edm::EventSetup &) override
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)
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())
MonitorElement * bookInt(TString const &name, FUNC onbooking=NOOP())
bool check(const edm::EventSetup &iSetup)
edm::ESWatcher< TrackerTopologyRcd > watchTrackerTopologyRcd_
edm::ESWatcher< PTrackerParametersRcd > watchPTrackerParametersRcd_
const edm::ESGetToken< PTrackerParameters, PTrackerParametersRcd > ptpToken_
std::unique_ptr< AlignableTracker > tracker_
std::unique_ptr< MillePedeFileReader > mpReader_
int getIndexFromString(const std::string &alignableId)
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
MonitorElement * exitCode
std::map< std::string, MonitorElement * > h_zPos_HG
~MillePedeDQMModule() override
const std::string outputFolder_
void fillStatusHistoHG(MonitorElement *statusHisto)
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)