]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG/FLOW/Base/AliFlowAnalysisWithMixedHarmonics.cxx
Changes to the DEtaDPhi corr fun (making 0 in the center of the bin in the histogram...
[u/mrichter/AliRoot.git] / PWG / FLOW / Base / AliFlowAnalysisWithMixedHarmonics.cxx
CommitLineData
489d5531 1/*************************************************************************
2* Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *
3* *
4* Author: The ALICE Off-line Project. *
5* Contributors are mentioned in the code where appropriate. *
6* *
7* Permission to use, copy, modify and distribute this software and its *
8* documentation strictly for non-commercial purposes is hereby granted *
9* without fee, provided that the above copyright notice appears in all *
10* copies and that both the copyright notice and this permission notice *
11* appear in the supporting documentation. The authors make no claims *
12* about the suitability of this software for any purpose. It is *
13* provided "as is" without express or implied warranty. *
d66d46f7 14**************************************************************************/
15
489d5531 16/* $Id$ */
17
d66d46f7 18/**********************************************************
19 * In this class azimuthal correlators in mixed harmonics *
20 * are implemented in terms of Q-vectors. This approach *
21 * doesn't require evaluation of nested loops. This class *
22 * can be used to: *
23 * *
24 * a) Extract subdominant harmonics (like v1 and v4); *
5c078806 25 * b) Study flow of two-particle resonances; *
26 * c) Study strong parity violation. *
d66d46f7 27 * *
28 * Author: Ante Bilandzic (abilandzic@gmail.com) *
489d5531 29 *********************************************************/
30
31#define AliFlowAnalysisWithMixedHarmonics_cxx
32
33#include "Riostream.h"
34#include "AliFlowCommonConstants.h"
35#include "AliFlowCommonHist.h"
36#include "AliFlowCommonHistResults.h"
37
38#include "TMath.h"
39#include "TFile.h"
40#include "TList.h"
d66d46f7 41#include "TProfile.h"
489d5531 42#include "TProfile2D.h"
43
44#include "AliFlowEventSimple.h"
45#include "AliFlowTrackSimple.h"
46#include "AliFlowAnalysisWithMixedHarmonics.h"
47
48class TH1;
49class TList;
3a7af7bd 50
51using std::endl;
52using std::cout;
489d5531 53ClassImp(AliFlowAnalysisWithMixedHarmonics)
54
d66d46f7 55//================================================================================================================
489d5531 56AliFlowAnalysisWithMixedHarmonics::AliFlowAnalysisWithMixedHarmonics():
d66d46f7 57fHistList(NULL),
489d5531 58fHistListName(NULL),
e999459d 59fHarmonic(1),
d66d46f7 60fAnalysisLabel(NULL),
61fAnalysisSettings(NULL),
b71a354b 62fNoOfMultipicityBins(100),
63fMultipicityBinWidth(1),
64fMinMultiplicity(3),
e999459d 65fOppositeChargesPOI(kFALSE),
66fEvaluateDifferential3pCorrelator(kFALSE),
b71a354b 67fCorrectForDetectorEffects(kFALSE),
5c078806 68fPrintOnTheScreen(kTRUE),
b71a354b 69fCalculateVsM(kFALSE),
70fShowBinLabelsVsM(kFALSE),
d66d46f7 71fCommonHists(NULL),
489d5531 72fnBinsPhi(0),
73fPhiMin(0),
74fPhiMax(0),
75fPhiBinWidth(0),
76fnBinsPt(0),
77fPtMin(0),
78fPtMax(0),
79fPtBinWidth(0),
80fnBinsEta(0),
81fEtaMin(0),
82fEtaMax(0),
d66d46f7 83fEtaBinWidth(0),
50040ed6 84fCommonConstants(NULL),
489d5531 85fWeightsList(NULL),
86fUsePhiWeights(kFALSE),
87fUsePtWeights(kFALSE),
88fUseEtaWeights(kFALSE),
89fUseParticleWeights(NULL),
90fPhiWeights(NULL),
91fPtWeights(NULL),
d66d46f7 92fEtaWeights(NULL),
489d5531 93fReQnk(NULL),
94fImQnk(NULL),
d66d46f7 95fSpk(NULL),
ecac11c2 96fProfileList(NULL),
d66d46f7 97f3pCorrelatorPro(NULL),
97d82c42 98f5pCorrelatorPro(NULL),
d66d46f7 99fNonIsotropicTermsPro(NULL),
100f3pCorrelatorVsMPro(NULL),
41e6d9e4 101f3pPOICorrelatorVsM(NULL),
d66d46f7 102fNonIsotropicTermsVsMPro(NULL),
50040ed6 103fNonIsotropicTermsList(NULL),
debab807 104f2pCorrelatorCosPsiDiffPtDiff(NULL),
105f2pCorrelatorCosPsiSumPtDiff(NULL),
106f2pCorrelatorSinPsiDiffPtDiff(NULL),
107f2pCorrelatorSinPsiSumPtDiff(NULL),
108f2pCorrelatorCosPsiDiffPtSum(NULL),
109f2pCorrelatorCosPsiSumPtSum(NULL),
110f2pCorrelatorSinPsiDiffPtSum(NULL),
111f2pCorrelatorSinPsiSumPtSum(NULL),
112f2pCorrelatorCosPsiDiffEtaDiff(NULL),
113f2pCorrelatorCosPsiSumEtaDiff(NULL),
114f2pCorrelatorSinPsiDiffEtaDiff(NULL),
115f2pCorrelatorSinPsiSumEtaDiff(NULL),
116f2pCorrelatorCosPsiDiffEtaSum(NULL),
117f2pCorrelatorCosPsiSumEtaSum(NULL),
118f2pCorrelatorSinPsiDiffEtaSum(NULL),
119f2pCorrelatorSinPsiSumEtaSum(NULL),
d66d46f7 120fResultsList(NULL),
121f3pCorrelatorHist(NULL),
122fDetectorBiasHist(NULL),
e558a733 123f3pCorrelatorVsMHist(NULL),
e409ac85 124fDetectorBiasVsMHist(NULL)
489d5531 125{
126 // Constructor.
5c078806 127
128 // Base list to hold all output objects:
d66d46f7 129 fHistList = new TList();
489d5531 130 fHistListName = new TString("cobjMH");
131 fHistList->SetName(fHistListName->Data());
d66d46f7 132 fHistList->SetOwner(kTRUE);
133
489d5531 134 // List to hold histograms with phi, pt and eta weights:
d66d46f7 135 fWeightsList = new TList();
136
ecac11c2 137 // List to hold all all-event profiles:
138 fProfileList = new TList();
139
50040ed6 140 // List to hold profiles with all non-isotropic terms for diff. correlators:
141 fNonIsotropicTermsList = new TList();
142
489d5531 143 // List to hold objects with final results:
d66d46f7 144 fResultsList = new TList();
5c078806 145
146 // Initialize all arrays:
147 this->InitializeArrays();
489d5531 148
149} // AliFlowAnalysisWithMixedHarmonics::AliFlowAnalysisWithMixedHarmonics()
150
151//================================================================================================================
152
153AliFlowAnalysisWithMixedHarmonics::~AliFlowAnalysisWithMixedHarmonics()
154{
155 // Destructor.
156
157 delete fHistList;
158
159} // end of AliFlowAnalysisWithMixedHarmonics::~AliFlowAnalysisWithMixedHarmonics()
160
161//================================================================================================================
162
163void AliFlowAnalysisWithMixedHarmonics::Init()
d66d46f7 164{
165 // Initialize and book all objects.
166
167 // a) Cross check if the user settings make sense before starting;
168 // b) Access all common constants;
489d5531 169 // c) Book and nest all lists in the base list fHistList;
d66d46f7 170 // d) Book common control histograms;
171 // e) Book all event-by-event quantities;
172 // f) Book all all-event quantities;
5c078806 173 // g) Book and fill histograms to hold phi, pt and eta weights;
e999459d 174 // h) Store harmonic n used in cos[n*(phi1+phi2-2phi3)] and cos[n*(psi1+psi2-2phi3)].
5c078806 175
489d5531 176 //save old value and prevent histograms from being added to directory
177 //to avoid name clashes in case multiple analaysis objects are used
178 //in an analysis
179 Bool_t oldHistAddStatus = TH1::AddDirectoryStatus();
180 TH1::AddDirectory(kFALSE);
181
5c078806 182 TH1::SetDefaultSumw2();
183
489d5531 184 this->CrossCheckSettings();
50040ed6 185 this->AccessConstants("Init");
d66d46f7 186 this->BookAndNestAllLists();
489d5531 187 this->BookProfileHoldingSettings();
d66d46f7 188 this->BookCommonHistograms();
189 this->BookAllEventByEventQuantities();
190 this->BookAllAllEventQuantities();
489d5531 191 this->BookAndFillWeightsHistograms();
e999459d 192 this->StoreHarmonic();
489d5531 193
194 TH1::AddDirectory(oldHistAddStatus);
5c078806 195
489d5531 196} // end of void AliFlowAnalysisWithMixedHarmonics::Init()
197
198//================================================================================================================
199
200void AliFlowAnalysisWithMixedHarmonics::Make(AliFlowEventSimple* anEvent)
201{
202 // Running over data only in this method.
d66d46f7 203
5c078806 204 // a) Check all pointers used in this method;
205 // b) Define local variables;
206 // c) Fill common control histograms;
207 // d) Loop over data and calculate e-b-e quantities Q_{n,k} and S_{p,k};
e999459d 208 // e) Calculate 3-p azimuthal correlator cos[n(phi1+phi2-2*phi3)] and non-isotropic terms in terms of Q_{n,k} and S_{p,k};
209 // f) Calculate differential 3-p azimuthal correlator cos[n(psi1+psi2-2*phi3)] in terms of Q_{2n} and p_{n}:
5c078806 210 // g) Reset all event-by-event quantities.
d66d46f7 211
5c078806 212 // a) Check all pointers used in this method:
d66d46f7 213 this->CheckPointersUsedInMake();
214
5c078806 215 // b) Define local variables:
489d5531 216 Double_t dPhi = 0.; // azimuthal angle in the laboratory frame
217 Double_t dPt = 0.; // transverse momentum
218 Double_t dEta = 0.; // pseudorapidity
219 Double_t wPhi = 1.; // phi weight
220 Double_t wPt = 1.; // pt weight
d66d46f7 221 Double_t wEta = 1.; // eta weight
222 AliFlowTrackSimple *aftsTrack = NULL; // simple track
223
5c078806 224 // c) Fill common control histograms:
d66d46f7 225 fCommonHists->FillControlHistograms(anEvent);
226
5c078806 227 // d) Loop over data and calculate e-b-e quantities:
e999459d 228 Int_t nPrim = anEvent->NumberOfTracks(); // nPrim = total number of primary tracks, i.e. nPrim = nRP + nPOI
489d5531 229 // nRP = # of particles used to determine the reaction plane ("Reference Particles");
230 // nPOI = # of particles of interest for a detailed flow analysis ("Particles of Interest");
41e6d9e4 231
232 Int_t nRefMult = anEvent->GetReferenceMultiplicity();
233
d66d46f7 234 // Start loop over data:
489d5531 235 for(Int_t i=0;i<nPrim;i++)
236 {
237 aftsTrack=anEvent->GetTrack(i);
238 if(aftsTrack)
239 {
240 if(!(aftsTrack->InRPSelection() || aftsTrack->InPOISelection())) continue; // consider only tracks which are either RPs or POIs
e999459d 241 Int_t n = fHarmonic;
489d5531 242 if(aftsTrack->InRPSelection()) // checking RP condition:
243 {
244 dPhi = aftsTrack->Phi();
245 dPt = aftsTrack->Pt();
246 dEta = aftsTrack->Eta();
247 if(fUsePhiWeights && fPhiWeights && fnBinsPhi) // determine phi-weight for this particle:
248 {
249 wPhi = fPhiWeights->GetBinContent(1+(Int_t)(TMath::Floor(dPhi*fnBinsPhi/TMath::TwoPi())));
250 }
251 if(fUsePtWeights && fPtWeights && fnBinsPt) // determine pt-weight for this particle:
252 {
253 wPt = fPtWeights->GetBinContent(1+(Int_t)(TMath::Floor((dPt-fPtMin)/fPtBinWidth)));
254 }
255 if(fUseEtaWeights && fEtaWeights && fEtaBinWidth) // determine eta-weight for this particle:
256 {
257 wEta = fEtaWeights->GetBinContent(1+(Int_t)(TMath::Floor((dEta-fEtaMin)/fEtaBinWidth)));
258 }
97d82c42 259 // Calculate Re[Q_{m,k}] and Im[Q_{m,k}], (m = 1,2,3,4,5,6 and k = 0,1,2,3) for this event:
260 for(Int_t m=0;m<6;m++)
489d5531 261 {
e999459d 262 for(Int_t k=0;k<4;k++) // to be improved (what is the maximum k that I need?)
489d5531 263 {
264 (*fReQnk)(m,k)+=pow(wPhi*wPt*wEta,k)*TMath::Cos((m+1)*n*dPhi);
265 (*fImQnk)(m,k)+=pow(wPhi*wPt*wEta,k)*TMath::Sin((m+1)*n*dPhi);
266 }
267 }
268 // Calculate partially S_{p,k} for this event (final calculation of S_{p,k} follows after the loop over data bellow):
269 for(Int_t p=0;p<4;p++) // to be improved (what is maximum p that I need?)
270 {
271 for(Int_t k=0;k<4;k++) // to be improved (what is maximum k that I need?)
272 {
273 (*fSpk)(p,k)+=pow(wPhi*wPt*wEta,k);
274 }
275 }
5c078806 276 } // end of if(aftsTrack->InRPSelection())
277 // POIs:
e999459d 278 if(fEvaluateDifferential3pCorrelator)
5c078806 279 {
e999459d 280 if(aftsTrack->InPOISelection()) // 1st POI
5c078806 281 {
e999459d 282 Double_t dPsi1 = aftsTrack->Phi();
283 Double_t dPt1 = aftsTrack->Pt();
41e6d9e4 284 Double_t dEta1 = aftsTrack->Eta();
e999459d 285 Int_t iCharge1 = aftsTrack->Charge();
286 Bool_t b1stPOIisAlsoRP = kFALSE;
287 if(aftsTrack->InRPSelection()){b1stPOIisAlsoRP = kTRUE;}
288 for(Int_t j=0;j<nPrim;j++)
5c078806 289 {
e999459d 290 if(j==i){continue;}
291 aftsTrack=anEvent->GetTrack(j);
292 if(aftsTrack->InPOISelection()) // 2nd POI
293 {
294 Double_t dPsi2 = aftsTrack->Phi();
295 Double_t dPt2 = aftsTrack->Pt();
41e6d9e4 296 Double_t dEta2 = aftsTrack->Eta();
e999459d 297 Int_t iCharge2 = aftsTrack->Charge();
298 if(fOppositeChargesPOI && iCharge1 == iCharge2){continue;}
299 Bool_t b2ndPOIisAlsoRP = kFALSE;
300 if(aftsTrack->InRPSelection()){b2ndPOIisAlsoRP = kTRUE;}
41e6d9e4 301
302 // Fill:Pt
e999459d 303 fRePEBE[0]->Fill((dPt1+dPt2)/2.,TMath::Cos(n*(dPsi1+dPsi2)),1.);
304 fImPEBE[0]->Fill((dPt1+dPt2)/2.,TMath::Sin(n*(dPsi1+dPsi2)),1.);
305 fRePEBE[1]->Fill(TMath::Abs(dPt1-dPt2),TMath::Cos(n*(dPsi1+dPsi2)),1.);
306 fImPEBE[1]->Fill(TMath::Abs(dPt1-dPt2),TMath::Sin(n*(dPsi1+dPsi2)),1.);
41e6d9e4 307
308 // Fill:Eta
309 fReEtaEBE[0]->Fill((dEta1+dEta2)/2.,TMath::Cos(n*(dPsi1+dPsi2)),1.);
310 fImEtaEBE[0]->Fill((dEta1+dEta2)/2.,TMath::Sin(n*(dPsi1+dPsi2)),1.);
311 fReEtaEBE[1]->Fill(TMath::Abs(dEta1-dEta2),TMath::Cos(n*(dPsi1+dPsi2)),1.);
312 fImEtaEBE[1]->Fill(TMath::Abs(dEta1-dEta2),TMath::Sin(n*(dPsi1+dPsi2)),1.);
313
debab807 314 //=========================================================//
315 //2particle correlator <cos(n*(psi1 - ps12))> vs |Pt1-Pt2|
316 f2pCorrelatorCosPsiDiffPtDiff->Fill(TMath::Abs(dPt1-dPt2),TMath::Cos(n*(dPsi1-dPsi2)));
317 f2pCorrelatorCosPsiSumPtDiff->Fill(TMath::Abs(dPt1-dPt2),TMath::Cos(n*(dPsi1+dPsi2)));
318 f2pCorrelatorSinPsiDiffPtDiff->Fill(TMath::Abs(dPt1-dPt2),TMath::Sin(n*(dPsi1-dPsi2)));
319 f2pCorrelatorSinPsiSumPtDiff->Fill(TMath::Abs(dPt1-dPt2),TMath::Sin(n*(dPsi1+dPsi2)));
320 //_______________________________________________________//
321 //2particle correlator <cos(n*(psi1 - ps12))> vs (Pt1+Pt2)/2
322 f2pCorrelatorCosPsiDiffPtSum->Fill((dPt1+dPt2)/2.,TMath::Cos(n*(dPsi1-dPsi2)));
323 f2pCorrelatorCosPsiSumPtSum->Fill((dPt1+dPt2)/2.,TMath::Cos(n*(dPsi1+dPsi2)));
324 f2pCorrelatorSinPsiDiffPtSum->Fill((dPt1+dPt2)/2.,TMath::Sin(n*(dPsi1-dPsi2)));
325 f2pCorrelatorSinPsiSumPtSum->Fill((dPt1+dPt2)/2.,TMath::Sin(n*(dPsi1+dPsi2)));
326 //_______________________________________________________//
327 //2particle correlator <cos(n*(psi1 - ps12))> vs |eta1-eta2|
328 f2pCorrelatorCosPsiDiffEtaDiff->Fill(TMath::Abs(dEta1-dEta2),TMath::Cos(n*(dPsi1-dPsi2)));
329 f2pCorrelatorCosPsiSumEtaDiff->Fill(TMath::Abs(dEta1-dEta2),TMath::Cos(n*(dPsi1+dPsi2)));
330 f2pCorrelatorSinPsiDiffEtaDiff->Fill(TMath::Abs(dEta1-dEta2),TMath::Sin(n*(dPsi1-dPsi2)));
331 f2pCorrelatorSinPsiSumEtaDiff->Fill(TMath::Abs(dEta1-dEta2),TMath::Sin(n*(dPsi1+dPsi2)));
332 //_______________________________________________________//
333 //2particle correlator <cos(n*(psi1 - ps12))> vs (Pt1+Pt2)/2
334 f2pCorrelatorCosPsiDiffEtaSum->Fill((dEta1+dEta2)/2.,TMath::Cos(n*(dPsi1-dPsi2)));
335 f2pCorrelatorCosPsiSumEtaSum->Fill((dEta1+dEta2)/2.,TMath::Cos(n*(dPsi1+dPsi2)));
336 f2pCorrelatorSinPsiDiffEtaSum->Fill((dEta1+dEta2)/2.,TMath::Sin(n*(dPsi1-dPsi2)));
337 f2pCorrelatorSinPsiSumEtaSum->Fill((dEta1+dEta2)/2.,TMath::Sin(n*(dPsi1+dPsi2)));
338 //=========================================================//
41e6d9e4 339
50040ed6 340 // non-isotropic terms, 1st POI:
341 fReNITEBE[0][0][0]->Fill((dPt1+dPt2)/2.,TMath::Cos(n*(dPsi1)),1.);
342 fReNITEBE[0][0][1]->Fill(TMath::Abs(dPt1-dPt2),TMath::Cos(n*(dPsi1)),1.);
343 fReNITEBE[0][0][2]->Fill((dEta1+dEta2)/2.,TMath::Cos(n*(dPsi1)),1.);
344 fReNITEBE[0][0][3]->Fill(TMath::Abs(dEta1-dEta2),TMath::Cos(n*(dPsi1)),1.);
345 fImNITEBE[0][0][0]->Fill((dPt1+dPt2)/2.,TMath::Sin(n*(dPsi1)),1.);
346 fImNITEBE[0][0][1]->Fill(TMath::Abs(dPt1-dPt2),TMath::Sin(n*(dPsi1)),1.);
347 fImNITEBE[0][0][2]->Fill((dEta1+dEta2)/2.,TMath::Sin(n*(dPsi1)),1.);
348 fImNITEBE[0][0][3]->Fill(TMath::Abs(dEta1-dEta2),TMath::Sin(n*(dPsi1)),1.);
349 // non-isotropic terms, 2nd POI:
350 fReNITEBE[1][0][0]->Fill((dPt1+dPt2)/2.,TMath::Cos(n*(dPsi2)),1.);
351 fReNITEBE[1][0][1]->Fill(TMath::Abs(dPt1-dPt2),TMath::Cos(n*(dPsi2)),1.);
352 fReNITEBE[1][0][2]->Fill((dEta1+dEta2)/2.,TMath::Cos(n*(dPsi2)),1.);
353 fReNITEBE[1][0][3]->Fill(TMath::Abs(dEta1-dEta2),TMath::Cos(n*(dPsi2)),1.);
354 fImNITEBE[1][0][0]->Fill((dPt1+dPt2)/2.,TMath::Sin(n*(dPsi2)),1.);
355 fImNITEBE[1][0][1]->Fill(TMath::Abs(dPt1-dPt2),TMath::Sin(n*(dPsi2)),1.);
356 fImNITEBE[1][0][2]->Fill((dEta1+dEta2)/2.,TMath::Sin(n*(dPsi2)),1.);
357 fImNITEBE[1][0][3]->Fill(TMath::Abs(dEta1-dEta2),TMath::Sin(n*(dPsi2)),1.);
358
e999459d 359 if(b1stPOIisAlsoRP)
360 {
361 fOverlapEBE[0][0]->Fill((dPt1+dPt2)/2.,TMath::Cos(n*(dPsi1-dPsi2)),1.);
362 fOverlapEBE[0][1]->Fill(TMath::Abs(dPt1-dPt2),TMath::Cos(n*(dPsi1-dPsi2)),1.);
41e6d9e4 363 fOverlapEBE2[0][0]->Fill((dEta1+dEta2)/2.,TMath::Cos(n*(dPsi1-dPsi2)),1.);
364 fOverlapEBE2[0][1]->Fill(TMath::Abs(dEta1-dEta2),TMath::Cos(n*(dPsi1-dPsi2)),1.);
50040ed6 365 // non-isotropic terms, 1st POI:
366 fReNITEBE[0][1][0]->Fill((dPt1+dPt2)/2.,TMath::Cos(n*(dPsi1)),1.);
367 fReNITEBE[0][1][1]->Fill(TMath::Abs(dPt1-dPt2),TMath::Cos(n*(dPsi1)),1.);
368 fReNITEBE[0][1][2]->Fill((dEta1+dEta2)/2.,TMath::Cos(n*(dPsi1)),1.);
369 fReNITEBE[0][1][3]->Fill(TMath::Abs(dEta1-dEta2),TMath::Cos(n*(dPsi1)),1.);
370 fImNITEBE[0][1][0]->Fill((dPt1+dPt2)/2.,TMath::Sin(n*(dPsi1)),1.);
371 fImNITEBE[0][1][1]->Fill(TMath::Abs(dPt1-dPt2),TMath::Sin(n*(dPsi1)),1.);
372 fImNITEBE[0][1][2]->Fill((dEta1+dEta2)/2.,TMath::Sin(n*(dPsi1)),1.);
373 fImNITEBE[0][1][3]->Fill(TMath::Abs(dEta1-dEta2),TMath::Sin(n*(dPsi1)),1.);
e999459d 374 }
375 if(b2ndPOIisAlsoRP)
376 {
377 fOverlapEBE[1][0]->Fill((dPt1+dPt2)/2.,TMath::Cos(n*(dPsi1-dPsi2)),1.);
378 fOverlapEBE[1][1]->Fill(TMath::Abs(dPt1-dPt2),TMath::Cos(n*(dPsi1-dPsi2)),1.);
41e6d9e4 379 fOverlapEBE2[1][0]->Fill((dEta1+dEta2)/2.,TMath::Cos(n*(dPsi1-dPsi2)),1.);
380 fOverlapEBE2[1][1]->Fill(TMath::Abs(dEta1-dEta2),TMath::Cos(n*(dPsi1-dPsi2)),1.);
50040ed6 381 // non-isotropic terms, 2nd POI:
382 fReNITEBE[1][1][0]->Fill((dPt1+dPt2)/2.,TMath::Cos(n*(dPsi2)),1.);
383 fReNITEBE[1][1][1]->Fill(TMath::Abs(dPt1-dPt2),TMath::Cos(n*(dPsi2)),1.);
384 fReNITEBE[1][1][2]->Fill((dEta1+dEta2)/2.,TMath::Cos(n*(dPsi2)),1.);
385 fReNITEBE[1][1][3]->Fill(TMath::Abs(dEta1-dEta2),TMath::Cos(n*(dPsi2)),1.);
386 fImNITEBE[1][1][0]->Fill((dPt1+dPt2)/2.,TMath::Sin(n*(dPsi2)),1.);
387 fImNITEBE[1][1][1]->Fill(TMath::Abs(dPt1-dPt2),TMath::Sin(n*(dPsi2)),1.);
388 fImNITEBE[1][1][2]->Fill((dEta1+dEta2)/2.,TMath::Sin(n*(dPsi2)),1.);
389 fImNITEBE[1][1][3]->Fill(TMath::Abs(dEta1-dEta2),TMath::Sin(n*(dPsi2)),1.);
e999459d 390 }
391 } // end of if(aftsTrack->InPOISelection()) // 2nd POI
392 } // end of for(Int_t j=i+1;j<nPrim;j++)
393 } // end of if(aftsTrack->InPOISelection()) // 1st POI
394 } // end of if(fEvaluateDifferential3pCorrelator)
489d5531 395 } else // to if(aftsTrack)
396 {
397 cout<<endl;
e999459d 398 cout<<" WARNING (MH): No particle! (i.e. aftsTrack is a NULL pointer in Make().)"<<endl;
489d5531 399 cout<<endl;
400 }
401 } // end of for(Int_t i=0;i<nPrim;i++)
402
403 // Calculate the final expressions for S_{p,k}:
404 for(Int_t p=0;p<4;p++) // to be improved (what is maximum p that I need?)
405 {
e999459d 406 for(Int_t k=0;k<4;k++) // to be improved (what is maximum k that I need?)
489d5531 407 {
408 (*fSpk)(p,k)=pow((*fSpk)(p,k),p+1);
409 }
d66d46f7 410 }
411
e999459d 412 // e) Calculate 3-p correlator cos[n(phi1+phi2-2*phi3)] in terms of Q_{n,k} and S_{p,k}:
d66d46f7 413 if(anEvent->GetEventNSelTracksRP() >= 3)
414 {
415 this->Calculate3pCorrelator();
d66d46f7 416 this->CalculateNonIsotropicTerms();
97d82c42 417 if(anEvent->GetEventNSelTracksRP() >= 5)
418 {
419 this->Calculate5pCorrelator();
420 } // end of if(anEvent->GetEventNSelTracksRP() >= 5)
421 } // end of if(anEvent->GetEventNSelTracksRP() >= 3)
d66d46f7 422
e999459d 423 // f) Calculate differential 3-p azimuthal correlator cos[n(psi1+psi2-2*phi3)] in terms of Q_{2n} and p_{n}:
424 if(fEvaluateDifferential3pCorrelator && anEvent->GetEventNSelTracksRP() >= 1)
425 {
41e6d9e4 426 Double_t gIntegrated3pCorrelator = 0.;
427 this->CalculateDifferential3pCorrelator(gIntegrated3pCorrelator); // to be improved - add relevant if statements for the min # POIs as well
428
429 //3particle correlator vs ref. mult
cf6d56bc 430 if(fCalculateVsM)
431 f3pPOICorrelatorVsM->Fill(nRefMult,gIntegrated3pCorrelator);
e999459d 432 }
5c078806 433
434 // g) Reset all event-by-event quantities:
d66d46f7 435 this->ResetEventByEventQuantities();
5c078806 436
489d5531 437} // end of AliFlowAnalysisWithMixedHarmonics::Make(AliFlowEventSimple* anEvent)
5c078806 438
489d5531 439//================================================================================================================
440
441void AliFlowAnalysisWithMixedHarmonics::Finish()
442{
d66d46f7 443 // Calculate the final results.
444
445 // a) Check all pointers used in this method;
50040ed6 446 // b) Access common constants;
447 // c) Access settings for analysis with mixed harmonics;
448 // d) Correct for detector effects;
449 // e) Print on the screen the final results.
d66d46f7 450
451 this->CheckPointersUsedInFinish();
50040ed6 452 this->AccessConstants("Finish");
d66d46f7 453 this->AccessSettings();
b71a354b 454 this->CorrectForDetectorEffects();
455 if(fCalculateVsM){this->CorrectForDetectorEffectsVsM();}
456 if(fPrintOnTheScreen){this->PrintOnTheScreen();}
50040ed6 457
489d5531 458} // end of AliFlowAnalysisWithMixedHarmonics::Finish()
459
460//================================================================================================================
461
462void AliFlowAnalysisWithMixedHarmonics::GetOutputHistograms(TList *outputListHistos)
463{
d66d46f7 464 // Get pointers to all objects saved in the output file.
465
ecac11c2 466 // a) Get pointers for common control histograms.
489d5531 467 if(outputListHistos)
468 {
d66d46f7 469 this->SetHistList(outputListHistos);
470 if(!fHistList)
471 {
472 cout<<endl;
e999459d 473 cout<<" WARNING (MH): fHistList is NULL in GetOutputHistograms() !!!!"<<endl;
d66d46f7 474 cout<<endl;
475 exit(0);
476 }
ecac11c2 477 this->GetPointersForBaseHistograms();
d66d46f7 478 this->GetPointersForCommonHistograms();
ecac11c2 479 this->GetPointersForAllEventProfiles();
489d5531 480 this->GetPointersForResultsHistograms();
d66d46f7 481 } else
482 {
483 cout<<endl;
e999459d 484 cout<<" WARNING (MH): outputListHistos is NULL in GetOutputHistograms() !!!!"<<endl;
d66d46f7 485 cout<<endl;
486 exit(0);
487 }
489d5531 488
489} // end of void AliFlowAnalysisWithMixedHarmonics::GetOutputHistograms(TList *outputListHistos)
490
d66d46f7 491//================================================================================================================
492
ecac11c2 493void AliFlowAnalysisWithMixedHarmonics::GetPointersForBaseHistograms()
494{
495 // Get pointers to base histograms.
496
497 TString analysisSettingsName = "fAnalysisSettings";
498 TProfile *analysisSettings = dynamic_cast<TProfile*>(fHistList->FindObject(analysisSettingsName.Data()));
499 if(analysisSettings)
500 {
501 this->SetAnalysisSettings(analysisSettings);
502 } else
503 {
504 cout<<endl;
e999459d 505 cout<<" WARNING (MH): analysisSettings is NULL in GetPointersForBaseHistograms() !!!!"<<endl;
ecac11c2 506 cout<<endl;
507 exit(0);
508 }
50040ed6 509
510 TString sCommonConstantsName = "fCommonConstants";
511 fCommonConstants = dynamic_cast<TProfile*>(fHistList->FindObject(sCommonConstantsName.Data()));
512 if(!fCommonConstants)
513 {
514 printf("\n WARNING (MH): fCommonConstants is NULL in GetPointersForBaseHistograms() !!!!\n\n");
515 exit(0);
516 }
ecac11c2 517
518} // end of void AliFlowAnalysisWithMixedHarmonics::GetPointersForBaseHistograms()
519
520//================================================================================================================
521
489d5531 522void AliFlowAnalysisWithMixedHarmonics::GetPointersForCommonHistograms()
523{
524 // Get pointers to common control histograms.
525
526 TString commonHistsName = "AliFlowCommonHistMH";
527 AliFlowCommonHist *commonHist = dynamic_cast<AliFlowCommonHist*>(fHistList->FindObject(commonHistsName.Data()));
d66d46f7 528 if(commonHist)
529 {
530 this->SetCommonHists(commonHist);
531 } else
532 {
533 cout<<endl;
e999459d 534 cout<<" WARNING (MH): commonHist is NULL in GetPointersForCommonHistograms() !!!!"<<endl;
d66d46f7 535 cout<<endl;
536 exit(0);
537 }
538
539} // end of void AliFlowAnalysisWithMixedHarmonics::GetPointersForCommonHistograms()
540
541//================================================================================================================
542
ecac11c2 543void AliFlowAnalysisWithMixedHarmonics::GetPointersForAllEventProfiles()
544{
5c078806 545 // Get pointers to profiles holding final results.
ecac11c2 546
547 TList *profileList = NULL;
548 profileList = dynamic_cast<TList*>(fHistList->FindObject("Profiles"));
549 if(!profileList)
550 {
e999459d 551 cout<<endl;
552 cout<<" WARNING (MH): profileList is NULL in GetPointersForAllEventProfiles() !!!!"<<endl;
553 cout<<endl;
ecac11c2 554 exit(0);
555 }
50040ed6 556 TList *nonIsotropicTermsList = NULL;
557 nonIsotropicTermsList = dynamic_cast<TList*>(profileList->FindObject("Nonisotropic Terms"));
558 if(!nonIsotropicTermsList && fEvaluateDifferential3pCorrelator)
559 {
560 cout<<endl;
561 cout<<" WARNING (MH): nonIsotropicTerms is NULL in GetPointersForAllEventProfiles() !!!!"<<endl;
562 cout<<endl;
563 exit(0);
564 }
565
ecac11c2 566 TString s3pCorrelatorProName = "f3pCorrelatorPro";
5c078806 567 TProfile *p3pCorrelatorPro = dynamic_cast<TProfile*>(profileList->FindObject(s3pCorrelatorProName.Data()));
568 if(p3pCorrelatorPro)
ecac11c2 569 {
5c078806 570 this->Set3pCorrelatorPro(p3pCorrelatorPro);
ecac11c2 571 }
572 TString s3pCorrelatorVsMProName = "f3pCorrelatorVsMPro";
5c078806 573 TProfile *p3pCorrelatorVsMPro = dynamic_cast<TProfile*>(profileList->FindObject(s3pCorrelatorVsMProName.Data()));
574 if(p3pCorrelatorVsMPro)
ecac11c2 575 {
5c078806 576 this->Set3pCorrelatorVsMPro(p3pCorrelatorVsMPro);
ecac11c2 577 }
41e6d9e4 578 TString s3pPOICorrelatorVsMName = "f3pPOICorrelatorVsM";
579 TProfile *p3pPOICorrelatorVsM = dynamic_cast<TProfile*>(profileList->FindObject(s3pPOICorrelatorVsMName.Data()));
580 if(p3pPOICorrelatorVsM)
581 {
582 this->Set3pPOICorrelatorVsM(p3pPOICorrelatorVsM);
583 }
ecac11c2 584 TString nonIsotropicTermsProName = "fNonIsotropicTermsPro";
585 TProfile *nonIsotropicTermsPro = dynamic_cast<TProfile*>(profileList->FindObject(nonIsotropicTermsProName.Data()));
586 if(nonIsotropicTermsPro)
587 {
588 this->SetNonIsotropicTermsPro(nonIsotropicTermsPro);
589 }
590 TString nonIsotropicTermsVsMProName = "fNonIsotropicTermsVsMPro";
591 TProfile2D *nonIsotropicTermsVsMPro = dynamic_cast<TProfile2D*>(profileList->FindObject(nonIsotropicTermsVsMProName.Data()));
592 if(nonIsotropicTermsVsMPro)
593 {
594 this->SetNonIsotropicTermsVsMPro(nonIsotropicTermsVsMPro);
5c078806 595 }
596 TString psdFlag[2] = {"PtSum","PtDiff"};
50040ed6 597 TString psdFlag2[2] = {"EtaSum","EtaDiff"};
598 TString nonIsotropicTerm[10] = {"#LT#LTcos(#psi_{POI_1})#GT#GT","#LT#LTsin(#psi_{POI_1})#GT#GT",
599 "#LT#LTcos(#psi_{POI_2})#GT#GT","#LT#LTsin(#psi_{POI_2})#GT#GT",
600 "#LT#LTcos(#psi_{POI_1}-2#phi_{RP})#GT#GT","#LT#LTsin(#psi_{POI_1}-2#phi_{RP})#GT#GT",
601 "#LT#LTcos(#psi_{POI_2}-2#phi_{RP})#GT#GT","#LT#LTsin(#psi_{POI_2}-2#phi_{RP})#GT#GT",
602 "#LT#LTcos(#psi_{POI_1}+#psi_{POI_2})#GT#GT","#LT#LTsin(#psi_{POI_1}+#psi_{POI_2})#GT#GT"};
5c078806 603 for(Int_t sd=0;sd<2;sd++)
604 {
605 TProfile *p3pCorrelatorVsPtSumDiffPro = dynamic_cast<TProfile*>(profileList->FindObject(Form("f3pCorrelatorVs%sPro",psdFlag[sd].Data())));
606 if(p3pCorrelatorVsPtSumDiffPro)
607 {
608 this->Set3pCorrelatorVsPtSumDiffPro(p3pCorrelatorVsPtSumDiffPro,sd);
609 }
50040ed6 610 TProfile *p3pCorrelatorVsEtaSumDiffPro = dynamic_cast<TProfile*>(profileList->FindObject(Form("f3pCorrelatorVs%sPro",psdFlag2[sd].Data())));
611 if(p3pCorrelatorVsEtaSumDiffPro)
612 {
613 this->Set3pCorrelatorVsEtaSumDiffPro(p3pCorrelatorVsEtaSumDiffPro,sd);
614 }
615 if(nonIsotropicTermsList)
616 {
617 for(Int_t t=0;t<10;t++)
618 {
619 // Pt:
620 TProfile *pNonIsotropicTermsVsPtSumDiffPro = dynamic_cast<TProfile*>
621 (nonIsotropicTermsList->FindObject(Form("fNonIsotropicTermsVs%sPro %s",psdFlag[sd].Data(),nonIsotropicTerm[t].Data())));
622 if(pNonIsotropicTermsVsPtSumDiffPro)
623 {
624 this->SetNonIsotropicTermsVsPtSumDiffPro(pNonIsotropicTermsVsPtSumDiffPro,sd,t);
625 }
626 // Eta:
627 TProfile *pNonIsotropicTermsVsEtaSumDiffPro = dynamic_cast<TProfile*>
628 (nonIsotropicTermsList->FindObject(Form("fNonIsotropicTermsVs%sPro %s",psdFlag2[sd].Data(),nonIsotropicTerm[t].Data())));
629 if(pNonIsotropicTermsVsEtaSumDiffPro)
630 {
631 this->SetNonIsotropicTermsVsEtaSumDiffPro(pNonIsotropicTermsVsEtaSumDiffPro,sd,t);
632 }
633 } // end of for(Int_t t=0;t<10;t++)
634 } // end of if(nonIsotropicTermsList)
635 } // end of for(Int_t sd=0;sd<2;sd++)
e409ac85 636
debab807 637 //2p correlator vs |Pt1-Pt2|
638 TProfile *g2pCorrelatorCosPsiDiffPtDiff = dynamic_cast<TProfile *>(profileList->FindObject("f2pCorrelatorCosPsiDiffPtDiff"));
639 if(g2pCorrelatorCosPsiDiffPtDiff)
640 this->Set2pCorrelatorCosPsiDiffPtDiff(g2pCorrelatorCosPsiDiffPtDiff);
641 TProfile *g2pCorrelatorCosPsiSumPtDiff = dynamic_cast<TProfile *>(profileList->FindObject("f2pCorrelatorCosPsiSumPtDiff"));
642 if(g2pCorrelatorCosPsiSumPtDiff)
643 this->Set2pCorrelatorCosPsiSumPtDiff(g2pCorrelatorCosPsiSumPtDiff);
644 TProfile *g2pCorrelatorSinPsiDiffPtDiff = dynamic_cast<TProfile *>(profileList->FindObject("f2pCorrelatorSinPsiDiffPtDiff"));
645 if(g2pCorrelatorSinPsiDiffPtDiff)
646 this->Set2pCorrelatorSinPsiDiffPtDiff(g2pCorrelatorSinPsiDiffPtDiff);
647 TProfile *g2pCorrelatorSinPsiSumPtDiff = dynamic_cast<TProfile *>(profileList->FindObject("f2pCorrelatorSinPsiSumPtDiff"));
648 if(g2pCorrelatorSinPsiSumPtDiff)
649 this->Set2pCorrelatorSinPsiSumPtDiff(g2pCorrelatorSinPsiSumPtDiff);
650
651 //2p correlator vs (Pt1+Pt2)/2
652 TProfile *g2pCorrelatorCosPsiDiffPtSum = dynamic_cast<TProfile *>(profileList->FindObject("f2pCorrelatorCosPsiDiffPtSum"));
653 if(g2pCorrelatorCosPsiDiffPtSum)
654 this->Set2pCorrelatorCosPsiDiffPtSum(g2pCorrelatorCosPsiDiffPtSum);
655 TProfile *g2pCorrelatorCosPsiSumPtSum = dynamic_cast<TProfile *>(profileList->FindObject("f2pCorrelatorCosPsiSumPtSum"));
656 if(g2pCorrelatorCosPsiSumPtSum)
657 this->Set2pCorrelatorCosPsiSumPtSum(g2pCorrelatorCosPsiSumPtSum);
658 TProfile *g2pCorrelatorSinPsiDiffPtSum = dynamic_cast<TProfile *>(profileList->FindObject("f2pCorrelatorSinPsiDiffPtSum"));
659 if(g2pCorrelatorSinPsiDiffPtSum)
660 this->Set2pCorrelatorSinPsiDiffPtSum(g2pCorrelatorSinPsiDiffPtSum);
661 TProfile *g2pCorrelatorSinPsiSumPtSum = dynamic_cast<TProfile *>(profileList->FindObject("f2pCorrelatorSinPsiSumPtSum"));
662 if(g2pCorrelatorSinPsiSumPtSum)
663 this->Set2pCorrelatorSinPsiSumPtSum(g2pCorrelatorSinPsiSumPtSum);
664
665 //2p correlator vs |eta1-eta2|
666 TProfile *g2pCorrelatorCosPsiDiffEtaDiff = dynamic_cast<TProfile *>(profileList->FindObject("f2pCorrelatorCosPsiDiffEtaDiff"));
667 if(g2pCorrelatorCosPsiDiffEtaDiff)
668 this->Set2pCorrelatorCosPsiDiffEtaDiff(g2pCorrelatorCosPsiDiffEtaDiff);
669 TProfile *g2pCorrelatorCosPsiSumEtaDiff = dynamic_cast<TProfile *>(profileList->FindObject("f2pCorrelatorCosPsiSumEtaDiff"));
670 if(g2pCorrelatorCosPsiSumEtaDiff)
671 this->Set2pCorrelatorCosPsiSumEtaDiff(g2pCorrelatorCosPsiSumEtaDiff);
672 TProfile *g2pCorrelatorSinPsiDiffEtaDiff = dynamic_cast<TProfile *>(profileList->FindObject("f2pCorrelatorSinPsiDiffEtaDiff"));
673 if(g2pCorrelatorSinPsiDiffEtaDiff)
674 this->Set2pCorrelatorSinPsiDiffEtaDiff(g2pCorrelatorSinPsiDiffEtaDiff);
675 TProfile *g2pCorrelatorSinPsiSumEtaDiff = dynamic_cast<TProfile *>(profileList->FindObject("f2pCorrelatorSinPsiSumEtaDiff"));
676 if(g2pCorrelatorSinPsiSumEtaDiff)
677 this->Set2pCorrelatorSinPsiSumEtaDiff(g2pCorrelatorSinPsiSumEtaDiff);
678
679 //2p correlator vs (eta1+eta2)/2
680 TProfile *g2pCorrelatorCosPsiDiffEtaSum = dynamic_cast<TProfile *>(profileList->FindObject("f2pCorrelatorCosPsiDiffEtaSum"));
681 if(g2pCorrelatorCosPsiDiffEtaSum)
682 this->Set2pCorrelatorCosPsiDiffEtaSum(g2pCorrelatorCosPsiDiffEtaSum);
683 TProfile *g2pCorrelatorCosPsiSumEtaSum = dynamic_cast<TProfile *>(profileList->FindObject("f2pCorrelatorCosPsiSumEtaSum"));
684 if(g2pCorrelatorCosPsiSumEtaSum)
685 this->Set2pCorrelatorCosPsiSumEtaSum(g2pCorrelatorCosPsiSumEtaSum);
686 TProfile *g2pCorrelatorSinPsiDiffEtaSum = dynamic_cast<TProfile *>(profileList->FindObject("f2pCorrelatorSinPsiDiffEtaSum"));
687 if(g2pCorrelatorSinPsiDiffEtaSum)
688 this->Set2pCorrelatorSinPsiDiffEtaSum(g2pCorrelatorSinPsiDiffEtaSum);
689 TProfile *g2pCorrelatorSinPsiSumEtaSum = dynamic_cast<TProfile *>(profileList->FindObject("f2pCorrelatorSinPsiSumEtaSum"));
690 if(g2pCorrelatorSinPsiSumEtaSum)
691 this->Set2pCorrelatorSinPsiSumEtaSum(g2pCorrelatorSinPsiSumEtaSum);
97d82c42 692
693 TString s5pCorrelatorProName = "f5pCorrelatorPro";
694 TProfile *p5pCorrelatorPro = dynamic_cast<TProfile*>(profileList->FindObject(s5pCorrelatorProName.Data()));
695 if(p5pCorrelatorPro)
696 {
697 this->Set5pCorrelatorPro(p5pCorrelatorPro);
698 }
5c078806 699
ecac11c2 700} // end of void AliFlowAnalysisWithMixedHarmonics::GetPointersForAllEventProfiles()
701
702//================================================================================================================
703
489d5531 704void AliFlowAnalysisWithMixedHarmonics::GetPointersForResultsHistograms()
705{
706 // Get pointers to histograms holding final results.
707
708 TList *resultsList = NULL;
709 resultsList = dynamic_cast<TList*>(fHistList->FindObject("Results"));
710 if(!resultsList)
711 {
e999459d 712 cout<<endl;
713 cout<<" WARNING (MH): resultsList is NULL in GetPointersForResultsHistograms() !!!!"<<endl;
714 cout<<endl;
489d5531 715 exit(0);
d66d46f7 716 }
489d5531 717 TString s3pCorrelatorHistName = "f3pCorrelatorHist";
718 TH1D *h3pCorrelatorHist = dynamic_cast<TH1D*>(resultsList->FindObject(s3pCorrelatorHistName.Data()));
719 if(h3pCorrelatorHist)
720 {
721 this->Set3pCorrelatorHist(h3pCorrelatorHist);
d66d46f7 722 }
e558a733 723 TString s3pCorrelatorVsMHistName = "f3pCorrelatorVsMHist";
724 TH1D *h3pCorrelatorVsMHist = dynamic_cast<TH1D*>(resultsList->FindObject(s3pCorrelatorVsMHistName.Data()));
725 if(h3pCorrelatorVsMHist)
726 {
727 this->Set3pCorrelatorVsMHist(h3pCorrelatorVsMHist);
728 }
489d5531 729 TString detectorBiasHistName = "fDetectorBiasHist";
730 TH1D *detectorBiasHist = dynamic_cast<TH1D*>(resultsList->FindObject(detectorBiasHistName.Data()));
731 if(detectorBiasHist)
732 {
733 this->SetDetectorBiasHist(detectorBiasHist);
d66d46f7 734 }
ecac11c2 735 TString detectorBiasVsMHistName = "fDetectorBiasVsMHist";
736 TH1D *detectorBiasVsMHist = dynamic_cast<TH1D*>(resultsList->FindObject(detectorBiasVsMHistName.Data()));
737 if(detectorBiasVsMHist)
738 {
739 this->SetDetectorBiasVsMHist(detectorBiasVsMHist);
740 }
50040ed6 741
742 TString psdFlag[2] = {"PtSum","PtDiff"};
743 TString psdFlag2[2] = {"EtaSum","EtaDiff"};
744 for(Int_t sd=0;sd<2;sd++)
745 {
746 TH1D *h3pCorrelatorVsPtSumDiffHist = dynamic_cast<TH1D*>(resultsList->FindObject(Form("f3pCorrelatorVs%sHist",psdFlag[sd].Data())));
747 if(h3pCorrelatorVsPtSumDiffHist)
748 {
749 this->Set3pCorrelatorVsPtSumDiffHist(h3pCorrelatorVsPtSumDiffHist,sd);
750 }
751 TH1D *h3pCorrelatorVsEtaSumDiffHist = dynamic_cast<TH1D*>(resultsList->FindObject(Form("f3pCorrelatorVs%sHist",psdFlag2[sd].Data())));
752 if(h3pCorrelatorVsEtaSumDiffHist)
753 {
754 this->Set3pCorrelatorVsEtaSumDiffHist(h3pCorrelatorVsEtaSumDiffHist,sd);
755 }
756 } // end of for(Int_t sd=0;sd<2;sd++)
ecac11c2 757
d66d46f7 758} // end of void AliFlowAnalysisWithMixedHarmonics::GetPointersForResultsHistograms()
489d5531 759
d66d46f7 760//================================================================================================================
761
489d5531 762void AliFlowAnalysisWithMixedHarmonics::WriteHistograms(TString outputFileName)
763{
764 // Store the final results in output .root file.
765 TFile *output = new TFile(outputFileName.Data(),"RECREATE");
766 fHistList->Write(fHistList->GetName(),TObject::kSingleKey);
767 delete output;
768}
769
770//================================================================================================================
d66d46f7 771
772void AliFlowAnalysisWithMixedHarmonics::WriteHistograms(TDirectoryFile *outputFileName)
773{
774 // Store the final results in output .root file.
775 fHistList->SetName("cobjMH");
776 fHistList->SetOwner(kTRUE);
777 outputFileName->Add(fHistList);
778 outputFileName->Write(outputFileName->GetName(),TObject::kSingleKey);
779}
780
781//================================================================================================================
782
e999459d 783void AliFlowAnalysisWithMixedHarmonics::StoreHarmonic()
784{
785 // Store harmonic n used in cos[n*(phi1+phi2-2phi3)] and cos[n*(psi1+psi2-2phi3)].
786
787 (fCommonHists->GetHarmonic())->Fill(0.5,fHarmonic);
788
789} // end of void AliFlowAnalysisWithMixedHarmonics::StoreHarmonic()
790
791//================================================================================================================
792
5c078806 793void AliFlowAnalysisWithMixedHarmonics::InitializeArrays()
794{
795 // Initialize arrays.
796
797 for(Int_t sd=0;sd<2;sd++)
798 {
799 fRePEBE[sd] = NULL;
800 fImPEBE[sd] = NULL;
41e6d9e4 801 fReEtaEBE[sd] = NULL;
802 fImEtaEBE[sd] = NULL;
5c078806 803 f3pCorrelatorVsPtSumDiffPro[sd] = NULL;
41e6d9e4 804 f3pCorrelatorVsEtaSumDiffPro[sd] = NULL;
50040ed6 805 f3pCorrelatorVsPtSumDiffHist[sd] = NULL;
806 f3pCorrelatorVsEtaSumDiffHist[sd] = NULL;
807 for(Int_t t=0;t<10;t++) // non-isotropic terms for diff. correlators
808 {
809 fNonIsotropicTermsVsPtSumDiffPro[sd][t] = NULL;
810 fNonIsotropicTermsVsEtaSumDiffPro[sd][t] = NULL;
811 }
812 } // end of for(Int_t sd=0;sd<2;sd++)
e999459d 813 for(Int_t fs=0;fs<2;fs++) // 1st/2nd POI which is also RP
814 {
815 for(Int_t sd=0;sd<2;sd++)
816 {
817 fOverlapEBE[fs][sd] = NULL;
41e6d9e4 818 fOverlapEBE2[fs][sd] = NULL;
e999459d 819 }
50040ed6 820 } // end of for(Int_t fs=0;fs<2;fs++) // 1st/2nd POI which is also RP
821 for(Int_t p12=0;p12<2;p12++) // 1st/2nd POI
822 {
823 for(Int_t ao=0;ao<2;ao++) // all/overlap
824 {
825 for(Int_t pe=0;pe<4;pe++) // [(p1+p2)/2,|p1-p2|,(eta1+eta2)/2,|eta1-eta2|]
826 {
827 fReNITEBE[p12][ao][pe] = NULL;
828 fImNITEBE[p12][ao][pe] = NULL;
829 } // end of for(Int_t pe=0;pe<4;pe++) // [(p1+p2)/2,|p1-p2|,(eta1+eta2)/2,|eta1-eta2|]
830 } // end of for(Int_t ao=0;ao<2;ao++) // all/overlap
831 } // end of for(Int_t p12=0;p12<2;p12++) // 1st/2nd POI
5c078806 832
833} // end of AliFlowAnalysisWithMixedHarmonics::InitializeArrays()
834
835//================================================================================================================
836
489d5531 837void AliFlowAnalysisWithMixedHarmonics::BookAndNestAllLists()
d66d46f7 838{
839 // Book and nest all list in base list fHistList.
840
841 // Weights:
489d5531 842 fWeightsList->SetName("Weights");
843 fWeightsList->SetOwner(kTRUE);
d66d46f7 844 fHistList->Add(fWeightsList);
ecac11c2 845 // Profiles:
846 fProfileList->SetName("Profiles");
847 fProfileList->SetOwner(kTRUE);
848 fHistList->Add(fProfileList);
d66d46f7 849 // Results:
489d5531 850 fResultsList->SetName("Results");
851 fResultsList->SetOwner(kTRUE);
d66d46f7 852 fHistList->Add(fResultsList);
50040ed6 853 // Profiles with non-isotropic terms for diff. correlators:
854 fNonIsotropicTermsList->SetName("Nonisotropic Terms");
855 fNonIsotropicTermsList->SetOwner(kTRUE);
856 if(fEvaluateDifferential3pCorrelator){fProfileList->Add(fNonIsotropicTermsList);}
d66d46f7 857
858} // end of void AliFlowAnalysisWithMixedHarmonics::BookAndNestAllLists()
859
860//================================================================================================================
861
489d5531 862void AliFlowAnalysisWithMixedHarmonics::BookProfileHoldingSettings()
d66d46f7 863{
864 // Book profile to hold all analysis settings.
865
489d5531 866 TString analysisSettingsName = "fAnalysisSettings";
b71a354b 867 fAnalysisSettings = new TProfile(analysisSettingsName.Data(),"Settings for analysis with mixed harmonics",10,0,10);
e999459d 868 fAnalysisSettings->SetStats(kFALSE);
869 fAnalysisSettings->GetXaxis()->SetLabelSize(0.03);
870 fAnalysisSettings->GetXaxis()->SetBinLabel(1,"Corr. for det. effects?");
871 fAnalysisSettings->Fill(0.5,(Int_t)fCorrectForDetectorEffects);
872 fAnalysisSettings->GetXaxis()->SetBinLabel(2,"# of mult. bins");
873 fAnalysisSettings->Fill(1.5,fNoOfMultipicityBins);
874 fAnalysisSettings->GetXaxis()->SetBinLabel(3,"Width of mult. bins");
875 fAnalysisSettings->Fill(2.5,fMultipicityBinWidth);
876 fAnalysisSettings->GetXaxis()->SetBinLabel(4,"Minimal mult.");
877 fAnalysisSettings->Fill(3.5,fMinMultiplicity);
878 fAnalysisSettings->GetXaxis()->SetBinLabel(5,"Print on the screen?");
879 fAnalysisSettings->Fill(4.5,(Int_t)fPrintOnTheScreen);
880 fAnalysisSettings->GetXaxis()->SetBinLabel(6,"fHarmonic");
881 fAnalysisSettings->Fill(5.5,(Int_t)fHarmonic);
882 fAnalysisSettings->GetXaxis()->SetBinLabel(7,"fOppositeChargesPOI");
883 fAnalysisSettings->Fill(6.5,(Int_t)fOppositeChargesPOI);
884 fAnalysisSettings->GetXaxis()->SetBinLabel(8,"fEvaluateDifferential3pCorrelator");
50040ed6 885 fAnalysisSettings->Fill(7.5,(Int_t)fEvaluateDifferential3pCorrelator);
b71a354b 886 fAnalysisSettings->GetXaxis()->SetBinLabel(9,"fCalculateVsM");
887 fAnalysisSettings->Fill(8.5,(Int_t)fCalculateVsM);
888 fAnalysisSettings->GetXaxis()->SetBinLabel(10,"fShowBinLabelsVsM");
889 fAnalysisSettings->Fill(9.5,(Int_t)fShowBinLabelsVsM);
d66d46f7 890 fHistList->Add(fAnalysisSettings);
891
892} // end of void AliFlowAnalysisWithMixedHarmonics::BookProfileHoldingSettings()
489d5531 893
d66d46f7 894//================================================================================================================
895
489d5531 896void AliFlowAnalysisWithMixedHarmonics::BookCommonHistograms()
897{
d66d46f7 898 // Book common control histograms and common histograms for final results.
489d5531 899
900 TString commonHistsName = "AliFlowCommonHistMH";
901 fCommonHists = new AliFlowCommonHist(commonHistsName.Data());
902 fHistList->Add(fCommonHists);
903
904} // end of void AliFlowAnalysisWithMixedHarmonics::BookCommonHistograms()
d66d46f7 905
906//================================================================================================================
907
489d5531 908void AliFlowAnalysisWithMixedHarmonics::BookAllEventByEventQuantities()
909{
d66d46f7 910 // Book all event-by-event quantitites.
911
97d82c42 912 // Q_{n,k} and S{p,k}:
913 fReQnk = new TMatrixD(6,9); // to be improved (check bound on k!)
914 fImQnk = new TMatrixD(6,9); // to be improved (check bound on k!)
915 fSpk = new TMatrixD(4,4); // to be improved (check bound on p and k!)
5c078806 916
917 // p_n vs [(p1+p2)/2,|p1-p2|]
e999459d 918 if(!fEvaluateDifferential3pCorrelator){return;}
5c078806 919 TString psdFlag[2] = {"PtSum","PtDiff"};
41e6d9e4 920 TString p2sdFlag[2] = {"PtSum","PtDiff"};
e999459d 921 TString fsFlag[2] = {"1st","2nd"};
5c078806 922 for(Int_t sd=0;sd<2;sd++)
923 {
5c078806 924 fRePEBE[sd] = new TProfile(Form("fRePEBE%s",psdFlag[sd].Data()),"",fnBinsPt,0.,fPtMax);
925 fImPEBE[sd] = new TProfile(Form("fImPEBE%s",psdFlag[sd].Data()),"",fnBinsPt,0.,fPtMax);
41e6d9e4 926 fReEtaEBE[sd] = new TProfile(Form("fReEtaEBE%s",p2sdFlag[sd].Data()),"",fnBinsEta,fEtaMin,fEtaMax);
927 fImEtaEBE[sd] = new TProfile(Form("fImEtaEBE%s",p2sdFlag[sd].Data()),"",fnBinsEta,fEtaMin,fEtaMax);
5c078806 928 }
e999459d 929 for(Int_t fs=0;fs<2;fs++)
930 {
931 for(Int_t sd=0;sd<2;sd++)
932 {
933 fOverlapEBE[fs][sd] = new TProfile(Form("%s POI, %s",fsFlag[sd].Data(),psdFlag[sd].Data()),"",fnBinsPt,0.,fPtMax);
41e6d9e4 934 fOverlapEBE2[fs][sd] = new TProfile(Form("%s POI 2, %s",fsFlag[sd].Data(),p2sdFlag[sd].Data()),"",fnBinsEta,fEtaMin,fEtaMax);
e999459d 935 }
936 }
50040ed6 937 Int_t nBinsPtEta[4] = {fnBinsPt,fnBinsPt,fnBinsEta,fnBinsEta};
938 Double_t dPtEtaMin[4] = {0.,0.,fEtaMin,fEtaMin};
939 Double_t dPtEtaMax[4] = {fPtMax,fPtMax,fEtaMax,fEtaMax};
940 for(Int_t p12=0;p12<2;p12++) // 1st/2nd POI
941 {
942 for(Int_t ao=0;ao<2;ao++) // all/overlap
943 {
944 for(Int_t pe=0;pe<4;pe++) // [(p1+p2)/2,|p1-p2|,(eta1+eta2)/2,|eta1-eta2|]
945 {
946 fReNITEBE[p12][ao][pe] = new TProfile(Form("fReNITEBE%d%d%d",p12,ao,pe),"",nBinsPtEta[pe],dPtEtaMin[pe],dPtEtaMax[pe]);
947 fImNITEBE[p12][ao][pe] = new TProfile(Form("fImNITEBE%d%d%d",p12,ao,pe),"",nBinsPtEta[pe],dPtEtaMin[pe],dPtEtaMax[pe]);
948 } // end of for(Int_t pe=0;pe<4;pe++) // [(p1+p2)/2,|p1-p2|,(eta1+eta2)/2,|eta1-eta2|]
949 } // end of for(Int_t ao=0;ao<2;ao++) // all/overlap
950 } // end of for(Int_t p12=0;p12<2;p12++) // 1st/2nd POI
e999459d 951
489d5531 952} // end fo void AliFlowAnalysisWithMixedHarmonics::BookAllEventByEventQuantities()
5c078806 953
d66d46f7 954//================================================================================================================
955
956void AliFlowAnalysisWithMixedHarmonics::BookAllAllEventQuantities()
957{
958 // Book all all-event quantitites.
959
b71a354b 960 // a) Book histos and profiles without any binning in multiplicity, pt or eta;
5c078806 961 // b) Book quantites with multiplicity binning;
b71a354b 962 // c) Book quantites with binning in (p1+p2)/2 and |p1-p2|.
5c078806 963
b71a354b 964 this->BookDefault();
965 if(fCalculateVsM){this->BookVsM();}
966 if(fEvaluateDifferential3pCorrelator){this->BookDifferential();}
967
968} // end of void AliFlowAnalysisWithMixedHarmonics::BookAllAllEventQuantities()
969
970//================================================================================================================
971
972void AliFlowAnalysisWithMixedHarmonics::BookDefault()
973{
974 // Book histos and profiles without any binning in multiplicity, pt or eta.
975
976 // a) 3-p correlator <<cos[n*(phi1+phi2-2phi3)]>> for all events (not corrected for detector effects);
977 // b) Non-isotropic terms in the decomposition of <<cos[n(phi1+phi2-2phi3)]>>;
978 // c) 3-p correlator <<cos[n(phi1+phi2-2phi3)]>> corrected for detector effects;
97d82c42 979 // d) Histogram which quantifies bias coming from detector inefficiencies to 3-p correlator <<cos[n(phi1+phi2-2phi3)]>>;
980 // e) 5-p correlator <<cos[n*(2phi1+2phi2+2phi3-3phi4-3phi5)]>> for all events (not corrected for detector effects - not supported yet).
b71a354b 981
982 // a) 3-p correlator <<cos[n*(phi1+phi2-2phi3)]>> for all events (not corrected for detector effects);
489d5531 983 TString s3pCorrelatorProName = "f3pCorrelatorPro";
5c078806 984 f3pCorrelatorPro = new TProfile(s3pCorrelatorProName.Data(),"",1,0,1);
e999459d 985 f3pCorrelatorPro->SetStats(kFALSE);
5c078806 986 f3pCorrelatorPro->GetXaxis()->SetLabelOffset(0.01);
987 f3pCorrelatorPro->GetXaxis()->SetLabelSize(0.05);
e999459d 988 if(fHarmonic == 1)
5c078806 989 {
e999459d 990 f3pCorrelatorPro->GetXaxis()->SetBinLabel(1,"#LT#LTcos(#phi_{1}+#phi_{2}-2#phi_{3})#GT#GT");
5c078806 991 } else
992 {
e999459d 993 f3pCorrelatorPro->GetXaxis()->SetBinLabel(1,Form("#LT#LTcos[%i(#phi_{1}+#phi_{2}-2#phi_{3})]#GT#GT",fHarmonic));
5c078806 994 }
ecac11c2 995 fProfileList->Add(f3pCorrelatorPro);
b71a354b 996
997 // b) Non-isotropic terms in the decomposition of <<cos[n(phi1+phi2-2phi3)]>>:
489d5531 998 TString nonIsotropicTermsProName = "fNonIsotropicTermsPro";
e999459d 999 fNonIsotropicTermsPro = new TProfile(nonIsotropicTermsProName.Data(),"",8,0,8);
1000 fNonIsotropicTermsPro->SetStats(kFALSE);
1001 if(fHarmonic == 1)
5c078806 1002 {
e999459d 1003 fNonIsotropicTermsPro->SetTitle("Non-isotropic terms in decomposition of #LT#LTcos(#phi_{1}+#phi_{2}-2#phi_{3})#GT#GT");
5c078806 1004 fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(1,"cos(#phi_{1})");
1005 fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(2,"sin(#phi_{1})");
1006 fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(3,"cos(2#phi_{1})");
1007 fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(4,"sin(2#phi_{1})");
1008 fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(5,"cos(#phi_{1}+#phi_{2})");
1009 fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(6,"sin(#phi_{1}+#phi_{2})");
1010 fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(7,"cos(2#phi_{1}-#phi_{2})");
1011 fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(8,"sin(2#phi_{1}-#phi_{2})");
e999459d 1012 // fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(9,"cos(#phi_{1}-#phi_{2}-#phi_{3})"); // not needed
1013 // fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(10,"sin(#phi_{1}-#phi_{2}-#phi_{3})"); // not needed
5c078806 1014 } else
1015 {
e999459d 1016 fNonIsotropicTermsPro->SetTitle(Form("Non-isotropic terms in decomposition of #LT#LTcos[%i(#phi_{1}+#phi_{2}-2#phi_{3})]#GT#GT",fHarmonic));
1017 fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(1,Form("cos(%d#phi_{1})",fHarmonic));
1018 fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(2,Form("sin(%d#phi_{1})",fHarmonic));
1019 fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(3,Form("cos(%d#phi_{1})",2*fHarmonic));
1020 fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(4,Form("sin(%d#phi_{1})",2*fHarmonic));
1021 fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(5,Form("cos[%d(#phi_{1}+#phi_{2})]",fHarmonic));
1022 fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(6,Form("sin[%d(#phi_{1}+#phi_{2})]",fHarmonic));
1023 fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(7,Form("cos[%d(2#phi_{1}-#phi_{2})]",fHarmonic));
1024 fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(8,Form("sin[%d(2#phi_{1}-#phi_{2})]",fHarmonic));
1025 // fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(9,Form("cos(%d(#phi_{1}-#phi_{2}-#phi_{3}))",fHarmonic)); // not needed
1026 // fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(10,Form("sin(%d(#phi_{1}-#phi_{2}-#phi_{3}))",fHarmonic)); // not needed
5c078806 1027 }
ecac11c2 1028 fProfileList->Add(fNonIsotropicTermsPro);
b71a354b 1029
1030 // c) 3-p correlator <<cos[n(phi1+phi2-2phi3)]>> corrected for detector effects:
5c078806 1031 TString s3pCorrelatorHistName = "f3pCorrelatorHist";
1032 f3pCorrelatorHist = new TH1D(s3pCorrelatorHistName.Data(),"",1,0,1);
e999459d 1033 f3pCorrelatorHist->SetStats(kFALSE);
5c078806 1034 f3pCorrelatorHist->GetXaxis()->SetLabelOffset(0.01);
1035 f3pCorrelatorHist->GetXaxis()->SetLabelSize(0.05);
e999459d 1036 if(fHarmonic == 1)
5c078806 1037 {
e999459d 1038 f3pCorrelatorHist->GetXaxis()->SetBinLabel(1,"#LT#LTcos(#phi_{1}+#phi_{2}-2#phi_{3})#GT#GT");
5c078806 1039 } else
1040 {
e999459d 1041 f3pCorrelatorHist->GetXaxis()->SetBinLabel(1,Form("#LT#LTcos[%i(#phi_{1}+#phi_{2}-2#phi_{3})]#GT#GT",fHarmonic));
5c078806 1042 }
1043 fResultsList->Add(f3pCorrelatorHist);
b71a354b 1044
1045 // d) Histogram which quantifies bias coming from detector inefficiencies to 3-p correlator <<cos[n(phi1+phi2-2phi3)]>>:
489d5531 1046 TString detectorBiasHistName = "fDetectorBiasHist";
d66d46f7 1047 fDetectorBiasHist = new TH1D(detectorBiasHistName.Data(),"Bias coming from detector inefficiences",1,0,1);
e999459d 1048 fDetectorBiasHist->SetStats(kFALSE);
1049 if(fHarmonic == 1)
1050 {
1051 fDetectorBiasHist->GetXaxis()->SetBinLabel(1,"#frac{corrected}{measured} #LT#LTcos(#phi_{1}+#phi_{2}-2#phi_{3})#GT#GT");
1052 } else
1053 {
1054 fDetectorBiasHist->GetXaxis()->SetBinLabel(1,Form("#frac{corrected}{measured} #LT#LTcos[%i(#phi_{1}+#phi_{2}-2#phi_{3})]#GT#GT",fHarmonic));
1055 }
d66d46f7 1056 fResultsList->Add(fDetectorBiasHist);
1057
97d82c42 1058 // e) 5-p correlator <<cos[n*(2phi1+2phi2+2phi3-3phi4-3phi5)]>> for all events (not corrected for detector effects - not supported yet):
1059 TString s5pCorrelatorProName = "f5pCorrelatorPro";
1060 f5pCorrelatorPro = new TProfile(s5pCorrelatorProName.Data(),"",1,0,1);
1061 f5pCorrelatorPro->SetStats(kFALSE);
1062 f5pCorrelatorPro->GetXaxis()->SetLabelOffset(0.01);
1063 f5pCorrelatorPro->GetXaxis()->SetLabelSize(0.05);
1064 if(fHarmonic == 1)
1065 {
1066 f5pCorrelatorPro->GetXaxis()->SetBinLabel(1,"#LT#LTcos(2#phi_{1}+2#phi_{2}+2#phi_{3}-3#phi_{4}-3#phi_{5})#GT#GT");
1067 } else
1068 {
1069 f5pCorrelatorPro->GetXaxis()->SetBinLabel(1,Form("#LT#LTcos[%i(2#phi_{1}+2#phi_{2}+2#phi_{3}-3#phi_{4}-3#phi_{5})]#GT#GT",fHarmonic));
1070 }
1071 fProfileList->Add(f5pCorrelatorPro);
1072
b71a354b 1073} // end of void AliFlowAnalysisWithMixedHarmonics::BookDefault()
1074
1075//================================================================================================================
1076
1077void AliFlowAnalysisWithMixedHarmonics::BookVsM()
1078{
1079 // Book histos and profiles holding results vs multiplicity.
1080
1081 // a) 3-p correlator <<cos[n*(phi1+phi2-2phi3)]>> for all events (not corrected for detector effects) vs M;
1082 // b) Non-isotropic terms in the decomposition of <<cos[n(phi1+phi2-2phi3)]>> vs M;
1083 // c) 3-p correlator <<cos[n(phi1+phi2-2phi3)]>> corrected for detector effects vs M;
1084 // d) Histogram which quantifies bias coming from detector inefficiencies to 3-p correlator <<cos[n(phi1+phi2-2phi3)]>> vs M.
1085
1086 // a) 3-p correlator <<cos[n*(phi1+phi2-2phi3)]>> for all events (not corrected for detector effects) vs M:
489d5531 1087 TString s3pCorrelatorVsMProName = "f3pCorrelatorVsMPro";
5c078806 1088 f3pCorrelatorVsMPro = new TProfile(s3pCorrelatorVsMProName.Data(),"",fNoOfMultipicityBins+2,0,fNoOfMultipicityBins+2);
e999459d 1089 f3pCorrelatorVsMPro->SetStats(kFALSE);
1090 if(fHarmonic == 1)
d66d46f7 1091 {
e999459d 1092 f3pCorrelatorVsMPro->SetTitle("#LT#LTcos(#phi_{1}+#phi_{2}-2#phi_{3})#GT#GT #font[72]{vs} M");
5c078806 1093 } else
1094 {
e999459d 1095 f3pCorrelatorVsMPro->SetTitle(Form("#LT#LTcos[%d(#phi_{1}+#phi_{2}-2#phi_{3})]#GT#GT #font[72]{vs} M",fHarmonic));
5c078806 1096 }
b71a354b 1097 if(fShowBinLabelsVsM)
d66d46f7 1098 {
b71a354b 1099 f3pCorrelatorVsMPro->GetXaxis()->SetBinLabel(1,Form("M < %d",(Int_t)fMinMultiplicity));
1100 for(Int_t b=2;b<=fNoOfMultipicityBins+1;b++)
1101 {
1102 f3pCorrelatorVsMPro->GetXaxis()->SetBinLabel(b,Form("%d #leq M < %d",(Int_t)(fMinMultiplicity+(b-2)*fMultipicityBinWidth),(Int_t)(fMinMultiplicity+(b-1)*fMultipicityBinWidth)));
1103 }
1104 f3pCorrelatorVsMPro->GetXaxis()->SetBinLabel(fNoOfMultipicityBins+2,Form(" M #geq %d",(Int_t)(fMinMultiplicity+fNoOfMultipicityBins*fMultipicityBinWidth)));
1105 } else
1106 {
1107 f3pCorrelatorVsMPro->GetXaxis()->SetTitle("M");
1108 }
e558a733 1109 fProfileList->Add(f3pCorrelatorVsMPro);
41e6d9e4 1110
1111 TString s3pPOICorrelatorVsMName = "f3pPOICorrelatorVsM";
1112 f3pPOICorrelatorVsM = new TProfile(s3pPOICorrelatorVsMName.Data(),"",fNoOfMultipicityBins+2,0,fNoOfMultipicityBins+2);
1113 f3pPOICorrelatorVsM->SetStats(kFALSE);
1114 if(fHarmonic == 1)
1115 {
1116 f3pPOICorrelatorVsM->SetTitle("#LT#LTcos(#psi_{1}+#psi_{2}-2#phi_{3})#GT#GT #font[72]{vs} M");
1117 } else
1118 {
1119 f3pPOICorrelatorVsM->SetTitle(Form("#LT#LTcos[%d(#psi_{1}+#psi_{2}-2#phi_{3})]#GT#GT #font[72]{vs} M",fHarmonic));
1120 }
1121 if(fShowBinLabelsVsM)
1122 {
1123 f3pPOICorrelatorVsM->GetXaxis()->SetBinLabel(1,Form("M < %d",(Int_t)fMinMultiplicity));
1124 for(Int_t b=2;b<=fNoOfMultipicityBins+1;b++)
1125 {
1126 f3pPOICorrelatorVsM->GetXaxis()->SetBinLabel(b,Form("%d #leq M < %d",(Int_t)(fMinMultiplicity+(b-2)*fMultipicityBinWidth),(Int_t)(fMinMultiplicity+(b-1)*fMultipicityBinWidth)));
1127 }
1128 f3pPOICorrelatorVsM->GetXaxis()->SetBinLabel(fNoOfMultipicityBins+2,Form(" M #geq %d",(Int_t)(fMinMultiplicity+fNoOfMultipicityBins*fMultipicityBinWidth)));
1129 } else
1130 {
1131 f3pPOICorrelatorVsM->GetXaxis()->SetTitle("M");
1132 }
1133 fProfileList->Add(f3pPOICorrelatorVsM);
b71a354b 1134
1135 // b) Non-isotropic terms in the decomposition of <<cos[n(phi1+phi2-2phi3)]>> vs M:
e558a733 1136 TString s3pCorrelatorVsMHistName = "f3pCorrelatorVsMHist";
1137 f3pCorrelatorVsMHist = new TH1D(s3pCorrelatorVsMHistName.Data(),"",fNoOfMultipicityBins+2,0,fNoOfMultipicityBins+2);
e999459d 1138 f3pCorrelatorVsMHist->SetStats(kFALSE);
1139 if(fHarmonic == 1)
e558a733 1140 {
e999459d 1141 f3pCorrelatorVsMHist->SetTitle("cos(#phi_{1}+#phi_{2}-2#phi_{3}) #font[72]{vs} M");
e558a733 1142 } else
1143 {
e999459d 1144 f3pCorrelatorVsMHist->SetTitle(Form("cos[%d(#phi_{1}+#phi_{2}-2#phi_{3})] #font[72]{vs} M",fHarmonic));
e558a733 1145 }
b71a354b 1146 if(fShowBinLabelsVsM)
1147 {
1148 f3pCorrelatorVsMHist->GetXaxis()->SetBinLabel(1,Form("M < %d",(Int_t)fMinMultiplicity));
1149 for(Int_t b=2;b<=fNoOfMultipicityBins+1;b++)
1150 {
1151 f3pCorrelatorVsMHist->GetXaxis()->SetBinLabel(b,Form("%d #leq M < %d",(Int_t)(fMinMultiplicity+(b-2)*fMultipicityBinWidth),(Int_t)(fMinMultiplicity+(b-1)*fMultipicityBinWidth)));
1152 }
1153 f3pCorrelatorVsMHist->GetXaxis()->SetBinLabel(fNoOfMultipicityBins+2,Form(" M #geq %d",(Int_t)(fMinMultiplicity+fNoOfMultipicityBins*fMultipicityBinWidth)));
1154 } else
1155 {
1156 f3pCorrelatorVsMHist->GetXaxis()->SetTitle("M");
1157 }
e558a733 1158 fResultsList->Add(f3pCorrelatorVsMHist);
b71a354b 1159
1160 // c) 3-p correlator <<cos[n(phi1+phi2-2phi3)]>> corrected for detector effects vs M:
489d5531 1161 TString nonIsotropicTermsVsMProName = "fNonIsotropicTermsVsMPro";
e999459d 1162 fNonIsotropicTermsVsMPro = new TProfile2D(nonIsotropicTermsVsMProName.Data(),"",8,0,8,fNoOfMultipicityBins+2,0,fNoOfMultipicityBins+2);
1163 fNonIsotropicTermsVsMPro->SetStats(kFALSE);
1164 if(fHarmonic == 1)
d66d46f7 1165 {
e999459d 1166 fNonIsotropicTermsVsMPro->SetTitle("Non-isotropic terms in decomposition of #LT#LTcos(#phi_{1}+#phi_{2}-2#phi_{3})#GT#GT #font[72]{vs} M");
5c078806 1167 fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(1,"cos(#phi_{1})");
1168 fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(2,"sin(#phi_{1})");
1169 fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(3,"cos(2#phi_{1})");
1170 fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(4,"sin(2#phi_{1})");
1171 fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(5,"cos(#phi_{1}+#phi_{2})");
1172 fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(6,"sin(#phi_{1}+#phi_{2})");
1173 fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(7,"cos(2#phi_{1}-#phi_{2})");
1174 fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(8,"sin(2#phi_{1}-#phi_{2})");
e999459d 1175 // fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(9,"cos(#phi_{1}-#phi_{2}-#phi_{3})"); // not needed
1176 // fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(10,"sin(#phi_{1}-#phi_{2}-#phi_{3})"); // not needed
5c078806 1177 } else
1178 {
e999459d 1179 fNonIsotropicTermsVsMPro->SetTitle(Form("Non-isotropic terms in decomposition of #LT#LTcos[%d(#phi_{1}+#phi_{2}-2#phi_{3})]#GT#GT",fHarmonic));
1180 fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(1,Form("cos(%d#phi_{1})",fHarmonic));
1181 fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(2,Form("sin(%d#phi_{1})",fHarmonic));
1182 fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(3,Form("cos(%d#phi_{1})",2*fHarmonic));
1183 fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(4,Form("sin(%d#phi_{1})",2*fHarmonic));
1184 fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(5,Form("cos[%d(#phi_{1}+#phi_{2})]",fHarmonic));
1185 fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(6,Form("sin[%d(#phi_{1}+#phi_{2})]",fHarmonic));
1186 fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(7,Form("cos[%d(2#phi_{1}-#phi_{2})]",fHarmonic));
1187 fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(8,Form("sin[%d(2#phi_{1}-#phi_{2})]",fHarmonic));
1188 // fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(9,Form("cos(%d(#phi_{1}-#phi_{2}-#phi_{3}))",fHarmonic)); // not needed
1189 // fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(10,Form("sin(%d(#phi_{1}-#phi_{2}-#phi_{3}))",fHarmonic)); // not needed
5c078806 1190 }
b71a354b 1191 if(fShowBinLabelsVsM)
1192 {
1193 fNonIsotropicTermsVsMPro->GetYaxis()->SetBinLabel(1,Form("M < %d",(Int_t)fMinMultiplicity));
1194 for(Int_t b=2;b<=fNoOfMultipicityBins+1;b++)
1195 {
1196 fNonIsotropicTermsVsMPro->GetYaxis()->SetBinLabel(b,Form("%d #leq M < %d",(Int_t)(fMinMultiplicity+(b-2)*fMultipicityBinWidth),(Int_t)(fMinMultiplicity+(b-1)*fMultipicityBinWidth)));
1197 }
1198 fNonIsotropicTermsVsMPro->GetYaxis()->SetBinLabel(fNoOfMultipicityBins+2,Form(" M #geq %d",(Int_t)(fMinMultiplicity+fNoOfMultipicityBins*fMultipicityBinWidth)));
1199 } else
1200 {
1201 fNonIsotropicTermsVsMPro->GetYaxis()->SetTitle("M");
1202 }
5c078806 1203 fProfileList->Add(fNonIsotropicTermsVsMPro);
b71a354b 1204
1205 // d) Histogram which quantifies bias coming from detector inefficiencies to 3-p correlator <<cos[n(phi1+phi2-2phi3)]>> vs M:
489d5531 1206 TString detectorBiasVsMHistName = "fDetectorBiasVsMHist";
e558a733 1207 fDetectorBiasVsMHist = new TH1D(detectorBiasVsMHistName.Data(),"",fNoOfMultipicityBins+2,0,fNoOfMultipicityBins+2);
e999459d 1208 fDetectorBiasVsMHist->SetStats(kFALSE);
1209 if(fHarmonic == 1)
e558a733 1210 {
e999459d 1211 fDetectorBiasVsMHist->SetTitle("#frac{corrected}{measured} #LT#LTcos(#phi_{1}+#phi_{2}-2#phi_{3})#GT#GT #font[72]{vs} M");
e558a733 1212 } else
1213 {
e999459d 1214 fDetectorBiasVsMHist->SetTitle(Form("#frac{corrected}{measured} #LT#LTcos[%d(#phi_{1}+#phi_{2}-2#phi_{3})]#GT#GT #font[72]{vs} M",fHarmonic));
e558a733 1215 }
b71a354b 1216 if(fShowBinLabelsVsM)
1217 {
1218 fDetectorBiasVsMHist->GetXaxis()->SetBinLabel(1,Form("M < %d",(Int_t)fMinMultiplicity));
1219 for(Int_t b=2;b<=fNoOfMultipicityBins+1;b++)
1220 {
1221 fDetectorBiasVsMHist->GetXaxis()->SetBinLabel(b,Form("%d #leq M < %d",(Int_t)(fMinMultiplicity+(b-2)*fMultipicityBinWidth),(Int_t)(fMinMultiplicity+(b-1)*fMultipicityBinWidth)));
1222 }
1223 fDetectorBiasVsMHist->GetXaxis()->SetBinLabel(fNoOfMultipicityBins+2,Form(" M #geq %d",(Int_t)(fMinMultiplicity+fNoOfMultipicityBins*fMultipicityBinWidth)));
1224 } else
1225 {
1226 fDetectorBiasVsMHist->GetXaxis()->SetTitle("M");
1227 }
e558a733 1228 fResultsList->Add(fDetectorBiasVsMHist);
b71a354b 1229
1230} // end of void AliFlowAnalysisWithMixedHarmonics::BookVsM()
1231
1232//================================================================================================================
1233
1234void AliFlowAnalysisWithMixedHarmonics::BookDifferential()
1235{
1236 // Book histos and profiles holding results vs (p1+p2)/2 and |p1-p2|.
d66d46f7 1237
5c078806 1238 TString psdFlag[2] = {"PtSum","PtDiff"};
e999459d 1239 TString psdTitleFlag[2] = {"(p_{T,1}+ p_{T,2})/2","#left|p_{T,1}- p_{T,2}#right|"};
41e6d9e4 1240 TString psdFlag2[2] = {"EtaSum","EtaDiff"};
1241 TString psdTitleFlag2[2] = {"(#eta_{1}+ #eta_{2})/2","#left|#eta_{1}- #eta_{2}#right|"};
5c078806 1242 //TString s3pCorrelatorVsPtSumDiffProName = "f3pCorrelatorVsPtSumDiffPro";
1243 for(Int_t sd=0;sd<2;sd++)
1244 {
5c078806 1245 f3pCorrelatorVsPtSumDiffPro[sd] = new TProfile(Form("f3pCorrelatorVs%sPro",psdFlag[sd].Data()),"",fnBinsPt,0.,fPtMax);
e999459d 1246 f3pCorrelatorVsPtSumDiffPro[sd]->SetStats(kFALSE);
41e6d9e4 1247 f3pCorrelatorVsEtaSumDiffPro[sd] = new TProfile(Form("f3pCorrelatorVs%sPro",psdFlag2[sd].Data()),"",fnBinsEta,fEtaMin,fEtaMax);
1248 f3pCorrelatorVsEtaSumDiffPro[sd]->SetStats(kFALSE);
5c078806 1249 //f3pCorrelatorVsPtSumDiffPro[sd]->SetLabelSize(0.05);
1250 //f3pCorrelatorVsPtSumDiffPro[sd]->SetMarkerStyle(25);
e999459d 1251 if(fHarmonic == 1)
1252 {
1253 f3pCorrelatorVsPtSumDiffPro[sd]->SetTitle(Form("#LT#LTcos(#psi_{1}+#psi_{2}-2#phi_{3})#GT#GT #font[72]{vs} %s",psdTitleFlag[sd].Data()));
41e6d9e4 1254 f3pCorrelatorVsEtaSumDiffPro[sd]->SetTitle(Form("#LT#LTcos(#psi_{1}+#psi_{2}-2#phi_{3})#GT#GT #font[72]{vs} %s",psdTitleFlag2[sd].Data()));
e999459d 1255 } else
1256 {
1257 f3pCorrelatorVsPtSumDiffPro[sd]->SetTitle(Form("#LT#LTcos[%d(#psi_{1}+#psi_{2}-2#phi_{3})]#GT#GT #font[72]{vs} %s",fHarmonic,psdTitleFlag[sd].Data()));
41e6d9e4 1258 f3pCorrelatorVsEtaSumDiffPro[sd]->SetTitle(Form("#LT#LTcos[%d(#psi_{1}+#psi_{2}-2#phi_{3})]#GT#GT #font[72]{vs} %s",fHarmonic,psdTitleFlag2[sd].Data()));
e999459d 1259 }
5c078806 1260 f3pCorrelatorVsPtSumDiffPro[sd]->GetXaxis()->SetTitle(psdTitleFlag[sd].Data());
1261 fProfileList->Add(f3pCorrelatorVsPtSumDiffPro[sd]);
41e6d9e4 1262 f3pCorrelatorVsEtaSumDiffPro[sd]->GetXaxis()->SetTitle(psdTitleFlag2[sd].Data());
1263 fProfileList->Add(f3pCorrelatorVsEtaSumDiffPro[sd]);
e409ac85 1264 }
50040ed6 1265
1266 // Corrected for detector effects:
1267 for(Int_t sd=0;sd<2;sd++)
1268 {
1269 f3pCorrelatorVsPtSumDiffHist[sd] = new TH1D(Form("f3pCorrelatorVs%sHist",psdFlag[sd].Data()),"",fnBinsPt,0.,fPtMax);
1270 f3pCorrelatorVsPtSumDiffHist[sd]->SetStats(kFALSE);
1271 f3pCorrelatorVsEtaSumDiffHist[sd] = new TH1D(Form("f3pCorrelatorVs%sHist",psdFlag2[sd].Data()),"",fnBinsEta,fEtaMin,fEtaMax);
1272 f3pCorrelatorVsEtaSumDiffHist[sd]->SetStats(kFALSE);
1273 //f3pCorrelatorVsPtSumDiffHist[sd]->SetLabelSize(0.05);
1274 //f3pCorrelatorVsPtSumDiffHist[sd]->SetMarkerStyle(25);
1275 if(fHarmonic == 1)
1276 {
1277 f3pCorrelatorVsPtSumDiffHist[sd]->SetTitle(Form("#LT#LTcos(#psi_{1}+#psi_{2}-2#phi_{3})#GT#GT #font[72]{vs} %s",psdTitleFlag[sd].Data()));
1278 f3pCorrelatorVsEtaSumDiffHist[sd]->SetTitle(Form("#LT#LTcos(#psi_{1}+#psi_{2}-2#phi_{3})#GT#GT #font[72]{vs} %s",psdTitleFlag2[sd].Data()));
1279 } else
1280 {
1281 f3pCorrelatorVsPtSumDiffHist[sd]->SetTitle(Form("#LT#LTcos[%d(#psi_{1}+#psi_{2}-2#phi_{3})]#GT#GT #font[72]{vs} %s",fHarmonic,psdTitleFlag[sd].Data()));
1282 f3pCorrelatorVsEtaSumDiffHist[sd]->SetTitle(Form("#LT#LTcos[%d(#psi_{1}+#psi_{2}-2#phi_{3})]#GT#GT #font[72]{vs} %s",fHarmonic,psdTitleFlag2[sd].Data()));
1283 }
1284 f3pCorrelatorVsPtSumDiffHist[sd]->GetXaxis()->SetTitle(psdTitleFlag[sd].Data());
1285 fResultsList->Add(f3pCorrelatorVsPtSumDiffHist[sd]);
1286 f3pCorrelatorVsEtaSumDiffHist[sd]->GetXaxis()->SetTitle(psdTitleFlag2[sd].Data());
1287 fResultsList->Add(f3pCorrelatorVsEtaSumDiffHist[sd]);
1288 }
1289
1290 //TString psdFlag[2] = {"PtSum","PtDiff"};
1291 //TString psdTitleFlag[2] = {"(p_{T,1}+ p_{T,2})/2","#left|p_{T,1}- p_{T,2}#right|"};
1292 //TString psdFlag2[2] = {"EtaSum","EtaDiff"};
1293 //TString psdTitleFlag2[2] = {"(#eta_{1}+ #eta_{2})/2","#left|#eta_{1}- #eta_{2}#right|"};
1294 TString nonIsotropicTerm[10] = {"#LT#LTcos(#psi_{POI_1})#GT#GT","#LT#LTsin(#psi_{POI_1})#GT#GT",
1295 "#LT#LTcos(#psi_{POI_2})#GT#GT","#LT#LTsin(#psi_{POI_2})#GT#GT",
1296 "#LT#LTcos(#psi_{POI_1}-2#phi_{RP})#GT#GT","#LT#LTsin(#psi_{POI_1}-2#phi_{RP})#GT#GT",
1297 "#LT#LTcos(#psi_{POI_2}-2#phi_{RP})#GT#GT","#LT#LTsin(#psi_{POI_2}-2#phi_{RP})#GT#GT",
1298 "#LT#LTcos(#psi_{POI_1}+#psi_{POI_2})#GT#GT","#LT#LTsin(#psi_{POI_1}+#psi_{POI_2})#GT#GT"};
1299 for(Int_t sd=0;sd<2;sd++)
1300 {
1301 for(Int_t t=0;t<10;t++)
1302 {
1303 // Pt:
1304 fNonIsotropicTermsVsPtSumDiffPro[sd][t] = new TProfile(Form("fNonIsotropicTermsVs%sPro %s",psdFlag[sd].Data(),nonIsotropicTerm[t].Data()),"",fnBinsPt,0.,fPtMax);
1305 fNonIsotropicTermsVsPtSumDiffPro[sd][t]->SetTitle(Form("%s vs %s",nonIsotropicTerm[t].Data(),psdTitleFlag[sd].Data()));
1306 fNonIsotropicTermsVsPtSumDiffPro[sd][t]->SetStats(kFALSE);
1307 fNonIsotropicTermsVsPtSumDiffPro[sd][t]->GetXaxis()->SetTitle(psdTitleFlag[sd].Data());
1308 fNonIsotropicTermsList->Add(fNonIsotropicTermsVsPtSumDiffPro[sd][t]);
1309 // Eta:
1310 fNonIsotropicTermsVsEtaSumDiffPro[sd][t] = new TProfile(Form("fNonIsotropicTermsVs%sPro %s",psdFlag2[sd].Data(),nonIsotropicTerm[t].Data()),"",fnBinsEta,fEtaMin,fEtaMax);
1311 fNonIsotropicTermsVsEtaSumDiffPro[sd][t]->SetTitle(Form("%s vs %s",nonIsotropicTerm[t].Data(),psdTitleFlag2[sd].Data()));
1312 fNonIsotropicTermsVsEtaSumDiffPro[sd][t]->SetStats(kFALSE);
1313 fNonIsotropicTermsVsEtaSumDiffPro[sd][t]->GetXaxis()->SetTitle(psdTitleFlag2[sd].Data());
1314 fNonIsotropicTermsList->Add(fNonIsotropicTermsVsEtaSumDiffPro[sd][t]);
1315 } // end of for(Int_t t=0;t<10;t++)
1316 } // end of for(Int_t sd=0;sd<2;sd++)
e409ac85 1317
debab807 1318 //2p correlator vs |Pt1-Pt2|
1319 f2pCorrelatorCosPsiDiffPtDiff = new TProfile("f2pCorrelatorCosPsiDiffPtDiff",";|p_{T,1}-p_{T,2}| (GeV/c);#LT #LT cos(#psi_{1} - #psi_{2}) #GT #GT",fnBinsPt,0.,fPtMax);
1320 f2pCorrelatorCosPsiDiffPtDiff->SetStats(kFALSE);
1321 f2pCorrelatorCosPsiSumPtDiff = new TProfile("f2pCorrelatorCosPsiSumPtDiff",";|p_{T,1}-p_{T,2}| (GeV/c);#LT #LT cos(#psi_{1} + #psi_{2}) #GT #GT",fnBinsPt,0.,fPtMax);
1322 f2pCorrelatorCosPsiSumPtDiff->SetStats(kFALSE);
1323 f2pCorrelatorSinPsiDiffPtDiff = new TProfile("f2pCorrelatorSinPsiDiffPtDiff",";|p_{T,1}-p_{T,2}| (GeV/c);#LT #LT sin(#psi_{1} - #psi_{2}) #GT #GT",fnBinsPt,0.,fPtMax);
1324 f2pCorrelatorSinPsiDiffPtDiff->SetStats(kFALSE);
1325 f2pCorrelatorSinPsiSumPtDiff = new TProfile("f2pCorrelatorSinPsiSumPtDiff",";|p_{T,1}-p_{T,2}| (GeV/c);#LT #LT sin(#psi_{1} + #psi_{2}) #GT #GT",fnBinsPt,0.,fPtMax);
1326 f2pCorrelatorSinPsiSumPtDiff->SetStats(kFALSE);
e409ac85 1327 if(fHarmonic == 1) {
debab807 1328 f2pCorrelatorCosPsiDiffPtDiff->SetTitle(Form("#LT#LTcos(#psi_{1}-#psi_{2})#GT#GT #font[72]{vs} %s",psdTitleFlag[1].Data()));
1329 f2pCorrelatorCosPsiSumPtDiff->SetTitle(Form("#LT#LTcos(#psi_{1}+#psi_{2})#GT#GT #font[72]{vs} %s",psdTitleFlag[1].Data()));
1330 f2pCorrelatorSinPsiDiffPtDiff->SetTitle(Form("#LT#LTsin(#psi_{1}-#psi_{2})#GT#GT #font[72]{vs} %s",psdTitleFlag[1].Data()));
1331 f2pCorrelatorSinPsiSumPtDiff->SetTitle(Form("#LT#LTsin(#psi_{1}+#psi_{2})#GT#GT #font[72]{vs} %s",psdTitleFlag[1].Data()));
e409ac85 1332 }
1333 else {
debab807 1334 f2pCorrelatorCosPsiDiffPtDiff->SetTitle(Form("#LT#LTcos[%d(#psi_{1}-#psi_{2})]#GT#GT #font[72]{vs} %s",fHarmonic,psdTitleFlag[1].Data()));
1335 f2pCorrelatorCosPsiSumPtDiff->SetTitle(Form("#LT#LTcos[%d(#psi_{1}+#psi_{2})]#GT#GT #font[72]{vs} %s",fHarmonic,psdTitleFlag[1].Data()));
1336 f2pCorrelatorSinPsiDiffPtDiff->SetTitle(Form("#LT#LTsin[%d(#psi_{1}-#psi_{2})]#GT#GT #font[72]{vs} %s",fHarmonic,psdTitleFlag[1].Data()));
1337 f2pCorrelatorSinPsiSumPtDiff->SetTitle(Form("#LT#LTsin[%d(#psi_{1}+#psi_{2})]#GT#GT #font[72]{vs} %s",fHarmonic,psdTitleFlag[1].Data()));
e409ac85 1338 }
debab807 1339 fProfileList->Add(f2pCorrelatorCosPsiDiffPtDiff);
1340 fProfileList->Add(f2pCorrelatorCosPsiSumPtDiff);
1341 fProfileList->Add(f2pCorrelatorSinPsiDiffPtDiff);
1342 fProfileList->Add(f2pCorrelatorSinPsiSumPtDiff);
1343
1344 //2p correlator vs (Pt1+Pt2)/2
1345 f2pCorrelatorCosPsiDiffPtSum = new TProfile("f2pCorrelatorCosPsiDiffPtSum",";(p_{T,1}+p_{T,2})/2 (GeV/c);#LT #LT cos(#psi_{1} - #psi_{2}) #GT #GT",fnBinsPt,0.,fPtMax);
1346 f2pCorrelatorCosPsiDiffPtSum->SetStats(kFALSE);
1347 f2pCorrelatorCosPsiSumPtSum = new TProfile("f2pCorrelatorCosPsiSumPtSum",";(p_{T,1}+p_{T,2})/2 (GeV/c);#LT #LT cos(#psi_{1} + #psi_{2}) #GT #GT",fnBinsPt,0.,fPtMax);
1348 f2pCorrelatorCosPsiSumPtSum->SetStats(kFALSE);
1349 f2pCorrelatorSinPsiDiffPtSum = new TProfile("f2pCorrelatorSinPsiDiffPtSum",";(p_{T,1}+p_{T,2})/2 (GeV/c);#LT #LT sin(#psi_{1} - #psi_{2}) #GT #GT",fnBinsPt,0.,fPtMax);
1350 f2pCorrelatorSinPsiDiffPtSum->SetStats(kFALSE);
1351 f2pCorrelatorSinPsiSumPtSum = new TProfile("f2pCorrelatorSinPsiSumPtSum",";(p_{T,1}+p_{T,2})/2 (GeV/c);#LT #LT sin(#psi_{1} + #psi_{2}) #GT #GT",fnBinsPt,0.,fPtMax);
1352 f2pCorrelatorSinPsiSumPtSum->SetStats(kFALSE);
1353 if(fHarmonic == 1) {
1354 f2pCorrelatorCosPsiDiffPtSum->SetTitle(Form("#LT#LTcos(#psi_{1}-#psi_{2})#GT#GT #font[72]{vs} %s",psdTitleFlag[0].Data()));
1355 f2pCorrelatorCosPsiSumPtSum->SetTitle(Form("#LT#LTcos(#psi_{1}+#psi_{2})#GT#GT #font[72]{vs} %s",psdTitleFlag[0].Data()));
1356 f2pCorrelatorSinPsiDiffPtSum->SetTitle(Form("#LT#LTsin(#psi_{1}-#psi_{2})#GT#GT #font[72]{vs} %s",psdTitleFlag[0].Data()));
1357 f2pCorrelatorSinPsiSumPtSum->SetTitle(Form("#LT#LTsin(#psi_{1}+#psi_{2})#GT#GT #font[72]{vs} %s",psdTitleFlag[0].Data()));
1358 }
1359 else {
1360 f2pCorrelatorCosPsiDiffPtSum->SetTitle(Form("#LT#LTcos[%d(#psi_{1}-#psi_{2})]#GT#GT #font[72]{vs} %s",fHarmonic,psdTitleFlag[0].Data()));
1361 f2pCorrelatorCosPsiSumPtSum->SetTitle(Form("#LT#LTcos[%d(#psi_{1}+#psi_{2})]#GT#GT #font[72]{vs} %s",fHarmonic,psdTitleFlag[0].Data()));
1362 f2pCorrelatorSinPsiDiffPtSum->SetTitle(Form("#LT#LTsin[%d(#psi_{1}-#psi_{2})]#GT#GT #font[72]{vs} %s",fHarmonic,psdTitleFlag[0].Data()));
1363 f2pCorrelatorSinPsiSumPtSum->SetTitle(Form("#LT#LTsin[%d(#psi_{1}+#psi_{2})]#GT#GT #font[72]{vs} %s",fHarmonic,psdTitleFlag[0].Data()));
1364 }
1365 fProfileList->Add(f2pCorrelatorCosPsiDiffPtSum);
1366 fProfileList->Add(f2pCorrelatorCosPsiSumPtSum);
1367 fProfileList->Add(f2pCorrelatorSinPsiDiffPtSum);
1368 fProfileList->Add(f2pCorrelatorSinPsiSumPtSum);
1369
1370 //2p correlator vs |eta1-eta2|
1371 f2pCorrelatorCosPsiDiffEtaDiff = new TProfile("f2pCorrelatorCosPsiDiffEtaDiff",";|#eta_{1}-#eta_{2}|;#LT #LT cos(#psi_{1} - #psi_{2}) #GT #GT",fnBinsEta,fEtaMin,fEtaMax);
1372 f2pCorrelatorCosPsiDiffEtaDiff->SetStats(kFALSE);
1373 f2pCorrelatorCosPsiSumEtaDiff = new TProfile("f2pCorrelatorCosPsiSumEtaDiff",";|#eta_{1}-#eta_{2}|;#LT #LT cos(#psi_{1} + #psi_{2}) #GT #GT",fnBinsEta,fEtaMin,fEtaMax);
1374 f2pCorrelatorCosPsiSumEtaDiff->SetStats(kFALSE);
1375 f2pCorrelatorSinPsiDiffEtaDiff = new TProfile("f2pCorrelatorSinPsiDiffEtaDiff",";|#eta_{1}-#eta_{2}|;#LT #LT sin(#psi_{1} - #psi_{2}) #GT #GT",fnBinsEta,fEtaMin,fEtaMax);
1376 f2pCorrelatorSinPsiDiffEtaDiff->SetStats(kFALSE);
1377 f2pCorrelatorSinPsiSumEtaDiff = new TProfile("f2pCorrelatorSinPsiSumEtaDiff",";|#eta_{1}-#eta_{2}|;#LT #LT sin(#psi_{1} + #psi_{2}) #GT #GT",fnBinsEta,fEtaMin,fEtaMax);
1378 f2pCorrelatorSinPsiSumEtaDiff->SetStats(kFALSE);
1379 if(fHarmonic == 1) {
1380 f2pCorrelatorCosPsiDiffEtaDiff->SetTitle(Form("#LT#LTcos(#psi_{1}-#psi_{2})#GT#GT #font[72]{vs} %s",psdTitleFlag2[1].Data()));
1381 f2pCorrelatorCosPsiSumEtaDiff->SetTitle(Form("#LT#LTcos(#psi_{1}+#psi_{2})#GT#GT #font[72]{vs} %s",psdTitleFlag2[1].Data()));
1382 f2pCorrelatorSinPsiDiffEtaDiff->SetTitle(Form("#LT#LTsin(#psi_{1}-#psi_{2})#GT#GT #font[72]{vs} %s",psdTitleFlag2[1].Data()));
1383 f2pCorrelatorSinPsiSumEtaDiff->SetTitle(Form("#LT#LTsin(#psi_{1}+#psi_{2})#GT#GT #font[72]{vs} %s",psdTitleFlag2[1].Data()));
1384 }
1385 else {
1386 f2pCorrelatorCosPsiDiffEtaDiff->SetTitle(Form("#LT#LTcos[%d(#psi_{1}-#psi_{2})]#GT#GT #font[72]{vs} %s",fHarmonic,psdTitleFlag2[1].Data()));
1387 f2pCorrelatorCosPsiSumEtaDiff->SetTitle(Form("#LT#LTcos[%d(#psi_{1}+#psi_{2})]#GT#GT #font[72]{vs} %s",fHarmonic,psdTitleFlag2[1].Data()));
1388 f2pCorrelatorSinPsiDiffEtaDiff->SetTitle(Form("#LT#LTsin[%d(#psi_{1}-#psi_{2})]#GT#GT #font[72]{vs} %s",fHarmonic,psdTitleFlag2[1].Data()));
1389 f2pCorrelatorSinPsiSumEtaDiff->SetTitle(Form("#LT#LTsin[%d(#psi_{1}+#psi_{2})]#GT#GT #font[72]{vs} %s",fHarmonic,psdTitleFlag2[1].Data()));
1390 }
1391 fProfileList->Add(f2pCorrelatorCosPsiDiffEtaDiff);
1392 fProfileList->Add(f2pCorrelatorCosPsiSumEtaDiff);
1393 fProfileList->Add(f2pCorrelatorSinPsiDiffEtaDiff);
1394 fProfileList->Add(f2pCorrelatorSinPsiSumEtaDiff);
1395
1396 //2p correlator vs (eta1+eta2)/2
1397 f2pCorrelatorCosPsiDiffEtaSum = new TProfile("f2pCorrelatorCosPsiDiffEtaSum",";(#eta_{1}+#eta_{,2})/2;#LT #LT cos(#psi_{1} - #psi_{2}) #GT #GT",fnBinsEta,fEtaMin,fEtaMax);
1398 f2pCorrelatorCosPsiDiffEtaSum->SetStats(kFALSE);
1399 f2pCorrelatorCosPsiSumEtaSum = new TProfile("f2pCorrelatorCosPsiSumEtaSum",";(#eta_{1}+#eta_{,2})/2;#LT #LT cos(#psi_{1} + #psi_{2}) #GT #GT",fnBinsEta,fEtaMin,fEtaMax);
1400 f2pCorrelatorCosPsiSumEtaSum->SetStats(kFALSE);
1401 f2pCorrelatorSinPsiDiffEtaSum = new TProfile("f2pCorrelatorSinPsiDiffEtaSum",";(#eta_{1}+#eta_{,2})/2;#LT #LT sin(#psi_{1} - #psi_{2}) #GT #GT",fnBinsEta,fEtaMin,fEtaMax);
1402 f2pCorrelatorSinPsiDiffEtaSum->SetStats(kFALSE);
1403 f2pCorrelatorSinPsiSumEtaSum = new TProfile("f2pCorrelatorSinPsiSumEtaSum",";(#eta_{1}+#eta_{,2})/2;#LT #LT sin(#psi_{1} + #psi_{2}) #GT #GT",fnBinsEta,fEtaMin,fEtaMax);
1404 f2pCorrelatorSinPsiSumEtaSum->SetStats(kFALSE);
1405 if(fHarmonic == 1) {
1406 f2pCorrelatorCosPsiDiffEtaSum->SetTitle(Form("#LT#LTcos(#psi_{1}-#psi_{2})#GT#GT #font[72]{vs} %s",psdTitleFlag2[0].Data()));
1407 f2pCorrelatorCosPsiSumEtaSum->SetTitle(Form("#LT#LTcos(#psi_{1}+#psi_{2})#GT#GT #font[72]{vs} %s",psdTitleFlag2[0].Data()));
1408 f2pCorrelatorSinPsiDiffEtaSum->SetTitle(Form("#LT#LTsin(#psi_{1}-#psi_{2})#GT#GT #font[72]{vs} %s",psdTitleFlag2[0].Data()));
1409 f2pCorrelatorSinPsiSumEtaSum->SetTitle(Form("#LT#LTsin(#psi_{1}+#psi_{2})#GT#GT #font[72]{vs} %s",psdTitleFlag2[0].Data()));
1410 }
1411 else {
1412 f2pCorrelatorCosPsiDiffEtaSum->SetTitle(Form("#LT#LTcos[%d(#psi_{1}-#psi_{2})]#GT#GT #font[72]{vs} %s",fHarmonic,psdTitleFlag2[0].Data()));
1413 f2pCorrelatorCosPsiSumEtaSum->SetTitle(Form("#LT#LTcos[%d(#psi_{1}+#psi_{2})]#GT#GT #font[72]{vs} %s",fHarmonic,psdTitleFlag2[0].Data()));
1414 f2pCorrelatorSinPsiDiffEtaSum->SetTitle(Form("#LT#LTsin[%d(#psi_{1}-#psi_{2})]#GT#GT #font[72]{vs} %s",fHarmonic,psdTitleFlag2[0].Data()));
1415 f2pCorrelatorSinPsiSumEtaSum->SetTitle(Form("#LT#LTsin[%d(#psi_{1}+#psi_{2})]#GT#GT #font[72]{vs} %s",fHarmonic,psdTitleFlag2[0].Data()));
1416 }
1417 fProfileList->Add(f2pCorrelatorCosPsiDiffEtaSum);
1418 fProfileList->Add(f2pCorrelatorCosPsiSumEtaSum);
1419 fProfileList->Add(f2pCorrelatorSinPsiDiffEtaSum);
1420 fProfileList->Add(f2pCorrelatorSinPsiSumEtaSum);
e409ac85 1421
b71a354b 1422} // end of void AliFlowAnalysisWithMixedHarmonics::BookDifferential()
50040ed6 1423
d66d46f7 1424//================================================================================================================
1425
50040ed6 1426void AliFlowAnalysisWithMixedHarmonics::AccessConstants(TString method)
489d5531 1427{
50040ed6 1428 // Access and store common constants.
1429
1430 // a) If this method was called in Init() access common constants from AliFlowCommonConstants;
1431 // b) If this method was called in Init() book and fill TProfile to hold constants accessed in a);
1432 // c) If this method was called in Finish() access common constants from TProfile booked and filled in b).
1433
1434 if(method == "Init")
1435 {
1436 // a) If this method was called in Init() access common constants from AliFlowCommonConstants:
1437 fnBinsPhi = AliFlowCommonConstants::GetMaster()->GetNbinsPhi();
1438 fPhiMin = AliFlowCommonConstants::GetMaster()->GetPhiMin();
1439 fPhiMax = AliFlowCommonConstants::GetMaster()->GetPhiMax();
1440 if(fnBinsPhi){fPhiBinWidth = (fPhiMax-fPhiMin)/fnBinsPhi;}
1441 fnBinsPt = AliFlowCommonConstants::GetMaster()->GetNbinsPt();
1442 fPtMin = AliFlowCommonConstants::GetMaster()->GetPtMin();
1443 fPtMax = AliFlowCommonConstants::GetMaster()->GetPtMax();
1444 if(fnBinsPt){fPtBinWidth = (fPtMax-fPtMin)/fnBinsPt;}
1445 fnBinsEta = AliFlowCommonConstants::GetMaster()->GetNbinsEta();
1446 fEtaMin = AliFlowCommonConstants::GetMaster()->GetEtaMin();
1447 fEtaMax = AliFlowCommonConstants::GetMaster()->GetEtaMax();
1448 if(fnBinsEta){fEtaBinWidth = (fEtaMax-fEtaMin)/fnBinsEta;}
1449
1450 // b) If this method was called in Init() book and fill TProfile to hold constants accessed in a):
1451 TString fCommonConstantsName = "fCommonConstants";
1452 fCommonConstants = new TProfile(fCommonConstantsName.Data(),"Common constants",9,0.,9.);
1453 fCommonConstants->SetLabelSize(0.05);
1454 fCommonConstants->GetXaxis()->SetBinLabel(1,"nBins (#phi)");
1455 fCommonConstants->Fill(0.5,fnBinsPhi);
1456 fCommonConstants->GetXaxis()->SetBinLabel(2,"#phi_{min}");
1457 fCommonConstants->Fill(1.5,fPhiMin);
1458 fCommonConstants->GetXaxis()->SetBinLabel(3,"#phi_{max}");
1459 fCommonConstants->Fill(2.5,fPhiMax);
1460 fCommonConstants->GetXaxis()->SetBinLabel(4,"nBins (p_{t})");
1461 fCommonConstants->Fill(3.5,fnBinsPt);
1462 fCommonConstants->GetXaxis()->SetBinLabel(5,"(p_{t})_{min}");
1463 fCommonConstants->Fill(4.5,fPtMin);
1464 fCommonConstants->GetXaxis()->SetBinLabel(6,"(p_{t})_{max}");
1465 fCommonConstants->Fill(5.5,fPtMax);
1466 fCommonConstants->GetXaxis()->SetBinLabel(7,"nBins (#eta)");
1467 fCommonConstants->Fill(6.5,fnBinsEta);
1468 fCommonConstants->GetXaxis()->SetBinLabel(8,"#eta_{min}");
1469 fCommonConstants->Fill(7.5,fEtaMin);
1470 fCommonConstants->GetXaxis()->SetBinLabel(9,"#eta_{max}");
1471 fCommonConstants->Fill(8.5,fEtaMax);
1472 fHistList->Add(fCommonConstants);
1473 } // end of if(method == "Init")
1474 else if(method == "Finish")
1475 {
1476 // c) If this method was called in Finish() access common constants from TProfile booked and filled in b):
1477 if(!fCommonConstants)
1478 {
1479 printf("\n WARNING (MH): fCommonConstants is NULL in AFAWMH::AC(\"%s\") !!!!\n\n",method.Data());
1480 exit(0);
1481 }
1482 fnBinsPhi = (Int_t)fCommonConstants->GetBinContent(1);
1483 fPhiMin = fCommonConstants->GetBinContent(2);
1484 fPhiMax = fCommonConstants->GetBinContent(3);
1485 if(fnBinsPhi){fPhiBinWidth = (fPhiMax-fPhiMin)/fnBinsPhi;}
1486 fnBinsPt = (Int_t)fCommonConstants->GetBinContent(4);
1487 fPtMin = fCommonConstants->GetBinContent(5);
1488 fPtMax = fCommonConstants->GetBinContent(6);
1489 if(fnBinsPt){fPtBinWidth = (fPtMax-fPtMin)/fnBinsPt;}
1490 fnBinsEta = (Int_t)fCommonConstants->GetBinContent(7);
1491 fEtaMin = fCommonConstants->GetBinContent(8);
1492 fEtaMax = fCommonConstants->GetBinContent(9);
1493 if(fnBinsEta){fEtaBinWidth = (fEtaMax-fEtaMin)/fnBinsEta;}
1494 } // end of else if(method == "Finish")
1495
1496} // end of void AliFlowAnalysisWithMixedHarmonics::AccessConstants(TString method)
d66d46f7 1497
489d5531 1498//================================================================================================================
1499
1500void AliFlowAnalysisWithMixedHarmonics::CrossCheckSettings()
1501{
1502 // Cross-check if the user settings make sense.
1503
e999459d 1504 // ...
1505
489d5531 1506} // end of void AliFlowAnalysisWithMixedHarmonics::CrossCheckSettings()
1507
1508//================================================================================================================
1509
1510void AliFlowAnalysisWithMixedHarmonics::BookAndFillWeightsHistograms()
1511{
1512 // Book and fill (by accessing file "weights.root") histograms which hold phi, pt and eta weights.
1513
1514 if(!fWeightsList)
1515 {
e999459d 1516 cout<<endl;
1517 cout<<" WARNING (MH): fWeightsList is NULL in BookAndFillWeightsHistograms() !!!!"<<endl;
1518 cout<<endl;
489d5531 1519 exit(0);
1520 }
1521 // Profile to hold flags for weights:
1522 TString fUseParticleWeightsName = "fUseParticleWeightsMH";
1523 fUseParticleWeights = new TProfile(fUseParticleWeightsName.Data(),"0 = particle weight not used, 1 = particle weight used ",3,0,3);
e999459d 1524 fUseParticleWeights->SetStats(kFALSE);
489d5531 1525 fUseParticleWeights->SetLabelSize(0.06);
1526 (fUseParticleWeights->GetXaxis())->SetBinLabel(1,"w_{#phi}");
1527 (fUseParticleWeights->GetXaxis())->SetBinLabel(2,"w_{p_{T}}");
1528 (fUseParticleWeights->GetXaxis())->SetBinLabel(3,"w_{#eta}");
1529 fUseParticleWeights->Fill(0.5,(Int_t)fUsePhiWeights);
1530 fUseParticleWeights->Fill(1.5,(Int_t)fUsePtWeights);
1531 fUseParticleWeights->Fill(2.5,(Int_t)fUseEtaWeights);
1532 fWeightsList->Add(fUseParticleWeights);
1533 // Phi-weights:
1534 if(fUsePhiWeights)
1535 {
1536 if(fWeightsList->FindObject("phi_weights"))
1537 {
1538 fPhiWeights = dynamic_cast<TH1F*>(fWeightsList->FindObject("phi_weights"));
54451c00 1539 if (!fPhiWeights)
1540 {
1541 printf("WARNING: no phi weights. bye!\n");
1542 exit(0);
1543 }
489d5531 1544 if(TMath::Abs(fPhiWeights->GetBinWidth(1)-fPhiBinWidth)>pow(10.,-6.))
1545 {
d66d46f7 1546 cout<<endl;
e999459d 1547 cout<<" WARNING (MH): Inconsistent binning in histograms for phi-weights throughout the code."<<endl;
d66d46f7 1548 cout<<endl;
489d5531 1549 exit(0);
1550 }
1551 } else
1552 {
e999459d 1553 cout<<endl;
1554 cout<<" WARNING (MH): fWeightsList->FindObject(\"phi_weights\") is NULL in BookAndFillWeightsHistograms() !!!!"<<endl;
1555 cout<<endl;
489d5531 1556 exit(0);
1557 }
1558 } // end of if(fUsePhiWeights)
1559 // Pt-weights:
1560 if(fUsePtWeights)
1561 {
1562 if(fWeightsList->FindObject("pt_weights"))
1563 {
1564 fPtWeights = dynamic_cast<TH1D*>(fWeightsList->FindObject("pt_weights"));
54451c00 1565 if (!fPtWeights)
1566 {
1567 printf("WARNING: no pt weights. bye!\n");
1568 exit(0);
1569 }
489d5531 1570 if(TMath::Abs(fPtWeights->GetBinWidth(1)-fPtBinWidth)>pow(10.,-6.))
1571 {
d66d46f7 1572 cout<<endl;
e999459d 1573 cout<<" WARNING (MH): Inconsistent binning in histograms for pt-weights throughout the code."<<endl;
d66d46f7 1574 cout<<endl;
489d5531 1575 exit(0);
1576 }
1577 } else
1578 {
e999459d 1579 cout<<endl;
1580 cout<<" WARNING (MH): fWeightsList->FindObject(\"pt_weights\") is NULL in BookAndFillWeightsHistograms() !!!!"<<endl;
1581 cout<<endl;
489d5531 1582 exit(0);
1583 }
1584 } // end of if(fUsePtWeights)
1585 // Eta-weights:
1586 if(fUseEtaWeights)
1587 {
1588 if(fWeightsList->FindObject("eta_weights"))
1589 {
1590 fEtaWeights = dynamic_cast<TH1D*>(fWeightsList->FindObject("eta_weights"));
54451c00 1591 if (!fEtaWeights)
1592 {
1593 printf("WARNING: no pt weights. bye!\n");
1594 exit(0);
1595 }
489d5531 1596 if(TMath::Abs(fEtaWeights->GetBinWidth(1)-fEtaBinWidth)>pow(10.,-6.))
1597 {
d66d46f7 1598 cout<<endl;
e999459d 1599 cout<<" WARNING (MH): Inconsistent binning in histograms for eta-weights throughout the code."<<endl;
d66d46f7 1600 cout<<endl;
489d5531 1601 exit(0);
1602 }
1603 } else
1604 {
e999459d 1605 cout<<endl;
1606 cout<<" WARNING (MH): fUseEtaWeights && fWeightsList->FindObject(\"eta_weights\") is NULL in BookAndFillWeightsHistograms() !!!!"<<endl;
1607 cout<<endl;
489d5531 1608 exit(0);
1609 }
1610 } // end of if(fUseEtaWeights)
1611
d66d46f7 1612} // end of AliFlowAnalysisWithMixedHarmonics::BookAndFillWeightsHistograms()
1613
1614//================================================================================================================
489d5531 1615
1616void AliFlowAnalysisWithMixedHarmonics::CheckPointersUsedInMake()
1617{
1618 // Check pointers used in method Make().
d66d46f7 1619
e558a733 1620 if(!fReQnk || !fImQnk || !fSpk )
d66d46f7 1621 {
1622 cout<<endl;
e999459d 1623 cout<<" WARNING (MH): fReQnk || fImQnk || fSpk is NULL in CheckPointersUsedInMake() !!!!"<<endl;
d66d46f7 1624 cout<<endl;
1625 exit(0);
1626 }
1627 if(!f3pCorrelatorPro)
1628 {
1629 cout<<endl;
e999459d 1630 cout<<" WARNING (MH): f3pCorrelatorPro is NULL in CheckPointersUsedInMake() !!!!"<<endl;
d66d46f7 1631 cout<<endl;
1632 exit(0);
5c078806 1633 }
97d82c42 1634 if(!f5pCorrelatorPro)
1635 {
1636 cout<<endl;
1637 cout<<" WARNING (MH): f5pCorrelatorPro is NULL in CheckPointersUsedInMake() !!!!"<<endl;
1638 cout<<endl;
1639 exit(0);
1640 }
5c078806 1641 if(!fNonIsotropicTermsPro)
1642 {
1643 cout<<endl;
e999459d 1644 cout<<" WARNING (MH): fNonIsotropicTermsPro is NULL in CheckPointersUsedInMake() !!!!"<<endl;
5c078806 1645 cout<<endl;
1646 exit(0);
1647 }
b71a354b 1648 if(!f3pCorrelatorVsMPro && fCalculateVsM)
5c078806 1649 {
1650 cout<<endl;
e999459d 1651 cout<<" WARNING (MH): f3pCorrelatorVsMPro is NULL in CheckPointersUsedInMake() !!!!"<<endl;
5c078806 1652 cout<<endl;
1653 exit(0);
1654 }
41e6d9e4 1655 if(!f3pPOICorrelatorVsM && fCalculateVsM)
1656 {
1657 cout<<endl;
1658 cout<<" WARNING (MH): f3pPOICorrelatorVsM is NULL in CheckPointersUsedInMake() !!!!"<<endl;
1659 cout<<endl;
1660 exit(0);
1661 }
b71a354b 1662 if(!fNonIsotropicTermsVsMPro && fCalculateVsM)
5c078806 1663 {
1664 cout<<endl;
e999459d 1665 cout<<" WARNING (MH): fNonIsotropicTermsVsMPro is NULL in CheckPointersUsedInMake() !!!!"<<endl;
5c078806 1666 cout<<endl;
1667 exit(0);
1668 }
97d82c42 1669
1670 // Differential correlators:
e999459d 1671 if(!fEvaluateDifferential3pCorrelator){return;}
5c078806 1672 for(Int_t sd=0;sd<2;sd++)
1673 {
1674 if(!(f3pCorrelatorVsPtSumDiffPro[sd]))
1675 {
1676 cout<<endl;
e999459d 1677 cout<<" WARNING (MH): "<<Form("f3pCorrelatorVsPtSumDiffPro[%d]",sd)<<" is NULL in CheckPointersUsedInMake() !!!!"<<endl;
5c078806 1678 cout<<endl;
1679 exit(0);
1680 }
41e6d9e4 1681 if(!(f3pCorrelatorVsEtaSumDiffPro[sd]))
1682 {
1683 cout<<endl;
1684 cout<<" WARNING (MH): "<<Form("f3pCorrelatorVsEtaSumDiffPro[%d]",sd)<<" is NULL in CheckPointersUsedInMake() !!!!"<<endl;
1685 cout<<endl;
1686 exit(0);
1687 }
50040ed6 1688 for(Int_t t=0;t<10;t++)
1689 {
1690 if(!(fNonIsotropicTermsVsPtSumDiffPro[sd][t]))
1691 {
1692 cout<<endl;
1693 cout<<" WARNING (MH): "<<Form("fNonIsotropicTermsVsPtSumDiffPro[%d][%d]",sd,t)<<" is NULL in CheckPointersUsedInMake() !!!!"<<endl;
1694 cout<<endl;
1695 exit(0);
1696 }
1697 if(!(fNonIsotropicTermsVsEtaSumDiffPro[sd][t]))
1698 {
1699 cout<<endl;
1700 cout<<" WARNING (MH): "<<Form("fNonIsotropicTermsVsEtaSumDiffPro[%d][%d]",sd,t)<<" is NULL in CheckPointersUsedInMake() !!!!"<<endl;
1701 cout<<endl;
1702 exit(0);
1703 }
1704 } // end of for(Int_t t=0;t<10;t++)
1705 } // end of for(Int_t sd=0;sd<2;sd++)
e999459d 1706 for(Int_t sd=0;sd<2;sd++)
1707 {
1708 if(!fRePEBE[sd]||!fImPEBE[sd])
1709 {
1710 cout<<endl;
3c14341e 1711 cout<<" WARNING (MH): "<<Form("!fRePEBE[%d]||!fImPEBE[%d]",sd,sd)<<" is NULL in CheckPointersUsedInMake() !!!!"<<endl;
e999459d 1712 cout<<endl;
1713 exit(0);
1714 }
41e6d9e4 1715 if(!fReEtaEBE[sd]||!fImEtaEBE[sd])
1716 {
1717 cout<<endl;
1718 cout<<" WARNING (MH): "<<Form("!fReEtaEBE[%d]||!fImEtaEBE[%d]",sd,sd)<<" is NULL in CheckPointersUsedInMake() !!!!"<<endl;
1719 cout<<endl;
1720 exit(0);
1721 }
50040ed6 1722 for(Int_t fs=0;fs<2;fs++)
e999459d 1723 {
1724 if(!fOverlapEBE[fs][sd]||!fOverlapEBE[fs][sd])
1725 {
1726 cout<<endl;
3c14341e 1727 cout<<" WARNING (MH): "<<Form("!fOverlapEBE[%d][%d]||!fOverlapEBE[%d][%d]",fs,sd,fs,sd)<<" is NULL in CheckPointersUsedInMake() !!!!"<<endl;
e999459d 1728 cout<<endl;
1729 exit(0);
1730 }
41e6d9e4 1731 if(!fOverlapEBE2[fs][sd]||!fOverlapEBE2[fs][sd])
1732 {
1733 cout<<endl;
1734 cout<<" WARNING (MH): "<<Form("!fOverlapEBE2[%d][%d]||!fOverlapEBE2[%d][%d]",fs,sd,fs,sd)<<" is NULL in CheckPointersUsedInMake() !!!!"<<endl;
1735 cout<<endl;
1736 exit(0);
1737 }
e999459d 1738 } // end of for(Int_t fs=0;fs<2;fs++)
1739 } // end of for(Int_t sd=0;sd<2;sd++)
50040ed6 1740 for(Int_t p12=0;p12<2;p12++) // 1st/2nd POI
1741 {
1742 for(Int_t ao=0;ao<2;ao++) // all/overlap
1743 {
1744 for(Int_t pe=0;pe<4;pe++) // [(p1+p2)/2,|p1-p2|,(eta1+eta2)/2,|eta1-eta2|]
1745 {
1746 if(!fReNITEBE[p12][ao][pe]||!fImNITEBE[p12][ao][pe])
1747 {
1748 cout<<endl;
1749 cout<<" WARNING (MH): "<<Form("!fReNITEBE[%d][%d][%d]||!fImNITEBE[%d][%d][%d]",p12,ao,pe,p12,ao,pe)<<" is NULL in CheckPointersUsedInMake() !!!!"<<endl;
1750 cout<<endl;
1751 exit(0);
1752 }
1753 } // end of for(Int_t pe=0;pe<4;pe++) // [(p1+p2)/2,|p1-p2|,(eta1+eta2)/2,|eta1-eta2|]
1754 } // end of for(Int_t ao=0;ao<2;ao++) // all/overlap
1755 } // end of for(Int_t p12=0;p12<2;p12++) // 1st/2nd POI
1756
debab807 1757 //2p correlator vs |Pt1-Pt2|
1758 if(!f2pCorrelatorCosPsiDiffPtDiff) {
1759 cout<<endl;
1760 cout<<" WARNING (MH): f2pCorrelatorCosPsiDiffPtDiff is NULL in CheckPointersUsedInMake() !!!!"<<endl;
1761 cout<<endl;
1762 exit(0);
1763 }
1764 if(!f2pCorrelatorCosPsiSumPtDiff) {
1765 cout<<endl;
1766 cout<<" WARNING (MH): f2pCorrelatorCosPsiSumPtDiff is NULL in CheckPointersUsedInMake() !!!!"<<endl;
1767 cout<<endl;
1768 exit(0);
1769 }
1770 if(!f2pCorrelatorSinPsiDiffPtDiff) {
1771 cout<<endl;
1772 cout<<" WARNING (MH): f2pCorrelatorSinPsiDiffPtDiff is NULL in CheckPointersUsedInMake() !!!!"<<endl;
1773 cout<<endl;
1774 exit(0);
1775 }
1776 if(!f2pCorrelatorSinPsiSumPtDiff) {
1777 cout<<endl;
1778 cout<<" WARNING (MH): f2pCorrelatorSinPsiSumPtDiff is NULL in CheckPointersUsedInMake() !!!!"<<endl;
1779 cout<<endl;
1780 exit(0);
1781 }
1782
1783 //2p correlator vs (Pt1+Pt2)/2
1784 if(!f2pCorrelatorCosPsiDiffPtSum) {
97d82c42 1785 cout<<endl;
debab807 1786 cout<<" WARNING (MH): f2pCorrelatorCosPsiDiffPtSum is NULL in CheckPointersUsedInMake() !!!!"<<endl;
97d82c42 1787 cout<<endl;
1788 exit(0);
1789 }
debab807 1790 if(!f2pCorrelatorCosPsiSumPtSum) {
97d82c42 1791 cout<<endl;
debab807 1792 cout<<" WARNING (MH): f2pCorrelatorCosPsiSumPtSum is NULL in CheckPointersUsedInMake() !!!!"<<endl;
97d82c42 1793 cout<<endl;
1794 exit(0);
1795 }
debab807 1796 if(!f2pCorrelatorSinPsiDiffPtSum) {
97d82c42 1797 cout<<endl;
debab807 1798 cout<<" WARNING (MH): f2pCorrelatorSinPsiDiffPtSum is NULL in CheckPointersUsedInMake() !!!!"<<endl;
97d82c42 1799 cout<<endl;
1800 exit(0);
1801 }
debab807 1802 if(!f2pCorrelatorSinPsiSumPtSum) {
97d82c42 1803 cout<<endl;
debab807 1804 cout<<" WARNING (MH): f2pCorrelatorSinPsiSumPtSum is NULL in CheckPointersUsedInMake() !!!!"<<endl;
97d82c42 1805 cout<<endl;
1806 exit(0);
1807 }
debab807 1808
1809 //2p correlator vs |eta1-eta2|
1810 if(!f2pCorrelatorCosPsiDiffEtaDiff) {
1811 cout<<endl;
1812 cout<<" WARNING (MH): f2pCorrelatorCosPsiDiffEtaDiff is NULL in CheckPointersUsedInMake() !!!!"<<endl;
1813 cout<<endl;
1814 exit(0);
1815 }
1816 if(!f2pCorrelatorCosPsiSumEtaDiff) {
1817 cout<<endl;
1818 cout<<" WARNING (MH): f2pCorrelatorCosPsiSumEtaDiff is NULL in CheckPointersUsedInMake() !!!!"<<endl;
1819 cout<<endl;
1820 exit(0);
1821 }
1822 if(!f2pCorrelatorSinPsiDiffEtaDiff) {
1823 cout<<endl;
1824 cout<<" WARNING (MH): f2pCorrelatorSinPsiDiffEtaDiff is NULL in CheckPointersUsedInMake() !!!!"<<endl;
1825 cout<<endl;
1826 exit(0);
1827 }
1828 if(!f2pCorrelatorSinPsiSumEtaDiff) {
1829 cout<<endl;
1830 cout<<" WARNING (MH): f2pCorrelatorSinPsiSumEtaDiff is NULL in CheckPointersUsedInMake() !!!!"<<endl;
1831 cout<<endl;
1832 exit(0);
1833 }
1834
1835 //2p correlator vs (eta1+eta2)/2
1836 if(!f2pCorrelatorCosPsiDiffEtaSum) {
1837 cout<<endl;
1838 cout<<" WARNING (MH): f2pCorrelatorCosPsiDiffEtaSum is NULL in CheckPointersUsedInMake() !!!!"<<endl;
1839 cout<<endl;
1840 exit(0);
1841 }
1842 if(!f2pCorrelatorCosPsiSumEtaSum) {
1843 cout<<endl;
1844 cout<<" WARNING (MH): f2pCorrelatorCosPsiSumEtaSum is NULL in CheckPointersUsedInMake() !!!!"<<endl;
1845 cout<<endl;
1846 exit(0);
1847 }
1848 if(!f2pCorrelatorSinPsiDiffEtaSum) {
1849 cout<<endl;
1850 cout<<" WARNING (MH): f2pCorrelatorSinPsiDiffEtaSum is NULL in CheckPointersUsedInMake() !!!!"<<endl;
1851 cout<<endl;
1852 exit(0);
1853 }
1854 if(!f2pCorrelatorSinPsiSumEtaSum) {
1855 cout<<endl;
1856 cout<<" WARNING (MH): f2pCorrelatorSinPsiSumEtaSum is NULL in CheckPointersUsedInMake() !!!!"<<endl;
1857 cout<<endl;
1858 exit(0);
1859 }
1860
d66d46f7 1861} // end of AliFlowAnalysisWithMixedHarmonics::CheckPointersUsedInMake()
1862
1863//================================================================================================================
489d5531 1864
1865void AliFlowAnalysisWithMixedHarmonics::CheckPointersUsedInFinish()
1866{
d66d46f7 1867 // Check pointers used in method Finish().
ecac11c2 1868
1869 if(!fAnalysisSettings)
1870 {
1871 cout<<endl;
e999459d 1872 cout<<" WARNING (MH): fAnalysisSettings is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
ecac11c2 1873 cout<<endl;
1874 exit(0);
1875 }
1876 if(!f3pCorrelatorPro)
1877 {
1878 cout<<endl;
e999459d 1879 cout<<" WARNING (MH): f3pCorrelatorPro is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
ecac11c2 1880 cout<<endl;
1881 exit(0);
1882 }
1883 if(!fNonIsotropicTermsPro)
1884 {
1885 cout<<endl;
e999459d 1886 cout<<" WARNING (MH): fNonIsotropicTermsPro is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
ecac11c2 1887 cout<<endl;
1888 exit(0);
1889 }
41e6d9e4 1890 if(!f3pPOICorrelatorVsM && fCalculateVsM)
1891 {
1892 cout<<endl;
1893 cout<<" WARNING (MH): f3pPOICorrelatorVsM is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
1894 cout<<endl;
1895 exit(0);
1896 }
b71a354b 1897 if(!f3pCorrelatorVsMPro && fCalculateVsM)
ecac11c2 1898 {
1899 cout<<endl;
e999459d 1900 cout<<" WARNING (MH): f3pCorrelatorVsMPro is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
ecac11c2 1901 cout<<endl;
1902 exit(0);
1903 }
b71a354b 1904 if(!f3pCorrelatorVsMHist && fCalculateVsM)
e558a733 1905 {
1906 cout<<endl;
e999459d 1907 cout<<" WARNING (MH): f3pCorrelatorVsMHist is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
e558a733 1908 cout<<endl;
1909 exit(0);
1910 }
b71a354b 1911 if(!fNonIsotropicTermsVsMPro && fCalculateVsM)
ecac11c2 1912 {
1913 cout<<endl;
e999459d 1914 cout<<" WARNING (MH): fNonIsotropicTermsVsMPro is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
ecac11c2 1915 cout<<endl;
1916 exit(0);
1917 }
e409ac85 1918
ecac11c2 1919 if(!f3pCorrelatorHist)
1920 {
1921 cout<<endl;
e999459d 1922 cout<<" WARNING (MH): f3pCorrelatorHist is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
ecac11c2 1923 cout<<endl;
1924 exit(0);
5c078806 1925 }
ecac11c2 1926 if(!fDetectorBiasHist)
1927 {
1928 cout<<endl;
e999459d 1929 cout<<" WARNING (MH): fDetectorBiasHist is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
ecac11c2 1930 cout<<endl;
1931 exit(0);
1932 }
5c078806 1933 /* to be improved - enabled eventually
b71a354b 1934 if(!fDetectorBiasVsMHist && fCalculateVsM)
ecac11c2 1935 {
1936 cout<<endl;
e999459d 1937 cout<<" WARNING (MH): !fDetectorBiasVsMHist is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
ecac11c2 1938 cout<<endl;
1939 exit(0);
5c078806 1940 }
1941 */
97d82c42 1942
1943 // Differential correlators:
e999459d 1944 if(!fEvaluateDifferential3pCorrelator){return;}
5c078806 1945 for(Int_t sd=0;sd<2;sd++)
1946 {
1947 if(!(f3pCorrelatorVsPtSumDiffPro[sd]))
1948 {
1949 cout<<endl;
e999459d 1950 cout<<" WARNING (MH): "<<Form("f3pCorrelatorVsPtSumDiffPro[%d]",sd)<<" is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
5c078806 1951 cout<<endl;
1952 exit(0);
1953 }
41e6d9e4 1954 if(!(f3pCorrelatorVsEtaSumDiffPro[sd]))
1955 {
1956 cout<<endl;
1957 cout<<" WARNING (MH): "<<Form("f3pCorrelatorVsEtaSumDiffPro[%d]",sd)<<" is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
1958 cout<<endl;
1959 exit(0);
50040ed6 1960 }
1961 if(!(f3pCorrelatorVsPtSumDiffHist[sd]))
1962 {
1963 cout<<endl;
1964 cout<<" WARNING (MH): "<<Form("f3pCorrelatorVsPtSumDiffHist[%d]",sd)<<" is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
1965 cout<<endl;
1966 exit(0);
41e6d9e4 1967 }
50040ed6 1968 if(!(f3pCorrelatorVsEtaSumDiffHist[sd]))
1969 {
1970 cout<<endl;
1971 cout<<" WARNING (MH): "<<Form("f3pCorrelatorVsEtaSumDiffHist[%d]",sd)<<" is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
1972 cout<<endl;
1973 exit(0);
1974 }
1975 for(Int_t t=0;t<10;t++)
1976 {
1977 if(!(fNonIsotropicTermsVsPtSumDiffPro[sd][t]))
1978 {
1979 cout<<endl;
1980 cout<<" WARNING (MH): "<<Form("fNonIsotropicTermsVsPtSumDiffPro[%d][%d]",sd,t)<<" is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
1981 cout<<endl;
1982 exit(0);
1983 }
1984 if(!(fNonIsotropicTermsVsEtaSumDiffPro[sd][t]))
1985 {
1986 cout<<endl;
1987 cout<<" WARNING (MH): "<<Form("fNonIsotropicTermsVsEtaSumDiffPro[%d][%d]",sd,t)<<" is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
1988 cout<<endl;
1989 exit(0);
1990 }
1991 } // end of for(Int_t t=0;t<10;t++)
1992 } // end of for(Int_t sd=0;sd<2;sd++)
debab807 1993 //2p correlator vs |Pt1-Pt2|
1994 if(!f2pCorrelatorCosPsiDiffPtDiff) {
1995 cout<<endl;
1996 cout<<" WARNING (MH): f2pCorrelatorCosPsiDiffPtDiff is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
1997 cout<<endl;
1998 exit(0);
1999 }
2000 if(!f2pCorrelatorCosPsiSumPtDiff) {
2001 cout<<endl;
2002 cout<<" WARNING (MH): f2pCorrelatorCosPsiSumPtDiff is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
2003 cout<<endl;
2004 exit(0);
2005 }
2006 if(!f2pCorrelatorSinPsiDiffPtDiff) {
2007 cout<<endl;
2008 cout<<" WARNING (MH): f2pCorrelatorSinPsiDiffPtDiff is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
2009 cout<<endl;
2010 exit(0);
2011 }
2012 if(!f2pCorrelatorSinPsiSumPtDiff) {
2013 cout<<endl;
2014 cout<<" WARNING (MH): f2pCorrelatorSinPsiSumPtDiff is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
2015 cout<<endl;
2016 exit(0);
2017 }
2018
2019 //2p correlator vs (Pt1+Pt2)/2
2020 if(!f2pCorrelatorCosPsiDiffPtSum) {
2021 cout<<endl;
2022 cout<<" WARNING (MH): f2pCorrelatorCosPsiDiffPtSum is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
2023 cout<<endl;
2024 exit(0);
2025 }
2026 if(!f2pCorrelatorCosPsiSumPtSum) {
2027 cout<<endl;
2028 cout<<" WARNING (MH): f2pCorrelatorCosPsiSumPtSum is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
2029 cout<<endl;
2030 exit(0);
2031 }
2032 if(!f2pCorrelatorSinPsiDiffPtSum) {
2033 cout<<endl;
2034 cout<<" WARNING (MH): f2pCorrelatorSinPsiDiffPtSum is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
2035 cout<<endl;
2036 exit(0);
2037 }
2038 if(!f2pCorrelatorSinPsiSumPtSum) {
2039 cout<<endl;
2040 cout<<" WARNING (MH): f2pCorrelatorSinPsiSumPtSum is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
2041 cout<<endl;
2042 exit(0);
2043 }
2044
2045 //2p correlator vs |eta1-eta2|
2046 if(!f2pCorrelatorCosPsiDiffEtaDiff) {
2047 cout<<endl;
2048 cout<<" WARNING (MH): f2pCorrelatorCosPsiDiffEtaDiff is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
2049 cout<<endl;
2050 exit(0);
2051 }
2052 if(!f2pCorrelatorCosPsiSumEtaDiff) {
2053 cout<<endl;
2054 cout<<" WARNING (MH): f2pCorrelatorCosPsiSumEtaDiff is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
2055 cout<<endl;
2056 exit(0);
2057 }
2058 if(!f2pCorrelatorSinPsiDiffEtaDiff) {
2059 cout<<endl;
2060 cout<<" WARNING (MH): f2pCorrelatorSinPsiDiffEtaDiff is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
2061 cout<<endl;
2062 exit(0);
2063 }
2064 if(!f2pCorrelatorSinPsiSumEtaDiff) {
2065 cout<<endl;
2066 cout<<" WARNING (MH): f2pCorrelatorSinPsiSumEtaDiff is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
2067 cout<<endl;
2068 exit(0);
2069 }
2070
2071 //2p correlator vs (eta1+eta2)/2
2072 if(!f2pCorrelatorCosPsiDiffEtaSum) {
97d82c42 2073 cout<<endl;
debab807 2074 cout<<" WARNING (MH): f2pCorrelatorCosPsiDiffEtaSum is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
97d82c42 2075 cout<<endl;
2076 exit(0);
2077 }
debab807 2078 if(!f2pCorrelatorCosPsiSumEtaSum) {
97d82c42 2079 cout<<endl;
debab807 2080 cout<<" WARNING (MH): f2pCorrelatorCosPsiSumEtaSum is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
97d82c42 2081 cout<<endl;
2082 exit(0);
2083 }
debab807 2084 if(!f2pCorrelatorSinPsiDiffEtaSum) {
97d82c42 2085 cout<<endl;
debab807 2086 cout<<" WARNING (MH): f2pCorrelatorSinPsiDiffEtaSum is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
97d82c42 2087 cout<<endl;
2088 exit(0);
2089 }
debab807 2090 if(!f2pCorrelatorSinPsiSumEtaSum) {
97d82c42 2091 cout<<endl;
debab807 2092 cout<<" WARNING (MH): f2pCorrelatorSinPsiSumEtaSum is NULL in CheckPointersUsedInFinish() !!!!"<<endl;
97d82c42 2093 cout<<endl;
2094 exit(0);
2095 }
2096
489d5531 2097} // end of AliFlowAnalysisWithMixedHarmonics::CheckPointersUsedInFinish()
d66d46f7 2098
2099//================================================================================================================
489d5531 2100
5c078806 2101void AliFlowAnalysisWithMixedHarmonics::PrintOnTheScreen()
2102{
2103 // Print the final results on the screen.
2104
b71a354b 2105 // <<cos[n*(phi1+phi2-2phi3)]>>:
2106 Double_t d3pCorrelator = 0.;
2107 Double_t d3pCorrelatorError = 0.;
2108 if(!fCorrectForDetectorEffects)
2109 {
2110 d3pCorrelator = f3pCorrelatorPro->GetBinContent(1);
2111 d3pCorrelatorError = f3pCorrelatorPro->GetBinError(1);
2112 } else
2113 {
2114 d3pCorrelator = f3pCorrelatorHist->GetBinContent(1);
2115 d3pCorrelatorError = f3pCorrelatorHist->GetBinError(1);
2116 }
2117
e409ac85 2118 // <<cos[n*(psi1+psi2-2phi3)]>>:
2119 Double_t d3pCorrelatorPoi = 0.;
2120 Double_t d3pCorrelatorPoiError = 0.;
50040ed6 2121
97d82c42 2122 if(fEvaluateDifferential3pCorrelator)
2123 {
2124 GetCorrelatorAndError(f3pCorrelatorVsPtSumDiffPro[0],
e409ac85 2125 d3pCorrelatorPoi,
2126 d3pCorrelatorPoiError);
97d82c42 2127 }
5c078806 2128 cout<<endl;
2129 cout<<"*******************************************************"<<endl;
2130 cout<<"*******************************************************"<<endl;
2131 cout<<" Mixed Harmonics "<<endl;
2132 cout<<endl;
e999459d 2133 if(fHarmonic!=1)
5c078806 2134 {
b71a354b 2135 cout<<" cos["<<fHarmonic<<"(phi1+phi2-2phi3)] = "<<d3pCorrelator<<" +/- "<<d3pCorrelatorError<<endl;
e409ac85 2136 cout<<" cos["<<fHarmonic<<"(psi1+psi2-2phi3)] = "<<d3pCorrelatorPoi<<" +/- "<<d3pCorrelatorPoiError<<endl;
b71a354b 2137 } else
2138 {
2139 cout<<" cos(phi1+phi2-2phi3) = "<<d3pCorrelator<<" +/- "<<d3pCorrelatorError<<endl;
50040ed6 2140 cout<<" cos(psi1+psi2-2phi3) = "<<d3pCorrelatorPoi<<" +/- "<<d3pCorrelatorPoiError<<endl;
b71a354b 2141 }
2142 if(!fCorrectForDetectorEffects)
2143 {
2144 cout<<" Detector Bias = "<<fDetectorBiasHist->GetBinContent(1)<<" (not corrected for)"<<endl;
5c078806 2145 } else
2146 {
b71a354b 2147 cout<<" Detector Bias = "<<fDetectorBiasHist->GetBinContent(1)<<" (corrected for)"<<endl;
5c078806 2148 }
5c078806 2149 cout<<endl;
e999459d 2150 cout<<" nEvts = "<<(Int_t)fCommonHists->GetHistMultRP()->GetEntries()<<", <M> = "<<(Double_t)fCommonHists->GetHistMultRP()->GetMean()<<endl;
5c078806 2151 cout<<"*******************************************************"<<endl;
2152 cout<<"*******************************************************"<<endl;
2153
2154} // end of void AliFlowAnalysisWithMixedHarmonics::PrintOnTheScreen()
2155
2156//================================================================================================================
2157
489d5531 2158void AliFlowAnalysisWithMixedHarmonics::AccessSettings()
2159{
d66d46f7 2160 // Access the settings for analysis with mixed harmonics.
2161
e999459d 2162 fCorrectForDetectorEffects = (Bool_t)fAnalysisSettings->GetBinContent(1);
2163 fNoOfMultipicityBins = (Int_t)fAnalysisSettings->GetBinContent(2);
2164 fMultipicityBinWidth = (Double_t)fAnalysisSettings->GetBinContent(3);
2165 fMinMultiplicity = (Double_t)fAnalysisSettings->GetBinContent(4);
2166 fPrintOnTheScreen = (Bool_t)fAnalysisSettings->GetBinContent(5);
2167 fHarmonic = (Int_t)fAnalysisSettings->GetBinContent(6);
2168 fOppositeChargesPOI = (Bool_t)fAnalysisSettings->GetBinContent(7);
b71a354b 2169 fEvaluateDifferential3pCorrelator = (Bool_t)fAnalysisSettings->GetBinContent(8);
2170 fCalculateVsM = (Bool_t)fAnalysisSettings->GetBinContent(9);
2171 fShowBinLabelsVsM = (Bool_t)fAnalysisSettings->GetBinContent(10);
2172
d66d46f7 2173} // end of AliFlowAnalysisWithMixedHarmonics::AccessSettings()
2174
2175//================================================================================================================
489d5531 2176
2177void AliFlowAnalysisWithMixedHarmonics::CorrectForDetectorEffects()
2178{
50040ed6 2179 // a.) Correct integrated 3-p correlator cos[n(phi1+phi2-2phi3)] for detector effects;
2180 // b.) Correct differential 3-p correlator cos[n(psi1+psi2-2phi3)] for detector effects.
2181
2182 // a.) Correct integrated 3-p correlator cos[n(phi1+phi2-2phi3)] for detector effects:
d66d46f7 2183 Double_t measured3pCorrelator = f3pCorrelatorPro->GetBinContent(1); // biased by detector effects
2184 Double_t corrected3pCorrelator = 0.; // corrected for detector effects
2185 Double_t nonIsotropicTerms[10] = {0.}; // there are 10 distinct non-isotropic terms
2186 for(Int_t nit=0;nit<10;nit++)
2187 {
2188 nonIsotropicTerms[nit] = fNonIsotropicTermsPro->GetBinContent(nit+1);
2189 }
2190 // Calculate corrected 3-p correlator:
2191 corrected3pCorrelator = measured3pCorrelator
2192 - nonIsotropicTerms[2]*nonIsotropicTerms[4]
2193 - nonIsotropicTerms[3]*nonIsotropicTerms[5]
2194 - 2.*nonIsotropicTerms[0]*nonIsotropicTerms[6]
2195 - 2.*nonIsotropicTerms[1]*nonIsotropicTerms[7]
2196 + 2.*nonIsotropicTerms[2]*(pow(nonIsotropicTerms[0],2.)-pow(nonIsotropicTerms[1],2.))
5c078806 2197 + 4.*nonIsotropicTerms[3]*nonIsotropicTerms[0]*nonIsotropicTerms[1];
2198 // Store corrected correlator:
b71a354b 2199 if(fCorrectForDetectorEffects)
2200 {
2201 f3pCorrelatorHist->SetBinContent(1,corrected3pCorrelator);
2202 f3pCorrelatorHist->SetBinError(1,f3pCorrelatorPro->GetBinError(1)); // to be improved (propagate error for non-isotropic terms)
2203 }
5c078806 2204 // Quantify bias from detector inefficiences to 3-p correlator. Remark: Bias is quantified as a
2205 // ratio between corrected and measured 3-p correlator:
2206 // bias = corrected/measured
2207 // This bias is stored in histogram fDetectorBias.
2208 Double_t bias = 0.;
b71a354b 2209 if(TMath::Abs(measured3pCorrelator)>1.e-44)
5c078806 2210 {
2211 bias = corrected3pCorrelator/measured3pCorrelator;
2212 fDetectorBiasHist->SetBinContent(1,bias);
e558a733 2213 }
50040ed6 2214
2215 if(!fEvaluateDifferential3pCorrelator){return;}
2216 // b.) Correct differential 3-p correlator cos[n(psi1+psi2-2phi3)] for detector effects:
2217 for(Int_t sd=0;sd<2;sd++)
2218 {
2219 // [(p1+p2)/2,|p1-p2|]
2220 // looping over all bins and calculating reduced correlations:
2221 for(Int_t b=1;b<=fnBinsPt;b++)
2222 {
2223 Double_t measured = f3pCorrelatorVsPtSumDiffPro[sd]->GetBinContent(b);
2224 Double_t measuredErr = f3pCorrelatorVsPtSumDiffPro[sd]->GetBinError(b);
2225 Double_t corrected = 0.; // 3-p correlator corrected for detector effects
2226 Double_t correctedErr = measuredErr; // to be improved - propagate error also for non-isotropic terms
2227 // non-isotropic terms:
2228 Double_t cosPsiPOI1 = fNonIsotropicTermsVsPtSumDiffPro[sd][0]->GetBinContent(b); // <<cos(#psi_{POI_1})>>
2229 Double_t sinPsiPOI1 = fNonIsotropicTermsVsPtSumDiffPro[sd][1]->GetBinContent(b); // <<sin(#psi_{POI_1})>>
2230 Double_t cosPsiPOI2 = fNonIsotropicTermsVsPtSumDiffPro[sd][2]->GetBinContent(b); // <<cos(#psi_{POI_2})>>
2231 Double_t sinPsiPOI2 = fNonIsotropicTermsVsPtSumDiffPro[sd][3]->GetBinContent(b); // <<sin(#psi_{POI_2})>>
2232 Double_t cosPsiPOI1m2PhiRP = fNonIsotropicTermsVsPtSumDiffPro[sd][4]->GetBinContent(b); // <<cos(#psi_{POI_1}-2*phi_{RP})>>
2233 Double_t sinPsiPOI1m2PhiRP = fNonIsotropicTermsVsPtSumDiffPro[sd][5]->GetBinContent(b); // <<sin(#psi_{POI_1}-2*phi_{RP})>>
2234 Double_t cosPsiPOI2m2PhiRP = fNonIsotropicTermsVsPtSumDiffPro[sd][6]->GetBinContent(b); // <<cos(#psi_{POI_2}-2*phi_{RP})>>
2235 Double_t sinPsiPOI2m2PhiRP = fNonIsotropicTermsVsPtSumDiffPro[sd][7]->GetBinContent(b); // <<sin(#psi_{POI_2}-2*phi_{RP})>>
2236 Double_t cosPsiPOI1pPsiPOI2 = fNonIsotropicTermsVsPtSumDiffPro[sd][8]->GetBinContent(b); // <<cos(#psi_{POI_1}+#psi_{POI_2})>>
2237 Double_t sinPsiPOI1pPsiPOI2 = fNonIsotropicTermsVsPtSumDiffPro[sd][9]->GetBinContent(b); // <<sin(#psi_{POI_1}+#psi_{POI_2})>>
2238 Double_t cos2PhiRP = fNonIsotropicTermsPro->GetBinContent(3); // <<cos(2n*(phi_{RP}))>>
2239 Double_t sin2PhiRP = fNonIsotropicTermsPro->GetBinContent(4); // <<sin(2n*(phi_{RP}))>>
2240 // apply correction:
2241 corrected = measured
2242 - (cosPsiPOI1*cosPsiPOI2m2PhiRP-sinPsiPOI1*sinPsiPOI2m2PhiRP
2243 + cosPsiPOI2*cosPsiPOI1m2PhiRP-sinPsiPOI2*sinPsiPOI1m2PhiRP
2244 + cos2PhiRP*cosPsiPOI1pPsiPOI2+sin2PhiRP*sinPsiPOI1pPsiPOI2)
2245 + 2.*cos2PhiRP*(cosPsiPOI1*cosPsiPOI2-sinPsiPOI1*sinPsiPOI2)
2246 + 2.*sin2PhiRP*(cosPsiPOI1*sinPsiPOI2+sinPsiPOI1*cosPsiPOI2);
2247 if(fCorrectForDetectorEffects)
2248 {
2249 f3pCorrelatorVsPtSumDiffHist[sd]->SetBinContent(b,corrected);
2250 f3pCorrelatorVsPtSumDiffHist[sd]->SetBinError(b,correctedErr);
2251 }
2252 } // end of for(Int_t b=1;b<=fnBinsPt;b++)
2253
2254 // [(eta1+eta2)/2,|eta1-eta2|]
2255 // looping over all bins and calculating reduced correlations:
2256 for(Int_t b=1;b<=fnBinsEta;b++)
2257 {
2258 Double_t measured = f3pCorrelatorVsEtaSumDiffPro[sd]->GetBinContent(b);
2259 Double_t measuredErr = f3pCorrelatorVsEtaSumDiffPro[sd]->GetBinError(b);
2260 Double_t corrected = 0.; // 3-p correlator corrected for detector effects
2261 Double_t correctedErr = measuredErr; // to be improved - propagate error also for non-isotropic terms
2262 // non-isotropic terms:
2263 Double_t cosPsiPOI1 = fNonIsotropicTermsVsEtaSumDiffPro[sd][0]->GetBinContent(b); // <<cos(#psi_{POI_1})>>
2264 Double_t sinPsiPOI1 = fNonIsotropicTermsVsEtaSumDiffPro[sd][1]->GetBinContent(b); // <<sin(#psi_{POI_1})>>
2265 Double_t cosPsiPOI2 = fNonIsotropicTermsVsEtaSumDiffPro[sd][2]->GetBinContent(b); // <<cos(#psi_{POI_2})>>
2266 Double_t sinPsiPOI2 = fNonIsotropicTermsVsEtaSumDiffPro[sd][3]->GetBinContent(b); // <<sin(#psi_{POI_2})>>
2267 Double_t cosPsiPOI1m2PhiRP = fNonIsotropicTermsVsEtaSumDiffPro[sd][4]->GetBinContent(b); // <<cos(#psi_{POI_1}-2*phi_{RP})>>
2268 Double_t sinPsiPOI1m2PhiRP = fNonIsotropicTermsVsEtaSumDiffPro[sd][5]->GetBinContent(b); // <<sin(#psi_{POI_1}-2*phi_{RP})>>
2269 Double_t cosPsiPOI2m2PhiRP = fNonIsotropicTermsVsEtaSumDiffPro[sd][6]->GetBinContent(b); // <<cos(#psi_{POI_2}-2*phi_{RP})>>
2270 Double_t sinPsiPOI2m2PhiRP = fNonIsotropicTermsVsEtaSumDiffPro[sd][7]->GetBinContent(b); // <<sin(#psi_{POI_2}-2*phi_{RP})>>
2271 Double_t cosPsiPOI1pPsiPOI2 = fNonIsotropicTermsVsEtaSumDiffPro[sd][8]->GetBinContent(b); // <<cos(#psi_{POI_1}+#psi_{POI_2})>>
2272 Double_t sinPsiPOI1pPsiPOI2 = fNonIsotropicTermsVsEtaSumDiffPro[sd][9]->GetBinContent(b); // <<sin(#psi_{POI_1}+#psi_{POI_2})>>
2273 Double_t cos2PhiRP = fNonIsotropicTermsPro->GetBinContent(3); // <<cos(2n*(phi_{RP}))>>
2274 Double_t sin2PhiRP = fNonIsotropicTermsPro->GetBinContent(4); // <<sin(2n*(phi_{RP}))>>
2275 // apply correction:
2276 corrected = measured
2277 - (cosPsiPOI1*cosPsiPOI2m2PhiRP-sinPsiPOI1*sinPsiPOI2m2PhiRP
2278 + cosPsiPOI2*cosPsiPOI1m2PhiRP-sinPsiPOI2*sinPsiPOI1m2PhiRP
2279 + cos2PhiRP*cosPsiPOI1pPsiPOI2+sin2PhiRP*sinPsiPOI1pPsiPOI2)
2280 + 2.*cos2PhiRP*(cosPsiPOI1*cosPsiPOI2-sinPsiPOI1*sinPsiPOI2)
2281 + 2.*sin2PhiRP*(cosPsiPOI1*sinPsiPOI2+sinPsiPOI1*cosPsiPOI2);
2282 if(fCorrectForDetectorEffects)
2283 {
2284 f3pCorrelatorVsEtaSumDiffHist[sd]->SetBinContent(b,corrected);
2285 f3pCorrelatorVsEtaSumDiffHist[sd]->SetBinError(b,correctedErr);
2286 }
2287 } // end of for(Int_t b=1;b<=fnBinsEta;b++)
2288 } // end of for(Int_t sd=0;sd<2;sd++)
2289
d66d46f7 2290} // end of AliFlowAnalysisWithMixedHarmonics::CorrectForDetectorEffects()
2291
2292//================================================================================================================
489d5531 2293
e558a733 2294void AliFlowAnalysisWithMixedHarmonics::CorrectForDetectorEffectsVsM()
2295{
e999459d 2296 // Correct measured 3-p correlator cos[n(phi1+phi2-2phi3)] vs M for detector effects.
e558a733 2297
2298 for(Int_t b=1;b<=fNoOfMultipicityBins+2;b++)
2299 {
2300 Double_t measured3pCorrelator = f3pCorrelatorVsMPro->GetBinContent(b); // biased by detector effects
2301 Double_t corrected3pCorrelator = 0.; // corrected for detector effects
2302 Double_t nonIsotropicTerms[10] = {0.}; // there are 10 distinct non-isotropic terms
2303 for(Int_t nit=0;nit<10;nit++)
2304 {
2305 nonIsotropicTerms[nit] = fNonIsotropicTermsVsMPro->GetBinContent(fNonIsotropicTermsVsMPro->GetBin(nit+1,b));
2306 }
2307 // Calculate corrected 3-p correlator:
2308 corrected3pCorrelator = measured3pCorrelator
2309 - nonIsotropicTerms[2]*nonIsotropicTerms[4]
2310 - nonIsotropicTerms[3]*nonIsotropicTerms[5]
2311 - 2.*nonIsotropicTerms[0]*nonIsotropicTerms[6]
2312 - 2.*nonIsotropicTerms[1]*nonIsotropicTerms[7]
2313 + 2.*nonIsotropicTerms[2]*(pow(nonIsotropicTerms[0],2.)-pow(nonIsotropicTerms[1],2.))
2314 + 4.*nonIsotropicTerms[3]*nonIsotropicTerms[0]*nonIsotropicTerms[1];
2315 // Store corrected correlator:
b71a354b 2316 if(fCorrectForDetectorEffects)
2317 {
2318 f3pCorrelatorVsMHist->SetBinContent(b,corrected3pCorrelator);
2319 f3pCorrelatorVsMHist->SetBinError(b,f3pCorrelatorVsMPro->GetBinError(b)); // to be improved (propagate error for non-isotropic terms)
2320 }
e558a733 2321 // Quantify bias from detector inefficiences to 3-p correlator. Remark: Bias is quantified as a
2322 // ratio between corrected and measured 3-p correlator:
2323 // bias = corrected/measured
2324 // This bias is stored in histogram fDetectorBias.
2325 Double_t bias = 0.;
2326 if(measured3pCorrelator)
2327 {
2328 bias = corrected3pCorrelator/measured3pCorrelator;
2329 fDetectorBiasVsMHist->SetBinContent(b,bias);
2330 }
2331 } // end of for(Int_t b=1;b<=fNoOfMultipicityBins;b++)
2332
2333} // end of AliFlowAnalysisWithMixedHarmonics::CorrectForDetectorEffectsVsM()
2334
2335//================================================================================================================
2336
489d5531 2337void AliFlowAnalysisWithMixedHarmonics::ResetEventByEventQuantities()
2338{
b71a354b 2339 // Reset all event-by-event quantities.
489d5531 2340
2341 fReQnk->Zero();
2342 fImQnk->Zero();
d66d46f7 2343 fSpk->Zero();
e558a733 2344
e999459d 2345 if(!fEvaluateDifferential3pCorrelator){return;}
5c078806 2346 for(Int_t sd=0;sd<2;sd++)
2347 {
2348 fRePEBE[sd]->Reset();
2349 fImPEBE[sd]->Reset();
41e6d9e4 2350 fReEtaEBE[sd]->Reset();
2351 fImEtaEBE[sd]->Reset();
5c078806 2352 }
e999459d 2353 for(Int_t fs=0;fs<2;fs++)
2354 {
2355 for(Int_t sd=0;sd<2;sd++)
2356 {
2357 fOverlapEBE[fs][sd]->Reset();
41e6d9e4 2358 fOverlapEBE2[fs][sd]->Reset();
e999459d 2359 }
50040ed6 2360 }
2361 for(Int_t p12=0;p12<2;p12++) // 1st/2nd POI
2362 {
2363 for(Int_t ao=0;ao<2;ao++) // all/overlap
2364 {
2365 for(Int_t pe=0;pe<4;pe++) // [(p1+p2)/2,|p1-p2|,(eta1+eta2)/2,|eta1-eta2|]
2366 {
2367 fReNITEBE[p12][ao][pe]->Reset();
2368 fImNITEBE[p12][ao][pe]->Reset();
2369 } // end of for(Int_t pe=0;pe<4;pe++) // [(p1+p2)/2,|p1-p2|,(eta1+eta2)/2,|eta1-eta2|]
2370 }
2371 } // end of for(Int_t p12=0;p12<2;p12++) // 1st/2nd POI
5c078806 2372
d66d46f7 2373} // end of void AliFlowAnalysisWithMixedHarmonics::ResetEventByEventQuantities()
2374
2375//================================================================================================================
2376
489d5531 2377void AliFlowAnalysisWithMixedHarmonics::Calculate3pCorrelator()
2378{
e999459d 2379 // Calculate 3-p azimuthal correlator cos[n(phi1+phi2-2phi3)] in terms of Q_{n,k} and S_{p,k}.
d66d46f7 2380
2381 // a) Calculate 3-p correlator without using particle weights;
2382 // b) Calculate 3-p correlator with using particle weights.
2383
489d5531 2384 // a) Calculate 3-p correlator without using particle weights:
d66d46f7 2385 if(!(fUsePhiWeights || fUsePtWeights || fUseEtaWeights))
2386 {
489d5531 2387 // Multiplicity (number of RPs):
2388 Double_t dMult = (*fSpk)(0,0);
2389 // Real and imaginary parts of non-weighted Q-vectors (Q_{n,0}) evaluated in harmonics n and 2n:
2390 Double_t dReQ1n = (*fReQnk)(0,0);
2391 Double_t dReQ2n = (*fReQnk)(1,0);
2392 Double_t dImQ1n = (*fImQnk)(0,0);
d66d46f7 2393 Double_t dImQ2n = (*fImQnk)(1,0);
e999459d 2394 // 3-particle azimuthal correlator <cos(n*(phi1+phi2-2phi3))>:
2395 Double_t three1n1n2n = (pow(dReQ1n,2.)*dReQ2n + 2.*dReQ1n*dImQ1n*dImQ2n - pow(dImQ1n,2.)*dReQ2n
489d5531 2396 - 2.*(pow(dReQ1n,2.)+pow(dImQ1n,2.))
2397 - (pow(dReQ2n,2.)+pow(dImQ2n,2.))+2.*dMult)
d66d46f7 2398 / (dMult*(dMult-1.)*(dMult-2.));
e999459d 2399
e558a733 2400 // Fill all-events profile:
e999459d 2401 f3pCorrelatorPro->Fill(0.5,three1n1n2n,dMult*(dMult-1.)*(dMult-2.));
5c078806 2402
e999459d 2403 // 3-particle azimuthal correlator <cos(n*(phi1+phi2-2phi3))> vs multiplicity:
b71a354b 2404 if(fCalculateVsM)
5c078806 2405 {
b71a354b 2406 if(dMult<fMinMultiplicity)
2407 {
2408 f3pCorrelatorVsMPro->Fill(0.5,three1n1n2n,dMult*(dMult-1.)*(dMult-2.));
2409 } else if(dMult>=fMinMultiplicity+fNoOfMultipicityBins*fMultipicityBinWidth)
2410 {
2411 f3pCorrelatorVsMPro->Fill(0.5+fNoOfMultipicityBins+1,three1n1n2n,dMult*(dMult-1.)*(dMult-2.));
2412 } else
2413 {
2414 f3pCorrelatorVsMPro->Fill(1.5+(Int_t)((dMult-fMinMultiplicity)/fMultipicityBinWidth),three1n1n2n,dMult*(dMult-1.)*(dMult-2.));
2415 }
2416 } // end of if(fCalculateVsM)
5c078806 2417
d66d46f7 2418 } // end of if(!(fUsePhiWeights || fUsePtWeights || fUseEtaWeights))
2419
e999459d 2420 // b) Calculate 3-p correlator with using particle weights:
d66d46f7 2421 if(fUsePhiWeights || fUsePtWeights || fUseEtaWeights)
2422 {
e999459d 2423 // ...
d66d46f7 2424 } // end of if(fUsePhiWeights || fUsePtWeights || fUseEtaWeights)
2425
2426} // end of void AliFlowAnalysisWithMixedHarmonics::Calculate3pCorrelator()
2427
2428//================================================================================================================
97d82c42 2429
2430void AliFlowAnalysisWithMixedHarmonics::Calculate5pCorrelator()
2431{
2432 // Calculate 5-p azimuthal correlator cos[n(2phi1+2phi2+2phi3-3phi4-3phi5)] in terms of Q_{n,k} and S_{p,k}.
2433
2434 // a) Calculate 5-p correlator without using particle weights;
2435 // b) Calculate 5-p correlator with using particle weights.
2436
2437 // a) Calculate 5-p correlator without using particle weights:
2438 if(!(fUsePhiWeights || fUsePtWeights || fUseEtaWeights))
2439 {
2440 // Multiplicity (number of RPs):
2441 Double_t dMult = (*fSpk)(0,0);
2442 // Real and imaginary parts of non-weighted Q-vectors (Q_{n,0}) evaluated in harmonics n,2n,...,6n:
2443 Double_t dReQ1n = (*fReQnk)(0,0);
2444 Double_t dReQ2n = (*fReQnk)(1,0);
2445 Double_t dReQ3n = (*fReQnk)(2,0);
2446 Double_t dReQ4n = (*fReQnk)(3,0);
2447 //Double_t dReQ5n = (*fReQnk)(4,0); // not needed
2448 Double_t dReQ6n = (*fReQnk)(5,0);
2449 Double_t dImQ1n = (*fImQnk)(0,0);
2450 Double_t dImQ2n = (*fImQnk)(1,0);
2451 Double_t dImQ3n = (*fImQnk)(2,0);
2452 Double_t dImQ4n = (*fImQnk)(3,0);
2453 //Double_t dImQ5n = (*fImQnk)(4,0); // not needed
2454 Double_t dImQ6n = (*fImQnk)(5,0);
2455
2456 // 5-particle azimuthal correlator:
2457 Double_t five2n2n2n3n3n = 0.; // <cos[n(2phi1+2phi2+2phi3-3phi4-3phi5)]>
2458 Double_t reQ2nQ2nQ2nQ3nstarQ3nstar = pow(dReQ2n,3.)*pow(dReQ3n,2.)
2459 - 3.*dReQ2n*pow(dReQ3n,2.)*pow(dImQ2n,2.)
2460 + 6.*pow(dReQ2n,2.)*dReQ3n*dImQ2n*dImQ3n
2461 - 2.*dReQ3n*pow(dImQ2n,3.)*dImQ3n-pow(dReQ2n,3.)*pow(dImQ3n,2.)
2462 + 3.*dReQ2n*pow(dImQ2n,2.)*pow(dImQ3n,2.);
2463 Double_t reQ2nQ2nQ2nQ6nstar = dReQ6n*pow(dReQ2n,3)-3.*dReQ2n*dReQ6n*pow(dImQ2n,2)
2464 + 3.*dImQ2n*dImQ6n*pow(dReQ2n,2)-dImQ6n*pow(dImQ2n,3);
2465 Double_t reQ4nQ2nQ3nstarQ3nstar = (dReQ4n*dReQ2n-dImQ4n*dImQ2n)*(dReQ3n*dReQ3n-dImQ3n*dImQ3n)
2466 + 2.*(dReQ4n*dImQ2n+dImQ4n*dReQ2n)*dReQ3n*dImQ3n;
2467 Double_t reQ2nQ2nQ1nstarQ3nstar = (pow(dReQ2n,2.)-pow(dImQ2n,2.))*(dReQ3n*dReQ1n-dImQ3n*dImQ1n)
2468 + 2.*dReQ2n*dImQ2n*(dReQ3n*dImQ1n+dImQ3n*dReQ1n);
2469 Double_t reQ6nQ3nstarQ3nstar = pow(dReQ3n,2.)*dReQ6n + 2.*dReQ3n*dImQ3n*dImQ6n
2470 - pow(dImQ3n,2.)*dReQ6n;
2471 Double_t reQ4nQ2nQ6nstar = dReQ6n*dReQ4n*dReQ2n-dReQ6n*dImQ4n*dImQ2n+dImQ6n*dReQ4n*dImQ2n
2472 + dImQ6n*dImQ4n*dReQ2n;
2473 Double_t reQ4nQ1nstarQ3nstar = dReQ4n*(dReQ3n*dReQ1n-dImQ3n*dImQ1n)+dImQ4n*(dReQ3n*dImQ1n+dImQ3n*dReQ1n);
2474 Double_t reQ2nQ2nQ4nstar = pow(dReQ2n,2.)*dReQ4n+2.*dReQ2n*dImQ2n*dImQ4n-pow(dImQ2n,2.)*dReQ4n;
2475 Double_t reQ2nQ1nQ3nstar = dReQ3n*dReQ2n*dReQ1n-dReQ3n*dImQ2n*dImQ1n+dImQ3n*dReQ2n*dImQ1n
2476 + dImQ3n*dImQ2n*dReQ1n;
2477 Double_t reQ2nQ1nstarQ1nstar = pow(dReQ1n,2.)*dReQ2n + 2.*dReQ1n*dImQ1n*dImQ2n - pow(dImQ1n,2.)*dReQ2n;
2478 // Analytic expression for 5-particle azimuthal correlator:
2479 five2n2n2n3n3n = (reQ2nQ2nQ2nQ3nstarQ3nstar-reQ2nQ2nQ2nQ6nstar-3.*reQ4nQ2nQ3nstarQ3nstar
2480 - 6.*reQ2nQ2nQ1nstarQ3nstar+2.*reQ6nQ3nstarQ3nstar+3.*reQ4nQ2nQ6nstar
2481 + 6.*reQ4nQ1nstarQ3nstar+6.*reQ2nQ2nQ4nstar
2482 + 12.*reQ2nQ1nQ3nstar+6.*reQ2nQ1nstarQ1nstar
2483 - 2.*((pow(dReQ6n,2.)+pow(dImQ6n,2.))
2484 + 3.*(pow(dReQ4n,2.)+pow(dImQ4n,2.))
2485 + 6.*(pow(dReQ3n,2.)+pow(dImQ3n,2.))
2486 + 9.*(pow(dReQ2n,2.)+pow(dImQ2n,2.))
2487 + 6.*(pow(dReQ1n,2.)+pow(dImQ1n,2.))-12.*dMult))
2488 /(dMult*(dMult-1.)*(dMult-2.)*(dMult-3.)*(dMult-4.));
2489 // Fill all-events profile:
2490 f5pCorrelatorPro->Fill(0.5,five2n2n2n3n3n,dMult*(dMult-1.)*(dMult-2.)*(dMult-3.)*(dMult-4.));
2491 } // end of if(!(fUsePhiWeights || fUsePtWeights || fUseEtaWeights))
2492
2493 // b) Calculate 5-p correlator with using particle weights:
2494 if(fUsePhiWeights || fUsePtWeights || fUseEtaWeights)
2495 {
2496 // ...
2497 } // end of if(fUsePhiWeights || fUsePtWeights || fUseEtaWeights)
2498
2499} // end of void AliFlowAnalysisWithMixedHarmonics::Calculate5pCorrelator()
2500
2501//================================================================================================================
d66d46f7 2502
2503void AliFlowAnalysisWithMixedHarmonics::CalculateNonIsotropicTerms()
2504{
e999459d 2505 // Calculate non-isotropic terms which appear in the decomposition of 3-p correlator <cos[n(phi1+phi2-2phi3)]>.
d66d46f7 2506
b71a354b 2507 // a) Calculate without using particle weights;
50040ed6 2508 // b) Calculate using particle weights;
b71a354b 2509
5c078806 2510 // For detector with uniform acceptance all these terms vanish. These non-isotropic terms are stored in fNonIsotropicTermsPro.
2511 // Binning of fNonIsotropicTermsPro is organized as follows:
489d5531 2512 // 1st bin: <<cos(n*phi1)>>
d66d46f7 2513 // 2nd bin: <<sin(n*phi1)>>
489d5531 2514 // 3rd bin: <<cos(2n*phi1)>>
d66d46f7 2515 // 4th bin: <<sin(2n*phi1)>>
489d5531 2516 // 5th bin: <<cos(n*(phi1+phi2)>>
d66d46f7 2517 // 6th bin: <<sin(n*(phi1+phi2)>>
489d5531 2518 // 7th bin: <<cos(n*(2phi1-phi2)>>
d66d46f7 2519 // 8th bin: <<sin(n*(2phi1-phi2)>>
e999459d 2520 // 9th bin: <<cos(n*(phi1-phi2-phi3)>> // not needed
b71a354b 2521 // 10th bin: <<sin(n*(phi1-phi2-phi3)>> // not needed
5c078806 2522
b71a354b 2523 // a) Calculate without using particle weights:
d66d46f7 2524 if(!(fUsePhiWeights || fUsePtWeights || fUseEtaWeights))
2525 {
489d5531 2526 // Multiplicity (number of RPs):
2527 Double_t dMult = (*fSpk)(0,0);
2528 // Real and imaginary parts of non-weighted Q-vectors (Q_{n,0}) evaluated in harmonics n and 2n:
2529 Double_t dReQ1n = (*fReQnk)(0,0);
2530 Double_t dReQ2n = (*fReQnk)(1,0);
2531 Double_t dImQ1n = (*fImQnk)(0,0);
d66d46f7 2532 Double_t dImQ2n = (*fImQnk)(1,0);
489d5531 2533 // 1-particle terms:
d66d46f7 2534 Double_t cosP1n = 0.; // <cos(n*(phi1))>
2535 Double_t sinP1n = 0.; // <sin(n*(phi1))>
2536 Double_t cosP2n = 0.; // <cos(2n*(phi1))>
489d5531 2537 Double_t sinP2n = 0.; // <sin(2n*(phi1))>
2538 if(dMult>0)
2539 {
d66d46f7 2540 cosP1n = dReQ1n/dMult;
2541 sinP1n = dImQ1n/dMult;
2542 cosP2n = dReQ2n/dMult;
2543 sinP2n = dImQ2n/dMult;
e999459d 2544 // All-event avarages:
d66d46f7 2545 fNonIsotropicTermsPro->Fill(0.5,cosP1n,dMult); // <<cos(n*(phi1))>>
2546 fNonIsotropicTermsPro->Fill(1.5,sinP1n,dMult); // <<sin(n*(phi1))>>
2547 fNonIsotropicTermsPro->Fill(2.5,cosP2n,dMult); // <<cos(2n*(phi1))>>
489d5531 2548 fNonIsotropicTermsPro->Fill(3.5,sinP2n,dMult); // <<sin(2n*(phi1))>>
e999459d 2549 // All-event avarages vs M:
b71a354b 2550 if(fCalculateVsM)
e558a733 2551 {
b71a354b 2552 if(dMult<fMinMultiplicity)
2553 {
2554 fNonIsotropicTermsVsMPro->Fill(0.5,0.5,cosP1n,dMult); // <<cos(n*(phi1))>>
2555 fNonIsotropicTermsVsMPro->Fill(1.5,0.5,sinP1n,dMult); // <<sin(n*(phi1))>>
2556 fNonIsotropicTermsVsMPro->Fill(2.5,0.5,cosP2n,dMult); // <<cos(2n*(phi1))>>
2557 fNonIsotropicTermsVsMPro->Fill(3.5,0.5,sinP2n,dMult); // <<sin(2n*(phi1))>>
2558 } else if(dMult>=fMinMultiplicity+fNoOfMultipicityBins*fMultipicityBinWidth)
2559 {
2560 fNonIsotropicTermsVsMPro->Fill(0.5,0.5+fNoOfMultipicityBins+1,cosP1n,dMult); // <<cos(n*(phi1))>>
2561 fNonIsotropicTermsVsMPro->Fill(1.5,0.5+fNoOfMultipicityBins+1,sinP1n,dMult); // <<sin(n*(phi1))>>
2562 fNonIsotropicTermsVsMPro->Fill(2.5,0.5+fNoOfMultipicityBins+1,cosP2n,dMult); // <<cos(2n*(phi1))>>
2563 fNonIsotropicTermsVsMPro->Fill(3.5,0.5+fNoOfMultipicityBins+1,sinP2n,dMult); // <<sin(2n*(phi1))>>
2564 } else
2565 {
2566 fNonIsotropicTermsVsMPro->Fill(0.5,1.5+(Int_t)((dMult-fMinMultiplicity)/fMultipicityBinWidth),cosP1n,dMult); // <<cos(n*(phi1))>>
2567 fNonIsotropicTermsVsMPro->Fill(1.5,1.5+(Int_t)((dMult-fMinMultiplicity)/fMultipicityBinWidth),sinP1n,dMult); // <<sin(n*(phi1))>>
2568 fNonIsotropicTermsVsMPro->Fill(2.5,1.5+(Int_t)((dMult-fMinMultiplicity)/fMultipicityBinWidth),cosP2n,dMult); // <<cos(2n*(phi1))>>
2569 fNonIsotropicTermsVsMPro->Fill(3.5,1.5+(Int_t)((dMult-fMinMultiplicity)/fMultipicityBinWidth),sinP2n,dMult); // <<sin(2n*(phi1))>>
2570 }
2571 } // end of if(fCalculateVsM)
e558a733 2572 } // end of if(dMult>0)
489d5531 2573 // 2-particle terms:
d66d46f7 2574 Double_t cosP1nP1n = 0.; // <cos(n*(phi1+phi2))>
2575 Double_t sinP1nP1n = 0.; // <sin(n*(phi1+phi2))>
2576 Double_t cosP2nM1n = 0.; // <cos(n*(2phi1-phi2))>
489d5531 2577 Double_t sinP2nM1n = 0.; // <sin(n*(2phi1-phi2))>
2578 if(dMult>1)
2579 {
d66d46f7 2580 cosP1nP1n = (pow(dReQ1n,2)-pow(dImQ1n,2)-dReQ2n)/(dMult*(dMult-1));
489d5531 2581 sinP1nP1n = (2.*dReQ1n*dImQ1n-dImQ2n)/(dMult*(dMult-1));
d66d46f7 2582 cosP2nM1n = (dReQ2n*dReQ1n+dImQ2n*dImQ1n-dReQ1n)/(dMult*(dMult-1));
489d5531 2583 sinP2nM1n = (dImQ2n*dReQ1n-dReQ2n*dImQ1n-dImQ1n)/(dMult*(dMult-1));
e999459d 2584 // All-event avarages:
d66d46f7 2585 fNonIsotropicTermsPro->Fill(4.5,cosP1nP1n,dMult*(dMult-1.)); // <<cos(n*(phi1+phi2))>>
489d5531 2586 fNonIsotropicTermsPro->Fill(5.5,sinP1nP1n,dMult*(dMult-1.)); // <<sin(n*(phi1+phi2))>>
d66d46f7 2587 fNonIsotropicTermsPro->Fill(6.5,cosP2nM1n,dMult*(dMult-1.)); // <<cos(n*(2phi1-phi2))>>
489d5531 2588 fNonIsotropicTermsPro->Fill(7.5,sinP2nM1n,dMult*(dMult-1.)); // <<sin(n*(2phi1-phi2))>>
e999459d 2589 // All-event avarages vs M:
b71a354b 2590 if(fCalculateVsM)
e558a733 2591 {
b71a354b 2592 if(dMult<fMinMultiplicity)
2593 {
2594 fNonIsotropicTermsVsMPro->Fill(4.5,0.5,cosP1nP1n,dMult*(dMult-1.)); // <<cos(n*(phi1+phi2))>>
2595 fNonIsotropicTermsVsMPro->Fill(5.5,0.5,sinP1nP1n,dMult*(dMult-1.)); // <<sin(n*(phi1+phi2))>>
2596 fNonIsotropicTermsVsMPro->Fill(6.5,0.5,cosP2nM1n,dMult*(dMult-1.)); // <<cos(n*(2phi1-phi2))>>
2597 fNonIsotropicTermsVsMPro->Fill(7.5,0.5,sinP2nM1n,dMult*(dMult-1.)); // <<sin(n*(2phi1-phi2))>>
2598 } else if(dMult>=fMinMultiplicity+fNoOfMultipicityBins*fMultipicityBinWidth)
2599 {
2600 fNonIsotropicTermsVsMPro->Fill(4.5,0.5+fNoOfMultipicityBins+1,cosP1nP1n,dMult*(dMult-1.)); // <<cos(n*(phi1+phi2))>>
2601 fNonIsotropicTermsVsMPro->Fill(5.5,0.5+fNoOfMultipicityBins+1,sinP1nP1n,dMult*(dMult-1.)); // <<sin(n*(phi1+phi2))>>
2602 fNonIsotropicTermsVsMPro->Fill(6.5,0.5+fNoOfMultipicityBins+1,cosP2nM1n,dMult*(dMult-1.)); // <<cos(n*(2phi1-phi2))>>
2603 fNonIsotropicTermsVsMPro->Fill(7.5,0.5+fNoOfMultipicityBins+1,sinP2nM1n,dMult*(dMult-1.)); // <<sin(n*(2phi1-phi2))>>
2604 } else
2605 {
2606 fNonIsotropicTermsVsMPro->Fill(4.5,1.5+(Int_t)((dMult-fMinMultiplicity)/fMultipicityBinWidth),cosP1nP1n,dMult*(dMult-1.)); // <<cos(n*(phi1+phi2))>>
2607 fNonIsotropicTermsVsMPro->Fill(5.5,1.5+(Int_t)((dMult-fMinMultiplicity)/fMultipicityBinWidth),sinP1nP1n,dMult*(dMult-1.)); // <<sin(n*(phi1+phi2))>>
2608 fNonIsotropicTermsVsMPro->Fill(6.5,1.5+(Int_t)((dMult-fMinMultiplicity)/fMultipicityBinWidth),cosP2nM1n,dMult*(dMult-1.)); // <<cos(n*(2phi1-phi2))>>
2609 fNonIsotropicTermsVsMPro->Fill(7.5,1.5+(Int_t)((dMult-fMinMultiplicity)/fMultipicityBinWidth),sinP2nM1n,dMult*(dMult-1.)); // <<sin(n*(2phi1-phi2))>>
2610 }
2611 } // end of if(fCalculateVsM)
e558a733 2612 } // end of if(dMult>1)
e999459d 2613 // 3-particle: correct and ready but not needed, hence commented out.
2614 /*
489d5531 2615 Double_t cosP1nM1nM1n = 0.; // <cos(n*(phi1-phi2-phi3))>
2616 Double_t sinP1nM1nM1n = 0.; // <sin(n*(phi1-phi2-phi3))>
2617 if(dMult>2)
2618 {
2619 cosP1nM1nM1n = (dReQ1n*(pow(dReQ1n,2)+pow(dImQ1n,2))-dReQ1n*dReQ2n-dImQ1n*dImQ2n-2.*(dMult-1)*dReQ1n)
d66d46f7 2620 / (dMult*(dMult-1)*(dMult-2));
489d5531 2621 sinP1nM1nM1n = (-dImQ1n*(pow(dReQ1n,2)+pow(dImQ1n,2))+dReQ1n*dImQ2n-dImQ1n*dReQ2n+2.*(dMult-1)*dImQ1n)
2622 / (dMult*(dMult-1)*(dMult-2));
489d5531 2623 // All-events avarages:
d66d46f7 2624 fNonIsotropicTermsPro->Fill(8.5,cosP1nM1nM1n,dMult*(dMult-1.)*(dMult-2.)); // <<cos(n*(phi1-phi2-phi3))>>
e558a733 2625 fNonIsotropicTermsPro->Fill(9.5,sinP1nM1nM1n,dMult*(dMult-1.)*(dMult-2.)); // <<sin(n*(phi1-phi2-phi3))>>
2626 // All-events avarages vs M:
b71a354b 2627 if(fCalculateVsM)
e558a733 2628 {
b71a354b 2629 if(dMult<fMinMultiplicity)
2630 {
2631 fNonIsotropicTermsVsMPro->Fill(8.5,0.5,cosP1nM1nM1n,dMult*(dMult-1.)*(dMult-2.)); // <<cos(n*(phi1-phi2-phi3))>>
2632 fNonIsotropicTermsVsMPro->Fill(9.5,0.5,sinP1nM1nM1n,dMult*(dMult-1.)*(dMult-2.)); // <<sin(n*(phi1-phi2-phi3))>>
2633 } else if(dMult>=fMinMultiplicity+fNoOfMultipicityBins*fMultipicityBinWidth)
2634 {
2635 fNonIsotropicTermsVsMPro->Fill(8.5,0.5+fNoOfMultipicityBins+1,cosP1nM1nM1n,dMult*(dMult-1.)*(dMult-2.)); // <<cos(n*(phi1-phi2-phi3))>>
2636 fNonIsotropicTermsVsMPro->Fill(9.5,0.5+fNoOfMultipicityBins+1,sinP1nM1nM1n,dMult*(dMult-1.)*(dMult-2.)); // <<sin(n*(phi1-phi2-phi3))>>
2637 } else
2638 {
2639 fNonIsotropicTermsVsMPro->Fill(8.5,1.5+(Int_t)((dMult-fMinMultiplicity)/fMultipicityBinWidth),
2640 cosP1nM1nM1n,dMult*(dMult-1.)*(dMult-2.)); // <<cos(n*(phi1-phi2-phi3))>>
2641 fNonIsotropicTermsVsMPro->Fill(9.5,1.5+(Int_t)((dMult-fMinMultiplicity)/fMultipicityBinWidth),
2642 sinP1nM1nM1n,dMult*(dMult-1.)*(dMult-2.)); // <<sin(n*(phi1-phi2-phi3))>>
2643 }
2644 } // end of if(fCalculateVsM)
e558a733 2645 } // end of if(dMult>2)
e999459d 2646 */
d66d46f7 2647 } // end of if(!(fUsePhiWeights || fUsePtWeights || fUseEtaWeights))
2648
b71a354b 2649 // b) Calculate using particle weights:
d66d46f7 2650 if(fUsePhiWeights || fUsePtWeights || fUseEtaWeights)
2651 {
e999459d 2652 // ...
d66d46f7 2653 } // end of if(fUsePhiWeights || fUsePtWeights || fUseEtaWeights)
50040ed6 2654
d66d46f7 2655} // end of void AliFlowAnalysisWithMixedHarmonics::CalculateNonIsotropicTerms()
2656
5c078806 2657//================================================================================================================
2658
41e6d9e4 2659void AliFlowAnalysisWithMixedHarmonics::CalculateDifferential3pCorrelator(Double_t &gIntegratedValue)
5c078806 2660{
e999459d 2661 // Calculate differential 3-p azimuthal correlator cos[n(psi1+psi2-2phi3)] in terms of Q_{2n}, p_{n}, q1_{n} and q2_{n}.
5c078806 2662
2663 // a) Calculate differential 3-p correlator without using particle weights;
50040ed6 2664 // b) Calculate differential 3-p correlator with using particle weights;
2665 // c) Calculate non-isotropic terms for 3-p correlator.
5c078806 2666
2667 // a) Calculate differential 3-p correlator without using particle weights:
2668 if(!(fUsePhiWeights || fUsePtWeights || fUseEtaWeights))
2669 {
41e6d9e4 2670 Int_t iBinCounter = 0;
2671 Double_t gSumBinContentTimesWeight = 0., gSumWeight = 0.;
2672 Double_t gSumBinContentTimesWeightSquared = 0.;
2673
5c078806 2674 // Multiplicity (number of RPs):
2675 Double_t dMult = (*fSpk)(0,0);
2676 // Real and imaginary parts of non-weighted Q-vectors (Q_{n,0}) evaluated in harmonic 2n:
2677 Double_t dReQ2n = (*fReQnk)(1,0);
2678 Double_t dImQ2n = (*fImQnk)(1,0);
41e6d9e4 2679 for(Int_t sd=0;sd<2;sd++)
5c078806 2680 {
50040ed6 2681 // [(p1+p2)/2,|p1-p2|]
5c078806 2682 // looping over all bins and calculating reduced correlations:
2683 for(Int_t b=1;b<=fnBinsPt;b++)
2684 {
2685 // real and imaginary parts of p_{n}:
2686 Double_t p1nRe = fRePEBE[sd]->GetBinContent(b)*fRePEBE[sd]->GetBinEntries(b);
2687 Double_t p1nIm = fImPEBE[sd]->GetBinContent(b)*fImPEBE[sd]->GetBinEntries(b);
e999459d 2688 // overlap 1: to be improved (terminology)
2689 Double_t overlap1 = fOverlapEBE[0][sd]->GetBinContent(b)*fOverlapEBE[0][sd]->GetBinEntries(b);
2690 // overlap 2: to be improved (terminology)
2691 Double_t overlap2 = fOverlapEBE[1][sd]->GetBinContent(b)*fOverlapEBE[1][sd]->GetBinEntries(b);
5c078806 2692 // number of pairs of POIs in particular (p1+p2)/2 or |p1-p2| bin:
2693 Double_t mp = fRePEBE[sd]->GetBinEntries(b);
e999459d 2694 // number of pairs of POI1/RP and POI2 in particular (p1+p2)/2 or |p1-p2| bin:
2695 Double_t mOverlap1 = fOverlapEBE[0][sd]->GetBinEntries(b);
2696 // number of pairs of POI2/RP and POI1 in particular (p1+p2)/2 or |p1-p2| bin:
2697 Double_t mOverlap2 = fOverlapEBE[1][sd]->GetBinEntries(b);
2698 // e-b-e weight for cos[n(psi1+psi2-2phi3)]:
2699 Double_t weight = mp*dMult-mOverlap1-mOverlap2;
2700
2701 Double_t cosP2nphi1M1npsi2M1npsi2 = 0; // cos[n(psi1+psi2-2phi3)]
2702 if(weight>0.)
5c078806 2703 {
e999459d 2704 cosP2nphi1M1npsi2M1npsi2 = (p1nRe*dReQ2n+p1nIm*dImQ2n-overlap1-overlap2)/(weight);
5c078806 2705 }
e999459d 2706 f3pCorrelatorVsPtSumDiffPro[sd]->Fill(fPtMin+(b-1)*fPtBinWidth,cosP2nphi1M1npsi2M1npsi2,weight);
41e6d9e4 2707 if(sd == 0) {
2708 iBinCounter += 1;
2709
2710 gSumBinContentTimesWeight += f3pCorrelatorVsPtSumDiffPro[sd]->GetBinContent(b)*f3pCorrelatorVsPtSumDiffPro[sd]->GetBinEntries(b);
2711 gSumWeight += f3pCorrelatorVsPtSumDiffPro[sd]->GetBinEntries(b);
2712 gSumBinContentTimesWeightSquared += TMath::Power(gSumBinContentTimesWeight,2);
2713 }
50040ed6 2714
2715 // non-isotropic terms, 1st POI:
2716 Double_t p1nRePOI1 = fReNITEBE[0][0][sd]->GetBinContent(b)*fReNITEBE[0][0][sd]->GetBinEntries(b);
2717 Double_t p1nImPOI1 = fImNITEBE[0][0][sd]->GetBinContent(b)*fImNITEBE[0][0][sd]->GetBinEntries(b);
2718 Double_t mpPOI1 = fReNITEBE[0][0][sd]->GetBinEntries(b);
2719 Double_t q1nRePOI1 = fReNITEBE[0][1][sd]->GetBinContent(b)*fReNITEBE[0][1][sd]->GetBinEntries(b);
2720 Double_t q1nImPOI1 = fImNITEBE[0][1][sd]->GetBinContent(b)*fImNITEBE[0][1][sd]->GetBinEntries(b);
2721 Double_t mqPOI1 = fReNITEBE[0][1][sd]->GetBinEntries(b);
2722 // non-isotropic terms, 2nd POI:
2723 Double_t p1nRePOI2 = fReNITEBE[1][0][sd]->GetBinContent(b)*fReNITEBE[1][0][sd]->GetBinEntries(b);
2724 Double_t p1nImPOI2 = fImNITEBE[1][0][sd]->GetBinContent(b)*fImNITEBE[1][0][sd]->GetBinEntries(b);
2725 Double_t mpPOI2 = fReNITEBE[1][0][sd]->GetBinEntries(b);
2726 Double_t q1nRePOI2 = fReNITEBE[1][1][sd]->GetBinContent(b)*fReNITEBE[1][1][sd]->GetBinEntries(b);
2727 Double_t q1nImPOI2 = fImNITEBE[1][1][sd]->GetBinContent(b)*fImNITEBE[1][1][sd]->GetBinEntries(b);
2728 Double_t mqPOI2 = fReNITEBE[1][1][sd]->GetBinEntries(b);
2729 // Fill all-event profiles:
2730 if(weight>0. && mpPOI1>0.)
2731 {
2732 fNonIsotropicTermsVsPtSumDiffPro[sd][0]->Fill(fPtMin+(b-1)*fPtBinWidth,p1nRePOI1/mpPOI1,mpPOI1); // <<cos(#psi_{POI_1})>>
2733 fNonIsotropicTermsVsPtSumDiffPro[sd][1]->Fill(fPtMin+(b-1)*fPtBinWidth,p1nImPOI1/mpPOI1,mpPOI1); // <<sin(#psi_{POI_1})>>
2734 }
2735 if(weight>0. && mpPOI2>0.)
2736 {
2737 fNonIsotropicTermsVsPtSumDiffPro[sd][2]->Fill(fPtMin+(b-1)*fPtBinWidth,p1nRePOI2/mpPOI2,mpPOI2); // <<cos(#psi_{POI_2})>>
2738 fNonIsotropicTermsVsPtSumDiffPro[sd][3]->Fill(fPtMin+(b-1)*fPtBinWidth,p1nImPOI2/mpPOI2,mpPOI2); // <<sin(#psi_{POI_2})>>
2739 }
2740 if(weight>0. && mpPOI1*dMult-mqPOI1>0.)
2741 {
2742 fNonIsotropicTermsVsPtSumDiffPro[sd][4]->Fill(fPtMin+(b-1)*fPtBinWidth,
2743 (p1nRePOI1*dReQ2n+p1nImPOI1*dImQ2n-q1nRePOI1)/(mpPOI1*dMult-mqPOI1),mpPOI1*dMult-mqPOI1); // <<cos(#psi_{POI_1}-2*phi)>>
2744 fNonIsotropicTermsVsPtSumDiffPro[sd][5]->Fill(fPtMin+(b-1)*fPtBinWidth,
2745 (p1nImPOI1*dReQ2n-p1nRePOI1*dImQ2n+q1nImPOI1)/(mpPOI1*dMult-mqPOI1),mpPOI1*dMult-mqPOI1); // <<sin(#psi_{POI_1}-2*phi)>>
2746 }
2747 if(weight>0. && mpPOI2*dMult-mqPOI2>0.)
2748 {
2749 fNonIsotropicTermsVsPtSumDiffPro[sd][6]->Fill(fPtMin+(b-1)*fPtBinWidth,
2750 (p1nRePOI2*dReQ2n+p1nImPOI2*dImQ2n-q1nRePOI2)/(mpPOI2*dMult-mqPOI2),mpPOI2*dMult-mqPOI2); // <<cos(#psi_{POI_2}-2*phi)>>
2751 fNonIsotropicTermsVsPtSumDiffPro[sd][7]->Fill(fPtMin+(b-1)*fPtBinWidth,
2752 (p1nImPOI2*dReQ2n-p1nRePOI2*dImQ2n+q1nImPOI2)/(mpPOI2*dMult-mqPOI2),mpPOI2*dMult-mqPOI2); // <<sin(#psi_{POI_2}-2*phi)>>
2753 }
2754 if(weight>0. && mp>0.)
2755 {
2756 fNonIsotropicTermsVsPtSumDiffPro[sd][8]->Fill(fPtMin+(b-1)*fPtBinWidth,p1nRe/mp,mp); // <<cos(#psi_{POI_1}+#psi_{POI_2})>>
2757 fNonIsotropicTermsVsPtSumDiffPro[sd][9]->Fill(fPtMin+(b-1)*fPtBinWidth,p1nIm/mp,mp); // <<sin(#psi_{POI_1}+#psi_{POI_2})>>
2758 }
5c078806 2759 } // end of for(Int_t b=1;b<=fnBinsPt;b++)
41e6d9e4 2760
50040ed6 2761 // [(eta1+eta2)/2,|eta1-eta2|]
41e6d9e4 2762 // looping over all bins and calculating reduced correlations:
2763 for(Int_t k=1;k<=fnBinsEta;k++)
2764 {
2765 // real and imaginary parts of p_{n}:
2766 Double_t p1nRe = fReEtaEBE[sd]->GetBinContent(k)*fReEtaEBE[sd]->GetBinEntries(k);
2767 Double_t p1nIm = fImEtaEBE[sd]->GetBinContent(k)*fImEtaEBE[sd]->GetBinEntries(k);
2768 // overlap 1: to be improved (terminology)
2769 Double_t overlap1 = fOverlapEBE2[0][sd]->GetBinContent(k)*fOverlapEBE2[0][sd]->GetBinEntries(k);
2770 // overlap 2: to be improved (terminology)
2771 Double_t overlap2 = fOverlapEBE2[1][sd]->GetBinContent(k)*fOverlapEBE2[1][sd]->GetBinEntries(k);
2772 // number of pairs of POIs in particular (eta1+eta2)/2 or |eta1-eta2| bin:
2773 Double_t mp = fReEtaEBE[sd]->GetBinEntries(k);
2774 // number of pairs of POI1/RP and POI2 in particular (eta1+eta2)/2 or |eta1-eta2| bin:
2775 Double_t mOverlap1 = fOverlapEBE2[0][sd]->GetBinEntries(k);
2776 // number of pairs of POI2/RP and POI1 in particular (eta1+eta2)/2 or |eta1-eta2| bin:
2777 Double_t mOverlap2 = fOverlapEBE2[1][sd]->GetBinEntries(k);
2778 // e-b-e weight for cos[n(psi1+psi2-2phi3)]:
2779 Double_t weight = mp*dMult-mOverlap1-mOverlap2;
2780
2781 Double_t cosP2nphi1M1npsi2M1npsi2 = 0; // cos[n(psi1+psi2-2phi3)]
2782 if(weight>0.)
2783 {
2784 cosP2nphi1M1npsi2M1npsi2 = (p1nRe*dReQ2n+p1nIm*dImQ2n-overlap1-overlap2)/(weight);
2785 }
2786 f3pCorrelatorVsEtaSumDiffPro[sd]->Fill(fEtaMin+(k-1)*fEtaBinWidth,cosP2nphi1M1npsi2M1npsi2,weight);
50040ed6 2787
2788 // non-isotropic terms, 1st POI:
2789 Double_t p1nRePOI1 = fReNITEBE[0][0][sd+2]->GetBinContent(k)*fReNITEBE[0][0][sd+2]->GetBinEntries(k);
2790 Double_t p1nImPOI1 = fImNITEBE[0][0][sd+2]->GetBinContent(k)*fImNITEBE[0][0][sd+2]->GetBinEntries(k);
2791 Double_t mpPOI1 = fReNITEBE[0][0][sd+2]->GetBinEntries(k);
2792 Double_t q1nRePOI1 = fReNITEBE[0][1][sd+2]->GetBinContent(k)*fReNITEBE[0][1][sd+2]->GetBinEntries(k);
2793 Double_t q1nImPOI1 = fImNITEBE[0][1][sd+2]->GetBinContent(k)*fImNITEBE[0][1][sd+2]->GetBinEntries(k);
2794 Double_t mqPOI1 = fReNITEBE[0][1][sd+2]->GetBinEntries(k);
2795 // non-isotropic terms, 2nd POI:
2796 Double_t p1nRePOI2 = fReNITEBE[1][0][sd+2]->GetBinContent(k)*fReNITEBE[1][0][sd+2]->GetBinEntries(k);
2797 Double_t p1nImPOI2 = fImNITEBE[1][0][sd+2]->GetBinContent(k)*fImNITEBE[1][0][sd+2]->GetBinEntries(k);
2798 Double_t mpPOI2 = fReNITEBE[1][0][sd+2]->GetBinEntries(k);
2799 Double_t q1nRePOI2 = fReNITEBE[1][1][sd+2]->GetBinContent(k)*fReNITEBE[1][1][sd+2]->GetBinEntries(k);
2800 Double_t q1nImPOI2 = fImNITEBE[1][1][sd+2]->GetBinContent(k)*fImNITEBE[1][1][sd+2]->GetBinEntries(k);
2801 Double_t mqPOI2 = fReNITEBE[1][1][sd+2]->GetBinEntries(k);
2802 // Fill all-event profiles:
2803 if(weight>0. && mpPOI1>0.)
2804 {
2805 fNonIsotropicTermsVsEtaSumDiffPro[sd][0]->Fill(fEtaMin+(k-1)*fEtaBinWidth,p1nRePOI1/mpPOI1,mpPOI1); // <<cos(#psi_{POI_1})>>
2806 fNonIsotropicTermsVsEtaSumDiffPro[sd][1]->Fill(fEtaMin+(k-1)*fEtaBinWidth,p1nImPOI1/mpPOI1,mpPOI1); // <<sin(#psi_{POI_1})>>
2807 }
2808 if(weight>0. && mpPOI2>0.)
2809 {
2810 fNonIsotropicTermsVsEtaSumDiffPro[sd][2]->Fill(fEtaMin+(k-1)*fEtaBinWidth,p1nRePOI2/mpPOI2,mpPOI2); // <<cos(#psi_{POI_2})>>
2811 fNonIsotropicTermsVsEtaSumDiffPro[sd][3]->Fill(fEtaMin+(k-1)*fEtaBinWidth,p1nImPOI2/mpPOI2,mpPOI2); // <<sin(#psi_{POI_2})>>
2812 }
2813 if(weight>0. && mpPOI1*dMult-mqPOI1>0.)
2814 {
2815 fNonIsotropicTermsVsEtaSumDiffPro[sd][4]->Fill(fEtaMin+(k-1)*fEtaBinWidth,
2816 (p1nRePOI1*dReQ2n+p1nImPOI1*dImQ2n-q1nRePOI1)/(mpPOI1*dMult-mqPOI1),mpPOI1*dMult-mqPOI1); // <<cos(#psi_{POI_1}-2*phi)>>
2817 fNonIsotropicTermsVsEtaSumDiffPro[sd][5]->Fill(fEtaMin+(k-1)*fEtaBinWidth,
2818 (p1nImPOI1*dReQ2n-p1nRePOI1*dImQ2n+q1nImPOI1)/(mpPOI1*dMult-mqPOI1),mpPOI1*dMult-mqPOI1); // <<sin(#psi_{POI_1}-2*phi)>>
2819 }
2820 if(weight>0. && mpPOI2*dMult-mqPOI2>0.)
2821 {
2822 fNonIsotropicTermsVsEtaSumDiffPro[sd][6]->Fill(fEtaMin+(k-1)*fEtaBinWidth,
2823 (p1nRePOI2*dReQ2n+p1nImPOI2*dImQ2n-q1nRePOI2)/(mpPOI2*dMult-mqPOI2),mpPOI2*dMult-mqPOI2); // <<cos(#psi_{POI_2}-2*phi)>>
2824 fNonIsotropicTermsVsEtaSumDiffPro[sd][7]->Fill(fEtaMin+(k-1)*fEtaBinWidth,
2825 (p1nImPOI2*dReQ2n-p1nRePOI2*dImQ2n+q1nImPOI2)/(mpPOI2*dMult-mqPOI2),mpPOI2*dMult-mqPOI2); // <<sin(#psi_{POI_2}-2*phi)>>
2826 }
2827 if(weight>0. && mp>0.)
2828 {
2829 fNonIsotropicTermsVsEtaSumDiffPro[sd][8]->Fill(fEtaMin+(k-1)*fEtaBinWidth,p1nRe/mp,mp); // <<cos(#psi_{POI_1}+#psi_{POI_2})>>
2830 fNonIsotropicTermsVsEtaSumDiffPro[sd][9]->Fill(fEtaMin+(k-1)*fEtaBinWidth,p1nIm/mp,mp); // <<sin(#psi_{POI_1}+#psi_{POI_2})>>
2831 }
2832 } // end of for(Int_t k=1;k<=fnBinsEta;k++)
5c078806 2833 } // end of for(Int_t sd=0;sd<2;sd++)
41e6d9e4 2834
2835 gIntegratedValue = -1000.;
2836 if((gSumWeight)&&(iBinCounter))
e409ac85 2837 gIntegratedValue = gSumBinContentTimesWeight/gSumWeight;
5c078806 2838 } // end of if(!(fUsePhiWeights || fUsePtWeights || fUseEtaWeights))
2839
2840 // b) Calculate differential 3-p correlator by using particle weights:
2841 if(fUsePhiWeights || fUsePtWeights || fUseEtaWeights)
2842 {
e999459d 2843 // ...
5c078806 2844 } // end of if(fUsePhiWeights || fUsePtWeights || fUseEtaWeights)
2845
2846} // end of void AliFlowAnalysisWithMixedHarmonics::CalculateDifferential3pCorrelator()
2847
2848//================================================================================================================
2849
e409ac85 2850void AliFlowAnalysisWithMixedHarmonics::GetCorrelatorAndError(TProfile *g3pCorrelatorVsPt, Double_t &g3pCorrelatorValue, Double_t &g3pCorrelatorError) {
2851 //Retrieves the 3p correlator <<cos[n(psi1+psi2-2phi3)]>>
2852 //and its error
2853 Double_t gSumXi = 0.;
2854 Double_t gSumYi = 0.;
2855 Double_t gSumXiYi = 0.;
2856 Double_t gSumXiYi2 = 0.;
2857 Double_t gSumXi2Yi2 = 0.;
2858 Double_t gSumDeltaXi2 = 0.;
2859 Double_t gSumYi2DeltaXi2 = 0.;
2860
2861 for(Int_t iBin = 1; iBin <= g3pCorrelatorVsPt->GetNbinsX(); iBin++) {
2862 gSumXi += g3pCorrelatorVsPt->GetBinEntries(iBin);
2863 gSumYi += g3pCorrelatorVsPt->GetBinContent(iBin);
2864 gSumXiYi += g3pCorrelatorVsPt->GetBinEntries(iBin)*g3pCorrelatorVsPt->GetBinContent(iBin);
2865 gSumXiYi2 += g3pCorrelatorVsPt->GetBinEntries(iBin)*TMath::Power(g3pCorrelatorVsPt->GetBinContent(iBin),2);
2866 gSumXi2Yi2 += TMath::Power(g3pCorrelatorVsPt->GetBinEntries(iBin)*g3pCorrelatorVsPt->GetBinContent(iBin),2);
2867 gSumDeltaXi2 += TMath::Power(g3pCorrelatorVsPt->GetBinError(iBin),2);
2868 gSumYi2DeltaXi2 += TMath::Power(g3pCorrelatorVsPt->GetBinContent(iBin),2) + TMath::Power(g3pCorrelatorVsPt->GetBinError(iBin),2);
2869 }
2870
2871 g3pCorrelatorValue = -1000.;
2872 g3pCorrelatorError = 1000.;
2873
2874 if(gSumXi != 0.)
2875 g3pCorrelatorValue = gSumXiYi/gSumXi;
2876 if((gSumXi != 0.)&&(gSumXiYi != 0.))
2877 g3pCorrelatorError = TMath::Abs((gSumXiYi/gSumXi))*TMath::Sqrt(TMath::Power((TMath::Sqrt(gSumYi2DeltaXi2)/gSumXiYi),2) + TMath::Power((gSumDeltaXi2/gSumXi),2));
2878}
2879//================================================================================================================
2880