File indexing completed on 2024-09-07 04:35:57
0001 #ifndef DataFormats_TauReco_PFTau_h
0002 #define DataFormats_TauReco_PFTau_h
0003
0004
0005
0006
0007
0008
0009
0010
0011 #include "DataFormats/Math/interface/LorentzVector.h"
0012 #include "DataFormats/Common/interface/AtomicPtrCache.h"
0013 #include "DataFormats/TauReco/interface/BaseTau.h"
0014 #include "DataFormats/TauReco/interface/PFTauFwd.h"
0015 #include "DataFormats/TauReco/interface/PFTauTagInfo.h"
0016 #include "DataFormats/JetReco/interface/JetCollection.h"
0017 #include "DataFormats/Candidate/interface/Candidate.h"
0018 #include "DataFormats/Candidate/interface/CandidateFwd.h"
0019 #include "DataFormats/TauReco/interface/RecoTauPiZero.h"
0020 #include "DataFormats/TauReco/interface/RecoTauPiZeroFwd.h"
0021 #include "DataFormats/TauReco/interface/PFRecoTauChargedHadron.h"
0022 #include "DataFormats/TauReco/interface/PFRecoTauChargedHadronFwd.h"
0023
0024 #include <iostream>
0025 #include <limits>
0026
0027 namespace reco {
0028 namespace tau {
0029 class RecoTauConstructor;
0030 class PFRecoTauEnergyAlgorithmPlugin;
0031 }
0032 }
0033
0034 namespace reco {
0035
0036 class PFTau : public BaseTau {
0037 public:
0038 enum hadronicDecayMode {
0039 kNull = -1,
0040 kOneProng0PiZero,
0041 kOneProng1PiZero,
0042 kOneProng2PiZero,
0043 kOneProng3PiZero,
0044 kOneProngNPiZero,
0045 kTwoProng0PiZero,
0046 kTwoProng1PiZero,
0047 kTwoProng2PiZero,
0048 kTwoProng3PiZero,
0049 kTwoProngNPiZero,
0050 kThreeProng0PiZero,
0051 kThreeProng1PiZero,
0052 kThreeProng2PiZero,
0053 kThreeProng3PiZero,
0054 kThreeProngNPiZero,
0055 kRareDecayMode
0056 };
0057
0058 PFTau();
0059 PFTau(Charge q, const LorentzVector&, const Point& = Point(0, 0, 0));
0060 ~PFTau() override {}
0061 PFTau* clone() const override;
0062
0063 const JetBaseRef& jetRef() const;
0064 void setjetRef(const JetBaseRef&);
0065
0066
0067 const PFTauTagInfoRef& pfTauTagInfoRef() const;
0068 void setpfTauTagInfoRef(const PFTauTagInfoRef);
0069
0070 PFRecoTauChargedHadronRef leadTauChargedHadronCandidate() const;
0071 const CandidatePtr& leadChargedHadrCand() const;
0072 const CandidatePtr& leadNeutralCand() const;
0073
0074 const CandidatePtr& leadCand() const;
0075
0076 void setleadChargedHadrCand(const CandidatePtr&);
0077 void setleadNeutralCand(const CandidatePtr&);
0078 void setleadCand(const CandidatePtr&);
0079
0080
0081
0082 float leadPFChargedHadrCandsignedSipt() const;
0083 void setleadPFChargedHadrCandsignedSipt(const float&);
0084
0085
0086 const std::vector<reco::CandidatePtr>& signalCands() const;
0087 void setsignalCands(const std::vector<reco::CandidatePtr>&);
0088
0089
0090 const std::vector<reco::CandidatePtr>& signalChargedHadrCands() const;
0091 void setsignalChargedHadrCands(const std::vector<reco::CandidatePtr>&);
0092
0093
0094 const std::vector<reco::CandidatePtr>& signalNeutrHadrCands() const;
0095 void setsignalNeutrHadrCands(const std::vector<reco::CandidatePtr>&);
0096
0097
0098 const std::vector<reco::CandidatePtr>& signalGammaCands() const;
0099 void setsignalGammaCands(const std::vector<reco::CandidatePtr>&);
0100
0101
0102 const std::vector<reco::CandidatePtr>& isolationCands() const;
0103 void setisolationCands(const std::vector<reco::CandidatePtr>&);
0104
0105
0106 const std::vector<reco::CandidatePtr>& isolationChargedHadrCands() const;
0107 void setisolationChargedHadrCands(const std::vector<reco::CandidatePtr>&);
0108
0109
0110 const std::vector<reco::CandidatePtr>& isolationNeutrHadrCands() const;
0111 void setisolationNeutrHadrCands(const std::vector<reco::CandidatePtr>&);
0112
0113
0114 const std::vector<reco::CandidatePtr>& isolationGammaCands() const;
0115 void setisolationGammaCands(const std::vector<reco::CandidatePtr>&);
0116
0117
0118 const PFCandidatePtr leadPFChargedHadrCand() const;
0119 const PFCandidatePtr leadPFNeutralCand() const;
0120 const PFCandidatePtr leadPFCand() const;
0121 const std::vector<reco::PFCandidatePtr>& signalPFCands() const;
0122 const std::vector<reco::PFCandidatePtr>& signalPFChargedHadrCands() const;
0123 const std::vector<reco::PFCandidatePtr>& signalPFNeutrHadrCands() const;
0124 const std::vector<reco::PFCandidatePtr>& signalPFGammaCands() const;
0125 const std::vector<reco::PFCandidatePtr>& isolationPFCands() const;
0126 const std::vector<reco::PFCandidatePtr>& isolationPFChargedHadrCands() const;
0127 const std::vector<reco::PFCandidatePtr>& isolationPFNeutrHadrCands() const;
0128 const std::vector<reco::PFCandidatePtr>& isolationPFGammaCands() const;
0129
0130
0131
0132 float isolationPFChargedHadrCandsPtSum() const;
0133 void setisolationPFChargedHadrCandsPtSum(const float&);
0134
0135
0136
0137 float isolationPFGammaCandsEtSum() const;
0138 void setisolationPFGammaCandsEtSum(const float&);
0139
0140
0141 float maximumHCALPFClusterEt() const;
0142 void setmaximumHCALPFClusterEt(const float&);
0143
0144
0145 const std::vector<RecoTauPiZero>& signalPiZeroCandidates() const;
0146 void setsignalPiZeroCandidates(std::vector<RecoTauPiZero>);
0147 void setSignalPiZeroCandidatesRefs(RecoTauPiZeroRefVector);
0148
0149
0150 const std::vector<RecoTauPiZero>& isolationPiZeroCandidates() const;
0151 void setisolationPiZeroCandidates(std::vector<RecoTauPiZero>);
0152 void setIsolationPiZeroCandidatesRefs(RecoTauPiZeroRefVector);
0153
0154
0155 const std::vector<PFRecoTauChargedHadron>& signalTauChargedHadronCandidates() const;
0156 void setSignalTauChargedHadronCandidates(std::vector<PFRecoTauChargedHadron>);
0157 void setSignalTauChargedHadronCandidatesRefs(PFRecoTauChargedHadronRefVector);
0158
0159
0160 const std::vector<PFRecoTauChargedHadron>& isolationTauChargedHadronCandidates() const;
0161 void setIsolationTauChargedHadronCandidates(std::vector<PFRecoTauChargedHadron>);
0162 void setIsolationTauChargedHadronCandidatesRefs(PFRecoTauChargedHadronRefVector);
0163
0164
0165
0166 hadronicDecayMode decayMode() const;
0167 void setDecayMode(const hadronicDecayMode&);
0168
0169
0170 float bendCorrMass() const { return bendCorrMass_; }
0171 void setBendCorrMass(float bendCorrMass) { bendCorrMass_ = bendCorrMass; }
0172
0173
0174 double signalConeSize() const { return signalConeSize_; }
0175 void setSignalConeSize(double signalConeSize) { signalConeSize_ = signalConeSize; }
0176
0177
0178 float emFraction() const;
0179 float hcalTotOverPLead() const;
0180 float hcalMaxOverPLead() const;
0181
0182 float hcal3x3OverPLead() const;
0183 float ecalStripSumEOverPLead() const;
0184 float bremsRecoveryEOverPLead() const;
0185 reco::TrackRef electronPreIDTrack() const;
0186 float electronPreIDOutput() const;
0187 bool electronPreIDDecision() const;
0188
0189 void setemFraction(const float&);
0190 void sethcalTotOverPLead(const float&);
0191 void sethcalMaxOverPLead(const float&);
0192 void sethcal3x3OverPLead(const float&);
0193 void setecalStripSumEOverPLead(const float&);
0194 void setbremsRecoveryEOverPLead(const float&);
0195 void setelectronPreIDTrack(const reco::TrackRef&);
0196 void setelectronPreIDOutput(const float&);
0197 void setelectronPreIDDecision(const bool&);
0198
0199
0200 bool hasMuonReference() const;
0201 float caloComp() const;
0202 float segComp() const;
0203 bool muonDecision() const;
0204 void setCaloComp(const float&);
0205 void setSegComp(const float&);
0206 void setMuonDecision(const bool&);
0207
0208
0209
0210
0211
0212 size_type numberOfSourceCandidatePtrs() const override { return 1; }
0213
0214
0215
0216 CandidatePtr sourceCandidatePtr(size_type i) const override;
0217
0218
0219 void dump(std::ostream& out = std::cout) const;
0220
0221 private:
0222 friend class tau::RecoTauConstructor;
0223 friend class tau::PFRecoTauEnergyAlgorithmPlugin;
0224
0225
0226 std::vector<RecoTauPiZero>& signalPiZeroCandidatesRestricted();
0227 std::vector<RecoTauPiZero>& isolationPiZeroCandidatesRestricted();
0228 std::vector<PFRecoTauChargedHadron>& signalTauChargedHadronCandidatesRestricted();
0229 std::vector<PFRecoTauChargedHadron>& isolationTauChargedHadronCandidatesRestricted();
0230
0231
0232 bool overlap(const Candidate&) const override;
0233
0234 bool muonDecision_;
0235 bool electronPreIDDecision_;
0236
0237
0238 float leadPFChargedHadrCandsignedSipt_;
0239
0240 float isolationPFChargedHadrCandsPtSum_;
0241 float isolationPFGammaCandsEtSum_;
0242 float maximumHCALPFClusterEt_;
0243
0244
0245 float emFraction_;
0246 float hcalTotOverPLead_;
0247 float hcalMaxOverPLead_;
0248 float hcal3x3OverPLead_;
0249 float ecalStripSumEOverPLead_;
0250 float bremsRecoveryEOverPLead_;
0251 float electronPreIDOutput_;
0252
0253
0254 float caloComp_;
0255 float segComp_;
0256
0257 hadronicDecayMode decayMode_;
0258
0259 float bendCorrMass_;
0260
0261 float signalConeSize_;
0262
0263 reco::JetBaseRef jetRef_;
0264 PFTauTagInfoRef PFTauTagInfoRef_;
0265 reco::CandidatePtr leadChargedHadrCand_;
0266 reco::CandidatePtr leadNeutralCand_;
0267 reco::CandidatePtr leadCand_;
0268 reco::TrackRef electronPreIDTrack_;
0269
0270
0271 std::vector<reco::CandidatePtr> selectedSignalCands_;
0272 std::vector<reco::CandidatePtr> selectedSignalChargedHadrCands_;
0273 std::vector<reco::CandidatePtr> selectedSignalNeutrHadrCands_;
0274 std::vector<reco::CandidatePtr> selectedSignalGammaCands_;
0275
0276
0277 std::vector<reco::CandidatePtr> selectedIsolationCands_;
0278 std::vector<reco::CandidatePtr> selectedIsolationChargedHadrCands_;
0279 std::vector<reco::CandidatePtr> selectedIsolationNeutrHadrCands_;
0280 std::vector<reco::CandidatePtr> selectedIsolationGammaCands_;
0281
0282
0283 edm::AtomicPtrCache<reco::PFCandidatePtr> leadPFChargedHadrCand_;
0284 edm::AtomicPtrCache<reco::PFCandidatePtr> leadPFNeutralCand_;
0285 edm::AtomicPtrCache<reco::PFCandidatePtr> leadPFCand_;
0286
0287 edm::AtomicPtrCache<std::vector<reco::PFCandidatePtr>> selectedTransientSignalPFCands_;
0288 edm::AtomicPtrCache<std::vector<reco::PFCandidatePtr>> selectedTransientSignalPFChargedHadrCands_;
0289 edm::AtomicPtrCache<std::vector<reco::PFCandidatePtr>> selectedTransientSignalPFNeutrHadrCands_;
0290 edm::AtomicPtrCache<std::vector<reco::PFCandidatePtr>> selectedTransientSignalPFGammaCands_;
0291
0292 edm::AtomicPtrCache<std::vector<reco::PFCandidatePtr>> selectedTransientIsolationPFCands_;
0293 edm::AtomicPtrCache<std::vector<reco::PFCandidatePtr>> selectedTransientIsolationPFChargedHadrCands_;
0294 edm::AtomicPtrCache<std::vector<reco::PFCandidatePtr>> selectedTransientIsolationPFNeutrHadrCands_;
0295 edm::AtomicPtrCache<std::vector<reco::PFCandidatePtr>> selectedTransientIsolationPFGammaCands_;
0296
0297 RecoTauPiZeroRefVector signalPiZeroCandidatesRefs_;
0298 RecoTauPiZeroRefVector isolationPiZeroCandidatesRefs_;
0299
0300 PFRecoTauChargedHadronRefVector signalTauChargedHadronCandidatesRefs_;
0301 PFRecoTauChargedHadronRefVector isolationTauChargedHadronCandidatesRefs_;
0302
0303
0304 edm::AtomicPtrCache<std::vector<reco::RecoTauPiZero>> signalPiZeroCandidates_;
0305 edm::AtomicPtrCache<std::vector<reco::RecoTauPiZero>> isolationPiZeroCandidates_;
0306
0307
0308 edm::AtomicPtrCache<std::vector<reco::PFRecoTauChargedHadron>> signalTauChargedHadronCandidates_;
0309 edm::AtomicPtrCache<std::vector<reco::PFRecoTauChargedHadron>> isolationTauChargedHadronCandidates_;
0310 };
0311
0312 std::ostream& operator<<(std::ostream& out, const PFTau& c);
0313
0314 }
0315
0316 #endif