#ifndef AliAODJet_H
#define AliAODJet_H
#include <TLorentzVector.h>
#include "AliVParticle.h"
#include <TArrayI.h>
#include "AliAODVertex.h"
class AliAODJet : public AliVParticle {
public:
AliAODJet();
AliAODJet(Double_t px, Double_t py, Double_t pz, Double_t e);
AliAODJet(TLorentzVector & p);
virtual ~AliAODJet();
AliAODJet(const AliAODJet& jet);
AliAODJet& operator=(const AliAODJet& jet);
virtual Double_t Px() const { return fMomentum->Px(); }
virtual Double_t Py() const { return fMomentum->Py(); }
virtual Double_t Pz() const { return fMomentum->Pz(); }
virtual Double_t Pt() const { return fMomentum->Pt(); }
virtual Double_t P() const { return fMomentum->P(); }
virtual Double_t OneOverPt() const { return 1. / fMomentum->Pt(); }
virtual Bool_t PxPyPz(Double_t p[3]) const { p[0] = Px(); p[1] = Py(); p[2] = Pz(); return kTRUE; }
virtual Double_t Phi() const;
virtual Double_t Theta() const { return fMomentum->Theta(); }
virtual Double_t E() const { return fMomentum->E(); }
virtual Double_t M() const { return fMomentum->M(); }
virtual Double_t Eta() const { return fMomentum->Eta(); }
virtual Double_t Y() const { return fMomentum->Rapidity();}
virtual Double_t Xv() const {return -999.;}
virtual Double_t Yv() const {return -999.;}
virtual Double_t Zv() const {return -999.;}
virtual Bool_t XvYvZv(Double_t x[3]) const { x[0] = Xv(); x[1] = Yv(); x[2] = Zv(); return kTRUE; }
virtual Bool_t IsTriggeredEMCAL(){return (fTrigger&kEMCALTriggered)==kEMCALTriggered;}
virtual Bool_t IsTriggeredTRD(){return (fTrigger&kTRDTriggered)==kTRDTriggered;}
virtual UInt_t Trigger(){return fTrigger;}
virtual void AddTrack(TObject *tr);
TObject* GetTrack(Int_t i) {return fRefTracks->At(i);}
virtual void SetPtSubtracted(Double_t ptCh, Double_t ptN){
fPtSubtracted[0] = ptCh;
fPtSubtracted[1] = ptN;
}
virtual Double_t GetPtSubtracted(Int_t i){return (i<2?fPtSubtracted[i]:0);}
virtual void SetBgEnergy(Double_t bgEnCh, Double_t bgEnNe)
{fBackgEnergy[0] = bgEnCh; fBackgEnergy[1] = bgEnNe;}
virtual void SetEffArea(Double_t effACh, Double_t effANe, Double_t effAErrCh = 0, Double_t effAErrNe = 0)
{
fEffectiveArea[0] = effACh; fEffectiveArea[1] = effANe;
fEffectiveAreaError[0] = effAErrCh;
fEffectiveAreaError[1] = effAErrNe;
}
virtual void SetPxPyPzE(Double_t px, Double_t py, Double_t pz, Double_t e);
virtual void SetPtEtaPhiM(Double_t pt, Double_t eta, Double_t phi, Double_t m);
virtual void SetTrigger(UInt_t f){fTrigger |= f;}
virtual void ResetTrigger(UInt_t f){fTrigger &= ~f;}
virtual void SetNEF(Double_t nef) {fNeutralFraction=nef;}
virtual Double_t GetNEF() const {return fNeutralFraction;}
virtual TRefArray* GetRefTracks() const { return fRefTracks;}
virtual Double_t ChargedBgEnergy() const { return fBackgEnergy[0];}
virtual Double_t NeutralBgEnergy() const { return fBackgEnergy[1];}
virtual Double_t TotalBgEnergy() const { return (fBackgEnergy[0] + fBackgEnergy[1]);}
virtual Double_t EffectiveAreaCharged() const { return fEffectiveArea[0];}
virtual Double_t EffectiveAreaNeutral() const { return fEffectiveArea[1];}
virtual void SetVectorAreaCharged(TLorentzVector *effVACh){
if(!fVectorAreaCharged)fVectorAreaCharged= new TLorentzVector(*effVACh);
else *fVectorAreaCharged = *effVACh;
}
virtual TLorentzVector* VectorAreaCharged() const {return fVectorAreaCharged;}
virtual Double_t ErrorEffectiveAreaCharged() const { return fEffectiveAreaError[0];}
virtual Double_t ErrorEffectiveAreaNeutral() const { return fEffectiveAreaError[1];}
virtual Double_t DeltaR(const AliVParticle* part) const;
TLorentzVector* MomentumVector() const {return fMomentum;}
virtual void SetPtLeading(Double_t pt) {fPtLeadingConstituent=pt;}
virtual Double_t GetPtLeading() const { return fPtLeadingConstituent;}
virtual void Print(Option_t* option) const;
virtual Short_t Charge() const { return 0;}
virtual const Double_t* PID() const { return NULL;}
virtual Int_t GetLabel() const { return -1;}
virtual Int_t PdgCode() const {return 0;}
enum {kEMCALTriggered = 1<<0,
kTRDTriggered = 1<<2,
kHighTrackPtTriggered = 1<<7,
kHighTrackPtBest = 1<<8
};
private:
Double32_t fBackgEnergy[2];
Double32_t fEffectiveArea[2];
Double32_t fEffectiveAreaError[2];
Double32_t fNeutralFraction;
Double32_t fPtSubtracted[2];
Double32_t fPtLeadingConstituent;
UInt_t fTrigger;
TLorentzVector* fMomentum;
TLorentzVector* fVectorAreaCharged;
TRefArray* fRefTracks;
ClassDef(AliAODJet,14);
};
inline Double_t AliAODJet::Phi() const
{
Double_t phi = fMomentum->Phi();
if (phi < 0.) phi += 2. * TMath::Pi();
return phi;
}
#endif