File indexing completed on 2023-03-17 10:55:54
0001 #include "DQM/RPCMonitorClient/interface/RPCDCSSummary.h"
0002
0003 #include "FWCore/Framework/interface/ESHandle.h"
0004 #include "FWCore/Framework/interface/EventSetup.h"
0005 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0006 #include "DQM/RPCMonitorClient/interface/RPCSummaryMapHisto.h"
0007
0008 #include <fmt/format.h>
0009
0010 RPCDCSSummary::RPCDCSSummary(const edm::ParameterSet& ps) {
0011 numberOfDisks_ = ps.getUntrackedParameter<int>("NumberOfEndcapDisks", 4);
0012
0013 FEDRange_.first = ps.getUntrackedParameter<unsigned int>("MinimumRPCFEDId", 790);
0014 FEDRange_.second = ps.getUntrackedParameter<unsigned int>("MaximumRPCFEDId", 792);
0015
0016 offlineDQM_ = ps.getUntrackedParameter<bool>("OfflineDQM", true);
0017
0018 NumberOfFeds_ = FEDRange_.second - FEDRange_.first + 1;
0019 init_ = false;
0020 defaultValue_ = 1.;
0021
0022 runInfoToken_ = esConsumes<edm::Transition::EndLuminosityBlock>();
0023 }
0024
0025 void RPCDCSSummary::beginJob() {}
0026
0027 void RPCDCSSummary::dqmEndLuminosityBlock(DQMStore::IBooker& ibooker,
0028 DQMStore::IGetter& igetter,
0029 edm::LuminosityBlock const& lumiB,
0030 edm::EventSetup const& setup) {
0031 if (!init_) {
0032 this->checkDCSbit(setup);
0033 if (!offlineDQM_) {
0034 this->myBooker(ibooker);
0035 }
0036 }
0037 }
0038
0039 void RPCDCSSummary::dqmEndJob(DQMStore::IBooker& ibooker, DQMStore::IGetter& igetter) {
0040 if (offlineDQM_) {
0041 this->myBooker(ibooker);
0042 }
0043 }
0044
0045 void RPCDCSSummary::checkDCSbit(edm::EventSetup const& setup) {
0046 defaultValue_ = 1.;
0047
0048 if (auto runInfoRec = setup.tryToGet<RunInfoRcd>()) {
0049 defaultValue_ = -1.;
0050
0051 auto sumFED = runInfoRec->get(runInfoToken_);
0052 const std::vector<int> FedsInIds = sumFED.m_fed_in;
0053 unsigned int f = 0;
0054 bool flag = false;
0055 while (!flag && f < FedsInIds.size()) {
0056 int fedID = FedsInIds[f];
0057
0058 if (fedID >= FEDRange_.first && fedID <= FEDRange_.second) {
0059 defaultValue_ = 1.;
0060 flag = true;
0061 }
0062 f++;
0063 }
0064 }
0065 init_ = true;
0066 }
0067
0068 void RPCDCSSummary::myBooker(DQMStore::IBooker& ibooker) {
0069 ibooker.setCurrentFolder("RPC/EventInfo");
0070
0071 totalDCSFraction = ibooker.bookFloat("DCSSummary");
0072 totalDCSFraction->Fill(defaultValue_);
0073
0074 DCSMap_ = RPCSummaryMapHisto::book(ibooker, "DCSSummaryMap", "RPC DCS Summary Map");
0075
0076
0077 RPCSummaryMapHisto::setBinsBarrel(DCSMap_, 1);
0078 RPCSummaryMapHisto::setBinsEndcap(DCSMap_, 1);
0079
0080
0081 ibooker.setCurrentFolder("RPC/EventInfo/DCSContents");
0082
0083 const int limit = std::max(2, numberOfDisks_);
0084
0085 for (int i = -1 * limit; i <= limit; i++) {
0086 if (i > -3 && i < nWheels_ - 2) {
0087 const std::string s = fmt::format("RPC_Wheel{}", i);
0088 dcsWheelFractions[i + 2] = ibooker.bookFloat(s);
0089 dcsWheelFractions[i + 2]->Fill(defaultValue_);
0090 }
0091
0092 if (i == 0 || i > numberOfDisks_ || i < -numberOfDisks_)
0093 continue;
0094
0095 if (i > -3 && i < nDisks_ - 2) {
0096 const std::string s = fmt::format("RPC_Disk{}", i);
0097 dcsDiskFractions[i + 2] = ibooker.bookFloat(s);
0098 dcsDiskFractions[i + 2]->Fill(defaultValue_);
0099 }
0100 }
0101 }