]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGJE/AliAnalysisTaskFragmentationFunction.cxx
- FF task: switch for analysis of jets with max track
[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;
3841
3842 std::cout<<" here, isBadJet "<<isBadJet<<std::endl;
3843
3844 if(isBadJet) continue;
3845
656dc810 3846
39e2b057 3847 if(ptFractionEmbedded>=fCutFractionPtEmbedded){ // if no embedding: ptFraction = cutFraction = 0
3848
3849 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
3850
3851 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));
3852 if(!trackVP)continue;
3853 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
3af23c82 3854
39e2b057 3855 Float_t jetPt = jet->Pt();
3856 if(fUseEmbeddedJetPt){
3857 if(embeddedJet) jetPt = embeddedJet->Pt();
3858 else jetPt = 0;
3859 }
3860 Float_t trackPt = trackV->Pt();
3861
3862
3863 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
3af23c82 3864
39e2b057 3865 if(fFFMode) fFFHistosRecCuts->FillFF( trackPt, jetPt, incrementJetPt);
3866 if(fIJMode) fIJHistosRecCuts->FillIntraJet( trackV, jet->MomentumVector() );
3af23c82 3867
39e2b057 3868 if(it==0){ // leading track
3869 leadTrackPt = trackPt;
3870 leadTrackV->SetPxPyPzE(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
3871
3872 if(fFFMode) fFFHistosRecLeadingTrack->FillFF( leadTrackPt, jetPt, kTRUE);
3873 if(fIJMode) fIJHistosRecLeadingTrack->FillIntraJet( leadTrackV, jet->MomentumVector() );
3874 }
3875 if(fFFMode) fFFHistosRecLeading->FillFF( trackPt, leadTrackPt , incrementJetPt);
3876 if(fIJMode) fIJHistosRecLeading->FillIntraJet( trackV, leadTrackV );
3af23c82 3877
39e2b057 3878 delete trackV;
3af23c82 3879 }
39e2b057 3880
3881 // ff and ij for background study
3882 if(fBckgMode){
3883 if(fBckgType[0]!=-1)
3884 FillBckgHistos(fBckgType[0], fTracksRecCuts, fJetsRecCuts, jet, leadTrackPt, leadTrackV,
3885 fFFBckgHisto0RecCuts, fFFBckgHisto0RecLeading,
3886 fIJBckgHisto0RecCuts, fIJBckgHisto0RecLeading,
3887 fQABckgHisto0RecCuts);
3888 if(fBckgType[1]!=-1)
3889 FillBckgHistos(fBckgType[1], fTracksRecCuts, fJetsRecCuts, jet, leadTrackPt, leadTrackV,
3890 fFFBckgHisto1RecCuts, fFFBckgHisto1RecLeading,
3891 fIJBckgHisto1RecCuts, fIJBckgHisto1RecLeading,
3892 fQABckgHisto1RecCuts);
3893 if(fBckgType[2]!=-1)
3894 FillBckgHistos(fBckgType[2], fTracksRecCuts, fJetsRecCuts, jet, leadTrackPt, leadTrackV,
3895 fFFBckgHisto2RecCuts, fFFBckgHisto2RecLeading,
3896 fIJBckgHisto2RecCuts, fIJBckgHisto2RecLeading,
3897 fQABckgHisto2RecCuts);
3898 if(fBckgType[3]!=-1)
3899 FillBckgHistos(fBckgType[3], fTracksRecCuts, fJetsRecCuts, jet, leadTrackPt, leadTrackV,
3900 fFFBckgHisto3RecCuts, fFFBckgHisto3RecLeading,
3901 fIJBckgHisto3RecCuts, fIJBckgHisto3RecLeading,
3902 fQABckgHisto3RecCuts);
3903 if(fBckgType[4]!=-1)
3904 FillBckgHistos(fBckgType[4], fTracksRecCuts, fJetsRecCuts, jet, leadTrackPt, leadTrackV,
3905 fFFBckgHisto4RecCuts, fFFBckgHisto4RecLeading,
3906 fIJBckgHisto4RecCuts, fIJBckgHisto4RecLeading,
3907 fQABckgHisto4RecCuts);
3908 } // end if(fBckgMode)
3909
3910
3911 // phi correlation
3912 if(fPhiCorrMode){
3913 for(Int_t it=0; it<nRecPartCuts; ++it){
3914 AliVParticle *part = (AliVParticle*)(fTracksRecCuts->At(it));
3915
3916 Float_t partEta = part->Eta();
3917 Float_t partPhi = part->Phi();
3918 Float_t partPt = part->Pt();
3919
3920 fPhiCorrHistosJetArea->FillTrackQA( partEta,
3921 TVector2::Phi_mpi_pi( jet->Phi() - partPhi ),
3922 partPt,
3923 kTRUE);
3924
3925 fPhiCorrHistosTransverseArea->FillTrackQA( partEta,
3926 TVector2::Phi_mpi_pi( jet->Phi() - partPhi + TMath::Pi()/2),
3927 partPt,
3928 kTRUE);
3929
3930 fPhiCorrHistosAwayArea->FillTrackQA( partEta,
3931 TVector2::Phi_mpi_pi( jet->Phi() - partPhi + TMath::Pi()),
3932 partPt,
3933 kTRUE);
3934 }
3935 } // end: phi-correlation
3936
3937 delete leadTrackV;
3938 delete jettracklist;
3939
3940 } // end: cut embedded ratio
3af23c82 3941 } // end: leading jet
3942 } // end: rec. jets after cuts
656dc810 3943
3af23c82 3944 // generated jets
3945 for(Int_t ij=0; ij<nGenJets; ++ij){
656dc810 3946
3af23c82 3947 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsGen->At(ij));
ab851c96 3948 if(!jet)continue;
3af23c82 3949 if(fQAMode&2) fQAJetHistosGen->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
656dc810 3950
3af23c82 3951 if(ij==0){ // leading jet
cb76764e 3952
3af23c82 3953 if(fQAMode&2) fQAJetHistosGenLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
cb76764e 3954
3af23c82 3955 TList* jettracklist = new TList();
3956 Double_t sumPt = 0.;
6daac008 3957 Bool_t isBadJet = kFALSE;
3af23c82 3958 Float_t leadTrackPt = 0.;
3959 TLorentzVector* leadTrackV = new TLorentzVector();
656dc810 3960
3af23c82 3961 if(GetFFRadius()<=0){
6daac008 3962 GetJetTracksTrackrefs(jettracklist, jet, GetFFMaxTrackPt(), isBadJet);
3af23c82 3963 } else {
6daac008 3964 GetJetTracksPointing(fTracksGen, jettracklist, jet, GetFFRadius(), sumPt, GetFFMaxTrackPt(), isBadJet);
656dc810 3965 }
3af23c82 3966
6daac008 3967 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;;
3968 if(isBadJet) continue;
3969
3af23c82 3970 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
3971
3972 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));
3973 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
3974
3975 Float_t jetPt = jet->Pt();
3976 Float_t trackPt = trackV->Pt();
3977
3978 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
3979
3980 if(fFFMode) fFFHistosGen->FillFF( trackPt, jetPt, incrementJetPt );
3981 if(fIJMode) fIJHistosGen->FillIntraJet( trackV, jet->MomentumVector() );
3982
3983 if(it==0){ // leading track
3984 leadTrackPt = trackPt;
3985 leadTrackV->SetPxPyPzE(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
3986
3987 if(fFFMode) fFFHistosGenLeadingTrack->FillFF( leadTrackPt, jetPt, kTRUE );
3988 if(fIJMode) fIJHistosGenLeadingTrack->FillIntraJet( leadTrackV, jet->MomentumVector() );
3989 }
3990 if(fFFMode) fFFHistosGenLeading->FillFF( trackPt, leadTrackPt, incrementJetPt );
3991 if(fIJMode) fIJHistosGenLeading->FillIntraJet( trackV, leadTrackV );
3992
3993 delete trackV;
3994 }
3995
3996 delete leadTrackV;
3997 delete jettracklist;
656dc810 3998 }
656dc810 3999 }
3af23c82 4000 } // end: QA, FF and intra-jet
656dc810 4001
4002 //_______ DiJet part _____________________________________________________
3af23c82 4003 if(fDJMode){
4004 if (nRecJetsCuts > 1)
656dc810 4005 {
1ea145ef 4006 AliAODJet* jet1 = (AliAODJet*)(fJetsRecCuts->At(0));
4007 AliAODJet* jet2 = (AliAODJet*)(fJetsRecCuts->At(1));
656dc810 4008
3af23c82 4009 // DiJet deltaphi calculation
4010 Double_t phi1 = TVector2::Phi_0_2pi(jet1->Phi());
4011 Double_t phi2 = TVector2::Phi_0_2pi(jet2->Phi());
4012 Double_t deltaPhi = TMath::Abs(phi1-phi2);
4013 if (deltaPhi > TMath::Pi() && deltaPhi < 2*TMath::Pi()) deltaPhi = 2*TMath::Pi() - deltaPhi;
4014
4015 // DiJet CDF cut calculation
4016 Double_t et1 = TMath::Abs(jet1->E()*TMath::Sin(jet1->Theta()));
4017 Double_t et2 = TMath::Abs(jet2->E()*TMath::Sin(jet2->Theta()));
4018 Double_t sumEt = et1 + et2;
4019 Double_t normEt1PlusEt2 = TMath::Sqrt(et1*et1+et2*et2+2*et1*et2*TMath::Cos(deltaPhi));
4020 Double_t ratio = (Double_t)(normEt1PlusEt2/sumEt);
4021
4022 // DiJet events selection
4023 Bool_t positionCut = 0;
4024 Bool_t positionEnergyCut = 0;
4025 Bool_t cdfCut = 0;
4026
4027 // Position cut :
4028 if (deltaPhi > fDiJetDeltaPhiCut) positionCut = 1;
4029 // Position-Energy cut :
4030 if ((deltaPhi > fDiJetDeltaPhiCut) && ((jet2->Pt()) >= fDiJetPtFractionCut*(jet1->Pt()))) positionEnergyCut = 1;
4031 // CDF cut :
4032 if (ratio < fDiJetCDFCut) cdfCut = 1;
4033
4034 Int_t go = 0;
4035
4036 if (fDiJetCut == 1 && positionCut == 1) go = 1;
4037 if (fDiJetCut == 2 && positionEnergyCut == 1) go = 1;
4038 if (fDiJetCut == 3 && cdfCut == 1) go = 1;
4039
4040 if (go)
656dc810 4041 {
3af23c82 4042 Double_t deltaEta = TMath::Abs(jet1->Eta()-jet2->Eta());
4043 Double_t deltaPt = TMath::Abs(jet1->Pt()-jet2->Pt());
4044 Double_t inbal = (jet1->Pt()-jet2->Pt())/(jet1->Pt()+jet2->Pt());
4045 Double_t meanEt = (Double_t)((et1+et2)/2.);
4046 Double_t invariantMass = (Double_t)InvMass(jet1,jet2);
656dc810 4047
3af23c82 4048 Double_t jetBin = GetDiJetBin(invariantMass, jet1->Pt(), meanEt, fDiJetKindBins);
656dc810 4049
3af23c82 4050 if (jetBin > 0)
656dc810 4051 {
3af23c82 4052 if(fDJMode&2) fQADiJetHistosRecCuts->FillDiJetQA(invariantMass, deltaPhi, deltaEta, deltaPt, inbal, jetBin);
4053
4054 if(fDJMode&1){
4055 TList* jettracklist1 = new TList();
4056 Double_t sumPt1 = 0.;
6daac008 4057 Bool_t isBadJet1 = kFALSE;
3af23c82 4058 Float_t leadTrackPt1 = 0;
4059
6daac008 4060
3af23c82 4061 TList* jettracklist2 = new TList();
4062 Double_t sumPt2 = 0.;
6daac008 4063 Bool_t isBadJet2 = kFALSE;
3af23c82 4064 Float_t leadTrackPt2 = 0;
4065
4066 if(GetFFRadius()<=0)
4067 {
6daac008 4068 GetJetTracksTrackrefs(jettracklist1, jet1, GetFFMaxTrackPt(), isBadJet1);
4069 GetJetTracksTrackrefs(jettracklist2, jet2, GetFFMaxTrackPt(), isBadJet2);
3af23c82 4070 }
4071 else
4072 {
6daac008 4073 GetJetTracksPointing(fTracksRecCuts, jettracklist1, jet1, GetFFRadius(), sumPt1, GetFFMaxTrackPt(), isBadJet1);
4074 GetJetTracksPointing(fTracksRecCuts, jettracklist2, jet2, GetFFRadius(), sumPt2, GetFFMaxTrackPt(), isBadJet2);
3af23c82 4075 }
4076
6daac008 4077
4078 if(GetFFMinNTracks()>0 && jettracklist1->GetSize()<=GetFFMinNTracks()) isBadJet1 = kTRUE;
4079 if(GetFFMinNTracks()>0 && jettracklist1->GetSize()<=GetFFMinNTracks()) isBadJet2 = kTRUE;
4080
4081 if(!(isBadJet1 || isBadJet2)){ // good jets
4082
4083 Int_t nTracks = jettracklist1->GetSize();
4084 if (jettracklist1->GetSize() < jettracklist2->GetSize()) nTracks = jettracklist2->GetSize();
3af23c82 4085
6daac008 4086 for(Int_t it=0; it<nTracks; ++it)
4087 {
4088 if (it < jettracklist1->GetSize())
4089 {
4090 AliVParticle *vp = (dynamic_cast<AliVParticle*> (jettracklist1->At(it)));
4091 Float_t trackPt1 = (vp?vp->Pt():0);
4092 Float_t jetPt1 = jet1->Pt();
4093
4094 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
3af23c82 4095
6daac008 4096 fFFDiJetHistosRecCuts->FillDiJetFF(1, trackPt1, jetPt1, jetBin, incrementJetPt);
4097 fFFDiJetHistosRecCuts->FillDiJetFF(0, trackPt1, jetPt1, jetBin, incrementJetPt);
4098
4099 if (it == 0)
4100 {
4101 leadTrackPt1 = trackPt1;
4102
4103 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(1, leadTrackPt1, jetPt1, jetBin, kTRUE);
4104 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(0, leadTrackPt1, jetPt1, jetBin, kTRUE);
4105 }
4106
4107 fFFDiJetHistosRecLeading->FillDiJetFF(1, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
4108 fFFDiJetHistosRecLeading->FillDiJetFF(0, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
4109 }
4110
4111 if (it < jettracklist2->GetSize())
4112 {
4113 Float_t trackPt2 = ((AliVParticle*)(jettracklist2->At(it)))->Pt();
4114 Float_t jetPt2 = jet2->Pt();
4115
4116 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4117
4118 fFFDiJetHistosRecCuts->FillDiJetFF(2, trackPt2, jetPt2, jetBin, incrementJetPt);
4119 fFFDiJetHistosRecCuts->FillDiJetFF(0, trackPt2, jetPt2, jetBin, incrementJetPt);
4120
4121 if (it == 0)
4122 {
4123 leadTrackPt2 = trackPt2;
4124
4125 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(2, leadTrackPt2, jetPt2, jetBin, kTRUE);
4126 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(0, leadTrackPt2, jetPt2, jetBin, kTRUE);
4127 }
4128
4129 fFFDiJetHistosRecLeading->FillDiJetFF(2, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
4130 fFFDiJetHistosRecLeading->FillDiJetFF(0, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
4131 }
4132 } // End loop on tracks
4133 }
3af23c82 4134
4135 delete jettracklist1;
4136 delete jettracklist2;
4137 }
4138 } // End if(jetBin > 0)
4139 else { Printf("Jet bins for di-jet studies not set !");}
4140 } // End if(go)
4141 } // End if(nRecJets > 1)
4142
4143 if (nGenJets > 1)
4144 {
4145 AliAODJet* jet1 = dynamic_cast<AliAODJet*>(fJetsGen->At(0));
4146 AliAODJet* jet2 = dynamic_cast<AliAODJet*>(fJetsGen->At(1));
ab851c96 4147 if(jet1&&jet2){
3af23c82 4148
4149 Double_t deltaPhi = 0;
4150 Double_t phi1 = TVector2::Phi_0_2pi(jet1->Phi());
4151 Double_t phi2 = TVector2::Phi_0_2pi(jet2->Phi());
4152 deltaPhi = TMath::Abs(phi1-phi2);
4153 if (deltaPhi > TMath::Pi() && deltaPhi < 2*TMath::Pi()) deltaPhi = 2*TMath::Pi() - deltaPhi;
4154
4155 Double_t et1 = TMath::Abs(jet1->E()*TMath::Sin(jet1->Theta()));
4156 Double_t et2 = TMath::Abs(jet2->E()*TMath::Sin(jet2->Theta()));
4157 Double_t sumEt = et1 + et2;
4158 Double_t normEt1PlusEt2 = TMath::Sqrt(et1*et1+et2*et2+2*et1*et2*TMath::Cos(deltaPhi));
4159 Double_t ratio = (Double_t)(normEt1PlusEt2/sumEt);
4160
4161 // DiJet events selection
4162 Bool_t positionCut = 0;
4163 Bool_t positionEnergyCut = 0;
4164 Bool_t cdfCut = 0;
4165
4166 // Position cut :
4167 if (deltaPhi > fDiJetDeltaPhiCut) positionCut = 1;
4168 // Position-Energy cut :
4169 if ((deltaPhi > fDiJetDeltaPhiCut) && ((jet2->Pt()) >= fDiJetPtFractionCut*(jet1->Pt()))) positionEnergyCut = 1;
4170 // CDF cut :
4171 if (ratio < fDiJetCDFCut) cdfCut = 1;
4172
4173 Int_t go = 0;
4174
4175 if (fDiJetCut == 1 && positionCut == 1) go = 1;
4176 if (fDiJetCut == 2 && positionEnergyCut == 1) go = 1;
4177 if (fDiJetCut == 3 && cdfCut == 1) go = 1;
4178
4179 if (go)
4180 {
4181 Double_t deltaEta = TMath::Abs(jet1->Eta()-jet2->Eta());
4182 Double_t deltaPt = TMath::Abs(jet1->Pt()-jet2->Pt());
4183 Double_t inbal = (jet1->Pt()-jet2->Pt())/(jet1->Pt()+jet2->Pt());
4184 Double_t meanEt = (Double_t)((et1+et2)/2.);
4185 Double_t invariantMass = (Double_t)InvMass(jet1,jet2);
656dc810 4186
3af23c82 4187 Double_t jetBin = GetDiJetBin(invariantMass, jet1->Pt(), meanEt, fDiJetKindBins);
656dc810 4188
3af23c82 4189 if(jetBin > 0)
656dc810 4190 {
3af23c82 4191 if(fDJMode&2) fQADiJetHistosGen->FillDiJetQA(invariantMass, deltaPhi, deltaEta, deltaPt, inbal, jetBin);
656dc810 4192
3af23c82 4193 if(fDJMode&1){
4194 TList* jettracklist1 = new TList();
4195 Double_t sumPt1 = 0.;
6daac008 4196 Bool_t isBadJet1 = kFALSE;
3af23c82 4197 Float_t leadTrackPt1 = 0.;
6daac008 4198
3af23c82 4199 TList* jettracklist2 = new TList();
4200 Double_t sumPt2 = 0.;
6daac008 4201 Bool_t isBadJet2 = kFALSE;
3af23c82 4202 Float_t leadTrackPt2 = 0.;
4203
4204 if(GetFFRadius()<=0)
4205 {
6daac008 4206 GetJetTracksTrackrefs(jettracklist1, jet1, GetFFMaxTrackPt(), isBadJet1);
4207 GetJetTracksTrackrefs(jettracklist2, jet2, GetFFMaxTrackPt(), isBadJet2);
3af23c82 4208 }
4209 else
4210 {
6daac008 4211 GetJetTracksPointing(fTracksGen, jettracklist1, jet1, GetFFRadius(), sumPt1, GetFFMaxTrackPt(), isBadJet1);
4212 GetJetTracksPointing(fTracksGen, jettracklist2, jet2, GetFFRadius(), sumPt2, GetFFMaxTrackPt(), isBadJet2);
3af23c82 4213 }
4214
3af23c82 4215
6daac008 4216 if(GetFFMinNTracks()>0 && jettracklist1->GetSize()<=GetFFMinNTracks()) isBadJet1 = kTRUE;
4217 if(GetFFMinNTracks()>0 && jettracklist1->GetSize()<=GetFFMinNTracks()) isBadJet2 = kTRUE;
4218
4219 if(!(isBadJet1 || isBadJet2)){ // good jets
4220
4221 Int_t nTracks = jettracklist1->GetSize();
4222 if (jettracklist1->GetSize() < jettracklist2->GetSize()) nTracks = jettracklist2->GetSize();
4223
4224 for(Int_t it=0; it<nTracks; ++it)
4225 {
4226 if (it < jettracklist1->GetSize())
4227 {
4228 Float_t trackPt1 = ((AliVParticle*)jettracklist1->At(it))->Pt();
4229 Float_t jetPt1 = jet1->Pt();
4230
4231 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4232
4233 fFFDiJetHistosGen->FillDiJetFF( 1, trackPt1, jetPt1, jetBin, incrementJetPt);
4234 fFFDiJetHistosGen->FillDiJetFF( 0, trackPt1, jetPt1, jetBin, incrementJetPt);
4235
4236 if(it==0)
4237 {
4238 leadTrackPt1 = trackPt1;
4239
4240 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 1, leadTrackPt1, jetPt1, jetBin, kTRUE);
4241 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 0, leadTrackPt1, jetPt1, jetBin, kTRUE);
4242 }
4243
4244 fFFDiJetHistosGenLeading->FillDiJetFF( 1, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
4245 fFFDiJetHistosGenLeading->FillDiJetFF( 0, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
4246 }
4247
4248 if (it < jettracklist2->GetSize())
4249 {
4250 Float_t trackPt2 = ((AliVParticle*)jettracklist2->At(it))->Pt();
4251 Float_t jetPt2 = jet2->Pt();
4252
4253 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4254
4255 fFFDiJetHistosGen->FillDiJetFF( 2, trackPt2, jetPt2, jetBin, incrementJetPt);
4256 fFFDiJetHistosGen->FillDiJetFF( 0, trackPt2, jetPt2, jetBin, incrementJetPt);
3af23c82 4257
6daac008 4258 if (it==0)
4259 {
4260 leadTrackPt2 = trackPt2;
4261
4262 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 2, leadTrackPt2, jetPt2, jetBin, kTRUE);
4263 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 0, leadTrackPt2, jetPt2, jetBin, kTRUE);
4264 }
3af23c82 4265
6daac008 4266 fFFDiJetHistosGenLeading->FillDiJetFF( 2, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
4267 fFFDiJetHistosGenLeading->FillDiJetFF( 0, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
4268 }
4269 } // End loop on tracks
4270 }
4271
3af23c82 4272 delete jettracklist1;
4273 delete jettracklist2;
4274 }
4275 } // End if(jetBin > 0)
4276 else { Printf("Jet bins for di-jet studies not set !");}
4277 } // End if (go)
ab851c96 4278 }// end if jet1 and jet2
3af23c82 4279 } // End if(nGenJets > 1)
4280 } // end: di-jet
656dc810 4281
fe343c6b 4282 // ____ efficiency _______________________________
4283
3af23c82 4284 if(fEffMode && (fJetTypeRecEff != kJetsUndef)){
cb76764e 4285
d5e8640d 4286 // arrays holding for each generated particle the reconstructed AOD track index & isPrimary flag, are initialized in AssociateGenRec(...) function
cb76764e 4287 TArrayI indexAODTr;
4288 TArrayS isGenPrim;
d5e8640d 4289
4290 // array holding for each reconstructed AOD track generated particle index, initialized in AssociateGenRec(...) function
cb76764e 4291 TArrayI indexMCTr;
d5e8640d 4292
4293 // ... and another set for secondaries (secondary MC tracks are stored in a different list)
4294 TArrayI indexAODTrSec;
4295 TArrayS isGenSec;
4296 TArrayI indexMCTrSec;
4297
cb76764e 4298 Int_t nTracksAODMCCharged = GetListOfTracks(fTracksAODMCCharged, kTrackAODMCCharged);
4299 if(fDebug>2)Printf("%s:%d selected AODMC tracks: %d ",(char*)__FILE__,__LINE__,nTracksAODMCCharged);
fe343c6b 4300
d5e8640d 4301 Int_t nTracksAODMCChargedSec = GetListOfTracks(fTracksAODMCChargedSec, kTrackAODMCChargedSec);
4302 if(fDebug>2)Printf("%s:%d selected AODMC secondary tracks: %d ",(char*)__FILE__,__LINE__,nTracksAODMCChargedSec);
4303
cb76764e 4304 Int_t nTracksRecQualityCuts = GetListOfTracks(fTracksRecQualityCuts, kTrackAODQualityCuts);
4305 if(fDebug>2)Printf("%s:%d selected rec tracks quality after cuts, full acceptance/pt : %d ",(char*)__FILE__,__LINE__,nTracksRecQualityCuts);
fe343c6b 4306
cb76764e 4307 // associate gen and rec tracks, store indices in TArrays
d5e8640d 4308 AssociateGenRec(fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,indexMCTr,isGenPrim,fh2PtRecVsGenPrim);
4309 AssociateGenRec(fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,indexMCTrSec,isGenSec,fh2PtRecVsGenSec);
fe343c6b 4310
cb76764e 4311 // single track eff
d5e8640d 4312 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGen,fQATrackHistosRecEffRec,fTracksAODMCCharged,indexAODTr,isGenPrim);
3af23c82 4313 if(fQAMode&1) FillSingleTrackResponse(fhnResponseSinglePt,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim);
4314
d5e8640d 4315 // secondaries
4316 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRec,fTracksAODMCChargedSec,indexAODTrSec,isGenSec);
fe343c6b 4317
39e2b057 4318 // high-pt occupancy effect
4319 FillTwoTrackHistosRecGen(fTracksAODMCCharged, /*fTracksRecQualityCuts,indexAODTr,*/ isGenPrim);
4320
cb76764e 4321 // jet track eff
fe343c6b 4322
cb76764e 4323 Double_t sumPtGenLeadingJetRecEff = 0;
d5e8640d 4324 Double_t sumPtGenLeadingJetSec = 0;
cb76764e 4325 Double_t sumPtRecLeadingJetRecEff = 0;
fe343c6b 4326
cb76764e 4327 for(Int_t ij=0; ij<nRecEffJets; ++ij){
4328
9939142f 4329 AliAODJet* jet = (AliAODJet*)(fJetsRecEff->At(ij));
6daac008 4330 Bool_t isBadJetGenPrim = kFALSE;
4331 Bool_t isBadJetGenSec = kFALSE;
4332 Bool_t isBadJetRec = kFALSE;
9939142f 4333
6daac008 4334
cb76764e 4335 if(ij==0){ // leading jet
4336
6daac008 4337 // for efficiency: gen tracks from pointing with gen/rec jet
d5e8640d 4338 TList* jettracklistGenPrim = new TList();
6daac008 4339 GetJetTracksPointing(fTracksAODMCCharged, jettracklistGenPrim, jet, GetFFRadius(), sumPtGenLeadingJetRecEff, GetFFMaxTrackPt(), isBadJetGenPrim);
d5e8640d 4340
4341 TList* jettracklistGenSec = new TList();
6daac008 4342 GetJetTracksPointing(fTracksAODMCChargedSec, jettracklistGenSec, jet, GetFFRadius(), sumPtGenLeadingJetSec, GetFFMaxTrackPt(), isBadJetGenSec);
4343
4344 // bin efficiency in jet pt bins using rec tracks
cb76764e 4345 TList* jettracklistRec = new TList();
6daac008 4346 GetJetTracksPointing(fTracksRecCuts,jettracklistRec, jet, GetFFRadius(), sumPtRecLeadingJetRecEff, GetFFMaxTrackPt(), isBadJetRec);
cb76764e 4347
4348 Double_t jetEta = jet->Eta();
4349 Double_t jetPhi = TVector2::Phi_0_2pi(jet->Phi());
4350
6daac008 4351 if(GetFFMinNTracks()>0 && jettracklistGenPrim->GetSize()<=GetFFMinNTracks()) isBadJetGenPrim = kTRUE;
4352 if(GetFFMinNTracks()>0 && jettracklistGenSec->GetSize()<=GetFFMinNTracks()) isBadJetGenSec = kTRUE;
4353 if(GetFFMinNTracks()>0 && jettracklistRec->GetSize()<=GetFFMinNTracks()) isBadJetRec = kTRUE;
4354
4355 if(isBadJetRec) continue;
4356
3af23c82 4357 if(fQAMode&2) fQAJetHistosRecEffLeading->FillJetQA( jetEta, jetPhi, sumPtGenLeadingJetRecEff );
4358
d5e8640d 4359 if(fFFMode) FillJetTrackHistosRecGen(fFFHistosRecEffGen,fFFHistosRecEffRec,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff,
4360 jettracklistGenPrim,fTracksAODMCCharged,indexAODTr,isGenPrim,fUseRecEffRecJetPtBins);
4361
3af23c82 4362 if(fFFMode) FillJetTrackResponse(fhnResponseJetTrackPt,fhnResponseJetZ,fhnResponseJetXi,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff,
d5e8640d 4363 jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,fUseResponseRecJetPtBins);
4364
4365 // secondaries: use jet pt from primaries
4366 if(fFFMode) FillJetTrackHistosRecGen(0x0,fFFHistosSecRec,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff,
4367 jettracklistGenSec,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,fUseRecEffRecJetPtBins);
742ee86c 4368
d5e8640d 4369 delete jettracklistGenPrim;
4370 delete jettracklistGenSec;
cb76764e 4371 delete jettracklistRec;
4372 }
4373 }
4374
2d1d1b60 4375
cb76764e 4376 // bckgr eff: complementary cones
2d1d1b60 4377
cb76764e 4378 if(0){
4379
4380 for(Int_t ij=0; ij<nRecEffJets; ++ij){
4381
4382 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRecEff->At(ij));
4383
4384 if(ij==0){ // leading jet
4385
4386 TList* perpjettracklistGen = new TList();
4387 Double_t sumPtGen = 0.;
4388
742ee86c 4389 GetTracksTiltedwrpJetAxis(TMath::Pi()/2.,fTracksGen, perpjettracklistGen, jet, GetFFRadius() , sumPtGen); // for efficiency: gen tracks perp to gen/rec jet
cb76764e 4390
4391 // here could be your histos !!!
4392 // FillJetTrackRecEffHisto(fFFBckgrPerpHistosRecEffGen,fFFBckgrPerpHistosRecEffRec,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff,perpjettracklistGen,
4393 // fTracksAODMCCharged,indexAODTr,isGenPrim,fUseRecEffRecJetPtBins);
4394
4395 delete perpjettracklistGen;
4396 }
4397 }
4398 }
2d1d1b60 4399
cb76764e 4400 // bgr eff: outside N leading jets
2d1d1b60 4401
cb76764e 4402 if(0){
fe343c6b 4403
cb76764e 4404 Int_t nCases = 1;
fe343c6b 4405
cb76764e 4406 TList* outjettracklistGen = new TList();
4407 Double_t sumPtGen = 0.;
4408
3af23c82 4409 GetTracksOutOfNJets(nCases, fTracksGen, outjettracklistGen, fJetsRecEff, sumPtGen); // for efficiency: gen tracks outide n gen/rec jets
cb76764e 4410
4411 // here could be your histos !!!
4412 // FillJetTrackRecEffHisto(fFFBckgrOutHistosRecEffGen,fFFBckgrOutHistosRecEffRec,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff,
4413 // outjettracklistGen,fTracksAODMCCharged,indexAODTr,isGenPrim,fUseRecEffRecJetPtBins);
fe343c6b 4414
cb76764e 4415 delete outjettracklistGen;
fe343c6b 4416 }
cb76764e 4417 }
4418
fe343c6b 4419 //___________________
4420
656dc810 4421 fTracksRec->Clear();
4422 fTracksRecCuts->Clear();
4423 fTracksGen->Clear();
fe343c6b 4424 fTracksAODMCCharged->Clear();
d5e8640d 4425 fTracksAODMCChargedSec->Clear();
fe343c6b 4426 fTracksRecQualityCuts->Clear();
4427
656dc810 4428 fJetsRec->Clear();
4429 fJetsRecCuts->Clear();
4430 fJetsGen->Clear();
fe343c6b 4431 fJetsRecEff->Clear();
39e2b057 4432 fJetsEmbedded->Clear();
4433
656dc810 4434
742ee86c 4435 if(fBckgMode &&
3170a3f8 4436 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
4437 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
4438 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
742ee86c 4439
67e37e80 4440 fBckgJetsRec->Clear();
4441 fBckgJetsRecCuts->Clear();
4442 fBckgJetsGen->Clear();
4443 }
4444
39e2b057 4445
656dc810 4446 //Post output data.
4447 PostData(1, fCommonHistList);
656dc810 4448}
4449
4450//________________________________________________________________________________________
fceb275f 4451Double_t AliAnalysisTaskFragmentationFunction::InvMass(const AliAODJet* jet1, const AliAODJet* jet2)
656dc810 4452{
fceb275f 4453 // cald DiJet inv mass
656dc810 4454
4455 Double_t invMass = 0.;
4456 invMass = TMath::Sqrt(pow(jet1->E()+jet2->E(),2) - pow(jet1->Px()+jet2->Px(),2) -
4457 pow(jet1->Py()+jet2->Py(),2) - pow(jet1->Pz()+jet2->Pz(),2));
4458
4459 return invMass;
4460
4461}
4462
4463//________________________________________________________________________________________
4464Double_t AliAnalysisTaskFragmentationFunction::GetDiJetBin(Double_t invMass, Double_t leadingJetPt, Double_t EtMean, Int_t kindBins)
4465{
fceb275f 4466 // calc DiJet bin according to kindBins parameter
4467
656dc810 4468 Double_t jetBinOk = 0.;
4469 Double_t jetBin = 0.;
4470
4471 Float_t stepInvMass = (fDiJetJetInvMassMax - fDiJetJetInvMassMin)/fDiJetNBinsJetInvMass;
4472 Float_t stepPt = (fDiJetJetPtMax - fDiJetJetPtMin)/fDiJetNBinsJetPt;
4473
4474 if (kindBins == 1)
4475 {
4476 for(Int_t i=0; i<fDiJetNBinsJetInvMass; ++i)
4477 {
656457c9 4478 jetBin = fDiJetJetInvMassMin + i*stepInvMass + stepInvMass/2.;
656dc810 4479 if(((fDiJetJetInvMassMin+i*stepInvMass) <= invMass) &&
190d081e 4480 (fDiJetJetInvMassMin + (i+1)*stepInvMass) > invMass) {jetBinOk = jetBin; break;}
4481 else jetBinOk = -1.;
656dc810 4482 }
656dc810 4483 }
4484 else if (kindBins == 3)
4485 {
4486 for(Int_t i=0; i<fDiJetNBinsJetPt; ++i)
4487 {
656457c9 4488 jetBin = fDiJetJetPtMin + i*stepPt + stepPt/2.;
656dc810 4489 if(((fDiJetJetPtMin+i*stepPt) <= EtMean) &&
190d081e 4490 (fDiJetJetPtMin + (i+1)*stepPt) > EtMean) {jetBinOk = jetBin; break;}
4491 else jetBinOk = -1.;
656dc810 4492 }
656dc810 4493 }
4494 else if (kindBins == 2)
4495 {
4496 for(Int_t i=0; i<fDiJetNBinsJetPt; ++i)
4497 {
656457c9 4498 jetBin = fDiJetJetPtMin + i*stepPt + stepPt/2.;
656dc810 4499 if(((fDiJetJetPtMin+i*stepPt) <= leadingJetPt) &&
190d081e 4500 (fDiJetJetPtMin + (i+1)*stepPt) > leadingJetPt) {jetBinOk = jetBin; break;}
4501 else jetBinOk = -1.;
656dc810 4502 }
656dc810 4503 }
4504 else {Printf("WARNING: kindBins wrongly set ! Please make sure to call SetKindSlices() and set the kind parameter to 1, 2 or 3.\n");}
4505
4506 return jetBinOk;
4507
4508}
4509
4510
4511//______________________________________________________________
4512void AliAnalysisTaskFragmentationFunction::Terminate(Option_t *)
4513{
4514 // terminated
4515
4516 if(fDebug > 1) printf("AliAnalysisTaskFragmentationFunction::Terminate() \n");
4517}
4518
4519//_________________________________________________________________________________
4520Int_t AliAnalysisTaskFragmentationFunction::GetListOfTracks(TList *list, Int_t type)
4521{
4522 // fill list of tracks selected according to type
4523
4524 if(fDebug > 2) Printf("%s:%d Selecting tracks with %d", (char*)__FILE__,__LINE__,type);
4525
4526 if(!list){
4527 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
4528 return -1;
4529 }
4530
ab851c96 4531 if(!fAOD) return -1;
4532
3af23c82 4533 if(!fAOD->GetTracks()) return 0;
4534
656dc810 4535 if(type==kTrackUndef) return 0;
4536
4537 Int_t iCount = 0;
656dc810 4538
39e2b057 4539 if(type==kTrackAODExtraCuts || type==kTrackAODExtraonlyCuts || type==kTrackAODExtra || type==kTrackAODExtraonly){
4540
4541 TClonesArray *aodExtraTracks = dynamic_cast<TClonesArray*>(fAOD->FindListObject("aodExtraTracks"));
4542 if(!aodExtraTracks)return iCount;
4543 for(int it =0; it<aodExtraTracks->GetEntries(); it++) {
4544 AliVParticle *track = dynamic_cast<AliVParticle*> ((*aodExtraTracks)[it]);
4545 if (!track) continue;
4546
4547 AliAODTrack *tr = dynamic_cast<AliAODTrack*> (track);
4548 if(!tr)continue;
4549
4550 if(type==kTrackAODExtraCuts || type==kTrackAODExtraonlyCuts){
ab851c96 4551
39e2b057 4552 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
4553
4554 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
4555 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
4556 if(tr->Pt() < fTrackPtCut) continue;
4557 }
4558
4559 list->Add(tr);
4560 iCount++;
4561 }
4562 }
4563
4564 if(type==kTrackAODCuts || type==kTrackAODQualityCuts || type==kTrackAOD || type==kTrackAODExtraCuts || type==kTrackAODExtra){
4565
4566 // all rec. tracks, esd filter mask, eta range
656dc810 4567
4568 for(Int_t it=0; it<fAOD->GetNumberOfTracks(); ++it){
4569 AliAODTrack *tr = fAOD->GetTrack(it);
4570
39e2b057 4571 if(type == kTrackAODCuts || type==kTrackAODQualityCuts || type==kTrackAODExtraCuts){
4572
656dc810 4573 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
190d081e 4574 if(type == kTrackAODCuts){
4575 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
4576 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
4577 if(tr->Pt() < fTrackPtCut) continue;
4578 }
656dc810 4579 }
4580 list->Add(tr);
4581 iCount++;
4582 }
4583 }
4584 else if (type==kTrackKineAll || type==kTrackKineCharged || type==kTrackKineChargedAcceptance){
4585 // kine particles, all or rather charged
4586 if(!fMCEvent) return iCount;
4587
4588 for(Int_t it=0; it<fMCEvent->GetNumberOfTracks(); ++it){
4589 AliMCParticle* part = (AliMCParticle*) fMCEvent->GetTrack(it);
4590
4591 if(type == kTrackKineCharged || type == kTrackKineChargedAcceptance){
4592 if(part->Charge()==0) continue;
4593
4594 if(type == kTrackKineChargedAcceptance &&
4595 ( part->Eta() < fTrackEtaMin
4596 || part->Eta() > fTrackEtaMax
4597 || part->Phi() < fTrackPhiMin
4598 || part->Phi() > fTrackPhiMax
4599 || part->Pt() < fTrackPtCut)) continue;
4600 }
4601
4602 list->Add(part);
4603 iCount++;
4604 }
4605 }
d5e8640d 4606 else if (type==kTrackAODMCCharged || type==kTrackAODMCAll || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSec) {
656dc810 4607 // MC particles (from AOD), physical primaries, all or rather charged or rather charged within acceptance
4608 if(!fAOD) return -1;
4609
4610 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
4611 if(!tca)return iCount;
4612
4613 for(int it=0; it<tca->GetEntriesFast(); ++it){
4614 AliAODMCParticle *part = dynamic_cast<AliAODMCParticle*>(tca->At(it));
ab851c96 4615 if(!part)continue;
d5e8640d 4616 if(type != kTrackAODMCChargedSec && !part->IsPhysicalPrimary())continue;
4617 if(type == kTrackAODMCChargedSec && part->IsPhysicalPrimary())continue;
656dc810 4618
d5e8640d 4619 if (type==kTrackAODMCCharged || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSec){
656dc810 4620 if(part->Charge()==0) continue;
4621 if(type==kTrackAODMCChargedAcceptance &&
4622 ( part->Eta() > fTrackEtaMax
4623 || part->Eta() < fTrackEtaMin
4624 || part->Phi() > fTrackPhiMax
4625 || part->Phi() < fTrackPhiMin
4626 || part->Pt() < fTrackPtCut)) continue;
4627 }
4628
4629 list->Add(part);
4630 iCount++;
4631 }
4632 }
4633
4634 list->Sort();
4635 return iCount;
4636
4637}
4638// _______________________________________________________________________________
4639Int_t AliAnalysisTaskFragmentationFunction::GetListOfJets(TList *list, Int_t type)
4640{
4641 // fill list of jets selected according to type
3af23c82 4642
656dc810 4643 if(!list){
4644 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
4645 return -1;
4646 }
4647
4648 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
4649
4650 if(fBranchRecJets.Length()==0){
4651 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
4652 if(fDebug>1)fAOD->Print();
4653 return 0;
4654 }
4655
cb76764e 4656 TClonesArray *aodRecJets = 0;
d5e8640d 4657 if(fBranchRecJets.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchRecJets.Data()));
4658 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchRecJets.Data()));
40445651 4659 if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchRecJets.Data()));
656dc810 4660
4661 if(!aodRecJets){
4662 if(fBranchRecJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecJets.Data());
656dc810 4663 if(fDebug>1)fAOD->Print();
4664 return 0;
4665 }
4666
3af23c82 4667 // Reorder jet pt and fill new temporary AliAODJet objects
656dc810 4668 Int_t nRecJets = 0;
4669
4670 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
4671
4672 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
4673 if(!tmp) continue;
3af23c82 4674
656dc810 4675 if( tmp->Pt() < fJetPtCut ) continue;
4676 if( type == kJetsRecAcceptance &&
4677 ( tmp->Eta() < fJetEtaMin
4678 || tmp->Eta() > fJetEtaMax
4679 || tmp->Phi() < fJetPhiMin
4680 || tmp->Phi() > fJetPhiMax )) continue;
656dc810 4681
44b235ce 4682 if(fBckgSubMethod && fBranchRecJets.Contains("B0") &&
3af23c82 4683 fBranchRecJets.Contains("KT")) {
44b235ce 4684
3af23c82 4685 AliAODJet *tmpJet = GetAODBckgSubJet(tmp, fBckgSubMethod);
4686
4687 if(!tmpJet) continue;
cb76764e 4688
3af23c82 4689 list->Add(tmpJet);
44b235ce 4690
3af23c82 4691 nRecJets++;
4692 }
4693 else {
4694 list->Add(tmp);
4695
4696 nRecJets++;
4697 }
4698 }
4699
4700 list->Sort();
4701
656dc810 4702 return nRecJets;
656dc810 4703 }
4704 else if(type == kJetsKine || type == kJetsKineAcceptance){
4705
4706 // generated jets
4707 Int_t nGenJets = 0;
4708
4709 if(!fMCEvent){
4710 if(fDebug>1) Printf("%s:%d no mcEvent",(char*)__FILE__,__LINE__);
4711 return 0;
4712 }
5fde4a38 4713
4714 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
4715 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
4716 AliGenHijingEventHeader* hijingGenHeader = 0x0;
4717
656dc810 4718 if(!pythiaGenHeader){
5fde4a38 4719 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
4720
4721 if(!hijingGenHeader){
4722 Printf("%s:%d no pythiaGenHeader or hijingGenHeader found", (char*)__FILE__,__LINE__);
4723 return 0;
4724 }else{
4725 TLorentzVector mom[4];
4726 AliAODJet* jet[4];
4727 hijingGenHeader->GetJets(mom[0], mom[1], mom[2], mom[3]);
4728
4729 for(Int_t i=0; i<2; ++i){
4730 if(!mom[i].Pt()) continue;
4731 jet[i] = new AliAODJet(mom[i]);
4732
4733 if( type == kJetsKineAcceptance &&
4734 ( jet[i]->Eta() < fJetEtaMin
4735 || jet[i]->Eta() > fJetEtaMax
4736 || jet[i]->Phi() < fJetPhiMin
4737 || jet[i]->Phi() > fJetPhiMax )) continue;
4738
4739 list->Add(jet[i]);
4740 nGenJets++;
4741 }
4742 list->Sort();
4743 return nGenJets;
4744 }
656dc810 4745 }
4746
4747 // fetch the pythia generated jets
4748 for(int ip=0; ip<pythiaGenHeader->NTriggerJets(); ++ip){
4749
4750 Float_t p[4];
4751 AliAODJet *jet = new AliAODJet();
4752 pythiaGenHeader->TriggerJet(ip, p);
4753 jet->SetPxPyPzE(p[0], p[1], p[2], p[3]);
4754
4755 if( type == kJetsKineAcceptance &&
4756 ( jet->Eta() < fJetEtaMin
4757 || jet->Eta() > fJetEtaMax
4758 || jet->Phi() < fJetPhiMin
4759 || jet->Phi() > fJetPhiMax )) continue;
4760
3af23c82 4761 list->Add(jet);
4762 nGenJets++;
656dc810 4763 }
4764 list->Sort();
4765 return nGenJets;
4766 }
4767 else if(type == kJetsGen || type == kJetsGenAcceptance ){
4768
4769 if(fBranchGenJets.Length()==0){
4770 if(fDebug>1) Printf("%s:%d no gen jet branch specified", (char*)__FILE__,__LINE__);
4771 return 0;
4772 }
4773
cb76764e 4774 TClonesArray *aodGenJets = 0;
d5e8640d 4775 if(fBranchGenJets.Length()) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchGenJets.Data()));
4776 if(!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchGenJets.Data()));
40445651 4777 if(fAODExtension&&!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchGenJets.Data()));
656dc810 4778
4779 if(!aodGenJets){
4780 if(fDebug>0){
39e2b057 4781 if(fBranchGenJets.Length()) Printf("%s:%d Generated jet branch %s not found",(char*)__FILE__,__LINE__,fBranchGenJets.Data());
656dc810 4782 }
4783 if(fDebug>1)fAOD->Print();
4784 return 0;
4785 }
4786
4787 Int_t nGenJets = 0;
4788
4789 for(Int_t ig=0; ig<aodGenJets->GetEntries(); ++ig){
4790
4791 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodGenJets->At(ig));
4792 if(!tmp) continue;
4793
4794 if( tmp->Pt() < fJetPtCut ) continue;
4795 if( type == kJetsGenAcceptance &&
4796 ( tmp->Eta() < fJetEtaMin
4797 || tmp->Eta() > fJetEtaMax
4798 || tmp->Phi() < fJetPhiMin
4799 || tmp->Phi() > fJetPhiMax )) continue;
4800
3af23c82 4801 list->Add(tmp);
4802 nGenJets++;
656dc810 4803 }
4804 list->Sort();
4805 return nGenJets;
656dc810 4806 }
39e2b057 4807 else if(type == kJetsEmbedded){ // embedded jets
4808
4809 if(fBranchEmbeddedJets.Length()==0){
4810 Printf("%s:%d no embedded jet branch specified", (char*)__FILE__,__LINE__);
4811 if(fDebug>1)fAOD->Print();
4812 return 0;
4813 }
4814
4815 TClonesArray *aodEmbeddedJets = 0;
4816 if(fBranchEmbeddedJets.Length()) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchEmbeddedJets.Data()));
4817 if(!aodEmbeddedJets) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchEmbeddedJets.Data()));
4818 if(fAODExtension&&!aodEmbeddedJets) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchEmbeddedJets.Data()));
4819
4820 if(!aodEmbeddedJets){
4821 if(fBranchEmbeddedJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchEmbeddedJets.Data());
4822 if(fDebug>1)fAOD->Print();
4823 return 0;
4824 }
4825
4826 // Reorder jet pt and fill new temporary AliAODJet objects
4827 Int_t nEmbeddedJets = 0;
4828
4829 for(Int_t ij=0; ij<aodEmbeddedJets->GetEntries(); ++ij){
4830
4831 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodEmbeddedJets->At(ij));
4832 if(!tmp) continue;
4833
4834 if( tmp->Pt() < fJetPtCut ) continue;
4835 if( tmp->Eta() < fJetEtaMin
4836 || tmp->Eta() > fJetEtaMax
4837 || tmp->Phi() < fJetPhiMin
4838 || tmp->Phi() > fJetPhiMax ) continue;
4839
4840 list->Add(tmp);
4841 nEmbeddedJets++;
4842 }
4843
4844 list->Sort();
4845
4846 return nEmbeddedJets;
4847 }
656dc810 4848 else{
4849 if(fDebug>0)Printf("%s:%d no such type %d",(char*)__FILE__,__LINE__,type);
4850 return 0;
4851 }
4852}
4853
742ee86c 4854// ___________________________________________________________________________________
4855Int_t AliAnalysisTaskFragmentationFunction::GetListOfBckgJets(TList *list, Int_t type)
656dc810 4856{
742ee86c 4857 // fill list of bgr clusters selected according to type
656dc810 4858
742ee86c 4859 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
67e37e80 4860
742ee86c 4861 if(fBranchRecBckgClusters.Length()==0){
4862 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
4863 if(fDebug>1)fAOD->Print();
4864 return 0;
4865 }
4866
4867 TClonesArray *aodRecJets = 0;
d5e8640d 4868 if(fBranchRecBckgClusters.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchRecBckgClusters.Data()));
4869 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchRecBckgClusters.Data()));
4870 if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchRecBckgClusters.Data()));
40445651 4871
742ee86c 4872 if(!aodRecJets){
4873 if(fBranchRecBckgClusters.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecBckgClusters.Data());
4874 if(fDebug>1)fAOD->Print();
4875 return 0;
4876 }
4877
4878 // Reorder jet pt and fill new temporary AliAODJet objects
4879 Int_t nRecJets = 0;
4880
4881 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
4882
4883 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
4884 if(!tmp) continue;
4885
4886 // if( tmp->Pt() < fJetPtCut ) continue; // no pt cut on bckg clusters !
4887 if( type == kJetsRecAcceptance &&
4888 ( tmp->Eta() < fJetEtaMin
4889 || tmp->Eta() > fJetEtaMax
4890 || tmp->Phi() < fJetPhiMin
4891 || tmp->Phi() > fJetPhiMax )) continue;
4892
4893 list->Add(tmp);
4894
4895 nRecJets++;
4896
4897 }
4898
4899 list->Sort();
4900
4901 return nRecJets;
4902 }
656dc810 4903
742ee86c 4904 // /*
4905 // MC clusters still Under construction
4906 // */
4907
4908 return 0;
3af23c82 4909}
67e37e80 4910
3af23c82 4911// _________________________________________________________________________________________________________
4912void AliAnalysisTaskFragmentationFunction::SetProperties(THnSparse* h,const Int_t dim, const char** labels)
4913{
4914 // Set properties of THnSparse
67e37e80 4915
3af23c82 4916 for(Int_t i=0; i<dim; i++){
4917 h->GetAxis(i)->SetTitle(labels[i]);
4918 h->GetAxis(i)->SetTitleColor(1);
4919 }
4920}
67e37e80 4921
656dc810 4922// __________________________________________________________________________________________
4923void AliAnalysisTaskFragmentationFunction::SetProperties(TH1* h,const char* x, const char* y)
4924{
4925 //Set properties of histos (x and y title)
4926
4927 h->SetXTitle(x);
4928 h->SetYTitle(y);
4929 h->GetXaxis()->SetTitleColor(1);
4930 h->GetYaxis()->SetTitleColor(1);
4931}
4932
4933// _________________________________________________________________________________________________________
67e37e80 4934void AliAnalysisTaskFragmentationFunction::SetProperties(TH1* h,const char* x, const char* y, const char* z)
656dc810 4935{
4936 //Set properties of histos (x,y and z title)
4937
4938 h->SetXTitle(x);
4939 h->SetYTitle(y);
4940 h->SetZTitle(z);
4941 h->GetXaxis()->SetTitleColor(1);
4942 h->GetYaxis()->SetTitleColor(1);
4943 h->GetZaxis()->SetTitleColor(1);
4944}
4945
4946// ________________________________________________________________________________________________________________________________________________________
6daac008 4947void AliAnalysisTaskFragmentationFunction::GetJetTracksPointing(TList* inputlist, TList* outputlist, const AliAODJet* jet,
4948 const Double_t radius, Double_t& sumPt, const Double_t maxPt, Bool_t& isBadMaxPt)
656dc810 4949{
4950 // fill list of tracks in cone around jet axis
4951
4952 sumPt = 0;
6daac008 4953 isBadMaxPt = kFALSE;
4954
4955 std::cout<<" enter GetJetTracksPointing, maxPt "<<maxPt<<std::endl;
656dc810 4956
4957 Double_t jetMom[3];
4958 jet->PxPyPz(jetMom);
4959 TVector3 jet3mom(jetMom);
4960
4961 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
4962
4963 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
ab851c96 4964 if(!track)continue;
656dc810 4965 Double_t trackMom[3];
4966 track->PxPyPz(trackMom);
4967 TVector3 track3mom(trackMom);
4968
4969 Double_t dR = jet3mom.DeltaR(track3mom);
4970
4971 if(dR<radius){
4972
4973 outputlist->Add(track);
4974
4975 sumPt += track->Pt();
6daac008 4976
4977 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
4978 if(maxPt>0 && track->Pt()>maxPt) std::cout<<" found bad jet, track pt "<<track->Pt()<<" max Pt "<<maxPt<<std::endl;
656dc810 4979 }
4980 }
6daac008 4981
4982 std::cout<<" leave GetJetTracksPointing, maxPt "<<maxPt<<" isBadMaxPt "<<isBadMaxPt<<std::endl;
4983
4984
656dc810 4985 outputlist->Sort();
4986}
4987
4988// ___________________________________________________________________________________________
6daac008 4989void AliAnalysisTaskFragmentationFunction::GetJetTracksTrackrefs(TList* list, const AliAODJet* jet, const Double_t maxPt, Bool_t& isBadMaxPt)
656dc810 4990{
4991 // list of jet tracks from trackrefs
4992
4993 Int_t nTracks = jet->GetRefTracks()->GetEntriesFast();
4994
4995 for (Int_t itrack=0; itrack<nTracks; itrack++) {
4996
4997 AliVParticle* track = dynamic_cast<AliVParticle*>(jet->GetRefTracks()->At(itrack));
4998 if(!track){
4999 AliError("expected ref track not found ");
5000 continue;
5001 }
5002
6daac008 5003 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
656dc810 5004 list->Add(track);
5005 }
5006
5007 list->Sort();
5008}
fe343c6b 5009
5010// _ ________________________________________________________________________________________________________________________________
d5e8640d 5011void AliAnalysisTaskFragmentationFunction::AssociateGenRec(TList* tracksAODMCCharged,TList* tracksRec, TArrayI& indexAODTr,TArrayI& indexMCTr,
5012 TArrayS& isRefGen,TH2F* fh2PtRecVsGen)
fe343c6b 5013{
5014 // associate generated and reconstructed tracks, fill TArrays of list indices
5015
fe343c6b 5016 Int_t nTracksRec = tracksRec->GetSize();
5017 Int_t nTracksGen = tracksAODMCCharged->GetSize();
5018 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
5019
d5e8640d 5020
fe343c6b 5021 if(!nTracksGen) return;
5022 if(!tca) return;
5023
5024 // set size
5025 indexAODTr.Set(nTracksGen);
5026 indexMCTr.Set(nTracksRec);
d5e8640d 5027 isRefGen.Set(nTracksGen);
fe343c6b 5028
5029 indexAODTr.Reset(-1);
5030 indexMCTr.Reset(-1);
d5e8640d 5031 isRefGen.Reset(0);
fe343c6b 5032
5033 // loop over reconstructed tracks, get generated track
5034
5035 for(Int_t iRec=0; iRec<nTracksRec; iRec++){
5036
5037 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
ab851c96 5038 if(!rectrack)continue;
289a2293 5039 Int_t label = TMath::Abs(rectrack->GetLabel());
fe343c6b 5040
5041 // find MC track in our list
cb76764e 5042 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tca->At(label));
ab851c96 5043
fe343c6b 5044 Int_t listIndex = -1;
5045 if(gentrack) listIndex = tracksAODMCCharged->IndexOf(gentrack);
5046
5047 if(listIndex>=0){
5048
5049 indexAODTr[listIndex] = iRec;
5050 indexMCTr[iRec] = listIndex;
5051 }
d5e8640d 5052 }
fe343c6b 5053
5054
d5e8640d 5055 // define reference sample of primaries/secondaries (for reconstruction efficiency / contamination)
fe343c6b 5056
5057 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
5058
5059 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksAODMCCharged->At(iGen));
ab851c96 5060 if(!gentrack)continue;
fe343c6b 5061 Int_t pdg = gentrack->GetPdgCode();
5062
5063 // 211 - pi, 2212 - proton, 321 - Kaon, 11 - electron, 13 - muon
5064 if(TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 ||
5065 TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13){
5066
d5e8640d 5067 isRefGen[iGen] = kTRUE;
cb76764e 5068
5069 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
5070
5071 if(iRec>=0){
5072 Float_t genPt = gentrack->Pt();
ab851c96 5073 AliAODTrack* vt = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
5074 if(vt){
5075 Float_t recPt = vt->Pt();
d5e8640d 5076 fh2PtRecVsGen->Fill(genPt,recPt);
ab851c96 5077 }
cb76764e 5078 }
fe343c6b 5079 }
5080 }
5081}
5082
5083// _____________________________________________________________________________________________________________________________________________
d5e8640d 5084void AliAnalysisTaskFragmentationFunction::FillSingleTrackHistosRecGen(AliFragFuncQATrackHistos* trackQAGen, AliFragFuncQATrackHistos* trackQARec, TList* tracksGen,
5085 const TArrayI& indexAODTr, const TArrayS& isRefGen){
fe343c6b 5086
cb76764e 5087 // fill QA for single track reconstruction efficiency
fceb275f 5088
fe343c6b 5089 Int_t nTracksGen = tracksGen->GetSize();
5090
5091 if(!nTracksGen) return;
5092
5093 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
5094
d5e8640d 5095 if(isRefGen[iGen] != 1) continue; // select primaries
fe343c6b 5096
5097 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
d5e8640d 5098 if(!gentrack) continue;
fe343c6b 5099 Double_t ptGen = gentrack->Pt();
5100 Double_t etaGen = gentrack->Eta();
5101 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5102
5103 // apply same acc & pt cuts as for FF
fe343c6b 5104
5105 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5106 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5107 if(ptGen < fTrackPtCut) continue;
5108
d5e8640d 5109 if(trackQAGen) trackQAGen->FillTrackQA(etaGen, phiGen, ptGen);
39e2b057 5110
fe343c6b 5111
cb76764e 5112 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
d5e8640d 5113 if(iRec>=0 && trackQARec) trackQARec->FillTrackQA(etaGen, phiGen, ptGen);
fe343c6b 5114 }
5115}
5116
5117// ______________________________________________________________________________________________________________________________________________________
cb76764e 5118
d5e8640d 5119void AliAnalysisTaskFragmentationFunction::FillJetTrackHistosRecGen(TObject* histGen,TObject* histRec,Double_t jetPtGen,Double_t jetPtRec, TList* jetTrackList, const TList* tracksGen,
5120 const TArrayI& indexAODTr,const TArrayS& isRefGen, const Bool_t useRecJetPt)
5121{
5122 // fill objects for jet track reconstruction efficiency or secondaries contamination
3af23c82 5123 // arguments histGen/histRec can be of different type: AliFragFuncHistos*, AliFragFuncIntraJetHistos*, ...
fe343c6b 5124
5125 Int_t nTracksJet = jetTrackList->GetSize(); // list with AODMC tracks
5126
5127 if(!nTracksJet) return;
5128
cb76764e 5129 Bool_t incrementJetPtGenFF = kTRUE; // needed in case we fill FFHistos
5130 Bool_t incrementJetPtRecFF = kTRUE; // needed in case we fill FFHistos
5131
fe343c6b 5132 for(Int_t iTr=0; iTr<nTracksJet; iTr++){
5133
5134 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (jetTrackList->At(iTr));
ab851c96 5135 if(!gentrack)continue;
fe343c6b 5136 // find jet track in gen tracks list
5137 Int_t iGen = tracksGen->IndexOf(gentrack);
5138
5139 if(iGen<0){
5140 if(fDebug>0) Printf("%s:%d gen jet track not found ",(char*)__FILE__,__LINE__);
5141 continue;
5142 }
5143
d5e8640d 5144
5145 if(isRefGen[iGen] != 1) continue; // select primaries
5146
fe343c6b 5147 Double_t ptGen = gentrack->Pt();
5148 Double_t etaGen = gentrack->Eta();
5149 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5150
5151 // apply same acc & pt cuts as for FF
fe343c6b 5152
5153 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5154 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5155 if(ptGen < fTrackPtCut) continue;
5156
2d1d1b60 5157 Double_t z = ptGen / jetPtGen;
fe343c6b 5158 Double_t xi = 0;
5159 if(z>0) xi = TMath::Log(1/z);
5160
cb76764e 5161 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
5162 Bool_t isRec = (iRec>=0) ? kTRUE : kFALSE;
5163
d5e8640d 5164 if(dynamic_cast<AliFragFuncHistos*>(histGen) || dynamic_cast<AliFragFuncHistos*>(histRec)){ // histGen can be NULL for secondaries -> ||
cb76764e 5165
ab851c96 5166 // after checking can afford normal cast
a5592cfa 5167 AliFragFuncHistos* ffhistGen = (AliFragFuncHistos*) (histGen);
5168 AliFragFuncHistos* ffhistRec = (AliFragFuncHistos*) (histRec);
cb76764e 5169
a5592cfa 5170 if(ffhistGen){
5171 if(useRecJetPt) ffhistGen->FillFF( ptGen, jetPtRec, incrementJetPtGenFF );
5172 else ffhistGen->FillFF( ptGen, jetPtGen, incrementJetPtGenFF );
d5e8640d 5173
5174 incrementJetPtGenFF = kFALSE;
5175 }
fe343c6b 5176
d5e8640d 5177
a5592cfa 5178 if(ffhistRec && isRec){
d5e8640d 5179
a5592cfa 5180 if(useRecJetPt) ffhistRec->FillFF( ptGen, jetPtRec, incrementJetPtRecFF );
5181 else ffhistRec->FillFF( ptGen, jetPtGen, incrementJetPtRecFF );
cb76764e 5182
5183 incrementJetPtRecFF = kFALSE;
5184 }
5185 }
5186 else if(dynamic_cast<AliFragFuncIntraJetHistos*>(histGen) && dynamic_cast<AliFragFuncIntraJetHistos*>(histRec)){
5187
5188 // eff for IJ histos ...
5189
5190 }
fe343c6b 5191 }
5192}
1da9498b 5193
39e2b057 5194// _____________________________________________________________________________________________________________________________________________
5195void AliAnalysisTaskFragmentationFunction::FillTwoTrackHistosRecGen(TList* tracksGen, /*TList* tracksRec, const TArrayI& indexAODTr, */ const TArrayS& isRefGen){
5196
5197 Int_t nTracksGen = tracksGen->GetSize();
5198
5199 if(!nTracksGen) return;
5200
5201 Int_t highPtIndices[nTracksGen];
5202 Int_t nHighPt = 0;
5203
5204 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
5205
5206 if(isRefGen[iGen] != 1) continue; // select primaries
5207
5208 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
5209 if(!gentrack) continue;
5210 Double_t ptGen = gentrack->Pt();
5211 Double_t etaGen = gentrack->Eta();
5212 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5213
5214 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5215 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5216
5217 if(ptGen>10 ){
5218 highPtIndices[nHighPt++] = iGen;
5219 }
5220 }
5221
5222
5223 for(Int_t nHPT = 0; nHPT<nHighPt; nHPT++){ // high pt tracks loop
5224
5225 Int_t indexHPT = highPtIndices[nHPT];
5226
5227 AliAODMCParticle* genHPTtrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(indexHPT));
5228 if(!genHPTtrack) continue;
5229
5230 Double_t trackMomHPT[3];
5231 genHPTtrack->PxPyPz(trackMomHPT);
5232 TVector3 track3MomHPT(trackMomHPT);
5233
5234
5235 Double_t distNN = 10;
5236 Double_t ptNN = 0;
5237 Int_t indexNN = -1;
5238
5239 for(Int_t iGen=0; iGen<nTracksGen; iGen++){ // all gen tracks loop
5240
5241 if(isRefGen[iGen] != 1) continue; // select primaries
5242
5243 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
5244 if(!gentrack) continue;
5245
5246 Double_t ptGen = gentrack->Pt();
5247 Double_t etaGen = gentrack->Eta();
5248 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5249
5250 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5251 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5252 if(ptGen < fTrackPtCut) continue;
5253
5254
5255 Double_t gentrackMom[3];
5256 gentrack->PxPyPz(gentrackMom);
5257 TVector3 gentrack3Mom(gentrackMom);
5258
5259 Double_t dR = gentrack3Mom.DeltaR(track3MomHPT);
5260
5261 if(iGen != indexHPT && dR<distNN){
5262 distNN = dR;
5263 ptNN = ptGen;
5264 indexNN = iGen;
5265 }
5266 }
5267 }
5268}
5269
3af23c82 5270// _____________________________________________________________________________________________________________________________________________
5271void AliAnalysisTaskFragmentationFunction::FillSingleTrackResponse(THnSparse* hnResponse, TList* tracksGen, TList* tracksRec,
5272 const TArrayI& indexAODTr, const TArrayS& isGenPrim)
5273{
5274 // fill response matrix for single tracks
5275
5276
5277 Int_t nTracksGen = tracksGen->GetSize();
5278
5279 if(!nTracksGen) return;
5280
5281 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
5282
5283 if(isGenPrim[iGen] != 1) continue; // select primaries
5284
5285 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
ab851c96 5286 if(!gentrack)continue;
3af23c82 5287 Double_t ptGen = gentrack->Pt();
5288 Double_t etaGen = gentrack->Eta();
5289 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5290
5291 // apply same acc & pt cuts as for FF
5292 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5293 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5294 if(ptGen < fTrackPtCut) continue;
5295
5296 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
5297 if(iRec>=0){
5298 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
ab851c96 5299 if(!rectrack)continue;
3af23c82 5300 Double_t ptRec = rectrack->Pt();
5301
5302 Double_t entries[2] = {ptRec,ptGen}; // AliCorrFW convention: gen vs rec
5303 hnResponse->Fill(entries);
39e2b057 5304
5305 Double_t invPtGen = 0;
5306 if(ptGen) invPtGen = 1/ptGen;
5307
5308 Double_t invPtRec = 0;
5309 if(ptRec) invPtRec = 1/ptRec;
5310
5311 fh2SingleInvPtRecMnGenVsPtGen->Fill(ptGen,invPtRec - invPtGen);
3af23c82 5312 }
5313 }
5314}
5315
5316
5317// ______________________________________________________________________________________________________________________________________________________
5318void AliAnalysisTaskFragmentationFunction::FillJetTrackResponse(THnSparse* hnResponsePt, THnSparse* hnResponseZ, THnSparse* hnResponseXi,
5319 Double_t jetPtGen, Double_t jetPtRec, TList* jetTrackList,
5320 const TList* tracksGen, TList* tracksRec, const TArrayI& indexAODTr, const TArrayS& isGenPrim,const Bool_t useRecJetPt)
5321{
5322 // fill response matrix for tracks in jets
5323
5324 Int_t nTracksJet = jetTrackList->GetSize(); // list with AODMC tracks
5325
5326 if(!nTracksJet) return;
5327
5328 for(Int_t iTr=0; iTr<nTracksJet; iTr++){
5329
5330 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (jetTrackList->At(iTr));
ab851c96 5331 if(!gentrack)continue;
3af23c82 5332 // find jet track in gen tracks list
5333 Int_t iGen = tracksGen->IndexOf(gentrack);
5334
5335 if(iGen<0){
5336 if(fDebug>0) Printf("%s:%d gen jet track not found ",(char*)__FILE__,__LINE__);
5337 continue;
5338 }
5339
5340 if(isGenPrim[iGen] != 1) continue; // select primaries
5341
5342 Double_t ptGen = gentrack->Pt();
5343 Double_t etaGen = gentrack->Eta();
5344 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5345
5346 // apply same acc & pt cuts as for FF
5347
5348 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5349 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5350 if(ptGen < fTrackPtCut) continue;
5351
742ee86c 5352 Double_t zGen = ptGen / jetPtRec;
3af23c82 5353 Double_t xiGen = 0;
5354 if(zGen>0) xiGen = TMath::Log(1/zGen);
5355
5356 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
5357
5358 if(iRec>=0){
5359
5360 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
ab851c96 5361 if(rectrack){
5362 Double_t ptRec = rectrack->Pt();
5363
742ee86c 5364 Double_t zRec = ptRec / jetPtRec;
ab851c96 5365 Double_t xiRec = 0;
5366 if(zRec>0) xiRec = TMath::Log(1/zRec);
3af23c82 5367
ab851c96 5368 Double_t jetPt = useRecJetPt ? jetPtRec : jetPtGen;
5369
5370 Double_t entriesPt[3] = {jetPt,ptRec,ptGen}; // AliCorrFW convention: gen vs rec
5371 Double_t entriesZ[3] = {jetPt,zRec,zGen};
5372 Double_t entriesXi[3] = {jetPt,xiRec,xiGen};
5373
5374 hnResponsePt->Fill(entriesPt);
5375 hnResponseZ->Fill(entriesZ);
5376 hnResponseXi->Fill(entriesXi);
5377 }
3af23c82 5378 }
5379 }
5380}
5381
5382// _____________________________________________________________________________________________________________________________________________________________________
a5592cfa 5383void AliAnalysisTaskFragmentationFunction::GetTracksTiltedwrpJetAxis(Float_t alpha, TList* inputlist, TList* outputlist, const AliAODJet* jet, Double_t radius,Double_t& sumPt)
1da9498b 5384{
5385 // List of tracks in cone perpendicular to the jet azimuthal direction
5386
5387 Double_t jetMom[3];
5388 jet->PxPyPz(jetMom);
67e37e80 5389
1da9498b 5390 TVector3 jet3mom(jetMom);
5391 // Rotate phi and keep eta unchanged
3af23c82 5392 Double_t etaTilted = jet3mom.Eta();
5393 Double_t phiTilted = TVector2::Phi_0_2pi(jet3mom.Phi()) + alpha;
5394 if(phiTilted > 2*TMath::Pi()) phiTilted = phiTilted - 2*TMath::Pi();
1da9498b 5395
5396 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
5397
39e2b057 5398 // embedded tracks
5399 if( fUseExtraTracksBgr != 1){
5400 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
5401 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5402 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5403 }
5404 }
5405
1da9498b 5406 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
ab851c96 5407 if(!track)continue;
1da9498b 5408 Double_t trackMom[3];
5409 track->PxPyPz(trackMom);
5410 TVector3 track3mom(trackMom);
5411
3af23c82 5412 Double_t deta = track3mom.Eta() - etaTilted;
5413 Double_t dphi = TMath::Abs(track3mom.Phi() - phiTilted);
5414 if (dphi > TMath::Pi()) dphi = 2. * TMath::Pi() - dphi;
5415 Double_t dR = TMath::Sqrt(deta * deta + dphi * dphi);
5416
1da9498b 5417 if(dR<=radius){
5418 outputlist->Add(track);
5419 sumPt += track->Pt();
5420 }
5421 }
5422
5423}
5424
5425// ________________________________________________________________________________________________________________________________________________________
a5592cfa 5426void AliAnalysisTaskFragmentationFunction::GetTracksTiltedwrpJetAxisWindow(Float_t alpha, TList* inputlist, TList* outputlist, const AliAODJet* jet, Double_t radius,Double_t& sumPt,Double_t &normFactor)
3af23c82 5427{
5428 // List of tracks in cone perpendicular to the jet azimuthal direction
5429
5430 Double_t jetMom[3];
5431 jet->PxPyPz(jetMom);
5432
5433 TVector3 jet3mom(jetMom);
5434 // Rotate phi and keep eta unchanged
5435 Double_t etaTilted = jet3mom.Eta();
5436 Double_t phiTilted = TVector2::Phi_0_2pi(jet3mom.Phi()) + alpha;
5437 if(phiTilted > 2*TMath::Pi()) phiTilted = phiTilted - 2*TMath::Pi();
5438
5439 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++)
5440 {
ab851c96 5441
39e2b057 5442 // embedded tracks
5443 if( fUseExtraTracksBgr != 1){
5444 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
5445 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5446 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5447 }
5448 }
5449
3af23c82 5450 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
ab851c96 5451 if(!track)continue;
3af23c82 5452 Float_t trackEta = track->Eta();
5453 Float_t trackPhi = track->Phi();
5454
942bf1b4 5455 if( ( phiTilted-radius >= 0 ) && ( phiTilted+radius <= 2*TMath::Pi()))
3af23c82 5456 {
5457 if((trackPhi<=phiTilted+radius) &&
5458 (trackPhi>=phiTilted-radius) &&
942bf1b4 5459 (trackEta<=fTrackEtaMax)&&(trackEta>=fTrackEtaMin)) // 0.9 and - 0.9
3af23c82 5460 {
5461 outputlist->Add(track);
5462 sumPt += track->Pt();
5463 }
5464 }
5465 else if( phiTilted-radius < 0 )
5466 {
5467 if((( trackPhi < phiTilted+radius ) ||
5468 ( trackPhi > 2*TMath::Pi()-(radius-phiTilted) )) &&
5469 (( trackEta <= fTrackEtaMax ) && ( trackEta >= fTrackEtaMin )))
5470 {
5471 outputlist->Add(track);
5472 sumPt += track->Pt();
5473 }
5474 }
5475 else if( phiTilted+radius > 2*TMath::Pi() )
5476 {
5477 if((( trackPhi > phiTilted-radius ) ||
942bf1b4 5478 ( trackPhi < phiTilted+radius-2*TMath::Pi() )) &&
3af23c82 5479 (( trackEta <= fTrackEtaMax ) && ( trackEta >= fTrackEtaMin )))
5480 {
5481 outputlist->Add(track);
5482 sumPt += track->Pt();
5483 }
5484 }
5485 }
5486
5487 // Jet area - Temporarily added should be modified with the proper jet area value
5488 Float_t areaJet = CalcJetArea(etaTilted,radius);
5489 Float_t areaTilted = 2*radius*(fTrackEtaMax-fTrackEtaMin);
5490
5491 normFactor = (Float_t) 1. / (areaJet / areaTilted);
5492
5493}
5494
5495
5496// ________________________________________________________________________________________________________________________________________________________
5497void AliAnalysisTaskFragmentationFunction::GetTracksOutOfNJets(Int_t nCases, TList* inputlist, TList* outputlist, TList* jetlist, Double_t& sumPt)
1da9498b 5498{
5499 // List of tracks outside cone around N jet axis
5500 // Particles taken randomly
5501
5502 sumPt = 0;
5503 // Int_t nj = jetlist->GetSize();
5504 Float_t rc = GetFFRadius();
5505 Float_t rcl = GetFFBckgRadius();
5506
5507 // Estimate jet and background areas
5508 Float_t* areaJet = new Float_t[nCases];
ab851c96 5509 memset(areaJet, 0, sizeof(Float_t) * nCases);
1da9498b 5510 Float_t* areaJetLarge = new Float_t[nCases];
ab851c96 5511 memset(areaJetLarge, 0, sizeof(Float_t) * nCases);
1da9498b 5512 Float_t areaFull = (fTrackEtaMax-fTrackEtaMin)*(fTrackPhiMax-fTrackPhiMin);
5513 Float_t areaOut = areaFull;
5514
5515 //estimate jets and background areas
5516 Int_t nOut = 0;
5517 Int_t ijet = 0;
5518 TList* templist = new TList();
5519 TClonesArray *vect3Jet = new TClonesArray("TVector3",nCases);
5520
5521 for(Int_t ij=0; ij<nCases; ++ij)
5522 {
5523 // Get jet information
5524 AliAODJet* jet = dynamic_cast<AliAODJet*>(jetlist->At(ij));
ab851c96 5525 if(!jet)continue;
1da9498b 5526 TVector3 jet3mom;
5527 jet3mom.SetPtEtaPhi(jet->Pt(),jet->Eta(),jet->Phi());
5528 new((*vect3Jet)[ijet]) TVector3((TVector3)jet3mom);
5529 Float_t etaJet = (Float_t)((TVector3*) vect3Jet->At(ij))->Eta();
5530
5531 // Jet area
5532 areaJet[ij] = CalcJetArea(etaJet,rc);
5533
5534 // Area jet larger angle
5535 areaJetLarge[ij] = CalcJetArea(etaJet,rcl);
5536
5537 // Outside jet area
5538 areaOut = areaOut - areaJetLarge[ij];
5539 ijet++;
5540 }
5541
5542 // List of all tracks outside jet areas
5543 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
5544
39e2b057 5545 // embedded tracks
5546 if( fUseExtraTracksBgr != 1){
5547 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
5548 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5549 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5550 }
5551 }
5552
1da9498b 5553 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
ab851c96 5554 if(!track)continue;
1da9498b 5555 Double_t trackMom[3];
5556 track->PxPyPz(trackMom);
5557 TVector3 track3mom(trackMom);
5558
5559 Double_t *dR = new Double_t[nCases];
5560 for(Int_t ij=0; ij<nCases; ij++)
5561 dR[ij] = (Double_t)((TVector3*) vect3Jet->At(ij))->DeltaR(track3mom);
5562
5563 if((nCases==1 && (dR[0]>rcl)) ||
5564 (nCases==2 && (dR[0]>rcl && dR[1]>rcl)) ||
5565 (nCases==3 && (dR[0]>rcl && dR[1]>rcl && dR[2]>rcl)))
5566 {
5567 templist->Add(track);
5568 nOut++;
5569 }
5570 delete [] dR;
5571 }
5572
67e37e80 5573 // Take tracks randomly
5574 Int_t nScaled = (Int_t) (nOut * areaJet[0] / areaOut + 0.5);
5575 TArrayI* ar = new TArrayI(nOut);
1da9498b 5576
67e37e80 5577 for(Int_t init=0; init<nOut; init++)
5578 (*ar)[init] = init;
1da9498b 5579
67e37e80 5580 Int_t *randIndex = new Int_t[nScaled];
5581 for(Int_t init2=0; init2<nScaled; init2++)
5582 randIndex[init2] = -1;
1da9498b 5583
67e37e80 5584 // Select nScaled different random numbers in nOut
5585 for(Int_t i=0; i<nScaled; i++)
1da9498b 5586 {
67e37e80 5587 Int_t* tmpArr = new Int_t[nOut-i];
5588 Int_t temp = fRandom->Integer(nOut-i);
5589 for(Int_t ind = 0; ind< ar->GetSize()-1; ind++)
1da9498b 5590 {
67e37e80 5591 if(ind<temp) tmpArr[ind] = (*ar)[ind];
5592 else tmpArr[ind] = (*ar)[ind+1];
1da9498b 5593 }
67e37e80 5594 randIndex[i] = (*ar)[temp];
1da9498b 5595
67e37e80 5596 ar->Set(nOut-i-1,tmpArr);
5597
5598 delete [] tmpArr;
5599
5600 }
5601
5602 for(Int_t ipart=0; ipart<nScaled; ipart++)
5603 {
1ea145ef 5604 AliVParticle* track = (AliVParticle*)(templist->At(randIndex[ipart]));
67e37e80 5605 outputlist->Add(track);
5606 sumPt += track->Pt();
5607 }
1da9498b 5608
5609 outputlist->Sort();
5610
1da9498b 5611 delete vect3Jet;
5612 delete templist;
5613 delete [] areaJetLarge;
5614 delete [] areaJet;
67e37e80 5615 delete ar;
5616 delete [] randIndex;
1da9498b 5617
5618}
5619
5620// ________________________________________________________________________________________________________________________________________________________
3af23c82 5621void AliAnalysisTaskFragmentationFunction::GetTracksOutOfNJetsStat(Int_t nCases, TList* inputlist, TList* outputlist, TList* jetlist, Double_t& sumPt, Double_t &normFactor)
1da9498b 5622{
5623 // List of tracks outside cone around N jet axis
5624 // All particles taken + final scaling factor
5625
5626 sumPt = 0;
5627 Float_t rc = GetFFRadius();
5628 Float_t rcl = GetFFBckgRadius();
5629
5630 // Estimate jet and background areas
5631 Float_t* areaJet = new Float_t[nCases];
9939142f 5632 memset(areaJet, 0, sizeof(Float_t) * nCases);
1da9498b 5633 Float_t* areaJetLarge = new Float_t[nCases];
9939142f 5634 memset(areaJetLarge, 0, sizeof(Float_t) * nCases);
1da9498b 5635 Float_t areaFull = (fTrackEtaMax-fTrackEtaMin)*(fTrackPhiMax-fTrackPhiMin);
5636 Float_t areaOut = areaFull;
5637
5638 //estimate jets and background areas
5639 Int_t nOut = 0;
5640 Int_t ijet = 0;
5641 TClonesArray *vect3Jet = new TClonesArray("TVector3",nCases);
5642
5643 for(Int_t ij=0; ij<nCases; ++ij)
5644 {
5645 // Get jet information
5646 AliAODJet* jet = dynamic_cast<AliAODJet*>(jetlist->At(ij));
ab851c96 5647 if(!jet)continue;
1da9498b 5648 TVector3 jet3mom;
5649 jet3mom.SetPtEtaPhi(jet->Pt(),jet->Eta(),jet->Phi());
5650 new((*vect3Jet)[ijet]) TVector3((TVector3)jet3mom);
5651 Float_t etaJet = (Float_t)((TVector3*) vect3Jet->At(ij))->Eta();
5652
5653 // Jet area
5654 areaJet[ij] = CalcJetArea(etaJet,rc);
5655
5656 // Area jet larger angle
5657 areaJetLarge[ij] = CalcJetArea(etaJet,rcl);
5658
5659 // Outside jets area
5660 areaOut = areaOut - areaJetLarge[ij];
5661 ijet++;
5662 }
5663
5664 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
5665
39e2b057 5666 // embedded tracks
5667 if( fUseExtraTracksBgr != 1){
5668 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
5669 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5670 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5671 }
5672 }
5673
1da9498b 5674 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
ab851c96 5675 if(!track)continue;
1da9498b 5676 Double_t trackMom[3];
5677 track->PxPyPz(trackMom);
5678 TVector3 track3mom(trackMom);
5679
5680 Double_t *dR = new Double_t[nCases];
5681 for(Int_t ij=0; ij<nCases; ij++)
5682 dR[ij] = (Double_t)((TVector3*) vect3Jet->At(ij))->DeltaR(track3mom);
5683
5684 if((nCases==0) ||
5685 (nCases==1 && (dR[0]>rcl)) ||
5686 (nCases==2 && (dR[0]>rcl && dR[1]>rcl)) ||
5687 (nCases==3 && (dR[0]>rcl && dR[1]>rcl && dR[2]>rcl)))
5688 {
5689 outputlist->Add(track);
5690 sumPt += track->Pt();
5691 nOut++;
5692 }
5693 delete [] dR;
5694 }
5695
5696 if(nCases==0) areaJet[0] = TMath::Pi()*rc*rc;
5697 normFactor = (Float_t) 1./(areaJet[0] / areaOut);
5698
5699 outputlist->Sort();
5700
5701 delete vect3Jet;
5702 delete [] areaJetLarge;
5703 delete [] areaJet;
5704
5705}
5706
5707// ______________________________________________________________________________________________________________________________________________________
3af23c82 5708Float_t AliAnalysisTaskFragmentationFunction::CalcJetArea(const Float_t etaJet, const Float_t rc) const
1da9498b 5709{
3af23c82 5710 // calculate area of jet with eta etaJet and radius rc
1da9498b 5711
5712 Float_t detamax = etaJet + rc;
5713 Float_t detamin = etaJet - rc;
5714 Float_t accmax = 0.0; Float_t accmin = 0.0;
5715 if(detamax > fTrackEtaMax){ // sector outside etamax
5716 Float_t h = fTrackEtaMax - etaJet;
5717 accmax = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
5718 }
5719 if(detamin < fTrackEtaMin){ // sector outside etamin
5720 Float_t h = fTrackEtaMax + etaJet;
5721 accmin = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
5722 }
5723 Float_t areaJet = rc*rc*TMath::Pi() - accmax - accmin;
5724
5725 return areaJet;
5726
5727}
67e37e80 5728
742ee86c 5729// ___________________________________________________________________________________________________________________________
5730void AliAnalysisTaskFragmentationFunction::GetClusterTracksOutOf1Jet(AliAODJet* jet, TList* outputlist, Double_t &normFactor)
5731{
5732 // fill tracks from bckgCluster branch in list,
5733 // for all clusters outside jet cone
5734 // sum up total area of clusters
5735
5736 Double_t rc = GetFFRadius();
5737 Double_t rcl = GetFFBckgRadius();
5738
5739 Double_t areaTotal = 0;
5740 Double_t sumPtTotal = 0;
5741
5742 for(Int_t ij=0; ij<fBckgJetsRec->GetEntries(); ++ij){
5743
5744 AliAODJet* bgrCluster = (AliAODJet*)(fBckgJetsRec->At(ij)); // not 'recCuts': use all clusters in full eta range
5745
5746 Double_t dR = jet->DeltaR(bgrCluster);
5747
5748 if(dR<rcl) continue;
5749
5750 Double_t clusterPt = bgrCluster->Pt();
5751 Double_t area = bgrCluster->EffectiveAreaCharged();
5752 areaTotal += area;
5753 sumPtTotal += clusterPt;
5754
5755 Int_t nTracksJet = bgrCluster->GetRefTracks()->GetEntries();
5756
5757 for(Int_t it = 0; it<nTracksJet; it++){
5758
39e2b057 5759 // embedded tracks - note: using ref tracks here, fBranchRecBckgClusters has to be consistent
5760 if( fUseExtraTracksBgr != 1){
5761 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (bgrCluster->GetTrack(it))){
5762 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5763 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5764 }
5765 }
5766
742ee86c 5767 AliVParticle* track = dynamic_cast<AliVParticle*>(bgrCluster->GetTrack(it));
3170a3f8 5768 if(!track) continue;
742ee86c 5769
5770 Float_t trackPt = track->Pt();
5771 Float_t trackEta = track->Eta();
5772 Float_t trackPhi = TVector2::Phi_0_2pi(track->Phi());
5773
5774 if(trackEta < fTrackEtaMin || trackEta > fTrackEtaMax) continue;
5775 if(trackPhi < fTrackPhiMin || trackPhi > fTrackPhiMax) continue;
5776 if(trackPt < fTrackPtCut) continue;
5777
5778 outputlist->Add(track);
5779 }
5780 }
5781
5782 Double_t areaJet = TMath::Pi()*rc*rc;
5783 if(areaTotal) normFactor = (Float_t) 1./(areaJet / areaTotal);
5784
5785 outputlist->Sort();
5786}
5787
5788// _______________________________________________________________________________________________________________________
5789void AliAnalysisTaskFragmentationFunction::GetClusterTracksMedian(TList* outputlist, Double_t &normFactor)
5790{
5791 // fill tracks from bckgCluster branch,
5792 // using cluster with median density (odd number of clusters)
5793 // or picking randomly one of the two closest to median (even number)
5794
3170a3f8 5795 normFactor = 0;
5796
742ee86c 5797 Int_t nBckgClusters = fBckgJetsRec->GetEntries(); // not 'recCuts': use all clusters in full eta range
5798
39e2b057 5799 if(nBckgClusters<3) return; // need at least 3 clusters (skipping 2 highest)
3170a3f8 5800
742ee86c 5801 Double_t* bgrDensity = new Double_t[nBckgClusters];
5802 Int_t* indices = new Int_t[nBckgClusters];
5803
5804 for(Int_t ij=0; ij<nBckgClusters; ++ij){
5805
5806 AliAODJet* bgrCluster = (AliAODJet*)(fBckgJetsRec->At(ij));
5807 Double_t clusterPt = bgrCluster->Pt();
5808 Double_t area = bgrCluster->EffectiveAreaCharged();
5809
5810 Double_t density = 0;
5811 if(area>0) density = clusterPt/area;
5812
5813 bgrDensity[ij] = density;
5814 indices[ij] = ij;
5815 }
5816
5817 TMath::Sort(nBckgClusters, bgrDensity, indices);
5818
5819 // get median cluster
5820
5821 AliAODJet* medianCluster = 0;
5822 Double_t medianDensity = 0;
5823
5824 if(TMath::Odd(nBckgClusters)){
39e2b057 5825
742ee86c 5826 Int_t medianIndex = indices[(Int_t) (0.5*(nBckgClusters-1))];
5827 medianCluster = (AliAODJet*)(fBckgJetsRec->At(medianIndex));
5828
5829 Double_t clusterPt = medianCluster->Pt();
5830 Double_t area = medianCluster->EffectiveAreaCharged();
5831
5832 if(area>0) medianDensity = clusterPt/area;
5833 }
5834 else{
5835
5836 Int_t medianIndex1 = indices[(Int_t) (0.5*nBckgClusters-1)];
5837 Int_t medianIndex2 = indices[(Int_t) (0.5*nBckgClusters)];
5838
5839 AliAODJet* medianCluster1 = (AliAODJet*)(fBckgJetsRec->At(medianIndex1));
5840 AliAODJet* medianCluster2 = (AliAODJet*)(fBckgJetsRec->At(medianIndex2));
5841
5842 Double_t density1 = 0;
5843 Double_t clusterPt1 = medianCluster1->Pt();
5844 Double_t area1 = medianCluster1->EffectiveAreaCharged();
5845 if(area1>0) density1 = clusterPt1/area1;
39e2b057 5846
742ee86c 5847 Double_t density2 = 0;
5848 Double_t clusterPt2 = medianCluster2->Pt();
5849 Double_t area2 = medianCluster2->EffectiveAreaCharged();
5850 if(area2>0) density2 = clusterPt2/area2;
5851
5852 medianDensity = 0.5*(density1+density2);
5853
5854 medianCluster = ( (fRandom->Rndm()>0.5) ? medianCluster1 : medianCluster2 ); // select one randomly to avoid adding areas
5855 }
39e2b057 5856
742ee86c 5857 Int_t nTracksJet = medianCluster->GetRefTracks()->GetEntries();
5858
5859 for(Int_t it = 0; it<nTracksJet; it++){
5860
39e2b057 5861 // embedded tracks - note: using ref tracks here, fBranchRecBckgClusters has to be consistent
5862 if( fUseExtraTracksBgr != 1){
5863 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (medianCluster->GetTrack(it))){
5864 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5865 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5866 }
5867 }
5868
742ee86c 5869 AliVParticle* track = dynamic_cast<AliVParticle*>(medianCluster->GetTrack(it));
3170a3f8 5870 if(!track) continue;
742ee86c 5871
5872 Float_t trackPt = track->Pt();
5873 Float_t trackEta = track->Eta();
5874 Float_t trackPhi = TVector2::Phi_0_2pi(track->Phi());
5875
5876 if(trackEta < fTrackEtaMin || trackEta > fTrackEtaMax) continue;
5877 if(trackPhi < fTrackPhiMin || trackPhi > fTrackPhiMax) continue;
5878 if(trackPt < fTrackPtCut) continue;
5879
5880 outputlist->Add(track);
5881 }
5882
5883 Double_t areaMedian = medianCluster->EffectiveAreaCharged();
5884 Double_t areaJet = TMath::Pi()*GetFFRadius()*GetFFRadius();
5885
5886 if(areaMedian) normFactor = (Float_t) 1./(areaJet / areaMedian);
5887
5888 outputlist->Sort();
5889
5890 delete[] bgrDensity;
5891 delete[] indices;
5892}
5893
67e37e80 5894// ______________________________________________________________________________________________________________________________________________________
5895void AliAnalysisTaskFragmentationFunction::FillBckgHistos(Int_t type, TList* inputtracklist, TList* inputjetlist, AliAODJet* jet, Float_t leadTrackPt, TLorentzVector* leadTrackV,
5896 AliFragFuncHistos* ffbckghistocuts, AliFragFuncHistos* ffbckghistoleading,
5897 AliFragFuncIntraJetHistos* ijbckghistocuts, AliFragFuncIntraJetHistos* ijbckghistoleading,
5898 AliFragFuncQATrackHistos* qabckghistocuts){
5899
5900 // List of tracks outside jets for background study
5901 TList* tracklistout2jets = new TList();
5902 TList* tracklistout3jets = new TList();
5903 TList* tracklistout2jetsStat = new TList();
5904 TList* tracklistout3jetsStat = new TList();
5905 Double_t sumPtOut2Jets = 0.;
5906 Double_t sumPtOut3Jets = 0.;
5907 Double_t sumPtOut2JetsStat = 0.;
5908 Double_t sumPtOut3JetsStat = 0.;
5909 Double_t normFactor2Jets = 0.;
5910 Double_t normFactor3Jets = 0.;
5911
5912 Int_t nRecJetsCuts = fJetsRecCuts->GetEntries();
5913
5914 if(nRecJetsCuts>1) {
3af23c82 5915 GetTracksOutOfNJets(2,inputtracklist, tracklistout2jets, inputjetlist, sumPtOut2Jets);
5916 GetTracksOutOfNJetsStat(2,inputtracklist, tracklistout2jetsStat, inputjetlist,sumPtOut2JetsStat, normFactor2Jets);
5917
67e37e80 5918 }
5919 if(nRecJetsCuts>2) {
3af23c82 5920 GetTracksOutOfNJets(3,inputtracklist, tracklistout3jets, inputjetlist, sumPtOut3Jets);
5921 GetTracksOutOfNJetsStat(3,inputtracklist, tracklistout3jetsStat, inputjetlist, sumPtOut3JetsStat, normFactor3Jets);
67e37e80 5922 }
5923
5924 if(type==kBckgOutLJ || type==kBckgOutAJ)
5925 {
39e2b057 5926 TList* tracklistoutleading = new TList();
67e37e80 5927 Double_t sumPtOutLeading = 0.;
3af23c82 5928 GetTracksOutOfNJets(1,inputtracklist, tracklistoutleading, inputjetlist, sumPtOutLeading);
67e37e80 5929 if(type==kBckgOutLJ) fh1OutLeadingMult->Fill(tracklistoutleading->GetSize());
5930
5931 for(Int_t it=0; it<tracklistoutleading->GetSize(); ++it){
39e2b057 5932
9939142f 5933 AliVParticle* trackVP = (AliVParticle*)(tracklistoutleading->At(it));
3170a3f8 5934 if(!trackVP) continue;
67e37e80 5935 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5936
5937 Float_t jetPt = jet->Pt();
5938 Float_t trackPt = trackV->Pt();
5939
5940 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5941
5942 if(type==kBckgOutLJ)
5943 {
3af23c82 5944 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt);
67e37e80 5945 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
5946
3af23c82 5947 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt);
67e37e80 5948 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
5949
5950 // Fill track QA for background
3af23c82 5951 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
67e37e80 5952 }
5953
5954 // All cases included
5955 if(nRecJetsCuts==1 && type==kBckgOutAJ)
5956 {
3af23c82 5957 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
67e37e80 5958 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
5959
3af23c82 5960 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
67e37e80 5961 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
5962 }
5963 delete trackV;
5964 }
942bf1b4 5965 // Increment jet pt with one entry in case #tracks outside jets = 0
5966 if(tracklistoutleading->GetSize()==0) {
5967 Float_t jetPt = jet->Pt();
5968 Bool_t incrementJetPt = kTRUE;
5969 if(type==kBckgOutLJ)
5970 {
5971 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
5972 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
5973 }
5974 // All cases included
5975 if(nRecJetsCuts==1 && type==kBckgOutAJ)
5976 {
5977 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
5978 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
5979 }
5980 }
67e37e80 5981 delete tracklistoutleading;
5982 }
5983 if(type==kBckgOutLJStat || type==kBckgOutAJStat)
5984 {
5985 TList* tracklistoutleadingStat = new TList();
5986 Double_t sumPtOutLeadingStat = 0.;
5987 Double_t normFactorLeading = 0.;
5988
3af23c82 5989 GetTracksOutOfNJetsStat(1,inputtracklist, tracklistoutleadingStat, inputjetlist, sumPtOutLeadingStat, normFactorLeading);
742ee86c 5990 if(type==kBckgOutLJStat) fh1OutLeadingStatMult->Fill(tracklistoutleadingStat->GetSize());
67e37e80 5991
5992 for(Int_t it=0; it<tracklistoutleadingStat->GetSize(); ++it){
39e2b057 5993
67e37e80 5994 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistoutleadingStat->At(it));
3170a3f8 5995 if(!trackVP) continue;
67e37e80 5996 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5997
5998 Float_t jetPt = jet->Pt();
5999 Float_t trackPt = trackV->Pt();
67e37e80 6000 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6001
6002 // Stat plots
6003 if(type==kBckgOutLJStat)
6004 {
3af23c82 6005 if(fFFMode)ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorLeading);
67e37e80 6006 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactorLeading);
6007
3af23c82 6008 if(fFFMode)ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactorLeading);
67e37e80 6009 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactorLeading);
6010
6011 // Fill track QA for background
742ee86c 6012 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt); // OB added bgr QA
67e37e80 6013 }
6014
6015 // All cases included
6016 if(nRecJetsCuts==1 && type==kBckgOutAJStat)
6017 {
3af23c82 6018 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorLeading);
67e37e80 6019 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactorLeading );
6020
3af23c82 6021 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactorLeading);
67e37e80 6022 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactorLeading );
742ee86c 6023
6024 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
6025
67e37e80 6026 }
6027 delete trackV;
6028 }
942bf1b4 6029 // Increment jet pt with one entry in case #tracks outside jets = 0
6030 if(tracklistoutleadingStat->GetSize()==0) {
6031 Float_t jetPt = jet->Pt();
6032 Bool_t incrementJetPt = kTRUE;
6033 if(type==kBckgOutLJStat)
6034 {
6035 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorLeading);
6036 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactorLeading);
6037 }
6038 // All cases included
6039 if(nRecJetsCuts==1 && type==kBckgOutLJStat)
6040 {
6041 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorLeading);
6042 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactorLeading );
6043 }
6044 }
6045
67e37e80 6046 delete tracklistoutleadingStat;
6047 }
6048
6049 if(type==kBckgPerp)
6050 {
6051 Double_t sumPtPerp = 0.;
6052 TList* tracklistperp = new TList();
3af23c82 6053 GetTracksTiltedwrpJetAxis(TMath::Pi()/2., inputtracklist,tracklistperp,jet,GetFFRadius(),sumPtPerp);
67e37e80 6054 fh1PerpMult->Fill(tracklistperp->GetSize());
6055
6056 for(Int_t it=0; it<tracklistperp->GetSize(); ++it){
6057
6058 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistperp->At(it));
ab851c96 6059 if(!trackVP)continue;
67e37e80 6060 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6061
6062 Float_t jetPt = jet->Pt();
6063 Float_t trackPt = trackV->Pt();
6064
6065 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6066
3af23c82 6067 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
67e37e80 6068 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6069
3af23c82 6070 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
67e37e80 6071 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6072
6073 // Fill track QA for background
3af23c82 6074 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
67e37e80 6075
6076 delete trackV;
6077 }
942bf1b4 6078 // Increment jet pt with one entry in case #tracks outside jets = 0
6079 if(tracklistperp->GetSize()==0) {
6080 Float_t jetPt = jet->Pt();
6081 Bool_t incrementJetPt = kTRUE;
6082 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6083 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6084 }
6085
67e37e80 6086 delete tracklistperp;
6087 }
6088
3af23c82 6089 if(type==kBckgASide)
6090 {
6091 Double_t sumPtASide = 0.;
6092 TList* tracklistaside = new TList();
6093 GetTracksTiltedwrpJetAxis(TMath::Pi(),inputtracklist,tracklistaside,jet,GetFFRadius(),sumPtASide);
6094 fh1ASideMult->Fill(tracklistaside->GetSize());
6095
6096 for(Int_t it=0; it<tracklistaside->GetSize(); ++it){
39e2b057 6097
1ea145ef 6098 AliVParticle* trackVP = (AliVParticle*)(tracklistaside->At(it));
3170a3f8 6099 if(!trackVP) continue;
3af23c82 6100 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6101
6102 Float_t jetPt = jet->Pt();
6103 Float_t trackPt = trackV->Pt();
6104
6105 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6106
6107 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
6108 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6109
6110 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
6111 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6112
6113 // Fill track QA for background
6114 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
6115
6116 delete trackV;
6117 }
942bf1b4 6118 if(tracklistaside->GetSize()==0) {
6119 Float_t jetPt = jet->Pt();
6120 Bool_t incrementJetPt = kTRUE;
6121 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6122 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6123 }
6124
3af23c82 6125 delete tracklistaside;
6126 }
6127
6128 if(type==kBckgASideWindow)
6129 {
6130 Double_t normFactorASide = 0.;
6131 Double_t sumPtASideW = 0.;
6132 TList* tracklistasidew = new TList();
6133 GetTracksTiltedwrpJetAxisWindow(TMath::Pi(),inputtracklist,tracklistasidew,jet,GetFFRadius(),sumPtASideW,normFactorASide);
6134 fh1ASideWindowMult->Fill(tracklistasidew->GetSize());
6135
6136 for(Int_t it=0; it<tracklistasidew->GetSize(); ++it){
6137
6138 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistasidew->At(it));
3170a3f8 6139 if(!trackVP) continue;
3af23c82 6140 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6141
6142 Float_t jetPt = jet->Pt();
6143 Float_t trackPt = trackV->Pt();
3af23c82 6144 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6145
6146 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorASide);
6147 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactorASide);
6148
6149 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactorASide );
6150 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactorASide );
6151
6152 // Fill track QA for background
6153 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt, kFALSE, normFactorASide);
6154
6155 delete trackV;
6156 }
942bf1b4 6157 if(tracklistasidew->GetSize()==0) {
6158 Float_t jetPt = jet->Pt();
6159 Bool_t incrementJetPt = kTRUE;
6160 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorASide);
6161 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactorASide);
6162 }
6163
3af23c82 6164 delete tracklistasidew;
6165 }
6166
6167 if(type==kBckgPerpWindow)
6168 {
6169 Double_t normFactorPerp = 0.;
6170 Double_t sumPtPerpW = 0.;
6171 TList* tracklistperpw = new TList();
6172 GetTracksTiltedwrpJetAxisWindow(TMath::Pi()/2.,inputtracklist,tracklistperpw,jet,GetFFRadius(),sumPtPerpW,normFactorPerp);
6173 fh1PerpWindowMult->Fill(tracklistperpw->GetSize());
6174
6175 for(Int_t it=0; it<tracklistperpw->GetSize(); ++it){
39e2b057 6176
3af23c82 6177 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistperpw->At(it));
3170a3f8 6178 if(!trackVP) continue;
3af23c82 6179 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6180
6181 Float_t jetPt = jet->Pt();
6182 Float_t trackPt = trackV->Pt();
3af23c82 6183 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6184
6185 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorPerp);
6186 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactorPerp);
6187
6188 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactorPerp );
6189 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactorPerp );
6190
6191 // Fill track QA for background
6192 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt, kFALSE, normFactorPerp);
6193
6194 delete trackV;
6195 }
942bf1b4 6196 if(tracklistperpw->GetSize()==0) {
6197 Float_t jetPt = jet->Pt();
6198 Bool_t incrementJetPt = kTRUE;
6199 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorPerp);
6200 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactorPerp);
6201 }
6202
3af23c82 6203 delete tracklistperpw;
6204 }
6205
6206
67e37e80 6207 if(type==kBckgOut2J || type==kBckgOutAJ)
6208 {
6209 if(type==kBckgOut2J) fh1Out2JetsMult->Fill(tracklistout2jets->GetSize());
6210 for(Int_t it=0; it<tracklistout2jets->GetSize(); ++it){
39e2b057 6211
67e37e80 6212 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout2jets->At(it));
3170a3f8 6213 if(!trackVP) continue;
67e37e80 6214 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6215
6216 Float_t jetPt = jet->Pt();
6217 Float_t trackPt = trackV->Pt();
6218
6219 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6220
6221 if(type==kBckgOut2J)
6222 {
3af23c82 6223 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
67e37e80 6224 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6225
3af23c82 6226 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
67e37e80 6227 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6228
3af23c82 6229 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
67e37e80 6230 }
6231
6232 // All cases included
6233 if(nRecJetsCuts==2 && type==kBckgOutAJ)
6234 {
3af23c82 6235 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
67e37e80 6236 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6237
3af23c82 6238 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
67e37e80 6239 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6240 }
6241 delete trackV;
6242 }
942bf1b4 6243 // Increment jet pt with one entry in case #tracks outside jets = 0
6244 if(tracklistout2jets->GetSize()==0) {
6245 Float_t jetPt = jet->Pt();
6246 Bool_t incrementJetPt = kTRUE;
6247 if(type==kBckgOut2J)
6248 {
6249 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6250 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6251 }
6252 // All cases included
6253 if(nRecJetsCuts==2 && type==kBckgOutAJ)
6254 {
6255 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6256 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6257 }
6258 }
6259
67e37e80 6260 }
6261
6262 if(type==kBckgOut2JStat || type==kBckgOutAJStat)
6263 {
6264 for(Int_t it=0; it<tracklistout2jetsStat->GetSize(); ++it){
6265
6266 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout2jetsStat->At(it));
3170a3f8 6267 if(!trackVP) continue;
67e37e80 6268 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6269
6270 Float_t jetPt = jet->Pt();
6271 Float_t trackPt = trackV->Pt();
67e37e80 6272 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6273
6274 if(type==kBckgOut2JStat)
6275 {
3af23c82 6276 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor2Jets);
67e37e80 6277 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactor2Jets );
6278
3af23c82 6279 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactor2Jets);
67e37e80 6280 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactor2Jets );
6281
3170a3f8 6282 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
67e37e80 6283 }
6284
6285 // All cases included
6286 if(nRecJetsCuts==2 && type==kBckgOutAJStat)
6287 {
3af23c82 6288 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor2Jets);
67e37e80 6289 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactor2Jets );
6290
3af23c82 6291 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactor2Jets);
67e37e80 6292 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactor2Jets );
742ee86c 6293
6294 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
67e37e80 6295 }
6296 delete trackV;
6297 }
942bf1b4 6298 // Increment jet pt with one entry in case #tracks outside jets = 0
6299 if(tracklistout2jetsStat->GetSize()==0) {
6300 Float_t jetPt = jet->Pt();
6301 Bool_t incrementJetPt = kTRUE;
6302 if(type==kBckgOut2JStat)
39e2b057 6303 {
942bf1b4 6304 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor2Jets);
6305 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactor2Jets);
6306 }
6307 // All cases included
6308 if(nRecJetsCuts==2 && type==kBckgOutAJStat)
6309 {
6310 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor2Jets);
6311 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactor2Jets );
6312 }
6313 }
39e2b057 6314
67e37e80 6315 }
6316
6317 if(type==kBckgOut3J || type==kBckgOutAJ)
6318 {
6319 if(type==kBckgOut3J) fh1Out3JetsMult->Fill(tracklistout3jets->GetSize());
6320
6321 for(Int_t it=0; it<tracklistout3jets->GetSize(); ++it){
6322
6323 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout3jets->At(it));
3170a3f8 6324 if(!trackVP) continue;
67e37e80 6325 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6326
6327 Float_t jetPt = jet->Pt();
6328 Float_t trackPt = trackV->Pt();
6329
6330 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6331
6332 if(type==kBckgOut3J)
6333 {
942bf1b4 6334 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
67e37e80 6335 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6336
942bf1b4 6337 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
67e37e80 6338 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6339
6340 qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
6341 }
6342
6343 // All cases included
6344 if(nRecJetsCuts==3 && type==kBckgOutAJ)
6345 {
942bf1b4 6346 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
67e37e80 6347 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6348
942bf1b4 6349 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
67e37e80 6350 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6351 }
6352 delete trackV;
6353 }
942bf1b4 6354 // Increment jet pt with one entry in case #tracks outside jets = 0
6355 if(tracklistout3jets->GetSize()==0) {
6356 Float_t jetPt = jet->Pt();
6357 Bool_t incrementJetPt = kTRUE;
6358 if(type==kBckgOut3J)
6359 {
6360 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6361 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6362 }
6363 // All cases included
6364 if(nRecJetsCuts==3 && type==kBckgOutAJ)
6365 {
6366 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6367 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6368 }
6369 }
67e37e80 6370 }
6371
6372 if(type==kBckgOut3JStat || type==kBckgOutAJStat)
6373 {
6374 for(Int_t it=0; it<tracklistout3jetsStat->GetSize(); ++it){
6375
6376 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout3jetsStat->At(it));
3170a3f8 6377 if(!trackVP) continue;
67e37e80 6378 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6379
6380 Float_t jetPt = jet->Pt();
6381 Float_t trackPt = trackV->Pt();
67e37e80 6382 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6383
6384 if(type==kBckgOut3JStat)
6385 {
942bf1b4 6386 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor3Jets);
67e37e80 6387 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactor3Jets);
6388
942bf1b4 6389 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactor3Jets);
67e37e80 6390 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactor3Jets);
6391
3af23c82 6392 //if(fQAMode&1) qabckghistocuts->FillTrackQA( trackEta, TVector2::Phi_0_2pi(trackPhi), trackPt);
67e37e80 6393 }
6394
6395 // All cases included
6396 if(nRecJetsCuts==3 && type==kBckgOutAJStat)
6397 {
3af23c82 6398 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor3Jets );
67e37e80 6399 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactor3Jets);
6400
3af23c82 6401 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactor3Jets );
742ee86c 6402 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactor3Jets );
6403
6404 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
6405
67e37e80 6406 }
6407 delete trackV;
6408 }
942bf1b4 6409 // Increment jet pt with one entry in case #tracks outside jets = 0
6410 if(tracklistout3jetsStat->GetSize()==0) {
6411 Float_t jetPt = jet->Pt();
6412 Bool_t incrementJetPt = kTRUE;
6413 if(type==kBckgOut3JStat)
6414 {
6415 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor3Jets);
6416 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactor3Jets);
6417 }
6418 // All cases included
6419 if(nRecJetsCuts==3 && type==kBckgOutAJStat)
6420 {
6421 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor3Jets);
6422 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactor3Jets );
6423 }
6424 }
6425
67e37e80 6426 }
6427
742ee86c 6428 if(type==kBckgClustersOutLeading){ // clusters bgr: all tracks in clusters out of leading jet
6429
6430 TList* tracklistClustersOutLeading = new TList();
6431 Double_t normFactorClusters = 0;
6432 Float_t jetPt = jet->Pt();
6433
6434 GetClusterTracksOutOf1Jet(jet, tracklistClustersOutLeading, normFactorClusters);
6435 fh1OutClustersMult->Fill(tracklistClustersOutLeading->GetSize());
6436
6437 for(Int_t it=0; it<tracklistClustersOutLeading->GetSize(); ++it){
6438
6439 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistClustersOutLeading->At(it));
3170a3f8 6440 if(!trackVP) continue;
742ee86c 6441 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6442
6443 Float_t trackPt = trackVP->Pt();
6444
6445 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6446
6447 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorClusters );
6448 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt );
67e37e80 6449
742ee86c 6450 delete trackV;
6451 }
6452
6453 delete tracklistClustersOutLeading;
6454
6455 }
6456
6457 if(type == kBckgClusters){ // clusters bgr: all tracks in 'median cluster'
6458
6459 TList* tracklistClustersMedian = new TList();
6460 Double_t normFactorClusters = 0;
6461 Float_t jetPt = jet->Pt();
6462
6463 GetClusterTracksMedian(tracklistClustersMedian, normFactorClusters);
6464 fh1MedianClustersMult->Fill(tracklistClustersMedian->GetSize());
3170a3f8 6465
742ee86c 6466 for(Int_t it=0; it<tracklistClustersMedian->GetSize(); ++it){
6467
6468 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistClustersMedian->At(it));
3170a3f8 6469 if(!trackVP) continue;
742ee86c 6470 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6471
6472 Float_t trackPt = trackVP->Pt();
6473
6474 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6475
6476 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorClusters );
6477 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt );
6478
6479 delete trackV;
6480 }
6481
6482 delete tracklistClustersMedian;
6483 }
6484
67e37e80 6485 delete tracklistout2jets;
6486 delete tracklistout3jets;
6487 delete tracklistout2jetsStat;
6488 delete tracklistout3jetsStat;
742ee86c 6489
67e37e80 6490}
3af23c82 6491
6492// ______________________________________________________________________________________________________________________________________________________
6493AliAODJet* AliAnalysisTaskFragmentationFunction::GetAODBckgSubJet(AliAODJet* jet, Int_t method)
6494{
6495 // correct jet pt for (mean bgr energy density) x (jet area)
6496
44b235ce 6497 if(!fBranchRecBackJets.Length()){
6498 if(fDebug>0)Printf("%s:%d background branch name not set",(char*)__FILE__,__LINE__);
6499 return 0;
6500 }
6501
3af23c82 6502 static AliAODJetEventBackground* externalBackground = (AliAODJetEventBackground*)(fAOD->FindListObject(fBranchRecBackJets.Data()));
6503
6504 if(!externalBackground){
44b235ce 6505 if(fDebug>0)Printf("%s:%d no external background object found in %s",(char*)__FILE__,__LINE__,fBranchRecBackJets.Data());
3af23c82 6506 return 0;
6507 }
6508
6509 Float_t rho = externalBackground->GetBackground(method);
6510
6511 // Calculate background and subtract it from jet pt
6512 Float_t ptBack = rho*jet->EffectiveAreaCharged();
6513 Float_t ptSub = jet->Pt()-ptBack;
6514
6515 // Get px, py, pz from eta, phi, pt
6516 TLorentzVector vecSub;
6517 AliAODJet *tmpJet = 0;
6518 if(ptSub>=0){
6519 vecSub.SetPtEtaPhiM(ptSub,jet->Eta(),jet->Phi(),0.);
6520 tmpJet = new AliAODJet(vecSub.Px(),vecSub.Py(),vecSub.Pz(),vecSub.P());
6521 }
6522
6523 return tmpJet;
3af23c82 6524}