Back to home page

Project CMSSW displayed by LXR

 
 

    


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);  // Fill underflow bin if noise is exactly zero
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);  // Fill underflow bin if noise if exactly zero
0099       else
0100         me_rollNoiseEndcap_noise->Fill(std::min(noiseLevel, maxNoise));
0101     }
0102   }
0103 }
0104 
0105 DEFINE_FWK_MODULE(RPCRecHitValidClient);