File indexing completed on 2024-04-06 12:25:09
0001 #include "RecoEgamma/PhotonIdentification/plugins/PhotonIDProducer.h"
0002 #include "DataFormats/EgammaReco/interface/BasicCluster.h"
0003 #include "DataFormats/Common/interface/ValueMap.h"
0004
0005 PhotonIDProducer::PhotonIDProducer(const edm::ParameterSet& conf) : conf_(conf) {
0006 photonToken_ = consumes<reco::PhotonCollection>(
0007 edm::InputTag(conf_.getParameter<std::string>("photonProducer"), conf_.getParameter<std::string>("photonLabel")));
0008
0009 photonCutBasedIDLooseLabel_ = conf.getParameter<std::string>("photonCutBasedIDLooseLabel");
0010 photonCutBasedIDTightLabel_ = conf.getParameter<std::string>("photonCutBasedIDTightLabel");
0011 photonCutBasedIDLooseEMLabel_ = conf.getParameter<std::string>("photonCutBasedIDLooseEMLabel");
0012
0013 doCutBased_ = conf_.getParameter<bool>("doCutBased");
0014 cutBasedAlgo_ = new CutBasedPhotonIDAlgo();
0015 cutBasedAlgo_->setup(conf);
0016 produces<edm::ValueMap<bool>>(photonCutBasedIDLooseLabel_);
0017 produces<edm::ValueMap<bool>>(photonCutBasedIDTightLabel_);
0018 produces<edm::ValueMap<bool>>(photonCutBasedIDLooseEMLabel_);
0019 }
0020
0021 PhotonIDProducer::~PhotonIDProducer() {
0022
0023 delete cutBasedAlgo_;
0024 }
0025
0026 void PhotonIDProducer::produce(edm::Event& e, const edm::EventSetup& c) {
0027
0028 edm::Handle<reco::PhotonCollection> photons;
0029 e.getByToken(photonToken_, photons);
0030
0031
0032 reco::PhotonCollection::const_iterator photon;
0033 std::vector<bool> Loose;
0034 std::vector<bool> Tight;
0035 std::vector<bool> LooseEM;
0036 for (photon = (*photons).begin(); photon != (*photons).end(); ++photon) {
0037 bool LooseQual;
0038 bool TightQual;
0039 bool LooseEMQual;
0040 if (photon->isEB())
0041 cutBasedAlgo_->decideEB(&(*photon), LooseEMQual, LooseQual, TightQual);
0042 else
0043 cutBasedAlgo_->decideEE(&(*photon), LooseEMQual, LooseQual, TightQual);
0044 LooseEM.push_back(LooseEMQual);
0045 Loose.push_back(LooseQual);
0046 Tight.push_back(TightQual);
0047 }
0048
0049 auto outlooseEM = std::make_unique<edm::ValueMap<bool>>();
0050 edm::ValueMap<bool>::Filler fillerlooseEM(*outlooseEM);
0051 fillerlooseEM.insert(photons, LooseEM.begin(), LooseEM.end());
0052 fillerlooseEM.fill();
0053
0054 e.put(std::move(outlooseEM), photonCutBasedIDLooseEMLabel_);
0055
0056 auto outloose = std::make_unique<edm::ValueMap<bool>>();
0057 edm::ValueMap<bool>::Filler fillerloose(*outloose);
0058 fillerloose.insert(photons, Loose.begin(), Loose.end());
0059 fillerloose.fill();
0060
0061 e.put(std::move(outloose), photonCutBasedIDLooseLabel_);
0062
0063 auto outtight = std::make_unique<edm::ValueMap<bool>>();
0064 edm::ValueMap<bool>::Filler fillertight(*outtight);
0065 fillertight.insert(photons, Tight.begin(), Tight.end());
0066 fillertight.fill();
0067
0068 e.put(std::move(outtight), photonCutBasedIDTightLabel_);
0069 }