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