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