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