File indexing completed on 2024-04-06 12:25:08
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include "FWCore/Framework/interface/stream/EDAnalyzer.h"
0011 #include "FWCore/Framework/interface/Event.h"
0012 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0013 #include "FWCore/Utilities/interface/InputTag.h"
0014
0015 #include "FWCore/Framework/interface/MakerMacros.h"
0016
0017 #include "DataFormats/Common/interface/ValueMap.h"
0018 #include "DataFormats/Common/interface/View.h"
0019 #include "DataFormats/PatCandidates/interface/Electron.h"
0020 #include "DataFormats/EgammaCandidates/interface/GsfElectron.h"
0021 #include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h"
0022
0023 class VIDUsageExample : public edm::stream::EDAnalyzer<> {
0024 private:
0025
0026
0027
0028 edm::EDGetTokenT<reco::GsfElectronCollection> gsfEleToken_;
0029 edm::EDGetTokenT<edm::View<pat::Electron> > patEleToken_;
0030 edm::EDGetTokenT<edm::ValueMap<bool> > idDecisionMapToken_;
0031
0032 edm::EDGetTokenT<edm::ValueMap<unsigned> > firstIdCutFailedMapToken_;
0033
0034 edm::EDGetTokenT<std::string> idMD5NameToken_;
0035
0036 size_t nrPassID_;
0037 size_t nrFailID_;
0038
0039 public:
0040 explicit VIDUsageExample(const edm::ParameterSet& para);
0041 ~VIDUsageExample() {}
0042
0043 virtual void analyze(const edm::Event& event, const edm::EventSetup& setup) override;
0044
0045 void endStream() override {
0046 std::cout << "nrPass " << nrPassID_ << " nrFail " << nrFailID_
0047 << " (note this is all \"electrons\" so is not the ID efficiency)" << std::endl;
0048 }
0049 };
0050
0051 VIDUsageExample::VIDUsageExample(const edm::ParameterSet& para)
0052 : gsfEleToken_(consumes<reco::GsfElectronCollection>(para.getParameter<edm::InputTag>("eles"))),
0053 patEleToken_(consumes<edm::View<pat::Electron> >(para.getParameter<edm::InputTag>("eles"))),
0054
0055 idDecisionMapToken_(consumes<edm::ValueMap<bool> >(para.getParameter<edm::InputTag>("id"))),
0056 firstIdCutFailedMapToken_(consumes<edm::ValueMap<unsigned> >(para.getParameter<edm::InputTag>("id"))),
0057 idMD5NameToken_(consumes<std::string>(para.getParameter<edm::InputTag>("id"))),
0058 nrPassID_(0),
0059 nrFailID_(0)
0060
0061 {}
0062
0063 void VIDUsageExample::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
0064 edm::Handle<edm::View<pat::Electron> > patEles;
0065 iEvent.getByToken(patEleToken_, patEles);
0066
0067 edm::Handle<reco::GsfElectronCollection> gsfEles;
0068 iEvent.getByToken(gsfEleToken_, gsfEles);
0069
0070 edm::Handle<edm::ValueMap<bool> > idDecisionMap;
0071 iEvent.getByToken(idDecisionMapToken_, idDecisionMap);
0072
0073 edm::Handle<edm::ValueMap<unsigned> > firstIdCutFailedMap;
0074 iEvent.getByToken(firstIdCutFailedMapToken_, firstIdCutFailedMap);
0075
0076 edm::Handle<std::string> idMD5Name;
0077 iEvent.getByToken(idMD5NameToken_, idMD5Name);
0078
0079 std::cout << "md5sum of the ID " << *idMD5Name << std::endl;
0080
0081
0082
0083 if (patEles.isValid()) {
0084 for (auto ele = patEles->begin(); ele != patEles->end(); ++ele) {
0085
0086 const edm::Ptr<pat::Electron> elePtr(patEles, ele - patEles->begin());
0087 bool passID = (*idDecisionMap)[elePtr];
0088 if (passID) {
0089 std::cout << "pat ele passed ID" << std::endl;
0090 nrPassID_++;
0091 } else {
0092 int firstCutFailedNr = (*firstIdCutFailedMap)[elePtr];
0093 std::cout << "pat ele failed ID at cut #" << firstCutFailedNr << std::endl;
0094 nrFailID_++;
0095 }
0096 }
0097 } else if (gsfEles.isValid()) {
0098 for (auto ele = gsfEles->begin(); ele != gsfEles->end(); ++ele) {
0099
0100 const edm::Ptr<reco::GsfElectron> elePtr(gsfEles, ele - gsfEles->begin());
0101 bool passID = (*idDecisionMap)[elePtr];
0102 if (passID) {
0103 std::cout << "gsf ele passed ID" << std::endl;
0104 nrPassID_++;
0105 } else {
0106 int firstCutFailedNr = (*firstIdCutFailedMap)[elePtr];
0107 std::cout << "gsf ele failed ID at cut #" << firstCutFailedNr << std::endl;
0108 nrFailID_++;
0109 }
0110 }
0111 } else {
0112 std::cout << "no Gsf or PAT electrons found" << std::endl;
0113 }
0114 }
0115
0116 DEFINE_FWK_MODULE(VIDUsageExample);