#ifndef ALIDNDPTANALYSIS_H
#define ALIDNDPTANALYSIS_H
class iostream;
class TFile;
class TCint;
class TProfile;
class TFolder;
class TObjArray;
class TString;
class THnSparse;
class AliESDtrackCuts;
class AliVertexerTracks;
class AliESD;
class AliESDfriend;
class AliESDfriendTrack;
class AlidNdPtHelper;
#include "AlidNdPt.h"
class AlidNdPtAnalysis : public AlidNdPt {
public :
AlidNdPtAnalysis();
AlidNdPtAnalysis(Char_t* name, Char_t* title);
~AlidNdPtAnalysis();
virtual void Init();
virtual void Process(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0);
virtual Long64_t Merge(TCollection* const list);
virtual void Analyse();
virtual TFolder *ExportToFolder(TObjArray * const array=0);
TFolder* GetAnalysisFolder() const {return fAnalysisFolder;}
void SetHistogramsOn(const Bool_t histOn=kTRUE) {fHistogramsOn = histOn;}
Bool_t IsHistogramsOn() const {return fHistogramsOn;}
static Bool_t IsBinZeroSPDvtx(const AliESDEvent* esdEvent);
static Bool_t IsBinZeroTrackSPDvtx(const AliESDEvent* esdEvent);
TFolder *CreateFolder(TString folder = "folderdNdPtAnalysis",TString title = "Analysed dNdPt histograms");
void SetBinsMult(Int_t nbins, Double_t* edges) { fMultNbins = nbins; fBinsMult = CloneArray(nbins+1,edges); }
void SetBinsPt(Int_t nbins, Double_t* edges) { fPtNbins = nbins; fBinsPt = CloneArray(nbins+1,edges); }
void SetBinsPtCorr(Int_t nbins, Double_t* edges) { fPtCorrNbins = nbins; fBinsPtCorr = CloneArray(nbins+1,edges); }
void SetBinsEta(Int_t nbins, Double_t* edges) { fEtaNbins = nbins; fBinsEta = CloneArray(nbins+1,edges); }
void SetBinsZv(Int_t nbins, Double_t* edges) { fZvNbins = nbins; fBinsZv = CloneArray(nbins+1,edges); }
void FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, const Double_t zv, AlidNdPtHelper::TrackObject trackObj, Int_t multMB);
void FillHistograms(AliStack *const stack, Int_t label, AlidNdPtHelper::TrackObject trackObj);
void FillHistograms(TObjArray *const allChargedTracks,Int_t *const labelsAll,Int_t multAll,Int_t *const labelsAcc,Int_t multAcc,Int_t *const labelsRec,Int_t multRec);
THnSparseF *GetEventMultCorrelationMatrix() const {return fEventMultCorrelationMatrix;}
THnSparseF *GetTrackPtCorrelationMatrix() const {return fTrackPtCorrelationMatrix;}
THnSparseF *GetGenEventMatrix() const {return fGenEventMatrix;}
THnSparseF *GetGenSDEventMatrix() const {return fGenSDEventMatrix;}
THnSparseF *GetGenDDEventMatrix() const {return fGenDDEventMatrix;}
THnSparseF *GetGenNDEventMatrix() const {return fGenNDEventMatrix;}
THnSparseF *GetGenNSDEventMatrix() const {return fGenNSDEventMatrix;}
THnSparseF *GetTriggerEventMatrix() const {return fTriggerEventMatrix;}
THnSparseF *GetTriggerSDEventMatrix() const {return fTriggerSDEventMatrix;}
THnSparseF *GetTriggerDDEventMatrix() const {return fTriggerDDEventMatrix;}
THnSparseF *GetTriggerNDEventMatrix() const {return fTriggerNDEventMatrix;}
THnSparseF *GetTriggerNSDEventMatrix() const {return fTriggerNSDEventMatrix;}
THnSparseF *GetRecEventMatrix() const {return fRecEventMatrix;}
THnSparseF *GetRecSDEventMatrix() const {return fRecSDEventMatrix;}
THnSparseF *GetRecDDEventMatrix() const {return fRecDDEventMatrix;}
THnSparseF *GetRecNDEventMatrix() const {return fRecNDEventMatrix;}
THnSparseF *GetRecNSDEventMatrix() const {return fRecNSDEventMatrix;}
THnSparseF *GetRecCandleEventMatrix() const {return fRecCandleEventMatrix;}
THnSparseF *GetGenTrackEventMatrix() const {return fGenTrackEventMatrix;}
THnSparseF *GetGenTrackSDEventMatrix() const {return fGenTrackSDEventMatrix;}
THnSparseF *GetGenTrackDDEventMatrix() const {return fGenTrackDDEventMatrix;}
THnSparseF *GetGenTrackNDEventMatrix() const {return fGenTrackNDEventMatrix;}
THnSparseF *GetGenTrackNSDEventMatrix() const {return fGenTrackNSDEventMatrix;}
THnSparseF *GetTriggerTrackEventMatrix() const {return fTriggerTrackEventMatrix;}
THnSparseF *GetTriggerTrackSDEventMatrix() const {return fTriggerTrackSDEventMatrix;}
THnSparseF *GetTriggerTrackDDEventMatrix() const {return fTriggerTrackDDEventMatrix;}
THnSparseF *GetTriggerTrackNDEventMatrix() const {return fTriggerTrackNDEventMatrix;}
THnSparseF *GetTriggerTrackNSDEventMatrix() const {return fTriggerTrackNSDEventMatrix;}
THnSparseF *GetRecTrackEventMatrix() const {return fRecTrackEventMatrix;}
THnSparseF *GetRecTrackSDEventMatrix() const {return fRecTrackSDEventMatrix;}
THnSparseF *GetRecTrackDDEventMatrix() const {return fRecTrackDDEventMatrix;}
THnSparseF *GetRecTrackNDEventMatrix() const {return fRecTrackNDEventMatrix;}
THnSparseF *GetRecTrackNSDEventMatrix() const {return fRecTrackNSDEventMatrix;}
THnSparseF *GetGenTrackMatrix() const {return fGenTrackMatrix;}
THnSparseF *GetGenPrimTrackMatrix() const {return fGenPrimTrackMatrix;}
THnSparseF *GetRecPrimTrackMatrix() const {return fRecPrimTrackMatrix;}
THnSparseF *GetRecTrackMatrix() const {return fRecTrackMatrix;}
THnSparseF *GetRecSecTrackMatrix() const {return fRecSecTrackMatrix;}
THnSparseF *GetRecMultTrackMatrix() const {return fRecMultTrackMatrix;}
THnSparseF *GetMCEventHist1() const {return fMCEventHist1;}
THnSparseF *GetRecEventHist1() const {return fRecEventHist1;}
THnSparseF *GetRecEventHist2() const {return fRecEventHist2;}
THnSparseF *GetRecMCEventHist1() const {return fRecMCEventHist1;}
THnSparseF *GetRecMCEventHist2() const {return fRecMCEventHist2;}
THnSparseF *GetRecMCEventHist3() const {return fRecMCEventHist3;}
THnSparseF *GetMCTrackHist1(Int_t i) const {return fMCTrackHist1[i];}
THnSparseF *GetMCPrimTrackHist1(Int_t i) const {return fMCPrimTrackHist1[i];}
THnSparseF *GetMCPrimTrackHist2(Int_t i) const {return fMCPrimTrackHist2[i];}
THnSparseF *GetMCSecTrackHist1(Int_t i) const {return fMCSecTrackHist1[i];}
THnSparseF *GetRecTrackHist1(Int_t i) const {return fRecTrackHist1[i];}
THnSparseF *GetRecTrackMultHist1(Int_t i) const {return fRecTrackMultHist1[i];}
THnSparseF *GetRecMCTrackHist1() const {return fRecMCTrackHist1;}
THnSparseF *GetMCMultRecTrackHist1() const {return fMCMultRecTrackHist1;}
THnSparseF *GetRecTrackHist2() const {return fRecTrackHist2;}
THnSparseF *GetEventCount() const {return fEventCount;}
THnSparseF *GetRecEventHist() const {return fRecEventHist;}
THnSparseF *GetRecTrackHist() const {return fRecTrackHist;}
THnSparseF* GetMCPrimTrackHist() const {return fMCPrimTrackHist;}
private:
TFolder *fAnalysisFolder;
Bool_t fHistogramsOn;
THnSparseF *fEventMultCorrelationMatrix;
THnSparseF *fTrackPtCorrelationMatrix;
THnSparseF *fGenEventMatrix;
THnSparseF *fGenSDEventMatrix;
THnSparseF *fGenDDEventMatrix;
THnSparseF *fGenNDEventMatrix;
THnSparseF *fGenNSDEventMatrix;
THnSparseF *fTriggerEventMatrix;
THnSparseF *fTriggerSDEventMatrix;
THnSparseF *fTriggerDDEventMatrix;
THnSparseF *fTriggerNDEventMatrix;
THnSparseF *fTriggerNSDEventMatrix;
THnSparseF *fRecEventMatrix;
THnSparseF *fRecSDEventMatrix;
THnSparseF *fRecDDEventMatrix;
THnSparseF *fRecNDEventMatrix;
THnSparseF *fRecNSDEventMatrix;
THnSparseF *fGenTrackEventMatrix;
THnSparseF *fGenTrackSDEventMatrix;
THnSparseF *fGenTrackDDEventMatrix;
THnSparseF *fGenTrackNDEventMatrix;
THnSparseF *fGenTrackNSDEventMatrix;
THnSparseF *fTriggerTrackEventMatrix;
THnSparseF *fTriggerTrackSDEventMatrix;
THnSparseF *fTriggerTrackDDEventMatrix;
THnSparseF *fTriggerTrackNDEventMatrix;
THnSparseF *fTriggerTrackNSDEventMatrix;
THnSparseF *fRecTrackEventMatrix;
THnSparseF *fRecTrackSDEventMatrix;
THnSparseF *fRecTrackDDEventMatrix;
THnSparseF *fRecTrackNDEventMatrix;
THnSparseF *fRecTrackNSDEventMatrix;
THnSparseF *fGenTrackMatrix;
THnSparseF *fGenPrimTrackMatrix;
THnSparseF *fRecPrimTrackMatrix;
THnSparseF *fRecTrackMatrix;
THnSparseF *fRecSecTrackMatrix;
THnSparseF *fRecMultTrackMatrix;
THnSparseF *fMCEventHist1;
THnSparseF *fRecEventHist1;
THnSparseF *fRecEventHist2;
THnSparseF *fRecMCEventHist1;
THnSparseF *fRecMCEventHist2;
THnSparseF *fRecMCEventHist3;
THnSparseF *fMCTrackHist1[AlidNdPtHelper::kCutSteps];
THnSparseF *fMCPrimTrackHist1[AlidNdPtHelper::kCutSteps];
THnSparseF *fMCPrimTrackHist2[AlidNdPtHelper::kCutSteps];
THnSparseF *fMCSecTrackHist1[AlidNdPtHelper::kCutSteps];
THnSparseF *fRecTrackHist1[AlidNdPtHelper::kCutSteps];
THnSparseF *fRecTrackMultHist1[AlidNdPtHelper::kCutSteps];
THnSparseF *fRecMCTrackHist1;
THnSparseF *fMCMultRecTrackHist1;
THnSparseF *fRecTrackHist2;
THnSparseF *fRecEventHist;
THnSparseF *fRecTrackHist;
THnSparseF *fEventCount;
THnSparseF *fMCPrimTrackHist;
THnSparseF *fRecCandleEventMatrix;
Int_t fMultNbins;
Int_t fPtNbins;
Int_t fPtCorrNbins;
Int_t fEtaNbins;
Int_t fZvNbins;
Double_t* fBinsMult;
Double_t* fBinsPt;
Double_t* fBinsPtCorr;
Double_t* fBinsEta;
Double_t* fBinsZv;
Bool_t fIsInit;
AlidNdPtAnalysis(const AlidNdPtAnalysis&);
AlidNdPtAnalysis& operator=(const AlidNdPtAnalysis&);
ClassDef(AlidNdPtAnalysis,7);
};
#endif