#ifndef ALIPERFORMANCERES_H
#define ALIPERFORMANCERES_H
class TString;
class TNamed;
class TCanvas;
class TH1F;
class TH2F;
class AliESDVertex;
class AliESDtrack;
class AliMCEvent;
class AliStack;
class AliTrackReference;
class AliESDEvent;
class AliESDfriend;
class AliESDfriendTrack;
class AliMCEvent;
class AliMCParticle;
class AliMCInfoCuts;
class AliRecInfoCuts;
#include "THnSparse.h"
#include "AliPerformanceObject.h"
class AliPerformanceRes : public AliPerformanceObject {
public :
AliPerformanceRes(const Char_t* name="AliPerformanceRes", const Char_t* title="AliPerformanceRes",Int_t analysisMode=0,Bool_t hptGenerator=kFALSE);
virtual ~AliPerformanceRes();
virtual void Init();
virtual void Exec(AliMCEvent* const mcEvent, AliESDEvent *const esdEvent, AliESDfriend *const esdFriend, const Bool_t bUseMC, const Bool_t bUseESDfriend);
virtual Long64_t Merge(TCollection* const list);
virtual void Analyse();
virtual TFolder* GetAnalysisFolder() const {return fAnalysisFolder;}
void ProcessConstrained(AliStack* const stack, AliESDtrack *const esdTrack, AliESDEvent* const esdEvent );
void ProcessTPC(AliStack* const stack, AliESDtrack *const esdTrack, AliESDEvent* const esdEvent);
void ProcessTPCITS(AliStack* const stack, AliESDtrack *const esdTrack, AliESDEvent* const esdEvent);
void ProcessInnerTPC(AliMCEvent *const mcEvent, AliESDtrack *const esdTrack, AliESDEvent* const esdEvent);
void ProcessOuterTPC(AliMCEvent *const mcEvent, AliESDtrack *const esdTrack, AliESDfriendTrack *const friendTrack, AliESDEvent* const esdEvent);
AliTrackReference *GetFirstTPCTrackRef(AliMCParticle *mcParticle);
AliTrackReference *GetLastTPCTrackRef(AliMCParticle *mcParticle);
TFolder *CreateFolder(TString folder = "folderRes",TString title = "Analysed Resolution histograms");
TFolder *ExportToFolder(TObjArray * array=0);
void SetAliRecInfoCuts(AliRecInfoCuts* const cuts=0) {fCutsRC = cuts;}
void SetAliMCInfoCuts(AliMCInfoCuts* const cuts=0) {fCutsMC = cuts;}
AliRecInfoCuts* GetAliRecInfoCuts() const {return fCutsRC;}
AliMCInfoCuts* GetAliMCInfoCuts() const {return fCutsMC;}
TH1F* MakeResol(TH2F * his, Int_t integ=0, Bool_t type=kFALSE, Int_t cut=0);
THnSparse *GetResolHisto() const { return fResolHisto; }
THnSparse *GetPullHisto() const { return fPullHisto; }
static void SetMergeEntriesCut(Double_t entriesCut){fgkMergeEntriesCut = entriesCut;}
private:
THnSparseF *fResolHisto;
THnSparseF *fPullHisto;
AliRecInfoCuts* fCutsRC;
AliMCInfoCuts* fCutsMC;
TFolder *fAnalysisFolder;
AliPerformanceRes(const AliPerformanceRes&);
AliPerformanceRes& operator=(const AliPerformanceRes&);
static Double_t fgkMergeEntriesCut;
ClassDef(AliPerformanceRes,1);
};
#endif