File indexing completed on 2023-03-17 10:59:10
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 ~EGammaCutBasedEleIdAnalyzer() override;
0055
0056 static void fillDescriptions(edm::ConfigurationDescriptions &descriptions);
0057 ElectronEffectiveArea::ElectronEffectiveAreaTarget EAtarget;
0058
0059 private:
0060 void beginJob() override;
0061 void analyze(const edm::Event &, const edm::EventSetup &) override;
0062 void endJob() override;
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073 edm::EDGetTokenT<reco::GsfElectronCollection> electronsToken_;
0074 edm::EDGetTokenT<reco::ConversionCollection> conversionsToken_;
0075 edm::EDGetTokenT<reco::BeamSpot> beamSpotToken_;
0076 edm::EDGetTokenT<double> rhoIsoToken_;
0077 edm::EDGetTokenT<reco::VertexCollection> primaryVertexToken_;
0078 std::vector<edm::EDGetTokenT<edm::ValueMap<double> > > isoValTokens_;
0079 std::string EAtargetToken_;
0080
0081
0082 bool printDebug_;
0083
0084
0085 TH1F *h1_pt_;
0086 TH1F *h1_pt_veto_;
0087 TH1F *h1_pt_loose_;
0088 TH1F *h1_pt_medium_;
0089 TH1F *h1_pt_tight_;
0090 TH1F *h1_pt_trig_;
0091 TH1F *h1_pt_fbremeopin_;
0092 };
0093
0094
0095
0096
0097
0098
0099
0100
0101 EGammaCutBasedEleIdAnalyzer::EGammaCutBasedEleIdAnalyzer(const edm::ParameterSet &iConfig) {
0102
0103 electronsToken_ = consumes<reco::GsfElectronCollection>(iConfig.getParameter<edm::InputTag>("electronsInputTag"));
0104 conversionsToken_ = consumes<reco::ConversionCollection>(iConfig.getParameter<edm::InputTag>("conversionsInputTag"));
0105 beamSpotToken_ = consumes<reco::BeamSpot>(iConfig.getParameter<edm::InputTag>("beamSpotInputTag"));
0106 rhoIsoToken_ = consumes<double>(iConfig.getParameter<edm::InputTag>("rhoIsoInputTag"));
0107 primaryVertexToken_ = consumes<reco::VertexCollection>(iConfig.getParameter<edm::InputTag>("primaryVertexInputTag"));
0108 isoValTokens_ =
0109 edm::vector_transform(iConfig.getParameter<std::vector<edm::InputTag> >("isoValInputTags"),
0110 [this](edm::InputTag const &tag) { return consumes<edm::ValueMap<double> >(tag); });
0111 EAtargetToken_ = iConfig.getParameter<std::string>(
0112 "EAtarget");
0113
0114
0115 printDebug_ = iConfig.getParameter<bool>("printDebug");
0116
0117
0118 edm::Service<TFileService> fs;
0119
0120 h1_pt_ = fs->make<TH1F>("h1_pt", "pt", 100, 0.0, 100.0);
0121 h1_pt_veto_ = fs->make<TH1F>("h1_pt_veto", "pt (veto)", 100, 0.0, 100.0);
0122 h1_pt_loose_ = fs->make<TH1F>("h1_pt_loose", "pt (loose)", 100, 0.0, 100.0);
0123 h1_pt_medium_ = fs->make<TH1F>("h1_pt_medium", "pt (medium)", 100, 0.0, 100.0);
0124 h1_pt_tight_ = fs->make<TH1F>("h1_pt_tight", "pt (tight)", 100, 0.0, 100.0);
0125 h1_pt_trig_ = fs->make<TH1F>("h1_pt_trig", "pt (trig)", 100, 0.0, 100.0);
0126 h1_pt_fbremeopin_ = fs->make<TH1F>("h1_pt_fbremeopin", "pt (fbremeopin)", 100, 0.0, 100.0);
0127 }
0128
0129 EGammaCutBasedEleIdAnalyzer::~EGammaCutBasedEleIdAnalyzer() {
0130
0131
0132 }
0133
0134
0135
0136
0137
0138
0139 void EGammaCutBasedEleIdAnalyzer::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) {
0140
0141 edm::Handle<reco::GsfElectronCollection> els_h;
0142 iEvent.getByToken(electronsToken_, els_h);
0143
0144
0145 edm::Handle<reco::ConversionCollection> conversions_h;
0146 iEvent.getByToken(conversionsToken_, conversions_h);
0147
0148
0149 IsoDepositVals isoVals(isoValTokens_.size());
0150 for (size_t j = 0; j < isoValTokens_.size(); ++j) {
0151 iEvent.getByToken(isoValTokens_[j], isoVals[j]);
0152 }
0153
0154
0155 edm::Handle<reco::BeamSpot> beamspot_h;
0156 iEvent.getByToken(beamSpotToken_, beamspot_h);
0157 const reco::BeamSpot &beamSpot = *(beamspot_h.product());
0158
0159
0160 edm::Handle<reco::VertexCollection> vtx_h;
0161 iEvent.getByToken(primaryVertexToken_, vtx_h);
0162
0163
0164 edm::Handle<double> rhoIso_h;
0165 iEvent.getByToken(rhoIsoToken_, rhoIso_h);
0166 double rhoIso = *(rhoIso_h.product());
0167
0168
0169 unsigned int n = els_h->size();
0170 for (unsigned int i = 0; i < n; ++i) {
0171
0172 reco::GsfElectronRef ele(els_h, i);
0173
0174
0175
0176
0177
0178 double iso_ch = (*(isoVals)[0])[ele];
0179 double iso_em = (*(isoVals)[1])[ele];
0180 double iso_nh = (*(isoVals)[2])[ele];
0181
0182
0183
0184
0185
0186
0187 bool veto = EgammaCutBasedEleId::PassWP(
0188 EgammaCutBasedEleId::VETO, ele, conversions_h, beamSpot, vtx_h, iso_ch, iso_em, iso_nh, rhoIso, EAtarget);
0189 bool loose = EgammaCutBasedEleId::PassWP(
0190 EgammaCutBasedEleId::LOOSE, ele, conversions_h, beamSpot, vtx_h, iso_ch, iso_em, iso_nh, rhoIso, EAtarget);
0191 bool medium = EgammaCutBasedEleId::PassWP(
0192 EgammaCutBasedEleId::MEDIUM, ele, conversions_h, beamSpot, vtx_h, iso_ch, iso_em, iso_nh, rhoIso, EAtarget);
0193 bool tight = EgammaCutBasedEleId::PassWP(
0194 EgammaCutBasedEleId::TIGHT, ele, conversions_h, beamSpot, vtx_h, iso_ch, iso_em, iso_nh, rhoIso, EAtarget);
0195
0196
0197 bool fbremeopin = EgammaCutBasedEleId::PassEoverPCuts(ele);
0198
0199
0200 bool trigtight = EgammaCutBasedEleId::PassTriggerCuts(EgammaCutBasedEleId::TRIGGERTIGHT, ele);
0201
0202
0203 bool trigwp70 = EgammaCutBasedEleId::PassTriggerCuts(EgammaCutBasedEleId::TRIGGERWP70, ele);
0204
0205
0206
0207
0208
0209 h1_pt_->Fill(ele->pt());
0210 if (veto)
0211 h1_pt_veto_->Fill(ele->pt());
0212 if (loose)
0213 h1_pt_loose_->Fill(ele->pt());
0214 if (medium)
0215 h1_pt_medium_->Fill(ele->pt());
0216 if (tight)
0217 h1_pt_tight_->Fill(ele->pt());
0218 if (trigtight)
0219 h1_pt_trig_->Fill(ele->pt());
0220 if (fbremeopin)
0221 h1_pt_fbremeopin_->Fill(ele->pt());
0222
0223
0224
0225
0226
0227 if (printDebug_) {
0228 printf("%u %u %llu : ", iEvent.id().run(), iEvent.luminosityBlock(), iEvent.id().event());
0229 printf("veto(%i), ", veto);
0230 printf("loose(%i), ", loose);
0231 printf("medium(%i), ", medium);
0232 printf("tight(%i), ", tight);
0233 printf("trigtight(%i), ", trigtight);
0234 printf("trigwp70(%i), ", trigwp70);
0235 printf("fbremeopin(%i)\n", fbremeopin);
0236 }
0237 }
0238 }
0239
0240
0241 void EGammaCutBasedEleIdAnalyzer::beginJob() {
0242 if (EAtargetToken_ == "EleEANoCorr")
0243 EAtarget = ElectronEffectiveArea::kEleEANoCorr;
0244 else if (EAtargetToken_ == "EleEAData2011")
0245 EAtarget = ElectronEffectiveArea::kEleEAData2011;
0246 else if (EAtargetToken_ == "EleEASummer11MC")
0247 EAtarget = ElectronEffectiveArea::kEleEASummer11MC;
0248 else if (EAtargetToken_ == "EleEAFall11MC")
0249 EAtarget = ElectronEffectiveArea::kEleEAFall11MC;
0250 else if (EAtargetToken_ == "EleEAData2012")
0251 EAtarget = ElectronEffectiveArea::kEleEAData2012;
0252 else
0253 EAtarget = ElectronEffectiveArea::kEleEAData2012;
0254 }
0255
0256
0257 void EGammaCutBasedEleIdAnalyzer::endJob() {}
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267
0268
0269
0270
0271
0272 void EGammaCutBasedEleIdAnalyzer::fillDescriptions(edm::ConfigurationDescriptions &descriptions) {
0273
0274
0275 edm::ParameterSetDescription desc;
0276 desc.setUnknown();
0277 descriptions.addDefault(desc);
0278 }
0279
0280
0281 DEFINE_FWK_MODULE(EGammaCutBasedEleIdAnalyzer);