]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtHelper.h
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / SPECTRA / ChargedHadrons / dNdPt / AlidNdPtHelper.h
1 #ifndef ALIDNDPTHELPER_H
2 #define ALIDNDPTHELPER_H
3
4 //
5 // static dNdPt helper functions
6 //
7 // Origin: Jan Fiete Grosse-Oetringhaus
8 // Modified and Extended: Jacek Otwinowski 19/11/2009
9 // last change: 2013-06-13 by M.Knichel
10 //
11
12 #include <TObject.h>
13 #include <THnSparse.h>
14 #include "AliTriggerAnalysis.h"
15 #include "AliPWG0Helper.h"
16
17 class TF1;
18 class TH1;
19 class TH2;
20 class TH3;
21 class TTree;
22 class THnSparse;
23 class TParticle;
24 class AliHeader;
25 class AliGenEventHeader;
26 class AliStack;
27 class AliESD;
28 class AliESDEvent;
29 class AliESDtrack;
30 class AliMCEvent;
31 class AliESDVertex;
32 class AliESDtrackCuts;
33 class AlidNdPtAcceptanceCuts;
34 class AlidNdPtEventCuts;
35 class AliPWG0Helper;
36 class AliOfflineTrigger;
37 class AliMultiplicity;
38
39 class AliGenDPMjetEventHeader;
40 class AliGenCocktailEventHeader;
41 class AliGenPythiaEventHeader;
42 class AliVertexerTracks;
43 class AliLog;
44 class AliHeader;
45
46 class AlidNdPtHelper : public TObject
47 {
48   public:
49     enum AnalysisMode { kInvalid = -1, kSPD = 0, kTPC, kTPCITS, kTPCSPDvtx, kTPCSPDvtxUpdate, kTPCTrackSPDvtx, kTPCTrackSPDvtxUpdate, kTPCITSHybrid, kTPCITSHybridTrackSPDvtx, kTPCITSHybridTrackSPDvtxDCArPt, kITSStandAloneTrackSPDvtx,kITSStandAloneTPCTrackSPDvtx, kMCRec };
50
51     enum ParticleMode { kAllPart = 0, kMCPion, kMCKaon, kMCProton, kPlus, kMinus, kCosmic, kBackgroundTrack, kMCRest, kVZEROCase1, kVZEROCase2};
52
53     enum OutputObject { kInvalidObject = -1, kCutAnalysis = 0, kAnalysis, kAnalysisPbPb, kCorrection, kSystematics, kCutAnalysisPbPb };
54
55     enum TrackObject  { kInvalidTrackObject = -1, kAllTracks = 0, kAccTracks, kRecTracks, kMCTracks };
56     enum EventObject  { kInvalidEventObject = -1, kAllEvents = 0, kTriggeredEvents, kAccEvents, kRecEvents, kMCEvents };
57     enum CutSteps     { kCutSteps = 3 };
58
59     static const AliESDVertex* GetVertex(AliESDEvent* const aEsd, const AlidNdPtEventCuts *const evtCuts,const  AlidNdPtAcceptanceCuts *const accCuts,const  AliESDtrackCuts *const trackCuts,  AnalysisMode analysisMethod, Bool_t debug = kFALSE,Bool_t bRedoTPC = kFALSE, Bool_t bUseMeanVertex = kFALSE);
60
61     static const AliESDVertex* GetTPCVertexZ(const AliESDEvent* const aEsd, const AlidNdPtEventCuts *const evtCuts, const AlidNdPtAcceptanceCuts *const accCuts, const AliESDtrackCuts *const trackCuts, Float_t fraction=0.8, Int_t ntracksMin=2);
62
63     static Bool_t TestRecVertex(const AliESDVertex* vertex, const AliESDVertex* vertexSPD, AnalysisMode analysisMode, Bool_t debug = kFALSE);
64
65     static Bool_t IsPrimaryParticle(AliStack *const stack, Int_t idx, ParticleMode particleMode);
66     static Bool_t IsCosmicTrack(AliESDtrack *const track1, AliESDtrack *const track2);
67     static Bool_t IsGoodImpPar(const AliESDtrack *const track);
68     static Int_t ConvertPdgToPid(const TParticle *const particle);
69
70     static Bool_t SelectEvent(const AliESDEvent* const aEsd, AliESDtrackCuts* const esdTrackCuts);
71     static Bool_t SelectMCEvent(AliMCEvent* const mcEvent);
72
73     static TObjArray *GetAllChargedTracks(AliESDEvent *const esdEvent, AnalysisMode analysisMode);
74
75     static TH1F* MakeResol(TH2F * const his, Int_t integ, Bool_t type, Bool_t drawBins, Int_t minHistEntries);
76     static TH1F* CreateResHisto(TH2F* const hRes2, TH1F **phMean, Int_t integ,  Bool_t drawBinFits, Int_t minHistEntries);
77
78     static Int_t GetTPCMBTrackMult(const AliESDEvent* const esdEvent, const AlidNdPtEventCuts *const evtCuts,const  AlidNdPtAcceptanceCuts *const accCuts, const AliESDtrackCuts *const trackCuts);
79     static Int_t GetTPCMBPrimTrackMult(const AliESDEvent* const esdEvent, AliStack * const stack,const AlidNdPtEventCuts *const evtCuts, const AlidNdPtAcceptanceCuts *const accCuts, const AliESDtrackCuts *const trackCuts);
80
81     static Int_t GetSPDMBTrackMult(const AliESDEvent* const esdEvent, Float_t deltaThetaCut =0.025, Float_t deltaPhiCut = 0.08);
82     static Int_t GetSPDMBPrimTrackMult(const AliESDEvent* const esdEvent, AliStack *const  stack, Float_t deltaThetaCut =0.025, Float_t deltaPhiCut = 0.08);
83     static Int_t GetMCTrueTrackMult(AliMCEvent *const mcEvent, AlidNdPtEventCuts *const evtCuts, AlidNdPtAcceptanceCuts *const accCuts);    
84     static Int_t GetMCTrueTrackMult(AliMCEvent *const mcEvent, AlidNdPtEventCuts *const evtCuts, AlidNdPtAcceptanceCuts *const accCuts, Double_t yShift);    
85
86     static AliESDtrack* GetTPCOnlyTrackSPDvtx(const AliESDEvent* const esdEvent, Int_t iTrack, Bool_t bUpdate);
87     static AliESDtrack* GetTPCOnlyTrackTrackSPDvtx(const AliESDEvent* const esdEvent, Int_t iTrack, Bool_t bUpdate);
88     static AliESDtrack* GetTrackSPDvtx(const AliESDEvent* const esdEvent, Int_t iTrack, Bool_t bUpdate);
89     static AliESDtrack* GetTrackTrackSPDvtx(const AliESDEvent* const esdEvent, Int_t iTrack, Bool_t bUpdate);
90
91     static void PrintConf(AnalysisMode analysisMode, AliTriggerAnalysis::Trigger trigger);
92     static void PrintMCInfo(AliStack *const pStack, Int_t label);
93
94     static TH1* ScaleByBinWidth(TH1 *const hist=0);
95     static TH1* GetContCorrHisto(TH1 *const hist=0);
96     static TH1* CalcRelativeDifference(const TH1 *const hist1=0, const TH1 *const hist2=0);
97     static TH1* CalcRelativeDifferenceFun(const TH1 *const hist=0, TF1 *const fun=0);
98     static TH1* NormalizeToEvent(const TH2 *const hist1=0, const TH1 *const hist2=0);
99
100     //static THnSparse* GenerateCorrMatrix(THnSparse *const hist1, const THnSparse *const hist2, char *const name);
101     //static TH2* GenerateCorrMatrix(TH2 *const hist1, TH2 *const hist2, char *const name);
102     //static TH1* GenerateCorrMatrix(TH1 *const hist1, TH1 *const hist2, char *const name);
103
104     //static THnSparse* GenerateContCorrMatrix(THnSparse *const hist1, THnSparse *const hist2, char *const name);
105     //static TH2* GenerateContCorrMatrix(TH2 *const hist1, TH2 *const hist2, char *const name);
106     //static TH1* GenerateContCorrMatrix(TH1 *const hist1, TH1 *const hist2, char *const name);
107
108     static THnSparse* GenerateCorrMatrix(THnSparse *const hist1, const THnSparse *const hist2, const char * name);
109     static TH2* GenerateCorrMatrix(TH2 *const hist1, TH2 *const hist2, const char* name);
110     static TH1* GenerateCorrMatrix(TH1 *const hist1, TH1 *const hist2, const char* name);
111
112     static THnSparse* GenerateContCorrMatrix(THnSparse *const hist1, const THnSparse *const hist2, const char* name);
113     static TH2* GenerateContCorrMatrix(TH2 *const hist1, TH2 *const hist2, const char* name);
114     static TH1* GenerateContCorrMatrix(TH1 *const hist1, TH1 *const hist2, const char* name);
115
116     static Double_t GetStrangenessCorrFactor(const Double_t pt);
117     static Double_t GetStrangenessCorrFactorPbPb(const Double_t pt);    
118     static Double_t GetLinearInterpolationValue(const Double_t x1, const Double_t y1, const Double_t x2, const Double_t y2, const Double_t pt);
119
120     // function to rebin THnSparse, the content of hist1 will be rebinned, hist2 serves as a protoype for the binning
121     static THnSparse* RebinTHnSparse(const THnSparse* hist1, THnSparse* hist2, const Char_t* newname = "",  Option_t* option = "");
122     
123     // function to get processtype (kSD, kND) from DPMJET header in PA
124     static AliPWG0Helper::MCProcessType GetEventProcessTypePA(AliHeader* aHeader, Bool_t adebug = kFALSE);
125     static AliPWG0Helper::MCProcessType GetDPMjetEventProcessTypePA(AliGenEventHeader* aHeader, Bool_t adebug = kFALSE);
126
127     ClassDef(AlidNdPtHelper, 3);
128
129   private:
130     AlidNdPtHelper(const AlidNdPtHelper&);
131     AlidNdPtHelper& operator=(const AlidNdPtHelper&);
132 };
133
134 #endif
135