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 /////////////////////////////////////////////////////////////////////////////////////////////
10 // Define the range for eta subevents (for SP method)
11 //-----(FMD 1.7 - 5.0)-----
12 //Double_t minA = -5.0;
13 //Double_t maxA = -1.7;
14 //Double_t minB = 1.7;
15 //Double_t maxB = 5.0;
16 //-----(Tracklets 0.9 - 2.0)-----
17 //Double_t minA = -2.0;
18 //Double_t maxA = -0.9;
19 //Double_t minB = 0.9;
20 //Double_t maxB = 2.0;
21 //-----(Global 0.5 - 0.9)-----
28 Bool_t useAfterBurner=kFALSE;
33 Int_t numberOfTrackClones=0; //non-flow
35 // Define a range of the detector to exclude
36 Bool_t ExcludeRegion = kFALSE;
37 Double_t excludeEtaMin = -0.;
38 Double_t excludeEtaMax = 0.;
39 Double_t excludePhiMin = 0.;
40 Double_t excludePhiMax = 0.;
42 // use physics selection class
43 Bool_t UsePhysicsSelection = kTRUE;
47 //----------Event selection----------
48 Bool_t UseMultCutforESD = kTRUE;
49 //Bool_t UseMultCutforESD = kFALSE;
50 const Int_t multminESD = 1; //used for CORRFW cuts
51 const Int_t multmaxESD = 1000000; //used for CORRFW cuts
53 Bool_t requireVtxCuts = kTRUE;
54 const Double_t vertexXmin = -1.e99;
55 const Double_t vertexXmax = 1.e99;
56 const Double_t vertexYmin = -1.e99;
57 const Double_t vertexYmax = 1.e99;
58 const Double_t vertexZmin = -10.;
59 const Double_t vertexZmax = 10.;
60 const Int_t vertexNContributorsmin = 1;
61 const Int_t vertexNContributorsmax = 10000;
63 //Bool_t UseMultCut = kFALSE;
64 Bool_t UseMultCut = kTRUE;
65 const Int_t multmin = 1; //used for AliFlowEventSimple (to set the centrality)
66 const Int_t multmax = 10000; //used for AliFlowEventSimple (to set the centrality)
67 //const Int_t multmin = 10; //used for AliFlowEventSimple (to set the centrality)
68 //const Int_t multmax = 1000000; //used for AliFlowEventSimple (to set the centrality)
71 //----------For RP selection----------
72 // Use Global tracks ("Global"), or SPD tracklets ("Tracklet")
73 // or FMD hits ("FMD") for the RP selection
74 const TString rptype = "Global";
75 //const TString rptype = "Tracklet";
76 //const TString rptype = "FMD";
78 //KINEMATICS (on generated and reconstructed tracks)
79 Bool_t UseKineforRP = kFALSE;
80 const Double_t ptminRP = 0.0;
81 const Double_t ptmaxRP = 10.0;
82 const Double_t etaminRP = -0.9;
83 const Double_t etamaxRP = 0.9;
84 const Int_t chargeRP = 1; //not used
85 const Bool_t isChargedRP = kTRUE;
87 //PID (on generated and reconstructed tracks)
88 Bool_t UsePIDforRP = kFALSE;
89 const Int_t PdgRP = 211;
91 //TRACK QUALITY (on reconstructed tracks only)
92 //see /CORRFW/AliCFTrackQualityCuts class
93 Bool_t UseTrackQualityforRP = kFALSE;
94 const Int_t minClustersTpcRP = 80; //default = -1;
95 const Double_t maxChi2PerClusterTpcRP = 4.0; //default = 1.e+09;
96 const UShort_t minDedxClusterTpcRP = 0;
97 const Int_t minClustersItsRP = 2; //panos
98 const Double_t maxChi2PerClusterItsRP = 1.e+09;
99 const Int_t minClustersTrdRP = -1;
100 const Int_t minTrackletTrdRP = -1;
101 const Int_t minTrackletTrdPidRP = -1;
102 const Double_t maxChi2PerClusterTrdRP = 1.e+09;
103 const ULong_t statusRP = AliESDtrack::kTPCrefit; //AliESDtrack::kTPCrefit & AliESDtrack::kITSrefit
105 //PRIMARY (on reconstructed tracks only)
106 //see /CORRFW/AliCFTrackIsPrimaryCuts class
107 Bool_t UsePrimariesforRP = kFALSE;
108 const Bool_t spdVertexRP = kFALSE;
109 const Bool_t tpcVertexRP = kFALSE;
110 const Float_t minDcaToVertexXyRP = 0.;
111 const Float_t minDcaToVertexZRP = 0.;
112 const Float_t maxDcaToVertexXyRP = 2.4; //default = 1.e+10; //2.4;
113 const Float_t maxDcaToVertexZRP = 3.2; //default = 1.e+10; //3.2;
114 const Bool_t dcaToVertex2dRP = kFALSE; //default = kFALSE;
115 const Bool_t absDcaToVertexRP = kTRUE; //default = kTRUE;
116 const Double_t minNSigmaToVertexRP = 0.;
117 const Double_t maxNSigmaToVertexRP = 1.e+10; //3.; //1.e+10
118 const Double_t maxSigmaDcaXySP = 1.e+10;
119 const Double_t maxSigmaDcaZSP = 1.e+10;
120 const Bool_t requireSigmaToVertexSP = kFALSE;
121 const Bool_t acceptKinkDaughtersSP = kFALSE; //default = kTRUE;
123 //ACCEPTANCE (on generated tracks only : AliMCParticle)
124 //see /CORRFW/AliCFAcceptanceCuts class
125 Bool_t UseAcceptanceforRP = kFALSE;
126 const Int_t minTrackrefsItsRP = 0;//3;
127 const Int_t minTrackrefsTpcRP = 0;//2;
128 const Int_t minTrackrefsTrdRP = 0;
129 const Int_t minTrackrefsTofRP = 0;
130 const Int_t minTrackrefsMuonRP = 0;
131 //default for all is 0
133 //----------For POI selection----------
134 //KINEMATICS (on generated and reconstructed tracks)
135 Bool_t UseKineforPOI = kTRUE;
136 const Double_t ptminPOI = 0.0;
137 const Double_t ptmaxPOI = 10.0;
138 const Double_t etaminPOI = -0.5;
139 const Double_t etamaxPOI = 0.5;
140 const Int_t chargePOI = 1; //not used
141 const Bool_t isChargedPOI = kTRUE;
143 //PID (on generated and reconstructed tracks)
144 Bool_t UsePIDforPOI = kFALSE;
145 const Int_t PdgPOI = 321;
147 //TRACK QUALITY (on reconstructed tracks only)
148 //see /CORRFW/AliCFTrackQualityCuts class
149 Bool_t UseTrackQualityforPOI = kTRUE;
150 const Int_t minClustersTpcPOI = 80;
151 const Double_t maxChi2PerClusterTpcPOI = 4.0;
152 const UShort_t minDedxClusterTpcPOI = 0;
153 const Int_t minClustersItsPOI = 2;
154 const Double_t maxChi2PerClusterItsPOI = 1.e+09;
155 const Int_t minClustersTrdPOI = -1;
156 const Int_t minTrackletTrdPOI = -1;
157 const Int_t minTrackletTrdPidPOI = -1;
158 const Double_t maxChi2PerClusterTrdPOI = 1.e+09;
159 const ULong_t statusPOI = AliESDtrack::kTPCrefit;
161 //PRIMARY (on reconstructed tracks only)
162 //see /CORRFW/AliCFTrackIsPrimaryCuts class
163 Bool_t UsePrimariesforPOI = kTRUE;
164 const Bool_t spdVertexPOI = kFALSE;
165 const Bool_t tpcVertexPOI = kFALSE;
166 const Float_t minDcaToVertexXyPOI = 0.;
167 const Float_t minDcaToVertexZPOI = 0.;
168 const Float_t maxDcaToVertexXyPOI = 2.4;
169 const Float_t maxDcaToVertexZPOI = 3.2;
170 const Bool_t dcaToVertex2dPOI = kFALSE;
171 const Bool_t absDcaToVertexPOI = kTRUE;
172 const Double_t minNSigmaToVertexPOI = 0.;
173 const Double_t maxNSigmaToVertexPOI = 1.e+10;
174 const Double_t maxSigmaDcaXyPOI = 1.e+10;
175 const Double_t maxSigmaDcaZPOI = 1.e+10;
176 const Bool_t requireSigmaToVertexPOI = kFALSE;
177 const Bool_t acceptKinkDaughtersPOI = kFALSE;
179 //ACCEPTANCE (on generated tracks only : AliMCParticle)
180 //see /CORRFW/AliCFAcceptanceCuts class
181 Bool_t UseAcceptanceforPOI = kFALSE;
182 const Int_t minTrackrefsItsPOI = 3;
183 const Int_t minTrackrefsTpcPOI = 2;
184 const Int_t minTrackrefsTrdPOI = 0;
185 const Int_t minTrackrefsTofPOI = 0;
186 const Int_t minTrackrefsMuonPOI = 0;
188 AliAnalysisTaskFlowEvent* AddTaskFlow(TString type, Bool_t* METHODS, Bool_t QA, Bool_t* WEIGHTS)
190 //boleans for the methods
191 Bool_t SP = METHODS[0];
192 Bool_t LYZ1SUM = METHODS[1];
193 Bool_t LYZ1PROD = METHODS[2];
194 Bool_t LYZ2SUM = METHODS[3];
195 Bool_t LYZ2PROD = METHODS[4];
196 Bool_t LYZEP = METHODS[5];
197 Bool_t GFC = METHODS[6];
198 Bool_t QC = METHODS[7];
199 Bool_t FQD = METHODS[8];
200 Bool_t MCEP = METHODS[9];
201 Bool_t MH = METHODS[10];
202 Bool_t NL = METHODS[11];
204 Bool_t useWeights = WEIGHTS[0] || WEIGHTS[1] || WEIGHTS[2];
205 if (useWeights) cout<<"Weights are used"<<endl;
206 else cout<<"Weights are not used"<<endl;
209 // Get the pointer to the existing analysis manager via the static access method.
210 //==============================================================================
211 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
213 Error("AddTaskFlowEvent", "No analysis manager to connect to.");
217 // Check the analysis type using the event handlers connected to the analysis
218 // manager. The availability of MC handler cann also be checked here.
219 //==============================================================================
220 if (!mgr->GetInputEventHandler()) {
221 ::Error("AddTaskFlowEvent", "This task requires an input event handler");
225 // Open external input files
226 //===========================================================================
228 TFile *weightsFile = NULL;
229 TList *weightsList = NULL;
232 //open the file with the weights:
233 weightsFile = TFile::Open("weights.root","READ");
235 //access the list which holds the histos with weigths:
236 weightsList = (TList*)weightsFile->Get("weights");
239 cout<<" WARNING: the file <weights.root> with weights from the previous run was not available."<<endl;
245 if (LYZ2SUM || LYZ2PROD) {
246 //read the outputfile of the first run
247 TString outputFileName = "AnalysisResults1.root";
248 TString pwd(gSystem->pwd());
250 pwd+=outputFileName.Data();
251 TFile *outputFile = NULL;
252 if(gSystem->AccessPathName(pwd.Data(),kFileExists)) {
253 cout<<"WARNING: You do not have an output file:"<<endl;
254 cout<<" "<<pwd.Data()<<endl;
257 outputFile = TFile::Open(pwd.Data(),"READ");
261 // read the output directory from LYZ1SUM
262 TString inputFileNameLYZ2SUM = "outputLYZ1SUManalysis" ;
263 inputFileNameLYZ2SUM += type;
264 cout<<"The input directory is "<<inputFileNameLYZ2SUM.Data()<<endl;
265 TFile* fInputFileLYZ2SUM = (TFile*)outputFile->FindObjectAny(inputFileNameLYZ2SUM.Data());
266 if(!fInputFileLYZ2SUM || fInputFileLYZ2SUM->IsZombie()) {
267 cerr << " ERROR: To run LYZ2SUM you need the output file from LYZ1SUM. This file is not there! Please run LYZ1SUM first." << endl ;
271 TList* fInputListLYZ2SUM = (TList*)fInputFileLYZ2SUM->Get("cobjLYZ1SUM");
272 if (!fInputListLYZ2SUM) {cout<<"list is NULL pointer!"<<endl;}
274 cout<<"LYZ2SUM input file/list read..."<<endl;
278 // read the output directory from LYZ1PROD
279 TString inputFileNameLYZ2PROD = "outputLYZ1PRODanalysis" ;
280 inputFileNameLYZ2PROD += type;
281 cout<<"The input directory is "<<inputFileNameLYZ2PROD.Data()<<endl;
282 TFile* fInputFileLYZ2PROD = (TFile*)outputFile->FindObjectAny(inputFileNameLYZ2PROD.Data());
283 if(!fInputFileLYZ2PROD || fInputFileLYZ2PROD->IsZombie()) {
284 cerr << " ERROR: To run LYZ2PROD you need the output file from LYZ1PROD. This file is not there! Please run LYZ1PROD first." << endl ;
288 TList* fInputListLYZ2PROD = (TList*)fInputFileLYZ2PROD->Get("cobjLYZ1PROD");
289 if (!fInputListLYZ2PROD) {cout<<"list is NULL pointer!"<<endl;}
291 cout<<"LYZ2PROD input file/list read..."<<endl;
297 //read the outputfile of the second run
298 TString outputFileName = "AnalysisResults2.root";
299 TString pwd(gSystem->pwd());
301 pwd+=outputFileName.Data();
302 TFile *outputFile = NULL;
303 if(gSystem->AccessPathName(pwd.Data(),kFileExists)) {
304 cout<<"WARNING: You do not have an output file:"<<endl;
305 cout<<" "<<pwd.Data()<<endl;
308 outputFile = TFile::Open(pwd.Data(),"READ");
311 // read the output file from LYZ2SUM
312 TString inputFileNameLYZEP = "outputLYZ2SUManalysis" ;
313 inputFileNameLYZEP += type;
314 cout<<"The input file is "<<inputFileNameLYZEP.Data()<<endl;
315 TFile* fInputFileLYZEP = (TFile*)outputFile->FindObjectAny(inputFileNameLYZEP.Data());
316 if(!fInputFileLYZEP || fInputFileLYZEP->IsZombie()) {
317 cerr << " ERROR: To run LYZEP you need the output file from LYZ2SUM. This file is not there! Please run LYZ2SUM first." << endl ;
321 TList* fInputListLYZEP = (TList*)fInputFileLYZEP->Get("cobjLYZ2SUM");
322 if (!fInputListLYZEP) {cout<<"list is NULL pointer!"<<endl;}
324 cout<<"LYZEP input file/list read..."<<endl;
328 // Create the FMD task and add it to the manager
329 //===========================================================================
330 if (rptype == "FMD") {
331 AliFMDAnalysisTaskSE *taskfmd = NULL;
332 if (rptype == "FMD") {
333 taskfmd = new AliFMDAnalysisTaskSE("TaskFMD");
334 mgr->AddTask(taskfmd);
336 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
338 pars->SetProcessPrimary(kTRUE); //for MC only
339 pars->SetProcessHits(kFALSE);
341 //pars->SetRealData(kTRUE); //for real data
342 //pars->SetProcessPrimary(kFALSE); //for real data
348 // Create the task, add it to the manager.
349 //===========================================================================
350 AliAnalysisTaskFlowEvent *taskFE = NULL;
354 taskFE = new AliAnalysisTaskFlowEvent("TaskFlowEvent",rptype,kTRUE,1);
355 taskFE->SetFlow(v1,v2,v3,v4);
356 taskFE->SetNonFlowNumberOfTrackClones(numberOfTrackClones);
357 taskFE->SetAfterburnerOn();
359 else {taskFE = new AliAnalysisTaskFlowEvent("TaskFlowEvent",rptype,kTRUE); }
360 taskFE->SetAnalysisType(type);
361 taskFE->SetRPType(rptype); //only for ESD
363 taskFE->SetMinMult(multmin);
364 taskFE->SetMaxMult(multmax);
367 taskFE->DefineDeadZone(excludeEtaMin, excludeEtaMax, excludePhiMin, excludePhiMax);
370 taskFE->SetSubeventEtaRange(minA, maxA, minB, maxB);
371 if (UsePhysicsSelection) {
372 taskFE->SelectCollisionCandidates();
373 cout<<"Using Physics Selection"<<endl;
375 mgr->AddTask(taskFE);
380 taskFE = new AliAnalysisTaskFlowEvent("TaskFlowEvent",rptype,kFALSE,1);
381 taskFE->SetFlow(v1,v2,v3,v4);
382 taskFE->SetNonFlowNumberOfTrackClones(numberOfTrackClones);
383 taskFE->SetAfterburnerOn();
385 else {taskFE = new AliAnalysisTaskFlowEvent("TaskFlowEvent",rptype,kFALSE); }
386 taskFE->SetAnalysisType(type);
387 taskFE->SetRPType(rptype); //only for ESD
389 taskFE->SetMinMult(multmin);
390 taskFE->SetMaxMult(multmax);
393 taskFE->DefineDeadZone(excludeEtaMin, excludeEtaMax, excludePhiMin, excludePhiMax);
395 taskFE->SetSubeventEtaRange(minA, maxA, minB, maxB);
396 if (UsePhysicsSelection) {
397 taskFE->SelectCollisionCandidates();
398 cout<<"Using Physics Selection"<<endl;
400 mgr->AddTask(taskFE);
403 // Create cuts using the correction framework (CORRFW)
404 //===========================================================================
406 //Set TList for the QA histograms
407 TList* qaRP = new TList();
408 TList* qaPOI = new TList();
411 //----------Event cuts----------
412 AliCFEventGenCuts* mcEventCuts = new AliCFEventGenCuts("mcEventCuts","MC-level event cuts");
413 mcEventCuts->SetNTracksCut(multminESD,multmaxESD);
414 mcEventCuts->SetRequireVtxCuts(requireVtxCuts);
415 mcEventCuts->SetVertexXCut(vertexXmin, vertexXmax);
416 mcEventCuts->SetVertexYCut(vertexYmin, vertexYmax);
417 mcEventCuts->SetVertexZCut(vertexZmin, vertexZmax);
419 mcEventCuts->SetQAOn(qaRP);
421 AliCFEventRecCuts* recEventCuts = new AliCFEventRecCuts("recEventCuts","rec-level event cuts");
422 recEventCuts->SetNTracksCut(multminESD,multmaxESD);
423 recEventCuts->SetRequireVtxCuts(requireVtxCuts);
424 recEventCuts->SetVertexXCut(vertexXmin, vertexXmax);
425 recEventCuts->SetVertexYCut(vertexYmin, vertexYmax);
426 recEventCuts->SetVertexZCut(vertexZmin, vertexZmax);
427 recEventCuts->SetVertexNContributors(vertexNContributorsmin,vertexNContributorsmax);
429 recEventCuts->SetQAOn(qaRP);
432 //----------Cuts for RP----------
433 //KINEMATICS (MC and reconstructed)
434 AliCFTrackKineCuts* mcKineCutsRP = new AliCFTrackKineCuts("mcKineCutsRP","MC-level kinematic cuts");
435 mcKineCutsRP->SetPtRange(ptminRP,ptmaxRP);
436 mcKineCutsRP->SetEtaRange(etaminRP,etamaxRP);
437 //mcKineCutsRP->SetChargeMC(chargeRP);
438 mcKineCutsRP->SetRequireIsCharged(isChargedRP);
440 mcKineCutsRP->SetQAOn(qaRP);
443 AliCFTrackKineCuts *recKineCutsRP = new AliCFTrackKineCuts("recKineCutsRP","rec-level kine cuts");
444 recKineCutsRP->SetPtRange(ptminRP,ptmaxRP);
445 recKineCutsRP->SetEtaRange(etaminRP,etamaxRP);
446 //recKineCutsRP->SetChargeRec(chargeRP);
447 recKineCutsRP->SetRequireIsCharged(isChargedRP);
449 recKineCutsRP->SetQAOn(qaRP);
452 //PID (MC and reconstructed)
453 AliCFParticleGenCuts* mcGenCutsRP = new AliCFParticleGenCuts("mcGenCutsRP","MC particle generation cuts for RP");
454 mcGenCutsRP->SetRequireIsPrimary();
455 if (UsePIDforRP) {mcGenCutsRP->SetRequirePdgCode(PdgRP);}
457 mcGenCutsRP->SetQAOn(qaRP);
460 int n_species = AliPID::kSPECIES ;
461 Double_t* prior = new Double_t[n_species];
463 prior[0] = 0.0244519 ;
464 prior[1] = 0.0143988 ;
465 prior[2] = 0.805747 ;
466 prior[3] = 0.0928785 ;
467 prior[4] = 0.0625243 ;
469 AliCFTrackCutPid* cutPidRP = NULL;
471 cutPidRP = new AliCFTrackCutPid("cutPidRP","ESD_PID for RP") ;
472 cutPidRP->SetPriors(prior);
473 cutPidRP->SetProbabilityCut(0.0);
474 cutPidRP->SetDetectors("TPC TOF");
475 switch(TMath::Abs(PDG1)) {
476 case 11 : cutPidRP->SetParticleType(AliPID::kElectron, kTRUE); break;
477 case 13 : cutPidRP->SetParticleType(AliPID::kMuon , kTRUE); break;
478 case 211 : cutPidRP->SetParticleType(AliPID::kPion , kTRUE); break;
479 case 321 : cutPidRP->SetParticleType(AliPID::kKaon , kTRUE); break;
480 case 2212 : cutPidRP->SetParticleType(AliPID::kProton , kTRUE); break;
481 default : printf("UNDEFINED PID\n"); break;
484 cutPidRP->SetQAOn(qaRP);
489 AliCFTrackQualityCuts *recQualityCutsRP = new AliCFTrackQualityCuts("recQualityCutsRP","rec-level quality cuts");
490 recQualityCutsRP->SetMinNClusterTPC(minClustersTpcRP);
491 //recQualityCutsRP->SetMinFoundClusterTPC(minFoundClustersTpcRP); //only for internal TPC QA
492 recQualityCutsRP->SetMaxChi2PerClusterTPC(maxChi2PerClusterTpcRP);
493 recQualityCutsRP->SetMinNdEdxClusterTPC(minDedxClusterTpcRP); //to reject secondaries
495 recQualityCutsRP->SetMinNClusterITS(minClustersItsRP);
496 recQualityCutsRP->SetMaxChi2PerClusterITS(maxChi2PerClusterItsRP);
498 recQualityCutsRP->SetMinNClusterTRD(minClustersTrdRP);
499 recQualityCutsRP->SetMinNTrackletTRD(minTrackletTrdRP);
500 recQualityCutsRP->SetMinNTrackletTRDpid(minTrackletTrdPidRP);
501 recQualityCutsRP->SetMaxChi2PerTrackletTRD(maxChi2PerClusterTrdRP);
502 recQualityCutsRP->SetStatus(statusRP);
504 recQualityCutsRP->SetQAOn(qaRP);
509 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)
510 {fCovariance11Max=c1;fCovariance22Max=c2;fCovariance33Max=c3;fCovariance44Max=c4;fCovariance55Max=c5;}
514 AliCFTrackIsPrimaryCuts *recIsPrimaryCutsRP = new AliCFTrackIsPrimaryCuts("recIsPrimaryCutsRP","rec-level isPrimary cuts");
515 recIsPrimaryCutsRP->UseSPDvertex(spdVertexRP);
516 recIsPrimaryCutsRP->UseTPCvertex(tpcVertexRP);
517 recIsPrimaryCutsRP->SetMinDCAToVertexXY(minDcaToVertexXyRP);
518 recIsPrimaryCutsRP->SetMinDCAToVertexZ(minDcaToVertexZRP);
519 recIsPrimaryCutsRP->SetMaxDCAToVertexXY(maxDcaToVertexXyRP);
520 recIsPrimaryCutsRP->SetMaxDCAToVertexZ(maxDcaToVertexZRP);
521 recIsPrimaryCutsRP->SetDCAToVertex2D(dcaToVertex2dRP);
522 recIsPrimaryCutsRP->SetAbsDCAToVertex(absDcaToVertexRP);
523 recIsPrimaryCutsRP->SetMinNSigmaToVertex(minNSigmaToVertexRP);
524 recIsPrimaryCutsRP->SetMaxNSigmaToVertex(maxNSigmaToVertexRP);
525 recIsPrimaryCutsRP->SetMaxSigmaDCAxy(maxSigmaDcaXySP);
526 recIsPrimaryCutsRP->SetMaxSigmaDCAz(maxSigmaDcaZSP);
527 recIsPrimaryCutsRP->SetRequireSigmaToVertex(requireSigmaToVertexSP);
528 recIsPrimaryCutsRP->SetAcceptKinkDaughters(acceptKinkDaughtersSP);
530 recIsPrimaryCutsRP->SetQAOn(qaRP);
534 AliCFAcceptanceCuts *mcAccCutsRP = new AliCFAcceptanceCuts("mcAccCutsRP","MC acceptance cuts");
535 mcAccCutsRP->SetMinNHitITS(minTrackrefsItsRP);
536 mcAccCutsRP->SetMinNHitTPC(minTrackrefsTpcRP);
537 mcAccCutsRP->SetMinNHitTRD(minTrackrefsTrdRP);
538 mcAccCutsRP->SetMinNHitTOF(minTrackrefsTofRP);
539 mcAccCutsRP->SetMinNHitMUON(minTrackrefsMuonRP);
541 mcAccCutsRP->SetQAOn(qaRP);
545 //----------Cuts for POI----------
546 //KINEMATICS (MC and reconstructed)
547 AliCFTrackKineCuts* mcKineCutsPOI = new AliCFTrackKineCuts("mcKineCutsPOI","MC-level kinematic cuts");
548 mcKineCutsPOI->SetPtRange(ptminPOI,ptmaxPOI);
549 mcKineCutsPOI->SetEtaRange(etaminPOI,etamaxPOI);
550 //mcKineCutsPOI->SetChargeMC(chargePOI);
551 mcKineCutsPOI->SetRequireIsCharged(isChargedPOI);
553 mcKineCutsPOI->SetQAOn(qaPOI);
556 AliCFTrackKineCuts *recKineCutsPOI = new AliCFTrackKineCuts("recKineCutsPOI","rec-level kine cuts");
557 recKineCutsPOI->SetPtRange(ptminPOI,ptmaxPOI);
558 recKineCutsPOI->SetEtaRange(etaminPOI,etamaxPOI);
559 //recKineCutsPOI->SetChargeRec(chargePOI);
560 recKineCutsPOI->SetRequireIsCharged(isChargedPOI);
562 recKineCutsPOI->SetQAOn(qaPOI);
565 //PID (MC and reconstructed)
566 AliCFParticleGenCuts* mcGenCutsPOI = new AliCFParticleGenCuts("mcGenCutsPOI","MC particle generation cuts for POI");
567 mcGenCutsPOI->SetRequireIsPrimary();
568 if (UsePIDforPOI) {mcGenCutsPOI->SetRequirePdgCode(PdgPOI);}
570 mcGenCutsPOI->SetQAOn(qaPOI);
573 AliCFTrackCutPid* cutPidPOI = NULL;
575 cutPidPOI = new AliCFTrackCutPid("cutPidPOI","ESD_PID for POI") ;
576 cutPidPOI->SetPriors(prior);
577 cutPidPOI->SetProbabilityCut(0.0);
578 cutPidPOI->SetDetectors("TPC TOF");
579 switch(TMath::Abs(PDG2)) {
580 case 11 : cutPidPOI->SetParticleType(AliPID::kElectron, kTRUE); break;
581 case 13 : cutPidPOI->SetParticleType(AliPID::kMuon , kTRUE); break;
582 case 211 : cutPidPOI->SetParticleType(AliPID::kPion , kTRUE); break;
583 case 321 : cutPidPOI->SetParticleType(AliPID::kKaon , kTRUE); break;
584 case 2212 : cutPidPOI->SetParticleType(AliPID::kProton , kTRUE); break;
585 default : printf("UNDEFINED PID\n"); break;
588 cutPidPOI->SetQAOn(qaPOI);
593 AliCFTrackQualityCuts *recQualityCutsPOI = new AliCFTrackQualityCuts("recQualityCutsPOI","rec-level quality cuts");
594 recQualityCutsPOI->SetMinNClusterTPC(minClustersTpcPOI);
595 //recQualityCutsPOI->SetMinFoundClusterTPC(minFoundClustersTpcPOI); //only for internal TPC QA
596 recQualityCutsPOI->SetMaxChi2PerClusterTPC(maxChi2PerClusterTpcPOI);
597 recQualityCutsPOI->SetMinNdEdxClusterTPC(minDedxClusterTpcPOI); //to reject secondaries
599 recQualityCutsPOI->SetMinNClusterITS(minClustersItsPOI);
600 recQualityCutsPOI->SetMaxChi2PerClusterITS(maxChi2PerClusterItsPOI);
602 recQualityCutsPOI->SetMinNClusterTRD(minClustersTrdPOI);
603 recQualityCutsPOI->SetMinNTrackletTRD(minTrackletTrdPOI);
604 recQualityCutsPOI->SetMinNTrackletTRDpid(minTrackletTrdPidPOI);
605 recQualityCutsPOI->SetMaxChi2PerTrackletTRD(maxChi2PerClusterTrdPOI);
606 recQualityCutsPOI->SetStatus(statusPOI);
608 recQualityCutsPOI->SetQAOn(qaPOI);
612 AliCFTrackIsPrimaryCuts *recIsPrimaryCutsPOI = new AliCFTrackIsPrimaryCuts("recIsPrimaryCutsPOI","rec-level isPrimary cuts");
613 recIsPrimaryCutsPOI->UseSPDvertex(spdVertexPOI);
614 recIsPrimaryCutsPOI->UseTPCvertex(tpcVertexPOI);
615 recIsPrimaryCutsPOI->SetMinDCAToVertexXY(minDcaToVertexXyPOI);
616 recIsPrimaryCutsPOI->SetMinDCAToVertexZ(minDcaToVertexZPOI);
617 recIsPrimaryCutsPOI->SetMaxDCAToVertexXY(maxDcaToVertexXyPOI);
618 recIsPrimaryCutsPOI->SetMaxDCAToVertexZ(maxDcaToVertexZPOI);
619 recIsPrimaryCutsPOI->SetDCAToVertex2D(dcaToVertex2dPOI);
620 recIsPrimaryCutsPOI->SetAbsDCAToVertex(absDcaToVertexPOI);
621 recIsPrimaryCutsPOI->SetMinNSigmaToVertex(minNSigmaToVertexPOI);
622 recIsPrimaryCutsPOI->SetMaxNSigmaToVertex(maxNSigmaToVertexPOI);
623 recIsPrimaryCutsPOI->SetMaxSigmaDCAxy(maxSigmaDcaXyPOI);
624 recIsPrimaryCutsPOI->SetMaxSigmaDCAz(maxSigmaDcaZPOI);
625 recIsPrimaryCutsPOI->SetRequireSigmaToVertex(requireSigmaToVertexPOI);
626 recIsPrimaryCutsPOI->SetAcceptKinkDaughters(acceptKinkDaughtersPOI);
628 recIsPrimaryCutsPOI->SetQAOn(qaPOI);
632 AliCFAcceptanceCuts *mcAccCutsPOI = new AliCFAcceptanceCuts("mcAccCutsPOI","MC acceptance cuts");
633 mcAccCutsPOI->SetMinNHitITS(minTrackrefsItsPOI);
634 mcAccCutsPOI->SetMinNHitTPC(minTrackrefsTpcPOI);
635 mcAccCutsPOI->SetMinNHitTRD(minTrackrefsTrdPOI);
636 mcAccCutsPOI->SetMinNHitTOF(minTrackrefsTofPOI);
637 mcAccCutsPOI->SetMinNHitMUON(minTrackrefsMuonPOI);
639 mcAccCutsPOI->SetQAOn(qaPOI);
644 //----------Create Cut Lists----------
645 printf("CREATE EVENT CUTS\n");
646 TObjArray* mcEventList = new TObjArray(0);
647 if (UseMultCutforESD) mcEventList->AddLast(mcEventCuts);//cut on mult and vertex
649 TObjArray* recEventList = new TObjArray(0);
650 if (UseMultCutforESD) recEventList->AddLast(recEventCuts);//cut on mult and vertex
652 printf("CREATE MC KINE CUTS\n");
653 TObjArray* mcListRP = new TObjArray(0);
654 if (UseKineforRP) mcListRP->AddLast(mcKineCutsRP); //cut on pt/eta/phi
655 mcListRP->AddLast(mcGenCutsRP); //cut on primary and if (UsePIDforRP) MC PID
657 TObjArray* mcListPOI = new TObjArray(0);
658 if (UseKineforPOI) mcListPOI->AddLast(mcKineCutsPOI); //cut on pt/eta/phi
659 mcListPOI->AddLast(mcGenCutsPOI); //cut on primary and if (UsePIDforPOI) MC PID
661 printf("CREATE MC ACCEPTANCE CUTS\n");
662 TObjArray* accListRP = new TObjArray(0) ;
663 if (UseAcceptanceforRP) accListRP->AddLast(mcAccCutsRP); //cut on number of track references
665 TObjArray* accListPOI = new TObjArray(0) ;
666 if (UseAcceptanceforPOI) accListPOI->AddLast(mcAccCutsPOI); //cut on number of track references
668 printf("CREATE ESD RECONSTRUCTION CUTS\n");
669 TObjArray* recListRP = new TObjArray(0) ;
670 if (UseTrackQualityforRP) recListRP->AddLast(recQualityCutsRP); //track quality
671 if (UsePrimariesforRP) recListRP->AddLast(recIsPrimaryCutsRP); //cut if it is a primary
672 if (UseKineforRP) recListRP->AddLast(recKineCutsRP); //cut on pt/eta/phi
674 TObjArray* recListPOI = new TObjArray(0) ;
675 if (UseTrackQualityforPOI) recListPOI->AddLast(recQualityCutsPOI); //track quality
676 if (UsePrimariesforPOI) recListPOI->AddLast(recIsPrimaryCutsPOI); //cut if it is a primary
677 if (UseKineforPOI) recListPOI->AddLast(recKineCutsPOI); //cut on pt/eta/phi
679 printf("CREATE ESD PID CUTS\n");
680 TObjArray* fPIDCutListRP = new TObjArray(0) ;
681 if(UsePIDforRP) {fPIDCutListRP->AddLast(cutPidRP);} //cut on ESD PID
683 TObjArray* fPIDCutListPOI = new TObjArray(0) ;
684 if (UsePIDforPOI) {fPIDCutListPOI->AddLast(cutPidPOI);} //cut on ESD PID
687 //----------Add Cut Lists to the CF Manager----------
688 printf("CREATE INTERFACE AND CUTS\n");
689 AliCFManager* cfmgrRP = new AliCFManager();
690 cfmgrRP->SetNStepEvent(3);
691 cfmgrRP->SetEventCutsList(AliCFManager::kEvtGenCuts,mcEventList);
692 cfmgrRP->SetEventCutsList(AliCFManager::kEvtRecCuts,recEventList);
693 cfmgrRP->SetNStepParticle(4);
694 cfmgrRP->SetParticleCutsList(AliCFManager::kPartGenCuts,mcListRP);
695 cfmgrRP->SetParticleCutsList(AliCFManager::kPartAccCuts,accListRP);
696 cfmgrRP->SetParticleCutsList(AliCFManager::kPartRecCuts,recListRP);
697 cfmgrRP->SetParticleCutsList(AliCFManager::kPartSelCuts,fPIDCutListRP);
699 AliCFManager* cfmgrPOI = new AliCFManager();
700 cfmgrPOI->SetNStepEvent(3);
701 cfmgrPOI->SetEventCutsList(AliCFManager::kEvtGenCuts,mcEventList);
702 cfmgrPOI->SetEventCutsList(AliCFManager::kEvtRecCuts,recEventList);
703 cfmgrPOI->SetNStepParticle(4);
704 cfmgrPOI->SetParticleCutsList(AliCFManager::kPartGenCuts,mcListPOI);
705 cfmgrPOI->SetParticleCutsList(AliCFManager::kPartAccCuts,accListPOI);
706 cfmgrPOI->SetParticleCutsList(AliCFManager::kPartRecCuts,recListPOI);
707 cfmgrPOI->SetParticleCutsList(AliCFManager::kPartSelCuts,fPIDCutListPOI);
710 taskFE->SetQAList1(qaRP);
711 taskFE->SetQAList2(qaPOI);
713 taskFE->SetCFManager1(cfmgrRP);
714 taskFE->SetCFManager2(cfmgrPOI);
718 // Create the analysis tasks, add them to the manager.
719 //===========================================================================
721 AliAnalysisTaskScalarProduct *taskSP = new AliAnalysisTaskScalarProduct("TaskScalarProduct",WEIGHTS[0]);
722 taskSP->SetRelDiffMsub(1.0);
723 taskSP->SetApplyCorrectionForNUA(kFALSE);
724 mgr->AddTask(taskSP);
727 AliAnalysisTaskLeeYangZeros *taskLYZ1SUM = new AliAnalysisTaskLeeYangZeros("TaskLeeYangZerosSUM",kTRUE);
728 taskLYZ1SUM->SetFirstRunLYZ(kTRUE);
729 taskLYZ1SUM->SetUseSumLYZ(kTRUE);
730 mgr->AddTask(taskLYZ1SUM);
733 AliAnalysisTaskLeeYangZeros *taskLYZ1PROD = new AliAnalysisTaskLeeYangZeros("TaskLeeYangZerosPROD",kTRUE);
734 taskLYZ1PROD->SetFirstRunLYZ(kTRUE);
735 taskLYZ1PROD->SetUseSumLYZ(kFALSE);
736 mgr->AddTask(taskLYZ1PROD);
739 AliAnalysisTaskLeeYangZeros *taskLYZ2SUM = new AliAnalysisTaskLeeYangZeros("TaskLeeYangZerosSUM",kFALSE);
740 taskLYZ2SUM->SetFirstRunLYZ(kFALSE);
741 taskLYZ2SUM->SetUseSumLYZ(kTRUE);
742 mgr->AddTask(taskLYZ2SUM);
745 AliAnalysisTaskLeeYangZeros *taskLYZ2PROD = new AliAnalysisTaskLeeYangZeros("TaskLeeYangZerosPROD",kFALSE);
746 taskLYZ2PROD->SetFirstRunLYZ(kFALSE);
747 taskLYZ2PROD->SetUseSumLYZ(kFALSE);
748 mgr->AddTask(taskLYZ2PROD);
751 AliAnalysisTaskLYZEventPlane *taskLYZEP = new AliAnalysisTaskLYZEventPlane("TaskLYZEventPlane");
752 mgr->AddTask(taskLYZEP);
755 AliAnalysisTaskCumulants *taskGFC = new AliAnalysisTaskCumulants("TaskCumulants",useWeights);
756 taskGFC->SetUsePhiWeights(WEIGHTS[0]);
757 taskGFC->SetUsePtWeights(WEIGHTS[1]);
758 taskGFC->SetUseEtaWeights(WEIGHTS[2]);
759 mgr->AddTask(taskGFC);
762 AliAnalysisTaskQCumulants *taskQC = new AliAnalysisTaskQCumulants("TaskQCumulants",useWeights);
763 taskQC->SetUsePhiWeights(WEIGHTS[0]);
764 taskQC->SetUsePtWeights(WEIGHTS[1]);
765 taskQC->SetUseEtaWeights(WEIGHTS[2]);
766 taskQC->SetnBinsMult(10000);
767 taskQC->SetMinMult(0.);
768 taskQC->SetMaxMult(10000.);
769 mgr->AddTask(taskQC);
772 AliAnalysisTaskFittingQDistribution *taskFQD = new AliAnalysisTaskFittingQDistribution("TaskFittingQDistribution",kFALSE);
773 taskFQD->SetUsePhiWeights(WEIGHTS[0]);
774 taskFQD->SetqMin(0.);
775 taskFQD->SetqMax(1000.);
776 taskFQD->SetqNbins(10000);
777 mgr->AddTask(taskFQD);
780 AliAnalysisTaskMCEventPlane *taskMCEP = new AliAnalysisTaskMCEventPlane("TaskMCEventPlane");
781 mgr->AddTask(taskMCEP);
784 AliAnalysisTaskMixedHarmonics *taskMH = new AliAnalysisTaskMixedHarmonics("TaskMixedHarmonics",useWeights);
785 taskMH->SetHarmonic(1); // n in cos[n(phi1+phi2-2phi3)] and cos[n(psi1+psi2-2phi3)]
786 taskMH->SetNoOfMultipicityBins(10);
787 taskMH->SetMultipicityBinWidth(2);
788 taskMH->SetMinMultiplicity(3);
789 taskMH->SetCorrectForDetectorEffects(kTRUE);
790 taskMH->SetEvaluateDifferential3pCorrelator(kFALSE); // evaluate <<cos[n(psi1+psi2-2phi3)]>> (Remark: two nested loops)
791 taskMH->SetOppositeChargesPOI(kFALSE); // POIs psi1 and psi2 in cos[n(psi1+psi2-2phi3)] will have opposite charges
792 mgr->AddTask(taskMH);
795 AliAnalysisTaskNestedLoops *taskNL = new AliAnalysisTaskNestedLoops("TaskNestedLoops",useWeights);
796 taskNL->SetHarmonic(1); // n in cos[n(phi1+phi2-2phi3)] and cos[n(psi1+psi2-2phi3)]
797 taskNL->SetEvaluateNestedLoopsForRAD(kTRUE); // RAD = Relative Angle Distribution
798 taskNL->SetEvaluateNestedLoopsForMH(kTRUE); // evalaute <<cos[n(phi1+phi2-2phi3)]>> (Remark: three nested loops)
799 taskNL->SetEvaluateDifferential3pCorrelator(kFALSE); // evaluate <<cos[n(psi1+psi2-2phi3)]>> (Remark: three nested loops)
800 taskNL->SetOppositeChargesPOI(kFALSE); // POIs psi1 and psi2 in cos[n(psi1+psi2-2phi3)] will have opposite charges
801 mgr->AddTask(taskNL);
804 // Create the output container for the data produced by the task
805 // Connect to the input and output containers
806 //===========================================================================
807 AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
809 if (rptype == "FMD") {
810 AliAnalysisDataContainer *coutputFMD =
811 mgr->CreateContainer("BackgroundCorrected", TList::Class(), AliAnalysisManager::kExchangeContainer);
812 //input and output taskFMD
813 mgr->ConnectInput(taskfmd, 0, cinput1);
814 mgr->ConnectOutput(taskfmd, 1, coutputFMD);
816 mgr->ConnectInput(taskFE,1,coutputFMD);
819 AliAnalysisDataContainer *coutputFE =
820 mgr->CreateContainer("cobjFlowEventSimple", AliFlowEventSimple::Class(),AliAnalysisManager::kExchangeContainer);
821 mgr->ConnectInput(taskFE,0,cinput1);
822 mgr->ConnectOutput(taskFE,1,coutputFE);
825 TString qaNameRPFE = AliAnalysisManager::GetCommonFileName();
826 qaNameRPFE += ":QAforRP_FE_";
829 AliAnalysisDataContainer *coutputQA1FE =
830 mgr->CreateContainer("QARPFE", TList::Class(),AliAnalysisManager::kOutputContainer,qaNameRPFE);
832 TString qaNamePOIFE = AliAnalysisManager::GetCommonFileName();
833 qaNamePOIFE += ":QAforPOI_FE_";
836 AliAnalysisDataContainer *coutputQA2FE =
837 mgr->CreateContainer("QAPOIFE", TList::Class(),AliAnalysisManager::kOutputContainer,qaNamePOIFE);
839 mgr->ConnectOutput(taskFE,2,coutputQA1FE);
840 mgr->ConnectOutput(taskFE,3,coutputQA2FE);
843 // Create the output containers for the data produced by the analysis tasks
844 // Connect to the input and output containers
845 //===========================================================================
847 AliAnalysisDataContainer *cinputWeights = mgr->CreateContainer("cobjWeights",TList::Class(),AliAnalysisManager::kInputContainer);
851 TString outputSP = AliAnalysisManager::GetCommonFileName();
852 outputSP += ":outputSPanalysis";
855 AliAnalysisDataContainer *coutputSP = mgr->CreateContainer("cobjSP", TList::Class(),AliAnalysisManager::kOutputContainer,outputSP);
856 mgr->ConnectInput(taskSP,0,coutputFE);
857 mgr->ConnectOutput(taskSP,1,coutputSP);
859 mgr->ConnectInput(taskSP,1,cinputWeights);
860 cinputWeights->SetData(weightsList);
864 TString outputLYZ1SUM = AliAnalysisManager::GetCommonFileName();
865 outputLYZ1SUM += ":outputLYZ1SUManalysis";
866 outputLYZ1SUM+= type;
868 AliAnalysisDataContainer *coutputLYZ1SUM = mgr->CreateContainer("cobjLYZ1SUM", TList::Class(),AliAnalysisManager::kOutputContainer,outputLYZ1SUM);
869 mgr->ConnectInput(taskLYZ1SUM,0,coutputFE);
870 mgr->ConnectOutput(taskLYZ1SUM,1,coutputLYZ1SUM);
873 TString outputLYZ1PROD = AliAnalysisManager::GetCommonFileName();
874 outputLYZ1PROD += ":outputLYZ1PRODanalysis";
875 outputLYZ1PROD+= type;
877 AliAnalysisDataContainer *coutputLYZ1PROD = mgr->CreateContainer("cobjLYZ1PROD", TList::Class(),AliAnalysisManager::kOutputContainer,outputLYZ1PROD);
878 mgr->ConnectInput(taskLYZ1PROD,0,coutputFE);
879 mgr->ConnectOutput(taskLYZ1PROD,1,coutputLYZ1PROD);
882 AliAnalysisDataContainer *cinputLYZ2SUM = mgr->CreateContainer("cobjLYZ2SUMin",TList::Class(),AliAnalysisManager::kInputContainer);
883 TString outputLYZ2SUM = AliAnalysisManager::GetCommonFileName();
884 outputLYZ2SUM += ":outputLYZ2SUManalysis";
885 outputLYZ2SUM+= type;
887 AliAnalysisDataContainer *coutputLYZ2SUM = mgr->CreateContainer("cobjLYZ2SUM", TList::Class(),AliAnalysisManager::kOutputContainer,outputLYZ2SUM);
888 mgr->ConnectInput(taskLYZ2SUM,0,coutputFE);
889 mgr->ConnectInput(taskLYZ2SUM,1,cinputLYZ2SUM);
890 mgr->ConnectOutput(taskLYZ2SUM,1,coutputLYZ2SUM);
891 cinputLYZ2SUM->SetData(fInputListLYZ2SUM);
894 AliAnalysisDataContainer *cinputLYZ2PROD = mgr->CreateContainer("cobjLYZ2PRODin",TList::Class(),AliAnalysisManager::kInputContainer);
895 TString outputLYZ2PROD = AliAnalysisManager::GetCommonFileName();
896 outputLYZ2PROD += ":outputLYZ2PRODanalysis";
897 outputLYZ2PROD+= type;
899 AliAnalysisDataContainer *coutputLYZ2PROD = mgr->CreateContainer("cobjLYZ2PROD", TList::Class(),AliAnalysisManager::kOutputContainer,outputLYZ2PROD);
900 mgr->ConnectInput(taskLYZ2PROD,0,coutputFE);
901 mgr->ConnectInput(taskLYZ2PROD,1,cinputLYZ2PROD);
902 mgr->ConnectOutput(taskLYZ2PROD,1,coutputLYZ2PROD);
903 cinputLYZ2PROD->SetData(fInputListLYZ2PROD);
906 AliAnalysisDataContainer *cinputLYZEP = mgr->CreateContainer("cobjLYZEPin",TList::Class(),AliAnalysisManager::kInputContainer);
907 TString outputLYZEP = AliAnalysisManager::GetCommonFileName();
908 outputLYZEP += ":outputLYZEPanalysis";
911 AliAnalysisDataContainer *coutputLYZEP = mgr->CreateContainer("cobjLYZEP", TList::Class(),AliAnalysisManager::kOutputContainer,outputLYZEP);
912 mgr->ConnectInput(taskLYZEP,0,coutputFE);
913 mgr->ConnectInput(taskLYZEP,1,cinputLYZEP);
914 mgr->ConnectOutput(taskLYZEP,1,coutputLYZEP);
915 cinputLYZEP->SetData(fInputListLYZEP);
918 TString outputGFC = AliAnalysisManager::GetCommonFileName();
919 outputGFC += ":outputGFCanalysis";
922 AliAnalysisDataContainer *coutputGFC = mgr->CreateContainer("cobjGFC", TList::Class(),AliAnalysisManager::kOutputContainer,outputGFC);
923 mgr->ConnectInput(taskGFC,0,coutputFE);
924 mgr->ConnectOutput(taskGFC,1,coutputGFC);
926 mgr->ConnectInput(taskGFC,1,cinputWeights);
927 cinputWeights->SetData(weightsList);
931 TString outputQC = AliAnalysisManager::GetCommonFileName();
932 outputQC += ":outputQCanalysis";
935 AliAnalysisDataContainer *coutputQC = mgr->CreateContainer("cobjQC", TList::Class(),AliAnalysisManager::kOutputContainer,outputQC);
936 mgr->ConnectInput(taskQC,0,coutputFE);
937 mgr->ConnectOutput(taskQC,1,coutputQC);
939 mgr->ConnectInput(taskQC,1,cinputWeights);
940 cinputWeights->SetData(weightsList);
944 TString outputFQD = AliAnalysisManager::GetCommonFileName();
945 outputFQD += ":outputFQDanalysis";
948 AliAnalysisDataContainer *coutputFQD = mgr->CreateContainer("cobjFQD", TList::Class(),AliAnalysisManager::kOutputContainer,outputFQD);
949 mgr->ConnectInput(taskFQD,0,coutputFE);
950 mgr->ConnectOutput(taskFQD,1,coutputFQD);
952 mgr->ConnectInput(taskFQD,1,cinputWeights);
953 cinputWeights->SetData(weightsList);
957 TString outputMCEP = AliAnalysisManager::GetCommonFileName();
958 outputMCEP += ":outputMCEPanalysis";
961 AliAnalysisDataContainer *coutputMCEP = mgr->CreateContainer("cobjMCEP", TList::Class(),AliAnalysisManager::kOutputContainer,outputMCEP);
962 mgr->ConnectInput(taskMCEP,0,coutputFE);
963 mgr->ConnectOutput(taskMCEP,1,coutputMCEP);
966 TString outputMH = AliAnalysisManager::GetCommonFileName();
967 outputMH += ":outputMHanalysis";
970 AliAnalysisDataContainer *coutputMH = mgr->CreateContainer("cobjMH", TList::Class(),AliAnalysisManager::kOutputContainer,outputMH);
971 mgr->ConnectInput(taskMH,0,coutputFE);
972 mgr->ConnectOutput(taskMH,1,coutputMH);
974 // mgr->ConnectInput(taskMH,1,cinputWeights);
975 // cinputWeights->SetData(weightsList);
979 TString outputNL = AliAnalysisManager::GetCommonFileName();
980 outputNL += ":outputNLanalysis";
983 AliAnalysisDataContainer *coutputNL = mgr->CreateContainer("cobjNL", TList::Class(),AliAnalysisManager::kOutputContainer,outputNL);
984 mgr->ConnectInput(taskNL,0,coutputFE);
985 mgr->ConnectOutput(taskNL,1,coutputNL);
987 // mgr->ConnectInput(taskNL,1,cinputWeights);
988 // cinputWeights->SetData(weightsList);
992 // Return analysis task
993 //===========================================================================