CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch9/src/DataFormats/PatCandidates/interface/Tau.h

Go to the documentation of this file.
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