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 - hadron correlations
18 // Particle (for example direct gamma) must be found in a previous analysis
19 //-- Author: Gustavo Conesa (LNF-INFN)
21 // Modified by Yaxian Mao:
22 // 1. add the UE subtraction for corrlation study
23 // 2. change the correlation variable
24 // 3. Only use leading particle(cluster/track) as trigger for correlation (2010/07/02)
25 // 4. Make decay photon-hadron correlations where decay contribute pi0 mass (2010/09/09)
26 // 5. fill the pout to extract kt at the end, also to study charge asymmetry(2010/10/06)
27 // 6. Add the possibility for event selection analysis based on vertex and multiplicity bins (10/10/2010)
28 // 7. change the way of delta phi cut for UE study due to memory issue (reduce histograms)
29 // 8. Add the possibility to request the absolute leading particle at the near side or not, set trigger bins, general clean-up (08/2011)
30 //////////////////////////////////////////////////////////////////////////////
33 // --- ROOT system ---
34 //#include "TClonesArray.h"
38 #include <TDatabasePDG.h>
40 //---- ANALYSIS system ----
41 #include "AliNeutralMesonSelection.h"
42 #include "AliAnaParticleHadronCorrelation.h"
43 #include "AliCaloTrackReader.h"
44 #include "AliAODPWG4ParticleCorrelation.h"
45 #include "AliFiducialCut.h"
46 #include "AliVTrack.h"
47 #include "AliVCluster.h"
48 #include "AliMCAnalysisUtils.h"
49 #include "TParticle.h"
51 #include "AliAODMCParticle.h"
52 #include "AliMixedEvent.h"
53 #include "AliAnalysisManager.h"
54 #include "AliInputEventHandler.h"
56 ClassImp(AliAnaParticleHadronCorrelation)
59 //___________________________________________________________________
60 AliAnaParticleHadronCorrelation::AliAnaParticleHadronCorrelation():
61 AliAnaCaloTrackCorrBaseClass(),
63 fMaxAssocPt(1000.), fMinAssocPt(0.),
64 fDeltaPhiMaxCut(0.), fDeltaPhiMinCut(0.),
65 fSelectIsolated(0), fMakeSeveralUE(0),
66 fUeDeltaPhiMaxCut(0.), fUeDeltaPhiMinCut(0.),
67 fPi0AODBranchName(""), fNeutralCorr(0),
68 fPi0Trigger(0), fDecayTrigger(0),
69 fMakeAbsoluteLeading(0), fMakeNearSideLeading(0),
70 fLeadingTriggerIndex(-1), fHMPIDCorrelation(0), fFillBradHisto(0),
71 fNAssocPtBins(0), fAssocPtBinLimit(),
72 fDoOwnMix(0), fUseTrackMultBins(0),
75 fhPtLeading(0), fhPhiLeading(0),
76 fhEtaLeading(0), fhDeltaPhiDeltaEtaCharged(0),
77 fhPhiCharged(0), fhEtaCharged(0),
78 fhDeltaPhiCharged(0), fhDeltaEtaCharged(0),
79 fhDeltaPhiChargedPt(0), fhDeltaPhiUeChargedPt(0),
80 fhXECharged(0), fhXEUeCharged(0),
81 fhXEPosCharged(0), fhXENegCharged(0),
82 fhPtHbpXECharged(0), fhPtHbpXEUeCharged(0),
83 fhZTCharged(0), fhZTUeCharged(0),
84 fhZTPosCharged(0), fhZTNegCharged(0),
85 fhPtHbpZTCharged(0), fhPtHbpZTUeCharged(0),
86 fhDeltaPhiUeLeftCharged(0), fhDeltaPhiUeRightCharged(0),
87 fhXEUeLeftCharged(0), fhXEUeRightCharged(0),
88 fhPtHbpXEUeLeftCharged(0), fhPtHbpXEUeRightCharged(0),
89 fhZTUeLeftCharged(0), fhZTUeRightCharged(0),
90 fhPtHbpZTUeLeftCharged(0), fhPtHbpZTUeRightCharged(0),
91 fhPtTrigPout(0), fhPtTrigCharged(0),
92 fhTrigDeltaPhiCharged(0x0), fhTrigDeltaEtaCharged(0x0),
93 fhTrigXECorr(0x0), fhTrigXEUeCorr(0x0),
94 fhTrigZTCorr(0x0), fhTrigZTUeCorr(0x0),
96 fhDeltaPhiAssocPtBin(0), fhDeltaPhiAssocPtBinHMPID(0), fhDeltaPhiAssocPtBinHMPIDAcc(0),
97 fhDeltaPhiBradAssocPtBin(0), fhDeltaPhiBrad(0),
98 fhXEAssocPtBin(0), fhZTAssocPtBin(0),
99 fhDeltaPhiDeltaEtaNeutral(0),
100 fhPhiNeutral(0), fhEtaNeutral(0),
101 fhDeltaPhiNeutral(0), fhDeltaEtaNeutral(0),
102 fhDeltaPhiNeutralPt(0), fhDeltaPhiUeNeutralPt(0),
103 fhXENeutral(0), fhXEUeNeutral(0),
104 fhPtHbpXENeutral(0), fhPtHbpXEUeNeutral(0),
105 fhZTNeutral(0), fhZTUeNeutral(0),
106 fhPtHbpZTNeutral(0), fhPtHbpZTUeNeutral(0),
107 fhDeltaPhiUeLeftNeutral(0), fhDeltaPhiUeRightNeutral(0),
108 fhXEUeLeftNeutral(0), fhXEUeRightNeutral(0),
109 fhPtHbpXEUeLeftNeutral(0), fhPtHbpXEUeRightNeutral(0),
110 fhZTUeLeftNeutral(0), fhZTUeRightNeutral(0),
111 fhPtHbpZTUeLeftNeutral(0), fhPtHbpZTUeRightNeutral(0),
112 fhPtPi0DecayRatio(0),
113 fhDeltaPhiDecayCharged(0), fhXEDecayCharged(0), fhZTDecayCharged(0),
114 fhDeltaPhiDecayNeutral(0), fhXEDecayNeutral(0), fhZTDecayNeutral(0),
115 fhDeltaPhiDecayChargedAssocPtBin(0),
116 fhXEDecayChargedAssocPtBin(0), fhZTDecayChargedAssocPtBin(0),
117 fh2phiLeadingParticle(0x0),
118 fhMCEtaCharged(0), fhMCPhiCharged(0),
119 fhMCDeltaEtaCharged(0), fhMCDeltaPhiCharged(0x0),
120 fhMCDeltaPhiDeltaEtaCharged(0), fhMCDeltaPhiChargedPt(0),
121 fhMCPtXECharged(0), fhMCPtHbpXECharged(0),
122 fhMCPtZTCharged(0), fhMCPtHbpZTCharged(0),
123 fhMCPtTrigPout(0), fhMCPtAssocDeltaPhi(0),
126 fhNtracksAll(0), fhNtracksTrigger(0),
128 fhMixDeltaPhiCharged(0), fhMixDeltaPhiDeltaEtaCharged(0),
129 fhMixDeltaPhiChargedAssocPtBin(),fhMixDeltaPhiDeltaEtaChargedAssocPtBin(0)
133 //Initialize parameters
137 //_________________________________________________________________
138 AliAnaParticleHadronCorrelation::~AliAnaParticleHadronCorrelation()
140 // Remove event containers
142 if(fDoOwnMix && fListMixEvents)
144 for(Int_t iz=0; iz < GetNZvertBin(); iz++)
146 for(Int_t ic=0; ic < GetNCentrBin(); ic++)
148 fListMixEvents[ic*GetNZvertBin()+iz]->Delete() ;
149 delete fListMixEvents[ic*GetNZvertBin()+iz] ;
153 delete[] fListMixEvents;
158 //______________________________________________________________________________________________________________________________________________________
159 void AliAnaParticleHadronCorrelation::FillChargedAngularCorrelationHistograms(const Float_t ptAssoc, const Float_t ptTrig, const Int_t assocBin,
160 const Float_t phiAssoc, const Float_t phiTrig, Float_t & deltaPhi,
161 const Float_t etaAssoc, const Float_t etaTrig,
162 const Bool_t decay, const Float_t hmpidSignal, const Int_t nTracks)
164 // Fill angular correlation related histograms
166 Float_t deltaEta = etaTrig-etaAssoc;
167 deltaPhi = phiTrig-phiAssoc;
168 Float_t deltaPhiOrg = deltaPhi;
170 if(deltaPhi <= -TMath::PiOver2()) deltaPhi+=TMath::TwoPi();
171 if(deltaPhi > 3*TMath::PiOver2()) deltaPhi-=TMath::TwoPi();
173 fhEtaCharged ->Fill(ptAssoc,etaAssoc);
174 fhPhiCharged ->Fill(ptAssoc,phiAssoc);
175 fhDeltaEtaCharged->Fill(ptTrig ,deltaEta);
176 fhDeltaPhiCharged->Fill(ptTrig ,deltaPhi);
178 if(ptAssoc > 2 ) fhDeltaPhiDeltaEtaCharged->Fill(deltaPhi, deltaEta);
180 if(fDecayTrigger && decay) fhDeltaPhiDecayCharged ->Fill(ptTrig , deltaPhi);
182 Double_t dphiBrad = -100;
185 dphiBrad = atan2(sin(deltaPhiOrg), cos(deltaPhiOrg))/TMath::Pi();//-1 to 1
186 if(TMath::Abs(dphiBrad)>0.325 && TMath::Abs(dphiBrad)<0.475) //Hardcoded values, BAD, FIXME
188 fhAssocPtBkg->Fill(ptTrig, ptAssoc);
191 if(dphiBrad<-1./3) dphiBrad += 2;
192 fhDeltaPhiBrad->Fill(ptTrig, dphiBrad);
195 // Fill histograms in bins of associated particle pT
198 fhDeltaPhiAssocPtBin[assocBin]->Fill(ptTrig, deltaPhi);
199 if (fFillBradHisto) fhDeltaPhiBradAssocPtBin [assocBin]->Fill(ptTrig, dphiBrad);
200 if(fDecayTrigger && decay) fhDeltaPhiDecayChargedAssocPtBin[assocBin]->Fill(ptTrig, deltaPhi);
202 if(fHMPIDCorrelation)
204 if( hmpidSignal > 0 )
206 //printf("Track pt %f with HMPID signal %f \n",pt,hmpidSignal);
207 fhDeltaPhiAssocPtBinHMPID[assocBin]->Fill(ptTrig, deltaPhi);
210 if(phiAssoc > 5*TMath::DegToRad() && phiAssoc < 20*TMath::DegToRad())
212 //printf("Track pt %f in HMPID acceptance phi %f \n ",pt,phi*TMath::RadToDeg() );
213 fhDeltaPhiAssocPtBinHMPIDAcc[assocBin]->Fill(ptTrig, deltaPhi);
218 //fill different multiplicity histogram
221 for(Int_t im = 0; im<GetMultiBin(); im++)
223 if(nTracks < ( GetMaxMulti() - GetMinMulti() )/GetMultiBin()*(im+1))
225 fhTrigDeltaPhiCharged[im]->Fill(ptTrig,deltaPhi);
226 fhTrigDeltaEtaCharged[im]->Fill(ptTrig,deltaEta);
232 //____________________________________________________________________________________________________________________________________________________
233 Bool_t AliAnaParticleHadronCorrelation::FillChargedMCCorrelationHistograms(const Float_t mcAssocPt, Float_t mcAssocPhi, const Float_t mcAssocEta,
234 const Float_t mcTrigPt, const Float_t mcTrigPhi, const Float_t mcTrigEta)
236 // Fill MC histograms independently of AOD or ESD
238 //Select only hadrons in pt range
239 if(mcAssocPt < fMinAssocPt || mcAssocPt > fMaxAssocPt) return kTRUE ; // exclude but continue
241 if(mcAssocPhi < 0) mcAssocPhi+=TMath::TwoPi();
243 //remove trigger itself for correlation when use charged triggers
244 if(TMath::Abs(mcAssocPt -mcTrigPt ) < 1e-6 &&
245 TMath::Abs(mcAssocPhi-mcTrigPhi) < 1e-6 &&
246 TMath::Abs(mcAssocEta-mcTrigEta) < 1e-6) return kTRUE ; // exclude but continue
249 if( fMakeAbsoluteLeading && mcAssocPt > mcTrigPt ) return kFALSE; // jump event
251 //jump out this event if near side associated partile pt larger than trigger
252 if( fMakeNearSideLeading && mcAssocPt > mcTrigPt &&
253 TMath::Abs(mcAssocPhi-mcTrigPhi)<TMath::PiOver2() ) return kFALSE; // jump event
255 Float_t mcdeltaPhi= mcTrigPhi-mcAssocPhi;
256 if(mcdeltaPhi <= -TMath::PiOver2()) mcdeltaPhi+=TMath::TwoPi();
257 if(mcdeltaPhi > 3*TMath::PiOver2()) mcdeltaPhi-=TMath::TwoPi();
259 Float_t mcxE =-mcAssocPt/mcTrigPt*TMath::Cos(mcdeltaPhi);// -(mcAssocPx*pxprim+mcAssocPy*pyprim)/(mcTrigPt*mcTrigPt);
260 Float_t mchbpXE =-100 ;
261 if(mcxE > 0 ) mchbpXE = TMath::Log(1./mcxE);
263 Float_t mczT = mcAssocPt/mcTrigPt ;
264 Float_t mchbpZT =-100 ;
265 if(mczT > 0 ) mchbpZT = TMath::Log(1./mczT);
267 //Selection within angular range
268 if( mcdeltaPhi< -TMath::PiOver2()) mcdeltaPhi+=TMath::TwoPi();
269 if( mcdeltaPhi>3*TMath::PiOver2()) mcdeltaPhi-=TMath::TwoPi();
271 Double_t mcpout = mcAssocPt*TMath::Sin(mcdeltaPhi) ;
274 printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation() - Charged hadron: track Pt %f, track Phi %f, phi trigger %f. Cuts: delta phi %2.2f < %2.2f < %2.2f, pT min %2.2f \n",
275 mcAssocPt,mcAssocPhi, mcTrigPhi,fDeltaPhiMinCut, mcdeltaPhi, fDeltaPhiMaxCut, GetMinPt());
278 fhMCEtaCharged ->Fill(mcAssocPt, mcAssocEta);
279 fhMCPhiCharged ->Fill(mcAssocPt, mcAssocPhi);
280 fhMCDeltaEtaCharged->Fill(mcTrigPt, mcTrigEta-mcAssocEta);
281 fhMCDeltaPhiCharged->Fill(mcTrigPt, mcdeltaPhi);
282 fhMCPtAssocDeltaPhi->Fill(mcAssocPt, mcdeltaPhi);
284 fhMCDeltaPhiDeltaEtaCharged->Fill(mcdeltaPhi,mcTrigEta-mcAssocEta);
286 //delta phi cut for correlation
287 if( (mcdeltaPhi > fDeltaPhiMinCut) && (mcdeltaPhi < fDeltaPhiMaxCut) )
289 fhMCDeltaPhiChargedPt->Fill(mcAssocPt,mcdeltaPhi);
290 fhMCPtXECharged ->Fill(mcTrigPt,mcxE);
291 fhMCPtHbpXECharged ->Fill(mcTrigPt,mchbpXE);
292 fhMCPtZTCharged ->Fill(mcTrigPt,mczT);
293 fhMCPtHbpZTCharged ->Fill(mcTrigPt,mchbpZT);
294 fhMCPtTrigPout ->Fill(mcTrigPt, mcpout) ;
300 //___________________________________________________________________________________________________________________
301 void AliAnaParticleHadronCorrelation::FillChargedMomentumImbalanceHistograms(const Float_t ptTrig, const Float_t ptAssoc,
302 const Float_t xE, const Float_t hbpXE,
303 const Float_t zT, const Float_t hbpZT,
304 const Float_t pout, const Float_t deltaPhi,
305 const Int_t nTracks, const Int_t charge,
306 const Int_t assocBin, const Bool_t decay )
309 // Fill mostly momentum imbalance related histograms
311 fhDeltaPhiChargedPt ->Fill(ptAssoc, deltaPhi);
312 fhXECharged ->Fill(ptTrig , xE);
313 fhPtHbpXECharged ->Fill(ptTrig , hbpXE);
314 fhZTCharged ->Fill(ptTrig , zT);
315 fhPtHbpZTCharged ->Fill(ptTrig , hbpZT);
316 fhPtTrigPout ->Fill(ptTrig , pout) ;
317 fhPtTrigCharged ->Fill(ptTrig , ptAssoc) ;
319 if(fDecayTrigger && decay)
321 fhXEDecayCharged->Fill(ptTrig,xE);
322 fhZTDecayCharged->Fill(ptTrig,zT);
323 } // photon decay pi0/eta trigger
325 if(assocBin >= 0 )//away side
327 fhXEAssocPtBin[assocBin]->Fill(ptTrig, xE) ;
328 fhZTAssocPtBin[assocBin]->Fill(ptTrig, zT) ;
330 if(fDecayTrigger && decay)
332 fhXEDecayChargedAssocPtBin[assocBin]->Fill(ptTrig, xE);
333 fhZTDecayChargedAssocPtBin[assocBin]->Fill(ptTrig, zT);
339 fhXEPosCharged->Fill(ptTrig,xE) ;
340 fhZTPosCharged->Fill(ptTrig,zT) ;
344 fhXENegCharged->Fill(ptTrig,xE) ;
345 fhZTNegCharged->Fill(ptTrig,zT) ;
348 //fill different multiplicity histogram
351 for(Int_t im=0; im<GetMultiBin(); im++)
353 if(nTracks < ( GetMaxMulti() - GetMinMulti() )/GetMultiBin()*(im+1))
355 fhTrigXECorr[im]->Fill(ptTrig,xE);
356 fhTrigZTCorr[im]->Fill(ptTrig,zT);
359 } //multiplicity events selection
362 //_______________________________________________________________________________________________________________________
363 void AliAnaParticleHadronCorrelation::FillChargedUnderlyingEventHistograms(const Float_t ptTrig, const Float_t ptAssoc,
364 const Float_t deltaPhi, const Int_t nTracks)
366 // Fill underlying event histograms
368 fhDeltaPhiUeChargedPt->Fill(ptAssoc,deltaPhi);
370 Double_t randomphi = gRandom->Uniform(TMath::Pi()/2,3*TMath::Pi()/2);
371 Double_t uexE = -(ptAssoc/ptTrig)*TMath::Cos(randomphi);
372 Double_t uezT = ptAssoc/ptTrig;
374 if(uexE < 0.) uexE = -uexE;
376 fhXEUeCharged->Fill(ptTrig,uexE);
377 if(uexE > 0) fhPtHbpXEUeCharged->Fill(ptTrig,TMath::Log(1/uexE));
379 fhZTUeCharged->Fill(ptTrig,uezT);
380 if(uexE > 0) fhPtHbpZTUeCharged->Fill(ptTrig,TMath::Log(1/uezT));
384 for(Int_t im=0; im<GetMultiBin(); im++)
386 if(nTracks < ( GetMaxMulti() - GetMinMulti() )/GetMultiBin()*(im+1))
388 fhTrigXEUeCorr[im]->Fill(ptTrig,uexE); // xE? CHECK
389 fhTrigZTUeCorr[im]->Fill(ptTrig,uezT); // zT? CHECK
392 } //multiplicity events selection
395 //___________________________________________________________________________________________________________________________
396 void AliAnaParticleHadronCorrelation::FillChargedUnderlyingEventSidesHistograms(const Float_t ptTrig, const Float_t ptAssoc,
397 const Float_t xE, const Float_t hbpXE,
398 const Float_t zT, const Float_t hbpZT,
399 const Float_t deltaPhi)
401 // Fill underlying event histograms to the left and right of trigger
403 if((deltaPhi<-fUeDeltaPhiMinCut) && (deltaPhi >-fUeDeltaPhiMaxCut))
405 fhDeltaPhiUeLeftCharged->Fill(ptAssoc, deltaPhi);
406 fhXEUeLeftCharged ->Fill(ptTrig , xE);
407 fhPtHbpXEUeLeftCharged ->Fill(ptTrig , hbpXE);
408 fhZTUeLeftCharged ->Fill(ptTrig , zT);
409 fhPtHbpZTUeLeftCharged ->Fill(ptTrig , hbpZT);
412 if((deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < fUeDeltaPhiMaxCut))
414 fhDeltaPhiUeRightCharged->Fill(ptAssoc, deltaPhi);
415 fhXEUeRightCharged ->Fill(ptTrig , xE);
416 fhPtHbpXEUeRightCharged ->Fill(ptTrig , hbpXE);
417 fhZTUeRightCharged ->Fill(ptTrig , zT);
418 fhPtHbpZTUeRightCharged ->Fill(ptTrig , hbpZT);
422 //______________________________________________________________________________________________________________________________
423 void AliAnaParticleHadronCorrelation::FillDecayPhotonCorrelationHistograms(const Float_t ptAssoc, const Float_t phiAssoc,
424 const TLorentzVector mom1, const TLorentzVector mom2,
425 const Bool_t bChargedOrNeutral)
427 // Do correlation with decay photons of triggered pi0 or eta
429 // Calculate the correlation parameters
430 Float_t ptDecay1 = mom1.Pt();
431 Float_t ptDecay2 = mom2.Pt();
433 Float_t zTDecay1 = -100, zTDecay2 = -100;
434 if(ptDecay1) zTDecay1 = ptAssoc/ptDecay1 ;
435 if(ptDecay2) zTDecay2 = ptAssoc/ptDecay2 ;
437 Float_t deltaPhiDecay1 = mom1.Phi()-phiAssoc;
438 if(deltaPhiDecay1< -TMath::PiOver2()) deltaPhiDecay1+=TMath::TwoPi();
439 if(deltaPhiDecay1>3*TMath::PiOver2()) deltaPhiDecay1-=TMath::TwoPi();
441 Float_t deltaPhiDecay2 = mom2.Phi()-phiAssoc;
442 if(deltaPhiDecay2< -TMath::PiOver2()) deltaPhiDecay2+=TMath::TwoPi();
443 if(deltaPhiDecay2>3*TMath::PiOver2()) deltaPhiDecay2-=TMath::TwoPi();
445 Float_t xEDecay1 =-zTDecay1*TMath::Cos(deltaPhiDecay1); // -(px*pxTrig+py*pyTrig)/(ptTrig*ptTrig);
446 Float_t xEDecay2 =-zTDecay2*TMath::Cos(deltaPhiDecay2); // -(px*pxTrig+py*pyTrig)/(ptTrig*ptTrig);
448 if(bChargedOrNeutral) // correlate with charges
450 fhDeltaPhiDecayCharged->Fill(ptDecay1, deltaPhiDecay1);
451 fhDeltaPhiDecayCharged->Fill(ptDecay2, deltaPhiDecay2);
453 if(GetDebug() > 1)printf("AliAnaParticleHadronCorrelation::FillDecayPhotonHistograms( Charged corr) - deltaPhoton1 = %f, deltaPhoton2 = %f \n", deltaPhiDecay1, deltaPhiDecay2);
455 if( (deltaPhiDecay1 > fDeltaPhiMinCut) && ( deltaPhiDecay1 < fDeltaPhiMaxCut) )
457 fhZTDecayCharged->Fill(ptDecay1,zTDecay1);
458 fhXEDecayCharged->Fill(ptDecay1,xEDecay1);
460 if( (deltaPhiDecay2 > fDeltaPhiMinCut) && ( deltaPhiDecay2 < fDeltaPhiMaxCut) )
462 fhZTDecayCharged->Fill(ptDecay2,zTDecay2);
463 fhXEDecayCharged->Fill(ptDecay2,xEDecay2);
466 else // correlate with neutrals
468 fhDeltaPhiDecayCharged->Fill(ptDecay1, deltaPhiDecay1);
469 fhDeltaPhiDecayCharged->Fill(ptDecay2, deltaPhiDecay2);
471 if(GetDebug() > 1)printf("AliAnaParticleHadronCorrelation::FillDecayPhotonHistograms(Neutral corr) - deltaPhoton1 = %f, deltaPhoton2 = %f \n", deltaPhiDecay1, deltaPhiDecay2);
473 if( (deltaPhiDecay1 > fDeltaPhiMinCut) && ( deltaPhiDecay1 < fDeltaPhiMaxCut) )
475 fhZTDecayCharged->Fill(ptDecay1,zTDecay1);
476 fhXEDecayCharged->Fill(ptDecay1,xEDecay1);
478 if( (deltaPhiDecay2 > fDeltaPhiMinCut) && ( deltaPhiDecay2 < fDeltaPhiMaxCut) )
480 fhZTDecayCharged->Fill(ptDecay2,zTDecay2);
481 fhXEDecayCharged->Fill(ptDecay2,xEDecay2);
486 //______________________________________________________________________________________________________________________________________________________
487 void AliAnaParticleHadronCorrelation::FillNeutralAngularCorrelationHistograms(const Float_t ptAssoc, const Float_t ptTrig,
488 const Float_t phiAssoc, const Float_t phiTrig, Float_t & deltaPhi,
489 const Float_t etaAssoc, const Float_t etaTrig)
491 // Fill angular correlation related histograms
493 Float_t deltaEta = etaTrig-etaAssoc;
494 deltaPhi = phiTrig-phiAssoc;
496 if(deltaPhi <= -TMath::PiOver2()) deltaPhi+=TMath::TwoPi();
497 if(deltaPhi > 3*TMath::PiOver2()) deltaPhi-=TMath::TwoPi();
499 fhEtaNeutral ->Fill(ptAssoc,etaAssoc);
500 fhPhiNeutral ->Fill(ptAssoc,phiAssoc);
501 fhDeltaEtaNeutral->Fill(ptTrig ,deltaEta);
502 fhDeltaPhiNeutral->Fill(ptTrig ,deltaPhi);
504 if(ptAssoc > 2 ) fhDeltaPhiDeltaEtaNeutral->Fill(deltaPhi, deltaEta);
508 //_____________________________________________________________________________________________________________________________
509 void AliAnaParticleHadronCorrelation::FillNeutralUnderlyingEventSidesHistograms(const Float_t ptTrig, const Float_t ptAssoc,
510 const Float_t xE, const Float_t hbpXE,
511 const Float_t zT, const Float_t hbpZT,
512 const Float_t deltaPhi)
514 // Fill underlying event histograms to the left and right of trigger
516 if((deltaPhi<-fUeDeltaPhiMinCut) && (deltaPhi >-fUeDeltaPhiMaxCut))
518 fhDeltaPhiUeLeftNeutral->Fill(ptAssoc, deltaPhi);
519 fhXEUeLeftNeutral ->Fill(ptTrig , xE);
520 fhPtHbpXEUeLeftNeutral ->Fill(ptTrig , hbpXE);
521 fhZTUeLeftNeutral ->Fill(ptTrig , zT);
522 fhPtHbpZTUeLeftNeutral ->Fill(ptTrig , hbpZT);
525 if((deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < fUeDeltaPhiMaxCut))
527 fhDeltaPhiUeRightNeutral->Fill(ptAssoc, deltaPhi);
528 fhXEUeRightNeutral ->Fill(ptTrig , xE);
529 fhPtHbpXEUeRightNeutral ->Fill(ptTrig , hbpXE);
530 fhZTUeRightNeutral ->Fill(ptTrig , zT);
531 fhPtHbpZTUeRightNeutral ->Fill(ptTrig , hbpZT);
535 //_____________________________________________________________
536 void AliAnaParticleHadronCorrelation::FillChargedEventMixPool()
540 Int_t nTracks = GetCTSTracks()->GetEntriesFast();
542 fhNtracksAll->Fill(nTracks);
544 AliAnalysisManager * manager = AliAnalysisManager::GetAnalysisManager();
545 AliInputEventHandler * inputHandler = dynamic_cast<AliInputEventHandler*>(manager->GetInputEventHandler());
547 if(!inputHandler) return ;
549 if(inputHandler->IsEventSelected( ) & GetReader()->GetEventTriggerMask())
551 fhNtracksTrigger->Fill(nTracks);
554 if(inputHandler->IsEventSelected( ) & AliVEvent::kAnyINT)
557 fhNtracksINT->Fill(nTracks);
560 Double_t v[3] = {0,0,0}; //vertex ;
561 GetReader()->GetVertex(v);
563 Int_t curZvertBin = (Int_t)(0.5*GetNZvertBin()*(v[2]+GetZvertexCut())/GetZvertexCut()) ;
565 // centrality or tracks bin
566 Int_t curCentrBin = 0;
567 if(fUseTrackMultBins)
568 { // Track multiplicity bins
569 //curCentrBin = (GetTrackMultiplicity()-1)/5;
570 //if(curCentrBin > GetNCentrBin()-1) curCentrBin=GetNCentrBin()-1;
571 Int_t trackMult = GetReader()->GetTrackMultiplicity();
574 else if(trackMult<=10)
576 else if(trackMult<=15)
578 else if(trackMult<=20)
580 else if(trackMult<=30)
582 else if(trackMult<=40)
584 else if(trackMult<=55)
586 else if(trackMult<=70)
590 else // Set centrality based on centrality task
592 curCentrBin = GetEventCentrality() * GetNCentrBin() / GetReader()->GetCentralityOpt();
593 if(GetDebug() > 0 )printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - curCentrBin %d, centrality %d, n bins %d, max bin from centrality %d\n",
594 curCentrBin, GetEventCentrality(), GetNCentrBin(), GetReader()->GetCentralityOpt());
597 TObjArray * mixEventTracks = new TObjArray;
599 //printf("curCen %d, curZ %d, bin %d\n",curCentrBin,curZvertBin,curCentrBin*GetNZvertBin()+curZvertBin);
601 if(!fListMixEvents[curCentrBin*GetNZvertBin()+curZvertBin])
602 fListMixEvents[curCentrBin*GetNZvertBin()+curZvertBin]=new TList();
604 TList * pool = fListMixEvents[curCentrBin*GetNZvertBin()+curZvertBin];
607 for(Int_t ipr = 0;ipr < GetCTSTracks()->GetEntriesFast() ; ipr ++ )
609 AliVTrack * track = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
611 Double_t mom[3] = {track->Px(),track->Py(),track->Pz()};
612 p3.SetXYZ(mom[0],mom[1],mom[2]);
613 Float_t pt = p3.Pt();
615 //Select only hadrons in pt range
616 if(pt < fMinAssocPt || pt > fMaxAssocPt) continue ;
618 AliAODPWG4Particle * mixedTrack = new AliAODPWG4Particle(mom[0],mom[1],mom[2],0);
619 mixedTrack->SetDetector("CTS");
620 mixedTrack->SetChargedBit(track->Charge()>0);
622 mixEventTracks->Add(mixedTrack);
625 pool->AddFirst(mixEventTracks);
627 if(pool->GetSize() >= GetNMaxEvMix())
629 TClonesArray * tmp = static_cast<TClonesArray*>(pool->Last()) ;
638 //____________________________________________________________
639 TObjString* AliAnaParticleHadronCorrelation::GetAnalysisCuts()
641 //Save parameters used for analysis
642 TString parList ; //this will be list of parameters used for this analysis.
643 const Int_t buffersize = 560;
644 char onePar[buffersize] ;
646 snprintf(onePar,buffersize,"--- AliAnaPaticleHadronCorrelation ---\n") ;
648 snprintf(onePar,buffersize," Pt Trigger > %3.2f ", fMinTriggerPt) ;
650 snprintf(onePar,buffersize," %3.2f < Pt associated < %3.2f ", fMinAssocPt, fMaxAssocPt) ;
652 snprintf(onePar,buffersize," %3.2f < Phi trigger particle-Hadron < %3.2f ", fDeltaPhiMinCut, fDeltaPhiMaxCut) ;
654 snprintf(onePar,buffersize," %3.2f < Phi trigger particle-UeHadron < %3.2f ", fUeDeltaPhiMinCut, fUeDeltaPhiMaxCut) ;
656 snprintf(onePar,buffersize,"Isolated Trigger? %d\n", fSelectIsolated) ;
658 snprintf(onePar,buffersize,"Several UE? %d\n", fMakeSeveralUE) ;
660 snprintf(onePar,buffersize,"Name of AOD Pi0 Branch %s ", fPi0AODBranchName.Data());
662 snprintf(onePar,buffersize,"Do Decay-hadron correlation ? pi0 %d, decay %d", fPi0Trigger, fDecayTrigger) ;
664 snprintf(onePar,buffersize,"Select absolute leading for cluster triggers ? %d or Near Side Leading %d \n",
665 fMakeAbsoluteLeading, fMakeNearSideLeading) ;
667 snprintf(onePar,buffersize,"Associated particle pt bins %d: ", fNAssocPtBins) ;
669 for (Int_t ibin = 0; ibin<fNAssocPtBins; ibin++) {
670 snprintf(onePar,buffersize,"bin %d = [%2.1f,%2.1f];", ibin, fAssocPtBinLimit[ibin], fAssocPtBinLimit[ibin+1]) ;
674 //Get parameters set in base class.
675 parList += GetBaseParametersList() ;
677 //Get parameters set in FiducialCut class (not available yet)
678 //parlist += GetFidCut()->GetFidCutParametersList()
680 return new TObjString(parList) ;
684 //________________________________________________________________
685 TList * AliAnaParticleHadronCorrelation::GetCreateOutputObjects()
688 // Create histograms to be saved in output file and
689 // store them in fOutputContainer
691 TList * outputContainer = new TList() ;
692 outputContainer->SetName("CorrelationHistos") ;
694 Int_t nptbins = GetHistogramRanges()->GetHistoPtBins(); Int_t nphibins = GetHistogramRanges()->GetHistoPhiBins(); Int_t netabins = GetHistogramRanges()->GetHistoEtaBins();
695 Float_t ptmax = GetHistogramRanges()->GetHistoPtMax(); Float_t phimax = GetHistogramRanges()->GetHistoPhiMax(); Float_t etamax = GetHistogramRanges()->GetHistoEtaMax();
696 Float_t ptmin = GetHistogramRanges()->GetHistoPtMin(); Float_t phimin = GetHistogramRanges()->GetHistoPhiMin(); Float_t etamin = GetHistogramRanges()->GetHistoEtaMin();
698 fhPtLeading = new TH1F ("hPtLeading","p_T distribution of leading particles", nptbins,ptmin,ptmax);
699 fhPtLeading->SetXTitle("p_{T}^{trig} (GeV/c)");
701 fhPhiLeading = new TH2F ("hPhiLeading","#phi distribution of leading Particles",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
702 fhPhiLeading->SetYTitle("#phi (rad)");
704 fhEtaLeading = new TH2F ("hEtaLeading","#eta distribution of leading",nptbins,ptmin,ptmax, netabins,etamin,etamax);
705 fhEtaLeading->SetYTitle("#eta ");
707 outputContainer->Add(fhPtLeading);
708 outputContainer->Add(fhPhiLeading);
709 outputContainer->Add(fhEtaLeading);
711 //Correlation with charged hadrons
712 if(GetReader()->IsCTSSwitchedOn())
714 fhDeltaPhiDeltaEtaCharged = new TH2F
715 ("hDeltaPhiDeltaEtaCharged","#phi_{trigger} - #phi_{h^{#pm}} vs #eta_{trigger} - #eta_{h^{#pm}}",
716 140,-2.,5.,200,-2,2);
717 fhDeltaPhiDeltaEtaCharged->SetXTitle("#Delta #phi");
718 fhDeltaPhiDeltaEtaCharged->SetYTitle("#Delta #eta");
720 fhPhiCharged = new TH2F
721 ("hPhiCharged","#phi_{h^{#pm}} vs p_{T #pm}",
722 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
723 fhPhiCharged->SetYTitle("#phi_{h^{#pm}} (rad)");
724 fhPhiCharged->SetXTitle("p_{T #pm} (GeV/c)");
726 fhEtaCharged = new TH2F
727 ("hEtaCharged","#eta_{h^{#pm}} vs p_{T #pm}",
728 nptbins,ptmin,ptmax,netabins,etamin,etamax);
729 fhEtaCharged->SetYTitle("#eta_{h^{#pm}} (rad)");
730 fhEtaCharged->SetXTitle("p_{T #pm} (GeV/c)");
732 fhDeltaPhiCharged = new TH2F
733 ("hDeltaPhiCharged","#phi_{trigger} - #phi_{h^{#pm}} vs p_{T trigger}",
734 nptbins,ptmin,ptmax,140,-2.,5.);
735 fhDeltaPhiCharged->SetYTitle("#Delta #phi");
736 fhDeltaPhiCharged->SetXTitle("p_{T trigger} (GeV/c)");
738 fhDeltaPhiChargedPt = new TH2F
739 ("hDeltaPhiChargedPt","#phi_{trigger} - #phi_{#h^{#pm}} vs p_{T h^{#pm}}",
740 nptbins,ptmin,ptmax,140,-2.,5.);
741 fhDeltaPhiChargedPt->SetYTitle("#Delta #phi");
742 fhDeltaPhiChargedPt->SetXTitle("p_{T h^{#pm}} (GeV/c)");
744 fhDeltaPhiUeChargedPt = new TH2F
745 ("hDeltaPhiUeChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs p_{T Ueh^{#pm}}",
746 nptbins,ptmin,ptmax,140,-2.,5.);
747 fhDeltaPhiUeChargedPt->SetYTitle("#Delta #phi");
748 fhDeltaPhiUeChargedPt->SetXTitle("p_{T h^{#pm}} (GeV/c)");
750 fhDeltaEtaCharged = new TH2F
751 ("hDeltaEtaCharged","#eta_{trigger} - #eta_{h^{#pm}} vs p_{T trigger}",
752 nptbins,ptmin,ptmax,200,-2,2);
753 fhDeltaEtaCharged->SetYTitle("#Delta #eta");
754 fhDeltaEtaCharged->SetXTitle("p_{T trigger} (GeV/c)");
757 new TH2F("hXECharged","x_{E} for charged tracks",
758 nptbins,ptmin,ptmax,200,0.,2.);
759 fhXECharged->SetYTitle("x_{E}");
760 fhXECharged->SetXTitle("p_{T trigger}");
763 new TH2F("hXEUeCharged","x_{E} for Underlying Event",
764 nptbins,ptmin,ptmax,200,0.,2.);
765 fhXEUeCharged->SetYTitle("x_{E}");
766 fhXEUeCharged->SetXTitle("p_{T trigger}");
769 new TH2F("hXEPositiveCharged","x_{E} for positive charged tracks",
770 nptbins,ptmin,ptmax,200,0.,2.);
771 fhXEPosCharged->SetYTitle("x_{E}");
772 fhXEPosCharged->SetXTitle("p_{T trigger}");
775 new TH2F("hXENegativeCharged","x_{E} for negative charged tracks",
776 nptbins,ptmin,ptmax,200,0.,2.);
777 fhXENegCharged->SetYTitle("x_{E}");
778 fhXENegCharged->SetXTitle("p_{T trigger}");
781 new TH2F("hHbpXECharged","#xi = ln(1/x_{E}) with charged hadrons",
782 nptbins,ptmin,ptmax,200,0.,10.);
783 fhPtHbpXECharged->SetYTitle("ln(1/x_{E})");
784 fhPtHbpXECharged->SetXTitle("p_{T trigger}");
787 new TH2F("hHbpXEUeCharged","#xi = ln(1/x_{E}) with charged hadrons,Underlying Event",
788 nptbins,ptmin,ptmax,200,0.,10.);
789 fhPtHbpXEUeCharged->SetYTitle("ln(1/x_{E})");
790 fhPtHbpXEUeCharged->SetXTitle("p_{T trigger}");
793 new TH2F("hZTCharged","z_{T} for charged tracks",
794 nptbins,ptmin,ptmax,200,0.,2.);
795 fhZTCharged->SetYTitle("z_{T}");
796 fhZTCharged->SetXTitle("p_{T trigger}");
799 new TH2F("hZTUeCharged","z_{T} for Underlying Event",
800 nptbins,ptmin,ptmax,200,0.,2.);
801 fhZTUeCharged->SetYTitle("z_{T}");
802 fhZTUeCharged->SetXTitle("p_{T trigger}");
805 new TH2F("hZTPositiveCharged","z_{T} for positive charged tracks",
806 nptbins,ptmin,ptmax,200,0.,2.);
807 fhZTPosCharged->SetYTitle("z_{T}");
808 fhZTPosCharged->SetXTitle("p_{T trigger}");
811 new TH2F("hZTNegativeCharged","z_{T} for negative charged tracks",
812 nptbins,ptmin,ptmax,200,0.,2.);
813 fhZTNegCharged->SetYTitle("z_{T}");
814 fhZTNegCharged->SetXTitle("p_{T trigger}");
817 new TH2F("hHbpZTCharged","#xi = ln(1/z_{T}) with charged hadrons",
818 nptbins,ptmin,ptmax,200,0.,10.);
819 fhPtHbpZTCharged->SetYTitle("ln(1/z_{T})");
820 fhPtHbpZTCharged->SetXTitle("p_{T trigger}");
823 new TH2F("hHbpZTUeCharged","#xi = ln(1/z_{T}) with charged hadrons,Underlying Event",
824 nptbins,ptmin,ptmax,200,0.,10.);
825 fhPtHbpZTUeCharged->SetYTitle("ln(1/x_{E})");
826 fhPtHbpZTUeCharged->SetXTitle("p_{T trigger}");
829 new TH2F("hPtTrigPout","Pout with triggers",
830 nptbins,ptmin,ptmax,2*nptbins,-ptmax,ptmax);
831 fhPtTrigPout->SetYTitle("p_{out} (GeV/c)");
832 fhPtTrigPout->SetXTitle("p_{T trigger} (GeV/c)");
835 new TH2F("hPtTrigCharged","trgger and charged tracks pt distribution",
836 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
837 fhPtTrigCharged->SetYTitle("p_{T h^{#pm}} (GeV/c)");
838 fhPtTrigCharged->SetXTitle("p_{T trigger} (GeV/c)");
840 outputContainer->Add(fhDeltaPhiDeltaEtaCharged);
841 outputContainer->Add(fhPhiCharged) ;
842 outputContainer->Add(fhEtaCharged) ;
843 outputContainer->Add(fhDeltaPhiCharged) ;
844 outputContainer->Add(fhDeltaEtaCharged) ;
845 outputContainer->Add(fhDeltaPhiChargedPt) ;
846 outputContainer->Add(fhDeltaPhiUeChargedPt) ;
848 outputContainer->Add(fhXECharged) ;
849 outputContainer->Add(fhXEPosCharged) ;
850 outputContainer->Add(fhXENegCharged) ;
851 outputContainer->Add(fhXEUeCharged) ;
852 outputContainer->Add(fhPtHbpXECharged) ;
853 outputContainer->Add(fhPtHbpXEUeCharged) ;
855 outputContainer->Add(fhZTCharged) ;
856 outputContainer->Add(fhZTPosCharged) ;
857 outputContainer->Add(fhZTNegCharged) ;
858 outputContainer->Add(fhZTUeCharged) ;
859 outputContainer->Add(fhPtHbpZTCharged) ;
860 outputContainer->Add(fhPtHbpZTUeCharged) ;
862 outputContainer->Add(fhPtTrigPout) ;
863 outputContainer->Add(fhPtTrigCharged) ;
867 Int_t nMultiBins = GetMultiBin();
868 fhTrigDeltaPhiCharged = new TH2F*[nMultiBins] ;
869 fhTrigDeltaEtaCharged = new TH2F*[nMultiBins] ;
870 fhTrigXECorr = new TH2F*[nMultiBins] ;
871 fhTrigXEUeCorr = new TH2F*[nMultiBins] ;
872 fhTrigZTCorr = new TH2F*[nMultiBins] ;
873 fhTrigZTUeCorr = new TH2F*[nMultiBins] ;
875 for(Int_t im=0; im<nMultiBins; im++)
877 fhTrigDeltaPhiCharged[im] = new TH2F
878 (Form("hTrigDeltaPhiCharged_%d",im),Form("hTrigDeltaPhiCharged_%d",im), nptbins,ptmin,ptmax, 140,-2.,5.);
879 fhTrigDeltaPhiCharged[im]->SetXTitle("p_{T trigger} (GeV/c)");
880 fhTrigDeltaPhiCharged[im]->SetYTitle("#Delta #phi");
882 fhTrigDeltaEtaCharged[im] = new TH2F
883 (Form("hTrigDeltaEtaCharged_%d",im),Form("hTrigDeltaEtaCharged_%d",im), nptbins,ptmin,ptmax, 200,-2,2);
884 fhTrigDeltaEtaCharged[im]->SetXTitle("p_{T trigger} (GeV/c)");
885 fhTrigDeltaEtaCharged[im]->SetYTitle("#Delta #eta");
887 fhTrigXECorr[im] = new TH2F
888 (Form("hTrigXEPtCorr_%d",im),Form("hTrigXEPtCorr_%d",im), nptbins,ptmin,ptmax,200,0.,2.);
889 fhTrigXECorr[im]->SetYTitle("x_{E trigger h^{#pm}}");
890 fhTrigXECorr[im]->SetXTitle("p_{T trigger}");
892 fhTrigXEUeCorr[im] = new TH2F
893 (Form("hTrigXEPtUeCorr_%d",im),Form("hTrigXEPtUeCorr_%d",im), nptbins,ptmin,ptmax,200,0.,2.);
894 fhTrigXEUeCorr[im]->SetYTitle("x_{E trigger h^{#pm}}");
895 fhTrigXEUeCorr[im]->SetXTitle("p_{T trigger}");
897 fhTrigZTCorr[im] = new TH2F
898 (Form("hTrigZTPtCorr_%d",im),Form("hTrigZTPtCorr_%d",im), nptbins,ptmin,ptmax,200,0.,2.);
899 fhTrigZTCorr[im]->SetYTitle("z_{trigger h^{#pm}}");
900 fhTrigZTCorr[im]->SetXTitle("p_{T trigger}");
902 fhTrigZTUeCorr[im] = new TH2F
903 (Form("hTrigZTPtUeCorr_%d",im),Form("hTrigZTPtUeCorr_%d",im), nptbins,ptmin,ptmax,200,0.,2.);
904 fhTrigZTUeCorr[im]->SetYTitle("z_{trigger h^{#pm}}");
905 fhTrigZTUeCorr[im]->SetXTitle("p_{T trigger}");
907 outputContainer->Add(fhTrigDeltaPhiCharged[im]) ;
908 outputContainer->Add(fhTrigDeltaEtaCharged[im]) ;
909 outputContainer->Add(fhTrigXECorr[im]);
910 outputContainer->Add(fhTrigXEUeCorr[im]);
911 outputContainer->Add(fhTrigZTCorr[im]);
912 outputContainer->Add(fhTrigZTUeCorr[im]);
918 fhAssocPtBkg = new TH2F("hAssocPtBkg", " Trigger p_{T} vs associated hadron p_{T} from background",
919 nptbins, ptmin, ptmax,nptbins,ptmin,ptmax);
920 fhAssocPtBkg->SetXTitle("p_{T trigger}");
921 fhAssocPtBkg->SetYTitle("p_{T associated}");
922 outputContainer->Add(fhAssocPtBkg) ;
924 fhDeltaPhiBrad = new TH2F("hDeltaPhiBrad","atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi vs p_{T trigger} ",
925 nptbins, ptmin, ptmax,288, -1.0/3.0, 5.0/3.0);
926 fhDeltaPhiBrad->SetXTitle("p_{T trigger}");
927 fhDeltaPhiBrad->SetYTitle("atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi");
928 outputContainer->Add(fhDeltaPhiBrad) ;
931 fhDeltaPhiAssocPtBin = new TH2F*[fNAssocPtBins] ;
932 fhXEAssocPtBin = new TH2F*[fNAssocPtBins] ;
933 fhZTAssocPtBin = new TH2F*[fNAssocPtBins] ;
936 fhDeltaPhiBradAssocPtBin = new TH2F*[fNAssocPtBins] ;
938 if(fPi0Trigger || fDecayTrigger)
940 fhDeltaPhiAssocPtBin = new TH2F*[fNAssocPtBins] ;
941 fhXEAssocPtBin = new TH2F*[fNAssocPtBins] ;
942 fhZTAssocPtBin = new TH2F*[fNAssocPtBins] ;
943 fhXEDecayChargedAssocPtBin = new TH2F*[fNAssocPtBins] ;
944 fhZTDecayChargedAssocPtBin = new TH2F*[fNAssocPtBins] ;
945 fhDeltaPhiDecayChargedAssocPtBin = new TH2F*[fNAssocPtBins] ;
948 if(fHMPIDCorrelation)
950 fhDeltaPhiAssocPtBinHMPID = new TH2F*[fNAssocPtBins] ;
951 fhDeltaPhiAssocPtBinHMPIDAcc= new TH2F*[fNAssocPtBins] ;
954 for(Int_t i = 0 ; i < fNAssocPtBins ; i++)
956 fhDeltaPhiAssocPtBin[i] = new TH2F(Form("hDeltaPhiPtAssocPt%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
957 Form("#Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
958 nptbins, ptmin, ptmax,140,-2.,5.);
959 fhDeltaPhiAssocPtBin[i]->SetXTitle("p_{T trigger}");
960 fhDeltaPhiAssocPtBin[i]->SetYTitle("#Delta #phi");
962 fhXEAssocPtBin[i] = new TH2F(Form("hXEAssocPtBin%1.f_%1.f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
963 Form("x_{E} vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
964 nptbins, ptmin, ptmax,200, 0.0, 2.0);
965 fhXEAssocPtBin[i]->SetXTitle("p_{T trigger}");
966 fhXEAssocPtBin[i]->SetYTitle("x_{E}");
968 fhZTAssocPtBin[i] = new TH2F(Form("hZTAssocPtBin%1.f_%1.f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
969 Form("z_{T} vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
970 nptbins, ptmin, ptmax,200, 0.0, 2.0);
971 fhZTAssocPtBin[i]->SetXTitle("p_{T trigger}");
972 fhZTAssocPtBin[i]->SetYTitle("z_{T}");
974 outputContainer->Add(fhDeltaPhiAssocPtBin[i]) ;
975 outputContainer->Add(fhXEAssocPtBin[i]);
976 outputContainer->Add(fhZTAssocPtBin[i]);
978 if(fPi0Trigger || fDecayTrigger)
980 fhDeltaPhiDecayChargedAssocPtBin[i] = new TH2F(Form("hDeltaPhiPtDecayChargedAssocPt%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
981 Form("#Delta #phi vs p_{T trigger} tagged as decay for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
982 nptbins, ptmin, ptmax,140,-2.,5.);
983 fhDeltaPhiDecayChargedAssocPtBin[i]->SetXTitle("p_{T trigger}");
984 fhDeltaPhiDecayChargedAssocPtBin[i]->SetYTitle("#Delta #phi");
986 fhXEDecayChargedAssocPtBin[i] = new TH2F(Form("hXEDecayChargedAssocPtBin%1.f_%1.f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
987 Form("x_{E} vs p_{T trigger} tagged as decay for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
988 nptbins, ptmin, ptmax,200, 0.0, 2.0);
989 fhXEDecayChargedAssocPtBin[i]->SetXTitle("p_{T trigger}");
990 fhXEDecayChargedAssocPtBin[i]->SetYTitle("x_{E}");
992 fhZTDecayChargedAssocPtBin[i] = new TH2F(Form("hZTDecayChargedAssocPtBin%1.f_%1.f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
993 Form("z_{T} vs p_{T trigger} tagged as decay for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
994 nptbins, ptmin, ptmax,200, 0.0, 2.0);
995 fhZTDecayChargedAssocPtBin[i]->SetXTitle("p_{T trigger}");
996 fhZTDecayChargedAssocPtBin[i]->SetYTitle("z_{T}");
998 outputContainer->Add(fhDeltaPhiDecayChargedAssocPtBin[i]) ;
999 outputContainer->Add(fhXEDecayChargedAssocPtBin[i]);
1000 outputContainer->Add(fhZTDecayChargedAssocPtBin[i]);
1006 fhDeltaPhiBradAssocPtBin[i] = new TH2F(Form("hDeltaPhiBradPtAssocPt%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1007 Form("atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1008 nptbins, ptmin, ptmax,288, -1.0/3.0, 5.0/3.0);
1009 fhDeltaPhiBradAssocPtBin[i]->SetXTitle("p_{T trigger}");
1010 fhDeltaPhiBradAssocPtBin[i]->SetYTitle("atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi");
1011 outputContainer->Add(fhDeltaPhiBradAssocPtBin[i]) ;
1014 if(fHMPIDCorrelation)
1016 fhDeltaPhiAssocPtBinHMPID[i] = new TH2F(Form("hDeltaPhiPtAssocPt%2.1f_%2.1fHMPID", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1017 Form("#Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f], with track having HMPID signal", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1018 nptbins, ptmin, ptmax,140,-2.,5.);
1019 fhDeltaPhiAssocPtBinHMPID[i]->SetXTitle("p_{T trigger}");
1020 fhDeltaPhiAssocPtBinHMPID[i]->SetYTitle("#Delta #phi");
1022 fhDeltaPhiAssocPtBinHMPIDAcc[i] = new TH2F(Form("hDeltaPhiPtAssocPt%2.1f_%2.1fHMPIDAcc", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1023 Form("#Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f], with track within 5<phi<20 deg", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1024 nptbins, ptmin, ptmax,140,-2.,5.);
1025 fhDeltaPhiAssocPtBinHMPIDAcc[i]->SetXTitle("p_{T trigger}");
1026 fhDeltaPhiAssocPtBinHMPIDAcc[i]->SetYTitle("#Delta #phi");
1028 outputContainer->Add(fhDeltaPhiAssocPtBinHMPID[i]) ;
1029 outputContainer->Add(fhDeltaPhiAssocPtBinHMPIDAcc[i]) ;
1034 if(fPi0Trigger || fDecayTrigger)
1038 fhPtPi0DecayRatio = new TH2F
1039 ("hPtPi0DecayRatio","p_T of #pi^{0} and the ratio of pt for two decay",
1040 nptbins,ptmin,ptmax, 100,0.,2.);
1041 fhPtPi0DecayRatio->SetXTitle("p_{T}^{#pi^{0}} (GeV/c)");
1042 fhPtPi0DecayRatio->SetYTitle("p_{T}^{Decay}/p_{T}^{#pi^{0}}");
1043 outputContainer->Add(fhPtPi0DecayRatio) ;
1046 fhDeltaPhiDecayCharged = new TH2F
1047 ("hDeltaPhiDecayCharged","#phi_{Decay} - #phi_{h^{#pm}} vs p_{T Decay}",
1048 nptbins,ptmin,ptmax,140,-2.,5.);
1049 fhDeltaPhiDecayCharged->SetYTitle("#Delta #phi");
1050 fhDeltaPhiDecayCharged->SetXTitle("p_{T Decay} (GeV/c)");
1053 new TH2F("hXEDecayCharged","x_{E} Decay",
1054 nptbins,ptmin,ptmax,200,0.,2.);
1055 fhXEDecayCharged->SetYTitle("x_{E}");
1056 fhXEDecayCharged->SetXTitle("p_{T decay}");
1059 new TH2F("hZTDecayCharged","z_{trigger h^{#pm}} = p_{T h^{#pm}} / p_{T Decay}",
1060 nptbins,ptmin,ptmax,200,0.,2.);
1061 fhZTDecayCharged->SetYTitle("z_{decay h^{#pm}}");
1062 fhZTDecayCharged->SetXTitle("p_{T decay}");
1064 outputContainer->Add(fhDeltaPhiDecayCharged) ;
1065 outputContainer->Add(fhXEDecayCharged) ;
1066 outputContainer->Add(fhZTDecayCharged) ;
1071 fhDeltaPhiUeLeftCharged = new TH2F
1072 ("hDeltaPhiUeLeftChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs p_{T Ueh^{#pm}} with UE left side range of trigger particles",
1073 nptbins,ptmin,ptmax,140,-2.,5.);
1074 fhDeltaPhiUeLeftCharged->SetYTitle("#Delta #phi");
1075 fhDeltaPhiUeLeftCharged->SetXTitle("p_{T h^{#pm}} (GeV/c)");
1076 outputContainer->Add(fhDeltaPhiUeLeftCharged) ;
1078 fhDeltaPhiUeRightCharged = new TH2F
1079 ("hDeltaPhiUeRightChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs p_{T Ueh^{#pm}} with UE right side range of trigger particles",
1080 nptbins,ptmin,ptmax,140,-2.,5.);
1081 fhDeltaPhiUeRightCharged->SetYTitle("#Delta #phi");
1082 fhDeltaPhiUeRightCharged->SetXTitle("p_{T h^{#pm}} (GeV/c)");
1083 outputContainer->Add(fhDeltaPhiUeRightCharged) ;
1086 new TH2F("hXEUeChargedLeft","x_{E} with UE left side of trigger",
1087 nptbins,ptmin,ptmax,200,0.,2.);
1088 fhXEUeLeftCharged->SetYTitle("x_{E Ueh^{#pm}}");
1089 fhXEUeLeftCharged->SetXTitle("p_{T trigger}");
1090 outputContainer->Add(fhXEUeLeftCharged) ;
1092 fhXEUeRightCharged =
1093 new TH2F("hXEUeChargedRight","x_{E h^{#pm}} with UE right side of trigger",
1094 nptbins,ptmin,ptmax,200,0.,2.);
1095 fhXEUeRightCharged->SetYTitle("z_{trigger Ueh^{#pm}}");
1096 fhXEUeRightCharged->SetXTitle("p_{T trigger}");
1097 outputContainer->Add(fhXEUeRightCharged) ;
1099 fhPtHbpXEUeLeftCharged =
1100 new TH2F("hHbpXEUeChargedLeft","#xi = ln(1/x_{E}) with charged UE left side of trigger",
1101 nptbins,ptmin,ptmax,200,0.,10.);
1102 fhPtHbpXEUeLeftCharged->SetYTitle("ln(1/x_{E})");
1103 fhPtHbpXEUeLeftCharged->SetXTitle("p_{T trigger}");
1104 outputContainer->Add(fhPtHbpXEUeLeftCharged) ;
1106 fhPtHbpXEUeRightCharged =
1107 new TH2F("hHbpXEUeChargedRight","#xi = ln(1/x_{E}) with charged UE right side of trigger",
1108 nptbins,ptmin,ptmax,200,0.,10.);
1109 fhPtHbpXEUeRightCharged->SetYTitle("ln(1/x_{E})");
1110 fhPtHbpXEUeRightCharged->SetXTitle("p_{T trigger}");
1111 outputContainer->Add(fhPtHbpXEUeRightCharged) ;
1114 new TH2F("hZTUeChargedLeft","z_{trigger h^{#pm}} = p_{T Ueh^{#pm}} / p_{T trigger} with UE left side of trigger",
1115 nptbins,ptmin,ptmax,200,0.,2.);
1116 fhZTUeLeftCharged->SetYTitle("z_{trigger Ueh^{#pm}}");
1117 fhZTUeLeftCharged->SetXTitle("p_{T trigger}");
1118 outputContainer->Add(fhZTUeLeftCharged) ;
1120 fhZTUeRightCharged =
1121 new TH2F("hZTUeChargedRight","z_{trigger h^{#pm}} = p_{T Ueh^{#pm}} / p_{T trigger} with UE right side of trigger",
1122 nptbins,ptmin,ptmax,200,0.,2.);
1123 fhZTUeRightCharged->SetYTitle("z_{trigger Ueh^{#pm}}");
1124 fhZTUeRightCharged->SetXTitle("p_{T trigger}");
1125 outputContainer->Add(fhZTUeRightCharged) ;
1127 fhPtHbpZTUeLeftCharged =
1128 new TH2F("hHbpZTUeChargedLeft","#xi = ln(1/z_{T}) with charged UE left side of trigger",
1129 nptbins,ptmin,ptmax,200,0.,10.);
1130 fhPtHbpZTUeLeftCharged->SetYTitle("ln(1/z_{T})");
1131 fhPtHbpZTUeLeftCharged->SetXTitle("p_{T trigger}");
1132 outputContainer->Add(fhPtHbpZTUeLeftCharged) ;
1134 fhPtHbpZTUeRightCharged =
1135 new TH2F("hHbpZTUeChargedRight","#xi = ln(1/z_{T}) with charged UE right side of trigger",
1136 nptbins,ptmin,ptmax,200,0.,10.);
1137 fhPtHbpZTUeRightCharged->SetYTitle("ln(1/z_{T})");
1138 fhPtHbpZTUeRightCharged->SetXTitle("p_{T trigger}");
1139 outputContainer->Add(fhPtHbpZTUeRightCharged) ;
1142 } //Correlation with charged hadrons
1144 //Correlation with neutral hadrons
1147 fhDeltaPhiDeltaEtaNeutral = new TH2F
1148 ("hDeltaPhiDeltaEtaNeutral","#phi_{trigger} - #phi_{h^{0}} vs #eta_{trigger} - #eta_{h^{0}}",
1149 140,-2.,5.,200,-2,2);
1150 fhDeltaPhiDeltaEtaNeutral->SetXTitle("#Delta #phi");
1151 fhDeltaPhiDeltaEtaNeutral->SetYTitle("#Delta #eta");
1153 fhPhiNeutral = new TH2F
1154 ("hPhiNeutral","#phi_{#pi^{0}} vs p_{T #pi^{0}}",
1155 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
1156 fhPhiNeutral->SetYTitle("#phi_{#pi^{0}} (rad)");
1157 fhPhiNeutral->SetXTitle("p_{T #pi^{0}} (GeV/c)");
1159 fhEtaNeutral = new TH2F
1160 ("hEtaNeutral","#eta_{#pi^{0}} vs p_{T #pi^{0}}",
1161 nptbins,ptmin,ptmax,netabins,etamin,etamax);
1162 fhEtaNeutral->SetYTitle("#eta_{#pi^{0}} (rad)");
1163 fhEtaNeutral->SetXTitle("p_{T #pi^{0}} (GeV/c)");
1165 fhDeltaPhiNeutral = new TH2F
1166 ("hDeltaPhiNeutral","#phi_{trigger} - #phi_{#pi^{0}} vs p_{T trigger}",
1167 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
1168 fhDeltaPhiNeutral->SetYTitle("#Delta #phi");
1169 fhDeltaPhiNeutral->SetXTitle("p_{T trigger} (GeV/c)");
1171 fhDeltaPhiNeutralPt = new TH2F
1172 ("hDeltaPhiNeutralPt","#phi_{trigger} - #phi_{#pi^{0}} vs p_{T #pi^{0}}}",
1173 nptbins,ptmin,ptmax,140,-2.,5.);
1174 fhDeltaPhiNeutralPt->SetYTitle("#Delta #phi");
1175 fhDeltaPhiNeutralPt->SetXTitle("p_{T h^{0}} (GeV/c)");
1177 fhDeltaPhiUeNeutralPt = new TH2F
1178 ("hDeltaPhiUeNeutralPt","#phi_{trigger} - #phi_{#pi^{0}} vs p_{T #pi^{0}}}",
1179 nptbins,ptmin,ptmax,140,-2.,5.);
1180 fhDeltaPhiUeNeutralPt->SetYTitle("#Delta #phi");
1181 fhDeltaPhiUeNeutralPt->SetXTitle("p_{T h^{0}} (GeV/c)");
1183 fhDeltaEtaNeutral = new TH2F
1184 ("hDeltaEtaNeutral","#eta_{trigger} - #eta_{#pi^{0}} vs p_{T trigger}",
1185 nptbins,ptmin,ptmax,200,-2,2);
1186 fhDeltaEtaNeutral->SetYTitle("#Delta #eta");
1187 fhDeltaEtaNeutral->SetXTitle("p_{T trigger} (GeV/c)");
1190 new TH2F("hXENeutral","x_{E} for #pi^{0} associated",
1191 nptbins,ptmin,ptmax,200,0.,2.);
1192 fhXENeutral->SetYTitle("x_{E}");
1193 fhXENeutral->SetXTitle("p_{T trigger}");
1196 new TH2F("hXEUeNeutral","x_{E} for #pi^{0} associated",
1197 nptbins,ptmin,ptmax,200,0.,2.);
1198 fhXEUeNeutral->SetYTitle("x_{E}");
1199 fhXEUeNeutral->SetXTitle("p_{T trigger}");
1202 new TH2F("hHbpXENeutral","#xi = ln(1/x_{E})for #pi^{0} associated",
1203 nptbins,ptmin,ptmax,200,0.,10.);
1204 fhPtHbpXENeutral->SetYTitle("ln(1/x_{E})");
1205 fhPtHbpXENeutral->SetXTitle("p_{T trigger}");
1207 fhPtHbpXEUeNeutral =
1208 new TH2F("hHbpXEUeNeutral","#xi = ln(1/x_{E}) for #pi^{0} associated",
1209 nptbins,ptmin,ptmax,200,0.,10.);
1210 fhPtHbpXEUeNeutral->SetYTitle("ln(1/x_{E})");
1211 fhPtHbpXEUeNeutral->SetXTitle("p_{T trigger}");
1214 new TH2F("hZTNeutral","z_{trigger #pi} = p_{T #pi^{0}} / p_{T trigger} for #pi^{0} associated",
1215 nptbins,ptmin,ptmax,200,0.,2.);
1216 fhZTNeutral->SetYTitle("z_{trigger #pi^{0}}");
1217 fhZTNeutral->SetXTitle("p_{T trigger}");
1220 new TH2F("hZTUeNeutral","z_{trigger #pi} = p_{T #pi^{0}} / p_{T trigger} for #pi^{0} associated",
1221 nptbins,ptmin,ptmax,200,0.,2.);
1222 fhZTUeNeutral->SetYTitle("z_{trigger #pi^{0}}");
1223 fhZTUeNeutral->SetXTitle("p_{T trigger}");
1226 new TH2F("hHbpZTNeutral","#xi = ln(1/x_{E}) for #pi^{0} associated",
1227 nptbins,ptmin,ptmax,200,0.,10.);
1228 fhPtHbpZTNeutral->SetYTitle("ln(1/z_{T})");
1229 fhPtHbpZTNeutral->SetXTitle("p_{T trigger}");
1231 fhPtHbpZTUeNeutral =
1232 new TH2F("hHbpZTUeNeutral","#xi = ln(1/x_{E}) for #pi^{0} associated",
1233 nptbins,ptmin,ptmax,200,0.,10.);
1234 fhPtHbpXEUeNeutral->SetYTitle("ln(1/z_{T})");
1235 fhPtHbpXEUeNeutral->SetXTitle("p_{T trigger}");
1237 outputContainer->Add(fhDeltaPhiDeltaEtaNeutral);
1238 outputContainer->Add(fhPhiNeutral) ;
1239 outputContainer->Add(fhEtaNeutral) ;
1240 outputContainer->Add(fhDeltaPhiNeutral) ;
1241 outputContainer->Add(fhDeltaPhiNeutralPt) ;
1242 outputContainer->Add(fhDeltaPhiUeNeutralPt) ;
1243 outputContainer->Add(fhDeltaEtaNeutral) ;
1244 outputContainer->Add(fhXENeutral) ;
1245 outputContainer->Add(fhXEUeNeutral) ;
1246 outputContainer->Add(fhPtHbpXENeutral) ;
1247 outputContainer->Add(fhPtHbpXEUeNeutral) ;
1248 outputContainer->Add(fhZTNeutral) ;
1249 outputContainer->Add(fhZTUeNeutral) ;
1250 outputContainer->Add(fhPtHbpZTNeutral) ;
1251 outputContainer->Add(fhPtHbpZTUeNeutral) ;
1253 if(fPi0Trigger || fDecayTrigger)
1255 fhDeltaPhiDecayNeutral = new TH2F
1256 ("hDeltaPhiDecayNeutral","#phi_{Decay} - #phi_{h^{0}} vs p_{T Decay}",
1257 nptbins,ptmin,ptmax,140,-2.,5.);
1258 fhDeltaPhiDecayNeutral->SetYTitle("#Delta #phi");
1259 fhDeltaPhiDecayNeutral->SetXTitle("p_{T Decay} (GeV/c)");
1262 new TH2F("hXEDecayNeutral","x_{E} for decay trigger",
1263 nptbins,ptmin,ptmax,200,0.,2.);
1264 fhXEDecayNeutral->SetYTitle("x_{E}");
1265 fhXEDecayNeutral->SetXTitle("p_{T decay}");
1268 new TH2F("hZTDecayNeutral","z_{trigger h^{0}} = p_{T h^{0}} / p_{T Decay}",
1269 nptbins,ptmin,ptmax,200,0.,2.);
1270 fhZTDecayNeutral->SetYTitle("z_{h^{0}}");
1271 fhZTDecayNeutral->SetXTitle("p_{T decay}");
1273 outputContainer->Add(fhDeltaPhiDecayNeutral) ;
1274 outputContainer->Add(fhXEDecayNeutral) ;
1275 outputContainer->Add(fhZTDecayNeutral) ;
1281 fhDeltaPhiUeLeftNeutral = new TH2F
1282 ("hDeltaPhiUeLeftNeutralPt","#phi_{trigger} - #phi_{#Ueh^{0}} vs p_{T h^{0}} with neutral UE left side range of trigger particles",
1283 nptbins,ptmin,ptmax,140,-2.,5.);
1284 fhDeltaPhiUeLeftNeutral->SetYTitle("#Delta #phi");
1285 fhDeltaPhiUeLeftNeutral->SetXTitle("p_{T h^{0}} (GeV/c)");
1286 outputContainer->Add(fhDeltaPhiUeLeftNeutral) ;
1288 fhDeltaPhiUeRightNeutral = new TH2F
1289 ("hDeltaPhiUeRightNeutralPt","#phi_{trigger} - #phi_{#Ueh^{0}} vs p_{T Ueh^{0}} with neutral UE right side range of trigger particles",
1290 nptbins,ptmin,ptmax,140,-2.,5.);
1291 fhDeltaPhiUeRightNeutral->SetYTitle("#Delta #phi");
1292 fhDeltaPhiUeRightNeutral->SetXTitle("p_{T h^{0}} (GeV/c)");
1293 outputContainer->Add(fhDeltaPhiUeRightNeutral) ;
1296 new TH2F("hXEUeNeutralLeft","x_{E} = p_{T Ueh^{0}} / p_{T trigger} with neutral UE left side of trigger",
1297 nptbins,ptmin,ptmax,140,0.,2.);
1298 fhXEUeLeftNeutral->SetYTitle("z_{trigger Ueh^{0}}");
1299 fhXEUeLeftNeutral->SetXTitle("p_{T trigger}");
1300 outputContainer->Add(fhXEUeLeftNeutral) ;
1302 fhXEUeRightNeutral =
1303 new TH2F("hXEUeNeutralRight","x_{E} = p_{T Ueh^{0}} / p_{T trigger} with neutral UE right side of trigger",
1304 nptbins,ptmin,ptmax,200,0.,2.);
1305 fhXEUeRightNeutral->SetYTitle("z_{trigger Ueh^{0}}");
1306 fhXEUeRightNeutral->SetXTitle("p_{T trigger}");
1307 outputContainer->Add(fhXEUeRightNeutral) ;
1309 fhPtHbpXEUeLeftNeutral =
1310 new TH2F("hHbpXEUeNeutralLeft","#xi = ln(1/x_{E}) with neutral UE left side of trigger",
1311 nptbins,ptmin,ptmax,200,0.,10.);
1312 fhPtHbpXEUeLeftNeutral->SetYTitle("ln(1/x_{E})");
1313 fhPtHbpXEUeLeftNeutral->SetXTitle("p_{T trigger}");
1314 outputContainer->Add(fhPtHbpXEUeLeftNeutral) ;
1316 fhPtHbpXEUeRightNeutral =
1317 new TH2F("hHbpXEUeNeutralRight","#xi = ln(1/x_{E}) with neutral UE right side of trigger",
1318 nptbins,ptmin,ptmax,200,0.,10.);
1319 fhPtHbpXEUeRightNeutral->SetYTitle("ln(1/x_{E})");
1320 fhPtHbpXEUeRightNeutral->SetXTitle("p_{T trigger}");
1321 outputContainer->Add(fhPtHbpXEUeRightNeutral) ;
1324 new TH2F("hZTUeNeutralLeft","z_{trigger h^{0}} = p_{T Ueh^{0}} / p_{T trigger} with neutral UE left side of trigger",
1325 nptbins,ptmin,ptmax,140,0.,2.);
1326 fhZTUeLeftNeutral->SetYTitle("z_{trigger Ueh^{0}}");
1327 fhZTUeLeftNeutral->SetXTitle("p_{T trigger}");
1328 outputContainer->Add(fhZTUeLeftNeutral) ;
1330 fhZTUeRightNeutral =
1331 new TH2F("hZTUeNeutralRight","z_{trigger h^{0}} = p_{T Ueh^{0}} / p_{T trigger} with neutral UE right side of trigger",
1332 nptbins,ptmin,ptmax,200,0.,2.);
1333 fhZTUeRightNeutral->SetYTitle("z_{trigger Ueh^{0}}");
1334 fhZTUeRightNeutral->SetXTitle("p_{T trigger}");
1335 outputContainer->Add(fhZTUeRightNeutral) ;
1337 fhPtHbpZTUeLeftNeutral =
1338 new TH2F("hHbpZTUeNeutralLeft","#xi = ln(1/z_{T}) with neutral UE left side of trigger",
1339 nptbins,ptmin,ptmax,200,0.,10.);
1340 fhPtHbpZTUeLeftNeutral->SetYTitle("ln(1/z_{T})");
1341 fhPtHbpZTUeLeftNeutral->SetXTitle("p_{T trigger}");
1342 outputContainer->Add(fhPtHbpZTUeLeftNeutral) ;
1344 fhPtHbpZTUeRightNeutral =
1345 new TH2F("hHbpZTUeNeutralRight","#xi = ln(1/z_{T}) with neutral UE right side of trigger",
1346 nptbins,ptmin,ptmax,200,0.,10.);
1347 fhPtHbpZTUeRightNeutral->SetYTitle("ln(1/z_{T})");
1348 fhPtHbpZTUeRightNeutral->SetXTitle("p_{T trigger}");
1349 outputContainer->Add(fhPtHbpZTUeRightNeutral) ;
1353 }//Correlation with neutral hadrons
1355 //if data is MC, fill more histograms
1358 fh2phiLeadingParticle=new TH2F("h2phiLeadingParticle","#phi resolustion for trigger particles",nptbins,ptmin,ptmax,100,-1,1);
1359 fh2phiLeadingParticle->GetXaxis()->SetTitle("p_{T gen Leading} (GeV/c)");
1360 fh2phiLeadingParticle->GetYaxis()->SetTitle("(#phi_{rec}-#phi_{gen})/#phi_{gen}");
1362 fhMCEtaCharged = new TH2F
1363 ("hMCEtaCharged","MC #eta_{h^{#pm}} vs p_{T #pm}",
1364 nptbins,ptmin,ptmax,netabins,etamin,etamax);
1365 fhMCEtaCharged->SetYTitle("#eta_{h^{#pm}} (rad)");
1366 fhMCEtaCharged->SetXTitle("p_{T #pm} (GeV/c)");
1368 fhMCPhiCharged = new TH2F
1369 ("hMCPhiCharged","#MC phi_{h^{#pm}} vs p_{T #pm}",
1370 200,ptmin,ptmax,nphibins,phimin,phimax);
1371 fhMCPhiCharged->SetYTitle("MC #phi_{h^{#pm}} (rad)");
1372 fhMCPhiCharged->SetXTitle("p_{T #pm} (GeV/c)");
1374 fhMCDeltaPhiDeltaEtaCharged = new TH2F
1375 ("hMCDeltaPhiDeltaEtaCharged","#MC phi_{trigger} - #phi_{h^{#pm}} vs #eta_{trigger} - #eta_{h^{#pm}}",
1376 140,-2.,5.,200,-2,2);
1377 fhMCDeltaPhiDeltaEtaCharged->SetXTitle("#Delta #phi");
1378 fhMCDeltaPhiDeltaEtaCharged->SetYTitle("#Delta #eta");
1380 fhMCDeltaEtaCharged = new TH2F
1381 ("hMCDeltaEtaCharged","MC #eta_{trigger} - #eta_{h^{#pm}} vs p_{T trigger} and p_{T assoc}",
1382 nptbins,ptmin,ptmax,200,-2,2);
1383 fhMCDeltaEtaCharged->SetYTitle("#Delta #eta");
1384 fhMCDeltaEtaCharged->SetXTitle("p_{T trigger} (GeV/c)");
1386 fhMCDeltaPhiCharged = new TH2F
1387 ("hMCDeltaPhiCharged","#phi_{trigger} - #phi_{h^{#pm}} vs p_{T trigger}",
1388 nptbins,ptmin,ptmax,140,-2.,5.);
1389 fhMCDeltaPhiCharged->SetYTitle("#Delta #phi");
1390 fhMCDeltaPhiCharged->SetXTitle("p_{T trigger} (GeV/c)");
1392 fhMCDeltaPhiChargedPt = new TH2F
1393 ("hMCDeltaPhiChargedPt","MC #phi_{trigger} - #phi_{#h^{#pm}} vs p_{T h^{#pm}}",
1394 nptbins,ptmin,ptmax,140,-2.,5.);
1395 fhMCDeltaPhiChargedPt->SetYTitle("#Delta #phi");
1396 fhMCDeltaPhiChargedPt->SetXTitle("p_{T h^{#pm}} (GeV/c)");
1399 new TH2F("hMCPtXECharged","x_{E}",
1400 nptbins,ptmin,ptmax,200,0.,2.);
1401 fhMCPtXECharged->SetYTitle("x_{E}");
1402 fhMCPtXECharged->SetXTitle("p_{T trigger}");
1404 fhMCPtHbpXECharged =
1405 new TH2F("hMCHbpXECharged","MC #xi = ln(1/x_{E}) with charged hadrons",
1406 nptbins,ptmin,ptmax,200,0.,10.);
1407 fhMCPtHbpXECharged->SetYTitle("ln(1/x_{E})");
1408 fhMCPtHbpXECharged->SetXTitle("p_{T trigger}");
1411 new TH2F("hMCPtZTCharged","z_{T}",
1412 nptbins,ptmin,ptmax,200,0.,2.);
1413 fhMCPtZTCharged->SetYTitle("z_{T}");
1414 fhMCPtZTCharged->SetXTitle("p_{T trigger}");
1416 fhMCPtHbpZTCharged =
1417 new TH2F("hMCHbpZTCharged","MC #xi = ln(1/z_{T}) with charged hadrons",
1418 nptbins,ptmin,ptmax,200,0.,10.);
1419 fhMCPtHbpZTCharged->SetYTitle("ln(1/z_{T})");
1420 fhMCPtHbpZTCharged->SetXTitle("p_{T trigger}");
1423 new TH2F("hMCPtTrigPout","AOD MC Pout with triggers",
1424 nptbins,ptmin,ptmax,2*nptbins,-ptmax,ptmax);
1425 fhMCPtTrigPout->SetYTitle("p_{out} (GeV/c)");
1426 fhMCPtTrigPout->SetXTitle("p_{T trigger} (GeV/c)");
1428 fhMCPtAssocDeltaPhi =
1429 new TH2F("hMCPtAssocDeltaPhi","AOD MC delta phi with associated charged hadrons",
1430 nptbins,ptmin,ptmax,140,-2.,5.);
1431 fhMCPtAssocDeltaPhi->SetYTitle("#Delta #phi");
1432 fhMCPtAssocDeltaPhi->SetXTitle("p_{T trigger} (GeV/c)");
1434 outputContainer->Add(fh2phiLeadingParticle);
1435 outputContainer->Add(fhMCDeltaPhiDeltaEtaCharged);
1436 outputContainer->Add(fhMCPhiCharged) ;
1437 outputContainer->Add(fhMCEtaCharged) ;
1438 outputContainer->Add(fhMCDeltaEtaCharged) ;
1439 outputContainer->Add(fhMCDeltaPhiCharged) ;
1441 outputContainer->Add(fhMCDeltaPhiChargedPt) ;
1442 outputContainer->Add(fhMCPtXECharged) ;
1443 outputContainer->Add(fhMCPtZTCharged) ;
1444 outputContainer->Add(fhMCPtHbpXECharged) ;
1445 outputContainer->Add(fhMCPtHbpZTCharged) ;
1446 outputContainer->Add(fhMCPtTrigPout) ;
1447 outputContainer->Add(fhMCPtAssocDeltaPhi) ;
1448 } //for MC histogram
1452 //create event containers
1453 fListMixEvents= new TList*[GetNCentrBin()*GetNZvertBin()] ;
1455 for(Int_t ic=0; ic<GetNCentrBin(); ic++){
1456 for(Int_t iz=0; iz<GetNZvertBin(); iz++){
1457 fListMixEvents[ic*GetNZvertBin()+iz] = new TList() ;
1458 fListMixEvents[ic*GetNZvertBin()+iz]->SetOwner(kFALSE);
1462 fhNtracksAll=new TH1F("hNtracksAll","Number of tracks w/o event trigger",2000,0,2000);
1463 outputContainer->Add(fhNtracksAll);
1465 fhNtracksTrigger=new TH1F("hNtracksTriggerEvent","Number of tracks w/ event trigger",2000,0,2000);
1466 outputContainer->Add(fhNtracksTrigger);
1468 fhNtracksINT=new TH1F("hNtracksMBEvent","Number of tracks w/ event trigger kAnyINT",2000,0,2000);
1469 outputContainer->Add(fhNtracksINT);
1471 fhMixDeltaPhiCharged = new TH2F
1472 ("hMixDeltaPhiCharged","Mixed event : #phi_{trigger} - #phi_{h^{#pm}} vs p_{T trigger}",
1473 nptbins,ptmin,ptmax,140,-2.,5.);
1474 fhMixDeltaPhiCharged->SetYTitle("#Delta #phi");
1475 fhMixDeltaPhiCharged->SetXTitle("p_{T trigger} (GeV/c)");
1476 outputContainer->Add(fhMixDeltaPhiCharged);
1478 fhMixDeltaPhiDeltaEtaCharged = new TH2F
1479 ("hMixDeltaPhiDeltaEtaCharged","Mixed event : #phi_{trigger} - #phi_{h^{#pm}} vs #eta_{trigger} - #eta_{h^{#pm}}",
1480 140,-2.,5.,200,-2,2);
1481 fhMixDeltaPhiDeltaEtaCharged->SetXTitle("#Delta #phi");
1482 fhMixDeltaPhiDeltaEtaCharged->SetYTitle("#Delta #eta");
1483 outputContainer->Add(fhMixDeltaPhiDeltaEtaCharged);
1485 fhMixDeltaPhiChargedAssocPtBin = new TH2F*[fNAssocPtBins] ;
1486 fhMixDeltaPhiDeltaEtaChargedAssocPtBin = new TH2F*[fNAssocPtBins] ;
1488 for(Int_t i = 0 ; i < fNAssocPtBins ; i++)
1490 fhMixDeltaPhiChargedAssocPtBin[i] = new TH2F(Form("hMixDeltaPhiChargedAssocPtBin%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1491 Form("Mixed event #Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1492 nptbins, ptmin, ptmax,140,-2.,5.);
1493 fhMixDeltaPhiChargedAssocPtBin[i]->SetXTitle("p_{T trigger}");
1494 fhMixDeltaPhiChargedAssocPtBin[i]->SetYTitle("#Delta #phi");
1496 fhMixDeltaPhiDeltaEtaChargedAssocPtBin[i] = new TH2F(Form("hMixDeltaPhiDeltaEtaChargedAssocPtBin%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1497 Form("Mixed event #Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1498 140,-2.,5.,200,-2,2);
1499 fhMixDeltaPhiDeltaEtaChargedAssocPtBin[i]->SetXTitle("#Delta #phi");
1500 fhMixDeltaPhiDeltaEtaChargedAssocPtBin[i]->SetYTitle("#Delta #eta");
1502 outputContainer->Add(fhMixDeltaPhiChargedAssocPtBin[i]);
1503 outputContainer->Add(fhMixDeltaPhiDeltaEtaChargedAssocPtBin[i]);
1508 return outputContainer;
1512 //_________________________________________________________________________________________________
1513 Bool_t AliAnaParticleHadronCorrelation::GetDecayPhotonMomentum(const AliAODPWG4Particle* trigger,
1514 TLorentzVector & mom1,
1515 TLorentzVector & mom2)
1517 // Get the momentum of the pi0/eta assigned decay photons
1518 // In case of pi0/eta trigger, we may want to check their decay correlation,
1519 // get their decay children
1521 Int_t indexPhoton1 = trigger->GetCaloLabel(0);
1522 Int_t indexPhoton2 = trigger->GetCaloLabel(1);
1523 Float_t ptTrig = trigger->Pt();
1525 if(indexPhoton1!=-1 || indexPhoton2!=-1) return kFALSE;
1528 printf("AliAnaParticleHadronCorrelation::GetDecayPhotonMomentum() - indexPhoton1 = %d, indexPhoton2 = %d \n", indexPhoton1, indexPhoton2);
1530 TObjArray * clusters = 0x0 ;
1531 if(trigger->GetDetector()=="EMCAL") clusters = GetEMCALClusters() ;
1532 else clusters = GetPHOSClusters() ;
1534 for(Int_t iclus = 0; iclus < clusters->GetEntriesFast(); iclus++)
1536 AliVCluster * photon = (AliVCluster*) (clusters->At(iclus));
1537 if(photon->GetID()==indexPhoton1)
1539 photon->GetMomentum(mom1,GetVertex(0)) ;
1540 if(ptTrig) fhPtPi0DecayRatio->Fill(ptTrig, mom1.Pt()/ptTrig);
1542 if(photon->GetID()==indexPhoton2)
1544 photon->GetMomentum(mom1,GetVertex(0)) ;
1545 if(ptTrig > 0) fhPtPi0DecayRatio->Fill(ptTrig, mom2.Pt()/ptTrig);
1548 if(GetDebug() > 1)printf("AliAnaParticleHadronCorrelation::GetDecayPhotonMomentum() - Photon1 = %f, Photon2 = %f \n", mom1.Pt(), mom2.Pt());
1557 //____________________________________________________
1558 void AliAnaParticleHadronCorrelation::InitParameters()
1561 //Initialize the parameters of the analysis.
1562 SetInputAODName("PWG4Particle");
1563 SetAODObjArrayName("Hadrons");
1564 AddToHistogramsName("AnaHadronCorr_");
1566 SetPtCutRange(0.,300);
1567 fDeltaPhiMinCut = 1.5 ;
1568 fDeltaPhiMaxCut = 4.5 ;
1569 fSelectIsolated = kFALSE;
1570 fMakeSeveralUE = kFALSE;
1571 fUeDeltaPhiMinCut = 1. ;
1572 fUeDeltaPhiMaxCut = 1.5 ;
1574 fNeutralCorr = kFALSE ;
1575 fPi0Trigger = kFALSE ;
1576 fDecayTrigger = kFALSE ;
1577 fHMPIDCorrelation = kFALSE ;
1579 fMakeAbsoluteLeading = kTRUE;
1580 fMakeNearSideLeading = kFALSE;
1583 fAssocPtBinLimit[0] = 0.2 ;
1584 fAssocPtBinLimit[1] = 2.0 ;
1585 fAssocPtBinLimit[2] = 4.0 ;
1586 fAssocPtBinLimit[3] = 6.0 ;
1587 fAssocPtBinLimit[4] = 8.0 ;
1588 fAssocPtBinLimit[5] = 10. ;
1589 fAssocPtBinLimit[6] = 12. ;
1590 fAssocPtBinLimit[7] = 15. ;
1591 fAssocPtBinLimit[8] = 25. ;
1592 fAssocPtBinLimit[9] = 50. ;
1596 //__________________________________________________________
1597 void AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD()
1599 //Particle-Hadron Correlation Analysis, fill AODs
1601 if(!GetInputAODBranch())
1603 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - No input particles in AOD with name branch < %s >, STOP \n",GetInputAODName().Data());
1607 if(strcmp(GetInputAODBranch()->GetClass()->GetName(), "AliAODPWG4ParticleCorrelation"))
1609 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - Wrong type of AOD object, change AOD class name in input AOD: It should be <AliAODPWG4ParticleCorrelation> and not <%s> \n",GetInputAODBranch()->GetClass()->GetName());
1614 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - Begin hadron correlation analysis, fill AODs \n");
1615 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - In particle branch aod entries %d\n", GetInputAODBranch()->GetEntriesFast());
1616 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - In CTS aod entries %d\n", GetCTSTracks() ->GetEntriesFast());
1617 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - In EMCAL aod entries %d\n", GetEMCALClusters()->GetEntriesFast());
1618 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - In PHOS aod entries %d\n", GetPHOSClusters() ->GetEntriesFast());
1621 //Get the vertex and check it is not too large in z
1622 Double_t v[3] = {0,0,0}; //vertex ;
1623 GetReader()->GetVertex(v);
1624 if(!GetMixedEvent() && TMath::Abs(v[2]) > GetZvertexCut()) return ;
1626 // Fill the pool with tracks if requested
1627 if(fDoOwnMix) FillChargedEventMixPool();
1629 //Loop on stored AOD particles, find leading trigger
1630 Double_t ptTrig = fMinTriggerPt ;
1631 fLeadingTriggerIndex = -1 ;
1632 Int_t naod = GetInputAODBranch()->GetEntriesFast() ;
1633 for(Int_t iaod = 0; iaod < naod ; iaod++)
1635 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1637 // Vertex cut in case of mixing
1638 Int_t check = CheckMixedEventVertex(particle->GetCaloLabel(0), particle->GetTrackLabel(0));
1639 if(check == 0) continue;
1640 if(check == -1) return;
1642 // find the leading particles with highest momentum
1643 if (particle->Pt() > ptTrig)
1645 ptTrig = particle->Pt() ;
1646 fLeadingTriggerIndex = iaod ;
1648 }// finish search of leading trigger particle
1651 //Do correlation with leading particle
1652 if(fLeadingTriggerIndex >= 0)
1655 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(fLeadingTriggerIndex));
1657 //check if the particle is isolated or if we want to take the isolation into account
1658 if(OnlyIsolated() && !particle->IsIsolated()) return;
1660 //Make correlation with charged hadrons
1661 Bool_t okcharged = kTRUE;
1662 Bool_t okneutral = kTRUE;
1663 if(GetReader()->IsCTSSwitchedOn() )
1664 okcharged = MakeChargedCorrelation(particle, GetCTSTracks(),kFALSE);
1666 TObjArray * pi0list = (TObjArray*) GetAODBranch(fPi0AODBranchName); //For the future, foresee more possible pi0 lists
1667 if(fNeutralCorr && pi0list && pi0list->GetEntriesFast() > 0)
1668 okneutral = MakeNeutralCorrelation(particle, pi0list,kFALSE);
1670 }//Correlate leading
1672 if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - End fill AODs \n");
1676 //_________________________________________________________________
1677 void AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms()
1679 //Particle-Hadron Correlation Analysis, fill histograms
1681 if(!GetInputAODBranch())
1683 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - No input particles in AOD with name branch < %s >, STOP \n",GetInputAODName().Data());
1689 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - Begin hadron correlation analysis, fill histograms \n");
1690 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - In particle branch aod entries %d\n", GetInputAODBranch()->GetEntriesFast());
1693 //Get the vertex and check it is not too large in z
1694 Double_t v[3] = {0,0,0}; //vertex ;
1695 GetReader()->GetVertex(v);
1696 if(!GetMixedEvent() && TMath::Abs(v[2]) > GetZvertexCut()) return ;
1698 //Loop on stored AOD particles, find leading
1699 Double_t ptTrig = fMinTriggerPt;
1700 if(fLeadingTriggerIndex < 0)
1702 //Search leading if not done before
1703 Int_t naod = GetInputAODBranch()->GetEntriesFast() ;
1704 for(Int_t iaod = 0; iaod < naod ; iaod++)
1705 { //loop on input trigger AOD file
1706 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1708 // Vertex cut in case of mixing
1709 Int_t check = CheckMixedEventVertex(particle->GetCaloLabel(0), particle->GetTrackLabel(0));
1710 if(check == 0) continue;
1711 if(check == -1) return;
1713 //check if the particle is isolated or if we want to take the isolation into account
1714 if(OnlyIsolated() && !particle->IsIsolated()) continue;
1716 //find the leading particles with highest momentum
1717 if (particle->Pt() > ptTrig)
1719 ptTrig = particle->Pt() ;
1720 fLeadingTriggerIndex = iaod ;
1723 }// Finish search of leading trigger particle
1724 }// Search leading if not done before
1726 if(fLeadingTriggerIndex >= 0 )
1727 { //using trigger particle to do correlations
1729 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(fLeadingTriggerIndex));
1731 // Check if trigger is in fiducial region
1732 if(IsFiducialCutOn())
1734 Bool_t in = GetFiducialCut()->IsInFiducialCut(*particle->Momentum(),particle->GetDetector()) ;
1738 // Check if the particle is isolated or if we want to take the isolation into account
1739 if(OnlyIsolated() && !particle->IsIsolated()) return;
1741 // Make correlation with charged hadrons
1742 Bool_t okcharged = kTRUE;
1743 Bool_t okneutral = kTRUE;
1744 if(GetReader()->IsCTSSwitchedOn() )
1746 okcharged = MakeChargedCorrelation(particle, GetCTSTracks(),kTRUE);
1749 MakeMCChargedCorrelation(particle);
1753 TObjArray * pi0list = (TObjArray*) GetAODBranch(fPi0AODBranchName); //For the future, foresee more possible pi0 lists
1754 if(fNeutralCorr && pi0list)
1756 if(pi0list->GetEntriesFast() > 0)
1757 okneutral = MakeNeutralCorrelation(particle, pi0list,kTRUE);
1760 // Fill leading particle histogram if correlation went well and
1761 // no problem was found, like not absolute leading, or bad vertex in mixing.
1762 if(okcharged && okneutral)
1764 fhPtLeading->Fill(particle->Pt());
1765 Float_t phi = particle->Phi();
1766 if(phi<0)phi+=TMath::TwoPi();
1767 fhPhiLeading->Fill(particle->Pt(), phi);
1768 fhEtaLeading->Fill(particle->Pt(), particle->Eta());
1769 }//ok charged && neutral
1772 //Reinit for next event
1773 fLeadingTriggerIndex = -1;
1775 if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - End fill histograms \n");
1778 //___________________________________________________________________________________________________________
1779 Bool_t AliAnaParticleHadronCorrelation::MakeChargedCorrelation(AliAODPWG4ParticleCorrelation *aodParticle,
1780 const TObjArray* pl, const Bool_t bFillHisto)
1782 // Charged Hadron Correlation Analysis
1783 if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::MakeChargedCorrelation() - Make trigger particle - charged hadron correlation \n");
1785 Float_t phiTrig = aodParticle->Phi();
1786 Float_t etaTrig = aodParticle->Eta();
1787 Float_t ptTrig = aodParticle->Pt();
1788 Bool_t decay = aodParticle->IsTagged();
1790 Float_t pt = -100. ;
1791 Float_t zT = -100. ;
1792 Float_t xE = -100. ;
1793 Float_t hbpXE = -100. ;
1794 Float_t hbpZT = -100. ;
1795 Float_t phi = -100. ;
1796 Float_t eta = -100. ;
1797 Float_t pout = -100. ;
1798 Float_t deltaPhi = -100. ;
1801 TLorentzVector photonMom ;
1802 TObjArray * reftracks = 0x0;
1804 Int_t nTracks = GetCTSTracks()->GetEntriesFast() ;
1806 // Mixed event settings
1807 Int_t evtIndex11 = -1 ; // cluster trigger or pi0 trigger
1808 Int_t evtIndex12 = -1 ; // pi0 trigger
1809 Int_t evtIndex13 = -1 ; // charged trigger
1811 Double_t v[3] = {0,0,0}; //vertex ;
1812 GetReader()->GetVertex(v);
1814 if (GetMixedEvent())
1816 evtIndex11 = GetMixedEvent()->EventIndexForCaloCluster(aodParticle->GetCaloLabel(0)) ;
1817 evtIndex12 = GetMixedEvent()->EventIndexForCaloCluster(aodParticle->GetCaloLabel(1)) ;
1818 evtIndex13 = GetMixedEvent()->EventIndex(aodParticle->GetTrackLabel(0)) ;
1821 // In case of pi0/eta trigger, we may want to check their decay correlation,
1822 // get their decay children
1823 TLorentzVector decayMom1;
1824 TLorentzVector decayMom2;
1825 Bool_t decayFound = kFALSE;
1826 if(fPi0Trigger && bFillHisto) decayFound = GetDecayPhotonMomentum(aodParticle,decayMom1, decayMom2);
1828 //-----------------------------------------------------------------------
1829 //Track loop, select tracks with good pt, phi and fill AODs or histograms
1830 //-----------------------------------------------------------------------
1832 for(Int_t ipr = 0;ipr < pl->GetEntriesFast() ; ipr ++ )
1834 AliVTrack * track = (AliVTrack *) (pl->At(ipr)) ;
1836 Double_t mom[3] = {track->Px(),track->Py(),track->Pz()};
1837 p3.SetXYZ(mom[0],mom[1],mom[2]);
1841 if(phi < 0) phi+=TMath::TwoPi();
1843 //Select only hadrons in pt range
1844 if(pt < fMinAssocPt || pt > fMaxAssocPt) continue ;
1846 //remove trigger itself for correlation when use charged triggers
1847 if( track->GetID() == aodParticle->GetTrackLabel(0) || track->GetID() == aodParticle->GetTrackLabel(1) ||
1848 track->GetID() == aodParticle->GetTrackLabel(2) || track->GetID() == aodParticle->GetTrackLabel(3) )
1851 //jump out this event if near side associated particle pt larger than trigger
1852 if (fMakeNearSideLeading)
1854 if(pt > ptTrig && TMath::Abs(phi-phiTrig) < TMath::PiOver2()) return kFALSE;
1856 //jump out this event if there is any other particle with pt larger than trigger
1857 else if(fMakeAbsoluteLeading)
1859 if(pt > ptTrig) return kFALSE;
1862 //Only for mixed event
1863 Int_t evtIndex2 = 0 ;
1864 if (GetMixedEvent())
1866 evtIndex2 = GetMixedEvent()->EventIndex(track->GetID()) ;
1867 if (evtIndex11 == evtIndex2 || evtIndex12 == evtIndex2 || evtIndex13 == evtIndex2 ) // photon and track from different events
1870 if (TMath::Abs(GetVertex(evtIndex2)[2]) > GetZvertexCut())
1878 if(GetDebug() > 2 ) printf("AliAnaParticleHadronCorrelation::MakeChargedCorrelation() - Selected charge for momentum imbalance: pt %2.2f, phi %2.2f, eta %2.2f \n",pt,phi,eta);
1880 // Set the pt associated bin for the defined bins
1881 Int_t assocBin = -1;
1882 for(Int_t i = 0 ; i < fNAssocPtBins ; i++)
1884 if(pt > fAssocPtBinLimit[i] && pt < fAssocPtBinLimit[i+1]) assocBin= i;
1888 // calculate deltaPhi for later, shift when needed
1889 FillChargedAngularCorrelationHistograms(pt, ptTrig, assocBin, phi, phiTrig, deltaPhi,
1890 eta, etaTrig, decay, track->GetHMPIDsignal(),nTracks);
1892 // Imbalance zT/xE/pOut
1894 if(zT > 0 ) hbpZT = TMath::Log(1./zT);
1897 xE =-pt/ptTrig*TMath::Cos(deltaPhi); // -(px*pxTrig+py*pyTrig)/(ptTrig*ptTrig);
1898 //if(xE <0.)xE =-xE;
1899 if(xE > 0 ) hbpXE = TMath::Log(1./xE);
1902 pout = pt*TMath::Sin(deltaPhi) ;
1904 //delta phi cut for momentum imbalance correlation
1905 if ( (deltaPhi > fDeltaPhiMinCut) && (deltaPhi < fDeltaPhiMaxCut) )
1908 FillChargedMomentumImbalanceHistograms(ptTrig, pt, xE, hbpXE, zT, hbpZT, pout, deltaPhi,
1909 nTracks, track->Charge(), assocBin, decay);
1912 else if ( (deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < fUeDeltaPhiMaxCut) )
1915 FillChargedUnderlyingEventHistograms(ptTrig, pt, deltaPhi, nTracks);
1919 if(fPi0Trigger && decayFound)
1920 FillDecayPhotonCorrelationHistograms(pt, phi, decayMom1,decayMom2, kTRUE) ;
1922 //several UE calculation
1923 if(fMakeSeveralUE) FillChargedUnderlyingEventSidesHistograms(ptTrig,pt,xE,hbpXE,zT,hbpZT,deltaPhi);
1931 reftracks = new TObjArray(0);
1932 TString trackname = Form("%s+Tracks", GetAODObjArrayName().Data());
1933 reftracks->SetName(trackname.Data());
1934 reftracks->SetOwner(kFALSE);
1937 reftracks->Add(track);
1939 }//aod particle loop
1942 //Fill AOD with reference tracks, if not filling histograms
1943 if(!bFillHisto && reftracks)
1945 aodParticle->AddObjArray(reftracks);
1948 //Own mixed event, add event and remove previous or fill the mixed histograms
1949 if(fDoOwnMix && bFillHisto)
1951 MakeChargedMixCorrelation(aodParticle);
1959 //______________________________________________________________________________________________________________________
1960 void AliAnaParticleHadronCorrelation::MakeChargedMixCorrelation(AliAODPWG4ParticleCorrelation *aodParticle)
1962 if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation() - Make trigger particle - charged hadron mixed event correlation \n");
1964 Double_t v[3] = {0,0,0}; //vertex ;
1965 GetReader()->GetVertex(v);
1967 if(GetMixedEvent()) return; // This is not the mixed event from general mixing frame
1970 // Get the event with similar caracteristics
1974 Int_t curZvertBin = (Int_t)(0.5*GetNZvertBin()*(v[2]+GetZvertexCut())/GetZvertexCut()) ;
1976 // centrality or tracks bin
1977 Int_t curCentrBin = 0;
1978 if(fUseTrackMultBins)
1979 { // Track multiplicity bins
1980 //curCentrBin = (GetTrackMultiplicity()-1)/5;
1981 //if(curCentrBin > GetNCentrBin()-1) curCentrBin=GetNCentrBin()-1;
1982 Int_t trackMult = GetReader()->GetTrackMultiplicity();
1985 else if(trackMult<=10)
1987 else if(trackMult<=15)
1989 else if(trackMult<=20)
1991 else if(trackMult<=30)
1993 else if(trackMult<=40)
1995 else if(trackMult<=55)
1997 else if(trackMult<=70)
1999 else curCentrBin=0 ;
2001 else // Set centrality based on centrality task
2003 curCentrBin = GetEventCentrality() * GetNCentrBin() / GetReader()->GetCentralityOpt();
2004 if(GetDebug() > 0 )printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - curCentrBin %d, centrality %d, n bins %d, max bin from centrality %d\n",
2005 curCentrBin, GetEventCentrality(), GetNCentrBin(), GetReader()->GetCentralityOpt());
2008 // Get the pool, check if it exits
2009 if(!fListMixEvents[curCentrBin*GetNZvertBin()+curZvertBin]) return ;
2011 //printf("curCen %d, curZ %d, bin %d\n",curCentrBin,curZvertBin,curCentrBin*GetNZvertBin()+curZvertBin);
2013 TList * pool = fListMixEvents[curCentrBin*GetNZvertBin()+curZvertBin];
2015 Double_t ptTrig = aodParticle->Pt();
2016 Double_t etaTrig = aodParticle->Eta();
2017 Double_t phiTrig = aodParticle->Phi();
2018 if(phiTrig < 0.) phiTrig+=TMath::TwoPi();
2020 if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation() - leading trigger pt=%f, phi=%f, eta=%f\n",ptTrig,phiTrig,etaTrig);
2022 Double_t ptAssoc = -999.;
2023 Double_t phiAssoc = -999. ;
2024 Double_t etaAssoc = -999.;
2025 Double_t deltaPhi = -999.;
2026 Double_t deltaEta = -999.;
2028 for(Int_t ev=0; ev <pool->GetSize(); ev++)
2030 TObjArray* bgTracks = static_cast<TObjArray*>(pool->At(ev));
2032 Int_t nTracks=bgTracks->GetEntriesFast();
2034 for(Int_t j1 = 0;j1 <nTracks; j1++ )
2036 AliAODPWG4Particle *track = (AliAODPWG4Particle*) bgTracks->At(j1) ;
2038 if(!track) continue;
2040 ptAssoc = track->Pt();
2041 etaAssoc = track->Eta();
2042 phiAssoc = track->Phi() ;
2043 if(phiAssoc < 0) phiAssoc+=TMath::TwoPi();
2045 if(IsFiducialCutOn())
2047 Bool_t in = GetFiducialCut()->IsInFiducialCut(*aodParticle->Momentum(),"CTS") ;
2051 deltaPhi = phiTrig-phiAssoc;
2052 if(deltaPhi < -TMath::PiOver2()) deltaPhi+=TMath::TwoPi();
2053 if(deltaPhi > 3*TMath::PiOver2()) deltaPhi-=TMath::TwoPi();
2054 deltaEta = etaTrig-etaAssoc;
2057 printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation(): deltaPhi= %f, deltaEta=%f\n",deltaPhi, deltaEta);
2059 // Set the pt associated bin for the defined bins
2060 Int_t assocBin = -1;
2061 for(Int_t i = 0 ; i < fNAssocPtBins ; i++)
2063 if(ptAssoc > fAssocPtBinLimit[i] && ptAssoc < fAssocPtBinLimit[i+1]) assocBin= i;
2066 fhMixDeltaPhiCharged ->Fill(ptTrig, deltaPhi);
2067 fhMixDeltaPhiDeltaEtaCharged->Fill(deltaPhi, deltaEta);
2069 if(assocBin < 0) continue ; // this pt bin was not considered
2071 fhMixDeltaPhiChargedAssocPtBin[assocBin] ->Fill(ptTrig, deltaPhi);
2072 fhMixDeltaPhiDeltaEtaChargedAssocPtBin[assocBin]->Fill(deltaPhi, deltaEta);
2075 } // mixed event loop
2079 //________________________________________________________________________________________________________________
2080 Bool_t AliAnaParticleHadronCorrelation::MakeNeutralCorrelation(AliAODPWG4ParticleCorrelation * const aodParticle,
2081 const TObjArray* pi0list, const Bool_t bFillHisto)
2083 // Neutral Pion Correlation Analysis
2084 if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::MakeNeutralCorrelation() - Make trigger particle - pi0 correlation, %d pi0's \n",
2085 pi0list->GetEntriesFast());
2087 Int_t evtIndex11 = 0 ;
2088 Int_t evtIndex12 = 0 ;
2089 if (GetMixedEvent())
2091 evtIndex11 = GetMixedEvent()->EventIndexForCaloCluster(aodParticle->GetCaloLabel(0)) ;
2092 evtIndex12 = GetMixedEvent()->EventIndexForCaloCluster(aodParticle->GetCaloLabel(1)) ;
2095 Float_t pt = -100. ;
2096 Float_t zT = -100. ;
2097 Float_t phi = -100. ;
2098 Float_t eta = -100. ;
2099 Float_t xE = -100. ;
2100 Float_t hbpXE= -100. ;
2101 Float_t hbpZT= -100. ;
2103 Float_t ptTrig = aodParticle->Pt();
2104 Float_t phiTrig = aodParticle->Phi();
2105 Float_t etaTrig = aodParticle->Eta();
2106 Float_t deltaPhi= -100. ;
2108 TLorentzVector photonMom ;
2110 // In case of pi0/eta trigger, we may want to check their decay correlation,
2111 // get their decay children
2112 TLorentzVector decayMom1;
2113 TLorentzVector decayMom2;
2114 Bool_t decayFound = kFALSE;
2115 if(fPi0Trigger && bFillHisto) decayFound = GetDecayPhotonMomentum(aodParticle,decayMom1, decayMom2);
2117 TObjArray * refpi0 = 0x0;
2120 //Loop on stored AOD pi0
2122 Int_t naod = pi0list->GetEntriesFast();
2124 printf("AliAnaParticleHadronCorrelation::MakeNeutralCorrelationFillHistograms() - aod branch entries %d\n", naod);
2126 for(Int_t iaod = 0; iaod < naod ; iaod++)
2128 AliAODPWG4Particle* pi0 = (AliAODPWG4Particle*) (pi0list->At(iaod));
2130 Int_t evtIndex2 = 0 ;
2131 Int_t evtIndex3 = 0 ;
2132 if (GetMixedEvent())
2134 evtIndex2 = GetMixedEvent()->EventIndexForCaloCluster(pi0->GetCaloLabel(0)) ;
2135 evtIndex3 = GetMixedEvent()->EventIndexForCaloCluster(pi0->GetCaloLabel(1)) ;
2137 if (evtIndex11 == evtIndex2 || evtIndex12 == evtIndex2 ||
2138 evtIndex11 == evtIndex3 || evtIndex12 == evtIndex3) // trigger and pi0 are not from different events
2144 if(pt < fMinAssocPt || pt > fMaxAssocPt) continue ;
2146 //jump out this event if near side associated particle pt larger than trigger
2147 if (fMakeNearSideLeading)
2149 if(pt > ptTrig && TMath::Abs(phi-phiTrig) < TMath::PiOver2()) return kFALSE;
2151 //jump out this event if there is any other particle with pt larger than trigger
2152 else if(fMakeAbsoluteLeading)
2154 if(pt > ptTrig) return kFALSE;
2162 FillNeutralAngularCorrelationHistograms(pt, ptTrig, phi, phiTrig, deltaPhi, eta, etaTrig);
2165 xE =-pt/ptTrig*TMath::Cos(deltaPhi); // -(px*pxTrig+py*pyTrig)/(ptTrig*ptTrig);
2167 //if(xE <0.)xE =-xE;
2172 if(xE > 0 ) hbpXE = TMath::Log(1./xE);
2173 if(zT > 0 ) hbpZT = TMath::Log(1./zT);
2175 if(fPi0Trigger && decayFound)
2176 FillDecayPhotonCorrelationHistograms(pt, phi, decayMom1,decayMom2,kFALSE) ;
2178 //delta phi cut for correlation
2179 if( (deltaPhi > fDeltaPhiMinCut) && ( deltaPhi < fDeltaPhiMaxCut) )
2181 fhDeltaPhiNeutralPt->Fill(pt,deltaPhi);
2182 fhXENeutral ->Fill(ptTrig,xE);
2183 fhPtHbpXENeutral ->Fill(ptTrig,hbpXE);
2185 else if ( (deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < fUeDeltaPhiMaxCut) )
2187 fhDeltaPhiUeNeutralPt->Fill(pt,deltaPhi);
2188 fhXEUeNeutral ->Fill(ptTrig,xE);
2189 fhPtHbpXEUeNeutral ->Fill(ptTrig,hbpXE);
2192 //several UE calculation
2193 if(fMakeSeveralUE) FillChargedUnderlyingEventSidesHistograms(ptTrig,pt,xE,hbpXE,zT,hbpZT,deltaPhi);
2201 refpi0 = new TObjArray(0);
2202 refpi0->SetName(GetAODObjArrayName()+"Pi0s");
2203 refpi0->SetOwner(kFALSE);
2206 }//put references in trigger AOD
2209 printf("AliAnaParticleHadronCorrelation::MakeNeutralCorrelation() - Selected neutral for momentum imbalance: pt %2.2f, phi %2.2f, eta %2.2f \n",pt,phi,eta);
2216 //_________________________________________________________________________________________________________
2217 void AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation(AliAODPWG4ParticleCorrelation *aodParticle)
2219 // Charged Hadron Correlation Analysis with MC information
2222 printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation() - Make trigger particle - charged hadron correlation in AOD MC level\n");
2224 AliStack * stack = 0x0 ;
2225 TParticle * primary = 0x0 ;
2226 TClonesArray * mcparticles0 = 0x0 ;
2227 TClonesArray * mcparticles = 0x0 ;
2228 AliAODMCParticle * aodprimary = 0x0 ;
2230 Double_t eprim = 0 ;
2231 Double_t ptprim = 0 ;
2232 Double_t phiprim = 0 ;
2233 Double_t etaprim = 0 ;
2235 Int_t iParticle = 0 ;
2236 Double_t charge = 0.;
2238 if(GetReader()->ReadStack())
2240 nTracks = GetMCStack()->GetNtrack() ;
2244 nTracks = GetReader()->GetAODMCParticles()->GetEntriesFast() ;
2246 //Int_t trackIndex[nTracks];
2248 Int_t label= aodParticle->GetLabel();
2251 if(GetDebug() > 0) printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation *** bad label ***: label %d \n", label);
2255 if(GetReader()->ReadStack())
2257 stack = GetMCStack() ;
2259 printf(" AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation- Stack not available, is the MC handler called? STOP\n");
2263 nTracks=stack->GetNprimary();
2264 if(label >= stack->GetNtrack())
2266 if(GetDebug() > 2) printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation *** large label ***: label %d, n tracks %d \n", label, stack->GetNtrack());
2270 primary = stack->Particle(label);
2273 printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation *** no primary ***: label %d \n", label);
2279 eprim = primary->Energy();
2280 ptprim = primary->Pt();
2281 phiprim = primary->Phi();
2282 etaprim = primary->Eta();
2284 if(ptprim < 0.01 || eprim < 0.01) return ;
2286 for (iParticle = 0 ; iParticle < nTracks ; iParticle++)
2288 TParticle * particle = stack->Particle(iParticle);
2289 TLorentzVector momentum;
2291 //keep only final state particles
2292 if(particle->GetStatusCode()!=1) continue ;
2294 Int_t pdg = particle->GetPdgCode();
2296 charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge();
2298 particle->Momentum(momentum);
2300 //---------- Charged particles ----------------------
2303 //Particles in CTS acceptance
2304 Bool_t inCTS = GetFiducialCut()->IsInFiducialCut(momentum,"CTS");
2306 if(TMath::Abs(pdg) == 11 && stack->Particle(particle->GetFirstMother())->GetPdgCode()==22) continue ;
2310 if( label!=iParticle) // avoid trigger particle
2312 if(!FillChargedMCCorrelationHistograms(particle->Pt(),particle->Phi(),particle->Eta(),ptprim,phiprim,etaprim)) return;
2314 }// in CTS acceptance
2317 } //when the leading particles could trace back to MC
2319 else if(GetReader()->ReadAODMCParticles())
2321 //Get the list of MC particles
2322 mcparticles0 = GetReader()->GetAODMCParticles(0);
2323 if(!mcparticles0) return;
2324 if(label >=mcparticles0->GetEntriesFast())
2327 printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation *** large label ***: label %d, n tracks %d \n", label,mcparticles0->GetEntriesFast());
2331 aodprimary = (AliAODMCParticle*) mcparticles0->At(label);
2334 printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation *** no AOD primary ***: label %d \n", label);
2340 ptprim = aodprimary->Pt();
2341 phiprim = aodprimary->Phi();
2342 etaprim = aodprimary->Eta();
2344 if(ptprim < 0.01 || eprim < 0.01) return ;
2346 mcparticles= GetReader()->GetAODMCParticles();
2347 for (Int_t i = 0; i < nTracks; i++)
2349 AliAODMCParticle *part = (AliAODMCParticle*) mcparticles->At(i);
2350 if (!part->IsPhysicalPrimary()) continue;
2351 Int_t pdg = part->GetPdgCode();
2352 charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge();
2353 TLorentzVector momentum(part->Px(),part->Py(),part->Pz(),part->E());
2356 if(part->Pt()> GetReader()->GetCTSPtMin())
2358 //Particles in CTS acceptance
2359 Bool_t inCTS = GetFiducialCut()->IsInFiducialCut(momentum,"CTS");
2360 Int_t indexmother=part->GetMother();
2363 Int_t mPdg = ((AliAODMCParticle*) mcparticles->At(indexmother)) ->GetPdgCode();
2364 if(TMath::Abs(pdg) == 11 && mPdg == 22) continue;
2369 if( label!=iParticle) // avoid trigger particle
2371 if(!FillChargedMCCorrelationHistograms(part->Pt(),part->Phi(),part->Eta(),ptprim,phiprim,etaprim)) return;
2375 } //only charged particles
2376 } //MC particle loop
2377 } //when the leading particles could trace back to MC
2381 //_____________________________________________________________________
2382 void AliAnaParticleHadronCorrelation::Print(const Option_t * opt) const
2385 //Print some relevant parameters set for the analysis
2389 printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
2390 AliAnaCaloTrackCorrBaseClass::Print(" ");
2391 printf("Pt trigger > %3.2f\n", fMinTriggerPt) ;
2392 printf("Pt associated hadron < %3.2f\n", fMaxAssocPt) ;
2393 printf("Pt associated hadron > %3.2f\n", fMinAssocPt) ;
2394 printf("Phi trigger particle-Hadron < %3.2f\n", fDeltaPhiMaxCut) ;
2395 printf("Phi trigger particle-Hadron > %3.2f\n", fDeltaPhiMinCut) ;
2396 printf("Phi trigger particle-UeHadron < %3.2f\n", fUeDeltaPhiMaxCut) ;
2397 printf("Phi trigger particle-UeHadron > %3.2f\n", fUeDeltaPhiMinCut) ;
2398 printf("Isolated Trigger? %d\n" , fSelectIsolated) ;
2399 printf("Several UE? %d\n" , fMakeSeveralUE) ;
2400 printf("Name of AOD Pi0 Branch %s \n", fPi0AODBranchName.Data());
2401 printf("Do Decay-hadron correlation ? %d\n", fPi0Trigger) ;
2402 printf("Select absolute leading for cluster triggers ? %d or Near Side %d\n",
2403 fMakeAbsoluteLeading, fMakeNearSideLeading) ;
2404 printf("Trigger pt bins %d\n", fNAssocPtBins) ;
2405 for (Int_t ibin = 0; ibin<fNAssocPtBins; ibin++) {
2406 printf("\t bin %d = [%2.1f,%2.1f]\n", ibin, fAssocPtBinLimit[ibin], fAssocPtBinLimit[ibin+1]) ;
2411 //____________________________________________________________
2412 void AliAnaParticleHadronCorrelation::SetNAssocPtBins(Int_t n)
2414 // Set number of bins
2425 printf("n = larger than 9 or too small, set to 9 \n");
2430 //______________________________________________________________________________
2431 void AliAnaParticleHadronCorrelation::SetAssocPtBinLimit(Int_t ibin, Float_t pt)
2433 // Set the list of limits for the trigger pt bins
2435 if(ibin <= fNAssocPtBins || ibin >= 0)
2437 fAssocPtBinLimit[ibin] = pt ;
2440 printf("AliAnaParticleHadronCorrelation::SetAssocPtBinLimit() - bin number too large %d > %d or small, nothing done\n", ibin, fNAssocPtBins) ;