#ifndef ALIESDTOFCLUSTER_H
#define ALIESDTOFCLUSTER_H
#include "TMath.h"
#include <AliVTOFcluster.h>
#include "AliESDTOFHit.h"
#include "AliESDTOFMatch.h"
class AliESDEvent;
class AliESDTOFCluster : public AliVTOFcluster {
public:
AliESDTOFCluster(Int_t id=-1);
AliESDTOFCluster(Int_t ,Int_t ,Float_t ,Float_t ,Float_t ,Int_t*,Int_t ,Int_t , Bool_t ,Float_t ,Float_t ,Float_t ,
Int_t ,Float_t ,Float_t ,Float_t ,Float_t ,Double_t*);
AliESDTOFCluster(Int_t ,Int_t ,Float_t ,Float_t ,Float_t t,Int_t*,Int_t ,Int_t ,
Bool_t ,Float_t ,Float_t ,Float_t );
AliESDTOFCluster(const AliESDTOFCluster & source);
AliESDTOFCluster & operator=(const AliESDTOFCluster & source);
virtual ~AliESDTOFCluster() {}
Int_t GetESDID() const {return GetUniqueID();}
void SetESDID(Int_t id) {SetUniqueID(id);}
Int_t GetID() const {return fID;}
void SetID(Int_t id) {fID = id;}
Int_t Update(Int_t trackIndex,Float_t dX,Float_t dY,Float_t dZ,Float_t length,Double_t expTimes[9]);
void SuppressMatchedTrack(Int_t id);
void ReplaceMatchedTrackID(int oldID, int newID);
void ReplaceMatchID(int oldID, int newID);
void ReplaceHitID(int oldID, int newID);
void FixSelfReferences(int oldID, int newID);
Int_t GetClusterIndex(Int_t ihit=0) const;
Int_t GetTOFchannel(Int_t ihit=0) const;
Float_t GetTime(Int_t ihit=0) const;
Float_t GetTimeRaw(Int_t ihit=0) const;
Float_t GetTOT(Int_t ihit=0) const;
Float_t GetTOFsignalToT(Int_t ihit=0) const;
Int_t GetLabel(Int_t i=0,Int_t ihit=0) const;
Int_t GetDeltaBC(Int_t ihit=0) const;
Int_t GetL0L1Latency(Int_t ihit=0) const;
Bool_t GetStatus() const;
Float_t GetZ() const;
Float_t GetPhi() const;
Float_t GetR() const;
Int_t GetNMatchableTracks() const;
Int_t GetNTOFhits() const;
Int_t GetTrackIndex(Int_t i=0) const;
Float_t GetDistanceInStripPlane(Int_t i=0) const;
Float_t GetDx(Int_t i=0) const;
Float_t GetDy(Int_t i=0) const;
Float_t GetDz(Int_t i=0) const;
Float_t GetLength(Int_t i=0) const;
Double_t GetIntegratedTime(Int_t iPart=0,Int_t i=0) const;
void SetStatus(Int_t status) {fStatus=status;};
void AddESDTOFHitIndex(Int_t hitID);
void AddTOFhit(Int_t ,Int_t ,Float_t ,Float_t ,Float_t ,Int_t*,Int_t ,Int_t , Bool_t ,Float_t ,Float_t ,Float_t );
void AddTOFhit(AliESDTOFHit *hit);
Int_t GetHitIndex(Int_t i) const {return fHitIndex[i];}
void SetHitIndex(Int_t i,Int_t index) {fHitIndex[i] = index;}
void Print(const Option_t *opt=0) const;
AliESDTOFHit* GetTOFHit(Int_t i) const;
AliESDTOFMatch* GetTOFMatch(Int_t i) const;
protected:
Int_t fID;
Char_t fNTOFhits;
Bool_t fStatus;
Char_t fNmatchableTracks;
Int_t fHitIndex[kMaxHits];
Int_t fMatchIndex[kMaxMatches];
ClassDef(AliESDTOFCluster, 2)
};
#endif