![]() |
![]() |
00001 // 00002 // $Id: Tau.h,v 1.27.10.1 2011/03/15 21:19:05 rwolf Exp $ 00003 // 00004 00005 #ifndef DataFormats_PatCandidates_Tau_h 00006 #define DataFormats_PatCandidates_Tau_h 00007 00024 #include "DataFormats/TauReco/interface/BaseTau.h" 00025 #include "DataFormats/TrackReco/interface/Track.h" 00026 #include "DataFormats/PatCandidates/interface/Lepton.h" 00027 #include "DataFormats/JetReco/interface/GenJetCollection.h" 00028 00029 #include "DataFormats/Common/interface/BoolCache.h" 00030 00031 #include "DataFormats/PatCandidates/interface/TauPFSpecific.h" 00032 #include "DataFormats/PatCandidates/interface/TauCaloSpecific.h" 00033 00034 00035 // Define typedefs for convenience 00036 namespace pat { 00037 class Tau; 00038 typedef std::vector<Tau> TauCollection; 00039 typedef edm::Ref<TauCollection> TauRef; 00040 typedef edm::RefVector<TauCollection> TauRefVector; 00041 } 00042 00043 00044 // Class definition 00045 namespace pat { 00046 00047 class Tau : public Lepton<reco::BaseTau> { 00048 00049 public: 00050 00051 typedef std::pair<std::string,float> IdPair; 00052 00054 Tau(); 00056 Tau(const reco::BaseTau & aTau); 00058 Tau(const edm::RefToBase<reco::BaseTau> & aTauRef); 00060 Tau(const edm::Ptr<reco::BaseTau> & aTauRef); 00062 virtual ~Tau(); 00063 00065 virtual Tau * clone() const { return new Tau(*this); } 00066 00067 // ---- methods for content embedding ---- 00069 const reco::TrackRefVector & isolationTracks() const; 00071 reco::TrackRef leadTrack() const; 00073 const reco::TrackRefVector & signalTracks() const; 00075 void embedIsolationTracks(); 00077 void embedLeadTrack(); 00079 void embedSignalTracks(); 00082 void embedLeadPFCand(); 00084 void embedLeadPFChargedHadrCand(); 00086 void embedLeadPFNeutralCand(); 00088 void embedSignalPFCands(); 00090 void embedSignalPFChargedHadrCands(); 00092 void embedSignalPFNeutralHadrCands(); 00094 void embedSignalPFGammaCands(); 00096 void embedIsolationPFCands(); 00098 void embedIsolationPFChargedHadrCands(); 00100 void embedIsolationPFNeutralHadrCands(); 00102 void embedIsolationPFGammaCands(); 00103 00104 // ---- matched GenJet methods ---- 00106 const reco::GenJet * genJet() const; 00108 void setGenJet(const reco::GenJetRef & ref); 00109 00110 // ---- CaloTau accessors (getters only) ---- 00112 bool isCaloTau() const { return !caloSpecific_.empty(); } 00114 const pat::tau::TauCaloSpecific & caloSpecific() const ; 00117 reco::CaloTauTagInfoRef caloTauTagInfoRef() const { return caloSpecific().CaloTauTagInfoRef_; } 00120 float leadTracksignedSipt() const { return caloSpecific().leadTracksignedSipt_; } 00123 float leadTrackHCAL3x3hitsEtSum() const { return caloSpecific().leadTrackHCAL3x3hitsEtSum_; } 00126 float leadTrackHCAL3x3hottesthitDEta() const { return caloSpecific().leadTrackHCAL3x3hottesthitDEta_; } 00129 float signalTracksInvariantMass() const { return caloSpecific().signalTracksInvariantMass_; } 00132 float TracksInvariantMass() const { return caloSpecific().TracksInvariantMass_; } 00135 float isolationTracksPtSum() const { return caloSpecific().isolationTracksPtSum_; } 00138 float isolationECALhitsEtSum() const { return caloSpecific().isolationECALhitsEtSum_; } 00141 float maximumHCALhitEt() const { return caloSpecific().maximumHCALhitEt_; } 00142 00143 // ---- PFTau accessors (getters only) ---- 00145 bool isPFTau() const { return !pfSpecific_.empty(); } 00147 const pat::tau::TauPFSpecific & pfSpecific() const ; 00153 const reco::PFCandidateRef leadPFChargedHadrCand() const; 00156 float leadPFChargedHadrCandsignedSipt() const { return pfSpecific().leadPFChargedHadrCandsignedSipt_; } 00159 const reco::PFCandidateRef leadPFNeutralCand() const; 00162 const reco::PFCandidateRef leadPFCand() const; 00165 const reco::PFCandidateRefVector & signalPFCands() const; 00168 const reco::PFCandidateRefVector & signalPFChargedHadrCands() const; 00171 const reco::PFCandidateRefVector & signalPFNeutrHadrCands() const; 00174 const reco::PFCandidateRefVector & signalPFGammaCands() const; 00177 const reco::PFCandidateRefVector & isolationPFCands() const; 00180 const reco::PFCandidateRefVector & isolationPFChargedHadrCands() const; 00183 const reco::PFCandidateRefVector & isolationPFNeutrHadrCands() const; 00186 const reco::PFCandidateRefVector & isolationPFGammaCands() const; 00189 float isolationPFChargedHadrCandsPtSum() const { return pfSpecific().isolationPFChargedHadrCandsPtSum_; } 00192 float isolationPFGammaCandsEtSum() const { return pfSpecific().isolationPFGammaCandsEtSum_; } 00195 float maximumHCALPFClusterEt() const { return pfSpecific().maximumHCALPFClusterEt_; } 00198 float emFraction() const { return pfSpecific().emFraction_; } 00201 float hcalTotOverPLead() const { return pfSpecific().hcalTotOverPLead_; } 00204 float hcalMaxOverPLead() const { return pfSpecific().hcalMaxOverPLead_; } 00207 float hcal3x3OverPLead() const { return pfSpecific().hcal3x3OverPLead_; } 00210 float ecalStripSumEOverPLead() const { return pfSpecific().ecalStripSumEOverPLead_; } 00213 float bremsRecoveryEOverPLead() const { return pfSpecific().bremsRecoveryEOverPLead_; } 00216 const reco::TrackRef & electronPreIDTrack() const { return pfSpecific().electronPreIDTrack_; } 00219 float electronPreIDOutput() const { return pfSpecific().electronPreIDOutput_; } 00222 bool electronPreIDDecision() const { return pfSpecific().electronPreIDDecision_; } 00225 float caloComp() const { return pfSpecific().caloComp_; } 00228 float segComp() const { return pfSpecific().segComp_; } 00231 bool muonDecision() const { return pfSpecific().muonDecision_; } 00232 00235 float etaetaMoment() const; 00236 float phiphiMoment() const; 00237 float etaphiMoment() const; 00238 00240 int decayMode() const { return pfSpecific().decayMode_; } 00242 void setDecayMode(int); 00243 00244 // ---- methods for tau ID ---- 00250 float tauID(const std::string & name) const; 00252 bool isTauIDAvailable(const std::string & name) const; 00255 const std::vector<IdPair> & tauIDs() const { return tauIDs_; } 00258 void setTauIDs(const std::vector<IdPair> & ids) { tauIDs_ = ids; } 00259 00260 protected: 00261 00262 // ---- for content embedding ---- 00263 bool embeddedIsolationTracks_; 00264 std::vector<reco::Track> isolationTracks_; 00265 mutable reco::TrackRefVector isolationTracksTransientRefVector_; 00266 mutable edm::BoolCache isolationTracksTransientRefVectorFixed_; 00267 bool embeddedLeadTrack_; 00268 std::vector<reco::Track> leadTrack_; 00269 bool embeddedSignalTracks_; 00270 std::vector<reco::Track> signalTracks_; 00271 mutable reco::TrackRefVector signalTracksTransientRefVector_; 00272 mutable edm::BoolCache signalTracksTransientRefVectorFixed_; 00273 // specific for PFTau 00274 std::vector<reco::PFCandidate> leadPFCand_; 00275 bool embeddedLeadPFCand_; 00276 std::vector<reco::PFCandidate> leadPFChargedHadrCand_; 00277 bool embeddedLeadPFChargedHadrCand_; 00278 std::vector<reco::PFCandidate> leadPFNeutralCand_; 00279 bool embeddedLeadPFNeutralCand_; 00280 00281 std::vector<reco::PFCandidate> signalPFCands_; 00282 bool embeddedSignalPFCands_; 00283 mutable reco::PFCandidateRefVector signalPFCandsTransientRefVector_; 00284 mutable edm::BoolCache signalPFCandsRefVectorFixed_; 00285 std::vector<reco::PFCandidate> signalPFChargedHadrCands_; 00286 bool embeddedSignalPFChargedHadrCands_; 00287 mutable reco::PFCandidateRefVector signalPFChargedHadrCandsTransientRefVector_; 00288 mutable edm::BoolCache signalPFChargedHadrCandsRefVectorFixed_; 00289 std::vector<reco::PFCandidate> signalPFNeutralHadrCands_; 00290 bool embeddedSignalPFNeutralHadrCands_; 00291 mutable reco::PFCandidateRefVector signalPFNeutralHadrCandsTransientRefVector_; 00292 mutable edm::BoolCache signalPFNeutralHadrCandsRefVectorFixed_; 00293 std::vector<reco::PFCandidate> signalPFGammaCands_; 00294 bool embeddedSignalPFGammaCands_; 00295 mutable reco::PFCandidateRefVector signalPFGammaCandsTransientRefVector_; 00296 mutable edm::BoolCache signalPFGammaCandsRefVectorFixed_; 00297 std::vector<reco::PFCandidate> isolationPFCands_; 00298 bool embeddedIsolationPFCands_; 00299 mutable reco::PFCandidateRefVector isolationPFCandsTransientRefVector_; 00300 mutable edm::BoolCache isolationPFCandsRefVectorFixed_; 00301 std::vector<reco::PFCandidate> isolationPFChargedHadrCands_; 00302 bool embeddedIsolationPFChargedHadrCands_; 00303 mutable reco::PFCandidateRefVector isolationPFChargedHadrCandsTransientRefVector_; 00304 mutable edm::BoolCache isolationPFChargedHadrCandsRefVectorFixed_; 00305 std::vector<reco::PFCandidate> isolationPFNeutralHadrCands_; 00306 bool embeddedIsolationPFNeutralHadrCands_; 00307 mutable reco::PFCandidateRefVector isolationPFNeutralHadrCandsTransientRefVector_; 00308 mutable edm::BoolCache isolationPFNeutralHadrCandsRefVectorFixed_; 00309 std::vector<reco::PFCandidate> isolationPFGammaCands_; 00310 bool embeddedIsolationPFGammaCands_; 00311 mutable reco::PFCandidateRefVector isolationPFGammaCandsTransientRefVector_; 00312 mutable edm::BoolCache isolationPFGammaCandsRefVectorFixed_; 00313 00314 // ---- matched GenJet holder ---- 00315 std::vector<reco::GenJet> genJet_; 00316 // ---- tau ID's holder ---- 00317 std::vector<IdPair> tauIDs_; 00318 // ---- CaloTau specific variables ---- 00320 std::vector<pat::tau::TauCaloSpecific> caloSpecific_; 00321 // ---- PFTau specific variables ---- 00323 std::vector<pat::tau::TauPFSpecific> pfSpecific_; 00324 }; 00325 } 00326 00327 #endif