File indexing completed on 2024-04-06 12:08:12
0001
0002 #include <DQM/RPCMonitorClient/interface/RPCDeadChannelTest.h>
0003 #include <DQM/RPCMonitorClient/interface/utils.h>
0004 #include <DQM/RPCMonitorClient/interface/RPCRollMapHisto.h>
0005
0006 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0007
0008 #include "Geometry/RPCGeometry/interface/RPCGeomServ.h"
0009 #include "Geometry/RPCGeometry/interface/RPCGeometry.h"
0010 #include "Geometry/Records/interface/MuonGeometryRecord.h"
0011
0012 RPCDeadChannelTest::RPCDeadChannelTest(const edm::ParameterSet& ps) {
0013 edm::LogVerbatim("rpcdeadchanneltest") << "[RPCDeadChannelTest]: Constructor";
0014
0015 useRollInfo_ = ps.getUntrackedParameter<bool>("UseRollInfo", false);
0016
0017 prescaleFactor_ = ps.getUntrackedParameter<int>("DiagnosticPrescale", 1);
0018 numberOfDisks_ = ps.getUntrackedParameter<int>("NumberOfEndcapDisks", 4);
0019 numberOfRings_ = ps.getUntrackedParameter<int>("NumberOfEndcapRings", 2);
0020 }
0021
0022 void RPCDeadChannelTest::beginJob(std::string& workingFolder) {
0023 edm::LogVerbatim("rpcdeadchanneltest") << "[RPCDeadChannelTest]: Begin Job";
0024 globalFolder_ = workingFolder;
0025 }
0026
0027 void RPCDeadChannelTest::getMonitorElements(std::vector<MonitorElement*>& meVector,
0028 std::vector<RPCDetId>& detIdVector,
0029 std::string& clientHistoName) {
0030 for (unsigned int i = 0; i < meVector.size(); i++) {
0031 std::string meName = meVector[i]->getName();
0032
0033 if (meName.find(clientHistoName) != std::string::npos) {
0034 myOccupancyMe_.push_back(meVector[i]);
0035 myDetIds_.push_back(detIdVector[i]);
0036 }
0037 }
0038 }
0039
0040 void RPCDeadChannelTest::clientOperation() {
0041 edm::LogVerbatim("rpcdeadchanneltest") << "[RPCDeadChannelTest]:Client Operation";
0042
0043 MonitorElement* DEAD = nullptr;
0044
0045
0046 for (unsigned int i = 0; i < myOccupancyMe_.size(); i++) {
0047 RPCDetId& detId = myDetIds_[i];
0048 MonitorElement* myMe = myOccupancyMe_[i];
0049
0050 if (!myMe)
0051 continue;
0052
0053 const QReport* theOccupancyQReport = myMe->getQReport("DeadChannel_0");
0054
0055 float deadFraction = 0.0;
0056
0057 if (theOccupancyQReport) {
0058 float qtresult = theOccupancyQReport->getQTresult();
0059
0060 deadFraction = 1.0 - qtresult;
0061
0062 } else {
0063 int xBins = myMe->getNbinsX();
0064 float emptyBins = 0.0;
0065 for (int x = 1; x <= xBins; x++) {
0066 if (myMe->getBinContent(x) == 0) {
0067 emptyBins++;
0068 }
0069 }
0070 if (xBins != 0) {
0071 deadFraction = emptyBins / xBins;
0072 }
0073 }
0074
0075 if (detId.region() == 0)
0076 DEAD = DEADWheel[detId.ring() + 2];
0077 else {
0078 if (-detId.station() + numberOfDisks_ >= 0) {
0079 if (detId.region() < 0) {
0080 DEAD = DEADDisk[-detId.station() + numberOfDisks_];
0081 } else {
0082 DEAD = DEADDisk[detId.station() + numberOfDisks_ - 1];
0083 }
0084 }
0085 }
0086
0087 if (DEAD) {
0088 int xBin, yBin;
0089 if (detId.region() == 0) {
0090 xBin = detId.sector();
0091 rpcdqm::utils rollNumber;
0092 yBin = rollNumber.detId2RollNr(detId);
0093 } else {
0094
0095 RPCGeomServ RPCServ(detId);
0096 xBin = RPCServ.segment();
0097 (numberOfRings_ == 3 ? yBin = detId.ring() * 3 - detId.roll() + 1
0098 : yBin = (detId.ring() - 1) * 3 - detId.roll() + 1);
0099 }
0100 DEAD->setBinContent(xBin, yBin, deadFraction);
0101 }
0102
0103 }
0104 }
0105
0106 void RPCDeadChannelTest::myBooker(DQMStore::IBooker& ibooker) {
0107 ibooker.setCurrentFolder(globalFolder_);
0108
0109 std::stringstream histoName;
0110
0111 int limit = numberOfDisks_;
0112 if (numberOfDisks_ < 2)
0113 limit = 2;
0114
0115 for (int i = -1 * limit; i <= limit; i++) {
0116 if (i > -3 && i < 3) {
0117 histoName.str("");
0118 histoName << "DeadChannelFraction_Roll_vs_Sector_Wheel" << i;
0119 auto me = RPCRollMapHisto::bookBarrel(ibooker, i, histoName.str(), histoName.str(), useRollInfo_);
0120 DEADWheel[i + 2] = dynamic_cast<MonitorElement*>(me);
0121
0122 for (int x = 1; x <= 12; x++) {
0123 for (int y = 1; y <= 21; y++) {
0124 DEADWheel[i + 2]->setBinContent(x, y, -1);
0125 }
0126 }
0127
0128 }
0129
0130 if (i == 0 || i > numberOfDisks_ || i < (-1 * numberOfDisks_)) {
0131 continue;
0132 }
0133
0134 int offset = numberOfDisks_;
0135 if (i > 0) {
0136 offset--;
0137 }
0138
0139 histoName.str("");
0140 histoName << "DeadChannelFraction_Ring_vs_Segment_Disk" << i;
0141 auto me = RPCRollMapHisto::bookEndcap(ibooker, i, histoName.str(), histoName.str(), useRollInfo_);
0142 DEADDisk[i + offset] = dynamic_cast<MonitorElement*>(me);
0143 }
0144 }