2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved.
3 * See cxx source for full Copyright notice
7 /***************************************************************
8 * Only in this class nested loops are used for flow analysis. *
9 * Nested loops are used to evaluate: *
11 * a) Distribution of relative angle difference (phi1-phi2); *
12 * b) Cross-check the results for mixed harmonics. *
14 * Author: Ante Bilandzic (abilandzic@gmail.com) *
15 ***************************************************************/
17 #ifndef ALIFLOWANALYSISWITHNESTEDLOOPS_H
18 #define ALIFLOWANALYSISWITHNESTEDLOOPS_H
26 class AliFlowEventSimple;
27 class AliFlowCommonConstants;
28 class AliFlowCommonHist;
29 class AliFlowCommonHistResults;
31 //================================================================================================================
33 class AliFlowAnalysisWithNestedLoops
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():
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();
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;};
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;};
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];};
133 AliFlowAnalysisWithNestedLoops(const AliFlowAnalysisWithNestedLoops& afawQc);
134 AliFlowAnalysisWithNestedLoops& operator=(const AliFlowAnalysisWithNestedLoops& afawQc);
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
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|]
182 ClassDef(AliFlowAnalysisWithNestedLoops, 0);
185 //================================================================================================================