#ifndef ALITRDPIDTREE_H
#define ALITRDPIDTREE_H
#include "AliAnalysisTaskSE.h"
#include "AliStack.h"
class TTreeStream;
class AliInputEventHandler;
class TArrayF;
template <class X>
class THnSparseT;
typedef class THnSparseT<TArrayF> THnSparseF;
class TFile;
class AliESDEvent;
class AliMCEvent;
class AliESDtrackCuts;
class AliPIDResponse;
class AliESD;
class AliESDtrack;
class AliAnalysisTask;
class AliESDInputHandler;
class AliESDv0KineCuts;
class AliAnalysisManager;
class AliCentrality;
class AliTRDgeometry;
class TTree;
class TSystem;
class TStyle;
class TROOT;
class Riostream;
class TChain;
class TH2;
class TF1;
class TH1;
class TObjArray;
class AliTRDPIDTree : public AliAnalysisTaskSE {
public:
typedef enum{
kpp = 0,
kpPb = 1,
kPbPb = 2
} ECollisionSystem_t;
AliTRDPIDTree(const char *name = "trd_pid_tree");
virtual ~AliTRDPIDTree();
virtual void UserCreateOutputObjects();
virtual void UserExec(Option_t *);
virtual void Process(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0);
virtual void Terminate(const Option_t*);
Int_t CompareFloat(Float_t f1=1, Float_t f2=0) const;
Int_t GetV0tag(Int_t trackIndex) const;
Int_t *fV0tags;
Bool_t Ispp() const { return fCollisionSystem.TestBitNumber(kpp); }
Bool_t IspPb() const { return fCollisionSystem.TestBitNumber(kpPb); }
Bool_t IsPbPb() const { return fCollisionSystem.TestBitNumber(kPbPb); }
void SetCollisionSystem(ECollisionSystem_t system){
fCollisionSystem.Clear();
fCollisionSystem.SetBitNumber(system, kTRUE);
}
void SetppAnalysis(){
fCollisionSystem.SetBitNumber(kpPb, kFALSE);
fCollisionSystem.SetBitNumber(kPbPb, kFALSE);
fCollisionSystem.SetBitNumber(kpp, kTRUE);
}
void SetpPbAnalysis() {
fCollisionSystem.SetBitNumber(kpp, kFALSE);
fCollisionSystem.SetBitNumber(kPbPb, kFALSE);
fCollisionSystem.SetBitNumber(kpPb, kTRUE);
}
void SetPbPbAnalysis() {
fCollisionSystem.SetBitNumber(kpp, kFALSE);
fCollisionSystem.SetBitNumber(kpPb, kFALSE);
fCollisionSystem.SetBitNumber(kPbPb, kTRUE);
};
protected:
static Double_t fgMinLayer;
AliESDv0KineCuts *fV0cuts;
TObjArray *fV0electrons;
TObjArray *fV0pions;
TObjArray *fV0protons;
void FillTree(AliESDtrack *track, Int_t pdg, Int_t runnumber, Int_t centralityvalue);
void SetupV0qa();
void FillV0PIDlist();
void ClearV0PIDlist();
Double_t GetPhi(AliESDtrack *const fTrack,Int_t iPl, Double_t& ar);
Bool_t PassTrackCuts(AliESDtrack *fESDTrack=0);
Bool_t HasMissingLayer(const AliVTrack *fESDTrack=0);
Int_t GetNTrackletsPID(const AliVTrack *fESDTrack=0) const;
private:
AliESDEvent *fESDEvent;
AliMCEvent *fMCEvent;
AliStack *fMCStack;
TTree *fTreeTRDPID;
AliPIDResponse *fPIDResponse;
TObjArray *fOutputContainer;
AliESDtrackCuts *fESDtrackCuts;
AliESDtrackCuts *fESDtrackCutsV0;
TList *fListQATRD;
TList *fListQATRDV0;
Int_t fNumTagsStored;
TBits fCollisionSystem;
Float_t fpdg;
Int_t frun;
Int_t frunnumber;
Double_t fcentrality;
Int_t fTRDNtracklets;
Double_t fTRDslices[48];
Double_t fTRDMomentum[6];
Int_t fTRDNcls;
Int_t fTRDntracklets;
Int_t fTRDntrackletsPID;
Double_t fTRDphi[6];
Double_t fTRDY[6];
Double_t fTRDtheta;
Double_t fTRDsignal;
Int_t fTRDnclsdEdx;
Int_t fTRDnch;
Float_t fNSigmaTPC[3];
Float_t fNSigmaTOF[3];
Int_t fPDG;
Int_t fPDGTRUE;
Float_t fDCA[2];
Float_t fChi2;
Double_t fsigmaTRD[5];
Double_t fdeltaTRD[5];
Double_t fratioTRD[5];
TH1F *fhtrackCuts;
TH2F *fhArmenteros;
AliTRDPIDTree(const AliTRDPIDTree&);
AliTRDPIDTree& operator=(const AliTRDPIDTree&);
ClassDef(AliTRDPIDTree, 1);
};
#endif