]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG4/macros/AddTaskJets.C
The HLT ITS tracker has been reworked.
[u/mrichter/AliRoot.git] / PWG4 / macros / AddTaskJets.C
CommitLineData
0651dd18 1AliJetReader *CreateJetReader(Char_t *jr); // Common config\r
76f9015f 2AliJetFinder *CreateJetFinder(Char_t *jf,Float_t radius = -1);\r
0651dd18 3\r
76f9015f 4AliAnalysisTaskJets *AddTaskJets(Char_t *jr, Char_t *jf,Float_t radius = -1); // for the new AF\r
0651dd18 5\r
9902ce1e 6AliAnalysisTaskJets *AddTaskJets(){\r
7 // fills the standard "jets" branch in the AOD\r
8 // need the ESDFilter to run before, to access the AODtracks\r
9 // Tracks selected by the first Filter (1<<0)\r
10 // needs to be adapted for different cuts\r
11 \r
12 // UA1 as standard chosen, since it is the most robust and simple JF\r
13 // R = 0.4 suffficient to provide accurate jet axis for correlation studies\r
14 // energy resolution suffers a little\r
15 // Acceptance of jets not limited by the Jet Finder but should be done\r
16 // by user to abs(eta) < 0.5 \r
17\r
18 return AddTaskJets("AOD","UA1",0.4);\r
19\r
20}\r
21\r
22\r
23\r
b486b6c5 24Int_t AddTaskJetsDelta(char *nonStdFile = ""){\r
25\r
26 // Adds a whole set of jet finders all to be written\r
27 // to a delta AOD\r
28 \r
29 // this can in principle be done also with on the fly \r
30 // if we have an ESD input jet fidner task does automatically fetch the ouput aod\r
31\r
32 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();\r
33 if (!mgr) {\r
34 ::Error("AddTaskJetsDelta", "No analysis manager to connect to.");\r
35 return 0;\r
36 } \r
37 \r
38 // Check the analysis type using the event handlers connected to the analysis manager.\r
39 //==============================================================================\r
40 if (!mgr->GetInputEventHandler()) {\r
41 ::Error("AddTaskJetsDelta", "This task requires an input event handler");\r
42 return 0;\r
43 }\r
44\r
45 AliAODHandler *aodh = (AliAODHandler*)mgr->GetOutputEventHandler();\r
46 if (!aodh) {\r
47 ::Error("AddTaskJetsDelta", "This task needs an output event handler");\r
48 return 0;\r
49 } \r
50\r
51\r
52\r
53 TString type = mgr->GetInputEventHandler()->GetDataType();\r
54\r
55 AliAnalysisTaskJets *jetana = 0;\r
56 Int_t iCount = 0;\r
57\r
58\r
8a4430e1 59 const char *cJF[7] = {"UA1","UA1","UA1","CDF","DA","SISCONE","FASTJET"};\r
60 const Float_t radius[7] = { 0.4, 0.7, 1.0, 0.7, 0.7, 0.4, 0.4};\r
61 const UInt_t flag[7] = { 6, 7, 7, 7, 7, 7, 7};\r
b486b6c5 62 // flag first bit AOD, second bit AODMC2 third bit AODMC2\r
63 // i.e. 7 all, 6 only MC2 and MC\r
64 // this stay at three\r
b486b6c5 65 const char *cReader[3] = {"AOD","AODMC","AODMC2"}; \r
66\r
8a4430e1 67 for(int i = 0; i< 7;i++){\r
b486b6c5 68 for(int ib = 0;ib<3;ib++){\r
69 if(flag[i]&(1<<ib)){\r
70 jetana = AddTaskJets(cReader[ib],cJF[i],radius[i]);\r
71 if(jetana){\r
72 char *cRadius = "";\r
8a4430e1 73 if(radius[i]>0)cRadius = Form("%02d",(int)((radius[i]+0.01)*10.)); // add an offset beacuse of precision\r
74 Printf(cRadius);\r
b486b6c5 75 jetana->SetNonStdBranch(Form("jets%s_%s%s",cReader[ib],cJF[i],cRadius));\r
76 iCount++;\r
77 }\r
78 }\r
79 }\r
80 }\r
81 \r
82 Printf("Added %d JetFinders",iCount);\r
83}\r
84\r
85\r
86\r
87\r
88\r
89\r
76f9015f 90AliAnalysisTaskJets *AddTaskJets(Char_t *jr, Char_t *jf, Float_t radius)\r
672f1183 91{\r
0651dd18 92 // Creates a jet finder task, configures it and adds it to the analysis manager.\r
672f1183 93\r
94 // Get the pointer to the existing analysis manager via the static access method.\r
95 //==============================================================================\r
96 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();\r
97 if (!mgr) {\r
98 ::Error("AddTaskJets", "No analysis manager to connect to.");\r
99 return NULL;\r
100 } \r
101 \r
102 // Check the analysis type using the event handlers connected to the analysis manager.\r
103 //==============================================================================\r
104 if (!mgr->GetInputEventHandler()) {\r
105 ::Error("AddTaskJets", "This task requires an input event handler");\r
106 return NULL;\r
107 }\r
108\r
0511798f 109 AliAODHandler *aodh = (AliAODHandler*)mgr->GetOutputEventHandler();\r
110 if (!aodh) {\r
111 ::Error("AddTaskJets", "This task needs an output event handler");\r
112 return NULL;\r
113 } \r
114\r
115\r
672f1183 116 // Create the task and configure it.\r
117 //===========================================================================\r
118 AliAnalysisTaskJets *jetana;\r
0651dd18 119 AliJetReader *er = CreateJetReader(jr);\r
672f1183 120 // Define jet header and jet finder\r
76f9015f 121 AliJetFinder *jetFinder = CreateJetFinder(jf,radius);\r
0651dd18 122\r
672f1183 123 if (jetFinder){\r
672f1183 124 if (er) jetFinder->SetJetReader(er);\r
125 }\r
126\r
76f9015f 127 char *cRadius = "";\r
8a4430e1 128 if(radius>0)cRadius = Form("%02d",(int)((radius+0.01)*10.));\r
76f9015f 129\r
b486b6c5 130 jetana = new AliAnalysisTaskJets(Form("JetAnalysis%s_%s%s",jr,jf,cRadius));\r
06847475 131 TString type = mgr->GetInputEventHandler()->GetDataType();\r
132 if (type == "AOD") jetana->SetNonStdBranch(Form("jets%s",jf));\r
06847475 133 \r
be60d38b 134 TString c_jr(jr);\r
135 c_jr.ToLower();\r
136 TString c_jf(jf);\r
137 c_jf.ToLower();\r
138\r
b486b6c5 139 AliAnalysisDataContainer *cout_jet = mgr->CreateContainer(Form("jethist_%s_%s%s",c_jr.Data(),c_jf.Data(),cRadius), TList::Class(),\r
561a15fa 140 AliAnalysisManager::kOutputContainer, Form("%s:PWG4_jethist_%s_%s%s",AliAnalysisManager::GetCommonFileName(),\r
141 c_jr.Data(),c_jf.Data(),cRadius));\r
672f1183 142 // Connect jet finder to task.\r
143 jetana->SetJetFinder(jetFinder);\r
144 jetana->SetConfigFile("");\r
19027d3e 145 jetana->SetDebugLevel(0);\r
672f1183 146 mgr->AddTask(jetana);\r
147\r
148 // Create ONLY the output containers for the data produced by the task.\r
149 // Get and connect other common input/output containers via the manager as below\r
150 //==============================================================================\r
151 mgr->ConnectInput (jetana, 0, mgr->GetCommonInputContainer());\r
152// AOD output slot will be used in a different way in future\r
153 mgr->ConnectOutput (jetana, 0, mgr->GetCommonOutputContainer());\r
154 mgr->ConnectOutput (jetana, 1, cout_jet);\r
155 \r
156 return jetana;\r
157}\r
0651dd18 158\r
76f9015f 159AliJetFinder *CreateJetFinder(Char_t *jf,Float_t radius){\r
70144f07 160 AliJetFinder *jetFinder = 0;\r
0651dd18 161\r
162 switch (jf) {\r
163 case "CDF":\r
164 AliCdfJetHeader *jh = new AliCdfJetHeader();\r
165 jh->SetRadius(0.7);\r
8a4430e1 166 if(radius>0)jh->SetRadius(radius); \r
0651dd18 167 jetFinder = new AliCdfJetFinder();\r
0651dd18 168 if (jh) jetFinder->SetJetHeader(jh);\r
169 break;\r
170\r
171 case "DA":\r
172 AliDAJetHeader *jh=new AliDAJetHeader();\r
173 jh->SetComment("DA jet code with default parameters");\r
174 jh->SelectJets(kTRUE);\r
4be01860 175 jh->SetRadius(0.7);\r
8a4430e1 176 if(radius>0)jh->SetRadius(radius);\r
0651dd18 177 jetFinder = new AliDAJetFinder();\r
178 if (jh) jetFinder->SetJetHeader(jh);\r
179 break;\r
180\r
70144f07 181 case "FASTJET":\r
b486b6c5 182 // DEFAULT is ANTI KT\r
70144f07 183 AliFastJetHeaderV1 *jh = new AliFastJetHeaderV1();\r
184 jh->SetRparam(0.4); // setup parameters \r
185 if(radius>0)jh->SetRparam(radius);\r
186 jh->SetAlgorithm(2); // antikt from fastjet/JetDefinition.hh\r
0651dd18 187 jetFinder = new AliFastJetFinder();\r
0651dd18 188 if (jh) jetFinder->SetJetHeader(jh);\r
189 break;\r
190\r
8a4430e1 191 case "FASTKT":\r
192 AliFastJetHeaderV1 *jh = new AliFastJetHeaderV1();\r
193 jh->SetRparam(0.4); // setup parameters \r
194 if(radius>0)jh->SetRparam(radius);\r
195 jh->SetAlgorithm(0); // kt from fastjet/JetDefinition.hh\r
196 jetFinder = new AliFastJetFinder();\r
197 if (jh) jetFinder->SetJetHeader(jh);\r
198 break;\r
199\r
200 case "SISCONE":\r
201 AliSISConeJetHeader * jh = new AliSISConeJetHeader();\r
202\r
203 jh->SetJetEtaMax(1.5);\r
204 jh->SetJetEtaMin(-1.5);\r
205\r
206 //siscone parameters\r
207 jh->SetConeRadius(0.4); // default cone radius\r
208 if(radius>0)jh->SetConeRadius(radius); // cone radius\r
209\r
210 jh->SetOverlapThreshold(0.75); // overlap parameter, between 0 and 1 excluded!! 0.75 value is advised\r
211 jh->SetPtProtojetMin(0); // pt min of protojets\r
212 jh->SetMinJetPt(10); // Ptmin of jets (GeV)\r
213\r
214 //do you want to subtract BG (0 = no, 1 = yes)\r
215 jh->SetBGMode(0);\r
216\r
217 //for background\r
218 jh->SetRapRange( -0.9, 0.9); // rapidity range for subtracting background must be < ghostmaxrap-0.95*R\r
219 jh->SetPhiRange(0 , 2*TMath::Pi()); // phi range for subtracting background\r
220 \r
221 //to determine jets area\r
222 jh->SetBGAlgorithm(1); // algorithm for rho calculation : 0 = kT, 1 = Cambridge\r
223 jh->SetGhostEtaMax(4); // eta max where ghosts are generated \r
224 jh->SetGhostArea(0.05); // area of a ghost \r
225 jh->SetMeanGhostKt(1e-100); // average transverse momentum of the ghosts.\r
226 jh->SetAreaTypeNumber(4); // from 1 to 5 : 1 = active_area, 2 = active_area_explicit_ghosts, 3 = one_ghost_passive_area, 4 = passive_area, 5 = voronoi_area\r
227 jetFinder = new AliSISConeJetFinder();\r
228 if (jh) jetFinder->SetJetHeader(jh);\r
229 break;\r
230\r
0651dd18 231 case "UA1":\r
232 AliUA1JetHeaderV1 *jh=new AliUA1JetHeaderV1();\r
233 jh->SetComment("UA1 jet code with default parameters");\r
ba146e16 234 jh->BackgMode(0);\r
235 jh->SetRadius(0.4);\r
76f9015f 236 if(radius>0)jh->SetRadius(radius);\r
0651dd18 237 jh->SetEtSeed(4.);\r
c40ab9fa 238 jh->SetEtSeed(4.);\r
239 jh->SetNAcceptJets(6);\r
0651dd18 240 jh->SetLegoNbinPhi(432);\r
241 jh->SetLegoNbinEta(274);\r
242 jh->SetLegoEtaMin(-2);\r
243 jh->SetLegoEtaMax(+2);\r
9902ce1e 244 jh->SetMinJetEt(5.);\r
ba146e16 245 jh->SetJetEtaMax(1.5);\r
246 jh->SetJetEtaMin(-1.5);\r
0651dd18 247\r
248 jetFinder = new AliUA1JetFinderV1();\r
249 if (jh) jetFinder->SetJetHeader(jh);\r
250 break;\r
251\r
ba146e16 252 case "UA1MC":\r
253 AliUA1JetHeaderV1 *jh=new AliUA1JetHeaderV1();\r
254 jh->SetComment("UA1 jet code with default MC parameters");\r
255 jh->BackgMode(0);\r
256 jh->SetRadius(1.0);\r
76f9015f 257 if(radius>0)jh->SetRadius(radius);\r
ba146e16 258 jh->SetEtSeed(4.);\r
c40ab9fa 259 jh->SetNAcceptJets(6);\r
ba146e16 260 jh->SetLegoNbinPhi(432);\r
261 jh->SetLegoNbinEta(274);\r
262 jh->SetLegoEtaMin(-2);\r
263 jh->SetLegoEtaMax(+2);\r
9902ce1e 264 jh->SetMinJetEt(5.);\r
ba146e16 265 jh->SetJetEtaMax(1.5);\r
266 jh->SetJetEtaMin(-1.5);\r
ba146e16 267 jetFinder = new AliUA1JetFinderV1();\r
268 if (jh) jetFinder->SetJetHeader(jh);\r
269 break;\r
70144f07 270 default:\r
271 Printf("\n >>>>>>> AddTaskJets Error Wrong jet finder selected\n");\r
272 break;\r
0651dd18 273 }\r
274\r
275 return jetFinder;\r
276\r
277}\r
278\r
279AliJetReader *CreateJetReader(Char_t *jr){\r
280 AliJetReader *er = 0;\r
281\r
282 switch (jr) {\r
283 case "MC":\r
284 AliJetKineReaderHeader *jrh = new AliJetKineReaderHeader();\r
285 jrh->SetComment("MC full Kinematics");\r
286 jrh->SetFastSimTPC(kFALSE);\r
287 jrh->SetFastSimEMCAL(kFALSE);\r
288 jrh->SetPtCut(0.);\r
289 jrh->SetFiducialEta(-2.1,2.1); // to take all MC particles default is 0 .9 \r
290 // Define reader and set its header \r
291 er = new AliJetKineReader();\r
292 er->SetReaderHeader(jrh);\r
293 break;\r
ba146e16 294 case "MC2":\r
295 AliJetKineReaderHeader *jrh = new AliJetKineReaderHeader();\r
5dbee319 296 jrh->SetComment("MC full Kinematics spearate config charged only");\r
ba146e16 297 jrh->SetFastSimTPC(kFALSE);\r
298 jrh->SetFastSimEMCAL(kFALSE);\r
5dbee319 299 jrh->SetChargedOnly(kTRUE);\r
ba146e16 300 jrh->SetPtCut(0.);\r
301 jrh->SetFiducialEta(-2.1,2.1); // to take all MC particles default is 0 .9 \r
302 // Define reader and set its header \r
303 er = new AliJetKineReader();\r
304 er->SetReaderHeader(jrh);\r
305 break;\r
0651dd18 306 case "ESD":\r
307 AliJetESDReaderHeader *jrh = new AliJetESDReaderHeader();\r
308 jrh->SetComment("Testing");\r
309 jrh->SetFirstEvent(0);\r
310 jrh->SetLastEvent(1000);\r
311 jrh->SetPtCut(0.);\r
312 jrh->SetReadSignalOnly(kFALSE);\r
313 // Define reader and set its header \r
314 er = new AliJetESDReader();\r
315 er->SetReaderHeader(jrh);\r
316 break;\r
317\r
318 case "AOD":\r
319 AliJetAODReaderHeader *jrh = new AliJetAODReaderHeader();\r
320 jrh->SetComment("AOD Reader");\r
321 jrh->SetPtCut(0.);\r
8a4430e1 322 jrh->SetTestFilterMask(16); // Change this one for a different set of cuts\r
0651dd18 323 // Define reader and set its header\r
324 er = new AliJetAODReader();\r
325 er->SetReaderHeader(jrh);\r
326 break;\r
0c43aaa9 327 case "AODMC":\r
328 AliJetAODReaderHeader *jrh = new AliJetAODReaderHeader();\r
329 jrh->SetComment("AOD MC Reader");\r
330 jrh->SetPtCut(0.);\r
331 jrh->SetFiducialEta(-2.1,2.1); // to take all MC particles default is 0.9\r
332 jrh->SetReadAODMC(1);// 1 all primary MC , 2 all primary charged\r
333 // Define reader and set its header\r
334 er = new AliJetAODReader();\r
335 er->SetReaderHeader(jrh);\r
336 break;\r
5dbee319 337 case "AODMC2":\r
338 AliJetAODReaderHeader *jrh = new AliJetAODReaderHeader();\r
339 jrh->SetComment("AOD MC Reader");\r
340 jrh->SetPtCut(0.);\r
341 jrh->SetFiducialEta(-2.1,2.1); // to take all MC particles default is 0.9\r
342 jrh->SetReadAODMC(2);// 1 all primary MC , 2 all primary charged\r
343 // Define reader and set its header\r
344 er = new AliJetAODReader();\r
345 er->SetReaderHeader(jrh);\r
346 break;\r
347\r
0651dd18 348 default:\r
349 ::Error("AddTaskJets", "Wrong jet reader selected\n");\r
350 return 0;\r
351 }\r
352\r
353 return er;\r
354\r
355}\r