1 /* *********************************************************************************
2 * File : AddTaskNetParticle.C
3 * Author : Jochen Thaeder <jochen@thaeder.de>
4 * *********************************************************************************
5 * Configuring NetParticle Task:
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
17 * - OUTPUT CONTAINER : #N = 5
18 * (1) - Standard Output, Distributions
19 * (2) - Efficiency ThnSparse
20 * (3) - Contamination ThnSparse
24 ********************************************************************************* */
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) {
32 if (isCreateCSC && !isModeEff) {
33 Error("AddTaskNetParticle", "Creating CrossSectionCorrection needs 'isModeEff' to be set.");
37 // ----------------------------------------------
38 // -- Get the current analysis manager
39 // ----------------------------------------------
40 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
42 Error("AddTaskNetParticle", "No analysis manager found.");
46 // ----------------------------------------------
48 // ----------------------------------------------
49 Bool_t isMC = (mgr->GetMCtruthEventHandler() != NULL);
51 Info("AddTaskNetParticle", "This task has MC.");
53 // ----------------------------------------------
54 // -- Create task configure it
55 // ----------------------------------------------
56 AliAnalysisTaskNetParticle *task = new AliAnalysisTaskNetParticle("AliAnalysisTaskNetParticle");
58 Error("AddTaskNetParticle", "Task could not be created.");
65 // -- Set particle type
66 // ----------------------------------------------
67 Float_t minPt, maxPt, minPtEff, maxPtEff, minPtForTOF;
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;
76 minPtForTOF = maxPtEff;
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;
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;
94 Error("AddTaskNetParticle", "Unknown Particle type.");
99 // ----------------------------------------------
101 task->SetModeEffCreation(1); // => 1 = on | 0 = off (default)
103 task->SetModeDCACreation(1); // => 1 = on | 0 = off (default)
105 task->SetModeDistCreation(1); // => 1 = on | 0 = off (default)
107 // -- Enable QA plots
109 task->SetUseQATHnSparse(kTRUE);
112 // ----------------------------------------------
114 // -- Set cut flags ...
115 task->SetESDTrackCutMode(0); // => 0 = clean | 1 = dirty
117 // -- Set standard event cuts
118 task->SetVertexZMax(10.);
119 task->SetCentralityBinMax(7);
121 // -- Set track event cuts
122 task->SetRapidityMax(0.5);
123 task->SetMinTrackLengthMC(70.);
124 task->SetNSigmaMaxCdd(3.);
125 task->SetNSigmaMaxCzz(3.);
127 task->SetNSigmaMaxTPC(2.5);
128 task->SetNSigmaMaxTOF(2.5);
129 task->SetMinPtForTOFRequired(minPtForTOF);
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
136 // ----------------------------------------------
137 // -- Initialize and add task to the ANALYSIS manager
138 // ----------------------------------------------
139 if (!task->Initialize())
142 Error("Initialize failed, not adding AliAnalysistaskNetParticle !!!");
147 // ----------------------------------------------
148 // -- data containers - input
149 // ----------------------------------------------
150 AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
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));
160 AliAnalysisDataContainer *coutputQA = mgr->CreateContainer(Form("%sQA", name), TList::Class(), AliAnalysisManager::kOutputContainer, Form("%sQA.root", name));
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);