File indexing completed on 2024-04-06 12:09:10
0001 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0002 #include "FWCore/ServiceRegistry/interface/Service.h"
0003 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0004
0005 #include "DQMServices/Core/interface/DQMStore.h"
0006 #include "DQM/SiStripCommon/interface/SiStripFolderOrganizer.h"
0007 #include "DQM/TrackingMonitorClient/interface/TrackingUtility.h"
0008 #include "DQM/TrackingMonitorClient/interface/TrackingCertificationInfo.h"
0009
0010 #include "CondFormats/DataRecord/interface/SiStripCondDataRecords.h"
0011 #include "CalibTracker/Records/interface/SiStripDetCablingRcd.h"
0012 #include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h"
0013
0014 #include "DataFormats/SiStripDetId/interface/StripSubdetector.h"
0015
0016
0017 #include "CondFormats/DataRecord/interface/RunSummaryRcd.h"
0018 #include "CondFormats/RunInfo/interface/RunSummary.h"
0019 #include "CondFormats/RunInfo/interface/RunInfo.h"
0020
0021 #include <iomanip>
0022 #include <cstdio>
0023 #include <string>
0024 #include <sstream>
0025 #include <cmath>
0026
0027
0028
0029 TrackingCertificationInfo::TrackingCertificationInfo(edm::ParameterSet const& pSet)
0030 : pSet_(pSet),
0031 trackingCertificationBooked_(false),
0032 trackingLSCertificationBooked_(false),
0033 nFEDConnected_(0),
0034 allPixelFEDConnected_(true),
0035 m_cacheID_(0),
0036 runInfoToken_(esConsumes<RunInfo, RunInfoRcd, edm::Transition::BeginRun>()),
0037 detCablingToken_(esConsumes<SiStripDetCabling, SiStripDetCablingRcd, edm::Transition::BeginRun>()) {
0038
0039 edm::LogInfo("TrackingCertificationInfo") << "TrackingCertificationInfo::Deleting TrackingCertificationInfo ";
0040
0041 verbose_ = pSet_.getUntrackedParameter<bool>("verbose", false);
0042 TopFolderName_ = pSet_.getUntrackedParameter<std::string>("TopFolderName", "Tracking");
0043 if (verbose_)
0044 edm::LogInfo("TrackingCertificationInfo") << "TopFolderName_: " << TopFolderName_ << std::endl;
0045
0046 TrackingMEs tracking_mes;
0047
0048
0049 checkPixelFEDs_ = pSet_.getParameter<bool>("checkPixelFEDs");
0050 if (checkPixelFEDs_) {
0051 std::string QTname = "pixel";
0052 tracking_mes.TrackingFlag = nullptr;
0053 TrackingMEsMap.insert(std::pair<std::string, TrackingMEs>(QTname, tracking_mes));
0054 }
0055
0056 std::vector<edm::ParameterSet> TrackingGlobalQualityMEs =
0057 pSet_.getParameter<std::vector<edm::ParameterSet> >("TrackingGlobalQualityPSets");
0058 for (const auto& meQTset : TrackingGlobalQualityMEs) {
0059 std::string QTname = meQTset.getParameter<std::string>("QT");
0060 tracking_mes.TrackingFlag = nullptr;
0061
0062 if (verbose_)
0063 edm::LogInfo("TrackingCertificationInfo") << " inserting " << QTname << " in TrackingMEsMap" << std::endl;
0064 TrackingMEsMap.insert(std::pair<std::string, TrackingMEs>(QTname, tracking_mes));
0065 }
0066
0067 TrackingLSMEs tracking_ls_mes;
0068
0069 std::vector<edm::ParameterSet> TrackingLSQualityMEs =
0070 pSet_.getParameter<std::vector<edm::ParameterSet> >("TrackingLSQualityMEs");
0071 for (const auto& meQTset : TrackingLSQualityMEs) {
0072 std::string QTname = meQTset.getParameter<std::string>("QT");
0073 tracking_ls_mes.TrackingFlag = nullptr;
0074
0075 if (verbose_)
0076 edm::LogInfo("TrackingCertificationInfo") << " inserting " << QTname << " in TrackingMEsMap" << std::endl;
0077 TrackingLSMEsMap.insert(std::pair<std::string, TrackingLSMEs>(QTname, tracking_ls_mes));
0078 }
0079
0080
0081 SubDetFolder.push_back("SiStrip");
0082 SubDetFolder.push_back("Pixel");
0083 }
0084
0085 TrackingCertificationInfo::~TrackingCertificationInfo() {
0086 edm::LogInfo("TrackingCertificationInfo") << "Deleting TrackingCertificationInfo ";
0087 }
0088
0089
0090
0091 void TrackingCertificationInfo::beginJob() {}
0092
0093
0094
0095 void TrackingCertificationInfo::beginRun(edm::Run const& run, edm::EventSetup const& eSetup) {
0096 edm::LogInfo("TrackingCertificationInfo") << "beginRun starting .." << std::endl;
0097
0098 detCabling_ = &(eSetup.getData(detCablingToken_));
0099
0100 unsigned long long cacheID = eSetup.get<SiStripDetCablingRcd>().cacheIdentifier();
0101 if (m_cacheID_ != cacheID) {
0102 m_cacheID_ = cacheID;
0103 }
0104
0105 nFEDConnected_ = 0;
0106 int nPixelFEDConnected_ = 0;
0107 const int siStripFedIdMin = FEDNumbering::MINSiStripFEDID;
0108 const int siStripFedIdMax = FEDNumbering::MAXSiStripFEDID;
0109 const int siPixelFedIdMin = FEDNumbering::MINSiPixelFEDID;
0110 const int siPixelFedIdMax = FEDNumbering::MAXSiPixelFEDID;
0111 const int siPixelFeds = (siPixelFedIdMax - siPixelFedIdMin + 1);
0112
0113 edm::ESHandle<RunInfo> runInfoRec = eSetup.getHandle(runInfoToken_);
0114 if (runInfoRec.isValid()) {
0115 sumFED_ = runInfoRec.product();
0116 if (sumFED_ != nullptr) {
0117 std::vector<int> FedsInIds = sumFED_->m_fed_in;
0118 for (auto fedID : FedsInIds) {
0119 if (fedID >= siPixelFedIdMin && fedID <= siPixelFedIdMax) {
0120 ++nFEDConnected_;
0121 ++nPixelFEDConnected_;
0122 } else if (fedID >= siStripFedIdMin && fedID <= siStripFedIdMax)
0123 ++nFEDConnected_;
0124 }
0125 LogDebug("TrackingDcsInfo") << " TrackingDcsInfo :: Connected FEDs " << nFEDConnected_;
0126 }
0127 }
0128
0129 allPixelFEDConnected_ = (nPixelFEDConnected_ == siPixelFeds);
0130 }
0131
0132
0133
0134
0135 void TrackingCertificationInfo::bookTrackingCertificationMEs(DQMStore::IBooker& ibooker_, DQMStore::IGetter& igetter_) {
0136 if (verbose_)
0137 edm::LogInfo("TrackingCertificationInfo")
0138 << "bookTrackingCertificationMEs starting .. trackingCertificationBooked_: " << trackingCertificationBooked_
0139 << std::endl;
0140
0141 if (!trackingCertificationBooked_) {
0142 ibooker_.cd();
0143 std::string tracking_dir = "";
0144 TrackingUtility::getTopFolderPath(ibooker_, igetter_, TopFolderName_, tracking_dir);
0145
0146 if (!tracking_dir.empty())
0147 ibooker_.setCurrentFolder(tracking_dir + "/EventInfo");
0148 else
0149 ibooker_.setCurrentFolder(TopFolderName_ + "/EventInfo");
0150
0151 TrackingCertification = ibooker_.bookFloat("CertificationSummary");
0152
0153 std::string hname, htitle;
0154 hname = "CertificationReportMap";
0155 htitle = "Tracking Certification Summary Map";
0156 size_t nQT = TrackingMEsMap.size();
0157 TrackingCertificationSummaryMap = ibooker_.book2D(hname, htitle, nQT, 0.5, float(nQT) + 0.5, 1, 0.5, 1.5);
0158 TrackingCertificationSummaryMap->setAxisTitle("Track Quality Type", 1);
0159 TrackingCertificationSummaryMap->setAxisTitle("QTest Flag", 2);
0160 size_t ibin = 0;
0161 for (const auto& meQTset : TrackingMEsMap) {
0162 TrackingCertificationSummaryMap->setBinLabel(ibin + 1, meQTset.first);
0163 ibin++;
0164 }
0165
0166 if (!tracking_dir.empty())
0167 ibooker_.setCurrentFolder(TopFolderName_ + "/EventInfo/CertificationContents");
0168 else
0169 ibooker_.setCurrentFolder(TopFolderName_ + "/EventInfo/CertificationContents");
0170
0171 for (std::map<std::string, TrackingMEs>::iterator it = TrackingMEsMap.begin(); it != TrackingMEsMap.end(); it++) {
0172 std::string meQTname = it->first;
0173 if (verbose_)
0174 edm::LogInfo("TrackingCertificationInfo") << "bookStatus meQTname: " << meQTname << std::endl;
0175 it->second.TrackingFlag = ibooker_.bookFloat("Track" + meQTname);
0176 if (verbose_)
0177 edm::LogInfo("TrackingCertificationInfo")
0178 << "bookStatus " << it->first << " exists ? " << it->second.TrackingFlag << std::endl;
0179 }
0180
0181 trackingCertificationBooked_ = true;
0182 ibooker_.cd();
0183 }
0184
0185 if (verbose_)
0186 edm::LogInfo("TrackingCertificationInfo")
0187 << "bookStatus trackingCertificationBooked_: " << trackingCertificationBooked_ << std::endl;
0188 }
0189
0190
0191
0192
0193 void TrackingCertificationInfo::bookTrackingCertificationMEsAtLumi(DQMStore::IBooker& ibooker_,
0194 DQMStore::IGetter& igetter_) {
0195 if (verbose_)
0196 edm::LogInfo("TrackingCertificationInfo")
0197 << "bookTrackingCertificationMEs starting .. trackingCertificationBooked_: " << trackingCertificationBooked_
0198 << std::endl;
0199
0200 if (!trackingLSCertificationBooked_) {
0201 ibooker_.cd();
0202 std::string tracking_dir = "";
0203 TrackingUtility::getTopFolderPath(ibooker_, igetter_, TopFolderName_, tracking_dir);
0204
0205 if (!tracking_dir.empty())
0206 ibooker_.setCurrentFolder(tracking_dir + "/EventInfo");
0207 else
0208 ibooker_.setCurrentFolder(TopFolderName_ + "/EventInfo");
0209
0210 TrackingLSCertification = ibooker_.bookFloat("CertificationSummary");
0211
0212 if (!tracking_dir.empty())
0213 ibooker_.setCurrentFolder(TopFolderName_ + "/EventInfo/CertificationContents");
0214 else
0215 ibooker_.setCurrentFolder(TopFolderName_ + "/EventInfo/CertificationContents");
0216
0217 for (std::map<std::string, TrackingLSMEs>::iterator it = TrackingLSMEsMap.begin(); it != TrackingLSMEsMap.end();
0218 it++) {
0219 std::string meQTname = it->first;
0220 if (verbose_)
0221 edm::LogInfo("TrackingCertificationInfo") << "bookStatus meQTname: " << meQTname << std::endl;
0222 it->second.TrackingFlag = ibooker_.bookFloat("Track" + meQTname);
0223 if (verbose_)
0224 edm::LogInfo("TrackingCertificationInfo")
0225 << "bookStatus " << it->first << " exists ? " << it->second.TrackingFlag << std::endl;
0226 }
0227
0228 trackingLSCertificationBooked_ = true;
0229 ibooker_.cd();
0230 }
0231
0232 if (verbose_)
0233 edm::LogInfo("TrackingCertificationInfo")
0234 << "[TrackingCertificationInfo::bookStatus] trackingCertificationBooked_: " << trackingCertificationBooked_
0235 << std::endl;
0236 }
0237
0238
0239
0240
0241
0242 void TrackingCertificationInfo::dqmEndLuminosityBlock(DQMStore::IBooker& ibooker_,
0243 DQMStore::IGetter& igetter_,
0244 edm::LuminosityBlock const& lumiSeg,
0245 edm::EventSetup const& eSetup) {
0246 edm::LogInfo("TrackingCertificationInfo") << "endLuminosityBlock";
0247 bookTrackingCertificationMEsAtLumi(ibooker_, igetter_);
0248 fillDummyTrackingCertificationAtLumi(ibooker_, igetter_);
0249
0250 if (nFEDConnected_ > 0)
0251 fillTrackingCertificationMEsAtLumi(ibooker_, igetter_);
0252 else
0253 fillDummyTrackingCertificationAtLumi(ibooker_, igetter_);
0254 }
0255
0256
0257
0258
0259 void TrackingCertificationInfo::dqmEndJob(DQMStore::IBooker& ibooker_, DQMStore::IGetter& igetter_) {
0260 edm::LogInfo("TrackingCertificationInfo") << "dqmEndJob" << std::endl;
0261
0262 bookTrackingCertificationMEs(ibooker_, igetter_);
0263 fillDummyTrackingCertification(ibooker_, igetter_);
0264
0265 if (nFEDConnected_ > 0)
0266 fillTrackingCertificationMEs(ibooker_, igetter_);
0267 else
0268 fillDummyTrackingCertification(ibooker_, igetter_);
0269
0270 edm::LogInfo("TrackingCertificationInfo") << "[TrackingCertificationInfo::endRun] DONE" << std::endl;
0271 }
0272
0273
0274
0275 void TrackingCertificationInfo::fillTrackingCertificationMEs(DQMStore::IBooker& ibooker_, DQMStore::IGetter& igetter_) {
0276 if (!trackingCertificationBooked_) {
0277 edm::LogError("TrackingCertificationInfo") << "fillTrackingCertificationMEs : MEs missing " << std::endl;
0278 return;
0279 }
0280
0281 ibooker_.cd();
0282 std::string tracking_dir = "";
0283 TrackingUtility::getTopFolderPath(ibooker_, igetter_, TopFolderName_, tracking_dir);
0284 if (verbose_)
0285 edm::LogInfo("TrackingCertificationInfo")
0286 << "fillTrackingCertificationMEs tracking_dir: " << tracking_dir << std::endl;
0287 std::vector<MonitorElement*> all_mes = igetter_.getContents(tracking_dir + "/EventInfo/reportSummaryContents");
0288 float fval = 1.0;
0289
0290 if (verbose_)
0291 edm::LogInfo("TrackingCertificationInfo") << "all_mes: " << all_mes.size() << std::endl;
0292
0293 if (checkPixelFEDs_) {
0294 float val = 1.;
0295 if (allPixelFEDConnected_)
0296 val = 0.;
0297 int xbin = 0;
0298 for (std::map<std::string, TrackingMEs>::const_iterator it = TrackingMEsMap.begin(); it != TrackingMEsMap.end();
0299 it++) {
0300 std::string type = it->first;
0301 if (type == "pixel") {
0302 it->second.TrackingFlag->Fill(val);
0303 TH2F* th2d = TrackingCertificationSummaryMap->getTH2F();
0304 if (verbose_)
0305 edm::LogInfo("TrackingCertificationInfo")
0306 << "fillTrackingCertificationMEs xbin: " << xbin << " val: " << val << std::endl;
0307 th2d->SetBinContent(xbin + 1, 1, val);
0308 }
0309 xbin++;
0310 }
0311 fval = fminf(fval, val);
0312 }
0313
0314 int xbin = (checkPixelFEDs_ ? 1 : 0);
0315 for (std::vector<MonitorElement*>::const_iterator ime = all_mes.begin(); ime != all_mes.end(); ime++) {
0316 MonitorElement* me = (*ime);
0317 if (!me)
0318 continue;
0319 if (verbose_)
0320 edm::LogInfo("TrackingCertificationInfo") << "fillTrackingCertificationMEs me: " << me->getName() << std::endl;
0321 if (me->kind() == MonitorElement::Kind::REAL) {
0322 const std::string& name = me->getName();
0323 float val = me->getFloatValue();
0324
0325 for (std::map<std::string, TrackingMEs>::const_iterator it = TrackingMEsMap.begin(); it != TrackingMEsMap.end();
0326 it++) {
0327 if (verbose_)
0328 edm::LogInfo("TrackingCertificationInfo")
0329 << "fillTrackingCertificationMEs ME: " << it->first << " [" << it->second.TrackingFlag->getFullname()
0330 << "] flag: " << it->second.TrackingFlag->getFloatValue() << std::endl;
0331
0332 std::string type = it->first;
0333 if (name.find(type) != std::string::npos) {
0334 if (verbose_)
0335 edm::LogInfo("TrackingCertificationInfo")
0336 << "fillTrackingCertificationMEs type: " << type << " <---> name: " << name << std::endl;
0337 it->second.TrackingFlag->Fill(val);
0338 if (verbose_)
0339 edm::LogInfo("TrackingCertificationInfo")
0340 << "fillTrackingCertificationMEs xbin: " << xbin << " val: " << val << std::endl;
0341 TH2F* th2d = TrackingCertificationSummaryMap->getTH2F();
0342 th2d->SetBinContent(xbin + 1, 1, val);
0343 xbin++;
0344 break;
0345 }
0346 if (verbose_)
0347 edm::LogInfo("TrackingCertificationInfo")
0348 << "[TrackingCertificationInfo::fillTrackingCertificationMEs] ME: " << it->first << " ["
0349 << it->second.TrackingFlag->getFullname() << "] flag: " << it->second.TrackingFlag->getFloatValue()
0350 << std::endl;
0351 }
0352 fval = fminf(fval, val);
0353 }
0354 }
0355 if (verbose_)
0356 edm::LogInfo("TrackingCertificationInfo")
0357 << "fillTrackingCertificationMEs TrackingCertification: " << fval << std::endl;
0358 TrackingCertification->Fill(fval);
0359 }
0360
0361
0362
0363
0364 void TrackingCertificationInfo::resetTrackingCertificationMEs(DQMStore::IBooker& ibooker_,
0365 DQMStore::IGetter& igetter_) {
0366 if (!trackingCertificationBooked_)
0367 bookTrackingCertificationMEs(ibooker_, igetter_);
0368 TrackingCertification->Reset();
0369 for (std::map<std::string, TrackingMEs>::const_iterator it = TrackingMEsMap.begin(); it != TrackingMEsMap.end();
0370 it++) {
0371 it->second.TrackingFlag->Reset();
0372 }
0373 }
0374
0375
0376
0377
0378 void TrackingCertificationInfo::resetTrackingCertificationMEsAtLumi(DQMStore::IBooker& ibooker_,
0379 DQMStore::IGetter& igetter_) {
0380 if (!trackingLSCertificationBooked_)
0381 bookTrackingCertificationMEsAtLumi(ibooker_, igetter_);
0382 TrackingLSCertification->Reset();
0383 for (std::map<std::string, TrackingLSMEs>::const_iterator it = TrackingLSMEsMap.begin(); it != TrackingLSMEsMap.end();
0384 it++) {
0385 it->second.TrackingFlag->Reset();
0386 }
0387 }
0388
0389
0390
0391
0392 void TrackingCertificationInfo::fillDummyTrackingCertification(DQMStore::IBooker& ibooker_,
0393 DQMStore::IGetter& igetter_) {
0394 resetTrackingCertificationMEs(ibooker_, igetter_);
0395 if (trackingCertificationBooked_) {
0396 TrackingCertification->Fill(-1.0);
0397 for (std::map<std::string, TrackingMEs>::const_iterator it = TrackingMEsMap.begin(); it != TrackingMEsMap.end();
0398 it++) {
0399 it->second.TrackingFlag->Fill(-1.0);
0400 }
0401
0402 for (int xbin = 1; xbin < TrackingCertificationSummaryMap->getNbinsX() + 1; xbin++)
0403 for (int ybin = 1; ybin < TrackingCertificationSummaryMap->getNbinsY() + 1; ybin++)
0404 TrackingCertificationSummaryMap->Fill(xbin, ybin, -1);
0405 }
0406 }
0407
0408
0409
0410
0411 void TrackingCertificationInfo::fillDummyTrackingCertificationAtLumi(DQMStore::IBooker& ibooker_,
0412 DQMStore::IGetter& igetter_) {
0413 resetTrackingCertificationMEsAtLumi(ibooker_, igetter_);
0414 if (trackingLSCertificationBooked_) {
0415 TrackingLSCertification->Fill(-1.0);
0416 for (std::map<std::string, TrackingLSMEs>::const_iterator it = TrackingLSMEsMap.begin();
0417 it != TrackingLSMEsMap.end();
0418 it++) {
0419 it->second.TrackingFlag->Fill(-1.0);
0420 }
0421 }
0422 }
0423
0424
0425
0426
0427 void TrackingCertificationInfo::fillTrackingCertificationMEsAtLumi(DQMStore::IBooker& ibooker_,
0428 DQMStore::IGetter& igetter_) {
0429 if (verbose_)
0430 edm::LogInfo("TrackingCertificationInfo") << "fillTrackingCertificationMEsAtLumi starting .." << std::endl;
0431 if (!trackingLSCertificationBooked_) {
0432 return;
0433 }
0434 resetTrackingCertificationMEsAtLumi(ibooker_, igetter_);
0435
0436 ibooker_.cd();
0437 std::string tracking_dir = "";
0438 TrackingUtility::getTopFolderPath(ibooker_, igetter_, TopFolderName_, tracking_dir);
0439 if (verbose_)
0440 edm::LogInfo("TrackingCertificationInfo")
0441 << "fillTrackingCertificationMEsAtLumi tracking_dir: " << tracking_dir << std::endl;
0442
0443 if (verbose_)
0444 edm::LogInfo("TrackingCertificationInfo")
0445 << "fillTrackingCertificationMEsAtLumi tracking_dir: " << tracking_dir << std::endl;
0446 std::vector<MonitorElement*> all_mes = igetter_.getContents(tracking_dir + "/EventInfo/reportSummaryContents");
0447
0448 if (verbose_)
0449 edm::LogInfo("TrackingCertificationInfo") << "all_mes: " << all_mes.size() << std::endl;
0450
0451 for (std::vector<MonitorElement*>::const_iterator ime = all_mes.begin(); ime != all_mes.end(); ime++) {
0452 MonitorElement* me = (*ime);
0453 if (!me)
0454 continue;
0455 if (verbose_)
0456 edm::LogInfo("TrackingCertificationInfo")
0457 << "fillTrackingCertificationMEsAtLumi me: " << me->getName() << std::endl;
0458 if (me->kind() == MonitorElement::Kind::REAL) {
0459 const std::string& name = me->getName();
0460 float val = me->getFloatValue();
0461 if (verbose_)
0462 edm::LogInfo("TrackingCertificationInfo") << "fillTrackingCertificationMEsAtLumi val: " << val << std::endl;
0463
0464 for (std::map<std::string, TrackingLSMEs>::const_iterator it = TrackingLSMEsMap.begin();
0465 it != TrackingLSMEsMap.end();
0466 it++) {
0467 if (verbose_)
0468 edm::LogInfo("TrackingCertificationInfo")
0469 << "fillTrackingCertificationMEsAtLumi ME: " << it->first << " ["
0470 << it->second.TrackingFlag->getFullname() << "] flag: " << it->second.TrackingFlag->getFloatValue()
0471 << std::endl;
0472
0473 std::string type = it->first;
0474 if (verbose_)
0475 edm::LogInfo("TrackingCertificationInfo") << "fillTrackingCertificationMEsAtLumi type: " << type << std::endl;
0476 if (name.find(type) != std::string::npos) {
0477 if (verbose_)
0478 edm::LogInfo("TrackingCertificationInfo")
0479 << "fillTrackingCertificationMEsAtLumi type: " << type << " <---> name: " << name << std::endl;
0480 it->second.TrackingFlag->Fill(val);
0481 break;
0482 }
0483 if (verbose_)
0484 edm::LogInfo("TrackingCertificationInfo")
0485 << "fillTrackingCertificationMEsAtLumi ME: " << it->first << " ["
0486 << it->second.TrackingFlag->getFullname() << "] flag: " << it->second.TrackingFlag->getFloatValue()
0487 << std::endl;
0488 }
0489 }
0490 }
0491
0492 float global_dqm_flag = 1.0;
0493 std::string full_path = tracking_dir + "/EventInfo/reportSummary";
0494 MonitorElement* me_dqm = igetter_.get(full_path);
0495 if (me_dqm && me_dqm->kind() == MonitorElement::Kind::REAL)
0496 global_dqm_flag = me_dqm->getFloatValue();
0497 if (verbose_)
0498 edm::LogInfo("TrackingCertificationInfo")
0499 << "fillTrackingCertificationMEsAtLumi global_dqm_flag: " << global_dqm_flag << std::endl;
0500
0501 TrackingLSCertification->Reset();
0502 TrackingLSCertification->Fill(global_dqm_flag);
0503 }
0504 #include "FWCore/Framework/interface/MakerMacros.h"
0505 DEFINE_FWK_MODULE(TrackingCertificationInfo);