]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG4/JetTasks/AliAnalysisTaskFragmentationFunction.cxx
Fixed coding violations
[u/mrichter/AliRoot.git] / PWG4 / JetTasks / AliAnalysisTaskFragmentationFunction.cxx
CommitLineData
656dc810 1/*************************************************************************
2 * *
3 * Task for Fragmentation Function Analysis in PWG4 Jet Task Force Train *
4 * *
5 *************************************************************************/
6
7
8/**************************************************************************
9 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
10 * *
11 * Author: The ALICE Off-line Project. *
12 * Contributors are mentioned in the code where appropriate. *
13 * *
14 * Permission to use, copy, modify and distribute this software and its *
15 * documentation strictly for non-commercial purposes is hereby granted *
16 * without fee, provided that the above copyright notice appears in all *
17 * copies and that both the copyright notice and this permission notice *
18 * appear in the supporting documentation. The authors make no claims *
19 * about the suitability of this software for any purpose. It is *
20 * provided "as is" without express or implied warranty. *
21 **************************************************************************/
22
23/* $Id: */
24
25#include "TList.h"
26#include "TH1F.h"
27#include "TH2F.h"
28#include "TString.h"
29#include "THnSparse.h"
ac017ff3 30#include "TProfile.h"
31#include "TFile.h"
32#include "TKey.h"
656dc810 33
34#include "AliAODInputHandler.h"
35#include "AliAODHandler.h"
36#include "AliESDEvent.h"
37#include "AliAODMCParticle.h"
38#include "AliAODJet.h"
39#include "AliGenPythiaEventHeader.h"
5fde4a38 40#include "AliGenHijingEventHeader.h"
656dc810 41#include "AliInputEventHandler.h"
42
43#include "AliAnalysisHelperJetTasks.h"
44#include "AliAnalysisManager.h"
45#include "AliAnalysisTaskSE.h"
3e1c1eee 46#include "AliVParticle.h"
47#include "AliVEvent.h"
656dc810 48
49#include "AliAnalysisTaskFragmentationFunction.h"
50
51
52ClassImp(AliAnalysisTaskFragmentationFunction)
53
54//____________________________________________________________________________
55AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction()
56 : AliAnalysisTaskSE()
57 ,fESD(0)
58 ,fAOD(0)
656dc810 59 ,fBranchRecJets("jets")
60 ,fBranchGenJets("")
61 ,fTrackTypeGen(0)
62 ,fJetTypeGen(0)
fe343c6b 63 ,fJetTypeRecEff(0)
656dc810 64 ,fFilterMask(0)
ac017ff3 65 ,fUsePhysicsSelection(kTRUE)
656dc810 66 ,fTrackPtCut(0)
67 ,fTrackEtaMin(0)
68 ,fTrackEtaMax(0)
69 ,fTrackPhiMin(0)
70 ,fTrackPhiMax(0)
71 ,fJetPtCut(0)
72 ,fJetEtaMin(0)
73 ,fJetEtaMax(0)
74 ,fJetPhiMin(0)
75 ,fJetPhiMax(0)
76 ,fDiJetCut(0)
77 ,fDiJetDeltaPhiCut(0)
78 ,fDiJetPtFractionCut(0)
79 ,fDiJetCDFCut(0)
80 ,fDiJetKindBins(0)
81 ,fFFRadius(0)
c2658535 82 ,fAvgTrials(0)
656dc810 83 ,fTracksRec(0)
84 ,fTracksRecCuts(0)
85 ,fTracksGen(0)
fe343c6b 86 ,fTracksAODMCCharged(0)
87 ,fTracksRecQualityCuts(0)
656dc810 88 ,fJetsRec(0)
89 ,fJetsRecCuts(0)
90 ,fJetsGen(0)
fe343c6b 91 ,fJetsRecEff(0)
656dc810 92 ,fQATrackHistosRec(0)
93 ,fQATrackHistosRecCuts(0)
94 ,fQATrackHistosGen(0)
95 ,fQAJetHistosRec(0)
96 ,fQAJetHistosRecCuts(0)
97 ,fQAJetHistosRecCutsLeading(0)
98 ,fQAJetHistosGen(0)
99 ,fQAJetHistosGenLeading(0)
fe343c6b 100 ,fQAJetHistosRecEffLeading(0)
656dc810 101 ,fFFHistosRecCuts(0)
102 ,fFFHistosRecLeading(0)
103 ,fFFHistosRecLeadingTrack(0)
104 ,fFFHistosGen(0)
105 ,fFFHistosGenLeading(0)
106 ,fFFHistosGenLeadingTrack(0)
107 ,fIJHistosRecCuts(0)
108 ,fIJHistosRecLeading(0)
109 ,fIJHistosRecLeadingTrack(0)
110 ,fIJHistosGen(0)
111 ,fIJHistosGenLeading(0)
112 ,fIJHistosGenLeadingTrack(0)
113 ,fFFDiJetHistosRecCuts(0)
114 ,fFFDiJetHistosRecLeading(0)
115 ,fFFDiJetHistosRecLeadingTrack(0)
116 ,fFFDiJetHistosGen(0)
117 ,fFFDiJetHistosGenLeading(0)
118 ,fFFDiJetHistosGenLeadingTrack(0)
119 ,fQADiJetHistosRecCuts(0)
120 ,fQADiJetHistosGen(0)
121 ,fQATrackHighPtThreshold(0)
122 ,fFFNBinsJetPt(0)
123 ,fFFJetPtMin(0)
124 ,fFFJetPtMax(0)
125 ,fFFNBinsPt(0)
126 ,fFFPtMin(0)
127 ,fFFPtMax(0)
128 ,fFFNBinsXi(0)
129 ,fFFXiMin(0)
130 ,fFFXiMax(0)
131 ,fFFNBinsZ(0)
132 ,fFFZMin(0)
133 ,fFFZMax(0)
134 ,fQAJetNBinsPt(0)
135 ,fQAJetPtMin(0)
136 ,fQAJetPtMax(0)
137 ,fQAJetNBinsEta(0)
138 ,fQAJetEtaMin(0)
139 ,fQAJetEtaMax(0)
140 ,fQAJetNBinsPhi(0)
141 ,fQAJetPhiMin(0)
142 ,fQAJetPhiMax(0)
143 ,fQATrackNBinsPt(0)
144 ,fQATrackPtMin(0)
145 ,fQATrackPtMax(0)
146 ,fQATrackNBinsEta(0)
147 ,fQATrackEtaMin(0)
148 ,fQATrackEtaMax(0)
149 ,fQATrackNBinsPhi(0)
150 ,fQATrackPhiMin(0)
151 ,fQATrackPhiMax(0)
152 ,fIJNBinsJetPt(0)
153 ,fIJJetPtMin(0)
154 ,fIJJetPtMax(0)
155 ,fIJNBinsPt(0)
156 ,fIJPtMin(0)
157 ,fIJPtMax(0)
158 ,fIJNBinsZ(0)
159 ,fIJZMin(0)
160 ,fIJZMax(0)
161 ,fIJNBinsCosTheta(0)
162 ,fIJCosThetaMin(0)
163 ,fIJCosThetaMax(0)
164 ,fIJNBinsTheta(0)
165 ,fIJThetaMin(0)
166 ,fIJThetaMax(0)
167 ,fIJNBinsJt(0)
168 ,fIJJtMin(0)
169 ,fIJJtMax(0)
170 ,fDiJetNBinsJetInvMass(0)
171 ,fDiJetJetInvMassMin(0)
172 ,fDiJetJetInvMassMax(0)
173 ,fDiJetNBinsJetPt(0)
174 ,fDiJetJetPtMin(0)
175 ,fDiJetJetPtMax(0)
176 ,fDiJetNBinsPt(0)
177 ,fDiJetPtMin(0)
178 ,fDiJetPtMax(0)
179 ,fDiJetNBinsXi(0)
180 ,fDiJetXiMin(0)
181 ,fDiJetXiMax(0)
182 ,fDiJetNBinsZ(0)
183 ,fDiJetZMin(0)
184 ,fDiJetZMax(0)
185 ,fQADiJetNBinsInvMass(0)
186 ,fQADiJetInvMassMin(0)
187 ,fQADiJetInvMassMax(0)
188 ,fQADiJetNBinsJetPt(0)
189 ,fQADiJetJetPtMin(0)
190 ,fQADiJetJetPtMax(0)
191 ,fQADiJetNBinsDeltaPhi(0)
192 ,fQADiJetDeltaPhiMin(0)
193 ,fQADiJetDeltaPhiMax(0)
194 ,fQADiJetNBinsDeltaEta(0)
195 ,fQADiJetDeltaEtaMin(0)
196 ,fQADiJetDeltaEtaMax(0)
197 ,fQADiJetNBinsDeltaPt(0)
198 ,fQADiJetDeltaPtMin(0)
199 ,fQADiJetDeltaPtMax(0)
200 ,fCommonHistList(0)
201 ,fh1EvtSelection(0)
202 ,fh1VertexNContributors(0)
203 ,fh1VertexZ(0)
204 ,fh1EvtMult(0)
ac017ff3 205 ,fh1Xsec(0)
206 ,fh1Trials(0)
207 ,fh1PtHard(0)
208 ,fh1PtHardTrials(0)
656dc810 209 ,fh1nRecJetsCuts(0)
210 ,fh1nGenJets(0)
fe343c6b 211 ,fh1nRecEffJets(0)
212 ,fhnSingleTrackRecEffHisto(0)
213 ,fhnJetTrackRecEffHisto(0)
656dc810 214{
215 // default constructor
216}
217
218//__________________________________________________________________________________________
219AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const char *name)
220 : AliAnalysisTaskSE(name)
221 ,fESD(0)
222 ,fAOD(0)
656dc810 223 ,fBranchRecJets("jets")
224 ,fBranchGenJets("")
225 ,fTrackTypeGen(0)
226 ,fJetTypeGen(0)
fe343c6b 227 ,fJetTypeRecEff(0)
656dc810 228 ,fFilterMask(0)
ac017ff3 229 ,fUsePhysicsSelection(kTRUE)
656dc810 230 ,fTrackPtCut(0)
231 ,fTrackEtaMin(0)
232 ,fTrackEtaMax(0)
233 ,fTrackPhiMin(0)
234 ,fTrackPhiMax(0)
235 ,fJetPtCut(0)
236 ,fJetEtaMin(0)
237 ,fJetEtaMax(0)
238 ,fJetPhiMin(0)
239 ,fJetPhiMax(0)
240 ,fDiJetCut(0)
241 ,fDiJetDeltaPhiCut(0)
242 ,fDiJetPtFractionCut(0)
243 ,fDiJetCDFCut(0)
244 ,fDiJetKindBins(0)
245 ,fFFRadius(0)
c2658535 246 ,fAvgTrials(0)
656dc810 247 ,fTracksRec(0)
248 ,fTracksRecCuts(0)
249 ,fTracksGen(0)
fe343c6b 250 ,fTracksAODMCCharged(0)
251 ,fTracksRecQualityCuts(0)
656dc810 252 ,fJetsRec(0)
253 ,fJetsRecCuts(0)
254 ,fJetsGen(0)
fe343c6b 255 ,fJetsRecEff(0)
656dc810 256 ,fQATrackHistosRec(0)
257 ,fQATrackHistosRecCuts(0)
258 ,fQATrackHistosGen(0)
259 ,fQAJetHistosRec(0)
260 ,fQAJetHistosRecCuts(0)
261 ,fQAJetHistosRecCutsLeading(0)
262 ,fQAJetHistosGen(0)
263 ,fQAJetHistosGenLeading(0)
fe343c6b 264 ,fQAJetHistosRecEffLeading(0)
656dc810 265 ,fFFHistosRecCuts(0)
266 ,fFFHistosRecLeading(0)
267 ,fFFHistosRecLeadingTrack(0)
268 ,fFFHistosGen(0)
269 ,fFFHistosGenLeading(0)
270 ,fFFHistosGenLeadingTrack(0)
271 ,fIJHistosRecCuts(0)
272 ,fIJHistosRecLeading(0)
273 ,fIJHistosRecLeadingTrack(0)
274 ,fIJHistosGen(0)
275 ,fIJHistosGenLeading(0)
276 ,fIJHistosGenLeadingTrack(0)
277 ,fFFDiJetHistosRecCuts(0)
278 ,fFFDiJetHistosRecLeading(0)
279 ,fFFDiJetHistosRecLeadingTrack(0)
280 ,fFFDiJetHistosGen(0)
281 ,fFFDiJetHistosGenLeading(0)
282 ,fFFDiJetHistosGenLeadingTrack(0)
283 ,fQADiJetHistosRecCuts(0)
284 ,fQADiJetHistosGen(0)
285 ,fQATrackHighPtThreshold(0)
286 ,fFFNBinsJetPt(0)
287 ,fFFJetPtMin(0)
288 ,fFFJetPtMax(0)
289 ,fFFNBinsPt(0)
290 ,fFFPtMin(0)
291 ,fFFPtMax(0)
292 ,fFFNBinsXi(0)
293 ,fFFXiMin(0)
294 ,fFFXiMax(0)
295 ,fFFNBinsZ(0)
296 ,fFFZMin(0)
297 ,fFFZMax(0)
298 ,fQAJetNBinsPt(0)
299 ,fQAJetPtMin(0)
300 ,fQAJetPtMax(0)
301 ,fQAJetNBinsEta(0)
302 ,fQAJetEtaMin(0)
303 ,fQAJetEtaMax(0)
304 ,fQAJetNBinsPhi(0)
305 ,fQAJetPhiMin(0)
306 ,fQAJetPhiMax(0)
307 ,fQATrackNBinsPt(0)
308 ,fQATrackPtMin(0)
309 ,fQATrackPtMax(0)
310 ,fQATrackNBinsEta(0)
311 ,fQATrackEtaMin(0)
312 ,fQATrackEtaMax(0)
313 ,fQATrackNBinsPhi(0)
314 ,fQATrackPhiMin(0)
315 ,fQATrackPhiMax(0)
316 ,fIJNBinsJetPt(0)
317 ,fIJJetPtMin(0)
318 ,fIJJetPtMax(0)
319 ,fIJNBinsPt(0)
320 ,fIJPtMin(0)
321 ,fIJPtMax(0)
322 ,fIJNBinsZ(0)
323 ,fIJZMin(0)
324 ,fIJZMax(0)
325 ,fIJNBinsCosTheta(0)
326 ,fIJCosThetaMin(0)
327 ,fIJCosThetaMax(0)
328 ,fIJNBinsTheta(0)
329 ,fIJThetaMin(0)
330 ,fIJThetaMax(0)
331 ,fIJNBinsJt(0)
332 ,fIJJtMin(0)
333 ,fIJJtMax(0)
334 ,fDiJetNBinsJetInvMass(0)
335 ,fDiJetJetInvMassMin(0)
336 ,fDiJetJetInvMassMax(0)
337 ,fDiJetNBinsJetPt(0)
338 ,fDiJetJetPtMin(0)
339 ,fDiJetJetPtMax(0)
340 ,fDiJetNBinsPt(0)
341 ,fDiJetPtMin(0)
342 ,fDiJetPtMax(0)
343 ,fDiJetNBinsXi(0)
344 ,fDiJetXiMin(0)
345 ,fDiJetXiMax(0)
346 ,fDiJetNBinsZ(0)
347 ,fDiJetZMin(0)
348 ,fDiJetZMax(0)
349 ,fQADiJetNBinsInvMass(0)
350 ,fQADiJetInvMassMin(0)
351 ,fQADiJetInvMassMax(0)
352 ,fQADiJetNBinsJetPt(0)
353 ,fQADiJetJetPtMin(0)
354 ,fQADiJetJetPtMax(0)
355 ,fQADiJetNBinsDeltaPhi(0)
356 ,fQADiJetDeltaPhiMin(0)
357 ,fQADiJetDeltaPhiMax(0)
358 ,fQADiJetNBinsDeltaEta(0)
359 ,fQADiJetDeltaEtaMin(0)
360 ,fQADiJetDeltaEtaMax(0)
361 ,fQADiJetNBinsDeltaPt(0)
362 ,fQADiJetDeltaPtMin(0)
363 ,fQADiJetDeltaPtMax(0)
364 ,fCommonHistList(0)
365 ,fh1EvtSelection(0)
366 ,fh1VertexNContributors(0)
367 ,fh1VertexZ(0)
368 ,fh1EvtMult(0)
ac017ff3 369 ,fh1Xsec(0)
370 ,fh1Trials(0)
371 ,fh1PtHard(0)
372 ,fh1PtHardTrials(0)
656dc810 373 ,fh1nRecJetsCuts(0)
374 ,fh1nGenJets(0)
fe343c6b 375 ,fh1nRecEffJets(0)
376 ,fhnSingleTrackRecEffHisto(0)
377 ,fhnJetTrackRecEffHisto(0)
656dc810 378{
379 // constructor
380
381 DefineOutput(1,TList::Class());
382
383
384}
385
386//__________________________________________________________________________________________________________________________
387AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const AliAnalysisTaskFragmentationFunction &copy)
388 : AliAnalysisTaskSE()
389 ,fESD(copy.fESD)
390 ,fAOD(copy.fAOD)
656dc810 391 ,fBranchRecJets(copy.fBranchRecJets)
392 ,fBranchGenJets(copy.fBranchGenJets)
393 ,fTrackTypeGen(copy.fTrackTypeGen)
394 ,fJetTypeGen(copy.fJetTypeGen)
fe343c6b 395 ,fJetTypeRecEff(copy.fJetTypeRecEff)
656dc810 396 ,fFilterMask(copy.fFilterMask)
ac017ff3 397 ,fUsePhysicsSelection(copy.fUsePhysicsSelection)
656dc810 398 ,fTrackPtCut(copy.fTrackPtCut)
399 ,fTrackEtaMin(copy.fTrackEtaMin)
400 ,fTrackEtaMax(copy.fTrackEtaMax)
401 ,fTrackPhiMin(copy.fTrackPhiMin)
402 ,fTrackPhiMax(copy.fTrackPhiMax)
403 ,fJetPtCut(copy.fJetPtCut)
404 ,fJetEtaMin(copy.fJetEtaMin)
405 ,fJetEtaMax(copy.fJetEtaMax)
406 ,fJetPhiMin(copy.fJetPhiMin)
fe343c6b 407 ,fJetPhiMax(copy.fJetPhiMax)
656dc810 408 ,fDiJetCut(copy.fDiJetCut)
409 ,fDiJetDeltaPhiCut(copy.fDiJetDeltaPhiCut)
410 ,fDiJetPtFractionCut(copy.fDiJetPtFractionCut)
411 ,fDiJetCDFCut(copy.fDiJetCDFCut)
412 ,fDiJetKindBins(copy.fDiJetKindBins)
413 ,fFFRadius(copy.fFFRadius)
c2658535 414 ,fAvgTrials(copy.fAvgTrials)
656dc810 415 ,fTracksRec(copy.fTracksRec)
416 ,fTracksRecCuts(copy.fTracksRecCuts)
417 ,fTracksGen(copy.fTracksGen)
fe343c6b 418 ,fTracksAODMCCharged(copy.fTracksAODMCCharged)
419 ,fTracksRecQualityCuts(copy.fTracksRecQualityCuts)
656dc810 420 ,fJetsRec(copy.fJetsRec)
421 ,fJetsRecCuts(copy.fJetsRecCuts)
422 ,fJetsGen(copy.fJetsGen)
fe343c6b 423 ,fJetsRecEff(copy.fJetsRecEff)
656dc810 424 ,fQATrackHistosRec(copy.fQATrackHistosRec)
425 ,fQATrackHistosRecCuts(copy.fQATrackHistosRecCuts)
426 ,fQATrackHistosGen(copy.fQATrackHistosGen)
427 ,fQAJetHistosRec(copy.fQAJetHistosRec)
428 ,fQAJetHistosRecCuts(copy.fQAJetHistosRecCuts)
429 ,fQAJetHistosRecCutsLeading(copy.fQAJetHistosRecCutsLeading)
430 ,fQAJetHistosGen(copy.fQAJetHistosGen)
431 ,fQAJetHistosGenLeading(copy.fQAJetHistosGenLeading)
fe343c6b 432 ,fQAJetHistosRecEffLeading(copy.fQAJetHistosRecEffLeading)
656dc810 433 ,fFFHistosRecCuts(copy.fFFHistosRecCuts)
434 ,fFFHistosRecLeading(copy.fFFHistosRecLeading)
435 ,fFFHistosRecLeadingTrack(copy.fFFHistosRecLeadingTrack)
436 ,fFFHistosGen(copy.fFFHistosGen)
437 ,fFFHistosGenLeading(copy.fFFHistosGenLeading)
438 ,fFFHistosGenLeadingTrack(copy.fFFHistosGenLeadingTrack)
439 ,fIJHistosRecCuts(copy.fIJHistosRecCuts)
440 ,fIJHistosRecLeading(copy.fIJHistosRecLeading)
441 ,fIJHistosRecLeadingTrack(copy.fIJHistosRecLeadingTrack)
442 ,fIJHistosGen(copy.fIJHistosGen)
443 ,fIJHistosGenLeading(copy.fIJHistosGenLeading)
444 ,fIJHistosGenLeadingTrack(copy.fIJHistosGenLeadingTrack)
445 ,fFFDiJetHistosRecCuts(copy.fFFDiJetHistosRecCuts)
446 ,fFFDiJetHistosRecLeading(copy.fFFDiJetHistosRecLeading)
447 ,fFFDiJetHistosRecLeadingTrack(copy.fFFDiJetHistosRecLeadingTrack)
448 ,fFFDiJetHistosGen(copy.fFFDiJetHistosGen)
449 ,fFFDiJetHistosGenLeading(copy.fFFDiJetHistosGenLeading)
450 ,fFFDiJetHistosGenLeadingTrack(copy.fFFDiJetHistosGenLeadingTrack)
451 ,fQADiJetHistosRecCuts(copy.fQADiJetHistosRecCuts)
452 ,fQADiJetHistosGen(copy.fQADiJetHistosGen)
453 ,fQATrackHighPtThreshold(copy.fQATrackHighPtThreshold)
454 ,fFFNBinsJetPt(copy.fFFNBinsJetPt)
455 ,fFFJetPtMin(copy.fFFJetPtMin)
456 ,fFFJetPtMax(copy.fFFJetPtMax)
457 ,fFFNBinsPt(copy.fFFNBinsPt)
458 ,fFFPtMin(copy.fFFPtMin)
459 ,fFFPtMax(copy.fFFPtMax)
460 ,fFFNBinsXi(copy.fFFNBinsXi)
461 ,fFFXiMin(copy.fFFXiMin)
462 ,fFFXiMax(copy.fFFXiMax)
463 ,fFFNBinsZ(copy.fFFNBinsZ)
464 ,fFFZMin(copy.fFFZMin)
465 ,fFFZMax(copy.fFFZMax)
466 ,fQAJetNBinsPt(copy.fQAJetNBinsPt)
467 ,fQAJetPtMin(copy.fQAJetPtMin)
468 ,fQAJetPtMax(copy.fQAJetPtMax)
469 ,fQAJetNBinsEta(copy.fQAJetNBinsEta)
470 ,fQAJetEtaMin(copy.fQAJetEtaMin)
471 ,fQAJetEtaMax(copy.fQAJetEtaMax)
472 ,fQAJetNBinsPhi(copy.fQAJetNBinsPhi)
473 ,fQAJetPhiMin(copy.fQAJetPhiMin)
474 ,fQAJetPhiMax(copy.fQAJetPhiMax)
475 ,fQATrackNBinsPt(copy.fQATrackNBinsPt)
476 ,fQATrackPtMin(copy.fQATrackPtMin)
477 ,fQATrackPtMax(copy.fQATrackPtMax)
478 ,fQATrackNBinsEta(copy.fQATrackNBinsEta)
479 ,fQATrackEtaMin(copy.fQATrackEtaMin)
480 ,fQATrackEtaMax(copy.fQATrackEtaMax)
481 ,fQATrackNBinsPhi(copy.fQATrackNBinsPhi)
482 ,fQATrackPhiMin(copy.fQATrackPhiMin)
483 ,fQATrackPhiMax(copy.fQATrackPhiMax)
484 ,fIJNBinsJetPt(copy.fIJNBinsJetPt)
485 ,fIJJetPtMin(copy.fIJJetPtMin)
486 ,fIJJetPtMax(copy.fIJJetPtMax)
487 ,fIJNBinsPt(copy.fIJNBinsPt)
488 ,fIJPtMin(copy.fIJPtMin)
489 ,fIJPtMax(copy.fIJPtMax)
490 ,fIJNBinsZ(copy.fIJNBinsZ)
491 ,fIJZMin(copy.fIJZMin)
492 ,fIJZMax(copy.fIJZMax)
493 ,fIJNBinsCosTheta(copy.fIJNBinsCosTheta)
494 ,fIJCosThetaMin(copy.fIJCosThetaMin)
495 ,fIJCosThetaMax(copy.fIJCosThetaMax)
496 ,fIJNBinsTheta(copy.fIJNBinsTheta)
497 ,fIJThetaMin(copy.fIJThetaMin)
498 ,fIJThetaMax(copy.fIJThetaMax)
499 ,fIJNBinsJt(copy.fIJNBinsJt)
500 ,fIJJtMin(copy.fIJJtMin)
501 ,fIJJtMax(copy.fIJJtMax)
502 ,fDiJetNBinsJetInvMass(copy.fDiJetNBinsJetInvMass)
503 ,fDiJetJetInvMassMin(copy.fDiJetJetInvMassMin)
504 ,fDiJetJetInvMassMax(copy.fDiJetJetInvMassMax)
505 ,fDiJetNBinsJetPt(copy.fDiJetNBinsJetPt)
506 ,fDiJetJetPtMin(copy.fDiJetJetPtMin)
507 ,fDiJetJetPtMax(copy.fDiJetJetPtMax)
508 ,fDiJetNBinsPt(copy.fDiJetNBinsPt)
509 ,fDiJetPtMin(copy.fDiJetPtMin)
510 ,fDiJetPtMax(copy.fDiJetPtMax)
511 ,fDiJetNBinsXi(copy.fDiJetNBinsXi)
512 ,fDiJetXiMin(copy.fDiJetXiMin)
513 ,fDiJetXiMax(copy.fDiJetXiMax)
514 ,fDiJetNBinsZ(copy.fDiJetNBinsZ)
515 ,fDiJetZMin(copy.fDiJetZMin)
516 ,fDiJetZMax(copy.fDiJetZMax)
517 ,fQADiJetNBinsInvMass(copy.fQADiJetNBinsInvMass)
518 ,fQADiJetInvMassMin(copy.fQADiJetInvMassMin)
519 ,fQADiJetInvMassMax(copy.fQADiJetInvMassMax)
520 ,fQADiJetNBinsJetPt(copy.fQADiJetNBinsJetPt)
521 ,fQADiJetJetPtMin(copy.fQADiJetJetPtMin)
522 ,fQADiJetJetPtMax(copy.fQADiJetJetPtMax)
523 ,fQADiJetNBinsDeltaPhi(copy.fQADiJetNBinsDeltaPhi)
524 ,fQADiJetDeltaPhiMin(copy.fQADiJetDeltaPhiMin)
525 ,fQADiJetDeltaPhiMax(copy.fQADiJetDeltaPhiMax)
526 ,fQADiJetNBinsDeltaEta(copy.fQADiJetNBinsDeltaEta)
527 ,fQADiJetDeltaEtaMin(copy.fQADiJetDeltaEtaMin)
528 ,fQADiJetDeltaEtaMax(copy.fQADiJetDeltaEtaMax)
529 ,fQADiJetNBinsDeltaPt(copy.fQADiJetNBinsDeltaPt)
530 ,fQADiJetDeltaPtMin(copy.fQADiJetDeltaPtMin)
531 ,fQADiJetDeltaPtMax(copy.fQADiJetDeltaPtMax)
532 ,fCommonHistList(copy.fCommonHistList)
533 ,fh1EvtSelection(copy.fh1EvtSelection)
534 ,fh1VertexNContributors(copy.fh1VertexNContributors)
535 ,fh1VertexZ(copy.fh1VertexZ)
536 ,fh1EvtMult(copy.fh1EvtMult)
ac017ff3 537 ,fh1Xsec(copy.fh1Xsec)
538 ,fh1Trials(copy.fh1Trials)
539 ,fh1PtHard(copy.fh1PtHard)
540 ,fh1PtHardTrials(copy.fh1PtHardTrials)
656dc810 541 ,fh1nRecJetsCuts(copy.fh1nRecJetsCuts)
542 ,fh1nGenJets(copy.fh1nGenJets)
fe343c6b 543 ,fh1nRecEffJets(copy.fh1nRecEffJets)
544 ,fhnSingleTrackRecEffHisto(copy.fhnSingleTrackRecEffHisto)
545 ,fhnJetTrackRecEffHisto(copy.fhnJetTrackRecEffHisto)
656dc810 546{
547 // copy constructor
548
549}
550
551// _________________________________________________________________________________________________________________________________
552AliAnalysisTaskFragmentationFunction& AliAnalysisTaskFragmentationFunction::operator=(const AliAnalysisTaskFragmentationFunction& o)
553{
554 // assignment
555
556 if(this!=&o){
557
558 AliAnalysisTaskSE::operator=(o);
559 fESD = o.fESD;
560 fAOD = o.fAOD;
656dc810 561 fBranchRecJets = o.fBranchRecJets;
562 fBranchGenJets = o.fBranchGenJets;
563 fTrackTypeGen = o.fTrackTypeGen;
564 fJetTypeGen = o.fJetTypeGen;
fe343c6b 565 fJetTypeRecEff = o.fJetTypeRecEff;
656dc810 566 fFilterMask = o.fFilterMask;
ac017ff3 567 fUsePhysicsSelection = o.fUsePhysicsSelection;
656dc810 568 fTrackPtCut = o.fTrackPtCut;
569 fTrackEtaMin = o.fTrackEtaMin;
570 fTrackEtaMax = o.fTrackEtaMax;
571 fTrackPhiMin = o.fTrackPhiMin;
572 fTrackPhiMax = o.fTrackPhiMax;
573 fJetPtCut = o.fJetPtCut;
574 fJetEtaMin = o.fJetEtaMin;
575 fJetEtaMax = o.fJetEtaMax;
576 fJetPhiMin = o.fJetPhiMin;
577 fJetPhiMax = o.fJetPhiMin;
578 fDiJetCut = o.fDiJetCut;
579 fDiJetDeltaPhiCut = o.fDiJetDeltaPhiCut;
580 fDiJetPtFractionCut = o.fDiJetPtFractionCut;
581 fDiJetCDFCut = o.fDiJetCDFCut;
582 fDiJetKindBins = o.fDiJetKindBins;
583 fFFRadius = o.fFFRadius;
c2658535 584 fAvgTrials = o.fAvgTrials;
656dc810 585 fTracksRec = o.fTracksRec;
586 fTracksRecCuts = o.fTracksRecCuts;
587 fTracksGen = o.fTracksGen;
fe343c6b 588 fTracksAODMCCharged = o.fTracksAODMCCharged;
589 fTracksRecQualityCuts = o.fTracksRecQualityCuts;
656dc810 590 fJetsRec = o.fJetsRec;
591 fJetsRecCuts = o.fJetsRecCuts;
592 fJetsGen = o.fJetsGen;
fe343c6b 593 fJetsRecEff = o.fJetsRecEff;
656dc810 594 fQATrackHistosRec = o.fQATrackHistosRec;
595 fQATrackHistosRecCuts = o.fQATrackHistosRecCuts;
596 fQATrackHistosGen = o.fQATrackHistosGen;
597 fQAJetHistosRec = o.fQAJetHistosRec;
598 fQAJetHistosRecCuts = o.fQAJetHistosRecCuts;
599 fQAJetHistosRecCutsLeading = o.fQAJetHistosRecCutsLeading;
600 fQAJetHistosGen = o.fQAJetHistosGen;
601 fQAJetHistosGenLeading = o.fQAJetHistosGenLeading;
fe343c6b 602 fQAJetHistosRecEffLeading = o.fQAJetHistosRecEffLeading;
656dc810 603 fFFHistosRecCuts = o.fFFHistosRecCuts;
604 fFFHistosRecLeading = o.fFFHistosRecLeading;
605 fFFHistosRecLeadingTrack = o.fFFHistosRecLeadingTrack;
606 fFFHistosGen = o.fFFHistosGen;
607 fFFHistosGenLeading = o.fFFHistosGenLeading;
608 fFFHistosGenLeadingTrack = o.fFFHistosGenLeadingTrack;
609 fIJHistosRecCuts = o.fIJHistosRecCuts;
610 fIJHistosRecLeading = o.fIJHistosRecLeading;
611 fIJHistosRecLeadingTrack = o.fIJHistosRecLeadingTrack;
612 fIJHistosGen = o.fIJHistosGen;
613 fIJHistosGenLeading = o.fIJHistosGenLeading;
614 fIJHistosGenLeadingTrack = o.fIJHistosGenLeadingTrack;
615 fFFDiJetHistosRecCuts = o.fFFDiJetHistosRecCuts;
616 fFFDiJetHistosRecLeading = o.fFFDiJetHistosRecLeading;
617 fFFDiJetHistosRecLeadingTrack = o.fFFDiJetHistosRecLeadingTrack;
618 fFFDiJetHistosGen = o.fFFDiJetHistosGen;
619 fFFDiJetHistosGenLeading = o.fFFDiJetHistosGenLeading;
620 fFFDiJetHistosGenLeadingTrack = o.fFFDiJetHistosGenLeadingTrack;
621 fQADiJetHistosRecCuts = o.fQADiJetHistosRecCuts;
622 fQADiJetHistosGen = o.fQADiJetHistosGen;
623 fQATrackHighPtThreshold = o.fQATrackHighPtThreshold;
624 fFFNBinsJetPt = o.fFFNBinsJetPt;
625 fFFJetPtMin = o.fFFJetPtMin;
626 fFFJetPtMax = o.fFFJetPtMax;
627 fFFNBinsPt = o.fFFNBinsPt;
628 fFFPtMin = o.fFFPtMin;
629 fFFPtMax = o.fFFPtMax;
630 fFFNBinsXi = o.fFFNBinsXi;
631 fFFXiMin = o.fFFXiMin;
632 fFFXiMax = o.fFFXiMax;
633 fFFNBinsZ = o.fFFNBinsZ;
634 fFFZMin = o.fFFZMin;
635 fFFZMax = o.fFFZMax;
636 fQAJetNBinsPt = o.fQAJetNBinsPt;
637 fQAJetPtMin = o.fQAJetPtMin;
638 fQAJetPtMax = o.fQAJetPtMax;
639 fQAJetNBinsEta = o.fQAJetNBinsEta;
640 fQAJetEtaMin = o.fQAJetEtaMin;
641 fQAJetEtaMax = o.fQAJetEtaMax;
642 fQAJetNBinsPhi = o.fQAJetNBinsPhi;
643 fQAJetPhiMin = o.fQAJetPhiMin;
644 fQAJetPhiMax = o.fQAJetPhiMax;
645 fQATrackNBinsPt = o.fQATrackNBinsPt;
646 fQATrackPtMin = o.fQATrackPtMin;
647 fQATrackPtMax = o.fQATrackPtMax;
648 fQATrackNBinsEta = o.fQATrackNBinsEta;
649 fQATrackEtaMin = o.fQATrackEtaMin;
650 fQATrackEtaMax = o.fQATrackEtaMax;
651 fQATrackNBinsPhi = o.fQATrackNBinsPhi;
652 fQATrackPhiMin = o.fQATrackPhiMin;
653 fQATrackPhiMax = o.fQATrackPhiMax;
654 fIJNBinsJetPt = o.fIJNBinsJetPt;
655 fIJJetPtMin = o.fIJJetPtMin;
656 fIJJetPtMax = o.fIJJetPtMax;
657 fIJNBinsPt = o.fIJNBinsPt;
658 fIJPtMin = o.fIJPtMin;
659 fIJPtMax = o.fIJPtMax;
660 fIJNBinsZ = o.fIJNBinsZ;
661 fIJZMin = o.fIJZMin;
662 fIJZMax = o.fIJZMax;
663 fIJNBinsCosTheta = o.fIJNBinsCosTheta;
664 fIJCosThetaMin = o.fIJCosThetaMin;
665 fIJCosThetaMax = o.fIJCosThetaMax;
666 fIJNBinsTheta = o.fIJNBinsTheta;
667 fIJThetaMin = o.fIJThetaMin;
668 fIJThetaMax = o.fIJThetaMax;
669 fIJNBinsJt = o.fIJNBinsJt;
670 fIJJtMin = o.fIJJtMin;
671 fIJJtMax = o.fIJJtMax;
672 fDiJetNBinsJetInvMass = o.fDiJetNBinsJetInvMass;
673 fDiJetJetInvMassMin = o.fDiJetJetInvMassMin;
674 fDiJetJetInvMassMax = o.fDiJetJetInvMassMax;
675 fDiJetNBinsJetPt = o.fDiJetNBinsJetPt;
676 fDiJetJetPtMin = o.fDiJetJetPtMin;
677 fDiJetJetPtMax = o.fDiJetJetPtMax;
678 fDiJetNBinsPt = o.fDiJetNBinsPt;
679 fDiJetPtMin = o.fDiJetPtMin;
680 fDiJetPtMax = o.fDiJetPtMax;
681 fDiJetNBinsXi = o.fDiJetNBinsXi;
682 fDiJetXiMin = o.fDiJetXiMin;
683 fDiJetXiMax = o.fDiJetXiMax;
684 fDiJetNBinsZ = o.fDiJetNBinsZ;
685 fDiJetZMin = o.fDiJetZMin;
686 fDiJetZMax = o.fDiJetZMax;
687 fQADiJetNBinsInvMass = o.fQADiJetNBinsInvMass;
688 fQADiJetInvMassMin = o.fQADiJetInvMassMin;
689 fQADiJetInvMassMax = o.fQADiJetInvMassMax;
690 fQADiJetNBinsJetPt = o.fQADiJetNBinsJetPt;
691 fQADiJetJetPtMin = o.fQADiJetJetPtMin;
692 fQADiJetJetPtMax = o.fQADiJetJetPtMax;
693 fQADiJetNBinsDeltaPhi = o.fQADiJetNBinsDeltaPhi;
694 fQADiJetDeltaPhiMin = o.fQADiJetDeltaPhiMin;
695 fQADiJetDeltaPhiMax = o.fQADiJetDeltaPhiMax;
696 fQADiJetNBinsDeltaEta = o.fQADiJetNBinsDeltaEta;
697 fQADiJetDeltaEtaMin = o.fQADiJetDeltaEtaMin;
698 fQADiJetDeltaEtaMax = o.fQADiJetDeltaEtaMax;
699 fQADiJetNBinsDeltaPt = o.fQADiJetNBinsDeltaPt;
700 fQADiJetDeltaPtMin = o.fQADiJetDeltaPtMin;
701 fQADiJetDeltaPtMax = o.fQADiJetDeltaPtMax;
702 fCommonHistList = o.fCommonHistList;
703 fh1EvtSelection = o.fh1EvtSelection;
704 fh1VertexNContributors = o.fh1VertexNContributors;
705 fh1VertexZ = o.fh1VertexZ;
706 fh1EvtMult = o.fh1EvtMult;
ac017ff3 707 fh1Xsec = o.fh1Xsec;
708 fh1Trials = o.fh1Trials;
709 fh1PtHard = o.fh1PtHard;
710 fh1PtHardTrials = o.fh1PtHardTrials;
656dc810 711 fh1nRecJetsCuts = o.fh1nRecJetsCuts;
712 fh1nGenJets = o.fh1nGenJets;
fe343c6b 713 fh1nRecEffJets = o.fh1nRecEffJets;
714 fhnSingleTrackRecEffHisto = o.fhnSingleTrackRecEffHisto;
715 fhnJetTrackRecEffHisto = o.fhnJetTrackRecEffHisto;
656dc810 716 }
717
718 return *this;
719}
720
721//___________________________________________________________________________
722AliAnalysisTaskFragmentationFunction::~AliAnalysisTaskFragmentationFunction()
723{
724 // destructor
725
fe343c6b 726 if(fTracksRec) delete fTracksRec;
727 if(fTracksRecCuts) delete fTracksRecCuts;
728 if(fTracksGen) delete fTracksGen;
729 if(fTracksAODMCCharged) delete fTracksAODMCCharged;
730 if(fTracksRecQualityCuts) delete fTracksRecQualityCuts;
731 if(fJetsRec) delete fJetsRec;
732 if(fJetsRecCuts) delete fJetsRecCuts;
733 if(fJetsGen) delete fJetsGen;
734 if(fJetsRecEff) delete fJetsRecEff;
656dc810 735}
736
737//______________________________________________________________________________________________________
738AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AliFragFuncHistos(const char* name,
739 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
740 Int_t nPt, Float_t ptMin, Float_t ptMax,
741 Int_t nXi, Float_t xiMin, Float_t xiMax,
742 Int_t nZ , Float_t zMin , Float_t zMax )
743 : TObject()
744 ,fNBinsJetPt(nJetPt)
745 ,fJetPtMin(jetPtMin)
746 ,fJetPtMax(jetPtMax)
747 ,fNBinsPt(nPt)
748 ,fPtMin(ptMin)
749 ,fPtMax(ptMax)
750 ,fNBinsXi(nXi)
751 ,fXiMin(xiMin)
752 ,fXiMax(xiMax)
753 ,fNBinsZ(nZ)
754 ,fZMin(zMin)
755 ,fZMax(zMax)
756 ,fh2TrackPt(0)
757 ,fh2Xi(0)
758 ,fh2Z(0)
759 ,fh1JetPt(0)
fceb275f 760 ,fNameFF(name)
656dc810 761{
762 // default constructor
763
764}
765
766//___________________________________________________________________________
767AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AliFragFuncHistos(const AliFragFuncHistos& copy)
768 : TObject()
769 ,fNBinsJetPt(copy.fNBinsJetPt)
770 ,fJetPtMin(copy.fJetPtMin)
771 ,fJetPtMax(copy.fJetPtMax)
772 ,fNBinsPt(copy.fNBinsPt)
773 ,fPtMin(copy.fPtMin)
774 ,fPtMax(copy.fPtMax)
775 ,fNBinsXi(copy.fNBinsXi)
776 ,fXiMin(copy.fXiMin)
777 ,fXiMax(copy.fXiMax)
778 ,fNBinsZ(copy.fNBinsZ)
779 ,fZMin(copy.fZMin)
780 ,fZMax(copy.fZMax)
781 ,fh2TrackPt(copy.fh2TrackPt)
782 ,fh2Xi(copy.fh2Xi)
783 ,fh2Z(copy.fh2Z)
784 ,fh1JetPt(copy.fh1JetPt)
fceb275f 785 ,fNameFF(copy.fNameFF)
656dc810 786{
787 // copy constructor
788}
789
790//_______________________________________________________________________________________________________________________________________________________________
791AliAnalysisTaskFragmentationFunction::AliFragFuncHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncHistos& o)
792{
793 // assignment
794
795 if(this!=&o){
796 TObject::operator=(o);
797 fNBinsJetPt = o.fNBinsJetPt;
798 fJetPtMin = o.fJetPtMin;
799 fJetPtMax = o.fJetPtMax;
800 fNBinsPt = o.fNBinsPt;
801 fPtMin = o.fPtMin;
802 fPtMax = o.fPtMax;
803 fNBinsXi = o.fNBinsXi;
804 fXiMin = o.fXiMin;
805 fXiMax = o.fXiMax;
806 fNBinsZ = o.fNBinsZ;
807 fZMin = o.fZMin;
808 fZMax = o.fZMax;
809 fh2TrackPt = o.fh2TrackPt;
810 fh2Xi = o.fh2Xi;
811 fh2Z = o.fh2Z;
812 fh1JetPt = o.fh1JetPt;
fceb275f 813 fNameFF = o.fNameFF;
656dc810 814 }
815
816 return *this;
817}
818
819//_________________________________________________________
820AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::~AliFragFuncHistos()
821{
822 // destructor
823
824 if(fh1JetPt) delete fh1JetPt;
825 if(fh2TrackPt) delete fh2TrackPt;
826 if(fh2Xi) delete fh2Xi;
827 if(fh2Z) delete fh2Z;
828}
829
830//_________________________________________________________________
831void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::DefineHistos()
832{
833 // book FF histos
834
fceb275f 835 fh1JetPt = new TH1F(Form("fh1FFJetPt%s", fNameFF.Data()),"",fNBinsJetPt,fJetPtMin,fJetPtMax);
836 fh2TrackPt = new TH2F(Form("fh2FFTrackPt%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,fNBinsPt, fPtMin, fPtMax);
837 fh2Xi = new TH2F(Form("fh2FFXi%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsXi, fXiMin, fXiMax);
838 fh2Z = new TH2F(Form("fh2FFZ%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsZ, fZMin, fZMax);
656dc810 839
840 AliAnalysisTaskFragmentationFunction::SetProperties(fh1JetPt, "p_{T} [GeV/c]", "entries");
841 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPt,"jet p_{T} [GeV/c]","p_{T} [GeV/c]","entries");
842 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi,"jet p_{T} [GeV/c]","#xi", "entries");
843 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z,"jet p_{T} [GeV/c]","z","entries");
844}
845
846//_______________________________________________________________________________________________________________
847void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::FillFF(Float_t trackPt, Float_t jetPt, Bool_t incrementJetPt)
848{
849 // fill FF
850
851 if(incrementJetPt) fh1JetPt->Fill(jetPt);
852 fh2TrackPt->Fill(jetPt,trackPt);
853
656dc810 854 Double_t z = 0.;
855 if(jetPt>0) z = trackPt / jetPt;
856 Double_t xi = 0;
857 if(z>0) xi = TMath::Log(1/z);
858
859 fh2Xi->Fill(jetPt,xi);
860 fh2Z->Fill(jetPt,z);
861}
862
863//_________________________________________________________________________________
864void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AddToOutput(TList* list) const
865{
866 // add histos to list
867
868 list->Add(fh1JetPt);
869
870 list->Add(fh2TrackPt);
871 list->Add(fh2Xi);
872 list->Add(fh2Z);
873}
874
875//_________________________________________________________________________________________________________
876AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const char* name,
877 Int_t nPt, Float_t ptMin, Float_t ptMax,
878 Int_t nEta, Float_t etaMin, Float_t etaMax,
879 Int_t nPhi, Float_t phiMin, Float_t phiMax)
880 : TObject()
881 ,fNBinsPt(nPt)
882 ,fPtMin(ptMin)
883 ,fPtMax(ptMax)
884 ,fNBinsEta(nEta)
885 ,fEtaMin(etaMin)
886 ,fEtaMax(etaMax)
887 ,fNBinsPhi(nPhi)
888 ,fPhiMin(phiMin)
889 ,fPhiMax(phiMax)
890 ,fh2EtaPhi(0)
891 ,fh1Pt(0)
fceb275f 892 ,fNameQAJ(name)
656dc810 893{
894 // default constructor
895}
896
897//____________________________________________________________________________________
898AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const AliFragFuncQAJetHistos& copy)
899 : TObject()
900 ,fNBinsPt(copy.fNBinsPt)
901 ,fPtMin(copy.fPtMin)
902 ,fPtMax(copy.fPtMax)
903 ,fNBinsEta(copy.fNBinsEta)
904 ,fEtaMin(copy.fEtaMin)
905 ,fEtaMax(copy.fEtaMax)
906 ,fNBinsPhi(copy.fNBinsPhi)
907 ,fPhiMin(copy.fPhiMin)
908 ,fPhiMax(copy.fPhiMax)
909 ,fh2EtaPhi(copy.fh2EtaPhi)
910 ,fh1Pt(copy.fh1Pt)
fceb275f 911 ,fNameQAJ(copy.fNameQAJ)
656dc810 912{
913 // copy constructor
914}
915
916//________________________________________________________________________________________________________________________________________________________________________
917AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos& o)
918{
919 // assignment
920
921 if(this!=&o){
922 TObject::operator=(o);
923 fNBinsPt = o.fNBinsPt;
924 fPtMin = o.fPtMin;
925 fPtMax = o.fPtMax;
926 fNBinsEta = o.fNBinsEta;
927 fEtaMin = o.fEtaMin;
928 fEtaMax = o.fEtaMax;
929 fNBinsPhi = o.fNBinsPhi;
930 fPhiMin = o.fPhiMin;
931 fPhiMax = o.fPhiMax;
932 fh2EtaPhi = o.fh2EtaPhi;
933 fh1Pt = o.fh1Pt;
fceb275f 934 fNameQAJ = o.fNameQAJ;
656dc810 935 }
936
937 return *this;
938}
939
940//______________________________________________________________
941AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::~AliFragFuncQAJetHistos()
942{
943 // destructor
944
945 if(fh2EtaPhi) delete fh2EtaPhi;
946 if(fh1Pt) delete fh1Pt;
947}
948
949//____________________________________________________________________
950void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::DefineHistos()
951{
952 // book jet QA histos
953
fceb275f 954 fh2EtaPhi = new TH2F(Form("fh2JetQAEtaPhi%s", fNameQAJ.Data()), Form("%s: #eta - #phi distribution", fNameQAJ.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
955 fh1Pt = new TH1F(Form("fh1JetQAPt%s", fNameQAJ.Data()), Form("%s: p_{T} distribution", fNameQAJ.Data()), fNBinsPt, fPtMin, fPtMax);
656dc810 956
957 AliAnalysisTaskFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi");
958 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
959}
960
961//____________________________________________________________________________________________________
962void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::FillJetQA(Float_t eta, Float_t phi, Float_t pt)
963{
964 // fill jet QA histos
965
966 fh2EtaPhi->Fill( eta, phi);
967 fh1Pt->Fill( pt );
968}
969
970//____________________________________________________________________________________
971void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AddToOutput(TList* list) const
972{
973 // add histos to list
974
975 list->Add(fh2EtaPhi);
976 list->Add(fh1Pt);
977}
978
979//___________________________________________________________________________________________________________
980AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const char* name,
981 Int_t nPt, Float_t ptMin, Float_t ptMax,
982 Int_t nEta, Float_t etaMin, Float_t etaMax,
983 Int_t nPhi, Float_t phiMin, Float_t phiMax,
984 Float_t ptThresh)
985 : TObject()
986 ,fNBinsPt(nPt)
987 ,fPtMin(ptMin)
988 ,fPtMax(ptMax)
989 ,fNBinsEta(nEta)
990 ,fEtaMin(etaMin)
991 ,fEtaMax(etaMax)
992 ,fNBinsPhi(nPhi)
993 ,fPhiMin(phiMin)
994 ,fPhiMax(phiMax)
995 ,fHighPtThreshold(ptThresh)
996 ,fh2EtaPhi(0)
997 ,fh1Pt(0)
998 ,fh2HighPtEtaPhi(0)
fceb275f 999 ,fNameQAT(name)
656dc810 1000{
1001 // default constructor
1002}
1003
1004//__________________________________________________________________________________________
1005AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const AliFragFuncQATrackHistos& copy)
1006 : TObject()
1007 ,fNBinsPt(copy.fNBinsPt)
1008 ,fPtMin(copy.fPtMin)
1009 ,fPtMax(copy.fPtMax)
1010 ,fNBinsEta(copy.fNBinsEta)
1011 ,fEtaMin(copy.fEtaMin)
1012 ,fEtaMax(copy.fEtaMax)
1013 ,fNBinsPhi(copy.fNBinsPhi)
1014 ,fPhiMin(copy.fPhiMin)
1015 ,fPhiMax(copy.fPhiMax)
1016 ,fHighPtThreshold(copy.fHighPtThreshold)
1017 ,fh2EtaPhi(copy.fh2EtaPhi)
1018 ,fh1Pt(copy.fh1Pt)
1019 ,fh2HighPtEtaPhi(copy.fh2HighPtEtaPhi)
fceb275f 1020 ,fNameQAT(copy.fNameQAT)
656dc810 1021{
1022 // copy constructor
1023}
1024
1025// _____________________________________________________________________________________________________________________________________________________________________________
1026AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos& o)
1027{
1028 // assignment
1029
1030 if(this!=&o){
1031 TObject::operator=(o);
1032 fNBinsPt = o.fNBinsPt;
1033 fPtMin = o.fPtMin;
1034 fPtMax = o.fPtMax;
1035 fNBinsEta = o.fNBinsEta;
1036 fEtaMin = o.fEtaMin;
1037 fEtaMax = o.fEtaMax;
1038 fNBinsPhi = o.fNBinsPhi;
1039 fPhiMin = o.fPhiMin;
1040 fPhiMax = o.fPhiMax;
1041 fHighPtThreshold = o.fHighPtThreshold;
1042 fh2EtaPhi = o.fh2EtaPhi;
1043 fh1Pt = o.fh1Pt;
1044 fh2HighPtEtaPhi = o.fh2HighPtEtaPhi;
fceb275f 1045 fNameQAT = o.fNameQAT;
656dc810 1046 }
1047
1048 return *this;
1049}
1050
1051//___________________________________________________________________
1052AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::~AliFragFuncQATrackHistos()
1053{
1054 // destructor
1055
1056 if(fh2EtaPhi) delete fh2EtaPhi;
1057 if(fh2HighPtEtaPhi) delete fh2HighPtEtaPhi;
1058 if(fh1Pt) delete fh1Pt;
1059}
1060
1061//______________________________________________________________________
1062void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::DefineHistos()
1063{
1064 // book track QA histos
1065
fceb275f 1066 fh2EtaPhi = new TH2F(Form("fh2TrackQAEtaPhi%s", fNameQAT.Data()), Form("%s: #eta - #phi distribution", fNameQAT.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1067 fh2HighPtEtaPhi = new TH2F(Form("fh2TrackQAHighPtEtaPhi%s", fNameQAT.Data()), Form("%s: #eta - #phi distribution for high-p_{T}", fNameQAT.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1068 fh1Pt = new TH1F(Form("fh1TrackQAPt%s", fNameQAT.Data()), Form("%s: p_{T} distribution", fNameQAT.Data()), fNBinsPt, fPtMin, fPtMax);
656dc810 1069
1070 AliAnalysisTaskFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi");
1071 AliAnalysisTaskFragmentationFunction::SetProperties(fh2HighPtEtaPhi, "#eta", "#phi");
1072 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1073}
1074
1075//________________________________________________________________________________________________________
1076void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::FillTrackQA(Float_t eta, Float_t phi, Float_t pt)
1077{
1078 // fill track QA histos
1079
1080 fh2EtaPhi->Fill( eta, phi);
1081 if(pt > fHighPtThreshold) fh2HighPtEtaPhi->Fill( eta, phi);
1082 fh1Pt->Fill( pt );
1083}
1084
1085//______________________________________________________________________________________
1086void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AddToOutput(TList* list) const
1087{
1088 // add histos to list
1089
1090 list->Add(fh2EtaPhi);
1091 list->Add(fh2HighPtEtaPhi);
1092 list->Add(fh1Pt);
1093}
1094
1095//______________________________________________________________________________________________________
1096AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::AliFragFuncIntraJetHistos(const char* name,
1097 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
1098 Int_t nPt, Float_t ptMin, Float_t ptMax,
1099 Int_t nZ , Float_t zMin , Float_t zMax,
1100 Int_t nCosTheta , Float_t costhetaMin , Float_t costhetaMax,
1101 Int_t nTheta , Float_t thetaMin , Float_t thetaMax,
1102 Int_t nJt , Float_t jtMin , Float_t jtMax)
1103 : TObject()
1104 ,fNBinsJetPt(nJetPt)
1105 ,fJetPtMin(jetPtMin)
1106 ,fJetPtMax(jetPtMax)
1107 ,fNBinsPt(nPt)
1108 ,fPtMin(ptMin)
1109 ,fPtMax(ptMax)
1110 ,fNBinsZ(nZ)
1111 ,fZMin(zMin)
1112 ,fZMax(zMax)
1113 ,fNBinsJt(nJt)
1114 ,fJtMin(jtMin)
1115 ,fJtMax(jtMax)
1116 ,fNBinsTheta(nTheta)
1117 ,fThetaMin(thetaMin)
1118 ,fThetaMax(thetaMax)
1119 ,fNBinsCosTheta(nCosTheta)
1120 ,fCosThetaMin(costhetaMin)
1121 ,fCosThetaMax(costhetaMax)
1122 ,fh2Theta(0)
1123 ,fh2CosTheta(0)
1124 ,fh2Jt(0)
1125 ,fh2PtvsZ(0)
1126 ,fhnIntraJet(0)
1127 ,fnDim(6)
fceb275f 1128 ,fNameIJ(name)
656dc810 1129{
1130 // default constructor
1131
1132}
1133
1134//___________________________________________________________________________
1135AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::AliFragFuncIntraJetHistos(const AliFragFuncIntraJetHistos& copy)
1136 : TObject()
1137 ,fNBinsJetPt(copy.fNBinsJetPt)
1138 ,fJetPtMin(copy.fJetPtMin)
1139 ,fJetPtMax(copy.fJetPtMax)
1140 ,fNBinsPt(copy.fNBinsPt)
1141 ,fPtMin(copy.fPtMin)
1142 ,fPtMax(copy.fPtMax)
1143 ,fNBinsZ(copy.fNBinsZ)
1144 ,fZMin(copy.fZMin)
1145 ,fZMax(copy.fZMax)
1146 ,fNBinsJt(copy.fNBinsJt)
1147 ,fJtMin(copy.fJtMin)
1148 ,fJtMax(copy.fJtMax)
1149 ,fNBinsTheta(copy.fNBinsTheta)
1150 ,fThetaMin(copy.fThetaMin)
1151 ,fThetaMax(copy.fThetaMax)
1152 ,fNBinsCosTheta(copy.fNBinsCosTheta)
1153 ,fCosThetaMin(copy.fCosThetaMin)
1154 ,fCosThetaMax(copy.fCosThetaMax)
1155 ,fh2Theta(copy.fh2Theta)
1156 ,fh2CosTheta(copy.fh2CosTheta)
1157 ,fh2Jt(copy.fh2Jt)
1158 ,fh2PtvsZ(copy.fh2PtvsZ)
1159 ,fhnIntraJet(copy.fhnIntraJet)
1160 ,fnDim(copy.fnDim)
fceb275f 1161 ,fNameIJ(copy.fNameIJ)
656dc810 1162{
1163 // copy constructor
1164}
1165
1166//_______________________________________________________________________________________________________________________________________________________________
1167AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos& o)
1168{
1169 // assignment
1170
1171 if(this!=&o){
1172 TObject::operator=(o);
1173 fNBinsJetPt = o.fNBinsJetPt;
1174 fJetPtMin = o.fJetPtMin;
1175 fJetPtMax = o.fJetPtMax;
1176 fNBinsPt = o.fNBinsPt;
1177 fPtMin = o.fPtMin;
1178 fPtMax = o.fPtMax;
1179 fNBinsZ = o.fNBinsZ;
1180 fZMin = o.fZMin;
1181 fZMax = o.fZMax;
1182 fNBinsJt = o.fNBinsJt;
1183 fJtMin = o.fJtMin;
1184 fJtMax = o.fJtMax;
1185 fNBinsTheta = o.fNBinsTheta;
1186 fThetaMin = o.fThetaMin;
1187 fThetaMax = o.fThetaMax;
1188 fNBinsCosTheta = o.fNBinsCosTheta;
1189 fCosThetaMin = o.fCosThetaMin;
1190 fCosThetaMax = o.fCosThetaMax;
1191 fh2Theta = o.fh2Theta;
1192 fh2CosTheta = o.fh2CosTheta;
1193 fh2Jt = o.fh2Jt;
1194 fh2PtvsZ = o.fh2PtvsZ;
1195 fhnIntraJet = o.fhnIntraJet;
1196 fnDim = o.fnDim;
fceb275f 1197 fNameIJ = o.fNameIJ;
656dc810 1198 }
1199
1200 return *this;
1201}
1202
1203//_________________________________________________________
1204AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::~AliFragFuncIntraJetHistos()
1205{
1206 // destructor
1207
1208
1209 if(fh2Theta) delete fh2Theta;
1210 if(fh2CosTheta) delete fh2CosTheta;
1211 if(fh2Jt) delete fh2Jt;
1212 if(fh2PtvsZ) delete fh2PtvsZ;
1213 if(fhnIntraJet) delete fhnIntraJet;
1214
1215}
1216
1217//_________________________________________________________________
1218void AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::DefineHistos()
1219{
1220 // book FF histos
1221
fceb275f 1222 fh2Theta = new TH2F(Form("fh2IJTheta%s",fNameIJ.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,fNBinsTheta, fThetaMin, fThetaMax);
1223 fh2CosTheta = new TH2F(Form("fh2IJcosTheta%s",fNameIJ.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,fNBinsCosTheta, fCosThetaMin, fCosThetaMax);
1224 fh2Jt = new TH2F(Form("fh2IJJt%s",fNameIJ.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsJt, fJtMin, fJtMax);
656dc810 1225
1226 // Create 3D histograms
1227 Int_t *iBin = new Int_t[fnDim];
1228 Double_t *min = new Double_t[fnDim];
1229 Double_t *max = new Double_t[fnDim];
1230
1231 iBin[0] = fNBinsJetPt; iBin[1] = fNBinsTheta; iBin[2] = fNBinsCosTheta; iBin[3] = fNBinsJt; iBin[4] = fNBinsZ; iBin[5] = fNBinsPt;
1232 min[0] = fJetPtMin; min[1] = fThetaMin; min[2] = fCosThetaMin; min[3] = fJtMin; min[4] = fZMin; min[5] = fPtMin;
1233 max[0] = fJetPtMax; max[1] = fThetaMax; max[2] = fCosThetaMax; max[3] = fJtMax; max[4] = fZMax; max[5] = fPtMax;
1234
fceb275f 1235 const char* title = Form("fhnIntraJetPart%s",fNameIJ.Data());
656dc810 1236 const char* comment = "THnSparseF p_{T} jet [GeV/c] : #Theta : cos(#Theta) : j_{T} : Z : p_{T} part [GeV/c]";
1237 fhnIntraJet = new THnSparseF(title,comment,fnDim,iBin,min,max);
1238
1239 const char** axisTitle = new const char*[fnDim];
1240 axisTitle[0] = "p_{T}^{jet} [GeV/c]";
1241 axisTitle[1] = "#Theta";
1242 axisTitle[2] = "Cos(#Theta)";
1243 axisTitle[3] = "j_{T} [GeV]";
1244 axisTitle[4] = "z = p_{T}^{had}/p_{T}^{jet}";
1245 axisTitle[5] = "p_{T}^{had} [GeV/c]";
1246
1247 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Theta,"jet p_{T} [GeV/c]","#Theta","entries");
1248 AliAnalysisTaskFragmentationFunction::SetProperties(fh2CosTheta,"jet p_{T} [GeV/c]","cos(#Theta)", "entries");
1249 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Jt,"jet p_{T} [GeV/c]","j_{T}","entries");
1250 AliAnalysisTaskFragmentationFunction::SetProperties(fhnIntraJet,fnDim,axisTitle);
1251 delete[] iBin;
1252 delete[] min;
1253 delete[] max;
1254 delete[] axisTitle;
1255}
1256
1257//_______________________________________________________________________________________________________________
fceb275f 1258void AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::FillIntraJet(const TLorentzVector* trackV, const TLorentzVector* jetV)
656dc810 1259{
1260 // fill IntraJet histos
1261
1262 Float_t cosTheta = 0.; Float_t theta = 0.;
1263 Float_t jt = 0.; Float_t z = 0.;
1264 // For Theta distribution
1265 Float_t pxT = trackV->Px();
1266 Float_t pyT = trackV->Py();
1267 Float_t pzT = trackV->Pz();
1268 Float_t ptT = trackV->Pt();
1269 Float_t pT = trackV->P();
1270 Float_t etaT = trackV->Eta();
1271 Float_t phiT = trackV->Phi(); // Check the value returned
1272 Float_t pxJ = jetV->Px();
1273 Float_t pyJ = jetV->Py();
1274 Float_t pzJ = jetV->Pz();
1275 Float_t ptJ = jetV->Pt();
1276 Float_t pJ = jetV->P();
1277
1278 // Compute z
1279 z = (Float_t)(ptT/ptJ);
1280
1281 // Compute theta
1282 cosTheta = (pxT*pxJ+pyT*pyJ+pzT*pzJ)/(pT*pJ);
1283 theta = TMath::ACos(cosTheta);
1284
1285 // Compute jt
1286 TVector3 trackP; TVector3 jetP;
1287 jetP[0] = pxJ;
1288 jetP[1] = pyJ;
1289 jetP[2] = pzJ;
1290 trackP.SetPtEtaPhi(ptT,etaT,phiT);
1291 jt = TMath::Sin(trackP.Angle(jetP))*trackP.Mag();
1292
1293 // Fill histos and THnSparse
1294 fh2CosTheta->Fill(ptJ,cosTheta);
1295 fh2Theta->Fill(ptJ,theta);
1296 fh2Jt->Fill(ptJ,jt);
1297
1298 // Fill THnSparse
1299 Double_t *content = new Double_t[fnDim];
1300 content[0]= ptJ; content[1] = theta; content[2] = cosTheta; content[3] = jt; content[4] = z; content[5] = ptT;
1301
1302 fhnIntraJet->Fill(content);
1303
1304 delete content;
1305
1306}
1307
1308//______________________________________________________________________________________________________
1309AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::AliFragFuncDiJetHistos(const char* name, Int_t kindSlices,
1310 Int_t nJetInvMass, Float_t jetInvMassMin, Float_t jetInvMassMax,
1311 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
1312 Int_t nPt, Float_t ptMin, Float_t ptMax,
1313 Int_t nXi, Float_t xiMin, Float_t xiMax,
1314 Int_t nZ , Float_t zMin , Float_t zMax)
1315 : TObject()
1316 ,fKindSlices(kindSlices)
1317 ,fNBinsJetInvMass(nJetInvMass)
1318 ,fJetInvMassMin(jetInvMassMin)
1319 ,fJetInvMassMax(jetInvMassMax)
1320 ,fNBinsJetPt(nJetPt)
1321 ,fJetPtMin(jetPtMin)
1322 ,fJetPtMax(jetPtMax)
1323 ,fNBinsPt(nPt)
1324 ,fPtMin(ptMin)
1325 ,fPtMax(ptMax)
1326 ,fNBinsXi(nXi)
1327 ,fXiMin(xiMin)
1328 ,fXiMax(xiMax)
1329 ,fNBinsZ(nZ)
1330 ,fZMin(zMin)
1331 ,fZMax(zMax)
1332 ,fh2TrackPtJet1(0)
1333 ,fh2TrackPtJet2(0)
1334 ,fh2TrackPtJet(0)
1335 ,fh1Jet1Pt(0)
1336 ,fh1Jet2Pt(0)
1337 ,fh1JetPt(0)
1338 ,fh2Xi1(0)
1339 ,fh2Xi2(0)
1340 ,fh2Xi(0)
1341 ,fh2Z1(0)
1342 ,fh2Z2(0)
1343 ,fh2Z(0)
1344 ,fh2Pt1(0)
1345 ,fh2Pt2(0)
1346 ,fh2Pt(0)
fceb275f 1347 ,fNameDJ(name)
656dc810 1348{
1349 // default constructor
1350
1351}
1352
1353//______________________________________________________________________________________________________
1354AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::AliFragFuncDiJetHistos(const AliFragFuncDiJetHistos& copy)
1355 : TObject()
1356 ,fKindSlices(copy.fKindSlices)
1357 ,fNBinsJetInvMass(copy.fNBinsJetInvMass)
1358 ,fJetInvMassMin(copy.fJetInvMassMin)
1359 ,fJetInvMassMax(copy.fJetInvMassMax)
1360 ,fNBinsJetPt(copy.fNBinsJetPt)
1361 ,fJetPtMin(copy.fJetPtMin)
1362 ,fJetPtMax(copy.fJetPtMax)
1363 ,fNBinsPt(copy.fNBinsPt)
1364 ,fPtMin(copy.fPtMin)
1365 ,fPtMax(copy.fPtMax)
1366 ,fNBinsXi(copy.fNBinsXi)
1367 ,fXiMin(copy.fXiMin)
1368 ,fXiMax(copy.fXiMax)
1369 ,fNBinsZ(copy.fNBinsZ)
1370 ,fZMin(copy.fZMin)
1371 ,fZMax(copy.fZMax)
1372 ,fh2TrackPtJet1(copy.fh2TrackPtJet1)
1373 ,fh2TrackPtJet2(copy.fh2TrackPtJet2)
1374 ,fh2TrackPtJet(copy.fh2TrackPtJet)
1375 ,fh1Jet1Pt(copy.fh1Jet1Pt)
1376 ,fh1Jet2Pt(copy.fh1Jet2Pt)
1377 ,fh1JetPt(copy.fh1JetPt)
1378 ,fh2Xi1(copy.fh2Xi1)
1379 ,fh2Xi2(copy.fh2Xi2)
1380 ,fh2Xi(copy.fh2Xi2)
1381 ,fh2Z1(copy.fh2Z1)
1382 ,fh2Z2(copy.fh2Z2)
1383 ,fh2Z(copy.fh2Z)
1384 ,fh2Pt1(copy.fh2Pt1)
1385 ,fh2Pt2(copy.fh2Pt2)
1386 ,fh2Pt(copy.fh2Pt)
fceb275f 1387 ,fNameDJ(copy.fNameDJ)
656dc810 1388{
1389 // default constructor
1390
1391}
1392
1393//_______________________________________________________________________________________________________________________________________________________________
1394AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos& o)
1395{
1396 // assignment
1397
1398 if(this!=&o){
1399 TObject::operator=(o);
1400 fKindSlices = o.fKindSlices;
1401 fNBinsJetInvMass = o.fNBinsJetInvMass;
1402 fJetInvMassMin = o.fJetInvMassMin;
1403 fJetInvMassMax = o.fJetInvMassMax;
1404 fNBinsJetPt = o.fNBinsJetPt;
1405 fJetPtMin = o.fJetPtMin;
1406 fJetPtMax = o.fJetPtMax;
1407 fNBinsPt = o.fNBinsPt;
1408 fPtMin = o.fPtMin;
1409 fPtMax = o.fPtMax;
1410 fNBinsXi = o.fNBinsXi;
1411 fXiMin = o.fXiMin;
1412 fXiMax = o.fXiMax;
1413 fNBinsZ = o.fNBinsZ;
1414 fZMin = o.fZMin;
1415 fZMax = o.fZMax;
1416 fh2TrackPtJet1 = o.fh2TrackPtJet1;
1417 fh2TrackPtJet2 = o.fh2TrackPtJet2;
1418 fh2TrackPtJet = o.fh2TrackPtJet;
1419 fh1Jet1Pt = o.fh1Jet1Pt;
1420 fh1Jet2Pt = o.fh1Jet2Pt;
1421 fh1JetPt = o.fh1JetPt;
1422 fh2Xi1 = o.fh2Xi1;
1423 fh2Xi2 = o.fh2Xi2;
1424 fh2Xi = o.fh2Xi;
1425 fh2Z1 = o.fh2Z1;
1426 fh2Z2 = o.fh2Z2;
1427 fh2Z = o.fh2Z;
1428 fh2Pt1 = o.fh2Pt1;
1429 fh2Pt2 = o.fh2Pt2;
1430 fh2Pt = o.fh2Pt;
fceb275f 1431 fNameDJ = o.fNameDJ;
656dc810 1432 }
1433
1434 return *this;
1435}
1436
1437//_________________________________________________________
1438AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::~AliFragFuncDiJetHistos()
1439{
1440 // destructor
1441
1442 if(fh2TrackPtJet1) delete fh2TrackPtJet1;
1443 if(fh2TrackPtJet2) delete fh2TrackPtJet2;
1444 if(fh2TrackPtJet ) delete fh2TrackPtJet;
1445 if(fh1Jet1Pt) delete fh1Jet1Pt;
1446 if(fh1Jet2Pt) delete fh1Jet2Pt;
1447 if(fh1JetPt) delete fh1JetPt;
1448 if(fh2Xi1) delete fh2Xi1;
1449 if(fh2Xi2) delete fh2Xi2;
1450 if(fh2Xi) delete fh2Xi;
1451 if(fh2Z1) delete fh2Z1;
1452 if(fh2Z2) delete fh2Z2;
1453 if(fh2Z) delete fh2Z;
1454 if(fh2Pt1) delete fh2Pt1;
1455 if(fh2Pt2) delete fh2Pt2;
1456 if(fh2Pt) delete fh2Pt;
1457}
1458
1459//________________________________________________________________________
1460void AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::DefineDiJetHistos()
1461{
fceb275f 1462 // book DiJet histos
1463
656dc810 1464 Int_t nBins = 0;
1465 Double_t min = 0.;
1466 Double_t max = 0.;
1467 const char *xaxis = "";
1468 if(fKindSlices == 1)
1469 {
1470 nBins = fNBinsJetInvMass;
1471 min = fJetInvMassMin;
1472 max = fJetInvMassMax;
1473 xaxis = "M_{JJ} [GeV]";
1474 }
1475 if(fKindSlices == 2 || fKindSlices == 3)
1476 {
1477 nBins = fNBinsJetPt;
1478 min = fJetPtMin;
1479 max = fJetPtMax;
1480 if(fKindSlices == 2) xaxis = "E_{Tmean} [GeV]";
1481 if(fKindSlices == 3) xaxis ="leading jet p_{T} [GeV/c]";
1482 }
1483
fceb275f 1484 fh1Jet1Pt = new TH1F(Form("fh1DJJet1Pt%s", fNameDJ.Data()), "", fNBinsJetPt, fJetPtMin, fJetPtMax);
1485 fh1Jet2Pt = new TH1F(Form("fh1DJJet2Pt%s", fNameDJ.Data()), "", fNBinsJetPt, fJetPtMin, fJetPtMax);
1486 fh1JetPt = new TH1F(Form("fh1DJJetPt%s", fNameDJ.Data()), "", fNBinsJetPt, fJetPtMin, fJetPtMax);
656dc810 1487
fceb275f 1488 fh2TrackPtJet1 = new TH2F(Form("fh2DJTrackPtJet1%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
1489 fh2TrackPtJet2 = new TH2F(Form("fh2DJTrackPtJet2%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
1490 fh2TrackPtJet = new TH2F(Form("fh2DJTrackPtJet%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
656dc810 1491
fceb275f 1492 fh2Xi1 = new TH2F(Form("fh2DJXi1%s", fNameDJ.Data()), "",nBins, min, max, fNBinsXi, fXiMin, fXiMax);
1493 fh2Xi2 = new TH2F(Form("fh2DJXi2%s", fNameDJ.Data()), "",nBins, min, max, fNBinsXi, fXiMin, fXiMax);
1494 fh2Xi = new TH2F(Form("fh2DJXi%s", fNameDJ.Data()), "",nBins, min, max, fNBinsXi, fXiMin, fXiMax);
656dc810 1495
fceb275f 1496 fh2Z1 = new TH2F(Form("fh2DJZ1%s", fNameDJ.Data()), "",nBins, min, max, fNBinsZ, fZMin, fZMax);
1497 fh2Z2 = new TH2F(Form("fh2DJZ2%s", fNameDJ.Data()), "",nBins, min, max, fNBinsZ, fZMin, fZMax);
1498 fh2Z = new TH2F(Form("fh2DJZ%s", fNameDJ.Data()), "",nBins, min, max, fNBinsZ, fZMin, fZMax);
656dc810 1499
fceb275f 1500 fh2Pt1 = new TH2F(Form("fh2DJPt1%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
1501 fh2Pt2 = new TH2F(Form("fh2DJPt2%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
1502 fh2Pt = new TH2F(Form("fh2DJPtZ%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
656dc810 1503
1504 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Jet1Pt, "p_{T} [GeV/c]", "entries");
1505 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Jet2Pt, "p_{T} [GeV/c]", "entries");
1506 AliAnalysisTaskFragmentationFunction::SetProperties(fh1JetPt, "p_{T} [GeV/c]", "entries");
1507
1508 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPtJet1, xaxis, "p_{T} [GeV/c]", "Entries");
1509 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPtJet2, xaxis, "p_{T} [GeV/c]", "Entries");
1510 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPtJet, xaxis, "p_{T} [GeV/c]", "Entries");
1511 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi1, xaxis, "#xi", "Entries");
1512 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi2, xaxis, "#xi", "Entries");
1513 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi, xaxis, "#xi", "Entries");
1514 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z1, xaxis, "z", "Entries");
1515 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z2, xaxis, "z", "Entries");
1516 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z, xaxis, "z", "Entries");
1517 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Pt1, xaxis, "p_{T} [GeV/c]", "Entries");
1518 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Pt2, xaxis, "p_{T} [GeV/c]", "Entries");
1519 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Pt, xaxis, "p_{T} [GeV/c]", "Entries");
656dc810 1520}
1521
1522//________________________________________________________________________
1523void AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::FillDiJetFF(Int_t jetType, Float_t trackPt, Float_t jetPt, Double_t jetBin, Bool_t incrementJetPt)
1524{
fceb275f 1525 // fill DiJet FF
1526
656dc810 1527 if(jetType == 0)
1528 {
1529 if(incrementJetPt) fh1JetPt->Fill(jetPt);
1530
1531 fh2TrackPtJet->Fill(jetBin, trackPt);
1532
1533 Double_t z = trackPt / jetPt;
1534 Double_t xi = 0;
1535 if(z!=0) xi = TMath::Log(1/z);
1536
1537 fh2Xi->Fill(jetBin, xi);
1538 fh2Z->Fill(jetBin, z);
1539 }
1540 if(jetType == 1)
1541 {
1542 if(incrementJetPt) fh1Jet1Pt->Fill(jetPt);
1543
1544 fh2TrackPtJet1->Fill(jetBin, trackPt);
1545
1546 Double_t z = trackPt / jetPt;
1547 Double_t xi = 0;
1548 if(z!=0) xi = TMath::Log(1/z);
1549
1550 fh2Xi1->Fill(jetBin, xi);
1551 fh2Z1->Fill(jetBin, z);
1552 }
1553 if(jetType == 2)
1554 {
1555 if(incrementJetPt) fh1Jet2Pt->Fill(jetPt);
1556
1557 fh2TrackPtJet2->Fill(jetBin, trackPt);
1558
1559 Double_t z = trackPt / jetPt;
1560 Double_t xi = 0;
1561 if(z!=0) xi = TMath::Log(1/z);
1562
1563 fh2Xi2->Fill(jetBin, xi);
1564 fh2Z2->Fill(jetBin, z);
1565 }
1566
1567
1568}
1569
1570//________________________________________________________________________
1571void AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::AddToOutput(TList* list)const
1572{
fceb275f 1573 // add histos to list
1574
656dc810 1575 list->Add(fh1Jet1Pt);
1576 list->Add(fh1Jet2Pt);
1577 list->Add(fh1JetPt);
1578 list->Add(fh2TrackPtJet1);
1579 list->Add(fh2TrackPtJet2);
1580 list->Add(fh2TrackPtJet);
1581 list->Add(fh2Xi1);
1582 list->Add(fh2Xi2);
1583 list->Add(fh2Xi);
1584 list->Add(fh2Z1);
1585 list->Add(fh2Z2);
1586 list->Add(fh2Z);
1587}
1588
1589//______________________________________________________________________________________________________
1590AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::AliFragFuncQADiJetHistos(const char* name, Int_t kindSlices,
1591 Int_t nInvMass, Float_t invMassMin, Float_t invMassMax,
1592 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
1593 Int_t nDeltaPhi, Float_t deltaPhiMin, Float_t deltaPhiMax,
1594 Int_t nDeltaEta, Float_t deltaEtaMin, Float_t deltaEtaMax,
1595 Int_t nDeltaPt, Float_t deltaPtMin, Float_t deltaPtMax)
1596 : TObject()
1597 ,fKindSlices(kindSlices)
1598 ,fNBinsJetInvMass(nInvMass)
1599 ,fJetInvMassMin(invMassMin)
1600 ,fJetInvMassMax(invMassMax)
1601 ,fNBinsJetPt(nJetPt)
1602 ,fJetPtMin(jetPtMin)
1603 ,fJetPtMax(jetPtMax)
1604 ,fNBinsDeltaPhi(nDeltaPhi)
1605 ,fDeltaPhiMin(deltaPhiMin)
1606 ,fDeltaPhiMax(deltaPhiMax)
1607 ,fNBinsDeltaEta(nDeltaEta)
1608 ,fDeltaEtaMin(deltaEtaMin)
1609 ,fDeltaEtaMax(deltaEtaMax)
1610 ,fNBinsDeltaPt(nDeltaPt)
1611 ,fDeltaPtMin(deltaPtMin)
1612 ,fDeltaPtMax(deltaPtMax)
1613 ,fh2InvMass(0)
1614 ,fh2DeltaPhi(0)
1615 ,fh2DeltaEta(0)
1616 ,fh2DeltaPt(0)
fceb275f 1617 ,fNameQADJ(name)
656dc810 1618{
1619 // default constructor
1620
1621}
1622
1623//______________________________________________________________________________________________________
1624AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::AliFragFuncQADiJetHistos(const AliFragFuncQADiJetHistos& copy)
1625 : TObject()
1626 ,fKindSlices(copy.fKindSlices)
1627 ,fNBinsJetInvMass(copy.fNBinsJetInvMass)
1628 ,fJetInvMassMin(copy.fJetInvMassMin)
1629 ,fJetInvMassMax(copy.fJetInvMassMax)
1630 ,fNBinsJetPt(copy.fNBinsJetPt)
1631 ,fJetPtMin(copy.fJetPtMin)
1632 ,fJetPtMax(copy.fJetPtMax)
1633 ,fNBinsDeltaPhi(copy.fNBinsDeltaPhi)
1634 ,fDeltaPhiMin(copy.fDeltaPhiMin)
1635 ,fDeltaPhiMax(copy.fDeltaPhiMax)
1636 ,fNBinsDeltaEta(copy.fNBinsDeltaEta)
1637 ,fDeltaEtaMin(copy.fDeltaEtaMin)
1638 ,fDeltaEtaMax(copy.fDeltaEtaMax)
1639 ,fNBinsDeltaPt(copy.fNBinsDeltaPt)
1640 ,fDeltaPtMin(copy.fDeltaPtMin)
1641 ,fDeltaPtMax(copy.fDeltaPtMax)
1642 ,fh2InvMass(copy.fh2InvMass)
1643 ,fh2DeltaPhi(copy.fh2DeltaPhi)
1644 ,fh2DeltaEta(copy.fh2DeltaEta)
1645 ,fh2DeltaPt(copy.fh2DeltaPt)
fceb275f 1646 ,fNameQADJ(copy.fNameQADJ)
656dc810 1647{
1648 // default constructor
1649
1650}
1651
1652//_______________________________________________________________________________________________________________________________________________________________
1653AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos& o)
1654{
1655 // assignment
1656
1657 if(this!=&o){
1658 TObject::operator=(o);
1659 fKindSlices = o.fKindSlices;
1660 fNBinsJetInvMass = o.fNBinsJetInvMass;
1661 fJetInvMassMin = o.fJetInvMassMin;
1662 fJetInvMassMax = o.fJetInvMassMax;
1663 fNBinsJetPt = o.fNBinsJetPt;
1664 fJetPtMin = o.fJetPtMin;
1665 fJetPtMax = o.fJetPtMax;
1666 fNBinsDeltaPhi = o.fNBinsDeltaPhi;
1667 fDeltaPhiMin = o.fDeltaPhiMin;
1668 fDeltaPhiMax = o.fDeltaPhiMax;
1669 fNBinsDeltaEta = o.fNBinsDeltaEta;
1670 fDeltaEtaMin = o.fDeltaEtaMin;
1671 fDeltaEtaMax = o.fDeltaEtaMax;
1672 fNBinsDeltaPt = o.fNBinsDeltaPt;
1673 fDeltaPtMin = o.fDeltaPtMin;
1674 fDeltaPtMax = o.fDeltaPtMax;
1675 fh2InvMass = o.fh2InvMass;
1676 fh2DeltaPhi = o.fh2DeltaPhi;
1677 fh2DeltaEta = o.fh2DeltaEta;
1678 fh2DeltaPt = o.fh2DeltaPt;
fceb275f 1679 fNameQADJ = o.fNameQADJ;
656dc810 1680 }
1681
1682 return *this;
1683}
1684
1685//_________________________________________________________
1686AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::~AliFragFuncQADiJetHistos()
1687{
1688 // destructor
1689
1690 if(fh2InvMass) delete fh2InvMass;
1691 if(fh2DeltaPhi) delete fh2DeltaPhi;
1692 if(fh2DeltaEta) delete fh2DeltaEta;
1693 if(fh2DeltaPt) delete fh2DeltaPt;
1694}
1695
1696//________________________________________________________________________
1697void AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::DefineQADiJetHistos()
1698{
fceb275f 1699 // define histos
1700
656dc810 1701 Int_t nBins = 0;
1702 Double_t min = 0.;
1703 Double_t max = 0.;
1704 const char *xaxis = "";
1705 if(fKindSlices == 1)
1706 {
1707 nBins = fNBinsJetInvMass;
1708 min = fJetInvMassMin;
1709 max = fJetInvMassMax;
1710 xaxis = "M_{JJ} [GeV]";
1711 }
1712 if(fKindSlices == 2 || fKindSlices == 3)
1713 {
1714 nBins = fNBinsJetPt;
1715 min = fJetPtMin;
1716 max = fJetPtMax;
1717 if(fKindSlices == 2) xaxis = "E_{Tmean} [GeV]";
1718 if(fKindSlices == 3) xaxis ="leading jet p_{T} [GeV/c]";
1719 }
1720
1721
fceb275f 1722 fh2InvMass = new TH2F(Form("fh2DJInvMassPositionCut%s", fNameQADJ.Data()), "",nBins, min, max, fNBinsJetInvMass, fJetInvMassMin, fJetInvMassMax);
1723 fh2DeltaPhi = new TH2F(Form("fh2DJDeltaPhiPositionCut%s", fNameQADJ.Data()), "",nBins, min, max, fNBinsDeltaPhi, fDeltaPhiMin, fDeltaPhiMax);
1724 fh2DeltaEta = new TH2F(Form("fh2DJDeltaEtaPositionCut%s", fNameQADJ.Data()), "",nBins, min, max, fNBinsDeltaEta, fDeltaEtaMin, fDeltaEtaMax);
1725 fh2DeltaPt = new TH2F(Form("fh2DJDeltaPtPositionCut%s", fNameQADJ.Data()), "",nBins, min, max, fNBinsDeltaPt, fDeltaPtMin, fDeltaPtMax);
656dc810 1726
1727 AliAnalysisTaskFragmentationFunction::SetProperties(fh2InvMass, xaxis, "Invariant Mass", "Entries");
1728 AliAnalysisTaskFragmentationFunction::SetProperties(fh2DeltaPhi, xaxis, "#Delta #phi", "Entries");
1729 AliAnalysisTaskFragmentationFunction::SetProperties(fh2DeltaEta, xaxis, "#Delta #eta", "Entries");
1730 AliAnalysisTaskFragmentationFunction::SetProperties(fh2DeltaPt, xaxis, "#Delta p_{T}", "Entries");
1731
1732}
1733
1734//________________________________________________________________________
1735void AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::FillDiJetQA(Double_t invMass, Double_t deltaPhi, Double_t deltaEta,Double_t deltaPt, Double_t jetBin)
1736{
fceb275f 1737 // fill dijet QA
1738
656dc810 1739 fh2InvMass->Fill(jetBin, invMass);
1740 fh2DeltaPhi->Fill(jetBin, deltaPhi);
1741 fh2DeltaEta->Fill(jetBin, deltaEta);
1742 fh2DeltaPt->Fill(jetBin, deltaPt);
1743}
1744
1745//________________________________________________________________________
1746void AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::AddToOutput(TList* list)const
1747{
fceb275f 1748 // add histos to list
1749
656dc810 1750 list->Add(fh2InvMass);
1751 list->Add(fh2DeltaPhi);
1752 list->Add(fh2DeltaEta);
1753 list->Add(fh2DeltaPt);
1754}
1755
1756//_________________________________________________________________________________
1757void AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::AddToOutput(TList* list) const
1758{
1759 // add histos to list
1760
1761 list->Add(fh2CosTheta);
1762 list->Add(fh2Theta);
1763 list->Add(fh2Jt);
1764
1765 list->Add(fhnIntraJet);
1766
1767}
1768
ac017ff3 1769
1770Bool_t AliAnalysisTaskFragmentationFunction::Notify()
1771{
1772 //
1773 // Implemented Notify() to read the cross sections
1774 // and number of trials from pyxsec.root
c2658535 1775 // (taken from AliAnalysisTaskJetSpectrum2)
ac017ff3 1776 //
1777 TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
c2658535 1778 Float_t xsection = 0;
1779 Float_t ftrials = 1;
1780
1781 fAvgTrials = 1;
ac017ff3 1782 if(tree){
1783 TFile *curfile = tree->GetCurrentFile();
1784 if (!curfile) {
1785 Error("Notify","No current file");
1786 return kFALSE;
1787 }
1788 if(!fh1Xsec||!fh1Trials){
1789 Printf("%s%d No Histogram fh1Xsec",(char*)__FILE__,__LINE__);
1790 return kFALSE;
1791 }
c2658535 1792 AliAnalysisHelperJetTasks::PythiaInfoFromFile(curfile->GetName(),xsection,ftrials);
ac017ff3 1793 fh1Xsec->Fill("<#sigma>",xsection);
c2658535 1794 // construct a poor man average trials
1795 Float_t nEntries = (Float_t)tree->GetTree()->GetEntries();
1796 if(ftrials>=nEntries && nEntries>0.)fAvgTrials = ftrials/nEntries;
ac017ff3 1797 }
ac017ff3 1798 return kTRUE;
1799}
1800
1801
1802
656dc810 1803//__________________________________________________________________
1804void AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects()
1805{
1806 // create output objects
1807
1808 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects()");
1809
1810 // create list of tracks and jets
1811
1812 fTracksRec = new TList();
1813 fTracksRec->SetOwner(kFALSE);
1814
1815 fTracksRecCuts = new TList();
1816 fTracksRecCuts->SetOwner(kFALSE);
1817
1818 fTracksGen = new TList();
1819 fTracksGen->SetOwner(kFALSE);
1820
fe343c6b 1821 fTracksAODMCCharged = new TList();
1822 fTracksAODMCCharged->SetOwner(kFALSE);
1823
1824 fTracksRecQualityCuts = new TList();
1825 fTracksRecQualityCuts->SetOwner(kFALSE);
1826
656dc810 1827 fJetsRec = new TList();
1828 fJetsRec->SetOwner(kFALSE);
1829
1830 fJetsRecCuts = new TList();
1831 fJetsRecCuts->SetOwner(kFALSE);
1832
1833 fJetsGen = new TList();
1834 fJetsGen->SetOwner(kFALSE);
1835
fe343c6b 1836 fJetsRecEff = new TList();
1837 fJetsRecEff->SetOwner(kFALSE);
1838
656dc810 1839 // fJetsKine = new TList();
1840 // fJetsKine->SetOwner(kTRUE); // delete AOD jets using mom from Kine Tree via TList::Clear()
1841
1842
1843 //
1844 // Create histograms / output container
1845 //
1846
1847 OpenFile(1);
1848 fCommonHistList = new TList();
1849
1850 Bool_t oldStatus = TH1::AddDirectoryStatus();
1851 TH1::AddDirectory(kFALSE);
1852
1853
1854 // Histograms
1855 fh1EvtSelection = new TH1F("fh1EvtSelection", "Event Selection", 6, -0.5, 5.5);
1856 fh1VertexNContributors = new TH1F("fh1VertexNContributors", "Vertex N contributors", 11,-.5, 10.5);
1857 fh1VertexZ = new TH1F("fh1VertexZ", "Vertex z distribution", 30, -15., 15.);
ac017ff3 1858 fh1EvtMult = new TH1F("fh1EvtMult","Event multiplicity, track pT cut > 150 MeV/c, |#eta| < 0.9",120,0.,120.);
1859
1860 fh1Xsec = new TProfile("fh1Xsec","xsec from pyxsec.root",1,0,1);
1861 fh1Xsec->GetXaxis()->SetBinLabel(1,"<#sigma>");
1862 fh1Trials = new TH1F("fh1Trials","trials from pyxsec.root",1,0,1);
1863 fh1Trials->GetXaxis()->SetBinLabel(1,"#sum{ntrials}");
1864 fh1PtHard = new TH1F("fh1PtHard","PYTHIA Pt hard;p_{T,hard}",350,-.5,349.5);
1865 fh1PtHardTrials = new TH1F("fh1PtHardTrials","PYTHIA Pt hard weight with trials;p_{T,hard}",350,-.5,349.5);
1866
656dc810 1867 fh1nRecJetsCuts = new TH1F("fh1nRecJetsCuts","reconstructed jets per event",10,-0.5,9.5);
1868 fh1nGenJets = new TH1F("fh1nGenJets","generated jets per event",10,-0.5,9.5);
fe343c6b 1869 fh1nRecEffJets = new TH1F("fh1nRecEffJets","reconstruction effiency: jets per event",10,-0.5,9.5);
1870
1871 // 5D single track eff histo: phi:eta:gen pt:rec pt:isReconstructed - use binning as for track QA
1872 Int_t nBinsSingleTrackEffHisto[5] = { fQATrackNBinsPhi, fQATrackNBinsEta, fQATrackNBinsPt, fQATrackNBinsPt, 2 };
1873 Double_t binMinSingleTrackEffHisto[5] = { fQATrackPhiMin, fQATrackEtaMin, fQATrackPtMin, fQATrackPtMin, 0 };
1874 Double_t binMaxSingleTrackEffHisto[5] = { fQATrackPhiMax, fQATrackEtaMax, fQATrackPtMax, fQATrackPtMax, 2 };
1875 const char* labelsSingleTrackEffHisto[5] = {"#phi","#eta","gen p_{T} [GeV/c]", "rec p_{T} [GeV/c]", "isRec"};
1876
1877 fhnSingleTrackRecEffHisto = new THnSparseF("fhnSingleTrackRecEffHisto","generated tracks phi:eta:pt:isReconstructed",5,
1878 nBinsSingleTrackEffHisto,binMinSingleTrackEffHisto,binMaxSingleTrackEffHisto);
1879
1880 AliAnalysisTaskFragmentationFunction::SetProperties(fhnSingleTrackRecEffHisto,5,labelsSingleTrackEffHisto);
1881
1882
2d1d1b60 1883 // 8D jets track eff histo: jet phi:eta:gen pt:rec pt:track pt:z:xi:isReconstructed - use binning as for track/jet QA
1884 Int_t nBinsJetTrackEffHisto[8] = { fQAJetNBinsPhi, fQAJetNBinsEta, fFFNBinsJetPt, fFFNBinsJetPt, fFFNBinsPt, fFFNBinsZ, fFFNBinsXi, 2};
1885 Double_t binMinJetTrackEffHisto[8] = { fQAJetPhiMin, fQAJetEtaMin, fFFJetPtMin , fFFJetPtMin , fFFPtMin, fFFZMin , fFFXiMin, 0 };
1886 Double_t binMaxJetTrackEffHisto[8] = { fQAJetPhiMax, fQAJetEtaMax, fFFJetPtMax , fFFJetPtMax , fFFPtMax, fFFZMax , fFFXiMax, 2 };
1887 const char* labelsJetTrackEffHisto[8] = {"jet #phi","jet #eta","jet gen p_{T} [GeV/c]","jet rec p_{T} [GeV/c]","track p_{T} [GeV/c]","z","#xi","isRec"};
fe343c6b 1888
2d1d1b60 1889 fhnJetTrackRecEffHisto = new THnSparseF("fhnJetTrackRecEffHisto","generated tracks - jet phi:jet eta:jet gen pt:jet rec pt:track pt:z:xi:isReconstructed",8,
fe343c6b 1890 nBinsJetTrackEffHisto,binMinJetTrackEffHisto,binMaxJetTrackEffHisto);
1891
2d1d1b60 1892 AliAnalysisTaskFragmentationFunction::SetProperties(fhnJetTrackRecEffHisto,8,labelsJetTrackEffHisto);
656dc810 1893
1894
1895 fQATrackHistosRec = new AliFragFuncQATrackHistos("Rec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1896 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1897 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1898 fQATrackHighPtThreshold);
1899 fQATrackHistosRecCuts = new AliFragFuncQATrackHistos("RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1900 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1901 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1902 fQATrackHighPtThreshold);
1903 fQATrackHistosGen = new AliFragFuncQATrackHistos("Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1904 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1905 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1906 fQATrackHighPtThreshold);
1907
1908
1909 fQAJetHistosRec = new AliFragFuncQAJetHistos("Rec", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1910 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1911 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1912 fQAJetHistosRecCuts = new AliFragFuncQAJetHistos("RecCuts", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1913 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1914 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1915 fQAJetHistosRecCutsLeading = new AliFragFuncQAJetHistos("RecCutsLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1916 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1917 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1918 fQAJetHistosGen = new AliFragFuncQAJetHistos("Gen", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1919 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1920 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1921 fQAJetHistosGenLeading = new AliFragFuncQAJetHistos("GenLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1922 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
fe343c6b 1923 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1924 fQAJetHistosRecEffLeading = new AliFragFuncQAJetHistos("RecEffLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1925 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1926
656dc810 1927
1928 fFFHistosRecCuts = new AliFragFuncHistos("RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1929 fFFNBinsPt, fFFPtMin, fFFPtMax,
1930 fFFNBinsXi, fFFXiMin, fFFXiMax,
1931 fFFNBinsZ , fFFZMin , fFFZMax);
1932 fFFHistosRecLeading = new AliFragFuncHistos("RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1933 fFFNBinsPt, fFFPtMin, fFFPtMax,
1934 fFFNBinsXi, fFFXiMin, fFFXiMax,
1935 fFFNBinsZ , fFFZMin , fFFZMax);
1936 fFFHistosRecLeadingTrack = new AliFragFuncHistos("RecLeadingTrack", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1937 fFFNBinsPt, fFFPtMin, fFFPtMax,
1938 fFFNBinsXi, fFFXiMin, fFFXiMax,
1939 fFFNBinsZ , fFFZMin , fFFZMax);
1940 fFFHistosGen = new AliFragFuncHistos("Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1941 fFFNBinsPt, fFFPtMin, fFFPtMax,
1942 fFFNBinsXi, fFFXiMin, fFFXiMax,
1943 fFFNBinsZ , fFFZMin , fFFZMax);
1944 fFFHistosGenLeading = new AliFragFuncHistos("GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1945 fFFNBinsPt, fFFPtMin, fFFPtMax,
1946 fFFNBinsXi, fFFXiMin, fFFXiMax,
1947 fFFNBinsZ , fFFZMin , fFFZMax);
1948 fFFHistosGenLeadingTrack = new AliFragFuncHistos("GenLeadingTrack", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1949 fFFNBinsPt, fFFPtMin, fFFPtMax,
1950 fFFNBinsXi, fFFXiMin, fFFXiMax,
1951 fFFNBinsZ , fFFZMin , fFFZMax);
1952
1953
1954 fIJHistosRecCuts = new AliFragFuncIntraJetHistos("RecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
1955 fIJNBinsPt, fIJPtMin, fIJPtMax,
1956 fIJNBinsZ, fIJZMin, fIJZMax,
1957 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
1958 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
1959 fIJNBinsJt , fIJJtMin , fIJJtMax);
1960 fIJHistosRecLeading = new AliFragFuncIntraJetHistos("RecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
1961 fIJNBinsPt, fIJPtMin, fIJPtMax,
1962 fIJNBinsZ, fIJZMin, fIJZMax,
1963 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
1964 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
1965 fIJNBinsJt , fIJJtMin , fIJJtMax);
1966 fIJHistosRecLeadingTrack = new AliFragFuncIntraJetHistos("RecLeadingTrack", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
1967 fIJNBinsPt, fIJPtMin, fIJPtMax,
1968 fIJNBinsZ, fIJZMin, fIJZMax,
1969 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
1970 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
1971 fIJNBinsJt , fIJJtMin , fIJJtMax);
1972 fIJHistosGen = new AliFragFuncIntraJetHistos("Gen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
1973 fIJNBinsPt, fIJPtMin, fIJPtMax,
1974 fIJNBinsZ, fIJZMin, fIJZMax,
1975 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
1976 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
1977 fIJNBinsJt , fIJJtMin , fIJJtMax);
1978 fIJHistosGenLeading = new AliFragFuncIntraJetHistos("GenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
1979 fIJNBinsPt, fIJPtMin, fIJPtMax,
1980 fIJNBinsZ, fIJZMin, fIJZMax,
1981 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
1982 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
1983 fIJNBinsJt , fIJJtMin , fIJJtMax);
1984 fIJHistosGenLeadingTrack = new AliFragFuncIntraJetHistos("GenLeadingTrack", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
1985 fIJNBinsPt, fIJPtMin, fIJPtMax,
1986 fIJNBinsZ, fIJZMin, fIJZMax,
1987 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
1988 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
1989 fIJNBinsJt , fIJJtMin , fIJJtMax);
1990
1991
1992 fFFDiJetHistosRecCuts = new AliFragFuncDiJetHistos("RecCuts", fDiJetKindBins,
1993 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
1994 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
1995 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
1996 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
1997 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
1998 fFFDiJetHistosRecLeading = new AliFragFuncDiJetHistos("RecLeading", fDiJetKindBins,
1999 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2000 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2001 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2002 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2003 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2004 fFFDiJetHistosRecLeadingTrack = new AliFragFuncDiJetHistos("RecLeadingTrack", fDiJetKindBins,
2005 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2006 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2007 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2008 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2009 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2010
2011 fFFDiJetHistosGen = new AliFragFuncDiJetHistos("Gen", fDiJetKindBins,
2012 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2013 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2014 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2015 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2016 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2017 fFFDiJetHistosGenLeading = new AliFragFuncDiJetHistos("GenLeading", fDiJetKindBins,
2018 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2019 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2020 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2021 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2022 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2023 fFFDiJetHistosGenLeadingTrack = new AliFragFuncDiJetHistos("GenLeadingTrack", fDiJetKindBins,
2024 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2025 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2026 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2027 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2028 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2029
2030 fQADiJetHistosRecCuts = new AliFragFuncQADiJetHistos("RecCuts", fDiJetKindBins,
2031 fQADiJetNBinsInvMass, fQADiJetInvMassMin, fQADiJetInvMassMax,
2032 fQADiJetNBinsJetPt, fQADiJetJetPtMin, fQADiJetJetPtMax,
2033 fQADiJetNBinsDeltaPhi, fQADiJetDeltaPhiMin, fQADiJetDeltaPhiMax ,
2034 fQADiJetNBinsDeltaEta, fQADiJetDeltaEtaMin, fQADiJetDeltaEtaMax ,
2035 fQADiJetNBinsDeltaPt, fQADiJetDeltaPtMin, fQADiJetDeltaPtMax);
2036 fQADiJetHistosGen = new AliFragFuncQADiJetHistos("Gen", fDiJetKindBins,
2037 fQADiJetNBinsInvMass, fQADiJetInvMassMin, fQADiJetInvMassMax,
2038 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2039 fQADiJetNBinsDeltaPhi, fQADiJetDeltaPhiMin, fQADiJetDeltaPhiMax,
2040 fQADiJetNBinsDeltaEta, fQADiJetDeltaEtaMin, fQADiJetDeltaEtaMax,
2041 fQADiJetNBinsDeltaPt, fQADiJetDeltaPtMin, fQADiJetDeltaPtMax);
2042
2043
2044 fQATrackHistosRec->DefineHistos();
2045 fQATrackHistosRecCuts->DefineHistos();
2046 fQATrackHistosGen->DefineHistos();
2047
2048 fQAJetHistosRec->DefineHistos();
2049 fQAJetHistosRecCuts->DefineHistos();
2050 fQAJetHistosRecCutsLeading->DefineHistos();
2051 fQAJetHistosGen->DefineHistos();
2052 fQAJetHistosGenLeading->DefineHistos();
fe343c6b 2053 fQAJetHistosRecEffLeading->DefineHistos();
656dc810 2054
2055 fFFHistosRecCuts->DefineHistos();
2056 fFFHistosRecLeading->DefineHistos();
2057 fFFHistosRecLeadingTrack->DefineHistos();
2058 fFFHistosGen->DefineHistos();
2059 fFFHistosGenLeading->DefineHistos();
2060 fFFHistosGenLeadingTrack->DefineHistos();
2061
2062 fIJHistosRecCuts->DefineHistos();
2063 fIJHistosRecLeading->DefineHistos();
2064 fIJHistosRecLeadingTrack->DefineHistos();
2065 fIJHistosGen->DefineHistos();
2066 fIJHistosGenLeading->DefineHistos();
2067 fIJHistosGenLeadingTrack->DefineHistos();
2068
2069 fFFDiJetHistosRecCuts->DefineDiJetHistos();
2070 fFFDiJetHistosRecLeading->DefineDiJetHistos();
2071 fFFDiJetHistosRecLeadingTrack->DefineDiJetHistos();
2072 fFFDiJetHistosGen->DefineDiJetHistos();
2073 fFFDiJetHistosGenLeading->DefineDiJetHistos();
2074 fFFDiJetHistosGenLeadingTrack->DefineDiJetHistos();
2075 fQADiJetHistosRecCuts->DefineQADiJetHistos();
2076 fQADiJetHistosGen->DefineQADiJetHistos();
2077
fb03edbe 2078 Bool_t genJets = (fJetTypeGen != kJetsUndef) ? kTRUE : kFALSE;
2079 Bool_t genTracks = (fTrackTypeGen != kTrackUndef) ? kTRUE : kFALSE;
2080 Bool_t recJetsEff = (fJetTypeRecEff != kJetsUndef) ? kTRUE : kFALSE;
2081
2082
656dc810 2083 const Int_t saveLevel = 5;
2084 if(saveLevel>0){
2085 fCommonHistList->Add(fh1EvtSelection);
2086 fFFHistosRecCuts->AddToOutput(fCommonHistList);
2087 fFFHistosRecLeading->AddToOutput(fCommonHistList);
2088 fFFHistosRecLeadingTrack->AddToOutput(fCommonHistList);
fb03edbe 2089
2090 if(genJets && genTracks){
2091 fFFHistosGen->AddToOutput(fCommonHistList);
2092 fFFHistosGenLeading->AddToOutput(fCommonHistList);
2093 fFFHistosGenLeadingTrack->AddToOutput(fCommonHistList);
ac017ff3 2094
2095 fCommonHistList->Add(fh1Xsec);
2096 fCommonHistList->Add(fh1Trials);
2097 fCommonHistList->Add(fh1PtHard);
2098 fCommonHistList->Add(fh1PtHardTrials);
fb03edbe 2099 }
656dc810 2100 }
2101 if(saveLevel>1){
2102 fQATrackHistosRec->AddToOutput(fCommonHistList);
2103 fQATrackHistosRecCuts->AddToOutput(fCommonHistList);
fb03edbe 2104 if(genTracks) fQATrackHistosGen->AddToOutput(fCommonHistList);
656dc810 2105
2106 fQAJetHistosRec->AddToOutput(fCommonHistList);
2107 fQAJetHistosRecCuts->AddToOutput(fCommonHistList);
2108 fQAJetHistosRecCutsLeading->AddToOutput(fCommonHistList);
fb03edbe 2109 if(recJetsEff) fQAJetHistosRecEffLeading->AddToOutput(fCommonHistList);
2110
2111 if(genJets){
2112 fQAJetHistosGen->AddToOutput(fCommonHistList);
2113 fQAJetHistosGenLeading->AddToOutput(fCommonHistList);
2114 }
fe343c6b 2115
656dc810 2116 fCommonHistList->Add(fh1EvtMult);
2117 fCommonHistList->Add(fh1nRecJetsCuts);
fb03edbe 2118 if(genJets) fCommonHistList->Add(fh1nGenJets);
656dc810 2119 }
2120 if(saveLevel>2){
2121 fCommonHistList->Add(fh1VertexNContributors);
2122 fCommonHistList->Add(fh1VertexZ);
2123 }
2124 if(saveLevel>3){
2125 fIJHistosRecCuts->AddToOutput(fCommonHistList);
2126 fIJHistosRecLeading->AddToOutput(fCommonHistList);
2127 fIJHistosRecLeadingTrack->AddToOutput(fCommonHistList);
fb03edbe 2128
2129 if(genJets && genTracks){
2130 fIJHistosGen->AddToOutput(fCommonHistList);
2131 fIJHistosGenLeading->AddToOutput(fCommonHistList);
2132 fIJHistosGenLeadingTrack->AddToOutput(fCommonHistList);
2133 }
656dc810 2134 }
2135 if(saveLevel>4){
2136 fFFDiJetHistosRecCuts->AddToOutput(fCommonHistList);
2137 fFFDiJetHistosRecLeading->AddToOutput(fCommonHistList);
2138 fFFDiJetHistosRecLeadingTrack->AddToOutput(fCommonHistList);
656dc810 2139 fQADiJetHistosRecCuts->AddToOutput(fCommonHistList);
fb03edbe 2140
2141 if(genJets && genTracks){
2142 fFFDiJetHistosGen->AddToOutput(fCommonHistList);
2143 fFFDiJetHistosGenLeading->AddToOutput(fCommonHistList);
2144 fFFDiJetHistosGenLeadingTrack->AddToOutput(fCommonHistList);
2145 fQADiJetHistosGen->AddToOutput(fCommonHistList);
2146 }
2147
2148 if(recJetsEff && genTracks){
2149 fCommonHistList->Add(fhnSingleTrackRecEffHisto);
2150 fCommonHistList->Add(fhnJetTrackRecEffHisto);
2151 fCommonHistList->Add(fh1nRecEffJets);
2152 }
656dc810 2153 }
2154
2155 // =========== Switch on Sumw2 for all histos ===========
2156 for (Int_t i=0; i<fCommonHistList->GetEntries(); ++i){
2157 TH1 *h1 = dynamic_cast<TH1*>(fCommonHistList->At(i));
2158 if (h1) h1->Sumw2();
2159 else{
2160 THnSparse *hnSparse = dynamic_cast<THnSparse*>(fCommonHistList->At(i));
2161 if(hnSparse) hnSparse->Sumw2();
2162 }
2163 }
2164
2165 TH1::AddDirectory(oldStatus);
2166}
2167
2168//_______________________________________________
2169void AliAnalysisTaskFragmentationFunction::Init()
2170{
2171 // Initialization
2172 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::Init()");
2173
2174}
2175
2176//_____________________________________________________________
2177void AliAnalysisTaskFragmentationFunction::UserExec(Option_t *)
2178{
2179 // Main loop
2180 // Called for each event
2181 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::UserExec()");
2182
2183
2184 if(fDebug > 1) Printf("Analysis event #%5d", (Int_t) fEntry);
2185 // Trigger selection
2186
2187 AliInputEventHandler* inputHandler = (AliInputEventHandler*)
2188 ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
fe343c6b 2189 if(inputHandler->IsEventSelected() & AliVEvent::kMB){
656dc810 2190 if(fDebug > 1) Printf(" Trigger Selection: event ACCEPTED ... ");
2191 fh1EvtSelection->Fill(1.);
2192 } else {
2193 fh1EvtSelection->Fill(0.);
ac017ff3 2194 if(inputHandler->InheritsFrom("AliESDInputHandler") && fUsePhysicsSelection){ // PhysicsSelection only with ESD input
656dc810 2195 if (fDebug > 1 ) Printf(" Trigger Selection: event REJECTED ... ");
2196 PostData(1, fCommonHistList);
2197 return;
2198 }
2199 }
2200
2201 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
2202 if(!fESD){
2203 if(fDebug>3) Printf("%s:%d ESDEvent not found in the input", (char*)__FILE__,__LINE__);
2204 }
2205
2206 fMCEvent = MCEvent();
2207 if(!fMCEvent){
2208 if(fDebug>3) Printf("%s:%d MCEvent not found in the input", (char*)__FILE__,__LINE__);
2209 }
2210
2211 // get AOD event from input/ouput
2212 TObject* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
2213 if( handler && handler->InheritsFrom("AliAODInputHandler") ) {
2214 fAOD = ((AliAODInputHandler*)handler)->GetEvent();
2215 if (fDebug > 1) Printf("%s:%d AOD event from input", (char*)__FILE__,__LINE__);
2216 }
2217 else {
2218 handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
2219 if( handler && handler->InheritsFrom("AliAODHandler") ) {
2220 fAOD = ((AliAODHandler*)handler)->GetAOD();
2221 if (fDebug > 1) Printf("%s:%d AOD event from output", (char*)__FILE__,__LINE__);
2222 }
2223 }
2224
2225 if(!fAOD){
2226 Printf("%s:%d AODEvent not found", (char*)__FILE__,__LINE__);
2227 return;
2228 }
2229
2230
2231 // event selection (vertex) *****************************************
2232
2233 AliAODVertex* primVtx = fAOD->GetPrimaryVertex();
2234 Int_t nTracksPrim = primVtx->GetNContributors();
2235 fh1VertexNContributors->Fill(nTracksPrim);
2236
2237 if (fDebug > 1) Printf("%s:%d primary vertex selection: %d", (char*)__FILE__,__LINE__,nTracksPrim);
2238 if(!nTracksPrim){
2239 if (fDebug > 1) Printf("%s:%d primary vertex selection: event REJECTED...",(char*)__FILE__,__LINE__);
2240 fh1EvtSelection->Fill(2.);
2241 PostData(1, fCommonHistList);
2242 return;
2243 }
2244
2245 fh1VertexZ->Fill(primVtx->GetZ());
2246
2247 if(TMath::Abs(primVtx->GetZ())>10){
2248 if (fDebug > 1) Printf("%s:%d primary vertex z = %f: event REJECTED...",(char*)__FILE__,__LINE__,primVtx->GetZ());
2249 fh1EvtSelection->Fill(3.);
2250 PostData(1, fCommonHistList);
2251 return;
2252 }
2253
2254 TString primVtxName(primVtx->GetName());
2255
2256 if(primVtxName.CompareTo("TPCVertex",TString::kIgnoreCase) == 1){
2257 if (fDebug > 1) Printf("%s:%d primary vertex selection: TPC vertex, event REJECTED...",(char*)__FILE__,__LINE__);
2258 fh1EvtSelection->Fill(4.);
2259 PostData(1, fCommonHistList);
2260 return;
2261 }
2262 if (fDebug > 1) Printf("%s:%d primary vertex selection: event ACCEPTED ...",(char*)__FILE__,__LINE__);
2263 fh1EvtSelection->Fill(5.);
ac017ff3 2264
2265
2266 //___ get MC information __________________________________________________________________
2267
2268 Double_t ptHard = 0.;
2269 Double_t nTrials = 1; // trials for MC trigger weight for real data
3e1c1eee 2270
2271 if(fMCEvent){
5fde4a38 2272 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
2273 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
2274 AliGenHijingEventHeader* hijingGenHeader = 0x0;
2275
2276 if(pythiaGenHeader){
2277 if(fDebug>3) Printf("%s:%d pythiaGenHeader found", (char*)__FILE__,__LINE__);
2278 nTrials = pythiaGenHeader->Trials();
2279 ptHard = pythiaGenHeader->GetPtHard();
2280
2281 fh1PtHard->Fill(ptHard);
2282 fh1PtHardTrials->Fill(ptHard,nTrials);
2283
ac017ff3 2284
5fde4a38 2285 } else { // no pythia, hijing?
c2658535 2286
5fde4a38 2287 if(fDebug>3) Printf("%s:%d no pythiaGenHeader found", (char*)__FILE__,__LINE__);
2288
2289 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
2290 if(!hijingGenHeader){
2291 Printf("%s:%d no pythiaGenHeader or hjingGenHeader found", (char*)__FILE__,__LINE__);
2292 } else {
2293 if(fDebug>3) Printf("%s:%d hijingGenHeader found", (char*)__FILE__,__LINE__);
2294 }
3e1c1eee 2295 }
5fde4a38 2296
2297 fh1Trials->Fill("#sum{ntrials}",fAvgTrials);
2298 }
656dc810 2299
2300
2301 //___ fetch jets __________________________________________________________________________
2302
2303 Int_t nJ = GetListOfJets(fJetsRec, kJetsRec);
2304 Int_t nRecJets = 0;
2305 if(nJ>=0) nRecJets = fJetsRec->GetEntries();
2306 if(fDebug>2)Printf("%s:%d Selected Rec jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
2307 if(nJ != nRecJets) Printf("%s:%d Mismatch Selected Rec Jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
2308
2309 Int_t nJCuts = GetListOfJets(fJetsRecCuts, kJetsRecAcceptance);
2310 Int_t nRecJetsCuts = 0;
2311 if(nJCuts>=0) nRecJetsCuts = fJetsRecCuts->GetEntries();
2312 if(fDebug>2)Printf("%s:%d Selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
2313 if(nRecJetsCuts != nJCuts) Printf("%s:%d Mismatch selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
2314 fh1nRecJetsCuts->Fill(nRecJetsCuts);
2315
2316
2317 if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
2318 Int_t nJGen = GetListOfJets(fJetsGen, fJetTypeGen);
2319 Int_t nGenJets = 0;
2320 if(nJGen>=0) nGenJets = fJetsGen->GetEntries();
2321 if(fDebug>2)Printf("%s:%d Selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
2322 if(nJGen != nGenJets) Printf("%s:%d Mismatch selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
2323 fh1nGenJets->Fill(nGenJets);
2324
2325
fe343c6b 2326 if(fJetTypeRecEff==kJetsKine || fJetTypeRecEff == kJetsKineAcceptance) fJetsRecEff->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
2327 Int_t nJRecEff = GetListOfJets(fJetsRecEff, fJetTypeRecEff);
2328 Int_t nRecEffJets = 0;
2329 if(nJRecEff>=0) nRecEffJets = fJetsRecEff->GetEntries();
2330 if(fDebug>2)Printf("%s:%d Selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
2331 if(nJRecEff != nRecEffJets) Printf("%s:%d Mismatch selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
2332 fh1nRecEffJets->Fill(nRecEffJets);
2333
2334
656dc810 2335 //____ fetch particles __________________________________________________________
2336
2337 Int_t nT = GetListOfTracks(fTracksRec, kTrackAOD);
2338 Int_t nRecPart = 0;
2339 if(nT>=0) nRecPart = fTracksRec->GetEntries();
2340 if(fDebug>2)Printf("%s:%d Selected Rec tracks: %d %d",(char*)__FILE__,__LINE__,nT,nRecPart);
2341 if(nRecPart != nT) Printf("%s:%d Mismatch selected Rec tracks: %d %d",(char*)__FILE__,__LINE__,nT,nRecPart);
2342
2343
2344 Int_t nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODCuts);
2345 Int_t nRecPartCuts = 0;
2346 if(nTCuts>=0) nRecPartCuts = fTracksRecCuts->GetEntries();
2347 if(fDebug>2)Printf("%s:%d Selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
2348 if(nRecPartCuts != nTCuts) Printf("%s:%d Mismatch selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
2349 fh1EvtMult->Fill(nRecPartCuts);
2350
2351
2352 Int_t nTGen = GetListOfTracks(fTracksGen,fTrackTypeGen);
2353 Int_t nGenPart = 0;
2354 if(nTGen>=0) nGenPart = fTracksGen->GetEntries();
2355 if(fDebug>2)Printf("%s:%d Selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
2356 if(nGenPart != nTGen) Printf("%s:%d Mismatch selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
2357
2358
2359 //____ analysis, fill histos ___________________________________________________
2360
2361 // loop over tracks
2362
2363 for(Int_t it=0; it<nRecPart; ++it){
2364 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksRec->At(it));
2365 fQATrackHistosRec->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
2366 }
2367 for(Int_t it=0; it<nRecPartCuts; ++it){
2368 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksRecCuts->At(it));
2369 fQATrackHistosRecCuts->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
2370 }
2371 for(Int_t it=0; it<nGenPart; ++it){
2372 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksGen->At(it));
2373 fQATrackHistosGen->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
2374 }
2375
2376 // loop over jets
2377
2378 for(Int_t ij=0; ij<nRecJets; ++ij){
2379
2380 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRec->At(ij));
2381 fQAJetHistosRec->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
2382 }
2383
2384
2385 for(Int_t ij=0; ij<nRecJetsCuts; ++ij){
2386
2387 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRecCuts->At(ij));
2388 fQAJetHistosRecCuts->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
2389
2390 if(ij==0){ // leading jet
2391
2392 fQAJetHistosRecCutsLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt() );
2393
2394 TList* jettracklist = new TList();
2395 Double_t sumPt = 0.;
2396 Float_t leadTrackPx = 0.;
2397 Float_t leadTrackPy = 0.;
2398 Float_t leadTrackPz = 0.;
2399 Float_t leadTrackP = 0.;
2400 Float_t leadTrackPt = 0.;
2401 TLorentzVector* leadTrackV = new TLorentzVector();
2402
2403 if(GetFFRadius()<=0){
2404 GetJetTracksTrackrefs(jettracklist, jet);
2405 } else {
2406 GetJetTracksPointing(fTracksRecCuts, jettracklist, jet, GetFFRadius(), sumPt);
2407 }
2408
2409 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
2410 Float_t trackPx = (dynamic_cast<AliVParticle*> (jettracklist->At(it)))->Px();
2411 Float_t trackPy = (dynamic_cast<AliVParticle*> (jettracklist->At(it)))->Py();
2412 Float_t trackPz = (dynamic_cast<AliVParticle*> (jettracklist->At(it)))->Pz();
2413 Float_t trackP = (dynamic_cast<AliVParticle*> (jettracklist->At(it)))->P();
2414 Float_t trackPt = (dynamic_cast<AliVParticle*> (jettracklist->At(it)))->Pt();
2415 Float_t jetPx = jet->Px();
2416 Float_t jetPy = jet->Py();
2417 Float_t jetPz = jet->Pz();
2418 Float_t jetP = jet->P();
2419 Float_t jetPt = jet->Pt();
2420 TLorentzVector* trackV = new TLorentzVector();
2421 TLorentzVector *jetV = new TLorentzVector();
2422 trackV->SetPxPyPzE(trackPx,trackPy,trackPz,trackP);
2423 jetV->SetPxPyPzE(jetPx,jetPy,jetPz,jetP);
2424
2425 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
2426
2427 fFFHistosRecCuts->FillFF( trackPt, jetPt, incrementJetPt);
2428 fIJHistosRecCuts->FillIntraJet( trackV, jetV );
2429
2430 if(it==0){
2431 leadTrackPx = trackPx;
2432 leadTrackPy = trackPy;
2433 leadTrackPz = trackPz;
2434 leadTrackP = trackP;
2435 leadTrackPt = trackPt;
2436 fFFHistosRecLeadingTrack->FillFF( leadTrackPt, jetPt, kTRUE);
2437
2438 leadTrackV->SetPxPyPzE(leadTrackPx,leadTrackPy,leadTrackPz,leadTrackP);
2439 fIJHistosRecLeadingTrack->FillIntraJet( leadTrackV, jetV );
2440 }
2441 fFFHistosRecLeading->FillFF( trackPt, leadTrackPt , incrementJetPt);
2442 fIJHistosRecLeading->FillIntraJet( trackV, leadTrackV );
2443
2444 delete trackV;
2445 delete jetV;
2446 }
2447
2448 delete leadTrackV;
2449 delete jettracklist;
2450 }
2451 }
2452
2453
2454 for(Int_t ij=0; ij<nGenJets; ++ij){
2455
2456 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsGen->At(ij));
2457 fQAJetHistosGen->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
2458
2459 if(ij==0){ // leading jet
2460
2461 fQAJetHistosGenLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
2462
2463 TList* jettracklist = new TList();
2464 Double_t sumPt = 0.;
2465 Float_t leadTrackPx = 0.;
2466 Float_t leadTrackPy = 0.;
2467 Float_t leadTrackPz = 0.;
2468 Float_t leadTrackP = 0.;
2469 Float_t leadTrackPt = 0.;
2470 TLorentzVector* leadTrackV = new TLorentzVector();
2471
2472 if(GetFFRadius()<=0){
2473 GetJetTracksTrackrefs(jettracklist, jet);
2474 } else {
2475 GetJetTracksPointing(fTracksGen, jettracklist, jet, GetFFRadius(), sumPt);
2476 }
2477
2478 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
2479 Float_t trackPx = (dynamic_cast<AliVParticle*>(jettracklist->At(it)))->Px();
2480 Float_t trackPy = (dynamic_cast<AliVParticle*>(jettracklist->At(it)))->Py();
2481 Float_t trackPz = (dynamic_cast<AliVParticle*>(jettracklist->At(it)))->Pz();
2482 Float_t trackP = (dynamic_cast<AliVParticle*>(jettracklist->At(it)))->P();
2483 Float_t trackPt = (dynamic_cast<AliVParticle*>(jettracklist->At(it)))->Pt();
2484 Float_t jetPx = jet->Px();
2485 Float_t jetPy = jet->Py();
2486 Float_t jetPz = jet->Pz();
2487 Float_t jetP = jet->P();
2488 Float_t jetPt = jet->Pt();
2489 TLorentzVector* trackV = new TLorentzVector();
2490 TLorentzVector *jetV = new TLorentzVector();
2491 trackV->SetPxPyPzE(trackPx,trackPy,trackPz,trackP);
2492 jetV->SetPxPyPzE(jetPx,jetPy,jetPz,jetP);
2493
2494 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
2495
2496 fFFHistosGen->FillFF( trackPt, jetPt, incrementJetPt);
2497 fIJHistosGen->FillIntraJet( trackV, jetV );
2498
2499 if(it==0){
2500 leadTrackPx = trackPx;
2501 leadTrackPy = trackPy;
2502 leadTrackPz = trackPz;
2503 leadTrackP = trackP;
2504 leadTrackPt = trackPt;
2505 fFFHistosGenLeadingTrack->FillFF( leadTrackPt, jetPt, kTRUE);
2506
2507 leadTrackV->SetPxPyPzE(leadTrackPx,leadTrackPy,leadTrackPz,leadTrackP);
2508 fIJHistosGenLeadingTrack->FillIntraJet( leadTrackV, jetV );
2509 }
2510 fFFHistosGenLeading->FillFF( trackPt, leadTrackPt, incrementJetPt);
2511 fIJHistosGenLeading->FillIntraJet( trackV, leadTrackV );
2512
2513 delete trackV;
2514 delete jetV;
2515 }
2516
2517 delete leadTrackV;
2518 delete jettracklist;
2519 }
2520 }
2521
2522 //_______ DiJet part _____________________________________________________
2523
2d1d1b60 2524 if (nRecJetsCuts > 1)
656dc810 2525 {
2526
2527 AliAODJet* jet1 = dynamic_cast<AliAODJet*>(fJetsRecCuts->At(0));
2528 AliAODJet* jet2 = dynamic_cast<AliAODJet*>(fJetsRecCuts->At(1));
2529
2530 // DiJet deltaphi calculation
2531 Double_t phi1 = TVector2::Phi_0_2pi(jet1->Phi());
2532 Double_t phi2 = TVector2::Phi_0_2pi(jet2->Phi());
2533 Double_t deltaPhi = TMath::Abs(phi1-phi2);
2534 if (deltaPhi > TMath::Pi() && deltaPhi < 2*TMath::Pi()) deltaPhi = 2*TMath::Pi() - deltaPhi;
2535
2536 // DiJet CDF cut calculation
fceb275f 2537 Double_t et1 = TMath::Abs(jet1->E()*TMath::Sin(jet1->Theta()));
2538 Double_t et2 = TMath::Abs(jet2->E()*TMath::Sin(jet2->Theta()));
2539 Double_t sumEt = et1 + et2;
2540 Double_t normEt1PlusEt2 = TMath::Sqrt(et1*et1+et2*et2+2*et1*et2*TMath::Cos(deltaPhi));
656dc810 2541 Double_t ratio = (Double_t)(normEt1PlusEt2/sumEt);
2542
2543 // DiJet events selection
2544 Bool_t positionCut = 0;
2545 Bool_t positionEnergyCut = 0;
2546 Bool_t cdfCut = 0;
2547
2548 // Position cut :
2549 if (deltaPhi > fDiJetDeltaPhiCut) positionCut = 1;
2550 // Position-Energy cut :
2551 if ((deltaPhi > fDiJetDeltaPhiCut) && ((jet2->Pt()) >= fDiJetPtFractionCut*(jet1->Pt()))) positionEnergyCut = 1;
2552 // CDF cut :
2553 if (ratio < fDiJetCDFCut) cdfCut = 1;
2554
2555 Int_t go = 0;
2556
2557 if (fDiJetCut == 1 && positionCut == 1) go = 1;
2558 if (fDiJetCut == 2 && positionEnergyCut == 1) go = 1;
2559 if (fDiJetCut == 3 && cdfCut == 1) go = 1;
2560
2561 if (go)
2562 {
2563 Double_t deltaEta = TMath::Abs(jet1->Eta()-jet2->Eta());
2564 Double_t deltaPt = TMath::Abs(jet1->Pt()-jet2->Pt());
fceb275f 2565 Double_t meanEt = (Double_t)((et1+et2)/2.);
656dc810 2566 Double_t invariantMass = (Double_t)InvMass(jet1,jet2);
2567
2568 Double_t jetBin = GetDiJetBin(invariantMass, jet1->Pt(), meanEt, fDiJetKindBins);
2569
2570 if (jetBin > 0)
2571 {
2572 fQADiJetHistosRecCuts->FillDiJetQA(invariantMass, deltaPhi, deltaEta, deltaPt, jetBin);
2573
2574 TList* jettracklist1 = new TList();
2575 Double_t sumPt1 = 0.;
2576 Float_t leadTrackPt1 = 0;
2577
2578 TList* jettracklist2 = new TList();
2579 Double_t sumPt2 = 0.;
2580 Float_t leadTrackPt2 = 0;
2581
2582 if(GetFFRadius()<=0)
2583 {
2584 GetJetTracksTrackrefs(jettracklist1, jet1);
2585 GetJetTracksTrackrefs(jettracklist2, jet2);
2586 }
2587 else
2588 {
2589 GetJetTracksPointing(fTracksRecCuts, jettracklist1, jet1, GetFFRadius(), sumPt1);
2590 GetJetTracksPointing(fTracksRecCuts, jettracklist2, jet2, GetFFRadius(), sumPt2);
2591 }
2592
2593 Int_t nTracks = jettracklist1->GetSize();
2594 if (jettracklist1->GetSize() < jettracklist2->GetSize()) nTracks = jettracklist2->GetSize();
2595
2596 for(Int_t it=0; it<nTracks; ++it)
2597 {
2598 if (it < jettracklist1->GetSize())
2599 {
2600 Float_t trackPt1 = (dynamic_cast<AliVParticle*> (jettracklist1->At(it)))->Pt();
2601 Float_t jetPt1 = jet1->Pt();
2602
2603 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
2604
2605 fFFDiJetHistosRecCuts->FillDiJetFF(1, trackPt1, jetPt1, jetBin, incrementJetPt);
2606 fFFDiJetHistosRecCuts->FillDiJetFF(0, trackPt1, jetPt1, jetBin, incrementJetPt);
2607
2608 if (it == 0)
2609 {
2610 leadTrackPt1 = trackPt1;
2611
2612 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(1, leadTrackPt1, jetPt1, jetBin, kTRUE);
2613 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(0, leadTrackPt1, jetPt1, jetBin, kTRUE);
2614 }
2615
2616 fFFDiJetHistosRecLeading->FillDiJetFF(1, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
2617 fFFDiJetHistosRecLeading->FillDiJetFF(0, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
2618 }
2619
2620 if (it < jettracklist2->GetSize())
2621 {
2622 Float_t trackPt2 = (dynamic_cast<AliVParticle*>(jettracklist2->At(it)))->Pt();
2623 Float_t jetPt2 = jet2->Pt();
2624
2625 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
2626
2627 fFFDiJetHistosRecCuts->FillDiJetFF(2, trackPt2, jetPt2, jetBin, incrementJetPt);
2628 fFFDiJetHistosRecCuts->FillDiJetFF(0, trackPt2, jetPt2, jetBin, incrementJetPt);
2629
2630 if (it == 0)
2631 {
2632 leadTrackPt2 = trackPt2;
2633
2634 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(2, leadTrackPt2, jetPt2, jetBin, kTRUE);
2635 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(0, leadTrackPt2, jetPt2, jetBin, kTRUE);
2636 }
2637
2638 fFFDiJetHistosRecLeading->FillDiJetFF(2, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
2639 fFFDiJetHistosRecLeading->FillDiJetFF(0, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
2640 }
2641 } // End loop on tracks
2642
2643 delete jettracklist1;
2644 delete jettracklist2;
2645
2646 } // End if(jetBin > 0)
2647 else { Printf("Jet bins for di-jet studies not set !");}
2648 } // End if(go)
2649 } // End if(nRecJets > 1)
2650
2651 if (nGenJets > 1)
2652 {
2653 AliAODJet* jet1 = dynamic_cast<AliAODJet*>(fJetsGen->At(0));
2654 AliAODJet* jet2 = dynamic_cast<AliAODJet*>(fJetsGen->At(1));
2655
2656 Double_t deltaPhi = 0;
2657 Double_t phi1 = TVector2::Phi_0_2pi(jet1->Phi());
2658 Double_t phi2 = TVector2::Phi_0_2pi(jet2->Phi());
2659 deltaPhi = TMath::Abs(phi1-phi2);
2660 if (deltaPhi > TMath::Pi() && deltaPhi < 2*TMath::Pi()) deltaPhi = 2*TMath::Pi() - deltaPhi;
2661
fceb275f 2662 Double_t et1 = TMath::Abs(jet1->E()*TMath::Sin(jet1->Theta()));
2663 Double_t et2 = TMath::Abs(jet2->E()*TMath::Sin(jet2->Theta()));
2664 Double_t sumEt = et1 + et2;
2665 Double_t normEt1PlusEt2 = TMath::Sqrt(et1*et1+et2*et2+2*et1*et2*TMath::Cos(deltaPhi));
656dc810 2666 Double_t ratio = (Double_t)(normEt1PlusEt2/sumEt);
2667
2668 // DiJet events selection
2669 Bool_t positionCut = 0;
2670 Bool_t positionEnergyCut = 0;
2671 Bool_t cdfCut = 0;
2672
2673 // Position cut :
2674 if (deltaPhi > fDiJetDeltaPhiCut) positionCut = 1;
2675 // Position-Energy cut :
2676 if ((deltaPhi > fDiJetDeltaPhiCut) && ((jet2->Pt()) >= fDiJetPtFractionCut*(jet1->Pt()))) positionEnergyCut = 1;
2677 // CDF cut :
2678 if (ratio < fDiJetCDFCut) cdfCut = 1;
2679
2680 Int_t go = 0;
2681
2682 if (fDiJetCut == 1 && positionCut == 1) go = 1;
2683 if (fDiJetCut == 2 && positionEnergyCut == 1) go = 1;
2684 if (fDiJetCut == 3 && cdfCut == 1) go = 1;
2685
2686 if (go)
2687 {
2688 Double_t deltaEta = TMath::Abs(jet1->Eta()-jet2->Eta());
2689 Double_t deltaPt = TMath::Abs(jet1->Pt()-jet2->Pt());
fceb275f 2690 Double_t meanEt = (Double_t)((et1+et2)/2.);
656dc810 2691 Double_t invariantMass = (Double_t)InvMass(jet1,jet2);
2692
2693 Double_t jetBin = GetDiJetBin(invariantMass, jet1->Pt(), meanEt, fDiJetKindBins);
2694
2695 if(jetBin > 0)
2696 {
2697 fQADiJetHistosGen->FillDiJetQA(invariantMass, deltaPhi, deltaEta, deltaPt, jetBin);
2698
2699 TList* jettracklist1 = new TList();
2700 Double_t sumPt1 = 0.;
2701 Float_t leadTrackPt1 = 0.;
2702
2703 TList* jettracklist2 = new TList();
2704 Double_t sumPt2 = 0.;
2705 Float_t leadTrackPt2 = 0.;
2706
2707 if(GetFFRadius()<=0)
2708 {
2709 GetJetTracksTrackrefs(jettracklist1, jet1);
2710 GetJetTracksTrackrefs(jettracklist2, jet2);
2711 }
2712 else
2713 {
2714 GetJetTracksPointing(fTracksGen, jettracklist1, jet1, GetFFRadius(), sumPt1);
2715 GetJetTracksPointing(fTracksGen, jettracklist2, jet2, GetFFRadius(), sumPt2);
2716 }
2717
2718 Int_t nTracks = jettracklist1->GetSize();
2719 if (jettracklist1->GetSize() < jettracklist2->GetSize()) nTracks = jettracklist2->GetSize();
2720
2721 for(Int_t it=0; it<nTracks; ++it)
2722 {
2723 if (it < jettracklist1->GetSize())
2724 {
3e1c1eee 2725 Float_t trackPt1 = (dynamic_cast<AliVParticle*>(jettracklist1->At(it)))->Pt();
656dc810 2726 Float_t jetPt1 = jet1->Pt();
2727
2728 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
2729
2730 fFFDiJetHistosGen->FillDiJetFF( 1, trackPt1, jetPt1, jetBin, incrementJetPt);
2731 fFFDiJetHistosGen->FillDiJetFF( 0, trackPt1, jetPt1, jetBin, incrementJetPt);
2732
2733 if(it==0)
2734 {
2735 leadTrackPt1 = trackPt1;
2736
2737 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 1, leadTrackPt1, jetPt1, jetBin, kTRUE);
2738 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 0, leadTrackPt1, jetPt1, jetBin, kTRUE);
2739 }
2740
2741 fFFDiJetHistosGenLeading->FillDiJetFF( 1, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
2742 fFFDiJetHistosGenLeading->FillDiJetFF( 0, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
2743 }
3e1c1eee 2744
656dc810 2745 if (it < jettracklist2->GetSize())
2746 {
3e1c1eee 2747 Float_t trackPt2 = (dynamic_cast<AliVParticle*>(jettracklist2->At(it)))->Pt();
656dc810 2748 Float_t jetPt2 = jet2->Pt();
2749
2750 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
2751
2752 fFFDiJetHistosGen->FillDiJetFF( 2, trackPt2, jetPt2, jetBin, incrementJetPt);
2753 fFFDiJetHistosGen->FillDiJetFF( 0, trackPt2, jetPt2, jetBin, incrementJetPt);
2754
2755 if (it==0)
2756 {
2757 leadTrackPt2 = trackPt2;
2758
2759 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 2, leadTrackPt2, jetPt2, jetBin, kTRUE);
2760 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 0, leadTrackPt2, jetPt2, jetBin, kTRUE);
2761 }
2762
2763 fFFDiJetHistosGenLeading->FillDiJetFF( 2, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
2764 fFFDiJetHistosGenLeading->FillDiJetFF( 0, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
2765 }
2766 } // End loop on tracks
2767
2768 delete jettracklist1;
2769 delete jettracklist2;
2770
2771 } // End if(jetBin > 0)
2772 else { Printf("Jet bins for di-jet studies not set !");}
2773 } // End if (go)
2774 } // End if(nGenJets > 1)
2775
2776
fe343c6b 2777 // ____ efficiency _______________________________
2778
2779 // arrays for generated particles: reconstructed AOD track index, isPrimary flag
2780 TArrayI indexAODTr;
2781 TArrayS isGenPrim;
2782
2783 // array for reconcstructed AOD tracks: generated particle index
2784 TArrayI indexMCTr;
2785
2786 Int_t nTracksAODMCCharged = GetListOfTracks(fTracksAODMCCharged, kTrackAODMCCharged);
2787 if(fDebug>2)Printf("%s:%d selected AODMC tracks: %d ",(char*)__FILE__,__LINE__,nTracksAODMCCharged);
2788
2789 Int_t nTracksRecQualityCuts = GetListOfTracks(fTracksRecQualityCuts, kTrackAODQualityCuts);
2790 if(fDebug>2)Printf("%s:%d selected rec tracks quality after cuts, full acceptance/pt : %d ",(char*)__FILE__,__LINE__,nTracksRecQualityCuts);
2791
2792 // associate gen and rec tracks, store indices in TArrays
2793 AssociateGenRec(fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,indexMCTr,isGenPrim);
2794
2795 // single track eff
2796 FillSingleTrackRecEffHisto(fhnSingleTrackRecEffHisto,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim);
2797
2798 // jet track eff
2799 for(Int_t ij=0; ij<nRecEffJets; ++ij){
2800
2801 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRecEff->At(ij));
2802
2803 if(ij==0){ // leading jet
2804
2d1d1b60 2805 TList* jettracklistGen = new TList();
2806 Double_t sumPtGen = 0.;
2807
2808 GetJetTracksPointing(fTracksGen, jettracklistGen, jet, GetFFRadius(), sumPtGen); // for efficiency: gen tracks from pointing with gen/rec jet
2809
2810 TList* jettracklistRec = new TList();
2811 Double_t sumPtRec = 0;
2812
2813 GetJetTracksPointing(fTracksRecCuts,jettracklistRec, jet, GetFFRadius(), sumPtRec); // bin efficiency in jet pt bins using rec tracks
2814
fe343c6b 2815
2d1d1b60 2816 Double_t jetEta = jet->Eta();
2817 Double_t jetPhi = TVector2::Phi_0_2pi(jet->Phi());
2818 Double_t jetPtGen = sumPtGen;
fe343c6b 2819
2d1d1b60 2820 fQAJetHistosRecEffLeading->FillJetQA( jetEta, jetPhi, jetPtGen );
2821 FillJetTrackRecEffHisto(fhnJetTrackRecEffHisto,jetPhi,jetEta,jetPtGen,sumPtRec,jettracklistGen,fTracksAODMCCharged,indexAODTr,isGenPrim);
fe343c6b 2822
2d1d1b60 2823 delete jettracklistGen;
fe343c6b 2824 }
2825 }
2826
2827 //___________________
2828
656dc810 2829 fTracksRec->Clear();
2830 fTracksRecCuts->Clear();
2831 fTracksGen->Clear();
fe343c6b 2832 fTracksAODMCCharged->Clear();
2833 fTracksRecQualityCuts->Clear();
2834
656dc810 2835 fJetsRec->Clear();
2836 fJetsRecCuts->Clear();
2837 fJetsGen->Clear();
fe343c6b 2838 fJetsRecEff->Clear();
656dc810 2839
2840 //Post output data.
2841 PostData(1, fCommonHistList);
2842
2843}
2844
2845//________________________________________________________________________________________
fceb275f 2846Double_t AliAnalysisTaskFragmentationFunction::InvMass(const AliAODJet* jet1, const AliAODJet* jet2)
656dc810 2847{
fceb275f 2848 // cald DiJet inv mass
656dc810 2849
2850 Double_t invMass = 0.;
2851 invMass = TMath::Sqrt(pow(jet1->E()+jet2->E(),2) - pow(jet1->Px()+jet2->Px(),2) -
2852 pow(jet1->Py()+jet2->Py(),2) - pow(jet1->Pz()+jet2->Pz(),2));
2853
2854 return invMass;
2855
2856}
2857
2858//________________________________________________________________________________________
2859Double_t AliAnalysisTaskFragmentationFunction::GetDiJetBin(Double_t invMass, Double_t leadingJetPt, Double_t EtMean, Int_t kindBins)
2860{
fceb275f 2861 // calc DiJet bin according to kindBins parameter
2862
656dc810 2863 Double_t jetBinOk = 0.;
2864 Double_t jetBin = 0.;
2865
2866 Float_t stepInvMass = (fDiJetJetInvMassMax - fDiJetJetInvMassMin)/fDiJetNBinsJetInvMass;
2867 Float_t stepPt = (fDiJetJetPtMax - fDiJetJetPtMin)/fDiJetNBinsJetPt;
2868
2869 if (kindBins == 1)
2870 {
2871 for(Int_t i=0; i<fDiJetNBinsJetInvMass; ++i)
2872 {
2873 jetBin = fDiJetJetInvMassMin + i*stepInvMass/2.;
2874 if(((fDiJetJetInvMassMin+i*stepInvMass) <= invMass) &&
190d081e 2875 (fDiJetJetInvMassMin + (i+1)*stepInvMass) > invMass) {jetBinOk = jetBin; break;}
2876 else jetBinOk = -1.;
656dc810 2877 }
656dc810 2878 }
2879 else if (kindBins == 3)
2880 {
2881 for(Int_t i=0; i<fDiJetNBinsJetPt; ++i)
2882 {
2883 jetBin = fDiJetJetPtMin + i*stepPt/2.;
2884 if(((fDiJetJetPtMin+i*stepPt) <= EtMean) &&
190d081e 2885 (fDiJetJetPtMin + (i+1)*stepPt) > EtMean) {jetBinOk = jetBin; break;}
2886 else jetBinOk = -1.;
656dc810 2887 }
656dc810 2888 }
2889 else if (kindBins == 2)
2890 {
2891 for(Int_t i=0; i<fDiJetNBinsJetPt; ++i)
2892 {
2893 jetBin = fDiJetJetPtMin + i*stepPt/2.;
2894 if(((fDiJetJetPtMin+i*stepPt) <= leadingJetPt) &&
190d081e 2895 (fDiJetJetPtMin + (i+1)*stepPt) > leadingJetPt) {jetBinOk = jetBin; break;}
2896 else jetBinOk = -1.;
656dc810 2897 }
656dc810 2898 }
2899 else {Printf("WARNING: kindBins wrongly set ! Please make sure to call SetKindSlices() and set the kind parameter to 1, 2 or 3.\n");}
2900
2901 return jetBinOk;
2902
2903}
2904
2905
2906//______________________________________________________________
2907void AliAnalysisTaskFragmentationFunction::Terminate(Option_t *)
2908{
2909 // terminated
2910
2911 if(fDebug > 1) printf("AliAnalysisTaskFragmentationFunction::Terminate() \n");
2912}
2913
2914//_________________________________________________________________________________
2915Int_t AliAnalysisTaskFragmentationFunction::GetListOfTracks(TList *list, Int_t type)
2916{
2917 // fill list of tracks selected according to type
2918
2919 if(fDebug > 2) Printf("%s:%d Selecting tracks with %d", (char*)__FILE__,__LINE__,type);
2920
2921 if(!list){
2922 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
2923 return -1;
2924 }
2925
2926 if(type==kTrackUndef) return 0;
2927
2928 Int_t iCount = 0;
190d081e 2929 if(type==kTrackAODCuts || type==kTrackAODQualityCuts || type==kTrackAOD){
656dc810 2930
2931 // all rec. tracks, esd filter mask, eta range
2932 if(!fAOD) return -1;
2933
2934 for(Int_t it=0; it<fAOD->GetNumberOfTracks(); ++it){
2935 AliAODTrack *tr = fAOD->GetTrack(it);
2936
190d081e 2937 if(type == kTrackAODCuts || type==kTrackAODQualityCuts ){
656dc810 2938 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
190d081e 2939 if(type == kTrackAODCuts){
2940 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
2941 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
2942 if(tr->Pt() < fTrackPtCut) continue;
2943 }
656dc810 2944 }
2945 list->Add(tr);
2946 iCount++;
2947 }
2948 }
2949 else if (type==kTrackKineAll || type==kTrackKineCharged || type==kTrackKineChargedAcceptance){
2950 // kine particles, all or rather charged
2951 if(!fMCEvent) return iCount;
2952
2953 for(Int_t it=0; it<fMCEvent->GetNumberOfTracks(); ++it){
2954 AliMCParticle* part = (AliMCParticle*) fMCEvent->GetTrack(it);
2955
2956 if(type == kTrackKineCharged || type == kTrackKineChargedAcceptance){
2957 if(part->Charge()==0) continue;
2958
2959 if(type == kTrackKineChargedAcceptance &&
2960 ( part->Eta() < fTrackEtaMin
2961 || part->Eta() > fTrackEtaMax
2962 || part->Phi() < fTrackPhiMin
2963 || part->Phi() > fTrackPhiMax
2964 || part->Pt() < fTrackPtCut)) continue;
2965 }
2966
2967 list->Add(part);
2968 iCount++;
2969 }
2970 }
2971 else if (type==kTrackAODMCCharged || type==kTrackAODMCAll || type==kTrackAODMCChargedAcceptance) {
2972 // MC particles (from AOD), physical primaries, all or rather charged or rather charged within acceptance
2973 if(!fAOD) return -1;
2974
2975 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
2976 if(!tca)return iCount;
2977
2978 for(int it=0; it<tca->GetEntriesFast(); ++it){
2979 AliAODMCParticle *part = dynamic_cast<AliAODMCParticle*>(tca->At(it));
2980 if(!part->IsPhysicalPrimary())continue;
2981
2982 if (type==kTrackAODMCCharged || type==kTrackAODMCChargedAcceptance){
2983 if(part->Charge()==0) continue;
2984 if(type==kTrackAODMCChargedAcceptance &&
2985 ( part->Eta() > fTrackEtaMax
2986 || part->Eta() < fTrackEtaMin
2987 || part->Phi() > fTrackPhiMax
2988 || part->Phi() < fTrackPhiMin
2989 || part->Pt() < fTrackPtCut)) continue;
2990 }
2991
2992 list->Add(part);
2993 iCount++;
2994 }
2995 }
2996
2997 list->Sort();
2998 return iCount;
2999
3000}
3001// _______________________________________________________________________________
3002Int_t AliAnalysisTaskFragmentationFunction::GetListOfJets(TList *list, Int_t type)
3003{
3004 // fill list of jets selected according to type
3005
3006 if(!list){
3007 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
3008 return -1;
3009 }
3010
3011 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
3012
3013 if(fBranchRecJets.Length()==0){
3014 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
3015 if(fDebug>1)fAOD->Print();
3016 return 0;
3017 }
3018
3019 TClonesArray *aodRecJets = new TClonesArray();
1db1733e 3020 if(fBranchRecJets.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAOD->FindListObject(fBranchRecJets.Data()));\r
3021 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAOD->GetList()->FindObject(fBranchRecJets.Data()));\r
656dc810 3022
3023 if(!aodRecJets){
3024 if(fBranchRecJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecJets.Data());
3025
3026 if(fDebug>1)fAOD->Print();
3027 return 0;
3028 }
3029
3030 Int_t nRecJets = 0;
3031
3032 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
3033
3034 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
3035 if(!tmp) continue;
3036
3037 if( tmp->Pt() < fJetPtCut ) continue;
3038 if( type == kJetsRecAcceptance &&
3039 ( tmp->Eta() < fJetEtaMin
3040 || tmp->Eta() > fJetEtaMax
3041 || tmp->Phi() < fJetPhiMin
3042 || tmp->Phi() > fJetPhiMax )) continue;
3043
3044 list->Add(tmp);
3045
3046 nRecJets++;
3047 }
3048
3049 list->Sort();
3050 return nRecJets;
3051 delete aodRecJets;
3052 }
3053 else if(type == kJetsKine || type == kJetsKineAcceptance){
3054
3055 // generated jets
3056 Int_t nGenJets = 0;
3057
3058 if(!fMCEvent){
3059 if(fDebug>1) Printf("%s:%d no mcEvent",(char*)__FILE__,__LINE__);
3060 return 0;
3061 }
5fde4a38 3062
3063 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
3064 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
3065 AliGenHijingEventHeader* hijingGenHeader = 0x0;
3066
656dc810 3067 if(!pythiaGenHeader){
5fde4a38 3068 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
3069
3070 if(!hijingGenHeader){
3071 Printf("%s:%d no pythiaGenHeader or hijingGenHeader found", (char*)__FILE__,__LINE__);
3072 return 0;
3073 }else{
3074 TLorentzVector mom[4];
3075 AliAODJet* jet[4];
3076 hijingGenHeader->GetJets(mom[0], mom[1], mom[2], mom[3]);
3077
3078 for(Int_t i=0; i<2; ++i){
3079 if(!mom[i].Pt()) continue;
3080 jet[i] = new AliAODJet(mom[i]);
3081
3082 if( type == kJetsKineAcceptance &&
3083 ( jet[i]->Eta() < fJetEtaMin
3084 || jet[i]->Eta() > fJetEtaMax
3085 || jet[i]->Phi() < fJetPhiMin
3086 || jet[i]->Phi() > fJetPhiMax )) continue;
3087
3088 list->Add(jet[i]);
3089 nGenJets++;
3090 }
3091 list->Sort();
3092 return nGenJets;
3093 }
656dc810 3094 }
3095
3096 // fetch the pythia generated jets
3097 for(int ip=0; ip<pythiaGenHeader->NTriggerJets(); ++ip){
3098
3099 Float_t p[4];
3100 AliAODJet *jet = new AliAODJet();
3101 pythiaGenHeader->TriggerJet(ip, p);
3102 jet->SetPxPyPzE(p[0], p[1], p[2], p[3]);
3103
3104 if( type == kJetsKineAcceptance &&
3105 ( jet->Eta() < fJetEtaMin
3106 || jet->Eta() > fJetEtaMax
3107 || jet->Phi() < fJetPhiMin
3108 || jet->Phi() > fJetPhiMax )) continue;
3109
3110 list->Add(jet);
3111 nGenJets++;
3112 }
3113 list->Sort();
3114 return nGenJets;
3115 }
3116 else if(type == kJetsGen || type == kJetsGenAcceptance ){
3117
3118 if(fBranchGenJets.Length()==0){
3119 if(fDebug>1) Printf("%s:%d no gen jet branch specified", (char*)__FILE__,__LINE__);
3120 return 0;
3121 }
3122
3123 TClonesArray *aodGenJets = new TClonesArray();
1db1733e 3124 if(fBranchGenJets.Length()) aodGenJets = dynamic_cast<TClonesArray*>(fAOD->FindListObject(fBranchGenJets.Data()));\r
3125 if(!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAOD->GetList()->FindObject(fBranchGenJets.Data()));\r
656dc810 3126
3127 if(!aodGenJets){
3128 if(fDebug>0){
3129 if(fBranchGenJets.Length()) Printf("%s:%d Generated jet branch %s not found",(char*)__FILE__,__LINE__,fBranchGenJets.Data());
3130 }
3131 if(fDebug>1)fAOD->Print();
3132 return 0;
3133 }
3134
3135 Int_t nGenJets = 0;
3136
3137 for(Int_t ig=0; ig<aodGenJets->GetEntries(); ++ig){
3138
3139 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodGenJets->At(ig));
3140 if(!tmp) continue;
3141
3142 if( tmp->Pt() < fJetPtCut ) continue;
3143 if( type == kJetsGenAcceptance &&
3144 ( tmp->Eta() < fJetEtaMin
3145 || tmp->Eta() > fJetEtaMax
3146 || tmp->Phi() < fJetPhiMin
3147 || tmp->Phi() > fJetPhiMax )) continue;
3148
3149 list->Add(tmp);
3150
3151 nGenJets++;
3152 }
3153 list->Sort();
3154 return nGenJets;
3155 delete aodGenJets;
3156 }
3157 else{
3158 if(fDebug>0)Printf("%s:%d no such type %d",(char*)__FILE__,__LINE__,type);
3159 return 0;
3160 }
3161}
3162
3163// _________________________________________________________________________________________________________
3164void AliAnalysisTaskFragmentationFunction::SetProperties(THnSparse* h,const Int_t dim, const char** labels)
3165{
3166 //Set properties of THnSparse
3167
3168 for(Int_t i=0; i<dim; i++){
3169
3170 h->GetAxis(i)->SetTitle(labels[i]);
3171 h->GetAxis(i)->SetTitleColor(1);
3172 }
3173}
3174
3175// __________________________________________________________________________________________
3176void AliAnalysisTaskFragmentationFunction::SetProperties(TH1* h,const char* x, const char* y)
3177{
3178 //Set properties of histos (x and y title)
3179
3180 h->SetXTitle(x);
3181 h->SetYTitle(y);
3182 h->GetXaxis()->SetTitleColor(1);
3183 h->GetYaxis()->SetTitleColor(1);
3184}
3185
3186// _________________________________________________________________________________________________________
3187void AliAnalysisTaskFragmentationFunction::SetProperties(TH2* h,const char* x, const char* y, const char* z)
3188{
3189 //Set properties of histos (x,y and z title)
3190
3191 h->SetXTitle(x);
3192 h->SetYTitle(y);
3193 h->SetZTitle(z);
3194 h->GetXaxis()->SetTitleColor(1);
3195 h->GetYaxis()->SetTitleColor(1);
3196 h->GetZaxis()->SetTitleColor(1);
3197}
3198
3199// ________________________________________________________________________________________________________________________________________________________
fceb275f 3200void AliAnalysisTaskFragmentationFunction::GetJetTracksPointing(TList* inputlist, TList* outputlist, const AliAODJet* jet, const Double_t radius,Double_t& sumPt)
656dc810 3201{
3202 // fill list of tracks in cone around jet axis
3203
3204 sumPt = 0;
3205
3206 Double_t jetMom[3];
3207 jet->PxPyPz(jetMom);
3208 TVector3 jet3mom(jetMom);
3209
3210 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
3211
3212 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
3213
3214 Double_t trackMom[3];
3215 track->PxPyPz(trackMom);
3216 TVector3 track3mom(trackMom);
3217
3218 Double_t dR = jet3mom.DeltaR(track3mom);
3219
3220 if(dR<radius){
3221
3222 outputlist->Add(track);
3223
3224 sumPt += track->Pt();
3225 }
3226 }
3227
3228 outputlist->Sort();
3229}
3230
3231// ___________________________________________________________________________________________
fceb275f 3232void AliAnalysisTaskFragmentationFunction::GetJetTracksTrackrefs(TList* list, const AliAODJet* jet)
656dc810 3233{
3234 // list of jet tracks from trackrefs
3235
3236 Int_t nTracks = jet->GetRefTracks()->GetEntriesFast();
3237
3238 for (Int_t itrack=0; itrack<nTracks; itrack++) {
3239
3240 AliVParticle* track = dynamic_cast<AliVParticle*>(jet->GetRefTracks()->At(itrack));
3241 if(!track){
3242 AliError("expected ref track not found ");
3243 continue;
3244 }
3245
3246 list->Add(track);
3247 }
3248
3249 list->Sort();
3250}
fe343c6b 3251
3252// _ ________________________________________________________________________________________________________________________________
3253void AliAnalysisTaskFragmentationFunction::AssociateGenRec(TList* tracksAODMCCharged,TList* tracksRec, TArrayI& indexAODTr,TArrayI& indexMCTr,TArrayS& isGenPrim)
3254{
3255 // associate generated and reconstructed tracks, fill TArrays of list indices
3256
3257
3258 Int_t nTracksRec = tracksRec->GetSize();
3259 Int_t nTracksGen = tracksAODMCCharged->GetSize();
3260 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
3261
3262 if(!nTracksGen) return;
3263 if(!tca) return;
3264
3265 // set size
3266 indexAODTr.Set(nTracksGen);
3267 indexMCTr.Set(nTracksRec);
3268 isGenPrim.Set(nTracksGen);
3269
3270 indexAODTr.Reset(-1);
3271 indexMCTr.Reset(-1);
3272 isGenPrim.Reset(0);
3273
3274 // loop over reconstructed tracks, get generated track
3275
3276 for(Int_t iRec=0; iRec<nTracksRec; iRec++){
3277
3278 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
3279
289a2293 3280 Int_t label = TMath::Abs(rectrack->GetLabel());
fe343c6b 3281
3282 // find MC track in our list
3283 AliAODMCParticle* gentrack = 0x0;
3284 if(label>=0) gentrack = dynamic_cast<AliAODMCParticle*> (tca->At(label));
3285
3286 Int_t listIndex = -1;
3287 if(gentrack) listIndex = tracksAODMCCharged->IndexOf(gentrack);
3288
3289 if(listIndex>=0){
3290
3291 indexAODTr[listIndex] = iRec;
3292 indexMCTr[iRec] = listIndex;
3293 }
3294 }
3295
3296
3297 // define primary sample for reconstruction efficiency
3298
3299 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
3300
3301 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksAODMCCharged->At(iGen));
3302
3303 Int_t pdg = gentrack->GetPdgCode();
3304
3305 // 211 - pi, 2212 - proton, 321 - Kaon, 11 - electron, 13 - muon
3306 if(TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 ||
3307 TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13){
3308
3309 isGenPrim[iGen] = kTRUE;
3310 }
3311 }
3312}
3313
3314// _____________________________________________________________________________________________________________________________________________
fceb275f 3315void AliAnalysisTaskFragmentationFunction::FillSingleTrackRecEffHisto(THnSparse* histo, TList* tracksGen, const TList* tracksRec,
3316 const TArrayI& indexAODTr, const TArrayS& isGenPrim){
fe343c6b 3317
3318 // fill THnSparse for single track reconstruction efficiency
fceb275f 3319
fe343c6b 3320 Int_t nTracksGen = tracksGen->GetSize();
3321
3322 if(!nTracksGen) return;
3323
3324 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
3325
3326 if(isGenPrim[iGen] != 1) continue; // select primaries
3327
3328 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
3329
3330 Double_t ptGen = gentrack->Pt();
3331 Double_t etaGen = gentrack->Eta();
3332 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
3333
3334 // apply same acc & pt cuts as for FF
3335 // could in principle also be done setting THNsparse axis limits before projecting,
3336 // but then the binning needs to be fine grained enough
3337
3338 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
3339 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
3340 if(ptGen < fTrackPtCut) continue;
3341
3342 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
3343 Double_t isRec = 0;
3344 Double_t ptRec = -1;
3345
3346 if(iRec>=0){
3347
3348 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
3349 ptRec = rectrack->Pt();
3350 isRec = 1;
3351 }
3352
3353 Double_t entries[5] = {phiGen,etaGen,ptGen,ptRec,isRec};
3354 histo->Fill(entries);
3355 }
3356}
3357
3358// ______________________________________________________________________________________________________________________________________________________
2d1d1b60 3359 void AliAnalysisTaskFragmentationFunction::FillJetTrackRecEffHisto(THnSparse* histo,Double_t jetPhi, Double_t jetEta, Double_t jetPtGen, Double_t jetPtRec, TList* jetTrackList,
fceb275f 3360 TList* tracksGen, const TArrayI& indexAODTr, const TArrayS& isGenPrim)
fe343c6b 3361{
3362 // fill THnSparse for jet track reconstruction efficiency
3363
3364 Int_t nTracksJet = jetTrackList->GetSize(); // list with AODMC tracks
3365
3366 if(!nTracksJet) return;
3367
3368 for(Int_t iTr=0; iTr<nTracksJet; iTr++){
3369
3370 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (jetTrackList->At(iTr));
3371
3372 // find jet track in gen tracks list
3373 Int_t iGen = tracksGen->IndexOf(gentrack);
3374
3375 if(iGen<0){
3376 if(fDebug>0) Printf("%s:%d gen jet track not found ",(char*)__FILE__,__LINE__);
3377 continue;
3378 }
3379
3380 if(isGenPrim[iGen] != 1) continue; // select primaries
3381
3382 Double_t ptGen = gentrack->Pt();
3383 Double_t etaGen = gentrack->Eta();
3384 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
3385
3386 // apply same acc & pt cuts as for FF
3387 // could in principle also be done setting THNsparse axis limits before projecting,
3388 // but then the binning needs to be fine grained enough
3389
3390 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
3391 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
3392 if(ptGen < fTrackPtCut) continue;
3393
2d1d1b60 3394 Double_t z = ptGen / jetPtGen;
fe343c6b 3395 Double_t xi = 0;
3396 if(z>0) xi = TMath::Log(1/z);
3397
3398 Double_t isRec = 0;
3399 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
3400 if(iRec>=0) isRec = 1;
3401
2d1d1b60 3402 Double_t entries[8] = {jetPhi,jetEta,jetPtGen,jetPtRec,ptGen,z,xi,isRec};
fe343c6b 3403 histo->Fill(entries);
3404 }
3405}