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