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