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