c1c9caeade4147473a901f4637362337c46f8bb2
[u/mrichter/AliRoot.git] / PWG0 / dNdPt / AlidNdPtHelper.h
1 /* $Id: AlidNdPtHelper.h 28655 2008-09-10 12:57:42Z jgrosseo $ */
2
3 #ifndef ALIDNDPTHELPER_H
4 #define ALIDNDPTHELPER_H
5
6 //
7 // static helper functions
8 // origin PWG0 (Jan Fiete, CKB) and extended by Jacek Otwinowski (JO)
9 //
10
11 #include <TObject.h>
12
13 class TParticle;
14 class TH1;
15 class TH1F;
16 class TH2F;
17 class TH2;
18 class TH3;
19 class TF1;
20 class TTree;
21 class TArrayI;
22
23 class AliHeader;
24 class AliGenEventHeader;
25 class AliStack;
26 class AliESD;
27 class AliESDEvent;
28 class AliESDtrack;
29 class AliMCEvent;
30 class AliESDVertex;
31 class AliESDtrackCuts;
32 class AlidNdPtAcceptanceCuts;
33 class AlidNdPtEventCuts;
34
35 #include "THnSparse.h"
36 class AlidNdPtHelper : public TObject
37 {
38   public:
39     enum Trigger { kMB1 = 0, kMB2, kSPDFASTOR }; // definition from ALICE-INT-2005-025
40     enum AnalysisMode { kInvalid = -1, kSPD = 0, kTPC, kTPCITS, kTPCSPDvtx, kMCRec, kMCPion, kMCKaon, kMCProton, kPlus, kMinus };
41     // in case we want to use bitmaps...
42     // kDiffractiveProcess is artifficial
43     enum MCProcessType { kInvalidProcess = -1, kND = 0x1, kDD = 0x2, kSD = 0x4, kDiffractiveProcess = 0x9 }; 
44
45     static Bool_t IsEventTriggered(const AliESD* aEsd, Trigger trigger = kMB2);
46     static Bool_t IsEventTriggered(ULong64_t triggerMask, Trigger trigger = kMB2);
47     static const AliESDVertex* GetVertex(AliESDEvent* aEsd, AlidNdPtEventCuts *evtCuts, AlidNdPtAcceptanceCuts *accCuts, AliESDtrackCuts *trackCuts,  AnalysisMode analysisMethod, Bool_t debug = kFALSE,Bool_t bRedoTPC = kFALSE, Bool_t bUseMeanVertex = kFALSE);
48     //static const AliESDVertex* GetVertex(AliESDEvent* aEsd, AnalysisMode analysisMethod, Bool_t debug = kFALSE,Bool_t bRedoTPC = kFALSE, Bool_t bUseMeanVertex = kFALSE);
49
50     static const AliESDVertex* GetTPCVertexZ(AliESDEvent* aEsd, Float_t sigmaXYcut=3., Float_t distXYcut=3., Float_t distZcut=30., Int_t nclCut=50, Float_t fraction=0.8, Int_t ntracksMin=2);
51
52     static Bool_t TestVertex(const AliESDVertex* vertex, AnalysisMode analysisMode, Bool_t debug = kFALSE);
53
54     static Bool_t IsPrimaryCharged(TParticle* aParticle, Int_t aTotalPrimaries, Bool_t adebug = kFALSE);
55     static Bool_t IsPrimaryParticle(AliStack *stack, Int_t idx, AnalysisMode analysisMode);
56
57     static AlidNdPtHelper::MCProcessType GetEventProcessType(AliHeader* aHeader, Bool_t adebug = kFALSE);
58     static AlidNdPtHelper::MCProcessType GetPythiaEventProcessType(AliGenEventHeader* aHeader, Bool_t adebug = kFALSE);
59     static AlidNdPtHelper::MCProcessType GetDPMjetEventProcessType(AliGenEventHeader* aHeader, Bool_t adebug = kFALSE);
60     static Int_t GetLastProcessType() { return fgLastProcessType; }
61
62     static TParticle* FindPrimaryMother(AliStack* stack, Int_t label);
63     static Int_t FindPrimaryMotherLabel(AliStack* stack, Int_t label);
64
65     static void CreateProjections(TH3* hist, Bool_t save = kFALSE);
66     static void CreateDividedProjections(TH3* hist, TH3* hist2, const char* axis = 0, Bool_t putErrors = kFALSE, Bool_t save = kFALSE);
67     static const char* GetAxisTitle(TH3* hist, const char axis);
68
69     static void NormalizeToBinWidth(TH1* hist);
70     static void NormalizeToBinWidth(TH2* hist);
71
72     static void PrintConf(AnalysisMode analysisMode, Trigger trigger);
73
74     // added by JO
75     static Int_t ConvertPdgToPid(TParticle *particle);
76
77     enum OutputObject { kInvalidObject = -1, kCutAnalysis = 0, kAnalysis, kCorrection, kSystematics };
78     enum TrackObject  { kInvalidTrackObject = -1, kAllTracks = 0, kAccTracks, kRecTracks, kMCTracks };
79     enum EventObject  { kInvalidEventObject = -1, kAllEvents = 0, kTriggeredEvents, kAccEvents, kRecEvents, kMCEvents };
80     enum CutSteps     { kCutSteps = 3 };
81
82     //static TObjArray *GetAllChargedTracks(AliESDEvent *esdEvent, AnalysisMode analysisMode);
83     static TObjArray *GetAllChargedTracks(AliESDEvent *esdEvent, const AliESDVertex *vtx, AnalysisMode analysisMode);
84     static AliESDtrack* GetTPCOnlyTrack(AliESDEvent* esd, const AliESDVertex *vtx, Int_t iTrack);
85
86     static TH1F* MakeResol(TH2F * his, Int_t integ, Bool_t type, Bool_t drawBins, Int_t minHistEntries);
87     static TH1F* CreateResHisto(TH2F* hRes2, TH1F **phMean, Int_t integ,  Bool_t drawBinFits, Int_t minHistEntries);
88
89     static Int_t GetTPCMBTrackMult(AliESDEvent* esdEvent, AlidNdPtEventCuts *evtCuts, AlidNdPtAcceptanceCuts *accCuts, AliESDtrackCuts *trackCuts);
90     static Int_t GetTPCMBPrimTrackMult(AliESDEvent* esdEvent, AliStack * stack,AlidNdPtEventCuts *evtCuts, AlidNdPtAcceptanceCuts *accCuts, AliESDtrackCuts *trackCuts);
91
92     static Int_t GetSPDMBTrackMult(AliESDEvent* esdEvent, Float_t deltaThetaCut =0.025, Float_t deltaPhiCut = 0.08);
93     static Int_t GetSPDMBPrimTrackMult(AliESDEvent* esdEvent, AliStack * stack, Float_t deltaThetaCut =0.025, Float_t deltaPhiCut = 0.08);
94     static Int_t GetMCTrueTrackMult(AliMCEvent *mcEvent, AlidNdPtEventCuts *evtCuts, AlidNdPtAcceptanceCuts *accCuts);
95
96     static void PrintMCInfo(AliStack *pStack, Int_t label);
97
98     static TH1* ScaleByBinWidth(TH1 *hist=0);
99     static TH1* GetContCorrHisto(TH1 *hist=0);
100     static TH1* CalcRelativeDifference(TH1 *hist1=0, TH1 *hist2=0);
101     static TH1* CalcRelativeDifferenceFun(TH1 *hist=0, TF1 *fun=0);
102     static TH1* NormalizeToEvent(TH2 *hist1=0, TH1 *hist2=0);
103
104     static THnSparse* GenerateCorrMatrix(THnSparse *hist1, THnSparse *hist2, char *name);
105     static TH2* GenerateCorrMatrix(TH2 *hist1, TH2 *hist2, char *name);
106     static TH1* GenerateCorrMatrix(TH1 *hist1, TH1 *hist2, char *name);
107
108     static THnSparse* GenerateContCorrMatrix(THnSparse *hist1, THnSparse *hist2, char *name);
109     static TH2* GenerateContCorrMatrix(TH2 *hist1, TH2 *hist2, char *name);
110     static TH1* GenerateContCorrMatrix(TH1 *hist1, TH1 *hist2, char *name);
111
112   protected:
113     static Int_t fgLastProcessType;    // stores the raw value of the last process type extracnted
114  
115     ClassDef(AlidNdPtHelper, 0);
116
117   private:
118     AlidNdPtHelper(const AlidNdPtHelper&);
119     AlidNdPtHelper& operator=(const AlidNdPtHelper&);
120 };
121
122 #endif
123