1 /////////////////////////////////////////////////////////////////////////////////
3 // HOW TO USE THIS MACRO:
5 // With this macro several flow analysis can be run.
6 // SP = Scalar Product (for PbPb or pp)
7 // LYZ1 = Lee Yang Zeroes first run (for PbPb)
8 // LYZ2 = Lee Yang Zeroes second run (for PbPb)
9 // LYZEP = Lee Yang Zeroes Event Plane (for PbPb)
10 // GFC = Cumulants (for PbPb)
11 // QC = Q-cumulants (for PbPb or pp)
12 // FQD = Fitting q-distribution (for PbPb)
13 // MCEP = Flow calculated from the real MC event plane (for PbPb only)
15 // The LYZ analysis should be done in the following order;
16 // LYZ1 -> LYZ2 -> LYZEP,
17 // because LYZ2 depends on the outputfile of LYZ1 and LYZEP on the outputfile
20 // The MCEP method is a reference method.
21 // It can only be run when MC information (kinematics.root & galice.root file)
22 // is available in which the reaction plane is stored.
24 // One can run on ESD, AOD or MC.
25 // Additional options are ESDMC0, ESDMC1. In these options the ESD and MC
26 // information is combined. Tracks are selected in the ESD, the PID information
27 // is taken from the MC (perfect PID). For ESDMC0 the track kinematics is taken
28 // from the ESD and for ESDMC1 it is taken from the MC information.
30 ///////////////////////////////////////////////////////////////////////////////////
35 // Flow analysis method can be:(set to kTRUE or kFALSE)
39 Bool_t LYZEP = kFALSE;
45 // Analysis type can be ESD, AOD, MC, ESDMC0, ESDMC1
46 const TString type = "ESD";
48 // Boolean to fill/not fill the QA histograms
52 //Use weights for Q vector
53 Bool_t usePhiWeights = kFALSE; //Phi
54 Bool_t usePtWeights = kFALSE; //v'(pt)
55 Bool_t useEtaWeights = kFALSE; //v'(eta)
56 Bool_t useWeights = usePhiWeights||usePtWeights||useEtaWeights;
61 // For integrated flow
62 const Double_t ptmin1 = 0.0;
63 const Double_t ptmax1 = 10.0;
64 const Double_t ymin1 = -1.;
65 const Double_t ymax1 = 1.;
66 const Int_t mintrackrefsTPC1 = 2;
67 const Int_t mintrackrefsITS1 = 3;
68 const Int_t charge1 = 1;
69 Bool_t UsePIDIntegratedFlow = kFALSE;
70 const Int_t PDG1 = 211;
71 const Int_t minclustersTPC1 = 50;
72 const Int_t maxnsigmatovertex1 = 3;
74 // For differential flow
75 const Double_t ptmin2 = 0.0;
76 const Double_t ptmax2 = 10.0;
77 const Double_t ymin2 = -1.;
78 const Double_t ymax2 = 1.;
79 const Int_t mintrackrefsTPC2 = 2;
80 const Int_t mintrackrefsITS2 = 3;
81 const Int_t charge2 = 1;
82 Bool_t UsePIDDifferentialFlow = kFALSE;
83 const Int_t PDG2 = 211;
84 const Int_t minclustersTPC2 = 50;
85 const Int_t maxnsigmatovertex2 = 3;
88 //void runProofFlow(const Char_t* data="/COMMON/COMMON/LHC08c11_10TeV_0.5T", Int_t nRuns=-1, Int_t offset=0) {
89 //void runProofFlow(const Char_t* data="/COMMON/COMMON/LHC08c18_0.9TeV_0T_Phojet", Int_t nRuns=-1, Int_t offset=0) {
92 //void runProofFlow(const Char_t* data="/PWG2/akisiel/Therminator_midcentral_ESD", Int_t nRuns=-1, Int_t offset=0) {
94 void runProofFlow(const Char_t* data="/PWG2/akisiel/Therminator_c2030", Int_t nRuns=-1, Int_t offset=0) {
95 //void runProofFlow(const Char_t* data="/PWG2/akisiel/Therminator_central", Int_t nRuns=-1, Int_t offset=0) {
96 //void runProofFlow(const Char_t* data="/PWG2/akisiel/Therminator_midcentral", Int_t nRuns=-1, Int_t offset=0) {
99 //void runProofFlow(const Char_t* data="/PWG2/nkolk/myDataSet", Int_t nRuns=-1, Int_t offset=0) {
100 //void runProofFlow(const Char_t* data="/PWG2/akisiel/Therminator_midcentral_AOD", Int_t nRuns=44, Int_t offset=0) {
105 if (LYZ1 && LYZ2) {cout<<"WARNING: you cannot run LYZ1 and LYZ2 at the same time! LYZ2 needs the output from LYZ1."<<endl; exit(); }
106 if (LYZ2 && LYZEP) {cout<<"WARNING: you cannot run LYZ2 and LYZEP at the same time! LYZEP needs the output from LYZ2."<<endl; exit(); }
107 if (LYZ1 && LYZEP) {cout<<"WARNING: you cannot run LYZ1 and LYZEP at the same time! LYZEP needs the output from LYZ2."<<endl; exit(); }
109 // set to debug root versus if needed
110 // TProof::Mgr("alicecaf")->SetROOTVersion("v5-21-01-alice_dbg");
111 // TProof::Mgr("alicecaf")->SetROOTVersion("v5-21-01-alice");
113 printf("*** Connect to PROOF ***\n");
114 // TProof::Open("abilandz@alicecaf.cern.ch");
115 TProof::Open("snelling@localhost");
117 //gProof->UploadPackage("AF-v4-15");
118 //gProof->EnablePackage("AF-v4-15");
119 gProof->UploadPackage("STEERBase.par");
120 gProof->EnablePackage("STEERBase");
121 gProof->UploadPackage("ESD.par");
122 gProof->EnablePackage("ESD");
123 gProof->UploadPackage("AOD.par");
124 gProof->EnablePackage("AOD");
125 gProof->UploadPackage("ANALYSIS.par");
126 gProof->EnablePackage("ANALYSIS");
127 gProof->UploadPackage("ANALYSISalice.par");
128 gProof->EnablePackage("ANALYSISalice");
129 gProof->UploadPackage("PWG2AOD.par");
130 gProof->EnablePackage("PWG2AOD");
131 gProof->ClearPackage("CORRFW.par");
132 gProof->UploadPackage("CORRFW.par");
133 gProof->EnablePackage("CORRFW");
134 gProof->ClearPackage("PWG2flowCommon");
135 gProof->UploadPackage("PWG2flowCommon.par");
136 gProof->EnablePackage("PWG2flowCommon");
137 gProof->ClearPackage("PWG2flowTasks");
138 gProof->UploadPackage("PWG2flowTasks.par");
139 gProof->EnablePackage("PWG2flowTasks");
142 //____________________________________________//
143 //Create cuts using correction framework
145 //Set TList for the QA histograms
148 TList* qaIntSP = new TList();
149 TList* qaDiffSP = new TList(); }
151 TList* qaIntLYZ1 = new TList();
152 TList* qaDiffLYZ1 = new TList(); }
154 TList* qaIntLYZ2 = new TList();
155 TList* qaDiffLYZ2 = new TList(); }
157 TList* qaIntLYZEP = new TList();
158 TList* qaDiffLYZEP = new TList(); }
160 TList* qaIntGFC = new TList();
161 TList* qaDiffGFC = new TList(); }
163 TList* qaIntQC = new TList();
164 TList* qaDiffQC = new TList(); }
166 TList* qaIntFQD = new TList();
167 TList* qaDiffFQD = new TList(); }
169 TList* qaIntMCEP = new TList();
170 TList* qaDiffMCEP = new TList(); }
173 //############# cuts on MC
174 AliCFTrackKineCuts* mcKineCuts1 = new AliCFTrackKineCuts("mcKineCuts1","MC-level kinematic cuts");
175 mcKineCuts1->SetPtRange(ptmin1,ptmax1);
176 mcKineCuts1->SetRapidityRange(ymin1,ymax1);
177 mcKineCuts1->SetChargeMC(charge1);
179 if (SP) { mcKineCuts1->SetQAOn(qaIntSP); }
180 if (LYZ1) { mcKineCuts1->SetQAOn(qaIntLYZ1); }
181 if (LYZ2) { mcKineCuts1->SetQAOn(qaIntLYZ2); }
182 if (LYZEP){ mcKineCuts1->SetQAOn(qaIntLYZEP); }
183 if (GFC) { mcKineCuts1->SetQAOn(qaIntGFC); }
184 if (QC) { mcKineCuts1->SetQAOn(qaIntQC); }
185 if (FQD) { mcKineCuts1->SetQAOn(qaIntFQD); }
186 if (MCEP) { mcKineCuts1->SetQAOn(qaIntMCEP); }
189 AliCFTrackKineCuts* mcKineCuts2 = new AliCFTrackKineCuts("mcKineCuts2","MC-level kinematic cuts");
190 mcKineCuts2->SetPtRange(ptmin2,ptmax2);
191 mcKineCuts2->SetRapidityRange(ymin2,ymax2);
192 mcKineCuts2->SetChargeMC(charge2);
194 if (SP) { mcKineCuts2->SetQAOn(qaDiffSP); }
195 if (LYZ1) { mcKineCuts2->SetQAOn(qaDiffLYZ1); }
196 if (LYZ2) { mcKineCuts2->SetQAOn(qaDiffLYZ2); }
197 if (LYZEP){ mcKineCuts2->SetQAOn(qaDiffLYZEP); }
198 if (GFC) { mcKineCuts2->SetQAOn(qaDiffGFC); }
199 if (QC) { mcKineCuts2->SetQAOn(qaDiffQC); }
200 if (FQD) { mcKineCuts2->SetQAOn(qaDiffFQD); }
201 if (MCEP) { mcKineCuts2->SetQAOn(qaDiffMCEP); }
204 AliCFParticleGenCuts* mcGenCuts1 = new AliCFParticleGenCuts("mcGenCuts1","MC particle generation cuts for integrated flow");
205 mcGenCuts1->SetRequireIsPrimary();
206 if (UsePIDIntegratedFlow) {mcGenCuts1->SetRequirePdgCode(PDG1);}
208 if (SP) { mcGenCuts1->SetQAOn(qaIntSP); }
209 if (LYZ1) { mcGenCuts1->SetQAOn(qaIntLYZ1); }
210 if (LYZ2) { mcGenCuts1->SetQAOn(qaIntLYZ2); }
211 if (LYZEP){ mcGenCuts1->SetQAOn(qaIntLYZEP); }
212 if (GFC) { mcGenCuts1->SetQAOn(qaIntGFC); }
213 if (QC) { mcGenCuts1->SetQAOn(qaIntQC); }
214 if (FQD) { mcGenCuts1->SetQAOn(qaIntFQD); }
215 if (MCEP) { mcGenCuts1->SetQAOn(qaIntMCEP); }
218 AliCFParticleGenCuts* mcGenCuts2 = new AliCFParticleGenCuts("mcGenCuts2","MC particle generation cuts for differential flow");
219 mcGenCuts2->SetRequireIsPrimary();
220 if (UsePIDDifferentialFlow) {mcGenCuts2->SetRequirePdgCode(PDG2);}
222 if (SP) { mcGenCuts2->SetQAOn(qaDiffSP); }
223 if (LYZ1) { mcGenCuts2->SetQAOn(qaDiffLYZ1); }
224 if (LYZ2) { mcGenCuts2->SetQAOn(qaDiffLYZ2); }
225 if (LYZEP){ mcGenCuts2->SetQAOn(qaDiffLYZEP); }
226 if (GFC) { mcGenCuts2->SetQAOn(qaDiffGFC); }
227 if (QC) { mcGenCuts2->SetQAOn(qaDiffQC); }
228 if (FQD) { mcGenCuts2->SetQAOn(qaDiffFQD); }
229 if (MCEP) { mcGenCuts2->SetQAOn(qaDiffMCEP); }
232 //############# Acceptance Cuts
233 AliCFAcceptanceCuts *mcAccCuts1 = new AliCFAcceptanceCuts("mcAccCuts1","MC acceptance cuts");
234 mcAccCuts1->SetMinNHitITS(mintrackrefsITS1);
235 mcAccCuts1->SetMinNHitTPC(mintrackrefsTPC1);
237 if (SP) { mcAccCuts1->SetQAOn(qaIntSP); }
238 if (LYZ1) { mcAccCuts1->SetQAOn(qaIntLYZ1); }
239 if (LYZ2) { mcAccCuts1->SetQAOn(qaIntLYZ2); }
240 if (LYZEP){ mcAccCuts1->SetQAOn(qaIntLYZEP); }
241 if (GFC) { mcAccCuts1->SetQAOn(qaIntGFC); }
242 if (QC) { mcAccCuts1->SetQAOn(qaIntQC); }
243 if (FQD) { mcAccCuts1->SetQAOn(qaIntFQD); }
244 if (MCEP) { mcAccCuts1->SetQAOn(qaIntMCEP); }
247 AliCFAcceptanceCuts *mcAccCuts2 = new AliCFAcceptanceCuts("mcAccCuts2","MC acceptance cuts");
248 mcAccCuts2->SetMinNHitITS(mintrackrefsITS2);
249 mcAccCuts2->SetMinNHitTPC(mintrackrefsTPC2);
251 if (SP) { mcAccCuts2->SetQAOn(qaDiffSP); }
252 if (LYZ1) { mcAccCuts2->SetQAOn(qaDiffLYZ1); }
253 if (LYZ2) { mcAccCuts2->SetQAOn(qaDiffLYZ2); }
254 if (LYZEP){ mcAccCuts2->SetQAOn(qaDiffLYZEP); }
255 if (GFC) { mcAccCuts2->SetQAOn(qaDiffGFC); }
256 if (QC) { mcAccCuts2->SetQAOn(qaDiffQC); }
257 if (FQD) { mcAccCuts2->SetQAOn(qaDiffFQD); }
258 if (MCEP) { mcAccCuts2->SetQAOn(qaDiffMCEP); }
261 //############# Rec-Level kinematic cuts
262 AliCFTrackKineCuts *recKineCuts1 = new AliCFTrackKineCuts("recKineCuts1","rec-level kine cuts");
263 recKineCuts1->SetPtRange(ptmin1,ptmax1);
264 recKineCuts1->SetRapidityRange(ymin1,ymax1);
265 recKineCuts1->SetChargeRec(charge1);
267 if (SP) { recKineCuts1->SetQAOn(qaIntSP); }
268 if (LYZ1) { recKineCuts1->SetQAOn(qaIntLYZ1); }
269 if (LYZ2) { recKineCuts1->SetQAOn(qaIntLYZ2); }
270 if (LYZEP){ recKineCuts1->SetQAOn(qaIntLYZEP); }
271 if (GFC) { recKineCuts1->SetQAOn(qaIntGFC); }
272 if (QC) { recKineCuts1->SetQAOn(qaIntQC); }
273 if (FQD) { recKineCuts1->SetQAOn(qaIntFQD); }
274 if (MCEP) { recKineCuts1->SetQAOn(qaIntMCEP); }
277 AliCFTrackKineCuts *recKineCuts2 = new AliCFTrackKineCuts("recKineCuts2","rec-level kine cuts");
278 recKineCuts2->SetPtRange(ptmin2,ptmax2);
279 recKineCuts2->SetRapidityRange(ymin2,ymax2);
280 recKineCuts2->SetChargeRec(charge2);
282 if (SP) { recKineCuts2->SetQAOn(qaDiffSP); }
283 if (LYZ1) { recKineCuts2->SetQAOn(qaDiffLYZ1); }
284 if (LYZ2) { recKineCuts2->SetQAOn(qaDiffLYZ2); }
285 if (LYZEP){ recKineCuts2->SetQAOn(qaDiffLYZEP); }
286 if (GFC) { recKineCuts2->SetQAOn(qaDiffGFC); }
287 if (QC) { recKineCuts2->SetQAOn(qaDiffQC); }
288 if (FQD) { recKineCuts2->SetQAOn(qaDiffFQD); }
289 if (MCEP) { recKineCuts2->SetQAOn(qaDiffMCEP); }
292 AliCFTrackQualityCuts *recQualityCuts1 = new AliCFTrackQualityCuts("recQualityCuts1","rec-level quality cuts");
293 recQualityCuts1->SetMinNClusterTPC(minclustersTPC1);
294 recQualityCuts1->SetStatus(AliESDtrack::kITSrefit);
296 if (SP) { recQualityCuts1->SetQAOn(qaIntSP); }
297 if (LYZ1) { recQualityCuts1->SetQAOn(qaIntLYZ1); }
298 if (LYZ2) { recQualityCuts1->SetQAOn(qaIntLYZ2); }
299 if (LYZEP){ recQualityCuts1->SetQAOn(qaIntLYZEP); }
300 if (GFC) { recQualityCuts1->SetQAOn(qaIntGFC); }
301 if (QC) { recQualityCuts1->SetQAOn(qaIntQC); }
302 if (FQD) { recQualityCuts1->SetQAOn(qaIntFQD); }
303 if (MCEP) { recQualityCuts1->SetQAOn(qaIntMCEP); }
306 AliCFTrackQualityCuts *recQualityCuts2 = new AliCFTrackQualityCuts("recQualityCuts2","rec-level quality cuts");
307 recQualityCuts2->SetMinNClusterTPC(minclustersTPC2);
308 recQualityCuts2->SetStatus(AliESDtrack::kITSrefit);
310 if (SP) { recQualityCuts2->SetQAOn(qaDiffSP); }
311 if (LYZ1) { recQualityCuts2->SetQAOn(qaDiffLYZ1); }
312 if (LYZ2) { recQualityCuts2->SetQAOn(qaDiffLYZ2); }
313 if (LYZEP){ recQualityCuts2->SetQAOn(qaDiffLYZEP); }
314 if (GFC) { recQualityCuts2->SetQAOn(qaDiffGFC); }
315 if (QC) { recQualityCuts2->SetQAOn(qaDiffQC); }
316 if (FQD) { recQualityCuts2->SetQAOn(qaDiffFQD); }
317 if (MCEP) { recQualityCuts2->SetQAOn(qaDiffMCEP); }
320 AliCFTrackIsPrimaryCuts *recIsPrimaryCuts1 = new AliCFTrackIsPrimaryCuts("recIsPrimaryCuts1","rec-level isPrimary cuts");
321 recIsPrimaryCuts1->SetMaxNSigmaToVertex(maxnsigmatovertex1);
323 if (SP) { recIsPrimaryCuts1->SetQAOn(qaIntSP); }
324 if (LYZ1) { recIsPrimaryCuts1->SetQAOn(qaIntLYZ1); }
325 if (LYZ2) { recIsPrimaryCuts1->SetQAOn(qaIntLYZ2); }
326 if (LYZEP){ recIsPrimaryCuts1->SetQAOn(qaIntLYZEP); }
327 if (GFC) { recIsPrimaryCuts1->SetQAOn(qaIntGFC); }
328 if (QC) { recIsPrimaryCuts1->SetQAOn(qaIntQC); }
329 if (FQD) { recIsPrimaryCuts1->SetQAOn(qaIntFQD); }
330 if (MCEP) { recIsPrimaryCuts1->SetQAOn(qaIntMCEP); }
333 AliCFTrackIsPrimaryCuts *recIsPrimaryCuts2 = new AliCFTrackIsPrimaryCuts("recIsPrimaryCuts2","rec-level isPrimary cuts");
334 recIsPrimaryCuts2->SetMaxNSigmaToVertex(maxnsigmatovertex2);
336 if (SP) { recIsPrimaryCuts2->SetQAOn(qaDiffSP); }
337 if (LYZ1) { recIsPrimaryCuts2->SetQAOn(qaDiffLYZ1); }
338 if (LYZ2) { recIsPrimaryCuts2->SetQAOn(qaDiffLYZ2); }
339 if (LYZEP){ recIsPrimaryCuts2->SetQAOn(qaDiffLYZEP); }
340 if (GFC) { recIsPrimaryCuts2->SetQAOn(qaDiffGFC); }
341 if (QC) { recIsPrimaryCuts2->SetQAOn(qaDiffQC); }
342 if (FQD) { recIsPrimaryCuts2->SetQAOn(qaDiffFQD); }
343 if (MCEP) { recIsPrimaryCuts2->SetQAOn(qaDiffMCEP); }
346 int n_species = AliPID::kSPECIES ;
347 Double_t* prior = new Double_t[n_species];
349 prior[0] = 0.0244519 ;
350 prior[1] = 0.0143988 ;
351 prior[2] = 0.805747 ;
352 prior[3] = 0.0928785 ;
353 prior[4] = 0.0625243 ;
355 AliCFTrackCutPid* cutPID1 = NULL;
356 if(UsePIDIntegratedFlow) {
357 AliCFTrackCutPid* cutPID1 = new AliCFTrackCutPid("cutPID1","ESD_PID for integrated flow") ;
358 cutPID1->SetPriors(prior);
359 cutPID1->SetProbabilityCut(0.0);
360 cutPID1->SetDetectors("TPC TOF");
361 switch(TMath::Abs(PDG1)) {
362 case 11 : cutPID1->SetParticleType(AliPID::kElectron, kTRUE); break;
363 case 13 : cutPID1->SetParticleType(AliPID::kMuon , kTRUE); break;
364 case 211 : cutPID1->SetParticleType(AliPID::kPion , kTRUE); break;
365 case 321 : cutPID1->SetParticleType(AliPID::kKaon , kTRUE); break;
366 case 2212 : cutPID1->SetParticleType(AliPID::kProton , kTRUE); break;
367 default : printf("UNDEFINED PID\n"); break;
370 if (SP) {cutPID1->SetQAOn(qaIntSP);}
371 if (LYZ1) {cutPID1->SetQAOn(qaIntLYZ1);}
372 if (LYZ2) {cutPID1->SetQAOn(qaIntLYZ2);}
373 if (LYZEP){cutPID1->SetQAOn(qaIntLYZEP);}
374 if (GFC) {cutPID1->SetQAOn(qaIntGFC);}
375 if (QC) {cutPID1->SetQAOn(qaIntQC);}
376 if (FQD) {cutPID1->SetQAOn(qaIntFQD);}
377 if (MCEP) {cutPID1->SetQAOn(qaIntMCEP);}
381 AliCFTrackCutPid* cutPID2 = NULL;
382 if (UsePIDDifferentialFlow) {
383 AliCFTrackCutPid* cutPID2 = new AliCFTrackCutPid("cutPID2","ESD_PID for differential flow") ;
384 cutPID2->SetPriors(prior);
385 cutPID2->SetProbabilityCut(0.0);
386 cutPID2->SetDetectors("TPC TOF");
387 switch(TMath::Abs(PDG2)) {
388 case 11 : cutPID2->SetParticleType(AliPID::kElectron, kTRUE); break;
389 case 13 : cutPID2->SetParticleType(AliPID::kMuon , kTRUE); break;
390 case 211 : cutPID2->SetParticleType(AliPID::kPion , kTRUE); break;
391 case 321 : cutPID2->SetParticleType(AliPID::kKaon , kTRUE); break;
392 case 2212 : cutPID2->SetParticleType(AliPID::kProton , kTRUE); break;
393 default : printf("UNDEFINED PID\n"); break;
396 if (SP) {cutPID2->SetQAOn(qaIntSP);}
397 if (LYZ1) {cutPID2->SetQAOn(qaIntLYZ1);}
398 if (LYZ2) {cutPID2->SetQAOn(qaIntLYZ2);}
399 if (LYZEP){cutPID2->SetQAOn(qaIntLYZEP);}
400 if (GFC) {cutPID2->SetQAOn(qaIntGFC);}
401 if (QC) {cutPID2->SetQAOn(qaIntQC);}
402 if (FQD) {cutPID2->SetQAOn(qaIntFQD);}
403 if (MCEP) {cutPID2->SetQAOn(qaIntMCEP);}
407 printf("CREATE MC KINE CUTS\n");
408 TObjArray* mcList1 = new TObjArray(0);
409 mcList1->AddLast(mcKineCuts1);
410 mcList1->AddLast(mcGenCuts1);
412 TObjArray* mcList2 = new TObjArray(0);
413 mcList2->AddLast(mcKineCuts2);
414 mcList2->AddLast(mcGenCuts2);
416 printf("CREATE ACCEPTANCE CUTS\n");
417 TObjArray* accList1 = new TObjArray(0) ;
418 accList1->AddLast(mcAccCuts1);
420 TObjArray* accList2 = new TObjArray(0) ;
421 accList2->AddLast(mcAccCuts2);
423 printf("CREATE RECONSTRUCTION CUTS\n");
424 TObjArray* recList1 = new TObjArray(0) ;
425 recList1->AddLast(recKineCuts1);
426 recList1->AddLast(recQualityCuts1);
427 recList1->AddLast(recIsPrimaryCuts1);
429 TObjArray* recList2 = new TObjArray(0) ;
430 recList2->AddLast(recKineCuts2);
431 recList2->AddLast(recQualityCuts2);
432 recList2->AddLast(recIsPrimaryCuts2);
434 printf("CREATE PID CUTS\n");
435 TObjArray* fPIDCutList1 = new TObjArray(0) ;
436 if(UsePIDIntegratedFlow) {fPIDCutList1->AddLast(cutPID1);}
438 TObjArray* fPIDCutList2 = new TObjArray(0) ;
439 if (UsePIDDifferentialFlow) {fPIDCutList2->AddLast(cutPID2);}
441 printf("CREATE INTERFACE AND CUTS\n");
442 AliCFManager* cfmgr1 = new AliCFManager();
443 // cfmgr1->SetNStepParticle(4); //05nov08
444 cfmgr1->SetParticleCutsList(AliCFManager::kPartGenCuts,mcList1);
445 cfmgr1->SetParticleCutsList(AliCFManager::kPartAccCuts,accList1);
446 cfmgr1->SetParticleCutsList(AliCFManager::kPartRecCuts,recList1);
447 cfmgr1->SetParticleCutsList(AliCFManager::kPartSelCuts,fPIDCutList1);
449 AliCFManager* cfmgr2 = new AliCFManager();
450 // cfmgr2->SetNStepParticle(4); //05nov08
451 cfmgr2->SetParticleCutsList(AliCFManager::kPartGenCuts,mcList2);
452 cfmgr2->SetParticleCutsList(AliCFManager::kPartAccCuts,accList2);
453 cfmgr2->SetParticleCutsList(AliCFManager::kPartRecCuts,recList2);
454 cfmgr2->SetParticleCutsList(AliCFManager::kPartSelCuts,fPIDCutList2);
457 TFile *weightsFile = NULL;
458 TList *weightsList = NULL;
461 //open the file with the weights:
462 weightsFile = TFile::Open("weights.root","READ");
464 //access the list which holds the histos with weigths:
465 weightsList = (TList*)weightsFile->Get("weights");
468 cout<<" WARNING: the file <weights.root> with weights from the previous run was not available."<<endl;
475 // read the input file from the first run
476 TString inputFileNameLYZ2 = "outputLYZ1analysis" ;
477 inputFileNameLYZ2 += type;
478 inputFileNameLYZ2 += ".root";
479 cout<<"The input file is "<<inputFileNameLYZ2.Data()<<endl;
480 TFile* fInputFileLYZ2 = new TFile(inputFileNameLYZ2.Data(),"READ");
481 if(!fInputFileLYZ2 || fInputFileLYZ2->IsZombie()) {
482 cerr << " ERROR: NO First Run file... " << endl ; }
484 TList* fInputListLYZ2 = (TList*)fInputFileLYZ2->Get("cobjLYZ1");
485 if (!fInputListLYZ2) {cout<<"list is NULL pointer!"<<endl;}
487 cout<<"LYZ2 input file/list read..."<<endl;
491 // read the input file from the second LYZ run
492 TString inputFileNameLYZEP = "outputLYZ2analysis" ;
493 inputFileNameLYZEP += type;
494 inputFileNameLYZEP += "_secondrun.root";
495 cout<<"The input file is "<<inputFileNameLYZEP.Data()<<endl;
496 TFile* fInputFileLYZEP = new TFile(inputFileNameLYZEP.Data(),"READ");
497 if(!fInputFileLYZEP || fInputFileLYZEP->IsZombie()) {
498 cerr << " ERROR: NO First Run file... " << endl ; }
500 TList* fInputListLYZEP = (TList*)fInputFileLYZEP->Get("cobjLYZ2");
501 if (!fInputListLYZEP) {cout<<"list is NULL pointer!"<<endl;}
503 cout<<"LYZEP input file/list read..."<<endl;
506 //____________________________________________//
507 // Make the analysis manager
508 AliAnalysisManager *mgr = new AliAnalysisManager("TestManager");
511 AliVEventHandler* esdH = new AliESDInputHandler;
512 mgr->SetInputEventHandler(esdH);
514 AliMCEventHandler *mc = new AliMCEventHandler();
515 mgr->SetMCtruthEventHandler(mc);} }
518 AliVEventHandler* aodH = new AliAODInputHandler;
519 mgr->SetInputEventHandler(aodH);
521 AliMCEventHandler *mc = new AliMCEventHandler();
522 mgr->SetMCtruthEventHandler(mc);} }
524 if (type == "MC" || type == "ESDMC0" || type == "ESDMC1"){
525 AliVEventHandler* esdH = new AliESDInputHandler;
526 mgr->SetInputEventHandler(esdH);
528 AliMCEventHandler *mc = new AliMCEventHandler();
529 mgr->SetMCtruthEventHandler(mc); }
531 //____________________________________________//
534 if (QA) { AliAnalysisTaskScalarProduct *taskSP = new AliAnalysisTaskScalarProduct("TaskScalarProduct",kTRUE); }
535 else { AliAnalysisTaskScalarProduct *taskSP = new AliAnalysisTaskScalarProduct("TaskScalarProduct",kFALSE); }
536 taskSP->SetAnalysisType(type);
537 taskSP->SetCFManager1(cfmgr1);
538 taskSP->SetCFManager2(cfmgr2);
540 taskSP->SetQAList1(qaIntSP);
541 taskSP->SetQAList2(qaDiffSP); }
542 mgr->AddTask(taskSP);
545 if (QA) { AliAnalysisTaskLeeYangZeros *taskLYZ1 = new AliAnalysisTaskLeeYangZeros("TaskLeeYangZeros",kTRUE,kTRUE);}
546 else { AliAnalysisTaskLeeYangZeros *taskLYZ1 = new AliAnalysisTaskLeeYangZeros("TaskLeeYangZeros",kTRUE,kFALSE);}
547 taskLYZ1->SetAnalysisType(type);
548 taskLYZ1->SetFirstRunLYZ(kTRUE);
549 taskLYZ1->SetUseSumLYZ(kTRUE);
550 taskLYZ1->SetCFManager1(cfmgr1);
551 taskLYZ1->SetCFManager2(cfmgr2);
553 taskLYZ1->SetQAList1(qaIntLYZ1);
554 taskLYZ1->SetQAList2(qaDiffLYZ1);}
555 mgr->AddTask(taskLYZ1);
558 if (QA) { AliAnalysisTaskLeeYangZeros *taskLYZ2 = new AliAnalysisTaskLeeYangZeros("TaskLeeYangZeros",kFALSE,kTRUE);}
559 else { AliAnalysisTaskLeeYangZeros *taskLYZ2 = new AliAnalysisTaskLeeYangZeros("TaskLeeYangZeros",kFALSE,kFALSE); }
560 taskLYZ2->SetAnalysisType(type);
561 taskLYZ2->SetFirstRunLYZ(kFALSE);
562 taskLYZ2->SetUseSumLYZ(kTRUE);
563 taskLYZ2->SetCFManager1(cfmgr1);
564 taskLYZ2->SetCFManager2(cfmgr2);
566 taskLYZ2->SetQAList1(qaIntLYZ2);
567 taskLYZ2->SetQAList2(qaDiffLYZ2); }
568 mgr->AddTask(taskLYZ2);
571 if (QA) { AliAnalysisTaskLYZEventPlane *taskLYZEP = new AliAnalysisTaskLYZEventPlane("TaskLYZEventPlane",kTRUE); }
572 else { AliAnalysisTaskLYZEventPlane *taskLYZEP = new AliAnalysisTaskLYZEventPlane("TaskLYZEventPlane",kFALSE); }
573 taskLYZEP->SetAnalysisType(type);
574 taskLYZEP->SetCFManager1(cfmgr1);
575 taskLYZEP->SetCFManager2(cfmgr2);
577 taskLYZEP->SetQAList1(qaIntLYZEP);
578 taskLYZEP->SetQAList2(qaDiffLYZEP); }
579 mgr->AddTask(taskLYZEP);
582 if (QA) { AliAnalysisTaskCumulants *taskGFC = new AliAnalysisTaskCumulants("TaskCumulants",kTRUE);}
583 else { AliAnalysisTaskCumulants *taskGFC = new AliAnalysisTaskCumulants("TaskCumulants",kFALSE);}
584 taskGFC->SetAnalysisType(type);
585 taskGFC->SetCFManager1(cfmgr1);
586 taskGFC->SetCFManager2(cfmgr2);
588 taskGFC->SetQAList1(qaIntGFC);
589 taskGFC->SetQAList2(qaDiffGFC); }
590 mgr->AddTask(taskGFC);
593 if (QA) { AliAnalysisTaskQCumulants *taskQC = new AliAnalysisTaskQCumulants("TaskQCumulants",kTRUE,useWeights);}
594 else { AliAnalysisTaskQCumulants *taskQC = new AliAnalysisTaskQCumulants("TaskQCumulants",kFALSE,useWeights);}
595 taskQC->SetAnalysisType(type);
596 taskQC->SetUsePhiWeights(usePhiWeights);
597 taskQC->SetUsePtWeights(usePtWeights);
598 taskQC->SetUseEtaWeights(useEtaWeights);
599 taskQC->SetCFManager1(cfmgr1);
600 taskQC->SetCFManager2(cfmgr2);
602 taskQC->SetQAList1(qaIntQC);
603 taskQC->SetQAList2(qaDiffQC); }
604 mgr->AddTask(taskQC);
607 if (QA) { AliAnalysisTaskFittingQDistribution *taskFQD = new AliAnalysisTaskFittingQDistribution("TaskFittingQDistribution",kTRUE,useWeights);}
608 else { AliAnalysisTaskFittingQDistribution *taskFQD = new AliAnalysisTaskFittingQDistribution("TaskFittingQDistribution",kFALSE,useWeights);}
609 taskFQD->SetAnalysisType(type);
610 taskFQD->SetUsePhiWeights(usePhiWeights);
611 taskFQD->SetUsePtWeights(usePtWeights);
612 taskFQD->SetUseEtaWeights(useEtaWeights);
613 taskFQD->SetCFManager1(cfmgr1);
614 taskFQD->SetCFManager2(cfmgr2);
616 taskFQD->SetQAList1(qaIntFQD);
617 taskFQD->SetQAList2(qaDiffFQD); }
618 mgr->AddTask(taskFQD);
621 if (QA) { AliAnalysisTaskMCEventPlane *taskMCEP = new AliAnalysisTaskMCEventPlane("TaskMCEventPlane",kTRUE);}
622 else { AliAnalysisTaskMCEventPlane *taskMCEP = new AliAnalysisTaskMCEventPlane("TaskMCEventPlane",kFALSE);}
623 taskMCEP->SetAnalysisType(type);
624 taskMCEP->SetCFManager1(cfmgr1);
625 taskMCEP->SetCFManager2(cfmgr2);
627 taskMCEP->SetQAList1(qaIntMCEP);
628 taskMCEP->SetQAList2(qaDiffMCEP); }
629 mgr->AddTask(taskMCEP);
633 // Create containers for input/output
634 AliAnalysisDataContainer *cinput1 =
635 mgr->CreateContainer("cchain1",TChain::Class(),AliAnalysisManager::kInputContainer);
638 AliAnalysisDataContainer *cinputWeights = mgr->CreateContainer("cobjWeights",TList::Class(),AliAnalysisManager::kInputContainer);
642 AliAnalysisDataContainer *cinputLYZ2 = mgr->CreateContainer("cobjLYZ2in",TList::Class(),AliAnalysisManager::kInputContainer); }
644 AliAnalysisDataContainer *cinputLYZEP = mgr->CreateContainer("cobjLYZEPin",TList::Class(),AliAnalysisManager::kInputContainer); }
647 TString outputSP = "outputSPanalysis";
650 AliAnalysisDataContainer *coutputSP = mgr->CreateContainer("cobjSP", TList::Class(),AliAnalysisManager::kOutputContainer,outputSP);
654 TString outputLYZ1 = "outputLYZ1analysis";
656 outputLYZ1+= "_firstrun.root";
657 AliAnalysisDataContainer *coutputLYZ1 = mgr->CreateContainer("cobjLYZ1", TList::Class(),AliAnalysisManager::kOutputContainer,outputLYZ1);
661 TString outputLYZ2 = "outputLYZ2analysis";
663 outputLYZ2+= "_secondrun.root";
664 AliAnalysisDataContainer *coutputLYZ2 = mgr->CreateContainer("cobjLYZ2", TList::Class(),AliAnalysisManager::kOutputContainer,outputLYZ2);
668 TString outputLYZEP = "outputLYZEPanalysis";
670 outputLYZEP+= ".root";
671 AliAnalysisDataContainer *coutputLYZEP = mgr->CreateContainer("cobjLYZEP", TList::Class(),AliAnalysisManager::kOutputContainer,outputLYZEP);
675 TString outputGFC = "outputGFCanalysis";
678 AliAnalysisDataContainer *coutputGFC = mgr->CreateContainer("cobjGFC", TList::Class(),AliAnalysisManager::kOutputContainer,outputGFC);
682 TString outputQC = "outputQCanalysis";
685 AliAnalysisDataContainer *coutputQC = mgr->CreateContainer("cobjQC", TList::Class(),AliAnalysisManager::kOutputContainer,outputQC);
689 TString outputFQD = "outputFQDanalysis";
692 AliAnalysisDataContainer *coutputFQD = mgr->CreateContainer("cobjFQD", TList::Class(),AliAnalysisManager::kOutputContainer,outputFQD);
696 TString outputMCEP = "outputMCEPanalysis";
698 outputMCEP+= ".root";
699 AliAnalysisDataContainer *coutputMCEP = mgr->CreateContainer("cobjMCEP", TList::Class(),AliAnalysisManager::kOutputContainer,outputMCEP);
705 TString qaNameIntSP = "QAforInt_SP_";
707 qaNameIntSP += ".root";
708 AliAnalysisDataContainer *coutputQA1SP =
709 mgr->CreateContainer("QAintSP", TList::Class(),AliAnalysisManager::kOutputContainer,qaNameIntSP);
711 TString qaNameDiffSP = "QAforDiff_SP_";
712 qaNameDiffSP += type;
713 qaNameDiffSP += ".root";
714 AliAnalysisDataContainer *coutputQA2SP =
715 mgr->CreateContainer("QAdiffSP", TList::Class(),AliAnalysisManager::kOutputContainer,qaNameDiffSP);
718 TString qaNameIntLYZ1 = "QAforInt_LYZ1_";
719 qaNameIntLYZ1 += type;
720 qaNameIntLYZ1 += ".root";
721 AliAnalysisDataContainer *coutputQA1LYZ1 =
722 mgr->CreateContainer("QAintLYZ1", TList::Class(),AliAnalysisManager::kOutputContainer,qaNameIntLYZ1);
724 TString qaNameDiffLYZ1 = "QAforDiff_LYZ1_";
725 qaNameDiffLYZ1 += type;
726 qaNameDiffLYZ1 += ".root";
727 AliAnalysisDataContainer *coutputQA2LYZ1 =
728 mgr->CreateContainer("QAdiffLYZ1", TList::Class(),AliAnalysisManager::kOutputContainer,qaNameDiffLYZ1);
731 TString qaNameIntLYZ2 = "QAforInt_LYZ2_";
732 qaNameIntLYZ2 += type;
733 qaNameIntLYZ2 += ".root";
734 AliAnalysisDataContainer *coutputQA1LYZ2 =
735 mgr->CreateContainer("QAintLYZ2", TList::Class(),AliAnalysisManager::kOutputContainer,qaNameIntLYZ2);
737 TString qaNameDiffLYZ2 = "QAforDiff_LYZ2_";
738 qaNameDiffLYZ2 += type;
739 qaNameDiffLYZ2 += ".root";
740 AliAnalysisDataContainer *coutputQA2LYZ2 =
741 mgr->CreateContainer("QAdiffLYZ2", TList::Class(),AliAnalysisManager::kOutputContainer,qaNameDiffLYZ2);
744 TString qaNameIntLYZEP = "QAforInt_LYZEP_";
745 qaNameIntLYZEP += type;
746 qaNameIntLYZEP += ".root";
747 AliAnalysisDataContainer *coutputQA1LYZEP =
748 mgr->CreateContainer("QAintLYZEP", TList::Class(),AliAnalysisManager::kOutputContainer,qaNameIntLYZEP);
750 TString qaNameDiffLYZEP = "QAforDiff_LYZEP_";
751 qaNameDiffLYZEP += type;
752 qaNameDiffLYZEP += ".root";
753 AliAnalysisDataContainer *coutputQA2LYZEP =
754 mgr->CreateContainer("QAdiffLYZEP", TList::Class(),AliAnalysisManager::kOutputContainer,qaNameDiffLYZEP);
757 TString qaNameIntGFC = "QAforInt_GFC_";
758 qaNameIntGFC += type;
759 qaNameIntGFC += ".root";
760 AliAnalysisDataContainer *coutputQA1GFC =
761 mgr->CreateContainer("QAintGFC", TList::Class(),AliAnalysisManager::kOutputContainer,qaNameIntGFC);
763 TString qaNameDiffGFC = "QAforDiff_GFC_";
764 qaNameDiffGFC += type;
765 qaNameDiffGFC += ".root";
766 AliAnalysisDataContainer *coutputQA2GFC =
767 mgr->CreateContainer("QAdiffGFC", TList::Class(),AliAnalysisManager::kOutputContainer,qaNameDiffGFC);
770 TString qaNameIntQC = "QAforInt_QC_";
772 qaNameIntQC += ".root";
773 AliAnalysisDataContainer *coutputQA1QC =
774 mgr->CreateContainer("QAintQC", TList::Class(),AliAnalysisManager::kOutputContainer,qaNameIntQC);
776 TString qaNameDiffQC = "QAforDiff_QC_";
777 qaNameDiffQC += type;
778 qaNameDiffQC += ".root";
779 AliAnalysisDataContainer *coutputQA2QC =
780 mgr->CreateContainer("QAdiffQC", TList::Class(),AliAnalysisManager::kOutputContainer,qaNameDiffQC);
783 TString qaNameIntFQD = "QAforInt_FQD_";
784 qaNameIntFQD += type;
785 qaNameIntFQD += ".root";
786 AliAnalysisDataContainer *coutputQA1FQD =
787 mgr->CreateContainer("QAintFQD", TList::Class(),AliAnalysisManager::kOutputContainer,qaNameIntFQD);
789 TString qaNameDiffFQD = "QAforDiff_FQD_";
790 qaNameDiffFQD += type;
791 qaNameDiffFQD += ".root";
792 AliAnalysisDataContainer *coutputQA2FQD =
793 mgr->CreateContainer("QAdiffFQD", TList::Class(),AliAnalysisManager::kOutputContainer,qaNameDiffFQD);
796 TString qaNameIntMCEP = "QAforInt_MCEP_";
797 qaNameIntMCEP += type;
798 qaNameIntMCEP += ".root";
799 AliAnalysisDataContainer *coutputQA1MCEP =
800 mgr->CreateContainer("QAintMCEP", TList::Class(),AliAnalysisManager::kOutputContainer,qaNameIntMCEP);
802 TString qaNameDiffMCEP = "QAforDiff_MCEP_";
803 qaNameDiffMCEP += type;
804 qaNameDiffMCEP += ".root";
805 AliAnalysisDataContainer *coutputQA2MCEP =
806 mgr->CreateContainer("QAdiffMCEP", TList::Class(),AliAnalysisManager::kOutputContainer,qaNameDiffMCEP);
811 //____________________________________________//
814 mgr->ConnectInput(taskSP,0,cinput1);
815 mgr->ConnectOutput(taskSP,0,coutputSP);
816 if (QA) { mgr->ConnectOutput(taskSP,1,coutputQA1SP);
817 mgr->ConnectOutput(taskSP,2,coutputQA2SP); }
820 mgr->ConnectInput(taskLYZ1,0,cinput1);
821 mgr->ConnectOutput(taskLYZ1,0,coutputLYZ1);
822 if (QA) { mgr->ConnectOutput(taskLYZ1,1,coutputQA1LYZ1);
823 mgr->ConnectOutput(taskLYZ1,2,coutputQA2LYZ1); }
826 mgr->ConnectInput(taskLYZ2,0,cinput1);
827 mgr->ConnectInput(taskLYZ2,1,cinputLYZ2);
828 mgr->ConnectOutput(taskLYZ2,0,coutputLYZ2);
829 if (QA) { mgr->ConnectOutput(taskLYZ2,1,coutputQA1LYZ2);
830 mgr->ConnectOutput(taskLYZ2,2,coutputQA2LYZ2); }
831 cinputLYZ2->SetData(fInputListLYZ2);
834 mgr->ConnectInput(taskLYZEP,0,cinput1);
835 mgr->ConnectInput(taskLYZEP,1,cinputLYZEP);
836 mgr->ConnectOutput(taskLYZEP,0,coutputLYZEP);
837 if (QA) { mgr->ConnectOutput(taskLYZEP,1,coutputQA1LYZEP);
838 mgr->ConnectOutput(taskLYZEP,2,coutputQA2LYZEP); }
839 cinputLYZEP->SetData(fInputListLYZEP);
842 mgr->ConnectInput(taskGFC,0,cinput1);
843 mgr->ConnectOutput(taskGFC,0,coutputGFC);
844 if (QA) { mgr->ConnectOutput(taskGFC,1,coutputQA1GFC);
845 mgr->ConnectOutput(taskGFC,2,coutputQA2GFC); }
848 mgr->ConnectInput(taskQC,0,cinput1);
849 mgr->ConnectOutput(taskQC,0,coutputQC);
850 if (QA) { mgr->ConnectOutput(taskQC,1,coutputQA1QC);
851 mgr->ConnectOutput(taskQC,2,coutputQA2QC); }
853 mgr->ConnectInput(taskQC,1,cinputWeights);
854 cinputWeights->SetData(weightsList);
858 mgr->ConnectInput(taskFQD,0,cinput1);
859 mgr->ConnectOutput(taskFQD,0,coutputFQD);
860 if (QA) { mgr->ConnectOutput(taskFQD,1,coutputQA1FQD);
861 mgr->ConnectOutput(taskFQD,2,coutputQA2FQD); }
863 mgr->ConnectInput(taskFQD,1,cinputWeights);
864 cinputWeights->SetData(weightsList);
868 mgr->ConnectInput(taskMCEP,0,cinput1);
869 mgr->ConnectOutput(taskMCEP,0,coutputMCEP);
870 if (QA) { mgr->ConnectOutput(taskMCEP,1,coutputQA1MCEP);
871 mgr->ConnectOutput(taskMCEP,2,coutputQA2MCEP); }
874 if (!mgr->InitAnalysis()) return;
876 // old way with a chain
877 // mgr->StartAnalysis("proof",chain);
878 mgr->StartAnalysis("proof",data,nRuns,offset);