File indexing completed on 2024-04-06 12:27:46
0001 #ifndef RecoTauTag_RecoTau_RecoTauQualityCuts_h
0002 #define RecoTauTag_RecoTau_RecoTauQualityCuts_h
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0023 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0024 #include "DataFormats/Candidate/interface/Candidate.h"
0025 #include "DataFormats/Candidate/interface/CandidateFwd.h"
0026 #include "DataFormats/TrackReco/interface/Track.h"
0027 #include "DataFormats/TrackReco/interface/TrackFwd.h"
0028 #include "DataFormats/VertexReco/interface/VertexFwd.h"
0029
0030 #include <functional>
0031
0032 namespace reco {
0033 namespace tau {
0034
0035 class RecoTauQualityCuts {
0036 public:
0037
0038 typedef std::function<bool(const TrackBaseRef&)> TrackQCutFunc;
0039 typedef std::vector<TrackQCutFunc> TrackQCutFuncCollection;
0040 typedef std::function<bool(const Candidate&)> CandQCutFunc;
0041 typedef std::vector<CandQCutFunc> CandQCutFuncCollection;
0042 typedef std::map<int, CandQCutFuncCollection> CandQCutFuncMap;
0043
0044 explicit RecoTauQualityCuts(const edm::ParameterSet& qcuts);
0045
0046
0047 void setPV(const reco::VertexRef& vtx) { pv_ = vtx; }
0048
0049
0050 void setLeadTrack(const reco::Track& leadTrack);
0051 void setLeadTrack(const reco::Candidate& leadCand);
0052
0053
0054
0055 void setLeadTrack(const reco::CandidateRef& leadCand);
0056
0057
0058 bool filterTrack(const reco::TrackBaseRef& track) const;
0059 bool filterTrack(const reco::TrackRef& track) const;
0060 bool filterTrack(const reco::Track& track) const;
0061
0062 bool filterChargedCand(const reco::Candidate& cand) const;
0063
0064
0065 template <typename Coll>
0066 Coll filterTracks(const Coll& coll, bool invert = false) const {
0067 Coll output;
0068 for (auto const& track : coll) {
0069 if (filterTrack(track) ^ invert)
0070 output.push_back(track);
0071 }
0072 return output;
0073 }
0074
0075
0076 bool filterCand(const reco::Candidate& cand) const;
0077
0078
0079 template <typename CandRefType>
0080 bool filterCandRef(const CandRefType& cand) const {
0081 return filterCand(*cand);
0082 }
0083
0084
0085 template <typename Coll>
0086 Coll filterCandRefs(const Coll& refcoll, bool invert = false) const {
0087 Coll output;
0088 for (auto const& cand : refcoll) {
0089 if (filterCandRef(cand) ^ invert)
0090 output.push_back(cand);
0091 }
0092 return output;
0093 }
0094
0095
0096 static void fillDescriptions(edm::ParameterSetDescription& descriptions);
0097
0098 private:
0099 bool filterTrack_(const reco::Track* track) const;
0100 bool filterGammaCand(const reco::Candidate& cand) const;
0101 bool filterNeutralHadronCand(const reco::Candidate& cand) const;
0102 bool filterCandByType(const reco::Candidate& cand) const;
0103
0104
0105 reco::VertexRef pv_;
0106
0107 const reco::Track* leadTrack_;
0108
0109 double minTrackPt_;
0110 double maxTrackChi2_;
0111 int minTrackPixelHits_;
0112 int minTrackHits_;
0113 double maxTransverseImpactParameter_;
0114 double maxDeltaZ_;
0115 double maxDeltaZToLeadTrack_;
0116 double minTrackVertexWeight_;
0117 double minGammaEt_;
0118 double minNeutralHadronEt_;
0119 bool checkHitPattern_;
0120 bool checkPV_;
0121 };
0122
0123
0124
0125 std::pair<edm::ParameterSet, edm::ParameterSet> factorizePUQCuts(const edm::ParameterSet& inputSet);
0126
0127 }
0128 }
0129
0130 #endif