#ifndef HEP_HepJet
#define HEP_HepJet
#ifndef ROOT_TObject
#include <TObject.h>
#endif
#ifndef ROOT_TLorentzVector
#include <TLorentzVector.h>
#endif
class HepParticle;
class HepJet : public TObject {
protected:
Int_t fId;
TLorentzVector fP;
private:
Bool_t fCompute;
Float_t fEt;
Float_t fPt;
Float_t fTheta;
Float_t fCosTheta;
Float_t fPhi;
Float_t fEta;
public:
HepJet();
HepJet(Int_t Id, Float_t E, Float_t Px, Float_t Py, Float_t Pz);
virtual ~HepJet();
virtual void Clear(Option_t *option = "");
virtual Int_t Compare(const TObject *obj) const;
virtual void Print(Option_t *option = "");
static void PrintHeader();
static void PrintFooter();
Float_t DeltaPhi(HepParticle *prt) const;
Float_t DeltaPhi(HepJet *jet) const;
Float_t DeltaEta(HepParticle *prt);
Float_t DeltaEta(HepJet *jet);
Float_t DeltaR(HepParticle *prt);
Float_t DeltaR(HepJet *jet);
Float_t DeltaPtFrac(HepParticle *prt);
Float_t DeltaPtFrac(HepJet *jet);
Float_t DeltaEtFrac(HepParticle *prt);
Float_t DeltaEtFrac(HepJet *jet);
Float_t InvDeltaPtFrac(HepParticle *prt);
Double_t PtRel(HepParticle* prt);
inline virtual Bool_t IsSortable() const { return kTRUE; }
inline Int_t GetId() const { return fId; }
inline void SetId(Int_t Id) { fId = Id; }
inline const TLorentzVector& P() const {
return fP;
}
inline TVector3 P3() const {
return fP.Vect();
}
inline Float_t Et() {
if ( fCompute ) ComputeTransientVars();
return fEt;
}
inline Float_t Pt() {
if ( fCompute ) ComputeTransientVars();
return fPt;
}
inline Float_t Eta() {
if ( fCompute ) ComputeTransientVars();
return fEta;
}
inline Float_t Phi() {
if ( fCompute ) ComputeTransientVars();
return fPhi;
}
inline Float_t Theta() {
if ( fCompute ) ComputeTransientVars();
return fTheta;
}
inline Float_t CosTheta() {
if ( fCompute ) ComputeTransientVars();
return fCosTheta;
}
inline Float_t M() const {
return fP.M();
}
inline Float_t Px() const {
return fP.Px();
}
inline Float_t Py() const {
return fP.Py();
}
inline Float_t Pz() const {
return fP.Pz();
}
inline Float_t E() const {
return fP.E();
}
inline void SetPtEtaPhiE(Float_t Pt, Float_t Eta, Float_t Phi,
Float_t E) {
fP.SetPtEtaPhiE(Pt, Eta, Phi, E);
ComputeTransientVars();
}
void SetP(TLorentzVector const & p) {
fP = p;
ComputeTransientVars();
}
private:
void ComputeTransientVars();
ClassDef(HepJet,3)
};
#endif