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