File indexing completed on 2024-04-06 12:27:45
0001 #ifndef RecoTauTag_RecoTau_ConeTools_h
0002 #define RecoTauTag_RecoTau_ConeTools_h
0003
0004 #include "DataFormats/Math/interface/deltaR.h"
0005 #include <boost/iterator/filter_iterator.hpp>
0006 #include "DataFormats/TauReco/interface/PFTau.h"
0007 #include "DataFormats/TauReco/interface/PFRecoTauChargedHadron.h"
0008 #include "DataFormats/TauReco/interface/RecoTauPiZero.h"
0009
0010 namespace reco::tau::cone {
0011
0012
0013
0014 template <class CandType>
0015 class DeltaRFilter {
0016 public:
0017 DeltaRFilter(const reco::Candidate::LorentzVector& axis, double min, double max)
0018 : eta_(axis.eta()), phi_(axis.phi()), min2_(min < 0. ? -min * min : min * min), max2_(max * max) {}
0019 bool operator()(const CandType& b) const {
0020 double dR2 = deltaR2(b.eta(), b.phi(), eta_, phi_);
0021 return (dR2 >= min2_ && dR2 < max2_);
0022 }
0023
0024 private:
0025 double eta_;
0026 double phi_;
0027 const double min2_;
0028 const double max2_;
0029 };
0030
0031
0032 template <class CandType>
0033 class DeltaRPtrFilter {
0034 public:
0035 DeltaRPtrFilter(const reco::Candidate::LorentzVector& axis, double min, double max) : filter_(axis, min, max) {}
0036 bool operator()(const CandType& b) const { return filter_(*b); }
0037
0038 private:
0039 DeltaRFilter<typename CandType::value_type> filter_;
0040 };
0041
0042
0043 typedef DeltaRPtrFilter<PFCandidatePtr> PFCandPtrDRFilter;
0044 typedef boost::filter_iterator<PFCandPtrDRFilter, std::vector<PFCandidatePtr>::const_iterator> PFCandPtrDRFilterIter;
0045
0046 typedef DeltaRPtrFilter<CandidatePtr> CandPtrDRFilter;
0047 typedef boost::filter_iterator<CandPtrDRFilter, std::vector<CandidatePtr>::const_iterator> CandPtrDRFilterIter;
0048
0049 typedef DeltaRFilter<PFRecoTauChargedHadron> ChargedHadronDRFilter;
0050 typedef boost::filter_iterator<ChargedHadronDRFilter, std::vector<PFRecoTauChargedHadron>::const_iterator>
0051 ChargedHadronDRFilterIter;
0052
0053 typedef DeltaRFilter<RecoTauPiZero> PiZeroDRFilter;
0054 typedef boost::filter_iterator<PiZeroDRFilter, std::vector<RecoTauPiZero>::const_iterator> PiZeroDRFilterIter;
0055
0056 }
0057
0058 #endif