1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 //_________________________________________________________________________
17 // Class that contains the algorithm for the reconstruction of jet, cone around leading particle
18 // The seed is a backward particle (direct photon)
19 // 1) Take the trigger particle stored in AliAODPWG4ParticleCorrelation,
20 // 2) Search for the highest pt leading particle opposite to the photon within a phi, pt window
21 // 3) Take all particles around leading in a cone R with pt larger than threshold and construct the jet
23 // Class created from old AliPHOSGammaJet
24 // (see AliRoot versions previous Release 4-09)
26 //*-- Author: Gustavo Conesa (LNF-INFN)
27 //////////////////////////////////////////////////////////////////////////////
30 // --- ROOT system ---
32 #include "TClonesArray.h"
34 //#include "Riostream.h"
36 //---- Analysis system ----
37 #include "AliVTrack.h"
38 #include "AliVCluster.h"
39 #include "AliCaloTrackReader.h"
40 #include "AliNeutralMesonSelection.h"
41 #include "AliAnaParticleJetLeadingConeCorrelation.h"
42 #include "AliCaloPID.h"
43 #include "AliAODPWG4ParticleCorrelation.h"
44 #include "AliFiducialCut.h"
46 ClassImp(AliAnaParticleJetLeadingConeCorrelation)
49 //____________________________________________________________________________
50 AliAnaParticleJetLeadingConeCorrelation::AliAnaParticleJetLeadingConeCorrelation() :
51 AliAnaCaloTrackCorrBaseClass(), fJetsOnlyInCTS(kFALSE), fPbPb(kFALSE),
52 fSeveralConeAndPtCuts(0), fReMakeJet(0),
53 fDeltaPhiMaxCut(0.), fDeltaPhiMinCut(0.),
54 fLeadingRatioMaxCut(0.), fLeadingRatioMinCut(0.),
55 fJetCTSRatioMaxCut(0.), fJetCTSRatioMinCut(0.),
56 fJetRatioMaxCut(0.), fJetRatioMinCut(0.),
57 fJetNCone(0),fJetNPt(0), fJetCone(0),
58 fJetPtThreshold(0),fJetPtThresPbPb(0),
59 fPtTriggerSelectionCut(0.0), fSelect(0),
64 fhChargedLeadingPt(0),fhChargedLeadingPhi(0),fhChargedLeadingEta(0),
65 fhChargedLeadingDeltaPt(0),fhChargedLeadingDeltaPhi(0),fhChargedLeadingDeltaEta(0),
66 fhChargedLeadingRatioPt(0),
67 fhNeutralLeadingPt(0),fhNeutralLeadingPhi(0),fhNeutralLeadingEta(0),
68 fhNeutralLeadingDeltaPt(0),fhNeutralLeadingDeltaPhi(0),fhNeutralLeadingDeltaEta(0),
69 fhNeutralLeadingRatioPt(0),fhChargedLeadingXi(0), fhNeutralLeadingXi(0),
70 fhChargedLeadingDeltaPhiRatioPt30(0), fhNeutralLeadingDeltaPhiRatioPt30(0),
71 fhChargedLeadingDeltaPhiRatioPt50(0), fhNeutralLeadingDeltaPhiRatioPt50(0),
73 fhJetPt(0),fhJetRatioPt(0),fhJetDeltaPhi(0), fhJetDeltaEta(0),
74 fhJetLeadingRatioPt(0),fhJetLeadingDeltaPhi(0),fhJetLeadingDeltaEta(0),
75 fhJetFFz(0),fhJetFFxi(0),fhJetFFpt(0),fhJetNTracksInCone(0),
76 fhBkgPt(0),fhBkgRatioPt(0),fhBkgDeltaPhi(0), fhBkgDeltaEta(0),
77 fhBkgLeadingRatioPt(0),fhBkgLeadingDeltaPhi(0),fhBkgLeadingDeltaEta(0),
78 fhBkgFFz(0),fhBkgFFxi(0),fhBkgFFpt(0),fhBkgNTracksInCone(0),
79 //Several cones and thres histograms
80 fhJetPts(),fhJetRatioPts(),fhJetDeltaPhis(), fhJetDeltaEtas(),
81 fhJetLeadingRatioPts(),fhJetLeadingDeltaPhis(),fhJetLeadingDeltaEtas(),
82 fhJetFFzs(),fhJetFFxis(),fhJetFFpts(),fhJetNTracksInCones(),
83 fhBkgPts(),fhBkgRatioPts(),fhBkgDeltaPhis(), fhBkgDeltaEtas(),
84 fhBkgLeadingRatioPts(),fhBkgLeadingDeltaPhis(),fhBkgLeadingDeltaEtas(),
85 fhBkgFFzs(),fhBkgFFxis(),fhBkgFFpts(),fhBkgNTracksInCones()
89 //Initialize parameters
91 for(Int_t i = 0; i<6; i++){
101 fJetSigma1[i] = 0.0 ;
102 fJetSigma2[i] = 0.0 ;
106 //Several cones and thres histograms
107 for(Int_t i = 0; i<5; i++){
109 fJetNameCones[i] = "" ;
110 fJetPtThres[i] = 0.0 ;
111 fJetNamePtThres[i] = "" ;
112 for(Int_t j = 0; j<5; j++){
114 fhJetRatioPts[i][j]=0 ;
115 fhJetDeltaPhis[i][j]=0 ;
116 fhJetDeltaEtas[i][j]=0 ;
117 fhJetLeadingRatioPts[i][j]=0 ;
118 fhJetLeadingDeltaPhis[i][j]=0 ;
119 fhJetLeadingDeltaEtas[i][j]=0 ;
123 fhJetNTracksInCones[i][j]=0 ;
125 fhBkgRatioPts[i][j]=0 ;
126 fhBkgDeltaPhis[i][j]=0 ;
127 fhBkgDeltaEtas[i][j]=0 ;
128 fhBkgLeadingRatioPts[i][j]=0 ;
129 fhBkgLeadingDeltaPhis[i][j]=0 ;
130 fhBkgLeadingDeltaEtas[i][j]=0 ;
134 fhBkgNTracksInCones[i][j]=0 ;
142 //____________________________________________________________________________
143 AliAnaParticleJetLeadingConeCorrelation::AliAnaParticleJetLeadingConeCorrelation(const AliAnaParticleJetLeadingConeCorrelation & jetlc) :
144 AliAnaCaloTrackCorrBaseClass(jetlc), fJetsOnlyInCTS(jetlc.fJetsOnlyInCTS), fPbPb(jetlc.fPbPb),
145 fSeveralConeAndPtCuts(jetlc.fSeveralConeAndPtCuts), fReMakeJet(jetlc. fReMakeJet),
146 fDeltaPhiMaxCut(jetlc. fDeltaPhiMaxCut), fDeltaPhiMinCut(jetlc.fDeltaPhiMinCut),
147 fLeadingRatioMaxCut(jetlc.fLeadingRatioMaxCut), fLeadingRatioMinCut(jetlc.fLeadingRatioMinCut),
148 fJetCTSRatioMaxCut(jetlc.fJetCTSRatioMaxCut),
149 fJetCTSRatioMinCut(jetlc.fJetCTSRatioMinCut), fJetRatioMaxCut(jetlc.fJetRatioMaxCut),
150 fJetRatioMinCut(jetlc.fJetRatioMinCut), fJetNCone(jetlc.fJetNCone),
151 fJetNPt(jetlc.fJetNPt), fJetCone(jetlc.fJetCone),
152 fJetPtThreshold(jetlc.fJetPtThreshold),fJetPtThresPbPb(jetlc.fJetPtThresPbPb),
153 fPtTriggerSelectionCut(jetlc.fPtTriggerSelectionCut), fSelect(jetlc.fSelect),
154 fSelectIsolated(jetlc.fSelectIsolated),
156 fOutCont(jetlc. fOutCont),
158 fhChargedLeadingPt(jetlc.fhChargedLeadingPt), fhChargedLeadingPhi(jetlc.fhChargedLeadingPhi),
159 fhChargedLeadingEta(jetlc.fhChargedLeadingEta), fhChargedLeadingDeltaPt(jetlc.fhChargedLeadingDeltaPt),
160 fhChargedLeadingDeltaPhi(jetlc.fhChargedLeadingDeltaPhi),fhChargedLeadingDeltaEta(jetlc.fhChargedLeadingDeltaEta),
161 fhChargedLeadingRatioPt(jetlc.fhChargedLeadingRatioPt),
162 fhNeutralLeadingPt(jetlc.fhNeutralLeadingPt),fhNeutralLeadingPhi(jetlc.fhNeutralLeadingPhi),
163 fhNeutralLeadingEta(jetlc.fhNeutralLeadingEta), fhNeutralLeadingDeltaPt(jetlc.fhNeutralLeadingDeltaPt),
164 fhNeutralLeadingDeltaPhi(jetlc.fhNeutralLeadingDeltaPhi),fhNeutralLeadingDeltaEta(jetlc.fhNeutralLeadingDeltaEta),
165 fhNeutralLeadingRatioPt(jetlc.fhNeutralLeadingRatioPt),
166 fhChargedLeadingXi(jetlc.fhChargedLeadingXi), fhNeutralLeadingXi(jetlc.fhNeutralLeadingXi),
167 fhChargedLeadingDeltaPhiRatioPt30(jetlc.fhChargedLeadingDeltaPhiRatioPt30), fhNeutralLeadingDeltaPhiRatioPt30(jetlc.fhNeutralLeadingDeltaPhiRatioPt30),
168 fhChargedLeadingDeltaPhiRatioPt50(jetlc.fhChargedLeadingDeltaPhiRatioPt50), fhNeutralLeadingDeltaPhiRatioPt50(jetlc.fhNeutralLeadingDeltaPhiRatioPt50),
170 fhJetPt(jetlc.fhJetPt),fhJetRatioPt(jetlc.fhJetRatioPt),fhJetDeltaPhi(jetlc.fhJetDeltaPhi),
171 fhJetDeltaEta(jetlc.fhJetDeltaEta), fhJetLeadingRatioPt(jetlc.fhJetLeadingRatioPt),
172 fhJetLeadingDeltaPhi(jetlc.fhJetLeadingDeltaPhi),fhJetLeadingDeltaEta(jetlc.fhJetLeadingDeltaEta),
173 fhJetFFz(jetlc.fhJetFFz),fhJetFFxi(jetlc.fhJetFFxi),fhJetFFpt(jetlc.fhJetFFpt),
174 fhJetNTracksInCone(jetlc.fhJetNTracksInCone),
175 fhBkgPt(jetlc.fhBkgPt),fhBkgRatioPt(jetlc.fhBkgRatioPt),fhBkgDeltaPhi(jetlc.fhBkgDeltaPhi),
176 fhBkgDeltaEta(jetlc.fhBkgDeltaEta), fhBkgLeadingRatioPt(jetlc.fhBkgLeadingRatioPt),
177 fhBkgLeadingDeltaPhi(jetlc.fhBkgLeadingDeltaPhi),fhBkgLeadingDeltaEta(jetlc.fhBkgLeadingDeltaEta),
178 fhBkgFFz(jetlc.fhBkgFFz),fhBkgFFxi(jetlc.fhBkgFFxi),fhBkgFFpt(jetlc.fhBkgFFpt),
179 fhBkgNTracksInCone(jetlc.fhBkgNTracksInCone),
180 //Several cones and thres histograms
181 fhJetPts(),fhJetRatioPts(),fhJetDeltaPhis(), fhJetDeltaEtas(),
182 fhJetLeadingRatioPts(),fhJetLeadingDeltaPhis(),fhJetLeadingDeltaEtas(),
183 fhJetFFzs(),fhJetFFxis(),fhJetFFpts(),fhJetNTracksInCones(),
184 fhBkgPts(),fhBkgRatioPts(),fhBkgDeltaPhis(), fhBkgDeltaEtas(),
185 fhBkgLeadingRatioPts(),fhBkgLeadingDeltaPhis(),fhBkgLeadingDeltaEtas(),
186 fhBkgFFzs(),fhBkgFFxis(),fhBkgFFpts(),fhBkgNTracksInCones()
190 for(Int_t i = 0; i<6; i++){
191 fJetXMin1[i] = jetlc.fJetXMin1[i] ;
192 fJetXMin2[i] = jetlc.fJetXMin2[i] ;
193 fJetXMax1[i] = jetlc.fJetXMax1[i] ;
194 fJetXMax2[i] = jetlc.fJetXMax2[i] ;
195 fBkgMean[i] = jetlc.fBkgMean[i] ;
196 fBkgRMS[i] = jetlc.fBkgRMS[i] ;
198 fJetE1[i] = jetlc.fJetE1[i] ;
199 fJetE2[i] = jetlc.fJetE2[i] ;
200 fJetSigma1[i] = jetlc.fJetSigma1[i] ;
201 fJetSigma2[i] = jetlc.fJetSigma2[i] ;
205 //Several cones and thres histograms
206 for(Int_t i = 0; i<5; i++){
207 fJetCones[i] = jetlc.fJetCones[i] ;
208 fJetNameCones[i] = jetlc.fJetNameCones[i] ;
209 fJetPtThres[i] = jetlc.fJetPtThres[i] ;
210 fJetNamePtThres[i] = jetlc.fJetNamePtThres[i] ;
211 for(Int_t j = 0; j<5; j++){
212 fhJetPts[i][j] = jetlc.fhJetPts[i][j] ;
213 fhJetRatioPts[i][j] = jetlc.fhJetRatioPts[i][j] ;
214 fhJetDeltaPhis[i][j] = jetlc.fhJetDeltaPhis[i][j] ;
215 fhJetDeltaEtas[i][j] = jetlc.fhJetDeltaEtas[i][j] ;
216 fhJetLeadingRatioPts[i][j] = jetlc.fhJetLeadingRatioPts[i][j] ;
217 fhJetLeadingDeltaPhis[i][j] = jetlc.fhJetLeadingDeltaPhis[i][j] ;
218 fhJetLeadingDeltaEtas[i][j] = jetlc.fhJetLeadingDeltaEtas[i][j] ;
219 fhJetFFzs[i][j] = jetlc.fhJetFFzs[i][j] ;
220 fhJetFFxis[i][j] = jetlc.fhJetFFxis[i][j] ;
221 fhJetFFpts[i][j] = jetlc.fhJetFFpts[i][j] ;
222 fhJetNTracksInCones[i][j] = fhJetNTracksInCones[i][j] ;
223 fhBkgPts[i][j] = jetlc.fhBkgPts[i][j] ;
224 fhBkgRatioPts[i][j] = jetlc.fhBkgRatioPts[i][j] ;
225 fhBkgDeltaPhis[i][j] = jetlc.fhBkgDeltaPhis[i][j] ;
226 fhBkgDeltaEtas[i][j] = jetlc.fhBkgDeltaEtas[i][j] ;
227 fhBkgLeadingRatioPts[i][j] = jetlc.fhBkgLeadingRatioPts[i][j] ;
228 fhBkgLeadingDeltaPhis[i][j] = jetlc.fhBkgLeadingDeltaPhis[i][j] ;
229 fhBkgLeadingDeltaEtas[i][j] = jetlc.fhBkgLeadingDeltaEtas[i][j] ;
230 fhBkgFFzs[i][j] = jetlc.fhBkgFFzs[i][j] ;
231 fhBkgFFxis[i][j] = jetlc.fhBkgFFxis[i][j] ;
232 fhBkgFFpts[i][j] = jetlc.fhBkgFFpts[i][j] ;
233 fhBkgNTracksInCones[i][j] = jetlc.fhBkgNTracksInCones[i][j] ;
238 //_________________________________________________________________________
239 AliAnaParticleJetLeadingConeCorrelation & AliAnaParticleJetLeadingConeCorrelation::operator = (const AliAnaParticleJetLeadingConeCorrelation & jetlc)
241 // assignment operator
243 if(this == &jetlc)return *this;
244 ((AliAnaCaloTrackCorrBaseClass *)this)->operator=(jetlc);
246 fSeveralConeAndPtCuts = jetlc.fSeveralConeAndPtCuts ;
247 fPbPb = jetlc.fPbPb ;
248 fReMakeJet = jetlc.fReMakeJet ;
249 fJetsOnlyInCTS = jetlc.fJetsOnlyInCTS;
251 fDeltaPhiMaxCut = jetlc.fDeltaPhiMaxCut ;
252 fDeltaPhiMinCut = jetlc.fDeltaPhiMinCut ;
253 fLeadingRatioMaxCut = jetlc.fLeadingRatioMaxCut ;
254 fLeadingRatioMinCut = jetlc.fLeadingRatioMinCut ;
256 fJetCTSRatioMaxCut = jetlc.fJetCTSRatioMaxCut ;
257 fJetCTSRatioMinCut = jetlc.fJetCTSRatioMinCut ;
258 fJetRatioMaxCut = jetlc.fJetRatioMaxCut ;
259 fJetRatioMinCut = jetlc.fJetRatioMinCut ;
261 fJetNCone = jetlc.fJetNCone ;
262 fJetNPt = jetlc.fJetNPt ; fJetCone = jetlc.fJetCone ;
263 fJetPtThreshold = jetlc.fJetPtThreshold ;
264 fJetPtThresPbPb = jetlc.fJetPtThresPbPb ;
265 fPtTriggerSelectionCut = jetlc.fPtTriggerSelectionCut ;
266 fSelect = jetlc.fSelect ;
267 fSelectIsolated = jetlc.fSelectIsolated ;
269 for(Int_t i = 0; i<6; i++){
270 fJetXMin1[i] = jetlc.fJetXMin1[i] ;
271 fJetXMin2[i] = jetlc.fJetXMin2[i] ;
272 fJetXMax1[i] = jetlc.fJetXMax1[i] ;
273 fJetXMax2[i] = jetlc.fJetXMax2[i] ;
274 fBkgMean[i] = jetlc.fBkgMean[i] ;
275 fBkgRMS[i] = jetlc.fBkgRMS[i] ;
277 fJetE1[i] = jetlc.fJetE1[i] ;
278 fJetE2[i] = jetlc.fJetE2[i] ;
279 fJetSigma1[i] = jetlc.fJetSigma1[i] ;
280 fJetSigma2[i] = jetlc.fJetSigma2[i] ;
285 fOutCont = jetlc. fOutCont ;
286 fhChargedLeadingPt = jetlc.fhChargedLeadingPt; fhChargedLeadingPhi = jetlc.fhChargedLeadingPhi;
287 fhChargedLeadingEta = jetlc.fhChargedLeadingEta; fhChargedLeadingDeltaPt = jetlc.fhChargedLeadingDeltaPt;
288 fhChargedLeadingDeltaPhi = jetlc.fhChargedLeadingDeltaPhi;fhChargedLeadingDeltaEta = jetlc.fhChargedLeadingDeltaEta;
289 fhChargedLeadingRatioPt = jetlc.fhChargedLeadingRatioPt;
290 fhNeutralLeadingPt = jetlc.fhNeutralLeadingPt;fhNeutralLeadingPhi = jetlc.fhNeutralLeadingPhi;
291 fhNeutralLeadingEta = jetlc.fhNeutralLeadingEta; fhNeutralLeadingDeltaPt = jetlc.fhNeutralLeadingDeltaPt;
292 fhNeutralLeadingDeltaPhi = jetlc.fhNeutralLeadingDeltaPhi;fhNeutralLeadingDeltaEta = jetlc.fhNeutralLeadingDeltaEta;
293 fhNeutralLeadingRatioPt = jetlc.fhNeutralLeadingRatioPt;
294 fhChargedLeadingXi = jetlc.fhChargedLeadingXi;
295 fhNeutralLeadingXi = jetlc.fhNeutralLeadingXi;
297 fhChargedLeadingDeltaPhiRatioPt30 = jetlc.fhChargedLeadingDeltaPhiRatioPt30;
298 fhNeutralLeadingDeltaPhiRatioPt30 = jetlc.fhNeutralLeadingDeltaPhiRatioPt30;
299 fhChargedLeadingDeltaPhiRatioPt50 = jetlc.fhChargedLeadingDeltaPhiRatioPt50;
300 fhNeutralLeadingDeltaPhiRatioPt50 = jetlc.fhNeutralLeadingDeltaPhiRatioPt50;
302 fhJetPt = jetlc.fhJetPt;fhJetRatioPt = jetlc.fhJetRatioPt;fhJetDeltaPhi = jetlc.fhJetDeltaPhi;
303 fhJetDeltaEta = jetlc.fhJetDeltaEta; fhJetLeadingRatioPt = jetlc.fhJetLeadingRatioPt;
304 fhJetLeadingDeltaPhi = jetlc.fhJetLeadingDeltaPhi;fhJetLeadingDeltaEta = jetlc.fhJetLeadingDeltaEta;
305 fhJetFFz = jetlc.fhJetFFz;fhJetFFxi = jetlc.fhJetFFxi;fhJetFFpt = jetlc.fhJetFFpt;
306 fhJetNTracksInCone = jetlc.fhJetNTracksInCone;
307 fhBkgPt = jetlc.fhBkgPt;fhBkgRatioPt = jetlc.fhBkgRatioPt;fhBkgDeltaPhi = jetlc.fhBkgDeltaPhi;
308 fhBkgDeltaEta = jetlc.fhBkgDeltaEta; fhBkgLeadingRatioPt = jetlc.fhBkgLeadingRatioPt;
309 fhBkgLeadingDeltaPhi = jetlc.fhBkgLeadingDeltaPhi;fhBkgLeadingDeltaEta = jetlc.fhBkgLeadingDeltaEta;
310 fhBkgFFz = jetlc.fhBkgFFz;fhBkgFFxi = jetlc.fhBkgFFxi;fhBkgFFpt = jetlc.fhBkgFFpt;
311 fhBkgNTracksInCone = jetlc.fhBkgNTracksInCone;
314 //Several cones and thres histograms
315 for(Int_t i = 0; i<5; i++){
316 fJetCones[i] = jetlc.fJetCones[i] ;
317 fJetNameCones[i] = jetlc.fJetNameCones[i] ;
318 fJetPtThres[i] = jetlc.fJetPtThres[i] ;
319 fJetNamePtThres[i] = jetlc.fJetNamePtThres[i] ;
321 for(Int_t j = 0; j<5; j++){
322 fhJetPts[i][j] = jetlc.fhJetPts[i][j] ;
323 fhJetRatioPts[i][j] = jetlc.fhJetRatioPts[i][j] ;
324 fhJetDeltaPhis[i][j] = jetlc.fhJetDeltaPhis[i][j] ;
325 fhJetDeltaEtas[i][j] = jetlc.fhJetDeltaEtas[i][j] ;
326 fhJetLeadingRatioPts[i][j] = jetlc.fhJetLeadingRatioPts[i][j] ;
327 fhJetLeadingDeltaPhis[i][j] = jetlc.fhJetLeadingDeltaPhis[i][j] ;
328 fhJetLeadingDeltaEtas[i][j] = jetlc.fhJetLeadingDeltaEtas[i][j] ;
329 fhJetFFzs[i][j] = jetlc.fhJetFFzs[i][j] ;
330 fhJetFFxis[i][j] = jetlc.fhJetFFxis[i][j] ;
331 fhJetFFpts[i][j] = jetlc.fhJetFFpts[i][j] ;
332 fhJetNTracksInCones[i][j] = fhJetNTracksInCones[i][j] ;
333 fhBkgPts[i][j] = jetlc.fhBkgPts[i][j] ;
334 fhBkgRatioPts[i][j] = jetlc.fhBkgRatioPts[i][j] ;
335 fhBkgDeltaPhis[i][j] = jetlc.fhBkgDeltaPhis[i][j] ;
336 fhBkgDeltaEtas[i][j] = jetlc.fhBkgDeltaEtas[i][j] ;
337 fhBkgLeadingRatioPts[i][j] = jetlc.fhBkgLeadingRatioPts[i][j] ;
338 fhBkgLeadingDeltaPhis[i][j] = jetlc.fhBkgLeadingDeltaPhis[i][j] ;
339 fhBkgLeadingDeltaEtas[i][j] = jetlc.fhBkgLeadingDeltaEtas[i][j] ;
340 fhBkgFFzs[i][j] = jetlc.fhBkgFFzs[i][j] ;
341 fhBkgFFxis[i][j] = jetlc.fhBkgFFxis[i][j] ;
342 fhBkgFFpts[i][j] = jetlc.fhBkgFFpts[i][j] ;
343 fhBkgNTracksInCones[i][j] = jetlc.fhBkgNTracksInCones[i][j] ;
351 //____________________________________________________________________________
352 AliAnaParticleJetLeadingConeCorrelation::~AliAnaParticleJetLeadingConeCorrelation()
354 // Remove all pointers except analysis output pointers.
357 //____________________________________________________________________________
358 Double_t AliAnaParticleJetLeadingConeCorrelation::CalculateJetRatioLimit(const Double_t ptg, const Double_t *par, const Double_t *x) const {
359 //Calculate the ratio of the jet and trigger particle limit for the selection
360 //WARNING: need to check what it does
361 //printf("CalculateLimit: x1 %2.3f, x2%2.3f\n",x[0],x[1]);
362 Double_t ePP = par[0] + par[1] * ptg ;
363 Double_t sPP = par[2] + par[3] * ptg ;
364 Double_t f = x[0] + x[1] * ptg ;
365 Double_t ePbPb = ePP + par[4] ;
366 Double_t sPbPb = TMath::Sqrt(sPP*sPP+ par[5]*par[5]) ;
367 Double_t rat = (ePbPb - sPbPb * f) / ptg ;
368 //printf("CalculateLimit: ePP %2.3f, sPP %2.3f, f %2.3f\n", ePP, sPP, f);
369 //printf("CalculateLimit: ePbPb %2.3f, sPbPb %2.3f, rat %2.3f\n", ePbPb, sPbPb, rat);
373 //___________________________________________________________________________________________________
374 void AliAnaParticleJetLeadingConeCorrelation::FillJetHistos(AliAODPWG4ParticleCorrelation * particle,
375 const TLorentzVector jet,
376 const TString & type, const TString & lastname)
378 //Fill jet and background histograms
379 Double_t ptTrig = particle->Pt();
380 Double_t ptJet = jet.Pt();
381 Double_t ptLead = fLeadingMom.Pt();
382 Double_t phiTrig = particle->Phi();
383 Double_t phiJet = jet.Phi();
384 if(phiJet < 0) phiJet+=TMath::TwoPi();
385 Double_t phiLead = fLeadingMom.Phi();
386 if(phiLead < 0) phiLead+=TMath::TwoPi();
387 Double_t etaTrig = particle->Eta();
388 Double_t etaJet = jet.Eta();
389 Double_t etaLead = fLeadingMom.Eta();
392 h1 = dynamic_cast<TH2F*>(GetOutputContainer()->FindObject(Form("%s%sPt%s",GetAddedHistogramsStringToName().Data(),type.Data(),lastname.Data())));
393 if(h1)h1->Fill(ptTrig,ptJet);
396 h2 = dynamic_cast<TH2F*>(GetOutputContainer()->FindObject(Form("%s%sRatioPt%s",GetAddedHistogramsStringToName().Data(),type.Data(),lastname.Data())));
397 if(h2) h2->Fill(ptTrig,ptJet/ptTrig);
400 h3 = dynamic_cast<TH2F*>(GetOutputContainer()->FindObject(Form("%s%sLeadingRatioPt%s",GetAddedHistogramsStringToName().Data(),type.Data(),lastname.Data())));
401 if(h3)h3->Fill(ptTrig,ptLead/ptJet);
403 // dynamic_cast<TH2F*>(GetOutputContainer()->FindObject(Form("%s%sPhi%s",GetAddedHistogramsStringToName().Data(),type.Data(),lastname.Data())))->
404 // Fill(ptTrig,phiJet);
406 h4 = dynamic_cast<TH2F*>(GetOutputContainer()->FindObject(Form("%s%sDeltaPhi%s",GetAddedHistogramsStringToName().Data(),type.Data(),lastname.Data())));
407 if(h4) h4->Fill(ptTrig,phiJet-phiTrig);
409 h5 = dynamic_cast<TH2F*>(GetOutputContainer()->FindObject(Form("%s%sLeadingDeltaPhi%s",GetAddedHistogramsStringToName().Data(),type.Data(),lastname.Data())));
410 if(h5) h5->Fill(ptTrig,phiJet-phiLead);
412 // dynamic_cast<TH2F*>(GetOutputContainer()->FindObject(Form("%s%sEta%s",GetAddedHistogramsStringToName().Data(),type.Data(),lastname.Data())))->
413 // Fill(ptTrig,etaJet);
415 h6 = dynamic_cast<TH2F*>(GetOutputContainer()->FindObject(Form("%s%sDeltaEta%s",GetAddedHistogramsStringToName().Data(),type.Data(),lastname.Data())));
416 if(h6) h6->Fill(ptTrig,etaJet-etaTrig);
418 h7 = dynamic_cast<TH2F*>(GetOutputContainer()->FindObject(Form("%s%sLeadingDeltaEta%s",GetAddedHistogramsStringToName().Data(),type.Data(),lastname.Data())));
419 if(h7) h7->Fill(ptTrig,etaJet-etaLead);
421 //Construct fragmentation function
422 TObjArray * pl = new TObjArray;
424 if(type == "Jet") pl = particle->GetObjArray(Form("%sTracks",GetAODObjArrayName().Data()));
425 else if(type == "Bkg") particle->GetObjArray(Form("%sTracksBkg",GetAODObjArrayName().Data()));
429 //Different pt cut for jet particles in different collisions systems
430 //Only needed when jet is recalculated from AODs
431 //Float_t ptcut = fJetPtThreshold;
432 //if(fPbPb && !fSeveralConeAndPtCuts && ptTrig > fPtTriggerSelectionCut) ptcut = fJetPtThresPbPb ;
434 Int_t nTracksInCone = 0;
436 for(Int_t ipr = 0;ipr < pl->GetEntriesFast() ; ipr ++ )
438 AliVTrack* track = dynamic_cast<AliVTrack *>(pl->At(ipr)) ;
439 if(track)fTrackVector.SetXYZ(track->Px(),track->Py(),track->Pz());
440 else printf("AliAnaParticleJetLeadingConeCorrelation::FillJetHistos() - Track not available\n");
442 //Recheck if particle is in jet cone
443 if(fReMakeJet || fSeveralConeAndPtCuts)
444 if(!IsParticleInJetCone(fTrackVector.Eta(), fTrackVector.Phi(), fLeadingMom.Eta(), fLeadingMom.Phi()) ) continue ;
448 TH2F *ha =dynamic_cast<TH2F*>(GetOutputContainer()->FindObject(Form("%s%sFFz%s",GetAddedHistogramsStringToName().Data(),type.Data(),lastname.Data())));
449 if(ha) ha->Fill(ptTrig,fTrackVector.Pt()/ptTrig);
450 TH2F *hb =dynamic_cast<TH2F*>(GetOutputContainer()->FindObject(Form("%s%sFFxi%s",GetAddedHistogramsStringToName().Data(),type.Data(),lastname.Data())));
451 if(hb) hb->Fill(ptTrig,TMath::Log(ptTrig/fTrackVector.Pt()));
452 TH2F *hc =dynamic_cast<TH2F*>(GetOutputContainer()->FindObject(Form("%s%sFFpt%s",GetAddedHistogramsStringToName().Data(),type.Data(),lastname.Data())));
453 if(hc) hc->Fill(ptTrig,fTrackVector.Pt());
457 if(nTracksInCone > 0)
459 TH2F *hd = dynamic_cast<TH2F*>(GetOutputContainer()->FindObject(Form("%s%sNTracksInCone%s",GetAddedHistogramsStringToName().Data(),type.Data(),lastname.Data())));
460 if(hd)hd->Fill(ptTrig, nTracksInCone);
465 //________________________________________________________________________
466 TList * AliAnaParticleJetLeadingConeCorrelation::GetCreateOutputObjects()
468 // Create histograms to be saved in output file and
469 // store them in fOutCont
471 if(GetDebug()>1) printf("AliAnaParticleJetLeadingConeCorrelation::GetCreateOutputObjects() - Init histograms \n");
473 fOutCont = new TList() ;
474 fOutCont->SetName("ParticleJetLeadingInConeCorrelationHistograms") ;
476 Int_t nptbins = GetHistogramRanges()->GetHistoPtBins();
477 Int_t nphibins = GetHistogramRanges()->GetHistoPhiBins();
478 Int_t netabins = GetHistogramRanges()->GetHistoEtaBins();
479 Float_t ptmax = GetHistogramRanges()->GetHistoPtMax();
480 Float_t phimax = GetHistogramRanges()->GetHistoPhiMax();
481 Float_t etamax = GetHistogramRanges()->GetHistoEtaMax();
482 Float_t ptmin = GetHistogramRanges()->GetHistoPtMin();
483 Float_t phimin = GetHistogramRanges()->GetHistoPhiMin();
484 Float_t etamin = GetHistogramRanges()->GetHistoEtaMin();
486 fhChargedLeadingPt = new TH2F("ChargedLeadingPt","p_{T leading charge} vs p_{T trigger}",nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
487 fhChargedLeadingPt->SetYTitle("p_{T leading charge}");
488 fhChargedLeadingPt->SetXTitle("p_{T trigger} (GeV/c)");
490 fhChargedLeadingPhi = new TH2F("ChargedLeadingPhi","#phi_{h^{#pm}} vs p_{T trigger}", nptbins,ptmin,ptmax,nphibins,phimin,phimax);
491 fhChargedLeadingPhi->SetYTitle("#phi_{h^{#pm}} (rad)");
492 fhChargedLeadingPhi->SetXTitle("p_{T trigger} (GeV/c)");
494 fhChargedLeadingEta = new TH2F("ChargedLeadingEta","#eta_{h^{#pm}} vs p_{T trigger}",nptbins,ptmin,ptmax,netabins,etamin,etamax);
495 fhChargedLeadingEta->SetYTitle("#eta_{h^{#pm}} ");
496 fhChargedLeadingEta->SetXTitle("p_{T trigger} (GeV/c)");
498 fhChargedLeadingDeltaPt = new TH2F("ChargedLeadingDeltaPt","p_{T trigger} - p_{T h^{#pm}} vs p_{T trigger}",nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
499 fhChargedLeadingDeltaPt->SetYTitle("#Delta p_{T} (GeV/c)");
500 fhChargedLeadingDeltaPt->SetXTitle("p_{T trigger} (GeV/c)");
502 fhChargedLeadingDeltaPhi = new TH2F("ChargedLeadingDeltaPhi","#phi_{trigger} - #phi_{h^{#pm}} vs p_{T trigger}",nptbins,ptmin,ptmax,120,0,TMath::TwoPi());
503 fhChargedLeadingDeltaPhi->SetYTitle("#Delta #phi (rad)");
504 fhChargedLeadingDeltaPhi->SetXTitle("p_{T trigger} (GeV/c)");
506 fhChargedLeadingDeltaEta = new TH2F("ChargedLeadingDeltaEta","#eta_{trigger} - #eta_{h^{#pm}} vs p_{T trigger}",nptbins,ptmin,ptmax,120,-2,2);
507 fhChargedLeadingDeltaEta->SetYTitle("#Delta #eta");
508 fhChargedLeadingDeltaEta->SetXTitle("p_{T trigger} (GeV/c)");
510 fhChargedLeadingRatioPt = new TH2F("ChargedLeadingRatioPt","p_{T leading charge} /p_{T trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,120,0,2);
511 fhChargedLeadingRatioPt->SetYTitle("p_{T lead charge} /p_{T trigger}");
512 fhChargedLeadingRatioPt->SetXTitle("p_{T trigger} (GeV/c)");
514 fhChargedLeadingXi = new TH2F("ChargedLeadingXi","ln(p_{T trigger} / p_{T leading charge} ) vs p_{T trigger}",nptbins,ptmin,ptmax,120,0,10);
515 fhChargedLeadingXi->SetYTitle("#xi");
516 fhChargedLeadingXi->SetXTitle("p_{T trigger} (GeV/c)");
518 fOutCont->Add(fhChargedLeadingPt) ;
519 fOutCont->Add(fhChargedLeadingPhi) ;
520 fOutCont->Add(fhChargedLeadingEta) ;
521 fOutCont->Add(fhChargedLeadingDeltaPt) ;
522 fOutCont->Add(fhChargedLeadingDeltaPhi) ;
523 fOutCont->Add(fhChargedLeadingDeltaEta) ;
524 fOutCont->Add(fhChargedLeadingRatioPt) ;
525 fOutCont->Add(fhChargedLeadingXi) ;
527 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);
528 fhChargedLeadingDeltaPhiRatioPt30->SetXTitle("#Delta #phi (rad)");
529 fhChargedLeadingDeltaPhiRatioPt30->SetYTitle("p_{T leading} / p_{T trigger}");
531 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);
532 fhChargedLeadingDeltaPhiRatioPt50->SetXTitle("#Delta #phi (rad)");
533 fhChargedLeadingDeltaPhiRatioPt50->SetYTitle("p_{T leading} / p_{T trigger}");
535 fOutCont->Add(fhChargedLeadingDeltaPhiRatioPt30) ;
536 fOutCont->Add(fhChargedLeadingDeltaPhiRatioPt50) ;
540 fhNeutralLeadingPt = new TH2F("NeutralLeadingPt","p_{T leading #pi^{0}} vs p_{T trigger}",nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
541 fhNeutralLeadingPt->SetYTitle("p_{T leading #pi^{0}}");
542 fhNeutralLeadingPt->SetXTitle("p_{T trigger} (GeV/c)");
544 fhNeutralLeadingPhi = new TH2F("NeutralLeadingPhi","#phi_{#pi^{0}} vs p_{T trigger}",nptbins,ptmin,ptmax,nphibins,phimin,phimax);
545 fhNeutralLeadingPhi->SetYTitle("#phi_{#pi^{0}} (rad)");
546 fhNeutralLeadingPhi->SetXTitle("p_{T trigger} (GeV/c)");
548 fhNeutralLeadingEta = new TH2F("NeutralLeadingEta","#eta_{#pi^{0}} vs p_{T trigger}",nptbins,ptmin,ptmax,netabins,etamin,etamax);
549 fhNeutralLeadingEta->SetYTitle("#eta_{#pi^{0}} ");
550 fhNeutralLeadingEta->SetXTitle("p_{T trigger} (GeV/c)");
552 fhNeutralLeadingDeltaPt = new TH2F("NeutralLeadingDeltaPt","p_{T trigger} - p_{T #pi^{0}} vs p_{T trigger}",nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
553 fhNeutralLeadingDeltaPt->SetYTitle("#Delta p_{T} (GeV/c)");
554 fhNeutralLeadingDeltaPt->SetXTitle("p_{T trigger} (GeV/c)");
556 fhNeutralLeadingDeltaPhi = new TH2F("NeutralLeadingDeltaPhi","#phi_{trigger} - #phi_{#pi^{0}} vs p_{T trigger}",nptbins,ptmin,ptmax,120,0,TMath::TwoPi());
557 fhNeutralLeadingDeltaPhi->SetYTitle("#Delta #phi (rad)");
558 fhNeutralLeadingDeltaPhi->SetXTitle("p_{T trigger} (GeV/c)");
560 fhNeutralLeadingDeltaEta = new TH2F("NeutralLeadingDeltaEta","#eta_{trigger} - #eta_{#pi^{0}} vs p_{T trigger}",nptbins,ptmin,ptmax,120,-2,2);
561 fhNeutralLeadingDeltaEta->SetYTitle("#Delta #eta");
562 fhNeutralLeadingDeltaEta->SetXTitle("p_{T trigger} (GeV/c)");
564 fhNeutralLeadingRatioPt = new TH2F("NeutralLeadingRatioPt","p_{T leading #pi^{0}} /p_{T trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,120,0,2);
565 fhNeutralLeadingRatioPt->SetYTitle("p_{T lead #pi^{0}} /p_{T trigger}");
566 fhNeutralLeadingRatioPt->SetXTitle("p_{T trigger} (GeV/c)");
568 fhNeutralLeadingXi = new TH2F("NeutralLeadingXi","ln(p_{T trigger} / p_{T leading #pi^{0}} ) vs p_{T trigger}",nptbins,ptmin,ptmax,120,0,10);
569 fhNeutralLeadingXi->SetYTitle("#xi");
570 fhNeutralLeadingXi->SetXTitle("p_{T trigger} (GeV/c)");
572 fOutCont->Add(fhNeutralLeadingPt) ;
573 fOutCont->Add(fhNeutralLeadingPhi) ;
574 fOutCont->Add(fhNeutralLeadingEta) ;
575 fOutCont->Add(fhNeutralLeadingDeltaPt) ;
576 fOutCont->Add(fhNeutralLeadingDeltaPhi) ;
577 fOutCont->Add(fhNeutralLeadingDeltaEta) ;
578 fOutCont->Add(fhNeutralLeadingRatioPt) ;
579 fOutCont->Add(fhNeutralLeadingXi) ;
581 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);
582 fhNeutralLeadingDeltaPhiRatioPt30->SetXTitle("#Delta #phi (rad)");
583 fhNeutralLeadingDeltaPhiRatioPt30->SetYTitle("p_{T leading} / p_{T trigger}");
585 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);
586 fhNeutralLeadingDeltaPhiRatioPt50->SetXTitle("#Delta #phi (rad)");
587 fhNeutralLeadingDeltaPhiRatioPt50->SetYTitle("p_{T leading} / p_{T trigger}");
588 fOutCont->Add(fhNeutralLeadingDeltaPhiRatioPt30) ;
589 fOutCont->Add(fhNeutralLeadingDeltaPhiRatioPt50) ;
593 if(!fSeveralConeAndPtCuts){// not several cones
596 fhJetPt = new TH2F("JetPt","p_{T jet} vs p_{T trigger}",nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
597 fhJetPt->SetYTitle("p_{T jet}");
598 fhJetPt->SetXTitle("p_{T trigger} (GeV/c)");
600 fhJetRatioPt = new TH2F("JetRatioPt","p_{T jet}/p_{T trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,120,0,2);
601 fhJetRatioPt->SetYTitle("p_{T jet}/p_{T trigger}");
602 fhJetRatioPt->SetXTitle("p_{T trigger} (GeV/c)");
604 fhJetDeltaPhi = new TH2F("JetDeltaPhi","#phi_{jet} - #phi_{trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,120,0,TMath::TwoPi());
605 fhJetDeltaPhi->SetYTitle("#Delta #phi (rad)");
606 fhJetDeltaPhi->SetXTitle("p_{T trigger} (GeV/c)");
608 fhJetDeltaEta = new TH2F("JetDeltaEta","#eta_{jet} - #eta_{trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,120,-2,2);
609 fhJetDeltaEta->SetYTitle("#Delta #eta");
610 fhJetDeltaEta->SetXTitle("p_{T trigger} (GeV/c)");
612 fhJetLeadingRatioPt = new TH2F("JetLeadingRatioPt","p_{T jet} vs p_{T trigger}",nptbins,ptmin,ptmax,120,0,2);
613 fhJetLeadingRatioPt->SetYTitle("p_{T leading}/p_{T jet}");
614 fhJetLeadingRatioPt->SetXTitle("p_{T trigger} (GeV/c)");
616 fhJetLeadingDeltaPhi = new TH2F("JetLeadingDeltaPhi","#phi_{jet} - #phi_{leading} vs p_{T trigger}",nptbins,ptmin,ptmax,120,-TMath::Pi(),TMath::Pi());
617 fhJetLeadingDeltaPhi->SetYTitle("#Delta #phi (rad)");
618 fhJetLeadingDeltaPhi->SetXTitle("p_{T trigger} (GeV/c)");
620 fhJetLeadingDeltaEta = new TH2F("JetLeadingDeltaEta","#eta_{jet} - #eta_{leading} vs p_{T trigger}",nptbins,ptmin,ptmax,120,-2,2);
621 fhJetLeadingDeltaEta->SetYTitle("#Delta #eta");
622 fhJetLeadingDeltaEta->SetXTitle("p_{T trigger} (GeV/c)");
624 fhJetFFz = new TH2F("JetFFz","z = p_{T i charged}/p_{T trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,200,0.,2);
625 fhJetFFz->SetYTitle("z");
626 fhJetFFz->SetXTitle("p_{T trigger}");
628 fhJetFFxi = new TH2F("JetFFxi","#xi = ln(p_{T trigger}/p_{T i charged}) vs p_{T trigger}",nptbins,ptmin,ptmax,100,0.,10.);
629 fhJetFFxi->SetYTitle("#xi");
630 fhJetFFxi->SetXTitle("p_{T trigger}");
632 fhJetFFpt = new TH2F("JetFFpt","#xi = p_{T i charged}) vs p_{T trigger}",nptbins,ptmin,ptmax,200,0.,50.);
633 fhJetFFpt->SetYTitle("p_{T charged hadron}");
634 fhJetFFpt->SetXTitle("p_{T trigger}");
636 fhJetNTracksInCone = new TH2F("JetNTracksInCone","N particles in cone vs p_{T trigger}",nptbins,ptmin,ptmax,5000,0, 5000);
637 fhJetNTracksInCone->SetYTitle("N tracks in jet cone");
638 fhJetNTracksInCone->SetXTitle("p_{T trigger} (GeV/c)");
640 fOutCont->Add(fhJetPt) ;
641 fOutCont->Add(fhJetRatioPt) ;
642 fOutCont->Add(fhJetDeltaPhi) ;
643 fOutCont->Add(fhJetDeltaEta) ;
644 fOutCont->Add(fhJetLeadingRatioPt) ;
645 fOutCont->Add(fhJetLeadingDeltaPhi) ;
646 fOutCont->Add(fhJetLeadingDeltaEta) ;
647 fOutCont->Add(fhJetFFz) ;
648 fOutCont->Add(fhJetFFxi) ;
649 fOutCont->Add(fhJetFFpt) ;
650 fOutCont->Add(fhJetNTracksInCone) ;
653 fhBkgPt = new TH2F("BkgPt","p_{T bkg} vs p_{T trigger}",nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
654 fhBkgPt->SetYTitle("p_{T bkg}");
655 fhBkgPt->SetXTitle("p_{T trigger} (GeV/c)");
657 fhBkgRatioPt = new TH2F("BkgRatioPt","p_{T bkg}/p_{T trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,120,0,2);
658 fhBkgRatioPt->SetYTitle("p_{T bkg}/p_{T trigger}");
659 fhBkgRatioPt->SetXTitle("p_{T trigger} (GeV/c)");
661 fhBkgDeltaPhi = new TH2F("BkgDeltaPhi","#phi_{bkg} - #phi_{trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,120,0,TMath::TwoPi());
662 fhBkgDeltaPhi->SetYTitle("#Delta #phi (rad)");
663 fhBkgDeltaPhi->SetXTitle("p_{T trigger} (GeV/c)");
665 fhBkgDeltaEta = new TH2F("BkgDeltaEta","#eta_{bkg} - #eta_{trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,120,-2,2);
666 fhBkgDeltaEta->SetYTitle("#Delta #eta");
667 fhBkgDeltaEta->SetXTitle("p_{T trigger} (GeV/c)");
669 fhBkgLeadingRatioPt = new TH2F("BkgLeadingRatioPt","p_{T bkg} vs p_{T trigger}",nptbins,ptmin,ptmax,120,0,2);
670 fhBkgLeadingRatioPt->SetYTitle("p_{T leading}/p_{T bkg}");
671 fhBkgLeadingRatioPt->SetXTitle("p_{T trigger} (GeV/c)");
673 fhBkgLeadingDeltaPhi = new TH2F("BkgLeadingDeltaPhi","#phi_{bkg} - #phi_{leading} vs p_{T trigger}",nptbins,ptmin,ptmax,120,0,TMath::TwoPi());
674 fhBkgLeadingDeltaPhi->SetYTitle("#Delta #phi (rad)");
675 fhBkgLeadingDeltaPhi->SetXTitle("p_{T trigger} (GeV/c)");
677 fhBkgLeadingDeltaEta = new TH2F("BkgLeadingDeltaEta","#eta_{bkg} - #eta_{leading} vs p_{T trigger}",nptbins,ptmin,ptmax,120,-2,2);
678 fhBkgLeadingDeltaEta->SetYTitle("#Delta #eta");
679 fhBkgLeadingDeltaEta->SetXTitle("p_{T trigger} (GeV/c)");
681 fhBkgFFz = new TH2F("BkgFFz","z = p_{T i charged}/p_{T trigger} vs p_{T trigger}", nptbins,ptmin,ptmax,200,0.,2);
682 fhBkgFFz->SetYTitle("z");
683 fhBkgFFz->SetXTitle("p_{T trigger}");
685 fhBkgFFxi = new TH2F("BkgFFxi","#xi = ln(p_{T trigger}/p_{T i charged}) vs p_{T trigger}", nptbins,ptmin,ptmax,100,0.,10.);
686 fhBkgFFxi->SetYTitle("#xi");
687 fhBkgFFxi->SetXTitle("p_{T trigger}");
689 fhBkgFFpt = new TH2F("BkgFFpt","p_{T charged hadron } vs p_{T trigger}", nptbins,ptmin,ptmax,200,0.,50.);
690 fhBkgFFpt->SetYTitle("p_{T charged} hadron");
691 fhBkgFFpt->SetXTitle("p_{T trigger}");
693 fhBkgNTracksInCone = new TH2F("BkgNTracksInCone","N particles in cone vs p_{T trigger}",nptbins,ptmin,ptmax,5000,0, 5000);
694 fhBkgNTracksInCone->SetYTitle("N tracks in bkg cone");
695 fhBkgNTracksInCone->SetXTitle("p_{T trigger} (GeV/c)");
697 fOutCont->Add(fhBkgPt) ;
698 fOutCont->Add(fhBkgRatioPt) ;
699 fOutCont->Add(fhBkgDeltaPhi) ;
700 fOutCont->Add(fhBkgDeltaEta) ;
701 fOutCont->Add(fhBkgLeadingRatioPt) ;
702 fOutCont->Add(fhBkgLeadingDeltaPhi) ;
703 fOutCont->Add(fhBkgLeadingDeltaEta) ;
704 fOutCont->Add(fhBkgFFz) ;
705 fOutCont->Add(fhBkgFFxi) ;
706 fOutCont->Add(fhBkgFFpt) ;
707 fOutCont->Add(fhBkgNTracksInCone) ;
710 else{ //If we want to study the jet for different cones and pt
711 for(Int_t icone = 0; icone<fJetNCone; icone++){//icone
712 for(Int_t ipt = 0; ipt<fJetNPt;ipt++){ //ipt
714 TString lastnamehist ="Cone"+ fJetNameCones[icone]+"Pt"+ fJetNamePtThres[ipt];
715 TString lastnametitle =", cone ="+fJetNameCones[icone]+", pt > " +fJetNamePtThres[ipt]+" GeV/c";
718 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);
719 fhJetPts[icone][ipt]->SetYTitle("p_{T jet}");
720 fhJetPts[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
722 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);
723 fhJetRatioPts[icone][ipt]->SetYTitle("p_{T jet}/p_{T trigger}");
724 fhJetRatioPts[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
726 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());
727 fhJetDeltaPhis[icone][ipt]->SetYTitle("#Delta #phi (rad)");
728 fhJetDeltaPhis[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
730 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);
731 fhJetDeltaEtas[icone][ipt]->SetYTitle("#Delta #eta");
732 fhJetDeltaEtas[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
734 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);
735 fhJetLeadingRatioPts[icone][ipt]->SetYTitle("p_{T leading}/p_{T jet}");
736 fhJetLeadingRatioPts[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
738 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());
739 fhJetLeadingDeltaPhis[icone][ipt]->SetYTitle("#Delta #phi (rad)");
740 fhJetLeadingDeltaPhis[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
742 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);
743 fhJetLeadingDeltaEtas[icone][ipt]->SetYTitle("#Delta #eta");
744 fhJetLeadingDeltaEtas[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
746 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);
747 fhJetFFzs[icone][ipt]->SetYTitle("z");
748 fhJetFFzs[icone][ipt]->SetXTitle("p_{T trigger}");
750 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.);
751 fhJetFFxis[icone][ipt]->SetYTitle("#xi");
752 fhJetFFxis[icone][ipt]->SetXTitle("p_{T trigger}");
754 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.);
755 fhJetFFpts[icone][ipt]->SetYTitle("p_{T charged hadron}");
756 fhJetFFpts[icone][ipt]->SetXTitle("p_{T trigger}");
758 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);
759 fhJetNTracksInCones[icone][ipt]->SetYTitle("N tracks in jet cone");
760 fhJetNTracksInCones[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
762 fOutCont->Add(fhJetPts[icone][ipt]) ;
763 fOutCont->Add(fhJetRatioPts[icone][ipt]) ;
764 fOutCont->Add(fhJetDeltaPhis[icone][ipt]) ;
765 fOutCont->Add(fhJetDeltaEtas[icone][ipt]) ;
766 fOutCont->Add(fhJetLeadingRatioPts[icone][ipt]) ;
767 fOutCont->Add(fhJetLeadingDeltaPhis[icone][ipt]) ;
768 fOutCont->Add(fhJetLeadingDeltaEtas[icone][ipt]) ;
769 fOutCont->Add(fhJetFFzs[icone][ipt]) ;
770 fOutCont->Add(fhJetFFxis[icone][ipt]) ;
771 fOutCont->Add(fhJetFFpts[icone][ipt]) ;
772 fOutCont->Add(fhJetNTracksInCones[icone][ipt]) ;
775 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);
776 fhBkgPts[icone][ipt]->SetYTitle("p_{T bkg}");
777 fhBkgPts[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
779 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);
780 fhBkgRatioPts[icone][ipt]->SetYTitle("p_{T bkg}/p_{T trigger}");
781 fhBkgRatioPts[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
783 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());
784 fhBkgDeltaPhis[icone][ipt]->SetYTitle("#Delta #phi (rad)");
785 fhBkgDeltaPhis[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
787 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);
788 fhBkgDeltaEtas[icone][ipt]->SetYTitle("#Delta #eta");
789 fhBkgDeltaEtas[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
791 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);
792 fhBkgLeadingRatioPts[icone][ipt]->SetYTitle("p_{T leading}/p_{T bkg}");
793 fhBkgLeadingRatioPts[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
795 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());
796 fhBkgLeadingDeltaPhis[icone][ipt]->SetYTitle("#Delta #phi (rad)");
797 fhBkgLeadingDeltaPhis[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
799 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);
800 fhBkgLeadingDeltaEtas[icone][ipt]->SetYTitle("#Delta #eta");
801 fhBkgLeadingDeltaEtas[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
803 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);
804 fhBkgFFzs[icone][ipt]->SetYTitle("z");
805 fhBkgFFzs[icone][ipt]->SetXTitle("p_{T trigger}");
807 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.);
808 fhBkgFFxis[icone][ipt]->SetYTitle("#xi");
809 fhBkgFFxis[icone][ipt]->SetXTitle("p_{T trigger}");
811 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.);
812 fhBkgFFpts[icone][ipt]->SetYTitle("p_{T charged hadron}");
813 fhBkgFFpts[icone][ipt]->SetXTitle("p_{T trigger}");
815 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);
816 fhBkgNTracksInCones[icone][ipt]->SetYTitle("N tracks in bkg cone");
817 fhBkgNTracksInCones[icone][ipt]->SetXTitle("p_{T trigger} (GeV/c)");
819 fOutCont->Add(fhBkgPts[icone][ipt]) ;
820 fOutCont->Add(fhBkgRatioPts[icone][ipt]) ;
821 fOutCont->Add(fhBkgDeltaPhis[icone][ipt]) ;
822 fOutCont->Add(fhBkgDeltaEtas[icone][ipt]) ;
823 fOutCont->Add(fhBkgLeadingRatioPts[icone][ipt]) ;
824 fOutCont->Add(fhBkgLeadingDeltaPhis[icone][ipt]) ;
825 fOutCont->Add(fhBkgLeadingDeltaEtas[icone][ipt]) ;
826 fOutCont->Add(fhBkgFFzs[icone][ipt]) ;
827 fOutCont->Add(fhBkgFFxis[icone][ipt]) ;
828 fOutCont->Add(fhBkgFFpts[icone][ipt]) ;
829 fOutCont->Add(fhBkgNTracksInCones[icone][ipt]) ;
833 }//If we want to study any cone or pt threshold
835 //Keep neutral meson selection histograms if requiered
836 //Setting done in AliNeutralMesonSelection
837 if(GetNeutralMesonSelection()){
838 TList * nmsHistos = GetNeutralMesonSelection()->GetCreateOutputObjects() ;
839 if(GetNeutralMesonSelection()->AreNeutralMesonSelectionHistosKept())
840 for(Int_t i = 0; i < nmsHistos->GetEntries(); i++) fOutCont->Add(nmsHistos->At(i)) ;
846 printf("AliAnaParticleJetLeadingConeCorrelation::GetCreateOutputObjects() - All histograms names : \n");
847 for(Int_t i = 0 ; i< fOutCont->GetEntries(); i++)
848 printf("Histo i %d name %s\n",i,((fOutCont->At(i))->GetName()));
849 //cout<< (fOutCont->At(i))->GetName()<<endl;
856 //__________________________________________________________________________________________________________
857 Bool_t AliAnaParticleJetLeadingConeCorrelation::GetLeadingParticle(AliAODPWG4ParticleCorrelation * particle)
859 //Search Charged or Neutral leading particle, select the highest one and fill AOD
862 GetLeadingCharge(particle) ;
863 if(!fJetsOnlyInCTS) GetLeadingPi0(particle) ;
865 Double_t ptch = fLeadingChargeMom.Pt();
866 Double_t ptpi = fLeadingPi0Mom .Pt();
868 if (ptch > 0 || ptpi > 0)
872 if(GetDebug() > 1)printf("AliAnaParticleJetLeadingConeCorrelation::GetLeadingParticle() - Leading found in CTS \n");
874 fLeadingMom = fLeadingChargeMom;
876 if(GetDebug() > 1) printf("AliAnaParticleJetLeadingConeCorrelation::GetLeadingParticle() - Found Leading: pt %2.3f, phi %2.3f deg, eta %2.3f\n",
877 fLeadingMom.Pt(),fLeadingMom.Phi()*TMath::RadToDeg(),fLeadingMom.Eta()) ;
880 particle->SetLeading(fLeadingChargeMom);
881 particle->SetLeadingDetector("CTS");
887 printf("AliAnaParticleJetLeadingConeCorrelation::GetLeadingParticle() - Leading found in EMCAL \n");
889 fLeadingMom = fLeadingPi0Mom;
891 if(GetDebug() > 1) printf("AliAnaParticleJetLeadingConeCorrelation::GetLeadingParticle() - Found Leading: pt %2.3f, phi %2.3f, eta %2.3f\n",
892 fLeadingMom.Pt(),fLeadingMom.Phi()*TMath::RadToDeg(),fLeadingMom.Eta()) ;
894 particle->SetLeading(fLeadingPi0Mom);
895 particle->SetLeadingDetector("EMCAL");
900 if(GetDebug() > 1)printf ("AliAnaParticleJetLeadingConeCorrelation::GetLeadingParticle() - NO LEADING PARTICLE FOUND \n");
906 //_______________________________________________________________________________________________________
907 void AliAnaParticleJetLeadingConeCorrelation::GetLeadingCharge(AliAODPWG4ParticleCorrelation * particle)
909 //Search for the charged particle with highest pt and with
910 //Phi=Phi_trigger-Pi and pT=0.1E_gamma
912 if(!GetCTSTracks()) return;
914 Double_t ptTrig = particle->Pt();
915 Double_t phiTrig = particle->Phi();
916 Double_t rat = -100 ;
917 Double_t ptl = -100 ;
918 Double_t phil = -100 ;
920 Double_t phi = -100.;
922 for(Int_t ipr = 0;ipr < GetCTSTracks()->GetEntriesFast() ; ipr ++ )
924 AliVTrack* track = (AliVTrack *)(GetCTSTracks()->At(ipr)) ;
925 fTrackVector.SetXYZ(track->Px(),track->Py(),track->Pz());
926 pt = fTrackVector.Pt();
927 phi = fTrackVector.Phi() ;
928 if(phi < 0) phi+=TMath::TwoPi();
931 //printf("AliAnaParticleJetLeadingConeCorrelation::GetLeadingCharge() - Tracks: pt %2.3f eta %2.3f phi %2.3f pt/ptTrig %2.3f \n",
932 // pt, fTrackVector.Eta(), phi,pt/ptTrig) ;
934 Float_t deltaphi = TMath::Abs(phiTrig-phi);
935 if((deltaphi > fDeltaPhiMinCut) && (deltaphi < fDeltaPhiMaxCut) &&
936 (rat > fLeadingRatioMinCut) && (rat < fLeadingRatioMaxCut) && (pt > ptl))
940 fLeadingChargeMom.SetVect(fTrackVector);
944 if(GetDebug() > 1 && ptl > 0 )
945 printf("AliAnaParticleJetLeadingConeCorrelation::GetLeadingCharge() - Leading in CTS: pt %2.3f eta %2.3f phi %2.3f pt/ptTrig %2.3f, |phiTrig-phi| %2.3f \n",
946 ptl, fLeadingChargeMom.Eta(), phil,ptl/ptTrig, TMath::Abs(phiTrig-phil)) ;
950 //____________________________________________________________________________________________________
951 void AliAnaParticleJetLeadingConeCorrelation::GetLeadingPi0(AliAODPWG4ParticleCorrelation * particle)
953 //Search for the neutral pion with highest pt and with
954 //Phi=Phi_trigger-Pi and pT=0.1E_gamma
956 if(!GetEMCALClusters()) return ;
958 Double_t ptTrig = particle->Pt();
959 Double_t phiTrig = particle->Phi();
960 Double_t rat = -100 ;
961 Double_t ptl = -100 ;
962 Double_t phil = -100 ;
964 Double_t phi = -100.;
966 //Get vertex for photon momentum calculation
967 Double_t vertex [] = {0,0,0} ; //vertex
968 if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
973 //Cluster loop, select pairs with good pt, phi and fill AODs or histograms
974 for(Int_t iclus = 0;iclus < GetEMCALClusters()->GetEntriesFast() ; iclus ++ )
976 AliVCluster * calo = (AliVCluster *)(GetEMCALClusters()->At(iclus)) ;
978 //Cluster selection, not charged, with photon or pi0 id and in fiducial cut
980 if(!SelectCluster(calo, vertex, fLeadingPhoMom1, pdgi)) continue ;
982 if(GetDebug() > 2) printf("AliAnaParticleJetLeadingConeCorrelation::GetLeadingPi0() - Neutral cluster: pt %2.3f, phi %2.3f \n",
983 fLeadingPhoMom1.Pt(),fLeadingPhoMom1.Phi());
985 //2 gamma overlapped, found with PID
986 if(pdgi == AliCaloPID::kPi0)
988 if(GetDebug() > 2) printf("AliAnaParticleJetLeadingConeCorrelation::GetLeadingPi0() - Neutral cluster ID as Pi0 \n");
990 pt = fLeadingPhoMom1.Pt();
992 phi = fLeadingPhoMom1.Phi();
993 if(phi < 0) phi+=TMath::TwoPi();
995 //Selection within angular and energy limits
996 Float_t deltaphi = TMath::Abs(phiTrig-phi);
997 if(pt > ptl && rat > fLeadingRatioMinCut && rat < fLeadingRatioMaxCut &&
998 deltaphi > fDeltaPhiMinCut && deltaphi < fDeltaPhiMaxCut )
1002 fLeadingPi0Mom.SetPxPyPzE(fLeadingPhoMom1.Px(),fLeadingPhoMom1.Py(),fLeadingPhoMom1.Pz(),fLeadingPhoMom1.E());
1004 }// pdg = AliCaloPID::kPi0
1005 //Make invariant mass analysis
1006 else if(pdgi == AliCaloPID::kPhoton)
1008 //Search the photon companion in case it comes from a Pi0 decay
1009 //Apply several cuts to select the good pair
1010 for(Int_t jclus = iclus+1; jclus < GetEMCALClusters()->GetEntriesFast() ; jclus++ )
1012 AliVCluster * calo2 = (AliVCluster *) (GetEMCALClusters()->At(jclus)) ;
1014 //Cluster selection, not charged with photon or pi0 id and in fiducial cut
1017 if (!SelectCluster(calo2, vertex, fLeadingPhoMom2, pdgj)) continue ;
1019 if(pdgj == AliCaloPID::kPhoton )
1021 pt = (fLeadingPhoMom1+fLeadingPhoMom2).Pt();
1022 phi = (fLeadingPhoMom1+fLeadingPhoMom2).Phi();
1023 if(phi < 0) phi+=TMath::TwoPi();
1026 //Selection within angular and energy limits
1027 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,(fLeadingPhoMom1+fLeadingPhoMom2).Eta(), deltaphi, rat, (fLeadingPhoMom1+fLeadingPhoMom2).M());
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(fLeadingPhoMom1, fLeadingPhoMom2,kEMCAL)){
1038 fLeadingPi0Mom=(fLeadingPhoMom1+fLeadingPhoMom2);
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,(fLeadingPhoMom1+fLeadingPhoMom2).Eta(), (fLeadingPhoMom1+fLeadingPhoMom2).M());
1045 }//Pair selected as leading
1046 }//if pair of gammas
1051 if(GetDebug() > 2 && fLeadingPi0Mom.Pt() > 0 )
1052 printf("AliAnaParticleJetLeadingConeCorrelation::GetLeadingPi0() - Leading EMCAL: pt %2.3f eta %2.3f phi %2.3f pt/Eg %2.3f \n",
1053 fLeadingPi0Mom.Pt(), fLeadingPi0Mom.Eta(), phil, fLeadingPi0Mom.Pt()/ptTrig) ;
1057 //____________________________________________________________________________
1058 void AliAnaParticleJetLeadingConeCorrelation::InitParameters()
1060 //Initialize the parameters of the analysis.
1061 SetInputAODName("PWG4Particle");
1062 SetAODObjArrayName("JetLeadingCone");
1063 AddToHistogramsName("AnaJetLCCorr_");
1065 fJetsOnlyInCTS = kFALSE ;
1067 fReMakeJet = kFALSE ;
1069 //Leading selection parameters
1070 fDeltaPhiMinCut = 2.9 ;
1071 fDeltaPhiMaxCut = 3.4 ;
1072 fLeadingRatioMinCut = 0.1;
1073 fLeadingRatioMaxCut = 1.5;
1075 //Jet selection parameters
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
1083 fSelectIsolated = kFALSE;
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;
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;
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;
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
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;
1124 //Different cones and pt thresholds to construct the jet
1127 fJetPtThreshold = 0.5 ;
1128 fJetPtThresPbPb = 2. ;
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" ;
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" ;
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
1148 if(ptjet == 0) return kFALSE;
1150 Double_t rat = ptTrig / ptjet ;
1152 //###############################################################
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
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
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
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
1220 }//If low pt jet in bkg
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);
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);
1229 if(( min < rat ) && ( max > ptjet/rat))
1234 //###############################################################
1235 else if(fSelect == 2){
1237 if(!fJetsOnlyInCTS){
1238 if((rat < fJetRatioMaxCut) && (rat > fJetRatioMinCut )) return kTRUE;
1241 if((rat < fJetCTSRatioMaxCut) && (rat > fJetCTSRatioMinCut )) return kTRUE;
1244 //###############################################################
1246 printf("AliAnaParticleJetLeadingConeCorrelation::IsJetSelected() - Jet selection option larger than 2, DON'T SELECT JETS\n");
1254 //___________________________________________________________________
1255 Bool_t AliAnaParticleJetLeadingConeCorrelation::IsParticleInJetCone(const Double_t eta, Double_t phi, const Double_t etal, Double_t phil)
1257 //Check if the particle is inside the cone defined by the leading particle
1258 //WARNING: To be rechecked
1260 if(phi < 0) phi+=TMath::TwoPi();
1261 if(phil < 0) phil+=TMath::TwoPi();
1262 Double_t rad = 10000 + fJetCone;
1264 if(TMath::Abs(phi-phil) <= (TMath::TwoPi() - fJetCone))
1265 rad = TMath::Sqrt(TMath::Power(eta-etal,2)+TMath::Power(phi-phil,2));
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));
1273 if(rad < fJetCone) return kTRUE ;
1274 else return kFALSE ;
1278 //__________________________________________________________________
1279 void AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillAOD()
1281 //Particle-Hadron Correlation Analysis, fill AODs
1283 if(!GetInputAODBranch()){
1284 printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillAOD() - No input particles in AOD with name branch < %s > \n",
1285 GetInputAODName().Data());
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());
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());
1302 //Loop on stored AOD particles, trigger
1303 Int_t naod = GetInputAODBranch()->GetEntriesFast();
1304 for(Int_t iaod = 0; iaod < naod ; iaod++)
1306 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1308 // printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillAOD() - Trigger : pt %3.2f, phi %2.2f, eta %2.2f\n",particle->Pt(), particle->Phi(), particle->Eta());
1310 //Search leading particles in CTS and EMCAL
1311 if(GetLeadingParticle(particle))
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);
1318 }//AOD trigger particle loop
1320 if(GetDebug() >1)printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillAOD() - End of jet leading cone analysis, fill AODs \n");
1324 //_________________________________________________________________________
1325 void AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillHistograms()
1328 //Particle-Hadron Correlation Analysis, fill histograms
1330 if(!GetInputAODBranch())
1332 printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillHistograms() - No input particles in AOD with name branch < %s > \n",
1333 GetInputAODName().Data());
1339 printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillHistograms() - Begin jet leading cone correlation analysis, fill histograms \n");
1340 printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillHistograms() - In particle branch aod entries %d\n", GetInputAODBranch()->GetEntriesFast());
1341 printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillHistograms() - In CTS aod entries %d\n", GetCTSTracks()->GetEntriesFast());
1342 printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillHistograms() - In EMCAL aod entries %d\n", GetEMCALClusters()->GetEntriesFast());
1345 //Loop on stored AOD particles, trigger
1346 Int_t naod = GetInputAODBranch()->GetEntriesFast();
1347 for(Int_t iaod = 0; iaod < naod ; iaod++)
1349 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1351 if(OnlyIsolated() && !particle->IsIsolated()) continue;
1353 Double_t pt = particle->Pt();
1354 Double_t phi = particle->Phi();
1355 Double_t eta = particle->Eta();
1357 //Get leading particle, fill histograms
1358 fLeadingMom = particle->GetLeading();
1359 TString det = particle->GetLeadingDetector();
1361 if(det!="" && fLeadingMom.Pt() > 0)
1363 Double_t ptL = fLeadingMom.Pt();
1364 Double_t phiL = fLeadingMom.Phi();
1365 if(phiL < 0 ) phiL+=TMath::TwoPi();
1366 Double_t etaL = fLeadingMom.Eta();
1368 if(GetDebug() > 1) printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillHistograms() - Trigger with pt %3.2f, phi %2.2f, eta %2.2f\n", pt, phi, eta);
1371 fhChargedLeadingPt->Fill(pt,ptL);
1372 fhChargedLeadingPhi->Fill(pt,phiL);
1373 fhChargedLeadingEta->Fill(pt,etaL);
1374 fhChargedLeadingDeltaPt->Fill(pt,pt-ptL);
1375 fhChargedLeadingDeltaPhi->Fill(pt,TMath::Abs(phi-phiL));
1376 fhChargedLeadingDeltaEta->Fill(pt,eta-etaL);
1377 fhChargedLeadingRatioPt->Fill(pt,ptL/pt);
1378 fhChargedLeadingXi->Fill(pt,TMath::Log(pt/ptL));
1379 if(pt > 30) fhChargedLeadingDeltaPhiRatioPt30->Fill(TMath::Abs(phi-phiL),ptL/pt);
1380 if(pt > 50) fhChargedLeadingDeltaPhiRatioPt50->Fill(TMath::Abs(phi-phiL),ptL/pt);
1382 else if(det== "EMCAL"){
1383 fhNeutralLeadingPt->Fill(pt,ptL);
1384 fhNeutralLeadingPhi->Fill(pt,phiL);
1385 fhNeutralLeadingEta->Fill(pt,etaL);
1386 fhNeutralLeadingDeltaPt->Fill(pt,pt-ptL);
1387 fhNeutralLeadingDeltaPhi->Fill(pt,TMath::Abs(phi-phiL));
1388 fhNeutralLeadingDeltaEta->Fill(pt,eta-etaL);
1389 fhNeutralLeadingRatioPt->Fill(pt,ptL/pt);
1390 fhNeutralLeadingXi->Fill(pt,TMath::Log(pt/ptL));
1391 if(pt > 30) fhNeutralLeadingDeltaPhiRatioPt30->Fill(TMath::Abs(phi-phiL),ptL/pt);
1392 if(pt > 50) fhNeutralLeadingDeltaPhiRatioPt50->Fill(TMath::Abs(phi-phiL),ptL/pt);
1396 //Fill Jet histograms
1398 if(!fSeveralConeAndPtCuts)
1399 {//just fill histograms
1402 fJetMom=particle->GetCorrelatedJet();
1403 fBkgMom=particle->GetCorrelatedBackground();
1405 else MakeJetFromAOD(particle);
1407 if(fJetMom.Pt() > 0)
1409 FillJetHistos(particle, fJetMom,"Jet","");
1410 FillJetHistos(particle, fBkgMom,"Bkg","");
1413 else if(fSeveralConeAndPtCuts)
1415 for(Int_t icone = 0; icone<fJetNCone; icone++)
1417 fJetCone=fJetCones[icone];
1418 for(Int_t ipt = 0; ipt<fJetNPt;ipt++)
1420 TString lastname ="Cone"+ fJetNameCones[icone]+"Pt"+ fJetNamePtThres[ipt];
1421 fJetPtThreshold=fJetPtThres[ipt];
1423 MakeJetFromAOD(particle);
1425 if(fJetMom.Pt() > 0)
1427 FillJetHistos(particle, fJetMom,"Jet",lastname);
1428 FillJetHistos(particle, fBkgMom,"Bkg",lastname);
1432 }//fSeveralConeAndPtCuts
1434 }//AOD trigger particle loop
1436 if(GetDebug() >1)printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillHistograms() - End of jet leading cone analysis, fill histograms \n");
1440 //_______________________________________________________________________________________________
1441 void AliAnaParticleJetLeadingConeCorrelation::MakeAODJet(AliAODPWG4ParticleCorrelation *particle)
1443 //Fill the jet with the particles around the leading particle with
1444 //R=fJetCone and pt_th = fJetPtThres. Calculate the energy of the jet and
1445 //fill aod with found information
1447 Double_t ptTrig = particle->Pt();
1448 Double_t phiTrig = particle->Phi();
1449 Double_t phil = fLeadingMom.Phi();
1450 if(phil<0) phil+=TMath::TwoPi();
1451 Double_t etal = fLeadingMom.Eta();
1453 //Different pt cut for jet particles in different collisions systems
1454 Float_t ptcut = fJetPtThreshold;
1455 if(fPbPb && !fSeveralConeAndPtCuts && ptTrig > fPtTriggerSelectionCut) ptcut = fJetPtThresPbPb ;
1457 //Add charged particles to jet if they are in cone around the leading particle
1458 if(!GetCTSTracks()) {
1459 printf("AliAnaParticleJetLeadingConeCorrelation::MakeAODJet() - Cannot construct jets without tracks, STOP analysis");
1463 //Fill jet with tracks
1464 //Initialize reference arrays that will contain jet and background tracks
1465 TObjArray * reftracks = new TObjArray;
1466 TObjArray * reftracksbkg = new TObjArray;
1468 for(Int_t ipr = 0;ipr < (GetCTSTracks())->GetEntriesFast() ; ipr ++ ){
1469 AliVTrack* track = (AliVTrack *)((GetCTSTracks())->At(ipr)) ;
1470 fTrackVector.SetXYZ(track->Px(),track->Py(),track->Pz());
1473 if(IsParticleInJetCone(fTrackVector.Eta(), fTrackVector.Phi(), etal, phil)){
1475 reftracks->Add(track);
1477 if(fTrackVector.Pt() > ptcut )
1479 fJetConstMom.SetVect(fTrackVector);
1480 fJetMom+=fJetConstMom;
1484 //Background around (phi_gamma-pi, eta_leading)
1485 else if(IsParticleInJetCone(fTrackVector.Eta(),fTrackVector.Phi(),etal, phiTrig)) {
1487 reftracksbkg->Add(track);
1489 if(fTrackVector.Pt() > ptcut ){
1490 fJetConstMom.SetVect(fTrackVector);
1491 fBkgMom+=fJetConstMom;
1496 //Add referenced tracks to AOD
1497 if(reftracks->GetEntriesFast() > 0 )
1499 reftracks->SetName(Form("%sTracks",GetAODObjArrayName().Data()));
1500 particle->AddObjArray(reftracks);
1502 else if(GetDebug() > 2 ) printf("AliAnaParticleJetLeadingConeCorrelation::MakeAODJet() - No tracks in jet cone\n");
1503 if(reftracksbkg->GetEntriesFast() > 0 )
1505 reftracksbkg->SetName(Form("%sTracksBkg",GetAODObjArrayName().Data()));
1506 particle->AddObjArray(reftracksbkg);
1508 else if(GetDebug() > 2 ) printf("AliAnaParticleJetLeadingConeCorrelation::MakeAODJet() - No background tracks in jet cone\n");
1510 //Add neutral particles to jet
1511 //Initialize reference arrays that will contain jet and background tracks
1512 TObjArray * refclusters = new TObjArray;
1513 TObjArray * refclustersbkg = new TObjArray;
1514 if(!fJetsOnlyInCTS && GetEMCALClusters()){
1516 //Get vertex for photon momentum calculation
1517 Double_t vertex[] = {0,0,0} ; //vertex
1518 if(GetReader()->GetDataType()!= AliCaloTrackReader::kMC)
1520 GetReader()->GetVertex(vertex);
1521 //if(GetReader()->GetSecondInputAODTree()) GetReader()->GetSecondInputAODVertex(vertex2);
1524 for(Int_t iclus = 0;iclus < (GetEMCALClusters())->GetEntriesFast() ; iclus ++ )
1526 AliVCluster * calo = (AliVCluster *) (GetEMCALClusters()->At(iclus)) ;
1528 //Cluster selection, not charged
1529 if(IsTrackMatched(calo,GetReader()->GetInputEvent())) continue ;
1531 //Get Momentum vector,
1532 calo->GetMomentum(fJetConstMom,vertex) ;//Assume that come from vertex in straight line
1535 if(IsParticleInJetCone(fJetConstMom.Eta(),fJetConstMom.Phi(), etal, phil)){
1537 refclusters->Add(calo);
1539 if(fJetConstMom.Pt() > ptcut ) fJetMom+=fJetConstMom;
1541 //Background around (phi_gamma-pi, eta_leading)
1542 else if(IsParticleInJetCone(fJetConstMom.Eta(),fJetConstMom.Phi(),etal, phiTrig)){
1545 refclustersbkg->Add(calo);
1547 if(fJetConstMom.Pt() > ptcut ) fBkgMom+=fJetConstMom;
1550 }//jets with neutral particles
1552 //Add referenced clusters to AOD
1553 if(refclusters->GetEntriesFast() > 0 ){
1554 refclusters->SetName(Form("%sClusters",GetAODObjArrayName().Data()));
1555 particle->AddObjArray(refclusters);
1557 else if(GetDebug() > 2 ) printf("AliAnaParticleJetLeadingConeCorrelation::MakeAODJet() - No clusters in jet cone\n");
1558 if(refclustersbkg->GetEntriesFast() > 0 )
1560 refclustersbkg->SetName(Form("%sClustersBkg",GetAODObjArrayName().Data()));
1561 particle->AddObjArray(refclustersbkg);
1563 else if(GetDebug() > 2 ) printf("AliAnaParticleJetLeadingConeCorrelation::MakeAODJet() - No background clusters in jet cone\n");
1565 //If there is any jet found, select after some criteria and
1566 //and fill AOD with corresponding TLorentzVector kinematics
1567 if(IsJetSelected(particle->Pt(), fJetMom.Pt()))
1569 particle->SetCorrelatedJet(fJetMom);
1570 particle->SetCorrelatedBackground(fBkgMom);
1571 if(GetDebug()>1) printf("AliAnaParticleJetLeadingConeCorrelation::MakeAODJet() - Found jet: Trigger pt %2.3f, Jet pt %2.3f, Bkg pt %2.3f\n",ptTrig,fJetMom.Pt(),fBkgMom.Pt());
1576 //______________________________________________________________________________________________________
1577 void AliAnaParticleJetLeadingConeCorrelation::MakeJetFromAOD(AliAODPWG4ParticleCorrelation *particle)
1579 //Fill the jet with the particles around the leading particle with
1580 //R=fJetCone and pt_th = fJetPtThres. Calculate the energy of the jet and
1581 //fill aod tlorentzvectors with jet and bakcground found
1583 Double_t ptTrig = particle->Pt();
1584 Double_t phiTrig = particle->Phi();
1585 Double_t etal = fLeadingMom.Eta();
1586 Double_t phil = fLeadingMom.Phi();
1587 if(phil < 0) phil+=TMath::TwoPi();
1589 TObjArray * refclusters = particle->GetObjArray(Form("Clusters%s" ,GetAODObjArrayName().Data()));
1590 TObjArray * reftracks = particle->GetObjArray(Form("Tracks%s" ,GetAODObjArrayName().Data()));
1591 TObjArray * refclustersbkg = particle->GetObjArray(Form("ClustersBkg%s",GetAODObjArrayName().Data()));
1592 TObjArray * reftracksbkg = particle->GetObjArray(Form("TracksBkg%s" ,GetAODObjArrayName().Data()));
1594 //Different pt cut for jet particles in different collisions systems
1595 Float_t ptcut = fJetPtThreshold;
1596 if(fPbPb && !fSeveralConeAndPtCuts && ptTrig > fPtTriggerSelectionCut) ptcut = fJetPtThresPbPb ;
1598 //Fill jet with tracks
1602 for(Int_t ipr = 0;ipr < reftracks->GetEntriesFast() ; ipr ++ )
1604 AliVTrack* track = (AliVTrack *) reftracks->At(ipr) ;
1605 fTrackVector.SetXYZ(track->Px(),track->Py(),track->Pz());
1606 Float_t phi = fTrackVector.Phi();
1607 if(phi < 0) phi+=TMath::TwoPi();
1608 if(fTrackVector.Pt() > ptcut && IsParticleInJetCone(fTrackVector.Eta(), phi, etal, phil) )
1610 fJetConstMom.SetVect(fTrackVector);
1611 fJetMom+=fJetConstMom;
1615 //Particles in background
1617 for(Int_t ipr = 0;ipr < reftracksbkg->GetEntriesFast() ; ipr ++ )
1619 AliVTrack* track = (AliVTrack *) reftracksbkg->At(ipr) ;
1620 fTrackVector.SetXYZ(track->Px(),track->Py(),track->Pz());
1621 if(fTrackVector.Pt() > ptcut && IsParticleInJetCone(fTrackVector.Eta(),fTrackVector.Phi(),etal, phiTrig) )
1623 fJetConstMom.SetVect(fTrackVector);
1624 fBkgMom+=fJetConstMom;
1626 }//background Track loop
1629 //Add neutral particles to jet
1630 if(!fJetsOnlyInCTS && refclusters)
1632 //Get vertex for photon momentum calculation
1633 Double_t vertex[] = {0,0,0} ; //vertex
1634 if(GetReader()->GetDataType()!= AliCaloTrackReader::kMC)
1636 GetReader()->GetVertex(vertex);
1639 //Loop on jet particles
1641 for(Int_t iclus = 0;iclus < refclusters->GetEntriesFast() ; iclus ++ )
1643 AliVCluster * calo = (AliVCluster *) refclusters->At(iclus) ;
1645 calo->GetMomentum(fJetConstMom,vertex) ;//Assume that come from vertex in straight line
1647 if(fJetConstMom.Pt() > ptcut && IsParticleInJetCone(fJetConstMom.Eta(),fJetConstMom.Phi(), etal, phil)) fJetMom+=fJetConstMom;
1651 //Loop on background particles
1654 for(Int_t iclus = 0;iclus < refclustersbkg->GetEntriesFast() ; iclus ++ )
1656 AliVCluster * calo = (AliVCluster *) refclustersbkg->At(iclus) ;
1658 calo->GetMomentum(fJetConstMom,vertex) ;//Assume that come from vertex in straight line
1660 if( fJetConstMom.Pt() > ptcut && IsParticleInJetCone(fJetConstMom.Eta(),fJetConstMom.Phi(),etal, phiTrig)) fBkgMom+=fJetConstMom;
1661 }//background cluster loop
1665 //If there is any jet found, leave jet and bkg as they are,
1666 //if not set them to 0.
1667 if(!IsJetSelected(particle->Pt(), fJetMom.Pt()))
1669 fJetMom.SetPxPyPzE(0.,0.,0.,0.);
1670 fBkgMom.SetPxPyPzE(0.,0.,0.,0.);
1673 if(GetDebug()>1) printf("AliAnaParticleJetLeadingConeCorrelation::MakeJetFromAOD() - Found jet: Trigger pt %2.3f, Jet pt %2.3f, Bkg pt %2.3f\n",
1674 ptTrig,fJetMom.Pt(),fBkgMom.Pt());
1678 //__________________________________________________________________
1679 void AliAnaParticleJetLeadingConeCorrelation::Print(const Option_t * opt) const
1682 //Print some relevant parameters set for the analysis
1686 printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
1687 AliAnaCaloTrackCorrBaseClass::Print(" ");
1689 if(fJetsOnlyInCTS)printf("Jets reconstructed in CTS \n");
1690 else printf("Jets reconstructed in CTS+EMCAL \n");
1692 if(fPbPb) printf("PbPb events, pT cut in jet cone energy reconstruction %2.1f \n", fJetPtThreshold);
1693 else printf("pp events, pT cut in jet cone energy reconstruction %2.1f \n", fJetPtThresPbPb);
1695 printf("If pT of trigger < %2.3f, select jets as in pp? \n", fPtTriggerSelectionCut);
1697 printf("Phi gamma-Leading < %3.2f\n", fDeltaPhiMaxCut) ;
1698 printf("Phi gamma-Leading > %3.2f\n", fDeltaPhiMinCut) ;
1699 printf("pT Leading / pT Trigger < %3.2f\n", fLeadingRatioMaxCut) ;
1700 printf("pT Leading / pT Trigger > %3.2f\n", fLeadingRatioMinCut) ;
1703 printf("pT Jet / pT Gamma < %3.2f\n", fJetRatioMaxCut) ;
1704 printf("pT Jet / pT Gamma > %3.2f\n", fJetRatioMinCut) ;
1705 printf("pT Jet (Only CTS)/ pT Trigger < %3.2f\n", fJetCTSRatioMaxCut) ;
1706 printf("pT Jet (Only CTS)/ pT Trigger > %3.2f\n", fJetCTSRatioMinCut) ;
1708 else if(fSelect == 0)
1709 printf("Accept all reconstructed jets \n") ;
1710 else if(fSelect == 1)
1711 printf("Accept jets depending on trigger energy \n") ;
1713 printf("Wrong jet selection option: %d \n", fSelect) ;
1715 printf("Isolated Trigger? %d\n", fSelectIsolated) ;