AliPhysics  31210d0 (31210d0)
AliFlowAnalysisWithQCumulants.cxx
Go to the documentation of this file.
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. *
14 **************************************************************************/
15 
16 /**********************************
17  * flow analysis with Q-cumulants *
18  * *
19  * author: Ante Bilandzic *
20  * (abilandzic@gmail.com) *
21  *********************************/
22 
23 #define AliFlowAnalysisWithQCumulants_cxx
24 
25 #include "Riostream.h"
26 #include "AliFlowCommonConstants.h"
27 #include "AliFlowCommonHist.h"
29 #include "TChain.h"
30 
31 #include "TFile.h"
32 #include "TList.h"
33 #include "TGraph.h"
34 #include "TParticle.h"
35 #include "TRandom3.h"
36 #include "TStyle.h"
37 #include "TProfile.h"
38 #include "TProfile2D.h"
39 #include "TMath.h"
40 #include "TArrow.h"
41 #include "TPaveLabel.h"
42 #include "TCanvas.h"
43 #include "AliFlowEventSimple.h"
44 #include "AliFlowTrackSimple.h"
46 #include "TArrayD.h"
47 #include "TRandom.h"
48 #include "TF1.h"
49 
50 class TH1;
51 class TH2;
52 class TGraph;
53 class TPave;
54 class TLatex;
55 class TMarker;
56 class TRandom3;
57 class TObjArray;
58 class TList;
59 class TCanvas;
60 class TSystem;
61 class TROOT;
62 class AliFlowVector;
63 class TVector;
64 
65 //================================================================================================================
66 
67 using std::endl;
68 using std::cout;
69 using std::flush;
71 
73  // 0.) base:
74  fHistList(NULL),
75  // 1.) common:
76  fBookOnlyBasicCCH(kTRUE),
77  fCommonHists(NULL),
78  fCommonHists2nd(NULL),
79  fCommonHists4th(NULL),
80  fCommonHists6th(NULL),
81  fCommonHists8th(NULL),
82  fCommonHistsResults2nd(NULL),
83  fCommonHistsResults4th(NULL),
84  fCommonHistsResults6th(NULL),
85  fCommonHistsResults8th(NULL),
86  fnBinsPhi(0),
87  fPhiMin(0),
88  fPhiMax(0),
89  fPhiBinWidth(0),
90  fnBinsPt(0),
91  fPtMin(0),
92  fPtMax(0),
93  fPtBinWidth(0),
94  fnBinsEta(0),
95  fEtaMin(0),
96  fEtaMax(0),
97  fEtaBinWidth(0),
98  fCommonConstants(NULL),
99  fFillMultipleControlHistograms(kFALSE),
100  fHarmonic(2),
101  fAnalysisLabel(NULL),
102  fMaxCommonResultsHistogram(8),
103  // 2a.) particle weights:
104  fWeightsList(NULL),
105  fUsePhiWeights(kFALSE),
106  fUsePtWeights(kFALSE),
107  fUseEtaWeights(kFALSE),
108  fUseTrackWeights(kFALSE),
109  fUseParticleWeights(NULL),
110  fPhiWeights(NULL),
111  fPtWeights(NULL),
112  fEtaWeights(NULL),
113  // 2b.) event weights:
114  fMultiplicityWeight(NULL),
115  fMultiplicityIs(AliFlowCommonConstants::kRP),
116  // 3.) integrated flow:
117  fIntFlowList(NULL),
118  fIntFlowProfiles(NULL),
119  fIntFlowResults(NULL),
120  fIntFlowAllCorrelationsVsM(NULL),
121  fIntFlowFlags(NULL),
122  fApplyCorrectionForNUA(kFALSE),
123  fApplyCorrectionForNUAVsM(kFALSE),
124  fnBinsMult(10000),
125  fMinMult(0.),
126  fMaxMult(10000.),
127  fPropagateErrorAlsoFromNIT(kFALSE),
128  fCalculateCumulantsVsM(kFALSE),
129  fCalculateAllCorrelationsVsM(kFALSE),
130  fMinimumBiasReferenceFlow(kTRUE),
131  fForgetAboutCovariances(kFALSE),
132  fStorePhiDistributionForOneEvent(kFALSE),
133  fExactNoRPs(0),
134  fUse2DHistograms(kFALSE),
135  fFillProfilesVsMUsingWeights(kTRUE),
136  fUseQvectorTerms(kFALSE),
137  fReQ(NULL),
138  fImQ(NULL),
139  fSpk(NULL),
140  fIntFlowCorrelationsEBE(NULL),
141  fIntFlowEventWeightsForCorrelationsEBE(NULL),
142  fIntFlowCorrelationsAllEBE(NULL),
143  fNumberOfRPsEBE(0.),
144  fNumberOfPOIsEBE(0.),
145  fReferenceMultiplicityEBE(0.),
146  fAvMultiplicity(NULL),
147  fIntFlowCorrelationsPro(NULL),
148  fIntFlowSquaredCorrelationsPro(NULL),
149  fIntFlowCorrelationsAllPro(NULL),
150  fIntFlowExtraCorrelationsPro(NULL),
151  fIntFlowProductOfCorrelationsPro(NULL),
152  fIntFlowProductOfCorrectionTermsForNUAPro(NULL),
153  fIntFlowCorrelationsHist(NULL),
154  fIntFlowCorrelationsAllHist(NULL),
155  fIntFlowCovariances(NULL),
156  fIntFlowSumOfProductOfEventWeights(NULL),
157  fIntFlowCovariancesNUA(NULL),
158  fIntFlowSumOfProductOfEventWeightsNUA(NULL),
159  fIntFlowQcumulants(NULL),
160  fIntFlowQcumulantsRebinnedInM(NULL),
161  fIntFlowQcumulantsErrorSquaredRatio(NULL),
162  fIntFlow(NULL),
163  fIntFlowRebinnedInM(NULL),
164  fIntFlowDetectorBias(NULL),
165  // 4.) differential flow:
166  fDiffFlowList(NULL),
167  fDiffFlowProfiles(NULL),
168  fDiffFlowResults(NULL),
169  fDiffFlow2D(NULL),
170  fDiffFlowFlags(NULL),
171  fCalculateDiffFlow(kTRUE),
172  fCalculate2DDiffFlow(kFALSE),
173  fCalculateDiffFlowVsEta(kTRUE),
174  // 5.) other differential correlators:
175  fOtherDiffCorrelatorsList(NULL),
176  // 6.) distributions:
177  fDistributionsList(NULL),
178  fDistributionsFlags(NULL),
179  fStoreDistributions(kFALSE),
180  fnBinsForCorrelations(10000),
181  // 7.) various:
182  fVariousList(NULL),
183  fPhiDistributionForOneEvent(NULL),
184  // 8.) debugging and cross-checking:
185  fNestedLoopsList(NULL),
186  fEvaluateIntFlowNestedLoops(kFALSE),
187  fEvaluateDiffFlowNestedLoops(kFALSE),
188  fMaxAllowedMultiplicity(10),
189  fEvaluateNestedLoops(NULL),
190  fIntFlowDirectCorrelations(NULL),
191  fIntFlowExtraDirectCorrelations(NULL),
192  fCrossCheckInPtBinNo(10),
193  fCrossCheckInEtaBinNo(20),
194  fNoOfParticlesInBin(NULL),
195  fMixedHarmonicsNestedLoops(NULL),
196  // 9.) mixed harmonics:
197  fMixedHarmonicsList(NULL),
198  fMixedHarmonicsProfiles(NULL),
199  fMixedHarmonicsResults(NULL),
200  fMixedHarmonicsErrorPropagation(NULL),
201  fMixedHarmonicsFlags(NULL),
202  fCalculateMixedHarmonics(kFALSE),
203  fCalculateMixedHarmonicsVsM(kFALSE),
204  f2pCorrelations(NULL),
205  f3pCorrelations(NULL),
206  f4pCorrelations(NULL),
207  f5pCorrelations(NULL),
208  f6pCorrelations(NULL),
209  f7pCorrelations(NULL),
210  f8pCorrelations(NULL),
211  f2pCumulants(NULL),
212  f3pCumulants(NULL),
213  f4pCumulants(NULL),
214  f5pCumulants(NULL),
215  f6pCumulants(NULL),
216  f7pCumulants(NULL),
217  f8pCumulants(NULL),
218  fMixedHarmonicProductOfEventWeights(NULL),
219  fMixedHarmonicProductOfCorrelations(NULL),
220  // 10.) Control histograms:
221  fControlHistogramsList(NULL),
222  fControlHistogramsFlags(NULL),
223  fStoreControlHistograms(kFALSE),
224  fCorrelationNoRPsVsRefMult(NULL),
225  fCorrelationNoPOIsVsRefMult(NULL),
226  fCorrelationNoRPsVsNoPOIs(NULL),
227  // 11.) Bootstrap:
228  fBootstrapList(NULL),
229  fBootstrapProfilesList(NULL),
230  fBootstrapResultsList(NULL),
231  fBootstrapFlags(NULL),
232  fUseBootstrap(kFALSE),
233  fUseBootstrapVsM(kFALSE),
234  fnSubsamples(10),
235  fRandom(NULL),
236  fBootstrapCorrelations(NULL),
237  fBootstrapCumulants(NULL)
238  {
239  // constructor
240 
241  // base list to hold all output objects:
242  fHistList = new TList();
243  fHistList->SetName("cobjQC");
244  fHistList->SetOwner(kTRUE);
245 
246  // list to hold histograms with phi, pt and eta weights:
247  fWeightsList = new TList();
248 
249  // multiplicity weight:
250  fMultiplicityWeight = new TString("combinations");
251 
252  // analysis label;
253  fAnalysisLabel = new TString();
254 
255  // initialize all arrays:
256  this->InitializeArraysForIntFlow();
257  this->InitializeArraysForDiffFlow();
258  this->InitializeArraysForDistributions();
259  this->InitializeArraysForVarious();
260  this->InitializeArraysForNestedLoops();
261  this->InitializeArraysForMixedHarmonics();
262  this->InitializeArraysForControlHistograms();
263  this->InitializeArraysForBootstrap();
264 
265  } // end of constructor
266 
267 //================================================================================================================
268 
270 {
271  // destructor
272 
273  delete fHistList;
274 
275 } // end of AliFlowAnalysisWithQCumulants::~AliFlowAnalysisWithQCumulants()
276 
277 //================================================================================================================
278 
280 {
281  // a) Cross check if the settings make sense before starting the QC adventure;
282  // b) Access all common constants;
283  // c) Book all objects;
284  // d) Store flags for integrated and differential flow;
285  // e) Store flags for distributions of corelations;
286  // f) Store harmonic which will be estimated;
287  // g) Store flags for mixed harmonics;
288  // h) Store flags for control histograms;
289  // i) Store bootstrap flags.
290 
291  //save old value and prevent histograms from being added to directory
292  //to avoid name clashes in case multiple analaysis objects are used
293  //in an analysis
294  Bool_t oldHistAddStatus = TH1::AddDirectoryStatus();
295  TH1::AddDirectory(kFALSE);
296 
297  // a) Cross check if the settings make sense before starting the QC adventure;
298  this->CrossCheckSettings();
299  // b) Access all common constants and book a profile to hold them:
300  this->CommonConstants("Init");
301  // c) Book all objects:
303  this->BookAndNestAllLists();
304  this->BookCommonHistograms();
309  this->BookEverythingForVarious();
314 
315  // d) Store flags for integrated and differential flow:
316  this->StoreIntFlowFlags();
317  this->StoreDiffFlowFlags();
318  // e) Store flags for distributions of corelations:
320  // f) Store harmonic which will be estimated:
321  this->StoreHarmonic();
322  // g) Store flags for mixed harmonics:
323  this->StoreMixedHarmonicsFlags();
324  // h) Store flags for control histograms:
326  // i) Store bootstrap flags:
327  this->StoreBootstrapFlags();
328 
329  TH1::AddDirectory(oldHistAddStatus);
330 
331 } // end of void AliFlowAnalysisWithQCumulants::Init()
332 
333 //================================================================================================================
334 
336 {
337  // Running over data only in this method.
338 
339  // a) Check all pointers used in this method;
340  // b) Define local variables;
341  // c) Fill the common control histograms and call the method to fill fAvMultiplicity;
342  // d) Loop over data and calculate e-b-e quantities Q_{n,k}, S_{p,k} and s_{p,k};
343  // e) Calculate the final expressions for S_{p,k} and s_{p,k} (important !!!!);
344  // f) Call the methods which calculate correlations for reference flow;
345  // g) Call the methods which calculate correlations for differential flow;
346  // h) Call the methods which calculate correlations for 2D differential flow;
347  // i) Call the methods which calculate other differential correlators;
348  // j) Distributions of correlations;
349  // k) Store phi distribution for one event to illustrate flow;
350  // l) Cross-check with nested loops correlators for reference flow;
351  // m) Cross-check with nested loops correlators for differential flow;
352  // n) Reset all event-by-event quantities (very important !!!!).
353 
354  // a) Check all pointers used in this method:
355  this->CheckPointersUsedInMake();
356 
357  // b) Define local variables:
358  Double_t dPhi = 0.; // azimuthal angle in the laboratory frame
359  Double_t dPt = 0.; // transverse momentum
360  Double_t dEta = 0.; // pseudorapidity
361  Double_t wPhi = 1.; // phi weight
362  Double_t wPt = 1.; // pt weight
363  Double_t wEta = 1.; // eta weight
364  Double_t wTrack = 1.; // track weight
365  Int_t nCounterNoRPs = 0; // needed only for shuffling
366  fNumberOfRPsEBE = anEvent->GetNumberOfRPs(); // number of RPs (i.e. number of reference particles)
367  if(fExactNoRPs > 0 && fNumberOfRPsEBE<fExactNoRPs){return;}
368  fNumberOfPOIsEBE = anEvent->GetNumberOfPOIs(); // number of POIs (i.e. number of particles of interest)
369  fReferenceMultiplicityEBE = anEvent->GetReferenceMultiplicity(); // reference multiplicity for current event
370  //Printf("Reference multiplicity (QC): %.1f",fReferenceMultiplicityEBE);
371  Double_t ptEta[2] = {0.,0.}; // 0 = dPt, 1 = dEta
372 
373  // c) Fill the common control histograms and call the method to fill fAvMultiplicity:
374  this->FillCommonControlHistograms(anEvent);
376  if(fStoreControlHistograms){this->FillControlHistograms(anEvent);}
377 
378  // d) Loop over data and calculate e-b-e quantities Q_{n,k}, S_{p,k} and s_{p,k}:
379  Int_t nPrim = anEvent->NumberOfTracks(); // nPrim = total number of primary tracks
380  AliFlowTrackSimple *aftsTrack = NULL;
381  Int_t n = fHarmonic; // shortcut for the harmonic
382  for(Int_t i=0;i<nPrim;i++)
383  {
384  if(fExactNoRPs > 0 && nCounterNoRPs>fExactNoRPs){continue;}
385  aftsTrack=anEvent->GetTrack(i);
386  if(aftsTrack)
387  {
388  if(!(aftsTrack->InRPSelection() || aftsTrack->InPOISelection())){continue;} // safety measure: consider only tracks which are RPs or POIs
389  if(aftsTrack->InRPSelection()) // RP condition:
390  {
391  nCounterNoRPs++;
392  dPhi = aftsTrack->Phi();
393  dPt = aftsTrack->Pt();
394  dEta = aftsTrack->Eta();
395  if(fUsePhiWeights && fPhiWeights && fnBinsPhi) // determine phi weight for this particle:
396  {
397  wPhi = fPhiWeights->GetBinContent(1+(Int_t)(TMath::Floor(dPhi*fnBinsPhi/TMath::TwoPi())));
398  }
399  if(fUsePtWeights && fPtWeights && fnBinsPt) // determine pt weight for this particle:
400  {
401  wPt = fPtWeights->GetBinContent(1+(Int_t)(TMath::Floor((dPt-fPtMin)/fPtBinWidth)));
402  }
403  if(fUseEtaWeights && fEtaWeights && fEtaBinWidth) // determine eta weight for this particle:
404  {
405  wEta = fEtaWeights->GetBinContent(1+(Int_t)(TMath::Floor((dEta-fEtaMin)/fEtaBinWidth)));
406  }
407  // Access track weight:
408  if(fUseTrackWeights)
409  {
410  wTrack = aftsTrack->Weight();
411  }
412  // Calculate Re[Q_{m*n,k}] and Im[Q_{m*n,k}] for this event (m = 1,2,...,12, k = 0,1,...,8):
413  for(Int_t m=0;m<12;m++) // to be improved - hardwired 6
414  {
415  for(Int_t k=0;k<9;k++) // to be improved - hardwired 9
416  {
417  (*fReQ)(m,k)+=pow(wPhi*wPt*wEta*wTrack,k)*TMath::Cos((m+1)*n*dPhi);
418  (*fImQ)(m,k)+=pow(wPhi*wPt*wEta*wTrack,k)*TMath::Sin((m+1)*n*dPhi);
419  }
420  }
421  // Calculate S_{p,k} for this event (Remark: final calculation of S_{p,k} follows after the loop over data bellow):
422  for(Int_t p=0;p<8;p++)
423  {
424  for(Int_t k=0;k<9;k++)
425  {
426  (*fSpk)(p,k)+=pow(wPhi*wPt*wEta*wTrack,k);
427  }
428  }
429  // Differential flow:
431  {
432  ptEta[0] = dPt;
433  ptEta[1] = dEta;
434  // Calculate r_{m*n,k} and s_{p,k} (r_{m,k} is 'p-vector' for RPs):
435  for(Int_t k=0;k<9;k++) // to be improved - hardwired 9
436  {
437  for(Int_t m=0;m<4;m++) // to be improved - hardwired 4
438  {
440  {
441  for(Int_t pe=0;pe<1+(Int_t)fCalculateDiffFlowVsEta;pe++) // pt or eta
442  {
443  fReRPQ1dEBE[0][pe][m][k]->Fill(ptEta[pe],pow(wPhi*wPt*wEta*wTrack,k)*TMath::Cos((m+1.)*n*dPhi),1.);
444  fImRPQ1dEBE[0][pe][m][k]->Fill(ptEta[pe],pow(wPhi*wPt*wEta*wTrack,k)*TMath::Sin((m+1.)*n*dPhi),1.);
445  if(m==0) // s_{p,k} does not depend on index m
446  {
447  fs1dEBE[0][pe][k]->Fill(ptEta[pe],pow(wPhi*wPt*wEta*wTrack,k),1.);
448  } // end of if(m==0) // s_{p,k} does not depend on index m
449  } // end of for(Int_t pe=0;pe<2;pe++) // pt or eta
450  } // end of if(fCalculateDiffFlow)
452  {
453  fReRPQ2dEBE[0][m][k]->Fill(dPt,dEta,pow(wPhi*wPt*wEta*wTrack,k)*TMath::Cos((m+1.)*n*dPhi),1.);
454  fImRPQ2dEBE[0][m][k]->Fill(dPt,dEta,pow(wPhi*wPt*wEta*wTrack,k)*TMath::Sin((m+1.)*n*dPhi),1.);
455  if(m==0) // s_{p,k} does not depend on index m
456  {
457  fs2dEBE[0][k]->Fill(dPt,dEta,pow(wPhi*wPt*wEta*wTrack,k),1.);
458  } // end of if(m==0) // s_{p,k} does not depend on index m
459  } // end of if(fCalculate2DDiffFlow)
460  } // end of for(Int_t m=0;m<4;m++) // to be improved - hardwired 4
461  } // end of for(Int_t k=0;k<9;k++) // to be improved - hardwired 9
462  // Checking if RP particle is also POI particle:
463  if(aftsTrack->InPOISelection())
464  {
465  // Calculate q_{m*n,k} and s_{p,k} ('q-vector' and 's' for RPs && POIs):
466  for(Int_t k=0;k<9;k++) // to be improved - hardwired 9
467  {
468  for(Int_t m=0;m<4;m++) // to be improved - hardwired 4
469  {
471  {
472  for(Int_t pe=0;pe<1+(Int_t)fCalculateDiffFlowVsEta;pe++) // pt or eta
473  {
474  fReRPQ1dEBE[2][pe][m][k]->Fill(ptEta[pe],pow(wPhi*wPt*wEta*wTrack,k)*TMath::Cos((m+1.)*n*dPhi),1.);
475  fImRPQ1dEBE[2][pe][m][k]->Fill(ptEta[pe],pow(wPhi*wPt*wEta*wTrack,k)*TMath::Sin((m+1.)*n*dPhi),1.);
476  if(m==0) // s_{p,k} does not depend on index m
477  {
478  fs1dEBE[2][pe][k]->Fill(ptEta[pe],pow(wPhi*wPt*wEta*wTrack,k),1.);
479  } // end of if(m==0) // s_{p,k} does not depend on index m
480  } // end of for(Int_t pe=0;pe<2;pe++) // pt or eta
481  } // end of if(fCalculateDiffFlow)
483  {
484  fReRPQ2dEBE[2][m][k]->Fill(dPt,dEta,pow(wPhi*wPt*wEta*wTrack,k)*TMath::Cos((m+1.)*n*dPhi),1.);
485  fImRPQ2dEBE[2][m][k]->Fill(dPt,dEta,pow(wPhi*wPt*wEta*wTrack,k)*TMath::Sin((m+1.)*n*dPhi),1.);
486  if(m==0) // s_{p,k} does not depend on index m
487  {
488  fs2dEBE[2][k]->Fill(dPt,dEta,pow(wPhi*wPt*wEta*wTrack,k),1.);
489  } // end of if(m==0) // s_{p,k} does not depend on index m
490  } // end of if(fCalculate2DDiffFlow)
491  } // end of for(Int_t m=0;m<4;m++) // to be improved - hardwired 4
492  } // end of for(Int_t k=0;k<9;k++) // to be improved - hardwired 9
493  } // end of if(aftsTrack->InPOISelection())
494  } // end of if(fCalculateDiffFlow || fCalculate2DDiffFlow)
495  } // end of if(pTrack->InRPSelection())
496  if(aftsTrack->InPOISelection())
497  {
498  dPhi = aftsTrack->Phi();
499  dPt = aftsTrack->Pt();
500  dEta = aftsTrack->Eta();
501  wPhi = 1.;
502  wPt = 1.;
503  wEta = 1.;
504  wTrack = 1.;
505  if(fUsePhiWeights && fPhiWeights && fnBinsPhi && aftsTrack->InRPSelection()) // determine phi weight for POI && RP particle:
506  {
507  wPhi = fPhiWeights->GetBinContent(1+(Int_t)(TMath::Floor(dPhi*fnBinsPhi/TMath::TwoPi())));
508  }
509  if(fUsePtWeights && fPtWeights && fnBinsPt && aftsTrack->InRPSelection()) // determine pt weight for POI && RP particle:
510  {
511  wPt = fPtWeights->GetBinContent(1+(Int_t)(TMath::Floor((dPt-fPtMin)/fPtBinWidth)));
512  }
513  if(fUseEtaWeights && fEtaWeights && fEtaBinWidth && aftsTrack->InRPSelection()) // determine eta weight for POI && RP particle:
514  {
515  wEta = fEtaWeights->GetBinContent(1+(Int_t)(TMath::Floor((dEta-fEtaMin)/fEtaBinWidth)));
516  }
517  // Access track weight for POI && RP particle:
518  if(aftsTrack->InRPSelection() && fUseTrackWeights)
519  {
520  wTrack = aftsTrack->Weight();
521  }
522  ptEta[0] = dPt;
523  ptEta[1] = dEta;
524  // Calculate p_{m*n,k} ('p-vector' for POIs):
525  for(Int_t k=0;k<9;k++) // to be improved - hardwired 9
526  {
527  for(Int_t m=0;m<4;m++) // to be improved - hardwired 4
528  {
530  {
531  for(Int_t pe=0;pe<1+(Int_t)fCalculateDiffFlowVsEta;pe++) // pt or eta
532  {
533  fReRPQ1dEBE[1][pe][m][k]->Fill(ptEta[pe],pow(wPhi*wPt*wEta*wTrack,k)*TMath::Cos((m+1.)*n*dPhi),1.);
534  fImRPQ1dEBE[1][pe][m][k]->Fill(ptEta[pe],pow(wPhi*wPt*wEta*wTrack,k)*TMath::Sin((m+1.)*n*dPhi),1.);
535  } // end of for(Int_t pe=0;pe<2;pe++) // pt or eta
536  } // end of if(fCalculateDiffFlow)
538  {
539  fReRPQ2dEBE[1][m][k]->Fill(dPt,dEta,pow(wPhi*wPt*wEta*wTrack,k)*TMath::Cos((m+1.)*n*dPhi),1.);
540  fImRPQ2dEBE[1][m][k]->Fill(dPt,dEta,pow(wPhi*wPt*wEta*wTrack,k)*TMath::Sin((m+1.)*n*dPhi),1.);
541  } // end of if(fCalculate2DDiffFlow)
542  } // end of for(Int_t m=0;m<4;m++) // to be improved - hardwired 4
543  } // end of for(Int_t k=0;k<9;k++) // to be improved - hardwired 9
544  } // end of if(pTrack->InPOISelection())
545  } else // to if(aftsTrack)
546  {
547  printf("\n WARNING (QC): No particle (i.e. aftsTrack is a NULL pointer in AFAWQC::Make())!!!!\n\n");
548  }
549  } // end of for(Int_t i=0;i<nPrim;i++)
550 
551  // e) Calculate the final expressions for S_{p,k} and s_{p,k} (important !!!!):
552  for(Int_t p=0;p<8;p++)
553  {
554  for(Int_t k=0;k<9;k++)
555  {
556  (*fSpk)(p,k)=pow((*fSpk)(p,k),p+1);
557  // ... for the time being s_{p,k} dosn't need higher powers, so no need to finalize it here ...
558  } // end of for(Int_t k=0;k<9;k++)
559  } // end of for(Int_t p=0;p<8;p++)
560 
561  // f) Call the methods which calculate correlations for reference flow:
563  {
565  {
566  if(fNumberOfRPsEBE>1){this->CalculateIntFlowCorrelations();} // without using particle weights
567  } else // to if(!(fUsePhiWeights||fUsePtWeights||fUseEtaWeights||fUseTrackWeights))
568  {
569  if(fNumberOfRPsEBE>1){this->CalculateIntFlowCorrelationsUsingParticleWeights();} // with using particle weights
570  }
571  // Whether or not using particle weights the following is calculated in the same way:
575  // Non-isotropic terms:
577  {
580  } else // to if(!(fUsePhiWeights||fUsePtWeights||fUseEtaWeights||fUseTrackWeights))
581  {
584  }
585  // Whether or not using particle weights the following is calculated in the same way:
589  // Mixed harmonics:
591  } // end of if(!fEvaluateIntFlowNestedLoops)
592 
593  // g) Call the methods which calculate correlations for differential flow:
595  {
597  {
598  // Without using particle weights:
599  this->CalculateDiffFlowCorrelations("RP","Pt");
601  this->CalculateDiffFlowCorrelations("POI","Pt");
603  // Non-isotropic terms:
612  } else // to if(!(fUsePhiWeights||fUsePtWeights||fUseEtaWeights||fUseTrackWeights))
613  {
614  // With using particle weights:
619  // Non-isotropic terms:
628  }
629  // Whether or not using particle weights the following is calculated in the same way:
632  this->CalculateDiffFlowProductOfCorrelations("POI","Pt");
634  this->CalculateDiffFlowSumOfEventWeights("RP","Pt");
636  this->CalculateDiffFlowSumOfEventWeights("POI","Pt");
642  } // end of if(!fEvaluateDiffFlowNestedLoops && fCalculateDiffFlow)
643 
644  // h) Call the methods which calculate correlations for 2D differential flow:
646  {
648  {
649  // Without using particle weights:
650  this->Calculate2DDiffFlowCorrelations("RP");
651  this->Calculate2DDiffFlowCorrelations("POI");
652  // Non-isotropic terms:
653  // ... to be ctd ...
654  } else // to if(!(fUsePhiWeights||fUsePtWeights||fUseEtaWeights||fUseTrackWeights))
655  {
656  // With using particle weights:
657  // ... to be ctd ...
658  // Non-isotropic terms:
659  // ... to be ctd ...
660  }
661  // Whether or not using particle weights the following is calculated in the same way:
662  // ... to be ctd ...
663  } // end of if(!fEvaluateDiffFlowNestedLoops && fCalculate2DDiffFlow)
664 
665  // i) Call the methods which calculate other differential correlators:
667  {
669  {
670  // Without using particle weights:
671  this->CalculateOtherDiffCorrelators("RP","Pt");
673  this->CalculateOtherDiffCorrelators("POI","Pt");
675  } else // to if(!(fUsePhiWeights||fUsePtWeights||fUseEtaWeights||fUseTrackWeights))
676  {
677  // With using particle weights:
678  // ... to be ctd ...
679  }
680  // Whether or not using particle weights the following is calculated in the same way:
681  // ... to be ctd ...
682  } // end of if(!fEvaluateDiffFlowNestedLoops)
683 
684  // j) Distributions of correlations:
686 
687  // k) Store phi distribution for one event to illustrate flow:
689 
690  // l) Cross-check with nested loops correlators for reference flow:
692 
693  // m) Cross-check with nested loops correlators for differential flow:
695 
696  // n) Reset all event-by-event quantities (very important !!!!):
698 
699 } // end of AliFlowAnalysisWithQCumulants::Make(AliFlowEventSimple* anEvent)
700 
701 //=======================================================================================================================
702 
704 {
705  // Calculate the final results.
706 
707  // a) Check all pointers used in this method;
708  // b) Access the constants;
709  // c) Access the flags;
710  // d) Calculate reference cumulants (not corrected for detector effects);
711  // e) Correct reference cumulants for detector effects;
712  // f) Calculate reference flow;
713  // g) Store results for reference flow in AliFlowCommonHistResults and print them on the screen;
714  // h) Calculate the final results for differential flow (without/with weights);
715  // i) Correct the results for differential flow (without/with weights) for effects of non-uniform acceptance (NUA);
716  // j) Calculate the final results for integrated flow (RP/POI) and store in AliFlowCommonHistResults;
717  // k) Store results for differential flow in AliFlowCommonHistResults;
718  // l) Print the final results for integrated flow (RP/POI) on the screen;
719  // m) Cross-checking: Results from Q-vectors vs results from nested loops;
720  // i) Calculate cumulants for mixed harmonics;
721  // j) Calculate cumulants for bootstrap.
722 
723  // a) Check all pointers used in this method:
725 
726  // b) Access the constants:
727  this->CommonConstants("Finish");
728 
729  if(fCommonHists && fCommonHists->GetHarmonic()) // to be improved (moved somewhere else)
730  {
731  fHarmonic = (Int_t)(fCommonHists->GetHarmonic())->GetBinContent(1);
732  }
733 
734  // c) Access the flags: // tbi (implement a method for this? should I store again the flags because they can get modified with redoFinish?)
735  fUsePhiWeights = (Bool_t)fUseParticleWeights->GetBinContent(1);
736  fUsePtWeights = (Bool_t)fUseParticleWeights->GetBinContent(2);
737  fUseEtaWeights = (Bool_t)fUseParticleWeights->GetBinContent(3);
738  fUseTrackWeights = (Bool_t)fUseParticleWeights->GetBinContent(4);
739  fApplyCorrectionForNUA = (Bool_t)fIntFlowFlags->GetBinContent(3);
740  fPrintFinalResults[0] = (Bool_t)fIntFlowFlags->GetBinContent(4);
741  fPrintFinalResults[1] = (Bool_t)fIntFlowFlags->GetBinContent(5);
742  fPrintFinalResults[2] = (Bool_t)fIntFlowFlags->GetBinContent(6);
743  fPrintFinalResults[3] = (Bool_t)fIntFlowFlags->GetBinContent(7);
744  fApplyCorrectionForNUAVsM = (Bool_t)fIntFlowFlags->GetBinContent(8);
745  fPropagateErrorAlsoFromNIT = (Bool_t)fIntFlowFlags->GetBinContent(9);
746  fCalculateCumulantsVsM = (Bool_t)fIntFlowFlags->GetBinContent(10);
747  fMinimumBiasReferenceFlow = (Bool_t)fIntFlowFlags->GetBinContent(11);
748  fForgetAboutCovariances = (Bool_t)fIntFlowFlags->GetBinContent(12);
750  fFillMultipleControlHistograms = (Bool_t)fIntFlowFlags->GetBinContent(14);
751  fCalculateAllCorrelationsVsM = (Bool_t)fIntFlowFlags->GetBinContent(15);
752  fUse2DHistograms = (Bool_t)fIntFlowFlags->GetBinContent(18);
753  fFillProfilesVsMUsingWeights = (Bool_t)fIntFlowFlags->GetBinContent(19);
754  fUseQvectorTerms = (Bool_t)fIntFlowFlags->GetBinContent(20);
755  fMaxCommonResultsHistogram = (Bool_t)fIntFlowFlags->GetBinContent(21);
758  fCrossCheckInPtBinNo = (Int_t)fEvaluateNestedLoops->GetBinContent(3);
759  fCrossCheckInEtaBinNo = (Int_t)fEvaluateNestedLoops->GetBinContent(4);
761  //fHarmonic = (Int_t)fMixedHarmonicsFlags->GetBinContent(2); // TBI should I add inpdependent generic harmonic here?
763  fUseBootstrap = (Bool_t)fBootstrapFlags->GetBinContent(1);
764  fUseBootstrapVsM = (Bool_t)fBootstrapFlags->GetBinContent(2);
765  fnSubsamples = (Int_t)fBootstrapFlags->GetBinContent(3);
766 
767  // d) Calculate reference cumulants (not corrected for detector effects):
771 
772  // e) Correct reference cumulants for detector effects:
776 
777  // f) Calculate reference flow:
778  this->CalculateReferenceFlow();
779 
780  // g) Store results for reference flow in AliFlowCommonHistResults and print them on the screen:
784 
785  // h) Calculate the final results for differential flow (without/with weights):
787  {
788  this->FinalizeReducedCorrelations("RP","Pt");
790  this->FinalizeReducedCorrelations("POI","Pt");
792  this->CalculateDiffFlowCovariances("RP","Pt");
794  this->CalculateDiffFlowCovariances("POI","Pt");
796  this->CalculateDiffFlowCumulants("RP","Pt");
798  this->CalculateDiffFlowCumulants("POI","Pt");
799  if(fCalculateDiffFlowVsEta){this->CalculateDiffFlowCumulants("POI","Eta");}
800  this->CalculateDiffFlow("RP","Pt");
801  if(fCalculateDiffFlowVsEta){this->CalculateDiffFlow("RP","Eta");}
802  this->CalculateDiffFlow("POI","Pt");
803  if(fCalculateDiffFlowVsEta){this->CalculateDiffFlow("POI","Eta");}
804  } // if(fCalculateDiffFlow)
805 
806  // i) Correct the results for differential flow (without/with weights) for effects of non-uniform acceptance (NUA):
808  {
809  this->FinalizeCorrectionTermsForNUADiffFlow("RP","Pt");
811  this->FinalizeCorrectionTermsForNUADiffFlow("POI","Pt");
818  {
819  this->CalculateDiffFlowCorrectedForNUA("RP","Pt");
821  this->CalculateDiffFlowCorrectedForNUA("POI","Pt");
823  }
824  } // end of if(fCalculateDiffFlow && fApplyCorrectionForNUA)
825 
826  // i) Calcualate final results for 2D differential flow:
828  {
829  this->Calculate2DDiffFlowCumulants("RP");
830  this->Calculate2DDiffFlowCumulants("POI");
831  this->Calculate2DDiffFlow("RP");
832  this->Calculate2DDiffFlow("POI");
833  } // end of if(fCalculate2DDiffFlow)
834 
835  // j) Calculate the final results for integrated flow (RP/POI) and store in AliFlowCommonHistResults:
837  {
840  }
841 
842  // k) Store results for differential flow in AliFlowCommonHistResults:
844  {
845  this->FillCommonHistResultsDiffFlow("RP");
846  this->FillCommonHistResultsDiffFlow("POI");
847  }
848 
849  // l) Print the final results for integrated flow (RP/POI) on the screen:
852 
853  // m) Cross-checking: Results from Q-vectors vs results from nested loops:
854  // m1) Reference flow:
856  {
861  } // end of if(fEvaluateIntFlowNestedLoops)
862  // m2) Differential flow:
864  {
865  // Correlations:
867  this->CrossCheckDiffFlowCorrelations("RP","Pt");
869  this->CrossCheckDiffFlowCorrelations("POI","Pt");
871  // Correction terms for non-uniform acceptance:
872  this->CrossCheckDiffFlowCorrectionTermsForNUA("RP","Pt");
874  this->CrossCheckDiffFlowCorrectionTermsForNUA("POI","Pt");
876  // Other differential correlators:
877  this->CrossCheckOtherDiffCorrelators("RP","Pt");
879  this->CrossCheckOtherDiffCorrelators("POI","Pt");
881  } // end of if(fEvaluateDiffFlowNestedLoops)
882 
883  // i) Calculate cumulants for mixed harmonics:
885 
886  // j) Calculate cumulants for bootstrap:
888 
889 } // end of AliFlowAnalysisWithQCumulants::Finish()
890 
891 //=======================================================================================================================
892 
894 {
895  // Evaluate all correlators for reference flow with nested loops.
896 
897  Int_t nPrim = anEvent->NumberOfTracks(); // number of primaries
898  if(nPrim>0 && nPrim<=fMaxAllowedMultiplicity) // by default fMaxAllowedMultiplicity = 10
899  {
900  // Without using particle weights:
902  {
903  // Correlations:
904  this->CalculateIntFlowCorrelations(); // from Q-vectors
905  this->EvaluateIntFlowCorrelationsWithNestedLoops(anEvent); // from nested loops (TBI: do I have to pass here anEvent or not?)
906  // Correction for non-uniform acceptance:
907  this->CalculateIntFlowCorrectionsForNUASinTerms(); // from Q-vectors (sin terms)
908  this->CalculateIntFlowCorrectionsForNUACosTerms(); // from Q-vectors (cos terms)
909  this->EvaluateIntFlowCorrectionsForNUAWithNestedLoops(anEvent); // from nested loops (both sin and cos terms)
910  // Mixed harmonics:
912  {
913  this->CalculateMixedHarmonics(); // from Q-vectors
914  this->EvaluateMixedHarmonicsWithNestedLoops(anEvent); // from nested loops (TBI: do I have to pass here anEvent or not?)
915  } // end of if(fCalculateMixedHarmonics)
916  }
917  // Using particle weights:
919  {
920  // Correlations
921  this->CalculateIntFlowCorrelationsUsingParticleWeights(); // from Q-vectors
922  this->EvaluateIntFlowCorrelationsWithNestedLoopsUsingParticleWeights(anEvent); // from nested loops (to be improved: do I have to pass here anEvent or not?)
923  // Correction for non-uniform acceptance:
924  this->CalculateIntFlowCorrectionsForNUASinTermsUsingParticleWeights(); // from Q-vectors (sin terms)
925  this->CalculateIntFlowCorrectionsForNUACosTermsUsingParticleWeights(); // from Q-vectors (cos terms)
926  this->EvaluateIntFlowCorrectionsForNUAWithNestedLoopsUsingParticleWeights(anEvent); // from nested loops (both sin and cos terms)
927  }
928  } else if(nPrim>fMaxAllowedMultiplicity) // to if(nPrim>0 && nPrim<=fMaxAllowedMultiplicity)
929  {
930  cout<<endl;
931  cout<<"Skipping the event because multiplicity is "<<nPrim<<". Too high to evaluate nested loops!"<<endl;
932  } else
933  {
934  cout<<endl;
935  cout<<"Skipping the event because multiplicity is "<<nPrim<<"."<<endl;
936  }
937 
938 } // end of void AliFlowAnalysisWithQCumulants::EvaluateIntFlowNestedLoops(AliFlowEventSimple* anEvent)
939 
940 //=======================================================================================================================
941 
943 {
944  // Evalauted all correlators for differential flow with nested loops.
945 
946  if(!fCalculateDiffFlow){return;}
947 
948  Int_t nPrim = anEvent->NumberOfTracks(); // number of primaries
949  if(nPrim>0 && nPrim<=fMaxAllowedMultiplicity) // by default fMaxAllowedMultiplicity = 10
950  {
951  // Without using particle weights:
953  {
954  // 1.) Reduced correlations:
955  // Q-vectors:
956  this->CalculateDiffFlowCorrelations("RP","Pt");
957  this->CalculateDiffFlowCorrelations("RP","Eta");
958  this->CalculateDiffFlowCorrelations("POI","Pt");
959  this->CalculateDiffFlowCorrelations("POI","Eta");
960  // Nested loops:
961  this->EvaluateDiffFlowCorrelationsWithNestedLoops(anEvent,"RP","Pt");
962  this->EvaluateDiffFlowCorrelationsWithNestedLoops(anEvent,"RP","Eta");
963  this->EvaluateDiffFlowCorrelationsWithNestedLoops(anEvent,"POI","Pt");
964  this->EvaluateDiffFlowCorrelationsWithNestedLoops(anEvent,"POI","Eta");
965  // 2.) Reduced corrections for non-uniform acceptance:
966  // Q-vectors:
975  // Nested loops:
978  this->EvaluateDiffFlowCorrectionTermsForNUAWithNestedLoops(anEvent,"POI","Pt");
979  this->EvaluateDiffFlowCorrectionTermsForNUAWithNestedLoops(anEvent,"POI","Eta");
980  // 3.) Other differential correlators:
981  // Q-vectors:
982  this->CalculateOtherDiffCorrelators("RP","Pt");
983  this->CalculateOtherDiffCorrelators("RP","Eta");
984  this->CalculateOtherDiffCorrelators("POI","Pt");
985  this->CalculateOtherDiffCorrelators("POI","Eta");
986  // Nested loops:
987  this->EvaluateOtherDiffCorrelatorsWithNestedLoops(anEvent,"RP","Pt");
988  this->EvaluateOtherDiffCorrelatorsWithNestedLoops(anEvent,"RP","Eta");
989  this->EvaluateOtherDiffCorrelatorsWithNestedLoops(anEvent,"POI","Pt");
990  this->EvaluateOtherDiffCorrelatorsWithNestedLoops(anEvent,"POI","Eta");
991  } // end of if(!(fUsePhiWeights||fUsePtWeights||fUseEtaWeights||fUseTrackWeights))
992  // Using particle weights:
994  {
1015  } // end of if(fUsePhiWeights||fUsePtWeights||fUseEtaWeights||fUseTrackWeights)
1016  } // end of if(nPrim>0 && nPrim<=fMaxAllowedMultiplicity) // by default fMaxAllowedMultiplicity = 10
1017 
1018 } // end of void AliFlowAnalysisWithQCumulants::EvaluateDiffFlowNestedLoops(AliFlowEventSimple* anEvent)
1019 
1020 //=======================================================================================================================
1021 
1023 {
1024  // Calculate correction terms for non-uniform acceptance of the detector for reference flow (cos terms).
1025 
1026  // multiplicity:
1027  Double_t dMult = (*fSpk)(0,0);
1028 
1029  // real and imaginary parts of non-weighted Q-vectors evaluated in harmonics n, 2n, 3n and 4n:
1030  Double_t dReQ1n = (*fReQ)(0,0);
1031  Double_t dReQ2n = (*fReQ)(1,0);
1032  //Double_t dReQ3n = (*fReQ)(2,0);
1033  //Double_t dReQ4n = (*fReQ)(3,0);
1034  Double_t dImQ1n = (*fImQ)(0,0);
1035  Double_t dImQ2n = (*fImQ)(1,0);
1036  //Double_t dImQ3n = (*fImQ)(2,0);
1037  //Double_t dImQ4n = (*fImQ)(3,0);
1038 
1039  // Multiplicity bin of an event (relevant for all histos vs M):
1040  Double_t dMultiplicityBin = 0.;
1042  {
1043  dMultiplicityBin = fNumberOfRPsEBE+0.5;
1045  {
1046  dMultiplicityBin = fReferenceMultiplicityEBE+0.5;
1048  {
1049  dMultiplicityBin = fNumberOfPOIsEBE+0.5;
1050  }
1051 
1052  // *************************************************************
1053  // **** corrections for non-uniform acceptance (cos terms): ****
1054  // *************************************************************
1055  //
1056  // Remark 1: corrections for non-uniform acceptance (cos terms) calculated with non-weighted Q-vectors
1057  // are stored in 1D profile fQCorrectionsCos.
1058  // Remark 2: binning of fIntFlowCorrectionTermsForNUAPro[1] is organized as follows:
1059  // --------------------------------------------------------------------------------------------------------------------
1060  // 1st bin: <<cos(n*(phi1))>> = cosP1n
1061  // 2nd bin: <<cos(n*(phi1+phi2))>> = cosP1nP1n
1062  // 3rd bin: <<cos(n*(phi1-phi2-phi3))>> = cosP1nM1nM1n
1063  // 4th bin: <<cos(n*(2phi1-phi2))>> = cosP2nM1n
1064  // --------------------------------------------------------------------------------------------------------------------
1065 
1066  // 1-particle:
1067  Double_t cosP1n = 0.; // <<cos(n*(phi1))>>
1068 
1069  if(dMult>0)
1070  {
1071  cosP1n = dReQ1n/dMult;
1072 
1073  // average non-weighted 1-particle correction (cos terms) for non-uniform acceptance for single event:
1074  fIntFlowCorrectionTermsForNUAEBE[1]->SetBinContent(1,cosP1n);
1075  // event weights for NUA terms:
1076  fIntFlowEventWeightForCorrectionTermsForNUAEBE[1]->SetBinContent(1,dMult);
1077 
1078  // final average non-weighted 1-particle correction (cos terms) for non-uniform acceptance for all events:
1079  fIntFlowCorrectionTermsForNUAPro[1]->Fill(0.5,cosP1n,dMult);
1080  if(fCalculateCumulantsVsM){fIntFlowCorrectionTermsForNUAVsMPro[1][0]->Fill(dMultiplicityBin,cosP1n,dMult);}
1081  }
1082 
1083  // 2-particle:
1084  Double_t cosP1nP1n = 0.; // <<cos(n*(phi1+phi2))>>
1085  Double_t cosP2nM1n = 0.; // <<cos(n*(2phi1-phi2))>>
1086 
1087  if(dMult>1)
1088  {
1089  cosP1nP1n = (pow(dReQ1n,2)-pow(dImQ1n,2)-dReQ2n)/(dMult*(dMult-1));
1090  cosP2nM1n = (dReQ2n*dReQ1n+dImQ2n*dImQ1n-dReQ1n)/(dMult*(dMult-1));
1091 
1092  // average non-weighted 2-particle correction (cos terms) for non-uniform acceptance for single event:
1093  fIntFlowCorrectionTermsForNUAEBE[1]->SetBinContent(2,cosP1nP1n);
1094  fIntFlowCorrectionTermsForNUAEBE[1]->SetBinContent(4,cosP2nM1n);
1095  // event weights for NUA terms:
1096  fIntFlowEventWeightForCorrectionTermsForNUAEBE[1]->SetBinContent(2,dMult*(dMult-1));
1097  fIntFlowEventWeightForCorrectionTermsForNUAEBE[1]->SetBinContent(4,dMult*(dMult-1));
1098 
1099  // final average non-weighted 2-particle correction (cos terms) for non-uniform acceptance for all events:
1100  fIntFlowCorrectionTermsForNUAPro[1]->Fill(1.5,cosP1nP1n,dMult*(dMult-1));
1101  fIntFlowCorrectionTermsForNUAPro[1]->Fill(3.5,cosP2nM1n,dMult*(dMult-1));
1103  {
1104  fIntFlowCorrectionTermsForNUAVsMPro[1][1]->Fill(dMultiplicityBin,cosP1nP1n,dMult*(dMult-1));
1105  fIntFlowCorrectionTermsForNUAVsMPro[1][3]->Fill(dMultiplicityBin,cosP2nM1n,dMult*(dMult-1));
1106  }
1107  }
1108 
1109  // 3-particle:
1110  Double_t cosP1nM1nM1n = 0.; // <<cos(n*(phi1-phi2-phi3))>>
1111 
1112  if(dMult>2)
1113  {
1114  cosP1nM1nM1n = (dReQ1n*(pow(dReQ1n,2)+pow(dImQ1n,2))-dReQ1n*dReQ2n-dImQ1n*dImQ2n-2.*(dMult-1)*dReQ1n)
1115  / (dMult*(dMult-1)*(dMult-2));
1116 
1117  // average non-weighted 3-particle correction (cos terms) for non-uniform acceptance for single event:
1118  fIntFlowCorrectionTermsForNUAEBE[1]->SetBinContent(3,cosP1nM1nM1n);
1119  // event weights for NUA terms:
1120  fIntFlowEventWeightForCorrectionTermsForNUAEBE[1]->SetBinContent(3,dMult*(dMult-1)*(dMult-2));
1121 
1122  // final average non-weighted 3-particle correction (cos terms) for non-uniform acceptance for all events:
1123  fIntFlowCorrectionTermsForNUAPro[1]->Fill(2.5,cosP1nM1nM1n,dMult*(dMult-1)*(dMult-2));
1124  if(fCalculateCumulantsVsM){fIntFlowCorrectionTermsForNUAVsMPro[1][2]->Fill(dMultiplicityBin,cosP1nM1nM1n,dMult*(dMult-1)*(dMult-2));}
1125  }
1126 
1127 } // end of AliFlowAnalysisWithQCumulants::CalculateIntFlowCorrectionsForNUACosTerms()
1128 
1129 //=======================================================================================================================
1130 
1132 {
1133  // calculate corrections for non-uniform acceptance of the detector for no-name integrated flow (sin terms)
1134 
1135  // multiplicity:
1136  Double_t dMult = (*fSpk)(0,0);
1137 
1138  // real and imaginary parts of non-weighted Q-vectors evaluated in harmonics n, 2n, 3n and 4n:
1139  Double_t dReQ1n = (*fReQ)(0,0);
1140  Double_t dReQ2n = (*fReQ)(1,0);
1141  //Double_t dReQ3n = (*fReQ)(2,0);
1142  //Double_t dReQ4n = (*fReQ)(3,0);
1143  Double_t dImQ1n = (*fImQ)(0,0);
1144  Double_t dImQ2n = (*fImQ)(1,0);
1145  //Double_t dImQ3n = (*fImQ)(2,0);
1146  //Double_t dImQ4n = (*fImQ)(3,0);
1147 
1148  // Multiplicity bin of an event (relevant for all histos vs M):
1149  Double_t dMultiplicityBin = 0.;
1151  {
1152  dMultiplicityBin = fNumberOfRPsEBE+0.5;
1154  {
1155  dMultiplicityBin = fReferenceMultiplicityEBE+0.5;
1157  {
1158  dMultiplicityBin = fNumberOfPOIsEBE+0.5;
1159  }
1160 
1161  // *************************************************************
1162  // **** corrections for non-uniform acceptance (sin terms): ****
1163  // *************************************************************
1164  //
1165  // Remark 1: corrections for non-uniform acceptance (sin terms) calculated with non-weighted Q-vectors
1166  // are stored in 1D profile fQCorrectionsSin.
1167  // Remark 2: binning of fIntFlowCorrectionTermsForNUAPro[0] is organized as follows:
1168  // --------------------------------------------------------------------------------------------------------------------
1169  // 1st bin: <<sin(n*(phi1))>> = sinP1n
1170  // 2nd bin: <<sin(n*(phi1+phi2))>> = sinP1nP1n
1171  // 3rd bin: <<sin(n*(phi1-phi2-phi3))>> = sinP1nM1nM1n
1172  // 4th bin: <<sin(n*(2phi1-phi2))>> = sinP2nM1n
1173  // --------------------------------------------------------------------------------------------------------------------
1174 
1175  // 1-particle:
1176  Double_t sinP1n = 0.; // <sin(n*(phi1))>
1177 
1178  if(dMult>0)
1179  {
1180  sinP1n = dImQ1n/dMult;
1181 
1182  // average non-weighted 1-particle correction (sin terms) for non-uniform acceptance for single event:
1183  fIntFlowCorrectionTermsForNUAEBE[0]->SetBinContent(1,sinP1n);
1184  // event weights for NUA terms:
1185  fIntFlowEventWeightForCorrectionTermsForNUAEBE[0]->SetBinContent(1,dMult);
1186 
1187  // final average non-weighted 1-particle correction (sin terms) for non-uniform acceptance for all events:
1188  fIntFlowCorrectionTermsForNUAPro[0]->Fill(0.5,sinP1n,dMult);
1189  if(fCalculateCumulantsVsM){fIntFlowCorrectionTermsForNUAVsMPro[0][0]->Fill(dMultiplicityBin,sinP1n,dMult);}
1190  }
1191 
1192  // 2-particle:
1193  Double_t sinP1nP1n = 0.; // <<sin(n*(phi1+phi2))>>
1194  Double_t sinP2nM1n = 0.; // <<sin(n*(2phi1-phi2))>>
1195  if(dMult>1)
1196  {
1197  sinP1nP1n = (2.*dReQ1n*dImQ1n-dImQ2n)/(dMult*(dMult-1));
1198  sinP2nM1n = (dImQ2n*dReQ1n-dReQ2n*dImQ1n-dImQ1n)/(dMult*(dMult-1));
1199 
1200  // average non-weighted 2-particle correction (sin terms) for non-uniform acceptance for single event:
1201  fIntFlowCorrectionTermsForNUAEBE[0]->SetBinContent(2,sinP1nP1n);
1202  fIntFlowCorrectionTermsForNUAEBE[0]->SetBinContent(4,sinP2nM1n);
1203  // event weights for NUA terms:
1204  fIntFlowEventWeightForCorrectionTermsForNUAEBE[0]->SetBinContent(2,dMult*(dMult-1));
1205  fIntFlowEventWeightForCorrectionTermsForNUAEBE[0]->SetBinContent(4,dMult*(dMult-1));
1206 
1207  // final average non-weighted 1-particle correction (sin terms) for non-uniform acceptance for all events:
1208  fIntFlowCorrectionTermsForNUAPro[0]->Fill(1.5,sinP1nP1n,dMult*(dMult-1));
1209  fIntFlowCorrectionTermsForNUAPro[0]->Fill(3.5,sinP2nM1n,dMult*(dMult-1));
1211  {
1212  fIntFlowCorrectionTermsForNUAVsMPro[0][1]->Fill(dMultiplicityBin,sinP1nP1n,dMult*(dMult-1));
1213  fIntFlowCorrectionTermsForNUAVsMPro[0][3]->Fill(dMultiplicityBin,sinP2nM1n,dMult*(dMult-1));
1214  }
1215  }
1216 
1217  // 3-particle:
1218  Double_t sinP1nM1nM1n = 0.; // <<sin(n*(phi1-phi2-phi3))>>
1219 
1220  if(dMult>2)
1221  {
1222  sinP1nM1nM1n = (-dImQ1n*(pow(dReQ1n,2)+pow(dImQ1n,2))+dReQ1n*dImQ2n-dImQ1n*dReQ2n+2.*(dMult-1)*dImQ1n)
1223  / (dMult*(dMult-1)*(dMult-2));
1224 
1225  // average non-weighted 3-particle correction (sin terms) for non-uniform acceptance for single event:
1226  fIntFlowCorrectionTermsForNUAEBE[0]->SetBinContent(3,sinP1nM1nM1n);
1227  // event weights for NUA terms:
1228  fIntFlowEventWeightForCorrectionTermsForNUAEBE[0]->SetBinContent(3,dMult*(dMult-1)*(dMult-2));
1229 
1230  // final average non-weighted 3-particle correction (sin terms) for non-uniform acceptance for all events:
1231  fIntFlowCorrectionTermsForNUAPro[0]->Fill(2.5,sinP1nM1nM1n,dMult*(dMult-1)*(dMult-2));
1232  if(fCalculateCumulantsVsM){fIntFlowCorrectionTermsForNUAVsMPro[0][2]->Fill(dMultiplicityBin,sinP1nM1nM1n,dMult*(dMult-1)*(dMult-2));}
1233  }
1234 
1235 } // end of AliFlowAnalysisWithQCumulants::CalculateIntFlowCorrectionsForNUASinTerms()
1236 
1237 //=======================================================================================================================
1238 
1240 {
1241  // a) Get pointers for common control and common result histograms;
1242  // b) Get pointers for histograms holding particle weights;
1243  // c) Get pointers for reference flow histograms;
1244  // d) Get pointers for differential flow histograms;
1245  // e) Get pointers for 2D differential flow histograms;
1246  // f) Get pointers for other differential correlators;
1247  // g) Get pointers for mixed harmonics histograms;
1248  // h) Get pointers for nested loops' histograms;
1249  // i) Get pointers for control histograms;
1250  // j) Get pointers for bootstrap.
1251 
1252  if(outputListHistos)
1253  {
1254  this->SetHistList(outputListHistos);
1255  if(!fHistList)
1256  {
1257  printf("\n WARNING (QC): fHistList is NULL in AFAWQC::GOH() !!!!\n\n");
1258  exit(0);
1259  }
1269  this->GetPointersForBootstrap();
1270  } else
1271  {
1272  printf("\n WARNING (QC): outputListHistos is NULL in AFAWQC::GOH() !!!!\n\n");
1273  exit(0);
1274  }
1275 
1276 } // end of void AliFlowAnalysisWithQCumulants::GetOutputHistograms(TList *outputListHistos)
1277 
1278 //=======================================================================================================================
1279 
1280 TProfile* AliFlowAnalysisWithQCumulants::MakePtProjection(TProfile2D *profilePtEta) const
1281 {
1282  // project 2D profile onto pt axis to get 1D profile
1283 
1284  Int_t nBinsPt = profilePtEta->GetNbinsX();
1285  Double_t dPtMin = (profilePtEta->GetXaxis())->GetXmin();
1286  Double_t dPtMax = (profilePtEta->GetXaxis())->GetXmax();
1287 
1288  Int_t nBinsEta = profilePtEta->GetNbinsY();
1289 
1290  TProfile *profilePt = new TProfile("","",nBinsPt,dPtMin,dPtMax);
1291 
1292  for(Int_t p=1;p<=nBinsPt;p++)
1293  {
1294  Double_t contentPt = 0.;
1295  Double_t entryPt = 0.;
1296  Double_t spreadPt = 0.;
1297  Double_t sum1 = 0.;
1298  Double_t sum2 = 0.;
1299  Double_t sum3 = 0.;
1300  for(Int_t e=1;e<=nBinsEta;e++)
1301  {
1302  contentPt += (profilePtEta->GetBinContent(profilePtEta->GetBin(p,e)))
1303  * (profilePtEta->GetBinEntries(profilePtEta->GetBin(p,e)));
1304  entryPt += (profilePtEta->GetBinEntries(profilePtEta->GetBin(p,e)));
1305 
1306  sum1 += (profilePtEta->GetBinEntries(profilePtEta->GetBin(p,e)))
1307  * (pow(profilePtEta->GetBinError(profilePtEta->GetBin(p,e)),2.)
1308  + pow(profilePtEta->GetBinContent(profilePtEta->GetBin(p,e)),2.));
1309  sum2 += (profilePtEta->GetBinEntries(profilePtEta->GetBin(p,e)));
1310  sum3 += (profilePtEta->GetBinEntries(profilePtEta->GetBin(p,e)))
1311  * (profilePtEta->GetBinContent(profilePtEta->GetBin(p,e)));
1312  }
1313  if(sum2>0. && sum1/sum2-pow(sum3/sum2,2.) > 0.)
1314  {
1315  spreadPt = pow(sum1/sum2-pow(sum3/sum2,2.),0.5);
1316  }
1317  profilePt->SetBinContent(p,contentPt);
1318  profilePt->SetBinEntries(p,entryPt);
1319  {
1320  profilePt->SetBinError(p,spreadPt);
1321  }
1322 
1323  }
1324 
1325  return profilePt;
1326 
1327 } // end of TProfile* AliFlowAnalysisWithQCumulants::MakePtProjection(TProfile2D *profilePtEta)
1328 
1329 
1330 //=======================================================================================================================
1331 
1332 
1333 TProfile* AliFlowAnalysisWithQCumulants::MakeEtaProjection(TProfile2D *profilePtEta) const
1334 {
1335  // project 2D profile onto eta axis to get 1D profile
1336 
1337  Int_t nBinsEta = profilePtEta->GetNbinsY();
1338  Double_t dEtaMin = (profilePtEta->GetYaxis())->GetXmin();
1339  Double_t dEtaMax = (profilePtEta->GetYaxis())->GetXmax();
1340 
1341  Int_t nBinsPt = profilePtEta->GetNbinsX();
1342 
1343  TProfile *profileEta = new TProfile("","",nBinsEta,dEtaMin,dEtaMax);
1344 
1345  for(Int_t e=1;e<=nBinsEta;e++)
1346  {
1347  Double_t contentEta = 0.;
1348  Double_t entryEta = 0.;
1349  for(Int_t p=1;p<=nBinsPt;p++)
1350  {
1351  contentEta += (profilePtEta->GetBinContent(profilePtEta->GetBin(p,e)))
1352  * (profilePtEta->GetBinEntries(profilePtEta->GetBin(p,e)));
1353  entryEta += (profilePtEta->GetBinEntries(profilePtEta->GetBin(p,e)));
1354  }
1355  profileEta->SetBinContent(e,contentEta);
1356  profileEta->SetBinEntries(e,entryEta);
1357  }
1358 
1359  return profileEta;
1360 
1361 } // end of TProfile* AliFlowAnalysisWithQCumulants::MakeEtaProjection(TProfile2D *profilePtEta)
1362 
1363 //=======================================================================================================================
1364 
1366 {
1367  // Printing on the screen the final results for integrated flow (RF, POI and RP).
1368 
1369  Int_t n = fHarmonic;
1370 
1371  Double_t dVn[4] = {0.}; // array to hold Vn{2}, Vn{4}, Vn{6} and Vn{8}
1372  Double_t dVnErr[4] = {0.}; // array to hold errors of Vn{2}, Vn{4}, Vn{6} and Vn{8}
1373 
1374  if(type == "RF")
1375  {
1376  for(Int_t b=0;b<4;b++)
1377  {
1379  {
1380  dVn[0] = (fCommonHistsResults2nd->GetHistIntFlow())->GetBinContent(1);
1381  dVnErr[0] = (fCommonHistsResults2nd->GetHistIntFlow())->GetBinError(1);
1382  }
1384  {
1385  dVn[1] = (fCommonHistsResults4th->GetHistIntFlow())->GetBinContent(1);
1386  dVnErr[1] = (fCommonHistsResults4th->GetHistIntFlow())->GetBinError(1);
1387  }
1389  {
1390  dVn[2] = (fCommonHistsResults6th->GetHistIntFlow())->GetBinContent(1);
1391  dVnErr[2] = (fCommonHistsResults6th->GetHistIntFlow())->GetBinError(1);
1392  }
1394  {
1395  dVn[3] = (fCommonHistsResults8th->GetHistIntFlow())->GetBinContent(1);
1396  dVnErr[3] = (fCommonHistsResults8th->GetHistIntFlow())->GetBinError(1);
1397  }
1398  } // for(Int_t b=0;b<4;b++)
1399  } else if(type == "RP")
1400  {
1402  {
1403  dVn[0] = (fCommonHistsResults2nd->GetHistIntFlowRP())->GetBinContent(1);
1404  dVnErr[0] = (fCommonHistsResults2nd->GetHistIntFlowRP())->GetBinError(1);
1405  }
1407  {
1408  dVn[1] = (fCommonHistsResults4th->GetHistIntFlowRP())->GetBinContent(1);
1409  dVnErr[1] = (fCommonHistsResults4th->GetHistIntFlowRP())->GetBinError(1);
1410  }
1412  {
1413  dVn[2] = (fCommonHistsResults6th->GetHistIntFlowRP())->GetBinContent(1);
1414  dVnErr[2] = (fCommonHistsResults6th->GetHistIntFlowRP())->GetBinError(1);
1415  }
1417  {
1418  dVn[3] = (fCommonHistsResults8th->GetHistIntFlowRP())->GetBinContent(1);
1419  dVnErr[3] = (fCommonHistsResults8th->GetHistIntFlowRP())->GetBinError(1);
1420  }
1421  } else if(type == "POI")
1422  {
1424  {
1425  dVn[0] = (fCommonHistsResults2nd->GetHistIntFlowPOI())->GetBinContent(1);
1426  dVnErr[0] = (fCommonHistsResults2nd->GetHistIntFlowPOI())->GetBinError(1);
1427  }
1429  {
1430  dVn[1] = (fCommonHistsResults4th->GetHistIntFlowPOI())->GetBinContent(1);
1431  dVnErr[1] = (fCommonHistsResults4th->GetHistIntFlowPOI())->GetBinError(1);
1432  }
1434  {
1435  dVn[2] = (fCommonHistsResults6th->GetHistIntFlowPOI())->GetBinContent(1);
1436  dVnErr[2] = (fCommonHistsResults6th->GetHistIntFlowPOI())->GetBinError(1);
1437  }
1439  {
1440  dVn[3] = (fCommonHistsResults8th->GetHistIntFlowPOI())->GetBinContent(1);
1441  dVnErr[3] = (fCommonHistsResults8th->GetHistIntFlowPOI())->GetBinError(1);
1442  }
1443  } else if(type == "RF, rebinned in M" && fCalculateCumulantsVsM)
1444  {
1445  for(Int_t b=0;b<4;b++)
1446  {
1447  dVn[b] = fIntFlowRebinnedInM->GetBinContent(b+1);
1448  dVnErr[b] = fIntFlowRebinnedInM->GetBinError(b+1);
1449  }
1450  }
1451 
1452  TString title = " flow estimates from Q-cumulants";
1453  TString subtitle = " (";
1454  TString subtitle2 = " (rebinned in M)";
1455 
1456  if(type != "RF, rebinned in M")
1457  {
1459  {
1460  subtitle.Append(type);
1461  subtitle.Append(", without weights)");
1462  } else
1463  {
1464  subtitle.Append(type);
1465  subtitle.Append(", with weights)");
1466  }
1467  } else
1468  {
1470  {
1471  subtitle.Append("RF");
1472  subtitle.Append(", without weights)");
1473  } else
1474  {
1475  subtitle.Append("RF");
1476  subtitle.Append(", with weights)");
1477  }
1478  }
1479 
1480  cout<<endl;
1481  cout<<"*************************************"<<endl;
1482  cout<<"*************************************"<<endl;
1483  cout<<title.Data()<<endl;
1484  cout<<subtitle.Data()<<endl;
1485  if(type == "RF, rebinned in M"){cout<<subtitle2.Data()<<endl;}
1486  cout<<endl;
1487 
1488  for(Int_t i=0;i<4;i++)
1489  {
1490  cout<<" v_"<<n<<"{"<<2*(i+1)<<"} = "<<dVn[i]<<" +/- "<<dVnErr[i]<<endl;
1491  }
1492 
1493  cout<<endl;
1494  if(type == "RF")
1495  {
1497  {
1498  cout<<" detector bias (corrected for): "<<endl;
1499  } else
1500  {
1501  cout<<" detector bias (not corrected for):"<<endl;
1502  }
1503  cout<<" to QC{2}: "<<fIntFlowDetectorBias->GetBinContent(1)<<" +/- "<<fIntFlowDetectorBias->GetBinError(1)<<endl;
1504  cout<<" to QC{4}: "<<fIntFlowDetectorBias->GetBinContent(2)<<" +/- "<<fIntFlowDetectorBias->GetBinError(2)<<endl;
1505  cout<<endl;
1506  }
1507  if(type == "RF" || type == "RF, rebinned in M")
1508  {
1509  cout<<" nEvts = "<<(Int_t)fCommonHists->GetHistMultRP()->GetEntries()<<", <M> = "<<(Double_t)fCommonHists->GetHistMultRP()->GetMean()<<endl;
1510  }
1511  else if (type == "RP")
1512  {
1513  cout<<" nEvts = "<<(Int_t)fCommonHists->GetHistMultRP()->GetEntries()<<", <M> = "<<(Double_t)fCommonHists->GetHistMultRP()->GetMean()<<endl;
1514  }
1515  else if (type == "POI")
1516  {
1517  cout<<" nEvts = "<<(Int_t)fCommonHists->GetHistMultPOI()->GetEntries()<<", <M> = "<<(Double_t)fCommonHists->GetHistMultPOI()->GetMean()<<endl;
1518  }
1519 
1520  cout<<"*************************************"<<endl;
1521  cout<<"*************************************"<<endl;
1522  cout<<endl;
1523 
1524 }// end of AliFlowAnalysisWithQCumulants::PrintFinalResultsForIntegratedFlow(TString type="RF");
1525 
1526 //=======================================================================================================================
1527 
1529 {
1530  //store the final results in output .root file
1531  TFile *output = new TFile(outputFileName.Data(),"RECREATE");
1532  //output->WriteObject(fHistList, "cobjQC","SingleKey");
1533  fHistList->Write(fHistList->GetName(), TObject::kSingleKey);
1534  delete output;
1535 }
1536 
1537 
1538 //=======================================================================================================================
1539 
1540 
1541 void AliFlowAnalysisWithQCumulants::WriteHistograms(TDirectoryFile *outputFileName)
1542 {
1543  //store the final results in output .root file
1544  fHistList->SetName("cobjQC");
1545  fHistList->SetOwner(kTRUE);
1546  outputFileName->Add(fHistList);
1547  outputFileName->Write(outputFileName->GetName(), TObject::kSingleKey);
1548 }
1549 
1550 //=======================================================================================================================
1551 
1553 {
1554  // Book common control histograms and common histograms for final results.
1555  // a) Book common control histograms;
1556  // b) Book common result histograms.
1557 
1558  // a) Book common control histograms:
1559  // Common control histograms (all events):
1560  TString commonHistsName = "AliFlowCommonHistQC";
1561  commonHistsName += fAnalysisLabel->Data();
1562  fCommonHists = new AliFlowCommonHist(commonHistsName.Data(),commonHistsName.Data(),fBookOnlyBasicCCH);
1563  fHistList->Add(fCommonHists);
1564  // Common control histograms (selected events):
1566  {
1567  // Common control histogram filled for events with 2 and more reference particles:
1568  TString commonHists2ndOrderName = "AliFlowCommonHist2ndOrderQC";
1569  commonHists2ndOrderName += fAnalysisLabel->Data();
1570  fCommonHists2nd = new AliFlowCommonHist(commonHists2ndOrderName.Data(),commonHists2ndOrderName.Data(),fBookOnlyBasicCCH);
1571  fHistList->Add(fCommonHists2nd);
1572  // Common control histogram filled for events with 2 and more reference particles:
1573  TString commonHists4thOrderName = "AliFlowCommonHist4thOrderQC";
1574  commonHists4thOrderName += fAnalysisLabel->Data();
1575  fCommonHists4th = new AliFlowCommonHist(commonHists4thOrderName.Data(),commonHists4thOrderName.Data(),fBookOnlyBasicCCH);
1576  fHistList->Add(fCommonHists4th);
1577  // Common control histogram filled for events with 6 and more reference particles:
1578  TString commonHists6thOrderName = "AliFlowCommonHist6thOrderQC";
1579  commonHists6thOrderName += fAnalysisLabel->Data();
1580  fCommonHists6th = new AliFlowCommonHist(commonHists6thOrderName.Data(),commonHists6thOrderName.Data(),fBookOnlyBasicCCH);
1581  fHistList->Add(fCommonHists6th);
1582  // Common control histogram filled for events with 8 and more reference particles:
1583  TString commonHists8thOrderName = "AliFlowCommonHist8thOrderQC";
1584  commonHists8thOrderName += fAnalysisLabel->Data();
1585  fCommonHists8th = new AliFlowCommonHist(commonHists8thOrderName.Data(),commonHists8thOrderName.Data(),fBookOnlyBasicCCH);
1586  fHistList->Add(fCommonHists8th);
1587  } // end of if(fFillMultipleControlHistograms)
1588 
1589  // b) Book common result histograms:
1591  {
1592  // Common result histograms for QC{2}:
1593  TString commonHistResults2ndOrderName = "AliFlowCommonHistResults2ndOrderQC";
1594  commonHistResults2ndOrderName += fAnalysisLabel->Data();
1595  fCommonHistsResults2nd = new AliFlowCommonHistResults(commonHistResults2ndOrderName.Data(),"",fHarmonic);
1597  }
1599  {
1600  // Common result histograms for QC{4}:
1601  TString commonHistResults4thOrderName = "AliFlowCommonHistResults4thOrderQC";
1602  commonHistResults4thOrderName += fAnalysisLabel->Data();
1603  fCommonHistsResults4th = new AliFlowCommonHistResults(commonHistResults4thOrderName.Data(),"",fHarmonic);
1605  }
1607  {
1608  // Common result histograms for QC{6}:
1609  TString commonHistResults6thOrderName = "AliFlowCommonHistResults6thOrderQC";
1610  commonHistResults6thOrderName += fAnalysisLabel->Data();
1611  fCommonHistsResults6th = new AliFlowCommonHistResults(commonHistResults6thOrderName.Data(),"",fHarmonic);
1613  }
1615  {
1616  // Common result histograms for QC{8}:
1617  TString commonHistResults8thOrderName = "AliFlowCommonHistResults8thOrderQC";
1618  commonHistResults8thOrderName += fAnalysisLabel->Data();
1619  fCommonHistsResults8th = new AliFlowCommonHistResults(commonHistResults8thOrderName.Data(),"",fHarmonic);
1621  }
1622 
1623 } // end of void AliFlowAnalysisWithQCumulants::BookCommonHistograms()
1624 
1625 //=======================================================================================================================
1626 
1628 {
1629  // Book and fill histograms which hold phi, pt and eta weights.
1630 
1631  if(!fWeightsList)
1632  {
1633  printf("\n WARNING (QC): fWeightsList is NULL in AFAWQC::BAFWH() !!!! \n\n");
1634  exit(0);
1635  }
1636 
1637  TString fUseParticleWeightsName = "fUseParticleWeightsQC";
1638  fUseParticleWeightsName += fAnalysisLabel->Data();
1639  fUseParticleWeights = new TProfile(fUseParticleWeightsName.Data(),"0 = particle weight not used, 1 = particle weight used ",4,0,4);
1640  fUseParticleWeights->SetLabelSize(0.06);
1641  fUseParticleWeights->SetStats(kFALSE);
1642  (fUseParticleWeights->GetXaxis())->SetBinLabel(1,"w_{#phi}");
1643  (fUseParticleWeights->GetXaxis())->SetBinLabel(2,"w_{p_{T}}");
1644  (fUseParticleWeights->GetXaxis())->SetBinLabel(3,"w_{#eta}");
1645  (fUseParticleWeights->GetXaxis())->SetBinLabel(4,"w_{track}");
1651 
1652  if(fUsePhiWeights)
1653  {
1654  if(fWeightsList->FindObject("phi_weights"))
1655  {
1656  fPhiWeights = dynamic_cast<TH1F*>(fWeightsList->FindObject("phi_weights"));
1657  if(!fPhiWeights)
1658  {
1659  printf("\n WARNING (QC): fPhiWeights is NULL in AFAWQC::BAFWH() !!!!\n\n");
1660  exit(0);
1661  }
1662  if(TMath::Abs(fPhiWeights->GetBinWidth(1)-fPhiBinWidth)>pow(10.,-6.))
1663  {
1664  cout<<endl;
1665  cout<<"WARNING (QC): Inconsistent binning in histograms for phi-weights throughout the code."<<endl;
1666  cout<<endl;
1667  //exit(0);
1668  }
1669  } else
1670  {
1671  cout<<"WARNING: fWeightsList->FindObject(\"phi_weights\") is NULL in AFAWQC::BAFWH() !!!!"<<endl;
1672  exit(0);
1673  }
1674  } // end of if(fUsePhiWeights)
1675 
1676  if(fUsePtWeights)
1677  {
1678  if(fWeightsList->FindObject("pt_weights"))
1679  {
1680  fPtWeights = dynamic_cast<TH1D*>(fWeightsList->FindObject("pt_weights"));
1681  if(!fPtWeights)
1682  {
1683  printf("\n WARNING (QC): fPtWeights is NULL in AFAWQC::BAFWH() !!!!\n\n");
1684  exit(0);
1685  }
1686  if(TMath::Abs(fPtWeights->GetBinWidth(1)-fPtBinWidth)>pow(10.,-6.))
1687  {
1688  cout<<endl;
1689  cout<<"WARNING (QC): Inconsistent binning in histograms for pt-weights throughout the code."<<endl;
1690  cout<<endl;
1691  //exit(0);
1692  }
1693  } else
1694  {
1695  cout<<"WARNING: fWeightsList->FindObject(\"pt_weights\") is NULL in AFAWQC::BAFWH() !!!!"<<endl;
1696  exit(0);
1697  }
1698  } // end of if(fUsePtWeights)
1699 
1700  if(fUseEtaWeights)
1701  {
1702  if(fWeightsList->FindObject("eta_weights"))
1703  {
1704  fEtaWeights = dynamic_cast<TH1D*>(fWeightsList->FindObject("eta_weights"));
1705  if(!fEtaWeights)
1706  {
1707  printf("\n WARNING (QC): fEtaWeights is NULL in AFAWQC::BAFWH() !!!!\n\n");
1708  exit(0);
1709  }
1710  if(TMath::Abs(fEtaWeights->GetBinWidth(1)-fEtaBinWidth)>pow(10.,-6.))
1711  {
1712  cout<<endl;
1713  cout<<"WARNING (QC): Inconsistent binning in histograms for eta-weights throughout the code."<<endl;
1714  cout<<endl;
1715  //exit(0);
1716  }
1717  } else
1718  {
1719  cout<<"WARNING: fUseEtaWeights && fWeightsList->FindObject(\"eta_weights\") is NULL in AFAWQC::BAFWH() !!!!"<<endl;
1720  exit(0);
1721  }
1722  } // end of if(fUseEtaWeights)
1723 
1724 } // end of AliFlowAnalysisWithQCumulants::BookAndFillWeightsHistograms()
1725 
1726 //=======================================================================================================================
1727 
1729 {
1730  // Book all objects for integrated flow:
1731  // a) Book profile to hold all flags for integrated flow;
1732  // b) Book event-by-event quantities;
1733  // c) Book profiles; // to be improved (comment)
1734  // d) Book histograms holding the final results.
1735 
1736  TString sinCosFlag[2] = {"sin","cos"}; // to be improved (should I promote this to data members?)
1737  TString powerFlag[2] = {"linear","quadratic"}; // to be improved (should I promote this to data members?)
1738 
1739  // a) Book profile to hold all flags for integrated flow:
1740  TString intFlowFlagsName = "fIntFlowFlags";
1741  intFlowFlagsName += fAnalysisLabel->Data();
1742  fIntFlowFlags = new TProfile(intFlowFlagsName.Data(),"Flags for Integrated Flow",21,0.,21.);
1743  fIntFlowFlags->SetTickLength(-0.01,"Y");
1744  fIntFlowFlags->SetMarkerStyle(25);
1745  fIntFlowFlags->SetLabelSize(0.04);
1746  fIntFlowFlags->SetLabelOffset(0.02,"Y");
1747  fIntFlowFlags->SetStats(kFALSE);
1748  fIntFlowFlags->GetXaxis()->SetBinLabel(1,"Particle Weights");
1749  fIntFlowFlags->GetXaxis()->SetBinLabel(2,"Event Weights");
1750  fIntFlowFlags->GetXaxis()->SetBinLabel(3,"Corrected for NUA?");
1751  fIntFlowFlags->GetXaxis()->SetBinLabel(4,"Print RF results");
1752  fIntFlowFlags->GetXaxis()->SetBinLabel(5,"Print RP results");
1753  fIntFlowFlags->GetXaxis()->SetBinLabel(6,"Print POI results");
1754  fIntFlowFlags->GetXaxis()->SetBinLabel(7,"Print RF (rebinned in M) results");
1755  fIntFlowFlags->GetXaxis()->SetBinLabel(8,"Corrected for NUA vs M?");
1756  fIntFlowFlags->GetXaxis()->SetBinLabel(9,"Propagate errors to v_{n} from correlations?");
1757  fIntFlowFlags->GetXaxis()->SetBinLabel(10,"Calculate cumulants vs M");
1758  fIntFlowFlags->GetXaxis()->SetBinLabel(11,"fMinimumBiasReferenceFlow");
1759  fIntFlowFlags->GetXaxis()->SetBinLabel(12,"fForgetAboutCovariances");
1760  fIntFlowFlags->GetXaxis()->SetBinLabel(13,"fStorePhiDistributionForOneEvent");
1761  fIntFlowFlags->GetXaxis()->SetBinLabel(14,"fFillMultipleControlHistograms");
1762  fIntFlowFlags->GetXaxis()->SetBinLabel(15,"Calculate all correlations vs M");
1763  fIntFlowFlags->GetXaxis()->SetBinLabel(16,"fMultiplicityIs");
1764  fIntFlowFlags->GetXaxis()->SetBinLabel(17,"fExactNoRPs");
1765  fIntFlowFlags->GetXaxis()->SetBinLabel(18,"fUse2DHistograms");
1766  fIntFlowFlags->GetXaxis()->SetBinLabel(19,"fFillProfilesVsMUsingWeights");
1767  fIntFlowFlags->GetXaxis()->SetBinLabel(20,"fUseQvectorTerms");
1768  fIntFlowFlags->GetXaxis()->SetBinLabel(21,"fMaxCommonResultsHistogram");
1770 
1771  // b) Book event-by-event quantities:
1772  // Re[Q_{m*n,k}], Im[Q_{m*n,k}] and S_{p,k}^M:
1773  fReQ = new TMatrixD(12,9);
1774  fImQ = new TMatrixD(12,9);
1775  fSpk = new TMatrixD(8,9);
1776  // average correlations <2>, <4>, <6> and <8> for single event (bining is the same as in fIntFlowCorrelationsPro and fIntFlowCorrelationsHist):
1777  TString intFlowCorrelationsEBEName = "fIntFlowCorrelationsEBE";
1778  intFlowCorrelationsEBEName += fAnalysisLabel->Data();
1779  fIntFlowCorrelationsEBE = new TH1D(intFlowCorrelationsEBEName.Data(),intFlowCorrelationsEBEName.Data(),4,0,4);
1780  // weights for average correlations <2>, <4>, <6> and <8> for single event:
1781  TString intFlowEventWeightsForCorrelationsEBEName = "fIntFlowEventWeightsForCorrelationsEBE";
1782  intFlowEventWeightsForCorrelationsEBEName += fAnalysisLabel->Data();
1783  fIntFlowEventWeightsForCorrelationsEBE = new TH1D(intFlowEventWeightsForCorrelationsEBEName.Data(),intFlowEventWeightsForCorrelationsEBEName.Data(),4,0,4);
1784  // average all correlations for single event (bining is the same as in fIntFlowCorrelationsAllPro and fIntFlowCorrelationsAllHist):
1785  TString intFlowCorrelationsAllEBEName = "fIntFlowCorrelationsAllEBE";
1786  intFlowCorrelationsAllEBEName += fAnalysisLabel->Data();
1787  fIntFlowCorrelationsAllEBE = new TH1D(intFlowCorrelationsAllEBEName.Data(),intFlowCorrelationsAllEBEName.Data(),64,0,64);
1788  // average correction terms for non-uniform acceptance for single event
1789  // (binning is the same as in fIntFlowCorrectionTermsForNUAPro[2] and fIntFlowCorrectionTermsForNUAHist[2]):
1790  TString fIntFlowCorrectionTermsForNUAEBEName = "fIntFlowCorrectionTermsForNUAEBE";
1791  fIntFlowCorrectionTermsForNUAEBEName += fAnalysisLabel->Data();
1792  for(Int_t sc=0;sc<2;sc++) // sin or cos terms
1793  {
1794  fIntFlowCorrectionTermsForNUAEBE[sc] = new TH1D(Form("%s: %s terms",fIntFlowCorrectionTermsForNUAEBEName.Data(),sinCosFlag[sc].Data()),Form("Correction terms for non-uniform acceptance (%s terms)",sinCosFlag[sc].Data()),4,0,4);
1795  }
1796  // event weights for terms for non-uniform acceptance:
1797  TString fIntFlowEventWeightForCorrectionTermsForNUAEBEName = "fIntFlowEventWeightForCorrectionTermsForNUAEBE";
1798  fIntFlowEventWeightForCorrectionTermsForNUAEBEName += fAnalysisLabel->Data();
1799  for(Int_t sc=0;sc<2;sc++) // sin or cos terms
1800  {
1801  fIntFlowEventWeightForCorrectionTermsForNUAEBE[sc] = new TH1D(Form("%s: %s terms",fIntFlowEventWeightForCorrectionTermsForNUAEBEName.Data(),sinCosFlag[sc].Data()),Form("Event weights for terms for non-uniform acceptance (%s terms)",sinCosFlag[sc].Data()),4,0,4); // to be improved - 4
1802  }
1803  // c) Book profiles: // to be improved (comment)
1804  // profile to hold average multiplicities and number of events for events with nRP>=0, nRP>=1, ... , and nRP>=8:
1805  TString avMultiplicityName = "fAvMultiplicity";
1806  avMultiplicityName += fAnalysisLabel->Data();
1807  fAvMultiplicity = new TProfile(avMultiplicityName.Data(),"Average multiplicities of reference particles (RPs)",9,0,9);
1808  fAvMultiplicity->SetTickLength(-0.01,"Y");
1809  fAvMultiplicity->SetMarkerStyle(25);
1810  fAvMultiplicity->SetLabelSize(0.05);
1811  fAvMultiplicity->SetLabelOffset(0.02,"Y");
1812  fAvMultiplicity->SetYTitle("Average multiplicity");
1813  (fAvMultiplicity->GetXaxis())->SetBinLabel(1,"all evts");
1814  (fAvMultiplicity->GetXaxis())->SetBinLabel(2,"n_{RP} #geq 1");
1815  (fAvMultiplicity->GetXaxis())->SetBinLabel(3,"n_{RP} #geq 2");
1816  (fAvMultiplicity->GetXaxis())->SetBinLabel(4,"n_{RP} #geq 3");
1817  (fAvMultiplicity->GetXaxis())->SetBinLabel(5,"n_{RP} #geq 4");
1818  (fAvMultiplicity->GetXaxis())->SetBinLabel(6,"n_{RP} #geq 5");
1819  (fAvMultiplicity->GetXaxis())->SetBinLabel(7,"n_{RP} #geq 6");
1820  (fAvMultiplicity->GetXaxis())->SetBinLabel(8,"n_{RP} #geq 7");
1821  (fAvMultiplicity->GetXaxis())->SetBinLabel(9,"n_{RP} #geq 8");
1823  // Average correlations <<2>>, <<4>>, <<6>> and <<8>> for all events (with wrong errors!):
1824  TString correlationFlag[4] = {"#LT#LT2#GT#GT","#LT#LT4#GT#GT","#LT#LT6#GT#GT","#LT#LT8#GT#GT"};
1825  TString intFlowCorrelationsProName = "fIntFlowCorrelationsPro";
1826  intFlowCorrelationsProName += fAnalysisLabel->Data();
1827  fIntFlowCorrelationsPro = new TProfile(intFlowCorrelationsProName.Data(),"Average correlations for all events",4,0,4,"s");
1828  fIntFlowCorrelationsPro->Sumw2();
1829  fIntFlowCorrelationsPro->SetTickLength(-0.01,"Y");
1830  fIntFlowCorrelationsPro->SetMarkerStyle(25);
1831  fIntFlowCorrelationsPro->SetLabelSize(0.06);
1832  fIntFlowCorrelationsPro->SetLabelOffset(0.01,"Y");
1833  for(Int_t b=0;b<4;b++)
1834  {
1835  (fIntFlowCorrelationsPro->GetXaxis())->SetBinLabel(b+1,correlationFlag[b].Data());
1836  }
1838  // Average correlations squared <<2>^2>, <<4>^2>, <<6>^2> and <<8>^2> for all events:
1839  TString squaredCorrelationFlag[4] = {"#LT#LT2#GT^{2}#GT","#LT#LT4#GT^{2}#GT","#LT#LT6#GT^{2}#GT","#LT#LT8#GT^{2}#GT"};
1840  TString intFlowSquaredCorrelationsProName = "fIntFlowSquaredCorrelationsPro";
1841  intFlowSquaredCorrelationsProName += fAnalysisLabel->Data();
1842  fIntFlowSquaredCorrelationsPro = new TProfile(intFlowSquaredCorrelationsProName.Data(),"Average squared correlations for all events",4,0,4,"s");
1844  fIntFlowSquaredCorrelationsPro->SetTickLength(-0.01,"Y");
1845  fIntFlowSquaredCorrelationsPro->SetMarkerStyle(25);
1846  fIntFlowSquaredCorrelationsPro->SetLabelSize(0.06);
1847  fIntFlowSquaredCorrelationsPro->SetLabelOffset(0.01,"Y");
1848  for(Int_t b=0;b<4;b++)
1849  {
1850  (fIntFlowSquaredCorrelationsPro->GetXaxis())->SetBinLabel(b+1,squaredCorrelationFlag[b].Data());
1851  }
1854  {
1855  for(Int_t ci=0;ci<4;ci++) // correlation index
1856  {
1857  // average correlations <<2>>, <<4>>, <<6>> and <<8>> versus multiplicity for all events (with wrong errors):
1858  TString intFlowCorrelationsVsMProName = "fIntFlowCorrelationsVsMPro";
1859  intFlowCorrelationsVsMProName += fAnalysisLabel->Data();
1860  fIntFlowCorrelationsVsMPro[ci] = new TProfile(Form("%s, %s",intFlowCorrelationsVsMProName.Data(),correlationFlag[ci].Data()),
1861  Form("%s vs multiplicity",correlationFlag[ci].Data()),
1863  fIntFlowCorrelationsVsMPro[ci]->Sumw2();
1864  fIntFlowCorrelationsVsMPro[ci]->GetYaxis()->SetTitle(correlationFlag[ci].Data());
1866  {
1867  fIntFlowCorrelationsVsMPro[ci]->GetXaxis()->SetTitle("# RPs");
1869  {
1870  fIntFlowCorrelationsVsMPro[ci]->GetXaxis()->SetTitle("Reference multiplicity (from ESD)");
1872  {
1873  fIntFlowCorrelationsVsMPro[ci]->GetXaxis()->SetTitle("# POIs");
1874  }
1876  // average squared correlations <<2>^2>, <<4>^2>, <<6>^2> and <<8>^2> versus multiplicity for all events:
1877  TString intFlowSquaredCorrelationsVsMProName = "fIntFlowSquaredCorrelationsVsMPro";
1878  intFlowSquaredCorrelationsVsMProName += fAnalysisLabel->Data();
1879  fIntFlowSquaredCorrelationsVsMPro[ci] = new TProfile(Form("%s, %s",intFlowSquaredCorrelationsVsMProName.Data(),squaredCorrelationFlag[ci].Data()),
1880  Form("%s vs multiplicity",squaredCorrelationFlag[ci].Data()),
1882  fIntFlowSquaredCorrelationsVsMPro[ci]->Sumw2();
1883  fIntFlowSquaredCorrelationsVsMPro[ci]->GetYaxis()->SetTitle(squaredCorrelationFlag[ci].Data());
1885  {
1886  fIntFlowSquaredCorrelationsVsMPro[ci]->GetXaxis()->SetTitle("# RPs");
1888  {
1889  fIntFlowSquaredCorrelationsVsMPro[ci]->GetXaxis()->SetTitle("Reference multiplicity (from ESD)");
1891  {
1892  fIntFlowSquaredCorrelationsVsMPro[ci]->GetXaxis()->SetTitle("# POIs");
1893  }
1895  } // end of for(Int_t ci=0;ci<4;ci++) // correlation index
1896  } // end of if(fCalculateCumulantsVsM)
1897  // averaged all correlations for all events (with wrong errors!):
1898  TString intFlowCorrelationsAllProName = "fIntFlowCorrelationsAllPro";
1899  intFlowCorrelationsAllProName += fAnalysisLabel->Data();
1900  fIntFlowCorrelationsAllPro = new TProfile(intFlowCorrelationsAllProName.Data(),"Average all correlations for all events",64,0,64);
1901  fIntFlowCorrelationsAllPro->Sumw2();
1902  fIntFlowCorrelationsAllPro->SetTickLength(-0.01,"Y");
1903  fIntFlowCorrelationsAllPro->SetMarkerStyle(25);
1904  fIntFlowCorrelationsAllPro->SetLabelSize(0.03);
1905  fIntFlowCorrelationsAllPro->SetLabelOffset(0.01,"Y");
1906  // 2-p correlations:
1907  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(1,"#LT#LT2#GT#GT_{n|n}");
1908  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(2,"#LT#LT2#GT#GT_{2n|2n}");
1909  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(3,"#LT#LT2#GT#GT_{3n|3n}");
1910  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(4,"#LT#LT2#GT#GT_{4n|4n}");
1911  // 3-p correlations:
1912  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(6,"#LT#LT3#GT#GT_{2n|n,n}");
1913  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(7,"#LT#LT3#GT#GT_{3n|2n,n}");
1914  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(8,"#LT#LT3#GT#GT_{4n|2n,2n}");
1915  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(9,"#LT#LT3#GT#GT_{4n|3n,n}");
1916  // 4-p correlations:
1917  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(11,"#LT#LT4#GT#GT_{n,n|n,n}");
1918  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(12,"#LT#LT4#GT#GT_{2n,n|2n,n}");
1919  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(13,"#LT#LT4#GT#GT_{2n,2n|2n,2n}");
1920  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(14,"#LT#LT4#GT#GT_{3n|n,n,n}");
1921  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(15,"#LT#LT4#GT#GT_{3n,n|3n,n}");
1922  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(16,"#LT#LT4#GT#GT_{3n,n|2n,2n}");
1923  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(17,"#LT#LT4#GT#GT_{4n|2n,n,n}");
1924  // 5-p correlations:
1925  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(19,"#LT#LT5#GT#GT_{2n,n|n,n,n}");
1926  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(20,"#LT#LT5#GT#GT_{2n,2n|2n,n,n}");
1927  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(21,"#LT#LT5#GT#GT_{3n,n|2n,n,n}");
1928  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(22,"#LT#LT5#GT#GT_{4n|n,n,n,n}");
1929  // 6-p correlations:
1930  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(24,"#LT#LT6#GT#GT_{n,n,n|n,n,n}");
1931  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(25,"#LT#LT6#GT#GT_{2n,n,n|2n,n,n}");
1932  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(26,"#LT#LT6#GT#GT_{2n,2n|n,n,n,n}");
1933  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(27,"#LT#LT6#GT#GT_{3n,n|n,n,n,n}");
1934  // 7-p correlations:
1935  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(29,"#LT#LT7#GT#GT_{2n,n,n|n,n,n,n}");
1936  // 8-p correlations:
1937  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(31,"#LT#LT8#GT#GT_{n,n,n,n|n,n,n,n}");
1938  // EXTRA correlations for v3{5} study:
1939  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(33,"#LT#LT4#GT#GT_{4n,2n|3n,3n}");
1940  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(34,"#LT#LT5#GT#GT_{3n,3n|2n,2n,2n}");
1941  // EXTRA correlations for Teaney-Yan study:
1942  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(35,"#LT#LT2#GT#GT_{5n|5n}");
1943  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(36,"#LT#LT2#GT#GT_{6n|6n}");
1944  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(37,"#LT#LT3#GT#GT_{5n|3n,2n}");
1945  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(38,"#LT#LT3#GT#GT_{5n|4n,1n}");
1946  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(39,"#LT#LT3#GT#GT_{6n|3n,3n}");
1947  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(40,"#LT#LT3#GT#GT_{6n|4n,2n}");
1948  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(41,"#LT#LT3#GT#GT_{6n|5n,1n}");
1949  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(42,"#LT#LT4#GT#GT_{6n|3n,2n,1n}");
1950  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(43,"#LT#LT4#GT#GT_{3n,2n|3n,2n}");
1951  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(44,"#LT#LT4#GT#GT_{4n,1n|3n,2n}");
1952  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(45,"#LT#LT4#GT#GT_{3n,3n|3n,3n}");
1953  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(46,"#LT#LT4#GT#GT_{4n,2n|3n,3n}");
1954  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(47,"#LT#LT4#GT#GT_{5n,1n|3n,3n}");
1955  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(48,"#LT#LT4#GT#GT_{4n,2n|4n,2n}");
1956  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(49,"#LT#LT4#GT#GT_{5n,1n|4n,2n}");
1957  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(50,"#LT#LT4#GT#GT_{5n|3n,1n,1n}");
1958  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(51,"#LT#LT4#GT#GT_{5n|2n,2n,1n}");
1959  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(52,"#LT#LT4#GT#GT_{5n,1n|5n,1n}");
1960  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(53,"#LT#LT5#GT#GT_{3n,3n|3n,2n,1n}");
1961  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(54,"#LT#LT5#GT#GT_{4n,2n|3n,2n,1n}");
1962  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(55,"#LT#LT5#GT#GT_{3n,2n|3n,1n,1n}");
1963  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(56,"#LT#LT5#GT#GT_{3n,2n|2n,2n,1n}");
1964  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(57,"#LT#LT5#GT#GT_{5n,1n|3n,2n,1n}");
1965  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(58,"#LT#LT6#GT#GT_{3n,2n,1n|3n,2n,1n}");
1966  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(59,"#LT#LT4#GT#GT_{6n|4n,1n,1n}");
1967  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(60,"#LT#LT4#GT#GT_{6n|2n,2n,2n}");
1968  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(61,"#LT#LT5#GT#GT_{6n|2n,2n,1n,1n}");
1969  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(62,"#LT#LT5#GT#GT_{4n,1n,1n|3n,3n}");
1970  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(63,"#LT#LT6#GT#GT_{3n,3n|2n,2n,1n,1n}");
1972  // average all correlations versus multiplicity (errors via Sumw2 - to be improved):
1974  {
1975  // 2-p correlations vs M:
1976  fIntFlowCorrelationsAllVsMPro[0] = new TProfile("two1n1n","#LT#LT2#GT#GT_{n|n}",fnBinsMult,fMinMult,fMaxMult);
1977  fIntFlowCorrelationsAllVsMPro[1] = new TProfile("two2n2n","#LT#LT2#GT#GT_{2n|2n}",fnBinsMult,fMinMult,fMaxMult);
1978  fIntFlowCorrelationsAllVsMPro[2] = new TProfile("two3n3n","#LT#LT2#GT#GT_{3n|3n}",fnBinsMult,fMinMult,fMaxMult);
1979  fIntFlowCorrelationsAllVsMPro[3] = new TProfile("two4n4n","#LT#LT2#GT#GT_{4n|4n}",fnBinsMult,fMinMult,fMaxMult);
1980  // 3-p correlations vs M:
1981  fIntFlowCorrelationsAllVsMPro[5] = new TProfile("three2n1n1n","#LT#LT3#GT#GT_{2n|n,n}",fnBinsMult,fMinMult,fMaxMult);
1982  fIntFlowCorrelationsAllVsMPro[6] = new TProfile("three3n2n1n","#LT#LT3#GT#GT_{3n|2n,n}",fnBinsMult,fMinMult,fMaxMult);
1983  fIntFlowCorrelationsAllVsMPro[7] = new TProfile("three4n2n2n","#LT#LT3#GT#GT_{4n|2n,2n}",fnBinsMult,fMinMult,fMaxMult);
1984  fIntFlowCorrelationsAllVsMPro[8] = new TProfile("three4n3n1n","#LT#LT3#GT#GT_{4n|3n,n}",fnBinsMult,fMinMult,fMaxMult);
1985  // 4-p correlations vs M:
1986  fIntFlowCorrelationsAllVsMPro[10] = new TProfile("four1n1n1n1n","#LT#LT4#GT#GT_{n,n|n,n}",fnBinsMult,fMinMult,fMaxMult);
1987  fIntFlowCorrelationsAllVsMPro[11] = new TProfile("four2n1n2n1n","#LT#LT4#GT#GT_{2n,n|2n,n}",fnBinsMult,fMinMult,fMaxMult);
1988  fIntFlowCorrelationsAllVsMPro[12] = new TProfile("four2n2n2n2n","#LT#LT4#GT#GT_{2n,2n|2n,2n}",fnBinsMult,fMinMult,fMaxMult);
1989  fIntFlowCorrelationsAllVsMPro[13] = new TProfile("four3n1n1n1n","#LT#LT4#GT#GT_{3n|n,n,n}",fnBinsMult,fMinMult,fMaxMult);
1990  fIntFlowCorrelationsAllVsMPro[14] = new TProfile("four3n1n3n1n","#LT#LT4#GT#GT_{3n,n|3n,n}",fnBinsMult,fMinMult,fMaxMult);
1991  fIntFlowCorrelationsAllVsMPro[15] = new TProfile("four3n1n2n2n","#LT#LT4#GT#GT_{3n,n|2n,2n}",fnBinsMult,fMinMult,fMaxMult);
1992  fIntFlowCorrelationsAllVsMPro[16] = new TProfile("four4n2n1n1n","#LT#LT4#GT#GT_{4n|2n,n,n}",fnBinsMult,fMinMult,fMaxMult);
1993  // 5-p correlations vs M:
1994  fIntFlowCorrelationsAllVsMPro[18] = new TProfile("five2n1n1n1n1n","#LT#LT5#GT#GT_{2n,n|n,n,n}",fnBinsMult,fMinMult,fMaxMult);
1995  fIntFlowCorrelationsAllVsMPro[19] = new TProfile("five2n2n2n1n1n","#LT#LT5#GT#GT_{2n,2n|2n,n,n}",fnBinsMult,fMinMult,fMaxMult);
1996  fIntFlowCorrelationsAllVsMPro[20] = new TProfile("five3n1n2n1n1n","#LT#LT5#GT#GT_{3n,n|2n,n,n}",fnBinsMult,fMinMult,fMaxMult);
1997  fIntFlowCorrelationsAllVsMPro[21] = new TProfile("five4n1n1n1n1n","#LT#LT5#GT#GT_{4n|n,n,n,n}",fnBinsMult,fMinMult,fMaxMult);
1998  // 6-p correlations vs M:
1999  fIntFlowCorrelationsAllVsMPro[23] = new TProfile("six1n1n1n1n1n1n","#LT#LT6#GT#GT_{n,n,n|n,n,n}",fnBinsMult,fMinMult,fMaxMult);
2000  fIntFlowCorrelationsAllVsMPro[24] = new TProfile("six2n1n1n2n1n1n","#LT#LT6#GT#GT_{2n,n,n|2n,n,n}",fnBinsMult,fMinMult,fMaxMult);
2001  fIntFlowCorrelationsAllVsMPro[25] = new TProfile("six2n2n1n1n1n1n","#LT#LT6#GT#GT_{2n,2n|n,n,n,n}",fnBinsMult,fMinMult,fMaxMult);
2002  fIntFlowCorrelationsAllVsMPro[26] = new TProfile("six3n1n1n1n1n1n","#LT#LT6#GT#GT_{3n,n|n,n,n,n}",fnBinsMult,fMinMult,fMaxMult);
2003  // 7-p correlations vs M:
2004  fIntFlowCorrelationsAllVsMPro[28] = new TProfile("seven2n1n1n1n1n1n1n","#LT#LT7#GT#GT_{2n,n,n|n,n,n,n}",fnBinsMult,fMinMult,fMaxMult);
2005  // 8-p correlations vs M:
2006  fIntFlowCorrelationsAllVsMPro[30] = new TProfile("eight1n1n1n1n1n1n1n1n","#LT#LT8#GT#GT_{n,n,n,n|n,n,n,n}",fnBinsMult,fMinMult,fMaxMult);
2007  // EXTRA correlations vs M for v3{5} study (to be improved - put them in a right order somewhere):
2008  fIntFlowCorrelationsAllVsMPro[32] = new TProfile("four4n2n3n3n","#LT#LT4#GT#GT_{4n,2n|3n,3n}",fnBinsMult,fMinMult,fMaxMult);
2009  fIntFlowCorrelationsAllVsMPro[33] = new TProfile("five3n3n2n2n2n","#LT#LT5#GT#GT_{3n,3n|2n,2n,2n}",fnBinsMult,fMinMult,fMaxMult);
2010  // EXTRA correlations vs M for Teaney-Yan study (to be improved - put them in a right order somewhere):
2011  fIntFlowCorrelationsAllVsMPro[34] = new TProfile("two5n5n","#LT#LT2#GT#GT_{5n|5n}",fnBinsMult,fMinMult,fMaxMult);
2012  fIntFlowCorrelationsAllVsMPro[35] = new TProfile("two6n6n","#LT#LT2#GT#GT_{6n|6n}",fnBinsMult,fMinMult,fMaxMult);
2013  fIntFlowCorrelationsAllVsMPro[36] = new TProfile("three5n3n2n","#LT#LT3#GT#GT_{5n|3n,2n}",fnBinsMult,fMinMult,fMaxMult);
2014  fIntFlowCorrelationsAllVsMPro[37] = new TProfile("three5n4n1n","#LT#LT3#GT#GT_{5n|4n,1n}",fnBinsMult,fMinMult,fMaxMult);
2015  fIntFlowCorrelationsAllVsMPro[38] = new TProfile("three6n3n3n","#LT#LT3#GT#GT_{6n|3n,3n}",fnBinsMult,fMinMult,fMaxMult);
2016  fIntFlowCorrelationsAllVsMPro[39] = new TProfile("three6n4n2n","#LT#LT3#GT#GT_{6n|4n,2n}",fnBinsMult,fMinMult,fMaxMult);
2017  fIntFlowCorrelationsAllVsMPro[40] = new TProfile("three6n5n1n","#LT#LT3#GT#GT_{6n|5n,1n}",fnBinsMult,fMinMult,fMaxMult);
2018  fIntFlowCorrelationsAllVsMPro[41] = new TProfile("four6n3n2n1n","#LT#LT4#GT#GT_{6n|3n,2n,1n}",fnBinsMult,fMinMult,fMaxMult);
2019  fIntFlowCorrelationsAllVsMPro[42] = new TProfile("four3n2n3n2n","#LT#LT4#GT#GT_{3n,2n|3n,2n}",fnBinsMult,fMinMult,fMaxMult);
2020  fIntFlowCorrelationsAllVsMPro[43] = new TProfile("four4n1n3n2n","#LT#LT4#GT#GT_{4n,1n|3n,2n}",fnBinsMult,fMinMult,fMaxMult);
2021  fIntFlowCorrelationsAllVsMPro[44] = new TProfile("four3n3n3n3n","#LT#LT4#GT#GT_{3n,3n|3n,3n}",fnBinsMult,fMinMult,fMaxMult);
2022  fIntFlowCorrelationsAllVsMPro[45] = new TProfile("four4n2n3n3n","#LT#LT4#GT#GT_{4n,2n|3n,3n}",fnBinsMult,fMinMult,fMaxMult);
2023  fIntFlowCorrelationsAllVsMPro[46] = new TProfile("four5n1n3n3n","#LT#LT4#GT#GT_{5n,1n|3n,3n}",fnBinsMult,fMinMult,fMaxMult);
2024  fIntFlowCorrelationsAllVsMPro[47] = new TProfile("four4n2n4n2n","#LT#LT4#GT#GT_{4n,2n|4n,2n}",fnBinsMult,fMinMult,fMaxMult);
2025  fIntFlowCorrelationsAllVsMPro[48] = new TProfile("four5n1n4n2n","#LT#LT4#GT#GT_{5n,1n|4n,2n}",fnBinsMult,fMinMult,fMaxMult);
2026  fIntFlowCorrelationsAllVsMPro[49] = new TProfile("four5n3n1n1n","#LT#LT4#GT#GT_{5n|3n,1n,1n}",fnBinsMult,fMinMult,fMaxMult);
2027  fIntFlowCorrelationsAllVsMPro[50] = new TProfile("four5n2n2n1n","#LT#LT4#GT#GT_{5n|2n,2n,1n}",fnBinsMult,fMinMult,fMaxMult);
2028  fIntFlowCorrelationsAllVsMPro[51] = new TProfile("four5n1n5n1n","#LT#LT4#GT#GT_{5n,1n|5n,1n}",fnBinsMult,fMinMult,fMaxMult);
2029  fIntFlowCorrelationsAllVsMPro[52] = new TProfile("five3n3n3n2n1n","#LT#LT5#GT#GT_{3n,3n|3n,2n,1n}",fnBinsMult,fMinMult,fMaxMult);
2030  fIntFlowCorrelationsAllVsMPro[53] = new TProfile("five4n2n3n2n1n","#LT#LT5#GT#GT_{4n,2n|3n,2n,1n}",fnBinsMult,fMinMult,fMaxMult);
2031  fIntFlowCorrelationsAllVsMPro[54] = new TProfile("five3n2n3n1n1n","#LT#LT5#GT#GT_{3n,2n|3n,1n,1n}",fnBinsMult,fMinMult,fMaxMult);
2032  fIntFlowCorrelationsAllVsMPro[55] = new TProfile("five3n2n2n2n1n","#LT#LT5#GT#GT_{3n,2n|2n,2n,1n}",fnBinsMult,fMinMult,fMaxMult);
2033  fIntFlowCorrelationsAllVsMPro[56] = new TProfile("five5n1n3n2n1n","#LT#LT5#GT#GT_{5n,1n|3n,2n,1n}",fnBinsMult,fMinMult,fMaxMult);
2034  fIntFlowCorrelationsAllVsMPro[57] = new TProfile("six3n2n1n3n2n1n","#LT#LT6#GT#GT_{3n,2n,1n|3n,2n,1n}",fnBinsMult,fMinMult,fMaxMult);
2035  fIntFlowCorrelationsAllVsMPro[58] = new TProfile("four6n4n1n1n","#LT#LT4#GT#GT_{6n|4n,1n,1n}",fnBinsMult,fMinMult,fMaxMult);
2036  fIntFlowCorrelationsAllVsMPro[59] = new TProfile("four6n2n2n2n","#LT#LT4#GT#GT_{6n|2n,2n,2n}",fnBinsMult,fMinMult,fMaxMult);
2037  fIntFlowCorrelationsAllVsMPro[60] = new TProfile("five6n2n2n1n1n","#LT#LT5#GT#GT_{6n|2n,2n,1n,1n}",fnBinsMult,fMinMult,fMaxMult);
2038  fIntFlowCorrelationsAllVsMPro[61] = new TProfile("five4n1n1n3n3n","#LT#LT5#GT#GT_{4n,1n,1n|3n,3n}",fnBinsMult,fMinMult,fMaxMult);
2039  fIntFlowCorrelationsAllVsMPro[62] = new TProfile("six3n3n2n2n1n1n","#LT#LT6#GT#GT_{3n,3n|2n,2n,1n,1n}",fnBinsMult,fMinMult,fMaxMult);
2040  for(Int_t n=0;n<63;n++)
2041  {
2043  {
2044  fIntFlowCorrelationsAllVsMPro[n]->Sumw2();
2046  {
2047  fIntFlowCorrelationsAllVsMPro[n]->GetXaxis()->SetTitle("# RPs");
2049  {
2050  fIntFlowCorrelationsAllVsMPro[n]->GetXaxis()->SetTitle("Reference multiplicity (from ESD)");
2052  {
2053  fIntFlowCorrelationsAllVsMPro[n]->GetXaxis()->SetTitle("# POIs");
2054  }
2056  } // end of if(fIntFlowCorrelationsAllVsMPro[n])
2057  } // end of for(Int_t n=0;n<63;n++)
2058  } // end of if(fCalculateAllCorrelationsVsM)
2059  // when particle weights are used some extra correlations appear:
2061  {
2062  TString intFlowExtraCorrelationsProName = "fIntFlowExtraCorrelationsPro";
2063  intFlowExtraCorrelationsProName += fAnalysisLabel->Data();
2064  fIntFlowExtraCorrelationsPro = new TProfile(intFlowExtraCorrelationsProName.Data(),"Average extra correlations for all events",100,0,100,"s");
2065  fIntFlowExtraCorrelationsPro->SetTickLength(-0.01,"Y");
2066  fIntFlowExtraCorrelationsPro->SetMarkerStyle(25);
2067  fIntFlowExtraCorrelationsPro->SetLabelSize(0.03);
2068  fIntFlowExtraCorrelationsPro->SetLabelOffset(0.01,"Y");
2069  // extra 2-p correlations:
2070  (fIntFlowExtraCorrelationsPro->GetXaxis())->SetBinLabel(1,"<<w1^3 w2 cos(n*(phi1-phi2))>>");
2071  (fIntFlowExtraCorrelationsPro->GetXaxis())->SetBinLabel(2,"<<w1 w2 w3^2 cos(n*(phi1-phi2))>>");
2073  } // end of if(fUsePhiWeights||fUsePtWeights||fUseEtaWeights||fUseTrackWeights)
2074  // average product of correlations <2>, <4>, <6> and <8>:
2075  TString productFlag[6] = {"#LT#LT2#GT#LT4#GT#GT","#LT#LT2#GT#LT6#GT#GT","#LT#LT2#GT#LT8#GT#GT",
2076  "#LT#LT4#GT#LT6#GT#GT","#LT#LT4#GT#LT8#GT#GT","#LT#LT6#GT#LT8#GT#GT"};
2077  TString intFlowProductOfCorrelationsProName = "fIntFlowProductOfCorrelationsPro";
2078  intFlowProductOfCorrelationsProName += fAnalysisLabel->Data();
2079  fIntFlowProductOfCorrelationsPro = new TProfile(intFlowProductOfCorrelationsProName.Data(),"Average products of correlations",6,0,6);
2080  fIntFlowProductOfCorrelationsPro->SetTickLength(-0.01,"Y");
2081  fIntFlowProductOfCorrelationsPro->SetMarkerStyle(25);
2082  fIntFlowProductOfCorrelationsPro->SetLabelSize(0.05);
2083  fIntFlowProductOfCorrelationsPro->SetLabelOffset(0.01,"Y");
2084  for(Int_t b=0;b<6;b++)
2085  {
2086  (fIntFlowProductOfCorrelationsPro->GetXaxis())->SetBinLabel(b+1,productFlag[b].Data());
2087  }
2089  // average product of correlations <2>, <4>, <6> and <8> versus multiplicity
2090  // [0=<<2><4>>,1=<<2><6>>,2=<<2><8>>,3=<<4><6>>,4=<<4><8>>,5=<<6><8>>]
2092  {
2093  TString intFlowProductOfCorrelationsVsMProName = "fIntFlowProductOfCorrelationsVsMPro";
2094  intFlowProductOfCorrelationsVsMProName += fAnalysisLabel->Data();
2095  for(Int_t pi=0;pi<6;pi++)
2096  {
2097  fIntFlowProductOfCorrelationsVsMPro[pi] = new TProfile(Form("%s, %s",intFlowProductOfCorrelationsVsMProName.Data(),productFlag[pi].Data()),
2098  Form("%s versus multiplicity",productFlag[pi].Data()),
2101  {
2102  fIntFlowProductOfCorrelationsVsMPro[pi]->GetXaxis()->SetTitle("# RPs");
2104  {
2105  fIntFlowProductOfCorrelationsVsMPro[pi]->GetXaxis()->SetTitle("Reference multiplicity (from ESD)");
2107  {
2108  fIntFlowProductOfCorrelationsVsMPro[pi]->GetXaxis()->SetTitle("# POIs");
2109  }
2111  } // end of for(Int_t pi=0;pi<6;pi++)
2112  } // end of if(fCalculateCumulantsVsM)
2113  // average product of correction terms for NUA:
2114  TString intFlowProductOfCorrectionTermsForNUAProName = "fIntFlowProductOfCorrectionTermsForNUAPro";
2115  intFlowProductOfCorrectionTermsForNUAProName += fAnalysisLabel->Data();
2116  fIntFlowProductOfCorrectionTermsForNUAPro = new TProfile(intFlowProductOfCorrectionTermsForNUAProName.Data(),"Average products of correction terms for NUA",27,0,27);
2117  fIntFlowProductOfCorrectionTermsForNUAPro->SetTickLength(-0.01,"Y");
2118  fIntFlowProductOfCorrectionTermsForNUAPro->SetMarkerStyle(25);
2119  fIntFlowProductOfCorrectionTermsForNUAPro->SetLabelSize(0.03);
2120  fIntFlowProductOfCorrectionTermsForNUAPro->SetLabelOffset(0.01,"Y");
2121  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(1,"<<2><cos(#phi)>>");
2122  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(2,"<<2><sin(#phi)>>");
2123  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(3,"<<cos(#phi)><sin(#phi)>>");
2124  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(4,"Cov(<2>,<cos(#phi_{1}+#phi_{2})>)");
2125  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(5,"Cov(<2>,<sin(#phi_{1}+#phi_{2})>)");
2126  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(6,"Cov(<2>,<cos(#phi_{1}-#phi_{2}-#phi_{3})>)");
2127  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(7,"Cov(<2>,<sin(#phi_{1}-#phi_{2}-#phi_{3})>)");
2128  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(8,"Cov(<4>,<cos(#phi)>)");
2129  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(9,"Cov(<4>,<sin(#phi)>)");
2130  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(10,"Cov(<4>,<cos(#phi_{1}+#phi_{2})>)");
2131  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(11,"Cov(<4>,<sin(#phi_{1}+#phi_{2})>)");
2132  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(12,"Cov(<4>,<cos(#phi_{1}-#phi_{2}-#phi_{3})>>)");
2133  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(13,"Cov(<4>,<sin(#phi_{1}-#phi_{2}-#phi_{3})>>)");
2134  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(14,"Cov(<cos(#phi)>,<cos(#phi_{1}+#phi_{2})>)");
2135  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(15,"Cov(<cos(#phi)>,<sin(#phi_{1}+#phi_{2})>)");
2136  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(16,"Cov(<cos(#phi)>,<cos(#phi_{1}-#phi_{2}-#phi_{3})>)");
2137  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(17,"Cov(<cos(#phi)>,<sin(#phi_{1}-#phi_{2}-#phi_{3})>)");
2138  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(18,"Cov(<sin(#phi)>,<cos(#phi_{1}+#phi_{2})>)");
2139  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(19,"Cov(<sin(#phi)>,<sin(#phi_{1}+#phi_{2})>)");
2140  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(20,"Cov(<sin(#phi)>,<cos(#phi_{1}-#phi_{2}-#phi_{3})>)");
2141  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(21,"Cov(<sin(#phi)>,<sin(#phi_{1}-#phi_{2}-#phi_{3})>)");
2142  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(22,"Cov(<cos(#phi_{1}+#phi_{2})>,<sin(#phi_{1}+#phi_{2})>)");
2143  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(23,"Cov(<cos(#phi_{1}+#phi_{2})>,<cos(#phi_{1}-#phi_{2}-#phi_{3})>)");
2144  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(24,"Cov(<cos(#phi_{1}+#phi_{2})>,<sin(#phi_{1}-#phi_{2}-#phi_{3})>)");
2145  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(25,"Cov(<sin(#phi_{1}+#phi_{2})>,<cos(#phi_{1}-#phi_{2}-#phi_{3})>)");
2146  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(26,"Cov(<sin(#phi_{1}+#phi_{2})>,<sin(#phi_{1}-#phi_{2}-#phi_{3})>)");
2147  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(27,"Cov(<cos(#phi_{1}-#phi_{2}-#phi_{3}>,<sin(#phi_{1}-#phi_{2}-#phi_{3}>)");
2149  // average correction terms for non-uniform acceptance (with wrong errors!):
2150  for(Int_t sc=0;sc<2;sc++) // sin or cos terms
2151  {
2152  TString intFlowCorrectionTermsForNUAProName = "fIntFlowCorrectionTermsForNUAPro";
2153  intFlowCorrectionTermsForNUAProName += fAnalysisLabel->Data();
2154  fIntFlowCorrectionTermsForNUAPro[sc] = new TProfile(Form("%s: %s terms",intFlowCorrectionTermsForNUAProName.Data(),sinCosFlag[sc].Data()),Form("Correction terms for non-uniform acceptance (%s terms)",sinCosFlag[sc].Data()),4,0,4,"s");
2155  fIntFlowCorrectionTermsForNUAPro[sc]->SetTickLength(-0.01,"Y");
2156  fIntFlowCorrectionTermsForNUAPro[sc]->SetMarkerStyle(25);
2157  fIntFlowCorrectionTermsForNUAPro[sc]->SetLabelSize(0.05);
2158  fIntFlowCorrectionTermsForNUAPro[sc]->SetLabelOffset(0.01,"Y");
2159  (fIntFlowCorrectionTermsForNUAPro[sc]->GetXaxis())->SetBinLabel(1,Form("#LT#LT%s(n(#phi_{1}))#GT#GT",sinCosFlag[sc].Data()));
2160  (fIntFlowCorrectionTermsForNUAPro[sc]->GetXaxis())->SetBinLabel(2,Form("#LT#LT%s(n(#phi_{1}+#phi_{2}))#GT#GT",sinCosFlag[sc].Data()));
2161  (fIntFlowCorrectionTermsForNUAPro[sc]->GetXaxis())->SetBinLabel(3,Form("#LT#LT%s(n(#phi_{1}-#phi_{2}-#phi_{3}))#GT#GT",sinCosFlag[sc].Data()));
2162  (fIntFlowCorrectionTermsForNUAPro[sc]->GetXaxis())->SetBinLabel(4,Form("#LT#LT%s(n(2#phi_{1}-#phi_{2}))#GT#GT",sinCosFlag[sc].Data()));
2164  // versus multiplicity:
2166  {
2167  TString correctionTermFlag[4] = {"(n(phi1))","(n(phi1+phi2))","(n(phi1-phi2-phi3))","(n(2phi1-phi2))"}; // to be improved - hardwired 4
2168  for(Int_t ci=0;ci<4;ci++) // correction term index (to be improved - hardwired 4)
2169  {
2170  TString intFlowCorrectionTermsForNUAVsMProName = "fIntFlowCorrectionTermsForNUAVsMPro";
2171  intFlowCorrectionTermsForNUAVsMProName += fAnalysisLabel->Data();
2172  fIntFlowCorrectionTermsForNUAVsMPro[sc][ci] = new TProfile(Form("%s: #LT#LT%s%s#GT#GT",intFlowCorrectionTermsForNUAVsMProName.Data(),sinCosFlag[sc].Data(),correctionTermFlag[ci].Data()),Form("#LT#LT%s%s#GT#GT vs M",sinCosFlag[sc].Data(),correctionTermFlag[ci].Data()),fnBinsMult,fMinMult,fMaxMult,"s");
2174  }
2175  } // end of if(fCalculateCumulantsVsM)
2176  } // end of for(Int_t sc=0;sc<2;sc++)
2177 
2178  // d) Book histograms holding the final results:
2179  // average correlations <<2>>, <<4>>, <<6>> and <<8>> for all events (with correct errors!):
2180  TString intFlowCorrelationsHistName = "fIntFlowCorrelationsHist";
2181  intFlowCorrelationsHistName += fAnalysisLabel->Data();
2182  fIntFlowCorrelationsHist = new TH1D(intFlowCorrelationsHistName.Data(),"Average correlations for all events",4,0,4);
2183  fIntFlowCorrelationsHist->SetTickLength(-0.01,"Y");
2184  fIntFlowCorrelationsHist->SetMarkerStyle(25);
2185  fIntFlowCorrelationsHist->SetLabelSize(0.06);
2186  fIntFlowCorrelationsHist->SetLabelOffset(0.01,"Y");
2187  (fIntFlowCorrelationsHist->GetXaxis())->SetBinLabel(1,"#LT#LT2#GT#GT");
2188  (fIntFlowCorrelationsHist->GetXaxis())->SetBinLabel(2,"#LT#LT4#GT#GT");
2189  (fIntFlowCorrelationsHist->GetXaxis())->SetBinLabel(3,"#LT#LT6#GT#GT");
2190  (fIntFlowCorrelationsHist->GetXaxis())->SetBinLabel(4,"#LT#LT8#GT#GT");
2192  // average correlations <<2>>, <<4>>, <<6>> and <<8>> for all events (with correct errors!) vs M:
2194  {
2195  for(Int_t ci=0;ci<4;ci++) // correlation index
2196  {
2197  TString intFlowCorrelationsVsMHistName = "fIntFlowCorrelationsVsMHist";
2198  intFlowCorrelationsVsMHistName += fAnalysisLabel->Data();
2199  fIntFlowCorrelationsVsMHist[ci] = new TH1D(Form("%s, %s",intFlowCorrelationsVsMHistName.Data(),correlationFlag[ci].Data()),
2200  Form("%s vs multiplicity",correlationFlag[ci].Data()),
2202  fIntFlowCorrelationsVsMHist[ci]->GetYaxis()->SetTitle(correlationFlag[ci].Data());
2204  {
2205  fIntFlowCorrelationsVsMHist[ci]->GetXaxis()->SetTitle("# RPs");
2207  {
2208  fIntFlowCorrelationsVsMHist[ci]->GetXaxis()->SetTitle("Reference multiplicity (from ESD)");
2210  {
2211  fIntFlowCorrelationsVsMHist[ci]->GetXaxis()->SetTitle("# POIs");
2212  }
2214  } // end of for(Int_t ci=0;ci<4;ci++) // correlation index
2215  } // end of if(fCalculateCumulantsVsM)
2216  // average all correlations for all events (with correct errors!):
2217  TString intFlowCorrelationsAllHistName = "fIntFlowCorrelationsAllHist";
2218  intFlowCorrelationsAllHistName += fAnalysisLabel->Data();
2219  fIntFlowCorrelationsAllHist = new TH1D(intFlowCorrelationsAllHistName.Data(),"Average correlations for all events",34,0,34);
2220  fIntFlowCorrelationsAllHist->SetTickLength(-0.01,"Y");
2221  fIntFlowCorrelationsAllHist->SetMarkerStyle(25);
2222  fIntFlowCorrelationsAllHist->SetLabelSize(0.03);
2223  fIntFlowCorrelationsAllHist->SetLabelOffset(0.01,"Y");
2224  // 2-p correlations:
2225  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(1,"<<2>>_{n|n}");
2226  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(2,"<<2>>_{2n|2n}");
2227  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(3,"<<2>>_{3n|3n}");
2228  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(4,"<<2>>_{4n|4n}");
2229  // 3-p correlations:
2230  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(6,"<<3>>_{2n|n,n}");
2231  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(7,"<<3>>_{3n|2n,n}");
2232  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(8,"<<3>>_{4n|2n,2n}");
2233  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(9,"<<3>>_{4n|3n,n}");
2234  // 4-p correlations:
2235  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(11,"<<4>>_{n,n|n,n}");
2236  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(12,"<<4>>_{2n,n|2n,n}");
2237  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(13,"<<4>>_{2n,2n|2n,2n}");
2238  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(14,"<<4>>_{3n|n,n,n}");
2239  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(15,"<<4>>_{3n,n|3n,n}");
2240  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(16,"<<4>>_{3n,n|2n,2n}");
2241  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(17,"<<4>>_{4n|2n,n,n}");
2242  // 5-p correlations:
2243  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(19,"<<5>>_{2n|n,n,n,n}");
2244  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(20,"<<5>>_{2n,2n|2n,n,n}");
2245  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(21,"<<5>>_{3n,n|2n,n,n}");
2246  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(22,"<<5>>_{4n|n,n,n,n}");
2247  // 6-p correlations:
2248  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(24,"<<6>>_{n,n,n|n,n,n}");
2249  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(25,"<<6>>_{2n,n,n|2n,n,n}");
2250  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(26,"<<6>>_{2n,2n|n,n,n,n}");
2251  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(27,"<<6>>_{3n,n|n,n,n,n}");
2252  // 7-p correlations:
2253  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(29,"<<7>>_{2n,n,n|n,n,n,n}");
2254  // 8-p correlations:
2255  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(31,"<<8>>_{n,n,n,n|n,n,n,n}");
2257  // average correction terms for non-uniform acceptance (with correct errors!):
2258  for(Int_t sc=0;sc<2;sc++) // sin or cos terms
2259  {
2260  TString intFlowCorrectionTermsForNUAHistName = "fIntFlowCorrectionTermsForNUAHist";
2261  intFlowCorrectionTermsForNUAHistName += fAnalysisLabel->Data();
2262  fIntFlowCorrectionTermsForNUAHist[sc] = new TH1D(Form("%s: %s terms",intFlowCorrectionTermsForNUAHistName.Data(),sinCosFlag[sc].Data()),Form("Correction terms for non-uniform acceptance (%s terms)",sinCosFlag[sc].Data()),4,0,4);
2263  fIntFlowCorrectionTermsForNUAHist[sc]->SetTickLength(-0.01,"Y");
2264  fIntFlowCorrectionTermsForNUAHist[sc]->SetMarkerStyle(25);
2265  fIntFlowCorrectionTermsForNUAHist[sc]->SetLabelSize(0.05);
2266  fIntFlowCorrectionTermsForNUAHist[sc]->SetLabelOffset(0.01,"Y");
2267  (fIntFlowCorrectionTermsForNUAHist[sc]->GetXaxis())->SetBinLabel(1,Form("#LT#LT%s(n(#phi_{1}))#GT#GT",sinCosFlag[sc].Data()));
2268  (fIntFlowCorrectionTermsForNUAHist[sc]->GetXaxis())->SetBinLabel(2,Form("#LT#LT%s(n(#phi_{1}+#phi_{2}))#GT#GT",sinCosFlag[sc].Data()));
2269  (fIntFlowCorrectionTermsForNUAHist[sc]->GetXaxis())->SetBinLabel(3,Form("#LT#LT%s(n(#phi_{1}-#phi_{2}-#phi_{3}))#GT#GT",sinCosFlag[sc].Data()));
2270  (fIntFlowCorrectionTermsForNUAHist[sc]->GetXaxis())->SetBinLabel(4,Form("#LT#LT%s(n(2#phi_{1}-#phi_{2}))#GT#GT",sinCosFlag[sc].Data()));
2272  } // end of for(Int_t sc=0;sc<2;sc++)
2273  // covariances (multiplied with weight dependent prefactor):
2274  TString intFlowCovariancesName = "fIntFlowCovariances";
2275  intFlowCovariancesName += fAnalysisLabel->Data();
2276  fIntFlowCovariances = new TH1D(intFlowCovariancesName.Data(),"Covariances (multiplied with weight dependent prefactor)",6,0,6);
2277  fIntFlowCovariances->SetLabelSize(0.04);
2278  fIntFlowCovariances->SetMarkerStyle(25);
2279  (fIntFlowCovariances->GetXaxis())->SetBinLabel(1,"Cov(#LT2#GT,#LT4#GT)");
2280  (fIntFlowCovariances->GetXaxis())->SetBinLabel(2,"Cov(#LT2#GT,#LT6#GT)");
2281  (fIntFlowCovariances->GetXaxis())->SetBinLabel(3,"Cov(#LT2#GT,#LT8#GT)");
2282  (fIntFlowCovariances->GetXaxis())->SetBinLabel(4,"Cov(#LT4#GT,#LT6#GT)");
2283  (fIntFlowCovariances->GetXaxis())->SetBinLabel(5,"Cov(#LT4#GT,#LT8#GT)");
2284  (fIntFlowCovariances->GetXaxis())->SetBinLabel(6,"Cov(#LT6#GT,#LT8#GT)");
2286  // sum of linear and quadratic event weights for <2>, <4>, <6> and <8>:
2287  TString intFlowSumOfEventWeightsName = "fIntFlowSumOfEventWeights";
2288  intFlowSumOfEventWeightsName += fAnalysisLabel->Data();
2289  for(Int_t power=0;power<2;power++)
2290  {
2291  fIntFlowSumOfEventWeights[power] = new TH1D(Form("%s: %s",intFlowSumOfEventWeightsName.Data(),powerFlag[power].Data()),Form("Sum of %s event weights for correlations",powerFlag[power].Data()),4,0,4);
2292  fIntFlowSumOfEventWeights[power]->SetLabelSize(0.04);
2293  fIntFlowSumOfEventWeights[power]->SetMarkerStyle(25);
2294  if(power == 0)
2295  {
2296  (fIntFlowSumOfEventWeights[power]->GetXaxis())->SetBinLabel(1,"#sum_{i=1}^{N} w_{#LT2#GT}");
2297  (fIntFlowSumOfEventWeights[power]->GetXaxis())->SetBinLabel(2,"#sum_{i=1}^{N} w_{#LT4#GT}");
2298  (fIntFlowSumOfEventWeights[power]->GetXaxis())->SetBinLabel(3,"#sum_{i=1}^{N} w_{#LT6#GT}");
2299  (fIntFlowSumOfEventWeights[power]->GetXaxis())->SetBinLabel(4,"#sum_{i=1}^{N} w_{#LT8#GT}");
2300  } else if (power == 1)
2301  {
2302  (fIntFlowSumOfEventWeights[power]->GetXaxis())->SetBinLabel(1,"#sum_{i=1}^{N} w_{#LT2#GT}^{2}");
2303  (fIntFlowSumOfEventWeights[power]->GetXaxis())->SetBinLabel(2,"#sum_{i=1}^{N} w_{#LT4#GT}^{2}");
2304  (fIntFlowSumOfEventWeights[power]->GetXaxis())->SetBinLabel(3,"#sum_{i=1}^{N} w_{#LT6#GT}^{2}");
2305  (fIntFlowSumOfEventWeights[power]->GetXaxis())->SetBinLabel(4,"#sum_{i=1}^{N} w_{#LT8#GT}^{2}");
2306  }
2308  }
2309  // sum of products of event weights for correlations <2>, <4>, <6> and <8>:
2310  TString intFlowSumOfProductOfEventWeightsName = "fIntFlowSumOfProductOfEventWeights";
2311  intFlowSumOfProductOfEventWeightsName += fAnalysisLabel->Data();
2312  fIntFlowSumOfProductOfEventWeights = new TH1D(intFlowSumOfProductOfEventWeightsName.Data(),"Sum of product of event weights for correlations",6,0,6);
2313  fIntFlowSumOfProductOfEventWeights->SetLabelSize(0.04);
2314  fIntFlowSumOfProductOfEventWeights->SetMarkerStyle(25);
2315  (fIntFlowSumOfProductOfEventWeights->GetXaxis())->SetBinLabel(1,"#sum_{i=1}^{N} w_{#LT2#GT} w_{#LT4#GT}");
2316  (fIntFlowSumOfProductOfEventWeights->GetXaxis())->SetBinLabel(2,"#sum_{i=1}^{N} w_{#LT2#GT} w_{#LT6#GT}");
2317  (fIntFlowSumOfProductOfEventWeights->GetXaxis())->SetBinLabel(3,"#sum_{i=1}^{N} w_{#LT2#GT} w_{#LT8#GT}");
2318  (fIntFlowSumOfProductOfEventWeights->GetXaxis())->SetBinLabel(4,"#sum_{i=1}^{N} w_{#LT4#GT} w_{#LT6#GT}");
2319  (fIntFlowSumOfProductOfEventWeights->GetXaxis())->SetBinLabel(5,"#sum_{i=1}^{N} w_{#LT4#GT} w_{#LT8#GT}");
2320  (fIntFlowSumOfProductOfEventWeights->GetXaxis())->SetBinLabel(6,"#sum_{i=1}^{N} w_{#LT6#GT} w_{#LT8#GT}");
2322  // final result for covariances of correlations (multiplied with weight dependent prefactor) versus M
2323  // [0=Cov(2,4),1=Cov(2,6),2=Cov(2,8),3=Cov(4,6),4=Cov(4,8),5=Cov(6,8)]:
2325  {
2326  TString intFlowCovariancesVsMName = "fIntFlowCovariancesVsM";
2327  intFlowCovariancesVsMName += fAnalysisLabel->Data();
2328  TString covarianceFlag[6] = {"Cov(<2>,<4>)","Cov(<2>,<6>)","Cov(<2>,<8>)","Cov(<4>,<6>)","Cov(<4>,<8>)","Cov(<6>,<8>)"};
2329  for(Int_t ci=0;ci<6;ci++)
2330  {
2331  fIntFlowCovariancesVsM[ci] = new TH1D(Form("%s, %s",intFlowCovariancesVsMName.Data(),covarianceFlag[ci].Data()),
2332  Form("%s vs multiplicity",covarianceFlag[ci].Data()),
2334  fIntFlowCovariancesVsM[ci]->GetYaxis()->SetTitle(covarianceFlag[ci].Data());
2336  {
2337  fIntFlowCovariancesVsM[ci]->GetXaxis()->SetTitle("# RPs");
2339  {
2340  fIntFlowCovariancesVsM[ci]->GetXaxis()->SetTitle("Reference multiplicity (from ESD)");
2342  {
2343  fIntFlowCovariancesVsM[ci]->GetXaxis()->SetTitle("# POIs");
2344  }
2346  }
2347  } // end of if(fCalculateCumulantsVsM)
2348  // sum of linear and quadratic event weights for <2>, <4>, <6> and <8> versus multiplicity
2349  // [0=sum{w_{<2>}},1=sum{w_{<4>}},2=sum{w_{<6>}},3=sum{w_{<8>}}][0=linear 1,1=quadratic]:
2351  {
2352  TString intFlowSumOfEventWeightsVsMName = "fIntFlowSumOfEventWeightsVsM";
2353  intFlowSumOfEventWeightsVsMName += fAnalysisLabel->Data();
2354  TString sumFlag[2][4] = {{"#sum_{i=1}^{N} w_{<2>}","#sum_{i=1}^{N} w_{<4>}","#sum_{i=1}^{N} w_{<6>}","#sum_{i=1}^{N} w_{<8>}"},
2355  {"#sum_{i=1}^{N} w_{<2>}^{2}","#sum_{i=1}^{N} w_{<4>}^{2}","#sum_{i=1}^{N} w_{<6>}^{2}","#sum_{i=1}^{N} w_{<8>}^{2}"}};
2356  for(Int_t si=0;si<4;si++)
2357  {
2358  for(Int_t power=0;power<2;power++)
2359  {
2360  fIntFlowSumOfEventWeightsVsM[si][power] = new TH1D(Form("%s, %s",intFlowSumOfEventWeightsVsMName.Data(),sumFlag[power][si].Data()),
2361  Form("%s vs multiplicity",sumFlag[power][si].Data()),
2363  fIntFlowSumOfEventWeightsVsM[si][power]->GetYaxis()->SetTitle(sumFlag[power][si].Data());
2365  {
2366  fIntFlowSumOfEventWeightsVsM[si][power]->GetXaxis()->SetTitle("# RPs");
2368  {
2369  fIntFlowSumOfEventWeightsVsM[si][power]->GetXaxis()->SetTitle("Reference multiplicity (from ESD)");
2371  {
2372  fIntFlowSumOfEventWeightsVsM[si][power]->GetXaxis()->SetTitle("# POIs");
2373  }
2375  } // end of for(Int_t power=0;power<2;power++)
2376  } // end of for(Int_t si=0;si<4;si++)
2377  } // end of if(fCalculateCumulantsVsM)
2378  // sum of products of event weights for correlations <2>, <4>, <6> and <8> vs M
2379  // [0=sum{w_{<2>}w_{<4>}},1=sum{w_{<2>}w_{<6>}},2=sum{w_{<2>}w_{<8>}},
2380  // 3=sum{w_{<4>}w_{<6>}},4=sum{w_{<4>}w_{<8>}},5=sum{w_{<6>}w_{<8>}}]:
2382  {
2383  TString intFlowSumOfProductOfEventWeightsVsMName = "fIntFlowSumOfProductOfEventWeightsVsM";
2384  intFlowSumOfProductOfEventWeightsVsMName += fAnalysisLabel->Data();
2385  TString sopowFlag[6] = {"#sum_{i=1}^{N} w_{<2>} w_{<4>}","#sum_{i=1}^{N} w_{<2>} w_{<6>}","#sum_{i=1}^{N} w_{<2>} w_{<8>}",
2386  "#sum_{i=1}^{N} w_{<4>} w_{<6>}","#sum_{i=1}^{N} w_{<4>} w_{<8>}","#sum_{i=1}^{N} w_{<6>} w_{<8>}"};
2387  for(Int_t pi=0;pi<6;pi++)
2388  {
2389  fIntFlowSumOfProductOfEventWeightsVsM[pi] = new TH1D(Form("%s, %s",intFlowSumOfProductOfEventWeightsVsMName.Data(),sopowFlag[pi].Data()),
2390  Form("%s versus multiplicity",sopowFlag[pi].Data()),
2393  {
2394  fIntFlowSumOfProductOfEventWeightsVsM[pi]->GetXaxis()->SetTitle("# RPs");
2396  {
2397  fIntFlowSumOfProductOfEventWeightsVsM[pi]->GetXaxis()->SetTitle("Reference multiplicity (from ESD)");
2399  {
2400  fIntFlowSumOfProductOfEventWeightsVsM[pi]->GetXaxis()->SetTitle("# POIs");
2401  }
2402  fIntFlowSumOfProductOfEventWeightsVsM[pi]->GetYaxis()->SetTitle(sopowFlag[pi].Data());
2404  } // end of for(Int_t pi=0;pi<6;pi++)
2405  } // end of if(fCalculateCumulantsVsM)
2406  // covariances of NUA terms (multiplied with weight dependent prefactor):
2407  TString intFlowCovariancesNUAName = "fIntFlowCovariancesNUA";
2408  intFlowCovariancesNUAName += fAnalysisLabel->Data();
2409  fIntFlowCovariancesNUA = new TH1D(intFlowCovariancesNUAName.Data(),"Covariances for NUA (multiplied with weight dependent prefactor)",27,0,27);
2410  fIntFlowCovariancesNUA->SetLabelSize(0.04);
2411  fIntFlowCovariancesNUA->SetMarkerStyle(25);
2412  fIntFlowCovariancesNUA->GetXaxis()->SetLabelSize(0.02);
2413  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(1,"Cov(<2>,<cos(#phi)>");
2414  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(2,"Cov(<2>,<sin(#phi)>)");
2415  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(3,"Cov(<cos(#phi)>,<sin(#phi)>)");
2416  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(4,"Cov(<2>,<cos(#phi_{1}+#phi_{2})>)");
2417  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(5,"Cov(<2>,<sin(#phi_{1}+#phi_{2})>)");
2418  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(6,"Cov(<2>,<cos(#phi_{1}-#phi_{2}-#phi_{3})>)");
2419  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(7,"Cov(<2>,<sin(#phi_{1}-#phi_{2}-#phi_{3})>)");
2420  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(8,"Cov(<4>,<cos(#phi)>)");
2421  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(9,"Cov(<4>,<sin(#phi)>)");
2422  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(10,"Cov(<4>,<cos(#phi_{1}+#phi_{2})>)");
2423  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(11,"Cov(<4>,<sin(#phi_{1}+#phi_{2})>)");
2424  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(12,"Cov(<4>,<cos(#phi_{1}-#phi_{2}-#phi_{3})>>)");
2425  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(13,"Cov(<4>,<sin(#phi_{1}-#phi_{2}-#phi_{3})>>)");
2426  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(14,"Cov(<cos(#phi)>,<cos(#phi_{1}+#phi_{2})>)");
2427  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(15,"Cov(<cos(#phi)>,<sin(#phi_{1}+#phi_{2})>)");
2428  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(16,"Cov(<cos(#phi)>,<cos(#phi_{1}-#phi_{2}-#phi_{3})>)");
2429  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(17,"Cov(<cos(#phi)>,<sin(#phi_{1}-#phi_{2}-#phi_{3})>)");
2430  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(18,"Cov(<sin(#phi)>,<cos(#phi_{1}+#phi_{2})>)");
2431  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(19,"Cov(<sin(#phi)>,<sin(#phi_{1}+#phi_{2})>)");
2432  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(20,"Cov(<sin(#phi)>,<cos(#phi_{1}-#phi_{2}-#phi_{3})>)");
2433  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(21,"Cov(<sin(#phi)>,<sin(#phi_{1}-#phi_{2}-#phi_{3})>)");
2434  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(22,"Cov(<cos(#phi_{1}+#phi_{2})>,<sin(#phi_{1}+#phi_{2})>)");
2435  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(23,"Cov(<cos(#phi_{1}+#phi_{2})>,<cos(#phi_{1}-#phi_{2}-#phi_{3})>)");
2436  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(24,"Cov(<cos(#phi_{1}+#phi_{2})>,<sin(#phi_{1}-#phi_{2}-#phi_{3})>)");
2437  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(25,"Cov(<sin(#phi_{1}+#phi_{2})>,<cos(#phi_{1}-#phi_{2}-#phi_{3})>)");
2438  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(26,"Cov(<sin(#phi_{1}+#phi_{2})>,<sin(#phi_{1}-#phi_{2}-#phi_{3})>)");
2439  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(27,"Cov(<cos(#phi_{1}-#phi_{2}-#phi_{3}>,<sin(#phi_{1}-#phi_{2}-#phi_{3}>)");
2441  // sum of linear and quadratic event weights for NUA terms:
2442  TString intFlowSumOfEventWeightsNUAName = "fIntFlowSumOfEventWeightsNUA";
2443  intFlowSumOfEventWeightsNUAName += fAnalysisLabel->Data();
2444  for(Int_t sc=0;sc<2;sc++)
2445  {
2446  for(Int_t power=0;power<2;power++)
2447  {
2448  fIntFlowSumOfEventWeightsNUA[sc][power] = new TH1D(Form("%s: %s, %s",intFlowSumOfEventWeightsNUAName.Data(),powerFlag[power].Data(),sinCosFlag[sc].Data()),Form("Sum of %s event weights for NUA %s terms",powerFlag[power].Data(),sinCosFlag[sc].Data()),4,0,4); // to be improved - 4
2449  fIntFlowSumOfEventWeightsNUA[sc][power]->SetLabelSize(0.05);
2450  fIntFlowSumOfEventWeightsNUA[sc][power]->SetMarkerStyle(25);
2451  if(power == 0)
2452  {
2453  (fIntFlowSumOfEventWeightsNUA[sc][power]->GetXaxis())->SetBinLabel(1,Form("#sum_{i=1}^{N} w_{<%s(#phi)>}",sinCosFlag[sc].Data()));
2454  (fIntFlowSumOfEventWeightsNUA[sc][power]->GetXaxis())->SetBinLabel(2,Form("#sum_{i=1}^{N} w_{<%s(#phi_{1}+#phi_{2})>}",sinCosFlag[sc].Data()));
2455  (fIntFlowSumOfEventWeightsNUA[sc][power]->GetXaxis())->SetBinLabel(3,Form("#sum_{i=1}^{N} w_{<%s(#phi_{1}-#phi_{2}-#phi_{3})>}",sinCosFlag[sc].Data()));
2456  (fIntFlowSumOfEventWeightsNUA[sc][power]->GetXaxis())->SetBinLabel(4,Form("#sum_{i=1}^{N} w_{<%s(2#phi_{1}-#phi_{2})>}",sinCosFlag[sc].Data()));
2457  } else if(power == 1)
2458  {
2459  (fIntFlowSumOfEventWeightsNUA[sc][power]->GetXaxis())->SetBinLabel(1,Form("#sum_{i=1}^{N} w_{<%s(#phi)>}^{2}",sinCosFlag[sc].Data()));
2460  (fIntFlowSumOfEventWeightsNUA[sc][power]->GetXaxis())->SetBinLabel(2,Form("#sum_{i=1}^{N} w_{<%s(#phi_{1}+#phi_{2})>}^{2}",sinCosFlag[sc].Data()));
2461  (fIntFlowSumOfEventWeightsNUA[sc][power]->GetXaxis())->SetBinLabel(3,Form("#sum_{i=1}^{N} w_{<%s(#phi_{1}-#phi_{2}-#phi_{3})>}^{2}",sinCosFlag[sc].Data()));
2462  (fIntFlowSumOfEventWeightsNUA[sc][power]->GetXaxis())->SetBinLabel(4,Form("#sum_{i=1}^{N} w_{<%s(2#phi_{1}-#phi_{2})>}^{2}",sinCosFlag[sc].Data()));
2463  }
2465  }
2466  }
2467  // sum of products of event weights for NUA terms:
2468  TString intFlowSumOfProductOfEventWeightsNUAName = "fIntFlowSumOfProductOfEventWeightsNUA";
2469  intFlowSumOfProductOfEventWeightsNUAName += fAnalysisLabel->Data();
2470  fIntFlowSumOfProductOfEventWeightsNUA = new TH1D(intFlowSumOfProductOfEventWeightsNUAName.Data(),"Sum of product of event weights for NUA terms",27,0,27);
2471  fIntFlowSumOfProductOfEventWeightsNUA->SetLabelSize(0.02);
2472  fIntFlowSumOfProductOfEventWeightsNUA->SetMarkerStyle(25);
2473  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(1,"#sum_{i=1}^{N} w_{#LT2#GT} w_{#LTcos(#phi)#GT}");
2474  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(2,"#sum_{i=1}^{N} w_{#LT2#GT} w_{#LTsin(#phi)#GT}");
2475  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(3,"#sum_{i=1}^{N} w_{#LTcos(#phi)#GT} w_{#LTsin(#phi)#GT}");
2476  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(4,"#sum_{i=1}^{N} w_{#LT2#GT} w_{#LTcos(#phi_{1}+#phi_{2})#GT}");
2477  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(5,"#sum_{i=1}^{N} w_{#LT2#GT} w_{#LTsin(#phi_{1}+#phi_{2})#GT}");
2478  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(6,"#sum_{i=1}^{N} w_{#LT2#GT} w_{#LTcos(#phi_{1}-#phi_{2}-#phi_{3})#GT}");
2479  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(7,"#sum_{i=1}^{N} w_{#LT2#GT} w_{#LTsin(#phi_{1}-#phi_{2}-#phi_{3})#GT}");
2480  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(8,"#sum_{i=1}^{N} w_{#LT4#GT} w_{#LTcos(#phi)#GT}");
2481  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(9,"#sum_{i=1}^{N} w_{#LT4#GT} w_{#LTsin(#phi)#GT}");
2482  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(10,"#sum_{i=1}^{N} w_{#LT4#GT} w_{#LTcos(#phi_{1}+#phi_{2})#GT}");
2483  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(11,"#sum_{i=1}^{N} w_{#LT4#GT} w_{#LTsin(#phi_{1}+#phi_{2})#GT}");
2484  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(12,"#sum_{i=1}^{N} w_{#LT4#GT} w_{#LTcos(#phi_{1}-#phi_{2}-#phi_{3})#GT}");
2485  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(13,"#sum_{i=1}^{N} w_{#LT4#GT} w_{#LTsin(#phi_{1}-#phi_{2}-#phi_{3})#GT}");
2486  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(14,"#sum_{i=1}^{N} w_{#LTcos(#phi)#GT} w_{#LTcos(#phi_{1}+#phi_{2})#GT}");
2487  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(15,"#sum_{i=1}^{N} w_{#LTcos(#phi)#GT} w_{#LTsin(#phi_{1}+#phi_{2})#GT}");
2488  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(16,"#sum_{i=1}^{N} w_{#LTcos(#phi)#GT} w_{#LTcos(#phi_{1}-#phi_{2}-#phi_{3})#GT}");
2489  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(17,"#sum_{i=1}^{N} w_{#LTcos(#phi)#GT} w_{#LTsin(#phi_{1}-#phi_{2}-#phi_{3})#GT}");
2490  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(18,"#sum_{i=1}^{N} w_{#LTsin(#phi)#GT} w_{#LTcos(#phi_{1}+#phi_{2})#GT}");
2491  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(19,"#sum_{i=1}^{N} w_{#LTsin(#phi)#GT} w_{#LTsin(#phi_{1}+#phi_{2})#GT}");
2492  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(20,"#sum_{i=1}^{N} w_{#LTsin(#phi)#GT} w_{#LTcos(#phi_{1}-#phi_{2}-#phi_{3})#GT}");
2493  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(21,"#sum_{i=1}^{N} w_{#LTsin(#phi)#GT} w_{#LTsin(#phi_{1}-#phi_{2}-#phi_{3})#GT}");
2494  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(22,"#sum_{i=1}^{N} w_{#LTcos(#phi_{1}+#phi_{2})#GT} w_{#LTsin(#phi_{1}+#phi_{2})#GT}");
2495  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(23,"#sum_{i=1}^{N} w_{#LTcos(#phi_{1}+#phi_{2})#GT} w_{#LTcos(#phi_{1}-#phi_{2}-#phi_{3})#GT}");
2496  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(24,"#sum_{i=1}^{N} w_{#LTcos(#phi_{1}+#phi_{2})#GT} w_{#LTsin(#phi_{1}-#phi_{2}-#phi_{3})#GT}");
2497  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(25,"#sum_{i=1}^{N} w_{#LTsin(#phi_{1}+#phi_{2})#GT} w_{#LTcos(#phi_{1}-#phi_{2}-#phi_{3})#GT}");
2498  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(26,"#sum_{i=1}^{N} w_{#LTsin(#phi_{1}+#phi_{2})#GT} w_{#LTsin(#phi_{1}-#phi_{2}-#phi_{3})#GT}");
2499  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(27,"#sum_{i=1}^{N} w_{#LTcos(#phi_{1}-#phi_{2}-#phi_{3})#GT} w_{#LTsin(#phi_{1}-#phi_{2}-#phi_{3})#GT}");
2501  // Final results for reference Q-cumulants:
2502  TString cumulantFlag[4] = {"QC{2}","QC{4}","QC{6}","QC{8}"};
2503  TString intFlowQcumulantsName = "fIntFlowQcumulants";
2504  intFlowQcumulantsName += fAnalysisLabel->Data();
2505  fIntFlowQcumulants = new TH1D(intFlowQcumulantsName.Data(),"Reference Q-cumulants",4,0,4);
2507  {
2508  fIntFlowQcumulants->SetTitle("Reference Q-cumulants (error from non-isotropic terms also propagated)");
2509  }
2510  fIntFlowQcumulants->SetLabelSize(0.05);
2511  fIntFlowQcumulants->SetMarkerStyle(25);
2512  for(Int_t b=0;b<4;b++)
2513  {
2514  (fIntFlowQcumulants->GetXaxis())->SetBinLabel(b+1,cumulantFlag[b].Data());
2515  }
2517  // Final results for reference Q-cumulants rebinned in M:
2519  {
2520  TString intFlowQcumulantsRebinnedInMName = "fIntFlowQcumulantsRebinnedInM";
2521  intFlowQcumulantsRebinnedInMName += fAnalysisLabel->Data();
2522  fIntFlowQcumulantsRebinnedInM = new TH1D(intFlowQcumulantsRebinnedInMName.Data(),"Reference Q-cumulants rebinned in M",4,0,4);
2523  fIntFlowQcumulantsRebinnedInM->SetLabelSize(0.05);
2524  fIntFlowQcumulantsRebinnedInM->SetMarkerStyle(25);
2525  for(Int_t b=0;b<4;b++)
2526  {
2527  (fIntFlowQcumulantsRebinnedInM->GetXaxis())->SetBinLabel(b+1,cumulantFlag[b].Data());
2528  }
2530  } // end of if(fCalculateCumulantsVsM)
2531  // Ratio between error squared: with/without non-isotropic terms:
2532  TString intFlowQcumulantsErrorSquaredRatioName = "fIntFlowQcumulantsErrorSquaredRatio";
2533  intFlowQcumulantsErrorSquaredRatioName += fAnalysisLabel->Data();
2534  fIntFlowQcumulantsErrorSquaredRatio = new TH1D(intFlowQcumulantsErrorSquaredRatioName.Data(),"Error squared of reference Q-cumulants: #frac{with NUA terms}{without NUA terms}",4,0,4);
2535  fIntFlowQcumulantsErrorSquaredRatio->SetLabelSize(0.05);
2536  fIntFlowQcumulantsErrorSquaredRatio->SetMarkerStyle(25);
2537  for(Int_t b=0;b<4;b++)
2538  {
2539  (fIntFlowQcumulantsErrorSquaredRatio->GetXaxis())->SetBinLabel(b+1,cumulantFlag[b].Data());
2540  }
2542  // final results for integrated Q-cumulants versus multiplicity:
2544  {
2545  TString intFlowQcumulantsVsMName = "fIntFlowQcumulantsVsM";
2546  intFlowQcumulantsVsMName += fAnalysisLabel->Data();
2547  for(Int_t co=0;co<4;co++) // cumulant order
2548  {
2549  fIntFlowQcumulantsVsM[co] = new TH1D(Form("%s, %s",intFlowQcumulantsVsMName.Data(),cumulantFlag[co].Data()),
2550  Form("%s vs multiplicity",cumulantFlag[co].Data()),
2553  {
2554  fIntFlowQcumulantsVsM[co]->GetXaxis()->SetTitle("# RPs");
2556  {
2557  fIntFlowQcumulantsVsM[co]->GetXaxis()->SetTitle("Reference multiplicity (from ESD)");
2559  {
2560  fIntFlowQcumulantsVsM[co]->GetXaxis()->SetTitle("# POIs");
2561  }
2562  fIntFlowQcumulantsVsM[co]->GetYaxis()->SetTitle(cumulantFlag[co].Data());
2564  } // end of for(Int_t co=0;co<4;co++) // cumulant order
2565  } // end of if(fCalculateCumulantsVsM)
2566  // final integrated flow estimates from Q-cumulants:
2567  TString flowFlag[4] = {Form("v_{%d}{2,QC}",fHarmonic),Form("v_{%d}{4,QC}",fHarmonic),Form("v_{%d}{6,QC}",fHarmonic),Form("v_{%d}{8,QC}",fHarmonic)};
2568  TString intFlowName = "fIntFlow";
2569  intFlowName += fAnalysisLabel->Data();
2570  // integrated flow from Q-cumulants:
2571  fIntFlow = new TH1D(intFlowName.Data(),"Reference flow estimates from Q-cumulants",4,0,4);
2572  fIntFlow->SetLabelSize(0.05);
2573  fIntFlow->SetMarkerStyle(25);
2574  for(Int_t b=0;b<4;b++)
2575  {
2576  (fIntFlow->GetXaxis())->SetBinLabel(b+1,flowFlag[b].Data());
2577  }
2578  fIntFlowResults->Add(fIntFlow);
2579  // Reference flow vs M rebinned in one huge bin:
2581  {
2582  TString intFlowRebinnedInMName = "fIntFlowRebinnedInM";
2583  intFlowRebinnedInMName += fAnalysisLabel->Data();
2584  fIntFlowRebinnedInM = new TH1D(intFlowRebinnedInMName.Data(),"Reference flow estimates from Q-cumulants (rebinned in M)",4,0,4);
2585  fIntFlowRebinnedInM->SetLabelSize(0.05);
2586  fIntFlowRebinnedInM->SetMarkerStyle(25);
2587  for(Int_t b=0;b<4;b++)
2588  {
2589  (fIntFlowRebinnedInM->GetXaxis())->SetBinLabel(b+1,flowFlag[b].Data());
2590  }
2592  }
2593  // integrated flow from Q-cumulants: versus multiplicity:
2595  {
2596  TString intFlowVsMName = "fIntFlowVsM";
2597  intFlowVsMName += fAnalysisLabel->Data();
2598  for(Int_t co=0;co<4;co++) // cumulant order
2599  {
2600  fIntFlowVsM[co] = new TH1D(Form("%s, %s",intFlowVsMName.Data(),flowFlag[co].Data()),
2601  Form("%s vs multiplicity",flowFlag[co].Data()),
2604  {
2605  fIntFlowVsM[co]->GetXaxis()->SetTitle("# RPs");
2607  {
2608  fIntFlowVsM[co]->GetXaxis()->SetTitle("Reference multiplicity (from ESD)");
2610  {
2611  fIntFlowVsM[co]->GetXaxis()->SetTitle("# POIs");
2612  }
2613  fIntFlowVsM[co]->GetYaxis()->SetTitle(flowFlag[co].Data());
2614  fIntFlowResults->Add(fIntFlowVsM[co]);
2615  } // end of for(Int_t co=0;co<4;co++) // cumulant order
2616  } // end of if(fCalculateCumulantsVsM)
2617  // quantifying detector effects effects to correlations:
2618  TString intFlowDetectorBiasName = "fIntFlowDetectorBias";
2619  intFlowDetectorBiasName += fAnalysisLabel->Data();
2620  fIntFlowDetectorBias = new TH1D(intFlowDetectorBiasName.Data(),"Quantifying detector bias",4,0,4);
2621  fIntFlowDetectorBias->SetLabelSize(0.05);
2622  fIntFlowDetectorBias->SetMarkerStyle(25);
2623  for(Int_t ci=0;ci<4;ci++)
2624  {
2625  (fIntFlowDetectorBias->GetXaxis())->SetBinLabel(ci+1,Form("#frac{corrected}{measured} %s",cumulantFlag[ci].Data()));
2626  }
2628  // quantifying detector effects to correlations versus multiplicity:
2630  {
2631  TString intFlowDetectorBiasVsMName = "fIntFlowDetectorBiasVsM";
2632  intFlowDetectorBiasVsMName += fAnalysisLabel->Data();
2633  for(Int_t ci=0;ci<4;ci++) // correlation index
2634  {
2635  fIntFlowDetectorBiasVsM[ci] = new TH1D(Form("%s for %s",intFlowDetectorBiasVsMName.Data(),cumulantFlag[ci].Data()),
2636  Form("Quantifying detector bias for %s vs multiplicity",cumulantFlag[ci].Data()),
2639  {
2640  fIntFlowDetectorBiasVsM[ci]->GetXaxis()->SetTitle("# RPs");
2642  {
2643  fIntFlowDetectorBiasVsM[ci]->GetXaxis()->SetTitle("Reference multiplicity (from ESD)");
2645  {
2646  fIntFlowDetectorBiasVsM[ci]->GetXaxis()->SetTitle("# POIs");
2647  }
2648  fIntFlowDetectorBiasVsM[ci]->GetYaxis()->SetTitle("#frac{corrected}{measured}");
2650  } // end of for(Int_t co=0;co<4;co++) // cumulant order
2651  } // end of if(fCalculateCumulantsVsM)
2652 
2653 } // end of AliFlowAnalysisWithQCumulants::BookEverythingForIntegratedFlow()
2654 
2655 //=======================================================================================================================
2656 
2658 {
2659  // Book all objects for control histograms.
2660 
2661  // a) Book profile to hold all flags for control histograms;
2662  // b) Book all control histograms.
2663 
2664  // a) Book profile to hold all flags for control histograms:
2665  TString controlHistogramsFlagsName = "fControlHistogramsFlags";
2666  controlHistogramsFlagsName += fAnalysisLabel->Data();
2667  fControlHistogramsFlags = new TProfile(controlHistogramsFlagsName.Data(),"Flags for Control Histograms",2,0,2);
2668  fControlHistogramsFlags->SetTickLength(-0.01,"Y");
2669  fControlHistogramsFlags->SetMarkerStyle(25);
2670  fControlHistogramsFlags->SetLabelSize(0.04);
2671  fControlHistogramsFlags->SetLabelOffset(0.02,"Y");
2672  fControlHistogramsFlags->SetStats(kFALSE);
2673  fControlHistogramsFlags->GetXaxis()->SetBinLabel(1,"fStoreControlHistograms");
2674  fControlHistogramsFlags->GetXaxis()->SetBinLabel(2,"fUseQvectorTerms");
2676 
2677  if(!fStoreControlHistograms){return;}
2678 
2679  // b) Book all control histograms:
2680  // b1) Correlation between # RPs and ref. mult. determined centrally:
2681  TString sCorrelationNoRPsVsRefMultName = "fCorrelationNoRPsVsRefMult";
2682  sCorrelationNoRPsVsRefMultName += fAnalysisLabel->Data();
2683  fCorrelationNoRPsVsRefMult = new TH2D(sCorrelationNoRPsVsRefMultName.Data(),"# RPs vs. Reference Multiplicity",fnBinsMult,fMinMult,fMaxMult,fnBinsMult,fMinMult,fMaxMult);
2684  fCorrelationNoRPsVsRefMult->SetTickLength(-0.01,"Y");
2685  fCorrelationNoRPsVsRefMult->SetLabelSize(0.04);
2686  fCorrelationNoRPsVsRefMult->SetLabelOffset(0.02,"Y");
2687  fCorrelationNoRPsVsRefMult->SetStats(kTRUE);
2688  fCorrelationNoRPsVsRefMult->GetXaxis()->SetTitle("# RPs");
2689  fCorrelationNoRPsVsRefMult->GetYaxis()->SetTitle("Reference Multiplicity");
2691  // b2) Correlation between # POIs and ref. mult. determined centrally:
2692  TString sCorrelationNoPOIsVsRefMultName = "fCorrelationNoPOIsVsRefMult";
2693  sCorrelationNoPOIsVsRefMultName += fAnalysisLabel->Data();
2694  fCorrelationNoPOIsVsRefMult = new TH2D(sCorrelationNoPOIsVsRefMultName.Data(),"# POIs vs. Reference Multiplicity",fnBinsMult,fMinMult,fMaxMult,fnBinsMult,fMinMult,fMaxMult);
2695  fCorrelationNoPOIsVsRefMult->SetTickLength(-0.01,"Y");
2696  fCorrelationNoPOIsVsRefMult->SetLabelSize(0.04);
2697  fCorrelationNoPOIsVsRefMult->SetLabelOffset(0.02,"Y");
2698  fCorrelationNoPOIsVsRefMult->SetStats(kTRUE);
2699  fCorrelationNoPOIsVsRefMult->GetXaxis()->SetTitle("# POIs");
2700  fCorrelationNoPOIsVsRefMult->GetYaxis()->SetTitle("Reference Multiplicity");
2702  // b3) Correlation between # RPs and # POIs:
2703  TString sCorrelationNoRPsVsNoPOIsName = "fCorrelationNoRPsVsNoPOIs";
2704  sCorrelationNoRPsVsNoPOIsName += fAnalysisLabel->Data();
2705  fCorrelationNoRPsVsNoPOIs = new TH2D(sCorrelationNoRPsVsNoPOIsName.Data(),"# RPs vs. # POIs",fnBinsMult,fMinMult,fMaxMult,fnBinsMult,fMinMult,fMaxMult);
2706  fCorrelationNoRPsVsNoPOIs->SetTickLength(-0.01,"Y");
2707  fCorrelationNoRPsVsNoPOIs->SetLabelSize(0.04);
2708  fCorrelationNoRPsVsNoPOIs->SetLabelOffset(0.02,"Y");
2709  fCorrelationNoRPsVsNoPOIs->SetStats(kTRUE);
2710  fCorrelationNoRPsVsNoPOIs->GetXaxis()->SetTitle("# RPs");
2711  fCorrelationNoRPsVsNoPOIs->GetYaxis()->SetTitle("# POIs");
2713  // b4) <2>, <4>, <6> and <8> vs multiplicity (#RPs, #POIs or external):
2714  TString sCorrelation[4] = {"#LT2#GT","#LT4#GT","#LT6#GT","#LT8#GT"};
2715  TString sMultiplicity = "";
2717  {
2718  sMultiplicity = "# RPs";
2720  {
2721  sMultiplicity = "Reference multiplicity (from ESD)";
2723  {
2724  sMultiplicity = "# POIs";
2725  }
2726  for(Int_t ci=0;ci<4;ci++)
2727  {
2728  fCorrelation2468VsMult[ci] = new TH2D(Form("%s vs M",sCorrelation[ci].Data()),Form("%s vs M",sCorrelation[ci].Data()),fnBinsMult,fMinMult,fMaxMult,fnBinsForCorrelations,fMinValueOfCorrelation[ci],fMaxValueOfCorrelation[ci]);
2729  fCorrelation2468VsMult[ci]->SetTickLength(-0.01,"Y");
2730  fCorrelation2468VsMult[ci]->SetLabelSize(0.04);
2731  fCorrelation2468VsMult[ci]->SetLabelOffset(0.02,"Y");
2732  fCorrelation2468VsMult[ci]->SetStats(kTRUE);
2733  fCorrelation2468VsMult[ci]->GetXaxis()->SetTitle(sMultiplicity.Data());
2734  fCorrelation2468VsMult[ci]->GetYaxis()->SetTitle(sCorrelation[ci].Data());
2736  } // end of for(Int_t ci=0;ci<4;ci++)
2737  // b5) <2><4>, <2><6>, <2><8>, <4><6> etc. vs multiplicity (#RPs, #POIs or external):
2738  TString sCorrelationProduct[1] = {"#LT2#GT#LT4#GT"}; // TBI: add the other ones when needed first time
2739  for(Int_t cpi=0;cpi<1;cpi++) // TBI: hardwired 1
2740  {
2741  fCorrelationProduct2468VsMult[cpi] = new TH2D(Form("%s vs M",sCorrelationProduct[cpi].Data()),Form("%s vs M",sCorrelationProduct[cpi].Data()),fnBinsMult,fMinMult,fMaxMult,fnBinsForCorrelations,fMinValueOfCorrelationProduct[cpi],fMaxValueOfCorrelationProduct[cpi]);
2742  fCorrelationProduct2468VsMult[cpi]->SetTickLength(-0.01,"Y");
2743  fCorrelationProduct2468VsMult[cpi]->SetLabelSize(0.04);
2744  fCorrelationProduct2468VsMult[cpi]->SetLabelOffset(0.02,"Y");
2745  fCorrelationProduct2468VsMult[cpi]->SetStats(kTRUE);
2746  fCorrelationProduct2468VsMult[cpi]->GetXaxis()->SetTitle(sMultiplicity.Data());
2747  fCorrelationProduct2468VsMult[cpi]->GetYaxis()->SetTitle(sCorrelationProduct[cpi].Data());
2749  } // end of for(Int_t cpi=0;cpi<4;cpi++)
2750  // b6) |Qn|^2/M, |Q2n|^2/M, |Qn|^4/(M(2M-1)), Re[Q2nQn^*Qn^*]/M, ... vs multiplicity (#RPs, #POIs or external)
2751  if(fUseQvectorTerms)
2752  {
2753  TString sQvectorTerms[4] = {"#frac{|Q_{n}|^{2}}{M}","#frac{|Q_{2n}|^{2}}{M}","#frac{|Q_{n}|^{4}}{M(2M-1)}","#frac{Re[Q_{2n}Q_{n}^{*}Q_{n}^{*}]}{M^{3/2}}"}; // TBI: add the other ones when needed first time
2754  for(Int_t qvti=0;qvti<4;qvti++) // TBI: hardwired 4
2755  {
2756  fQvectorTermsVsMult[qvti] = new TH2D(Form("%s vs M",sQvectorTerms[qvti].Data()),Form("%s vs M",sQvectorTerms[qvti].Data()),fnBinsMult,fMinMult,fMaxMult,fnBinsForCorrelations,fMinValueOfQvectorTerms[qvti],fMaxValueOfQvectorTerms[qvti]);
2757  fQvectorTermsVsMult[qvti]->SetTickLength(-0.01,"Y");
2758  fQvectorTermsVsMult[qvti]->SetLabelSize(0.04);
2759  fQvectorTermsVsMult[qvti]->SetLabelOffset(0.02,"Y");
2760  fQvectorTermsVsMult[qvti]->SetStats(kTRUE);
2761  fQvectorTermsVsMult[qvti]->GetXaxis()->SetTitle(sMultiplicity.Data());
2762  fQvectorTermsVsMult[qvti]->GetYaxis()->SetTitle(sQvectorTerms[qvti].Data());
2764  } // end of for(Int_t qvti=0;qvti<4;qvti++)
2765  } // end of if(fUseQvectorTerms)
2766 
2767 } // end of void AliFlowAnalysisWithQCumulants::BookEverythingForControlHistograms()
2768 
2769 //=======================================================================================================================
2770 
2772 {
2773  // Book all objects needed for bootstrap.
2774 
2775  // a) Book profile to hold all flags for bootstrap;
2776  // b) Book local random generator;
2777  // c) Book all bootstrap objects;
2778  // d) Book all bootstrap objects 'vs M'.
2779 
2780  // a) Book profile to hold all flags for bootstrap;
2781  TString bootstrapFlagsName = "fBootstrapFlags";
2782  bootstrapFlagsName += fAnalysisLabel->Data();
2783  fBootstrapFlags = new TProfile(bootstrapFlagsName.Data(),"Flags for bootstrap",3,0,3);
2784  fBootstrapFlags->SetTickLength(-0.01,"Y");
2785  fBootstrapFlags->SetMarkerStyle(25);
2786  fBootstrapFlags->SetLabelSize(0.04);
2787  fBootstrapFlags->SetLabelOffset(0.02,"Y");
2788  fBootstrapFlags->SetStats(kFALSE);
2789  fBootstrapFlags->GetXaxis()->SetBinLabel(1,"fUseBootstrap");
2790  fBootstrapFlags->GetXaxis()->SetBinLabel(2,"fUseBootstrapVsM");
2791  fBootstrapFlags->GetXaxis()->SetBinLabel(3,"fnSubsamples");
2793 
2794  // b) Book local random generator:
2796  {
2797  fRandom = new TRandom3(0); // if uiSeed is 0, the seed is determined uniquely in space and time via TUUID
2798  }
2799 
2800  // c) Book all bootstrap objects:
2801  TString correlationFlag[4] = {"#LT#LT2#GT#GT","#LT#LT4#GT#GT","#LT#LT6#GT#GT","#LT#LT8#GT#GT"};
2802  TString cumulantFlag[4] = {"QC{2}","QC{4}","QC{6}","QC{8}"};
2803  if(fUseBootstrap)
2804  {
2805  // ....
2806  TString bootstrapCorrelationsName = "fBootstrapCorrelations";
2807  bootstrapCorrelationsName += fAnalysisLabel->Data();
2808  fBootstrapCorrelations = new TProfile2D(bootstrapCorrelationsName.Data(),"Bootstrap Correlations",4,0.,4.,fnSubsamples,0,fnSubsamples); // x-axis => <2>, <4>, <6>, <8>; y-axis => subsample #
2809  fBootstrapCorrelations->SetStats(kFALSE);
2810  for(Int_t ci=0;ci<4;ci++) // correlation index
2811  {
2812  fBootstrapCorrelations->GetXaxis()->SetBinLabel(ci+1,correlationFlag[ci].Data());
2813  } // end of for(Int_t ci=0;ci<4;ci++) // correlation index
2814  for(Int_t ss=0;ss<fnSubsamples;ss++)
2815  {
2816  fBootstrapCorrelations->GetYaxis()->SetBinLabel(ss+1,Form("#%d",ss));
2817  } // end of for(Int_t ss=0;ss<fnSubsamples;ss++)
2819  // ....
2820  TString bootstrapCumulantsName = "fBootstrapCumulants";
2821  bootstrapCumulantsName += fAnalysisLabel->Data();
2822  fBootstrapCumulants = new TH2D(bootstrapCumulantsName.Data(),"Bootstrap Cumulants",4,0.,4.,fnSubsamples,0,fnSubsamples); // x-axis => QC{2}, QC{4}, QC{6}, QC{8}; y-axis => subsample #
2823  fBootstrapCumulants->SetStats(kFALSE);
2824  for(Int_t co=0;co<4;co++) // cumulant order
2825  {
2826  fBootstrapCumulants->GetXaxis()->SetBinLabel(co+1,cumulantFlag[co].Data());
2827  } // end of for(Int_t co=0;co<4;co++) // cumulant order
2828  for(Int_t ss=0;ss<fnSubsamples;ss++)
2829  {
2830  fBootstrapCumulants->GetYaxis()->SetBinLabel(ss+1,Form("#%d",ss));
2831  } // end of for(Int_t ss=0;ss<fnSubsamples;ss++)
2833  } // end of if(fUseBootstrap)
2834 
2835  // d) Book all bootstrap objects 'vs M':
2836  TString sMultiplicity = "";
2838  {
2839  sMultiplicity = "# RPs";
2841  {
2842  sMultiplicity = "Reference multiplicity (from ESD)";
2844  {
2845  sMultiplicity = "# POIs";
2846  }
2847  if(fUseBootstrapVsM)
2848  {
2849  // ....
2850  TString bootstrapCorrelationsVsMName = "fBootstrapCorrelationsVsM";
2851  bootstrapCorrelationsVsMName += fAnalysisLabel->Data();
2852  for(Int_t ci=0;ci<4;ci++) // correlation index
2853  {
2854  fBootstrapCorrelationsVsM[ci] = new TProfile2D(Form("%s, %s",bootstrapCorrelationsVsMName.Data(),correlationFlag[ci].Data()),
2855  Form("Bootstrap Correlations Vs. M, %s",correlationFlag[ci].Data()),
2856  fnBinsMult,fMinMult,fMaxMult,fnSubsamples,0,fnSubsamples); // index => <2>, <4>, <6>, <8>; x-axis => multiplicity; y-axis => subsample #
2857  fBootstrapCorrelationsVsM[ci]->SetStats(kFALSE);
2858  fBootstrapCorrelationsVsM[ci]->GetXaxis()->SetTitle(sMultiplicity.Data());
2859  for(Int_t ss=0;ss<fnSubsamples;ss++)
2860  {
2861  fBootstrapCorrelationsVsM[ci]->GetYaxis()->SetBinLabel(ss+1,Form("#%d",ss));
2862  } // end of for(Int_t ss=0;ss<fnSubsamples;ss++)
2864  } // end of for(Int_t ci=0;ci<4;ci++) // correlation index
2865  // ....
2866  TString bootstrapCumulantsVsMName = "fBootstrapCumulantsVsM";
2867  bootstrapCumulantsVsMName += fAnalysisLabel->Data();
2868  for(Int_t co=0;co<4;co++) // cumulant order
2869  {
2870  fBootstrapCumulantsVsM[co] = new TH2D(Form("%s, %s",bootstrapCumulantsVsMName.Data(),cumulantFlag[co].Data()),
2871  Form("Bootstrap Cumulants Vs. M, %s",cumulantFlag[co].Data()),
2872  fnBinsMult,fMinMult,fMaxMult,fnSubsamples,0,fnSubsamples); // index => <2>, <4>, <6>, <8>; x-axis => multiplicity; y-axis => subsample #
2873  fBootstrapCumulantsVsM[co]->SetStats(kFALSE);
2874  fBootstrapCumulantsVsM[co]->GetXaxis()->SetTitle(sMultiplicity.Data());
2875  for(Int_t ss=0;ss<fnSubsamples;ss++)
2876  {
2877  fBootstrapCumulantsVsM[co]->GetYaxis()->SetBinLabel(ss+1,Form("#%d",ss));
2878  } // end of for(Int_t ss=0;ss<fnSubsamples;ss++)
2880  } // end of for(Int_t co=0;co<4;co++) // correlation index
2881  } // end of if(fUseBootstrapVsM)
2882 
2883 } // end of void AliFlowAnalysisWithQCumulants::BookEverythingForBootstrap()
2884 
2885 //=======================================================================================================================
2886 
2888 {
2889  // Book all objects for mixed harmonics.
2890 
2891  // a) Book profile to hold all flags for mixed harmonics;
2892  // b) Book all objects in TList fMixedHarmonicsProfiles;
2893  // c) Book all objects in TList fMixedHarmonicsResults;
2894  // d) Book all objects in TList fMixedHarmonicsErrorPropagation.
2895 
2896  // a) Book profile to hold all flags for mixed harmonics:
2897  TString mixedHarmonicsFlagsName = "fMixedHarmonicsFlags";
2898  mixedHarmonicsFlagsName += fAnalysisLabel->Data();
2899  fMixedHarmonicsFlags = new TProfile(mixedHarmonicsFlagsName.Data(),"Flags for Mixed Harmonics",4,0,4);
2900  fMixedHarmonicsFlags->SetTickLength(-0.01,"Y");
2901  fMixedHarmonicsFlags->SetMarkerStyle(25);
2902  fMixedHarmonicsFlags->SetLabelSize(0.04);
2903  fMixedHarmonicsFlags->SetLabelOffset(0.02,"Y");
2904  fMixedHarmonicsFlags->SetStats(kFALSE);
2905  fMixedHarmonicsFlags->GetXaxis()->SetBinLabel(1,"Calculate Mixed Harmonics");
2906  fMixedHarmonicsFlags->GetXaxis()->SetBinLabel(2,"Generic Harmonic");
2907  fMixedHarmonicsFlags->GetXaxis()->SetBinLabel(3,"Calculate vs Multiplicity");
2908  fMixedHarmonicsFlags->GetXaxis()->SetBinLabel(4,"Multiplicity Weight");
2910 
2911  if(!fCalculateMixedHarmonics){return;}
2912 
2913  // b) Book all objects in TList fMixedHarmonicsProfiles:
2914  // b1) 2-p correlations:
2915  TString s2pCorrelationsName = "f2pCorrelations";
2916  s2pCorrelationsName += fAnalysisLabel->Data();
2917  f2pCorrelations = new TProfile(s2pCorrelationsName.Data(),Form("2-particle correlations (n = %d)",fHarmonic),6,0,6,"s");
2918  f2pCorrelations->SetTickLength(-0.01,"Y");
2919  f2pCorrelations->SetMarkerStyle(25);
2920  f2pCorrelations->SetLabelSize(0.04);
2921  f2pCorrelations->SetLabelOffset(0.02,"Y");
2922  f2pCorrelations->SetStats(kFALSE);
2923  f2pCorrelations->Sumw2();
2924  f2pCorrelations->GetXaxis()->SetBinLabel(1,Form("#LT#LT2#GT#GT_{%dn|%dn}",1*fHarmonic,1*fHarmonic));
2925  f2pCorrelations->GetXaxis()->SetBinLabel(2,Form("#LT#LT2#GT#GT_{%dn|%dn}",2*fHarmonic,2*fHarmonic));
2926  f2pCorrelations->GetXaxis()->SetBinLabel(3,Form("#LT#LT2#GT#GT_{%dn|%dn}",3*fHarmonic,3*fHarmonic));
2927  f2pCorrelations->GetXaxis()->SetBinLabel(4,Form("#LT#LT2#GT#GT_{%dn|%dn}",4*fHarmonic,4*fHarmonic));
2928  f2pCorrelations->GetXaxis()->SetBinLabel(5,Form("#LT#LT2#GT#GT_{%dn|%dn}",5*fHarmonic,5*fHarmonic));
2929  f2pCorrelations->GetXaxis()->SetBinLabel(6,Form("#LT#LT2#GT#GT_{%dn|%dn}",6*fHarmonic,6*fHarmonic));
2931  // b2) 3-p correlations (3+6):
2932  TString s3pCorrelationsName = "f3pCorrelations";
2933  s3pCorrelationsName += fAnalysisLabel->Data();
2934  f3pCorrelations = new TProfile(s3pCorrelationsName.Data(),Form("3-particle correlations (n = %d)",fHarmonic),10,0,10,"s");
2935  f3pCorrelations->SetTickLength(-0.01,"Y");
2936  f3pCorrelations->SetMarkerStyle(25);
2937  f3pCorrelations->SetLabelSize(0.04);
2938  f3pCorrelations->SetLabelOffset(0.02,"Y");
2939  f3pCorrelations->SetStats(kFALSE);
2940  f3pCorrelations->Sumw2();
2941  // 3-p correlations sensitive to two distinct harmonics (3):
2942  f3pCorrelations->GetXaxis()->SetBinLabel(1,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",2*fHarmonic,1*fHarmonic,1*fHarmonic));
2943  f3pCorrelations->GetXaxis()->SetBinLabel(2,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",4*fHarmonic,2*fHarmonic,2*fHarmonic));
2944  f3pCorrelations->GetXaxis()->SetBinLabel(3,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",6*fHarmonic,3*fHarmonic,3*fHarmonic));
2945  f3pCorrelations->GetXaxis()->SetBinLabel(4,""); // empty
2946  // 3-p correlations sensitive to three distinct harmonics (6):
2947  f3pCorrelations->GetXaxis()->SetBinLabel(5,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",3*fHarmonic,2*fHarmonic,1*fHarmonic));
2948  f3pCorrelations->GetXaxis()->SetBinLabel(6,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",4*fHarmonic,3*fHarmonic,1*fHarmonic));
2949  f3pCorrelations->GetXaxis()->SetBinLabel(7,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",5*fHarmonic,3*fHarmonic,2*fHarmonic));
2950  f3pCorrelations->GetXaxis()->SetBinLabel(8,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",5*fHarmonic,4*fHarmonic,1*fHarmonic));
2951  f3pCorrelations->GetXaxis()->SetBinLabel(9,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",6*fHarmonic,4*fHarmonic,2*fHarmonic));
2952  f3pCorrelations->GetXaxis()->SetBinLabel(10,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",6*fHarmonic,5*fHarmonic,1*fHarmonic));
2954  // b3) 4-p correlations (6+15+2+10+8):
2955  TString s4pCorrelationsName = "f4pCorrelations";
2956  s4pCorrelationsName += fAnalysisLabel->Data();
2957  f4pCorrelations = new TProfile(s4pCorrelationsName.Data(),Form("4-particle correlations (n = %d)",fHarmonic),45,0,45,"s");
2958  f4pCorrelations->SetTickLength(-0.01,"Y");
2959  f4pCorrelations->SetMarkerStyle(25);
2960  f4pCorrelations->SetLabelSize(0.03);
2961  f4pCorrelations->SetLabelOffset(0.02,"Y");
2962  f4pCorrelations->SetStats(kFALSE);
2963  f4pCorrelations->Sumw2();
2964  // "same harmonic" (6):
2965  f4pCorrelations->GetXaxis()->SetBinLabel(1,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",1*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic));
2966  f4pCorrelations->GetXaxis()->SetBinLabel(2,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",2*fHarmonic,2*fHarmonic,2*fHarmonic,2*fHarmonic));
2967  f4pCorrelations->GetXaxis()->SetBinLabel(3,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",3*fHarmonic,3*fHarmonic,3*fHarmonic,3*fHarmonic));
2968  f4pCorrelations->GetXaxis()->SetBinLabel(4,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,4*fHarmonic,4*fHarmonic,4*fHarmonic));
2969  f4pCorrelations->GetXaxis()->SetBinLabel(5,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,5*fHarmonic,5*fHarmonic,5*fHarmonic));
2970  f4pCorrelations->GetXaxis()->SetBinLabel(6,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,6*fHarmonic,6*fHarmonic,6*fHarmonic));
2971  f4pCorrelations->GetXaxis()->SetBinLabel(7,""); // empty
2972  // "standard candles" (15):
2973  f4pCorrelations->GetXaxis()->SetBinLabel(8,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",2*fHarmonic,1*fHarmonic,2*fHarmonic,1*fHarmonic));
2974  f4pCorrelations->GetXaxis()->SetBinLabel(9,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",3*fHarmonic,1*fHarmonic,3*fHarmonic,1*fHarmonic));
2975  f4pCorrelations->GetXaxis()->SetBinLabel(10,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",3*fHarmonic,2*fHarmonic,3*fHarmonic,2*fHarmonic));
2976  f4pCorrelations->GetXaxis()->SetBinLabel(11,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,1*fHarmonic,4*fHarmonic,1*fHarmonic));
2977  f4pCorrelations->GetXaxis()->SetBinLabel(12,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,2*fHarmonic,4*fHarmonic,2*fHarmonic));
2978  f4pCorrelations->GetXaxis()->SetBinLabel(13,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,3*fHarmonic,4*fHarmonic,3*fHarmonic));
2979  f4pCorrelations->GetXaxis()->SetBinLabel(14,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,1*fHarmonic,5*fHarmonic,1*fHarmonic));
2980  f4pCorrelations->GetXaxis()->SetBinLabel(15,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,2*fHarmonic,5*fHarmonic,2*fHarmonic));
2981  f4pCorrelations->GetXaxis()->SetBinLabel(16,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,3*fHarmonic,5*fHarmonic,3*fHarmonic));
2982  f4pCorrelations->GetXaxis()->SetBinLabel(17,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,4*fHarmonic,5*fHarmonic,4*fHarmonic));
2983  f4pCorrelations->GetXaxis()->SetBinLabel(18,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,1*fHarmonic,6*fHarmonic,1*fHarmonic));
2984  f4pCorrelations->GetXaxis()->SetBinLabel(19,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,2*fHarmonic,6*fHarmonic,2*fHarmonic));
2985  f4pCorrelations->GetXaxis()->SetBinLabel(20,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,3*fHarmonic,6*fHarmonic,3*fHarmonic));
2986  f4pCorrelations->GetXaxis()->SetBinLabel(21,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,4*fHarmonic,6*fHarmonic,4*fHarmonic));
2987  f4pCorrelations->GetXaxis()->SetBinLabel(22,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,5*fHarmonic,6*fHarmonic,5*fHarmonic));
2988  f4pCorrelations->GetXaxis()->SetBinLabel(23,""); // empty
2989  // 4-p correlations sensitive to two distinct harmonics (2):
2990  f4pCorrelations->GetXaxis()->SetBinLabel(24,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",3*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic));
2991  f4pCorrelations->GetXaxis()->SetBinLabel(25,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",6*fHarmonic,2*fHarmonic,2*fHarmonic,2*fHarmonic));
2992  f4pCorrelations->GetXaxis()->SetBinLabel(26,""); // empty
2993  // 4-p correlations sensitive to three distinct harmonics (10):
2994  f4pCorrelations->GetXaxis()->SetBinLabel(27,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",3*fHarmonic,1*fHarmonic,2*fHarmonic,2*fHarmonic));
2995  f4pCorrelations->GetXaxis()->SetBinLabel(28,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",4*fHarmonic,2*fHarmonic,1*fHarmonic,1*fHarmonic));
2996  f4pCorrelations->GetXaxis()->SetBinLabel(29,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,2*fHarmonic,3*fHarmonic,3*fHarmonic));
2997  f4pCorrelations->GetXaxis()->SetBinLabel(30,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",5*fHarmonic,2*fHarmonic,2*fHarmonic,1*fHarmonic));
2998  f4pCorrelations->GetXaxis()->SetBinLabel(31,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",5*fHarmonic,3*fHarmonic,1*fHarmonic,1*fHarmonic));
2999  f4pCorrelations->GetXaxis()->SetBinLabel(32,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,1*fHarmonic,3*fHarmonic,3*fHarmonic));
3000  f4pCorrelations->GetXaxis()->SetBinLabel(33,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,3*fHarmonic,4*fHarmonic,4*fHarmonic));
3001  f4pCorrelations->GetXaxis()->SetBinLabel(34,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",6*fHarmonic,4*fHarmonic,1*fHarmonic,1*fHarmonic));
3002  f4pCorrelations->GetXaxis()->SetBinLabel(35,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,2*fHarmonic,4*fHarmonic,4*fHarmonic));
3003  f4pCorrelations->GetXaxis()->SetBinLabel(36,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,4*fHarmonic,5*fHarmonic,5*fHarmonic));
3004  f4pCorrelations->GetXaxis()->SetBinLabel(37,""); // empty
3005  // 4-p correlations sensitive to four distinct harmonics (8):
3006  f4pCorrelations->GetXaxis()->SetBinLabel(38,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,1*fHarmonic,3*fHarmonic,2*fHarmonic));
3007  f4pCorrelations->GetXaxis()->SetBinLabel(39,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,1*fHarmonic,4*fHarmonic,2*fHarmonic));
3008  f4pCorrelations->GetXaxis()->SetBinLabel(40,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,2*fHarmonic,4*fHarmonic,3*fHarmonic));
3009  f4pCorrelations->GetXaxis()->SetBinLabel(41,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,1*fHarmonic,4*fHarmonic,3*fHarmonic));
3010  f4pCorrelations->GetXaxis()->SetBinLabel(42,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,1*fHarmonic,5*fHarmonic,2*fHarmonic));
3011  f4pCorrelations->GetXaxis()->SetBinLabel(43,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",6*fHarmonic,3*fHarmonic,2*fHarmonic,1*fHarmonic));
3012  f4pCorrelations->GetXaxis()->SetBinLabel(44,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,2*fHarmonic,5*fHarmonic,3*fHarmonic));
3013  f4pCorrelations->GetXaxis()->SetBinLabel(45,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,3*fHarmonic,5*fHarmonic,4*fHarmonic));
3015  // b3) 5-p correlations (30+9+30+11+3):
3016  TString s5pCorrelationsName = "f5pCorrelations";
3017  s5pCorrelationsName += fAnalysisLabel->Data();
3018  f5pCorrelations = new TProfile(s5pCorrelationsName.Data(),Form("5-particle correlations (n = %d)",fHarmonic),87,0,87,"s");
3019  f5pCorrelations->SetTickLength(-0.01,"Y");
3020  f5pCorrelations->SetMarkerStyle(25);
3021  f5pCorrelations->SetLabelSize(0.02);
3022  f5pCorrelations->SetLabelOffset(0.02,"Y");
3023  f5pCorrelations->SetStats(kFALSE);
3024  f5pCorrelations->Sumw2();
3025  // "standard candles" (30):
3026  f5pCorrelations->GetXaxis()->SetBinLabel(1,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",3*fHarmonic,2*fHarmonic,3*fHarmonic,1*fHarmonic,1*fHarmonic));
3027  f5pCorrelations->GetXaxis()->SetBinLabel(2,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,1*fHarmonic,2*fHarmonic,2*fHarmonic,1*fHarmonic));
3028  f5pCorrelations->GetXaxis()->SetBinLabel(3,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,2*fHarmonic,3*fHarmonic,2*fHarmonic,1*fHarmonic));
3029  f5pCorrelations->GetXaxis()->SetBinLabel(4,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,3*fHarmonic,3*fHarmonic,2*fHarmonic,2*fHarmonic));
3030  f5pCorrelations->GetXaxis()->SetBinLabel(5,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,2*fHarmonic,4*fHarmonic,1*fHarmonic,1*fHarmonic));
3031  f5pCorrelations->GetXaxis()->SetBinLabel(6,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,3*fHarmonic,4*fHarmonic,2*fHarmonic,1*fHarmonic));
3032  f5pCorrelations->GetXaxis()->SetBinLabel(7,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,1*fHarmonic,3*fHarmonic,2*fHarmonic,1*fHarmonic));
3033  f5pCorrelations->GetXaxis()->SetBinLabel(8,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,2*fHarmonic,5*fHarmonic,1*fHarmonic,1*fHarmonic));
3034  f5pCorrelations->GetXaxis()->SetBinLabel(9,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,2*fHarmonic,4*fHarmonic,2*fHarmonic,1*fHarmonic));
3035  f5pCorrelations->GetXaxis()->SetBinLabel(10,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,3*fHarmonic,4*fHarmonic,3*fHarmonic,1*fHarmonic));
3036  f5pCorrelations->GetXaxis()->SetBinLabel(11,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,4*fHarmonic,4*fHarmonic,3*fHarmonic,2*fHarmonic));
3037  f5pCorrelations->GetXaxis()->SetBinLabel(12,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,3*fHarmonic,5*fHarmonic,2*fHarmonic,1*fHarmonic));
3038  f5pCorrelations->GetXaxis()->SetBinLabel(13,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,4*fHarmonic,5*fHarmonic,2*fHarmonic,2*fHarmonic));
3039  f5pCorrelations->GetXaxis()->SetBinLabel(14,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,4*fHarmonic,5*fHarmonic,3*fHarmonic,1*fHarmonic));
3040  f5pCorrelations->GetXaxis()->SetBinLabel(15,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,1*fHarmonic,3*fHarmonic,3*fHarmonic,1*fHarmonic));
3041  f5pCorrelations->GetXaxis()->SetBinLabel(16,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,2*fHarmonic,3*fHarmonic,3*fHarmonic,2*fHarmonic));
3042  f5pCorrelations->GetXaxis()->SetBinLabel(17,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,1*fHarmonic,4*fHarmonic,2*fHarmonic,1*fHarmonic));
3043  f5pCorrelations->GetXaxis()->SetBinLabel(18,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,3*fHarmonic,4*fHarmonic,3*fHarmonic,2*fHarmonic));
3044  f5pCorrelations->GetXaxis()->SetBinLabel(19,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,4*fHarmonic,4*fHarmonic,3*fHarmonic,3*fHarmonic));
3045  f5pCorrelations->GetXaxis()->SetBinLabel(20,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,2*fHarmonic,5*fHarmonic,2*fHarmonic,1*fHarmonic));
3046  f5pCorrelations->GetXaxis()->SetBinLabel(21,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,3*fHarmonic,5*fHarmonic,3*fHarmonic,1*fHarmonic));
3047  f5pCorrelations->GetXaxis()->SetBinLabel(22,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,4*fHarmonic,5*fHarmonic,4*fHarmonic,1*fHarmonic));
3048  f5pCorrelations->GetXaxis()->SetBinLabel(23,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,5*fHarmonic,5*fHarmonic,3*fHarmonic,3*fHarmonic));
3049  f5pCorrelations->GetXaxis()->SetBinLabel(24,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,2*fHarmonic,6*fHarmonic,1*fHarmonic,1*fHarmonic));
3050  f5pCorrelations->GetXaxis()->SetBinLabel(25,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,3*fHarmonic,6*fHarmonic,2*fHarmonic,1*fHarmonic));
3051  f5pCorrelations->GetXaxis()->SetBinLabel(26,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,4*fHarmonic,6*fHarmonic,2*fHarmonic,2*fHarmonic));
3052  f5pCorrelations->GetXaxis()->SetBinLabel(27,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,4*fHarmonic,6*fHarmonic,3*fHarmonic,1*fHarmonic));
3053  f5pCorrelations->GetXaxis()->SetBinLabel(28,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,5*fHarmonic,5*fHarmonic,4*fHarmonic,2*fHarmonic));
3054  f5pCorrelations->GetXaxis()->SetBinLabel(29,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,5*fHarmonic,6*fHarmonic,3*fHarmonic,2*fHarmonic));
3055  f5pCorrelations->GetXaxis()->SetBinLabel(30,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,5*fHarmonic,6*fHarmonic,4*fHarmonic,1*fHarmonic));
3056  f5pCorrelations->GetXaxis()->SetBinLabel(31,""); // empty
3057  // 5-p correlations sensitive to two distinct harmonics (9):
3058  f5pCorrelations->GetXaxis()->SetBinLabel(32,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",2*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic));
3059  f5pCorrelations->GetXaxis()->SetBinLabel(33,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",2*fHarmonic,2*fHarmonic,2*fHarmonic,1*fHarmonic,1*fHarmonic));
3060  f5pCorrelations->GetXaxis()->SetBinLabel(34,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",3*fHarmonic,3*fHarmonic,2*fHarmonic,2*fHarmonic,2*fHarmonic));
3061  f5pCorrelations->GetXaxis()->SetBinLabel(35,Form("#LT#LT5#GT#GT_{%dn|%dn,%dn,%dn,%dn}",4*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic));
3062  f5pCorrelations->GetXaxis()->SetBinLabel(36,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,2*fHarmonic,2*fHarmonic,2*fHarmonic,2*fHarmonic));
3063  f5pCorrelations->GetXaxis()->SetBinLabel(37,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,4*fHarmonic,4*fHarmonic,2*fHarmonic,2*fHarmonic));
3064  f5pCorrelations->GetXaxis()->SetBinLabel(38,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,3*fHarmonic,3*fHarmonic,3*fHarmonic,3*fHarmonic));
3065  f5pCorrelations->GetXaxis()->SetBinLabel(39,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,6*fHarmonic,4*fHarmonic,4*fHarmonic,4*fHarmonic));
3066  f5pCorrelations->GetXaxis()->SetBinLabel(40,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,6*fHarmonic,6*fHarmonic,3*fHarmonic,3*fHarmonic));
3067  f5pCorrelations->GetXaxis()->SetBinLabel(41,""); // empty
3068  // 5-p correlations sensitive to three distinct harmonics (30):
3069  f5pCorrelations->GetXaxis()->SetBinLabel(42,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",3*fHarmonic,1*fHarmonic,2*fHarmonic,1*fHarmonic,1*fHarmonic));
3070  f5pCorrelations->GetXaxis()->SetBinLabel(43,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",3*fHarmonic,2*fHarmonic,2*fHarmonic,2*fHarmonic,1*fHarmonic));
3071  f5pCorrelations->GetXaxis()->SetBinLabel(44,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",3*fHarmonic,3*fHarmonic,3*fHarmonic,2*fHarmonic,1*fHarmonic));
3072  f5pCorrelations->GetXaxis()->SetBinLabel(45,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,1*fHarmonic,3*fHarmonic,1*fHarmonic,1*fHarmonic));
3073  f5pCorrelations->GetXaxis()->SetBinLabel(46,Form("#LT#LT5#GT#GT_{%dn,%dn,%dn|%dn,%dn}",4*fHarmonic,1*fHarmonic,1*fHarmonic,3*fHarmonic,3*fHarmonic));
3074  f5pCorrelations->GetXaxis()->SetBinLabel(47,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,3*fHarmonic,3*fHarmonic,3*fHarmonic,1*fHarmonic));
3075  f5pCorrelations->GetXaxis()->SetBinLabel(48,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,4*fHarmonic,3*fHarmonic,3*fHarmonic,2*fHarmonic));
3076  f5pCorrelations->GetXaxis()->SetBinLabel(49,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,4*fHarmonic,4*fHarmonic,3*fHarmonic,1*fHarmonic));
3077  f5pCorrelations->GetXaxis()->SetBinLabel(50,Form("#LT#LT5#GT#GT_{%dn|%dn,%dn,%dn,%dn}",5*fHarmonic,2*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic));
3078  f5pCorrelations->GetXaxis()->SetBinLabel(51,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,1*fHarmonic,2*fHarmonic,2*fHarmonic,2*fHarmonic));
3079  f5pCorrelations->GetXaxis()->SetBinLabel(52,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,2*fHarmonic,3*fHarmonic,2*fHarmonic,2*fHarmonic));
3080  f5pCorrelations->GetXaxis()->SetBinLabel(53,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,3*fHarmonic,3*fHarmonic,3*fHarmonic,2*fHarmonic));
3081  f5pCorrelations->GetXaxis()->SetBinLabel(54,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,1*fHarmonic,4*fHarmonic,1*fHarmonic,1*fHarmonic));
3082  f5pCorrelations->GetXaxis()->SetBinLabel(55,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,4*fHarmonic,3*fHarmonic,3*fHarmonic,3*fHarmonic));
3083  f5pCorrelations->GetXaxis()->SetBinLabel(56,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,4*fHarmonic,4*fHarmonic,4*fHarmonic,1*fHarmonic));
3084  f5pCorrelations->GetXaxis()->SetBinLabel(57,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,5*fHarmonic,4*fHarmonic,3*fHarmonic,3*fHarmonic));
3085  f5pCorrelations->GetXaxis()->SetBinLabel(58,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,5*fHarmonic,4*fHarmonic,4*fHarmonic,2*fHarmonic));
3086  f5pCorrelations->GetXaxis()->SetBinLabel(59,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,5*fHarmonic,5*fHarmonic,3*fHarmonic,2*fHarmonic));
3087  f5pCorrelations->GetXaxis()->SetBinLabel(60,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,5*fHarmonic,5*fHarmonic,4*fHarmonic,1*fHarmonic));
3088  f5pCorrelations->GetXaxis()->SetBinLabel(61,Form("#LT#LT5#GT#GT_{%dn|%dn,%dn,%dn,%dn}",6*fHarmonic,2*fHarmonic,2*fHarmonic,1*fHarmonic,1*fHarmonic));
3089  f5pCorrelations->GetXaxis()->SetBinLabel(62,Form("#LT#LT5#GT#GT_{%dn|%dn,%dn,%dn,%dn}",6*fHarmonic,3*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic));
3090  f5pCorrelations->GetXaxis()->SetBinLabel(63,Form("#LT#LT5#GT#GT_{%dn,%dn,%dn|%dn,%dn}",6*fHarmonic,1*fHarmonic,1*fHarmonic,4*fHarmonic,4*fHarmonic));
3091  f5pCorrelations->GetXaxis()->SetBinLabel(64,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,1*fHarmonic,5*fHarmonic,1*fHarmonic,1*fHarmonic));
3092  f5pCorrelations->GetXaxis()->SetBinLabel(65,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,2*fHarmonic,4*fHarmonic,2*fHarmonic,2*fHarmonic));
3093  f5pCorrelations->GetXaxis()->SetBinLabel(66,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,4*fHarmonic,4*fHarmonic,4*fHarmonic,2*fHarmonic));
3094  f5pCorrelations->GetXaxis()->SetBinLabel(67,Form("#LT#LT5#GT#GT_{%dn,%dn,%dn|%dn,%dn}",6*fHarmonic,2*fHarmonic,2*fHarmonic,5*fHarmonic,5*fHarmonic));
3095  f5pCorrelations->GetXaxis()->SetBinLabel(68,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,5*fHarmonic,5*fHarmonic,5*fHarmonic,1*fHarmonic));
3096  f5pCorrelations->GetXaxis()->SetBinLabel(69,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,6*fHarmonic,5*fHarmonic,5*fHarmonic,2*fHarmonic));
3097  f5pCorrelations->GetXaxis()->SetBinLabel(70,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,6*fHarmonic,6*fHarmonic,4*fHarmonic,2*fHarmonic));
3098  f5pCorrelations->GetXaxis()->SetBinLabel(71,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,6*fHarmonic,6*fHarmonic,5*fHarmonic,1*fHarmonic));
3099  f5pCorrelations->GetXaxis()->SetBinLabel(72,""); // empty
3100  // 5-p correlations sensitive to four distinct harmonics (11):
3101  f5pCorrelations->GetXaxis()->SetBinLabel(73,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,2*fHarmonic,3*fHarmonic,3*fHarmonic,1*fHarmonic));
3102  f5pCorrelations->GetXaxis()->SetBinLabel(74,Form("#LT#LT5#GT#GT_{%dn,%dn,%dn|%dn,%dn}",5*fHarmonic,1*fHarmonic,1*fHarmonic,4*fHarmonic,3*fHarmonic));
3103  f5pCorrelations->GetXaxis()->SetBinLabel(75,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,3*fHarmonic,4*fHarmonic,2*fHarmonic,2*fHarmonic));
3104  f5pCorrelations->GetXaxis()->SetBinLabel(76,Form("#LT#LT5#GT#GT_{%dn,%dn,%dn|%dn,%dn}",5*fHarmonic,2*fHarmonic,1*fHarmonic,4*fHarmonic,4*fHarmonic));
3105  f5pCorrelations->GetXaxis()->SetBinLabel(77,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,1*fHarmonic,3*fHarmonic,2*fHarmonic,2*fHarmonic));
3106  f5pCorrelations->GetXaxis()->SetBinLabel(78,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,3*fHarmonic,4*fHarmonic,4*fHarmonic,1*fHarmonic));
3107  f5pCorrelations->GetXaxis()->SetBinLabel(79,Form("#LT#LT5#GT#GT_{%dn,%dn,%dn|%dn,%dn}",6*fHarmonic,1*fHarmonic,1*fHarmonic,5*fHarmonic,3*fHarmonic));
3108  f5pCorrelations->GetXaxis()->SetBinLabel(80,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,3*fHarmonic,5*fHarmonic,2*fHarmonic,2*fHarmonic));
3109  f5pCorrelations->GetXaxis()->SetBinLabel(81,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,5*fHarmonic,4*fHarmonic,4*fHarmonic,3*fHarmonic));
3110  f5pCorrelations->GetXaxis()->SetBinLabel(82,Form("#LT#LT5#GT#GT_{%dn,%dn,%dn|%dn,%dn}",6*fHarmonic,3*fHarmonic,1*fHarmonic,5*fHarmonic,5*fHarmonic));
3111  f5pCorrelations->GetXaxis()->SetBinLabel(83,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,6*fHarmonic,5*fHarmonic,4*fHarmonic,3*fHarmonic));
3112  f5pCorrelations->GetXaxis()->SetBinLabel(84,""); // empty
3113  // 5-p correlations sensitive to five distinct harmonics (3):
3114  f5pCorrelations->GetXaxis()->SetBinLabel(85,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,2*fHarmonic,4*fHarmonic,3*fHarmonic,1*fHarmonic));
3115  f5pCorrelations->GetXaxis()->SetBinLabel(86,Form("#LT#LT5#GT#GT_{%dn,%dn,%dn|%dn,%dn}",6*fHarmonic,2*fHarmonic,1*fHarmonic,5*fHarmonic,4*fHarmonic));
3116  f5pCorrelations->GetXaxis()->SetBinLabel(87,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,4*fHarmonic,5*fHarmonic,3*fHarmonic,2*fHarmonic));
3118  // b4) 6-p correlations (??+??+??+??+??):
3119  TString s6pCorrelationsName = "f6pCorrelations";
3120  s6pCorrelationsName += fAnalysisLabel->Data();
3121  f6pCorrelations = new TProfile(s6pCorrelationsName.Data(),Form("6-particle correlations (n = %d)",fHarmonic),1,0.,1.);
3122  f6pCorrelations->SetTickLength(-0.01,"Y");
3123  f6pCorrelations->SetMarkerStyle(25);
3124  f6pCorrelations->SetLabelSize(0.02);
3125  f6pCorrelations->SetLabelOffset(0.02,"Y");
3126  f6pCorrelations->SetStats(kFALSE);
3127  f6pCorrelations->Sumw2();
3128  //fMixedHarmonicsProfiles->Add(f6pCorrelations); // TBI
3129  // b5) 7-p correlations (??+??+??+??+??):
3130  TString s7pCorrelationsName = "f7pCorrelations";
3131  s7pCorrelationsName += fAnalysisLabel->Data();
3132  f7pCorrelations = new TProfile(s7pCorrelationsName.Data(),Form("7-particle correlations (n = %d)",fHarmonic),1,0.,1.);
3133  f7pCorrelations->SetTickLength(-0.01,"Y");
3134  f7pCorrelations->SetMarkerStyle(25);
3135  f7pCorrelations->SetLabelSize(0.02);
3136  f7pCorrelations->SetLabelOffset(0.02,"Y");
3137  f7pCorrelations->SetStats(kFALSE);
3138  f7pCorrelations->Sumw2();
3139  //fMixedHarmonicsProfiles->Add(f7pCorrelations); // TBI
3140  // b6) 8-p correlations (??+??+??+??+??):
3141  TString s8pCorrelationsName = "f8pCorrelations";
3142  s8pCorrelationsName += fAnalysisLabel->Data();
3143  f8pCorrelations = new TProfile(s8pCorrelationsName.Data(),Form("8-particle correlations (n = %d)",fHarmonic),1,0.,1.);
3144  f8pCorrelations->SetTickLength(-0.01,"Y");
3145  f8pCorrelations->SetMarkerStyle(25);
3146  f8pCorrelations->SetLabelSize(0.02);
3147  f8pCorrelations->SetLabelOffset(0.02,"Y");
3148  f8pCorrelations->SetStats(kFALSE);
3149  f8pCorrelations->Sumw2();
3150  //fMixedHarmonicsProfiles->Add(f8pCorrelations); // TBI
3151 
3152  // c) Book all objects in TList fMixedHarmonicsResults:
3153  // QC{2}:
3154  f2pCumulants = f2pCorrelations->ProjectionX("f2pCumulants");
3155  f2pCumulants->SetTitle(Form("2-particle cumulants (n = %d)",fHarmonic));
3156  f2pCumulants->SetStats(kFALSE);
3157  f2pCumulants->SetMarkerStyle(kFullSquare);
3158  f2pCumulants->SetMarkerColor(kBlack);
3159  f2pCumulants->SetLineColor(kBlack);
3161  // QC{3}:
3162  f3pCumulants = f3pCorrelations->ProjectionX("f3pCumulants");
3163  f3pCumulants->SetTitle(Form("3-particle cumulants (n = %d)",fHarmonic));
3164  f3pCumulants->SetStats(kFALSE);
3165  f3pCumulants->SetMarkerStyle(kFullSquare);
3166  f3pCumulants->SetMarkerColor(kGreen+2);
3167  f3pCumulants->SetLineColor(kGreen+2);
3169  // QC{4}:
3170  f4pCumulants = f4pCorrelations->ProjectionX("f4pCumulants");
3171  f4pCumulants->SetTitle(Form("4-particle cumulants (n = %d)",fHarmonic));
3172  f4pCumulants->SetStats(kFALSE);
3173  f4pCumulants->SetMarkerStyle(kFullSquare);
3174  f4pCumulants->SetMarkerColor(kRed);
3175  f4pCumulants->SetLineColor(kRed);
3177  // QC{5}:
3178  f5pCumulants = f5pCorrelations->ProjectionX("f5pCumulants");
3179  f5pCumulants->SetTitle(Form("5-particle cumulants (n = %d)",fHarmonic));
3180  f5pCumulants->SetStats(kFALSE);
3181  f5pCumulants->SetMarkerStyle(kFullSquare);
3182  f5pCumulants->SetMarkerColor(kBlue);
3183  f5pCumulants->SetLineColor(kBlue);
3185 
3186  // d) Book all objects in TList fMixedHarmonicsErrorPropagation:
3187  // Sum of linear and quadratic event weights for mixed harmonics => [0=linear 1,1=quadratic]:
3188  TString mixedHarmonicEventWeightsName = "fMixedHarmonicEventWeights";
3189  mixedHarmonicEventWeightsName += fAnalysisLabel->Data();
3190  TString powerFlag[2] = {"linear","quadratic"};
3191  for(Int_t power=0;power<2;power++)
3192  {
3193  fMixedHarmonicEventWeights[power] = new TH1D(Form("%s: %s",mixedHarmonicEventWeightsName.Data(),powerFlag[power].Data()),Form("Sum of %s event weights for correlations",powerFlag[power].Data()),8,0.,8.);
3194  fMixedHarmonicEventWeights[power]->SetLabelSize(0.04);
3195  fMixedHarmonicEventWeights[power]->SetMarkerStyle(25);
3196  fMixedHarmonicEventWeights[power]->SetStats(kFALSE);
3197  if(power == 0)
3198  {
3199  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(1,"#sum w_{#LT1#GT}");
3200  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(2,"#sum w_{#LT2#GT}");
3201  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(3,"#sum w_{#LT3#GT}");
3202  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(4,"#sum w_{#LT4#GT}");
3203  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(5,"#sum w_{#LT5#GT}");
3204  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(6,"#sum w_{#LT6#GT}");
3205  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(7,"#sum w_{#LT7#GT}");
3206  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(8,"#sum w_{#LT8#GT}");
3207  } else if (power == 1)
3208  {
3209  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(1,"#sum w_{#LT1#GT}^{2}");
3210  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(2,"#sum w_{#LT2#GT}^{2}");
3211  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(3,"#sum w_{#LT3#GT}^{2}");
3212  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(4,"#sum w_{#LT4#GT}^{2}");
3213  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(5,"#sum w_{#LT5#GT}^{2}");
3214  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(6,"#sum w_{#LT6#GT}^{2}");
3215  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(7,"#sum w_{#LT7#GT}^{2}");
3216  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(8,"#sum w_{#LT8#GT}^{2}");
3217  }
3219  } // end of for(Int_t power=0;power<2;power++)
3220 
3221  // Sums of products of event weights for mixed harmonics:
3222  TString mixedHarmonicProductOfEventWeightsName = "fMixedHarmonicProductOfEventWeights";
3223  mixedHarmonicProductOfEventWeightsName += fAnalysisLabel->Data();
3224  fMixedHarmonicProductOfEventWeights = new TH2D(mixedHarmonicProductOfEventWeightsName.Data(),"Sums of products of event weights",8,0.,8.,8,0.,8.);
3225  fMixedHarmonicProductOfEventWeights->SetStats(kFALSE);
3226  fMixedHarmonicProductOfEventWeights->GetXaxis()->SetLabelSize(0.05);
3227  fMixedHarmonicProductOfEventWeights->GetYaxis()->SetLabelSize(0.05);
3228  for(Int_t b=1;b<=8;b++)
3229  {
3230  fMixedHarmonicProductOfEventWeights->GetXaxis()->SetBinLabel(b,Form("w_{#LT%i#GT}",b));
3231  fMixedHarmonicProductOfEventWeights->GetYaxis()->SetBinLabel(b,Form("w_{#LT%i#GT}",b));
3232  }
3234 
3235  // Averages of products of mixed harmonics correlations:
3236  TString mixedHarmonicProductOfCorrelationsName = "fMixedHarmonicProductOfCorrelations";
3237  mixedHarmonicProductOfCorrelationsName += fAnalysisLabel->Data();
3238  fMixedHarmonicProductOfCorrelations = new TProfile2D(mixedHarmonicProductOfCorrelationsName.Data(),"Averages of products of mixed correlators",139,0.,139.,139,0.,139.);
3240  fMixedHarmonicProductOfCorrelations->SetStats(kFALSE);
3241  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetLabelSize(0.015);
3242  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetLabelSize(0.015);
3243  // x-axis:
3244  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(1,Form("#LT#LT2#GT#GT_{%dn|%dn}",1*fHarmonic,1*fHarmonic));
3245  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(2,Form("#LT#LT2#GT#GT_{%dn|%dn}",2*fHarmonic,2*fHarmonic));
3246  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(3,Form("#LT#LT2#GT#GT_{%dn|%dn}",3*fHarmonic,3*fHarmonic));
3247  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(4,Form("#LT#LT2#GT#GT_{%dn|%dn}",4*fHarmonic,4*fHarmonic));
3248  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(5,Form("#LT#LT2#GT#GT_{%dn|%dn}",5*fHarmonic,5*fHarmonic));
3249  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(6,Form("#LT#LT2#GT#GT_{%dn|%dn}",6*fHarmonic,6*fHarmonic));
3250  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(7,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",2*fHarmonic,1*fHarmonic,1*fHarmonic));
3251  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(8,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",4*fHarmonic,2*fHarmonic,2*fHarmonic));
3252  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(9,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",6*fHarmonic,3*fHarmonic,3*fHarmonic));
3253  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(10,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",3*fHarmonic,2*fHarmonic,1*fHarmonic));
3254  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(11,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",4*fHarmonic,3*fHarmonic,1*fHarmonic));
3255  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(12,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",5*fHarmonic,3*fHarmonic,2*fHarmonic));
3256  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(13,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",5*fHarmonic,4*fHarmonic,1*fHarmonic));
3257  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(14,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",6*fHarmonic,4*fHarmonic,2*fHarmonic));
3258  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(15,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",6*fHarmonic,5*fHarmonic,1*fHarmonic));
3259  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(16,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",1*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic));
3260  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(17,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",2*fHarmonic,2*fHarmonic,2*fHarmonic,2*fHarmonic));
3261  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(18,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",3*fHarmonic,3*fHarmonic,3*fHarmonic,3*fHarmonic));
3262  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(19,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,4*fHarmonic,4*fHarmonic,4*fHarmonic));
3263  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(20,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,5*fHarmonic,5*fHarmonic,5*fHarmonic));
3264  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(21,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,6*fHarmonic,6*fHarmonic,6*fHarmonic));
3265  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(22,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",2*fHarmonic,1*fHarmonic,2*fHarmonic,1*fHarmonic));
3266  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(23,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",3*fHarmonic,1*fHarmonic,3*fHarmonic,1*fHarmonic));
3267  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(24,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",3*fHarmonic,2*fHarmonic,3*fHarmonic,2*fHarmonic));
3268  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(25,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,1*fHarmonic,4*fHarmonic,1*fHarmonic));
3269  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(26,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,2*fHarmonic,4*fHarmonic,2*fHarmonic));
3270  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(27,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,3*fHarmonic,4*fHarmonic,3*fHarmonic));
3271  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(28,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,1*fHarmonic,5*fHarmonic,1*fHarmonic));
3272  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(29,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,2*fHarmonic,5*fHarmonic,2*fHarmonic));
3273  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(30,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,3*fHarmonic,5*fHarmonic,3*fHarmonic));
3274  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(31,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,4*fHarmonic,5*fHarmonic,4*fHarmonic));
3275  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(32,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,1*fHarmonic,6*fHarmonic,1*fHarmonic));
3276  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(33,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,2*fHarmonic,6*fHarmonic,2*fHarmonic));
3277  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(34,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,3*fHarmonic,6*fHarmonic,3*fHarmonic));
3278  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(35,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,4*fHarmonic,6*fHarmonic,4*fHarmonic));
3279  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(36,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,5*fHarmonic,6*fHarmonic,5*fHarmonic));
3280  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(37,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",3*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic));
3281  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(38,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",6*fHarmonic,2*fHarmonic,2*fHarmonic,2*fHarmonic));
3282  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(39,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",3*fHarmonic,1*fHarmonic,2*fHarmonic,2*fHarmonic));
3283  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(40,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",4*fHarmonic,2*fHarmonic,1*fHarmonic,1*fHarmonic));
3284  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(41,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,2*fHarmonic,3*fHarmonic,3*fHarmonic));
3285  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(42,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",5*fHarmonic,2*fHarmonic,2*fHarmonic,1*fHarmonic));
3286  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(43,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",5*fHarmonic,3*fHarmonic,1*fHarmonic,1*fHarmonic));
3287  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(44,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,1*fHarmonic,3*fHarmonic,3*fHarmonic));
3288  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(45,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,3*fHarmonic,4*fHarmonic,4*fHarmonic));
3289  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(46,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",6*fHarmonic,4*fHarmonic,1*fHarmonic,1*fHarmonic));
3290  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(47,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,2*fHarmonic,4*fHarmonic,4*fHarmonic));
3291  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(48,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,4*fHarmonic,5*fHarmonic,5*fHarmonic));
3292  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(49,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,1*fHarmonic,3*fHarmonic,2*fHarmonic));
3293  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(50,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,1*fHarmonic,4*fHarmonic,2*fHarmonic));
3294  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(51,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,2*fHarmonic,4*fHarmonic,3*fHarmonic));
3295  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(52,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,1*fHarmonic,4*fHarmonic,3*fHarmonic));
3296  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(53,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,1*fHarmonic,5*fHarmonic,2*fHarmonic));
3297  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(54,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",6*fHarmonic,3*fHarmonic,2*fHarmonic,1*fHarmonic));
3298  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(55,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,2*fHarmonic,5*fHarmonic,3*fHarmonic));
3299  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(56,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,3*fHarmonic,5*fHarmonic,4*fHarmonic));
3300  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(57,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",3*fHarmonic,2*fHarmonic,3*fHarmonic,1*fHarmonic,1*fHarmonic));
3301  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(58,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,1*fHarmonic,2*fHarmonic,2*fHarmonic,1*fHarmonic));
3302  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(59,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,2*fHarmonic,3*fHarmonic,2*fHarmonic,1*fHarmonic));
3303  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(60,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,3*fHarmonic,3*fHarmonic,2*fHarmonic,2*fHarmonic));
3304  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(61,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,2*fHarmonic,4*fHarmonic,1*fHarmonic,1*fHarmonic));
3305  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(62,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,3*fHarmonic,4*fHarmonic,2*fHarmonic,1*fHarmonic));
3306  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(63,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,1*fHarmonic,3*fHarmonic,2*fHarmonic,1*fHarmonic));
3307  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(64,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,2*fHarmonic,5*fHarmonic,1*fHarmonic,1*fHarmonic));
3308  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(65,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,2*fHarmonic,4*fHarmonic,2*fHarmonic,1*fHarmonic));
3309  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(66,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,3*fHarmonic,4*fHarmonic,3*fHarmonic,1*fHarmonic));
3310  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(67,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,4*fHarmonic,4*fHarmonic,3*fHarmonic,2*fHarmonic));
3311  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(68,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,3*fHarmonic,5*fHarmonic,2*fHarmonic,1*fHarmonic));
3312  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(69,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,4*fHarmonic,5*fHarmonic,2*fHarmonic,2*fHarmonic));
3313  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(70,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,4*fHarmonic,5*fHarmonic,3*fHarmonic,1*fHarmonic));
3314  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(71,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,1*fHarmonic,3*fHarmonic,3*fHarmonic,1*fHarmonic));
3315  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(72,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,2*fHarmonic,3*fHarmonic,3*fHarmonic,2*fHarmonic));
3316  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(73,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,1*fHarmonic,4*fHarmonic,2*fHarmonic,1*fHarmonic));
3317  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(74,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,3*fHarmonic,4*fHarmonic,3*fHarmonic,2*fHarmonic));
3318  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(75,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,4*fHarmonic,4*fHarmonic,3*fHarmonic,3*fHarmonic));
3319  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(76,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,2*fHarmonic,5*fHarmonic,2*fHarmonic,1*fHarmonic));
3320  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(77,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,3*fHarmonic,5*fHarmonic,3*fHarmonic,1*fHarmonic));
3321  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(78,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,4*fHarmonic,5*fHarmonic,4*fHarmonic,1*fHarmonic));
3322  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(79,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,5*fHarmonic,5*fHarmonic,3*fHarmonic,3*fHarmonic));
3323  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(80,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,2*fHarmonic,6*fHarmonic,1*fHarmonic,1*fHarmonic));
3324  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(81,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,3*fHarmonic,6*fHarmonic,2*fHarmonic,1*fHarmonic));
3325  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(82,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,4*fHarmonic,6*fHarmonic,2*fHarmonic,2*fHarmonic));
3326  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(83,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,4*fHarmonic,6*fHarmonic,3*fHarmonic,1*fHarmonic));
3327  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(84,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,5*fHarmonic,5*fHarmonic,4*fHarmonic,2*fHarmonic));
3328  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(85,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,5*fHarmonic,6*fHarmonic,3*fHarmonic,2*fHarmonic));
3329  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(86,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,5*fHarmonic,6*fHarmonic,4*fHarmonic,1*fHarmonic));
3330  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(87,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",2*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic));
3331  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(88,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",2*fHarmonic,2*fHarmonic,2*fHarmonic,1*fHarmonic,1*fHarmonic));
3332  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(89,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",3*fHarmonic,3*fHarmonic,2*fHarmonic,2*fHarmonic,2*fHarmonic));
3333  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(90,Form("#LT#LT5#GT#GT_{%dn|%dn,%dn,%dn,%dn}",4*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic));
3334  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(91,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,2*fHarmonic,2*fHarmonic,2*fHarmonic,2*fHarmonic));
3335  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(92,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,4*fHarmonic,4*fHarmonic,2*fHarmonic,2*fHarmonic));
3336  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(93,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,3*fHarmonic,3*fHarmonic,3*fHarmonic,3*fHarmonic));
3337  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(94,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,6*fHarmonic,4*fHarmonic,4*fHarmonic,4*fHarmonic));
3338  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(95,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,6*fHarmonic,6*fHarmonic,3*fHarmonic,3*fHarmonic));
3339  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(96,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",3*fHarmonic,1*fHarmonic,2*fHarmonic,1*fHarmonic,1*fHarmonic));
3340  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(97,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",3*fHarmonic,2*fHarmonic,2*fHarmonic,2*fHarmonic,1*fHarmonic));
3341  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(98,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",3*fHarmonic,3*fHarmonic,3*fHarmonic,2*fHarmonic,1*fHarmonic));
3342  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(99,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,1*fHarmonic,3*fHarmonic,1*fHarmonic,1*fHarmonic));
3343  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(100,Form("#LT#LT5#GT#GT_{%dn,%dn,%dn|%dn,%dn}",4*fHarmonic,1*fHarmonic,1*fHarmonic,3*fHarmonic,3*fHarmonic));
3344  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(101,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,3*fHarmonic,3*fHarmonic,3*fHarmonic,1*fHarmonic));
3345  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(102,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,4*fHarmonic,3*fHarmonic,3*fHarmonic,2*fHarmonic));
3346  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(103,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,4*fHarmonic,4*fHarmonic,3*fHarmonic,1*fHarmonic));
3347  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(104,Form("#LT#LT5#GT#GT_{%dn|%dn,%dn,%dn,%dn}",5*fHarmonic,2*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic));
3348  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(105,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,1*fHarmonic,2*fHarmonic,2*fHarmonic,2*fHarmonic));
3349  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(106,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,2*fHarmonic,3*fHarmonic,2*fHarmonic,2*fHarmonic));
3350  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(107,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,3*fHarmonic,3*fHarmonic,3*fHarmonic,2*fHarmonic));
3351  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(108,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,1*fHarmonic,4*fHarmonic,1*fHarmonic,1*fHarmonic));
3352  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(109,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,4*fHarmonic,3*fHarmonic,3*fHarmonic,3*fHarmonic));
3353  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(110,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,4*fHarmonic,4*fHarmonic,4*fHarmonic,1*fHarmonic));
3354  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(111,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,5*fHarmonic,4*fHarmonic,3*fHarmonic,3*fHarmonic));
3355  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(112,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,5*fHarmonic,4*fHarmonic,4*fHarmonic,2*fHarmonic));
3356  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(113,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,5*fHarmonic,5*fHarmonic,3*fHarmonic,2*fHarmonic));
3357  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(114,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,5*fHarmonic,5*fHarmonic,4*fHarmonic,1*fHarmonic));
3358  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(115,Form("#LT#LT5#GT#GT_{%dn|%dn,%dn,%dn,%dn}",6*fHarmonic,2*fHarmonic,2*fHarmonic,1*fHarmonic,1*fHarmonic));
3359  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(116,Form("#LT#LT5#GT#GT_{%dn|%dn,%dn,%dn,%dn}",6*fHarmonic,3*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic));
3360  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(117,Form("#LT#LT5#GT#GT_{%dn,%dn,%dn|%dn,%dn}",6*fHarmonic,1*fHarmonic,1*fHarmonic,4*fHarmonic,4*fHarmonic));
3361  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(118,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,1*fHarmonic,5*fHarmonic,1*fHarmonic,1*fHarmonic));
3362  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(119,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,2*fHarmonic,4*fHarmonic,2*fHarmonic,2*fHarmonic));
3363  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(120,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,4*fHarmonic,4*fHarmonic,4*fHarmonic,2*fHarmonic));
3364  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(121,Form("#LT#LT5#GT#GT_{%dn,%dn,%dn|%dn,%dn}",6*fHarmonic,2*fHarmonic,2*fHarmonic,5*fHarmonic,5*fHarmonic));
3365  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(122,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,5*fHarmonic,5*fHarmonic,5*fHarmonic,1*fHarmonic));
3366  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(123,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,6*fHarmonic,5*fHarmonic,5*fHarmonic,2*fHarmonic));
3367  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(124,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,6*fHarmonic,6*fHarmonic,4*fHarmonic,2*fHarmonic));
3368  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(125,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,6*fHarmonic,6*fHarmonic,5*fHarmonic,1*fHarmonic));
3369  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(126,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,2*fHarmonic,3*fHarmonic,3*fHarmonic,1*fHarmonic));
3370  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(127,Form("#LT#LT5#GT#GT_{%dn,%dn,%dn|%dn,%dn}",5*fHarmonic,1*fHarmonic,1*fHarmonic,4*fHarmonic,3*fHarmonic));
3371  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(128,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,3*fHarmonic,4*fHarmonic,2*fHarmonic,2*fHarmonic));
3372  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(129,Form("#LT#LT5#GT#GT_{%dn,%dn,%dn|%dn,%dn}",5*fHarmonic,2*fHarmonic,1*fHarmonic,4*fHarmonic,4*fHarmonic));
3373  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(130,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,1*fHarmonic,3*fHarmonic,2*fHarmonic,2*fHarmonic));
3374  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(131,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,3*fHarmonic,4*fHarmonic,4*fHarmonic,1*fHarmonic));
3375  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(132,Form("#LT#LT5#GT#GT_{%dn,%dn,%dn|%dn,%dn}",6*fHarmonic,1*fHarmonic,1*fHarmonic,5*fHarmonic,3*fHarmonic));
3376  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(133,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,3*fHarmonic,5*fHarmonic,2*fHarmonic,2*fHarmonic));
3377  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(134,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,5*fHarmonic,4*fHarmonic,4*fHarmonic,3*fHarmonic));
3378  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(135,Form("#LT#LT5#GT#GT_{%dn,%dn,%dn|%dn,%dn}",6*fHarmonic,3*fHarmonic,1*fHarmonic,5*fHarmonic,5*fHarmonic));
3379  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(136,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,6*fHarmonic,5*fHarmonic,4*fHarmonic,3*fHarmonic));
3380  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(137,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,2*fHarmonic,4*fHarmonic,3*fHarmonic,1*fHarmonic));
3381  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(138,Form("#LT#LT5#GT#GT_{%dn,%dn,%dn|%dn,%dn}",6*fHarmonic,2*fHarmonic,1*fHarmonic,5*fHarmonic,4*fHarmonic));
3382  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(139,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,4*fHarmonic,5*fHarmonic,3*fHarmonic,2*fHarmonic));
3383  // y-axis:
3384  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(1,Form("#LT#LT2#GT#GT_{%dn|%dn}",1*fHarmonic,1*fHarmonic));
3385  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(2,Form("#LT#LT2#GT#GT_{%dn|%dn}",2*fHarmonic,2*fHarmonic));
3386  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(3,Form("#LT#LT2#GT#GT_{%dn|%dn}",3*fHarmonic,3*fHarmonic));
3387  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(4,Form("#LT#LT2#GT#GT_{%dn|%dn}",4*fHarmonic,4*fHarmonic));
3388  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(5,Form("#LT#LT2#GT#GT_{%dn|%dn}",5*fHarmonic,5*fHarmonic));
3389  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(6,Form("#LT#LT2#GT#GT_{%dn|%dn}",6*fHarmonic,6*fHarmonic));
3390  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(7,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",2*fHarmonic,1*fHarmonic,1*fHarmonic));
3391  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(8,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",4*fHarmonic,2*fHarmonic,2*fHarmonic));
3392  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(9,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",6*fHarmonic,3*fHarmonic,3*fHarmonic));
3393  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(10,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",3*fHarmonic,2*fHarmonic,1*fHarmonic));
3394  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(11,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",4*fHarmonic,3*fHarmonic,1*fHarmonic));
3395  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(12,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",5*fHarmonic,3*fHarmonic,2*fHarmonic));
3396  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(13,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",5*fHarmonic,4*fHarmonic,1*fHarmonic));
3397  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(14,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",6*fHarmonic,4*fHarmonic,2*fHarmonic));
3398  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(15,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",6*fHarmonic,5*fHarmonic,1*fHarmonic));
3399  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(16,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",1*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic));
3400  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(17,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",2*fHarmonic,2*fHarmonic,2*fHarmonic,2*fHarmonic));
3401  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(18,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",3*fHarmonic,3*fHarmonic,3*fHarmonic,3*fHarmonic));
3402  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(19,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,4*fHarmonic,4*fHarmonic,4*fHarmonic));
3403  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(20,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,5*fHarmonic,5*fHarmonic,5*fHarmonic));
3404  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(21,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,6*fHarmonic,6*fHarmonic,6*fHarmonic));
3405  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(22,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",2*fHarmonic,1*fHarmonic,2*fHarmonic,1*fHarmonic));
3406  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(23,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",3*fHarmonic,1*fHarmonic,3*fHarmonic,1*fHarmonic));
3407  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(24,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",3*fHarmonic,2*fHarmonic,3*fHarmonic,2*fHarmonic));
3408  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(25,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,1*fHarmonic,4*fHarmonic,1*fHarmonic));
3409  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(26,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,2*fHarmonic,4*fHarmonic,2*fHarmonic));
3410  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(27,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,3*fHarmonic,4*fHarmonic,3*fHarmonic));
3411  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(28,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,1*fHarmonic,5*fHarmonic,1*fHarmonic));
3412  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(29,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,2*fHarmonic,5*fHarmonic,2*fHarmonic));
3413  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(30,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,3*fHarmonic,5*fHarmonic,3*fHarmonic));
3414  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(31,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,4*fHarmonic,5*fHarmonic,4*fHarmonic));
3415  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(32,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,1*fHarmonic,6*fHarmonic,1*fHarmonic));
3416  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(33,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,2*fHarmonic,6*fHarmonic,2*fHarmonic));
3417  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(34,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,3*fHarmonic,6*fHarmonic,3*fHarmonic));
3418  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(35,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,4*fHarmonic,6*fHarmonic,4*fHarmonic));
3419  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(36,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,5*fHarmonic,6*fHarmonic,5*fHarmonic));
3420  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(37,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",3*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic));
3421  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(38,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",6*fHarmonic,2*fHarmonic,2*fHarmonic,2*fHarmonic));
3422  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(39,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",3*fHarmonic,1*fHarmonic,2*fHarmonic,2*fHarmonic));
3423  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(40,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",4*fHarmonic,2*fHarmonic,1*fHarmonic,1*fHarmonic));
3424  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(41,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,2*fHarmonic,3*fHarmonic,3*fHarmonic));
3425  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(42,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",5*fHarmonic,2*fHarmonic,2*fHarmonic,1*fHarmonic));
3426  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(43,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",5*fHarmonic,3*fHarmonic,1*fHarmonic,1*fHarmonic));
3427  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(44,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,1*fHarmonic,3*fHarmonic,3*fHarmonic));
3428  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetBinLabel(45,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,3*fHarmonic,4*