AliPhysics  4ffc478 (4ffc478)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliAnalysisTaskCRCZDC.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 thce 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  * analysis task for CRC with ZDC *
18  * *
19  * author: Jacopo Margutti *
20  * (margutti@nikhef.nl) *
21  **********************************/
22 
23 #include "Riostream.h" //needed as include
24 #include "TChain.h"
25 #include "TList.h"
26 #include "TTree.h"
27 #include "TRandom3.h"
28 #include "TTimeStamp.h"
29 #include "TStopwatch.h"
30 #include "TProfile.h"
31 #include <TList.h>
32 #include <TH1F.h>
33 #include <TH2F.h>
34 #include <TH3D.h>
35 #include <TFile.h>
36 #include <TString.h>
37 #include <TCanvas.h>
38 #include <TParticle.h>
39 #include "TProfile3D.h"
40 
41 #include "AliAnalysisManager.h"
42 #include "AliInputEventHandler.h"
43 #include "AliVEvent.h"
44 #include "AliESD.h"
45 #include "AliESDEvent.h"
46 #include "AliESDHeader.h"
47 #include "AliESDInputHandler.h"
48 #include "AliESDZDC.h"
49 #include "AliMultiplicity.h"
50 #include "AliAnalysisUtils.h"
51 #include "AliAODHandler.h"
52 #include "AliAODTrack.h"
53 #include "AliAODEvent.h"
54 #include "AliAODHeader.h"
55 #include "AliAODVertex.h"
56 #include "AliAODVZERO.h"
57 #include "AliAODZDC.h"
58 #include "AliAODMCHeader.h"
59 #include "AliMCEventHandler.h"
60 #include "AliMCEvent.h"
61 #include "AliHeader.h"
62 #include "AliVParticle.h"
63 #include "AliStack.h"
64 #include "AliAODMCParticle.h"
65 #include "AliAnalysisTaskSE.h"
66 #include "AliGenEventHeader.h"
67 #include "AliPhysicsSelectionTask.h"
68 #include "AliPhysicsSelection.h"
69 #include "AliBackgroundSelection.h"
70 #include "AliTriggerAnalysis.h"
71 #include "AliCentrality.h"
72 #include "AliAnalysisTaskCRCZDC.h"
73 #include "AliMultSelection.h"
74 #include "AliLumiTools.h"
75 
76 // ALICE Correction Framework
77 #include "AliCFManager.h"
78 
79 // Interface to Event generators to get Reaction Plane Angle
80 #include "AliGenCocktailEventHeader.h"
81 #include "AliGenPythiaEventHeader.h"
82 #include "AliGenHijingEventHeader.h"
83 #include "AliGenGeVSimEventHeader.h"
84 #include "AliGenEposEventHeader.h"
85 
86 // Interface to Load short life particles
87 #include "TObjArray.h"
88 #include "AliFlowCandidateTrack.h"
89 
90 // Interface to make the Flow Event Simple used in the flow analysis methods
91 #include "AliFlowEvent.h"
92 #include "AliFlowTrackCuts.h"
93 #include "AliFlowEventCuts.h"
94 #include "AliFlowCommonConstants.h"
95 
97 
98 //________________________________________________________________________
101 fAnalysisType("AUTOMATIC"),
102 fRPType(""),
103 fCFManager1(NULL),
104 fCFManager2(NULL),
105 fCutsEvent(NULL),
106 fCutsRP(NULL),
107 fCutsPOI(NULL),
108 fCutContainer(new TList()),
109 fQAList(NULL),
110 fMinMult(0),
111 fMaxMult(10000000),
112 fMinA(-1.0),
113 fMaxA(-0.01),
114 fMinB(0.01),
115 fMaxB(1.0),
116 fGenHeader(NULL),
117 fPythiaGenHeader(NULL),
118 fHijingGenHeader(NULL),
119 fFlowTrack(NULL),
120 fAnalysisUtil(NULL),
121 fQAon(kFALSE),
122 fLoadCandidates(kFALSE),
123 fNbinsMult(10000),
124 fNbinsPt(100),
125 fNbinsPhi(100),
126 fNbinsEta(200),
127 fNbinsQ(500),
128 fNbinsMass(1),
129 fMultMin(0.),
130 fMultMax(10000.),
131 fPtMin(0.),
132 fPtMax(10.),
133 fPhiMin(0.),
134 fPhiMax(TMath::TwoPi()),
135 fEtaMin(-5.),
136 fEtaMax(5.),
137 fQMin(0.),
138 fQMax(3.),
139 fMassMin(-1.),
140 fMassMax(0.),
141 fHistWeightvsPhiMin(0.),
142 fHistWeightvsPhiMax(3.),
143 fExcludedEtaMin(0.),
144 fExcludedEtaMax(0.),
145 fExcludedPhiMin(0.),
146 fExcludedPhiMax(0.),
147 fAfterburnerOn(kFALSE),
148 fNonFlowNumberOfTrackClones(0),
149 fV1(0.),
150 fV2(0.),
151 fV3(0.),
152 fV4(0.),
153 fV5(0.),
154 fDifferentialV2(0),
155 fFlowEvent(NULL),
156 fShuffleTracks(kFALSE),
157 fMyTRandom3(NULL),
158 fAnalysisInput(kAOD),
159 fIsMCInput(kFALSE),
160 fUseMCCen(kTRUE),
161 fRejectPileUp(kTRUE),
162 fCentrLowLim(0.),
163 fCentrUpLim(100.),
164 fCentrEstimator("V0M"),
165 fOutput(0x0),
166 fhZNCvsZNA(0x0),
167 fhZDCCvsZDCCA(0x0),
168 fhZNCvsZPC(0x0),
169 fhZNAvsZPA(0x0),
170 fhZNvsZP(0x0),
171 fhZNvsVZERO(0x0),
172 fhZDCvsVZERO(0x0),
173 fhZDCvsTracklets(0x0),
174 fhZDCvsNclu1(0x0),
175 fhDebunch(0x0),
176 fhZNCcentroid(0x0),
177 fhZNAcentroid(0x0),
178 fhAsymm(0x0),
179 fhZNAvsAsymm(0x0),
180 fhZNCvsAsymm(0x0),
181 fhZNCvscentrality(0x0),
182 fhZNAvscentrality(0x0),
183 fCRCnRun(0),
184 fZDCGainAlpha(0.395),
185 fDataSet(kAny),
186 fStack(0x0),
187 fCutTPC(kFALSE),
188 fCenDis(0x0),
189 fMultSelection(0x0),
190 fCentrality(0x0),
191 fTowerEqList(NULL),
192 fSpectraMCList(NULL),
193 fCachedRunNum(0)
194 {
195  for(int i=0; i<5; i++){
196  fhZNCPM[i] = 0x0;
197  fhZNAPM[i] = 0x0;
198  }
199  for(int i=0; i<4; i++){
200  fhZNCPMQiPMC[i] = 0x0;
201  fhZNAPMQiPMC[i] = 0x0;
202  }
203  for(Int_t r=0; r<fCRCMaxnRun; r++) {
204  fRunList[r] = 0;
205  }
206  for(Int_t c=0; c<2; c++) {
207  for(Int_t i=0; i<5; i++) {
208  fTowerGainEq[c][i] = NULL;
209  }
210  }
211  this->InitializeRunArrays();
212  fMyTRandom3 = new TRandom3(1);
213  gRandom->SetSeed(fMyTRandom3->Integer(65539));
214  for(Int_t c=0; c<10; c++) {
215  fPtSpecGen[c] = NULL;
216  fPtSpecFB32[c] = NULL;
217  fPtSpecFB96[c] = NULL;
218  fPtSpecFB128[c] = NULL;
219  fPtSpecFB768[c] = NULL;
220  }
221 }
222 
223 //________________________________________________________________________
224 AliAnalysisTaskCRCZDC::AliAnalysisTaskCRCZDC(const char *name, TString RPtype, Bool_t on, UInt_t iseed, Bool_t bCandidates):
225 AliAnalysisTaskSE(name),
226 fAnalysisType("AUTOMATIC"),
227 fRPType(RPtype),
228 fCFManager1(NULL),
229 fCFManager2(NULL),
230 fCutsEvent(NULL),
231 fCutsRP(NULL),
232 fCutsPOI(NULL),
233 fCutContainer(new TList()),
234 fQAList(NULL),
235 fMinMult(0),
236 fMaxMult(10000000),
237 fMinA(-1.0),
238 fMaxA(-0.01),
239 fMinB(0.01),
240 fMaxB(1.0),
241 fQAon(on),
242 fLoadCandidates(bCandidates),
243 fNbinsMult(10000),
244 fNbinsPt(100),
245 fNbinsPhi(100),
246 fNbinsEta(200),
247 fNbinsQ(500),
248 fNbinsMass(1),
249 fMultMin(0.),
250 fMultMax(10000.),
251 fPtMin(0.),
252 fPtMax(10.),
253 fPhiMin(0.),
254 fPhiMax(TMath::TwoPi()),
255 fEtaMin(-5.),
256 fEtaMax(5.),
257 fQMin(0.),
258 fQMax(3.),
259 fMassMin(-1.),
260 fMassMax(0.),
261 fHistWeightvsPhiMin(0.),
262 fHistWeightvsPhiMax(3.),
263 fExcludedEtaMin(0.),
264 fExcludedEtaMax(0.),
265 fExcludedPhiMin(0.),
266 fExcludedPhiMax(0.),
267 fAfterburnerOn(kFALSE),
268 fNonFlowNumberOfTrackClones(0),
269 fV1(0.),
270 fV2(0.),
271 fV3(0.),
272 fV4(0.),
273 fV5(0.),
274 fDifferentialV2(0),
275 fFlowEvent(NULL),
276 fShuffleTracks(kFALSE),
277 fMyTRandom3(NULL),
278 fAnalysisInput(kAOD),
279 fIsMCInput(kFALSE),
280 fUseMCCen(kTRUE),
281 fRejectPileUp(kTRUE),
282 fCentrLowLim(0.),
283 fCentrUpLim(100.),
284 fCentrEstimator("V0M"),
285 fOutput(0x0),
286 fhZNCvsZNA(0x0),
287 fhZDCCvsZDCCA(0x0),
288 fhZNCvsZPC(0x0),
289 fhZNAvsZPA(0x0),
290 fhZNvsZP(0x0),
291 fhZNvsVZERO(0x0),
292 fhZDCvsVZERO(0x0),
293 fhZDCvsTracklets(0x0),
294 fhZDCvsNclu1(0x0),
295 fhDebunch(0x0),
296 fhZNCcentroid(0x0),
297 fhZNAcentroid(0x0),
298 fhAsymm(0x0),
299 fhZNAvsAsymm(0x0),
300 fhZNCvsAsymm(0x0),
301 fhZNCvscentrality(0x0),
302 fhZNAvscentrality(0x0),
303 fDataSet(kAny),
304 fCRCnRun(0),
305 fZDCGainAlpha(0.395),
306 fGenHeader(NULL),
307 fPythiaGenHeader(NULL),
308 fHijingGenHeader(NULL),
309 fFlowTrack(NULL),
310 fAnalysisUtil(NULL),
311 fStack(0x0),
312 fCutTPC(kFALSE),
313 fCenDis(0x0),
314 fMultSelection(0x0),
315 fCentrality(0x0),
316 fTowerEqList(NULL),
317 fCachedRunNum(0)
318 {
319 
320  for(int i=0; i<5; i++){
321  fhZNCPM[i] = 0x0;
322  fhZNAPM[i] = 0x0;
323  }
324  for(int i=0; i<4; i++){
325  fhZNCPMQiPMC[i] = 0x0;
326  fhZNAPMQiPMC[i] = 0x0;
327  }
328  for(Int_t r=0; r<fCRCMaxnRun; r++) {
329  fRunList[r] = 0;
330  }
331  for(Int_t c=0; c<2; c++) {
332  for(Int_t i=0; i<5; i++) {
333  fTowerGainEq[c][i] = NULL;
334  }
335  }
336  this->InitializeRunArrays();
337  fMyTRandom3 = new TRandom3(iseed);
338  gRandom->SetSeed(fMyTRandom3->Integer(65539));
339 
340  DefineInput(0, TChain::Class());
341  // Define output slots here
342  // Define here the flow event output
343  DefineOutput(1, AliFlowEventSimple::Class());
344  DefineOutput(2, TList::Class());
345 
346  for(Int_t c=0; c<10; c++) {
347  fPtSpecGen[c] = NULL;
348  fPtSpecFB32[c] = NULL;
349  fPtSpecFB96[c] = NULL;
350  fPtSpecFB128[c] = NULL;
351  fPtSpecFB768[c] = NULL;
352  }
353 
354 }
355 
356 //________________________________________________________________________
358 {
359  // Destructor
360  if(fOutput && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()){
361  delete fOutput; fOutput=0;
362  }
363  delete fMyTRandom3;
364  delete fFlowEvent;
365  delete fFlowTrack;
366  delete fCutsEvent;
367  if (fTowerEqList) delete fTowerEqList;
368  if (fAnalysisUtil) delete fAnalysisUtil;
369  if (fQAList) delete fQAList;
370  if (fCutContainer) fCutContainer->Delete(); delete fCutContainer;
371 }
372 
373 //________________________________________________________________________
375 {
376  for(Int_t r=0;r<fCRCMaxnRun;r++) {
377  fCRCQVecListRun[r] = NULL;
378 // fZNCTower[r] = NULL;
379 // fZNATower[r] = NULL;
380  }
381 // for(Int_t i=0;i<fnCen;i++) {
382 // fPtPhiEtaRbRFB128[r][i] = NULL;
383 // fPtPhiEtaRbRFB768[r][i] = NULL;
384 // }
385 // }
386 // for(Int_t k=0;k<fCRCnTow;k++) {
387 // fhnTowerGain[k] = NULL;
388 // for(Int_t i=0;i<fnCen;i++) {
389 // fhnTowerGainVtx[i][k] = NULL;
390 // }
391 // }
392 }
393 
394 //________________________________________________________________________
396 {
397  // Create the output containers
398 
399  if (!(fAnalysisType == "AOD" || fAnalysisType == "MCkine" || fAnalysisType == "MCAOD" || fAnalysisType == "AUTOMATIC" || fAnalysisType == "MCESD"))
400  {
401  AliError("WRONG ANALYSIS TYPE! only MCESD, MCkine, MCAOD, AOD and AUTOMATIC are allowed.");
402  exit(1);
403  }
404 
405  //set the common constants
408  cc->SetNbinsPt(fNbinsPt);
409  cc->SetNbinsPhi(fNbinsPhi);
410  cc->SetNbinsEta(fNbinsEta);
411  cc->SetNbinsQ(fNbinsQ);
413  cc->SetMultMin(fMultMin);
414  cc->SetMultMax(fMultMax);
415  cc->SetPtMin(fPtMin);
416  cc->SetPtMax(fPtMax);
417  cc->SetPhiMin(fPhiMin);
418  cc->SetPhiMax(fPhiMax);
419  cc->SetEtaMin(fEtaMin);
420  cc->SetEtaMax(fEtaMax);
421  cc->SetQMin(fQMin);
422  cc->SetQMax(fQMax);
423  cc->SetMassMin(fMassMin);
424  cc->SetMassMax(fMassMax);
427 
428  fFlowEvent = new AliFlowEvent(20000);
429  fFlowTrack = new AliFlowTrack();
430 
431  //printf(" AliAnalysisTaskCRCZDC::UserCreateOutputObjects()\n\n");
432  fOutput = new TList();
433  fOutput->SetOwner(kTRUE);
434  //fOutput->SetName("output");
435 
436  if (fQAon) {
437  fQAList = new TList();
438  fQAList->SetOwner(kTRUE);
439  fQAList->SetName("AliFlowEventCuts QA");
440  if (fCutsEvent->GetQA()) fQAList->Add(fCutsEvent->GetQA()); //0
441  if (fCutsRP->GetQA()) fQAList->Add(fCutsRP->GetQA()); //1
442  if (fCutsPOI->GetQA())fQAList->Add(fCutsPOI->GetQA()); //2
443  fOutput->Add(fQAList);
444  }
445 
446  fCenDis = new TH1F("fCenDis", "fCenDis", 100, 0., 100.);
447  fOutput->Add(fCenDis);
448  for(Int_t c=0; c<2; c++) {
449  for(Int_t i=0; i<5; i++) {
450  fTowerGainEq[c][i] = new TH1D();
451  fOutput->Add(fTowerGainEq[c][i]);
452  }
453  }
454 
455  fSpectraMCList = new TList();
456  fSpectraMCList->SetOwner(kTRUE);
457  fSpectraMCList->SetName("Spectra");
458  fOutput->Add(fSpectraMCList);
459 
460  Float_t xmin[] = {0.1,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.,4.5,5.,6.,7.,8.};
461  for(Int_t c=0; c<10; c++) {
462  fPtSpecGen[c] = new TH1F(Form("fPtSpecGen[%d]",c), Form("fPtSpecGen[%d]",c), 24, xmin);
463  fSpectraMCList->Add(fPtSpecGen[c]);
464  fPtSpecFB32[c] = new TH1F(Form("fPtSpecFB32[%d]",c), Form("fPtSpecFB32[%d]",c), 24, xmin);
465  fSpectraMCList->Add(fPtSpecFB32[c]);
466  fPtSpecFB96[c] = new TH1F(Form("fPtSpecFB96[%d]",c), Form("fPtSpecFB96[%d]",c), 24, xmin);
467  fSpectraMCList->Add(fPtSpecFB96[c]);
468  fPtSpecFB128[c] = new TH1F(Form("fPtSpecFB128[%d]",c), Form("fPtSpecFB128[%d]",c), 24, xmin);
469  fSpectraMCList->Add(fPtSpecFB128[c]);
470  fPtSpecFB768[c] = new TH1F(Form("fPtSpecFB768[%d]",c), Form("fPtSpecFB768[%d]",c), 24, xmin);
471  fSpectraMCList->Add(fPtSpecFB768[c]);
472  }
473 
474  fAnalysisUtil = new AliAnalysisUtils();
475 
476  for(int i=0; i<5; i++){
477  char hname[20];
478  sprintf(hname,"hZNCPM%d",i);
479  fhZNCPM[i] = new TH1F(hname, hname, 200, -50., 140000);
480  fOutput->Add(fhZNCPM[i]);
481  //
482  sprintf(hname,"hZNAPM%d",i);
483  fhZNAPM[i] = new TH1F(hname, hname, 200, -50., 140000);
484  fOutput->Add(fhZNAPM[i]);
485  //
486  if(i<4){
487  //
488  char hnamenc[20];
489  sprintf(hnamenc, "hZNCPMQ%dPMC",i+1);
490  fhZNCPMQiPMC[i] = new TH1F(hnamenc, hnamenc, 100, 0., 1.);
491  fOutput->Add(fhZNCPMQiPMC[i]);
492  //
493  char hnamena[20];
494  sprintf(hnamena, "hZNAPMQ%dPMC",i+1);
495  fhZNAPMQiPMC[i] = new TH1F(hnamena, hnamena, 100, 0., 1.);
496  fOutput->Add(fhZNAPMQiPMC[i]);
497  }
498  }
499 
500  fhZNCvsZNA = new TH2F("hZNCvsZNA","hZNCvsZNA",200,-50.,140000,200,-50.,140000);
501  fOutput->Add(fhZNCvsZNA);
502  fhZDCCvsZDCCA = new TH2F("hZDCCvsZDCCA","hZDCCvsZDCCA",200,0.,180000.,200,0.,200000.);
503  fOutput->Add(fhZDCCvsZDCCA);
504  fhZNCvsZPC = new TH2F("hZNCvsZPC","hZNCvsZPC",200,-50.,50000,200,-50.,140000);
505  fOutput->Add(fhZNCvsZPC);
506  fhZNAvsZPA = new TH2F("hZNAvsZPA","hZNAvsZPA",200,-50.,50000,200,-50.,140000);
507  fOutput->Add(fhZNAvsZPA);
508  fhZNvsZP = new TH2F("hZNvsZP","hZNvsZP",200,-50.,80000,200,-50.,200000);
509  fOutput->Add(fhZNvsZP);
510  fhZNvsVZERO = new TH2F("hZNvsVZERO","hZNvsVZERO",250,0.,25000.,200,0.,200000.);
511  fOutput->Add(fhZNvsVZERO);
512  fhZDCvsVZERO = new TH2F("hZDCvsVZERO","hZDCvsVZERO",250,0.,25000.,250,0.,250000.);
513  fOutput->Add(fhZDCvsVZERO);
514  fhZDCvsTracklets = new TH2F("hZDCvsTracklets","hZDCvsTracklets",200,0.,4000.,250,0.,250000.);
516  fhZDCvsNclu1 = new TH2F("hZDCvsNclu1", "hZDCvsNclu1", 200, 0.,8000.,200,0.,250000.);
517  fOutput->Add(fhZDCvsNclu1);
518  fhDebunch = new TH2F("hDebunch","hDebunch",240,-100.,-40.,240,-30.,30.);
519  fOutput->Add(fhDebunch);
520  fhZNCcentroid = new TH2F("hZNCcentroid","hZNCcentroid",100,-3.5,3.5,100,-3.5,3.5);
521  fOutput->Add(fhZNCcentroid);
522  fhZNAcentroid = new TH2F("hZNAcentroid","hZNAcentroid",100,-3.5,3.5,100,-3.5,3.5);
523  fOutput->Add(fhZNAcentroid);
524 
525  fhAsymm = new TH1F("hAsymm" , "Asimmetry ",200,-1.,1.);
526  fOutput->Add(fhAsymm);
527  fhZNAvsAsymm = new TH2F("hZNAvsAsymm","ZNA vs. asymm.",200,-1.,1.,200,0.,80.);
528  fOutput->Add(fhZNAvsAsymm);
529  fhZNCvsAsymm = new TH2F("hZNCvsAsymm","ZNC vs. asymm.",200,-1.,1.,200,0.,80.);
530  fOutput->Add(fhZNCvsAsymm);
531 
532  fhZNCvscentrality = new TH2F("hZNCvscentrality","ZNC vs. centrality",100,0.,100.,100,0.,100.);
534  fhZNAvscentrality = new TH2F("hZNAvscentrality","ZNA vs. centrality",100,0.,100.,100,0.,100.);
536 
537  //********************************************************************
538 
539  Int_t dRun10h[] = {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, 137430, 137366, 137243, 137236, 137235, 137232, 137231, 137230, 137162, 137161};
540 
541  Int_t dRun11h[] = {167902, 167903, 167915, 167920, 167985, 167987, 167988, 168066, 168068, 168069, 168076, 168104, 168105, 168107, 168108, 168115, 168212, 168310, 168311, 168322, 168325, 168341, 168342, 168361, 168362, 168458, 168460, 168461, 168464, 168467, 168511, 168512, 168514, 168777, 168826, 168984, 168988, 168992, 169035, 169040, 169044, 169045, 169091, 169094, 169099, 169138, 169143, 169144, 169145, 169148, 169156, 169160, 169167, 169238, 169411, 169415, 169417, 169418, 169419, 169420, 169475, 169498, 169504, 169506, 169512, 169515, 169550, 169553, 169554, 169555, 169557, 169586, 169587, 169588, 169590, 169591, 169835, 169837, 169838, 169846, 169855, 169858, 169859, 169923, 169956, 169965, 170027, 170036,170040, 170081, 170083, 170084, 170085, 170088, 170089, 170091, 170155, 170159, 170163, 170193, 170203, 170204, 170207, 170228, 170230, 170268, 170269, 170270, 170306, 170308, 170309, 170311, 170312, 170313, 170315, 170387, 170388, 170572, 170593};
542 
543  // 12 low IR: 244917, 244918, 244975, 244980, 244982, 244983, 245064, 245066, 245068, 246390, 246391, 246392
544  // 80 high IR ("CentralBarrelTracking" good runs): 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, 246115, 246113, 246089, 246087, 246053, 246052, 246049, 246048, 246042, 246037, 246036, 246012, 246003, 246001, 245954, 245952, 245949, 245923, 245833, 245831, 245829, 245705, 245702, 245700, 245692, 245683
545 
546  Int_t dRun15h[] = {244917, 244918, 244975, 244980, 244982, 244983, 245064, 245066, 245068, 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, 246276, 246275, 246272, 246271, 246225, 246222, 246217, 246185, 246182, 246181, 246180, 246178, 246153, 246152, 246151, 246115, 246113, 246089, 246087, 246053, 246052, 246049, 246048, 246042, 246037, 246036, 246012, 246003, 246001, 245954, 245952, 245949, 245923, 245833, 245831, 245829, 245705, 245702, 245700, 245692, 245683};
547 
548  if(fDataSet==k2010) {fCRCnRun=92;}
549  if(fDataSet==k2011) {fCRCnRun=119;}
550  if(fDataSet==k2015) {fCRCnRun=90;}
551  if(fDataSet==kAny) {fCRCnRun=1;}
552 
553  Int_t d=0;
554  for(Int_t r=0; r<fCRCnRun; r++) {
555  if(fDataSet==k2010) fRunList[d] = dRun10h[r];
556  if(fDataSet==k2011) fRunList[d] = dRun11h[r];
557  if(fDataSet==k2015) fRunList[d] = dRun15h[r];
558  if(fDataSet==kAny) fRunList[d] = 1;
559  d++;
560  }
561 
562 // for(Int_t k=0;k<fCRCnTow;k++) {
563 // fhnTowerGain[k] = new TProfile(Form("fhnTowerGain[%d]",k),
564 // Form("fhnTowerGain[%d]",k),100,0.,100.,"s");
565 // fhnTowerGain[k]->Sumw2();
566 // fOutput->Add(fhnTowerGain[k]);
567 // }
568 // for(Int_t k=0;k<fCRCnTow;k++) {
569 // for(Int_t i=0;i<fnCen;i++) {
570 // fhnTowerGainVtx[i][k] = new TProfile3D(Form("fhnTowerGainVtx[%d][%d]",i,k),
571 // Form("fhnTowerGainVtx[%d][%d]",i,k),20,-0.035,0.015,20,0.145,0.220,10,-10.,10.,"s");
572 // fhnTowerGainVtx[i][k]->Sumw2();
573 // fOutput->Add(fhnTowerGainVtx[i][k]);
574 // }
575 // }
576 
577  Double_t ptmin[] = {0.2,0.4,0.6,0.8,1.,1.2,1.4,1.8,2.2,3.,4.,6.,8.,12.,20.};
578  Double_t phimin[] = {0.,TMath::Pi()/8.,2*TMath::Pi()/8.,3*TMath::Pi()/8.,4*TMath::Pi()/8.,5*TMath::Pi()/8.,6*TMath::Pi()/8.,7*TMath::Pi()/8.,8*TMath::Pi()/8.,9*TMath::Pi()/8.,10*TMath::Pi()/8.,11*TMath::Pi()/8.,12*TMath::Pi()/8.,13*TMath::Pi()/8.,14*TMath::Pi()/8.,15*TMath::Pi()/8.,16*TMath::Pi()/8.};
579  Double_t etamin[] = {-0.8,-0.7,-0.6,-0.5,-0.4,-0.3,-0.2,-0.1,0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8};
580  for(Int_t r=0;r<fCRCnRun;r++) {
581  fCRCQVecListRun[r] = new TList();
582  fCRCQVecListRun[r]->SetName(Form("Run %d",fRunList[r]));
583  fCRCQVecListRun[r]->SetOwner(kTRUE);
584  fOutput->Add(fCRCQVecListRun[r]);
585 
586 // fZNCTower[r] = new TProfile(Form("fZNCTower[%d]",fRunList[r]),Form("fZNCTower[%d]",fRunList[r]),100,0.,100.,"s");
587 // fZNCTower[r]->Sumw2();
588 // fCRCQVecListRun[r]->Add(fZNCTower[r]);
589 // fZNATower[r] = new TProfile(Form("fZNATower[%d]",fRunList[r]),Form("fZNATower[%d]",fRunList[r]),100,0.,100.,"s");
590 // fZNATower[r]->Sumw2();
591 // fCRCQVecListRun[r]->Add(fZNATower[r]);
592 
593  // for(Int_t i=0;i<fnCen;i++) {
594  // fPtPhiEtaRbRFB128[r][i] = new TH3F(Form("fPtPhiEtaRbRFB128[%d][%d]",r,i),Form("fPtPhiEtaRbRFB128[%d][%d]",r,i),14, ptmin, 16, phimin, 16, etamin);
595  // fCRCQVecListRun[r]->Add(fPtPhiEtaRbRFB128[r][i]);
596  // fPtPhiEtaRbRFB768[r][i] = new TH3F(Form("fPtPhiEtaRbRFB768[%d][%d]",r,i),Form("fPtPhiEtaRbRFB768[%d][%d]",r,i),14, ptmin, 16, phimin, 16, etamin);
597  // fCRCQVecListRun[r]->Add(fPtPhiEtaRbRFB768[r][i]);
598  // }
599  }
600 
601  PostData(2, fOutput);
602 }
603 
604 //________________________________________________________________________
606 {
607  // Execute analysis for current event:
608  AliMCEvent* McEvent = MCEvent();
609  AliAODEvent *aod = dynamic_cast<AliAODEvent*>(InputEvent());
610  AliESDEvent *esd = dynamic_cast<AliESDEvent*>(InputEvent());
611 // AliMultiplicity* myTracklets = NULL;
612 // AliESDPmdTrack* pmdtracks = NULL;
613 // int availableINslot=1;
614 
615  if (!(fCutsRP&&fCutsPOI&&fCutsEvent)) {
616  AliError("cuts not set");
617  return;
618  }
619 
620  Int_t RunBin=-1, bin=0;
621  Int_t RunNum = aod->GetRunNumber();
622  for(Int_t c=0;c<fCRCnRun;c++) {
623  if(fRunList[c]==RunNum) RunBin=bin;
624  else bin++;
625  }
626  if(RunBin==-1) return;
627  if(fDataSet==kAny) RunBin=0;
628 
629  //DEFAULT - automatically takes care of everything
630  if (fAnalysisType == "AUTOMATIC") {
631 
632  // get centrality
633  Float_t centr=300, centrCL1=300;
634  if(fDataSet!=k2015) {
635  centr = fCutsEvent->GetCentrality(InputEvent(),McEvent);
636  } else {
637  fMultSelection = (AliMultSelection*) InputEvent()->FindListObject("MultSelection");
638  if(!fMultSelection) {
639  //If you get this warning (and lPercentiles 300) please check that the AliMultSelectionTask actually ran (before your task)
640  AliWarning("AliMultSelection object not found!");
641  }else{
642  centr = fMultSelection->GetMultiplicityPercentile("V0M");
643  centrCL1 = fMultSelection->GetMultiplicityPercentile("CL1");
644  }
645  }
646 
647  //check event cuts
648  if (InputEvent()) {
649  if(!fCutsEvent->IsSelected(InputEvent(),MCEvent())) return;
650  if(fRejectPileUp) {
651  if(fDataSet!=k2015) {
652  if (fAnalysisUtil->IsPileUpEvent(InputEvent())) return;
653  } else {
654  // pile-up a la Dobrin for LHC15o
655  if (plpMV(aod)) return;
656 
657  Short_t isPileup = aod->IsPileupFromSPD(3);
658  if (isPileup != 0) return;
659 
660  if (((AliAODHeader*)aod->GetHeader())->GetRefMultiplicityComb08() < 0) return;
661 
662  if (aod->IsIncompleteDAQ()) return;
663 
664  if(fabs(centr-centrCL1)>7.5) return;
665  }
666  }
667  }
668 
669  //first attach all possible information to the cuts
670  fCutsRP->SetEvent( InputEvent(), MCEvent() ); //attach event
671  fCutsPOI->SetEvent( InputEvent(), MCEvent() );
672 
673  //then make the event
675 
677  fFlowEvent->SetCentrality(centr);
678  fFlowEvent->SetCentralityCL1(((AliVAODHeader*)aod->GetHeader())->GetCentralityP()->GetCentralityPercentile("CL1"));
679  fFlowEvent->SetCentralityTRK(((AliVAODHeader*)aod->GetHeader())->GetCentralityP()->GetCentralityPercentile("TRK"));
680  fFlowEvent->SetNITSCL1(((AliVAODHeader*)aod->GetHeader())->GetNumberOfITSClusters(1));
681 
682  Double_t vtxpos[3]={0.,0.,0.};
683  vtxpos[0] = ((AliAODVertex*)aod->GetPrimaryVertex())->GetX();
684  vtxpos[1] = ((AliAODVertex*)aod->GetPrimaryVertex())->GetY();
685  vtxpos[2] = ((AliAODVertex*)aod->GetPrimaryVertex())->GetZ();
686  fFlowEvent->SetVertexPosition(vtxpos);
687 
688  if (McEvent && McEvent->GenEventHeader()) fFlowEvent->SetMCReactionPlaneAngle(McEvent);
689 
690  // run-by-run QA
691 // for(Int_t jTracks = 0; jTracks<aod->GetNumberOfTracks(); jTracks++){
692 // AliAODTrack* track = (AliAODTrack*)aod->GetTrack(jTracks);
693 // if(!track) continue;
694 // // general kinematic & quality cuts
695 // if (track->Pt() < .2 || track->Pt() > 20. || TMath::Abs(track->Eta()) > .8 || track->GetTPCNcls() < 70) continue;
696 // if (track->TestFilterBit(128)) fPtPhiEtaRbRFB128[RunBin][CenBin]->Fill(track->Pt(),track->Phi(),track->Eta());
697 // if (track->TestFilterBit(768)) fPtPhiEtaRbRFB768[RunBin][CenBin]->Fill(track->Pt(),track->Phi(),track->Eta());
698 // }
699 
700  }
701 
702  if (fAnalysisType == "MCAOD") {
703 
704  //check event cuts
705  if (InputEvent()) {
706  if(!fCutsEvent->IsSelected(InputEvent(),MCEvent())) return;
707  if(fRejectPileUp && fAnalysisUtil->IsPileUpEvent(InputEvent())) return;
708  }
709 
711 
712  if(!McEvent) {
713  AliError("ERROR: Could not retrieve MCEvent");
714  return;
715  }
716  fStack = (TClonesArray*)aod->FindListObject(AliAODMCParticle::StdBranchName());
717  if(!fStack){
718  AliError("ERROR: Could not retrieve MCStack");
719  return;
720  }
721 
722  // get centrality (from AliMultSelection or AliCentrality)
723  Float_t centr = 300;
724  if(fDataSet==k2015) {
725  fMultSelection = (AliMultSelection*)aod->FindListObject("MultSelection");
726  if(!fMultSelection) {
727  //If you get this warning (and lPercentiles 300) please check that the AliMultSelectionTask actually ran (before your task)
728  AliWarning("AliMultSelection object not found!");
729  } else {
730  centr = fMultSelection->GetMultiplicityPercentile("V0M");
731  }
732  } else {
733  centr = (((AliVAODHeader*)aod->GetHeader())->GetCentralityP())->GetCentralityPercentile("V0M");
734  }
735  // centrality bin
736  if (centr<fCentrLowLim || centr>=fCentrUpLim ) return;
737  Int_t CenBin = -1;
738  CenBin = GetCenBin(centr);
739  if(CenBin==-1) return;
740 
741  // reconstructed
742  for(Int_t jTracks = 0; jTracks<aod->GetNumberOfTracks(); jTracks++){
743 
744  AliAODTrack* track = (AliAODTrack*)aod->GetTrack(jTracks);
745  if(!track) continue;
746 
747  // select primaries
748  Int_t lp = TMath::Abs(track->GetLabel());
749  if (!((AliAODMCParticle*)fStack->At(lp))->IsPhysicalPrimary()) continue;
750 
751  // general kinematic & quality cuts
752  if (track->Pt() < .2 || track->Pt() > 8. || TMath::Abs(track->Eta()) > .8 || track->GetTPCNcls() < 70) continue;
753 
754  // test filter bits
755  if (track->TestFilterBit(32)) fPtSpecFB32[CenBin]->Fill(track->Pt());
756  if (track->TestFilterBit(96)) fPtSpecFB96[CenBin]->Fill(track->Pt());
757  if (track->TestFilterBit(128)) fPtSpecFB128[CenBin]->Fill(track->Pt());
758  if (track->TestFilterBit(768)) fPtSpecFB768[CenBin]->Fill(track->Pt());
759  }
760 
761  // generated (physical primaries)xw
762 
763  for(Int_t jTracks = 0; jTracks<fStack->GetEntriesFast(); jTracks++) {
764  AliAODMCParticle *MCpart = (AliAODMCParticle*)fStack->At(jTracks);
765  if (!MCpart) {
766  printf("ERROR: Could not receive MC track %d\n", jTracks);
767  continue;
768  }
769  // kinematic cuts
770  if ( MCpart->Pt() < 0.2 || MCpart->Pt() > 8. || TMath::Abs(MCpart->Eta()) > .8 ) continue;
771  // select charged primaries
772  if ( MCpart->Charge() == 0. || !MCpart->IsPhysicalPrimary()) continue;
773 
774  fPtSpecGen[CenBin]->Fill(MCpart->Pt());
775  }
776 
777 // fGenHeader = McEvent->GenEventHeader();
778 // if(fGenHeader) fPythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(fGenHeader);
779  // printf("#reconstructed : %d (rejected from cuts %d), #MC primaries : %d (rejected from cuts %d) \n",AODPOIs,AODbads,MCPrims,MCSecos);
780  fFlowEvent->SetReferenceMultiplicity(aod->GetNumberOfTracks());
781  fFlowEvent->SetCentrality(centr);
782 // if (McEvent && McEvent->GenEventHeader()) fFlowEvent->SetMCReactionPlaneAngle(McEvent);
783  fFlowEvent->SetRun(RunNum);
784  // printf("Run : %d, RefMult : %d, Cent : %f \n",fFlowEvent->GetRun(),fFlowEvent->GetReferenceMultiplicity(),fFlowEvent->GetCentrality());
785  }
786 
787  if(fAnalysisType == "MCESD") {
788 
790 
791  if(!esd) {
792  AliError("ERROR: Could not retrieve ESDEvent");
793  return;
794  }
795  if(!McEvent) {
796  AliError("ERROR: Could not retrieve MCEvent");
797  return;
798  }
799  AliStack* fStack = fMCEvent->Stack();
800  if(!fStack) {
801  AliError("ERROR: Could not retrieve MCStack");
802  return;
803  }
804 
805  AliESDVertex *vertex = (AliESDVertex*) esd->GetPrimaryVertex();
806  if (!vertex) return;
807  if (TMath::Abs(vertex->GetZ()) > 10. ) return;
808  if (vertex->GetNContributors() < 1 ) return;
809  AliCentrality *centrality = esd->GetCentrality();
810  if (!centrality) return;
811  Double_t centr = centrality->GetCentralityPercentile("V0M");
812  if (centr<fCentrLowLim || centr>=fCentrUpLim ) return;
813  Int_t CenBin = -1;
814  if (centr>0. && centr<5.) CenBin=0;
815  if (centr>5. && centr<10.) CenBin=1;
816  if (centr>10. && centr<20.) CenBin=2;
817  if (centr>20. && centr<30.) CenBin=3;
818  if (centr>30. && centr<40.) CenBin=4;
819  if (centr>40. && centr<50.) CenBin=5;
820  if (centr>50. && centr<60.) CenBin=6;
821  if (centr>60. && centr<70.) CenBin=7;
822  if (centr>70. && centr<80.) CenBin=8;
823  if (centr>80. && centr<90.) CenBin=9;
824  if(CenBin==-1) return;
825 
826  //Generated
827  Int_t MCPrims = 0;
828  for ( Int_t i=0 ; i<fStack->GetNtrack() ; i++ ) {
829 
830  //Primaries Selection
831  TParticle *particle = (TParticle*)fStack->Particle(i);
832  if (!particle) continue;
833  if (!fStack->IsPhysicalPrimary(i)) continue;
834  if ( particle->GetPDG()->Charge() == 0.) continue;
835 
836  //Kinematic Cuts
837  if ( particle->Pt()<0.2 || particle->Pt()>10. ) continue;
838  if ( TMath::Abs(particle->Eta())>0.8 ) continue;
839 
840  fFlowTrack->SetPhi(particle->Phi());
841  fFlowTrack->SetEta(particle->Eta());
842  fFlowTrack->SetPt(particle->Pt());
848  MCPrims++;
849 
850  fPtSpecGen[CenBin]->Fill(particle->Pt());
851 
852  }
853 
854  //Reconstructed
855  Int_t ESDPrims = 0;
856  for (Int_t i=0 ; i<esd->GetNumberOfTracks() ; i++) {
857 
858  //Get reconstructed track
859  AliVTrack *vtrack = static_cast<AliVTrack*>(esd->GetTrack(i));
860  AliESDtrack *track = dynamic_cast<AliESDtrack*>(vtrack);
861  if (!track) continue;
862 
863  //Primaries selection
864  Int_t lp = TMath::Abs(track->GetLabel());
865  if (!fStack->IsPhysicalPrimary(lp)) continue;
866  TParticle *particle = (TParticle*)fStack->Particle(lp);
867  if (!particle) continue;
868  if (particle->GetPDG()->Charge() == 0.) continue;
869 
870 // if(!fCutsPOI->PassesESDcuts(track)) continue;
871 
872  Bool_t pass = kTRUE;
873 
874  if(fCutTPC) {
875 // printf("******* cutting TPC ******** \n");
876  UShort_t ntpccls = track->GetTPCNcls();
877  Double_t tpcchi2 = track->GetTPCchi2();
878  if (tpcchi2<0.2 || tpcchi2 >=4.) {
879 // printf("TPCchi2 : %e %e ",tpcchi2,track->GetTPCchi2Iter1());
880  pass=kFALSE;
881  }
882  if (ntpccls < 70) {
883 // printf("#TPCcluster : %u %u %u %u ",ntpccls,track->GetTPCNclsF(),track->GetTPCNclsFIter1(),track->GetTPCNclsIter1());
884  pass=kFALSE;
885  }
886  }
887 
888  Float_t dcaxy=0.0;
889  Float_t dcaz=0.0;
890  track->GetImpactParameters(dcaxy,dcaz);
891  if (dcaxy > 0.3 || dcaz > 0.3) {
892 // printf("DCA : %e %e ",dcaxy,dcaz);
893  pass=kFALSE;
894  }
895  if(!pass) continue;
896 
897  //Kinematic Cuts
898  if ( track->Pt()<0.2 || track->Pt()>10. ) continue;
899  if ( TMath::Abs(track->Eta())>0.8 ) continue;
900 
901  fFlowTrack->SetPhi(track->Phi());
902  fFlowTrack->SetEta(track->Eta());
903  fFlowTrack->SetPt(track->Pt());
905  fFlowTrack->SetForRPSelection(kFALSE);
909  ESDPrims++;
910 
911  }
912 
913 // printf("#reconstructed : %d , #MC primaries : %d \n",ESDPrims,MCPrims);
914  fFlowEvent->SetReferenceMultiplicity(esd->GetNumberOfTracks());
915  fFlowEvent->SetCentrality(centr);
916  if (McEvent && McEvent->GenEventHeader()) fFlowEvent->SetMCReactionPlaneAngle(McEvent);
917  fFlowEvent->SetRun(esd->GetRunNumber());
918 // printf("Run : %d, RefMult : %d, Cent : %f \n",fFlowEvent->GetRun(),fFlowEvent->GetReferenceMultiplicity(),fFlowEvent->GetCentrality());
919 
920  } // end of if(fAnalysisType == "MCESD")
921 
922  if(fAnalysisType == "MCkine") {
923 
925 
926  AliInputEventHandler* McHandler = dynamic_cast<AliInputEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
927  if(!McHandler) {
928  AliError("ERROR: Could not retrieve MCtruthEventHandler");
929  return;
930  }
931  McEvent = McHandler->MCEvent();
932  if(!McEvent) {
933  AliError("ERROR: Could not retrieve MC event");
934  return;
935  }
936 
937  Int_t nTracks = McEvent->GetNumberOfTracks();
938 // Int_t nPrimTr = McEvent->GetNumberOfPrimaries();
939 
940  //loop over tracks
941  for (Int_t itrkN=0; itrkN<nTracks; itrkN++) {
942  //get input particle
943  AliMCParticle* pParticle = dynamic_cast<AliMCParticle*>(McEvent->GetTrack(itrkN));
944  if (!pParticle) continue;
945 
946  //check if track passes the cuts
947  if (McEvent->IsPhysicalPrimary(itrkN) && pParticle->Charge()!=0) {
948  fFlowTrack->Set(pParticle);
955  }
956  }// for all tracks
957 
958  // if monte carlo event get reaction plane from monte carlo (depends on generator)
959  if (McEvent && McEvent->GenEventHeader()) fFlowEvent->SetMCReactionPlaneAngle(McEvent);
960  // set reference multiplicity
961  fFlowEvent->SetReferenceMultiplicity(McEvent->GetNumberOfTracks());
962  // tag subevents
964  // set centrality from impact parameter
965  Double_t ImpPar=0., CenPer=0.;
966  fGenHeader = McEvent->GenEventHeader();
967  if(fGenHeader){
968  fPythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(fGenHeader);
969  if(fPythiaGenHeader) ImpPar = fPythiaGenHeader->GetImpactParameter();
970  fHijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(fGenHeader);
971  if(fHijingGenHeader) ImpPar = fHijingGenHeader->ImpactParameter();
972  if(ImpPar) CenPer = 0.3859796743103508*pow(ImpPar,2.);
973  if(CenPer>0. && CenPer<100.) fFlowEvent->SetCentrality(CenPer);
974  else return;
975  fFlowEvent->SetRun(1);
976  }
977 
978  } // end of if(fAnalysisType == "MCkine")
979 
980  if (!fFlowEvent) return; //shuts up coverity
981 
982  //check final event cuts
983  Int_t mult = fFlowEvent->NumberOfTracks();
984  // AliInfo(Form("FlowEvent has %i tracks",mult));
985  if (mult<fMinMult || mult>fMaxMult) {
986  AliWarning("FlowEvent cut on multiplicity"); return;
987  }
988 
989  //define dead zone
991 
994  if (fAfterburnerOn)
995  {
996  //if reaction plane not set from elsewhere randomize it before adding flow
998  fFlowEvent->SetMCReactionPlaneAngle(gRandom->Uniform(0.0,TMath::TwoPi()));
999 
1000  if(fDifferentialV2)
1002  else
1003  fFlowEvent->AddFlow(fV1,fV2,fV3,fV4,fV5); //add flow
1004  fFlowEvent->CloneTracks(fNonFlowNumberOfTrackClones); //add nonflow by cloning tracks
1005  }
1007 
1008  //tag subEvents
1010 
1011  //do we want to serve shullfed tracks to everybody?
1013 
1014  // associate the mother particles to their daughters in the flow event (if any)
1016 
1017  //fListHistos->Print();
1018  //fOutputFile->WriteObject(fFlowEvent,"myFlowEventSimple");
1019 
1020  //********************************************************************************************************************************
1021 
1022  if(fAnalysisType == "AOD" || fAnalysisType == "AUTOMATIC") {
1023 
1024  // PHYSICS SELECTION
1025  AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
1026  AliInputEventHandler *hdr = (AliInputEventHandler*)am->GetInputEventHandler();
1027 
1028  if(hdr->IsEventSelected() && AliVEvent::kAny) {
1029 
1030  Float_t centrperc = fFlowEvent->GetCentrality();
1031 
1032  AliAODTracklets *trackl = aod->GetTracklets();
1033  Int_t nTracklets = trackl->GetNumberOfTracklets();
1034 
1035  AliAODVZERO *vzeroAOD = aod->GetVZEROData();
1036  Float_t multV0A = vzeroAOD->GetMTotV0A();
1037  Float_t multV0C = vzeroAOD->GetMTotV0C();
1038 
1039  AliAODZDC *aodZDC = aod->GetZDCData();
1040 
1041  Float_t energyZNC = (Float_t) (aodZDC->GetZNCEnergy());
1042  Float_t energyZPC = (Float_t) (aodZDC->GetZPCEnergy());
1043  Float_t energyZNA = (Float_t) (aodZDC->GetZNAEnergy());
1044  Float_t energyZPA = (Float_t) (aodZDC->GetZPAEnergy());
1045  Float_t energyZEM1 = (Float_t) (aodZDC->GetZEM1Energy());
1046  Float_t energyZEM2 = (Float_t) (aodZDC->GetZEM2Energy());
1047 
1048  const Double_t * towZNCraw = aodZDC->GetZNCTowerEnergy();
1049  const Double_t * towZNAraw = aodZDC->GetZNATowerEnergy();
1050 
1051  // Get centroid from ZDCs *******************************************************
1052 
1053  Double_t Enucl = (RunNum < 209122 ? 1380. : 2511.);
1054  Double_t xyZNC[2]={999.,999.}, xyZNA[2]={999.,999.};
1055  Double_t towZNC[5]={0.}, towZNA[5]={0.};
1056 
1057  Double_t ZNCcalib=1., ZNAcalib=1.;
1058  if(fTowerEqList) {
1059  if(RunNum!=fCachedRunNum) {
1060  for(Int_t i=0; i<5; i++) {
1061  fTowerGainEq[0][i] = (TH1D*)(fTowerEqList->FindObject(Form("fZNCTower[%d][%d]",RunNum,i)));
1062  fTowerGainEq[1][i] = (TH1D*)(fTowerEqList->FindObject(Form("fZNATower[%d][%d]",RunNum,i)));
1063  }
1064  }
1065  for(Int_t i=0; i<5; i++) {
1066  if(fTowerGainEq[0][i]) towZNC[i] = towZNCraw[i]*fTowerGainEq[0][i]->GetBinContent(fTowerGainEq[0][i]->FindBin(centrperc));
1067  if(fTowerGainEq[1][i]) towZNA[i] = towZNAraw[i]*fTowerGainEq[1][i]->GetBinContent(fTowerGainEq[1][i]->FindBin(centrperc));
1068  }
1069  } else {
1070  for(Int_t i=0; i<5; i++) {
1071  towZNC[i] = towZNCraw[i];
1072  towZNA[i] = towZNAraw[i];
1073  }
1074  }
1075 
1076  if(RunNum>=245829) towZNA[2] = 0.;
1077  Float_t zncEnergy=0., znaEnergy=0.;
1078  for(Int_t i=0; i<5; i++){
1079  zncEnergy += towZNC[i];
1080  znaEnergy += towZNA[i];
1081  }
1082  if(RunNum>=245829) znaEnergy *= 8./7.;
1083  fFlowEvent->SetZNCEnergy(towZNC[0]);
1084  fFlowEvent->SetZNAEnergy(towZNA[0]);
1085 // fZNCTower[RunBin]->Fill(centrperc,towZNC[0]);
1086 // fZNATower[RunBin]->Fill(centrperc,towZNC[0]-towZNC[1]-towZNC[3]-towZNC[4]);
1087 
1088  if (fUseMCCen) {
1089  const Float_t x[4] = {-1.75, 1.75, -1.75, 1.75};
1090  const Float_t y[4] = {-1.75, -1.75, 1.75, 1.75};
1091  const Float_t alpha=0.395;
1092  Float_t numXZNC=0., numYZNC=0., denZNC=0., cZNC, wZNC;
1093  Float_t numXZNA=0., numYZNA=0., denZNA=0., cZNA, wZNA;
1094  for(Int_t i=0; i<4; i++){
1095  wZNC = TMath::Power(towZNC[i+1], fZDCGainAlpha);
1096  numXZNC += x[i]*wZNC;
1097  numYZNC += y[i]*wZNC;
1098  denZNC += wZNC;
1099 
1100  if(i==1) wZNA = TMath::Power(towZNA[0]-towZNA[1]-towZNA[3]-towZNA[4], fZDCGainAlpha);
1101  else wZNA = TMath::Power(towZNA[i+1], fZDCGainAlpha);
1102  numXZNA += x[i]*wZNA;
1103  numYZNA += y[i]*wZNA;
1104  denZNA += wZNA;
1105  }
1106  if(denZNC!=0){
1107  Float_t nSpecnC = zncEnergy/Enucl;
1108  cZNC = 1.89358-0.71262/(nSpecnC+0.71789);
1109  xyZNC[0] = cZNC*numXZNC/denZNC;
1110  xyZNC[1] = cZNC*numYZNC/denZNC;
1111  }
1112  else{
1113  xyZNC[0] = xyZNC[1] = 999.;
1114  }
1115  if(denZNA!=0){
1116  Float_t nSpecnA = znaEnergy/Enucl;
1117  cZNA = 1.89358-0.71262/(nSpecnA+0.71789);
1118  xyZNA[0] = cZNA*numXZNA/denZNA;
1119  xyZNA[1] = cZNA*numYZNA/denZNA;
1120  }
1121  else{
1122  xyZNA[0] = xyZNA[1] = 999.;
1123  }
1124  } else {
1125  const Float_t x[4] = {-1.75, 1.75, -1.75, 1.75};
1126  const Float_t y[4] = {-1.75, -1.75, 1.75, 1.75};
1127  Float_t numXZNC=0., numYZNC=0., denZNC=0., wZNC;
1128  Float_t numXZNA=0., numYZNA=0., denZNA=0., wZNA;
1129  for(Int_t i=0; i<4; i++) {
1130  if(towZNC[i+1]>0.) {
1131  wZNC = TMath::Power(towZNC[i+1], fZDCGainAlpha);
1132  numXZNC += x[i]*wZNC;
1133  numYZNC += y[i]*wZNC;
1134  denZNC += wZNC;
1135  }
1136  if(towZNA[i+1]>0.) {
1137  wZNA = TMath::Power(towZNA[i+1], fZDCGainAlpha);
1138  numXZNA += x[i]*wZNA;
1139  numYZNA += y[i]*wZNA;
1140  denZNA += wZNA;
1141  }
1142  }
1143  if(denZNC!=0) {
1144  xyZNC[0] = numXZNC/denZNC;
1145  xyZNC[1] = numYZNC/denZNC;
1146  }
1147  else{
1148  xyZNC[0] = xyZNC[1] = 999.;
1149  zncEnergy = 0.;
1150  }
1151  if(denZNA!=0) {
1152  xyZNA[0] = numXZNA/denZNA;
1153  xyZNA[1] = numYZNA/denZNA;
1154  }
1155  else{
1156  xyZNA[0] = xyZNA[1] = 999.;
1157  znaEnergy = 0.;
1158  }
1159  }
1160 
1161  Float_t MulA=0., MulC=0.;
1162  for(Int_t i=0; i<4; i++) {
1163  if(towZNC[i+1]>0.) {
1164  MulC += TMath::Power(towZNC[i+1], fZDCGainAlpha);
1165  }
1166  if(towZNA[i+1]>0.) {
1167  MulA += TMath::Power(towZNA[i+1], fZDCGainAlpha);
1168  }
1169  }
1170 
1171  fhZNCcentroid->Fill(xyZNC[0], xyZNC[1]);
1172  fhZNAcentroid->Fill(xyZNA[0], xyZNA[1]);
1173  fFlowEvent->SetZDC2Qsub(xyZNC,MulC,xyZNA,MulA);
1174 
1175  // ******************************************************************************
1176 
1177  Float_t tdcSum = aodZDC->GetZDCTimeSum();
1178  Float_t tdcDiff = aodZDC->GetZDCTimeDiff();
1179  fhDebunch->Fill(tdcDiff, tdcSum);
1180 
1181  for(int i=0; i<5; i++){
1182  fhZNCPM[i]->Fill(towZNC[i]);
1183  if((i<4) && (towZNC[0]>0.)) fhZNCPMQiPMC[i]->Fill(towZNC[i+1]/towZNC[0]);
1184  }
1185  for(int i=0; i<5; i++){
1186  fhZNAPM[i]->Fill(towZNA[i]);
1187  if(((i<4) && towZNA[0]>0.)) fhZNAPMQiPMC[i]->Fill(towZNA[i+1]/towZNA[0]);
1188  }
1189 
1190  fhZNCvsZNA->Fill(energyZNA, energyZNC);
1191  fhZDCCvsZDCCA->Fill(energyZNA+energyZPA, energyZNC+energyZPC);
1192  fhZNCvsZPC->Fill(energyZPC, energyZNC);
1193  fhZNAvsZPA->Fill(energyZPA, energyZNA);
1194  fhZNvsZP->Fill(energyZPA+energyZPC, energyZNA+energyZNC);
1195  fhZNvsVZERO->Fill(multV0A+multV0C, energyZNC+energyZNA);
1196  fhZDCvsVZERO->Fill(multV0A+multV0C, energyZNA+energyZPA+energyZNC+energyZPC);
1197  fhZDCvsTracklets->Fill((Float_t) (nTracklets), energyZNA+energyZPA+energyZNC+energyZPC);
1198 
1199  Double_t asymmetry = -999.;
1200  if((energyZNC+energyZNA)>0.) asymmetry = (energyZNC-energyZNA)/(energyZNC+energyZNA);
1201  fhAsymm->Fill(asymmetry);
1202  fhZNAvsAsymm->Fill(asymmetry, energyZNA/1000.);
1203  fhZNCvsAsymm->Fill(asymmetry, energyZNC/1000.);
1204 
1205  fhZNCvscentrality->Fill(centrperc, energyZNC/1000.);
1206  fhZNAvscentrality->Fill(centrperc, energyZNA/1000.);
1207 
1208  } // PHYSICS SELECTION
1209 
1210  }
1211 
1212  // p) cache run number
1214 
1215 // printf("debug: NoRPs %e, NoPOIs %e, RunNum %d, Cen %e \n",fFlowEvent->GetNumberOfRPs(),fFlowEvent->GetNumberOfPOIs(),fCachedRunNum,fFlowEvent->GetCentrality());
1216 
1217  PostData(1, fFlowEvent);
1218 
1219  PostData(2, fOutput);
1220 }
1221 //________________________________________________________________________
1222 
1224 {
1225  Int_t CenBin=-1;
1226  if (Centrality>0. && Centrality<5.) CenBin=0;
1227  if (Centrality>5. && Centrality<10.) CenBin=1;
1228  if (Centrality>10. && Centrality<20.) CenBin=2;
1229  if (Centrality>20. && Centrality<30.) CenBin=3;
1230  if (Centrality>30. && Centrality<40.) CenBin=4;
1231  if (Centrality>40. && Centrality<50.) CenBin=5;
1232  if (Centrality>50. && Centrality<60.) CenBin=6;
1233  if (Centrality>60. && Centrality<70.) CenBin=7;
1234  if (Centrality>70. && Centrality<80.) CenBin=8;
1235  if (Centrality>80. && Centrality<90.) CenBin=9;
1236  if (CenBin>=fnCen) CenBin=-1;
1237  if (fnCen==1) CenBin=0;
1238  return CenBin;
1239 } // end of AliFlowAnalysisCRC::GetCRCCenBin(Double_t Centrality)
1240 //_____________________________________________________________________________
1241 
1242 Double_t AliAnalysisTaskCRCZDC::GetWDist(const AliVVertex* v0, const AliVVertex* v1)
1243 {
1244  // calculate sqrt of weighted distance to other vertex
1245  if (!v0 || !v1) {
1246  printf("One of vertices is not valid\n");
1247  return 0;
1248  }
1249  static TMatrixDSym vVb(3);
1250  double dist = -1;
1251  double dx = v0->GetX()-v1->GetX();
1252  double dy = v0->GetY()-v1->GetY();
1253  double dz = v0->GetZ()-v1->GetZ();
1254  double cov0[6],cov1[6];
1255  v0->GetCovarianceMatrix(cov0);
1256  v1->GetCovarianceMatrix(cov1);
1257 
1258  vVb(1,1) = cov0[2]+cov1[2];
1259  vVb(2,2) = cov0[5]+cov1[5];
1260  vVb(1,0) = vVb(0,1) = cov0[1]+cov1[1];
1261  vVb(0,2) = vVb(1,2) = vVb(2,0) = vVb(2,1) = 0.;
1262  vVb.InvertFast();
1263  if (!vVb.IsValid()) {printf("Singular Matrix\n"); return dist;}
1264  dist = vVb(0,0)*dx*dx + vVb(1,1)*dy*dy + vVb(2,2)*dz*dz
1265  + 2*vVb(0,1)*dx*dy + 2*vVb(0,2)*dx*dz + 2*vVb(1,2)*dy*dz;
1266  return dist>0 ? TMath::Sqrt(dist) : -1;
1267 
1268 }
1269 //________________________________________________________________________
1270 
1272 {
1273  // check for multi-vertexer pile-up
1274 
1275  const int kMinPlpContrib = 5;
1276  const double kMaxPlpChi2 = 5.0;
1277  const double kMinWDist = 15;
1278 
1279  const AliVVertex* vtPrm = 0;
1280  const AliVVertex* vtPlp = 0;
1281  int nPlp = 0;
1282 
1283  if ( !(nPlp=aod->GetNumberOfPileupVerticesTracks()) ) return kFALSE;
1284  vtPrm = aod->GetPrimaryVertex();
1285  if (vtPrm == aod->GetPrimaryVertexSPD()) return kTRUE; // there are pile-up vertices but no primary
1286 
1287  //int bcPrim = vtPrm->GetBC();
1288 
1289  for (int ipl=0;ipl<nPlp;ipl++) {
1290  vtPlp = (const AliVVertex*)aod->GetPileupVertexTracks(ipl);
1291  //
1292  if (vtPlp->GetNContributors() < kMinPlpContrib) continue;
1293  if (vtPlp->GetChi2perNDF() > kMaxPlpChi2) continue;
1294  // int bcPlp = vtPlp->GetBC();
1295  // if (bcPlp!=AliVTrack::kTOFBCNA && TMath::Abs(bcPlp-bcPrim)>2) return kTRUE; // pile-up from other BC
1296  //
1297  double wDst = GetWDist(vtPrm,vtPlp);
1298  if (wDst<kMinWDist) continue;
1299  //
1300  return kTRUE; // pile-up: well separated vertices
1301  }
1302 
1303  return kFALSE;
1304 }
1305 
1306 //________________________________________________________________________
1308  fCutContainer->AddAt(cutsRP,0); fCutsRP=cutsRP; cutsRP->SetPOItype(0);
1309 }
1310 
1311 //________________________________________________________________________
1313  fCutContainer->AddAt(cutsPOI,1); fCutsPOI=cutsPOI; cutsPOI->SetPOItype(1);
1314 }
1315 
1316 //________________________________________________________________________
1318 {
1319  // Terminate analysis
1320  //
1321  /* if(fDebug > 1) printf(" **** AliAnalysisTaskCRCZDC::Terminate() \n");
1322 
1323  //fOutput = dynamic_cast<TList*> (GetOutputData(1));
1324  //if(!fOutput) printf("ERROR: fOutput not available\n");
1325  */
1326 }
TH2F * fhZDCCvsZDCCA
ZNC vs ZNA;.
TH2F * fhZNvsVZERO
ZNC+ZNA vs ZPC+ZPA;.
void FindDaughters(Bool_t keepDaughtersInRPselection=kFALSE)
const Color_t cc[]
Definition: DrawKs.C:1
Float_t GetCentrality(AliVEvent *event, AliMCEvent *mcEvent)
double Double_t
Definition: External.C:58
void SetEta(Double_t eta)
Int_t fRunList[fCRCMaxnRun]
Definition: External.C:236
TH2F * fhZDCvsTracklets
ZDC vs VZERO;.
TH1F * fhZNCPMQiPMC[4]
ZNA PM high res.
TH1F * fPtSpecGen[10]
list with pt spectra
TH2F * fhZNCvsZPC
ZDCC vs ZDCCA.
virtual void SetZDC2Qsub(Double_t *QVC, Double_t MC, Double_t *QVA, Double_t MA)
TH1F * fPtSpecFB32[10]
PtSpecGen.
void AddFlow(Double_t v1, Double_t v2, Double_t v3, Double_t v4, Double_t v5)
Int_t GetReferenceMultiplicity(AliVEvent *event, AliMCEvent *mcEvent)
centrality
void Set(const AliVParticle *p)
TH2F * fhZNCvsAsymm
ZNA vs asymmetry.
void SetMCReactionPlaneAngle(const AliMCEvent *mcEvent)
void SetCutsPOI(AliFlowTrackCuts *cutsPOI)
virtual void UserExec(Option_t *option)
void SetHistWeightvsPhiMax(Double_t d)
TCanvas * c
Definition: TestFitELoss.C:172
TH2F * fhZNCvscentrality
ZNC vs asymmetry.
void SetZNAEnergy(Double_t const en)
void SetReferenceMultiplicity(Int_t m)
virtual Int_t GetCenBin(Double_t Centrality)
void SetCutsRP(AliFlowTrackCuts *cutsRP)
TRandom * gRandom
TH2F * fhZNCvsZNA
PMQi/PMC for ZNA.
TH2F * fhDebunch
ZDC vs N_cluster layer 1;.
TH1F * fhAsymm
ZNA centroid.
void SetCentralityCL1(Double_t c)
virtual void SetVertexPosition(Double_t *pos)
void IncrementNumberOfPOIs(Int_t poiType=1)
TList * GetQA() const
void SetForRPSelection(Bool_t b=kTRUE)
const Double_t etamin
void Fill(AliFlowTrackCuts *rpCuts, AliFlowTrackCuts *poiCuts)
TH2F * fhZNAvsZPA
ZNC vs ZPC;.
int Int_t
Definition: External.C:63
TH1F * fhZNAPM[5]
ZNC PM high res.
unsigned int UInt_t
Definition: External.C:33
void SetShuffleTracks(Bool_t b)
float Float_t
Definition: External.C:68
AliMultSelection * fMultSelection
centrality distribution
void SetNITSCL1(Double_t c)
virtual void UserCreateOutputObjects()
Definition: External.C:212
static AliFlowCommonConstants * GetMaster()
TH2F * fhZDCvsNclu1
ZDC vs N_tracklets;.
AliFlowEventCuts * fCutsEvent
const Double_t ptmin
Double_t GetCentrality() const
ClassImp(AliAnalysisTaskCRCZDC) AliAnalysisTaskCRCZDC
Bool_t plpMV(const AliAODEvent *aod)
void SetCentrality(Double_t c)
AliFlowTrackCuts * fCutsPOI
void SetRun(Int_t const run)
void SetSource(trackSource s)
Definition: AliFlowTrack.h:37
void SetPhi(Double_t phi)
short Short_t
Definition: External.C:23
void DefineDeadZone(Double_t etaMin, Double_t etaMax, Double_t phiMin, Double_t phiMax)
AliGenEventHeader * fGenHeader
void SetPt(Double_t pt)
TList * fCRCQVecListRun[fCRCMaxnRun]
Run list.
void SetZNCEnergy(Double_t const en)
TH1F * fPtSpecFB128[10]
PtSpecRec FB96.
virtual void Terminate(Option_t *option)
void SetEvent(AliVEvent *event, AliMCEvent *mcEvent=NULL)
TH2F * fhZNAcentroid
ZNC centroid.
Bool_t IsSetMCReactionPlaneAngle() const
TClonesArray * fStack
Q Vectors list per run.
TList * GetQA() const
static const Int_t fCRCMaxnRun
ZNA vs. centrality.
void SetForPOISelection(Bool_t b=kTRUE)
TH1F * fPtSpecFB96[10]
PtSpecRec FB32.
void SetHistWeightvsPhiMin(Double_t d)
TH1F * fhZNAPMQiPMC[4]
PMQi/PMC for ZNC.
void AddV2(Double_t v2)
TH2F * fhZDCvsVZERO
ZN vs VZERO;.
void TagSubeventsInEta(Double_t etaMinA, Double_t etaMaxA, Double_t etaMinB, Double_t etaMaxB)
unsigned short UShort_t
Definition: External.C:28
const char Option_t
Definition: External.C:48
TH2F * fhZNAvsAsymm
ZN asymmetry.
TH2F * fhZNAvscentrality
ZNC vs. centrality.
bool Bool_t
Definition: External.C:53
virtual Bool_t IsSelected(TObject *obj, TObject *objmc)
TH1F * fhZNCPM[5]
list send on output slot 0
void SetCentralityTRK(Double_t c)
Double_t GetWDist(const AliVVertex *v0, const AliVVertex *v1)
Bool_t fCutTPC
PtSpecRec FB768.
TH1F * fPtSpecFB768[10]
PtSpecRec FB128.
AliFlowTrackCuts * fCutsRP
void InsertTrack(AliFlowTrack *)
virtual void ClearFast()
AliAnalysisUtils * fAnalysisUtil
Event selection.
TH2F * fhZNCcentroid
Debunch;.
TH2F * fhZNvsZP
ZNA vs ZPA;.
AliGenHijingEventHeader * fHijingGenHeader
const Double_t phimin
AliGenPythiaEventHeader * fPythiaGenHeader
Int_t NumberOfTracks() const