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 for the analysis of particle (direct gamma) -jet (jet found with finder) correlations
18 //*-- Author: Gustavo Conesa (LNF-INFN)
19 //*-- Modified: Adam Matyja (INP PAN Cracow)
20 //////////////////////////////////////////////////////////////////////////////
23 // --- ROOT system ---
25 #include "TClonesArray.h"
27 //#include "Riostream.h"
29 //---- AliRoot system ----
30 #include "AliCaloTrackReader.h"
31 #include "AliAODJet.h"
32 #include "AliAnaParticleJetFinderCorrelation.h"
33 #include "AliAODPWG4ParticleCorrelation.h"
34 #include "AliVTrack.h"
35 #include "AliAODCaloCluster.h"
36 #include "AliAODEvent.h"
39 #include "AliAODJetEventBackground.h"
43 #include "AliMCAnalysisUtils.h"
44 #include "AliAODMCParticle.h"
46 #include "AliEMCALGeometry.h"
48 ClassImp(AliAnaParticleJetFinderCorrelation)
50 //________________________________________________________________________
51 AliAnaParticleJetFinderCorrelation::AliAnaParticleJetFinderCorrelation() :
52 AliAnaCaloTrackCorrBaseClass(),
53 fDeltaPhiMaxCut(0.), fDeltaPhiMinCut(0.), fRatioMaxCut(0.), fRatioMinCut(0.),
54 fConeSize(0.), fPtThresholdInCone(0.),fUseJetRefTracks(kTRUE),
55 fMakeCorrelationInHistoMaker(kFALSE), fSelectIsolated(kTRUE),
56 fJetConeSize(0.4),fJetMinPt(5),fJetMinPtBkgSub(-100.),fJetAreaFraction(0.6),
57 //fNonStandardJetFromReader(kTRUE),
58 fJetBranchName("jets"),
59 fBackgroundJetFromReader(kTRUE),
60 fBkgJetBranchName("jets"),
61 fGammaConeSize(0.3),fUseBackgroundSubtractionGamma(kFALSE),fSaveGJTree(kTRUE),
62 fMostEnergetic(kFALSE),fMostOpposite(kTRUE), fUseHistogramJetBkg(kTRUE),
63 fUseHistogramTracks(kTRUE),fUseHistogramJetTracks(kTRUE),fMCStudies(kFALSE),fGenerator(0),
65 fhDeltaEta(0), /*fhDeltaPhi(0),*/fhDeltaPhiCorrect(0),fhDeltaPhi0PiCorrect(0), fhDeltaPt(0), fhPtRatio(0), fhPt(0),
66 fhFFz(0),fhFFxi(0),fhFFpt(0),fhNTracksInCone(0),
67 fhJetFFz(0),fhJetFFxi(0),fhJetFFpt(0),fhJetFFzCor(0),fhJetFFxiCor(0),
68 fhGamPtPerTrig(0),fhPtGamPtJet(0),
69 fhBkgFFz(),fhBkgFFxi(),fhBkgFFpt(),fhBkgNTracksInCone(),fhBkgSumPtInCone(),fhBkgSumPtnTracksInCone(),
70 fhNjetsNgammas(0),fhCuts(0),
71 fhDeltaEtaBefore(0),fhDeltaPhiBefore(0),fhDeltaPtBefore(0),fhPtRatioBefore(0),
72 fhPtBefore(0),fhDeltaPhi0PiCorrectBefore(0),
73 fhJetPtBefore(0),fhJetPtBeforeCut(0),fhJetPt(0),fhJetPtMostEne(0),fhJetPhi(0),fhJetEta(0),fhJetEtaVsPt(0),
74 fhJetPhiVsEta(0),fhJetEtaVsNpartInJet(0),fhJetEtaVsNpartInJetBkg(0),fhJetChBkgEnergyVsPt(0),fhJetChAreaVsPt(0),/*fhJetNjet(0),*/
75 fhTrackPhiVsEta(0),fhTrackAveTrackPt(0),fhJetNjetOverPtCut(),
76 /*fhJetChBkgEnergyVsPtEtaGt05(0),fhJetChBkgEnergyVsPtEtaLe05(0),fhJetChAreaVsPtEtaGt05(0),fhJetChAreaVsPtEtaLe05(0),*/
77 fhJetChBkgEnergyVsArea(0),fhJetRhoVsPt(0),fhJetRhoVsCentrality(0),//fhJetBkgRho(0),
78 fhJetNparticlesInJet(0),fhJetDeltaEtaDeltaPhi(0),fhJetDeltaEtaDeltaPhiAllTracks(0),
79 fhJetAveTrackPt(0),fhJetNtracksInJetAboveThr(),fhJetRatioNTrkAboveToNTrk(),fhJetNtrackRatioMostEne(),
80 fhJetNtrackRatioJet5GeV(),fhJetNtrackRatioLead5GeV(),
81 fhBkgJetBackground(),fhBkgJetSigma(),fhBkgJetArea(),fhPhotonPtMostEne(0),
82 fhPhotonAverageEnergy(0),fhPhotonRatioAveEneToMostEne(0),fhPhotonAverageEnergyMinus1(0),fhPhotonRatioAveEneMinus1ToMostEne(0),
83 fhPhotonNgammaMoreAverageToNgamma(0),fhPhotonNgammaMoreAverageMinus1ToNgamma(0),fhPhotonNgammaOverPtCut(),
84 fhPhotonBkgRhoVsNtracks(0),fhPhotonBkgRhoVsNclusters(0),fhPhotonBkgRhoVsCentrality(0),
85 fhPhotonBkgRhoVsNcells(0),fhPhotonPt(0),fhPhotonPtCorrected(0),fhPhotonPtCorrectedZoom(0),fhPhotonPtDiff(0),
86 fhPhotonPtDiffVsCentrality(0),fhPhotonPtDiffVsNcells(0),fhPhotonPtDiffVsNtracks(0),fhPhotonPtDiffVsNclusters(0),
87 fhPhotonSumPtInCone(0),fhPhotonSumPtCorrectInCone(0),fhPhotonSumPtChargedInCone(0),
88 fhSelectedJetPhiVsEta(0),fhSelectedJetChBkgEnergyVsPtJet(0),fhSelectedJetChAreaVsPtJet(0),fhSelectedJetNjet(0),fhSelectedNtracks(0),
89 fhSelectedTrackPhiVsEta(0),fhCuts2(0),
90 fhSelectedPhotonNLMVsPt(0),fhSelectedPhotonLambda0VsPt(0), fhRandomPhiEta(),
91 fhMCPhotonCuts(0),fhMCPhotonPt(0),fhMCPhotonEtaPhi(0),fhMCJetOrigin(0),
92 fhMCJetNPartVsPt(0),fhMCJetChNPartVsPt(0),fhMCJetNPart150VsPt(0),fhMCJetChNPart150VsPt(0),fhMCJetChNPart150ConeVsPt(0),
93 fhMCJetRatioChFull(0),fhMCJetRatioCh150Ch(0),
94 fhMCJetEtaPhi(0),fhMCJetChEtaPhi(0),fhMCJet150EtaPhi(0),fhMCJetCh150EtaPhi(0),fhMCJetCh150ConeEtaPhi(0),
143 fMCJetCh150ConePt(0),
144 fMCJetCh150ConeNPart(0),
145 fMCJetCh150ConeEta(0),
146 fMCJetCh150ConePhi(0)
150 //printf("constructor\n");
152 //Initialize parameters
154 for(Int_t i=0;i<10;i++){
155 fhJetNjetOverPtCut[i] = 0;
156 fhPhotonNgammaOverPtCut[i] = 0;
158 fGenerator = new TRandom2();
159 fGenerator->SetSeed(0);
162 //___________________________________________________________________
163 AliAnaParticleJetFinderCorrelation::~AliAnaParticleJetFinderCorrelation(){
168 //___________________________________________________________________
169 TList * AliAnaParticleJetFinderCorrelation::GetCreateOutputObjects()
171 // Create histograms to be saved in output file and
172 // store them in fOutputContainer
173 //printf("GetCreateOutputObjects\n");
175 TList * outputContainer = new TList() ;
176 outputContainer->SetName("ParticleJetFinderHistos") ;
178 Int_t nptbins = GetHistogramRanges()->GetHistoPtBins();
179 // Int_t nphibins = GetHistogramRanges()->GetHistoPhiBins();
180 // Int_t netabins = GetHistogramRanges()->GetHistoEtaBins();
181 Float_t ptmax = GetHistogramRanges()->GetHistoPtMax();
182 // Float_t phimax = GetHistogramRanges()->GetHistoPhiMax();
183 // Float_t etamax = GetHistogramRanges()->GetHistoEtaMax();
184 Float_t ptmin = GetHistogramRanges()->GetHistoPtMin();
185 // Float_t phimin = GetHistogramRanges()->GetHistoPhiMin();
186 // Float_t etamin = GetHistogramRanges()->GetHistoEtaMin();
188 // fhDeltaPhi = new TH2F("DeltaPhi","#phi_{trigger} - #phi_{jet} vs p_{T trigger}",nptbins,ptmin,ptmax,100,-6,4);
189 // fhDeltaPhi->SetYTitle("#Delta #phi");
190 // fhDeltaPhi->SetXTitle("p_{T trigger} (GeV/c)");
191 // outputContainer->Add(fhDeltaPhi);
193 fhDeltaPhiCorrect = new TH2F("DeltaPhiCorrect","#phi_{trigger} - #phi_{jet} vs p_{T trigger}",nptbins,ptmin,ptmax,100,0,6.5);
194 fhDeltaPhiCorrect->SetYTitle("#Delta #phi");
195 fhDeltaPhiCorrect->SetXTitle("p_{T trigger} (GeV/c)");
196 outputContainer->Add(fhDeltaPhiCorrect);
198 fhDeltaPhi0PiCorrect = new TH2F("DeltaPhi0PiCorrect","#phi_{trigger} - #phi_{jet} (0,#pi) vs p_{T trigger}",nptbins,ptmin,ptmax,100,0,3.5);
199 fhDeltaPhi0PiCorrect->SetYTitle("#Delta #phi");
200 fhDeltaPhi0PiCorrect->SetXTitle("p_{T trigger} (GeV/c)");
201 outputContainer->Add(fhDeltaPhi0PiCorrect);
204 fhDeltaEta = new TH2F("DeltaEta","#eta_{trigger} - #eta_{jet} vs p_{T trigger}",nptbins,ptmin,ptmax,100,-2,2);
205 fhDeltaEta->SetYTitle("#Delta #eta");
206 fhDeltaEta->SetXTitle("p_{T trigger} (GeV/c)");
207 outputContainer->Add(fhDeltaEta);
209 fhDeltaPt = new TH2F("DeltaPt","p_{T trigger} - p_{T jet} vs p_{T trigger}",nptbins,ptmin,ptmax,150,-50,100);
210 fhDeltaPt->SetYTitle("#Delta p_{T}");
211 fhDeltaPt->SetXTitle("p_{T trigger} (GeV/c)");
212 outputContainer->Add(fhDeltaPt);
214 fhPtRatio = new TH2F("PtRatio","p_{T jet} / p_{T trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,200,0,2.);
215 fhPtRatio->SetYTitle("ratio");
216 fhPtRatio->SetXTitle("p_{T trigger} (GeV/c)");
217 outputContainer->Add(fhPtRatio);
219 fhPt = new TH2F("Pt","p_{T jet} vs p_{T trigger}",nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
220 fhPt->SetYTitle("p_{T jet}(GeV/c)");
221 fhPt->SetXTitle("p_{T trigger} (GeV/c)");
222 outputContainer->Add(fhPt);
224 fhFFz = new TH2F("FFz","z = p_{T i charged}/p_{T trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,200,0.,2);
225 fhFFz->SetYTitle("z");
226 fhFFz->SetXTitle("p_{T trigger}");
227 outputContainer->Add(fhFFz) ;
229 fhFFxi = new TH2F("FFxi","#xi = ln(p_{T trigger}/p_{T i charged}) vs p_{T trigger}", nptbins,ptmin,ptmax,100,0.,10.);
230 fhFFxi->SetYTitle("#xi");
231 fhFFxi->SetXTitle("p_{T trigger}");
232 outputContainer->Add(fhFFxi) ;
234 fhFFpt = new TH2F("FFpt","p_{T i charged} vs p_{T trigger}", nptbins,ptmin,ptmax,100,0.,50.);
235 fhFFpt->SetYTitle("p_{T charged hadron}");
236 fhFFpt->SetXTitle("p_{T trigger}");
237 outputContainer->Add(fhFFpt) ;
239 fhNTracksInCone = new TH2F("NTracksInCone","Number of tracks in cone vs p_{T trigger}", nptbins,ptmin,ptmax,100,0.,150.);
240 fhNTracksInCone->SetYTitle("p_{T charged hadron}");
241 fhNTracksInCone->SetXTitle("p_{T trigger}");
242 outputContainer->Add(fhNTracksInCone) ;
244 //FF according to jet axis
245 fhJetFFz = new TH2F("JetFFz","z = p_{T i charged}/p_{T jet} vs p_{T jet}",nptbins,ptmin,ptmax,200,0.,2);
246 fhJetFFz->SetYTitle("z");
247 fhJetFFz->SetXTitle("p_{T jet}");
248 outputContainer->Add(fhJetFFz) ;
250 fhJetFFxi = new TH2F("JetFFxi","#xi = ln(p_{T jet}/p_{T i charged}) vs p_{T jet}", nptbins,ptmin,ptmax,100,0.,10.);
251 fhJetFFxi->SetYTitle("#xi");
252 fhJetFFxi->SetXTitle("p_{T jet}");
253 outputContainer->Add(fhJetFFxi) ;
255 fhJetFFpt = new TH2F("JetFFpt","p_{T i charged} vs p_{T jet}", nptbins,ptmin,ptmax,100,0.,50.);
256 fhJetFFpt->SetYTitle("p_{T charged hadron}");
257 fhJetFFpt->SetXTitle("p_{T jet}");
258 outputContainer->Add(fhJetFFpt) ;
260 fhJetFFzCor = new TH2F("JetFFzCor","z = -cos(#alpha(jet,trig))*p_{T i charged}/p_{T jet} vs p_{T jet}",nptbins,ptmin,ptmax,200,0.,2);
261 fhJetFFzCor->SetYTitle("z");
262 fhJetFFzCor->SetXTitle("p_{T jet}");
263 outputContainer->Add(fhJetFFzCor) ;
265 fhJetFFxiCor = new TH2F("JetFFxiCor","#xi = ln(p_{T jet}/(-cos(#alpha(jet,trig))*p_{T i charged})) vs p_{T jet}", nptbins,ptmin,ptmax,100,0.,10.);
266 fhJetFFxiCor->SetYTitle("#xi");
267 fhJetFFxiCor->SetXTitle("p_{T jet}");
268 outputContainer->Add(fhJetFFxiCor) ;
270 fhGamPtPerTrig = new TH1F("GamPtPerTrig","GamPtPerTrig", nptbins,ptmin,ptmax);
271 fhGamPtPerTrig->SetYTitle("Counts");
272 fhGamPtPerTrig->SetXTitle("p_{T, #gamma}");
273 outputContainer->Add(fhGamPtPerTrig) ;
275 fhPtGamPtJet = new TH2F("PtGamPtJet","p_{T #gamma} vs p_{T jet}", nptbins,ptmin,ptmax,150,-50.,100.);
276 fhPtGamPtJet->SetXTitle("p_{T #gamma}");
277 fhPtGamPtJet->SetYTitle("p_{T jet}");
278 outputContainer->Add(fhPtGamPtJet) ;
282 fhBkgFFz[0] = new TH2F("BkgFFzRC", "z = p_{T i charged}/p_{T trigger} vs p_{T trigger} Bkg RC" ,nptbins,ptmin,ptmax,200,0.,2);
283 fhBkgFFz[1] = new TH2F("BkgFFzPCG", "z = p_{T i charged}/p_{T trigger} vs p_{T trigger} Bkg PCG" ,nptbins,ptmin,ptmax,200,0.,2);
284 fhBkgFFz[2] = new TH2F("BkgFFzPCJ", "z = p_{T i charged}/p_{T trigger} vs p_{T trigger} Bkg PCJ" ,nptbins,ptmin,ptmax,200,0.,2);
285 fhBkgFFz[3] = new TH2F("BkgFFzMP", "z = p_{T i charged}/p_{T trigger} vs p_{T trigger} Bkg MP" ,nptbins,ptmin,ptmax,200,0.,2);
286 fhBkgFFz[4] = new TH2F("BkgFFzTest","z = p_{T i charged}/p_{T trigger} vs p_{T trigger} Bkg Test",nptbins,ptmin,ptmax,200,0.,2);
287 for(Int_t i=0;i<5;i++){
288 fhBkgFFz[i]->SetYTitle("z");
289 fhBkgFFz[i]->SetXTitle("p_{T trigger}");
290 outputContainer->Add(fhBkgFFz[i]) ;
293 fhBkgFFxi[0] = new TH2F("BkgFFxiRC", "#xi = ln(p_{T trigger}/p_{T i charged}) vs p_{T trigger} Bkg RC", nptbins,ptmin,ptmax,100,0.,10.);
294 fhBkgFFxi[1] = new TH2F("BkgFFxiPCG", "#xi = ln(p_{T trigger}/p_{T i charged}) vs p_{T trigger} Bkg PCG", nptbins,ptmin,ptmax,100,0.,10.);
295 fhBkgFFxi[2] = new TH2F("BkgFFxiPCJ", "#xi = ln(p_{T trigger}/p_{T i charged}) vs p_{T trigger} Bkg PCJ", nptbins,ptmin,ptmax,100,0.,10.);
296 fhBkgFFxi[3] = new TH2F("BkgFFxiMP", "#xi = ln(p_{T trigger}/p_{T i charged}) vs p_{T trigger} Bkg MP", nptbins,ptmin,ptmax,100,0.,10.);
297 fhBkgFFxi[4] = new TH2F("BkgFFxiTest","#xi = ln(p_{T trigger}/p_{T i charged}) vs p_{T trigger} Bkg Test",nptbins,ptmin,ptmax,100,0.,10.);
298 for(Int_t i=0;i<5;i++){
299 fhBkgFFxi[i]->SetYTitle("#xi");
300 fhBkgFFxi[i]->SetXTitle("p_{T trigger}");
301 outputContainer->Add(fhBkgFFxi[i]) ;
304 fhBkgFFpt[0] = new TH2F("BkgFFptRC", "p_{T i charged} vs p_{T trigger} Bkg RC", nptbins,ptmin,ptmax,100,0.,50.);
305 fhBkgFFpt[1] = new TH2F("BkgFFptPCG", "p_{T i charged} vs p_{T trigger} Bkg PCG", nptbins,ptmin,ptmax,100,0.,50.);
306 fhBkgFFpt[2] = new TH2F("BkgFFptPCJ", "p_{T i charged} vs p_{T trigger} Bkg PCJ", nptbins,ptmin,ptmax,100,0.,50.);
307 fhBkgFFpt[3] = new TH2F("BkgFFptMP", "p_{T i charged} vs p_{T trigger} Bkg MP", nptbins,ptmin,ptmax,100,0.,50.);
308 fhBkgFFpt[4] = new TH2F("BkgFFptTest","p_{T i charged} vs p_{T trigger} Bkg Test", nptbins,ptmin,ptmax,100,0.,50.);
309 for(Int_t i=0;i<5;i++){
310 fhBkgFFpt[i]->SetYTitle("p_{T charged hadron}");
311 fhBkgFFpt[i]->SetXTitle("p_{T trigger}");
312 outputContainer->Add(fhBkgFFpt[i]) ;
315 fhBkgNTracksInCone[0] = new TH2F("BkgNTracksInConeRC", "Number of tracks in cone vs p_{T trigger} Bkg RC", nptbins,ptmin,ptmax,100,0.,150.);
316 fhBkgNTracksInCone[1] = new TH2F("BkgNTracksInConePCG", "Number of tracks in cone vs p_{T trigger} Bkg PCG", nptbins,ptmin,ptmax,100,0.,150.);
317 fhBkgNTracksInCone[2] = new TH2F("BkgNTracksInConePCJ", "Number of tracks in cone vs p_{T trigger} Bkg PCJ", nptbins,ptmin,ptmax,100,0.,150.);
318 fhBkgNTracksInCone[3] = new TH2F("BkgNTracksInConeMP", "Number of tracks in cone vs p_{T trigger} Bkg MP", nptbins,ptmin,ptmax,100,0.,150.);
319 fhBkgNTracksInCone[4] = new TH2F("BkgNTracksInConeTest","Number of tracks in cone vs p_{T trigger} Bkg Test", nptbins,ptmin,ptmax,100,0.,150.);
320 for(Int_t i=0;i<5;i++){
321 fhBkgNTracksInCone[i]->SetYTitle("Number of tracks");
322 fhBkgNTracksInCone[i]->SetXTitle("p_{T trigger}");
323 outputContainer->Add(fhBkgNTracksInCone[i]) ;
326 fhBkgSumPtInCone[0] = new TH2F("BkgSumPtInConeRC", "Sum P_{T} in cone vs p_{T trigger} Bkg RC", nptbins,ptmin,ptmax,100,0.,100.);
327 fhBkgSumPtInCone[1] = new TH2F("BkgSumPtInConePCG", "Sum P_{T} in cone vs p_{T trigger} Bkg PCG", nptbins,ptmin,ptmax,100,0.,100.);
328 fhBkgSumPtInCone[2] = new TH2F("BkgSumPtInConePCJ", "Sum P_{T} in cone vs p_{T trigger} Bkg PCJ", nptbins,ptmin,ptmax,100,0.,100.);
329 fhBkgSumPtInCone[3] = new TH2F("BkgSumPtInConeMP", "Sum P_{T} in cone vs p_{T trigger} Bkg MP", nptbins,ptmin,ptmax,100,0.,100.);
330 fhBkgSumPtInCone[4] = new TH2F("BkgSumPtInConeTest","Sum P_{T} in cone vs p_{T trigger} Bkg Test", nptbins,ptmin,ptmax,100,0.,100.);
331 for(Int_t i=0;i<5;i++){
332 fhBkgSumPtInCone[i]->SetYTitle("Sum P_{T}");
333 fhBkgSumPtInCone[i]->SetXTitle("p_{T trigger}");
334 outputContainer->Add(fhBkgSumPtInCone[i]) ;
337 fhBkgSumPtnTracksInCone[0] = new TH2F("BkgSumPtnTracksInConeRC", "Sum p_{T} / Number of tracks in cone vs p_{T trigger} Bkg RC", nptbins,ptmin,ptmax,100,0.,20.);
338 fhBkgSumPtnTracksInCone[1] = new TH2F("BkgSumPtnTracksInConePCG", "Sum p_{T} / Number of tracks in cone vs p_{T trigger} Bkg PCG", nptbins,ptmin,ptmax,100,0.,20.);
339 fhBkgSumPtnTracksInCone[2] = new TH2F("BkgSumPtnTracksInConePCJ", "Sum p_{T} / Number of tracks in cone vs p_{T trigger} Bkg PCJ", nptbins,ptmin,ptmax,100,0.,20.);
340 fhBkgSumPtnTracksInCone[3] = new TH2F("BkgSumPtnTracksInConeMP", "Sum p_{T} / Number of tracks in cone vs p_{T trigger} Bkg MP", nptbins,ptmin,ptmax,100,0.,20.);
341 fhBkgSumPtnTracksInCone[4] = new TH2F("BkgSumPtnTracksInConeTest","Sum p_{T} / Number of tracks in cone vs p_{T trigger} Bkg Test", nptbins,ptmin,ptmax,100,0.,20.);
342 for(Int_t i=0;i<5;i++){
343 fhBkgSumPtnTracksInCone[i]->SetYTitle("Sum p_{T}/Number of tracks");
344 fhBkgSumPtnTracksInCone[i]->SetXTitle("p_{T trigger}");
345 outputContainer->Add(fhBkgSumPtnTracksInCone[i]) ;
349 //temporary histograms
350 fhNjetsNgammas = new TH2F("NjetsNgammas"," Number of jets vs number of gammas in event",20,0.,100.,10,0.,80.);
351 fhNjetsNgammas->SetYTitle("Number of gammas");
352 fhNjetsNgammas->SetXTitle("Number of jets");
353 outputContainer->Add(fhNjetsNgammas) ;
355 fhCuts = new TH1F("Cuts"," Cuts",10,0.,10.);
356 fhCuts->SetYTitle("Counts");
357 fhCuts->SetXTitle("Cut number");
358 outputContainer->Add(fhCuts) ;
360 fhDeltaPhiBefore = new TH2F("DeltaPhiBefore","#phi_{trigger} - #phi_{jet} vs p_{T trigger}",nptbins,ptmin,ptmax,100,0,6.5);
361 fhDeltaPhiBefore->SetYTitle("#Delta #phi");
362 fhDeltaPhiBefore->SetXTitle("p_{T trigger} (GeV/c)");
363 outputContainer->Add(fhDeltaPhiBefore);
365 fhDeltaEtaBefore = new TH2F("DeltaEtaBefore","#eta_{trigger} - #eta_{jet} vs p_{T trigger}",nptbins,ptmin,ptmax,100,-2,2);
366 fhDeltaEtaBefore->SetYTitle("#Delta #eta");
367 fhDeltaEtaBefore->SetXTitle("p_{T trigger} (GeV/c)");
368 outputContainer->Add(fhDeltaEtaBefore);
370 fhDeltaPtBefore = new TH2F("DeltaPtBefore","p_{T trigger} - p_{T jet} vs p_{T trigger}",nptbins,ptmin,ptmax,100,-50,50);
371 fhDeltaPtBefore->SetYTitle("#Delta p_{T}");
372 fhDeltaPtBefore->SetXTitle("p_{T trigger} (GeV/c)");
373 outputContainer->Add(fhDeltaPtBefore);
375 fhPtRatioBefore = new TH2F("PtRatioBefore","p_{T jet} / p_{T trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,200,0,2.);
376 fhPtRatioBefore->SetYTitle("ratio");
377 fhPtRatioBefore->SetXTitle("p_{T trigger} (GeV/c)");
378 outputContainer->Add(fhPtRatioBefore);
380 fhPtBefore = new TH2F("PtBefore","p_{T jet} vs p_{T trigger}",nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
381 fhPtBefore->SetYTitle("p_{T jet}(GeV/c)");
382 fhPtBefore->SetXTitle("p_{T trigger} (GeV/c)");
383 outputContainer->Add(fhPtBefore);
385 fhDeltaPhi0PiCorrectBefore = new TH2F("DeltaPhi0PiCorrectBefore","#phi_{trigger} - #phi_{jet} (0,#pi) vs p_{T trigger}",nptbins,ptmin,ptmax,100,0,3.5);
386 fhDeltaPhi0PiCorrectBefore->SetYTitle("#Delta #phi");
387 fhDeltaPhi0PiCorrectBefore->SetXTitle("p_{T trigger} (GeV/c)");
388 outputContainer->Add(fhDeltaPhi0PiCorrectBefore);
390 //temporary jet histograms
391 fhJetPtBefore = new TH1F("JetPtBefore","JetPtBefore",150,-50,100);
392 fhJetPtBefore->SetYTitle("Counts");
393 fhJetPtBefore->SetXTitle("p_{T jet}(GeV/c)");
394 outputContainer->Add(fhJetPtBefore) ;
396 fhJetPtBeforeCut = new TH1F("JetPtBeforeCut","JetPtBeforeCut",150,-50,100);
397 fhJetPtBeforeCut->SetYTitle("Counts");
398 fhJetPtBeforeCut->SetXTitle("p_{T jet}(GeV/c)");
399 outputContainer->Add(fhJetPtBeforeCut) ;
401 fhJetPt = new TH1F("JetPt","JetPt",150,-50,100);
402 fhJetPt->SetYTitle("Counts");
403 fhJetPt->SetXTitle("p_{T jet}(GeV/c)");
404 outputContainer->Add(fhJetPt) ;
406 fhJetPtMostEne = new TH1F("JetPtMostEne","JetPtMostEne",150,0,150);
407 fhJetPtMostEne->SetYTitle("Counts");
408 fhJetPtMostEne->SetXTitle("p_{T jet}(GeV/c)");
409 outputContainer->Add(fhJetPtMostEne) ;
411 fhJetPhi = new TH1F("JetPhi","JetPhi",130,0,6.5);
412 fhJetPhi->SetYTitle("Counts");
413 fhJetPhi->SetXTitle("#phi_{jet}");
414 outputContainer->Add(fhJetPhi) ;
416 fhJetEta = new TH1F("JetEta","JetEta",100,-1,1);
417 fhJetEta->SetYTitle("Counts");
418 fhJetEta->SetXTitle("#eta_{jet}");
419 outputContainer->Add(fhJetEta) ;
421 fhJetEtaVsPt = new TH2F("JetEtaVsPt","JetEtaVsPt",100,0,100,50,-1,1);
422 fhJetEtaVsPt->SetYTitle("#eta_{jet}");
423 fhJetEtaVsPt->SetXTitle("p_{T,jet}(GeV/c)");
424 outputContainer->Add(fhJetEtaVsPt) ;
426 fhJetPhiVsEta = new TH2F("JetPhiVsEta","JetPhiVsEta",65,0,6.5,50,-1,1);
427 fhJetPhiVsEta->SetYTitle("#eta_{jet}");
428 fhJetPhiVsEta->SetXTitle("#phi_{jet}");
429 outputContainer->Add(fhJetPhiVsEta) ;
431 fhJetEtaVsNpartInJet= new TH2F("JetEtaVsNpartInJet","JetEtaVsNpartInJet",50,-1,1,100,0.,200.);
432 fhJetEtaVsNpartInJet->SetYTitle("N_{tracks-in-jet}");
433 fhJetEtaVsNpartInJet->SetXTitle("#eta_{jet}");
434 outputContainer->Add(fhJetEtaVsNpartInJet) ;
436 fhJetEtaVsNpartInJetBkg= new TH2F("JetEtaVsNpartInJetBkg","JetEtaVsNpartInJetBkg",50,-1,1,100,0.,200.);
437 fhJetEtaVsNpartInJetBkg->SetYTitle("N_{tracks-in-jet}");
438 fhJetEtaVsNpartInJetBkg->SetXTitle("#eta_{jet}");
439 outputContainer->Add(fhJetEtaVsNpartInJetBkg) ;
441 fhJetChBkgEnergyVsPt = new TH2F("JetBkgChEnergyVsPt","JetBkgChEnergyVsPt",100,0,100,90,0,90);
442 fhJetChBkgEnergyVsPt->SetYTitle("Jet Bkg Energy (GeV)");
443 fhJetChBkgEnergyVsPt->SetXTitle("p_{T,jet} (GeV/c)");
444 outputContainer->Add(fhJetChBkgEnergyVsPt);
446 fhJetChAreaVsPt = new TH2F("JetChAreaVsPt","JetChAreaVsPt",100,0,100,50,0,1);
447 fhJetChAreaVsPt->SetYTitle("Jet Area");
448 fhJetChAreaVsPt->SetXTitle("p_{T,jet} (GeV/c)");
449 outputContainer->Add(fhJetChAreaVsPt);
451 if(IsHistogramTracks()){
452 fhTrackPhiVsEta = new TH2F("TrackPhiVsEta","TrackPhiVsEta",65,0,6.5,50,-1,1);
453 fhTrackPhiVsEta->SetYTitle("#eta_{track}");
454 fhTrackPhiVsEta->SetXTitle("#phi_{track}");
455 outputContainer->Add(fhTrackPhiVsEta) ;
457 fhTrackAveTrackPt = new TH1F("TrackAveTrackPt","TrackAveTrackPt",45,0,1.5);
458 fhTrackAveTrackPt->SetYTitle("Counts");
459 fhTrackAveTrackPt->SetXTitle("Average p_{T,track} (GeV/c)");
460 outputContainer->Add(fhTrackAveTrackPt);
462 }//end of IsHistogramTracks()
464 for(Int_t i=0;i<10;i++){
465 fhJetNjetOverPtCut[i] = new TH1F(Form("JetNjetOverPtCut%d", i),Form("JetNjetOverPtCut%d", i),100,0,100);
466 fhJetNjetOverPtCut[i]->SetYTitle("Counts");
467 fhJetNjetOverPtCut[i]->SetXTitle("N_{jets} over threshold");
468 outputContainer->Add(fhJetNjetOverPtCut[i]);
471 fhJetChBkgEnergyVsArea = new TH2F("JetBkgChEnergyVsArea","JetBkgChEnergyVsArea",100,0,100,70,0,0.7);
472 fhJetChBkgEnergyVsArea->SetXTitle("Jet Bkg Energy (GeV)");
473 fhJetChBkgEnergyVsArea->SetYTitle("Area");
474 outputContainer->Add(fhJetChBkgEnergyVsArea);
476 fhJetRhoVsPt = new TH2F("JetRhoVsPt","JetRhoVsPt",100,0,100,100,0,150);
477 fhJetRhoVsPt->SetYTitle("Rho");
478 fhJetRhoVsPt->SetXTitle("p_{T,jet} (GeV/c)");
479 outputContainer->Add(fhJetRhoVsPt);
481 if(IsHistogramJetBkg()){
482 fhJetRhoVsCentrality = new TH2F("JetRhoVsCentrality","JetRhoVsCentrality",100,0,100,100,0,200);
483 fhJetRhoVsCentrality->SetYTitle("Rho");
484 fhJetRhoVsCentrality->SetXTitle("Centrality");
485 outputContainer->Add(fhJetRhoVsCentrality);
488 fhJetNparticlesInJet = new TH1F("JetNparticlesInJet","JetNparticlesInJet",100,0,200);
489 fhJetNparticlesInJet->SetXTitle("N^{particles}");
490 fhJetNparticlesInJet->SetYTitle("N^{jets}");
491 outputContainer->Add(fhJetNparticlesInJet);
493 fhJetDeltaEtaDeltaPhi = new TH2F("JetDeltaEtaDeltaPhi","#Delta #eta^{jet-track} vs. #Delta #phi^{jet-track} for jet tracks",100,-0.8,0.8,100,-0.8,0.8);
494 fhJetDeltaEtaDeltaPhi->SetXTitle("#Delta #eta^{jet-track}");
495 fhJetDeltaEtaDeltaPhi->SetYTitle("#Delta #phi^{jet-track}");
496 outputContainer->Add(fhJetDeltaEtaDeltaPhi );
499 fhJetDeltaEtaDeltaPhiAllTracks = new TH2F("JetDeltaEtaDeltaPhiAllTracks","#Delta #eta^{jet-track} vs. #Delta #phi^{jet-track} for all tracks",100,-3.2,3.2,100,-3.2,3.2);
500 fhJetDeltaEtaDeltaPhiAllTracks->SetXTitle("#Delta #eta^{jet-track}");
501 fhJetDeltaEtaDeltaPhiAllTracks->SetYTitle("#Delta #phi^{jet-track}");
502 outputContainer->Add(fhJetDeltaEtaDeltaPhiAllTracks);
505 if(IsHistogramJetTracks()){
506 fhJetAveTrackPt = new TH1F("JetAveTrackPt","JetAveTrackPt",45,0.,1.5);
507 fhJetAveTrackPt->SetXTitle("Average p_{T,track} (GeV/c)");
508 fhJetAveTrackPt->SetYTitle("Counts");
509 outputContainer->Add(fhJetAveTrackPt);
511 for(Int_t i=0;i<6;i++){
512 if(i==0) fhJetNtracksInJetAboveThr[i] = new TH2F(Form("JetNtracksInJetAboveThr%d", i),Form("JetNtracksInJetAboveThr%d", i),100,0,100,100,0,200);
513 else fhJetNtracksInJetAboveThr[i] = new TH2F(Form("JetNtracksInJetAboveThr%d", i),Form("JetNtracksInJetAboveThr%d", i),100,0,100,100,0,100);
514 fhJetNtracksInJetAboveThr[i]->SetXTitle("p_{T,jet} (GeV/c)");
515 fhJetNtracksInJetAboveThr[i]->SetYTitle("N_{tracks} over threshold");
516 outputContainer->Add(fhJetNtracksInJetAboveThr[i]);
519 for(Int_t i=0;i<5;i++){
520 fhJetRatioNTrkAboveToNTrk[i] = new TH2F(Form("JetRatioNTrkAboveToNTrk%d", i),Form("JetRatioNTrkAboveToNTrk%d", i),100,0,100,40,0,1);
521 fhJetRatioNTrkAboveToNTrk[i]->SetXTitle("p_{T,jet} (GeV/c)");
522 fhJetRatioNTrkAboveToNTrk[i]->SetYTitle("Ratio N_{tracks} over threshold to N_{tracks}");
523 outputContainer->Add(fhJetRatioNTrkAboveToNTrk[i]);
525 fhJetNtrackRatioMostEne[i] = new TH2F(Form("JetNtrackRatioMostEne%d", i),Form("JetNtrackRatioMostEne%d", i),100,0,100,40,0,1);
526 fhJetNtrackRatioMostEne[i]->SetXTitle("p_{T,jet} (GeV/c)");
527 fhJetNtrackRatioMostEne[i]->SetYTitle("Ratio N_{tracks} over threshold to N_{tracks}");
528 outputContainer->Add(fhJetNtrackRatioMostEne[i]);
530 fhJetNtrackRatioJet5GeV[i] = new TH2F(Form("JetNtrackRatioJet5GeV%d", i),Form("JetNtrackRatioJet5GeV%d", i),100,0,100,40,0,1);
531 fhJetNtrackRatioJet5GeV[i]->SetXTitle("p_{T,jet} (GeV/c)");
532 fhJetNtrackRatioJet5GeV[i]->SetYTitle("Ratio N_{tracks} over threshold to N_{tracks}");
533 outputContainer->Add(fhJetNtrackRatioJet5GeV[i]);
535 fhJetNtrackRatioLead5GeV[i] = new TH2F(Form("JetNtrackRatioLead5GeV%d", i),Form("JetNtrackRatioLead5GeV%d", i),100,0,100,40,0,1);
536 fhJetNtrackRatioLead5GeV[i]->SetXTitle("p_{T,jet} (GeV/c)");
537 fhJetNtrackRatioLead5GeV[i]->SetYTitle("Ratio N_{tracks} over threshold to N_{tracks}");
538 outputContainer->Add(fhJetNtrackRatioLead5GeV[i]);
540 }//end of if IsHistogramJetTracks
542 //temporary background jets histograms
543 if(IsHistogramJetBkg()){
544 for(Int_t i=0;i<4;i++){
545 fhBkgJetBackground[i] = new TH1F(Form("BkgJetBackground%d", i),Form("BkgJetBackground%d", i),100,0,200);
546 fhBkgJetBackground[i]->SetXTitle("<#rho> (GeV/c)");
547 fhBkgJetBackground[i]->SetYTitle("Counts");
548 outputContainer->Add(fhBkgJetBackground[i]);
550 fhBkgJetSigma[i] = new TH1F(Form("BkgJetSigma%d", i),Form("BkgJetSigma%d", i),100,0,50);
551 fhBkgJetSigma[i]->SetXTitle("#sigma (GeV/c)");
552 fhBkgJetSigma[i]->SetYTitle("Counts");
553 outputContainer->Add(fhBkgJetSigma[i]);
555 fhBkgJetArea[i] = new TH1F(Form("BkgJetArea%d", i),Form("BkgJetArea%d", i),100,0,1);
556 fhBkgJetArea[i]->SetXTitle("<A>");
557 fhBkgJetArea[i]->SetYTitle("Counts");
558 outputContainer->Add(fhBkgJetArea[i]);
562 //temporary photon histograms
563 fhPhotonPtMostEne = new TH1F("PhotonPtMostEne","PhotonPtMostEne",100,0,100);
564 fhPhotonPtMostEne->SetYTitle("Counts");
565 fhPhotonPtMostEne->SetXTitle("p_{T,#gamma} (GeV/c)");
566 outputContainer->Add(fhPhotonPtMostEne);
568 // fhPhotonIndexMostEne = new TH1F("PhotonIndexMostEne","PhotonIndexMostEne",100,0,100);
569 // fhPhotonIndexMostEne->SetYTitle("Counts");
570 // fhPhotonIndexMostEne->SetXTitle("Index");
571 // outputContainer->Add(fhPhotonIndexMostEne);
573 fhPhotonAverageEnergy = new TH1F("PhotonAverageEnergy","PhotonAverageEnergy",100,0,10);
574 fhPhotonAverageEnergy->SetYTitle("Counts");
575 fhPhotonAverageEnergy->SetXTitle("p_{T,#gamma} (GeV/c)");
576 outputContainer->Add(fhPhotonAverageEnergy);
578 fhPhotonRatioAveEneToMostEne = new TH1F("PhotonRatioAveEneToMostEne","PhotonRatioAveEneToMostEne",100,0,1);
579 fhPhotonRatioAveEneToMostEne->SetYTitle("Counts");
580 fhPhotonRatioAveEneToMostEne->SetXTitle("Ratio");
581 outputContainer->Add(fhPhotonRatioAveEneToMostEne);
583 fhPhotonAverageEnergyMinus1 = new TH1F("PhotonAverageEnergyMinus1","PhotonAverageEnergyMinus1",100,0,10);
584 fhPhotonAverageEnergyMinus1->SetYTitle("Counts");
585 fhPhotonAverageEnergyMinus1->SetXTitle("p_{T,#gamma} (GeV/c)");
586 outputContainer->Add(fhPhotonAverageEnergyMinus1);
588 fhPhotonRatioAveEneMinus1ToMostEne = new TH1F("PhotonRatioAveEneMinus1ToMostEne","PhotonRatioAveEneMinus1ToMostEne",100,0,1);
589 fhPhotonRatioAveEneMinus1ToMostEne->SetYTitle("Counts");
590 fhPhotonRatioAveEneMinus1ToMostEne->SetXTitle("Ratio");
591 outputContainer->Add(fhPhotonRatioAveEneMinus1ToMostEne);
593 fhPhotonNgammaMoreAverageToNgamma = new TH1F("PhotonNgammaMoreAverageToNgamma","PhotonNgammaMoreAverageToNgamma",100,0,1);
594 fhPhotonNgammaMoreAverageToNgamma->SetYTitle("Counts");
595 fhPhotonNgammaMoreAverageToNgamma->SetXTitle("Ratio");
596 outputContainer->Add(fhPhotonNgammaMoreAverageToNgamma);
598 fhPhotonNgammaMoreAverageMinus1ToNgamma = new TH1F("PhotonNgammaMoreAverageMinus1ToNgamma","PhotonNgammaMoreAverageMinus1ToNgamma",100,0,1);
599 fhPhotonNgammaMoreAverageMinus1ToNgamma->SetYTitle("Counts");
600 fhPhotonNgammaMoreAverageMinus1ToNgamma->SetXTitle("Ratio");
601 outputContainer->Add(fhPhotonNgammaMoreAverageMinus1ToNgamma);
603 for(Int_t i=0;i<10;i++){
604 fhPhotonNgammaOverPtCut[i] = new TH1F(Form("PhotonNgammaOverPtCut%d",i),Form("PhotonNgammaOverPtCut%d",i),100,0,100);
605 fhPhotonNgammaOverPtCut[i]->SetYTitle("Counts");
606 fhPhotonNgammaOverPtCut[i]->SetXTitle("N_{#gamma} over threshold");
607 outputContainer->Add(fhPhotonNgammaOverPtCut[i]);
610 fhPhotonBkgRhoVsNtracks = new TH2F("PhotonBkgRhoVsNtracks","PhotonBkgRhoVsNtracks",200,0,2500,75,0,1.5);
611 //fhPhotonBkgRhoVsNtracks->SetXTitle("Counts");
612 fhPhotonBkgRhoVsNtracks->SetXTitle("Ntracks");
613 fhPhotonBkgRhoVsNtracks->SetYTitle("Rho");
614 outputContainer->Add(fhPhotonBkgRhoVsNtracks);
616 fhPhotonBkgRhoVsNclusters = new TH2F("PhotonBkgRhoVsNclusters","PhotonBkgRhoVsNclusters",50,0,100,75,0,1.5);
617 fhPhotonBkgRhoVsNclusters->SetXTitle("Nclusters");
618 fhPhotonBkgRhoVsNclusters->SetYTitle("Rho");
619 outputContainer->Add(fhPhotonBkgRhoVsNclusters);
621 fhPhotonBkgRhoVsCentrality = new TH2F("PhotonBkgRhoVsCentrality","PhotonBkgRhoVsCentrality",100,0,100,75,0,1.5);
622 fhPhotonBkgRhoVsCentrality->SetXTitle("Centrality");
623 fhPhotonBkgRhoVsCentrality->SetYTitle("Rho");
624 outputContainer->Add(fhPhotonBkgRhoVsCentrality);
626 fhPhotonBkgRhoVsNcells = new TH2F("PhotonBkgRhoVsNcells","PhotonBkgRhoVsNcells",100,0,200,75,0,1.5);
627 fhPhotonBkgRhoVsNcells->SetXTitle("N_{cells}");
628 fhPhotonBkgRhoVsNcells->SetYTitle("Rho");
629 outputContainer->Add(fhPhotonBkgRhoVsNcells);
631 fhPhotonPt = new TH1F("PhotonPt","PhotonPt",220,-10,100);
632 fhPhotonPt->SetXTitle("p_{T,#gamma} (GeV/c)");
633 fhPhotonPt->SetYTitle("Counts");
634 outputContainer->Add(fhPhotonPt);
636 fhPhotonPtCorrected = new TH1F("PhotonPtCorrected","PhotonPtCorrected",220,-10,100);
637 fhPhotonPtCorrected->SetXTitle("p_{T,#gamma} (GeV/c)");
638 fhPhotonPtCorrected->SetYTitle("Counts");
639 outputContainer->Add(fhPhotonPtCorrected);
641 fhPhotonPtDiff = new TH1F("PhotonPtDiff","PhotonPtDiff",50,0,10);
642 fhPhotonPtDiff->SetXTitle("p_{T,#gamma} (GeV/c)");
643 fhPhotonPtDiff->SetYTitle("Counts");
644 outputContainer->Add(fhPhotonPtDiff);
646 fhPhotonPtDiffVsNtracks = new TH2F("PhotonPtDiffVsNtracks","PhotonPtDiffVsNtracks",200,0,2500,50,0,5);
647 fhPhotonPtDiffVsNtracks->SetXTitle("N_{tracks}");
648 fhPhotonPtDiffVsNtracks->SetYTitle("<#rho^{#gamma}>*N_{cells}");
649 outputContainer->Add(fhPhotonPtDiffVsNtracks);
651 fhPhotonPtDiffVsNclusters = new TH2F("PhotonPtDiffVsNclusters","PhotonPtDiffVsNclusters",50,0,100,50,0,5);
652 fhPhotonPtDiffVsNclusters->SetXTitle("N_{clusters}");
653 fhPhotonPtDiffVsNclusters->SetYTitle("<#rho^{#gamma}>*N_{cells}");
654 outputContainer->Add(fhPhotonPtDiffVsNclusters);
656 fhPhotonPtDiffVsCentrality = new TH2F("PhotonPtDiffVsCentrality","PhotonPtDiffVsCentrality",100,0,100,50,0,5);
657 fhPhotonPtDiffVsCentrality->SetXTitle("Centrality");
658 fhPhotonPtDiffVsCentrality->SetYTitle("<#rho^{#gamma}>*N_{cells}");
659 outputContainer->Add(fhPhotonPtDiffVsCentrality);
661 fhPhotonPtDiffVsNcells = new TH2F("PhotonPtDiffVsNcells","PhotonPtDiffVsNcells",100,0,200,50,0,5);
662 fhPhotonPtDiffVsNcells->SetXTitle("N_{cells}");
663 fhPhotonPtDiffVsNcells->SetYTitle("<#rho^{#gamma}>*N_{cells}");
664 outputContainer->Add(fhPhotonPtDiffVsNcells);
667 fhPhotonPtCorrectedZoom = new TH1F("PhotonPtCorrectedZoom","PhotonPtCorrectedZoom",200,-5,5);
668 fhPhotonPtCorrectedZoom->SetXTitle("p_{T,#gamma} (GeV/c)");
669 fhPhotonPtCorrectedZoom->SetYTitle("Counts");
670 outputContainer->Add(fhPhotonPtCorrectedZoom);
672 fhPhotonSumPtInCone = new TH1F("PhotonSumPtInCone","PhotonSumPtInCone",100,0,100);
673 fhPhotonSumPtInCone->SetXTitle("#Sigma p_{T,#gamma} (GeV/c)");
674 fhPhotonSumPtInCone->SetYTitle("Counts");
675 outputContainer->Add(fhPhotonSumPtInCone);
677 fhPhotonSumPtCorrectInCone = new TH1F("PhotonSumPtCorrectInCone","PhotonSumPtCorrectInCone",100,-20,80);
678 fhPhotonSumPtCorrectInCone->SetXTitle("#Sigma p_{T,#gamma} (GeV/c)");
679 fhPhotonSumPtCorrectInCone->SetYTitle("Counts");
680 outputContainer->Add(fhPhotonSumPtCorrectInCone);
682 fhPhotonSumPtChargedInCone = new TH1F("PhotonSumPtChargedInCone","PhotonSumPtChargedInCone",100,0,100);
683 fhPhotonSumPtChargedInCone->SetXTitle("#Sigma p_{T,#gamma}^{ch} (GeV/c)");
684 fhPhotonSumPtChargedInCone->SetYTitle("Counts");
685 outputContainer->Add(fhPhotonSumPtChargedInCone);
688 //temporary jet histograms after selection
689 fhSelectedJetPhiVsEta = new TH2F("SelectedJetSelectedPhiVsEta","SelectedJetPhiVsEta",65,0,6.5,50,-1,1);
690 fhSelectedJetPhiVsEta->SetYTitle("#eta_{jet}");
691 fhSelectedJetPhiVsEta->SetXTitle("#phi_{jet}");
692 outputContainer->Add(fhSelectedJetPhiVsEta) ;
694 fhSelectedJetChBkgEnergyVsPtJet = new TH2F("SelectedJetBkgChEnergyVsPtJet","SelectedJetBkgChEnergyVsPtJet",100,0,100,90,0,90);
695 fhSelectedJetChBkgEnergyVsPtJet->SetYTitle("Jet Bkg Energy (GeV)");
696 fhSelectedJetChBkgEnergyVsPtJet->SetXTitle("p_{T,jet} (GeV/c)");
697 outputContainer->Add(fhSelectedJetChBkgEnergyVsPtJet);
699 fhSelectedJetChAreaVsPtJet = new TH2F("SelectedJetChAreaVsPtJet","SelectedJetChAreaVsPtJet",100,0,100,50,0,1);
700 fhSelectedJetChAreaVsPtJet->SetYTitle("Jet Area");
701 fhSelectedJetChAreaVsPtJet->SetXTitle("p_{T,jet} (GeV/c)");
702 outputContainer->Add(fhSelectedJetChAreaVsPtJet);
704 fhSelectedJetNjet = new TH1F("SelectedJetNjet","SelectedJetNjet",100,0,100);
705 fhSelectedJetNjet->SetYTitle("Counts");
706 fhSelectedJetNjet->SetXTitle("N_{jets} per event");
707 outputContainer->Add(fhSelectedJetNjet);
709 fhSelectedNtracks = new TH1F("SelectedNtracks","SelectedNtracks",100,0,2000);
710 fhSelectedNtracks->SetYTitle("Counts");
711 fhSelectedNtracks->SetXTitle("N_{tracks} per event");
712 outputContainer->Add(fhSelectedNtracks);
714 fhSelectedTrackPhiVsEta = new TH2F("SelectedTrackPhiVsEta","SelectedTrackPhiVsEta",65,0,6.5,50,-1,1);
715 fhSelectedTrackPhiVsEta->SetYTitle("#eta_{track}");
716 fhSelectedTrackPhiVsEta->SetXTitle("#phi_{track}");
717 outputContainer->Add(fhSelectedTrackPhiVsEta) ;
719 fhCuts2 = new TH1F("Cuts2","Cuts2",10,0.,10.);
720 fhCuts2->SetYTitle("Counts");
721 fhCuts2->SetXTitle("Cut number");
722 outputContainer->Add(fhCuts2);
724 fhSelectedPhotonNLMVsPt = new TH2F("SelectedPhotonNLMVsPt","SelectedPhotonNLMVsPt",100,0,100,10,0,10);
725 fhSelectedPhotonNLMVsPt->SetYTitle("NLM");
726 fhSelectedPhotonNLMVsPt->SetXTitle("p_{T,#gamma} (GeV/c)");
727 outputContainer->Add(fhSelectedPhotonNLMVsPt);
729 fhSelectedPhotonLambda0VsPt = new TH2F("SelectedPhotonLambda0VsPt","SelectedPhotonLambda0VsPt",100,0,100,50,0,5);
730 fhSelectedPhotonLambda0VsPt->SetYTitle("#lambda_{0}");
731 fhSelectedPhotonLambda0VsPt->SetXTitle("p_{T,#gamma} (GeV/c)");
732 outputContainer->Add(fhSelectedPhotonLambda0VsPt);
735 fhRandomPhiEta[0] = new TH2F("RandomPhiEtaRC", "RandomPhiEtaRC", 100,0,6.5,100,-1.,1.);
736 fhRandomPhiEta[1] = new TH2F("RandomPhiEtaPCG", "RandomPhiEtaPerpConePhoton",100,0,6.5,100,-1.,1.);
737 fhRandomPhiEta[2] = new TH2F("RandomPhiEtaPCJ", "RandomPhiEtaPerpConeJet", 100,0,6.5,100,-1.,1.);
738 fhRandomPhiEta[3] = new TH2F("RandomPhiEtaMP", "RandomPhiEtaMidPoint", 100,0,6.5,100,-1.,1.);
739 fhRandomPhiEta[4] = new TH2F("RandomPhiEtaTest","RandomPhiEtaTest", 100,0,6.5,100,-1.,1.);
740 for(Int_t i=0;i<5;i++){
741 fhRandomPhiEta[i]->SetXTitle("#phi");
742 fhRandomPhiEta[i]->SetYTitle("#eta");
743 outputContainer->Add(fhRandomPhiEta[i]);
746 //MC generated photons and jets information
748 fhMCPhotonCuts = new TH1F("MCPhotonCuts","MCPhotonCuts",10,0.,10.);
749 fhMCPhotonCuts->SetYTitle("Counts");
750 fhMCPhotonCuts->SetXTitle("Cut number");
751 outputContainer->Add(fhMCPhotonCuts);
753 fhMCPhotonPt = new TH1F("MCPhotonPt","MCPhotonPt",100,0.,100.);
754 fhMCPhotonPt->SetYTitle("Counts");
755 fhMCPhotonPt->SetXTitle("p_{T,#gamma}^{gen} (GeV/c)");
756 outputContainer->Add(fhMCPhotonPt);
758 fhMCPhotonEtaPhi = new TH2F("MCPhotonEtaPhi","MCPhotonEtaPhi",65,0,6.5,50,-1,1);
759 fhMCPhotonEtaPhi->SetYTitle("#eta_{#gamma}");
760 fhMCPhotonEtaPhi->SetXTitle("#phi_{#gamma}");
761 outputContainer->Add(fhMCPhotonEtaPhi) ;
763 fhMCJetOrigin = new TH1F("MCJetOrigin","MCJetOrigin",35,-10.,25.);
764 fhMCJetOrigin->SetYTitle("Counts");
765 fhMCJetOrigin->SetXTitle("PDG number");
766 outputContainer->Add(fhMCJetOrigin);
768 fhMCJetNPartVsPt = new TH2F("MCJetNPartVsPt","MCJetNPartVsPt",100,0.,100.,100,0.,100.);
769 fhMCJetNPartVsPt->SetYTitle("N_{particles}");
770 fhMCJetNPartVsPt->SetXTitle("p_{T,full-jet}^{gen} (GeV/c)");
771 outputContainer->Add(fhMCJetNPartVsPt) ;
773 fhMCJetChNPartVsPt = new TH2F("MCJetChNPartVsPt","MCJetChNPartVsPt",100,0.,100.,100,0.,100.);
774 fhMCJetChNPartVsPt->SetYTitle("N_{particles}");
775 fhMCJetChNPartVsPt->SetXTitle("p_{T,charged-jet}^{gen} (GeV/c)");
776 outputContainer->Add(fhMCJetChNPartVsPt) ;
778 fhMCJetNPart150VsPt = new TH2F("MCJetNPart150VsPt","MCJetNPart150VsPt",100,0.,100.,100,0.,100.);
779 fhMCJetNPart150VsPt->SetYTitle("N_{particles (p_{T}>150 MeV/c)}");
780 fhMCJetNPart150VsPt->SetXTitle("p_{T,full-jet}^{gen} (GeV/c)");
781 outputContainer->Add(fhMCJetNPart150VsPt) ;
783 fhMCJetChNPart150VsPt = new TH2F("MCJetChNPart150VsPt","MCJetChNPart150VsPt",100,0.,100.,100,0.,100.);
784 fhMCJetChNPart150VsPt->SetYTitle("N_{particles (p_{T}>150 MeV/c)}");
785 fhMCJetChNPart150VsPt->SetXTitle("p_{T,charged-jet}^{gen} (GeV/c)");
786 outputContainer->Add(fhMCJetChNPart150VsPt) ;
788 fhMCJetChNPart150ConeVsPt = new TH2F("MCJetChNPart150ConeVsPt","MCJetChNPart150ConeVsPt",100,0.,100.,50,0.,50.);
789 fhMCJetChNPart150ConeVsPt->SetYTitle("N_{particles (p_{T}>150 MeV/c)}");
790 fhMCJetChNPart150ConeVsPt->SetXTitle("p_{T,charged-jet,R=0.4}^{gen} (GeV/c)");
791 outputContainer->Add(fhMCJetChNPart150ConeVsPt) ;
793 fhMCJetRatioChFull = new TH1F("MCJetRatioChFull","MCJetRatioChFull",100,0.,1.);
794 fhMCJetRatioChFull->SetYTitle("Counts");
795 fhMCJetRatioChFull->SetXTitle("p_{T,charged-jet}^{gen}/p_{T,full-jet}^{gen}");
796 outputContainer->Add(fhMCJetRatioChFull);
798 fhMCJetRatioCh150Ch = new TH1F("MCJetRatioCh150Ch","MCJetRatioCh150Ch",100,0.,1.);
799 fhMCJetRatioCh150Ch->SetYTitle("Counts");
800 fhMCJetRatioCh150Ch->SetXTitle("p_{T,charged-jet,pT>150MeV/c}^{gen}/p_{T,charged-jet}^{gen}");
801 outputContainer->Add(fhMCJetRatioCh150Ch);
803 fhMCJetEtaPhi = new TH2F("MCJetEtaPhi","MCJetEtaPhi",65,0,6.5,50,-1,1);
804 fhMCJetEtaPhi->SetYTitle("#eta_{jet}");
805 fhMCJetEtaPhi->SetXTitle("#phi_{jet}");
806 outputContainer->Add(fhMCJetEtaPhi) ;
808 fhMCJetChEtaPhi = new TH2F("MCJetChEtaPhi","MCJetChEtaPhi",65,0,6.5,50,-1,1);
809 fhMCJetChEtaPhi->SetYTitle("#eta_{jet}");
810 fhMCJetChEtaPhi->SetXTitle("#phi_{jet}");
811 outputContainer->Add(fhMCJetChEtaPhi) ;
813 fhMCJet150EtaPhi = new TH2F("MCJet150EtaPhi","MCJet150EtaPhi",65,0,6.5,50,-1,1);
814 fhMCJet150EtaPhi->SetYTitle("#eta_{jet}");
815 fhMCJet150EtaPhi->SetXTitle("#phi_{jet}");
816 outputContainer->Add(fhMCJet150EtaPhi) ;
818 fhMCJetCh150EtaPhi = new TH2F("MCJetCh150EtaPhi","MCJetCh150EtaPhi",65,0,6.5,50,-1,1);
819 fhMCJetCh150EtaPhi->SetYTitle("#eta_{jet}");
820 fhMCJetCh150EtaPhi->SetXTitle("#phi_{jet}");
821 outputContainer->Add(fhMCJetCh150EtaPhi) ;
823 fhMCJetCh150ConeEtaPhi = new TH2F("MCJetCh150ConeEtaPhi","MCJetCh150ConeEtaPhi",65,0,6.5,50,-1,1);
824 fhMCJetCh150ConeEtaPhi->SetYTitle("#eta_{jet}");
825 fhMCJetCh150ConeEtaPhi->SetXTitle("#phi_{jet}");
826 outputContainer->Add(fhMCJetCh150ConeEtaPhi) ;
831 fTreeGJ=new TTree("fTreeGJ","fTreeGJ");
832 fTreeGJ->Branch("fGamPt" ,&fGamPt ,"fGamPt/D");//! fGamPt
833 fTreeGJ->Branch("fGamLambda0" ,&fGamLambda0 ,"fGamLambda0/D");
834 fTreeGJ->Branch("fGamNLM" ,&fGamNLM ,"fGamNLM/I");
835 fTreeGJ->Branch("fGamSumPtCh" ,&fGamSumPtCh ,"fGamSumPtCh/D");
836 fTreeGJ->Branch("fGamNtracks" ,&fGamNtracks ,"fGamNtracks/I");
837 fTreeGJ->Branch("fGamTime" ,&fGamTime ,"fGamTime/D");
838 fTreeGJ->Branch("fGamNcells" ,&fGamNcells ,"fGamNcells/I");
839 fTreeGJ->Branch("fGamEta" ,&fGamEta ,"fGamEta/D");
840 fTreeGJ->Branch("fGamPhi" ,&fGamPhi ,"fGamPhi/D");
841 fTreeGJ->Branch("fGamSumPtNeu",&fGamSumPtNeu ,"fGamSumPtNeu/D");
842 fTreeGJ->Branch("fGamNclusters" ,&fGamNclusters ,"fGamNclusters/I");
843 fTreeGJ->Branch("fGamAvEne" ,&fGamAvEne ,"fGamAvEne/D");
844 fTreeGJ->Branch("fJetPhi" ,&fJetPhi ,"fJetPhi/D");
845 fTreeGJ->Branch("fJetEta" ,&fJetEta ,"fJetEta/D");
846 fTreeGJ->Branch("fJetPt" ,&fJetPt ,"fJetPt/D");
847 fTreeGJ->Branch("fJetBkgChEne",&fJetBkgChEne ,"fJetBkgChEne/D");
848 fTreeGJ->Branch("fJetArea" ,&fJetArea ,"fJetArea/D");
849 fTreeGJ->Branch("fJetNtracks" ,&fJetNtracks ,"fJetNtracks/I");
850 fTreeGJ->Branch("fJetNtracks1" ,&fJetNtracks1 ,"fJetNtracks1/I");
851 fTreeGJ->Branch("fJetNtracks2" ,&fJetNtracks2 ,"fJetNtracks2/I");
852 fTreeGJ->Branch("fJetRho" ,&fJetRho ,"fJetRho/D");
853 fTreeGJ->Branch("fEventNumber",&fEventNumber ,"fEventNumber/I");
854 fTreeGJ->Branch("fNtracks" ,&fNtracks ,"fNtracks/I");
855 fTreeGJ->Branch("fZvertex" ,&fZvertex ,"fZvertex/D");
856 fTreeGJ->Branch("fCentrality" ,&fCentrality ,"fCentrality/D");
857 fTreeGJ->Branch("fIso" ,&fIso ,"fIso/O");
858 fTreeGJ->Branch("fGamRho" ,&fGamRho ,"fGamRho/D");
860 fTreeGJ->Branch("fMCGamPt" ,&fMCGamPt ,"fMCGamPt/D" );
861 fTreeGJ->Branch("fMCGamEta" ,&fMCGamEta ,"fMCGamEta/D" );
862 fTreeGJ->Branch("fMCGamPhi" ,&fMCGamPhi ,"fMCGamPhi/D" );
863 fTreeGJ->Branch("fMCPartonType" ,&fMCPartonType ,"fMCPartonType/I" );
864 fTreeGJ->Branch("fMCJetPt" ,&fMCJetPt ,"fMCJetPt/D" );
865 fTreeGJ->Branch("fMCJetChPt" ,&fMCJetChPt ,"fMCJetChPt/D" );
866 fTreeGJ->Branch("fMCJet150Pt" ,&fMCJet150Pt ,"fMCJet150Pt/D" );
867 fTreeGJ->Branch("fMCJetCh150Pt" ,&fMCJetCh150Pt ,"fMCJetCh150Pt/D" );
868 fTreeGJ->Branch("fMCJetNPart" ,&fMCJetNPart ,"fMCJetNPart/I" );
869 fTreeGJ->Branch("fMCJetChNPart" ,&fMCJetChNPart ,"fMCJetChNPart/I" );
870 fTreeGJ->Branch("fMCJet150NPart" ,&fMCJet150NPart ,"fMCJet150NPart/I" );
871 fTreeGJ->Branch("fMCJetCh150NPart" ,&fMCJetCh150NPart ,"fMCJetCh150NPart/I");
872 fTreeGJ->Branch("fMCJetEta" ,&fMCJetEta ,"fMCJetEta/D" );
873 fTreeGJ->Branch("fMCJetPhi" ,&fMCJetPhi ,"fMCJetPhi/D" );
874 fTreeGJ->Branch("fMCJetChEta" ,&fMCJetChEta ,"fMCJetChEta/D" );
875 fTreeGJ->Branch("fMCJetChPhi" ,&fMCJetChPhi ,"fMCJetChPhi/D" );
876 fTreeGJ->Branch("fMCJet150Eta" ,&fMCJet150Eta ,"fMCJet150Eta/D" );
877 fTreeGJ->Branch("fMCJet150Phi" ,&fMCJet150Phi ,"fMCJet150Phi/D" );
878 fTreeGJ->Branch("fMCJetCh150Eta" ,&fMCJetCh150Eta ,"fMCJetCh150Eta/D" );
879 fTreeGJ->Branch("fMCJetCh150Phi" ,&fMCJetCh150Phi ,"fMCJetCh150Phi/D" );
881 fTreeGJ->Branch("fMCJetCh150ConePt" ,&fMCJetCh150ConePt ,"fMCJetCh150ConePt/D" );
882 fTreeGJ->Branch("fMCJetCh150ConeNPart" ,&fMCJetCh150ConeNPart ,"fMCJetCh150ConeNPart/I");
883 fTreeGJ->Branch("fMCJetCh150ConeEta" ,&fMCJetCh150ConeEta ,"fMCJetCh150ConeEta/D" );
884 fTreeGJ->Branch("fMCJetCh150ConePhi" ,&fMCJetCh150ConePhi ,"fMCJetCh150ConePhi/D" );
886 outputContainer->Add(fTreeGJ);
889 return outputContainer;
893 //_______________________________________________________
894 void AliAnaParticleJetFinderCorrelation::InitParameters()
896 //printf("InitParameters\n");
897 //Initialize the parameters of the analysis.
898 SetInputAODName("PWG4Particle");
899 AddToHistogramsName("AnaJetFinderCorr_");
901 fDeltaPhiMinCut = 2.6 ;
902 fDeltaPhiMaxCut = 3.7 ;
906 fPtThresholdInCone = 0.5 ;
907 fUseJetRefTracks = kFALSE ;
908 fMakeCorrelationInHistoMaker = kFALSE ;
909 fSelectIsolated = kTRUE;
911 fJetMinPt = 15. ; //GeV/c
912 fJetMinPtBkgSub = -100. ;//GeV/c
913 fJetAreaFraction = 0.6 ;
914 fJetBranchName = "jets";
915 fBkgJetBranchName = "jets";
916 fGammaConeSize = 0.4;
917 fUseBackgroundSubtractionGamma = kFALSE;
919 fMostEnergetic = kFALSE;
920 fMostOpposite = kTRUE;
921 fUseHistogramJetBkg = kTRUE;
922 fUseHistogramTracks = kTRUE;
923 fUseHistogramJetTracks = kTRUE;
927 //__________________________________________________________________
928 Int_t AliAnaParticleJetFinderCorrelation::SelectJet(AliAODPWG4Particle * particle, TClonesArray *aodRecJets)
930 //Input for jets is TClonesArray *aodRecJets
931 //Returns the index of the jet that is opposite to the particle
932 //printf(" SelectJet ");
934 Double_t particlePt=particle->Pt();
935 if(fUseBackgroundSubtractionGamma) {
936 particlePt-=(fGamRho*particle->GetNCells());
938 // Int_t clusterIDtmp = particle->GetCaloLabel(0) ;
940 // AliVCluster *cluster=0;
941 // if(!(clusterIDtmp<0) ){
942 // Int_t iclustmp = -1;
943 // TObjArray* clusters = GetEMCALClusters();
944 // cluster = FindCluster(clusters,clusterIDtmp,iclustmp);
945 // nCells = cluster->GetNCells();
947 // particlePt-=(fGamRho*nCells);
950 //printf("Particle with negative or 0 pt\n");
954 Int_t njets = aodRecJets->GetEntriesFast();
955 AliAODJet * jet = 0 ;
957 Double_t dphiprev= 10000;
958 Double_t particlePhi=particle->Phi();
959 Double_t deltaPhi=-10000.;// in the range (0; 2*pi)
962 Bool_t photonOnlyOnce=kTRUE;
964 for(Int_t ijet = 0; ijet < njets ; ijet++){
965 jet = dynamic_cast<AliAODJet*>(aodRecJets->At(ijet));
968 AliInfo("Jet not in container");
971 fhCuts2->Fill(2.,1.);
973 if(jetPt<fJetMinPt) continue;
974 fhCuts2->Fill(3.,1.);
975 //put jet eta requirement here |eta_jet|<0.9-jet_cone_size
976 if(TMath::Abs(jet->Eta()) > (0.9 - fJetConeSize) ) continue;
977 fhCuts2->Fill(4.,1.);
978 if(jet->EffectiveAreaCharged()<fJetAreaFraction*TMath::Pi()*fJetConeSize*fJetConeSize) continue;
979 fhCuts2->Fill(5.,1.);
980 if(fBackgroundJetFromReader ){
981 jetPt-= (fJetRho * jet->EffectiveAreaCharged() );
984 if(jetPt<fJetMinPtBkgSub) continue;
985 fhCuts2->Fill(6.,1.);
986 //printf("jet found\n");
987 Double_t deltaPhi0pi = TMath::Abs(particle->Phi()-jet->Phi());
988 Double_t ratio = jetPt/particlePt;
990 deltaPhi = particlePhi - jet->Phi() ;
991 if ( deltaPhi0pi > TMath::Pi() ) deltaPhi0pi = 2. * TMath::Pi() - deltaPhi0pi ;
992 if(deltaPhi<0) deltaPhi +=(TMath::Pi()*2.);
994 //new histogram for Leticia x-check
995 //isolated photon + jet(s)
996 if(OnlyIsolated() && !particle->IsIsolated() &&
997 (deltaPhi > fDeltaPhiMinCut) && (deltaPhi < fDeltaPhiMaxCut) ){
998 //fill 1D photon + 2D photon+jets
1000 fhGamPtPerTrig->Fill(particlePt);
1001 photonOnlyOnce=kFALSE;
1003 fhPtGamPtJet->Fill(particlePt,jetPt);
1007 fhDeltaPtBefore ->Fill(particlePt, particlePt - jetPt);
1008 fhDeltaPhiBefore->Fill(particlePt, deltaPhi);
1009 fhDeltaEtaBefore->Fill(particlePt, particle->Eta() - jet->Eta());
1010 fhPtRatioBefore ->Fill(particlePt, jetPt/particlePt);
1011 fhPtBefore ->Fill(particlePt, jetPt);
1013 fhDeltaPhi0PiCorrectBefore->Fill(particlePt, deltaPhi0pi);//good
1015 AliDebug(5,Form("Jet %d, Ratio pT %2.3f, Delta phi %2.3f",ijet,ratio,deltaPhi));
1017 if((deltaPhi > fDeltaPhiMinCut) && (deltaPhi < fDeltaPhiMaxCut) &&
1018 (ratio > fRatioMinCut) && (ratio < fRatioMaxCut) &&
1019 (TMath::Abs(deltaPhi-TMath::Pi()) < TMath::Abs(dphiprev-TMath::Pi()) )){//In case there is more than one jet select the most opposite.
1020 dphiprev = deltaPhi;
1029 //__________________________________________________________________
1030 void AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD()
1032 //Particle-Jet Correlation Analysis, fill AODs
1033 // printf("I use MakeAnalysisFillAOD\n");
1034 //Get the event, check if there are AODs available, if not, skip this analysis
1035 AliAODEvent * event = NULL;
1037 // cout<<"GetReader()->GetOutputEvent() "<<GetReader()->GetOutputEvent()<<endl;
1038 // cout<<"GetReader()->GetDataType() "<<GetReader()->GetDataType() <<endl;
1039 // cout<<"AliCaloTrackReader::kAOD "<<AliCaloTrackReader::kAOD<<endl;
1040 // cout<<"GetReader()->GetInputEvent() "<<GetReader()->GetInputEvent()<<endl;
1042 if(GetReader()->GetOutputEvent())
1044 event = dynamic_cast<AliAODEvent*>(GetReader()->GetOutputEvent());
1046 else if(GetReader()->GetDataType() == AliCaloTrackReader::kAOD)
1048 event = dynamic_cast<AliAODEvent*>(GetReader()->GetInputEvent());
1052 AliDebug(1,"There are no jets available for this analysis");
1056 if(!GetInputAODBranch() || !event)
1058 AliFatal(Form("No input particles in AOD with name branch < %s > \n",
1059 GetInputAODName().Data()));
1060 return; // Trick coverity
1063 if(strcmp(GetInputAODBranch()->GetClass()->GetName(), "AliAODPWG4ParticleCorrelation"))
1065 AliFatal(Form("Wrong type of AOD object, change AOD class name in input AOD: It should be <AliAODPWG4ParticleCorrelation> and not <%s>",
1066 GetInputAODBranch()->GetClass()->GetName()));
1067 return; // Trick coverity
1071 // non-standard jets
1074 TClonesArray *aodRecJets = 0;
1075 //if(IsNonStandardJetFromReader()){//jet branch from reader
1076 AliDebug(3,Form("GetNonStandardJets function (from reader) is called"));
1077 aodRecJets = GetNonStandardJets();
1078 AliDebug(3,Form("aodRecJets %p",aodRecJets));
1081 if(GetDebug() > 3) event->Print();
1082 AliFatal("List of jets is null");
1085 nJets=aodRecJets->GetEntries();
1086 AliDebug(3,Form("nJets %d",nJets));
1091 //printf("Why number of jets = 0? Check what type of collision it is. If PbPb -problem.\n");
1098 AliAODJetEventBackground* aodBkgJets = 0;
1099 if(IsBackgroundJetFromReader()){//jet branch from reader
1100 AliDebug(3,"GetBackgroundJets function is called");
1101 aodBkgJets = GetBackgroundJets();
1102 AliDebug(3,Form("aodBkgJets %p",aodBkgJets));
1103 if(aodBkgJets==0x0){
1104 if(GetDebug() > 3) event->Print();
1105 AliFatal("No jet background found\n");
1106 return; // Trick coverity
1108 if(GetDebug() > 3) aodBkgJets->Print("c");
1111 Double_t rhoEvent=0.;
1112 if(aodBkgJets && IsBackgroundJetFromReader() ) {
1113 rhoEvent = aodBkgJets->GetBackground(2);//hardcoded
1118 Int_t ntrig = GetInputAODBranch()->GetEntriesFast() ;
1120 AliDebug(3,"Begin jet finder correlation analysis, fill AODs");
1121 AliDebug(3,Form("In particle branch aod entries %d\n", ntrig));
1122 AliDebug(3,Form("In standard jet branch aod entries %d\n", event->GetNJets()));
1123 AliDebug(3,Form("In non standard jet branch aod entries %d\n", nJets));
1125 //if(nJets==0) return;//to speed up
1126 // cout<<"ntrig po return "<<ntrig<<endl;
1129 //calculate average cell energy without most energetic photon
1131 Double_t medianPhotonRho=0.;
1132 //TObjArray* clusters = GetEMCALClusters();
1133 //Int_t clusterIDtmp;
1134 //Int_t iclustmp = -1;
1135 //AliVCluster *cluster=0;
1137 if(IsBackgroundSubtractionGamma()){
1139 // Find most energetic photon without background subtraction
1143 AliAODPWG4ParticleCorrelation* particlecorr =0;
1144 for(Int_t iaod = 0; iaod < ntrig ; iaod++){
1145 particlecorr = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1146 if(particlecorr->Pt() > maxPt) {
1147 maxPt = particlecorr->Pt();
1153 // calculate background energy per cell
1155 Int_t numberOfcells=0;
1157 Double_t *photonRhoArr=new Double_t[ntrig-1];
1158 Int_t photonRhoArrayIndex=0;
1159 for(Int_t iaod = 0; iaod < ntrig ; iaod++){
1160 particlecorr = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1161 if(iaod==maxIndex) continue;
1162 // clusterIDtmp = particlecorr->GetCaloLabel(0) ;
1163 // if(clusterIDtmp < 0) continue;
1164 // cluster = FindCluster(clusters,clusterIDtmp,iclustmp);
1165 // photonRhoArr[photonRhoArrayIndex]=particlecorr->Pt()/ cluster->GetNCells();
1166 // numberOfcells+=cluster->GetNCells();
1167 photonRhoArr[photonRhoArrayIndex]=particlecorr->Pt()/ particlecorr->GetNCells();
1168 numberOfcells+=particlecorr->GetNCells();
1170 photonRhoArrayIndex++;
1172 if(photonRhoArrayIndex>0) medianPhotonRho=TMath::Median(photonRhoArrayIndex,photonRhoArr);
1173 delete [] photonRhoArr;
1175 }//end of if background calculation for gamma
1176 fGamRho = medianPhotonRho;
1180 //take most energetic photon and most energetic jet and combine
1184 // most energetic photon with background subtraction
1186 Double_t mostEnePhotonPt=0.;
1187 Int_t indexMostEnePhoton=-1;
1188 AliAODPWG4ParticleCorrelation* particle =0;
1189 Double_t ptCorrect=0.;
1191 for(Int_t iaod = 0; iaod < ntrig ; iaod++){
1192 particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1193 // clusterIDtmp = particle->GetCaloLabel(0) ;
1194 // if(!(clusterIDtmp<0)){
1195 // cluster = FindCluster(clusters,clusterIDtmp,iclustmp);
1196 // nCells = cluster->GetNCells();
1198 // ptCorrect = particle->Pt() - medianPhotonRho * nCells;
1199 ptCorrect = particle->Pt() - medianPhotonRho * particle->GetNCells();
1201 if( ptCorrect > mostEnePhotonPt ){
1202 mostEnePhotonPt = ptCorrect;
1203 indexMostEnePhoton = iaod ;
1206 // printf ("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - Photon with index %d selected \n",indexMostEnePhoton);
1208 // most energetic jet with background subtraction
1210 Double_t mostEneJetPt=0.;
1211 Int_t indexMostEneJet=-1;
1212 AliAODJet * jet = 0 ;
1213 //Double_t ptCorrect=0.;
1214 for(Int_t ijet = 0; ijet < nJets ; ijet++){
1215 jet = dynamic_cast<AliAODJet*>(aodRecJets->At(ijet));
1217 if(jet->Pt()<fJetMinPt) continue;
1218 if(TMath::Abs(jet->Eta()) > (0.9 - fJetConeSize) ) continue;
1219 if(jet->EffectiveAreaCharged()<fJetAreaFraction*TMath::Pi()*fJetConeSize*fJetConeSize) continue;
1220 ptCorrect = jet->Pt() - rhoEvent * jet->EffectiveAreaCharged();
1221 if(ptCorrect > mostEneJetPt){
1222 mostEneJetPt = ptCorrect;
1223 indexMostEneJet = ijet;
1226 // printf ("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - Jet with index %d selected \n",indexMostEneJet);
1229 // assign jet to photon
1231 if(indexMostEneJet>=0 && indexMostEnePhoton>=0){
1232 particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(indexMostEnePhoton));
1233 jet = dynamic_cast<AliAODJet*>(aodRecJets-> At(indexMostEneJet));
1234 if(jet)particle->SetRefJet(jet);
1236 }//end of take most energetic photon and most ene. jet after bkg subtraction
1239 //Bool_t isJetFound=kFALSE;//new
1240 //Loop on stored AOD particles, trigger
1241 for(Int_t iaod = 0; iaod < ntrig ; iaod++){
1242 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1244 //Correlate with jets
1245 Int_t ijet = SelectJet(particle,aodRecJets);//input for jets is TClonesArray
1248 AliDebug(2,Form("Jet with index %d selected",ijet));
1249 AliAODJet *jet = dynamic_cast<AliAODJet*>(aodRecJets-> At(ijet));
1250 if(jet)particle->SetRefJet(jet);
1251 //printf("Most opposite found\n");
1254 // if(GetReader()->WriteDeltaAODToFile() && isJetFound) WriteJetsToOutputBranch(aodRecJets);
1255 }//end of take most opposite photon and jet after bkg subtraction
1257 AliDebug(1," End fill AODs \n");
1260 //__________________________________________________________________
1261 void AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms()
1263 //Particle-Jet Correlation Analysis, fill histograms
1265 AliDebug(3,"I use MakeAnalysisFillHistograms");
1266 AliDebug(3,Form("ntracks before iso %d\n",GetCTSTracks()->GetEntriesFast()));
1269 //Get the event, check if there are AODs available, if not, skip this analysis
1270 AliAODEvent * event = NULL;
1272 //printf("GetReader()->GetOutputEvent() %d\n",GetReader()->GetOutputEvent() );
1273 //printf("GetReader()->GetDataType() %d\n",GetReader()->GetDataType() );
1274 //printf("AliCaloTrackReader::kAOD %d\n",AliCaloTrackReader::kAOD );
1275 //printf("GetReader()->GetInputEvent() %d\n",GetReader()->GetInputEvent() );
1277 if(GetReader()->GetOutputEvent())
1279 event = dynamic_cast<AliAODEvent*>(GetReader()->GetOutputEvent());
1281 else if(GetReader()->GetDataType() == AliCaloTrackReader::kAOD)
1283 event = dynamic_cast<AliAODEvent*>(GetReader()->GetInputEvent());
1287 AliDebug(3,"There are no jets available for this analysis");
1291 if(!GetInputAODBranch() || !event)
1293 AliFatal(Form("No input particles in AOD with name branch < %s >",
1294 GetInputAODName().Data()));
1295 return; // Trick coverity
1299 TClonesArray *aodRecJets = 0;
1300 //if(IsNonStandardJetFromReader()){//branch read in reader from reader
1301 AliDebug(3,"GetNonStandardJets function (from reader) is called");
1302 aodRecJets = GetNonStandardJets();
1305 if(GetDebug() > 3) event->Print();
1306 AliFatal("Jets container not found\n");
1307 return; // trick coverity
1309 nJets=aodRecJets->GetEntries();
1313 // printf("Why number of jets = 0? Check what type of collision it is. If PbPb -problem.\n");
1314 GetReader()->FillInputNonStandardJets();
1315 aodRecJets = GetNonStandardJets();
1316 if(aodRecJets) nJets=aodRecJets->GetEntries();
1317 // printf("nJets = %d\n",nJets);
1324 AliAODJetEventBackground* aodBkgJets = 0;
1325 if(IsBackgroundJetFromReader()){//jet branch from reader
1326 AliDebug(3,"GetBackgroundJets function is called");
1327 aodBkgJets = GetBackgroundJets();
1328 AliDebug(3,Form("aodBkgJets %p",aodBkgJets));
1331 if(GetDebug() > 3) event->Print();
1332 AliFatal("No jet background container found");
1333 return; // trick coverity
1335 if(GetDebug() > 3) aodBkgJets->Print("c");
1339 // only background jets informations
1341 // Float_t pTback = 0;
1342 Double_t rhoEvent=0.;
1344 if(IsBackgroundJetFromReader() ) rhoEvent = aodBkgJets->GetBackground(2);
1345 if(IsHistogramJetBkg()) {
1346 fhJetRhoVsCentrality->Fill(GetEventCentrality(),rhoEvent);
1347 for(Int_t i=0;i<4;i++){
1348 fhBkgJetBackground[i]->Fill(aodBkgJets->GetBackground(i));
1349 fhBkgJetSigma[i]->Fill(aodBkgJets->GetSigma(i));
1350 fhBkgJetArea[i]->Fill(aodBkgJets->GetMeanarea(i));
1352 }//end of if fill HistogramJetBkg
1353 }//end if aodBkgJets exists
1356 //only track information
1358 Int_t nCTSTracks = GetCTSTracks()->GetEntriesFast();
1359 AliAODTrack *aodtrack;
1361 if(IsHistogramTracks()) {
1362 Double_t sumTrackPt=0;
1363 for(itrack = 0; itrack < nCTSTracks ; itrack++){
1364 aodtrack = dynamic_cast <AliAODTrack*>(GetCTSTracks()->At(itrack));
1365 if(!aodtrack) continue;
1366 fhTrackPhiVsEta->Fill(aodtrack->Phi(),aodtrack->Eta());
1367 sumTrackPt+=aodtrack->Pt();
1370 fhTrackAveTrackPt->Fill(sumTrackPt/nCTSTracks);
1371 }//end if IsHistogramTracks
1374 //only jet informations
1376 AliAODJet * jettmp = 0 ;
1377 Double_t jetPttmp = 0.;
1378 Double_t var1tmp = 0.;
1379 Double_t var2tmp = 0.;
1380 // fhJetNjet->Fill(nJets);
1381 Double_t ptMostEne=0;
1382 // Int_t indexMostEne=-1;
1383 Int_t nJetsOverThreshold[10]={nJets,0,0,0,0,0,0,0,0,0};
1385 Double_t sumJetTrackPt=0.;
1386 Int_t sumNJetTrack=0;
1387 Int_t nTracksInJet=0;
1389 for(Int_t ijet = 0; ijet < nJets ; ijet++){
1390 jettmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ijet));
1391 if(!jettmp) continue;
1392 fhJetPtBefore->Fill(jettmp->Pt());
1393 jetPttmp = jettmp->Pt() - rhoEvent * jettmp->EffectiveAreaCharged();//<<---changed here
1395 //calculate number of tracks above 1,2,3,4,5 GeV in jet
1396 AliVTrack* jettrack = 0x0 ;
1398 Int_t nTrackThrGeV[5]={0,0,0,0,0};
1399 nTracksInJet=(jettmp->GetRefTracks())->GetEntriesFast();
1400 fhJetNparticlesInJet->Fill(nTracksInJet);
1401 if(nTracksInJet==0) continue;
1402 sumNJetTrack+=nTracksInJet;
1403 for(itrack=0;itrack<nTracksInJet;itrack++){
1404 jettrack=(AliVTrack *) ((jettmp->GetRefTracks())->At(itrack));
1405 if(!jettrack) continue;
1407 fhJetDeltaEtaDeltaPhi->Fill(jettmp->Eta()-jettrack->Eta(),jettmp->Phi()-jettrack->Phi());
1408 sumJetTrackPt+=jettrack->Pt();
1409 if(IsHistogramJetTracks()){
1410 if(jettrack->Pt()>1.) nTrackThrGeV[0]++;
1411 if(jettrack->Pt()>2.) nTrackThrGeV[1]++;
1412 if(jettrack->Pt()>3.) nTrackThrGeV[2]++;
1413 if(jettrack->Pt()>4.) nTrackThrGeV[3]++;
1414 if(jettrack->Pt()>5.) nTrackThrGeV[4]++;
1415 }//end of if IsHistogramJetTracks
1416 }//end of jet track loop
1417 //printf("jetPt %f ntrks %d ntrks>1,2,3,4,5GeV in jet %d, %d, %d, %d, %d\n",jetPttmp,nTracksInJet,nTrackThrGeV[0],nTrackThrGeV[1],nTrackThrGeV[2],nTrackThrGeV[3],nTrackThrGeV[4]);
1419 for(itrack = 0; itrack < nCTSTracks ; itrack++){
1420 aodtrack = dynamic_cast <AliAODTrack*>(GetCTSTracks()->At(itrack));
1421 if(aodtrack) fhJetDeltaEtaDeltaPhiAllTracks->Fill(jettmp->Eta()-aodtrack->Eta(),jettmp->Phi()-aodtrack->Phi());
1425 if(IsHistogramJetTracks()){
1426 fhJetNtracksInJetAboveThr[0]->Fill(jetPttmp,nTracksInJet);//all jets
1428 for(itrk=0;itrk<5;itrk++) {
1429 fhJetNtracksInJetAboveThr[itrk+1]->Fill(jetPttmp,nTrackThrGeV[itrk]);//all jets
1430 fhJetRatioNTrkAboveToNTrk[itrk]->Fill(jetPttmp,(Double_t)nTrackThrGeV[itrk]/(Double_t)nTracksInJet);//all jets
1432 if(ijet==0){//most ene jet
1433 for(itrk=0;itrk<5;itrk++)
1434 fhJetNtrackRatioMostEne[itrk]->Fill(jetPttmp,(Double_t)nTrackThrGeV[itrk]/(Double_t)nTracksInJet);
1436 if(jetPttmp>5){//jet with pt>5GeV/c
1437 for(itrk=0;itrk<5;itrk++)
1438 fhJetNtrackRatioJet5GeV[itrk]->Fill(jetPttmp,(Double_t)nTrackThrGeV[itrk]/(Double_t)nTracksInJet);
1440 if(nTrackThrGeV[4]>0){//jet with leading particle pt>5GeV/c
1441 for(itrk=0;itrk<5;itrk++)
1442 fhJetNtrackRatioLead5GeV[itrk]->Fill(jetPttmp,(Double_t)nTrackThrGeV[itrk]/(Double_t)nTracksInJet);
1444 }//end of if IsHistogramJetTracks
1447 Double_t effectiveChargedBgEnergy=(IsBackgroundJetFromReader()?rhoEvent * jettmp->EffectiveAreaCharged():jettmp->ChargedBgEnergy());
1450 fhJetChBkgEnergyVsArea->Fill(effectiveChargedBgEnergy,jettmp->EffectiveAreaCharged());
1451 //if(jettmp->EffectiveAreaCharged()>0)
1452 fhJetRhoVsPt->Fill(jetPttmp,jettmp->ChargedBgEnergy()*jettmp->EffectiveAreaCharged());
1454 if(jetPttmp>ptMostEne) {
1455 ptMostEne = jetPttmp;
1456 //indexMostEne=ijet;
1458 if(jettmp->Pt()>=fJetMinPt)
1459 fhJetPtBeforeCut->Fill(jetPttmp);
1461 fhJetPt->Fill(jetPttmp);
1462 fhJetChBkgEnergyVsPt->Fill(jetPttmp,effectiveChargedBgEnergy);
1463 fhJetChAreaVsPt->Fill(jetPttmp,jettmp->EffectiveAreaCharged());
1464 AliDebug(5,Form("ChargedBgEnergy %f EffectiveAreaCharged %f\n", jettmp->ChargedBgEnergy(),jettmp->EffectiveAreaCharged()));
1465 for(iCounter=1;iCounter<10;iCounter++)
1467 if(jetPttmp>iCounter) nJetsOverThreshold[iCounter]++;
1470 var1tmp = jettmp->Phi();
1471 var2tmp = jettmp->Eta();
1472 fhJetPhi->Fill(var1tmp);
1473 fhJetEta->Fill(var2tmp);
1474 fhJetPhiVsEta->Fill(var1tmp,var2tmp);
1475 fhJetEtaVsPt->Fill(jetPttmp,var2tmp);
1476 fhJetEtaVsNpartInJet->Fill(var2tmp,nTracksInJet);
1478 fhJetEtaVsNpartInJetBkg->Fill(var2tmp,nTracksInJet);
1481 if(IsHistogramJetTracks()){
1483 //printf("average track pt %f\n",sumJetTrackPt/sumNJetTrack);
1484 fhJetAveTrackPt->Fill(sumJetTrackPt/sumNJetTrack);
1486 }//end of if IsHistogramJetTracks
1489 fhJetPtMostEne->Fill(ptMostEne);
1490 for(iCounter=0;iCounter<10;iCounter++){
1491 fhJetNjetOverPtCut[iCounter]->Fill(nJetsOverThreshold[iCounter]);
1492 nJetsOverThreshold[iCounter]=0;
1495 //end of only jet part
1500 Int_t ntrig = GetInputAODBranch()->GetEntriesFast() ;
1502 AliDebug(1,"Begin jet finder correlation analysis, fill histograms");
1503 AliDebug(1,Form("In particle branch aod entries %d\n", ntrig));
1504 AliDebug(1,Form("In jet output branch aod entries %d\n", event->GetNJets()));
1506 fhNjetsNgammas->Fill(nJets,ntrig);
1508 //if(nJets==0) return;//to speed up
1509 //printf("ntrig %d, njets %d\n",ntrig,nJets);
1512 //Fill only temporary photon histograms
1518 nJetsOverThreshold[0]=ntrig;
1519 for(Int_t iaod = 0; iaod < ntrig ; iaod++){
1520 AliAODPWG4ParticleCorrelation* particlecorr = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1521 tmpPt = particlecorr->Pt();
1526 for(iCounter=1;iCounter<10;iCounter++){
1527 if(tmpPt>iCounter) nJetsOverThreshold[iCounter]++;
1531 for(iCounter=0;iCounter<10;iCounter++){
1532 fhPhotonNgammaOverPtCut[iCounter]->Fill(nJetsOverThreshold[iCounter]);
1533 // nJetsOverThreshold[iCounter]=0;
1537 //TObjArray* clusters = GetEMCALClusters();
1538 //printf("calculate median bkg energy for photons ");
1539 Double_t medianPhotonRho=0.;
1541 //Int_t iclustmp = -1;
1542 Int_t numberOfcells=0;
1543 //AliVCluster *cluster = 0;
1545 Double_t *photonRhoArr=new Double_t[ntrig-1];
1546 fhPhotonPtMostEne->Fill(maxPt);
1547 // fhPhotonIndexMostEne->Fill(indexMaxPt);
1548 fhPhotonAverageEnergy->Fill(sumPt/ntrig);
1549 fhPhotonRatioAveEneToMostEne->Fill(sumPt/(ntrig*maxPt));
1550 fhPhotonAverageEnergyMinus1->Fill((sumPt-maxPt)/(ntrig-1));
1551 fGamAvEne=(sumPt-maxPt)/(ntrig-1);
1552 fhPhotonRatioAveEneMinus1ToMostEne->Fill((sumPt-maxPt)/((ntrig-1)*maxPt));
1554 Int_t counterGamma=0;
1555 Int_t counterGammaMinus1=0;
1557 Int_t photonRhoArrayIndex=0;
1558 //TObjArray* clusterstmp = GetEMCALClusters();
1559 for(Int_t iaod = 0; iaod < ntrig ; iaod++){
1560 AliAODPWG4ParticleCorrelation* particlecorr = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1561 if( particlecorr->Pt() > sumPt/ntrig ) counterGamma++;
1562 if( particlecorr->Pt() > (sumPt-maxPt)/(ntrig-1) ) counterGammaMinus1++;
1564 if(iaod==maxIndex) continue;
1565 // clusterID = particlecorr->GetCaloLabel(0) ;
1566 // if(clusterID < 0) continue;
1567 // cluster = FindCluster(clusters,clusterID,iclustmp);
1568 // photonRhoArr[photonRhoArrayIndex]=particlecorr->Pt()/ cluster->GetNCells();
1569 // numberOfcells+=cluster->GetNCells();
1570 photonRhoArr[photonRhoArrayIndex]=particlecorr->Pt()/ particlecorr->GetNCells();
1571 numberOfcells+=particlecorr->GetNCells();
1572 photonRhoArrayIndex++;
1574 if(photonRhoArrayIndex>0) medianPhotonRho=TMath::Median(photonRhoArrayIndex,photonRhoArr);
1575 delete [] photonRhoArr;
1576 fhPhotonNgammaMoreAverageToNgamma->Fill((Double_t)counterGamma / (Double_t)ntrig);
1577 fhPhotonNgammaMoreAverageMinus1ToNgamma->Fill((Double_t)counterGammaMinus1 / (Double_t)ntrig);
1579 //printf("median = %f\n",medianPhotonRho);
1580 fhPhotonBkgRhoVsNtracks->Fill(GetCTSTracks()->GetEntriesFast(),medianPhotonRho);
1581 fhPhotonBkgRhoVsNclusters->Fill(ntrig,medianPhotonRho);
1582 fhPhotonBkgRhoVsCentrality->Fill(GetEventCentrality(),medianPhotonRho);
1583 fhPhotonBkgRhoVsNcells->Fill(numberOfcells,medianPhotonRho);
1586 //AliVCluster *cluster2 = 0;
1587 Double_t photon2Corrected=0;
1588 Double_t sumPtTmp=0.;
1589 Double_t sumPtCorrectTmp=0.;
1590 AliVTrack* trackTmp = 0x0 ;
1593 for(Int_t iaod = 0; iaod < ntrig ; iaod++){
1594 AliAODPWG4ParticleCorrelation* particlecorr = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1595 // clusterID = particlecorr->GetCaloLabel(0) ;
1596 // if(clusterID < 0) continue;
1597 // cluster = FindCluster(clusters,clusterID,iclustmp);
1598 // Int_t ncells = cluster->GetNCells();
1599 Int_t ncells = particlecorr->GetNCells();
1600 fhPhotonPt->Fill(particlecorr->Pt());
1601 fhPhotonPtCorrected->Fill(particlecorr->Pt() - ncells * medianPhotonRho);
1602 fhPhotonPtDiff->Fill(ncells * medianPhotonRho);
1603 fhPhotonPtDiffVsCentrality->Fill(GetEventCentrality(),ncells * medianPhotonRho);
1604 fhPhotonPtDiffVsNcells->Fill(numberOfcells,ncells * medianPhotonRho);
1605 fhPhotonPtDiffVsNtracks->Fill(GetCTSTracks()->GetEntriesFast(),ncells * medianPhotonRho);
1606 fhPhotonPtDiffVsNclusters->Fill(ntrig,ncells * medianPhotonRho);
1607 fhPhotonPtCorrectedZoom->Fill(particlecorr->Pt() - ncells * medianPhotonRho);
1609 //test: sum_pt in the cone 0.3 for each photon
1610 //should be: random fake gamma from MB
1611 //is: each gamma for EMCEGA
1615 for(Int_t iaod2 = 0; iaod2 < ntrig ; iaod2++){
1616 if(iaod==iaod2) continue;
1617 AliAODPWG4ParticleCorrelation* particlecorr2 = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod2));
1618 // clusterID = particlecorr2->GetCaloLabel(0) ;
1619 // if(clusterID < 0) continue;
1620 // cluster2 = FindCluster(clusters,clusterID,iclustmp);
1621 // photon2Corrected = particlecorr2->Pt() - cluster2->GetNCells() * medianPhotonRho;
1622 photon2Corrected = particlecorr2->Pt() - particlecorr2->GetNCells() * medianPhotonRho;
1624 //if(Pt()<0.5) continue; //<<hardcoded here //FIXME
1625 if( TMath::Sqrt((particlecorr->Eta()-particlecorr2->Eta())*(particlecorr->Eta()-particlecorr2->Eta()) +
1626 (particlecorr->Phi()-particlecorr2->Phi())*(particlecorr->Phi()-particlecorr2->Phi()) )<fGammaConeSize ){//if(/*cone is correct*/){
1627 sumPtTmp+= particlecorr2->Pt();
1628 sumPtCorrectTmp+=photon2Corrected;
1631 fhPhotonSumPtInCone->Fill(sumPtTmp);
1632 fhPhotonSumPtCorrectInCone->Fill(sumPtCorrectTmp);
1634 //test: sum_pt in the cone 0.3 for each track
1635 //should be: random fake gamma from MB
1636 //is: each gamma for EMCEGA
1638 for(Int_t ipr = 0;ipr < GetCTSTracks()->GetEntriesFast() ; ipr ++){
1639 trackTmp = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
1640 p3Tmp.SetXYZ(trackTmp->Px(),trackTmp->Py(),trackTmp->Pz());
1641 if( TMath::Sqrt((particlecorr->Eta()-p3Tmp.Eta())*(particlecorr->Eta()-p3Tmp.Eta()) +
1642 (particlecorr->Phi()-p3Tmp.Phi())*(particlecorr->Phi()-p3Tmp.Phi()) )<fGammaConeSize ){
1643 sumPtTmp+=p3Tmp.Pt();
1645 }//end of loop over tracks
1646 fhPhotonSumPtChargedInCone->Fill(sumPtTmp);
1649 //End of Fill temporary photon histograms
1652 // Apply background subtraction for photons
1654 fGamRho = medianPhotonRho;
1655 if(!IsBackgroundSubtractionGamma()) medianPhotonRho=0;
1659 //Get vertex for cluster momentum calculation <<----new here
1661 Double_t vertex[] = {0,0,0} ; //vertex ;
1662 if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
1663 GetReader()->GetVertex(vertex);
1664 fZvertex = vertex[2];
1667 //Loop on stored AOD particles, trigger
1669 for(Int_t iaod = 0; iaod < ntrig ; iaod++){
1670 AliAODPWG4ParticleCorrelation* particlecorr = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1672 fhCuts2->Fill(0.,(Double_t)nJets);
1673 AliDebug(1,Form("OnlyIsolated %d !particlecorr->IsIsolated() %d \n",OnlyIsolated(), !particlecorr->IsIsolated()));
1675 if(OnlyIsolated() && !particlecorr->IsIsolated()) continue;
1677 fhCuts2->Fill(1.,nJets);
1683 //Recover the jet correlated, found previously.
1684 AliAODJet * jet = particlecorr->GetJet();
1685 //If correlation not made before, do it now.
1686 if(fMakeCorrelationInHistoMaker){
1687 //Correlate with jets
1688 Int_t ijet = SelectJet(particlecorr,aodRecJets);//input for jets is TClonesArray
1691 AliDebug(1,Form("Jet with index %d selected \n",ijet));
1692 //jet = event->GetJet(ijet);
1693 jet = dynamic_cast<AliAODJet*>(aodRecJets-> At(ijet));
1695 if(jet) particlecorr->SetRefJet(jet);
1700 if (!jet) continue ;
1702 fhCuts2->Fill(7.,1.);
1704 //check MC genereted information
1705 if(fMCStudies) FindMCgenInfo();
1708 //Fill Correlation Histograms
1710 // clusterID = particlecorr->GetCaloLabel(0) ;
1711 // if(!(clusterID<0)){
1712 // cluster = FindCluster(clusters,clusterID,iclustmp);
1713 // //fill tree variables
1714 // fGamNcells = cluster->GetNCells();
1717 fGamNcells = particlecorr->GetNCells();
1719 Double_t ptTrig = particlecorr->Pt() - medianPhotonRho * fGamNcells;//<<---changed here
1720 Double_t ptJet = jet->Pt() - rhoEvent * jet->EffectiveAreaCharged();//<<---changed here
1721 Double_t phiTrig = particlecorr->Phi();
1722 Double_t phiJet = jet->Phi();
1723 Double_t etaTrig = particlecorr->Eta();
1724 Double_t etaJet = jet->Eta();
1725 Double_t deltaPhi=phiTrig-phiJet;
1726 if(deltaPhi<0)deltaPhi+=(TMath::Pi()*2.);
1727 //printf("pT trigger %2.3f, pT jet %2.3f, Delta phi %2.3f, Delta eta %2.3f, Delta pT %2.3f, ratio %2.3f \n",
1728 // ptTrig,ptJet, phiJet-phiTrig, etaJet-etaTrig, ptTrig-ptJet, ptJet/ptTrig);
1729 fhDeltaPt ->Fill(ptTrig, ptTrig-ptJet);
1730 // fhDeltaPhi->Fill(ptTrig, phiTrig-phiJet);//need to be shifted by 2pi
1732 fhDeltaPhiCorrect->Fill(ptTrig, deltaPhi);//correct
1734 Double_t deltaPhiCorrect = TMath::Abs( particlecorr->Phi() - jet->Phi() );
1735 if ( deltaPhiCorrect > TMath::Pi() ) deltaPhiCorrect = 2. * TMath::Pi() - deltaPhiCorrect ;
1736 fhDeltaPhi0PiCorrect->Fill(ptTrig, deltaPhiCorrect);
1738 fhDeltaEta->Fill(ptTrig, etaTrig-etaJet);
1739 fhPtRatio ->Fill(ptTrig, ptJet/ptTrig);
1740 fhPt ->Fill(ptTrig, ptJet);
1742 fhSelectedJetPhiVsEta->Fill(phiJet,etaJet);
1743 fhSelectedJetChBkgEnergyVsPtJet->Fill(ptJet,(IsBackgroundJetFromReader()?rhoEvent * jet->EffectiveAreaCharged():jet->ChargedBgEnergy()) );
1744 fhSelectedJetChAreaVsPtJet->Fill(ptJet,jet->EffectiveAreaCharged());
1745 fhSelectedJetNjet->Fill(nJets);
1746 fhSelectedNtracks->Fill(GetCTSTracks()->GetEntriesFast());//to be checked
1747 fhSelectedPhotonNLMVsPt->Fill(ptTrig,particlecorr->GetNLM());
1749 // if(clusterID < 0 ){
1750 // fhSelectedPhotonLambda0VsPt->Fill(ptTrig,-1);
1751 // //fill tree variables
1752 // fGamLambda0 = -1;
1760 TObjArray* clusters = GetEMCALClusters();
1761 //cluster = FindCluster(clusters,clusterID,iclustmp);
1762 Double_t lambda0=particlecorr->GetM02();
1763 fhSelectedPhotonLambda0VsPt->Fill(ptTrig,lambda0);
1764 //fill tree variables
1765 fGamLambda0 = lambda0;
1766 fGamTime = particlecorr->GetTime();
1767 //fGamNcells = cluster->GetNCells();
1772 //Double_t scalarProduct=0;
1773 //Double_t vectorLength=particlecorr->P();
1774 for(Int_t icalo=0; icalo <clusters->GetEntriesFast(); icalo++){
1775 AliVCluster* calo = (AliVCluster *) clusters->At(icalo);
1776 //if(clusterID==calo->GetID()) continue;//the same cluster as trigger
1777 calo->GetMomentum(fMomentum,vertex) ;//Assume that come from vertex in straight line
1778 //printf("min pt %f\n",GetMinPt());
1779 if(fMomentum.Pt()<GetMinPt()) continue; //<<hardcoded here //FIXME 0.5 check if correct
1780 p3Tmp.SetXYZ(fMomentum.Px(),fMomentum.Py(),fMomentum.Pz());
1781 //calculate sum pt in the cone
1782 if( TMath::Sqrt((particlecorr->Eta()-p3Tmp.Eta())*(particlecorr->Eta()-p3Tmp.Eta()) +
1783 (particlecorr->Phi()-p3Tmp.Phi())*(particlecorr->Phi()-p3Tmp.Phi()) )<fGammaConeSize ){
1784 //scalarProduct = particlecorr->Px()*fMomentum.Px() + particlecorr->Py()*fMomentum.Py() + particlecorr->Pz()*fMomentum.Pz();
1785 //scalarProduct/=fMomentum.P();
1786 //scalarProduct/=vectorLength;
1787 //if(scalarProduct>TMath::Cos(0.3)) {//FIXME photon radius
1788 fGamSumPtNeu+=fMomentum.Pt();
1794 //sum pt of charged tracks in the gamma isolation cone
1798 for(itrack = 0; itrack < nCTSTracks ; itrack++){
1799 aodtrack = dynamic_cast <AliAODTrack*>(GetCTSTracks()->At(itrack));
1800 if(!aodtrack) continue;
1801 fhSelectedTrackPhiVsEta->Fill(aodtrack->Phi(),aodtrack->Eta());//fill histogram here
1802 // if(aodtrack->Pt()<0.15) continue;//hardcoded
1803 if(aodtrack->Pt()<fPtThresholdInCone) continue;
1804 if(!aodtrack->IsHybridGlobalConstrainedGlobal()) continue;
1805 if(TMath::Sqrt((particlecorr->Phi() - aodtrack->Phi())*(particlecorr->Phi() - aodtrack->Phi()) +
1806 (particlecorr->Eta() - aodtrack->Eta())*(particlecorr->Eta() - aodtrack->Eta()) ) <fGammaConeSize ) {
1807 fGamSumPtCh+=aodtrack->Pt();
1813 // for(Int_t itrack = 0; itrack < nCTSTracks ; itrack++){
1814 // aodtrack = dynamic_cast <AliAODTrack*>(GetCTSTracks()->At(itrack));
1815 // fhSelectedTrackPhiVsEta->Fill(aodtrack->Phi(),aodtrack->Eta());
1819 // Background Fragmentation function
1821 TVector3 gammaVector,jetVector;
1822 gammaVector.SetXYZ(particlecorr->Px(),particlecorr->Py(),particlecorr->Pz());
1823 jetVector.SetXYZ(jet->Px(),jet->Py(),jet->Pz());
1824 CalculateBkg(gammaVector,jetVector,vertex,1);//jet perp
1825 CalculateBkg(gammaVector,jetVector,vertex,2);//RC
1826 CalculateBkg(gammaVector,jetVector,vertex,3);//mid point
1827 CalculateBkg(gammaVector,jetVector,vertex,4);//gamma perp
1828 //CalculateBkg(gammaVector,jetVector,vertex,5);/test
1829 Double_t angleJetGam = gammaVector.Angle(jetVector);
1830 //printf("angleJetGam %f\n",angleJetGam*180/TMath::Pi());
1833 // Fragmentation function
1835 Float_t rad = 0, pt = 0, eta = 0, phi = 0;
1836 Int_t npartcone = 0;
1841 AliDebug(1,Form("fUseJetRefTracks %d" ,fUseJetRefTracks ));
1842 AliDebug(1,Form("jet->GetRefTracks() %p",jet->GetRefTracks()));
1843 AliDebug(1,Form("GetCTSTracks() %p" ,GetCTSTracks() ));
1845 if(!fUseJetRefTracks)
1846 ntracks =GetCTSTracks()->GetEntriesFast();
1847 else //If you want to use jet tracks from JETAN
1848 ntracks = (jet->GetRefTracks())->GetEntriesFast();
1850 AliDebug(3,Form("ntracks %d\n",ntracks));
1851 AliVTrack* track = 0x0 ;
1852 for(Int_t ipr = 0;ipr < ntracks ; ipr ++ ){
1853 if(!fUseJetRefTracks)
1854 track = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
1855 else //If you want to use jet tracks from JETAN
1856 track = (AliVTrack *) ((jet->GetRefTracks())->At(ipr));
1858 p3.SetXYZ(track->Px(),track->Py(),track->Pz());
1862 if(phi < 0) phi+=TMath::TwoPi();
1864 //Check if there is any particle inside cone with pt larger than fPtThreshold
1865 rad = TMath::Sqrt((eta-etaJet)*(eta-etaJet)+ (phi-phiJet)*(phi-phiJet));
1866 if(rad < fConeSize && pt > fPtThresholdInCone){
1867 //printf("charged in jet cone pt %f, phi %f, eta %f, R %f \n",pt,phi,eta,rad);
1869 fhFFz ->Fill(ptTrig, pt/ptTrig);
1870 fhFFxi->Fill(ptTrig, TMath::Log(ptTrig/pt));
1871 fhFFpt->Fill(ptTrig, pt);
1873 //according to jet axis
1874 fhJetFFz ->Fill(ptJet, pt/ptJet);
1875 fhJetFFxi->Fill(ptJet, TMath::Log(ptJet/pt));
1876 fhJetFFpt->Fill(ptJet, pt);
1879 if(TMath::Cos(angleJetGam)<0 && ptJet!=0 && pt!=0 ){
1880 fhJetFFzCor ->Fill(ptJet, -pt*TMath::Cos(angleJetGam)/ptJet);
1881 fhJetFFxiCor->Fill(ptJet, TMath::Log(ptJet/(-pt*TMath::Cos(angleJetGam))));
1885 fhNTracksInCone->Fill(ptTrig, npartcone);
1886 //fill tree here for each photon-jet (isolation required usually)
1889 //fGamLambda0 = ;//filled earlier
1890 fGamNLM = particlecorr->GetNLM();
1891 //fGamSumPtCh = ;//filled earlier
1892 //fGamTime = particlecorr->GetTOF();//filled earlier
1893 //fGamNcells = particlecorr->GetNCells();//filled earlier
1896 //fGamSumPtNeu = ;//filled earlier
1897 //fGamNtracks = ;//filled earlier
1898 //fGamNclusters= ;//filled earlier
1899 //fGamAvEne = ;//filled earlier
1903 fJetBkgChEne = (IsBackgroundJetFromReader()?rhoEvent * jet->EffectiveAreaCharged():jet->ChargedBgEnergy());
1904 fJetArea = jet->EffectiveAreaCharged();
1905 fJetNtracks = (jet->GetRefTracks())->GetEntriesFast();
1907 fNtracks = GetCTSTracks()->GetEntriesFast();
1908 fCentrality = GetEventCentrality();
1909 fIso = particlecorr->IsIsolated();
1913 for(itrack=0;itrack < fJetNtracks;itrack++){
1914 track = (AliVTrack *) ((jet->GetRefTracks())->At(itrack));
1915 if(track->Pt()>1.) nTrk1GeV++;
1916 if(track->Pt()>2.) nTrk2GeV++;
1919 fJetNtracks1 = nTrk1GeV;
1920 fJetNtracks2 = nTrk2GeV;
1922 if(fSaveGJTree) fTreeGJ->Fill();
1923 }//AOD trigger particle loop
1924 AliDebug(1,"End fill histograms");
1928 //__________________________________________________________________
1929 void AliAnaParticleJetFinderCorrelation::Print(const Option_t * opt) const
1932 //Print some relevant parameters set for the analysis
1936 printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
1937 AliAnaCaloTrackCorrBaseClass::Print(" ");
1939 printf("Phi trigger-jet < %3.2f\n", fDeltaPhiMaxCut) ;
1940 printf("Phi trigger-jet > %3.2f\n", fDeltaPhiMinCut) ;
1941 printf("pT Ratio trigger/jet < %3.2f\n", fRatioMaxCut) ;
1942 printf("pT Ratio trigger/jet > %3.2f\n", fRatioMinCut) ;
1943 printf("fConeSize = %3.2f\n", fConeSize) ;
1944 printf("fPtThresholdInCone = %3.2f\n", fPtThresholdInCone) ;
1945 printf("fUseJetRefTracks = %d\n", fUseJetRefTracks) ;
1946 printf("fMakeCorrelationInHistoMaker = %d\n", fMakeCorrelationInHistoMaker) ;
1947 printf("Isolated Trigger? %d\n", fSelectIsolated) ;
1948 printf("Reconstructed jet cone size = %3.2f\n", fJetConeSize) ;
1949 printf("Reconstructed jet minimum pt before background subtraction = %3.2f\n", fJetMinPt) ;
1950 printf("Reconstructed jet minimum pt after background subtraction = %3.2f\n", fJetMinPtBkgSub) ;
1951 printf("Reconstructed jet minimum area fraction = %3.2f\n", fJetAreaFraction) ;
1953 //if(!fNonStandardJetFromReader){
1954 printf("fJetBranchName = %s\n", fJetBranchName.Data()) ;
1956 if(!fBackgroundJetFromReader){
1957 printf("fBkgJetBranchName = %s\n", fBkgJetBranchName.Data()) ;
1960 printf("Isolation cone size = %3.2f\n", fGammaConeSize) ;
1961 printf("fUseBackgroundSubtractionGamma = %d\n",fUseBackgroundSubtractionGamma);
1962 printf("fSaveGJTree = %d\n",fSaveGJTree);
1963 printf("fMostEnergetic = %d\n",fMostEnergetic);
1964 printf("fMostOpposite = %d\n",fMostOpposite);
1966 printf("fUseHistogramJetBkg = %d\n",fUseHistogramJetBkg);
1967 printf("fUseHistogramTracks = %d\n",fUseHistogramTracks);
1968 printf("fUseHistogramJetTracks = %d\n",fUseHistogramJetTracks);
1969 printf("fMCStudies = %d\n",fMCStudies);
1973 //__________________________________________________________________
1974 void AliAnaParticleJetFinderCorrelation::CalculateBkg(TVector3 gamma, TVector3 jet,Double_t vertex[3],Int_t type=2){
1976 // calculate background for fragmentation function and fill histograms
1977 // 1. 90 degrees from jet axis in random place = perpendicular cone
1978 // 2. Random cone not belonging to jet cone nor photon cone
1979 // 3. In the middle point from jet and photon momentum vectors
1980 // 4. 90 degrees from photon direction in random place = perpendicular cone 2
1983 // implementation of 2 works, 1 and 4 works
1985 Double_t gammaPt = gamma.Pt();
1986 Double_t gammaEta = gamma.Eta();
1987 Double_t gammaPhi = gamma.Phi();
1988 Double_t jetEta = jet.Eta();
1989 Double_t jetPhi = jet.Phi();
1991 //refference direction of background
1992 Double_t refEta=0.,refPhi=0.;
1993 Double_t rad = 0,rad2 = 0.;
1994 if(type==1){//perpendicular to jet axis
1995 //printf("vertex: %f %f %f \n",vertex[0],vertex[1],vertex[2]);
2002 //Z axis vector: [jet.Px(),jet.Py(),jet.Pz()]
2003 Double_t jx=jet.Px();
2004 Double_t jy=jet.Py();
2005 Double_t jz=jet.Pz();
2006 //if(jz==0)printf("problem\n");
2008 Double_t Xx=1.0-vertex[0];
2009 Double_t Xy=-1.0*vertex[1];
2010 Double_t Xz=jx/jz*(vertex[0]-1.)+vertex[1]*jy/jz;
2012 Double_t Yx=jy*Xz-jz*Xy;
2013 Double_t Yy=jz*Xx-jx*Xz;
2014 Double_t Yz=jx*Xy-jy*Xx;
2016 Double_t det = Xx*Yy*jz + Xy*Yz*jx + Xz*Yx*jy - Xx*Yz*jy - Xy*Yx*jz - Xz*Yy*jx;
2017 if(det==0)AliWarning("problem det==0\n");
2022 // Double_t tmpScalar = jx*Xx+jy*Xy+jz*Xz;
2023 // printf("scalar jet.P o X: %f\n",tmpScalar);
2024 // tmpScalar = jet.Px()*Yx+jet.Py()*Yy+jet.Pz()*Yz;
2025 // printf("scalar jet.P o Y: %f\n",tmpScalar);
2026 // tmpScalar = Xx*Yx+Xy*Yy+Xz*Yz;
2027 // printf("scalar X o Y: %f\n",tmpScalar);
2032 refPhi=fGenerator->Rndm()*TMath::Pi()*2.;
2033 //refPhi=fGenerator->Uniform(-1,1)*TMath::Pi();
2034 xVar=TMath::Cos(refPhi);
2035 yVar=TMath::Sin(refPhi);
2036 //yVar=TMath::Cos(-TMath::Pi()/2.+refPhi);
2037 //zVar=0 in new surface frame
2038 detX = xVar*Yy*jz + Xz*yVar*jy - xVar*Yz*jy - Xy*yVar*jz;
2039 detY = Xx*yVar*jz + xVar*Yz*jx - xVar*Yx*jz - Xz*yVar*jx;
2040 detZ = Xy*yVar*jx + xVar*Yx*jy - Xx*yVar*jy - xVar*Yy*jx;
2046 perp.SetXYZ(newX,newY,newZ);
2047 refEta = perp.Eta();
2048 refPhi = perp.Phi();//output in <-pi, pi> range
2049 if(refPhi<0)refPhi+=2*TMath::Pi();
2050 rad = TMath::Sqrt((gammaEta-refEta)*(gammaEta-refEta) + (gammaPhi-refPhi)*(gammaPhi-refPhi));
2051 rad2 = TMath::Sqrt((jetEta-refEta)*(jetEta-refEta) + (jetPhi-refPhi)*(jetPhi-refPhi));
2052 //printf("refEta,refPhi,rad,rad2: %f %f %f %f\n",refEta,refPhi,rad,rad2);
2053 } while (rad<fJetConeSize+fGammaConeSize || rad2<2.*fJetConeSize || TMath::Abs(refEta)>0.9-fJetConeSize);
2054 fhRandomPhiEta[2]->Fill(refPhi,refEta);
2057 else if(type==2){//random cone
2060 refPhi=fGenerator->Rndm()*TMath::Pi()*2.;
2061 refEta=fGenerator->Uniform(-(0.9-fJetConeSize),0.9-fJetConeSize);
2062 rad = TMath::Sqrt((gammaEta-refEta)*(gammaEta-refEta) + (gammaPhi-refPhi)*(gammaPhi-refPhi));
2063 rad2 = TMath::Sqrt((jetEta-refEta)*(jetEta-refEta) + (jetPhi-refPhi)*(jetPhi-refPhi));
2064 //check if reference is not within jet cone or gamma cone +0.4
2065 //example: FF fConeSize=0.4, fJetConeSize=0.4, fIsoGammaConeSize=0.3
2066 } while (rad<fJetConeSize+fGammaConeSize || rad2<2.*fJetConeSize);
2067 //photon:0.7=0.4+0.3; jets:0.8=0.4 +0.4 //rad<fConeSize+fJetConeSize rad2<fConeSize+0.3
2068 fhRandomPhiEta[0]->Fill(refPhi,refEta);
2070 else if(type==4){//perpendicular to photon axis
2076 //Z axis vector: [jet.Px(),jet.Py(),jet.Pz()]
2077 Double_t jx=gamma.Px();
2078 Double_t jy=gamma.Py();
2079 Double_t jz=gamma.Pz();
2080 //if(jz==0)printf("problem\n");
2082 Double_t Xx=1.0-vertex[0];
2083 Double_t Xy=-1.0*vertex[1];
2084 Double_t Xz=jx/jz*(vertex[0]-1.)+vertex[1]*jy/jz;
2086 Double_t Yx=jy*Xz-jz*Xy;
2087 Double_t Yy=jz*Xx-jx*Xz;
2088 Double_t Yz=jx*Xy-jy*Xx;
2090 Double_t det = Xx*Yy*jz + Xy*Yz*jx + Xz*Yx*jy - Xx*Yz*jy - Xy*Yx*jz - Xz*Yy*jx;
2091 if(det==0)AliWarning("problem det==0");
2096 // Double_t tmpScalar = jx*Xx+jy*Xy+jz*Xz;
2097 // printf("scalar jet.P o X: %f\n",tmpScalar);
2098 // tmpScalar = jet.Px()*Yx+jet.Py()*Yy+jet.Pz()*Yz;
2099 // printf("scalar jet.P o Y: %f\n",tmpScalar);
2100 // tmpScalar = Xx*Yx+Xy*Yy+Xz*Yz;
2101 // printf("scalar X o Y: %f\n",tmpScalar);
2106 refPhi=fGenerator->Rndm()*TMath::Pi()*2.;
2107 //refPhi=fGenerator->Uniform(-1,1)*TMath::Pi();
2108 xVar=TMath::Cos(refPhi);
2109 yVar=TMath::Sin(refPhi);
2110 //yVar=TMath::Cos(-TMath::Pi()/2.+refPhi);
2111 //zVar=0 in new surface frame
2112 detX = xVar*Yy*jz + Xz*yVar*jy - xVar*Yz*jy - Xy*yVar*jz;
2113 detY = Xx*yVar*jz + xVar*Yz*jx - xVar*Yx*jz - Xz*yVar*jx;
2114 detZ = Xy*yVar*jx + xVar*Yx*jy - Xx*yVar*jy - xVar*Yy*jx;
2120 perp.SetXYZ(newX,newY,newZ);
2121 refEta = perp.Eta();
2122 refPhi = perp.Phi();//output in <-pi, pi> range
2123 if(refPhi<0)refPhi+=2*TMath::Pi();
2124 rad = TMath::Sqrt((gammaEta-refEta)*(gammaEta-refEta) + (gammaPhi-refPhi)*(gammaPhi-refPhi));
2125 rad2 = TMath::Sqrt((jetEta-refEta)*(jetEta-refEta) + (jetPhi-refPhi)*(jetPhi-refPhi));
2126 //printf("refEta,refPhi,rad,rad2: %f %f %f %f\n",refEta,refPhi,rad,rad2);
2127 } while (rad<fJetConeSize+fGammaConeSize || rad2<2.*fJetConeSize || TMath::Abs(refEta)>0.9-fJetConeSize);
2128 fhRandomPhiEta[1]->Fill(refPhi,refEta);
2131 else if(type==3){//mid point
2133 Double_t jx=jet.Px();
2134 Double_t jy=jet.Py();
2135 Double_t jz=jet.Pz();
2136 // if(jz==0)printf("problem\n");
2137 Double_t gx=gamma.Px();
2138 Double_t gy=gamma.Py();
2139 Double_t gz=gamma.Pz();
2141 Double_t cosAlpha=(jx*gx+jy*gy+jz*gz)/(jet.Mag()*gamma.Mag());
2142 Double_t cosinus=TMath::Sqrt((cosAlpha+1.)/2.);
2143 //perpendicular axis
2144 Double_t Zx=gy*jz-gz*jy;
2145 Double_t Zy=gz*jx-gx*jz;
2146 Double_t Zz=gx*jy-gy*jx;
2149 Double_t det = Zx*gy*jz + Zy*gz*jx + Zz*gx*jy - Zz*gy*jx - Zy*gx*jz - Zx*gz*jy;
2155 Double_t detX = -Zy*gz*cosinus +Zz*cosinus*jy + Zz*gy*cosinus - Zy*cosinus*jz;
2156 Double_t detY = Zx*cosinus*jz - Zz*gx*cosinus - Zz*cosinus*jx + Zx*gz*cosinus;
2157 Double_t detZ = -Zx*gy*cosinus + Zy*cosinus*jx + Zy*gx*cosinus - Zx*cosinus*jy;
2165 perp.SetXYZ(newX,newY,newZ);
2166 refEta = perp.Eta();
2167 refPhi = perp.Phi();//output in <-pi, pi> range
2168 if(refPhi<0)refPhi+=2*TMath::Pi();
2169 rad = TMath::Sqrt((gammaEta-refEta)*(gammaEta-refEta) + (gammaPhi-refPhi)*(gammaPhi-refPhi));
2170 rad2 = TMath::Sqrt((jetEta-refEta)*(jetEta-refEta) + (jetPhi-refPhi)*(jetPhi-refPhi));
2171 //printf("refEta,refPhi,rad,rad2: %f %f %f %f\n",refEta,refPhi,rad,rad2);
2173 if (rad<fJetConeSize+fGammaConeSize || rad2<2.*fJetConeSize || TMath::Abs(refEta)>0.9-fJetConeSize) fhRandomPhiEta[3]->Fill(refPhi,refEta);
2175 else if(type==5){//tmp
2176 //printf("vertex: %f %f %f \n",vertex[0],vertex[1],vertex[2]);
2182 //Z axis vector: [jet.Px(),jet.Py(),jet.Pz()]
2183 Double_t jx=jet.Px();
2184 Double_t jy=jet.Py();
2185 Double_t jz=jet.Pz();
2186 // if(jz==0)printf("problem\n");
2188 Double_t Xx=1.0-vertex[0];
2189 Double_t Xy=-1.0*vertex[1];
2190 Double_t Xz=jx/jz*(vertex[0]-1.)+vertex[1]*jy/jz;
2192 Double_t Yx=jy*Xz-jz*Xy;
2193 Double_t Yy=jz*Xx-jx*Xz;
2194 Double_t Yz=jx*Xy-jy*Xx;
2197 Double_t Xlength=TMath::Sqrt(Xx*Xx+Xy*Xy+Xz*Xz);
2198 Double_t Ylength=TMath::Sqrt(Yx*Yx+Yy*Yy+Yz*Yz);
2199 Double_t ratio=Ylength/Xlength;
2204 refPhi=fGenerator->Rndm()*TMath::Pi()*2.;
2205 xVar=TMath::Tan(refPhi)/ratio;
2210 perp.SetXYZ(newX,newY,newZ);
2211 refEta = perp.Eta();
2212 refPhi = perp.Phi();//output in <-pi, pi> range
2213 if(refPhi<0)refPhi+=2*TMath::Pi();
2214 rad = TMath::Sqrt((gammaEta-refEta)*(gammaEta-refEta) + (gammaPhi-refPhi)*(gammaPhi-refPhi));
2215 rad2 = TMath::Sqrt((jetEta-refEta)*(jetEta-refEta) + (jetPhi-refPhi)*(jetPhi-refPhi));
2216 //printf("refEta,refPhi,rad,rad2: %f %f %f %f\n",refEta,refPhi,rad,rad2);
2217 } while (rad<fJetConeSize+fGammaConeSize || rad2<2.*fJetConeSize || TMath::Abs(refEta)>0.9-fJetConeSize);
2218 fhRandomPhiEta[4]->Fill(refPhi,refEta);
2223 //calculate FF in background
2225 ntracks =GetCTSTracks()->GetEntriesFast();
2226 AliVTrack* track = 0x0 ;
2229 Double_t pt = 0, eta = 0, phi = 0;
2230 Int_t npartcone = 0;
2232 for(Int_t ipr = 0;ipr < ntracks ; ipr ++ ){
2233 track = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
2234 p3.SetXYZ(track->Px(),track->Py(),track->Pz());
2236 if(pt<fPtThresholdInCone) {//0.150
2237 //printf("problem: track pt < %f MeV/c \n",fPtThresholdInCone);
2242 if(phi < 0) phi+=TMath::TwoPi();
2243 //Check if there is any particle inside cone with pt larger than fPtThreshold
2244 rad = TMath::Sqrt((eta-refEta)*(eta-refEta) + (phi-refPhi)*(phi-refPhi));
2245 if(rad < fConeSize && pt > fPtThresholdInCone){
2246 //printf("charged in jet cone pt %f, phi %f, eta %f, R %f \n",pt,phi,eta,rad);
2249 if(type==1){//perp jet
2250 fhBkgFFz[1] ->Fill(gammaPt, pt/gammaPt);
2251 fhBkgFFxi[1]->Fill(gammaPt, TMath::Log(gammaPt/pt));
2252 fhBkgFFpt[1]->Fill(gammaPt, pt);
2254 else if(type==2){//RC
2255 fhBkgFFz[0] ->Fill(gammaPt, pt/gammaPt);
2256 fhBkgFFxi[0]->Fill(gammaPt, TMath::Log(gammaPt/pt));
2257 fhBkgFFpt[0]->Fill(gammaPt, pt);
2259 else if(type==3){//mid point
2260 fhBkgFFz[3] ->Fill(gammaPt, pt/gammaPt);
2261 fhBkgFFxi[3]->Fill(gammaPt, TMath::Log(gammaPt/pt));
2262 fhBkgFFpt[3]->Fill(gammaPt, pt);
2264 else if(type==4){//perp jet
2265 fhBkgFFz[2] ->Fill(gammaPt, pt/gammaPt);
2266 fhBkgFFxi[2]->Fill(gammaPt, TMath::Log(gammaPt/pt));
2267 fhBkgFFpt[2]->Fill(gammaPt, pt);
2269 else if(type==5){//test
2270 fhBkgFFz[4] ->Fill(gammaPt, pt/gammaPt);
2271 fhBkgFFxi[4]->Fill(gammaPt, TMath::Log(gammaPt/pt));
2272 fhBkgFFpt[4]->Fill(gammaPt, pt);
2277 }//end of loop over tracks
2278 Double_t sumOverTracks=0.;
2279 if(npartcone!=0) sumOverTracks = sumPt/npartcone;
2281 fhBkgNTracksInCone[1]->Fill(gammaPt, npartcone);
2282 fhBkgSumPtInCone[1]->Fill(gammaPt,sumPt);
2283 fhBkgSumPtnTracksInCone[1]->Fill(gammaPt,sumOverTracks);
2286 fhBkgNTracksInCone[0]->Fill(gammaPt, npartcone);
2287 fhBkgSumPtInCone[0]->Fill(gammaPt,sumPt);
2288 fhBkgSumPtnTracksInCone[0]->Fill(gammaPt,sumOverTracks);
2291 fhBkgNTracksInCone[3]->Fill(gammaPt, npartcone);
2292 fhBkgSumPtInCone[3]->Fill(gammaPt,sumPt);
2293 fhBkgSumPtnTracksInCone[3]->Fill(gammaPt,sumOverTracks);
2296 fhBkgNTracksInCone[2]->Fill(gammaPt, npartcone);
2297 fhBkgSumPtInCone[2]->Fill(gammaPt,sumPt);
2298 fhBkgSumPtnTracksInCone[2]->Fill(gammaPt,sumOverTracks);
2301 fhBkgNTracksInCone[4]->Fill(gammaPt, npartcone);
2302 fhBkgSumPtInCone[4]->Fill(gammaPt,sumPt);
2303 fhBkgSumPtnTracksInCone[4]->Fill(gammaPt,sumOverTracks);
2311 //__________________________________________________________________
2312 void AliAnaParticleJetFinderCorrelation::FindMCgenInfo(){
2314 // Find information about photon and (quark or gluon) on generated level
2317 //frequently used variables
2322 //Double_t photonY = -100 ;
2323 //Double_t photonE = -1 ;
2324 Double_t photonPt = -1 ;
2325 Double_t photonPhi = 100 ;
2326 Double_t photonEta = -1 ;
2327 Bool_t inacceptance = kFALSE;
2328 AliAODMCParticle * primTmp = NULL;
2331 Int_t nParticlesInJet=0;
2332 Int_t nChargedParticlesInJet=0;
2333 Int_t nParticlesInJet150=0;
2334 Int_t nChargedParticlesInJet150=0;
2335 Int_t nChargedParticlesInJet150Cone=0;
2337 Double_t eneParticlesInJet=0.;
2338 Double_t eneChargedParticlesInJet=0.;
2339 Double_t eneParticlesInJet150=0.;
2340 Double_t eneChargedParticlesInJet150=0.;
2341 Double_t eneChargedParticlesInJet150Cone=0.;
2343 Double_t pxParticlesInJet=0.;
2344 Double_t pxChargedParticlesInJet=0.;
2345 Double_t pxParticlesInJet150=0.;
2346 Double_t pxChargedParticlesInJet150=0.;
2347 Double_t pxChargedParticlesInJet150Cone=0.;
2349 Double_t pyParticlesInJet=0.;
2350 Double_t pyChargedParticlesInJet=0.;
2351 Double_t pyParticlesInJet150=0.;
2352 Double_t pyChargedParticlesInJet150=0.;
2353 Double_t pyChargedParticlesInJet150Cone=0.;
2355 Double_t etaParticlesInJet=0.;
2356 Double_t etaChargedParticlesInJet=0.;
2357 Double_t etaParticlesInJet150=0.;
2358 Double_t etaChargedParticlesInJet150=0.;
2359 Double_t etaChargedParticlesInJet150Cone=0.;
2361 Double_t phiParticlesInJet=0.;
2362 Double_t phiChargedParticlesInJet=0.;
2363 Double_t phiParticlesInJet150=0.;
2364 Double_t phiChargedParticlesInJet150=0.;
2365 Double_t phiChargedParticlesInJet150Cone=0.;
2367 Double_t ptParticlesInJet=0.;
2368 Double_t ptChargedParticlesInJet=0.;
2369 Double_t ptParticlesInJet150=0.;
2370 Double_t ptChargedParticlesInJet150=0.;
2371 Double_t ptChargedParticlesInJet150Cone=0.;
2373 Double_t coneJet=0.;
2374 Double_t coneChargedJet=0.;
2375 Double_t coneJet150=0.;
2376 Double_t coneChargedJet150=0.;
2378 std::vector<Int_t> jetParticleIndex;
2380 if(GetReader()->ReadStack()) {//ESD
2381 AliDebug(3,"I use stack");
2383 else if(GetReader()->ReadAODMCParticles()) {//AOD
2384 TClonesArray * mcparticles = GetReader()->GetAODMCParticles();
2387 //index =6 and 7 is hard scattering (jet-quark or photon)
2388 primTmp = (AliAODMCParticle *) mcparticles->At(6);
2389 pdg=primTmp->GetPdgCode();
2390 AliDebug(3,Form("id 6 pdg %d, pt %f ",pdg,primTmp->Pt() ));
2391 if(TMath::Abs(pdg)<=6 ||pdg==21) {
2392 fhMCJetOrigin->Fill(pdg);
2395 primTmp = (AliAODMCParticle *) mcparticles->At(7);
2396 pdg=primTmp->GetPdgCode();
2397 AliDebug(3,Form("id 7 pdg %d, pt %f",pdg,primTmp->Pt() ));
2398 if(TMath::Abs(pdg)<=6 ||pdg==21) {
2399 fhMCJetOrigin->Fill(pdg);
2404 Int_t nprim = mcparticles->GetEntriesFast();
2405 for(Int_t i=0; i < nprim; i++) {
2406 if(GetReader()->AcceptOnlyHIJINGLabels() && !GetReader()->IsHIJINGLabel(i)) continue ;
2407 AliAODMCParticle * prim = (AliAODMCParticle *) mcparticles->At(i);
2408 pdg = prim->GetPdgCode();
2409 mother=prim->GetMother();
2410 //photon=22, gluon=21, quarks=(1,...,6), antiquarks=(-1,...,-6)
2411 if(pdg == 22){//photon
2412 fhMCPhotonCuts->Fill(0);
2413 if(prim->GetStatus()!=1) continue;
2414 fhMCPhotonCuts->Fill(1);
2415 AliDebug(5,Form("id %d, prim %d, physPrim %d, status %d\n",i,prim->IsPrimary(),prim->IsPhysicalPrimary(),prim->GetStatus()));
2417 primTmp = (AliAODMCParticle *) mcparticles->At(mother);
2418 mother=primTmp->GetMother();
2420 if(mother<6)continue;
2421 fhMCPhotonCuts->Fill(2);
2422 primTmp = (AliAODMCParticle *) mcparticles->At(mother);
2423 if(primTmp->GetPdgCode()!=22)continue;
2424 fhMCPhotonCuts->Fill(3);
2426 //Get photon kinematics
2427 photonPt = prim->Pt() ;
2428 photonPhi = prim->Phi() ;
2429 if(photonPhi < 0) photonPhi+=TMath::TwoPi();
2430 photonEta = prim->Eta() ;
2431 fhMCPhotonPt->Fill(photonPt);
2432 fhMCPhotonEtaPhi->Fill(photonPhi,photonEta);
2434 //Check if photons hit the Calorimeter
2435 fMomentum.SetPxPyPzE(prim->Px(),prim->Py(),prim->Pz(),prim->E());
2436 inacceptance = kFALSE;
2437 if(GetCaloUtils()->IsEMCALGeoMatrixSet()){
2438 fhMCPhotonCuts->Fill(4);
2440 if(GetEMCALGeometry()) {
2441 GetEMCALGeometry()->GetAbsCellIdFromEtaPhi(prim->Eta(),prim->Phi(),absID);
2442 if(absID >= 0) inacceptance = kTRUE;
2443 AliDebug(3,Form("In EMCAL Real acceptance? %d",inacceptance));
2446 if(GetFiducialCut()->IsInFiducialCut(fMomentum.Eta(),fMomentum.Phi(),kEMCAL)) inacceptance = kTRUE ;
2447 AliDebug(1,Form("In EMCAL fiducial cut acceptance? %d",inacceptance));
2449 }else{//no EMCAL nor EMCALGeoMatrixSet
2450 AliWarning("not EMCALGeoMatrix set");
2451 }//end of check if EMCAL
2452 if(inacceptance)fhMCPhotonCuts->Fill(5);
2453 AliDebug(5,Form("Photon Energy %f, Pt %f",prim->E(),prim->Pt()));
2455 fMCGamEta=photonEta;
2456 fMCGamPhi=photonPhi;
2457 }//end of check if photon
2460 if(prim->GetStatus()!=1) continue;
2461 AliDebug(5,Form("id %d, prim %d, physPrim %d, status %d, pdg %d, E %f",
2462 i,prim->IsPrimary(),prim->IsPhysicalPrimary(),prim->GetStatus(),prim->GetPdgCode(),prim->E()));
2466 primTmp = (AliAODMCParticle *) mcparticles->At(mother);
2467 mother=primTmp->GetMother();
2468 AliDebug(5,Form("next mother %d",mother));
2470 if(mother<6)continue;//soft part
2472 primTmp = (AliAODMCParticle *) mcparticles->At(mother);
2473 pdg=primTmp->GetPdgCode();
2474 if( !(TMath::Abs(pdg)<=6 || pdg==21) ) continue;//origin not hard q or g
2476 //jetParticleIndex.Add(&i);
2477 jetParticleIndex.push_back(i);
2480 eneParticlesInJet+=prim->E();
2481 pxParticlesInJet+=prim->Px();
2482 pyParticlesInJet+=prim->Py();
2483 etaParticlesInJet+=(prim->E()*prim->Eta());
2484 photonPhi = prim->Phi() ;
2485 if(photonPhi < 0) photonPhi+=TMath::TwoPi();
2486 phiParticlesInJet+=(prim->E()*photonPhi);
2488 if(prim->Charge()!=0) {
2489 nChargedParticlesInJet++;
2490 eneChargedParticlesInJet+=prim->E();
2491 pxChargedParticlesInJet+=prim->Px();
2492 pyChargedParticlesInJet+=prim->Py();
2493 etaChargedParticlesInJet+=(prim->E()*prim->Eta());
2494 phiChargedParticlesInJet+=(prim->E()*photonPhi);
2496 if(prim->Pt()>0.150 && TMath::Abs(prim->Eta())<0.9 ) {//in TPC acceptance :)
2497 nParticlesInJet150++;
2498 eneParticlesInJet150+=prim->E();
2499 pxParticlesInJet150+=prim->Px();
2500 pyParticlesInJet150+=prim->Py();
2501 etaParticlesInJet150+=(prim->E()*prim->Eta());
2502 phiParticlesInJet150+=(prim->E()*photonPhi);
2504 if(prim->Charge()!=0 && prim->Pt()>0.150 && TMath::Abs(prim->Eta())<0.9 ) {//in TPC acceptance :)
2505 nChargedParticlesInJet150++;
2506 eneChargedParticlesInJet150+=prim->E();
2507 pxChargedParticlesInJet150+=prim->Px();
2508 pyChargedParticlesInJet150+=prim->Py();
2509 etaChargedParticlesInJet150+=(prim->E()*prim->Eta());
2510 phiChargedParticlesInJet150+=(prim->E()*photonPhi);
2514 }//end of loop over primaries
2516 if(eneParticlesInJet != 0.) {
2517 etaParticlesInJet/=eneParticlesInJet ;
2518 phiParticlesInJet/=eneParticlesInJet ;
2520 if(eneChargedParticlesInJet != 0) {
2521 etaChargedParticlesInJet/=eneChargedParticlesInJet;
2522 phiChargedParticlesInJet/=eneChargedParticlesInJet;
2524 if(eneParticlesInJet150 != 0) {
2525 etaParticlesInJet150/=eneParticlesInJet150;
2526 phiParticlesInJet150/=eneParticlesInJet150;
2528 if(eneChargedParticlesInJet150 != 0) {
2529 etaChargedParticlesInJet150/=eneChargedParticlesInJet150;
2530 phiChargedParticlesInJet150/=eneChargedParticlesInJet150;
2533 ptParticlesInJet=TMath::Sqrt(pxParticlesInJet*pxParticlesInJet+pyParticlesInJet*pyParticlesInJet);
2534 ptChargedParticlesInJet=TMath::Sqrt(pxChargedParticlesInJet*pxChargedParticlesInJet+pyChargedParticlesInJet*pyChargedParticlesInJet);
2535 ptParticlesInJet150=TMath::Sqrt(pxParticlesInJet150*pxParticlesInJet150+pyParticlesInJet150*pyParticlesInJet150);
2536 ptChargedParticlesInJet150=TMath::Sqrt(pxChargedParticlesInJet150*pxChargedParticlesInJet150+pyChargedParticlesInJet150*pyChargedParticlesInJet150);
2538 Double_t distance=0.;
2541 Double_t mostPtCharged=0.;
2542 Int_t mostmostPtChargedId=-1;
2543 std::vector<Int_t>::iterator it;
2544 for( it=jetParticleIndex.begin(); it!=jetParticleIndex.end(); ++it ){
2545 AliAODMCParticle * prim = (AliAODMCParticle *) mcparticles->At(*it);
2548 if(phi < 0) phi+=TMath::TwoPi();
2550 distance=TMath::Sqrt((eta-etaParticlesInJet)*(eta-etaParticlesInJet)+(phi-phiParticlesInJet)*(phi-phiParticlesInJet));
2551 if(distance>coneJet) coneJet=distance;
2553 distance=TMath::Sqrt((eta-etaChargedParticlesInJet)*(eta-etaChargedParticlesInJet)+(phi-phiChargedParticlesInJet)*(phi-phiChargedParticlesInJet));
2554 if(distance>coneChargedJet) coneChargedJet=distance;
2556 distance=TMath::Sqrt((eta-etaParticlesInJet150)*(eta-etaParticlesInJet150)+(phi-phiParticlesInJet150)*(phi-phiParticlesInJet150));
2557 if(distance>coneJet150 && TMath::Abs(eta)<0.9 ) coneJet150=distance;
2559 distance=TMath::Sqrt((eta-etaChargedParticlesInJet150)*(eta-etaChargedParticlesInJet150)+(phi-phiChargedParticlesInJet150)*(phi-phiChargedParticlesInJet150));
2560 if(distance>coneChargedJet150 && TMath::Abs(eta)<0.9) coneChargedJet150=distance;
2562 if(prim->Charge()!=0 && prim->Pt()>0.150 && TMath::Abs(eta)<0.9) {
2563 if(prim->Pt()>mostPtCharged) {
2564 mostPtCharged=prim->Pt();
2565 mostmostPtChargedId=(*it);
2570 if(prim->Charge()!=0 && prim->Pt()>0.150 && TMath::Abs(eta)<0.9) {
2571 nChargedParticlesInJet150Cone++;
2572 eneChargedParticlesInJet150Cone+=prim->E();
2573 pxChargedParticlesInJet150Cone+=prim->Px();
2574 pyChargedParticlesInJet150Cone+=prim->Py();
2575 etaChargedParticlesInJet150Cone+=(prim->E()*eta);
2576 phiChargedParticlesInJet150Cone+=(prim->E()*phi);
2581 }//end of loop over jet particle indexes
2582 if(eneChargedParticlesInJet150Cone != 0) {
2583 etaChargedParticlesInJet150Cone/=eneChargedParticlesInJet150Cone;
2584 phiChargedParticlesInJet150Cone/=eneChargedParticlesInJet150Cone;
2586 ptChargedParticlesInJet150Cone=TMath::Sqrt(pxChargedParticlesInJet150Cone*pxChargedParticlesInJet150Cone+pyChargedParticlesInJet150Cone*pyChargedParticlesInJet150Cone);
2587 if(nChargedParticlesInJet150>0 && nChargedParticlesInJet150Cone<1){//no particles in cone? take the most energetic one
2588 nChargedParticlesInJet150Cone=1;
2589 etaChargedParticlesInJet150Cone=((AliAODMCParticle *)mcparticles->At(mostmostPtChargedId))->Eta();
2590 phiChargedParticlesInJet150Cone=((AliAODMCParticle *)mcparticles->At(mostmostPtChargedId))->Phi();
2591 ptChargedParticlesInJet150Cone=((AliAODMCParticle *)mcparticles->At(mostmostPtChargedId))->Pt();
2595 }//mc array exists and data is MC
2598 jetParticleIndex.clear();
2603 AliDebug(3,Form("cone full %f, charged %f, full150 %f, charged150 %f",coneJet,coneChargedJet,coneJet150,coneChargedJet150));
2604 AliDebug(3,Form("Npart %d, NchPart %d, Npart(pt>150M) %d, NchPart(pt>150M) %d, NchPart(pt>150M)Cone %d\n",nParticlesInJet,nChargedParticlesInJet,nParticlesInJet150,nChargedParticlesInJet150,nChargedParticlesInJet150Cone));
2605 AliDebug(3,Form("Etot %f, Ech %f, E(pt>150M) %f, Ech(pt>150M) %f\n",eneParticlesInJet,eneChargedParticlesInJet,eneParticlesInJet150,eneChargedParticlesInJet150));
2606 AliDebug(3,Form("pt %f, ptch %f, pt(pt>150M) %f,ptch(pt>150M) %f,ptch(pt>150M)Cone %f\n",ptParticlesInJet,ptChargedParticlesInJet,ptParticlesInJet150,ptChargedParticlesInJet150,ptChargedParticlesInJet150Cone));
2607 AliDebug(3,Form("eta/phi tot %f/%f, ch %f/%f, tot150 %f/%f, ch150 %f/%f, ch150cone %f/%f\n",etaParticlesInJet,phiParticlesInJet,etaChargedParticlesInJet,phiChargedParticlesInJet,etaParticlesInJet150,phiParticlesInJet150,etaChargedParticlesInJet150,phiChargedParticlesInJet150,etaChargedParticlesInJet150Cone,phiChargedParticlesInJet150Cone));
2610 if(ptParticlesInJet) fhMCJetRatioChFull->Fill(ptChargedParticlesInJet/ptParticlesInJet);
2611 if(ptChargedParticlesInJet) fhMCJetRatioCh150Ch->Fill(ptChargedParticlesInJet150/ptChargedParticlesInJet);
2613 fhMCJetNPartVsPt ->Fill(ptParticlesInJet,nParticlesInJet);
2614 fhMCJetChNPartVsPt ->Fill(ptChargedParticlesInJet,nChargedParticlesInJet);
2615 fhMCJetNPart150VsPt ->Fill(ptParticlesInJet150,nParticlesInJet150);
2616 fhMCJetChNPart150VsPt->Fill(ptChargedParticlesInJet150,nChargedParticlesInJet150);
2617 fhMCJetChNPart150ConeVsPt->Fill(ptChargedParticlesInJet150Cone,nChargedParticlesInJet150Cone);
2619 fhMCJetEtaPhi->Fill(phiParticlesInJet,etaParticlesInJet);
2620 fhMCJetChEtaPhi->Fill(phiChargedParticlesInJet,etaChargedParticlesInJet);
2621 fhMCJet150EtaPhi->Fill(phiParticlesInJet150,etaParticlesInJet150);
2622 fhMCJetCh150EtaPhi->Fill(phiChargedParticlesInJet150,etaChargedParticlesInJet150);
2623 fhMCJetCh150ConeEtaPhi->Fill(phiChargedParticlesInJet150Cone,etaChargedParticlesInJet150Cone);
2626 fMCJetPt = ptParticlesInJet;
2627 fMCJetChPt = ptChargedParticlesInJet;
2628 fMCJet150Pt = ptParticlesInJet150;
2629 fMCJetCh150Pt = ptChargedParticlesInJet150;
2630 fMCJetNPart = nParticlesInJet;
2631 fMCJetChNPart = nChargedParticlesInJet;
2632 fMCJet150NPart = nParticlesInJet150;
2633 fMCJetCh150NPart = nChargedParticlesInJet150;
2634 fMCJetEta = etaParticlesInJet ;
2635 fMCJetPhi = phiParticlesInJet ;
2636 fMCJetChEta = etaChargedParticlesInJet ;
2637 fMCJetChPhi = phiChargedParticlesInJet ;
2638 fMCJet150Eta = etaParticlesInJet150 ;
2639 fMCJet150Phi = phiParticlesInJet150 ;
2640 fMCJetCh150Eta = etaChargedParticlesInJet150;
2641 fMCJetCh150Phi = phiChargedParticlesInJet150;
2643 fMCJetCh150ConePt = ptChargedParticlesInJet150Cone;
2644 fMCJetCh150ConeNPart = nChargedParticlesInJet150Cone;
2645 fMCJetCh150ConeEta = etaChargedParticlesInJet150Cone;
2646 fMCJetCh150ConePhi = phiChargedParticlesInJet150Cone;
2648 }//end of method FindMCgenInfo