Update for classes of Simone
[u/mrichter/AliRoot.git] / PWGLF / STRANGENESS / LambdaK0PbPb / AddTaskV0ForRAA.C
1 AliAnalysisTaskV0ForRAA *AddTaskV0ForRAA(Bool_t anaPP=kFALSE, Bool_t wSDD=kFALSE,Int_t cent=0,Int_t centDet=1,Int_t centRange=0, Bool_t mcMode=kFALSE, Bool_t mcTruthMode=kFALSE,Bool_t usePID=kFALSE,Double_t radCut=0.0,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    task->SelectWithSDD(wSDD);
109    //---------- cuts -------------//
110    //general cuts
111    task->SetUseOnthefly(kTRUE);
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(kFALSE,0.8);
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
130    task->SetArmenterosCutQt(-1.0,6.0,kTRUE,kFALSE);
131    
132    task->SetDCAV0ToVertexK0(0.4);
133    task->SetDCAV0ToVertexL(1.2);
134
135    task->SetDCADaughtersK0(0.23);
136    task->SetDCADaughtersL(0.35);
137    task->SetDCADaughtersAL(0.35);
138    
139    task->SetDecayRadiusXYMinMax(radCut,1000.0);
140
141    
142    //--- centrality ---//
143    task->SetUseCentrality(centDet);        // 0=off, 1=VZERO, 2=SPD
144    task->SetUseCentralityBin(cent);        // bin to be used 0,5,10,20,30,40,50,60,70,80,90,(100=SPDonly)
145    task->SetUseCentralityRange(centRange); // add centrality bin for increasing original bin range. For cent 60-80%: cent = 60 and centRange = 10
146    
147    task->SelectCollisionCandidates(AliVEvent::kMB);// | AliVEvent::kCentral | AliVEvent::kSemiCentral );
148    
149    mgr->AddTask(task);
150  
151    
152    //================================================
153    //              data containers
154    //================================================
155    //            find input container
156    
157    AliAnalysisDataContainer *cinput  = mgr->GetCommonInputContainer();
158
159    AliAnalysisDataContainer *coutput1 = 
160       mgr->CreateContainer(outname, TList::Class(),
161                            AliAnalysisManager::kOutputContainer,Form("%s:simones", AliAnalysisManager::GetCommonFileName()));
162    
163    //--- connect containers ---//
164    mgr->ConnectInput  (task,  0, cinput );
165    mgr->ConnectOutput (task,  1, coutput1);
166    
167    AliLog::SetClassDebugLevel("AliAnalysisTaskV0ForRAA",2);
168
169    return task;
170 }