|
| 1 | +#include "ElectronEfficiencyPlotter.h" |
| 2 | + |
| 3 | +// Framework |
| 4 | +#include <cmath> |
| 5 | +#include <string> |
| 6 | + |
| 7 | +#include "DQMServices/Core/interface/DQMStore.h" |
| 8 | +#include "DataFormats/Common/interface/Handle.h" |
| 9 | +#include "FWCore/Framework/interface/ESHandle.h" |
| 10 | +#include "FWCore/Framework/interface/Event.h" |
| 11 | +#include "FWCore/Framework/interface/EventSetup.h" |
| 12 | +#include "FWCore/Framework/interface/MakerMacros.h" |
| 13 | +#include "FWCore/MessageLogger/interface/MessageLogger.h" |
| 14 | +#include "FWCore/ParameterSet/interface/ParameterSet.h" |
| 15 | +#include "TF1.h" |
| 16 | +#include "TH1F.h" |
| 17 | + |
| 18 | +using namespace edm; |
| 19 | +using namespace std; |
| 20 | + |
| 21 | +// Constructor |
| 22 | +ElectronEfficiencyPlotter::ElectronEfficiencyPlotter(const edm::ParameterSet &ps) { |
| 23 | + ptBin_ = ps.getParameter<int>("ptBin"); |
| 24 | + ptMin_ = ps.getParameter<double>("ptMin"); |
| 25 | + ptMax_ = ps.getParameter<double>("ptMax"); |
| 26 | + |
| 27 | + ID_ = ps.getParameter<string>("sctElectronID"); |
| 28 | + theFolder_ = ps.getParameter<string>("folder"); |
| 29 | + sourceFolder_ = ps.getParameter<string>("srcFolder"); |
| 30 | +} |
| 31 | + |
| 32 | +void ElectronEfficiencyPlotter::dqmEndJob(DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter) { |
| 33 | + ibooker.setCurrentFolder(theFolder_); |
| 34 | + |
| 35 | + h_eff_pt_EB_doubleEG_HLT = |
| 36 | + ibooker.book1D("Eff_pt_barrel_DSTdoubleEG", "DSTdoubleEG Eff. vs Pt (barrel)", ptBin_, ptMin_, ptMax_); |
| 37 | + h_eff_pt_EE_doubleEG_HLT = |
| 38 | + ibooker.book1D("Eff_pt_endcap_DSTdoubleEG", "DSTdoubleEG Eff. vs Pt (endcap)", ptBin_, ptMin_, ptMax_); |
| 39 | + h_eff_pt_EB_singlePhoton_HLT = |
| 40 | + ibooker.book1D("Eff_pt_barrel_DSTsinglePhoton", "DSTsinglePhoton Eff. vs Pt (barrel)", ptBin_, ptMin_, ptMax_); |
| 41 | + h_eff_pt_EE_singlePhoton_HLT = |
| 42 | + ibooker.book1D("Eff_pt_endcap_DSTsinglePhoton", "DSTsinglePhoton Eff. vs Pt (endcap)", ptBin_, ptMin_, ptMax_); |
| 43 | + |
| 44 | + // Axis title |
| 45 | + h_eff_pt_EB_singlePhoton_HLT->setAxisTitle("p_{T} (GeV)", 1); |
| 46 | + h_eff_pt_EE_singlePhoton_HLT->setAxisTitle("p_{T} (GeV)", 1); |
| 47 | + h_eff_pt_EB_doubleEG_HLT->setAxisTitle("p_{T} (GeV)", 1); |
| 48 | + h_eff_pt_EE_doubleEG_HLT->setAxisTitle("p_{T} (GeV)", 1); |
| 49 | + |
| 50 | + MonitorElement *Numerator_pt_barrel_doubleEG_hlt = |
| 51 | + igetter.get(sourceFolder_ + |
| 52 | + "/resonanceZ_Tag_pat_Probe_sctElectron_passDoubleEG_DST_" |
| 53 | + "fireTrigObj_Pt_Barrel"); |
| 54 | + MonitorElement *Numerator_pt_endcap_doubleEG_hlt = |
| 55 | + igetter.get(sourceFolder_ + |
| 56 | + "/resonanceZ_Tag_pat_Probe_sctElectron_passDoubleEG_DST_" |
| 57 | + "fireTrigObj_Pt_Endcap"); |
| 58 | + MonitorElement *Numerator_pt_barrel_singlePhoton_hlt = |
| 59 | + igetter.get(sourceFolder_ + |
| 60 | + "/resonanceZ_Tag_pat_Probe_sctElectron_passSinglePhoton_DST_" |
| 61 | + "fireTrigObj_Pt_Barrel"); |
| 62 | + MonitorElement *Numerator_pt_endcap_singlePhoton_hlt = |
| 63 | + igetter.get(sourceFolder_ + |
| 64 | + "/resonanceZ_Tag_pat_Probe_sctElectron_passSinglePhoton_DST_" |
| 65 | + "fireTrigObj_Pt_Endcap"); |
| 66 | + MonitorElement *Denominator_pt_barrel = |
| 67 | + igetter.get(sourceFolder_ + "/resonanceZ_Tag_pat_Probe_sctElectron_Pt_Barrel"); |
| 68 | + MonitorElement *Denominator_pt_endcap = |
| 69 | + igetter.get(sourceFolder_ + "/resonanceZ_Tag_pat_Probe_sctElectron_Pt_Endcap"); |
| 70 | + |
| 71 | + if (Numerator_pt_barrel_doubleEG_hlt && Denominator_pt_barrel) |
| 72 | + calculateEfficiency(Numerator_pt_barrel_doubleEG_hlt, Denominator_pt_barrel, h_eff_pt_EB_doubleEG_HLT); |
| 73 | + if (Numerator_pt_endcap_doubleEG_hlt && Denominator_pt_endcap) |
| 74 | + calculateEfficiency(Numerator_pt_endcap_doubleEG_hlt, Denominator_pt_endcap, h_eff_pt_EE_doubleEG_HLT); |
| 75 | + if (Numerator_pt_barrel_singlePhoton_hlt && Denominator_pt_barrel) |
| 76 | + calculateEfficiency(Numerator_pt_barrel_singlePhoton_hlt, Denominator_pt_barrel, h_eff_pt_EB_singlePhoton_HLT); |
| 77 | + if (Numerator_pt_endcap_singlePhoton_hlt && Denominator_pt_endcap) |
| 78 | + calculateEfficiency(Numerator_pt_endcap_singlePhoton_hlt, Denominator_pt_endcap, h_eff_pt_EE_singlePhoton_HLT); |
| 79 | +} |
| 80 | + |
| 81 | +void ElectronEfficiencyPlotter::calculateEfficiency(MonitorElement *Numerator, |
| 82 | + MonitorElement *Denominator, |
| 83 | + MonitorElement *Efficiency) { |
| 84 | + TH1F *h_numerator_pt = Numerator->getTH1F(); |
| 85 | + TH1F *h_denominator_pt = Denominator->getTH1F(); |
| 86 | + TH1F *h_eff_pt = Efficiency->getTH1F(); |
| 87 | + if (h_eff_pt->GetSumw2N() == 0) |
| 88 | + h_eff_pt->Sumw2(); |
| 89 | + |
| 90 | + // ReBin |
| 91 | + int nBins = h_eff_pt->GetNbinsX(); |
| 92 | + double *binEdges = new double[nBins + 1]; |
| 93 | + for (int i = 0; i <= nBins; i++) |
| 94 | + binEdges[i] = h_eff_pt->GetBinLowEdge(i + 1); |
| 95 | + |
| 96 | + TH1F *h_numerator_pt_rebin = (TH1F *)h_numerator_pt->Rebin(nBins, "num_pt_rebinned", binEdges); |
| 97 | + TH1F *h_denominator_pt_rebin = (TH1F *)h_denominator_pt->Rebin(nBins, "num_pt_rebinned", binEdges); |
| 98 | + h_eff_pt->Divide(h_numerator_pt_rebin, h_denominator_pt_rebin, 1., 1., "B"); |
| 99 | +} |
| 100 | + |
| 101 | +DEFINE_FWK_MODULE(ElectronEfficiencyPlotter); |
0 commit comments