1 /////////////////////////////////////////////////////////////////////////////////////////////
3 // AddTask* macro for flow analysis
4 // Creates a Flow Event task and adds it to the analysis manager.
5 // Sets the cuts using the correction framework (CORRFW) classes.
6 // Also creates Flow Analysis tasks and connects them to the output of the flow event task.
8 /////////////////////////////////////////////////////////////////////////////////////////////
13 //----------Event selection----------
14 Bool_t UseMultCutforESD = kTRUE;
15 //Bool_t UseMultCutforESD = kFALSE;
16 const Int_t multminESD = 1; //used for CORRFW cuts
17 const Int_t multmaxESD = 1000000; //used for CORRFW cuts
19 Bool_t requireVtxCuts = kTRUE;
20 Double_t vertexXmin = -1.0;
21 Double_t vertexXmax = 1.0;
22 Double_t vertexYmin = -1.0;
23 Double_t vertexYmax = 1.0;
24 Double_t vertexZmin = -15.0; //-1.e99;
25 Double_t vertexZmax = 15.0; //1.e99;
27 //Bool_t UseMultCut = kTRUE;
28 Bool_t UseMultCut = kFALSE;
29 const Int_t multmin = 10; //used for AliFlowEventSimple (to set the centrality)
30 const Int_t multmax = 40; //used for AliFlowEventSimple (to set the centrality)
31 //const Int_t multmin = 10; //used for AliFlowEventSimple (to set the centrality)
32 //const Int_t multmax = 1000000; //used for AliFlowEventSimple (to set the centrality)
35 //----------For RP selection----------
36 //KINEMATICS (on generated and reconstructed tracks)
37 Bool_t UseKineforRP = kTRUE;
38 const Double_t ptminRP = 0.0;
39 const Double_t ptmaxRP = 10.0;
40 const Double_t etaminRP = -0.9;
41 const Double_t etamaxRP = 0.9;
42 const Int_t chargeRP = 1; //not used
44 //PID (on generated and reconstructed tracks)
45 Bool_t UsePIDforRP = kFALSE;
46 const Int_t PdgRP = 211;
48 //TRACK QUALITY (on reconstructed tracks only)
49 //see /CORRFW/AliCFTrackQualityCuts class
50 Bool_t UseTrackQualityforRP = kTRUE;
51 const Int_t minClustersTpcRP = 80; //default = -1;
52 const Double_t maxChi2PerClusterTpcRP = 3.5; //default = 1.e+09;
53 const UShort_t minDedxClusterTpcRP = 0;
54 const Int_t minClustersItsRP = 2; //panos
55 const Double_t maxChi2PerClusterItsRP = 1.e+09;
56 const Int_t minClustersTrdRP = -1;
57 const Int_t minTrackletTrdRP = -1;
58 const Int_t minTrackletTrdPidRP = -1;
59 const Double_t maxChi2PerClusterTrdRP = 1.e+09;
60 const ULong_t statusRP = AliESDtrack::kTPCrefit; //AliESDtrack::kTPCrefit & AliESDtrack::kITSrefit
62 //PRIMARY (on reconstructed tracks only)
63 //see /CORRFW/AliCFTrackIsPrimaryCuts class
64 Bool_t UsePrimariesforRP = kTRUE;
65 const Bool_t spdVertexRP = kFALSE;
66 const Bool_t tpcVertexRP = kFALSE;
67 const Float_t minDcaToVertexXyRP = 0.;
68 const Float_t minDcaToVertexZRP = 0.;
69 const Float_t maxDcaToVertexXyRP = 2.4; //default = 1.e+10; //2.4;
70 const Float_t maxDcaToVertexZRP = 3.2; //default = 1.e+10; //3.2;
71 const Bool_t dcaToVertex2dRP = kFALSE; //default = kFALSE;
72 const Bool_t absDcaToVertexRP = kTRUE; //default = kTRUE;
73 const Double_t minNSigmaToVertexRP = 0.;
74 const Double_t maxNSigmaToVertexRP = 1.e+10; //3.; //1.e+10
75 const Double_t maxSigmaDcaXySP = 1.e+10;
76 const Double_t maxSigmaDcaZSP = 1.e+10;
77 const Bool_t requireSigmaToVertexSP = kFALSE;
78 const Bool_t acceptKinkDaughtersSP = kFALSE; //default = kTRUE;
80 //ACCEPTANCE (on generated tracks only : AliMCParticle)
81 //see /CORRFW/AliCFAcceptanceCuts class
82 Bool_t UseAcceptanceforRP = kFALSE;
83 const Int_t minTrackrefsItsRP = 0;//3;
84 const Int_t minTrackrefsTpcRP = 0;//2;
85 const Int_t minTrackrefsTrdRP = 0;
86 const Int_t minTrackrefsTofRP = 0;
87 const Int_t minTrackrefsMuonRP = 0;
88 //default for all is 0
90 //----------For POI selection----------
91 //KINEMATICS (on generated and reconstructed tracks)
92 Bool_t UseKineforPOI = kTRUE;
93 const Double_t ptminPOI = 0.0;
94 const Double_t ptmaxPOI = 10.0;
95 const Double_t etaminPOI = -0.9;
96 const Double_t etamaxPOI = 0.9;
97 const Int_t chargePOI = 1; //not used
99 //PID (on generated and reconstructed tracks)
100 Bool_t UsePIDforPOI = kFALSE;
101 const Int_t PdgPOI = 321;
103 //TRACK QUALITY (on reconstructed tracks only)
104 //see /CORRFW/AliCFTrackQualityCuts class
105 Bool_t UseTrackQualityforPOI = kTRUE;
106 const Int_t minClustersTpcPOI = 80;
107 const Double_t maxChi2PerClusterTpcPOI = 3.5;
108 const UShort_t minDedxClusterTpcPOI = 0;
109 const Int_t minClustersItsPOI = 2;
110 const Double_t maxChi2PerClusterItsPOI = 1.e+09;
111 const Int_t minClustersTrdPOI = -1;
112 const Int_t minTrackletTrdPOI = -1;
113 const Int_t minTrackletTrdPidPOI = -1;
114 const Double_t maxChi2PerClusterTrdPOI = 1.e+09;
115 const ULong_t statusPOI = AliESDtrack::kTPCrefit;
117 //PRIMARY (on reconstructed tracks only)
118 //see /CORRFW/AliCFTrackIsPrimaryCuts class
119 Bool_t UsePrimariesforPOI = kTRUE;
120 const Bool_t spdVertexPOI = kFALSE;
121 const Bool_t tpcVertexPOI = kFALSE;
122 const Float_t minDcaToVertexXyPOI = 0.;
123 const Float_t minDcaToVertexZPOI = 0.;
124 const Float_t maxDcaToVertexXyPOI = 2.4;
125 const Float_t maxDcaToVertexZPOI = 3.2;
126 const Bool_t dcaToVertex2dPOI = kFALSE;
127 const Bool_t absDcaToVertexPOI = kTRUE;
128 const Double_t minNSigmaToVertexPOI = 0.;
129 const Double_t maxNSigmaToVertexPOI = 1.e+10;
130 const Double_t maxSigmaDcaXyPOI = 1.e+10;
131 const Double_t maxSigmaDcaZPOI = 1.e+10;
132 const Bool_t requireSigmaToVertexPOI = kFALSE;
133 const Bool_t acceptKinkDaughtersPOI = kFALSE;
135 //ACCEPTANCE (on generated tracks only : AliMCParticle)
136 //see /CORRFW/AliCFAcceptanceCuts class
137 Bool_t UseAcceptanceforPOI = kFALSE;
138 const Int_t minTrackrefsItsPOI = 3;
139 const Int_t minTrackrefsTpcPOI = 2;
140 const Int_t minTrackrefsTrdPOI = 0;
141 const Int_t minTrackrefsTofPOI = 0;
142 const Int_t minTrackrefsMuonPOI = 0;
145 //----------For Adding Flow to the Event----------
146 const Bool_t AddToEvent = kFALSE;
147 Double_t ellipticFlow = 0.05;
150 AliAnalysisTaskFlowEvent* AddTaskFlow(TString type, Bool_t* METHODS, Bool_t QA, Bool_t* WEIGHTS)
152 //boleans for the methods
153 Bool_t SP = METHODS[0];
154 Bool_t LYZ1SUM = METHODS[1];
155 Bool_t LYZ1PROD = METHODS[2];
156 Bool_t LYZ2SUM = METHODS[3];
157 Bool_t LYZ2PROD = METHODS[4];
158 Bool_t LYZEP = METHODS[5];
159 Bool_t GFC = METHODS[6];
160 Bool_t QC = METHODS[7];
161 Bool_t FQD = METHODS[8];
162 Bool_t MCEP = METHODS[9];
165 Bool_t useWeights = WEIGHTS[0] || WEIGHTS[1] || WEIGHTS[2];
166 if (useWeights) cout<<"Weights are used"<<endl;
167 else cout<<"Weights are not used"<<endl;
170 // Get the pointer to the existing analysis manager via the static access method.
171 //==============================================================================
172 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
174 Error("AddTaskFlowEvent", "No analysis manager to connect to.");
178 // Check the analysis type using the event handlers connected to the analysis
179 // manager. The availability of MC handler cann also be checked here.
180 //==============================================================================
181 if (!mgr->GetInputEventHandler()) {
182 ::Error("AddTaskFlowEvent", "This task requires an input event handler");
186 // Open external input files
187 //===========================================================================
189 TFile *weightsFile = NULL;
190 TList *weightsList = NULL;
193 //open the file with the weights:
194 weightsFile = TFile::Open("weights.root","READ");
196 //access the list which holds the histos with weigths:
197 weightsList = (TList*)weightsFile->Get("weights");
200 cout<<" WARNING: the file <weights.root> with weights from the previous run was not available."<<endl;
206 if (LYZ2SUM || LYZ2PROD) {
207 //read the outputfile of the first run
208 TString outputFileName = "AnalysisResults1.root";
209 TString pwd(gSystem->pwd());
211 pwd+=outputFileName.Data();
212 TFile *outputFile = NULL;
213 if(gSystem->AccessPathName(pwd.Data(),kFileExists)) {
214 cout<<"WARNING: You do not have an output file:"<<endl;
215 cout<<" "<<pwd.Data()<<endl;
218 outputFile = TFile::Open(pwd.Data(),"READ");
222 // read the output directory from LYZ1SUM
223 TString inputFileNameLYZ2SUM = "outputLYZ1SUManalysis" ;
224 inputFileNameLYZ2SUM += type;
225 cout<<"The input directory is "<<inputFileNameLYZ2SUM.Data()<<endl;
226 TFile* fInputFileLYZ2SUM = (TFile*)outputFile->FindObjectAny(inputFileNameLYZ2SUM.Data());
227 if(!fInputFileLYZ2SUM || fInputFileLYZ2SUM->IsZombie()) {
228 cerr << " ERROR: To run LYZ2SUM you need the output file from LYZ1SUM. This file is not there! Please run LYZ1SUM first." << endl ;
232 TList* fInputListLYZ2SUM = (TList*)fInputFileLYZ2SUM->Get("cobjLYZ1SUM");
233 if (!fInputListLYZ2SUM) {cout<<"list is NULL pointer!"<<endl;}
235 cout<<"LYZ2SUM input file/list read..."<<endl;
239 // read the output directory from LYZ1PROD
240 TString inputFileNameLYZ2PROD = "outputLYZ1PRODanalysis" ;
241 inputFileNameLYZ2PROD += type;
242 cout<<"The input directory is "<<inputFileNameLYZ2PROD.Data()<<endl;
243 TFile* fInputFileLYZ2PROD = (TFile*)outputFile->FindObjectAny(inputFileNameLYZ2PROD.Data());
244 if(!fInputFileLYZ2PROD || fInputFileLYZ2PROD->IsZombie()) {
245 cerr << " ERROR: To run LYZ2PROD you need the output file from LYZ1PROD. This file is not there! Please run LYZ1PROD first." << endl ;
249 TList* fInputListLYZ2PROD = (TList*)fInputFileLYZ2PROD->Get("cobjLYZ1PROD");
250 if (!fInputListLYZ2PROD) {cout<<"list is NULL pointer!"<<endl;}
252 cout<<"LYZ2PROD input file/list read..."<<endl;
258 //read the outputfile of the second run
259 TString outputFileName = "AnalysisResults2.root";
260 TString pwd(gSystem->pwd());
262 pwd+=outputFileName.Data();
263 TFile *outputFile = NULL;
264 if(gSystem->AccessPathName(pwd.Data(),kFileExists)) {
265 cout<<"WARNING: You do not have an output file:"<<endl;
266 cout<<" "<<pwd.Data()<<endl;
269 outputFile = TFile::Open(pwd.Data(),"READ");
272 // read the output file from LYZ2SUM
273 TString inputFileNameLYZEP = "outputLYZ2SUManalysis" ;
274 inputFileNameLYZEP += type;
275 cout<<"The input file is "<<inputFileNameLYZEP.Data()<<endl;
276 TFile* fInputFileLYZEP = (TFile*)outputFile->FindObjectAny(inputFileNameLYZEP.Data());
277 if(!fInputFileLYZEP || fInputFileLYZEP->IsZombie()) {
278 cerr << " ERROR: To run LYZEP you need the output file from LYZ2SUM. This file is not there! Please run LYZ2SUM first." << endl ;
282 TList* fInputListLYZEP = (TList*)fInputFileLYZEP->Get("cobjLYZ2SUM");
283 if (!fInputListLYZEP) {cout<<"list is NULL pointer!"<<endl;}
285 cout<<"LYZEP input file/list read..."<<endl;
290 // Create the task, add it to the manager.
291 //===========================================================================
292 AliAnalysisTaskFlowEvent *taskFE = NULL;
295 taskFE = new AliAnalysisTaskFlowEvent("TaskFlowEvent",kTRUE,1);
296 taskFE->SetEllipticFlowValue(ellipticFlow); } //TEST
297 else {taskFE = new AliAnalysisTaskFlowEvent("TaskFlowEvent",kTRUE); }
298 taskFE->SetAnalysisType(type);
300 taskFE->SetMinMult(multmin);
301 taskFE->SetMaxMult(multmax);}
302 mgr->AddTask(taskFE);
305 taskFE = new AliAnalysisTaskFlowEvent("TaskFlowEvent",kFALSE);
306 taskFE->SetAnalysisType(type);
308 taskFE->SetMinMult(multmin);
309 taskFE->SetMaxMult(multmax); }
310 mgr->AddTask(taskFE);
313 // Create cuts using the correction framework (CORRFW)
314 //===========================================================================
316 //Set TList for the QA histograms
317 TList* qaRP = new TList();
318 TList* qaPOI = new TList();
321 //----------Event cuts----------
322 AliCFEventGenCuts* mcEventCuts = new AliCFEventGenCuts("mcEventCuts","MC-level event cuts");
323 mcEventCuts->SetNTracksCut(multminESD,multmaxESD);
324 mcEventCuts->SetRequireVtxCuts(requireVtxCuts);
325 mcEventCuts->SetVertexXCut(vertexXmin, vertexXmax);
326 mcEventCuts->SetVertexYCut(vertexYmin, vertexYmax);
327 mcEventCuts->SetVertexZCut(vertexZmin, vertexZmax);
329 mcEventCuts->SetQAOn(qaRP);
331 AliCFEventRecCuts* recEventCuts = new AliCFEventRecCuts("recEventCuts","rec-level event cuts");
332 recEventCuts->SetNTracksCut(multminESD,multmaxESD);
333 recEventCuts->SetRequireVtxCuts(requireVtxCuts);
334 recEventCuts->SetVertexXCut(vertexXmin, vertexXmax);
335 recEventCuts->SetVertexYCut(vertexYmin, vertexYmax);
336 recEventCuts->SetVertexZCut(vertexZmin, vertexZmax);
338 recEventCuts->SetQAOn(qaRP);
341 //----------Cuts for RP----------
342 //KINEMATICS (MC and reconstructed)
343 AliCFTrackKineCuts* mcKineCutsRP = new AliCFTrackKineCuts("mcKineCutsRP","MC-level kinematic cuts");
344 mcKineCutsRP->SetPtRange(ptminRP,ptmaxRP);
345 mcKineCutsRP->SetEtaRange(etaminRP,etamaxRP);
346 //mcKineCutsRP->SetChargeMC(chargeRP);
348 mcKineCutsRP->SetQAOn(qaRP);
351 AliCFTrackKineCuts *recKineCutsRP = new AliCFTrackKineCuts("recKineCutsRP","rec-level kine cuts");
352 recKineCutsRP->SetPtRange(ptminRP,ptmaxRP);
353 recKineCutsRP->SetEtaRange(etaminRP,etamaxRP);
354 //recKineCutsRP->SetChargeRec(chargeRP);
356 recKineCutsRP->SetQAOn(qaRP);
359 //PID (MC and reconstructed)
360 AliCFParticleGenCuts* mcGenCutsRP = new AliCFParticleGenCuts("mcGenCutsRP","MC particle generation cuts for RP");
361 mcGenCutsRP->SetRequireIsPrimary();
362 if (UsePIDforRP) {mcGenCutsRP->SetRequirePdgCode(PdgRP);}
364 mcGenCutsRP->SetQAOn(qaRP);
367 int n_species = AliPID::kSPECIES ;
368 Double_t* prior = new Double_t[n_species];
370 prior[0] = 0.0244519 ;
371 prior[1] = 0.0143988 ;
372 prior[2] = 0.805747 ;
373 prior[3] = 0.0928785 ;
374 prior[4] = 0.0625243 ;
376 AliCFTrackCutPid* cutPidRP = NULL;
378 cutPidRP = new AliCFTrackCutPid("cutPidRP","ESD_PID for RP") ;
379 cutPidRP->SetPriors(prior);
380 cutPidRP->SetProbabilityCut(0.0);
381 cutPidRP->SetDetectors("TPC TOF");
382 switch(TMath::Abs(PDG1)) {
383 case 11 : cutPidRP->SetParticleType(AliPID::kElectron, kTRUE); break;
384 case 13 : cutPidRP->SetParticleType(AliPID::kMuon , kTRUE); break;
385 case 211 : cutPidRP->SetParticleType(AliPID::kPion , kTRUE); break;
386 case 321 : cutPidRP->SetParticleType(AliPID::kKaon , kTRUE); break;
387 case 2212 : cutPidRP->SetParticleType(AliPID::kProton , kTRUE); break;
388 default : printf("UNDEFINED PID\n"); break;
391 cutPidRP->SetQAOn(qaRP);
396 AliCFTrackQualityCuts *recQualityCutsRP = new AliCFTrackQualityCuts("recQualityCutsRP","rec-level quality cuts");
397 recQualityCutsRP->SetMinNClusterTPC(minClustersTpcRP);
398 //recQualityCutsRP->SetMinFoundClusterTPC(minFoundClustersTpcRP); //only for internal TPC QA
399 recQualityCutsRP->SetMaxChi2PerClusterTPC(maxChi2PerClusterTpcRP);
400 recQualityCutsRP->SetMinNdEdxClusterTPC(minDedxClusterTpcRP); //to reject secondaries
402 recQualityCutsRP->SetMinNClusterITS(minClustersItsRP);
403 recQualityCutsRP->SetMaxChi2PerClusterITS(maxChi2PerClusterItsRP);
405 recQualityCutsRP->SetMinNClusterTRD(minClustersTrdRP);
406 recQualityCutsRP->SetMinNTrackletTRD(minTrackletTrdRP);
407 recQualityCutsRP->SetMinNTrackletTRDpid(minTrackletTrdPidRP);
408 recQualityCutsRP->SetMaxChi2PerTrackletTRD(maxChi2PerClusterTrdRP);
409 recQualityCutsRP->SetStatus(statusRP);
411 recQualityCutsRP->SetQAOn(qaRP);
416 void SetMaxCovDiagonalElements(Float_t c1=1.e+09, Float_t c2=1.e+09, Float_t c3=1.e+09, Float_t c4=1.e+09, Float_t c5=1.e+09)
417 {fCovariance11Max=c1;fCovariance22Max=c2;fCovariance33Max=c3;fCovariance44Max=c4;fCovariance55Max=c5;}
421 AliCFTrackIsPrimaryCuts *recIsPrimaryCutsRP = new AliCFTrackIsPrimaryCuts("recIsPrimaryCutsRP","rec-level isPrimary cuts");
422 recIsPrimaryCutsRP->UseSPDvertex(spdVertexRP);
423 recIsPrimaryCutsRP->UseTPCvertex(tpcVertexRP);
424 recIsPrimaryCutsRP->SetMinDCAToVertexXY(minDcaToVertexXyRP);
425 recIsPrimaryCutsRP->SetMinDCAToVertexZ(minDcaToVertexZRP);
426 recIsPrimaryCutsRP->SetMaxDCAToVertexXY(maxDcaToVertexXyRP);
427 recIsPrimaryCutsRP->SetMaxDCAToVertexZ(maxDcaToVertexZRP);
428 recIsPrimaryCutsRP->SetDCAToVertex2D(dcaToVertex2dRP);
429 recIsPrimaryCutsRP->SetAbsDCAToVertex(absDcaToVertexRP);
430 recIsPrimaryCutsRP->SetMinNSigmaToVertex(minNSigmaToVertexRP);
431 recIsPrimaryCutsRP->SetMaxNSigmaToVertex(maxNSigmaToVertexRP);
432 recIsPrimaryCutsRP->SetMaxSigmaDCAxy(maxSigmaDcaXySP);
433 recIsPrimaryCutsRP->SetMaxSigmaDCAz(maxSigmaDcaZSP);
434 recIsPrimaryCutsRP->SetRequireSigmaToVertex(requireSigmaToVertexSP);
435 recIsPrimaryCutsRP->SetAcceptKinkDaughters(acceptKinkDaughtersSP);
437 recIsPrimaryCutsRP->SetQAOn(qaRP);
441 AliCFAcceptanceCuts *mcAccCutsRP = new AliCFAcceptanceCuts("mcAccCutsRP","MC acceptance cuts");
442 mcAccCutsRP->SetMinNHitITS(minTrackrefsItsRP);
443 mcAccCutsRP->SetMinNHitTPC(minTrackrefsTpcRP);
444 mcAccCutsRP->SetMinNHitTRD(minTrackrefsTrdRP);
445 mcAccCutsRP->SetMinNHitTOF(minTrackrefsTofRP);
446 mcAccCutsRP->SetMinNHitMUON(minTrackrefsMuonRP);
448 mcAccCutsRP->SetQAOn(qaRP);
452 //----------Cuts for POI----------
453 //KINEMATICS (MC and reconstructed)
454 AliCFTrackKineCuts* mcKineCutsPOI = new AliCFTrackKineCuts("mcKineCutsPOI","MC-level kinematic cuts");
455 mcKineCutsPOI->SetPtRange(ptminPOI,ptmaxPOI);
456 mcKineCutsPOI->SetEtaRange(etaminPOI,etamaxPOI);
457 //mcKineCutsPOI->SetChargeMC(chargePOI);
459 mcKineCutsPOI->SetQAOn(qaPOI);
462 AliCFTrackKineCuts *recKineCutsPOI = new AliCFTrackKineCuts("recKineCutsPOI","rec-level kine cuts");
463 recKineCutsPOI->SetPtRange(ptminPOI,ptmaxPOI);
464 recKineCutsPOI->SetEtaRange(etaminPOI,etamaxPOI);
465 //recKineCutsPOI->SetChargeRec(chargePOI);
467 recKineCutsPOI->SetQAOn(qaPOI);
470 //PID (MC and reconstructed)
471 AliCFParticleGenCuts* mcGenCutsPOI = new AliCFParticleGenCuts("mcGenCutsPOI","MC particle generation cuts for POI");
472 mcGenCutsPOI->SetRequireIsPrimary();
473 if (UsePIDforPOI) {mcGenCutsPOI->SetRequirePdgCode(PdgPOI);}
475 mcGenCutsPOI->SetQAOn(qaPOI);
478 AliCFTrackCutPid* cutPidPOI = NULL;
480 cutPidPOI = new AliCFTrackCutPid("cutPidPOI","ESD_PID for POI") ;
481 cutPidPOI->SetPriors(prior);
482 cutPidPOI->SetProbabilityCut(0.0);
483 cutPidPOI->SetDetectors("TPC TOF");
484 switch(TMath::Abs(PDG2)) {
485 case 11 : cutPidPOI->SetParticleType(AliPID::kElectron, kTRUE); break;
486 case 13 : cutPidPOI->SetParticleType(AliPID::kMuon , kTRUE); break;
487 case 211 : cutPidPOI->SetParticleType(AliPID::kPion , kTRUE); break;
488 case 321 : cutPidPOI->SetParticleType(AliPID::kKaon , kTRUE); break;
489 case 2212 : cutPidPOI->SetParticleType(AliPID::kProton , kTRUE); break;
490 default : printf("UNDEFINED PID\n"); break;
493 cutPidPOI->SetQAOn(qaPOI);
498 AliCFTrackQualityCuts *recQualityCutsPOI = new AliCFTrackQualityCuts("recQualityCutsPOI","rec-level quality cuts");
499 recQualityCutsPOI->SetMinNClusterTPC(minClustersTpcPOI);
500 //recQualityCutsPOI->SetMinFoundClusterTPC(minFoundClustersTpcPOI); //only for internal TPC QA
501 recQualityCutsPOI->SetMaxChi2PerClusterTPC(maxChi2PerClusterTpcPOI);
502 recQualityCutsPOI->SetMinNdEdxClusterTPC(minDedxClusterTpcPOI); //to reject secondaries
504 recQualityCutsPOI->SetMinNClusterITS(minClustersItsPOI);
505 recQualityCutsPOI->SetMaxChi2PerClusterITS(maxChi2PerClusterItsPOI);
507 recQualityCutsPOI->SetMinNClusterTRD(minClustersTrdPOI);
508 recQualityCutsPOI->SetMinNTrackletTRD(minTrackletTrdPOI);
509 recQualityCutsPOI->SetMinNTrackletTRDpid(minTrackletTrdPidPOI);
510 recQualityCutsPOI->SetMaxChi2PerTrackletTRD(maxChi2PerClusterTrdPOI);
511 recQualityCutsPOI->SetStatus(statusPOI);
513 recQualityCutsPOI->SetQAOn(qaPOI);
517 AliCFTrackIsPrimaryCuts *recIsPrimaryCutsPOI = new AliCFTrackIsPrimaryCuts("recIsPrimaryCutsPOI","rec-level isPrimary cuts");
518 recIsPrimaryCutsPOI->UseSPDvertex(spdVertexPOI);
519 recIsPrimaryCutsPOI->UseTPCvertex(tpcVertexPOI);
520 recIsPrimaryCutsPOI->SetMinDCAToVertexXY(minDcaToVertexXyPOI);
521 recIsPrimaryCutsPOI->SetMinDCAToVertexZ(minDcaToVertexZPOI);
522 recIsPrimaryCutsPOI->SetMaxDCAToVertexXY(maxDcaToVertexXyPOI);
523 recIsPrimaryCutsPOI->SetMaxDCAToVertexZ(maxDcaToVertexZPOI);
524 recIsPrimaryCutsPOI->SetDCAToVertex2D(dcaToVertex2dPOI);
525 recIsPrimaryCutsPOI->SetAbsDCAToVertex(absDcaToVertexPOI);
526 recIsPrimaryCutsPOI->SetMinNSigmaToVertex(minNSigmaToVertexPOI);
527 recIsPrimaryCutsPOI->SetMaxNSigmaToVertex(maxNSigmaToVertexPOI);
528 recIsPrimaryCutsPOI->SetMaxSigmaDCAxy(maxSigmaDcaXyPOI);
529 recIsPrimaryCutsPOI->SetMaxSigmaDCAz(maxSigmaDcaZPOI);
530 recIsPrimaryCutsPOI->SetRequireSigmaToVertex(requireSigmaToVertexPOI);
531 recIsPrimaryCutsPOI->SetAcceptKinkDaughters(acceptKinkDaughtersPOI);
533 recIsPrimaryCutsPOI->SetQAOn(qaPOI);
537 AliCFAcceptanceCuts *mcAccCutsPOI = new AliCFAcceptanceCuts("mcAccCutsPOI","MC acceptance cuts");
538 mcAccCutsPOI->SetMinNHitITS(minTrackrefsItsPOI);
539 mcAccCutsPOI->SetMinNHitTPC(minTrackrefsTpcPOI);
540 mcAccCutsPOI->SetMinNHitTRD(minTrackrefsTrdPOI);
541 mcAccCutsPOI->SetMinNHitTOF(minTrackrefsTofPOI);
542 mcAccCutsPOI->SetMinNHitMUON(minTrackrefsMuonPOI);
544 mcAccCutsPOI->SetQAOn(qaPOI);
549 //----------Create Cut Lists----------
550 printf("CREATE EVENT CUTS\n");
551 TObjArray* mcEventList = new TObjArray(0);
552 if (UseMultCutforESD) mcEventList->AddLast(mcEventCuts);//cut on mult and vertex
554 TObjArray* recEventList = new TObjArray(0);
555 if (UseMultCutforESD) recEventList->AddLast(recEventCuts);//cut on mult and vertex
557 printf("CREATE MC KINE CUTS\n");
558 TObjArray* mcListRP = new TObjArray(0);
559 if (UseKineforRP) mcListRP->AddLast(mcKineCutsRP); //cut on pt/eta/phi
560 mcListRP->AddLast(mcGenCutsRP); //cut on primary and if (UsePIDforRP) MC PID
562 TObjArray* mcListPOI = new TObjArray(0);
563 if (UseKineforPOI) mcListPOI->AddLast(mcKineCutsPOI); //cut on pt/eta/phi
564 mcListPOI->AddLast(mcGenCutsPOI); //cut on primary and if (UsePIDforPOI) MC PID
566 printf("CREATE MC ACCEPTANCE CUTS\n");
567 TObjArray* accListRP = new TObjArray(0) ;
568 if (UseAcceptanceforRP) accListRP->AddLast(mcAccCutsRP); //cut on number of track references
570 TObjArray* accListPOI = new TObjArray(0) ;
571 if (UseAcceptanceforPOI) accListPOI->AddLast(mcAccCutsPOI); //cut on number of track references
573 printf("CREATE ESD RECONSTRUCTION CUTS\n");
574 TObjArray* recListRP = new TObjArray(0) ;
575 if (UseKineforRP) recListRP->AddLast(recKineCutsRP); //cut on pt/eta/phi
576 if (UseTrackQualityforRP) recListRP->AddLast(recQualityCutsRP);
577 if (UsePrimariesforRP) recListRP->AddLast(recIsPrimaryCutsRP); //cut if it is a primary
579 TObjArray* recListPOI = new TObjArray(0) ;
580 if (UseKineforPOI) recListPOI->AddLast(recKineCutsPOI); //cut on pt/eta/phi
581 if (UseTrackQualityforPOI) recListPOI->AddLast(recQualityCutsPOI);
582 if (UsePrimariesforPOI) recListPOI->AddLast(recIsPrimaryCutsPOI); //cut if it is a primary
584 printf("CREATE ESD PID CUTS\n");
585 TObjArray* fPIDCutListRP = new TObjArray(0) ;
586 if(UsePIDforRP) {fPIDCutListRP->AddLast(cutPidRP);} //cut on ESD PID
588 TObjArray* fPIDCutListPOI = new TObjArray(0) ;
589 if (UsePIDforPOI) {fPIDCutListPOI->AddLast(cutPidPOI);} //cut on ESD PID
592 //----------Add Cut Lists to the CF Manager----------
593 printf("CREATE INTERFACE AND CUTS\n");
594 AliCFManager* cfmgrRP = new AliCFManager();
595 cfmgrRP->SetNStepEvent(3);
596 cfmgrRP->SetEventCutsList(AliCFManager::kEvtGenCuts,mcEventList);
597 cfmgrRP->SetEventCutsList(AliCFManager::kEvtRecCuts,recEventList);
598 cfmgrRP->SetNStepParticle(4);
599 cfmgrRP->SetParticleCutsList(AliCFManager::kPartGenCuts,mcListRP);
600 cfmgrRP->SetParticleCutsList(AliCFManager::kPartAccCuts,accListRP);
601 cfmgrRP->SetParticleCutsList(AliCFManager::kPartRecCuts,recListRP);
602 cfmgrRP->SetParticleCutsList(AliCFManager::kPartSelCuts,fPIDCutListRP);
604 AliCFManager* cfmgrPOI = new AliCFManager();
605 cfmgrPOI->SetNStepEvent(3);
606 cfmgrPOI->SetEventCutsList(AliCFManager::kEvtGenCuts,mcEventList);
607 cfmgrPOI->SetEventCutsList(AliCFManager::kEvtRecCuts,recEventList);
608 cfmgrPOI->SetNStepParticle(4);
609 cfmgrPOI->SetParticleCutsList(AliCFManager::kPartGenCuts,mcListPOI);
610 cfmgrPOI->SetParticleCutsList(AliCFManager::kPartAccCuts,accListPOI);
611 cfmgrPOI->SetParticleCutsList(AliCFManager::kPartRecCuts,recListPOI);
612 cfmgrPOI->SetParticleCutsList(AliCFManager::kPartSelCuts,fPIDCutListPOI);
615 taskFE->SetQAList1(qaRP);
616 taskFE->SetQAList2(qaPOI);
618 taskFE->SetCFManager1(cfmgrRP);
619 taskFE->SetCFManager2(cfmgrPOI);
623 // Create the analysis tasks, add them to the manager.
624 //===========================================================================
626 AliAnalysisTaskScalarProduct *taskSP = new AliAnalysisTaskScalarProduct("TaskScalarProduct");
627 mgr->AddTask(taskSP);
630 AliAnalysisTaskLeeYangZeros *taskLYZ1SUM = new AliAnalysisTaskLeeYangZeros("TaskLeeYangZerosSUM",kTRUE);
631 taskLYZ1SUM->SetFirstRunLYZ(kTRUE);
632 taskLYZ1SUM->SetUseSumLYZ(kTRUE);
633 mgr->AddTask(taskLYZ1SUM);
636 AliAnalysisTaskLeeYangZeros *taskLYZ1PROD = new AliAnalysisTaskLeeYangZeros("TaskLeeYangZerosPROD",kTRUE);
637 taskLYZ1PROD->SetFirstRunLYZ(kTRUE);
638 taskLYZ1PROD->SetUseSumLYZ(kFALSE);
639 mgr->AddTask(taskLYZ1PROD);
642 AliAnalysisTaskLeeYangZeros *taskLYZ2SUM = new AliAnalysisTaskLeeYangZeros("TaskLeeYangZerosSUM",kFALSE);
643 taskLYZ2SUM->SetFirstRunLYZ(kFALSE);
644 taskLYZ2SUM->SetUseSumLYZ(kTRUE);
645 mgr->AddTask(taskLYZ2SUM);
648 AliAnalysisTaskLeeYangZeros *taskLYZ2PROD = new AliAnalysisTaskLeeYangZeros("TaskLeeYangZerosPROD",kFALSE);
649 taskLYZ2PROD->SetFirstRunLYZ(kFALSE);
650 taskLYZ2PROD->SetUseSumLYZ(kFALSE);
651 mgr->AddTask(taskLYZ2PROD);
654 AliAnalysisTaskLYZEventPlane *taskLYZEP = new AliAnalysisTaskLYZEventPlane("TaskLYZEventPlane");
655 mgr->AddTask(taskLYZEP);
658 AliAnalysisTaskCumulants *taskGFC = new AliAnalysisTaskCumulants("TaskCumulants",useWeights);
659 taskGFC->SetUsePhiWeights(WEIGHTS[0]);
660 taskGFC->SetUsePtWeights(WEIGHTS[1]);
661 taskGFC->SetUseEtaWeights(WEIGHTS[2]);
662 mgr->AddTask(taskGFC);
665 AliAnalysisTaskQCumulants *taskQC = new AliAnalysisTaskQCumulants("TaskQCumulants",useWeights);
666 taskQC->SetUsePhiWeights(WEIGHTS[0]);
667 taskQC->SetUsePtWeights(WEIGHTS[1]);
668 taskQC->SetUseEtaWeights(WEIGHTS[2]);
669 mgr->AddTask(taskQC);
672 AliAnalysisTaskFittingQDistribution *taskFQD = new AliAnalysisTaskFittingQDistribution("TaskFittingQDistribution",kFALSE);
673 taskFQD->SetUsePhiWeights(WEIGHTS[0]);
674 mgr->AddTask(taskFQD);
677 AliAnalysisTaskMCEventPlane *taskMCEP = new AliAnalysisTaskMCEventPlane("TaskMCEventPlane");
678 mgr->AddTask(taskMCEP);
681 // Create the output container for the data produced by the task
682 // Connect to the input and output containers
683 //===========================================================================
684 AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
685 AliAnalysisDataContainer *coutputFE = mgr->CreateContainer("cobjFlowEventSimple", AliFlowEventSimple::Class(),AliAnalysisManager::kExchangeContainer);
686 mgr->ConnectInput(taskFE,0,cinput1);
687 mgr->ConnectOutput(taskFE,0,coutputFE);
690 TString qaNameRPFE = AliAnalysisManager::GetCommonFileName();
691 qaNameRPFE += ":QAforRP_FE_";
694 AliAnalysisDataContainer *coutputQA1FE =
695 mgr->CreateContainer("QARPFE", TList::Class(),AliAnalysisManager::kOutputContainer,qaNameRPFE);
697 TString qaNamePOIFE = AliAnalysisManager::GetCommonFileName();
698 qaNamePOIFE += ":QAforPOI_FE_";
701 AliAnalysisDataContainer *coutputQA2FE =
702 mgr->CreateContainer("QAPOIFE", TList::Class(),AliAnalysisManager::kOutputContainer,qaNamePOIFE);
704 mgr->ConnectOutput(taskFE,1,coutputQA1FE);
705 mgr->ConnectOutput(taskFE,2,coutputQA2FE);
708 // Create the output containers for the data produced by the analysis tasks
709 // Connect to the input and output containers
710 //===========================================================================
712 AliAnalysisDataContainer *cinputWeights = mgr->CreateContainer("cobjWeights",TList::Class(),AliAnalysisManager::kInputContainer);
716 TString outputSP = AliAnalysisManager::GetCommonFileName();
717 outputSP += ":outputSPanalysis";
720 AliAnalysisDataContainer *coutputSP = mgr->CreateContainer("cobjSP", TList::Class(),AliAnalysisManager::kOutputContainer,outputSP);
721 mgr->ConnectInput(taskSP,0,coutputFE);
722 mgr->ConnectOutput(taskSP,0,coutputSP);
725 TString outputLYZ1SUM = AliAnalysisManager::GetCommonFileName();
726 outputLYZ1SUM += ":outputLYZ1SUManalysis";
727 outputLYZ1SUM+= type;
729 AliAnalysisDataContainer *coutputLYZ1SUM = mgr->CreateContainer("cobjLYZ1SUM", TList::Class(),AliAnalysisManager::kOutputContainer,outputLYZ1SUM);
730 mgr->ConnectInput(taskLYZ1SUM,0,coutputFE);
731 mgr->ConnectOutput(taskLYZ1SUM,0,coutputLYZ1SUM);
734 TString outputLYZ1PROD = AliAnalysisManager::GetCommonFileName();
735 outputLYZ1PROD += ":outputLYZ1PRODanalysis";
736 outputLYZ1PROD+= type;
738 AliAnalysisDataContainer *coutputLYZ1PROD = mgr->CreateContainer("cobjLYZ1PROD", TList::Class(),AliAnalysisManager::kOutputContainer,outputLYZ1PROD);
739 mgr->ConnectInput(taskLYZ1PROD,0,coutputFE);
740 mgr->ConnectOutput(taskLYZ1PROD,0,coutputLYZ1PROD);
743 AliAnalysisDataContainer *cinputLYZ2SUM = mgr->CreateContainer("cobjLYZ2SUMin",TList::Class(),AliAnalysisManager::kInputContainer);
744 TString outputLYZ2SUM = AliAnalysisManager::GetCommonFileName();
745 outputLYZ2SUM += ":outputLYZ2SUManalysis";
746 outputLYZ2SUM+= type;
748 AliAnalysisDataContainer *coutputLYZ2SUM = mgr->CreateContainer("cobjLYZ2SUM", TList::Class(),AliAnalysisManager::kOutputContainer,outputLYZ2SUM);
749 mgr->ConnectInput(taskLYZ2SUM,0,coutputFE);
750 mgr->ConnectInput(taskLYZ2SUM,1,cinputLYZ2SUM);
751 mgr->ConnectOutput(taskLYZ2SUM,0,coutputLYZ2SUM);
752 cinputLYZ2SUM->SetData(fInputListLYZ2SUM);
755 AliAnalysisDataContainer *cinputLYZ2PROD = mgr->CreateContainer("cobjLYZ2PRODin",TList::Class(),AliAnalysisManager::kInputContainer);
756 TString outputLYZ2PROD = AliAnalysisManager::GetCommonFileName();
757 outputLYZ2PROD += ":outputLYZ2PRODanalysis";
758 outputLYZ2PROD+= type;
760 AliAnalysisDataContainer *coutputLYZ2PROD = mgr->CreateContainer("cobjLYZ2PROD", TList::Class(),AliAnalysisManager::kOutputContainer,outputLYZ2PROD);
761 mgr->ConnectInput(taskLYZ2PROD,0,coutputFE);
762 mgr->ConnectInput(taskLYZ2PROD,1,cinputLYZ2PROD);
763 mgr->ConnectOutput(taskLYZ2PROD,0,coutputLYZ2PROD);
764 cinputLYZ2PROD->SetData(fInputListLYZ2PROD);
767 AliAnalysisDataContainer *cinputLYZEP = mgr->CreateContainer("cobjLYZEPin",TList::Class(),AliAnalysisManager::kInputContainer);
768 TString outputLYZEP = AliAnalysisManager::GetCommonFileName();
769 outputLYZEP += ":outputLYZEPanalysis";
772 AliAnalysisDataContainer *coutputLYZEP = mgr->CreateContainer("cobjLYZEP", TList::Class(),AliAnalysisManager::kOutputContainer,outputLYZEP);
773 mgr->ConnectInput(taskLYZEP,0,coutputFE);
774 mgr->ConnectInput(taskLYZEP,1,cinputLYZEP);
775 mgr->ConnectOutput(taskLYZEP,0,coutputLYZEP);
776 cinputLYZEP->SetData(fInputListLYZEP);
779 TString outputGFC = AliAnalysisManager::GetCommonFileName();
780 outputGFC += ":outputGFCanalysis";
783 AliAnalysisDataContainer *coutputGFC = mgr->CreateContainer("cobjGFC", TList::Class(),AliAnalysisManager::kOutputContainer,outputGFC);
784 mgr->ConnectInput(taskGFC,0,coutputFE);
785 mgr->ConnectOutput(taskGFC,0,coutputGFC);
787 mgr->ConnectInput(taskGFC,1,cinputWeights);
788 cinputWeights->SetData(weightsList);
792 TString outputQC = AliAnalysisManager::GetCommonFileName();
793 outputQC += ":outputQCanalysis";
796 AliAnalysisDataContainer *coutputQC = mgr->CreateContainer("cobjQC", TList::Class(),AliAnalysisManager::kOutputContainer,outputQC);
797 mgr->ConnectInput(taskQC,0,coutputFE);
798 mgr->ConnectOutput(taskQC,0,coutputQC);
800 mgr->ConnectInput(taskQC,1,cinputWeights);
801 cinputWeights->SetData(weightsList);
805 TString outputFQD = AliAnalysisManager::GetCommonFileName();
806 outputFQD += ":outputFQDanalysis";
809 AliAnalysisDataContainer *coutputFQD = mgr->CreateContainer("cobjFQD", TList::Class(),AliAnalysisManager::kOutputContainer,outputFQD);
810 mgr->ConnectInput(taskFQD,0,coutputFE);
811 mgr->ConnectOutput(taskFQD,0,coutputFQD);
813 mgr->ConnectInput(taskFQD,1,cinputWeights);
814 cinputWeights->SetData(weightsList);
818 TString outputMCEP = AliAnalysisManager::GetCommonFileName();
819 outputMCEP += ":outputMCEPanalysis";
822 AliAnalysisDataContainer *coutputMCEP = mgr->CreateContainer("cobjMCEP", TList::Class(),AliAnalysisManager::kOutputContainer,outputMCEP);
823 mgr->ConnectInput(taskMCEP,0,coutputFE);
824 mgr->ConnectOutput(taskMCEP,0,coutputMCEP);
828 // Return analysis task
829 //===========================================================================