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