#ifndef ALIJETCALTRK_H
#define ALIJETCALTRK_H
#include <Riostream.h>
#include <TObject.h>
#include <TRef.h>
#include <TClonesArray.h>
#include "AliVParticle.h"
#include "AliVTrack.h"
class AliVCaloCells;
class AliJetCalTrkTrack : public TObject
{
public:
AliJetCalTrkTrack();
AliJetCalTrkTrack(AliVParticle* track, Bool_t CutFlag, Bool_t SignalFlag, Float_t PtCorr = 1.);
AliJetCalTrkTrack(AliVTrack* track, Bool_t CutFlag, Bool_t SignalFlag, Float_t PtCorr = 1.);
virtual ~AliJetCalTrkTrack() {;}
void SetCutFlag(Bool_t cutFlag) {fCalTrkCutFlag = cutFlag;}
void SetSignalFlag(Bool_t signalFlag) {fCalTrkSignalFlag = signalFlag;}
void SetPtCorr(Float_t ptcorr) {fCalTrkPtCorr = ptcorr;}
AliVParticle* GetParticle() const {return ((AliVParticle*)fCalTrkTrackRef.GetObject());}
AliVTrack* GetTrack() const {return ((AliVTrack*)fCalTrkTrackRef.GetObject());}
TRef GetTrackRef() const {return fCalTrkTrackRef;}
TObject* GetTrackObject() const {return fCalTrkTrackRef.GetObject();}
Bool_t GetCutFlag() const {return fCalTrkCutFlag;}
Bool_t GetSignalFlag() const {return fCalTrkSignalFlag;}
Float_t GetPtCorr() const {return fCalTrkPtCorr;}
Float_t GetEta() const {return GetParticle()->Eta();}
Float_t GetPhi() const {return GetParticle()->Phi();}
virtual Float_t GetE() const {return GetParticle()->E();}
virtual Float_t GetPt() const {return GetParticle()->Pt();}
virtual Float_t GetPx() const {return GetParticle()->Px();}
virtual Float_t GetPy() const {return GetParticle()->Py();}
virtual Float_t GetPz() const {return GetParticle()->Pz();}
virtual Float_t GetP() const {return GetParticle()->P();}
Int_t GetID() const {return GetTrack()->GetID();}
Float_t GetM() const {return GetParticle()->M();}
void Print(const Option_t* ) const;
virtual void Clear(Option_t* );
private:
AliJetCalTrkTrack(const AliJetCalTrkTrack& rCalTrk);
AliJetCalTrkTrack& operator = (const AliJetCalTrkTrack& rhs);
TRef fCalTrkTrackRef;
Bool_t fCalTrkCutFlag;
Bool_t fCalTrkSignalFlag;
Float_t fCalTrkPtCorr;
ClassDef(AliJetCalTrkTrack,1)
};
class AliJetCalTrkTrackKine : public AliJetCalTrkTrack
{
public:
AliJetCalTrkTrackKine();
AliJetCalTrkTrackKine(AliVParticle* track, Bool_t CutFlag, Bool_t SignalFlag, Float_t ptReso);
virtual ~AliJetCalTrkTrackKine() {;}
Float_t GetPtReso() const {return fCalTrkPtReso;}
Float_t GetE() const {return fCalTrkTrackE;}
Float_t GetPt() const {return fCalTrkTrackPt;}
Float_t GetPx() const {return fCalTrkTrackPx;}
Float_t GetPy() const {return fCalTrkTrackPy;}
Float_t GetPz() const {return fCalTrkTrackPz;}
Float_t GetP() const {return fCalTrkTrackP;}
Float_t CalcPx() {fCalTrkTrackPx = GetPtReso()*GetParticle()->Px(); return fCalTrkTrackPx;}
Float_t CalcPy() {fCalTrkTrackPy = GetPtReso()*GetParticle()->Py(); return fCalTrkTrackPy;}
Float_t CalcPz() {fCalTrkTrackPz = GetPtReso()*GetParticle()->Pz(); return fCalTrkTrackPz;}
Float_t CalcP();
Float_t CalcPt();
Float_t CalcE();
void Clear(Option_t* option = "");
private:
Float_t fCalTrkPtReso;
Float_t fCalTrkTrackE;
Float_t fCalTrkTrackPt;
Float_t fCalTrkTrackP;
Float_t fCalTrkTrackPx;
Float_t fCalTrkTrackPy;
Float_t fCalTrkTrackPz;
ClassDef(AliJetCalTrkTrackKine,1)
};
class AliJetCalTrkEvent : public TObject
{
public:
AliJetCalTrkEvent();
AliJetCalTrkEvent(Short_t opt,Bool_t kine,Bool_t kIsHighMult=kFALSE);
virtual ~AliJetCalTrkEvent();
AliJetCalTrkEvent(const AliJetCalTrkEvent& rCalTrkEvent);
AliJetCalTrkTrack* AddCalTrkTrack(AliVTrack* track, Bool_t cutFlag, Bool_t signalFlag, Float_t ptCorr = 1.);
AliJetCalTrkTrack* AddCalTrkTrack(AliVParticle* track, Bool_t cutFlag, Bool_t signalFlag, Float_t ptCorr = 1.);
AliJetCalTrkTrackKine* AddCalTrkTrackKine(AliVParticle* track, Bool_t cutFlag, Bool_t signalFlag, Float_t ptReso = 1.);
AliJetCalTrkTrack* GetCalTrkTrack(Int_t i);
Int_t GetNCalTrkTracks() const {return fNJetCalTrkTrack;}
void Clear(Option_t* option = "");
void Print(const Option_t* = "") const;
private:
AliJetCalTrkEvent& operator = (const AliJetCalTrkEvent& rhs);
TClonesArray* fJetCalTrkTrack;
TClonesArray* fJetCalTrkCell;
Int_t fNJetCalTrkTrack;
ClassDef(AliJetCalTrkEvent,1)
};
#endif