2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved.
3 * See cxx source for full Copyright notice
7 /*************************************************
8 * Flow analysis with cumulants. In this class *
9 * cumulants are calculated by making use of the *
10 * formalism of generating functions proposed by *
13 * Author: Ante Bilandzic *
14 * (abilandzic@gmail.com) *
15 *************************************************/
17 #ifndef ALIFLOWANALYSISWITHCUMULANTS_H
18 #define ALIFLOWANALYSISWITHCUMULANTS_H
20 #include "AliFlowCommonConstants.h"
33 class AliFlowEventSimple;
34 class AliFlowTrackSimple;
35 class AliFlowCommonHist;
36 class AliFlowCommonHistResults;
39 //================================================================================================================
41 class AliFlowAnalysisWithCumulants{
43 AliFlowAnalysisWithCumulants();
44 virtual ~AliFlowAnalysisWithCumulants();
45 // 0.) Methods called in the constructor:
46 virtual void InitializeArrays();
47 // 1.) Method Init() and methods called within Init():
49 virtual void CrossCheckSettings();
50 virtual void AccessConstants();
51 virtual void BookAndNestAllLists();
52 virtual void BookProfileHoldingSettings();
53 virtual void BookCommonHistograms();
54 virtual void BookAndFillWeightsHistograms();
55 virtual void BookEverythingForReferenceFlow();
56 virtual void BookEverythingForDiffFlow();
57 virtual void StoreReferenceFlowFlags();
58 virtual void StoreDiffFlowFlags();
59 virtual void BookEverythingForTuning();
60 // 2.) Method Make() and methods called within Make():
61 virtual void Make(AliFlowEventSimple* anEvent);
62 virtual void CheckPointersUsedInMake();
63 virtual void FillGeneratingFunctionForReferenceFlow(AliFlowEventSimple *anEvent);
64 virtual void FillQvectorComponents(AliFlowEventSimple *anEvent);
65 virtual void FillGeneratingFunctionForDiffFlow(AliFlowEventSimple *anEvent);
66 virtual void FillGeneratingFunctionsForDifferentTuningParameters(AliFlowEventSimple *anEvent);
67 // 3.) Method Finish() and methods called within Finish():
68 virtual void Finish();
69 virtual void CheckPointersUsedInFinish();
70 virtual void AccessSettings();
71 virtual void GetAvMultAndNoOfEvts();
72 virtual void CalculateCumulantsForReferenceFlow();
73 virtual void CalculateReferenceFlow();
74 virtual void CalculateReferenceFlowError();
75 virtual void FillCommonHistResultsForReferenceFlow();
76 virtual void CalculateCumulantsForDiffFlow(TString rpPoi,TString ptEta);
77 virtual void CalculateDifferentialFlow(TString rpPoi,TString ptEta);
78 virtual void CalculateDifferentialFlowErrors(TString rpPoi,TString ptEta);
79 virtual void FillCommonHistResultsForDifferentialFlow(TString rpPoi);
80 virtual void CalculateIntegratedFlow(TString rpPoi); // to be improved (add also possibility to integrate over eta yield)
81 virtual void PrintFinalResults(TString rpPoi);
82 virtual void FinalizeTuning();
83 // 4.) Method GetOutputHistograms() and method called within it:
84 virtual void GetOutputHistograms(TList *outputListHistos);
85 virtual void GetPointersForBaseHistograms();
86 virtual void GetPointersForCommonControlHistograms();
87 virtual void GetPointersForCommonResultsHistograms();
88 virtual void GetPointersForParticleWeightsHistograms();
89 virtual void GetPointersForReferenceFlowObjects();
90 virtual void GetPointersForDiffFlowObjects();
91 virtual void WriteHistograms(TString *outputFileName);
92 virtual void WriteHistograms(TString outputFileName);
93 virtual void WriteHistograms(TDirectoryFile *outputFileName);
96 // 6.) Setters and getters:
98 void SetHistList(TList* const hl) {this->fHistList = hl;}
99 TList* GetHistList() const {return this->fHistList;}
100 void SetHistListName(const char *hln) {this->fHistListName->Append(*hln);};
101 TString *GetHistListName() const {return this->fHistListName;};
102 void SetAnalysisSettings(TProfile* const as) {this->fAnalysisSettings = as;};
103 TProfile* GetAnalysisSettings() const {return this->fAnalysisSettings;};
105 void SetCommonHists(AliFlowCommonHist* const ch) {this->fCommonHists = ch;};
106 AliFlowCommonHist* GetCommonHists() const {return this->fCommonHists;};
107 void SetCommonHistsResults2nd(AliFlowCommonHistResults* const chr2nd) {this->fCommonHistsResults2nd = chr2nd;};
108 AliFlowCommonHistResults* GetCommonHistsResults2nd() const {return this->fCommonHistsResults2nd;};
109 void SetCommonHistsResults4th(AliFlowCommonHistResults* const chr4th) {this->fCommonHistsResults4th = chr4th;};
110 AliFlowCommonHistResults* GetCommonHistsResults4th() const {return this->fCommonHistsResults4th;};
111 void SetCommonHistsResults6th(AliFlowCommonHistResults* const chr6th) {this->fCommonHistsResults6th = chr6th;};
112 AliFlowCommonHistResults* GetCommonHistsResults6th() const {return this->fCommonHistsResults6th;};
113 void SetCommonHistsResults8th(AliFlowCommonHistResults* const chr8th) {this->fCommonHistsResults8th = chr8th;};
114 AliFlowCommonHistResults* GetCommonHistsResults8th() const {return this->fCommonHistsResults8th;};
115 void SetHarmonic(Int_t const harmonic) {this->fHarmonic = harmonic;};
116 Int_t GetHarmonic() const {return this->fHarmonic;};
117 void SetMultiple(Int_t const multiple) {this->fMultiple = multiple;};
118 Int_t GetMultiple() const {return this->fMultiple;};
119 void SetR0(Double_t const r0) {this->fR0 = r0;};
120 Double_t GetR0() const {return this->fR0;};
121 void SetPrintFinalResults(Bool_t const printOrNot, Int_t const i) {this->fPrintFinalResults[i] = printOrNot;};
122 Bool_t GetPrintFinalResults(Int_t i) const {return this->fPrintFinalResults[i];};
123 // 6.2.0.) particle weights:
124 void SetWeightsList(TList* const wlist) {this->fWeightsList = (TList*)wlist->Clone();}
125 TList* GetWeightsList() const {return this->fWeightsList;}
126 void SetUsePhiWeights(Bool_t const uPhiW) {this->fUsePhiWeights = uPhiW;};
127 Bool_t GetUsePhiWeights() const {return this->fUsePhiWeights;};
128 void SetUsePtWeights(Bool_t const uPtW) {this->fUsePtWeights = uPtW;};
129 Bool_t GetUsePtWeights() const {return this->fUsePtWeights;};
130 void SetUseEtaWeights(Bool_t const uEtaW) {this->fUseEtaWeights = uEtaW;};
131 Bool_t GetUseEtaWeights() const {return this->fUseEtaWeights;};
132 void SetUseParticleWeights(TProfile* const uPW) {this->fUseParticleWeights = uPW;};
133 TProfile* GetUseParticleWeights() const {return this->fUseParticleWeights;};
134 void SetPhiWeights(TH1F* const histPhiWeights) {this->fPhiWeights = histPhiWeights;};
135 TH1F* GetPhiWeights() const {return this->fPhiWeights;};
136 void SetPtWeights(TH1D* const histPtWeights) {this->fPtWeights = histPtWeights;};
137 TH1D* GetPtWeights() const {return this->fPtWeights;};
138 void SetEtaWeights(TH1D* const histEtaWeights) {this->fEtaWeights = histEtaWeights;};
139 TH1D* GetEtaWeights() const {return this->fEtaWeights;};
140 // 6.2.1.) event weights:
141 void SetMultiplicityWeight(const char *multiplicityWeight) {*this->fMultiplicityWeight = multiplicityWeight;};
142 // 6.3.) reference flow:
143 void SetReferenceFlowFlags(TProfile* const rff) {this->fReferenceFlowFlags = rff;};
144 TProfile* GetReferenceFlowFlags() const {return this->fReferenceFlowFlags;};
145 void SetnBinsMult(Int_t const nbm) {this->fnBinsMult = nbm;};
146 Int_t GetnBinsMult() const {return this->fnBinsMult;};
147 void SetMinMult(Double_t const minm) {this->fMinMult = minm;};
148 Double_t GetMinMult() const {return this->fMinMult;};
149 void SetMaxMult(Double_t const maxm) {this->fMaxMult = maxm;};
150 Double_t GetMaxMult() const {return this->fMaxMult;};
152 void SetReferenceFlowGenFun(TProfile2D* const rfgf) {this->fReferenceFlowGenFun = rfgf;};
153 TProfile2D* GetReferenceFlowGenFun() const {return this->fReferenceFlowGenFun;};
154 void SetQvectorComponents(TProfile* const qvc) {this->fQvectorComponents = qvc;};
155 TProfile* GetQvectorComponents() const {return this->fQvectorComponents;};
156 void SetAverageOfSquaredWeight(TProfile* const aosw) {this->fAverageOfSquaredWeight = aosw;};
157 TProfile* GetSumOfSquaredWeight() const {return this->fAverageOfSquaredWeight;};
159 void SetReferenceFlowCumulants(TH1D* const rfc) {this->fReferenceFlowCumulants = rfc;};
160 TH1D* GetReferenceFlowCumulants() const {return this->fReferenceFlowCumulants;};
161 void SetReferenceFlow(TH1D* const rf) {this->fReferenceFlow = rf;};
162 TH1D* GetReferenceFlow() const {return this->fReferenceFlow;};
163 void SetChi(TH1D* const c) {this->fChi = c;};
164 TH1D* GetChi() const {return this->fChi;};
165 // 6.4.) differential flow:
166 void SetDiffFlowFlags(TProfile* const dff) {this->fDiffFlowFlags = dff;};
167 TProfile* GetDiffFlowFlags() const {return this->fDiffFlowFlags;};
169 void SetDiffFlowGenFun(TProfile3D* const dfgf, Int_t const ri, Int_t const rp, Int_t const pe) {this->fDiffFlowGenFun[ri][rp][pe] = dfgf;};
170 TProfile3D* GetDiffFlowGenFun(Int_t const ri, Int_t const rp, Int_t const pe) const {return this->fDiffFlowGenFun[ri][rp][pe];};
171 void SetNoOfParticlesInBin(TProfile* const nopib, Int_t const rp, Int_t const pe) {this->fNoOfParticlesInBin[rp][pe] = nopib;};
172 TProfile* GetNoOfParticlesInBin(Int_t const rp, Int_t const pe) const {return this->fNoOfParticlesInBin[rp][pe];};
174 void SetDiffFlowCumulants(TH1D* const dfc, Int_t const rp, Int_t const pe, Int_t const co) {this->fDiffFlowCumulants[rp][pe][co] = dfc;};
175 TH1D* GetDiffFlowCumulants(Int_t const rp, Int_t const pe, Int_t const co) const {return this->fDiffFlowCumulants[rp][pe][co];};
176 void SetDiffFlow(TH1D* const df, Int_t const rp, Int_t const pe, Int_t const co) {this->fDiffFlow[rp][pe][co] = df;};
177 TH1D* GetDiffFlow(Int_t const rp, Int_t const pe, Int_t const co) const {return this->fDiffFlow[rp][pe][co];};
178 // 6.x.) Tuning the interpolating parameter r0 and using cutoff at different order in series:
179 void SetTuningFlags(TProfile* const tf) {this->fTuningFlags = tf;};
180 TProfile* GetTuningFlags() const {return this->fTuningFlags;};
181 void SetTuneParameters(Bool_t const tp) {this->fTuneParameters = tp;};
182 Bool_t GetTuneParameters() const {return this->fTuneParameters;};
183 void SetTuningR0(Double_t const tr0, Int_t const r) {this->fTuningR0[r] = tr0;};
184 Double_t GetTuningR0(Int_t const r) const {return this->fTuningR0[r];};
186 void SetTuningGenFun(TProfile2D* const tgf, Int_t const r, Int_t const pq) {this->fTuningGenFun[r][pq] = tgf;};
187 TProfile2D* GetTuningGenFun(Int_t const r, Int_t const pq) const {return this->fTuningGenFun[r][pq];};
189 void SetTuningCumulants(TH1D* const tc, Int_t const r, Int_t const pq) {this->fTuningCumulants[r][pq] = tc;};
190 TH1D* GetTuningCumulants(Int_t const r, Int_t const pq) const {return this->fTuningCumulants[r][pq];};
191 void SetTuningFlow(TH1D* const tf, Int_t const r, Int_t const pq) {this->fTuningFlow[r][pq] = tf;};
192 TH1D* GetTuningFlow(Int_t const r, Int_t const pq) const {return this->fTuningFlow[r][pq];};
195 AliFlowAnalysisWithCumulants(const AliFlowAnalysisWithCumulants& afawc);
196 AliFlowAnalysisWithCumulants& operator=(const AliFlowAnalysisWithCumulants& afawc);
198 TList *fHistList; // base list to hold all output objects
199 TString *fHistListName; // name of base list
200 TProfile *fAnalysisSettings; // profile to hold analysis settings
202 AliFlowCommonHist *fCommonHists; // common control histograms (filled only with events with 3 or more tracks for 3-p correlators)
203 AliFlowCommonHistResults *fCommonHistsResults2nd; // common result histograms for 2nd order cumulant
204 AliFlowCommonHistResults *fCommonHistsResults4th; // common result histograms for 4th order cumulant
205 AliFlowCommonHistResults *fCommonHistsResults6th; // common result histograms for 6th order cumulant
206 AliFlowCommonHistResults *fCommonHistsResults8th; // common result histograms for 8th order cumulant
207 Int_t fnBinsPhi; // number of phi bins
208 Double_t fPhiMin; // minimum phi
209 Double_t fPhiMax; // maximum phi
210 Double_t fPhiBinWidth; // bin width for phi histograms
211 Int_t fnBinsPt; // number of pt bins
212 Double_t fPtMin; // minimum pt
213 Double_t fPtMax; // maximum pt
214 Double_t fPtBinWidth; // bin width for pt histograms
215 Int_t fnBinsEta; // number of eta bins
216 Double_t fEtaMin; // minimum eta
217 Double_t fEtaMax; // maximum eta
218 Double_t fEtaBinWidth; // bin width for eta histograms
219 Int_t fHarmonic; // harmonic
220 Int_t fMultiple; // the multiple m in p=m*n, where n is harmonic (relevant for differential flow)
221 Double_t fR0; // r_{0} parameter
222 Bool_t fPrintFinalResults[3]; // print on the screen the final results [0=RF,1=RP,2=POI]
223 // 2a.) Particle weights:
224 TList *fWeightsList; // list to hold all histograms with particle weights: fUseParticleWeights, fPhiWeights, fPtWeights and fEtaWeights
225 Bool_t fUsePhiWeights; // use phi weights
226 Bool_t fUsePtWeights; // use pt weights
227 Bool_t fUseEtaWeights; // use eta weights
228 TProfile *fUseParticleWeights; // profile with three bins to hold values of fUsePhiWeights, fUsePtWeights and fUseEtaWeights
229 TH1F *fPhiWeights; // histogram holding phi weights
230 TH1D *fPtWeights; // histogram holding phi weights
231 TH1D *fEtaWeights; // histogram holding phi weights
232 // 2b.) Event weights:
233 TString *fMultiplicityWeight; // event-by-event weight for reference flow generating function (can be "unit" or "multiplicity")
234 // 3.) Reference flow:
236 TList *fReferenceFlowList; // list to hold all histograms and profiles relevant for reference flow
237 TList *fReferenceFlowProfiles; // list to hold all profiles relevant for reference flow
238 TList *fReferenceFlowResults; // list to hold all histograms with final results relevant for reference flow
240 TProfile *fReferenceFlowFlags; // profile to hold all flags for reference flow
241 Int_t fnBinsMult; // number of multiplicity bins for flow analysis versus multiplicity
242 Double_t fMinMult; // minimal multiplicity for flow analysis versus multiplicity
243 Double_t fMaxMult; // maximal multiplicity for flow analysis versus multiplicity
244 // 3c.) event-by-event quantities:
245 TMatrixD *fGEBE; // reference flow generating function only for current event
247 TProfile2D *fReferenceFlowGenFun; // all-event average of the generating function used to calculate reference flow
248 TProfile *fQvectorComponents; // averages of Q-vector components (1st bin: <Q_x>, 2nd bin: <Q_y>, 3rd bin: <(Q_x)^2>, 4th bin: <(Q_y)^2>)
249 TProfile *fAverageOfSquaredWeight; // <<w^2>>, where w = wPhi*wPt*wEta
251 Double_t fAvM; // average multiplicity
252 Int_t fnEvts; // number of events
253 TH1D *fReferenceFlowCumulants; // final results for isotropic cumulants for reference flow
254 TH1D *fReferenceFlow; // final results for reference flow
255 TH1D *fChi; // final results for resolution
256 // 4.) Differential flow:
258 TList *fDiffFlowList; // list to hold all histograms and profiles relevant for differential flow
259 TList *fDiffFlowProfiles; // list to hold all profiles relevant for differential flow
260 TList *fDiffFlowResults; // list to hold all histograms with final results relevant for differential flow
262 TProfile *fDiffFlowFlags; // profile to hold all flags for reference flow
264 TProfile3D *fDiffFlowGenFun[2][2][2]; // all-event avarage of generating function used for differential flow [0=Re,1=Im][0=RP,1=POI][0=pt,1=eta]
265 TProfile *fNoOfParticlesInBin[2][2]; // number of particles in pt/eta bin for RPs/POIs [0=RP,1=POI][0=pt,1=eta]
267 TH1D *fDiffFlowCumulants[2][2][4]; // isotropic differential flow cumulants [0=RP,1=POI][0=pt,1=eta][cumulant order]
268 TH1D *fDiffFlow[2][2][4]; // differential flow [0=RP,1=POI][0=pt,1=eta][cumulant order]
269 // x.) Tuning the interpolating parameter r0 and using cutoff at different order in series:
271 TList *fTuningList; // list to hold all histograms and profiles relevant for tuning
272 TList *fTuningProfiles; // list to hold all profiles relevant for tuning
273 TList *fTuningResults; // list to hold all histograms with final results relevant for tuning
275 TProfile *fTuningFlags; // profile to hold all flags for tuning
276 Bool_t fTuneParameters; // tune r0 and cut series at different order
277 Double_t fTuningR0[10]; // different r0 values (at maximum 10 different values allowed)
279 TProfile2D *fTuningGenFun[10][5]; // generating function G evaluated for 10 different r0s and 5 different sets of (pmax,qmax)
281 TH1D *fTuningCumulants[10][5]; // isotropic cumulants for reference flow for 10 different r0s and 5 different sets of (pmax,qmax)
282 TH1D *fTuningFlow[10][5]; // reference flow for 10 different r0s and 5 different sets of (pmax,qmax)
284 ClassDef(AliFlowAnalysisWithCumulants, 0);
288 //================================================================================================================