Adding Correlation analysis for Leading V0 particle AliLeadingV0Correlation (Sandun...
[u/mrichter/AliRoot.git] / PWGCF / EBYE / NetParticle / macros / AddTaskNetParticle.C
1 /* *********************************************************************************
2  * File    : AddTaskNetParticle.C  
3  * Author  : Jochen Thaeder <jochen@thaeder.de>
4  * *********************************************************************************
5  * Configuring NetParticle Task:
6  * - ARGUMENTS : 
7  *     name           -> Name of the task, containing partcile type :
8  *                       Currently : Proton, Pion, Kaon      
9  *     isModeDist     -> Fill Distributions
10  *     isModeEff      -> Fill Efficiency/Contamination ThnSparse
11  *     isModeDCA      -> Fill DCA ThnSparse
12  *     useQAThnSparse -> Fill QA ThnSparse
13  *     isCreateCSC    -> Prepare for CrossSectionCorrection 
14  *                       - requires isModeEff to be set
15  *                       - Proton only
16  * 
17  * - OUTPUT CONTAINER : #N = 5
18  *   (1) - Standard Output, Distributions
19  *   (2) - Efficiency ThnSparse
20  *   (3) - Contamination ThnSparse
21  *   (4) - DCA ThnSparse
22  *   (5) - QA ThnSparse
23  *
24  ********************************************************************************* */
25
26 AliAnalysisTask *AddTaskNetParticle(const Char_t * name = "jthaeder_NetProton", 
27                                     Bool_t isModeDist, Bool_t isModeEff, Bool_t isModeDCA, Bool_t useQAThnSparse = kFALSE,
28                                     Bool_t isCreateCSC = kFALSE, Bool_t isModeAOD = kFALSE) {
29
30   TString sName(name);
31
32   if (isCreateCSC && !isModeEff) {
33     Error("AddTaskNetParticle", "Creating CrossSectionCorrection needs 'isModeEff' to be set.");
34     return NULL;
35   }
36
37   // ----------------------------------------------
38   // -- Get the current analysis manager
39   // ----------------------------------------------
40   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
41   if (!mgr) {
42     Error("AddTaskNetParticle", "No analysis manager found.");
43     return NULL;
44   }
45
46   // ----------------------------------------------
47   // -- Check for MC
48   // ----------------------------------------------
49   Bool_t isMC = (mgr->GetMCtruthEventHandler() != NULL);
50   if (isMC)
51     Info("AddTaskNetParticle", "This task has MC.");
52   
53   // ----------------------------------------------
54   // -- Create task configure it
55   // ----------------------------------------------
56   AliAnalysisTaskNetParticle *task = new AliAnalysisTaskNetParticle("AliAnalysisTaskNetParticle");
57   if (!task) {
58     Error("AddTaskNetParticle", "Task could not be created.");
59     return NULL;
60   }
61
62   if (isMC) 
63     task->SetIsMC();
64
65   // -- Set particle type
66   // ----------------------------------------------
67   Float_t minPt, maxPt, minPtEff, maxPtEff, minPtForTOF; 
68
69   if (sName.Contains("Proton")) {
70     task->SetParticleSpecies(AliPID::kProton);
71     task->SetControlParticleSpecies(3122, kTRUE, "Lambda");
72     minPt    = 0.4;    maxPt    = 2.2;
73     minPtEff = 0.2;    maxPtEff = 2.6;
74     minPtForTOF = 0.8;
75     if (isCreateCSC) {
76       minPtForTOF = maxPtEff;
77     }
78   }
79   else if (sName.Contains("Pion")) {
80     task->SetParticleSpecies(AliPID::kPion);
81     task->SetControlParticleSpecies(3122, kTRUE, "Lambda");  /// maybe something else ...
82     minPt    = 0.3;    maxPt    = 0.9;
83     minPtEff = 0.2;    maxPtEff = 1.2;
84     minPtForTOF = 0.8;
85   }
86   else if (sName.Contains("Kaon")) {
87     task->SetParticleSpecies(AliPID::kKaon);
88     task->SetControlParticleSpecies(3122, kTRUE, "Lambda");  /// maybe something else ...
89     //minPt    = 0.4;    maxPt    = 0.8; // GRID test 1
90     minPt    = 0.5;    maxPt    = 0.8; // GRID test 2
91     minPtEff = 0.1;    maxPtEff = 2.5;
92     minPtForTOF = 0.5;
93   }
94   else {
95     Error("AddTaskNetParticle", "Unknown Particle type.");
96     return NULL;
97   }
98
99   // -- Configure flags
100   // ----------------------------------------------
101   if (isModeEff) 
102     task->SetModeEffCreation(1);     // => 1 = on    | 0 = off (default)
103   if (isModeDCA)
104     task->SetModeDCACreation(1);     // => 1 = on    | 0 = off (default)
105   if (isModeDist)
106     task->SetModeDistCreation(1);    // => 1 = on    | 0 = off (default)
107   if(isModeAOD){
108     task->SetIsAOD(1);               // => 1 = AODs  | 0 = ESDs
109     task->SetTrackFilterBit(1024);   // 1024 = RAA cuts
110   }
111   // -- Enable QA plots
112   if (useQAThnSparse)
113     task->SetUseQATHnSparse(kTRUE);
114
115   // -- Configure cuts 
116   // ----------------------------------------------
117
118   // -- Set cut flags ...
119   task->SetESDTrackCutMode(0);     // => 0 = clean | 1 = dirty
120
121   // -- Set standard event cuts
122   task->SetVertexZMax(10.);   
123   task->SetCentralityBinMax(7);
124
125   // -- Set track event cuts
126   task->SetRapidityMax(0.5); 
127   task->SetMinTrackLengthMC(70.);  
128   task->SetNSigmaMaxCdd(3.); 
129   task->SetNSigmaMaxCzz(3.); 
130
131   //task->SetNSigmaMaxTPC(3); // GRID test 1
132   //task->SetNSigmaMaxTOF(3); // GRID test 1
133   task->SetNSigmaMaxTPC(2); // GRID test 2
134   task->SetNSigmaMaxTOF(2); // GRID test 2
135   task->SetMinPtForTOFRequired(minPtForTOF);
136
137   // -- Set analysis ranges
138   task->SetEtaMax(0.9);        
139   task->SetPtRange(minPt, maxPt);           // pt cut range for the analysis
140   task->SetPtRangeEff(minPtEff, maxPtEff);  // pt cut range for the correction / efficiency / contamination creation
141   
142   // ----------------------------------------------
143   // -- Initialize and add task to the ANALYSIS manager
144   // ----------------------------------------------
145   if (!task->Initialize())
146     mgr->AddTask(task);
147   else {
148     Error("Initialize failed, not adding AliAnalysistaskNetParticle !!!");
149     delete task;
150     return NULL;
151   }
152
153   // ----------------------------------------------
154   // -- data containers - input
155   // ----------------------------------------------
156   AliAnalysisDataContainer *cinput  = mgr->GetCommonInputContainer();
157
158   // ----------------------------------------------
159   // -- data containers - output
160   // ----------------------------------------------
161   AliAnalysisDataContainer *coutput     = mgr->CreateContainer(name, TList::Class(), AliAnalysisManager::kOutputContainer, Form("%s.root", name));
162   AliAnalysisDataContainer *coutputEff  = mgr->CreateContainer(Form("%s_eff", name), TList::Class(), AliAnalysisManager::kOutputContainer, Form("%s.root", name));
163   AliAnalysisDataContainer *coutputCont = mgr->CreateContainer(Form("%s_cont", name), TList::Class(), AliAnalysisManager::kOutputContainer, Form("%s.root", name));
164   AliAnalysisDataContainer *coutputDca  = mgr->CreateContainer(Form("%s_dca", name), TList::Class(), AliAnalysisManager::kOutputContainer, Form("%s.root", name));
165
166   AliAnalysisDataContainer *coutputQA   = mgr->CreateContainer(Form("%sQA", name), TList::Class(), AliAnalysisManager::kOutputContainer, Form("%sQA.root", name));
167     
168   mgr->ConnectInput  (task,  0, cinput );
169   mgr->ConnectOutput (task,  1, coutput);
170   mgr->ConnectOutput (task,  2, coutputEff);
171   mgr->ConnectOutput (task,  3, coutputCont);
172   mgr->ConnectOutput (task,  4, coutputDca);
173   mgr->ConnectOutput (task,  5, coutputQA);
174
175   return task;
176 }