File indexing completed on 2024-08-13 22:17:12
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
0023 const double maxNoise = 1e-7;
0024 MEP me_rollNoiseBarrel_noise = booker.book1D("RollNoiseBarrel_noise",
0025 "Roll noise in Barrel;Noise level [Event^{-1}cm^{-2}]",
0026 25 + 2,
0027 -maxNoise / 25,
0028 maxNoise + maxNoise / 25);
0029 MEP me_rollNoiseEndcap_noise = booker.book1D("RollNoiseEndcap_noise",
0030 "Roll noise in Endcap;Noise level [Event^{-1}cm^{-2}]",
0031 25 + 2,
0032 -maxNoise / 25,
0033 maxNoise + maxNoise / 25);
0034
0035 MEP me_matchOccupancyBarrel_detId = getter.get(subDir_ + "/Occupancy/MatchOccupancyBarrel_detId");
0036 MEP me_matchOccupancyEndcap_detId = getter.get(subDir_ + "/Occupancy/MatchOccupancyEndcap_detId");
0037 MEP me_refOccupancyBarrel_detId = getter.get(subDir_ + "/Occupancy/RefOccupancyBarrel_detId");
0038 MEP me_refOccupancyEndcap_detId = getter.get(subDir_ + "/Occupancy/RefOccupancyEndcap_detId");
0039
0040 if (me_matchOccupancyBarrel_detId and me_refOccupancyBarrel_detId) {
0041 TH1 *h_matchOccupancyBarrel_detId = me_matchOccupancyBarrel_detId->getTH1();
0042 TH1 *h_refOccupancyBarrel_detId = me_refOccupancyBarrel_detId->getTH1();
0043
0044 for (int bin = 1, nBin = h_matchOccupancyBarrel_detId->GetNbinsX(); bin <= nBin; ++bin) {
0045 const double nRec = h_matchOccupancyBarrel_detId->GetBinContent(bin);
0046 const double nRef = h_refOccupancyBarrel_detId->GetBinContent(bin);
0047
0048 const double eff = nRef ? nRec / nRef * 100 : -1;
0049
0050 me_rollEfficiencyBarrel_eff->Fill(eff);
0051 }
0052 }
0053
0054 if (me_matchOccupancyEndcap_detId and me_refOccupancyEndcap_detId) {
0055 TH1 *h_matchOccupancyEndcap_detId = me_matchOccupancyEndcap_detId->getTH1();
0056 TH1 *h_refOccupancyEndcap_detId = me_refOccupancyEndcap_detId->getTH1();
0057
0058 for (int bin = 1, nBin = h_matchOccupancyEndcap_detId->GetNbinsX(); bin <= nBin; ++bin) {
0059 const double nRec = h_matchOccupancyEndcap_detId->GetBinContent(bin);
0060 const double nRef = h_refOccupancyEndcap_detId->GetBinContent(bin);
0061
0062 const double eff = nRef ? nRec / nRef * 100 : -1;
0063
0064 me_rollEfficiencyEndcap_eff->Fill(eff);
0065 }
0066 }
0067
0068 MEP me_eventCount = getter.get(subDir_ + "/Occupancy/EventCount");
0069 const double nEvent = me_eventCount ? me_eventCount->getTH1()->GetBinContent(1) : 1;
0070 MEP me_allOccupancyBarrel_detId = getter.get(subDir_ + "/Occupancy/OccupancyBarrel_detId");
0071 MEP me_rollAreaBarrel_detId = getter.get(subDir_ + "/Occupancy/RollAreaBarrel_detId");
0072 if (me_allOccupancyBarrel_detId and me_rollAreaBarrel_detId) {
0073 TH1 *h_noiseOccupancyBarrel_detId = me_allOccupancyBarrel_detId->getTH1();
0074 TH1 *h_rollAreaBarrel_detId = me_rollAreaBarrel_detId->getTH1();
0075
0076 for (int bin = 1, nBin = h_noiseOccupancyBarrel_detId->GetNbinsX(); bin <= nBin; ++bin) {
0077 const double noiseCount = h_noiseOccupancyBarrel_detId->GetBinContent(bin);
0078 const double area = h_rollAreaBarrel_detId->GetBinContent(bin);
0079 const double noiseLevel = area > 0 ? noiseCount / area / nEvent : 0;
0080 if (noiseLevel == 0.)
0081 me_rollNoiseBarrel_noise->Fill(-maxNoise / 50);
0082 else
0083 me_rollNoiseBarrel_noise->Fill(std::min(noiseLevel, maxNoise));
0084 }
0085 }
0086
0087 MEP me_allOccupancyEndcap_detId = getter.get(subDir_ + "/Occupancy/OccupancyEndcap_detId");
0088 MEP me_rollAreaEndcap_detId = getter.get(subDir_ + "/Occupancy/RollAreaEndcap_detId");
0089 if (me_allOccupancyEndcap_detId and me_rollAreaEndcap_detId) {
0090 TH1 *h_noiseOccupancyEndcap_detId = me_allOccupancyEndcap_detId->getTH1();
0091 TH1 *h_rollAreaEndcap_detId = me_rollAreaEndcap_detId->getTH1();
0092
0093 for (int bin = 1, nBin = h_noiseOccupancyEndcap_detId->GetNbinsX(); bin <= nBin; ++bin) {
0094 const double noiseCount = h_noiseOccupancyEndcap_detId->GetBinContent(bin);
0095 const double area = h_rollAreaEndcap_detId->GetBinContent(bin);
0096 const double noiseLevel = area > 0 ? noiseCount / area / nEvent : 0;
0097 if (noiseLevel == 0)
0098 me_rollNoiseEndcap_noise->Fill(-maxNoise / 50);
0099 else
0100 me_rollNoiseEndcap_noise->Fill(std::min(noiseLevel, maxNoise));
0101 }
0102 }
0103 }
0104
0105 DEFINE_FWK_MODULE(RPCRecHitValidClient);