File indexing completed on 2024-04-06 12:33:37
0001 #include "Validation/RPCRecHits/interface/RPCRecHitValidClient.h"
0002
0003 #include "FWCore/Framework/interface/MakerMacros.h"
0004
0005 #include "FWCore/Framework/interface/ESHandle.h"
0006 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0007
0008 using namespace std;
0009
0010 typedef RPCRecHitValidClient::MonitorElement *MEP;
0011
0012 RPCRecHitValidClient::RPCRecHitValidClient(const edm::ParameterSet &pset) {
0013 subDir_ = pset.getParameter<std::string>("subDir");
0014 }
0015
0016 void RPCRecHitValidClient::dqmEndJob(DQMStore::IBooker &booker, DQMStore::IGetter &getter) {
0017 booker.setCurrentFolder(subDir_);
0018 MEP me_rollEfficiencyBarrel_eff =
0019 booker.book1D("RollEfficiencyBarrel_eff", "Roll efficiency in Barrel;Efficiency [%]", 50 + 2, -2, 100 + 2);
0020 MEP me_rollEfficiencyEndcap_eff =
0021 booker.book1D("RollEfficiencyEndcap_eff", "Roll efficiency in Endcap;Efficiency [%]", 50 + 2, -2, 100 + 2);
0022 MEP me_rollEfficiencyStatCutOffBarrel_eff =
0023 booker.book1D("RollEfficiencyCutOffBarrel_eff",
0024 "Roll efficiency in Barrel without low stat chamber;Efficiency [%]",
0025 50 + 2,
0026 -2,
0027 100 + 2);
0028 MEP me_rollEfficiencyStatCutOffEndcap_eff =
0029 booker.book1D("RollEfficiencyCutOffEndcap_eff",
0030 "Roll efficiency in Endcap without low stat chamber;Efficiency [%]",
0031 50 + 2,
0032 -2,
0033 100 + 2);
0034
0035 const double maxNoise = 1e-7;
0036 MEP me_rollNoiseBarrel_noise = booker.book1D("RollNoiseBarrel_noise",
0037 "Roll noise in Barrel;Noise level [Event^{-1}cm^{-2}]",
0038 25 + 2,
0039 -maxNoise / 25,
0040 maxNoise + maxNoise / 25);
0041 MEP me_rollNoiseEndcap_noise = booker.book1D("RollNoiseEndcap_noise",
0042 "Roll noise in Endcap;Noise level [Event^{-1}cm^{-2}]",
0043 25 + 2,
0044 -maxNoise / 25,
0045 maxNoise + maxNoise / 25);
0046
0047 MEP me_matchOccupancyBarrel_detId = getter.get(subDir_ + "/Occupancy/MatchOccupancyBarrel_detId");
0048 MEP me_matchOccupancyEndcap_detId = getter.get(subDir_ + "/Occupancy/MatchOccupancyEndcap_detId");
0049 MEP me_refOccupancyBarrel_detId = getter.get(subDir_ + "/Occupancy/RefOccupancyBarrel_detId");
0050 MEP me_refOccupancyEndcap_detId = getter.get(subDir_ + "/Occupancy/RefOccupancyEndcap_detId");
0051
0052 if (me_matchOccupancyBarrel_detId and me_refOccupancyBarrel_detId) {
0053 TH1 *h_matchOccupancyBarrel_detId = me_matchOccupancyBarrel_detId->getTH1();
0054 TH1 *h_refOccupancyBarrel_detId = me_refOccupancyBarrel_detId->getTH1();
0055
0056 for (int bin = 1, nBin = h_matchOccupancyBarrel_detId->GetNbinsX(); bin <= nBin; ++bin) {
0057 const double nRec = h_matchOccupancyBarrel_detId->GetBinContent(bin);
0058 const double nRef = h_refOccupancyBarrel_detId->GetBinContent(bin);
0059
0060 const double eff = nRef ? nRec / nRef * 100 : -1;
0061
0062 me_rollEfficiencyBarrel_eff->Fill(eff);
0063 if (nRef >= 20)
0064 me_rollEfficiencyStatCutOffBarrel_eff->Fill(eff);
0065 }
0066 }
0067
0068 if (me_matchOccupancyEndcap_detId and me_refOccupancyEndcap_detId) {
0069 TH1 *h_matchOccupancyEndcap_detId = me_matchOccupancyEndcap_detId->getTH1();
0070 TH1 *h_refOccupancyEndcap_detId = me_refOccupancyEndcap_detId->getTH1();
0071
0072 for (int bin = 1, nBin = h_matchOccupancyEndcap_detId->GetNbinsX(); bin <= nBin; ++bin) {
0073 const double nRec = h_matchOccupancyEndcap_detId->GetBinContent(bin);
0074 const double nRef = h_refOccupancyEndcap_detId->GetBinContent(bin);
0075
0076 const double eff = nRef ? nRec / nRef * 100 : -1;
0077
0078 me_rollEfficiencyEndcap_eff->Fill(eff);
0079 if (nRef >= 20)
0080 me_rollEfficiencyStatCutOffEndcap_eff->Fill(eff);
0081 }
0082 }
0083
0084 MEP me_eventCount = getter.get(subDir_ + "/Occupancy/EventCount");
0085 const double nEvent = me_eventCount ? me_eventCount->getTH1()->GetBinContent(1) : 1;
0086 MEP me_noiseOccupancyBarrel_detId = getter.get(subDir_ + "/Occupancy/NoiseOccupancyBarrel_detId");
0087 MEP me_rollAreaBarrel_detId = getter.get(subDir_ + "/Occupancy/RollAreaBarrel_detId");
0088 if (me_noiseOccupancyBarrel_detId and me_rollAreaBarrel_detId) {
0089 TH1 *h_noiseOccupancyBarrel_detId = me_noiseOccupancyBarrel_detId->getTH1();
0090 TH1 *h_rollAreaBarrel_detId = me_rollAreaBarrel_detId->getTH1();
0091
0092 for (int bin = 1, nBin = h_noiseOccupancyBarrel_detId->GetNbinsX(); bin <= nBin; ++bin) {
0093 const double noiseCount = h_noiseOccupancyBarrel_detId->GetBinContent(bin);
0094 const double area = h_rollAreaBarrel_detId->GetBinContent(bin);
0095 const double noiseLevel = area > 0 ? noiseCount / area / nEvent : 0;
0096 if (noiseLevel == 0.)
0097 me_rollNoiseBarrel_noise->Fill(-maxNoise / 50);
0098 else
0099 me_rollNoiseBarrel_noise->Fill(std::min(noiseLevel, maxNoise));
0100 }
0101 }
0102
0103 MEP me_noiseOccupancyEndcap_detId = getter.get(subDir_ + "/Occupancy/NoiseOccupancyEndcap_detId");
0104 MEP me_rollAreaEndcap_detId = getter.get(subDir_ + "/Occupancy/RollAreaEndcap_detId");
0105 if (me_noiseOccupancyEndcap_detId and me_rollAreaEndcap_detId) {
0106 TH1 *h_noiseOccupancyEndcap_detId = me_noiseOccupancyEndcap_detId->getTH1();
0107 TH1 *h_rollAreaEndcap_detId = me_rollAreaEndcap_detId->getTH1();
0108
0109 for (int bin = 1, nBin = h_noiseOccupancyEndcap_detId->GetNbinsX(); bin <= nBin; ++bin) {
0110 const double noiseCount = h_noiseOccupancyEndcap_detId->GetBinContent(bin);
0111 const double area = h_rollAreaEndcap_detId->GetBinContent(bin);
0112 const double noiseLevel = area > 0 ? noiseCount / area / nEvent : 0;
0113 if (noiseLevel == 0)
0114 me_rollNoiseEndcap_noise->Fill(-maxNoise / 50);
0115 else
0116 me_rollNoiseEndcap_noise->Fill(std::min(noiseLevel, maxNoise));
0117 }
0118 }
0119 }
0120
0121 DEFINE_FWK_MODULE(RPCRecHitValidClient);