]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG/FLOW/Base/AliFlowAnalysisWithNestedLoops.h
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWG / FLOW / Base / AliFlowAnalysisWithNestedLoops.h
1 /* 
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. 
3  * See cxx source for full Copyright notice 
4  * $Id$ 
5  */
6
7 /*************************************************************** 
8  * Only in this class nested loops are used for flow analysis. *
9  * Nested loops are used to evaluate:                          *
10  *                                                             *  
11  *  a) Distribution of relative angle difference (phi1-phi2);  *
12  *  b) Cross-check the results for mixed harmonics.            *
13  *                                                             *
14  *       Author: Ante Bilandzic (abilandzic@gmail.com)         *
15  ***************************************************************/ 
16
17 #ifndef ALIFLOWANALYSISWITHNESTEDLOOPS_H
18 #define ALIFLOWANALYSISWITHNESTEDLOOPS_H
19
20 class TList;
21 class TDirectoryFile;
22 class TH1F;
23 class TH1D;
24 class TProfile;
25
26 class AliFlowEventSimple;
27 class AliFlowCommonConstants;
28 class AliFlowCommonHist;
29 class AliFlowCommonHistResults;
30
31 //================================================================================================================
32
33 class AliFlowAnalysisWithNestedLoops
34 {
35  public:
36   AliFlowAnalysisWithNestedLoops();
37   virtual ~AliFlowAnalysisWithNestedLoops(); 
38   // 0.) Methods called in the constructor:
39     virtual void InitializeArraysForMH();
40   // 1.) Method Init() and methods called within Init():
41   virtual void Init();
42     virtual void CrossCheckSettings();
43     virtual void AccessConstants();
44     virtual void BookAndNestAllLists();
45     virtual void BookAndFillProfileHoldingSettings();
46     virtual void BookCommonHistograms();
47     virtual void BookEverythingForRAD(); // RAD = relative angle distribution phi1-phi2
48     virtual void BookEverythingForMH(); // MH = Mixed Harmonics
49     virtual void BookAndFillWeightsHistograms();
50     virtual void StoreHarmonic();        
51   // 2.) Method Make() and methods called within Make():
52   virtual void Make(AliFlowEventSimple *anEvent);
53     virtual void CheckPointersUsedInMake();
54     virtual void EvaluateNestedLoopsForRAD(AliFlowEventSimple *anEvent);
55     virtual void EvaluateNestedLoopsForMH(AliFlowEventSimple *anEvent);
56   // 3.) Method Finish() and methods called within Finish():
57   virtual void Finish();  
58     virtual void CheckPointersUsedInFinish(); 
59     virtual void AccessSettings();  
60     virtual void PrintOnTheScreen();     
61   // 4.) Method GetOutputHistograms and method called within it:
62   virtual void GetOutputHistograms(TList *outputListHistos);
63     virtual void GetPointersForBaseHistograms();
64     virtual void GetPointersForCommonHistograms();
65     virtual void GetPointersForRAD();
66     virtual void GetPointersForMH();
67   // 5.) Other methods:   
68   virtual void WriteHistograms(TString outputFileName);
69   virtual void WriteHistograms(TDirectoryFile *outputFileName);  
70   virtual void CheckPointersForRAD(TString where);
71   virtual void CheckPointersForMH(TString where);
72   // 6.) Setters and getters:
73   void SetHistList(TList* const hl) {this->fHistList = hl;}
74   TList* GetHistList() const {return this->fHistList;}  
75   void SetHistListName(const char *hln) {this->fHistListName->Append(*hln);}; 
76   TString *GetHistListName() const {return this->fHistListName;};
77   void SetHarmonic(Int_t const harmonic) {this->fHarmonic = harmonic;};
78   Int_t GetHarmonic() const {return this->fHarmonic;};    
79   void SetAnalysisLabel(const char *al) {this->fAnalysisLabel->Append(*al);}; 
80   TString *GetAnalysisLabel() const {return this->fAnalysisLabel;};
81   void SetAnalysisSettings(TProfile* const as) {this->fAnalysisSettings = as;};
82   TProfile* GetAnalysisSettings() const {return this->fAnalysisSettings;};
83   void SetOppositeChargesPOI(Bool_t const ocp) {this->fOppositeChargesPOI = ocp;};
84   Bool_t GetOppositeChargesPOI() const {return this->fOppositeChargesPOI;};
85   void SetEvaluateDifferential3pCorrelator(Bool_t const ed3pc) {this->fEvaluateDifferential3pCorrelator = ed3pc;};
86   Bool_t GetEvaluateDifferential3pCorrelator() const {return this->fEvaluateDifferential3pCorrelator;};      
87   void SetPrintOnTheScreen(Bool_t const pots) {this->fPrintOnTheScreen = pots;};
88   Bool_t GetPrintOnTheScreen() const {return this->fPrintOnTheScreen;};   
89   void SetCommonHists(AliFlowCommonHist* const ch) {this->fCommonHists = ch;};
90   AliFlowCommonHist* GetCommonHists() const {return this->fCommonHists;};
91   void SetWeightsList(TList* const wl) {this->fWeightsList = (TList*)wl->Clone();}
92   TList* GetWeightsList() const {return this->fWeightsList;}  
93   void SetUsePhiWeights(Bool_t const uPhiW) {this->fUsePhiWeights = uPhiW;};
94   Bool_t GetUsePhiWeights() const {return this->fUsePhiWeights;};
95   void SetUsePtWeights(Bool_t const uPtW) {this->fUsePtWeights = uPtW;};
96   Bool_t GetUsePtWeights() const {return this->fUsePtWeights;};
97   void SetUseEtaWeights(Bool_t const uEtaW) {this->fUseEtaWeights = uEtaW;};
98   Bool_t GetUseEtaWeights() const {return this->fUseEtaWeights;};
99   void SetUseParticleWeights(TProfile* const uPW) {this->fUseParticleWeights = uPW;};
100   TProfile* GetUseParticleWeights() const {return this->fUseParticleWeights;};
101   void SetPhiWeights(TH1F* const histPhiWeights) {this->fPhiWeights = histPhiWeights;};
102   TH1F* GetPhiWeights() const {return this->fPhiWeights;};
103   void SetPtWeights(TH1D* const histPtWeights) {this->fPtWeights = histPtWeights;};
104   TH1D* GetPtWeights() const {return this->fPtWeights;};
105   void SetEtaWeights(TH1D* const histEtaWeights) {this->fEtaWeights = histEtaWeights;};
106   TH1D* GetEtaWeights() const {return this->fEtaWeights;};
107   void SetListRAD(TList* const lRAD) {this->fListRAD = lRAD;}
108   TList* GetListRAD() const {return this->fListRAD;}  
109   void SetEvaluateNestedLoopsForRAD(Bool_t const enlfRAD) {this->fEvaluateNestedLoopsForRAD = enlfRAD;};
110   Bool_t GetEvaluateNestedLoopsForRAD() const {return this->fEvaluateNestedLoopsForRAD;};
111   void SetRelativeAngleDistribution(TH1D* const rad) {this->fRelativeAngleDistribution = rad;};
112   TH1D* GetRelativeAngleDistribution() const {return this->fRelativeAngleDistribution;}; 
113   void SetCharge(TH1D* const rad) {this->fCharge = rad;};
114   TH1D* GetCharge() const {return this->fCharge;}; 
115   // QC:
116   void SetListQC(TList* const lQC) {this->fListQC = lQC;}
117   TList* GetListQC() const {return this->fListQC;}  
118   void SetEvaluateNestedLoopsForQC(Bool_t const enlfQC) {this->fEvaluateNestedLoopsForQC = enlfQC;};
119   Bool_t GetEvaluateNestedLoopsForQC() const {return this->fEvaluateNestedLoopsForQC;};
120   // MH:
121   void SetListMH(TList* const lMH) {this->fListMH = lMH;}
122   TList* GetListMH() const {return this->fListMH;}  
123   void SetEvaluateNestedLoopsForMH(Bool_t const enlfMH) {this->fEvaluateNestedLoopsForMH = enlfMH;};
124   Bool_t GetEvaluateNestedLoopsForMH() const {return this->fEvaluateNestedLoopsForMH;};
125   void Set3pCorrelatorPro(TProfile* const s3pPro) {this->f3pCorrelatorPro = s3pPro;};
126   TProfile* Get3pCorrelatorPro() const {return this->f3pCorrelatorPro;};  
127   void Set5pCorrelatorPro(TProfile* const s3pPro) {this->f5pCorrelatorPro = s3pPro;};
128   TProfile* Get5pCorrelatorPro() const {return this->f5pCorrelatorPro;};   
129   void Set3pCorrelatorVsPtSumDiffDirectPro(TProfile* const s3pcvpsdd, Int_t const sd) {this->f3pCorrelatorVsPtSumDiffDirectPro[sd] = s3pcvpsdd;};
130   TProfile* Get3pCorrelatorVsPtSumDiffDirectPro(Int_t sd) const {return this->f3pCorrelatorVsPtSumDiffDirectPro[sd];};
131   
132  private:
133   AliFlowAnalysisWithNestedLoops(const AliFlowAnalysisWithNestedLoops& afawQc);
134   AliFlowAnalysisWithNestedLoops& operator=(const AliFlowAnalysisWithNestedLoops& afawQc); 
135   // 0.) Base:
136   TList *fHistList; // base list to hold all output objects
137   TString *fHistListName; // name of base list
138   Int_t fHarmonic; // harmonic     
139   TString *fAnalysisLabel; // analysis label 
140   TProfile *fAnalysisSettings; // profile to hold analysis settings
141   Bool_t fOppositeChargesPOI; // two POIs, psi1 and psi2, in correlator <<cos[psi1+psi2-2phi3)]>> will be taken with opposite charges  
142   Bool_t fEvaluateDifferential3pCorrelator; // evaluate <<cos[psi1+psi2-2phi3)]>>, where psi1 and psi2 are two POIs   
143   Bool_t fPrintOnTheScreen; // print or not on the screen
144   // 1.) Common:
145   AliFlowCommonHist *fCommonHists; // common control histograms (filled only with events with 3 or more tracks for 3-p correlators) 
146   Int_t fnBinsPhi; // number of phi bins
147   Double_t fPhiMin; // minimum phi   
148   Double_t fPhiMax; // maximum phi 
149   Double_t fPhiBinWidth; // bin width for phi histograms  
150   Int_t fnBinsPt; // number of pt bins
151   Double_t fPtMin; // minimum pt   
152   Double_t fPtMax; // maximum pt  
153   Double_t fPtBinWidth; // bin width for pt histograms  
154   Int_t fnBinsEta; // number of eta bins
155   Double_t fEtaMin; // minimum eta   
156   Double_t fEtaMax; // maximum eta
157   Double_t fEtaBinWidth; // bin width for eta histograms 
158   // 2a.) Particle weights:
159   TList *fWeightsList; // list to hold all histograms with particle weights: fUseParticleWeights, fPhiWeights, fPtWeights and fEtaWeights
160   Bool_t fUsePhiWeights; // use phi weights
161   Bool_t fUsePtWeights; // use pt weights
162   Bool_t fUseEtaWeights; // use eta weights
163   TProfile *fUseParticleWeights; // profile with three bins to hold values of fUsePhiWeights, fUsePtWeights and fUseEtaWeights
164   TH1F *fPhiWeights; // histogram holding phi weights
165   TH1D *fPtWeights; // histogram holding phi weights
166   TH1D *fEtaWeights; // histogram holding phi weights 
167   // 3.) Relative angle distribution (RAD):
168   TList *fListRAD; // list holding objects for calculation of relative angle distribution phi1-phi2 
169   Bool_t fEvaluateNestedLoopsForRAD; // evaluate nested loops for relative angle distribution
170   TH1D *fRelativeAngleDistribution; // distribution of phi1-phi2 for all distinct pairs of particles
171   TH1D *fCharge; // distribution of phi1-phi2 for all distinct pairs of particles
172   // 4.) Debugging and cross-checking QC:
173   TList *fListQC; // list holding objects relevant for debugging and cross-checking of Q-cumulants class
174   Bool_t fEvaluateNestedLoopsForQC; // evaluate nested loops for Q-cumulants
175   // 5.) Debugging and cross-checking MH:
176   TList *fListMH; // list holding objects relevant for debugging and cross-checking of MH class
177   Bool_t fEvaluateNestedLoopsForMH; // evaluate nested loops for mixed harmonics
178   TProfile *f3pCorrelatorPro; // 3-p correlator <<cos[n(phi1+phi2-2phi3)]>>  
179   TProfile *f5pCorrelatorPro; // 5-p correlator <<cos[n(2phi1+2phi2+2phi3-3phi4-3phi5)]>>  
180   TProfile *f3pCorrelatorVsPtSumDiffDirectPro[2]; // differential 3-p correlator cos[n(2phi1-psi2-psi3)] vs [(p1+p2)/2,|p1-p2|]
181   
182   ClassDef(AliFlowAnalysisWithNestedLoops, 0);
183 };
184
185 //================================================================================================================
186
187 #endif
188
189
190
191
192