AliPhysics  a88b1f0 (a88b1f0)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliFlowAnalysisCRC.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  * Charge-rapidity correlations with Q-cumulants *
18  * *
19  * author: Jacopo Margutti *
20  * (margutti@nikhef.nl) *
21  *************************************************/
22 
23 #define AliFlowAnalysisCRC_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 "TProfile3D.h"
40 #include "TMath.h"
41 #include "TArrow.h"
42 #include "TPaveLabel.h"
43 #include "TCanvas.h"
44 #include "AliFlowEventSimple.h"
45 #include "AliFlowVector.h"
46 #include "AliFlowTrackSimple.h"
47 #include "AliFlowAnalysisCRC.h"
48 #include "AliLog.h"
49 #include "TRandom.h"
50 #include "TF1.h"
51 #include "TNtuple.h"
52 #include "THnSparse.h"
53 #include <cmath>
54 
55 class TH1;
56 class TH2;
57 class TGraph;
58 class TPave;
59 class TLatex;
60 class TMarker;
61 class TRandom3;
62 class TObjArray;
63 class TList;
64 class TCanvas;
65 class TSystem;
66 class TROOT;
67 class AliFlowVector;
68 class TVector;
69 
70 //==============================================================================================================
71 
72 using std::endl;
73 using std::cout;
74 using std::flush;
76 
77 AliFlowAnalysisCRC::AliFlowAnalysisCRC(const char* name,
78  Int_t nCen,
79  Double_t CenWidth):
80 TNamed(name,name),
81 // 0.) base:
82 fHistList(NULL),
83 // 1.) common:
84 fBookOnlyBasicCCH(kTRUE),
85 fCommonHists(NULL),
86 fCommonHists2nd(NULL),
87 fCommonHists4th(NULL),
88 fCommonHists6th(NULL),
89 fCommonHists8th(NULL),
90 fCommonHistsResults2nd(NULL),
91 fCommonHistsResults4th(NULL),
92 fCommonHistsResults6th(NULL),
93 fCommonHistsResults8th(NULL),
94 fnBinsPhi(0),
95 fPhiMin(0),
96 fPhiMax(0),
97 fPhiBinWidth(0),
98 fnBinsPt(0),
99 fPtMin(0),
100 fPtMax(0),
101 fPtBinWidth(0),
102 fnBinsEta(0),
103 fEtaMin(0),
104 fEtaMax(0),
105 fEtaBinWidth(0),
106 fCommonConstants(NULL),
107 fFillMultipleControlHistograms(kFALSE),
108 fHarmonic(1),
109 fAnalysisLabel(NULL),
110 // 2a.) particle weights:
111 fUsePhiWeights(kFALSE),
112 fUsePtWeights(kFALSE),
113 fUseEtaWeights(kFALSE),
114 fUseTrackWeights(kFALSE),
115 fUsePhiEtaWeights(kFALSE),
116 fUsePhiEtaWeightsChDep(kFALSE),
117 fUsePhiEtaWeightsVtxDep(kFALSE),
118 fUseZDCESEMulWeights(kFALSE),
119 fUseZDCESESpecWeights(kFALSE),
120 fUseParticleWeights(NULL),
121 // 2b.) event weights:
122 fMultiplicityWeight(NULL),
123 fMultiplicityIs(AliFlowCommonConstants::kRP),
124 // 3.) integrated flow:
125 fIntFlowList(NULL),
126 fIntFlowProfiles(NULL),
127 fIntFlowResults(NULL),
128 fIntFlowAllCorrelationsVsM(NULL),
129 fIntFlowFlags(NULL),
130 fApplyCorrectionForNUA(kFALSE),
131 fApplyCorrectionForNUAVsM(kFALSE),
132 fnBinsMult(10000),
133 fMinMult(0.),
134 fMaxMult(10000.),
135 fPropagateErrorAlsoFromNIT(kFALSE),
136 fCalculateCumulantsVsM(kFALSE),
137 fCalculateAllCorrelationsVsM(kFALSE),
138 fMinimumBiasReferenceFlow(kTRUE),
139 fForgetAboutCovariances(kFALSE),
140 fStoreVarious(kFALSE),
141 fExactNoRPs(0),
142 fUse2DHistograms(kFALSE),
143 fFillProfilesVsMUsingWeights(kTRUE),
144 fUseQvectorTerms(kFALSE),
145 fReQ(NULL),
146 fImQ(NULL),
147 fSpk(NULL),
148 fIntFlowCorrelationsEBE(NULL),
149 fIntFlowEventWeightsForCorrelationsEBE(NULL),
150 fIntFlowCorrelationsAllEBE(NULL),
151 fNumberOfRPsEBE(0.),
152 fNumberOfPOIsEBE(0.),
153 fReferenceMultiplicityEBE(0.),
154 fCentralityEBE(0.),
155 fNewCentralityEBE(0.),
156 fZDCESEclEbE(0),
157 fNewMetricLEBE(0.),
158 fNewMetricDEBE(0.),
159 fNewMetricL2EBE(0.),
160 fNewMetricD2EBE(0.),
161 fCentralityCL1EBE(0.),
162 fNITSCL1EBE(0.),
163 fCentralityTRKEBE(0.),
164 fZNCen(0.),
165 fZNAen(0.),
166 fEnNucl(1.),
167 fAvMultiplicity(NULL),
168 fIntFlowCorrelationsPro(NULL),
169 fIntFlowSquaredCorrelationsPro(NULL),
170 fIntFlowCorrelationsAllPro(NULL),
171 fIntFlowExtraCorrelationsPro(NULL),
172 fIntFlowProductOfCorrelationsPro(NULL),
173 fIntFlowProductOfCorrectionTermsForNUAPro(NULL),
174 fIntFlowCorrelationsHist(NULL),
175 fIntFlowCorrelationsAllHist(NULL),
176 fIntFlowCovariances(NULL),
177 fIntFlowSumOfProductOfEventWeights(NULL),
178 fIntFlowCovariancesNUA(NULL),
179 fIntFlowSumOfProductOfEventWeightsNUA(NULL),
180 fIntFlowQcumulants(NULL),
181 fIntFlowQcumulantsRebinnedInM(NULL),
182 fIntFlowQcumulantsErrorSquaredRatio(NULL),
183 fIntFlow(NULL),
184 fIntFlowRebinnedInM(NULL),
185 fIntFlowDetectorBias(NULL),
186 // 4.) differential flow:
187 fDiffFlowList(NULL),
188 fDiffFlowProfiles(NULL),
189 fDiffFlowResults(NULL),
190 fDiffFlow2D(NULL),
191 fDiffFlowFlags(NULL),
192 fCalculateDiffFlow(kTRUE),
193 fCalculate2DDiffFlow(kFALSE),
194 fCalculateDiffFlowVsEta(kTRUE),
195 // 5.) other differential correlators:
196 fOtherDiffCorrelatorsList(NULL),
197 // 6.) distributions:
198 fDistributionsList(NULL),
199 fDistributionsFlags(NULL),
200 fStoreDistributions(kFALSE),
201 fnBinsForCorrelations(10000),
202 // 8.) debugging and cross-checking:
203 fNestedLoopsList(NULL),
204 fEvaluateIntFlowNestedLoops(kFALSE),
205 fEvaluateDiffFlowNestedLoops(kFALSE),
206 fMaxAllowedMultiplicity(10),
207 fEvaluateNestedLoops(NULL),
208 fIntFlowDirectCorrelations(NULL),
209 fIntFlowExtraDirectCorrelations(NULL),
210 fCrossCheckInPtBinNo(10),
211 fCrossCheckInEtaBinNo(20),
212 fNoOfParticlesInBin(NULL),
213 fMixedHarmonicsNestedLoops(NULL),
214 // 9.) mixed harmonics:
215 fMixedHarmonicsList(NULL),
216 fMixedHarmonicsProfiles(NULL),
217 fMixedHarmonicsResults(NULL),
218 fMixedHarmonicsErrorPropagation(NULL),
219 fMixedHarmonicsFlags(NULL),
220 fCalculateMixedHarmonics(kFALSE),
221 fCalculateMixedHarmonicsVsM(kFALSE),
222 f2pCorrelations(NULL),
223 f3pCorrelations(NULL),
224 f4pCorrelations(NULL),
225 f5pCorrelations(NULL),
226 f6pCorrelations(NULL),
227 f7pCorrelations(NULL),
228 f8pCorrelations(NULL),
229 f2pCumulants(NULL),
230 f3pCumulants(NULL),
231 f4pCumulants(NULL),
232 f5pCumulants(NULL),
233 f6pCumulants(NULL),
234 f7pCumulants(NULL),
235 f8pCumulants(NULL),
236 fMixedHarmonicProductOfEventWeights(NULL),
237 fMixedHarmonicProductOfCorrelations(NULL),
238 // 10.) Control histograms:
239 fControlHistogramsList(NULL),
240 fControlHistogramsFlags(NULL),
241 fStoreControlHistograms(kFALSE),
242 fCorrelationNoRPsVsRefMult(NULL),
243 fCorrelationNoPOIsVsRefMult(NULL),
244 fCorrelationNoRPsVsNoPOIs(NULL),
245 // 11.) Bootstrap:
246 fBootstrapList(NULL),
247 fBootstrapProfilesList(NULL),
248 fBootstrapResultsList(NULL),
249 fBootstrapFlags(NULL),
250 fUseBootstrap(kFALSE),
251 fUseBootstrapVsM(kFALSE),
252 fnSubsamples(10),
253 fRandom(NULL),
254 fBootstrapCorrelations(NULL),
255 fBootstrapCumulants(NULL),
256 // 12.) Charge-Eta Asymmetry:
257 fCRCList(NULL),
258 fTempList(NULL),
259 fCRCFlags(NULL),
260 fCalculateCRC(kTRUE),
261 fCalculateCRCPt(kFALSE),
262 fCalculateCME(kFALSE),
263 fCalculateCRC2(kFALSE),
264 fCalculateCRCVZ(kFALSE),
265 fCalculateCRCZDC(kFALSE),
266 fCalculateFlowQC(kFALSE),
267 fCalculateFlowZDC(kFALSE),
268 fCalculateFlowVZ(kFALSE),
269 fCalculateEbEFlow(kFALSE),
270 fUsePhiEtaCuts(kFALSE),
271 fUseVZERO(kFALSE),
272 fUseZDC(kFALSE),
273 fRecenterZDC(kFALSE),
274 fNUAforCRC(kFALSE),
275 fUseCRCRecenter(kFALSE),
276 fDivSigma(kTRUE),
277 fInvertZDC(kFALSE),
278 fCRCTestSin(kFALSE),
279 fCRCEtaMin(0.),
280 fCRCEtaMax(0.),
281 fRunNum(0),
282 fCachedRunNum(0),
283 fRunBin(0),
284 fCenBin(0),
285 fCorrWeightTPC(kUnit),
286 fCorrWeightVZ(kUnit),
287 fCorrWeightZDC(kUnit),
288 fCRCIntList(NULL),
289 fCRCnCen(nCen),
290 fCRCCenBinWidth(CenWidth),
291 fCRCIntRbRList(NULL),
292 fCRCnRun(211),
293 fDataSet(kAny),
294 fInteractionRate(kAll),
295 fSelectCharge(kAllCh),
296 fCRCQVecList(NULL),
297 fCRCQVecWeightsList(NULL),
298 fCRCZDCCalibList(NULL),
299 fCRCZDCResList(NULL),
300 fZDCESEList(NULL),
301 fPhiEtaCutsList(NULL),
302 fCRCVZList(NULL),
303 fCRCVZRbRList(NULL),
304 fCRCZDCList(NULL),
305 fCRCZDCRbRList(NULL),
306 fCRCPtList(NULL),
307 fCMEList(NULL),
308 fCMETPCList(NULL),
309 fCMEZDCList(NULL),
310 fCRC2List(NULL),
311 fCRC2nEtaBins(6),
312 fCRC2RbRList(NULL),
313 fFlowSPZDCList(NULL),
314 fFlowQCList(NULL),
315 fFlowQCOrdMagList(NULL),
316 fFlowQCHOList(NULL),
317 fFlowQCCenBin(100),
318 fFlowQCDeltaEta(0.4),
319 fFlowSPVZList(NULL),
320 fVariousList(NULL),
321 fEbEFlowList(NULL),
322 fCenWeightEbE(0.),
323 fQAZDCCuts(kFALSE),
324 fQAZDCCutsFlag(kTRUE),
325 fMinMulZN(0),
326 fMaxDevZN(5.)
327 {
328  // constructor
329 
330  // base list to hold all output objects:
331  fHistList = new TList();
332  fHistList->SetName("cobjQC");
333  fHistList->SetOwner(kTRUE);
334 
335  // base list to hold all temp objects:
336  fTempList = new TList();
337  fTempList->SetName("temp");
338  fTempList->SetOwner(kTRUE);
339 
340  // multiplicity weight:
341  fMultiplicityWeight = new TString("combinations");
342 
343  // analysis label;
344  fAnalysisLabel = new TString();
345 
346  // initialize all arrays:
347  this->InitializeArraysForIntFlow();
348  this->InitializeArraysForDiffFlow();
349  this->InitializeArraysForDistributions();
350  this->InitializeArraysForVarious();
351  this->InitializeArraysForNestedLoops();
352  this->InitializeArraysForMixedHarmonics();
353  this->InitializeArraysForControlHistograms();
354  this->InitializeArraysForBootstrap();
355 
356  fRunList = TArrayI();
357 
358  // CRC
359  this->InitializeCostantsForCRC();
360  this->InitializeArraysForParticleWeights();
361  this->InitializeArraysForCRC();
362  this->InitializeArraysForCRCVZ();
363  this->InitializeArraysForCRCZDC();
364  this->InitializeArraysForCRC2();
365  this->InitializeArraysForQVec();
366  this->InitializeArraysForCRCPt();
367  this->InitializeArraysForCME();
368  this->InitializeArraysForFlowEbE();
369  this->InitializeArraysForFlowQC();
370  this->InitializeArraysForFlowQCHighOrders();
371  this->InitializeArraysForFlowSPZDC();
372  this->InitializeArraysForFlowSPVZ();
373  this->InitializeArraysForEbEFlow();
374 
375  // printf("Arrays initialized \n");
376 
377 } // end of constructor
378 
379 //================================================================================================================
380 
382 {
383  // destructor
384  delete fHistList;
385  delete fTempList;
386  delete fCRCQVecWeightsList;
387  delete fCRCZDCCalibList;
388  delete fCRCZDCResList;
389  delete fZDCESEList;
390  delete fPhiEtaCutsList;
391  delete[] fCRCPtvarPtBins;
392  delete[] fCRCPtBins;
393  delete[] fZDCEPweightEbE;
394  delete[] fCorrMap;
395  delete[] fchisqVA;
396  delete[] fchisqVC;
397 } // end of AliFlowAnalysisCRC::~AliFlowAnalysisCRC()
398 
399 //================================================================================================================
400 
402 {
403  // a) Cross check if the settings make sense before starting the QC adventure;
404  // b) Access all common constants;
405  // c) Book all objects;
406  // d) Store flags for integrated and differential flow;
407  // e) Store flags for distributions of corelations;
408  // f) Store harmonic which will be estimated;
409  // g) Store flags for mixed harmonics;
410  // h) Store flags for control histograms;
411  // i) Store bootstrap flags.
412 
413  //save old value and prevent histograms from being added to directory
414  //to avoid name clashes in case multiple analaysis objects are used
415  //in an analysis
416  Bool_t oldHistAddStatus = TH1::AddDirectoryStatus();
417  TH1::AddDirectory(kFALSE);
418  fRandom = new TRandom3(0); // if uiSeed is 0, the seed is determined uniquely in space and time via TUUID
419 
420  // a) Cross check if the settings make sense before starting the QC adventure;
421  this->CrossCheckSettings();
422  // b) Access all common constants and book a profile to hold them:
423  this->CommonConstants("Init");
424  // c) Book all objects:
426  this->BookAndNestAllLists();
427  this->BookCommonHistograms();
436  this->SetRunList();
437  this->BookEverythingForCRC();
438  this->BookEverythingForCRCVZ();
439  this->BookEverythingForCRCZDC();
440  this->BookEverythingForCRCPt();
441  this->BookEverythingForCRC2();
442  this->BookEverythingForQVec();
443  this->BookEverythingForCME();
444  this->BookEverythingForFlowEbE();
445  this->BookEverythingForFlowQC();
449  this->BookEverythingForEbEFlow();
450  this->BookEverythingForVarious();
451 
452  this->SetCentralityWeights();
453 
454  // d) Store flags for integrated and differential flow:
455  this->StoreIntFlowFlags();
456  this->StoreDiffFlowFlags();
457  // e) Store flags for distributions of corelations:
459  // f) Store harmonic which will be estimated:
460  this->StoreHarmonic();
461  // g) Store flags for mixed harmonics:
462  this->StoreMixedHarmonicsFlags();
463  // h) Store flags for control histograms:
465  // i) Store bootstrap flags:
466  this->StoreBootstrapFlags();
467  // j) Store CRC flags:
468  this->StoreCRCFlags();
469 
470  TH1::AddDirectory(oldHistAddStatus);
471 
472  // printf("Stuff booked \n");
473 
474 } // end of void AliFlowAnalysisCRC::Init()
475 
476 //================================================================================================================
477 
479 {
480  // Running over data only in this method.
481  // a) Check all pointers used in this method;
482  // b) Define local variables;
483  // c) Fill the common control histograms and call the method to fill fAvMultiplicity;
484  // d) Loop over data and calculate e-b-e quantities Q_{n,k}, S_{p,k} and s_{p,k};
485  // d.1) initialize particle weights
486  // e) Calculate the final expressions for S_{p,k} and s_{p,k} (important !!!!);
487  // f) Call the methods which calculate correlations for reference flow;
488  // g) Call the methods which calculate correlations for differential flow;
489  // h) Call the methods which calculate correlations for 2D differential flow;
490  // i) Call the methods which calculate other differential correlators;
491  // j) Distributions of correlations;
492  // k) Store various;
493  // l) Cross-check with nested loops correlators for reference flow;
494  // m) Cross-check with nested loops correlators for differential flow;
495  // n) Reset all event-by-event quantities (very important !!!!).
496 
497  // a) Check all pointers used in this method:
498  this->CheckPointersUsedInMake();
499 
500  // b) Define local variables:
501  Double_t dPhi = 0.; // azimuthal angle in the laboratory frame
502  Double_t dPt = 0.; // transverse momentum
503  Double_t dEta = 0.; // pseudorapidity
504  Double_t wPhi = 1.; // phi weight
505  Double_t wPt = 1.; // pt weight
506  Double_t wEta = 1.; // eta weight
507  Double_t wTrack = 1.; // track weight
508  Double_t wPhiEta = 1.;
509  Double_t wt = 1.;
510  Double_t wProbCut = 1.;
511  Int_t nCounterNoRPs = 0; // needed only for shuffling
512  fNumberOfRPsEBE = anEvent->GetNumberOfRPs(); // number of RPs (i.e. number of reference particles)
513  fNumberOfPOIsEBE = anEvent->GetNumberOfPOIs(); // number of POIs (i.e. number of particles of interest)
514  fReferenceMultiplicityEBE = anEvent->GetReferenceMultiplicity(); // reference multiplicity for current event
515  fCentralityEBE = anEvent->GetCentrality(); // centrality percentile for current event
516  fCentralityCL1EBE = anEvent->GetCentralityCL1(); // centrality percentile for current event (alternative estimation)
517  fCentralityTRKEBE = anEvent->GetCentralityTRK(); // centrality percentile for current event (alternative estimation)
518  fNITSCL1EBE = anEvent->GetNITSCL1();
519 
520  // printf("debug: NoRPs %e, NoPOIs %e, RunNum %d, Cen %e \n",fNumberOfRPsEBE,fNumberOfPOIsEBE,fRunNum,fCentralityEBE);
521 
522  if(fExactNoRPs > 0 && fNumberOfRPsEBE<fExactNoRPs){return;}
523  if(!fCentralityEBE){return;}
524  if(!fNumberOfRPsEBE || !fNumberOfPOIsEBE){return;}
526  if(fDataSet==k2015 && !MultCut2015o()){return;}
527 
528  // centrality flattening with weights
529  fCenWeightEbE = 1.;
531 
532  // primary vertex position (x,y,z)
533  anEvent->GetVertexPosition(fVtxPos);
534 
535  Double_t ptEta[2] = {0.,0.}; // 0 = dPt, 1 = dEta
536  Int_t dCharge = 0; // charge
537 
538  // d) Loop over data and calculate e-b-e quantities Q_{n,k}, S_{p,k} and s_{p,k}:
539  Int_t nPrim = anEvent->NumberOfTracks(); // nPrim = total number of primary tracks
540  AliFlowTrackSimple *aftsTrack = NULL;
541  Int_t n = fHarmonic; // shortcut for the harmonic
542 
543  // d.1) Initialize particle weights
544  Int_t cw = 0;
545 
546  if (fDataSet==kAny) {fRunBin = 0;}
547  else {fRunBin = GetCRCRunBin(fRunNum);}
548  if(fRunBin<0 || fRunBin>=fCRCnRun) {return;}
550  if(fCenBin<0 || fCenBin>=fCRCnCen) {return;}
551 
555 
556  // VZERO *********************************************************************************************************
557 
558  if(fUseVZERO) {
559  for(Int_t h=0; h<fCRCnHar; h++) {
560  // Get Q vectors for the subevents
561  AliFlowVector vQarray[2];
562  anEvent->Get2Qsub(vQarray,h+1);
563  fVZFlowVect[0][h] = vQarray[0];
564  fVZFlowVect[1][h] = vQarray[1];
565  } // end of for(Int_t h=0; h<fCRCnHar; h++)
566  } // end of if(fUseVZERO)
567 
568  // ZDC *********************************************************************************************************
569 
570  if(fUseZDC) {
571  // Get Q vectors for the subevents
572  AliFlowVector vQarray[2];
573  anEvent->GetZDC2Qsub(vQarray);
574  fZDCFlowVect[0] = vQarray[0];
575  fZDCFlowVect[1] = vQarray[1];
576  fZNCen = anEvent->GetZNCEnergy()/fEnNucl;
577  fZNAen = anEvent->GetZNAEnergy()/fEnNucl;
578  } // end of if(fUseZDC)
579 
580  this->CalculateCRCQVec();
581  if(fRecenterZDC) {
582  this->RecenterCRCQVecZDC();
583  }
584  // ZDC-C (eta < -8.8)
585  Double_t ZCRe = fZDCFlowVect[0].X();
586  Double_t ZCIm = fZDCFlowVect[0].Y();
587  Double_t ZCM = fZDCFlowVect[0].GetMult();
588  // ZDC-A (eta > 8.8)
589  Double_t ZARe = fZDCFlowVect[1].X();
590  Double_t ZAIm = fZDCFlowVect[1].Y();
591  Double_t ZAM = fZDCFlowVect[1].GetMult();
592  if( fInvertZDC ) ZARe = -ZARe;
593 
594  if(fCalculateCRC) {
595  fQAZDCCutsFlag = this->PassQAZDCCuts();
596  }
597 
599  if(fWeightsList->FindObject(Form("fCenPhiEtaWeights[%d]",fRunNum))) {
600  fPhiEtaWeights = (TH3D*)(fWeightsList->FindObject(Form("fCenPhiEtaWeights[%d]",fRunNum)));
601  } else {
602  AliWarning(Form("WARNING: cenphieta weights not found for run %d! \n",fRunNum));
603  }
604  }
606  if(fWeightsListChDep->FindObject(Form("fCenPhiEtaWeightsPos[%d]",fRunNum))) {
607  fPhiEtaWeightsPos = (TH3D*)(fWeightsListChDep->FindObject(Form("fCenPhiEtaWeightsPos[%d]",fRunNum)));
608  } else {
609  AliWarning(Form("WARNING: pch cenphieta weights not found for run %d! \n",fRunNum));
610  }
611  if(fWeightsListChDep->FindObject(Form("fCenPhiEtaWeightsNeg[%d]",fRunNum))) {
612  fPhiEtaWeightsNeg = (TH3D*)(fWeightsListChDep->FindObject(Form("fCenPhiEtaWeightsNeg[%d]",fRunNum)));
613  } else {
614  AliWarning(Form("WARNING: nch cenphieta weights not found for run %d! \n",fRunNum));
615  }
616  }
618  if(fPhiEtaCutsList->FindObject(Form("fCenPhiEtaCut[%d]",fRunNum))) {
619  fPhiEtaCuts = (TH3F*)(fPhiEtaCutsList->FindObject(Form("fCenPhiEtaCut[%d]",fRunNum)));
620  } else {
621  AliWarning(Form("WARNING: cenphieta cut not found for run %d! \n",fRunNum));
622  }
623  }
624 
625  // EbE flow *********************************************************************************************************
626 
627  if(fCalculateEbEFlow) {
628  if(fNumberOfPOIsEBE>0 && fNumberOfPOIsEBE<=2500) {
630  } else {
631  fEBEFlowMulBin = -1;
632  }
633  }
634 
635  // loop over particles **********************************************************************************************
636 
637  for(Int_t i=0;i<nPrim;i++) {
638  if(fExactNoRPs > 0 && nCounterNoRPs>fExactNoRPs){continue;}
639  aftsTrack=anEvent->GetTrack(i);
640  if(aftsTrack) {
641  if(!(aftsTrack->InRPSelection() || aftsTrack->InPOISelection())){continue;} // safety measure: consider only tracks which are RPs or POIs
642 
643  // RPs *********************************************************************************************************
644 
645  if(aftsTrack->InRPSelection()) {
646  nCounterNoRPs++;
647  dPhi = aftsTrack->Phi();
648  dPt = aftsTrack->Pt();
649  dEta = aftsTrack->Eta();
650  dCharge = aftsTrack->Charge();
651 
652  if(fSelectCharge==kPosCh && dCharge<0.) continue;
653  if(fSelectCharge==kNegCh && dCharge>0.) continue;
654 
655  cw = (dCharge > 0. ? 0 : 1);
656  wPhi = 1.;
657  wPt = 1.;
658  wEta = 1.;
659  wTrack = 1.;
660  wPhiEta = 1.;
661  wProbCut = 0.;
662 
663  // if(fUsePhiWeights && fPhiWeightsRPs && fnBinsPhi) // determine phi weight for POI:
664  // {
665  // wPhi = fPhiWeightsPOIs[cw]->GetBinContent(1+(Int_t)(TMath::Floor(dPhi*fnBinsPhi/TMath::TwoPi())));
666  // }
667  // if(fUsePtWeights) // determine pt weight for POI:
668  // {
669  // wPt = 1.;
670  // }
671  // if(fUseEtaWeights && fEtaWeightsRPs && fEtaBinWidth) // determine eta weight for POI:
672  // {
673  // wEta = fEtaWeightsPOIs[cw]->GetBinContent(1+(Int_t)(TMath::Floor((dEta-fEtaMin)/fEtaBinWidth)));
674  // }
675  if(fUsePhiEtaWeights && fPhiEtaWeights) // determine phieta weight for POI:
676  {
677  wt = fPhiEtaWeights->GetBinContent(fPhiEtaWeights->FindBin(fCentralityEBE,dPhi,dEta));
678  if(std::isfinite(1./wt)) wPhiEta *= 1./wt;
679  }
680  if(fUsePhiEtaWeightsChDep && fPhiEtaWeightsPos && fPhiEtaWeightsNeg) // determine phieta weight for POI, ch dep:
681  {
682  if(dCharge > 0.) wt = fPhiEtaWeightsPos->GetBinContent(fPhiEtaWeightsPos->FindBin(fCentralityEBE,dPhi,dEta));
683  else wt = fPhiEtaWeightsNeg->GetBinContent(fPhiEtaWeightsNeg->FindBin(fCentralityEBE,dPhi,dEta));
684  if(std::isfinite(1./wt)) wPhiEta *= 1./wt;
685  }
686  if(fUsePhiEtaWeightsVtxDep && fPhiEtaWeightsVtx[fCenBin]) // determine phieta weight for POI:
687  {
688  wt = fPhiEtaWeightsVtx[fCenBin]->GetBinContent(fPhiEtaWeightsVtx[fCenBin]->FindBin(fVtxPos[2],dPhi,dEta));
689  if(std::isfinite(1./wt)) wPhiEta *= 1./wt;
690  }
691  if(fUsePtWeights && fPtWeightsHist[fCenBin]) {
692  if(dPt>0.2 && dPt<20.) wt = fPtWeightsHist[fCenBin]->Interpolate(dPt);
693  if(std::isfinite(1./wt)) wPhiEta *= 1./wt;
694  }
695  if(fUsePhiEtaCuts && fPhiEtaCuts) // determine phieta weight for POI:
696  {
697  wProbCut = fPhiEtaCuts->GetBinContent(fPhiEtaCuts->FindBin(fCentralityEBE,dPhi,dEta));
698  if(fRandom->Uniform(1.)>wProbCut) continue;
699  }
700  if(fUseEtaWeights && fEtaWeightsHist[fCenBin][0][0]) {
701  // Int_t ptbin = GetCRCPtBin(dPt);
702  // if(ptbin==-1) continue;
703  // wPhiEta *= 1./fEtaWeightsHist[fCenBin][ptbin][cw]->GetBinContent(fEtaWeightsHist[fCenBin][ptbin][cw]->FindBin(dEta));
704  }
705 
706  // Calculate Re[Q_{m*n,k}] and Im[Q_{m*n,k}] for this event (m = 1,2,...,12, k = 0,1,...,8):
707  for(Int_t m=0;m<12;m++) // to be improved - hardwired 6
708  {
709  for(Int_t k=0;k<9;k++) // to be improved - hardwired 9
710  {
711  (*fReQ)(m,k)+=pow(wPhiEta*wPhi*wPt*wEta*wTrack,k)*TMath::Cos((m+1)*n*dPhi);
712  (*fImQ)(m,k)+=pow(wPhiEta*wPhi*wPt*wEta*wTrack,k)*TMath::Sin((m+1)*n*dPhi);
713  }
714  }
715  // Calculate S_{p,k} for this event (Remark: final calculation of S_{p,k} follows after the loop over data bellow):
716  for(Int_t p=0;p<8;p++)
717  {
718  for(Int_t k=0;k<9;k++)
719  {
720  (*fSpk)(p,k)+=pow(wPhiEta*wPhi*wPt*wEta*wTrack,k);
721  }
722  }
723  // Differential flow:
725  {
726  ptEta[0] = dPt;
727  ptEta[1] = dEta;
728  // Calculate r_{m*n,k} and s_{p,k} (r_{m,k} is 'p-vector' for RPs):
729  for(Int_t k=0;k<9;k++) // to be improved - hardwired 9
730  {
731  for(Int_t m=0;m<4;m++) // to be improved - hardwired 4
732  {
734  {
735  for(Int_t pe=0;pe<1+(Int_t)fCalculateDiffFlowVsEta;pe++) // pt or eta
736  {
737  fReRPQ1dEBE[0][pe][m][k]->Fill(ptEta[pe],pow(wPhiEta*wPhi*wPt*wEta*wTrack,k)*TMath::Cos((m+1.)*n*dPhi),1.);
738  fImRPQ1dEBE[0][pe][m][k]->Fill(ptEta[pe],pow(wPhiEta*wPhi*wPt*wEta*wTrack,k)*TMath::Sin((m+1.)*n*dPhi),1.);
739  if(m==0) // s_{p,k} does not depend on index m
740  {
741  fs1dEBE[0][pe][k]->Fill(ptEta[pe],pow(wPhiEta*wPhi*wPt*wEta*wTrack,k),1.);
742  } // end of if(m==0) // s_{p,k} does not depend on index m
743  } // end of for(Int_t pe=0;pe<2;pe++) // pt or eta
744  } // end of if(fCalculateDiffFlow)
746  {
747  fReRPQ2dEBE[0][m][k]->Fill(dPt,dEta,pow(wPhiEta*wPhi*wPt*wEta*wTrack,k)*TMath::Cos((m+1.)*n*dPhi),1.);
748  fImRPQ2dEBE[0][m][k]->Fill(dPt,dEta,pow(wPhiEta*wPhi*wPt*wEta*wTrack,k)*TMath::Sin((m+1.)*n*dPhi),1.);
749  if(m==0) // s_{p,k} does not depend on index m
750  {
751  fs2dEBE[0][k]->Fill(dPt,dEta,pow(wPhiEta*wPhi*wPt*wEta*wTrack,k),1.);
752  } // end of if(m==0) // s_{p,k} does not depend on index m
753  } // end of if(fCalculate2DDiffFlow)
754  } // end of for(Int_t m=0;m<4;m++) // to be improved - hardwired 4
755  } // end of for(Int_t k=0;k<9;k++) // to be improved - hardwired 9
756  // Checking if RP particle is also POI particle:
757  if(aftsTrack->InPOISelection())
758  {
759  // Calculate q_{m*n,k} and s_{p,k} ('q-vector' and 's' for RPs && POIs):
760  for(Int_t k=0;k<9;k++) // to be improved - hardwired 9
761  {
762  for(Int_t m=0;m<4;m++) // to be improved - hardwired 4
763  {
765  {
766  for(Int_t pe=0;pe<1+(Int_t)fCalculateDiffFlowVsEta;pe++) // pt or eta
767  {
768  fReRPQ1dEBE[2][pe][m][k]->Fill(ptEta[pe],pow(wPhiEta*wPhi*wPt*wEta*wTrack,k)*TMath::Cos((m+1.)*n*dPhi),1.);
769  fImRPQ1dEBE[2][pe][m][k]->Fill(ptEta[pe],pow(wPhiEta*wPhi*wPt*wEta*wTrack,k)*TMath::Sin((m+1.)*n*dPhi),1.);
770  if(m==0) // s_{p,k} does not depend on index m
771  {
772  fs1dEBE[2][pe][k]->Fill(ptEta[pe],pow(wPhiEta*wPhi*wPt*wEta*wTrack,k),1.);
773  } // end of if(m==0) // s_{p,k} does not depend on index m
774  } // end of for(Int_t pe=0;pe<2;pe++) // pt or eta
775  } // end of if(fCalculateDiffFlow)
777  {
778  fReRPQ2dEBE[2][m][k]->Fill(dPt,dEta,pow(wPhiEta*wPhi*wPt*wEta*wTrack,k)*TMath::Cos((m+1.)*n*dPhi),1.);
779  fImRPQ2dEBE[2][m][k]->Fill(dPt,dEta,pow(wPhiEta*wPhi*wPt*wEta*wTrack,k)*TMath::Sin((m+1.)*n*dPhi),1.);
780  if(m==0) // s_{p,k} does not depend on index m
781  {
782  fs2dEBE[2][k]->Fill(dPt,dEta,pow(wPhiEta*wPhi*wPt*wEta*wTrack,k),1.);
783  } // end of if(m==0) // s_{p,k} does not depend on index m
784  } // end of if(fCalculate2DDiffFlow)
785  } // end of for(Int_t m=0;m<4;m++) // to be improved - hardwired 4
786  } // end of for(Int_t k=0;k<9;k++) // to be improved - hardwired 9
787  } // end of if(aftsTrack->InPOISelection())
788  } // end of if(fCalculateDiffFlow || fCalculate2DDiffFlow)
789 
790 // for (Int_t k=0; k<fQVecPower; k++) {
791 // for (Int_t h=0;h<fFlowNHarmMax;h++) {
792 // fRPPtDiffQRe[k][h]->Fill(dPt,pow(wPhiEta,k)*TMath::Cos((h+1.)*dPhi));
793 // fRPPtDiffQIm[k][h]->Fill(dPt,pow(wPhiEta,k)*TMath::Sin((h+1.)*dPhi));
794 // fRPPtDiffMul[k][h]->Fill(dPt,pow(wPhiEta,k));
795 // if(fFlowQCDeltaEta>0.) {
796 // if(fabs(dEta)>fFlowQCDeltaEta/2.) {
797 // Int_t keta = (dEta<0.?0:1);
798 // fRPPtDiffQReEG[keta][k][h]->Fill(dPt,pow(wPhiEta,k)*TMath::Cos((h+1.)*dPhi));
799 // fRPPtDiffQReEG[keta][k][h]->Fill(dPt,pow(wPhiEta,k)*TMath::Sin((h+1.)*dPhi));
800 // fRPPtDiffQReEG[keta][k][h]->Fill(dPt,pow(wPhiEta,k));
801 // }
802 // } else {
803 // if(fabs(dEta)<0.6 && fabs(dEta)>0.3) {
804 // Int_t keta = (dEta<0.?0:1);
805 // fRPPtDiffQReEG[keta][k][h]->Fill(dPt,pow(wPhiEta,k)*TMath::Cos((h+1.)*dPhi));
806 // fRPPtDiffQReEG[keta][k][h]->Fill(dPt,pow(wPhiEta,k)*TMath::Sin((h+1.)*dPhi));
807 // fRPPtDiffQReEG[keta][k][h]->Fill(dPt,pow(wPhiEta,k));
808 // }
809 // }
810 // }
811 // }
812 
813  } // end of if(pTrack->InRPSelection())
814 
815  // POIs ********************************************************************************************************
816 
817  if(aftsTrack->InPOISelection()) {
818  dPhi = aftsTrack->Phi();
819  dPt = aftsTrack->Pt();
820  dEta = aftsTrack->Eta();
821  dCharge = aftsTrack->Charge();
822 
823  if(fSelectCharge==kPosCh && dCharge<0.) continue;
824  if(fSelectCharge==kNegCh && dCharge>0.) continue;
825 
826  cw = (dCharge > 0. ? 0 : 1);
827  wPhi = 1.;
828  wPt = 1.;
829  wEta = 1.;
830  wTrack = 1.;
831  wPhiEta = 1.;
832  wProbCut = 0.;
833 
834  // if(fUsePhiWeights && fPhiWeightsRPs && fnBinsPhi) // determine phi weight for POI:
835  // {
836  // wPhi = fPhiWeightsPOIs[cw]->GetBinContent(1+(Int_t)(TMath::Floor(dPhi*fnBinsPhi/TMath::TwoPi())));
837  // }
838  // if(fUsePtWeights) // determine pt weight for POI:
839  // {
840  // wPt = 1.;
841  // }
842  // if(fUseEtaWeights && fEtaWeightsRPs && fEtaBinWidth) // determine eta weight for POI:
843  // {
844  // wEta = fEtaWeightsPOIs[cw]->GetBinContent(1+(Int_t)(TMath::Floor((dEta-fEtaMin)/fEtaBinWidth)));
845  // }
846  if(fUsePhiEtaWeights && fPhiEtaWeights) // determine phieta weight for POI:
847  {
848  wt = fPhiEtaWeights->GetBinContent(fPhiEtaWeights->FindBin(fCentralityEBE,dPhi,dEta));
849  if(std::isfinite(1./wt)) wPhiEta *= 1./wt;
850  }
851  if(fUsePhiEtaWeightsChDep && fPhiEtaWeightsPos && fPhiEtaWeightsNeg) // determine phieta weight for POI, ch dep:
852  {
853  if(dCharge > 0.) wt = fPhiEtaWeightsPos->GetBinContent(fPhiEtaWeightsPos->FindBin(fCentralityEBE,dPhi,dEta));
854  else wt = fPhiEtaWeightsNeg->GetBinContent(fPhiEtaWeightsNeg->FindBin(fCentralityEBE,dPhi,dEta));
855  if(std::isfinite(1./wt)) wPhiEta *= 1./wt;
856  }
857  if(fUsePhiEtaWeightsVtxDep && fPhiEtaWeightsVtx[fCenBin]) // determine phieta weight for POI:
858  {
859  wt = fPhiEtaWeightsVtx[fCenBin]->GetBinContent(fPhiEtaWeightsVtx[fCenBin]->FindBin(fVtxPos[2],dPhi,dEta));
860  if(std::isfinite(1./wt)) wPhiEta *= 1./wt;
861  }
862  if(fUsePtWeights && fPtWeightsHist[fCenBin]) {
863  if(dPt>0.2 && dPt<20.) wt = fPtWeightsHist[fCenBin]->Interpolate(dPt);
864  if(std::isfinite(1./wt)) wPhiEta *= 1./wt;
865  }
866  if(fUsePhiEtaCuts && fPhiEtaCuts) // determine phieta weight for POI:
867  {
868  wProbCut = fPhiEtaCuts->GetBinContent(fPhiEtaCuts->FindBin(fCentralityEBE,dPhi,dEta));
869  if(fRandom->Uniform(1.)>wProbCut) continue;
870  }
871  if(fUseEtaWeights && fEtaWeightsHist[fCenBin][0][0]) {
872 // Int_t ptbin = GetCRCPtBin(dPt);
873 // if(ptbin==-1) continue;
874 // wPhiEta *= 1./fEtaWeightsHist[fCenBin][ptbin][cw]->GetBinContent(fEtaWeightsHist[fCenBin][ptbin][cw]->FindBin(dEta));
875  }
876 
877  ptEta[0] = dPt;
878  ptEta[1] = dEta;
879  // Calculate p_{m*n,k} ('p-vector' for POIs):
880  for(Int_t k=0;k<9;k++) // to be improved - hardwired 9
881  {
882  for(Int_t m=0;m<4;m++) // to be improved - hardwired 4
883  {
885  {
886  for(Int_t pe=0;pe<1+(Int_t)fCalculateDiffFlowVsEta;pe++) // pt or eta
887  {
888  fReRPQ1dEBE[1][pe][m][k]->Fill(ptEta[pe],pow(wPhiEta*wPhi*wPt*wEta*wTrack,k)*TMath::Cos((m+1.)*n*dPhi),1.);
889  fImRPQ1dEBE[1][pe][m][k]->Fill(ptEta[pe],pow(wPhiEta*wPhi*wPt*wEta*wTrack,k)*TMath::Sin((m+1.)*n*dPhi),1.);
890  } // end of for(Int_t pe=0;pe<2;pe++) // pt or eta
891  } // end of if(fCalculateDiffFlow)
893  {
894  fReRPQ2dEBE[1][m][k]->Fill(dPt,dEta,pow(wPhiEta*wPhi*wPt*wEta*wTrack,k)*TMath::Cos((m+1.)*n*dPhi),1.);
895  fImRPQ2dEBE[1][m][k]->Fill(dPt,dEta,pow(wPhiEta*wPhi*wPt*wEta*wTrack,k)*TMath::Sin((m+1.)*n*dPhi),1.);
896  } // end of if(fCalculate2DDiffFlow)
897  } // end of for(Int_t m=0;m<4;m++) // to be improved - hardwired 4
898  } // end of for(Int_t k=0;k<9;k++) // to be improved - hardwired 9
899 
900  // Charge-Rapidity Correlations
901  for (Int_t h=0;h<fCRCnHar;h++) {
902 
903  fCRCQRe[cw][h]->Fill(dEta,wPhiEta*TMath::Cos((h+1.)*dPhi));
904  fCRCQIm[cw][h]->Fill(dEta,wPhiEta*TMath::Sin((h+1.)*dPhi));
905  fCRCMult[cw][h]->Fill(dEta,wPhiEta);
906 
907  fCRC2QRe[cw][h]->Fill(dEta,wPhiEta*TMath::Cos((h+1.)*dPhi));
908  fCRC2QIm[cw][h]->Fill(dEta,wPhiEta*TMath::Sin((h+1.)*dPhi));
909  fCRC2Mul[cw][h]->Fill(dEta,wPhiEta);
910 
911  fCRCZDCQRe[cw][h]->Fill(dEta,wPhiEta*TMath::Cos((h+1.)*dPhi));
912  fCRCZDCQIm[cw][h]->Fill(dEta,wPhiEta*TMath::Sin((h+1.)*dPhi));
913  fCRCZDCMult[cw][h]->Fill(dEta,wPhiEta);
914 
915  if(fRandom->Integer(2)>0.5) {
916  fCRC2QRe[2][h]->Fill(dEta,wPhiEta*TMath::Cos((h+1.)*dPhi));
917  fCRC2QIm[2][h]->Fill(dEta,wPhiEta*TMath::Sin((h+1.)*dPhi));
918  fCRC2Mul[2][h]->Fill(dEta,wPhiEta);
919  }
920 
921  if(fRandom->Integer(2)>0.5) {
922  fCRCZDCQRe[2][h]->Fill(dEta,wPhiEta*TMath::Cos((h+1.)*dPhi));
923  fCRCZDCQIm[2][h]->Fill(dEta,wPhiEta*TMath::Sin((h+1.)*dPhi));
924  fCRCZDCMult[2][h]->Fill(dEta,wPhiEta);
925  } else {
926  fCRCZDCQRe[3][h]->Fill(dEta,wPhiEta*TMath::Cos((h+1.)*dPhi));
927  fCRCZDCQIm[3][h]->Fill(dEta,wPhiEta*TMath::Sin((h+1.)*dPhi));
928  fCRCZDCMult[3][h]->Fill(dEta,wPhiEta);
929  }
930 
931  if(fCalculateCME) {
932  Double_t SpecWeig = 1.;
933  if(fUseZDCESESpecWeights && fZDCESESpecWeightsHist[fZDCESEclEbE] && dPt>0.2 && dPt<20.2) {
935  if(weraw > 0.) SpecWeig = 1./weraw;
936  }
937  fCMEQRe[cw][h]->Fill(dEta,SpecWeig*wPhiEta*TMath::Cos((h+1.)*dPhi));
938  fCMEQIm[cw][h]->Fill(dEta,SpecWeig*wPhiEta*TMath::Sin((h+1.)*dPhi));
939  fCMEMult[cw][h]->Fill(dEta,SpecWeig*wPhiEta);
940  fCMEQRe[2+cw][h]->Fill(dEta,pow(SpecWeig*wPhiEta,2.)*TMath::Cos((h+1.)*dPhi));
941  fCMEQIm[2+cw][h]->Fill(dEta,pow(SpecWeig*wPhiEta,2.)*TMath::Sin((h+1.)*dPhi));
942  fCMEMult[2+cw][h]->Fill(dEta,pow(SpecWeig*wPhiEta,2.));
943 
944  // spectra
945  fhCenvsSpec[fZDCESEclEbE]->Fill(fCentralityEBE,dPt,SpecWeig*wPhiEta);
946  fhCenvsSpec[fZDCESEnCl]->Fill(fCentralityEBE,dPt,SpecWeig*wPhiEta);
947  }
948 
949  } // end of for (Int_t h=0;h<fCRCnHar;h++)
950 
951  // Flow SP ZDC
952  for (Int_t k=0; k<fQVecPower; k++) {
953  for (Int_t h=0;h<fFlowNHarmMax;h++) {
954  fPOIPtDiffQRe[k][h]->Fill(dPt,pow(wPhiEta,k)*TMath::Cos((h+1.)*dPhi));
955  fPOIPtDiffQIm[k][h]->Fill(dPt,pow(wPhiEta,k)*TMath::Sin((h+1.)*dPhi));
956  fPOIPtDiffMul[k][h]->Fill(dPt,pow(wPhiEta,k));
957 
958  fPOIPhiDiffQRe[k][h]->Fill(dPhi,pow(wPhiEta,k)*TMath::Cos((h+1.)*dPhi));
959  fPOIPhiDiffQIm[k][h]->Fill(dPhi,pow(wPhiEta,k)*TMath::Sin((h+1.)*dPhi));
960  fPOIPhiDiffMul[k][h]->Fill(dPhi,pow(wPhiEta,k));
961  if(fFlowQCDeltaEta>0.) {
962  if(fabs(dEta)>fFlowQCDeltaEta/2.) {
963  Int_t keta = (dEta<0.?0:1);
964  fPOIPtDiffQReEG[keta][k][h]->Fill(dPt,pow(wPhiEta,k)*TMath::Cos((h+1.)*dPhi));
965  fPOIPtDiffQImEG[keta][k][h]->Fill(dPt,pow(wPhiEta,k)*TMath::Sin((h+1.)*dPhi));
966  fPOIPtDiffMulEG[keta][k][h]->Fill(dPt,pow(wPhiEta,k));
967  fPOIPhiDiffQReEG[keta][k][h]->Fill(dPhi,pow(wPhiEta,k)*TMath::Cos((h+1.)*dPhi));
968  fPOIPhiDiffQImEG[keta][k][h]->Fill(dPhi,pow(wPhiEta,k)*TMath::Sin((h+1.)*dPhi));
969  fPOIPhiDiffMulEG[keta][k][h]->Fill(dPhi,pow(wPhiEta,k));
970  }
971  } else {
972  if(fabs(dEta)<0.6 && fabs(dEta)>0.3) {
973  Int_t keta = (dEta<0.?0:1);
974  fPOIPtDiffQReEG[keta][k][h]->Fill(dPt,pow(wPhiEta,k)*TMath::Cos((h+1.)*dPhi));
975  fPOIPtDiffQImEG[keta][k][h]->Fill(dPt,pow(wPhiEta,k)*TMath::Sin((h+1.)*dPhi));
976  fPOIPtDiffMulEG[keta][k][h]->Fill(dPt,pow(wPhiEta,k));
977  }
978  }
979  }
980  }
981 
982  for (Int_t h=0;h<fFlowNHarmMax;h++) {
983  fEtaDiffQRe[cw][h]->Fill(dEta,wPhiEta*TMath::Cos((h+1.)*dPhi));
984  fEtaDiffQIm[cw][h]->Fill(dEta,wPhiEta*TMath::Sin((h+1.)*dPhi));
985  fEtaDiffMul[cw][h]->Fill(dEta,wPhiEta);
986  }
987 
988  if(fCalculateEbEFlow) {
989  if(fEBEFlowMulBin>=0) fEbEFlowAzimDis[fEBEFlowMulBin]->Fill(dPhi,wPhiEta);
990  }
991  fCRCQVecPhiHist[fRunBin]->Fill(fCentralityEBE,dPhi,dEta,wPhiEta);
992  fCRCQVecPhiHistVtxDep[fCenBin]->Fill(fVtxPos[2],dPhi,dEta,wPhiEta);
994  } // end of if(pTrack->InPOISelection())
995  } else // to if(aftsTrack)
996  {
997  printf("\n WARNING (QC): No particle (i.e. aftsTrack is a NULL pointer in AFAWQC::Make())!!!!\n\n");
998  }
999  } // end of for(Int_t i=0;i<nPrim;i++)
1000 
1001  // ************************************************************************************************************
1002 
1003 
1004  // e) Calculate the final expressions for S_{p,k} and s_{p,k} (important !!!!):
1005  for(Int_t p=0;p<8;p++)
1006  {
1007  for(Int_t k=0;k<9;k++)
1008  {
1009  (*fSpk)(p,k)=pow((*fSpk)(p,k),p+1);
1010  }
1011  }
1012 
1013  // f) Call the methods which calculate correlations for reference flow:
1015  {
1017  {
1018  if(fNumberOfRPsEBE>1){this->CalculateIntFlowCorrelations();} // without using particle weights
1019  } else // to if(!(fUsePhiWeights||fUsePtWeights||fUseEtaWeights||fUseTrackWeights))
1020  {
1021  if(fNumberOfRPsEBE>1){this->CalculateIntFlowCorrelationsUsingParticleWeights();} // with using particle weights
1022  }
1023  // Whether or not using particle weights the following is calculated in the same way:
1027  // Non-isotropic terms:
1029  {
1032  } else // to if(!(fUsePhiWeights||fUsePtWeights||fUseEtaWeights||fUseTrackWeights))
1033  {
1036  }
1037  // Whether or not using particle weights the following is calculated in the same way:
1041  // Mixed harmonics:
1043  } // end of if(!fEvaluateIntFlowNestedLoops)
1044 
1045  // g) Call the methods which calculate correlations for differential flow:
1047  {
1049  {
1050  // Without using particle weights:
1051  this->CalculateDiffFlowCorrelations("RP","Pt");
1053  this->CalculateDiffFlowCorrelations("POI","Pt");
1055  // Non-isotropic terms:
1064  } else // to if(!(fUsePhiWeights||fUsePtWeights||fUseEtaWeights||fUseTrackWeights))
1065  {
1066  // With using particle weights:
1071  // Non-isotropic terms:
1080  }
1081  // Whether or not using particle weights the following is calculated in the same way:
1082  this->CalculateDiffFlowProductOfCorrelations("RP","Pt");
1084  this->CalculateDiffFlowProductOfCorrelations("POI","Pt");
1086  this->CalculateDiffFlowSumOfEventWeights("RP","Pt");
1088  this->CalculateDiffFlowSumOfEventWeights("POI","Pt");
1094  } // end of if(!fEvaluateDiffFlowNestedLoops && fCalculateDiffFlow)
1095 
1096  // h) Call the methods which calculate correlations for 2D differential flow:
1098  {
1100  {
1101  // Without using particle weights:
1102  this->Calculate2DDiffFlowCorrelations("RP");
1103  this->Calculate2DDiffFlowCorrelations("POI");
1104  // Non-isotropic terms:
1105  // ... to be ctd ...
1106  } else // to if(!(fUsePhiWeights||fUsePtWeights||fUseEtaWeights||fUseTrackWeights))
1107  {
1108  // With using particle weights:
1109  // ... to be ctd ...
1110  // Non-isotropic terms:
1111  // ... to be ctd ...
1112  }
1113  // Whether or not using particle weights the following is calculated in the same way:
1114  // ... to be ctd ...
1115  } // end of if(!fEvaluateDiffFlowNestedLoops && fCalculate2DDiffFlow)
1116 
1117  // i) Call the methods which calculate other differential correlators:
1119  {
1121  {
1122  // Without using particle weights:
1123  this->CalculateOtherDiffCorrelators("RP","Pt");
1125  this->CalculateOtherDiffCorrelators("POI","Pt");
1127  } else // to if(!(fUsePhiWeights||fUsePtWeights||fUseEtaWeights||fUseTrackWeights))
1128  {
1129  // With using particle weights:
1130  // ... to be ctd ...
1131  }
1132  // Whether or not using particle weights the following is calculated in the same way:
1133  // ... to be ctd ...
1134  } // end of if(!fEvaluateDiffFlowNestedLoops)
1135 
1136  // i.2) Calculate CRC quantities:
1137  if(fCalculateCRC) {
1138 // if(fUseCRCRecenter) this->RecenterCRCQVec();
1139  if(fCalculateCRC2) this->CalculateCRCCorr();
1140  if(fCalculateCRC2) this->CalculateCRC2Cor();
1142  if(fCalculateCRCZDC && fUseZDC) this->CalculateCRCZDC();
1143  if(fCalculateCRCPt) this->CalculateCRCPtCorr();
1144  // if(fUseVZERO && fUseZDC) this->CalculateVZvsZDC();
1145  if(fCalculateCME && fUseZDC) {
1146  this->CalculateCMETPC();
1147  this->CalculateCMEZDC();
1148  }
1149  }
1150  // WARNING: do not invert order of SPZDC and QC, used in SC
1152  if(fCalculateFlowQC) {
1153  this->CalculateFlowQC();
1154  this->CalculateFlowQCHighOrders();
1155  }
1157  if(fCalculateEbEFlow) this->FitEbEFlow();
1158 
1159  // j) Distributions of correlations:
1161 
1162  // l) Cross-check with nested loops correlators for reference flow:
1164 
1165  // m) Cross-check with nested loops correlators for differential flow:
1167 
1168  // n) Store multiplicity in various:
1169  if(fStoreVarious) this->FillVarious();
1170 
1171  // o) Reset all event-by-event quantities (very important !!!!):
1173 
1174  // p) cache run number
1176 
1177  fQAZDCCutsFlag = kTRUE;
1178  // printf("Make done \n");
1179 
1180 } // end of AliFlowAnalysisCRC::Make(AliFlowEventSimple* anEvent)
1181 
1182 //=======================================================================================================================
1183 
1185 {
1186  // Calculate the final results.
1187 
1188  // a) Check all pointers used in this method;
1189  // b) Access the constants;
1190  // c) Access the flags;
1191  // d) Calculate reference cumulants (not corrected for detector effects);
1192  // e) Correct reference cumulants for detector effects;
1193  // f) Calculate reference flow;
1194  // g) Store results for reference flow in AliFlowCommonHistResults and print them on the screen;
1195  // h) Calculate the final results for differential flow (without/with weights);
1196  // i) Correct the results for differential flow (without/with weights) for effects of non-uniform acceptance (NUA);
1197  // j) Calculate the final results for integrated flow (RP/POI) and store in AliFlowCommonHistResults;
1198  // k) Store results for differential flow in AliFlowCommonHistResults;
1199  // l) Print the final results for integrated flow (RP/POI) on the screen;
1200  // m) Cross-checking: Results from Q-vectors vs results from nested loops;
1201  // n) Calculate cumulants for mixed harmonics;
1202  // o) Calculate charge-rapidity correlations;
1203  // p) Calculate cumulants for bootstrap;
1204  // q) Finalize various;
1205 
1206  // a) Check all pointers used in this method:
1207  this->CheckPointersUsedInFinish();
1208 
1209  // b) Access the constants:
1210  this->CommonConstants("Finish");
1211 
1213  fHarmonic = (Int_t)(fCommonHists->GetHarmonic())->GetBinContent(1);
1214  }
1215 
1216  // c) Access the flags: // tbi (implement a method for this? should I store again the flags because they can get modified with redoFinish?)
1217  fUsePhiWeights = (Bool_t)fUseParticleWeights->GetBinContent(1);
1218  fUsePtWeights = (Bool_t)fUseParticleWeights->GetBinContent(2);
1219  fUseEtaWeights = (Bool_t)fUseParticleWeights->GetBinContent(3);
1220  fUseTrackWeights = (Bool_t)fUseParticleWeights->GetBinContent(4);
1221  fUsePhiEtaWeights = (Bool_t)fUseParticleWeights->GetBinContent(5);
1222  fUsePhiEtaWeightsChDep = (Bool_t)fUseParticleWeights->GetBinContent(6);
1223  fUsePhiEtaWeightsVtxDep = (Bool_t)fUseParticleWeights->GetBinContent(7);
1224  fApplyCorrectionForNUA = (Bool_t)fIntFlowFlags->GetBinContent(3);
1225  fPrintFinalResults[0] = (Bool_t)fIntFlowFlags->GetBinContent(4);
1226  fPrintFinalResults[1] = (Bool_t)fIntFlowFlags->GetBinContent(5);
1227  fPrintFinalResults[2] = (Bool_t)fIntFlowFlags->GetBinContent(6);
1228  fPrintFinalResults[3] = (Bool_t)fIntFlowFlags->GetBinContent(7);
1229  fApplyCorrectionForNUAVsM = (Bool_t)fIntFlowFlags->GetBinContent(8);
1230  fPropagateErrorAlsoFromNIT = (Bool_t)fIntFlowFlags->GetBinContent(9);
1231  fCalculateCumulantsVsM = (Bool_t)fIntFlowFlags->GetBinContent(10);
1232  fMinimumBiasReferenceFlow = (Bool_t)fIntFlowFlags->GetBinContent(11);
1233  fForgetAboutCovariances = (Bool_t)fIntFlowFlags->GetBinContent(12);
1234  fStoreVarious = (Bool_t)fIntFlowFlags->GetBinContent(13);
1235  fFillMultipleControlHistograms = (Bool_t)fIntFlowFlags->GetBinContent(14);
1236  fCalculateAllCorrelationsVsM = (Bool_t)fIntFlowFlags->GetBinContent(15);
1237  fUse2DHistograms = (Bool_t)fIntFlowFlags->GetBinContent(18);
1238  fFillProfilesVsMUsingWeights = (Bool_t)fIntFlowFlags->GetBinContent(19);
1239  fUseQvectorTerms = (Bool_t)fIntFlowFlags->GetBinContent(20);
1242  fCrossCheckInPtBinNo = (Int_t)fEvaluateNestedLoops->GetBinContent(3);
1243  fCrossCheckInEtaBinNo = (Int_t)fEvaluateNestedLoops->GetBinContent(4);
1245  //fHarmonic = (Int_t)fMixedHarmonicsFlags->GetBinContent(2); // TBI should I add inpdependent generic harmonic here?
1247  fUseBootstrap = (Bool_t)fBootstrapFlags->GetBinContent(1);
1248  fUseBootstrapVsM = (Bool_t)fBootstrapFlags->GetBinContent(2);
1249  fnSubsamples = (Int_t)fBootstrapFlags->GetBinContent(3);
1250 
1251  // d) Calculate reference cumulants (not corrected for detector effects):
1254  this->CalculateCumulantsIntFlow();
1255 
1256  // e) Correct reference cumulants for detector effects:
1260 
1261  // f) Calculate reference flow:
1262  this->CalculateReferenceFlow();
1263 
1264  // g) Store results for reference flow in AliFlowCommonHistResults and print them on the screen:
1268 
1269  // h) Calculate the final results for differential flow (without/with weights):
1270  if(fCalculateDiffFlow)
1271  {
1272  this->FinalizeReducedCorrelations("RP","Pt");
1274  this->FinalizeReducedCorrelations("POI","Pt");
1275  if(fCalculateDiffFlowVsEta){this->FinalizeReducedCorrelations("POI","Eta");}
1276  this->CalculateDiffFlowCovariances("RP","Pt");
1278  this->CalculateDiffFlowCovariances("POI","Pt");
1279  if(fCalculateDiffFlowVsEta){this->CalculateDiffFlowCovariances("POI","Eta");}
1280  this->CalculateDiffFlowCumulants("RP","Pt");
1281  if(fCalculateDiffFlowVsEta){this->CalculateDiffFlowCumulants("RP","Eta");}
1282  this->CalculateDiffFlowCumulants("POI","Pt");
1283  if(fCalculateDiffFlowVsEta){this->CalculateDiffFlowCumulants("POI","Eta");}
1284  this->CalculateDiffFlow("RP","Pt");
1285  if(fCalculateDiffFlowVsEta){this->CalculateDiffFlow("RP","Eta");}
1286  this->CalculateDiffFlow("POI","Pt");
1287  if(fCalculateDiffFlowVsEta){this->CalculateDiffFlow("POI","Eta");}
1288  } // if(fCalculateDiffFlow)
1289 
1290  // i) Correct the results for differential flow (without/with weights) for effects of non-uniform acceptance (NUA):
1291  if(fCalculateDiffFlow)
1292  {
1293  this->FinalizeCorrectionTermsForNUADiffFlow("RP","Pt");
1295  this->FinalizeCorrectionTermsForNUADiffFlow("POI","Pt");
1302  {
1303  this->CalculateDiffFlowCorrectedForNUA("RP","Pt");
1305  this->CalculateDiffFlowCorrectedForNUA("POI","Pt");
1307  }
1308  } // end of if(fCalculateDiffFlow && fApplyCorrectionForNUA)
1309 
1310  // i) Calcualate final results for 2D differential flow:
1312  {
1313  this->Calculate2DDiffFlowCumulants("RP");
1314  this->Calculate2DDiffFlowCumulants("POI");
1315  this->Calculate2DDiffFlow("RP");
1316  this->Calculate2DDiffFlow("POI");
1317  } // end of if(fCalculate2DDiffFlow)
1318 
1319  // j) Calculate the final results for integrated flow (RP/POI) and store in AliFlowCommonHistResults:
1320  if(fCalculateDiffFlow)
1321  {
1324  }
1325 
1326  // k) Store results for differential flow in AliFlowCommonHistResults:
1327  if(fCalculateDiffFlow)
1328  {
1329  this->FillCommonHistResultsDiffFlow("RP");
1330  this->FillCommonHistResultsDiffFlow("POI");
1331  }
1332 
1333  // l) Print the final results for integrated flow (RP/POI) on the screen:
1336 
1337  // m) Cross-checking: Results from Q-vectors vs results from nested loops:
1338  // m1) Reference flow:
1340  {
1345  } // end of if(fEvaluateIntFlowNestedLoops)
1346  // m2) Differential flow:
1348  {
1349  // Correlations:
1351  this->CrossCheckDiffFlowCorrelations("RP","Pt");
1353  this->CrossCheckDiffFlowCorrelations("POI","Pt");
1355  // Correction terms for non-uniform acceptance:
1356  this->CrossCheckDiffFlowCorrectionTermsForNUA("RP","Pt");
1358  this->CrossCheckDiffFlowCorrectionTermsForNUA("POI","Pt");
1360  // Other differential correlators:
1361  this->CrossCheckOtherDiffCorrelators("RP","Pt");
1363  this->CrossCheckOtherDiffCorrelators("POI","Pt");
1365  } // end of if(fEvaluateDiffFlowNestedLoops)
1366 
1367  // n) Calculate cumulants for mixed harmonics:
1369 
1370  // o) Calculate charge-rapidity correlations:
1371  if(fCalculateCRC) {
1372  if(fCalculateCRC2) this->FinalizeCRCCorr();
1373  if(fCalculateCRC2) this->FinalizeCRC2Cor();
1375  if(fCalculateCRCZDC && fUseZDC) this->FinalizeCRCZDC();
1376  if(fCalculateCRCPt) this->FinalizeCRCPtCorr();
1377  if(fCalculateCME && fUseZDC) {
1378  this->FinalizeCMETPC();
1379  this->FinalizeCMEZDC();
1380  }
1381  }
1382  // WARNING: do not invert order of SPZDC and QC, used in SC
1384  if(fCalculateFlowQC) {
1385  this->FinalizeFlowQC();
1386  this->FinalizeFlowQCHighOrders();
1387  }
1389 
1390  // p) Calculate cumulants for bootstrap:
1392 
1393  // q) Finalize various:
1394  if(fStoreVarious) this->FinalizeVarious();
1395 
1396 } // end of AliFlowAnalysisCRC::Finish()
1397 
1398 //=======================================================================================================================
1399 
1401 {
1402  // Evaluate all correlators for reference flow with nested loops.
1403 
1404  Int_t nPrim = anEvent->NumberOfTracks(); // number of primaries
1405  if(nPrim>0 && nPrim<=fMaxAllowedMultiplicity) // by default fMaxAllowedMultiplicity = 10
1406  {
1407  // Without using particle weights:
1409  {
1410  // Correlations:
1411  this->CalculateIntFlowCorrelations(); // from Q-vectors
1412  this->EvaluateIntFlowCorrelationsWithNestedLoops(anEvent); // from nested loops (TBI: do I have to pass here anEvent or not?)
1413  // Correction for non-uniform acceptance:
1414  this->CalculateIntFlowCorrectionsForNUASinTerms(); // from Q-vectors (sin terms)
1415  this->CalculateIntFlowCorrectionsForNUACosTerms(); // from Q-vectors (cos terms)
1416  this->EvaluateIntFlowCorrectionsForNUAWithNestedLoops(anEvent); // from nested loops (both sin and cos terms)
1417  // Mixed harmonics:
1419  {
1420  this->CalculateMixedHarmonics(); // from Q-vectors
1421  this->EvaluateMixedHarmonicsWithNestedLoops(anEvent); // from nested loops (TBI: do I have to pass here anEvent or not?)
1422  } // end of if(fCalculateMixedHarmonics)
1423  }
1424  // Using particle weights:
1426  {
1427  // Correlations
1428  this->CalculateIntFlowCorrelationsUsingParticleWeights(); // from Q-vectors
1429  this->EvaluateIntFlowCorrelationsWithNestedLoopsUsingParticleWeights(anEvent); // from nested loops (to be improved: do I have to pass here anEvent or not?)
1430  // Correction for non-uniform acceptance:
1431  this->CalculateIntFlowCorrectionsForNUASinTermsUsingParticleWeights(); // from Q-vectors (sin terms)
1432  this->CalculateIntFlowCorrectionsForNUACosTermsUsingParticleWeights(); // from Q-vectors (cos terms)
1433  this->EvaluateIntFlowCorrectionsForNUAWithNestedLoopsUsingParticleWeights(anEvent); // from nested loops (both sin and cos terms)
1434  }
1435  } else if(nPrim>fMaxAllowedMultiplicity) // to if(nPrim>0 && nPrim<=fMaxAllowedMultiplicity)
1436  {
1437  cout<<endl;
1438  cout<<"Skipping the event because multiplicity is "<<nPrim<<". Too high to evaluate nested loops!"<<endl;
1439  } else
1440  {
1441  cout<<endl;
1442  cout<<"Skipping the event because multiplicity is "<<nPrim<<"."<<endl;
1443  }
1444 
1445 } // end of void AliFlowAnalysisCRC::EvaluateIntFlowNestedLoops(AliFlowEventSimple* anEvent)
1446 
1447 //=======================================================================================================================
1448 
1450 {
1451  // Evalauted all correlators for differential flow with nested loops.
1452 
1453  if(!fCalculateDiffFlow){return;}
1454 
1455  Int_t nPrim = anEvent->NumberOfTracks(); // number of primaries
1456  if(nPrim>0 && nPrim<=fMaxAllowedMultiplicity) // by default fMaxAllowedMultiplicity = 10
1457  {
1458  // Without using particle weights:
1460  {
1461  // 1.) Reduced correlations:
1462  // Q-vectors:
1463  this->CalculateDiffFlowCorrelations("RP","Pt");
1464  this->CalculateDiffFlowCorrelations("RP","Eta");
1465  this->CalculateDiffFlowCorrelations("POI","Pt");
1466  this->CalculateDiffFlowCorrelations("POI","Eta");
1467  // Nested loops:
1468  this->EvaluateDiffFlowCorrelationsWithNestedLoops(anEvent,"RP","Pt");
1469  this->EvaluateDiffFlowCorrelationsWithNestedLoops(anEvent,"RP","Eta");
1470  this->EvaluateDiffFlowCorrelationsWithNestedLoops(anEvent,"POI","Pt");
1471  this->EvaluateDiffFlowCorrelationsWithNestedLoops(anEvent,"POI","Eta");
1472  // 2.) Reduced corrections for non-uniform acceptance:
1473  // Q-vectors:
1477  this->CalculateDiffFlowCorrectionsForNUASinTerms("POI","Eta");
1481  this->CalculateDiffFlowCorrectionsForNUACosTerms("POI","Eta");
1482  // Nested loops:
1484  this->EvaluateDiffFlowCorrectionTermsForNUAWithNestedLoops(anEvent,"RP","Eta");
1485  this->EvaluateDiffFlowCorrectionTermsForNUAWithNestedLoops(anEvent,"POI","Pt");
1486  this->EvaluateDiffFlowCorrectionTermsForNUAWithNestedLoops(anEvent,"POI","Eta");
1487  // 3.) Other differential correlators:
1488  // Q-vectors:
1489  this->CalculateOtherDiffCorrelators("RP","Pt");
1490  this->CalculateOtherDiffCorrelators("RP","Eta");
1491  this->CalculateOtherDiffCorrelators("POI","Pt");
1492  this->CalculateOtherDiffCorrelators("POI","Eta");
1493  // Nested loops:
1494  this->EvaluateOtherDiffCorrelatorsWithNestedLoops(anEvent,"RP","Pt");
1495  this->EvaluateOtherDiffCorrelatorsWithNestedLoops(anEvent,"RP","Eta");
1496  this->EvaluateOtherDiffCorrelatorsWithNestedLoops(anEvent,"POI","Pt");
1497  this->EvaluateOtherDiffCorrelatorsWithNestedLoops(anEvent,"POI","Eta");
1498  } // end of if(!(fUsePhiWeights||fUsePtWeights||fUseEtaWeights||fUseTrackWeights))
1499  // Using particle weights:
1501  {
1522  } // end of if(fUsePhiWeights||fUsePtWeights||fUseEtaWeights||fUseTrackWeights)
1523  } // end of if(nPrim>0 && nPrim<=fMaxAllowedMultiplicity) // by default fMaxAllowedMultiplicity = 10
1524 
1525 } // end of void AliFlowAnalysisCRC::EvaluateDiffFlowNestedLoops(AliFlowEventSimple* anEvent)
1526 
1527 //=======================================================================================================================
1528 
1530 {
1531  // Calculate correction terms for non-uniform acceptance of the detector for reference flow (cos terms).
1532 
1533  // multiplicity:
1534  Double_t dMult = (*fSpk)(0,0);
1535 
1536  // real and imaginary parts of non-weighted Q-vectors evaluated in harmonics n, 2n, 3n and 4n:
1537  Double_t dReQ1n = (*fReQ)(0,0);
1538  Double_t dReQ2n = (*fReQ)(1,0);
1539  //Double_t dReQ3n = (*fReQ)(2,0);
1540  //Double_t dReQ4n = (*fReQ)(3,0);
1541  Double_t dImQ1n = (*fImQ)(0,0);
1542  Double_t dImQ2n = (*fImQ)(1,0);
1543  //Double_t dImQ3n = (*fImQ)(2,0);
1544  //Double_t dImQ4n = (*fImQ)(3,0);
1545 
1546  // Multiplicity bin of an event (relevant for all histos vs M):
1547  Double_t dMultiplicityBin = 0.;
1549  {
1550  dMultiplicityBin = fNumberOfRPsEBE+0.5;
1552  {
1553  dMultiplicityBin = fReferenceMultiplicityEBE+0.5;
1555  {
1556  dMultiplicityBin = fNumberOfPOIsEBE+0.5;
1557  }
1558 
1559  // *************************************************************
1560  // **** corrections for non-uniform acceptance (cos terms): ****
1561  // *************************************************************
1562  //
1563  // Remark 1: corrections for non-uniform acceptance (cos terms) calculated with non-weighted Q-vectors
1564  // are stored in 1D profile fQCorrectionsCos.
1565  // Remark 2: binning of fIntFlowCorrectionTermsForNUAPro[1] is organized as follows:
1566  // --------------------------------------------------------------------------------------------------------------------
1567  // 1st bin: <<cos(n*(phi1))>> = cosP1n
1568  // 2nd bin: <<cos(n*(phi1+phi2))>> = cosP1nP1n
1569  // 3rd bin: <<cos(n*(phi1-phi2-phi3))>> = cosP1nM1nM1n
1570  // 4th bin: <<cos(n*(2phi1-phi2))>> = cosP2nM1n
1571  // --------------------------------------------------------------------------------------------------------------------
1572 
1573  // 1-particle:
1574  Double_t cosP1n = 0.; // <<cos(n*(phi1))>>
1575 
1576  if(dMult>0)
1577  {
1578  cosP1n = dReQ1n/dMult;
1579 
1580  // average non-weighted 1-particle correction (cos terms) for non-uniform acceptance for single event:
1581  fIntFlowCorrectionTermsForNUAEBE[1]->SetBinContent(1,cosP1n);
1582  // event weights for NUA terms:
1583  fIntFlowEventWeightForCorrectionTermsForNUAEBE[1]->SetBinContent(1,dMult);
1584 
1585  // final average non-weighted 1-particle correction (cos terms) for non-uniform acceptance for all events:
1586  fIntFlowCorrectionTermsForNUAPro[1]->Fill(0.5,cosP1n,dMult);
1587  if(fCalculateCumulantsVsM){fIntFlowCorrectionTermsForNUAVsMPro[1][0]->Fill(dMultiplicityBin,cosP1n,dMult);}
1588  }
1589 
1590  // 2-particle:
1591  Double_t cosP1nP1n = 0.; // <<cos(n*(phi1+phi2))>>
1592  Double_t cosP2nM1n = 0.; // <<cos(n*(2phi1-phi2))>>
1593 
1594  if(dMult>1)
1595  {
1596  cosP1nP1n = (pow(dReQ1n,2)-pow(dImQ1n,2)-dReQ2n)/(dMult*(dMult-1));
1597  cosP2nM1n = (dReQ2n*dReQ1n+dImQ2n*dImQ1n-dReQ1n)/(dMult*(dMult-1));
1598 
1599  // average non-weighted 2-particle correction (cos terms) for non-uniform acceptance for single event:
1600  fIntFlowCorrectionTermsForNUAEBE[1]->SetBinContent(2,cosP1nP1n);
1601  fIntFlowCorrectionTermsForNUAEBE[1]->SetBinContent(4,cosP2nM1n);
1602  // event weights for NUA terms:
1603  fIntFlowEventWeightForCorrectionTermsForNUAEBE[1]->SetBinContent(2,dMult*(dMult-1));
1604  fIntFlowEventWeightForCorrectionTermsForNUAEBE[1]->SetBinContent(4,dMult*(dMult-1));
1605 
1606  // final average non-weighted 2-particle correction (cos terms) for non-uniform acceptance for all events:
1607  fIntFlowCorrectionTermsForNUAPro[1]->Fill(1.5,cosP1nP1n,dMult*(dMult-1));
1608  fIntFlowCorrectionTermsForNUAPro[1]->Fill(3.5,cosP2nM1n,dMult*(dMult-1));
1610  {
1611  fIntFlowCorrectionTermsForNUAVsMPro[1][1]->Fill(dMultiplicityBin,cosP1nP1n,dMult*(dMult-1));
1612  fIntFlowCorrectionTermsForNUAVsMPro[1][3]->Fill(dMultiplicityBin,cosP2nM1n,dMult*(dMult-1));
1613  }
1614  }
1615 
1616  // 3-particle:
1617  Double_t cosP1nM1nM1n = 0.; // <<cos(n*(phi1-phi2-phi3))>>
1618 
1619  if(dMult>2)
1620  {
1621  cosP1nM1nM1n = (dReQ1n*(pow(dReQ1n,2)+pow(dImQ1n,2))-dReQ1n*dReQ2n-dImQ1n*dImQ2n-2.*(dMult-1)*dReQ1n)
1622  / (dMult*(dMult-1)*(dMult-2));
1623 
1624  // average non-weighted 3-particle correction (cos terms) for non-uniform acceptance for single event:
1625  fIntFlowCorrectionTermsForNUAEBE[1]->SetBinContent(3,cosP1nM1nM1n);
1626  // event weights for NUA terms:
1627  fIntFlowEventWeightForCorrectionTermsForNUAEBE[1]->SetBinContent(3,dMult*(dMult-1)*(dMult-2));
1628 
1629  // final average non-weighted 3-particle correction (cos terms) for non-uniform acceptance for all events:
1630  fIntFlowCorrectionTermsForNUAPro[1]->Fill(2.5,cosP1nM1nM1n,dMult*(dMult-1)*(dMult-2));
1631  if(fCalculateCumulantsVsM){fIntFlowCorrectionTermsForNUAVsMPro[1][2]->Fill(dMultiplicityBin,cosP1nM1nM1n,dMult*(dMult-1)*(dMult-2));}
1632  }
1633 
1634 } // end of AliFlowAnalysisCRC::CalculateIntFlowCorrectionsForNUACosTerms()
1635 
1636 //=======================================================================================================================
1637 
1639 {
1640  // calculate corrections for non-uniform acceptance of the detector for no-name integrated flow (sin terms)
1641 
1642  // multiplicity:
1643  Double_t dMult = (*fSpk)(0,0);
1644 
1645  // real and imaginary parts of non-weighted Q-vectors evaluated in harmonics n, 2n, 3n and 4n:
1646  Double_t dReQ1n = (*fReQ)(0,0);
1647  Double_t dReQ2n = (*fReQ)(1,0);
1648  //Double_t dReQ3n = (*fReQ)(2,0);
1649  //Double_t dReQ4n = (*fReQ)(3,0);
1650  Double_t dImQ1n = (*fImQ)(0,0);
1651  Double_t dImQ2n = (*fImQ)(1,0);
1652  //Double_t dImQ3n = (*fImQ)(2,0);
1653  //Double_t dImQ4n = (*fImQ)(3,0);
1654 
1655  // Multiplicity bin of an event (relevant for all histos vs M):
1656  Double_t dMultiplicityBin = 0.;
1658  {
1659  dMultiplicityBin = fNumberOfRPsEBE+0.5;
1661  {
1662  dMultiplicityBin = fReferenceMultiplicityEBE+0.5;
1664  {
1665  dMultiplicityBin = fNumberOfPOIsEBE+0.5;
1666  }
1667 
1668  // *************************************************************
1669  // **** corrections for non-uniform acceptance (sin terms): ****
1670  // *************************************************************
1671  //
1672  // Remark 1: corrections for non-uniform acceptance (sin terms) calculated with non-weighted Q-vectors
1673  // are stored in 1D profile fQCorrectionsSin.
1674  // Remark 2: binning of fIntFlowCorrectionTermsForNUAPro[0] is organized as follows:
1675  // --------------------------------------------------------------------------------------------------------------------
1676  // 1st bin: <<sin(n*(phi1))>> = sinP1n
1677  // 2nd bin: <<sin(n*(phi1+phi2))>> = sinP1nP1n
1678  // 3rd bin: <<sin(n*(phi1-phi2-phi3))>> = sinP1nM1nM1n
1679  // 4th bin: <<sin(n*(2phi1-phi2))>> = sinP2nM1n
1680  // --------------------------------------------------------------------------------------------------------------------
1681 
1682  // 1-particle:
1683  Double_t sinP1n = 0.; // <sin(n*(phi1))>
1684 
1685  if(dMult>0)
1686  {
1687  sinP1n = dImQ1n/dMult;
1688 
1689  // average non-weighted 1-particle correction (sin terms) for non-uniform acceptance for single event:
1690  fIntFlowCorrectionTermsForNUAEBE[0]->SetBinContent(1,sinP1n);
1691  // event weights for NUA terms:
1692  fIntFlowEventWeightForCorrectionTermsForNUAEBE[0]->SetBinContent(1,dMult);
1693 
1694  // final average non-weighted 1-particle correction (sin terms) for non-uniform acceptance for all events:
1695  fIntFlowCorrectionTermsForNUAPro[0]->Fill(0.5,sinP1n,dMult);
1696  if(fCalculateCumulantsVsM){fIntFlowCorrectionTermsForNUAVsMPro[0][0]->Fill(dMultiplicityBin,sinP1n,dMult);}
1697  }
1698 
1699  // 2-particle:
1700  Double_t sinP1nP1n = 0.; // <<sin(n*(phi1+phi2))>>
1701  Double_t sinP2nM1n = 0.; // <<sin(n*(2phi1-phi2))>>
1702  if(dMult>1)
1703  {
1704  sinP1nP1n = (2.*dReQ1n*dImQ1n-dImQ2n)/(dMult*(dMult-1));
1705  sinP2nM1n = (dImQ2n*dReQ1n-dReQ2n*dImQ1n-dImQ1n)/(dMult*(dMult-1));
1706 
1707  // average non-weighted 2-particle correction (sin terms) for non-uniform acceptance for single event:
1708  fIntFlowCorrectionTermsForNUAEBE[0]->SetBinContent(2,sinP1nP1n);
1709  fIntFlowCorrectionTermsForNUAEBE[0]->SetBinContent(4,sinP2nM1n);
1710  // event weights for NUA terms:
1711  fIntFlowEventWeightForCorrectionTermsForNUAEBE[0]->SetBinContent(2,dMult*(dMult-1));
1712  fIntFlowEventWeightForCorrectionTermsForNUAEBE[0]->SetBinContent(4,dMult*(dMult-1));
1713 
1714  // final average non-weighted 1-particle correction (sin terms) for non-uniform acceptance for all events:
1715  fIntFlowCorrectionTermsForNUAPro[0]->Fill(1.5,sinP1nP1n,dMult*(dMult-1));
1716  fIntFlowCorrectionTermsForNUAPro[0]->Fill(3.5,sinP2nM1n,dMult*(dMult-1));
1718  {
1719  fIntFlowCorrectionTermsForNUAVsMPro[0][1]->Fill(dMultiplicityBin,sinP1nP1n,dMult*(dMult-1));
1720  fIntFlowCorrectionTermsForNUAVsMPro[0][3]->Fill(dMultiplicityBin,sinP2nM1n,dMult*(dMult-1));
1721  }
1722  }
1723 
1724  // 3-particle:
1725  Double_t sinP1nM1nM1n = 0.; // <<sin(n*(phi1-phi2-phi3))>>
1726 
1727  if(dMult>2)
1728  {
1729  sinP1nM1nM1n = (-dImQ1n*(pow(dReQ1n,2)+pow(dImQ1n,2))+dReQ1n*dImQ2n-dImQ1n*dReQ2n+2.*(dMult-1)*dImQ1n)
1730  / (dMult*(dMult-1)*(dMult-2));
1731 
1732  // average non-weighted 3-particle correction (sin terms) for non-uniform acceptance for single event:
1733  fIntFlowCorrectionTermsForNUAEBE[0]->SetBinContent(3,sinP1nM1nM1n);
1734  // event weights for NUA terms:
1735  fIntFlowEventWeightForCorrectionTermsForNUAEBE[0]->SetBinContent(3,dMult*(dMult-1)*(dMult-2));
1736 
1737  // final average non-weighted 3-particle correction (sin terms) for non-uniform acceptance for all events:
1738  fIntFlowCorrectionTermsForNUAPro[0]->Fill(2.5,sinP1nM1nM1n,dMult*(dMult-1)*(dMult-2));
1739  if(fCalculateCumulantsVsM){fIntFlowCorrectionTermsForNUAVsMPro[0][2]->Fill(dMultiplicityBin,sinP1nM1nM1n,dMult*(dMult-1)*(dMult-2));}
1740  }
1741 
1742 } // end of AliFlowAnalysisCRC::CalculateIntFlowCorrectionsForNUASinTerms()
1743 
1744 //=======================================================================================================================
1745 
1747 {
1748  // a) Get pointers for common control and common result histograms;
1749  // b) Get pointers for histograms holding particle weights;
1750  // c) Get pointers for reference flow histograms;
1751  // d) Get pointers for differential flow histograms;
1752  // e) Get pointers for 2D differential flow histograms;
1753  // f) Get pointers for other differential correlators;
1754  // g) Get pointers for mixed harmonics histograms;
1755  // h) Get pointers for nested loops' histograms;
1756  // i) Get pointers for control histograms;
1757  // j) Get pointers for bootstrap.
1758  // k) Get pointers for CRC histograms;
1759 
1760  if(outputListHistos)
1761  {
1762  this->SetHistList(outputListHistos);
1763  if(!fHistList)
1764  {
1765  printf("\n WARNING (QC): fHistList is NULL in AFAWQC::GOH() !!!!\n\n");
1766  exit(0);
1767  }
1777  this->GetPointersForBootstrap();
1778  this->GetPointersForCRC();
1779  this->GetPointersForCRCVZ();
1780  this->GetPointersForCRCZDC();
1781  this->GetPointersForCRCPt();
1782  this->GetPointersForCRC2();
1783  this->GetPointersForQVec();
1784  this->GetPointersForCME();
1785  this->GetPointersForFlowQC();
1787  this->GetPointersForFlowSPZDC();
1788  this->GetPointersForFlowSPVZ();
1789  this->GetPointersForEbEFlow();
1790  this->GetPointersForVarious();
1791  } else
1792  {
1793  printf("\n WARNING (QC): outputListHistos is NULL in AFAWQC::GOH() !!!!\n\n");
1794  exit(0);
1795  }
1796 
1797 } // end of void AliFlowAnalysisCRC::GetOutputHistograms(TList *outputListHistos)
1798 
1799 //=======================================================================================================================
1800 
1801 TProfile* AliFlowAnalysisCRC::MakePtProjection(TProfile2D *profilePtEta) const
1802 {
1803  // project 2D profile onto pt axis to get 1D profile
1804 
1805  Int_t nBinsPt = profilePtEta->GetNbinsX();
1806  Double_t dPtMin = (profilePtEta->GetXaxis())->GetXmin();
1807  Double_t dPtMax = (profilePtEta->GetXaxis())->GetXmax();
1808 
1809  Int_t nBinsEta = profilePtEta->GetNbinsY();
1810 
1811  TProfile *profilePt = new TProfile("","",nBinsPt,dPtMin,dPtMax);
1812 
1813  for(Int_t p=1;p<=nBinsPt;p++)
1814  {
1815  Double_t contentPt = 0.;
1816  Double_t entryPt = 0.;
1817  Double_t spreadPt = 0.;
1818  Double_t sum1 = 0.;
1819  Double_t sum2 = 0.;
1820  Double_t sum3 = 0.;
1821  for(Int_t e=1;e<=nBinsEta;e++)
1822  {
1823  contentPt += (profilePtEta->GetBinContent(profilePtEta->GetBin(p,e)))
1824  * (profilePtEta->GetBinEntries(profilePtEta->GetBin(p,e)));
1825  entryPt += (profilePtEta->GetBinEntries(profilePtEta->GetBin(p,e)));
1826 
1827  sum1 += (profilePtEta->GetBinEntries(profilePtEta->GetBin(p,e)))
1828  * (pow(profilePtEta->GetBinError(profilePtEta->GetBin(p,e)),2.)
1829  + pow(profilePtEta->GetBinContent(profilePtEta->GetBin(p,e)),2.));
1830  sum2 += (profilePtEta->GetBinEntries(profilePtEta->GetBin(p,e)));
1831  sum3 += (profilePtEta->GetBinEntries(profilePtEta->GetBin(p,e)))
1832  * (profilePtEta->GetBinContent(profilePtEta->GetBin(p,e)));
1833  }
1834  if(sum2>0. && sum1/sum2-pow(sum3/sum2,2.) > 0.)
1835  {
1836  spreadPt = pow(sum1/sum2-pow(sum3/sum2,2.),0.5);
1837  }
1838  profilePt->SetBinContent(p,contentPt);
1839  profilePt->SetBinEntries(p,entryPt);
1840  {
1841  profilePt->SetBinError(p,spreadPt);
1842  }
1843 
1844  }
1845 
1846  return profilePt;
1847 
1848 } // end of TProfile* AliFlowAnalysisCRC::MakePtProjection(TProfile2D *profilePtEta)
1849 
1850 
1851 //=======================================================================================================================
1852 
1853 
1854 TProfile* AliFlowAnalysisCRC::MakeEtaProjection(TProfile2D *profilePtEta) const
1855 {
1856  // project 2D profile onto eta axis to get 1D profile
1857 
1858  Int_t nBinsEta = profilePtEta->GetNbinsY();
1859  Double_t dEtaMin = (profilePtEta->GetYaxis())->GetXmin();
1860  Double_t dEtaMax = (profilePtEta->GetYaxis())->GetXmax();
1861 
1862  Int_t nBinsPt = profilePtEta->GetNbinsX();
1863 
1864  TProfile *profileEta = new TProfile("","",nBinsEta,dEtaMin,dEtaMax);
1865 
1866  for(Int_t e=1;e<=nBinsEta;e++)
1867  {
1868  Double_t contentEta = 0.;
1869  Double_t entryEta = 0.;
1870  for(Int_t p=1;p<=nBinsPt;p++)
1871  {
1872  contentEta += (profilePtEta->GetBinContent(profilePtEta->GetBin(p,e)))
1873  * (profilePtEta->GetBinEntries(profilePtEta->GetBin(p,e)));
1874  entryEta += (profilePtEta->GetBinEntries(profilePtEta->GetBin(p,e)));
1875  }
1876  profileEta->SetBinContent(e,contentEta);
1877  profileEta->SetBinEntries(e,entryEta);
1878  }
1879 
1880  return profileEta;
1881 
1882 } // end of TProfile* AliFlowAnalysisCRC::MakeEtaProjection(TProfile2D *profilePtEta)
1883 
1884 //=======================================================================================================================
1885 
1887 {
1888  // Printing on the screen the final results for integrated flow (RF, POI and RP).
1889 
1890  Int_t n = fHarmonic;
1891 
1892  Double_t dVn[4] = {0.}; // array to hold Vn{2}, Vn{4}, Vn{6} and Vn{8}
1893  Double_t dVnErr[4] = {0.}; // array to hold errors of Vn{2}, Vn{4}, Vn{6} and Vn{8}
1894 
1895  if(type == "RF")
1896  {
1897  for(Int_t b=0;b<4;b++)
1898  {
1899  dVn[0] = (fCommonHistsResults2nd->GetHistIntFlow())->GetBinContent(1);
1900  dVnErr[0] = (fCommonHistsResults2nd->GetHistIntFlow())->GetBinError(1);
1901  dVn[1] = (fCommonHistsResults4th->GetHistIntFlow())->GetBinContent(1);
1902  dVnErr[1] = (fCommonHistsResults4th->GetHistIntFlow())->GetBinError(1);
1903  dVn[2] = (fCommonHistsResults6th->GetHistIntFlow())->GetBinContent(1);
1904  dVnErr[2] = (fCommonHistsResults6th->GetHistIntFlow())->GetBinError(1);
1905  dVn[3] = (fCommonHistsResults8th->GetHistIntFlow())->GetBinContent(1);
1906  dVnErr[3] = (fCommonHistsResults8th->GetHistIntFlow())->GetBinError(1);
1907  }
1908  } else if(type == "RP")
1909  {
1910  dVn[0] = (fCommonHistsResults2nd->GetHistIntFlowRP())->GetBinContent(1);
1911  dVnErr[0] = (fCommonHistsResults2nd->GetHistIntFlowRP())->GetBinError(1);
1912  dVn[1] = (fCommonHistsResults4th->GetHistIntFlowRP())->GetBinContent(1);
1913  dVnErr[1] = (fCommonHistsResults4th->GetHistIntFlowRP())->GetBinError(1);
1914  dVn[2] = (fCommonHistsResults6th->GetHistIntFlowRP())->GetBinContent(1);
1915  dVnErr[2] = (fCommonHistsResults6th->GetHistIntFlowRP())->GetBinError(1);
1916  dVn[3] = (fCommonHistsResults8th->GetHistIntFlowRP())->GetBinContent(1);
1917  dVnErr[3] = (fCommonHistsResults8th->GetHistIntFlowRP())->GetBinError(1);
1918  } else if(type == "POI")
1919  {
1920  dVn[0] = (fCommonHistsResults2nd->GetHistIntFlowPOI())->GetBinContent(1);
1921  dVnErr[0] = (fCommonHistsResults2nd->GetHistIntFlowPOI())->GetBinError(1);
1922  dVn[1] = (fCommonHistsResults4th->GetHistIntFlowPOI())->GetBinContent(1);
1923  dVnErr[1] = (fCommonHistsResults4th->GetHistIntFlowPOI())->GetBinError(1);
1924  dVn[2] = (fCommonHistsResults6th->GetHistIntFlowPOI())->GetBinContent(1);
1925  dVnErr[2] = (fCommonHistsResults6th->GetHistIntFlowPOI())->GetBinError(1);
1926  dVn[3] = (fCommonHistsResults8th->GetHistIntFlowPOI())->GetBinContent(1);
1927  dVnErr[3] = (fCommonHistsResults8th->GetHistIntFlowPOI())->GetBinError(1);
1928  } else if(type == "RF, rebinned in M" && fCalculateCumulantsVsM)
1929  {
1930  for(Int_t b=0;b<4;b++)
1931  {
1932  dVn[b] = fIntFlowRebinnedInM->GetBinContent(b+1);
1933  dVnErr[b] = fIntFlowRebinnedInM->GetBinError(b+1);
1934  }
1935  }
1936 
1937  TString title = " flow estimates from Q-cumulants";
1938  TString subtitle = " (";
1939  TString subtitle2 = " (rebinned in M)";
1940 
1941  if(type != "RF, rebinned in M")
1942  {
1944  {
1945  subtitle.Append(type);
1946  subtitle.Append(", without weights)");
1947  } else
1948  {
1949  subtitle.Append(type);
1950  subtitle.Append(", with weights)");
1951  }
1952  } else
1953  {
1955  {
1956  subtitle.Append("RF");
1957  subtitle.Append(", without weights)");
1958  } else
1959  {
1960  subtitle.Append("RF");
1961  subtitle.Append(", with weights)");
1962  }
1963  }
1964 
1965  cout<<endl;
1966  cout<<"*************************************"<<endl;
1967  cout<<"*************************************"<<endl;
1968  cout<<title.Data()<<endl;
1969  cout<<subtitle.Data()<<endl;
1970  if(type == "RF, rebinned in M"){cout<<subtitle2.Data()<<endl;}
1971  cout<<endl;
1972 
1973  for(Int_t i=0;i<4;i++)
1974  {
1975  cout<<" v_"<<n<<"{"<<2*(i+1)<<"} = "<<dVn[i]<<" +/- "<<dVnErr[i]<<endl;
1976  }
1977 
1978  cout<<endl;
1979  if(type == "RF")
1980  {
1982  {
1983  cout<<" detector bias (corrected for): "<<endl;
1984  } else
1985  {
1986  cout<<" detector bias (not corrected for):"<<endl;
1987  }
1988  cout<<" to QC{2}: "<<fIntFlowDetectorBias->GetBinContent(1)<<" +/- "<<fIntFlowDetectorBias->GetBinError(1)<<endl;
1989  cout<<" to QC{4}: "<<fIntFlowDetectorBias->GetBinContent(2)<<" +/- "<<fIntFlowDetectorBias->GetBinError(2)<<endl;
1990  cout<<endl;
1991  }
1992  if(type == "RF" || type == "RF, rebinned in M")
1993  {
1994  cout<<" nEvts = "<<(Int_t)fCommonHists->GetHistMultRP()->GetEntries()<<", <M> = "<<(Double_t)fCommonHists->GetHistMultRP()->GetMean()<<endl;
1995  }
1996  else if (type == "RP")
1997  {
1998  cout<<" nEvts = "<<(Int_t)fCommonHists->GetHistMultRP()->GetEntries()<<", <M> = "<<(Double_t)fCommonHists->GetHistMultRP()->GetMean()<<endl;
1999  }
2000  else if (type == "POI")
2001  {
2002  cout<<" nEvts = "<<(Int_t)fCommonHists->GetHistMultPOI()->GetEntries()<<", <M> = "<<(Double_t)fCommonHists->GetHistMultPOI()->GetMean()<<endl;
2003  }
2004 
2005  cout<<"*************************************"<<endl;
2006  cout<<"*************************************"<<endl;
2007  cout<<endl;
2008 
2009 }// end of AliFlowAnalysisCRC::PrintFinalResultsForIntegratedFlow(TString type="RF");
2010 
2011 //=======================================================================================================================
2012 
2014 {
2015  //store the final results in output .root file
2016  TFile *output = new TFile(outputFileName.Data(),"RECREATE");
2017  //output->WriteObject(fHistList, "cobjQC","SingleKey");
2018  fHistList->Write(fHistList->GetName(), TObject::kSingleKey);
2019  delete output;
2020 }
2021 
2022 
2023 //=======================================================================================================================
2024 
2025 
2026 void AliFlowAnalysisCRC::WriteHistograms(TDirectoryFile *outputFileName)
2027 {
2028  //store the final results in output .root file
2029  fHistList->SetName("cobjQC");
2030  fHistList->SetOwner(kTRUE);
2031  outputFileName->Add(fHistList);
2032  outputFileName->Write(outputFileName->GetName(), TObject::kSingleKey);
2033 }
2034 
2035 //=======================================================================================================================
2036 
2038 {
2039  // Book common control histograms and common histograms for final results.
2040  // a) Book common control histograms;
2041  // b) Book common result histograms.
2042 
2043  // a) Book common control histograms:
2044  // Common control histograms (all events):
2045  TString commonHistsName = "AliFlowCommonHistQC";
2046  commonHistsName += fAnalysisLabel->Data();
2047  fCommonHists = new AliFlowCommonHist(commonHistsName.Data(),commonHistsName.Data(),fBookOnlyBasicCCH);
2048  fHistList->Add(fCommonHists);
2049  // Common control histograms (selected events):
2051  {
2052  // Common control histogram filled for events with 2 and more reference particles:
2053  TString commonHists2ndOrderName = "AliFlowCommonHist2ndOrderQC";
2054  commonHists2ndOrderName += fAnalysisLabel->Data();
2055  fCommonHists2nd = new AliFlowCommonHist(commonHists2ndOrderName.Data(),commonHists2ndOrderName.Data(),fBookOnlyBasicCCH);
2056  fHistList->Add(fCommonHists2nd);
2057  // Common control histogram filled for events with 2 and more reference particles:
2058  TString commonHists4thOrderName = "AliFlowCommonHist4thOrderQC";
2059  commonHists4thOrderName += fAnalysisLabel->Data();
2060  fCommonHists4th = new AliFlowCommonHist(commonHists4thOrderName.Data(),commonHists4thOrderName.Data(),fBookOnlyBasicCCH);
2061  fHistList->Add(fCommonHists4th);
2062  // Common control histogram filled for events with 6 and more reference particles:
2063  TString commonHists6thOrderName = "AliFlowCommonHist6thOrderQC";
2064  commonHists6thOrderName += fAnalysisLabel->Data();
2065  fCommonHists6th = new AliFlowCommonHist(commonHists6thOrderName.Data(),commonHists6thOrderName.Data(),fBookOnlyBasicCCH);
2066  fHistList->Add(fCommonHists6th);
2067  // Common control histogram filled for events with 8 and more reference particles:
2068  TString commonHists8thOrderName = "AliFlowCommonHist8thOrderQC";
2069  commonHists8thOrderName += fAnalysisLabel->Data();
2070  fCommonHists8th = new AliFlowCommonHist(commonHists8thOrderName.Data(),commonHists8thOrderName.Data(),fBookOnlyBasicCCH);
2071  fHistList->Add(fCommonHists8th);
2072  } // end of if(fFillMultipleControlHistograms)
2073 
2074  // b) Book common result histograms:
2075  // Common result histograms for QC{2}:
2076  TString commonHistResults2ndOrderName = "AliFlowCommonHistResults2ndOrderQC";
2077  commonHistResults2ndOrderName += fAnalysisLabel->Data();
2078  fCommonHistsResults2nd = new AliFlowCommonHistResults(commonHistResults2ndOrderName.Data(),"",fHarmonic);
2080  // Common result histograms for QC{4}:
2081  TString commonHistResults4thOrderName = "AliFlowCommonHistResults4thOrderQC";
2082  commonHistResults4thOrderName += fAnalysisLabel->Data();
2083  fCommonHistsResults4th = new AliFlowCommonHistResults(commonHistResults4thOrderName.Data(),"",fHarmonic);
2085  // Common result histograms for QC{6}:
2086  TString commonHistResults6thOrderName = "AliFlowCommonHistResults6thOrderQC";
2087  commonHistResults6thOrderName += fAnalysisLabel->Data();
2088  fCommonHistsResults6th = new AliFlowCommonHistResults(commonHistResults6thOrderName.Data(),"",fHarmonic);
2090  // Common result histograms for QC{8}:
2091  TString commonHistResults8thOrderName = "AliFlowCommonHistResults8thOrderQC";
2092  commonHistResults8thOrderName += fAnalysisLabel->Data();
2093  fCommonHistsResults8th = new AliFlowCommonHistResults(commonHistResults8thOrderName.Data(),"",fHarmonic);
2095 
2096 } // end of void AliFlowAnalysisCRC::BookCommonHistograms()
2097 
2098 //=======================================================================================================================
2099 
2101 {
2102  // Book and fill histograms which hold phi, pt and eta weights.
2103 
2104  if(!fWeightsList)
2105  {
2106  printf("\n WARNING (QC): fWeightsList is NULL in AFAWQC::BAFWH() !!!! \n\n");
2107  exit(0);
2108  }
2109 
2110  TString fUseParticleWeightsName = "fUseParticleWeightsQC";
2111  fUseParticleWeightsName += fAnalysisLabel->Data();
2112  fUseParticleWeights = new TProfile(fUseParticleWeightsName.Data(),"0 = particle weight not used, 1 = particle weight used ",7,0,7);
2113  fUseParticleWeights->SetLabelSize(0.06);
2114  fUseParticleWeights->SetStats(kFALSE);
2115  (fUseParticleWeights->GetXaxis())->SetBinLabel(1,"w_{#phi}");
2116  (fUseParticleWeights->GetXaxis())->SetBinLabel(2,"w_{p_{T}}");
2117  (fUseParticleWeights->GetXaxis())->SetBinLabel(3,"w_{#eta}");
2118  (fUseParticleWeights->GetXaxis())->SetBinLabel(4,"w_{track}");
2119  (fUseParticleWeights->GetXaxis())->SetBinLabel(5,"w_{#phi,#eta}");
2120  (fUseParticleWeights->GetXaxis())->SetBinLabel(6,"w_{#phi,#eta} chdep");
2129 
2130  // // POIs
2131  // for(Int_t c=0; c<2; c++)
2132  // {
2133  // fPhiWeightsPOIs[c] = new TH1F(Form("fPhiWeightsPOIs[%d][%d]",c,h),Form("fPhiWeightsPOIs[%d][%d]",c,h),fnBinsPhi,fPhiMin,fPhiMax);
2134  // fPhiWeightsPOIs[c]->Sumw2();
2135  // fEtaWeightsPOIs[c] = new TH1D(Form("fEtaWeightsPOIs[%d][%d]",c,h),Form("fEtaWeightsPOIs[%d][%d]",c,h),fnBinsEta,fEtaMin,fEtaMax);
2136  // fEtaWeightsPOIs[c]->Sumw2();
2137  // fPhiEtaWeightsPOIs[c] = new TH2D(Form("fPhiEtaWeightsPOIs[%d][%d]",c,h),Form("fPhiEtaWeightsPOIs[%d][%d]",c,h),fnBinsPhi,fPhiMin,fPhiMax,fnBinsEta,fEtaMin,fEtaMax);
2138  // fPhiEtaWeightsPOIs[c]->Sumw2();
2139  //
2140  // if(fUsePhiWeights)
2141  // {
2142  // if(fWeightsList->FindObject(Form("fPhiHist[%d][%d]",c,h)))
2143  // {
2144  // fPhiDistrRefPOIs[c] = dynamic_cast<TH1F*>(fWeightsList->FindObject(Form("fPhiHist[%d][%d]",c,h)));
2145  // if(!fPhiDistrRefPOIs[c])
2146  // {
2147  // printf("\n WARNING (QC): fPhiDistrRefPOIs is NULL in AFAWQC::BAFWH() !!!!\n\n");
2148  // exit(0);
2149  // }
2150  // if(TMath::Abs(fPhiDistrRefPOIs[c]->GetBinWidth(1)-fPhiBinWidth)>pow(10.,-6.))
2151  // {
2152  // cout<<endl;
2153  // cout<<"WARNING (QC): Inconsistent binning in histograms for phi-weights throughout the code."<<endl;
2154  // cout<<endl;
2155  // //exit(0);
2156  // }
2157  // } else
2158  // {
2159  // cout<<"WARNING: fWeightsList->FindObject(\"fPhiHist\") is NULL in AFAWQC::BAFWH() !!!!"<<endl;
2160  // exit(0);
2161  // }
2162  // } // end of if(fUsePhiWeights)
2163  //
2164  // if(fUsePtWeights)
2165  // {
2166  // if(fWeightsList->FindObject(Form("fPtHist[%d][%d]",c,h)))
2167  // {
2168  // fPtDistrRefPOIs[c] = dynamic_cast<TH1D*>(fWeightsList->FindObject(Form("fPtHist[%d][%d]",c,h)));
2169  // if(!fPtDistrRefPOIs[c])
2170  // {
2171  // printf("\n WARNING (QC): fPtDistrRefPOIs is NULL in AFAWQC::BAFWH() !!!!\n\n");
2172  // exit(0);
2173  // }
2174  // if(TMath::Abs(fPtDistrRefPOIs[c]->GetBinWidth(1)-fPtBinWidth)>pow(10.,-6.))
2175  // {
2176  // cout<<endl;
2177  // cout<<"WARNING (QC): Inconsistent binning in histograms for pt-weights throughout the code."<<endl;
2178  // cout<<endl;
2179  // //exit(0);
2180  // }
2181  // } else
2182  // {
2183  // cout<<"WARNING: fWeightsList->FindObject(\"fPtHist\") is NULL in AFAWQC::BAFWH() !!!!"<<endl;
2184  // exit(0);
2185  // }
2186  // } // end of if(fUsePtWeights)
2187  //
2188  // if(fUseEtaWeights)
2189  // {
2190  // if(fWeightsList->FindObject(Form("fEtaHist[%d][%d]",c,h)))
2191  // {
2192  // fEtaDistrRefPOIs[c] = dynamic_cast<TH1D*>(fWeightsList->FindObject(Form("fEtaHist[%d][%d]",c,h)));
2193  // if(!fEtaDistrRefPOIs[c])
2194  // {
2195  // printf("\n WARNING (QC): fEtaDistrRefPOIs is NULL in AFAWQC::BAFWH() !!!!\n\n");
2196  // exit(0);
2197  // }
2198  // if(TMath::Abs(fEtaDistrRefPOIs[c]->GetBinWidth(1)-fEtaBinWidth)>pow(10.,-6.))
2199  // {
2200  // cout<<endl;
2201  // cout<<"WARNING (QC): Inconsistent binning in histograms for eta-weights throughout the code."<<endl;
2202  // cout<<endl;
2203  // //exit(0);
2204  // }
2205  // } else
2206  // {
2207  // cout<<"WARNING: fWeightsList->FindObject(\"fEtaHist\") is NULL in AFAWQC::BAFWH() !!!!"<<endl;
2208  // exit(0);
2209  // }
2210  // } // end of if(fUseEtaWeights)
2211  //
2212  //
2213  // } // end of for(Int_t c=0; c<2; c++)
2214 
2215  //**********************************************************************************************************
2216 
2217  // RPs
2218 
2219  // fPhiWeightsRPs = new TH1F("fPhiWeightsRPs","fPhiWeightsRPs",fnBinsPhi,fPhiMin,fPhiMax);
2220  // fEtaWeightsRPs = new TH1D("fEtaWeightsRPs","fEtaWeightsRPs",fnBinsEta,fEtaMin,fEtaMax);
2221  //
2222  // if(fUsePhiWeights)
2223  // {
2224  // if(fWeightsList->FindObject("fPhiDistrRPs"))
2225  // {
2226  // fPhiDistrRefRPs = dynamic_cast<TH1F*>(fWeightsList->FindObject("fPhiDistrRPs"));
2227  // if(!fPhiDistrRefRPs)
2228  // {
2229  // printf("\n WARNING (QC): fPhiDistrRefRPs is NULL in AFAWQC::BAFWH() !!!!\n\n");
2230  // exit(0);
2231  // }
2232  // if(TMath::Abs(fPhiDistrRefRPs->GetBinWidth(1)-fPhiBinWidth)>pow(10.,-6.))
2233  // {
2234  // cout<<endl;
2235  // cout<<"WARNING (QC): Inconsistent binning in histograms for phi-weights throughout the code."<<endl;
2236  // cout<<endl;
2237  // //exit(0);
2238  // }
2239  // } else
2240  // {
2241  // cout<<"WARNING: fWeightsList->FindObject(\"fPhiDistrRPs\") is NULL in AFAWQC::BAFWH() !!!!"<<endl;
2242  // exit(0);
2243  // }
2244  // } // end of if(fUsePhiWeights)
2245  //
2246  // if(fUsePtWeights)
2247  // {
2248  // if(fWeightsList->FindObject("fPtDistrRPs"))
2249  // {
2250  // fPtDistrRefRPs = dynamic_cast<TH1D*>(fWeightsList->FindObject("fPtDistrRPs"));
2251  // if(!fPtDistrRefRPs)
2252  // {
2253  // printf("\n WARNING (QC): fPtDistrRefRPs is NULL in AFAWQC::BAFWH() !!!!\n\n");
2254  // exit(0);
2255  // }
2256  // if(TMath::Abs(fPtDistrRefRPs->GetBinWidth(1)-fPtBinWidth)>pow(10.,-6.))
2257  // {
2258  // cout<<endl;
2259  // cout<<"WARNING (QC): Inconsistent binning in histograms for phi-weights throughout the code."<<endl;
2260  // cout<<endl;
2261  // //exit(0);
2262  // }
2263  // } else
2264  // {
2265  // cout<<"WARNING: fWeightsList->FindObject(\"fPtDistrRPs\") is NULL in AFAWQC::BAFWH() !!!!"<<endl;
2266  // exit(0);
2267  // }
2268  // } // end of if(fUsePtWeights)
2269  //
2270  // if(fUseEtaWeights)
2271  // {
2272  // if(fWeightsList->FindObject("fEtaDistrRPs"))
2273  // {
2274  // fEtaDistrRefRPs = dynamic_cast<TH1D*>(fWeightsList->FindObject("fEtaDistrRPs"));
2275  // if(!fEtaDistrRefRPs)
2276  // {
2277  // printf("\n WARNING (QC): fEtaDistrRefRPs is NULL in AFAWQC::BAFWH() !!!!\n\n");
2278  // exit(0);
2279  // }
2280  // if(TMath::Abs(fEtaDistrRefRPs->GetBinWidth(1)-fEtaBinWidth)>pow(10.,-6.))
2281  // {
2282  // cout<<endl;
2283  // cout<<"WARNING (QC): Inconsistent binning in histograms for eta-weights throughout the code."<<endl;
2284  // cout<<endl;
2285  // //exit(0);
2286  // }
2287  // } else
2288  // {
2289  // cout<<"WARNING: fWeightsList->FindObject(\"fEtaDistrRPs\") is NULL in AFAWQC::BAFWH() !!!!"<<endl;
2290  // exit(0);
2291  // }
2292  // } // end of if(fUseEtaWeights)
2293  //
2294 
2295 } // end of AliFlowAnalysisCRC::BookAndFillWeightsHistograms()
2296 
2297 //=======================================================================================================================
2298 
2300 {
2301  if(!fCenWeightsHist) return;
2302  fCenWeigCalHist = (TH1D*)(fCenWeightsHist->Clone("fCenWeigCalHist"));
2303  TF1 *CenFit = new TF1("CenFit","pol0", 0., 100.);
2305  fCenWeigCalHist->Fit("CenFit","QNR","",0.,50.);
2306  Double_t CenAv = CenFit->GetParameter(0);
2307  for(Int_t b=1; b<=fCenWeigCalHist->GetNbinsX(); b++) {
2308  Double_t newbin = fCenWeigCalHist->GetBinContent(b);
2309  if(newbin) {
2310  fCenWeigCalHist->SetBinContent(b,CenAv/newbin);
2311  } else {
2312  fCenWeigCalHist->SetBinContent(b,1.);
2313  }
2314  }
2315  }
2316  else {
2317  fCenWeigCalHist->Fit("CenFit","QNR","",0.,8.);
2318  Double_t CenAv = CenFit->GetParameter(0);
2319  fCenWeigCalHist->Fit("CenFit","QNR","",12.,50.);
2320  Double_t SemiCenAv = CenFit->GetParameter(0);
2321  for(Int_t b=1; b<=fCenWeigCalHist->GetNbinsX(); b++) {
2322  Double_t newbin = fCenWeigCalHist->GetBinContent(b);
2323  if(newbin) {
2324  if(b<=10) fCenWeigCalHist->SetBinContent(b,CenAv/newbin);
2325  if(b>10 && b<=50) fCenWeigCalHist->SetBinContent(b,SemiCenAv/newbin);
2326  if(b>50) fCenWeigCalHist->SetBinContent(b,1.);
2327  } else {
2328  fCenWeigCalHist->SetBinContent(b,1.);
2329  }
2330  }
2331  }
2332  fCenWeigCalHist->SetName("CenWeights");
2334 } // end of AliFlowAnalysisCRC::SetCentralityWeights()
2335 
2336 //=======================================================================================================================
2337 
2339 {
2340  // Book all objects for integrated flow:
2341  // a) Book profile to hold all flags for integrated flow;
2342  // b) Book event-by-event quantities;
2343  // c) Book profiles; // to be improved (comment)
2344  // d) Book histograms holding the final results.
2345 
2346  TString sinCosFlag[2] = {"sin","cos"}; // to be improved (should I promote this to data members?)
2347  TString powerFlag[2] = {"linear","quadratic"}; // to be improved (should I promote this to data members?)
2348 
2349  // a) Book profile to hold all flags for integrated flow:
2350  TString intFlowFlagsName = "fIntFlowFlags";
2351  intFlowFlagsName += fAnalysisLabel->Data();
2352  fIntFlowFlags = new TProfile(intFlowFlagsName.Data(),"Flags for Integrated Flow",20,0.,20.);
2353  fIntFlowFlags->SetTickLength(-0.01,"Y");
2354  fIntFlowFlags->SetMarkerStyle(25);
2355  fIntFlowFlags->SetLabelSize(0.04);
2356  fIntFlowFlags->SetLabelOffset(0.02,"Y");
2357  fIntFlowFlags->SetStats(kFALSE);
2358  fIntFlowFlags->GetXaxis()->SetBinLabel(1,"Particle Weights");
2359  fIntFlowFlags->GetXaxis()->SetBinLabel(2,"Event Weights");
2360  fIntFlowFlags->GetXaxis()->SetBinLabel(3,"Corrected for NUA?");
2361  fIntFlowFlags->GetXaxis()->SetBinLabel(4,"Print RF results");
2362  fIntFlowFlags->GetXaxis()->SetBinLabel(5,"Print RP results");
2363  fIntFlowFlags->GetXaxis()->SetBinLabel(6,"Print POI results");
2364  fIntFlowFlags->GetXaxis()->SetBinLabel(7,"Print RF (rebinned in M) results");
2365  fIntFlowFlags->GetXaxis()->SetBinLabel(8,"Corrected for NUA vs M?");
2366  fIntFlowFlags->GetXaxis()->SetBinLabel(9,"Propagate errors to v_{n} from correlations?");
2367  fIntFlowFlags->GetXaxis()->SetBinLabel(10,"Calculate cumulants vs M");
2368  fIntFlowFlags->GetXaxis()->SetBinLabel(11,"fMinimumBiasReferenceFlow");
2369  fIntFlowFlags->GetXaxis()->SetBinLabel(12,"fForgetAboutCovariances");
2370  fIntFlowFlags->GetXaxis()->SetBinLabel(13,"fStoreVarious");
2371  fIntFlowFlags->GetXaxis()->SetBinLabel(14,"fFillMultipleControlHistograms");
2372  fIntFlowFlags->GetXaxis()->SetBinLabel(15,"Calculate all correlations vs M");
2373  fIntFlowFlags->GetXaxis()->SetBinLabel(16,"fMultiplicityIs");
2374  fIntFlowFlags->GetXaxis()->SetBinLabel(17,"fExactNoRPs");
2375  fIntFlowFlags->GetXaxis()->SetBinLabel(18,"fUse2DHistograms");
2376  fIntFlowFlags->GetXaxis()->SetBinLabel(19,"fFillProfilesVsMUsingWeights");
2377  fIntFlowFlags->GetXaxis()->SetBinLabel(20,"fUseQvectorTerms");
2379 
2380  // b) Book event-by-event quantities:
2381  // Re[Q_{m*n,k}], Im[Q_{m*n,k}] and S_{p,k}^M:
2382  fReQ = new TMatrixD(12,9);
2383  fImQ = new TMatrixD(12,9);
2384  fSpk = new TMatrixD(8,9);
2385  // average correlations <2>, <4>, <6> and <8> for single event (bining is the same as in fIntFlowCorrelationsPro and fIntFlowCorrelationsHist):
2386  TString intFlowCorrelationsEBEName = "fIntFlowCorrelationsEBE";
2387  intFlowCorrelationsEBEName += fAnalysisLabel->Data();
2388  fIntFlowCorrelationsEBE = new TH1D(intFlowCorrelationsEBEName.Data(),intFlowCorrelationsEBEName.Data(),4,0,4);
2389  // weights for average correlations <2>, <4>, <6> and <8> for single event:
2390  TString intFlowEventWeightsForCorrelationsEBEName = "fIntFlowEventWeightsForCorrelationsEBE";
2391  intFlowEventWeightsForCorrelationsEBEName += fAnalysisLabel->Data();
2392  fIntFlowEventWeightsForCorrelationsEBE = new TH1D(intFlowEventWeightsForCorrelationsEBEName.Data(),intFlowEventWeightsForCorrelationsEBEName.Data(),4,0,4);
2393  // average all correlations for single event (bining is the same as in fIntFlowCorrelationsAllPro and fIntFlowCorrelationsAllHist):
2394  TString intFlowCorrelationsAllEBEName = "fIntFlowCorrelationsAllEBE";
2395  intFlowCorrelationsAllEBEName += fAnalysisLabel->Data();
2396  fIntFlowCorrelationsAllEBE = new TH1D(intFlowCorrelationsAllEBEName.Data(),intFlowCorrelationsAllEBEName.Data(),64,0,64);
2397  // average correction terms for non-uniform acceptance for single event
2398  // (binning is the same as in fIntFlowCorrectionTermsForNUAPro[2] and fIntFlowCorrectionTermsForNUAHist[2]):
2399  TString fIntFlowCorrectionTermsForNUAEBEName = "fIntFlowCorrectionTermsForNUAEBE";
2400  fIntFlowCorrectionTermsForNUAEBEName += fAnalysisLabel->Data();
2401  for(Int_t sc=0;sc<2;sc++) // sin or cos terms
2402  {
2403  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);
2404  }
2405  // event weights for terms for non-uniform acceptance:
2406  TString fIntFlowEventWeightForCorrectionTermsForNUAEBEName = "fIntFlowEventWeightForCorrectionTermsForNUAEBE";
2407  fIntFlowEventWeightForCorrectionTermsForNUAEBEName += fAnalysisLabel->Data();
2408  for(Int_t sc=0;sc<2;sc++) // sin or cos terms
2409  {
2410  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
2411  }
2412  // c) Book profiles: // to be improved (comment)
2413  // profile to hold average multiplicities and number of events for events with nRP>=0, nRP>=1, ... , and nRP>=8:
2414  TString avMultiplicityName = "fAvMultiplicity";
2415  avMultiplicityName += fAnalysisLabel->Data();
2416  fAvMultiplicity = new TProfile(avMultiplicityName.Data(),"Average multiplicities of reference particles (RPs)",9,0,9);
2417  fAvMultiplicity->SetTickLength(-0.01,"Y");
2418  fAvMultiplicity->SetMarkerStyle(25);
2419  fAvMultiplicity->SetLabelSize(0.05);
2420  fAvMultiplicity->SetLabelOffset(0.02,"Y");
2421  fAvMultiplicity->SetYTitle("Average multiplicity");
2422  (fAvMultiplicity->GetXaxis())->SetBinLabel(1,"all evts");
2423  (fAvMultiplicity->GetXaxis())->SetBinLabel(2,"n_{RP} #geq 1");
2424  (fAvMultiplicity->GetXaxis())->SetBinLabel(3,"n_{RP} #geq 2");
2425  (fAvMultiplicity->GetXaxis())->SetBinLabel(4,"n_{RP} #geq 3");
2426  (fAvMultiplicity->GetXaxis())->SetBinLabel(5,"n_{RP} #geq 4");
2427  (fAvMultiplicity->GetXaxis())->SetBinLabel(6,"n_{RP} #geq 5");
2428  (fAvMultiplicity->GetXaxis())->SetBinLabel(7,"n_{RP} #geq 6");
2429  (fAvMultiplicity->GetXaxis())->SetBinLabel(8,"n_{RP} #geq 7");
2430  (fAvMultiplicity->GetXaxis())->SetBinLabel(9,"n_{RP} #geq 8");
2432  // Average correlations <<2>>, <<4>>, <<6>> and <<8>> for all events (with wrong errors!):
2433  TString correlationFlag[4] = {"#LT#LT2#GT#GT","#LT#LT4#GT#GT","#LT#LT6#GT#GT","#LT#LT8#GT#GT"};
2434  TString intFlowCorrelationsProName = "fIntFlowCorrelationsPro";
2435  intFlowCorrelationsProName += fAnalysisLabel->Data();
2436  fIntFlowCorrelationsPro = new TProfile(intFlowCorrelationsProName.Data(),"Average correlations for all events",4,0,4,"s");
2437  fIntFlowCorrelationsPro->Sumw2();
2438  fIntFlowCorrelationsPro->SetTickLength(-0.01,"Y");
2439  fIntFlowCorrelationsPro->SetMarkerStyle(25);
2440  fIntFlowCorrelationsPro->SetLabelSize(0.06);
2441  fIntFlowCorrelationsPro->SetLabelOffset(0.01,"Y");
2442  for(Int_t b=0;b<4;b++)
2443  {
2444  (fIntFlowCorrelationsPro->GetXaxis())->SetBinLabel(b+1,correlationFlag[b].Data());
2445  }
2447  // Average correlations squared <<2>^2>, <<4>^2>, <<6>^2> and <<8>^2> for all events:
2448  TString squaredCorrelationFlag[4] = {"#LT#LT2#GT^{2}#GT","#LT#LT4#GT^{2}#GT","#LT#LT6#GT^{2}#GT","#LT#LT8#GT^{2}#GT"};
2449  TString intFlowSquaredCorrelationsProName = "fIntFlowSquaredCorrelationsPro";
2450  intFlowSquaredCorrelationsProName += fAnalysisLabel->Data();
2451  fIntFlowSquaredCorrelationsPro = new TProfile(intFlowSquaredCorrelationsProName.Data(),"Average squared correlations for all events",4,0,4,"s");
2453  fIntFlowSquaredCorrelationsPro->SetTickLength(-0.01,"Y");
2454  fIntFlowSquaredCorrelationsPro->SetMarkerStyle(25);
2455  fIntFlowSquaredCorrelationsPro->SetLabelSize(0.06);
2456  fIntFlowSquaredCorrelationsPro->SetLabelOffset(0.01,"Y");
2457  for(Int_t b=0;b<4;b++)
2458  {
2459  (fIntFlowSquaredCorrelationsPro->GetXaxis())->SetBinLabel(b+1,squaredCorrelationFlag[b].Data());
2460  }
2463  {
2464  for(Int_t ci=0;ci<4;ci++) // correlation index
2465  {
2466  // average correlations <<2>>, <<4>>, <<6>> and <<8>> versus multiplicity for all events (with wrong errors):
2467  TString intFlowCorrelationsVsMProName = "fIntFlowCorrelationsVsMPro";
2468  intFlowCorrelationsVsMProName += fAnalysisLabel->Data();
2469  fIntFlowCorrelationsVsMPro[ci] = new TProfile(Form("%s, %s",intFlowCorrelationsVsMProName.Data(),correlationFlag[ci].Data()),
2470  Form("%s vs multiplicity",correlationFlag[ci].Data()),
2472  fIntFlowCorrelationsVsMPro[ci]->Sumw2();
2473  fIntFlowCorrelationsVsMPro[ci]->GetYaxis()->SetTitle(correlationFlag[ci].Data());
2475  {
2476  fIntFlowCorrelationsVsMPro[ci]->GetXaxis()->SetTitle("# RPs");
2478  {
2479  fIntFlowCorrelationsVsMPro[ci]->GetXaxis()->SetTitle("Reference multiplicity (from ESD)");
2481  {
2482  fIntFlowCorrelationsVsMPro[ci]->GetXaxis()->SetTitle("# POIs");
2483  }
2485  // average squared correlations <<2>^2>, <<4>^2>, <<6>^2> and <<8>^2> versus multiplicity for all events:
2486  TString intFlowSquaredCorrelationsVsMProName = "fIntFlowSquaredCorrelationsVsMPro";
2487  intFlowSquaredCorrelationsVsMProName += fAnalysisLabel->Data();
2488  fIntFlowSquaredCorrelationsVsMPro[ci] = new TProfile(Form("%s, %s",intFlowSquaredCorrelationsVsMProName.Data(),squaredCorrelationFlag[ci].Data()),
2489  Form("%s vs multiplicity",squaredCorrelationFlag[ci].Data()),
2491  fIntFlowSquaredCorrelationsVsMPro[ci]->Sumw2();
2492  fIntFlowSquaredCorrelationsVsMPro[ci]->GetYaxis()->SetTitle(squaredCorrelationFlag[ci].Data());
2494  {
2495  fIntFlowSquaredCorrelationsVsMPro[ci]->GetXaxis()->SetTitle("# RPs");
2497  {
2498  fIntFlowSquaredCorrelationsVsMPro[ci]->GetXaxis()->SetTitle("Reference multiplicity (from ESD)");
2500  {
2501  fIntFlowSquaredCorrelationsVsMPro[ci]->GetXaxis()->SetTitle("# POIs");
2502  }
2504  } // end of for(Int_t ci=0;ci<4;ci++) // correlation index
2505  } // end of if(fCalculateCumulantsVsM)
2506  // averaged all correlations for all events (with wrong errors!):
2507  TString intFlowCorrelationsAllProName = "fIntFlowCorrelationsAllPro";
2508  intFlowCorrelationsAllProName += fAnalysisLabel->Data();
2509  fIntFlowCorrelationsAllPro = new TProfile(intFlowCorrelationsAllProName.Data(),"Average all correlations for all events",64,0,64);
2510  fIntFlowCorrelationsAllPro->Sumw2();
2511  fIntFlowCorrelationsAllPro->SetTickLength(-0.01,"Y");
2512  fIntFlowCorrelationsAllPro->SetMarkerStyle(25);
2513  fIntFlowCorrelationsAllPro->SetLabelSize(0.03);
2514  fIntFlowCorrelationsAllPro->SetLabelOffset(0.01,"Y");
2515  // 2-p correlations:
2516  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(1,"#LT#LT2#GT#GT_{n|n}");
2517  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(2,"#LT#LT2#GT#GT_{2n|2n}");
2518  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(3,"#LT#LT2#GT#GT_{3n|3n}");
2519  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(4,"#LT#LT2#GT#GT_{4n|4n}");
2520  // 3-p correlations:
2521  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(6,"#LT#LT3#GT#GT_{2n|n,n}");
2522  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(7,"#LT#LT3#GT#GT_{3n|2n,n}");
2523  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(8,"#LT#LT3#GT#GT_{4n|2n,2n}");
2524  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(9,"#LT#LT3#GT#GT_{4n|3n,n}");
2525  // 4-p correlations:
2526  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(11,"#LT#LT4#GT#GT_{n,n|n,n}");
2527  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(12,"#LT#LT4#GT#GT_{2n,n|2n,n}");
2528  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(13,"#LT#LT4#GT#GT_{2n,2n|2n,2n}");
2529  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(14,"#LT#LT4#GT#GT_{3n|n,n,n}");
2530  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(15,"#LT#LT4#GT#GT_{3n,n|3n,n}");
2531  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(16,"#LT#LT4#GT#GT_{3n,n|2n,2n}");
2532  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(17,"#LT#LT4#GT#GT_{4n|2n,n,n}");
2533  // 5-p correlations:
2534  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(19,"#LT#LT5#GT#GT_{2n,n|n,n,n}");
2535  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(20,"#LT#LT5#GT#GT_{2n,2n|2n,n,n}");
2536  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(21,"#LT#LT5#GT#GT_{3n,n|2n,n,n}");
2537  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(22,"#LT#LT5#GT#GT_{4n|n,n,n,n}");
2538  // 6-p correlations:
2539  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(24,"#LT#LT6#GT#GT_{n,n,n|n,n,n}");
2540  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(25,"#LT#LT6#GT#GT_{2n,n,n|2n,n,n}");
2541  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(26,"#LT#LT6#GT#GT_{2n,2n|n,n,n,n}");
2542  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(27,"#LT#LT6#GT#GT_{3n,n|n,n,n,n}");
2543  // 7-p correlations:
2544  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(29,"#LT#LT7#GT#GT_{2n,n,n|n,n,n,n}");
2545  // 8-p correlations:
2546  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(31,"#LT#LT8#GT#GT_{n,n,n,n|n,n,n,n}");
2547  // EXTRA correlations for v3{5} study:
2548  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(33,"#LT#LT4#GT#GT_{4n,2n|3n,3n}");
2549  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(34,"#LT#LT5#GT#GT_{3n,3n|2n,2n,2n}");
2550  // EXTRA correlations for Teaney-Yan study:
2551  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(35,"#LT#LT2#GT#GT_{5n|5n}");
2552  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(36,"#LT#LT2#GT#GT_{6n|6n}");
2553  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(37,"#LT#LT3#GT#GT_{5n|3n,2n}");
2554  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(38,"#LT#LT3#GT#GT_{5n|4n,1n}");
2555  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(39,"#LT#LT3#GT#GT_{6n|3n,3n}");
2556  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(40,"#LT#LT3#GT#GT_{6n|4n,2n}");
2557  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(41,"#LT#LT3#GT#GT_{6n|5n,1n}");
2558  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(42,"#LT#LT4#GT#GT_{6n|3n,2n,1n}");
2559  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(43,"#LT#LT4#GT#GT_{3n,2n|3n,2n}");
2560  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(44,"#LT#LT4#GT#GT_{4n,1n|3n,2n}");
2561  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(45,"#LT#LT4#GT#GT_{3n,3n|3n,3n}");
2562  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(46,"#LT#LT4#GT#GT_{4n,2n|3n,3n}");
2563  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(47,"#LT#LT4#GT#GT_{5n,1n|3n,3n}");
2564  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(48,"#LT#LT4#GT#GT_{4n,2n|4n,2n}");
2565  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(49,"#LT#LT4#GT#GT_{5n,1n|4n,2n}");
2566  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(50,"#LT#LT4#GT#GT_{5n|3n,1n,1n}");
2567  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(51,"#LT#LT4#GT#GT_{5n|2n,2n,1n}");
2568  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(52,"#LT#LT4#GT#GT_{5n,1n|5n,1n}");
2569  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(53,"#LT#LT5#GT#GT_{3n,3n|3n,2n,1n}");
2570  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(54,"#LT#LT5#GT#GT_{4n,2n|3n,2n,1n}");
2571  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(55,"#LT#LT5#GT#GT_{3n,2n|3n,1n,1n}");
2572  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(56,"#LT#LT5#GT#GT_{3n,2n|2n,2n,1n}");
2573  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(57,"#LT#LT5#GT#GT_{5n,1n|3n,2n,1n}");
2574  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(58,"#LT#LT6#GT#GT_{3n,2n,1n|3n,2n,1n}");
2575  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(59,"#LT#LT4#GT#GT_{6n|4n,1n,1n}");
2576  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(60,"#LT#LT4#GT#GT_{6n|2n,2n,2n}");
2577  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(61,"#LT#LT5#GT#GT_{6n|2n,2n,1n,1n}");
2578  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(62,"#LT#LT5#GT#GT_{4n,1n,1n|3n,3n}");
2579  (fIntFlowCorrelationsAllPro->GetXaxis())->SetBinLabel(63,"#LT#LT6#GT#GT_{3n,3n|2n,2n,1n,1n}");
2581  // average all correlations versus multiplicity (errors via Sumw2 - to be improved):
2583  {
2584  // 2-p correlations vs M:
2585  fIntFlowCorrelationsAllVsMPro[0] = new TProfile("two1n1n","#LT#LT2#GT#GT_{n|n}",fnBinsMult,fMinMult,fMaxMult);
2586  fIntFlowCorrelationsAllVsMPro[1] = new TProfile("two2n2n","#LT#LT2#GT#GT_{2n|2n}",fnBinsMult,fMinMult,fMaxMult);
2587  fIntFlowCorrelationsAllVsMPro[2] = new TProfile("two3n3n","#LT#LT2#GT#GT_{3n|3n}",fnBinsMult,fMinMult,fMaxMult);
2588  fIntFlowCorrelationsAllVsMPro[3] = new TProfile("two4n4n","#LT#LT2#GT#GT_{4n|4n}",fnBinsMult,fMinMult,fMaxMult);
2589  // 3-p correlations vs M:
2590  fIntFlowCorrelationsAllVsMPro[5] = new TProfile("three2n1n1n","#LT#LT3#GT#GT_{2n|n,n}",fnBinsMult,fMinMult,fMaxMult);
2591  fIntFlowCorrelationsAllVsMPro[6] = new TProfile("three3n2n1n","#LT#LT3#GT#GT_{3n|2n,n}",fnBinsMult,fMinMult,fMaxMult);
2592  fIntFlowCorrelationsAllVsMPro[7] = new TProfile("three4n2n2n","#LT#LT3#GT#GT_{4n|2n,2n}",fnBinsMult,fMinMult,fMaxMult);
2593  fIntFlowCorrelationsAllVsMPro[8] = new TProfile("three4n3n1n","#LT#LT3#GT#GT_{4n|3n,n}",fnBinsMult,fMinMult,fMaxMult);
2594  // 4-p correlations vs M:
2595  fIntFlowCorrelationsAllVsMPro[10] = new TProfile("four1n1n1n1n","#LT#LT4#GT#GT_{n,n|n,n}",fnBinsMult,fMinMult,fMaxMult);
2596  fIntFlowCorrelationsAllVsMPro[11] = new TProfile("four2n1n2n1n","#LT#LT4#GT#GT_{2n,n|2n,n}",fnBinsMult,fMinMult,fMaxMult);
2597  fIntFlowCorrelationsAllVsMPro[12] = new TProfile("four2n2n2n2n","#LT#LT4#GT#GT_{2n,2n|2n,2n}",fnBinsMult,fMinMult,fMaxMult);
2598  fIntFlowCorrelationsAllVsMPro[13] = new TProfile("four3n1n1n1n","#LT#LT4#GT#GT_{3n|n,n,n}",fnBinsMult,fMinMult,fMaxMult);
2599  fIntFlowCorrelationsAllVsMPro[14] = new TProfile("four3n1n3n1n","#LT#LT4#GT#GT_{3n,n|3n,n}",fnBinsMult,fMinMult,fMaxMult);
2600  fIntFlowCorrelationsAllVsMPro[15] = new TProfile("four3n1n2n2n","#LT#LT4#GT#GT_{3n,n|2n,2n}",fnBinsMult,fMinMult,fMaxMult);
2601  fIntFlowCorrelationsAllVsMPro[16] = new TProfile("four4n2n1n1n","#LT#LT4#GT#GT_{4n|2n,n,n}",fnBinsMult,fMinMult,fMaxMult);
2602  // 5-p correlations vs M:
2603  fIntFlowCorrelationsAllVsMPro[18] = new TProfile("five2n1n1n1n1n","#LT#LT5#GT#GT_{2n,n|n,n,n}",fnBinsMult,fMinMult,fMaxMult);
2604  fIntFlowCorrelationsAllVsMPro[19] = new TProfile("five2n2n2n1n1n","#LT#LT5#GT#GT_{2n,2n|2n,n,n}",fnBinsMult,fMinMult,fMaxMult);
2605  fIntFlowCorrelationsAllVsMPro[20] = new TProfile("five3n1n2n1n1n","#LT#LT5#GT#GT_{3n,n|2n,n,n}",fnBinsMult,fMinMult,fMaxMult);
2606  fIntFlowCorrelationsAllVsMPro[21] = new TProfile("five4n1n1n1n1n","#LT#LT5#GT#GT_{4n|n,n,n,n}",fnBinsMult,fMinMult,fMaxMult);
2607  // 6-p correlations vs M:
2608  fIntFlowCorrelationsAllVsMPro[23] = new TProfile("six1n1n1n1n1n1n","#LT#LT6#GT#GT_{n,n,n|n,n,n}",fnBinsMult,fMinMult,fMaxMult);
2609  fIntFlowCorrelationsAllVsMPro[24] = new TProfile("six2n1n1n2n1n1n","#LT#LT6#GT#GT_{2n,n,n|2n,n,n}",fnBinsMult,fMinMult,fMaxMult);
2610  fIntFlowCorrelationsAllVsMPro[25] = new TProfile("six2n2n1n1n1n1n","#LT#LT6#GT#GT_{2n,2n|n,n,n,n}",fnBinsMult,fMinMult,fMaxMult);
2611  fIntFlowCorrelationsAllVsMPro[26] = new TProfile("six3n1n1n1n1n1n","#LT#LT6#GT#GT_{3n,n|n,n,n,n}",fnBinsMult,fMinMult,fMaxMult);
2612  // 7-p correlations vs M:
2613  fIntFlowCorrelationsAllVsMPro[28] = new TProfile("seven2n1n1n1n1n1n1n","#LT#LT7#GT#GT_{2n,n,n|n,n,n,n}",fnBinsMult,fMinMult,fMaxMult);
2614  // 8-p correlations vs M:
2615  fIntFlowCorrelationsAllVsMPro[30] = new TProfile("eight1n1n1n1n1n1n1n1n","#LT#LT8#GT#GT_{n,n,n,n|n,n,n,n}",fnBinsMult,fMinMult,fMaxMult);
2616  // EXTRA correlations vs M for v3{5} study (to be improved - put them in a right order somewhere):
2617  fIntFlowCorrelationsAllVsMPro[32] = new TProfile("four4n2n3n3n","#LT#LT4#GT#GT_{4n,2n|3n,3n}",fnBinsMult,fMinMult,fMaxMult);
2618  fIntFlowCorrelationsAllVsMPro[33] = new TProfile("five3n3n2n2n2n","#LT#LT5#GT#GT_{3n,3n|2n,2n,2n}",fnBinsMult,fMinMult,fMaxMult);
2619  // EXTRA correlations vs M for Teaney-Yan study (to be improved - put them in a right order somewhere):
2620  fIntFlowCorrelationsAllVsMPro[34] = new TProfile("two5n5n","#LT#LT2#GT#GT_{5n|5n}",fnBinsMult,fMinMult,fMaxMult);
2621  fIntFlowCorrelationsAllVsMPro[35] = new TProfile("two6n6n","#LT#LT2#GT#GT_{6n|6n}",fnBinsMult,fMinMult,fMaxMult);
2622  fIntFlowCorrelationsAllVsMPro[36] = new TProfile("three5n3n2n","#LT#LT3#GT#GT_{5n|3n,2n}",fnBinsMult,fMinMult,fMaxMult);
2623  fIntFlowCorrelationsAllVsMPro[37] = new TProfile("three5n4n1n","#LT#LT3#GT#GT_{5n|4n,1n}",fnBinsMult,fMinMult,fMaxMult);
2624  fIntFlowCorrelationsAllVsMPro[38] = new TProfile("three6n3n3n","#LT#LT3#GT#GT_{6n|3n,3n}",fnBinsMult,fMinMult,fMaxMult);
2625  fIntFlowCorrelationsAllVsMPro[39] = new TProfile("three6n4n2n","#LT#LT3#GT#GT_{6n|4n,2n}",fnBinsMult,fMinMult,fMaxMult);
2626  fIntFlowCorrelationsAllVsMPro[40] = new TProfile("three6n5n1n","#LT#LT3#GT#GT_{6n|5n,1n}",fnBinsMult,fMinMult,fMaxMult);
2627  fIntFlowCorrelationsAllVsMPro[41] = new TProfile("four6n3n2n1n","#LT#LT4#GT#GT_{6n|3n,2n,1n}",fnBinsMult,fMinMult,fMaxMult);
2628  fIntFlowCorrelationsAllVsMPro[42] = new TProfile("four3n2n3n2n","#LT#LT4#GT#GT_{3n,2n|3n,2n}",fnBinsMult,fMinMult,fMaxMult);
2629  fIntFlowCorrelationsAllVsMPro[43] = new TProfile("four4n1n3n2n","#LT#LT4#GT#GT_{4n,1n|3n,2n}",fnBinsMult,fMinMult,fMaxMult);
2630  fIntFlowCorrelationsAllVsMPro[44] = new TProfile("four3n3n3n3n","#LT#LT4#GT#GT_{3n,3n|3n,3n}",fnBinsMult,fMinMult,fMaxMult);
2631  fIntFlowCorrelationsAllVsMPro[45] = new TProfile("four4n2n3n3n","#LT#LT4#GT#GT_{4n,2n|3n,3n}",fnBinsMult,fMinMult,fMaxMult);
2632  fIntFlowCorrelationsAllVsMPro[46] = new TProfile("four5n1n3n3n","#LT#LT4#GT#GT_{5n,1n|3n,3n}",fnBinsMult,fMinMult,fMaxMult);
2633  fIntFlowCorrelationsAllVsMPro[47] = new TProfile("four4n2n4n2n","#LT#LT4#GT#GT_{4n,2n|4n,2n}",fnBinsMult,fMinMult,fMaxMult);
2634  fIntFlowCorrelationsAllVsMPro[48] = new TProfile("four5n1n4n2n","#LT#LT4#GT#GT_{5n,1n|4n,2n}",fnBinsMult,fMinMult,fMaxMult);
2635  fIntFlowCorrelationsAllVsMPro[49] = new TProfile("four5n3n1n1n","#LT#LT4#GT#GT_{5n|3n,1n,1n}",fnBinsMult,fMinMult,fMaxMult);
2636  fIntFlowCorrelationsAllVsMPro[50] = new TProfile("four5n2n2n1n","#LT#LT4#GT#GT_{5n|2n,2n,1n}",fnBinsMult,fMinMult,fMaxMult);
2637  fIntFlowCorrelationsAllVsMPro[51] = new TProfile("four5n1n5n1n","#LT#LT4#GT#GT_{5n,1n|5n,1n}",fnBinsMult,fMinMult,fMaxMult);
2638  fIntFlowCorrelationsAllVsMPro[52] = new TProfile("five3n3n3n2n1n","#LT#LT5#GT#GT_{3n,3n|3n,2n,1n}",fnBinsMult,fMinMult,fMaxMult);
2639  fIntFlowCorrelationsAllVsMPro[53] = new TProfile("five4n2n3n2n1n","#LT#LT5#GT#GT_{4n,2n|3n,2n,1n}",fnBinsMult,fMinMult,fMaxMult);
2640  fIntFlowCorrelationsAllVsMPro[54] = new TProfile("five3n2n3n1n1n","#LT#LT5#GT#GT_{3n,2n|3n,1n,1n}",fnBinsMult,fMinMult,fMaxMult);
2641  fIntFlowCorrelationsAllVsMPro[55] = new TProfile("five3n2n2n2n1n","#LT#LT5#GT#GT_{3n,2n|2n,2n,1n}",fnBinsMult,fMinMult,fMaxMult);
2642  fIntFlowCorrelationsAllVsMPro[56] = new TProfile("five5n1n3n2n1n","#LT#LT5#GT#GT_{5n,1n|3n,2n,1n}",fnBinsMult,fMinMult,fMaxMult);
2643  fIntFlowCorrelationsAllVsMPro[57] = new TProfile("six3n2n1n3n2n1n","#LT#LT6#GT#GT_{3n,2n,1n|3n,2n,1n}",fnBinsMult,fMinMult,fMaxMult);
2644  fIntFlowCorrelationsAllVsMPro[58] = new TProfile("four6n4n1n1n","#LT#LT4#GT#GT_{6n|4n,1n,1n}",fnBinsMult,fMinMult,fMaxMult);
2645  fIntFlowCorrelationsAllVsMPro[59] = new TProfile("four6n2n2n2n","#LT#LT4#GT#GT_{6n|2n,2n,2n}",fnBinsMult,fMinMult,fMaxMult);
2646  fIntFlowCorrelationsAllVsMPro[60] = new TProfile("five6n2n2n1n1n","#LT#LT5#GT#GT_{6n|2n,2n,1n,1n}",fnBinsMult,fMinMult,fMaxMult);
2647  fIntFlowCorrelationsAllVsMPro[61] = new TProfile("five4n1n1n3n3n","#LT#LT5#GT#GT_{4n,1n,1n|3n,3n}",fnBinsMult,fMinMult,fMaxMult);
2648  fIntFlowCorrelationsAllVsMPro[62] = new TProfile("six3n3n2n2n1n1n","#LT#LT6#GT#GT_{3n,3n|2n,2n,1n,1n}",fnBinsMult,fMinMult,fMaxMult);
2649  for(Int_t n=0;n<63;n++)
2650  {
2652  {
2653  fIntFlowCorrelationsAllVsMPro[n]->Sumw2();
2655  {
2656  fIntFlowCorrelationsAllVsMPro[n]->GetXaxis()->SetTitle("# RPs");
2658  {
2659  fIntFlowCorrelationsAllVsMPro[n]->GetXaxis()->SetTitle("Reference multiplicity (from ESD)");
2661  {
2662  fIntFlowCorrelationsAllVsMPro[n]->GetXaxis()->SetTitle("# POIs");
2663  }
2665  } // end of if(fIntFlowCorrelationsAllVsMPro[n])
2666  } // end of for(Int_t n=0;n<63;n++)
2667  } // end of if(fCalculateAllCorrelationsVsM)
2668  // when particle weights are used some extra correlations appear:
2670  {
2671  TString intFlowExtraCorrelationsProName = "fIntFlowExtraCorrelationsPro";
2672  intFlowExtraCorrelationsProName += fAnalysisLabel->Data();
2673  fIntFlowExtraCorrelationsPro = new TProfile(intFlowExtraCorrelationsProName.Data(),"Average extra correlations for all events",100,0,100,"s");
2674  fIntFlowExtraCorrelationsPro->SetTickLength(-0.01,"Y");
2675  fIntFlowExtraCorrelationsPro->SetMarkerStyle(25);
2676  fIntFlowExtraCorrelationsPro->SetLabelSize(0.03);
2677  fIntFlowExtraCorrelationsPro->SetLabelOffset(0.01,"Y");
2678  // extra 2-p correlations:
2679  (fIntFlowExtraCorrelationsPro->GetXaxis())->SetBinLabel(1,"<<w1^3 w2 cos(n*(phi1-phi2))>>");
2680  (fIntFlowExtraCorrelationsPro->GetXaxis())->SetBinLabel(2,"<<w1 w2 w3^2 cos(n*(phi1-phi2))>>");
2682  } // end of if(fUsePhiWeights||fUsePtWeights||fUseEtaWeights||fUseTrackWeights)
2683  // average product of correlations <2>, <4>, <6> and <8>:
2684  TString productFlag[6] = {"#LT#LT2#GT#LT4#GT#GT","#LT#LT2#GT#LT6#GT#GT","#LT#LT2#GT#LT8#GT#GT",
2685  "#LT#LT4#GT#LT6#GT#GT","#LT#LT4#GT#LT8#GT#GT","#LT#LT6#GT#LT8#GT#GT"};
2686  TString intFlowProductOfCorrelationsProName = "fIntFlowProductOfCorrelationsPro";
2687  intFlowProductOfCorrelationsProName += fAnalysisLabel->Data();
2688  fIntFlowProductOfCorrelationsPro = new TProfile(intFlowProductOfCorrelationsProName.Data(),"Average products of correlations",6,0,6);
2689  fIntFlowProductOfCorrelationsPro->SetTickLength(-0.01,"Y");
2690  fIntFlowProductOfCorrelationsPro->SetMarkerStyle(25);
2691  fIntFlowProductOfCorrelationsPro->SetLabelSize(0.05);
2692  fIntFlowProductOfCorrelationsPro->SetLabelOffset(0.01,"Y");
2693  for(Int_t b=0;b<6;b++)
2694  {
2695  (fIntFlowProductOfCorrelationsPro->GetXaxis())->SetBinLabel(b+1,productFlag[b].Data());
2696  }
2698  // average product of correlations <2>, <4>, <6> and <8> versus multiplicity
2699  // [0=<<2><4>>,1=<<2><6>>,2=<<2><8>>,3=<<4><6>>,4=<<4><8>>,5=<<6><8>>]
2701  {
2702  TString intFlowProductOfCorrelationsVsMProName = "fIntFlowProductOfCorrelationsVsMPro";
2703  intFlowProductOfCorrelationsVsMProName += fAnalysisLabel->Data();
2704  for(Int_t pi=0;pi<6;pi++)
2705  {
2706  fIntFlowProductOfCorrelationsVsMPro[pi] = new TProfile(Form("%s, %s",intFlowProductOfCorrelationsVsMProName.Data(),productFlag[pi].Data()),
2707  Form("%s versus multiplicity",productFlag[pi].Data()),
2710  {
2711  fIntFlowProductOfCorrelationsVsMPro[pi]->GetXaxis()->SetTitle("# RPs");
2713  {
2714  fIntFlowProductOfCorrelationsVsMPro[pi]->GetXaxis()->SetTitle("Reference multiplicity (from ESD)");
2716  {
2717  fIntFlowProductOfCorrelationsVsMPro[pi]->GetXaxis()->SetTitle("# POIs");
2718  }
2720  } // end of for(Int_t pi=0;pi<6;pi++)
2721  } // end of if(fCalculateCumulantsVsM)
2722  // average product of correction terms for NUA:
2723  TString intFlowProductOfCorrectionTermsForNUAProName = "fIntFlowProductOfCorrectionTermsForNUAPro";
2724  intFlowProductOfCorrectionTermsForNUAProName += fAnalysisLabel->Data();
2725  fIntFlowProductOfCorrectionTermsForNUAPro = new TProfile(intFlowProductOfCorrectionTermsForNUAProName.Data(),"Average products of correction terms for NUA",27,0,27);
2726  fIntFlowProductOfCorrectionTermsForNUAPro->SetTickLength(-0.01,"Y");
2727  fIntFlowProductOfCorrectionTermsForNUAPro->SetMarkerStyle(25);
2728  fIntFlowProductOfCorrectionTermsForNUAPro->SetLabelSize(0.03);
2729  fIntFlowProductOfCorrectionTermsForNUAPro->SetLabelOffset(0.01,"Y");
2730  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(1,"<<2><cos(#phi)>>");
2731  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(2,"<<2><sin(#phi)>>");
2732  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(3,"<<cos(#phi)><sin(#phi)>>");
2733  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(4,"Cov(<2>,<cos(#phi_{1}+#phi_{2})>)");
2734  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(5,"Cov(<2>,<sin(#phi_{1}+#phi_{2})>)");
2735  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(6,"Cov(<2>,<cos(#phi_{1}-#phi_{2}-#phi_{3})>)");
2736  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(7,"Cov(<2>,<sin(#phi_{1}-#phi_{2}-#phi_{3})>)");
2737  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(8,"Cov(<4>,<cos(#phi)>)");
2738  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(9,"Cov(<4>,<sin(#phi)>)");
2739  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(10,"Cov(<4>,<cos(#phi_{1}+#phi_{2})>)");
2740  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(11,"Cov(<4>,<sin(#phi_{1}+#phi_{2})>)");
2741  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(12,"Cov(<4>,<cos(#phi_{1}-#phi_{2}-#phi_{3})>>)");
2742  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(13,"Cov(<4>,<sin(#phi_{1}-#phi_{2}-#phi_{3})>>)");
2743  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(14,"Cov(<cos(#phi)>,<cos(#phi_{1}+#phi_{2})>)");
2744  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(15,"Cov(<cos(#phi)>,<sin(#phi_{1}+#phi_{2})>)");
2745  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(16,"Cov(<cos(#phi)>,<cos(#phi_{1}-#phi_{2}-#phi_{3})>)");
2746  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(17,"Cov(<cos(#phi)>,<sin(#phi_{1}-#phi_{2}-#phi_{3})>)");
2747  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(18,"Cov(<sin(#phi)>,<cos(#phi_{1}+#phi_{2})>)");
2748  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(19,"Cov(<sin(#phi)>,<sin(#phi_{1}+#phi_{2})>)");
2749  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(20,"Cov(<sin(#phi)>,<cos(#phi_{1}-#phi_{2}-#phi_{3})>)");
2750  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(21,"Cov(<sin(#phi)>,<sin(#phi_{1}-#phi_{2}-#phi_{3})>)");
2751  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(22,"Cov(<cos(#phi_{1}+#phi_{2})>,<sin(#phi_{1}+#phi_{2})>)");
2752  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(23,"Cov(<cos(#phi_{1}+#phi_{2})>,<cos(#phi_{1}-#phi_{2}-#phi_{3})>)");
2753  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(24,"Cov(<cos(#phi_{1}+#phi_{2})>,<sin(#phi_{1}-#phi_{2}-#phi_{3})>)");
2754  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(25,"Cov(<sin(#phi_{1}+#phi_{2})>,<cos(#phi_{1}-#phi_{2}-#phi_{3})>)");
2755  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(26,"Cov(<sin(#phi_{1}+#phi_{2})>,<sin(#phi_{1}-#phi_{2}-#phi_{3})>)");
2756  (fIntFlowProductOfCorrectionTermsForNUAPro->GetXaxis())->SetBinLabel(27,"Cov(<cos(#phi_{1}-#phi_{2}-#phi_{3}>,<sin(#phi_{1}-#phi_{2}-#phi_{3}>)");
2758  // average correction terms for non-uniform acceptance (with wrong errors!):
2759  for(Int_t sc=0;sc<2;sc++) // sin or cos terms
2760  {
2761  TString intFlowCorrectionTermsForNUAProName = "fIntFlowCorrectionTermsForNUAPro";
2762  intFlowCorrectionTermsForNUAProName += fAnalysisLabel->Data();
2763  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");
2764  fIntFlowCorrectionTermsForNUAPro[sc]->SetTickLength(-0.01,"Y");
2765  fIntFlowCorrectionTermsForNUAPro[sc]->SetMarkerStyle(25);
2766  fIntFlowCorrectionTermsForNUAPro[sc]->SetLabelSize(0.05);
2767  fIntFlowCorrectionTermsForNUAPro[sc]->SetLabelOffset(0.01,"Y");
2768  (fIntFlowCorrectionTermsForNUAPro[sc]->GetXaxis())->SetBinLabel(1,Form("#LT#LT%s(n(#phi_{1}))#GT#GT",sinCosFlag[sc].Data()));
2769  (fIntFlowCorrectionTermsForNUAPro[sc]->GetXaxis())->SetBinLabel(2,Form("#LT#LT%s(n(#phi_{1}+#phi_{2}))#GT#GT",sinCosFlag[sc].Data()));
2770  (fIntFlowCorrectionTermsForNUAPro[sc]->GetXaxis())->SetBinLabel(3,Form("#LT#LT%s(n(#phi_{1}-#phi_{2}-#phi_{3}))#GT#GT",sinCosFlag[sc].Data()));
2771  (fIntFlowCorrectionTermsForNUAPro[sc]->GetXaxis())->SetBinLabel(4,Form("#LT#LT%s(n(2#phi_{1}-#phi_{2}))#GT#GT",sinCosFlag[sc].Data()));
2773  // versus multiplicity:
2775  {
2776  TString correctionTermFlag[4] = {"(n(phi1))","(n(phi1+phi2))","(n(phi1-phi2-phi3))","(n(2phi1-phi2))"}; // to be improved - hardwired 4
2777  for(Int_t ci=0;ci<4;ci++) // correction term index (to be improved - hardwired 4)
2778  {
2779  TString intFlowCorrectionTermsForNUAVsMProName = "fIntFlowCorrectionTermsForNUAVsMPro";
2780  intFlowCorrectionTermsForNUAVsMProName += fAnalysisLabel->Data();
2781  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");
2783  }
2784  } // end of if(fCalculateCumulantsVsM)
2785  } // end of for(Int_t sc=0;sc<2;sc++)
2786 
2787  // d) Book histograms holding the final results:
2788  // average correlations <<2>>, <<4>>, <<6>> and <<8>> for all events (with correct errors!):
2789  TString intFlowCorrelationsHistName = "fIntFlowCorrelationsHist";
2790  intFlowCorrelationsHistName += fAnalysisLabel->Data();
2791  fIntFlowCorrelationsHist = new TH1D(intFlowCorrelationsHistName.Data(),"Average correlations for all events",4,0,4);
2792  fIntFlowCorrelationsHist->SetTickLength(-0.01,"Y");
2793  fIntFlowCorrelationsHist->SetMarkerStyle(25);
2794  fIntFlowCorrelationsHist->SetLabelSize(0.06);
2795  fIntFlowCorrelationsHist->SetLabelOffset(0.01,"Y");
2796  (fIntFlowCorrelationsHist->GetXaxis())->SetBinLabel(1,"#LT#LT2#GT#GT");
2797  (fIntFlowCorrelationsHist->GetXaxis())->SetBinLabel(2,"#LT#LT4#GT#GT");
2798  (fIntFlowCorrelationsHist->GetXaxis())->SetBinLabel(3,"#LT#LT6#GT#GT");
2799  (fIntFlowCorrelationsHist->GetXaxis())->SetBinLabel(4,"#LT#LT8#GT#GT");
2801  // average correlations <<2>>, <<4>>, <<6>> and <<8>> for all events (with correct errors!) vs M:
2803  {
2804  for(Int_t ci=0;ci<4;ci++) // correlation index
2805  {
2806  TString intFlowCorrelationsVsMHistName = "fIntFlowCorrelationsVsMHist";
2807  intFlowCorrelationsVsMHistName += fAnalysisLabel->Data();
2808  fIntFlowCorrelationsVsMHist[ci] = new TH1D(Form("%s, %s",intFlowCorrelationsVsMHistName.Data(),correlationFlag[ci].Data()),
2809  Form("%s vs multiplicity",correlationFlag[ci].Data()),
2811  fIntFlowCorrelationsVsMHist[ci]->GetYaxis()->SetTitle(correlationFlag[ci].Data());
2813  {
2814  fIntFlowCorrelationsVsMHist[ci]->GetXaxis()->SetTitle("# RPs");
2816  {
2817  fIntFlowCorrelationsVsMHist[ci]->GetXaxis()->SetTitle("Reference multiplicity (from ESD)");
2819  {
2820  fIntFlowCorrelationsVsMHist[ci]->GetXaxis()->SetTitle("# POIs");
2821  }
2823  } // end of for(Int_t ci=0;ci<4;ci++) // correlation index
2824  } // end of if(fCalculateCumulantsVsM)
2825  // average all correlations for all events (with correct errors!):
2826  TString intFlowCorrelationsAllHistName = "fIntFlowCorrelationsAllHist";
2827  intFlowCorrelationsAllHistName += fAnalysisLabel->Data();
2828  fIntFlowCorrelationsAllHist = new TH1D(intFlowCorrelationsAllHistName.Data(),"Average correlations for all events",34,0,34);
2829  fIntFlowCorrelationsAllHist->SetTickLength(-0.01,"Y");
2830  fIntFlowCorrelationsAllHist->SetMarkerStyle(25);
2831  fIntFlowCorrelationsAllHist->SetLabelSize(0.03);
2832  fIntFlowCorrelationsAllHist->SetLabelOffset(0.01,"Y");
2833  // 2-p correlations:
2834  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(1,"<<2>>_{n|n}");
2835  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(2,"<<2>>_{2n|2n}");
2836  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(3,"<<2>>_{3n|3n}");
2837  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(4,"<<2>>_{4n|4n}");
2838  // 3-p correlations:
2839  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(6,"<<3>>_{2n|n,n}");
2840  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(7,"<<3>>_{3n|2n,n}");
2841  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(8,"<<3>>_{4n|2n,2n}");
2842  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(9,"<<3>>_{4n|3n,n}");
2843  // 4-p correlations:
2844  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(11,"<<4>>_{n,n|n,n}");
2845  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(12,"<<4>>_{2n,n|2n,n}");
2846  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(13,"<<4>>_{2n,2n|2n,2n}");
2847  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(14,"<<4>>_{3n|n,n,n}");
2848  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(15,"<<4>>_{3n,n|3n,n}");
2849  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(16,"<<4>>_{3n,n|2n,2n}");
2850  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(17,"<<4>>_{4n|2n,n,n}");
2851  // 5-p correlations:
2852  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(19,"<<5>>_{2n|n,n,n,n}");
2853  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(20,"<<5>>_{2n,2n|2n,n,n}");
2854  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(21,"<<5>>_{3n,n|2n,n,n}");
2855  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(22,"<<5>>_{4n|n,n,n,n}");
2856  // 6-p correlations:
2857  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(24,"<<6>>_{n,n,n|n,n,n}");
2858  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(25,"<<6>>_{2n,n,n|2n,n,n}");
2859  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(26,"<<6>>_{2n,2n|n,n,n,n}");
2860  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(27,"<<6>>_{3n,n|n,n,n,n}");
2861  // 7-p correlations:
2862  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(29,"<<7>>_{2n,n,n|n,n,n,n}");
2863  // 8-p correlations:
2864  (fIntFlowCorrelationsAllHist->GetXaxis())->SetBinLabel(31,"<<8>>_{n,n,n,n|n,n,n,n}");
2866  // average correction terms for non-uniform acceptance (with correct errors!):
2867  for(Int_t sc=0;sc<2;sc++) // sin or cos terms
2868  {
2869  TString intFlowCorrectionTermsForNUAHistName = "fIntFlowCorrectionTermsForNUAHist";
2870  intFlowCorrectionTermsForNUAHistName += fAnalysisLabel->Data();
2871  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);
2872  fIntFlowCorrectionTermsForNUAHist[sc]->SetTickLength(-0.01,"Y");
2873  fIntFlowCorrectionTermsForNUAHist[sc]->SetMarkerStyle(25);
2874  fIntFlowCorrectionTermsForNUAHist[sc]->SetLabelSize(0.05);
2875  fIntFlowCorrectionTermsForNUAHist[sc]->SetLabelOffset(0.01,"Y");
2876  (fIntFlowCorrectionTermsForNUAHist[sc]->GetXaxis())->SetBinLabel(1,Form("#LT#LT%s(n(#phi_{1}))#GT#GT",sinCosFlag[sc].Data()));
2877  (fIntFlowCorrectionTermsForNUAHist[sc]->GetXaxis())->SetBinLabel(2,Form("#LT#LT%s(n(#phi_{1}+#phi_{2}))#GT#GT",sinCosFlag[sc].Data()));
2878  (fIntFlowCorrectionTermsForNUAHist[sc]->GetXaxis())->SetBinLabel(3,Form("#LT#LT%s(n(#phi_{1}-#phi_{2}-#phi_{3}))#GT#GT",sinCosFlag[sc].Data()));
2879  (fIntFlowCorrectionTermsForNUAHist[sc]->GetXaxis())->SetBinLabel(4,Form("#LT#LT%s(n(2#phi_{1}-#phi_{2}))#GT#GT",sinCosFlag[sc].Data()));
2881  } // end of for(Int_t sc=0;sc<2;sc++)
2882  // covariances (multiplied with weight dependent prefactor):
2883  TString intFlowCovariancesName = "fIntFlowCovariances";
2884  intFlowCovariancesName += fAnalysisLabel->Data();
2885  fIntFlowCovariances = new TH1D(intFlowCovariancesName.Data(),"Covariances (multiplied with weight dependent prefactor)",6,0,6);
2886  fIntFlowCovariances->SetLabelSize(0.04);
2887  fIntFlowCovariances->SetMarkerStyle(25);
2888  (fIntFlowCovariances->GetXaxis())->SetBinLabel(1,"Cov(#LT2#GT,#LT4#GT)");
2889  (fIntFlowCovariances->GetXaxis())->SetBinLabel(2,"Cov(#LT2#GT,#LT6#GT)");
2890  (fIntFlowCovariances->GetXaxis())->SetBinLabel(3,"Cov(#LT2#GT,#LT8#GT)");
2891  (fIntFlowCovariances->GetXaxis())->SetBinLabel(4,"Cov(#LT4#GT,#LT6#GT)");
2892  (fIntFlowCovariances->GetXaxis())->SetBinLabel(5,"Cov(#LT4#GT,#LT8#GT)");
2893  (fIntFlowCovariances->GetXaxis())->SetBinLabel(6,"Cov(#LT6#GT,#LT8#GT)");
2895  // sum of linear and quadratic event weights for <2>, <4>, <6> and <8>:
2896  TString intFlowSumOfEventWeightsName = "fIntFlowSumOfEventWeights";
2897  intFlowSumOfEventWeightsName += fAnalysisLabel->Data();
2898  for(Int_t power=0;power<2;power++)
2899  {
2900  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);
2901  fIntFlowSumOfEventWeights[power]->SetLabelSize(0.04);
2902  fIntFlowSumOfEventWeights[power]->SetMarkerStyle(25);
2903  if(power == 0)
2904  {
2905  (fIntFlowSumOfEventWeights[power]->GetXaxis())->SetBinLabel(1,"#sum_{i=1}^{N} w_{#LT2#GT}");
2906  (fIntFlowSumOfEventWeights[power]->GetXaxis())->SetBinLabel(2,"#sum_{i=1}^{N} w_{#LT4#GT}");
2907  (fIntFlowSumOfEventWeights[power]->GetXaxis())->SetBinLabel(3,"#sum_{i=1}^{N} w_{#LT6#GT}");
2908  (fIntFlowSumOfEventWeights[power]->GetXaxis())->SetBinLabel(4,"#sum_{i=1}^{N} w_{#LT8#GT}");
2909  } else if (power == 1)
2910  {
2911  (fIntFlowSumOfEventWeights[power]->GetXaxis())->SetBinLabel(1,"#sum_{i=1}^{N} w_{#LT2#GT}^{2}");
2912  (fIntFlowSumOfEventWeights[power]->GetXaxis())->SetBinLabel(2,"#sum_{i=1}^{N} w_{#LT4#GT}^{2}");
2913  (fIntFlowSumOfEventWeights[power]->GetXaxis())->SetBinLabel(3,"#sum_{i=1}^{N} w_{#LT6#GT}^{2}");
2914  (fIntFlowSumOfEventWeights[power]->GetXaxis())->SetBinLabel(4,"#sum_{i=1}^{N} w_{#LT8#GT}^{2}");
2915  }
2917  }
2918  // sum of products of event weights for correlations <2>, <4>, <6> and <8>:
2919  TString intFlowSumOfProductOfEventWeightsName = "fIntFlowSumOfProductOfEventWeights";
2920  intFlowSumOfProductOfEventWeightsName += fAnalysisLabel->Data();
2921  fIntFlowSumOfProductOfEventWeights = new TH1D(intFlowSumOfProductOfEventWeightsName.Data(),"Sum of product of event weights for correlations",6,0,6);
2922  fIntFlowSumOfProductOfEventWeights->SetLabelSize(0.04);
2923  fIntFlowSumOfProductOfEventWeights->SetMarkerStyle(25);
2924  (fIntFlowSumOfProductOfEventWeights->GetXaxis())->SetBinLabel(1,"#sum_{i=1}^{N} w_{#LT2#GT} w_{#LT4#GT}");
2925  (fIntFlowSumOfProductOfEventWeights->GetXaxis())->SetBinLabel(2,"#sum_{i=1}^{N} w_{#LT2#GT} w_{#LT6#GT}");
2926  (fIntFlowSumOfProductOfEventWeights->GetXaxis())->SetBinLabel(3,"#sum_{i=1}^{N} w_{#LT2#GT} w_{#LT8#GT}");
2927  (fIntFlowSumOfProductOfEventWeights->GetXaxis())->SetBinLabel(4,"#sum_{i=1}^{N} w_{#LT4#GT} w_{#LT6#GT}");
2928  (fIntFlowSumOfProductOfEventWeights->GetXaxis())->SetBinLabel(5,"#sum_{i=1}^{N} w_{#LT4#GT} w_{#LT8#GT}");
2929  (fIntFlowSumOfProductOfEventWeights->GetXaxis())->SetBinLabel(6,"#sum_{i=1}^{N} w_{#LT6#GT} w_{#LT8#GT}");
2931  // final result for covariances of correlations (multiplied with weight dependent prefactor) versus M
2932  // [0=Cov(2,4),1=Cov(2,6),2=Cov(2,8),3=Cov(4,6),4=Cov(4,8),5=Cov(6,8)]:
2934  {
2935  TString intFlowCovariancesVsMName = "fIntFlowCovariancesVsM";
2936  intFlowCovariancesVsMName += fAnalysisLabel->Data();
2937  TString covarianceFlag[6] = {"Cov(<2>,<4>)","Cov(<2>,<6>)","Cov(<2>,<8>)","Cov(<4>,<6>)","Cov(<4>,<8>)","Cov(<6>,<8>)"};
2938  for(Int_t ci=0;ci<6;ci++)
2939  {
2940  fIntFlowCovariancesVsM[ci] = new TH1D(Form("%s, %s",intFlowCovariancesVsMName.Data(),covarianceFlag[ci].Data()),
2941  Form("%s vs multiplicity",covarianceFlag[ci].Data()),
2943  fIntFlowCovariancesVsM[ci]->GetYaxis()->SetTitle(covarianceFlag[ci].Data());
2945  {
2946  fIntFlowCovariancesVsM[ci]->GetXaxis()->SetTitle("# RPs");
2948  {
2949  fIntFlowCovariancesVsM[ci]->GetXaxis()->SetTitle("Reference multiplicity (from ESD)");
2951  {
2952  fIntFlowCovariancesVsM[ci]->GetXaxis()->SetTitle("# POIs");
2953  }
2955  }
2956  } // end of if(fCalculateCumulantsVsM)
2957  // sum of linear and quadratic event weights for <2>, <4>, <6> and <8> versus multiplicity
2958  // [0=sum{w_{<2>}},1=sum{w_{<4>}},2=sum{w_{<6>}},3=sum{w_{<8>}}][0=linear 1,1=quadratic]:
2960  {
2961  TString intFlowSumOfEventWeightsVsMName = "fIntFlowSumOfEventWeightsVsM";
2962  intFlowSumOfEventWeightsVsMName += fAnalysisLabel->Data();
2963  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>}"},
2964  {"#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}"}};
2965  for(Int_t si=0;si<4;si++)
2966  {
2967  for(Int_t power=0;power<2;power++)
2968  {
2969  fIntFlowSumOfEventWeightsVsM[si][power] = new TH1D(Form("%s, %s",intFlowSumOfEventWeightsVsMName.Data(),sumFlag[power][si].Data()),
2970  Form("%s vs multiplicity",sumFlag[power][si].Data()),
2972  fIntFlowSumOfEventWeightsVsM[si][power]->GetYaxis()->SetTitle(sumFlag[power][si].Data());
2974  {
2975  fIntFlowSumOfEventWeightsVsM[si][power]->GetXaxis()->SetTitle("# RPs");
2977  {
2978  fIntFlowSumOfEventWeightsVsM[si][power]->GetXaxis()->SetTitle("Reference multiplicity (from ESD)");
2980  {
2981  fIntFlowSumOfEventWeightsVsM[si][power]->GetXaxis()->SetTitle("# POIs");
2982  }
2984  } // end of for(Int_t power=0;power<2;power++)
2985  } // end of for(Int_t si=0;si<4;si++)
2986  } // end of if(fCalculateCumulantsVsM)
2987  // sum of products of event weights for correlations <2>, <4>, <6> and <8> vs M
2988  // [0=sum{w_{<2>}w_{<4>}},1=sum{w_{<2>}w_{<6>}},2=sum{w_{<2>}w_{<8>}},
2989  // 3=sum{w_{<4>}w_{<6>}},4=sum{w_{<4>}w_{<8>}},5=sum{w_{<6>}w_{<8>}}]:
2991  {
2992  TString intFlowSumOfProductOfEventWeightsVsMName = "fIntFlowSumOfProductOfEventWeightsVsM";
2993  intFlowSumOfProductOfEventWeightsVsMName += fAnalysisLabel->Data();
2994  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>}",
2995  "#sum_{i=1}^{N} w_{<4>} w_{<6>}","#sum_{i=1}^{N} w_{<4>} w_{<8>}","#sum_{i=1}^{N} w_{<6>} w_{<8>}"};
2996  for(Int_t pi=0;pi<6;pi++)
2997  {
2998  fIntFlowSumOfProductOfEventWeightsVsM[pi] = new TH1D(Form("%s, %s",intFlowSumOfProductOfEventWeightsVsMName.Data(),sopowFlag[pi].Data()),
2999  Form("%s versus multiplicity",sopowFlag[pi].Data()),
3002  {
3003  fIntFlowSumOfProductOfEventWeightsVsM[pi]->GetXaxis()->SetTitle("# RPs");
3005  {
3006  fIntFlowSumOfProductOfEventWeightsVsM[pi]->GetXaxis()->SetTitle("Reference multiplicity (from ESD)");
3008  {
3009  fIntFlowSumOfProductOfEventWeightsVsM[pi]->GetXaxis()->SetTitle("# POIs");
3010  }
3011  fIntFlowSumOfProductOfEventWeightsVsM[pi]->GetYaxis()->SetTitle(sopowFlag[pi].Data());
3013  } // end of for(Int_t pi=0;pi<6;pi++)
3014  } // end of if(fCalculateCumulantsVsM)
3015  // covariances of NUA terms (multiplied with weight dependent prefactor):
3016  TString intFlowCovariancesNUAName = "fIntFlowCovariancesNUA";
3017  intFlowCovariancesNUAName += fAnalysisLabel->Data();
3018  fIntFlowCovariancesNUA = new TH1D(intFlowCovariancesNUAName.Data(),"Covariances for NUA (multiplied with weight dependent prefactor)",27,0,27);
3019  fIntFlowCovariancesNUA->SetLabelSize(0.04);
3020  fIntFlowCovariancesNUA->SetMarkerStyle(25);
3021  fIntFlowCovariancesNUA->GetXaxis()->SetLabelSize(0.02);
3022  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(1,"Cov(<2>,<cos(#phi)>");
3023  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(2,"Cov(<2>,<sin(#phi)>)");
3024  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(3,"Cov(<cos(#phi)>,<sin(#phi)>)");
3025  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(4,"Cov(<2>,<cos(#phi_{1}+#phi_{2})>)");
3026  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(5,"Cov(<2>,<sin(#phi_{1}+#phi_{2})>)");
3027  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(6,"Cov(<2>,<cos(#phi_{1}-#phi_{2}-#phi_{3})>)");
3028  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(7,"Cov(<2>,<sin(#phi_{1}-#phi_{2}-#phi_{3})>)");
3029  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(8,"Cov(<4>,<cos(#phi)>)");
3030  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(9,"Cov(<4>,<sin(#phi)>)");
3031  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(10,"Cov(<4>,<cos(#phi_{1}+#phi_{2})>)");
3032  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(11,"Cov(<4>,<sin(#phi_{1}+#phi_{2})>)");
3033  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(12,"Cov(<4>,<cos(#phi_{1}-#phi_{2}-#phi_{3})>>)");
3034  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(13,"Cov(<4>,<sin(#phi_{1}-#phi_{2}-#phi_{3})>>)");
3035  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(14,"Cov(<cos(#phi)>,<cos(#phi_{1}+#phi_{2})>)");
3036  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(15,"Cov(<cos(#phi)>,<sin(#phi_{1}+#phi_{2})>)");
3037  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(16,"Cov(<cos(#phi)>,<cos(#phi_{1}-#phi_{2}-#phi_{3})>)");
3038  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(17,"Cov(<cos(#phi)>,<sin(#phi_{1}-#phi_{2}-#phi_{3})>)");
3039  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(18,"Cov(<sin(#phi)>,<cos(#phi_{1}+#phi_{2})>)");
3040  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(19,"Cov(<sin(#phi)>,<sin(#phi_{1}+#phi_{2})>)");
3041  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(20,"Cov(<sin(#phi)>,<cos(#phi_{1}-#phi_{2}-#phi_{3})>)");
3042  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(21,"Cov(<sin(#phi)>,<sin(#phi_{1}-#phi_{2}-#phi_{3})>)");
3043  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(22,"Cov(<cos(#phi_{1}+#phi_{2})>,<sin(#phi_{1}+#phi_{2})>)");
3044  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(23,"Cov(<cos(#phi_{1}+#phi_{2})>,<cos(#phi_{1}-#phi_{2}-#phi_{3})>)");
3045  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(24,"Cov(<cos(#phi_{1}+#phi_{2})>,<sin(#phi_{1}-#phi_{2}-#phi_{3})>)");
3046  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(25,"Cov(<sin(#phi_{1}+#phi_{2})>,<cos(#phi_{1}-#phi_{2}-#phi_{3})>)");
3047  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(26,"Cov(<sin(#phi_{1}+#phi_{2})>,<sin(#phi_{1}-#phi_{2}-#phi_{3})>)");
3048  (fIntFlowCovariancesNUA->GetXaxis())->SetBinLabel(27,"Cov(<cos(#phi_{1}-#phi_{2}-#phi_{3}>,<sin(#phi_{1}-#phi_{2}-#phi_{3}>)");
3050  // sum of linear and quadratic event weights for NUA terms:
3051  TString intFlowSumOfEventWeightsNUAName = "fIntFlowSumOfEventWeightsNUA";
3052  intFlowSumOfEventWeightsNUAName += fAnalysisLabel->Data();
3053  for(Int_t sc=0;sc<2;sc++)
3054  {
3055  for(Int_t power=0;power<2;power++)
3056  {
3057  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
3058  fIntFlowSumOfEventWeightsNUA[sc][power]->SetLabelSize(0.05);
3059  fIntFlowSumOfEventWeightsNUA[sc][power]->SetMarkerStyle(25);
3060  if(power == 0)
3061  {
3062  (fIntFlowSumOfEventWeightsNUA[sc][power]->GetXaxis())->SetBinLabel(1,Form("#sum_{i=1}^{N} w_{<%s(#phi)>}",sinCosFlag[sc].Data()));
3063  (fIntFlowSumOfEventWeightsNUA[sc][power]->GetXaxis())->SetBinLabel(2,Form("#sum_{i=1}^{N} w_{<%s(#phi_{1}+#phi_{2})>}",sinCosFlag[sc].Data()));
3064  (fIntFlowSumOfEventWeightsNUA[sc][power]->GetXaxis())->SetBinLabel(3,Form("#sum_{i=1}^{N} w_{<%s(#phi_{1}-#phi_{2}-#phi_{3})>}",sinCosFlag[sc].Data()));
3065  (fIntFlowSumOfEventWeightsNUA[sc][power]->GetXaxis())->SetBinLabel(4,Form("#sum_{i=1}^{N} w_{<%s(2#phi_{1}-#phi_{2})>}",sinCosFlag[sc].Data()));
3066  } else if(power == 1)
3067  {
3068  (fIntFlowSumOfEventWeightsNUA[sc][power]->GetXaxis())->SetBinLabel(1,Form("#sum_{i=1}^{N} w_{<%s(#phi)>}^{2}",sinCosFlag[sc].Data()));
3069  (fIntFlowSumOfEventWeightsNUA[sc][power]->GetXaxis())->SetBinLabel(2,Form("#sum_{i=1}^{N} w_{<%s(#phi_{1}+#phi_{2})>}^{2}",sinCosFlag[sc].Data()));
3070  (fIntFlowSumOfEventWeightsNUA[sc][power]->GetXaxis())->SetBinLabel(3,Form("#sum_{i=1}^{N} w_{<%s(#phi_{1}-#phi_{2}-#phi_{3})>}^{2}",sinCosFlag[sc].Data()));
3071  (fIntFlowSumOfEventWeightsNUA[sc][power]->GetXaxis())->SetBinLabel(4,Form("#sum_{i=1}^{N} w_{<%s(2#phi_{1}-#phi_{2})>}^{2}",sinCosFlag[sc].Data()));
3072  }
3074  }
3075  }
3076  // sum of products of event weights for NUA terms:
3077  TString intFlowSumOfProductOfEventWeightsNUAName = "fIntFlowSumOfProductOfEventWeightsNUA";
3078  intFlowSumOfProductOfEventWeightsNUAName += fAnalysisLabel->Data();
3079  fIntFlowSumOfProductOfEventWeightsNUA = new TH1D(intFlowSumOfProductOfEventWeightsNUAName.Data(),"Sum of product of event weights for NUA terms",27,0,27);
3080  fIntFlowSumOfProductOfEventWeightsNUA->SetLabelSize(0.02);
3081  fIntFlowSumOfProductOfEventWeightsNUA->SetMarkerStyle(25);
3082  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(1,"#sum_{i=1}^{N} w_{#LT2#GT} w_{#LTcos(#phi)#GT}");
3083  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(2,"#sum_{i=1}^{N} w_{#LT2#GT} w_{#LTsin(#phi)#GT}");
3084  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(3,"#sum_{i=1}^{N} w_{#LTcos(#phi)#GT} w_{#LTsin(#phi)#GT}");
3085  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(4,"#sum_{i=1}^{N} w_{#LT2#GT} w_{#LTcos(#phi_{1}+#phi_{2})#GT}");
3086  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(5,"#sum_{i=1}^{N} w_{#LT2#GT} w_{#LTsin(#phi_{1}+#phi_{2})#GT}");
3087  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(6,"#sum_{i=1}^{N} w_{#LT2#GT} w_{#LTcos(#phi_{1}-#phi_{2}-#phi_{3})#GT}");
3088  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(7,"#sum_{i=1}^{N} w_{#LT2#GT} w_{#LTsin(#phi_{1}-#phi_{2}-#phi_{3})#GT}");
3089  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(8,"#sum_{i=1}^{N} w_{#LT4#GT} w_{#LTcos(#phi)#GT}");
3090  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(9,"#sum_{i=1}^{N} w_{#LT4#GT} w_{#LTsin(#phi)#GT}");
3091  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(10,"#sum_{i=1}^{N} w_{#LT4#GT} w_{#LTcos(#phi_{1}+#phi_{2})#GT}");
3092  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(11,"#sum_{i=1}^{N} w_{#LT4#GT} w_{#LTsin(#phi_{1}+#phi_{2})#GT}");
3093  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(12,"#sum_{i=1}^{N} w_{#LT4#GT} w_{#LTcos(#phi_{1}-#phi_{2}-#phi_{3})#GT}");
3094  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(13,"#sum_{i=1}^{N} w_{#LT4#GT} w_{#LTsin(#phi_{1}-#phi_{2}-#phi_{3})#GT}");
3095  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(14,"#sum_{i=1}^{N} w_{#LTcos(#phi)#GT} w_{#LTcos(#phi_{1}+#phi_{2})#GT}");
3096  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(15,"#sum_{i=1}^{N} w_{#LTcos(#phi)#GT} w_{#LTsin(#phi_{1}+#phi_{2})#GT}");
3097  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(16,"#sum_{i=1}^{N} w_{#LTcos(#phi)#GT} w_{#LTcos(#phi_{1}-#phi_{2}-#phi_{3})#GT}");
3098  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(17,"#sum_{i=1}^{N} w_{#LTcos(#phi)#GT} w_{#LTsin(#phi_{1}-#phi_{2}-#phi_{3})#GT}");
3099  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(18,"#sum_{i=1}^{N} w_{#LTsin(#phi)#GT} w_{#LTcos(#phi_{1}+#phi_{2})#GT}");
3100  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(19,"#sum_{i=1}^{N} w_{#LTsin(#phi)#GT} w_{#LTsin(#phi_{1}+#phi_{2})#GT}");
3101  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(20,"#sum_{i=1}^{N} w_{#LTsin(#phi)#GT} w_{#LTcos(#phi_{1}-#phi_{2}-#phi_{3})#GT}");
3102  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(21,"#sum_{i=1}^{N} w_{#LTsin(#phi)#GT} w_{#LTsin(#phi_{1}-#phi_{2}-#phi_{3})#GT}");
3103  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(22,"#sum_{i=1}^{N} w_{#LTcos(#phi_{1}+#phi_{2})#GT} w_{#LTsin(#phi_{1}+#phi_{2})#GT}");
3104  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(23,"#sum_{i=1}^{N} w_{#LTcos(#phi_{1}+#phi_{2})#GT} w_{#LTcos(#phi_{1}-#phi_{2}-#phi_{3})#GT}");
3105  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(24,"#sum_{i=1}^{N} w_{#LTcos(#phi_{1}+#phi_{2})#GT} w_{#LTsin(#phi_{1}-#phi_{2}-#phi_{3})#GT}");
3106  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(25,"#sum_{i=1}^{N} w_{#LTsin(#phi_{1}+#phi_{2})#GT} w_{#LTcos(#phi_{1}-#phi_{2}-#phi_{3})#GT}");
3107  (fIntFlowSumOfProductOfEventWeightsNUA->GetXaxis())->SetBinLabel(26,"#sum_{i=1}^{N} w_{#LTsin(#phi_{1}+#phi_{2})#GT} w_{#LTsin(#phi_{1}-#phi_{2}-#phi_{3})#GT}");
3108  (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}");
3110  // Final results for reference Q-cumulants:
3111  TString cumulantFlag[4] = {"QC{2}","QC{4}","QC{6}","QC{8}"};
3112  TString intFlowQcumulantsName = "fIntFlowQcumulants";
3113  intFlowQcumulantsName += fAnalysisLabel->Data();
3114  fIntFlowQcumulants = new TH1D(intFlowQcumulantsName.Data(),"Reference Q-cumulants",4,0,4);
3116  {
3117  fIntFlowQcumulants->SetTitle("Reference Q-cumulants (error from non-isotropic terms also propagated)");
3118  }
3119  fIntFlowQcumulants->SetLabelSize(0.05);
3120  fIntFlowQcumulants->SetMarkerStyle(25);
3121  for(Int_t b=0;b<4;b++)
3122  {
3123  (fIntFlowQcumulants->GetXaxis())->SetBinLabel(b+1,cumulantFlag[b].Data());
3124  }
3126  // Final results for reference Q-cumulants rebinned in M:
3128  {
3129  TString intFlowQcumulantsRebinnedInMName = "fIntFlowQcumulantsRebinnedInM";
3130  intFlowQcumulantsRebinnedInMName += fAnalysisLabel->Data();
3131  fIntFlowQcumulantsRebinnedInM = new TH1D(intFlowQcumulantsRebinnedInMName.Data(),"Reference Q-cumulants rebinned in M",4,0,4);
3132  fIntFlowQcumulantsRebinnedInM->SetLabelSize(0.05);
3133  fIntFlowQcumulantsRebinnedInM->SetMarkerStyle(25);
3134  for(Int_t b=0;b<4;b++)
3135  {
3136  (fIntFlowQcumulantsRebinnedInM->GetXaxis())->SetBinLabel(b+1,cumulantFlag[b].Data());
3137  }
3139  } // end of if(fCalculateCumulantsVsM)
3140  // Ratio between error squared: with/without non-isotropic terms:
3141  TString intFlowQcumulantsErrorSquaredRatioName = "fIntFlowQcumulantsErrorSquaredRatio";
3142  intFlowQcumulantsErrorSquaredRatioName += fAnalysisLabel->Data();
3143  fIntFlowQcumulantsErrorSquaredRatio = new TH1D(intFlowQcumulantsErrorSquaredRatioName.Data(),"Error squared of reference Q-cumulants: #frac{with NUA terms}{without NUA terms}",4,0,4);
3144  fIntFlowQcumulantsErrorSquaredRatio->SetLabelSize(0.05);
3145  fIntFlowQcumulantsErrorSquaredRatio->SetMarkerStyle(25);
3146  for(Int_t b=0;b<4;b++)
3147  {
3148  (fIntFlowQcumulantsErrorSquaredRatio->GetXaxis())->SetBinLabel(b+1,cumulantFlag[b].Data());
3149  }
3151  // final results for integrated Q-cumulants versus multiplicity:
3153  {
3154  TString intFlowQcumulantsVsMName = "fIntFlowQcumulantsVsM";
3155  intFlowQcumulantsVsMName += fAnalysisLabel->Data();
3156  for(Int_t co=0;co<4;co++) // cumulant order
3157  {
3158  fIntFlowQcumulantsVsM[co] = new TH1D(Form("%s, %s",intFlowQcumulantsVsMName.Data(),cumulantFlag[co].Data()),
3159  Form("%s vs multiplicity",cumulantFlag[co].Data()),
3162  {
3163  fIntFlowQcumulantsVsM[co]->GetXaxis()->SetTitle("# RPs");
3165  {
3166  fIntFlowQcumulantsVsM[co]->GetXaxis()->SetTitle("Reference multiplicity (from ESD)");
3168  {
3169  fIntFlowQcumulantsVsM[co]->GetXaxis()->SetTitle("# POIs");
3170  }
3171  fIntFlowQcumulantsVsM[co]->GetYaxis()->SetTitle(cumulantFlag[co].Data());
3173  } // end of for(Int_t co=0;co<4;co++) // cumulant order
3174  } // end of if(fCalculateCumulantsVsM)
3175  // final integrated flow estimates from Q-cumulants:
3176  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)};
3177  TString intFlowName = "fIntFlow";
3178  intFlowName += fAnalysisLabel->Data();
3179  // integrated flow from Q-cumulants:
3180  fIntFlow = new TH1D(intFlowName.Data(),"Reference flow estimates from Q-cumulants",4,0,4);
3181  fIntFlow->SetLabelSize(0.05);
3182  fIntFlow->SetMarkerStyle(25);
3183  for(Int_t b=0;b<4;b++)
3184  {
3185  (fIntFlow->GetXaxis())->SetBinLabel(b+1,flowFlag[b].Data());
3186  }
3187  fIntFlowResults->Add(fIntFlow);
3188  // Reference flow vs M rebinned in one huge bin:
3190  {
3191  TString intFlowRebinnedInMName = "fIntFlowRebinnedInM";
3192  intFlowRebinnedInMName += fAnalysisLabel->Data();
3193  fIntFlowRebinnedInM = new TH1D(intFlowRebinnedInMName.Data(),"Reference flow estimates from Q-cumulants (rebinned in M)",4,0,4);
3194  fIntFlowRebinnedInM->SetLabelSize(0.05);
3195  fIntFlowRebinnedInM->SetMarkerStyle(25);
3196  for(Int_t b=0;b<4;b++)
3197  {
3198  (fIntFlowRebinnedInM->GetXaxis())->SetBinLabel(b+1,flowFlag[b].Data());
3199  }
3201  }
3202  // integrated flow from Q-cumulants: versus multiplicity:
3204  {
3205  TString intFlowVsMName = "fIntFlowVsM";
3206  intFlowVsMName += fAnalysisLabel->Data();
3207  for(Int_t co=0;co<4;co++) // cumulant order
3208  {
3209  fIntFlowVsM[co] = new TH1D(Form("%s, %s",intFlowVsMName.Data(),flowFlag[co].Data()),
3210  Form("%s vs multiplicity",flowFlag[co].Data()),
3213  {
3214  fIntFlowVsM[co]->GetXaxis()->SetTitle("# RPs");
3216  {
3217  fIntFlowVsM[co]->GetXaxis()->SetTitle("Reference multiplicity (from ESD)");
3219  {
3220  fIntFlowVsM[co]->GetXaxis()->SetTitle("# POIs");
3221  }
3222  fIntFlowVsM[co]->GetYaxis()->SetTitle(flowFlag[co].Data());
3223  fIntFlowResults->Add(fIntFlowVsM[co]);
3224  } // end of for(Int_t co=0;co<4;co++) // cumulant order
3225  } // end of if(fCalculateCumulantsVsM)
3226  // quantifying detector effects effects to correlations:
3227  TString intFlowDetectorBiasName = "fIntFlowDetectorBias";
3228  intFlowDetectorBiasName += fAnalysisLabel->Data();
3229  fIntFlowDetectorBias = new TH1D(intFlowDetectorBiasName.Data(),"Quantifying detector bias",4,0,4);
3230  fIntFlowDetectorBias->SetLabelSize(0.05);
3231  fIntFlowDetectorBias->SetMarkerStyle(25);
3232  for(Int_t ci=0;ci<4;ci++)
3233  {
3234  (fIntFlowDetectorBias->GetXaxis())->SetBinLabel(ci+1,Form("#frac{corrected}{measured} %s",cumulantFlag[ci].Data()));
3235  }
3237  // quantifying detector effects to correlations versus multiplicity:
3239  {
3240  TString intFlowDetectorBiasVsMName = "fIntFlowDetectorBiasVsM";
3241  intFlowDetectorBiasVsMName += fAnalysisLabel->Data();
3242  for(Int_t ci=0;ci<4;ci++) // correlation index
3243  {
3244  fIntFlowDetectorBiasVsM[ci] = new TH1D(Form("%s for %s",intFlowDetectorBiasVsMName.Data(),cumulantFlag[ci].Data()),
3245  Form("Quantifying detector bias for %s vs multiplicity",cumulantFlag[ci].Data()),
3248  {
3249  fIntFlowDetectorBiasVsM[ci]->GetXaxis()->SetTitle("# RPs");
3251  {
3252  fIntFlowDetectorBiasVsM[ci]->GetXaxis()->SetTitle("Reference multiplicity (from ESD)");
3254  {
3255  fIntFlowDetectorBiasVsM[ci]->GetXaxis()->SetTitle("# POIs");
3256  }
3257  fIntFlowDetectorBiasVsM[ci]->GetYaxis()->SetTitle("#frac{corrected}{measured}");
3259  } // end of for(Int_t co=0;co<4;co++) // cumulant order
3260  } // end of if(fCalculateCumulantsVsM)
3261 
3262 } // end of AliFlowAnalysisCRC::BookEverythingForIntegratedFlow()
3263 
3264 //=======================================================================================================================
3265 
3267 {
3268  // Book all objects for control histograms.
3269 
3270  // a) Book profile to hold all flags for control histograms;
3271  // b) Book all control histograms.
3272 
3273  // a) Book profile to hold all flags for control histograms:
3274  TString controlHistogramsFlagsName = "fControlHistogramsFlags";
3275  controlHistogramsFlagsName += fAnalysisLabel->Data();
3276  fControlHistogramsFlags = new TProfile(controlHistogramsFlagsName.Data(),"Flags for Control Histograms",2,0,2);
3277  fControlHistogramsFlags->SetTickLength(-0.01,"Y");
3278  fControlHistogramsFlags->SetMarkerStyle(25);
3279  fControlHistogramsFlags->SetLabelSize(0.04);
3280  fControlHistogramsFlags->SetLabelOffset(0.02,"Y");
3281  fControlHistogramsFlags->SetStats(kFALSE);
3282  fControlHistogramsFlags->GetXaxis()->SetBinLabel(1,"fStoreControlHistograms");
3283  fControlHistogramsFlags->GetXaxis()->SetBinLabel(2,"fUseQvectorTerms");
3285 
3286  if(!fStoreControlHistograms){return;}
3287 
3288  // b) Book all control histograms:
3289  // b1) Correlation between # RPs and ref. mult. determined centrally:
3290  TString sCorrelationNoRPsVsRefMultName = "fCorrelationNoRPsVsRefMult";
3291  sCorrelationNoRPsVsRefMultName += fAnalysisLabel->Data();
3292  fCorrelationNoRPsVsRefMult = new TH2D(sCorrelationNoRPsVsRefMultName.Data(),"# RPs vs. Reference Multiplicity",fnBinsMult,fMinMult,fMaxMult,fnBinsMult,fMinMult,fMaxMult);
3293  fCorrelationNoRPsVsRefMult->SetTickLength(-0.01,"Y");
3294  fCorrelationNoRPsVsRefMult->SetLabelSize(0.04);
3295  fCorrelationNoRPsVsRefMult->SetLabelOffset(0.02,"Y");
3296  fCorrelationNoRPsVsRefMult->SetStats(kTRUE);
3297  fCorrelationNoRPsVsRefMult->GetXaxis()->SetTitle("# RPs");
3298  fCorrelationNoRPsVsRefMult->GetYaxis()->SetTitle("Reference Multiplicity");
3300  // b2) Correlation between # POIs and ref. mult. determined centrally:
3301  TString sCorrelationNoPOIsVsRefMultName = "fCorrelationNoPOIsVsRefMult";
3302  sCorrelationNoPOIsVsRefMultName += fAnalysisLabel->Data();
3303  fCorrelationNoPOIsVsRefMult = new TH2D(sCorrelationNoPOIsVsRefMultName.Data(),"# POIs vs. Reference Multiplicity",fnBinsMult,fMinMult,fMaxMult,fnBinsMult,fMinMult,fMaxMult);
3304  fCorrelationNoPOIsVsRefMult->SetTickLength(-0.01,"Y");
3305  fCorrelationNoPOIsVsRefMult->SetLabelSize(0.04);
3306  fCorrelationNoPOIsVsRefMult->SetLabelOffset(0.02,"Y");
3307  fCorrelationNoPOIsVsRefMult->SetStats(kTRUE);
3308  fCorrelationNoPOIsVsRefMult->GetXaxis()->SetTitle("# POIs");
3309  fCorrelationNoPOIsVsRefMult->GetYaxis()->SetTitle("Reference Multiplicity");
3311  // b3) Correlation between # RPs and # POIs:
3312  TString sCorrelationNoRPsVsNoPOIsName = "fCorrelationNoRPsVsNoPOIs";
3313  sCorrelationNoRPsVsNoPOIsName += fAnalysisLabel->Data();
3314  fCorrelationNoRPsVsNoPOIs = new TH2D(sCorrelationNoRPsVsNoPOIsName.Data(),"# RPs vs. # POIs",fnBinsMult,fMinMult,fMaxMult,fnBinsMult,fMinMult,fMaxMult);
3315  fCorrelationNoRPsVsNoPOIs->SetTickLength(-0.01,"Y");
3316  fCorrelationNoRPsVsNoPOIs->SetLabelSize(0.04);
3317  fCorrelationNoRPsVsNoPOIs->SetLabelOffset(0.02,"Y");
3318  fCorrelationNoRPsVsNoPOIs->SetStats(kTRUE);
3319  fCorrelationNoRPsVsNoPOIs->GetXaxis()->SetTitle("# RPs");
3320  fCorrelationNoRPsVsNoPOIs->GetYaxis()->SetTitle("# POIs");
3322  // b4) <2>, <4>, <6> and <8> vs multiplicity (#RPs, #POIs or external):
3323  TString sCorrelation[4] = {"#LT2#GT","#LT4#GT","#LT6#GT","#LT8#GT"};
3324  TString sMultiplicity = "";
3326  {
3327  sMultiplicity = "# RPs";
3329  {
3330  sMultiplicity = "Reference multiplicity (from ESD)";
3332  {
3333  sMultiplicity = "# POIs";
3334  }
3335  for(Int_t ci=0;ci<4;ci++)
3336  {
3337  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]);
3338  fCorrelation2468VsMult[ci]->SetTickLength(-0.01,"Y");
3339  fCorrelation2468VsMult[ci]->SetLabelSize(0.04);
3340  fCorrelation2468VsMult[ci]->SetLabelOffset(0.02,"Y");
3341  fCorrelation2468VsMult[ci]->SetStats(kTRUE);
3342  fCorrelation2468VsMult[ci]->GetXaxis()->SetTitle(sMultiplicity.Data());
3343  fCorrelation2468VsMult[ci]->GetYaxis()->SetTitle(sCorrelation[ci].Data());
3345  } // end of for(Int_t ci=0;ci<4;ci++)
3346  // b5) <2><4>, <2><6>, <2><8>, <4><6> etc. vs multiplicity (#RPs, #POIs or external):
3347  TString sCorrelationProduct[1] = {"#LT2#GT#LT4#GT"}; // TBI: add the other ones when needed first time
3348  for(Int_t cpi=0;cpi<1;cpi++) // TBI: hardwired 1
3349  {
3350  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]);
3351  fCorrelationProduct2468VsMult[cpi]->SetTickLength(-0.01,"Y");
3352  fCorrelationProduct2468VsMult[cpi]->SetLabelSize(0.04);
3353  fCorrelationProduct2468VsMult[cpi]->SetLabelOffset(0.02,"Y");
3354  fCorrelationProduct2468VsMult[cpi]->SetStats(kTRUE);
3355  fCorrelationProduct2468VsMult[cpi]->GetXaxis()->SetTitle(sMultiplicity.Data());
3356  fCorrelationProduct2468VsMult[cpi]->GetYaxis()->SetTitle(sCorrelationProduct[cpi].Data());
3358  } // end of for(Int_t cpi=0;cpi<4;cpi++)
3359  // b6) |Qn|^2/M, |Q2n|^2/M, |Qn|^4/(M(2M-1)), Re[Q2nQn^*Qn^*]/M, ... vs multiplicity (#RPs, #POIs or external)
3360  if(fUseQvectorTerms)
3361  {
3362  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
3363  for(Int_t qvti=0;qvti<4;qvti++) // TBI: hardwired 4
3364  {
3365  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]);
3366  fQvectorTermsVsMult[qvti]->SetTickLength(-0.01,"Y");
3367  fQvectorTermsVsMult[qvti]->SetLabelSize(0.04);
3368  fQvectorTermsVsMult[qvti]->SetLabelOffset(0.02,"Y");
3369  fQvectorTermsVsMult[qvti]->SetStats(kTRUE);
3370  fQvectorTermsVsMult[qvti]->GetXaxis()->SetTitle(sMultiplicity.Data());
3371  fQvectorTermsVsMult[qvti]->GetYaxis()->SetTitle(sQvectorTerms[qvti].Data());
3373  } // end of for(Int_t qvti=0;qvti<4;qvti++)
3374  } // end of if(fUseQvectorTerms)
3375 
3376 } // end of void AliFlowAnalysisCRC::BookEverythingForControlHistograms()
3377 
3378 //=======================================================================================================================
3379 
3381 {
3382  // Book all objects needed for bootstrap.
3383 
3384  // a) Book profile to hold all flags for bootstrap;
3385  // b) Book local random generator;
3386  // c) Book all bootstrap objects;
3387  // d) Book all bootstrap objects 'vs M'.
3388 
3389  // a) Book profile to hold all flags for bootstrap;
3390  TString bootstrapFlagsName = "fBootstrapFlags";
3391  bootstrapFlagsName += fAnalysisLabel->Data();
3392  fBootstrapFlags = new TProfile(bootstrapFlagsName.Data(),"Flags for bootstrap",3,0,3);
3393  fBootstrapFlags->SetTickLength(-0.01,"Y");
3394  fBootstrapFlags->SetMarkerStyle(25);
3395  fBootstrapFlags->SetLabelSize(0.04);
3396  fBootstrapFlags->SetLabelOffset(0.02,"Y");
3397  fBootstrapFlags->SetStats(kFALSE);
3398  fBootstrapFlags->GetXaxis()->SetBinLabel(1,"fUseBootstrap");
3399  fBootstrapFlags->GetXaxis()->SetBinLabel(2,"fUseBootstrapVsM");
3400  fBootstrapFlags->GetXaxis()->SetBinLabel(3,"fnSubsamples");
3402 
3403  // c) Book all bootstrap objects:
3404  TString correlationFlag[4] = {"#LT#LT2#GT#GT","#LT#LT4#GT#GT","#LT#LT6#GT#GT","#LT#LT8#GT#GT"};
3405  TString cumulantFlag[4] = {"QC{2}","QC{4}","QC{6}","QC{8}"};
3406  if(fUseBootstrap)
3407  {
3408  // ....
3409  TString bootstrapCorrelationsName = "fBootstrapCorrelations";
3410  bootstrapCorrelationsName += fAnalysisLabel->Data();
3411  fBootstrapCorrelations = new TProfile2D(bootstrapCorrelationsName.Data(),"Bootstrap Correlations",4,0.,4.,fnSubsamples,0,fnSubsamples); // x-axis => <2>, <4>, <6>, <8>; y-axis => subsample #
3412  fBootstrapCorrelations->SetStats(kFALSE);
3413  for(Int_t ci=0;ci<4;ci++) // correlation index
3414  {
3415  fBootstrapCorrelations->GetXaxis()->SetBinLabel(ci+1,correlationFlag[ci].Data());
3416  } // end of for(Int_t ci=0;ci<4;ci++) // correlation index
3417  for(Int_t ss=0;ss<fnSubsamples;ss++)
3418  {
3419  fBootstrapCorrelations->GetYaxis()->SetBinLabel(ss+1,Form("#%d",ss));
3420  } // end of for(Int_t ss=0;ss<fnSubsamples;ss++)
3422  // ....
3423  TString bootstrapCumulantsName = "fBootstrapCumulants";
3424  bootstrapCumulantsName += fAnalysisLabel->Data();
3425  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 #
3426  fBootstrapCumulants->SetStats(kFALSE);
3427  for(Int_t co=0;co<4;co++) // cumulant order
3428  {
3429  fBootstrapCumulants->GetXaxis()->SetBinLabel(co+1,cumulantFlag[co].Data());
3430  } // end of for(Int_t co=0;co<4;co++) // cumulant order
3431  for(Int_t ss=0;ss<fnSubsamples;ss++)
3432  {
3433  fBootstrapCumulants->GetYaxis()->SetBinLabel(ss+1,Form("#%d",ss));
3434  } // end of for(Int_t ss=0;ss<fnSubsamples;ss++)
3436  } // end of if(fUseBootstrap)
3437 
3438  // d) Book all bootstrap objects 'vs M':
3439  TString sMultiplicity = "";
3441  {
3442  sMultiplicity = "# RPs";
3444  {
3445  sMultiplicity = "Reference multiplicity (from ESD)";
3447  {
3448  sMultiplicity = "# POIs";
3449  }
3450  if(fUseBootstrapVsM)
3451  {
3452  // ....
3453  TString bootstrapCorrelationsVsMName = "fBootstrapCorrelationsVsM";
3454  bootstrapCorrelationsVsMName += fAnalysisLabel->Data();
3455  for(Int_t ci=0;ci<4;ci++) // correlation index
3456  {
3457  fBootstrapCorrelationsVsM[ci] = new TProfile2D(Form("%s, %s",bootstrapCorrelationsVsMName.Data(),correlationFlag[ci].Data()),
3458  Form("Bootstrap Correlations Vs. M, %s",correlationFlag[ci].Data()),
3459  fnBinsMult,fMinMult,fMaxMult,fnSubsamples,0,fnSubsamples); // index => <2>, <4>, <6>, <8>; x-axis => multiplicity; y-axis => subsample #
3460  fBootstrapCorrelationsVsM[ci]->SetStats(kFALSE);
3461  fBootstrapCorrelationsVsM[ci]->GetXaxis()->SetTitle(sMultiplicity.Data());
3462  for(Int_t ss=0;ss<fnSubsamples;ss++)
3463  {
3464  fBootstrapCorrelationsVsM[ci]->GetYaxis()->SetBinLabel(ss+1,Form("#%d",ss));
3465  } // end of for(Int_t ss=0;ss<fnSubsamples;ss++)
3467  } // end of for(Int_t ci=0;ci<4;ci++) // correlation index
3468  // ....
3469  TString bootstrapCumulantsVsMName = "fBootstrapCumulantsVsM";
3470  bootstrapCumulantsVsMName += fAnalysisLabel->Data();
3471  for(Int_t co=0;co<4;co++) // cumulant order
3472  {
3473  fBootstrapCumulantsVsM[co] = new TH2D(Form("%s, %s",bootstrapCumulantsVsMName.Data(),cumulantFlag[co].Data()),
3474  Form("Bootstrap Cumulants Vs. M, %s",cumulantFlag[co].Data()),
3475  fnBinsMult,fMinMult,fMaxMult,fnSubsamples,0,fnSubsamples); // index => <2>, <4>, <6>, <8>; x-axis => multiplicity; y-axis => subsample #
3476  fBootstrapCumulantsVsM[co]->SetStats(kFALSE);
3477  fBootstrapCumulantsVsM[co]->GetXaxis()->SetTitle(sMultiplicity.Data());
3478  for(Int_t ss=0;ss<fnSubsamples;ss++)
3479  {
3480  fBootstrapCumulantsVsM[co]->GetYaxis()->SetBinLabel(ss+1,Form("#%d",ss));
3481  } // end of for(Int_t ss=0;ss<fnSubsamples;ss++)
3483  } // end of for(Int_t co=0;co<4;co++) // correlation index
3484  } // end of if(fUseBootstrapVsM)
3485 
3486 } // end of void AliFlowAnalysisCRC::BookEverythingForBootstrap()
3487 
3488 //=======================================================================================================================
3489 
3491 {
3492  // Book all objects for mixed harmonics.
3493 
3494  // a) Book profile to hold all flags for mixed harmonics;
3495  // b) Book all objects in TList fMixedHarmonicsProfiles;
3496  // c) Book all objects in TList fMixedHarmonicsResults;
3497  // d) Book all objects in TList fMixedHarmonicsErrorPropagation.
3498 
3499  // a) Book profile to hold all flags for mixed harmonics:
3500  TString mixedHarmonicsFlagsName = "fMixedHarmonicsFlags";
3501  mixedHarmonicsFlagsName += fAnalysisLabel->Data();
3502  fMixedHarmonicsFlags = new TProfile(mixedHarmonicsFlagsName.Data(),"Flags for Mixed Harmonics",4,0,4);
3503  fMixedHarmonicsFlags->SetTickLength(-0.01,"Y");
3504  fMixedHarmonicsFlags->SetMarkerStyle(25);
3505  fMixedHarmonicsFlags->SetLabelSize(0.04);
3506  fMixedHarmonicsFlags->SetLabelOffset(0.02,"Y");
3507  fMixedHarmonicsFlags->SetStats(kFALSE);
3508  fMixedHarmonicsFlags->GetXaxis()->SetBinLabel(1,"Calculate Mixed Harmonics");
3509  fMixedHarmonicsFlags->GetXaxis()->SetBinLabel(2,"Generic Harmonic");
3510  fMixedHarmonicsFlags->GetXaxis()->SetBinLabel(3,"Calculate vs Multiplicity");
3511  fMixedHarmonicsFlags->GetXaxis()->SetBinLabel(4,"Multiplicity Weight");
3513 
3514  if(!fCalculateMixedHarmonics){return;}
3515 
3516  // b) Book all objects in TList fMixedHarmonicsProfiles:
3517  // b1) 2-p correlations:
3518  TString s2pCorrelationsName = "f2pCorrelations";
3519  s2pCorrelationsName += fAnalysisLabel->Data();
3520  f2pCorrelations = new TProfile(s2pCorrelationsName.Data(),Form("2-particle correlations (n = %d)",fHarmonic),6,0,6,"s");
3521  f2pCorrelations->SetTickLength(-0.01,"Y");
3522  f2pCorrelations->SetMarkerStyle(25);
3523  f2pCorrelations->SetLabelSize(0.04);
3524  f2pCorrelations->SetLabelOffset(0.02,"Y");
3525  f2pCorrelations->SetStats(kFALSE);
3526  f2pCorrelations->Sumw2();
3527  f2pCorrelations->GetXaxis()->SetBinLabel(1,Form("#LT#LT2#GT#GT_{%dn|%dn}",1*fHarmonic,1*fHarmonic));
3528  f2pCorrelations->GetXaxis()->SetBinLabel(2,Form("#LT#LT2#GT#GT_{%dn|%dn}",2*fHarmonic,2*fHarmonic));
3529  f2pCorrelations->GetXaxis()->SetBinLabel(3,Form("#LT#LT2#GT#GT_{%dn|%dn}",3*fHarmonic,3*fHarmonic));
3530  f2pCorrelations->GetXaxis()->SetBinLabel(4,Form("#LT#LT2#GT#GT_{%dn|%dn}",4*fHarmonic,4*fHarmonic));
3531  f2pCorrelations->GetXaxis()->SetBinLabel(5,Form("#LT#LT2#GT#GT_{%dn|%dn}",5*fHarmonic,5*fHarmonic));
3532  f2pCorrelations->GetXaxis()->SetBinLabel(6,Form("#LT#LT2#GT#GT_{%dn|%dn}",6*fHarmonic,6*fHarmonic));
3534  // b2) 3-p correlations (3+6):
3535  TString s3pCorrelationsName = "f3pCorrelations";
3536  s3pCorrelationsName += fAnalysisLabel->Data();
3537  f3pCorrelations = new TProfile(s3pCorrelationsName.Data(),Form("3-particle correlations (n = %d)",fHarmonic),10,0,10,"s");
3538  f3pCorrelations->SetTickLength(-0.01,"Y");
3539  f3pCorrelations->SetMarkerStyle(25);
3540  f3pCorrelations->SetLabelSize(0.04);
3541  f3pCorrelations->SetLabelOffset(0.02,"Y");
3542  f3pCorrelations->SetStats(kFALSE);
3543  f3pCorrelations->Sumw2();
3544  // 3-p correlations sensitive to two distinct harmonics (3):
3545  f3pCorrelations->GetXaxis()->SetBinLabel(1,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",2*fHarmonic,1*fHarmonic,1*fHarmonic));
3546  f3pCorrelations->GetXaxis()->SetBinLabel(2,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",4*fHarmonic,2*fHarmonic,2*fHarmonic));
3547  f3pCorrelations->GetXaxis()->SetBinLabel(3,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",6*fHarmonic,3*fHarmonic,3*fHarmonic));
3548  f3pCorrelations->GetXaxis()->SetBinLabel(4,""); // empty
3549  // 3-p correlations sensitive to three distinct harmonics (6):
3550  f3pCorrelations->GetXaxis()->SetBinLabel(5,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",3*fHarmonic,2*fHarmonic,1*fHarmonic));
3551  f3pCorrelations->GetXaxis()->SetBinLabel(6,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",4*fHarmonic,3*fHarmonic,1*fHarmonic));
3552  f3pCorrelations->GetXaxis()->SetBinLabel(7,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",5*fHarmonic,3*fHarmonic,2*fHarmonic));
3553  f3pCorrelations->GetXaxis()->SetBinLabel(8,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",5*fHarmonic,4*fHarmonic,1*fHarmonic));
3554  f3pCorrelations->GetXaxis()->SetBinLabel(9,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",6*fHarmonic,4*fHarmonic,2*fHarmonic));
3555  f3pCorrelations->GetXaxis()->SetBinLabel(10,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",6*fHarmonic,5*fHarmonic,1*fHarmonic));
3557  // b3) 4-p correlations (6+15+2+10+8):
3558  TString s4pCorrelationsName = "f4pCorrelations";
3559  s4pCorrelationsName += fAnalysisLabel->Data();
3560  f4pCorrelations = new TProfile(s4pCorrelationsName.Data(),Form("4-particle correlations (n = %d)",fHarmonic),45,0,45,"s");
3561  f4pCorrelations->SetTickLength(-0.01,"Y");
3562  f4pCorrelations->SetMarkerStyle(25);
3563  f4pCorrelations->SetLabelSize(0.03);
3564  f4pCorrelations->SetLabelOffset(0.02,"Y");
3565  f4pCorrelations->SetStats(kFALSE);
3566  f4pCorrelations->Sumw2();
3567  // "same harmonic" (6):
3568  f4pCorrelations->GetXaxis()->SetBinLabel(1,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",1*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic));
3569  f4pCorrelations->GetXaxis()->SetBinLabel(2,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",2*fHarmonic,2*fHarmonic,2*fHarmonic,2*fHarmonic));
3570  f4pCorrelations->GetXaxis()->SetBinLabel(3,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",3*fHarmonic,3*fHarmonic,3*fHarmonic,3*fHarmonic));
3571  f4pCorrelations->GetXaxis()->SetBinLabel(4,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,4*fHarmonic,4*fHarmonic,4*fHarmonic));
3572  f4pCorrelations->GetXaxis()->SetBinLabel(5,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,5*fHarmonic,5*fHarmonic,5*fHarmonic));
3573  f4pCorrelations->GetXaxis()->SetBinLabel(6,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,6*fHarmonic,6*fHarmonic,6*fHarmonic));
3574  f4pCorrelations->GetXaxis()->SetBinLabel(7,""); // empty
3575  // "standard candles" (15):
3576  f4pCorrelations->GetXaxis()->SetBinLabel(8,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",2*fHarmonic,1*fHarmonic,2*fHarmonic,1*fHarmonic));
3577  f4pCorrelations->GetXaxis()->SetBinLabel(9,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",3*fHarmonic,1*fHarmonic,3*fHarmonic,1*fHarmonic));
3578  f4pCorrelations->GetXaxis()->SetBinLabel(10,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",3*fHarmonic,2*fHarmonic,3*fHarmonic,2*fHarmonic));
3579  f4pCorrelations->GetXaxis()->SetBinLabel(11,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,1*fHarmonic,4*fHarmonic,1*fHarmonic));
3580  f4pCorrelations->GetXaxis()->SetBinLabel(12,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,2*fHarmonic,4*fHarmonic,2*fHarmonic));
3581  f4pCorrelations->GetXaxis()->SetBinLabel(13,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,3*fHarmonic,4*fHarmonic,3*fHarmonic));
3582  f4pCorrelations->GetXaxis()->SetBinLabel(14,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,1*fHarmonic,5*fHarmonic,1*fHarmonic));
3583  f4pCorrelations->GetXaxis()->SetBinLabel(15,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,2*fHarmonic,5*fHarmonic,2*fHarmonic));
3584  f4pCorrelations->GetXaxis()->SetBinLabel(16,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,3*fHarmonic,5*fHarmonic,3*fHarmonic));
3585  f4pCorrelations->GetXaxis()->SetBinLabel(17,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,4*fHarmonic,5*fHarmonic,4*fHarmonic));
3586  f4pCorrelations->GetXaxis()->SetBinLabel(18,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,1*fHarmonic,6*fHarmonic,1*fHarmonic));
3587  f4pCorrelations->GetXaxis()->SetBinLabel(19,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,2*fHarmonic,6*fHarmonic,2*fHarmonic));
3588  f4pCorrelations->GetXaxis()->SetBinLabel(20,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,3*fHarmonic,6*fHarmonic,3*fHarmonic));
3589  f4pCorrelations->GetXaxis()->SetBinLabel(21,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,4*fHarmonic,6*fHarmonic,4*fHarmonic));
3590  f4pCorrelations->GetXaxis()->SetBinLabel(22,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,5*fHarmonic,6*fHarmonic,5*fHarmonic));
3591  f4pCorrelations->GetXaxis()->SetBinLabel(23,""); // empty
3592  // 4-p correlations sensitive to two distinct harmonics (2):
3593  f4pCorrelations->GetXaxis()->SetBinLabel(24,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",3*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic));
3594  f4pCorrelations->GetXaxis()->SetBinLabel(25,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",6*fHarmonic,2*fHarmonic,2*fHarmonic,2*fHarmonic));
3595  f4pCorrelations->GetXaxis()->SetBinLabel(26,""); // empty
3596  // 4-p correlations sensitive to three distinct harmonics (10):
3597  f4pCorrelations->GetXaxis()->SetBinLabel(27,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",3*fHarmonic,1*fHarmonic,2*fHarmonic,2*fHarmonic));
3598  f4pCorrelations->GetXaxis()->SetBinLabel(28,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",4*fHarmonic,2*fHarmonic,1*fHarmonic,1*fHarmonic));
3599  f4pCorrelations->GetXaxis()->SetBinLabel(29,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,2*fHarmonic,3*fHarmonic,3*fHarmonic));
3600  f4pCorrelations->GetXaxis()->SetBinLabel(30,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",5*fHarmonic,2*fHarmonic,2*fHarmonic,1*fHarmonic));
3601  f4pCorrelations->GetXaxis()->SetBinLabel(31,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",5*fHarmonic,3*fHarmonic,1*fHarmonic,1*fHarmonic));
3602  f4pCorrelations->GetXaxis()->SetBinLabel(32,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,1*fHarmonic,3*fHarmonic,3*fHarmonic));
3603  f4pCorrelations->GetXaxis()->SetBinLabel(33,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,3*fHarmonic,4*fHarmonic,4*fHarmonic));
3604  f4pCorrelations->GetXaxis()->SetBinLabel(34,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",6*fHarmonic,4*fHarmonic,1*fHarmonic,1*fHarmonic));
3605  f4pCorrelations->GetXaxis()->SetBinLabel(35,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,2*fHarmonic,4*fHarmonic,4*fHarmonic));
3606  f4pCorrelations->GetXaxis()->SetBinLabel(36,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,4*fHarmonic,5*fHarmonic,5*fHarmonic));
3607  f4pCorrelations->GetXaxis()->SetBinLabel(37,""); // empty
3608  // 4-p correlations sensitive to four distinct harmonics (8):
3609  f4pCorrelations->GetXaxis()->SetBinLabel(38,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,1*fHarmonic,3*fHarmonic,2*fHarmonic));
3610  f4pCorrelations->GetXaxis()->SetBinLabel(39,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,1*fHarmonic,4*fHarmonic,2*fHarmonic));
3611  f4pCorrelations->GetXaxis()->SetBinLabel(40,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,2*fHarmonic,4*fHarmonic,3*fHarmonic));
3612  f4pCorrelations->GetXaxis()->SetBinLabel(41,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,1*fHarmonic,4*fHarmonic,3*fHarmonic));
3613  f4pCorrelations->GetXaxis()->SetBinLabel(42,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,1*fHarmonic,5*fHarmonic,2*fHarmonic));
3614  f4pCorrelations->GetXaxis()->SetBinLabel(43,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",6*fHarmonic,3*fHarmonic,2*fHarmonic,1*fHarmonic));
3615  f4pCorrelations->GetXaxis()->SetBinLabel(44,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,2*fHarmonic,5*fHarmonic,3*fHarmonic));
3616  f4pCorrelations->GetXaxis()->SetBinLabel(45,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,3*fHarmonic,5*fHarmonic,4*fHarmonic));
3618  // b3) 5-p correlations (30+9+30+11+3):
3619  TString s5pCorrelationsName = "f5pCorrelations";
3620  s5pCorrelationsName += fAnalysisLabel->Data();
3621  f5pCorrelations = new TProfile(s5pCorrelationsName.Data(),Form("5-particle correlations (n = %d)",fHarmonic),87,0,87,"s");
3622  f5pCorrelations->SetTickLength(-0.01,"Y");
3623  f5pCorrelations->SetMarkerStyle(25);
3624  f5pCorrelations->SetLabelSize(0.02);
3625  f5pCorrelations->SetLabelOffset(0.02,"Y");
3626  f5pCorrelations->SetStats(kFALSE);
3627  f5pCorrelations->Sumw2();
3628  // "standard candles" (30):
3629  f5pCorrelations->GetXaxis()->SetBinLabel(1,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",3*fHarmonic,2*fHarmonic,3*fHarmonic,1*fHarmonic,1*fHarmonic));
3630  f5pCorrelations->GetXaxis()->SetBinLabel(2,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,1*fHarmonic,2*fHarmonic,2*fHarmonic,1*fHarmonic));
3631  f5pCorrelations->GetXaxis()->SetBinLabel(3,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,2*fHarmonic,3*fHarmonic,2*fHarmonic,1*fHarmonic));
3632  f5pCorrelations->GetXaxis()->SetBinLabel(4,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,3*fHarmonic,3*fHarmonic,2*fHarmonic,2*fHarmonic));
3633  f5pCorrelations->GetXaxis()->SetBinLabel(5,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,2*fHarmonic,4*fHarmonic,1*fHarmonic,1*fHarmonic));
3634  f5pCorrelations->GetXaxis()->SetBinLabel(6,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,3*fHarmonic,4*fHarmonic,2*fHarmonic,1*fHarmonic));
3635  f5pCorrelations->GetXaxis()->SetBinLabel(7,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,1*fHarmonic,3*fHarmonic,2*fHarmonic,1*fHarmonic));
3636  f5pCorrelations->GetXaxis()->SetBinLabel(8,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,2*fHarmonic,5*fHarmonic,1*fHarmonic,1*fHarmonic));
3637  f5pCorrelations->GetXaxis()->SetBinLabel(9,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,2*fHarmonic,4*fHarmonic,2*fHarmonic,1*fHarmonic));
3638  f5pCorrelations->GetXaxis()->SetBinLabel(10,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,3*fHarmonic,4*fHarmonic,3*fHarmonic,1*fHarmonic));
3639  f5pCorrelations->GetXaxis()->SetBinLabel(11,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,4*fHarmonic,4*fHarmonic,3*fHarmonic,2*fHarmonic));
3640  f5pCorrelations->GetXaxis()->SetBinLabel(12,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,3*fHarmonic,5*fHarmonic,2*fHarmonic,1*fHarmonic));
3641  f5pCorrelations->GetXaxis()->SetBinLabel(13,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,4*fHarmonic,5*fHarmonic,2*fHarmonic,2*fHarmonic));
3642  f5pCorrelations->GetXaxis()->SetBinLabel(14,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,4*fHarmonic,5*fHarmonic,3*fHarmonic,1*fHarmonic));
3643  f5pCorrelations->GetXaxis()->SetBinLabel(15,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,1*fHarmonic,3*fHarmonic,3*fHarmonic,1*fHarmonic));
3644  f5pCorrelations->GetXaxis()->SetBinLabel(16,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,2*fHarmonic,3*fHarmonic,3*fHarmonic,2*fHarmonic));
3645  f5pCorrelations->GetXaxis()->SetBinLabel(17,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,1*fHarmonic,4*fHarmonic,2*fHarmonic,1*fHarmonic));
3646  f5pCorrelations->GetXaxis()->SetBinLabel(18,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,3*fHarmonic,4*fHarmonic,3*fHarmonic,2*fHarmonic));
3647  f5pCorrelations->GetXaxis()->SetBinLabel(19,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,4*fHarmonic,4*fHarmonic,3*fHarmonic,3*fHarmonic));
3648  f5pCorrelations->GetXaxis()->SetBinLabel(20,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,2*fHarmonic,5*fHarmonic,2*fHarmonic,1*fHarmonic));
3649  f5pCorrelations->GetXaxis()->SetBinLabel(21,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,3*fHarmonic,5*fHarmonic,3*fHarmonic,1*fHarmonic));
3650  f5pCorrelations->GetXaxis()->SetBinLabel(22,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,4*fHarmonic,5*fHarmonic,4*fHarmonic,1*fHarmonic));
3651  f5pCorrelations->GetXaxis()->SetBinLabel(23,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,5*fHarmonic,5*fHarmonic,3*fHarmonic,3*fHarmonic));
3652  f5pCorrelations->GetXaxis()->SetBinLabel(24,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,2*fHarmonic,6*fHarmonic,1*fHarmonic,1*fHarmonic));
3653  f5pCorrelations->GetXaxis()->SetBinLabel(25,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,3*fHarmonic,6*fHarmonic,2*fHarmonic,1*fHarmonic));
3654  f5pCorrelations->GetXaxis()->SetBinLabel(26,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,4*fHarmonic,6*fHarmonic,2*fHarmonic,2*fHarmonic));
3655  f5pCorrelations->GetXaxis()->SetBinLabel(27,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,4*fHarmonic,6*fHarmonic,3*fHarmonic,1*fHarmonic));
3656  f5pCorrelations->GetXaxis()->SetBinLabel(28,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,5*fHarmonic,5*fHarmonic,4*fHarmonic,2*fHarmonic));
3657  f5pCorrelations->GetXaxis()->SetBinLabel(29,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,5*fHarmonic,6*fHarmonic,3*fHarmonic,2*fHarmonic));
3658  f5pCorrelations->GetXaxis()->SetBinLabel(30,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,5*fHarmonic,6*fHarmonic,4*fHarmonic,1*fHarmonic));
3659  f5pCorrelations->GetXaxis()->SetBinLabel(31,""); // empty
3660  // 5-p correlations sensitive to two distinct harmonics (9):
3661  f5pCorrelations->GetXaxis()->SetBinLabel(32,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",2*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic));
3662  f5pCorrelations->GetXaxis()->SetBinLabel(33,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",2*fHarmonic,2*fHarmonic,2*fHarmonic,1*fHarmonic,1*fHarmonic));
3663  f5pCorrelations->GetXaxis()->SetBinLabel(34,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",3*fHarmonic,3*fHarmonic,2*fHarmonic,2*fHarmonic,2*fHarmonic));
3664  f5pCorrelations->GetXaxis()->SetBinLabel(35,Form("#LT#LT5#GT#GT_{%dn|%dn,%dn,%dn,%dn}",4*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic));
3665  f5pCorrelations->GetXaxis()->SetBinLabel(36,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,2*fHarmonic,2*fHarmonic,2*fHarmonic,2*fHarmonic));
3666  f5pCorrelations->GetXaxis()->SetBinLabel(37,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,4*fHarmonic,4*fHarmonic,2*fHarmonic,2*fHarmonic));
3667  f5pCorrelations->GetXaxis()->SetBinLabel(38,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,3*fHarmonic,3*fHarmonic,3*fHarmonic,3*fHarmonic));
3668  f5pCorrelations->GetXaxis()->SetBinLabel(39,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,6*fHarmonic,4*fHarmonic,4*fHarmonic,4*fHarmonic));
3669  f5pCorrelations->GetXaxis()->SetBinLabel(40,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,6*fHarmonic,6*fHarmonic,3*fHarmonic,3*fHarmonic));
3670  f5pCorrelations->GetXaxis()->SetBinLabel(41,""); // empty
3671  // 5-p correlations sensitive to three distinct harmonics (30):
3672  f5pCorrelations->GetXaxis()->SetBinLabel(42,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",3*fHarmonic,1*fHarmonic,2*fHarmonic,1*fHarmonic,1*fHarmonic));
3673  f5pCorrelations->GetXaxis()->SetBinLabel(43,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",3*fHarmonic,2*fHarmonic,2*fHarmonic,2*fHarmonic,1*fHarmonic));
3674  f5pCorrelations->GetXaxis()->SetBinLabel(44,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",3*fHarmonic,3*fHarmonic,3*fHarmonic,2*fHarmonic,1*fHarmonic));
3675  f5pCorrelations->GetXaxis()->SetBinLabel(45,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,1*fHarmonic,3*fHarmonic,1*fHarmonic,1*fHarmonic));
3676  f5pCorrelations->GetXaxis()->SetBinLabel(46,Form("#LT#LT5#GT#GT_{%dn,%dn,%dn|%dn,%dn}",4*fHarmonic,1*fHarmonic,1*fHarmonic,3*fHarmonic,3*fHarmonic));
3677  f5pCorrelations->GetXaxis()->SetBinLabel(47,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,3*fHarmonic,3*fHarmonic,3*fHarmonic,1*fHarmonic));
3678  f5pCorrelations->GetXaxis()->SetBinLabel(48,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,4*fHarmonic,3*fHarmonic,3*fHarmonic,2*fHarmonic));
3679  f5pCorrelations->GetXaxis()->SetBinLabel(49,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,4*fHarmonic,4*fHarmonic,3*fHarmonic,1*fHarmonic));
3680  f5pCorrelations->GetXaxis()->SetBinLabel(50,Form("#LT#LT5#GT#GT_{%dn|%dn,%dn,%dn,%dn}",5*fHarmonic,2*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic));
3681  f5pCorrelations->GetXaxis()->SetBinLabel(51,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,1*fHarmonic,2*fHarmonic,2*fHarmonic,2*fHarmonic));
3682  f5pCorrelations->GetXaxis()->SetBinLabel(52,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,2*fHarmonic,3*fHarmonic,2*fHarmonic,2*fHarmonic));
3683  f5pCorrelations->GetXaxis()->SetBinLabel(53,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,3*fHarmonic,3*fHarmonic,3*fHarmonic,2*fHarmonic));
3684  f5pCorrelations->GetXaxis()->SetBinLabel(54,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,1*fHarmonic,4*fHarmonic,1*fHarmonic,1*fHarmonic));
3685  f5pCorrelations->GetXaxis()->SetBinLabel(55,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,4*fHarmonic,3*fHarmonic,3*fHarmonic,3*fHarmonic));
3686  f5pCorrelations->GetXaxis()->SetBinLabel(56,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,4*fHarmonic,4*fHarmonic,4*fHarmonic,1*fHarmonic));
3687  f5pCorrelations->GetXaxis()->SetBinLabel(57,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,5*fHarmonic,4*fHarmonic,3*fHarmonic,3*fHarmonic));
3688  f5pCorrelations->GetXaxis()->SetBinLabel(58,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,5*fHarmonic,4*fHarmonic,4*fHarmonic,2*fHarmonic));
3689  f5pCorrelations->GetXaxis()->SetBinLabel(59,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,5*fHarmonic,5*fHarmonic,3*fHarmonic,2*fHarmonic));
3690  f5pCorrelations->GetXaxis()->SetBinLabel(60,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,5*fHarmonic,5*fHarmonic,4*fHarmonic,1*fHarmonic));
3691  f5pCorrelations->GetXaxis()->SetBinLabel(61,Form("#LT#LT5#GT#GT_{%dn|%dn,%dn,%dn,%dn}",6*fHarmonic,2*fHarmonic,2*fHarmonic,1*fHarmonic,1*fHarmonic));
3692  f5pCorrelations->GetXaxis()->SetBinLabel(62,Form("#LT#LT5#GT#GT_{%dn|%dn,%dn,%dn,%dn}",6*fHarmonic,3*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic));
3693  f5pCorrelations->GetXaxis()->SetBinLabel(63,Form("#LT#LT5#GT#GT_{%dn,%dn,%dn|%dn,%dn}",6*fHarmonic,1*fHarmonic,1*fHarmonic,4*fHarmonic,4*fHarmonic));
3694  f5pCorrelations->GetXaxis()->SetBinLabel(64,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,1*fHarmonic,5*fHarmonic,1*fHarmonic,1*fHarmonic));
3695  f5pCorrelations->GetXaxis()->SetBinLabel(65,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,2*fHarmonic,4*fHarmonic,2*fHarmonic,2*fHarmonic));
3696  f5pCorrelations->GetXaxis()->SetBinLabel(66,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,4*fHarmonic,4*fHarmonic,4*fHarmonic,2*fHarmonic));
3697  f5pCorrelations->GetXaxis()->SetBinLabel(67,Form("#LT#LT5#GT#GT_{%dn,%dn,%dn|%dn,%dn}",6*fHarmonic,2*fHarmonic,2*fHarmonic,5*fHarmonic,5*fHarmonic));
3698  f5pCorrelations->GetXaxis()->SetBinLabel(68,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,5*fHarmonic,5*fHarmonic,5*fHarmonic,1*fHarmonic));
3699  f5pCorrelations->GetXaxis()->SetBinLabel(69,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,6*fHarmonic,5*fHarmonic,5*fHarmonic,2*fHarmonic));
3700  f5pCorrelations->GetXaxis()->SetBinLabel(70,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,6*fHarmonic,6*fHarmonic,4*fHarmonic,2*fHarmonic));
3701  f5pCorrelations->GetXaxis()->SetBinLabel(71,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,6*fHarmonic,6*fHarmonic,5*fHarmonic,1*fHarmonic));
3702  f5pCorrelations->GetXaxis()->SetBinLabel(72,""); // empty
3703  // 5-p correlations sensitive to four distinct harmonics (11):
3704  f5pCorrelations->GetXaxis()->SetBinLabel(73,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,2*fHarmonic,3*fHarmonic,3*fHarmonic,1*fHarmonic));
3705  f5pCorrelations->GetXaxis()->SetBinLabel(74,Form("#LT#LT5#GT#GT_{%dn,%dn,%dn|%dn,%dn}",5*fHarmonic,1*fHarmonic,1*fHarmonic,4*fHarmonic,3*fHarmonic));
3706  f5pCorrelations->GetXaxis()->SetBinLabel(75,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,3*fHarmonic,4*fHarmonic,2*fHarmonic,2*fHarmonic));
3707  f5pCorrelations->GetXaxis()->SetBinLabel(76,Form("#LT#LT5#GT#GT_{%dn,%dn,%dn|%dn,%dn}",5*fHarmonic,2*fHarmonic,1*fHarmonic,4*fHarmonic,4*fHarmonic));
3708  f5pCorrelations->GetXaxis()->SetBinLabel(77,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,1*fHarmonic,3*fHarmonic,2*fHarmonic,2*fHarmonic));
3709  f5pCorrelations->GetXaxis()->SetBinLabel(78,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,3*fHarmonic,4*fHarmonic,4*fHarmonic,1*fHarmonic));
3710  f5pCorrelations->GetXaxis()->SetBinLabel(79,Form("#LT#LT5#GT#GT_{%dn,%dn,%dn|%dn,%dn}",6*fHarmonic,1*fHarmonic,1*fHarmonic,5*fHarmonic,3*fHarmonic));
3711  f5pCorrelations->GetXaxis()->SetBinLabel(80,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,3*fHarmonic,5*fHarmonic,2*fHarmonic,2*fHarmonic));
3712  f5pCorrelations->GetXaxis()->SetBinLabel(81,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,5*fHarmonic,4*fHarmonic,4*fHarmonic,3*fHarmonic));
3713  f5pCorrelations->GetXaxis()->SetBinLabel(82,Form("#LT#LT5#GT#GT_{%dn,%dn,%dn|%dn,%dn}",6*fHarmonic,3*fHarmonic,1*fHarmonic,5*fHarmonic,5*fHarmonic));
3714  f5pCorrelations->GetXaxis()->SetBinLabel(83,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,6*fHarmonic,5*fHarmonic,4*fHarmonic,3*fHarmonic));
3715  f5pCorrelations->GetXaxis()->SetBinLabel(84,""); // empty
3716  // 5-p correlations sensitive to five distinct harmonics (3):
3717  f5pCorrelations->GetXaxis()->SetBinLabel(85,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,2*fHarmonic,4*fHarmonic,3*fHarmonic,1*fHarmonic));
3718  f5pCorrelations->GetXaxis()->SetBinLabel(86,Form("#LT#LT5#GT#GT_{%dn,%dn,%dn|%dn,%dn}",6*fHarmonic,2*fHarmonic,1*fHarmonic,5*fHarmonic,4*fHarmonic));
3719  f5pCorrelations->GetXaxis()->SetBinLabel(87,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,4*fHarmonic,5*fHarmonic,3*fHarmonic,2*fHarmonic));
3721  // b4) 6-p correlations (??+??+??+??+??):
3722  TString s6pCorrelationsName = "f6pCorrelations";
3723  s6pCorrelationsName += fAnalysisLabel->Data();
3724  f6pCorrelations = new TProfile(s6pCorrelationsName.Data(),Form("6-particle correlations (n = %d)",fHarmonic),1,0.,1.);
3725  f6pCorrelations->SetTickLength(-0.01,"Y");
3726  f6pCorrelations->SetMarkerStyle(25);
3727  f6pCorrelations->SetLabelSize(0.02);
3728  f6pCorrelations->SetLabelOffset(0.02,"Y");
3729  f6pCorrelations->SetStats(kFALSE);
3730  f6pCorrelations->Sumw2();
3731  //fMixedHarmonicsProfiles->Add(f6pCorrelations); // TBI
3732  // b5) 7-p correlations (??+??+??+??+??):
3733  TString s7pCorrelationsName = "f7pCorrelations";
3734  s7pCorrelationsName += fAnalysisLabel->Data();
3735  f7pCorrelations = new TProfile(s7pCorrelationsName.Data(),Form("7-particle correlations (n = %d)",fHarmonic),1,0.,1.);
3736  f7pCorrelations->SetTickLength(-0.01,"Y");
3737  f7pCorrelations->SetMarkerStyle(25);
3738  f7pCorrelations->SetLabelSize(0.02);
3739  f7pCorrelations->SetLabelOffset(0.02,"Y");
3740  f7pCorrelations->SetStats(kFALSE);
3741  f7pCorrelations->Sumw2();
3742  //fMixedHarmonicsProfiles->Add(f7pCorrelations); // TBI
3743  // b6) 8-p correlations (??+??+??+??+??):
3744  TString s8pCorrelationsName = "f8pCorrelations";
3745  s8pCorrelationsName += fAnalysisLabel->Data();
3746  f8pCorrelations = new TProfile(s8pCorrelationsName.Data(),Form("8-particle correlations (n = %d)",fHarmonic),1,0.,1.);
3747  f8pCorrelations->SetTickLength(-0.01,"Y");
3748  f8pCorrelations->SetMarkerStyle(25);
3749  f8pCorrelations->SetLabelSize(0.02);
3750  f8pCorrelations->SetLabelOffset(0.02,"Y");
3751  f8pCorrelations->SetStats(kFALSE);
3752  f8pCorrelations->Sumw2();
3753  //fMixedHarmonicsProfiles->Add(f8pCorrelations); // TBI
3754 
3755  // c) Book all objects in TList fMixedHarmonicsResults:
3756  // QC{2}:
3757  f2pCumulants = f2pCorrelations->ProjectionX("f2pCumulants");
3758  f2pCumulants->SetTitle(Form("2-particle cumulants (n = %d)",fHarmonic));
3759  f2pCumulants->SetStats(kFALSE);
3760  f2pCumulants->SetMarkerStyle(kFullSquare);
3761  f2pCumulants->SetMarkerColor(kBlack);
3762  f2pCumulants->SetLineColor(kBlack);
3764  // QC{3}:
3765  f3pCumulants = f3pCorrelations->ProjectionX("f3pCumulants");
3766  f3pCumulants->SetTitle(Form("3-particle cumulants (n = %d)",fHarmonic));
3767  f3pCumulants->SetStats(kFALSE);
3768  f3pCumulants->SetMarkerStyle(kFullSquare);
3769  f3pCumulants->SetMarkerColor(kGreen+2);
3770  f3pCumulants->SetLineColor(kGreen+2);
3772  // QC{4}:
3773  f4pCumulants = f4pCorrelations->ProjectionX("f4pCumulants");
3774  f4pCumulants->SetTitle(Form("4-particle cumulants (n = %d)",fHarmonic));
3775  f4pCumulants->SetStats(kFALSE);
3776  f4pCumulants->SetMarkerStyle(kFullSquare);
3777  f4pCumulants->SetMarkerColor(kRed);
3778  f4pCumulants->SetLineColor(kRed);
3780  // QC{5}:
3781  f5pCumulants = f5pCorrelations->ProjectionX("f5pCumulants");
3782  f5pCumulants->SetTitle(Form("5-particle cumulants (n = %d)",fHarmonic));
3783  f5pCumulants->SetStats(kFALSE);
3784  f5pCumulants->SetMarkerStyle(kFullSquare);
3785  f5pCumulants->SetMarkerColor(kBlue);
3786  f5pCumulants->SetLineColor(kBlue);
3788 
3789  // d) Book all objects in TList fMixedHarmonicsErrorPropagation:
3790  // Sum of linear and quadratic event weights for mixed harmonics => [0=linear 1,1=quadratic]:
3791  TString mixedHarmonicEventWeightsName = "fMixedHarmonicEventWeights";
3792  mixedHarmonicEventWeightsName += fAnalysisLabel->Data();
3793  TString powerFlag[2] = {"linear","quadratic"};
3794  for(Int_t power=0;power<2;power++)
3795  {
3796  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.);
3797  fMixedHarmonicEventWeights[power]->SetLabelSize(0.04);
3798  fMixedHarmonicEventWeights[power]->SetMarkerStyle(25);
3799  fMixedHarmonicEventWeights[power]->SetStats(kFALSE);
3800  if(power == 0)
3801  {
3802  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(1,"#sum w_{#LT1#GT}");
3803  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(2,"#sum w_{#LT2#GT}");
3804  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(3,"#sum w_{#LT3#GT}");
3805  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(4,"#sum w_{#LT4#GT}");
3806  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(5,"#sum w_{#LT5#GT}");
3807  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(6,"#sum w_{#LT6#GT}");
3808  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(7,"#sum w_{#LT7#GT}");
3809  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(8,"#sum w_{#LT8#GT}");
3810  } else if (power == 1)
3811  {
3812  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(1,"#sum w_{#LT1#GT}^{2}");
3813  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(2,"#sum w_{#LT2#GT}^{2}");
3814  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(3,"#sum w_{#LT3#GT}^{2}");
3815  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(4,"#sum w_{#LT4#GT}^{2}");
3816  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(5,"#sum w_{#LT5#GT}^{2}");
3817  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(6,"#sum w_{#LT6#GT}^{2}");
3818  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(7,"#sum w_{#LT7#GT}^{2}");
3819  (fMixedHarmonicEventWeights[power]->GetXaxis())->SetBinLabel(8,"#sum w_{#LT8#GT}^{2}");
3820  }
3822  } // end of for(Int_t power=0;power<2;power++)
3823 
3824  // Sums of products of event weights for mixed harmonics:
3825  TString mixedHarmonicProductOfEventWeightsName = "fMixedHarmonicProductOfEventWeights";
3826  mixedHarmonicProductOfEventWeightsName += fAnalysisLabel->Data();
3827  fMixedHarmonicProductOfEventWeights = new TH2D(mixedHarmonicProductOfEventWeightsName.Data(),"Sums of products of event weights",8,0.,8.,8,0.,8.);
3828  fMixedHarmonicProductOfEventWeights->SetStats(kFALSE);
3829  fMixedHarmonicProductOfEventWeights->GetXaxis()->SetLabelSize(0.05);
3830  fMixedHarmonicProductOfEventWeights->GetYaxis()->SetLabelSize(0.05);
3831  for(Int_t b=1;b<=8;b++)
3832  {
3833  fMixedHarmonicProductOfEventWeights->GetXaxis()->SetBinLabel(b,Form("w_{#LT%i#GT}",b));
3834  fMixedHarmonicProductOfEventWeights->GetYaxis()->SetBinLabel(b,Form("w_{#LT%i#GT}",b));
3835  }
3837 
3838  // Averages of products of mixed harmonics correlations:
3839  TString mixedHarmonicProductOfCorrelationsName = "fMixedHarmonicProductOfCorrelations";
3840  mixedHarmonicProductOfCorrelationsName += fAnalysisLabel->Data();
3841  fMixedHarmonicProductOfCorrelations = new TProfile2D(mixedHarmonicProductOfCorrelationsName.Data(),"Averages of products of mixed correlators",139,0.,139.,139,0.,139.);
3843  fMixedHarmonicProductOfCorrelations->SetStats(kFALSE);
3844  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetLabelSize(0.015);
3845  fMixedHarmonicProductOfCorrelations->GetYaxis()->SetLabelSize(0.015);
3846  // x-axis:
3847  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(1,Form("#LT#LT2#GT#GT_{%dn|%dn}",1*fHarmonic,1*fHarmonic));
3848  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(2,Form("#LT#LT2#GT#GT_{%dn|%dn}",2*fHarmonic,2*fHarmonic));
3849  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(3,Form("#LT#LT2#GT#GT_{%dn|%dn}",3*fHarmonic,3*fHarmonic));
3850  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(4,Form("#LT#LT2#GT#GT_{%dn|%dn}",4*fHarmonic,4*fHarmonic));
3851  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(5,Form("#LT#LT2#GT#GT_{%dn|%dn}",5*fHarmonic,5*fHarmonic));
3852  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(6,Form("#LT#LT2#GT#GT_{%dn|%dn}",6*fHarmonic,6*fHarmonic));
3853  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(7,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",2*fHarmonic,1*fHarmonic,1*fHarmonic));
3854  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(8,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",4*fHarmonic,2*fHarmonic,2*fHarmonic));
3855  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(9,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",6*fHarmonic,3*fHarmonic,3*fHarmonic));
3856  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(10,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",3*fHarmonic,2*fHarmonic,1*fHarmonic));
3857  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(11,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",4*fHarmonic,3*fHarmonic,1*fHarmonic));
3858  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(12,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",5*fHarmonic,3*fHarmonic,2*fHarmonic));
3859  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(13,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",5*fHarmonic,4*fHarmonic,1*fHarmonic));
3860  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(14,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",6*fHarmonic,4*fHarmonic,2*fHarmonic));
3861  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(15,Form("#LT#LT3#GT#GT_{%dn|%dn,%dn}",6*fHarmonic,5*fHarmonic,1*fHarmonic));
3862  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(16,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",1*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic));
3863  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(17,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",2*fHarmonic,2*fHarmonic,2*fHarmonic,2*fHarmonic));
3864  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(18,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",3*fHarmonic,3*fHarmonic,3*fHarmonic,3*fHarmonic));
3865  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(19,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,4*fHarmonic,4*fHarmonic,4*fHarmonic));
3866  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(20,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,5*fHarmonic,5*fHarmonic,5*fHarmonic));
3867  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(21,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,6*fHarmonic,6*fHarmonic,6*fHarmonic));
3868  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(22,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",2*fHarmonic,1*fHarmonic,2*fHarmonic,1*fHarmonic));
3869  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(23,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",3*fHarmonic,1*fHarmonic,3*fHarmonic,1*fHarmonic));
3870  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(24,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",3*fHarmonic,2*fHarmonic,3*fHarmonic,2*fHarmonic));
3871  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(25,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,1*fHarmonic,4*fHarmonic,1*fHarmonic));
3872  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(26,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,2*fHarmonic,4*fHarmonic,2*fHarmonic));
3873  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(27,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,3*fHarmonic,4*fHarmonic,3*fHarmonic));
3874  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(28,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,1*fHarmonic,5*fHarmonic,1*fHarmonic));
3875  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(29,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,2*fHarmonic,5*fHarmonic,2*fHarmonic));
3876  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(30,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,3*fHarmonic,5*fHarmonic,3*fHarmonic));
3877  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(31,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,4*fHarmonic,5*fHarmonic,4*fHarmonic));
3878  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(32,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,1*fHarmonic,6*fHarmonic,1*fHarmonic));
3879  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(33,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,2*fHarmonic,6*fHarmonic,2*fHarmonic));
3880  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(34,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,3*fHarmonic,6*fHarmonic,3*fHarmonic));
3881  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(35,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,4*fHarmonic,6*fHarmonic,4*fHarmonic));
3882  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(36,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,5*fHarmonic,6*fHarmonic,5*fHarmonic));
3883  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(37,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",3*fHarmonic,1*fHarmonic,1*fHarmonic,1*fHarmonic));
3884  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(38,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",6*fHarmonic,2*fHarmonic,2*fHarmonic,2*fHarmonic));
3885  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(39,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",3*fHarmonic,1*fHarmonic,2*fHarmonic,2*fHarmonic));
3886  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(40,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",4*fHarmonic,2*fHarmonic,1*fHarmonic,1*fHarmonic));
3887  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(41,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,2*fHarmonic,3*fHarmonic,3*fHarmonic));
3888  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(42,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",5*fHarmonic,2*fHarmonic,2*fHarmonic,1*fHarmonic));
3889  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(43,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",5*fHarmonic,3*fHarmonic,1*fHarmonic,1*fHarmonic));
3890  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(44,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,1*fHarmonic,3*fHarmonic,3*fHarmonic));
3891  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(45,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,3*fHarmonic,4*fHarmonic,4*fHarmonic));
3892  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(46,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",6*fHarmonic,4*fHarmonic,1*fHarmonic,1*fHarmonic));
3893  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(47,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,2*fHarmonic,4*fHarmonic,4*fHarmonic));
3894  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(48,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,4*fHarmonic,5*fHarmonic,5*fHarmonic));
3895  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(49,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",4*fHarmonic,1*fHarmonic,3*fHarmonic,2*fHarmonic));
3896  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(50,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,1*fHarmonic,4*fHarmonic,2*fHarmonic));
3897  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(51,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",5*fHarmonic,2*fHarmonic,4*fHarmonic,3*fHarmonic));
3898  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(52,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,1*fHarmonic,4*fHarmonic,3*fHarmonic));
3899  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(53,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,1*fHarmonic,5*fHarmonic,2*fHarmonic));
3900  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(54,Form("#LT#LT4#GT#GT_{%dn|%dn,%dn,%dn}",6*fHarmonic,3*fHarmonic,2*fHarmonic,1*fHarmonic));
3901  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(55,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,2*fHarmonic,5*fHarmonic,3*fHarmonic));
3902  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(56,Form("#LT#LT4#GT#GT_{%dn,%dn|%dn,%dn}",6*fHarmonic,3*fHarmonic,5*fHarmonic,4*fHarmonic));
3903  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(57,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",3*fHarmonic,2*fHarmonic,3*fHarmonic,1*fHarmonic,1*fHarmonic));
3904  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(58,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,1*fHarmonic,2*fHarmonic,2*fHarmonic,1*fHarmonic));
3905  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(59,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,2*fHarmonic,3*fHarmonic,2*fHarmonic,1*fHarmonic));
3906  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(60,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,3*fHarmonic,3*fHarmonic,2*fHarmonic,2*fHarmonic));
3907  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(61,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,2*fHarmonic,4*fHarmonic,1*fHarmonic,1*fHarmonic));
3908  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(62,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",4*fHarmonic,3*fHarmonic,4*fHarmonic,2*fHarmonic,1*fHarmonic));
3909  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(63,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,1*fHarmonic,3*fHarmonic,2*fHarmonic,1*fHarmonic));
3910  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(64,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,2*fHarmonic,5*fHarmonic,1*fHarmonic,1*fHarmonic));
3911  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(65,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,2*fHarmonic,4*fHarmonic,2*fHarmonic,1*fHarmonic));
3912  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(66,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,3*fHarmonic,4*fHarmonic,3*fHarmonic,1*fHarmonic));
3913  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(67,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,4*fHarmonic,4*fHarmonic,3*fHarmonic,2*fHarmonic));
3914  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(68,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,3*fHarmonic,5*fHarmonic,2*fHarmonic,1*fHarmonic));
3915  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(69,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,4*fHarmonic,5*fHarmonic,2*fHarmonic,2*fHarmonic));
3916  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(70,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",5*fHarmonic,4*fHarmonic,5*fHarmonic,3*fHarmonic,1*fHarmonic));
3917  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(71,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,1*fHarmonic,3*fHarmonic,3*fHarmonic,1*fHarmonic));
3918  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(72,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,2*fHarmonic,3*fHarmonic,3*fHarmonic,2*fHarmonic));
3919  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(73,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,1*fHarmonic,4*fHarmonic,2*fHarmonic,1*fHarmonic));
3920  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(74,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*fHarmonic,3*fHarmonic,4*fHarmonic,3*fHarmonic,2*fHarmonic));
3921  fMixedHarmonicProductOfCorrelations->GetXaxis()->SetBinLabel(75,Form("#LT#LT5#GT#GT_{%dn,%dn|%dn,%dn,%dn}",6*