File indexing completed on 2024-11-06 06:06:33
0001 #include "DQM/TrackingMonitorClient/interface/TrackingQualityChecker.h"
0002 #include "FWCore/ServiceRegistry/interface/Service.h"
0003 #include "DQMServices/Core/interface/DQMStore.h"
0004
0005 #include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h"
0006
0007 #include "DataFormats/SiStripDetId/interface/StripSubdetector.h"
0008
0009 #include "DQM/TrackingMonitorClient/interface/TrackingUtility.h"
0010
0011 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0012 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0013
0014 #include <iomanip>
0015
0016
0017
0018 TrackingQualityChecker::TrackingQualityChecker(edm::ParameterSet const& ps)
0019 : pSet_(ps), verbose_(pSet_.getUntrackedParameter<bool>("verbose", false)) {
0020 edm::LogInfo("TrackingQualityChecker") << " Creating TrackingQualityChecker "
0021 << "\n";
0022
0023 bookedTrackingGlobalStatus_ = false;
0024 bookedTrackingLSStatus_ = false;
0025
0026 TopFolderName_ = pSet_.getUntrackedParameter<std::string>("TopFolderName", "Tracking");
0027
0028 TrackingMEs tracking_mes;
0029 std::vector<edm::ParameterSet> TrackingGlobalQualityMEs =
0030 pSet_.getParameter<std::vector<edm::ParameterSet> >("TrackingGlobalQualityPSets");
0031 for (const auto& meQTset : TrackingGlobalQualityMEs) {
0032 std::string QTname = meQTset.getParameter<std::string>("QT");
0033 tracking_mes.HistoDir = meQTset.getParameter<std::string>("dir");
0034 tracking_mes.HistoName = meQTset.getParameter<std::string>("name");
0035 if (verbose_)
0036 edm::LogInfo("TrackingQualityChecker") << " inserting " << QTname << " in TrackingMEsMap" << std::endl;
0037 TrackingMEsMap.insert(std::pair<std::string, TrackingMEs>(QTname, tracking_mes));
0038 }
0039 if (verbose_)
0040 edm::LogInfo("TrackingQualityChecker") << " created TrackingMEsMap" << std::endl;
0041
0042 TrackingLSMEs tracking_ls_mes;
0043 std::vector<edm::ParameterSet> TrackingLSQualityMEs =
0044 pSet_.getParameter<std::vector<edm::ParameterSet> >("TrackingLSQualityPSets");
0045 for (const auto& meQTset : TrackingLSQualityMEs) {
0046 std::string QTname = meQTset.getParameter<std::string>("QT");
0047 tracking_ls_mes.HistoLSDir = meQTset.exists("LSdir") ? meQTset.getParameter<std::string>("LSdir") : "";
0048 tracking_ls_mes.HistoLSName = meQTset.exists("LSname") ? meQTset.getParameter<std::string>("LSname") : "";
0049 tracking_ls_mes.HistoLSLowerCut = meQTset.exists("LSlowerCut") ? meQTset.getParameter<double>("LSlowerCut") : -1.;
0050 tracking_ls_mes.HistoLSUpperCut = meQTset.exists("LSupperCut") ? meQTset.getParameter<double>("LSupperCut") : -1.;
0051 tracking_ls_mes.TrackingFlag = nullptr;
0052
0053 if (verbose_)
0054 edm::LogInfo("TrackingQualityChecker") << " inserting " << QTname << " in TrackingMEsMap" << std::endl;
0055 TrackingLSMEsMap.insert(std::pair<std::string, TrackingLSMEs>(QTname, tracking_ls_mes));
0056 }
0057 if (verbose_)
0058 edm::LogInfo("TrackingQualityChecker") << " created TrackingLSMEsMap" << std::endl;
0059 }
0060
0061
0062
0063 TrackingQualityChecker::~TrackingQualityChecker() {
0064 edm::LogInfo("TrackingQualityChecker") << " Deleting TrackingQualityChecker "
0065 << "\n";
0066 }
0067
0068
0069
0070 void TrackingQualityChecker::bookGlobalStatus(DQMStore::IBooker& ibooker, DQMStore::IGetter& igetter) {
0071 if (verbose_)
0072 edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::bookGlobalStatus] already booked ? "
0073 << (bookedTrackingGlobalStatus_ ? "yes" : "nope") << std::endl;
0074
0075 if (!bookedTrackingGlobalStatus_) {
0076 ibooker.cd();
0077 edm::LogInfo("TrackingQualityChecker") << " booking TrackingQualityStatus"
0078 << "\n";
0079
0080 std::string tracking_dir = "";
0081 TrackingUtility::getTopFolderPath(ibooker, igetter, TopFolderName_, tracking_dir);
0082 ibooker.setCurrentFolder(TopFolderName_ + "/EventInfo");
0083
0084 TrackGlobalSummaryReportGlobal = ibooker.bookFloat("reportSummary");
0085
0086 std::string hname, htitle;
0087 hname = "reportSummaryMap";
0088 htitle = "Tracking Report Summary Map";
0089
0090 size_t nQT = TrackingMEsMap.size();
0091 if (verbose_)
0092 edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::bookGlobalStatus] nQT: " << nQT << std::endl;
0093 TrackGlobalSummaryReportMap = ibooker.book2D(hname, htitle, nQT, 0.5, float(nQT) + 0.5, 1, 0.5, 1.5);
0094 TrackGlobalSummaryReportMap->setAxisTitle("Track Quality Type", 1);
0095 TrackGlobalSummaryReportMap->setAxisTitle("QTest Flag", 2);
0096 size_t ibin = 0;
0097 for (const auto& meQTset : TrackingMEsMap) {
0098 TrackGlobalSummaryReportMap->setBinLabel(ibin + 1, meQTset.first);
0099 ibin++;
0100 }
0101
0102 ibooker.setCurrentFolder(TopFolderName_ + "/EventInfo/reportSummaryContents");
0103
0104 for (std::map<std::string, TrackingMEs>::iterator it = TrackingMEsMap.begin(); it != TrackingMEsMap.end(); it++) {
0105 std::string meQTname = it->first;
0106 it->second.TrackingFlag = ibooker.bookFloat("Track" + meQTname);
0107 if (verbose_)
0108 edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::bookGlobalStatus] " << it->first
0109 << " exists ? " << it->second.TrackingFlag << std::endl;
0110 if (verbose_)
0111 edm::LogInfo("TrackingQualityChecker")
0112 << "[TrackingQualityChecker::bookGlobalStatus] DONE w/ TrackingMEsMap" << std::endl;
0113 }
0114
0115 bookedTrackingGlobalStatus_ = true;
0116 ibooker.cd();
0117 }
0118 }
0119
0120 void TrackingQualityChecker::bookLSStatus(DQMStore::IBooker& ibooker, DQMStore::IGetter& igetter) {
0121 if (verbose_)
0122 edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::bookLSStatus] already booked ? "
0123 << (bookedTrackingLSStatus_ ? "yes" : "nope") << std::endl;
0124
0125 if (!bookedTrackingLSStatus_) {
0126 ibooker.cd();
0127 edm::LogInfo("TrackingQualityChecker") << " booking TrackingQualityStatus"
0128 << "\n";
0129
0130 std::string tracking_dir = "";
0131 TrackingUtility::getTopFolderPath(ibooker, igetter, TopFolderName_, tracking_dir);
0132 ibooker.setCurrentFolder(TopFolderName_ + "/EventInfo");
0133
0134 TrackLSSummaryReportGlobal = ibooker.bookFloat("reportSummary");
0135
0136 std::string hname, htitle;
0137 hname = "reportSummaryMap";
0138 htitle = "Tracking Report Summary Map";
0139
0140 if (verbose_) {
0141 size_t nQT = TrackingLSMEsMap.size();
0142 edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::bookLSStatus] nQT: " << nQT << std::endl;
0143 }
0144
0145 ibooker.setCurrentFolder(TopFolderName_ + "/EventInfo/reportSummaryContents");
0146 for (std::map<std::string, TrackingLSMEs>::iterator it = TrackingLSMEsMap.begin(); it != TrackingLSMEsMap.end();
0147 it++) {
0148 std::string meQTname = it->first;
0149 it->second.TrackingFlag = ibooker.bookFloat("Track" + meQTname);
0150 if (verbose_)
0151 edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::bookLSStatus] " << it->first << " exists ? "
0152 << it->second.TrackingFlag << std::endl;
0153 if (verbose_)
0154 edm::LogInfo("TrackingQualityChecker")
0155 << "[TrackingQualityChecker::bookLSStatus] DONE w/ TrackingLSMEsMap" << std::endl;
0156 }
0157
0158 bookedTrackingLSStatus_ = true;
0159 ibooker.cd();
0160 }
0161 }
0162
0163
0164
0165
0166 void TrackingQualityChecker::fillDummyGlobalStatus() {
0167 if (verbose_)
0168 edm::LogInfo("TrackingQualityChecker")
0169 << "[TrackingQualityChecker::fillDummyGlobalStatus] starting ..." << std::endl;
0170
0171 resetGlobalStatus();
0172 if (verbose_)
0173 edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::fillDummyGlobalStatus] already booked ? "
0174 << (bookedTrackingGlobalStatus_ ? "yes" : "nope") << std::endl;
0175 if (bookedTrackingGlobalStatus_) {
0176 TrackGlobalSummaryReportGlobal->Fill(-1.0);
0177
0178 for (int ibin = 1; ibin < TrackGlobalSummaryReportMap->getNbinsX() + 1; ibin++) {
0179 fillStatusHistogram(TrackGlobalSummaryReportMap, ibin, 1, -1.0);
0180 }
0181
0182 for (std::map<std::string, TrackingMEs>::iterator it = TrackingMEsMap.begin(); it != TrackingMEsMap.end(); it++)
0183 it->second.TrackingFlag->Fill(-1.0);
0184 if (verbose_)
0185 edm::LogInfo("TrackingQualityChecker")
0186 << "[TrackingQualityChecker::fillDummyGlobalStatus] DONE w/ TrackingMEsMap" << std::endl;
0187 }
0188 }
0189 void TrackingQualityChecker::fillDummyLSStatus() {
0190 if (verbose_)
0191 edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::fillDummyLSStatus] starting ..." << std::endl;
0192
0193 resetLSStatus();
0194 if (verbose_)
0195 edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::fillDummyLSStatus] already booked ? "
0196 << (bookedTrackingLSStatus_ ? "yes" : "nope") << std::endl;
0197 if (bookedTrackingLSStatus_) {
0198 TrackLSSummaryReportGlobal->Fill(-1.0);
0199 for (std::map<std::string, TrackingLSMEs>::iterator it = TrackingLSMEsMap.begin(); it != TrackingLSMEsMap.end();
0200 it++)
0201 it->second.TrackingFlag->Fill(-1.0);
0202 if (verbose_)
0203 edm::LogInfo("TrackingQualityChecker")
0204 << "[TrackingQualityChecker::fillDummyLSStatus] DONE w/ TrackingLSMEsMap" << std::endl;
0205 }
0206 }
0207
0208
0209
0210
0211 void TrackingQualityChecker::resetGlobalStatus() {
0212 if (verbose_)
0213 edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::resetGlobalStatus] already booked ? "
0214 << (bookedTrackingGlobalStatus_ ? "yes" : "nope") << std::endl;
0215 if (bookedTrackingGlobalStatus_) {
0216 TrackGlobalSummaryReportGlobal->Reset();
0217 TrackGlobalSummaryReportMap->Reset();
0218
0219 for (std::map<std::string, TrackingMEs>::iterator it = TrackingMEsMap.begin(); it != TrackingMEsMap.end(); it++) {
0220 MonitorElement* me = it->second.TrackingFlag;
0221 if (verbose_)
0222 edm::LogInfo("TrackingQualityChecker")
0223 << "[TrackingQualityChecker::resetGlobalStatus] " << it->second.HistoName << " exist ? "
0224 << (it->second.TrackingFlag == nullptr ? "nope" : "yes") << " ---> " << me << std::endl;
0225 me->Reset();
0226 }
0227 if (verbose_)
0228 edm::LogInfo("TrackingQualityChecker")
0229 << "[TrackingQualityChecker::resetGlobalStatus] DONE w/ TrackingMEsMap" << std::endl;
0230 }
0231 }
0232 void TrackingQualityChecker::resetLSStatus() {
0233 if (verbose_)
0234 edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::resetLSStatus] already booked ? "
0235 << (bookedTrackingLSStatus_ ? "yes" : "nope") << std::endl;
0236 if (bookedTrackingLSStatus_) {
0237 TrackLSSummaryReportGlobal->Reset();
0238 for (std::map<std::string, TrackingLSMEs>::iterator it = TrackingLSMEsMap.begin(); it != TrackingLSMEsMap.end();
0239 it++) {
0240 MonitorElement* me = it->second.TrackingFlag;
0241 if (verbose_)
0242 edm::LogInfo("TrackingQualityChecker")
0243 << "[TrackingQualityChecker::resetLSStatus] " << it->second.HistoLSName << " exist ? "
0244 << (it->second.TrackingFlag == nullptr ? "nope" : "yes") << " ---> " << me << std::endl;
0245 me->Reset();
0246 }
0247 if (verbose_)
0248 edm::LogInfo("TrackingQualityChecker")
0249 << "[TrackingQualityChecker::resetLSStatus] DONE w/ TrackingLSMEsMap" << std::endl;
0250 }
0251 }
0252
0253
0254
0255
0256 void TrackingQualityChecker::fillGlobalStatus(DQMStore::IBooker& ibooker, DQMStore::IGetter& igetter) {
0257 if (verbose_)
0258 edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::fillGlobalStatus] already booked ? "
0259 << (bookedTrackingGlobalStatus_ ? "yes" : "nope") << std::endl;
0260 if (!bookedTrackingGlobalStatus_)
0261 bookGlobalStatus(ibooker, igetter);
0262
0263 fillDummyGlobalStatus();
0264 fillTrackingStatus(ibooker, igetter);
0265 if (verbose_)
0266 edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::fillGlobalStatus] DONE" << std::endl;
0267 ibooker.cd();
0268 }
0269
0270 void TrackingQualityChecker::fillLSStatus(DQMStore::IBooker& ibooker, DQMStore::IGetter& igetter) {
0271 if (verbose_)
0272 edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::fillLSStatus] already booked ? "
0273 << (bookedTrackingLSStatus_ ? "yes" : "nope") << std::endl;
0274 if (!bookedTrackingLSStatus_)
0275 bookLSStatus(ibooker, igetter);
0276
0277 fillDummyLSStatus();
0278 fillTrackingStatusAtLumi(ibooker, igetter);
0279 if (verbose_)
0280 edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::fillLSStatus] DONE" << std::endl;
0281 ibooker.cd();
0282 }
0283
0284
0285
0286
0287 void TrackingQualityChecker::fillTrackingStatus(DQMStore::IBooker& ibooker, DQMStore::IGetter& igetter) {
0288 float gstatus = 0.0;
0289
0290 ibooker.cd();
0291 if (!TrackingUtility::goToDir(ibooker, igetter, TopFolderName_))
0292 return;
0293
0294 int ibin = 0;
0295 for (std::map<std::string, TrackingMEs>::iterator it = TrackingMEsMap.begin(); it != TrackingMEsMap.end(); it++) {
0296 if (verbose_)
0297 edm::LogInfo("TrackingQualityChecker")
0298 << "fillTrackingStatus ME: " << it->first << " [" << it->second.TrackingFlag->getFullname()
0299 << "] flag: " << it->second.TrackingFlag->getFloatValue() << std::endl;
0300
0301 ibin++;
0302
0303 std::string localMEdirpath = it->second.HistoDir;
0304 std::string MEname = it->second.HistoName;
0305
0306 std::vector<MonitorElement*> tmpMEvec = igetter.getContents(ibooker.pwd() + "/" + localMEdirpath);
0307
0308 if (it->first == "SeedNStrip" or it->first == "SeedNPixel") {
0309 tmpMEvec = igetter.getContents(localMEdirpath);
0310 }
0311 if (verbose_)
0312 edm::LogInfo("TrackingQualityChecker") << "fillTrackingStatus tmpMEvec: " << tmpMEvec.size() << std::endl;
0313 MonitorElement* me = nullptr;
0314
0315 size_t nMEs = 0;
0316 for (auto ime : tmpMEvec) {
0317 std::string name = ime->getName();
0318 if (verbose_)
0319 edm::LogInfo("TrackingQualityChecker") << "name: " << name << " <-- --> " << MEname << std::endl;
0320 if (name.find(MEname) != std::string::npos) {
0321 me = ime;
0322 nMEs++;
0323 }
0324 }
0325
0326 if (verbose_)
0327 edm::LogInfo("TrackingQualityChecker") << "fillTrackingStatus nMEs: " << nMEs << std::endl;
0328 if (nMEs == 1) {
0329 float status = 0.;
0330 for (auto ime : tmpMEvec) {
0331 std::string name = ime->getName();
0332 if (verbose_)
0333 edm::LogInfo("TrackingQualityChecker") << "name: " << name << " [" << MEname << "]" << std::endl;
0334 if (name.find(MEname) != std::string::npos) {
0335 me = ime;
0336 if (verbose_)
0337 edm::LogInfo("TrackingQualityChecker") << "inside the loop nQTme: " << me->getQReports().size() << "["
0338 << ime->getFullname() << "]" << std::endl;
0339 }
0340 }
0341 if (verbose_)
0342 edm::LogInfo("TrackingQualityChecker")
0343 << "me: " << me << "[" << me->getName() << ", " << me->getFullname() << "]" << std::endl;
0344 if (!me)
0345 continue;
0346 if (verbose_)
0347 edm::LogInfo("TrackingQualityChecker") << "fillTrackingStatus status: " << status << std::endl;
0348 std::vector<QReport*> qt_reports = me->getQReports();
0349 size_t nQTme = qt_reports.size();
0350 if (verbose_)
0351 edm::LogInfo("TrackingQualityChecker") << "nQTme: " << nQTme << std::endl;
0352 if (nQTme != 0) {
0353 if (verbose_)
0354 edm::LogInfo("TrackingQualityChecker") << "fillTrackingStatus qt_reports: " << qt_reports.size() << std::endl;
0355
0356 for (auto iQT : qt_reports) {
0357 status += iQT->getQTresult();
0358 if (verbose_)
0359 edm::LogInfo("TrackingQualityChecker") << "fillTrackingStatus iQT: " << iQT->getQRName() << std::endl;
0360 if (verbose_)
0361 edm::LogInfo("TrackingQualityChecker")
0362 << "fillTrackingStatus MEname: " << MEname << " status: " << iQT->getQTresult() << " exists ? "
0363 << (it->second.TrackingFlag ? "yes " : "no ") << it->second.TrackingFlag << std::endl;
0364 if (verbose_)
0365 edm::LogInfo("TrackingQualityChecker")
0366 << "fillTrackingStatus iQT message: " << iQT->getMessage() << std::endl;
0367 if (verbose_)
0368 edm::LogInfo("TrackingQualityChecker")
0369 << "fillTrackingStatus iQT status: " << iQT->getStatus() << std::endl;
0370 }
0371 status = status / float(nQTme);
0372 if (verbose_)
0373 edm::LogInfo("TrackingQualityChecker")
0374 << "fillTrackingStatus MEname: " << MEname << " status: " << status << std::endl;
0375 it->second.TrackingFlag->Fill(status);
0376 if (verbose_)
0377 edm::LogInfo("TrackingQualityChecker")
0378 << "fillTrackingStatus TrackGlobalSummaryReportMap: " << TrackGlobalSummaryReportMap << std::endl;
0379 fillStatusHistogram(TrackGlobalSummaryReportMap, ibin, 1, status);
0380 }
0381
0382 if (verbose_)
0383 edm::LogInfo("TrackingQualityChecker")
0384 << "fillTrackingStatus gstatus: " << gstatus << " x status: " << status << std::endl;
0385 if (status < 0.)
0386 gstatus = -1.;
0387 else
0388 gstatus += status;
0389 if (verbose_)
0390 edm::LogInfo("TrackingQualityChecker") << "fillTrackingStatus ===> gstatus: " << gstatus << std::endl;
0391 if (verbose_)
0392 edm::LogInfo("TrackingQualityChecker")
0393 << "fillTrackingStatus ME: " << it->first << " [" << it->second.TrackingFlag->getFullname()
0394 << "] flag: " << it->second.TrackingFlag->getFloatValue() << std::endl;
0395
0396 } else {
0397 float status = 1.;
0398 for (auto ime : tmpMEvec) {
0399 float tmp_status = 1.;
0400 std::string name = ime->getName();
0401 if (name.find(MEname) != std::string::npos) {
0402 me = ime;
0403
0404 if (verbose_)
0405 edm::LogInfo("TrackingQualityChecker") << "fillTrackingStatus status: " << status << std::endl;
0406 std::vector<QReport*> qt_reports = me->getQReports();
0407 size_t nQTme = qt_reports.size();
0408 if (verbose_)
0409 edm::LogInfo("TrackingQualityChecker")
0410 << "nQTme: " << nQTme << "[" << name << ", " << ime->getFullname() << "]" << std::endl;
0411 if (nQTme != 0) {
0412 if (verbose_)
0413 edm::LogInfo("TrackingQualityChecker")
0414 << "fillTrackingStatus qt_reports: " << qt_reports.size() << std::endl;
0415
0416 for (auto iQT : qt_reports) {
0417 tmp_status = 0;
0418 tmp_status += iQT->getQTresult();
0419 if (verbose_)
0420 edm::LogInfo("TrackingQualityChecker") << "fillTrackingStatus iQT: " << iQT->getQRName() << std::endl;
0421 if (verbose_)
0422 edm::LogInfo("TrackingQualityChecker")
0423 << "fillTrackingStatus MEname: " << MEname << " status: " << iQT->getQTresult() << " exists ? "
0424 << (it->second.TrackingFlag ? "yes " : "no ") << it->second.TrackingFlag << std::endl;
0425 if (verbose_)
0426 edm::LogInfo("TrackingQualityChecker")
0427 << "fillTrackingStatus iQT message: " << iQT->getMessage() << std::endl;
0428 if (verbose_)
0429 edm::LogInfo("TrackingQualityChecker")
0430 << "fillTrackingStatus iQT status: " << iQT->getStatus() << std::endl;
0431 }
0432 tmp_status = tmp_status / float(nQTme);
0433 }
0434 }
0435 status = fminf(tmp_status, status);
0436 }
0437 if (status < 0.)
0438 gstatus = -1.;
0439 else
0440 gstatus += status;
0441 if (verbose_)
0442 edm::LogInfo("TrackingQualityChecker")
0443 << "fillTrackingStatus MEname: " << MEname << " status: " << status << std::endl;
0444 it->second.TrackingFlag->Fill(status);
0445 if (verbose_)
0446 edm::LogInfo("TrackingQualityChecker")
0447 << "fillTrackingStatus TrackGlobalSummaryReportMap: " << TrackGlobalSummaryReportMap << std::endl;
0448
0449 fillStatusHistogram(TrackGlobalSummaryReportMap, ibin, 1, status);
0450 }
0451 }
0452
0453
0454
0455 for (std::map<std::string, TrackingMEs>::iterator it = TrackingMEsMap.begin(); it != TrackingMEsMap.end(); it++) {
0456 std::string localMEdirpath = it->second.HistoDir;
0457 std::vector<MonitorElement*> tmpMEvec = igetter.getContents(ibooker.pwd() + "/" + localMEdirpath);
0458 for (auto ime : tmpMEvec) {
0459 if (ime->getLumiFlag()) {
0460 ime->Reset();
0461 }
0462 }
0463 }
0464
0465 if (verbose_)
0466 edm::LogInfo("TrackingQualityChecker") << "fillTrackingStatus gstatus: " << gstatus << std::endl;
0467 size_t nQT = TrackingMEsMap.size();
0468 if (gstatus < 1.)
0469 gstatus = -1.;
0470 else
0471 gstatus = gstatus / float(nQT);
0472
0473 if (verbose_)
0474 edm::LogInfo("TrackingQualityChecker") << "fillTrackingStatus ===> gstatus: " << gstatus << std::endl;
0475 TrackGlobalSummaryReportGlobal->Fill(gstatus);
0476 ibooker.cd();
0477
0478 if (verbose_)
0479 edm::LogInfo("TrackingQualityChecker") << "fillTrackingStatus DONE" << std::endl;
0480 }
0481
0482
0483
0484
0485 void TrackingQualityChecker::fillStatusHistogram(MonitorElement* me, int xbin, int ybin, float val) {
0486 if (me && me->kind() == MonitorElement::Kind::TH2F) {
0487 TH2F* th2d = me->getTH2F();
0488 th2d->SetBinContent(xbin, ybin, val);
0489 }
0490 }
0491
0492
0493
0494 void TrackingQualityChecker::fillTrackingStatusAtLumi(DQMStore::IBooker& ibooker, DQMStore::IGetter& igetter) {
0495 if (verbose_)
0496 edm::LogInfo("TrackingQualityChecker")
0497 << "[TrackingQualityChecker::fillTrackingStatusAtLumi] starting .. " << std::endl;
0498 float gstatus = 1.0;
0499
0500 ibooker.cd();
0501 if (!TrackingUtility::goToDir(ibooker, igetter, TopFolderName_))
0502 return;
0503
0504 for (std::map<std::string, TrackingLSMEs>::iterator it = TrackingLSMEsMap.begin(); it != TrackingLSMEsMap.end();
0505 it++) {
0506 if (verbose_)
0507 edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::fillTrackingStatusAtLumi] ME: " << it->first
0508 << " [" << it->second.TrackingFlag->getFullname()
0509 << "] flag: " << it->second.TrackingFlag->getFloatValue() << std::endl;
0510
0511 std::string localMEdirpath = it->second.HistoLSDir;
0512 std::string MEname = it->second.HistoLSName;
0513 float lower_cut = it->second.HistoLSLowerCut;
0514 float upper_cut = it->second.HistoLSUpperCut;
0515
0516 float status = 1.0;
0517
0518 std::vector<MonitorElement*> tmpMEvec = igetter.getContents(ibooker.pwd() + "/" + localMEdirpath);
0519 if (verbose_)
0520 edm::LogInfo("TrackingQualityChecker")
0521 << "[TrackingQualityChecker::fillTrackingStatusAtLumi] tmpMEvec: " << tmpMEvec.size() << std::endl;
0522
0523 MonitorElement* me = nullptr;
0524
0525 size_t nMEs = 0;
0526 for (auto ime : tmpMEvec) {
0527 std::string name = ime->getName();
0528 if (name.find(MEname) != std::string::npos) {
0529 me = ime;
0530 nMEs++;
0531 }
0532 }
0533
0534 if (nMEs == 1) {
0535 for (auto ime : tmpMEvec) {
0536 std::string name = ime->getName();
0537 if (name.find(MEname) != std::string::npos) {
0538 me = ime;
0539 }
0540 }
0541 if (!me)
0542 continue;
0543
0544 if (me->kind() == MonitorElement::Kind::TH1F) {
0545 float x_mean = me->getMean();
0546 if (verbose_)
0547 edm::LogInfo("TrackingQualityChecker")
0548 << "[TrackingQualityChecker::fillTrackingStatusAtLumi] MEname: " << MEname << " x_mean: " << x_mean
0549 << std::endl;
0550 if (x_mean <= lower_cut || x_mean > upper_cut)
0551 status = 0.0;
0552 else
0553 status = 1.0;
0554 }
0555 } else {
0556 for (auto ime : tmpMEvec) {
0557 float tmp_status = 1.;
0558 std::string name = ime->getName();
0559 if (name.find(MEname) != std::string::npos) {
0560 me = ime;
0561 if (!me)
0562 continue;
0563
0564 if (me->kind() == MonitorElement::Kind::TH1F) {
0565 float x_mean = me->getMean();
0566 if (verbose_)
0567 edm::LogInfo("TrackingQualityChecker")
0568 << "[TrackingQualityChecker::fillTrackingStatusAtLumi] MEname: " << MEname << "[" << me->getName()
0569 << "] x_mean: " << x_mean << std::endl;
0570 if (x_mean <= lower_cut || x_mean > upper_cut)
0571 tmp_status = 0.0;
0572 else
0573 tmp_status = 1.0;
0574 if (verbose_)
0575 edm::LogInfo("TrackingQualityChecker")
0576 << "[TrackingQualityChecker::fillTrackingStatusAtLumi] tmp_status: " << tmp_status << std::endl;
0577 }
0578 }
0579 status = fminf(tmp_status, status);
0580 if (verbose_)
0581 edm::LogInfo("TrackingQualityChecker")
0582 << "[TrackingQualityChecker::fillTrackingStatusAtLumi] ==> status: " << status << std::endl;
0583 }
0584 }
0585 it->second.TrackingFlag->Fill(status);
0586 if (verbose_)
0587 edm::LogInfo("TrackingQualityChecker")
0588 << "[TrackingQualityChecker::fillTrackingStatusAtLumi] ===> status: " << status << " [" << gstatus << "]"
0589 << std::endl;
0590 if (status == 0.0)
0591 gstatus = -1.0;
0592 else
0593 gstatus = gstatus * status;
0594 if (verbose_)
0595 edm::LogInfo("TrackingQualityChecker")
0596 << "[TrackingQualityChecker::fillTrackingStatusAtLumi] ===> gstatus: " << gstatus << std::endl;
0597 if (verbose_)
0598 edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::fillTrackingStatusAtLumi] ME: " << it->first
0599 << " [" << it->second.TrackingFlag->getFullname()
0600 << "] flag: " << it->second.TrackingFlag->getFloatValue() << std::endl;
0601 }
0602 TrackLSSummaryReportGlobal->Fill(gstatus);
0603 ibooker.cd();
0604
0605 if (verbose_)
0606 edm::LogInfo("TrackingQualityChecker") << "[TrackingQualityChecker::fillTrackingStatusAtLumi] DONE" << std::endl;
0607 }