38 isHG_(mpReaderConfig_.getParameter<
bool>(
"isHG")) {
39 consumes<AlignmentToken, edm::InProcess>(
config.getParameter<
edm::InputTag>(
"alignmentTokenSrc"));
47 edm::LogInfo(
"MillePedeDQMModule") <<
"Booking histograms";
53 <<
"MillePedeDQMModule is configured as Low Granularity but the outputfolder is for High Granularity";
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.);
67 <<
"MillePedeDQMModule is configured as High Granularity but the outputfolder is for Low Granularity";
85 "Alignment fit #DeltaX for " +
layer.first +
";;#mum",
90 "Alignment fit #Delta#theta_{X} for " +
layer.first +
";;#murad",
95 "Alignment fit #DeltaY for " +
layer.first +
";;#mum",
100 "Alignment fit #Delta#theta_{Y} for " +
layer.first +
";;#murad",
105 "Alignment fit #DeltaZ for " +
layer.first +
";;#mum",
110 "Alignment fit #Delta#theta_{Z} for " +
layer.first +
";;#murad",
117 booker.
book2D(
"statusResults",
"Fraction threshold check for SiPixelAliHG PCL;;", 6, 0., 6., 10, 0., 10.);
132 throw cms::Exception(
"LogicError") <<
"@SUB=MillePedeDQMModule::dqmEndJob\n" 133 <<
"Try to read MillePede results before initializing MillePedeFileReader";
143 auto theResults =
mpReader_->getResults();
144 std::string exitCodeStr = theResults.getExitMessage();
148 vetoStr =
"DB Updated!";
150 if (theResults.isHighGranularity()) {
151 if (theResults.getDBVetoed() && theResults.getDBUpdated()) {
152 vetoStr =
"DB Update Vetoed";
157 if (theResults.exceedsCutoffs()) {
158 vetoStr =
"DB Update Vetoed";
193 auto myThresholds = std::make_shared<AlignPCLThresholdsHG>();
194 myThresholds->setAlignPCLThresholds(thresholds_->getNrecords(), thresholds_->getThreshold_Map());
195 myThresholds->setFloatMap(thresholds_->getFloatMap());
199 const auto trackerGeometry = builder.
build(geometricDet, ptitp, *ptp, tTopo);
200 tracker_ = std::make_unique<AlignableTracker>(trackerGeometry, tTopo);
212 std::shared_ptr<const AlignPCLThresholdsHG>(myThresholds),
218 TH2F* histo_status = statusHisto->
getTH2F();
219 auto theResults =
mpReader_->getResults();
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");
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}");
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]);
256 std::array<double, SIZE_INDEX> Xcut_, sigXcut_, maxMoveXcut_, maxErrorXcut_;
257 std::array<double, SIZE_INDEX> tXcut_, sigtXcut_, maxMovetXcut_, maxErrortXcut_;
259 std::array<double, SIZE_INDEX> Ycut_, sigYcut_, maxMoveYcut_, maxErrorYcut_;
260 std::array<double, SIZE_INDEX> tYcut_, sigtYcut_, maxMovetYcut_, maxErrortYcut_;
262 std::array<double, SIZE_INDEX> Zcut_, sigZcut_, maxMoveZcut_, maxErrorZcut_;
263 std::array<double, SIZE_INDEX> tZcut_, sigtZcut_, maxMovetZcut_, maxErrortZcut_;
265 auto myMap =
mpReader_->getThresholdMap();
267 std::vector<std::string> alignablesList;
268 for (
auto it = myMap.begin();
it != myMap.end(); ++
it) {
269 alignablesList.push_back(
it->first);
272 for (
auto& alignable : alignablesList) {
275 Xcut_[detIndex] = myMap[alignable].getXcut();
276 sigXcut_[detIndex] = myMap[alignable].getSigXcut();
277 maxMoveXcut_[detIndex] = myMap[alignable].getMaxMoveXcut();
278 maxErrorXcut_[detIndex] = myMap[alignable].getErrorXcut();
280 Ycut_[detIndex] = myMap[alignable].getYcut();
281 sigYcut_[detIndex] = myMap[alignable].getSigYcut();
282 maxMoveYcut_[detIndex] = myMap[alignable].getMaxMoveYcut();
283 maxErrorYcut_[detIndex] = myMap[alignable].getErrorYcut();
285 Zcut_[detIndex] = myMap[alignable].getZcut();
286 sigZcut_[detIndex] = myMap[alignable].getSigZcut();
287 maxMoveZcut_[detIndex] = myMap[alignable].getMaxMoveZcut();
288 maxErrorZcut_[detIndex] = myMap[alignable].getErrorZcut();
290 tXcut_[detIndex] = myMap[alignable].getThetaXcut();
291 sigtXcut_[detIndex] = myMap[alignable].getSigThetaXcut();
292 maxMovetXcut_[detIndex] = myMap[alignable].getMaxMoveThetaXcut();
293 maxErrortXcut_[detIndex] = myMap[alignable].getErrorThetaXcut();
295 tYcut_[detIndex] = myMap[alignable].getThetaYcut();
296 sigtYcut_[detIndex] = myMap[alignable].getSigThetaYcut();
297 maxMovetYcut_[detIndex] = myMap[alignable].getMaxMoveThetaYcut();
298 maxErrortYcut_[detIndex] = myMap[alignable].getErrorThetaYcut();
300 tZcut_[detIndex] = myMap[alignable].getThetaZcut();
301 sigtZcut_[detIndex] = myMap[alignable].getSigThetaZcut();
302 maxMovetZcut_[detIndex] = myMap[alignable].getMaxMoveThetaZcut();
303 maxErrortZcut_[detIndex] = myMap[alignable].getErrorThetaZcut();
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();
328 double max_ = *std::max_element(maxMoveCut.begin(), maxMoveCut.end());
330 histo_0->SetMinimum(-(max_));
331 histo_0->SetMaximum(max_);
342 for (
size_t i = 0;
i < obs.size(); ++
i) {
344 histo_0->SetBinContent(
i + 1, obs[
i]);
345 histo_0->SetBinError(
i + 1, obsErr[
i]);
349 histo_0->SetBinContent(8 +
i * 5,
cut[
i]);
352 histo_0->SetBinContent(9 +
i * 5,
sigCut[
i]);
355 histo_0->SetBinContent(10 +
i * 5, maxMoveCut[
i]);
358 histo_0->SetBinContent(11 +
i * 5, maxErrorCut[
i]);
363 std::array<double, SIZE_INDEX> Xcut_, sigXcut_, maxMoveXcut_, maxErrorXcut_;
364 std::array<double, SIZE_INDEX> tXcut_, sigtXcut_, maxMovetXcut_, maxErrortXcut_;
366 std::array<double, SIZE_INDEX> Ycut_, sigYcut_, maxMoveYcut_, maxErrorYcut_;
367 std::array<double, SIZE_INDEX> tYcut_, sigtYcut_, maxMovetYcut_, maxErrortYcut_;
369 std::array<double, SIZE_INDEX> Zcut_, sigZcut_, maxMoveZcut_, maxErrorZcut_;
370 std::array<double, SIZE_INDEX> tZcut_, sigtZcut_, maxMovetZcut_, maxErrortZcut_;
372 auto myMap =
mpReader_->getThresholdMap();
374 std::vector<std::string> alignablesList;
375 for (
auto it = myMap.begin();
it != myMap.end(); ++
it) {
376 alignablesList.push_back(
it->first);
379 for (
auto& alignable : alignablesList) {
382 Xcut_[detIndex] = myMap[alignable].getXcut();
383 sigXcut_[detIndex] = myMap[alignable].getSigXcut();
384 maxMoveXcut_[detIndex] = myMap[alignable].getMaxMoveXcut();
385 maxErrorXcut_[detIndex] = myMap[alignable].getErrorXcut();
387 Ycut_[detIndex] = myMap[alignable].getYcut();
388 sigYcut_[detIndex] = myMap[alignable].getSigYcut();
389 maxMoveYcut_[detIndex] = myMap[alignable].getMaxMoveYcut();
390 maxErrorYcut_[detIndex] = myMap[alignable].getErrorYcut();
392 Zcut_[detIndex] = myMap[alignable].getZcut();
393 sigZcut_[detIndex] = myMap[alignable].getSigZcut();
394 maxMoveZcut_[detIndex] = myMap[alignable].getMaxMoveZcut();
395 maxErrorZcut_[detIndex] = myMap[alignable].getErrorZcut();
397 tXcut_[detIndex] = myMap[alignable].getThetaXcut();
398 sigtXcut_[detIndex] = myMap[alignable].getSigThetaXcut();
399 maxMovetXcut_[detIndex] = myMap[alignable].getMaxMoveThetaXcut();
400 maxErrortXcut_[detIndex] = myMap[alignable].getErrorThetaXcut();
402 tYcut_[detIndex] = myMap[alignable].getThetaYcut();
403 sigtYcut_[detIndex] = myMap[alignable].getSigThetaYcut();
404 maxMovetYcut_[detIndex] = myMap[alignable].getMaxMoveThetaYcut();
405 maxErrortYcut_[detIndex] = myMap[alignable].getErrorThetaYcut();
407 tZcut_[detIndex] = myMap[alignable].getThetaZcut();
408 sigtZcut_[detIndex] = myMap[alignable].getSigThetaZcut();
409 maxMovetZcut_[detIndex] = myMap[alignable].getMaxMoveThetaZcut();
410 maxErrortZcut_[detIndex] = myMap[alignable].getErrorThetaZcut();
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) {
456 TH1F* histo_0 = histo_map[
layer.first]->getTH1F();
464 histo_0->SetBinContent(
bin, obs[
i]);
465 histo_0->SetBinError(
bin, obsErr[
i]);
473 histo_0->SetBinContent(
bin + 1, 0);
474 histo_0->SetBinError(
bin + 1, 0);
477 if (
layer.first.find(
"Disk") != std::string::npos) {
480 histo_0->GetXaxis()->SetTitle(
"Panel");
484 histo_0->GetXaxis()->SetTitle(
"Ladder");
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);
499 histo_0->SetMinimum(-(max_) * 1.2);
500 histo_0->SetMaximum(max_ * 1.2);
520 if (alignableId ==
"TPBHalfBarrelXminus") {
522 }
else if (alignableId ==
"TPBHalfBarrelXplus") {
524 }
else if (alignableId ==
"TPEHalfCylinderXminusZminus") {
526 }
else if (alignableId ==
"TPEHalfCylinderXplusZminus") {
528 }
else if (alignableId ==
"TPEHalfCylinderXminusZplus") {
530 }
else if (alignableId ==
"TPEHalfCylinderXplusZplus") {
532 }
else if (alignableId.rfind(
"TPBLadder", 0) == 0) {
534 }
else if (alignableId.rfind(
"TPEPanel", 0) == 0) {
537 throw cms::Exception(
"LogicError") <<
"@SUB=MillePedeDQMModule::getIndexFromString\n" 538 <<
"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_
std::shared_ptr< SiPixelQuality > pixelQuality_
void fillStatusHisto(MonitorElement *statusHisto)
std::map< std::string, MonitorElement * > h_xRot_HG
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
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
static void fillPSetDescription(edm::ParameterSetDescription &desc)
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())
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
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
const edm::ESGetToken< SiPixelQuality, SiPixelQualityFromDbRcd > siPixelQualityToken_
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)