]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG4/JetTasks/AliAnalysisTaskFragmentationFunction.cxx
b4355f385cee2c3c4c0d4100f1d570482897071b
[u/mrichter/AliRoot.git] / PWG4 / JetTasks / 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 "TString.h"
29 #include "THnSparse.h"
30 #include "TProfile.h"
31 #include "TFile.h"
32 #include "TKey.h"
33 #include "TRandom.h"
34
35 #include "AliAODInputHandler.h" 
36 #include "AliAODHandler.h" 
37 #include "AliESDEvent.h"
38 #include "AliAODMCParticle.h"
39 #include "AliAODJet.h"
40 #include "AliGenPythiaEventHeader.h"
41 #include "AliGenHijingEventHeader.h"
42 #include "AliInputEventHandler.h"
43
44 #include "AliAnalysisHelperJetTasks.h"
45 #include "AliAnalysisManager.h"
46 #include "AliAnalysisTaskSE.h"
47 #include "AliVParticle.h"
48 #include "AliVEvent.h"
49
50 #include "AliAnalysisTaskFragmentationFunction.h"
51
52
53 ClassImp(AliAnalysisTaskFragmentationFunction)
54
55 //____________________________________________________________________________
56 AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction()
57    : AliAnalysisTaskSE()
58    ,fESD(0)
59    ,fAOD(0)
60    ,fBranchRecJets("jets")
61    ,fBranchGenJets("")
62    ,fTrackTypeGen(0)
63    ,fJetTypeGen(0)
64    ,fJetTypeRecEff(0)
65    ,fFilterMask(0)
66    ,fUsePhysicsSelection(kTRUE)
67    ,fTrackPtCut(0)
68    ,fTrackEtaMin(0)
69    ,fTrackEtaMax(0)
70    ,fTrackPhiMin(0)
71    ,fTrackPhiMax(0)
72    ,fJetPtCut(0)
73    ,fJetEtaMin(0)
74    ,fJetEtaMax(0)
75    ,fJetPhiMin(0)
76    ,fJetPhiMax(0)
77    ,fDiJetCut(0)
78    ,fDiJetDeltaPhiCut(0)
79    ,fDiJetPtFractionCut(0)
80    ,fDiJetCDFCut(0)
81    ,fDiJetKindBins(0)
82    ,fFFRadius(0)
83    ,fFFBckgRadius(0)
84    ,fBckgMode(0)
85    ,fAvgTrials(0)
86    ,fTracksRec(0)
87    ,fTracksRecCuts(0)
88    ,fTracksGen(0)
89    ,fTracksAODMCCharged(0)
90    ,fTracksRecQualityCuts(0)
91    ,fJetsRec(0)
92    ,fJetsRecCuts(0)
93    ,fJetsGen(0)
94    ,fJetsRecEff(0)
95    ,fQATrackHistosRec(0)
96    ,fQATrackHistosRecCuts(0)
97    ,fQATrackHistosGen(0)
98    ,fQAJetHistosRec(0)
99    ,fQAJetHistosRecCuts(0)
100    ,fQAJetHistosRecCutsLeading(0)
101    ,fQAJetHistosGen(0)
102    ,fQAJetHistosGenLeading(0)
103    ,fQAJetHistosRecEffLeading(0)
104    ,fFFHistosRecCuts(0)
105    ,fFFHistosRecLeading(0)
106    ,fFFHistosRecLeadingTrack(0)
107    ,fFFHistosGen(0)
108    ,fFFHistosGenLeading(0)
109    ,fFFHistosGenLeadingTrack(0)
110    ,fIJHistosRecCuts(0)
111    ,fIJHistosRecLeading(0)
112    ,fIJHistosRecLeadingTrack(0)
113    ,fIJHistosGen(0)
114    ,fIJHistosGenLeading(0)
115    ,fIJHistosGenLeadingTrack(0)
116    ,fFFDiJetHistosRecCuts(0)
117    ,fFFDiJetHistosRecLeading(0)
118    ,fFFDiJetHistosRecLeadingTrack(0)
119    ,fFFDiJetHistosGen(0)
120    ,fFFDiJetHistosGenLeading(0)
121    ,fFFDiJetHistosGenLeadingTrack(0)
122    ,fQADiJetHistosRecCuts(0)
123    ,fQADiJetHistosGen(0)
124    ,fQATrackHighPtThreshold(0)
125    ,fFFNBinsJetPt(0)    
126    ,fFFJetPtMin(0) 
127    ,fFFJetPtMax(0)
128    ,fFFNBinsPt(0)      
129    ,fFFPtMin(0)        
130    ,fFFPtMax(0)        
131    ,fFFNBinsXi(0)      
132    ,fFFXiMin(0)        
133    ,fFFXiMax(0)        
134    ,fFFNBinsZ(0)       
135    ,fFFZMin(0)         
136    ,fFFZMax(0)         
137    ,fQAJetNBinsPt(0)   
138    ,fQAJetPtMin(0)     
139    ,fQAJetPtMax(0)     
140    ,fQAJetNBinsEta(0)  
141    ,fQAJetEtaMin(0)    
142    ,fQAJetEtaMax(0)    
143    ,fQAJetNBinsPhi(0)  
144    ,fQAJetPhiMin(0)    
145    ,fQAJetPhiMax(0)    
146    ,fQATrackNBinsPt(0) 
147    ,fQATrackPtMin(0)   
148    ,fQATrackPtMax(0)   
149    ,fQATrackNBinsEta(0)
150    ,fQATrackEtaMin(0)  
151    ,fQATrackEtaMax(0)  
152    ,fQATrackNBinsPhi(0)
153    ,fQATrackPhiMin(0)  
154    ,fQATrackPhiMax(0)
155    ,fIJNBinsJetPt(0)
156    ,fIJJetPtMin(0)
157    ,fIJJetPtMax(0)
158    ,fIJNBinsPt(0)
159    ,fIJPtMin(0)
160    ,fIJPtMax(0)
161    ,fIJNBinsZ(0)
162    ,fIJZMin(0)
163    ,fIJZMax(0)
164    ,fIJNBinsCosTheta(0)
165    ,fIJCosThetaMin(0)
166    ,fIJCosThetaMax(0)
167    ,fIJNBinsTheta(0)
168    ,fIJThetaMin(0)
169    ,fIJThetaMax(0)
170    ,fIJNBinsJt(0)
171    ,fIJJtMin(0)
172    ,fIJJtMax(0)
173    ,fDiJetNBinsJetInvMass(0)
174    ,fDiJetJetInvMassMin(0)
175    ,fDiJetJetInvMassMax(0)
176    ,fDiJetNBinsJetPt(0)
177    ,fDiJetJetPtMin(0)
178    ,fDiJetJetPtMax(0)
179    ,fDiJetNBinsPt(0)
180    ,fDiJetPtMin(0)
181    ,fDiJetPtMax(0)
182    ,fDiJetNBinsXi(0)
183    ,fDiJetXiMin(0)
184    ,fDiJetXiMax(0)
185    ,fDiJetNBinsZ(0)
186    ,fDiJetZMin(0)
187    ,fDiJetZMax(0)
188    ,fQADiJetNBinsInvMass(0)
189    ,fQADiJetInvMassMin(0)
190    ,fQADiJetInvMassMax(0)
191    ,fQADiJetNBinsJetPt(0)
192    ,fQADiJetJetPtMin(0)
193    ,fQADiJetJetPtMax(0)
194    ,fQADiJetNBinsDeltaPhi(0)
195    ,fQADiJetDeltaPhiMin(0)
196    ,fQADiJetDeltaPhiMax(0)
197    ,fQADiJetNBinsDeltaEta(0)
198    ,fQADiJetDeltaEtaMin(0)
199    ,fQADiJetDeltaEtaMax(0)
200    ,fQADiJetNBinsDeltaPt(0)
201    ,fQADiJetDeltaPtMin(0)
202    ,fQADiJetDeltaPtMax(0)
203    ,fCommonHistList(0)
204    ,fh1EvtSelection(0)
205    ,fh1VertexNContributors(0)
206    ,fh1VertexZ(0)
207    ,fh1EvtMult(0)
208    ,fh1Xsec(0)
209    ,fh1Trials(0)
210    ,fh1PtHard(0)
211    ,fh1PtHardTrials(0)
212    ,fh1nRecJetsCuts(0)
213    ,fh1nGenJets(0)
214    ,fh1nRecEffJets(0)
215    ,fhnSingleTrackRecEffHisto(0)
216    ,fhnJetTrackRecEffHisto(0)
217    // Background
218    ,fh1OutLeadingMult(0)
219    ,fh1PerpMult(0)
220    ,fh1Out2JetsMult(0)
221    ,fh1Out3JetsMult(0)
222    ,fQABckgNoJetTrackHistosRec(0)      
223    ,fQABckgNoJetTrackHistosRecCuts(0)  
224    ,fQABckgNoJetTrackHistosGen(0)      
225    ,fQABckgLeadingTrackHistosRec(0)      
226    ,fQABckgLeadingTrackHistosRecCuts(0)  
227    ,fQABckgLeadingTrackHistosGen(0)      
228    ,fQABckg2JetsTrackHistosRec(0)      
229    ,fQABckg2JetsTrackHistosRecCuts(0)  
230    ,fQABckg2JetsTrackHistosGen(0)
231    ,fQABckg3JetsTrackHistosRec(0)      
232    ,fQABckg3JetsTrackHistosRecCuts(0)  
233    ,fQABckg3JetsTrackHistosGen(0)      
234    ,fQABckgPerpTrackHistosRec(0)      
235    ,fQABckgPerpTrackHistosRecCuts(0)  
236    ,fQABckgPerpTrackHistosGen(0)  
237    ,fFFBckgNoJetHistosRecCuts(0)
238    ,fFFBckgNoJetHistosRecLeading(0)
239    ,fFFBckgNoJetHistosGen(0)       
240    ,fFFBckgNoJetHistosGenLeading(0)
241    ,fFFBckgHistosRecCuts(0)
242    ,fFFBckgHistosRecLeading(0)
243    ,fFFBckgHistosGen(0)       
244    ,fFFBckgHistosGenLeading(0)
245    ,fFFBckgLeadingHistosRecCuts(0)
246    ,fFFBckgLeadingHistosRecLeading(0)
247    ,fFFBckgLeadingHistosGen(0)       
248    ,fFFBckgLeadingHistosGenLeading(0)
249    ,fFFBckg2JetsHistosRecCuts(0)     
250    ,fFFBckg2JetsHistosRecLeading(0)  
251    ,fFFBckg2JetsHistosGen(0)         
252    ,fFFBckg2JetsHistosGenLeading(0)  
253    ,fFFBckg3JetsHistosRecCuts(0)     
254    ,fFFBckg3JetsHistosRecLeading(0)  
255    ,fFFBckg3JetsHistosGen(0)         
256    ,fFFBckg3JetsHistosGenLeading(0)  
257    ,fFFBckgPerpHistosRecCuts(0)
258    ,fFFBckgPerpHistosRecLeading(0)
259    ,fFFBckgPerpHistosGen(0)       
260    ,fFFBckgPerpHistosGenLeading(0)
261    ,fFFBckgHistosStatRecCuts(0)
262    ,fFFBckgHistosStatRecLeading(0)
263    ,fFFBckgHistosStatGen(0)       
264    ,fFFBckgHistosStatGenLeading(0)
265    ,fFFBckgLeadingHistosStatRecCuts(0)
266    ,fFFBckgLeadingHistosStatRecLeading(0)
267    ,fFFBckgLeadingHistosStatGen(0)       
268    ,fFFBckgLeadingHistosStatGenLeading(0)
269    ,fFFBckg2JetsHistosStatRecCuts(0)     
270    ,fFFBckg2JetsHistosStatRecLeading(0)  
271    ,fFFBckg2JetsHistosStatGen(0)         
272    ,fFFBckg2JetsHistosStatGenLeading(0)  
273    ,fFFBckg3JetsHistosStatRecCuts(0)     
274    ,fFFBckg3JetsHistosStatRecLeading(0)  
275    ,fFFBckg3JetsHistosStatGen(0)         
276    ,fFFBckg3JetsHistosStatGenLeading(0)  
277    ,fIJBckgNoJetHistosRecCuts(0)   
278    ,fIJBckgNoJetHistosRecLeading(0)
279    ,fIJBckgNoJetHistosGen(0)       
280    ,fIJBckgNoJetHistosGenLeading(0)
281    ,fIJBckgHistosRecCuts(0)   
282    ,fIJBckgHistosRecLeading(0)
283    ,fIJBckgHistosGen(0)       
284    ,fIJBckgHistosGenLeading(0)
285    ,fIJBckgLeadingHistosRecCuts(0)   
286    ,fIJBckgLeadingHistosRecLeading(0)
287    ,fIJBckgLeadingHistosGen(0)       
288    ,fIJBckgLeadingHistosGenLeading(0)
289    ,fIJBckg2JetsHistosRecCuts(0)     
290    ,fIJBckg2JetsHistosRecLeading(0)  
291    ,fIJBckg2JetsHistosGen(0)         
292    ,fIJBckg2JetsHistosGenLeading(0)  
293    ,fIJBckg3JetsHistosRecCuts(0)     
294    ,fIJBckg3JetsHistosRecLeading(0)  
295    ,fIJBckg3JetsHistosGen(0)         
296    ,fIJBckg3JetsHistosGenLeading(0)  
297    ,fIJBckgPerpHistosRecCuts(0)   
298    ,fIJBckgPerpHistosRecLeading(0)
299    ,fIJBckgPerpHistosGen(0)       
300    ,fIJBckgPerpHistosGenLeading(0)
301    ,fIJBckgHistosStatRecCuts(0)   
302    ,fIJBckgHistosStatRecLeading(0)
303    ,fIJBckgHistosStatGen(0)       
304    ,fIJBckgHistosStatGenLeading(0)
305    ,fIJBckgLeadingHistosStatRecCuts(0)   
306    ,fIJBckgLeadingHistosStatRecLeading(0)
307    ,fIJBckgLeadingHistosStatGen(0)       
308    ,fIJBckgLeadingHistosStatGenLeading(0)
309    ,fIJBckg2JetsHistosStatRecCuts(0)     
310    ,fIJBckg2JetsHistosStatRecLeading(0)  
311    ,fIJBckg2JetsHistosStatGen(0)         
312    ,fIJBckg2JetsHistosStatGenLeading(0)  
313    ,fIJBckg3JetsHistosStatRecCuts(0)     
314    ,fIJBckg3JetsHistosStatRecLeading(0)  
315    ,fIJBckg3JetsHistosStatGen(0)         
316    ,fIJBckg3JetsHistosStatGenLeading(0) 
317 {
318    // default constructor
319 }
320
321 //__________________________________________________________________________________________
322 AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const char *name) 
323   : AliAnalysisTaskSE(name)
324   ,fESD(0)
325   ,fAOD(0)
326   ,fBranchRecJets("jets")
327   ,fBranchGenJets("")
328   ,fTrackTypeGen(0)
329   ,fJetTypeGen(0)
330   ,fJetTypeRecEff(0)
331   ,fFilterMask(0)
332   ,fUsePhysicsSelection(kTRUE)
333   ,fTrackPtCut(0)
334   ,fTrackEtaMin(0)
335   ,fTrackEtaMax(0)
336   ,fTrackPhiMin(0)
337   ,fTrackPhiMax(0)
338   ,fJetPtCut(0)
339   ,fJetEtaMin(0)
340   ,fJetEtaMax(0)
341   ,fJetPhiMin(0)
342   ,fJetPhiMax(0)
343   ,fDiJetCut(0)
344   ,fDiJetDeltaPhiCut(0)
345   ,fDiJetPtFractionCut(0)
346   ,fDiJetCDFCut(0)
347   ,fDiJetKindBins(0)
348   ,fFFRadius(0)
349   ,fFFBckgRadius(0)
350   ,fBckgMode(0)
351   ,fAvgTrials(0)
352   ,fTracksRec(0)
353   ,fTracksRecCuts(0)
354   ,fTracksGen(0)
355   ,fTracksAODMCCharged(0)
356   ,fTracksRecQualityCuts(0)
357   ,fJetsRec(0)
358   ,fJetsRecCuts(0)
359   ,fJetsGen(0)
360   ,fJetsRecEff(0)
361   ,fQATrackHistosRec(0)
362   ,fQATrackHistosRecCuts(0)
363   ,fQATrackHistosGen(0)
364   ,fQAJetHistosRec(0)
365   ,fQAJetHistosRecCuts(0)
366   ,fQAJetHistosRecCutsLeading(0)
367   ,fQAJetHistosGen(0)
368   ,fQAJetHistosGenLeading(0)
369   ,fQAJetHistosRecEffLeading(0)
370   ,fFFHistosRecCuts(0)
371   ,fFFHistosRecLeading(0)
372   ,fFFHistosRecLeadingTrack(0)
373   ,fFFHistosGen(0)
374   ,fFFHistosGenLeading(0)
375   ,fFFHistosGenLeadingTrack(0)
376   ,fIJHistosRecCuts(0)
377   ,fIJHistosRecLeading(0)
378   ,fIJHistosRecLeadingTrack(0)
379   ,fIJHistosGen(0)
380   ,fIJHistosGenLeading(0)
381   ,fIJHistosGenLeadingTrack(0)
382   ,fFFDiJetHistosRecCuts(0)
383   ,fFFDiJetHistosRecLeading(0)
384   ,fFFDiJetHistosRecLeadingTrack(0)
385   ,fFFDiJetHistosGen(0)
386   ,fFFDiJetHistosGenLeading(0)
387   ,fFFDiJetHistosGenLeadingTrack(0)
388   ,fQADiJetHistosRecCuts(0)
389   ,fQADiJetHistosGen(0)
390   ,fQATrackHighPtThreshold(0) 
391   ,fFFNBinsJetPt(0)    
392   ,fFFJetPtMin(0) 
393   ,fFFJetPtMax(0)
394   ,fFFNBinsPt(0)      
395   ,fFFPtMin(0)        
396   ,fFFPtMax(0)        
397   ,fFFNBinsXi(0)      
398   ,fFFXiMin(0)        
399   ,fFFXiMax(0)        
400   ,fFFNBinsZ(0)       
401   ,fFFZMin(0)         
402   ,fFFZMax(0)         
403   ,fQAJetNBinsPt(0)   
404   ,fQAJetPtMin(0)     
405   ,fQAJetPtMax(0)     
406   ,fQAJetNBinsEta(0)  
407   ,fQAJetEtaMin(0)    
408   ,fQAJetEtaMax(0)    
409   ,fQAJetNBinsPhi(0)  
410   ,fQAJetPhiMin(0)    
411   ,fQAJetPhiMax(0)    
412   ,fQATrackNBinsPt(0) 
413   ,fQATrackPtMin(0)   
414   ,fQATrackPtMax(0)   
415   ,fQATrackNBinsEta(0)
416   ,fQATrackEtaMin(0)  
417   ,fQATrackEtaMax(0)  
418   ,fQATrackNBinsPhi(0)
419   ,fQATrackPhiMin(0)  
420   ,fQATrackPhiMax(0)  
421   ,fIJNBinsJetPt(0)
422   ,fIJJetPtMin(0)
423   ,fIJJetPtMax(0)
424   ,fIJNBinsPt(0)
425   ,fIJPtMin(0)
426   ,fIJPtMax(0)
427   ,fIJNBinsZ(0)
428   ,fIJZMin(0)
429   ,fIJZMax(0)
430   ,fIJNBinsCosTheta(0)
431   ,fIJCosThetaMin(0)
432   ,fIJCosThetaMax(0)
433   ,fIJNBinsTheta(0)
434   ,fIJThetaMin(0)
435   ,fIJThetaMax(0)
436   ,fIJNBinsJt(0)
437   ,fIJJtMin(0)
438   ,fIJJtMax(0)
439   ,fDiJetNBinsJetInvMass(0)
440   ,fDiJetJetInvMassMin(0)
441   ,fDiJetJetInvMassMax(0)
442   ,fDiJetNBinsJetPt(0)
443   ,fDiJetJetPtMin(0)
444   ,fDiJetJetPtMax(0)
445   ,fDiJetNBinsPt(0)
446   ,fDiJetPtMin(0)
447   ,fDiJetPtMax(0)
448   ,fDiJetNBinsXi(0)
449   ,fDiJetXiMin(0)
450   ,fDiJetXiMax(0)
451   ,fDiJetNBinsZ(0)
452   ,fDiJetZMin(0)
453   ,fDiJetZMax(0)
454   ,fQADiJetNBinsInvMass(0)
455   ,fQADiJetInvMassMin(0)
456   ,fQADiJetInvMassMax(0)
457   ,fQADiJetNBinsJetPt(0)
458   ,fQADiJetJetPtMin(0)
459   ,fQADiJetJetPtMax(0)
460   ,fQADiJetNBinsDeltaPhi(0)
461   ,fQADiJetDeltaPhiMin(0)
462   ,fQADiJetDeltaPhiMax(0)
463   ,fQADiJetNBinsDeltaEta(0)
464   ,fQADiJetDeltaEtaMin(0)
465   ,fQADiJetDeltaEtaMax(0)
466   ,fQADiJetNBinsDeltaPt(0)
467   ,fQADiJetDeltaPtMin(0)
468   ,fQADiJetDeltaPtMax(0)
469   ,fCommonHistList(0)
470   ,fh1EvtSelection(0)
471   ,fh1VertexNContributors(0)
472   ,fh1VertexZ(0)
473   ,fh1EvtMult(0)
474   ,fh1Xsec(0)
475   ,fh1Trials(0)
476   ,fh1PtHard(0)
477   ,fh1PtHardTrials(0)
478   ,fh1nRecJetsCuts(0)
479   ,fh1nGenJets(0)
480   ,fh1nRecEffJets(0)
481   ,fhnSingleTrackRecEffHisto(0)
482   ,fhnJetTrackRecEffHisto(0)
483    // Background
484    ,fh1OutLeadingMult(0)
485    ,fh1PerpMult(0)
486    ,fh1Out2JetsMult(0)
487    ,fh1Out3JetsMult(0)
488    ,fQABckgNoJetTrackHistosRec(0)      
489    ,fQABckgNoJetTrackHistosRecCuts(0)  
490    ,fQABckgNoJetTrackHistosGen(0)      
491    ,fQABckgLeadingTrackHistosRec(0)      
492    ,fQABckgLeadingTrackHistosRecCuts(0)  
493    ,fQABckgLeadingTrackHistosGen(0)      
494    ,fQABckg2JetsTrackHistosRec(0)      
495    ,fQABckg2JetsTrackHistosRecCuts(0)  
496    ,fQABckg2JetsTrackHistosGen(0)
497    ,fQABckg3JetsTrackHistosRec(0)      
498    ,fQABckg3JetsTrackHistosRecCuts(0)  
499    ,fQABckg3JetsTrackHistosGen(0)      
500    ,fQABckgPerpTrackHistosRec(0)      
501    ,fQABckgPerpTrackHistosRecCuts(0)  
502    ,fQABckgPerpTrackHistosGen(0)  
503    ,fFFBckgNoJetHistosRecCuts(0)
504    ,fFFBckgNoJetHistosRecLeading(0)
505    ,fFFBckgNoJetHistosGen(0)       
506    ,fFFBckgNoJetHistosGenLeading(0)
507    ,fFFBckgHistosRecCuts(0)
508    ,fFFBckgHistosRecLeading(0)
509    ,fFFBckgHistosGen(0)       
510    ,fFFBckgHistosGenLeading(0)
511    ,fFFBckgLeadingHistosRecCuts(0)
512    ,fFFBckgLeadingHistosRecLeading(0)
513    ,fFFBckgLeadingHistosGen(0)       
514    ,fFFBckgLeadingHistosGenLeading(0)
515    ,fFFBckg2JetsHistosRecCuts(0)     
516    ,fFFBckg2JetsHistosRecLeading(0)  
517    ,fFFBckg2JetsHistosGen(0)         
518    ,fFFBckg2JetsHistosGenLeading(0)  
519    ,fFFBckg3JetsHistosRecCuts(0)     
520    ,fFFBckg3JetsHistosRecLeading(0)  
521    ,fFFBckg3JetsHistosGen(0)         
522    ,fFFBckg3JetsHistosGenLeading(0)  
523    ,fFFBckgPerpHistosRecCuts(0)
524    ,fFFBckgPerpHistosRecLeading(0)
525    ,fFFBckgPerpHistosGen(0)       
526    ,fFFBckgPerpHistosGenLeading(0)
527    ,fFFBckgHistosStatRecCuts(0)
528    ,fFFBckgHistosStatRecLeading(0)
529    ,fFFBckgHistosStatGen(0)       
530    ,fFFBckgHistosStatGenLeading(0)
531    ,fFFBckgLeadingHistosStatRecCuts(0)
532    ,fFFBckgLeadingHistosStatRecLeading(0)
533    ,fFFBckgLeadingHistosStatGen(0)       
534    ,fFFBckgLeadingHistosStatGenLeading(0)
535    ,fFFBckg2JetsHistosStatRecCuts(0)     
536    ,fFFBckg2JetsHistosStatRecLeading(0)  
537    ,fFFBckg2JetsHistosStatGen(0)         
538    ,fFFBckg2JetsHistosStatGenLeading(0)  
539    ,fFFBckg3JetsHistosStatRecCuts(0)     
540    ,fFFBckg3JetsHistosStatRecLeading(0)  
541    ,fFFBckg3JetsHistosStatGen(0)         
542    ,fFFBckg3JetsHistosStatGenLeading(0)  
543    ,fIJBckgNoJetHistosRecCuts(0)   
544    ,fIJBckgNoJetHistosRecLeading(0)
545    ,fIJBckgNoJetHistosGen(0)       
546    ,fIJBckgNoJetHistosGenLeading(0)
547    ,fIJBckgHistosRecCuts(0)   
548    ,fIJBckgHistosRecLeading(0)
549    ,fIJBckgHistosGen(0)       
550    ,fIJBckgHistosGenLeading(0)
551    ,fIJBckgLeadingHistosRecCuts(0)   
552    ,fIJBckgLeadingHistosRecLeading(0)
553    ,fIJBckgLeadingHistosGen(0)       
554    ,fIJBckgLeadingHistosGenLeading(0)
555    ,fIJBckg2JetsHistosRecCuts(0)     
556    ,fIJBckg2JetsHistosRecLeading(0)  
557    ,fIJBckg2JetsHistosGen(0)         
558    ,fIJBckg2JetsHistosGenLeading(0)  
559    ,fIJBckg3JetsHistosRecCuts(0)     
560    ,fIJBckg3JetsHistosRecLeading(0)  
561    ,fIJBckg3JetsHistosGen(0)         
562    ,fIJBckg3JetsHistosGenLeading(0)  
563    ,fIJBckgPerpHistosRecCuts(0)   
564    ,fIJBckgPerpHistosRecLeading(0)
565    ,fIJBckgPerpHistosGen(0)       
566    ,fIJBckgPerpHistosGenLeading(0)
567    ,fIJBckgHistosStatRecCuts(0)   
568    ,fIJBckgHistosStatRecLeading(0)
569    ,fIJBckgHistosStatGen(0)       
570    ,fIJBckgHistosStatGenLeading(0)
571    ,fIJBckgLeadingHistosStatRecCuts(0)   
572    ,fIJBckgLeadingHistosStatRecLeading(0)
573    ,fIJBckgLeadingHistosStatGen(0)       
574    ,fIJBckgLeadingHistosStatGenLeading(0)
575    ,fIJBckg2JetsHistosStatRecCuts(0)     
576    ,fIJBckg2JetsHistosStatRecLeading(0)  
577    ,fIJBckg2JetsHistosStatGen(0)         
578    ,fIJBckg2JetsHistosStatGenLeading(0)  
579    ,fIJBckg3JetsHistosStatRecCuts(0)     
580    ,fIJBckg3JetsHistosStatRecLeading(0)  
581    ,fIJBckg3JetsHistosStatGen(0)         
582    ,fIJBckg3JetsHistosStatGenLeading(0) 
583 {
584   // constructor
585   
586   DefineOutput(1,TList::Class());
587   
588
589 }
590
591 //__________________________________________________________________________________________________________________________
592 AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const  AliAnalysisTaskFragmentationFunction &copy)
593   : AliAnalysisTaskSE()
594   ,fESD(copy.fESD)
595   ,fAOD(copy.fAOD)
596   ,fBranchRecJets(copy.fBranchRecJets)
597   ,fBranchGenJets(copy.fBranchGenJets)
598   ,fTrackTypeGen(copy.fTrackTypeGen)
599   ,fJetTypeGen(copy.fJetTypeGen)
600   ,fJetTypeRecEff(copy.fJetTypeRecEff)
601   ,fFilterMask(copy.fFilterMask)
602   ,fUsePhysicsSelection(copy.fUsePhysicsSelection)
603   ,fTrackPtCut(copy.fTrackPtCut)
604   ,fTrackEtaMin(copy.fTrackEtaMin)
605   ,fTrackEtaMax(copy.fTrackEtaMax)
606   ,fTrackPhiMin(copy.fTrackPhiMin)
607   ,fTrackPhiMax(copy.fTrackPhiMax)
608   ,fJetPtCut(copy.fJetPtCut)
609   ,fJetEtaMin(copy.fJetEtaMin)
610   ,fJetEtaMax(copy.fJetEtaMax)
611   ,fJetPhiMin(copy.fJetPhiMin)
612   ,fJetPhiMax(copy.fJetPhiMax)
613   ,fDiJetCut(copy.fDiJetCut)
614   ,fDiJetDeltaPhiCut(copy.fDiJetDeltaPhiCut)
615   ,fDiJetPtFractionCut(copy.fDiJetPtFractionCut)
616   ,fDiJetCDFCut(copy.fDiJetCDFCut)
617   ,fDiJetKindBins(copy.fDiJetKindBins)
618   ,fFFRadius(copy.fFFRadius)
619   ,fFFBckgRadius(copy.fFFBckgRadius)
620   ,fBckgMode(copy.fBckgMode)
621   ,fAvgTrials(copy.fAvgTrials)
622   ,fTracksRec(copy.fTracksRec)
623   ,fTracksRecCuts(copy.fTracksRecCuts)
624   ,fTracksGen(copy.fTracksGen)
625   ,fTracksAODMCCharged(copy.fTracksAODMCCharged)
626   ,fTracksRecQualityCuts(copy.fTracksRecQualityCuts)
627   ,fJetsRec(copy.fJetsRec)
628   ,fJetsRecCuts(copy.fJetsRecCuts)
629   ,fJetsGen(copy.fJetsGen)
630   ,fJetsRecEff(copy.fJetsRecEff)
631   ,fQATrackHistosRec(copy.fQATrackHistosRec)
632   ,fQATrackHistosRecCuts(copy.fQATrackHistosRecCuts)
633   ,fQATrackHistosGen(copy.fQATrackHistosGen)
634   ,fQAJetHistosRec(copy.fQAJetHistosRec)
635   ,fQAJetHistosRecCuts(copy.fQAJetHistosRecCuts)
636   ,fQAJetHistosRecCutsLeading(copy.fQAJetHistosRecCutsLeading)
637   ,fQAJetHistosGen(copy.fQAJetHistosGen)
638   ,fQAJetHistosGenLeading(copy.fQAJetHistosGenLeading)
639   ,fQAJetHistosRecEffLeading(copy.fQAJetHistosRecEffLeading)
640   ,fFFHistosRecCuts(copy.fFFHistosRecCuts)
641   ,fFFHistosRecLeading(copy.fFFHistosRecLeading)
642   ,fFFHistosRecLeadingTrack(copy.fFFHistosRecLeadingTrack)
643   ,fFFHistosGen(copy.fFFHistosGen)
644   ,fFFHistosGenLeading(copy.fFFHistosGenLeading)
645   ,fFFHistosGenLeadingTrack(copy.fFFHistosGenLeadingTrack)
646   ,fIJHistosRecCuts(copy.fIJHistosRecCuts)
647   ,fIJHistosRecLeading(copy.fIJHistosRecLeading)
648   ,fIJHistosRecLeadingTrack(copy.fIJHistosRecLeadingTrack)
649   ,fIJHistosGen(copy.fIJHistosGen)
650   ,fIJHistosGenLeading(copy.fIJHistosGenLeading)
651   ,fIJHistosGenLeadingTrack(copy.fIJHistosGenLeadingTrack)
652   ,fFFDiJetHistosRecCuts(copy.fFFDiJetHistosRecCuts)
653   ,fFFDiJetHistosRecLeading(copy.fFFDiJetHistosRecLeading)
654   ,fFFDiJetHistosRecLeadingTrack(copy.fFFDiJetHistosRecLeadingTrack)
655   ,fFFDiJetHistosGen(copy.fFFDiJetHistosGen)
656   ,fFFDiJetHistosGenLeading(copy.fFFDiJetHistosGenLeading)
657   ,fFFDiJetHistosGenLeadingTrack(copy.fFFDiJetHistosGenLeadingTrack)
658   ,fQADiJetHistosRecCuts(copy.fQADiJetHistosRecCuts)
659   ,fQADiJetHistosGen(copy.fQADiJetHistosGen)
660   ,fQATrackHighPtThreshold(copy.fQATrackHighPtThreshold) 
661   ,fFFNBinsJetPt(copy.fFFNBinsJetPt)    
662   ,fFFJetPtMin(copy.fFFJetPtMin) 
663   ,fFFJetPtMax(copy.fFFJetPtMax)
664   ,fFFNBinsPt(copy.fFFNBinsPt)      
665   ,fFFPtMin(copy.fFFPtMin)        
666   ,fFFPtMax(copy.fFFPtMax)        
667   ,fFFNBinsXi(copy.fFFNBinsXi)      
668   ,fFFXiMin(copy.fFFXiMin)        
669   ,fFFXiMax(copy.fFFXiMax)        
670   ,fFFNBinsZ(copy.fFFNBinsZ)       
671   ,fFFZMin(copy.fFFZMin)         
672   ,fFFZMax(copy.fFFZMax)         
673   ,fQAJetNBinsPt(copy.fQAJetNBinsPt)   
674   ,fQAJetPtMin(copy.fQAJetPtMin)     
675   ,fQAJetPtMax(copy.fQAJetPtMax)     
676   ,fQAJetNBinsEta(copy.fQAJetNBinsEta)  
677   ,fQAJetEtaMin(copy.fQAJetEtaMin)    
678   ,fQAJetEtaMax(copy.fQAJetEtaMax)    
679   ,fQAJetNBinsPhi(copy.fQAJetNBinsPhi)  
680   ,fQAJetPhiMin(copy.fQAJetPhiMin)    
681   ,fQAJetPhiMax(copy.fQAJetPhiMax)    
682   ,fQATrackNBinsPt(copy.fQATrackNBinsPt) 
683   ,fQATrackPtMin(copy.fQATrackPtMin)   
684   ,fQATrackPtMax(copy.fQATrackPtMax)   
685   ,fQATrackNBinsEta(copy.fQATrackNBinsEta)
686   ,fQATrackEtaMin(copy.fQATrackEtaMin)  
687   ,fQATrackEtaMax(copy.fQATrackEtaMax)  
688   ,fQATrackNBinsPhi(copy.fQATrackNBinsPhi)
689   ,fQATrackPhiMin(copy.fQATrackPhiMin)  
690   ,fQATrackPhiMax(copy.fQATrackPhiMax)
691   ,fIJNBinsJetPt(copy.fIJNBinsJetPt)
692   ,fIJJetPtMin(copy.fIJJetPtMin)
693   ,fIJJetPtMax(copy.fIJJetPtMax)
694   ,fIJNBinsPt(copy.fIJNBinsPt)
695   ,fIJPtMin(copy.fIJPtMin)
696   ,fIJPtMax(copy.fIJPtMax)
697   ,fIJNBinsZ(copy.fIJNBinsZ)
698   ,fIJZMin(copy.fIJZMin)
699   ,fIJZMax(copy.fIJZMax)
700   ,fIJNBinsCosTheta(copy.fIJNBinsCosTheta)
701   ,fIJCosThetaMin(copy.fIJCosThetaMin)
702   ,fIJCosThetaMax(copy.fIJCosThetaMax)
703   ,fIJNBinsTheta(copy.fIJNBinsTheta)
704   ,fIJThetaMin(copy.fIJThetaMin)
705   ,fIJThetaMax(copy.fIJThetaMax)
706   ,fIJNBinsJt(copy.fIJNBinsJt)
707   ,fIJJtMin(copy.fIJJtMin)
708   ,fIJJtMax(copy.fIJJtMax)
709   ,fDiJetNBinsJetInvMass(copy.fDiJetNBinsJetInvMass)
710   ,fDiJetJetInvMassMin(copy.fDiJetJetInvMassMin)
711   ,fDiJetJetInvMassMax(copy.fDiJetJetInvMassMax)
712   ,fDiJetNBinsJetPt(copy.fDiJetNBinsJetPt)
713   ,fDiJetJetPtMin(copy.fDiJetJetPtMin)
714   ,fDiJetJetPtMax(copy.fDiJetJetPtMax)
715   ,fDiJetNBinsPt(copy.fDiJetNBinsPt)
716   ,fDiJetPtMin(copy.fDiJetPtMin)
717   ,fDiJetPtMax(copy.fDiJetPtMax)
718   ,fDiJetNBinsXi(copy.fDiJetNBinsXi)
719   ,fDiJetXiMin(copy.fDiJetXiMin)
720   ,fDiJetXiMax(copy.fDiJetXiMax)
721   ,fDiJetNBinsZ(copy.fDiJetNBinsZ)
722   ,fDiJetZMin(copy.fDiJetZMin)
723   ,fDiJetZMax(copy.fDiJetZMax)
724   ,fQADiJetNBinsInvMass(copy.fQADiJetNBinsInvMass)
725   ,fQADiJetInvMassMin(copy.fQADiJetInvMassMin)
726   ,fQADiJetInvMassMax(copy.fQADiJetInvMassMax)
727   ,fQADiJetNBinsJetPt(copy.fQADiJetNBinsJetPt)
728   ,fQADiJetJetPtMin(copy.fQADiJetJetPtMin)
729   ,fQADiJetJetPtMax(copy.fQADiJetJetPtMax)
730   ,fQADiJetNBinsDeltaPhi(copy.fQADiJetNBinsDeltaPhi)
731   ,fQADiJetDeltaPhiMin(copy.fQADiJetDeltaPhiMin)
732   ,fQADiJetDeltaPhiMax(copy.fQADiJetDeltaPhiMax)
733   ,fQADiJetNBinsDeltaEta(copy.fQADiJetNBinsDeltaEta)
734   ,fQADiJetDeltaEtaMin(copy.fQADiJetDeltaEtaMin)
735   ,fQADiJetDeltaEtaMax(copy.fQADiJetDeltaEtaMax)
736   ,fQADiJetNBinsDeltaPt(copy.fQADiJetNBinsDeltaPt)
737   ,fQADiJetDeltaPtMin(copy.fQADiJetDeltaPtMin)
738   ,fQADiJetDeltaPtMax(copy.fQADiJetDeltaPtMax)
739   ,fCommonHistList(copy.fCommonHistList)
740   ,fh1EvtSelection(copy.fh1EvtSelection)
741   ,fh1VertexNContributors(copy.fh1VertexNContributors)
742   ,fh1VertexZ(copy.fh1VertexZ)
743   ,fh1EvtMult(copy.fh1EvtMult)
744   ,fh1Xsec(copy.fh1Xsec)
745   ,fh1Trials(copy.fh1Trials)
746   ,fh1PtHard(copy.fh1PtHard)  
747   ,fh1PtHardTrials(copy.fh1PtHardTrials)  
748   ,fh1nRecJetsCuts(copy.fh1nRecJetsCuts)
749   ,fh1nGenJets(copy.fh1nGenJets)
750   ,fh1nRecEffJets(copy.fh1nRecEffJets)
751   ,fhnSingleTrackRecEffHisto(copy.fhnSingleTrackRecEffHisto)
752   ,fhnJetTrackRecEffHisto(copy.fhnJetTrackRecEffHisto)
753   // Background
754   ,fh1OutLeadingMult(copy.fh1OutLeadingMult)
755   ,fh1PerpMult(copy.fh1PerpMult)
756   ,fh1Out2JetsMult(copy.fh1Out2JetsMult)
757   ,fh1Out3JetsMult(copy.fh1Out3JetsMult)
758   ,fQABckgNoJetTrackHistosRec(copy.fQABckgNoJetTrackHistosRec)      
759   ,fQABckgNoJetTrackHistosRecCuts(copy.fQABckgNoJetTrackHistosRecCuts)  
760   ,fQABckgNoJetTrackHistosGen(copy.fQABckgNoJetTrackHistosGen)      
761   ,fQABckgLeadingTrackHistosRec(copy.fQABckgLeadingTrackHistosRec)      
762   ,fQABckgLeadingTrackHistosRecCuts(copy.fQABckgLeadingTrackHistosRecCuts)  
763   ,fQABckgLeadingTrackHistosGen(copy.fQABckgLeadingTrackHistosGen)      
764   ,fQABckg2JetsTrackHistosRec(copy.fQABckg2JetsTrackHistosRec)      
765   ,fQABckg2JetsTrackHistosRecCuts(copy.fQABckg2JetsTrackHistosRecCuts)  
766   ,fQABckg2JetsTrackHistosGen(copy.fQABckg2JetsTrackHistosGen)
767   ,fQABckg3JetsTrackHistosRec(copy.fQABckg3JetsTrackHistosRec)      
768   ,fQABckg3JetsTrackHistosRecCuts(copy.fQABckg3JetsTrackHistosRecCuts)  
769   ,fQABckg3JetsTrackHistosGen(copy.fQABckg3JetsTrackHistosGen)      
770   ,fQABckgPerpTrackHistosRec(copy.fQABckgPerpTrackHistosRec)      
771   ,fQABckgPerpTrackHistosRecCuts(copy.fQABckgPerpTrackHistosRecCuts)  
772   ,fQABckgPerpTrackHistosGen(copy.fQABckgPerpTrackHistosGen)      
773    ,fFFBckgNoJetHistosRecCuts(copy.fFFBckgNoJetHistosRecCuts)
774   ,fFFBckgNoJetHistosRecLeading(copy.fFFBckgNoJetHistosRecLeading)
775   ,fFFBckgNoJetHistosGen(copy.fFFBckgNoJetHistosGen)       
776   ,fFFBckgNoJetHistosGenLeading(copy.fFFBckgNoJetHistosGenLeading)
777   ,fFFBckgHistosRecCuts(copy.fFFBckgHistosRecCuts)
778   ,fFFBckgHistosRecLeading(copy.fFFBckgHistosRecLeading)
779   ,fFFBckgHistosGen(copy.fFFBckgHistosGen)       
780   ,fFFBckgHistosGenLeading(copy.fFFBckgHistosGenLeading)
781   ,fFFBckgLeadingHistosRecCuts(copy.fFFBckgLeadingHistosRecCuts)
782   ,fFFBckgLeadingHistosRecLeading(copy.fFFBckgLeadingHistosRecLeading)
783   ,fFFBckgLeadingHistosGen(copy.fFFBckgLeadingHistosGen)       
784   ,fFFBckgLeadingHistosGenLeading(copy.fFFBckgLeadingHistosGenLeading)
785   ,fFFBckg2JetsHistosRecCuts(copy.fFFBckg2JetsHistosRecCuts)     
786   ,fFFBckg2JetsHistosRecLeading(copy.fFFBckg2JetsHistosRecLeading)  
787   ,fFFBckg2JetsHistosGen(copy.fFFBckg2JetsHistosGen)         
788   ,fFFBckg2JetsHistosGenLeading(copy.fFFBckg2JetsHistosGenLeading)  
789   ,fFFBckg3JetsHistosRecCuts(copy.fFFBckg3JetsHistosRecCuts)     
790   ,fFFBckg3JetsHistosRecLeading(copy.fFFBckg3JetsHistosRecLeading)  
791   ,fFFBckg3JetsHistosGen(copy.fFFBckg3JetsHistosGen)         
792   ,fFFBckg3JetsHistosGenLeading(copy.fFFBckg3JetsHistosGenLeading)  
793   ,fFFBckgPerpHistosRecCuts(copy.fFFBckgPerpHistosRecCuts)     
794   ,fFFBckgPerpHistosRecLeading(copy.fFFBckgPerpHistosRecLeading)  
795   ,fFFBckgPerpHistosGen(copy.fFFBckgPerpHistosGen)         
796   ,fFFBckgPerpHistosGenLeading(copy.fFFBckgPerpHistosGenLeading) 
797   ,fFFBckgHistosStatRecCuts(copy.fFFBckgHistosStatRecCuts)
798   ,fFFBckgHistosStatRecLeading(copy.fFFBckgHistosStatRecLeading)
799   ,fFFBckgHistosStatGen(copy.fFFBckgHistosStatGen)       
800   ,fFFBckgHistosStatGenLeading(copy.fFFBckgHistosStatGenLeading)
801   ,fFFBckgLeadingHistosStatRecCuts(copy.fFFBckgLeadingHistosStatRecCuts)
802   ,fFFBckgLeadingHistosStatRecLeading(copy.fFFBckgLeadingHistosStatRecLeading)
803   ,fFFBckgLeadingHistosStatGen(copy.fFFBckgLeadingHistosStatGen)       
804   ,fFFBckgLeadingHistosStatGenLeading(copy.fFFBckgLeadingHistosStatGenLeading)
805   ,fFFBckg2JetsHistosStatRecCuts(copy.fFFBckg2JetsHistosStatRecCuts)     
806   ,fFFBckg2JetsHistosStatRecLeading(copy.fFFBckg2JetsHistosStatRecLeading)  
807   ,fFFBckg2JetsHistosStatGen(copy.fFFBckg2JetsHistosStatGen)         
808   ,fFFBckg2JetsHistosStatGenLeading(copy.fFFBckg2JetsHistosStatGenLeading)  
809   ,fFFBckg3JetsHistosStatRecCuts(copy.fFFBckg3JetsHistosStatRecCuts)     
810   ,fFFBckg3JetsHistosStatRecLeading(copy.fFFBckg3JetsHistosStatRecLeading)  
811   ,fFFBckg3JetsHistosStatGen(copy.fFFBckg3JetsHistosStatGen)         
812   ,fFFBckg3JetsHistosStatGenLeading(copy.fFFBckg3JetsHistosStatGenLeading)  
813   ,fIJBckgNoJetHistosRecCuts(copy.fIJBckgNoJetHistosRecCuts)   
814   ,fIJBckgNoJetHistosRecLeading(copy.fIJBckgNoJetHistosRecLeading)
815   ,fIJBckgNoJetHistosGen(copy.fIJBckgNoJetHistosGen)       
816   ,fIJBckgNoJetHistosGenLeading(copy.fIJBckgNoJetHistosGenLeading)
817   ,fIJBckgHistosRecCuts(copy.fIJBckgHistosRecCuts)   
818   ,fIJBckgHistosRecLeading(copy.fIJBckgHistosRecLeading)
819   ,fIJBckgHistosGen(copy.fIJBckgHistosGen)       
820   ,fIJBckgHistosGenLeading(copy.fIJBckgHistosGenLeading)
821   ,fIJBckgLeadingHistosRecCuts(copy.fIJBckgLeadingHistosRecCuts)   
822   ,fIJBckgLeadingHistosRecLeading(copy.fIJBckgLeadingHistosRecLeading)
823   ,fIJBckgLeadingHistosGen(copy.fIJBckgLeadingHistosGen)       
824   ,fIJBckgLeadingHistosGenLeading(copy.fIJBckgLeadingHistosGenLeading)
825   ,fIJBckg2JetsHistosRecCuts(copy.fIJBckg2JetsHistosRecCuts)     
826   ,fIJBckg2JetsHistosRecLeading(copy.fIJBckg2JetsHistosRecLeading)  
827   ,fIJBckg2JetsHistosGen(copy.fIJBckg2JetsHistosGen)         
828   ,fIJBckg2JetsHistosGenLeading(copy.fIJBckg2JetsHistosGenLeading)  
829   ,fIJBckg3JetsHistosRecCuts(copy.fIJBckg3JetsHistosRecCuts)     
830   ,fIJBckg3JetsHistosRecLeading(copy.fIJBckg3JetsHistosRecLeading)  
831   ,fIJBckg3JetsHistosGen(copy.fIJBckg3JetsHistosGen)         
832   ,fIJBckg3JetsHistosGenLeading(copy.fIJBckg3JetsHistosGenLeading) 
833   ,fIJBckgPerpHistosRecCuts(copy.fIJBckgPerpHistosRecCuts)   
834   ,fIJBckgPerpHistosRecLeading(copy.fIJBckgPerpHistosRecLeading)
835   ,fIJBckgPerpHistosGen(copy.fIJBckgPerpHistosGen)       
836   ,fIJBckgPerpHistosGenLeading(copy.fIJBckgPerpHistosGenLeading)
837   ,fIJBckgHistosStatRecCuts(copy.fIJBckgHistosStatRecCuts)   
838   ,fIJBckgHistosStatRecLeading(copy.fIJBckgHistosStatRecLeading)
839   ,fIJBckgHistosStatGen(copy.fIJBckgHistosStatGen)       
840   ,fIJBckgHistosStatGenLeading(copy.fIJBckgHistosStatGenLeading)
841   ,fIJBckgLeadingHistosStatRecCuts(copy.fIJBckgLeadingHistosStatRecCuts)   
842   ,fIJBckgLeadingHistosStatRecLeading(copy.fIJBckgLeadingHistosStatRecLeading)
843   ,fIJBckgLeadingHistosStatGen(copy.fIJBckgLeadingHistosStatGen)       
844   ,fIJBckgLeadingHistosStatGenLeading(copy.fIJBckgLeadingHistosStatGenLeading)
845   ,fIJBckg2JetsHistosStatRecCuts(copy.fIJBckg2JetsHistosStatRecCuts)     
846   ,fIJBckg2JetsHistosStatRecLeading(copy.fIJBckg2JetsHistosStatRecLeading)  
847   ,fIJBckg2JetsHistosStatGen(copy.fIJBckg2JetsHistosStatGen)         
848   ,fIJBckg2JetsHistosStatGenLeading(copy.fIJBckg2JetsHistosStatGenLeading)  
849   ,fIJBckg3JetsHistosStatRecCuts(copy.fIJBckg3JetsHistosStatRecCuts)     
850   ,fIJBckg3JetsHistosStatRecLeading(copy.fIJBckg3JetsHistosStatRecLeading)  
851   ,fIJBckg3JetsHistosStatGen(copy.fIJBckg3JetsHistosStatGen)         
852   ,fIJBckg3JetsHistosStatGenLeading(copy.fIJBckg3JetsHistosStatGenLeading) 
853 {
854   // copy constructor
855
856 }
857
858 // _________________________________________________________________________________________________________________________________
859 AliAnalysisTaskFragmentationFunction& AliAnalysisTaskFragmentationFunction::operator=(const AliAnalysisTaskFragmentationFunction& o)
860 {
861   // assignment
862   
863   if(this!=&o){
864
865     AliAnalysisTaskSE::operator=(o);
866     fESD                          = o.fESD;
867     fAOD                          = o.fAOD;
868     fBranchRecJets                = o.fBranchRecJets;
869     fBranchGenJets                = o.fBranchGenJets;
870     fTrackTypeGen                 = o.fTrackTypeGen;
871     fJetTypeGen                   = o.fJetTypeGen;
872     fJetTypeRecEff                = o.fJetTypeRecEff;
873     fFilterMask                   = o.fFilterMask;
874     fUsePhysicsSelection          = o.fUsePhysicsSelection;
875     fTrackPtCut                   = o.fTrackPtCut;
876     fTrackEtaMin                  = o.fTrackEtaMin;
877     fTrackEtaMax                  = o.fTrackEtaMax;
878     fTrackPhiMin                  = o.fTrackPhiMin;
879     fTrackPhiMax                  = o.fTrackPhiMax;
880     fJetPtCut                     = o.fJetPtCut;
881     fJetEtaMin                    = o.fJetEtaMin;
882     fJetEtaMax                    = o.fJetEtaMax;
883     fJetPhiMin                    = o.fJetPhiMin;
884     fJetPhiMax                    = o.fJetPhiMin;
885     fDiJetCut                     = o.fDiJetCut;
886     fDiJetDeltaPhiCut             = o.fDiJetDeltaPhiCut;
887     fDiJetPtFractionCut           = o.fDiJetPtFractionCut;
888     fDiJetCDFCut                  = o.fDiJetCDFCut;
889     fDiJetKindBins                = o.fDiJetKindBins;
890     fFFRadius                     = o.fFFRadius;
891     fFFBckgRadius                 = o.fFFBckgRadius;
892     fBckgMode                     = o.fBckgMode;
893     fAvgTrials                    = o.fAvgTrials;
894     fTracksRec                    = o.fTracksRec;
895     fTracksRecCuts                = o.fTracksRecCuts;
896     fTracksGen                    = o.fTracksGen;
897     fTracksAODMCCharged           = o.fTracksAODMCCharged;
898     fTracksRecQualityCuts         = o.fTracksRecQualityCuts;
899     fJetsRec                      = o.fJetsRec;
900     fJetsRecCuts                  = o.fJetsRecCuts;
901     fJetsGen                      = o.fJetsGen;
902     fJetsRecEff                   = o.fJetsRecEff;
903     fQATrackHistosRec             = o.fQATrackHistosRec;
904     fQATrackHistosRecCuts         = o.fQATrackHistosRecCuts;
905     fQATrackHistosGen             = o.fQATrackHistosGen;
906     fQAJetHistosRec               = o.fQAJetHistosRec;
907     fQAJetHistosRecCuts           = o.fQAJetHistosRecCuts;
908     fQAJetHistosRecCutsLeading    = o.fQAJetHistosRecCutsLeading;
909     fQAJetHistosGen               = o.fQAJetHistosGen;
910     fQAJetHistosGenLeading        = o.fQAJetHistosGenLeading;
911     fQAJetHistosRecEffLeading     = o.fQAJetHistosRecEffLeading;
912     fFFHistosRecCuts              = o.fFFHistosRecCuts;
913     fFFHistosRecLeading           = o.fFFHistosRecLeading;
914     fFFHistosRecLeadingTrack      = o.fFFHistosRecLeadingTrack;
915     fFFHistosGen                  = o.fFFHistosGen;
916     fFFHistosGenLeading           = o.fFFHistosGenLeading;
917     fFFHistosGenLeadingTrack      = o.fFFHistosGenLeadingTrack;
918     fIJHistosRecCuts              = o.fIJHistosRecCuts;
919     fIJHistosRecLeading           = o.fIJHistosRecLeading;
920     fIJHistosRecLeadingTrack      = o.fIJHistosRecLeadingTrack;
921     fIJHistosGen                  = o.fIJHistosGen;
922     fIJHistosGenLeading           = o.fIJHistosGenLeading;
923     fIJHistosGenLeadingTrack      = o.fIJHistosGenLeadingTrack;
924     fFFDiJetHistosRecCuts         = o.fFFDiJetHistosRecCuts;
925     fFFDiJetHistosRecLeading      = o.fFFDiJetHistosRecLeading;
926     fFFDiJetHistosRecLeadingTrack = o.fFFDiJetHistosRecLeadingTrack;
927     fFFDiJetHistosGen             = o.fFFDiJetHistosGen;
928     fFFDiJetHistosGenLeading      = o.fFFDiJetHistosGenLeading;
929     fFFDiJetHistosGenLeadingTrack = o.fFFDiJetHistosGenLeadingTrack;
930     fQADiJetHistosRecCuts         = o.fQADiJetHistosRecCuts;
931     fQADiJetHistosGen             = o.fQADiJetHistosGen;
932     fQATrackHighPtThreshold       = o.fQATrackHighPtThreshold; 
933     fFFNBinsJetPt                 = o.fFFNBinsJetPt;    
934     fFFJetPtMin                   = o.fFFJetPtMin; 
935     fFFJetPtMax                   = o.fFFJetPtMax;
936     fFFNBinsPt                    = o.fFFNBinsPt;      
937     fFFPtMin                      = o.fFFPtMin;        
938     fFFPtMax                      = o.fFFPtMax;        
939     fFFNBinsXi                    = o.fFFNBinsXi;      
940     fFFXiMin                      = o.fFFXiMin;        
941     fFFXiMax                      = o.fFFXiMax;        
942     fFFNBinsZ                     = o.fFFNBinsZ;       
943     fFFZMin                       = o.fFFZMin;         
944     fFFZMax                       = o.fFFZMax;         
945     fQAJetNBinsPt                 = o.fQAJetNBinsPt;   
946     fQAJetPtMin                   = o.fQAJetPtMin;     
947     fQAJetPtMax                   = o.fQAJetPtMax;     
948     fQAJetNBinsEta                = o.fQAJetNBinsEta;  
949     fQAJetEtaMin                  = o.fQAJetEtaMin;    
950     fQAJetEtaMax                  = o.fQAJetEtaMax;    
951     fQAJetNBinsPhi                = o.fQAJetNBinsPhi;  
952     fQAJetPhiMin                  = o.fQAJetPhiMin;    
953     fQAJetPhiMax                  = o.fQAJetPhiMax;    
954     fQATrackNBinsPt               = o.fQATrackNBinsPt; 
955     fQATrackPtMin                 = o.fQATrackPtMin;   
956     fQATrackPtMax                 = o.fQATrackPtMax;   
957     fQATrackNBinsEta              = o.fQATrackNBinsEta;
958     fQATrackEtaMin                = o.fQATrackEtaMin;  
959     fQATrackEtaMax                = o.fQATrackEtaMax;  
960     fQATrackNBinsPhi              = o.fQATrackNBinsPhi;
961     fQATrackPhiMin                = o.fQATrackPhiMin;  
962     fQATrackPhiMax                = o.fQATrackPhiMax;  
963     fIJNBinsJetPt                 = o.fIJNBinsJetPt;
964     fIJJetPtMin                   = o.fIJJetPtMin;
965     fIJJetPtMax                   = o.fIJJetPtMax;
966     fIJNBinsPt                    = o.fIJNBinsPt;
967     fIJPtMin                      = o.fIJPtMin;
968     fIJPtMax                      = o.fIJPtMax;
969     fIJNBinsZ                     = o.fIJNBinsZ;
970     fIJZMin                       = o.fIJZMin;
971     fIJZMax                       = o.fIJZMax;
972     fIJNBinsCosTheta              = o.fIJNBinsCosTheta;
973     fIJCosThetaMin                = o.fIJCosThetaMin;
974     fIJCosThetaMax                = o.fIJCosThetaMax;
975     fIJNBinsTheta                 = o.fIJNBinsTheta;
976     fIJThetaMin                   = o.fIJThetaMin;
977     fIJThetaMax                   = o.fIJThetaMax;
978     fIJNBinsJt                    = o.fIJNBinsJt;
979     fIJJtMin                      = o.fIJJtMin;
980     fIJJtMax                      = o.fIJJtMax;
981     fDiJetNBinsJetInvMass         = o.fDiJetNBinsJetInvMass;
982     fDiJetJetInvMassMin           = o.fDiJetJetInvMassMin;
983     fDiJetJetInvMassMax           = o.fDiJetJetInvMassMax;
984     fDiJetNBinsJetPt              = o.fDiJetNBinsJetPt;
985     fDiJetJetPtMin                = o.fDiJetJetPtMin;
986     fDiJetJetPtMax                = o.fDiJetJetPtMax;
987     fDiJetNBinsPt                 = o.fDiJetNBinsPt;
988     fDiJetPtMin                   = o.fDiJetPtMin;
989     fDiJetPtMax                   = o.fDiJetPtMax;
990     fDiJetNBinsXi                 = o.fDiJetNBinsXi;
991     fDiJetXiMin                   = o.fDiJetXiMin;
992     fDiJetXiMax                   = o.fDiJetXiMax;
993     fDiJetNBinsZ                  = o.fDiJetNBinsZ;
994     fDiJetZMin                    = o.fDiJetZMin;
995     fDiJetZMax                    = o.fDiJetZMax;
996     fQADiJetNBinsInvMass          = o.fQADiJetNBinsInvMass;
997     fQADiJetInvMassMin            = o.fQADiJetInvMassMin;
998     fQADiJetInvMassMax            = o.fQADiJetInvMassMax;
999     fQADiJetNBinsJetPt            = o.fQADiJetNBinsJetPt;
1000     fQADiJetJetPtMin              = o.fQADiJetJetPtMin;
1001     fQADiJetJetPtMax              = o.fQADiJetJetPtMax;
1002     fQADiJetNBinsDeltaPhi         = o.fQADiJetNBinsDeltaPhi;
1003     fQADiJetDeltaPhiMin           = o.fQADiJetDeltaPhiMin;
1004     fQADiJetDeltaPhiMax           = o.fQADiJetDeltaPhiMax;
1005     fQADiJetNBinsDeltaEta         = o.fQADiJetNBinsDeltaEta;
1006     fQADiJetDeltaEtaMin           = o.fQADiJetDeltaEtaMin;
1007     fQADiJetDeltaEtaMax           = o.fQADiJetDeltaEtaMax;
1008     fQADiJetNBinsDeltaPt          = o.fQADiJetNBinsDeltaPt;
1009     fQADiJetDeltaPtMin            = o.fQADiJetDeltaPtMin;
1010     fQADiJetDeltaPtMax            = o.fQADiJetDeltaPtMax;
1011     fCommonHistList               = o.fCommonHistList;
1012     fh1EvtSelection               = o.fh1EvtSelection;
1013     fh1VertexNContributors        = o.fh1VertexNContributors;
1014     fh1VertexZ                    = o.fh1VertexZ;
1015     fh1EvtMult                    = o.fh1EvtMult;
1016     fh1Xsec                       = o.fh1Xsec;
1017     fh1Trials                     = o.fh1Trials;
1018     fh1PtHard                     = o.fh1PtHard;
1019     fh1PtHardTrials               = o.fh1PtHardTrials;
1020     fh1nRecJetsCuts               = o.fh1nRecJetsCuts;
1021     fh1nGenJets                   = o.fh1nGenJets; 
1022     fh1nRecEffJets                = o.fh1nRecEffJets;
1023     fhnSingleTrackRecEffHisto     = o.fhnSingleTrackRecEffHisto;
1024     fhnJetTrackRecEffHisto        = o.fhnJetTrackRecEffHisto;
1025     // Background
1026     fh1OutLeadingMult                  = o.fh1OutLeadingMult;
1027     fh1PerpMult                        = o.fh1PerpMult;
1028     fh1Out2JetsMult                    = o.fh1Out2JetsMult;
1029     fh1Out3JetsMult                    = o.fh1Out3JetsMult;
1030     fQABckgNoJetTrackHistosRec         = o.fQABckgNoJetTrackHistosRec;      
1031     fQABckgNoJetTrackHistosRecCuts     = o.fQABckgNoJetTrackHistosRecCuts;  
1032     fQABckgNoJetTrackHistosGen         = o.fQABckgNoJetTrackHistosGen;      
1033     fQABckgLeadingTrackHistosRec       = o.fQABckgLeadingTrackHistosRec;      
1034     fQABckgLeadingTrackHistosRecCuts   = o.fQABckgLeadingTrackHistosRecCuts;  
1035     fQABckgLeadingTrackHistosGen       = o.fQABckgLeadingTrackHistosGen;      
1036     fQABckg2JetsTrackHistosRec         = o.fQABckg2JetsTrackHistosRec;      
1037     fQABckg2JetsTrackHistosRecCuts     = o.fQABckg2JetsTrackHistosRecCuts;  
1038     fQABckg2JetsTrackHistosGen         = o.fQABckg2JetsTrackHistosGen;
1039     fQABckg3JetsTrackHistosRec         = o.fQABckg3JetsTrackHistosRec;      
1040     fQABckg3JetsTrackHistosRecCuts     = o.fQABckg3JetsTrackHistosRecCuts;  
1041     fQABckg3JetsTrackHistosGen         = o.fQABckg3JetsTrackHistosGen;      
1042     fQABckgPerpTrackHistosRec          = o.fQABckgPerpTrackHistosRec;      
1043     fQABckgPerpTrackHistosRecCuts      = o.fQABckgPerpTrackHistosRecCuts;  
1044     fQABckgPerpTrackHistosGen          = o.fQABckgPerpTrackHistosGen;      
1045     fFFBckgNoJetHistosRecCuts          = o.fFFBckgNoJetHistosRecCuts;
1046     fFFBckgNoJetHistosRecLeading       = o.fFFBckgNoJetHistosRecLeading;
1047     fFFBckgNoJetHistosGen              = o.fFFBckgNoJetHistosGen;       
1048     fFFBckgNoJetHistosGenLeading       = o.fFFBckgNoJetHistosGenLeading;
1049     fFFBckgHistosRecCuts               = o.fFFBckgHistosRecCuts;
1050     fFFBckgHistosRecLeading            = o.fFFBckgHistosRecLeading;
1051     fFFBckgHistosGen                   = o.fFFBckgHistosGen;       
1052     fFFBckgHistosGenLeading            = o.fFFBckgHistosGenLeading;
1053     fFFBckgLeadingHistosRecCuts        = o.fFFBckgLeadingHistosRecCuts;
1054     fFFBckgLeadingHistosRecLeading     = o.fFFBckgLeadingHistosRecLeading;
1055     fFFBckgLeadingHistosGen            = o.fFFBckgLeadingHistosGen;       
1056     fFFBckgLeadingHistosGenLeading     = o.fFFBckgLeadingHistosGenLeading;
1057     fFFBckg2JetsHistosRecCuts          = o.fFFBckg2JetsHistosRecCuts;     
1058     fFFBckg2JetsHistosRecLeading       = o.fFFBckg2JetsHistosRecLeading;  
1059     fFFBckg2JetsHistosGen              = o.fFFBckg2JetsHistosGen;         
1060     fFFBckg2JetsHistosGenLeading       = o.fFFBckg2JetsHistosGenLeading;  
1061     fFFBckg3JetsHistosRecCuts          = o.fFFBckg3JetsHistosRecCuts;     
1062     fFFBckg3JetsHistosRecLeading       = o.fFFBckg3JetsHistosRecLeading;  
1063     fFFBckg3JetsHistosGen              = o.fFFBckg3JetsHistosGen;         
1064     fFFBckg3JetsHistosGenLeading       = o.fFFBckg3JetsHistosGenLeading;  
1065     fFFBckgPerpHistosRecCuts           = o.fFFBckgPerpHistosRecCuts;     
1066     fFFBckgPerpHistosRecLeading        = o.fFFBckgPerpHistosRecLeading;  
1067     fFFBckgPerpHistosGen               = o.fFFBckgPerpHistosGen;         
1068     fFFBckgPerpHistosGenLeading        = o.fFFBckgPerpHistosGenLeading;
1069     fFFBckgHistosStatRecCuts           = o.fFFBckgHistosStatRecCuts;
1070     fFFBckgHistosStatRecLeading        = o.fFFBckgHistosStatRecLeading;
1071     fFFBckgHistosStatGen               = o.fFFBckgHistosStatGen;       
1072     fFFBckgHistosStatGenLeading        = o.fFFBckgHistosStatGenLeading;
1073     fFFBckgLeadingHistosStatRecCuts    = o.fFFBckgLeadingHistosStatRecCuts;
1074     fFFBckgLeadingHistosStatRecLeading = o.fFFBckgLeadingHistosStatRecLeading;
1075     fFFBckgLeadingHistosStatGen        = o.fFFBckgLeadingHistosStatGen;       
1076     fFFBckgLeadingHistosStatGenLeading = o.fFFBckgLeadingHistosStatGenLeading;
1077     fFFBckg2JetsHistosStatRecCuts      = o.fFFBckg2JetsHistosStatRecCuts;     
1078     fFFBckg2JetsHistosStatRecLeading   = o.fFFBckg2JetsHistosStatRecLeading;  
1079     fFFBckg2JetsHistosStatGen          = o.fFFBckg2JetsHistosStatGen;         
1080     fFFBckg2JetsHistosStatGenLeading   = o.fFFBckg2JetsHistosStatGenLeading;  
1081     fFFBckg3JetsHistosStatRecCuts      = o.fFFBckg3JetsHistosStatRecCuts;     
1082     fFFBckg3JetsHistosStatRecLeading   = o.fFFBckg3JetsHistosStatRecLeading;  
1083     fFFBckg3JetsHistosStatGen          = o.fFFBckg3JetsHistosStatGen;         
1084     fFFBckg3JetsHistosStatGenLeading   = o.fFFBckg3JetsHistosStatGenLeading;  
1085     fIJBckgNoJetHistosRecCuts          = o.fIJBckgNoJetHistosRecCuts;   
1086     fIJBckgNoJetHistosRecLeading       = o.fIJBckgNoJetHistosRecLeading;
1087     fIJBckgNoJetHistosGen              = o.fIJBckgNoJetHistosGen;       
1088     fIJBckgNoJetHistosGenLeading       = o.fIJBckgNoJetHistosGenLeading;
1089     fIJBckgHistosRecCuts               = o.fIJBckgHistosRecCuts;   
1090     fIJBckgHistosRecLeading            = o.fIJBckgHistosRecLeading;
1091     fIJBckgHistosGen                   = o.fIJBckgHistosGen;       
1092     fIJBckgHistosGenLeading            = o.fIJBckgHistosGenLeading;
1093     fIJBckgLeadingHistosRecCuts        = o.fIJBckgLeadingHistosRecCuts;   
1094     fIJBckgLeadingHistosRecLeading     = o.fIJBckgLeadingHistosRecLeading;
1095     fIJBckgLeadingHistosGen            = o.fIJBckgLeadingHistosGen;       
1096     fIJBckgLeadingHistosGenLeading     = o.fIJBckgLeadingHistosGenLeading;
1097     fIJBckg2JetsHistosRecCuts          = o.fIJBckg2JetsHistosRecCuts;     
1098     fIJBckg2JetsHistosRecLeading       = o.fIJBckg2JetsHistosRecLeading;  
1099     fIJBckg2JetsHistosGen              = o.fIJBckg2JetsHistosGen;         
1100     fIJBckg2JetsHistosGenLeading       = o.fIJBckg2JetsHistosGenLeading;  
1101     fIJBckg3JetsHistosRecCuts          = o.fIJBckg3JetsHistosRecCuts;     
1102     fIJBckg3JetsHistosRecLeading       = o.fIJBckg3JetsHistosRecLeading;  
1103     fIJBckg3JetsHistosGen              = o.fIJBckg3JetsHistosGen;         
1104     fIJBckg3JetsHistosGenLeading       = o.fIJBckg3JetsHistosGenLeading;  
1105     fIJBckgPerpHistosRecCuts           = o.fIJBckgPerpHistosRecCuts;     
1106     fIJBckgPerpHistosRecLeading        = o.fIJBckgPerpHistosRecLeading;  
1107     fIJBckgPerpHistosGen               = o.fIJBckgPerpHistosGen;         
1108     fIJBckgPerpHistosGenLeading        = o.fIJBckgPerpHistosGenLeading;  
1109     fIJBckgHistosStatRecCuts           = o.fIJBckgHistosStatRecCuts;   
1110     fIJBckgHistosStatRecLeading        = o.fIJBckgHistosStatRecLeading;
1111     fIJBckgHistosStatGen               = o.fIJBckgHistosStatGen;       
1112     fIJBckgHistosStatGenLeading        = o.fIJBckgHistosStatGenLeading;
1113     fIJBckgLeadingHistosStatRecCuts    = o.fIJBckgLeadingHistosStatRecCuts;   
1114     fIJBckgLeadingHistosStatRecLeading = o.fIJBckgLeadingHistosStatRecLeading;
1115     fIJBckgLeadingHistosStatGen        = o.fIJBckgLeadingHistosStatGen;       
1116     fIJBckgLeadingHistosStatGenLeading = o.fIJBckgLeadingHistosStatGenLeading;
1117     fIJBckg2JetsHistosStatRecCuts      = o.fIJBckg2JetsHistosStatRecCuts;     
1118     fIJBckg2JetsHistosStatRecLeading   = o.fIJBckg2JetsHistosStatRecLeading;  
1119     fIJBckg2JetsHistosStatGen          = o.fIJBckg2JetsHistosStatGen;         
1120     fIJBckg2JetsHistosStatGenLeading   = o.fIJBckg2JetsHistosStatGenLeading;  
1121     fIJBckg3JetsHistosStatRecCuts      = o.fIJBckg3JetsHistosStatRecCuts;     
1122     fIJBckg3JetsHistosStatRecLeading   = o.fIJBckg3JetsHistosStatRecLeading;  
1123     fIJBckg3JetsHistosStatGen          = o.fIJBckg3JetsHistosStatGen;         
1124     fIJBckg3JetsHistosStatGenLeading   = o.fIJBckg3JetsHistosStatGenLeading;  
1125   }
1126     
1127   return *this;
1128 }
1129
1130 //___________________________________________________________________________
1131 AliAnalysisTaskFragmentationFunction::~AliAnalysisTaskFragmentationFunction()
1132 {
1133   // destructor
1134   
1135   if(fTracksRec)            delete fTracksRec;
1136   if(fTracksRecCuts)        delete fTracksRecCuts;
1137   if(fTracksGen)            delete fTracksGen;
1138   if(fTracksAODMCCharged)   delete fTracksAODMCCharged;  
1139   if(fTracksRecQualityCuts) delete fTracksRecQualityCuts; 
1140   if(fJetsRec)              delete fJetsRec;
1141   if(fJetsRecCuts)          delete fJetsRecCuts;
1142   if(fJetsGen)              delete fJetsGen;
1143   if(fJetsRecEff)           delete fJetsRecEff;
1144 }
1145
1146 //______________________________________________________________________________________________________
1147 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AliFragFuncHistos(const char* name, 
1148                                                          Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,  
1149                                                          Int_t nPt, Float_t ptMin, Float_t ptMax,
1150                                                          Int_t nXi, Float_t xiMin, Float_t xiMax,
1151                                                          Int_t nZ , Float_t zMin , Float_t zMax )
1152   : TObject()
1153   ,fNBinsJetPt(nJetPt)
1154   ,fJetPtMin(jetPtMin)
1155   ,fJetPtMax(jetPtMax)
1156   ,fNBinsPt(nPt) 
1157   ,fPtMin(ptMin)   
1158   ,fPtMax(ptMax)   
1159   ,fNBinsXi(nXi) 
1160   ,fXiMin(xiMin)   
1161   ,fXiMax(xiMax)   
1162   ,fNBinsZ(nZ)  
1163   ,fZMin(zMin)    
1164   ,fZMax(zMax)    
1165   ,fh2TrackPt(0)
1166   ,fh2Xi(0)
1167   ,fh2Z(0)
1168   ,fh1JetPt(0)
1169   ,fNameFF(name)
1170 {
1171   // default constructor
1172
1173 }
1174
1175 //___________________________________________________________________________
1176 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AliFragFuncHistos(const AliFragFuncHistos& copy)
1177   : TObject()
1178   ,fNBinsJetPt(copy.fNBinsJetPt)
1179   ,fJetPtMin(copy.fJetPtMin)
1180   ,fJetPtMax(copy.fJetPtMax)
1181   ,fNBinsPt(copy.fNBinsPt) 
1182   ,fPtMin(copy.fPtMin)   
1183   ,fPtMax(copy.fPtMax)   
1184   ,fNBinsXi(copy.fNBinsXi) 
1185   ,fXiMin(copy.fXiMin)   
1186   ,fXiMax(copy.fXiMax)   
1187   ,fNBinsZ(copy.fNBinsZ)  
1188   ,fZMin(copy.fZMin)    
1189   ,fZMax(copy.fZMax)    
1190   ,fh2TrackPt(copy.fh2TrackPt)
1191   ,fh2Xi(copy.fh2Xi)
1192   ,fh2Z(copy.fh2Z)
1193   ,fh1JetPt(copy.fh1JetPt)
1194   ,fNameFF(copy.fNameFF)
1195 {
1196   // copy constructor
1197 }
1198
1199 //_______________________________________________________________________________________________________________________________________________________________
1200 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncHistos& o)
1201 {
1202   // assignment
1203   
1204   if(this!=&o){
1205     TObject::operator=(o);
1206     fNBinsJetPt = o.fNBinsJetPt;
1207     fJetPtMin   = o.fJetPtMin;
1208     fJetPtMax   = o.fJetPtMax;
1209     fNBinsPt    = o.fNBinsPt; 
1210     fPtMin      = o.fPtMin;   
1211     fPtMax      = o.fPtMax;   
1212     fNBinsXi    = o.fNBinsXi; 
1213     fXiMin      = o.fXiMin;   
1214     fXiMax      = o.fXiMax;   
1215     fNBinsZ     = o.fNBinsZ;  
1216     fZMin       = o.fZMin;    
1217     fZMax       = o.fZMax;    
1218     fh2TrackPt  = o.fh2TrackPt;
1219     fh2Xi       = o.fh2Xi;
1220     fh2Z        = o.fh2Z;
1221     fh1JetPt    = o.fh1JetPt;
1222     fNameFF     = o.fNameFF;
1223   }
1224     
1225   return *this;
1226 }
1227
1228 //_________________________________________________________
1229 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::~AliFragFuncHistos()
1230 {
1231   // destructor 
1232
1233   if(fh1JetPt)   delete fh1JetPt;
1234   if(fh2TrackPt) delete fh2TrackPt;
1235   if(fh2Xi)      delete fh2Xi;
1236   if(fh2Z)       delete fh2Z;
1237 }
1238
1239 //_________________________________________________________________
1240 void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::DefineHistos()
1241 {
1242   // book FF histos
1243
1244   fh1JetPt   = new TH1F(Form("fh1FFJetPt%s", fNameFF.Data()),"",fNBinsJetPt,fJetPtMin,fJetPtMax);
1245   fh2TrackPt = new TH2F(Form("fh2FFTrackPt%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,fNBinsPt, fPtMin, fPtMax);
1246   fh2Xi      = new TH2F(Form("fh2FFXi%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsXi, fXiMin, fXiMax);
1247   fh2Z       = new TH2F(Form("fh2FFZ%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsZ, fZMin, fZMax);
1248
1249   AliAnalysisTaskFragmentationFunction::SetProperties(fh1JetPt, "p_{T} [GeV/c]", "entries"); 
1250   AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPt,"jet p_{T} [GeV/c]","p_{T} [GeV/c]","entries");
1251   AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi,"jet p_{T} [GeV/c]","#xi", "entries");
1252   AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z,"jet p_{T} [GeV/c]","z","entries");
1253 }
1254
1255 //_______________________________________________________________________________________________________________
1256 void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::FillFF(Float_t trackPt, Float_t jetPt, Bool_t incrementJetPt, Float_t norm)
1257 {
1258   // fill FF
1259  
1260   if(incrementJetPt && norm) fh1JetPt->Fill(jetPt,1/norm);
1261   if(incrementJetPt) fh1JetPt->Fill(jetPt);
1262   if(norm)fh2TrackPt->Fill(jetPt,trackPt,1/norm);
1263   else fh2TrackPt->Fill(jetPt,trackPt);
1264   
1265   Double_t z = 0.;
1266   if(jetPt>0) z = trackPt / jetPt;
1267   Double_t xi = 0;
1268   if(z>0) xi = TMath::Log(1/z);
1269   
1270   if(norm){
1271     fh2Xi->Fill(jetPt,xi,1/norm);
1272     fh2Z->Fill(jetPt,z,1/norm);
1273   }
1274   else {
1275     fh2Xi->Fill(jetPt,xi);
1276     fh2Z->Fill(jetPt,z);
1277   }
1278 }
1279
1280 //_________________________________________________________________________________
1281 void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AddToOutput(TList* list) const
1282 {
1283   // add histos to list
1284
1285   list->Add(fh1JetPt);
1286   
1287   list->Add(fh2TrackPt);
1288   list->Add(fh2Xi);
1289   list->Add(fh2Z);
1290 }
1291
1292 //_________________________________________________________________________________________________________
1293 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const char* name,
1294                                                                Int_t nPt,   Float_t ptMin,   Float_t ptMax,
1295                                                                Int_t nEta,  Float_t etaMin,  Float_t etaMax,
1296                                                                Int_t nPhi,  Float_t phiMin,  Float_t phiMax)
1297   : TObject()
1298   ,fNBinsPt(nPt)
1299   ,fPtMin(ptMin)
1300   ,fPtMax(ptMax)
1301   ,fNBinsEta(nEta)
1302   ,fEtaMin(etaMin)
1303   ,fEtaMax(etaMax)
1304   ,fNBinsPhi(nPhi)
1305   ,fPhiMin(phiMin)
1306   ,fPhiMax(phiMax)
1307   ,fh2EtaPhi(0)
1308   ,fh1Pt(0)
1309   ,fNameQAJ(name)
1310 {
1311   // default constructor
1312 }
1313
1314 //____________________________________________________________________________________
1315 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const AliFragFuncQAJetHistos& copy)
1316   : TObject()
1317   ,fNBinsPt(copy.fNBinsPt)
1318   ,fPtMin(copy.fPtMin)
1319   ,fPtMax(copy.fPtMax)
1320   ,fNBinsEta(copy.fNBinsEta)
1321   ,fEtaMin(copy.fEtaMin)
1322   ,fEtaMax(copy.fEtaMax)
1323   ,fNBinsPhi(copy.fNBinsPhi)
1324   ,fPhiMin(copy.fPhiMin)
1325   ,fPhiMax(copy.fPhiMax)
1326   ,fh2EtaPhi(copy.fh2EtaPhi)
1327   ,fh1Pt(copy.fh1Pt)
1328   ,fNameQAJ(copy.fNameQAJ)
1329 {
1330   // copy constructor
1331 }
1332
1333 //________________________________________________________________________________________________________________________________________________________________________
1334 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos& o)
1335 {
1336   // assignment
1337   
1338   if(this!=&o){
1339     TObject::operator=(o);
1340     fNBinsPt  = o.fNBinsPt;
1341     fPtMin    = o.fPtMin;
1342     fPtMax    = o.fPtMax;
1343     fNBinsEta = o.fNBinsEta;
1344     fEtaMin   = o.fEtaMin;
1345     fEtaMax   = o.fEtaMax;
1346     fNBinsPhi = o.fNBinsPhi;
1347     fPhiMin   = o.fPhiMin;
1348     fPhiMax   = o.fPhiMax;
1349     fh2EtaPhi = o.fh2EtaPhi;
1350     fh1Pt     = o.fh1Pt;
1351     fNameQAJ  = o.fNameQAJ;
1352   }
1353   
1354   return *this;
1355 }
1356
1357 //______________________________________________________________
1358 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::~AliFragFuncQAJetHistos()
1359 {
1360   // destructor 
1361   
1362   if(fh2EtaPhi) delete fh2EtaPhi;
1363   if(fh1Pt)     delete fh1Pt;
1364 }
1365
1366 //____________________________________________________________________
1367 void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::DefineHistos()
1368 {
1369   // book jet QA histos
1370
1371   fh2EtaPhi  = new TH2F(Form("fh2JetQAEtaPhi%s", fNameQAJ.Data()), Form("%s: #eta - #phi distribution", fNameQAJ.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1372   fh1Pt      = new TH1F(Form("fh1JetQAPt%s", fNameQAJ.Data()), Form("%s: p_{T} distribution", fNameQAJ.Data()), fNBinsPt, fPtMin, fPtMax);
1373         
1374   AliAnalysisTaskFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi"); 
1375   AliAnalysisTaskFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1376 }
1377
1378 //____________________________________________________________________________________________________
1379 void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::FillJetQA(Float_t eta, Float_t phi, Float_t pt)
1380 {
1381   // fill jet QA histos 
1382
1383   fh2EtaPhi->Fill( eta, phi);
1384   fh1Pt->Fill( pt );
1385 }
1386
1387 //____________________________________________________________________________________
1388 void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AddToOutput(TList* list) const 
1389 {
1390   // add histos to list
1391
1392   list->Add(fh2EtaPhi);
1393   list->Add(fh1Pt);
1394 }
1395
1396 //___________________________________________________________________________________________________________
1397 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const char* name,
1398                                                                    Int_t nPt, Float_t ptMin, Float_t ptMax,
1399                                                                    Int_t nEta, Float_t etaMin, Float_t etaMax,
1400                                                                    Int_t nPhi, Float_t phiMin, Float_t phiMax,
1401                                                                    Float_t ptThresh) 
1402   : TObject()
1403   ,fNBinsPt(nPt)
1404   ,fPtMin(ptMin)
1405   ,fPtMax(ptMax)
1406   ,fNBinsEta(nEta)
1407   ,fEtaMin(etaMin)
1408   ,fEtaMax(etaMax)
1409   ,fNBinsPhi(nPhi)
1410   ,fPhiMin(phiMin)
1411   ,fPhiMax(phiMax)
1412   ,fHighPtThreshold(ptThresh)
1413   ,fh2EtaPhi(0)
1414   ,fh1Pt(0)
1415   ,fh2HighPtEtaPhi(0)
1416   ,fNameQAT(name)
1417 {
1418   // default constructor
1419 }
1420
1421 //__________________________________________________________________________________________
1422 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const AliFragFuncQATrackHistos& copy)
1423   : TObject()
1424   ,fNBinsPt(copy.fNBinsPt)
1425   ,fPtMin(copy.fPtMin)
1426   ,fPtMax(copy.fPtMax)
1427   ,fNBinsEta(copy.fNBinsEta)
1428   ,fEtaMin(copy.fEtaMin)
1429   ,fEtaMax(copy.fEtaMax)
1430   ,fNBinsPhi(copy.fNBinsPhi)
1431   ,fPhiMin(copy.fPhiMin)
1432   ,fPhiMax(copy.fPhiMax)
1433   ,fHighPtThreshold(copy.fHighPtThreshold)
1434   ,fh2EtaPhi(copy.fh2EtaPhi)
1435   ,fh1Pt(copy.fh1Pt)
1436   ,fh2HighPtEtaPhi(copy.fh2HighPtEtaPhi)
1437   ,fNameQAT(copy.fNameQAT)
1438 {
1439   // copy constructor
1440 }
1441
1442 // _____________________________________________________________________________________________________________________________________________________________________________
1443 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos& o)
1444 {
1445   // assignment
1446   
1447   if(this!=&o){
1448     TObject::operator=(o);
1449     fNBinsPt         = o.fNBinsPt;
1450     fPtMin           = o.fPtMin;
1451     fPtMax           = o.fPtMax;
1452     fNBinsEta        = o.fNBinsEta;
1453     fEtaMin          = o.fEtaMin;
1454     fEtaMax          = o.fEtaMax;
1455     fNBinsPhi        = o.fNBinsPhi;
1456     fPhiMin          = o.fPhiMin;
1457     fPhiMax          = o.fPhiMax;
1458     fHighPtThreshold = o.fHighPtThreshold;
1459     fh2EtaPhi        = o.fh2EtaPhi;
1460     fh1Pt            = o.fh1Pt;
1461     fh2HighPtEtaPhi  = o.fh2HighPtEtaPhi;
1462     fNameQAT         = o.fNameQAT;
1463   }
1464   
1465   return *this;
1466 }
1467
1468 //___________________________________________________________________
1469 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::~AliFragFuncQATrackHistos()
1470 {
1471   // destructor 
1472   
1473   if(fh2EtaPhi)       delete fh2EtaPhi;
1474   if(fh2HighPtEtaPhi) delete fh2HighPtEtaPhi;
1475   if(fh1Pt)           delete fh1Pt;
1476 }
1477
1478 //______________________________________________________________________
1479 void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::DefineHistos()
1480 {
1481   // book track QA histos
1482
1483   fh2EtaPhi       = new TH2F(Form("fh2TrackQAEtaPhi%s", fNameQAT.Data()), Form("%s: #eta - #phi distribution", fNameQAT.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1484   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);
1485   fh1Pt           = new TH1F(Form("fh1TrackQAPt%s", fNameQAT.Data()), Form("%s: p_{T} distribution", fNameQAT.Data()), fNBinsPt, fPtMin, fPtMax);
1486   
1487   AliAnalysisTaskFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi"); 
1488   AliAnalysisTaskFragmentationFunction::SetProperties(fh2HighPtEtaPhi, "#eta", "#phi");
1489   AliAnalysisTaskFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1490 }
1491
1492 //________________________________________________________________________________________________________
1493 void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::FillTrackQA(Float_t eta, Float_t phi, Float_t pt)
1494 {
1495   // fill track QA histos
1496     
1497   fh2EtaPhi->Fill( eta, phi);
1498   if(pt > fHighPtThreshold) fh2HighPtEtaPhi->Fill( eta, phi);
1499   fh1Pt->Fill( pt );    
1500 }
1501
1502 //______________________________________________________________________________________
1503 void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AddToOutput(TList* list) const
1504 {
1505   // add histos to list
1506
1507   list->Add(fh2EtaPhi);
1508   list->Add(fh2HighPtEtaPhi);
1509   list->Add(fh1Pt);
1510 }
1511
1512 //______________________________________________________________________________________________________
1513 AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::AliFragFuncIntraJetHistos(const char* name, 
1514                                                          Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,  
1515                                                          Int_t nPt, Float_t ptMin, Float_t ptMax,
1516                                                          Int_t nZ , Float_t zMin , Float_t zMax,
1517                                                          Int_t nCosTheta , Float_t costhetaMin , Float_t costhetaMax,
1518                                                          Int_t nTheta , Float_t thetaMin , Float_t thetaMax,
1519                                                          Int_t nJt , Float_t jtMin , Float_t jtMax)
1520   : TObject()
1521   ,fNBinsJetPt(nJetPt)
1522   ,fJetPtMin(jetPtMin)
1523   ,fJetPtMax(jetPtMax)
1524   ,fNBinsPt(nPt) 
1525   ,fPtMin(ptMin)   
1526   ,fPtMax(ptMax)   
1527   ,fNBinsZ(nZ) 
1528   ,fZMin(zMin)   
1529   ,fZMax(zMax)   
1530   ,fNBinsJt(nJt)
1531   ,fJtMin(jtMin)
1532   ,fJtMax(jtMax)
1533   ,fNBinsTheta(nTheta)
1534   ,fThetaMin(thetaMin)
1535   ,fThetaMax(thetaMax)
1536   ,fNBinsCosTheta(nCosTheta)
1537   ,fCosThetaMin(costhetaMin)
1538   ,fCosThetaMax(costhetaMax)
1539   ,fh2Theta(0)
1540   ,fh2CosTheta(0)
1541   ,fh2Jt(0)
1542   ,fh2PtvsZ(0)
1543   ,fhnIntraJet(0)
1544   ,fnDim(6)
1545   ,fNameIJ(name)
1546 {
1547   // default constructor
1548
1549 }
1550
1551 //___________________________________________________________________________
1552 AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::AliFragFuncIntraJetHistos(const AliFragFuncIntraJetHistos& copy)
1553   : TObject()
1554   ,fNBinsJetPt(copy.fNBinsJetPt)
1555   ,fJetPtMin(copy.fJetPtMin)
1556   ,fJetPtMax(copy.fJetPtMax)
1557   ,fNBinsPt(copy.fNBinsPt) 
1558   ,fPtMin(copy.fPtMin)   
1559   ,fPtMax(copy.fPtMax)   
1560   ,fNBinsZ(copy.fNBinsZ) 
1561   ,fZMin(copy.fZMin)   
1562   ,fZMax(copy.fZMax)   
1563   ,fNBinsJt(copy.fNBinsJt)
1564   ,fJtMin(copy.fJtMin)
1565   ,fJtMax(copy.fJtMax)
1566   ,fNBinsTheta(copy.fNBinsTheta)
1567   ,fThetaMin(copy.fThetaMin)
1568   ,fThetaMax(copy.fThetaMax)
1569   ,fNBinsCosTheta(copy.fNBinsCosTheta)
1570   ,fCosThetaMin(copy.fCosThetaMin)
1571   ,fCosThetaMax(copy.fCosThetaMax)
1572   ,fh2Theta(copy.fh2Theta)
1573   ,fh2CosTheta(copy.fh2CosTheta)
1574   ,fh2Jt(copy.fh2Jt)
1575   ,fh2PtvsZ(copy.fh2PtvsZ)
1576   ,fhnIntraJet(copy.fhnIntraJet)
1577   ,fnDim(copy.fnDim)
1578   ,fNameIJ(copy.fNameIJ)
1579 {
1580   // copy constructor
1581 }
1582
1583 //_______________________________________________________________________________________________________________________________________________________________
1584 AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos& o)
1585 {
1586   // assignment
1587   
1588   if(this!=&o){
1589     TObject::operator=(o);
1590     fNBinsJetPt       = o.fNBinsJetPt;
1591     fJetPtMin         = o.fJetPtMin;
1592     fJetPtMax         = o.fJetPtMax;
1593     fNBinsPt          = o.fNBinsPt; 
1594     fPtMin            = o.fPtMin;   
1595     fPtMax            = o.fPtMax;   
1596     fNBinsZ           = o.fNBinsZ; 
1597     fZMin             = o.fZMin;   
1598     fZMax             = o.fZMax;   
1599     fNBinsJt          = o.fNBinsJt;
1600     fJtMin            = o.fJtMin;
1601     fJtMax            = o.fJtMax;
1602     fNBinsTheta       = o.fNBinsTheta;
1603     fThetaMin         = o.fThetaMin;
1604     fThetaMax         = o.fThetaMax;
1605     fNBinsCosTheta    = o.fNBinsCosTheta;
1606     fCosThetaMin      = o.fCosThetaMin;
1607     fCosThetaMax      = o.fCosThetaMax;
1608     fh2Theta          = o.fh2Theta;
1609     fh2CosTheta       = o.fh2CosTheta;
1610     fh2Jt             = o.fh2Jt;
1611     fh2PtvsZ          = o.fh2PtvsZ;
1612     fhnIntraJet       = o.fhnIntraJet;
1613     fnDim             = o.fnDim;
1614     fNameIJ           = o.fNameIJ;
1615   }
1616     
1617   return *this;
1618 }
1619
1620 //_________________________________________________________
1621 AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::~AliFragFuncIntraJetHistos()
1622 {
1623   // destructor 
1624
1625
1626   if(fh2Theta)          delete fh2Theta;
1627   if(fh2CosTheta)       delete fh2CosTheta;
1628   if(fh2Jt)             delete fh2Jt;
1629   if(fh2PtvsZ)          delete fh2PtvsZ;
1630   if(fhnIntraJet)       delete fhnIntraJet;
1631
1632 }
1633
1634 //_________________________________________________________________
1635 void AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::DefineHistos()
1636 {
1637   // book FF histos
1638
1639   fh2Theta    = new TH2F(Form("fh2IJTheta%s",fNameIJ.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,fNBinsTheta, fThetaMin, fThetaMax);
1640   fh2CosTheta = new TH2F(Form("fh2IJcosTheta%s",fNameIJ.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,fNBinsCosTheta, fCosThetaMin, fCosThetaMax);
1641   fh2Jt       = new TH2F(Form("fh2IJJt%s",fNameIJ.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsJt, fJtMin, fJtMax);
1642
1643   // Create 3D histograms
1644   Int_t    *iBin = new Int_t[fnDim];
1645   Double_t *min  = new Double_t[fnDim];
1646   Double_t *max  = new Double_t[fnDim];
1647
1648   iBin[0] = fNBinsJetPt; iBin[1] = fNBinsTheta; iBin[2] = fNBinsCosTheta; iBin[3] = fNBinsJt; iBin[4] = fNBinsZ; iBin[5] = fNBinsPt;
1649   min[0]  = fJetPtMin; min[1] = fThetaMin; min[2] = fCosThetaMin; min[3] = fJtMin; min[4] = fZMin; min[5] = fPtMin; 
1650   max[0]  = fJetPtMax; max[1] = fThetaMax; max[2] = fCosThetaMax; max[3] = fJtMax; max[4] = fZMax; max[5] = fPtMax;
1651
1652   const char* title = Form("fhnIntraJetPart%s",fNameIJ.Data());
1653   const char* comment = "THnSparseF p_{T} jet [GeV/c] : #Theta : cos(#Theta) : j_{T} : Z : p_{T} part [GeV/c]";
1654   fhnIntraJet = new THnSparseF(title,comment,fnDim,iBin,min,max);
1655
1656   const char** axisTitle = new const char*[fnDim];
1657   axisTitle[0] = "p_{T}^{jet} [GeV/c]";
1658   axisTitle[1] = "#Theta";
1659   axisTitle[2] = "Cos(#Theta)";
1660   axisTitle[3] = "j_{T} [GeV]";
1661   axisTitle[4] = "z = p_{T}^{had}/p_{T}^{jet}";
1662   axisTitle[5] = "p_{T}^{had} [GeV/c]";
1663   
1664   AliAnalysisTaskFragmentationFunction::SetProperties(fh2Theta,"jet p_{T} [GeV/c]","#Theta","entries");
1665   AliAnalysisTaskFragmentationFunction::SetProperties(fh2CosTheta,"jet p_{T} [GeV/c]","cos(#Theta)", "entries");
1666   AliAnalysisTaskFragmentationFunction::SetProperties(fh2Jt,"jet p_{T} [GeV/c]","j_{T}","entries");
1667   AliAnalysisTaskFragmentationFunction::SetProperties(fhnIntraJet,fnDim,axisTitle);
1668   delete[] iBin;
1669   delete[] min;
1670   delete[] max;
1671   delete[] axisTitle;
1672 }
1673
1674 //_______________________________________________________________________________________________________________
1675 void AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::FillIntraJet(const TLorentzVector* trackV, const TLorentzVector* jetV, Float_t norm)
1676 {
1677   // fill IntraJet histos
1678  
1679   Float_t cosTheta = 0.; Float_t theta = 0.; 
1680   Float_t jt = 0.; Float_t z = 0.; 
1681   // For Theta distribution
1682   Float_t pxT  = trackV->Px();
1683   Float_t pyT  = trackV->Py();
1684   Float_t pzT  = trackV->Pz();
1685   Float_t ptT  = trackV->Pt();
1686   Float_t pT   = trackV->P();
1687   Float_t etaT = trackV->Eta();
1688   Float_t phiT = trackV->Phi(); // Check the value returned
1689   Float_t pxJ = jetV->Px();
1690   Float_t pyJ = jetV->Py();
1691   Float_t pzJ = jetV->Pz();
1692   Float_t ptJ = jetV->Pt();
1693   Float_t pJ  = jetV->P();
1694
1695   // Compute z
1696   if(ptJ>0) z = (Float_t)(ptT/ptJ);
1697
1698   // Compute theta
1699   cosTheta = (pxT*pxJ+pyT*pyJ+pzT*pzJ)/(pT*pJ);
1700   theta = TMath::ACos(cosTheta);
1701
1702   // Compute jt
1703   TVector3 trackP; TVector3 jetP;
1704   jetP[0] = pxJ;
1705   jetP[1] = pyJ;
1706   jetP[2] = pzJ;
1707   trackP.SetPtEtaPhi(ptT,etaT,phiT);
1708   jt = TMath::Sin(trackP.Angle(jetP))*trackP.Mag();
1709
1710   // Fill histos and THnSparse
1711   if(norm){
1712     fh2CosTheta->Fill(ptJ,cosTheta,1/norm);
1713     fh2Theta->Fill(ptJ,theta,1/norm);
1714     fh2Jt->Fill(ptJ,jt,1/norm);
1715   }
1716   else {
1717     fh2CosTheta->Fill(ptJ,cosTheta);
1718     fh2Theta->Fill(ptJ,theta);
1719     fh2Jt->Fill(ptJ,jt);
1720   }
1721
1722   // Fill THnSparse
1723   Double_t *content = new Double_t[fnDim];
1724   content[0]= ptJ; content[1] = theta; content[2] = cosTheta; content[3] = jt; content[4] = z; content[5] = ptT; 
1725
1726   if(norm)fhnIntraJet->Fill(content,1/norm);
1727   else fhnIntraJet->Fill(content);
1728
1729   delete content;
1730
1731 }
1732
1733 //______________________________________________________________________________________________________
1734 AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::AliFragFuncDiJetHistos(const char* name, Int_t kindSlices,
1735                                                          Int_t nJetInvMass, Float_t jetInvMassMin, Float_t jetInvMassMax,  
1736                                                          Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,  
1737                                                          Int_t nPt, Float_t ptMin, Float_t ptMax,
1738                                                          Int_t nXi, Float_t xiMin, Float_t xiMax,
1739                                                          Int_t nZ , Float_t zMin , Float_t zMax)
1740   : TObject()
1741   ,fKindSlices(kindSlices)
1742   ,fNBinsJetInvMass(nJetInvMass)
1743   ,fJetInvMassMin(jetInvMassMin)
1744   ,fJetInvMassMax(jetInvMassMax)
1745   ,fNBinsJetPt(nJetPt)
1746   ,fJetPtMin(jetPtMin)
1747   ,fJetPtMax(jetPtMax)
1748   ,fNBinsPt(nPt) 
1749   ,fPtMin(ptMin)   
1750   ,fPtMax(ptMax)   
1751   ,fNBinsXi(nXi) 
1752   ,fXiMin(xiMin)   
1753   ,fXiMax(xiMax)   
1754   ,fNBinsZ(nZ)  
1755   ,fZMin(zMin)    
1756   ,fZMax(zMax)
1757   ,fh2TrackPtJet1(0)
1758   ,fh2TrackPtJet2(0)
1759   ,fh2TrackPtJet(0)
1760   ,fh1Jet1Pt(0)
1761   ,fh1Jet2Pt(0)
1762   ,fh1JetPt(0)
1763   ,fh2Xi1(0)
1764   ,fh2Xi2(0)
1765   ,fh2Xi(0)
1766   ,fh2Z1(0)
1767   ,fh2Z2(0)
1768   ,fh2Z(0)
1769   ,fh2Pt1(0)
1770   ,fh2Pt2(0)
1771   ,fh2Pt(0)
1772   ,fNameDJ(name)
1773 {
1774   // default constructor
1775
1776 }
1777
1778 //______________________________________________________________________________________________________
1779 AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::AliFragFuncDiJetHistos(const AliFragFuncDiJetHistos& copy)
1780   : TObject()
1781   ,fKindSlices(copy.fKindSlices)
1782   ,fNBinsJetInvMass(copy.fNBinsJetInvMass)
1783   ,fJetInvMassMin(copy.fJetInvMassMin)
1784   ,fJetInvMassMax(copy.fJetInvMassMax)
1785   ,fNBinsJetPt(copy.fNBinsJetPt)
1786   ,fJetPtMin(copy.fJetPtMin)
1787   ,fJetPtMax(copy.fJetPtMax)
1788   ,fNBinsPt(copy.fNBinsPt) 
1789   ,fPtMin(copy.fPtMin)   
1790   ,fPtMax(copy.fPtMax)   
1791   ,fNBinsXi(copy.fNBinsXi) 
1792   ,fXiMin(copy.fXiMin)   
1793   ,fXiMax(copy.fXiMax)   
1794   ,fNBinsZ(copy.fNBinsZ)  
1795   ,fZMin(copy.fZMin)    
1796   ,fZMax(copy.fZMax)
1797   ,fh2TrackPtJet1(copy.fh2TrackPtJet1)
1798   ,fh2TrackPtJet2(copy.fh2TrackPtJet2)
1799   ,fh2TrackPtJet(copy.fh2TrackPtJet)
1800   ,fh1Jet1Pt(copy.fh1Jet1Pt)
1801   ,fh1Jet2Pt(copy.fh1Jet2Pt)
1802   ,fh1JetPt(copy.fh1JetPt)
1803   ,fh2Xi1(copy.fh2Xi1)
1804   ,fh2Xi2(copy.fh2Xi2)
1805   ,fh2Xi(copy.fh2Xi2)
1806   ,fh2Z1(copy.fh2Z1)
1807   ,fh2Z2(copy.fh2Z2)
1808   ,fh2Z(copy.fh2Z)
1809   ,fh2Pt1(copy.fh2Pt1)
1810   ,fh2Pt2(copy.fh2Pt2)
1811   ,fh2Pt(copy.fh2Pt)
1812   ,fNameDJ(copy.fNameDJ)
1813 {
1814   // default constructor
1815
1816 }
1817
1818 //_______________________________________________________________________________________________________________________________________________________________
1819 AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos& o)
1820 {
1821   // assignment
1822   
1823   if(this!=&o){
1824     TObject::operator=(o);
1825     fKindSlices      = o.fKindSlices;
1826     fNBinsJetInvMass = o.fNBinsJetInvMass;
1827     fJetInvMassMin   = o.fJetInvMassMin;
1828     fJetInvMassMax   = o.fJetInvMassMax;
1829     fNBinsJetPt      = o.fNBinsJetPt;
1830     fJetPtMin        = o.fJetPtMin;
1831     fJetPtMax        = o.fJetPtMax;
1832     fNBinsPt         = o.fNBinsPt; 
1833     fPtMin           = o.fPtMin;   
1834     fPtMax           = o.fPtMax;   
1835     fNBinsXi         = o.fNBinsXi; 
1836     fXiMin           = o.fXiMin;   
1837     fXiMax           = o.fXiMax;   
1838     fNBinsZ          = o.fNBinsZ;  
1839     fZMin            = o.fZMin;    
1840     fZMax            = o.fZMax;   
1841     fh2TrackPtJet1   = o.fh2TrackPtJet1;
1842     fh2TrackPtJet2   = o.fh2TrackPtJet2;
1843     fh2TrackPtJet    = o.fh2TrackPtJet;
1844     fh1Jet1Pt        = o.fh1Jet1Pt;
1845     fh1Jet2Pt        = o.fh1Jet2Pt;
1846     fh1JetPt         = o.fh1JetPt;
1847     fh2Xi1           = o.fh2Xi1;
1848     fh2Xi2           = o.fh2Xi2;
1849     fh2Xi            = o.fh2Xi;
1850     fh2Z1            = o.fh2Z1;
1851     fh2Z2            = o.fh2Z2;
1852     fh2Z             = o.fh2Z;
1853     fh2Pt1           = o.fh2Pt1;
1854     fh2Pt2           = o.fh2Pt2;
1855     fh2Pt            = o.fh2Pt;
1856     fNameDJ          = o.fNameDJ;
1857   }
1858     
1859   return *this;
1860 }
1861
1862 //_________________________________________________________
1863 AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::~AliFragFuncDiJetHistos()
1864 {
1865   // destructor 
1866
1867   if(fh2TrackPtJet1) delete fh2TrackPtJet1;
1868   if(fh2TrackPtJet2) delete fh2TrackPtJet2;
1869   if(fh2TrackPtJet ) delete fh2TrackPtJet;
1870   if(fh1Jet1Pt)      delete fh1Jet1Pt;
1871   if(fh1Jet2Pt)      delete fh1Jet2Pt;
1872   if(fh1JetPt)       delete fh1JetPt;
1873   if(fh2Xi1)         delete fh2Xi1;
1874   if(fh2Xi2)         delete fh2Xi2;
1875   if(fh2Xi)          delete fh2Xi;
1876   if(fh2Z1)          delete fh2Z1;
1877   if(fh2Z2)          delete fh2Z2;
1878   if(fh2Z)           delete fh2Z;
1879   if(fh2Pt1)         delete fh2Pt1;
1880   if(fh2Pt2)         delete fh2Pt2;
1881   if(fh2Pt)          delete fh2Pt;
1882 }
1883
1884 //________________________________________________________________________
1885 void AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::DefineDiJetHistos()
1886 {
1887   // book DiJet histos
1888   
1889   Int_t nBins = 0;
1890   Double_t min = 0.;
1891   Double_t max = 0.;
1892   const char *xaxis = "";
1893   if(fKindSlices == 1)
1894     {
1895       nBins = fNBinsJetInvMass;
1896       min   = fJetInvMassMin;
1897       max   = fJetInvMassMax;
1898       xaxis = "M_{JJ} [GeV]";
1899     }
1900   if(fKindSlices == 2 || fKindSlices == 3)
1901     {
1902       nBins = fNBinsJetPt;
1903       min   = fJetPtMin;
1904       max   = fJetPtMax;
1905       if(fKindSlices == 2) xaxis = "E_{Tmean} [GeV]";
1906       if(fKindSlices == 3) xaxis ="leading jet p_{T} [GeV/c]";
1907     }
1908   
1909   fh1Jet1Pt      = new TH1F(Form("fh1DJJet1Pt%s", fNameDJ.Data()), "", fNBinsJetPt, fJetPtMin, fJetPtMax);
1910   fh1Jet2Pt      = new TH1F(Form("fh1DJJet2Pt%s", fNameDJ.Data()), "", fNBinsJetPt, fJetPtMin, fJetPtMax);
1911   fh1JetPt       = new TH1F(Form("fh1DJJetPt%s",  fNameDJ.Data()), "", fNBinsJetPt, fJetPtMin, fJetPtMax);
1912   
1913   fh2TrackPtJet1 = new TH2F(Form("fh2DJTrackPtJet1%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
1914   fh2TrackPtJet2 = new TH2F(Form("fh2DJTrackPtJet2%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
1915   fh2TrackPtJet  = new TH2F(Form("fh2DJTrackPtJet%s", fNameDJ.Data()),  "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
1916   
1917   fh2Xi1         = new TH2F(Form("fh2DJXi1%s", fNameDJ.Data()), "",nBins, min, max, fNBinsXi, fXiMin, fXiMax);
1918   fh2Xi2         = new TH2F(Form("fh2DJXi2%s", fNameDJ.Data()), "",nBins, min, max, fNBinsXi, fXiMin, fXiMax);
1919   fh2Xi          = new TH2F(Form("fh2DJXi%s", fNameDJ.Data()),  "",nBins, min, max, fNBinsXi, fXiMin, fXiMax);
1920   
1921   fh2Z1          = new TH2F(Form("fh2DJZ1%s", fNameDJ.Data()), "",nBins, min, max, fNBinsZ, fZMin, fZMax);
1922   fh2Z2          = new TH2F(Form("fh2DJZ2%s", fNameDJ.Data()), "",nBins, min, max, fNBinsZ, fZMin, fZMax);
1923   fh2Z           = new TH2F(Form("fh2DJZ%s", fNameDJ.Data()),  "",nBins, min, max, fNBinsZ, fZMin, fZMax);
1924   
1925   fh2Pt1         = new TH2F(Form("fh2DJPt1%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
1926   fh2Pt2         = new TH2F(Form("fh2DJPt2%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
1927   fh2Pt          = new TH2F(Form("fh2DJPtZ%s", fNameDJ.Data()),  "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
1928       
1929   AliAnalysisTaskFragmentationFunction::SetProperties(fh1Jet1Pt, "p_{T} [GeV/c]", "entries");
1930   AliAnalysisTaskFragmentationFunction::SetProperties(fh1Jet2Pt, "p_{T} [GeV/c]", "entries");
1931   AliAnalysisTaskFragmentationFunction::SetProperties(fh1JetPt, "p_{T} [GeV/c]", "entries");
1932
1933   AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPtJet1, xaxis, "p_{T} [GeV/c]", "Entries");
1934   AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPtJet2, xaxis, "p_{T} [GeV/c]", "Entries");
1935   AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPtJet, xaxis, "p_{T} [GeV/c]", "Entries");
1936   AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi1, xaxis, "#xi", "Entries");
1937   AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi2, xaxis, "#xi", "Entries");
1938   AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi, xaxis, "#xi", "Entries");
1939   AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z1, xaxis, "z", "Entries");
1940   AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z2, xaxis, "z", "Entries");
1941   AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z, xaxis, "z", "Entries");
1942   AliAnalysisTaskFragmentationFunction::SetProperties(fh2Pt1, xaxis, "p_{T} [GeV/c]", "Entries");
1943   AliAnalysisTaskFragmentationFunction::SetProperties(fh2Pt2, xaxis, "p_{T} [GeV/c]", "Entries");
1944   AliAnalysisTaskFragmentationFunction::SetProperties(fh2Pt, xaxis, "p_{T} [GeV/c]", "Entries");
1945 }
1946
1947 //________________________________________________________________________
1948 void AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::FillDiJetFF(Int_t jetType, Float_t trackPt, Float_t jetPt, Double_t jetBin, Bool_t incrementJetPt)
1949 {
1950   // fill DiJet FF
1951
1952   if(jetType == 0)
1953     {
1954       if(incrementJetPt) fh1JetPt->Fill(jetPt);  
1955       
1956       fh2TrackPtJet->Fill(jetBin, trackPt);
1957       
1958       Double_t z = trackPt / jetPt;
1959       Double_t xi = 0;
1960       if(z!=0) xi = TMath::Log(1/z);
1961       
1962       fh2Xi->Fill(jetBin, xi);
1963       fh2Z->Fill(jetBin, z);
1964     }
1965   if(jetType == 1)
1966     {
1967       if(incrementJetPt) fh1Jet1Pt->Fill(jetPt);
1968       
1969       fh2TrackPtJet1->Fill(jetBin, trackPt);
1970       
1971       Double_t z = trackPt / jetPt;
1972       Double_t xi = 0;
1973       if(z!=0) xi = TMath::Log(1/z);
1974       
1975       fh2Xi1->Fill(jetBin, xi);
1976       fh2Z1->Fill(jetBin, z);
1977     }
1978   if(jetType == 2)
1979     {
1980       if(incrementJetPt) fh1Jet2Pt->Fill(jetPt);
1981       
1982       fh2TrackPtJet2->Fill(jetBin, trackPt);
1983       
1984       Double_t z = trackPt / jetPt;
1985       Double_t xi = 0;
1986       if(z!=0) xi = TMath::Log(1/z);
1987       
1988       fh2Xi2->Fill(jetBin, xi);
1989       fh2Z2->Fill(jetBin, z);
1990     }
1991
1992
1993 }
1994
1995 //________________________________________________________________________
1996 void AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::AddToOutput(TList* list)const
1997 {
1998   // add histos to list
1999
2000   list->Add(fh1Jet1Pt);
2001   list->Add(fh1Jet2Pt);
2002   list->Add(fh1JetPt);
2003   list->Add(fh2TrackPtJet1);
2004   list->Add(fh2TrackPtJet2);
2005   list->Add(fh2TrackPtJet);
2006   list->Add(fh2Xi1);
2007   list->Add(fh2Xi2);
2008   list->Add(fh2Xi);
2009   list->Add(fh2Z1);
2010   list->Add(fh2Z2);
2011   list->Add(fh2Z);
2012 }
2013
2014 //______________________________________________________________________________________________________
2015 AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::AliFragFuncQADiJetHistos(const char* name, Int_t kindSlices,
2016                                             Int_t nInvMass, Float_t invMassMin, Float_t invMassMax, 
2017                                              Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,  
2018                                             Int_t nDeltaPhi, Float_t deltaPhiMin, Float_t deltaPhiMax, 
2019                                            Int_t nDeltaEta, Float_t deltaEtaMin, Float_t deltaEtaMax, 
2020                                           Int_t nDeltaPt, Float_t deltaPtMin, Float_t deltaPtMax)
2021   : TObject()
2022   ,fKindSlices(kindSlices)
2023   ,fNBinsJetInvMass(nInvMass)
2024   ,fJetInvMassMin(invMassMin)
2025   ,fJetInvMassMax(invMassMax)
2026   ,fNBinsJetPt(nJetPt)
2027   ,fJetPtMin(jetPtMin)
2028   ,fJetPtMax(jetPtMax)
2029   ,fNBinsDeltaPhi(nDeltaPhi)
2030   ,fDeltaPhiMin(deltaPhiMin)
2031   ,fDeltaPhiMax(deltaPhiMax)
2032   ,fNBinsDeltaEta(nDeltaEta)
2033   ,fDeltaEtaMin(deltaEtaMin)
2034   ,fDeltaEtaMax(deltaEtaMax)
2035   ,fNBinsDeltaPt(nDeltaPt)
2036   ,fDeltaPtMin(deltaPtMin)
2037   ,fDeltaPtMax(deltaPtMax)
2038   ,fh2InvMass(0)
2039   ,fh2DeltaPhi(0)
2040   ,fh2DeltaEta(0)
2041   ,fh2DeltaPt(0)
2042   ,fNameQADJ(name)
2043 {
2044   // default constructor
2045
2046 }
2047
2048 //______________________________________________________________________________________________________
2049 AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::AliFragFuncQADiJetHistos(const AliFragFuncQADiJetHistos& copy)
2050   : TObject()
2051   ,fKindSlices(copy.fKindSlices)
2052   ,fNBinsJetInvMass(copy.fNBinsJetInvMass)
2053   ,fJetInvMassMin(copy.fJetInvMassMin)
2054   ,fJetInvMassMax(copy.fJetInvMassMax)
2055   ,fNBinsJetPt(copy.fNBinsJetPt)
2056   ,fJetPtMin(copy.fJetPtMin)
2057   ,fJetPtMax(copy.fJetPtMax)
2058   ,fNBinsDeltaPhi(copy.fNBinsDeltaPhi)
2059   ,fDeltaPhiMin(copy.fDeltaPhiMin)
2060   ,fDeltaPhiMax(copy.fDeltaPhiMax)
2061   ,fNBinsDeltaEta(copy.fNBinsDeltaEta)
2062   ,fDeltaEtaMin(copy.fDeltaEtaMin)
2063   ,fDeltaEtaMax(copy.fDeltaEtaMax)
2064   ,fNBinsDeltaPt(copy.fNBinsDeltaPt)
2065   ,fDeltaPtMin(copy.fDeltaPtMin)
2066   ,fDeltaPtMax(copy.fDeltaPtMax)
2067   ,fh2InvMass(copy.fh2InvMass)
2068   ,fh2DeltaPhi(copy.fh2DeltaPhi)
2069   ,fh2DeltaEta(copy.fh2DeltaEta)
2070   ,fh2DeltaPt(copy.fh2DeltaPt)
2071   ,fNameQADJ(copy.fNameQADJ)
2072 {
2073   // default constructor
2074
2075 }
2076
2077 //_______________________________________________________________________________________________________________________________________________________________
2078 AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos& o)
2079 {
2080   // assignment
2081   
2082   if(this!=&o){
2083     TObject::operator=(o);
2084     fKindSlices       = o.fKindSlices;
2085     fNBinsJetInvMass  = o.fNBinsJetInvMass;
2086     fJetInvMassMin    = o.fJetInvMassMin;
2087     fJetInvMassMax    = o.fJetInvMassMax;
2088     fNBinsJetPt       = o.fNBinsJetPt;
2089     fJetPtMin         = o.fJetPtMin;
2090     fJetPtMax         = o.fJetPtMax;
2091     fNBinsDeltaPhi    = o.fNBinsDeltaPhi;
2092     fDeltaPhiMin      = o.fDeltaPhiMin;
2093     fDeltaPhiMax      = o.fDeltaPhiMax;
2094     fNBinsDeltaEta    = o.fNBinsDeltaEta;
2095     fDeltaEtaMin      = o.fDeltaEtaMin;
2096     fDeltaEtaMax      = o.fDeltaEtaMax;
2097     fNBinsDeltaPt     = o.fNBinsDeltaPt;
2098     fDeltaPtMin       = o.fDeltaPtMin;
2099     fDeltaPtMax       = o.fDeltaPtMax;
2100     fh2InvMass        = o.fh2InvMass;
2101     fh2DeltaPhi       = o.fh2DeltaPhi;
2102     fh2DeltaEta       = o.fh2DeltaEta;
2103     fh2DeltaPt        = o.fh2DeltaPt;
2104     fNameQADJ         = o.fNameQADJ;
2105   }
2106     
2107   return *this;
2108 }
2109
2110 //_________________________________________________________
2111 AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::~AliFragFuncQADiJetHistos()
2112 {
2113   // destructor 
2114
2115   if(fh2InvMass)  delete fh2InvMass;
2116   if(fh2DeltaPhi) delete fh2DeltaPhi;
2117   if(fh2DeltaEta) delete fh2DeltaEta;
2118   if(fh2DeltaPt)  delete fh2DeltaPt;
2119 }
2120
2121 //________________________________________________________________________
2122 void AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::DefineQADiJetHistos()
2123 {
2124   // define histos
2125   
2126   Int_t nBins = 0;
2127   Double_t min = 0.;
2128   Double_t max = 0.;
2129   const char *xaxis = "";
2130   if(fKindSlices == 1)
2131     {
2132       nBins = fNBinsJetInvMass;
2133       min   = fJetInvMassMin;
2134       max   = fJetInvMassMax;
2135       xaxis = "M_{JJ} [GeV]";
2136     }
2137   if(fKindSlices == 2 || fKindSlices == 3)
2138     {
2139       nBins = fNBinsJetPt;
2140       min   = fJetPtMin;
2141       max   = fJetPtMax;
2142       if(fKindSlices == 2) xaxis = "E_{Tmean} [GeV]";
2143       if(fKindSlices == 3) xaxis ="leading jet p_{T} [GeV/c]";
2144     }
2145   
2146   
2147   fh2InvMass  = new TH2F(Form("fh2DJInvMassPositionCut%s",  fNameQADJ.Data()), "",nBins, min, max, fNBinsJetInvMass, fJetInvMassMin, fJetInvMassMax);
2148   fh2DeltaPhi = new TH2F(Form("fh2DJDeltaPhiPositionCut%s", fNameQADJ.Data()), "",nBins, min, max, fNBinsDeltaPhi, fDeltaPhiMin, fDeltaPhiMax);
2149   fh2DeltaEta = new TH2F(Form("fh2DJDeltaEtaPositionCut%s", fNameQADJ.Data()), "",nBins, min, max, fNBinsDeltaEta, fDeltaEtaMin, fDeltaEtaMax);
2150   fh2DeltaPt  = new TH2F(Form("fh2DJDeltaPtPositionCut%s",  fNameQADJ.Data()), "",nBins, min, max, fNBinsDeltaPt, fDeltaPtMin, fDeltaPtMax);
2151   
2152   AliAnalysisTaskFragmentationFunction::SetProperties(fh2InvMass, xaxis, "Invariant Mass", "Entries");
2153   AliAnalysisTaskFragmentationFunction::SetProperties(fh2DeltaPhi, xaxis, "#Delta #phi", "Entries");
2154   AliAnalysisTaskFragmentationFunction::SetProperties(fh2DeltaEta, xaxis, "#Delta #eta", "Entries");
2155   AliAnalysisTaskFragmentationFunction::SetProperties(fh2DeltaPt, xaxis, "#Delta p_{T}", "Entries");
2156
2157 }
2158
2159 //________________________________________________________________________
2160 void AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::FillDiJetQA(Double_t invMass, Double_t deltaPhi, Double_t deltaEta,Double_t deltaPt, Double_t jetBin)
2161 {
2162   // fill dijet QA
2163
2164   fh2InvMass->Fill(jetBin, invMass);
2165   fh2DeltaPhi->Fill(jetBin, deltaPhi);
2166   fh2DeltaEta->Fill(jetBin, deltaEta);
2167   fh2DeltaPt->Fill(jetBin, deltaPt);
2168 }
2169
2170 //________________________________________________________________________
2171 void AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::AddToOutput(TList* list)const
2172 {
2173   // add histos to list
2174
2175   list->Add(fh2InvMass);
2176   list->Add(fh2DeltaPhi);
2177   list->Add(fh2DeltaEta);
2178   list->Add(fh2DeltaPt);
2179 }
2180
2181 //_________________________________________________________________________________
2182 void AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::AddToOutput(TList* list) const
2183 {
2184   // add histos to list
2185
2186   list->Add(fh2CosTheta);
2187   list->Add(fh2Theta);
2188   list->Add(fh2Jt);
2189
2190   list->Add(fhnIntraJet);
2191
2192 }
2193
2194 //_________________________________________________________________________________
2195 Bool_t AliAnalysisTaskFragmentationFunction::Notify()
2196 {
2197   //
2198   // Implemented Notify() to read the cross sections
2199   // and number of trials from pyxsec.root
2200   // (taken from AliAnalysisTaskJetSpectrum2)
2201   // 
2202   TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
2203   Float_t xsection = 0;
2204   Float_t ftrials  = 1;
2205
2206   fAvgTrials = 1;
2207   if(tree){
2208     TFile *curfile = tree->GetCurrentFile();
2209     if (!curfile) {
2210       Error("Notify","No current file");
2211       return kFALSE;
2212     }
2213     if(!fh1Xsec||!fh1Trials){
2214       Printf("%s%d No Histogram fh1Xsec",(char*)__FILE__,__LINE__);
2215       return kFALSE;
2216     }
2217     AliAnalysisHelperJetTasks::PythiaInfoFromFile(curfile->GetName(),xsection,ftrials);
2218     fh1Xsec->Fill("<#sigma>",xsection);
2219     // construct a poor man average trials 
2220     Float_t nEntries = (Float_t)tree->GetTree()->GetEntries();
2221     if(ftrials>=nEntries && nEntries>0.)fAvgTrials = ftrials/nEntries;
2222   }
2223   return kTRUE;
2224 }
2225
2226
2227
2228 //__________________________________________________________________
2229 void AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects()
2230 {
2231   // create output objects
2232
2233   if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects()");
2234  
2235   // create list of tracks and jets 
2236   
2237   fTracksRec = new TList();
2238   fTracksRec->SetOwner(kFALSE);  
2239
2240   fTracksRecCuts = new TList();
2241   fTracksRecCuts->SetOwner(kFALSE);  
2242
2243   fTracksGen = new TList();
2244   fTracksGen->SetOwner(kFALSE);
2245
2246   fTracksAODMCCharged = new TList();
2247   fTracksAODMCCharged->SetOwner(kFALSE);
2248     
2249   fTracksRecQualityCuts = new TList(); 
2250   fTracksRecQualityCuts->SetOwner(kFALSE);
2251
2252   fJetsRec = new TList();
2253   fJetsRec->SetOwner(kFALSE);
2254
2255   fJetsRecCuts = new TList();
2256   fJetsRecCuts->SetOwner(kFALSE);
2257
2258   fJetsGen = new TList();
2259   fJetsGen->SetOwner(kFALSE);
2260
2261   fJetsRecEff = new TList();
2262   fJetsRecEff->SetOwner(kFALSE);
2263
2264   // fJetsKine = new TList();
2265   // fJetsKine->SetOwner(kTRUE); // delete AOD jets using mom from Kine Tree via TList::Clear()
2266
2267
2268   //
2269   // Create histograms / output container
2270   //
2271
2272   OpenFile(1);
2273   fCommonHistList = new TList();
2274   
2275   Bool_t oldStatus = TH1::AddDirectoryStatus();
2276   TH1::AddDirectory(kFALSE);
2277   
2278   
2279   // Histograms 
2280   fh1EvtSelection            = new TH1F("fh1EvtSelection", "Event Selection", 6, -0.5, 5.5);
2281   fh1VertexNContributors     = new TH1F("fh1VertexNContributors", "Vertex N contributors", 11,-.5, 10.5);
2282   fh1VertexZ                 = new TH1F("fh1VertexZ", "Vertex z distribution", 30, -15., 15.);
2283   fh1EvtMult                 = new TH1F("fh1EvtMult","Event multiplicity, track pT cut > 150 MeV/c, |#eta| < 0.9",120,0.,120.);
2284
2285   fh1Xsec                    = new TProfile("fh1Xsec","xsec from pyxsec.root",1,0,1);
2286   fh1Xsec->GetXaxis()->SetBinLabel(1,"<#sigma>");
2287   fh1Trials                  = new TH1F("fh1Trials","trials from pyxsec.root",1,0,1);
2288   fh1Trials->GetXaxis()->SetBinLabel(1,"#sum{ntrials}");
2289   fh1PtHard                  = new TH1F("fh1PtHard","PYTHIA Pt hard;p_{T,hard}",350,-.5,349.5);
2290   fh1PtHardTrials            = new TH1F("fh1PtHardTrials","PYTHIA Pt hard weight with trials;p_{T,hard}",350,-.5,349.5);
2291
2292   fh1nRecJetsCuts            = new TH1F("fh1nRecJetsCuts","reconstructed jets per event",10,-0.5,9.5);
2293   fh1nGenJets                = new TH1F("fh1nGenJets","generated jets per event",10,-0.5,9.5);
2294   fh1nRecEffJets             = new TH1F("fh1nRecEffJets","reconstruction effiency: jets per event",10,-0.5,9.5);
2295
2296   fh1OutLeadingMult          = new TH1F("fh1OutLeadingMult","Background multiplicity - Cone outside leading jet",120,0,120.);
2297   fh1PerpMult                = new TH1F("fh1PerpMult","Background multiplicity - Cone perpendicular to leading jet axis",120,0.,120.);
2298   fh1Out2JetsMult            = new TH1F("fh1Out2JetsMult","Background multiplicity - Cone outside 2 jets",120,0.,120.);
2299   fh1Out3JetsMult            = new TH1F("fh1Out3JetsMult","Background multiplicity - Cone outside 3 jets",120,0.,120.);
2300
2301   // 5D single track eff histo: phi:eta:gen pt:rec pt:isReconstructed -  use binning as for track QA
2302   Int_t   nBinsSingleTrackEffHisto[5]      = { fQATrackNBinsPhi, fQATrackNBinsEta, fQATrackNBinsPt, fQATrackNBinsPt, 2 };
2303   Double_t binMinSingleTrackEffHisto[5]    = { fQATrackPhiMin, fQATrackEtaMin, fQATrackPtMin, fQATrackPtMin, 0 };
2304   Double_t binMaxSingleTrackEffHisto[5]    = { fQATrackPhiMax, fQATrackEtaMax, fQATrackPtMax, fQATrackPtMax, 2 };
2305   const char* labelsSingleTrackEffHisto[5] = {"#phi","#eta","gen p_{T} [GeV/c]", "rec p_{T} [GeV/c]", "isRec"};
2306
2307   fhnSingleTrackRecEffHisto = new THnSparseF("fhnSingleTrackRecEffHisto","generated tracks phi:eta:pt:isReconstructed",5,
2308                                              nBinsSingleTrackEffHisto,binMinSingleTrackEffHisto,binMaxSingleTrackEffHisto);
2309   
2310   AliAnalysisTaskFragmentationFunction::SetProperties(fhnSingleTrackRecEffHisto,5,labelsSingleTrackEffHisto); 
2311   
2312   
2313   // 8D jets track eff histo: jet phi:eta:gen pt:rec pt:track pt:z:xi:isReconstructed - use binning as for track/jet QA
2314   Int_t    nBinsJetTrackEffHisto[8]     = { fQAJetNBinsPhi, fQAJetNBinsEta, fFFNBinsJetPt, fFFNBinsJetPt, fFFNBinsPt, fFFNBinsZ, fFFNBinsXi, 2};
2315   Double_t binMinJetTrackEffHisto[8]    = { fQAJetPhiMin, fQAJetEtaMin, fFFJetPtMin , fFFJetPtMin , fFFPtMin, fFFZMin ,  fFFXiMin, 0 };
2316   Double_t binMaxJetTrackEffHisto[8]    = { fQAJetPhiMax, fQAJetEtaMax, fFFJetPtMax , fFFJetPtMax , fFFPtMax, fFFZMax ,  fFFXiMax, 2 };
2317   const char* labelsJetTrackEffHisto[8] = {"jet #phi","jet #eta","jet gen p_{T} [GeV/c]","jet rec p_{T} [GeV/c]","track p_{T} [GeV/c]","z","#xi","isRec"};
2318
2319   fhnJetTrackRecEffHisto       = new THnSparseF("fhnJetTrackRecEffHisto","generated tracks - jet phi:jet eta:jet gen pt:jet rec pt:track pt:z:xi:isReconstructed",8,
2320                                                 nBinsJetTrackEffHisto,binMinJetTrackEffHisto,binMaxJetTrackEffHisto);
2321
2322   AliAnalysisTaskFragmentationFunction::SetProperties(fhnJetTrackRecEffHisto,8,labelsJetTrackEffHisto);
2323
2324
2325   fQATrackHistosRec          = new AliFragFuncQATrackHistos("Rec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax, 
2326                                                             fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2327                                                             fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax, 
2328                                                             fQATrackHighPtThreshold);
2329   fQATrackHistosRecCuts      = new AliFragFuncQATrackHistos("RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax, 
2330                                                             fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2331                                                             fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax, 
2332                                                             fQATrackHighPtThreshold);
2333   fQATrackHistosGen          = new AliFragFuncQATrackHistos("Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax, 
2334                                                             fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2335                                                             fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax, 
2336                                                             fQATrackHighPtThreshold);
2337   
2338
2339   fQAJetHistosRec            = new AliFragFuncQAJetHistos("Rec", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax, 
2340                                                           fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
2341                                                           fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2342   fQAJetHistosRecCuts        = new AliFragFuncQAJetHistos("RecCuts", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax, 
2343                                                           fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
2344                                                           fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2345   fQAJetHistosRecCutsLeading = new AliFragFuncQAJetHistos("RecCutsLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax, 
2346                                                           fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
2347                                                           fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2348   fQAJetHistosGen            = new AliFragFuncQAJetHistos("Gen", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax, 
2349                                                           fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
2350                                                           fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2351   fQAJetHistosGenLeading     = new AliFragFuncQAJetHistos("GenLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax, 
2352                                                           fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
2353                                                           fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);  
2354   fQAJetHistosRecEffLeading  = new AliFragFuncQAJetHistos("RecEffLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax, 
2355                                                           fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2356
2357
2358   fFFHistosRecCuts           = new AliFragFuncHistos("RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2359                                                      fFFNBinsPt, fFFPtMin, fFFPtMax, 
2360                                                      fFFNBinsXi, fFFXiMin, fFFXiMax,  
2361                                                      fFFNBinsZ , fFFZMin , fFFZMax);
2362   fFFHistosRecLeading        = new AliFragFuncHistos("RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2363                                                      fFFNBinsPt, fFFPtMin, fFFPtMax, 
2364                                                      fFFNBinsXi, fFFXiMin, fFFXiMax,  
2365                                                      fFFNBinsZ , fFFZMin , fFFZMax);
2366   fFFHistosRecLeadingTrack   = new AliFragFuncHistos("RecLeadingTrack", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2367                                                      fFFNBinsPt, fFFPtMin, fFFPtMax, 
2368                                                      fFFNBinsXi, fFFXiMin, fFFXiMax,  
2369                                                      fFFNBinsZ , fFFZMin , fFFZMax);
2370   fFFHistosGen               = new AliFragFuncHistos("Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2371                                                      fFFNBinsPt, fFFPtMin, fFFPtMax, 
2372                                                      fFFNBinsXi, fFFXiMin, fFFXiMax,  
2373                                                      fFFNBinsZ , fFFZMin , fFFZMax);
2374   fFFHistosGenLeading        = new AliFragFuncHistos("GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2375                                                      fFFNBinsPt, fFFPtMin, fFFPtMax, 
2376                                                      fFFNBinsXi, fFFXiMin, fFFXiMax,  
2377                                                      fFFNBinsZ , fFFZMin , fFFZMax);
2378   fFFHistosGenLeadingTrack   = new AliFragFuncHistos("GenLeadingTrack", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2379                                                      fFFNBinsPt, fFFPtMin, fFFPtMax, 
2380                                                      fFFNBinsXi, fFFXiMin, fFFXiMax,  
2381                                                      fFFNBinsZ , fFFZMin , fFFZMax);
2382
2383
2384   fIJHistosRecCuts           = new AliFragFuncIntraJetHistos("RecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2385                                                              fIJNBinsPt, fIJPtMin, fIJPtMax, 
2386                                                              fIJNBinsZ, fIJZMin, fIJZMax,  
2387                                                              fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2388                                                              fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2389                                                              fIJNBinsJt , fIJJtMin , fIJJtMax);
2390   fIJHistosRecLeading        = new AliFragFuncIntraJetHistos("RecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2391                                                              fIJNBinsPt, fIJPtMin, fIJPtMax, 
2392                                                              fIJNBinsZ, fIJZMin, fIJZMax,  
2393                                                              fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2394                                                              fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2395                                                              fIJNBinsJt , fIJJtMin , fIJJtMax);
2396   fIJHistosRecLeadingTrack   = new AliFragFuncIntraJetHistos("RecLeadingTrack", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2397                                                              fIJNBinsPt, fIJPtMin, fIJPtMax, 
2398                                                              fIJNBinsZ, fIJZMin, fIJZMax,  
2399                                                              fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2400                                                              fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2401                                                              fIJNBinsJt , fIJJtMin , fIJJtMax);
2402   fIJHistosGen               = new AliFragFuncIntraJetHistos("Gen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2403                                                              fIJNBinsPt, fIJPtMin, fIJPtMax, 
2404                                                              fIJNBinsZ, fIJZMin, fIJZMax,  
2405                                                              fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2406                                                              fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2407                                                              fIJNBinsJt , fIJJtMin , fIJJtMax);
2408   fIJHistosGenLeading        = new AliFragFuncIntraJetHistos("GenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2409                                                              fIJNBinsPt, fIJPtMin, fIJPtMax, 
2410                                                              fIJNBinsZ, fIJZMin, fIJZMax,  
2411                                                              fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2412                                                              fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2413                                                              fIJNBinsJt , fIJJtMin , fIJJtMax);
2414   fIJHistosGenLeadingTrack   = new AliFragFuncIntraJetHistos("GenLeadingTrack", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2415                                                              fIJNBinsPt, fIJPtMin, fIJPtMax, 
2416                                                              fIJNBinsZ, fIJZMin, fIJZMax,  
2417                                                              fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2418                                                              fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2419                                                              fIJNBinsJt , fIJJtMin , fIJJtMax);
2420
2421
2422   fFFDiJetHistosRecCuts         = new AliFragFuncDiJetHistos("RecCuts", fDiJetKindBins, 
2423                                                              fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2424                                                              fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2425                                                              fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax, 
2426                                                              fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax, 
2427                                                              fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2428   fFFDiJetHistosRecLeading      = new AliFragFuncDiJetHistos("RecLeading", fDiJetKindBins, 
2429                                                              fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2430                                                              fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax, 
2431                                                              fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax, 
2432                                                              fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax, 
2433                                                              fDiJetNBinsZ, fDiJetZMin, fDiJetZMax); 
2434   fFFDiJetHistosRecLeadingTrack = new AliFragFuncDiJetHistos("RecLeadingTrack", fDiJetKindBins, 
2435                                                              fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2436                                                              fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax, 
2437                                                              fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax, 
2438                                                              fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax, 
2439                                                              fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2440
2441   fFFDiJetHistosGen             = new AliFragFuncDiJetHistos("Gen", fDiJetKindBins, 
2442                                                              fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2443                                                              fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2444                                                              fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax, 
2445                                                              fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2446                                                              fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2447   fFFDiJetHistosGenLeading      = new AliFragFuncDiJetHistos("GenLeading", fDiJetKindBins, 
2448                                                              fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2449                                                              fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2450                                                              fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2451                                                              fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2452                                                              fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2453   fFFDiJetHistosGenLeadingTrack = new AliFragFuncDiJetHistos("GenLeadingTrack", fDiJetKindBins, 
2454                                                              fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2455                                                              fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax, 
2456                                                              fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax, 
2457                                                              fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax, 
2458                                                              fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2459
2460   fQADiJetHistosRecCuts = new AliFragFuncQADiJetHistos("RecCuts", fDiJetKindBins, 
2461                                                        fQADiJetNBinsInvMass, fQADiJetInvMassMin, fQADiJetInvMassMax,
2462                                                        fQADiJetNBinsJetPt, fQADiJetJetPtMin, fQADiJetJetPtMax,
2463                                                        fQADiJetNBinsDeltaPhi, fQADiJetDeltaPhiMin, fQADiJetDeltaPhiMax , 
2464                                                        fQADiJetNBinsDeltaEta, fQADiJetDeltaEtaMin, fQADiJetDeltaEtaMax , 
2465                                                        fQADiJetNBinsDeltaPt, fQADiJetDeltaPtMin, fQADiJetDeltaPtMax);
2466   fQADiJetHistosGen     = new AliFragFuncQADiJetHistos("Gen", fDiJetKindBins, 
2467                                                        fQADiJetNBinsInvMass, fQADiJetInvMassMin,  fQADiJetInvMassMax, 
2468                                                        fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2469                                                        fQADiJetNBinsDeltaPhi, fQADiJetDeltaPhiMin, fQADiJetDeltaPhiMax,
2470                                                        fQADiJetNBinsDeltaEta, fQADiJetDeltaEtaMin, fQADiJetDeltaEtaMax,
2471                                                        fQADiJetNBinsDeltaPt, fQADiJetDeltaPtMin, fQADiJetDeltaPtMax);
2472
2473   // Background
2474   if(fBckgMode){
2475     fQABckgNoJetTrackHistosRec          = new AliFragFuncQATrackHistos("BckgNoJetRec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax, 
2476                                                                        fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2477                                                                        fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax, 
2478                                                                        fQATrackHighPtThreshold);
2479     fQABckgNoJetTrackHistosRecCuts      = new AliFragFuncQATrackHistos("BckgNoJetRecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax, 
2480                                                                        fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2481                                                                        fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax, 
2482                                                                        fQATrackHighPtThreshold);
2483     fQABckgNoJetTrackHistosGen          = new AliFragFuncQATrackHistos("BckgNoJetGen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax, 
2484                                                                        fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2485                                                                        fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax, 
2486                                                                        fQATrackHighPtThreshold);
2487     
2488     fQABckgLeadingTrackHistosRec          = new AliFragFuncQATrackHistos("BckgLeadingRec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax, 
2489                                                                          fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2490                                                                          fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax, 
2491                                                                          fQATrackHighPtThreshold);
2492     fQABckgLeadingTrackHistosRecCuts      = new AliFragFuncQATrackHistos("BckgLeadingRecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax, 
2493                                                                          fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2494                                                                          fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax, 
2495                                                                          fQATrackHighPtThreshold);
2496     fQABckgLeadingTrackHistosGen          = new AliFragFuncQATrackHistos("BckgLeadingGen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax, 
2497                                                                          fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2498                                                                          fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax, 
2499                                                                          fQATrackHighPtThreshold);
2500     
2501     fQABckg2JetsTrackHistosRec          = new AliFragFuncQATrackHistos("Bckg2JetsRec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax, 
2502                                                                        fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2503                                                                        fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax, 
2504                                                                        fQATrackHighPtThreshold);
2505     fQABckg2JetsTrackHistosRecCuts      = new AliFragFuncQATrackHistos("Bckg2JetsRecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax, 
2506                                                                        fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2507                                                                        fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax, 
2508                                                             fQATrackHighPtThreshold);
2509     fQABckg2JetsTrackHistosGen          = new AliFragFuncQATrackHistos("Bckg2JetsGen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax, 
2510                                                                        fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2511                                                                        fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax, 
2512                                                                        fQATrackHighPtThreshold);
2513     
2514     fQABckg3JetsTrackHistosRec          = new AliFragFuncQATrackHistos("Bckg3JetsRec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax, 
2515                                                                        fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2516                                                                        fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax, 
2517                                                                        fQATrackHighPtThreshold);
2518     fQABckg3JetsTrackHistosRecCuts      = new AliFragFuncQATrackHistos("Bckg3JetsRecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax, 
2519                                                             fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2520                                                                        fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax, 
2521                                                                        fQATrackHighPtThreshold);
2522     fQABckg3JetsTrackHistosGen          = new AliFragFuncQATrackHistos("Bckg3JetsGen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax, 
2523                                                                        fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2524                                                                        fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax, 
2525                                                                        fQATrackHighPtThreshold);
2526     
2527     
2528     fQABckgPerpTrackHistosRec          = new AliFragFuncQATrackHistos("BckgPerpRec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax, 
2529                                                                       fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2530                                                             fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax, 
2531                                                                       fQATrackHighPtThreshold);
2532     fQABckgPerpTrackHistosRecCuts      = new AliFragFuncQATrackHistos("BckgPerpRecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax, 
2533                                                                       fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2534                                                                       fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax, 
2535                                                                       fQATrackHighPtThreshold);
2536     fQABckgPerpTrackHistosGen          = new AliFragFuncQATrackHistos("BckgPerpGen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax, 
2537                                                                       fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2538                                                                       fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax, 
2539                                                                       fQATrackHighPtThreshold);
2540
2541     // event with no jets
2542     fFFBckgNoJetHistosRecCuts    = new AliFragFuncHistos("NoJetBckgRecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2543                                                          fFFNBinsPt, fFFPtMin, fFFPtMax, 
2544                                                          fFFNBinsXi, fFFXiMin, fFFXiMax,  
2545                                                          fFFNBinsZ , fFFZMin , fFFZMax);
2546     fFFBckgNoJetHistosRecLeading = new AliFragFuncHistos("NoJetBckgRecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2547                                                          fFFNBinsPt, fFFPtMin, fFFPtMax, 
2548                                                          fFFNBinsXi, fFFXiMin, fFFXiMax,  
2549                                                          fFFNBinsZ , fFFZMin , fFFZMax);
2550     fFFBckgNoJetHistosGen        = new AliFragFuncHistos("NoJetBckgGen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2551                                                          fFFNBinsPt, fFFPtMin, fFFPtMax, 
2552                                                          fFFNBinsXi, fFFXiMin, fFFXiMax,  
2553                                                          fFFNBinsZ , fFFZMin , fFFZMax);
2554     fFFBckgNoJetHistosGenLeading = new AliFragFuncHistos("NoJetBckgGenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2555                                                          fFFNBinsPt, fFFPtMin, fFFPtMax, 
2556                                                          fFFNBinsXi, fFFXiMin, fFFXiMax,  
2557                                                          fFFNBinsZ , fFFZMin , fFFZMax);
2558     
2559     fIJBckgNoJetHistosRecCuts                = new AliFragFuncIntraJetHistos("NoJetBckgRecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2560                                                                              fIJNBinsPt, fIJPtMin, fIJPtMax, 
2561                                                                              fIJNBinsZ, fIJZMin, fIJZMax,  
2562                                                                              fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2563                                                                              fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2564                                                                              fIJNBinsJt , fIJJtMin , fIJJtMax);
2565     fIJBckgNoJetHistosRecLeading        = new AliFragFuncIntraJetHistos("NoJetBckgRecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2566                                                                         fIJNBinsPt, fIJPtMin, fIJPtMax, 
2567                                                                         fIJNBinsZ, fIJZMin, fIJZMax,  
2568                                                                         fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2569                                                                         fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2570                                                                         fIJNBinsJt , fIJJtMin , fIJJtMax);
2571     fIJBckgNoJetHistosGen            = new AliFragFuncIntraJetHistos("NoJetBckgGen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2572                                                                      fIJNBinsPt, fIJPtMin, fIJPtMax, 
2573                                                                      fIJNBinsZ, fIJZMin, fIJZMax,  
2574                                                                      fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2575                                                                      fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2576                                                                      fIJNBinsJt , fIJJtMin , fIJJtMax);
2577     fIJBckgNoJetHistosGenLeading        = new AliFragFuncIntraJetHistos("NoJetBckgGenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2578                                                                         fIJNBinsPt, fIJPtMin, fIJPtMax, 
2579                                                                         fIJNBinsZ, fIJZMin, fIJZMax,  
2580                                                                         fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2581                                                                         fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2582                                                                         fIJNBinsJt , fIJJtMin , fIJJtMax);
2583
2584     
2585     // outside leading jet or 2 jets or more
2586     fFFBckgHistosRecCuts    = new AliFragFuncHistos("BckgRecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2587                                                     fFFNBinsPt, fFFPtMin, fFFPtMax, 
2588                                                     fFFNBinsXi, fFFXiMin, fFFXiMax,  
2589                                                     fFFNBinsZ , fFFZMin , fFFZMax);
2590     fFFBckgHistosRecLeading = new AliFragFuncHistos("BckgRecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2591                                                     fFFNBinsPt, fFFPtMin, fFFPtMax, 
2592                                                     fFFNBinsXi, fFFXiMin, fFFXiMax,  
2593                                                     fFFNBinsZ , fFFZMin , fFFZMax);
2594     fFFBckgHistosGen     = new AliFragFuncHistos("BckgGen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2595                                                  fFFNBinsPt, fFFPtMin, fFFPtMax, 
2596                                                  fFFNBinsXi, fFFXiMin, fFFXiMax,  
2597                                                  fFFNBinsZ , fFFZMin , fFFZMax);
2598     fFFBckgHistosGenLeading = new AliFragFuncHistos("BckgGenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2599                                                     fFFNBinsPt, fFFPtMin, fFFPtMax, 
2600                                                     fFFNBinsXi, fFFXiMin, fFFXiMax,  
2601                                                     fFFNBinsZ , fFFZMin , fFFZMax);
2602     
2603     // outside leading jet
2604     fFFBckgLeadingHistosRecCuts    = new AliFragFuncHistos("BckgLeadingRecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2605                                                            fFFNBinsPt, fFFPtMin, fFFPtMax, 
2606                                                            fFFNBinsXi, fFFXiMin, fFFXiMax,  
2607                                                            fFFNBinsZ , fFFZMin , fFFZMax);
2608     fFFBckgLeadingHistosRecLeading = new AliFragFuncHistos("BckgLeadingRecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2609                                                            fFFNBinsPt, fFFPtMin, fFFPtMax, 
2610                                                            fFFNBinsXi, fFFXiMin, fFFXiMax,  
2611                                                            fFFNBinsZ , fFFZMin , fFFZMax);
2612     fFFBckgLeadingHistosGen      = new AliFragFuncHistos("BckgLeadingGen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2613                                                          fFFNBinsPt, fFFPtMin, fFFPtMax, 
2614                                                          fFFNBinsXi, fFFXiMin, fFFXiMax,  
2615                                                          fFFNBinsZ , fFFZMin , fFFZMax);
2616     fFFBckgLeadingHistosGenLeading = new AliFragFuncHistos("BckgLeadingGenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2617                                                            fFFNBinsPt, fFFPtMin, fFFPtMax, 
2618                                                            fFFNBinsXi, fFFXiMin, fFFXiMax,  
2619                                                            fFFNBinsZ , fFFZMin , fFFZMax);
2620     
2621     // outside leading jet or 2 jets or more
2622     fIJBckgHistosRecCuts             = new AliFragFuncIntraJetHistos("BckgRecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2623                                                                      fIJNBinsPt, fIJPtMin, fIJPtMax, 
2624                                                                      fIJNBinsZ, fIJZMin, fIJZMax,  
2625                                                                      fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2626                                                                      fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2627                                                                      fIJNBinsJt , fIJJtMin , fIJJtMax);
2628     fIJBckgHistosRecLeading        = new AliFragFuncIntraJetHistos("BckgRecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2629                                                                    fIJNBinsPt, fIJPtMin, fIJPtMax, 
2630                                                                    fIJNBinsZ, fIJZMin, fIJZMax,  
2631                                                                    fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2632                                                                    fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2633                                                                    fIJNBinsJt , fIJJtMin , fIJJtMax);
2634     fIJBckgHistosGen         = new AliFragFuncIntraJetHistos("BckgGen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2635                                                              fIJNBinsPt, fIJPtMin, fIJPtMax, 
2636                                                              fIJNBinsZ, fIJZMin, fIJZMax,  
2637                                                              fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2638                                                              fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2639                                                              fIJNBinsJt , fIJJtMin , fIJJtMax);
2640     fIJBckgHistosGenLeading        = new AliFragFuncIntraJetHistos("BckgGenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2641                                                                    fIJNBinsPt, fIJPtMin, fIJPtMax, 
2642                                                                    fIJNBinsZ, fIJZMin, fIJZMax,  
2643                                                                    fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2644                                                                    fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2645                                                                    fIJNBinsJt , fIJJtMin , fIJJtMax);
2646     
2647     // outside leading jet
2648     fIJBckgLeadingHistosRecCuts              = new AliFragFuncIntraJetHistos("BckgLeadingRecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2649                                                                              fIJNBinsPt, fIJPtMin, fIJPtMax, 
2650                                                                              fIJNBinsZ, fIJZMin, fIJZMax,  
2651                                                                              fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2652                                                                              fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2653                                                                              fIJNBinsJt , fIJJtMin , fIJJtMax);
2654     fIJBckgLeadingHistosRecLeading        = new AliFragFuncIntraJetHistos("BckgLeadingRecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2655                                                                           fIJNBinsPt, fIJPtMin, fIJPtMax, 
2656                                                                           fIJNBinsZ, fIJZMin, fIJZMax,  
2657                                                                           fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2658                                                                           fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2659                                                                           fIJNBinsJt , fIJJtMin , fIJJtMax);
2660     fIJBckgLeadingHistosGen          = new AliFragFuncIntraJetHistos("BckgLeadingGen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2661                                                                      fIJNBinsPt, fIJPtMin, fIJPtMax, 
2662                                                                      fIJNBinsZ, fIJZMin, fIJZMax,  
2663                                                                      fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2664                                                                      fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2665                                                                      fIJNBinsJt , fIJJtMin , fIJJtMax);
2666     fIJBckgLeadingHistosGenLeading        = new AliFragFuncIntraJetHistos("BckgLeadingGenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2667                                                                           fIJNBinsPt, fIJPtMin, fIJPtMax, 
2668                                                                           fIJNBinsZ, fIJZMin, fIJZMax,  
2669                                                                           fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2670                                                                           fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2671                                                                           fIJNBinsJt , fIJJtMin , fIJJtMax);
2672     
2673     // outside 2 jets
2674     fFFBckg2JetsHistosRecCuts    = new AliFragFuncHistos("Bckg2JetsRecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2675                                                          fFFNBinsPt, fFFPtMin, fFFPtMax, 
2676                                                          fFFNBinsXi, fFFXiMin, fFFXiMax,  
2677                                                          fFFNBinsZ , fFFZMin , fFFZMax);
2678     fFFBckg2JetsHistosRecLeading = new AliFragFuncHistos("Bckg2JetsRecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2679                                                          fFFNBinsPt, fFFPtMin, fFFPtMax, 
2680                                                          fFFNBinsXi, fFFXiMin, fFFXiMax,  
2681                                                          fFFNBinsZ , fFFZMin , fFFZMax);
2682     fFFBckg2JetsHistosGen        = new AliFragFuncHistos("Bckg2JetsGen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2683                                                          fFFNBinsPt, fFFPtMin, fFFPtMax, 
2684                                                          fFFNBinsXi, fFFXiMin, fFFXiMax,  
2685                                                          fFFNBinsZ , fFFZMin , fFFZMax);
2686     fFFBckg2JetsHistosGenLeading = new AliFragFuncHistos("Bckg2JetsGenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2687                                                          fFFNBinsPt, fFFPtMin, fFFPtMax, 
2688                                                          fFFNBinsXi, fFFXiMin, fFFXiMax,  
2689                                                          fFFNBinsZ , fFFZMin , fFFZMax);
2690     
2691     // outside 2 jets
2692     fIJBckg2JetsHistosRecCuts                = new AliFragFuncIntraJetHistos("Bckg2JetsRecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2693                                                                              fIJNBinsPt, fIJPtMin, fIJPtMax, 
2694                                                                              fIJNBinsZ, fIJZMin, fIJZMax,  
2695                                                                              fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2696                                                                              fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2697                                                                              fIJNBinsJt , fIJJtMin , fIJJtMax);
2698     fIJBckg2JetsHistosRecLeading        = new AliFragFuncIntraJetHistos("Bckg2JetsRecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2699                                                                         fIJNBinsPt, fIJPtMin, fIJPtMax, 
2700                                                                         fIJNBinsZ, fIJZMin, fIJZMax,  
2701                                                                         fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2702                                                                         fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2703                                                                         fIJNBinsJt , fIJJtMin , fIJJtMax);
2704     fIJBckg2JetsHistosGen            = new AliFragFuncIntraJetHistos("Bckg2JetsGen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2705                                                                      fIJNBinsPt, fIJPtMin, fIJPtMax, 
2706                                                                      fIJNBinsZ, fIJZMin, fIJZMax,  
2707                                                                      fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2708                                                                      fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2709                                                                      fIJNBinsJt , fIJJtMin , fIJJtMax);
2710     fIJBckg2JetsHistosGenLeading        = new AliFragFuncIntraJetHistos("Bckg2JetsGenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2711                                                                         fIJNBinsPt, fIJPtMin, fIJPtMax, 
2712                                                                         fIJNBinsZ, fIJZMin, fIJZMax,  
2713                                                                         fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2714                                                                         fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2715                                                                         fIJNBinsJt , fIJJtMin , fIJJtMax);
2716     
2717     // outside 3 jets
2718     fFFBckg3JetsHistosRecCuts    = new AliFragFuncHistos("Bckg3JetsRecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2719                                                          fFFNBinsPt, fFFPtMin, fFFPtMax, 
2720                                                          fFFNBinsXi, fFFXiMin, fFFXiMax,  
2721                                                          fFFNBinsZ , fFFZMin , fFFZMax);
2722     fFFBckg3JetsHistosRecLeading = new AliFragFuncHistos("Bckg3JetsRecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2723                                                          fFFNBinsPt, fFFPtMin, fFFPtMax, 
2724                                                          fFFNBinsXi, fFFXiMin, fFFXiMax,  
2725                                                          fFFNBinsZ , fFFZMin , fFFZMax);
2726     fFFBckg3JetsHistosGen        = new AliFragFuncHistos("Bckg3JetsGen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2727                                                          fFFNBinsPt, fFFPtMin, fFFPtMax, 
2728                                                          fFFNBinsXi, fFFXiMin, fFFXiMax,  
2729                                                          fFFNBinsZ , fFFZMin , fFFZMax);
2730     fFFBckg3JetsHistosGenLeading = new AliFragFuncHistos("Bckg3JetsGenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2731                                                          fFFNBinsPt, fFFPtMin, fFFPtMax, 
2732                                                          fFFNBinsXi, fFFXiMin, fFFXiMax,  
2733                                                          fFFNBinsZ , fFFZMin , fFFZMax);
2734
2735     // outside 3 jets
2736     fIJBckg3JetsHistosRecCuts                = new AliFragFuncIntraJetHistos("Bckg3JetsRecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2737                                                                              fIJNBinsPt, fIJPtMin, fIJPtMax, 
2738                                                                              fIJNBinsZ, fIJZMin, fIJZMax,  
2739                                                                              fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2740                                                                              fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2741                                                                              fIJNBinsJt , fIJJtMin , fIJJtMax);
2742     fIJBckg3JetsHistosRecLeading        = new AliFragFuncIntraJetHistos("Bckg3JetsRecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2743                                                                         fIJNBinsPt, fIJPtMin, fIJPtMax, 
2744                                                                         fIJNBinsZ, fIJZMin, fIJZMax,  
2745                                                                         fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2746                                                                         fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2747                                                                         fIJNBinsJt , fIJJtMin , fIJJtMax);
2748     fIJBckg3JetsHistosGen            = new AliFragFuncIntraJetHistos("Bckg3JetsGen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2749                                                                      fIJNBinsPt, fIJPtMin, fIJPtMax, 
2750                                                                      fIJNBinsZ, fIJZMin, fIJZMax,  
2751                                                                      fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2752                                                                      fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2753                                                                      fIJNBinsJt , fIJJtMin , fIJJtMax);
2754     fIJBckg3JetsHistosGenLeading        = new AliFragFuncIntraJetHistos("Bckg3JetsGenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2755                                                                         fIJNBinsPt, fIJPtMin, fIJPtMax, 
2756                                                                         fIJNBinsZ, fIJZMin, fIJZMax,  
2757                                                                         fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2758                                                                         fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2759                                                                         fIJNBinsJt , fIJJtMin , fIJJtMax);
2760     
2761     
2762     // in the transverse jet axis direction
2763     fFFBckgPerpHistosRecCuts    = new AliFragFuncHistos("BckgPerpRecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2764                                                         fFFNBinsPt, fFFPtMin, fFFPtMax, 
2765                                                         fFFNBinsXi, fFFXiMin, fFFXiMax,  
2766                                                         fFFNBinsZ , fFFZMin , fFFZMax);
2767     fFFBckgPerpHistosRecLeading = new AliFragFuncHistos("BckgPerpRecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2768                                                         fFFNBinsPt, fFFPtMin, fFFPtMax, 
2769                                                         fFFNBinsXi, fFFXiMin, fFFXiMax,  
2770                                                         fFFNBinsZ , fFFZMin , fFFZMax);
2771     fFFBckgPerpHistosGen         = new AliFragFuncHistos("BckgPerpGen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2772                                                          fFFNBinsPt, fFFPtMin, fFFPtMax, 
2773                                                          fFFNBinsXi, fFFXiMin, fFFXiMax,  
2774                                                          fFFNBinsZ , fFFZMin , fFFZMax);
2775     fFFBckgPerpHistosGenLeading = new AliFragFuncHistos("BckgPerpGenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2776                                                         fFFNBinsPt, fFFPtMin, fFFPtMax, 
2777                                                         fFFNBinsXi, fFFXiMin, fFFXiMax,  
2778                                                         fFFNBinsZ , fFFZMin , fFFZMax);
2779
2780     // In the transverse jet axis direction 
2781     fIJBckgPerpHistosRecCuts         = new AliFragFuncIntraJetHistos("BckgPerpRecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2782                                                                      fIJNBinsPt, fIJPtMin, fIJPtMax, 
2783                                                                      fIJNBinsZ, fIJZMin, fIJZMax,  
2784                                                                      fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2785                                                                      fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2786                                                                      fIJNBinsJt , fIJJtMin , fIJJtMax);
2787     fIJBckgPerpHistosRecLeading        = new AliFragFuncIntraJetHistos("BckgPerpRecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2788                                                                        fIJNBinsPt, fIJPtMin, fIJPtMax, 
2789                                                                        fIJNBinsZ, fIJZMin, fIJZMax,  
2790                                                                        fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2791                                                                        fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2792                                                                        fIJNBinsJt , fIJJtMin , fIJJtMax);
2793     fIJBckgPerpHistosGen             = new AliFragFuncIntraJetHistos("BckgPerpGen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2794                                                                      fIJNBinsPt, fIJPtMin, fIJPtMax, 
2795                                                                      fIJNBinsZ, fIJZMin, fIJZMax,  
2796                                                                      fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2797                                                                      fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2798                                                                      fIJNBinsJt , fIJJtMin , fIJJtMax);
2799     fIJBckgPerpHistosGenLeading        = new AliFragFuncIntraJetHistos("BckgPerpGenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2800                                                                        fIJNBinsPt, fIJPtMin, fIJPtMax, 
2801                                                                        fIJNBinsZ, fIJZMin, fIJZMax,  
2802                                                                        fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2803                                                                        fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2804                                                                        fIJNBinsJt , fIJJtMin , fIJJtMax);
2805     
2806     
2807     // Statistical study
2808     // outside leading jet or 2 jets or more
2809     fFFBckgHistosStatRecCuts    = new AliFragFuncHistos("StatBckgRecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2810                                                         fFFNBinsPt, fFFPtMin, fFFPtMax, 
2811                                                         fFFNBinsXi, fFFXiMin, fFFXiMax,  
2812                                                         fFFNBinsZ , fFFZMin , fFFZMax);
2813     fFFBckgHistosStatRecLeading = new AliFragFuncHistos("StatBckgRecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2814                                                         fFFNBinsPt, fFFPtMin, fFFPtMax, 
2815                                                         fFFNBinsXi, fFFXiMin, fFFXiMax,  
2816                                                         fFFNBinsZ , fFFZMin , fFFZMax);
2817     fFFBckgHistosStatGen         = new AliFragFuncHistos("StatBckgGen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2818                                                          fFFNBinsPt, fFFPtMin, fFFPtMax, 
2819                                                          fFFNBinsXi, fFFXiMin, fFFXiMax,  
2820                                                          fFFNBinsZ , fFFZMin , fFFZMax);
2821     fFFBckgHistosStatGenLeading = new AliFragFuncHistos("StatBckgGenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2822                                                         fFFNBinsPt, fFFPtMin, fFFPtMax, 
2823                                                         fFFNBinsXi, fFFXiMin, fFFXiMax,  
2824                                                         fFFNBinsZ , fFFZMin , fFFZMax);
2825   
2826     // outside leading jet
2827     fFFBckgLeadingHistosStatRecCuts    = new AliFragFuncHistos("StatBckgLeadingRecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2828                                                                fFFNBinsPt, fFFPtMin, fFFPtMax, 
2829                                                                fFFNBinsXi, fFFXiMin, fFFXiMax,  
2830                                                                fFFNBinsZ , fFFZMin , fFFZMax);
2831     fFFBckgLeadingHistosStatRecLeading = new AliFragFuncHistos("StatBckgLeadingRecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2832                                                                fFFNBinsPt, fFFPtMin, fFFPtMax, 
2833                                                                fFFNBinsXi, fFFXiMin, fFFXiMax,  
2834                                                                fFFNBinsZ , fFFZMin , fFFZMax);
2835     fFFBckgLeadingHistosStatGen          = new AliFragFuncHistos("StatBckgLeadingGen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2836                                                                  fFFNBinsPt, fFFPtMin, fFFPtMax, 
2837                                                                  fFFNBinsXi, fFFXiMin, fFFXiMax,  
2838                                                                  fFFNBinsZ , fFFZMin , fFFZMax);
2839     fFFBckgLeadingHistosStatGenLeading = new AliFragFuncHistos("StatBckgLeadingGenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2840                                                                fFFNBinsPt, fFFPtMin, fFFPtMax, 
2841                                                                fFFNBinsXi, fFFXiMin, fFFXiMax,  
2842                                                                fFFNBinsZ , fFFZMin , fFFZMax);
2843     
2844     // outside leading jet or 2 jets or more
2845     fIJBckgHistosStatRecCuts         = new AliFragFuncIntraJetHistos("StatBckgRecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2846                                                                      fIJNBinsPt, fIJPtMin, fIJPtMax, 
2847                                                                      fIJNBinsZ, fIJZMin, fIJZMax,  
2848                                                                      fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2849                                                                      fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2850                                                                      fIJNBinsJt , fIJJtMin , fIJJtMax);
2851     fIJBckgHistosStatRecLeading        = new AliFragFuncIntraJetHistos("StatBckgRecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2852                                                                        fIJNBinsPt, fIJPtMin, fIJPtMax, 
2853                                                                        fIJNBinsZ, fIJZMin, fIJZMax,  
2854                                                                        fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2855                                                                        fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2856                                                                        fIJNBinsJt , fIJJtMin , fIJJtMax);
2857     fIJBckgHistosStatGen             = new AliFragFuncIntraJetHistos("StatBckgGen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2858                                                                      fIJNBinsPt, fIJPtMin, fIJPtMax, 
2859                                                                      fIJNBinsZ, fIJZMin, fIJZMax,  
2860                                                                      fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2861                                                                      fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2862                                                                      fIJNBinsJt , fIJJtMin , fIJJtMax);
2863     fIJBckgHistosStatGenLeading        = new AliFragFuncIntraJetHistos("StatBckgGenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2864                                                                        fIJNBinsPt, fIJPtMin, fIJPtMax, 
2865                                                                        fIJNBinsZ, fIJZMin, fIJZMax,  
2866                                                                        fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2867                                                                        fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2868                                                                        fIJNBinsJt , fIJJtMin , fIJJtMax);
2869     
2870     // outside leading jet
2871     fIJBckgLeadingHistosStatRecCuts          = new AliFragFuncIntraJetHistos("StatBckgLeadingRecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2872                                                                              fIJNBinsPt, fIJPtMin, fIJPtMax, 
2873                                                                              fIJNBinsZ, fIJZMin, fIJZMax,  
2874                                                                              fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2875                                                                              fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2876                                                                              fIJNBinsJt , fIJJtMin , fIJJtMax);
2877     fIJBckgLeadingHistosStatRecLeading        = new AliFragFuncIntraJetHistos("StatBckgLeadingRecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2878                                                                               fIJNBinsPt, fIJPtMin, fIJPtMax, 
2879                                                                               fIJNBinsZ, fIJZMin, fIJZMax,  
2880                                                                               fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2881                                                                               fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2882                                                                               fIJNBinsJt , fIJJtMin , fIJJtMax);
2883     fIJBckgLeadingHistosStatGen              = new AliFragFuncIntraJetHistos("StatBckgLeadingGen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2884                                                                              fIJNBinsPt, fIJPtMin, fIJPtMax, 
2885                                                                              fIJNBinsZ, fIJZMin, fIJZMax,  
2886                                                                              fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2887                                                                              fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2888                                                                              fIJNBinsJt , fIJJtMin , fIJJtMax);
2889     fIJBckgLeadingHistosStatGenLeading        = new AliFragFuncIntraJetHistos("StatBckgLeadingGenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2890                                                                               fIJNBinsPt, fIJPtMin, fIJPtMax, 
2891                                                                               fIJNBinsZ, fIJZMin, fIJZMax,  
2892                                                                               fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2893                                                                               fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2894                                                                               fIJNBinsJt , fIJJtMin , fIJJtMax);
2895
2896     // outside 2 jets
2897     fFFBckg2JetsHistosStatRecCuts    = new AliFragFuncHistos("StatBckg2JetsRecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2898                                                              fFFNBinsPt, fFFPtMin, fFFPtMax, 
2899                                                              fFFNBinsXi, fFFXiMin, fFFXiMax,  
2900                                                              fFFNBinsZ , fFFZMin , fFFZMax);
2901     fFFBckg2JetsHistosStatRecLeading = new AliFragFuncHistos("StatBckg2JetsRecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2902                                                              fFFNBinsPt, fFFPtMin, fFFPtMax, 
2903                                                              fFFNBinsXi, fFFXiMin, fFFXiMax,  
2904                                                              fFFNBinsZ , fFFZMin , fFFZMax);
2905     fFFBckg2JetsHistosStatGen            = new AliFragFuncHistos("StatBckg2JetsGen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2906                                                                  fFFNBinsPt, fFFPtMin, fFFPtMax, 
2907                                                                  fFFNBinsXi, fFFXiMin, fFFXiMax,  
2908                                                                  fFFNBinsZ , fFFZMin , fFFZMax);
2909     fFFBckg2JetsHistosStatGenLeading = new AliFragFuncHistos("StatBckg2JetsGenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2910                                                              fFFNBinsPt, fFFPtMin, fFFPtMax, 
2911                                                              fFFNBinsXi, fFFXiMin, fFFXiMax,  
2912                                                              fFFNBinsZ , fFFZMin , fFFZMax);
2913     
2914     // outside 2 jets
2915     fIJBckg2JetsHistosStatRecCuts            = new AliFragFuncIntraJetHistos("StatBckg2JetsRecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2916                                                                              fIJNBinsPt, fIJPtMin, fIJPtMax, 
2917                                                                              fIJNBinsZ, fIJZMin, fIJZMax,  
2918                                                                              fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2919                                                                              fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2920                                                                              fIJNBinsJt , fIJJtMin , fIJJtMax);
2921     fIJBckg2JetsHistosStatRecLeading        = new AliFragFuncIntraJetHistos("StatBckg2JetsRecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2922                                                                             fIJNBinsPt, fIJPtMin, fIJPtMax, 
2923                                                                             fIJNBinsZ, fIJZMin, fIJZMax,  
2924                                                                             fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2925                                                                             fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2926                                                                             fIJNBinsJt , fIJJtMin , fIJJtMax);
2927     fIJBckg2JetsHistosStatGen                = new AliFragFuncIntraJetHistos("StatBckg2JetsGen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2928                                                                              fIJNBinsPt, fIJPtMin, fIJPtMax, 
2929                                                                              fIJNBinsZ, fIJZMin, fIJZMax,  
2930                                                                              fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2931                                                                              fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2932                                                                              fIJNBinsJt , fIJJtMin , fIJJtMax);
2933     fIJBckg2JetsHistosStatGenLeading        = new AliFragFuncIntraJetHistos("StatBckg2JetsGenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2934                                                                             fIJNBinsPt, fIJPtMin, fIJPtMax, 
2935                                                                             fIJNBinsZ, fIJZMin, fIJZMax,  
2936                                                                             fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2937                                                                             fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2938                                                                             fIJNBinsJt , fIJJtMin , fIJJtMax);
2939     
2940     // outside 3 jets
2941     fFFBckg3JetsHistosStatRecCuts    = new AliFragFuncHistos("StatBckg3JetsRecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2942                                                              fFFNBinsPt, fFFPtMin, fFFPtMax, 
2943                                                              fFFNBinsXi, fFFXiMin, fFFXiMax,  
2944                                                              fFFNBinsZ , fFFZMin , fFFZMax);
2945     fFFBckg3JetsHistosStatRecLeading = new AliFragFuncHistos("StatBckg3JetsRecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2946                                                              fFFNBinsPt, fFFPtMin, fFFPtMax, 
2947                                                              fFFNBinsXi, fFFXiMin, fFFXiMax,  
2948                                                              fFFNBinsZ , fFFZMin , fFFZMax);
2949     fFFBckg3JetsHistosStatGen            = new AliFragFuncHistos("StatBckg3JetsGen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2950                                                                  fFFNBinsPt, fFFPtMin, fFFPtMax, 
2951                                                                  fFFNBinsXi, fFFXiMin, fFFXiMax,  
2952                                                                  fFFNBinsZ , fFFZMin , fFFZMax);
2953     fFFBckg3JetsHistosStatGenLeading = new AliFragFuncHistos("StatBckg3JetsGenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
2954                                                              fFFNBinsPt, fFFPtMin, fFFPtMax, 
2955                                                              fFFNBinsXi, fFFXiMin, fFFXiMax,  
2956                                                              fFFNBinsZ , fFFZMin , fFFZMax);
2957     
2958     // outside 3 jets
2959     fIJBckg3JetsHistosStatRecCuts            = new AliFragFuncIntraJetHistos("StatBckg3JetsRecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2960                                                                              fIJNBinsPt, fIJPtMin, fIJPtMax, 
2961                                                                              fIJNBinsZ, fIJZMin, fIJZMax,  
2962                                                                              fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2963                                                                              fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2964                                                                              fIJNBinsJt , fIJJtMin , fIJJtMax);
2965     fIJBckg3JetsHistosStatRecLeading        = new AliFragFuncIntraJetHistos("StatBckg3JetsRecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2966                                                                             fIJNBinsPt, fIJPtMin, fIJPtMax, 
2967                                                                             fIJNBinsZ, fIJZMin, fIJZMax,  
2968                                                                             fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2969                                                                             fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2970                                                                             fIJNBinsJt , fIJJtMin , fIJJtMax);
2971     fIJBckg3JetsHistosStatGen                = new AliFragFuncIntraJetHistos("StatBckg3JetsGen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2972                                                                              fIJNBinsPt, fIJPtMin, fIJPtMax, 
2973                                                                              fIJNBinsZ, fIJZMin, fIJZMax,  
2974                                                                              fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2975                                                                              fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2976                                                                              fIJNBinsJt , fIJJtMin , fIJJtMax);
2977     fIJBckg3JetsHistosStatGenLeading        = new AliFragFuncIntraJetHistos("StatBckg3JetsGenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax, 
2978                                                                             fIJNBinsPt, fIJPtMin, fIJPtMax, 
2979                                                                             fIJNBinsZ, fIJZMin, fIJZMax,  
2980                                                                             fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax, 
2981                                                                             fIJNBinsTheta , fIJThetaMin , fIJThetaMax, 
2982                                                                             fIJNBinsJt , fIJJtMin , fIJJtMax);
2983   }
2984
2985   fQATrackHistosRec->DefineHistos();
2986   fQATrackHistosRecCuts->DefineHistos();
2987   fQATrackHistosGen->DefineHistos();
2988
2989   fQAJetHistosRec->DefineHistos();
2990   fQAJetHistosRecCuts->DefineHistos();
2991   fQAJetHistosRecCutsLeading->DefineHistos();
2992   fQAJetHistosGen->DefineHistos();
2993   fQAJetHistosGenLeading->DefineHistos();
2994   fQAJetHistosRecEffLeading->DefineHistos();
2995
2996   fFFHistosRecCuts->DefineHistos();
2997   fFFHistosRecLeading->DefineHistos();
2998   fFFHistosRecLeadingTrack->DefineHistos();
2999   fFFHistosGen->DefineHistos();
3000   fFFHistosGenLeading->DefineHistos();
3001   fFFHistosGenLeadingTrack->DefineHistos();
3002
3003   fIJHistosRecCuts->DefineHistos();
3004   fIJHistosRecLeading->DefineHistos();
3005   fIJHistosRecLeadingTrack->DefineHistos();
3006   fIJHistosGen->DefineHistos();
3007   fIJHistosGenLeading->DefineHistos();
3008   fIJHistosGenLeadingTrack->DefineHistos();
3009   
3010   fFFDiJetHistosRecCuts->DefineDiJetHistos();
3011   fFFDiJetHistosRecLeading->DefineDiJetHistos();
3012   fFFDiJetHistosRecLeadingTrack->DefineDiJetHistos();
3013   fFFDiJetHistosGen->DefineDiJetHistos();
3014   fFFDiJetHistosGenLeading->DefineDiJetHistos();
3015   fFFDiJetHistosGenLeadingTrack->DefineDiJetHistos();
3016   fQADiJetHistosRecCuts->DefineQADiJetHistos();
3017   fQADiJetHistosGen->DefineQADiJetHistos();
3018
3019   // Background
3020   if(fBckgMode){
3021     fFFBckgNoJetHistosRecCuts->DefineHistos();
3022     fFFBckgNoJetHistosRecLeading->DefineHistos();
3023     fFFBckgNoJetHistosGen->DefineHistos();
3024     fFFBckgNoJetHistosGenLeading->DefineHistos();
3025     
3026     fFFBckgHistosRecCuts->DefineHistos();
3027     fFFBckgHistosRecLeading->DefineHistos();
3028     fFFBckgHistosGen->DefineHistos();
3029     fFFBckgHistosGenLeading->DefineHistos();
3030     
3031     fFFBckgLeadingHistosRecCuts->DefineHistos();
3032     fFFBckgLeadingHistosRecLeading->DefineHistos();
3033     fFFBckgLeadingHistosGen->DefineHistos();
3034     fFFBckgLeadingHistosGenLeading->DefineHistos();
3035     
3036     fIJBckgNoJetHistosRecCuts->DefineHistos();
3037     fIJBckgNoJetHistosRecLeading->DefineHistos();
3038     fIJBckgNoJetHistosGen->DefineHistos();
3039     fIJBckgNoJetHistosGenLeading->DefineHistos();
3040     
3041     fIJBckgHistosRecCuts->DefineHistos();
3042     fIJBckgHistosRecLeading->DefineHistos();
3043     fIJBckgHistosGen->DefineHistos();
3044     fIJBckgHistosGenLeading->DefineHistos();
3045     
3046     fIJBckgLeadingHistosRecCuts->DefineHistos();
3047     fIJBckgLeadingHistosRecLeading->DefineHistos();
3048     fIJBckgLeadingHistosGen->DefineHistos();
3049     fIJBckgLeadingHistosGenLeading->DefineHistos();
3050     
3051     fFFBckg2JetsHistosRecCuts->DefineHistos();
3052     fFFBckg2JetsHistosRecLeading->DefineHistos();
3053     fFFBckg2JetsHistosGen->DefineHistos();
3054     fFFBckg2JetsHistosGenLeading->DefineHistos();
3055     
3056     fIJBckg2JetsHistosRecCuts->DefineHistos();
3057     fIJBckg2JetsHistosRecLeading->DefineHistos();
3058     fIJBckg2JetsHistosGen->DefineHistos();
3059     fIJBckg2JetsHistosGenLeading->DefineHistos();
3060     
3061     fFFBckg3JetsHistosRecCuts->DefineHistos();
3062     fFFBckg3JetsHistosRecLeading->DefineHistos();
3063     fFFBckg3JetsHistosGen->DefineHistos();
3064     fFFBckg3JetsHistosGenLeading->DefineHistos();
3065     
3066     fIJBckg3JetsHistosRecCuts->DefineHistos();
3067     fIJBckg3JetsHistosRecLeading->DefineHistos();
3068     fIJBckg3JetsHistosGen->DefineHistos();
3069     fIJBckg3JetsHistosGenLeading->DefineHistos();
3070     
3071     fFFBckgPerpHistosRecCuts->DefineHistos();
3072     fFFBckgPerpHistosRecLeading->DefineHistos();
3073     fFFBckgPerpHistosGen->DefineHistos();
3074     fFFBckgPerpHistosGenLeading->DefineHistos();
3075     
3076     fIJBckgPerpHistosRecCuts->DefineHistos();
3077     fIJBckgPerpHistosRecLeading->DefineHistos();
3078     fIJBckgPerpHistosGen->DefineHistos();
3079     fIJBckgPerpHistosGenLeading->DefineHistos();
3080     
3081     fFFBckgHistosStatRecCuts->DefineHistos();
3082     fFFBckgHistosStatRecLeading->DefineHistos();
3083     fFFBckgHistosStatGen->DefineHistos();
3084     fFFBckgHistosStatGenLeading->DefineHistos();
3085     
3086     fFFBckgLeadingHistosStatRecCuts->DefineHistos();
3087     fFFBckgLeadingHistosStatRecLeading->DefineHistos();
3088     fFFBckgLeadingHistosStatGen->DefineHistos();
3089     fFFBckgLeadingHistosStatGenLeading->DefineHistos();
3090     
3091     fIJBckgHistosStatRecCuts->DefineHistos();
3092     fIJBckgHistosStatRecLeading->DefineHistos();
3093     fIJBckgHistosStatGen->DefineHistos();
3094     fIJBckgHistosStatGenLeading->DefineHistos();
3095     
3096     fIJBckgLeadingHistosStatRecCuts->DefineHistos();
3097     fIJBckgLeadingHistosStatRecLeading->DefineHistos();
3098     fIJBckgLeadingHistosStatGen->DefineHistos();
3099     fIJBckgLeadingHistosStatGenLeading->DefineHistos();
3100     
3101     fFFBckg2JetsHistosStatRecCuts->DefineHistos();
3102     fFFBckg2JetsHistosStatRecLeading->DefineHistos();
3103     fFFBckg2JetsHistosStatGen->DefineHistos();
3104     fFFBckg2JetsHistosStatGenLeading->DefineHistos();
3105
3106     fIJBckg2JetsHistosStatRecCuts->DefineHistos();
3107     fIJBckg2JetsHistosStatRecLeading->DefineHistos();
3108     fIJBckg2JetsHistosStatGen->DefineHistos();
3109     fIJBckg2JetsHistosStatGenLeading->DefineHistos();
3110     
3111     fFFBckg3JetsHistosStatRecCuts->DefineHistos();
3112     fFFBckg3JetsHistosStatRecLeading->DefineHistos();
3113     fFFBckg3JetsHistosStatGen->DefineHistos();
3114     fFFBckg3JetsHistosStatGenLeading->DefineHistos();
3115     
3116     fIJBckg3JetsHistosStatRecCuts->DefineHistos();
3117     fIJBckg3JetsHistosStatRecLeading->DefineHistos();
3118     fIJBckg3JetsHistosStatGen->DefineHistos();
3119     fIJBckg3JetsHistosStatGenLeading->DefineHistos();
3120     
3121     fQABckgNoJetTrackHistosRec->DefineHistos();
3122     fQABckgNoJetTrackHistosRecCuts->DefineHistos();
3123     fQABckgNoJetTrackHistosGen->DefineHistos();
3124     fQABckgLeadingTrackHistosRec->DefineHistos();
3125     fQABckgLeadingTrackHistosRecCuts->DefineHistos();
3126     fQABckgLeadingTrackHistosGen->DefineHistos();
3127     fQABckg2JetsTrackHistosRec->DefineHistos();
3128     fQABckg2JetsTrackHistosRecCuts->DefineHistos();
3129     fQABckg2JetsTrackHistosGen->DefineHistos();
3130     fQABckg3JetsTrackHistosRec->DefineHistos();
3131     fQABckg3JetsTrackHistosRecCuts->DefineHistos();
3132     fQABckg3JetsTrackHistosGen->DefineHistos();
3133     fQABckgPerpTrackHistosRec->DefineHistos();
3134     fQABckgPerpTrackHistosRecCuts->DefineHistos();
3135     fQABckgPerpTrackHistosGen->DefineHistos();
3136   }
3137   
3138   Bool_t genJets    = (fJetTypeGen != kJetsUndef) ? kTRUE : kFALSE;
3139   Bool_t genTracks  = (fTrackTypeGen != kTrackUndef) ? kTRUE : kFALSE;
3140   Bool_t recJetsEff = (fJetTypeRecEff != kJetsUndef) ? kTRUE : kFALSE;
3141
3142
3143   const Int_t saveLevel = 5;
3144   if(saveLevel>0){
3145     fCommonHistList->Add(fh1EvtSelection);
3146     fFFHistosRecCuts->AddToOutput(fCommonHistList);
3147     fFFHistosRecLeading->AddToOutput(fCommonHistList);
3148     fFFHistosRecLeadingTrack->AddToOutput(fCommonHistList);
3149
3150     // Background
3151     if(fBckgMode){
3152       fFFBckgNoJetHistosRecCuts->AddToOutput(fCommonHistList);
3153       fFFBckgNoJetHistosRecLeading->AddToOutput(fCommonHistList);
3154       fFFBckgHistosRecCuts->AddToOutput(fCommonHistList);
3155       fFFBckgHistosRecLeading->AddToOutput(fCommonHistList);
3156       fFFBckgLeadingHistosRecCuts->AddToOutput(fCommonHistList);
3157       fFFBckgLeadingHistosRecLeading->AddToOutput(fCommonHistList);
3158       fFFBckg2JetsHistosRecCuts->AddToOutput(fCommonHistList);
3159       fFFBckg2JetsHistosRecLeading->AddToOutput(fCommonHistList);
3160       fFFBckg3JetsHistosRecCuts->AddToOutput(fCommonHistList);
3161       fFFBckg3JetsHistosRecLeading->AddToOutput(fCommonHistList);
3162       fFFBckgPerpHistosRecCuts->AddToOutput(fCommonHistList);
3163       fFFBckgPerpHistosRecLeading->AddToOutput(fCommonHistList);
3164       
3165       fFFBckgHistosStatRecCuts->AddToOutput(fCommonHistList);
3166       fFFBckgHistosStatRecLeading->AddToOutput(fCommonHistList);
3167       fFFBckgLeadingHistosStatRecCuts->AddToOutput(fCommonHistList);
3168       fFFBckgLeadingHistosStatRecLeading->AddToOutput(fCommonHistList);
3169       fFFBckg2JetsHistosStatRecCuts->AddToOutput(fCommonHistList);
3170       fFFBckg2JetsHistosStatRecLeading->AddToOutput(fCommonHistList);
3171       fFFBckg3JetsHistosStatRecCuts->AddToOutput(fCommonHistList);
3172       fFFBckg3JetsHistosStatRecLeading->AddToOutput(fCommonHistList);
3173       
3174       fQABckgNoJetTrackHistosRec->AddToOutput(fCommonHistList);
3175       fQABckgNoJetTrackHistosRecCuts->AddToOutput(fCommonHistList);
3176       fQABckgLeadingTrackHistosRec->AddToOutput(fCommonHistList);
3177       fQABckgLeadingTrackHistosRecCuts->AddToOutput(fCommonHistList);
3178       fQABckg2JetsTrackHistosRec->AddToOutput(fCommonHistList);
3179       fQABckg2JetsTrackHistosRecCuts->AddToOutput(fCommonHistList);
3180       fQABckg3JetsTrackHistosRec->AddToOutput(fCommonHistList);
3181       fQABckg3JetsTrackHistosRecCuts->AddToOutput(fCommonHistList);
3182       fQABckgPerpTrackHistosRec->AddToOutput(fCommonHistList);
3183       fQABckgPerpTrackHistosRecCuts->AddToOutput(fCommonHistList);
3184     }
3185
3186     fCommonHistList->Add(fh1OutLeadingMult);
3187     fCommonHistList->Add(fh1PerpMult);
3188     fCommonHistList->Add(fh1Out2JetsMult);
3189     fCommonHistList->Add(fh1Out3JetsMult);
3190
3191
3192     if(genJets && genTracks){
3193        fFFHistosGen->AddToOutput(fCommonHistList);
3194        fFFHistosGenLeading->AddToOutput(fCommonHistList);
3195        fFFHistosGenLeadingTrack->AddToOutput(fCommonHistList);
3196
3197        fCommonHistList->Add(fh1Xsec);
3198        fCommonHistList->Add(fh1Trials);
3199        fCommonHistList->Add(fh1PtHard);
3200        fCommonHistList->Add(fh1PtHardTrials);
3201
3202        // Background
3203        if(fBckgMode){
3204          fFFBckgNoJetHistosGen->AddToOutput(fCommonHistList);
3205          fFFBckgNoJetHistosGenLeading->AddToOutput(fCommonHistList);
3206          fFFBckgHistosGen->AddToOutput(fCommonHistList);
3207          fFFBckgHistosGenLeading->AddToOutput(fCommonHistList);
3208          fFFBckgLeadingHistosGen->AddToOutput(fCommonHistList);
3209          fFFBckgLeadingHistosGenLeading->AddToOutput(fCommonHistList);
3210          fFFBckg2JetsHistosGen->AddToOutput(fCommonHistList);
3211          fFFBckg2JetsHistosGenLeading->AddToOutput(fCommonHistList);
3212          fFFBckg3JetsHistosGen->AddToOutput(fCommonHistList);
3213          fFFBckg3JetsHistosGenLeading->AddToOutput(fCommonHistList);
3214          fFFBckgPerpHistosGen->AddToOutput(fCommonHistList);
3215          fFFBckgPerpHistosGenLeading->AddToOutput(fCommonHistList);
3216          
3217          fFFBckgHistosStatGen->AddToOutput(fCommonHistList);
3218          fFFBckgHistosStatGenLeading->AddToOutput(fCommonHistList);
3219          fFFBckgLeadingHistosStatGen->AddToOutput(fCommonHistList);
3220          fFFBckgLeadingHistosStatGenLeading->AddToOutput(fCommonHistList);
3221          fFFBckg2JetsHistosStatGen->AddToOutput(fCommonHistList);
3222          fFFBckg2JetsHistosStatGenLeading->AddToOutput(fCommonHistList);
3223          fFFBckg3JetsHistosStatGen->AddToOutput(fCommonHistList);
3224          fFFBckg3JetsHistosStatGenLeading->AddToOutput(fCommonHistList);
3225          
3226          fQABckgNoJetTrackHistosGen->AddToOutput(fCommonHistList);
3227          fQABckgLeadingTrackHistosGen->AddToOutput(fCommonHistList);
3228          fQABckg2JetsTrackHistosGen->AddToOutput(fCommonHistList);
3229          fQABckg3JetsTrackHistosGen->AddToOutput(fCommonHistList);
3230          fQABckgPerpTrackHistosGen->AddToOutput(fCommonHistList);
3231        }
3232     }
3233   }
3234   if(saveLevel>1){
3235     fQATrackHistosRec->AddToOutput(fCommonHistList);
3236     fQATrackHistosRecCuts->AddToOutput(fCommonHistList);
3237     if(genTracks) fQATrackHistosGen->AddToOutput(fCommonHistList);
3238     
3239     fQAJetHistosRec->AddToOutput(fCommonHistList);
3240     fQAJetHistosRecCuts->AddToOutput(fCommonHistList);
3241     fQAJetHistosRecCutsLeading->AddToOutput(fCommonHistList);
3242     if(recJetsEff) fQAJetHistosRecEffLeading->AddToOutput(fCommonHistList); 
3243
3244     if(genJets){
3245        fQAJetHistosGen->AddToOutput(fCommonHistList);
3246        fQAJetHistosGenLeading->AddToOutput(fCommonHistList);
3247     }
3248
3249     fCommonHistList->Add(fh1EvtMult);
3250     fCommonHistList->Add(fh1nRecJetsCuts);
3251     if(genJets) fCommonHistList->Add(fh1nGenJets);
3252   }
3253   if(saveLevel>2){
3254     fCommonHistList->Add(fh1VertexNContributors);
3255     fCommonHistList->Add(fh1VertexZ);    
3256   }
3257   if(saveLevel>3){
3258     fIJHistosRecCuts->AddToOutput(fCommonHistList);
3259     fIJHistosRecLeading->AddToOutput(fCommonHistList);
3260     fIJHistosRecLeadingTrack->AddToOutput(fCommonHistList);
3261
3262     // Background
3263     if(fBckgMode){
3264       fIJBckgNoJetHistosRecCuts->AddToOutput(fCommonHistList);
3265       fIJBckgNoJetHistosRecLeading->AddToOutput(fCommonHistList);
3266       fIJBckgHistosRecCuts->AddToOutput(fCommonHistList);
3267       fIJBckgHistosRecLeading->AddToOutput(fCommonHistList);
3268       fIJBckgLeadingHistosRecCuts->AddToOutput(fCommonHistList);
3269       fIJBckgLeadingHistosRecLeading->AddToOutput(fCommonHistList);
3270       fIJBckg2JetsHistosRecCuts->AddToOutput(fCommonHistList);
3271       fIJBckg2JetsHistosRecLeading->AddToOutput(fCommonHistList);
3272       fIJBckg3JetsHistosRecCuts->AddToOutput(fCommonHistList);
3273       fIJBckg3JetsHistosRecLeading->AddToOutput(fCommonHistList);
3274       fIJBckgPerpHistosRecCuts->AddToOutput(fCommonHistList);
3275       fIJBckgPerpHistosRecLeading->AddToOutput(fCommonHistList);
3276       
3277       fIJBckgHistosStatRecCuts->AddToOutput(fCommonHistList);
3278       fIJBckgHistosStatRecLeading->AddToOutput(fCommonHistList);
3279       fIJBckgLeadingHistosStatRecCuts->AddToOutput(fCommonHistList);
3280       fIJBckgLeadingHistosStatRecLeading->AddToOutput(fCommonHistList);
3281       fIJBckg2JetsHistosStatRecCuts->AddToOutput(fCommonHistList);
3282       fIJBckg2JetsHistosStatRecLeading->AddToOutput(fCommonHistList);
3283       fIJBckg3JetsHistosStatRecCuts->AddToOutput(fCommonHistList);
3284       fIJBckg3JetsHistosStatRecLeading->AddToOutput(fCommonHistList);
3285     }
3286
3287     if(genJets && genTracks){
3288        fIJHistosGen->AddToOutput(fCommonHistList);
3289        fIJHistosGenLeading->AddToOutput(fCommonHistList);
3290        fIJHistosGenLeadingTrack->AddToOutput(fCommonHistList);
3291
3292        // Background
3293        if(fBckgMode){
3294          fIJBckgNoJetHistosGen->AddToOutput(fCommonHistList);
3295          fIJBckgNoJetHistosGenLeading->AddToOutput(fCommonHistList);
3296          fIJBckgHistosGen->AddToOutput(fCommonHistList);
3297          fIJBckgHistosGenLeading->AddToOutput(fCommonHistList);
3298          fIJBckgLeadingHistosGen->AddToOutput(fCommonHistList);
3299          fIJBckgLeadingHistosGenLeading->AddToOutput(fCommonHistList);
3300          fIJBckg2JetsHistosGen->AddToOutput(fCommonHistList);
3301          fIJBckg2JetsHistosGenLeading->AddToOutput(fCommonHistList);
3302          fIJBckg3JetsHistosGen->AddToOutput(fCommonHistList);
3303          fIJBckg3JetsHistosGenLeading->AddToOutput(fCommonHistList);
3304          fIJBckgPerpHistosGen->AddToOutput(fCommonHistList);
3305          fIJBckgPerpHistosGenLeading->AddToOutput(fCommonHistList);
3306          
3307          fIJBckgHistosStatGen->AddToOutput(fCommonHistList);
3308          fIJBckgHistosStatGenLeading->AddToOutput(fCommonHistList);
3309          fIJBckgLeadingHistosStatGen->AddToOutput(fCommonHistList);
3310          fIJBckgLeadingHistosStatGenLeading->AddToOutput(fCommonHistList);
3311          fIJBckg2JetsHistosStatGen->AddToOutput(fCommonHistList);
3312          fIJBckg2JetsHistosStatGenLeading->AddToOutput(fCommonHistList);
3313          fIJBckg3JetsHistosStatGen->AddToOutput(fCommonHistList);
3314          fIJBckg3JetsHistosStatGenLeading->AddToOutput(fCommonHistList);
3315        }
3316     }
3317   }
3318   if(saveLevel>4){
3319     fFFDiJetHistosRecCuts->AddToOutput(fCommonHistList);
3320     fFFDiJetHistosRecLeading->AddToOutput(fCommonHistList);
3321     fFFDiJetHistosRecLeadingTrack->AddToOutput(fCommonHistList);
3322     fQADiJetHistosRecCuts->AddToOutput(fCommonHistList);
3323
3324     if(genJets && genTracks){
3325         fFFDiJetHistosGen->AddToOutput(fCommonHistList);
3326         fFFDiJetHistosGenLeading->AddToOutput(fCommonHistList);
3327         fFFDiJetHistosGenLeadingTrack->AddToOutput(fCommonHistList);
3328         fQADiJetHistosGen->AddToOutput(fCommonHistList);
3329     }
3330
3331     if(recJetsEff && genTracks){
3332        fCommonHistList->Add(fhnSingleTrackRecEffHisto);
3333        fCommonHistList->Add(fhnJetTrackRecEffHisto);
3334        fCommonHistList->Add(fh1nRecEffJets);
3335     }
3336   }
3337
3338   // =========== Switch on Sumw2 for all histos ===========
3339   for (Int_t i=0; i<fCommonHistList->GetEntries(); ++i){
3340     TH1 *h1 = dynamic_cast<TH1*>(fCommonHistList->At(i));
3341     if (h1) h1->Sumw2();
3342     else{
3343       THnSparse *hnSparse = dynamic_cast<THnSparse*>(fCommonHistList->At(i));
3344       if(hnSparse) hnSparse->Sumw2();
3345     }
3346   }
3347   
3348   TH1::AddDirectory(oldStatus);
3349 }
3350
3351 //_______________________________________________
3352 void AliAnalysisTaskFragmentationFunction::Init()
3353 {
3354   // Initialization
3355   if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::Init()");
3356
3357 }
3358
3359 //_____________________________________________________________
3360 void AliAnalysisTaskFragmentationFunction::UserExec(Option_t *) 
3361 {
3362   // Main loop
3363   // Called for each event
3364   if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::UserExec()");
3365         
3366
3367   if(fDebug > 1) Printf("Analysis event #%5d", (Int_t) fEntry);
3368   // Trigger selection
3369   
3370   AliInputEventHandler* inputHandler = (AliInputEventHandler*)
3371     ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
3372   if(inputHandler->IsEventSelected() & AliVEvent::kMB){
3373     if(fDebug > 1)  Printf(" Trigger Selection: event ACCEPTED ... ");
3374     fh1EvtSelection->Fill(1.);
3375   } else {
3376     fh1EvtSelection->Fill(0.);
3377     if(inputHandler->InheritsFrom("AliESDInputHandler") && fUsePhysicsSelection){ // PhysicsSelection only with ESD input
3378       if (fDebug > 1 ) Printf(" Trigger Selection: event REJECTED ... ");
3379       PostData(1, fCommonHistList);
3380       return;
3381     }
3382   }
3383
3384   fESD = dynamic_cast<AliESDEvent*>(InputEvent());
3385   if(!fESD){
3386     if(fDebug>3) Printf("%s:%d ESDEvent not found in the input", (char*)__FILE__,__LINE__);
3387   }
3388   
3389   fMCEvent = MCEvent();
3390   if(!fMCEvent){
3391     if(fDebug>3) Printf("%s:%d MCEvent not found in the input", (char*)__FILE__,__LINE__);
3392   }
3393   
3394   // get AOD event from input/ouput
3395   TObject* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
3396   if( handler && handler->InheritsFrom("AliAODInputHandler") ) {
3397     fAOD  =  ((AliAODInputHandler*)handler)->GetEvent();
3398     if (fDebug > 1)  Printf("%s:%d AOD event from input", (char*)__FILE__,__LINE__);
3399   }
3400   else {
3401     handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
3402     if( handler && handler->InheritsFrom("AliAODHandler") ) {
3403       fAOD  = ((AliAODHandler*)handler)->GetAOD();
3404       if (fDebug > 1)  Printf("%s:%d AOD event from output", (char*)__FILE__,__LINE__);
3405     }
3406   }
3407   
3408   if(!fAOD){
3409     Printf("%s:%d AODEvent not found", (char*)__FILE__,__LINE__);
3410     return;
3411   }
3412   
3413
3414   // event selection (vertex) *****************************************
3415   
3416   AliAODVertex* primVtx = fAOD->GetPrimaryVertex();
3417   Int_t nTracksPrim = primVtx->GetNContributors();
3418   fh1VertexNContributors->Fill(nTracksPrim);
3419   
3420   if (fDebug > 1) Printf("%s:%d primary vertex selection: %d", (char*)__FILE__,__LINE__,nTracksPrim);
3421   if(!nTracksPrim){
3422     if (fDebug > 1) Printf("%s:%d primary vertex selection: event REJECTED...",(char*)__FILE__,__LINE__); 
3423     fh1EvtSelection->Fill(2.);
3424     PostData(1, fCommonHistList);
3425     return;
3426   }
3427
3428   fh1VertexZ->Fill(primVtx->GetZ());
3429   
3430   if(TMath::Abs(primVtx->GetZ())>10){
3431     if (fDebug > 1) Printf("%s:%d primary vertex z = %f: event REJECTED...",(char*)__FILE__,__LINE__,primVtx->GetZ()); 
3432     fh1EvtSelection->Fill(3.);
3433     PostData(1, fCommonHistList);
3434     return; 
3435   }
3436
3437   TString primVtxName(primVtx->GetName());
3438
3439   if(primVtxName.CompareTo("TPCVertex",TString::kIgnoreCase) == 1){
3440     if (fDebug > 1) Printf("%s:%d primary vertex selection: TPC vertex, event REJECTED...",(char*)__FILE__,__LINE__);
3441     fh1EvtSelection->Fill(4.);
3442     PostData(1, fCommonHistList);
3443     return;
3444   }
3445   if (fDebug > 1) Printf("%s:%d primary vertex selection: event ACCEPTED ...",(char*)__FILE__,__LINE__); 
3446   fh1EvtSelection->Fill(5.);
3447
3448
3449   //___ get MC information __________________________________________________________________
3450
3451   Double_t ptHard = 0.;
3452   Double_t nTrials = 1; // trials for MC trigger weight for real data
3453   
3454   if(fMCEvent){
3455      AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
3456      AliGenPythiaEventHeader*  pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
3457      AliGenHijingEventHeader*  hijingGenHeader = 0x0;
3458
3459      if(pythiaGenHeader){
3460          if(fDebug>3) Printf("%s:%d pythiaGenHeader found", (char*)__FILE__,__LINE__);
3461          nTrials = pythiaGenHeader->Trials();
3462          ptHard  = pythiaGenHeader->GetPtHard();
3463
3464          fh1PtHard->Fill(ptHard);
3465          fh1PtHardTrials->Fill(ptHard,nTrials);
3466
3467
3468      } else { // no pythia, hijing?
3469
3470          if(fDebug>3) Printf("%s:%d no pythiaGenHeader found", (char*)__FILE__,__LINE__);
3471
3472          hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
3473          if(!hijingGenHeader){
3474             Printf("%s:%d no pythiaGenHeader or hjingGenHeader found", (char*)__FILE__,__LINE__);
3475          } else {
3476             if(fDebug>3) Printf("%s:%d hijingGenHeader found", (char*)__FILE__,__LINE__);
3477          }
3478      }
3479
3480      fh1Trials->Fill("#sum{ntrials}",fAvgTrials);
3481   }
3482   
3483   
3484   //___ fetch jets __________________________________________________________________________
3485   
3486   Int_t nJ = GetListOfJets(fJetsRec, kJetsRec);
3487   Int_t nRecJets = 0;
3488   if(nJ>=0) nRecJets = fJetsRec->GetEntries();
3489   if(fDebug>2)Printf("%s:%d Selected Rec jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
3490   if(nJ != nRecJets) Printf("%s:%d Mismatch Selected Rec Jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
3491
3492   Int_t nJCuts = GetListOfJets(fJetsRecCuts, kJetsRecAcceptance);
3493   Int_t nRecJetsCuts = 0;
3494   if(nJCuts>=0) nRecJetsCuts = fJetsRecCuts->GetEntries();
3495   if(fDebug>2)Printf("%s:%d Selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
3496   if(nRecJetsCuts != nJCuts) Printf("%s:%d Mismatch selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
3497   fh1nRecJetsCuts->Fill(nRecJetsCuts);
3498
3499   
3500   if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear() 
3501   Int_t nJGen  = GetListOfJets(fJetsGen, fJetTypeGen);
3502   Int_t nGenJets = 0;
3503   if(nJGen>=0) nGenJets = fJetsGen->GetEntries();
3504   if(fDebug>2)Printf("%s:%d Selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
3505   if(nJGen != nGenJets) Printf("%s:%d Mismatch selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
3506   fh1nGenJets->Fill(nGenJets);
3507
3508
3509   if(fJetTypeRecEff==kJetsKine || fJetTypeRecEff == kJetsKineAcceptance) fJetsRecEff->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear() 
3510   Int_t nJRecEff  = GetListOfJets(fJetsRecEff, fJetTypeRecEff);
3511   Int_t nRecEffJets = 0;
3512   if(nJRecEff>=0) nRecEffJets = fJetsRecEff->GetEntries();
3513   if(fDebug>2)Printf("%s:%d Selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
3514   if(nJRecEff != nRecEffJets) Printf("%s:%d Mismatch selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
3515   fh1nRecEffJets->Fill(nRecEffJets);
3516
3517
3518   //____ fetch particles __________________________________________________________
3519   
3520   Int_t nT = GetListOfTracks(fTracksRec, kTrackAOD);
3521   Int_t nRecPart = 0;
3522   if(nT>=0) nRecPart = fTracksRec->GetEntries();
3523   if(fDebug>2)Printf("%s:%d Selected Rec tracks: %d %d",(char*)__FILE__,__LINE__,nT,nRecPart);
3524   if(nRecPart != nT) Printf("%s:%d Mismatch selected Rec tracks: %d %d",(char*)__FILE__,__LINE__,nT,nRecPart);
3525   
3526
3527   Int_t nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODCuts);
3528   Int_t nRecPartCuts = 0;
3529   if(nTCuts>=0) nRecPartCuts = fTracksRecCuts->GetEntries();
3530   if(fDebug>2)Printf("%s:%d Selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
3531   if(nRecPartCuts != nTCuts) Printf("%s:%d Mismatch selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
3532   fh1EvtMult->Fill(nRecPartCuts);
3533
3534
3535   Int_t nTGen = GetListOfTracks(fTracksGen,fTrackTypeGen);
3536   Int_t nGenPart = 0;
3537   if(nTGen>=0) nGenPart = fTracksGen->GetEntries();
3538   if(fDebug>2)Printf("%s:%d Selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
3539   if(nGenPart != nTGen) Printf("%s:%d Mismatch selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
3540   
3541   
3542   //____ analysis, fill histos ___________________________________________________
3543   
3544   // loop over tracks
3545
3546   for(Int_t it=0; it<nRecPart; ++it){
3547     AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksRec->At(it));
3548     fQATrackHistosRec->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
3549   }
3550   for(Int_t it=0; it<nRecPartCuts; ++it){
3551     AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksRecCuts->At(it));
3552     fQATrackHistosRecCuts->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
3553   }
3554   for(Int_t it=0; it<nGenPart; ++it){
3555     AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksGen->At(it));
3556     fQATrackHistosGen->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
3557   }
3558   
3559   // loop over jets
3560
3561   for(Int_t ij=0; ij<nRecJets; ++ij){
3562
3563     AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRec->At(ij));
3564     fQAJetHistosRec->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
3565   }
3566   
3567   // List of tracks outside jets for background study
3568   TList* tracklistout2jets     = new TList();
3569   TList* tracklistout3jets     = new TList();
3570   TList* tracklistout2jetsStat = new TList();
3571   TList* tracklistout3jetsStat = new TList();
3572   Double_t sumPtOut2Jets       = 0.;
3573   Double_t sumPtOut3Jets       = 0.;
3574   Double_t sumPtOut2JetsStat   = 0.;
3575   Double_t sumPtOut3JetsStat   = 0.;
3576   Double_t normFactor2Jets     = 0.;
3577   Double_t normFactor3Jets     = 0.;
3578
3579   if(fBckgMode && nRecJetsCuts>1) {
3580     GetOutNJetsTracks(2,fTracksRecCuts, tracklistout2jets, fJetsRecCuts, sumPtOut2Jets);
3581     GetOutNJetsTracksStat(2,fTracksRecCuts, tracklistout2jetsStat, fJetsRecCuts,sumPtOut2JetsStat, normFactor2Jets);
3582   }
3583   if(fBckgMode && nRecJetsCuts>2) {
3584     GetOutNJetsTracks(3,fTracksRecCuts, tracklistout3jets, fJetsRecCuts, sumPtOut3Jets);
3585     GetOutNJetsTracksStat(3,fTracksRecCuts, tracklistout3jetsStat, fJetsRecCuts, sumPtOut3JetsStat, normFactor3Jets);
3586   }
3587
3588   for(Int_t ij=0; ij<nRecJetsCuts; ++ij){
3589
3590     AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRecCuts->At(ij));
3591     fQAJetHistosRecCuts->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
3592
3593     if(ij==0){ // leading jet
3594       
3595       fQAJetHistosRecCutsLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt() );
3596       
3597       TList* jettracklist = new TList();
3598       Double_t sumPt = 0.;
3599       Float_t leadTrackPx = 0.;
3600       Float_t leadTrackPy = 0.;
3601       Float_t leadTrackPz = 0.;
3602       Float_t leadTrackP  = 0.;
3603       Float_t leadTrackPt = 0.;
3604       TLorentzVector* leadTrackV = new TLorentzVector();
3605       
3606       if(GetFFRadius()<=0){
3607         GetJetTracksTrackrefs(jettracklist, jet);
3608        } else {
3609         GetJetTracksPointing(fTracksRecCuts, jettracklist, jet, GetFFRadius(), sumPt);
3610       }
3611       
3612       for(Int_t it=0; it<jettracklist->GetSize(); ++it){
3613         Float_t trackPx = (dynamic_cast<AliVParticle*> (jettracklist->At(it)))->Px();
3614         Float_t trackPy = (dynamic_cast<AliVParticle*> (jettracklist->At(it)))->Py();
3615         Float_t trackPz = (dynamic_cast<AliVParticle*> (jettracklist->At(it)))->Pz();
3616         Float_t trackP = (dynamic_cast<AliVParticle*> (jettracklist->At(it)))->P();
3617         Float_t trackPt = (dynamic_cast<AliVParticle*> (jettracklist->At(it)))->Pt();
3618         Float_t jetPx = jet->Px();
3619         Float_t jetPy = jet->Py();
3620         Float_t jetPz = jet->Pz();
3621         Float_t jetP  = jet->P();
3622         Float_t jetPt = jet->Pt();
3623         TLorentzVector* trackV = new TLorentzVector();
3624         TLorentzVector *jetV = new TLorentzVector();
3625         trackV->SetPxPyPzE(trackPx,trackPy,trackPz,trackP);
3626         jetV->SetPxPyPzE(jetPx,jetPy,jetPz,jetP);
3627
3628         Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
3629         
3630         fFFHistosRecCuts->FillFF( trackPt, jetPt, incrementJetPt, 0);
3631         fIJHistosRecCuts->FillIntraJet( trackV, jetV, 0);
3632         
3633         if(it==0){ 
3634           leadTrackPx = trackPx;
3635           leadTrackPy = trackPy;
3636           leadTrackPz = trackPz;
3637           leadTrackP  = trackP;
3638           leadTrackPt = trackPt;
3639           fFFHistosRecLeadingTrack->FillFF( leadTrackPt, jetPt, kTRUE, 0);
3640
3641           leadTrackV->SetPxPyPzE(leadTrackPx,leadTrackPy,leadTrackPz,leadTrackP);
3642           fIJHistosRecLeadingTrack->FillIntraJet( leadTrackV, jetV, 0);
3643         }
3644         fFFHistosRecLeading->FillFF( trackPt, leadTrackPt , incrementJetPt, 0);
3645         fIJHistosRecLeading->FillIntraJet( trackV, leadTrackV, 0);
3646
3647         delete trackV;
3648         delete jetV;
3649       }
3650
3651       // ff and ij for background study
3652       if(fBckgMode){
3653         TList* tracklistoutleading       = new TList();
3654         TList* tracklistoutleadingStat   = new TList();
3655         Double_t sumPtOutLeading     = 0.; 
3656         Double_t sumPtOutLeadingStat = 0.; 
3657         Double_t normFactorLeading   = 0.;
3658         GetOutNJetsTracks(1,fTracksRecCuts, tracklistoutleading, fJetsRecCuts, sumPtOutLeading);
3659         GetOutNJetsTracksStat(1,fTracksRecCuts, tracklistoutleadingStat, fJetsRecCuts, sumPtOutLeadingStat, normFactorLeading);
3660         fh1OutLeadingMult->Fill(tracklistoutleading->GetSize());
3661
3662         for(Int_t it=0; it<tracklistoutleading->GetSize(); ++it){
3663           Float_t trackPx = (dynamic_cast<AliVParticle*> (tracklistoutleading->At(it)))->Px();
3664           Float_t trackPy = (dynamic_cast<AliVParticle*> (tracklistoutleading->At(it)))->Py();
3665           Float_t trackPz = (dynamic_cast<AliVParticle*> (tracklistoutleading->At(it)))->Pz();
3666           Float_t trackP = (dynamic_cast<AliVParticle*> (tracklistoutleading->At(it)))->P();
3667           Float_t trackPt = (dynamic_cast<AliVParticle*> (tracklistoutleading->At(it)))->Pt();
3668           Float_t trackEta = (dynamic_cast<AliVParticle*> (tracklistoutleading->At(it)))->Eta();
3669           Float_t trackPhi = (dynamic_cast<AliVParticle*> (tracklistoutleading->At(it)))->Phi();
3670           Float_t jetPx = jet->Px();
3671           Float_t jetPy = jet->Py();
3672           Float_t jetPz = jet->Pz();
3673           Float_t jetP  = jet->P();
3674           Float_t jetPt = jet->Pt();
3675           TLorentzVector* trackV = new TLorentzVector();
3676           TLorentzVector *jetV = new TLorentzVector();
3677           trackV->SetPxPyPzE(trackPx,trackPy,trackPz,trackP);
3678           jetV->SetPxPyPzE(jetPx,jetPy,jetPz,jetP);
3679           
3680           Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
3681           
3682           fFFBckgLeadingHistosRecCuts->FillFF( trackPt, jetPt, incrementJetPt, 0);
3683           fIJBckgLeadingHistosRecCuts->FillIntraJet( trackV, jetV, 0 );
3684         
3685           fFFBckgLeadingHistosRecLeading->FillFF( trackPt, leadTrackPt , incrementJetPt, 0);
3686           fIJBckgLeadingHistosRecLeading->FillIntraJet( trackV, leadTrackV, 0 );
3687           
3688           // Fill track QA for background
3689           fQABckgLeadingTrackHistosRecCuts->FillTrackQA( trackEta, TVector2::Phi_0_2pi(trackPhi), trackPt);
3690           
3691           // All cases included
3692           if(nRecJetsCuts==1){
3693             fFFBckgHistosRecCuts->FillFF( trackPt, jetPt, incrementJetPt, 0);
3694             fIJBckgHistosRecCuts->FillIntraJet( trackV, jetV, 0 );
3695             
3696             fFFBckgHistosRecLeading->FillFF( trackPt, leadTrackPt , incrementJetPt, 0);
3697             fIJBckgHistosRecLeading->FillIntraJet( trackV, leadTrackV, 0 );
3698           }
3699           
3700           delete trackV;
3701           delete jetV;
3702         }
3703
3704         for(Int_t it=0; it<tracklistoutleadingStat->GetSize(); ++it){
3705           Float_t trackPx = (dynamic_cast<AliVParticle*> (tracklistoutleadingStat->At(it)))->Px();
3706           Float_t trackPy = (dynamic_cast<AliVParticle*> (tracklistoutleadingStat->At(it)))->Py();
3707           Float_t trackPz = (dynamic_cast<AliVParticle*> (tracklistoutleadingStat->At(it)))->Pz();
3708           Float_t trackP = (dynamic_cast<AliVParticle*> (tracklistoutleadingStat->At(it)))->P();
3709           Float_t trackPt = (dynamic_cast<AliVParticle*> (tracklistoutleadingStat->At(it)))->Pt();
3710           Float_t jetPx = jet->Px();
3711           Float_t jetPy = jet->Py();
3712           Float_t jetPz = jet->Pz();
3713           Float_t jetP  = jet->P();
3714           Float_t jetPt = jet->Pt();
3715           TLorentzVector* trackV = new TLorentzVector();
3716           TLorentzVector *jetV = new TLorentzVector();
3717           trackV->SetPxPyPzE(trackPx,trackPy,trackPz,trackP);
3718           jetV->SetPxPyPzE(jetPx,jetPy,jetPz,jetP);
3719           
3720           Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
3721           
3722           // Stat plots
3723           fFFBckgLeadingHistosStatRecCuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorLeading);
3724           fIJBckgLeadingHistosStatRecCuts->FillIntraJet( trackV, jetV, normFactorLeading);
3725           
3726           fFFBckgLeadingHistosStatRecLeading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactorLeading);
3727           fIJBckgLeadingHistosStatRecLeading->FillIntraJet( trackV, leadTrackV, normFactorLeading);
3728         
3729           // Fill track QA for background
3730           //fQABckgLeadingTrackHistosRecCuts->FillTrackQA( trackEta, TVector2::Phi_0_2pi(trackPhi), trackPt);
3731           
3732           // All cases included
3733           if(nRecJetsCuts==1){
3734             fFFBckgHistosStatRecCuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorLeading);
3735             fIJBckgHistosStatRecCuts->FillIntraJet( trackV, jetV, normFactorLeading );
3736             
3737             fFFBckgHistosStatRecLeading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactorLeading);
3738             fIJBckgHistosStatRecLeading->FillIntraJet( trackV, leadTrackV, normFactorLeading );
3739           }
3740           
3741           delete trackV;
3742           delete jetV;
3743         }
3744         
3745         Double_t sumPtPerp = 0.;
3746         TList* tracklistperp = new TList();
3747         GetOutPerpJetTracks(fTracksRecCuts,tracklistperp,jet,GetFFRadius(),sumPtPerp);
3748         fh1PerpMult->Fill(tracklistperp->GetSize());
3749         
3750         for(Int_t it=0; it<tracklistperp->GetSize(); ++it){
3751           Float_t trackPx = (dynamic_cast<AliVParticle*> (tracklistperp->At(it)))->Px();
3752           Float_t trackPy = (dynamic_cast<AliVParticle*> (tracklistperp->At(it)))->Py();
3753           Float_t trackPz = (dynamic_cast<AliVParticle*> (tracklistperp->At(it)))->Pz();
3754           Float_t trackP = (dynamic_cast<AliVParticle*> (tracklistperp->At(it)))->P();
3755           Float_t trackPt = (dynamic_cast<AliVParticle*> (tracklistperp->At(it)))->Pt();
3756           Float_t trackEta = (dynamic_cast<AliVParticle*> (tracklistperp->At(it)))->Eta();
3757           Float_t trackPhi = (dynamic_cast<AliVParticle*> (tracklistperp->At(it)))->Phi();
3758           Float_t jetPx = jet->Px();
3759           Float_t jetPy = jet->Py();
3760           Float_t jetPz = jet->Pz();
3761           Float_t jetP  = jet->P();
3762           Float_t jetPt = jet->Pt();
3763           TLorentzVector* trackV = new TLorentzVector();
3764           TLorentzVector *jetV = new TLorentzVector();
3765           trackV->SetPxPyPzE(trackPx,trackPy,trackPz,trackP);
3766           jetV->SetPxPyPzE(jetPx,jetPy,jetPz,jetP);
3767           
3768           Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
3769           
3770           fFFBckgPerpHistosRecCuts->FillFF( trackPt, jetPt, incrementJetPt, 0);
3771           fIJBckgPerpHistosRecCuts->FillIntraJet( trackV, jetV, 0 );
3772           
3773           fFFBckgPerpHistosRecLeading->FillFF( trackPt, leadTrackPt , incrementJetPt, 0);
3774           fIJBckgPerpHistosRecLeading->FillIntraJet( trackV, leadTrackV , 0);
3775           
3776           // Fill track QA for background
3777           fQABckgPerpTrackHistosRecCuts->FillTrackQA( trackEta, TVector2::Phi_0_2pi(trackPhi), trackPt);
3778           
3779           delete trackV;
3780           delete jetV;
3781         }
3782
3783         fh1Out2JetsMult->Fill(tracklistout2jets->GetSize());
3784         for(Int_t it=0; it<tracklistout2jets->GetSize(); ++it){
3785           Float_t trackPx = (dynamic_cast<AliVParticle*> (tracklistout2jets->At(it)))->Px();
3786           Float_t trackPy = (dynamic_cast<AliVParticle*> (tracklistout2jets->At(it)))->Py();
3787           Float_t trackPz = (dynamic_cast<AliVParticle*> (tracklistout2jets->At(it)))->Pz();
3788           Float_t trackP = (dynamic_cast<AliVParticle*> (tracklistout2jets->At(it)))->P();
3789           Float_t trackPt = (dynamic_cast<AliVParticle*> (tracklistout2jets->At(it)))->Pt();
3790           Float_t trackEta = (dynamic_cast<AliVParticle*> (tracklistout2jets->At(it)))->Eta();
3791           Float_t trackPhi = (dynamic_cast<AliVParticle*> (tracklistout2jets->At(it)))->Phi();
3792           Float_t jetPx = jet->Px();
3793           Float_t jetPy = jet->Py();
3794           Float_t jetPz = jet->Pz();
3795           Float_t jetP  = jet->P();
3796           Float_t jetPt = jet->Pt();
3797           TLorentzVector* trackV = new TLorentzVector();
3798           TLorentzVector *jetV = new TLorentzVector();
3799           trackV->SetPxPyPzE(trackPx,trackPy,trackPz,trackP);
3800           jetV->SetPxPyPzE(jetPx,jetPy,jetPz,jetP);
3801           
3802           Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
3803           
3804           fFFBckg2JetsHistosRecCuts->FillFF( trackPt, jetPt, incrementJetPt, 0);
3805           fIJBckg2JetsHistosRecCuts->FillIntraJet( trackV, jetV, 0 );
3806           
3807           fFFBckg2JetsHistosRecLeading->FillFF( trackPt, leadTrackPt , incrementJetPt, 0);
3808           fIJBckg2JetsHistosRecLeading->FillIntraJet( trackV, leadTrackV, 0 );
3809           
3810           fQABckg2JetsTrackHistosRecCuts->FillTrackQA( trackEta, TVector2::Phi_0_2pi(trackPhi), trackPt);
3811         
3812           // All cases included
3813           if(nRecJetsCuts==2){
3814             fFFBckgHistosRecCuts->FillFF( trackPt, jetPt, incrementJetPt, 0);
3815             fIJBckgHistosRecCuts->FillIntraJet( trackV, jetV, 0 );
3816             
3817             fFFBckgHistosRecLeading->FillFF( trackPt, leadTrackPt , incrementJetPt, 0);
3818             fIJBckgHistosRecLeading->FillIntraJet( trackV, leadTrackV, 0 );
3819           }
3820           
3821           delete trackV;
3822           delete jetV;
3823         }
3824
3825         for(Int_t it=0; it<tracklistout2jetsStat->GetSize(); ++it){
3826           Float_t trackPx = (dynamic_cast<AliVParticle*> (tracklistout2jetsStat->At(it)))->Px();
3827           Float_t trackPy = (dynamic_cast<AliVParticle*> (tracklistout2jetsStat->At(it)))->Py();
3828           Float_t trackPz = (dynamic_cast<AliVParticle*> (tracklistout2jetsStat->At(it)))->Pz();
3829           Float_t trackP = (dynamic_cast<AliVParticle*> (tracklistout2jetsStat->At(it)))->P();
3830           Float_t trackPt = (dynamic_cast<AliVParticle*> (tracklistout2jetsStat->At(it)))->Pt();
3831           Float_t jetPx = jet->Px();
3832           Float_t jetPy = jet->Py();
3833           Float_t jetPz = jet->Pz();
3834           Float_t jetP  = jet->P();
3835           Float_t jetPt = jet->Pt();
3836           TLorentzVector* trackV = new TLorentzVector();
3837           TLorentzVector *jetV = new TLorentzVector();
3838           trackV->SetPxPyPzE(trackPx,trackPy,trackPz,trackP);
3839           jetV->SetPxPyPzE(jetPx,jetPy,jetPz,jetP);
3840           
3841           Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
3842           
3843           fFFBckg2JetsHistosStatRecCuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor2Jets);
3844           fIJBckg2JetsHistosStatRecCuts->FillIntraJet( trackV, jetV, normFactor2Jets );
3845           
3846           fFFBckg2JetsHistosStatRecLeading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactor2Jets);
3847           fIJBckg2JetsHistosStatRecLeading->FillIntraJet( trackV, leadTrackV, normFactor2Jets );
3848           
3849           //fQABckg2JetsTrackHistosRecCuts->FillTrackQA( trackEta, TVector2::Phi_0_2pi(trackPhi), trackPt);
3850         
3851           // All cases included
3852           if(nRecJetsCuts==2){
3853             fFFBckgHistosStatRecCuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor2Jets);
3854             fIJBckgHistosStatRecCuts->FillIntraJet( trackV, jetV, normFactor2Jets );
3855             
3856             fFFBckgHistosStatRecLeading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactor2Jets);
3857             fIJBckgHistosStatRecLeading->FillIntraJet( trackV, leadTrackV, normFactor2Jets );
3858           }
3859           
3860           delete trackV;
3861           delete jetV;
3862         }
3863         
3864         fh1Out3JetsMult->Fill(tracklistout3jets->GetSize());
3865       
3866         for(Int_t it=0; it<tracklistout3jets->GetSize(); ++it){
3867           Float_t trackPx = (dynamic_cast<AliVParticle*> (tracklistout3jets->At(it)))->Px();
3868           Float_t trackPy = (dynamic_cast<AliVParticle*> (tracklistout3jets->At(it)))->Py();
3869           Float_t trackPz = (dynamic_cast<AliVParticle*> (tracklistout3jets->At(it)))->Pz();
3870           Float_t trackP = (dynamic_cast<AliVParticle*> (tracklistout3jets->At(it)))->P();
3871           Float_t trackPt = (dynamic_cast<AliVParticle*> (tracklistout3jets->At(it)))->Pt();
3872           Float_t trackEta = (dynamic_cast<AliVParticle*> (tracklistout3jets->At(it)))->Eta();
3873           Float_t trackPhi = (dynamic_cast<AliVParticle*> (tracklistout3jets->At(it)))->Phi();
3874           Float_t jetPx = jet->Px();
3875           Float_t jetPy = jet->Py();
3876           Float_t jetPz = jet->Pz();
3877           Float_t jetP  = jet->P();
3878           Float_t jetPt = jet->Pt();
3879           TLorentzVector* trackV = new TLorentzVector();
3880           TLorentzVector *jetV = new TLorentzVector();
3881           trackV->SetPxPyPzE(trackPx,trackPy,trackPz,trackP);
3882           jetV->SetPxPyPzE(jetPx,jetPy,jetPz,jetP);
3883           
3884           Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
3885         
3886           fFFBckg3JetsHistosRecCuts->FillFF( trackPt, jetPt, incrementJetPt, 0);
3887           fIJBckg3JetsHistosRecCuts->FillIntraJet( trackV, jetV, 0 );
3888           
3889           fFFBckg3JetsHistosRecLeading->FillFF( trackPt, leadTrackPt , incrementJetPt, 0);
3890           fIJBckg3JetsHistosRecLeading->FillIntraJet( trackV, leadTrackV, 0 );
3891           
3892           fQABckg3JetsTrackHistosRecCuts->FillTrackQA( trackEta, TVector2::Phi_0_2pi(trackPhi), trackPt);
3893           
3894           // All cases included
3895           if(nRecJetsCuts==3){
3896             fFFBckgHistosRecCuts->FillFF( trackPt, jetPt, incrementJetPt, 0);
3897             fIJBckgHistosRecCuts->FillIntraJet( trackV, jetV, 0 );
3898             
3899             fFFBckgHistosRecLeading->FillFF( trackPt, leadTrackPt , incrementJetPt, 0);
3900             fIJBckgHistosRecLeading->FillIntraJet( trackV, leadTrackV, 0 );
3901           }
3902           
3903           delete trackV;
3904           delete jetV;
3905           
3906       }
3907         
3908         for(Int_t it=0; it<tracklistout3jetsStat->GetSize(); ++it){
3909           Float_t trackPx = (dynamic_cast<AliVParticle*> (tracklistout3jetsStat->At(it)))->Px();
3910           Float_t trackPy = (dynamic_cast<AliVParticle*> (tracklistout3jetsStat->At(it)))->Py();
3911           Float_t trackPz = (dynamic_cast<AliVParticle*> (tracklistout3jetsStat->At(it)))->Pz();
3912           Float_t trackP = (dynamic_cast<AliVParticle*> (tracklistout3jetsStat->At(it)))->P();
3913           Float_t trackPt = (dynamic_cast<AliVParticle*> (tracklistout3jetsStat->At(it)))->Pt();
3914           Float_t jetPx = jet->Px();
3915           Float_t jetPy = jet->Py();
3916           Float_t jetPz = jet->Pz();
3917           Float_t jetP  = jet->P();
3918           Float_t jetPt = jet->Pt();
3919           TLorentzVector* trackV = new TLorentzVector();
3920           TLorentzVector *jetV = new TLorentzVector();
3921           trackV->SetPxPyPzE(trackPx,trackPy,trackPz,trackP);
3922           jetV->SetPxPyPzE(jetPx,jetPy,jetPz,jetP);
3923         
3924           Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
3925           
3926           fFFBckg3JetsHistosStatRecCuts->FillFF( trackPt, jetPt, incrementJetPt,normFactor3Jets);
3927           fIJBckg3JetsHistosStatRecCuts->FillIntraJet( trackV, jetV, normFactor3Jets);
3928           
3929           fFFBckg3JetsHistosStatRecLeading->FillFF( trackPt, leadTrackPt , incrementJetPt,normFactor3Jets);
3930           fIJBckg3JetsHistosStatRecLeading->FillIntraJet( trackV, leadTrackV, normFactor3Jets);
3931           
3932           //    fQABckg3JetsTrackHistosRecCuts->FillTrackQA( trackEta, TVector2::Phi_0_2pi(trackPhi), trackPt);
3933           
3934           // All cases included
3935           if(nRecJetsCuts==3){
3936             fFFBckgHistosStatRecCuts->FillFF( trackPt, jetPt, incrementJetPt,normFactor3Jets);
3937             fIJBckgHistosStatRecCuts->FillIntraJet( trackV, jetV, normFactor3Jets);
3938             
3939             fFFBckgHistosStatRecLeading->FillFF( trackPt, leadTrackPt , incrementJetPt,normFactor3Jets);
3940             fIJBckgHistosStatRecLeading->FillIntraJet( trackV, leadTrackV,normFactor3Jets );
3941           }
3942
3943           delete trackV;
3944           delete jetV;
3945         
3946         }
3947         
3948         delete tracklistoutleading;
3949         delete tracklistoutleadingStat;
3950         delete tracklistperp;
3951       } // end if(fBckgMode)
3952
3953       delete leadTrackV;
3954       delete jettracklist;
3955     }
3956   }
3957
3958   delete tracklistout2jets;
3959   delete tracklistout3jets;
3960   delete tracklistout2jetsStat;
3961   delete tracklistout3jetsStat;
3962
3963   for(Int_t ij=0; ij<nGenJets; ++ij){
3964
3965     AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsGen->At(ij));
3966     fQAJetHistosGen->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
3967     
3968     if(ij==0){ // leading jet
3969     
3970       fQAJetHistosGenLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
3971       
3972       TList* jettracklist = new TList();
3973       Double_t sumPt = 0.;
3974       Float_t leadTrackPx = 0.;
3975       Float_t leadTrackPy = 0.;
3976       Float_t leadTrackPz = 0.;
3977       Float_t leadTrackP  = 0.;
3978       Float_t leadTrackPt = 0.;
3979       TLorentzVector* leadTrackV = new TLorentzVector();
3980
3981       if(GetFFRadius()<=0){
3982         GetJetTracksTrackrefs(jettracklist, jet);
3983       } else {
3984         GetJetTracksPointing(fTracksGen, jettracklist, jet, GetFFRadius(), sumPt);
3985       }
3986       
3987       for(Int_t it=0; it<jettracklist->GetSize(); ++it){
3988         Float_t trackPx = (dynamic_cast<AliVParticle*>(jettracklist->At(it)))->Px();
3989         Float_t trackPy = (dynamic_cast<AliVParticle*>(jettracklist->At(it)))->Py();
3990         Float_t trackPz = (dynamic_cast<AliVParticle*>(jettracklist->At(it)))->Pz();
3991         Float_t trackP  = (dynamic_cast<AliVParticle*>(jettracklist->At(it)))->P();
3992         Float_t trackPt = (dynamic_cast<AliVParticle*>(jettracklist->At(it)))->Pt();
3993         Float_t jetPx = jet->Px();
3994         Float_t jetPy = jet->Py();
3995         Float_t jetPz = jet->Pz();
3996         Float_t jetP  = jet->P();
3997         Float_t jetPt = jet->Pt();
3998         TLorentzVector* trackV = new TLorentzVector();
3999         TLorentzVector  *jetV = new TLorentzVector();
4000         trackV->SetPxPyPzE(trackPx,trackPy,trackPz,trackP);
4001         jetV->SetPxPyPzE(jetPx,jetPy,jetPz,jetP);
4002
4003         Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4004
4005         fFFHistosGen->FillFF( trackPt, jetPt, incrementJetPt, 0);
4006         fIJHistosGen->FillIntraJet( trackV, jetV, 0);
4007         
4008         if(it==0){ 
4009           leadTrackPx = trackPx;
4010           leadTrackPy = trackPy;
4011           leadTrackPz = trackPz;
4012           leadTrackP  = trackP;
4013           leadTrackPt = trackPt;
4014           fFFHistosGenLeadingTrack->FillFF( leadTrackPt, jetPt, kTRUE, 0);
4015
4016           leadTrackV->SetPxPyPzE(leadTrackPx,leadTrackPy,leadTrackPz,leadTrackP);
4017           fIJHistosGenLeadingTrack->FillIntraJet( leadTrackV, jetV, 0);
4018         }
4019         fFFHistosGenLeading->FillFF( trackPt, leadTrackPt, incrementJetPt, 0);
4020         fIJHistosGenLeading->FillIntraJet( trackV, leadTrackV, 0);
4021
4022         delete trackV;
4023         delete jetV;
4024       }
4025       
4026       delete leadTrackV;
4027       delete jettracklist;
4028     }
4029   }
4030
4031   //_______ DiJet part _____________________________________________________
4032
4033   if (nRecJetsCuts > 1) 
4034   {
4035
4036     AliAODJet* jet1 = dynamic_cast<AliAODJet*>(fJetsRecCuts->At(0));
4037     AliAODJet* jet2 = dynamic_cast<AliAODJet*>(fJetsRecCuts->At(1));
4038     
4039     // DiJet deltaphi calculation
4040     Double_t phi1 = TVector2::Phi_0_2pi(jet1->Phi());
4041     Double_t phi2 = TVector2::Phi_0_2pi(jet2->Phi());
4042     Double_t deltaPhi = TMath::Abs(phi1-phi2); 
4043     if (deltaPhi > TMath::Pi() && deltaPhi < 2*TMath::Pi()) deltaPhi = 2*TMath::Pi() - deltaPhi;
4044     
4045     // DiJet CDF cut calculation
4046     Double_t et1     = TMath::Abs(jet1->E()*TMath::Sin(jet1->Theta()));
4047     Double_t et2     = TMath::Abs(jet2->E()*TMath::Sin(jet2->Theta()));
4048     Double_t sumEt   = et1 + et2;
4049     Double_t normEt1PlusEt2   = TMath::Sqrt(et1*et1+et2*et2+2*et1*et2*TMath::Cos(deltaPhi));
4050     Double_t ratio = (Double_t)(normEt1PlusEt2/sumEt);
4051     
4052     // DiJet events selection
4053     Bool_t positionCut       = 0;
4054     Bool_t positionEnergyCut = 0;
4055     Bool_t cdfCut            = 0; 
4056
4057     // Position cut :
4058     if (deltaPhi > fDiJetDeltaPhiCut) positionCut = 1;
4059     // Position-Energy cut :
4060     if ((deltaPhi > fDiJetDeltaPhiCut) && ((jet2->Pt()) >= fDiJetPtFractionCut*(jet1->Pt()))) positionEnergyCut = 1;
4061     // CDF cut :
4062     if (ratio < fDiJetCDFCut) cdfCut = 1;
4063     
4064     Int_t go = 0;
4065     
4066     if (fDiJetCut == 1 && positionCut == 1) go = 1;
4067     if (fDiJetCut == 2 && positionEnergyCut == 1) go = 1;
4068     if (fDiJetCut == 3 && cdfCut == 1) go = 1;
4069
4070     if (go)
4071       {
4072         Double_t deltaEta      = TMath::Abs(jet1->Eta()-jet2->Eta());
4073         Double_t deltaPt       = TMath::Abs(jet1->Pt()-jet2->Pt());
4074         Double_t meanEt        = (Double_t)((et1+et2)/2.);
4075         Double_t invariantMass = (Double_t)InvMass(jet1,jet2);
4076         
4077         Double_t  jetBin = GetDiJetBin(invariantMass, jet1->Pt(), meanEt, fDiJetKindBins);
4078
4079         if (jetBin > 0)
4080           {
4081             fQADiJetHistosRecCuts->FillDiJetQA(invariantMass, deltaPhi, deltaEta, deltaPt, jetBin);
4082             
4083             TList* jettracklist1 = new TList();
4084             Double_t sumPt1      = 0.;
4085             Float_t leadTrackPt1 = 0;
4086             
4087             TList* jettracklist2 = new TList();
4088             Double_t sumPt2      = 0.;
4089             Float_t leadTrackPt2 = 0;
4090             
4091             if(GetFFRadius()<=0)
4092               {
4093                 GetJetTracksTrackrefs(jettracklist1, jet1);
4094                 GetJetTracksTrackrefs(jettracklist2, jet2);
4095               }
4096             else
4097               {
4098                 GetJetTracksPointing(fTracksRecCuts, jettracklist1, jet1, GetFFRadius(), sumPt1);
4099                 GetJetTracksPointing(fTracksRecCuts, jettracklist2, jet2, GetFFRadius(), sumPt2);
4100               }
4101             
4102             Int_t nTracks = jettracklist1->GetSize(); 
4103             if (jettracklist1->GetSize() < jettracklist2->GetSize()) nTracks = jettracklist2->GetSize();
4104             
4105             for(Int_t it=0; it<nTracks; ++it)
4106               {
4107                 if (it < jettracklist1->GetSize())
4108                   { 
4109                     Float_t trackPt1 = (dynamic_cast<AliVParticle*> (jettracklist1->At(it)))->Pt();
4110                     Float_t jetPt1   = jet1->Pt();
4111                     
4112                     Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4113                     
4114                     fFFDiJetHistosRecCuts->FillDiJetFF(1, trackPt1, jetPt1, jetBin, incrementJetPt);
4115                     fFFDiJetHistosRecCuts->FillDiJetFF(0, trackPt1, jetPt1, jetBin, incrementJetPt);
4116                     
4117                     if (it == 0)
4118                       {
4119                         leadTrackPt1 = trackPt1;
4120                         
4121                         fFFDiJetHistosRecLeadingTrack->FillDiJetFF(1, leadTrackPt1, jetPt1, jetBin, kTRUE); 
4122                         fFFDiJetHistosRecLeadingTrack->FillDiJetFF(0, leadTrackPt1, jetPt1, jetBin, kTRUE); 
4123                       }
4124                     
4125                     fFFDiJetHistosRecLeading->FillDiJetFF(1, trackPt1, leadTrackPt1, jetBin, incrementJetPt); 
4126                     fFFDiJetHistosRecLeading->FillDiJetFF(0, trackPt1, leadTrackPt1, jetBin, incrementJetPt); 
4127                   }
4128                 
4129                 if (it < jettracklist2->GetSize())
4130                   { 
4131                     Float_t trackPt2   = (dynamic_cast<AliVParticle*>(jettracklist2->At(it)))->Pt();
4132                     Float_t jetPt2     = jet2->Pt();
4133                     
4134                     Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4135                     
4136                     fFFDiJetHistosRecCuts->FillDiJetFF(2, trackPt2, jetPt2, jetBin, incrementJetPt);
4137                     fFFDiJetHistosRecCuts->FillDiJetFF(0, trackPt2, jetPt2, jetBin, incrementJetPt);
4138                     
4139                     if (it == 0)
4140                       {
4141                         leadTrackPt2 = trackPt2;
4142                         
4143                         fFFDiJetHistosRecLeadingTrack->FillDiJetFF(2, leadTrackPt2, jetPt2, jetBin, kTRUE);
4144                         fFFDiJetHistosRecLeadingTrack->FillDiJetFF(0, leadTrackPt2, jetPt2, jetBin, kTRUE);
4145                       }
4146                     
4147                     fFFDiJetHistosRecLeading->FillDiJetFF(2, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
4148                     fFFDiJetHistosRecLeading->FillDiJetFF(0, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
4149                   }
4150               } // End loop on tracks
4151
4152             delete jettracklist1;
4153             delete jettracklist2;
4154
4155           } // End if(jetBin > 0)
4156         else { Printf("Jet bins for di-jet studies not set !");}
4157       } // End if(go)
4158   } // End if(nRecJets > 1)
4159
4160   if (nGenJets > 1)
4161   {
4162     AliAODJet* jet1 = dynamic_cast<AliAODJet*>(fJetsGen->At(0));
4163     AliAODJet* jet2 = dynamic_cast<AliAODJet*>(fJetsGen->At(1));
4164
4165     Double_t deltaPhi = 0;
4166     Double_t phi1 = TVector2::Phi_0_2pi(jet1->Phi());
4167     Double_t phi2 = TVector2::Phi_0_2pi(jet2->Phi());
4168     deltaPhi      = TMath::Abs(phi1-phi2); 
4169     if (deltaPhi > TMath::Pi() && deltaPhi < 2*TMath::Pi()) deltaPhi = 2*TMath::Pi() - deltaPhi;
4170
4171     Double_t et1            = TMath::Abs(jet1->E()*TMath::Sin(jet1->Theta()));
4172     Double_t et2            = TMath::Abs(jet2->E()*TMath::Sin(jet2->Theta()));
4173     Double_t sumEt          = et1 + et2;
4174     Double_t normEt1PlusEt2 = TMath::Sqrt(et1*et1+et2*et2+2*et1*et2*TMath::Cos(deltaPhi));
4175     Double_t ratio          = (Double_t)(normEt1PlusEt2/sumEt);
4176
4177     // DiJet events selection
4178     Bool_t positionCut       = 0;
4179     Bool_t positionEnergyCut = 0;
4180     Bool_t cdfCut            = 0; 
4181
4182     // Position cut :
4183     if (deltaPhi > fDiJetDeltaPhiCut) positionCut = 1;
4184     // Position-Energy cut :
4185     if ((deltaPhi > fDiJetDeltaPhiCut) && ((jet2->Pt()) >= fDiJetPtFractionCut*(jet1->Pt()))) positionEnergyCut = 1;
4186     // CDF cut :
4187     if (ratio < fDiJetCDFCut) cdfCut = 1;    
4188
4189     Int_t go = 0;
4190
4191     if (fDiJetCut == 1 && positionCut == 1) go = 1;
4192     if (fDiJetCut == 2 && positionEnergyCut == 1) go = 1;
4193     if (fDiJetCut == 3 && cdfCut == 1) go = 1;
4194
4195     if (go)
4196     {
4197       Double_t deltaEta      = TMath::Abs(jet1->Eta()-jet2->Eta());
4198       Double_t deltaPt       = TMath::Abs(jet1->Pt()-jet2->Pt());
4199       Double_t meanEt        = (Double_t)((et1+et2)/2.);
4200       Double_t invariantMass = (Double_t)InvMass(jet1,jet2);
4201
4202       Double_t jetBin = GetDiJetBin(invariantMass, jet1->Pt(), meanEt, fDiJetKindBins);
4203
4204       if(jetBin > 0)
4205       {
4206         fQADiJetHistosGen->FillDiJetQA(invariantMass, deltaPhi, deltaEta, deltaPt, jetBin);
4207
4208         TList* jettracklist1 = new TList();
4209         Double_t sumPt1 = 0.;
4210         Float_t leadTrackPt1 = 0.;
4211
4212         TList* jettracklist2 = new TList();
4213         Double_t sumPt2 = 0.;
4214         Float_t leadTrackPt2 = 0.;
4215       
4216         if(GetFFRadius()<=0)
4217         {
4218           GetJetTracksTrackrefs(jettracklist1, jet1);
4219           GetJetTracksTrackrefs(jettracklist2, jet2);
4220         }
4221         else
4222         {
4223           GetJetTracksPointing(fTracksGen, jettracklist1, jet1, GetFFRadius(), sumPt1);
4224           GetJetTracksPointing(fTracksGen, jettracklist2, jet2, GetFFRadius(), sumPt2);
4225         }
4226       
4227         Int_t nTracks = jettracklist1->GetSize(); 
4228         if (jettracklist1->GetSize() < jettracklist2->GetSize()) nTracks = jettracklist2->GetSize();
4229
4230         for(Int_t it=0; it<nTracks; ++it)
4231         {
4232           if (it < jettracklist1->GetSize())
4233           { 
4234             Float_t trackPt1 = (dynamic_cast<AliVParticle*>(jettracklist1->At(it)))->Pt();
4235             Float_t jetPt1 = jet1->Pt();
4236
4237             Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4238
4239             fFFDiJetHistosGen->FillDiJetFF( 1, trackPt1, jetPt1, jetBin, incrementJetPt);
4240             fFFDiJetHistosGen->FillDiJetFF( 0, trackPt1, jetPt1, jetBin, incrementJetPt);
4241
4242             if(it==0)
4243             { 
4244               leadTrackPt1 = trackPt1;
4245
4246               fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 1, leadTrackPt1, jetPt1, jetBin, kTRUE);
4247               fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 0, leadTrackPt1, jetPt1, jetBin, kTRUE);
4248             }
4249
4250             fFFDiJetHistosGenLeading->FillDiJetFF( 1, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
4251             fFFDiJetHistosGenLeading->FillDiJetFF( 0, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
4252           }
4253           
4254           if (it < jettracklist2->GetSize())
4255           { 
4256             Float_t trackPt2 = (dynamic_cast<AliVParticle*>(jettracklist2->At(it)))->Pt();
4257             Float_t jetPt2 = jet2->Pt();
4258
4259             Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4260
4261             fFFDiJetHistosGen->FillDiJetFF( 2, trackPt2, jetPt2, jetBin, incrementJetPt);
4262             fFFDiJetHistosGen->FillDiJetFF( 0, trackPt2, jetPt2, jetBin, incrementJetPt);
4263         
4264             if (it==0)
4265             { 
4266               leadTrackPt2 = trackPt2;
4267
4268               fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 2, leadTrackPt2, jetPt2, jetBin, kTRUE);
4269               fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 0, leadTrackPt2, jetPt2, jetBin, kTRUE);
4270             }
4271
4272             fFFDiJetHistosGenLeading->FillDiJetFF( 2, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
4273             fFFDiJetHistosGenLeading->FillDiJetFF( 0, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
4274           }
4275         } // End loop on tracks
4276
4277         delete jettracklist1;
4278         delete jettracklist2;
4279
4280       } // End if(jetBin > 0)
4281       else { Printf("Jet bins for di-jet studies not set !");}
4282     } // End if (go)
4283   } // End if(nGenJets > 1)
4284
4285   
4286   // ____ efficiency _______________________________
4287
4288   // arrays for generated particles: reconstructed AOD track index, isPrimary flag
4289   TArrayI indexAODTr; 
4290   TArrayS isGenPrim; 
4291   
4292   // array for reconcstructed AOD tracks: generated particle index
4293   TArrayI indexMCTr; 
4294   
4295   Int_t  nTracksAODMCCharged = GetListOfTracks(fTracksAODMCCharged, kTrackAODMCCharged);
4296   if(fDebug>2)Printf("%s:%d selected AODMC tracks: %d ",(char*)__FILE__,__LINE__,nTracksAODMCCharged);
4297   
4298   Int_t  nTracksRecQualityCuts = GetListOfTracks(fTracksRecQualityCuts, kTrackAODQualityCuts);
4299   if(fDebug>2)Printf("%s:%d selected rec tracks quality after cuts, full acceptance/pt : %d ",(char*)__FILE__,__LINE__,nTracksRecQualityCuts);
4300   
4301   // associate gen and rec tracks, store indices in TArrays 
4302   AssociateGenRec(fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,indexMCTr,isGenPrim);
4303   
4304   // single track eff
4305   FillSingleTrackRecEffHisto(fhnSingleTrackRecEffHisto,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim);
4306
4307   // jet track eff
4308   for(Int_t ij=0; ij<nRecEffJets; ++ij){ 
4309     
4310     AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRecEff->At(ij));
4311     
4312     if(ij==0){ // leading jet
4313       
4314       TList* jettracklistGen = new TList();
4315       Double_t sumPtGen = 0.;
4316
4317       GetJetTracksPointing(fTracksGen, jettracklistGen, jet, GetFFRadius(), sumPtGen); // for efficiency: gen tracks from pointing with gen/rec jet
4318
4319       TList* jettracklistRec = new TList();
4320       Double_t sumPtRec = 0;
4321
4322       GetJetTracksPointing(fTracksRecCuts,jettracklistRec, jet, GetFFRadius(), sumPtRec); // bin efficiency in jet pt bins using rec tracks  
4323
4324       
4325       Double_t jetEta   = jet->Eta();
4326       Double_t jetPhi   = TVector2::Phi_0_2pi(jet->Phi());
4327       Double_t jetPtGen = sumPtGen;
4328       
4329       fQAJetHistosRecEffLeading->FillJetQA( jetEta, jetPhi, jetPtGen );
4330       FillJetTrackRecEffHisto(fhnJetTrackRecEffHisto,jetPhi,jetEta,jetPtGen,sumPtRec,jettracklistGen,fTracksAODMCCharged,indexAODTr,isGenPrim);
4331       
4332       delete jettracklistGen;
4333     }
4334   }
4335    
4336   //___________________
4337   
4338   fTracksRec->Clear();
4339   fTracksRecCuts->Clear();
4340   fTracksGen->Clear();
4341   fTracksAODMCCharged->Clear();
4342   fTracksRecQualityCuts->Clear();
4343
4344   fJetsRec->Clear();
4345   fJetsRecCuts->Clear();
4346   fJetsGen->Clear();
4347   fJetsRecEff->Clear();
4348
4349   //Post output data.
4350   PostData(1, fCommonHistList);
4351   
4352 }
4353
4354 //________________________________________________________________________________________
4355 Double_t AliAnalysisTaskFragmentationFunction::InvMass(const AliAODJet* jet1, const AliAODJet* jet2)
4356 {
4357   // cald DiJet inv mass
4358
4359   Double_t invMass = 0.;
4360   invMass = TMath::Sqrt(pow(jet1->E()+jet2->E(),2) - pow(jet1->Px()+jet2->Px(),2) - 
4361                         pow(jet1->Py()+jet2->Py(),2) - pow(jet1->Pz()+jet2->Pz(),2));
4362
4363   return invMass;
4364
4365 }
4366
4367 //________________________________________________________________________________________
4368 Double_t AliAnalysisTaskFragmentationFunction::GetDiJetBin(Double_t invMass, Double_t leadingJetPt, Double_t EtMean, Int_t kindBins)
4369 {
4370   // calc DiJet bin according to kindBins parameter
4371
4372   Double_t jetBinOk = 0.;
4373   Double_t jetBin = 0.;
4374
4375   Float_t stepInvMass = (fDiJetJetInvMassMax - fDiJetJetInvMassMin)/fDiJetNBinsJetInvMass;
4376   Float_t stepPt = (fDiJetJetPtMax - fDiJetJetPtMin)/fDiJetNBinsJetPt;
4377
4378   if (kindBins == 1)
4379     {
4380       for(Int_t i=0; i<fDiJetNBinsJetInvMass; ++i)
4381         {
4382           jetBin = fDiJetJetInvMassMin + i*stepInvMass + stepInvMass/2.;
4383           if(((fDiJetJetInvMassMin+i*stepInvMass) <= invMass) &&
4384              (fDiJetJetInvMassMin + (i+1)*stepInvMass) > invMass) {jetBinOk = jetBin; break;}
4385           else jetBinOk = -1.;
4386         }
4387     }
4388   else if (kindBins == 3)
4389     {
4390       for(Int_t i=0; i<fDiJetNBinsJetPt; ++i)
4391         {
4392           jetBin = fDiJetJetPtMin + i*stepPt + stepPt/2.;
4393           if(((fDiJetJetPtMin+i*stepPt) <= EtMean) &&
4394              (fDiJetJetPtMin + (i+1)*stepPt) > EtMean) {jetBinOk = jetBin; break;}
4395           else jetBinOk = -1.;
4396         }
4397     }
4398   else if (kindBins == 2)
4399     {
4400       for(Int_t i=0; i<fDiJetNBinsJetPt; ++i)
4401         {
4402           jetBin = fDiJetJetPtMin + i*stepPt + stepPt/2.;
4403           if(((fDiJetJetPtMin+i*stepPt) <= leadingJetPt) &&
4404              (fDiJetJetPtMin + (i+1)*stepPt) > leadingJetPt) {jetBinOk = jetBin; break;}
4405           else jetBinOk = -1.;
4406         }
4407     }
4408   else {Printf("WARNING: kindBins wrongly set ! Please make sure to call SetKindSlices() and set the kind parameter to 1, 2 or 3.\n");}
4409
4410   return jetBinOk;
4411
4412 }
4413
4414
4415 //______________________________________________________________
4416 void AliAnalysisTaskFragmentationFunction::Terminate(Option_t *) 
4417 {
4418   // terminated
4419
4420   if(fDebug > 1) printf("AliAnalysisTaskFragmentationFunction::Terminate() \n");
4421 }  
4422
4423 //_________________________________________________________________________________
4424 Int_t AliAnalysisTaskFragmentationFunction::GetListOfTracks(TList *list, Int_t type)
4425 {
4426   // fill list of tracks selected according to type
4427
4428   if(fDebug > 2) Printf("%s:%d Selecting tracks with %d", (char*)__FILE__,__LINE__,type);
4429   
4430   if(!list){
4431     if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
4432     return -1;
4433   }
4434
4435   if(type==kTrackUndef) return 0;
4436   
4437   Int_t iCount = 0;
4438   if(type==kTrackAODCuts || type==kTrackAODQualityCuts || type==kTrackAOD){
4439
4440     // all rec. tracks, esd filter mask, eta range
4441     if(!fAOD) return -1;
4442     
4443     for(Int_t it=0; it<fAOD->GetNumberOfTracks(); ++it){
4444       AliAODTrack *tr = fAOD->GetTrack(it);
4445       
4446       if(type == kTrackAODCuts || type==kTrackAODQualityCuts ){
4447         if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask)))   continue;
4448         if(type == kTrackAODCuts){
4449           if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
4450           if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
4451           if(tr->Pt()  < fTrackPtCut) continue;
4452         }
4453       }
4454       list->Add(tr);
4455       iCount++;
4456     }
4457   }
4458   else if (type==kTrackKineAll || type==kTrackKineCharged || type==kTrackKineChargedAcceptance){
4459     // kine particles, all or rather charged
4460     if(!fMCEvent) return iCount;
4461     
4462     for(Int_t it=0; it<fMCEvent->GetNumberOfTracks(); ++it){
4463       AliMCParticle* part = (AliMCParticle*) fMCEvent->GetTrack(it);
4464       
4465       if(type == kTrackKineCharged || type == kTrackKineChargedAcceptance){
4466         if(part->Charge()==0) continue;
4467         
4468         if(type == kTrackKineChargedAcceptance && 
4469            (       part->Eta() < fTrackEtaMin
4470                 || part->Eta() > fTrackEtaMax
4471                 || part->Phi() < fTrackPhiMin
4472                 || part->Phi() > fTrackPhiMax 
4473                 || part->Pt()  < fTrackPtCut)) continue;
4474       }
4475       
4476       list->Add(part);
4477       iCount++;
4478     }
4479   }
4480   else if (type==kTrackAODMCCharged || type==kTrackAODMCAll || type==kTrackAODMCChargedAcceptance) {
4481     // MC particles (from AOD), physical primaries, all or rather charged or rather charged within acceptance
4482     if(!fAOD) return -1;
4483     
4484     TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
4485     if(!tca)return iCount;
4486     
4487     for(int it=0; it<tca->GetEntriesFast(); ++it){
4488       AliAODMCParticle *part = dynamic_cast<AliAODMCParticle*>(tca->At(it));
4489       if(!part->IsPhysicalPrimary())continue;
4490       
4491       if (type==kTrackAODMCCharged || type==kTrackAODMCChargedAcceptance){
4492         if(part->Charge()==0) continue;
4493         if(type==kTrackAODMCChargedAcceptance && 
4494            (     part->Eta() > fTrackEtaMax
4495               || part->Eta() < fTrackEtaMin
4496               || part->Phi() > fTrackPhiMax
4497               || part->Phi() < fTrackPhiMin
4498               || part->Pt()  < fTrackPtCut)) continue;
4499       }
4500       
4501       list->Add(part);
4502       iCount++;
4503     }
4504   }
4505   
4506   list->Sort();
4507   return iCount;
4508   
4509 }
4510 // _______________________________________________________________________________
4511 Int_t AliAnalysisTaskFragmentationFunction::GetListOfJets(TList *list, Int_t type)
4512 {
4513   // fill list of jets selected according to type
4514   
4515   if(!list){
4516     if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
4517     return -1;
4518   }
4519
4520   if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
4521
4522     if(fBranchRecJets.Length()==0){
4523       Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
4524       if(fDebug>1)fAOD->Print();
4525       return 0;
4526     }
4527
4528     TClonesArray *aodRecJets = new TClonesArray();
4529     if(fBranchRecJets.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAOD->FindListObject(fBranchRecJets.Data()));\r
4530     if(!aodRecJets)             aodRecJets = dynamic_cast<TClonesArray*>(fAOD->GetList()->FindObject(fBranchRecJets.Data()));\r
4531
4532     if(!aodRecJets){
4533       if(fBranchRecJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecJets.Data());
4534
4535       if(fDebug>1)fAOD->Print();
4536       return 0;
4537     }
4538
4539     Int_t nRecJets = 0;
4540     
4541     for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
4542
4543       AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
4544       if(!tmp) continue;
4545         
4546       if( tmp->Pt() < fJetPtCut ) continue;
4547       if( type == kJetsRecAcceptance &&
4548           (    tmp->Eta() < fJetEtaMin
4549             || tmp->Eta() > fJetEtaMax
4550             || tmp->Phi() < fJetPhiMin
4551             || tmp->Phi() > fJetPhiMax )) continue;
4552       
4553       list->Add(tmp);
4554           
4555       nRecJets++;
4556     }
4557
4558     list->Sort();
4559     return nRecJets;
4560     delete aodRecJets;
4561   }
4562   else if(type == kJetsKine || type == kJetsKineAcceptance){
4563     
4564     // generated jets
4565     Int_t nGenJets = 0;
4566     
4567     if(!fMCEvent){
4568       if(fDebug>1) Printf("%s:%d no mcEvent",(char*)__FILE__,__LINE__);
4569       return 0;
4570     }
4571    
4572     AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
4573     AliGenPythiaEventHeader*  pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
4574     AliGenHijingEventHeader*  hijingGenHeader = 0x0;
4575
4576     if(!pythiaGenHeader){
4577       hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
4578       
4579       if(!hijingGenHeader){
4580          Printf("%s:%d no pythiaGenHeader or hijingGenHeader found", (char*)__FILE__,__LINE__);
4581          return 0;
4582       }else{
4583          TLorentzVector mom[4];
4584          AliAODJet* jet[4];
4585          hijingGenHeader->GetJets(mom[0], mom[1], mom[2], mom[3]);
4586
4587          for(Int_t i=0; i<2; ++i){
4588             if(!mom[i].Pt()) continue;
4589             jet[i] = new AliAODJet(mom[i]);
4590
4591             if( type == kJetsKineAcceptance &&
4592                 (    jet[i]->Eta() < fJetEtaMin
4593                   || jet[i]->Eta() > fJetEtaMax
4594                   || jet[i]->Phi() < fJetPhiMin
4595                   || jet[i]->Phi() > fJetPhiMax )) continue;
4596
4597             list->Add(jet[i]);
4598             nGenJets++;
4599          }
4600          list->Sort();
4601          return nGenJets;
4602       }
4603     }
4604     
4605     // fetch the pythia generated jets
4606     for(int ip=0; ip<pythiaGenHeader->NTriggerJets(); ++ip){
4607       
4608       Float_t p[4];
4609       AliAODJet *jet = new AliAODJet();
4610       pythiaGenHeader->TriggerJet(ip, p);
4611       jet->SetPxPyPzE(p[0], p[1], p[2], p[3]);
4612
4613       if( type == kJetsKineAcceptance &&
4614           (    jet->Eta() < fJetEtaMin
4615             || jet->Eta() > fJetEtaMax
4616             || jet->Phi() < fJetPhiMin
4617             || jet->Phi() > fJetPhiMax )) continue;
4618       
4619       list->Add(jet);
4620       nGenJets++;
4621     }
4622     list->Sort();
4623     return nGenJets;
4624   }
4625   else if(type == kJetsGen || type == kJetsGenAcceptance ){
4626
4627     if(fBranchGenJets.Length()==0){
4628       if(fDebug>1) Printf("%s:%d no gen jet branch specified", (char*)__FILE__,__LINE__);
4629       return 0;
4630     }
4631     
4632     TClonesArray *aodGenJets = new TClonesArray();
4633     if(fBranchGenJets.Length()) aodGenJets = dynamic_cast<TClonesArray*>(fAOD->FindListObject(fBranchGenJets.Data()));\r
4634     if(!aodGenJets)             aodGenJets = dynamic_cast<TClonesArray*>(fAOD->GetList()->FindObject(fBranchGenJets.Data()));\r
4635
4636     if(!aodGenJets){
4637       if(fDebug>0){
4638         if(fBranchGenJets.Length())         Printf("%s:%d Generated jet branch %s not found",(char*)__FILE__,__LINE__,fBranchGenJets.Data());
4639       }
4640       if(fDebug>1)fAOD->Print();
4641       return 0;
4642     }
4643
4644     Int_t nGenJets = 0;
4645     
4646     for(Int_t ig=0; ig<aodGenJets->GetEntries(); ++ig){
4647           
4648       AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodGenJets->At(ig));
4649       if(!tmp) continue;
4650           
4651       if( tmp->Pt() < fJetPtCut ) continue;
4652       if( type == kJetsGenAcceptance &&
4653           (    tmp->Eta() < fJetEtaMin
4654             || tmp->Eta() > fJetEtaMax
4655             || tmp->Phi() < fJetPhiMin
4656             || tmp->Phi() > fJetPhiMax )) continue;
4657       
4658       list->Add(tmp);
4659       
4660       nGenJets++;
4661     }
4662     list->Sort();
4663     return nGenJets;
4664     delete aodGenJets;
4665   } 
4666   else{
4667     if(fDebug>0)Printf("%s:%d no such type %d",(char*)__FILE__,__LINE__,type);
4668     return 0;
4669   }
4670 }
4671
4672 // _________________________________________________________________________________________________________
4673 void AliAnalysisTaskFragmentationFunction::SetProperties(THnSparse* h,const Int_t dim, const char** labels)
4674 {
4675   //Set properties of THnSparse 
4676
4677   for(Int_t i=0; i<dim; i++){
4678
4679     h->GetAxis(i)->SetTitle(labels[i]);
4680     h->GetAxis(i)->SetTitleColor(1);
4681   }
4682 }
4683
4684 // __________________________________________________________________________________________
4685 void AliAnalysisTaskFragmentationFunction::SetProperties(TH1* h,const char* x, const char* y)
4686 {
4687   //Set properties of histos (x and y title)
4688
4689   h->SetXTitle(x);
4690   h->SetYTitle(y);
4691   h->GetXaxis()->SetTitleColor(1);
4692   h->GetYaxis()->SetTitleColor(1);
4693 }
4694
4695 // _________________________________________________________________________________________________________
4696 void AliAnalysisTaskFragmentationFunction::SetProperties(TH2* h,const char* x, const char* y, const char* z)
4697 {
4698   //Set properties of histos (x,y and z title)
4699
4700   h->SetXTitle(x);
4701   h->SetYTitle(y);
4702   h->SetZTitle(z);
4703   h->GetXaxis()->SetTitleColor(1);
4704   h->GetYaxis()->SetTitleColor(1);
4705   h->GetZaxis()->SetTitleColor(1);
4706 }
4707
4708 // ________________________________________________________________________________________________________________________________________________________
4709 void AliAnalysisTaskFragmentationFunction::GetJetTracksPointing(TList* inputlist, TList* outputlist, const AliAODJet* jet, const Double_t radius,Double_t& sumPt)
4710 {
4711   // fill list of tracks in cone around jet axis  
4712
4713   sumPt = 0;
4714
4715   Double_t jetMom[3];
4716   jet->PxPyPz(jetMom);
4717   TVector3 jet3mom(jetMom);
4718
4719   for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
4720
4721     AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
4722
4723     Double_t trackMom[3];
4724     track->PxPyPz(trackMom);
4725     TVector3 track3mom(trackMom);
4726
4727     Double_t dR = jet3mom.DeltaR(track3mom);
4728
4729     if(dR<radius){
4730
4731       outputlist->Add(track);
4732       
4733       sumPt += track->Pt();
4734     }
4735   }
4736   
4737   outputlist->Sort();
4738 }
4739
4740 // ___________________________________________________________________________________________
4741 void AliAnalysisTaskFragmentationFunction::GetJetTracksTrackrefs(TList* list, const AliAODJet* jet)
4742 {
4743   // list of jet tracks from trackrefs
4744   
4745   Int_t nTracks = jet->GetRefTracks()->GetEntriesFast();
4746
4747   for (Int_t itrack=0; itrack<nTracks; itrack++) {
4748     
4749     AliVParticle* track = dynamic_cast<AliVParticle*>(jet->GetRefTracks()->At(itrack));
4750     if(!track){
4751       AliError("expected ref track not found ");
4752       continue;
4753     }
4754         
4755     list->Add(track);
4756   }
4757   
4758   list->Sort();
4759 }
4760
4761 // _ ________________________________________________________________________________________________________________________________
4762 void  AliAnalysisTaskFragmentationFunction::AssociateGenRec(TList* tracksAODMCCharged,TList* tracksRec, TArrayI& indexAODTr,TArrayI& indexMCTr,TArrayS& isGenPrim)
4763 {
4764   // associate generated and reconstructed tracks, fill TArrays of list indices
4765
4766
4767   Int_t nTracksRec  = tracksRec->GetSize();
4768   Int_t nTracksGen  = tracksAODMCCharged->GetSize();
4769   TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
4770
4771   if(!nTracksGen) return;
4772   if(!tca)        return;
4773   
4774   // set size
4775   indexAODTr.Set(nTracksGen);
4776   indexMCTr.Set(nTracksRec);
4777   isGenPrim.Set(nTracksGen);
4778
4779   indexAODTr.Reset(-1);
4780   indexMCTr.Reset(-1);
4781   isGenPrim.Reset(0);
4782
4783   // loop over reconstructed tracks, get generated track 
4784
4785   for(Int_t iRec=0; iRec<nTracksRec; iRec++){ 
4786       
4787     AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec)); 
4788
4789     Int_t label = TMath::Abs(rectrack->GetLabel());
4790
4791     // find MC track in our list
4792     AliAODMCParticle* gentrack = 0x0;
4793     if(label>=0) gentrack = dynamic_cast<AliAODMCParticle*> (tca->At(label));
4794
4795     Int_t listIndex = -1;
4796     if(gentrack) listIndex = tracksAODMCCharged->IndexOf(gentrack);
4797
4798     if(listIndex>=0){
4799
4800       indexAODTr[listIndex] = iRec;
4801       indexMCTr[iRec]       = listIndex;
4802     }
4803   } 
4804
4805
4806   // define primary sample for reconstruction efficiency
4807
4808   for(Int_t iGen=0; iGen<nTracksGen; iGen++){
4809
4810     AliAODMCParticle* gentrack =  dynamic_cast<AliAODMCParticle*> (tracksAODMCCharged->At(iGen));
4811
4812     Int_t pdg = gentrack->GetPdgCode();    
4813
4814     // 211 - pi, 2212 - proton, 321 - Kaon, 11 - electron, 13 - muon
4815     if(TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || 
4816        TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13){
4817       
4818       isGenPrim[iGen] = kTRUE;
4819     }
4820   }
4821 }
4822
4823 // _____________________________________________________________________________________________________________________________________________
4824 void AliAnalysisTaskFragmentationFunction::FillSingleTrackRecEffHisto(THnSparse* histo, TList* tracksGen, const TList* tracksRec,
4825                                                                       const TArrayI& indexAODTr, const TArrayS& isGenPrim){
4826
4827   // fill THnSparse for single track reconstruction efficiency
4828   
4829   Int_t nTracksGen  = tracksGen->GetSize();
4830
4831   if(!nTracksGen) return;
4832
4833   for(Int_t iGen=0; iGen<nTracksGen; iGen++){
4834
4835     if(isGenPrim[iGen] != 1) continue; // select primaries
4836
4837     AliAODMCParticle* gentrack =  dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
4838     
4839     Double_t ptGen  = gentrack->Pt();
4840     Double_t etaGen = gentrack->Eta();
4841     Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
4842
4843     // apply same acc & pt cuts as for FF 
4844     // could in principle also be done setting THNsparse axis limits before projecting, 
4845     // but then the binning needs to be fine grained enough 
4846
4847     if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
4848     if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
4849     if(ptGen  < fTrackPtCut) continue;
4850
4851     Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track 
4852     Double_t isRec =  0;
4853     Double_t ptRec = -1;
4854
4855     if(iRec>=0){
4856
4857       AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec)); 
4858       ptRec = rectrack->Pt();
4859       isRec = 1;
4860     }
4861
4862     Double_t entries[5] = {phiGen,etaGen,ptGen,ptRec,isRec};
4863     histo->Fill(entries);
4864   }
4865 }
4866
4867 // ______________________________________________________________________________________________________________________________________________________
4868  void AliAnalysisTaskFragmentationFunction::FillJetTrackRecEffHisto(THnSparse* histo,Double_t jetPhi, Double_t jetEta, Double_t jetPtGen, Double_t jetPtRec, TList* jetTrackList, 
4869                                                                     TList* tracksGen, const TArrayI& indexAODTr, const TArrayS& isGenPrim)
4870 {
4871   // fill THnSparse for jet track reconstruction efficiency
4872
4873   Int_t nTracksJet = jetTrackList->GetSize(); // list with AODMC tracks
4874
4875   if(!nTracksJet) return; 
4876
4877   for(Int_t iTr=0; iTr<nTracksJet; iTr++){
4878
4879     AliAODMCParticle* gentrack =  dynamic_cast<AliAODMCParticle*> (jetTrackList->At(iTr));
4880
4881     // find jet track in gen tracks list
4882     Int_t iGen = tracksGen->IndexOf(gentrack); 
4883
4884     if(iGen<0){
4885       if(fDebug>0) Printf("%s:%d gen jet track not found ",(char*)__FILE__,__LINE__);
4886       continue;
4887     }
4888
4889     if(isGenPrim[iGen] != 1) continue; // select primaries
4890     
4891     Double_t ptGen  = gentrack->Pt();
4892     Double_t etaGen = gentrack->Eta();
4893     Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
4894
4895     // apply same acc & pt cuts as for FF 
4896     // could in principle also be done setting THNsparse axis limits before projecting, 
4897     // but then the binning needs to be fine grained enough 
4898
4899     if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
4900     if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
4901     if(ptGen  < fTrackPtCut) continue;
4902
4903     Double_t z = ptGen / jetPtGen;
4904     Double_t xi = 0;
4905     if(z>0) xi = TMath::Log(1/z);
4906
4907     Double_t isRec =  0;
4908     Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track 
4909     if(iRec>=0) isRec = 1;
4910
4911     Double_t entries[8] = {jetPhi,jetEta,jetPtGen,jetPtRec,ptGen,z,xi,isRec};
4912     histo->Fill(entries);
4913   }
4914 }
4915
4916 // ________________________________________________________________________________________________________________________________________________________
4917 void AliAnalysisTaskFragmentationFunction::GetOutPerpJetTracks(TList* inputlist, TList* outputlist, AliAODJet* jet, Double_t radius,Double_t& sumPt)
4918 {
4919   // List of tracks in cone perpendicular to the jet azimuthal direction
4920
4921   Double_t jetMom[3];
4922   jet->PxPyPz(jetMom);
4923   TVector3 jet3mom(jetMom);
4924   // Rotate phi and keep eta unchanged
4925   Double_t ptPerp = jet3mom.Pt();
4926   Double_t etaPerp = jet3mom.Eta();
4927   Double_t phiPerp = TVector2::Phi_0_2pi(jet3mom.Phi()) + TMath::Pi()/2;
4928   if(phiPerp > 2*TMath::Pi()) phiPerp = phiPerp - 2*TMath::Pi();
4929   TVector3 vPerp;
4930   vPerp.SetPtEtaPhi(ptPerp,etaPerp,phiPerp);
4931
4932   // Take orthogonal vector to jet direction
4933   // TVector3 vPerp(jet3mom.Orthogonal());
4934
4935   for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
4936
4937     AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
4938
4939     Double_t trackMom[3];
4940     track->PxPyPz(trackMom);
4941     TVector3 track3mom(trackMom);
4942
4943     Double_t dR = vPerp.DeltaR(track3mom);
4944     if(dR<=radius){
4945       outputlist->Add(track);
4946       sumPt += track->Pt();
4947     }
4948   }
4949
4950 }
4951
4952 // ________________________________________________________________________________________________________________________________________________________
4953 void AliAnalysisTaskFragmentationFunction::GetOutNJetsTracks(Int_t nCases, TList* inputlist, TList* outputlist, TList* jetlist, Double_t& sumPt)
4954 {
4955   // List of tracks outside cone around N jet axis  
4956   // Particles taken randomly
4957
4958   sumPt = 0;
4959   //  Int_t   nj  = jetlist->GetSize();
4960   Float_t rc  = GetFFRadius();
4961   Float_t rcl = GetFFBckgRadius();
4962
4963   // Estimate jet and background areas
4964   Float_t* areaJet = new Float_t[nCases];
4965   Float_t* areaJetLarge = new Float_t[nCases];
4966   Float_t areaFull = (fTrackEtaMax-fTrackEtaMin)*(fTrackPhiMax-fTrackPhiMin);
4967   Float_t areaOut = areaFull;
4968
4969   //estimate jets and background areas
4970   Int_t nOut = 0;
4971   Int_t ijet = 0;
4972   TList* templist = new TList();
4973   TClonesArray *vect3Jet = new TClonesArray("TVector3",nCases);
4974
4975   for(Int_t ij=0; ij<nCases; ++ij) 
4976     {
4977       // Get jet information
4978       AliAODJet* jet = dynamic_cast<AliAODJet*>(jetlist->At(ij));
4979       TVector3 jet3mom;
4980       jet3mom.SetPtEtaPhi(jet->Pt(),jet->Eta(),jet->Phi());
4981       new((*vect3Jet)[ijet]) TVector3((TVector3)jet3mom);
4982       Float_t etaJet = (Float_t)((TVector3*) vect3Jet->At(ij))->Eta();
4983
4984       // Jet area
4985       areaJet[ij] = CalcJetArea(etaJet,rc);
4986
4987       // Area jet larger angle
4988       areaJetLarge[ij] = CalcJetArea(etaJet,rcl);
4989
4990       // Outside jet area
4991       areaOut = areaOut - areaJetLarge[ij];
4992       ijet++;
4993     }
4994
4995   // List of all tracks outside jet areas
4996   for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
4997     
4998     AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
4999     
5000     Double_t trackMom[3];
5001     track->PxPyPz(trackMom);
5002     TVector3 track3mom(trackMom);
5003     
5004     Double_t *dR = new Double_t[nCases];
5005     for(Int_t ij=0; ij<nCases; ij++)
5006         dR[ij] = (Double_t)((TVector3*) vect3Jet->At(ij))->DeltaR(track3mom);
5007
5008     if((nCases==1 && (dR[0]>rcl)) ||
5009        (nCases==2 && (dR[0]>rcl && dR[1]>rcl)) ||
5010        (nCases==3 && (dR[0]>rcl && dR[1]>rcl && dR[2]>rcl)))
5011       {
5012         templist->Add(track);
5013         nOut++;
5014       }
5015     delete [] dR;
5016   }
5017
5018   Int_t nScaled = (Int_t) (nOut * areaJet[0] / areaOut + 0.5); 
5019
5020   TRandom* rd = new TRandom();
5021
5022   Int_t* t = new Int_t[nScaled];
5023   for(Int_t i = 0; i < nScaled; i++)
5024     t[i] = -1;
5025
5026   // Take randomly nScaled particles out of nOut and fill the list
5027   for (Int_t it=0; it<nScaled; it++)
5028     {
5029       rd->SetSeed(0);
5030       Int_t temp = rd->Integer(nOut);
5031
5032       Bool_t ok = 1;
5033       for(Int_t j=0; j<nScaled; j++)
5034         {
5035           if(temp==t[j])
5036             {
5037               ok = 0;
5038               break;
5039             }
5040         }
5041
5042       if(ok) 
5043         { 
5044           t[it] = temp;
5045           AliVParticle* track = dynamic_cast<AliVParticle*>(templist->At(temp));
5046           outputlist->Add(track);
5047           sumPt += track->Pt();
5048         }
5049   }
5050
5051   outputlist->Sort();
5052
5053   delete rd;
5054   delete [] t;
5055   delete vect3Jet;
5056   delete templist;
5057   delete [] areaJetLarge;
5058   delete [] areaJet;
5059
5060 }
5061
5062 // ________________________________________________________________________________________________________________________________________________________
5063 void AliAnalysisTaskFragmentationFunction::GetOutNJetsTracksStat(Int_t nCases, TList* inputlist, TList* outputlist, TList* jetlist, Double_t& sumPt, Double_t &normFactor)
5064 {
5065   // List of tracks outside cone around N jet axis  
5066   // All particles taken + final scaling factor 
5067
5068   sumPt = 0;
5069   Float_t rc  = GetFFRadius();
5070   Float_t rcl = GetFFBckgRadius();
5071
5072   // Estimate jet and background areas
5073   Float_t* areaJet = new Float_t[nCases];
5074   Float_t* areaJetLarge = new Float_t[nCases];
5075   Float_t areaFull = (fTrackEtaMax-fTrackEtaMin)*(fTrackPhiMax-fTrackPhiMin);
5076   Float_t areaOut = areaFull;
5077
5078   //estimate jets and background areas
5079   Int_t nOut = 0;
5080   Int_t ijet = 0;
5081   TClonesArray *vect3Jet = new TClonesArray("TVector3",nCases);
5082
5083   for(Int_t ij=0; ij<nCases; ++ij) 
5084     {
5085       // Get jet information
5086       AliAODJet* jet = dynamic_cast<AliAODJet*>(jetlist->At(ij));
5087       TVector3 jet3mom;
5088       jet3mom.SetPtEtaPhi(jet->Pt(),jet->Eta(),jet->Phi());
5089       new((*vect3Jet)[ijet]) TVector3((TVector3)jet3mom);
5090       Float_t etaJet = (Float_t)((TVector3*) vect3Jet->At(ij))->Eta();
5091
5092       // Jet area
5093       areaJet[ij] = CalcJetArea(etaJet,rc);
5094
5095       // Area jet larger angle
5096       areaJetLarge[ij] = CalcJetArea(etaJet,rcl);
5097
5098       // Outside jets area
5099       areaOut = areaOut - areaJetLarge[ij];
5100       ijet++;
5101     }
5102
5103   for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
5104     
5105     AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
5106     
5107     Double_t trackMom[3];
5108     track->PxPyPz(trackMom);
5109     TVector3 track3mom(trackMom);
5110     
5111     Double_t *dR = new Double_t[nCases];
5112     for(Int_t ij=0; ij<nCases; ij++)
5113         dR[ij] = (Double_t)((TVector3*) vect3Jet->At(ij))->DeltaR(track3mom);
5114
5115     if((nCases==0) ||
5116        (nCases==1 && (dR[0]>rcl)) ||
5117        (nCases==2 && (dR[0]>rcl && dR[1]>rcl)) ||
5118        (nCases==3 && (dR[0]>rcl && dR[1]>rcl && dR[2]>rcl)))
5119       {
5120         outputlist->Add(track);
5121         sumPt += track->Pt();
5122         nOut++;
5123       }
5124     delete [] dR;
5125   }
5126
5127   if(nCases==0) areaJet[0] = TMath::Pi()*rc*rc;
5128   normFactor = (Float_t) 1./(areaJet[0] / areaOut); 
5129
5130   outputlist->Sort();
5131
5132   delete vect3Jet;
5133   delete [] areaJetLarge;
5134   delete [] areaJet;
5135
5136 }
5137
5138 // ______________________________________________________________________________________________________________________________________________________
5139 Float_t AliAnalysisTaskFragmentationFunction::CalcJetArea(Float_t etaJet, Float_t rc)
5140 {
5141
5142   Float_t detamax = etaJet + rc;
5143   Float_t detamin = etaJet - rc;
5144   Float_t accmax = 0.0; Float_t accmin = 0.0;
5145   if(detamax > fTrackEtaMax){ // sector outside etamax
5146     Float_t h = fTrackEtaMax - etaJet;
5147     accmax = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
5148   }
5149   if(detamin < fTrackEtaMin){ // sector outside etamin
5150     Float_t h = fTrackEtaMax + etaJet;
5151     accmin = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
5152   }
5153   Float_t areaJet = rc*rc*TMath::Pi() - accmax - accmin;
5154   
5155   return areaJet;
5156
5157 }