]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/FLOW/macros/AddTaskFlow.C
support for nonisotropic detctor in SP method also on task level
[u/mrichter/AliRoot.git] / PWG2 / FLOW / macros / AddTaskFlow.C
CommitLineData
93329510 1/////////////////////////////////////////////////////////////////////////////////////////////
2//
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.
7//
8/////////////////////////////////////////////////////////////////////////////////////////////
9
7a01f4a7 10// Define the range for eta subevents (for SP method)
a02a1889 11//-----(FMD 1.7 - 5.0)-----
44e060e0 12//Double_t minA = -5.0;
13//Double_t maxA = -1.7;
14//Double_t minB = 1.7;
15//Double_t maxB = 5.0;
a02a1889 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)-----
22Double_t minA = -0.9;
23Double_t maxA = -0.5;
24Double_t minB = 0.5;
25Double_t maxB = 0.9;
26
93329510 27
f6cf97c1 28// use physics selection class
40c24aa8 29Bool_t UsePhysicsSelection = kTRUE;
f6cf97c1 30
93329510 31// SETTING THE CUTS
32
c0ed6325 33//----------Event selection----------
34Bool_t UseMultCutforESD = kTRUE;
35//Bool_t UseMultCutforESD = kFALSE;
36const Int_t multminESD = 1; //used for CORRFW cuts
3828db44 37const Int_t multmaxESD = 1000000; //used for CORRFW cuts
f01e9bfe 38
40ca990b 39Bool_t requireVtxCuts = kTRUE;
21f8d9b1 40const Double_t vertexXmin = -1.e99;
41const Double_t vertexXmax = 1.e99;
42const Double_t vertexYmin = -1.e99;
43const Double_t vertexYmax = 1.e99;
44const Double_t vertexZmin = -1.e99;
45const Double_t vertexZmax = 1.e99;
46const Int_t vertexNContributorsmin = 1;
47const Int_t vertexNContributorsmax = 10000;
40ca990b 48
ea456d37 49//Bool_t UseMultCut = kFALSE;
f6cf97c1 50Bool_t UseMultCut = kTRUE;
22063257 51const Int_t multmin = 1; //used for AliFlowEventSimple (to set the centrality)
29195b69 52const Int_t multmax = 10000; //used for AliFlowEventSimple (to set the centrality)
c0ed6325 53//const Int_t multmin = 10; //used for AliFlowEventSimple (to set the centrality)
54//const Int_t multmax = 1000000; //used for AliFlowEventSimple (to set the centrality)
47d5b28f 55
94cd9888 56
c0ed6325 57//----------For RP selection----------
44e060e0 58// Use Global tracks ("Global"), or SPD tracklets ("Tracklet")
59// or FMD hits ("FMD") for the RP selection
ef4799a7 60const TString rptype = "Global";
61//const TString rptype = "Tracklet";
44e060e0 62//const TString rptype = "FMD";
ef4799a7 63
c0ed6325 64//KINEMATICS (on generated and reconstructed tracks)
65Bool_t UseKineforRP = kTRUE;
66const Double_t ptminRP = 0.0;
67const Double_t ptmaxRP = 10.0;
68const Double_t etaminRP = -0.9;
69const Double_t etamaxRP = 0.9;
70const Int_t chargeRP = 1; //not used
21f8d9b1 71const Bool_t isChargedRP = kTRUE;
c0ed6325 72
73//PID (on generated and reconstructed tracks)
93329510 74Bool_t UsePIDforRP = kFALSE;
c0ed6325 75const Int_t PdgRP = 211;
76
77//TRACK QUALITY (on reconstructed tracks only)
78//see /CORRFW/AliCFTrackQualityCuts class
79Bool_t UseTrackQualityforRP = kTRUE;
80const Int_t minClustersTpcRP = 80; //default = -1;
21f8d9b1 81const Double_t maxChi2PerClusterTpcRP = 4.0; //default = 1.e+09;
c0ed6325 82const UShort_t minDedxClusterTpcRP = 0;
83const Int_t minClustersItsRP = 2; //panos
84const Double_t maxChi2PerClusterItsRP = 1.e+09;
85const Int_t minClustersTrdRP = -1;
86const Int_t minTrackletTrdRP = -1;
87const Int_t minTrackletTrdPidRP = -1;
88const Double_t maxChi2PerClusterTrdRP = 1.e+09;
89const ULong_t statusRP = AliESDtrack::kTPCrefit; //AliESDtrack::kTPCrefit & AliESDtrack::kITSrefit
90
91//PRIMARY (on reconstructed tracks only)
92//see /CORRFW/AliCFTrackIsPrimaryCuts class
93Bool_t UsePrimariesforRP = kTRUE;
94const Bool_t spdVertexRP = kFALSE;
95const Bool_t tpcVertexRP = kFALSE;
96const Float_t minDcaToVertexXyRP = 0.;
97const Float_t minDcaToVertexZRP = 0.;
98const Float_t maxDcaToVertexXyRP = 2.4; //default = 1.e+10; //2.4;
99const Float_t maxDcaToVertexZRP = 3.2; //default = 1.e+10; //3.2;
100const Bool_t dcaToVertex2dRP = kFALSE; //default = kFALSE;
101const Bool_t absDcaToVertexRP = kTRUE; //default = kTRUE;
102const Double_t minNSigmaToVertexRP = 0.;
103const Double_t maxNSigmaToVertexRP = 1.e+10; //3.; //1.e+10
104const Double_t maxSigmaDcaXySP = 1.e+10;
105const Double_t maxSigmaDcaZSP = 1.e+10;
106const Bool_t requireSigmaToVertexSP = kFALSE;
107const Bool_t acceptKinkDaughtersSP = kFALSE; //default = kTRUE;
108
109//ACCEPTANCE (on generated tracks only : AliMCParticle)
110//see /CORRFW/AliCFAcceptanceCuts class
111Bool_t UseAcceptanceforRP = kFALSE;
112const Int_t minTrackrefsItsRP = 0;//3;
113const Int_t minTrackrefsTpcRP = 0;//2;
114const Int_t minTrackrefsTrdRP = 0;
115const Int_t minTrackrefsTofRP = 0;
116const Int_t minTrackrefsMuonRP = 0;
117//default for all is 0
118
119//----------For POI selection----------
120//KINEMATICS (on generated and reconstructed tracks)
121Bool_t UseKineforPOI = kTRUE;
122const Double_t ptminPOI = 0.0;
123const Double_t ptmaxPOI = 10.0;
ef4799a7 124const Double_t etaminPOI = -0.5;
125const Double_t etamaxPOI = 0.5;
c0ed6325 126const Int_t chargePOI = 1; //not used
21f8d9b1 127const Bool_t isChargedPOI = kTRUE;
c0ed6325 128
129//PID (on generated and reconstructed tracks)
93329510 130Bool_t UsePIDforPOI = kFALSE;
c0ed6325 131const Int_t PdgPOI = 321;
93329510 132
c0ed6325 133//TRACK QUALITY (on reconstructed tracks only)
134//see /CORRFW/AliCFTrackQualityCuts class
135Bool_t UseTrackQualityforPOI = kTRUE;
136const Int_t minClustersTpcPOI = 80;
21f8d9b1 137const Double_t maxChi2PerClusterTpcPOI = 4.0;
c0ed6325 138const UShort_t minDedxClusterTpcPOI = 0;
139const Int_t minClustersItsPOI = 2;
140const Double_t maxChi2PerClusterItsPOI = 1.e+09;
141const Int_t minClustersTrdPOI = -1;
142const Int_t minTrackletTrdPOI = -1;
143const Int_t minTrackletTrdPidPOI = -1;
144const Double_t maxChi2PerClusterTrdPOI = 1.e+09;
145const ULong_t statusPOI = AliESDtrack::kTPCrefit;
146
147//PRIMARY (on reconstructed tracks only)
148//see /CORRFW/AliCFTrackIsPrimaryCuts class
149Bool_t UsePrimariesforPOI = kTRUE;
150const Bool_t spdVertexPOI = kFALSE;
151const Bool_t tpcVertexPOI = kFALSE;
152const Float_t minDcaToVertexXyPOI = 0.;
153const Float_t minDcaToVertexZPOI = 0.;
154const Float_t maxDcaToVertexXyPOI = 2.4;
155const Float_t maxDcaToVertexZPOI = 3.2;
156const Bool_t dcaToVertex2dPOI = kFALSE;
157const Bool_t absDcaToVertexPOI = kTRUE;
158const Double_t minNSigmaToVertexPOI = 0.;
159const Double_t maxNSigmaToVertexPOI = 1.e+10;
160const Double_t maxSigmaDcaXyPOI = 1.e+10;
161const Double_t maxSigmaDcaZPOI = 1.e+10;
162const Bool_t requireSigmaToVertexPOI = kFALSE;
163const Bool_t acceptKinkDaughtersPOI = kFALSE;
164
165//ACCEPTANCE (on generated tracks only : AliMCParticle)
166//see /CORRFW/AliCFAcceptanceCuts class
167Bool_t UseAcceptanceforPOI = kFALSE;
168const Int_t minTrackrefsItsPOI = 3;
169const Int_t minTrackrefsTpcPOI = 2;
170const Int_t minTrackrefsTrdPOI = 0;
171const Int_t minTrackrefsTofPOI = 0;
172const Int_t minTrackrefsMuonPOI = 0;
173
174
175//----------For Adding Flow to the Event----------
47d5b28f 176const Bool_t AddToEvent = kFALSE;
c0ed6325 177Double_t ellipticFlow = 0.05;
47d5b28f 178
93329510 179
180AliAnalysisTaskFlowEvent* AddTaskFlow(TString type, Bool_t* METHODS, Bool_t QA, Bool_t* WEIGHTS)
181{
182 //boleans for the methods
c741f5d0 183 Bool_t SP = METHODS[0];
184 Bool_t LYZ1SUM = METHODS[1];
185 Bool_t LYZ1PROD = METHODS[2];
186 Bool_t LYZ2SUM = METHODS[3];
187 Bool_t LYZ2PROD = METHODS[4];
188 Bool_t LYZEP = METHODS[5];
189 Bool_t GFC = METHODS[6];
190 Bool_t QC = METHODS[7];
191 Bool_t FQD = METHODS[8];
67a6b178 192 Bool_t MCEP = METHODS[9];
193 Bool_t MH = METHODS[10];
194 Bool_t NL = METHODS[11];
93329510 195 //for using weights
196 Bool_t useWeights = WEIGHTS[0] || WEIGHTS[1] || WEIGHTS[2];
197 if (useWeights) cout<<"Weights are used"<<endl;
198 else cout<<"Weights are not used"<<endl;
199
200
201 // Get the pointer to the existing analysis manager via the static access method.
202 //==============================================================================
203 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
204 if (!mgr) {
205 Error("AddTaskFlowEvent", "No analysis manager to connect to.");
206 return NULL;
207 }
208
209 // Check the analysis type using the event handlers connected to the analysis
210 // manager. The availability of MC handler cann also be checked here.
211 //==============================================================================
212 if (!mgr->GetInputEventHandler()) {
213 ::Error("AddTaskFlowEvent", "This task requires an input event handler");
214 return NULL;
215 }
216
217 // Open external input files
218 //===========================================================================
219 //weights:
220 TFile *weightsFile = NULL;
221 TList *weightsList = NULL;
222
223 if(useWeights) {
224 //open the file with the weights:
225 weightsFile = TFile::Open("weights.root","READ");
226 if(weightsFile) {
227 //access the list which holds the histos with weigths:
228 weightsList = (TList*)weightsFile->Get("weights");
229 }
230 else {
231 cout<<" WARNING: the file <weights.root> with weights from the previous run was not available."<<endl;
232 break;
233 }
234 }
235
40ca990b 236 //LYZ2
237 if (LYZ2SUM || LYZ2PROD) {
238 //read the outputfile of the first run
239 TString outputFileName = "AnalysisResults1.root";
240 TString pwd(gSystem->pwd());
241 pwd+="/";
242 pwd+=outputFileName.Data();
243 TFile *outputFile = NULL;
244 if(gSystem->AccessPathName(pwd.Data(),kFileExists)) {
245 cout<<"WARNING: You do not have an output file:"<<endl;
246 cout<<" "<<pwd.Data()<<endl;
247 exit(0);
248 } else {
249 outputFile = TFile::Open(pwd.Data(),"READ");
c741f5d0 250 }
40ca990b 251
252 if (LYZ2SUM){
253 // read the output directory from LYZ1SUM
254 TString inputFileNameLYZ2SUM = "outputLYZ1SUManalysis" ;
255 inputFileNameLYZ2SUM += type;
256 cout<<"The input directory is "<<inputFileNameLYZ2SUM.Data()<<endl;
257 TFile* fInputFileLYZ2SUM = (TFile*)outputFile->FindObjectAny(inputFileNameLYZ2SUM.Data());
258 if(!fInputFileLYZ2SUM || fInputFileLYZ2SUM->IsZombie()) {
259 cerr << " ERROR: To run LYZ2SUM you need the output file from LYZ1SUM. This file is not there! Please run LYZ1SUM first." << endl ;
260 break;
261 }
262 else {
263 TList* fInputListLYZ2SUM = (TList*)fInputFileLYZ2SUM->Get("cobjLYZ1SUM");
264 if (!fInputListLYZ2SUM) {cout<<"list is NULL pointer!"<<endl;}
265 }
266 cout<<"LYZ2SUM input file/list read..."<<endl;
c0ed6325 267 }
40ca990b 268
269 if (LYZ2PROD){
270 // read the output directory from LYZ1PROD
271 TString inputFileNameLYZ2PROD = "outputLYZ1PRODanalysis" ;
272 inputFileNameLYZ2PROD += type;
273 cout<<"The input directory is "<<inputFileNameLYZ2PROD.Data()<<endl;
274 TFile* fInputFileLYZ2PROD = (TFile*)outputFile->FindObjectAny(inputFileNameLYZ2PROD.Data());
275 if(!fInputFileLYZ2PROD || fInputFileLYZ2PROD->IsZombie()) {
276 cerr << " ERROR: To run LYZ2PROD you need the output file from LYZ1PROD. This file is not there! Please run LYZ1PROD first." << endl ;
277 break;
278 }
279 else {
280 TList* fInputListLYZ2PROD = (TList*)fInputFileLYZ2PROD->Get("cobjLYZ1PROD");
281 if (!fInputListLYZ2PROD) {cout<<"list is NULL pointer!"<<endl;}
282 }
283 cout<<"LYZ2PROD input file/list read..."<<endl;
c0ed6325 284 }
93329510 285 }
40ca990b 286
287
93329510 288 if (LYZEP) {
40ca990b 289 //read the outputfile of the second run
290 TString outputFileName = "AnalysisResults2.root";
291 TString pwd(gSystem->pwd());
292 pwd+="/";
293 pwd+=outputFileName.Data();
294 TFile *outputFile = NULL;
295 if(gSystem->AccessPathName(pwd.Data(),kFileExists)) {
296 cout<<"WARNING: You do not have an output file:"<<endl;
297 cout<<" "<<pwd.Data()<<endl;
298 exit(0);
299 } else {
300 outputFile = TFile::Open(pwd.Data(),"READ");
301 }
302
c741f5d0 303 // read the output file from LYZ2SUM
304 TString inputFileNameLYZEP = "outputLYZ2SUManalysis" ;
93329510 305 inputFileNameLYZEP += type;
93329510 306 cout<<"The input file is "<<inputFileNameLYZEP.Data()<<endl;
40ca990b 307 TFile* fInputFileLYZEP = (TFile*)outputFile->FindObjectAny(inputFileNameLYZEP.Data());
93329510 308 if(!fInputFileLYZEP || fInputFileLYZEP->IsZombie()) {
5b40431d 309 cerr << " ERROR: To run LYZEP you need the output file from LYZ2SUM. This file is not there! Please run LYZ2SUM first." << endl ;
93329510 310 break;
311 }
312 else {
c741f5d0 313 TList* fInputListLYZEP = (TList*)fInputFileLYZEP->Get("cobjLYZ2SUM");
93329510 314 if (!fInputListLYZEP) {cout<<"list is NULL pointer!"<<endl;}
315 }
316 cout<<"LYZEP input file/list read..."<<endl;
317 }
40ca990b 318
a02a1889 319
44e060e0 320 // Create the FMD task and add it to the manager
321 //===========================================================================
44e060e0 322 if (rptype == "FMD") {
a02a1889 323 AliFMDAnalysisTaskSE *taskfmd = NULL;
324 if (rptype == "FMD") {
325 taskfmd = new AliFMDAnalysisTaskSE("TaskFMD");
326 mgr->AddTask(taskfmd);
44e060e0 327
a02a1889 328 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
329 pars->Init();
330 pars->SetProcessPrimary(kTRUE);
331 pars->SetProcessHits(kFALSE);
332 }
44e060e0 333 }
a02a1889 334
93329510 335
336 // Create the task, add it to the manager.
337 //===========================================================================
338 AliAnalysisTaskFlowEvent *taskFE = NULL;
339 if (QA) {
47d5b28f 340 if(AddToEvent) {
44e060e0 341 taskFE = new AliAnalysisTaskFlowEvent("TaskFlowEvent",rptype,kTRUE,1);
c0ed6325 342 taskFE->SetEllipticFlowValue(ellipticFlow); } //TEST
44e060e0 343 else {taskFE = new AliAnalysisTaskFlowEvent("TaskFlowEvent",rptype,kTRUE); }
93329510 344 taskFE->SetAnalysisType(type);
ef4799a7 345 taskFE->SetRPType(rptype); //only for ESD
c0ed6325 346 if (UseMultCut) {
347 taskFE->SetMinMult(multmin);
f6cf97c1 348 taskFE->SetMaxMult(multmax);
349 }
7a01f4a7 350 taskFE->SetSubeventEtaRange(minA, maxA, minB, maxB);
f6cf97c1 351 if (UsePhysicsSelection) {
352 taskFE->SelectCollisionCandidates();
353 cout<<"Using Physics Selection"<<endl;
354 }
93329510 355 mgr->AddTask(taskFE);
356 }
357 else {
f6cf97c1 358 if(AddToEvent) {
44e060e0 359 taskFE = new AliAnalysisTaskFlowEvent("TaskFlowEvent",rptype,kFALSE,1);
f6cf97c1 360 taskFE->SetEllipticFlowValue(ellipticFlow); } //TEST
44e060e0 361 else {taskFE = new AliAnalysisTaskFlowEvent("TaskFlowEvent",rptype,kFALSE); }
93329510 362 taskFE->SetAnalysisType(type);
c0ed6325 363 if (UseMultCut) {
364 taskFE->SetMinMult(multmin);
f6cf97c1 365 taskFE->SetMaxMult(multmax);
366 }
367 taskFE->SetSubeventEtaRange(minA, maxA, minB, maxB);
368 if (UsePhysicsSelection) {
369 taskFE->SelectCollisionCandidates();
370 cout<<"Using Physics Selection"<<endl;
371 }
93329510 372 mgr->AddTask(taskFE);
373 }
374
375 // Create cuts using the correction framework (CORRFW)
376 //===========================================================================
377 if (QA){
378 //Set TList for the QA histograms
379 TList* qaRP = new TList();
380 TList* qaPOI = new TList();
381 }
382
c0ed6325 383 //----------Event cuts----------
94cd9888 384 AliCFEventGenCuts* mcEventCuts = new AliCFEventGenCuts("mcEventCuts","MC-level event cuts");
f01e9bfe 385 mcEventCuts->SetNTracksCut(multminESD,multmaxESD);
40ca990b 386 mcEventCuts->SetRequireVtxCuts(requireVtxCuts);
387 mcEventCuts->SetVertexXCut(vertexXmin, vertexXmax);
388 mcEventCuts->SetVertexYCut(vertexYmin, vertexYmax);
389 mcEventCuts->SetVertexZCut(vertexZmin, vertexZmax);
94cd9888 390 if (QA) {
391 mcEventCuts->SetQAOn(qaRP);
392 }
393 AliCFEventRecCuts* recEventCuts = new AliCFEventRecCuts("recEventCuts","rec-level event cuts");
f01e9bfe 394 recEventCuts->SetNTracksCut(multminESD,multmaxESD);
40ca990b 395 recEventCuts->SetRequireVtxCuts(requireVtxCuts);
396 recEventCuts->SetVertexXCut(vertexXmin, vertexXmax);
397 recEventCuts->SetVertexYCut(vertexYmin, vertexYmax);
398 recEventCuts->SetVertexZCut(vertexZmin, vertexZmax);
21f8d9b1 399 recEventCuts->SetVertexNContributors(vertexNContributorsmin,vertexNContributorsmax);
94cd9888 400 if (QA) {
401 recEventCuts->SetQAOn(qaRP);
402 }
c0ed6325 403
404 //----------Cuts for RP----------
405 //KINEMATICS (MC and reconstructed)
406 AliCFTrackKineCuts* mcKineCutsRP = new AliCFTrackKineCuts("mcKineCutsRP","MC-level kinematic cuts");
407 mcKineCutsRP->SetPtRange(ptminRP,ptmaxRP);
408 mcKineCutsRP->SetEtaRange(etaminRP,etamaxRP);
409 //mcKineCutsRP->SetChargeMC(chargeRP);
21f8d9b1 410 mcKineCutsRP->SetRequireIsCharged(isChargedRP);
93329510 411 if (QA) {
c0ed6325 412 mcKineCutsRP->SetQAOn(qaRP);
93329510 413 }
414
c0ed6325 415 AliCFTrackKineCuts *recKineCutsRP = new AliCFTrackKineCuts("recKineCutsRP","rec-level kine cuts");
416 recKineCutsRP->SetPtRange(ptminRP,ptmaxRP);
417 recKineCutsRP->SetEtaRange(etaminRP,etamaxRP);
418 //recKineCutsRP->SetChargeRec(chargeRP);
21f8d9b1 419 recKineCutsRP->SetRequireIsCharged(isChargedRP);
93329510 420 if (QA) {
c0ed6325 421 recKineCutsRP->SetQAOn(qaRP);
93329510 422 }
c0ed6325 423
424 //PID (MC and reconstructed)
425 AliCFParticleGenCuts* mcGenCutsRP = new AliCFParticleGenCuts("mcGenCutsRP","MC particle generation cuts for RP");
426 mcGenCutsRP->SetRequireIsPrimary();
427 if (UsePIDforRP) {mcGenCutsRP->SetRequirePdgCode(PdgRP);}
93329510 428 if (QA) {
c0ed6325 429 mcGenCutsRP->SetQAOn(qaRP);
93329510 430 }
431
c0ed6325 432 int n_species = AliPID::kSPECIES ;
433 Double_t* prior = new Double_t[n_species];
434
435 prior[0] = 0.0244519 ;
436 prior[1] = 0.0143988 ;
437 prior[2] = 0.805747 ;
438 prior[3] = 0.0928785 ;
439 prior[4] = 0.0625243 ;
440
441 AliCFTrackCutPid* cutPidRP = NULL;
442 if(UsePIDforRP) {
443 cutPidRP = new AliCFTrackCutPid("cutPidRP","ESD_PID for RP") ;
444 cutPidRP->SetPriors(prior);
445 cutPidRP->SetProbabilityCut(0.0);
446 cutPidRP->SetDetectors("TPC TOF");
447 switch(TMath::Abs(PDG1)) {
448 case 11 : cutPidRP->SetParticleType(AliPID::kElectron, kTRUE); break;
449 case 13 : cutPidRP->SetParticleType(AliPID::kMuon , kTRUE); break;
450 case 211 : cutPidRP->SetParticleType(AliPID::kPion , kTRUE); break;
451 case 321 : cutPidRP->SetParticleType(AliPID::kKaon , kTRUE); break;
452 case 2212 : cutPidRP->SetParticleType(AliPID::kProton , kTRUE); break;
453 default : printf("UNDEFINED PID\n"); break;
454 }
455 if (QA) {
456 cutPidRP->SetQAOn(qaRP);
457 }
93329510 458 }
459
c0ed6325 460 //TRACK QUALITY
461 AliCFTrackQualityCuts *recQualityCutsRP = new AliCFTrackQualityCuts("recQualityCutsRP","rec-level quality cuts");
462 recQualityCutsRP->SetMinNClusterTPC(minClustersTpcRP);
463 //recQualityCutsRP->SetMinFoundClusterTPC(minFoundClustersTpcRP); //only for internal TPC QA
464 recQualityCutsRP->SetMaxChi2PerClusterTPC(maxChi2PerClusterTpcRP);
465 recQualityCutsRP->SetMinNdEdxClusterTPC(minDedxClusterTpcRP); //to reject secondaries
466
467 recQualityCutsRP->SetMinNClusterITS(minClustersItsRP);
468 recQualityCutsRP->SetMaxChi2PerClusterITS(maxChi2PerClusterItsRP);
469
470 recQualityCutsRP->SetMinNClusterTRD(minClustersTrdRP);
471 recQualityCutsRP->SetMinNTrackletTRD(minTrackletTrdRP);
472 recQualityCutsRP->SetMinNTrackletTRDpid(minTrackletTrdPidRP);
473 recQualityCutsRP->SetMaxChi2PerTrackletTRD(maxChi2PerClusterTrdRP);
474 recQualityCutsRP->SetStatus(statusRP);
93329510 475 if (QA) {
c0ed6325 476 recQualityCutsRP->SetQAOn(qaRP);
93329510 477 }
c0ed6325 478
479 /*
480 //How to set this?
481 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)
482 {fCovariance11Max=c1;fCovariance22Max=c2;fCovariance33Max=c3;fCovariance44Max=c4;fCovariance55Max=c5;}
483 */
484
485 //PRIMARIES
486 AliCFTrackIsPrimaryCuts *recIsPrimaryCutsRP = new AliCFTrackIsPrimaryCuts("recIsPrimaryCutsRP","rec-level isPrimary cuts");
487 recIsPrimaryCutsRP->UseSPDvertex(spdVertexRP);
488 recIsPrimaryCutsRP->UseTPCvertex(tpcVertexRP);
489 recIsPrimaryCutsRP->SetMinDCAToVertexXY(minDcaToVertexXyRP);
490 recIsPrimaryCutsRP->SetMinDCAToVertexZ(minDcaToVertexZRP);
491 recIsPrimaryCutsRP->SetMaxDCAToVertexXY(maxDcaToVertexXyRP);
492 recIsPrimaryCutsRP->SetMaxDCAToVertexZ(maxDcaToVertexZRP);
493 recIsPrimaryCutsRP->SetDCAToVertex2D(dcaToVertex2dRP);
494 recIsPrimaryCutsRP->SetAbsDCAToVertex(absDcaToVertexRP);
495 recIsPrimaryCutsRP->SetMinNSigmaToVertex(minNSigmaToVertexRP);
496 recIsPrimaryCutsRP->SetMaxNSigmaToVertex(maxNSigmaToVertexRP);
497 recIsPrimaryCutsRP->SetMaxSigmaDCAxy(maxSigmaDcaXySP);
498 recIsPrimaryCutsRP->SetMaxSigmaDCAz(maxSigmaDcaZSP);
499 recIsPrimaryCutsRP->SetRequireSigmaToVertex(requireSigmaToVertexSP);
500 recIsPrimaryCutsRP->SetAcceptKinkDaughters(acceptKinkDaughtersSP);
93329510 501 if (QA) {
c0ed6325 502 recIsPrimaryCutsRP->SetQAOn(qaRP);
93329510 503 }
504
c0ed6325 505 //ACCEPTANCE
506 AliCFAcceptanceCuts *mcAccCutsRP = new AliCFAcceptanceCuts("mcAccCutsRP","MC acceptance cuts");
507 mcAccCutsRP->SetMinNHitITS(minTrackrefsItsRP);
508 mcAccCutsRP->SetMinNHitTPC(minTrackrefsTpcRP);
509 mcAccCutsRP->SetMinNHitTRD(minTrackrefsTrdRP);
510 mcAccCutsRP->SetMinNHitTOF(minTrackrefsTofRP);
511 mcAccCutsRP->SetMinNHitMUON(minTrackrefsMuonRP);
93329510 512 if (QA) {
c0ed6325 513 mcAccCutsRP->SetQAOn(qaRP);
93329510 514 }
c0ed6325 515
93329510 516
c0ed6325 517 //----------Cuts for POI----------
518 //KINEMATICS (MC and reconstructed)
519 AliCFTrackKineCuts* mcKineCutsPOI = new AliCFTrackKineCuts("mcKineCutsPOI","MC-level kinematic cuts");
520 mcKineCutsPOI->SetPtRange(ptminPOI,ptmaxPOI);
521 mcKineCutsPOI->SetEtaRange(etaminPOI,etamaxPOI);
522 //mcKineCutsPOI->SetChargeMC(chargePOI);
21f8d9b1 523 mcKineCutsPOI->SetRequireIsCharged(isChargedPOI);
93329510 524 if (QA) {
c0ed6325 525 mcKineCutsPOI->SetQAOn(qaPOI);
93329510 526 }
527
c0ed6325 528 AliCFTrackKineCuts *recKineCutsPOI = new AliCFTrackKineCuts("recKineCutsPOI","rec-level kine cuts");
529 recKineCutsPOI->SetPtRange(ptminPOI,ptmaxPOI);
530 recKineCutsPOI->SetEtaRange(etaminPOI,etamaxPOI);
531 //recKineCutsPOI->SetChargeRec(chargePOI);
21f8d9b1 532 recKineCutsPOI->SetRequireIsCharged(isChargedPOI);
93329510 533 if (QA) {
c0ed6325 534 recKineCutsPOI->SetQAOn(qaPOI);
93329510 535 }
536
c0ed6325 537 //PID (MC and reconstructed)
538 AliCFParticleGenCuts* mcGenCutsPOI = new AliCFParticleGenCuts("mcGenCutsPOI","MC particle generation cuts for POI");
539 mcGenCutsPOI->SetRequireIsPrimary();
540 if (UsePIDforPOI) {mcGenCutsPOI->SetRequirePdgCode(PdgPOI);}
93329510 541 if (QA) {
c0ed6325 542 mcGenCutsPOI->SetQAOn(qaPOI);
93329510 543 }
c0ed6325 544
545 AliCFTrackCutPid* cutPidPOI = NULL;
93329510 546 if (UsePIDforPOI) {
c0ed6325 547 cutPidPOI = new AliCFTrackCutPid("cutPidPOI","ESD_PID for POI") ;
548 cutPidPOI->SetPriors(prior);
549 cutPidPOI->SetProbabilityCut(0.0);
550 cutPidPOI->SetDetectors("TPC TOF");
93329510 551 switch(TMath::Abs(PDG2)) {
c0ed6325 552 case 11 : cutPidPOI->SetParticleType(AliPID::kElectron, kTRUE); break;
553 case 13 : cutPidPOI->SetParticleType(AliPID::kMuon , kTRUE); break;
554 case 211 : cutPidPOI->SetParticleType(AliPID::kPion , kTRUE); break;
555 case 321 : cutPidPOI->SetParticleType(AliPID::kKaon , kTRUE); break;
556 case 2212 : cutPidPOI->SetParticleType(AliPID::kProton , kTRUE); break;
93329510 557 default : printf("UNDEFINED PID\n"); break;
558 }
559 if (QA) {
c0ed6325 560 cutPidPOI->SetQAOn(qaPOI);
93329510 561 }
562 }
c0ed6325 563
564 //TRACK QUALITY
565 AliCFTrackQualityCuts *recQualityCutsPOI = new AliCFTrackQualityCuts("recQualityCutsPOI","rec-level quality cuts");
566 recQualityCutsPOI->SetMinNClusterTPC(minClustersTpcPOI);
567 //recQualityCutsPOI->SetMinFoundClusterTPC(minFoundClustersTpcPOI); //only for internal TPC QA
568 recQualityCutsPOI->SetMaxChi2PerClusterTPC(maxChi2PerClusterTpcPOI);
569 recQualityCutsPOI->SetMinNdEdxClusterTPC(minDedxClusterTpcPOI); //to reject secondaries
570
571 recQualityCutsPOI->SetMinNClusterITS(minClustersItsPOI);
572 recQualityCutsPOI->SetMaxChi2PerClusterITS(maxChi2PerClusterItsPOI);
573
574 recQualityCutsPOI->SetMinNClusterTRD(minClustersTrdPOI);
575 recQualityCutsPOI->SetMinNTrackletTRD(minTrackletTrdPOI);
576 recQualityCutsPOI->SetMinNTrackletTRDpid(minTrackletTrdPidPOI);
577 recQualityCutsPOI->SetMaxChi2PerTrackletTRD(maxChi2PerClusterTrdPOI);
578 recQualityCutsPOI->SetStatus(statusPOI);
579 if (QA) {
580 recQualityCutsPOI->SetQAOn(qaPOI);
581 }
582
583 //PRIMARIES
584 AliCFTrackIsPrimaryCuts *recIsPrimaryCutsPOI = new AliCFTrackIsPrimaryCuts("recIsPrimaryCutsPOI","rec-level isPrimary cuts");
585 recIsPrimaryCutsPOI->UseSPDvertex(spdVertexPOI);
586 recIsPrimaryCutsPOI->UseTPCvertex(tpcVertexPOI);
587 recIsPrimaryCutsPOI->SetMinDCAToVertexXY(minDcaToVertexXyPOI);
588 recIsPrimaryCutsPOI->SetMinDCAToVertexZ(minDcaToVertexZPOI);
589 recIsPrimaryCutsPOI->SetMaxDCAToVertexXY(maxDcaToVertexXyPOI);
590 recIsPrimaryCutsPOI->SetMaxDCAToVertexZ(maxDcaToVertexZPOI);
591 recIsPrimaryCutsPOI->SetDCAToVertex2D(dcaToVertex2dPOI);
592 recIsPrimaryCutsPOI->SetAbsDCAToVertex(absDcaToVertexPOI);
593 recIsPrimaryCutsPOI->SetMinNSigmaToVertex(minNSigmaToVertexPOI);
594 recIsPrimaryCutsPOI->SetMaxNSigmaToVertex(maxNSigmaToVertexPOI);
595 recIsPrimaryCutsPOI->SetMaxSigmaDCAxy(maxSigmaDcaXyPOI);
596 recIsPrimaryCutsPOI->SetMaxSigmaDCAz(maxSigmaDcaZPOI);
597 recIsPrimaryCutsPOI->SetRequireSigmaToVertex(requireSigmaToVertexPOI);
598 recIsPrimaryCutsPOI->SetAcceptKinkDaughters(acceptKinkDaughtersPOI);
599 if (QA) {
600 recIsPrimaryCutsPOI->SetQAOn(qaPOI);
601 }
602
603 //ACCEPTANCE
604 AliCFAcceptanceCuts *mcAccCutsPOI = new AliCFAcceptanceCuts("mcAccCutsPOI","MC acceptance cuts");
605 mcAccCutsPOI->SetMinNHitITS(minTrackrefsItsPOI);
606 mcAccCutsPOI->SetMinNHitTPC(minTrackrefsTpcPOI);
607 mcAccCutsPOI->SetMinNHitTRD(minTrackrefsTrdPOI);
608 mcAccCutsPOI->SetMinNHitTOF(minTrackrefsTofPOI);
609 mcAccCutsPOI->SetMinNHitMUON(minTrackrefsMuonPOI);
610 if (QA) {
611 mcAccCutsPOI->SetQAOn(qaPOI);
612 }
613
614
93329510 615
c0ed6325 616 //----------Create Cut Lists----------
94cd9888 617 printf("CREATE EVENT CUTS\n");
c0ed6325 618 TObjArray* mcEventList = new TObjArray(0);
40ca990b 619 if (UseMultCutforESD) mcEventList->AddLast(mcEventCuts);//cut on mult and vertex
94cd9888 620
621 TObjArray* recEventList = new TObjArray(0);
40ca990b 622 if (UseMultCutforESD) recEventList->AddLast(recEventCuts);//cut on mult and vertex
94cd9888 623
93329510 624 printf("CREATE MC KINE CUTS\n");
c0ed6325 625 TObjArray* mcListRP = new TObjArray(0);
626 if (UseKineforRP) mcListRP->AddLast(mcKineCutsRP); //cut on pt/eta/phi
627 mcListRP->AddLast(mcGenCutsRP); //cut on primary and if (UsePIDforRP) MC PID
93329510 628
c0ed6325 629 TObjArray* mcListPOI = new TObjArray(0);
630 if (UseKineforPOI) mcListPOI->AddLast(mcKineCutsPOI); //cut on pt/eta/phi
631 mcListPOI->AddLast(mcGenCutsPOI); //cut on primary and if (UsePIDforPOI) MC PID
93329510 632
c0ed6325 633 printf("CREATE MC ACCEPTANCE CUTS\n");
634 TObjArray* accListRP = new TObjArray(0) ;
635 if (UseAcceptanceforRP) accListRP->AddLast(mcAccCutsRP); //cut on number of track references
93329510 636
c0ed6325 637 TObjArray* accListPOI = new TObjArray(0) ;
638 if (UseAcceptanceforPOI) accListPOI->AddLast(mcAccCutsPOI); //cut on number of track references
93329510 639
c0ed6325 640 printf("CREATE ESD RECONSTRUCTION CUTS\n");
641 TObjArray* recListRP = new TObjArray(0) ;
21f8d9b1 642 if (UseTrackQualityforRP) recListRP->AddLast(recQualityCutsRP); //track quality
c0ed6325 643 if (UsePrimariesforRP) recListRP->AddLast(recIsPrimaryCutsRP); //cut if it is a primary
21f8d9b1 644 if (UseKineforRP) recListRP->AddLast(recKineCutsRP); //cut on pt/eta/phi
645
c0ed6325 646 TObjArray* recListPOI = new TObjArray(0) ;
21f8d9b1 647 if (UseTrackQualityforPOI) recListPOI->AddLast(recQualityCutsPOI); //track quality
c0ed6325 648 if (UsePrimariesforPOI) recListPOI->AddLast(recIsPrimaryCutsPOI); //cut if it is a primary
21f8d9b1 649 if (UseKineforPOI) recListPOI->AddLast(recKineCutsPOI); //cut on pt/eta/phi
650
c0ed6325 651 printf("CREATE ESD PID CUTS\n");
652 TObjArray* fPIDCutListRP = new TObjArray(0) ;
653 if(UsePIDforRP) {fPIDCutListRP->AddLast(cutPidRP);} //cut on ESD PID
93329510 654
c0ed6325 655 TObjArray* fPIDCutListPOI = new TObjArray(0) ;
656 if (UsePIDforPOI) {fPIDCutListPOI->AddLast(cutPidPOI);} //cut on ESD PID
93329510 657
c0ed6325 658
659 //----------Add Cut Lists to the CF Manager----------
93329510 660 printf("CREATE INTERFACE AND CUTS\n");
c0ed6325 661 AliCFManager* cfmgrRP = new AliCFManager();
662 cfmgrRP->SetNStepEvent(3);
663 cfmgrRP->SetEventCutsList(AliCFManager::kEvtGenCuts,mcEventList);
664 cfmgrRP->SetEventCutsList(AliCFManager::kEvtRecCuts,recEventList);
665 cfmgrRP->SetNStepParticle(4);
666 cfmgrRP->SetParticleCutsList(AliCFManager::kPartGenCuts,mcListRP);
667 cfmgrRP->SetParticleCutsList(AliCFManager::kPartAccCuts,accListRP);
668 cfmgrRP->SetParticleCutsList(AliCFManager::kPartRecCuts,recListRP);
669 cfmgrRP->SetParticleCutsList(AliCFManager::kPartSelCuts,fPIDCutListRP);
93329510 670
c0ed6325 671 AliCFManager* cfmgrPOI = new AliCFManager();
672 cfmgrPOI->SetNStepEvent(3);
673 cfmgrPOI->SetEventCutsList(AliCFManager::kEvtGenCuts,mcEventList);
674 cfmgrPOI->SetEventCutsList(AliCFManager::kEvtRecCuts,recEventList);
675 cfmgrPOI->SetNStepParticle(4);
676 cfmgrPOI->SetParticleCutsList(AliCFManager::kPartGenCuts,mcListPOI);
677 cfmgrPOI->SetParticleCutsList(AliCFManager::kPartAccCuts,accListPOI);
678 cfmgrPOI->SetParticleCutsList(AliCFManager::kPartRecCuts,recListPOI);
679 cfmgrPOI->SetParticleCutsList(AliCFManager::kPartSelCuts,fPIDCutListPOI);
93329510 680
681 if (QA) {
682 taskFE->SetQAList1(qaRP);
683 taskFE->SetQAList2(qaPOI);
684 }
c0ed6325 685 taskFE->SetCFManager1(cfmgrRP);
686 taskFE->SetCFManager2(cfmgrPOI);
93329510 687
688
689
690 // Create the analysis tasks, add them to the manager.
691 //===========================================================================
692 if (SP){
29195b69 693 AliAnalysisTaskScalarProduct *taskSP = new AliAnalysisTaskScalarProduct("TaskScalarProduct",WEIGHTS[0]);
a02a1889 694 taskSP->SetRelDiffMsub(1.0);
3c5d5752 695 taskSP->SetApplyCorrectionForNUA(kFALSE);
93329510 696 mgr->AddTask(taskSP);
697 }
c741f5d0 698 if (LYZ1SUM){
699 AliAnalysisTaskLeeYangZeros *taskLYZ1SUM = new AliAnalysisTaskLeeYangZeros("TaskLeeYangZerosSUM",kTRUE);
700 taskLYZ1SUM->SetFirstRunLYZ(kTRUE);
701 taskLYZ1SUM->SetUseSumLYZ(kTRUE);
702 mgr->AddTask(taskLYZ1SUM);
703 }
704 if (LYZ1PROD){
705 AliAnalysisTaskLeeYangZeros *taskLYZ1PROD = new AliAnalysisTaskLeeYangZeros("TaskLeeYangZerosPROD",kTRUE);
706 taskLYZ1PROD->SetFirstRunLYZ(kTRUE);
707 taskLYZ1PROD->SetUseSumLYZ(kFALSE);
708 mgr->AddTask(taskLYZ1PROD);
709 }
710 if (LYZ2SUM){
711 AliAnalysisTaskLeeYangZeros *taskLYZ2SUM = new AliAnalysisTaskLeeYangZeros("TaskLeeYangZerosSUM",kFALSE);
712 taskLYZ2SUM->SetFirstRunLYZ(kFALSE);
713 taskLYZ2SUM->SetUseSumLYZ(kTRUE);
714 mgr->AddTask(taskLYZ2SUM);
715 }
716 if (LYZ2PROD){
717 AliAnalysisTaskLeeYangZeros *taskLYZ2PROD = new AliAnalysisTaskLeeYangZeros("TaskLeeYangZerosPROD",kFALSE);
718 taskLYZ2PROD->SetFirstRunLYZ(kFALSE);
719 taskLYZ2PROD->SetUseSumLYZ(kFALSE);
720 mgr->AddTask(taskLYZ2PROD);
93329510 721 }
722 if (LYZEP){
723 AliAnalysisTaskLYZEventPlane *taskLYZEP = new AliAnalysisTaskLYZEventPlane("TaskLYZEventPlane");
724 mgr->AddTask(taskLYZEP);
725 }
726 if (GFC){
727 AliAnalysisTaskCumulants *taskGFC = new AliAnalysisTaskCumulants("TaskCumulants",useWeights);
728 taskGFC->SetUsePhiWeights(WEIGHTS[0]);
729 taskGFC->SetUsePtWeights(WEIGHTS[1]);
730 taskGFC->SetUseEtaWeights(WEIGHTS[2]);
731 mgr->AddTask(taskGFC);
732 }
733 if (QC){
734 AliAnalysisTaskQCumulants *taskQC = new AliAnalysisTaskQCumulants("TaskQCumulants",useWeights);
735 taskQC->SetUsePhiWeights(WEIGHTS[0]);
736 taskQC->SetUsePtWeights(WEIGHTS[1]);
737 taskQC->SetUseEtaWeights(WEIGHTS[2]);
067e9bc8 738 taskQC->SetnBinsMult(10000);
739 taskQC->SetMinMult(0.);
740 taskQC->SetMaxMult(10000.);
93329510 741 mgr->AddTask(taskQC);
742 }
743 if (FQD){
744 AliAnalysisTaskFittingQDistribution *taskFQD = new AliAnalysisTaskFittingQDistribution("TaskFittingQDistribution",kFALSE);
745 taskFQD->SetUsePhiWeights(WEIGHTS[0]);
f0e0fbcd 746 taskFQD->SetqMin(0.);
747 taskFQD->SetqMax(1000.);
748 taskFQD->SetqNbins(10000);
93329510 749 mgr->AddTask(taskFQD);
750 }
751 if (MCEP){
752 AliAnalysisTaskMCEventPlane *taskMCEP = new AliAnalysisTaskMCEventPlane("TaskMCEventPlane");
753 mgr->AddTask(taskMCEP);
754 }
67a6b178 755 if (MH){
756 AliAnalysisTaskMixedHarmonics *taskMH = new AliAnalysisTaskMixedHarmonics("TaskMixedHarmonics",useWeights);
757 taskMH->SetCorrelatorInteger(1);
758 taskMH->SetNoOfMultipicityBins(10);
759 taskMH->SetMultipicityBinWidth(2);
760 taskMH->SetMinMultiplicity(3);
761 taskMH->SetCorrectForDetectorEffects(kTRUE);
762 //taskMH->SetUsePhiWeights(WEIGHTS[0]);
763 //taskMH->SetUsePtWeights(WEIGHTS[1]);
764 //taskMH->SetUseEtaWeights(WEIGHTS[2]);
765 mgr->AddTask(taskMH);
766 }
767 if (NL){
768 AliAnalysisTaskNestedLoops *taskNL = new AliAnalysisTaskNestedLoops("TaskNestedLoops",useWeights);
769 //taskNL->SetUsePhiWeights(WEIGHTS[0]);
770 //taskNL->SetUsePtWeights(WEIGHTS[1]);
771 //taskNL->SetUseEtaWeights(WEIGHTS[2]);
772 mgr->AddTask(taskNL);
773 }
774
93329510 775 // Create the output container for the data produced by the task
776 // Connect to the input and output containers
777 //===========================================================================
778 AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
44e060e0 779
780 if (rptype == "FMD") {
781 AliAnalysisDataContainer *coutputFMD =
782 mgr->CreateContainer("BackgroundCorrected", TList::Class(), AliAnalysisManager::kExchangeContainer);
783 //input and output taskFMD
784 mgr->ConnectInput(taskfmd, 0, cinput1);
785 mgr->ConnectOutput(taskfmd, 1, coutputFMD);
786 //input into taskFE
787 mgr->ConnectInput(taskFE,1,coutputFMD);
788 }
a02a1889 789
44e060e0 790 AliAnalysisDataContainer *coutputFE =
791 mgr->CreateContainer("cobjFlowEventSimple", AliFlowEventSimple::Class(),AliAnalysisManager::kExchangeContainer);
93329510 792 mgr->ConnectInput(taskFE,0,cinput1);
f6cf97c1 793 mgr->ConnectOutput(taskFE,1,coutputFE);
93329510 794
795 if (QA) {
47d5b28f 796 TString qaNameRPFE = AliAnalysisManager::GetCommonFileName();
797 qaNameRPFE += ":QAforRP_FE_";
93329510 798 qaNameRPFE += type;
47d5b28f 799
800 AliAnalysisDataContainer *coutputQA1FE =
801 mgr->CreateContainer("QARPFE", TList::Class(),AliAnalysisManager::kOutputContainer,qaNameRPFE);
93329510 802
47d5b28f 803 TString qaNamePOIFE = AliAnalysisManager::GetCommonFileName();
804 qaNamePOIFE += ":QAforPOI_FE_";
93329510 805 qaNamePOIFE += type;
47d5b28f 806
807 AliAnalysisDataContainer *coutputQA2FE =
808 mgr->CreateContainer("QAPOIFE", TList::Class(),AliAnalysisManager::kOutputContainer,qaNamePOIFE);
809
f6cf97c1 810 mgr->ConnectOutput(taskFE,2,coutputQA1FE);
811 mgr->ConnectOutput(taskFE,3,coutputQA2FE);
93329510 812 }
813
814 // Create the output containers for the data produced by the analysis tasks
815 // Connect to the input and output containers
816 //===========================================================================
817 if (useWeights) {
818 AliAnalysisDataContainer *cinputWeights = mgr->CreateContainer("cobjWeights",TList::Class(),AliAnalysisManager::kInputContainer);
819 }
820
821 if(SP) {
47d5b28f 822 TString outputSP = AliAnalysisManager::GetCommonFileName();
823 outputSP += ":outputSPanalysis";
93329510 824 outputSP+= type;
47d5b28f 825
826 AliAnalysisDataContainer *coutputSP = mgr->CreateContainer("cobjSP", TList::Class(),AliAnalysisManager::kOutputContainer,outputSP);
93329510 827 mgr->ConnectInput(taskSP,0,coutputFE);
ea456d37 828 mgr->ConnectOutput(taskSP,1,coutputSP);
29195b69 829 if (WEIGHTS[0]) {
830 mgr->ConnectInput(taskSP,1,cinputWeights);
831 cinputWeights->SetData(weightsList);
832 }
93329510 833 }
c741f5d0 834 if(LYZ1SUM) {
47d5b28f 835 TString outputLYZ1SUM = AliAnalysisManager::GetCommonFileName();
836 outputLYZ1SUM += ":outputLYZ1SUManalysis";
c741f5d0 837 outputLYZ1SUM+= type;
47d5b28f 838
839 AliAnalysisDataContainer *coutputLYZ1SUM = mgr->CreateContainer("cobjLYZ1SUM", TList::Class(),AliAnalysisManager::kOutputContainer,outputLYZ1SUM);
c741f5d0 840 mgr->ConnectInput(taskLYZ1SUM,0,coutputFE);
22063257 841 mgr->ConnectOutput(taskLYZ1SUM,1,coutputLYZ1SUM);
c741f5d0 842 }
843 if(LYZ1PROD) {
47d5b28f 844 TString outputLYZ1PROD = AliAnalysisManager::GetCommonFileName();
845 outputLYZ1PROD += ":outputLYZ1PRODanalysis";
c741f5d0 846 outputLYZ1PROD+= type;
47d5b28f 847
848 AliAnalysisDataContainer *coutputLYZ1PROD = mgr->CreateContainer("cobjLYZ1PROD", TList::Class(),AliAnalysisManager::kOutputContainer,outputLYZ1PROD);
c741f5d0 849 mgr->ConnectInput(taskLYZ1PROD,0,coutputFE);
22063257 850 mgr->ConnectOutput(taskLYZ1PROD,1,coutputLYZ1PROD);
c741f5d0 851 }
852 if(LYZ2SUM) {
853 AliAnalysisDataContainer *cinputLYZ2SUM = mgr->CreateContainer("cobjLYZ2SUMin",TList::Class(),AliAnalysisManager::kInputContainer);
47d5b28f 854 TString outputLYZ2SUM = AliAnalysisManager::GetCommonFileName();
855 outputLYZ2SUM += ":outputLYZ2SUManalysis";
c741f5d0 856 outputLYZ2SUM+= type;
47d5b28f 857
858 AliAnalysisDataContainer *coutputLYZ2SUM = mgr->CreateContainer("cobjLYZ2SUM", TList::Class(),AliAnalysisManager::kOutputContainer,outputLYZ2SUM);
c741f5d0 859 mgr->ConnectInput(taskLYZ2SUM,0,coutputFE);
860 mgr->ConnectInput(taskLYZ2SUM,1,cinputLYZ2SUM);
22063257 861 mgr->ConnectOutput(taskLYZ2SUM,1,coutputLYZ2SUM);
c741f5d0 862 cinputLYZ2SUM->SetData(fInputListLYZ2SUM);
863 }
864 if(LYZ2PROD) {
865 AliAnalysisDataContainer *cinputLYZ2PROD = mgr->CreateContainer("cobjLYZ2PRODin",TList::Class(),AliAnalysisManager::kInputContainer);
47d5b28f 866 TString outputLYZ2PROD = AliAnalysisManager::GetCommonFileName();
867 outputLYZ2PROD += ":outputLYZ2PRODanalysis";
c741f5d0 868 outputLYZ2PROD+= type;
47d5b28f 869
870 AliAnalysisDataContainer *coutputLYZ2PROD = mgr->CreateContainer("cobjLYZ2PROD", TList::Class(),AliAnalysisManager::kOutputContainer,outputLYZ2PROD);
c741f5d0 871 mgr->ConnectInput(taskLYZ2PROD,0,coutputFE);
872 mgr->ConnectInput(taskLYZ2PROD,1,cinputLYZ2PROD);
22063257 873 mgr->ConnectOutput(taskLYZ2PROD,1,coutputLYZ2PROD);
c741f5d0 874 cinputLYZ2PROD->SetData(fInputListLYZ2PROD);
93329510 875 }
876 if(LYZEP) {
877 AliAnalysisDataContainer *cinputLYZEP = mgr->CreateContainer("cobjLYZEPin",TList::Class(),AliAnalysisManager::kInputContainer);
47d5b28f 878 TString outputLYZEP = AliAnalysisManager::GetCommonFileName();
879 outputLYZEP += ":outputLYZEPanalysis";
93329510 880 outputLYZEP+= type;
47d5b28f 881
882 AliAnalysisDataContainer *coutputLYZEP = mgr->CreateContainer("cobjLYZEP", TList::Class(),AliAnalysisManager::kOutputContainer,outputLYZEP);
93329510 883 mgr->ConnectInput(taskLYZEP,0,coutputFE);
884 mgr->ConnectInput(taskLYZEP,1,cinputLYZEP);
22063257 885 mgr->ConnectOutput(taskLYZEP,1,coutputLYZEP);
93329510 886 cinputLYZEP->SetData(fInputListLYZEP);
887 }
888 if(GFC) {
47d5b28f 889 TString outputGFC = AliAnalysisManager::GetCommonFileName();
890 outputGFC += ":outputGFCanalysis";
93329510 891 outputGFC+= type;
47d5b28f 892
893 AliAnalysisDataContainer *coutputGFC = mgr->CreateContainer("cobjGFC", TList::Class(),AliAnalysisManager::kOutputContainer,outputGFC);
93329510 894 mgr->ConnectInput(taskGFC,0,coutputFE);
2ed70edf 895 mgr->ConnectOutput(taskGFC,1,coutputGFC);
93329510 896 if (useWeights) {
897 mgr->ConnectInput(taskGFC,1,cinputWeights);
898 cinputWeights->SetData(weightsList);
899 }
900 }
901 if(QC) {
47d5b28f 902 TString outputQC = AliAnalysisManager::GetCommonFileName();
903 outputQC += ":outputQCanalysis";
93329510 904 outputQC+= type;
47d5b28f 905
906 AliAnalysisDataContainer *coutputQC = mgr->CreateContainer("cobjQC", TList::Class(),AliAnalysisManager::kOutputContainer,outputQC);
93329510 907 mgr->ConnectInput(taskQC,0,coutputFE);
2ed70edf 908 mgr->ConnectOutput(taskQC,1,coutputQC);
93329510 909 if (useWeights) {
910 mgr->ConnectInput(taskQC,1,cinputWeights);
911 cinputWeights->SetData(weightsList);
2ed70edf 912 }
93329510 913 }
914 if(FQD) {
47d5b28f 915 TString outputFQD = AliAnalysisManager::GetCommonFileName();
916 outputFQD += ":outputFQDanalysis";
93329510 917 outputFQD+= type;
47d5b28f 918
919 AliAnalysisDataContainer *coutputFQD = mgr->CreateContainer("cobjFQD", TList::Class(),AliAnalysisManager::kOutputContainer,outputFQD);
93329510 920 mgr->ConnectInput(taskFQD,0,coutputFE);
2ed70edf 921 mgr->ConnectOutput(taskFQD,1,coutputFQD);
93329510 922 if(useWeights) {
923 mgr->ConnectInput(taskFQD,1,cinputWeights);
924 cinputWeights->SetData(weightsList);
925 }
926 }
927 if(MCEP) {
47d5b28f 928 TString outputMCEP = AliAnalysisManager::GetCommonFileName();
929 outputMCEP += ":outputMCEPanalysis";
93329510 930 outputMCEP+= type;
47d5b28f 931
932 AliAnalysisDataContainer *coutputMCEP = mgr->CreateContainer("cobjMCEP", TList::Class(),AliAnalysisManager::kOutputContainer,outputMCEP);
93329510 933 mgr->ConnectInput(taskMCEP,0,coutputFE);
22063257 934 mgr->ConnectOutput(taskMCEP,1,coutputMCEP);
93329510 935 }
67a6b178 936 if(MH) {
937 TString outputMH = AliAnalysisManager::GetCommonFileName();
938 outputMH += ":outputMHanalysis";
939 outputMH += type;
940
941 AliAnalysisDataContainer *coutputMH = mgr->CreateContainer("cobjMH", TList::Class(),AliAnalysisManager::kOutputContainer,outputMH);
942 mgr->ConnectInput(taskMH,0,coutputFE);
943 mgr->ConnectOutput(taskMH,1,coutputMH);
944 //if (useWeights) {
945 // mgr->ConnectInput(taskMH,1,cinputWeights);
946 // cinputWeights->SetData(weightsList);
947 //}
948 }
949 if(NL) {
950 TString outputNL = AliAnalysisManager::GetCommonFileName();
951 outputNL += ":outputNLanalysis";
952 outputNL += type;
953
954 AliAnalysisDataContainer *coutputNL = mgr->CreateContainer("cobjNL", TList::Class(),AliAnalysisManager::kOutputContainer,outputNL);
955 mgr->ConnectInput(taskNL,0,coutputFE);
956 mgr->ConnectOutput(taskNL,1,coutputNL);
957 //if (useWeights) {
958 // mgr->ConnectInput(taskNL,1,cinputWeights);
959 // cinputWeights->SetData(weightsList);
960 //}
961 }
93329510 962
963 // Return analysis task
964 //===========================================================================
965 return taskFE;
966
967
968
969}
970
971
972
973
974