File indexing completed on 2024-04-06 12:10:16
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #include <memory>
0021
0022
0023 #include "FWCore/Framework/interface/Frameworkfwd.h"
0024 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0025 #include "FWCore/Framework/interface/Event.h"
0026 #include "FWCore/Framework/interface/MakerMacros.h"
0027 #include "FWCore/Utilities/interface/transform.h"
0028 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0029 #include "DataFormats/EgammaCandidates/interface/GsfElectron.h"
0030 #include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h"
0031 #include "DataFormats/EgammaCandidates/interface/Conversion.h"
0032 #include "DataFormats/VertexReco/interface/Vertex.h"
0033 #include "DataFormats/VertexReco/interface/VertexFwd.h"
0034 #include "DataFormats/Common/interface/ValueMap.h"
0035 #include "DataFormats/RecoCandidate/interface/IsoDeposit.h"
0036 #include "EgammaAnalysis/ElectronTools/interface/EGammaCutBasedEleId.h"
0037 #include "EgammaAnalysis/ElectronTools/interface/ElectronEffectiveArea.h"
0038 #include "FWCore/ServiceRegistry/interface/Service.h"
0039 #include "CommonTools/UtilAlgos/interface/TFileService.h"
0040
0041 #include <TFile.h>
0042 #include <TH1F.h>
0043
0044
0045
0046
0047
0048 class EGammaCutBasedEleIdAnalyzer : public edm::one::EDAnalyzer<> {
0049 public:
0050 typedef std::vector<edm::Handle<edm::ValueMap<reco::IsoDeposit> > > IsoDepositMaps;
0051 typedef std::vector<edm::Handle<edm::ValueMap<double> > > IsoDepositVals;
0052
0053 explicit EGammaCutBasedEleIdAnalyzer(const edm::ParameterSet &);
0054
0055 static void fillDescriptions(edm::ConfigurationDescriptions &descriptions);
0056 ElectronEffectiveArea::ElectronEffectiveAreaTarget EAtarget;
0057
0058 private:
0059 void beginJob() override;
0060 void analyze(const edm::Event &, const edm::EventSetup &) override;
0061
0062
0063
0064
0065 edm::EDGetTokenT<reco::GsfElectronCollection> electronsToken_;
0066 edm::EDGetTokenT<reco::ConversionCollection> conversionsToken_;
0067 edm::EDGetTokenT<reco::BeamSpot> beamSpotToken_;
0068 edm::EDGetTokenT<double> rhoIsoToken_;
0069 edm::EDGetTokenT<reco::VertexCollection> primaryVertexToken_;
0070 std::vector<edm::EDGetTokenT<edm::ValueMap<double> > > isoValTokens_;
0071 std::string EAtargetToken_;
0072
0073
0074 bool printDebug_;
0075
0076
0077 TH1F *h1_pt_;
0078 TH1F *h1_pt_veto_;
0079 TH1F *h1_pt_loose_;
0080 TH1F *h1_pt_medium_;
0081 TH1F *h1_pt_tight_;
0082 TH1F *h1_pt_trig_;
0083 TH1F *h1_pt_fbremeopin_;
0084 };
0085
0086
0087
0088
0089
0090
0091
0092
0093 EGammaCutBasedEleIdAnalyzer::EGammaCutBasedEleIdAnalyzer(const edm::ParameterSet &iConfig) {
0094
0095 electronsToken_ = consumes<reco::GsfElectronCollection>(iConfig.getParameter<edm::InputTag>("electronsInputTag"));
0096 conversionsToken_ = consumes<reco::ConversionCollection>(iConfig.getParameter<edm::InputTag>("conversionsInputTag"));
0097 beamSpotToken_ = consumes<reco::BeamSpot>(iConfig.getParameter<edm::InputTag>("beamSpotInputTag"));
0098 rhoIsoToken_ = consumes<double>(iConfig.getParameter<edm::InputTag>("rhoIsoInputTag"));
0099 primaryVertexToken_ = consumes<reco::VertexCollection>(iConfig.getParameter<edm::InputTag>("primaryVertexInputTag"));
0100 isoValTokens_ =
0101 edm::vector_transform(iConfig.getParameter<std::vector<edm::InputTag> >("isoValInputTags"),
0102 [this](edm::InputTag const &tag) { return consumes<edm::ValueMap<double> >(tag); });
0103 EAtargetToken_ = iConfig.getParameter<std::string>(
0104 "EAtarget");
0105
0106
0107 printDebug_ = iConfig.getParameter<bool>("printDebug");
0108
0109
0110 edm::Service<TFileService> fs;
0111
0112 h1_pt_ = fs->make<TH1F>("h1_pt", "pt", 100, 0.0, 100.0);
0113 h1_pt_veto_ = fs->make<TH1F>("h1_pt_veto", "pt (veto)", 100, 0.0, 100.0);
0114 h1_pt_loose_ = fs->make<TH1F>("h1_pt_loose", "pt (loose)", 100, 0.0, 100.0);
0115 h1_pt_medium_ = fs->make<TH1F>("h1_pt_medium", "pt (medium)", 100, 0.0, 100.0);
0116 h1_pt_tight_ = fs->make<TH1F>("h1_pt_tight", "pt (tight)", 100, 0.0, 100.0);
0117 h1_pt_trig_ = fs->make<TH1F>("h1_pt_trig", "pt (trig)", 100, 0.0, 100.0);
0118 h1_pt_fbremeopin_ = fs->make<TH1F>("h1_pt_fbremeopin", "pt (fbremeopin)", 100, 0.0, 100.0);
0119 }
0120
0121
0122
0123
0124
0125
0126 void EGammaCutBasedEleIdAnalyzer::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) {
0127
0128 edm::Handle<reco::GsfElectronCollection> els_h;
0129 iEvent.getByToken(electronsToken_, els_h);
0130
0131
0132 edm::Handle<reco::ConversionCollection> conversions_h;
0133 iEvent.getByToken(conversionsToken_, conversions_h);
0134
0135
0136 IsoDepositVals isoVals(isoValTokens_.size());
0137 for (size_t j = 0; j < isoValTokens_.size(); ++j) {
0138 iEvent.getByToken(isoValTokens_[j], isoVals[j]);
0139 }
0140
0141
0142 edm::Handle<reco::BeamSpot> beamspot_h;
0143 iEvent.getByToken(beamSpotToken_, beamspot_h);
0144 const reco::BeamSpot &beamSpot = *(beamspot_h.product());
0145
0146
0147 edm::Handle<reco::VertexCollection> vtx_h;
0148 iEvent.getByToken(primaryVertexToken_, vtx_h);
0149
0150
0151 edm::Handle<double> rhoIso_h;
0152 iEvent.getByToken(rhoIsoToken_, rhoIso_h);
0153 double rhoIso = *(rhoIso_h.product());
0154
0155
0156 unsigned int n = els_h->size();
0157 for (unsigned int i = 0; i < n; ++i) {
0158
0159 reco::GsfElectronRef ele(els_h, i);
0160
0161
0162
0163
0164
0165 double iso_ch = (*(isoVals)[0])[ele];
0166 double iso_em = (*(isoVals)[1])[ele];
0167 double iso_nh = (*(isoVals)[2])[ele];
0168
0169
0170
0171
0172
0173
0174 bool veto = EgammaCutBasedEleId::PassWP(
0175 EgammaCutBasedEleId::VETO, ele, conversions_h, beamSpot, vtx_h, iso_ch, iso_em, iso_nh, rhoIso, EAtarget);
0176 bool loose = EgammaCutBasedEleId::PassWP(
0177 EgammaCutBasedEleId::LOOSE, ele, conversions_h, beamSpot, vtx_h, iso_ch, iso_em, iso_nh, rhoIso, EAtarget);
0178 bool medium = EgammaCutBasedEleId::PassWP(
0179 EgammaCutBasedEleId::MEDIUM, ele, conversions_h, beamSpot, vtx_h, iso_ch, iso_em, iso_nh, rhoIso, EAtarget);
0180 bool tight = EgammaCutBasedEleId::PassWP(
0181 EgammaCutBasedEleId::TIGHT, ele, conversions_h, beamSpot, vtx_h, iso_ch, iso_em, iso_nh, rhoIso, EAtarget);
0182
0183
0184 bool fbremeopin = EgammaCutBasedEleId::PassEoverPCuts(ele);
0185
0186
0187 bool trigtight = EgammaCutBasedEleId::PassTriggerCuts(EgammaCutBasedEleId::TRIGGERTIGHT, ele);
0188
0189
0190 bool trigwp70 = EgammaCutBasedEleId::PassTriggerCuts(EgammaCutBasedEleId::TRIGGERWP70, ele);
0191
0192
0193
0194
0195
0196 h1_pt_->Fill(ele->pt());
0197 if (veto)
0198 h1_pt_veto_->Fill(ele->pt());
0199 if (loose)
0200 h1_pt_loose_->Fill(ele->pt());
0201 if (medium)
0202 h1_pt_medium_->Fill(ele->pt());
0203 if (tight)
0204 h1_pt_tight_->Fill(ele->pt());
0205 if (trigtight)
0206 h1_pt_trig_->Fill(ele->pt());
0207 if (fbremeopin)
0208 h1_pt_fbremeopin_->Fill(ele->pt());
0209
0210
0211
0212
0213
0214 if (printDebug_) {
0215 printf("%u %u %llu : ", iEvent.id().run(), iEvent.luminosityBlock(), iEvent.id().event());
0216 printf("veto(%i), ", veto);
0217 printf("loose(%i), ", loose);
0218 printf("medium(%i), ", medium);
0219 printf("tight(%i), ", tight);
0220 printf("trigtight(%i), ", trigtight);
0221 printf("trigwp70(%i), ", trigwp70);
0222 printf("fbremeopin(%i)\n", fbremeopin);
0223 }
0224 }
0225 }
0226
0227
0228 void EGammaCutBasedEleIdAnalyzer::beginJob() {
0229 if (EAtargetToken_ == "EleEANoCorr")
0230 EAtarget = ElectronEffectiveArea::kEleEANoCorr;
0231 else if (EAtargetToken_ == "EleEAData2011")
0232 EAtarget = ElectronEffectiveArea::kEleEAData2011;
0233 else if (EAtargetToken_ == "EleEASummer11MC")
0234 EAtarget = ElectronEffectiveArea::kEleEASummer11MC;
0235 else if (EAtargetToken_ == "EleEAFall11MC")
0236 EAtarget = ElectronEffectiveArea::kEleEAFall11MC;
0237 else if (EAtargetToken_ == "EleEAData2012")
0238 EAtarget = ElectronEffectiveArea::kEleEAData2012;
0239 else
0240 EAtarget = ElectronEffectiveArea::kEleEAData2012;
0241 }
0242
0243
0244 void EGammaCutBasedEleIdAnalyzer::fillDescriptions(edm::ConfigurationDescriptions &descriptions) {
0245
0246
0247 edm::ParameterSetDescription desc;
0248 desc.setUnknown();
0249 descriptions.addDefault(desc);
0250 }
0251
0252
0253 DEFINE_FWK_MODULE(EGammaCutBasedEleIdAnalyzer);