File indexing completed on 2023-03-17 10:56:03
0001 #include "DQM/SiPixelMonitorClient/interface/SiPixelEDAClient.h"
0002
0003
0004 #include "FWCore/Framework/interface/EventSetup.h"
0005 #include "FWCore/Framework/interface/LuminosityBlock.h"
0006 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0007 #include "FWCore/ParameterSet/interface/FileInPath.h"
0008 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0009 #include "FWCore/ServiceRegistry/interface/Service.h"
0010
0011 #include "DataFormats/DetId/interface/DetId.h"
0012 #include "DataFormats/FEDRawData/interface/FEDNumbering.h"
0013 #include "DataFormats/FEDRawData/interface/FEDRawData.h"
0014 #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h"
0015 #include "DataFormats/GeometrySurface/interface/Surface.h"
0016 #include "DataFormats/TrackerCommon/interface/PixelBarrelName.h"
0017 #include "DataFormats/SiPixelDetId/interface/PixelBarrelNameUpgrade.h"
0018 #include "DataFormats/TrackerCommon/interface/PixelEndcapName.h"
0019 #include "DataFormats/SiPixelDetId/interface/PixelEndcapNameUpgrade.h"
0020 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
0021
0022 #include "CondFormats/SiPixelObjects/interface/DetectorIndex.h"
0023 #include "CondFormats/SiPixelObjects/interface/SiPixelFrameConverter.h"
0024
0025 #include "Geometry/CommonTopologies/interface/PixelTopology.h"
0026 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
0027 #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h"
0028 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0029 #include "Geometry/TrackerNumberingBuilder/interface/GeometricDet.h"
0030
0031 #include "DQMServices/Core/interface/DQMStore.h"
0032
0033 #include "DQM/SiPixelMonitorClient/interface/SiPixelActionExecutor.h"
0034 #include "DQM/SiPixelMonitorClient/interface/SiPixelDataQuality.h"
0035 #include "DQM/SiPixelMonitorClient/interface/SiPixelInformationExtractor.h"
0036 #include "DQM/SiPixelMonitorClient/interface/SiPixelUtility.h"
0037
0038 #include <cmath>
0039 #include <cstdio>
0040 #include <iomanip>
0041 #include <iostream>
0042 #include <sstream>
0043 #include <string>
0044
0045 #define BUF_SIZE 256
0046
0047 using namespace edm;
0048 using namespace std;
0049
0050
0051
0052 SiPixelEDAClient::SiPixelEDAClient(const edm::ParameterSet &ps) {
0053
0054
0055 edm::LogInfo("SiPixelEDAClient") << " Creating SiPixelEDAClient "
0056 << "\n";
0057
0058 summaryFrequency_ = ps.getUntrackedParameter<int>("SummaryCreationFrequency", 20);
0059 tkMapFrequency_ = ps.getUntrackedParameter<int>("TkMapCreationFrequency", 50);
0060 staticUpdateFrequency_ = ps.getUntrackedParameter<int>("StaticUpdateFrequency", 10);
0061 actionOnLumiSec_ = ps.getUntrackedParameter<bool>("ActionOnLumiSection", false);
0062 actionOnRunEnd_ = ps.getUntrackedParameter<bool>("ActionOnRunEnd", true);
0063 evtOffsetForInit_ = ps.getUntrackedParameter<int>("EventOffsetForInit", 10);
0064 offlineXMLfile_ = ps.getUntrackedParameter<bool>("UseOfflineXMLFile", false);
0065 hiRes_ = ps.getUntrackedParameter<bool>("HighResolutionOccupancy",
0066 false);
0067 noiseRate_ = ps.getUntrackedParameter<double>("NoiseRateCutValue", 0.001);
0068 noiseRateDenominator_ = ps.getUntrackedParameter<int>("NEventsForNoiseCalculation", 100000);
0069 Tier0Flag_ = ps.getUntrackedParameter<bool>("Tier0Flag", false);
0070 doHitEfficiency_ = ps.getUntrackedParameter<bool>("DoHitEfficiency", true);
0071 inputSource_ = ps.getUntrackedParameter<string>("inputSource", "source");
0072 isUpgrade_ = ps.getUntrackedParameter<bool>("isUpgrade", false);
0073
0074 if (!Tier0Flag_) {
0075 string localPath = string("DQM/SiPixelMonitorClient/test/loader.html");
0076 std::ifstream fin(edm::FileInPath(localPath).fullPath().c_str(), ios::in);
0077 char buf[BUF_SIZE];
0078
0079 if (!fin) {
0080 cerr << "Input File: loader.html"
0081 << " could not be opened!" << endl;
0082 return;
0083 }
0084
0085 while (fin.getline(buf, BUF_SIZE, '\n')) {
0086 html_out_ << buf;
0087 }
0088 fin.close();
0089 }
0090
0091 firstLumi = true;
0092
0093
0094 sipixelInformationExtractor_ = new SiPixelInformationExtractor(offlineXMLfile_);
0095 sipixelActionExecutor_ = new SiPixelActionExecutor(offlineXMLfile_, Tier0Flag_);
0096 sipixelDataQuality_ = new SiPixelDataQuality(offlineXMLfile_);
0097
0098 inputSourceToken_ = consumes<FEDRawDataCollection>(ps.getUntrackedParameter<string>("inputSource", "source"));
0099 cablingMapToken_ = esConsumes<SiPixelFedCablingMap, SiPixelFedCablingMapRcd, edm::Transition::EndLuminosityBlock>();
0100
0101 }
0102
0103
0104
0105
0106 SiPixelEDAClient::~SiPixelEDAClient() {
0107
0108
0109 edm::LogInfo("SiPixelEDAClient") << " Deleting SiPixelEDAClient "
0110 << "\n";
0111
0112 if (sipixelInformationExtractor_) {
0113 delete sipixelInformationExtractor_;
0114 sipixelInformationExtractor_ = nullptr;
0115 }
0116 if (sipixelActionExecutor_) {
0117 delete sipixelActionExecutor_;
0118 sipixelActionExecutor_ = nullptr;
0119 }
0120 if (sipixelDataQuality_) {
0121 delete sipixelDataQuality_;
0122 sipixelDataQuality_ = nullptr;
0123 }
0124
0125
0126 }
0127
0128
0129
0130 void SiPixelEDAClient::beginRun(Run const &run, edm::EventSetup const &eSetup) {
0131 edm::LogInfo("SiPixelEDAClient") << "[SiPixelEDAClient]: Begining of Run";
0132
0133
0134
0135
0136 if (firstLumi) {
0137 summaryFrequency_ = -1;
0138 tkMapFrequency_ = -1;
0139 actionOnRunEnd_ = true;
0140 evtOffsetForInit_ = -1;
0141
0142 nLumiSecs_ = 0;
0143 nEvents_ = 0;
0144 if (Tier0Flag_)
0145 nFEDs_ = 40;
0146 else
0147 nFEDs_ = 0;
0148 }
0149
0150
0151 }
0152
0153
0154
0155
0156 void SiPixelEDAClient::dqmEndLuminosityBlock(DQMStore::IBooker &iBooker,
0157 DQMStore::IGetter &iGetter,
0158 edm::LuminosityBlock const &lumiSeg,
0159 edm::EventSetup const &eSetup) {
0160
0161
0162 edm::LogInfo("SiPixelEDAClient") << "[SiPixelEDAClient]: Begin of LS transition";
0163
0164
0165 nEvents_lastLS_ = 0;
0166 nErrorsBarrel_lastLS_ = 0;
0167 nErrorsEndcap_lastLS_ = 0;
0168 MonitorElement *me = iGetter.get("Pixel/AdditionalPixelErrors/byLumiErrors");
0169 if (me) {
0170 nEvents_lastLS_ = int(me->getBinContent(0));
0171 nErrorsBarrel_lastLS_ = int(me->getBinContent(1));
0172 nErrorsEndcap_lastLS_ = int(me->getBinContent(2));
0173 me->Reset();
0174 }
0175
0176
0177 sipixelActionExecutor_->createSummary(iBooker, iGetter, isUpgrade_);
0178
0179 if (firstLumi) {
0180 iBooker.setCurrentFolder("Pixel/");
0181 iGetter.setCurrentFolder("Pixel/");
0182
0183
0184
0185
0186 if (!Tier0Flag_)
0187 sipixelActionExecutor_->bookDeviations(iBooker, isUpgrade_);
0188
0189 if (doHitEfficiency_)
0190 sipixelActionExecutor_->bookEfficiency(iBooker, isUpgrade_);
0191
0192 sipixelActionExecutor_->bookOccupancyPlots(iBooker, iGetter, hiRes_);
0193
0194 if (noiseRate_ > 0.)
0195 sipixelInformationExtractor_->bookNoisyPixels(iBooker, noiseRate_, Tier0Flag_);
0196
0197 sipixelDataQuality_->bookGlobalQualityFlag(iBooker, Tier0Flag_, nFEDs_);
0198
0199 if (!Tier0Flag_) {
0200 MonitorElement *mefed = iGetter.get("Pixel/EventInfo/DAQContents/fedcounter");
0201 if (mefed) {
0202 for (int i = 0; i < mefed->getNbinsX(); ++i)
0203 nFEDs_ += mefed->getBinContent(i + 1);
0204 }
0205 }
0206
0207 theCablingMap = eSetup.getData(cablingMapToken_);
0208
0209 firstLumi = false;
0210 }
0211
0212 edm::LogInfo("SiPixelEDAClient") << "[SiPixelEDAClient]: End of LS transition, performing the DQM client "
0213 "operation";
0214
0215 nLumiSecs_ = lumiSeg.id().luminosityBlock();
0216
0217
0218
0219
0220 edm::LogInfo("SiPixelEDAClient") << "====================================================== " << endl
0221 << " ===> Iteration # " << nLumiSecs_ << " " << lumiSeg.luminosityBlock() << endl
0222 << "====================================================== " << endl;
0223
0224 if (Tier0Flag_)
0225 sipixelActionExecutor_->normaliseAvDigiOccVsLumi(iBooker, iGetter, nLumiSecs_);
0226
0227 bool init = true;
0228 if (actionOnLumiSec_ && nLumiSecs_ % 1 == 0) {
0229 if (doHitEfficiency_)
0230 sipixelActionExecutor_->createEfficiency(iBooker, iGetter, isUpgrade_);
0231 sipixelActionExecutor_->createOccupancy(iBooker, iGetter);
0232 iBooker.cd();
0233 iGetter.cd();
0234 sipixelDataQuality_->computeGlobalQualityFlagByLumi(
0235 iGetter, init, nFEDs_, Tier0Flag_, nEvents_lastLS_, nErrorsBarrel_lastLS_, nErrorsEndcap_lastLS_);
0236 init = true;
0237 iBooker.cd();
0238 iGetter.cd();
0239 sipixelDataQuality_->fillGlobalQualityPlot(iBooker, iGetter, init, &theCablingMap, nFEDs_, Tier0Flag_, nLumiSecs_);
0240 init = true;
0241 if (noiseRate_ >= 0.)
0242 sipixelInformationExtractor_->findNoisyPixels(
0243 iBooker, iGetter, init, noiseRate_, noiseRateDenominator_, &theCablingMap);
0244 }
0245
0246
0247 }
0248
0249
0250
0251 void SiPixelEDAClient::dqmEndJob(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter) {
0252
0253 edm::LogInfo("SiPixelEDAClient") << "[SiPixelEDAClient]: endjob called!";
0254
0255 sipixelActionExecutor_->createSummary(iBooker, iGetter, isUpgrade_);
0256
0257 if (actionOnRunEnd_) {
0258
0259
0260 if (doHitEfficiency_) {
0261 sipixelActionExecutor_->createEfficiency(iBooker, iGetter, isUpgrade_);
0262 sipixelActionExecutor_->fillEfficiencySummary(iBooker, iGetter);
0263 }
0264
0265 sipixelActionExecutor_->createOccupancy(iBooker, iGetter);
0266
0267 if (Tier0Flag_)
0268 sipixelActionExecutor_->normaliseAvDigiOcc(iBooker, iGetter);
0269
0270 iBooker.cd();
0271 iGetter.cd();
0272 bool init = true;
0273 sipixelDataQuality_->computeGlobalQualityFlag(iBooker, iGetter, init, nFEDs_, Tier0Flag_);
0274 init = true;
0275 iBooker.cd();
0276 iGetter.cd();
0277
0278 sipixelDataQuality_->fillGlobalQualityPlot(iBooker, iGetter, init, &theCablingMap, nFEDs_, Tier0Flag_, nLumiSecs_);
0279 init = true;
0280 if (noiseRate_ >= 0.)
0281 sipixelInformationExtractor_->findNoisyPixels(
0282 iBooker, iGetter, init, noiseRate_, noiseRateDenominator_, &theCablingMap);
0283 }
0284 }