#ifndef ALIMUONRECOCHECK_H
#define ALIMUONRECOCHECK_H
#include <TObject.h>
class TClonesArray;
class TFile;
class TTree;
class AliESDEvent;
class AliMCEventHandler;
class AliMUONVTrackStore;
class AliMUONVTriggerTrackStore;
class AliMUONTrack;
class AliMUONTrackParam;
class AliMUONTriggerTrack;
class AliMUONGeometryTransformer;
class AliMUONTriggerCircuit;
class AliMUONLocalTrigger;
class AliMUONCalibrationData;
class AliMUONTriggerElectronics;
class AliMUONRecoCheck : public TObject
{
public:
AliMUONRecoCheck(const Char_t *chLoader, const Char_t *pathSim = "./");
AliMUONRecoCheck(AliESDEvent *esdEvent, AliMCEventHandler *mcEventHandler);
virtual ~AliMUONRecoCheck();
AliMUONVTrackStore* ReconstructedTracks(Int_t event, Bool_t refit = kTRUE);
AliMUONVTriggerTrackStore* TriggeredTracks(Int_t event);
Bool_t TriggerToTrack(const AliMUONLocalTrigger& locTrg, AliMUONTriggerTrack& triggerTrack);
AliMUONVTrackStore* TrackRefs(Int_t event);
AliMUONVTriggerTrackStore* TriggerableTracks(Int_t event);
AliMUONVTrackStore* ReconstructibleTracks(Int_t event, UInt_t requestedStationMask = 0x1F,
Bool_t request2ChInSameSt45 = kTRUE,
Bool_t hitInFrontOfPad = kFALSE);
Int_t GetRunNumber();
Int_t NumberOfEvents() const;
const AliESDEvent* GetESDEvent() const { return fESDEvent; }
const AliMCEventHandler* GetMCEventHandler() const { return fMCEventHandler; }
static AliMUONTrack* FindCompatibleTrack(AliMUONTrack &track, AliMUONVTrackStore &trackStore,
Int_t &nMatchClusters, Bool_t useLabel = kFALSE,
Double_t sigmaCut = 10.);
static AliMUONTriggerTrack* FindCompatibleTrack(AliMUONTriggerTrack &track,
const AliMUONVTriggerTrackStore &triggerTrackStore,
Double_t sigmaCut = 10.);
private:
AliMUONRecoCheck(const AliMUONRecoCheck& rhs);
AliMUONRecoCheck& operator = (const AliMUONRecoCheck& rhs);
void ResetStores();
void MakeReconstructedTracks(Bool_t refit);
void MakeTriggeredTracks();
void MakeTrackRefs();
void CleanMuonTrackRef(const AliMUONVTrackStore *tmpTrackRefStore);
void MakeReconstructibleTracks(UInt_t requestedStationMask, Bool_t request2ChInSameSt45 = kTRUE,
Bool_t hitInFrontOfPad = kFALSE);
void MakeTriggerableTracks();
Bool_t InitCircuit();
Bool_t InitTriggerResponse();
Bool_t InitCalibrationData();
Bool_t InitGeometryTransformer();
Bool_t IsHitInFrontOfPad(AliMUONTrackParam *param) const;
private:
AliMCEventHandler* fMCEventHandler;
AliESDEvent* fESDEvent;
TTree* fESDTree;
TFile* fESDFile;
Int_t fCurrentEvent;
AliMUONVTrackStore* fTrackRefStore;
AliMUONVTrackStore* fRecoTrackRefStore;
AliMUONVTriggerTrackStore* fRecoTriggerRefStore;
AliMUONVTrackStore* fRecoTrackStore;
AliMUONVTriggerTrackStore* fRecoTriggerTrackStore;
AliMUONGeometryTransformer* fGeometryTransformer;
AliMUONTriggerCircuit* fTriggerCircuit;
AliMUONCalibrationData* fCalibrationData;
AliMUONTriggerElectronics* fTriggerElectronics;
Bool_t fESDEventOwner;
ClassDef(AliMUONRecoCheck, 0)
};
#endif