821aabf512f49ad31ef8b157e6fb2bfeccb685f0
[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) {
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.2;    maxPt    = 0.4;
90     minPtEff = 0.1;    maxPtEff = 0.8;
91     minPtForTOF = 0.8;
92   }
93   else {
94     Error("AddTaskNetParticle", "Unknown Particle type.");
95     return NULL;
96   }
97
98   // -- Configure flags
99   // ----------------------------------------------
100   if (isModeEff) 
101     task->SetModeEffCreation(1);     // => 1 = on    | 0 = off (default)
102   if (isModeDCA)
103     task->SetModeDCACreation(1);     // => 1 = on    | 0 = off (default)
104   if (isModeDist)
105     task->SetModeDistCreation(1);    // => 1 = on    | 0 = off (default)
106
107   // -- Enable QA plots
108   if (useQAThnSparse)
109     task->SetUseQATHnSparse(kTRUE);
110
111   // -- Configure cuts 
112   // ----------------------------------------------
113
114   // -- Set cut flags ...
115   task->SetESDTrackCutMode(0);     // => 0 = clean | 1 = dirty
116
117   // -- Set standard event cuts
118   task->SetVertexZMax(10.);   
119   task->SetCentralityBinMax(7);
120
121   // -- Set track event cuts
122   task->SetRapidityMax(0.5); 
123   task->SetMinTrackLengthMC(70.);  
124   task->SetNSigmaMaxCdd(3.); 
125   task->SetNSigmaMaxCzz(3.); 
126
127   task->SetNSigmaMaxTPC(2.5);
128   task->SetNSigmaMaxTOF(2.5);
129   task->SetMinPtForTOFRequired(minPtForTOF);
130
131   // -- Set analysis ranges
132   task->SetEtaMax(0.9);        
133   task->SetPtRange(minPt, maxPt);           // pt cut range for the analysis
134   task->SetPtRangeEff(minPtEff, maxPtEff);  // pt cut range for the correction / efficiency / contamination creation
135   
136   // ----------------------------------------------
137   // -- Initialize and add task to the ANALYSIS manager
138   // ----------------------------------------------
139   if (!task->Initialize())
140     mgr->AddTask(task);
141   else {
142     Error("Initialize failed, not adding AliAnalysistaskNetParticle !!!");
143     delete task;
144     return NULL;
145   }
146
147   // ----------------------------------------------
148   // -- data containers - input
149   // ----------------------------------------------
150   AliAnalysisDataContainer *cinput  = mgr->GetCommonInputContainer();
151
152   // ----------------------------------------------
153   // -- data containers - output
154   // ----------------------------------------------
155   AliAnalysisDataContainer *coutput     = mgr->CreateContainer(name, TList::Class(), AliAnalysisManager::kOutputContainer, Form("%s.root", name));
156   AliAnalysisDataContainer *coutputEff  = mgr->CreateContainer(Form("%s_eff", name), TList::Class(), AliAnalysisManager::kOutputContainer, Form("%s.root", name));
157   AliAnalysisDataContainer *coutputCont = mgr->CreateContainer(Form("%s_cont", name), TList::Class(), AliAnalysisManager::kOutputContainer, Form("%s.root", name));
158   AliAnalysisDataContainer *coutputDca  = mgr->CreateContainer(Form("%s_dca", name), TList::Class(), AliAnalysisManager::kOutputContainer, Form("%s.root", name));
159
160   AliAnalysisDataContainer *coutputQA   = mgr->CreateContainer(Form("%sQA", name), TList::Class(), AliAnalysisManager::kOutputContainer, Form("%sQA.root", name));
161     
162   mgr->ConnectInput  (task,  0, cinput );
163   mgr->ConnectOutput (task,  1, coutput);
164   mgr->ConnectOutput (task,  2, coutputEff);
165   mgr->ConnectOutput (task,  3, coutputCont);
166   mgr->ConnectOutput (task,  4, coutputDca);
167   mgr->ConnectOutput (task,  5, coutputQA);
168
169   return task;
170 }