]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - PWGJE/AliAnalysisTaskFragmentationFunction.cxx
minor fixes
[u/mrichter/AliRoot.git] / PWGJE / AliAnalysisTaskFragmentationFunction.cxx
... / ...
CommitLineData
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 "TH3F.h"
29#include "TString.h"
30#include "THnSparse.h"
31#include "TProfile.h"
32#include "TFile.h"
33#include "TKey.h"
34#include "TRandom3.h"
35
36#include "AliAODInputHandler.h"
37#include "AliAODHandler.h"
38#include "AliESDEvent.h"
39#include "AliAODMCParticle.h"
40#include "AliAODJet.h"
41#include "AliAODJetEventBackground.h"
42#include "AliGenPythiaEventHeader.h"
43#include "AliGenHijingEventHeader.h"
44#include "AliInputEventHandler.h"
45
46#include "AliAnalysisHelperJetTasks.h"
47#include "AliAnalysisManager.h"
48#include "AliAnalysisTaskSE.h"
49#include "AliVParticle.h"
50#include "AliVEvent.h"
51
52#include "AliAnalysisTaskFragmentationFunction.h"
53
54ClassImp(AliAnalysisTaskFragmentationFunction)
55
56//____________________________________________________________________________
57AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction()
58 : AliAnalysisTaskSE()
59 ,fESD(0)
60 ,fAOD(0)
61 ,fAODJets(0)
62 ,fAODExtension(0)
63 ,fNonStdFile("")
64 ,fBranchRecJets("jets")
65 ,fBranchRecBackJets("")
66 ,fBranchRecBckgClusters("")
67 ,fBranchGenJets("")
68 ,fBranchEmbeddedJets("")
69 ,fTrackTypeGen(0)
70 ,fJetTypeGen(0)
71 ,fJetTypeRecEff(0)
72 ,fUseAODInputJets(kTRUE)
73 ,fFilterMask(0)
74 ,fUsePhysicsSelection(kTRUE)
75 ,fEventClass(0)
76 ,fMaxVertexZ(10)
77 ,fTrackPtCut(0)
78 ,fTrackEtaMin(0)
79 ,fTrackEtaMax(0)
80 ,fTrackPhiMin(0)
81 ,fTrackPhiMax(0)
82 ,fUseExtraTracks(0)
83 ,fUseExtraTracksBgr(0)
84 ,fCutFractionPtEmbedded(0)
85 ,fUseEmbeddedJetAxis(0)
86 ,fUseEmbeddedJetPt(0)
87 ,fJetPtCut(0)
88 ,fJetEtaMin(0)
89 ,fJetEtaMax(0)
90 ,fJetPhiMin(0)
91 ,fJetPhiMax(0)
92 ,fDiJetCut(0)
93 ,fDiJetDeltaPhiCut(0)
94 ,fDiJetPtFractionCut(0)
95 ,fDiJetCDFCut(0)
96 ,fDiJetKindBins(0)
97 ,fFFRadius(0)
98 ,fFFBckgRadius(0)
99 ,fBckgMode(0)
100 ,fIJMode(0)
101 ,fQAMode(0)
102 ,fFFMode(0)
103 ,fDJMode(0)
104 ,fEffMode(0)
105 ,fPhiCorrMode(0)
106 ,fUseRecEffRecJetPtBins(0)
107 ,fUseResponseRecJetPtBins(1)
108 ,fAvgTrials(0)
109 ,fTracksRec(0)
110 ,fTracksRecCuts(0)
111 ,fTracksGen(0)
112 ,fTracksAODMCCharged(0)
113 ,fTracksAODMCChargedSec(0)
114 ,fTracksRecQualityCuts(0)
115 ,fJetsRec(0)
116 ,fJetsRecCuts(0)
117 ,fJetsGen(0)
118 ,fJetsRecEff(0)
119 ,fJetsEmbedded(0)
120 ,fBckgJetsRec(0)
121 ,fBckgJetsRecCuts(0)
122 ,fBckgJetsGen(0)
123 ,fQATrackHistosRec(0)
124 ,fQATrackHistosRecCuts(0)
125 ,fQATrackHistosGen(0)
126 ,fQAJetHistosRec(0)
127 ,fQAJetHistosRecCuts(0)
128 ,fQAJetHistosRecCutsLeading(0)
129 ,fQAJetHistosGen(0)
130 ,fQAJetHistosGenLeading(0)
131 ,fQAJetHistosRecEffLeading(0)
132 ,fFFHistosRecCuts(0)
133 ,fFFHistosRecLeading(0)
134 ,fFFHistosRecLeadingTrack(0)
135 ,fFFHistosGen(0)
136 ,fFFHistosGenLeading(0)
137 ,fFFHistosGenLeadingTrack(0)
138 ,fIJHistosRecCuts(0)
139 ,fIJHistosRecLeading(0)
140 ,fIJHistosRecLeadingTrack(0)
141 ,fIJHistosGen(0)
142 ,fIJHistosGenLeading(0)
143 ,fIJHistosGenLeadingTrack(0)
144 ,fFFDiJetHistosRecCuts(0)
145 ,fFFDiJetHistosRecLeading(0)
146 ,fFFDiJetHistosRecLeadingTrack(0)
147 ,fFFDiJetHistosGen(0)
148 ,fFFDiJetHistosGenLeading(0)
149 ,fFFDiJetHistosGenLeadingTrack(0)
150 ,fQADiJetHistosRecCuts(0)
151 ,fQADiJetHistosGen(0)
152 ,fPhiCorrHistosJetArea(0)
153 ,fPhiCorrHistosTransverseArea(0)
154 ,fPhiCorrHistosAwayArea(0)
155 ,fQATrackHighPtThreshold(0)
156 ,fFFNBinsJetPt(0)
157 ,fFFJetPtMin(0)
158 ,fFFJetPtMax(0)
159 ,fFFNBinsPt(0)
160 ,fFFPtMin(0)
161 ,fFFPtMax(0)
162 ,fFFNBinsXi(0)
163 ,fFFXiMin(0)
164 ,fFFXiMax(0)
165 ,fFFNBinsZ(0)
166 ,fFFZMin(0)
167 ,fFFZMax(0)
168 ,fQAJetNBinsPt(0)
169 ,fQAJetPtMin(0)
170 ,fQAJetPtMax(0)
171 ,fQAJetNBinsEta(0)
172 ,fQAJetEtaMin(0)
173 ,fQAJetEtaMax(0)
174 ,fQAJetNBinsPhi(0)
175 ,fQAJetPhiMin(0)
176 ,fQAJetPhiMax(0)
177 ,fQATrackNBinsPt(0)
178 ,fQATrackPtMin(0)
179 ,fQATrackPtMax(0)
180 ,fQATrackNBinsEta(0)
181 ,fQATrackEtaMin(0)
182 ,fQATrackEtaMax(0)
183 ,fQATrackNBinsPhi(0)
184 ,fQATrackPhiMin(0)
185 ,fQATrackPhiMax(0)
186 ,fIJNBinsJetPt(0)
187 ,fIJJetPtMin(0)
188 ,fIJJetPtMax(0)
189 ,fIJNBinsPt(0)
190 ,fIJPtMin(0)
191 ,fIJPtMax(0)
192 ,fIJNBinsZ(0)
193 ,fIJZMin(0)
194 ,fIJZMax(0)
195 ,fIJNBinsCosTheta(0)
196 ,fIJCosThetaMin(0)
197 ,fIJCosThetaMax(0)
198 ,fIJNBinsTheta(0)
199 ,fIJThetaMin(0)
200 ,fIJThetaMax(0)
201 ,fIJNBinsJt(0)
202 ,fIJJtMin(0)
203 ,fIJJtMax(0)
204 ,fDiJetNBinsJetInvMass(0)
205 ,fDiJetJetInvMassMin(0)
206 ,fDiJetJetInvMassMax(0)
207 ,fDiJetNBinsJetPt(0)
208 ,fDiJetJetPtMin(0)
209 ,fDiJetJetPtMax(0)
210 ,fDiJetNBinsPt(0)
211 ,fDiJetPtMin(0)
212 ,fDiJetPtMax(0)
213 ,fDiJetNBinsXi(0)
214 ,fDiJetXiMin(0)
215 ,fDiJetXiMax(0)
216 ,fDiJetNBinsZ(0)
217 ,fDiJetZMin(0)
218 ,fDiJetZMax(0)
219 ,fQADiJetNBinsInvMass(0)
220 ,fQADiJetInvMassMin(0)
221 ,fQADiJetInvMassMax(0)
222 ,fQADiJetNBinsJetPt(0)
223 ,fQADiJetJetPtMin(0)
224 ,fQADiJetJetPtMax(0)
225 ,fQADiJetNBinsDeltaPhi(0)
226 ,fQADiJetDeltaPhiMin(0)
227 ,fQADiJetDeltaPhiMax(0)
228 ,fQADiJetNBinsDeltaEta(0)
229 ,fQADiJetDeltaEtaMin(0)
230 ,fQADiJetDeltaEtaMax(0)
231 ,fQADiJetNBinsDeltaPt(0)
232 ,fQADiJetDeltaPtMin(0)
233 ,fQADiJetDeltaPtMax(0)
234 ,fQADiJetNBinsInBal(0)
235 ,fQADiJetInBalMin(0)
236 ,fQADiJetInBalMax(0)
237 ,fPhiCorrNBinsPt(0)
238 ,fPhiCorrPtMin(0)
239 ,fPhiCorrPtMax(0)
240 ,fPhiCorrNBinsEta(0)
241 ,fPhiCorrEtaMin(0)
242 ,fPhiCorrEtaMax(0)
243 ,fPhiCorrNBinsPhi(0)
244 ,fPhiCorrPhiMin(0)
245 ,fPhiCorrPhiMax(0)
246 ,fCommonHistList(0)
247 ,fh1EvtSelection(0)
248 ,fh1VertexNContributors(0)
249 ,fh1VertexZ(0)
250 ,fh1EvtMult(0)
251 ,fh1EvtCent(0)
252 ,fh2TrackPtVsDCAXY(0)
253 ,fh2TrackPtVsDCAZ(0)
254 ,fh1Xsec(0)
255 ,fh1Trials(0)
256 ,fh1PtHard(0)
257 ,fh1PtHardTrials(0)
258 ,fh1nRecJetsCuts(0)
259 ,fh1nGenJets(0)
260 ,fh1nRecEffJets(0)
261 ,fh1nEmbeddedJets(0)
262 ,fh1nRecBckgJetsCuts(0)
263 ,fh1nGenBckgJets(0)
264 ,fh2PtRecVsGenPrim(0)
265 ,fh2PtRecVsGenSec(0)
266 ,fQATrackHistosRecEffGen(0)
267 ,fQATrackHistosRecEffRec(0)
268 ,fQATrackHistosSecRec(0)
269 ,fFFHistosRecEffGen(0)
270 ,fFFHistosRecEffRec(0)
271 ,fFFHistosSecRec(0)
272 ,fhnResponseSinglePt(0)
273 ,fh2SingleInvPtRecMnGenVsPtGen(0)
274 ,fhnResponseJetTrackPt(0)
275 ,fhnResponseJetZ(0)
276 ,fhnResponseJetXi(0)
277 // Background
278 ,fh1OutLeadingMult(0)
279 ,fh1OutLeadingStatMult(0)
280 ,fh1PerpMult(0)
281 ,fh1ASideMult(0)
282 ,fh1ASideWindowMult(0)
283 ,fh1PerpWindowMult(0)
284 ,fh1Out2JetsMult(0)
285 ,fh1Out3JetsMult(0)
286 ,fh1MedianClustersMult(0)
287 ,fh1OutClustersMult(0)
288 ,fh1FractionPtEmbedded(0)
289 ,fh1IndexEmbedded(0)
290 ,fh2DeltaPtVsJetPtEmbedded(0)
291 ,fh2DeltaPtVsRecJetPtEmbedded(0)
292 ,fh1DeltaREmbedded(0)
293 ,fh2ptVsDistNN_pt50_rec(0)
294 ,fh2ptVsDistNN_pt50_nonRec(0)
295 ,fh2ptVsDistNN_pt10_rec(0)
296 ,fh2ptVsDistNN_pt10_nonRec(0)
297 ,fQABckgHisto0RecCuts(0)
298 ,fQABckgHisto0Gen(0)
299 ,fQABckgHisto1RecCuts(0)
300 ,fQABckgHisto1Gen(0)
301 ,fQABckgHisto2RecCuts(0)
302 ,fQABckgHisto2Gen(0)
303 ,fQABckgHisto3RecCuts(0)
304 ,fQABckgHisto3Gen(0)
305 ,fQABckgHisto4RecCuts(0)
306 ,fQABckgHisto4Gen(0)
307 ,fFFBckgHisto0RecCuts(0)
308 ,fFFBckgHisto0RecLeading(0)
309 ,fFFBckgHisto0Gen(0)
310 ,fFFBckgHisto0GenLeading(0)
311 ,fFFBckgHisto1RecCuts(0)
312 ,fFFBckgHisto1RecLeading(0)
313 ,fFFBckgHisto1Gen(0)
314 ,fFFBckgHisto1GenLeading(0)
315 ,fFFBckgHisto2RecCuts(0)
316 ,fFFBckgHisto2RecLeading(0)
317 ,fFFBckgHisto2Gen(0)
318 ,fFFBckgHisto2GenLeading(0)
319 ,fFFBckgHisto3RecCuts(0)
320 ,fFFBckgHisto3RecLeading(0)
321 ,fFFBckgHisto3Gen(0)
322 ,fFFBckgHisto3GenLeading(0)
323 ,fFFBckgHisto4RecCuts(0)
324 ,fFFBckgHisto4RecLeading(0)
325 ,fFFBckgHisto4Gen(0)
326 ,fFFBckgHisto4GenLeading(0)
327 ,fIJBckgHisto0RecCuts(0)
328 ,fIJBckgHisto0RecLeading(0)
329 ,fIJBckgHisto0Gen(0)
330 ,fIJBckgHisto0GenLeading(0)
331 ,fIJBckgHisto1RecCuts(0)
332 ,fIJBckgHisto1RecLeading(0)
333 ,fIJBckgHisto1Gen(0)
334 ,fIJBckgHisto1GenLeading(0)
335 ,fIJBckgHisto2RecCuts(0)
336 ,fIJBckgHisto2RecLeading(0)
337 ,fIJBckgHisto2Gen(0)
338 ,fIJBckgHisto2GenLeading(0)
339 ,fIJBckgHisto3RecCuts(0)
340 ,fIJBckgHisto3RecLeading(0)
341 ,fIJBckgHisto3Gen(0)
342 ,fIJBckgHisto3GenLeading(0)
343 ,fIJBckgHisto4RecCuts(0)
344 ,fIJBckgHisto4RecLeading(0)
345 ,fIJBckgHisto4Gen(0)
346 ,fIJBckgHisto4GenLeading(0)
347 ,fRandom(0)
348 ,fBckgSubMethod(0)
349{
350 // default constructor
351 fBckgType[0] = 0;
352 fBckgType[1] = 0;
353 fBckgType[2] = 0;
354 fBckgType[3] = 0;
355 fBckgType[4] = 0;
356}
357
358//__________________________________________________________________________________________
359AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const char *name)
360 : AliAnalysisTaskSE(name)
361 ,fESD(0)
362 ,fAOD(0)
363 ,fAODJets(0)
364 ,fAODExtension(0)
365 ,fNonStdFile("")
366 ,fBranchRecJets("jets")
367 ,fBranchRecBackJets("")
368 ,fBranchRecBckgClusters("")
369 ,fBranchGenJets("")
370 ,fBranchEmbeddedJets("")
371 ,fTrackTypeGen(0)
372 ,fJetTypeGen(0)
373 ,fJetTypeRecEff(0)
374 ,fUseAODInputJets(kTRUE)
375 ,fFilterMask(0)
376 ,fUsePhysicsSelection(kTRUE)
377 ,fEventClass(0)
378 ,fMaxVertexZ(10)
379 ,fTrackPtCut(0)
380 ,fTrackEtaMin(0)
381 ,fTrackEtaMax(0)
382 ,fTrackPhiMin(0)
383 ,fTrackPhiMax(0)
384 ,fUseExtraTracks(0)
385 ,fUseExtraTracksBgr(0)
386 ,fCutFractionPtEmbedded(0)
387 ,fUseEmbeddedJetAxis(0)
388 ,fUseEmbeddedJetPt(0)
389 ,fJetPtCut(0)
390 ,fJetEtaMin(0)
391 ,fJetEtaMax(0)
392 ,fJetPhiMin(0)
393 ,fJetPhiMax(0)
394 ,fDiJetCut(0)
395 ,fDiJetDeltaPhiCut(0)
396 ,fDiJetPtFractionCut(0)
397 ,fDiJetCDFCut(0)
398 ,fDiJetKindBins(0)
399 ,fFFRadius(0)
400 ,fFFBckgRadius(0)
401 ,fBckgMode(0)
402 ,fIJMode(0)
403 ,fQAMode(0)
404 ,fFFMode(0)
405 ,fDJMode(0)
406 ,fEffMode(0)
407 ,fPhiCorrMode(0)
408 ,fUseRecEffRecJetPtBins(0)
409 ,fUseResponseRecJetPtBins(1)
410 ,fAvgTrials(0)
411 ,fTracksRec(0)
412 ,fTracksRecCuts(0)
413 ,fTracksGen(0)
414 ,fTracksAODMCCharged(0)
415 ,fTracksAODMCChargedSec(0)
416 ,fTracksRecQualityCuts(0)
417 ,fJetsRec(0)
418 ,fJetsRecCuts(0)
419 ,fJetsGen(0)
420 ,fJetsRecEff(0)
421 ,fJetsEmbedded(0)
422 ,fBckgJetsRec(0)
423 ,fBckgJetsRecCuts(0)
424 ,fBckgJetsGen(0)
425 ,fQATrackHistosRec(0)
426 ,fQATrackHistosRecCuts(0)
427 ,fQATrackHistosGen(0)
428 ,fQAJetHistosRec(0)
429 ,fQAJetHistosRecCuts(0)
430 ,fQAJetHistosRecCutsLeading(0)
431 ,fQAJetHistosGen(0)
432 ,fQAJetHistosGenLeading(0)
433 ,fQAJetHistosRecEffLeading(0)
434 ,fFFHistosRecCuts(0)
435 ,fFFHistosRecLeading(0)
436 ,fFFHistosRecLeadingTrack(0)
437 ,fFFHistosGen(0)
438 ,fFFHistosGenLeading(0)
439 ,fFFHistosGenLeadingTrack(0)
440 ,fIJHistosRecCuts(0)
441 ,fIJHistosRecLeading(0)
442 ,fIJHistosRecLeadingTrack(0)
443 ,fIJHistosGen(0)
444 ,fIJHistosGenLeading(0)
445 ,fIJHistosGenLeadingTrack(0)
446 ,fFFDiJetHistosRecCuts(0)
447 ,fFFDiJetHistosRecLeading(0)
448 ,fFFDiJetHistosRecLeadingTrack(0)
449 ,fFFDiJetHistosGen(0)
450 ,fFFDiJetHistosGenLeading(0)
451 ,fFFDiJetHistosGenLeadingTrack(0)
452 ,fQADiJetHistosRecCuts(0)
453 ,fQADiJetHistosGen(0)
454 ,fPhiCorrHistosJetArea(0)
455 ,fPhiCorrHistosTransverseArea(0)
456 ,fPhiCorrHistosAwayArea(0)
457 ,fQATrackHighPtThreshold(0)
458 ,fFFNBinsJetPt(0)
459 ,fFFJetPtMin(0)
460 ,fFFJetPtMax(0)
461 ,fFFNBinsPt(0)
462 ,fFFPtMin(0)
463 ,fFFPtMax(0)
464 ,fFFNBinsXi(0)
465 ,fFFXiMin(0)
466 ,fFFXiMax(0)
467 ,fFFNBinsZ(0)
468 ,fFFZMin(0)
469 ,fFFZMax(0)
470 ,fQAJetNBinsPt(0)
471 ,fQAJetPtMin(0)
472 ,fQAJetPtMax(0)
473 ,fQAJetNBinsEta(0)
474 ,fQAJetEtaMin(0)
475 ,fQAJetEtaMax(0)
476 ,fQAJetNBinsPhi(0)
477 ,fQAJetPhiMin(0)
478 ,fQAJetPhiMax(0)
479 ,fQATrackNBinsPt(0)
480 ,fQATrackPtMin(0)
481 ,fQATrackPtMax(0)
482 ,fQATrackNBinsEta(0)
483 ,fQATrackEtaMin(0)
484 ,fQATrackEtaMax(0)
485 ,fQATrackNBinsPhi(0)
486 ,fQATrackPhiMin(0)
487 ,fQATrackPhiMax(0)
488 ,fIJNBinsJetPt(0)
489 ,fIJJetPtMin(0)
490 ,fIJJetPtMax(0)
491 ,fIJNBinsPt(0)
492 ,fIJPtMin(0)
493 ,fIJPtMax(0)
494 ,fIJNBinsZ(0)
495 ,fIJZMin(0)
496 ,fIJZMax(0)
497 ,fIJNBinsCosTheta(0)
498 ,fIJCosThetaMin(0)
499 ,fIJCosThetaMax(0)
500 ,fIJNBinsTheta(0)
501 ,fIJThetaMin(0)
502 ,fIJThetaMax(0)
503 ,fIJNBinsJt(0)
504 ,fIJJtMin(0)
505 ,fIJJtMax(0)
506 ,fDiJetNBinsJetInvMass(0)
507 ,fDiJetJetInvMassMin(0)
508 ,fDiJetJetInvMassMax(0)
509 ,fDiJetNBinsJetPt(0)
510 ,fDiJetJetPtMin(0)
511 ,fDiJetJetPtMax(0)
512 ,fDiJetNBinsPt(0)
513 ,fDiJetPtMin(0)
514 ,fDiJetPtMax(0)
515 ,fDiJetNBinsXi(0)
516 ,fDiJetXiMin(0)
517 ,fDiJetXiMax(0)
518 ,fDiJetNBinsZ(0)
519 ,fDiJetZMin(0)
520 ,fDiJetZMax(0)
521 ,fQADiJetNBinsInvMass(0)
522 ,fQADiJetInvMassMin(0)
523 ,fQADiJetInvMassMax(0)
524 ,fQADiJetNBinsJetPt(0)
525 ,fQADiJetJetPtMin(0)
526 ,fQADiJetJetPtMax(0)
527 ,fQADiJetNBinsDeltaPhi(0)
528 ,fQADiJetDeltaPhiMin(0)
529 ,fQADiJetDeltaPhiMax(0)
530 ,fQADiJetNBinsDeltaEta(0)
531 ,fQADiJetDeltaEtaMin(0)
532 ,fQADiJetDeltaEtaMax(0)
533 ,fQADiJetNBinsDeltaPt(0)
534 ,fQADiJetDeltaPtMin(0)
535 ,fQADiJetDeltaPtMax(0)
536 ,fQADiJetNBinsInBal(0)
537 ,fQADiJetInBalMin(0)
538 ,fQADiJetInBalMax(0)
539 ,fPhiCorrNBinsPt(0)
540 ,fPhiCorrPtMin(0)
541 ,fPhiCorrPtMax(0)
542 ,fPhiCorrNBinsEta(0)
543 ,fPhiCorrEtaMin(0)
544 ,fPhiCorrEtaMax(0)
545 ,fPhiCorrNBinsPhi(0)
546 ,fPhiCorrPhiMin(0)
547 ,fPhiCorrPhiMax(0)
548 ,fCommonHistList(0)
549 ,fh1EvtSelection(0)
550 ,fh1VertexNContributors(0)
551 ,fh1VertexZ(0)
552 ,fh1EvtMult(0)
553 ,fh1EvtCent(0)
554 ,fh2TrackPtVsDCAXY(0)
555 ,fh2TrackPtVsDCAZ(0)
556 ,fh1Xsec(0)
557 ,fh1Trials(0)
558 ,fh1PtHard(0)
559 ,fh1PtHardTrials(0)
560 ,fh1nRecJetsCuts(0)
561 ,fh1nGenJets(0)
562 ,fh1nRecEffJets(0)
563 ,fh1nEmbeddedJets(0)
564 ,fh1nRecBckgJetsCuts(0)
565 ,fh1nGenBckgJets(0)
566 ,fh2PtRecVsGenPrim(0)
567 ,fh2PtRecVsGenSec(0)
568 ,fQATrackHistosRecEffGen(0)
569 ,fQATrackHistosRecEffRec(0)
570 ,fQATrackHistosSecRec(0)
571 ,fFFHistosRecEffGen(0)
572 ,fFFHistosRecEffRec(0)
573 ,fFFHistosSecRec(0)
574 ,fhnResponseSinglePt(0)
575 ,fh2SingleInvPtRecMnGenVsPtGen(0)
576 ,fhnResponseJetTrackPt(0)
577 ,fhnResponseJetZ(0)
578 ,fhnResponseJetXi(0)
579 // Background
580 ,fh1OutLeadingMult(0)
581 ,fh1OutLeadingStatMult(0)
582 ,fh1PerpMult(0)
583 ,fh1ASideMult(0)
584 ,fh1ASideWindowMult(0)
585 ,fh1PerpWindowMult(0)
586 ,fh1Out2JetsMult(0)
587 ,fh1Out3JetsMult(0)
588 ,fh1MedianClustersMult(0)
589 ,fh1OutClustersMult(0)
590 ,fh1FractionPtEmbedded(0)
591 ,fh1IndexEmbedded(0)
592 ,fh2DeltaPtVsJetPtEmbedded(0)
593 ,fh2DeltaPtVsRecJetPtEmbedded(0)
594 ,fh1DeltaREmbedded(0)
595 ,fh2ptVsDistNN_pt50_rec(0)
596 ,fh2ptVsDistNN_pt50_nonRec(0)
597 ,fh2ptVsDistNN_pt10_rec(0)
598 ,fh2ptVsDistNN_pt10_nonRec(0)
599 ,fQABckgHisto0RecCuts(0)
600 ,fQABckgHisto0Gen(0)
601 ,fQABckgHisto1RecCuts(0)
602 ,fQABckgHisto1Gen(0)
603 ,fQABckgHisto2RecCuts(0)
604 ,fQABckgHisto2Gen(0)
605 ,fQABckgHisto3RecCuts(0)
606 ,fQABckgHisto3Gen(0)
607 ,fQABckgHisto4RecCuts(0)
608 ,fQABckgHisto4Gen(0)
609 ,fFFBckgHisto0RecCuts(0)
610 ,fFFBckgHisto0RecLeading(0)
611 ,fFFBckgHisto0Gen(0)
612 ,fFFBckgHisto0GenLeading(0)
613 ,fFFBckgHisto1RecCuts(0)
614 ,fFFBckgHisto1RecLeading(0)
615 ,fFFBckgHisto1Gen(0)
616 ,fFFBckgHisto1GenLeading(0)
617 ,fFFBckgHisto2RecCuts(0)
618 ,fFFBckgHisto2RecLeading(0)
619 ,fFFBckgHisto2Gen(0)
620 ,fFFBckgHisto2GenLeading(0)
621 ,fFFBckgHisto3RecCuts(0)
622 ,fFFBckgHisto3RecLeading(0)
623 ,fFFBckgHisto3Gen(0)
624 ,fFFBckgHisto3GenLeading(0)
625 ,fFFBckgHisto4RecCuts(0)
626 ,fFFBckgHisto4RecLeading(0)
627 ,fFFBckgHisto4Gen(0)
628 ,fFFBckgHisto4GenLeading(0)
629 ,fIJBckgHisto0RecCuts(0)
630 ,fIJBckgHisto0RecLeading(0)
631 ,fIJBckgHisto0Gen(0)
632 ,fIJBckgHisto0GenLeading(0)
633 ,fIJBckgHisto1RecCuts(0)
634 ,fIJBckgHisto1RecLeading(0)
635 ,fIJBckgHisto1Gen(0)
636 ,fIJBckgHisto1GenLeading(0)
637 ,fIJBckgHisto2RecCuts(0)
638 ,fIJBckgHisto2RecLeading(0)
639 ,fIJBckgHisto2Gen(0)
640 ,fIJBckgHisto2GenLeading(0)
641 ,fIJBckgHisto3RecCuts(0)
642 ,fIJBckgHisto3RecLeading(0)
643 ,fIJBckgHisto3Gen(0)
644 ,fIJBckgHisto3GenLeading(0)
645 ,fIJBckgHisto4RecCuts(0)
646 ,fIJBckgHisto4RecLeading(0)
647 ,fIJBckgHisto4Gen(0)
648 ,fIJBckgHisto4GenLeading(0)
649 ,fRandom(0)
650 ,fBckgSubMethod(0)
651{
652 // constructor
653 fBckgType[0] = 0;
654 fBckgType[1] = 0;
655 fBckgType[2] = 0;
656 fBckgType[3] = 0;
657 fBckgType[4] = 0;
658
659 DefineOutput(1,TList::Class());
660
661
662}
663
664//__________________________________________________________________________________________________________________________
665AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const AliAnalysisTaskFragmentationFunction &copy)
666 : AliAnalysisTaskSE()
667 ,fESD(copy.fESD)
668 ,fAOD(copy.fAOD)
669 ,fAODJets(copy.fAODJets)
670 ,fAODExtension(copy.fAODExtension)
671 ,fNonStdFile(copy.fNonStdFile)
672 ,fBranchRecJets(copy.fBranchRecJets)
673 ,fBranchRecBackJets(copy.fBranchRecBackJets)
674 ,fBranchRecBckgClusters(copy.fBranchRecBckgClusters)
675 ,fBranchGenJets(copy.fBranchGenJets)
676 ,fBranchEmbeddedJets(copy.fBranchEmbeddedJets)
677 ,fTrackTypeGen(copy.fTrackTypeGen)
678 ,fJetTypeGen(copy.fJetTypeGen)
679 ,fJetTypeRecEff(copy.fJetTypeRecEff)
680 ,fUseAODInputJets(copy.fUseAODInputJets)
681 ,fFilterMask(copy.fFilterMask)
682 ,fUsePhysicsSelection(copy.fUsePhysicsSelection)
683 ,fEventClass(copy.fEventClass)
684 ,fMaxVertexZ(copy.fMaxVertexZ)
685 ,fTrackPtCut(copy.fTrackPtCut)
686 ,fTrackEtaMin(copy.fTrackEtaMin)
687 ,fTrackEtaMax(copy.fTrackEtaMax)
688 ,fTrackPhiMin(copy.fTrackPhiMin)
689 ,fTrackPhiMax(copy.fTrackPhiMax)
690 ,fUseExtraTracks(copy.fUseExtraTracks)
691 ,fUseExtraTracksBgr(copy.fUseExtraTracksBgr)
692 ,fCutFractionPtEmbedded(copy.fCutFractionPtEmbedded)
693 ,fUseEmbeddedJetAxis(copy.fUseEmbeddedJetAxis)
694 ,fUseEmbeddedJetPt(copy.fUseEmbeddedJetPt)
695 ,fJetPtCut(copy.fJetPtCut)
696 ,fJetEtaMin(copy.fJetEtaMin)
697 ,fJetEtaMax(copy.fJetEtaMax)
698 ,fJetPhiMin(copy.fJetPhiMin)
699 ,fJetPhiMax(copy.fJetPhiMax)
700 ,fDiJetCut(copy.fDiJetCut)
701 ,fDiJetDeltaPhiCut(copy.fDiJetDeltaPhiCut)
702 ,fDiJetPtFractionCut(copy.fDiJetPtFractionCut)
703 ,fDiJetCDFCut(copy.fDiJetCDFCut)
704 ,fDiJetKindBins(copy.fDiJetKindBins)
705 ,fFFRadius(copy.fFFRadius)
706 ,fFFBckgRadius(copy.fFFBckgRadius)
707 ,fBckgMode(copy.fBckgMode)
708 ,fIJMode(copy.fIJMode)
709 ,fQAMode(copy.fQAMode)
710 ,fFFMode(copy.fFFMode)
711 ,fDJMode(copy.fDJMode)
712 ,fEffMode(copy.fEffMode)
713 ,fPhiCorrMode(copy.fPhiCorrMode)
714 ,fUseRecEffRecJetPtBins(copy.fUseRecEffRecJetPtBins)
715 ,fUseResponseRecJetPtBins(copy.fUseResponseRecJetPtBins)
716 ,fAvgTrials(copy.fAvgTrials)
717 ,fTracksRec(copy.fTracksRec)
718 ,fTracksRecCuts(copy.fTracksRecCuts)
719 ,fTracksGen(copy.fTracksGen)
720 ,fTracksAODMCCharged(copy.fTracksAODMCCharged)
721 ,fTracksAODMCChargedSec(copy.fTracksAODMCChargedSec)
722 ,fTracksRecQualityCuts(copy.fTracksRecQualityCuts)
723 ,fJetsRec(copy.fJetsRec)
724 ,fJetsRecCuts(copy.fJetsRecCuts)
725 ,fJetsGen(copy.fJetsGen)
726 ,fJetsRecEff(copy.fJetsRecEff)
727 ,fJetsEmbedded(copy.fJetsEmbedded)
728 ,fBckgJetsRec(copy.fBckgJetsRec)
729 ,fBckgJetsRecCuts(copy.fBckgJetsRecCuts)
730 ,fBckgJetsGen(copy.fBckgJetsGen)
731 ,fQATrackHistosRec(copy.fQATrackHistosRec)
732 ,fQATrackHistosRecCuts(copy.fQATrackHistosRecCuts)
733 ,fQATrackHistosGen(copy.fQATrackHistosGen)
734 ,fQAJetHistosRec(copy.fQAJetHistosRec)
735 ,fQAJetHistosRecCuts(copy.fQAJetHistosRecCuts)
736 ,fQAJetHistosRecCutsLeading(copy.fQAJetHistosRecCutsLeading)
737 ,fQAJetHistosGen(copy.fQAJetHistosGen)
738 ,fQAJetHistosGenLeading(copy.fQAJetHistosGenLeading)
739 ,fQAJetHistosRecEffLeading(copy.fQAJetHistosRecEffLeading)
740 ,fFFHistosRecCuts(copy.fFFHistosRecCuts)
741 ,fFFHistosRecLeading(copy.fFFHistosRecLeading)
742 ,fFFHistosRecLeadingTrack(copy.fFFHistosRecLeadingTrack)
743 ,fFFHistosGen(copy.fFFHistosGen)
744 ,fFFHistosGenLeading(copy.fFFHistosGenLeading)
745 ,fFFHistosGenLeadingTrack(copy.fFFHistosGenLeadingTrack)
746 ,fIJHistosRecCuts(copy.fIJHistosRecCuts)
747 ,fIJHistosRecLeading(copy.fIJHistosRecLeading)
748 ,fIJHistosRecLeadingTrack(copy.fIJHistosRecLeadingTrack)
749 ,fIJHistosGen(copy.fIJHistosGen)
750 ,fIJHistosGenLeading(copy.fIJHistosGenLeading)
751 ,fIJHistosGenLeadingTrack(copy.fIJHistosGenLeadingTrack)
752 ,fFFDiJetHistosRecCuts(copy.fFFDiJetHistosRecCuts)
753 ,fFFDiJetHistosRecLeading(copy.fFFDiJetHistosRecLeading)
754 ,fFFDiJetHistosRecLeadingTrack(copy.fFFDiJetHistosRecLeadingTrack)
755 ,fFFDiJetHistosGen(copy.fFFDiJetHistosGen)
756 ,fFFDiJetHistosGenLeading(copy.fFFDiJetHistosGenLeading)
757 ,fFFDiJetHistosGenLeadingTrack(copy.fFFDiJetHistosGenLeadingTrack)
758 ,fQADiJetHistosRecCuts(copy.fQADiJetHistosRecCuts)
759 ,fQADiJetHistosGen(copy.fQADiJetHistosGen)
760 ,fPhiCorrHistosJetArea(copy.fPhiCorrHistosJetArea)
761 ,fPhiCorrHistosTransverseArea(copy.fPhiCorrHistosTransverseArea)
762 ,fPhiCorrHistosAwayArea(copy.fPhiCorrHistosAwayArea)
763 ,fQATrackHighPtThreshold(copy.fQATrackHighPtThreshold)
764 ,fFFNBinsJetPt(copy.fFFNBinsJetPt)
765 ,fFFJetPtMin(copy.fFFJetPtMin)
766 ,fFFJetPtMax(copy.fFFJetPtMax)
767 ,fFFNBinsPt(copy.fFFNBinsPt)
768 ,fFFPtMin(copy.fFFPtMin)
769 ,fFFPtMax(copy.fFFPtMax)
770 ,fFFNBinsXi(copy.fFFNBinsXi)
771 ,fFFXiMin(copy.fFFXiMin)
772 ,fFFXiMax(copy.fFFXiMax)
773 ,fFFNBinsZ(copy.fFFNBinsZ)
774 ,fFFZMin(copy.fFFZMin)
775 ,fFFZMax(copy.fFFZMax)
776 ,fQAJetNBinsPt(copy.fQAJetNBinsPt)
777 ,fQAJetPtMin(copy.fQAJetPtMin)
778 ,fQAJetPtMax(copy.fQAJetPtMax)
779 ,fQAJetNBinsEta(copy.fQAJetNBinsEta)
780 ,fQAJetEtaMin(copy.fQAJetEtaMin)
781 ,fQAJetEtaMax(copy.fQAJetEtaMax)
782 ,fQAJetNBinsPhi(copy.fQAJetNBinsPhi)
783 ,fQAJetPhiMin(copy.fQAJetPhiMin)
784 ,fQAJetPhiMax(copy.fQAJetPhiMax)
785 ,fQATrackNBinsPt(copy.fQATrackNBinsPt)
786 ,fQATrackPtMin(copy.fQATrackPtMin)
787 ,fQATrackPtMax(copy.fQATrackPtMax)
788 ,fQATrackNBinsEta(copy.fQATrackNBinsEta)
789 ,fQATrackEtaMin(copy.fQATrackEtaMin)
790 ,fQATrackEtaMax(copy.fQATrackEtaMax)
791 ,fQATrackNBinsPhi(copy.fQATrackNBinsPhi)
792 ,fQATrackPhiMin(copy.fQATrackPhiMin)
793 ,fQATrackPhiMax(copy.fQATrackPhiMax)
794 ,fIJNBinsJetPt(copy.fIJNBinsJetPt)
795 ,fIJJetPtMin(copy.fIJJetPtMin)
796 ,fIJJetPtMax(copy.fIJJetPtMax)
797 ,fIJNBinsPt(copy.fIJNBinsPt)
798 ,fIJPtMin(copy.fIJPtMin)
799 ,fIJPtMax(copy.fIJPtMax)
800 ,fIJNBinsZ(copy.fIJNBinsZ)
801 ,fIJZMin(copy.fIJZMin)
802 ,fIJZMax(copy.fIJZMax)
803 ,fIJNBinsCosTheta(copy.fIJNBinsCosTheta)
804 ,fIJCosThetaMin(copy.fIJCosThetaMin)
805 ,fIJCosThetaMax(copy.fIJCosThetaMax)
806 ,fIJNBinsTheta(copy.fIJNBinsTheta)
807 ,fIJThetaMin(copy.fIJThetaMin)
808 ,fIJThetaMax(copy.fIJThetaMax)
809 ,fIJNBinsJt(copy.fIJNBinsJt)
810 ,fIJJtMin(copy.fIJJtMin)
811 ,fIJJtMax(copy.fIJJtMax)
812 ,fDiJetNBinsJetInvMass(copy.fDiJetNBinsJetInvMass)
813 ,fDiJetJetInvMassMin(copy.fDiJetJetInvMassMin)
814 ,fDiJetJetInvMassMax(copy.fDiJetJetInvMassMax)
815 ,fDiJetNBinsJetPt(copy.fDiJetNBinsJetPt)
816 ,fDiJetJetPtMin(copy.fDiJetJetPtMin)
817 ,fDiJetJetPtMax(copy.fDiJetJetPtMax)
818 ,fDiJetNBinsPt(copy.fDiJetNBinsPt)
819 ,fDiJetPtMin(copy.fDiJetPtMin)
820 ,fDiJetPtMax(copy.fDiJetPtMax)
821 ,fDiJetNBinsXi(copy.fDiJetNBinsXi)
822 ,fDiJetXiMin(copy.fDiJetXiMin)
823 ,fDiJetXiMax(copy.fDiJetXiMax)
824 ,fDiJetNBinsZ(copy.fDiJetNBinsZ)
825 ,fDiJetZMin(copy.fDiJetZMin)
826 ,fDiJetZMax(copy.fDiJetZMax)
827 ,fQADiJetNBinsInvMass(copy.fQADiJetNBinsInvMass)
828 ,fQADiJetInvMassMin(copy.fQADiJetInvMassMin)
829 ,fQADiJetInvMassMax(copy.fQADiJetInvMassMax)
830 ,fQADiJetNBinsJetPt(copy.fQADiJetNBinsJetPt)
831 ,fQADiJetJetPtMin(copy.fQADiJetJetPtMin)
832 ,fQADiJetJetPtMax(copy.fQADiJetJetPtMax)
833 ,fQADiJetNBinsDeltaPhi(copy.fQADiJetNBinsDeltaPhi)
834 ,fQADiJetDeltaPhiMin(copy.fQADiJetDeltaPhiMin)
835 ,fQADiJetDeltaPhiMax(copy.fQADiJetDeltaPhiMax)
836 ,fQADiJetNBinsDeltaEta(copy.fQADiJetNBinsDeltaEta)
837 ,fQADiJetDeltaEtaMin(copy.fQADiJetDeltaEtaMin)
838 ,fQADiJetDeltaEtaMax(copy.fQADiJetDeltaEtaMax)
839 ,fQADiJetNBinsDeltaPt(copy.fQADiJetNBinsDeltaPt)
840 ,fQADiJetDeltaPtMin(copy.fQADiJetDeltaPtMin)
841 ,fQADiJetDeltaPtMax(copy.fQADiJetDeltaPtMax)
842 ,fQADiJetNBinsInBal(copy.fQADiJetNBinsInBal)
843 ,fQADiJetInBalMin(copy.fQADiJetInBalMin)
844 ,fQADiJetInBalMax(copy.fQADiJetInBalMax)
845 ,fPhiCorrNBinsPt(copy.fPhiCorrNBinsPt)
846 ,fPhiCorrPtMin(copy.fPhiCorrPtMin)
847 ,fPhiCorrPtMax(copy.fPhiCorrPtMax)
848 ,fPhiCorrNBinsEta(copy.fPhiCorrNBinsEta)
849 ,fPhiCorrEtaMin(copy.fPhiCorrEtaMin)
850 ,fPhiCorrEtaMax(copy.fPhiCorrEtaMax)
851 ,fPhiCorrNBinsPhi(copy.fPhiCorrNBinsPhi)
852 ,fPhiCorrPhiMin(copy.fPhiCorrPhiMin)
853 ,fPhiCorrPhiMax(copy.fPhiCorrPhiMax)
854 ,fCommonHistList(copy.fCommonHistList)
855 ,fh1EvtSelection(copy.fh1EvtSelection)
856 ,fh1VertexNContributors(copy.fh1VertexNContributors)
857 ,fh1VertexZ(copy.fh1VertexZ)
858 ,fh1EvtMult(copy.fh1EvtMult)
859 ,fh1EvtCent(copy.fh1EvtCent)
860 ,fh2TrackPtVsDCAXY(copy.fh2TrackPtVsDCAXY)
861 ,fh2TrackPtVsDCAZ(copy.fh2TrackPtVsDCAXY)
862 ,fh1Xsec(copy.fh1Xsec)
863 ,fh1Trials(copy.fh1Trials)
864 ,fh1PtHard(copy.fh1PtHard)
865 ,fh1PtHardTrials(copy.fh1PtHardTrials)
866 ,fh1nRecJetsCuts(copy.fh1nRecJetsCuts)
867 ,fh1nGenJets(copy.fh1nGenJets)
868 ,fh1nRecEffJets(copy.fh1nRecEffJets)
869 ,fh1nEmbeddedJets(copy.fh1nEmbeddedJets)
870 ,fh1nRecBckgJetsCuts(copy.fh1nRecBckgJetsCuts)
871 ,fh1nGenBckgJets(copy.fh1nGenBckgJets)
872 ,fh2PtRecVsGenPrim(copy.fh2PtRecVsGenPrim)
873 ,fh2PtRecVsGenSec(copy.fh2PtRecVsGenSec)
874 ,fQATrackHistosRecEffGen(copy.fQATrackHistosRecEffGen)
875 ,fQATrackHistosRecEffRec(copy.fQATrackHistosRecEffRec)
876 ,fQATrackHistosSecRec(copy.fQATrackHistosSecRec)
877 ,fFFHistosRecEffGen(copy.fFFHistosRecEffGen)
878 ,fFFHistosRecEffRec(copy.fFFHistosRecEffRec)
879 ,fFFHistosSecRec(copy.fFFHistosSecRec)
880 ,fhnResponseSinglePt(copy.fhnResponseSinglePt)
881 ,fh2SingleInvPtRecMnGenVsPtGen(copy.fh2SingleInvPtRecMnGenVsPtGen)
882 ,fhnResponseJetTrackPt(copy.fhnResponseJetTrackPt)
883 ,fhnResponseJetZ(copy.fhnResponseJetZ)
884 ,fhnResponseJetXi(copy.fhnResponseJetXi)
885 // Background
886 ,fh1OutLeadingMult(copy.fh1OutLeadingMult)
887 ,fh1OutLeadingStatMult(copy.fh1OutLeadingStatMult)
888 ,fh1PerpMult(copy.fh1PerpMult)
889 ,fh1ASideMult(copy.fh1ASideMult)
890 ,fh1ASideWindowMult(copy.fh1ASideWindowMult)
891 ,fh1PerpWindowMult(copy.fh1PerpWindowMult)
892 ,fh1Out2JetsMult(copy.fh1Out2JetsMult)
893 ,fh1Out3JetsMult(copy.fh1Out3JetsMult)
894 ,fh1MedianClustersMult(copy.fh1MedianClustersMult)
895 ,fh1OutClustersMult(copy.fh1OutClustersMult)
896 ,fh1FractionPtEmbedded(copy.fh1FractionPtEmbedded)
897 ,fh1IndexEmbedded(copy.fh1IndexEmbedded)
898 ,fh2DeltaPtVsJetPtEmbedded(copy.fh2DeltaPtVsJetPtEmbedded)
899 ,fh2DeltaPtVsRecJetPtEmbedded(copy.fh2DeltaPtVsRecJetPtEmbedded)
900 ,fh1DeltaREmbedded(copy.fh1DeltaREmbedded)
901 ,fh2ptVsDistNN_pt50_rec(copy.fh2ptVsDistNN_pt50_rec)
902 ,fh2ptVsDistNN_pt50_nonRec(copy.fh2ptVsDistNN_pt50_nonRec)
903 ,fh2ptVsDistNN_pt10_rec(copy.fh2ptVsDistNN_pt10_rec)
904 ,fh2ptVsDistNN_pt10_nonRec(copy.fh2ptVsDistNN_pt10_nonRec)
905 ,fQABckgHisto0RecCuts(copy.fQABckgHisto0RecCuts)
906 ,fQABckgHisto0Gen(copy.fQABckgHisto0Gen)
907 ,fQABckgHisto1RecCuts(copy.fQABckgHisto1RecCuts)
908 ,fQABckgHisto1Gen(copy.fQABckgHisto1Gen)
909 ,fQABckgHisto2RecCuts(copy.fQABckgHisto2RecCuts)
910 ,fQABckgHisto2Gen(copy.fQABckgHisto2Gen)
911 ,fQABckgHisto3RecCuts(copy.fQABckgHisto3RecCuts)
912 ,fQABckgHisto3Gen(copy.fQABckgHisto3Gen)
913 ,fQABckgHisto4RecCuts(copy.fQABckgHisto4RecCuts)
914 ,fQABckgHisto4Gen(copy.fQABckgHisto4Gen)
915 ,fFFBckgHisto0RecCuts(copy.fFFBckgHisto0RecCuts)
916 ,fFFBckgHisto0RecLeading(copy.fFFBckgHisto0RecLeading)
917 ,fFFBckgHisto0Gen(copy.fFFBckgHisto0Gen)
918 ,fFFBckgHisto0GenLeading(copy.fFFBckgHisto0GenLeading)
919 ,fFFBckgHisto1RecCuts(copy.fFFBckgHisto1RecCuts)
920 ,fFFBckgHisto1RecLeading(copy.fFFBckgHisto1RecLeading)
921 ,fFFBckgHisto1Gen(copy.fFFBckgHisto1Gen)
922 ,fFFBckgHisto1GenLeading(copy.fFFBckgHisto1GenLeading)
923 ,fFFBckgHisto2RecCuts(copy.fFFBckgHisto2RecCuts)
924 ,fFFBckgHisto2RecLeading(copy.fFFBckgHisto2RecLeading)
925 ,fFFBckgHisto2Gen(copy.fFFBckgHisto2Gen)
926 ,fFFBckgHisto2GenLeading(copy.fFFBckgHisto2GenLeading)
927 ,fFFBckgHisto3RecCuts(copy.fFFBckgHisto3RecCuts)
928 ,fFFBckgHisto3RecLeading(copy.fFFBckgHisto3RecLeading)
929 ,fFFBckgHisto3Gen(copy.fFFBckgHisto3Gen)
930 ,fFFBckgHisto3GenLeading(copy.fFFBckgHisto3GenLeading)
931 ,fFFBckgHisto4RecCuts(copy.fFFBckgHisto4RecCuts)
932 ,fFFBckgHisto4RecLeading(copy.fFFBckgHisto4RecLeading)
933 ,fFFBckgHisto4Gen(copy.fFFBckgHisto4Gen)
934 ,fFFBckgHisto4GenLeading(copy.fFFBckgHisto4GenLeading)
935 ,fIJBckgHisto0RecCuts(copy.fIJBckgHisto0RecCuts)
936 ,fIJBckgHisto0RecLeading(copy.fIJBckgHisto0RecLeading)
937 ,fIJBckgHisto0Gen(copy.fIJBckgHisto0Gen)
938 ,fIJBckgHisto0GenLeading(copy.fIJBckgHisto0GenLeading)
939 ,fIJBckgHisto1RecCuts(copy.fIJBckgHisto1RecCuts)
940 ,fIJBckgHisto1RecLeading(copy.fIJBckgHisto1RecLeading)
941 ,fIJBckgHisto1Gen(copy.fIJBckgHisto1Gen)
942 ,fIJBckgHisto1GenLeading(copy.fIJBckgHisto1GenLeading)
943 ,fIJBckgHisto2RecCuts(copy.fIJBckgHisto2RecCuts)
944 ,fIJBckgHisto2RecLeading(copy.fIJBckgHisto2RecLeading)
945 ,fIJBckgHisto2Gen(copy.fIJBckgHisto2Gen)
946 ,fIJBckgHisto2GenLeading(copy.fIJBckgHisto2GenLeading)
947 ,fIJBckgHisto3RecCuts(copy.fIJBckgHisto3RecCuts)
948 ,fIJBckgHisto3RecLeading(copy.fIJBckgHisto3RecLeading)
949 ,fIJBckgHisto3Gen(copy.fIJBckgHisto3Gen)
950 ,fIJBckgHisto3GenLeading(copy.fIJBckgHisto3GenLeading)
951 ,fIJBckgHisto4RecCuts(copy.fIJBckgHisto4RecCuts)
952 ,fIJBckgHisto4RecLeading(copy.fIJBckgHisto4RecLeading)
953 ,fIJBckgHisto4Gen(copy.fIJBckgHisto4Gen)
954 ,fIJBckgHisto4GenLeading(copy.fIJBckgHisto4GenLeading)
955 ,fRandom(copy.fRandom)
956 ,fBckgSubMethod(copy.fBckgSubMethod)
957{
958 // copy constructor
959 fBckgType[0] = copy.fBckgType[0];
960 fBckgType[1] = copy.fBckgType[1];
961 fBckgType[2] = copy.fBckgType[2];
962 fBckgType[3] = copy.fBckgType[3];
963 fBckgType[4] = copy.fBckgType[4];
964}
965
966// _________________________________________________________________________________________________________________________________
967AliAnalysisTaskFragmentationFunction& AliAnalysisTaskFragmentationFunction::operator=(const AliAnalysisTaskFragmentationFunction& o)
968{
969 // assignment
970
971 if(this!=&o){
972
973 AliAnalysisTaskSE::operator=(o);
974 fESD = o.fESD;
975 fAOD = o.fAOD;
976 fAODJets = o.fAODJets;
977 fAODExtension = o.fAODExtension;
978 fNonStdFile = o.fNonStdFile;
979 fBranchRecJets = o.fBranchRecJets;
980 fBranchRecBackJets = o.fBranchRecBackJets;
981 fBranchRecBckgClusters = o.fBranchRecBckgClusters;
982 fBranchGenJets = o.fBranchGenJets;
983 fBranchEmbeddedJets = o.fBranchEmbeddedJets;
984 fTrackTypeGen = o.fTrackTypeGen;
985 fJetTypeGen = o.fJetTypeGen;
986 fJetTypeRecEff = o.fJetTypeRecEff;
987 fUseAODInputJets = o.fUseAODInputJets;
988 fFilterMask = o.fFilterMask;
989 fUsePhysicsSelection = o.fUsePhysicsSelection;
990 fEventClass = o.fEventClass;
991 fMaxVertexZ = o.fMaxVertexZ;
992 fTrackPtCut = o.fTrackPtCut;
993 fTrackEtaMin = o.fTrackEtaMin;
994 fTrackEtaMax = o.fTrackEtaMax;
995 fTrackPhiMin = o.fTrackPhiMin;
996 fTrackPhiMax = o.fTrackPhiMax;
997 fUseExtraTracks = o.fUseExtraTracks;
998 fUseExtraTracksBgr = o.fUseExtraTracksBgr;
999 fCutFractionPtEmbedded = o.fCutFractionPtEmbedded;
1000 fUseEmbeddedJetAxis = o.fUseEmbeddedJetAxis;
1001 fUseEmbeddedJetPt = o.fUseEmbeddedJetPt;
1002 fJetPtCut = o.fJetPtCut;
1003 fJetEtaMin = o.fJetEtaMin;
1004 fJetEtaMax = o.fJetEtaMax;
1005 fJetPhiMin = o.fJetPhiMin;
1006 fJetPhiMax = o.fJetPhiMin;
1007 fDiJetCut = o.fDiJetCut;
1008 fDiJetDeltaPhiCut = o.fDiJetDeltaPhiCut;
1009 fDiJetPtFractionCut = o.fDiJetPtFractionCut;
1010 fDiJetCDFCut = o.fDiJetCDFCut;
1011 fDiJetKindBins = o.fDiJetKindBins;
1012 fFFRadius = o.fFFRadius;
1013 fFFBckgRadius = o.fFFBckgRadius;
1014 fBckgMode = o.fBckgMode;
1015 fIJMode = o.fIJMode;
1016 fQAMode = o.fQAMode;
1017 fFFMode = o.fFFMode;
1018 fDJMode = o.fDJMode;
1019 fEffMode = o.fEffMode;
1020 fPhiCorrMode = o.fPhiCorrMode;
1021 fBckgType[0] = o.fBckgType[0];
1022 fBckgType[1] = o.fBckgType[1];
1023 fBckgType[2] = o.fBckgType[2];
1024 fBckgType[3] = o.fBckgType[3];
1025 fBckgType[4] = o.fBckgType[4];
1026 fUseRecEffRecJetPtBins = o.fUseRecEffRecJetPtBins;
1027 fUseResponseRecJetPtBins = o.fUseResponseRecJetPtBins;
1028 fAvgTrials = o.fAvgTrials;
1029 fTracksRec = o.fTracksRec;
1030 fTracksRecCuts = o.fTracksRecCuts;
1031 fTracksGen = o.fTracksGen;
1032 fTracksAODMCCharged = o.fTracksAODMCCharged;
1033 fTracksAODMCChargedSec = o.fTracksAODMCChargedSec;
1034 fTracksRecQualityCuts = o.fTracksRecQualityCuts;
1035 fJetsRec = o.fJetsRec;
1036 fJetsRecCuts = o.fJetsRecCuts;
1037 fJetsGen = o.fJetsGen;
1038 fJetsRecEff = o.fJetsRecEff;
1039 fJetsEmbedded = o.fJetsEmbedded;
1040 fBckgJetsRec = o.fBckgJetsRec;
1041 fBckgJetsRecCuts = o.fBckgJetsRecCuts;
1042 fBckgJetsGen = o.fBckgJetsGen;
1043 fQATrackHistosRec = o.fQATrackHistosRec;
1044 fQATrackHistosRecCuts = o.fQATrackHistosRecCuts;
1045 fQATrackHistosGen = o.fQATrackHistosGen;
1046 fQAJetHistosRec = o.fQAJetHistosRec;
1047 fQAJetHistosRecCuts = o.fQAJetHistosRecCuts;
1048 fQAJetHistosRecCutsLeading = o.fQAJetHistosRecCutsLeading;
1049 fQAJetHistosGen = o.fQAJetHistosGen;
1050 fQAJetHistosGenLeading = o.fQAJetHistosGenLeading;
1051 fQAJetHistosRecEffLeading = o.fQAJetHistosRecEffLeading;
1052 fFFHistosRecCuts = o.fFFHistosRecCuts;
1053 fFFHistosRecLeading = o.fFFHistosRecLeading;
1054 fFFHistosRecLeadingTrack = o.fFFHistosRecLeadingTrack;
1055 fFFHistosGen = o.fFFHistosGen;
1056 fFFHistosGenLeading = o.fFFHistosGenLeading;
1057 fFFHistosGenLeadingTrack = o.fFFHistosGenLeadingTrack;
1058 fIJHistosRecCuts = o.fIJHistosRecCuts;
1059 fIJHistosRecLeading = o.fIJHistosRecLeading;
1060 fIJHistosRecLeadingTrack = o.fIJHistosRecLeadingTrack;
1061 fIJHistosGen = o.fIJHistosGen;
1062 fIJHistosGenLeading = o.fIJHistosGenLeading;
1063 fIJHistosGenLeadingTrack = o.fIJHistosGenLeadingTrack;
1064 fFFDiJetHistosRecCuts = o.fFFDiJetHistosRecCuts;
1065 fFFDiJetHistosRecLeading = o.fFFDiJetHistosRecLeading;
1066 fFFDiJetHistosRecLeadingTrack = o.fFFDiJetHistosRecLeadingTrack;
1067 fFFDiJetHistosGen = o.fFFDiJetHistosGen;
1068 fFFDiJetHistosGenLeading = o.fFFDiJetHistosGenLeading;
1069 fFFDiJetHistosGenLeadingTrack = o.fFFDiJetHistosGenLeadingTrack;
1070 fQADiJetHistosRecCuts = o.fQADiJetHistosRecCuts;
1071 fQADiJetHistosGen = o.fQADiJetHistosGen;
1072 fPhiCorrHistosJetArea = o.fPhiCorrHistosJetArea;
1073 fPhiCorrHistosTransverseArea = o.fPhiCorrHistosTransverseArea;
1074 fPhiCorrHistosAwayArea = o.fPhiCorrHistosAwayArea;
1075 fQATrackHighPtThreshold = o.fQATrackHighPtThreshold;
1076 fFFNBinsJetPt = o.fFFNBinsJetPt;
1077 fFFJetPtMin = o.fFFJetPtMin;
1078 fFFJetPtMax = o.fFFJetPtMax;
1079 fFFNBinsPt = o.fFFNBinsPt;
1080 fFFPtMin = o.fFFPtMin;
1081 fFFPtMax = o.fFFPtMax;
1082 fFFNBinsXi = o.fFFNBinsXi;
1083 fFFXiMin = o.fFFXiMin;
1084 fFFXiMax = o.fFFXiMax;
1085 fFFNBinsZ = o.fFFNBinsZ;
1086 fFFZMin = o.fFFZMin;
1087 fFFZMax = o.fFFZMax;
1088 fQAJetNBinsPt = o.fQAJetNBinsPt;
1089 fQAJetPtMin = o.fQAJetPtMin;
1090 fQAJetPtMax = o.fQAJetPtMax;
1091 fQAJetNBinsEta = o.fQAJetNBinsEta;
1092 fQAJetEtaMin = o.fQAJetEtaMin;
1093 fQAJetEtaMax = o.fQAJetEtaMax;
1094 fQAJetNBinsPhi = o.fQAJetNBinsPhi;
1095 fQAJetPhiMin = o.fQAJetPhiMin;
1096 fQAJetPhiMax = o.fQAJetPhiMax;
1097 fQATrackNBinsPt = o.fQATrackNBinsPt;
1098 fQATrackPtMin = o.fQATrackPtMin;
1099 fQATrackPtMax = o.fQATrackPtMax;
1100 fQATrackNBinsEta = o.fQATrackNBinsEta;
1101 fQATrackEtaMin = o.fQATrackEtaMin;
1102 fQATrackEtaMax = o.fQATrackEtaMax;
1103 fQATrackNBinsPhi = o.fQATrackNBinsPhi;
1104 fQATrackPhiMin = o.fQATrackPhiMin;
1105 fQATrackPhiMax = o.fQATrackPhiMax;
1106 fIJNBinsJetPt = o.fIJNBinsJetPt;
1107 fIJJetPtMin = o.fIJJetPtMin;
1108 fIJJetPtMax = o.fIJJetPtMax;
1109 fIJNBinsPt = o.fIJNBinsPt;
1110 fIJPtMin = o.fIJPtMin;
1111 fIJPtMax = o.fIJPtMax;
1112 fIJNBinsZ = o.fIJNBinsZ;
1113 fIJZMin = o.fIJZMin;
1114 fIJZMax = o.fIJZMax;
1115 fIJNBinsCosTheta = o.fIJNBinsCosTheta;
1116 fIJCosThetaMin = o.fIJCosThetaMin;
1117 fIJCosThetaMax = o.fIJCosThetaMax;
1118 fIJNBinsTheta = o.fIJNBinsTheta;
1119 fIJThetaMin = o.fIJThetaMin;
1120 fIJThetaMax = o.fIJThetaMax;
1121 fIJNBinsJt = o.fIJNBinsJt;
1122 fIJJtMin = o.fIJJtMin;
1123 fIJJtMax = o.fIJJtMax;
1124 fDiJetNBinsJetInvMass = o.fDiJetNBinsJetInvMass;
1125 fDiJetJetInvMassMin = o.fDiJetJetInvMassMin;
1126 fDiJetJetInvMassMax = o.fDiJetJetInvMassMax;
1127 fDiJetNBinsJetPt = o.fDiJetNBinsJetPt;
1128 fDiJetJetPtMin = o.fDiJetJetPtMin;
1129 fDiJetJetPtMax = o.fDiJetJetPtMax;
1130 fDiJetNBinsPt = o.fDiJetNBinsPt;
1131 fDiJetPtMin = o.fDiJetPtMin;
1132 fDiJetPtMax = o.fDiJetPtMax;
1133 fDiJetNBinsXi = o.fDiJetNBinsXi;
1134 fDiJetXiMin = o.fDiJetXiMin;
1135 fDiJetXiMax = o.fDiJetXiMax;
1136 fDiJetNBinsZ = o.fDiJetNBinsZ;
1137 fDiJetZMin = o.fDiJetZMin;
1138 fDiJetZMax = o.fDiJetZMax;
1139 fQADiJetNBinsInvMass = o.fQADiJetNBinsInvMass;
1140 fQADiJetInvMassMin = o.fQADiJetInvMassMin;
1141 fQADiJetInvMassMax = o.fQADiJetInvMassMax;
1142 fQADiJetNBinsJetPt = o.fQADiJetNBinsJetPt;
1143 fQADiJetJetPtMin = o.fQADiJetJetPtMin;
1144 fQADiJetJetPtMax = o.fQADiJetJetPtMax;
1145 fQADiJetNBinsDeltaPhi = o.fQADiJetNBinsDeltaPhi;
1146 fQADiJetDeltaPhiMin = o.fQADiJetDeltaPhiMin;
1147 fQADiJetDeltaPhiMax = o.fQADiJetDeltaPhiMax;
1148 fQADiJetNBinsDeltaEta = o.fQADiJetNBinsDeltaEta;
1149 fQADiJetDeltaEtaMin = o.fQADiJetDeltaEtaMin;
1150 fQADiJetDeltaEtaMax = o.fQADiJetDeltaEtaMax;
1151 fQADiJetNBinsDeltaPt = o.fQADiJetNBinsDeltaPt;
1152 fQADiJetDeltaPtMin = o.fQADiJetDeltaPtMin;
1153 fQADiJetDeltaPtMax = o.fQADiJetDeltaPtMax;
1154 fQADiJetNBinsInBal = o.fQADiJetNBinsInBal;
1155 fQADiJetInBalMin = o.fQADiJetInBalMin;
1156 fQADiJetInBalMax = o.fQADiJetInBalMax;
1157 fPhiCorrNBinsPt = o.fPhiCorrNBinsPt;
1158 fPhiCorrPtMin = o.fPhiCorrPtMin;
1159 fPhiCorrPtMax = o.fPhiCorrPtMax;
1160 fPhiCorrNBinsEta = o.fPhiCorrNBinsEta;
1161 fPhiCorrEtaMin = o.fPhiCorrEtaMin;
1162 fPhiCorrEtaMax = o.fPhiCorrEtaMax;
1163 fPhiCorrNBinsPhi = o.fPhiCorrNBinsPhi;
1164 fPhiCorrPhiMin = o.fPhiCorrPhiMin;
1165 fPhiCorrPhiMax = o.fPhiCorrPhiMax;
1166 fCommonHistList = o.fCommonHistList;
1167 fh1EvtSelection = o.fh1EvtSelection;
1168 fh1VertexNContributors = o.fh1VertexNContributors;
1169 fh1VertexZ = o.fh1VertexZ;
1170 fh1EvtMult = o.fh1EvtMult;
1171 fh1EvtCent = o.fh1EvtCent;
1172 fh2TrackPtVsDCAXY = o.fh2TrackPtVsDCAXY;
1173 fh2TrackPtVsDCAZ = o.fh2TrackPtVsDCAXY;
1174 fh1Xsec = o.fh1Xsec;
1175 fh1Trials = o.fh1Trials;
1176 fh1PtHard = o.fh1PtHard;
1177 fh1PtHardTrials = o.fh1PtHardTrials;
1178 fh1nRecJetsCuts = o.fh1nRecJetsCuts;
1179 fh1nGenJets = o.fh1nGenJets;
1180 fh1nRecEffJets = o.fh1nRecEffJets;
1181 fh1nEmbeddedJets = o.fh1nEmbeddedJets;
1182 fh2PtRecVsGenPrim = o.fh2PtRecVsGenPrim;
1183 fh2PtRecVsGenSec = o.fh2PtRecVsGenSec;
1184 fQATrackHistosRecEffGen = o.fQATrackHistosRecEffGen;
1185 fQATrackHistosRecEffRec = o.fQATrackHistosRecEffRec;
1186 fQATrackHistosSecRec = o.fQATrackHistosSecRec;
1187 fFFHistosRecEffGen = o.fFFHistosRecEffGen;
1188 fFFHistosRecEffRec = o.fFFHistosRecEffRec;
1189 fFFHistosSecRec = o.fFFHistosSecRec;
1190 fhnResponseSinglePt = o.fhnResponseSinglePt;
1191 fh2SingleInvPtRecMnGenVsPtGen = o.fh2SingleInvPtRecMnGenVsPtGen;
1192 fhnResponseJetTrackPt = o.fhnResponseJetTrackPt;
1193 fhnResponseJetZ = o.fhnResponseJetZ;
1194 fhnResponseJetXi = o.fhnResponseJetXi;
1195 // Background
1196 fh1OutLeadingMult = o.fh1OutLeadingMult;
1197 fh1OutLeadingStatMult = o.fh1OutLeadingStatMult;
1198 fh1PerpMult = o.fh1PerpMult;
1199 fh1ASideMult = o.fh1ASideMult;
1200 fh1ASideWindowMult = o.fh1ASideWindowMult;
1201 fh1PerpWindowMult = o.fh1PerpWindowMult;
1202 fh1Out2JetsMult = o.fh1Out2JetsMult;
1203 fh1Out3JetsMult = o.fh1Out3JetsMult;
1204 fh1MedianClustersMult = o.fh1MedianClustersMult;
1205 fh1OutClustersMult = o.fh1OutClustersMult;
1206 fh1FractionPtEmbedded = o.fh1FractionPtEmbedded;
1207 fh1IndexEmbedded = o.fh1IndexEmbedded;
1208 fh2DeltaPtVsJetPtEmbedded = o.fh2DeltaPtVsJetPtEmbedded;
1209 fh2DeltaPtVsRecJetPtEmbedded = o.fh2DeltaPtVsRecJetPtEmbedded;
1210 fh1DeltaREmbedded = o.fh1DeltaREmbedded;
1211 fh2ptVsDistNN_pt50_rec = o.fh2ptVsDistNN_pt50_rec;
1212 fh2ptVsDistNN_pt50_nonRec = o.fh2ptVsDistNN_pt50_nonRec;
1213 fh2ptVsDistNN_pt10_rec = o.fh2ptVsDistNN_pt10_rec;
1214 fh2ptVsDistNN_pt10_nonRec = o.fh2ptVsDistNN_pt10_nonRec;
1215 fQABckgHisto0RecCuts = o.fQABckgHisto0RecCuts;
1216 fQABckgHisto0Gen = o.fQABckgHisto0Gen;
1217 fQABckgHisto1RecCuts = o.fQABckgHisto1RecCuts;
1218 fQABckgHisto1Gen = o.fQABckgHisto1Gen;
1219 fQABckgHisto2RecCuts = o.fQABckgHisto2RecCuts;
1220 fQABckgHisto2Gen = o.fQABckgHisto2Gen;
1221 fQABckgHisto3RecCuts = o.fQABckgHisto3RecCuts;
1222 fQABckgHisto3Gen = o.fQABckgHisto3Gen;
1223 fQABckgHisto4RecCuts = o.fQABckgHisto4RecCuts;
1224 fQABckgHisto4Gen = o.fQABckgHisto4Gen;
1225 fFFBckgHisto0RecCuts = o.fFFBckgHisto0RecCuts;
1226 fFFBckgHisto0RecLeading = o.fFFBckgHisto0RecLeading;
1227 fFFBckgHisto0Gen = o.fFFBckgHisto0Gen;
1228 fFFBckgHisto0GenLeading = o.fFFBckgHisto0GenLeading;
1229 fFFBckgHisto1RecCuts = o.fFFBckgHisto1RecCuts;
1230 fFFBckgHisto1RecLeading = o.fFFBckgHisto1RecLeading;
1231 fFFBckgHisto1Gen = o.fFFBckgHisto1Gen;
1232 fFFBckgHisto1GenLeading = o.fFFBckgHisto1GenLeading;
1233 fFFBckgHisto2RecCuts = o.fFFBckgHisto2RecCuts;
1234 fFFBckgHisto2RecLeading = o.fFFBckgHisto2RecLeading;
1235 fFFBckgHisto2Gen = o.fFFBckgHisto2Gen;
1236 fFFBckgHisto2GenLeading = o.fFFBckgHisto2GenLeading;
1237 fFFBckgHisto3RecCuts = o.fFFBckgHisto3RecCuts;
1238 fFFBckgHisto3RecLeading = o.fFFBckgHisto3RecLeading;
1239 fFFBckgHisto3Gen = o.fFFBckgHisto3Gen;
1240 fFFBckgHisto3GenLeading = o.fFFBckgHisto3GenLeading;
1241 fFFBckgHisto4RecCuts = o.fFFBckgHisto4RecCuts;
1242 fFFBckgHisto4RecLeading = o.fFFBckgHisto4RecLeading;
1243 fFFBckgHisto4Gen = o.fFFBckgHisto4Gen;
1244 fFFBckgHisto4GenLeading = o.fFFBckgHisto4GenLeading;
1245 fIJBckgHisto0RecCuts = o.fIJBckgHisto0RecCuts;
1246 fIJBckgHisto0RecLeading = o.fIJBckgHisto0RecLeading;
1247 fIJBckgHisto0Gen = o.fIJBckgHisto0Gen;
1248 fIJBckgHisto0GenLeading = o.fIJBckgHisto0GenLeading;
1249 fIJBckgHisto1RecCuts = o.fIJBckgHisto1RecCuts;
1250 fIJBckgHisto1RecLeading = o.fIJBckgHisto1RecLeading;
1251 fIJBckgHisto1Gen = o.fIJBckgHisto1Gen;
1252 fIJBckgHisto1GenLeading = o.fIJBckgHisto1GenLeading;
1253 fIJBckgHisto2RecCuts = o.fIJBckgHisto2RecCuts;
1254 fIJBckgHisto2RecLeading = o.fIJBckgHisto2RecLeading;
1255 fIJBckgHisto2Gen = o.fIJBckgHisto2Gen;
1256 fIJBckgHisto2GenLeading = o.fIJBckgHisto2GenLeading;
1257 fIJBckgHisto3Gen = o.fIJBckgHisto3Gen;
1258 fIJBckgHisto3GenLeading = o.fIJBckgHisto3GenLeading;
1259 fIJBckgHisto4Gen = o.fIJBckgHisto4Gen;
1260 fIJBckgHisto4GenLeading = o.fIJBckgHisto4GenLeading;
1261 fRandom = o.fRandom;
1262 fBckgSubMethod = o.fBckgSubMethod;
1263 }
1264
1265 return *this;
1266}
1267
1268//___________________________________________________________________________
1269AliAnalysisTaskFragmentationFunction::~AliAnalysisTaskFragmentationFunction()
1270{
1271 // destructor
1272
1273 if(fTracksRec) delete fTracksRec;
1274 if(fTracksRecCuts) delete fTracksRecCuts;
1275 if(fTracksGen) delete fTracksGen;
1276 if(fTracksAODMCCharged) delete fTracksAODMCCharged;
1277 if(fTracksAODMCChargedSec) delete fTracksAODMCChargedSec;
1278 if(fTracksRecQualityCuts) delete fTracksRecQualityCuts;
1279 if(fJetsRec) delete fJetsRec;
1280 if(fJetsRecCuts) delete fJetsRecCuts;
1281 if(fJetsGen) delete fJetsGen;
1282 if(fJetsRecEff) delete fJetsRecEff;
1283 if(fJetsEmbedded) delete fJetsEmbedded;
1284
1285 if(fBckgMode &&
1286 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
1287 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
1288 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
1289
1290 if(fBckgJetsRec) delete fBckgJetsRec;
1291 if(fBckgJetsRecCuts) delete fBckgJetsRecCuts;
1292 if(fBckgJetsGen) delete fBckgJetsGen;
1293 }
1294 if(fRandom) delete fRandom;
1295}
1296
1297//______________________________________________________________________________________________________
1298AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AliFragFuncHistos(const char* name,
1299 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
1300 Int_t nPt, Float_t ptMin, Float_t ptMax,
1301 Int_t nXi, Float_t xiMin, Float_t xiMax,
1302 Int_t nZ , Float_t zMin , Float_t zMax )
1303 : TObject()
1304 ,fNBinsJetPt(nJetPt)
1305 ,fJetPtMin(jetPtMin)
1306 ,fJetPtMax(jetPtMax)
1307 ,fNBinsPt(nPt)
1308 ,fPtMin(ptMin)
1309 ,fPtMax(ptMax)
1310 ,fNBinsXi(nXi)
1311 ,fXiMin(xiMin)
1312 ,fXiMax(xiMax)
1313 ,fNBinsZ(nZ)
1314 ,fZMin(zMin)
1315 ,fZMax(zMax)
1316 ,fh2TrackPt(0)
1317 ,fh2Xi(0)
1318 ,fh2Z(0)
1319 ,fh1JetPt(0)
1320 ,fNameFF(name)
1321{
1322 // default constructor
1323
1324}
1325
1326//___________________________________________________________________________
1327AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AliFragFuncHistos(const AliFragFuncHistos& copy)
1328 : TObject()
1329 ,fNBinsJetPt(copy.fNBinsJetPt)
1330 ,fJetPtMin(copy.fJetPtMin)
1331 ,fJetPtMax(copy.fJetPtMax)
1332 ,fNBinsPt(copy.fNBinsPt)
1333 ,fPtMin(copy.fPtMin)
1334 ,fPtMax(copy.fPtMax)
1335 ,fNBinsXi(copy.fNBinsXi)
1336 ,fXiMin(copy.fXiMin)
1337 ,fXiMax(copy.fXiMax)
1338 ,fNBinsZ(copy.fNBinsZ)
1339 ,fZMin(copy.fZMin)
1340 ,fZMax(copy.fZMax)
1341 ,fh2TrackPt(copy.fh2TrackPt)
1342 ,fh2Xi(copy.fh2Xi)
1343 ,fh2Z(copy.fh2Z)
1344 ,fh1JetPt(copy.fh1JetPt)
1345 ,fNameFF(copy.fNameFF)
1346{
1347 // copy constructor
1348}
1349
1350//_______________________________________________________________________________________________________________________________________________________________
1351AliAnalysisTaskFragmentationFunction::AliFragFuncHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncHistos& o)
1352{
1353 // assignment
1354
1355 if(this!=&o){
1356 TObject::operator=(o);
1357 fNBinsJetPt = o.fNBinsJetPt;
1358 fJetPtMin = o.fJetPtMin;
1359 fJetPtMax = o.fJetPtMax;
1360 fNBinsPt = o.fNBinsPt;
1361 fPtMin = o.fPtMin;
1362 fPtMax = o.fPtMax;
1363 fNBinsXi = o.fNBinsXi;
1364 fXiMin = o.fXiMin;
1365 fXiMax = o.fXiMax;
1366 fNBinsZ = o.fNBinsZ;
1367 fZMin = o.fZMin;
1368 fZMax = o.fZMax;
1369 fh2TrackPt = o.fh2TrackPt;
1370 fh2Xi = o.fh2Xi;
1371 fh2Z = o.fh2Z;
1372 fh1JetPt = o.fh1JetPt;
1373 fNameFF = o.fNameFF;
1374 }
1375
1376 return *this;
1377}
1378
1379//_________________________________________________________
1380AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::~AliFragFuncHistos()
1381{
1382 // destructor
1383
1384 if(fh1JetPt) delete fh1JetPt;
1385 if(fh2TrackPt) delete fh2TrackPt;
1386 if(fh2Xi) delete fh2Xi;
1387 if(fh2Z) delete fh2Z;
1388}
1389
1390//_________________________________________________________________
1391void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::DefineHistos()
1392{
1393 // book FF histos
1394
1395 fh1JetPt = new TH1F(Form("fh1FFJetPt%s", fNameFF.Data()),"",fNBinsJetPt,fJetPtMin,fJetPtMax);
1396 fh2TrackPt = new TH2F(Form("fh2FFTrackPt%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,fNBinsPt, fPtMin, fPtMax);
1397 fh2Xi = new TH2F(Form("fh2FFXi%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsXi, fXiMin, fXiMax);
1398 fh2Z = new TH2F(Form("fh2FFZ%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsZ, fZMin, fZMax);
1399
1400 AliAnalysisTaskFragmentationFunction::SetProperties(fh1JetPt, "p_{T} [GeV/c]", "entries");
1401 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPt,"jet p_{T} [GeV/c]","p_{T} [GeV/c]","entries");
1402 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi,"jet p_{T} [GeV/c]","#xi", "entries");
1403 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z,"jet p_{T} [GeV/c]","z","entries");
1404}
1405
1406//_______________________________________________________________________________________________________________
1407void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::FillFF(Float_t trackPt, Float_t jetPt, Bool_t incrementJetPt, Float_t norm)
1408{
1409 // fill FF
1410
1411 if(incrementJetPt && norm) fh1JetPt->Fill(jetPt,1/norm);
1412 else if(incrementJetPt) fh1JetPt->Fill(jetPt);
1413
1414 // Added for proper normalization of FF background estimation
1415 // when zero track are found in the background region
1416 if((int)trackPt==-1) return;
1417
1418 if(norm)fh2TrackPt->Fill(jetPt,trackPt,1/norm);
1419 else fh2TrackPt->Fill(jetPt,trackPt);
1420
1421 Double_t z = 0.;
1422 if(jetPt>0) z = trackPt / jetPt;
1423 Double_t xi = 0;
1424 if(z>0) xi = TMath::Log(1/z);
1425
1426 if(norm){
1427 fh2Xi->Fill(jetPt,xi,1/norm);
1428 fh2Z->Fill(jetPt,z,1/norm);
1429 }
1430 else {
1431 fh2Xi->Fill(jetPt,xi);
1432 fh2Z->Fill(jetPt,z);
1433 }
1434}
1435
1436//_________________________________________________________________________________
1437void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AddToOutput(TList* list) const
1438{
1439 // add histos to list
1440
1441 list->Add(fh1JetPt);
1442
1443 list->Add(fh2TrackPt);
1444 list->Add(fh2Xi);
1445 list->Add(fh2Z);
1446}
1447
1448//_________________________________________________________________________________________________________
1449AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const char* name,
1450 Int_t nPt, Float_t ptMin, Float_t ptMax,
1451 Int_t nEta, Float_t etaMin, Float_t etaMax,
1452 Int_t nPhi, Float_t phiMin, Float_t phiMax)
1453 : TObject()
1454 ,fNBinsPt(nPt)
1455 ,fPtMin(ptMin)
1456 ,fPtMax(ptMax)
1457 ,fNBinsEta(nEta)
1458 ,fEtaMin(etaMin)
1459 ,fEtaMax(etaMax)
1460 ,fNBinsPhi(nPhi)
1461 ,fPhiMin(phiMin)
1462 ,fPhiMax(phiMax)
1463 ,fh2EtaPhi(0)
1464 ,fh1Pt(0)
1465 ,fNameQAJ(name)
1466{
1467 // default constructor
1468}
1469
1470//____________________________________________________________________________________
1471AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const AliFragFuncQAJetHistos& copy)
1472 : TObject()
1473 ,fNBinsPt(copy.fNBinsPt)
1474 ,fPtMin(copy.fPtMin)
1475 ,fPtMax(copy.fPtMax)
1476 ,fNBinsEta(copy.fNBinsEta)
1477 ,fEtaMin(copy.fEtaMin)
1478 ,fEtaMax(copy.fEtaMax)
1479 ,fNBinsPhi(copy.fNBinsPhi)
1480 ,fPhiMin(copy.fPhiMin)
1481 ,fPhiMax(copy.fPhiMax)
1482 ,fh2EtaPhi(copy.fh2EtaPhi)
1483 ,fh1Pt(copy.fh1Pt)
1484 ,fNameQAJ(copy.fNameQAJ)
1485{
1486 // copy constructor
1487}
1488
1489//________________________________________________________________________________________________________________________________________________________________________
1490AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos& o)
1491{
1492 // assignment
1493
1494 if(this!=&o){
1495 TObject::operator=(o);
1496 fNBinsPt = o.fNBinsPt;
1497 fPtMin = o.fPtMin;
1498 fPtMax = o.fPtMax;
1499 fNBinsEta = o.fNBinsEta;
1500 fEtaMin = o.fEtaMin;
1501 fEtaMax = o.fEtaMax;
1502 fNBinsPhi = o.fNBinsPhi;
1503 fPhiMin = o.fPhiMin;
1504 fPhiMax = o.fPhiMax;
1505 fh2EtaPhi = o.fh2EtaPhi;
1506 fh1Pt = o.fh1Pt;
1507 fNameQAJ = o.fNameQAJ;
1508 }
1509
1510 return *this;
1511}
1512
1513//______________________________________________________________
1514AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::~AliFragFuncQAJetHistos()
1515{
1516 // destructor
1517
1518 if(fh2EtaPhi) delete fh2EtaPhi;
1519 if(fh1Pt) delete fh1Pt;
1520}
1521
1522//____________________________________________________________________
1523void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::DefineHistos()
1524{
1525 // book jet QA histos
1526
1527 fh2EtaPhi = new TH2F(Form("fh2JetQAEtaPhi%s", fNameQAJ.Data()), Form("%s: #eta - #phi distribution", fNameQAJ.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1528 fh1Pt = new TH1F(Form("fh1JetQAPt%s", fNameQAJ.Data()), Form("%s: p_{T} distribution", fNameQAJ.Data()), fNBinsPt, fPtMin, fPtMax);
1529
1530 AliAnalysisTaskFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi");
1531 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1532}
1533
1534//____________________________________________________________________________________________________
1535void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::FillJetQA(Float_t eta, Float_t phi, Float_t pt)
1536{
1537 // fill jet QA histos
1538
1539 fh2EtaPhi->Fill( eta, phi);
1540 fh1Pt->Fill( pt );
1541}
1542
1543//____________________________________________________________________________________
1544void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AddToOutput(TList* list) const
1545{
1546 // add histos to list
1547
1548 list->Add(fh2EtaPhi);
1549 list->Add(fh1Pt);
1550}
1551
1552//___________________________________________________________________________________________________________
1553AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const char* name,
1554 Int_t nPt, Float_t ptMin, Float_t ptMax,
1555 Int_t nEta, Float_t etaMin, Float_t etaMax,
1556 Int_t nPhi, Float_t phiMin, Float_t phiMax,
1557 Float_t ptThresh)
1558 : TObject()
1559 ,fNBinsPt(nPt)
1560 ,fPtMin(ptMin)
1561 ,fPtMax(ptMax)
1562 ,fNBinsEta(nEta)
1563 ,fEtaMin(etaMin)
1564 ,fEtaMax(etaMax)
1565 ,fNBinsPhi(nPhi)
1566 ,fPhiMin(phiMin)
1567 ,fPhiMax(phiMax)
1568 ,fHighPtThreshold(ptThresh)
1569 ,fh2EtaPhi(0)
1570 ,fh1Pt(0)
1571 ,fh2HighPtEtaPhi(0)
1572 ,fh2PhiPt(0)
1573 ,fNameQAT(name)
1574{
1575 // default constructor
1576}
1577
1578//__________________________________________________________________________________________
1579AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const AliFragFuncQATrackHistos& copy)
1580 : TObject()
1581 ,fNBinsPt(copy.fNBinsPt)
1582 ,fPtMin(copy.fPtMin)
1583 ,fPtMax(copy.fPtMax)
1584 ,fNBinsEta(copy.fNBinsEta)
1585 ,fEtaMin(copy.fEtaMin)
1586 ,fEtaMax(copy.fEtaMax)
1587 ,fNBinsPhi(copy.fNBinsPhi)
1588 ,fPhiMin(copy.fPhiMin)
1589 ,fPhiMax(copy.fPhiMax)
1590 ,fHighPtThreshold(copy.fHighPtThreshold)
1591 ,fh2EtaPhi(copy.fh2EtaPhi)
1592 ,fh1Pt(copy.fh1Pt)
1593 ,fh2HighPtEtaPhi(copy.fh2HighPtEtaPhi)
1594 ,fh2PhiPt(copy.fh2PhiPt)
1595 ,fNameQAT(copy.fNameQAT)
1596{
1597 // copy constructor
1598}
1599
1600// _____________________________________________________________________________________________________________________________________________________________________________
1601AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos& o)
1602{
1603 // assignment
1604
1605 if(this!=&o){
1606 TObject::operator=(o);
1607 fNBinsPt = o.fNBinsPt;
1608 fPtMin = o.fPtMin;
1609 fPtMax = o.fPtMax;
1610 fNBinsEta = o.fNBinsEta;
1611 fEtaMin = o.fEtaMin;
1612 fEtaMax = o.fEtaMax;
1613 fNBinsPhi = o.fNBinsPhi;
1614 fPhiMin = o.fPhiMin;
1615 fPhiMax = o.fPhiMax;
1616 fHighPtThreshold = o.fHighPtThreshold;
1617 fh2EtaPhi = o.fh2EtaPhi;
1618 fh1Pt = o.fh1Pt;
1619 fh2HighPtEtaPhi = o.fh2HighPtEtaPhi;
1620 fh2PhiPt = o.fh2PhiPt;
1621 fNameQAT = o.fNameQAT;
1622 }
1623
1624 return *this;
1625}
1626
1627//___________________________________________________________________
1628AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::~AliFragFuncQATrackHistos()
1629{
1630 // destructor
1631
1632 if(fh2EtaPhi) delete fh2EtaPhi;
1633 if(fh2HighPtEtaPhi) delete fh2HighPtEtaPhi;
1634 if(fh1Pt) delete fh1Pt;
1635 if(fh2PhiPt) delete fh2PhiPt;
1636}
1637
1638//______________________________________________________________________
1639void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::DefineHistos()
1640{
1641 // book track QA histos
1642
1643 fh2EtaPhi = new TH2F(Form("fh2TrackQAEtaPhi%s", fNameQAT.Data()), Form("%s: #eta - #phi distribution", fNameQAT.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1644 fh2HighPtEtaPhi = new TH2F(Form("fh2TrackQAHighPtEtaPhi%s", fNameQAT.Data()), Form("%s: #eta - #phi distribution for high-p_{T}", fNameQAT.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1645 fh1Pt = new TH1F(Form("fh1TrackQAPt%s", fNameQAT.Data()), Form("%s: p_{T} distribution", fNameQAT.Data()), fNBinsPt, fPtMin, fPtMax);
1646 fh2PhiPt = new TH2F(Form("fh2TrackQAPhiPt%s", fNameQAT.Data()), Form("%s: #phi - p_{T} distribution", fNameQAT.Data()), fNBinsPhi, fPhiMin, fPhiMax, fNBinsPt, fPtMin, fPtMax);
1647
1648 AliAnalysisTaskFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi");
1649 AliAnalysisTaskFragmentationFunction::SetProperties(fh2HighPtEtaPhi, "#eta", "#phi");
1650 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1651 AliAnalysisTaskFragmentationFunction::SetProperties(fh2PhiPt, "#phi", "p_{T} [GeV/c]");
1652}
1653
1654//________________________________________________________________________________________________________
1655void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::FillTrackQA(Float_t eta, Float_t phi, Float_t pt, Bool_t weightPt, Float_t norm)
1656{
1657 // fill track QA histos
1658 Float_t weight = 1.;
1659 if(weightPt) weight = pt;
1660 fh2EtaPhi->Fill( eta, phi, weight);
1661 if(pt > fHighPtThreshold) fh2HighPtEtaPhi->Fill( eta, phi, weight);
1662 if(norm) fh1Pt->Fill( pt, 1/norm );
1663 else fh1Pt->Fill( pt );
1664 fh2PhiPt->Fill(phi, pt);
1665}
1666
1667//______________________________________________________________________________________
1668void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AddToOutput(TList* list) const
1669{
1670 // add histos to list
1671
1672 list->Add(fh2EtaPhi);
1673 list->Add(fh2HighPtEtaPhi);
1674 list->Add(fh1Pt);
1675 list->Add(fh2PhiPt);
1676}
1677
1678//______________________________________________________________________________________________________
1679AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::AliFragFuncIntraJetHistos(const char* name,
1680 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
1681 Int_t nPt, Float_t ptMin, Float_t ptMax,
1682 Int_t nZ , Float_t zMin , Float_t zMax,
1683 Int_t nCosTheta , Float_t costhetaMin , Float_t costhetaMax,
1684 Int_t nTheta , Float_t thetaMin , Float_t thetaMax,
1685 Int_t nJt , Float_t jtMin , Float_t jtMax)
1686 : TObject()
1687 ,fNBinsJetPt(nJetPt)
1688 ,fJetPtMin(jetPtMin)
1689 ,fJetPtMax(jetPtMax)
1690 ,fNBinsPt(nPt)
1691 ,fPtMin(ptMin)
1692 ,fPtMax(ptMax)
1693 ,fNBinsZ(nZ)
1694 ,fZMin(zMin)
1695 ,fZMax(zMax)
1696 ,fNBinsJt(nJt)
1697 ,fJtMin(jtMin)
1698 ,fJtMax(jtMax)
1699 ,fNBinsTheta(nTheta)
1700 ,fThetaMin(thetaMin)
1701 ,fThetaMax(thetaMax)
1702 ,fNBinsCosTheta(nCosTheta)
1703 ,fCosThetaMin(costhetaMin)
1704 ,fCosThetaMax(costhetaMax)
1705 ,fh2CosTheta(0)
1706 ,fh2PtZ(0)
1707 ,fh3ThetaZ(0)
1708 ,fh3JtTheta(0)
1709 ,fh3JtZ(0)
1710 ,fNameIJ(name)
1711{
1712 // default constructor
1713
1714}
1715
1716//___________________________________________________________________________
1717AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::AliFragFuncIntraJetHistos(const AliFragFuncIntraJetHistos& copy)
1718 : TObject()
1719 ,fNBinsJetPt(copy.fNBinsJetPt)
1720 ,fJetPtMin(copy.fJetPtMin)
1721 ,fJetPtMax(copy.fJetPtMax)
1722 ,fNBinsPt(copy.fNBinsPt)
1723 ,fPtMin(copy.fPtMin)
1724 ,fPtMax(copy.fPtMax)
1725 ,fNBinsZ(copy.fNBinsZ)
1726 ,fZMin(copy.fZMin)
1727 ,fZMax(copy.fZMax)
1728 ,fNBinsJt(copy.fNBinsJt)
1729 ,fJtMin(copy.fJtMin)
1730 ,fJtMax(copy.fJtMax)
1731 ,fNBinsTheta(copy.fNBinsTheta)
1732 ,fThetaMin(copy.fThetaMin)
1733 ,fThetaMax(copy.fThetaMax)
1734 ,fNBinsCosTheta(copy.fNBinsCosTheta)
1735 ,fCosThetaMin(copy.fCosThetaMin)
1736 ,fCosThetaMax(copy.fCosThetaMax)
1737 ,fh2CosTheta(copy.fh2CosTheta)
1738 ,fh2PtZ(copy.fh2PtZ)
1739 ,fh3ThetaZ(copy.fh3ThetaZ)
1740 ,fh3JtTheta(copy.fh3JtTheta)
1741 ,fh3JtZ(copy.fh3JtZ)
1742 ,fNameIJ(copy.fNameIJ)
1743{
1744 // copy constructor
1745}
1746
1747//_______________________________________________________________________________________________________________________________________________________________
1748AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos& o)
1749{
1750 // assignment
1751
1752 if(this!=&o){
1753 TObject::operator=(o);
1754 fNBinsJetPt = o.fNBinsJetPt;
1755 fJetPtMin = o.fJetPtMin;
1756 fJetPtMax = o.fJetPtMax;
1757 fNBinsPt = o.fNBinsPt;
1758 fPtMin = o.fPtMin;
1759 fPtMax = o.fPtMax;
1760 fNBinsZ = o.fNBinsZ;
1761 fZMin = o.fZMin;
1762 fZMax = o.fZMax;
1763 fNBinsJt = o.fNBinsJt;
1764 fJtMin = o.fJtMin;
1765 fJtMax = o.fJtMax;
1766 fNBinsTheta = o.fNBinsTheta;
1767 fThetaMin = o.fThetaMin;
1768 fThetaMax = o.fThetaMax;
1769 fNBinsCosTheta = o.fNBinsCosTheta;
1770 fCosThetaMin = o.fCosThetaMin;
1771 fCosThetaMax = o.fCosThetaMax;
1772 fh2CosTheta = o.fh2CosTheta;
1773 fh2PtZ = o.fh2PtZ;
1774 fh3ThetaZ = o.fh3ThetaZ;
1775 fh3JtTheta = o.fh3JtTheta;
1776 fh3JtZ = o.fh3JtZ;
1777 fNameIJ = o.fNameIJ;
1778 }
1779
1780 return *this;
1781}
1782
1783//_________________________________________________________
1784AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::~AliFragFuncIntraJetHistos()
1785{
1786 // destructor
1787
1788
1789 if(fh2CosTheta) delete fh2CosTheta;
1790 if(fh2PtZ) delete fh2PtZ;
1791 if(fh3ThetaZ) delete fh3ThetaZ;
1792 if(fh3JtTheta) delete fh3JtTheta;
1793 if(fh3JtZ) delete fh3JtZ;
1794
1795}
1796
1797//_________________________________________________________________
1798void AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::DefineHistos()
1799{
1800 // book FF histos
1801
1802 fh2CosTheta = new TH2F(Form("fh2IJcosTheta%s",fNameIJ.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,fNBinsCosTheta, fCosThetaMin, fCosThetaMax);
1803 fh2PtZ = new TH2F(Form("fh2IJPtZ%s",fNameIJ.Data()),"",fNBinsPt, fPtMin, fPtMax, fNBinsZ, fZMin, fZMax);
1804 fh3ThetaZ = new TH3F(Form("fh3IJThetaZ%s",fNameIJ.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsTheta, fThetaMin, fThetaMax, fNBinsZ, fZMin, fZMax);
1805 fh3JtTheta = new TH3F(Form("fh3IJJtTheta%s",fNameIJ.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsJt, fJtMin, fJtMax, fNBinsTheta, fThetaMin, fThetaMax);
1806 fh3JtZ = new TH3F(Form("fh3IJJtZ%s",fNameIJ.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsJt, fJtMin, fJtMax, fNBinsZ, fZMin, fZMax);
1807
1808 AliAnalysisTaskFragmentationFunction::SetProperties(fh2CosTheta,"jet p_{T} [GeV/c]","cos(#Theta)", "entries");
1809 AliAnalysisTaskFragmentationFunction::SetProperties(fh2PtZ,"had p_{T} [GeV/c]","z=p_{T}^{had}/p_{T}^{jet}","entries");
1810 AliAnalysisTaskFragmentationFunction::SetProperties(fh3ThetaZ,"jet p_{T} [GeV/c]","#Theta [rad]","z=p_{T}^{had}/p_{T}^{jet}");
1811 AliAnalysisTaskFragmentationFunction::SetProperties(fh3JtTheta,"jet p_{T} [GeV/c]","j_{T} [GeV/c]","#Theta [rad]");
1812 AliAnalysisTaskFragmentationFunction::SetProperties(fh3JtZ,"jet p_{T} [GeV/c]","j_{T} [GeV/c]","z=p_{T}^{had}/p_{T}^{jet}");
1813
1814}
1815
1816//_______________________________________________________________________________________________________________
1817void AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::FillIntraJet(const TLorentzVector* trackV, const TLorentzVector* jetV, Float_t norm)
1818{
1819 // fill IntraJet histos
1820
1821 Float_t cosTheta = 0.; Float_t theta = 0.;
1822 Float_t jt = 0.; Float_t z = 0.;
1823 // For Theta distribution
1824 Float_t pxT = trackV->Px();
1825 Float_t pyT = trackV->Py();
1826 Float_t pzT = trackV->Pz();
1827 Float_t ptT = trackV->Pt();
1828 Float_t pT = trackV->P();
1829 Float_t etaT = trackV->Eta();
1830 Float_t phiT = trackV->Phi(); // Check the value returned
1831 Float_t pxJ = jetV->Px();
1832 Float_t pyJ = jetV->Py();
1833 Float_t pzJ = jetV->Pz();
1834 Float_t ptJ = jetV->Pt();
1835 Float_t pJ = jetV->P();
1836
1837 // Compute z
1838 if(ptJ>0) z = (Float_t)(ptT/ptJ);
1839
1840 // Compute theta
1841 cosTheta = (pxT*pxJ+pyT*pyJ+pzT*pzJ)/(pT*pJ);
1842 theta = TMath::ACos(cosTheta);
1843
1844 // Compute jt
1845 TVector3 trackP; TVector3 jetP;
1846 jetP[0] = pxJ;
1847 jetP[1] = pyJ;
1848 jetP[2] = pzJ;
1849 trackP.SetPtEtaPhi(ptT,etaT,phiT);
1850 jt = TMath::Sin(trackP.Angle(jetP))*trackP.Mag();
1851
1852 // Fill histos
1853 if(norm){
1854 fh2CosTheta->Fill(ptJ,cosTheta,1/norm);
1855 fh2PtZ->Fill(ptT,z,1/norm);
1856 fh3ThetaZ->Fill(ptJ,theta,z,1/norm);
1857 fh3JtTheta->Fill(ptJ,jt,theta,1/norm);
1858 fh3JtZ->Fill(ptJ,jt,z,1/norm);
1859 }
1860 else {
1861 fh2CosTheta->Fill(ptJ,cosTheta);
1862 fh2PtZ->Fill(ptT,z);
1863 fh3ThetaZ->Fill(ptJ,theta,z);
1864 fh3JtTheta->Fill(ptJ,jt,theta);
1865 fh3JtZ->Fill(ptJ,jt,z);
1866 }
1867
1868}
1869
1870//______________________________________________________________________________________________________
1871AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::AliFragFuncDiJetHistos(const char* name, Int_t kindSlices,
1872 Int_t nJetInvMass, Float_t jetInvMassMin, Float_t jetInvMassMax,
1873 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
1874 Int_t nPt, Float_t ptMin, Float_t ptMax,
1875 Int_t nXi, Float_t xiMin, Float_t xiMax,
1876 Int_t nZ , Float_t zMin , Float_t zMax)
1877 : TObject()
1878 ,fKindSlices(kindSlices)
1879 ,fNBinsJetInvMass(nJetInvMass)
1880 ,fJetInvMassMin(jetInvMassMin)
1881 ,fJetInvMassMax(jetInvMassMax)
1882 ,fNBinsJetPt(nJetPt)
1883 ,fJetPtMin(jetPtMin)
1884 ,fJetPtMax(jetPtMax)
1885 ,fNBinsPt(nPt)
1886 ,fPtMin(ptMin)
1887 ,fPtMax(ptMax)
1888 ,fNBinsXi(nXi)
1889 ,fXiMin(xiMin)
1890 ,fXiMax(xiMax)
1891 ,fNBinsZ(nZ)
1892 ,fZMin(zMin)
1893 ,fZMax(zMax)
1894 ,fh2TrackPtJet1(0)
1895 ,fh2TrackPtJet2(0)
1896 ,fh2TrackPtJet(0)
1897 ,fh1Jet1Pt(0)
1898 ,fh1Jet2Pt(0)
1899 ,fh1JetPt(0)
1900 ,fh2Xi1(0)
1901 ,fh2Xi2(0)
1902 ,fh2Xi(0)
1903 ,fh2Z1(0)
1904 ,fh2Z2(0)
1905 ,fh2Z(0)
1906 ,fh2Pt1(0)
1907 ,fh2Pt2(0)
1908 ,fh2Pt(0)
1909 ,fNameDJ(name)
1910{
1911 // default constructor
1912
1913}
1914
1915//______________________________________________________________________________________________________
1916AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::AliFragFuncDiJetHistos(const AliFragFuncDiJetHistos& copy)
1917 : TObject()
1918 ,fKindSlices(copy.fKindSlices)
1919 ,fNBinsJetInvMass(copy.fNBinsJetInvMass)
1920 ,fJetInvMassMin(copy.fJetInvMassMin)
1921 ,fJetInvMassMax(copy.fJetInvMassMax)
1922 ,fNBinsJetPt(copy.fNBinsJetPt)
1923 ,fJetPtMin(copy.fJetPtMin)
1924 ,fJetPtMax(copy.fJetPtMax)
1925 ,fNBinsPt(copy.fNBinsPt)
1926 ,fPtMin(copy.fPtMin)
1927 ,fPtMax(copy.fPtMax)
1928 ,fNBinsXi(copy.fNBinsXi)
1929 ,fXiMin(copy.fXiMin)
1930 ,fXiMax(copy.fXiMax)
1931 ,fNBinsZ(copy.fNBinsZ)
1932 ,fZMin(copy.fZMin)
1933 ,fZMax(copy.fZMax)
1934 ,fh2TrackPtJet1(copy.fh2TrackPtJet1)
1935 ,fh2TrackPtJet2(copy.fh2TrackPtJet2)
1936 ,fh2TrackPtJet(copy.fh2TrackPtJet)
1937 ,fh1Jet1Pt(copy.fh1Jet1Pt)
1938 ,fh1Jet2Pt(copy.fh1Jet2Pt)
1939 ,fh1JetPt(copy.fh1JetPt)
1940 ,fh2Xi1(copy.fh2Xi1)
1941 ,fh2Xi2(copy.fh2Xi2)
1942 ,fh2Xi(copy.fh2Xi2)
1943 ,fh2Z1(copy.fh2Z1)
1944 ,fh2Z2(copy.fh2Z2)
1945 ,fh2Z(copy.fh2Z)
1946 ,fh2Pt1(copy.fh2Pt1)
1947 ,fh2Pt2(copy.fh2Pt2)
1948 ,fh2Pt(copy.fh2Pt)
1949 ,fNameDJ(copy.fNameDJ)
1950{
1951 // default constructor
1952
1953}
1954
1955//_______________________________________________________________________________________________________________________________________________________________
1956AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos& o)
1957{
1958 // assignment
1959
1960 if(this!=&o){
1961 TObject::operator=(o);
1962 fKindSlices = o.fKindSlices;
1963 fNBinsJetInvMass = o.fNBinsJetInvMass;
1964 fJetInvMassMin = o.fJetInvMassMin;
1965 fJetInvMassMax = o.fJetInvMassMax;
1966 fNBinsJetPt = o.fNBinsJetPt;
1967 fJetPtMin = o.fJetPtMin;
1968 fJetPtMax = o.fJetPtMax;
1969 fNBinsPt = o.fNBinsPt;
1970 fPtMin = o.fPtMin;
1971 fPtMax = o.fPtMax;
1972 fNBinsXi = o.fNBinsXi;
1973 fXiMin = o.fXiMin;
1974 fXiMax = o.fXiMax;
1975 fNBinsZ = o.fNBinsZ;
1976 fZMin = o.fZMin;
1977 fZMax = o.fZMax;
1978 fh2TrackPtJet1 = o.fh2TrackPtJet1;
1979 fh2TrackPtJet2 = o.fh2TrackPtJet2;
1980 fh2TrackPtJet = o.fh2TrackPtJet;
1981 fh1Jet1Pt = o.fh1Jet1Pt;
1982 fh1Jet2Pt = o.fh1Jet2Pt;
1983 fh1JetPt = o.fh1JetPt;
1984 fh2Xi1 = o.fh2Xi1;
1985 fh2Xi2 = o.fh2Xi2;
1986 fh2Xi = o.fh2Xi;
1987 fh2Z1 = o.fh2Z1;
1988 fh2Z2 = o.fh2Z2;
1989 fh2Z = o.fh2Z;
1990 fh2Pt1 = o.fh2Pt1;
1991 fh2Pt2 = o.fh2Pt2;
1992 fh2Pt = o.fh2Pt;
1993 fNameDJ = o.fNameDJ;
1994 }
1995
1996 return *this;
1997}
1998
1999//_________________________________________________________
2000AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::~AliFragFuncDiJetHistos()
2001{
2002 // destructor
2003
2004 if(fh2TrackPtJet1) delete fh2TrackPtJet1;
2005 if(fh2TrackPtJet2) delete fh2TrackPtJet2;
2006 if(fh2TrackPtJet ) delete fh2TrackPtJet;
2007 if(fh1Jet1Pt) delete fh1Jet1Pt;
2008 if(fh1Jet2Pt) delete fh1Jet2Pt;
2009 if(fh1JetPt) delete fh1JetPt;
2010 if(fh2Xi1) delete fh2Xi1;
2011 if(fh2Xi2) delete fh2Xi2;
2012 if(fh2Xi) delete fh2Xi;
2013 if(fh2Z1) delete fh2Z1;
2014 if(fh2Z2) delete fh2Z2;
2015 if(fh2Z) delete fh2Z;
2016 if(fh2Pt1) delete fh2Pt1;
2017 if(fh2Pt2) delete fh2Pt2;
2018 if(fh2Pt) delete fh2Pt;
2019}
2020
2021//________________________________________________________________________
2022void AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::DefineDiJetHistos()
2023{
2024 // book DiJet histos
2025
2026 Int_t nBins = 0;
2027 Double_t min = 0.;
2028 Double_t max = 0.;
2029 const char *xaxis = "";
2030 if(fKindSlices == 1)
2031 {
2032 nBins = fNBinsJetInvMass;
2033 min = fJetInvMassMin;
2034 max = fJetInvMassMax;
2035 xaxis = "M_{JJ} [GeV]";
2036 }
2037 if(fKindSlices == 2 || fKindSlices == 3)
2038 {
2039 nBins = fNBinsJetPt;
2040 min = fJetPtMin;
2041 max = fJetPtMax;
2042 if(fKindSlices == 2) xaxis = "E_{Tmean} [GeV]";
2043 if(fKindSlices == 3) xaxis ="leading jet p_{T} [GeV/c]";
2044 }
2045
2046 fh1Jet1Pt = new TH1F(Form("fh1DJJet1Pt%s", fNameDJ.Data()), "", fNBinsJetPt, fJetPtMin, fJetPtMax);
2047 fh1Jet2Pt = new TH1F(Form("fh1DJJet2Pt%s", fNameDJ.Data()), "", fNBinsJetPt, fJetPtMin, fJetPtMax);
2048 fh1JetPt = new TH1F(Form("fh1DJJetPt%s", fNameDJ.Data()), "", fNBinsJetPt, fJetPtMin, fJetPtMax);
2049
2050 fh2TrackPtJet1 = new TH2F(Form("fh2DJTrackPtJet1%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
2051 fh2TrackPtJet2 = new TH2F(Form("fh2DJTrackPtJet2%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
2052 fh2TrackPtJet = new TH2F(Form("fh2DJTrackPtJet%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
2053
2054 fh2Xi1 = new TH2F(Form("fh2DJXi1%s", fNameDJ.Data()), "",nBins, min, max, fNBinsXi, fXiMin, fXiMax);
2055 fh2Xi2 = new TH2F(Form("fh2DJXi2%s", fNameDJ.Data()), "",nBins, min, max, fNBinsXi, fXiMin, fXiMax);
2056 fh2Xi = new TH2F(Form("fh2DJXi%s", fNameDJ.Data()), "",nBins, min, max, fNBinsXi, fXiMin, fXiMax);
2057
2058 fh2Z1 = new TH2F(Form("fh2DJZ1%s", fNameDJ.Data()), "",nBins, min, max, fNBinsZ, fZMin, fZMax);
2059 fh2Z2 = new TH2F(Form("fh2DJZ2%s", fNameDJ.Data()), "",nBins, min, max, fNBinsZ, fZMin, fZMax);
2060 fh2Z = new TH2F(Form("fh2DJZ%s", fNameDJ.Data()), "",nBins, min, max, fNBinsZ, fZMin, fZMax);
2061
2062 fh2Pt1 = new TH2F(Form("fh2DJPt1%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
2063 fh2Pt2 = new TH2F(Form("fh2DJPt2%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
2064 fh2Pt = new TH2F(Form("fh2DJPtZ%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
2065
2066 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Jet1Pt, "p_{T} [GeV/c]", "entries");
2067 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Jet2Pt, "p_{T} [GeV/c]", "entries");
2068 AliAnalysisTaskFragmentationFunction::SetProperties(fh1JetPt, "p_{T} [GeV/c]", "entries");
2069
2070 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPtJet1, xaxis, "p_{T} [GeV/c]", "Entries");
2071 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPtJet2, xaxis, "p_{T} [GeV/c]", "Entries");
2072 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPtJet, xaxis, "p_{T} [GeV/c]", "Entries");
2073 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi1, xaxis, "#xi", "Entries");
2074 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi2, xaxis, "#xi", "Entries");
2075 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi, xaxis, "#xi", "Entries");
2076 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z1, xaxis, "z", "Entries");
2077 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z2, xaxis, "z", "Entries");
2078 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z, xaxis, "z", "Entries");
2079 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Pt1, xaxis, "p_{T} [GeV/c]", "Entries");
2080 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Pt2, xaxis, "p_{T} [GeV/c]", "Entries");
2081 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Pt, xaxis, "p_{T} [GeV/c]", "Entries");
2082}
2083
2084//________________________________________________________________________
2085void AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::FillDiJetFF(Int_t jetType, Float_t trackPt, Float_t jetPt, Double_t jetBin, Bool_t incrementJetPt)
2086{
2087 // fill DiJet FF
2088
2089 if(jetType == 0)
2090 {
2091 if(incrementJetPt) fh1JetPt->Fill(jetPt);
2092
2093 fh2TrackPtJet->Fill(jetBin, trackPt);
2094
2095 Double_t z = trackPt / jetPt;
2096 Double_t xi = 0;
2097 if(z>0) xi = TMath::Log(1/z);
2098
2099 fh2Xi->Fill(jetBin, xi);
2100 fh2Z->Fill(jetBin, z);
2101 }
2102 if(jetType == 1)
2103 {
2104 if(incrementJetPt) fh1Jet1Pt->Fill(jetPt);
2105
2106 fh2TrackPtJet1->Fill(jetBin, trackPt);
2107
2108 Double_t z = trackPt / jetPt;
2109 Double_t xi = 0;
2110 if(z>0) xi = TMath::Log(1/z);
2111
2112 fh2Xi1->Fill(jetBin, xi);
2113 fh2Z1->Fill(jetBin, z);
2114 }
2115 if(jetType == 2)
2116 {
2117 if(incrementJetPt) fh1Jet2Pt->Fill(jetPt);
2118
2119 fh2TrackPtJet2->Fill(jetBin, trackPt);
2120
2121 Double_t z = trackPt / jetPt;
2122 Double_t xi = 0;
2123 if(z>0) xi = TMath::Log(1/z);
2124
2125 fh2Xi2->Fill(jetBin, xi);
2126 fh2Z2->Fill(jetBin, z);
2127 }
2128
2129
2130}
2131
2132//________________________________________________________________________
2133void AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::AddToOutput(TList* list)const
2134{
2135 // add histos to list
2136
2137 list->Add(fh1Jet1Pt);
2138 list->Add(fh1Jet2Pt);
2139 list->Add(fh1JetPt);
2140 list->Add(fh2TrackPtJet1);
2141 list->Add(fh2TrackPtJet2);
2142 list->Add(fh2TrackPtJet);
2143 list->Add(fh2Xi1);
2144 list->Add(fh2Xi2);
2145 list->Add(fh2Xi);
2146 list->Add(fh2Z1);
2147 list->Add(fh2Z2);
2148 list->Add(fh2Z);
2149}
2150
2151//______________________________________________________________________________________________________
2152AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::AliFragFuncQADiJetHistos(const char* name, Int_t kindSlices,
2153 Int_t nInvMass, Float_t invMassMin, Float_t invMassMax,
2154 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
2155 Int_t nDeltaPhi, Float_t deltaPhiMin, Float_t deltaPhiMax,
2156 Int_t nDeltaEta, Float_t deltaEtaMin, Float_t deltaEtaMax,
2157 Int_t nDeltaPt, Float_t deltaPtMin, Float_t deltaPtMax,
2158 Int_t nInBal, Float_t inBalMin, Float_t inBalMax)
2159 : TObject()
2160 ,fKindSlices(kindSlices)
2161 ,fNBinsJetInvMass(nInvMass)
2162 ,fJetInvMassMin(invMassMin)
2163 ,fJetInvMassMax(invMassMax)
2164 ,fNBinsJetPt(nJetPt)
2165 ,fJetPtMin(jetPtMin)
2166 ,fJetPtMax(jetPtMax)
2167 ,fNBinsDeltaPhi(nDeltaPhi)
2168 ,fDeltaPhiMin(deltaPhiMin)
2169 ,fDeltaPhiMax(deltaPhiMax)
2170 ,fNBinsDeltaEta(nDeltaEta)
2171 ,fDeltaEtaMin(deltaEtaMin)
2172 ,fDeltaEtaMax(deltaEtaMax)
2173 ,fNBinsDeltaPt(nDeltaPt)
2174 ,fDeltaPtMin(deltaPtMin)
2175 ,fDeltaPtMax(deltaPtMax)
2176 ,fNBinsInBal(nInBal)
2177 ,fInBalMin(inBalMin)
2178 ,fInBalMax(inBalMax)
2179 ,fh2InvMass(0)
2180 ,fh2DeltaPhi(0)
2181 ,fh2DeltaEta(0)
2182 ,fh2DeltaPt(0)
2183 ,fh2InBal(0)
2184 ,fNameQADJ(name)
2185{
2186 // default constructor
2187
2188}
2189
2190//______________________________________________________________________________________________________
2191AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::AliFragFuncQADiJetHistos(const AliFragFuncQADiJetHistos& copy)
2192 : TObject()
2193 ,fKindSlices(copy.fKindSlices)
2194 ,fNBinsJetInvMass(copy.fNBinsJetInvMass)
2195 ,fJetInvMassMin(copy.fJetInvMassMin)
2196 ,fJetInvMassMax(copy.fJetInvMassMax)
2197 ,fNBinsJetPt(copy.fNBinsJetPt)
2198 ,fJetPtMin(copy.fJetPtMin)
2199 ,fJetPtMax(copy.fJetPtMax)
2200 ,fNBinsDeltaPhi(copy.fNBinsDeltaPhi)
2201 ,fDeltaPhiMin(copy.fDeltaPhiMin)
2202 ,fDeltaPhiMax(copy.fDeltaPhiMax)
2203 ,fNBinsDeltaEta(copy.fNBinsDeltaEta)
2204 ,fDeltaEtaMin(copy.fDeltaEtaMin)
2205 ,fDeltaEtaMax(copy.fDeltaEtaMax)
2206 ,fNBinsDeltaPt(copy.fNBinsDeltaPt)
2207 ,fDeltaPtMin(copy.fDeltaPtMin)
2208 ,fDeltaPtMax(copy.fDeltaPtMax)
2209 ,fNBinsInBal(copy.fNBinsInBal)
2210 ,fInBalMin(copy.fInBalMin)
2211 ,fInBalMax(copy.fInBalMax)
2212 ,fh2InvMass(copy.fh2InvMass)
2213 ,fh2DeltaPhi(copy.fh2DeltaPhi)
2214 ,fh2DeltaEta(copy.fh2DeltaEta)
2215 ,fh2DeltaPt(copy.fh2DeltaPt)
2216 ,fh2InBal(copy.fh2InBal)
2217 ,fNameQADJ(copy.fNameQADJ)
2218{
2219 // default constructor
2220
2221}
2222
2223//_______________________________________________________________________________________________________________________________________________________________
2224AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos& o)
2225{
2226 // assignment
2227
2228 if(this!=&o){
2229 TObject::operator=(o);
2230 fKindSlices = o.fKindSlices;
2231 fNBinsJetInvMass = o.fNBinsJetInvMass;
2232 fJetInvMassMin = o.fJetInvMassMin;
2233 fJetInvMassMax = o.fJetInvMassMax;
2234 fNBinsJetPt = o.fNBinsJetPt;
2235 fJetPtMin = o.fJetPtMin;
2236 fJetPtMax = o.fJetPtMax;
2237 fNBinsDeltaPhi = o.fNBinsDeltaPhi;
2238 fDeltaPhiMin = o.fDeltaPhiMin;
2239 fDeltaPhiMax = o.fDeltaPhiMax;
2240 fNBinsDeltaEta = o.fNBinsDeltaEta;
2241 fDeltaEtaMin = o.fDeltaEtaMin;
2242 fDeltaEtaMax = o.fDeltaEtaMax;
2243 fNBinsDeltaPt = o.fNBinsDeltaPt;
2244 fDeltaPtMin = o.fDeltaPtMin;
2245 fDeltaPtMax = o.fDeltaPtMax;
2246 fNBinsInBal = o.fNBinsInBal;
2247 fInBalMin = o.fInBalMin;
2248 fInBalMax = o.fInBalMax;
2249 fh2InvMass = o.fh2InvMass;
2250 fh2DeltaPhi = o.fh2DeltaPhi;
2251 fh2DeltaEta = o.fh2DeltaEta;
2252 fh2DeltaPt = o.fh2DeltaPt;
2253 fh2InBal = o.fh2InBal;
2254 fNameQADJ = o.fNameQADJ;
2255 }
2256
2257 return *this;
2258}
2259
2260//_________________________________________________________
2261AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::~AliFragFuncQADiJetHistos()
2262{
2263 // destructor
2264
2265 if(fh2InvMass) delete fh2InvMass;
2266 if(fh2DeltaPhi) delete fh2DeltaPhi;
2267 if(fh2DeltaEta) delete fh2DeltaEta;
2268 if(fh2DeltaPt) delete fh2DeltaPt;
2269 if(fh2InBal) delete fh2InBal;
2270}
2271
2272//________________________________________________________________________
2273void AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::DefineQADiJetHistos()
2274{
2275 // define histos
2276
2277 Int_t nBins = 0;
2278 Double_t min = 0.;
2279 Double_t max = 0.;
2280 const char *xaxis = "";
2281 if(fKindSlices == 1)
2282 {
2283 nBins = fNBinsJetInvMass;
2284 min = fJetInvMassMin;
2285 max = fJetInvMassMax;
2286 xaxis = "M_{JJ} [GeV]";
2287 }
2288 if(fKindSlices == 2 || fKindSlices == 3)
2289 {
2290 nBins = fNBinsJetPt;
2291 min = fJetPtMin;
2292 max = fJetPtMax;
2293 if(fKindSlices == 2) xaxis = "E_{Tmean} [GeV]";
2294 if(fKindSlices == 3) xaxis ="leading jet p_{T} [GeV/c]";
2295 }
2296
2297
2298 fh2InvMass = new TH2F(Form("fh2DJInvMassPositionCut%s", fNameQADJ.Data()), "",nBins, min, max, fNBinsJetInvMass, fJetInvMassMin, fJetInvMassMax);
2299 fh2DeltaPhi = new TH2F(Form("fh2DJDeltaPhiPositionCut%s", fNameQADJ.Data()), "",nBins, min, max, fNBinsDeltaPhi, fDeltaPhiMin, fDeltaPhiMax);
2300 fh2DeltaEta = new TH2F(Form("fh2DJDeltaEtaPositionCut%s", fNameQADJ.Data()), "",nBins, min, max, fNBinsDeltaEta, fDeltaEtaMin, fDeltaEtaMax);
2301 fh2DeltaPt = new TH2F(Form("fh2DJDeltaPtPositionCut%s", fNameQADJ.Data()), "",nBins, min, max, fNBinsDeltaPt, fDeltaPtMin, fDeltaPtMax);
2302 fh2InBal = new TH2F(Form("fh2DJInBalPositionCut%s", fNameQADJ.Data()), "",nBins, min, max, fNBinsInBal, fInBalMin, fInBalMax);
2303
2304 AliAnalysisTaskFragmentationFunction::SetProperties(fh2InvMass, xaxis, "Invariant Mass", "Entries");
2305 AliAnalysisTaskFragmentationFunction::SetProperties(fh2DeltaPhi, xaxis, "#Delta #phi", "Entries");
2306 AliAnalysisTaskFragmentationFunction::SetProperties(fh2DeltaEta, xaxis, "#Delta #eta", "Entries");
2307 AliAnalysisTaskFragmentationFunction::SetProperties(fh2DeltaPt, xaxis, "#Delta p_{T}", "Entries");
2308 AliAnalysisTaskFragmentationFunction::SetProperties(fh2InBal, xaxis, "(p_{T}^{1}-p_{T}^{2})/(p_{T}^{1}+p_{T}^{2})", "Entries");
2309
2310}
2311
2312//________________________________________________________________________
2313void AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::FillDiJetQA(Double_t invMass, Double_t deltaPhi, Double_t deltaEta,Double_t deltaPt, Double_t inbal, Double_t jetBin)
2314{
2315 // fill dijet QA
2316
2317 fh2InvMass->Fill(jetBin, invMass);
2318 fh2DeltaPhi->Fill(jetBin, deltaPhi);
2319 fh2DeltaEta->Fill(jetBin, deltaEta);
2320 fh2DeltaPt->Fill(jetBin, deltaPt);
2321 fh2InBal->Fill(jetBin, inbal);
2322}
2323
2324//________________________________________________________________________
2325void AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::AddToOutput(TList* list)const
2326{
2327 // add histos to list
2328
2329 list->Add(fh2InvMass);
2330 list->Add(fh2DeltaPhi);
2331 list->Add(fh2DeltaEta);
2332 list->Add(fh2DeltaPt);
2333 list->Add(fh2InBal);
2334}
2335
2336//_________________________________________________________________________________
2337void AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::AddToOutput(TList* list) const
2338{
2339 // add histos to list
2340
2341 list->Add(fh2CosTheta);
2342 list->Add(fh2PtZ);
2343 list->Add(fh3ThetaZ);
2344 list->Add(fh3JtTheta);
2345 list->Add(fh3JtZ);
2346
2347}
2348
2349//_________________________________________________________________________________
2350Bool_t AliAnalysisTaskFragmentationFunction::Notify()
2351{
2352 //
2353 // Implemented Notify() to read the cross sections
2354 // and number of trials from pyxsec.root
2355 // (taken from AliAnalysisTaskJetSpectrum2)
2356 //
2357 TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
2358 Float_t xsection = 0;
2359 Float_t ftrials = 1;
2360
2361 fAvgTrials = 1;
2362 if(tree){
2363 TFile *curfile = tree->GetCurrentFile();
2364 if (!curfile) {
2365 Error("Notify","No current file");
2366 return kFALSE;
2367 }
2368 if(!fh1Xsec||!fh1Trials){
2369 Printf("%s%d No Histogram fh1Xsec",(char*)__FILE__,__LINE__);
2370 return kFALSE;
2371 }
2372 AliAnalysisHelperJetTasks::PythiaInfoFromFile(curfile->GetName(),xsection,ftrials);
2373 fh1Xsec->Fill("<#sigma>",xsection);
2374 // construct a poor man average trials
2375 Float_t nEntries = (Float_t)tree->GetTree()->GetEntries();
2376 if(ftrials>=nEntries && nEntries>0.)fAvgTrials = ftrials/nEntries;
2377 }
2378
2379 // Set seed for backg study
2380 fRandom = new TRandom3();
2381 fRandom->SetSeed(0);
2382
2383 return kTRUE;
2384}
2385
2386
2387
2388//__________________________________________________________________
2389void AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects()
2390{
2391 // create output objects
2392
2393 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects()");
2394
2395 // create list of tracks and jets
2396
2397 fTracksRec = new TList();
2398 fTracksRec->SetOwner(kFALSE);
2399
2400 fTracksRecCuts = new TList();
2401 fTracksRecCuts->SetOwner(kFALSE);
2402
2403 fTracksGen = new TList();
2404 fTracksGen->SetOwner(kFALSE);
2405
2406 fTracksAODMCCharged = new TList();
2407 fTracksAODMCCharged->SetOwner(kFALSE);
2408
2409 fTracksAODMCChargedSec = new TList();
2410 fTracksAODMCChargedSec->SetOwner(kFALSE);
2411
2412 fTracksRecQualityCuts = new TList();
2413 fTracksRecQualityCuts->SetOwner(kFALSE);
2414
2415 fJetsRec = new TList();
2416 fJetsRec->SetOwner(kFALSE);
2417 if(fBranchRecJets.Contains("KT") && fBckgSubMethod) fJetsRec->SetOwner(kTRUE);
2418
2419 fJetsRecCuts = new TList();
2420 fJetsRecCuts->SetOwner(kFALSE);
2421 if(fBranchRecJets.Contains("KT") && fBckgSubMethod) fJetsRecCuts->SetOwner(kTRUE);
2422
2423 fJetsGen = new TList();
2424 fJetsGen->SetOwner(kFALSE);
2425
2426 fJetsRecEff = new TList();
2427 fJetsRecEff->SetOwner(kFALSE);
2428
2429 fJetsEmbedded = new TList();
2430 fJetsEmbedded->SetOwner(kFALSE);
2431
2432 // fJetsKine = new TList();
2433 // fJetsKine->SetOwner(kTRUE); // delete AOD jets using mom from Kine Tree via TList::Clear()
2434
2435 if(fBckgMode &&
2436 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
2437 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
2438 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
2439
2440 fBckgJetsRec = new TList();
2441 fBckgJetsRec->SetOwner(kFALSE);
2442
2443 fBckgJetsRecCuts = new TList();
2444 fBckgJetsRecCuts->SetOwner(kFALSE);
2445
2446 fBckgJetsGen = new TList();
2447 fBckgJetsGen->SetOwner(kFALSE);
2448 }
2449
2450 //
2451 // Create histograms / output container
2452 //
2453
2454 OpenFile(1);
2455 fCommonHistList = new TList();
2456
2457 Bool_t oldStatus = TH1::AddDirectoryStatus();
2458 TH1::AddDirectory(kFALSE);
2459
2460
2461 // Histograms
2462 fh1EvtSelection = new TH1F("fh1EvtSelection", "Event Selection", 6, -0.5, 5.5);
2463 fh1EvtSelection->GetXaxis()->SetBinLabel(1,"ACCEPTED");
2464 fh1EvtSelection->GetXaxis()->SetBinLabel(2,"event selection: rejected");
2465 fh1EvtSelection->GetXaxis()->SetBinLabel(3,"event class: rejected");
2466 fh1EvtSelection->GetXaxis()->SetBinLabel(4,"vertex Ncontr: rejected");
2467 fh1EvtSelection->GetXaxis()->SetBinLabel(5,"vertex z: rejected");
2468 fh1EvtSelection->GetXaxis()->SetBinLabel(6,"vertex type: rejected");
2469
2470 fh1VertexNContributors = new TH1F("fh1VertexNContributors", "Vertex N contributors", 2500,-.5, 2499.5);
2471 fh1VertexZ = new TH1F("fh1VertexZ", "Vertex z distribution", 30, -15., 15.);
2472 fh1EvtMult = new TH1F("fh1EvtMult","Event multiplicity, track pT cut > 150 MeV/c, |#eta| < 0.9",120,0.,12000.);
2473 fh1EvtCent = new TH1F("fh1EvtCent","centrality",100,0.,100.);
2474 fh2TrackPtVsDCAXY = new TH2F("fh2TrackPtVsDCAXY","",400,-0.02,0.02,100,0.,10.);
2475 fh2TrackPtVsDCAZ = new TH2F("fh2TrackPtVsDCAZ","",100,-0.050,0.050,100,0.,10.);
2476
2477 fh1Xsec = new TProfile("fh1Xsec","xsec from pyxsec.root",1,0,1);
2478 fh1Xsec->GetXaxis()->SetBinLabel(1,"<#sigma>");
2479 fh1Trials = new TH1F("fh1Trials","trials from pyxsec.root",1,0,1);
2480 fh1Trials->GetXaxis()->SetBinLabel(1,"#sum{ntrials}");
2481 fh1PtHard = new TH1F("fh1PtHard","PYTHIA Pt hard;p_{T,hard}",350,-.5,349.5);
2482 fh1PtHardTrials = new TH1F("fh1PtHardTrials","PYTHIA Pt hard weight with trials;p_{T,hard}",350,-.5,349.5);
2483
2484 fh1nRecJetsCuts = new TH1F("fh1nRecJetsCuts","reconstructed jets per event",10,-0.5,9.5);
2485 fh1nGenJets = new TH1F("fh1nGenJets","generated jets per event",10,-0.5,9.5);
2486 fh1nRecEffJets = new TH1F("fh1nRecEffJets","reconstruction effiency: jets per event",10,-0.5,9.5);
2487 fh1nEmbeddedJets = new TH1F("fh1nEmbeddedJets","embedded jets per event",10,-0.5,9.5);
2488
2489 fh2PtRecVsGenPrim = new TH2F("fh2PtRecVsGenPrim","rec vs gen pt",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax);
2490 fh2PtRecVsGenSec = new TH2F("fh2PtRecVsGenSec","rec vs gen pt",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax);
2491
2492
2493 // Background
2494 if(fBckgMode) {
2495 if(fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
2496 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
2497 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading){
2498
2499 fh1nRecBckgJetsCuts = new TH1F("fh1nRecBckgJetsCuts","reconstructed background jets per event",10,-0.5,9.5);
2500 fh1nGenBckgJets = new TH1F("fh1nGenBckgJets","generated background jets per event",10,-0.5,9.5);
2501 }
2502
2503 if(fBckgType[0]==kBckgPerp || fBckgType[1]==kBckgPerp || fBckgType[2]==kBckgPerp || fBckgType[3]==kBckgPerp || fBckgType[4]==kBckgPerp )
2504 fh1PerpMult = new TH1F("fh1PerpMult","Background multiplicity - Cone perpendicular to leading jet axis",500,0.,500.);
2505 if(fBckgType[0]==kBckgASide || fBckgType[1]==kBckgASide || fBckgType[2]==kBckgASide || fBckgType[3]==kBckgASide || fBckgType[4]==kBckgASide)
2506 fh1ASideMult = new TH1F("fh1ASideMult","Background multiplicity - Cone in the away side of leading jet axis",500,0.,500.);
2507 if(fBckgType[0]==kBckgASideWindow || fBckgType[1]==kBckgASideWindow || fBckgType[2]==kBckgASideWindow || fBckgType[3]==kBckgASideWindow || fBckgType[4]==kBckgASideWindow)
2508 fh1ASideWindowMult = new TH1F("fh1ASideWindowMult","Background multiplicity - Cone in the away side of leading jet axis",500,0.,500.);
2509 if(fBckgType[0]==kBckgPerpWindow || fBckgType[1]==kBckgPerpWindow || fBckgType[2]==kBckgPerpWindow || fBckgType[3]==kBckgPerpWindow || fBckgType[4]==kBckgPerpWindow)
2510 fh1PerpWindowMult = new TH1F("fh1PerpWindowMult","Background multiplicity - Cone in the perp direction of leading jet axis",500,0.,500.);
2511 if(fBckgType[0]==kBckgOutLJ || fBckgType[1]==kBckgOutLJ || fBckgType[2]==kBckgOutLJ || fBckgType[3]==kBckgOutLJ || fBckgType[4]==kBckgOutLJ)
2512 fh1OutLeadingMult = new TH1F("fh1OutLeadingMult","Background multiplicity - Cone outside leading jet",500,0,500.);
2513 if(fBckgType[0]==kBckgOutLJStat || fBckgType[1]==kBckgOutLJStat || fBckgType[2]==kBckgOutLJStat || fBckgType[3]==kBckgOutLJStat || fBckgType[4]==kBckgOutLJStat)
2514 fh1OutLeadingStatMult = new TH1F("fh1OutLeadingStatMult","Background multiplicity - Cone outside leading jet",3000,0,3000.);
2515 if(fBckgType[0]==kBckgOut2J || fBckgType[1]==kBckgOut2J || fBckgType[2]==kBckgOut2J || fBckgType[3]==kBckgOut2J || fBckgType[4]==kBckgOut2J)
2516 fh1Out2JetsMult = new TH1F("fh1Out2JetsMult","Background multiplicity - Cone outside 2 jets",500,0.,500.);
2517 if(fBckgType[0]==kBckgOut3J || fBckgType[1]==kBckgOut3J || fBckgType[2]==kBckgOut3J || fBckgType[3]==kBckgOut3J || fBckgType[4]==kBckgOut3J)
2518 fh1Out3JetsMult = new TH1F("fh1Out3JetsMult","Background multiplicity - Cone outside 3 jets",500,0.,500.);
2519 if(fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters)
2520 fh1MedianClustersMult = new TH1F("fh1MedianClustersMult","Background multiplicity - median cluster",500,0.,500.);
2521 if(fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading || fBckgType[3]==kBckgClustersOutLeading
2522 || fBckgType[4]==kBckgClustersOutLeading)
2523 fh1OutClustersMult = new TH1F("fh1OutClustersMult","Background multiplicity - clusters outside leading jet",3000,0.,3000.);
2524 }
2525
2526 // embedding
2527 if(fBranchEmbeddedJets.Length()){
2528 fh1FractionPtEmbedded = new TH1F("fh1FractionPtEmbedded","",200,0,2);
2529 fh1IndexEmbedded = new TH1F("fh1IndexEmbedded","",11,-1,10);
2530 fh2DeltaPtVsJetPtEmbedded = new TH2F("fh2DeltaPtVsJetPtEmbedded","",250,0,250,200,-100,100);
2531 fh2DeltaPtVsRecJetPtEmbedded = new TH2F("fh2DeltaPtVsRecJetPtEmbedded","",250,0,250,200,-100,100);
2532 fh1DeltaREmbedded = new TH1F("fh1DeltaREmbedded","",50,0,0.5);
2533 fh1nEmbeddedJets = new TH1F("fh1nEmbeddedJets","embedded jets per event",10,-0.5,9.5);
2534 }
2535
2536 if(fEffMode){
2537 fh2ptVsDistNN_pt50_rec = new TH2F("fh2ptVsDistNN_pt50_rec","",200,0,0.2,500,0.,100);
2538 fh2ptVsDistNN_pt50_nonRec = new TH2F("fh2ptVsDistNN_pt50_nonRec","",200,0,0.2,500,0.,100);
2539 fh2ptVsDistNN_pt10_rec = new TH2F("fh2ptVsDistNN_pt10_rec","",200,0,0.2,500,0.,100);
2540 fh2ptVsDistNN_pt10_nonRec = new TH2F("fh2ptVsDistNN_pt10_nonRec","",200,0,0.2,500,0.,100);
2541 }
2542
2543 if(fQAMode){
2544 if(fQAMode&1){ // track QA
2545 fQATrackHistosRec = new AliFragFuncQATrackHistos("Rec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2546 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2547 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2548 fQATrackHighPtThreshold);
2549 fQATrackHistosRecCuts = new AliFragFuncQATrackHistos("RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2550 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2551 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2552 fQATrackHighPtThreshold);
2553 fQATrackHistosGen = new AliFragFuncQATrackHistos("Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2554 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2555 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2556 fQATrackHighPtThreshold);
2557 }
2558
2559 if(fQAMode&2){ // jet QA
2560 fQAJetHistosRec = new AliFragFuncQAJetHistos("Rec", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
2561 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
2562 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2563 fQAJetHistosRecCuts = new AliFragFuncQAJetHistos("RecCuts", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
2564 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
2565 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2566 fQAJetHistosRecCutsLeading = new AliFragFuncQAJetHistos("RecCutsLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
2567 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
2568 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2569 fQAJetHistosGen = new AliFragFuncQAJetHistos("Gen", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
2570 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
2571 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2572 fQAJetHistosGenLeading = new AliFragFuncQAJetHistos("GenLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
2573 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
2574 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2575 if(fEffMode) fQAJetHistosRecEffLeading = new AliFragFuncQAJetHistos("RecEffLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
2576 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2577 }
2578 } // end: QA
2579
2580 if(fFFMode){
2581 fFFHistosRecCuts = new AliFragFuncHistos("RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2582 fFFNBinsPt, fFFPtMin, fFFPtMax,
2583 fFFNBinsXi, fFFXiMin, fFFXiMax,
2584 fFFNBinsZ , fFFZMin , fFFZMax);
2585 fFFHistosRecLeading = new AliFragFuncHistos("RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2586 fFFNBinsPt, fFFPtMin, fFFPtMax,
2587 fFFNBinsXi, fFFXiMin, fFFXiMax,
2588 fFFNBinsZ , fFFZMin , fFFZMax);
2589 fFFHistosRecLeadingTrack = new AliFragFuncHistos("RecLeadingTrack", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2590 fFFNBinsPt, fFFPtMin, fFFPtMax,
2591 fFFNBinsXi, fFFXiMin, fFFXiMax,
2592 fFFNBinsZ , fFFZMin , fFFZMax);
2593 fFFHistosGen = new AliFragFuncHistos("Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2594 fFFNBinsPt, fFFPtMin, fFFPtMax,
2595 fFFNBinsXi, fFFXiMin, fFFXiMax,
2596 fFFNBinsZ , fFFZMin , fFFZMax);
2597 fFFHistosGenLeading = new AliFragFuncHistos("GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2598 fFFNBinsPt, fFFPtMin, fFFPtMax,
2599 fFFNBinsXi, fFFXiMin, fFFXiMax,
2600 fFFNBinsZ , fFFZMin , fFFZMax);
2601 fFFHistosGenLeadingTrack = new AliFragFuncHistos("GenLeadingTrack", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2602 fFFNBinsPt, fFFPtMin, fFFPtMax,
2603 fFFNBinsXi, fFFXiMin, fFFXiMax,
2604 fFFNBinsZ , fFFZMin , fFFZMax);
2605 } // end: FF
2606
2607 if(fIJMode)
2608 {
2609 fIJHistosRecCuts = new AliFragFuncIntraJetHistos("RecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2610 fIJNBinsPt, fIJPtMin, fIJPtMax,
2611 fIJNBinsZ, fIJZMin, fIJZMax,
2612 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2613 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2614 fIJNBinsJt , fIJJtMin , fIJJtMax);
2615 fIJHistosRecLeading = new AliFragFuncIntraJetHistos("RecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2616 fIJNBinsPt, fIJPtMin, fIJPtMax,
2617 fIJNBinsZ, fIJZMin, fIJZMax,
2618 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2619 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2620 fIJNBinsJt , fIJJtMin , fIJJtMax);
2621 fIJHistosRecLeadingTrack = new AliFragFuncIntraJetHistos("RecLeadingTrack", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2622 fIJNBinsPt, fIJPtMin, fIJPtMax,
2623 fIJNBinsZ, fIJZMin, fIJZMax,
2624 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2625 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2626 fIJNBinsJt , fIJJtMin , fIJJtMax);
2627 fIJHistosGen = new AliFragFuncIntraJetHistos("Gen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2628 fIJNBinsPt, fIJPtMin, fIJPtMax,
2629 fIJNBinsZ, fIJZMin, fIJZMax,
2630 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2631 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2632 fIJNBinsJt , fIJJtMin , fIJJtMax);
2633 fIJHistosGenLeading = new AliFragFuncIntraJetHistos("GenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2634 fIJNBinsPt, fIJPtMin, fIJPtMax,
2635 fIJNBinsZ, fIJZMin, fIJZMax,
2636 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2637 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2638 fIJNBinsJt , fIJJtMin , fIJJtMax);
2639 fIJHistosGenLeadingTrack = new AliFragFuncIntraJetHistos("GenLeadingTrack", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2640 fIJNBinsPt, fIJPtMin, fIJPtMax,
2641 fIJNBinsZ, fIJZMin, fIJZMax,
2642 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2643 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2644 fIJNBinsJt , fIJJtMin , fIJJtMax);
2645 } // end: intra-jet
2646
2647 if(fDJMode){
2648 if(fDJMode&1){
2649 fFFDiJetHistosRecCuts = new AliFragFuncDiJetHistos("RecCuts", fDiJetKindBins,
2650 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2651 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2652 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2653 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2654 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2655 fFFDiJetHistosRecLeading = new AliFragFuncDiJetHistos("RecLeading", fDiJetKindBins,
2656 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2657 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2658 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2659 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2660 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2661 fFFDiJetHistosRecLeadingTrack = new AliFragFuncDiJetHistos("RecLeadingTrack", fDiJetKindBins,
2662 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2663 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2664 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2665 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2666 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2667
2668 fFFDiJetHistosGen = new AliFragFuncDiJetHistos("Gen", fDiJetKindBins,
2669 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2670 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2671 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2672 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2673 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2674 fFFDiJetHistosGenLeading = new AliFragFuncDiJetHistos("GenLeading", fDiJetKindBins,
2675 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2676 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2677 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2678 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2679 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2680 fFFDiJetHistosGenLeadingTrack = new AliFragFuncDiJetHistos("GenLeadingTrack", fDiJetKindBins,
2681 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2682 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2683 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2684 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2685 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2686 }
2687
2688 if(fDJMode&2){
2689 fQADiJetHistosRecCuts = new AliFragFuncQADiJetHistos("RecCuts", fDiJetKindBins,
2690 fQADiJetNBinsInvMass, fQADiJetInvMassMin, fQADiJetInvMassMax,
2691 fQADiJetNBinsJetPt, fQADiJetJetPtMin, fQADiJetJetPtMax,
2692 fQADiJetNBinsDeltaPhi, fQADiJetDeltaPhiMin, fQADiJetDeltaPhiMax ,
2693 fQADiJetNBinsDeltaEta, fQADiJetDeltaEtaMin, fQADiJetDeltaEtaMax ,
2694 fQADiJetNBinsDeltaPt, fQADiJetDeltaPtMin, fQADiJetDeltaPtMax,
2695 fQADiJetNBinsInBal, fQADiJetInBalMin, fQADiJetInBalMax);
2696 fQADiJetHistosGen = new AliFragFuncQADiJetHistos("Gen", fDiJetKindBins,
2697 fQADiJetNBinsInvMass, fQADiJetInvMassMin, fQADiJetInvMassMax,
2698 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2699 fQADiJetNBinsDeltaPhi, fQADiJetDeltaPhiMin, fQADiJetDeltaPhiMax,
2700 fQADiJetNBinsDeltaEta, fQADiJetDeltaEtaMin, fQADiJetDeltaEtaMax,
2701 fQADiJetNBinsDeltaPt, fQADiJetDeltaPtMin, fQADiJetDeltaPtMax,
2702 fQADiJetNBinsInBal, fQADiJetInBalMin, fQADiJetInBalMax);
2703 }
2704 } // end: di-jet
2705
2706 // efficiency
2707
2708 if(fEffMode){
2709 if(fQAMode&1){
2710 fQATrackHistosRecEffGen = new AliFragFuncQATrackHistos("RecEffGen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2711 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2712 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2713 fQATrackHighPtThreshold);
2714
2715 fQATrackHistosRecEffRec = new AliFragFuncQATrackHistos("RecEffRec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2716 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2717 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2718 fQATrackHighPtThreshold);
2719
2720 fQATrackHistosSecRec = new AliFragFuncQATrackHistos("SecRec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2721 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2722 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2723 fQATrackHighPtThreshold);
2724
2725
2726 Int_t nBinsResponseSinglePt[2] = {fFFNBinsPt, fFFNBinsPt};
2727 Double_t binMinResponseSinglePt[2] = {fFFPtMin, fFFPtMin};
2728 Double_t binMaxResponseSinglePt[2] = {fFFPtMax, fFFPtMax};
2729 const char* labelsResponseSinglePt[2] = {"rec p_{T} [GeV/c]", "gen p_{T} [GeV/c]"};
2730
2731 fhnResponseSinglePt = new THnSparseF("fhnResponseSinglePt","track pt gen : track pt rec",2,
2732 nBinsResponseSinglePt,binMinResponseSinglePt,binMaxResponseSinglePt);
2733
2734 AliAnalysisTaskFragmentationFunction::SetProperties(fhnResponseSinglePt,2,labelsResponseSinglePt);
2735
2736 // TH2F inv pt diff
2737 fh2SingleInvPtRecMnGenVsPtGen = new TH2F("fh2SingleInvPtRecMnGenVsPtGen","",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,200,-1,1);
2738 }
2739 if(fFFMode){
2740 fFFHistosRecEffGen = new AliFragFuncHistos("RecEffGen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2741 fFFNBinsPt, fFFPtMin, fFFPtMax,
2742 fFFNBinsXi, fFFXiMin, fFFXiMax,
2743 fFFNBinsZ , fFFZMin , fFFZMax);
2744
2745 fFFHistosRecEffRec = new AliFragFuncHistos("RecEffRec", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2746 fFFNBinsPt, fFFPtMin, fFFPtMax,
2747 fFFNBinsXi, fFFXiMin, fFFXiMax,
2748 fFFNBinsZ , fFFZMin , fFFZMax);
2749
2750 fFFHistosSecRec = new AliFragFuncHistos("SecRec", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2751 fFFNBinsPt, fFFPtMin, fFFPtMax,
2752 fFFNBinsXi, fFFXiMin, fFFXiMax,
2753 fFFNBinsZ , fFFZMin , fFFZMax);
2754
2755
2756 Int_t nBinsResponseJetTrackPt[3] = {fFFNBinsJetPt,fFFNBinsPt,fFFNBinsPt};
2757 Double_t binMinResponseJetTrackPt[3] = {fFFJetPtMin,fFFPtMin, fFFPtMin};
2758 Double_t binMaxResponseJetTrackPt[3] = {fFFJetPtMax,fFFPtMax,fFFPtMax};
2759 const char* labelsResponseJetTrackPt[3] = { "jet p_{T} [GeV/c]","rec p_{T} [GeV/c]", "gen p_{T} [GeV/c]"};
2760
2761 fhnResponseJetTrackPt = new THnSparseF("fhnResponseJetTrackPt","jet pt:track pt rec:track pt gen",3,
2762 nBinsResponseJetTrackPt,binMinResponseJetTrackPt,binMaxResponseJetTrackPt);
2763
2764 AliAnalysisTaskFragmentationFunction::SetProperties(fhnResponseJetTrackPt,3,labelsResponseJetTrackPt);
2765
2766 Int_t nBinsResponseJetZ[3] = {fFFNBinsJetPt, fFFNBinsZ,fFFNBinsZ};
2767 Double_t binMinResponseJetZ[3] = {fFFJetPtMin, fFFZMin, fFFZMin};
2768 Double_t binMaxResponseJetZ[3] = {fFFJetPtMax, fFFZMax, fFFZMax};
2769 const char* labelsResponseJetZ[3] = { "jet p_{T} [GeV/c]","rec z","gen z"};
2770
2771 fhnResponseJetZ = new THnSparseF("fhnResponseJetZ","jet pt:track pt rec:track pt gen",3,
2772 nBinsResponseJetZ,binMinResponseJetZ,binMaxResponseJetZ);
2773
2774 AliAnalysisTaskFragmentationFunction::SetProperties(fhnResponseJetZ,3,labelsResponseJetZ);
2775
2776 Int_t nBinsResponseJetXi[3] = {fFFNBinsJetPt, fFFNBinsXi,fFFNBinsXi};
2777 Double_t binMinResponseJetXi[3] = {fFFJetPtMin, fFFXiMin, fFFXiMin};
2778 Double_t binMaxResponseJetXi[3] = {fFFJetPtMax, fFFXiMax, fFFXiMax};
2779 const char* labelsResponseJetXi[3] = { "jet p_{T} [GeV/c]","rec xi","gen xi"};
2780
2781 fhnResponseJetXi = new THnSparseF("fhnResponseJetXi","jet pt:track xi rec:track xi gen",3,
2782 nBinsResponseJetXi,binMinResponseJetXi,binMaxResponseJetXi);
2783
2784 AliAnalysisTaskFragmentationFunction::SetProperties(fhnResponseJetXi,3,labelsResponseJetXi);
2785
2786 }
2787 } // end: efficiency
2788
2789 // Background
2790 if(fBckgMode){
2791 // Track QA
2792 TString title[5];
2793 for(Int_t i=0; i<5; i++){
2794 if(fBckgType[i]==kBckgPerp) title[i]="Perp";
2795 else if(fBckgType[i]==kBckgPerpWindow) title[i]="PerpW";
2796 else if(fBckgType[i]==kBckgASide) title[i]="ASide";
2797 else if(fBckgType[i]==kBckgASideWindow) title[i]="ASideW";
2798 else if(fBckgType[i]==kBckgOutLJ) title[i]="OutLeadingJet";
2799 else if(fBckgType[i]==kBckgOut2J) title[i]="Out2Jets";
2800 else if(fBckgType[i]==kBckgOut3J) title[i]="Out3Jets";
2801 else if(fBckgType[i]==kBckgOutAJ) title[i]="AllJets";
2802 else if(fBckgType[i]==kBckgOutLJStat) title[i]="OutLeadingJetStat";
2803 else if(fBckgType[i]==kBckgOut2JStat) title[i]="Out2JetsStat";
2804 else if(fBckgType[i]==kBckgOut3JStat) title[i]="Out3JetsStat";
2805 else if(fBckgType[i]==kBckgOutAJStat) title[i]="AllJetsStat";
2806 else if(fBckgType[i]==kBckgClustersOutLeading) title[i]="OutClusters";
2807 else if(fBckgType[i]==kBckgClusters) title[i]="MedianClusters";
2808 else printf("Please chose background method number %d!",i);
2809 }
2810
2811 if(fQAMode&1){
2812 fQABckgHisto0RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[0]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2813 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2814 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2815 fQATrackHighPtThreshold);
2816 fQABckgHisto0Gen = new AliFragFuncQATrackHistos("Bckg"+title[0]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2817 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2818 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2819 fQATrackHighPtThreshold);
2820 fQABckgHisto1RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[1]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2821 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2822 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2823 fQATrackHighPtThreshold);
2824 fQABckgHisto1Gen = new AliFragFuncQATrackHistos("Bckg"+title[1]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2825 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2826 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2827 fQATrackHighPtThreshold);
2828 fQABckgHisto2RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[2]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2829 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2830 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2831 fQATrackHighPtThreshold);
2832 fQABckgHisto2Gen = new AliFragFuncQATrackHistos("Bckg"+title[2]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2833 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2834 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2835 fQATrackHighPtThreshold);
2836 fQABckgHisto3RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[3]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2837 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2838 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2839 fQATrackHighPtThreshold);
2840 fQABckgHisto3Gen = new AliFragFuncQATrackHistos("Bckg"+title[3]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2841 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2842 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2843 fQATrackHighPtThreshold);
2844 fQABckgHisto4RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[4]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2845 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2846 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2847 fQATrackHighPtThreshold);
2848 fQABckgHisto4Gen = new AliFragFuncQATrackHistos("Bckg"+title[4]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2849 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2850 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2851 fQATrackHighPtThreshold);
2852
2853
2854 } // end: background QA
2855
2856 if(fFFMode){
2857 // outside leading jet or 2 jets or more
2858 fFFBckgHisto0RecCuts = new AliFragFuncHistos("Bckg"+title[0]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2859 fFFNBinsPt, fFFPtMin, fFFPtMax,
2860 fFFNBinsXi, fFFXiMin, fFFXiMax,
2861 fFFNBinsZ , fFFZMin , fFFZMax);
2862 fFFBckgHisto0RecLeading = new AliFragFuncHistos("Bckg"+title[0]+"RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2863 fFFNBinsPt, fFFPtMin, fFFPtMax,
2864 fFFNBinsXi, fFFXiMin, fFFXiMax,
2865 fFFNBinsZ , fFFZMin , fFFZMax);
2866 fFFBckgHisto0Gen = new AliFragFuncHistos("Bckg"+title[0]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2867 fFFNBinsPt, fFFPtMin, fFFPtMax,
2868 fFFNBinsXi, fFFXiMin, fFFXiMax,
2869 fFFNBinsZ , fFFZMin , fFFZMax);
2870 fFFBckgHisto0GenLeading = new AliFragFuncHistos("Bckg"+title[0]+"GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2871 fFFNBinsPt, fFFPtMin, fFFPtMax,
2872 fFFNBinsXi, fFFXiMin, fFFXiMax,
2873 fFFNBinsZ , fFFZMin , fFFZMax);
2874
2875 fFFBckgHisto1RecCuts = new AliFragFuncHistos("Bckg"+title[1]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2876 fFFNBinsPt, fFFPtMin, fFFPtMax,
2877 fFFNBinsXi, fFFXiMin, fFFXiMax,
2878 fFFNBinsZ , fFFZMin , fFFZMax);
2879 fFFBckgHisto1RecLeading = new AliFragFuncHistos("Bckg"+title[1]+"RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2880 fFFNBinsPt, fFFPtMin, fFFPtMax,
2881 fFFNBinsXi, fFFXiMin, fFFXiMax,
2882 fFFNBinsZ , fFFZMin , fFFZMax);
2883 fFFBckgHisto1Gen = new AliFragFuncHistos("Bckg"+title[1]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2884 fFFNBinsPt, fFFPtMin, fFFPtMax,
2885 fFFNBinsXi, fFFXiMin, fFFXiMax,
2886 fFFNBinsZ , fFFZMin , fFFZMax);
2887 fFFBckgHisto1GenLeading = new AliFragFuncHistos("Bckg"+title[1]+"GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2888 fFFNBinsPt, fFFPtMin, fFFPtMax,
2889 fFFNBinsXi, fFFXiMin, fFFXiMax,
2890 fFFNBinsZ , fFFZMin , fFFZMax);
2891
2892 fFFBckgHisto2RecCuts = new AliFragFuncHistos("Bckg"+title[2]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2893 fFFNBinsPt, fFFPtMin, fFFPtMax,
2894 fFFNBinsXi, fFFXiMin, fFFXiMax,
2895 fFFNBinsZ , fFFZMin , fFFZMax);
2896 fFFBckgHisto2RecLeading = new AliFragFuncHistos("Bckg"+title[2]+"RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2897 fFFNBinsPt, fFFPtMin, fFFPtMax,
2898 fFFNBinsXi, fFFXiMin, fFFXiMax,
2899 fFFNBinsZ , fFFZMin , fFFZMax);
2900 fFFBckgHisto2Gen = new AliFragFuncHistos("Bckg"+title[2]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2901 fFFNBinsPt, fFFPtMin, fFFPtMax,
2902 fFFNBinsXi, fFFXiMin, fFFXiMax,
2903 fFFNBinsZ , fFFZMin , fFFZMax);
2904 fFFBckgHisto2GenLeading = new AliFragFuncHistos("Bckg"+title[2]+"GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2905 fFFNBinsPt, fFFPtMin, fFFPtMax,
2906 fFFNBinsXi, fFFXiMin, fFFXiMax,
2907 fFFNBinsZ , fFFZMin , fFFZMax);
2908 fFFBckgHisto3RecCuts = new AliFragFuncHistos("Bckg"+title[3]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2909 fFFNBinsPt, fFFPtMin, fFFPtMax,
2910 fFFNBinsXi, fFFXiMin, fFFXiMax,
2911 fFFNBinsZ , fFFZMin , fFFZMax);
2912 fFFBckgHisto3RecLeading = new AliFragFuncHistos("Bckg"+title[3]+"RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2913 fFFNBinsPt, fFFPtMin, fFFPtMax,
2914 fFFNBinsXi, fFFXiMin, fFFXiMax,
2915 fFFNBinsZ , fFFZMin , fFFZMax);
2916 fFFBckgHisto3Gen = new AliFragFuncHistos("Bckg"+title[3]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2917 fFFNBinsPt, fFFPtMin, fFFPtMax,
2918 fFFNBinsXi, fFFXiMin, fFFXiMax,
2919 fFFNBinsZ , fFFZMin , fFFZMax);
2920 fFFBckgHisto3GenLeading = new AliFragFuncHistos("Bckg"+title[3]+"GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2921 fFFNBinsPt, fFFPtMin, fFFPtMax,
2922 fFFNBinsXi, fFFXiMin, fFFXiMax,
2923 fFFNBinsZ , fFFZMin , fFFZMax);
2924 fFFBckgHisto4RecCuts = new AliFragFuncHistos("Bckg"+title[4]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2925 fFFNBinsPt, fFFPtMin, fFFPtMax,
2926 fFFNBinsXi, fFFXiMin, fFFXiMax,
2927 fFFNBinsZ , fFFZMin , fFFZMax);
2928 fFFBckgHisto4RecLeading = new AliFragFuncHistos("Bckg"+title[4]+"RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2929 fFFNBinsPt, fFFPtMin, fFFPtMax,
2930 fFFNBinsXi, fFFXiMin, fFFXiMax,
2931 fFFNBinsZ , fFFZMin , fFFZMax);
2932 fFFBckgHisto4Gen = new AliFragFuncHistos("Bckg"+title[4]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2933 fFFNBinsPt, fFFPtMin, fFFPtMax,
2934 fFFNBinsXi, fFFXiMin, fFFXiMax,
2935 fFFNBinsZ , fFFZMin , fFFZMax);
2936 fFFBckgHisto4GenLeading = new AliFragFuncHistos("Bckg"+title[4]+"GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2937 fFFNBinsPt, fFFPtMin, fFFPtMax,
2938 fFFNBinsXi, fFFXiMin, fFFXiMax,
2939 fFFNBinsZ , fFFZMin , fFFZMax);
2940
2941 } // end: background FF
2942
2943 if(fIJMode){
2944 fIJBckgHisto0RecCuts = new AliFragFuncIntraJetHistos("Bckg"+title[0]+"RecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2945 fIJNBinsPt, fIJPtMin, fIJPtMax,
2946 fIJNBinsZ, fIJZMin, fIJZMax,
2947 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2948 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2949 fIJNBinsJt , fIJJtMin , fIJJtMax);
2950 fIJBckgHisto0RecLeading = new AliFragFuncIntraJetHistos("Bckg"+title[0]+"RecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2951 fIJNBinsPt, fIJPtMin, fIJPtMax,
2952 fIJNBinsZ, fIJZMin, fIJZMax,
2953 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2954 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2955 fIJNBinsJt , fIJJtMin , fIJJtMax);
2956 fIJBckgHisto0Gen = new AliFragFuncIntraJetHistos("Bckg"+title[0]+"Gen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2957 fIJNBinsPt, fIJPtMin, fIJPtMax,
2958 fIJNBinsZ, fIJZMin, fIJZMax,
2959 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2960 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2961 fIJNBinsJt , fIJJtMin , fIJJtMax);
2962 fIJBckgHisto0GenLeading = new AliFragFuncIntraJetHistos("Bckg"+title[0]+"GenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2963 fIJNBinsPt, fIJPtMin, fIJPtMax,
2964 fIJNBinsZ, fIJZMin, fIJZMax,
2965 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2966 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2967 fIJNBinsJt , fIJJtMin , fIJJtMax);
2968
2969
2970 fIJBckgHisto1RecCuts = new AliFragFuncIntraJetHistos("Bckg"+title[1]+"RecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2971 fIJNBinsPt, fIJPtMin, fIJPtMax,
2972 fIJNBinsZ, fIJZMin, fIJZMax,
2973 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2974 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2975 fIJNBinsJt , fIJJtMin , fIJJtMax);
2976 fIJBckgHisto1RecLeading = new AliFragFuncIntraJetHistos("Bckg"+title[1]+"RecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2977 fIJNBinsPt, fIJPtMin, fIJPtMax,
2978 fIJNBinsZ, fIJZMin, fIJZMax,
2979 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2980 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2981 fIJNBinsJt , fIJJtMin , fIJJtMax);
2982 fIJBckgHisto1Gen = new AliFragFuncIntraJetHistos("Bckg"+title[1]+"Gen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2983 fIJNBinsPt, fIJPtMin, fIJPtMax,
2984 fIJNBinsZ, fIJZMin, fIJZMax,
2985 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2986 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2987 fIJNBinsJt , fIJJtMin , fIJJtMax);
2988 fIJBckgHisto1GenLeading = new AliFragFuncIntraJetHistos("Bckg"+title[1]+"GenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2989 fIJNBinsPt, fIJPtMin, fIJPtMax,
2990 fIJNBinsZ, fIJZMin, fIJZMax,
2991 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2992 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2993 fIJNBinsJt , fIJJtMin , fIJJtMax);
2994
2995 fIJBckgHisto2RecCuts = new AliFragFuncIntraJetHistos("Bckg"+title[2]+"RecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2996 fIJNBinsPt, fIJPtMin, fIJPtMax,
2997 fIJNBinsZ, fIJZMin, fIJZMax,
2998 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2999 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3000 fIJNBinsJt , fIJJtMin , fIJJtMax);
3001 fIJBckgHisto2RecLeading = new AliFragFuncIntraJetHistos("Bckg"+title[2]+"RecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3002 fIJNBinsPt, fIJPtMin, fIJPtMax,
3003 fIJNBinsZ, fIJZMin, fIJZMax,
3004 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3005 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3006 fIJNBinsJt , fIJJtMin , fIJJtMax);
3007 fIJBckgHisto2Gen = new AliFragFuncIntraJetHistos("Bckg"+title[2]+"Gen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3008 fIJNBinsPt, fIJPtMin, fIJPtMax,
3009 fIJNBinsZ, fIJZMin, fIJZMax,
3010 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3011 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3012 fIJNBinsJt , fIJJtMin , fIJJtMax);
3013 fIJBckgHisto2GenLeading = new AliFragFuncIntraJetHistos("Bckg"+title[2]+"GenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3014 fIJNBinsPt, fIJPtMin, fIJPtMax,
3015 fIJNBinsZ, fIJZMin, fIJZMax,
3016 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3017 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3018 fIJNBinsJt , fIJJtMin , fIJJtMax);
3019 } // end: background intra-jet
3020 } // end: background
3021
3022 if(fPhiCorrMode){
3023 fPhiCorrHistosJetArea = new AliFragFuncQATrackHistos("JetArea", fPhiCorrNBinsPt, fPhiCorrPtMin, fPhiCorrPtMax,
3024 fPhiCorrNBinsEta, fPhiCorrEtaMin, fPhiCorrEtaMax,
3025 fPhiCorrNBinsPhi, fPhiCorrPhiMin, fPhiCorrPhiMax,
3026 fQATrackHighPtThreshold);
3027
3028 fPhiCorrHistosTransverseArea = new AliFragFuncQATrackHistos("TransverseArea", fPhiCorrNBinsPt, fPhiCorrPtMin, fPhiCorrPtMax,
3029 fPhiCorrNBinsEta, fPhiCorrEtaMin, fPhiCorrEtaMax,
3030 fPhiCorrNBinsPhi, fPhiCorrPhiMin, fPhiCorrPhiMax,
3031 fQATrackHighPtThreshold);
3032
3033 fPhiCorrHistosAwayArea = new AliFragFuncQATrackHistos("AwayArea", fPhiCorrNBinsPt, fPhiCorrPtMin, fPhiCorrPtMax,
3034 fPhiCorrNBinsEta, fPhiCorrEtaMin, fPhiCorrEtaMax,
3035 fPhiCorrNBinsPhi, fPhiCorrPhiMin, fPhiCorrPhiMax,
3036 fQATrackHighPtThreshold);
3037 } // end: phi correlation
3038
3039
3040 // ____________ define histograms ____________________
3041
3042 if(fQAMode){
3043 if(fQAMode&1){ // track QA
3044 fQATrackHistosRec->DefineHistos();
3045 fQATrackHistosRecCuts->DefineHistos();
3046 fQATrackHistosGen->DefineHistos();
3047 }
3048
3049 if(fQAMode&2){ // jet QA
3050 fQAJetHistosRec->DefineHistos();
3051 fQAJetHistosRecCuts->DefineHistos();
3052 fQAJetHistosRecCutsLeading->DefineHistos();
3053 fQAJetHistosGen->DefineHistos();
3054 fQAJetHistosGenLeading->DefineHistos();
3055 if(fEffMode) fQAJetHistosRecEffLeading->DefineHistos();
3056 }
3057 }
3058
3059 if(fFFMode){
3060 fFFHistosRecCuts->DefineHistos();
3061 fFFHistosRecLeading->DefineHistos();
3062 fFFHistosRecLeadingTrack->DefineHistos();
3063 fFFHistosGen->DefineHistos();
3064 fFFHistosGenLeading->DefineHistos();
3065 fFFHistosGenLeadingTrack->DefineHistos();
3066 }
3067
3068 if(fIJMode){
3069 fIJHistosRecCuts->DefineHistos();
3070 fIJHistosRecLeading->DefineHistos();
3071 fIJHistosRecLeadingTrack->DefineHistos();
3072 fIJHistosGen->DefineHistos();
3073 fIJHistosGenLeading->DefineHistos();
3074 fIJHistosGenLeadingTrack->DefineHistos();
3075 }
3076
3077 if(fDJMode){
3078 if(fDJMode&1){
3079 fFFDiJetHistosRecCuts->DefineDiJetHistos();
3080 fFFDiJetHistosRecLeading->DefineDiJetHistos();
3081 fFFDiJetHistosRecLeadingTrack->DefineDiJetHistos();
3082 fFFDiJetHistosGen->DefineDiJetHistos();
3083 fFFDiJetHistosGenLeading->DefineDiJetHistos();
3084 fFFDiJetHistosGenLeadingTrack->DefineDiJetHistos();
3085 }
3086
3087 if(fDJMode&2){
3088 fQADiJetHistosRecCuts->DefineQADiJetHistos();
3089 fQADiJetHistosGen->DefineQADiJetHistos();
3090 }
3091 } // end: di-jet
3092
3093 if(fEffMode){
3094 if(fQAMode&1){
3095 fQATrackHistosRecEffGen->DefineHistos();
3096 fQATrackHistosRecEffRec->DefineHistos();
3097 fQATrackHistosSecRec->DefineHistos();
3098 }
3099 if(fFFMode){
3100 fFFHistosRecEffGen->DefineHistos();
3101 fFFHistosRecEffRec->DefineHistos();
3102 fFFHistosSecRec->DefineHistos();
3103 }
3104 } // end: efficiency
3105
3106 // Background
3107 if(fBckgMode){
3108 if(fFFMode){
3109 fFFBckgHisto0RecCuts->DefineHistos();
3110 fFFBckgHisto0RecLeading->DefineHistos();
3111 fFFBckgHisto0Gen->DefineHistos();
3112 fFFBckgHisto0GenLeading->DefineHistos();
3113 fFFBckgHisto1RecCuts->DefineHistos();
3114 fFFBckgHisto1RecLeading->DefineHistos();
3115 fFFBckgHisto1Gen->DefineHistos();
3116 fFFBckgHisto1GenLeading->DefineHistos();
3117 fFFBckgHisto2RecCuts->DefineHistos();
3118 fFFBckgHisto2RecLeading->DefineHistos();
3119 fFFBckgHisto2Gen->DefineHistos();
3120 fFFBckgHisto2GenLeading->DefineHistos();
3121 fFFBckgHisto3RecCuts->DefineHistos();
3122 fFFBckgHisto3RecLeading->DefineHistos();
3123 fFFBckgHisto3Gen->DefineHistos();
3124 fFFBckgHisto3GenLeading->DefineHistos();
3125 fFFBckgHisto4RecCuts->DefineHistos();
3126 fFFBckgHisto4RecLeading->DefineHistos();
3127 fFFBckgHisto4Gen->DefineHistos();
3128 fFFBckgHisto4GenLeading->DefineHistos();
3129 }
3130
3131 if(fIJMode){
3132 fIJBckgHisto0RecCuts->DefineHistos();
3133 fIJBckgHisto0RecLeading->DefineHistos();
3134 fIJBckgHisto0Gen->DefineHistos();
3135 fIJBckgHisto0GenLeading->DefineHistos();
3136 fIJBckgHisto1RecCuts->DefineHistos();
3137 fIJBckgHisto1RecLeading->DefineHistos();
3138 fIJBckgHisto1Gen->DefineHistos();
3139 fIJBckgHisto1GenLeading->DefineHistos();
3140 fIJBckgHisto2RecCuts->DefineHistos();
3141 fIJBckgHisto2RecLeading->DefineHistos();
3142 fIJBckgHisto2Gen->DefineHistos();
3143 fIJBckgHisto2GenLeading->DefineHistos();
3144 }
3145
3146 if(fQAMode&1){
3147 fQABckgHisto0RecCuts->DefineHistos();
3148 fQABckgHisto0Gen->DefineHistos();
3149 fQABckgHisto1RecCuts->DefineHistos();
3150 fQABckgHisto1Gen->DefineHistos();
3151 fQABckgHisto2RecCuts->DefineHistos();
3152 fQABckgHisto2Gen->DefineHistos();
3153 fQABckgHisto3RecCuts->DefineHistos();
3154 fQABckgHisto3Gen->DefineHistos();
3155 fQABckgHisto4RecCuts->DefineHistos();
3156 fQABckgHisto4Gen->DefineHistos();
3157 }
3158 } // end: background
3159
3160 if(fPhiCorrMode){
3161 fPhiCorrHistosJetArea->DefineHistos();
3162 fPhiCorrHistosTransverseArea->DefineHistos();
3163 fPhiCorrHistosAwayArea->DefineHistos();
3164 }
3165
3166 Bool_t genJets = (fJetTypeGen != kJetsUndef) ? kTRUE : kFALSE;
3167 Bool_t genTracks = (fTrackTypeGen != kTrackUndef) ? kTRUE : kFALSE;
3168 Bool_t recJetsEff = (fJetTypeRecEff != kJetsUndef) ? kTRUE : kFALSE;
3169
3170 fCommonHistList->Add(fh1EvtSelection);
3171 fCommonHistList->Add(fh1EvtMult);
3172 fCommonHistList->Add(fh1EvtCent);
3173 fCommonHistList->Add(fh2TrackPtVsDCAXY);
3174 fCommonHistList->Add(fh2TrackPtVsDCAZ);
3175 fCommonHistList->Add(fh1VertexNContributors);
3176 fCommonHistList->Add(fh1VertexZ);
3177 fCommonHistList->Add(fh1nRecJetsCuts);
3178 if(genJets && genTracks){
3179 fCommonHistList->Add(fh1Xsec);
3180 fCommonHistList->Add(fh1Trials);
3181 fCommonHistList->Add(fh1PtHard);
3182 fCommonHistList->Add(fh1PtHardTrials);
3183 if(genJets) fCommonHistList->Add(fh1nGenJets);
3184 }
3185
3186 // FF histograms
3187 if(fFFMode){
3188 fFFHistosRecCuts->AddToOutput(fCommonHistList);
3189 fFFHistosRecLeading->AddToOutput(fCommonHistList);
3190 fFFHistosRecLeadingTrack->AddToOutput(fCommonHistList);
3191 if(genJets && genTracks){
3192 fCommonHistList->Add(fh1Xsec);
3193 fCommonHistList->Add(fh1Trials);
3194 fCommonHistList->Add(fh1PtHard);
3195 fCommonHistList->Add(fh1PtHardTrials);
3196 if(genJets) fCommonHistList->Add(fh1nGenJets);
3197
3198 fFFHistosGen->AddToOutput(fCommonHistList);
3199 fFFHistosGenLeading->AddToOutput(fCommonHistList);
3200 fFFHistosGenLeadingTrack->AddToOutput(fCommonHistList);
3201 }
3202 }
3203
3204 // Background
3205 if(fBckgMode){
3206 if(fFFMode){
3207 fFFBckgHisto0RecCuts->AddToOutput(fCommonHistList);
3208 fFFBckgHisto0RecLeading->AddToOutput(fCommonHistList);
3209 fFFBckgHisto1RecCuts->AddToOutput(fCommonHistList);
3210 fFFBckgHisto1RecLeading->AddToOutput(fCommonHistList);
3211 fFFBckgHisto2RecCuts->AddToOutput(fCommonHistList);
3212 fFFBckgHisto2RecLeading->AddToOutput(fCommonHistList);
3213 fFFBckgHisto3RecCuts->AddToOutput(fCommonHistList);
3214 fFFBckgHisto3RecLeading->AddToOutput(fCommonHistList);
3215 fFFBckgHisto4RecCuts->AddToOutput(fCommonHistList);
3216 fFFBckgHisto4RecLeading->AddToOutput(fCommonHistList);
3217
3218 if(genJets && genTracks){
3219 fFFBckgHisto0Gen->AddToOutput(fCommonHistList);
3220 fFFBckgHisto0GenLeading->AddToOutput(fCommonHistList);
3221 fFFBckgHisto1Gen->AddToOutput(fCommonHistList);
3222 fFFBckgHisto1GenLeading->AddToOutput(fCommonHistList);
3223 fFFBckgHisto2Gen->AddToOutput(fCommonHistList);
3224 fFFBckgHisto2GenLeading->AddToOutput(fCommonHistList);
3225 fFFBckgHisto3Gen->AddToOutput(fCommonHistList);
3226 fFFBckgHisto3GenLeading->AddToOutput(fCommonHistList);
3227 fFFBckgHisto4Gen->AddToOutput(fCommonHistList);
3228 fFFBckgHisto4GenLeading->AddToOutput(fCommonHistList);
3229 }
3230 }
3231
3232 if(fQAMode&1){
3233 fQABckgHisto0RecCuts->AddToOutput(fCommonHistList);
3234 fQABckgHisto1RecCuts->AddToOutput(fCommonHistList);
3235 fQABckgHisto2RecCuts->AddToOutput(fCommonHistList);
3236 fQABckgHisto3RecCuts->AddToOutput(fCommonHistList);
3237 fQABckgHisto4RecCuts->AddToOutput(fCommonHistList);
3238 if(genJets && genTracks){
3239 fQABckgHisto0Gen->AddToOutput(fCommonHistList);
3240 fQABckgHisto1Gen->AddToOutput(fCommonHistList);
3241 fQABckgHisto2Gen->AddToOutput(fCommonHistList);
3242 fQABckgHisto3Gen->AddToOutput(fCommonHistList);
3243 fQABckgHisto4Gen->AddToOutput(fCommonHistList);
3244 }
3245 }
3246
3247 if(fBckgType[0]==kBckgOutLJ || fBckgType[1]==kBckgOutLJ || fBckgType[2]==kBckgOutLJ || fBckgType[3]==kBckgOutLJ || fBckgType[4]==kBckgOutLJ)
3248 fCommonHistList->Add(fh1OutLeadingMult);
3249 if(fBckgType[0]==kBckgOutLJStat || fBckgType[1]==kBckgOutLJStat || fBckgType[2]==kBckgOutLJStat || fBckgType[3]==kBckgOutLJStat || fBckgType[4]==kBckgOutLJStat)
3250 fCommonHistList->Add(fh1OutLeadingStatMult);
3251 if(fBckgType[0]==kBckgPerp || fBckgType[1]==kBckgPerp || fBckgType[2]==kBckgPerp || fBckgType[3]==kBckgPerp || fBckgType[4]==kBckgPerp)
3252 fCommonHistList->Add(fh1PerpMult);
3253 if(fBckgType[0]==kBckgASide || fBckgType[1]==kBckgASide || fBckgType[2]==kBckgASide || fBckgType[3]==kBckgASide || fBckgType[4]==kBckgASide)
3254 fCommonHistList->Add(fh1ASideMult);
3255 if(fBckgType[0]==kBckgASideWindow || fBckgType[1]==kBckgASideWindow || fBckgType[2]==kBckgASideWindow || fBckgType[3]==kBckgASideWindow || fBckgType[4]==kBckgASideWindow)
3256 fCommonHistList->Add(fh1ASideWindowMult);
3257 if(fBckgType[0]==kBckgPerpWindow || fBckgType[1]==kBckgPerpWindow || fBckgType[2]==kBckgPerpWindow || fBckgType[3]==kBckgPerpWindow || fBckgType[4]==kBckgPerpWindow)
3258 fCommonHistList->Add(fh1PerpWindowMult);
3259 if(fBckgType[0]==kBckgOut2J || fBckgType[1]==kBckgOut2J || fBckgType[2]==kBckgOut2J || fBckgType[3]==kBckgOut2J || fBckgType[4]==kBckgOut2J)
3260 fCommonHistList->Add(fh1Out2JetsMult);
3261 if(fBckgType[0]==kBckgOut3J || fBckgType[1]==kBckgOut3J || fBckgType[2]==kBckgOut3J || fBckgType[3]==kBckgOut3J || fBckgType[4]==kBckgOut3J)
3262 fCommonHistList->Add(fh1Out3JetsMult);
3263 if(fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters)
3264 fCommonHistList->Add(fh1MedianClustersMult);
3265 if(fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading
3266 || fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)
3267 fCommonHistList->Add(fh1OutClustersMult);
3268 }
3269
3270
3271 if(fBranchEmbeddedJets.Length()){
3272 fCommonHistList->Add(fh1FractionPtEmbedded);
3273 fCommonHistList->Add(fh1IndexEmbedded);
3274 fCommonHistList->Add(fh2DeltaPtVsJetPtEmbedded);
3275 fCommonHistList->Add(fh2DeltaPtVsRecJetPtEmbedded);
3276 fCommonHistList->Add(fh1DeltaREmbedded);
3277 fCommonHistList->Add(fh1nEmbeddedJets);
3278 }
3279
3280 if(fEffMode){
3281 fCommonHistList->Add(fh2ptVsDistNN_pt50_rec);
3282 fCommonHistList->Add(fh2ptVsDistNN_pt50_nonRec);
3283 fCommonHistList->Add(fh2ptVsDistNN_pt10_rec);
3284 fCommonHistList->Add(fh2ptVsDistNN_pt10_nonRec);
3285 }
3286
3287 // QA
3288 if(fQAMode){
3289 if(fQAMode&1){ // track QA
3290 fQATrackHistosRec->AddToOutput(fCommonHistList);
3291 fQATrackHistosRecCuts->AddToOutput(fCommonHistList);
3292 if(genTracks) fQATrackHistosGen->AddToOutput(fCommonHistList);
3293 }
3294
3295 if(fQAMode&2){ // jet QA
3296 fQAJetHistosRec->AddToOutput(fCommonHistList);
3297 fQAJetHistosRecCuts->AddToOutput(fCommonHistList);
3298 fQAJetHistosRecCutsLeading->AddToOutput(fCommonHistList);
3299 if(recJetsEff && fEffMode) fQAJetHistosRecEffLeading->AddToOutput(fCommonHistList);
3300 if(genJets){
3301 fQAJetHistosGen->AddToOutput(fCommonHistList);
3302 fQAJetHistosGenLeading->AddToOutput(fCommonHistList);
3303 }
3304 }
3305 }
3306
3307 if(fBckgMode &&
3308 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
3309 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
3310 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)) {
3311 fCommonHistList->Add(fh1nRecBckgJetsCuts);
3312 if(genJets) fCommonHistList->Add(fh1nGenBckgJets);
3313 }
3314
3315 // phi correlation
3316 if(fPhiCorrMode){
3317 fPhiCorrHistosJetArea->AddToOutput(fCommonHistList);
3318 fPhiCorrHistosTransverseArea->AddToOutput(fCommonHistList);
3319 fPhiCorrHistosAwayArea->AddToOutput(fCommonHistList);
3320 }
3321
3322 // intra-jet
3323 if(fIJMode){
3324 fIJHistosRecCuts->AddToOutput(fCommonHistList);
3325 fIJHistosRecLeading->AddToOutput(fCommonHistList);
3326 fIJHistosRecLeadingTrack->AddToOutput(fCommonHistList);
3327
3328 // Background
3329 if(fBckgMode){
3330 fIJBckgHisto0RecCuts->AddToOutput(fCommonHistList);
3331 fIJBckgHisto0RecLeading->AddToOutput(fCommonHistList);
3332 fIJBckgHisto1RecCuts->AddToOutput(fCommonHistList);
3333 fIJBckgHisto1RecLeading->AddToOutput(fCommonHistList);
3334 fIJBckgHisto2RecCuts->AddToOutput(fCommonHistList);
3335 fIJBckgHisto2RecLeading->AddToOutput(fCommonHistList);
3336 }
3337
3338 if(genJets && genTracks){
3339 fIJHistosGen->AddToOutput(fCommonHistList);
3340 fIJHistosGenLeading->AddToOutput(fCommonHistList);
3341 fIJHistosGenLeadingTrack->AddToOutput(fCommonHistList);
3342
3343 // Background
3344 if(fBckgMode){
3345 fIJBckgHisto0Gen->AddToOutput(fCommonHistList);
3346 fIJBckgHisto0GenLeading->AddToOutput(fCommonHistList);
3347 fIJBckgHisto1Gen->AddToOutput(fCommonHistList);
3348 fIJBckgHisto1GenLeading->AddToOutput(fCommonHistList);
3349 fIJBckgHisto2Gen->AddToOutput(fCommonHistList);
3350 fIJBckgHisto2GenLeading->AddToOutput(fCommonHistList);
3351 }
3352 } // end: gen
3353 } // end: intra-jet
3354
3355 if(fDJMode){
3356 if(fDJMode&1){
3357 fFFDiJetHistosRecCuts->AddToOutput(fCommonHistList);
3358 fFFDiJetHistosRecLeading->AddToOutput(fCommonHistList);
3359 fFFDiJetHistosRecLeadingTrack->AddToOutput(fCommonHistList);
3360 if(genJets && genTracks){
3361 fFFDiJetHistosGen->AddToOutput(fCommonHistList);
3362 fFFDiJetHistosGenLeading->AddToOutput(fCommonHistList);
3363 fFFDiJetHistosGenLeadingTrack->AddToOutput(fCommonHistList);
3364 }
3365 } // end: di-jet
3366 if(fDJMode&2){
3367 fQADiJetHistosRecCuts->AddToOutput(fCommonHistList);
3368 if(genJets && genTracks){
3369 fQADiJetHistosGen->AddToOutput(fCommonHistList);
3370 }
3371 } // end: di-jet QA
3372 } // end: di-jet
3373
3374 if(fEffMode && recJetsEff && genTracks){
3375 if(fQAMode&1){
3376 fQATrackHistosRecEffGen->AddToOutput(fCommonHistList);
3377 fQATrackHistosRecEffRec->AddToOutput(fCommonHistList);
3378 fQATrackHistosSecRec->AddToOutput(fCommonHistList);
3379 fCommonHistList->Add(fhnResponseSinglePt);
3380 fCommonHistList->Add(fh2SingleInvPtRecMnGenVsPtGen);
3381 }
3382 if(fFFMode){
3383 fFFHistosRecEffGen->AddToOutput(fCommonHistList);
3384 fFFHistosRecEffRec->AddToOutput(fCommonHistList);
3385 fFFHistosSecRec->AddToOutput(fCommonHistList);
3386 fCommonHistList->Add(fhnResponseJetTrackPt);
3387 fCommonHistList->Add(fhnResponseJetZ);
3388 fCommonHistList->Add(fhnResponseJetXi);
3389 }
3390 fCommonHistList->Add(fh1nRecEffJets);
3391 fCommonHistList->Add(fh2PtRecVsGenPrim);
3392 fCommonHistList->Add(fh2PtRecVsGenSec);
3393 }
3394
3395
3396 // =========== Switch on Sumw2 for all histos ===========
3397 for (Int_t i=0; i<fCommonHistList->GetEntries(); ++i){
3398 TH1 *h1 = dynamic_cast<TH1*>(fCommonHistList->At(i));
3399 if (h1) h1->Sumw2();
3400 else{
3401 THnSparse *hnSparse = dynamic_cast<THnSparse*>(fCommonHistList->At(i));
3402 if(hnSparse) hnSparse->Sumw2();
3403 }
3404 }
3405
3406 TH1::AddDirectory(oldStatus);
3407
3408 PostData(1, fCommonHistList);
3409}
3410
3411//_______________________________________________
3412void AliAnalysisTaskFragmentationFunction::Init()
3413{
3414 // Initialization
3415 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::Init()");
3416
3417}
3418
3419//_____________________________________________________________
3420void AliAnalysisTaskFragmentationFunction::UserExec(Option_t *)
3421{
3422 // Main loop
3423 // Called for each event
3424 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::UserExec()");
3425
3426
3427 if(fDebug > 1) Printf("Analysis event #%5d", (Int_t) fEntry);
3428 // Trigger selection
3429
3430 AliInputEventHandler* inputHandler = (AliInputEventHandler*)
3431 ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
3432 if(!(inputHandler->IsEventSelected() & AliVEvent::kMB)){
3433 if(inputHandler->InheritsFrom("AliESDInputHandler") && fUsePhysicsSelection){ // PhysicsSelection only with ESD input
3434 fh1EvtSelection->Fill(1.);
3435 if (fDebug > 1 ) Printf(" Trigger Selection: event REJECTED ... ");
3436 PostData(1, fCommonHistList);
3437 return;
3438 }
3439 }
3440
3441 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
3442 if(!fESD){
3443 if(fDebug>3) Printf("%s:%d ESDEvent not found in the input", (char*)__FILE__,__LINE__);
3444 }
3445
3446 fMCEvent = MCEvent();
3447 if(!fMCEvent){
3448 if(fDebug>3) Printf("%s:%d MCEvent not found in the input", (char*)__FILE__,__LINE__);
3449 }
3450
3451 // get AOD event from input/ouput
3452 TObject* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
3453 if( handler && handler->InheritsFrom("AliAODInputHandler") ) {
3454 fAOD = ((AliAODInputHandler*)handler)->GetEvent();
3455 if(fUseAODInputJets) fAODJets = fAOD;
3456 if (fDebug > 1) Printf("%s:%d AOD event from input", (char*)__FILE__,__LINE__);
3457 }
3458 else {
3459 handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
3460 if( handler && handler->InheritsFrom("AliAODHandler") ) {
3461 fAOD = ((AliAODHandler*)handler)->GetAOD();
3462 fAODJets = fAOD;
3463 if (fDebug > 1) Printf("%s:%d AOD event from output", (char*)__FILE__,__LINE__);
3464 }
3465 }
3466
3467 if(!fAODJets && !fUseAODInputJets){ // case we have AOD in input & output and want jets from output
3468 TObject* outHandler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
3469 if( outHandler && outHandler->InheritsFrom("AliAODHandler") ) {
3470 fAODJets = ((AliAODHandler*)outHandler)->GetAOD();
3471 if (fDebug > 1) Printf("%s:%d jets from output AOD", (char*)__FILE__,__LINE__);
3472 }
3473 }
3474
3475 if(fNonStdFile.Length()!=0){
3476 // case we have an AOD extension - fetch the jets from the extended output
3477
3478 AliAODHandler *aodH = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
3479 fAODExtension = (aodH?aodH->GetExtension(fNonStdFile.Data()):0);
3480 if(!fAODExtension){
3481 if(fDebug>1)Printf("AODExtension not found for %s",fNonStdFile.Data());
3482 }
3483 }
3484
3485 if(!fAOD){
3486 Printf("%s:%d AODEvent not found", (char*)__FILE__,__LINE__);
3487 return;
3488 }
3489 if(!fAODJets){
3490 Printf("%s:%d AODEvent with jet branch not found", (char*)__FILE__,__LINE__);
3491 return;
3492 }
3493
3494
3495 // event selection **************************************************
3496 // *** event class ***
3497 Double_t centPercent = -1;
3498 if(fEventClass>0){
3499 Int_t cl = 0;
3500 if(handler->InheritsFrom("AliAODInputHandler")){
3501 // since it is not supported by the helper task define own classes
3502 centPercent = fAOD->GetHeader()->GetCentrality();
3503 cl = 1;
3504 if(centPercent>10) cl = 2;
3505 if(centPercent>30) cl = 3;
3506 if(centPercent>50) cl = 4;
3507 }
3508 else {
3509 cl = AliAnalysisHelperJetTasks::EventClass();
3510 if(fESD) centPercent = fESD->GetCentrality()->GetCentralityPercentile("V0M"); // retrieve value 'by hand'
3511 }
3512
3513 if(cl!=fEventClass){
3514 // event not in selected event class, reject event
3515 if (fDebug > 1) Printf("%s:%d event not in selected event class: event REJECTED ...",(char*)__FILE__,__LINE__);
3516 fh1EvtSelection->Fill(2.);
3517 PostData(1, fCommonHistList);
3518 return;
3519 }
3520 }
3521
3522 // *** vertex cut ***
3523 AliAODVertex* primVtx = fAOD->GetPrimaryVertex();
3524 Int_t nTracksPrim = primVtx->GetNContributors();
3525 fh1VertexNContributors->Fill(nTracksPrim);
3526
3527
3528 if (fDebug > 1) Printf("%s:%d primary vertex selection: %d", (char*)__FILE__,__LINE__,nTracksPrim);
3529 if(!nTracksPrim){
3530 if (fDebug > 1) Printf("%s:%d primary vertex selection: event REJECTED...",(char*)__FILE__,__LINE__);
3531 fh1EvtSelection->Fill(3.);
3532 PostData(1, fCommonHistList);
3533 return;
3534 }
3535
3536 fh1VertexZ->Fill(primVtx->GetZ());
3537
3538 if(TMath::Abs(primVtx->GetZ())>fMaxVertexZ){
3539 if (fDebug > 1) Printf("%s:%d primary vertex z = %f: event REJECTED...",(char*)__FILE__,__LINE__,primVtx->GetZ());
3540 fh1EvtSelection->Fill(4.);
3541 PostData(1, fCommonHistList);
3542 return;
3543 }
3544
3545 TString primVtxName(primVtx->GetName());
3546
3547 if(primVtxName.CompareTo("TPCVertex",TString::kIgnoreCase) == 1){
3548 if (fDebug > 1) Printf("%s:%d primary vertex selection: TPC vertex, event REJECTED...",(char*)__FILE__,__LINE__);
3549 fh1EvtSelection->Fill(5.);
3550 PostData(1, fCommonHistList);
3551 return;
3552 }
3553
3554 if (fDebug > 1) Printf("%s:%d event ACCEPTED ...",(char*)__FILE__,__LINE__);
3555 fh1EvtSelection->Fill(0.);
3556 fh1EvtCent->Fill(centPercent);
3557
3558
3559 //___ get MC information __________________________________________________________________
3560
3561 Double_t ptHard = 0.;
3562 Double_t nTrials = 1; // trials for MC trigger weight for real data
3563
3564 if(fMCEvent){
3565 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
3566
3567 if(genHeader){
3568
3569 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
3570 AliGenHijingEventHeader* hijingGenHeader = 0x0;
3571
3572 if(pythiaGenHeader){
3573 if(fDebug>3) Printf("%s:%d pythiaGenHeader found", (char*)__FILE__,__LINE__);
3574 nTrials = pythiaGenHeader->Trials();
3575 ptHard = pythiaGenHeader->GetPtHard();
3576
3577 fh1PtHard->Fill(ptHard);
3578 fh1PtHardTrials->Fill(ptHard,nTrials);
3579
3580
3581 } else { // no pythia, hijing?
3582
3583 if(fDebug>3) Printf("%s:%d no pythiaGenHeader found", (char*)__FILE__,__LINE__);
3584
3585 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
3586 if(!hijingGenHeader){
3587 Printf("%s:%d no pythiaGenHeader or hjingGenHeader found", (char*)__FILE__,__LINE__);
3588 } else {
3589 if(fDebug>3) Printf("%s:%d hijingGenHeader found", (char*)__FILE__,__LINE__);
3590 }
3591 }
3592
3593 fh1Trials->Fill("#sum{ntrials}",fAvgTrials);
3594 }
3595
3596 }
3597
3598 //___ fetch jets __________________________________________________________________________
3599
3600 Int_t nJ = GetListOfJets(fJetsRec, kJetsRec);
3601 Int_t nRecJets = 0;
3602 if(nJ>=0) nRecJets = fJetsRec->GetEntries();
3603 if(fDebug>2)Printf("%s:%d Selected Rec jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
3604 if(nJ != nRecJets) Printf("%s:%d Mismatch Selected Rec Jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
3605
3606 Int_t nJCuts = GetListOfJets(fJetsRecCuts, kJetsRecAcceptance);
3607 Int_t nRecJetsCuts = 0;
3608 if(nJCuts>=0) nRecJetsCuts = fJetsRecCuts->GetEntries();
3609 if(fDebug>2)Printf("%s:%d Selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
3610 if(nRecJetsCuts != nJCuts) Printf("%s:%d Mismatch selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
3611 fh1nRecJetsCuts->Fill(nRecJetsCuts);
3612
3613 if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
3614
3615 Int_t nJGen = GetListOfJets(fJetsGen, fJetTypeGen);
3616 Int_t nGenJets = 0;
3617 if(nJGen>=0) nGenJets = fJetsGen->GetEntries();
3618 if(fDebug>2)Printf("%s:%d Selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
3619
3620 if(nJGen != nGenJets) Printf("%s:%d Mismatch selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
3621 fh1nGenJets->Fill(nGenJets);
3622
3623
3624 if(fJetTypeRecEff==kJetsKine || fJetTypeRecEff == kJetsKineAcceptance) fJetsRecEff->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
3625 Int_t nJRecEff = GetListOfJets(fJetsRecEff, fJetTypeRecEff);
3626 Int_t nRecEffJets = 0;
3627 if(nJRecEff>=0) nRecEffJets = fJetsRecEff->GetEntries();
3628 if(fDebug>2)Printf("%s:%d Selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
3629 if(nJRecEff != nRecEffJets) Printf("%s:%d Mismatch selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
3630 fh1nRecEffJets->Fill(nRecEffJets);
3631
3632
3633 Int_t nEmbeddedJets = 0;
3634 TArrayI iEmbeddedMatchIndex;
3635 TArrayF fEmbeddedPtFraction;
3636
3637
3638 if(fBranchEmbeddedJets.Length()){
3639 Int_t nJEmbedded = GetListOfJets(fJetsEmbedded, kJetsEmbedded);
3640 if(nJEmbedded>=0) nEmbeddedJets = fJetsEmbedded->GetEntries();
3641 if(fDebug>2)Printf("%s:%d Selected Embedded jets: %d %d",(char*)__FILE__,__LINE__,nJEmbedded,nEmbeddedJets);
3642 if(nJEmbedded != nEmbeddedJets) Printf("%s:%d Mismatch Selected Embedded Jets: %d %d",(char*)__FILE__,__LINE__,nJEmbedded,nEmbeddedJets);
3643 fh1nEmbeddedJets->Fill(nEmbeddedJets);
3644
3645 Float_t maxDist = 0.3;
3646
3647 iEmbeddedMatchIndex.Set(nEmbeddedJets);
3648 fEmbeddedPtFraction.Set(nEmbeddedJets);
3649
3650 iEmbeddedMatchIndex.Reset(-1);
3651 fEmbeddedPtFraction.Reset(0);
3652
3653 AliAnalysisHelperJetTasks::GetJetMatching(fJetsEmbedded, nEmbeddedJets,
3654 fJetsRecCuts, nRecJetsCuts,
3655 iEmbeddedMatchIndex, fEmbeddedPtFraction,
3656 fDebug, maxDist);
3657
3658 }
3659
3660 //____ fetch background jets ___________________________________________________
3661 if(fBckgMode &&
3662 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
3663 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
3664 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
3665
3666 Int_t nBJ = GetListOfBckgJets(fBckgJetsRec, kJetsRec);
3667 Int_t nRecBckgJets = 0;
3668 if(nBJ>=0) nRecBckgJets = fBckgJetsRec->GetEntries();
3669 if(fDebug>2)Printf("%s:%d Selected Rec background jets: %d %d",(char*)__FILE__,__LINE__,nBJ,nRecBckgJets);
3670 if(nBJ != nRecBckgJets) Printf("%s:%d Mismatch Selected Rec background jets: %d %d",(char*)__FILE__,__LINE__,nBJ,nRecBckgJets);
3671
3672 Int_t nBJCuts = GetListOfBckgJets(fBckgJetsRecCuts, kJetsRecAcceptance);
3673 Int_t nRecBckgJetsCuts = 0;
3674 if(nBJCuts>=0) nRecBckgJetsCuts = fBckgJetsRecCuts->GetEntries();
3675 if(fDebug>2)Printf("%s:%d Selected Rec background jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
3676 if(nRecBckgJetsCuts != nBJCuts) Printf("%s:%d Mismatch selected Rec background jets after cuts: %d %d",(char*)__FILE__,__LINE__,nBJCuts,nRecBckgJetsCuts);
3677 fh1nRecBckgJetsCuts->Fill(nRecBckgJetsCuts);
3678
3679 if(0){ // protection OB - not yet implemented
3680 if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fBckgJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
3681 Int_t nBJGen = GetListOfBckgJets(fBckgJetsGen, fJetTypeGen);
3682 Int_t nGenBckgJets = 0;
3683 if(nBJGen>=0) nGenBckgJets = fBckgJetsGen->GetEntries();
3684 if(fDebug>2)Printf("%s:%d Selected Gen background jets: %d %d",(char*)__FILE__,__LINE__,nBJGen,nGenBckgJets);
3685 if(nBJGen != nGenBckgJets) Printf("%s:%d Mismatch selected Gen background jets: %d %d",(char*)__FILE__,__LINE__,nBJGen,nGenBckgJets);
3686 fh1nGenBckgJets->Fill(nGenBckgJets);
3687 }
3688 }
3689
3690
3691 //____ fetch particles __________________________________________________________
3692
3693 Int_t nT;
3694 if(fUseExtraTracks == 1) nT = GetListOfTracks(fTracksRec, kTrackAODExtra);
3695 else if(fUseExtraTracks == -1) nT = GetListOfTracks(fTracksRec, kTrackAODExtraonly);
3696 else nT = GetListOfTracks(fTracksRec, kTrackAOD);
3697
3698 Int_t nRecPart = 0;
3699 if(nT>=0) nRecPart = fTracksRec->GetEntries();
3700 if(fDebug>2)Printf("%s:%d Selected Rec tracks: %d %d",(char*)__FILE__,__LINE__,nT,nRecPart);
3701 if(nRecPart != nT) Printf("%s:%d Mismatch selected Rec tracks: %d %d",(char*)__FILE__,__LINE__,nT,nRecPart);
3702
3703
3704 Int_t nTCuts;
3705 if(fUseExtraTracks == 1) nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODExtraCuts);
3706 else if(fUseExtraTracks == -1) nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODExtraonlyCuts);
3707 else nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODCuts);
3708
3709 Int_t nRecPartCuts = 0;
3710 if(nTCuts>=0) nRecPartCuts = fTracksRecCuts->GetEntries();
3711 if(fDebug>2)Printf("%s:%d Selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
3712 if(nRecPartCuts != nTCuts) Printf("%s:%d Mismatch selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
3713 fh1EvtMult->Fill(nRecPartCuts);
3714
3715
3716
3717 Int_t nTGen = GetListOfTracks(fTracksGen,fTrackTypeGen);
3718 Int_t nGenPart = 0;
3719 if(nTGen>=0) nGenPart = fTracksGen->GetEntries();
3720 if(fDebug>2)Printf("%s:%d Selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
3721 if(nGenPart != nTGen) Printf("%s:%d Mismatch selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
3722
3723
3724 //____ analysis, fill histos ___________________________________________________
3725
3726 if(fQAMode){
3727 // loop over tracks
3728 if(fQAMode&1){
3729 for(Int_t it=0; it<nRecPart; ++it){
3730 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksRec->At(it));
3731 if(part)fQATrackHistosRec->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
3732 }
3733 for(Int_t it=0; it<nRecPartCuts; ++it){
3734 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksRecCuts->At(it));
3735 if(part)fQATrackHistosRecCuts->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt() );
3736 }
3737 for(Int_t it=0; it<nGenPart; ++it){
3738 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksGen->At(it));
3739 if(part)fQATrackHistosGen->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
3740 }
3741
3742 // fill DCA to prim vertex
3743 for(Int_t it=0; it<nRecPartCuts; ++it){
3744 AliAODTrack *aodtr = dynamic_cast<AliAODTrack*>(fTracksRecCuts->At(it));
3745
3746 if(!aodtr) continue;
3747 if(!primVtx) continue;
3748
3749 Double_t bfield = fAOD->GetMagneticField();
3750 Double_t dz[2];
3751 Double_t cov[3];
3752
3753 AliAODTrack tmp(*aodtr);
3754 tmp.PropagateToDCA(primVtx, bfield, 5., dz, cov);
3755
3756 Double_t dcaXY = dz[0];
3757 Double_t dcaZ = dz[1];
3758
3759 fh2TrackPtVsDCAXY->Fill(dcaXY,tmp.Pt());
3760 fh2TrackPtVsDCAZ->Fill(dcaZ,tmp.Pt());
3761 }
3762 }
3763
3764 // loop over jets
3765
3766 if(fQAMode&2){
3767 for(Int_t ij=0; ij<nRecJets; ++ij){
3768 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRec->At(ij));
3769 if(jet)fQAJetHistosRec->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
3770 }
3771 }
3772 }
3773
3774 if(fQAMode || fFFMode || fIJMode || fPhiCorrMode){
3775 for(Int_t ij=0; ij<nRecJetsCuts; ++ij){
3776
3777 AliAODJet* jet = (AliAODJet*)(fJetsRecCuts->At(ij));
3778 if(fQAMode&2) fQAJetHistosRecCuts->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
3779
3780 if(ij==0){ // leading jet
3781
3782 if(fQAMode&2) fQAJetHistosRecCutsLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt() );
3783
3784
3785 Double_t ptFractionEmbedded = 0;
3786 AliAODJet* embeddedJet = 0;
3787
3788 if(fBranchEmbeddedJets.Length()){ // find embedded jet
3789
3790 Int_t indexEmbedded = -1;
3791 for(Int_t i=0; i<nEmbeddedJets; i++){
3792 if(iEmbeddedMatchIndex[i] == ij){
3793 indexEmbedded = i;
3794 ptFractionEmbedded = fEmbeddedPtFraction[i];
3795 }
3796 }
3797
3798 fh1IndexEmbedded->Fill(indexEmbedded);
3799 fh1FractionPtEmbedded->Fill(ptFractionEmbedded);
3800
3801 if(indexEmbedded>-1){
3802
3803 embeddedJet = dynamic_cast<AliAODJet*>(fJetsEmbedded->At(indexEmbedded));
3804 if(!embeddedJet) continue;
3805
3806 Double_t deltaPt = jet->Pt() - embeddedJet->Pt();
3807 Double_t deltaR = jet->DeltaR((AliVParticle*) (embeddedJet));
3808
3809 fh2DeltaPtVsJetPtEmbedded->Fill(embeddedJet->Pt(),deltaPt);
3810 fh2DeltaPtVsRecJetPtEmbedded->Fill(jet->Pt(),deltaPt);
3811 fh1DeltaREmbedded->Fill(deltaR);
3812 }
3813 }
3814
3815 // get tracks in jet
3816 TList* jettracklist = new TList();
3817 Double_t sumPt = 0.;
3818 Float_t leadTrackPt = 0.;
3819 TLorentzVector* leadTrackV = new TLorentzVector();
3820
3821 if(GetFFRadius()<=0){
3822 GetJetTracksTrackrefs(jettracklist, jet);
3823 } else {
3824 if(fUseEmbeddedJetAxis){
3825 if(embeddedJet) GetJetTracksPointing(fTracksRecCuts, jettracklist, embeddedJet, GetFFRadius(), sumPt);
3826 }
3827 else GetJetTracksPointing(fTracksRecCuts, jettracklist, jet, GetFFRadius(), sumPt);
3828 }
3829
3830
3831 if(ptFractionEmbedded>=fCutFractionPtEmbedded){ // if no embedding: ptFraction = cutFraction = 0
3832
3833 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
3834
3835 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));
3836 if(!trackVP)continue;
3837 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
3838
3839 Float_t jetPt = jet->Pt();
3840 if(fUseEmbeddedJetPt){
3841 if(embeddedJet) jetPt = embeddedJet->Pt();
3842 else jetPt = 0;
3843 }
3844 Float_t trackPt = trackV->Pt();
3845
3846
3847 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
3848
3849 if(fFFMode) fFFHistosRecCuts->FillFF( trackPt, jetPt, incrementJetPt);
3850 if(fIJMode) fIJHistosRecCuts->FillIntraJet( trackV, jet->MomentumVector() );
3851
3852 if(it==0){ // leading track
3853 leadTrackPt = trackPt;
3854 leadTrackV->SetPxPyPzE(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
3855
3856 if(fFFMode) fFFHistosRecLeadingTrack->FillFF( leadTrackPt, jetPt, kTRUE);
3857 if(fIJMode) fIJHistosRecLeadingTrack->FillIntraJet( leadTrackV, jet->MomentumVector() );
3858 }
3859 if(fFFMode) fFFHistosRecLeading->FillFF( trackPt, leadTrackPt , incrementJetPt);
3860 if(fIJMode) fIJHistosRecLeading->FillIntraJet( trackV, leadTrackV );
3861
3862 delete trackV;
3863 }
3864
3865 // ff and ij for background study
3866 if(fBckgMode){
3867 if(fBckgType[0]!=-1)
3868 FillBckgHistos(fBckgType[0], fTracksRecCuts, fJetsRecCuts, jet, leadTrackPt, leadTrackV,
3869 fFFBckgHisto0RecCuts, fFFBckgHisto0RecLeading,
3870 fIJBckgHisto0RecCuts, fIJBckgHisto0RecLeading,
3871 fQABckgHisto0RecCuts);
3872 if(fBckgType[1]!=-1)
3873 FillBckgHistos(fBckgType[1], fTracksRecCuts, fJetsRecCuts, jet, leadTrackPt, leadTrackV,
3874 fFFBckgHisto1RecCuts, fFFBckgHisto1RecLeading,
3875 fIJBckgHisto1RecCuts, fIJBckgHisto1RecLeading,
3876 fQABckgHisto1RecCuts);
3877 if(fBckgType[2]!=-1)
3878 FillBckgHistos(fBckgType[2], fTracksRecCuts, fJetsRecCuts, jet, leadTrackPt, leadTrackV,
3879 fFFBckgHisto2RecCuts, fFFBckgHisto2RecLeading,
3880 fIJBckgHisto2RecCuts, fIJBckgHisto2RecLeading,
3881 fQABckgHisto2RecCuts);
3882 if(fBckgType[3]!=-1)
3883 FillBckgHistos(fBckgType[3], fTracksRecCuts, fJetsRecCuts, jet, leadTrackPt, leadTrackV,
3884 fFFBckgHisto3RecCuts, fFFBckgHisto3RecLeading,
3885 fIJBckgHisto3RecCuts, fIJBckgHisto3RecLeading,
3886 fQABckgHisto3RecCuts);
3887 if(fBckgType[4]!=-1)
3888 FillBckgHistos(fBckgType[4], fTracksRecCuts, fJetsRecCuts, jet, leadTrackPt, leadTrackV,
3889 fFFBckgHisto4RecCuts, fFFBckgHisto4RecLeading,
3890 fIJBckgHisto4RecCuts, fIJBckgHisto4RecLeading,
3891 fQABckgHisto4RecCuts);
3892 } // end if(fBckgMode)
3893
3894
3895 // phi correlation
3896 if(fPhiCorrMode){
3897 for(Int_t it=0; it<nRecPartCuts; ++it){
3898 AliVParticle *part = (AliVParticle*)(fTracksRecCuts->At(it));
3899
3900 Float_t partEta = part->Eta();
3901 Float_t partPhi = part->Phi();
3902 Float_t partPt = part->Pt();
3903
3904 fPhiCorrHistosJetArea->FillTrackQA( partEta,
3905 TVector2::Phi_mpi_pi( jet->Phi() - partPhi ),
3906 partPt,
3907 kTRUE);
3908
3909 fPhiCorrHistosTransverseArea->FillTrackQA( partEta,
3910 TVector2::Phi_mpi_pi( jet->Phi() - partPhi + TMath::Pi()/2),
3911 partPt,
3912 kTRUE);
3913
3914 fPhiCorrHistosAwayArea->FillTrackQA( partEta,
3915 TVector2::Phi_mpi_pi( jet->Phi() - partPhi + TMath::Pi()),
3916 partPt,
3917 kTRUE);
3918 }
3919 } // end: phi-correlation
3920
3921 delete leadTrackV;
3922 delete jettracklist;
3923
3924 } // end: cut embedded ratio
3925 } // end: leading jet
3926 } // end: rec. jets after cuts
3927
3928 // generated jets
3929 for(Int_t ij=0; ij<nGenJets; ++ij){
3930
3931 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsGen->At(ij));
3932 if(!jet)continue;
3933 if(fQAMode&2) fQAJetHistosGen->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
3934
3935 if(ij==0){ // leading jet
3936
3937 if(fQAMode&2) fQAJetHistosGenLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
3938
3939 TList* jettracklist = new TList();
3940 Double_t sumPt = 0.;
3941 Float_t leadTrackPt = 0.;
3942 TLorentzVector* leadTrackV = new TLorentzVector();
3943
3944 if(GetFFRadius()<=0){
3945 GetJetTracksTrackrefs(jettracklist, jet);
3946 } else {
3947 GetJetTracksPointing(fTracksGen, jettracklist, jet, GetFFRadius(), sumPt);
3948 }
3949
3950 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
3951
3952 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));
3953 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
3954
3955 Float_t jetPt = jet->Pt();
3956 Float_t trackPt = trackV->Pt();
3957
3958 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
3959
3960 if(fFFMode) fFFHistosGen->FillFF( trackPt, jetPt, incrementJetPt );
3961 if(fIJMode) fIJHistosGen->FillIntraJet( trackV, jet->MomentumVector() );
3962
3963 if(it==0){ // leading track
3964 leadTrackPt = trackPt;
3965 leadTrackV->SetPxPyPzE(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
3966
3967 if(fFFMode) fFFHistosGenLeadingTrack->FillFF( leadTrackPt, jetPt, kTRUE );
3968 if(fIJMode) fIJHistosGenLeadingTrack->FillIntraJet( leadTrackV, jet->MomentumVector() );
3969 }
3970 if(fFFMode) fFFHistosGenLeading->FillFF( trackPt, leadTrackPt, incrementJetPt );
3971 if(fIJMode) fIJHistosGenLeading->FillIntraJet( trackV, leadTrackV );
3972
3973 delete trackV;
3974 }
3975
3976 delete leadTrackV;
3977 delete jettracklist;
3978 }
3979 }
3980 } // end: QA, FF and intra-jet
3981
3982 //_______ DiJet part _____________________________________________________
3983 if(fDJMode){
3984 if (nRecJetsCuts > 1)
3985 {
3986 AliAODJet* jet1 = (AliAODJet*)(fJetsRecCuts->At(0));
3987 AliAODJet* jet2 = (AliAODJet*)(fJetsRecCuts->At(1));
3988
3989 // DiJet deltaphi calculation
3990 Double_t phi1 = TVector2::Phi_0_2pi(jet1->Phi());
3991 Double_t phi2 = TVector2::Phi_0_2pi(jet2->Phi());
3992 Double_t deltaPhi = TMath::Abs(phi1-phi2);
3993 if (deltaPhi > TMath::Pi() && deltaPhi < 2*TMath::Pi()) deltaPhi = 2*TMath::Pi() - deltaPhi;
3994
3995 // DiJet CDF cut calculation
3996 Double_t et1 = TMath::Abs(jet1->E()*TMath::Sin(jet1->Theta()));
3997 Double_t et2 = TMath::Abs(jet2->E()*TMath::Sin(jet2->Theta()));
3998 Double_t sumEt = et1 + et2;
3999 Double_t normEt1PlusEt2 = TMath::Sqrt(et1*et1+et2*et2+2*et1*et2*TMath::Cos(deltaPhi));
4000 Double_t ratio = (Double_t)(normEt1PlusEt2/sumEt);
4001
4002 // DiJet events selection
4003 Bool_t positionCut = 0;
4004 Bool_t positionEnergyCut = 0;
4005 Bool_t cdfCut = 0;
4006
4007 // Position cut :
4008 if (deltaPhi > fDiJetDeltaPhiCut) positionCut = 1;
4009 // Position-Energy cut :
4010 if ((deltaPhi > fDiJetDeltaPhiCut) && ((jet2->Pt()) >= fDiJetPtFractionCut*(jet1->Pt()))) positionEnergyCut = 1;
4011 // CDF cut :
4012 if (ratio < fDiJetCDFCut) cdfCut = 1;
4013
4014 Int_t go = 0;
4015
4016 if (fDiJetCut == 1 && positionCut == 1) go = 1;
4017 if (fDiJetCut == 2 && positionEnergyCut == 1) go = 1;
4018 if (fDiJetCut == 3 && cdfCut == 1) go = 1;
4019
4020 if (go)
4021 {
4022 Double_t deltaEta = TMath::Abs(jet1->Eta()-jet2->Eta());
4023 Double_t deltaPt = TMath::Abs(jet1->Pt()-jet2->Pt());
4024 Double_t inbal = (jet1->Pt()-jet2->Pt())/(jet1->Pt()+jet2->Pt());
4025 Double_t meanEt = (Double_t)((et1+et2)/2.);
4026 Double_t invariantMass = (Double_t)InvMass(jet1,jet2);
4027
4028 Double_t jetBin = GetDiJetBin(invariantMass, jet1->Pt(), meanEt, fDiJetKindBins);
4029
4030 if (jetBin > 0)
4031 {
4032 if(fDJMode&2) fQADiJetHistosRecCuts->FillDiJetQA(invariantMass, deltaPhi, deltaEta, deltaPt, inbal, jetBin);
4033
4034 if(fDJMode&1){
4035 TList* jettracklist1 = new TList();
4036 Double_t sumPt1 = 0.;
4037 Float_t leadTrackPt1 = 0;
4038
4039 TList* jettracklist2 = new TList();
4040 Double_t sumPt2 = 0.;
4041 Float_t leadTrackPt2 = 0;
4042
4043 if(GetFFRadius()<=0)
4044 {
4045 GetJetTracksTrackrefs(jettracklist1, jet1);
4046 GetJetTracksTrackrefs(jettracklist2, jet2);
4047 }
4048 else
4049 {
4050 GetJetTracksPointing(fTracksRecCuts, jettracklist1, jet1, GetFFRadius(), sumPt1);
4051 GetJetTracksPointing(fTracksRecCuts, jettracklist2, jet2, GetFFRadius(), sumPt2);
4052 }
4053
4054 Int_t nTracks = jettracklist1->GetSize();
4055 if (jettracklist1->GetSize() < jettracklist2->GetSize()) nTracks = jettracklist2->GetSize();
4056
4057 for(Int_t it=0; it<nTracks; ++it)
4058 {
4059 if (it < jettracklist1->GetSize())
4060 {
4061 AliVParticle *vp = (dynamic_cast<AliVParticle*> (jettracklist1->At(it)));
4062 Float_t trackPt1 = (vp?vp->Pt():0);
4063 Float_t jetPt1 = jet1->Pt();
4064
4065 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4066
4067 fFFDiJetHistosRecCuts->FillDiJetFF(1, trackPt1, jetPt1, jetBin, incrementJetPt);
4068 fFFDiJetHistosRecCuts->FillDiJetFF(0, trackPt1, jetPt1, jetBin, incrementJetPt);
4069
4070 if (it == 0)
4071 {
4072 leadTrackPt1 = trackPt1;
4073
4074 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(1, leadTrackPt1, jetPt1, jetBin, kTRUE);
4075 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(0, leadTrackPt1, jetPt1, jetBin, kTRUE);
4076 }
4077
4078 fFFDiJetHistosRecLeading->FillDiJetFF(1, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
4079 fFFDiJetHistosRecLeading->FillDiJetFF(0, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
4080 }
4081
4082 if (it < jettracklist2->GetSize())
4083 {
4084 Float_t trackPt2 = ((AliVParticle*)(jettracklist2->At(it)))->Pt();
4085 Float_t jetPt2 = jet2->Pt();
4086
4087 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4088
4089 fFFDiJetHistosRecCuts->FillDiJetFF(2, trackPt2, jetPt2, jetBin, incrementJetPt);
4090 fFFDiJetHistosRecCuts->FillDiJetFF(0, trackPt2, jetPt2, jetBin, incrementJetPt);
4091
4092 if (it == 0)
4093 {
4094 leadTrackPt2 = trackPt2;
4095
4096 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(2, leadTrackPt2, jetPt2, jetBin, kTRUE);
4097 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(0, leadTrackPt2, jetPt2, jetBin, kTRUE);
4098 }
4099
4100 fFFDiJetHistosRecLeading->FillDiJetFF(2, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
4101 fFFDiJetHistosRecLeading->FillDiJetFF(0, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
4102 }
4103 } // End loop on tracks
4104
4105 delete jettracklist1;
4106 delete jettracklist2;
4107 }
4108 } // End if(jetBin > 0)
4109 else { Printf("Jet bins for di-jet studies not set !");}
4110 } // End if(go)
4111 } // End if(nRecJets > 1)
4112
4113 if (nGenJets > 1)
4114 {
4115 AliAODJet* jet1 = dynamic_cast<AliAODJet*>(fJetsGen->At(0));
4116 AliAODJet* jet2 = dynamic_cast<AliAODJet*>(fJetsGen->At(1));
4117 if(jet1&&jet2){
4118
4119 Double_t deltaPhi = 0;
4120 Double_t phi1 = TVector2::Phi_0_2pi(jet1->Phi());
4121 Double_t phi2 = TVector2::Phi_0_2pi(jet2->Phi());
4122 deltaPhi = TMath::Abs(phi1-phi2);
4123 if (deltaPhi > TMath::Pi() && deltaPhi < 2*TMath::Pi()) deltaPhi = 2*TMath::Pi() - deltaPhi;
4124
4125 Double_t et1 = TMath::Abs(jet1->E()*TMath::Sin(jet1->Theta()));
4126 Double_t et2 = TMath::Abs(jet2->E()*TMath::Sin(jet2->Theta()));
4127 Double_t sumEt = et1 + et2;
4128 Double_t normEt1PlusEt2 = TMath::Sqrt(et1*et1+et2*et2+2*et1*et2*TMath::Cos(deltaPhi));
4129 Double_t ratio = (Double_t)(normEt1PlusEt2/sumEt);
4130
4131 // DiJet events selection
4132 Bool_t positionCut = 0;
4133 Bool_t positionEnergyCut = 0;
4134 Bool_t cdfCut = 0;
4135
4136 // Position cut :
4137 if (deltaPhi > fDiJetDeltaPhiCut) positionCut = 1;
4138 // Position-Energy cut :
4139 if ((deltaPhi > fDiJetDeltaPhiCut) && ((jet2->Pt()) >= fDiJetPtFractionCut*(jet1->Pt()))) positionEnergyCut = 1;
4140 // CDF cut :
4141 if (ratio < fDiJetCDFCut) cdfCut = 1;
4142
4143 Int_t go = 0;
4144
4145 if (fDiJetCut == 1 && positionCut == 1) go = 1;
4146 if (fDiJetCut == 2 && positionEnergyCut == 1) go = 1;
4147 if (fDiJetCut == 3 && cdfCut == 1) go = 1;
4148
4149 if (go)
4150 {
4151 Double_t deltaEta = TMath::Abs(jet1->Eta()-jet2->Eta());
4152 Double_t deltaPt = TMath::Abs(jet1->Pt()-jet2->Pt());
4153 Double_t inbal = (jet1->Pt()-jet2->Pt())/(jet1->Pt()+jet2->Pt());
4154 Double_t meanEt = (Double_t)((et1+et2)/2.);
4155 Double_t invariantMass = (Double_t)InvMass(jet1,jet2);
4156
4157 Double_t jetBin = GetDiJetBin(invariantMass, jet1->Pt(), meanEt, fDiJetKindBins);
4158
4159 if(jetBin > 0)
4160 {
4161 if(fDJMode&2) fQADiJetHistosGen->FillDiJetQA(invariantMass, deltaPhi, deltaEta, deltaPt, inbal, jetBin);
4162
4163 if(fDJMode&1){
4164 TList* jettracklist1 = new TList();
4165 Double_t sumPt1 = 0.;
4166 Float_t leadTrackPt1 = 0.;
4167
4168 TList* jettracklist2 = new TList();
4169 Double_t sumPt2 = 0.;
4170 Float_t leadTrackPt2 = 0.;
4171
4172 if(GetFFRadius()<=0)
4173 {
4174 GetJetTracksTrackrefs(jettracklist1, jet1);
4175 GetJetTracksTrackrefs(jettracklist2, jet2);
4176 }
4177 else
4178 {
4179 GetJetTracksPointing(fTracksGen, jettracklist1, jet1, GetFFRadius(), sumPt1);
4180 GetJetTracksPointing(fTracksGen, jettracklist2, jet2, GetFFRadius(), sumPt2);
4181 }
4182
4183 Int_t nTracks = jettracklist1->GetSize();
4184 if (jettracklist1->GetSize() < jettracklist2->GetSize()) nTracks = jettracklist2->GetSize();
4185
4186 for(Int_t it=0; it<nTracks; ++it)
4187 {
4188 if (it < jettracklist1->GetSize())
4189 {
4190 Float_t trackPt1 = ((AliVParticle*)jettracklist1->At(it))->Pt();
4191 Float_t jetPt1 = jet1->Pt();
4192
4193 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4194
4195 fFFDiJetHistosGen->FillDiJetFF( 1, trackPt1, jetPt1, jetBin, incrementJetPt);
4196 fFFDiJetHistosGen->FillDiJetFF( 0, trackPt1, jetPt1, jetBin, incrementJetPt);
4197
4198 if(it==0)
4199 {
4200 leadTrackPt1 = trackPt1;
4201
4202 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 1, leadTrackPt1, jetPt1, jetBin, kTRUE);
4203 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 0, leadTrackPt1, jetPt1, jetBin, kTRUE);
4204 }
4205
4206 fFFDiJetHistosGenLeading->FillDiJetFF( 1, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
4207 fFFDiJetHistosGenLeading->FillDiJetFF( 0, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
4208 }
4209
4210 if (it < jettracklist2->GetSize())
4211 {
4212 Float_t trackPt2 = ((AliVParticle*)jettracklist2->At(it))->Pt();
4213 Float_t jetPt2 = jet2->Pt();
4214
4215 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4216
4217 fFFDiJetHistosGen->FillDiJetFF( 2, trackPt2, jetPt2, jetBin, incrementJetPt);
4218 fFFDiJetHistosGen->FillDiJetFF( 0, trackPt2, jetPt2, jetBin, incrementJetPt);
4219
4220 if (it==0)
4221 {
4222 leadTrackPt2 = trackPt2;
4223
4224 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 2, leadTrackPt2, jetPt2, jetBin, kTRUE);
4225 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 0, leadTrackPt2, jetPt2, jetBin, kTRUE);
4226 }
4227
4228 fFFDiJetHistosGenLeading->FillDiJetFF( 2, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
4229 fFFDiJetHistosGenLeading->FillDiJetFF( 0, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
4230 }
4231 } // End loop on tracks
4232
4233 delete jettracklist1;
4234 delete jettracklist2;
4235 }
4236 } // End if(jetBin > 0)
4237 else { Printf("Jet bins for di-jet studies not set !");}
4238 } // End if (go)
4239 }// end if jet1 and jet2
4240 } // End if(nGenJets > 1)
4241 } // end: di-jet
4242
4243 // ____ efficiency _______________________________
4244
4245 if(fEffMode && (fJetTypeRecEff != kJetsUndef)){
4246
4247 // arrays holding for each generated particle the reconstructed AOD track index & isPrimary flag, are initialized in AssociateGenRec(...) function
4248 TArrayI indexAODTr;
4249 TArrayS isGenPrim;
4250
4251 // array holding for each reconstructed AOD track generated particle index, initialized in AssociateGenRec(...) function
4252 TArrayI indexMCTr;
4253
4254 // ... and another set for secondaries (secondary MC tracks are stored in a different list)
4255 TArrayI indexAODTrSec;
4256 TArrayS isGenSec;
4257 TArrayI indexMCTrSec;
4258
4259 Int_t nTracksAODMCCharged = GetListOfTracks(fTracksAODMCCharged, kTrackAODMCCharged);
4260 if(fDebug>2)Printf("%s:%d selected AODMC tracks: %d ",(char*)__FILE__,__LINE__,nTracksAODMCCharged);
4261
4262 Int_t nTracksAODMCChargedSec = GetListOfTracks(fTracksAODMCChargedSec, kTrackAODMCChargedSec);
4263 if(fDebug>2)Printf("%s:%d selected AODMC secondary tracks: %d ",(char*)__FILE__,__LINE__,nTracksAODMCChargedSec);
4264
4265 Int_t nTracksRecQualityCuts = GetListOfTracks(fTracksRecQualityCuts, kTrackAODQualityCuts);
4266 if(fDebug>2)Printf("%s:%d selected rec tracks quality after cuts, full acceptance/pt : %d ",(char*)__FILE__,__LINE__,nTracksRecQualityCuts);
4267
4268 // associate gen and rec tracks, store indices in TArrays
4269 AssociateGenRec(fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,indexMCTr,isGenPrim,fh2PtRecVsGenPrim);
4270 AssociateGenRec(fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,indexMCTrSec,isGenSec,fh2PtRecVsGenSec);
4271
4272 // single track eff
4273 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGen,fQATrackHistosRecEffRec,fTracksAODMCCharged,indexAODTr,isGenPrim);
4274 if(fQAMode&1) FillSingleTrackResponse(fhnResponseSinglePt,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim);
4275
4276 // secondaries
4277 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRec,fTracksAODMCChargedSec,indexAODTrSec,isGenSec);
4278
4279 // high-pt occupancy effect
4280 FillTwoTrackHistosRecGen(fTracksAODMCCharged, /*fTracksRecQualityCuts,indexAODTr,*/ isGenPrim);
4281
4282 // jet track eff
4283
4284 Double_t sumPtGenLeadingJetRecEff = 0;
4285 Double_t sumPtGenLeadingJetSec = 0;
4286 Double_t sumPtRecLeadingJetRecEff = 0;
4287
4288 for(Int_t ij=0; ij<nRecEffJets; ++ij){
4289
4290 AliAODJet* jet = (AliAODJet*)(fJetsRecEff->At(ij));
4291
4292 if(ij==0){ // leading jet
4293
4294 TList* jettracklistGenPrim = new TList();
4295 GetJetTracksPointing(fTracksAODMCCharged, jettracklistGenPrim, jet, GetFFRadius(), sumPtGenLeadingJetRecEff); // for efficiency: gen tracks from pointing with gen/rec jet
4296
4297 TList* jettracklistGenSec = new TList();
4298 GetJetTracksPointing(fTracksAODMCChargedSec, jettracklistGenSec, jet, GetFFRadius(), sumPtGenLeadingJetSec); // for efficiency: gen tracks from pointing with gen/rec jet
4299
4300 TList* jettracklistRec = new TList();
4301 GetJetTracksPointing(fTracksRecCuts,jettracklistRec, jet, GetFFRadius(), sumPtRecLeadingJetRecEff); // bin efficiency in jet pt bins using rec tracks
4302
4303 Double_t jetEta = jet->Eta();
4304 Double_t jetPhi = TVector2::Phi_0_2pi(jet->Phi());
4305
4306 if(fQAMode&2) fQAJetHistosRecEffLeading->FillJetQA( jetEta, jetPhi, sumPtGenLeadingJetRecEff );
4307
4308 if(fFFMode) FillJetTrackHistosRecGen(fFFHistosRecEffGen,fFFHistosRecEffRec,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff,
4309 jettracklistGenPrim,fTracksAODMCCharged,indexAODTr,isGenPrim,fUseRecEffRecJetPtBins);
4310
4311 if(fFFMode) FillJetTrackResponse(fhnResponseJetTrackPt,fhnResponseJetZ,fhnResponseJetXi,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff,
4312 jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,fUseResponseRecJetPtBins);
4313
4314 // secondaries: use jet pt from primaries
4315 if(fFFMode) FillJetTrackHistosRecGen(0x0,fFFHistosSecRec,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff,
4316 jettracklistGenSec,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,fUseRecEffRecJetPtBins);
4317
4318 delete jettracklistGenPrim;
4319 delete jettracklistGenSec;
4320 delete jettracklistRec;
4321 }
4322 }
4323
4324
4325 // bckgr eff: complementary cones
4326
4327 if(0){
4328
4329 for(Int_t ij=0; ij<nRecEffJets; ++ij){
4330
4331 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRecEff->At(ij));
4332
4333 if(ij==0){ // leading jet
4334
4335 TList* perpjettracklistGen = new TList();
4336 Double_t sumPtGen = 0.;
4337
4338 GetTracksTiltedwrpJetAxis(TMath::Pi()/2.,fTracksGen, perpjettracklistGen, jet, GetFFRadius() , sumPtGen); // for efficiency: gen tracks perp to gen/rec jet
4339
4340 // here could be your histos !!!
4341 // FillJetTrackRecEffHisto(fFFBckgrPerpHistosRecEffGen,fFFBckgrPerpHistosRecEffRec,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff,perpjettracklistGen,
4342 // fTracksAODMCCharged,indexAODTr,isGenPrim,fUseRecEffRecJetPtBins);
4343
4344 delete perpjettracklistGen;
4345 }
4346 }
4347 }
4348
4349 // bgr eff: outside N leading jets
4350
4351 if(0){
4352
4353 Int_t nCases = 1;
4354
4355 TList* outjettracklistGen = new TList();
4356 Double_t sumPtGen = 0.;
4357
4358 GetTracksOutOfNJets(nCases, fTracksGen, outjettracklistGen, fJetsRecEff, sumPtGen); // for efficiency: gen tracks outide n gen/rec jets
4359
4360 // here could be your histos !!!
4361 // FillJetTrackRecEffHisto(fFFBckgrOutHistosRecEffGen,fFFBckgrOutHistosRecEffRec,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff,
4362 // outjettracklistGen,fTracksAODMCCharged,indexAODTr,isGenPrim,fUseRecEffRecJetPtBins);
4363
4364 delete outjettracklistGen;
4365 }
4366 }
4367
4368 //___________________
4369
4370 fTracksRec->Clear();
4371 fTracksRecCuts->Clear();
4372 fTracksGen->Clear();
4373 fTracksAODMCCharged->Clear();
4374 fTracksAODMCChargedSec->Clear();
4375 fTracksRecQualityCuts->Clear();
4376
4377 fJetsRec->Clear();
4378 fJetsRecCuts->Clear();
4379 fJetsGen->Clear();
4380 fJetsRecEff->Clear();
4381 fJetsEmbedded->Clear();
4382
4383
4384 if(fBckgMode &&
4385 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
4386 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
4387 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
4388
4389 fBckgJetsRec->Clear();
4390 fBckgJetsRecCuts->Clear();
4391 fBckgJetsGen->Clear();
4392 }
4393
4394
4395 //Post output data.
4396 PostData(1, fCommonHistList);
4397}
4398
4399//________________________________________________________________________________________
4400Double_t AliAnalysisTaskFragmentationFunction::InvMass(const AliAODJet* jet1, const AliAODJet* jet2)
4401{
4402 // cald DiJet inv mass
4403
4404 Double_t invMass = 0.;
4405 invMass = TMath::Sqrt(pow(jet1->E()+jet2->E(),2) - pow(jet1->Px()+jet2->Px(),2) -
4406 pow(jet1->Py()+jet2->Py(),2) - pow(jet1->Pz()+jet2->Pz(),2));
4407
4408 return invMass;
4409
4410}
4411
4412//________________________________________________________________________________________
4413Double_t AliAnalysisTaskFragmentationFunction::GetDiJetBin(Double_t invMass, Double_t leadingJetPt, Double_t EtMean, Int_t kindBins)
4414{
4415 // calc DiJet bin according to kindBins parameter
4416
4417 Double_t jetBinOk = 0.;
4418 Double_t jetBin = 0.;
4419
4420 Float_t stepInvMass = (fDiJetJetInvMassMax - fDiJetJetInvMassMin)/fDiJetNBinsJetInvMass;
4421 Float_t stepPt = (fDiJetJetPtMax - fDiJetJetPtMin)/fDiJetNBinsJetPt;
4422
4423 if (kindBins == 1)
4424 {
4425 for(Int_t i=0; i<fDiJetNBinsJetInvMass; ++i)
4426 {
4427 jetBin = fDiJetJetInvMassMin + i*stepInvMass + stepInvMass/2.;
4428 if(((fDiJetJetInvMassMin+i*stepInvMass) <= invMass) &&
4429 (fDiJetJetInvMassMin + (i+1)*stepInvMass) > invMass) {jetBinOk = jetBin; break;}
4430 else jetBinOk = -1.;
4431 }
4432 }
4433 else if (kindBins == 3)
4434 {
4435 for(Int_t i=0; i<fDiJetNBinsJetPt; ++i)
4436 {
4437 jetBin = fDiJetJetPtMin + i*stepPt + stepPt/2.;
4438 if(((fDiJetJetPtMin+i*stepPt) <= EtMean) &&
4439 (fDiJetJetPtMin + (i+1)*stepPt) > EtMean) {jetBinOk = jetBin; break;}
4440 else jetBinOk = -1.;
4441 }
4442 }
4443 else if (kindBins == 2)
4444 {
4445 for(Int_t i=0; i<fDiJetNBinsJetPt; ++i)
4446 {
4447 jetBin = fDiJetJetPtMin + i*stepPt + stepPt/2.;
4448 if(((fDiJetJetPtMin+i*stepPt) <= leadingJetPt) &&
4449 (fDiJetJetPtMin + (i+1)*stepPt) > leadingJetPt) {jetBinOk = jetBin; break;}
4450 else jetBinOk = -1.;
4451 }
4452 }
4453 else {Printf("WARNING: kindBins wrongly set ! Please make sure to call SetKindSlices() and set the kind parameter to 1, 2 or 3.\n");}
4454
4455 return jetBinOk;
4456
4457}
4458
4459
4460//______________________________________________________________
4461void AliAnalysisTaskFragmentationFunction::Terminate(Option_t *)
4462{
4463 // terminated
4464
4465 if(fDebug > 1) printf("AliAnalysisTaskFragmentationFunction::Terminate() \n");
4466}
4467
4468//_________________________________________________________________________________
4469Int_t AliAnalysisTaskFragmentationFunction::GetListOfTracks(TList *list, Int_t type)
4470{
4471 // fill list of tracks selected according to type
4472
4473 if(fDebug > 2) Printf("%s:%d Selecting tracks with %d", (char*)__FILE__,__LINE__,type);
4474
4475 if(!list){
4476 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
4477 return -1;
4478 }
4479
4480 if(!fAOD) return -1;
4481
4482 if(!fAOD->GetTracks()) return 0;
4483
4484 if(type==kTrackUndef) return 0;
4485
4486 Int_t iCount = 0;
4487
4488 if(type==kTrackAODExtraCuts || type==kTrackAODExtraonlyCuts || type==kTrackAODExtra || type==kTrackAODExtraonly){
4489
4490 TClonesArray *aodExtraTracks = dynamic_cast<TClonesArray*>(fAOD->FindListObject("aodExtraTracks"));
4491 if(!aodExtraTracks)return iCount;
4492 for(int it =0; it<aodExtraTracks->GetEntries(); it++) {
4493 AliVParticle *track = dynamic_cast<AliVParticle*> ((*aodExtraTracks)[it]);
4494 if (!track) continue;
4495
4496 AliAODTrack *tr = dynamic_cast<AliAODTrack*> (track);
4497 if(!tr)continue;
4498
4499 if(type==kTrackAODExtraCuts || type==kTrackAODExtraonlyCuts){
4500
4501 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
4502
4503 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
4504 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
4505 if(tr->Pt() < fTrackPtCut) continue;
4506 }
4507
4508 list->Add(tr);
4509 iCount++;
4510 }
4511 }
4512
4513 if(type==kTrackAODCuts || type==kTrackAODQualityCuts || type==kTrackAOD || type==kTrackAODExtraCuts || type==kTrackAODExtra){
4514
4515 // all rec. tracks, esd filter mask, eta range
4516
4517 for(Int_t it=0; it<fAOD->GetNumberOfTracks(); ++it){
4518 AliAODTrack *tr = fAOD->GetTrack(it);
4519
4520 if(type == kTrackAODCuts || type==kTrackAODQualityCuts || type==kTrackAODExtraCuts){
4521
4522 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
4523 if(type == kTrackAODCuts){
4524 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
4525 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
4526 if(tr->Pt() < fTrackPtCut) continue;
4527 }
4528 }
4529 list->Add(tr);
4530 iCount++;
4531 }
4532 }
4533 else if (type==kTrackKineAll || type==kTrackKineCharged || type==kTrackKineChargedAcceptance){
4534 // kine particles, all or rather charged
4535 if(!fMCEvent) return iCount;
4536
4537 for(Int_t it=0; it<fMCEvent->GetNumberOfTracks(); ++it){
4538 AliMCParticle* part = (AliMCParticle*) fMCEvent->GetTrack(it);
4539
4540 if(type == kTrackKineCharged || type == kTrackKineChargedAcceptance){
4541 if(part->Charge()==0) continue;
4542
4543 if(type == kTrackKineChargedAcceptance &&
4544 ( part->Eta() < fTrackEtaMin
4545 || part->Eta() > fTrackEtaMax
4546 || part->Phi() < fTrackPhiMin
4547 || part->Phi() > fTrackPhiMax
4548 || part->Pt() < fTrackPtCut)) continue;
4549 }
4550
4551 list->Add(part);
4552 iCount++;
4553 }
4554 }
4555 else if (type==kTrackAODMCCharged || type==kTrackAODMCAll || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSec) {
4556 // MC particles (from AOD), physical primaries, all or rather charged or rather charged within acceptance
4557 if(!fAOD) return -1;
4558
4559 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
4560 if(!tca)return iCount;
4561
4562 for(int it=0; it<tca->GetEntriesFast(); ++it){
4563 AliAODMCParticle *part = dynamic_cast<AliAODMCParticle*>(tca->At(it));
4564 if(!part)continue;
4565 if(type != kTrackAODMCChargedSec && !part->IsPhysicalPrimary())continue;
4566 if(type == kTrackAODMCChargedSec && part->IsPhysicalPrimary())continue;
4567
4568 if (type==kTrackAODMCCharged || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSec){
4569 if(part->Charge()==0) continue;
4570 if(type==kTrackAODMCChargedAcceptance &&
4571 ( part->Eta() > fTrackEtaMax
4572 || part->Eta() < fTrackEtaMin
4573 || part->Phi() > fTrackPhiMax
4574 || part->Phi() < fTrackPhiMin
4575 || part->Pt() < fTrackPtCut)) continue;
4576 }
4577
4578 list->Add(part);
4579 iCount++;
4580 }
4581 }
4582
4583 list->Sort();
4584 return iCount;
4585
4586}
4587// _______________________________________________________________________________
4588Int_t AliAnalysisTaskFragmentationFunction::GetListOfJets(TList *list, Int_t type)
4589{
4590 // fill list of jets selected according to type
4591
4592 if(!list){
4593 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
4594 return -1;
4595 }
4596
4597 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
4598
4599 if(fBranchRecJets.Length()==0){
4600 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
4601 if(fDebug>1)fAOD->Print();
4602 return 0;
4603 }
4604
4605 TClonesArray *aodRecJets = 0;
4606 if(fBranchRecJets.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchRecJets.Data()));
4607 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchRecJets.Data()));
4608 if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchRecJets.Data()));
4609
4610 if(!aodRecJets){
4611 if(fBranchRecJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecJets.Data());
4612 if(fDebug>1)fAOD->Print();
4613 return 0;
4614 }
4615
4616 // Reorder jet pt and fill new temporary AliAODJet objects
4617 Int_t nRecJets = 0;
4618
4619 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
4620
4621 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
4622 if(!tmp) continue;
4623
4624 if( tmp->Pt() < fJetPtCut ) continue;
4625 if( type == kJetsRecAcceptance &&
4626 ( tmp->Eta() < fJetEtaMin
4627 || tmp->Eta() > fJetEtaMax
4628 || tmp->Phi() < fJetPhiMin
4629 || tmp->Phi() > fJetPhiMax )) continue;
4630
4631 if(fBckgSubMethod && fBranchRecJets.Contains("B0") &&
4632 fBranchRecJets.Contains("KT")) {
4633
4634 AliAODJet *tmpJet = GetAODBckgSubJet(tmp, fBckgSubMethod);
4635
4636 if(!tmpJet) continue;
4637
4638 list->Add(tmpJet);
4639
4640 nRecJets++;
4641 }
4642 else {
4643 list->Add(tmp);
4644
4645 nRecJets++;
4646 }
4647 }
4648
4649 list->Sort();
4650
4651 return nRecJets;
4652 }
4653 else if(type == kJetsKine || type == kJetsKineAcceptance){
4654
4655 // generated jets
4656 Int_t nGenJets = 0;
4657
4658 if(!fMCEvent){
4659 if(fDebug>1) Printf("%s:%d no mcEvent",(char*)__FILE__,__LINE__);
4660 return 0;
4661 }
4662
4663 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
4664 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
4665 AliGenHijingEventHeader* hijingGenHeader = 0x0;
4666
4667 if(!pythiaGenHeader){
4668 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
4669
4670 if(!hijingGenHeader){
4671 Printf("%s:%d no pythiaGenHeader or hijingGenHeader found", (char*)__FILE__,__LINE__);
4672 return 0;
4673 }else{
4674 TLorentzVector mom[4];
4675 AliAODJet* jet[4];
4676 hijingGenHeader->GetJets(mom[0], mom[1], mom[2], mom[3]);
4677
4678 for(Int_t i=0; i<2; ++i){
4679 if(!mom[i].Pt()) continue;
4680 jet[i] = new AliAODJet(mom[i]);
4681
4682 if( type == kJetsKineAcceptance &&
4683 ( jet[i]->Eta() < fJetEtaMin
4684 || jet[i]->Eta() > fJetEtaMax
4685 || jet[i]->Phi() < fJetPhiMin
4686 || jet[i]->Phi() > fJetPhiMax )) continue;
4687
4688 list->Add(jet[i]);
4689 nGenJets++;
4690 }
4691 list->Sort();
4692 return nGenJets;
4693 }
4694 }
4695
4696 // fetch the pythia generated jets
4697 for(int ip=0; ip<pythiaGenHeader->NTriggerJets(); ++ip){
4698
4699 Float_t p[4];
4700 AliAODJet *jet = new AliAODJet();
4701 pythiaGenHeader->TriggerJet(ip, p);
4702 jet->SetPxPyPzE(p[0], p[1], p[2], p[3]);
4703
4704 if( type == kJetsKineAcceptance &&
4705 ( jet->Eta() < fJetEtaMin
4706 || jet->Eta() > fJetEtaMax
4707 || jet->Phi() < fJetPhiMin
4708 || jet->Phi() > fJetPhiMax )) continue;
4709
4710 list->Add(jet);
4711 nGenJets++;
4712 }
4713 list->Sort();
4714 return nGenJets;
4715 }
4716 else if(type == kJetsGen || type == kJetsGenAcceptance ){
4717
4718 if(fBranchGenJets.Length()==0){
4719 if(fDebug>1) Printf("%s:%d no gen jet branch specified", (char*)__FILE__,__LINE__);
4720 return 0;
4721 }
4722
4723 TClonesArray *aodGenJets = 0;
4724 if(fBranchGenJets.Length()) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchGenJets.Data()));
4725 if(!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchGenJets.Data()));
4726 if(fAODExtension&&!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchGenJets.Data()));
4727
4728 if(!aodGenJets){
4729 if(fDebug>0){
4730 if(fBranchGenJets.Length()) Printf("%s:%d Generated jet branch %s not found",(char*)__FILE__,__LINE__,fBranchGenJets.Data());
4731 }
4732 if(fDebug>1)fAOD->Print();
4733 return 0;
4734 }
4735
4736 Int_t nGenJets = 0;
4737
4738 for(Int_t ig=0; ig<aodGenJets->GetEntries(); ++ig){
4739
4740 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodGenJets->At(ig));
4741 if(!tmp) continue;
4742
4743 if( tmp->Pt() < fJetPtCut ) continue;
4744 if( type == kJetsGenAcceptance &&
4745 ( tmp->Eta() < fJetEtaMin
4746 || tmp->Eta() > fJetEtaMax
4747 || tmp->Phi() < fJetPhiMin
4748 || tmp->Phi() > fJetPhiMax )) continue;
4749
4750 list->Add(tmp);
4751 nGenJets++;
4752 }
4753 list->Sort();
4754 return nGenJets;
4755 }
4756 else if(type == kJetsEmbedded){ // embedded jets
4757
4758 if(fBranchEmbeddedJets.Length()==0){
4759 Printf("%s:%d no embedded jet branch specified", (char*)__FILE__,__LINE__);
4760 if(fDebug>1)fAOD->Print();
4761 return 0;
4762 }
4763
4764 TClonesArray *aodEmbeddedJets = 0;
4765 if(fBranchEmbeddedJets.Length()) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchEmbeddedJets.Data()));
4766 if(!aodEmbeddedJets) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchEmbeddedJets.Data()));
4767 if(fAODExtension&&!aodEmbeddedJets) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchEmbeddedJets.Data()));
4768
4769 if(!aodEmbeddedJets){
4770 if(fBranchEmbeddedJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchEmbeddedJets.Data());
4771 if(fDebug>1)fAOD->Print();
4772 return 0;
4773 }
4774
4775 // Reorder jet pt and fill new temporary AliAODJet objects
4776 Int_t nEmbeddedJets = 0;
4777
4778 for(Int_t ij=0; ij<aodEmbeddedJets->GetEntries(); ++ij){
4779
4780 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodEmbeddedJets->At(ij));
4781 if(!tmp) continue;
4782
4783 if( tmp->Pt() < fJetPtCut ) continue;
4784 if( tmp->Eta() < fJetEtaMin
4785 || tmp->Eta() > fJetEtaMax
4786 || tmp->Phi() < fJetPhiMin
4787 || tmp->Phi() > fJetPhiMax ) continue;
4788
4789 list->Add(tmp);
4790 nEmbeddedJets++;
4791 }
4792
4793 list->Sort();
4794
4795 return nEmbeddedJets;
4796 }
4797 else{
4798 if(fDebug>0)Printf("%s:%d no such type %d",(char*)__FILE__,__LINE__,type);
4799 return 0;
4800 }
4801}
4802
4803// ___________________________________________________________________________________
4804Int_t AliAnalysisTaskFragmentationFunction::GetListOfBckgJets(TList *list, Int_t type)
4805{
4806 // fill list of bgr clusters selected according to type
4807
4808 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
4809
4810 if(fBranchRecBckgClusters.Length()==0){
4811 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
4812 if(fDebug>1)fAOD->Print();
4813 return 0;
4814 }
4815
4816 TClonesArray *aodRecJets = 0;
4817 if(fBranchRecBckgClusters.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchRecBckgClusters.Data()));
4818 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchRecBckgClusters.Data()));
4819 if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchRecBckgClusters.Data()));
4820
4821 if(!aodRecJets){
4822 if(fBranchRecBckgClusters.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecBckgClusters.Data());
4823 if(fDebug>1)fAOD->Print();
4824 return 0;
4825 }
4826
4827 // Reorder jet pt and fill new temporary AliAODJet objects
4828 Int_t nRecJets = 0;
4829
4830 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
4831
4832 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
4833 if(!tmp) continue;
4834
4835 // if( tmp->Pt() < fJetPtCut ) continue; // no pt cut on bckg clusters !
4836 if( type == kJetsRecAcceptance &&
4837 ( tmp->Eta() < fJetEtaMin
4838 || tmp->Eta() > fJetEtaMax
4839 || tmp->Phi() < fJetPhiMin
4840 || tmp->Phi() > fJetPhiMax )) continue;
4841
4842 list->Add(tmp);
4843
4844 nRecJets++;
4845
4846 }
4847
4848 list->Sort();
4849
4850 return nRecJets;
4851 }
4852
4853 // /*
4854 // MC clusters still Under construction
4855 // */
4856
4857 return 0;
4858}
4859
4860// _________________________________________________________________________________________________________
4861void AliAnalysisTaskFragmentationFunction::SetProperties(THnSparse* h,const Int_t dim, const char** labels)
4862{
4863 // Set properties of THnSparse
4864
4865 for(Int_t i=0; i<dim; i++){
4866 h->GetAxis(i)->SetTitle(labels[i]);
4867 h->GetAxis(i)->SetTitleColor(1);
4868 }
4869}
4870
4871// __________________________________________________________________________________________
4872void AliAnalysisTaskFragmentationFunction::SetProperties(TH1* h,const char* x, const char* y)
4873{
4874 //Set properties of histos (x and y title)
4875
4876 h->SetXTitle(x);
4877 h->SetYTitle(y);
4878 h->GetXaxis()->SetTitleColor(1);
4879 h->GetYaxis()->SetTitleColor(1);
4880}
4881
4882// _________________________________________________________________________________________________________
4883void AliAnalysisTaskFragmentationFunction::SetProperties(TH1* h,const char* x, const char* y, const char* z)
4884{
4885 //Set properties of histos (x,y and z title)
4886
4887 h->SetXTitle(x);
4888 h->SetYTitle(y);
4889 h->SetZTitle(z);
4890 h->GetXaxis()->SetTitleColor(1);
4891 h->GetYaxis()->SetTitleColor(1);
4892 h->GetZaxis()->SetTitleColor(1);
4893}
4894
4895// ________________________________________________________________________________________________________________________________________________________
4896void AliAnalysisTaskFragmentationFunction::GetJetTracksPointing(TList* inputlist, TList* outputlist, const AliAODJet* jet, const Double_t radius,Double_t& sumPt)
4897{
4898 // fill list of tracks in cone around jet axis
4899
4900 sumPt = 0;
4901
4902 Double_t jetMom[3];
4903 jet->PxPyPz(jetMom);
4904 TVector3 jet3mom(jetMom);
4905
4906 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
4907
4908 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
4909 if(!track)continue;
4910 Double_t trackMom[3];
4911 track->PxPyPz(trackMom);
4912 TVector3 track3mom(trackMom);
4913
4914 Double_t dR = jet3mom.DeltaR(track3mom);
4915
4916 if(dR<radius){
4917
4918 outputlist->Add(track);
4919
4920 sumPt += track->Pt();
4921 }
4922 }
4923
4924 outputlist->Sort();
4925}
4926
4927// ___________________________________________________________________________________________
4928void AliAnalysisTaskFragmentationFunction::GetJetTracksTrackrefs(TList* list, const AliAODJet* jet)
4929{
4930 // list of jet tracks from trackrefs
4931
4932 Int_t nTracks = jet->GetRefTracks()->GetEntriesFast();
4933
4934 for (Int_t itrack=0; itrack<nTracks; itrack++) {
4935
4936 AliVParticle* track = dynamic_cast<AliVParticle*>(jet->GetRefTracks()->At(itrack));
4937 if(!track){
4938 AliError("expected ref track not found ");
4939 continue;
4940 }
4941
4942 list->Add(track);
4943 }
4944
4945 list->Sort();
4946}
4947
4948// _ ________________________________________________________________________________________________________________________________
4949void AliAnalysisTaskFragmentationFunction::AssociateGenRec(TList* tracksAODMCCharged,TList* tracksRec, TArrayI& indexAODTr,TArrayI& indexMCTr,
4950 TArrayS& isRefGen,TH2F* fh2PtRecVsGen)
4951{
4952 // associate generated and reconstructed tracks, fill TArrays of list indices
4953
4954 Int_t nTracksRec = tracksRec->GetSize();
4955 Int_t nTracksGen = tracksAODMCCharged->GetSize();
4956 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
4957
4958
4959 if(!nTracksGen) return;
4960 if(!tca) return;
4961
4962 // set size
4963 indexAODTr.Set(nTracksGen);
4964 indexMCTr.Set(nTracksRec);
4965 isRefGen.Set(nTracksGen);
4966
4967 indexAODTr.Reset(-1);
4968 indexMCTr.Reset(-1);
4969 isRefGen.Reset(0);
4970
4971 // loop over reconstructed tracks, get generated track
4972
4973 for(Int_t iRec=0; iRec<nTracksRec; iRec++){
4974
4975 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
4976 if(!rectrack)continue;
4977 Int_t label = TMath::Abs(rectrack->GetLabel());
4978
4979 // find MC track in our list
4980 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tca->At(label));
4981
4982 Int_t listIndex = -1;
4983 if(gentrack) listIndex = tracksAODMCCharged->IndexOf(gentrack);
4984
4985 if(listIndex>=0){
4986
4987 indexAODTr[listIndex] = iRec;
4988 indexMCTr[iRec] = listIndex;
4989 }
4990 }
4991
4992
4993 // define reference sample of primaries/secondaries (for reconstruction efficiency / contamination)
4994
4995 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
4996
4997 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksAODMCCharged->At(iGen));
4998 if(!gentrack)continue;
4999 Int_t pdg = gentrack->GetPdgCode();
5000
5001 // 211 - pi, 2212 - proton, 321 - Kaon, 11 - electron, 13 - muon
5002 if(TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 ||
5003 TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13){
5004
5005 isRefGen[iGen] = kTRUE;
5006
5007 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
5008
5009 if(iRec>=0){
5010 Float_t genPt = gentrack->Pt();
5011 AliAODTrack* vt = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
5012 if(vt){
5013 Float_t recPt = vt->Pt();
5014 fh2PtRecVsGen->Fill(genPt,recPt);
5015 }
5016 }
5017 }
5018 }
5019}
5020
5021// _____________________________________________________________________________________________________________________________________________
5022void AliAnalysisTaskFragmentationFunction::FillSingleTrackHistosRecGen(AliFragFuncQATrackHistos* trackQAGen, AliFragFuncQATrackHistos* trackQARec, TList* tracksGen,
5023 const TArrayI& indexAODTr, const TArrayS& isRefGen){
5024
5025 // fill QA for single track reconstruction efficiency
5026
5027 Int_t nTracksGen = tracksGen->GetSize();
5028
5029 if(!nTracksGen) return;
5030
5031 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
5032
5033 if(isRefGen[iGen] != 1) continue; // select primaries
5034
5035 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
5036 if(!gentrack) continue;
5037 Double_t ptGen = gentrack->Pt();
5038 Double_t etaGen = gentrack->Eta();
5039 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5040
5041 // apply same acc & pt cuts as for FF
5042
5043 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5044 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5045 if(ptGen < fTrackPtCut) continue;
5046
5047 if(trackQAGen) trackQAGen->FillTrackQA(etaGen, phiGen, ptGen);
5048
5049
5050 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
5051 if(iRec>=0 && trackQARec) trackQARec->FillTrackQA(etaGen, phiGen, ptGen);
5052 }
5053}
5054
5055// ______________________________________________________________________________________________________________________________________________________
5056
5057void AliAnalysisTaskFragmentationFunction::FillJetTrackHistosRecGen(TObject* histGen,TObject* histRec,Double_t jetPtGen,Double_t jetPtRec, TList* jetTrackList, const TList* tracksGen,
5058 const TArrayI& indexAODTr,const TArrayS& isRefGen, const Bool_t useRecJetPt)
5059{
5060 // fill objects for jet track reconstruction efficiency or secondaries contamination
5061 // arguments histGen/histRec can be of different type: AliFragFuncHistos*, AliFragFuncIntraJetHistos*, ...
5062
5063 Int_t nTracksJet = jetTrackList->GetSize(); // list with AODMC tracks
5064
5065 if(!nTracksJet) return;
5066
5067 Bool_t incrementJetPtGenFF = kTRUE; // needed in case we fill FFHistos
5068 Bool_t incrementJetPtRecFF = kTRUE; // needed in case we fill FFHistos
5069
5070 for(Int_t iTr=0; iTr<nTracksJet; iTr++){
5071
5072 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (jetTrackList->At(iTr));
5073 if(!gentrack)continue;
5074 // find jet track in gen tracks list
5075 Int_t iGen = tracksGen->IndexOf(gentrack);
5076
5077 if(iGen<0){
5078 if(fDebug>0) Printf("%s:%d gen jet track not found ",(char*)__FILE__,__LINE__);
5079 continue;
5080 }
5081
5082
5083 if(isRefGen[iGen] != 1) continue; // select primaries
5084
5085 Double_t ptGen = gentrack->Pt();
5086 Double_t etaGen = gentrack->Eta();
5087 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5088
5089 // apply same acc & pt cuts as for FF
5090
5091 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5092 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5093 if(ptGen < fTrackPtCut) continue;
5094
5095 Double_t z = ptGen / jetPtGen;
5096 Double_t xi = 0;
5097 if(z>0) xi = TMath::Log(1/z);
5098
5099 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
5100 Bool_t isRec = (iRec>=0) ? kTRUE : kFALSE;
5101
5102 if(dynamic_cast<AliFragFuncHistos*>(histGen) || dynamic_cast<AliFragFuncHistos*>(histRec)){ // histGen can be NULL for secondaries -> ||
5103
5104 // after checking can afford normal cast
5105 AliFragFuncHistos* ffhistGen = (AliFragFuncHistos*) (histGen);
5106 AliFragFuncHistos* ffhistRec = (AliFragFuncHistos*) (histRec);
5107
5108 if(ffhistGen){
5109 if(useRecJetPt) ffhistGen->FillFF( ptGen, jetPtRec, incrementJetPtGenFF );
5110 else ffhistGen->FillFF( ptGen, jetPtGen, incrementJetPtGenFF );
5111
5112 incrementJetPtGenFF = kFALSE;
5113 }
5114
5115
5116 if(ffhistRec && isRec){
5117
5118 if(useRecJetPt) ffhistRec->FillFF( ptGen, jetPtRec, incrementJetPtRecFF );
5119 else ffhistRec->FillFF( ptGen, jetPtGen, incrementJetPtRecFF );
5120
5121 incrementJetPtRecFF = kFALSE;
5122 }
5123 }
5124 else if(dynamic_cast<AliFragFuncIntraJetHistos*>(histGen) && dynamic_cast<AliFragFuncIntraJetHistos*>(histRec)){
5125
5126 // eff for IJ histos ...
5127
5128 }
5129 }
5130}
5131
5132// _____________________________________________________________________________________________________________________________________________
5133void AliAnalysisTaskFragmentationFunction::FillTwoTrackHistosRecGen(TList* tracksGen, /*TList* tracksRec, const TArrayI& indexAODTr, */ const TArrayS& isRefGen){
5134
5135 Int_t nTracksGen = tracksGen->GetSize();
5136
5137 if(!nTracksGen) return;
5138
5139 Int_t highPtIndices[nTracksGen];
5140 Int_t nHighPt = 0;
5141
5142 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
5143
5144 if(isRefGen[iGen] != 1) continue; // select primaries
5145
5146 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
5147 if(!gentrack) continue;
5148 Double_t ptGen = gentrack->Pt();
5149 Double_t etaGen = gentrack->Eta();
5150 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5151
5152 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5153 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5154
5155 if(ptGen>10 ){
5156 highPtIndices[nHighPt++] = iGen;
5157 }
5158 }
5159
5160
5161 for(Int_t nHPT = 0; nHPT<nHighPt; nHPT++){ // high pt tracks loop
5162
5163 Int_t indexHPT = highPtIndices[nHPT];
5164
5165 AliAODMCParticle* genHPTtrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(indexHPT));
5166 if(!genHPTtrack) continue;
5167
5168 Double_t trackMomHPT[3];
5169 genHPTtrack->PxPyPz(trackMomHPT);
5170 TVector3 track3MomHPT(trackMomHPT);
5171
5172
5173 Double_t distNN = 10;
5174 Double_t ptNN = 0;
5175 Int_t indexNN = -1;
5176
5177 for(Int_t iGen=0; iGen<nTracksGen; iGen++){ // all gen tracks loop
5178
5179 if(isRefGen[iGen] != 1) continue; // select primaries
5180
5181 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
5182 if(!gentrack) continue;
5183
5184 Double_t ptGen = gentrack->Pt();
5185 Double_t etaGen = gentrack->Eta();
5186 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5187
5188 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5189 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5190 if(ptGen < fTrackPtCut) continue;
5191
5192
5193 Double_t gentrackMom[3];
5194 gentrack->PxPyPz(gentrackMom);
5195 TVector3 gentrack3Mom(gentrackMom);
5196
5197 Double_t dR = gentrack3Mom.DeltaR(track3MomHPT);
5198
5199 if(iGen != indexHPT && dR<distNN){
5200 distNN = dR;
5201 ptNN = ptGen;
5202 indexNN = iGen;
5203 }
5204 }
5205 }
5206}
5207
5208// _____________________________________________________________________________________________________________________________________________
5209void AliAnalysisTaskFragmentationFunction::FillSingleTrackResponse(THnSparse* hnResponse, TList* tracksGen, TList* tracksRec,
5210 const TArrayI& indexAODTr, const TArrayS& isGenPrim)
5211{
5212 // fill response matrix for single tracks
5213
5214
5215 Int_t nTracksGen = tracksGen->GetSize();
5216
5217 if(!nTracksGen) return;
5218
5219 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
5220
5221 if(isGenPrim[iGen] != 1) continue; // select primaries
5222
5223 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
5224 if(!gentrack)continue;
5225 Double_t ptGen = gentrack->Pt();
5226 Double_t etaGen = gentrack->Eta();
5227 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5228
5229 // apply same acc & pt cuts as for FF
5230 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5231 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5232 if(ptGen < fTrackPtCut) continue;
5233
5234 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
5235 if(iRec>=0){
5236 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
5237 if(!rectrack)continue;
5238 Double_t ptRec = rectrack->Pt();
5239
5240 Double_t entries[2] = {ptRec,ptGen}; // AliCorrFW convention: gen vs rec
5241 hnResponse->Fill(entries);
5242
5243 Double_t invPtGen = 0;
5244 if(ptGen) invPtGen = 1/ptGen;
5245
5246 Double_t invPtRec = 0;
5247 if(ptRec) invPtRec = 1/ptRec;
5248
5249 fh2SingleInvPtRecMnGenVsPtGen->Fill(ptGen,invPtRec - invPtGen);
5250 }
5251 }
5252}
5253
5254
5255// ______________________________________________________________________________________________________________________________________________________
5256void AliAnalysisTaskFragmentationFunction::FillJetTrackResponse(THnSparse* hnResponsePt, THnSparse* hnResponseZ, THnSparse* hnResponseXi,
5257 Double_t jetPtGen, Double_t jetPtRec, TList* jetTrackList,
5258 const TList* tracksGen, TList* tracksRec, const TArrayI& indexAODTr, const TArrayS& isGenPrim,const Bool_t useRecJetPt)
5259{
5260 // fill response matrix for tracks in jets
5261
5262 Int_t nTracksJet = jetTrackList->GetSize(); // list with AODMC tracks
5263
5264 if(!nTracksJet) return;
5265
5266 for(Int_t iTr=0; iTr<nTracksJet; iTr++){
5267
5268 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (jetTrackList->At(iTr));
5269 if(!gentrack)continue;
5270 // find jet track in gen tracks list
5271 Int_t iGen = tracksGen->IndexOf(gentrack);
5272
5273 if(iGen<0){
5274 if(fDebug>0) Printf("%s:%d gen jet track not found ",(char*)__FILE__,__LINE__);
5275 continue;
5276 }
5277
5278 if(isGenPrim[iGen] != 1) continue; // select primaries
5279
5280 Double_t ptGen = gentrack->Pt();
5281 Double_t etaGen = gentrack->Eta();
5282 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5283
5284 // apply same acc & pt cuts as for FF
5285
5286 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5287 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5288 if(ptGen < fTrackPtCut) continue;
5289
5290 Double_t zGen = ptGen / jetPtRec;
5291 Double_t xiGen = 0;
5292 if(zGen>0) xiGen = TMath::Log(1/zGen);
5293
5294 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
5295
5296 if(iRec>=0){
5297
5298 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
5299 if(rectrack){
5300 Double_t ptRec = rectrack->Pt();
5301
5302 Double_t zRec = ptRec / jetPtRec;
5303 Double_t xiRec = 0;
5304 if(zRec>0) xiRec = TMath::Log(1/zRec);
5305
5306 Double_t jetPt = useRecJetPt ? jetPtRec : jetPtGen;
5307
5308 Double_t entriesPt[3] = {jetPt,ptRec,ptGen}; // AliCorrFW convention: gen vs rec
5309 Double_t entriesZ[3] = {jetPt,zRec,zGen};
5310 Double_t entriesXi[3] = {jetPt,xiRec,xiGen};
5311
5312 hnResponsePt->Fill(entriesPt);
5313 hnResponseZ->Fill(entriesZ);
5314 hnResponseXi->Fill(entriesXi);
5315 }
5316 }
5317 }
5318}
5319
5320// _____________________________________________________________________________________________________________________________________________________________________
5321void AliAnalysisTaskFragmentationFunction::GetTracksTiltedwrpJetAxis(Float_t alpha, TList* inputlist, TList* outputlist, const AliAODJet* jet, Double_t radius,Double_t& sumPt)
5322{
5323 // List of tracks in cone perpendicular to the jet azimuthal direction
5324
5325 Double_t jetMom[3];
5326 jet->PxPyPz(jetMom);
5327
5328 TVector3 jet3mom(jetMom);
5329 // Rotate phi and keep eta unchanged
5330 Double_t etaTilted = jet3mom.Eta();
5331 Double_t phiTilted = TVector2::Phi_0_2pi(jet3mom.Phi()) + alpha;
5332 if(phiTilted > 2*TMath::Pi()) phiTilted = phiTilted - 2*TMath::Pi();
5333
5334 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
5335
5336 // embedded tracks
5337 if( fUseExtraTracksBgr != 1){
5338 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
5339 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5340 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5341 }
5342 }
5343
5344 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
5345 if(!track)continue;
5346 Double_t trackMom[3];
5347 track->PxPyPz(trackMom);
5348 TVector3 track3mom(trackMom);
5349
5350 Double_t deta = track3mom.Eta() - etaTilted;
5351 Double_t dphi = TMath::Abs(track3mom.Phi() - phiTilted);
5352 if (dphi > TMath::Pi()) dphi = 2. * TMath::Pi() - dphi;
5353 Double_t dR = TMath::Sqrt(deta * deta + dphi * dphi);
5354
5355 if(dR<=radius){
5356 outputlist->Add(track);
5357 sumPt += track->Pt();
5358 }
5359 }
5360
5361}
5362
5363// ________________________________________________________________________________________________________________________________________________________
5364void AliAnalysisTaskFragmentationFunction::GetTracksTiltedwrpJetAxisWindow(Float_t alpha, TList* inputlist, TList* outputlist, const AliAODJet* jet, Double_t radius,Double_t& sumPt,Double_t &normFactor)
5365{
5366 // List of tracks in cone perpendicular to the jet azimuthal direction
5367
5368 Double_t jetMom[3];
5369 jet->PxPyPz(jetMom);
5370
5371 TVector3 jet3mom(jetMom);
5372 // Rotate phi and keep eta unchanged
5373 Double_t etaTilted = jet3mom.Eta();
5374 Double_t phiTilted = TVector2::Phi_0_2pi(jet3mom.Phi()) + alpha;
5375 if(phiTilted > 2*TMath::Pi()) phiTilted = phiTilted - 2*TMath::Pi();
5376
5377 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++)
5378 {
5379
5380 // embedded tracks
5381 if( fUseExtraTracksBgr != 1){
5382 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
5383 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5384 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5385 }
5386 }
5387
5388 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
5389 if(!track)continue;
5390 Float_t trackEta = track->Eta();
5391 Float_t trackPhi = track->Phi();
5392
5393 if( ( phiTilted-radius >= 0 ) && ( phiTilted+radius <= 2*TMath::Pi()))
5394 {
5395 if((trackPhi<=phiTilted+radius) &&
5396 (trackPhi>=phiTilted-radius) &&
5397 (trackEta<=fTrackEtaMax)&&(trackEta>=fTrackEtaMin)) // 0.9 and - 0.9
5398 {
5399 outputlist->Add(track);
5400 sumPt += track->Pt();
5401 }
5402 }
5403 else if( phiTilted-radius < 0 )
5404 {
5405 if((( trackPhi < phiTilted+radius ) ||
5406 ( trackPhi > 2*TMath::Pi()-(radius-phiTilted) )) &&
5407 (( trackEta <= fTrackEtaMax ) && ( trackEta >= fTrackEtaMin )))
5408 {
5409 outputlist->Add(track);
5410 sumPt += track->Pt();
5411 }
5412 }
5413 else if( phiTilted+radius > 2*TMath::Pi() )
5414 {
5415 if((( trackPhi > phiTilted-radius ) ||
5416 ( trackPhi < phiTilted+radius-2*TMath::Pi() )) &&
5417 (( trackEta <= fTrackEtaMax ) && ( trackEta >= fTrackEtaMin )))
5418 {
5419 outputlist->Add(track);
5420 sumPt += track->Pt();
5421 }
5422 }
5423 }
5424
5425 // Jet area - Temporarily added should be modified with the proper jet area value
5426 Float_t areaJet = CalcJetArea(etaTilted,radius);
5427 Float_t areaTilted = 2*radius*(fTrackEtaMax-fTrackEtaMin);
5428
5429 normFactor = (Float_t) 1. / (areaJet / areaTilted);
5430
5431}
5432
5433
5434// ________________________________________________________________________________________________________________________________________________________
5435void AliAnalysisTaskFragmentationFunction::GetTracksOutOfNJets(Int_t nCases, TList* inputlist, TList* outputlist, TList* jetlist, Double_t& sumPt)
5436{
5437 // List of tracks outside cone around N jet axis
5438 // Particles taken randomly
5439
5440 sumPt = 0;
5441 // Int_t nj = jetlist->GetSize();
5442 Float_t rc = GetFFRadius();
5443 Float_t rcl = GetFFBckgRadius();
5444
5445 // Estimate jet and background areas
5446 Float_t* areaJet = new Float_t[nCases];
5447 memset(areaJet, 0, sizeof(Float_t) * nCases);
5448 Float_t* areaJetLarge = new Float_t[nCases];
5449 memset(areaJetLarge, 0, sizeof(Float_t) * nCases);
5450 Float_t areaFull = (fTrackEtaMax-fTrackEtaMin)*(fTrackPhiMax-fTrackPhiMin);
5451 Float_t areaOut = areaFull;
5452
5453 //estimate jets and background areas
5454 Int_t nOut = 0;
5455 Int_t ijet = 0;
5456 TList* templist = new TList();
5457 TClonesArray *vect3Jet = new TClonesArray("TVector3",nCases);
5458
5459 for(Int_t ij=0; ij<nCases; ++ij)
5460 {
5461 // Get jet information
5462 AliAODJet* jet = dynamic_cast<AliAODJet*>(jetlist->At(ij));
5463 if(!jet)continue;
5464 TVector3 jet3mom;
5465 jet3mom.SetPtEtaPhi(jet->Pt(),jet->Eta(),jet->Phi());
5466 new((*vect3Jet)[ijet]) TVector3((TVector3)jet3mom);
5467 Float_t etaJet = (Float_t)((TVector3*) vect3Jet->At(ij))->Eta();
5468
5469 // Jet area
5470 areaJet[ij] = CalcJetArea(etaJet,rc);
5471
5472 // Area jet larger angle
5473 areaJetLarge[ij] = CalcJetArea(etaJet,rcl);
5474
5475 // Outside jet area
5476 areaOut = areaOut - areaJetLarge[ij];
5477 ijet++;
5478 }
5479
5480 // List of all tracks outside jet areas
5481 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
5482
5483 // embedded tracks
5484 if( fUseExtraTracksBgr != 1){
5485 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
5486 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5487 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5488 }
5489 }
5490
5491 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
5492 if(!track)continue;
5493 Double_t trackMom[3];
5494 track->PxPyPz(trackMom);
5495 TVector3 track3mom(trackMom);
5496
5497 Double_t *dR = new Double_t[nCases];
5498 for(Int_t ij=0; ij<nCases; ij++)
5499 dR[ij] = (Double_t)((TVector3*) vect3Jet->At(ij))->DeltaR(track3mom);
5500
5501 if((nCases==1 && (dR[0]>rcl)) ||
5502 (nCases==2 && (dR[0]>rcl && dR[1]>rcl)) ||
5503 (nCases==3 && (dR[0]>rcl && dR[1]>rcl && dR[2]>rcl)))
5504 {
5505 templist->Add(track);
5506 nOut++;
5507 }
5508 delete [] dR;
5509 }
5510
5511 // Take tracks randomly
5512 Int_t nScaled = (Int_t) (nOut * areaJet[0] / areaOut + 0.5);
5513 TArrayI* ar = new TArrayI(nOut);
5514
5515 for(Int_t init=0; init<nOut; init++)
5516 (*ar)[init] = init;
5517
5518 Int_t *randIndex = new Int_t[nScaled];
5519 for(Int_t init2=0; init2<nScaled; init2++)
5520 randIndex[init2] = -1;
5521
5522 // Select nScaled different random numbers in nOut
5523 for(Int_t i=0; i<nScaled; i++)
5524 {
5525 Int_t* tmpArr = new Int_t[nOut-i];
5526 Int_t temp = fRandom->Integer(nOut-i);
5527 for(Int_t ind = 0; ind< ar->GetSize()-1; ind++)
5528 {
5529 if(ind<temp) tmpArr[ind] = (*ar)[ind];
5530 else tmpArr[ind] = (*ar)[ind+1];
5531 }
5532 randIndex[i] = (*ar)[temp];
5533
5534 ar->Set(nOut-i-1,tmpArr);
5535
5536 delete [] tmpArr;
5537
5538 }
5539
5540 for(Int_t ipart=0; ipart<nScaled; ipart++)
5541 {
5542 AliVParticle* track = (AliVParticle*)(templist->At(randIndex[ipart]));
5543 outputlist->Add(track);
5544 sumPt += track->Pt();
5545 }
5546
5547 outputlist->Sort();
5548
5549 delete vect3Jet;
5550 delete templist;
5551 delete [] areaJetLarge;
5552 delete [] areaJet;
5553 delete ar;
5554 delete [] randIndex;
5555
5556}
5557
5558// ________________________________________________________________________________________________________________________________________________________
5559void AliAnalysisTaskFragmentationFunction::GetTracksOutOfNJetsStat(Int_t nCases, TList* inputlist, TList* outputlist, TList* jetlist, Double_t& sumPt, Double_t &normFactor)
5560{
5561 // List of tracks outside cone around N jet axis
5562 // All particles taken + final scaling factor
5563
5564 sumPt = 0;
5565 Float_t rc = GetFFRadius();
5566 Float_t rcl = GetFFBckgRadius();
5567
5568 // Estimate jet and background areas
5569 Float_t* areaJet = new Float_t[nCases];
5570 memset(areaJet, 0, sizeof(Float_t) * nCases);
5571 Float_t* areaJetLarge = new Float_t[nCases];
5572 memset(areaJetLarge, 0, sizeof(Float_t) * nCases);
5573 Float_t areaFull = (fTrackEtaMax-fTrackEtaMin)*(fTrackPhiMax-fTrackPhiMin);
5574 Float_t areaOut = areaFull;
5575
5576 //estimate jets and background areas
5577 Int_t nOut = 0;
5578 Int_t ijet = 0;
5579 TClonesArray *vect3Jet = new TClonesArray("TVector3",nCases);
5580
5581 for(Int_t ij=0; ij<nCases; ++ij)
5582 {
5583 // Get jet information
5584 AliAODJet* jet = dynamic_cast<AliAODJet*>(jetlist->At(ij));
5585 if(!jet)continue;
5586 TVector3 jet3mom;
5587 jet3mom.SetPtEtaPhi(jet->Pt(),jet->Eta(),jet->Phi());
5588 new((*vect3Jet)[ijet]) TVector3((TVector3)jet3mom);
5589 Float_t etaJet = (Float_t)((TVector3*) vect3Jet->At(ij))->Eta();
5590
5591 // Jet area
5592 areaJet[ij] = CalcJetArea(etaJet,rc);
5593
5594 // Area jet larger angle
5595 areaJetLarge[ij] = CalcJetArea(etaJet,rcl);
5596
5597 // Outside jets area
5598 areaOut = areaOut - areaJetLarge[ij];
5599 ijet++;
5600 }
5601
5602 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
5603
5604 // embedded tracks
5605 if( fUseExtraTracksBgr != 1){
5606 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
5607 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5608 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5609 }
5610 }
5611
5612 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
5613 if(!track)continue;
5614 Double_t trackMom[3];
5615 track->PxPyPz(trackMom);
5616 TVector3 track3mom(trackMom);
5617
5618 Double_t *dR = new Double_t[nCases];
5619 for(Int_t ij=0; ij<nCases; ij++)
5620 dR[ij] = (Double_t)((TVector3*) vect3Jet->At(ij))->DeltaR(track3mom);
5621
5622 if((nCases==0) ||
5623 (nCases==1 && (dR[0]>rcl)) ||
5624 (nCases==2 && (dR[0]>rcl && dR[1]>rcl)) ||
5625 (nCases==3 && (dR[0]>rcl && dR[1]>rcl && dR[2]>rcl)))
5626 {
5627 outputlist->Add(track);
5628 sumPt += track->Pt();
5629 nOut++;
5630 }
5631 delete [] dR;
5632 }
5633
5634 if(nCases==0) areaJet[0] = TMath::Pi()*rc*rc;
5635 normFactor = (Float_t) 1./(areaJet[0] / areaOut);
5636
5637 outputlist->Sort();
5638
5639 delete vect3Jet;
5640 delete [] areaJetLarge;
5641 delete [] areaJet;
5642
5643}
5644
5645// ______________________________________________________________________________________________________________________________________________________
5646Float_t AliAnalysisTaskFragmentationFunction::CalcJetArea(const Float_t etaJet, const Float_t rc) const
5647{
5648 // calculate area of jet with eta etaJet and radius rc
5649
5650 Float_t detamax = etaJet + rc;
5651 Float_t detamin = etaJet - rc;
5652 Float_t accmax = 0.0; Float_t accmin = 0.0;
5653 if(detamax > fTrackEtaMax){ // sector outside etamax
5654 Float_t h = fTrackEtaMax - etaJet;
5655 accmax = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
5656 }
5657 if(detamin < fTrackEtaMin){ // sector outside etamin
5658 Float_t h = fTrackEtaMax + etaJet;
5659 accmin = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
5660 }
5661 Float_t areaJet = rc*rc*TMath::Pi() - accmax - accmin;
5662
5663 return areaJet;
5664
5665}
5666
5667// ___________________________________________________________________________________________________________________________
5668void AliAnalysisTaskFragmentationFunction::GetClusterTracksOutOf1Jet(AliAODJet* jet, TList* outputlist, Double_t &normFactor)
5669{
5670 // fill tracks from bckgCluster branch in list,
5671 // for all clusters outside jet cone
5672 // sum up total area of clusters
5673
5674 Double_t rc = GetFFRadius();
5675 Double_t rcl = GetFFBckgRadius();
5676
5677 Double_t areaTotal = 0;
5678 Double_t sumPtTotal = 0;
5679
5680 for(Int_t ij=0; ij<fBckgJetsRec->GetEntries(); ++ij){
5681
5682 AliAODJet* bgrCluster = (AliAODJet*)(fBckgJetsRec->At(ij)); // not 'recCuts': use all clusters in full eta range
5683
5684 Double_t dR = jet->DeltaR(bgrCluster);
5685
5686 if(dR<rcl) continue;
5687
5688 Double_t clusterPt = bgrCluster->Pt();
5689 Double_t area = bgrCluster->EffectiveAreaCharged();
5690 areaTotal += area;
5691 sumPtTotal += clusterPt;
5692
5693 Int_t nTracksJet = bgrCluster->GetRefTracks()->GetEntries();
5694
5695 for(Int_t it = 0; it<nTracksJet; it++){
5696
5697 // embedded tracks - note: using ref tracks here, fBranchRecBckgClusters has to be consistent
5698 if( fUseExtraTracksBgr != 1){
5699 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (bgrCluster->GetTrack(it))){
5700 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5701 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5702 }
5703 }
5704
5705 AliVParticle* track = dynamic_cast<AliVParticle*>(bgrCluster->GetTrack(it));
5706 if(!track) continue;
5707
5708 Float_t trackPt = track->Pt();
5709 Float_t trackEta = track->Eta();
5710 Float_t trackPhi = TVector2::Phi_0_2pi(track->Phi());
5711
5712 if(trackEta < fTrackEtaMin || trackEta > fTrackEtaMax) continue;
5713 if(trackPhi < fTrackPhiMin || trackPhi > fTrackPhiMax) continue;
5714 if(trackPt < fTrackPtCut) continue;
5715
5716 outputlist->Add(track);
5717 }
5718 }
5719
5720 Double_t areaJet = TMath::Pi()*rc*rc;
5721 if(areaTotal) normFactor = (Float_t) 1./(areaJet / areaTotal);
5722
5723 outputlist->Sort();
5724}
5725
5726// _______________________________________________________________________________________________________________________
5727void AliAnalysisTaskFragmentationFunction::GetClusterTracksMedian(TList* outputlist, Double_t &normFactor)
5728{
5729 // fill tracks from bckgCluster branch,
5730 // using cluster with median density (odd number of clusters)
5731 // or picking randomly one of the two closest to median (even number)
5732
5733 normFactor = 0;
5734
5735 Int_t nBckgClusters = fBckgJetsRec->GetEntries(); // not 'recCuts': use all clusters in full eta range
5736
5737 if(nBckgClusters<3) return; // need at least 3 clusters (skipping 2 highest)
5738
5739 Double_t* bgrDensity = new Double_t[nBckgClusters];
5740 Int_t* indices = new Int_t[nBckgClusters];
5741
5742 for(Int_t ij=0; ij<nBckgClusters; ++ij){
5743
5744 AliAODJet* bgrCluster = (AliAODJet*)(fBckgJetsRec->At(ij));
5745 Double_t clusterPt = bgrCluster->Pt();
5746 Double_t area = bgrCluster->EffectiveAreaCharged();
5747
5748 Double_t density = 0;
5749 if(area>0) density = clusterPt/area;
5750
5751 bgrDensity[ij] = density;
5752 indices[ij] = ij;
5753 }
5754
5755 TMath::Sort(nBckgClusters, bgrDensity, indices);
5756
5757 // get median cluster
5758
5759 AliAODJet* medianCluster = 0;
5760 Double_t medianDensity = 0;
5761
5762 if(TMath::Odd(nBckgClusters)){
5763
5764 Int_t medianIndex = indices[(Int_t) (0.5*(nBckgClusters-1))];
5765 medianCluster = (AliAODJet*)(fBckgJetsRec->At(medianIndex));
5766
5767 Double_t clusterPt = medianCluster->Pt();
5768 Double_t area = medianCluster->EffectiveAreaCharged();
5769
5770 if(area>0) medianDensity = clusterPt/area;
5771 }
5772 else{
5773
5774 Int_t medianIndex1 = indices[(Int_t) (0.5*nBckgClusters-1)];
5775 Int_t medianIndex2 = indices[(Int_t) (0.5*nBckgClusters)];
5776
5777 AliAODJet* medianCluster1 = (AliAODJet*)(fBckgJetsRec->At(medianIndex1));
5778 AliAODJet* medianCluster2 = (AliAODJet*)(fBckgJetsRec->At(medianIndex2));
5779
5780 Double_t density1 = 0;
5781 Double_t clusterPt1 = medianCluster1->Pt();
5782 Double_t area1 = medianCluster1->EffectiveAreaCharged();
5783 if(area1>0) density1 = clusterPt1/area1;
5784
5785 Double_t density2 = 0;
5786 Double_t clusterPt2 = medianCluster2->Pt();
5787 Double_t area2 = medianCluster2->EffectiveAreaCharged();
5788 if(area2>0) density2 = clusterPt2/area2;
5789
5790 medianDensity = 0.5*(density1+density2);
5791
5792 medianCluster = ( (fRandom->Rndm()>0.5) ? medianCluster1 : medianCluster2 ); // select one randomly to avoid adding areas
5793 }
5794
5795 Int_t nTracksJet = medianCluster->GetRefTracks()->GetEntries();
5796
5797 for(Int_t it = 0; it<nTracksJet; it++){
5798
5799 // embedded tracks - note: using ref tracks here, fBranchRecBckgClusters has to be consistent
5800 if( fUseExtraTracksBgr != 1){
5801 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (medianCluster->GetTrack(it))){
5802 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5803 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5804 }
5805 }
5806
5807 AliVParticle* track = dynamic_cast<AliVParticle*>(medianCluster->GetTrack(it));
5808 if(!track) continue;
5809
5810 Float_t trackPt = track->Pt();
5811 Float_t trackEta = track->Eta();
5812 Float_t trackPhi = TVector2::Phi_0_2pi(track->Phi());
5813
5814 if(trackEta < fTrackEtaMin || trackEta > fTrackEtaMax) continue;
5815 if(trackPhi < fTrackPhiMin || trackPhi > fTrackPhiMax) continue;
5816 if(trackPt < fTrackPtCut) continue;
5817
5818 outputlist->Add(track);
5819 }
5820
5821 Double_t areaMedian = medianCluster->EffectiveAreaCharged();
5822 Double_t areaJet = TMath::Pi()*GetFFRadius()*GetFFRadius();
5823
5824 if(areaMedian) normFactor = (Float_t) 1./(areaJet / areaMedian);
5825
5826 outputlist->Sort();
5827
5828 delete[] bgrDensity;
5829 delete[] indices;
5830}
5831
5832// ______________________________________________________________________________________________________________________________________________________
5833void AliAnalysisTaskFragmentationFunction::FillBckgHistos(Int_t type, TList* inputtracklist, TList* inputjetlist, AliAODJet* jet, Float_t leadTrackPt, TLorentzVector* leadTrackV,
5834 AliFragFuncHistos* ffbckghistocuts, AliFragFuncHistos* ffbckghistoleading,
5835 AliFragFuncIntraJetHistos* ijbckghistocuts, AliFragFuncIntraJetHistos* ijbckghistoleading,
5836 AliFragFuncQATrackHistos* qabckghistocuts){
5837
5838 // List of tracks outside jets for background study
5839 TList* tracklistout2jets = new TList();
5840 TList* tracklistout3jets = new TList();
5841 TList* tracklistout2jetsStat = new TList();
5842 TList* tracklistout3jetsStat = new TList();
5843 Double_t sumPtOut2Jets = 0.;
5844 Double_t sumPtOut3Jets = 0.;
5845 Double_t sumPtOut2JetsStat = 0.;
5846 Double_t sumPtOut3JetsStat = 0.;
5847 Double_t normFactor2Jets = 0.;
5848 Double_t normFactor3Jets = 0.;
5849
5850 Int_t nRecJetsCuts = fJetsRecCuts->GetEntries();
5851
5852 if(nRecJetsCuts>1) {
5853 GetTracksOutOfNJets(2,inputtracklist, tracklistout2jets, inputjetlist, sumPtOut2Jets);
5854 GetTracksOutOfNJetsStat(2,inputtracklist, tracklistout2jetsStat, inputjetlist,sumPtOut2JetsStat, normFactor2Jets);
5855
5856 }
5857 if(nRecJetsCuts>2) {
5858 GetTracksOutOfNJets(3,inputtracklist, tracklistout3jets, inputjetlist, sumPtOut3Jets);
5859 GetTracksOutOfNJetsStat(3,inputtracklist, tracklistout3jetsStat, inputjetlist, sumPtOut3JetsStat, normFactor3Jets);
5860 }
5861
5862 if(type==kBckgOutLJ || type==kBckgOutAJ)
5863 {
5864 TList* tracklistoutleading = new TList();
5865 Double_t sumPtOutLeading = 0.;
5866 GetTracksOutOfNJets(1,inputtracklist, tracklistoutleading, inputjetlist, sumPtOutLeading);
5867 if(type==kBckgOutLJ) fh1OutLeadingMult->Fill(tracklistoutleading->GetSize());
5868
5869 for(Int_t it=0; it<tracklistoutleading->GetSize(); ++it){
5870
5871 AliVParticle* trackVP = (AliVParticle*)(tracklistoutleading->At(it));
5872 if(!trackVP) continue;
5873 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5874
5875 Float_t jetPt = jet->Pt();
5876 Float_t trackPt = trackV->Pt();
5877
5878 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5879
5880 if(type==kBckgOutLJ)
5881 {
5882 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt);
5883 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
5884
5885 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt);
5886 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
5887
5888 // Fill track QA for background
5889 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
5890 }
5891
5892 // All cases included
5893 if(nRecJetsCuts==1 && type==kBckgOutAJ)
5894 {
5895 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
5896 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
5897
5898 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
5899 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
5900 }
5901 delete trackV;
5902 }
5903 // Increment jet pt with one entry in case #tracks outside jets = 0
5904 if(tracklistoutleading->GetSize()==0) {
5905 Float_t jetPt = jet->Pt();
5906 Bool_t incrementJetPt = kTRUE;
5907 if(type==kBckgOutLJ)
5908 {
5909 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
5910 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
5911 }
5912 // All cases included
5913 if(nRecJetsCuts==1 && type==kBckgOutAJ)
5914 {
5915 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
5916 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
5917 }
5918 }
5919 delete tracklistoutleading;
5920 }
5921 if(type==kBckgOutLJStat || type==kBckgOutAJStat)
5922 {
5923 TList* tracklistoutleadingStat = new TList();
5924 Double_t sumPtOutLeadingStat = 0.;
5925 Double_t normFactorLeading = 0.;
5926
5927 GetTracksOutOfNJetsStat(1,inputtracklist, tracklistoutleadingStat, inputjetlist, sumPtOutLeadingStat, normFactorLeading);
5928 if(type==kBckgOutLJStat) fh1OutLeadingStatMult->Fill(tracklistoutleadingStat->GetSize());
5929
5930 for(Int_t it=0; it<tracklistoutleadingStat->GetSize(); ++it){
5931
5932 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistoutleadingStat->At(it));
5933 if(!trackVP) continue;
5934 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5935
5936 Float_t jetPt = jet->Pt();
5937 Float_t trackPt = trackV->Pt();
5938 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5939
5940 // Stat plots
5941 if(type==kBckgOutLJStat)
5942 {
5943 if(fFFMode)ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorLeading);
5944 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactorLeading);
5945
5946 if(fFFMode)ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactorLeading);
5947 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactorLeading);
5948
5949 // Fill track QA for background
5950 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt); // OB added bgr QA
5951 }
5952
5953 // All cases included
5954 if(nRecJetsCuts==1 && type==kBckgOutAJStat)
5955 {
5956 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorLeading);
5957 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactorLeading );
5958
5959 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactorLeading);
5960 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactorLeading );
5961
5962 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
5963
5964 }
5965 delete trackV;
5966 }
5967 // Increment jet pt with one entry in case #tracks outside jets = 0
5968 if(tracklistoutleadingStat->GetSize()==0) {
5969 Float_t jetPt = jet->Pt();
5970 Bool_t incrementJetPt = kTRUE;
5971 if(type==kBckgOutLJStat)
5972 {
5973 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorLeading);
5974 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactorLeading);
5975 }
5976 // All cases included
5977 if(nRecJetsCuts==1 && type==kBckgOutLJStat)
5978 {
5979 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorLeading);
5980 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactorLeading );
5981 }
5982 }
5983
5984 delete tracklistoutleadingStat;
5985 }
5986
5987 if(type==kBckgPerp)
5988 {
5989 Double_t sumPtPerp = 0.;
5990 TList* tracklistperp = new TList();
5991 GetTracksTiltedwrpJetAxis(TMath::Pi()/2., inputtracklist,tracklistperp,jet,GetFFRadius(),sumPtPerp);
5992 fh1PerpMult->Fill(tracklistperp->GetSize());
5993
5994 for(Int_t it=0; it<tracklistperp->GetSize(); ++it){
5995
5996 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistperp->At(it));
5997 if(!trackVP)continue;
5998 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5999
6000 Float_t jetPt = jet->Pt();
6001 Float_t trackPt = trackV->Pt();
6002
6003 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6004
6005 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
6006 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6007
6008 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
6009 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6010
6011 // Fill track QA for background
6012 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
6013
6014 delete trackV;
6015 }
6016 // Increment jet pt with one entry in case #tracks outside jets = 0
6017 if(tracklistperp->GetSize()==0) {
6018 Float_t jetPt = jet->Pt();
6019 Bool_t incrementJetPt = kTRUE;
6020 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6021 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6022 }
6023
6024 delete tracklistperp;
6025 }
6026
6027 if(type==kBckgASide)
6028 {
6029 Double_t sumPtASide = 0.;
6030 TList* tracklistaside = new TList();
6031 GetTracksTiltedwrpJetAxis(TMath::Pi(),inputtracklist,tracklistaside,jet,GetFFRadius(),sumPtASide);
6032 fh1ASideMult->Fill(tracklistaside->GetSize());
6033
6034 for(Int_t it=0; it<tracklistaside->GetSize(); ++it){
6035
6036 AliVParticle* trackVP = (AliVParticle*)(tracklistaside->At(it));
6037 if(!trackVP) continue;
6038 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6039
6040 Float_t jetPt = jet->Pt();
6041 Float_t trackPt = trackV->Pt();
6042
6043 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6044
6045 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
6046 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6047
6048 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
6049 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6050
6051 // Fill track QA for background
6052 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
6053
6054 delete trackV;
6055 }
6056 if(tracklistaside->GetSize()==0) {
6057 Float_t jetPt = jet->Pt();
6058 Bool_t incrementJetPt = kTRUE;
6059 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6060 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6061 }
6062
6063 delete tracklistaside;
6064 }
6065
6066 if(type==kBckgASideWindow)
6067 {
6068 Double_t normFactorASide = 0.;
6069 Double_t sumPtASideW = 0.;
6070 TList* tracklistasidew = new TList();
6071 GetTracksTiltedwrpJetAxisWindow(TMath::Pi(),inputtracklist,tracklistasidew,jet,GetFFRadius(),sumPtASideW,normFactorASide);
6072 fh1ASideWindowMult->Fill(tracklistasidew->GetSize());
6073
6074 for(Int_t it=0; it<tracklistasidew->GetSize(); ++it){
6075
6076 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistasidew->At(it));
6077 if(!trackVP) continue;
6078 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6079
6080 Float_t jetPt = jet->Pt();
6081 Float_t trackPt = trackV->Pt();
6082 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6083
6084 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorASide);
6085 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactorASide);
6086
6087 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactorASide );
6088 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactorASide );
6089
6090 // Fill track QA for background
6091 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt, kFALSE, normFactorASide);
6092
6093 delete trackV;
6094 }
6095 if(tracklistasidew->GetSize()==0) {
6096 Float_t jetPt = jet->Pt();
6097 Bool_t incrementJetPt = kTRUE;
6098 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorASide);
6099 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactorASide);
6100 }
6101
6102 delete tracklistasidew;
6103 }
6104
6105 if(type==kBckgPerpWindow)
6106 {
6107 Double_t normFactorPerp = 0.;
6108 Double_t sumPtPerpW = 0.;
6109 TList* tracklistperpw = new TList();
6110 GetTracksTiltedwrpJetAxisWindow(TMath::Pi()/2.,inputtracklist,tracklistperpw,jet,GetFFRadius(),sumPtPerpW,normFactorPerp);
6111 fh1PerpWindowMult->Fill(tracklistperpw->GetSize());
6112
6113 for(Int_t it=0; it<tracklistperpw->GetSize(); ++it){
6114
6115 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistperpw->At(it));
6116 if(!trackVP) continue;
6117 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6118
6119 Float_t jetPt = jet->Pt();
6120 Float_t trackPt = trackV->Pt();
6121 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6122
6123 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorPerp);
6124 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactorPerp);
6125
6126 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactorPerp );
6127 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactorPerp );
6128
6129 // Fill track QA for background
6130 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt, kFALSE, normFactorPerp);
6131
6132 delete trackV;
6133 }
6134 if(tracklistperpw->GetSize()==0) {
6135 Float_t jetPt = jet->Pt();
6136 Bool_t incrementJetPt = kTRUE;
6137 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorPerp);
6138 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactorPerp);
6139 }
6140
6141 delete tracklistperpw;
6142 }
6143
6144
6145 if(type==kBckgOut2J || type==kBckgOutAJ)
6146 {
6147 if(type==kBckgOut2J) fh1Out2JetsMult->Fill(tracklistout2jets->GetSize());
6148 for(Int_t it=0; it<tracklistout2jets->GetSize(); ++it){
6149
6150 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout2jets->At(it));
6151 if(!trackVP) continue;
6152 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6153
6154 Float_t jetPt = jet->Pt();
6155 Float_t trackPt = trackV->Pt();
6156
6157 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6158
6159 if(type==kBckgOut2J)
6160 {
6161 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
6162 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6163
6164 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
6165 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6166
6167 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
6168 }
6169
6170 // All cases included
6171 if(nRecJetsCuts==2 && type==kBckgOutAJ)
6172 {
6173 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
6174 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6175
6176 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
6177 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6178 }
6179 delete trackV;
6180 }
6181 // Increment jet pt with one entry in case #tracks outside jets = 0
6182 if(tracklistout2jets->GetSize()==0) {
6183 Float_t jetPt = jet->Pt();
6184 Bool_t incrementJetPt = kTRUE;
6185 if(type==kBckgOut2J)
6186 {
6187 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6188 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6189 }
6190 // All cases included
6191 if(nRecJetsCuts==2 && type==kBckgOutAJ)
6192 {
6193 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6194 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6195 }
6196 }
6197
6198 }
6199
6200 if(type==kBckgOut2JStat || type==kBckgOutAJStat)
6201 {
6202 for(Int_t it=0; it<tracklistout2jetsStat->GetSize(); ++it){
6203
6204 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout2jetsStat->At(it));
6205 if(!trackVP) continue;
6206 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6207
6208 Float_t jetPt = jet->Pt();
6209 Float_t trackPt = trackV->Pt();
6210 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6211
6212 if(type==kBckgOut2JStat)
6213 {
6214 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor2Jets);
6215 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactor2Jets );
6216
6217 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactor2Jets);
6218 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactor2Jets );
6219
6220 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
6221 }
6222
6223 // All cases included
6224 if(nRecJetsCuts==2 && type==kBckgOutAJStat)
6225 {
6226 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor2Jets);
6227 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactor2Jets );
6228
6229 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactor2Jets);
6230 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactor2Jets );
6231
6232 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
6233 }
6234 delete trackV;
6235 }
6236 // Increment jet pt with one entry in case #tracks outside jets = 0
6237 if(tracklistout2jetsStat->GetSize()==0) {
6238 Float_t jetPt = jet->Pt();
6239 Bool_t incrementJetPt = kTRUE;
6240 if(type==kBckgOut2JStat)
6241 {
6242 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor2Jets);
6243 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactor2Jets);
6244 }
6245 // All cases included
6246 if(nRecJetsCuts==2 && type==kBckgOutAJStat)
6247 {
6248 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor2Jets);
6249 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactor2Jets );
6250 }
6251 }
6252
6253 }
6254
6255 if(type==kBckgOut3J || type==kBckgOutAJ)
6256 {
6257 if(type==kBckgOut3J) fh1Out3JetsMult->Fill(tracklistout3jets->GetSize());
6258
6259 for(Int_t it=0; it<tracklistout3jets->GetSize(); ++it){
6260
6261 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout3jets->At(it));
6262 if(!trackVP) continue;
6263 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6264
6265 Float_t jetPt = jet->Pt();
6266 Float_t trackPt = trackV->Pt();
6267
6268 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6269
6270 if(type==kBckgOut3J)
6271 {
6272 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
6273 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6274
6275 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
6276 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6277
6278 qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
6279 }
6280
6281 // All cases included
6282 if(nRecJetsCuts==3 && type==kBckgOutAJ)
6283 {
6284 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
6285 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6286
6287 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
6288 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6289 }
6290 delete trackV;
6291 }
6292 // Increment jet pt with one entry in case #tracks outside jets = 0
6293 if(tracklistout3jets->GetSize()==0) {
6294 Float_t jetPt = jet->Pt();
6295 Bool_t incrementJetPt = kTRUE;
6296 if(type==kBckgOut3J)
6297 {
6298 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6299 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6300 }
6301 // All cases included
6302 if(nRecJetsCuts==3 && type==kBckgOutAJ)
6303 {
6304 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6305 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6306 }
6307 }
6308 }
6309
6310 if(type==kBckgOut3JStat || type==kBckgOutAJStat)
6311 {
6312 for(Int_t it=0; it<tracklistout3jetsStat->GetSize(); ++it){
6313
6314 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout3jetsStat->At(it));
6315 if(!trackVP) continue;
6316 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6317
6318 Float_t jetPt = jet->Pt();
6319 Float_t trackPt = trackV->Pt();
6320 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6321
6322 if(type==kBckgOut3JStat)
6323 {
6324 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor3Jets);
6325 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactor3Jets);
6326
6327 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactor3Jets);
6328 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactor3Jets);
6329
6330 //if(fQAMode&1) qabckghistocuts->FillTrackQA( trackEta, TVector2::Phi_0_2pi(trackPhi), trackPt);
6331 }
6332
6333 // All cases included
6334 if(nRecJetsCuts==3 && type==kBckgOutAJStat)
6335 {
6336 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor3Jets );
6337 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactor3Jets);
6338
6339 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactor3Jets );
6340 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactor3Jets );
6341
6342 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
6343
6344 }
6345 delete trackV;
6346 }
6347 // Increment jet pt with one entry in case #tracks outside jets = 0
6348 if(tracklistout3jetsStat->GetSize()==0) {
6349 Float_t jetPt = jet->Pt();
6350 Bool_t incrementJetPt = kTRUE;
6351 if(type==kBckgOut3JStat)
6352 {
6353 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor3Jets);
6354 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactor3Jets);
6355 }
6356 // All cases included
6357 if(nRecJetsCuts==3 && type==kBckgOutAJStat)
6358 {
6359 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor3Jets);
6360 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactor3Jets );
6361 }
6362 }
6363
6364 }
6365
6366 if(type==kBckgClustersOutLeading){ // clusters bgr: all tracks in clusters out of leading jet
6367
6368 TList* tracklistClustersOutLeading = new TList();
6369 Double_t normFactorClusters = 0;
6370 Float_t jetPt = jet->Pt();
6371
6372 GetClusterTracksOutOf1Jet(jet, tracklistClustersOutLeading, normFactorClusters);
6373 fh1OutClustersMult->Fill(tracklistClustersOutLeading->GetSize());
6374
6375 for(Int_t it=0; it<tracklistClustersOutLeading->GetSize(); ++it){
6376
6377 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistClustersOutLeading->At(it));
6378 if(!trackVP) continue;
6379 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6380
6381 Float_t trackPt = trackVP->Pt();
6382
6383 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6384
6385 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorClusters );
6386 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt );
6387
6388 delete trackV;
6389 }
6390
6391 delete tracklistClustersOutLeading;
6392
6393 }
6394
6395 if(type == kBckgClusters){ // clusters bgr: all tracks in 'median cluster'
6396
6397 TList* tracklistClustersMedian = new TList();
6398 Double_t normFactorClusters = 0;
6399 Float_t jetPt = jet->Pt();
6400
6401 GetClusterTracksMedian(tracklistClustersMedian, normFactorClusters);
6402 fh1MedianClustersMult->Fill(tracklistClustersMedian->GetSize());
6403
6404 for(Int_t it=0; it<tracklistClustersMedian->GetSize(); ++it){
6405
6406 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistClustersMedian->At(it));
6407 if(!trackVP) continue;
6408 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6409
6410 Float_t trackPt = trackVP->Pt();
6411
6412 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6413
6414 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorClusters );
6415 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt );
6416
6417 delete trackV;
6418 }
6419
6420 delete tracklistClustersMedian;
6421 }
6422
6423 delete tracklistout2jets;
6424 delete tracklistout3jets;
6425 delete tracklistout2jetsStat;
6426 delete tracklistout3jetsStat;
6427
6428}
6429
6430// ______________________________________________________________________________________________________________________________________________________
6431AliAODJet* AliAnalysisTaskFragmentationFunction::GetAODBckgSubJet(AliAODJet* jet, Int_t method)
6432{
6433 // correct jet pt for (mean bgr energy density) x (jet area)
6434
6435 if(!fBranchRecBackJets.Length()){
6436 if(fDebug>0)Printf("%s:%d background branch name not set",(char*)__FILE__,__LINE__);
6437 return 0;
6438 }
6439
6440 static AliAODJetEventBackground* externalBackground = (AliAODJetEventBackground*)(fAOD->FindListObject(fBranchRecBackJets.Data()));
6441
6442 if(!externalBackground){
6443 if(fDebug>0)Printf("%s:%d no external background object found in %s",(char*)__FILE__,__LINE__,fBranchRecBackJets.Data());
6444 return 0;
6445 }
6446
6447 Float_t rho = externalBackground->GetBackground(method);
6448
6449 // Calculate background and subtract it from jet pt
6450 Float_t ptBack = rho*jet->EffectiveAreaCharged();
6451 Float_t ptSub = jet->Pt()-ptBack;
6452
6453 // Get px, py, pz from eta, phi, pt
6454 TLorentzVector vecSub;
6455 AliAODJet *tmpJet = 0;
6456 if(ptSub>=0){
6457 vecSub.SetPtEtaPhiM(ptSub,jet->Eta(),jet->Phi(),0.);
6458 tmpJet = new AliAODJet(vecSub.Px(),vecSub.Py(),vecSub.Pz(),vecSub.P());
6459 }
6460
6461 return tmpJet;
6462}