Commit for Simone
[u/mrichter/AliRoot.git] / PWGLF / STRANGENESS / LambdaK0PbPb / AddTaskV0ForRAA.C
1 AliAnalysisTaskV0ForRAA *AddTaskV0ForRAA(Bool_t anaPP=kFALSE, Int_t cent=0,Int_t centDet=1,Int_t centRange=0, Bool_t mcMode=kFALSE, Bool_t mcTruthMode=kFALSE,Bool_t onFly=kTRUE,Bool_t usePID=kFALSE,Double_t etaCut,Bool_t mcEtaCut,const Char_t * addname){
2    
3   
4   
5    //--- get the current analysis manager ---//
6    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
7    if (!mgr) {
8       Error("AddTask_V0ForRAA", "No analysis manager found.");
9       return 0;
10    }
11
12
13    // -- check for ESD and MC ---//
14    Bool_t hasESD=kFALSE,hasMC=kFALSE;
15    AliESDInputHandler *esdH = 
16       static_cast<AliESDInputHandler*>(mgr->GetInputEventHandler());
17    if (esdH) hasESD=kTRUE;
18    cout<<"ESD: "<<hasESD<<endl;
19    if(!hasESD) return NULL;
20
21    if(mcMode || mcTruthMode){
22       AliMCEventHandler *mcH = dynamic_cast<AliMCEventHandler*> 
23          (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
24       if (mcH) hasMC=kTRUE;
25       cout<<"MC: "<<hasMC<<endl;
26       if(!hasMC) return NULL;
27    }
28    
29   
30    //========= Add task to the ANALYSIS manager =====
31    TString cutsname = "AliESDtrackCutsV0ForRAA";
32    TString taskname = "V0ForRAA";
33    TString outname  = "V0ForRAA";
34
35    if(mcMode) {
36       cutsname +="_MCreco";
37       taskname +="_MCreco";
38       outname  +="_MCreco";
39    }
40    if(mcTruthMode){
41       cutsname +="_MCTruth";
42       taskname +="_MCTruth";
43       outname  +="_MCTruth";
44    }
45    if(anaPP) {
46       cutsname += "_pp";
47       taskname += "_pp";
48       outname  += "_pp";
49    }
50    else {
51       cutsname +="_cent";
52       cutsname += cent;
53
54       taskname +="_cent";
55       taskname += cent;
56
57       outname  +="_cent";
58       outname  += cent; 
59    }
60
61    cutsname += addname;
62    taskname += addname;
63    outname  += addname;
64    
65    
66    AliAnalysisTaskV0ForRAA *task = new AliAnalysisTaskV0ForRAA(taskname);
67
68    Double_t minPt=0.0;
69    
70    //--- esd track cuts V0 daughters ---//
71    // esd track cuts for pions high pt
72    AliESDtrackCuts* esdTrackCuts = new AliESDtrackCuts(cutsname);
73    esdTrackCuts->SetMaxChi2PerClusterTPC(4);
74    esdTrackCuts->SetMinNCrossedRowsTPC(70);
75    esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
76    esdTrackCuts->SetRequireTPCRefit(kTRUE);
77    esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
78
79    // esd track cuts for protons high pt
80    TString cutsnameCh = cutsname;
81    cutsnameCh +="_charged";
82    AliESDtrackCuts* esdTrackCutsCharged = new AliESDtrackCuts(cutsnameCh);
83    esdTrackCutsCharged->SetMaxChi2PerClusterTPC(4);
84    esdTrackCutsCharged->SetMinNCrossedRowsTPC(70);
85    esdTrackCutsCharged->SetAcceptKinkDaughters(kFALSE);
86    esdTrackCutsCharged->SetRequireTPCRefit(kTRUE);
87    esdTrackCutsCharged->SetRequireSigmaToVertex(kFALSE);
88
89    // esd track cuts for all low pt
90    TString cutsnameLowPt  = cutsname;
91    cutsnameLowPt +="_lowpt";
92    AliESDtrackCuts* esdTrackCutsLowPt = new AliESDtrackCuts(cutsnameLowPt);
93    esdTrackCutsLowPt->SetMaxChi2PerClusterTPC(4);
94    esdTrackCutsLowPt->SetMinNCrossedRowsTPC(70);
95    esdTrackCutsLowPt->SetAcceptKinkDaughters(kFALSE);
96    esdTrackCutsLowPt->SetRequireTPCRefit(kTRUE);
97    esdTrackCutsLowPt->SetRequireSigmaToVertex(kFALSE);
98
99    //Add cuts to task
100    task->SetESDTrackCutsCharged(esdTrackCutsCharged);
101    task->SetESDTrackCuts(esdTrackCuts);
102    task->SetESDTrackCutsLowPt(esdTrackCutsLowPt);
103
104    //--- analysis modes ---//
105    task->SetAnapp(anaPP);
106    task->SetMCMode(mcMode);
107    task->SetMCTruthMode(mcTruthMode);
108
109    //---------- cuts -------------//
110    //general cuts
111    task->SetUseOnthefly(onFly);
112    task->SetUsePID(usePID,3.0,100.0);
113    task->SetPrimVertexZCut(10.0,kTRUE);
114  
115    //rapidity
116    task->SetRapidityCutMother(kTRUE,0.5);
117    task->SetDoEtaOfMCDaughtersCut(mcEtaCut,etaCut);
118    
119    //TPC cuts
120    task->SetCutMoreNclsThanRows(kTRUE);
121    task->SetCutMoreNclsThanFindable(kTRUE);
122    task->SetLowPtTPCCutAliESDTrackCut(-1.0);
123    task->SetRatioFoundOverFindable(0.5);
124
125    //V0 specific cuts
126    task->SetCosOfPointingAngleK(0.99,1000.0);
127    task->SetCosOfPointingAngleL(0.998,1000.0);
128
129    task->SetCtauCut(5.0,6.0,0.3,2.0);
130
131    task->SetArmenterosCutQt(-1.0,100.0,kTRUE,kFALSE);
132    
133    task->SetDCAV0ToVertexK0(0.4);
134    task->SetDCAV0ToVertexL(1.2);
135
136    task->SetDCADaughtersK0(0.23);
137    task->SetDCADaughtersL(0.35);
138    task->SetDCADaughtersAL(0.35);
139    
140    task->SetDecayRadiusXYMinMax(5.0,1000.0);
141
142    
143    //--- centrality ---//
144    task->SetUseCentrality(centDet);        // 0=off, 1=VZERO, 2=SPD
145    task->SetUseCentralityBin(cent);        // bin to be used 0,5,10,20,30,40,50,60,70,80,90,(100=SPDonly)
146    task->SetUseCentralityRange(centRange); // add centrality bin for increasing original bin range. For cent 60-80%: cent = 60 and centRange = 10
147    
148    task->SelectCollisionCandidates(AliVEvent::kMB);// | AliVEvent::kCentral | AliVEvent::kSemiCentral );
149    
150    mgr->AddTask(task);
151  
152    
153    //================================================
154    //              data containers
155    //================================================
156    //            find input container
157    
158    AliAnalysisDataContainer *cinput  = mgr->GetCommonInputContainer();
159
160    AliAnalysisDataContainer *coutput1 = 
161       mgr->CreateContainer(outname, TList::Class(),
162                            AliAnalysisManager::kOutputContainer,Form("%s:simones", AliAnalysisManager::GetCommonFileName()));
163    
164    //--- connect containers ---//
165    mgr->ConnectInput  (task,  0, cinput );
166    mgr->ConnectOutput (task,  1, coutput1);
167    
168    AliLog::SetClassDebugLevel("AliAnalysisTaskV0ForRAA",2);
169
170    return task;
171 }