File indexing completed on 2024-04-06 12:07:03
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "DQM/DTMonitorClient/src/DTDCSByLumiSummary.h"
0010 #include "DQM/DTMonitorModule/interface/DTTimeEvolutionHisto.h"
0011
0012 #include "FWCore/ServiceRegistry/interface/Service.h"
0013 #include "FWCore/Framework/interface/ESHandle.h"
0014 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0015 #include "FWCore/Framework/interface/EventSetup.h"
0016
0017 #include "DQMServices/Core/interface/DQMStore.h"
0018
0019 #include <string>
0020
0021 using namespace std;
0022 using namespace edm;
0023
0024 DTDCSByLumiSummary::DTDCSByLumiSummary(const ParameterSet& pset) { bookingdone = false; }
0025
0026 DTDCSByLumiSummary::~DTDCSByLumiSummary() {}
0027
0028 void DTDCSByLumiSummary::beginRun(const edm::Run& r, const edm::EventSetup& setup) {}
0029
0030 void DTDCSByLumiSummary::dqmEndLuminosityBlock(DQMStore::IBooker& ibooker,
0031 DQMStore::IGetter& igetter,
0032 edm::LuminosityBlock const& lumi,
0033 edm::EventSetup const& setup) {
0034 if (!bookingdone) {
0035 ibooker.setCurrentFolder("DT/EventInfo/DCSContents");
0036
0037 globalHVSummary = ibooker.book2D("HVGlbSummary", "HV Status Summary", 1, 1, 13, 5, -2, 3);
0038 globalHVSummary->setAxisTitle("Sectors", 1);
0039 globalHVSummary->setAxisTitle("Wheel", 2);
0040
0041 {
0042 auto scope = DQMStore::IBooker::UseLumiScope(ibooker);
0043 totalDCSFraction = ibooker.bookFloat("DTDCSSummary");
0044 for (int wh = -2; wh <= 2; wh++) {
0045 stringstream wheel_str;
0046 wheel_str << wh;
0047
0048 MonitorElement* FractionWh = ibooker.bookFloat("DT_Wheel" + wheel_str.str());
0049
0050 totalDCSFractionWh.push_back(FractionWh);
0051 }
0052 }
0053
0054 globalHVSummary->Reset();
0055
0056
0057 totalDCSFraction->Reset();
0058
0059 for (int wh = -2; wh <= 2; wh++) {
0060 totalDCSFractionWh[wh + 2]->Reset();
0061 }
0062 }
0063 bookingdone = true;
0064
0065
0066 int lumiNumber = lumi.id().luminosityBlock();
0067
0068 bool null_pointer_histo(false);
0069
0070 std::vector<float> wh_activeFrac;
0071
0072 for (int wh = -2; wh <= 2; wh++) {
0073 stringstream wheel_str;
0074 wheel_str << wh;
0075
0076 string hActiveUnitsPath = "DT/EventInfo/DCSContents/hActiveUnits" + wheel_str.str();
0077
0078 MonitorElement* hActiveUnits = igetter.get(hActiveUnitsPath);
0079
0080 if (hActiveUnits) {
0081 float activeFrac = static_cast<float>(hActiveUnits->getBinContent(2)) /
0082 hActiveUnits->getBinContent(1);
0083
0084 if (activeFrac < 0.)
0085 activeFrac = -1;
0086
0087 wh_activeFrac.push_back(activeFrac);
0088
0089
0090 totalDCSFraction->Fill(activeFrac);
0091 totalDCSFractionWh[wh + 2]->Fill(activeFrac);
0092
0093 } else {
0094 LogTrace("DTDQM|DTMonitorClient|DTDCSByLumiSummary")
0095 << "[DTDCSByLumiSummary]: got null pointer retrieving histo at :" << hActiveUnitsPath << " for lumi # "
0096 << lumiNumber << "client operation not performed." << endl;
0097
0098 null_pointer_histo = true;
0099 }
0100
0101 }
0102
0103 if (!null_pointer_histo)
0104 dcsFracPerLumi[lumiNumber] = wh_activeFrac;
0105
0106
0107 totalDCSFraction->Reset();
0108
0109 for (int wh = -2; wh <= 2; wh++) {
0110 totalDCSFractionWh[wh + 2]->Reset();
0111 }
0112 }
0113
0114 void DTDCSByLumiSummary::dqmEndJob(DQMStore::IBooker& ibooker, DQMStore::IGetter& igetter) {
0115
0116 map<int, std::vector<float> >::const_iterator fracPerLumiIt = dcsFracPerLumi.begin();
0117 map<int, std::vector<float> >::const_iterator fracPerLumiEnd = dcsFracPerLumi.end();
0118
0119 if (fracPerLumiIt != fracPerLumiEnd) {
0120 int fLumi = dcsFracPerLumi.begin()->first;
0121 int lLumi = dcsFracPerLumi.rbegin()->first;
0122
0123 ibooker.setCurrentFolder("DT/EventInfo/DCSContents");
0124
0125 int nLumis = lLumi - fLumi + 1.;
0126
0127
0128 for (int wh = -2; wh <= 2; wh++) {
0129 stringstream wheel_str;
0130 wheel_str << wh;
0131
0132 DTTimeEvolutionHisto* trend;
0133
0134 trend = new DTTimeEvolutionHisto(ibooker,
0135 "hDCSFracTrendWh" + wheel_str.str(),
0136 "Fraction of DT-HV ON Wh" + wheel_str.str(),
0137 nLumis,
0138 fLumi,
0139 1,
0140 false,
0141 2);
0142
0143 hDCSFracTrend.push_back(trend);
0144 }
0145 }
0146
0147 float goodLSperWh[5] = {0, 0, 0, 0, 0};
0148 float badLSperWh[5] = {0, 0, 0, 0, 0};
0149
0150
0151 for (; fracPerLumiIt != fracPerLumiEnd; ++fracPerLumiIt) {
0152 for (int wh = -2; wh <= 2; wh++) {
0153 std::vector<float> activeFracPerWh;
0154 activeFracPerWh = fracPerLumiIt->second;
0155
0156 hDCSFracTrend[wh + 2]->setTimeSlotValue(activeFracPerWh[wh + 2], fracPerLumiIt->first);
0157
0158 if (activeFracPerWh[wh + 2] > 0) {
0159
0160 if (activeFracPerWh[wh + 2] > 0.9)
0161 goodLSperWh[wh + 2]++;
0162 else {
0163 badLSperWh[wh + 2]++;
0164 }
0165 } else {
0166 if (activeFracPerWh[wh + 2] < 0)
0167 badLSperWh[wh + 2] = -1;
0168 }
0169 }
0170 }
0171
0172
0173 for (int wh = -2; wh <= 2; wh++) {
0174 if (goodLSperWh[wh + 2] != 0 || badLSperWh[wh + 2] == -1) {
0175 float r = badLSperWh[wh + 2] / fabs(goodLSperWh[wh + 2] + badLSperWh[wh + 2]);
0176 if (r > 0.5)
0177 globalHVSummary->Fill(1, wh, 0);
0178 else
0179 globalHVSummary->Fill(1, wh, 1);
0180 if (r == -1)
0181 globalHVSummary->Fill(1, wh, -1);
0182
0183 } else {
0184 globalHVSummary->Fill(1, wh, 0);
0185 }
0186 }
0187 }