00001 #ifndef JetReco_PFJet_h
00002 #define JetReco_PFJet_h
00003
00017 #include "DataFormats/JetReco/interface/Jet.h"
00018 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h"
00019 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h"
00020 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00021
00022 namespace reco {
00023 class PFJet : public Jet {
00024 public:
00025 struct Specific {
00026 Specific () :
00027 mChargedHadronEnergy (0),
00028 mNeutralHadronEnergy (0),
00029 mChargedEmEnergy (0),
00030 mChargedMuEnergy (0),
00031 mNeutralEmEnergy (0),
00032 mChargedMultiplicity (0),
00033 mNeutralMultiplicity (0),
00034 mMuonMultiplicity (0)
00035 {}
00036 float mChargedHadronEnergy;
00037 float mNeutralHadronEnergy;
00038 float mChargedEmEnergy;
00039 float mChargedMuEnergy;
00040 float mNeutralEmEnergy;
00041 int mChargedMultiplicity;
00042 int mNeutralMultiplicity;
00043 int mMuonMultiplicity;
00044 };
00045
00047 PFJet() {}
00048
00050 PFJet(const LorentzVector& fP4, const Point& fVertex, const Specific& fSpecific,
00051 const Jet::Constituents& fConstituents);
00052
00053 PFJet(const LorentzVector& fP4, const Point& fVertex, const Specific& fSpecific);
00054
00056 PFJet(const LorentzVector& fP4, const Specific& fSpecific,
00057 const Jet::Constituents& fConstituents);
00058
00059
00060 virtual ~PFJet() {};
00061
00063 float chargedHadronEnergy () const {return m_specific.mChargedHadronEnergy;}
00065 float chargedHadronEnergyFraction () const {return chargedHadronEnergy () / energy ();}
00067 float neutralHadronEnergy () const {return m_specific.mNeutralHadronEnergy;}
00069 float neutralHadronEnergyFraction () const {return neutralHadronEnergy () / energy ();}
00071 float chargedEmEnergy () const {return m_specific.mChargedEmEnergy;}
00073 float chargedEmEnergyFraction () const {return chargedEmEnergy () / energy ();}
00075 float chargedMuEnergy () const {return m_specific.mChargedMuEnergy;}
00077 float chargedMuEnergyFraction () const {return chargedMuEnergy () / energy ();}
00079 float neutralEmEnergy () const {return m_specific.mNeutralEmEnergy;}
00081 float neutralEmEnergyFraction () const {return neutralEmEnergy () / energy ();}
00083 int chargedMultiplicity () const {return m_specific.mChargedMultiplicity;}
00085 int neutralMultiplicity () const {return m_specific.mNeutralMultiplicity;}
00087 int muonMultiplicity () const {return m_specific.mMuonMultiplicity;}
00088
00089
00091 static const reco::PFCandidate* getPFCandidate (const reco::Candidate* fConstituent);
00092
00094 virtual const reco::PFCandidate* getPFConstituent (unsigned fIndex) const;
00095
00097 virtual std::vector <const reco::PFCandidate*> getPFConstituents () const;
00098
00102 reco::TrackRefVector getTrackRefs() const;
00103
00104
00105
00106 const Specific& getSpecific () const {return m_specific;}
00107
00109 virtual PFJet* clone () const;
00110
00112 virtual std::string print () const;
00113
00114 friend std::ostream& operator<<(std::ostream& out, const reco::PFJet& jet);
00115
00116 private:
00118 virtual bool overlap( const Candidate & ) const;
00119
00120
00121 Specific m_specific;
00122 };
00123 }
00124
00125 #include "DataFormats/JetReco/interface/PFJetCollection.h"
00126 #endif