File indexing completed on 2024-09-07 04:35:32
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0010 #include "CondCore/CondDB/interface/ConnectionPool.h"
0011
0012 #include "CondCore/Utilities/interface/PayloadInspectorModule.h"
0013 #include "CondCore/Utilities/interface/PayloadInspector.h"
0014 #include "CondCore/CondDB/interface/Time.h"
0015 #include "CondCore/SiPixelPlugins/interface/SiPixelPayloadInspectorHelper.h"
0016 #include "FWCore/ParameterSet/interface/FileInPath.h"
0017 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0018 #include "CalibTracker/StandaloneTrackerTopology/interface/StandaloneTrackerTopology.h"
0019
0020 #include "CondFormats/SiPixelObjects/interface/CablingPathToDetUnit.h"
0021 #include "CondFormats/SiPixelObjects/interface/LocalPixel.h"
0022 #include "CondFormats/SiPixelObjects/interface/PixelIndices.h"
0023 #include "CondFormats/SiPixelObjects/interface/PixelROC.h"
0024 #include "CondFormats/SiPixelObjects/interface/SiPixelFedCabling.h"
0025 #include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingMap.h"
0026 #include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingTree.h"
0027 #include "CondFormats/SiPixelObjects/interface/SiPixelFrameConverter.h"
0028
0029
0030 #include "CondFormats/SiPixelObjects/interface/SiPixelFEDChannelContainer.h"
0031 #include "CondFormats/SiPixelObjects/interface/SiPixelQualityProbabilities.h" // to display aggregate probability
0032 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
0033 #include "DataFormats/DetId/interface/DetId.h"
0034 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0035 #include "DQM/TrackerRemapper/interface/Phase1PixelROCMaps.h"
0036
0037 #include <memory>
0038 #include <sstream>
0039 #include <iostream>
0040 #include <fmt/printf.h>
0041
0042
0043 #include "TH2F.h"
0044 #include "TLegend.h"
0045 #include "TCanvas.h"
0046 #include "TLine.h"
0047 #include "TGraph.h"
0048 #include "TGaxis.h"
0049 #include "TStyle.h"
0050 #include "TLatex.h"
0051 #include "TPave.h"
0052 #include "TPaveStats.h"
0053
0054 namespace {
0055
0056 using namespace cond::payloadInspector;
0057
0058
0059
0060
0061
0062 template <SiPixelPI::DetType myType>
0063 class SiPixelFEDChannelContainerMap : public PlotImage<SiPixelFEDChannelContainer, SINGLE_IOV> {
0064 public:
0065 SiPixelFEDChannelContainerMap()
0066 : PlotImage<SiPixelFEDChannelContainer, SINGLE_IOV>(
0067 "SiPixelFEDChannelContainer Pixel Track Map of one (or more scenarios"),
0068 m_trackerTopo{StandaloneTrackerTopology::fromTrackerParametersXMLFile(
0069 edm::FileInPath("Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml").fullPath())} {
0070
0071 PlotBase::addInputParam("Scenarios");
0072
0073
0074 m_condDbCabling = "frontier://FrontierProd/CMS_CONDITIONS";
0075 m_CablingTagName = "SiPixelFedCablingMap_phase1_v7";
0076
0077 m_connectionPool.setParameters(m_connectionPset);
0078 m_connectionPool.configure();
0079 }
0080
0081 bool fill() override {
0082 std::vector<std::string> the_scenarios = {};
0083
0084 auto paramValues = PlotBase::inputParamValues();
0085 auto ip = paramValues.find("Scenarios");
0086 if (ip != paramValues.end()) {
0087 auto input = ip->second;
0088 typedef boost::tokenizer<boost::char_separator<char>> tokenizer;
0089 boost::char_separator<char> sep{","};
0090 tokenizer tok{input, sep};
0091 for (const auto& t : tok) {
0092 the_scenarios.push_back(t);
0093 }
0094 } else {
0095 edm::LogWarning(k_ClassName)
0096 << "\n WARNING!!!! \n The needed parameter Scenarios has not been passed. Will use all the scenarios in "
0097 "the file!"
0098 << "\n Buckle your seatbelts... this might take a while... \n\n";
0099 the_scenarios.push_back("all");
0100 }
0101
0102 Phase1PixelROCMaps theROCMap("");
0103
0104 auto tag = PlotBase::getTag<0>();
0105 auto tagname = tag.name;
0106 auto iov = tag.iovs.front();
0107
0108
0109 edm::LogPrint(k_ClassName) << "[SiPixelFEDChannelContainerTest::" << __func__ << "] "
0110 << "Query the condition database " << m_condDbCabling;
0111
0112 cond::persistency::Session condDbSession = m_connectionPool.createSession(m_condDbCabling);
0113 condDbSession.transaction().start(true);
0114
0115
0116 edm::LogPrint(k_ClassName) << "[SiPixelFEDChannelContainerTest::" << __func__ << "] "
0117 << "Reading IOVs from tag " << m_CablingTagName;
0118
0119 const auto MIN_VAL = cond::timeTypeSpecs[cond::runnumber].beginValue;
0120 const auto MAX_VAL = cond::timeTypeSpecs[cond::runnumber].endValue;
0121
0122
0123 std::vector<std::tuple<cond::Time_t, cond::Hash>> m_cabling_iovs;
0124 condDbSession.readIov(m_CablingTagName).selectRange(MIN_VAL, MAX_VAL, m_cabling_iovs);
0125
0126 std::vector<unsigned int> listOfCablingIOVs;
0127 std::transform(m_cabling_iovs.begin(),
0128 m_cabling_iovs.end(),
0129 std::back_inserter(listOfCablingIOVs),
0130 [](std::tuple<cond::Time_t, cond::Hash> myIOV2) -> unsigned int { return std::get<0>(myIOV2); });
0131
0132 edm::LogPrint(k_ClassName) << " Number of SiPixelFedCablngMap payloads: " << listOfCablingIOVs.size()
0133 << std::endl;
0134
0135 auto it = std::find(
0136 listOfCablingIOVs.begin(), listOfCablingIOVs.end(), closest_from_below(listOfCablingIOVs, std::get<0>(iov)));
0137 int index = std::distance(listOfCablingIOVs.begin(), it);
0138
0139 edm::LogPrint(k_ClassName) << " using the SiPixelFedCablingMap with hash: "
0140 << std::get<1>(m_cabling_iovs.at(index)) << std::endl;
0141
0142 auto theCablingMap = condDbSession.fetchPayload<SiPixelFedCablingMap>(std::get<1>(m_cabling_iovs.at(index)));
0143 theCablingMap->initializeRocs();
0144
0145
0146
0147
0148
0149
0150
0151 std::shared_ptr<SiPixelFEDChannelContainer> payload = fetchPayload(std::get<1>(iov));
0152 const auto& scenarioMap = payload->getScenarioMap();
0153
0154 auto pIndexConverter = PixelIndices(numColumns, numRows);
0155
0156 for (const auto& scenario : scenarioMap) {
0157 std::string scenName = scenario.first;
0158
0159 if (std::find_if(the_scenarios.begin(), the_scenarios.end(), compareKeys(scenName)) != the_scenarios.end() ||
0160 the_scenarios[0] == "all") {
0161 edm::LogPrint(k_ClassName) << "\t Found Scenario: " << scenName << " ==> dumping it";
0162 } else {
0163 continue;
0164 }
0165
0166
0167
0168 const auto& theDetSetBadPixelFedChannels = payload->getDetSetBadPixelFedChannels(scenName);
0169 for (const auto& disabledChannels : *theDetSetBadPixelFedChannels) {
0170 const auto t_detid = disabledChannels.detId();
0171 int subid = DetId(t_detid).subdetId();
0172 LogDebug(k_ClassName) << fmt::sprintf("DetId : %i \n", t_detid) << std::endl;
0173
0174 std::bitset<16> badRocsFromFEDChannels;
0175
0176 for (const auto& ch : disabledChannels) {
0177 std::string toOut_ = fmt::sprintf("fed : %i | link : %2i | roc_first : %2i | roc_last: %2i \n",
0178 ch.fed,
0179 ch.link,
0180 ch.roc_first,
0181 ch.roc_last);
0182
0183 LogDebug(k_ClassName) << toOut_ << std::endl;
0184 const std::vector<sipixelobjects::CablingPathToDetUnit>& path =
0185 theCablingMap->pathToDetUnit(disabledChannels.detId());
0186 for (unsigned int i_roc = ch.roc_first; i_roc <= ch.roc_last; ++i_roc) {
0187 for (const auto p : path) {
0188 const sipixelobjects::PixelROC* myroc = theCablingMap->findItem(p);
0189 if (myroc->idInDetUnit() == static_cast<unsigned int>(i_roc)) {
0190 sipixelobjects::LocalPixel::RocRowCol local = {39, 25};
0191 sipixelobjects::GlobalPixel global = myroc->toGlobal(sipixelobjects::LocalPixel(local));
0192 int chipIndex(0), colROC(0), rowROC(0);
0193
0194 pIndexConverter.transformToROC(global.col, global.row, chipIndex, colROC, rowROC);
0195
0196 LogDebug(k_ClassName) << " => i_roc:" << i_roc << " " << global.col << "-" << global.row << " | => "
0197 << chipIndex << " : (" << colROC << "," << rowROC << ")" << std::endl;
0198
0199 badRocsFromFEDChannels[chipIndex] = true;
0200 }
0201 }
0202 }
0203 }
0204
0205 LogDebug(k_ClassName) << badRocsFromFEDChannels << std::endl;
0206
0207 auto myDetId = DetId(t_detid);
0208
0209 if (subid == PixelSubdetector::PixelBarrel) {
0210 theROCMap.fillSelectedRocs(myDetId, badRocsFromFEDChannels, 1.);
0211 }
0212 else if (subid == PixelSubdetector::PixelEndcap) {
0213 theROCMap.fillSelectedRocs(myDetId, badRocsFromFEDChannels, 1.);
0214 }
0215 else {
0216 throw cms::Exception("LogicError") << "Unknown Pixel SubDet ID " << std::endl;
0217 }
0218 }
0219 }
0220
0221 gStyle->SetOptStat(0);
0222
0223 TCanvas canvas("Summary", "Summary", 1200, k_height[myType]);
0224 canvas.cd();
0225
0226 auto unpacked = SiPixelPI::unpack(std::get<0>(iov));
0227
0228 std::string IOVstring = (unpacked.first == 0)
0229 ? std::to_string(unpacked.second)
0230 : (std::to_string(unpacked.first) + "," + std::to_string(unpacked.second));
0231
0232 const auto headerText = fmt::sprintf("#color[4]{%s}, IOV: #color[4]{%s}", tagname, IOVstring);
0233
0234 switch (myType) {
0235 case SiPixelPI::t_barrel:
0236 theROCMap.drawBarrelMaps(canvas, headerText);
0237 break;
0238 case SiPixelPI::t_forward:
0239 theROCMap.drawForwardMaps(canvas, headerText);
0240 break;
0241 case SiPixelPI::t_all:
0242 theROCMap.drawMaps(canvas, headerText);
0243 break;
0244 default:
0245 throw cms::Exception("LogicError") << "\nERROR: unrecognized Pixel Detector part " << std::endl;
0246 }
0247
0248 std::string fileName(m_imageFileName);
0249 canvas.SaveAs(fileName.c_str());
0250
0251
0252 condDbSession.transaction().commit();
0253
0254 return true;
0255 }
0256
0257 public:
0258 inline unsigned int closest_from_above(std::vector<unsigned int> const& vec, unsigned int value) {
0259 auto const it = std::lower_bound(vec.begin(), vec.end(), value);
0260 return vec.at(it - vec.begin() - 1);
0261 }
0262
0263 inline unsigned int closest_from_below(std::vector<unsigned int> const& vec, unsigned int value) {
0264 auto const it = std::upper_bound(vec.begin(), vec.end(), value);
0265 return vec.at(it - vec.begin() - 1);
0266 }
0267
0268
0269 struct compareKeys {
0270 std::string key;
0271 compareKeys(std::string const& i) : key(i) {}
0272
0273 bool operator()(std::string const& i) { return (key == i); }
0274 };
0275
0276 private:
0277
0278 static constexpr int numColumns = 416;
0279 static constexpr int numRows = 160;
0280 static constexpr int n_rings = 2;
0281 static constexpr int n_layers = 4;
0282
0283
0284 static constexpr std::array<int, 3> k_height = {{1200, 600, 1600}};
0285 static constexpr const char* k_ClassName = "SiPixelFEDChannelContainerMap";
0286
0287 TrackerTopology m_trackerTopo;
0288 edm::ParameterSet m_connectionPset;
0289 cond::persistency::ConnectionPool m_connectionPool;
0290 std::string m_CablingTagName;
0291 std::string m_condDbCabling;
0292 };
0293
0294
0295
0296
0297
0298 template <SiPixelPI::DetType myType>
0299 class SiPixelFEDChannelContainerMapSimple : public PlotImage<SiPixelFEDChannelContainer, SINGLE_IOV> {
0300 public:
0301 SiPixelFEDChannelContainerMapSimple()
0302 : PlotImage<SiPixelFEDChannelContainer, SINGLE_IOV>(
0303 "SiPixelFEDChannelContainer Pixel Track Map of one (or more scenarios)") {
0304
0305 PlotBase::addInputParam("Scenarios");
0306 }
0307
0308 bool fill() override {
0309 std::vector<std::string> the_scenarios = {};
0310
0311 auto paramValues = PlotBase::inputParamValues();
0312 auto ip = paramValues.find("Scenarios");
0313 if (ip != paramValues.end()) {
0314 auto input = ip->second;
0315 typedef boost::tokenizer<boost::char_separator<char>> tokenizer;
0316 boost::char_separator<char> sep{","};
0317 tokenizer tok{input, sep};
0318 for (const auto& t : tok) {
0319 the_scenarios.push_back(t);
0320 }
0321 } else {
0322 edm::LogWarning(k_ClassName)
0323 << "\n WARNING!!!! \n The needed parameter Scenarios has not been passed. Will use all the scenarios in "
0324 "the file!"
0325 << "\n Buckle your seatbelts... this might take a while... \n\n";
0326 the_scenarios.push_back("all");
0327 }
0328
0329 Phase1PixelROCMaps theROCMap("");
0330
0331 auto tag = PlotBase::getTag<0>();
0332 auto tagname = tag.name;
0333 auto iov = tag.iovs.front();
0334
0335 std::shared_ptr<SiPixelFEDChannelContainer> payload = fetchPayload(std::get<1>(iov));
0336 const auto& scenarioMap = payload->getScenarioMap();
0337
0338 for (const auto& scenario : scenarioMap) {
0339 std::string scenName = scenario.first;
0340
0341 if (std::find_if(the_scenarios.begin(), the_scenarios.end(), compareKeys(scenName)) != the_scenarios.end() ||
0342 the_scenarios[0] == "all") {
0343 edm::LogPrint(k_ClassName) << "\t Found Scenario: " << scenName << " ==> dumping it";
0344 } else {
0345 continue;
0346 }
0347
0348 const auto& theDetSetBadPixelFedChannels = payload->getDetSetBadPixelFedChannels(scenName);
0349 for (const auto& disabledChannels : *theDetSetBadPixelFedChannels) {
0350 const auto t_detid = disabledChannels.detId();
0351 int subid = DetId(t_detid).subdetId();
0352 LogDebug(k_ClassName) << fmt::sprintf("DetId : %i \n", t_detid) << std::endl;
0353
0354 std::bitset<16> badRocsFromFEDChannels;
0355
0356 for (const auto& ch : disabledChannels) {
0357 std::string toOut_ = fmt::sprintf("fed : %i | link : %2i | roc_first : %2i | roc_last: %2i \n",
0358 ch.fed,
0359 ch.link,
0360 ch.roc_first,
0361 ch.roc_last);
0362
0363 LogDebug(k_ClassName) << toOut_ << std::endl;
0364 for (unsigned int i_roc = ch.roc_first; i_roc <= ch.roc_last; ++i_roc) {
0365 badRocsFromFEDChannels.set(i_roc);
0366 }
0367 }
0368
0369 LogDebug(k_ClassName) << badRocsFromFEDChannels << std::endl;
0370
0371 const auto& myDetId = DetId(t_detid);
0372
0373 if (subid == PixelSubdetector::PixelBarrel) {
0374 theROCMap.fillSelectedRocs(myDetId, badRocsFromFEDChannels, 1.);
0375 }
0376 else if (subid == PixelSubdetector::PixelEndcap) {
0377 theROCMap.fillSelectedRocs(myDetId, badRocsFromFEDChannels, 1.);
0378 }
0379 else {
0380 throw cms::Exception("LogicError") << "Unknown Pixel SubDet ID " << std::endl;
0381 }
0382 }
0383 }
0384
0385 gStyle->SetOptStat(0);
0386
0387 TCanvas canvas("Summary", "Summary", 1200, k_height[myType]);
0388 canvas.cd();
0389
0390 auto unpacked = SiPixelPI::unpack(std::get<0>(iov));
0391
0392 std::string IOVstring = (unpacked.first == 0)
0393 ? std::to_string(unpacked.second)
0394 : (std::to_string(unpacked.first) + "," + std::to_string(unpacked.second));
0395
0396 const auto headerText = fmt::sprintf("#color[4]{%s}, IOV: #color[4]{%s}", tagname, IOVstring);
0397
0398 switch (myType) {
0399 case SiPixelPI::t_barrel:
0400 theROCMap.drawBarrelMaps(canvas, headerText);
0401 break;
0402 case SiPixelPI::t_forward:
0403 theROCMap.drawForwardMaps(canvas, headerText);
0404 break;
0405 case SiPixelPI::t_all:
0406 theROCMap.drawMaps(canvas, headerText);
0407 break;
0408 default:
0409 throw cms::Exception("LogicError") << "\nERROR: unrecognized Pixel Detector part " << std::endl;
0410 }
0411
0412
0413 canvas.cd();
0414 auto ltx = TLatex();
0415 ltx.SetTextFont(62);
0416
0417 ltx.SetTextSize(0.023);
0418 ltx.DrawLatexNDC(
0419 gPad->GetLeftMargin() - 0.09,
0420 gPad->GetBottomMargin() - 0.09,
0421 ("scenarios: #color[4]{" +
0422 std::accumulate(the_scenarios.begin(),
0423 the_scenarios.end(),
0424 std::string(),
0425 [](const std::string& acc, const std::string& str) { return acc + " " + str; }) +
0426 "}")
0427 .c_str());
0428
0429 std::string fileName(m_imageFileName);
0430 canvas.SaveAs(fileName.c_str());
0431 return true;
0432 }
0433
0434 public:
0435
0436 struct compareKeys {
0437 std::string key;
0438 compareKeys(std::string const& i) : key(i) {}
0439
0440 bool operator()(std::string const& i) { return (key == i); }
0441 };
0442
0443 private:
0444
0445 static constexpr std::array<int, 3> k_height = {{1200, 600, 1600}};
0446 static constexpr const char* k_ClassName = "SiPixelFEDChannelContainerMapSimple";
0447 };
0448
0449 using SiPixelBPixFEDChannelContainerMap = SiPixelFEDChannelContainerMapSimple<SiPixelPI::t_barrel>;
0450 using SiPixelFPixFEDChannelContainerMap = SiPixelFEDChannelContainerMapSimple<SiPixelPI::t_forward>;
0451 using SiPixelFullFEDChannelContainerMap = SiPixelFEDChannelContainerMapSimple<SiPixelPI::t_all>;
0452
0453
0454
0455
0456
0457
0458
0459 template <SiPixelPI::DetType myType>
0460 class SiPixelFEDChannelContainerMapWeigthed : public PlotImage<SiPixelFEDChannelContainer, SINGLE_IOV> {
0461 public:
0462 SiPixelFEDChannelContainerMapWeigthed()
0463 : PlotImage<SiPixelFEDChannelContainer, SINGLE_IOV>(
0464 "SiPixelFEDChannelContainer Pixel Track Map of one (or more scenarios)") {
0465
0466 PlotBase::addInputParam("SiPixelQualityProbabilitiesTag");
0467
0468
0469 m_condSiPixelProb = "frontier://FrontierProd/CMS_CONDITIONS";
0470 m_connectionPool.setParameters(m_connectionPset);
0471 m_connectionPool.configure();
0472 }
0473
0474 bool fill() override {
0475 auto paramValues = PlotBase::inputParamValues();
0476 auto ip = paramValues.find("SiPixelQualityProbabilitiesTag");
0477 if (ip != paramValues.end()) {
0478 m_SiPixelProbTagName = ip->second;
0479 } else {
0480 edm::LogWarning(k_ClassName) << "\n WARNING!!!! \n The needed parameter SiPixelQualityProbabilitiesTag was not "
0481 "inputed from the user \n Display will be aborted \n\n";
0482 return false;
0483 }
0484
0485 Phase1PixelROCMaps theROCMap("", "Masking Probability [%]");
0486
0487 auto tag = PlotBase::getTag<0>();
0488 auto tagname = tag.name;
0489 auto iov = tag.iovs.front();
0490
0491
0492 edm::LogPrint(k_ClassName) << "[SiPixelFEDChannelContainerTest::" << __func__ << "] "
0493 << "Query the condition database " << m_condSiPixelProb;
0494
0495 cond::persistency::Session condDbSession = m_connectionPool.createSession(m_condSiPixelProb);
0496 condDbSession.transaction().start(true);
0497
0498
0499 edm::LogPrint(k_ClassName) << "[SiPixelFEDChannelContainerTest::" << __func__ << "] "
0500 << "Reading IOVs from tag " << m_SiPixelProbTagName;
0501
0502 const auto MIN_VAL = cond::timeTypeSpecs[cond::runnumber].beginValue;
0503 const auto MAX_VAL = cond::timeTypeSpecs[cond::runnumber].endValue;
0504
0505
0506 std::vector<std::tuple<cond::Time_t, cond::Hash>> m_pixelProb_iovs;
0507 condDbSession.readIov(m_SiPixelProbTagName).selectRange(MIN_VAL, MAX_VAL, m_pixelProb_iovs);
0508
0509
0510 edm::LogPrint(k_ClassName) << " using the SiPixelQualityProbabilities with hash: "
0511 << std::get<1>(m_pixelProb_iovs.front()) << std::endl;
0512
0513 auto probabilitiesPayload =
0514 condDbSession.fetchPayload<SiPixelQualityProbabilities>(std::get<1>(m_pixelProb_iovs.front()));
0515
0516 const auto& PUbins = probabilitiesPayload->getPileUpBins();
0517
0518 SiPixelQualityProbabilities::probabilityMap m_probabilities = probabilitiesPayload->getProbability_Map();
0519
0520
0521 std::map<std::string, float> puAvgedProbabilities;
0522 for (const auto& [PUbin, ProbMap] : m_probabilities) {
0523 float totProbInPUbin = 0.f;
0524 for (const auto& [scenName, prob] : ProbMap) {
0525 totProbInPUbin += prob;
0526 if (puAvgedProbabilities.find(scenName) == puAvgedProbabilities.end()) {
0527 puAvgedProbabilities[scenName] += prob;
0528 } else {
0529 puAvgedProbabilities.insert({scenName, prob});
0530 }
0531 }
0532 LogDebug(k_ClassName) << "PU bin: " << PUbin << " tot probability " << totProbInPUbin << std::endl;
0533 }
0534
0535 std::shared_ptr<SiPixelFEDChannelContainer> payload = fetchPayload(std::get<1>(iov));
0536 const auto& scenarioMap = payload->getScenarioMap();
0537
0538 float totProb{0.f};
0539 for (const auto& [scenName, prob] : puAvgedProbabilities) {
0540
0541 if (scenarioMap.find(scenName) != scenarioMap.end()) {
0542 LogDebug(k_ClassName) << scenName << " : " << prob << std::endl;
0543 totProb += prob;
0544 }
0545 }
0546
0547 LogDebug(k_ClassName) << "Total probability to normalize to: " << totProb << std::endl;
0548
0549
0550 for (auto& pair : puAvgedProbabilities) {
0551 pair.second /= totProb;
0552 }
0553
0554 for (const auto& scenario : scenarioMap) {
0555 std::string scenName = scenario.first;
0556 LogDebug(k_ClassName) << "\t Found Scenario: " << scenName << " ==> dumping it";
0557
0558
0559 float w_frac = 0.f;
0560 if (puAvgedProbabilities.find(scenName) != puAvgedProbabilities.end()) {
0561 w_frac = puAvgedProbabilities[scenName];
0562 }
0563
0564
0565 if (w_frac == 0.f)
0566 continue;
0567
0568 LogDebug(k_ClassName) << "scen: " << scenName << " weight: " << w_frac << " log(weight):" << log10(w_frac)
0569 << std::endl;
0570
0571 const auto& theDetSetBadPixelFedChannels = payload->getDetSetBadPixelFedChannels(scenName);
0572 for (const auto& disabledChannels : *theDetSetBadPixelFedChannels) {
0573 const auto t_detid = disabledChannels.detId();
0574 int subid = DetId(t_detid).subdetId();
0575 LogDebug(k_ClassName) << fmt::sprintf("DetId : %i \n", t_detid) << std::endl;
0576
0577 std::bitset<16> badRocsFromFEDChannels;
0578
0579 for (const auto& ch : disabledChannels) {
0580 std::string toOut_ = fmt::sprintf("fed : %i | link : %2i | roc_first : %2i | roc_last: %2i \n",
0581 ch.fed,
0582 ch.link,
0583 ch.roc_first,
0584 ch.roc_last);
0585
0586 LogDebug(k_ClassName) << toOut_ << std::endl;
0587 for (unsigned int i_roc = ch.roc_first; i_roc <= ch.roc_last; ++i_roc) {
0588 badRocsFromFEDChannels.set(i_roc);
0589 }
0590 }
0591
0592 LogDebug(k_ClassName) << badRocsFromFEDChannels << std::endl;
0593
0594 const auto& myDetId = DetId(t_detid);
0595
0596 if (subid == PixelSubdetector::PixelBarrel) {
0597 theROCMap.fillSelectedRocs(myDetId, badRocsFromFEDChannels, w_frac * 100);
0598 }
0599 else if (subid == PixelSubdetector::PixelEndcap) {
0600 theROCMap.fillSelectedRocs(myDetId, badRocsFromFEDChannels, w_frac * 100);
0601 }
0602 else {
0603 throw cms::Exception("LogicError") << "Unknown Pixel SubDet ID " << std::endl;
0604 }
0605 }
0606 }
0607
0608 gStyle->SetOptStat(0);
0609
0610 TCanvas canvas("Summary", "Summary", 1200, k_height[myType]);
0611 canvas.cd();
0612
0613 auto unpacked = SiPixelPI::unpack(std::get<0>(iov));
0614
0615 std::string IOVstring = (unpacked.first == 0)
0616 ? std::to_string(unpacked.second)
0617 : (std::to_string(unpacked.first) + "," + std::to_string(unpacked.second));
0618
0619 const auto headerText =
0620 fmt::sprintf("#bf{#scale[0.6]{#color[2]{%s}, #color[4]{%s}}}", tagname, m_SiPixelProbTagName);
0621
0622 switch (myType) {
0623 case SiPixelPI::t_barrel:
0624 theROCMap.drawBarrelMaps(canvas, headerText);
0625 break;
0626 case SiPixelPI::t_forward:
0627 theROCMap.drawForwardMaps(canvas, headerText);
0628 break;
0629 case SiPixelPI::t_all:
0630 theROCMap.drawMaps(canvas, headerText);
0631 break;
0632 default:
0633 throw cms::Exception("LogicError") << "\nERROR: unrecognized Pixel Detector part " << std::endl;
0634 }
0635
0636
0637 canvas.cd();
0638 auto ltx = TLatex();
0639 ltx.SetTextFont(62);
0640
0641 ltx.SetTextSize(0.023);
0642 ltx.DrawLatexNDC(gPad->GetLeftMargin() - 0.09, gPad->GetBottomMargin() - 0.09, "");
0643
0644 std::string fileName(m_imageFileName);
0645 canvas.SaveAs(fileName.c_str());
0646 return true;
0647 }
0648
0649 private:
0650
0651 static constexpr std::array<int, 3> k_height = {{1200, 600, 1600}};
0652 static constexpr const char* k_ClassName = "SiPixelFEDChannelContainerMapWeigthed";
0653
0654
0655 edm::ParameterSet m_connectionPset;
0656 cond::persistency::ConnectionPool m_connectionPool;
0657 std::string m_SiPixelProbTagName;
0658 std::string m_condSiPixelProb;
0659 };
0660
0661 using SiPixelBPixFEDChannelContainerWeightedMap = SiPixelFEDChannelContainerMapWeigthed<SiPixelPI::t_barrel>;
0662 using SiPixelFPixFEDChannelContainerWeightedMap = SiPixelFEDChannelContainerMapWeigthed<SiPixelPI::t_forward>;
0663 using SiPixelFullFEDChannelContainerWeightedMap = SiPixelFEDChannelContainerMapWeigthed<SiPixelPI::t_all>;
0664
0665
0666
0667
0668
0669 class SiPixelFEDChannelContainerScenarios : public PlotImage<SiPixelFEDChannelContainer, SINGLE_IOV> {
0670 public:
0671 SiPixelFEDChannelContainerScenarios()
0672 : PlotImage<SiPixelFEDChannelContainer, SINGLE_IOV>("SiPixelFEDChannelContainer scenarios count") {}
0673 bool fill() override {
0674 auto tag = PlotBase::getTag<0>();
0675 auto tagname = tag.name;
0676 auto iov = tag.iovs.front();
0677
0678 TGaxis::SetMaxDigits(3);
0679
0680 std::shared_ptr<SiPixelFEDChannelContainer> payload = fetchPayload(std::get<1>(iov));
0681 std::vector<std::string> scenarios = payload->getScenarioList();
0682 sort(scenarios.begin(), scenarios.end());
0683
0684 TCanvas canvas("Canv", "Canv", 1200, 1000);
0685 canvas.cd();
0686 canvas.SetGrid();
0687 auto h1 = std::make_unique<TH1F>("Count",
0688 "SiPixelFEDChannelContainer Bad Roc count;Scenario index;n. of bad ROCs",
0689 scenarios.size(),
0690 1,
0691 scenarios.size());
0692 h1->SetStats(false);
0693
0694 canvas.SetTopMargin(0.06);
0695 canvas.SetBottomMargin(0.12);
0696 canvas.SetLeftMargin(0.12);
0697 canvas.SetRightMargin(0.05);
0698 canvas.Modified();
0699
0700 int scenarioIndex = 0;
0701 for (const auto& scenario : scenarios) {
0702 scenarioIndex++;
0703 int badRocCount = 0;
0704 LogDebug("SiPixelFEDChannelContainerScenarios") << scenario << std::endl;
0705 auto badChannelCollection = payload->getDetSetBadPixelFedChannels(scenario);
0706 for (const auto& disabledChannels : *badChannelCollection) {
0707 for (const auto& ch : disabledChannels) {
0708 int local_bad_rocs = ch.roc_last - ch.roc_first;
0709 badRocCount += local_bad_rocs;
0710 }
0711 }
0712
0713 h1->SetBinContent(scenarioIndex, badRocCount);
0714 }
0715
0716 TGaxis::SetExponentOffset(-0.1, 0.01, "y");
0717 TGaxis::SetExponentOffset(-0.03, -0.10, "x");
0718
0719 h1->SetTitle("");
0720 h1->GetYaxis()->SetRangeUser(0., h1->GetMaximum() * 1.30);
0721 h1->SetFillColor(kRed);
0722 h1->SetMarkerStyle(20);
0723 h1->SetMarkerSize(1);
0724 h1->Draw("bar2");
0725
0726 SiPixelPI::makeNicePlotStyle(h1.get());
0727
0728 canvas.Update();
0729
0730 TLegend legend = TLegend(0.30, 0.88, 0.95, 0.94);
0731
0732
0733 legend.SetHeader(fmt::sprintf("Payload hash: #bf{%s}", std::get<1>(iov)).c_str(), "C");
0734 legend.AddEntry(h1.get(), fmt::sprintf("total scenarios: #bf{%s}", std::to_string(scenarioIndex)).c_str(), "F");
0735 legend.SetTextSize(0.025);
0736 legend.Draw("same");
0737
0738 auto ltx = TLatex();
0739 ltx.SetTextFont(62);
0740
0741
0742 ltx.SetTextSize(0.040);
0743 ltx.DrawLatexNDC(
0744 gPad->GetLeftMargin(),
0745 1 - gPad->GetTopMargin() + 0.01,
0746 fmt::sprintf("#color[4]{%s} IOV: #color[4]{%s}", tagname, std::to_string(std::get<0>(iov))).c_str());
0747
0748 std::string fileName(m_imageFileName);
0749 canvas.SaveAs(fileName.c_str());
0750
0751 return true;
0752
0753 }
0754 };
0755
0756 }
0757
0758
0759 PAYLOAD_INSPECTOR_MODULE(SiPixelFEDChannelContainer) {
0760 PAYLOAD_INSPECTOR_CLASS(SiPixelBPixFEDChannelContainerMap);
0761 PAYLOAD_INSPECTOR_CLASS(SiPixelFPixFEDChannelContainerMap);
0762 PAYLOAD_INSPECTOR_CLASS(SiPixelFullFEDChannelContainerMap);
0763 PAYLOAD_INSPECTOR_CLASS(SiPixelBPixFEDChannelContainerWeightedMap);
0764 PAYLOAD_INSPECTOR_CLASS(SiPixelFPixFEDChannelContainerWeightedMap);
0765 PAYLOAD_INSPECTOR_CLASS(SiPixelFullFEDChannelContainerWeightedMap);
0766 PAYLOAD_INSPECTOR_CLASS(SiPixelFEDChannelContainerScenarios);
0767 }