File indexing completed on 2023-03-17 11:17:40
0001 #ifndef RECOEGAMMA_EGAMMAISOLATIONALGOS_ELETKISOLFROMCANDS_H
0002 #define RECOEGAMMA_EGAMMAISOLATIONALGOS_ELETKISOLFROMCANDS_H
0003
0004 #include "CommonTools/Utils/interface/KinematicColumns.h"
0005 #include "DataFormats/TrackReco/interface/TrackBase.h"
0006 #include "DataFormats/TrackReco/interface/TrackFwd.h"
0007 #include "DataFormats/PatCandidates/interface/PackedCandidate.h"
0008 #include "FWCore/SOA/interface/Table.h"
0009 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0010 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046 class EleTkIsolFromCands {
0047 public:
0048 struct TrkCuts {
0049 float minPt;
0050 float minDR2;
0051 float maxDR2;
0052 float minDEta;
0053 float maxDZ;
0054 float minHits;
0055 float minPixelHits;
0056 float maxDPtPt;
0057 std::vector<reco::TrackBase::TrackQuality> allowedQualities;
0058 std::vector<reco::TrackBase::TrackAlgorithm> algosToReject;
0059 explicit TrkCuts(const edm::ParameterSet& para);
0060 static edm::ParameterSetDescription pSetDescript();
0061 };
0062
0063 struct Configuration {
0064 explicit Configuration(const edm::ParameterSet& para)
0065 : barrelCuts(para.getParameter<edm::ParameterSet>("barrelCuts")),
0066 endcapCuts(para.getParameter<edm::ParameterSet>("endcapCuts")) {}
0067 const TrkCuts barrelCuts;
0068 const TrkCuts endcapCuts;
0069 };
0070
0071 enum class PIDVeto {
0072 NONE = 0,
0073 ELES,
0074 NONELES,
0075 };
0076
0077 explicit EleTkIsolFromCands(Configuration const& cfg, reco::TrackCollection const& tracks)
0078 : cfg_{cfg}, tracks_{&tracks} {}
0079 explicit EleTkIsolFromCands(Configuration const& cfg,
0080 pat::PackedCandidateCollection const& cands,
0081 PIDVeto pidVeto = PIDVeto::NONE)
0082 : cfg_{cfg}, cands_{&cands}, pidVeto_{pidVeto} {}
0083
0084 static edm::ParameterSetDescription pSetDescript();
0085
0086 static PIDVeto pidVetoFromStr(const std::string& vetoStr);
0087
0088 struct Output {
0089 const int nTracks;
0090 const float ptSum;
0091 };
0092
0093 Output operator()(const reco::TrackBase& electronTrack);
0094
0095 private:
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106 using TrackTable = edm::soa::Table<edm::soa::col::Pt, edm::soa::col::Eta, edm::soa::col::Phi, edm::soa::col::Vz>;
0107
0108 static bool passPIDVeto(const int pdgId, const EleTkIsolFromCands::PIDVeto pidVeto);
0109
0110 static TrackTable preselectTracks(reco::TrackCollection const& tracks, TrkCuts const& cuts);
0111 static TrackTable preselectTracksFromCands(pat::PackedCandidateCollection const& cands,
0112 TrkCuts const& cuts,
0113 PIDVeto = PIDVeto::NONE);
0114
0115 static bool passTrackPreselection(const reco::TrackBase& trk, float trkPt, const TrkCuts& cuts);
0116
0117
0118 static bool passQual(const reco::TrackBase& trk, const std::vector<reco::TrackBase::TrackQuality>& quals);
0119 static bool passAlgo(const reco::TrackBase& trk, const std::vector<reco::TrackBase::TrackAlgorithm>& algosToRej);
0120
0121 TrackTable const& getPreselectedTracks(bool isBarrel);
0122
0123 Configuration const& cfg_;
0124
0125
0126 reco::TrackCollection const* tracks_ = nullptr;
0127 pat::PackedCandidateCollection const* cands_ = nullptr;
0128 const PIDVeto pidVeto_ = PIDVeto::NONE;
0129 TrackTable preselectedTracksWithBarrelCuts_;
0130 TrackTable preselectedTracksWithEndcapCuts_;
0131 bool tracksCachedForBarrelCuts_ = false;
0132 bool tracksCachedForEndcapCuts_ = false;
0133 };
0134
0135 #endif