]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG4/JetTasks/AliAnalysisTaskFragmentationFunction.cxx
Bugfix in the config.
[u/mrichter/AliRoot.git] / PWG4 / JetTasks / AliAnalysisTaskFragmentationFunction.cxx
CommitLineData
07c3e78c 1\r
1db1733e 2/*************************************************************************\r
3 * *\r
4 * Task for Fragmentation Function Analysis in PWG4 Jet Task Force Train *\r
5 * *\r
6 *************************************************************************/\r
7\r
8\r
9/**************************************************************************\r
10 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
11 * *\r
12 * Author: The ALICE Off-line Project. *\r
13 * Contributors are mentioned in the code where appropriate. *\r
14 * *\r
15 * Permission to use, copy, modify and distribute this software and its *\r
16 * documentation strictly for non-commercial purposes is hereby granted *\r
17 * without fee, provided that the above copyright notice appears in all *\r
18 * copies and that both the copyright notice and this permission notice *\r
19 * appear in the supporting documentation. The authors make no claims *\r
20 * about the suitability of this software for any purpose. It is *\r
21 * provided "as is" without express or implied warranty. *\r
22 **************************************************************************/\r
23\r
24/* $Id: */\r
25\r
26\r
27#include "TList.h"\r
28#include "TH1F.h"\r
29#include "TH2F.h"\r
30#include "TString.h"\r
31\r
32#include "AliAODInputHandler.h" \r
33#include "AliAODHandler.h" \r
34#include "AliESDEvent.h"\r
35#include "AliAODMCParticle.h"\r
36#include "AliAODJet.h"\r
37#include "AliGenPythiaEventHeader.h"\r
38#include "AliInputEventHandler.h"\r
39\r
40#include "AliAnalysisHelperJetTasks.h"\r
41#include "AliAnalysisManager.h"\r
42#include "AliAnalysisTaskSE.h"\r
43\r
44#include "AliAnalysisTaskFragmentationFunction.h"\r
45\r
46\r
47ClassImp(AliAnalysisTaskFragmentationFunction)\r
48\r
49//____________________________________________________________________________\r
50AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction()\r
51 : AliAnalysisTaskSE()\r
52 ,fESD(0)\r
53 ,fAOD(0)\r
54 ,fMCEvent(0)\r
55 ,fBranchRecJets("jets")\r
56 ,fBranchGenJets("")\r
57 ,fTrackTypeGen(0)\r
58 ,fJetTypeGen(0)\r
59 ,fFilterMask(0)\r
60 ,fTrackPtCut(0)\r
61 ,fTrackEtaMin(0)\r
62 ,fTrackEtaMax(0)\r
63 ,fTrackPhiMin(0)\r
64 ,fTrackPhiMax(0)\r
65 ,fJetPtCut(0)\r
66 ,fJetEtaMin(0)\r
67 ,fJetEtaMax(0)\r
68 ,fJetPhiMin(0)\r
69 ,fJetPhiMax(0)\r
70 ,fFFRadius(0)\r
71 ,fDijetDeltaPhiCut(0)\r
72 ,fDijetInvMassMin(0)\r
73 ,fDijetInvMassMax(0)\r
74 ,fDijetCDFcut(0)\r
75 ,fDijetEMeanMin(0)\r
76 ,fDijetEMeanMax(0)\r
77 ,fDijetEFractionCut(0)\r
78 ,fDijetEFraction(0)\r
79 ,fTracksRec(0)\r
80 ,fTracksRecCuts(0)\r
81 ,fTracksGen(0)\r
82 ,fJetsRec(0)\r
83 ,fJetsRecCuts(0)\r
84 ,fJetsGen(0)\r
85 ,fQATrackHistosRec(0)\r
86 ,fQATrackHistosRecCuts(0)\r
87 ,fQATrackHistosGen(0)\r
88 ,fQAJetHistosRec(0)\r
89 ,fQAJetHistosRecCuts(0)\r
90 ,fQAJetHistosRecCutsLeading(0)\r
91 ,fQAJetHistosGen(0)\r
92 ,fQAJetHistosGenLeading(0)\r
93 ,fFFHistosRecCuts(0)\r
94 ,fFFHistosRecLeading(0)\r
95 ,fFFHistosRecLeadingTrack(0)\r
96 ,fFFHistosGen(0)\r
97 ,fFFHistosGenLeading(0)\r
98 ,fFFHistosGenLeadingTrack(0)\r
99 ,fQATrackHighPtThreshold(0)\r
100 ,fFFNBinsJetPt(0) \r
101 ,fFFJetPtMin(0) \r
102 ,fFFJetPtMax(0)\r
103 ,fFFNBinsPt(0) \r
104 ,fFFPtMin(0) \r
105 ,fFFPtMax(0) \r
106 ,fFFNBinsXi(0) \r
107 ,fFFXiMin(0) \r
108 ,fFFXiMax(0) \r
109 ,fFFNBinsZ(0) \r
110 ,fFFZMin(0) \r
111 ,fFFZMax(0) \r
112 ,fQAJetNBinsPt(0) \r
113 ,fQAJetPtMin(0) \r
114 ,fQAJetPtMax(0) \r
115 ,fQAJetNBinsEta(0) \r
116 ,fQAJetEtaMin(0) \r
117 ,fQAJetEtaMax(0) \r
118 ,fQAJetNBinsPhi(0) \r
119 ,fQAJetPhiMin(0) \r
120 ,fQAJetPhiMax(0) \r
121 ,fQATrackNBinsPt(0) \r
122 ,fQATrackPtMin(0) \r
123 ,fQATrackPtMax(0) \r
124 ,fQATrackNBinsEta(0)\r
125 ,fQATrackEtaMin(0) \r
126 ,fQATrackEtaMax(0) \r
127 ,fQATrackNBinsPhi(0)\r
128 ,fQATrackPhiMin(0) \r
129 ,fQATrackPhiMax(0) \r
130 ,fCommonHistList(0)\r
131 ,fh1EvtSelection(0)\r
132 ,fh1VertexNContributors(0)\r
133 ,fh1VertexZ(0)\r
134 ,fh1EvtMult(0)\r
135 ,fh1nRecJetsCuts(0)\r
136 ,fh1nGenJets(0)\r
137{\r
138 // default constructor\r
139}\r
140\r
141//__________________________________________________________________________________________\r
142AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const char *name) \r
143 : AliAnalysisTaskSE(name)\r
144 ,fESD(0)\r
145 ,fAOD(0)\r
146 ,fMCEvent(0)\r
147 ,fBranchRecJets("jets")\r
148 ,fBranchGenJets("")\r
149 ,fTrackTypeGen(0)\r
150 ,fJetTypeGen(0)\r
151 ,fFilterMask(0)\r
152 ,fTrackPtCut(0)\r
153 ,fTrackEtaMin(0)\r
154 ,fTrackEtaMax(0)\r
155 ,fTrackPhiMin(0)\r
156 ,fTrackPhiMax(0)\r
157 ,fJetPtCut(0)\r
158 ,fJetEtaMin(0)\r
159 ,fJetEtaMax(0)\r
160 ,fJetPhiMin(0)\r
161 ,fJetPhiMax(0)\r
162 ,fFFRadius(0)\r
163 ,fDijetDeltaPhiCut(0)\r
164 ,fDijetInvMassMin(0)\r
165 ,fDijetInvMassMax(0)\r
166 ,fDijetCDFcut(0)\r
167 ,fDijetEMeanMin(0)\r
168 ,fDijetEMeanMax(0)\r
169 ,fDijetEFractionCut(0)\r
170 ,fDijetEFraction(0)\r
171 ,fTracksRec(0)\r
172 ,fTracksRecCuts(0)\r
173 ,fTracksGen(0)\r
174 ,fJetsRec(0)\r
175 ,fJetsRecCuts(0)\r
176 ,fJetsGen(0)\r
177 ,fQATrackHistosRec(0)\r
178 ,fQATrackHistosRecCuts(0)\r
179 ,fQATrackHistosGen(0)\r
180 ,fQAJetHistosRec(0)\r
181 ,fQAJetHistosRecCuts(0)\r
182 ,fQAJetHistosRecCutsLeading(0)\r
183 ,fQAJetHistosGen(0)\r
184 ,fQAJetHistosGenLeading(0)\r
185 ,fFFHistosRecCuts(0)\r
186 ,fFFHistosRecLeading(0)\r
187 ,fFFHistosRecLeadingTrack(0)\r
188 ,fFFHistosGen(0)\r
189 ,fFFHistosGenLeading(0)\r
190 ,fFFHistosGenLeadingTrack(0)\r
191 ,fQATrackHighPtThreshold(0) \r
192 ,fFFNBinsJetPt(0) \r
193 ,fFFJetPtMin(0) \r
194 ,fFFJetPtMax(0)\r
195 ,fFFNBinsPt(0) \r
196 ,fFFPtMin(0) \r
197 ,fFFPtMax(0) \r
198 ,fFFNBinsXi(0) \r
199 ,fFFXiMin(0) \r
200 ,fFFXiMax(0) \r
201 ,fFFNBinsZ(0) \r
202 ,fFFZMin(0) \r
203 ,fFFZMax(0) \r
204 ,fQAJetNBinsPt(0) \r
205 ,fQAJetPtMin(0) \r
206 ,fQAJetPtMax(0) \r
207 ,fQAJetNBinsEta(0) \r
208 ,fQAJetEtaMin(0) \r
209 ,fQAJetEtaMax(0) \r
210 ,fQAJetNBinsPhi(0) \r
211 ,fQAJetPhiMin(0) \r
212 ,fQAJetPhiMax(0) \r
213 ,fQATrackNBinsPt(0) \r
214 ,fQATrackPtMin(0) \r
215 ,fQATrackPtMax(0) \r
216 ,fQATrackNBinsEta(0)\r
217 ,fQATrackEtaMin(0) \r
218 ,fQATrackEtaMax(0) \r
219 ,fQATrackNBinsPhi(0)\r
220 ,fQATrackPhiMin(0) \r
221 ,fQATrackPhiMax(0) \r
222 ,fCommonHistList(0)\r
223 ,fh1EvtSelection(0)\r
224 ,fh1VertexNContributors(0)\r
225 ,fh1VertexZ(0)\r
226 ,fh1EvtMult(0)\r
227 ,fh1nRecJetsCuts(0)\r
228 ,fh1nGenJets(0)\r
229{\r
230 // constructor\r
231 \r
232 DefineOutput(1,TList::Class());\r
233 \r
234\r
235}\r
236\r
237//__________________________________________________________________________________________________________________________\r
238AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const AliAnalysisTaskFragmentationFunction &copy)\r
239 : AliAnalysisTaskSE()\r
240 ,fESD(copy.fESD)\r
241 ,fAOD(copy.fAOD)\r
242 ,fMCEvent(copy.fMCEvent)\r
243 ,fBranchRecJets(copy.fBranchRecJets)\r
244 ,fBranchGenJets(copy.fBranchGenJets)\r
245 ,fTrackTypeGen(copy.fTrackTypeGen)\r
246 ,fJetTypeGen(copy.fJetTypeGen)\r
247 ,fFilterMask(copy.fFilterMask)\r
248 ,fTrackPtCut(copy.fTrackPtCut)\r
249 ,fTrackEtaMin(copy.fTrackEtaMin)\r
250 ,fTrackEtaMax(copy.fTrackEtaMax)\r
251 ,fTrackPhiMin(copy.fTrackPhiMin)\r
252 ,fTrackPhiMax(copy.fTrackPhiMax)\r
253 ,fJetPtCut(copy.fJetPtCut)\r
254 ,fJetEtaMin(copy.fJetEtaMin)\r
255 ,fJetEtaMax(copy.fJetEtaMax)\r
256 ,fJetPhiMin(copy.fJetPhiMin)\r
257 ,fJetPhiMax(copy.fJetPhiMax)\r
258 ,fFFRadius(copy.fFFRadius)\r
259 ,fDijetDeltaPhiCut(copy.fDijetDeltaPhiCut)\r
260 ,fDijetInvMassMin(copy.fDijetInvMassMin)\r
261 ,fDijetInvMassMax(copy.fDijetInvMassMax)\r
262 ,fDijetCDFcut(copy.fDijetCDFcut)\r
263 ,fDijetEMeanMin(copy.fDijetEMeanMin)\r
264 ,fDijetEMeanMax(copy.fDijetEMeanMax)\r
265 ,fDijetEFractionCut(copy.fDijetEFractionCut)\r
266 ,fDijetEFraction(copy.fDijetEFraction)\r
267 ,fTracksRec(copy.fTracksRec)\r
268 ,fTracksRecCuts(copy.fTracksRecCuts)\r
269 ,fTracksGen(copy.fTracksGen)\r
270 ,fJetsRec(copy.fJetsRec)\r
271 ,fJetsRecCuts(copy.fJetsRecCuts)\r
272 ,fJetsGen(copy.fJetsGen)\r
273 ,fQATrackHistosRec(copy.fQATrackHistosRec)\r
274 ,fQATrackHistosRecCuts(copy.fQATrackHistosRecCuts)\r
275 ,fQATrackHistosGen(copy.fQATrackHistosGen)\r
276 ,fQAJetHistosRec(copy.fQAJetHistosRec)\r
277 ,fQAJetHistosRecCuts(copy.fQAJetHistosRecCuts)\r
278 ,fQAJetHistosRecCutsLeading(copy.fQAJetHistosRecCutsLeading)\r
279 ,fQAJetHistosGen(copy.fQAJetHistosGen)\r
280 ,fQAJetHistosGenLeading(copy.fQAJetHistosGenLeading)\r
281 ,fFFHistosRecCuts(copy.fFFHistosRecCuts)\r
282 ,fFFHistosRecLeading(copy.fFFHistosRecLeading)\r
283 ,fFFHistosRecLeadingTrack(copy.fFFHistosRecLeadingTrack)\r
284 ,fFFHistosGen(copy.fFFHistosGen)\r
285 ,fFFHistosGenLeading(copy.fFFHistosGenLeading)\r
286 ,fFFHistosGenLeadingTrack(copy.fFFHistosGenLeadingTrack)\r
287 ,fQATrackHighPtThreshold(copy.fQATrackHighPtThreshold) \r
288 ,fFFNBinsJetPt(copy.fFFNBinsJetPt) \r
289 ,fFFJetPtMin(copy.fFFJetPtMin) \r
290 ,fFFJetPtMax(copy.fFFJetPtMax)\r
291 ,fFFNBinsPt(copy.fFFNBinsPt) \r
292 ,fFFPtMin(copy.fFFPtMin) \r
293 ,fFFPtMax(copy.fFFPtMax) \r
294 ,fFFNBinsXi(copy.fFFNBinsXi) \r
295 ,fFFXiMin(copy.fFFXiMin) \r
296 ,fFFXiMax(copy.fFFXiMax) \r
297 ,fFFNBinsZ(copy.fFFNBinsZ) \r
298 ,fFFZMin(copy.fFFZMin) \r
299 ,fFFZMax(copy.fFFZMax) \r
300 ,fQAJetNBinsPt(copy.fQAJetNBinsPt) \r
301 ,fQAJetPtMin(copy.fQAJetPtMin) \r
302 ,fQAJetPtMax(copy.fQAJetPtMax) \r
303 ,fQAJetNBinsEta(copy.fQAJetNBinsEta) \r
304 ,fQAJetEtaMin(copy.fQAJetEtaMin) \r
305 ,fQAJetEtaMax(copy.fQAJetEtaMax) \r
306 ,fQAJetNBinsPhi(copy.fQAJetNBinsPhi) \r
307 ,fQAJetPhiMin(copy.fQAJetPhiMin) \r
308 ,fQAJetPhiMax(copy.fQAJetPhiMax) \r
309 ,fQATrackNBinsPt(copy.fQATrackNBinsPt) \r
310 ,fQATrackPtMin(copy.fQATrackPtMin) \r
311 ,fQATrackPtMax(copy.fQATrackPtMax) \r
312 ,fQATrackNBinsEta(copy.fQATrackNBinsEta)\r
313 ,fQATrackEtaMin(copy.fQATrackEtaMin) \r
314 ,fQATrackEtaMax(copy.fQATrackEtaMax) \r
315 ,fQATrackNBinsPhi(copy.fQATrackNBinsPhi)\r
316 ,fQATrackPhiMin(copy.fQATrackPhiMin) \r
317 ,fQATrackPhiMax(copy.fQATrackPhiMax) \r
318 ,fCommonHistList(copy.fCommonHistList)\r
319 ,fh1EvtSelection(copy.fh1EvtSelection)\r
320 ,fh1VertexNContributors(copy.fh1VertexNContributors)\r
321 ,fh1VertexZ(copy.fh1VertexZ)\r
322 ,fh1EvtMult(copy.fh1EvtMult)\r
323 ,fh1nRecJetsCuts(copy.fh1nRecJetsCuts)\r
324 ,fh1nGenJets(copy.fh1nGenJets)\r
325{\r
326 // copy constructor\r
327\r
328}\r
329\r
330// _________________________________________________________________________________________________________________________________\r
331AliAnalysisTaskFragmentationFunction& AliAnalysisTaskFragmentationFunction::operator=(const AliAnalysisTaskFragmentationFunction& o)\r
332{\r
333 // assignment\r
334 \r
335 if(this!=&o){\r
336\r
337 AliAnalysisTaskSE::operator=(o);\r
338 fESD = o.fESD;\r
339 fAOD = o.fAOD;\r
340 fMCEvent = o.fMCEvent;\r
341 fBranchRecJets = o.fBranchRecJets;\r
342 fBranchGenJets = o.fBranchGenJets;\r
343 fTrackTypeGen = o.fTrackTypeGen;\r
344 fJetTypeGen = o.fJetTypeGen;\r
345 fFilterMask = o.fFilterMask;\r
346 fTrackPtCut = o.fTrackPtCut;\r
347 fTrackEtaMin = o.fTrackEtaMin;\r
348 fTrackEtaMax = o.fTrackEtaMax;\r
349 fTrackPhiMin = o.fTrackPhiMin;\r
350 fTrackPhiMax = o.fTrackPhiMax;\r
351 fJetPtCut = o.fJetPtCut;\r
352 fJetEtaMin = o.fJetEtaMin;\r
353 fJetEtaMax = o.fJetEtaMax;\r
354 fJetPhiMin = o.fJetPhiMin;\r
355 fJetPhiMax = o.fJetPhiMax;\r
356 fFFRadius = o.fFFRadius;\r
357 fDijetDeltaPhiCut = o.fDijetDeltaPhiCut;\r
358 fDijetInvMassMin = o.fDijetInvMassMin;\r
359 fDijetInvMassMax = o.fDijetInvMassMax;\r
360 fDijetCDFcut = o.fDijetCDFcut;\r
361 fDijetEMeanMin = o.fDijetEMeanMin;\r
362 fDijetEMeanMax = o.fDijetEMeanMax;\r
363 fDijetEFractionCut = o.fDijetEFractionCut;\r
364 fDijetEFraction = o.fDijetEFraction;\r
365 fTracksRec = o.fTracksRec;\r
366 fTracksRecCuts = o.fTracksRecCuts;\r
367 fTracksGen = o.fTracksGen;\r
368 fJetsRec = o.fJetsRec;\r
369 fJetsRecCuts = o.fJetsRecCuts;\r
370 fJetsGen = o.fJetsGen;\r
371 fQATrackHistosRec = o.fQATrackHistosRec;\r
372 fQATrackHistosRecCuts = o.fQATrackHistosRecCuts;\r
373 fQATrackHistosGen = o.fQATrackHistosGen;\r
374 fQAJetHistosRec = o.fQAJetHistosRec;\r
375 fQAJetHistosRecCuts = o.fQAJetHistosRecCuts;\r
376 fQAJetHistosRecCutsLeading = o.fQAJetHistosRecCutsLeading;\r
377 fQAJetHistosGen = o.fQAJetHistosGen;\r
378 fQAJetHistosGenLeading = o.fQAJetHistosGenLeading;\r
379 fFFHistosRecCuts = o.fFFHistosRecCuts;\r
380 fFFHistosRecLeading = o.fFFHistosRecLeading;\r
381 fFFHistosRecLeadingTrack = o.fFFHistosRecLeadingTrack;\r
382 fFFHistosGen = o.fFFHistosGen;\r
383 fFFHistosGenLeading = o.fFFHistosGenLeading;\r
384 fFFHistosGenLeadingTrack = o.fFFHistosGenLeadingTrack;\r
385 fQATrackHighPtThreshold = o.fQATrackHighPtThreshold; \r
386 fFFNBinsJetPt = o.fFFNBinsJetPt; \r
387 fFFJetPtMin = o.fFFJetPtMin; \r
388 fFFJetPtMax = o.fFFJetPtMax;\r
389 fFFNBinsPt = o.fFFNBinsPt; \r
390 fFFPtMin = o.fFFPtMin; \r
391 fFFPtMax = o.fFFPtMax; \r
392 fFFNBinsXi = o.fFFNBinsXi; \r
393 fFFXiMin = o.fFFXiMin; \r
394 fFFXiMax = o.fFFXiMax; \r
395 fFFNBinsZ = o.fFFNBinsZ; \r
396 fFFZMin = o.fFFZMin; \r
397 fFFZMax = o.fFFZMax; \r
398 fQAJetNBinsPt = o.fQAJetNBinsPt; \r
399 fQAJetPtMin = o.fQAJetPtMin; \r
400 fQAJetPtMax = o.fQAJetPtMax; \r
401 fQAJetNBinsEta = o.fQAJetNBinsEta; \r
402 fQAJetEtaMin = o.fQAJetEtaMin; \r
403 fQAJetEtaMax = o.fQAJetEtaMax; \r
404 fQAJetNBinsPhi = o.fQAJetNBinsPhi; \r
405 fQAJetPhiMin = o.fQAJetPhiMin; \r
406 fQAJetPhiMax = o.fQAJetPhiMax; \r
407 fQATrackNBinsPt = o.fQATrackNBinsPt; \r
408 fQATrackPtMin = o.fQATrackPtMin; \r
409 fQATrackPtMax = o.fQATrackPtMax; \r
410 fQATrackNBinsEta = o.fQATrackNBinsEta;\r
411 fQATrackEtaMin = o.fQATrackEtaMin; \r
412 fQATrackEtaMax = o.fQATrackEtaMax; \r
413 fQATrackNBinsPhi = o.fQATrackNBinsPhi;\r
414 fQATrackPhiMin = o.fQATrackPhiMin; \r
415 fQATrackPhiMax = o.fQATrackPhiMax; \r
416 fCommonHistList = o.fCommonHistList;\r
417 fh1EvtSelection = o.fh1EvtSelection;\r
418 fh1VertexNContributors = o.fh1VertexNContributors;\r
419 fh1VertexZ = o.fh1VertexZ;\r
420 fh1EvtMult = o.fh1EvtMult;\r
421 fh1nRecJetsCuts = o.fh1nRecJetsCuts;\r
422 fh1nGenJets = o.fh1nGenJets; \r
423 }\r
424 \r
425 return *this;\r
426}\r
427\r
428//___________________________________________________________________________\r
429AliAnalysisTaskFragmentationFunction::~AliAnalysisTaskFragmentationFunction()\r
430{\r
431 // destructor\r
432 \r
433}\r
434\r
435\r
436\r
437//______________________________________________________________________________________________________\r
438AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AliFragFuncHistos(const char* name, \r
439 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax, \r
440 Int_t nPt, Float_t ptMin, Float_t ptMax,\r
441 Int_t nXi, Float_t xiMin, Float_t xiMax,\r
442 Int_t nZ , Float_t zMin , Float_t zMax )\r
443 : TObject()\r
444 ,fNBinsJetPt(nJetPt)\r
445 ,fJetPtMin(jetPtMin)\r
446 ,fJetPtMax(jetPtMax)\r
447 ,fNBinsPt(nPt) \r
448 ,fPtMin(ptMin) \r
449 ,fPtMax(ptMax) \r
450 ,fNBinsXi(nXi) \r
451 ,fXiMin(xiMin) \r
452 ,fXiMax(xiMax) \r
453 ,fNBinsZ(nZ) \r
454 ,fZMin(zMin) \r
455 ,fZMax(zMax) \r
456 ,fh2TrackPt(0)\r
457 ,fh2Xi(0)\r
458 ,fh2Z(0)\r
459 ,fh1JetPt(0)\r
460 ,fName(name)\r
461{\r
462 // default constructor\r
463\r
464}\r
465\r
466//___________________________________________________________________________\r
467AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AliFragFuncHistos(const AliFragFuncHistos& copy)\r
468 : TObject()\r
469 ,fNBinsJetPt(copy.fNBinsJetPt)\r
470 ,fJetPtMin(copy.fJetPtMin)\r
471 ,fJetPtMax(copy.fJetPtMax)\r
472 ,fNBinsPt(copy.fNBinsPt) \r
473 ,fPtMin(copy.fPtMin) \r
474 ,fPtMax(copy.fPtMax) \r
475 ,fNBinsXi(copy.fNBinsXi) \r
476 ,fXiMin(copy.fXiMin) \r
477 ,fXiMax(copy.fXiMax) \r
478 ,fNBinsZ(copy.fNBinsZ) \r
479 ,fZMin(copy.fZMin) \r
480 ,fZMax(copy.fZMax) \r
481 ,fh2TrackPt(copy.fh2TrackPt)\r
482 ,fh2Xi(copy.fh2Xi)\r
483 ,fh2Z(copy.fh2Z)\r
484 ,fh1JetPt(copy.fh1JetPt)\r
485 ,fName(copy.fName)\r
486{\r
487 // copy constructor\r
488}\r
489\r
490//_______________________________________________________________________________________________________________________________________________________________\r
491AliAnalysisTaskFragmentationFunction::AliFragFuncHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncHistos& o)\r
492{\r
493 // assignment\r
494 \r
495 if(this!=&o){\r
496 TObject::operator=(o);\r
497 fNBinsJetPt = o.fNBinsJetPt;\r
498 fJetPtMin = o.fJetPtMin;\r
499 fJetPtMax = o.fJetPtMax;\r
500 fNBinsPt = o.fNBinsPt; \r
501 fPtMin = o.fPtMin; \r
502 fPtMax = o.fPtMax; \r
503 fNBinsXi = o.fNBinsXi; \r
504 fXiMin = o.fXiMin; \r
505 fXiMax = o.fXiMax; \r
506 fNBinsZ = o.fNBinsZ; \r
507 fZMin = o.fZMin; \r
508 fZMax = o.fZMax; \r
509 fh2TrackPt = o.fh2TrackPt;\r
510 fh2Xi = o.fh2Xi;\r
511 fh2Z = o.fh2Z;\r
512 fh1JetPt = o.fh1JetPt;\r
513 fName = o.fName;\r
514 }\r
515 \r
516 return *this;\r
517}\r
518\r
519//_________________________________________________________\r
520AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::~AliFragFuncHistos()\r
521{\r
522 // destructor \r
523\r
524 if(fh1JetPt) delete fh1JetPt;\r
525 if(fh2TrackPt) delete fh2TrackPt;\r
526 if(fh2Xi) delete fh2Xi;\r
527 if(fh2Z) delete fh2Z;\r
528}\r
529\r
530//_________________________________________________________________\r
531void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::DefineHistos()\r
532{\r
533 // book FF histos\r
534\r
535 fh1JetPt = new TH1F(Form("fh1FFJetPt%s", fName.Data()),"",fNBinsJetPt,fJetPtMin,fJetPtMax);\r
536 fh2TrackPt = new TH2F(Form("fh2FFTrackPt%s",fName.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,fNBinsPt, fPtMin, fPtMax);\r
537 fh2Xi = new TH2F(Form("fh2FFXi%s",fName.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsXi, fXiMin, fXiMax);\r
538 fh2Z = new TH2F(Form("fh2FFZ%s",fName.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsZ, fZMin, fZMax);\r
539\r
540 AliAnalysisTaskFragmentationFunction::SetProperties(fh1JetPt, "p_{T} [GeV/c]", "entries"); \r
541 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPt,"jet p_{T} [GeV/c]","p_{T} [GeV/c]","entries");\r
542 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi,"jet p_{T} [GeV/c]","#xi", "entries");\r
543 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z,"jet p_{T} [GeV/c]","z","entries");\r
544}\r
545\r
546//_______________________________________________________________________________________________________________\r
547void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::FillFF(Float_t trackPt, Float_t jetPt, Bool_t incrementJetPt)\r
548{\r
549 // fill FF\r
550 \r
551 if(incrementJetPt) fh1JetPt->Fill(jetPt); \r
552 fh2TrackPt->Fill(jetPt,trackPt);\r
553 \r
554 Double_t z = trackPt / jetPt;\r
555 Double_t xi = 0;\r
556 if(z>0) xi = TMath::Log(1/z);\r
557 \r
558 fh2Xi->Fill(jetPt,xi);\r
559 fh2Z->Fill(jetPt,z);\r
560}\r
561\r
562//_________________________________________________________________________________\r
563void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AddToOutput(TList* list) const\r
564{\r
565 // add histos to list\r
566\r
567 list->Add(fh1JetPt);\r
568 \r
569 list->Add(fh2TrackPt);\r
570 list->Add(fh2Xi);\r
571 list->Add(fh2Z);\r
572}\r
573\r
574\r
575//_________________________________________________________________________________________________________\r
576AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const char* name,\r
577 Int_t nPt, Float_t ptMin, Float_t ptMax,\r
578 Int_t nEta, Float_t etaMin, Float_t etaMax,\r
579 Int_t nPhi, Float_t phiMin, Float_t phiMax)\r
580 : TObject()\r
581 ,fNBinsPt(nPt)\r
582 ,fPtMin(ptMin)\r
583 ,fPtMax(ptMax)\r
584 ,fNBinsEta(nEta)\r
585 ,fEtaMin(etaMin)\r
586 ,fEtaMax(etaMax)\r
587 ,fNBinsPhi(nPhi)\r
588 ,fPhiMin(phiMin)\r
589 ,fPhiMax(phiMax)\r
590 ,fh2EtaPhi(0)\r
591 ,fh1Pt(0)\r
592 ,fName(name)\r
593{\r
594 // default constructor\r
595}\r
596\r
597//____________________________________________________________________________________\r
598AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const AliFragFuncQAJetHistos& copy)\r
599 : TObject()\r
600 ,fNBinsPt(copy.fNBinsPt)\r
601 ,fPtMin(copy.fPtMin)\r
602 ,fPtMax(copy.fPtMax)\r
603 ,fNBinsEta(copy.fNBinsEta)\r
604 ,fEtaMin(copy.fEtaMin)\r
605 ,fEtaMax(copy.fEtaMax)\r
606 ,fNBinsPhi(copy.fNBinsPhi)\r
607 ,fPhiMin(copy.fPhiMin)\r
608 ,fPhiMax(copy.fPhiMax)\r
609 ,fh2EtaPhi(copy.fh2EtaPhi)\r
610 ,fh1Pt(copy.fh1Pt)\r
611 ,fName(copy.fName)\r
612{\r
613 // copy constructor\r
614}\r
615\r
616//________________________________________________________________________________________________________________________________________________________________________\r
617AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos& o)\r
618{\r
619 // assignment\r
620 \r
621 if(this!=&o){\r
622 TObject::operator=(o);\r
623 fNBinsPt = o.fNBinsPt;\r
624 fPtMin = o.fPtMin;\r
625 fPtMax = o.fPtMax;\r
626 fNBinsEta = o.fNBinsEta;\r
627 fEtaMin = o.fEtaMin;\r
628 fEtaMax = o.fEtaMax;\r
629 fNBinsPhi = o.fNBinsPhi;\r
630 fPhiMin = o.fPhiMin;\r
631 fPhiMax = o.fPhiMax;\r
632 fh2EtaPhi = o.fh2EtaPhi;\r
633 fh1Pt = o.fh1Pt;\r
634 fName = o.fName;\r
635 }\r
636 \r
637 return *this;\r
638}\r
639\r
640//______________________________________________________________\r
641AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::~AliFragFuncQAJetHistos()\r
642{\r
643 // destructor \r
644 \r
645 if(fh2EtaPhi) delete fh2EtaPhi;\r
646 if(fh1Pt) delete fh1Pt;\r
647}\r
648\r
649//____________________________________________________________________\r
650void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::DefineHistos()\r
651{\r
652 // book jet QA histos\r
653\r
654 fh2EtaPhi = new TH2F(Form("fh2JetQAEtaPhi%s", fName.Data()), Form("%s: #eta - #phi distribution", fName.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);\r
655 fh1Pt = new TH1F(Form("fh1JetQAPt%s", fName.Data()), Form("%s: p_{T} distribution", fName.Data()), fNBinsPt, fPtMin, fPtMax);\r
656 \r
657 AliAnalysisTaskFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi"); \r
658 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");\r
659}\r
660\r
661//____________________________________________________________________________________________________\r
662void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::FillJetQA(Float_t eta, Float_t phi, Float_t pt)\r
663{\r
664 // fill jet QA histos \r
665\r
666 fh2EtaPhi->Fill( eta, phi);\r
667 fh1Pt->Fill( pt );\r
668}\r
669\r
670//____________________________________________________________________________________\r
671void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AddToOutput(TList* list) const \r
672{\r
673 // add histos to list\r
674\r
675 list->Add(fh2EtaPhi);\r
676 list->Add(fh1Pt);\r
677}\r
678\r
679\r
680//___________________________________________________________________________________________________________\r
681AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const char* name,\r
682 Int_t nPt, Float_t ptMin, Float_t ptMax,\r
683 Int_t nEta, Float_t etaMin, Float_t etaMax,\r
684 Int_t nPhi, Float_t phiMin, Float_t phiMax,\r
685 Float_t ptThresh) \r
686 : TObject()\r
687 ,fNBinsPt(nPt)\r
688 ,fPtMin(ptMin)\r
689 ,fPtMax(ptMax)\r
690 ,fNBinsEta(nEta)\r
691 ,fEtaMin(etaMin)\r
692 ,fEtaMax(etaMax)\r
693 ,fNBinsPhi(nPhi)\r
694 ,fPhiMin(phiMin)\r
695 ,fPhiMax(phiMax)\r
696 ,fHighPtThreshold(ptThresh)\r
697 ,fh2EtaPhi(0)\r
698 ,fh1Pt(0)\r
699 ,fh2HighPtEtaPhi(0)\r
700 ,fName(name)\r
701{\r
702 // default constructor\r
703}\r
704\r
705//__________________________________________________________________________________________\r
706AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const AliFragFuncQATrackHistos& copy)\r
707 : TObject()\r
708 ,fNBinsPt(copy.fNBinsPt)\r
709 ,fPtMin(copy.fPtMin)\r
710 ,fPtMax(copy.fPtMax)\r
711 ,fNBinsEta(copy.fNBinsEta)\r
712 ,fEtaMin(copy.fEtaMin)\r
713 ,fEtaMax(copy.fEtaMax)\r
714 ,fNBinsPhi(copy.fNBinsPhi)\r
715 ,fPhiMin(copy.fPhiMin)\r
716 ,fPhiMax(copy.fPhiMax)\r
717 ,fHighPtThreshold(copy.fHighPtThreshold)\r
718 ,fh2EtaPhi(copy.fh2EtaPhi)\r
719 ,fh1Pt(copy.fh1Pt)\r
720 ,fh2HighPtEtaPhi(copy.fh2HighPtEtaPhi)\r
721 ,fName(copy.fName)\r
722{\r
723 // copy constructor\r
724}\r
725\r
726// _____________________________________________________________________________________________________________________________________________________________________________\r
727AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos& o)\r
728{\r
729 // assignment\r
730 \r
731 if(this!=&o){\r
732 TObject::operator=(o);\r
733 fNBinsPt = o.fNBinsPt;\r
734 fPtMin = o.fPtMin;\r
735 fPtMax = o.fPtMax;\r
736 fNBinsEta = o.fNBinsEta;\r
737 fEtaMin = o.fEtaMin;\r
738 fEtaMax = o.fEtaMax;\r
739 fNBinsPhi = o.fNBinsPhi;\r
740 fPhiMin = o.fPhiMin;\r
741 fPhiMax = o.fPhiMax;\r
742 fHighPtThreshold = o.fHighPtThreshold;\r
743 fh2EtaPhi = o.fh2EtaPhi;\r
744 fh1Pt = o.fh1Pt;\r
745 fh2HighPtEtaPhi = o.fh2HighPtEtaPhi;\r
746 fName = o.fName;\r
747 }\r
748 \r
749 return *this;\r
750}\r
751\r
752//___________________________________________________________________\r
753AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::~AliFragFuncQATrackHistos()\r
754{\r
755 // destructor \r
756 \r
757 if(fh2EtaPhi) delete fh2EtaPhi;\r
758 if(fh2HighPtEtaPhi) delete fh2HighPtEtaPhi;\r
759 if(fh1Pt) delete fh1Pt;\r
760}\r
761\r
762//______________________________________________________________________\r
763void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::DefineHistos()\r
764{\r
765 // book track QA histos\r
766\r
767 fh2EtaPhi = new TH2F(Form("fh2TrackQAEtaPhi%s", fName.Data()), Form("%s: #eta - #phi distribution", fName.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);\r
768 fh2HighPtEtaPhi = new TH2F(Form("fh2TrackQAHighPtEtaPhi%s", fName.Data()), Form("%s: #eta - #phi distribution for high-p_{T}", fName.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);\r
769 fh1Pt = new TH1F(Form("fh1TrackQAPt%s", fName.Data()), Form("%s: p_{T} distribution", fName.Data()), fNBinsPt, fPtMin, fPtMax);\r
770 \r
771 AliAnalysisTaskFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi"); \r
772 AliAnalysisTaskFragmentationFunction::SetProperties(fh2HighPtEtaPhi, "#eta", "#phi");\r
773 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");\r
774}\r
775\r
776//________________________________________________________________________________________________________\r
777void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::FillTrackQA(Float_t eta, Float_t phi, Float_t pt)\r
778{\r
779 // fill track QA histos\r
780 \r
781 fh2EtaPhi->Fill( eta, phi);\r
782 if(pt > fHighPtThreshold) fh2HighPtEtaPhi->Fill( eta, phi);\r
783 fh1Pt->Fill( pt ); \r
784}\r
785\r
786//______________________________________________________________________________________\r
787void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AddToOutput(TList* list) const\r
788{\r
789 // add histos to list\r
790\r
791 list->Add(fh2EtaPhi);\r
792 list->Add(fh2HighPtEtaPhi);\r
793 list->Add(fh1Pt);\r
794}\r
795\r
796//__________________________________________________________________\r
797void AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects()\r
798{\r
799 // create output objects\r
800 \r
801 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects()");\r
802 \r
803 // create list of tracks and jets \r
804 \r
805 fTracksRec = new TList();\r
806 fTracksRec->SetOwner(kFALSE); \r
807\r
808 fTracksRecCuts = new TList();\r
809 fTracksRecCuts->SetOwner(kFALSE); \r
810\r
811 fTracksGen = new TList();\r
812 fTracksGen->SetOwner(kFALSE);\r
813\r
814 fJetsRec = new TList();\r
815 fJetsRec->SetOwner(kFALSE);\r
816\r
817 fJetsRecCuts = new TList();\r
818 fJetsRecCuts->SetOwner(kFALSE);\r
819\r
820 fJetsGen = new TList();\r
821 fJetsGen->SetOwner(kFALSE);\r
822\r
823 // fJetsKine = new TList();\r
824 // fJetsKine->SetOwner(kTRUE); // delete AOD jets using mom from Kine Tree via TList::Clear()\r
825\r
826\r
827 //\r
828 // Create histograms / output container\r
829 //\r
830\r
831 OpenFile(1);\r
832 fCommonHistList = new TList();\r
833 \r
834 Bool_t oldStatus = TH1::AddDirectoryStatus();\r
835 TH1::AddDirectory(kFALSE);\r
836 \r
837 \r
838 // Histograms \r
839 fh1EvtSelection = new TH1F("fh1EvtSelection", "Event Selection", 6, -0.5, 5.5);\r
840 fh1VertexNContributors = new TH1F("fh1VertexNContributors", "Vertex N contributors", 11,-.5, 10.5);\r
841 fh1VertexZ = new TH1F("fh1VertexZ", "Vertex z distribution", 30, -15., 15.);\r
842 fh1EvtMult = new TH1F("fh1EvtMult","Event multiplicity, track pT cut > 150 MeV/c, |#eta| < 0.9",100,0.,100.);\r
843 fh1nRecJetsCuts = new TH1F("fh1nRecJetsCuts","reconstructed jets per event",10,-0.5,9.5);\r
844 fh1nGenJets = new TH1F("fh1nGenJets","generated jets per event",10,-0.5,9.5);\r
845\r
846\r
847 fQATrackHistosRec = new AliFragFuncQATrackHistos("Rec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax, fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,\r
848 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax, fQATrackHighPtThreshold);\r
849 fQATrackHistosRecCuts = new AliFragFuncQATrackHistos("RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax, fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,\r
850 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax, fQATrackHighPtThreshold);\r
851 fQATrackHistosGen = new AliFragFuncQATrackHistos("Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax, fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,\r
852 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax, fQATrackHighPtThreshold);\r
853 \r
854\r
855 fQAJetHistosRec = new AliFragFuncQAJetHistos("Rec", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax, fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,\r
856 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);\r
857 fQAJetHistosRecCuts = new AliFragFuncQAJetHistos("RecCuts", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax, fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,\r
858 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);\r
859 fQAJetHistosRecCutsLeading = new AliFragFuncQAJetHistos("RecCutsLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax, fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,\r
860 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);\r
861 fQAJetHistosGen = new AliFragFuncQAJetHistos("Gen", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax, fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,\r
862 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);\r
863 fQAJetHistosGenLeading = new AliFragFuncQAJetHistos("GenLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax, fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,\r
864 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);\r
865 \r
866\r
867 fFFHistosRecCuts = new AliFragFuncHistos("RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, fFFNBinsPt, fFFPtMin, fFFPtMax, fFFNBinsXi, fFFXiMin, fFFXiMax, \r
868 fFFNBinsZ , fFFZMin , fFFZMax);\r
869 fFFHistosRecLeading = new AliFragFuncHistos("RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, fFFNBinsPt, fFFPtMin, fFFPtMax, fFFNBinsXi, fFFXiMin, fFFXiMax, \r
870 fFFNBinsZ , fFFZMin , fFFZMax);\r
871 fFFHistosRecLeadingTrack = new AliFragFuncHistos("RecLeadingTrack", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, fFFNBinsPt, fFFPtMin, fFFPtMax, fFFNBinsXi, fFFXiMin, fFFXiMax, \r
872 fFFNBinsZ , fFFZMin , fFFZMax);\r
873 fFFHistosGen = new AliFragFuncHistos("Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, fFFNBinsPt, fFFPtMin, fFFPtMax, fFFNBinsXi, fFFXiMin, fFFXiMax, \r
874 fFFNBinsZ , fFFZMin , fFFZMax);\r
875 fFFHistosGenLeading = new AliFragFuncHistos("GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, fFFNBinsPt, fFFPtMin, fFFPtMax, fFFNBinsXi, fFFXiMin, fFFXiMax, \r
876 fFFNBinsZ , fFFZMin , fFFZMax);\r
877 fFFHistosGenLeadingTrack = new AliFragFuncHistos("GenLeadingTrack", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, fFFNBinsPt, fFFPtMin, fFFPtMax, fFFNBinsXi, fFFXiMin, fFFXiMax, \r
878 fFFNBinsZ , fFFZMin , fFFZMax);\r
879\r
880\r
881 fQATrackHistosRec->DefineHistos();\r
882 fQATrackHistosRecCuts->DefineHistos();\r
883 fQATrackHistosGen->DefineHistos();\r
884\r
885 fQAJetHistosRec->DefineHistos();\r
886 fQAJetHistosRecCuts->DefineHistos();\r
887 fQAJetHistosRecCutsLeading->DefineHistos();\r
888 fQAJetHistosGen->DefineHistos();\r
889 fQAJetHistosGenLeading->DefineHistos();\r
890\r
891 fFFHistosRecCuts->DefineHistos();\r
892 fFFHistosRecLeading->DefineHistos();\r
893 fFFHistosRecLeadingTrack->DefineHistos();\r
894 fFFHistosGen->DefineHistos();\r
895 fFFHistosGenLeading->DefineHistos();\r
896 fFFHistosGenLeadingTrack->DefineHistos();\r
897 \r
898 \r
899 const Int_t saveLevel = 4;\r
900 if(saveLevel>0){\r
901 fCommonHistList->Add(fh1EvtSelection);\r
902 fFFHistosRecCuts->AddToOutput(fCommonHistList);\r
903 fFFHistosRecLeading->AddToOutput(fCommonHistList);\r
904 fFFHistosRecLeadingTrack->AddToOutput(fCommonHistList);\r
905 fFFHistosGen->AddToOutput(fCommonHistList);\r
906 fFFHistosGenLeading->AddToOutput(fCommonHistList);\r
907 fFFHistosGenLeadingTrack->AddToOutput(fCommonHistList);\r
908 }\r
909 if(saveLevel>1){\r
910 fQATrackHistosRec->AddToOutput(fCommonHistList);\r
911 fQATrackHistosRecCuts->AddToOutput(fCommonHistList);\r
912 fQATrackHistosGen->AddToOutput(fCommonHistList);\r
913 \r
914 fQAJetHistosRec->AddToOutput(fCommonHistList);\r
915 fQAJetHistosRecCuts->AddToOutput(fCommonHistList);\r
916 fQAJetHistosRecCutsLeading->AddToOutput(fCommonHistList);\r
917 fQAJetHistosGen->AddToOutput(fCommonHistList);\r
918 fQAJetHistosGenLeading->AddToOutput(fCommonHistList);\r
919 \r
920 fCommonHistList->Add(fh1EvtMult);\r
921 fCommonHistList->Add(fh1nRecJetsCuts);\r
922 fCommonHistList->Add(fh1nGenJets);\r
923 }\r
924 if(saveLevel>2){\r
925 fCommonHistList->Add(fh1VertexNContributors);\r
926 fCommonHistList->Add(fh1VertexZ); \r
927 }\r
928 if(saveLevel>3){\r
929 \r
930 }\r
931 \r
932 // =========== Switch on Sumw2 for all histos ===========\r
933 for (Int_t i=0; i<fCommonHistList->GetEntries(); ++i) {\r
934 TH1 *h1 = dynamic_cast<TH1*>(fCommonHistList->At(i));\r
935 if (h1) h1->Sumw2(); \r
936 }\r
937 \r
938 TH1::AddDirectory(oldStatus);\r
939}\r
940\r
941//_______________________________________________\r
942void AliAnalysisTaskFragmentationFunction::Init()\r
943{\r
944 // Initialization\r
945 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::Init()");\r
946\r
947}\r
948\r
949//_____________________________________________________________\r
950void AliAnalysisTaskFragmentationFunction::UserExec(Option_t *) \r
951{\r
952 // Main loop\r
953 // Called for each event\r
954 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::UserExec()");\r
955 \r
956\r
957 if(fDebug > 1) Printf("Analysis event #%5d", (Int_t) fEntry);\r
958 // Trigger selection\r
959 \r
960 AliInputEventHandler* inputHandler = (AliInputEventHandler*)\r
961 ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());\r
dc1a4401 962 if(inputHandler->IsEventSelected()&AliVEvent::kMB){\r
1db1733e 963 if(fDebug > 1) Printf(" Trigger Selection: event ACCEPTED ... ");\r
964 fh1EvtSelection->Fill(1.);\r
965 } else {\r
966 fh1EvtSelection->Fill(0.);\r
967 if(inputHandler->InheritsFrom("AliESDInputHandler")){ // PhysicsSelection only with ESD input\r
968 if (fDebug > 1 ) Printf(" Trigger Selection: event REJECTED ... ");\r
969 PostData(1, fCommonHistList);\r
970 return;\r
971 }\r
972 }\r
973 \r
974 fESD = dynamic_cast<AliESDEvent*>(InputEvent());\r
975 if(!fESD){\r
976 if(fDebug>3) Printf("%s:%d ESDEvent not found in the input", (char*)__FILE__,__LINE__);\r
977 }\r
978 \r
979 fMCEvent = MCEvent();\r
980 if(!fMCEvent){\r
981 if(fDebug>3) Printf("%s:%d MCEvent not found in the input", (char*)__FILE__,__LINE__);\r
982 }\r
983 \r
984 // get AOD event from input/ouput\r
985 TObject* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();\r
986 if( handler && handler->InheritsFrom("AliAODInputHandler") ) {\r
987 fAOD = ((AliAODInputHandler*)handler)->GetEvent();\r
988 if (fDebug > 1) Printf("%s:%d AOD event from input", (char*)__FILE__,__LINE__);\r
989 }\r
990 else {\r
991 handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();\r
992 if( handler && handler->InheritsFrom("AliAODHandler") ) {\r
993 fAOD = ((AliAODHandler*)handler)->GetAOD();\r
994 if (fDebug > 1) Printf("%s:%d AOD event from output", (char*)__FILE__,__LINE__);\r
995 }\r
996 }\r
997 \r
998 if(!fAOD){\r
999 Printf("%s:%d AODEvent not found", (char*)__FILE__,__LINE__);\r
1000 return;\r
1001 }\r
1002 \r
1003 \r
1004 // event selection (vertex) *****************************************\r
1005 \r
1006 AliAODVertex* primVtx = fAOD->GetPrimaryVertex();\r
1007 Int_t nTracksPrim = primVtx->GetNContributors();\r
1008 fh1VertexNContributors->Fill(nTracksPrim);\r
1009 \r
1010 if (fDebug > 1) Printf("%s:%d primary vertex selection: %d", (char*)__FILE__,__LINE__,nTracksPrim);\r
1011 if(!nTracksPrim){\r
1012 if (fDebug > 1) Printf("%s:%d primary vertex selection: event REJECTED...",(char*)__FILE__,__LINE__); \r
1013 fh1EvtSelection->Fill(2.);\r
1014 PostData(1, fCommonHistList);\r
1015 return;\r
1016 }\r
1017\r
1018 fh1VertexZ->Fill(primVtx->GetZ());\r
1019 \r
1020 if(TMath::Abs(primVtx->GetZ())>10){\r
1021 if (fDebug > 1) Printf("%s:%d primary vertex z = %f: event REJECTED...",(char*)__FILE__,__LINE__,primVtx->GetZ()); \r
1022 fh1EvtSelection->Fill(3.);\r
1023 PostData(1, fCommonHistList);\r
1024 return; \r
1025 }\r
1026\r
1027 TString primVtxName(primVtx->GetName());\r
1028\r
1029 if(primVtxName.CompareTo("TPCVertex",TString::kIgnoreCase) == 1){\r
1030 if (fDebug > 1) Printf("%s:%d primary vertex selection: TPC vertex, event REJECTED...",(char*)__FILE__,__LINE__);\r
1031 fh1EvtSelection->Fill(4.);\r
1032 PostData(1, fCommonHistList);\r
1033 return;\r
1034 }\r
1035 if (fDebug > 1) Printf("%s:%d primary vertex selection: event ACCEPTED ...",(char*)__FILE__,__LINE__); \r
1036 fh1EvtSelection->Fill(5.);\r
1037 \r
1038 \r
1039 //___ fetch jets __________________________________________________________________________\r
1040 \r
1041 Int_t nJ = GetListOfJets(fJetsRec, kJetsRec);\r
1042 Int_t nRecJets = 0;\r
1043 if(nJ>=0) nRecJets = fJetsRec->GetEntries();\r
1044 if(fDebug>2)Printf("%s:%d Selected Rec jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);\r
1045 if(nJ != nRecJets) Printf("%s:%d Mismatch Selected Rec Jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);\r
1046\r
1047 Int_t nJCuts = GetListOfJets(fJetsRecCuts, kJetsRecAcceptance);\r
1048 Int_t nRecJetsCuts = 0;\r
1049 if(nJCuts>=0) nRecJetsCuts = fJetsRecCuts->GetEntries();\r
1050 if(fDebug>2)Printf("%s:%d Selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);\r
1051 if(nRecJetsCuts != nJCuts) Printf("%s:%d Mismatch selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);\r
1052 fh1nRecJetsCuts->Fill(nRecJetsCuts);\r
1053\r
1054 \r
1055 if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear() \r
1056 Int_t nJGen = GetListOfJets(fJetsGen, fJetTypeGen);\r
1057 Int_t nGenJets = 0;\r
1058 if(nJGen>=0) nGenJets = fJetsGen->GetEntries();\r
1059 if(fDebug>2)Printf("%s:%d Selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);\r
1060 if(nJGen != nGenJets) Printf("%s:%d Mismatch selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);\r
1061 fh1nGenJets->Fill(nGenJets);\r
1062\r
1063\r
1064 //____ fetch particles __________________________________________________________\r
1065 \r
1066 Int_t nT = GetListOfTracks(fTracksRec, kTrackAOD);\r
1067 Int_t nRecPart = 0;\r
1068 if(nT>=0) nRecPart = fTracksRec->GetEntries();\r
1069 if(fDebug>2)Printf("%s:%d Selected Rec tracks: %d %d",(char*)__FILE__,__LINE__,nT,nRecPart);\r
1070 if(nRecPart != nT) Printf("%s:%d Mismatch selected Rec tracks: %d %d",(char*)__FILE__,__LINE__,nT,nRecPart);\r
1071 \r
1072\r
1073 Int_t nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODCuts);\r
1074 Int_t nRecPartCuts = 0;\r
1075 if(nTCuts>=0) nRecPartCuts = fTracksRecCuts->GetEntries();\r
1076 if(fDebug>2)Printf("%s:%d Selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);\r
1077 if(nRecPartCuts != nTCuts) Printf("%s:%d Mismatch selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);\r
1078 fh1EvtMult->Fill(nRecPartCuts);\r
1079\r
1080\r
1081 Int_t nTGen = GetListOfTracks(fTracksGen,fTrackTypeGen);\r
1082 Int_t nGenPart = 0;\r
1083 if(nTGen>=0) nGenPart = fTracksGen->GetEntries();\r
1084 if(fDebug>2)Printf("%s:%d Selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);\r
1085 if(nGenPart != nTGen) Printf("%s:%d Mismatch selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);\r
1086 \r
1087 \r
1088 //____ analysis, fill histos ___________________________________________________\r
1089 \r
1090 // loop over tracks\r
1091\r
1092 for(Int_t it=0; it<nRecPart; ++it){\r
1093 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksRec->At(it));\r
1094 fQATrackHistosRec->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());\r
1095 }\r
1096 for(Int_t it=0; it<nRecPartCuts; ++it){\r
1097 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksRecCuts->At(it));\r
1098 fQATrackHistosRecCuts->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());\r
1099 }\r
1100 for(Int_t it=0; it<nGenPart; ++it){\r
1101 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksGen->At(it));\r
1102 fQATrackHistosGen->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());\r
1103 }\r
1104 \r
1105 // loop over jets\r
1106\r
1107 for(Int_t ij=0; ij<nRecJets; ++ij){\r
1108\r
1109 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRec->At(ij));\r
1110 fQAJetHistosRec->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());\r
1111 }\r
1112 \r
1113\r
1114 for(Int_t ij=0; ij<nRecJetsCuts; ++ij){\r
1115\r
1116 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRecCuts->At(ij));\r
1117 fQAJetHistosRecCuts->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());\r
1118\r
1119 if(ij==0){ // leading jet\r
1120 \r
1121 fQAJetHistosRecCutsLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt() );\r
1122 \r
1123 TList* jettracklist = new TList();\r
1124 Double_t sumPt = 0.;\r
1125 Float_t leadTrackPt = 0.;\r
1126 \r
1127 if(GetFFRadius()<=0){\r
1128 GetJetTracksTrackrefs(jettracklist, jet);\r
1129 } else {\r
1130 GetJetTracksPointing(fTracksRecCuts, jettracklist, jet, GetFFRadius(), sumPt);\r
1131 }\r
1132 \r
1133 for(Int_t it=0; it<jettracklist->GetSize(); ++it){\r
1134 Float_t trackPt = (dynamic_cast<AliVParticle*> (jettracklist->At(it)))->Pt();\r
1135 Float_t jetPt = jet->Pt();\r
1136 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;\r
1137 \r
1138 fFFHistosRecCuts->FillFF( trackPt, jetPt, incrementJetPt);\r
1139 \r
1140 if(it==0){ \r
1141 leadTrackPt = trackPt;\r
1142 fFFHistosRecLeadingTrack->FillFF( leadTrackPt, jetPt, kTRUE);\r
1143 }\r
1144 fFFHistosRecLeading->FillFF( trackPt, leadTrackPt , incrementJetPt);\r
1145 }\r
1146 \r
1147 delete jettracklist;\r
1148 }\r
1149 }\r
1150 \r
1151\r
1152 for(Int_t ij=0; ij<nGenJets; ++ij){\r
1153\r
1154 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsGen->At(ij));\r
1155 fQAJetHistosGen->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());\r
1156 \r
1157 if(ij==0){ // leading jet\r
1158 \r
1159 fQAJetHistosGenLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());\r
1160 \r
1161 TList* jettracklist = new TList();\r
1162 Double_t sumPt = 0.;\r
1163 Float_t leadTrackPt = 0.;\r
1164 \r
1165 if(GetFFRadius()<=0){\r
1166 GetJetTracksTrackrefs(jettracklist, jet);\r
1167 } else {\r
1168 GetJetTracksPointing(fTracksGen, jettracklist, jet, GetFFRadius(), sumPt);\r
1169 }\r
1170 \r
1171 for(Int_t it=0; it<jettracklist->GetSize(); ++it){\r
1172 Float_t trackPt = (dynamic_cast<AliVParticle*>(jettracklist->At(it)))->Pt();\r
1173 Float_t jetPt = jet->Pt();\r
1174 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;\r
1175\r
1176 fFFHistosGen->FillFF( trackPt, jetPt, incrementJetPt);\r
1177 \r
1178 if(it==0){ \r
1179 leadTrackPt = trackPt;\r
1180 fFFHistosGenLeadingTrack->FillFF( leadTrackPt, jetPt, kTRUE);\r
1181 }\r
1182 fFFHistosGenLeading->FillFF( trackPt, leadTrackPt, incrementJetPt);\r
1183 }\r
1184 \r
1185 delete jettracklist;\r
1186 }\r
1187 }\r
1188 \r
1189 fTracksRec->Clear();\r
1190 fTracksRecCuts->Clear();\r
1191 fTracksGen->Clear();\r
1192 fJetsRec->Clear();\r
1193 fJetsRecCuts->Clear();\r
1194 fJetsGen->Clear();\r
1195\r
1196 //Post output data.\r
1197 PostData(1, fCommonHistList);\r
1198 \r
1199}\r
1200\r
1201//______________________________________________________________\r
1202void AliAnalysisTaskFragmentationFunction::Terminate(Option_t *) \r
1203{\r
1204 // terminated\r
1205\r
1206 if(fDebug > 1) printf("AliAnalysisTaskFragmentationFunction::Terminate() \n");\r
1207} \r
1208\r
1209//_________________________________________________________________________________\r
1210Int_t AliAnalysisTaskFragmentationFunction::GetListOfTracks(TList *list, Int_t type)\r
1211{\r
1212 // fill list of tracks selected according to type\r
1213\r
1214 if(fDebug > 2) Printf("%s:%d Selecting tracks with %d", (char*)__FILE__,__LINE__,type);\r
1215 \r
1216 if(!list){\r
1217 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);\r
1218 return -1;\r
1219 }\r
1220\r
1221 if(type==kTrackUndef) return -1;\r
1222 \r
1223 Int_t iCount = 0;\r
1224 if(type==kTrackAODCuts || type==kTrackAOD){\r
1225\r
1226 // all rec. tracks, esd filter mask, eta range\r
1227 if(!fAOD) return -1;\r
1228 \r
1229 for(Int_t it=0; it<fAOD->GetNumberOfTracks(); ++it){\r
1230 AliAODTrack *tr = fAOD->GetTrack(it);\r
1231 \r
1232 if(type == kTrackAODCuts){\r
1233 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;\r
1234 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;\r
1235 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;\r
1236 if(tr->Pt() < fTrackPtCut) continue;\r
1237 }\r
1238 list->Add(tr);\r
1239 iCount++;\r
1240 }\r
1241 }\r
1242 else if (type==kTrackKineAll || type==kTrackKineCharged || type==kTrackKineChargedAcceptance){\r
1243 // kine particles, all or rather charged\r
1244 if(!fMCEvent) return iCount;\r
1245 \r
1246 for(Int_t it=0; it<fMCEvent->GetNumberOfTracks(); ++it){\r
1247 AliMCParticle* part = (AliMCParticle*) fMCEvent->GetTrack(it);\r
1248 \r
1249 if(type == kTrackKineCharged || type == kTrackKineChargedAcceptance){\r
1250 if(part->Charge()==0) continue;\r
1251 \r
1252 if(type == kTrackKineChargedAcceptance && \r
1253 ( part->Eta() < fTrackEtaMin\r
1254 || part->Eta() > fTrackEtaMax\r
1255 || part->Phi() < fTrackPhiMin\r
1256 || part->Phi() > fTrackPhiMax \r
1257 || part->Pt() < fTrackPtCut)) continue;\r
1258 }\r
1259 \r
1260 list->Add(part);\r
1261 iCount++;\r
1262 }\r
1263 }\r
1264 else if (type==kTrackAODMCCharged || type==kTrackAODMCAll || type==kTrackAODMCChargedAcceptance) {\r
1265 // MC particles (from AOD), physical primaries, all or rather charged or rather charged within acceptance\r
1266 if(!fAOD) return -1;\r
1267 \r
1268 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));\r
1269 if(!tca)return iCount;\r
1270 \r
1271 for(int it=0; it<tca->GetEntriesFast(); ++it){\r
1272 AliAODMCParticle *part = dynamic_cast<AliAODMCParticle*>(tca->At(it));\r
1273 if(!part->IsPhysicalPrimary())continue;\r
1274 \r
1275 if (type==kTrackAODMCCharged || type==kTrackAODMCChargedAcceptance){\r
1276 if(part->Charge()==0) continue;\r
1277 if(type==kTrackAODMCChargedAcceptance && \r
1278 ( part->Eta() > fTrackEtaMax\r
1279 || part->Eta() < fTrackEtaMin\r
1280 || part->Phi() > fTrackPhiMax\r
1281 || part->Phi() < fTrackPhiMin\r
1282 || part->Pt() < fTrackPtCut)) continue;\r
1283 }\r
1284 \r
1285 list->Add(part);\r
1286 iCount++;\r
1287 }\r
1288 }\r
1289 \r
1290 list->Sort();\r
1291 return iCount;\r
1292 \r
1293}\r
1294// _______________________________________________________________________________\r
1295Int_t AliAnalysisTaskFragmentationFunction::GetListOfJets(TList *list, Int_t type)\r
1296{\r
1297 // fill list of jets selected according to type\r
1298 \r
1299 if(!list){\r
1300 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);\r
1301 return -1;\r
1302 }\r
1303\r
1304 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets\r
1305\r
1306 if(fBranchRecJets.Length()==0){\r
1307 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);\r
1308 if(fDebug>1)fAOD->Print();\r
1309 return 0;\r
1310 }\r
1311\r
1312 TClonesArray *aodRecJets = 0x0;\r
1313 if(fBranchRecJets.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAOD->FindListObject(fBranchRecJets.Data()));\r
1314 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAOD->GetList()->FindObject(fBranchRecJets.Data()));\r
1315\r
1316 if(!aodRecJets){\r
1317 if(fBranchRecJets.Length()) Printf("%s:%d no reconstructed jet array with name %s found", (char*)__FILE__,__LINE__,fBranchRecJets.Data());\r
1318\r
1319 if(fDebug>1)fAOD->Print();\r
1320 return 0;\r
1321 }\r
1322\r
1323 Int_t nRecJets = 0;\r
1324 \r
1325 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){\r
1326\r
1327 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));\r
1328 if(!tmp) continue;\r
1329 \r
1330 if( tmp->Pt() < fJetPtCut ) continue;\r
1331 if( type == kJetsRecAcceptance &&\r
1332 ( tmp->Eta() < fJetEtaMin\r
1333 || tmp->Eta() > fJetEtaMax\r
1334 || tmp->Phi() < fJetPhiMin\r
1335 || tmp->Phi() > fJetPhiMax )) continue;\r
1336 \r
1337 list->Add(tmp);\r
1338 \r
1339 nRecJets++;\r
1340 }\r
1341\r
1342 list->Sort();\r
1343 return nRecJets;\r
1344 }\r
1345 else if(type == kJetsKine || type == kJetsKineAcceptance){\r
1346 \r
1347 // generated jets\r
1348 Int_t nGenJets = 0;\r
1349 \r
1350 if(!fMCEvent){\r
1351 if(fDebug>1) Printf("%s:%d no mcEvent",(char*)__FILE__,__LINE__);\r
1352 return 0;\r
1353 }\r
1354 \r
1355 AliGenPythiaEventHeader* pythiaGenHeader = AliAnalysisHelperJetTasks::GetPythiaEventHeader(fMCEvent);\r
1356 if(!pythiaGenHeader){\r
1357 Printf("%s:%d no pythiaGenHeader found", (char*)__FILE__,__LINE__);\r
1358 return 0;\r
1359 }\r
1360 \r
1361 // fetch the pythia generated jets\r
1362 for(int ip=0; ip<pythiaGenHeader->NTriggerJets(); ++ip){\r
1363 \r
1364 Float_t p[4];\r
1365 AliAODJet *jet = new AliAODJet();\r
1366 pythiaGenHeader->TriggerJet(ip, p);\r
1367 jet->SetPxPyPzE(p[0], p[1], p[2], p[3]);\r
1368\r
1369 if( type == kJetsKineAcceptance &&\r
1370 ( jet->Eta() < fJetEtaMin\r
1371 || jet->Eta() > fJetEtaMax\r
1372 || jet->Phi() < fJetPhiMin\r
1373 || jet->Phi() > fJetPhiMax )) continue;\r
1374 \r
1375 list->Add(jet);\r
1376 nGenJets++;\r
1377 }\r
1378 list->Sort();\r
1379 return nGenJets;\r
1380 }\r
1381 else if(type == kJetsGen || type == kJetsGenAcceptance ){\r
1382\r
1383 if(fBranchGenJets.Length()==0){\r
1384 if(fDebug>1) Printf("%s:%d no gen jet branch specified", (char*)__FILE__,__LINE__);\r
1385 return 0;\r
1386 }\r
1387 \r
1388 TClonesArray *aodGenJets = 0x0;\r
1389 if(fBranchGenJets.Length()) aodGenJets = dynamic_cast<TClonesArray*>(fAOD->FindListObject(fBranchGenJets.Data()));\r
1390 if(!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAOD->GetList()->FindObject(fBranchGenJets.Data()));\r
1391\r
1392 if(!aodGenJets){\r
1393 if(fDebug>0){\r
1394 if(fBranchGenJets.Length()) Printf("%s:%d Generated jet branch %s not found",(char*)__FILE__,__LINE__,fBranchGenJets.Data());\r
1395 }\r
1396 if(fDebug>1)fAOD->Print();\r
1397 return 0;\r
1398 }\r
1399\r
1400 Int_t nGenJets = 0;\r
1401 \r
1402 for(Int_t ig=0; ig<aodGenJets->GetEntries(); ++ig){\r
1403 \r
1404 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodGenJets->At(ig));\r
1405 if(!tmp) continue;\r
1406 \r
1407 if( tmp->Pt() < fJetPtCut ) continue;\r
1408 if( type == kJetsGenAcceptance &&\r
1409 ( tmp->Eta() < fJetEtaMin\r
1410 || tmp->Eta() > fJetEtaMax\r
1411 || tmp->Phi() < fJetPhiMin\r
1412 || tmp->Phi() > fJetPhiMax )) continue;\r
1413 \r
1414 list->Add(tmp);\r
1415 \r
1416 nGenJets++;\r
1417 }\r
1418 list->Sort();\r
1419 return nGenJets;\r
1420 } \r
1421 else{\r
1422 if(fDebug>0)Printf("%s:%d no such type %d",(char*)__FILE__,__LINE__,type);\r
1423 return 0;\r
1424 }\r
1425}\r
1426\r
1427\r
1428// __________________________________________________________________________________________\r
1429void AliAnalysisTaskFragmentationFunction::SetProperties(TH1* h,const char* x, const char* y)\r
1430{\r
1431 //Set properties of histos (x and y title)\r
1432\r
1433 h->SetXTitle(x);\r
1434 h->SetYTitle(y);\r
1435 h->GetXaxis()->SetTitleColor(1);\r
1436 h->GetYaxis()->SetTitleColor(1);\r
1437}\r
1438\r
1439// _________________________________________________________________________________________________________\r
1440void AliAnalysisTaskFragmentationFunction::SetProperties(TH2* h,const char* x, const char* y, const char* z)\r
1441{\r
1442 //Set properties of histos (x,y and z title)\r
1443\r
1444 h->SetXTitle(x);\r
1445 h->SetYTitle(y);\r
1446 h->SetZTitle(z);\r
1447 h->GetXaxis()->SetTitleColor(1);\r
1448 h->GetYaxis()->SetTitleColor(1);\r
1449 h->GetZaxis()->SetTitleColor(1);\r
1450}\r
1451\r
1452// ________________________________________________________________________________________________________________________________________________________\r
1453void AliAnalysisTaskFragmentationFunction::GetJetTracksPointing(TList* inputlist, TList* outputlist, AliAODJet* jet, const Double_t radius,Double_t& sumPt)\r
1454{\r
1455 // fill list of tracks in cone around jet axis \r
1456\r
1457 sumPt = 0;\r
1458\r
1459 Double_t jetMom[3];\r
1460 jet->PxPyPz(jetMom);\r
1461 TVector3 jet3mom(jetMom);\r
1462\r
1463 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){\r
1464\r
1465 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));\r
1466\r
1467 Double_t trackMom[3];\r
1468 track->PxPyPz(trackMom);\r
1469 TVector3 track3mom(trackMom);\r
1470\r
1471 Double_t dR = jet3mom.DeltaR(track3mom);\r
1472\r
1473 if(dR<radius){\r
1474\r
1475 outputlist->Add(track);\r
1476 \r
1477 sumPt += track->Pt();\r
1478 }\r
1479 }\r
1480 \r
1481 outputlist->Sort();\r
1482}\r
1483\r
1484// ___________________________________________________________________________________________\r
1485void AliAnalysisTaskFragmentationFunction::GetJetTracksTrackrefs(TList* list, AliAODJet* jet)\r
1486{\r
1487 // list of jet tracks from trackrefs\r
1488 \r
1489 Int_t nTracks = jet->GetRefTracks()->GetEntriesFast();\r
1490\r
1491 for (Int_t itrack=0; itrack<nTracks; itrack++) {\r
1492 \r
1493 AliVParticle* track = dynamic_cast<AliVParticle*>(jet->GetRefTracks()->At(itrack));\r
1494 if(!track){\r
1495 AliError("expected ref track not found ");\r
1496 continue;\r
1497 }\r
1498 \r
1499 list->Add(track);\r
1500 }\r
1501 \r
1502 list->Sort();\r
1503}\r