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));
802 AliInfo("Jet not in container");
805 fhCuts2->Fill(2.,1.);
807 if(fBackgroundJetFromReader ){
808 jetPt-= (fJetRho * jet->EffectiveAreaCharged() );
810 if(jetPt<0.) continue;
811 //put jet eta requirement here |eta_jet|<0.9-jet_cone_size
812 fhCuts2->Fill(3.,1.);
813 if(TMath::Abs(jet->Eta()) > (0.9 - fJetConeSize) ) continue;
814 fhCuts2->Fill(4.,1.);
815 // if(jet->Pt()<5) continue;
816 if(jetPt<fJetMinPt) continue;
817 fhCuts2->Fill(5.,1.);
818 if(jet->EffectiveAreaCharged()<fJetAreaFraction*TMath::Pi()*fJetConeSize*fJetConeSize) continue;
819 fhCuts2->Fill(6.,1.);
820 //printf("jet found\n");
821 Double_t deltaPhi0pi = TMath::Abs(particle->Phi()-jet->Phi());
822 Double_t ratio = jetPt/particlePt;
824 deltaPhi = particlePhi - jet->Phi() ;
825 if ( deltaPhi0pi > TMath::Pi() ) deltaPhi0pi = 2. * TMath::Pi() - deltaPhi0pi ;
826 if(deltaPhi<0) deltaPhi +=(TMath::Pi()*2.);
828 fhDeltaPtBefore ->Fill(particlePt, particlePt - jetPt);
829 fhDeltaPhiBefore->Fill(particlePt, deltaPhi);
830 fhDeltaEtaBefore->Fill(particlePt, particle->Eta() - jet->Eta());
831 fhPtRatioBefore ->Fill(particlePt, jetPt/particlePt);
832 fhPtBefore ->Fill(particlePt, jetPt);
834 fhDeltaPhi0PiCorrectBefore->Fill(particlePt, deltaPhi0pi);//good
837 printf("AliAnaParticleJetFinderCorrelation::SelectJet() - Jet %d, Ratio pT %2.3f, Delta phi %2.3f\n",ijet,ratio,deltaPhi);
839 if((deltaPhi > fDeltaPhiMinCut) && (deltaPhi < fDeltaPhiMaxCut) &&
840 (ratio > fRatioMinCut) && (ratio < fRatioMaxCut) &&
841 (TMath::Abs(deltaPhi-TMath::Pi()) < TMath::Abs(dphiprev-TMath::Pi()) )){//In case there is more than one jet select the most opposite.
851 //__________________________________________________________________
852 void AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD()
854 //Particle-Jet Correlation Analysis, fill AODs
855 // printf("I use MakeAnalysisFillAOD\n");
856 //Get the event, check if there are AODs available, if not, skip this analysis
857 AliAODEvent * event = NULL;
859 // cout<<"GetReader()->GetOutputEvent() "<<GetReader()->GetOutputEvent()<<endl;
860 // cout<<"GetReader()->GetDataType() "<<GetReader()->GetDataType() <<endl;
861 // cout<<"AliCaloTrackReader::kAOD "<<AliCaloTrackReader::kAOD<<endl;
862 // cout<<"GetReader()->GetInputEvent() "<<GetReader()->GetInputEvent()<<endl;
864 if(GetReader()->GetOutputEvent())
866 event = dynamic_cast<AliAODEvent*>(GetReader()->GetOutputEvent());
868 else if(GetReader()->GetDataType() == AliCaloTrackReader::kAOD)
870 event = dynamic_cast<AliAODEvent*>(GetReader()->GetInputEvent());
874 if(GetDebug() > 3) AliInfo("There are no jets available for this analysis");
878 if(!GetInputAODBranch() || !event)
880 AliFatal(Form("No input particles in AOD with name branch < %s > \n",
881 GetInputAODName().Data()));
882 return; // Trick coverity
885 if(strcmp(GetInputAODBranch()->GetClass()->GetName(), "AliAODPWG4ParticleCorrelation"))
887 AliFatal(Form("Wrong type of AOD object, change AOD class name in input AOD: It should be <AliAODPWG4ParticleCorrelation> and not <%s>",
888 GetInputAODBranch()->GetClass()->GetName()));
889 return; // Trick coverity
896 TClonesArray *aodRecJets = 0;
897 if(IsNonStandardJetFromReader()){//jet branch from reader
898 if(GetDebug() > 3) AliInfo(Form("GetNonStandardJets function (from reader) is called"));
899 aodRecJets = GetNonStandardJets();
900 if(GetDebug() > 3) AliInfo(Form("aodRecJets %p",aodRecJets));
903 if(GetDebug() > 3) event->Print();
904 AliFatal("List of jets is null");
907 nJets=aodRecJets->GetEntries();
908 if(GetDebug() > 3) printf("nJets %d\n",nJets);
913 //printf("Why number of jets = 0? Check what type of collision it is. If PbPb -problem.\n");
920 AliAODJetEventBackground* aodBkgJets = 0;
921 if(IsBackgroundJetFromReader()){//jet branch from reader
922 if(GetDebug() > 3) printf("GetBackgroundJets function is called\n");
923 aodBkgJets = GetBackgroundJets();
924 if(GetDebug() > 3) printf("aodBkgJets %p\n",aodBkgJets);
926 if(GetDebug() > 3) event->Print();
929 if(GetDebug() > 3) aodBkgJets->Print("c");
932 Double_t rhoEvent=0.;
933 if(aodBkgJets && IsBackgroundJetFromReader() ) {
934 rhoEvent = aodBkgJets->GetBackground(2);//hardcoded
939 Int_t ntrig = GetInputAODBranch()->GetEntriesFast() ;
941 printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - Begin jet finder correlation analysis, fill AODs \n");
942 printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - In particle branch aod entries %d\n", ntrig);
943 printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - In standard jet branch aod entries %d\n", event->GetNJets());
944 printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - In non standard jet branch aod entries %d\n", nJets);
947 //if(nJets==0) return;//to speed up
948 // cout<<"ntrig po return "<<ntrig<<endl;
951 //calculate average cell energy without most energetic photon
953 Double_t medianPhotonRho=0.;
954 TObjArray* clusters = GetEMCALClusters();
957 AliVCluster *cluster=0;
959 if(IsBackgroundSubtractionGamma()){
961 // Find most energetic photon without background subtraction
965 AliAODPWG4ParticleCorrelation* particlecorr =0;
966 for(Int_t iaod = 0; iaod < ntrig ; iaod++){
967 particlecorr = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
968 if(particlecorr->Pt() > maxPt) {
969 maxPt = particlecorr->Pt();
975 // calculate background energy per cell
977 Int_t numberOfcells=0;
979 Double_t *photonRhoArr=new Double_t[ntrig-1];
980 Int_t photonRhoArrayIndex=0;
981 for(Int_t iaod = 0; iaod < ntrig ; iaod++){
982 particlecorr = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
983 if(iaod==maxIndex) continue;
984 clusterIDtmp = particlecorr->GetCaloLabel(0) ;
985 if(clusterIDtmp < 0) continue;
986 cluster = FindCluster(clusters,clusterIDtmp,iclustmp);
987 photonRhoArr[photonRhoArrayIndex]=particlecorr->Pt()/ cluster->GetNCells();
988 numberOfcells+=cluster->GetNCells();
989 photonRhoArrayIndex++;
991 if(photonRhoArrayIndex>0) medianPhotonRho=TMath::Median(photonRhoArrayIndex,photonRhoArr);
992 delete [] photonRhoArr;
994 }//end of if background calculation for gamma
995 fGamRho = medianPhotonRho;
999 //take most energetic photon and most energetic jet and combine
1003 // most energetic photon with background subtraction
1005 Double_t mostEnePhotonPt=0.;
1006 Int_t indexMostEnePhoton=-1;
1007 AliAODPWG4ParticleCorrelation* particle =0;
1008 Double_t ptCorrect=0.;
1010 for(Int_t iaod = 0; iaod < ntrig ; iaod++){
1011 particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1012 clusterIDtmp = particle->GetCaloLabel(0) ;
1013 if(!(clusterIDtmp<0)){
1014 cluster = FindCluster(clusters,clusterIDtmp,iclustmp);
1015 nCells = cluster->GetNCells();
1017 ptCorrect = particle->Pt() - medianPhotonRho * nCells;
1018 if( ptCorrect > mostEnePhotonPt ){
1019 mostEnePhotonPt = ptCorrect;
1020 indexMostEnePhoton = iaod ;
1023 // printf ("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - Photon with index %d selected \n",indexMostEnePhoton);
1025 // most energetic jet with background subtraction
1027 Double_t mostEneJetPt=0.;
1028 Int_t indexMostEneJet=-1;
1029 AliAODJet * jet = 0 ;
1030 //Double_t ptCorrect=0.;
1031 for(Int_t ijet = 0; ijet < nJets ; ijet++){
1032 jet = dynamic_cast<AliAODJet*>(aodRecJets->At(ijet));
1034 if(TMath::Abs(jet->Eta()) > (0.9 - fJetConeSize) ) continue;
1035 if(jet->EffectiveAreaCharged()<fJetAreaFraction*TMath::Pi()*fJetConeSize*fJetConeSize) continue;
1036 if(jet->Pt()<fJetMinPt) continue;
1037 ptCorrect = jet->Pt() - rhoEvent * jet->EffectiveAreaCharged();
1038 if(ptCorrect > mostEneJetPt){
1039 mostEneJetPt = ptCorrect;
1040 indexMostEneJet = ijet;
1043 // printf ("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - Jet with index %d selected \n",indexMostEneJet);
1046 // assign jet to photon
1048 if(indexMostEneJet>=0 && indexMostEnePhoton>=0){
1049 particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(indexMostEnePhoton));
1050 jet = dynamic_cast<AliAODJet*>(aodRecJets-> At(indexMostEneJet));
1051 if(jet)particle->SetRefJet(jet);
1053 }//end of take most energetic photon and most ene. jet after bkg subtraction
1056 //Bool_t isJetFound=kFALSE;//new
1057 //Loop on stored AOD particles, trigger
1058 for(Int_t iaod = 0; iaod < ntrig ; iaod++){
1059 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1061 //Correlate with jets
1062 Int_t ijet = SelectJet(particle,aodRecJets);//input for jets is TClonesArray
1065 if(GetDebug() > 2) printf ("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - Jet with index %d selected \n",ijet);
1066 AliAODJet *jet = dynamic_cast<AliAODJet*>(aodRecJets-> At(ijet));
1067 if(jet)particle->SetRefJet(jet);
1068 //printf("Most opposite found\n");
1071 // if(GetReader()->WriteDeltaAODToFile() && isJetFound) WriteJetsToOutputBranch(aodRecJets);
1072 }//end of take most opposite photon and jet after bkg subtraction
1075 if(GetDebug() > 1 ) printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - End fill AODs \n");
1078 //__________________________________________________________________
1079 void AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms()
1081 //Particle-Jet Correlation Analysis, fill histograms
1082 if(GetDebug() > 3 ) {
1083 printf("I use MakeAnalysisFillHistograms\n");
1084 printf("ntracks before iso %d\n",GetCTSTracks()->GetEntriesFast() );
1087 //Get the event, check if there are AODs available, if not, skip this analysis
1088 AliAODEvent * event = NULL;
1090 //printf("GetReader()->GetOutputEvent() %d\n",GetReader()->GetOutputEvent() );
1091 //printf("GetReader()->GetDataType() %d\n",GetReader()->GetDataType() );
1092 //printf("AliCaloTrackReader::kAOD %d\n",AliCaloTrackReader::kAOD );
1093 //printf("GetReader()->GetInputEvent() %d\n",GetReader()->GetInputEvent() );
1095 if(GetReader()->GetOutputEvent())
1097 event = dynamic_cast<AliAODEvent*>(GetReader()->GetOutputEvent());
1099 else if(GetReader()->GetDataType() == AliCaloTrackReader::kAOD)
1101 event = dynamic_cast<AliAODEvent*>(GetReader()->GetInputEvent());
1104 if(GetDebug() > 3) printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - There are no jets available for this analysis\n");
1108 if(!GetInputAODBranch() || !event){
1109 printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - No input particles in AOD with name branch < %s > \n",GetInputAODName().Data());
1114 TClonesArray *aodRecJets = 0;
1115 if(IsNonStandardJetFromReader()){//branch read in reader from reader
1116 if (GetDebug() > 3) printf("GetNonStandardJets function (from reader) is called\n");
1117 aodRecJets = GetNonStandardJets();
1118 if(aodRecJets==0x0){
1119 if(GetDebug() > 3) event->Print();
1120 AliFatal("Jets container not found");
1121 return; // trick coverity
1123 nJets=aodRecJets->GetEntries();
1126 // printf("Why number of jets = 0? Check what type of collision it is. If PbPb -problem.\n");
1127 GetReader()->FillInputNonStandardJets();
1128 aodRecJets = GetNonStandardJets();
1129 if(aodRecJets) nJets=aodRecJets->GetEntries();
1130 // printf("nJets = %d\n",nJets);
1137 AliAODJetEventBackground* aodBkgJets = 0;
1138 if(IsBackgroundJetFromReader()){//jet branch from reader
1139 if(GetDebug() > 3) printf("GetBackgroundJets function is called\n");
1140 aodBkgJets = GetBackgroundJets();
1141 if(GetDebug() > 3) printf("aodBkgJets %p\n",aodBkgJets);
1142 if(aodBkgJets==0x0){
1143 if(GetDebug() > 3) event->Print();
1146 if(GetDebug() > 3) aodBkgJets->Print("c");
1151 // only background jets informations
1153 // Float_t pTback = 0;
1154 Double_t rhoEvent=0.;
1156 if(IsBackgroundJetFromReader() ) rhoEvent = aodBkgJets->GetBackground(2);
1157 if(IsHistogramJetBkg()) {
1158 fhJetRhoVsCentrality->Fill(GetEventCentrality(),rhoEvent);
1159 for(Int_t i=0;i<4;i++){
1160 fhBkgJetBackground[i]->Fill(aodBkgJets->GetBackground(i));
1161 fhBkgJetSigma[i]->Fill(aodBkgJets->GetSigma(i));
1162 fhBkgJetArea[i]->Fill(aodBkgJets->GetMeanarea(i));
1164 }//end of if fill HistogramJetBkg
1165 }//end if aodBkgJets exists
1168 //only track information
1170 Int_t nCTSTracks = GetCTSTracks()->GetEntriesFast();
1171 AliAODTrack *aodtrack;
1173 if(IsHistogramTracks()) {
1174 Double_t sumTrackPt=0;
1175 for(itrack = 0; itrack < nCTSTracks ; itrack++){
1176 aodtrack = dynamic_cast <AliAODTrack*>(GetCTSTracks()->At(itrack));
1177 if(!aodtrack) continue;
1178 fhTrackPhiVsEta->Fill(aodtrack->Phi(),aodtrack->Eta());
1179 sumTrackPt+=aodtrack->Pt();
1182 fhTrackAveTrackPt->Fill(sumTrackPt/nCTSTracks);
1183 }//end if IsHistogramTracks
1186 //only jet informations
1188 AliAODJet * jettmp = 0 ;
1189 Double_t jetPttmp = 0.;
1190 Double_t var1tmp = 0.;
1191 Double_t var2tmp = 0.;
1192 // fhJetNjet->Fill(nJets);
1193 Double_t ptMostEne=0;
1194 // Int_t indexMostEne=-1;
1195 Int_t nJetsOverThreshold[10]={nJets,0,0,0,0,0,0,0,0,0};
1197 Double_t sumJetTrackPt=0.;
1198 Int_t sumNJetTrack=0;
1199 Int_t nTracksInJet=0;
1201 for(Int_t ijet = 0; ijet < nJets ; ijet++){
1202 jettmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ijet));
1203 if(!jettmp) continue;
1204 fhJetPtBefore->Fill(jettmp->Pt());
1205 jetPttmp = jettmp->Pt() - rhoEvent * jettmp->EffectiveAreaCharged();//<<---changed here
1207 //calculate number of tracks above 1,2,3,4,5 GeV in jet
1208 AliVTrack* jettrack = 0x0 ;
1210 Int_t nTrackThrGeV[5]={0,0,0,0,0};
1211 nTracksInJet=(jettmp->GetRefTracks())->GetEntriesFast();
1212 fhJetNparticlesInJet->Fill(nTracksInJet);
1213 if(nTracksInJet==0) continue;
1214 sumNJetTrack+=nTracksInJet;
1215 for(itrack=0;itrack<nTracksInJet;itrack++){
1216 jettrack=(AliVTrack *) ((jettmp->GetRefTracks())->At(itrack));
1217 if(!jettrack) continue;
1219 fhJetDeltaEtaDeltaPhi->Fill(jettmp->Eta()-jettrack->Eta(),jettmp->Phi()-jettrack->Phi());
1220 sumJetTrackPt+=jettrack->Pt();
1221 if(IsHistogramJetTracks()){
1222 if(jettrack->Pt()>1.) nTrackThrGeV[0]++;
1223 if(jettrack->Pt()>2.) nTrackThrGeV[1]++;
1224 if(jettrack->Pt()>3.) nTrackThrGeV[2]++;
1225 if(jettrack->Pt()>4.) nTrackThrGeV[3]++;
1226 if(jettrack->Pt()>5.) nTrackThrGeV[4]++;
1227 }//end of if IsHistogramJetTracks
1228 }//end of jet track loop
1229 //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]);
1231 for(itrack = 0; itrack < nCTSTracks ; itrack++){
1232 aodtrack = dynamic_cast <AliAODTrack*>(GetCTSTracks()->At(itrack));
1233 if(aodtrack) fhJetDeltaEtaDeltaPhiAllTracks->Fill(jettmp->Eta()-aodtrack->Eta(),jettmp->Phi()-aodtrack->Phi());
1237 if(IsHistogramJetTracks()){
1238 fhJetNtracksInJetAboveThr[0]->Fill(jetPttmp,nTracksInJet);//all jets
1240 for(itrk=0;itrk<5;itrk++) {
1241 fhJetNtracksInJetAboveThr[itrk+1]->Fill(jetPttmp,nTrackThrGeV[itrk]);//all jets
1242 fhJetRatioNTrkAboveToNTrk[itrk]->Fill(jetPttmp,(Double_t)nTrackThrGeV[itrk]/(Double_t)nTracksInJet);//all jets
1244 if(ijet==0){//most ene jet
1245 for(itrk=0;itrk<5;itrk++)
1246 fhJetNtrackRatioMostEne[itrk]->Fill(jetPttmp,(Double_t)nTrackThrGeV[itrk]/(Double_t)nTracksInJet);
1248 if(jetPttmp>5){//jet with pt>5GeV/c
1249 for(itrk=0;itrk<5;itrk++)
1250 fhJetNtrackRatioJet5GeV[itrk]->Fill(jetPttmp,(Double_t)nTrackThrGeV[itrk]/(Double_t)nTracksInJet);
1252 if(nTrackThrGeV[4]>0){//jet with leading particle pt>5GeV/c
1253 for(itrk=0;itrk<5;itrk++)
1254 fhJetNtrackRatioLead5GeV[itrk]->Fill(jetPttmp,(Double_t)nTrackThrGeV[itrk]/(Double_t)nTracksInJet);
1256 }//end of if IsHistogramJetTracks
1259 Double_t effectiveChargedBgEnergy=(IsBackgroundJetFromReader()?rhoEvent * jettmp->EffectiveAreaCharged():jettmp->ChargedBgEnergy());
1262 fhJetChBkgEnergyVsArea->Fill(effectiveChargedBgEnergy,jettmp->EffectiveAreaCharged());
1263 //if(jettmp->EffectiveAreaCharged()>0)
1264 fhJetRhoVsPt->Fill(jetPttmp,jettmp->ChargedBgEnergy()*jettmp->EffectiveAreaCharged());
1266 if(jetPttmp>ptMostEne) {
1267 ptMostEne = jetPttmp;
1268 //indexMostEne=ijet;
1270 fhJetPt->Fill(jetPttmp);
1271 fhJetChBkgEnergyVsPt->Fill(jetPttmp,effectiveChargedBgEnergy);
1272 fhJetChAreaVsPt->Fill(jetPttmp,jettmp->EffectiveAreaCharged());
1273 if(GetDebug()>5) printf("ChargedBgEnergy %f EffectiveAreaCharged %f\n", jettmp->ChargedBgEnergy(),jettmp->EffectiveAreaCharged());
1274 for(iCounter=1;iCounter<10;iCounter++){
1275 if(jetPttmp>iCounter) nJetsOverThreshold[iCounter]++;
1278 var1tmp = jettmp->Phi();
1279 var2tmp = jettmp->Eta();
1280 fhJetPhi->Fill(var1tmp);
1281 fhJetEta->Fill(var2tmp);
1282 fhJetPhiVsEta->Fill(var1tmp,var2tmp);
1283 fhJetEtaVsPt->Fill(jetPttmp,var2tmp);
1284 fhJetEtaVsNpartInJet->Fill(var2tmp,nTracksInJet);
1286 fhJetEtaVsNpartInJetBkg->Fill(var2tmp,nTracksInJet);
1289 if(IsHistogramJetTracks()){
1291 //printf("average track pt %f\n",sumJetTrackPt/sumNJetTrack);
1292 fhJetAveTrackPt->Fill(sumJetTrackPt/sumNJetTrack);
1294 }//end of if IsHistogramJetTracks
1297 fhJetPtMostEne->Fill(ptMostEne);
1298 for(iCounter=0;iCounter<10;iCounter++){
1299 fhJetNjetOverPtCut[iCounter]->Fill(nJetsOverThreshold[iCounter]);
1300 nJetsOverThreshold[iCounter]=0;
1303 //end of only jet part
1308 Int_t ntrig = GetInputAODBranch()->GetEntriesFast() ;
1310 printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - Begin jet finder correlation analysis, fill histograms \n");
1311 printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - In particle branch aod entries %d\n", ntrig);
1312 printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - In jet output branch aod entries %d\n", event->GetNJets());
1314 fhNjetsNgammas->Fill(nJets,ntrig);
1316 //if(nJets==0) return;//to speed up
1317 //printf("ntrig %d, njets %d\n",ntrig,nJets);
1320 //Fill only temporary photon histograms
1326 nJetsOverThreshold[0]=ntrig;
1327 for(Int_t iaod = 0; iaod < ntrig ; iaod++){
1328 AliAODPWG4ParticleCorrelation* particlecorr = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1329 tmpPt = particlecorr->Pt();
1334 for(iCounter=1;iCounter<10;iCounter++){
1335 if(tmpPt>iCounter) nJetsOverThreshold[iCounter]++;
1339 for(iCounter=0;iCounter<10;iCounter++){
1340 fhPhotonNgammaOverPtCut[iCounter]->Fill(nJetsOverThreshold[iCounter]);
1341 // nJetsOverThreshold[iCounter]=0;
1345 TObjArray* clusters = GetEMCALClusters();
1346 //printf("calculate median bkg energy for photons ");
1347 Double_t medianPhotonRho=0.;
1349 Int_t iclustmp = -1;
1350 Int_t numberOfcells=0;
1351 AliVCluster *cluster = 0;
1353 Double_t *photonRhoArr=new Double_t[ntrig-1];
1354 fhPhotonPtMostEne->Fill(maxPt);
1355 // fhPhotonIndexMostEne->Fill(indexMaxPt);
1356 fhPhotonAverageEnergy->Fill(sumPt/ntrig);
1357 fhPhotonRatioAveEneToMostEne->Fill(sumPt/(ntrig*maxPt));
1358 fhPhotonAverageEnergyMinus1->Fill((sumPt-maxPt)/(ntrig-1));
1359 fGamAvEne=(sumPt-maxPt)/(ntrig-1);
1360 fhPhotonRatioAveEneMinus1ToMostEne->Fill((sumPt-maxPt)/((ntrig-1)*maxPt));
1362 Int_t counterGamma=0;
1363 Int_t counterGammaMinus1=0;
1365 Int_t photonRhoArrayIndex=0;
1366 //TObjArray* clusterstmp = GetEMCALClusters();
1367 for(Int_t iaod = 0; iaod < ntrig ; iaod++){
1368 AliAODPWG4ParticleCorrelation* particlecorr = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1369 if( particlecorr->Pt() > sumPt/ntrig ) counterGamma++;
1370 if( particlecorr->Pt() > (sumPt-maxPt)/(ntrig-1) ) counterGammaMinus1++;
1372 if(iaod==maxIndex) continue;
1373 clusterID = particlecorr->GetCaloLabel(0) ;
1374 if(clusterID < 0) continue;
1375 cluster = FindCluster(clusters,clusterID,iclustmp);
1376 photonRhoArr[photonRhoArrayIndex]=particlecorr->Pt()/ cluster->GetNCells();
1377 numberOfcells+=cluster->GetNCells();
1378 photonRhoArrayIndex++;
1380 if(photonRhoArrayIndex>0) medianPhotonRho=TMath::Median(photonRhoArrayIndex,photonRhoArr);
1381 delete [] photonRhoArr;
1382 fhPhotonNgammaMoreAverageToNgamma->Fill((Double_t)counterGamma / (Double_t)ntrig);
1383 fhPhotonNgammaMoreAverageMinus1ToNgamma->Fill((Double_t)counterGammaMinus1 / (Double_t)ntrig);
1385 //printf("median = %f\n",medianPhotonRho);
1386 fhPhotonBkgRhoVsNtracks->Fill(GetCTSTracks()->GetEntriesFast(),medianPhotonRho);
1387 fhPhotonBkgRhoVsNclusters->Fill(ntrig,medianPhotonRho);
1388 fhPhotonBkgRhoVsCentrality->Fill(GetEventCentrality(),medianPhotonRho);
1389 fhPhotonBkgRhoVsNcells->Fill(numberOfcells,medianPhotonRho);
1392 AliVCluster *cluster2 = 0;
1393 Double_t photon2Corrected=0;
1394 Double_t sumPtTmp=0.;
1395 Double_t sumPtCorrectTmp=0.;
1396 AliVTrack* trackTmp = 0x0 ;
1399 for(Int_t iaod = 0; iaod < ntrig ; iaod++){
1400 AliAODPWG4ParticleCorrelation* particlecorr = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1401 clusterID = particlecorr->GetCaloLabel(0) ;
1402 if(clusterID < 0) continue;
1403 cluster = FindCluster(clusters,clusterID,iclustmp);
1404 fhPhotonPt->Fill(particlecorr->Pt());
1405 fhPhotonPtCorrected->Fill(particlecorr->Pt() - cluster->GetNCells() * medianPhotonRho);
1406 fhPhotonPtDiff->Fill(cluster->GetNCells() * medianPhotonRho);
1407 fhPhotonPtDiffVsCentrality->Fill(GetEventCentrality(),cluster->GetNCells() * medianPhotonRho);
1408 fhPhotonPtDiffVsNcells->Fill(numberOfcells,cluster->GetNCells() * medianPhotonRho);
1409 fhPhotonPtDiffVsNtracks->Fill(GetCTSTracks()->GetEntriesFast(),cluster->GetNCells() * medianPhotonRho);
1410 fhPhotonPtDiffVsNclusters->Fill(ntrig,cluster->GetNCells() * medianPhotonRho);
1412 fhPhotonPtCorrectedZoom->Fill(particlecorr->Pt() - cluster->GetNCells() * medianPhotonRho);
1414 //test: sum_pt in the cone 0.3 for each photon
1415 //should be: random fake gamma from MB
1416 //is: each gamma for EMCEGA
1420 for(Int_t iaod2 = 0; iaod2 < ntrig ; iaod2++){
1421 if(iaod==iaod2) continue;
1422 AliAODPWG4ParticleCorrelation* particlecorr2 = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod2));
1423 clusterID = particlecorr2->GetCaloLabel(0) ;
1424 if(clusterID < 0) continue;
1425 cluster2 = FindCluster(clusters,clusterID,iclustmp);
1426 photon2Corrected = particlecorr2->Pt() - cluster2->GetNCells() * medianPhotonRho;
1428 //if(Pt()<0.5) continue; //<<hardcoded here //FIXME
1429 if( TMath::Sqrt((particlecorr->Eta()-particlecorr2->Eta())*(particlecorr->Eta()-particlecorr2->Eta()) +
1430 (particlecorr->Phi()-particlecorr2->Phi())*(particlecorr->Phi()-particlecorr2->Phi()) )<fGammaConeSize ){//if(/*cone is correct*/){
1431 sumPtTmp+= particlecorr2->Pt();
1432 sumPtCorrectTmp+=photon2Corrected;
1435 fhPhotonSumPtInCone->Fill(sumPtTmp);
1436 fhPhotonSumPtCorrectInCone->Fill(sumPtCorrectTmp);
1438 //test: sum_pt in the cone 0.3 for each track
1439 //should be: random fake gamma from MB
1440 //is: each gamma for EMCEGA
1442 for(Int_t ipr = 0;ipr < GetCTSTracks()->GetEntriesFast() ; ipr ++){
1443 trackTmp = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
1444 p3Tmp.SetXYZ(trackTmp->Px(),trackTmp->Py(),trackTmp->Pz());
1445 if( TMath::Sqrt((particlecorr->Eta()-p3Tmp.Eta())*(particlecorr->Eta()-p3Tmp.Eta()) +
1446 (particlecorr->Phi()-p3Tmp.Phi())*(particlecorr->Phi()-p3Tmp.Phi()) )<fGammaConeSize ){
1447 sumPtTmp+=p3Tmp.Pt();
1449 }//end of loop over tracks
1450 fhPhotonSumPtChargedInCone->Fill(sumPtTmp);
1453 //End of Fill temporary photon histograms
1456 // Apply background subtraction for photons
1458 fGamRho = medianPhotonRho;
1459 if(!IsBackgroundSubtractionGamma()) medianPhotonRho=0;
1463 //Get vertex for cluster momentum calculation <<----new here
1465 Double_t vertex[] = {0,0,0} ; //vertex ;
1466 if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
1467 GetReader()->GetVertex(vertex);
1468 fZvertex = vertex[2];
1471 //Loop on stored AOD particles, trigger
1473 for(Int_t iaod = 0; iaod < ntrig ; iaod++){
1474 AliAODPWG4ParticleCorrelation* particlecorr = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1476 fhCuts2->Fill(0.,(Double_t)nJets);
1477 if(GetDebug() > 5) printf("OnlyIsolated %d !particlecorr->IsIsolated() %d \n",OnlyIsolated(), !particlecorr->IsIsolated());
1479 if(OnlyIsolated() && !particlecorr->IsIsolated()) continue;
1481 fhCuts2->Fill(1.,nJets);
1487 //Recover the jet correlated, found previously.
1488 AliAODJet * jet = particlecorr->GetJet();
1489 //If correlation not made before, do it now.
1490 if(fMakeCorrelationInHistoMaker){
1491 //Correlate with jets
1492 Int_t ijet = SelectJet(particlecorr,aodRecJets);//input for jets is TClonesArray
1494 if(GetDebug() > 2) printf ("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - Jet with index %d selected \n",ijet);
1495 //jet = event->GetJet(ijet);
1496 jet = dynamic_cast<AliAODJet*>(aodRecJets-> At(ijet));
1498 if(jet) particlecorr->SetRefJet(jet);
1503 if (!jet) continue ;
1505 fhCuts2->Fill(7.,1.);
1508 //Fill Correlation Histograms
1510 clusterID = particlecorr->GetCaloLabel(0) ;
1512 cluster = FindCluster(clusters,clusterID,iclustmp);
1513 //fill tree variables
1514 fGamNcells = cluster->GetNCells();
1516 Double_t ptTrig = particlecorr->Pt() - medianPhotonRho * fGamNcells;//<<---changed here
1517 Double_t ptJet = jet->Pt() - rhoEvent * jet->EffectiveAreaCharged();//<<---changed here
1518 Double_t phiTrig = particlecorr->Phi();
1519 Double_t phiJet = jet->Phi();
1520 Double_t etaTrig = particlecorr->Eta();
1521 Double_t etaJet = jet->Eta();
1522 Double_t deltaPhi=phiTrig-phiJet;
1523 if(deltaPhi<0)deltaPhi+=(TMath::Pi()*2.);
1524 //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",
1525 // ptTrig,ptJet, phiJet-phiTrig, etaJet-etaTrig, ptTrig-ptJet, ptJet/ptTrig);
1526 fhDeltaPt ->Fill(ptTrig, ptTrig-ptJet);
1527 // fhDeltaPhi->Fill(ptTrig, phiTrig-phiJet);//need to be shifted by 2pi
1529 fhDeltaPhiCorrect->Fill(ptTrig, deltaPhi);//correct
1531 Double_t deltaPhiCorrect = TMath::Abs( particlecorr->Phi() - jet->Phi() );
1532 if ( deltaPhiCorrect > TMath::Pi() ) deltaPhiCorrect = 2. * TMath::Pi() - deltaPhiCorrect ;
1533 fhDeltaPhi0PiCorrect->Fill(ptTrig, deltaPhiCorrect);
1535 fhDeltaEta->Fill(ptTrig, etaTrig-etaJet);
1536 fhPtRatio ->Fill(ptTrig, ptJet/ptTrig);
1537 fhPt ->Fill(ptTrig, ptJet);
1539 fhSelectedJetPhiVsEta->Fill(phiJet,etaJet);
1540 fhSelectedJetChBkgEnergyVsPtJet->Fill(ptJet,(IsBackgroundJetFromReader()?rhoEvent * jet->EffectiveAreaCharged():jet->ChargedBgEnergy()) );
1541 fhSelectedJetChAreaVsPtJet->Fill(ptJet,jet->EffectiveAreaCharged());
1542 fhSelectedJetNjet->Fill(nJets);
1543 fhSelectedNtracks->Fill(GetCTSTracks()->GetEntriesFast());//to be checked
1544 fhSelectedPhotonNLMVsPt->Fill(ptTrig,particlecorr->GetFiducialArea());
1548 fhSelectedPhotonLambda0VsPt->Fill(ptTrig,-1);
1549 //fill tree variables
1557 // TObjArray* clusters = GetEMCALClusters();
1558 //cluster = FindCluster(clusters,clusterID,iclustmp);
1559 Double_t lambda0=cluster->GetM02();
1560 fhSelectedPhotonLambda0VsPt->Fill(ptTrig,lambda0);
1561 //fill tree variables
1562 fGamLambda0 = lambda0;
1563 fGamTime = cluster->GetTOF();
1564 //fGamNcells = cluster->GetNCells();
1568 TLorentzVector mom ;
1570 //Double_t scalarProduct=0;
1571 //Double_t vectorLength=particlecorr->P();
1572 for(Int_t icalo=0; icalo <clusters->GetEntriesFast(); icalo++){
1573 AliVCluster* calo = (AliVCluster *) clusters->At(icalo);
1574 if(clusterID==calo->GetID()) continue;//the same cluster as trigger
1575 calo->GetMomentum(mom,vertex) ;//Assume that come from vertex in straight line
1576 //printf("min pt %f\n",GetMinPt());
1577 if(mom.Pt()<GetMinPt()) continue; //<<hardcoded here //FIXME 0.5 check if correct
1578 p3Tmp.SetXYZ(mom.Px(),mom.Py(),mom.Pz());
1579 //calculate sum pt in the cone
1580 if( TMath::Sqrt((particlecorr->Eta()-p3Tmp.Eta())*(particlecorr->Eta()-p3Tmp.Eta()) +
1581 (particlecorr->Phi()-p3Tmp.Phi())*(particlecorr->Phi()-p3Tmp.Phi()) )<fGammaConeSize ){
1582 //scalarProduct = particlecorr->Px()*mom.Px() + particlecorr->Py()*mom.Py() + particlecorr->Pz()*mom.Pz();
1583 //scalarProduct/=mom.P();
1584 //scalarProduct/=vectorLength;
1585 //if(scalarProduct>TMath::Cos(0.3)) {//FIXME photon radius
1586 fGamSumPtNeu+=mom.Pt();
1592 //sum pt of charged tracks in the gamma isolation cone
1596 for(itrack = 0; itrack < nCTSTracks ; itrack++){
1597 aodtrack = dynamic_cast <AliAODTrack*>(GetCTSTracks()->At(itrack));
1598 if(!aodtrack) continue;
1599 fhSelectedTrackPhiVsEta->Fill(aodtrack->Phi(),aodtrack->Eta());//fill histogram here
1600 // if(aodtrack->Pt()<0.15) continue;//hardcoded
1601 if(aodtrack->Pt()<fPtThresholdInCone) continue;
1602 if(!aodtrack->IsHybridGlobalConstrainedGlobal()) continue;
1603 if(TMath::Sqrt((particlecorr->Phi() - aodtrack->Phi())*(particlecorr->Phi() - aodtrack->Phi()) +
1604 (particlecorr->Eta() - aodtrack->Eta())*(particlecorr->Eta() - aodtrack->Eta()) ) <fGammaConeSize ) {
1605 fGamSumPtCh+=aodtrack->Pt();
1611 // for(Int_t itrack = 0; itrack < nCTSTracks ; itrack++){
1612 // aodtrack = dynamic_cast <AliAODTrack*>(GetCTSTracks()->At(itrack));
1613 // fhSelectedTrackPhiVsEta->Fill(aodtrack->Phi(),aodtrack->Eta());
1617 // Background Fragmentation function
1619 TVector3 gammaVector,jetVector;
1620 gammaVector.SetXYZ(particlecorr->Px(),particlecorr->Py(),particlecorr->Pz());
1621 jetVector.SetXYZ(jet->Px(),jet->Py(),jet->Pz());
1622 CalculateBkg(gammaVector,jetVector,vertex,1);//jet perp
1623 CalculateBkg(gammaVector,jetVector,vertex,2);//RC
1624 CalculateBkg(gammaVector,jetVector,vertex,3);//mid point
1625 CalculateBkg(gammaVector,jetVector,vertex,4);//gamma perp
1626 //CalculateBkg(gammaVector,jetVector,vertex,5);/test
1627 Double_t angleJetGam = gammaVector.Angle(jetVector);
1628 //printf("angleJetGam %f\n",angleJetGam*180/TMath::Pi());
1631 // Fragmentation function
1633 Float_t rad = 0, pt = 0, eta = 0, phi = 0;
1634 Int_t npartcone = 0;
1639 printf ("fUseJetRefTracks %d\n",fUseJetRefTracks );
1640 printf ("jet->GetRefTracks() %p\n",jet->GetRefTracks());
1641 printf ("GetCTSTracks() %p\n",GetCTSTracks() );
1644 if(!fUseJetRefTracks)
1645 ntracks =GetCTSTracks()->GetEntriesFast();
1646 else //If you want to use jet tracks from JETAN
1647 ntracks = (jet->GetRefTracks())->GetEntriesFast();
1649 if(GetDebug()>3) printf ("ntracks %d\n",ntracks);
1650 AliVTrack* track = 0x0 ;
1651 for(Int_t ipr = 0;ipr < ntracks ; ipr ++ ){
1652 if(!fUseJetRefTracks)
1653 track = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
1654 else //If you want to use jet tracks from JETAN
1655 track = (AliVTrack *) ((jet->GetRefTracks())->At(ipr));
1657 p3.SetXYZ(track->Px(),track->Py(),track->Pz());
1661 if(phi < 0) phi+=TMath::TwoPi();
1663 //Check if there is any particle inside cone with pt larger than fPtThreshold
1664 rad = TMath::Sqrt((eta-etaJet)*(eta-etaJet)+ (phi-phiJet)*(phi-phiJet));
1665 if(rad < fConeSize && pt > fPtThresholdInCone){
1666 //printf("charged in jet cone pt %f, phi %f, eta %f, R %f \n",pt,phi,eta,rad);
1668 fhFFz ->Fill(ptTrig, pt/ptTrig);
1669 fhFFxi->Fill(ptTrig, TMath::Log(ptTrig/pt));
1670 fhFFpt->Fill(ptTrig, pt);
1672 //according to jet axis
1673 fhJetFFz ->Fill(ptJet, pt/ptJet);
1674 fhJetFFxi->Fill(ptJet, TMath::Log(ptJet/pt));
1675 fhJetFFpt->Fill(ptJet, pt);
1678 if(TMath::Cos(angleJetGam)<0 && ptJet!=0 && pt!=0 ){
1679 fhJetFFzCor ->Fill(ptJet, -pt*TMath::Cos(angleJetGam)/ptJet);
1680 fhJetFFxiCor->Fill(ptJet, TMath::Log(ptJet/(-pt*TMath::Cos(angleJetGam))));
1684 fhNTracksInCone->Fill(ptTrig, npartcone);
1685 //fill tree here for each photon-jet (isolation required usually)
1688 //fGamLambda0 = ;//filled earlier
1689 fGamNLM = particlecorr->GetFiducialArea();
1690 //fGamSumPtCh = ;//filled earlier
1691 //fGamTime = particlecorr->GetTOF();//filled earlier
1692 //fGamNcells = particlecorr->GetNCells();//filled earlier
1695 //fGamSumPtNeu = ;//filled earlier
1696 //fGamNtracks = ;//filled earlier
1697 //fGamNclusters= ;//filled earlier
1698 //fGamAvEne = ;//filled earlier
1702 fJetBkgChEne = (IsBackgroundJetFromReader()?rhoEvent * jet->EffectiveAreaCharged():jet->ChargedBgEnergy());
1703 fJetArea = jet->EffectiveAreaCharged();
1704 fJetNtracks = (jet->GetRefTracks())->GetEntriesFast();
1706 fNtracks = GetCTSTracks()->GetEntriesFast();
1707 fCentrality = GetEventCentrality();
1708 fIso = particlecorr->IsIsolated();
1712 for(itrack=0;itrack < fJetNtracks;itrack++){
1713 track = (AliVTrack *) ((jet->GetRefTracks())->At(itrack));
1714 if(track->Pt()>1.) nTrk1GeV++;
1715 if(track->Pt()>2.) nTrk2GeV++;
1718 fJetNtracks1 = nTrk1GeV;
1719 fJetNtracks2 = nTrk2GeV;
1721 if(fSaveGJTree) fTreeGJ->Fill();
1722 }//AOD trigger particle loop
1723 if(GetDebug() > 1) printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - End fill histograms \n");
1727 //__________________________________________________________________
1728 void AliAnaParticleJetFinderCorrelation::Print(const Option_t * opt) const
1731 //Print some relevant parameters set for the analysis
1735 printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
1736 AliAnaCaloTrackCorrBaseClass::Print(" ");
1738 printf("Phi trigger-jet < %3.2f\n", fDeltaPhiMaxCut) ;
1739 printf("Phi trigger-jet > %3.2f\n", fDeltaPhiMinCut) ;
1740 printf("pT Ratio trigger/jet < %3.2f\n", fRatioMaxCut) ;
1741 printf("pT Ratio trigger/jet > %3.2f\n", fRatioMinCut) ;
1742 printf("fConeSize = %3.2f\n", fConeSize) ;
1743 printf("fPtThresholdInCone = %3.2f\n", fPtThresholdInCone) ;
1744 printf("fUseJetRefTracks = %d\n", fUseJetRefTracks) ;
1745 printf("fMakeCorrelationInHistoMaker = %d\n", fMakeCorrelationInHistoMaker) ;
1746 printf("Isolated Trigger? %d\n", fSelectIsolated) ;
1747 printf("Reconstructed jet cone size = %3.2f\n", fJetConeSize) ;
1748 printf("Reconstructed jet minimum pt = %3.2f\n", fJetMinPt) ;
1749 printf("Reconstructed jet minimum area fraction = %3.2f\n", fJetAreaFraction) ;
1751 if(!fNonStandardJetFromReader){
1752 printf("fJetBranchName = %s\n", fJetBranchName.Data()) ;
1754 if(!fBackgroundJetFromReader){
1755 printf("fBkgJetBranchName = %s\n", fBkgJetBranchName.Data()) ;
1758 printf("Isolation cone size = %3.2f\n", fGammaConeSize) ;
1759 printf("fUseBackgroundSubtractionGamma = %d\n",fUseBackgroundSubtractionGamma);
1760 printf("fSaveGJTree = %d\n",fSaveGJTree);
1761 printf("fMostEnergetic = %d\n",fMostEnergetic);
1762 printf("fMostOpposite = %d\n",fMostOpposite);
1764 printf("fUseHistogramJetBkg = %d\n",fUseHistogramJetBkg);
1765 printf("fUseHistogramTracks = %d\n",fUseHistogramTracks);
1766 printf("fUseHistogramJetTracks = %d\n",fUseHistogramJetTracks);
1770 //__________________________________________________________________
1771 void AliAnaParticleJetFinderCorrelation::CalculateBkg(TVector3 gamma, TVector3 jet,Double_t vertex[3],Int_t type=2){
1773 // calculate background for fragmentation function and fill histograms
1774 // 1. 90 degrees from jet axis in random place = perpendicular cone
1775 // 2. Random cone not belonging to jet cone nor photon cone
1776 // 3. In the middle point from jet and photon momentum vectors
1777 // 4. 90 degrees from photon direction in random place = perpendicular cone 2
1780 // implementation of 2 works, 1 and 4 works
1782 Double_t gammaPt = gamma.Pt();
1783 Double_t gammaEta = gamma.Eta();
1784 Double_t gammaPhi = gamma.Phi();
1785 Double_t jetEta = jet.Eta();
1786 Double_t jetPhi = jet.Phi();
1788 //refference direction of background
1789 Double_t refEta=0.,refPhi=0.;
1790 Double_t rad = 0,rad2 = 0.;
1791 if(type==1){//perpendicular to jet axis
1792 //printf("vertex: %f %f %f \n",vertex[0],vertex[1],vertex[2]);
1799 //Z axis vector: [jet.Px(),jet.Py(),jet.Pz()]
1800 Double_t jx=jet.Px();
1801 Double_t jy=jet.Py();
1802 Double_t jz=jet.Pz();
1803 //if(jz==0)printf("problem\n");
1805 Double_t Xx=1.0-vertex[0];
1806 Double_t Xy=-1.0*vertex[1];
1807 Double_t Xz=jx/jz*(vertex[0]-1.)+vertex[1]*jy/jz;
1809 Double_t Yx=jy*Xz-jz*Xy;
1810 Double_t Yy=jz*Xx-jx*Xz;
1811 Double_t Yz=jx*Xy-jy*Xx;
1813 Double_t det = Xx*Yy*jz + Xy*Yz*jx + Xz*Yx*jy - Xx*Yz*jy - Xy*Yx*jz - Xz*Yy*jx;
1814 if(det==0)printf("problem det==0\n");
1819 // Double_t tmpScalar = jx*Xx+jy*Xy+jz*Xz;
1820 // printf("scalar jet.P o X: %f\n",tmpScalar);
1821 // tmpScalar = jet.Px()*Yx+jet.Py()*Yy+jet.Pz()*Yz;
1822 // printf("scalar jet.P o Y: %f\n",tmpScalar);
1823 // tmpScalar = Xx*Yx+Xy*Yy+Xz*Yz;
1824 // printf("scalar X o Y: %f\n",tmpScalar);
1829 refPhi=fGenerator->Rndm()*TMath::Pi()*2.;
1830 //refPhi=fGenerator->Uniform(-1,1)*TMath::Pi();
1831 xVar=TMath::Cos(refPhi);
1832 yVar=TMath::Sin(refPhi);
1833 //yVar=TMath::Cos(-TMath::Pi()/2.+refPhi);
1834 //zVar=0 in new surface frame
1835 detX = xVar*Yy*jz + Xz*yVar*jy - xVar*Yz*jy - Xy*yVar*jz;
1836 detY = Xx*yVar*jz + xVar*Yz*jx - xVar*Yx*jz - Xz*yVar*jx;
1837 detZ = Xy*yVar*jx + xVar*Yx*jy - Xx*yVar*jy - xVar*Yy*jx;
1843 perp.SetXYZ(newX,newY,newZ);
1844 refEta = perp.Eta();
1845 refPhi = perp.Phi();//output in <-pi, pi> range
1846 if(refPhi<0)refPhi+=2*TMath::Pi();
1847 rad = TMath::Sqrt((gammaEta-refEta)*(gammaEta-refEta) + (gammaPhi-refPhi)*(gammaPhi-refPhi));
1848 rad2 = TMath::Sqrt((jetEta-refEta)*(jetEta-refEta) + (jetPhi-refPhi)*(jetPhi-refPhi));
1849 //printf("refEta,refPhi,rad,rad2: %f %f %f %f\n",refEta,refPhi,rad,rad2);
1850 } while (rad<fJetConeSize+fGammaConeSize || rad2<fJetConeSize+fJetConeSize || TMath::Abs(refEta)>0.9-fJetConeSize);
1851 fhRandomPhiEta[2]->Fill(refPhi,refEta);
1854 else if(type==2){//random cone
1857 refPhi=fGenerator->Rndm()*TMath::Pi()*2.;
1858 refEta=fGenerator->Uniform(-(0.9-fJetConeSize),0.9-fJetConeSize);
1859 rad = TMath::Sqrt((gammaEta-refEta)*(gammaEta-refEta) + (gammaPhi-refPhi)*(gammaPhi-refPhi));
1860 rad2 = TMath::Sqrt((jetEta-refEta)*(jetEta-refEta) + (jetPhi-refPhi)*(jetPhi-refPhi));
1861 //check if reference is not within jet cone or gamma cone +0.4
1862 //example: FF fConeSize=0.4, fJetConeSize=0.4, fIsoGammaConeSize=0.3
1863 } while (rad<fJetConeSize+fGammaConeSize || rad2<fJetConeSize+fJetConeSize);
1864 //photon:0.7=0.4+0.3; jets:0.8=0.4 +0.4 //rad<fConeSize+fJetConeSize rad2<fConeSize+0.3
1865 fhRandomPhiEta[0]->Fill(refPhi,refEta);
1867 else if(type==4){//perpendicular to photon axis
1873 //Z axis vector: [jet.Px(),jet.Py(),jet.Pz()]
1874 Double_t jx=gamma.Px();
1875 Double_t jy=gamma.Py();
1876 Double_t jz=gamma.Pz();
1877 //if(jz==0)printf("problem\n");
1879 Double_t Xx=1.0-vertex[0];
1880 Double_t Xy=-1.0*vertex[1];
1881 Double_t Xz=jx/jz*(vertex[0]-1.)+vertex[1]*jy/jz;
1883 Double_t Yx=jy*Xz-jz*Xy;
1884 Double_t Yy=jz*Xx-jx*Xz;
1885 Double_t Yz=jx*Xy-jy*Xx;
1887 Double_t det = Xx*Yy*jz + Xy*Yz*jx + Xz*Yx*jy - Xx*Yz*jy - Xy*Yx*jz - Xz*Yy*jx;
1888 if(det==0)printf("problem det==0\n");
1893 // Double_t tmpScalar = jx*Xx+jy*Xy+jz*Xz;
1894 // printf("scalar jet.P o X: %f\n",tmpScalar);
1895 // tmpScalar = jet.Px()*Yx+jet.Py()*Yy+jet.Pz()*Yz;
1896 // printf("scalar jet.P o Y: %f\n",tmpScalar);
1897 // tmpScalar = Xx*Yx+Xy*Yy+Xz*Yz;
1898 // printf("scalar X o Y: %f\n",tmpScalar);
1903 refPhi=fGenerator->Rndm()*TMath::Pi()*2.;
1904 //refPhi=fGenerator->Uniform(-1,1)*TMath::Pi();
1905 xVar=TMath::Cos(refPhi);
1906 yVar=TMath::Sin(refPhi);
1907 //yVar=TMath::Cos(-TMath::Pi()/2.+refPhi);
1908 //zVar=0 in new surface frame
1909 detX = xVar*Yy*jz + Xz*yVar*jy - xVar*Yz*jy - Xy*yVar*jz;
1910 detY = Xx*yVar*jz + xVar*Yz*jx - xVar*Yx*jz - Xz*yVar*jx;
1911 detZ = Xy*yVar*jx + xVar*Yx*jy - Xx*yVar*jy - xVar*Yy*jx;
1917 perp.SetXYZ(newX,newY,newZ);
1918 refEta = perp.Eta();
1919 refPhi = perp.Phi();//output in <-pi, pi> range
1920 if(refPhi<0)refPhi+=2*TMath::Pi();
1921 rad = TMath::Sqrt((gammaEta-refEta)*(gammaEta-refEta) + (gammaPhi-refPhi)*(gammaPhi-refPhi));
1922 rad2 = TMath::Sqrt((jetEta-refEta)*(jetEta-refEta) + (jetPhi-refPhi)*(jetPhi-refPhi));
1923 //printf("refEta,refPhi,rad,rad2: %f %f %f %f\n",refEta,refPhi,rad,rad2);
1924 } while (rad<fJetConeSize+fGammaConeSize || rad2<fJetConeSize+fJetConeSize || TMath::Abs(refEta)>0.9-fJetConeSize);
1925 fhRandomPhiEta[1]->Fill(refPhi,refEta);
1928 else if(type==3){//mid point
1930 Double_t jx=jet.Px();
1931 Double_t jy=jet.Py();
1932 Double_t jz=jet.Pz();
1933 // if(jz==0)printf("problem\n");
1934 Double_t gx=gamma.Px();
1935 Double_t gy=gamma.Py();
1936 Double_t gz=gamma.Pz();
1938 Double_t cosAlpha=(jx*gx+jy*gy+jz*gz)/(jet.Mag()*gamma.Mag());
1939 Double_t cosinus=TMath::Sqrt((cosAlpha+1.)/2.);
1940 //perpendicular axis
1941 Double_t Zx=gy*jz-gz*jy;
1942 Double_t Zy=gz*jx-gx*jz;
1943 Double_t Zz=gx*jy-gy*jx;
1946 Double_t det = Zx*gy*jz + Zy*gz*jx + Zz*gx*jy - Zz*gy*jx - Zy*gx*jz - Zx*gz*jy;
1952 Double_t detX = -Zy*gz*cosinus +Zz*cosinus*jy + Zz*gy*cosinus - Zy*cosinus*jz;
1953 Double_t detY = Zx*cosinus*jz - Zz*gx*cosinus - Zz*cosinus*jx + Zx*gz*cosinus;
1954 Double_t detZ = -Zx*gy*cosinus + Zy*cosinus*jx + Zy*gx*cosinus - Zx*cosinus*jy;
1962 perp.SetXYZ(newX,newY,newZ);
1963 refEta = perp.Eta();
1964 refPhi = perp.Phi();//output in <-pi, pi> range
1965 if(refPhi<0)refPhi+=2*TMath::Pi();
1966 rad = TMath::Sqrt((gammaEta-refEta)*(gammaEta-refEta) + (gammaPhi-refPhi)*(gammaPhi-refPhi));
1967 rad2 = TMath::Sqrt((jetEta-refEta)*(jetEta-refEta) + (jetPhi-refPhi)*(jetPhi-refPhi));
1968 //printf("refEta,refPhi,rad,rad2: %f %f %f %f\n",refEta,refPhi,rad,rad2);
1970 if (rad<fJetConeSize+fGammaConeSize || rad2<fJetConeSize+fJetConeSize || TMath::Abs(refEta)>0.9-fJetConeSize) fhRandomPhiEta[3]->Fill(refPhi,refEta);
1972 else if(type==5){//tmp
1973 //printf("vertex: %f %f %f \n",vertex[0],vertex[1],vertex[2]);
1979 //Z axis vector: [jet.Px(),jet.Py(),jet.Pz()]
1980 Double_t jx=jet.Px();
1981 Double_t jy=jet.Py();
1982 Double_t jz=jet.Pz();
1983 // if(jz==0)printf("problem\n");
1985 Double_t Xx=1.0-vertex[0];
1986 Double_t Xy=-1.0*vertex[1];
1987 Double_t Xz=jx/jz*(vertex[0]-1.)+vertex[1]*jy/jz;
1989 Double_t Yx=jy*Xz-jz*Xy;
1990 Double_t Yy=jz*Xx-jx*Xz;
1991 Double_t Yz=jx*Xy-jy*Xx;
1994 Double_t Xlength=TMath::Sqrt(Xx*Xx+Xy*Xy+Xz*Xz);
1995 Double_t Ylength=TMath::Sqrt(Yx*Yx+Yy*Yy+Yz*Yz);
1996 Double_t ratio=Ylength/Xlength;
2001 refPhi=fGenerator->Rndm()*TMath::Pi()*2.;
2002 xVar=TMath::Tan(refPhi)/ratio;
2007 perp.SetXYZ(newX,newY,newZ);
2008 refEta = perp.Eta();
2009 refPhi = perp.Phi();//output in <-pi, pi> range
2010 if(refPhi<0)refPhi+=2*TMath::Pi();
2011 rad = TMath::Sqrt((gammaEta-refEta)*(gammaEta-refEta) + (gammaPhi-refPhi)*(gammaPhi-refPhi));
2012 rad2 = TMath::Sqrt((jetEta-refEta)*(jetEta-refEta) + (jetPhi-refPhi)*(jetPhi-refPhi));
2013 //printf("refEta,refPhi,rad,rad2: %f %f %f %f\n",refEta,refPhi,rad,rad2);
2014 } while (rad<fJetConeSize+fGammaConeSize || rad2<fJetConeSize+fJetConeSize || TMath::Abs(refEta)>0.9-fJetConeSize);
2015 fhRandomPhiEta[4]->Fill(refPhi,refEta);
2020 //calculate FF in background
2022 ntracks =GetCTSTracks()->GetEntriesFast();
2023 AliVTrack* track = 0x0 ;
2026 Double_t pt = 0, eta = 0, phi = 0;
2027 Int_t npartcone = 0;
2029 for(Int_t ipr = 0;ipr < ntracks ; ipr ++ ){
2030 track = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
2031 p3.SetXYZ(track->Px(),track->Py(),track->Pz());
2033 if(pt<fPtThresholdInCone) {//0.150
2034 //printf("problem: track pt < %f MeV/c \n",fPtThresholdInCone);
2039 if(phi < 0) phi+=TMath::TwoPi();
2040 //Check if there is any particle inside cone with pt larger than fPtThreshold
2041 rad = TMath::Sqrt((eta-refEta)*(eta-refEta) + (phi-refPhi)*(phi-refPhi));
2042 if(rad < fConeSize && pt > fPtThresholdInCone){
2043 //printf("charged in jet cone pt %f, phi %f, eta %f, R %f \n",pt,phi,eta,rad);
2046 if(type==1){//perp jet
2047 fhBkgFFz[1] ->Fill(gammaPt, pt/gammaPt);
2048 fhBkgFFxi[1]->Fill(gammaPt, TMath::Log(gammaPt/pt));
2049 fhBkgFFpt[1]->Fill(gammaPt, pt);
2051 else if(type==2){//RC
2052 fhBkgFFz[0] ->Fill(gammaPt, pt/gammaPt);
2053 fhBkgFFxi[0]->Fill(gammaPt, TMath::Log(gammaPt/pt));
2054 fhBkgFFpt[0]->Fill(gammaPt, pt);
2056 else if(type==3){//mid point
2057 fhBkgFFz[3] ->Fill(gammaPt, pt/gammaPt);
2058 fhBkgFFxi[3]->Fill(gammaPt, TMath::Log(gammaPt/pt));
2059 fhBkgFFpt[3]->Fill(gammaPt, pt);
2061 else if(type==4){//perp jet
2062 fhBkgFFz[2] ->Fill(gammaPt, pt/gammaPt);
2063 fhBkgFFxi[2]->Fill(gammaPt, TMath::Log(gammaPt/pt));
2064 fhBkgFFpt[2]->Fill(gammaPt, pt);
2066 else if(type==5){//test
2067 fhBkgFFz[4] ->Fill(gammaPt, pt/gammaPt);
2068 fhBkgFFxi[4]->Fill(gammaPt, TMath::Log(gammaPt/pt));
2069 fhBkgFFpt[4]->Fill(gammaPt, pt);
2074 }//end of loop over tracks
2075 Double_t sumOverTracks=0.;
2076 if(npartcone!=0) sumOverTracks = sumPt/npartcone;
2078 fhBkgNTracksInCone[1]->Fill(gammaPt, npartcone);
2079 fhBkgSumPtInCone[1]->Fill(gammaPt,sumPt);
2080 fhBkgSumPtnTracksInCone[1]->Fill(gammaPt,sumOverTracks);
2083 fhBkgNTracksInCone[0]->Fill(gammaPt, npartcone);
2084 fhBkgSumPtInCone[0]->Fill(gammaPt,sumPt);
2085 fhBkgSumPtnTracksInCone[0]->Fill(gammaPt,sumOverTracks);
2088 fhBkgNTracksInCone[3]->Fill(gammaPt, npartcone);
2089 fhBkgSumPtInCone[3]->Fill(gammaPt,sumPt);
2090 fhBkgSumPtnTracksInCone[3]->Fill(gammaPt,sumOverTracks);
2093 fhBkgNTracksInCone[2]->Fill(gammaPt, npartcone);
2094 fhBkgSumPtInCone[2]->Fill(gammaPt,sumPt);
2095 fhBkgSumPtnTracksInCone[2]->Fill(gammaPt,sumOverTracks);
2098 fhBkgNTracksInCone[4]->Fill(gammaPt, npartcone);
2099 fhBkgSumPtInCone[4]->Fill(gammaPt,sumPt);
2100 fhBkgSumPtnTracksInCone[4]->Fill(gammaPt,sumOverTracks);