#ifndef ALIPERFORMANCEDCA_H
#define ALIPERFORMANCEDCA_H
class AliESDEvent;
class AliESDfriend;
class AliStack;
class AliRecInfoCuts;
class AliMCInfoCuts;
class AliESDVertex;
class AliESDtrack;
class TH3;
class TH2;
class TH1;
class TString;
class TNamed;
#include "THnSparse.h"
#include "AliPerformanceObject.h"
class AliPerformanceDCA : public AliPerformanceObject {
public :
AliPerformanceDCA(const Char_t* name="AliPerformanceDCA", const Char_t* title="AliPerformanceDCA",Int_t analysisMode=0, Bool_t hptGenerator=kFALSE);
virtual ~AliPerformanceDCA();
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;}
TFolder *CreateFolder(TString folder = "folderDCA",TString title = "Analysed DCA histograms");
TFolder *ExportToFolder(TObjArray * array=0);
void ProcessConstrained(AliStack* const stack, AliESDtrack *const esdTrack);
void ProcessTPC(AliStack* const stack, AliESDtrack *const esdTrack, AliESDEvent* const esdEvent);
void ProcessTPCITS(AliStack* const stack, AliESDtrack *const esdTrack, AliESDEvent* const esdEvent);
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;}
THnSparse* GetDCAHisto() const {return fDCAHisto;}
TH1F* MakeStat1D(TH2 *hist, Int_t delta1, Int_t type);
TH2F* MakeStat2D(TH3 *hist, Int_t delta0, Int_t delta1, Int_t type);
private:
THnSparseF *fDCAHisto;
AliRecInfoCuts* fCutsRC;
AliMCInfoCuts* fCutsMC;
TFolder *fAnalysisFolder;
AliPerformanceDCA(const AliPerformanceDCA&);
AliPerformanceDCA& operator=(const AliPerformanceDCA&);
ClassDef(AliPerformanceDCA,1);
};
#endif