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