AliPhysics  068200c (068200c)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliAnalysisTaskCMEV0.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 
17 // CME correlator study using VO.
18 // Author: Rihan Haque (mhaque@cern.ch)
20 
21 
22 
23 #include <TGrid.h>
24 #include <TFile.h>
25 #include <TList.h>
26 #include "TMatrixDSym.h"
27 #include "Riostream.h"
28 #include "AliAnalysisManager.h"
29 #include "AliInputEventHandler.h"
30 #include "AliOADBContainer.h"
31 #include "AliMultSelection.h"
32 #include "AliMultiplicity.h"
33 #include "AliAnalysisUtils.h"
34 #include "AliVVertex.h"
35 #include "AliAODTrack.h"
36 #include "AliAODEvent.h"
37 #include "AliAODHeader.h"
38 #include "AliAODVertex.h"
39 #include "AliAODVZERO.h"
40 #include "AliAODZDC.h"
41 #include "AliFlowEvent.h"
42 #include "AliFlowEventSimple.h"
43 #include "AliAnalysisTaskCMEV0.h"
44 
45 using std::endl;
46 using std::cout;
47 
48 ClassImp(AliAnalysisTaskCMEV0)
49 
51  fEvent(NULL),
52  fMultSelection(NULL),
53  fAnalysisUtil(NULL),
54  fListHistos(NULL),
55  fListCalibs(NULL),
56  fListFBHijing(NULL),
57  fListNUACorr(NULL),
58  fListZDNCorr(NULL),
59  fRejectPileUp(kTRUE),
60  fRejectPileUpTight(kTRUE),
61  bFillAvgTPCQn(kFALSE),
62  bFillEtaPhiNUA(kFALSE),
63  bApplyNUACorr(kFALSE),
64  bApplyZDCCorr(kFALSE),
65  bApplyNUAforEP(kFALSE),
66  sDataSet("2015"),
67  sAnalysisSet("DoGainEq"),
68  sCentEstimator("V0"),
69  fRunFlag(0),
70  fOldRunNum(0),
71  fievent(0),
72  EvtCent(0.0),
73  fHarmonic(2.0),
74  fHist_Event_count(NULL),
75  fPileUpMultSelCount(NULL),
76  fPileUpCount(NULL),
77  fMultV0(NULL),
78  fQxnmV0A(NULL),
79  fQynmV0A(NULL),
80  fQxnsV0A(NULL),
81  fQynsV0A(NULL),
82  fQxnmV0C(NULL),
83  fQynmV0C(NULL),
84  fQxnsV0C(NULL),
85  fQynsV0C(NULL),
86  fHCos1nEtaPosVzPos(NULL),
87  fHCos1nEtaNegVzPos(NULL),
88  fHCos1nEtaPosVzNeg(NULL),
89  fHCos1nEtaNegVzNeg(NULL),
90  fHSin1nEtaPosVzPos(NULL),
91  fHSin1nEtaNegVzPos(NULL),
92  fHSin1nEtaPosVzNeg(NULL),
93  fHSin1nEtaNegVzNeg(NULL),
94  fHCos2nEtaPosVzPos(NULL),
95  fHCos2nEtaNegVzPos(NULL),
96  fHCos2nEtaPosVzNeg(NULL),
97  fHCos2nEtaNegVzNeg(NULL),
98  fHSin2nEtaPosVzPos(NULL),
99  fHSin2nEtaNegVzPos(NULL),
100  fHSin2nEtaPosVzNeg(NULL),
101  fHSin2nEtaNegVzNeg(NULL),
102  fHV0AEventPlaneVsCent(NULL),
103  fHV0CEventPlaneVsCent(NULL),
104  fHTPCEventPlaneVsCent(NULL),
105  fHCorrectNUApos(NULL),
106  fHCorrectNUAneg(NULL),
107  fHEnergyZNCvsCent(NULL),
108  fHEnergyZNAvsCent(NULL),
109  fHEnergyZPCvsCent(NULL),
110  fHEnergyZPAvsCent(NULL),
111  fHEnergyZNCvsCentRun(NULL),
112  fHEnergyZNAvsCentRun(NULL),
113  fHEnergyZPCvsCentRun(NULL),
114  fHEnergyZPAvsCentRun(NULL),
115  fHEnergyZPCvsZPA(NULL),
116  fHEnergyZNCvsZNA(NULL),
117  hUnderOverBinNUApos(NULL),
118  hUnderOverBinNUAneg(NULL),
119  fHCentBinTrkRecenter(NULL),
120  fHCorrectZDNP(NULL)
121 {
122  for(int i=0;i<90;i++){
123  runNums[i] = 0;
124  for(int j=0;j<4;j++){
125  fHist3DEtaPhiVz_Pos_Run[j][i] = NULL;
126  fHist3DEtaPhiVz_Neg_Run[j][i] = NULL;
127  }
128  }
129  for(int i=0;i<10;i++){
130  fFB_Efficiency_Cent[i] = NULL;
131  }
132  for(int i=0;i<3;i++){
133  fHist_Corr3p_SP_Norm_PN[i] = NULL;
134  fHist_Corr3p_SP_Norm_PP[i] = NULL;
135  fHist_Corr3p_SP_Norm_NN[i] = NULL;
136  fHist_Reso2n_SP_Norm_Det[i] = NULL;
137  }
138  for(int i=0;i<3;i++){
139  fHist_Corr3p_EP_Norm_PN[i] = NULL;
140  fHist_Corr3p_EP_Norm_PP[i] = NULL;
141  fHist_Corr3p_EP_Norm_NN[i] = NULL;
142  fHist_Reso2n_EP_Norm_Det[i] = NULL;
143  }
144  for(int i=0;i<3;i++){
145  fHist_Corr3p_ZDN_SP_PN[i] = NULL;
146  fHist_Corr3p_ZDN_SP_PP[i] = NULL;
147  fHist_Corr3p_ZDN_SP_NN[i] = NULL;
148  fHist_Reso2n_ZDN_SP_Det[i] = NULL;
149  }
150  for(int i=0;i<6;i++){
151  fHist_Corr3p_pTSum_EP_V0A_PN[i] = NULL;
152  fHist_Corr3p_pTSum_EP_V0A_PP[i] = NULL;
153  fHist_Corr3p_pTSum_EP_V0A_NN[i] = NULL;
154  fHist_Corr3p_pTSum_EP_V0C_PN[i] = NULL;
155  fHist_Corr3p_pTSum_EP_V0C_PP[i] = NULL;
156  fHist_Corr3p_pTSum_EP_V0C_NN[i] = NULL;
157  }
158  for(int i=0;i<6;i++){
159  fHist_Corr3p_pTDiff_EP_V0A_PN[i] = NULL;
160  fHist_Corr3p_pTDiff_EP_V0A_PP[i] = NULL;
161  fHist_Corr3p_pTDiff_EP_V0A_NN[i] = NULL;
162  fHist_Corr3p_pTDiff_EP_V0C_PN[i] = NULL;
163  fHist_Corr3p_pTDiff_EP_V0C_PP[i] = NULL;
164  fHist_Corr3p_pTDiff_EP_V0C_NN[i] = NULL;
165  }
166  for(int i=0;i<6;i++){
167  fHist_Corr3p_EtaDiff_EP_V0A_PN[i] = NULL;
168  fHist_Corr3p_EtaDiff_EP_V0A_PP[i] = NULL;
169  fHist_Corr3p_EtaDiff_EP_V0A_NN[i] = NULL;
170  fHist_Corr3p_EtaDiff_EP_V0C_PN[i] = NULL;
171  fHist_Corr3p_EtaDiff_EP_V0C_PP[i] = NULL;
172  fHist_Corr3p_EtaDiff_EP_V0C_NN[i] = NULL;
173  }
174 
175 
176  DefineInput(1, AliFlowEventSimple::Class()); // Input slot #1: AliFlowEventSimple
177 
178  DefineOutput(1,TList::Class());
179  DefineOutput(2,TList::Class());
180 }//-------- real ---------
181 
183  fEvent(NULL),
184  fMultSelection(NULL),
185  fAnalysisUtil(NULL),
186  fListHistos(NULL),
187  fListCalibs(NULL),
188  fListFBHijing(NULL),
189  fListNUACorr(NULL),
190  fListZDNCorr(NULL),
191  fRejectPileUp(kTRUE),
192  fRejectPileUpTight(kTRUE),
193  bFillAvgTPCQn(kFALSE),
194  bFillEtaPhiNUA(kFALSE),
195  bApplyNUACorr(kFALSE),
196  bApplyZDCCorr(kFALSE),
197  bApplyNUAforEP(kFALSE),
198  sDataSet("2015"),
199  sAnalysisSet("DoGainEq"),
200  sCentEstimator("V0"),
201  fRunFlag(0),
202  fOldRunNum(0),
203  fievent(0),
204  EvtCent(0.0),
205  fHarmonic(2.0),
206  fHist_Event_count(NULL),
207  fPileUpMultSelCount(NULL),
208  fPileUpCount(NULL),
209  fMultV0(NULL),
210  fQxnmV0A(NULL),
211  fQynmV0A(NULL),
212  fQxnsV0A(NULL),
213  fQynsV0A(NULL),
214  fQxnmV0C(NULL),
215  fQynmV0C(NULL),
216  fQxnsV0C(NULL),
217  fQynsV0C(NULL),
218  fHCos1nEtaPosVzPos(NULL),
219  fHCos1nEtaNegVzPos(NULL),
220  fHCos1nEtaPosVzNeg(NULL),
221  fHCos1nEtaNegVzNeg(NULL),
222  fHSin1nEtaPosVzPos(NULL),
223  fHSin1nEtaNegVzPos(NULL),
224  fHSin1nEtaPosVzNeg(NULL),
225  fHSin1nEtaNegVzNeg(NULL),
226  fHCos2nEtaPosVzPos(NULL),
227  fHCos2nEtaNegVzPos(NULL),
228  fHCos2nEtaPosVzNeg(NULL),
229  fHCos2nEtaNegVzNeg(NULL),
230  fHSin2nEtaPosVzPos(NULL),
231  fHSin2nEtaNegVzPos(NULL),
232  fHSin2nEtaPosVzNeg(NULL),
233  fHSin2nEtaNegVzNeg(NULL),
234  fHV0AEventPlaneVsCent(NULL),
235  fHV0CEventPlaneVsCent(NULL),
236  fHTPCEventPlaneVsCent(NULL),
237  fHCorrectNUApos(NULL),
238  fHCorrectNUAneg(NULL),
239  fHEnergyZNCvsCent(NULL),
240  fHEnergyZNAvsCent(NULL),
241  fHEnergyZPCvsCent(NULL),
242  fHEnergyZPAvsCent(NULL),
243  fHEnergyZNCvsCentRun(NULL),
244  fHEnergyZNAvsCentRun(NULL),
245  fHEnergyZPCvsCentRun(NULL),
246  fHEnergyZPAvsCentRun(NULL),
247  fHEnergyZPCvsZPA(NULL),
248  fHEnergyZNCvsZNA(NULL),
249  hUnderOverBinNUApos(NULL),
250  hUnderOverBinNUAneg(NULL),
251  fHCentBinTrkRecenter(NULL),
252  fHCorrectZDNP(NULL)
253 {
254  for(int i=0;i<90;i++){
255  runNums[i] = 0;
256  for(int j=0;j<4;j++){
257  fHist3DEtaPhiVz_Pos_Run[j][i] = NULL;
258  fHist3DEtaPhiVz_Neg_Run[j][i] = NULL;
259  }
260  }
261  for(int i=0;i<10;i++){
262  fFB_Efficiency_Cent[i] = NULL;
263  }
264  for(int i=0;i<3;i++){
265  fHist_Corr3p_SP_Norm_PN[i] = NULL;
266  fHist_Corr3p_SP_Norm_PP[i] = NULL;
267  fHist_Corr3p_SP_Norm_NN[i] = NULL;
268  fHist_Reso2n_SP_Norm_Det[i] = NULL;
269  }
270  for(int i=0;i<3;i++){
271  fHist_Corr3p_EP_Norm_PN[i] = NULL;
272  fHist_Corr3p_EP_Norm_PP[i] = NULL;
273  fHist_Corr3p_EP_Norm_NN[i] = NULL;
274  fHist_Reso2n_EP_Norm_Det[i] = NULL;
275  }
276  for(int i=0;i<3;i++){
277  fHist_Corr3p_ZDN_SP_PN[i] = NULL;
278  fHist_Corr3p_ZDN_SP_PP[i] = NULL;
279  fHist_Corr3p_ZDN_SP_NN[i] = NULL;
280  fHist_Reso2n_ZDN_SP_Det[i] = NULL;
281  }
282  for(int i=0;i<6;i++){
289  }
290  for(int i=0;i<6;i++){
297  }
298  for(int i=0;i<6;i++){
305  }
306 
307 
308 }//-----------
309 
310 
311 
312 
314 {
316 
317  fAnalysisUtil = new AliAnalysisUtils();
318  fAnalysisUtil->SetUseMVPlpSelection(kTRUE);
319  fAnalysisUtil->SetUseOutOfBunchPileUp(kTRUE);
320 
321 
322  if(fListFBHijing) {
323  for(int i=0;i<10;i++) {
324  fFB_Efficiency_Cent[i] = (TH1D *) fListFBHijing->FindObject(Form("eff_unbiased_%d",i));
325  }
326  }
327  else{ // if MC efficiency not found then use weight = 1.
328  printf("\n\n!!***** Warning *****!!\n FilterBit efficiency not found, use = 1.0 !!\n\n");
329  for(int i=0;i<10;i++){
330  fFB_Efficiency_Cent[i] = new TH1D(Form("eff_unbiased_%d",i),"",1000,0,50.);
331  for(int j=1;j<=fFB_Efficiency_Cent[i]->GetNbinsX();j++){
332  fFB_Efficiency_Cent[i]->SetBinContent(j,1.000);
333  }
334  }
335  }
336 
337 
338 
339  fListHistos = new TList();
340  fListHistos->SetOwner(kTRUE);
341 
342  fListCalibs = new TList();
343  fListCalibs->SetOwner(kTRUE);
344 
345  this->DefineHistograms();
346 
347  PostData(1,fListHistos);
348  PostData(2,fListCalibs);
349 
350 }
351 
353 {
354  delete fListHistos;
355  delete fListCalibs;
356 
357  delete fMultSelection;
358  delete fAnalysisUtil; // it is '= new' !!!
359 
360  delete fHCentBinTrkRecenter;
361 
362 }
363 
364 
365 
366 
367 
368 
369 
371 {
372 
373  Float_t stepCount = 0.5;
374  fHist_Event_count->Fill(stepCount); //1
375  stepCount++;
376 
377  AliAODEvent *aod = dynamic_cast<AliAODEvent*>(InputEvent());
378  fEvent = dynamic_cast<AliFlowEventSimple*>(GetInputData(1));
379 
380  if(!aod || !fEvent){
381  printf("\n ... ::UserExec = no AOD or Flow Event, \n.... EXIT ..... \n");
382  return;
383  }
384 
385  fHist_Event_count->Fill(stepCount); //2
386  stepCount++;
387 
388 
389 
390  //---------pileup rejection: --------
391  Bool_t kPileupEvent = CheckEventIsPileUp(aod);
392 
393  if(kPileupEvent) return;
394 
395  fHist_Event_count->Fill(stepCount); //3
396  stepCount++;
397 
398 
399 
400  Double_t centrV0M = -1;
401  Double_t centrCL1 = -1;
402  Double_t centrCL0 = -1;
403  Double_t centrTRK = -1;
404  EvtCent = -1;
405 
406  if(sDataSet=="2010"||sDataSet=="2011"){
407  centrV0M = ((AliVAODHeader*)aod->GetHeader())->GetCentralityP()->GetCentralityPercentile("V0M");
408  centrCL1 = ((AliVAODHeader*)aod->GetHeader())->GetCentralityP()->GetCentralityPercentile("CL1");
409  centrCL0 = ((AliVAODHeader*)aod->GetHeader())->GetCentralityP()->GetCentralityPercentile("CL0");
410  centrTRK = ((AliVAODHeader*)aod->GetHeader())->GetCentralityP()->GetCentralityPercentile("TRK");
411  }
412  else{
413  fMultSelection = (AliMultSelection*) InputEvent()->FindListObject("MultSelection");
414  if(!fMultSelection) {
415  printf("\n\n **WARNING** ::UserExec() AliMultSelection object not found.\n\n");
416  exit(1);
417  }
418  centrV0M = fMultSelection->GetMultiplicityPercentile("V0M");
419  centrCL1 = fMultSelection->GetMultiplicityPercentile("CL1");
420  centrCL0 = fMultSelection->GetMultiplicityPercentile("CL0");
421  centrTRK = fMultSelection->GetMultiplicityPercentile("TRK");
422  }
423 
424 
425 
426  if(sCentEstimator=="V0" || sCentEstimator=="V0M"){
427  EvtCent = centrV0M;
428  }
429  else{
430  EvtCent = centrCL1;
431  }
432 
433 
434 
435  Int_t iCentSPD = centrCL1;
436 
437  if(iCentSPD >= 90) return;
438 
439  fHist_Event_count->Fill(stepCount); //4
440  stepCount++;
441 
442 
443  Int_t cIndex = 0;
444  Int_t cForNUA = 0;
445 
446  if(EvtCent<5.0) {
447  cIndex = 0;
448  cForNUA = 0;
449  }
450  else if(EvtCent>=5.0 && EvtCent<10){
451  cIndex = 1;
452  cForNUA = 1;
453  }
454  else if(EvtCent>10.0) {
455  cIndex = abs(EvtCent/10.0) + 1;
456  cForNUA = cIndex;
457  if(cForNUA>=3)
458  cForNUA = 3; //0=0-5, 1=5-10, 2=10-20, 3=20-90
459  }
460 
461 
462 
463 
464 
465  //------- load v0 calib file of Alex --------
466  Int_t runindex = -111;
467  Int_t runNumber = aod->GetRunNumber();
468  runindex = GetCurrentRunIndex(runNumber);
469 
470  if(runNumber!=fOldRunNum){
471  OpenInfoCalbration(runNumber);
472  if(bApplyNUACorr){
473  GetNUACorrectionHist(runNumber,EvtCent);
474  }
475  if(bApplyZDCCorr){
476  GetZDCCorrectionHist(runNumber);
477  }
478  fOldRunNum = runNumber;
479  }
480 
481 
482 //-------- V0 info ---------------
483  const AliAODVZERO *fAODV0 = aod->GetVZEROData();
484 
485  Double_t Qxan = 0, Qyan = 0;
486  Double_t Qxcn = 0, Qycn = 0;
487  Double_t sumMa = 0, sumMc = 0;
488 
489  GetV0QvectAndMult(fAODV0, Qxan, Qyan, sumMa, Qxcn, Qycn, sumMc);
490 
491 
492  Double_t QyanCor = (Qyan - fQynmV0A->GetBinContent(iCentSPD+1))/fQynsV0A->GetBinContent(iCentSPD+1);
493  Double_t QycnCor = (Qycn - fQynmV0C->GetBinContent(iCentSPD+1))/fQynsV0C->GetBinContent(iCentSPD+1);
494 
495  Double_t QxanCor = Qxan;
496  Double_t QxcnCor = Qxcn;
497 
498  if(fHarmonic != 4.){
499  QxanCor = (Qxan - fQxnmV0A->GetBinContent(iCentSPD+1))/fQxnsV0A->GetBinContent(iCentSPD+1);
500  QxcnCor = (Qxcn - fQxnmV0C->GetBinContent(iCentSPD+1))/fQxnsV0C->GetBinContent(iCentSPD+1);
501  }
502 
503  if(sumMa < 0 || sumMc < 0) return;
504  fHist_Event_count->Fill(stepCount); //5
505  stepCount++;
506 
507  AliAODVertex *pVertex = aod->GetPrimaryVertex();
508  Double_t VtxZ = pVertex->GetZ();
509 
510 
511 
512  //------------- Load ZDC info: -----------
513  Double_t energyZNC=0.,energyZNA=0.,energyZPC=0.,energyZPA=0.;
514 
515  energyZNC = ((AliVAODHeader*)aod->GetHeader())->GetZDCN1Energy();
516  energyZNA = ((AliVAODHeader*)aod->GetHeader())->GetZDCN2Energy();
517  energyZPC = ((AliVAODHeader*)aod->GetHeader())->GetZDCP1Energy();
518  energyZPA = ((AliVAODHeader*)aod->GetHeader())->GetZDCP2Energy();
519 
520 
521  //Apply Gain Correction:
523  energyZNC = energyZNC * fHCorrectZDNP->GetBinContent((abs(EvtCent)+1),1);
524  energyZNA = energyZNA * fHCorrectZDNP->GetBinContent((abs(EvtCent)+1),2);
525  energyZPC = energyZPC * fHCorrectZDNP->GetBinContent((abs(EvtCent)+1),3);
526  energyZPA = energyZPA * fHCorrectZDNP->GetBinContent((abs(EvtCent)+1),4);
527  }
528 
529  fHEnergyZNCvsCent->Fill(EvtCent,energyZNC);
530  fHEnergyZNAvsCent->Fill(EvtCent,energyZNA);
531  fHEnergyZPCvsCent->Fill(EvtCent,energyZPC);
532  fHEnergyZPAvsCent->Fill(EvtCent,energyZPA);
533 
534  /*
535  fHEnergyZNCvsCentRun->Fill(EvtCent,runindex,energyZNC);
536  fHEnergyZNAvsCentRun->Fill(EvtCent,runindex,energyZNA);
537  fHEnergyZPCvsCentRun->Fill(EvtCent,runindex,energyZPC);
538  fHEnergyZPAvsCentRun->Fill(EvtCent,runindex,energyZPA);
539 
540  if(EvtCent>30. && EvtCent<40.){
541  fHEnergyZPCvsZPA->Fill(energyZPC,energyZPA);
542  fHEnergyZNCvsZNA->Fill(energyZNC,energyZNA);
543  }
544  */
545 
546 
547 
548 
549  //Store Qvector for tracks:
550  Double_t QxPos[2] = {0.,}; //[0]=n*phi,[1]=2*n*phi
551  Double_t QyPos[2] = {0.,};
552  Double_t QxNeg[2] = {0.,};
553  Double_t QyNeg[2] = {0.,};
554 
555  //Store Qvector for Auto-correlations
556  Double_t QxAutoPos[2] = {0.,};
557  Double_t QyAutoPos[2] = {0.,};
558  Double_t QxAutoNeg[2] = {0.,};
559  Double_t QyAutoNeg[2] = {0.,};
560 
561  //Multiplicity of POIs:
562  Double_t MPOIpos = 0;
563  Double_t MPOIneg = 0;
564 
565  //TPC Event plane Qvectors:
566  Double_t QxTPC[2] = {0.,};
567  Double_t QyTPC[2] = {0.,};
568 
569  Int_t ptBin;
570  Int_t nRefMult = 0;
571  Int_t n = fHarmonic/2.0; // Because, cos(nphi1 + nphi2 - 2nPsi)//
572 
573  Int_t iCentRec = 0; //centrality bin for track recenter
574  iCentRec = fHCentBinTrkRecenter->FindBin(EvtCent);
575 
576  //Int_t nBinVz=1,nBinPhi=1,nBinEta=1;
577 
578  //CME using Event plane:
579  Double_t pi = TMath::Pi();
580  Double_t Psi2V0C = 0.5*TMath::ATan2(QycnCor,QxcnCor);
581  if(Psi2V0C<0.) Psi2V0C += pi;
582 
583  Double_t Psi2V0A = 0.5*TMath::ATan2(QyanCor,QxanCor);
584  if(Psi2V0A<0.) Psi2V0A += pi;
585 
586  Int_t iBinNUA = 1;
587 
588  Int_t iTracks = fEvent->NumberOfTracks();
589 
590  AliFlowTrackSimple* pTrack1 = NULL;
591  AliFlowTrackSimple* pTrack2 = NULL;
592 
593  Double_t dPhi1,dPt1,dEta1,dChrg1;
594  Double_t dPhi2,dPt2,dEta2,dChrg2;
595  Double_t WgtEP = 1.0;
596 
597  Double_t ptw1 = 1.0, w1NUA = 1.0;
598  Double_t ptw2 = 1.0, w2NUA = 1.0;
599 
600  for(int i=0; i<iTracks; i++) {
601  pTrack1 = fEvent->GetTrack(i);
602  if(!pTrack1) continue;
603  dPhi1 = pTrack1->Phi(); //0-2pi range
604  dPt1 = pTrack1-> Pt();
605  dEta1 = pTrack1->Eta();
606  dChrg1 = pTrack1->Charge();
607 
608  if(!pTrack1->InPOISelection())
609  continue;
610 
611  nRefMult++;
612 
613  if(bFillEtaPhiNUA){
614  if(dChrg1>0){
615  fHist3DEtaPhiVz_Pos_Run[cForNUA][runindex]->Fill(VtxZ,dPhi1,dEta1);
616  }
617  else if(dChrg1<0){
618  fHist3DEtaPhiVz_Neg_Run[cForNUA][runindex]->Fill(VtxZ,dPhi1,dEta1);
619  }
620  }
621 
622  if(bApplyNUACorr){
623  //get NUA weights:
624  if(dChrg1>0){
625  iBinNUA = fHCorrectNUApos->FindBin(VtxZ,dPhi1,dEta1);
626  //w1NUA = 1.0/fHCorrectNUApos->GetBinContent(iBinNUA); //Jacopo's
627  w1NUA = fHCorrectNUApos->GetBinContent(iBinNUA); //Rihan's
628 
629  /*if(fabs(w1NUA)>1e5){
630  fHCorrectNUApos->GetBinXYZ(iBinNUA,nBinVz,nBinPhi,nBinEta);
631  hUnderOverBinNUApos->Fill(nBinVz);
632  hUnderOverBinNUApos->Fill(19.5+nBinPhi);
633  hUnderOverBinNUApos->Fill(69.5+nBinEta);
634  }*/
635  }
636  else if(dChrg1<0){
637  iBinNUA = fHCorrectNUAneg->FindBin(VtxZ,dPhi1,dEta1);
638  //w1NUA = 1.0/fHCorrectNUAneg->GetBinContent(iBinNUA); //Jacopo: bincontent = 1/Wgts
639  w1NUA = fHCorrectNUAneg->GetBinContent(iBinNUA); //Rihan: bincontent = Wgts
640 
641  /*if(fabs(w1NUA)>1e5){
642  fHCorrectNUAneg->GetBinXYZ(iBinNUA,nBinVz,nBinPhi,nBinEta);
643  hUnderOverBinNUAneg->Fill(nBinVz);
644  hUnderOverBinNUAneg->Fill(19.5+nBinPhi);
645  hUnderOverBinNUAneg->Fill(69.5+nBinEta);
646  }*/
647  }
648  }
649 
650  ptBin = fFB_Efficiency_Cent[cIndex]->FindBin(dPt1);
651  ptw1 = 1.0/fFB_Efficiency_Cent[cIndex]->GetBinContent(ptBin);
652 
653  if(dChrg1>0){
654  QxPos[0] += ptw1*w1NUA*TMath::Cos(n*dPhi1);
655  QyPos[0] += ptw1*w1NUA*TMath::Sin(n*dPhi1);
656  QxAutoPos[0] += ptw1*ptw1*w1NUA*w1NUA*TMath::Cos(2.*n*dPhi1);
657  QyAutoPos[0] += ptw1*ptw1*w1NUA*w1NUA*TMath::Sin(2.*n*dPhi1);
658  MPOIpos += ptw1*w1NUA;
659  }
660  else if(dChrg1<0){
661  QxNeg[0] += ptw1*w1NUA*TMath::Cos(n*dPhi1);
662  QyNeg[0] += ptw1*w1NUA*TMath::Sin(n*dPhi1);
663  QxAutoNeg[0] += ptw1*ptw1*w1NUA*w1NUA*TMath::Cos(2.*n*dPhi1);
664  QyAutoNeg[0] += ptw1*ptw1*w1NUA*w1NUA*TMath::Sin(2.*n*dPhi1);
665  MPOIneg += ptw1*w1NUA;
666  }
667 
668  QxTPC[0] += ptw1*w1NUA*TMath::Cos(n*dPhi1);
669  QyTPC[0] += ptw1*w1NUA*TMath::Sin(n*dPhi1);
670  QxTPC[1] += ptw1*w1NUA*TMath::Cos(2.*n*dPhi1);
671  QyTPC[1] += ptw1*w1NUA*TMath::Sin(2.*n*dPhi1);
672 
673  if(bFillAvgTPCQn) { //fill TPC Q-vect:
674  if(VtxZ>0 && dEta1>=0){
675  fHCos1nEtaPosVzPos->Fill(runindex,EvtCent,ptw1*TMath::Cos(n*dPhi1));
676  fHSin1nEtaPosVzPos->Fill(runindex,EvtCent,ptw1*TMath::Sin(n*dPhi1));
677  fHCos2nEtaPosVzPos->Fill(runindex,EvtCent,ptw1*TMath::Cos(2.*n*dPhi1));
678  fHSin2nEtaPosVzPos->Fill(runindex,EvtCent,ptw1*TMath::Sin(2.*n*dPhi1));
679  }
680  else if(VtxZ>0 && dEta1<0){
681  fHCos1nEtaNegVzPos->Fill(runindex,EvtCent,ptw1*TMath::Cos(n*dPhi1));
682  fHSin1nEtaNegVzPos->Fill(runindex,EvtCent,ptw1*TMath::Sin(n*dPhi1));
683  fHCos2nEtaNegVzPos->Fill(runindex,EvtCent,ptw1*TMath::Cos(2.*n*dPhi1));
684  fHSin2nEtaNegVzPos->Fill(runindex,EvtCent,ptw1*TMath::Sin(2.*n*dPhi1));
685  }
686  else if(VtxZ<0 && dEta1>=0){
687  fHCos1nEtaPosVzNeg->Fill(runindex,EvtCent,ptw1*TMath::Cos(n*dPhi1));
688  fHSin1nEtaPosVzNeg->Fill(runindex,EvtCent,ptw1*TMath::Sin(n*dPhi1));
689  fHCos2nEtaPosVzNeg->Fill(runindex,EvtCent,ptw1*TMath::Cos(2.*n*dPhi1));
690  fHSin2nEtaPosVzNeg->Fill(runindex,EvtCent,ptw1*TMath::Sin(2.*n*dPhi1));
691  }
692  else if(VtxZ<0 && dEta1<0){
693  fHCos1nEtaNegVzNeg->Fill(runindex,EvtCent,ptw1*TMath::Cos(n*dPhi1));
694  fHSin1nEtaNegVzNeg->Fill(runindex,EvtCent,ptw1*TMath::Sin(n*dPhi1));
695  fHCos2nEtaNegVzNeg->Fill(runindex,EvtCent,ptw1*TMath::Cos(2.*n*dPhi1));
696  fHSin2nEtaNegVzNeg->Fill(runindex,EvtCent,ptw1*TMath::Sin(2.*n*dPhi1));
697  }
698  }
699 
700  //if(fabs(w1NUA)>2.0){
701  // std::cout<<" track = "<<i<<" Ch = "<<dChrg1<<"\tPt = "<<dPt1<<"\tptw = "<<ptw1<<"\tw1NUA = "<<w1NUA<<"\tVtxZ = "<<VtxZ<<std::endl;
702  //}
703 
704 
705  //2nd track loop:
706  for(int j=0; j<iTracks; j++) {
707 
708  if(j==i) continue; //Auto-correlation removed.
709 
710  pTrack2 = fEvent->GetTrack(j);
711  if(!pTrack2) continue;
712  dPhi2 = pTrack2->Phi(); //0-2pi range
713  dPt2 = pTrack2-> Pt();
714  dEta2 = pTrack2->Eta();
715  dChrg2 = pTrack2->Charge();
716 
717  if(!pTrack2->InPOISelection())
718  continue;
719 
720  if(bApplyNUAforEP){
721  ptBin = fFB_Efficiency_Cent[cIndex]->FindBin(dPt2);
722  ptw2 = 1.0/fFB_Efficiency_Cent[cIndex]->GetBinContent(ptBin);
723 
724  if(bApplyNUACorr){
725  if(dChrg2>0){
726  iBinNUA = fHCorrectNUApos->FindBin(VtxZ,dPhi2,dEta2);
727  w2NUA = fHCorrectNUApos->GetBinContent(iBinNUA);
728  }
729  else if(dChrg2<0){
730  iBinNUA = fHCorrectNUApos->FindBin(VtxZ,dPhi2,dEta2);
731  w2NUA = fHCorrectNUApos->GetBinContent(iBinNUA);
732  }
733  }
734  WgtEP = ptw1*ptw2*w1NUA*w2NUA;
735  }
736 
737  if(dChrg1!=dChrg2){
738  fHist_Corr3p_EP_Norm_PN[0]->Fill(EvtCent, TMath::Cos(n*dPhi1 + n*dPhi2 - 2.*n*Psi2V0A),WgtEP);
739  fHist_Corr3p_EP_Norm_PN[1]->Fill(EvtCent, TMath::Cos(n*dPhi1 + n*dPhi2 - 2.*n*Psi2V0C),WgtEP);
740  if(cIndex<6){
741  fHist_Corr3p_pTSum_EP_V0A_PN[cIndex]->Fill((dPt1+dPt2)*0.5, TMath::Cos(n*dPhi1 + n*dPhi2 - 2.*n*Psi2V0A),WgtEP);
742  fHist_Corr3p_pTSum_EP_V0C_PN[cIndex]->Fill((dPt1+dPt2)*0.5, TMath::Cos(n*dPhi1 + n*dPhi2 - 2.*n*Psi2V0C),WgtEP);
743  fHist_Corr3p_pTDiff_EP_V0A_PN[cIndex]->Fill(TMath::Abs(dPt1-dPt2), TMath::Cos(n*dPhi1 + n*dPhi2 - 2.*n*Psi2V0A),WgtEP);
744  fHist_Corr3p_pTDiff_EP_V0C_PN[cIndex]->Fill(TMath::Abs(dPt1-dPt2), TMath::Cos(n*dPhi1 + n*dPhi2 - 2.*n*Psi2V0C),WgtEP);
745  fHist_Corr3p_EtaDiff_EP_V0A_PN[cIndex]->Fill(TMath::Abs(dEta1-dEta2), TMath::Cos(n*dPhi1 + n*dPhi2 - 2.*n*Psi2V0A),WgtEP);
746  fHist_Corr3p_EtaDiff_EP_V0C_PN[cIndex]->Fill(TMath::Abs(dEta1-dEta2), TMath::Cos(n*dPhi1 + n*dPhi2 - 2.*n*Psi2V0C),WgtEP);
747  }
748  }
749  else if(dChrg1>0 && dChrg2>0){
750  fHist_Corr3p_EP_Norm_PP[0]->Fill(EvtCent, TMath::Cos(n*dPhi1 + n*dPhi2 - 2.*n*Psi2V0A),WgtEP);
751  fHist_Corr3p_EP_Norm_PP[1]->Fill(EvtCent, TMath::Cos(n*dPhi1 + n*dPhi2 - 2.*n*Psi2V0C),WgtEP);
752  if(cIndex<6){
753  fHist_Corr3p_pTSum_EP_V0A_PP[cIndex]->Fill((dPt1+dPt2)*0.5, TMath::Cos(n*dPhi1 + n*dPhi2 - 2.*n*Psi2V0A),WgtEP);
754  fHist_Corr3p_pTSum_EP_V0C_PP[cIndex]->Fill((dPt1+dPt2)*0.5, TMath::Cos(n*dPhi1 + n*dPhi2 - 2.*n*Psi2V0C),WgtEP);
755  fHist_Corr3p_pTDiff_EP_V0A_PP[cIndex]->Fill(TMath::Abs(dPt1-dPt2), TMath::Cos(n*dPhi1 + n*dPhi2 - 2.*n*Psi2V0A),WgtEP);
756  fHist_Corr3p_pTDiff_EP_V0C_PP[cIndex]->Fill(TMath::Abs(dPt1-dPt2), TMath::Cos(n*dPhi1 + n*dPhi2 - 2.*n*Psi2V0C),WgtEP);
757  fHist_Corr3p_EtaDiff_EP_V0A_PP[cIndex]->Fill(TMath::Abs(dEta1-dEta2), TMath::Cos(n*dPhi1 + n*dPhi2 - 2.*n*Psi2V0A),WgtEP);
758  fHist_Corr3p_EtaDiff_EP_V0C_PP[cIndex]->Fill(TMath::Abs(dEta1-dEta2), TMath::Cos(n*dPhi1 + n*dPhi2 - 2.*n*Psi2V0C),WgtEP);
759  }
760  }
761  else if(dChrg1<0 && dChrg2<0){
762  fHist_Corr3p_EP_Norm_NN[0]->Fill(EvtCent, TMath::Cos(n*dPhi1 + n*dPhi2 - 2.*n*Psi2V0A),WgtEP);
763  fHist_Corr3p_EP_Norm_NN[1]->Fill(EvtCent, TMath::Cos(n*dPhi1 + n*dPhi2 - 2.*n*Psi2V0C),WgtEP);
764  if(cIndex<6){
765  fHist_Corr3p_pTSum_EP_V0A_NN[cIndex]->Fill((dPt1+dPt2)*0.5, TMath::Cos(n*dPhi1 + n*dPhi2 - 2.*n*Psi2V0A),WgtEP);
766  fHist_Corr3p_pTSum_EP_V0C_NN[cIndex]->Fill((dPt1+dPt2)*0.5, TMath::Cos(n*dPhi1 + n*dPhi2 - 2.*n*Psi2V0C),WgtEP);
767  fHist_Corr3p_pTDiff_EP_V0A_NN[cIndex]->Fill(TMath::Abs(dPt1-dPt2), TMath::Cos(n*dPhi1 + n*dPhi2 - 2.*n*Psi2V0A),WgtEP);
768  fHist_Corr3p_pTDiff_EP_V0C_NN[cIndex]->Fill(TMath::Abs(dPt1-dPt2), TMath::Cos(n*dPhi1 + n*dPhi2 - 2.*n*Psi2V0C),WgtEP);
769  fHist_Corr3p_EtaDiff_EP_V0A_NN[cIndex]->Fill(TMath::Abs(dEta1-dEta2), TMath::Cos(n*dPhi1 + n*dPhi2 - 2.*n*Psi2V0A),WgtEP);
770  fHist_Corr3p_EtaDiff_EP_V0C_NN[cIndex]->Fill(TMath::Abs(dEta1-dEta2), TMath::Cos(n*dPhi1 + n*dPhi2 - 2.*n*Psi2V0C),WgtEP);
771  }
772  }
773  }//nested loop ends
774  }//------ track loop ends ------
775 
776 
777  Double_t QTPCRe = 0.;
778  Double_t QTPCIm = 0.;
779  QTPCRe = QxTPC[1];
780  QTPCIm = QyTPC[1];
781 
782 
783  Double_t Psi2TPC = 0.5*(TMath::ATan2(QTPCIm,QTPCRe));
784  if(Psi2TPC < 0.) Psi2TPC += pi;
785 
786 
787 //V0A-V0C EP resolution:
788  fHist_Reso2n_EP_Norm_Det[0]->Fill(EvtCent, TMath::Cos(2.*(Psi2V0A-Psi2V0C)));
789 //V0A-TPC EP resolution:
790  fHist_Reso2n_EP_Norm_Det[1]->Fill(EvtCent, TMath::Cos(2.*(Psi2V0A-Psi2TPC)));
791 //V0C-TPC EP resolution:
792  fHist_Reso2n_EP_Norm_Det[2]->Fill(EvtCent, TMath::Cos(2.*(Psi2V0C-Psi2TPC)));
793 
794 
795  fHV0AEventPlaneVsCent->Fill(EvtCent,Psi2V0A);
796  fHV0CEventPlaneVsCent->Fill(EvtCent,Psi2V0C);
797  fHTPCEventPlaneVsCent->Fill(EvtCent,Psi2TPC);
798 
799 
800  Double_t uPRe=0.,uNRe=0.,uPIm=0.,uNIm=0.,uN2Re=0.,uN2Im=0.,uP2Re=0.,uP2Im=0.;
801  Double_t uPM=0.,uNM=0.;
802  //Double_t VCIm=0., VPRe=0.,VPIm=0.;
803 
804 
805  uPM = MPOIpos; uNM = MPOIneg;
806 
807  uPRe = QxPos[0]; uNRe = QxNeg[0];
808  uPIm = QyPos[0]; uNIm = QyNeg[0];
809 
810  uP2Re = QxAutoPos[0]; uP2Im = QyAutoPos[0];
811  uN2Re = QxAutoNeg[0]; uN2Im = QyAutoNeg[0];
812 
813  Double_t TwoQpQnV = 0.,TwoQpQpV=0.,TwoQnQnV=0.;
814 
815  if(uPM > 1 && uNM > 1){
816  //CME w.r.t V0A EP:
817  TwoQpQnV = ((uPRe*uNRe-uPIm*uNIm)*QxanCor + (uPRe*uNIm+uPIm*uNRe)*QyanCor) / (uPM*uNM) ;
818  TwoQpQpV = ((uPRe*uPRe-uPIm*uPIm-uP2Re)*QxanCor + (2.*uPRe*uPIm-uP2Im)*QyanCor) / (uPM*(uPM-1.)) ;
819  TwoQnQnV = ((uNRe*uNRe-uNIm*uNIm-uN2Re)*QxanCor + (2.*uNRe*uNIm-uN2Im)*QyanCor) / (uNM*(uNM-1.)) ;
820  //Fill profiles:
821  fHist_Corr3p_SP_Norm_PN[0]->Fill(EvtCent, TwoQpQnV, uPM*uNM);
822  fHist_Corr3p_SP_Norm_PP[0]->Fill(EvtCent, TwoQpQpV, (uPM*(uPM-1.)));
823  fHist_Corr3p_SP_Norm_NN[0]->Fill(EvtCent, TwoQnQnV, (uNM*(uNM-1.)));
824 
825  //-------- CME - ZDN correlators:---------
826  fHist_Corr3p_ZDN_SP_PN[0]->Fill(EvtCent, 0., TwoQpQnV, uPM*uNM);
827  fHist_Corr3p_ZDN_SP_PN[0]->Fill(EvtCent, 1., energyZPA, 1.);
828  fHist_Corr3p_ZDN_SP_PN[0]->Fill(EvtCent, 2., energyZPC, 1.);
829  fHist_Corr3p_ZDN_SP_PN[0]->Fill(EvtCent, 3., (energyZPA+energyZPC), 1.);
830  fHist_Corr3p_ZDN_SP_PN[0]->Fill(EvtCent, 4., energyZNA, 1.);
831  fHist_Corr3p_ZDN_SP_PN[0]->Fill(EvtCent, 5., energyZNC, 1.);
832  fHist_Corr3p_ZDN_SP_PN[0]->Fill(EvtCent, 6., (energyZNA+energyZNC), 1.);
833  fHist_Corr3p_ZDN_SP_PN[0]->Fill(EvtCent, 7., TwoQpQnV*energyZPA, uPM*uNM);
834  fHist_Corr3p_ZDN_SP_PN[0]->Fill(EvtCent, 8., TwoQpQnV*energyZPC, uPM*uNM);
835  fHist_Corr3p_ZDN_SP_PN[0]->Fill(EvtCent, 9., TwoQpQnV*(energyZPC+energyZPA), uPM*uNM);
836  fHist_Corr3p_ZDN_SP_PN[0]->Fill(EvtCent, 10., TwoQpQnV*energyZNA, uPM*uNM);
837  fHist_Corr3p_ZDN_SP_PN[0]->Fill(EvtCent, 11., TwoQpQnV*energyZNC, uPM*uNM);
838  fHist_Corr3p_ZDN_SP_PN[0]->Fill(EvtCent, 12., TwoQpQnV*(energyZNC+energyZNA), uPM*uNM);
839 
840  fHist_Corr3p_ZDN_SP_PP[0]->Fill(EvtCent, 0., TwoQpQpV, (uPM*(uPM-1.)));
841  //fHist_Corr3p_ZDN_SP_PP[0]->Fill(EvtCent, 1., energyZPA, 1.);
842  //fHist_Corr3p_ZDN_SP_PP[0]->Fill(EvtCent, 2., energyZPC, 1.);
843  //fHist_Corr3p_ZDN_SP_PP[0]->Fill(EvtCent, 3., (energyZPA+energyZPC), 1.);
844  //fHist_Corr3p_ZDN_SP_PP[0]->Fill(EvtCent, 4., energyZNA, 1.);
845  //fHist_Corr3p_ZDN_SP_PP[0]->Fill(EvtCent, 5., energyZNC, 1.);
846  //fHist_Corr3p_ZDN_SP_PP[0]->Fill(EvtCent, 6., (energyZNA+energyZNC), 1.);
847  fHist_Corr3p_ZDN_SP_PP[0]->Fill(EvtCent, 7., TwoQpQpV*energyZPA, (uPM*(uPM-1.)));
848  fHist_Corr3p_ZDN_SP_PP[0]->Fill(EvtCent, 8., TwoQpQpV*energyZPC, (uPM*(uPM-1.)));
849  fHist_Corr3p_ZDN_SP_PP[0]->Fill(EvtCent, 9., TwoQpQpV*(energyZPC+energyZPA), (uPM*(uPM-1.)));
850  fHist_Corr3p_ZDN_SP_PP[0]->Fill(EvtCent, 10., TwoQpQpV*energyZNA, (uPM*(uPM-1.)));
851  fHist_Corr3p_ZDN_SP_PP[0]->Fill(EvtCent, 11., TwoQpQpV*energyZNC, (uPM*(uPM-1.)));
852  fHist_Corr3p_ZDN_SP_PP[0]->Fill(EvtCent, 12., TwoQpQpV*(energyZNC+energyZNA), (uPM*(uPM-1.)));
853 
854  fHist_Corr3p_ZDN_SP_NN[0]->Fill(EvtCent, 0., TwoQnQnV, (uNM*(uNM-1.)));
855  //fHist_Corr3p_ZDN_SP_NN[0]->Fill(EvtCent, 1., energyZPA, 1.);
856  //fHist_Corr3p_ZDN_SP_NN[0]->Fill(EvtCent, 2., energyZPC, 1.);
857  //fHist_Corr3p_ZDN_SP_NN[0]->Fill(EvtCent, 3., (energyZPA+energyZPC), 1.);
858  //fHist_Corr3p_ZDN_SP_NN[0]->Fill(EvtCent, 4., energyZNA, 1.);
859  //fHist_Corr3p_ZDN_SP_NN[0]->Fill(EvtCent, 5., energyZNC, 1.);
860  //fHist_Corr3p_ZDN_SP_NN[0]->Fill(EvtCent, 6., (energyZNA+energyZNC), 1.);
861  fHist_Corr3p_ZDN_SP_NN[0]->Fill(EvtCent, 7., TwoQnQnV*energyZPA, (uNM*(uNM-1.)));
862  fHist_Corr3p_ZDN_SP_NN[0]->Fill(EvtCent, 8., TwoQnQnV*energyZPC, (uNM*(uNM-1.)));
863  fHist_Corr3p_ZDN_SP_NN[0]->Fill(EvtCent, 9., TwoQnQnV*(energyZPC+energyZPA), (uNM*(uNM-1.)));
864  fHist_Corr3p_ZDN_SP_NN[0]->Fill(EvtCent, 10., TwoQnQnV*energyZNA, (uNM*(uNM-1.)));
865  fHist_Corr3p_ZDN_SP_NN[0]->Fill(EvtCent, 11., TwoQnQnV*energyZNC, (uNM*(uNM-1.)));
866  fHist_Corr3p_ZDN_SP_NN[0]->Fill(EvtCent, 12., TwoQnQnV*(energyZNC+energyZNA), (uNM*(uNM-1.)));
867  //-----------------------------------------
868 
869 
870 
871 
872  //CME w.r.t V0C EP:
873  TwoQpQnV = 0.; TwoQpQpV = 0.; TwoQnQnV = 0.;
874  TwoQpQnV = ((uPRe*uNRe-uPIm*uNIm)*QxcnCor + (uPRe*uNIm+uPIm*uNRe)*QycnCor) / (uPM*uNM) ;
875  TwoQpQpV = ((uPRe*uPRe-uPIm*uPIm-uP2Re)*QxcnCor + (2.*uPRe*uPIm-uP2Im)*QycnCor) / (uPM*(uPM-1.)) ;
876  TwoQnQnV = ((uNRe*uNRe-uNIm*uNIm-uN2Re)*QxcnCor + (2.*uNRe*uNIm-uN2Im)*QycnCor) / (uNM*(uNM-1.)) ;
877 
878  //Fill profiles:
879  fHist_Corr3p_SP_Norm_PN[1]->Fill(EvtCent, TwoQpQnV, uPM*uNM);
880  fHist_Corr3p_SP_Norm_PP[1]->Fill(EvtCent, TwoQpQpV, (uPM*(uPM-1.)));
881  fHist_Corr3p_SP_Norm_NN[1]->Fill(EvtCent, TwoQnQnV, (uNM*(uNM-1.)));
882 
883  //-------- CME - ZDN correlators:---------
884  fHist_Corr3p_ZDN_SP_PN[1]->Fill(EvtCent, 0., TwoQpQnV, uPM*uNM);
885  fHist_Corr3p_ZDN_SP_PN[1]->Fill(EvtCent, 1., energyZPA, 1.);
886  fHist_Corr3p_ZDN_SP_PN[1]->Fill(EvtCent, 2., energyZPC, 1.);
887  fHist_Corr3p_ZDN_SP_PN[1]->Fill(EvtCent, 3., (energyZPA+energyZPC), 1.);
888  fHist_Corr3p_ZDN_SP_PN[1]->Fill(EvtCent, 4., energyZNA, 1.);
889  fHist_Corr3p_ZDN_SP_PN[1]->Fill(EvtCent, 5., energyZNC, 1.);
890  fHist_Corr3p_ZDN_SP_PN[1]->Fill(EvtCent, 6., (energyZNA+energyZNC), 1.);
891  fHist_Corr3p_ZDN_SP_PN[1]->Fill(EvtCent, 7., TwoQpQnV*energyZPA, uPM*uNM);
892  fHist_Corr3p_ZDN_SP_PN[1]->Fill(EvtCent, 8., TwoQpQnV*energyZPC, uPM*uNM);
893  fHist_Corr3p_ZDN_SP_PN[1]->Fill(EvtCent, 9., TwoQpQnV*(energyZPC+energyZPA), uPM*uNM);
894  fHist_Corr3p_ZDN_SP_PN[1]->Fill(EvtCent, 10., TwoQpQnV*energyZNA, uPM*uNM);
895  fHist_Corr3p_ZDN_SP_PN[1]->Fill(EvtCent, 11., TwoQpQnV*energyZNC, uPM*uNM);
896  fHist_Corr3p_ZDN_SP_PN[1]->Fill(EvtCent, 12., TwoQpQnV*(energyZNC+energyZNA), uPM*uNM);
897 
898  fHist_Corr3p_ZDN_SP_PP[1]->Fill(EvtCent, 0., TwoQpQpV, (uPM*(uPM-1.)));
899  //fHist_Corr3p_ZDN_SP_PP[1]->Fill(EvtCent, 1., energyZPA, 1.);
900  //fHist_Corr3p_ZDN_SP_PP[1]->Fill(EvtCent, 2., energyZPC, 1.);
901  //fHist_Corr3p_ZDN_SP_PP[1]->Fill(EvtCent, 3., (energyZPA+energyZPC), 1.);
902  //fHist_Corr3p_ZDN_SP_PP[1]->Fill(EvtCent, 4., energyZNA, 1.);
903  //fHist_Corr3p_ZDN_SP_PP[1]->Fill(EvtCent, 5., energyZNC, 1.);
904  //fHist_Corr3p_ZDN_SP_PP[1]->Fill(EvtCent, 6., (energyZNA+energyZNC), 1.);
905  fHist_Corr3p_ZDN_SP_PP[1]->Fill(EvtCent, 7., TwoQpQpV*energyZPA, (uPM*(uPM-1.)));
906  fHist_Corr3p_ZDN_SP_PP[1]->Fill(EvtCent, 8., TwoQpQpV*energyZPC, (uPM*(uPM-1.)));
907  fHist_Corr3p_ZDN_SP_PP[1]->Fill(EvtCent, 9., TwoQpQpV*(energyZPC+energyZPA), (uPM*(uPM-1.)));
908  fHist_Corr3p_ZDN_SP_PP[1]->Fill(EvtCent, 10., TwoQpQpV*energyZNA, (uPM*(uPM-1.)));
909  fHist_Corr3p_ZDN_SP_PP[1]->Fill(EvtCent, 11., TwoQpQpV*energyZNC, (uPM*(uPM-1.)));
910  fHist_Corr3p_ZDN_SP_PP[1]->Fill(EvtCent, 12., TwoQpQpV*(energyZNC+energyZNA), (uPM*(uPM-1.)));
911 
912  fHist_Corr3p_ZDN_SP_NN[1]->Fill(EvtCent, 0., TwoQnQnV, (uNM*(uNM-1.)));
913  //fHist_Corr3p_ZDN_SP_NN[1]->Fill(EvtCent, 1., energyZPA, 1.);
914  //fHist_Corr3p_ZDN_SP_NN[1]->Fill(EvtCent, 2., energyZPC, 1.);
915  //fHist_Corr3p_ZDN_SP_NN[1]->Fill(EvtCent, 3., (energyZPA+energyZPC), 1.);
916  //fHist_Corr3p_ZDN_SP_NN[1]->Fill(EvtCent, 4., energyZNA, 1.);
917  //fHist_Corr3p_ZDN_SP_NN[1]->Fill(EvtCent, 5., energyZNC, 1.);
918  //fHist_Corr3p_ZDN_SP_NN[1]->Fill(EvtCent, 6., (energyZNA+energyZNC), 1.);
919  fHist_Corr3p_ZDN_SP_NN[1]->Fill(EvtCent, 7., TwoQnQnV*energyZPA, (uNM*(uNM-1.)));
920  fHist_Corr3p_ZDN_SP_NN[1]->Fill(EvtCent, 8., TwoQnQnV*energyZPC, (uNM*(uNM-1.)));
921  fHist_Corr3p_ZDN_SP_NN[1]->Fill(EvtCent, 9., TwoQnQnV*(energyZPC+energyZPA), (uNM*(uNM-1.)));
922  fHist_Corr3p_ZDN_SP_NN[1]->Fill(EvtCent, 10., TwoQnQnV*energyZNA, (uNM*(uNM-1.)));
923  fHist_Corr3p_ZDN_SP_NN[1]->Fill(EvtCent, 11., TwoQnQnV*energyZNC, (uNM*(uNM-1.)));
924  fHist_Corr3p_ZDN_SP_NN[1]->Fill(EvtCent, 12., TwoQnQnV*(energyZNC+energyZNA), (uNM*(uNM-1.)));
925  //-----------------------------------------
926 
927 
928 
929  //V0A-V0C SP resolution:
930  fHist_Reso2n_SP_Norm_Det[0]->Fill(EvtCent, (QxcnCor*QxanCor+QycnCor*QyanCor));
931  //V0A-TPC SP resolution:
932  fHist_Reso2n_SP_Norm_Det[1]->Fill(EvtCent, (QTPCRe*QxanCor+QTPCIm*QyanCor));
933  //V0C-TPC SP resolution:
934  fHist_Reso2n_SP_Norm_Det[2]->Fill(EvtCent, (QTPCRe*QxcnCor+QTPCIm*QycnCor));
935 
936  //V0A-V0C:
937  fHist_Reso2n_ZDN_SP_Det[0]->Fill(EvtCent, 0., (QxcnCor*QxanCor+QycnCor*QyanCor));
938  fHist_Reso2n_ZDN_SP_Det[0]->Fill(EvtCent, 1., (QxcnCor*QxanCor+QycnCor*QyanCor)*energyZPA);
939  fHist_Reso2n_ZDN_SP_Det[0]->Fill(EvtCent, 2., (QxcnCor*QxanCor+QycnCor*QyanCor)*energyZPC);
940  fHist_Reso2n_ZDN_SP_Det[0]->Fill(EvtCent, 3., (QxcnCor*QxanCor+QycnCor*QyanCor)*(energyZPA+energyZPC));
941  fHist_Reso2n_ZDN_SP_Det[0]->Fill(EvtCent, 4., (QxcnCor*QxanCor+QycnCor*QyanCor)*energyZNA);
942  fHist_Reso2n_ZDN_SP_Det[0]->Fill(EvtCent, 5., (QxcnCor*QxanCor+QycnCor*QyanCor)*energyZNC);
943  fHist_Reso2n_ZDN_SP_Det[0]->Fill(EvtCent, 6., (QxcnCor*QxanCor+QycnCor*QyanCor)*(energyZNA+energyZNC));
944 
945  //V0A-TPC
946  fHist_Reso2n_ZDN_SP_Det[1]->Fill(EvtCent, 0., (QTPCRe*QxanCor+QTPCIm*QyanCor));
947  fHist_Reso2n_ZDN_SP_Det[1]->Fill(EvtCent, 1., (QTPCRe*QxanCor+QTPCIm*QyanCor)*energyZPA);
948  fHist_Reso2n_ZDN_SP_Det[1]->Fill(EvtCent, 2., (QTPCRe*QxanCor+QTPCIm*QyanCor)*energyZPC);
949  fHist_Reso2n_ZDN_SP_Det[1]->Fill(EvtCent, 3., (QTPCRe*QxanCor+QTPCIm*QyanCor)*(energyZPA+energyZPC));
950  fHist_Reso2n_ZDN_SP_Det[1]->Fill(EvtCent, 4., (QTPCRe*QxanCor+QTPCIm*QyanCor)*energyZNA);
951  fHist_Reso2n_ZDN_SP_Det[1]->Fill(EvtCent, 5., (QTPCRe*QxanCor+QTPCIm*QyanCor)*energyZNC);
952  fHist_Reso2n_ZDN_SP_Det[1]->Fill(EvtCent, 6., (QTPCRe*QxanCor+QTPCIm*QyanCor)*(energyZNA+energyZNC));
953 
954  //V0C-TPC
955  fHist_Reso2n_ZDN_SP_Det[2]->Fill(EvtCent, 0., (QTPCRe*QxcnCor+QTPCIm*QycnCor));
956  fHist_Reso2n_ZDN_SP_Det[2]->Fill(EvtCent, 1., (QTPCRe*QxcnCor+QTPCIm*QycnCor)*energyZPA);
957  fHist_Reso2n_ZDN_SP_Det[2]->Fill(EvtCent, 2., (QTPCRe*QxcnCor+QTPCIm*QycnCor)*energyZPC);
958  fHist_Reso2n_ZDN_SP_Det[2]->Fill(EvtCent, 3., (QTPCRe*QxcnCor+QTPCIm*QycnCor)*(energyZPA+energyZPC));
959  fHist_Reso2n_ZDN_SP_Det[2]->Fill(EvtCent, 1., (QTPCRe*QxcnCor+QTPCIm*QycnCor)*energyZNA);
960  fHist_Reso2n_ZDN_SP_Det[2]->Fill(EvtCent, 2., (QTPCRe*QxcnCor+QTPCIm*QycnCor)*energyZNC);
961  fHist_Reso2n_ZDN_SP_Det[2]->Fill(EvtCent, 3., (QTPCRe*QxcnCor+QTPCIm*QycnCor)*(energyZNA+energyZNC));
962 
963  }
964 
965 
966  /* if(bFillAvgTPCQn) { //fill TPC Q-vect:
967  fHCos1nEtaPosVzPos->Fill(runindex,EvtCent,TMath::Cos(Psi2V0A));
968  fHSin1nEtaPosVzPos->Fill(runindex,EvtCent,TMath::Sin(Psi2V0A));
969  fHCos1nEtaPosVzNeg->Fill(runindex,EvtCent,TMath::Cos(Psi2V0C));
970  fHSin1nEtaPosVzNeg->Fill(runindex,EvtCent,TMath::Sin(Psi2V0C));
971 
972  fHCos2nEtaPosVzPos->Fill(runindex,EvtCent,TMath::Cos(2.*Psi2V0A));
973  fHSin2nEtaPosVzPos->Fill(runindex,EvtCent,TMath::Sin(2.*Psi2V0A));
974  fHCos2nEtaPosVzNeg->Fill(runindex,EvtCent,TMath::Cos(2.*Psi2V0C));
975  fHSin2nEtaPosVzNeg->Fill(runindex,EvtCent,TMath::Sin(2.*Psi2V0C));
976 
977  fHCos1nEtaNegVzNeg->Fill(runindex,EvtCent,TMath::Cos(Psi2TPC));
978  fHSin1nEtaNegVzNeg->Fill(runindex,EvtCent,TMath::Sin(Psi2TPC));
979  fHCos2nEtaNegVzNeg->Fill(runindex,EvtCent,TMath::Cos(2.*Psi2TPC));
980  fHSin2nEtaNegVzNeg->Fill(runindex,EvtCent,TMath::Sin(2.*Psi2TPC));
981  } */
982 
983 
984 
985  PostData(1,fListHistos);
986  PostData(2,fListCalibs);
987 
988  fHist_Event_count->Fill(9.5);
989 
990  //if(fievent%20==0) {
991  //std::cout<<"irun = "<<runindex<<" n "<<n<<" cent= "<<EvtCent<<"\tsumMa= "<<sumMa<<"\tQxA = "<<QxanCor<<std::endl;
992  //std::cout<<" cent= "<<EvtCent<<"\teZNC= "<<energyZNC<<"\teZPC = "<<energyZPC<<"\teZNA= "<<energyZNA<<"\teZPA = "<<energyZPA<<std::endl;
993  //}
994 
995  fievent++;
996 
997 }
998 //======================= UserExec done =========================
999 
1000 
1001 
1003 {
1004  AliDebug(2,"\n ... AliAnalysisTaskCMEV0::Terminate() is being called ... \n");
1005 }
1006 
1007 
1008 
1009 
1010 
1011 
1012 
1013 
1014 
1015 
1016 
1017 
1018 
1019 void AliAnalysisTaskCMEV0::GetV0QvectAndMult(const AliAODVZERO *aodV0, Double_t& Qxan,Double_t& Qyan,Double_t& sumMa,Double_t& Qxcn,Double_t& Qycn,Double_t& sumMc)
1020 {
1021  for(Int_t iV0 = 0; iV0 < 64; iV0++) {
1022  /*if(fRemChV0A){
1023  if(iV0 == 46)
1024  continue;
1025  }*/
1026  Double_t phiV0 = TMath::PiOver4()*(0.5 + iV0 % 8);
1027  Float_t multv0 = aodV0->GetMultiplicity(iV0);
1028 
1029  if(iV0 < 32) {
1030  Double_t multCorC = -10;
1031 
1032  if(iV0 < 8)
1033  multCorC = multv0/fMultV0->GetBinContent(iV0+1)*fMultV0->GetBinContent(1);
1034  else if(iV0 >= 8 && iV0 < 16)
1035  multCorC = multv0/fMultV0->GetBinContent(iV0+1)*fMultV0->GetBinContent(9);
1036  else if(iV0 >= 16 && iV0 < 24)
1037  multCorC = multv0/fMultV0->GetBinContent(iV0+1)*fMultV0->GetBinContent(17);
1038  else if(iV0 >= 24 && iV0 < 32)
1039  multCorC = multv0/fMultV0->GetBinContent(iV0+1)*fMultV0->GetBinContent(25);
1040 
1041  if(multCorC < 0){
1042  cout<<"Problem with multiplicity in V0C"<<endl;
1043  continue;
1044  }
1045  Qxcn += TMath::Cos(fHarmonic*phiV0) * multCorC;
1046  Qycn += TMath::Sin(fHarmonic*phiV0) * multCorC;
1047 
1048  sumMc = sumMc + multCorC;
1049  }
1050  else{
1051  Double_t multCorA = -10;
1052 
1053  if(iV0 >= 32 && iV0 < 40)
1054  multCorA = multv0/fMultV0->GetBinContent(iV0+1)*fMultV0->GetBinContent(33);
1055  else if(iV0 >= 40 && iV0 < 48)
1056  multCorA = multv0/fMultV0->GetBinContent(iV0+1)*fMultV0->GetBinContent(41);
1057  else if(iV0 >= 48 && iV0 < 56)
1058  multCorA = multv0/fMultV0->GetBinContent(iV0+1)*fMultV0->GetBinContent(49);
1059  else if(iV0 >= 56 && iV0 < 64)
1060  multCorA = multv0/fMultV0->GetBinContent(iV0+1)*fMultV0->GetBinContent(57);
1061 
1062  if(multCorA < 0){
1063  cout<<"Problem with multiplicity in V0A"<<endl;
1064  continue;
1065  }
1066  Qxan += TMath::Cos(fHarmonic*phiV0) * multCorA;
1067  Qyan += TMath::Sin(fHarmonic*phiV0) * multCorA;
1068 
1069  sumMa = sumMa + multCorA;
1070  }
1071  }
1072 }//-------- Get V0 QVect and Multiplicity -----
1073 
1075 {
1076  if(fListZDNCorr){
1077  fHCorrectZDNP = (TH2D *) fListZDNCorr->FindObject(Form("fHist_ZDC_All_Wgt_VsCent_Run%d",run));
1078  }
1079  else{
1080  fHCorrectZDNP = NULL;
1081  printf("\n\n ********** ZDC Wgt Histograms NotFound ***************\n\n");
1082  exit(1);
1083  }
1084 }
1085 
1087 {
1088  /*if(fListNUACorr){
1089  fHCorrectNUApos = (TH3F *) fListNUACorr->FindObject(Form("fHist_WgtPos_EtaPhiVz_Run%d",run));
1090  fHCorrectNUAneg = (TH3F *) fListNUACorr->FindObject(Form("fHist_WgtNeg_EtaPhiVz_Run%d",run));
1091  }
1092  else{
1093  printf("\n\n ********** NUA Correction Histograms NotFound ***************\n\n");
1094  exit(1);
1095  }
1096  */
1097 
1098  Int_t centBin = -1;
1099 
1100  if(cent<5.0){ centBin = 0;}
1101  else if(cent>=5.0 && cent<10.0){centBin = 1;}
1102  else if(cent>=10.0 && cent<20.0){centBin = 2;}
1103  else if(cent>=20.0) {centBin = 3;}
1104 
1105 
1106  if(fListNUACorr){
1107  fHCorrectNUApos = (TH3D *) fListNUACorr->FindObject(Form("fHist_NUA_VzPhiEta_Pos_Cent%d_Run%d",centBin,run));
1108  fHCorrectNUAneg = (TH3D *) fListNUACorr->FindObject(Form("fHist_NUA_VzPhiEta_Neg_Cent%d_Run%d",centBin,run));
1109  }
1110  else{
1111  printf("\n\n ********** NUA Correction File/mList Not Found EXIT..!! ***************\n\n");
1112  fHCorrectNUApos = NULL;
1113  fHCorrectNUAneg = NULL;
1114  exit(1);
1115  }
1116 
1117  /*
1118  if(!gGrid){
1119  TGrid::Connect("alien://");
1120  }
1121 
1122  //from Rihan's file:
1123  TFile *fNUApn = NULL;
1124 
1125  fNUApn = TFile::Open("alien:///alice/cern.ch/user/m/mhaque/calib_files/Run2015o_NUA_PosNeg_RunbyRun_Oct5.root");
1126  TList *mListPN = dynamic_cast<TList*> (fNUApn->FindObjectAny("fListTrkRecnter"));
1127 
1128  if(mListPN){
1129  fHCorrectNUApos = (TH3F *) mListPN->FindObject(Form("fHist_NUA_VzPhiEta_Pos_Cent%d_Run%d",centBin,run));
1130  fHCorrectNUAneg = (TH3F *) mListPN->FindObject(Form("fHist_NUA_VzPhiEta_Neg_Cent%d_Run%d",centBin,run));
1131  }
1132  else{
1133  printf("\n\n ********** NUA Correction File/mList Not Found EXIT(1) ***************\n\n");
1134  fHCorrectNUApos = NULL;
1135  fHCorrectNUAneg = NULL;
1136  exit(1);
1137  }
1138  */
1139 
1140  /* //from Jacopo's NUA file:
1141  TFile *fNUApos = NULL;
1142  TFile *fNUAneg = NULL;
1143 
1144  fNUApos = TFile::Open("alien:///alice/cern.ch/user/m/mhaque/calib_files/15oHI_FB768_PosCh_CenPhiEtaWeights_VtxRbR.root");
1145  fNUAneg = TFile::Open("alien:///alice/cern.ch/user/m/mhaque/calib_files/15oHI_FB768_NegCh_CenPhiEtaWeights_VtxRbR.root");
1146 
1147  TList *mListPos = dynamic_cast<TList*> (fNUApos->FindObjectAny("CenPhiEta Weights"));
1148  TList *mListNeg = dynamic_cast<TList*> (fNUAneg->FindObjectAny("CenPhiEta Weights"));
1149 
1150  if(mListPos){
1151  fHCorrectNUApos = (TH3F *) mListPos->FindObject(Form("CRCQVecPhiHistVtx[%d][%d]",centBin,run));
1152  }
1153  if(mListNeg){
1154  fHCorrectNUAneg = (TH3F *) mListNeg->FindObject(Form("CRCQVecPhiHistVtx[%d][%d]",centBin,run));
1155  } */
1156 
1158  printf("\n\n ******** could not open NUA Histograms for run %d *********\n\n",run);
1159  exit(1);
1160  }
1161 }
1162 
1163 
1164 
1166 {
1167  if(!gGrid){
1168  TGrid::Connect("alien://");
1169  }
1170 
1171  TFile* foadb = 0;
1172  //if(!fRemChV0A)
1173  foadb = TFile::Open("alien:///alice/cern.ch/user/a/adobrin/calibV0HIR.root");
1174  //else
1175  //foadb = TFile::Open("alien:///alice/cern.ch/user/a/adobrin/calibV0HIRNoCh46V0A.root");
1176 
1177  if(!foadb){
1178  printf("OADB V0 calibration file cannot be opened\n");
1179  return;
1180  }
1181 
1182  AliOADBContainer* cont = (AliOADBContainer*) foadb->Get("hMultV0BefCorPfpx");
1183  if(!cont){
1184  printf("OADB object hMultV0BefCorr is not available in the file\n");
1185  return;
1186  }
1187  if(!(cont->GetObject(run))){
1188  printf("OADB object hMultV0BefCorPfpx is not available for run %i\n", run);
1189  return;
1190  }
1191  fMultV0 = ((TH1D*) cont->GetObject(run));
1192 
1193  AliOADBContainer* contQxnam = 0;
1194  if (fHarmonic == 2.)
1195  contQxnam = (AliOADBContainer*) foadb->Get("fqxa2m");
1196  else
1197  contQxnam = (AliOADBContainer*) foadb->Get("fqxa3m");
1198 
1199  if(!contQxnam){
1200  printf("OADB object fqxanm is not available in the file\n");
1201  return;
1202  }
1203  if(!(contQxnam->GetObject(run))){
1204  printf("OADB object fqxanm is not available for run %i\n", run);
1205  return;
1206  }
1207  fQxnmV0A = ((TH1D*) contQxnam->GetObject(run));
1208 
1209  AliOADBContainer* contQynam = 0;
1210  if (fHarmonic == 2.)
1211  contQynam = (AliOADBContainer*) foadb->Get("fqya2m");
1212  else if (fHarmonic == 3.)
1213  contQynam = (AliOADBContainer*) foadb->Get("fqya3m");
1214  else if (fHarmonic == 4.)
1215  contQynam = (AliOADBContainer*) foadb->Get("fqya4m");
1216 
1217  if(!contQynam){
1218  printf("OADB object fqyanm is not available in the file\n");
1219  return;
1220  }
1221  if(!(contQynam->GetObject(run))){
1222  printf("OADB object fqyanm is not available for run %i\n", run);
1223  return;
1224  }
1225  fQynmV0A = ((TH1D*) contQynam->GetObject(run));
1226 
1227  AliOADBContainer* contQxnas = 0;
1228  if (fHarmonic == 2.)
1229  contQxnas = (AliOADBContainer*) foadb->Get("fqxa2s");
1230  else
1231  contQxnas = (AliOADBContainer*) foadb->Get("fqxa3s");
1232 
1233  if(!contQxnas){
1234  printf("OADB object fqxans is not available in the file\n");
1235  return;
1236  }
1237  if(!(contQxnas->GetObject(run))){
1238  printf("OADB object fqxans is not available for run %i\n", run);
1239  return;
1240  }
1241  fQxnsV0A = ((TH1D*) contQxnas->GetObject(run));
1242 
1243  AliOADBContainer* contQynas = 0;
1244  if (fHarmonic == 2.)
1245  contQynas = (AliOADBContainer*) foadb->Get("fqya2s");
1246  else if (fHarmonic == 3.)
1247  contQynas = (AliOADBContainer*) foadb->Get("fqya3s");
1248  else if (fHarmonic == 4.)
1249  contQynas = (AliOADBContainer*) foadb->Get("fqya4s");
1250 
1251  if(!contQynas){
1252  printf("OADB object fqyans is not available in the file\n");
1253  return;
1254  }
1255  if(!(contQynas->GetObject(run))){
1256  printf("OADB object fqyans is not available for run %i\n", run);
1257  return;
1258  }
1259  fQynsV0A = ((TH1D*) contQynas->GetObject(run));
1260 
1261 
1262 
1263  AliOADBContainer* contQxncm = 0;
1264  if (fHarmonic == 2.)
1265  contQxncm = (AliOADBContainer*) foadb->Get("fqxc2m");
1266  else
1267  contQxncm = (AliOADBContainer*) foadb->Get("fqxc3m");
1268 
1269  if(!contQxncm){
1270  printf("OADB object fqxcnm is not available in the file\n");
1271  return;
1272  }
1273  if(!(contQxncm->GetObject(run))){
1274  printf("OADB object fqxcnm is not available for run %i\n", run);
1275  return;
1276  }
1277  fQxnmV0C = ((TH1D*) contQxncm->GetObject(run));
1278 
1279 
1280 
1281  AliOADBContainer* contQyncm = 0;
1282  if (fHarmonic == 2.)
1283  contQyncm = (AliOADBContainer*) foadb->Get("fqyc2m");
1284  else if (fHarmonic == 3.)
1285  contQyncm = (AliOADBContainer*) foadb->Get("fqyc3m");
1286  else if (fHarmonic == 4.)
1287  contQyncm = (AliOADBContainer*) foadb->Get("fqyc4m");
1288 
1289  if(!contQyncm){
1290  printf("OADB object fqyc2m is not available in the file\n");
1291  return;
1292  }
1293  if(!(contQyncm->GetObject(run))){
1294  printf("OADB object fqyc2m is not available for run %i\n", run);
1295  return;
1296  }
1297  fQynmV0C = ((TH1D*) contQyncm->GetObject(run));
1298 
1299 
1300  AliOADBContainer* contQxncs = 0;
1301  if (fHarmonic == 2.)
1302  contQxncs = (AliOADBContainer*) foadb->Get("fqxc2s");
1303  else
1304  contQxncs = (AliOADBContainer*) foadb->Get("fqxc3s");
1305 
1306  if(!contQxncs){
1307  printf("OADB object fqxc2s is not available in the file\n");
1308  return;
1309  }
1310  if(!(contQxncs->GetObject(run))){
1311  printf("OADB object fqxc2s is not available for run %i\n", run);
1312  return;
1313  }
1314  fQxnsV0C = ((TH1D*) contQxncs->GetObject(run));
1315 
1316 
1317  AliOADBContainer* contQyncs = 0;
1318  if (fHarmonic == 2.)
1319  contQyncs = (AliOADBContainer*) foadb->Get("fqyc2s");
1320  else if (fHarmonic == 3.)
1321  contQyncs = (AliOADBContainer*) foadb->Get("fqyc3s");
1322  else if (fHarmonic == 4.)
1323  contQyncs = (AliOADBContainer*) foadb->Get("fqyc4s");
1324 
1325  if(!contQyncs){
1326  printf("OADB object fqycnm is not available in the file\n");
1327  return;
1328  }
1329  if(!(contQyncs->GetObject(run))){
1330  printf("OADB object fqycns is not available for run %i\n", run);
1331  return;
1332  }
1333  fQynsV0C = ((TH1D*) contQyncs->GetObject(run));
1334 }//------- OADB container ------
1335 
1336 
1337 
1338 
1339 double AliAnalysisTaskCMEV0::GetWDist(const AliVVertex* v0, const AliVVertex* v1)
1340 {
1341  // calculate sqrt of weighted distance to other vertex
1342  if (!v0 || !v1) {
1343  AliDebug(2,"\n\n ::GetWDist => One of vertices is not valid\n\n");
1344  return 0;
1345  }
1346  static TMatrixDSym vVb(3);
1347  double dist = -1;
1348  double dx = v0->GetX()-v1->GetX();
1349  double dy = v0->GetY()-v1->GetY();
1350  double dz = v0->GetZ()-v1->GetZ();
1351  double cov0[6],cov1[6];
1352  v0->GetCovarianceMatrix(cov0);
1353  v1->GetCovarianceMatrix(cov1);
1354  vVb(0,0) = cov0[0]+cov1[0];
1355  vVb(1,1) = cov0[2]+cov1[2];
1356  vVb(2,2) = cov0[5]+cov1[5];
1357  vVb(1,0) = vVb(0,1) = cov0[1]+cov1[1];
1358  vVb(0,2) = vVb(1,2) = vVb(2,0) = vVb(2,1) = 0.;
1359  vVb.InvertFast();
1360  if (!vVb.IsValid()) {
1361  AliDebug(2,"Singular Matrix\n");
1362  return dist;
1363  }
1364  dist = vVb(0,0)*dx*dx + vVb(1,1)*dy*dy + vVb(2,2)*dz*dz
1365  + 2*vVb(0,1)*dx*dy + 2*vVb(0,2)*dx*dz + 2*vVb(1,2)*dy*dz;
1366  return dist>0 ? TMath::Sqrt(dist) : -1;
1367 }
1368 
1370  { // check for multi-vertexer pile-up
1371  const int kMinPlpContrib = 5;
1372  const double kMaxPlpChi2 = 5.0;
1373  const double kMinWDist = 15;
1374 
1375  const AliVVertex* vtPrm = 0;
1376  const AliVVertex* vtPlp = 0;
1377 
1378  int nPlp = 0;
1379 
1380  if(!(nPlp=faod->GetNumberOfPileupVerticesTracks()))
1381  return kFALSE;
1382 
1383  vtPrm = faod->GetPrimaryVertex();
1384  if(vtPrm == faod->GetPrimaryVertexSPD())
1385  return kTRUE; // there are pile-up vertices but no primary
1386 
1387  //int bcPrim = vtPrm->GetBC();
1388 
1389  for(int ipl=0;ipl<nPlp;ipl++) {
1390  vtPlp = (const AliVVertex*)faod->GetPileupVertexTracks(ipl);
1391  if (vtPlp->GetNContributors() < kMinPlpContrib) continue;
1392  if (vtPlp->GetChi2perNDF() > kMaxPlpChi2) continue;
1393  //int bcPlp = vtPlp->GetBC();
1394  //if (bcPlp!=AliVTrack::kTOFBCNA && TMath::Abs(bcPlp-bcPrim)>2)
1395  // return kTRUE; // pile-up from other BC
1396 
1397  double wDst = GetWDist(vtPrm,vtPlp);
1398  if (wDst<kMinWDist) continue;
1399 
1400  return kTRUE; // pile-up: well separated vertices
1401  }
1402  return kFALSE;
1403 }
1404 
1405 
1406 
1407 
1408 
1409 
1411 
1412  Bool_t BisPileup=kFALSE;
1413 
1414  Double_t centrV0M=300;
1415  Double_t centrCL1=300;
1416  Double_t centrCL0=300;
1417  Double_t centrTRK=300;
1418 
1419  if(sDataSet=="2010"||sDataSet=="2011"){
1420  centrV0M = ((AliVAODHeader*)faod->GetHeader())->GetCentralityP()->GetCentralityPercentile("V0M");
1421  centrCL1 = ((AliVAODHeader*)faod->GetHeader())->GetCentralityP()->GetCentralityPercentile("CL1");
1422  centrCL0 = ((AliVAODHeader*)faod->GetHeader())->GetCentralityP()->GetCentralityPercentile("CL0");
1423  centrTRK = ((AliVAODHeader*)faod->GetHeader())->GetCentralityP()->GetCentralityPercentile("TRK");
1424  }
1425  else{
1426  fMultSelection = (AliMultSelection*) InputEvent()->FindListObject("MultSelection");
1427  if(!fMultSelection) {
1428  printf("\n\n **WARNING** ::UserExec() AliMultSelection object not found.\n\n");
1429  exit(1);
1430  }
1431  centrV0M = fMultSelection->GetMultiplicityPercentile("V0M");
1432  centrCL1 = fMultSelection->GetMultiplicityPercentile("CL1");
1433  centrCL0 = fMultSelection->GetMultiplicityPercentile("CL0");
1434  centrTRK = fMultSelection->GetMultiplicityPercentile("TRK");
1435  }// 2015
1436 
1437 
1438  if(fRejectPileUp && InputEvent()) {
1439  //if(!fCutsEvent->IsSelected(InputEvent(),MCEvent())) return;
1440  if(sDataSet!="2015") {
1441  if(PileUpMultiVertex(faod)) {
1442  fPileUpCount->Fill(0.5);
1443  BisPileup=kTRUE;
1444  }
1445  Int_t isPileup = faod->IsPileupFromSPD(3);
1446  if(isPileup != 0) {
1447  fPileUpCount->Fill(1.5);
1448  //BisPileup=kTRUE; //
1449  }
1450  if(((AliAODHeader*)faod->GetHeader())->GetRefMultiplicityComb08() < 0) {
1451  fPileUpCount->Fill(2.5);
1452  BisPileup=kTRUE;
1453  }
1454  if(faod->IsIncompleteDAQ()) {
1455  fPileUpCount->Fill(3.5);
1456  BisPileup=kTRUE;
1457  }
1458 
1459  //check vertex consistency
1460  const AliAODVertex* vtTrc = faod->GetPrimaryVertex();
1461  const AliAODVertex* vtSPD = faod->GetPrimaryVertexSPD();
1462 
1463  if(vtTrc->GetNContributors() < 2 || vtSPD->GetNContributors()<1) {
1464  fPileUpCount->Fill(5.5);
1465  BisPileup=kTRUE;
1466  }
1467 
1468  double covTrc[6], covSPD[6];
1469  vtTrc->GetCovarianceMatrix(covTrc);
1470  vtSPD->GetCovarianceMatrix(covSPD);
1471 
1472  double dz = vtTrc->GetZ() - vtSPD->GetZ();
1473 
1474  double errTot = TMath::Sqrt(covTrc[5]+covSPD[5]);
1475  double errTrc = TMath::Sqrt(covTrc[5]);
1476  double nsigTot = dz/errTot;
1477  double nsigTrc = dz/errTrc;
1478 
1479  if(TMath::Abs(dz)>0.2 || TMath::Abs(nsigTot)>10 || TMath::Abs(nsigTrc)>20) {
1480  fPileUpCount->Fill(6.5);
1481  BisPileup=kTRUE;
1482  }
1483  if(fAnalysisUtil->IsPileUpEvent(InputEvent())) {
1484  fPileUpCount->Fill(7.5);
1485  BisPileup=kTRUE;
1486  }
1487  }
1488 
1489  else{ //------------ pileup for 2015 data -----------------
1490  if(!fMultSelection->GetThisEventIsNotPileup())
1491  fPileUpMultSelCount->Fill(0.5);
1492  if(!fMultSelection->GetThisEventIsNotPileupMV())
1493  fPileUpMultSelCount->Fill(1.5);
1494  if(!fMultSelection->GetThisEventIsNotPileupInMultBins())
1495  fPileUpMultSelCount->Fill(2.5);
1496  if(!fMultSelection->GetThisEventHasNoInconsistentVertices())
1497  fPileUpMultSelCount->Fill(3.5);
1498  if(!fMultSelection->GetThisEventPassesTrackletVsCluster())
1499  fPileUpMultSelCount->Fill(4.5);
1500  if(!fMultSelection->GetThisEventIsNotAsymmetricInVZERO())
1501  fPileUpMultSelCount->Fill(5.5);
1502  if(!fMultSelection->GetThisEventIsNotIncompleteDAQ())
1503  fPileUpMultSelCount->Fill(6.5);
1504  if(!fMultSelection->GetThisEventHasGoodVertex2016())
1505  fPileUpMultSelCount->Fill(7.5);
1506 
1507  BisPileup=kFALSE;
1508 
1509  //-- pile-up a la Dobrin for LHC15o -----
1510  if(PileUpMultiVertex(faod)) {
1511  fPileUpCount->Fill(0.5);
1512  BisPileup=kTRUE;
1513  }
1514  Int_t isPileup = faod->IsPileupFromSPD(3);
1515  if(isPileup != 0) {
1516  fPileUpCount->Fill(1.5);
1517  BisPileup=kTRUE;
1518  }
1519  if(((AliAODHeader*)faod->GetHeader())->GetRefMultiplicityComb08() < 0) {
1520  fPileUpCount->Fill(2.5);
1521  BisPileup=kTRUE;
1522  }
1523  if(faod->IsIncompleteDAQ()) {
1524  fPileUpCount->Fill(3.5);
1525  BisPileup=kTRUE;
1526  }
1527  if(fabs(centrV0M-centrCL1)>7.5) {
1528  fPileUpCount->Fill(4.5);
1529  BisPileup=kTRUE;
1530  }
1531 
1532  // check vertex consistency
1533  const AliAODVertex* vtTrc = faod->GetPrimaryVertex();
1534  const AliAODVertex* vtSPD = faod->GetPrimaryVertexSPD();
1535 
1536  if(vtTrc->GetNContributors() < 2 || vtSPD->GetNContributors()<1) {
1537  fPileUpCount->Fill(5.5);
1538  BisPileup=kTRUE;
1539  }
1540 
1541  double covTrc[6], covSPD[6];
1542  vtTrc->GetCovarianceMatrix(covTrc);
1543  vtSPD->GetCovarianceMatrix(covSPD);
1544 
1545  double dz = vtTrc->GetZ() - vtSPD->GetZ();
1546 
1547  double errTot = TMath::Sqrt(covTrc[5]+covSPD[5]);
1548  double errTrc = TMath::Sqrt(covTrc[5]);
1549  double nsigTot = dz/errTot;
1550  double nsigTrc = dz/errTrc;
1551 
1552  if(TMath::Abs(dz)>0.2 || TMath::Abs(nsigTot)>10 || TMath::Abs(nsigTrc)>20) {
1553  fPileUpCount->Fill(6.5);
1554  BisPileup=kTRUE;
1555  }
1556 
1557  //cuts on tracks
1558  const Int_t nTracks = faod->GetNumberOfTracks();
1559  Int_t multEsd = ((AliAODHeader*)faod->GetHeader())->GetNumberOfESDTracks();
1560 
1561  //Int_t multTrk = 0;
1562  //Int_t multTrkBefC = 0;
1563  //Int_t multTrkTOFBefC = 0;
1564  Int_t multTPC = 0;
1565 
1566  for(Int_t it = 0; it < nTracks; it++) {
1567  AliAODTrack* aodTrk = (AliAODTrack*)faod->GetTrack(it);
1568  if(!aodTrk) {
1569  delete aodTrk;
1570  continue;
1571  }
1572  //if(aodTrk->TestFilterBit(32)){
1573  // multTrkBefC++;
1574  // if(TMath::Abs(aodTrk->GetTOFsignalDz()) <= 10. && aodTrk->GetTOFsignal() >= 12000. && aodTrk->GetTOFsignal() <= 25000.)
1575  // multTrkTOFBefC++;
1576  // if((TMath::Abs(aodTrk->Eta()) < 0.8) && (aodTrk->GetTPCNcls() >= 70) && (aodTrk->Pt() >= 0.2) && (aodTrk->Pt() < 20.))
1577  // multTrk++;
1578  //}
1579  if(aodTrk->TestFilterBit(128))
1580  multTPC++;
1581  } // end of for AOD track loop
1582 
1583  Double_t multTPCn = multTPC;
1584  Double_t multEsdn = multEsd;
1585  Double_t multESDTPCDif = multEsdn - multTPCn*3.38;
1586 
1587  /*if(multESDTPCDif > (fRejectPileUpTight?700.:15000.)) {
1588  fPileUpCount->Fill(7.5);
1589  BisPileup=kTRUE;
1590  }*/
1591  if(multESDTPCDif > 15000.){
1592  fPileUpCount->Fill(7.5);
1593  BisPileup=kTRUE;
1594  }
1595  else if(fRejectPileUpTight) {
1596  if(multESDTPCDif > 700.) {
1597  fPileUpCount->Fill(8.5);
1598  BisPileup=kTRUE;
1599  }
1600  if(BisPileup==kFALSE) {
1601  if(!fMultSelection->GetThisEventIsNotPileup()) BisPileup=kTRUE;
1602  if(!fMultSelection->GetThisEventIsNotPileupMV()) BisPileup=kTRUE;
1603  if(!fMultSelection->GetThisEventIsNotPileupInMultBins()) BisPileup=kTRUE;
1604  if(!fMultSelection->GetThisEventHasNoInconsistentVertices()) BisPileup=kTRUE;
1605  if(!fMultSelection->GetThisEventPassesTrackletVsCluster()) BisPileup=kTRUE;
1606  if(!fMultSelection->GetThisEventIsNotIncompleteDAQ()) BisPileup=kTRUE;
1607  if(!fMultSelection->GetThisEventHasGoodVertex2016()) BisPileup=kTRUE;
1608  if(BisPileup) fPileUpCount->Fill(9.5);
1609  }
1610  }
1611  }
1612  }
1613 
1614  return BisPileup;
1615 }//-------pile up function ------
1616 
1617 
1618 
1619 
1621 
1622  Int_t irun = -1;
1623 
1624  for(int i=0;i<fRunFlag;i++){
1625  if(run==runNums[i])
1626  {
1627  irun = i;
1628  break;
1629  }
1630  }
1631  if(irun<0) {
1632  printf("\n ... **WARNING** \n::UserExec() runnumber not listed.\n EXIT..\n");
1633  }
1634 
1635  return irun;
1636 }//------ GetCurrentRunIndex --------
1637 
1638 
1640 
1641  Int_t runArray_2010[89] = {139510, 139507, 139505, 139503, 139465, 139438, 139437, 139360, 139329, 139328, 139314, 139310, 139309, 139173, 139107, 139105, 139038, 139037, 139036, 139029, 139028, 138872, 138871, 138870, 138837, 138732, 138730, 138666, 138662, 138653, 138652, 138638, 138624, 138621, 138583, 138582, 138579, 138578, 138534, 138469, 138442, 138439, 138438, 138396, 138364, 138275, 138225, 138201, 138197, 138192, 138190, 137848, 137844, 137752, 137751, 137724, 137722, 137718, 137704, 137693, 137692, 137691, 137686, 137685, 137639, 137638, 137608, 137595, 137549, 137546, 137544, 137541, 137539, 137531, 137530, 137443, 137441, 137440, 137439, 137434, 137432, 137431, 137243, 137236, 137235, 137232, 137231, 137162, 137161};
1642 
1643  Int_t runArray_2011[68] = {167915, 168115, 168460, 169035, 169238, 169859, 170228, 167920, 168310, 168464, 169091, 169411, 169923, 170230, 167985, 168311, 168467, 169094, 169415, 170027, 170268, 167987, 168322, 168511, 169138, 169417, 170081, 170269, 167988, 168325, 168512, 169144, 169835, 170155, 170270, 168069, 168341, 168514, 169145, 169837, 170159, 170306, 168076, 168342, 168777, 169148, 169838, 170163, 170308, 168105, 168361, 168826, 169156, 169846, 170193, 170309, 168107, 168362, 168988, 169160, 169855, 170203, 168108, 168458, 168992, 169167, 169858, 170204};
1644 
1645  Int_t runArray_2015[90] = {246994, 246991, 246989, 246984, 246982, 246980, 246948, 246945, 246928, 246871, 246870, 246867, 246865, 246864, 246859, 246858, 246851, 246847, 246846, 246845, 246844, 246810, 246809, 246808, 246807, 246805, 246804, 246766, 246765, 246763, 246760, 246759, 246758, 246757, 246751, 246750, 246676, 246675, 246540, 246495, 246493, 246488, 246487, 246434, 246431, 246428, 246424, 246276, 246275, 246272, 246271, 246225, 246222, 246217, 246185, 246182, 246181, 246180, 246178, 246153, 246152, 246151, 246148, 246115, 246113, 246089, 246087, 246053, 246052, 246049, 246048, 246042, 246037, 246036, 246012, 246003, 246001, 245963, 245954, 245952, 245949, 245923, 245833, 245831, 245829, 245705, 245702, 245700, 245692, 245683};
1646 
1647  if(sPeriod=="2010"){
1648  fRunFlag = 89;
1649  for(int i=0;i<fRunFlag;i++)
1650  runNums[i] = runArray_2010[i];
1651  }
1652  else if(sPeriod=="2011"){
1653  fRunFlag = 68; //<-- 2011 check
1654  for(int i=0;i<fRunFlag;i++)
1655  runNums[i] = runArray_2011[i];
1656  }
1657  else if(sPeriod=="2015"){
1658  fRunFlag = 90;
1659  for(int i=0;i<fRunFlag;i++)
1660  runNums[i] = runArray_2015[i];
1661  }
1662  else{
1663  printf("\n\n ***** Run Number not defined for this data set. *******\n\n Please modify code..\n\n");
1664  exit(1);
1665  }
1666 
1667 }//------- InitializeRunArray ---------
1668 
1669 
1670 
1672 
1673  fHist_Event_count = new TH1F("fHist_Event_count"," ",20,0,20);
1674  fHist_Event_count->GetXaxis()->SetBinLabel(1,"Called Exec()");
1675  fHist_Event_count->GetXaxis()->SetBinLabel(2,"AOD Exist");
1676  fHist_Event_count->GetXaxis()->SetBinLabel(3,"PileUp");
1677  fHist_Event_count->GetXaxis()->SetBinLabel(4,"iCentSPD<90");
1678  fHist_Event_count->GetXaxis()->SetBinLabel(5,"V0 Mult>0");
1679  fHist_Event_count->GetXaxis()->SetBinLabel(6,"..TBA..");
1680 
1681  fHist_Event_count->GetXaxis()->SetBinLabel(10,"Final Event");
1683 
1684  fPileUpCount = new TH1F("fPileUpCount", "fPileUpCount", 12, 0., 12.);
1685  fPileUpCount->GetXaxis()->SetBinLabel(1,"plpMV");
1686  fPileUpCount->GetXaxis()->SetBinLabel(2,"fromSPD");
1687  fPileUpCount->GetXaxis()->SetBinLabel(3,"RefMultiplicityComb08");
1688  fPileUpCount->GetXaxis()->SetBinLabel(4,"IncompleteDAQ");
1689  fPileUpCount->GetXaxis()->SetBinLabel(5,"abs(V0M-CL1)>7.5");
1690  fPileUpCount->GetXaxis()->SetBinLabel(6,"missingVtx");
1691  fPileUpCount->GetXaxis()->SetBinLabel(7,"inconsistentVtx");
1692  fPileUpCount->GetXaxis()->SetBinLabel(8,"multESDTPCDif=15000");
1693  fPileUpCount->GetXaxis()->SetBinLabel(9,"multESDTPCDif=700");
1694  fPileUpCount->GetXaxis()->SetBinLabel(10,"extraPileUpMultSel");
1695  fListHistos->Add(fPileUpCount);
1696 
1697  fPileUpMultSelCount = new TH1F("fPileUpMultSelCount", "fPileUpMultSelCount", 10, 0., 10.);
1698  fPileUpMultSelCount->GetXaxis()->SetBinLabel(1,"IsNotPileup");
1699  fPileUpMultSelCount->GetXaxis()->SetBinLabel(2,"IsNotPileupMV");
1700  fPileUpMultSelCount->GetXaxis()->SetBinLabel(3,"IsNotPileupInMultBins");
1701  fPileUpMultSelCount->GetXaxis()->SetBinLabel(4,"InconsistentVertices");
1702  fPileUpMultSelCount->GetXaxis()->SetBinLabel(5,"TrackletVsCluster");
1703  fPileUpMultSelCount->GetXaxis()->SetBinLabel(6,"AsymmetricInVZERO");
1704  fPileUpMultSelCount->GetXaxis()->SetBinLabel(7,"IncompleteDAQ");
1705  fPileUpMultSelCount->GetXaxis()->SetBinLabel(8,"GoodVertex2016");
1707 
1708 
1709 
1710 
1711 
1712  //----- CME-ZDN correlator SP method---------
1713  for(int i=0;i<3;i++){ //ZDN_SP
1714  //Detector: 0 = V0A, 1 = V0C, 3 = Q-cumulant
1715  fHist_Corr3p_ZDN_SP_PN[i] = new TProfile2D(Form("fHist_Corr3p_ZDN_SP_PosNeg_Det%d",i+1),"opposit charge correlator",90,0,90,15,0,15,"");
1716  fHist_Corr3p_ZDN_SP_PN[i]->Sumw2();
1718  fHist_Corr3p_ZDN_SP_PP[i] = new TProfile2D(Form("fHist_Corr3p_ZDN_SP_PosPos_Det%d",i+1),"pos-pos charge correlator",90,0,90,15,0,15,"");
1719  fHist_Corr3p_ZDN_SP_PP[i]->Sumw2();
1721  fHist_Corr3p_ZDN_SP_NN[i] = new TProfile2D(Form("fHist_Corr3p_ZDN_SP_NegNeg_Det%d",i+1),"neg-neg charge correlator",90,0,90,15,0,15,"");
1722  fHist_Corr3p_ZDN_SP_NN[i]->Sumw2();
1724  }
1725  //SP Resolution:
1726  for(int i=0;i<3;i++){
1727  //Det: 0 = v0c-v0a, 1 = v0a-TPC, 2 = v0c-TPC,
1728  fHist_Reso2n_ZDN_SP_Det[i] = new TProfile2D(Form("fHist_Reso2n_ZDN_SP_DetComb%d",i+1),"Event plane Resolution",90,0,90,8,0,8,"");
1729  fHist_Reso2n_ZDN_SP_Det[i]->Sumw2();
1731  }
1732  //--------------------------------------------
1733 
1734  Double_t centRange[11] = {0,5,10,20,30,40,50,60,70,80,90};
1735 
1736  //----- CME SP method histograms ---------
1737  for(int i=0;i<3;i++){
1738  //Detector: 0 = V0A, 1 = V0C, 3 = Q-cumulant
1739  fHist_Corr3p_SP_Norm_PN[i] = new TProfile(Form("fHist_Corr3p_SP_Norm_PosNeg_Det%d",i+1),"opposit charge correlator",10,centRange,"");
1740  fHist_Corr3p_SP_Norm_PN[i]->Sumw2();
1742  fHist_Corr3p_SP_Norm_PP[i] = new TProfile(Form("fHist_Corr3p_SP_Norm_PosPos_Det%d",i+1),"pos-pos charge correlator",10,centRange,"");
1743  fHist_Corr3p_SP_Norm_PP[i]->Sumw2();
1745  fHist_Corr3p_SP_Norm_NN[i] = new TProfile(Form("fHist_Corr3p_SP_Norm_NegNeg_Det%d",i+1),"neg-neg charge correlator",10,centRange,"");
1746  fHist_Corr3p_SP_Norm_NN[i]->Sumw2();
1748  }
1749  //SP Resolution:
1750  for(int i=0;i<3;i++){
1751  //Det: 0 = v0c-v0a, 1 = v0a-TPC, 2 = v0c-TPC,
1752  fHist_Reso2n_SP_Norm_Det[i] = new TProfile(Form("fHist_Reso2n_SP_Norm_DetComb%d",i+1),"Event plane Resolution",10,centRange,"");
1753  fHist_Reso2n_SP_Norm_Det[i]->Sumw2();
1755  }
1756 
1757  //----- CME EP method histograms ---------
1758  for(int i=0;i<3;i++){
1759  //Detector: 0 = V0A, 1 = V0C, 3 = Q-cumulant
1760  fHist_Corr3p_EP_Norm_PN[i] = new TProfile(Form("fHist_Corr3p_EP_Norm_PosNeg_Det%d",i+1),"opposit charge correlator",10,centRange,"");
1761  fHist_Corr3p_EP_Norm_PN[i]->Sumw2();
1763  fHist_Corr3p_EP_Norm_PP[i] = new TProfile(Form("fHist_Corr3p_EP_Norm_PosPos_Det%d",i+1),"pos-pos charge correlator",10,centRange,"");
1764  fHist_Corr3p_EP_Norm_PP[i]->Sumw2();
1766  fHist_Corr3p_EP_Norm_NN[i] = new TProfile(Form("fHist_Corr3p_EP_Norm_NegNeg_Det%d",i+1),"neg-neg charge correlator",10,centRange,"");
1767  fHist_Corr3p_EP_Norm_NN[i]->Sumw2();
1769  }
1770  //EP Resolution:
1771  for(int i=0;i<3;i++){
1772  //Det: 0 = v0c-v0a, 1 = v0a-TPC, 2 = v0c-TPC,
1773  fHist_Reso2n_EP_Norm_Det[i] = new TProfile(Form("fHist_Reso2n_EP_Norm_DetComb%d",i+1),"Event plane Resolution",10,centRange,"");
1774  fHist_Reso2n_EP_Norm_Det[i]->Sumw2();
1776  }
1777 
1778  fHV0AEventPlaneVsCent = new TH2F("fHV0AEventPlaneVsCent","Psi2 from V0A",10,centRange,50,0,3.1415);
1780  fHV0CEventPlaneVsCent = new TH2F("fHV0CEventPlaneVsCent","Psi2 from V0C",10,centRange,50,0,3.1415);
1782  fHTPCEventPlaneVsCent = new TH2F("fHTPCEventPlaneVsCent","Psi2 from TPC",10,centRange,50,0,3.1415);
1784 
1785 
1786  Char_t name[100], title[100];
1787 
1788  TH1::SetDefaultSumw2();
1789 
1790  //Differential in pT:
1791  //Double_t pTRange[24] = {0,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.,1.2,1.4,1.6,1.8,2.,2.33,2.66,3.,3.5,4.,5.,6.,8.,10.};
1792 
1793  Double_t pTRange[21] = {0.0,0.2,0.4,0.6,0.8,1.0,1.2,1.4,1.6,1.8,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0};
1794 
1795  for(int i=0;i<6;i++){
1796  sprintf(name,"fHist_Corr3p_pTSum_EP_V0A_PN_Cent%d",i);
1797  sprintf(title,"PN 3p vs (pT1+pT2)/2, Cent %2.0f-%2.0f",centRange[i],centRange[i+1]);
1798  fHist_Corr3p_pTSum_EP_V0A_PN[i] = new TProfile(name,title,20,pTRange,"");
1800 
1801  sprintf(name,"fHist_Corr3p_pTSum_EP_V0A_PP_Cent%d",i);
1802  sprintf(title,"PP 3p vs (pT1+pT2)/2, Cent %2.0f-%2.0f",centRange[i],centRange[i+1]);
1803  fHist_Corr3p_pTSum_EP_V0A_PP[i] = new TProfile(name,title,20,pTRange,"");
1805 
1806  sprintf(name,"fHist_Corr3p_pTSum_EP_V0A_NN_Cent%d",i);
1807  sprintf(title,"NN 3p vs (pT1+pT2)/2, Cent %2.0f-%2.0f",centRange[i],centRange[i+1]);
1808  fHist_Corr3p_pTSum_EP_V0A_NN[i] = new TProfile(name,title,20,pTRange,"");
1810  //-----v0c----
1811  sprintf(name,"fHist_Corr3p_pTSum_EP_V0C_PN_Cent%d",i);
1812  sprintf(title,"PN 3p vs (pT1+pT2)/2, Cent %2.0f-%2.0f",centRange[i],centRange[i+1]);
1813  fHist_Corr3p_pTSum_EP_V0C_PN[i] = new TProfile(name,title,20,pTRange,"");
1815 
1816  sprintf(name,"fHist_Corr3p_pTSum_EP_V0C_PP_Cent%d",i);
1817  sprintf(title,"PP 3p vs (pT1+pT2)/2, Cent %2.0f-%2.0f",centRange[i],centRange[i+1]);
1818  fHist_Corr3p_pTSum_EP_V0C_PP[i] = new TProfile(name,title,20,pTRange,"");
1820 
1821  sprintf(name,"fHist_Corr3p_pTSum_EP_V0C_NN_Cent%d",i);
1822  sprintf(title,"NN 3p vs (pT1+pT2)/2, Cent %2.0f-%2.0f",centRange[i],centRange[i+1]);
1823  fHist_Corr3p_pTSum_EP_V0C_NN[i] = new TProfile(name,title,20,pTRange,"");
1825  }
1826 
1827 
1828  for(int i=0;i<6;i++){
1829  sprintf(name,"fHist_Corr3p_pTDiff_EP_V0A_PN_Cent%d",i);
1830  sprintf(title,"PN 3p vs |pT1-pT2|, Cent %2.0f-%2.0f",centRange[i],centRange[i+1]);
1831  fHist_Corr3p_pTDiff_EP_V0A_PN[i] = new TProfile(name,title,20,pTRange,"");
1833 
1834  sprintf(name,"fHist_Corr3p_pTDiff_EP_V0A_PP_Cent%d",i);
1835  sprintf(title,"PP 3p vs |pT1-pT2|, Cent %2.0f-%2.0f",centRange[i],centRange[i+1]);
1836  fHist_Corr3p_pTDiff_EP_V0A_PP[i] = new TProfile(name,title,20,pTRange,"");
1838 
1839  sprintf(name,"fHist_Corr3p_pTDiff_EP_V0A_NN_Cent%d",i);
1840  sprintf(title,"NN 3p vs |pT1-pT2|, Cent %2.0f-%2.0f",centRange[i],centRange[i+1]);
1841  fHist_Corr3p_pTDiff_EP_V0A_NN[i] = new TProfile(name,title,20,pTRange,"");
1843  //-----v0c----
1844  sprintf(name,"fHist_Corr3p_pTDiff_EP_V0C_PN_Cent%d",i);
1845  sprintf(title,"PN 3p vs |pT1-pT2|, Cent %2.0f-%2.0f",centRange[i],centRange[i+1]);
1846  fHist_Corr3p_pTDiff_EP_V0C_PN[i] = new TProfile(name,title,20,pTRange,"");
1848 
1849  sprintf(name,"fHist_Corr3p_pTDiff_EP_V0C_PP_Cent%d",i);
1850  sprintf(title,"PP 3p vs |pT1-pT2|, Cent %2.0f-%2.0f",centRange[i],centRange[i+1]);
1851  fHist_Corr3p_pTDiff_EP_V0C_PP[i] = new TProfile(name,title,20,pTRange,"");
1853 
1854  sprintf(name,"fHist_Corr3p_pTDiff_EP_V0C_NN_Cent%d",i);
1855  sprintf(title,"NN 3p vs |pT1-pT2|, Cent %2.0f-%2.0f",centRange[i],centRange[i+1]);
1856  fHist_Corr3p_pTDiff_EP_V0C_NN[i] = new TProfile(name,title,20,pTRange,"");
1858  }
1859 
1860 
1861  Double_t EtaRange[9] = {0.0,0.2,0.4,0.6,0.8,1.0,1.2,1.4,1.6};
1862 
1863  for(int i=0;i<6;i++){
1864  sprintf(name,"fHist_Corr3p_EtaDiff_EP_V0A_PN_Cent%d",i);
1865  sprintf(title,"PN 3p vs |Eta1-Eta2|, Cent %2.0f-%2.0f",centRange[i],centRange[i+1]);
1866  fHist_Corr3p_EtaDiff_EP_V0A_PN[i] = new TProfile(name,title,8,EtaRange,"");
1868 
1869  sprintf(name,"fHist_Corr3p_EtaDiff_EP_V0A_PP_Cent%d",i);
1870  sprintf(title,"PP 3p vs |Eta1-Eta2|, Cent %2.0f-%2.0f",centRange[i],centRange[i+1]);
1871  fHist_Corr3p_EtaDiff_EP_V0A_PP[i] = new TProfile(name,title,8,EtaRange,"");
1873 
1874  sprintf(name,"fHist_Corr3p_EtaDiff_EP_V0A_NN_Cent%d",i);
1875  sprintf(title,"NN 3p vs |Eta1-Eta2|, Cent %2.0f-%2.0f",centRange[i],centRange[i+1]);
1876  fHist_Corr3p_EtaDiff_EP_V0A_NN[i] = new TProfile(name,title,8,EtaRange,"");
1878  //-----v0c----
1879  sprintf(name,"fHist_Corr3p_EtaDiff_EP_V0C_PN_Cent%d",i);
1880  sprintf(title,"PN 3p vs |Eta1-Eta2|, Cent %2.0f-%2.0f",centRange[i],centRange[i+1]);
1881  fHist_Corr3p_EtaDiff_EP_V0C_PN[i] = new TProfile(name,title,8,EtaRange,"");
1883 
1884  sprintf(name,"fHist_Corr3p_EtaDiff_EP_V0C_PP_Cent%d",i);
1885  sprintf(title,"PP 3p vs |Eta1-Eta2|, Cent %2.0f-%2.0f",centRange[i],centRange[i+1]);
1886  fHist_Corr3p_EtaDiff_EP_V0C_PP[i] = new TProfile(name,title,8,EtaRange,"");
1888 
1889  sprintf(name,"fHist_Corr3p_EtaDiff_EP_V0C_NN_Cent%d",i);
1890  sprintf(title,"NN 3p vs |Eta1-Eta2|, Cent %2.0f-%2.0f",centRange[i],centRange[i+1]);
1891  fHist_Corr3p_EtaDiff_EP_V0C_NN[i] = new TProfile(name,title,8,EtaRange,"");
1893  }
1894 
1895 
1896 
1897 
1898 
1899  //=========== Calibtation Histograms etc ==================
1901 
1902  //for debug only, remove after stable code
1903  hUnderOverBinNUApos = new TH1F("hUnderOverBinNUApos","",90,0,90);
1905  hUnderOverBinNUAneg = new TH1F("hUnderOverBinNUAneg","",90,0,90);
1907 
1908  Double_t fCentBinQvect[16] = {0.,2.5,5,10,15,20,25,30,35,40,45,50,60,70,80,90};
1909 
1910  fHEnergyZNCvsCent = new TH2F("fHEnergyZNCvsCent","ZNC Energy vs cent",15,fCentBinQvect,4000,0,200000);
1912  fHEnergyZNAvsCent = new TH2F("fHEnergyZNAvsCent","ZNA Energy vs cent",15,fCentBinQvect,4000,0,200000);
1914  fHEnergyZPCvsCent = new TH2F("fHEnergyZPCvsCent","ZPC Energy vs cent",15,fCentBinQvect,2000,0,50000);
1916  fHEnergyZPAvsCent = new TH2F("fHEnergyZPAvsCent","ZPA Energy vs cent",15,fCentBinQvect,2000,0,50000);
1918 
1919  fHEnergyZNCvsCentRun = new TProfile2D("fHEnergyZNCvsCentRun","",90,0,90,90,0,90);
1921  fHEnergyZNAvsCentRun = new TProfile2D("fHEnergyZNAvsCentRun","",90,0,90,90,0,90);
1923  fHEnergyZPCvsCentRun = new TProfile2D("fHEnergyZPCvsCentRun","",90,0,90,90,0,90);
1925  fHEnergyZPAvsCentRun = new TProfile2D("fHEnergyZPAvsCentRun","",90,0,90,90,0,90);
1927 
1928  fHEnergyZPCvsZPA = new TH2F("fHEnergyZPCvsZPA","ZNC Energy vs cent",500,0,50000,500,0,50000);
1930  fHEnergyZNCvsZNA = new TH2F("fHEnergyZNCvsZNA","ZNC Energy vs cent",500,50000,150000,500,50000,150000);
1932 
1933  fHCentBinTrkRecenter = new TH1F("fHCentBinTrkRecenter","centrality Binning",15,fCentBinQvect);
1934 
1935  if(bFillAvgTPCQn){
1936  fHCos1nEtaPosVzPos = new TProfile2D("fHCos1nEtaPosVzPos","Cos(n*phi),Eta>0,Vz>0",fRunFlag,0,fRunFlag,15,fCentBinQvect);
1938  fHCos1nEtaNegVzPos = new TProfile2D("fHCos1nEtaNegVzPos","Cos(n*phi),Eta<0,Vz>0",fRunFlag,0,fRunFlag,15,fCentBinQvect);
1940  fHCos1nEtaPosVzNeg = new TProfile2D("fHCos1nEtaPosVzNeg","Cos(n*phi),Eta>0,Vz>0",fRunFlag,0,fRunFlag,15,fCentBinQvect);
1942  fHCos1nEtaNegVzNeg = new TProfile2D("fHCos1nEtaNegVzNeg","Cos(n*phi),Eta<0,Vz>0",fRunFlag,0,fRunFlag,15,fCentBinQvect);
1944  fHSin1nEtaPosVzPos = new TProfile2D("fHSin1nEtaPosVzPos","Sin(n*phi),Eta>0,Vz>0",fRunFlag,0,fRunFlag,15,fCentBinQvect);
1946  fHSin1nEtaNegVzPos = new TProfile2D("fHSin1nEtaNegVzPos","Sin(n*phi),Eta<0,Vz>0",fRunFlag,0,fRunFlag,15,fCentBinQvect);
1948  fHSin1nEtaPosVzNeg = new TProfile2D("fHSin1nEtaPosVzNeg","Sin(n*phi),Eta>0,Vz>0",fRunFlag,0,fRunFlag,15,fCentBinQvect);
1950  fHSin1nEtaNegVzNeg = new TProfile2D("fHSin1nEtaNegVzNeg","Sin(n*phi),Eta<0,Vz>0",fRunFlag,0,fRunFlag,15,fCentBinQvect);
1952 
1953  fHCos2nEtaPosVzPos = new TProfile2D("fHCos2nEtaPosVzPos","Cos(n*phi),Eta>0,Vz>0",fRunFlag,0,fRunFlag,15,fCentBinQvect);
1955  fHCos2nEtaNegVzPos = new TProfile2D("fHCos2nEtaNegVzPos","Cos(n*phi),Eta<0,Vz>0",fRunFlag,0,fRunFlag,15,fCentBinQvect);
1957  fHCos2nEtaPosVzNeg = new TProfile2D("fHCos2nEtaPosVzNeg","Cos(n*phi),Eta>0,Vz>0",fRunFlag,0,fRunFlag,15,fCentBinQvect);
1959  fHCos2nEtaNegVzNeg = new TProfile2D("fHCos2nEtaNegVzNeg","Cos(n*phi),Eta<0,Vz>0",fRunFlag,0,fRunFlag,15,fCentBinQvect);
1961  fHSin2nEtaPosVzPos = new TProfile2D("fHSin2nEtaPosVzPos","Sin(n*phi),Eta>0,Vz>0",fRunFlag,0,fRunFlag,15,fCentBinQvect);
1963  fHSin2nEtaNegVzPos = new TProfile2D("fHSin2nEtaNegVzPos","Sin(n*phi),Eta<0,Vz>0",fRunFlag,0,fRunFlag,15,fCentBinQvect);
1965  fHSin2nEtaPosVzNeg = new TProfile2D("fHSin2nEtaPosVzNeg","Sin(n*phi),Eta>0,Vz>0",fRunFlag,0,fRunFlag,15,fCentBinQvect);
1967  fHSin2nEtaNegVzNeg = new TProfile2D("fHSin2nEtaNegVzNeg","Sin(n*phi),Eta<0,Vz>0",fRunFlag,0,fRunFlag,15,fCentBinQvect);
1969  }
1970 
1971  Int_t gCentForNUA[5] = {0,5,10,20,90};
1972 
1973  if(bFillEtaPhiNUA){
1974  for(int i=0;i<4;i++){
1975  for(int j=0;j<fRunFlag;j++){
1976  sprintf(name,"fHistEtaPhiVz_Pos_Cent%d_Run%d",i,runNums[j]);
1977  sprintf(title,"eta,phi,Vz Pos Cent%d-%d%%",gCentForNUA[i],gCentForNUA[i+1]);
1978  fHist3DEtaPhiVz_Pos_Run[i][j] = new TH3F(name,title,10,-10,10,40,0,6.2832,16,-0.8,0.8);
1980 
1981  sprintf(name,"fHistEtaPhiVz_Neg_Cent%d_Run%d",i,runNums[j]);
1982  sprintf(title,"eta,phi,Vz Pos Cent%d-%d%%",gCentForNUA[i],gCentForNUA[i+1]);
1983  fHist3DEtaPhiVz_Neg_Run[i][j] = new TH3F(name,title,10,-10,10,40,0,6.2832,16,-0.8,0.8);
1985  }
1986  }
1987  }
1988 
1989 
1990 
1991 }
1992 
1993 
virtual void Terminate(Option_t *)
Bool_t CheckEventIsPileUp(AliAODEvent *faod)
TProfile2D * fHist_Corr3p_ZDN_SP_NN[3]
TProfile2D * fHCos1nEtaPosVzPos
sigma Qy2 V0C
TProfile * fHist_Corr3p_EP_Norm_PP[3]
double Double_t
Definition: External.C:58
Definition: External.C:260
TProfile2D * fHist_Corr3p_ZDN_SP_PP[3]
Norm = 10 centrality bins along X.
Float_t fHarmonic
Event centrality.
TProfile * fHist_Corr3p_pTDiff_EP_V0A_NN[6]
TH1D * fQynsV0C
sigma Qx2 V0C
Int_t fOldRunNum
number of total run
Definition: External.C:236
Bool_t PileUpMultiVertex(const AliAODEvent *faod)
TProfile * fHist_Corr3p_pTDiff_EP_V0C_PP[6]
const char * title
Definition: MakeQAPdf.C:27
TProfile * fHist_Corr3p_EtaDiff_EP_V0A_NN[6]
TH1D * fQxnmV0A
profile from V0 multiplicity
TProfile * fHist_Corr3p_SP_Norm_NN[3]
TProfile * fHist_Corr3p_pTSum_EP_V0C_NN[6]
AliFlowTrackSimple * GetTrack(Int_t i)
TList * fListHistos
Event selection.
TProfile * fHist_Corr3p_SP_Norm_PP[3]
Norm = 10 centrality bins along X.
TProfile * fHist_Corr3p_pTDiff_EP_V0C_PN[6]
AliAnalysisUtils * fAnalysisUtil
MultSelection (RUN2 centrality estimator)
TList * fListFBHijing
collection of Calib Histos
char Char_t
Definition: External.C:18
Int_t GetCurrentRunIndex(Int_t run)
TProfile * fHist_Corr3p_pTDiff_EP_V0C_NN[6]
TList * fListCalibs
collection of output
TProfile * fHist_Corr3p_SP_Norm_PN[3]
TProfile2D * fHist_Corr3p_ZDN_SP_PN[3]
TProfile * fHist_Corr3p_pTSum_EP_V0C_PN[6]
TProfile * fHist_Corr3p_EtaDiff_EP_V0A_PP[6]
TProfile * fHist_Corr3p_EtaDiff_EP_V0C_NN[6]
TH3F * fHist3DEtaPhiVz_Neg_Run[4][90]
4 centrality bin 90 Bins for Run. NUA
TH1F * hUnderOverBinNUAneg
//temporary Debug, remove for stable code
TProfile * fHist_Corr3p_EP_Norm_PN[3]
AliMultSelection * fMultSelection
input event
TH1F * fPileUpMultSelCount
event count with different cuts
TProfile * fHist_Corr3p_EtaDiff_EP_V0C_PP[6]
Double_t Phi() const
TProfile * fHist_Corr3p_pTSum_EP_V0C_PP[6]
TProfile2D * fHist_Reso2n_ZDN_SP_Det[3]
int Int_t
Definition: External.C:63
TH1D * fQynsV0A
sigma Qx2 V0A
TProfile * fHist_Corr3p_pTSum_EP_V0A_PP[6]
float Float_t
Definition: External.C:68
Definition: External.C:252
Definition: External.C:228
Definition: External.C:212
TProfile * fHist_Corr3p_pTSum_EP_V0A_NN[6]
Int_t fRunFlag
array of runnumbers
AliFlowEventSimple * fEvent
TProfile * fHist_Corr3p_pTDiff_EP_V0A_PP[6]
TProfile * fHist_Corr3p_pTDiff_EP_V0A_PN[6]
TH1F * fHist_Event_count
Harmonic.
TProfile * fHist_Corr3p_EtaDiff_EP_V0C_PN[6]
virtual void UserCreateOutputObjects()
TProfile * fHist_Corr3p_EP_Norm_NN[3]
void InitializeRunArray(TString sPeriod)
TProfile * fHist_Corr3p_pTSum_EP_V0A_PN[6]
TH3F * fHist3DEtaPhiVz_Pos_Run[4][90]
TH1F * fHCentBinTrkRecenter
//temporary Debug, remove for stable code
void GetNUACorrectionHist(Int_t run, Float_t cent)
TProfile * fHist_Reso2n_EP_Norm_Det[3]
Float_t EvtCent
counter of event for cout
void GetV0QvectAndMult(const AliAODVZERO *aodV0, Double_t &Qxan, Double_t &Qyan, Double_t &sumMa, Double_t &Qxcn, Double_t &Qycn, Double_t &sumMc)
const char Option_t
Definition: External.C:48
void GetZDCCorrectionHist(Int_t run)
Bool_t InPOISelection(Int_t poiType=1) const
TH1D * fQxnmV0C
sigma Qy2 V0A
Double_t Eta() const
const Double_t pi
bool Bool_t
Definition: External.C:53
virtual void UserExec(Option_t *option)
TProfile * fHist_Corr3p_EtaDiff_EP_V0A_PN[6]
TH1D * fFB_Efficiency_Cent[10]
4 centrality bin 90 Bins for Run. NUA
double GetWDist(const AliVVertex *v0, const AliVVertex *v1)
void OpenInfoCalbration(Int_t run)
TProfile * fHist_Reso2n_SP_Norm_Det[3]
Int_t NumberOfTracks() const