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