]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG4/PartCorrDep/AliAnaParticleJetLeadingConeCorrelation.cxx
fixing backward incompatible operator=, check for existence of fEventPlaneP
[u/mrichter/AliRoot.git] / PWG4 / PartCorrDep / AliAnaParticleJetLeadingConeCorrelation.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15 /* $Id: $ */
16
17 //_________________________________________________________________________
18 // Class that contains the algorithm for the reconstruction of jet, cone around leading particle
19 // The seed is a backward particle (direct photon)
20 // 1) Take the trigger particle stored in AliAODPWG4ParticleCorrelation,
21 // 2) Search for the highest pt leading particle opposite to the photon within a phi, pt window
22 // 3) Take all particles around leading in a cone R with pt larger than threshold and construct the jet
23 //
24 //  Class created from old AliPHOSGammaJet 
25 //  (see AliRoot versions previous Release 4-09)
26 //
27 //*-- Author: Gustavo Conesa (LNF-INFN) 
28 //////////////////////////////////////////////////////////////////////////////
29
30
31 // --- ROOT system ---
32 #include "TH2F.h"
33 #include "TClonesArray.h"
34 #include "TClass.h"
35 //#include "Riostream.h"
36
37 //---- Analysis system ----
38 #include "AliVTrack.h"
39 #include "AliVCluster.h"
40 #include "AliCaloTrackReader.h"
41 #include "AliNeutralMesonSelection.h"
42 #include "AliAnaParticleJetLeadingConeCorrelation.h"  
43 #include "AliCaloPID.h"
44 #include "AliAODPWG4ParticleCorrelation.h"
45 #include "AliFiducialCut.h"
46
47 ClassImp(AliAnaParticleJetLeadingConeCorrelation)
48
49
50 //____________________________________________________________________________
51   AliAnaParticleJetLeadingConeCorrelation::AliAnaParticleJetLeadingConeCorrelation() : 
52     AliAnaPartCorrBaseClass(), fJetsOnlyInCTS(kFALSE), fPbPb(kFALSE),     
53     fSeveralConeAndPtCuts(0),  fReMakeJet(0),
54     fDeltaPhiMaxCut(0.), fDeltaPhiMinCut(0.), 
55     fLeadingRatioMaxCut(0.),  fLeadingRatioMinCut(0.), 
56     fJetCTSRatioMaxCut(0.), fJetCTSRatioMinCut(0.), 
57     fJetRatioMaxCut(0.),  fJetRatioMinCut(0.), 
58     fJetNCone(0),fJetNPt(0), fJetCone(0), 
59     fJetPtThreshold(0),fJetPtThresPbPb(0),
60     fPtTriggerSelectionCut(0.0), fSelect(0),
61     fSelectIsolated(0), 
62     //Histograms
63     fOutCont(0x0),
64     //Leading
65     fhChargedLeadingPt(0),fhChargedLeadingPhi(0),fhChargedLeadingEta(0),
66     fhChargedLeadingDeltaPt(0),fhChargedLeadingDeltaPhi(0),fhChargedLeadingDeltaEta(0),
67     fhChargedLeadingRatioPt(0),
68     fhNeutralLeadingPt(0),fhNeutralLeadingPhi(0),fhNeutralLeadingEta(0),
69     fhNeutralLeadingDeltaPt(0),fhNeutralLeadingDeltaPhi(0),fhNeutralLeadingDeltaEta(0),
70     fhNeutralLeadingRatioPt(0),fhChargedLeadingXi(0), fhNeutralLeadingXi(0),
71     fhChargedLeadingDeltaPhiRatioPt30(0), fhNeutralLeadingDeltaPhiRatioPt30(0),
72     fhChargedLeadingDeltaPhiRatioPt50(0), fhNeutralLeadingDeltaPhiRatioPt50(0),
73     //Jet
74     fhJetPt(0),fhJetRatioPt(0),fhJetDeltaPhi(0), fhJetDeltaEta(0),
75     fhJetLeadingRatioPt(0),fhJetLeadingDeltaPhi(0),fhJetLeadingDeltaEta(0),
76     fhJetFFz(0),fhJetFFxi(0),fhJetFFpt(0),fhJetNTracksInCone(0),
77     fhBkgPt(0),fhBkgRatioPt(0),fhBkgDeltaPhi(0), fhBkgDeltaEta(0),
78     fhBkgLeadingRatioPt(0),fhBkgLeadingDeltaPhi(0),fhBkgLeadingDeltaEta(0),
79     fhBkgFFz(0),fhBkgFFxi(0),fhBkgFFpt(0),fhBkgNTracksInCone(0),
80     //Several cones and thres histograms
81     fhJetPts(),fhJetRatioPts(),fhJetDeltaPhis(), fhJetDeltaEtas(),
82     fhJetLeadingRatioPts(),fhJetLeadingDeltaPhis(),fhJetLeadingDeltaEtas(),
83     fhJetFFzs(),fhJetFFxis(),fhJetFFpts(),fhJetNTracksInCones(),
84     fhBkgPts(),fhBkgRatioPts(),fhBkgDeltaPhis(), fhBkgDeltaEtas(),
85     fhBkgLeadingRatioPts(),fhBkgLeadingDeltaPhis(),fhBkgLeadingDeltaEtas(),
86     fhBkgFFzs(),fhBkgFFxis(),fhBkgFFpts(),fhBkgNTracksInCones()
87 {
88   //Default Ctor
89   
90   //Initialize parameters
91
92   for(Int_t i = 0; i<6; i++){
93     fJetXMin1[i]     = 0.0 ;
94     fJetXMin2[i]     = 0.0 ;
95     fJetXMax1[i]     = 0.0 ;
96     fJetXMax2[i]     = 0.0 ;
97     fBkgMean[i]      = 0.0 ;
98     fBkgRMS[i]       = 0.0 ;
99     if( i < 2 ){
100       fJetE1[i]        = 0.0 ;
101       fJetE2[i]        = 0.0 ;
102       fJetSigma1[i]    = 0.0 ;
103       fJetSigma2[i]    = 0.0 ;
104     }
105   }
106   
107   //Several cones and thres histograms
108   for(Int_t i = 0; i<5; i++){
109     fJetCones[i]         = 0.0 ;
110     fJetNameCones[i]     = ""  ;
111     fJetPtThres[i]      = 0.0 ;
112     fJetNamePtThres[i]  = ""  ;
113     for(Int_t j = 0; j<5; j++){
114       fhJetPts[i][j]=0 ;
115       fhJetRatioPts[i][j]=0 ;
116       fhJetDeltaPhis[i][j]=0 ; 
117       fhJetDeltaEtas[i][j]=0 ;
118       fhJetLeadingRatioPts[i][j]=0 ;
119       fhJetLeadingDeltaPhis[i][j]=0 ;
120       fhJetLeadingDeltaEtas[i][j]=0 ;
121       fhJetFFzs[i][j]=0 ;
122       fhJetFFxis[i][j]=0 ;
123       fhJetFFpts[i][j]=0 ;
124       fhJetNTracksInCones[i][j]=0 ;
125       fhBkgPts[i][j]=0 ;
126       fhBkgRatioPts[i][j]=0 ;
127       fhBkgDeltaPhis[i][j]=0 ; 
128       fhBkgDeltaEtas[i][j]=0 ;
129       fhBkgLeadingRatioPts[i][j]=0 ;
130       fhBkgLeadingDeltaPhis[i][j]=0 ;
131       fhBkgLeadingDeltaEtas[i][j]=0 ;
132       fhBkgFFzs[i][j]=0 ;
133       fhBkgFFxis[i][j]=0 ;
134       fhBkgFFpts[i][j]=0 ;
135       fhBkgNTracksInCones[i][j]=0 ;
136     }
137   }
138
139   InitParameters();
140
141 }
142 /*
143 //____________________________________________________________________________
144 AliAnaParticleJetLeadingConeCorrelation::AliAnaParticleJetLeadingConeCorrelation(const AliAnaParticleJetLeadingConeCorrelation & jetlc) :   
145   AliAnaPartCorrBaseClass(jetlc), fJetsOnlyInCTS(jetlc.fJetsOnlyInCTS), fPbPb(jetlc.fPbPb), 
146   fSeveralConeAndPtCuts(jetlc.fSeveralConeAndPtCuts),  fReMakeJet(jetlc. fReMakeJet),
147   fDeltaPhiMaxCut(jetlc. fDeltaPhiMaxCut), fDeltaPhiMinCut(jetlc.fDeltaPhiMinCut), 
148   fLeadingRatioMaxCut(jetlc.fLeadingRatioMaxCut),  fLeadingRatioMinCut(jetlc.fLeadingRatioMinCut), 
149   fJetCTSRatioMaxCut(jetlc.fJetCTSRatioMaxCut),
150   fJetCTSRatioMinCut(jetlc.fJetCTSRatioMinCut), fJetRatioMaxCut(jetlc.fJetRatioMaxCut),
151   fJetRatioMinCut(jetlc.fJetRatioMinCut),  fJetNCone(jetlc.fJetNCone),
152   fJetNPt(jetlc.fJetNPt), fJetCone(jetlc.fJetCone),
153   fJetPtThreshold(jetlc.fJetPtThreshold),fJetPtThresPbPb(jetlc.fJetPtThresPbPb),
154   fPtTriggerSelectionCut(jetlc.fPtTriggerSelectionCut), fSelect(jetlc.fSelect), 
155   fSelectIsolated(jetlc.fSelectIsolated),    
156   //Histograms
157   fOutCont(jetlc. fOutCont),
158   //Leading
159   fhChargedLeadingPt(jetlc.fhChargedLeadingPt), fhChargedLeadingPhi(jetlc.fhChargedLeadingPhi),
160   fhChargedLeadingEta(jetlc.fhChargedLeadingEta), fhChargedLeadingDeltaPt(jetlc.fhChargedLeadingDeltaPt),
161   fhChargedLeadingDeltaPhi(jetlc.fhChargedLeadingDeltaPhi),fhChargedLeadingDeltaEta(jetlc.fhChargedLeadingDeltaEta),
162   fhChargedLeadingRatioPt(jetlc.fhChargedLeadingRatioPt),
163   fhNeutralLeadingPt(jetlc.fhNeutralLeadingPt),fhNeutralLeadingPhi(jetlc.fhNeutralLeadingPhi),
164   fhNeutralLeadingEta(jetlc.fhNeutralLeadingEta), fhNeutralLeadingDeltaPt(jetlc.fhNeutralLeadingDeltaPt),
165   fhNeutralLeadingDeltaPhi(jetlc.fhNeutralLeadingDeltaPhi),fhNeutralLeadingDeltaEta(jetlc.fhNeutralLeadingDeltaEta),
166   fhNeutralLeadingRatioPt(jetlc.fhNeutralLeadingRatioPt),
167   fhChargedLeadingXi(jetlc.fhChargedLeadingXi), fhNeutralLeadingXi(jetlc.fhNeutralLeadingXi),
168   fhChargedLeadingDeltaPhiRatioPt30(jetlc.fhChargedLeadingDeltaPhiRatioPt30), fhNeutralLeadingDeltaPhiRatioPt30(jetlc.fhNeutralLeadingDeltaPhiRatioPt30),
169   fhChargedLeadingDeltaPhiRatioPt50(jetlc.fhChargedLeadingDeltaPhiRatioPt50), fhNeutralLeadingDeltaPhiRatioPt50(jetlc.fhNeutralLeadingDeltaPhiRatioPt50),
170   //Jet
171   fhJetPt(jetlc.fhJetPt),fhJetRatioPt(jetlc.fhJetRatioPt),fhJetDeltaPhi(jetlc.fhJetDeltaPhi), 
172   fhJetDeltaEta(jetlc.fhJetDeltaEta), fhJetLeadingRatioPt(jetlc.fhJetLeadingRatioPt),
173   fhJetLeadingDeltaPhi(jetlc.fhJetLeadingDeltaPhi),fhJetLeadingDeltaEta(jetlc.fhJetLeadingDeltaEta),
174   fhJetFFz(jetlc.fhJetFFz),fhJetFFxi(jetlc.fhJetFFxi),fhJetFFpt(jetlc.fhJetFFpt),
175   fhJetNTracksInCone(jetlc.fhJetNTracksInCone),
176   fhBkgPt(jetlc.fhBkgPt),fhBkgRatioPt(jetlc.fhBkgRatioPt),fhBkgDeltaPhi(jetlc.fhBkgDeltaPhi), 
177   fhBkgDeltaEta(jetlc.fhBkgDeltaEta), fhBkgLeadingRatioPt(jetlc.fhBkgLeadingRatioPt),
178   fhBkgLeadingDeltaPhi(jetlc.fhBkgLeadingDeltaPhi),fhBkgLeadingDeltaEta(jetlc.fhBkgLeadingDeltaEta),
179   fhBkgFFz(jetlc.fhBkgFFz),fhBkgFFxi(jetlc.fhBkgFFxi),fhBkgFFpt(jetlc.fhBkgFFpt),
180   fhBkgNTracksInCone(jetlc.fhBkgNTracksInCone),
181   //Several cones and thres histograms
182   fhJetPts(),fhJetRatioPts(),fhJetDeltaPhis(), fhJetDeltaEtas(),
183   fhJetLeadingRatioPts(),fhJetLeadingDeltaPhis(),fhJetLeadingDeltaEtas(),
184   fhJetFFzs(),fhJetFFxis(),fhJetFFpts(),fhJetNTracksInCones(),
185   fhBkgPts(),fhBkgRatioPts(),fhBkgDeltaPhis(), fhBkgDeltaEtas(),
186   fhBkgLeadingRatioPts(),fhBkgLeadingDeltaPhis(),fhBkgLeadingDeltaEtas(),
187   fhBkgFFzs(),fhBkgFFxis(),fhBkgFFpts(),fhBkgNTracksInCones()
188 {
189   // cpy ctor
190
191   for(Int_t i = 0; i<6; i++){
192     fJetXMin1[i]       = jetlc.fJetXMin1[i] ;
193     fJetXMin2[i]       = jetlc.fJetXMin2[i] ;
194     fJetXMax1[i]       = jetlc.fJetXMax1[i] ;
195     fJetXMax2[i]       = jetlc.fJetXMax2[i] ;
196     fBkgMean[i]        = jetlc.fBkgMean[i] ;
197     fBkgRMS[i]         = jetlc.fBkgRMS[i] ;
198     if( i < 2 ){
199       fJetE1[i]        = jetlc.fJetE1[i] ;
200       fJetE2[i]        = jetlc.fJetE2[i] ;
201       fJetSigma1[i]    = jetlc.fJetSigma1[i] ;
202       fJetSigma2[i]    = jetlc.fJetSigma2[i] ;
203     }
204   }          
205   
206   //Several cones and thres histograms
207   for(Int_t i = 0; i<5; i++){
208     fJetCones[i]        = jetlc.fJetCones[i] ;
209     fJetNameCones[i]    = jetlc.fJetNameCones[i] ;
210     fJetPtThres[i]      = jetlc.fJetPtThres[i] ;
211     fJetNamePtThres[i]  = jetlc.fJetNamePtThres[i] ;
212     for(Int_t j = 0; j<5; j++){
213       fhJetPts[i][j] = jetlc.fhJetPts[i][j] ;
214       fhJetRatioPts[i][j] = jetlc.fhJetRatioPts[i][j] ;
215       fhJetDeltaPhis[i][j] = jetlc.fhJetDeltaPhis[i][j] ; 
216       fhJetDeltaEtas[i][j] = jetlc.fhJetDeltaEtas[i][j] ;
217       fhJetLeadingRatioPts[i][j] = jetlc.fhJetLeadingRatioPts[i][j] ;
218       fhJetLeadingDeltaPhis[i][j] = jetlc.fhJetLeadingDeltaPhis[i][j] ;
219       fhJetLeadingDeltaEtas[i][j] = jetlc.fhJetLeadingDeltaEtas[i][j] ;
220       fhJetFFzs[i][j] = jetlc.fhJetFFzs[i][j] ;
221       fhJetFFxis[i][j] = jetlc.fhJetFFxis[i][j] ;
222       fhJetFFpts[i][j] = jetlc.fhJetFFpts[i][j] ;
223       fhJetNTracksInCones[i][j] = fhJetNTracksInCones[i][j] ;
224       fhBkgPts[i][j] = jetlc.fhBkgPts[i][j] ;
225       fhBkgRatioPts[i][j] = jetlc.fhBkgRatioPts[i][j] ;
226       fhBkgDeltaPhis[i][j] = jetlc.fhBkgDeltaPhis[i][j] ; 
227       fhBkgDeltaEtas[i][j] = jetlc.fhBkgDeltaEtas[i][j] ;
228       fhBkgLeadingRatioPts[i][j] = jetlc.fhBkgLeadingRatioPts[i][j] ;
229       fhBkgLeadingDeltaPhis[i][j] = jetlc.fhBkgLeadingDeltaPhis[i][j] ;
230       fhBkgLeadingDeltaEtas[i][j] = jetlc.fhBkgLeadingDeltaEtas[i][j] ;
231       fhBkgFFzs[i][j] = jetlc.fhBkgFFzs[i][j] ;
232       fhBkgFFxis[i][j] = jetlc.fhBkgFFxis[i][j] ;
233       fhBkgFFpts[i][j] = jetlc.fhBkgFFpts[i][j] ;
234       fhBkgNTracksInCones[i][j] = jetlc.fhBkgNTracksInCones[i][j] ;
235     }
236   }  
237 }
238
239 //_________________________________________________________________________
240 AliAnaParticleJetLeadingConeCorrelation & AliAnaParticleJetLeadingConeCorrelation::operator = (const AliAnaParticleJetLeadingConeCorrelation & jetlc)
241 {
242   // assignment operator
243   
244   if(this == &jetlc)return *this;
245   ((AliAnaPartCorrBaseClass *)this)->operator=(jetlc);
246   
247   fSeveralConeAndPtCuts  = jetlc.fSeveralConeAndPtCuts ; 
248   fPbPb                  = jetlc.fPbPb ;
249   fReMakeJet             = jetlc.fReMakeJet ;
250   fJetsOnlyInCTS         = jetlc.fJetsOnlyInCTS;
251
252   fDeltaPhiMaxCut        = jetlc.fDeltaPhiMaxCut ; 
253   fDeltaPhiMinCut        = jetlc.fDeltaPhiMinCut ; 
254   fLeadingRatioMaxCut    = jetlc.fLeadingRatioMaxCut ;
255   fLeadingRatioMinCut    = jetlc.fLeadingRatioMinCut ;
256   
257   fJetCTSRatioMaxCut     = jetlc.fJetCTSRatioMaxCut ;
258   fJetCTSRatioMinCut     = jetlc.fJetCTSRatioMinCut ; 
259   fJetRatioMaxCut        = jetlc.fJetRatioMaxCut ;
260   fJetRatioMinCut        = jetlc.fJetRatioMinCut ; 
261  
262   fJetNCone              = jetlc.fJetNCone ;
263   fJetNPt                = jetlc.fJetNPt ; fJetCone = jetlc.fJetCone ; 
264   fJetPtThreshold        = jetlc.fJetPtThreshold ;
265   fJetPtThresPbPb        = jetlc.fJetPtThresPbPb ;
266   fPtTriggerSelectionCut = jetlc.fPtTriggerSelectionCut ;
267   fSelect                = jetlc.fSelect ;  
268   fSelectIsolated        = jetlc.fSelectIsolated ;
269
270   for(Int_t i = 0; i<6; i++){
271     fJetXMin1[i]       = jetlc.fJetXMin1[i] ;
272     fJetXMin2[i]       = jetlc.fJetXMin2[i] ;
273     fJetXMax1[i]       = jetlc.fJetXMax1[i] ;
274     fJetXMax2[i]       = jetlc.fJetXMax2[i] ;
275     fBkgMean[i]        = jetlc.fBkgMean[i] ;
276     fBkgRMS[i]         = jetlc.fBkgRMS[i] ;
277     if( i < 2 ){
278       fJetE1[i]        = jetlc.fJetE1[i] ;
279       fJetE2[i]        = jetlc.fJetE2[i] ;
280       fJetSigma1[i]    = jetlc.fJetSigma1[i] ;
281       fJetSigma2[i]    = jetlc.fJetSigma2[i] ;
282     }
283   }     
284
285   //Histograms
286   fOutCont = jetlc. fOutCont ;
287   fhChargedLeadingPt = jetlc.fhChargedLeadingPt; fhChargedLeadingPhi = jetlc.fhChargedLeadingPhi;
288   fhChargedLeadingEta = jetlc.fhChargedLeadingEta; fhChargedLeadingDeltaPt = jetlc.fhChargedLeadingDeltaPt;
289   fhChargedLeadingDeltaPhi = jetlc.fhChargedLeadingDeltaPhi;fhChargedLeadingDeltaEta = jetlc.fhChargedLeadingDeltaEta;
290   fhChargedLeadingRatioPt = jetlc.fhChargedLeadingRatioPt;
291   fhNeutralLeadingPt = jetlc.fhNeutralLeadingPt;fhNeutralLeadingPhi = jetlc.fhNeutralLeadingPhi;
292   fhNeutralLeadingEta = jetlc.fhNeutralLeadingEta; fhNeutralLeadingDeltaPt = jetlc.fhNeutralLeadingDeltaPt;
293   fhNeutralLeadingDeltaPhi = jetlc.fhNeutralLeadingDeltaPhi;fhNeutralLeadingDeltaEta = jetlc.fhNeutralLeadingDeltaEta;
294   fhNeutralLeadingRatioPt = jetlc.fhNeutralLeadingRatioPt;
295   fhChargedLeadingXi = jetlc.fhChargedLeadingXi; 
296   fhNeutralLeadingXi = jetlc.fhNeutralLeadingXi;
297
298   fhChargedLeadingDeltaPhiRatioPt30 = jetlc.fhChargedLeadingDeltaPhiRatioPt30; 
299   fhNeutralLeadingDeltaPhiRatioPt30 = jetlc.fhNeutralLeadingDeltaPhiRatioPt30;
300   fhChargedLeadingDeltaPhiRatioPt50 = jetlc.fhChargedLeadingDeltaPhiRatioPt50; 
301   fhNeutralLeadingDeltaPhiRatioPt50 = jetlc.fhNeutralLeadingDeltaPhiRatioPt50;  
302         
303   fhJetPt = jetlc.fhJetPt;fhJetRatioPt = jetlc.fhJetRatioPt;fhJetDeltaPhi = jetlc.fhJetDeltaPhi; 
304   fhJetDeltaEta = jetlc.fhJetDeltaEta; fhJetLeadingRatioPt = jetlc.fhJetLeadingRatioPt;
305   fhJetLeadingDeltaPhi = jetlc.fhJetLeadingDeltaPhi;fhJetLeadingDeltaEta = jetlc.fhJetLeadingDeltaEta;
306   fhJetFFz = jetlc.fhJetFFz;fhJetFFxi = jetlc.fhJetFFxi;fhJetFFpt = jetlc.fhJetFFpt;
307   fhJetNTracksInCone = jetlc.fhJetNTracksInCone;
308   fhBkgPt = jetlc.fhBkgPt;fhBkgRatioPt = jetlc.fhBkgRatioPt;fhBkgDeltaPhi = jetlc.fhBkgDeltaPhi; 
309   fhBkgDeltaEta = jetlc.fhBkgDeltaEta; fhBkgLeadingRatioPt = jetlc.fhBkgLeadingRatioPt;
310   fhBkgLeadingDeltaPhi = jetlc.fhBkgLeadingDeltaPhi;fhBkgLeadingDeltaEta = jetlc.fhBkgLeadingDeltaEta;
311   fhBkgFFz = jetlc.fhBkgFFz;fhBkgFFxi = jetlc.fhBkgFFxi;fhBkgFFpt = jetlc.fhBkgFFpt;
312   fhBkgNTracksInCone = jetlc.fhBkgNTracksInCone;
313
314
315   //Several cones and thres histograms
316   for(Int_t i = 0; i<5; i++){
317     fJetCones[i]        = jetlc.fJetCones[i] ;
318     fJetNameCones[i]    = jetlc.fJetNameCones[i] ;
319     fJetPtThres[i]      = jetlc.fJetPtThres[i] ;
320     fJetNamePtThres[i]  = jetlc.fJetNamePtThres[i] ;
321     
322     for(Int_t j = 0; j<5; j++){
323       fhJetPts[i][j] = jetlc.fhJetPts[i][j] ;
324       fhJetRatioPts[i][j] = jetlc.fhJetRatioPts[i][j] ;
325       fhJetDeltaPhis[i][j] = jetlc.fhJetDeltaPhis[i][j] ; 
326       fhJetDeltaEtas[i][j] = jetlc.fhJetDeltaEtas[i][j] ;
327       fhJetLeadingRatioPts[i][j] = jetlc.fhJetLeadingRatioPts[i][j] ;
328       fhJetLeadingDeltaPhis[i][j] = jetlc.fhJetLeadingDeltaPhis[i][j] ;
329       fhJetLeadingDeltaEtas[i][j] = jetlc.fhJetLeadingDeltaEtas[i][j] ;
330       fhJetFFzs[i][j] = jetlc.fhJetFFzs[i][j] ;
331       fhJetFFxis[i][j] = jetlc.fhJetFFxis[i][j] ;
332       fhJetFFpts[i][j] = jetlc.fhJetFFpts[i][j] ;
333       fhJetNTracksInCones[i][j] = fhJetNTracksInCones[i][j] ;
334       fhBkgPts[i][j] = jetlc.fhBkgPts[i][j] ;
335       fhBkgRatioPts[i][j] = jetlc.fhBkgRatioPts[i][j] ;
336       fhBkgDeltaPhis[i][j] = jetlc.fhBkgDeltaPhis[i][j] ; 
337       fhBkgDeltaEtas[i][j] = jetlc.fhBkgDeltaEtas[i][j] ;
338       fhBkgLeadingRatioPts[i][j] = jetlc.fhBkgLeadingRatioPts[i][j] ;
339       fhBkgLeadingDeltaPhis[i][j] = jetlc.fhBkgLeadingDeltaPhis[i][j] ;
340       fhBkgLeadingDeltaEtas[i][j] = jetlc.fhBkgLeadingDeltaEtas[i][j] ;
341       fhBkgFFzs[i][j] = jetlc.fhBkgFFzs[i][j] ;
342       fhBkgFFxis[i][j] = jetlc.fhBkgFFxis[i][j] ;
343       fhBkgFFpts[i][j] = jetlc.fhBkgFFpts[i][j] ;
344       fhBkgNTracksInCones[i][j] = jetlc.fhBkgNTracksInCones[i][j] ;
345     }
346   }      
347
348   return *this;
349
350 }
351 */
352 //____________________________________________________________________________
353 AliAnaParticleJetLeadingConeCorrelation::~AliAnaParticleJetLeadingConeCorrelation() 
354 {
355    // Remove all pointers except analysis output pointers.
356 }
357
358 //____________________________________________________________________________
359 Double_t AliAnaParticleJetLeadingConeCorrelation::CalculateJetRatioLimit(const Double_t ptg, const Double_t *par, const Double_t *x) const {
360   //Calculate the ratio of the jet and trigger particle limit for the selection
361   //WARNING: need to check what it does
362   //printf("CalculateLimit: x1 %2.3f, x2%2.3f\n",x[0],x[1]);
363   Double_t ePP = par[0] + par[1] * ptg ;
364   Double_t sPP = par[2] + par[3] * ptg ;
365   Double_t f   = x[0]   + x[1]   * ptg ;
366   Double_t ePbPb = ePP + par[4] ;
367   Double_t sPbPb = TMath::Sqrt(sPP*sPP+ par[5]*par[5]) ;
368   Double_t rat = (ePbPb - sPbPb * f) / ptg ;
369   //printf("CalculateLimit: ePP %2.3f, sPP %2.3f, f %2.3f\n", ePP, sPP, f);
370   //printf("CalculateLimit: ePbPb %2.3f, sPbPb %2.3f, rat %2.3f\n", ePbPb, sPbPb, rat);
371   return rat ;
372 }
373
374 //____________________________________________________________________________
375 void AliAnaParticleJetLeadingConeCorrelation::FillJetHistos(AliAODPWG4ParticleCorrelation * particle, const TLorentzVector  leading, const TLorentzVector jet, const TString type, const TString lastname)
376 {
377   //Fill jet and background histograms 
378   Double_t ptTrig = particle->Pt();
379   Double_t ptJet = jet.Pt();
380   Double_t ptLead = leading.Pt();
381   Double_t phiTrig = particle->Phi();
382   Double_t phiJet = jet.Phi();
383   if(phiJet < 0) phiJet+=TMath::TwoPi();
384   Double_t phiLead = leading.Phi();
385   if(phiLead < 0) phiLead+=TMath::TwoPi();
386   Double_t etaTrig = particle->Eta();
387   Double_t etaJet = jet.Eta();
388   Double_t etaLead = leading.Eta();
389   
390   TH2F *h1 = 0x0;
391   h1 = dynamic_cast<TH2F*>(GetOutputContainer()->FindObject(Form("%s%sPt%s",GetAddedHistogramsStringToName().Data(),type.Data(),lastname.Data())));
392   if(h1)h1->Fill(ptTrig,ptJet);
393   
394   TH2F *h2 = 0x0;
395   h2 = dynamic_cast<TH2F*>(GetOutputContainer()->FindObject(Form("%s%sRatioPt%s",GetAddedHistogramsStringToName().Data(),type.Data(),lastname.Data())));
396   if(h2) h2->Fill(ptTrig,ptJet/ptTrig);
397   
398   TH2F *h3 = 0x0;
399   h3 = dynamic_cast<TH2F*>(GetOutputContainer()->FindObject(Form("%s%sLeadingRatioPt%s",GetAddedHistogramsStringToName().Data(),type.Data(),lastname.Data())));
400   if(h3)h3->Fill(ptTrig,ptLead/ptJet);
401   
402   //   dynamic_cast<TH2F*>(GetOutputContainer()->FindObject(Form("%s%sPhi%s",GetAddedHistogramsStringToName().Data(),type.Data(),lastname.Data())))->
403   //     Fill(ptTrig,phiJet);
404   TH2F *h4 = 0x0;
405   h4 = dynamic_cast<TH2F*>(GetOutputContainer()->FindObject(Form("%s%sDeltaPhi%s",GetAddedHistogramsStringToName().Data(),type.Data(),lastname.Data())));
406   if(h4) h4->Fill(ptTrig,phiJet-phiTrig);
407   TH2F *h5 = 0x0;
408   h5 = dynamic_cast<TH2F*>(GetOutputContainer()->FindObject(Form("%s%sLeadingDeltaPhi%s",GetAddedHistogramsStringToName().Data(),type.Data(),lastname.Data())));
409   if(h5) h5->Fill(ptTrig,phiJet-phiLead);
410   
411   //   dynamic_cast<TH2F*>(GetOutputContainer()->FindObject(Form("%s%sEta%s",GetAddedHistogramsStringToName().Data(),type.Data(),lastname.Data())))->
412   //     Fill(ptTrig,etaJet);
413   TH2F *h6 = 0x0;
414   h6 = dynamic_cast<TH2F*>(GetOutputContainer()->FindObject(Form("%s%sDeltaEta%s",GetAddedHistogramsStringToName().Data(),type.Data(),lastname.Data())));
415   if(h6) h6->Fill(ptTrig,etaJet-etaTrig);
416   TH2F *h7 = 0x0;
417   h7 = dynamic_cast<TH2F*>(GetOutputContainer()->FindObject(Form("%s%sLeadingDeltaEta%s",GetAddedHistogramsStringToName().Data(),type.Data(),lastname.Data())));
418   if(h7) h7->Fill(ptTrig,etaJet-etaLead);
419   
420   //Construct fragmentation function
421   TObjArray * pl = new TObjArray;
422   
423   if(type == "Jet") pl = particle->GetObjArray(Form("%sTracks",GetAODObjArrayName().Data()));
424   else if(type == "Bkg") particle->GetObjArray(Form("%sTracksBkg",GetAODObjArrayName().Data()));
425   
426   if(!pl) return ;
427   
428   //Different pt cut for jet particles in different collisions systems
429   //Only needed when jet is recalculated from AODs
430   Float_t ptcut = fJetPtThreshold;
431   if(fPbPb && !fSeveralConeAndPtCuts && ptTrig > fPtTriggerSelectionCut)  ptcut = fJetPtThresPbPb ;
432   
433   TVector3 p3;
434   Int_t nTracksInCone = 0; 
435   
436   for(Int_t ipr = 0;ipr < pl->GetEntriesFast() ; ipr ++ ){
437     AliVTrack* track = dynamic_cast<AliVTrack *>(pl->At(ipr)) ;
438     if(track)p3.SetXYZ(track->Px(),track->Py(),track->Pz());
439     else printf("AliAnaParticleJetLeadingConeCorrelation::FillJetHistos() - Track not available\n");
440     
441     //Recheck if particle is in jet cone
442     if(fReMakeJet || fSeveralConeAndPtCuts)
443       if(!IsParticleInJetCone(p3.Eta(), p3.Phi(), leading.Eta(), leading.Phi()) ) continue ; 
444     
445     nTracksInCone++; 
446     
447     TH2F *ha =dynamic_cast<TH2F*>(GetOutputContainer()->FindObject(Form("%s%sFFz%s",GetAddedHistogramsStringToName().Data(),type.Data(),lastname.Data())));
448     if(ha) ha->Fill(ptTrig,p3.Pt()/ptTrig);
449     TH2F *hb  =dynamic_cast<TH2F*>(GetOutputContainer()->FindObject(Form("%s%sFFxi%s",GetAddedHistogramsStringToName().Data(),type.Data(),lastname.Data())));
450     if(hb) hb->Fill(ptTrig,TMath::Log(ptTrig/p3.Pt()));
451     TH2F *hc =dynamic_cast<TH2F*>(GetOutputContainer()->FindObject(Form("%s%sFFpt%s",GetAddedHistogramsStringToName().Data(),type.Data(),lastname.Data())));
452     if(hc) hc->Fill(ptTrig,p3.Pt());
453     
454   }//track loop
455   
456   if(nTracksInCone > 0) {
457     TH2F *hd = dynamic_cast<TH2F*>(GetOutputContainer()->FindObject(Form("%s%sNTracksInCone%s",GetAddedHistogramsStringToName().Data(),type.Data(),lastname.Data())));
458     if(hd)hd->Fill(ptTrig, nTracksInCone);
459   }
460   
461 }
462
463 //________________________________________________________________________
464 TList *  AliAnaParticleJetLeadingConeCorrelation::GetCreateOutputObjects()
465 {  
466   // Create histograms to be saved in output file and 
467   // store them in fOutCont
468   
469   if(GetDebug()>1) printf("AliAnaParticleJetLeadingConeCorrelation::GetCreateOutputObjects() - Init histograms \n");
470   
471   fOutCont = new TList() ; 
472   fOutCont->SetName("ParticleJetLeadingInConeCorrelationHistograms") ; 
473   
474   Int_t nptbins  = GetHistoPtBins();
475   Int_t nphibins = GetHistoPhiBins();
476   Int_t netabins = GetHistoEtaBins();
477   Float_t ptmax  = GetHistoPtMax();
478   Float_t phimax = GetHistoPhiMax();
479   Float_t etamax = GetHistoEtaMax();
480   Float_t ptmin  = GetHistoPtMin();
481   Float_t phimin = GetHistoPhiMin();
482   Float_t etamin = GetHistoEtaMin();    
483   
484   fhChargedLeadingPt  = new TH2F("ChargedLeadingPt","p_{T leading charge} vs p_{T trigger}",nptbins,ptmin,ptmax,nptbins,ptmin,ptmax); 
485   fhChargedLeadingPt->SetYTitle("p_{T leading charge}");
486   fhChargedLeadingPt->SetXTitle("p_{T trigger} (GeV/c)");
487   
488   fhChargedLeadingPhi  = new TH2F("ChargedLeadingPhi","#phi_{h^{#pm}}  vs p_{T trigger}", nptbins,ptmin,ptmax,nphibins,phimin,phimax); 
489   fhChargedLeadingPhi->SetYTitle("#phi_{h^{#pm}} (rad)");
490   fhChargedLeadingPhi->SetXTitle("p_{T trigger} (GeV/c)");
491   
492   fhChargedLeadingEta  = new TH2F("ChargedLeadingEta","#eta_{h^{#pm}}  vs p_{T trigger}",nptbins,ptmin,ptmax,netabins,etamin,etamax); 
493   fhChargedLeadingEta->SetYTitle("#eta_{h^{#pm}} ");
494   fhChargedLeadingEta->SetXTitle("p_{T trigger} (GeV/c)");
495   
496   fhChargedLeadingDeltaPt  = new TH2F("ChargedLeadingDeltaPt","p_{T trigger} - p_{T h^{#pm}} vs p_{T trigger}",nptbins,ptmin,ptmax,nptbins,ptmin,ptmax); 
497   fhChargedLeadingDeltaPt->SetYTitle("#Delta p_{T} (GeV/c)");
498   fhChargedLeadingDeltaPt->SetXTitle("p_{T trigger} (GeV/c)");
499   
500   fhChargedLeadingDeltaPhi  = new TH2F("ChargedLeadingDeltaPhi","#phi_{trigger} - #phi_{h^{#pm}} vs p_{T trigger}",nptbins,ptmin,ptmax,120,0,TMath::TwoPi()); 
501   fhChargedLeadingDeltaPhi->SetYTitle("#Delta #phi (rad)");
502   fhChargedLeadingDeltaPhi->SetXTitle("p_{T trigger} (GeV/c)");
503   
504   fhChargedLeadingDeltaEta  = new TH2F("ChargedLeadingDeltaEta","#eta_{trigger} - #eta_{h^{#pm}} vs p_{T trigger}",nptbins,ptmin,ptmax,120,-2,2); 
505   fhChargedLeadingDeltaEta->SetYTitle("#Delta #eta");
506   fhChargedLeadingDeltaEta->SetXTitle("p_{T trigger} (GeV/c)");
507   
508   fhChargedLeadingRatioPt  = new TH2F("ChargedLeadingRatioPt","p_{T leading charge} /p_{T trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,120,0,2); 
509   fhChargedLeadingRatioPt->SetYTitle("p_{T lead charge} /p_{T trigger}");
510   fhChargedLeadingRatioPt->SetXTitle("p_{T trigger} (GeV/c)");
511   
512   fhChargedLeadingXi  = new TH2F("ChargedLeadingXi","ln(p_{T trigger} / p_{T leading charge} ) vs p_{T trigger}",nptbins,ptmin,ptmax,120,0,10); 
513   fhChargedLeadingXi->SetYTitle("#xi");
514   fhChargedLeadingXi->SetXTitle("p_{T trigger} (GeV/c)");
515         
516   fOutCont->Add(fhChargedLeadingPt) ;
517   fOutCont->Add(fhChargedLeadingPhi) ;
518   fOutCont->Add(fhChargedLeadingEta) ;
519   fOutCont->Add(fhChargedLeadingDeltaPt) ; 
520   fOutCont->Add(fhChargedLeadingDeltaPhi) ; 
521   fOutCont->Add(fhChargedLeadingDeltaEta) ; 
522   fOutCont->Add(fhChargedLeadingRatioPt) ;
523   fOutCont->Add(fhChargedLeadingXi) ;
524         
525   fhChargedLeadingDeltaPhiRatioPt30  = new TH2F("ChargedLeadingDeltaPhiRatioPt30","#phi_{trigger} - #phi_{#pi^{0}} vs p_{T leading}/p_{T trigger}, charged leading, p_{T trigger} > 30 GeV/c",120,0,TMath::TwoPi(),nptbins,0,1); 
526   fhChargedLeadingDeltaPhiRatioPt30->SetXTitle("#Delta #phi (rad)");
527   fhChargedLeadingDeltaPhiRatioPt30->SetYTitle("p_{T leading} / p_{T trigger}");        
528         
529   fhChargedLeadingDeltaPhiRatioPt50  = new TH2F("ChargedLeadingDeltaPhiRatioPt50","#phi_{trigger} - #phi_{#pi^{0}} vs p_{T leading}/p_{T trigger}, charged leading, p_{T trigger} > 50 GeV/c",120,0,TMath::TwoPi(),nptbins,0,1); 
530   fhChargedLeadingDeltaPhiRatioPt50->SetXTitle("#Delta #phi (rad)");
531   fhChargedLeadingDeltaPhiRatioPt50->SetYTitle("p_{T leading} / p_{T trigger}");          
532         
533   fOutCont->Add(fhChargedLeadingDeltaPhiRatioPt30) ; 
534   fOutCont->Add(fhChargedLeadingDeltaPhiRatioPt50) ; 
535         
536   if(!fJetsOnlyInCTS){
537     
538     fhNeutralLeadingPt  = new TH2F("NeutralLeadingPt","p_{T leading #pi^{0}} vs p_{T trigger}",nptbins,ptmin,ptmax,nptbins,ptmin,ptmax); 
539     fhNeutralLeadingPt->SetYTitle("p_{T leading #pi^{0}}");
540     fhNeutralLeadingPt->SetXTitle("p_{T trigger} (GeV/c)");
541     
542     fhNeutralLeadingPhi  = new TH2F("NeutralLeadingPhi","#phi_{#pi^{0}}  vs p_{T trigger}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); 
543     fhNeutralLeadingPhi->SetYTitle("#phi_{#pi^{0}} (rad)");
544     fhNeutralLeadingPhi->SetXTitle("p_{T trigger} (GeV/c)");
545     
546     fhNeutralLeadingEta  = new TH2F("NeutralLeadingEta","#eta_{#pi^{0}}  vs p_{T trigger}",nptbins,ptmin,ptmax,netabins,etamin,etamax); 
547     fhNeutralLeadingEta->SetYTitle("#eta_{#pi^{0}} ");
548     fhNeutralLeadingEta->SetXTitle("p_{T trigger} (GeV/c)");
549     
550     fhNeutralLeadingDeltaPt  = new TH2F("NeutralLeadingDeltaPt","p_{T trigger} - p_{T #pi^{0}} vs p_{T trigger}",nptbins,ptmin,ptmax,nptbins,ptmin,ptmax); 
551     fhNeutralLeadingDeltaPt->SetYTitle("#Delta p_{T} (GeV/c)");
552     fhNeutralLeadingDeltaPt->SetXTitle("p_{T trigger} (GeV/c)");
553     
554     fhNeutralLeadingDeltaPhi  = new TH2F("NeutralLeadingDeltaPhi","#phi_{trigger} - #phi_{#pi^{0}} vs p_{T trigger}",nptbins,ptmin,ptmax,120,0,TMath::TwoPi()); 
555     fhNeutralLeadingDeltaPhi->SetYTitle("#Delta #phi (rad)");
556     fhNeutralLeadingDeltaPhi->SetXTitle("p_{T trigger} (GeV/c)");
557     
558     fhNeutralLeadingDeltaEta  = new TH2F("NeutralLeadingDeltaEta","#eta_{trigger} - #eta_{#pi^{0}} vs p_{T trigger}",nptbins,ptmin,ptmax,120,-2,2); 
559     fhNeutralLeadingDeltaEta->SetYTitle("#Delta #eta");
560     fhNeutralLeadingDeltaEta->SetXTitle("p_{T trigger} (GeV/c)");
561     
562     fhNeutralLeadingRatioPt  = new TH2F("NeutralLeadingRatioPt","p_{T leading #pi^{0}} /p_{T trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,120,0,2); 
563     fhNeutralLeadingRatioPt->SetYTitle("p_{T lead #pi^{0}} /p_{T trigger}");
564     fhNeutralLeadingRatioPt->SetXTitle("p_{T trigger} (GeV/c)");
565     
566     fhNeutralLeadingXi  = new TH2F("NeutralLeadingXi","ln(p_{T trigger} / p_{T leading #pi^{0}} ) vs p_{T trigger}",nptbins,ptmin,ptmax,120,0,10); 
567     fhNeutralLeadingXi->SetYTitle("#xi");
568     fhNeutralLeadingXi->SetXTitle("p_{T trigger} (GeV/c)");
569     
570     fOutCont->Add(fhNeutralLeadingPt) ;
571     fOutCont->Add(fhNeutralLeadingPhi) ;
572     fOutCont->Add(fhNeutralLeadingEta) ;
573     fOutCont->Add(fhNeutralLeadingDeltaPt) ; 
574     fOutCont->Add(fhNeutralLeadingDeltaPhi) ; 
575     fOutCont->Add(fhNeutralLeadingDeltaEta) ; 
576     fOutCont->Add(fhNeutralLeadingRatioPt) ;
577     fOutCont->Add(fhNeutralLeadingXi) ;
578           
579         fhNeutralLeadingDeltaPhiRatioPt30  = new TH2F("NeutralLeadingDeltaPhiRatioPt30","#phi_{trigger} - #phi_{#pi^{0}} vs p_{T leading}/p_{T trigger}, neutral leading, p_{T trigger} > 30 GeV/c",120,0,TMath::TwoPi(),nptbins,0,1); 
580         fhNeutralLeadingDeltaPhiRatioPt30->SetXTitle("#Delta #phi (rad)");
581         fhNeutralLeadingDeltaPhiRatioPt30->SetYTitle("p_{T leading} / p_{T trigger}");
582           
583         fhNeutralLeadingDeltaPhiRatioPt50  = new TH2F("NeutralLeadingDeltaPhiRatioPt50","#phi_{trigger} - #phi_{#pi^{0}} vs p_{T leading}/p_{T trigger}, neutral leading, p_{T trigger} > 50 GeV/c",120,0,TMath::TwoPi(),nptbins,0,1); 
584         fhNeutralLeadingDeltaPhiRatioPt50->SetXTitle("#Delta #phi (rad)");
585         fhNeutralLeadingDeltaPhiRatioPt50->SetYTitle("p_{T leading} / p_{T trigger}");
586         fOutCont->Add(fhNeutralLeadingDeltaPhiRatioPt30) ; 
587         fOutCont->Add(fhNeutralLeadingDeltaPhiRatioPt50) ; 
588
589   }
590   
591   if(!fSeveralConeAndPtCuts){// not several cones
592     
593     //Jet Distributions
594     fhJetPt  = new TH2F("JetPt","p_{T  jet} vs p_{T trigger}",nptbins,ptmin,ptmax,nptbins,ptmin,ptmax); 
595     fhJetPt->SetYTitle("p_{T  jet}");
596     fhJetPt->SetXTitle("p_{T trigger} (GeV/c)");
597     
598     fhJetRatioPt  = new TH2F("JetRatioPt","p_{T  jet}/p_{T trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,120,0,2); 
599     fhJetRatioPt->SetYTitle("p_{T  jet}/p_{T trigger}");
600     fhJetRatioPt->SetXTitle("p_{T trigger} (GeV/c)");
601     
602     fhJetDeltaPhi  = new TH2F("JetDeltaPhi","#phi_{jet} - #phi_{trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,120,0,TMath::TwoPi()); 
603     fhJetDeltaPhi->SetYTitle("#Delta #phi (rad)");
604     fhJetDeltaPhi->SetXTitle("p_{T trigger} (GeV/c)");
605     
606     fhJetDeltaEta  = new TH2F("JetDeltaEta","#eta_{jet} - #eta_{trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,120,-2,2); 
607     fhJetDeltaEta->SetYTitle("#Delta #eta");
608     fhJetDeltaEta->SetXTitle("p_{T trigger} (GeV/c)");
609     
610     fhJetLeadingRatioPt  = new TH2F("JetLeadingRatioPt","p_{T  jet} vs p_{T trigger}",nptbins,ptmin,ptmax,120,0,2); 
611     fhJetLeadingRatioPt->SetYTitle("p_{T  leading}/p_{T jet}");
612     fhJetLeadingRatioPt->SetXTitle("p_{T trigger} (GeV/c)");
613     
614     fhJetLeadingDeltaPhi  = new TH2F("JetLeadingDeltaPhi","#phi_{jet} - #phi_{leading} vs p_{T trigger}",nptbins,ptmin,ptmax,120,-TMath::Pi(),TMath::Pi()); 
615     fhJetLeadingDeltaPhi->SetYTitle("#Delta #phi (rad)");
616     fhJetLeadingDeltaPhi->SetXTitle("p_{T trigger} (GeV/c)");
617     
618     fhJetLeadingDeltaEta  = new TH2F("JetLeadingDeltaEta","#eta_{jet} - #eta_{leading} vs p_{T trigger}",nptbins,ptmin,ptmax,120,-2,2); 
619     fhJetLeadingDeltaEta->SetYTitle("#Delta #eta");
620     fhJetLeadingDeltaEta->SetXTitle("p_{T trigger} (GeV/c)");
621     
622     fhJetFFz  = new TH2F("JetFFz","z = p_{T i charged}/p_{T trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,200,0.,2); 
623     fhJetFFz->SetYTitle("z");
624     fhJetFFz->SetXTitle("p_{T trigger}");
625     
626     fhJetFFxi  = new TH2F("JetFFxi","#xi = ln(p_{T trigger}/p_{T i charged}) vs p_{T trigger}",nptbins,ptmin,ptmax,100,0.,10.); 
627     fhJetFFxi->SetYTitle("#xi");
628     fhJetFFxi->SetXTitle("p_{T trigger}");
629     
630     fhJetFFpt  = new TH2F("JetFFpt","#xi = p_{T i charged}) vs p_{T trigger}",nptbins,ptmin,ptmax,200,0.,50.); 
631     fhJetFFpt->SetYTitle("p_{T charged hadron}");
632     fhJetFFpt->SetXTitle("p_{T trigger}");
633     
634     fhJetNTracksInCone  = new TH2F("JetNTracksInCone","N particles in cone vs p_{T trigger}",nptbins,ptmin,ptmax,5000,0, 5000); 
635     fhJetNTracksInCone->SetYTitle("N tracks in jet cone");
636     fhJetNTracksInCone->SetXTitle("p_{T trigger} (GeV/c)");
637     
638     fOutCont->Add(fhJetPt) ; 
639     fOutCont->Add(fhJetRatioPt) ; 
640     fOutCont->Add(fhJetDeltaPhi) ;
641     fOutCont->Add(fhJetDeltaEta) ;
642     fOutCont->Add(fhJetLeadingRatioPt) ;
643     fOutCont->Add(fhJetLeadingDeltaPhi) ;
644     fOutCont->Add(fhJetLeadingDeltaEta) ;
645     fOutCont->Add(fhJetFFz) ;
646     fOutCont->Add(fhJetFFxi) ;
647     fOutCont->Add(fhJetFFpt) ;
648     fOutCont->Add(fhJetNTracksInCone) ;
649     
650     //Bkg Distributions
651     fhBkgPt  = new TH2F("BkgPt","p_{T  bkg} vs p_{T trigger}",nptbins,ptmin,ptmax,nptbins,ptmin,ptmax); 
652     fhBkgPt->SetYTitle("p_{T  bkg}");
653     fhBkgPt->SetXTitle("p_{T trigger} (GeV/c)");
654     
655     fhBkgRatioPt  = new TH2F("BkgRatioPt","p_{T  bkg}/p_{T trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,120,0,2); 
656     fhBkgRatioPt->SetYTitle("p_{T  bkg}/p_{T trigger}");
657     fhBkgRatioPt->SetXTitle("p_{T trigger} (GeV/c)");
658     
659     fhBkgDeltaPhi  = new TH2F("BkgDeltaPhi","#phi_{bkg} - #phi_{trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,120,0,TMath::TwoPi()); 
660     fhBkgDeltaPhi->SetYTitle("#Delta #phi (rad)");
661     fhBkgDeltaPhi->SetXTitle("p_{T trigger} (GeV/c)");
662     
663     fhBkgDeltaEta  = new TH2F("BkgDeltaEta","#eta_{bkg} - #eta_{trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,120,-2,2); 
664     fhBkgDeltaEta->SetYTitle("#Delta #eta");
665     fhBkgDeltaEta->SetXTitle("p_{T trigger} (GeV/c)");
666     
667     fhBkgLeadingRatioPt  = new TH2F("BkgLeadingRatioPt","p_{T  bkg} vs p_{T trigger}",nptbins,ptmin,ptmax,120,0,2); 
668     fhBkgLeadingRatioPt->SetYTitle("p_{T  leading}/p_{T bkg}");
669     fhBkgLeadingRatioPt->SetXTitle("p_{T trigger} (GeV/c)");
670     
671     fhBkgLeadingDeltaPhi  = new TH2F("BkgLeadingDeltaPhi","#phi_{bkg} - #phi_{leading} vs p_{T trigger}",nptbins,ptmin,ptmax,120,0,TMath::TwoPi()); 
672     fhBkgLeadingDeltaPhi->SetYTitle("#Delta #phi (rad)");
673     fhBkgLeadingDeltaPhi->SetXTitle("p_{T trigger} (GeV/c)");
674     
675     fhBkgLeadingDeltaEta  = new TH2F("BkgLeadingDeltaEta","#eta_{bkg} - #eta_{leading} vs p_{T trigger}",nptbins,ptmin,ptmax,120,-2,2); 
676     fhBkgLeadingDeltaEta->SetYTitle("#Delta #eta");
677     fhBkgLeadingDeltaEta->SetXTitle("p_{T trigger} (GeV/c)");
678     
679     fhBkgFFz  = new TH2F("BkgFFz","z = p_{T i charged}/p_{T trigger} vs p_{T trigger}", nptbins,ptmin,ptmax,200,0.,2); 
680     fhBkgFFz->SetYTitle("z");
681     fhBkgFFz->SetXTitle("p_{T trigger}");
682     
683     fhBkgFFxi  = new TH2F("BkgFFxi","#xi = ln(p_{T trigger}/p_{T i charged}) vs p_{T trigger}", nptbins,ptmin,ptmax,100,0.,10.); 
684     fhBkgFFxi->SetYTitle("#xi");
685     fhBkgFFxi->SetXTitle("p_{T trigger}");
686     
687     fhBkgFFpt  = new TH2F("BkgFFpt","p_{T charged hadron } vs p_{T trigger}", nptbins,ptmin,ptmax,200,0.,50.); 
688     fhBkgFFpt->SetYTitle("p_{T charged} hadron");
689     fhBkgFFpt->SetXTitle("p_{T trigger}");
690     
691     fhBkgNTracksInCone  = new TH2F("BkgNTracksInCone","N particles in cone vs p_{T trigger}",nptbins,ptmin,ptmax,5000,0, 5000); 
692     fhBkgNTracksInCone->SetYTitle("N tracks in bkg cone");
693     fhBkgNTracksInCone->SetXTitle("p_{T trigger} (GeV/c)");
694     
695     fOutCont->Add(fhBkgPt) ; 
696     fOutCont->Add(fhBkgRatioPt) ; 
697     fOutCont->Add(fhBkgDeltaPhi) ;
698     fOutCont->Add(fhBkgDeltaEta) ;
699     fOutCont->Add(fhBkgLeadingRatioPt) ;
700     fOutCont->Add(fhBkgLeadingDeltaPhi) ;
701     fOutCont->Add(fhBkgLeadingDeltaEta) ;
702     fOutCont->Add(fhBkgFFz) ;
703     fOutCont->Add(fhBkgFFxi) ;
704     fOutCont->Add(fhBkgFFpt) ;
705     fOutCont->Add(fhBkgNTracksInCone) ;
706     
707   }//not several cones
708   else{ //If we want to study the jet for different cones and pt
709     for(Int_t icone = 0; icone<fJetNCone; icone++){//icone
710       for(Int_t ipt = 0; ipt<fJetNPt;ipt++){ //ipt
711         
712         TString lastnamehist ="Cone"+ fJetNameCones[icone]+"Pt"+ fJetNamePtThres[ipt];
713         TString lastnametitle =", cone ="+fJetNameCones[icone]+", pt > " +fJetNamePtThres[ipt]+" GeV/c";
714         
715         //Jet Distributions
716         fhJetPts[icone][ipt] = new TH2F(Form("JetPt%s",lastnamehist.Data()),Form("p_{T  jet} vs p_{T trigger} %s",lastnametitle.Data()),nptbins,ptmin,ptmax,nptbins,ptmin,ptmax); 
717         fhJetPts[icone][ipt]->SetYTitle("p_{T  jet}");
718         fhJetPts[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
719         
720         fhJetRatioPts[icone][ipt] = new TH2F(Form("JetRatioPt%s",lastnamehist.Data()),Form("p_{T  jet}/p_{T trigger} vs p_{T trigger} %s",lastnametitle.Data()),nptbins,ptmin,ptmax,120,0,2); 
721         fhJetRatioPts[icone][ipt]->SetYTitle("p_{T  jet}/p_{T trigger}");
722         fhJetRatioPts[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
723         
724         fhJetDeltaPhis[icone][ipt] = new TH2F(Form("JetDeltaPhi%s",lastnamehist.Data()),Form("#phi_{jet} - #phi_{trigger} vs p_{T trigger} %s",lastnametitle.Data()),nptbins,ptmin,ptmax,120,0,TMath::TwoPi()); 
725         fhJetDeltaPhis[icone][ipt]->SetYTitle("#Delta #phi (rad)");
726         fhJetDeltaPhis[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
727         
728         fhJetDeltaEtas[icone][ipt] = new TH2F(Form("JetDeltaEta%s",lastnamehist.Data()),Form("#eta_{jet} - #eta_{trigger} vs p_{T trigger} %s",lastnametitle.Data()),nptbins,ptmin,ptmax,120,-2,2); 
729         fhJetDeltaEtas[icone][ipt]->SetYTitle("#Delta #eta");
730         fhJetDeltaEtas[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
731         
732         fhJetLeadingRatioPts[icone][ipt] = new TH2F(Form("JetLeadingRatioPt%s",lastnamehist.Data()),Form("p_{T  jet} vs p_{T trigger} %s",lastnametitle.Data()),nptbins,ptmin,ptmax,120,0,2); 
733         fhJetLeadingRatioPts[icone][ipt]->SetYTitle("p_{T  leading}/p_{T jet}");
734         fhJetLeadingRatioPts[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
735         
736         fhJetLeadingDeltaPhis[icone][ipt] = new TH2F(Form("JetLeadingDeltaPhi%s",lastnamehist.Data()),Form("#phi_{jet} - #phi_{leading} vs p_{T trigger} %s",lastnametitle.Data()),nptbins,ptmin,ptmax,120,0,TMath::TwoPi()); 
737         fhJetLeadingDeltaPhis[icone][ipt]->SetYTitle("#Delta #phi (rad)");
738         fhJetLeadingDeltaPhis[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
739         
740         fhJetLeadingDeltaEtas[icone][ipt] = new TH2F(Form("JetLeadingDeltaEta%s",lastnamehist.Data()),Form("#eta_{jet} - #eta_{leading} vs p_{T trigger} %s",lastnametitle.Data()),nptbins,ptmin,ptmax,120,-2,2); 
741         fhJetLeadingDeltaEtas[icone][ipt]->SetYTitle("#Delta #eta");
742         fhJetLeadingDeltaEtas[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
743         
744         fhJetFFzs[icone][ipt] = new TH2F(Form("JetFFz%s",lastnamehist.Data()),"z = p_{T i charged}/p_{T trigger} vs p_{T trigger}", 120,0.,120.,200,0.,2); 
745         fhJetFFzs[icone][ipt]->SetYTitle("z");
746         fhJetFFzs[icone][ipt]->SetXTitle("p_{T trigger}");
747         
748         fhJetFFxis[icone][ipt] = new TH2F(Form("JetFFxi%s",lastnamehist.Data()),"#xi = ln(p_{T trigger}/p_{T i charged}) vs p_{T trigger}", 120,0.,120.,100,0.,10.); 
749         fhJetFFxis[icone][ipt]->SetYTitle("#xi");
750         fhJetFFxis[icone][ipt]->SetXTitle("p_{T trigger}");
751         
752         fhJetFFpts[icone][ipt] = new TH2F(Form("JetFFpt%s",lastnamehist.Data()),"p_{T charged hadron } in jet vs p_{T trigger}", 120,0.,120.,200,0.,50.); 
753         fhJetFFpts[icone][ipt]->SetYTitle("p_{T charged hadron}");
754         fhJetFFpts[icone][ipt]->SetXTitle("p_{T trigger}");
755         
756         fhJetNTracksInCones[icone][ipt] = new TH2F(Form("JetNTracksInCone%s",lastnamehist.Data()),Form("N particles in cone vs p_{T trigger} %s",lastnametitle.Data()),nptbins,ptmin,ptmax,5000,0, 5000); 
757         fhJetNTracksInCones[icone][ipt]->SetYTitle("N tracks in jet cone");
758         fhJetNTracksInCones[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
759         
760         fOutCont->Add(fhJetPts[icone][ipt]) ; 
761         fOutCont->Add(fhJetRatioPts[icone][ipt]) ; 
762         fOutCont->Add(fhJetDeltaPhis[icone][ipt]) ;
763         fOutCont->Add(fhJetDeltaEtas[icone][ipt]) ;
764         fOutCont->Add(fhJetLeadingRatioPts[icone][ipt]) ;
765         fOutCont->Add(fhJetLeadingDeltaPhis[icone][ipt]) ;
766         fOutCont->Add(fhJetLeadingDeltaEtas[icone][ipt]) ;
767         fOutCont->Add(fhJetFFzs[icone][ipt]) ;
768         fOutCont->Add(fhJetFFxis[icone][ipt]) ;
769         fOutCont->Add(fhJetFFpts[icone][ipt]) ;
770         fOutCont->Add(fhJetNTracksInCones[icone][ipt]) ;
771         
772         //Bkg Distributions
773         fhBkgPts[icone][ipt] = new TH2F(Form("BkgPt%s",lastnamehist.Data()),Form("p_{T  bkg} vs p_{T trigger} %s",lastnametitle.Data()),nptbins,ptmin,ptmax,nptbins,ptmin,ptmax); 
774         fhBkgPts[icone][ipt]->SetYTitle("p_{T  bkg}");
775         fhBkgPts[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
776         
777         fhBkgRatioPts[icone][ipt] = new TH2F(Form("BkgRatioPt%s",lastnamehist.Data()),Form("p_{T  bkg}/p_{T trigger} vs p_{T trigger} %s",lastnametitle.Data()),nptbins,ptmin,ptmax,120,0,2); 
778         fhBkgRatioPts[icone][ipt]->SetYTitle("p_{T  bkg}/p_{T trigger}");
779         fhBkgRatioPts[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
780         
781         fhBkgDeltaPhis[icone][ipt] = new TH2F(Form("BkgDeltaPhi%s",lastnamehist.Data()),Form("#phi_{bkg} - #phi_{trigger} vs p_{T trigger} %s",lastnametitle.Data()),nptbins,ptmin,ptmax,120,0,TMath::TwoPi()); 
782         fhBkgDeltaPhis[icone][ipt]->SetYTitle("#Delta #phi (rad)");
783         fhBkgDeltaPhis[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
784         
785         fhBkgDeltaEtas[icone][ipt] = new TH2F(Form("BkgDeltaEta%s",lastnamehist.Data()),Form("#eta_{bkg} - #eta_{trigger} vs p_{T trigger} %s",lastnametitle.Data()),nptbins,ptmin,ptmax,120,-2,2); 
786         fhBkgDeltaEtas[icone][ipt]->SetYTitle("#Delta #eta");
787         fhBkgDeltaEtas[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
788         
789         fhBkgLeadingRatioPts[icone][ipt] = new TH2F(Form("BkgLeadingRatioPt%s",lastnamehist.Data()),Form("p_{T  bkg} vs p_{T trigger} %s",lastnametitle.Data()),nptbins,ptmin,ptmax,120,0,2); 
790         fhBkgLeadingRatioPts[icone][ipt]->SetYTitle("p_{T  leading}/p_{T bkg}");
791         fhBkgLeadingRatioPts[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
792         
793         fhBkgLeadingDeltaPhis[icone][ipt] = new TH2F(Form("BkgLeadingDeltaPhi%s",lastnamehist.Data()),Form("#phi_{bkg} - #phi_{leading} vs p_{T trigger} %s",lastnametitle.Data()),nptbins,ptmin,ptmax,120,0,TMath::TwoPi()); 
794         fhBkgLeadingDeltaPhis[icone][ipt]->SetYTitle("#Delta #phi (rad)");
795         fhBkgLeadingDeltaPhis[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
796         
797         fhBkgLeadingDeltaEtas[icone][ipt] = new TH2F(Form("BkgLeadingDeltaEta%s",lastnamehist.Data()),Form("#eta_{bkg} - #eta_{leading} vs p_{T trigger} %s",lastnametitle.Data()),nptbins,ptmin,ptmax,120,-2,2); 
798         fhBkgLeadingDeltaEtas[icone][ipt]->SetYTitle("#Delta #eta");
799         fhBkgLeadingDeltaEtas[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
800         
801         fhBkgFFzs[icone][ipt] = new TH2F(Form("BkgFFz%s",lastnamehist.Data()),"z = p_{T i charged}/p_{T trigger} vs p_{T trigger}", 120,0.,120.,200,0.,2); 
802         fhBkgFFzs[icone][ipt]->SetYTitle("z");
803         fhBkgFFzs[icone][ipt]->SetXTitle("p_{T trigger}");
804         
805         fhBkgFFxis[icone][ipt] = new TH2F(Form("BkgFFxi%s",lastnamehist.Data()),"#xi = ln(p_{T trigger}/p_{T i charged}) vs p_{T trigger}", 120,0.,120.,100,0.,10.); 
806         fhBkgFFxis[icone][ipt]->SetYTitle("#xi");
807         fhBkgFFxis[icone][ipt]->SetXTitle("p_{T trigger}");
808         
809         fhBkgFFpts[icone][ipt] = new TH2F(Form("BkgFFpt%s",lastnamehist.Data()),"p_{T charged hadron} in jet vs p_{T trigger}", 120,0.,120.,200,0.,50.); 
810         fhBkgFFpts[icone][ipt]->SetYTitle("p_{T charged hadron}");
811         fhBkgFFpts[icone][ipt]->SetXTitle("p_{T trigger}");
812         
813         fhBkgNTracksInCones[icone][ipt] = new TH2F(Form("BkgNTracksInCone%s",lastnamehist.Data()),Form("N particles in cone vs p_{T trigger} %s",lastnametitle.Data()),nptbins,ptmin,ptmax,5000,0, 5000); 
814         fhBkgNTracksInCones[icone][ipt]->SetYTitle("N tracks in bkg cone");
815         fhBkgNTracksInCones[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
816         
817         fOutCont->Add(fhBkgPts[icone][ipt]) ; 
818         fOutCont->Add(fhBkgRatioPts[icone][ipt]) ; 
819         fOutCont->Add(fhBkgDeltaPhis[icone][ipt]) ;
820         fOutCont->Add(fhBkgDeltaEtas[icone][ipt]) ;
821         fOutCont->Add(fhBkgLeadingRatioPts[icone][ipt]) ;
822         fOutCont->Add(fhBkgLeadingDeltaPhis[icone][ipt]) ;
823         fOutCont->Add(fhBkgLeadingDeltaEtas[icone][ipt]) ;
824         fOutCont->Add(fhBkgFFzs[icone][ipt]) ;
825         fOutCont->Add(fhBkgFFxis[icone][ipt]) ;
826         fOutCont->Add(fhBkgFFpts[icone][ipt]) ;
827         fOutCont->Add(fhBkgNTracksInCones[icone][ipt]) ;
828         
829       }//ipt
830     } //icone
831   }//If we want to study any cone or pt threshold
832   
833   //Keep neutral meson selection histograms if requiered
834   //Setting done in AliNeutralMesonSelection
835   if(GetNeutralMesonSelection()){
836     TList * nmsHistos = GetNeutralMesonSelection()->GetCreateOutputObjects() ;
837     if(GetNeutralMesonSelection()->AreNeutralMesonSelectionHistosKept())
838       for(Int_t i = 0; i < nmsHistos->GetEntries(); i++) fOutCont->Add(nmsHistos->At(i)) ;
839         delete nmsHistos;
840   }
841   
842   
843   if(GetDebug() > 2){
844     printf("AliAnaParticleJetLeadingConeCorrelation::GetCreateOutputObjects() - All histograms names : \n");
845     for(Int_t i  = 0 ;  i<  fOutCont->GetEntries(); i++)
846       printf("Histo i %d name %s\n",i,((fOutCont->At(i))->GetName()));
847     //cout<< (fOutCont->At(i))->GetName()<<endl;
848   }
849   
850   return fOutCont;
851
852 }
853
854 //____________________________________________________________________________
855 Bool_t  AliAnaParticleJetLeadingConeCorrelation::GetLeadingParticle(AliAODPWG4ParticleCorrelation *particle, TLorentzVector & pLeading) 
856 {
857   //Search Charged or Neutral leading particle, select the highest one and fill AOD
858   
859   TLorentzVector pLeadingCh(0,0,0,0) ;
860   TLorentzVector pLeadingPi0(0,0,0,0) ;
861   
862   GetLeadingCharge(particle, pLeadingCh) ;
863   if(!fJetsOnlyInCTS) GetLeadingPi0(particle, pLeadingPi0) ;
864   
865   Double_t ptch = pLeadingCh.Pt(); 
866   Double_t ptpi = pLeadingPi0.Pt(); 
867   if (ptch > 0 || ptpi > 0){
868     if((ptch >= ptpi)){
869       if(GetDebug() > 1)printf("AliAnaParticleJetLeadingConeCorrelation::GetLeadingParticle() - Leading found in CTS \n");
870       pLeading = pLeadingCh;
871       if(GetDebug() > 1) printf("AliAnaParticleJetLeadingConeCorrelation::GetLeadingParticle() - Found Leading: pt %2.3f, phi %2.3f deg, eta %2.3f\n", 
872                                 pLeading.Pt(),pLeading.Phi()*TMath::RadToDeg(),pLeading.Eta()) ;
873       //Put leading in AOD
874       particle->SetLeading(pLeadingCh);
875       particle->SetLeadingDetector("CTS");
876       return kTRUE;
877     }
878     else{
879       if(GetDebug() > 1)
880         printf("AliAnaParticleJetLeadingConeCorrelation::GetLeadingParticle() - Leading found in EMCAL \n");
881       pLeading = pLeadingPi0;
882       if(GetDebug() > 1) printf("AliAnaParticleJetLeadingConeCorrelation::GetLeadingParticle() - Found Leading: pt %2.3f, phi %2.3f, eta %2.3f\n", 
883                                 pLeading.Pt(),pLeading.Phi()*TMath::RadToDeg(),pLeading.Eta()) ;
884       //Put leading in AOD
885       particle->SetLeading(pLeadingPi0);
886       particle->SetLeadingDetector("EMCAL");
887       return kTRUE;   
888     }
889   }  
890   
891   if(GetDebug() > 1)printf ("AliAnaParticleJetLeadingConeCorrelation::GetLeadingParticle() - NO LEADING PARTICLE FOUND \n");
892   
893   return kFALSE; 
894   
895 }
896
897 //____________________________________________________________________________
898 void  AliAnaParticleJetLeadingConeCorrelation::GetLeadingCharge(AliAODPWG4ParticleCorrelation* const particle, TLorentzVector & pLeading) const
899 {  
900   //Search for the charged particle with highest pt and with 
901   //Phi=Phi_trigger-Pi and pT=0.1E_gamma 
902   
903   if(GetCTSTracks()){
904     Double_t ptTrig  = particle->Pt();
905     Double_t phiTrig = particle->Phi();
906     Double_t rat     = -100 ;
907     Double_t ptl     = -100 ;
908     Double_t phil    = -100 ;
909     Double_t pt      = -100.;
910     Double_t phi     = -100.;
911     TVector3 p3;
912     
913     for(Int_t ipr = 0;ipr < GetCTSTracks()->GetEntriesFast() ; ipr ++ ){
914       AliVTrack* track = (AliVTrack *)(GetCTSTracks()->At(ipr)) ;
915       p3.SetXYZ(track->Px(),track->Py(),track->Pz());
916       pt   = p3.Pt();
917       phi  = p3.Phi() ;
918       if(phi < 0) phi+=TMath::TwoPi();
919       rat  = pt/ptTrig ;
920       //printf("AliAnaParticleJetLeadingConeCorrelation::GetLeadingCharge() - Tracks: pt %2.3f eta %2.3f phi %2.3f pt/ptTrig %2.3f \n", 
921       //           pt, p3.Eta(), phi,pt/ptTrig) ; 
922       Float_t deltaphi = TMath::Abs(phiTrig-phi);
923       if((deltaphi > fDeltaPhiMinCut) && (deltaphi < fDeltaPhiMaxCut) &&
924          (rat > fLeadingRatioMinCut) && (rat < fLeadingRatioMaxCut)  && (pt  > ptl)) {
925         phil = phi ;
926         ptl  = pt ;
927         pLeading.SetVect(p3);
928       }
929     }// track loop
930     
931     if(GetDebug() > 1 && ptl > 0 ) printf("AliAnaParticleJetLeadingConeCorrelation::GetLeadingCharge() - Leading in CTS: pt %2.3f eta %2.3f phi %2.3f pt/ptTrig %2.3f, |phiTrig-phi| %2.3f \n", 
932                                           ptl, pLeading.Eta(), phil,ptl/ptTrig, TMath::Abs(phiTrig-phil)) ;
933     
934   }//CTS list exist
935 }
936
937 //____________________________________________________________________________
938 void  AliAnaParticleJetLeadingConeCorrelation::GetLeadingPi0(AliAODPWG4ParticleCorrelation* const particle, TLorentzVector & pLeading)
939 {  
940   //Search for the neutral pion with highest pt and with 
941   //Phi=Phi_trigger-Pi and pT=0.1E_gamma
942   
943   if(GetEMCALClusters()){
944     Double_t ptTrig  = particle->Pt();
945     Double_t phiTrig = particle->Phi();
946     Double_t rat     = -100 ;
947     Double_t ptl     = -100 ;
948     Double_t phil    = -100 ;
949     Double_t pt      = -100.;
950     Double_t phi     = -100.;
951     
952     TLorentzVector gammai;
953     TLorentzVector gammaj;
954           
955     //Get vertex for photon momentum calculation
956     Double_t vertex [] = {0,0,0} ; //vertex 
957     //Double_t vertex2[] = {0,0,0} ; //vertex of second input AOD 
958     if(GetReader()->GetDataType() != AliCaloTrackReader::kMC) 
959     {
960       GetVertex(vertex);
961       //if(GetReader()->GetSecondInputAODTree()) GetReader()->GetSecondInputAODVertex(vertex2);
962     }
963           
964     //Cluster loop, select pairs with good pt, phi and fill AODs or histograms
965     for(Int_t iclus = 0;iclus < GetEMCALClusters()->GetEntriesFast() ; iclus ++ ){
966       AliVCluster * calo = (AliVCluster *)(GetEMCALClusters()->At(iclus)) ;
967       
968       //Input from second AOD?
969       //Int_t inputi = 0;
970       //          if     (particle->GetDetector() == "EMCAL" && GetReader()->GetEMCALClustersNormalInputEntries() <= iclus) inputi = 1 ;
971       //          else if(particle->GetDetector() == "PHOS"  && GetReader()->GetPHOSClustersNormalInputEntries()  <= iclus) inputi = 1;
972       
973       //Cluster selection, not charged, with photon or pi0 id and in fiducial cut
974       Int_t pdgi=0;
975       //if     (inputi == 0 && !SelectCluster(calo, vertex,  gammai, pdgi))  continue ;
976       //else if(inputi == 1 && !SelectCluster(calo, vertex2, gammai, pdgi))  continue ; 
977       if(!SelectCluster(calo, vertex,  gammai, pdgi))  continue ;
978       
979       if(GetDebug() > 2) printf("AliAnaParticleJetLeadingConeCorrelation::GetLeadingPi0() - Neutral cluster: pt %2.3f, phi %2.3f \n", 
980                                 gammai.Pt(),gammai.Phi());
981       
982       //2 gamma overlapped, found with PID
983       if(pdgi == AliCaloPID::kPi0){ 
984         
985         if(GetDebug() > 2) printf("AliAnaParticleJetLeadingConeCorrelation::GetLeadingPi0() - Neutral cluster ID as Pi0 \n");
986         
987         pt  = gammai.Pt();
988         rat = pt/ptTrig;
989         phi = gammai.Phi();
990         if(phi < 0) phi+=TMath::TwoPi();
991         
992         //Selection within angular and energy limits
993         Float_t deltaphi = TMath::Abs(phiTrig-phi);
994         if(pt > ptl  && rat > fLeadingRatioMinCut  && rat < fLeadingRatioMaxCut  && 
995            deltaphi > fDeltaPhiMinCut && deltaphi < fDeltaPhiMaxCut )
996         {
997           phil = phi ;
998           ptl  = pt ;
999           pLeading.SetPxPyPzE(gammai.Px(),gammai.Py(),gammai.Pz(),gammai.E());
1000         }// cuts
1001       }// pdg = AliCaloPID::kPi0
1002       //Make invariant mass analysis
1003       else if(pdgi == AliCaloPID::kPhoton){     
1004         //Search the photon companion in case it comes from  a Pi0 decay
1005         //Apply several cuts to select the good pair
1006         for(Int_t jclus = iclus+1; jclus < GetEMCALClusters()->GetEntriesFast() ; jclus ++ ){
1007           AliVCluster * calo2 = (AliVCluster *) (GetEMCALClusters()->At(jclus)) ;
1008           
1009           //Input from second AOD?
1010           //Int_t inputj = 0;
1011           //      if     (particle->GetDetector() == "EMCAL" && GetReader()->GetEMCALClustersNormalInputEntries() <= jclus) inputj = 1;
1012           //      else if(particle->GetDetector() == "PHOS"  && GetReader()->GetPHOSClustersNormalInputEntries()  <= jclus) inputj = 1;
1013           
1014           //Cluster selection, not charged with photon or pi0 id and in fiducial cut
1015           Int_t pdgj=0;
1016           //if     (inputj == 0 && !SelectCluster(calo2, vertex,  gammaj, pdgj))  continue ;
1017           //else if(inputj == 1 && !SelectCluster(calo2, vertex2, gammaj, pdgj))  continue ;
1018           if     (!SelectCluster(calo2, vertex,  gammaj, pdgj))  continue ;
1019
1020           if(pdgj == AliCaloPID::kPhoton ){
1021             
1022             pt  = (gammai+gammaj).Pt();
1023             phi = (gammai+gammaj).Phi();
1024             if(phi < 0) phi+=TMath::TwoPi();  
1025             rat = pt/ptTrig;
1026             
1027             //Selection within angular and energy limits
1028             Float_t deltaphi = TMath::Abs(phiTrig-phi);  
1029             if(GetDebug() > 3 ) printf("AliAnaParticleJetLeadingConeCorrelation::GetLeadingPi0() - Neutral Hadron Correlation: gamma pair: pt %2.2f, phi %2.2f, eta %2.2f, |phiTrig-phi| %2.3f, pt/ptTrig %2.3f, M %2.3f\n",
1030                                        pt,phi,(gammai+gammaj).Eta(), deltaphi, rat, (gammai+gammaj).M());
1031             
1032             if(pt > ptl  && rat > fLeadingRatioMinCut  && rat < fLeadingRatioMaxCut  && 
1033                deltaphi > fDeltaPhiMinCut && deltaphi < fDeltaPhiMaxCut ){
1034               //Select good pair (aperture and invariant mass)
1035               if(GetNeutralMesonSelection()->SelectPair(gammai, gammaj)){
1036                 phil = phi ;
1037                 ptl  = pt ;
1038                 pLeading=(gammai+gammaj);       
1039                 
1040                 if(GetDebug() > 3 ) printf("AliAnaParticleJetLeadingConeCorrelation::GetLeadingPi0() - Neutral Hadron Correlation: Selected gamma pair: pt %2.2f, phi %2.2f, eta %2.2f, M %2.3f\n",
1041                                            ptl,phil,(gammai+gammaj).Eta(), (gammai+gammaj).M());
1042               }//pi0 selection
1043               
1044               
1045             }//Pair selected as leading
1046           }//if pair of gammas
1047         }//2nd loop
1048       }// if pdg = 22
1049     }// 1st Loop
1050     
1051     if(GetDebug() > 2 && pLeading.Pt() > 0 ) printf("AliAnaParticleJetLeadingConeCorrelation::GetLeadingPi0() - Leading EMCAL: pt %2.3f eta %2.3f phi %2.3f pt/Eg %2.3f \n",  
1052                                                     pLeading.Pt(), pLeading.Eta(), phil,  pLeading.Pt()/ptTrig) ;
1053     
1054   }//EMCAL list exists
1055 }
1056
1057 //____________________________________________________________________________
1058 void AliAnaParticleJetLeadingConeCorrelation::InitParameters()
1059 {
1060   //Initialize the parameters of the analysis.
1061   SetInputAODName("PWG4Particle");
1062   SetAODObjArrayName("JetLeadingCone");    
1063   AddToHistogramsName("AnaJetLCCorr_");
1064   
1065   fJetsOnlyInCTS      = kFALSE ;
1066   fPbPb               = kFALSE ;
1067   fReMakeJet          = kFALSE ;
1068   
1069   //Leading selection parameters
1070   fDeltaPhiMinCut     = 2.9 ;
1071   fDeltaPhiMaxCut     = 3.4 ; 
1072   fLeadingRatioMinCut = 0.1;
1073   fLeadingRatioMaxCut = 1.5; 
1074   
1075   //Jet selection parameters
1076   //Fixed cut   
1077   fJetRatioMaxCut     = 1.2 ; 
1078   fJetRatioMinCut     = 0.3 ; 
1079   fJetCTSRatioMaxCut  = 1.2 ;
1080   fJetCTSRatioMinCut  = 0.3 ;
1081   fSelect               = 0  ; //0, Accept all jets, 1, selection depends on energy, 2 fixed selection
1082   
1083   fSelectIsolated = kFALSE;
1084   
1085   //Cut depending on gamma energy
1086   fPtTriggerSelectionCut = 10.; //For Low pt jets+BKG, another limits applied
1087   //Reconstructed jet energy dependence parameters 
1088   //e_jet = a1+e_gamma b2. 
1089   //Index 0-> Pt>2 GeV r = 0.3; Index 1-> Pt>0.5 GeV r = 0.3
1090   fJetE1[0] = -5.75; fJetE1[1] = -4.1;
1091   fJetE2[0] = 1.005; fJetE2[1] = 1.05;
1092   
1093   //Reconstructed sigma of jet energy dependence parameters 
1094   //s_jet = a1+e_gamma b2. 
1095   //Index 0-> Pt>2 GeV r = 0.3; Index 1-> Pt>0.5 GeV r = 0.3
1096   fJetSigma1[0] = 2.65;   fJetSigma1[1] = 2.75;
1097   fJetSigma2[0] = 0.0018; fJetSigma2[1] = 0.033;
1098   
1099   //Background mean energy and RMS
1100   //Index 0-> No BKG; Index 1-> BKG > 2 GeV; 
1101   //Index 2-> (low pt jets)BKG > 0.5 GeV;
1102   //Index > 2, same for CTS conf
1103   fBkgMean[0] = 0.; fBkgMean[1] = 8.8 ; fBkgMean[2] = 69.5;
1104   fBkgMean[3] = 0.; fBkgMean[4] = 6.4;  fBkgMean[5] = 48.6;
1105   fBkgRMS[0]  = 0.; fBkgRMS[1]  = 7.5;  fBkgRMS[2]  = 22.0; 
1106   fBkgRMS[3]  = 0.; fBkgRMS[4]  = 5.4;  fBkgRMS[5]  = 13.2; 
1107
1108   //Factor x of min/max = E -+ x * sigma. Obtained after selecting the
1109   //limits for monoenergetic jets.
1110   //Index 0-> No BKG; Index 1-> BKG > 2 GeV; 
1111   //Index 2-> (low pt jets) BKG > 0.5 GeV;
1112   //Index > 2, same for CTS conf
1113
1114   fJetXMin1[0] =-0.69 ; fJetXMin1[1] = 0.39 ; fJetXMin1[2] =-0.88 ; 
1115   fJetXMin1[3] =-2.0  ; fJetXMin1[4] =-0.442 ; fJetXMin1[5] =-1.1  ;
1116   fJetXMin2[0] = 0.066; fJetXMin2[1] = 0.038; fJetXMin2[2] = 0.034; 
1117   fJetXMin2[3] = 0.25 ; fJetXMin2[4] = 0.113; fJetXMin2[5] = 0.077 ;
1118   fJetXMax1[0] =-3.8  ; fJetXMax1[1] =-0.76 ; fJetXMax1[2] =-3.6  ; 
1119   fJetXMax1[3] =-2.7  ; fJetXMax1[4] =-1.21 ; fJetXMax1[5] =-3.7  ;
1120   fJetXMax2[0] =-0.012; fJetXMax2[1] =-0.022; fJetXMax2[2] = 0.016; 
1121   fJetXMax2[3] =-0.024; fJetXMax2[4] =-0.008; fJetXMax2[5] = 0.027;
1122
1123
1124   //Different cones and pt thresholds to construct the jet
1125
1126   fJetCone        = 0.3  ;
1127   fJetPtThreshold = 0.5   ;
1128   fJetPtThresPbPb = 2.   ;
1129   fJetNCone       = 4    ;
1130   fJetNPt         = 4    ;
1131   fJetCones[0]    = 0.2  ; fJetNameCones[0]   = "02" ;
1132   fJetCones[1]    = 0.3  ; fJetNameCones[1]   = "03" ;
1133   fJetCones[2]    = 0.4  ; fJetNameCones[2]   = "04" ;
1134   fJetCones[2]    = 0.5  ; fJetNameCones[2]   = "05" ;
1135
1136   fJetPtThres[0]  = 0.0  ; fJetNamePtThres[0] = "00" ;
1137   fJetPtThres[1]  = 0.5  ; fJetNamePtThres[1] = "05" ;
1138   fJetPtThres[2]  = 1.0  ; fJetNamePtThres[2] = "10" ;
1139   fJetPtThres[3]  = 2.0  ; fJetNamePtThres[3] = "20" ;
1140 }
1141
1142 //__________________________________________________________________________-
1143 Bool_t AliAnaParticleJetLeadingConeCorrelation::IsJetSelected(const Double_t ptTrig, const Double_t ptjet) const {
1144   //Given the pt of the jet and the trigger particle, select the jet or not
1145   //3 options, fSelect=0 accepts all, fSelect=1 selects jets depending on a 
1146   //function energy dependent and fSelect=2 selects on simple fixed cuts
1147   
1148   if(ptjet == 0) return kFALSE;
1149   
1150   Double_t rat = ptTrig / ptjet ;
1151   
1152   //###############################################################
1153   if(fSelect == 0)
1154     return kTRUE; //Accept all jets, no restriction
1155   //###############################################################
1156   else if(fSelect == 1){
1157     //Check if the energy of the reconstructed jet is within an energy window
1158     //WARNING: to be rechecked, don't remember what all the steps mean
1159     Double_t par[6];
1160     Double_t xmax[2];
1161     Double_t xmin[2];
1162     
1163     Int_t iCTS = 0;
1164     if(fJetsOnlyInCTS)
1165       iCTS = 3 ;
1166     
1167     if(!fPbPb){
1168       //Phythia alone, jets with pt_th > 0.2, r = 0.3 
1169       par[0] = fJetE1[0]; par[1] = fJetE2[0]; 
1170       //Energy of the jet peak
1171       //e_jet = fJetE1[0]+fJetE2[0]*e_gamma, simulation fit
1172       par[2] = fJetSigma1[0]; par[3] = fJetSigma2[0];
1173       //Sigma  of the jet peak
1174       //sigma_jet = fJetSigma1[0]+fJetSigma2[0]*e_gamma, simulation fit
1175       par[4] = fBkgMean[0 + iCTS]; par[5] = fBkgRMS[0 + iCTS];
1176       //Parameters reserved for PbPb bkg.
1177       xmax[0] = fJetXMax1[0 + iCTS]; xmax[1] = fJetXMax2[0 + iCTS];
1178       xmin[0] = fJetXMin1[0 + iCTS]; xmin[1] = fJetXMin2[0 + iCTS];
1179       //Factor that multiplies sigma to obtain the best limits, 
1180       //by observation, of mono jet ratios (ptjet/ptTrig)
1181       //X_jet = fJetX1[0]+fJetX2[0]*e_gamma
1182       
1183     }
1184     else{
1185       if(ptTrig > fPtTriggerSelectionCut){
1186         //Phythia +PbPb with  pt_th > 2 GeV/c, r = 0.3 
1187         par[0] = fJetE1[0]; par[1] = fJetE2[0]; 
1188         //Energy of the jet peak, same as in pp
1189         //e_jet = fJetE1[0]+fJetE2[0]*e_gamma, simulation fit
1190         par[2] = fJetSigma1[0]; par[3] = fJetSigma2[0];
1191         //Sigma  of the jet peak, same as in pp
1192         //sigma_jet = fJetSigma1[0]+fJetSigma2[0]*e_gamma, simulation fit
1193         par[4] = fBkgMean[1 + iCTS]; par[5] = fBkgRMS[1 + iCTS];
1194         //Mean value and RMS of PbPb Bkg 
1195         xmax[0] = fJetXMax1[1 + iCTS]; xmax[1] = fJetXMax2[1 + iCTS];
1196         xmin[0] = fJetXMin1[1 + iCTS]; xmin[1] = fJetXMin2[1 + iCTS];
1197         //Factor that multiplies sigma to obtain the best limits, 
1198         //by observation, of mono jet ratios (ptjet/ptTrig) mixed with PbPb Bkg, 
1199         //pt_th > 2 GeV, r = 0.3
1200         //X_jet = fJetX1[0]+fJetX2[0]*e_gamma
1201         
1202       }
1203       else{
1204         //Phythia + PbPb with  pt_th > 0.5 GeV/c, r = 0.3
1205         par[0] = fJetE1[1]; par[1] = fJetE2[1]; 
1206         //Energy of the jet peak, pt_th > 2 GeV/c, r = 0.3 
1207         //e_jet = fJetE1[0]+fJetE2[0]*e_gamma, simulation fit
1208         par[2] = fJetSigma1[1]; par[3] = fJetSigma2[1];
1209         //Sigma  of the jet peak, pt_th > 2 GeV/c, r = 0.3
1210         //sigma_jet = fJetSigma1[0]+fJetSigma2[0]*e_gamma, simulation fit
1211         par[4] = fBkgMean[2 + iCTS]; par[5] = fBkgRMS[2 + iCTS];
1212         //Mean value and RMS of PbPb Bkg in a 0.3 cone, pt > 2 GeV.
1213         xmax[0] = fJetXMax1[2 + iCTS]; xmax[1] = fJetXMax2[2 + iCTS];
1214         xmin[0] = fJetXMin1[2 + iCTS]; xmin[1] = fJetXMin2[2 + iCTS];
1215         //Factor that multiplies sigma to obtain the best limits, 
1216         //by observation, of mono jet ratios (ptjet/ptTrig) mixed with PbPb Bkg, 
1217         //pt_th > 2 GeV, r = 0.3
1218         //X_jet = fJetX1[0]+fJetX2[0]*e_gamma
1219         
1220       }//If low pt jet in bkg
1221     }//if Bkg
1222     
1223     //Calculate minimum and maximum limits of the jet ratio.
1224     Double_t min = CalculateJetRatioLimit(ptTrig, par, xmin);
1225     Double_t max = CalculateJetRatioLimit(ptTrig, par, xmax);
1226     
1227     if(GetDebug() > 3)printf("AliAnaParticleJetLeadingConeCorrelation::IsJetSelected() - Jet selection?  : Limits min %2.3f, max %2.3f,  pt_jet %2.3f,  pt_gamma %2.3f, pt_jet / pt_gamma %2.3f\n",min,max,ptjet,ptTrig,rat);
1228     
1229     if(( min < rat ) && ( max > ptjet/rat))
1230       return kTRUE;
1231     else
1232       return kFALSE;
1233   }//fSelect = 1
1234   //###############################################################
1235   else if(fSelect == 2){
1236     //Simple selection
1237     if(!fJetsOnlyInCTS){
1238       if((rat <  fJetRatioMaxCut) && (rat > fJetRatioMinCut )) return kTRUE;
1239     }
1240     else{
1241       if((rat <  fJetCTSRatioMaxCut) && (rat > fJetCTSRatioMinCut )) return kTRUE;
1242     }
1243   }// fSelect = 2
1244   //###############################################################
1245   else{
1246     printf("AliAnaParticleJetLeadingConeCorrelation::IsJetSelected() - Jet selection option larger than 2, DON'T SELECT JETS\n");
1247     return kFALSE ;
1248   }
1249   
1250   return kFALSE;
1251   
1252 }
1253
1254 //___________________________________________________________________
1255 Bool_t AliAnaParticleJetLeadingConeCorrelation::IsParticleInJetCone(const Double_t eta, Double_t phi, const Double_t etal,  Double_t phil)
1256   const {
1257   //Check if the particle is inside the cone defined by the leading particle
1258   //WARNING: To be rechecked
1259   
1260   if(phi < 0) phi+=TMath::TwoPi();
1261   if(phil < 0) phil+=TMath::TwoPi();  
1262   Double_t  rad = 10000 + fJetCone;
1263   
1264   if(TMath::Abs(phi-phil) <= (TMath::TwoPi() - fJetCone))
1265     rad = TMath::Sqrt(TMath::Power(eta-etal,2)+TMath::Power(phi-phil,2));
1266   else{
1267     if(phi-phil > TMath::TwoPi() - fJetCone)
1268       rad = TMath::Sqrt(TMath::Power(eta-etal,2)+TMath::Power((phi-TMath::TwoPi())-phil,2));
1269     if(phi-phil < -(TMath::TwoPi() - fJetCone))
1270       rad = TMath::Sqrt(TMath::Power(eta-etal,2)+TMath::Power((phi+TMath::TwoPi())-phil,2));
1271   }
1272   
1273   if(rad < fJetCone) return kTRUE ;
1274   else return kFALSE ;
1275   
1276 }
1277
1278 //__________________________________________________________________
1279 void  AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillAOD() 
1280 {  
1281   //Particle-Hadron Correlation Analysis, fill AODs
1282   
1283   if(!GetInputAODBranch()){
1284     printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillAOD() - No input particles in AOD with name branch < %s > \n",
1285            GetInputAODName().Data());
1286     abort();
1287   }     
1288   
1289   if(strcmp(GetInputAODBranch()->GetClass()->GetName(), "AliAODPWG4ParticleCorrelation")){
1290     printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillAOD() - Wrong type of AOD object, change AOD class name in input AOD: It should be <AliAODPWG4ParticleCorrelation> and not <%s> \n",GetInputAODBranch()->GetClass()->GetName());
1291     abort();
1292   }     
1293   
1294   if(GetDebug() > 1){
1295     printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillAOD() - Begin jet leading cone  correlation analysis, fill AODs \n");
1296     printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillAOD() - In particle branch aod entries %d\n", GetInputAODBranch()->GetEntriesFast());
1297     printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillAOD() - In CTS aod entries %d\n", GetCTSTracks()->GetEntriesFast());
1298     printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillAOD() - In EMCAL aod entries %d\n", GetEMCALClusters()->GetEntriesFast());
1299   }
1300   
1301   TLorentzVector pLeading(0,0,0,0); //It will contain the kinematics of the found leading particle
1302   
1303   //Loop on stored AOD particles, trigger
1304   Int_t naod = GetInputAODBranch()->GetEntriesFast();
1305   for(Int_t iaod = 0; iaod < naod ; iaod++){
1306     AliAODPWG4ParticleCorrelation* particle =  (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));                  
1307     
1308     //  printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillAOD() - Trigger : pt %3.2f, phi %2.2f, eta %2.2f\n",particle->Pt(), particle->Phi(), particle->Eta());
1309     
1310     //Search leading particles in CTS and EMCAL 
1311     if(GetLeadingParticle(particle, pLeading)){
1312       
1313       //Construct the jet around the leading, Fill AOD jet particle list, select jet 
1314       //and fill AOD with jet and background     
1315       MakeAODJet(particle, pLeading);
1316       
1317     }//Leading found
1318   }//AOD trigger particle loop
1319   
1320   if(GetDebug() >1)printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillAOD() - End of jet leading cone analysis, fill AODs \n");
1321   
1322
1323
1324 //__________________________________________________________________
1325 void  AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillHistograms() 
1326 {
1327   
1328   //Particle-Hadron Correlation Analysis, fill histograms
1329   
1330   if(!GetInputAODBranch()){
1331     printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillHistograms() - No input particles in AOD with name branch < %s > \n",
1332            GetInputAODName().Data());   
1333     abort();
1334   }
1335   if(GetDebug() > 1){
1336     printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillHistograms() - Begin jet leading cone  correlation analysis, fill histograms \n");
1337     printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillHistograms() - In particle branch aod entries %d\n", GetInputAODBranch()->GetEntriesFast());
1338     printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillHistograms() - In CTS aod entries %d\n", GetCTSTracks()->GetEntriesFast());
1339     printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillHistograms() - In EMCAL aod entries %d\n", GetEMCALClusters()->GetEntriesFast());
1340   }
1341   
1342   TLorentzVector pLeading(0,0,0,0) ;
1343   
1344   //Loop on stored AOD particles, trigger
1345   Int_t naod = GetInputAODBranch()->GetEntriesFast();
1346   for(Int_t iaod = 0; iaod < naod ; iaod++){
1347     AliAODPWG4ParticleCorrelation* particle =  (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1348     
1349     if(OnlyIsolated() && !particle->IsIsolated()) continue;
1350     
1351     Double_t pt = particle->Pt();
1352     Double_t phi = particle->Phi();
1353     Double_t eta = particle->Eta();
1354     
1355     //Get leading particle, fill histograms
1356     pLeading = particle->GetLeading();
1357     TString det = particle->GetLeadingDetector();      
1358     
1359     if(det!="" && pLeading.Pt() > 0){
1360       Double_t ptL = pLeading.Pt(); 
1361       Double_t phiL = pLeading.Phi(); 
1362       if(phiL < 0 ) phiL+=TMath::TwoPi();
1363       Double_t etaL = pLeading.Eta(); 
1364       
1365       if(GetDebug() > 1)   printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillHistograms() - Trigger with pt %3.2f, phi %2.2f, eta %2.2f\n", pt, phi, eta);       
1366
1367       if(det == "CTS"){
1368         fhChargedLeadingPt->Fill(pt,ptL);
1369         fhChargedLeadingPhi->Fill(pt,phiL);
1370         fhChargedLeadingEta->Fill(pt,etaL);
1371         fhChargedLeadingDeltaPt->Fill(pt,pt-ptL);
1372         fhChargedLeadingDeltaPhi->Fill(pt,TMath::Abs(phi-phiL));
1373         fhChargedLeadingDeltaEta->Fill(pt,eta-etaL);
1374         fhChargedLeadingRatioPt->Fill(pt,ptL/pt);
1375         fhChargedLeadingXi->Fill(pt,TMath::Log(pt/ptL));
1376         if(pt > 30) fhChargedLeadingDeltaPhiRatioPt30->Fill(TMath::Abs(phi-phiL),ptL/pt);
1377         if(pt > 50) fhChargedLeadingDeltaPhiRatioPt50->Fill(TMath::Abs(phi-phiL),ptL/pt);
1378       }
1379       else if(det== "EMCAL"){
1380         fhNeutralLeadingPt->Fill(pt,ptL);
1381         fhNeutralLeadingPhi->Fill(pt,phiL);
1382         fhNeutralLeadingEta->Fill(pt,etaL);
1383         fhNeutralLeadingDeltaPt->Fill(pt,pt-ptL);
1384         fhNeutralLeadingDeltaPhi->Fill(pt,TMath::Abs(phi-phiL));
1385         fhNeutralLeadingDeltaEta->Fill(pt,eta-etaL);
1386         fhNeutralLeadingRatioPt->Fill(pt,ptL/pt);
1387         fhNeutralLeadingXi->Fill(pt,TMath::Log(pt/ptL));
1388         if(pt > 30) fhNeutralLeadingDeltaPhiRatioPt30->Fill(TMath::Abs(phi-phiL),ptL/pt);
1389         if(pt > 50) fhNeutralLeadingDeltaPhiRatioPt50->Fill(TMath::Abs(phi-phiL),ptL/pt);
1390
1391       }
1392       
1393       //Fill Jet histograms
1394       TLorentzVector bkg(0,0,0,0);
1395       TLorentzVector jet(0,0,0,0);
1396       if(!fSeveralConeAndPtCuts){//just fill histograms      
1397         if(!fReMakeJet){
1398           jet=particle->GetCorrelatedJet();
1399           bkg=particle->GetCorrelatedBackground();
1400         }
1401         else  MakeJetFromAOD(particle, pLeading, jet,bkg);
1402         
1403         if(jet.Pt() > 0){//Jet was found
1404           FillJetHistos(particle, pLeading, jet,"Jet","");
1405           FillJetHistos(particle, pLeading, bkg,"Bkg","");
1406         }
1407       }
1408       else if(fSeveralConeAndPtCuts){
1409         for(Int_t icone = 0; icone<fJetNCone; icone++) {
1410           fJetCone=fJetCones[icone];      
1411           for(Int_t ipt = 0; ipt<fJetNPt;ipt++) {  
1412             TString lastname ="Cone"+ fJetNameCones[icone]+"Pt"+ fJetNamePtThres[ipt];
1413             fJetPtThreshold=fJetPtThres[ipt];
1414             MakeJetFromAOD(particle, pLeading, jet,bkg);
1415             if(jet.Pt() > 0) {//Jet was found
1416               FillJetHistos(particle, pLeading, jet,"Jet",lastname);
1417               FillJetHistos(particle, pLeading, bkg,"Bkg",lastname);
1418             }
1419           }//icone
1420         }//ipt
1421       }//fSeveralConeAndPtCuts
1422     }//Leading
1423   }//AOD trigger particle loop
1424   
1425   if(GetDebug() >1)printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillHistograms() - End of jet leading cone analysis, fill histograms \n");
1426   
1427
1428
1429 //____________________________________________________________________________
1430 void AliAnaParticleJetLeadingConeCorrelation::MakeAODJet(AliAODPWG4ParticleCorrelation *particle, const TLorentzVector  pLeading)
1431   const {
1432   //Fill the jet with the particles around the leading particle with 
1433   //R=fJetCone and pt_th = fJetPtThres. Calculate the energy of the jet and 
1434   //fill aod with found information 
1435   
1436   TLorentzVector bkg(0,0,0,0);
1437   TLorentzVector jet(0,0,0,0);
1438   TLorentzVector lv (0,0,0,0); //Temporal container for jet particles kinematics 
1439   
1440   Double_t ptTrig   = particle->Pt();
1441   Double_t phiTrig  = particle->Phi();
1442   Double_t phil     = pLeading.Phi();
1443   if(phil<0) phil+=TMath::TwoPi();
1444   Double_t etal     = pLeading.Eta();
1445
1446   //Different pt cut for jet particles in different collisions systems
1447   Float_t ptcut = fJetPtThreshold;
1448   if(fPbPb && !fSeveralConeAndPtCuts && ptTrig > fPtTriggerSelectionCut)  ptcut = fJetPtThresPbPb ;
1449   
1450   //Add charged particles to jet if they are in cone around the leading particle
1451   if(!GetCTSTracks()) {
1452     printf("AliAnaParticleJetLeadingConeCorrelation::MakeAODJet() - Cannot construct jets without tracks, STOP analysis");
1453     return;
1454   }
1455   
1456   //Fill jet with tracks
1457   TVector3 p3;
1458   //Initialize reference arrays that will contain jet and background tracks
1459   TObjArray * reftracks  = new TObjArray;
1460   TObjArray * reftracksbkg  = new TObjArray;
1461   
1462   for(Int_t ipr = 0;ipr < (GetCTSTracks())->GetEntriesFast() ; ipr ++ ){
1463     AliVTrack* track = (AliVTrack *)((GetCTSTracks())->At(ipr)) ;
1464     p3.SetXYZ(track->Px(),track->Py(),track->Pz());
1465     
1466     //Particles in jet 
1467     if(IsParticleInJetCone(p3.Eta(), p3.Phi(), etal, phil)){
1468       
1469       reftracks->Add(track); 
1470       
1471       if(p3.Pt() > ptcut ){
1472         lv.SetVect(p3);
1473         jet+=lv;
1474       }
1475     } 
1476
1477     //Background around (phi_gamma-pi, eta_leading)
1478     else if(IsParticleInJetCone(p3.Eta(),p3.Phi(),etal, phiTrig)) { 
1479       
1480       reftracksbkg->Add(track); 
1481
1482       if(p3.Pt() > ptcut ){
1483         lv.SetVect(p3);
1484         bkg+=lv;
1485       }
1486     }
1487   }//Track loop
1488   
1489   //Add referenced tracks to AOD
1490   if(reftracks->GetEntriesFast() > 0 ){
1491     reftracks->SetName(Form("%sTracks",GetAODObjArrayName().Data()));
1492     particle->AddObjArray(reftracks);
1493   }
1494   else  if(GetDebug() > 2 ) printf("AliAnaParticleJetLeadingConeCorrelation::MakeAODJet() - No tracks in jet cone\n");
1495   if(reftracksbkg->GetEntriesFast() > 0 ){
1496     reftracksbkg->SetName(Form("%sTracksBkg",GetAODObjArrayName().Data()));
1497     particle->AddObjArray(reftracksbkg);
1498   }
1499   else  if(GetDebug() > 2 ) printf("AliAnaParticleJetLeadingConeCorrelation::MakeAODJet() - No background tracks in jet cone\n");
1500   
1501   //Add neutral particles to jet
1502   //Initialize reference arrays that will contain jet and background tracks
1503   TObjArray * refclusters  = new TObjArray;
1504   TObjArray * refclustersbkg  = new TObjArray;
1505   if(!fJetsOnlyInCTS && GetEMCALClusters()){
1506     
1507         //Get vertex for photon momentum calculation
1508         Double_t vertex[]  = {0,0,0} ; //vertex 
1509         //Double_t vertex2[] = {0,0,0} ; //vertex of second input aod
1510         if(GetReader()->GetDataType()!= AliCaloTrackReader::kMC) 
1511         {
1512                 GetReader()->GetVertex(vertex);
1513                 //if(GetReader()->GetSecondInputAODTree()) GetReader()->GetSecondInputAODVertex(vertex2);
1514         }
1515           
1516     for(Int_t iclus = 0;iclus < (GetEMCALClusters())->GetEntriesFast() ; iclus ++ ){
1517       AliVCluster * calo = (AliVCluster *) (GetEMCALClusters()->At(iclus)) ;
1518       
1519       //Cluster selection, not charged
1520       if(IsTrackMatched(calo)) continue ;
1521       
1522           //Input from second AOD?
1523           Int_t input = 0;
1524 //        if     (particle->GetDetector() == "EMCAL" && GetReader()->GetEMCALClustersNormalInputEntries() <= iclus) input = 1 ;
1525 //        else if(particle->GetDetector() == "PHOS"  && GetReader()->GetPHOSClustersNormalInputEntries()  <= iclus) input = 1;
1526 //              
1527           //Get Momentum vector, 
1528           if     (input == 0) calo->GetMomentum(lv,vertex) ;//Assume that come from vertex in straight line
1529           //else if(input == 1) calo->GetMomentum(lv,vertex2);//Assume that come from vertex in straight line  
1530                 
1531       //Particles in jet 
1532       if(IsParticleInJetCone(lv.Eta(),lv.Phi(), etal, phil)){
1533
1534         refclusters->Add(calo); 
1535         
1536         if(lv.Pt() > ptcut )  jet+=lv;
1537       }
1538       //Background around (phi_gamma-pi, eta_leading)
1539       else if(IsParticleInJetCone(lv.Eta(),lv.Phi(),etal, phiTrig)){
1540         
1541         
1542         refclustersbkg->Add(calo); 
1543         
1544         if(lv.Pt() > ptcut )  bkg+=lv;
1545       }
1546     }//cluster loop
1547   }//jets with neutral particles
1548   
1549   //Add referenced clusters to AOD
1550   if(refclusters->GetEntriesFast() > 0 ){
1551     refclusters->SetName(Form("%sClusters",GetAODObjArrayName().Data()));
1552     particle->AddObjArray(refclusters);
1553   }
1554   else  if(GetDebug() > 2 ) printf("AliAnaParticleJetLeadingConeCorrelation::MakeAODJet() - No clusters in jet cone\n");
1555   if(refclustersbkg->GetEntriesFast() > 0 ){
1556     refclustersbkg->SetName(Form("%sClustersBkg",GetAODObjArrayName().Data()));
1557     particle->AddObjArray(refclustersbkg);
1558   }
1559   else if(GetDebug() > 2 ) printf("AliAnaParticleJetLeadingConeCorrelation::MakeAODJet() - No background clusters in jet cone\n");
1560   
1561   //If there is any jet found, select after some criteria and 
1562   //and fill AOD with corresponding TLorentzVector kinematics
1563   if(IsJetSelected(particle->Pt(), jet.Pt())) {
1564     particle->SetCorrelatedJet(jet);
1565     particle->SetCorrelatedBackground(bkg);
1566     if(GetDebug()>1) printf("AliAnaParticleJetLeadingConeCorrelation::MakeAODJet() - Found jet: Trigger  pt %2.3f, Jet pt %2.3f, Bkg pt %2.3f\n",ptTrig,jet.Pt(),bkg.Pt());
1567   }  
1568   
1569 }
1570
1571 //____________________________________________________________________________
1572 void AliAnaParticleJetLeadingConeCorrelation::MakeJetFromAOD(AliAODPWG4ParticleCorrelation *particle, const TLorentzVector  pLeading, TLorentzVector & jet, TLorentzVector & bkg)
1573   const {
1574   //Fill the jet with the particles around the leading particle with 
1575   //R=fJetCone and pt_th = fJetPtThres. Calculate the energy of the jet and 
1576   //fill aod tlorentzvectors with jet and bakcground found
1577   
1578   TLorentzVector lv (0,0,0,0); //Temporal container for jet particles kinematics 
1579   
1580   Double_t ptTrig  = particle->Pt();
1581   Double_t phiTrig = particle->Phi();
1582   Double_t phil = pLeading.Phi();
1583   if(phil < 0) phil+=TMath::TwoPi();
1584   Double_t etal = pLeading.Eta();
1585   
1586   TObjArray * refclusters    = particle->GetObjArray(Form("Clusters%s"   ,GetAODObjArrayName().Data()));
1587   TObjArray * reftracks      = particle->GetObjArray(Form("Tracks%s"     ,GetAODObjArrayName().Data()));
1588   TObjArray * refclustersbkg = particle->GetObjArray(Form("ClustersBkg%s",GetAODObjArrayName().Data()));
1589   TObjArray * reftracksbkg   = particle->GetObjArray(Form("TracksBkg%s"  ,GetAODObjArrayName().Data()));
1590   
1591   //Different pt cut for jet particles in different collisions systems
1592   Float_t ptcut = fJetPtThreshold;
1593   if(fPbPb && !fSeveralConeAndPtCuts && ptTrig > fPtTriggerSelectionCut)  ptcut = fJetPtThresPbPb ;
1594   
1595   //Fill jet with tracks
1596   //Particles in jet   
1597   TVector3 p3;
1598   if(reftracks){
1599     for(Int_t ipr = 0;ipr < reftracks->GetEntriesFast() ; ipr ++ ){
1600       AliVTrack* track = (AliVTrack *) reftracks->At(ipr) ;
1601       p3.SetXYZ(track->Px(),track->Py(),track->Pz());
1602       Float_t phi = p3.Phi();
1603       if(phi < 0) phi+=TMath::TwoPi();
1604       if(p3.Pt() > ptcut && IsParticleInJetCone(p3.Eta(), phi, etal, phil) ){
1605         lv.SetVect(p3);
1606         jet+=lv;
1607       }
1608     }//jet Track loop
1609   }
1610   //Particles in background   
1611   if(reftracksbkg){
1612     for(Int_t ipr = 0;ipr < reftracksbkg->GetEntriesFast() ; ipr ++ ){
1613       AliVTrack* track = (AliVTrack *) reftracksbkg->At(ipr) ;
1614       p3.SetXYZ(track->Px(),track->Py(),track->Pz());
1615       if(p3.Pt() > ptcut && IsParticleInJetCone(p3.Eta(),p3.Phi(),etal, phiTrig) ) {  
1616         lv.SetVect(p3);
1617         bkg+=lv;   
1618       }
1619     }//background Track loop
1620   }
1621   
1622   //Add neutral particles to jet
1623   if(!fJetsOnlyInCTS && refclusters){
1624     
1625         //Get vertex for photon momentum calculation
1626         Double_t vertex[]  = {0,0,0} ; //vertex 
1627         //Double_t vertex2[] = {0,0,0} ; //vertex of second input aod
1628         if(GetReader()->GetDataType()!= AliCaloTrackReader::kMC) 
1629         {
1630                 GetReader()->GetVertex(vertex);
1631                 //if(GetReader()->GetSecondInputAODTree()) GetReader()->GetSecondInputAODVertex(vertex2);
1632         }
1633           
1634     //Loop on jet particles
1635     if(refclusters){
1636       for(Int_t iclus = 0;iclus < refclusters->GetEntriesFast() ; iclus ++ ){
1637                   AliVCluster * calo = (AliVCluster *) refclusters->At(iclus) ;
1638                   
1639                   //Input from second AOD?
1640                   Int_t input = 0;
1641         //        if     (particle->GetDetector() == "EMCAL" && GetReader()->GetEMCALClustersNormalInputEntries() <= iclus) input = 1 ;
1642 //                else if(particle->GetDetector() == "PHOS"  && GetReader()->GetPHOSClustersNormalInputEntries()  <= iclus) input = 1;
1643                   
1644                   //Get Momentum vector, 
1645                   if     (input == 0) calo->GetMomentum(lv,vertex) ;//Assume that come from vertex in straight line
1646                   //else if(input == 1) calo->GetMomentum(lv,vertex2);//Assume that come from vertex in straight line  
1647                   
1648                   if(lv.Pt() > ptcut && IsParticleInJetCone(lv.Eta(),lv.Phi(), etal, phil)) jet+=lv;   
1649       }//jet cluster loop
1650     }
1651     
1652     //Loop on background particles
1653     if(refclustersbkg){
1654       for(Int_t iclus = 0;iclus < refclustersbkg->GetEntriesFast() ; iclus ++ ){
1655                   AliVCluster * calo = (AliVCluster *) refclustersbkg->At(iclus) ;
1656
1657                   //Input from second AOD?
1658                   Int_t input = 0;
1659 //                if     (particle->GetDetector() == "EMCAL" && GetReader()->GetEMCALClustersNormalInputEntries() <= iclus) input = 1 ;
1660 //                else if(particle->GetDetector() == "PHOS"  && GetReader()->GetPHOSClustersNormalInputEntries()  <= iclus) input = 1;
1661                   
1662                   //Get Momentum vector, 
1663                   if     (input == 0) calo->GetMomentum(lv,vertex) ;//Assume that come from vertex in straight line
1664                   //else if(input == 1) calo->GetMomentum(lv,vertex2);//Assume that come from vertex in straight line  
1665                   
1666                   if( lv.Pt() > ptcut && IsParticleInJetCone(lv.Eta(),lv.Phi(),etal, phiTrig)) bkg+=lv;
1667       }//background cluster loop 
1668     }
1669   }//clusters in jet
1670   
1671   //If there is any jet found, leave jet and bkg as they are, 
1672   //if not set them to 0.
1673   if(!IsJetSelected(particle->Pt(), jet.Pt())) {
1674     jet.SetPxPyPzE(0.,0.,0.,0.);
1675     bkg.SetPxPyPzE(0.,0.,0.,0.);
1676   }
1677   else
1678     if(GetDebug()>1) printf("AliAnaParticleJetLeadingConeCorrelation::MakeJetFromAOD() - Found jet: Trigger  pt %2.3f, Jet pt %2.3f, Bkg pt %2.3f\n",ptTrig,jet.Pt(),bkg.Pt());
1679   
1680 }
1681
1682 //____________________________________________________________________________
1683 //Bool_t  AliAnaParticleJetLeadingConeCorrelation::SelectCluster(AliVCluster * calo, Double_t *vertex, TLorentzVector & mom, Int_t & pdg) {
1684 //  //Select cluster depending on its pid and acceptance selections
1685 //  
1686 //  //Skip matched clusters with tracks
1687 //  if(IsTrackMatched(calo)) return kFALSE;
1688 //  
1689 //  //Check PID
1690 //  calo->GetMomentum(mom,vertex);//Assume that come from vertex in straight line
1691 //  pdg = AliCaloPID::kPhoton;   
1692 //  if(IsCaloPIDOn()){
1693 //    //Get most probable PID, 2 options check PID weights (in MC this option is mandatory)
1694 //    //or redo PID, recommended option for EMCal.
1695 //    if(!IsCaloPIDRecalculationOn() || GetReader()->GetDataType() == AliCaloTrackReader::kMC )
1696 //      pdg = GetCaloPID()->GetPdg("EMCAL",calo->GetPID(),mom.E());//PID with weights
1697 //    else
1698 //      pdg = GetCaloPID()->GetPdg("EMCAL",mom,calo);//PID recalculated
1699 //    
1700 //  //  if(GetDebug() > 3) printf("AliAnaParticleJetLeadingConeCorrelation::SelectCluster() - PDG of identified particle %d\n",pdg);
1701 //    //If it does not pass pid, skip
1702 //    if(pdg != AliCaloPID::kPhoton && pdg != AliCaloPID::kPi0) 
1703 //      return kFALSE ;
1704 //  }//CaloPID
1705 //  
1706 //   //Check acceptance selection
1707 //  if(IsFiducialCutOn()){
1708 //    Bool_t in = GetFiducialCut()->IsInFiducialCut(mom,"EMCAL") ;
1709 //    if(! in ) return kFALSE ;
1710 //  }
1711 //  
1712 //  //if(GetDebug() > 3) printf("AliAnaParticleJetLeadingConeCorrelation::SelectCluster() - Cluster selection cuts passed: pT %3.2f, pdg %d\n",mom.Pt(), pdg);
1713 //  
1714 //  return kTRUE; 
1715 //  
1716 //}
1717
1718 //__________________________________________________________________
1719 void AliAnaParticleJetLeadingConeCorrelation::Print(const Option_t * opt) const
1720 {
1721   
1722   //Print some relevant parameters set for the analysis
1723   if(! opt)
1724     return;
1725   
1726   printf("**** Print  %s %s ****\n", GetName(), GetTitle() ) ;
1727   AliAnaPartCorrBaseClass::Print(" ");
1728   
1729   if(fJetsOnlyInCTS)printf("Jets reconstructed in CTS \n");
1730   else printf("Jets reconstructed in CTS+EMCAL \n");
1731   
1732   if(fPbPb) printf("PbPb events, pT cut in jet cone energy reconstruction %2.1f \n", fJetPtThreshold);
1733   else printf("pp events, pT cut in jet cone energy reconstruction %2.1f \n", fJetPtThresPbPb);
1734   
1735   printf("If pT of trigger < %2.3f, select jets as in pp? \n", fPtTriggerSelectionCut);
1736   
1737   printf("Phi gamma-Leading        <     %3.2f\n", fDeltaPhiMaxCut) ; 
1738   printf("Phi gamma-Leading        >     %3.2f\n", fDeltaPhiMinCut) ;
1739   printf("pT Leading / pT Trigger  <     %3.2f\n", fLeadingRatioMaxCut) ; 
1740   printf("pT Leading / pT Trigger  >     %3.2f\n", fLeadingRatioMinCut) ;
1741   
1742   if(fSelect == 2){
1743     printf("pT Jet / pT Gamma                     <    %3.2f\n", fJetRatioMaxCut) ; 
1744     printf("pT Jet / pT Gamma                     >    %3.2f\n", fJetRatioMinCut) ;
1745     printf("pT Jet (Only CTS)/ pT Trigger   <    %3.2f\n", fJetCTSRatioMaxCut) ; 
1746     printf("pT Jet (Only CTS)/ pT Trigger   >    %3.2f\n", fJetCTSRatioMinCut) ;
1747   }
1748   else if(fSelect == 0)
1749     printf("Accept all reconstructed jets \n") ;
1750   else   if(fSelect == 1)
1751     printf("Accept jets depending on trigger energy \n") ;
1752   else 
1753     printf("Wrong jet selection option:   %d \n", fSelect) ;
1754   
1755   printf("Isolated Trigger?  %d\n", fSelectIsolated) ;
1756
1757