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