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 //////////////////////////////////////////////////////////////////////////////
22 // --- ROOT system ---
24 #include "TClonesArray.h"
26 //#include "Riostream.h"
28 //---- AliRoot system ----
29 #include "AliCaloTrackReader.h"
30 #include "AliAODJet.h"
31 #include "AliAnaParticleJetFinderCorrelation.h"
32 #include "AliAODPWG4ParticleCorrelation.h"
33 #include "AliVTrack.h"
34 #include "AliAODCaloCluster.h"
35 #include "AliAODEvent.h"
38 #include "AliAODJetEventBackground.h"
41 ClassImp(AliAnaParticleJetFinderCorrelation)
44 //________________________________________________________________________
45 AliAnaParticleJetFinderCorrelation::AliAnaParticleJetFinderCorrelation() :
46 AliAnaCaloTrackCorrBaseClass(),
47 fDeltaPhiMaxCut(0.), fDeltaPhiMinCut(0.), fRatioMaxCut(0.), fRatioMinCut(0.),
48 fConeSize(0), fPtThresholdInCone(0),fUseJetRefTracks(0),
49 fMakeCorrelationInHistoMaker(0), fSelectIsolated(0),
50 fJetConeSize(0.4),fJetMinPt(5),fJetAreaFraction(0.6),
51 fNonStandardJetFromReader(kTRUE), fJetBranchName("jets"),
52 fBackgroundJetFromReader(kTRUE),fBkgJetBranchName("jets"),
53 fGammaConeSize(0.3),fUseBackgroundSubtractionGamma(0),fSaveGJTree(0),
54 fMostEnergetic(kFALSE),fMostOpposite(kTRUE), fUseHistogramJetBkg(kTRUE),
55 fUseHistogramTracks(kTRUE),fUseHistogramJetTracks(kTRUE),fGenerator(0),
56 fhDeltaEta(0), /*fhDeltaPhi(0),*/fhDeltaPhiCorrect(0),fhDeltaPhi0PiCorrect(0), fhDeltaPt(0), fhPtRatio(0), fhPt(0),
57 fhFFz(0),fhFFxi(0),fhFFpt(0),fhNTracksInCone(0),
58 fhJetFFz(0),fhJetFFxi(0),fhJetFFpt(0),fhJetFFzCor(0),fhJetFFxiCor(0),
59 fhBkgFFz(),fhBkgFFxi(),fhBkgFFpt(),fhBkgNTracksInCone(),fhBkgSumPtInCone(),fhBkgSumPtnTracksInCone(),//<<---new
60 fhNjetsNgammas(0),fhCuts(0),
61 fhDeltaEtaBefore(0),fhDeltaPhiBefore(0),fhDeltaPtBefore(0),fhPtRatioBefore(0),
62 fhPtBefore(0),fhDeltaPhi0PiCorrectBefore(0),
63 fhJetPtBefore(0),fhJetPt(0),fhJetPtMostEne(0),fhJetPhi(0),fhJetEta(0),fhJetEtaVsPt(0),
64 fhJetPhiVsEta(0),fhJetEtaVsNpartInJet(0),fhJetEtaVsNpartInJetBkg(0),fhJetChBkgEnergyVsPt(0),fhJetChAreaVsPt(0),/*fhJetNjet(0),*/
65 fhTrackPhiVsEta(0),fhTrackAveTrackPt(0),fhJetNjetOverPtCut(),
66 /*fhJetChBkgEnergyVsPtEtaGt05(0),fhJetChBkgEnergyVsPtEtaLe05(0),fhJetChAreaVsPtEtaGt05(0),fhJetChAreaVsPtEtaLe05(0),*/
67 fhJetChBkgEnergyVsArea(0),fhJetRhoVsPt(0),fhJetRhoVsCentrality(0),//fhJetBkgRho(0),
68 fhJetNparticlesInJet(0),fhJetDeltaEtaDeltaPhi(0),fhJetDeltaEtaDeltaPhiAllTracks(0),
69 fhJetAveTrackPt(0),fhJetNtracksInJetAboveThr(),fhJetRatioNTrkAboveToNTrk(),fhJetNtrackRatioMostEne(),
70 fhJetNtrackRatioJet5GeV(),fhJetNtrackRatioLead5GeV(),
71 fhBkgJetBackground(),fhBkgJetSigma(),fhBkgJetArea(),fhPhotonPtMostEne(0),
72 fhPhotonAverageEnergy(0),fhPhotonRatioAveEneToMostEne(0),fhPhotonAverageEnergyMinus1(0),fhPhotonRatioAveEneMinus1ToMostEne(0),
73 fhPhotonNgammaMoreAverageToNgamma(0),fhPhotonNgammaMoreAverageMinus1ToNgamma(0),fhPhotonNgammaOverPtCut(),
74 fhPhotonBkgRhoVsNtracks(0),fhPhotonBkgRhoVsNclusters(0),fhPhotonBkgRhoVsCentrality(0),
75 fhPhotonBkgRhoVsNcells(0),fhPhotonPt(0),fhPhotonPtCorrected(0),fhPhotonPtCorrectedZoom(0),fhPhotonPtDiff(0),
76 fhPhotonPtDiffVsCentrality(0),fhPhotonPtDiffVsNcells(0),fhPhotonPtDiffVsNtracks(0),fhPhotonPtDiffVsNclusters(0),
77 fhPhotonSumPtInCone(0),fhPhotonSumPtCorrectInCone(0),fhPhotonSumPtChargedInCone(0),
78 fhSelectedJetPhiVsEta(0),fhSelectedJetChBkgEnergyVsPtJet(0),fhSelectedJetChAreaVsPtJet(0),fhSelectedJetNjet(0),fhSelectedNtracks(0),
79 fhSelectedTrackPhiVsEta(0),fhCuts2(0),
80 fhSelectedPhotonNLMVsPt(0),fhSelectedPhotonLambda0VsPt(0), fhRandomPhiEta(),
112 // printf("constructor\n");
114 //Initialize parameters
116 for(Int_t i=0;i<10;i++){
117 fhJetNjetOverPtCut[i] = 0;
118 fhPhotonNgammaOverPtCut[i] = 0;
120 fGenerator = new TRandom2();
121 fGenerator->SetSeed(0);
124 //___________________________________________________________________
125 AliAnaParticleJetFinderCorrelation::~AliAnaParticleJetFinderCorrelation(){
130 //___________________________________________________________________
131 TList * AliAnaParticleJetFinderCorrelation::GetCreateOutputObjects()
133 // Create histograms to be saved in output file and
134 // store them in fOutputContainer
135 // printf("GetCreateOutputObjects\n");
137 TList * outputContainer = new TList() ;
138 outputContainer->SetName("ParticleJetFinderHistos") ;
140 Int_t nptbins = GetHistogramRanges()->GetHistoPtBins();
141 // Int_t nphibins = GetHistogramRanges()->GetHistoPhiBins();
142 // Int_t netabins = GetHistogramRanges()->GetHistoEtaBins();
143 Float_t ptmax = GetHistogramRanges()->GetHistoPtMax();
144 // Float_t phimax = GetHistogramRanges()->GetHistoPhiMax();
145 // Float_t etamax = GetHistogramRanges()->GetHistoEtaMax();
146 Float_t ptmin = GetHistogramRanges()->GetHistoPtMin();
147 // Float_t phimin = GetHistogramRanges()->GetHistoPhiMin();
148 // Float_t etamin = GetHistogramRanges()->GetHistoEtaMin();
150 // fhDeltaPhi = new TH2F("DeltaPhi","#phi_{trigger} - #phi_{jet} vs p_{T trigger}",nptbins,ptmin,ptmax,100,-6,4);
151 // fhDeltaPhi->SetYTitle("#Delta #phi");
152 // fhDeltaPhi->SetXTitle("p_{T trigger} (GeV/c)");
153 // outputContainer->Add(fhDeltaPhi);
155 fhDeltaPhiCorrect = new TH2F("DeltaPhiCorrect","#phi_{trigger} - #phi_{jet} vs p_{T trigger}",nptbins,ptmin,ptmax,100,0,6.5);
156 fhDeltaPhiCorrect->SetYTitle("#Delta #phi");
157 fhDeltaPhiCorrect->SetXTitle("p_{T trigger} (GeV/c)");
158 outputContainer->Add(fhDeltaPhiCorrect);
160 fhDeltaPhi0PiCorrect = new TH2F("DeltaPhi0PiCorrect","#phi_{trigger} - #phi_{jet} (0,#pi) vs p_{T trigger}",nptbins,ptmin,ptmax,100,0,3.5);
161 fhDeltaPhi0PiCorrect->SetYTitle("#Delta #phi");
162 fhDeltaPhi0PiCorrect->SetXTitle("p_{T trigger} (GeV/c)");
163 outputContainer->Add(fhDeltaPhi0PiCorrect);
166 fhDeltaEta = new TH2F("DeltaEta","#eta_{trigger} - #eta_{jet} vs p_{T trigger}",nptbins,ptmin,ptmax,100,-2,2);
167 fhDeltaEta->SetYTitle("#Delta #eta");
168 fhDeltaEta->SetXTitle("p_{T trigger} (GeV/c)");
169 outputContainer->Add(fhDeltaEta);
171 fhDeltaPt = new TH2F("DeltaPt","p_{T trigger} - p_{T jet} vs p_{T trigger}",nptbins,ptmin,ptmax,150,-50,100);
172 fhDeltaPt->SetYTitle("#Delta p_{T}");
173 fhDeltaPt->SetXTitle("p_{T trigger} (GeV/c)");
174 outputContainer->Add(fhDeltaPt);
176 fhPtRatio = new TH2F("PtRatio","p_{T jet} / p_{T trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,200,0,2.);
177 fhPtRatio->SetYTitle("ratio");
178 fhPtRatio->SetXTitle("p_{T trigger} (GeV/c)");
179 outputContainer->Add(fhPtRatio);
181 fhPt = new TH2F("Pt","p_{T jet} vs p_{T trigger}",nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
182 fhPt->SetYTitle("p_{T jet}(GeV/c)");
183 fhPt->SetXTitle("p_{T trigger} (GeV/c)");
184 outputContainer->Add(fhPt);
186 fhFFz = new TH2F("FFz","z = p_{T i charged}/p_{T trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,200,0.,2);
187 fhFFz->SetYTitle("z");
188 fhFFz->SetXTitle("p_{T trigger}");
189 outputContainer->Add(fhFFz) ;
191 fhFFxi = new TH2F("FFxi","#xi = ln(p_{T trigger}/p_{T i charged}) vs p_{T trigger}", nptbins,ptmin,ptmax,100,0.,10.);
192 fhFFxi->SetYTitle("#xi");
193 fhFFxi->SetXTitle("p_{T trigger}");
194 outputContainer->Add(fhFFxi) ;
196 fhFFpt = new TH2F("FFpt","p_{T i charged} vs p_{T trigger}", nptbins,ptmin,ptmax,100,0.,50.);
197 fhFFpt->SetYTitle("p_{T charged hadron}");
198 fhFFpt->SetXTitle("p_{T trigger}");
199 outputContainer->Add(fhFFpt) ;
201 fhNTracksInCone = new TH2F("NTracksInCone","Number of tracks in cone vs p_{T trigger}", nptbins,ptmin,ptmax,100,0.,150.);
202 fhNTracksInCone->SetYTitle("p_{T charged hadron}");
203 fhNTracksInCone->SetXTitle("p_{T trigger}");
204 outputContainer->Add(fhNTracksInCone) ;
206 //FF according to jet axis
207 fhJetFFz = new TH2F("JetFFz","z = p_{T i charged}/p_{T jet} vs p_{T jet}",nptbins,ptmin,ptmax,200,0.,2);
208 fhJetFFz->SetYTitle("z");
209 fhJetFFz->SetXTitle("p_{T jet}");
210 outputContainer->Add(fhJetFFz) ;
212 fhJetFFxi = new TH2F("JetFFxi","#xi = ln(p_{T jet}/p_{T i charged}) vs p_{T jet}", nptbins,ptmin,ptmax,100,0.,10.);
213 fhJetFFxi->SetYTitle("#xi");
214 fhJetFFxi->SetXTitle("p_{T jet}");
215 outputContainer->Add(fhJetFFxi) ;
217 fhJetFFpt = new TH2F("JetFFpt","p_{T i charged} vs p_{T jet}", nptbins,ptmin,ptmax,100,0.,50.);
218 fhJetFFpt->SetYTitle("p_{T charged hadron}");
219 fhJetFFpt->SetXTitle("p_{T jet}");
220 outputContainer->Add(fhJetFFpt) ;
222 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);
223 fhJetFFzCor->SetYTitle("z");
224 fhJetFFzCor->SetXTitle("p_{T jet}");
225 outputContainer->Add(fhJetFFzCor) ;
227 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.);
228 fhJetFFxiCor->SetYTitle("#xi");
229 fhJetFFxiCor->SetXTitle("p_{T jet}");
230 outputContainer->Add(fhJetFFxiCor) ;
234 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);
235 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);
236 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);
237 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);
238 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);
239 for(Int_t i=0;i<5;i++){
240 fhBkgFFz[i]->SetYTitle("z");
241 fhBkgFFz[i]->SetXTitle("p_{T trigger}");
242 outputContainer->Add(fhBkgFFz[i]) ;
245 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.);
246 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.);
247 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.);
248 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.);
249 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.);
250 for(Int_t i=0;i<5;i++){
251 fhBkgFFxi[i]->SetYTitle("#xi");
252 fhBkgFFxi[i]->SetXTitle("p_{T trigger}");
253 outputContainer->Add(fhBkgFFxi[i]) ;
256 fhBkgFFpt[0] = new TH2F("BkgFFptRC", "p_{T i charged} vs p_{T trigger} Bkg RC", nptbins,ptmin,ptmax,100,0.,50.);
257 fhBkgFFpt[1] = new TH2F("BkgFFptPCG", "p_{T i charged} vs p_{T trigger} Bkg PCG", nptbins,ptmin,ptmax,100,0.,50.);
258 fhBkgFFpt[2] = new TH2F("BkgFFptPCJ", "p_{T i charged} vs p_{T trigger} Bkg PCJ", nptbins,ptmin,ptmax,100,0.,50.);
259 fhBkgFFpt[3] = new TH2F("BkgFFptMP", "p_{T i charged} vs p_{T trigger} Bkg MP", nptbins,ptmin,ptmax,100,0.,50.);
260 fhBkgFFpt[4] = new TH2F("BkgFFptTest","p_{T i charged} vs p_{T trigger} Bkg Test", nptbins,ptmin,ptmax,100,0.,50.);
261 for(Int_t i=0;i<5;i++){
262 fhBkgFFpt[i]->SetYTitle("p_{T charged hadron}");
263 fhBkgFFpt[i]->SetXTitle("p_{T trigger}");
264 outputContainer->Add(fhBkgFFpt[i]) ;
267 fhBkgNTracksInCone[0] = new TH2F("BkgNTracksInConeRC", "Number of tracks in cone vs p_{T trigger} Bkg RC", nptbins,ptmin,ptmax,100,0.,150.);
268 fhBkgNTracksInCone[1] = new TH2F("BkgNTracksInConePCG", "Number of tracks in cone vs p_{T trigger} Bkg PCG", nptbins,ptmin,ptmax,100,0.,150.);
269 fhBkgNTracksInCone[2] = new TH2F("BkgNTracksInConePCJ", "Number of tracks in cone vs p_{T trigger} Bkg PCJ", nptbins,ptmin,ptmax,100,0.,150.);
270 fhBkgNTracksInCone[3] = new TH2F("BkgNTracksInConeMP", "Number of tracks in cone vs p_{T trigger} Bkg MP", nptbins,ptmin,ptmax,100,0.,150.);
271 fhBkgNTracksInCone[4] = new TH2F("BkgNTracksInConeTest","Number of tracks in cone vs p_{T trigger} Bkg Test", nptbins,ptmin,ptmax,100,0.,150.);
272 for(Int_t i=0;i<5;i++){
273 fhBkgNTracksInCone[i]->SetYTitle("Number of tracks");
274 fhBkgNTracksInCone[i]->SetXTitle("p_{T trigger}");
275 outputContainer->Add(fhBkgNTracksInCone[i]) ;
278 fhBkgSumPtInCone[0] = new TH2F("BkgSumPtInConeRC", "Sum P_{T} in cone vs p_{T trigger} Bkg RC", nptbins,ptmin,ptmax,100,0.,100.);
279 fhBkgSumPtInCone[1] = new TH2F("BkgSumPtInConePCG", "Sum P_{T} in cone vs p_{T trigger} Bkg PCG", nptbins,ptmin,ptmax,100,0.,100.);
280 fhBkgSumPtInCone[2] = new TH2F("BkgSumPtInConePCJ", "Sum P_{T} in cone vs p_{T trigger} Bkg PCJ", nptbins,ptmin,ptmax,100,0.,100.);
281 fhBkgSumPtInCone[3] = new TH2F("BkgSumPtInConeMP", "Sum P_{T} in cone vs p_{T trigger} Bkg MP", nptbins,ptmin,ptmax,100,0.,100.);
282 fhBkgSumPtInCone[4] = new TH2F("BkgSumPtInConeTest","Sum P_{T} in cone vs p_{T trigger} Bkg Test", nptbins,ptmin,ptmax,100,0.,100.);
283 for(Int_t i=0;i<5;i++){
284 fhBkgSumPtInCone[i]->SetYTitle("Sum P_{T}");
285 fhBkgSumPtInCone[i]->SetXTitle("p_{T trigger}");
286 outputContainer->Add(fhBkgSumPtInCone[i]) ;
289 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.);
290 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.);
291 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.);
292 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.);
293 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.);
294 for(Int_t i=0;i<5;i++){
295 fhBkgSumPtnTracksInCone[i]->SetYTitle("Sum p_{T}/Number of tracks");
296 fhBkgSumPtnTracksInCone[i]->SetXTitle("p_{T trigger}");
297 outputContainer->Add(fhBkgSumPtnTracksInCone[i]) ;
301 //temporary histograms
302 fhNjetsNgammas = new TH2F("NjetsNgammas"," Number of jets vs number of gammas in event",20,0.,100.,10,0.,80.);
303 fhNjetsNgammas->SetYTitle("Number of gammas");
304 fhNjetsNgammas->SetXTitle("Number of jets");
305 outputContainer->Add(fhNjetsNgammas) ;
307 fhCuts = new TH1F("Cuts"," Cuts",10,0.,10.);
308 fhCuts->SetYTitle("Counts");
309 fhCuts->SetXTitle("Cut number");
310 outputContainer->Add(fhCuts) ;
312 fhDeltaPhiBefore = new TH2F("DeltaPhiBefore","#phi_{trigger} - #phi_{jet} vs p_{T trigger}",nptbins,ptmin,ptmax,100,0,6.5);
313 fhDeltaPhiBefore->SetYTitle("#Delta #phi");
314 fhDeltaPhiBefore->SetXTitle("p_{T trigger} (GeV/c)");
315 outputContainer->Add(fhDeltaPhiBefore);
317 fhDeltaEtaBefore = new TH2F("DeltaEtaBefore","#eta_{trigger} - #eta_{jet} vs p_{T trigger}",nptbins,ptmin,ptmax,100,-2,2);
318 fhDeltaEtaBefore->SetYTitle("#Delta #eta");
319 fhDeltaEtaBefore->SetXTitle("p_{T trigger} (GeV/c)");
320 outputContainer->Add(fhDeltaEtaBefore);
322 fhDeltaPtBefore = new TH2F("DeltaPtBefore","p_{T trigger} - p_{T jet} vs p_{T trigger}",nptbins,ptmin,ptmax,100,-50,50);
323 fhDeltaPtBefore->SetYTitle("#Delta p_{T}");
324 fhDeltaPtBefore->SetXTitle("p_{T trigger} (GeV/c)");
325 outputContainer->Add(fhDeltaPtBefore);
327 fhPtRatioBefore = new TH2F("PtRatioBefore","p_{T jet} / p_{T trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,200,0,2.);
328 fhPtRatioBefore->SetYTitle("ratio");
329 fhPtRatioBefore->SetXTitle("p_{T trigger} (GeV/c)");
330 outputContainer->Add(fhPtRatioBefore);
332 fhPtBefore = new TH2F("PtBefore","p_{T jet} vs p_{T trigger}",nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
333 fhPtBefore->SetYTitle("p_{T jet}(GeV/c)");
334 fhPtBefore->SetXTitle("p_{T trigger} (GeV/c)");
335 outputContainer->Add(fhPtBefore);
337 fhDeltaPhi0PiCorrectBefore = new TH2F("DeltaPhi0PiCorrectBefore","#phi_{trigger} - #phi_{jet} (0,#pi) vs p_{T trigger}",nptbins,ptmin,ptmax,100,0,3.5);
338 fhDeltaPhi0PiCorrectBefore->SetYTitle("#Delta #phi");
339 fhDeltaPhi0PiCorrectBefore->SetXTitle("p_{T trigger} (GeV/c)");
340 outputContainer->Add(fhDeltaPhi0PiCorrectBefore);
342 //temporary jet histograms
343 fhJetPtBefore = new TH1F("JetPtBefore","JetPtBefore",150,-50,100);
344 fhJetPtBefore->SetYTitle("Counts");
345 fhJetPtBefore->SetXTitle("p_{T jet}(GeV/c)");
346 outputContainer->Add(fhJetPtBefore) ;
348 fhJetPt = new TH1F("JetPt","JetPt",150,-50,100);
349 fhJetPt->SetYTitle("Counts");
350 fhJetPt->SetXTitle("p_{T jet}(GeV/c)");
351 outputContainer->Add(fhJetPt) ;
353 fhJetPtMostEne = new TH1F("JetPtMostEne","JetPtMostEne",150,0,150);
354 fhJetPtMostEne->SetYTitle("Counts");
355 fhJetPtMostEne->SetXTitle("p_{T jet}(GeV/c)");
356 outputContainer->Add(fhJetPtMostEne) ;
358 fhJetPhi = new TH1F("JetPhi","JetPhi",130,0,6.5);
359 fhJetPhi->SetYTitle("Counts");
360 fhJetPhi->SetXTitle("#phi_{jet}");
361 outputContainer->Add(fhJetPhi) ;
363 fhJetEta = new TH1F("JetEta","JetEta",100,-1,1);
364 fhJetEta->SetYTitle("Counts");
365 fhJetEta->SetXTitle("#eta_{jet}");
366 outputContainer->Add(fhJetEta) ;
368 fhJetEtaVsPt = new TH2F("JetEtaVsPt","JetEtaVsPt",100,0,100,50,-1,1);
369 fhJetEtaVsPt->SetYTitle("#eta_{jet}");
370 fhJetEtaVsPt->SetXTitle("p_{T,jet}(GeV/c)");
371 outputContainer->Add(fhJetEtaVsPt) ;
373 fhJetPhiVsEta = new TH2F("JetPhiVsEta","JetPhiVsEta",65,0,6.5,50,-1,1);
374 fhJetPhiVsEta->SetYTitle("#eta_{jet}");
375 fhJetPhiVsEta->SetXTitle("#phi_{jet}");
376 outputContainer->Add(fhJetPhiVsEta) ;
378 fhJetEtaVsNpartInJet= new TH2F("JetEtaVsNpartInJet","JetEtaVsNpartInJet",50,-1,1,100,0.,200.);
379 fhJetEtaVsNpartInJet->SetYTitle("N_{tracks-in-jet}");
380 fhJetEtaVsNpartInJet->SetXTitle("#eta_{jet}");
381 outputContainer->Add(fhJetEtaVsNpartInJet) ;
383 fhJetEtaVsNpartInJetBkg= new TH2F("JetEtaVsNpartInJetBkg","JetEtaVsNpartInJetBkg",50,-1,1,100,0.,200.);
384 fhJetEtaVsNpartInJetBkg->SetYTitle("N_{tracks-in-jet}");
385 fhJetEtaVsNpartInJetBkg->SetXTitle("#eta_{jet}");
386 outputContainer->Add(fhJetEtaVsNpartInJetBkg) ;
388 fhJetChBkgEnergyVsPt = new TH2F("JetBkgChEnergyVsPt","JetBkgChEnergyVsPt",100,0,100,90,0,90);
389 fhJetChBkgEnergyVsPt->SetYTitle("Jet Bkg Energy (GeV)");
390 fhJetChBkgEnergyVsPt->SetXTitle("p_{T,jet} (GeV/c)");
391 outputContainer->Add(fhJetChBkgEnergyVsPt);
393 fhJetChAreaVsPt = new TH2F("JetChAreaVsPt","JetChAreaVsPt",100,0,100,50,0,1);
394 fhJetChAreaVsPt->SetYTitle("Jet Area");
395 fhJetChAreaVsPt->SetXTitle("p_{T,jet} (GeV/c)");
396 outputContainer->Add(fhJetChAreaVsPt);
398 if(IsHistogramTracks()){
399 fhTrackPhiVsEta = new TH2F("TrackPhiVsEta","TrackPhiVsEta",65,0,6.5,50,-1,1);
400 fhTrackPhiVsEta->SetYTitle("#eta_{track}");
401 fhTrackPhiVsEta->SetXTitle("#phi_{track}");
402 outputContainer->Add(fhTrackPhiVsEta) ;
404 fhTrackAveTrackPt = new TH1F("TrackAveTrackPt","TrackAveTrackPt",45,0,1.5);
405 fhTrackAveTrackPt->SetYTitle("Counts");
406 fhTrackAveTrackPt->SetXTitle("Average p_{T,track} (GeV/c)");
407 outputContainer->Add(fhTrackAveTrackPt);
409 }//end of IsHistogramTracks()
411 for(Int_t i=0;i<10;i++){
412 fhJetNjetOverPtCut[i] = new TH1F(Form("JetNjetOverPtCut%d", i),Form("JetNjetOverPtCut%d", i),100,0,100);
413 fhJetNjetOverPtCut[i]->SetYTitle("Counts");
414 fhJetNjetOverPtCut[i]->SetXTitle("N_{jets} over threshold");
415 outputContainer->Add(fhJetNjetOverPtCut[i]);
418 fhJetChBkgEnergyVsArea = new TH2F("JetBkgChEnergyVsArea","JetBkgChEnergyVsArea",100,0,100,70,0,0.7);
419 fhJetChBkgEnergyVsArea->SetXTitle("Jet Bkg Energy (GeV)");
420 fhJetChBkgEnergyVsArea->SetYTitle("Area");
421 outputContainer->Add(fhJetChBkgEnergyVsArea);
423 fhJetRhoVsPt = new TH2F("JetRhoVsPt","JetRhoVsPt",100,0,100,100,0,150);
424 fhJetRhoVsPt->SetYTitle("Rho");
425 fhJetRhoVsPt->SetXTitle("p_{T,jet} (GeV/c)");
426 outputContainer->Add(fhJetRhoVsPt);
428 if(IsHistogramJetBkg()){
429 fhJetRhoVsCentrality = new TH2F("JetRhoVsCentrality","JetRhoVsCentrality",100,0,100,100,0,200);
430 fhJetRhoVsCentrality->SetYTitle("Rho");
431 fhJetRhoVsCentrality->SetXTitle("Centrality");
432 outputContainer->Add(fhJetRhoVsCentrality);
435 fhJetNparticlesInJet = new TH1F("JetNparticlesInJet","JetNparticlesInJet",100,0,200);
436 fhJetNparticlesInJet->SetXTitle("N^{particles}");
437 fhJetNparticlesInJet->SetYTitle("N^{jets}");
438 outputContainer->Add(fhJetNparticlesInJet);
440 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);
441 fhJetDeltaEtaDeltaPhi->SetXTitle("#Delta #eta^{jet-track}");
442 fhJetDeltaEtaDeltaPhi->SetYTitle("#Delta #phi^{jet-track}");
443 outputContainer->Add(fhJetDeltaEtaDeltaPhi );
446 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);
447 fhJetDeltaEtaDeltaPhiAllTracks->SetXTitle("#Delta #eta^{jet-track}");
448 fhJetDeltaEtaDeltaPhiAllTracks->SetYTitle("#Delta #phi^{jet-track}");
449 outputContainer->Add(fhJetDeltaEtaDeltaPhiAllTracks);
452 if(IsHistogramJetTracks()){
453 fhJetAveTrackPt = new TH1F("JetAveTrackPt","JetAveTrackPt",45,0.,1.5);
454 fhJetAveTrackPt->SetXTitle("Average p_{T,track} (GeV/c)");
455 fhJetAveTrackPt->SetYTitle("Counts");
456 outputContainer->Add(fhJetAveTrackPt);
458 for(Int_t i=0;i<6;i++){
459 if(i==0) fhJetNtracksInJetAboveThr[i] = new TH2F(Form("JetNtracksInJetAboveThr%d", i),Form("JetNtracksInJetAboveThr%d", i),100,0,100,100,0,200);
460 else fhJetNtracksInJetAboveThr[i] = new TH2F(Form("JetNtracksInJetAboveThr%d", i),Form("JetNtracksInJetAboveThr%d", i),100,0,100,100,0,100);
461 fhJetNtracksInJetAboveThr[i]->SetXTitle("p_{T,jet} (GeV/c)");
462 fhJetNtracksInJetAboveThr[i]->SetYTitle("N_{tracks} over threshold");
463 outputContainer->Add(fhJetNtracksInJetAboveThr[i]);
466 for(Int_t i=0;i<5;i++){
467 fhJetRatioNTrkAboveToNTrk[i] = new TH2F(Form("JetRatioNTrkAboveToNTrk%d", i),Form("JetRatioNTrkAboveToNTrk%d", i),100,0,100,40,0,1);
468 fhJetRatioNTrkAboveToNTrk[i]->SetXTitle("p_{T,jet} (GeV/c)");
469 fhJetRatioNTrkAboveToNTrk[i]->SetYTitle("Ratio N_{tracks} over threshold to N_{tracks}");
470 outputContainer->Add(fhJetRatioNTrkAboveToNTrk[i]);
472 fhJetNtrackRatioMostEne[i] = new TH2F(Form("JetNtrackRatioMostEne%d", i),Form("JetNtrackRatioMostEne%d", i),100,0,100,40,0,1);
473 fhJetNtrackRatioMostEne[i]->SetXTitle("p_{T,jet} (GeV/c)");
474 fhJetNtrackRatioMostEne[i]->SetYTitle("Ratio N_{tracks} over threshold to N_{tracks}");
475 outputContainer->Add(fhJetNtrackRatioMostEne[i]);
477 fhJetNtrackRatioJet5GeV[i] = new TH2F(Form("JetNtrackRatioJet5GeV%d", i),Form("JetNtrackRatioJet5GeV%d", i),100,0,100,40,0,1);
478 fhJetNtrackRatioJet5GeV[i]->SetXTitle("p_{T,jet} (GeV/c)");
479 fhJetNtrackRatioJet5GeV[i]->SetYTitle("Ratio N_{tracks} over threshold to N_{tracks}");
480 outputContainer->Add(fhJetNtrackRatioJet5GeV[i]);
482 fhJetNtrackRatioLead5GeV[i] = new TH2F(Form("JetNtrackRatioLead5GeV%d", i),Form("JetNtrackRatioLead5GeV%d", i),100,0,100,40,0,1);
483 fhJetNtrackRatioLead5GeV[i]->SetXTitle("p_{T,jet} (GeV/c)");
484 fhJetNtrackRatioLead5GeV[i]->SetYTitle("Ratio N_{tracks} over threshold to N_{tracks}");
485 outputContainer->Add(fhJetNtrackRatioLead5GeV[i]);
487 }//end of if IsHistogramJetTracks
489 //temporary background jets histograms
490 if(IsHistogramJetBkg()){
491 for(Int_t i=0;i<4;i++){
492 fhBkgJetBackground[i] = new TH1F(Form("BkgJetBackground%d", i),Form("BkgJetBackground%d", i),100,0,200);
493 fhBkgJetBackground[i]->SetXTitle("<#rho> (GeV/c)");
494 fhBkgJetBackground[i]->SetYTitle("Counts");
495 outputContainer->Add(fhBkgJetBackground[i]);
497 fhBkgJetSigma[i] = new TH1F(Form("BkgJetSigma%d", i),Form("BkgJetSigma%d", i),100,0,50);
498 fhBkgJetSigma[i]->SetXTitle("#sigma (GeV/c)");
499 fhBkgJetSigma[i]->SetYTitle("Counts");
500 outputContainer->Add(fhBkgJetSigma[i]);
502 fhBkgJetArea[i] = new TH1F(Form("BkgJetArea%d", i),Form("BkgJetArea%d", i),100,0,1);
503 fhBkgJetArea[i]->SetXTitle("<A>");
504 fhBkgJetArea[i]->SetYTitle("Counts");
505 outputContainer->Add(fhBkgJetArea[i]);
509 //temporary photon histograms
510 fhPhotonPtMostEne = new TH1F("PhotonPtMostEne","PhotonPtMostEne",100,0,100);
511 fhPhotonPtMostEne->SetYTitle("Counts");
512 fhPhotonPtMostEne->SetXTitle("p_{T,#gamma} (GeV/c)");
513 outputContainer->Add(fhPhotonPtMostEne);
515 // fhPhotonIndexMostEne = new TH1F("PhotonIndexMostEne","PhotonIndexMostEne",100,0,100);
516 // fhPhotonIndexMostEne->SetYTitle("Counts");
517 // fhPhotonIndexMostEne->SetXTitle("Index");
518 // outputContainer->Add(fhPhotonIndexMostEne);
520 fhPhotonAverageEnergy = new TH1F("PhotonAverageEnergy","PhotonAverageEnergy",100,0,10);
521 fhPhotonAverageEnergy->SetYTitle("Counts");
522 fhPhotonAverageEnergy->SetXTitle("p_{T,#gamma} (GeV/c)");
523 outputContainer->Add(fhPhotonAverageEnergy);
525 fhPhotonRatioAveEneToMostEne = new TH1F("PhotonRatioAveEneToMostEne","PhotonRatioAveEneToMostEne",100,0,1);
526 fhPhotonRatioAveEneToMostEne->SetYTitle("Counts");
527 fhPhotonRatioAveEneToMostEne->SetXTitle("Ratio");
528 outputContainer->Add(fhPhotonRatioAveEneToMostEne);
530 fhPhotonAverageEnergyMinus1 = new TH1F("PhotonAverageEnergyMinus1","PhotonAverageEnergyMinus1",100,0,10);
531 fhPhotonAverageEnergyMinus1->SetYTitle("Counts");
532 fhPhotonAverageEnergyMinus1->SetXTitle("p_{T,#gamma} (GeV/c)");
533 outputContainer->Add(fhPhotonAverageEnergyMinus1);
535 fhPhotonRatioAveEneMinus1ToMostEne = new TH1F("PhotonRatioAveEneMinus1ToMostEne","PhotonRatioAveEneMinus1ToMostEne",100,0,1);
536 fhPhotonRatioAveEneMinus1ToMostEne->SetYTitle("Counts");
537 fhPhotonRatioAveEneMinus1ToMostEne->SetXTitle("Ratio");
538 outputContainer->Add(fhPhotonRatioAveEneMinus1ToMostEne);
540 fhPhotonNgammaMoreAverageToNgamma = new TH1F("PhotonNgammaMoreAverageToNgamma","PhotonNgammaMoreAverageToNgamma",100,0,1);
541 fhPhotonNgammaMoreAverageToNgamma->SetYTitle("Counts");
542 fhPhotonNgammaMoreAverageToNgamma->SetXTitle("Ratio");
543 outputContainer->Add(fhPhotonNgammaMoreAverageToNgamma);
545 fhPhotonNgammaMoreAverageMinus1ToNgamma = new TH1F("PhotonNgammaMoreAverageMinus1ToNgamma","PhotonNgammaMoreAverageMinus1ToNgamma",100,0,1);
546 fhPhotonNgammaMoreAverageMinus1ToNgamma->SetYTitle("Counts");
547 fhPhotonNgammaMoreAverageMinus1ToNgamma->SetXTitle("Ratio");
548 outputContainer->Add(fhPhotonNgammaMoreAverageMinus1ToNgamma);
550 for(Int_t i=0;i<10;i++){
551 fhPhotonNgammaOverPtCut[i] = new TH1F(Form("PhotonNgammaOverPtCut%d",i),Form("PhotonNgammaOverPtCut%d",i),100,0,100);
552 fhPhotonNgammaOverPtCut[i]->SetYTitle("Counts");
553 fhPhotonNgammaOverPtCut[i]->SetXTitle("N_{#gamma} over threshold");
554 outputContainer->Add(fhPhotonNgammaOverPtCut[i]);
557 fhPhotonBkgRhoVsNtracks = new TH2F("PhotonBkgRhoVsNtracks","PhotonBkgRhoVsNtracks",200,0,2500,75,0,1.5);
558 //fhPhotonBkgRhoVsNtracks->SetXTitle("Counts");
559 fhPhotonBkgRhoVsNtracks->SetXTitle("Ntracks");
560 fhPhotonBkgRhoVsNtracks->SetYTitle("Rho");
561 outputContainer->Add(fhPhotonBkgRhoVsNtracks);
563 fhPhotonBkgRhoVsNclusters = new TH2F("PhotonBkgRhoVsNclusters","PhotonBkgRhoVsNclusters",50,0,100,75,0,1.5);
564 fhPhotonBkgRhoVsNclusters->SetXTitle("Nclusters");
565 fhPhotonBkgRhoVsNclusters->SetYTitle("Rho");
566 outputContainer->Add(fhPhotonBkgRhoVsNclusters);
568 fhPhotonBkgRhoVsCentrality = new TH2F("PhotonBkgRhoVsCentrality","PhotonBkgRhoVsCentrality",100,0,100,75,0,1.5);
569 fhPhotonBkgRhoVsCentrality->SetXTitle("Centrality");
570 fhPhotonBkgRhoVsCentrality->SetYTitle("Rho");
571 outputContainer->Add(fhPhotonBkgRhoVsCentrality);
573 fhPhotonBkgRhoVsNcells = new TH2F("PhotonBkgRhoVsNcells","PhotonBkgRhoVsNcells",100,0,200,75,0,1.5);
574 fhPhotonBkgRhoVsNcells->SetXTitle("N_{cells}");
575 fhPhotonBkgRhoVsNcells->SetYTitle("Rho");
576 outputContainer->Add(fhPhotonBkgRhoVsNcells);
578 fhPhotonPt = new TH1F("PhotonPt","PhotonPt",220,-10,100);
579 fhPhotonPt->SetXTitle("p_{T,#gamma} (GeV/c)");
580 fhPhotonPt->SetYTitle("Counts");
581 outputContainer->Add(fhPhotonPt);
583 fhPhotonPtCorrected = new TH1F("PhotonPtCorrected","PhotonPtCorrected",220,-10,100);
584 fhPhotonPtCorrected->SetXTitle("p_{T,#gamma} (GeV/c)");
585 fhPhotonPtCorrected->SetYTitle("Counts");
586 outputContainer->Add(fhPhotonPtCorrected);
588 fhPhotonPtDiff = new TH1F("PhotonPtDiff","PhotonPtDiff",50,0,10);
589 fhPhotonPtDiff->SetXTitle("p_{T,#gamma} (GeV/c)");
590 fhPhotonPtDiff->SetYTitle("Counts");
591 outputContainer->Add(fhPhotonPtDiff);
593 fhPhotonPtDiffVsNtracks = new TH2F("PhotonPtDiffVsNtracks","PhotonPtDiffVsNtracks",200,0,2500,50,0,5);
594 fhPhotonPtDiffVsNtracks->SetXTitle("N_{tracks}");
595 fhPhotonPtDiffVsNtracks->SetYTitle("<#rho^{#gamma}>*N_{cells}");
596 outputContainer->Add(fhPhotonPtDiffVsNtracks);
598 fhPhotonPtDiffVsNclusters = new TH2F("PhotonPtDiffVsNclusters","PhotonPtDiffVsNclusters",50,0,100,50,0,5);
599 fhPhotonPtDiffVsNclusters->SetXTitle("N_{clusters}");
600 fhPhotonPtDiffVsNclusters->SetYTitle("<#rho^{#gamma}>*N_{cells}");
601 outputContainer->Add(fhPhotonPtDiffVsNclusters);
603 fhPhotonPtDiffVsCentrality = new TH2F("PhotonPtDiffVsCentrality","PhotonPtDiffVsCentrality",100,0,100,50,0,5);
604 fhPhotonPtDiffVsCentrality->SetXTitle("Centrality");
605 fhPhotonPtDiffVsCentrality->SetYTitle("<#rho^{#gamma}>*N_{cells}");
606 outputContainer->Add(fhPhotonPtDiffVsCentrality);
608 fhPhotonPtDiffVsNcells = new TH2F("PhotonPtDiffVsNcells","PhotonPtDiffVsNcells",100,0,200,50,0,5);
609 fhPhotonPtDiffVsNcells->SetXTitle("N_{cells}");
610 fhPhotonPtDiffVsNcells->SetYTitle("<#rho^{#gamma}>*N_{cells}");
611 outputContainer->Add(fhPhotonPtDiffVsNcells);
614 fhPhotonPtCorrectedZoom = new TH1F("PhotonPtCorrectedZoom","PhotonPtCorrectedZoom",200,-5,5);
615 fhPhotonPtCorrectedZoom->SetXTitle("p_{T,#gamma} (GeV/c)");
616 fhPhotonPtCorrectedZoom->SetYTitle("Counts");
617 outputContainer->Add(fhPhotonPtCorrectedZoom);
619 fhPhotonSumPtInCone = new TH1F("PhotonSumPtInCone","PhotonSumPtInCone",100,0,100);
620 fhPhotonSumPtInCone->SetXTitle("#Sigma p_{T,#gamma} (GeV/c)");
621 fhPhotonSumPtInCone->SetYTitle("Counts");
622 outputContainer->Add(fhPhotonSumPtInCone);
624 fhPhotonSumPtCorrectInCone = new TH1F("PhotonSumPtCorrectInCone","PhotonSumPtCorrectInCone",100,-20,80);
625 fhPhotonSumPtCorrectInCone->SetXTitle("#Sigma p_{T,#gamma} (GeV/c)");
626 fhPhotonSumPtCorrectInCone->SetYTitle("Counts");
627 outputContainer->Add(fhPhotonSumPtCorrectInCone);
629 fhPhotonSumPtChargedInCone = new TH1F("PhotonSumPtChargedInCone","PhotonSumPtChargedInCone",100,0,100);
630 fhPhotonSumPtChargedInCone->SetXTitle("#Sigma p_{T,#gamma}^{ch} (GeV/c)");
631 fhPhotonSumPtChargedInCone->SetYTitle("Counts");
632 outputContainer->Add(fhPhotonSumPtChargedInCone);
635 //temporary jet histograms after selection
636 fhSelectedJetPhiVsEta = new TH2F("SelectedJetSelectedPhiVsEta","SelectedJetPhiVsEta",65,0,6.5,50,-1,1);
637 fhSelectedJetPhiVsEta->SetYTitle("#eta_{jet}");
638 fhSelectedJetPhiVsEta->SetXTitle("#phi_{jet}");
639 outputContainer->Add(fhSelectedJetPhiVsEta) ;
641 fhSelectedJetChBkgEnergyVsPtJet = new TH2F("SelectedJetBkgChEnergyVsPtJet","SelectedJetBkgChEnergyVsPtJet",100,0,100,90,0,90);
642 fhSelectedJetChBkgEnergyVsPtJet->SetYTitle("Jet Bkg Energy (GeV)");
643 fhSelectedJetChBkgEnergyVsPtJet->SetXTitle("p_{T,jet} (GeV/c)");
644 outputContainer->Add(fhSelectedJetChBkgEnergyVsPtJet);
646 fhSelectedJetChAreaVsPtJet = new TH2F("SelectedJetChAreaVsPtJet","SelectedJetChAreaVsPtJet",100,0,100,50,0,1);
647 fhSelectedJetChAreaVsPtJet->SetYTitle("Jet Area");
648 fhSelectedJetChAreaVsPtJet->SetXTitle("p_{T,jet} (GeV/c)");
649 outputContainer->Add(fhSelectedJetChAreaVsPtJet);
651 fhSelectedJetNjet = new TH1F("SelectedJetNjet","SelectedJetNjet",100,0,100);
652 fhSelectedJetNjet->SetYTitle("Counts");
653 fhSelectedJetNjet->SetXTitle("N_{jets} per event");
654 outputContainer->Add(fhSelectedJetNjet);
656 fhSelectedNtracks = new TH1F("SelectedNtracks","SelectedNtracks",100,0,2000);
657 fhSelectedNtracks->SetYTitle("Counts");
658 fhSelectedNtracks->SetXTitle("N_{tracks} per event");
659 outputContainer->Add(fhSelectedNtracks);
661 fhSelectedTrackPhiVsEta = new TH2F("SelectedTrackPhiVsEta","SelectedTrackPhiVsEta",65,0,6.5,50,-1,1);
662 fhSelectedTrackPhiVsEta->SetYTitle("#eta_{track}");
663 fhSelectedTrackPhiVsEta->SetXTitle("#phi_{track}");
664 outputContainer->Add(fhSelectedTrackPhiVsEta) ;
666 fhCuts2 = new TH1F("Cuts2","Cuts2",10,0.,10.);
667 fhCuts2->SetYTitle("Counts");
668 fhCuts2->SetXTitle("Cut number");
669 outputContainer->Add(fhCuts2);
671 fhSelectedPhotonNLMVsPt = new TH2F("SelectedPhotonNLMVsPt","SelectedPhotonNLMVsPt",100,0,100,10,0,10);
672 fhSelectedPhotonNLMVsPt->SetYTitle("NLM");
673 fhSelectedPhotonNLMVsPt->SetXTitle("p_{T,#gamma} (GeV/c)");
674 outputContainer->Add(fhSelectedPhotonNLMVsPt);
676 fhSelectedPhotonLambda0VsPt = new TH2F("SelectedPhotonLambda0VsPt","SelectedPhotonLambda0VsPt",100,0,100,50,0,5);
677 fhSelectedPhotonLambda0VsPt->SetYTitle("#lambda_{0}");
678 fhSelectedPhotonLambda0VsPt->SetXTitle("p_{T,#gamma} (GeV/c)");
679 outputContainer->Add(fhSelectedPhotonLambda0VsPt);
682 fhRandomPhiEta[0] = new TH2F("RandomPhiEtaRC", "RandomPhiEtaRC", 100,0,6.5,100,-1.,1.);
683 fhRandomPhiEta[1] = new TH2F("RandomPhiEtaPCG", "RandomPhiEtaPerpConePhoton",100,0,6.5,100,-1.,1.);
684 fhRandomPhiEta[2] = new TH2F("RandomPhiEtaPCJ", "RandomPhiEtaPerpConeJet", 100,0,6.5,100,-1.,1.);
685 fhRandomPhiEta[3] = new TH2F("RandomPhiEtaMP", "RandomPhiEtaMidPoint", 100,0,6.5,100,-1.,1.);
686 fhRandomPhiEta[4] = new TH2F("RandomPhiEtaTest","RandomPhiEtaTest", 100,0,6.5,100,-1.,1.);
687 for(Int_t i=0;i<5;i++){
688 fhRandomPhiEta[i]->SetXTitle("#phi");
689 fhRandomPhiEta[i]->SetYTitle("#eta");
690 outputContainer->Add(fhRandomPhiEta[i]);
696 fTreeGJ=new TTree("fTreeGJ","fTreeGJ");
697 fTreeGJ->Branch("fGamPt" ,&fGamPt ,"fGamPt/D");//! fGamPt
698 fTreeGJ->Branch("fGamLambda0" ,&fGamLambda0 ,"fGamLambda0/D");
699 fTreeGJ->Branch("fGamNLM" ,&fGamNLM ,"fGamNLM/I");
700 fTreeGJ->Branch("fGamSumPtCh" ,&fGamSumPtCh ,"fGamSumPtCh/D");
701 fTreeGJ->Branch("fGamNtracks" ,&fGamNtracks ,"fGamNtracks/I");
702 fTreeGJ->Branch("fGamTime" ,&fGamTime ,"fGamTime/D");
703 fTreeGJ->Branch("fGamNcells" ,&fGamNcells ,"fGamNcells/I");
704 fTreeGJ->Branch("fGamEta" ,&fGamEta ,"fGamEta/D");
705 fTreeGJ->Branch("fGamPhi" ,&fGamPhi ,"fGamPhi/D");
706 fTreeGJ->Branch("fGamSumPtNeu",&fGamSumPtNeu ,"fGamSumPtNeu/D");
707 fTreeGJ->Branch("fGamNclusters" ,&fGamNclusters ,"fGamNclusters/I");
708 fTreeGJ->Branch("fGamAvEne" ,&fGamAvEne ,"fGamAvEne/D");
709 fTreeGJ->Branch("fJetPhi" ,&fJetPhi ,"fJetPhi/D");
710 fTreeGJ->Branch("fJetEta" ,&fJetEta ,"fJetEta/D");
711 fTreeGJ->Branch("fJetPt" ,&fJetPt ,"fJetPt/D");
712 fTreeGJ->Branch("fJetBkgChEne",&fJetBkgChEne ,"fJetBkgChEne/D");
713 fTreeGJ->Branch("fJetArea" ,&fJetArea ,"fJetArea/D");
714 fTreeGJ->Branch("fJetNtracks" ,&fJetNtracks ,"fJetNtracks/I");
715 fTreeGJ->Branch("fJetNtracks1" ,&fJetNtracks1 ,"fJetNtracks1/I");
716 fTreeGJ->Branch("fJetNtracks2" ,&fJetNtracks2 ,"fJetNtracks2/I");
717 fTreeGJ->Branch("fJetRho" ,&fJetRho ,"fJetRho/D");
718 fTreeGJ->Branch("fEventNumber",&fEventNumber ,"fEventNumber/I");
719 fTreeGJ->Branch("fNtracks" ,&fNtracks ,"fNtracks/I");
720 fTreeGJ->Branch("fZvertex" ,&fZvertex ,"fZvertex/D");
721 fTreeGJ->Branch("fCentrality" ,&fCentrality ,"fCentrality/D");
722 fTreeGJ->Branch("fIso" ,&fIso ,"fIso/O");
723 fTreeGJ->Branch("fGamRho" ,&fGamRho ,"fGamRho/D");
725 outputContainer->Add(fTreeGJ);
728 return outputContainer;
732 //_______________________________________________________
733 void AliAnaParticleJetFinderCorrelation::InitParameters()
735 // printf("InitParameters\n");
736 //Initialize the parameters of the analysis.
737 SetInputAODName("PWG4Particle");
738 AddToHistogramsName("AnaJetFinderCorr_");
740 fDeltaPhiMinCut = 1.5 ;
741 fDeltaPhiMaxCut = 4.5 ;
745 fPtThresholdInCone = 0.5 ;
746 fUseJetRefTracks = kFALSE ;
747 fMakeCorrelationInHistoMaker = kFALSE ;
748 fSelectIsolated = kFALSE;
750 fJetMinPt = 5 ; //GeV/c
751 fJetAreaFraction = 0.6 ;
752 fJetBranchName = "jets";
753 fBkgJetBranchName = "jets";
754 fGammaConeSize = 0.3;
755 fUseBackgroundSubtractionGamma = kFALSE;
757 fMostEnergetic = kFALSE;
758 fMostOpposite = kTRUE;
759 fUseHistogramJetBkg = kTRUE;
760 fUseHistogramTracks = kTRUE;
761 fUseHistogramJetTracks = kTRUE;
765 //__________________________________________________________________
766 Int_t AliAnaParticleJetFinderCorrelation::SelectJet(AliAODPWG4Particle * particle, TClonesArray *aodRecJets)
768 //Input for jets is TClonesArray *aodRecJets
769 //Returns the index of the jet that is opposite to the particle
770 // printf(" SelectJet ");
772 Double_t particlePt=particle->Pt();
773 if(fUseBackgroundSubtractionGamma) {
774 Int_t clusterIDtmp = particle->GetCaloLabel(0) ;
776 AliVCluster *cluster=0;
777 if(!(clusterIDtmp<0) ){
779 TObjArray* clusters = GetEMCALClusters();
780 cluster = FindCluster(clusters,clusterIDtmp,iclustmp);
781 nCells = cluster->GetNCells();
783 particlePt-=(fGamRho*nCells);
786 //printf("Particle with negative or 0 pt\n");
790 Int_t njets = aodRecJets->GetEntriesFast();
791 AliAODJet * jet = 0 ;
793 Double_t dphiprev= 10000;
794 Double_t particlePhi=particle->Phi();
795 Double_t deltaPhi=-10000.;// in the range (0; 2*pi)
798 for(Int_t ijet = 0; ijet < njets ; ijet++){
799 jet = dynamic_cast<AliAODJet*>(aodRecJets->At(ijet));
800 fhCuts2->Fill(2.,1.);
802 if(fBackgroundJetFromReader ){
803 jetPt-= (fJetRho * jet->EffectiveAreaCharged() );
805 if(jetPt<0.) continue;
806 //put jet eta requirement here |eta_jet|<0.9-jet_cone_size
807 fhCuts2->Fill(3.,1.);
808 if(TMath::Abs(jet->Eta()) > (0.9 - fJetConeSize) ) continue;
809 fhCuts2->Fill(4.,1.);
810 // if(jet->Pt()<5) continue;
811 if(jetPt<fJetMinPt) continue;
812 fhCuts2->Fill(5.,1.);
813 if(jet->EffectiveAreaCharged()<fJetAreaFraction*TMath::Pi()*fJetConeSize*fJetConeSize) continue;
814 fhCuts2->Fill(6.,1.);
815 //printf("jet found\n");
816 Double_t deltaPhi0pi = TMath::Abs(particle->Phi()-jet->Phi());
817 Double_t ratio = jetPt/particlePt;
819 deltaPhi = particlePhi - jet->Phi() ;
820 if ( deltaPhi0pi > TMath::Pi() ) deltaPhi0pi = 2. * TMath::Pi() - deltaPhi0pi ;
821 if(deltaPhi<0) deltaPhi +=(TMath::Pi()*2.);
823 fhDeltaPtBefore ->Fill(particlePt, particlePt - jetPt);
824 fhDeltaPhiBefore->Fill(particlePt, deltaPhi);
825 fhDeltaEtaBefore->Fill(particlePt, particle->Eta() - jet->Eta());
826 fhPtRatioBefore ->Fill(particlePt, jetPt/particlePt);
827 fhPtBefore ->Fill(particlePt, jetPt);
829 fhDeltaPhi0PiCorrectBefore->Fill(particlePt, deltaPhi0pi);//good
832 printf("AliAnaParticleJetFinderCorrelation::SelectJet() - Jet %d, Ratio pT %2.3f, Delta phi %2.3f\n",ijet,ratio,deltaPhi);
834 if((deltaPhi > fDeltaPhiMinCut) && (deltaPhi < fDeltaPhiMaxCut) &&
835 (ratio > fRatioMinCut) && (ratio < fRatioMaxCut) &&
836 (TMath::Abs(deltaPhi-TMath::Pi()) < TMath::Abs(dphiprev-TMath::Pi()) )){//In case there is more than one jet select the most opposite.
846 //__________________________________________________________________
847 void AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD()
849 //Particle-Jet Correlation Analysis, fill AODs
850 // printf("I use MakeAnalysisFillAOD\n");
851 //Get the event, check if there are AODs available, if not, skip this analysis
852 AliAODEvent * event = NULL;
854 // cout<<"GetReader()->GetOutputEvent() "<<GetReader()->GetOutputEvent()<<endl;
855 // cout<<"GetReader()->GetDataType() "<<GetReader()->GetDataType() <<endl;
856 // cout<<"AliCaloTrackReader::kAOD "<<AliCaloTrackReader::kAOD<<endl;
857 // cout<<"GetReader()->GetInputEvent() "<<GetReader()->GetInputEvent()<<endl;
859 if(GetReader()->GetOutputEvent())
861 event = dynamic_cast<AliAODEvent*>(GetReader()->GetOutputEvent());
863 else if(GetReader()->GetDataType() == AliCaloTrackReader::kAOD)
865 event = dynamic_cast<AliAODEvent*>(GetReader()->GetInputEvent());
869 if(GetDebug() > 3) printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - There are no jets available for this analysis\n");
873 if(!GetInputAODBranch() || !event){
874 printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - No input particles in AOD with name branch < %s > \n",GetInputAODName().Data());
878 if(strcmp(GetInputAODBranch()->GetClass()->GetName(), "AliAODPWG4ParticleCorrelation")){
879 printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - Wrong type of AOD object, change AOD class name in input AOD: It should be <AliAODPWG4ParticleCorrelation> and not <%s> \n",GetInputAODBranch()->GetClass()->GetName());
887 TClonesArray *aodRecJets = 0;
888 if(IsNonStandardJetFromReader()){//jet branch from reader
889 if(GetDebug() > 3) printf("GetNonStandardJets function (from reader) is called\n");
890 aodRecJets = GetNonStandardJets();
891 if(GetDebug() > 3) printf("aodRecJets %p\n",aodRecJets);
893 if(GetDebug() > 3) event->Print();
896 nJets=aodRecJets->GetEntries();
897 if(GetDebug() > 3) printf("nJets %d\n",nJets);
902 //printf("Why number of jets = 0? Check what type of collision it is. If PbPb -problem.\n");
909 AliAODJetEventBackground* aodBkgJets = 0;
910 if(IsBackgroundJetFromReader()){//jet branch from reader
911 if(GetDebug() > 3) printf("GetBackgroundJets function is called\n");
912 aodBkgJets = GetBackgroundJets();
913 if(GetDebug() > 3) printf("aodBkgJets %p\n",aodBkgJets);
915 if(GetDebug() > 3) event->Print();
918 if(GetDebug() > 3) aodBkgJets->Print("c");
921 Double_t rhoEvent=0.;
922 if(aodBkgJets && IsBackgroundJetFromReader() ) {
923 rhoEvent = aodBkgJets->GetBackground(2);//hardcoded
928 Int_t ntrig = GetInputAODBranch()->GetEntriesFast() ;
930 printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - Begin jet finder correlation analysis, fill AODs \n");
931 printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - In particle branch aod entries %d\n", ntrig);
932 printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - In standard jet branch aod entries %d\n", event->GetNJets());
933 printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - In non standard jet branch aod entries %d\n", nJets);
936 //if(nJets==0) return;//to speed up
937 // cout<<"ntrig po return "<<ntrig<<endl;
940 //calculate average cell energy without most energetic photon
942 Double_t medianPhotonRho=0.;
943 TObjArray* clusters = GetEMCALClusters();
946 AliVCluster *cluster=0;
948 if(IsBackgroundSubtractionGamma()){
950 // Find most energetic photon without background subtraction
954 AliAODPWG4ParticleCorrelation* particlecorr =0;
955 for(Int_t iaod = 0; iaod < ntrig ; iaod++){
956 particlecorr = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
957 if(particlecorr->Pt() > maxPt) {
958 maxPt = particlecorr->Pt();
964 // calculate background energy per cell
966 Int_t numberOfcells=0;
968 Double_t *photonRhoArr=new Double_t[ntrig-1];
969 Int_t photonRhoArrayIndex=0;
970 for(Int_t iaod = 0; iaod < ntrig ; iaod++){
971 particlecorr = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
972 if(iaod==maxIndex) continue;
973 clusterIDtmp = particlecorr->GetCaloLabel(0) ;
974 if(clusterIDtmp < 0) continue;
975 cluster = FindCluster(clusters,clusterIDtmp,iclustmp);
976 photonRhoArr[photonRhoArrayIndex]=particlecorr->Pt()/ cluster->GetNCells();
977 numberOfcells+=cluster->GetNCells();
978 photonRhoArrayIndex++;
980 if(photonRhoArrayIndex>0) medianPhotonRho=TMath::Median(photonRhoArrayIndex,photonRhoArr);
983 }//end of if background calculation for gamma
984 fGamRho = medianPhotonRho;
988 //take most energetic photon and most energetic jet and combine
992 // most energetic photon with background subtraction
994 Double_t mostEnePhotonPt=0.;
995 Int_t indexMostEnePhoton=-1;
996 AliAODPWG4ParticleCorrelation* particle =0;
997 Double_t ptCorrect=0.;
999 for(Int_t iaod = 0; iaod < ntrig ; iaod++){
1000 particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1001 clusterIDtmp = particle->GetCaloLabel(0) ;
1002 if(!(clusterIDtmp<0)){
1003 cluster = FindCluster(clusters,clusterIDtmp,iclustmp);
1004 nCells = cluster->GetNCells();
1006 ptCorrect = particle->Pt() - medianPhotonRho * nCells;
1007 if( ptCorrect > mostEnePhotonPt ){
1008 mostEnePhotonPt = ptCorrect;
1009 indexMostEnePhoton = iaod ;
1012 // printf ("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - Photon with index %d selected \n",indexMostEnePhoton);
1014 // most energetic jet with background subtraction
1016 Double_t mostEneJetPt=0.;
1017 Int_t indexMostEneJet=-1;
1018 AliAODJet * jet = 0 ;
1019 //Double_t ptCorrect=0.;
1020 for(Int_t ijet = 0; ijet < nJets ; ijet++){
1021 jet = dynamic_cast<AliAODJet*>(aodRecJets->At(ijet));
1022 if(TMath::Abs(jet->Eta()) > (0.9 - fJetConeSize) ) continue;
1023 if(jet->EffectiveAreaCharged()<fJetAreaFraction*TMath::Pi()*fJetConeSize*fJetConeSize) continue;
1024 if(jet->Pt()<fJetMinPt) continue;
1025 ptCorrect = jet->Pt() - rhoEvent * jet->EffectiveAreaCharged();
1026 if(ptCorrect > mostEneJetPt){
1027 mostEneJetPt = ptCorrect;
1028 indexMostEneJet = ijet;
1031 // printf ("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - Jet with index %d selected \n",indexMostEneJet);
1034 // assign jet to photon
1036 if(indexMostEneJet>=0 && indexMostEnePhoton>=0){
1037 particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(indexMostEnePhoton));
1038 jet = dynamic_cast<AliAODJet*>(aodRecJets-> At(indexMostEneJet));
1039 particle->SetRefJet(jet);
1041 }//end of take most energetic photon and most ene. jet after bkg subtraction
1044 //Bool_t isJetFound=kFALSE;//new
1045 //Loop on stored AOD particles, trigger
1046 for(Int_t iaod = 0; iaod < ntrig ; iaod++){
1047 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1049 //Correlate with jets
1050 Int_t ijet = SelectJet(particle,aodRecJets);//input for jets is TClonesArray
1053 if(GetDebug() > 2) printf ("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - Jet with index %d selected \n",ijet);
1054 AliAODJet *jet = dynamic_cast<AliAODJet*>(aodRecJets-> At(ijet));
1055 particle->SetRefJet(jet);
1056 //printf("Most opposite found\n");
1059 // if(GetReader()->WriteDeltaAODToFile() && isJetFound) WriteJetsToOutputBranch(aodRecJets);
1060 }//end of take most opposite photon and jet after bkg subtraction
1063 if(GetDebug() > 1 ) printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - End fill AODs \n");
1066 //__________________________________________________________________
1067 void AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms()
1069 //Particle-Jet Correlation Analysis, fill histograms
1070 if(GetDebug() > 3 ) {
1071 printf("I use MakeAnalysisFillHistograms\n");
1072 printf("ntracks before iso %d\n",GetCTSTracks()->GetEntriesFast() );
1075 //Get the event, check if there are AODs available, if not, skip this analysis
1076 AliAODEvent * event = NULL;
1078 //printf("GetReader()->GetOutputEvent() %d\n",GetReader()->GetOutputEvent() );
1079 //printf("GetReader()->GetDataType() %d\n",GetReader()->GetDataType() );
1080 //printf("AliCaloTrackReader::kAOD %d\n",AliCaloTrackReader::kAOD );
1081 //printf("GetReader()->GetInputEvent() %d\n",GetReader()->GetInputEvent() );
1083 if(GetReader()->GetOutputEvent())
1085 event = dynamic_cast<AliAODEvent*>(GetReader()->GetOutputEvent());
1087 else if(GetReader()->GetDataType() == AliCaloTrackReader::kAOD)
1089 event = dynamic_cast<AliAODEvent*>(GetReader()->GetInputEvent());
1092 if(GetDebug() > 3) printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - There are no jets available for this analysis\n");
1096 if(!GetInputAODBranch() || !event){
1097 printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - No input particles in AOD with name branch < %s > \n",GetInputAODName().Data());
1102 TClonesArray *aodRecJets = 0;
1103 if(IsNonStandardJetFromReader()){//branch read in reader from reader
1104 if (GetDebug() > 3) printf("GetNonStandardJets function (from reader) is called\n");
1105 aodRecJets = GetNonStandardJets();
1106 if(aodRecJets==0x0){
1107 if(GetDebug() > 3) event->Print();
1110 nJets=aodRecJets->GetEntries();
1113 // printf("Why number of jets = 0? Check what type of collision it is. If PbPb -problem.\n");
1114 GetReader()->FillInputNonStandardJets();
1115 aodRecJets = GetNonStandardJets();
1116 nJets=aodRecJets->GetEntries();
1117 // printf("nJets = %d\n",nJets);
1124 AliAODJetEventBackground* aodBkgJets = 0;
1125 if(IsBackgroundJetFromReader()){//jet branch from reader
1126 if(GetDebug() > 3) printf("GetBackgroundJets function is called\n");
1127 aodBkgJets = GetBackgroundJets();
1128 if(GetDebug() > 3) printf("aodBkgJets %p\n",aodBkgJets);
1129 if(aodBkgJets==0x0){
1130 if(GetDebug() > 3) event->Print();
1133 if(GetDebug() > 3) aodBkgJets->Print("c");
1138 // only background jets informations
1140 // Float_t pTback = 0;
1141 Double_t rhoEvent=0.;
1143 if(IsBackgroundJetFromReader() ) rhoEvent = aodBkgJets->GetBackground(2);
1144 if(IsHistogramJetBkg()) {
1145 fhJetRhoVsCentrality->Fill(GetEventCentrality(),rhoEvent);
1146 for(Int_t i=0;i<4;i++){
1147 fhBkgJetBackground[i]->Fill(aodBkgJets->GetBackground(i));
1148 fhBkgJetSigma[i]->Fill(aodBkgJets->GetSigma(i));
1149 fhBkgJetArea[i]->Fill(aodBkgJets->GetMeanarea(i));
1151 }//end of if fill HistogramJetBkg
1152 }//end if aodBkgJets exists
1155 //only track information
1157 Int_t nCTSTracks = GetCTSTracks()->GetEntriesFast();
1158 AliAODTrack *aodtrack;
1160 if(IsHistogramTracks()) {
1161 Double_t sumTrackPt=0;
1162 for(itrack = 0; itrack < nCTSTracks ; itrack++){
1163 aodtrack = dynamic_cast <AliAODTrack*>(GetCTSTracks()->At(itrack));
1164 fhTrackPhiVsEta->Fill(aodtrack->Phi(),aodtrack->Eta());
1165 sumTrackPt+=aodtrack->Pt();
1168 fhTrackAveTrackPt->Fill(sumTrackPt/nCTSTracks);
1169 }//end if IsHistogramTracks
1172 //only jet informations
1174 AliAODJet * jettmp = 0 ;
1175 Double_t jetPttmp = 0.;
1176 Double_t var1tmp = 0.;
1177 Double_t var2tmp = 0.;
1178 // fhJetNjet->Fill(nJets);
1179 Double_t ptMostEne=0;
1180 // Int_t indexMostEne=-1;
1181 Int_t nJetsOverThreshold[10]={nJets,0,0,0,0,0,0,0,0,0};
1183 Double_t sumJetTrackPt=0.;
1184 Int_t sumNJetTrack=0;
1185 Int_t nTracksInJet=0;
1187 for(Int_t ijet = 0; ijet < nJets ; ijet++){
1188 jettmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ijet));
1189 fhJetPtBefore->Fill(jettmp->Pt());
1190 jetPttmp = jettmp->Pt() - rhoEvent * jettmp->EffectiveAreaCharged();//<<---changed here
1192 //calculate number of tracks above 1,2,3,4,5 GeV in jet
1193 AliVTrack* jettrack = 0x0 ;
1195 Int_t nTrackThrGeV[5]={0,0,0,0,0};
1196 nTracksInJet=(jettmp->GetRefTracks())->GetEntriesFast();
1197 fhJetNparticlesInJet->Fill(nTracksInJet);
1198 if(nTracksInJet==0) continue;
1199 sumNJetTrack+=nTracksInJet;
1200 for(itrack=0;itrack<nTracksInJet;itrack++){
1201 jettrack=(AliVTrack *) ((jettmp->GetRefTracks())->At(itrack));
1202 if(!jettrack) continue;
1204 fhJetDeltaEtaDeltaPhi->Fill(jettmp->Eta()-jettrack->Eta(),jettmp->Phi()-jettrack->Phi());
1205 sumJetTrackPt+=jettrack->Pt();
1206 if(IsHistogramJetTracks()){
1207 if(jettrack->Pt()>1.) nTrackThrGeV[0]++;
1208 if(jettrack->Pt()>2.) nTrackThrGeV[1]++;
1209 if(jettrack->Pt()>3.) nTrackThrGeV[2]++;
1210 if(jettrack->Pt()>4.) nTrackThrGeV[3]++;
1211 if(jettrack->Pt()>5.) nTrackThrGeV[4]++;
1212 }//end of if IsHistogramJetTracks
1213 }//end of jet track loop
1214 //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]);
1216 for(itrack = 0; itrack < nCTSTracks ; itrack++){
1217 aodtrack = dynamic_cast <AliAODTrack*>(GetCTSTracks()->At(itrack));
1218 fhJetDeltaEtaDeltaPhiAllTracks->Fill(jettmp->Eta()-aodtrack->Eta(),jettmp->Phi()-aodtrack->Phi());
1222 if(IsHistogramJetTracks()){
1223 fhJetNtracksInJetAboveThr[0]->Fill(jetPttmp,nTracksInJet);//all jets
1225 for(itrk=0;itrk<5;itrk++) {
1226 fhJetNtracksInJetAboveThr[itrk+1]->Fill(jetPttmp,nTrackThrGeV[itrk]);//all jets
1227 fhJetRatioNTrkAboveToNTrk[itrk]->Fill(jetPttmp,(Double_t)nTrackThrGeV[itrk]/(Double_t)nTracksInJet);//all jets
1229 if(ijet==0){//most ene jet
1230 for(itrk=0;itrk<5;itrk++)
1231 fhJetNtrackRatioMostEne[itrk]->Fill(jetPttmp,(Double_t)nTrackThrGeV[itrk]/(Double_t)nTracksInJet);
1233 if(jetPttmp>5){//jet with pt>5GeV/c
1234 for(itrk=0;itrk<5;itrk++)
1235 fhJetNtrackRatioJet5GeV[itrk]->Fill(jetPttmp,(Double_t)nTrackThrGeV[itrk]/(Double_t)nTracksInJet);
1237 if(nTrackThrGeV[4]>0){//jet with leading particle pt>5GeV/c
1238 for(itrk=0;itrk<5;itrk++)
1239 fhJetNtrackRatioLead5GeV[itrk]->Fill(jetPttmp,(Double_t)nTrackThrGeV[itrk]/(Double_t)nTracksInJet);
1241 }//end of if IsHistogramJetTracks
1244 Double_t effectiveChargedBgEnergy=(IsBackgroundJetFromReader()?rhoEvent * jettmp->EffectiveAreaCharged():jettmp->ChargedBgEnergy());
1247 fhJetChBkgEnergyVsArea->Fill(effectiveChargedBgEnergy,jettmp->EffectiveAreaCharged());
1248 //if(jettmp->EffectiveAreaCharged()>0)
1249 fhJetRhoVsPt->Fill(jetPttmp,jettmp->ChargedBgEnergy()*jettmp->EffectiveAreaCharged());
1251 if(jetPttmp>ptMostEne) {
1252 ptMostEne = jetPttmp;
1253 //indexMostEne=ijet;
1255 fhJetPt->Fill(jetPttmp);
1256 fhJetChBkgEnergyVsPt->Fill(jetPttmp,effectiveChargedBgEnergy);
1257 fhJetChAreaVsPt->Fill(jetPttmp,jettmp->EffectiveAreaCharged());
1258 if(GetDebug()>5) printf("ChargedBgEnergy %f EffectiveAreaCharged %f\n", jettmp->ChargedBgEnergy(),jettmp->EffectiveAreaCharged());
1259 for(iCounter=1;iCounter<10;iCounter++){
1260 if(jetPttmp>iCounter) nJetsOverThreshold[iCounter]++;
1263 var1tmp = jettmp->Phi();
1264 var2tmp = jettmp->Eta();
1265 fhJetPhi->Fill(var1tmp);
1266 fhJetEta->Fill(var2tmp);
1267 fhJetPhiVsEta->Fill(var1tmp,var2tmp);
1268 fhJetEtaVsPt->Fill(jetPttmp,var2tmp);
1269 fhJetEtaVsNpartInJet->Fill(var2tmp,nTracksInJet);
1271 fhJetEtaVsNpartInJetBkg->Fill(var2tmp,nTracksInJet);
1274 if(IsHistogramJetTracks()){
1276 //printf("average track pt %f\n",sumJetTrackPt/sumNJetTrack);
1277 fhJetAveTrackPt->Fill(sumJetTrackPt/sumNJetTrack);
1279 }//end of if IsHistogramJetTracks
1282 fhJetPtMostEne->Fill(ptMostEne);
1283 for(iCounter=0;iCounter<10;iCounter++){
1284 fhJetNjetOverPtCut[iCounter]->Fill(nJetsOverThreshold[iCounter]);
1285 nJetsOverThreshold[iCounter]=0;
1288 //end of only jet part
1293 Int_t ntrig = GetInputAODBranch()->GetEntriesFast() ;
1295 printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - Begin jet finder correlation analysis, fill histograms \n");
1296 printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - In particle branch aod entries %d\n", ntrig);
1297 printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - In jet output branch aod entries %d\n", event->GetNJets());
1299 fhNjetsNgammas->Fill(nJets,ntrig);
1301 //if(nJets==0) return;//to speed up
1302 //printf("ntrig %d, njets %d\n",ntrig,nJets);
1305 //Fill only temporary photon histograms
1311 nJetsOverThreshold[0]=ntrig;
1312 for(Int_t iaod = 0; iaod < ntrig ; iaod++){
1313 AliAODPWG4ParticleCorrelation* particlecorr = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1314 tmpPt = particlecorr->Pt();
1319 for(iCounter=1;iCounter<10;iCounter++){
1320 if(tmpPt>iCounter) nJetsOverThreshold[iCounter]++;
1324 for(iCounter=0;iCounter<10;iCounter++){
1325 fhPhotonNgammaOverPtCut[iCounter]->Fill(nJetsOverThreshold[iCounter]);
1326 // nJetsOverThreshold[iCounter]=0;
1330 TObjArray* clusters = GetEMCALClusters();
1331 //printf("calculate median bkg energy for photons ");
1332 Double_t medianPhotonRho=0.;
1334 Int_t iclustmp = -1;
1335 Int_t numberOfcells=0;
1336 AliVCluster *cluster = 0;
1338 Double_t *photonRhoArr=new Double_t[ntrig-1];
1339 fhPhotonPtMostEne->Fill(maxPt);
1340 // fhPhotonIndexMostEne->Fill(indexMaxPt);
1341 fhPhotonAverageEnergy->Fill(sumPt/ntrig);
1342 fhPhotonRatioAveEneToMostEne->Fill(sumPt/(ntrig*maxPt));
1343 fhPhotonAverageEnergyMinus1->Fill((sumPt-maxPt)/(ntrig-1));
1344 fGamAvEne=(sumPt-maxPt)/(ntrig-1);
1345 fhPhotonRatioAveEneMinus1ToMostEne->Fill((sumPt-maxPt)/((ntrig-1)*maxPt));
1347 Int_t counterGamma=0;
1348 Int_t counterGammaMinus1=0;
1350 Int_t photonRhoArrayIndex=0;
1351 //TObjArray* clusterstmp = GetEMCALClusters();
1352 for(Int_t iaod = 0; iaod < ntrig ; iaod++){
1353 AliAODPWG4ParticleCorrelation* particlecorr = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1354 if( particlecorr->Pt() > sumPt/ntrig ) counterGamma++;
1355 if( particlecorr->Pt() > (sumPt-maxPt)/(ntrig-1) ) counterGammaMinus1++;
1357 if(iaod==maxIndex) continue;
1358 clusterID = particlecorr->GetCaloLabel(0) ;
1359 if(clusterID < 0) continue;
1360 cluster = FindCluster(clusters,clusterID,iclustmp);
1361 photonRhoArr[photonRhoArrayIndex]=particlecorr->Pt()/ cluster->GetNCells();
1362 numberOfcells+=cluster->GetNCells();
1363 photonRhoArrayIndex++;
1365 if(photonRhoArrayIndex>0) medianPhotonRho=TMath::Median(photonRhoArrayIndex,photonRhoArr);
1366 delete photonRhoArr;
1367 fhPhotonNgammaMoreAverageToNgamma->Fill((Double_t)counterGamma / (Double_t)ntrig);
1368 fhPhotonNgammaMoreAverageMinus1ToNgamma->Fill((Double_t)counterGammaMinus1 / (Double_t)ntrig);
1370 //printf("median = %f\n",medianPhotonRho);
1371 fhPhotonBkgRhoVsNtracks->Fill(GetCTSTracks()->GetEntriesFast(),medianPhotonRho);
1372 fhPhotonBkgRhoVsNclusters->Fill(ntrig,medianPhotonRho);
1373 fhPhotonBkgRhoVsCentrality->Fill(GetEventCentrality(),medianPhotonRho);
1374 fhPhotonBkgRhoVsNcells->Fill(numberOfcells,medianPhotonRho);
1377 AliVCluster *cluster2 = 0;
1378 Double_t photon2Corrected=0;
1379 Double_t sumPtTmp=0.;
1380 Double_t sumPtCorrectTmp=0.;
1381 AliVTrack* trackTmp = 0x0 ;
1384 for(Int_t iaod = 0; iaod < ntrig ; iaod++){
1385 AliAODPWG4ParticleCorrelation* particlecorr = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1386 clusterID = particlecorr->GetCaloLabel(0) ;
1387 if(clusterID < 0) continue;
1388 cluster = FindCluster(clusters,clusterID,iclustmp);
1389 fhPhotonPt->Fill(particlecorr->Pt());
1390 fhPhotonPtCorrected->Fill(particlecorr->Pt() - cluster->GetNCells() * medianPhotonRho);
1391 fhPhotonPtDiff->Fill(cluster->GetNCells() * medianPhotonRho);
1392 fhPhotonPtDiffVsCentrality->Fill(GetEventCentrality(),cluster->GetNCells() * medianPhotonRho);
1393 fhPhotonPtDiffVsNcells->Fill(numberOfcells,cluster->GetNCells() * medianPhotonRho);
1394 fhPhotonPtDiffVsNtracks->Fill(GetCTSTracks()->GetEntriesFast(),cluster->GetNCells() * medianPhotonRho);
1395 fhPhotonPtDiffVsNclusters->Fill(ntrig,cluster->GetNCells() * medianPhotonRho);
1397 fhPhotonPtCorrectedZoom->Fill(particlecorr->Pt() - cluster->GetNCells() * medianPhotonRho);
1399 //test: sum_pt in the cone 0.3 for each photon
1400 //should be: random fake gamma from MB
1401 //is: each gamma for EMCEGA
1405 for(Int_t iaod2 = 0; iaod2 < ntrig ; iaod2++){
1406 if(iaod==iaod2) continue;
1407 AliAODPWG4ParticleCorrelation* particlecorr2 = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod2));
1408 clusterID = particlecorr2->GetCaloLabel(0) ;
1409 if(clusterID < 0) continue;
1410 cluster2 = FindCluster(clusters,clusterID,iclustmp);
1411 photon2Corrected = particlecorr2->Pt() - cluster2->GetNCells() * medianPhotonRho;
1413 //if(Pt()<0.5) continue; //<<hardcoded here //FIXME
1414 if( TMath::Sqrt((particlecorr->Eta()-particlecorr2->Eta())*(particlecorr->Eta()-particlecorr2->Eta()) +
1415 (particlecorr->Phi()-particlecorr2->Phi())*(particlecorr->Phi()-particlecorr2->Phi()) )<fGammaConeSize ){//if(/*cone is correct*/){
1416 sumPtTmp+= particlecorr2->Pt();
1417 sumPtCorrectTmp+=photon2Corrected;
1420 fhPhotonSumPtInCone->Fill(sumPtTmp);
1421 fhPhotonSumPtCorrectInCone->Fill(sumPtCorrectTmp);
1423 //test: sum_pt in the cone 0.3 for each track
1424 //should be: random fake gamma from MB
1425 //is: each gamma for EMCEGA
1427 for(Int_t ipr = 0;ipr < GetCTSTracks()->GetEntriesFast() ; ipr ++){
1428 trackTmp = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
1429 p3Tmp.SetXYZ(trackTmp->Px(),trackTmp->Py(),trackTmp->Pz());
1430 if( TMath::Sqrt((particlecorr->Eta()-p3Tmp.Eta())*(particlecorr->Eta()-p3Tmp.Eta()) +
1431 (particlecorr->Phi()-p3Tmp.Phi())*(particlecorr->Phi()-p3Tmp.Phi()) )<fGammaConeSize ){
1432 sumPtTmp+=p3Tmp.Pt();
1434 }//end of loop over tracks
1435 fhPhotonSumPtChargedInCone->Fill(sumPtTmp);
1438 //End of Fill temporary photon histograms
1441 // Apply background subtraction for photons
1443 fGamRho = medianPhotonRho;
1444 if(!IsBackgroundSubtractionGamma()) medianPhotonRho=0;
1448 //Get vertex for cluster momentum calculation <<----new here
1450 Double_t vertex[] = {0,0,0} ; //vertex ;
1451 if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
1452 GetReader()->GetVertex(vertex);
1453 fZvertex = vertex[2];
1456 //Loop on stored AOD particles, trigger
1458 for(Int_t iaod = 0; iaod < ntrig ; iaod++){
1459 AliAODPWG4ParticleCorrelation* particlecorr = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1461 fhCuts2->Fill(0.,(Double_t)nJets);
1462 if(GetDebug() > 5) printf("OnlyIsolated %d !particlecorr->IsIsolated() %d \n",OnlyIsolated(), !particlecorr->IsIsolated());
1464 if(OnlyIsolated() && !particlecorr->IsIsolated()) continue;
1466 fhCuts2->Fill(1.,nJets);
1472 //Recover the jet correlated, found previously.
1473 AliAODJet * jet = particlecorr->GetJet();
1474 //If correlation not made before, do it now.
1475 if(fMakeCorrelationInHistoMaker){
1476 //Correlate with jets
1477 Int_t ijet = SelectJet(particlecorr,aodRecJets);//input for jets is TClonesArray
1479 if(GetDebug() > 2) printf ("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - Jet with index %d selected \n",ijet);
1480 //jet = event->GetJet(ijet);
1481 jet = dynamic_cast<AliAODJet*>(aodRecJets-> At(ijet));
1483 particlecorr->SetRefJet(jet);
1488 if (!jet) continue ;
1490 fhCuts2->Fill(7.,1.);
1493 //Fill Correlation Histograms
1495 clusterID = particlecorr->GetCaloLabel(0) ;
1497 cluster = FindCluster(clusters,clusterID,iclustmp);
1498 //fill tree variables
1499 fGamNcells = cluster->GetNCells();
1501 Double_t ptTrig = particlecorr->Pt() - medianPhotonRho * fGamNcells;//<<---changed here
1502 Double_t ptJet = jet->Pt() - rhoEvent * jet->EffectiveAreaCharged();//<<---changed here
1503 Double_t phiTrig = particlecorr->Phi();
1504 Double_t phiJet = jet->Phi();
1505 Double_t etaTrig = particlecorr->Eta();
1506 Double_t etaJet = jet->Eta();
1507 Double_t deltaPhi=phiTrig-phiJet;
1508 if(deltaPhi<0)deltaPhi+=(TMath::Pi()*2.);
1509 //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",
1510 // ptTrig,ptJet, phiJet-phiTrig, etaJet-etaTrig, ptTrig-ptJet, ptJet/ptTrig);
1511 fhDeltaPt ->Fill(ptTrig, ptTrig-ptJet);
1512 // fhDeltaPhi->Fill(ptTrig, phiTrig-phiJet);//need to be shifted by 2pi
1514 fhDeltaPhiCorrect->Fill(ptTrig, deltaPhi);//correct
1516 Double_t deltaPhiCorrect = TMath::Abs( particlecorr->Phi() - jet->Phi() );
1517 if ( deltaPhiCorrect > TMath::Pi() ) deltaPhiCorrect = 2. * TMath::Pi() - deltaPhiCorrect ;
1518 fhDeltaPhi0PiCorrect->Fill(ptTrig, deltaPhiCorrect);
1520 fhDeltaEta->Fill(ptTrig, etaTrig-etaJet);
1521 fhPtRatio ->Fill(ptTrig, ptJet/ptTrig);
1522 fhPt ->Fill(ptTrig, ptJet);
1524 fhSelectedJetPhiVsEta->Fill(phiJet,etaJet);
1525 fhSelectedJetChBkgEnergyVsPtJet->Fill(ptJet,(IsBackgroundJetFromReader()?rhoEvent * jet->EffectiveAreaCharged():jet->ChargedBgEnergy()) );
1526 fhSelectedJetChAreaVsPtJet->Fill(ptJet,jet->EffectiveAreaCharged());
1527 fhSelectedJetNjet->Fill(nJets);
1528 fhSelectedNtracks->Fill(GetCTSTracks()->GetEntriesFast());//to be checked
1529 fhSelectedPhotonNLMVsPt->Fill(ptTrig,particlecorr->GetFiducialArea());
1533 fhSelectedPhotonLambda0VsPt->Fill(ptTrig,-1);
1534 //fill tree variables
1542 // TObjArray* clusters = GetEMCALClusters();
1543 //cluster = FindCluster(clusters,clusterID,iclustmp);
1544 Double_t lambda0=cluster->GetM02();
1545 fhSelectedPhotonLambda0VsPt->Fill(ptTrig,lambda0);
1546 //fill tree variables
1547 fGamLambda0 = lambda0;
1548 fGamTime = cluster->GetTOF();
1549 //fGamNcells = cluster->GetNCells();
1553 TLorentzVector mom ;
1555 //Double_t scalarProduct=0;
1556 //Double_t vectorLength=particlecorr->P();
1557 for(Int_t icalo=0; icalo <clusters->GetEntriesFast(); icalo++){
1558 AliVCluster* calo = (AliVCluster *) clusters->At(icalo);
1559 if(clusterID==calo->GetID()) continue;//the same cluster as trigger
1560 calo->GetMomentum(mom,vertex) ;//Assume that come from vertex in straight line
1561 //printf("min pt %f\n",GetMinPt());
1562 if(mom.Pt()<GetMinPt()) continue; //<<hardcoded here //FIXME 0.5 check if correct
1563 p3Tmp.SetXYZ(mom.Px(),mom.Py(),mom.Pz());
1564 //calculate sum pt in the cone
1565 if( TMath::Sqrt((particlecorr->Eta()-p3Tmp.Eta())*(particlecorr->Eta()-p3Tmp.Eta()) +
1566 (particlecorr->Phi()-p3Tmp.Phi())*(particlecorr->Phi()-p3Tmp.Phi()) )<fGammaConeSize ){
1567 //scalarProduct = particlecorr->Px()*mom.Px() + particlecorr->Py()*mom.Py() + particlecorr->Pz()*mom.Pz();
1568 //scalarProduct/=mom.P();
1569 //scalarProduct/=vectorLength;
1570 //if(scalarProduct>TMath::Cos(0.3)) {//FIXME photon radius
1571 fGamSumPtNeu+=mom.Pt();
1577 //sum pt of charged tracks in the gamma isolation cone
1581 for(itrack = 0; itrack < nCTSTracks ; itrack++){
1582 aodtrack = dynamic_cast <AliAODTrack*>(GetCTSTracks()->At(itrack));
1583 fhSelectedTrackPhiVsEta->Fill(aodtrack->Phi(),aodtrack->Eta());//fill histogram here
1584 // if(aodtrack->Pt()<0.15) continue;//hardcoded
1585 if(aodtrack->Pt()<fPtThresholdInCone) continue;
1586 if(!aodtrack->IsHybridGlobalConstrainedGlobal()) continue;
1587 if(TMath::Sqrt((particlecorr->Phi() - aodtrack->Phi())*(particlecorr->Phi() - aodtrack->Phi()) +
1588 (particlecorr->Eta() - aodtrack->Eta())*(particlecorr->Eta() - aodtrack->Eta()) ) <fGammaConeSize ) {
1589 fGamSumPtCh+=aodtrack->Pt();
1595 // for(Int_t itrack = 0; itrack < nCTSTracks ; itrack++){
1596 // aodtrack = dynamic_cast <AliAODTrack*>(GetCTSTracks()->At(itrack));
1597 // fhSelectedTrackPhiVsEta->Fill(aodtrack->Phi(),aodtrack->Eta());
1601 // Background Fragmentation function
1603 TVector3 gammaVector,jetVector;
1604 gammaVector.SetXYZ(particlecorr->Px(),particlecorr->Py(),particlecorr->Pz());
1605 jetVector.SetXYZ(jet->Px(),jet->Py(),jet->Pz());
1606 CalculateBkg(gammaVector,jetVector,vertex,1);//jet perp
1607 CalculateBkg(gammaVector,jetVector,vertex,2);//RC
1608 CalculateBkg(gammaVector,jetVector,vertex,3);//mid point
1609 CalculateBkg(gammaVector,jetVector,vertex,4);//gamma perp
1610 //CalculateBkg(gammaVector,jetVector,vertex,5);/test
1611 Double_t angleJetGam = gammaVector.Angle(jetVector);
1612 //printf("angleJetGam %f\n",angleJetGam*180/TMath::Pi());
1615 // Fragmentation function
1617 Float_t rad = 0, pt = 0, eta = 0, phi = 0;
1618 Int_t npartcone = 0;
1623 printf ("fUseJetRefTracks %d\n",fUseJetRefTracks );
1624 printf ("jet->GetRefTracks() %p\n",jet->GetRefTracks());
1625 printf ("GetCTSTracks() %p\n",GetCTSTracks() );
1628 if(!fUseJetRefTracks)
1629 ntracks =GetCTSTracks()->GetEntriesFast();
1630 else //If you want to use jet tracks from JETAN
1631 ntracks = (jet->GetRefTracks())->GetEntriesFast();
1633 if(GetDebug()>3) printf ("ntracks %d\n",ntracks);
1634 AliVTrack* track = 0x0 ;
1635 for(Int_t ipr = 0;ipr < ntracks ; ipr ++ ){
1636 if(!fUseJetRefTracks)
1637 track = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
1638 else //If you want to use jet tracks from JETAN
1639 track = (AliVTrack *) ((jet->GetRefTracks())->At(ipr));
1641 p3.SetXYZ(track->Px(),track->Py(),track->Pz());
1645 if(phi < 0) phi+=TMath::TwoPi();
1647 //Check if there is any particle inside cone with pt larger than fPtThreshold
1648 rad = TMath::Sqrt((eta-etaJet)*(eta-etaJet)+ (phi-phiJet)*(phi-phiJet));
1649 if(rad < fConeSize && pt > fPtThresholdInCone){
1650 //printf("charged in jet cone pt %f, phi %f, eta %f, R %f \n",pt,phi,eta,rad);
1652 fhFFz ->Fill(ptTrig, pt/ptTrig);
1653 fhFFxi->Fill(ptTrig, TMath::Log(ptTrig/pt));
1654 fhFFpt->Fill(ptTrig, pt);
1656 //according to jet axis
1657 fhJetFFz ->Fill(ptJet, pt/ptJet);
1658 fhJetFFxi->Fill(ptJet, TMath::Log(ptJet/pt));
1659 fhJetFFpt->Fill(ptJet, pt);
1662 if(TMath::Cos(angleJetGam)<0 && ptJet!=0 && pt!=0 ){
1663 fhJetFFzCor ->Fill(ptJet, -pt*TMath::Cos(angleJetGam)/ptJet);
1664 fhJetFFxiCor->Fill(ptJet, TMath::Log(ptJet/(-pt*TMath::Cos(angleJetGam))));
1668 fhNTracksInCone->Fill(ptTrig, npartcone);
1669 //fill tree here for each photon-jet (isolation required usually)
1672 //fGamLambda0 = ;//filled earlier
1673 fGamNLM = particlecorr->GetFiducialArea();
1674 //fGamSumPtCh = ;//filled earlier
1675 //fGamTime = particlecorr->GetTOF();//filled earlier
1676 //fGamNcells = particlecorr->GetNCells();//filled earlier
1679 //fGamSumPtNeu = ;//filled earlier
1680 //fGamNtracks = ;//filled earlier
1681 //fGamNclusters= ;//filled earlier
1682 //fGamAvEne = ;//filled earlier
1686 fJetBkgChEne = (IsBackgroundJetFromReader()?rhoEvent * jet->EffectiveAreaCharged():jet->ChargedBgEnergy());
1687 fJetArea = jet->EffectiveAreaCharged();
1688 fJetNtracks = (jet->GetRefTracks())->GetEntriesFast();
1690 fNtracks = GetCTSTracks()->GetEntriesFast();
1691 fCentrality = GetEventCentrality();
1692 fIso = particlecorr->IsIsolated();
1696 for(itrack=0;itrack < fJetNtracks;itrack++){
1697 track = (AliVTrack *) ((jet->GetRefTracks())->At(itrack));
1698 if(track->Pt()>1.) nTrk1GeV++;
1699 if(track->Pt()>2.) nTrk2GeV++;
1702 fJetNtracks1 = nTrk1GeV;
1703 fJetNtracks2 = nTrk2GeV;
1705 if(fSaveGJTree) fTreeGJ->Fill();
1706 }//AOD trigger particle loop
1707 if(GetDebug() > 1) printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - End fill histograms \n");
1711 //__________________________________________________________________
1712 void AliAnaParticleJetFinderCorrelation::Print(const Option_t * opt) const
1715 //Print some relevant parameters set for the analysis
1719 printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
1720 AliAnaCaloTrackCorrBaseClass::Print(" ");
1722 printf("Phi trigger-jet < %3.2f\n", fDeltaPhiMaxCut) ;
1723 printf("Phi trigger-jet > %3.2f\n", fDeltaPhiMinCut) ;
1724 printf("pT Ratio trigger/jet < %3.2f\n", fRatioMaxCut) ;
1725 printf("pT Ratio trigger/jet > %3.2f\n", fRatioMinCut) ;
1726 printf("fConeSize = %3.2f\n", fConeSize) ;
1727 printf("fPtThresholdInCone = %3.2f\n", fPtThresholdInCone) ;
1728 printf("fUseJetRefTracks = %d\n", fUseJetRefTracks) ;
1729 printf("fMakeCorrelationInHistoMaker = %d\n", fMakeCorrelationInHistoMaker) ;
1730 printf("Isolated Trigger? %d\n", fSelectIsolated) ;
1731 printf("Reconstructed jet cone size = %3.2f\n", fJetConeSize) ;
1732 printf("Reconstructed jet minimum pt = %3.2f\n", fJetMinPt) ;
1733 printf("Reconstructed jet minimum area fraction = %3.2f\n", fJetAreaFraction) ;
1735 if(!fNonStandardJetFromReader){
1736 printf("fJetBranchName = %s\n", fJetBranchName.Data()) ;
1738 if(!fBackgroundJetFromReader){
1739 printf("fBkgJetBranchName = %s\n", fBkgJetBranchName.Data()) ;
1742 printf("Isolation cone size = %3.2f\n", fGammaConeSize) ;
1743 printf("fUseBackgroundSubtractionGamma = %d\n",fUseBackgroundSubtractionGamma);
1744 printf("fSaveGJTree = %d\n",fSaveGJTree);
1745 printf("fMostEnergetic = %d\n",fMostEnergetic);
1746 printf("fMostOpposite = %d\n",fMostOpposite);
1748 printf("fUseHistogramJetBkg = %d\n",fUseHistogramJetBkg);
1749 printf("fUseHistogramTracks = %d\n",fUseHistogramTracks);
1750 printf("fUseHistogramJetTracks = %d\n",fUseHistogramJetTracks);
1754 //__________________________________________________________________
1755 void AliAnaParticleJetFinderCorrelation::CalculateBkg(TVector3 gamma, TVector3 jet,Double_t vertex[3],Int_t type=2){
1757 // calculate background for fragmentation function and fill histograms
1758 // 1. 90 degrees from jet axis in random place = perpendicular cone
1759 // 2. Random cone not belonging to jet cone nor photon cone
1760 // 3. In the middle point from jet and photon momentum vectors
1761 // 4. 90 degrees from photon direction in random place = perpendicular cone 2
1764 // implementation of 2 works, 1 and 4 works
1766 Double_t gammaPt = gamma.Pt();
1767 Double_t gammaEta = gamma.Eta();
1768 Double_t gammaPhi = gamma.Phi();
1769 Double_t jetEta = jet.Eta();
1770 Double_t jetPhi = jet.Phi();
1772 //refference direction of background
1773 Double_t refEta=0.,refPhi=0.;
1774 Double_t rad = 0,rad2 = 0.;
1775 if(type==1){//perpendicular to jet axis
1776 //printf("vertex: %f %f %f \n",vertex[0],vertex[1],vertex[2]);
1783 //Z axis vector: [jet.Px(),jet.Py(),jet.Pz()]
1784 Double_t jx=jet.Px();
1785 Double_t jy=jet.Py();
1786 Double_t jz=jet.Pz();
1787 //if(jz==0)printf("problem\n");
1789 Double_t Xx=1.0-vertex[0];
1790 Double_t Xy=-1.0*vertex[1];
1791 Double_t Xz=jx/jz*(vertex[0]-1.)+vertex[1]*jy/jz;
1793 Double_t Yx=jy*Xz-jz*Xy;
1794 Double_t Yy=jz*Xx-jx*Xz;
1795 Double_t Yz=jx*Xy-jy*Xx;
1797 Double_t det = Xx*Yy*jz + Xy*Yz*jx + Xz*Yx*jy - Xx*Yz*jy - Xy*Yx*jz - Xz*Yy*jx;
1798 if(det==0)printf("problem det==0\n");
1803 // Double_t tmpScalar = jx*Xx+jy*Xy+jz*Xz;
1804 // printf("scalar jet.P o X: %f\n",tmpScalar);
1805 // tmpScalar = jet.Px()*Yx+jet.Py()*Yy+jet.Pz()*Yz;
1806 // printf("scalar jet.P o Y: %f\n",tmpScalar);
1807 // tmpScalar = Xx*Yx+Xy*Yy+Xz*Yz;
1808 // printf("scalar X o Y: %f\n",tmpScalar);
1813 refPhi=fGenerator->Rndm()*TMath::Pi()*2.;
1814 //refPhi=fGenerator->Uniform(-1,1)*TMath::Pi();
1815 xVar=TMath::Cos(refPhi);
1816 yVar=TMath::Sin(refPhi);
1817 //yVar=TMath::Cos(-TMath::Pi()/2.+refPhi);
1818 //zVar=0 in new surface frame
1819 detX = xVar*Yy*jz + Xz*yVar*jy - xVar*Yz*jy - Xy*yVar*jz;
1820 detY = Xx*yVar*jz + xVar*Yz*jx - xVar*Yx*jz - Xz*yVar*jx;
1821 detZ = Xy*yVar*jx + xVar*Yx*jy - Xx*yVar*jy - xVar*Yy*jx;
1827 perp.SetXYZ(newX,newY,newZ);
1828 refEta = perp.Eta();
1829 refPhi = perp.Phi();//output in <-pi, pi> range
1830 if(refPhi<0)refPhi+=2*TMath::Pi();
1831 rad = TMath::Sqrt((gammaEta-refEta)*(gammaEta-refEta) + (gammaPhi-refPhi)*(gammaPhi-refPhi));
1832 rad2 = TMath::Sqrt((jetEta-refEta)*(jetEta-refEta) + (jetPhi-refPhi)*(jetPhi-refPhi));
1833 //printf("refEta,refPhi,rad,rad2: %f %f %f %f\n",refEta,refPhi,rad,rad2);
1834 } while (rad<fJetConeSize+fGammaConeSize || rad2<fJetConeSize+fJetConeSize || TMath::Abs(refEta)>0.9-fJetConeSize);
1835 fhRandomPhiEta[2]->Fill(refPhi,refEta);
1838 else if(type==2){//random cone
1841 refPhi=fGenerator->Rndm()*TMath::Pi()*2.;
1842 refEta=fGenerator->Uniform(-(0.9-fJetConeSize),0.9-fJetConeSize);
1843 rad = TMath::Sqrt((gammaEta-refEta)*(gammaEta-refEta) + (gammaPhi-refPhi)*(gammaPhi-refPhi));
1844 rad2 = TMath::Sqrt((jetEta-refEta)*(jetEta-refEta) + (jetPhi-refPhi)*(jetPhi-refPhi));
1845 //check if reference is not within jet cone or gamma cone +0.4
1846 //example: FF fConeSize=0.4, fJetConeSize=0.4, fIsoGammaConeSize=0.3
1847 } while (rad<fJetConeSize+fGammaConeSize || rad2<fJetConeSize+fJetConeSize);
1848 //photon:0.7=0.4+0.3; jets:0.8=0.4 +0.4 //rad<fConeSize+fJetConeSize rad2<fConeSize+0.3
1849 fhRandomPhiEta[0]->Fill(refPhi,refEta);
1851 else if(type==4){//perpendicular to photon axis
1857 //Z axis vector: [jet.Px(),jet.Py(),jet.Pz()]
1858 Double_t jx=gamma.Px();
1859 Double_t jy=gamma.Py();
1860 Double_t jz=gamma.Pz();
1861 //if(jz==0)printf("problem\n");
1863 Double_t Xx=1.0-vertex[0];
1864 Double_t Xy=-1.0*vertex[1];
1865 Double_t Xz=jx/jz*(vertex[0]-1.)+vertex[1]*jy/jz;
1867 Double_t Yx=jy*Xz-jz*Xy;
1868 Double_t Yy=jz*Xx-jx*Xz;
1869 Double_t Yz=jx*Xy-jy*Xx;
1871 Double_t det = Xx*Yy*jz + Xy*Yz*jx + Xz*Yx*jy - Xx*Yz*jy - Xy*Yx*jz - Xz*Yy*jx;
1872 if(det==0)printf("problem det==0\n");
1877 // Double_t tmpScalar = jx*Xx+jy*Xy+jz*Xz;
1878 // printf("scalar jet.P o X: %f\n",tmpScalar);
1879 // tmpScalar = jet.Px()*Yx+jet.Py()*Yy+jet.Pz()*Yz;
1880 // printf("scalar jet.P o Y: %f\n",tmpScalar);
1881 // tmpScalar = Xx*Yx+Xy*Yy+Xz*Yz;
1882 // printf("scalar X o Y: %f\n",tmpScalar);
1887 refPhi=fGenerator->Rndm()*TMath::Pi()*2.;
1888 //refPhi=fGenerator->Uniform(-1,1)*TMath::Pi();
1889 xVar=TMath::Cos(refPhi);
1890 yVar=TMath::Sin(refPhi);
1891 //yVar=TMath::Cos(-TMath::Pi()/2.+refPhi);
1892 //zVar=0 in new surface frame
1893 detX = xVar*Yy*jz + Xz*yVar*jy - xVar*Yz*jy - Xy*yVar*jz;
1894 detY = Xx*yVar*jz + xVar*Yz*jx - xVar*Yx*jz - Xz*yVar*jx;
1895 detZ = Xy*yVar*jx + xVar*Yx*jy - Xx*yVar*jy - xVar*Yy*jx;
1901 perp.SetXYZ(newX,newY,newZ);
1902 refEta = perp.Eta();
1903 refPhi = perp.Phi();//output in <-pi, pi> range
1904 if(refPhi<0)refPhi+=2*TMath::Pi();
1905 rad = TMath::Sqrt((gammaEta-refEta)*(gammaEta-refEta) + (gammaPhi-refPhi)*(gammaPhi-refPhi));
1906 rad2 = TMath::Sqrt((jetEta-refEta)*(jetEta-refEta) + (jetPhi-refPhi)*(jetPhi-refPhi));
1907 //printf("refEta,refPhi,rad,rad2: %f %f %f %f\n",refEta,refPhi,rad,rad2);
1908 } while (rad<fJetConeSize+fGammaConeSize || rad2<fJetConeSize+fJetConeSize || TMath::Abs(refEta)>0.9-fJetConeSize);
1909 fhRandomPhiEta[1]->Fill(refPhi,refEta);
1912 else if(type==3){//mid point
1914 Double_t jx=jet.Px();
1915 Double_t jy=jet.Py();
1916 Double_t jz=jet.Pz();
1917 // if(jz==0)printf("problem\n");
1918 Double_t gx=gamma.Px();
1919 Double_t gy=gamma.Py();
1920 Double_t gz=gamma.Pz();
1922 Double_t cosAlpha=(jx*gx+jy*gy+jz*gz)/(jet.Mag()*gamma.Mag());
1923 Double_t cosinus=TMath::Sqrt((cosAlpha+1.)/2.);
1924 //perpendicular axis
1925 Double_t Zx=gy*jz-gz*jy;
1926 Double_t Zy=gz*jx-gx*jz;
1927 Double_t Zz=gx*jy-gy*jx;
1930 Double_t det = Zx*gy*jz + Zy*gz*jx + Zz*gx*jy - Zz*gy*jx - Zy*gx*jz - Zx*gz*jy;
1936 Double_t detX = -Zy*gz*cosinus +Zz*cosinus*jy + Zz*gy*cosinus - Zy*cosinus*jz;
1937 Double_t detY = Zx*cosinus*jz - Zz*gx*cosinus - Zz*cosinus*jx + Zx*gz*cosinus;
1938 Double_t detZ = -Zx*gy*cosinus + Zy*cosinus*jx + Zy*gx*cosinus - Zx*cosinus*jy;
1946 perp.SetXYZ(newX,newY,newZ);
1947 refEta = perp.Eta();
1948 refPhi = perp.Phi();//output in <-pi, pi> range
1949 if(refPhi<0)refPhi+=2*TMath::Pi();
1950 rad = TMath::Sqrt((gammaEta-refEta)*(gammaEta-refEta) + (gammaPhi-refPhi)*(gammaPhi-refPhi));
1951 rad2 = TMath::Sqrt((jetEta-refEta)*(jetEta-refEta) + (jetPhi-refPhi)*(jetPhi-refPhi));
1952 //printf("refEta,refPhi,rad,rad2: %f %f %f %f\n",refEta,refPhi,rad,rad2);
1954 if (rad<fJetConeSize+fGammaConeSize || rad2<fJetConeSize+fJetConeSize || TMath::Abs(refEta)>0.9-fJetConeSize) fhRandomPhiEta[3]->Fill(refPhi,refEta);
1956 else if(type==5){//tmp
1957 //printf("vertex: %f %f %f \n",vertex[0],vertex[1],vertex[2]);
1963 //Z axis vector: [jet.Px(),jet.Py(),jet.Pz()]
1964 Double_t jx=jet.Px();
1965 Double_t jy=jet.Py();
1966 Double_t jz=jet.Pz();
1967 // if(jz==0)printf("problem\n");
1969 Double_t Xx=1.0-vertex[0];
1970 Double_t Xy=-1.0*vertex[1];
1971 Double_t Xz=jx/jz*(vertex[0]-1.)+vertex[1]*jy/jz;
1973 Double_t Yx=jy*Xz-jz*Xy;
1974 Double_t Yy=jz*Xx-jx*Xz;
1975 Double_t Yz=jx*Xy-jy*Xx;
1978 Double_t Xlength=TMath::Sqrt(Xx*Xx+Xy*Xy+Xz*Xz);
1979 Double_t Ylength=TMath::Sqrt(Yx*Yx+Yy*Yy+Yz*Yz);
1980 Double_t ratio=Ylength/Xlength;
1985 refPhi=fGenerator->Rndm()*TMath::Pi()*2.;
1986 xVar=TMath::Tan(refPhi)/ratio;
1991 perp.SetXYZ(newX,newY,newZ);
1992 refEta = perp.Eta();
1993 refPhi = perp.Phi();//output in <-pi, pi> range
1994 if(refPhi<0)refPhi+=2*TMath::Pi();
1995 rad = TMath::Sqrt((gammaEta-refEta)*(gammaEta-refEta) + (gammaPhi-refPhi)*(gammaPhi-refPhi));
1996 rad2 = TMath::Sqrt((jetEta-refEta)*(jetEta-refEta) + (jetPhi-refPhi)*(jetPhi-refPhi));
1997 //printf("refEta,refPhi,rad,rad2: %f %f %f %f\n",refEta,refPhi,rad,rad2);
1998 } while (rad<fJetConeSize+fGammaConeSize || rad2<fJetConeSize+fJetConeSize || TMath::Abs(refEta)>0.9-fJetConeSize);
1999 fhRandomPhiEta[4]->Fill(refPhi,refEta);
2004 //calculate FF in background
2006 ntracks =GetCTSTracks()->GetEntriesFast();
2007 AliVTrack* track = 0x0 ;
2010 Double_t pt = 0, eta = 0, phi = 0;
2011 Int_t npartcone = 0;
2013 for(Int_t ipr = 0;ipr < ntracks ; ipr ++ ){
2014 track = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
2015 p3.SetXYZ(track->Px(),track->Py(),track->Pz());
2017 if(pt<fPtThresholdInCone) {//0.150
2018 //printf("problem: track pt < %f MeV/c \n",fPtThresholdInCone);
2023 if(phi < 0) phi+=TMath::TwoPi();
2024 //Check if there is any particle inside cone with pt larger than fPtThreshold
2025 rad = TMath::Sqrt((eta-refEta)*(eta-refEta) + (phi-refPhi)*(phi-refPhi));
2026 if(rad < fConeSize && pt > fPtThresholdInCone){
2027 //printf("charged in jet cone pt %f, phi %f, eta %f, R %f \n",pt,phi,eta,rad);
2030 if(type==1){//perp jet
2031 fhBkgFFz[1] ->Fill(gammaPt, pt/gammaPt);
2032 fhBkgFFxi[1]->Fill(gammaPt, TMath::Log(gammaPt/pt));
2033 fhBkgFFpt[1]->Fill(gammaPt, pt);
2035 else if(type==2){//RC
2036 fhBkgFFz[0] ->Fill(gammaPt, pt/gammaPt);
2037 fhBkgFFxi[0]->Fill(gammaPt, TMath::Log(gammaPt/pt));
2038 fhBkgFFpt[0]->Fill(gammaPt, pt);
2040 else if(type==3){//mid point
2041 fhBkgFFz[3] ->Fill(gammaPt, pt/gammaPt);
2042 fhBkgFFxi[3]->Fill(gammaPt, TMath::Log(gammaPt/pt));
2043 fhBkgFFpt[3]->Fill(gammaPt, pt);
2045 else if(type==4){//perp jet
2046 fhBkgFFz[2] ->Fill(gammaPt, pt/gammaPt);
2047 fhBkgFFxi[2]->Fill(gammaPt, TMath::Log(gammaPt/pt));
2048 fhBkgFFpt[2]->Fill(gammaPt, pt);
2050 else if(type==5){//test
2051 fhBkgFFz[4] ->Fill(gammaPt, pt/gammaPt);
2052 fhBkgFFxi[4]->Fill(gammaPt, TMath::Log(gammaPt/pt));
2053 fhBkgFFpt[4]->Fill(gammaPt, pt);
2058 }//end of loop over tracks
2059 Double_t sumOverTracks=0.;
2060 if(npartcone!=0) sumOverTracks = sumPt/npartcone;
2062 fhBkgNTracksInCone[1]->Fill(gammaPt, npartcone);
2063 fhBkgSumPtInCone[1]->Fill(gammaPt,sumPt);
2064 fhBkgSumPtnTracksInCone[1]->Fill(gammaPt,sumOverTracks);
2067 fhBkgNTracksInCone[0]->Fill(gammaPt, npartcone);
2068 fhBkgSumPtInCone[0]->Fill(gammaPt,sumPt);
2069 fhBkgSumPtnTracksInCone[0]->Fill(gammaPt,sumOverTracks);
2072 fhBkgNTracksInCone[3]->Fill(gammaPt, npartcone);
2073 fhBkgSumPtInCone[3]->Fill(gammaPt,sumPt);
2074 fhBkgSumPtnTracksInCone[3]->Fill(gammaPt,sumOverTracks);
2077 fhBkgNTracksInCone[2]->Fill(gammaPt, npartcone);
2078 fhBkgSumPtInCone[2]->Fill(gammaPt,sumPt);
2079 fhBkgSumPtnTracksInCone[2]->Fill(gammaPt,sumOverTracks);
2082 fhBkgNTracksInCone[4]->Fill(gammaPt, npartcone);
2083 fhBkgSumPtInCone[4]->Fill(gammaPt,sumPt);
2084 fhBkgSumPtnTracksInCone[4]->Fill(gammaPt,sumOverTracks);