]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG4/PartCorrDep/AliAnaParticleJetFinderCorrelation.cxx
Add the eta and phi direction of the leading particle.
[u/mrichter/AliRoot.git] / PWG4 / PartCorrDep / AliAnaParticleJetFinderCorrelation.cxx
CommitLineData
1c5acb87 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15/* $Id: AliAnaParticleJetFinderCorrelation.cxx 22232 2007-11-17 16:39:49Z gustavo $ */
16
17//_________________________________________________________________________
18// Class for the analysis of particle (direct gamma) -jet (jet found with finder) correlations
19//*-- Author: Gustavo Conesa (LNF-INFN)
20//////////////////////////////////////////////////////////////////////////////
21
22
23// --- ROOT system ---
24#include "TH2F.h"
477d6cee 25#include "TClonesArray.h"
1c5acb87 26//#include "Riostream.h"
27
28//---- AliRoot system ----
29#include "AliCaloTrackReader.h"
30#include "AliAODJet.h"
31#include "AliAnaParticleJetFinderCorrelation.h"
1c5acb87 32#include "AliAODPWG4ParticleCorrelation.h"
477d6cee 33#include "AliAODTrack.h"
34#include "AliAODCaloCluster.h"
35#include "AliAODEvent.h"
1c5acb87 36
477d6cee 37ClassImp(AliAnaParticleJetFinderCorrelation)
1c5acb87 38
39
40//____________________________________________________________________________
41 AliAnaParticleJetFinderCorrelation::AliAnaParticleJetFinderCorrelation() :
477d6cee 42 AliAnaPartCorrBaseClass(),
1c5acb87 43 fDeltaPhiMaxCut(0.), fDeltaPhiMinCut(0.), fRatioMaxCut(0.), fRatioMinCut(0.),
477d6cee 44 fConeSize(0), fPtThresholdInCone(0),fUseJetRefTracks(0), fMakeCorrelationInHistoMaker(0), fSelectIsolated(0),
45 fhDeltaEta(0), fhDeltaPhi(0), fhDeltaPt(0), fhPtRatio(0), fhPt(0),
46 fhFFz(0),fhFFxi(0),fhFFpt(0),fhNTracksInCone(0)
1c5acb87 47{
477d6cee 48 //Default Ctor
49
50 //Initialize parameters
51 InitParameters();
1c5acb87 52}
53
54//____________________________________________________________________________
55AliAnaParticleJetFinderCorrelation::AliAnaParticleJetFinderCorrelation(const AliAnaParticleJetFinderCorrelation & pjf) :
477d6cee 56 AliAnaPartCorrBaseClass(pjf),
57 fDeltaPhiMaxCut(pjf.fDeltaPhiMaxCut), fDeltaPhiMinCut(pjf.fDeltaPhiMinCut),
58 fRatioMaxCut(pjf.fRatioMaxCut), fRatioMinCut(pjf.fRatioMinCut),
59 fConeSize(pjf.fConeSize), fPtThresholdInCone(pjf.fPtThresholdInCone),
60 fUseJetRefTracks(pjf.fUseJetRefTracks), fMakeCorrelationInHistoMaker(pjf.fMakeCorrelationInHistoMaker),
61 fSelectIsolated(pjf.fSelectIsolated),
62 fhDeltaEta(pjf.fhDeltaEta), fhDeltaPhi(pjf.fhDeltaPhi),
63 fhDeltaPt(pjf.fhDeltaPt), fhPtRatio(pjf.fhPtRatio), fhPt(pjf.fhPt),
64 fhFFz(pjf.fhFFz),fhFFxi(pjf.fhFFxi),fhFFpt(pjf.fhFFpt),
65 fhNTracksInCone(pjf.fhNTracksInCone)
1c5acb87 66{
477d6cee 67 // cpy ctor
68
1c5acb87 69}
70
71//_________________________________________________________________________
72AliAnaParticleJetFinderCorrelation & AliAnaParticleJetFinderCorrelation::operator = (const AliAnaParticleJetFinderCorrelation & pjf)
73{
477d6cee 74 // assignment operator
75
76 if(this == &pjf)return *this;
77 ((AliAnaPartCorrBaseClass *)this)->operator=(pjf);
1c5acb87 78
477d6cee 79 fDeltaPhiMaxCut = pjf.fDeltaPhiMaxCut ;
80 fDeltaPhiMinCut = pjf.fDeltaPhiMinCut ;
81 fRatioMaxCut = pjf.fRatioMaxCut ;
82 fRatioMinCut = pjf.fRatioMinCut ;
83 fConeSize = pjf.fConeSize ;
84 fPtThresholdInCone = pjf.fPtThresholdInCone ;
85 fUseJetRefTracks = pjf.fUseJetRefTracks ;
86 fMakeCorrelationInHistoMaker = pjf.fMakeCorrelationInHistoMaker ;
87 fSelectIsolated = pjf.fSelectIsolated ;
1c5acb87 88
477d6cee 89 //Histograms
90 fhDeltaEta = pjf.fhDeltaEta;
91 fhDeltaPhi = pjf.fhDeltaPhi;
92 fhDeltaPt = pjf.fhDeltaPt;
93 fhPtRatio = pjf.fhPtRatio;
94 fhPt = pjf.fhPt;
95
96 fhFFz = pjf.fhFFz;
97 fhFFxi = pjf.fhFFxi;
98 fhFFpt = pjf.fhFFpt;
99 fhNTracksInCone = pjf.fhNTracksInCone;
1c5acb87 100
101 return *this;
477d6cee 102
1c5acb87 103}
104
105//____________________________________________________________________________
106//AliAnaParticleJetFinderCorrelation::~AliAnaParticleJetFinderCorrelation()
107//{
108// // Remove all pointers except analysis output pointers.
109//
110//}
111
112
113//________________________________________________________________________
114TList * AliAnaParticleJetFinderCorrelation::GetCreateOutputObjects()
115{
477d6cee 116 // Create histograms to be saved in output file and
117 // store them in fOutputContainer
a3aebfff 118
477d6cee 119 TList * outputContainer = new TList() ;
120 outputContainer->SetName("ParticleJetFinderHistos") ;
121
122 Int_t nptbins = GetHistoNPtBins();
123 // Int_t nphibins = GetHistoNPhiBins();
124 // Int_t netabins = GetHistoNEtaBins();
125 Float_t ptmax = GetHistoPtMax();
126 // Float_t phimax = GetHistoPhiMax();
127 // Float_t etamax = GetHistoEtaMax();
128 Float_t ptmin = GetHistoPtMin();
129 // Float_t phimin = GetHistoPhiMin();
1c5acb87 130// Float_t etamin = GetHistoEtaMin();
477d6cee 131
132 fhDeltaPhi = new TH2F("DeltaPhi","#phi_{jet} - #phi_{trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,200,-4,4);
133 fhDeltaPhi->SetYTitle("#Delta #phi");
134 fhDeltaPhi->SetXTitle("p_{T trigger} (GeV/c)");
135 outputContainer->Add(fhDeltaPhi);
136
137 fhDeltaEta = new TH2F("DeltaEta","#eta_{jet} - #eta_{trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,200,-5,5);
138 fhDeltaEta->SetYTitle("#Delta #eta");
139 fhDeltaEta->SetXTitle("p_{T trigger} (GeV/c)");
140 outputContainer->Add(fhDeltaEta);
141
142 fhDeltaPt = new TH2F("DeltaPt","#p_{T trigger} - #p_{T jet} vs p_{T trigger}",nptbins,ptmin,ptmax,200,-100,100);
143 fhDeltaPt->SetYTitle("#Delta #p_{T}");
144 fhDeltaPt->SetXTitle("p_{T trigger} (GeV/c)");
145 outputContainer->Add(fhDeltaPt);
146
147 fhPtRatio = new TH2F("PtRatio","#p_{T jet} / #p_{T trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,200,0,2.);
148 fhPtRatio->SetYTitle("ratio");
149 fhPtRatio->SetXTitle("p_{T trigger} (GeV/c)");
150 outputContainer->Add(fhPtRatio);
151
152 fhPt = new TH2F("Pt","#p_{T jet} vs p_{T trigger}",nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
153 fhPt->SetYTitle("#p_{T jet}(GeV/c)");
154 fhPt->SetXTitle("p_{T trigger} (GeV/c)");
155 outputContainer->Add(fhPt);
156
157 fhFFz = new TH2F("FFz","z = p_{T i charged}/p_{T trigger} vs p_{T trigger}",nptbins,ptmin,ptmax,200,0.,2);
158 fhFFz->SetYTitle("z");
159 fhFFz->SetXTitle("p_{T trigger}");
160 outputContainer->Add(fhFFz) ;
1c5acb87 161
477d6cee 162 fhFFxi = new TH2F("FFxi","#xi = ln(p_{T trigger}/p_{T i charged}) vs p_{T trigger}", nptbins,ptmin,ptmax,100,0.,10.);
163 fhFFxi->SetYTitle("#xi");
164 fhFFxi->SetXTitle("p_{T trigger}");
165 outputContainer->Add(fhFFxi) ;
166
167 fhFFpt = new TH2F("FFpt","#xi = p_{T i charged}) vs p_{T trigger}", nptbins,ptmin,ptmax,200,0.,50.);
168 fhFFpt->SetYTitle("p_{T charged hadron}");
169 fhFFpt->SetXTitle("p_{T trigger}");
170 outputContainer->Add(fhFFpt) ;
171
172 fhNTracksInCone = new TH2F("NTracksInCone","#xi = p_{T i charged}) vs p_{T trigger}", nptbins,ptmin,ptmax,200,0.,50.);
173 fhNTracksInCone->SetYTitle("p_{T charged hadron}");
174 fhNTracksInCone->SetXTitle("p_{T trigger}");
175 outputContainer->Add(fhNTracksInCone) ;
176
177 return outputContainer;
a3aebfff 178
1c5acb87 179}
180
477d6cee 181//____________________________________________________________________________
1c5acb87 182void AliAnaParticleJetFinderCorrelation::InitParameters()
183{
477d6cee 184
1c5acb87 185 //Initialize the parameters of the analysis.
a3aebfff 186 SetInputAODName("PWG4Particle");
187 AddToHistogramsName("AnaJetFinderCorr_");
188
1c5acb87 189 fDeltaPhiMinCut = 1.5 ;
190 fDeltaPhiMaxCut = 4.5 ;
191 fRatioMaxCut = 1.2 ;
192 fRatioMinCut = 0.3 ;
193 fConeSize = 0.3 ;
194 fPtThresholdInCone = 0.5 ;
195 fUseJetRefTracks = kFALSE ;
196 fMakeCorrelationInHistoMaker = kFALSE ;
477d6cee 197 fSelectIsolated = kFALSE;
1c5acb87 198 }
199
200//__________________________________________________________________
a3aebfff 201Int_t AliAnaParticleJetFinderCorrelation::SelectJet(AliAODPWG4Particle * particle) const
1c5acb87 202{
477d6cee 203 //Returns the index of the jet that is opposite to the particle
204
205 Int_t njets = (GetReader()->GetOutputEvent())->GetNJets() ;
206
207 AliAODJet * jet = new AliAODJet ;
208 Int_t index = -1;
209 for(Int_t ijet = 0; ijet < njets ; ijet++){
210 jet = (GetReader()->GetOutputEvent())->GetJet(ijet) ;
211 Float_t dphi = TMath::Abs(particle->Phi()-jet->Phi());
212 Float_t ratio = jet->Pt()/particle->Pt();
213 if(GetDebug() > 3)
a3aebfff 214 printf("AliAnaParticleJetFinderCorrelation::SelectJet() - Jet %d, Ratio pT %2.3f, Delta phi %2.3f\n",ijet,ratio,dphi);
477d6cee 215 Float_t dphiprev= 10000;
216 if((dphi > fDeltaPhiMinCut) && (dphi<fDeltaPhiMaxCut) &&
217 (ratio > fRatioMinCut) && (ratio < fRatioMaxCut) &&
218 (TMath::Abs(dphi-3.14159) < TMath::Abs(dphiprev-3.14159))){//In case there is more than one jet select the most opposite.
219 dphiprev = dphi;
220 index = ijet ;
221 }//Selection cuts
222}//AOD Jet loop
1c5acb87 223
477d6cee 224return index ;
1c5acb87 225
226}
227
228//__________________________________________________________________
229void AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD()
230{
477d6cee 231 //Particle-Jet Correlation Analysis, fill AODs
232 if(!GetInputAODBranch()){
a3aebfff 233 printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - No input particles in AOD with name branch < %s > \n",GetInputAODName().Data());
477d6cee 234 abort();
235 }
a3aebfff 236
477d6cee 237 Int_t ntrig = GetInputAODBranch()->GetEntriesFast() ;
238 if(GetDebug() > 3){
a3aebfff 239 printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - Begin jet finder correlation analysis, fill AODs \n");
240 printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - In particle branch aod entries %d\n", ntrig);
241 printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - In jet branch aod entries %d\n", (GetReader()->GetOutputEvent())->GetNJets());
477d6cee 242 }
1c5acb87 243
477d6cee 244 //Loop on stored AOD particles, trigger
245 for(Int_t iaod = 0; iaod < ntrig ; iaod++){
246 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
a3aebfff 247
477d6cee 248 //Correlate with jets
249 Int_t ijet = SelectJet(particle);
250 if(ijet > -1){
a3aebfff 251 if(GetDebug() > 2) printf ("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - Jet with index %d selected \n",ijet);
252 AliAODJet *jet = (GetReader()->GetOutputEvent())->GetJet(ijet);
477d6cee 253 particle->SetRefJet(jet);
254 }
a3aebfff 255 } // input aod loop
477d6cee 256
a3aebfff 257 if(GetDebug() > 1 ) printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - End fill AODs \n");
1c5acb87 258}
259
260//__________________________________________________________________
261void AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms()
262{
477d6cee 263 //Particle-Jet Correlation Analysis, fill histograms
264
265 if(!GetInputAODBranch()){
a3aebfff 266 printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - No input particles in AOD with name branch < %s > \n",GetInputAODName().Data());
477d6cee 267 abort();
268 }
269 Int_t ntrig = GetInputAODBranch()->GetEntriesFast() ;
270 if(GetDebug() > 1){
a3aebfff 271 printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - Begin jet finder correlation analysis, fill histograms \n");
272 printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - In particle branch aod entries %d\n", ntrig);
273 printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - In jet branch aod entries %d\n", (GetReader()->GetOutputEvent())->GetNJets());
477d6cee 274 }
275
276 //Loop on stored AOD particles, trigger
277 for(Int_t iaod = 0; iaod < ntrig ; iaod++){
a3aebfff 278 AliAODPWG4ParticleCorrelation* particlecorr = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
477d6cee 279
a3aebfff 280 if(OnlyIsolated() && !particlecorr->IsIsolated()) continue;
477d6cee 281
282 //Recover the jet correlated, found previously.
a3aebfff 283 AliAODJet * jet = particlecorr->GetJet();
477d6cee 284 //If correlation not made before, do it now.
285 if(fMakeCorrelationInHistoMaker){
286 //Correlate with jets
a3aebfff 287 Int_t ijet = SelectJet(particlecorr);
477d6cee 288 if(ijet > -1){
a3aebfff 289 if(GetDebug() > 2) printf ("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - Jet with index %d selected \n",ijet);
477d6cee 290 jet = (GetReader()->GetOutputEvent())->GetJet(ijet);
a3aebfff 291 particlecorr->SetRefJet(jet);
477d6cee 292 }
293 }
294
295 if (!jet) continue ;
296
297 //Fill Histograms
298
a3aebfff 299 Double_t ptTrig = particlecorr->Pt();
477d6cee 300 Double_t ptJet = jet->Pt();
a3aebfff 301 Double_t phiTrig = particlecorr->Phi();
477d6cee 302 Double_t phiJet = jet->Phi();
a3aebfff 303 Double_t etaTrig = particlecorr->Eta();
477d6cee 304 Double_t etaJet = jet->Eta();
305 //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",
306 // ptTrig,ptJet, phiJet-phiTrig, etaJet-etaTrig, ptTrig-ptJet, ptJet/ptTrig);
307 fhDeltaPt ->Fill(ptTrig, ptTrig-ptJet);
308 fhDeltaPhi->Fill(ptTrig, phiJet-phiTrig);
309 fhDeltaEta->Fill(ptTrig, etaJet-etaTrig);
310 fhPtRatio ->Fill(ptTrig, ptJet/ptTrig);
311 fhPt ->Fill(ptTrig, ptJet);
312
313 //Fragmentation function
314 Float_t rad = 0, pt = 0, eta = 0, phi = 0;
315 Int_t npartcone = 0;
316 TVector3 p3;
317 AliAODTrack* track = new AliAODTrack ;
318
319 Int_t ntracks = 0;
320 if(!fUseJetRefTracks)
321 ntracks =GetAODCTS()->GetEntriesFast();
322 else //If you want to use jet tracks from JETAN
323 ntracks = (jet->GetRefTracks())->GetEntriesFast();
324
325 for(Int_t ipr = 0;ipr < ntracks ; ipr ++ ){
326 if(!fUseJetRefTracks)
327 track = (AliAODTrack *) (GetAODCTS()->At(ipr)) ;
328 else //If you want to use jet tracks from JETAN
329 track = (AliAODTrack *) ((jet->GetRefTracks())->At(ipr));
330
331 p3.SetXYZ(track->Px(),track->Py(),track->Pz());
332 pt = p3.Pt();
333 eta = p3.Eta();
334 phi = p3.Phi() ;
335 if(phi < 0) phi+=TMath::TwoPi();
336
337 //Check if there is any particle inside cone with pt larger than fPtThreshold
338 rad = TMath::Sqrt((eta-etaJet)*(eta-etaJet)+ (phi-phiJet)*(phi-phiJet));
339 if(rad < fConeSize && pt > fPtThresholdInCone){
340 //printf("charged in jet cone pt %f, phi %f, eta %f, R %f \n",pt,phi,eta,rad);
341 npartcone++;
342 fhFFz ->Fill(ptTrig, pt/ptTrig);
343 fhFFxi->Fill(ptTrig, TMath::Log(ptTrig/pt));
344 fhFFpt->Fill(ptTrig, pt);
345 }
346 }//Tracks
347 fhNTracksInCone->Fill(ptTrig, npartcone);
348 }//AOD trigger particle loop
a3aebfff 349 if(GetDebug() > 1) printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - End fill histograms \n");
1c5acb87 350}
351
352
353//__________________________________________________________________
354void AliAnaParticleJetFinderCorrelation::Print(const Option_t * opt) const
355{
1c5acb87 356
477d6cee 357 //Print some relevant parameters set for the analysis
358 if(! opt)
359 return;
360
a3aebfff 361 printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
362 AliAnaPartCorrBaseClass::Print(" ");
363
477d6cee 364 printf("Phi trigger-jet < %3.2f\n", fDeltaPhiMaxCut) ;
365 printf("Phi trigger-jet > %3.2f\n", fDeltaPhiMinCut) ;
366 printf("pT Ratio trigger/jet < %3.2f\n", fRatioMaxCut) ;
367 printf("pT Ratio trigger/jet > %3.2f\n", fRatioMinCut) ;
368 printf("fConeSize = %3.2f\n", fConeSize) ;
369 printf("fPtThresholdInCone = %3.2f\n", fPtThresholdInCone) ;
370 printf("fUseJetRefTracks = %d\n", fUseJetRefTracks) ;
371 printf("fMakeCorrelationInHistoMaker = %d\n", fMakeCorrelationInHistoMaker) ;
372 printf("Isolated Trigger? %d\n", fSelectIsolated) ;
373
1c5acb87 374}
375