File indexing completed on 2024-04-06 12:01:06
0001 #ifndef CommonToolsParticleFlow_PDCandWithSuperCluster_H
0002 #define CommonToolsParticleFlow_PDCandWithSuperCluster_H
0003
0004 #include <string>
0005 #include <vector>
0006
0007 #include "FWCore/Framework/interface/ConsumesCollector.h"
0008
0009 #include "DataFormats/RecoCandidate/interface/IsoDeposit.h"
0010 #include "DataFormats/TrackReco/interface/Track.h"
0011 #include "DataFormats/TrackReco/interface/TrackFwd.h"
0012 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h"
0013 #include "DataFormats/EgammaCandidates/interface/Photon.h"
0014 #include "DataFormats/EgammaCandidates/interface/GsfElectron.h"
0015 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h"
0016 #include "DataFormats/TrackReco/interface/Track.h"
0017 #include "DataFormats/TrackReco/interface/TrackFwd.h"
0018 #include "PhysicsTools/IsolationAlgos/interface/IsoDepositExtractor.h"
0019
0020 class PFCandWithSuperClusterExtractor : public reco::isodeposit::IsoDepositExtractor {
0021 public:
0022 PFCandWithSuperClusterExtractor(){};
0023 PFCandWithSuperClusterExtractor(const edm::ParameterSet &par, edm::ConsumesCollector &&iC);
0024
0025 ~PFCandWithSuperClusterExtractor() override {}
0026
0027 void fillVetos(const edm::Event &ev, const edm::EventSetup &evSetup, const reco::TrackCollection &cand) override {}
0028
0029 reco::IsoDeposit deposit(const edm::Event &ev,
0030 const edm::EventSetup &evSetup,
0031 const reco::Track &muon) const override {
0032 return depositFromObject(ev, evSetup, muon);
0033 }
0034
0035 reco::IsoDeposit deposit(const edm::Event &ev,
0036 const edm::EventSetup &evSetup,
0037 const reco::Candidate &cand) const override {
0038 const reco::Photon *myPhoton = dynamic_cast<const reco::Photon *>(&cand);
0039 if (myPhoton)
0040 return depositFromObject(ev, evSetup, *myPhoton);
0041
0042 const reco::GsfElectron *myElectron = dynamic_cast<const reco::GsfElectron *>(&cand);
0043 if (myElectron)
0044 return depositFromObject(ev, evSetup, *myElectron);
0045
0046 const reco::PFCandidate *myPFCand = dynamic_cast<const reco::PFCandidate *>(&cand);
0047 return depositFromObject(ev, evSetup, *myPFCand);
0048 }
0049
0050 private:
0051 reco::IsoDeposit::Veto veto(const reco::IsoDeposit::Direction &dir) const;
0052
0053 reco::IsoDeposit depositFromObject(const edm::Event &ev,
0054 const edm::EventSetup &evSetup,
0055 const reco::Photon &cand) const;
0056
0057 reco::IsoDeposit depositFromObject(const edm::Event &ev,
0058 const edm::EventSetup &evSetup,
0059 const reco::GsfElectron &cand) const;
0060
0061 reco::IsoDeposit depositFromObject(const edm::Event &ev,
0062 const edm::EventSetup &evSetup,
0063 const reco::Track &cand) const;
0064
0065 reco::IsoDeposit depositFromObject(const edm::Event &ev,
0066 const edm::EventSetup &evSetup,
0067 const reco::PFCandidate &cand) const;
0068
0069
0070 edm::EDGetTokenT<reco::PFCandidateCollection> thePFCandToken;
0071 std::string theDepositLabel;
0072 bool theVetoSuperClusterMatch;
0073 bool theMissHitVetoSuperClusterMatch;
0074 double theDiff_r;
0075 double theDiff_z;
0076 double theDR_Max;
0077 double theDR_Veto;
0078 };
0079
0080 #endif