File indexing completed on 2023-05-17 02:07:47
0001
0002 #include "PhysicsTools/IsolationAlgos/interface/EventDependentAbsVetos.h"
0003 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h"
0004 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h"
0005 #include "DataFormats/Math/interface/deltaR.h"
0006
0007 bool reco::isodeposit::OtherCandidatesDeltaRVeto::veto(double eta, double phi, float value) const {
0008 for (std::vector<Direction>::const_iterator it = items_.begin(), ed = items_.end(); it != ed; ++it) {
0009 if (::deltaR2(it->eta(), it->phi(), eta, phi) < deltaR2_)
0010 return true;
0011 }
0012 return false;
0013 }
0014
0015 void reco::isodeposit::OtherCandidatesDeltaRVeto::setEvent(const edm::Event &iEvent, const edm::EventSetup &iSetup) {
0016 items_.clear();
0017 edm::Handle<edm::View<reco::Candidate> > candidates;
0018 iEvent.getByToken(src_, candidates);
0019 for (edm::View<reco::Candidate>::const_iterator it = candidates->begin(), ed = candidates->end(); it != ed; ++it) {
0020 items_.push_back(Direction(it->eta(), it->phi()));
0021 }
0022 }
0023
0024 bool reco::isodeposit::OtherCandVeto::veto(double eta, double phi, float value) const {
0025 for (std::vector<Direction>::const_iterator it = items_.begin(), ed = items_.end(); it != ed; ++it) {
0026 veto_->centerOn(it->eta(), it->phi());
0027 if (veto_->veto(eta, phi, value))
0028 return true;
0029 }
0030 return false;
0031 }
0032
0033 void reco::isodeposit::OtherCandVeto::setEvent(const edm::Event &iEvent, const edm::EventSetup &iSetup) {
0034 items_.clear();
0035 edm::Handle<edm::View<reco::Candidate> > candidates;
0036 iEvent.getByToken(src_, candidates);
0037 for (edm::View<reco::Candidate>::const_iterator it = candidates->begin(), ed = candidates->end(); it != ed; ++it) {
0038 items_.push_back(Direction(it->eta(), it->phi()));
0039 }
0040 }
0041
0042 bool reco::isodeposit::OtherJetConstituentsDeltaRVeto::veto(double eta, double phi, float value) const {
0043 for (std::vector<Direction>::const_iterator it = items_.begin(), ed = items_.end(); it != ed; ++it) {
0044 if (::deltaR2(it->eta(), it->phi(), eta, phi) < dR2constituent_)
0045 return true;
0046 }
0047 return false;
0048 }
0049
0050 void reco::isodeposit::OtherJetConstituentsDeltaRVeto::setEvent(const edm::Event &evt, const edm::EventSetup &es) {
0051
0052 evt_ = &evt;
0053 }
0054 void reco::isodeposit::OtherJetConstituentsDeltaRVeto::initialize() {
0055
0056
0057 assert(evt_);
0058 items_.clear();
0059 edm::Handle<reco::PFJetCollection> jets;
0060 evt_->getByToken(srcJets_, jets);
0061 edm::Handle<JetToPFCandidateAssociation> jetToPFCandMap;
0062 evt_->getByToken(srcPFCandAssocMap_, jetToPFCandMap);
0063 double dR2min = dR2jet_;
0064 reco::PFJetRef matchedJet;
0065 size_t numJets = jets->size();
0066 for (size_t jetIndex = 0; jetIndex < numJets; ++jetIndex) {
0067 reco::PFJetRef jet(jets, jetIndex);
0068 double dR2 = ::deltaR2(vetoDir_.eta(), vetoDir_.phi(), jet->eta(), jet->phi());
0069
0070 if (dR2 < dR2min) {
0071 matchedJet = jet;
0072 dR2min = dR2;
0073 }
0074 }
0075 if (matchedJet.isNonnull()) {
0076 edm::RefVector<reco::PFCandidateCollection> pfCandsMappedToJet = (*jetToPFCandMap)[matchedJet];
0077 for (edm::RefVector<reco::PFCandidateCollection>::const_iterator pfCand = pfCandsMappedToJet.begin();
0078 pfCand != pfCandsMappedToJet.end();
0079 ++pfCand) {
0080 items_.push_back(Direction((*pfCand)->eta(), (*pfCand)->phi()));
0081 }
0082 }
0083 }
0084
0085 void reco::isodeposit::OtherJetConstituentsDeltaRVeto::centerOn(double eta, double phi) {
0086
0087
0088
0089 vetoDir_ = Direction(eta, phi);
0090 initialize();
0091 }