36 isHG_(mpReaderConfig_.getParameter<
bool>(
"isHG")) {
37 consumes<AlignmentToken, edm::InProcess>(
config.getParameter<
edm::InputTag>(
"alignmentTokenSrc"));
47 edm::LogInfo(
"MillePedeDQMModule") <<
"Booking histograms";
52 h_xPos = booker.
book1D(
"Xpos",
"Alignment fit #DeltaX;;#mum", 36, 0., 36.);
53 h_xRot = booker.
book1D(
"Xrot",
"Alignment fit #Delta#theta_{X};;#murad", 36, 0., 36.);
54 h_yPos = booker.
book1D(
"Ypos",
"Alignment fit #DeltaY;;#mum", 36, 0., 36.);
55 h_yRot = booker.
book1D(
"Yrot",
"Alignment fit #Delta#theta_{Y};;#murad", 36, 0., 36.);
56 h_zPos = booker.
book1D(
"Zpos",
"Alignment fit #DeltaZ;;#mum", 36, 0., 36.);
57 h_zRot = booker.
book1D(
"Zrot",
"Alignment fit #Delta#theta_{Z};;#murad", 36, 0., 36.);
58 statusResults = booker.
book2D(
"statusResults",
"Status of SiPixelAli PCL workflow;;", 6, 0., 6., 1, 0., 1.);
75 "Alignment fit #DeltaX for " +
layer.first +
";;#mum",
80 "Alignment fit #Delta#theta_{X} for " +
layer.first +
";;#murad",
85 "Alignment fit #DeltaY for " +
layer.first +
";;#mum",
90 "Alignment fit #Delta#theta_{Y} for " +
layer.first +
";;#murad",
95 "Alignment fit #DeltaZ for " +
layer.first +
";;#mum",
100 "Alignment fit #Delta#theta_{Z} for " +
layer.first +
";;#murad",
107 booker.
book2D(
"statusResults",
"Fraction threshold check for SiPixelAliHG PCL;;", 6, 0., 6., 10, 0., 10.);
122 throw cms::Exception(
"LogicError") <<
"@SUB=MillePedeDQMModule::dqmEndJob\n" 123 <<
"Try to read MillePede results before initializing MillePedeFileReader";
133 auto theResults =
mpReader_->getResults();
134 std::string exitCodeStr = theResults.getExitMessage();
138 vetoStr =
"DB Updated!";
140 if (theResults.isHighGranularity()) {
141 if (theResults.getDBVetoed() && theResults.getDBUpdated()) {
142 vetoStr =
"DB Update Vetoed";
147 if (theResults.exceedsCutoffs()) {
148 vetoStr =
"DB Update Vetoed";
178 auto myThresholds = std::make_shared<AlignPCLThresholdsHG>();
179 myThresholds->setAlignPCLThresholds(thresholds_->getNrecords(), thresholds_->getThreshold_Map());
180 myThresholds->setFloatMap(thresholds_->getFloatMap());
184 const auto trackerGeometry = builder.
build(geometricDet, ptitp, *ptp, tTopo);
185 tracker_ = std::make_unique<AlignableTracker>(trackerGeometry, tTopo);
195 mpReader_ = std::make_unique<MillePedeFileReader>(
200 TH2F* histo_status = statusHisto->
getTH2F();
201 auto theResults =
mpReader_->getResults();
203 histo_status->SetBinContent(1, 1, theResults.getDBUpdated());
204 histo_status->GetXaxis()->SetBinLabel(1,
"DB updated");
205 histo_status->SetBinContent(2, 1, theResults.exceedsCutoffs());
206 histo_status->GetXaxis()->SetBinLabel(2,
"significant movement");
207 histo_status->SetBinContent(3, 1, theResults.getDBVetoed());
208 histo_status->GetXaxis()->SetBinLabel(3,
"DB update vetoed");
209 histo_status->SetBinContent(4, 1, !theResults.exceedsThresholds());
210 histo_status->GetXaxis()->SetBinLabel(4,
"within max movement");
211 histo_status->SetBinContent(5, 1, !theResults.exceedsMaxError());
212 histo_status->GetXaxis()->SetBinLabel(5,
"within max error");
213 histo_status->SetBinContent(6, 1, !theResults.belowSignificance());
214 histo_status->GetXaxis()->SetBinLabel(6,
"above significance");
218 TH2F* histo_status = statusHisto->
getTH2F();
219 auto& theResults =
mpReader_->getResultsHG();
220 histo_status->GetXaxis()->SetBinLabel(1,
"#DeltaX");
221 histo_status->GetXaxis()->SetBinLabel(2,
"#DeltaY");
222 histo_status->GetXaxis()->SetBinLabel(3,
"#DeltaZ");
223 histo_status->GetXaxis()->SetBinLabel(4,
"#Delta#theta_{X}");
224 histo_status->GetXaxis()->SetBinLabel(5,
"#Delta#theta_{Y}");
225 histo_status->GetXaxis()->SetBinLabel(6,
"#Delta#theta_{Z}");
228 for (
const auto&
result : theResults) {
229 histo_status->GetYaxis()->SetBinLabel(
i + 1,
result.first.data());
230 for (std::size_t
j = 0;
j <
result.second.size(); ++
j) {
231 histo_status->SetBinContent(
j + 1,
i + 1,
result.second[
j]);
238 std::array<double, SIZE_INDEX> Xcut_, sigXcut_, maxMoveXcut_, maxErrorXcut_;
239 std::array<double, SIZE_INDEX> tXcut_, sigtXcut_, maxMovetXcut_, maxErrortXcut_;
241 std::array<double, SIZE_INDEX> Ycut_, sigYcut_, maxMoveYcut_, maxErrorYcut_;
242 std::array<double, SIZE_INDEX> tYcut_, sigtYcut_, maxMovetYcut_, maxErrortYcut_;
244 std::array<double, SIZE_INDEX> Zcut_, sigZcut_, maxMoveZcut_, maxErrorZcut_;
245 std::array<double, SIZE_INDEX> tZcut_, sigtZcut_, maxMovetZcut_, maxErrortZcut_;
247 auto myMap =
mpReader_->getThresholdMap();
249 std::vector<std::string> alignablesList;
250 for (
auto it = myMap.begin(); it != myMap.end(); ++it) {
251 alignablesList.push_back(it->first);
254 for (
auto& alignable : alignablesList) {
257 Xcut_[detIndex] = myMap[alignable].getXcut();
258 sigXcut_[detIndex] = myMap[alignable].getSigXcut();
259 maxMoveXcut_[detIndex] = myMap[alignable].getMaxMoveXcut();
260 maxErrorXcut_[detIndex] = myMap[alignable].getErrorXcut();
262 Ycut_[detIndex] = myMap[alignable].getYcut();
263 sigYcut_[detIndex] = myMap[alignable].getSigYcut();
264 maxMoveYcut_[detIndex] = myMap[alignable].getMaxMoveYcut();
265 maxErrorYcut_[detIndex] = myMap[alignable].getErrorYcut();
267 Zcut_[detIndex] = myMap[alignable].getZcut();
268 sigZcut_[detIndex] = myMap[alignable].getSigZcut();
269 maxMoveZcut_[detIndex] = myMap[alignable].getMaxMoveZcut();
270 maxErrorZcut_[detIndex] = myMap[alignable].getErrorZcut();
272 tXcut_[detIndex] = myMap[alignable].getThetaXcut();
273 sigtXcut_[detIndex] = myMap[alignable].getSigThetaXcut();
274 maxMovetXcut_[detIndex] = myMap[alignable].getMaxMoveThetaXcut();
275 maxErrortXcut_[detIndex] = myMap[alignable].getErrorThetaXcut();
277 tYcut_[detIndex] = myMap[alignable].getThetaYcut();
278 sigtYcut_[detIndex] = myMap[alignable].getSigThetaYcut();
279 maxMovetYcut_[detIndex] = myMap[alignable].getMaxMoveThetaYcut();
280 maxErrortYcut_[detIndex] = myMap[alignable].getErrorThetaYcut();
282 tZcut_[detIndex] = myMap[alignable].getThetaZcut();
283 sigtZcut_[detIndex] = myMap[alignable].getSigThetaZcut();
284 maxMovetZcut_[detIndex] = myMap[alignable].getMaxMoveThetaZcut();
285 maxErrortZcut_[detIndex] = myMap[alignable].getErrorThetaZcut();
302 const std::array<double, SIZE_INDEX>&
cut,
303 const std::array<double, SIZE_INDEX>&
sigCut,
304 const std::array<double, SIZE_INDEX>& maxMoveCut,
305 const std::array<double, SIZE_INDEX>& maxErrorCut,
306 const std::array<double, SIZE_LG_STRUCTS>& obs,
307 const std::array<double, SIZE_LG_STRUCTS>& obsErr) {
308 TH1F* histo_0 =
histo->getTH1F();
310 double max_ = *std::max_element(maxMoveCut.begin(), maxMoveCut.end());
312 histo_0->SetMinimum(-(max_));
313 histo_0->SetMaximum(max_);
324 for (
size_t i = 0;
i < obs.size(); ++
i) {
326 histo_0->SetBinContent(
i + 1, obs[
i]);
327 histo_0->SetBinError(
i + 1, obsErr[
i]);
331 histo_0->SetBinContent(8 +
i * 5,
cut[
i]);
334 histo_0->SetBinContent(9 +
i * 5,
sigCut[
i]);
337 histo_0->SetBinContent(10 +
i * 5, maxMoveCut[
i]);
340 histo_0->SetBinContent(11 +
i * 5, maxErrorCut[
i]);
345 std::array<double, SIZE_INDEX> Xcut_, sigXcut_, maxMoveXcut_, maxErrorXcut_;
346 std::array<double, SIZE_INDEX> tXcut_, sigtXcut_, maxMovetXcut_, maxErrortXcut_;
348 std::array<double, SIZE_INDEX> Ycut_, sigYcut_, maxMoveYcut_, maxErrorYcut_;
349 std::array<double, SIZE_INDEX> tYcut_, sigtYcut_, maxMovetYcut_, maxErrortYcut_;
351 std::array<double, SIZE_INDEX> Zcut_, sigZcut_, maxMoveZcut_, maxErrorZcut_;
352 std::array<double, SIZE_INDEX> tZcut_, sigtZcut_, maxMovetZcut_, maxErrortZcut_;
354 auto myMap =
mpReader_->getThresholdMap();
356 std::vector<std::string> alignablesList;
357 for (
auto it = myMap.begin(); it != myMap.end(); ++it) {
358 alignablesList.push_back(it->first);
361 for (
auto& alignable : alignablesList) {
364 Xcut_[detIndex] = myMap[alignable].getXcut();
365 sigXcut_[detIndex] = myMap[alignable].getSigXcut();
366 maxMoveXcut_[detIndex] = myMap[alignable].getMaxMoveXcut();
367 maxErrorXcut_[detIndex] = myMap[alignable].getErrorXcut();
369 Ycut_[detIndex] = myMap[alignable].getYcut();
370 sigYcut_[detIndex] = myMap[alignable].getSigYcut();
371 maxMoveYcut_[detIndex] = myMap[alignable].getMaxMoveYcut();
372 maxErrorYcut_[detIndex] = myMap[alignable].getErrorYcut();
374 Zcut_[detIndex] = myMap[alignable].getZcut();
375 sigZcut_[detIndex] = myMap[alignable].getSigZcut();
376 maxMoveZcut_[detIndex] = myMap[alignable].getMaxMoveZcut();
377 maxErrorZcut_[detIndex] = myMap[alignable].getErrorZcut();
379 tXcut_[detIndex] = myMap[alignable].getThetaXcut();
380 sigtXcut_[detIndex] = myMap[alignable].getSigThetaXcut();
381 maxMovetXcut_[detIndex] = myMap[alignable].getMaxMoveThetaXcut();
382 maxErrortXcut_[detIndex] = myMap[alignable].getErrorThetaXcut();
384 tYcut_[detIndex] = myMap[alignable].getThetaYcut();
385 sigtYcut_[detIndex] = myMap[alignable].getSigThetaYcut();
386 maxMovetYcut_[detIndex] = myMap[alignable].getMaxMoveThetaYcut();
387 maxErrortYcut_[detIndex] = myMap[alignable].getErrorThetaYcut();
389 tZcut_[detIndex] = myMap[alignable].getThetaZcut();
390 sigtZcut_[detIndex] = myMap[alignable].getSigThetaZcut();
391 maxMovetZcut_[detIndex] = myMap[alignable].getMaxMoveThetaZcut();
392 maxErrortZcut_[detIndex] = myMap[alignable].getErrorThetaZcut();
427 const std::array<double, SIZE_INDEX>&
cut,
428 const std::array<double, SIZE_INDEX>&
sigCut,
429 const std::array<double, SIZE_INDEX>& maxMoveCut,
430 const std::array<double, SIZE_INDEX>& maxErrorCut,
431 const std::array<double, SIZE_HG_STRUCTS>& obs,
432 const std::array<double, SIZE_HG_STRUCTS>& obsErr) {
438 TH1F* histo_0 = histo_map[
layer.first]->getTH1F();
446 histo_0->SetBinContent(
bin, obs[
i]);
447 histo_0->SetBinError(
bin, obsErr[
i]);
455 histo_0->SetBinContent(
bin + 1, 0);
456 histo_0->SetBinError(
bin + 1, 0);
459 if (
layer.first.find(
"Disk") != std::string::npos) {
462 histo_0->GetXaxis()->SetTitle(
"Panel");
466 histo_0->GetXaxis()->SetTitle(
"Ladder");
469 histo_0->SetBinContent(
bin + 2,
cut[detIndex]);
470 histo_0->SetBinError(
bin + 2, 0);
471 histo_0->SetBinContent(
bin + 3,
sigCut[detIndex]);
472 histo_0->SetBinError(
bin + 3, 0);
473 histo_0->SetBinContent(
bin + 4, maxMoveCut[detIndex]);
474 histo_0->SetBinError(
bin + 4, 0);
475 histo_0->SetBinContent(
bin + 5, maxErrorCut[detIndex]);
476 histo_0->SetBinError(
bin + 5, 0);
481 histo_0->SetMinimum(-(max_)*1.2);
482 histo_0->SetMaximum(max_ * 1.2);
502 if (alignableId ==
"TPBHalfBarrelXminus") {
504 }
else if (alignableId ==
"TPBHalfBarrelXplus") {
506 }
else if (alignableId ==
"TPEHalfCylinderXminusZminus") {
508 }
else if (alignableId ==
"TPEHalfCylinderXplusZminus") {
510 }
else if (alignableId ==
"TPEHalfCylinderXminusZplus") {
512 }
else if (alignableId ==
"TPEHalfCylinderXplusZplus") {
514 }
else if (alignableId.rfind(
"TPBLadder", 0) == 0) {
516 }
else if (alignableId.rfind(
"TPEPanel", 0) == 0) {
519 throw cms::Exception(
"LogicError") <<
"@SUB=MillePedeDQMModule::getIndexFromString\n" 520 <<
"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())
constexpr std::array< uint8_t, layerIndexSize > layer
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
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)