Back to home page

Project CMSSW displayed by LXR

 
 

    


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   // Predicate class that tests if a candidate lies within some deltaR (min,
0013   // max) about a supplied axis
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   // Wrapper around DeltaRFilter to support reference types like Ptr<>
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   /* Define our filters */
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 }  // end namespace reco::tau::cone
0057 
0058 #endif