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"
55 #include "AliEventplane.h"
57 ClassImp(AliAnaParticleHadronCorrelation)
60 //___________________________________________________________________
61 AliAnaParticleHadronCorrelation::AliAnaParticleHadronCorrelation():
62 AliAnaCaloTrackCorrBaseClass(),
64 fMaxAssocPt(1000.), fMinAssocPt(0.),
65 fDeltaPhiMaxCut(0.), fDeltaPhiMinCut(0.),
66 fSelectIsolated(0), fMakeSeveralUE(0),
67 fUeDeltaPhiMaxCut(0.), fUeDeltaPhiMinCut(0.),
68 fPi0AODBranchName(""), fNeutralCorr(0),
69 fPi0Trigger(0), fDecayTrigger(0),
70 fMakeAbsoluteLeading(0), fMakeNearSideLeading(0),
71 fLeadingTriggerIndex(-1), fHMPIDCorrelation(0), fFillBradHisto(0),
72 fNAssocPtBins(0), fAssocPtBinLimit(),
73 fListMixEvents(), fUseMixStoredInReader(0),
74 fM02MaxCut(0), fM02MinCut(0),
76 fhPtLeading(0), fhPhiLeading(0),
78 fhPtLeadingCentrality(0), fhPtLeadingEventPlane(0),
79 fhLeadingEventPlaneCentrality(0),fhDeltaPhiDeltaEtaCharged(0),
80 fhPhiCharged(0), fhEtaCharged(0),
81 fhDeltaPhiCharged(0), fhDeltaEtaCharged(0),
82 fhDeltaPhiChargedPt(0), fhDeltaPhiUeChargedPt(0),
84 fhXECharged(0), fhXEUeCharged(0),
85 fhXEPosCharged(0), fhXENegCharged(0),
86 fhPtHbpXECharged(0), fhPtHbpXEUeCharged(0),
87 fhZTCharged(0), fhZTUeCharged(0),
88 fhZTPosCharged(0), fhZTNegCharged(0),
89 fhPtHbpZTCharged(0), fhPtHbpZTUeCharged(0),
90 fhDeltaPhiUeLeftCharged(0), fhDeltaPhiUeRightCharged(0),
91 fhXEUeLeftCharged(0), fhXEUeRightCharged(0),
92 fhPtHbpXEUeLeftCharged(0), fhPtHbpXEUeRightCharged(0),
93 fhZTUeLeftCharged(0), fhZTUeRightCharged(0),
94 fhPtHbpZTUeLeftCharged(0), fhPtHbpZTUeRightCharged(0),
95 fhPtTrigPout(0), fhPtTrigCharged(0),
96 fhTrigDeltaPhiCharged(0x0), fhTrigDeltaEtaCharged(0x0),
97 fhTrigXECorr(0x0), fhTrigXEUeCorr(0x0),
98 fhTrigZTCorr(0x0), fhTrigZTUeCorr(0x0),
100 fhDeltaPhiAssocPtBin(0), fhDeltaPhiAssocPtBinDEta08(0),
101 fhDeltaPhiAssocPtBinHMPID(0), fhDeltaPhiAssocPtBinHMPIDAcc(0),
102 fhDeltaPhiBradAssocPtBin(0), fhDeltaPhiBrad(0),
103 fhXEAssocPtBin(0), fhZTAssocPtBin(0),
104 fhDeltaPhiDeltaEtaNeutral(0),
105 fhPhiNeutral(0), fhEtaNeutral(0),
106 fhDeltaPhiNeutral(0), fhDeltaEtaNeutral(0),
107 fhDeltaPhiNeutralPt(0), fhDeltaPhiUeNeutralPt(0),
108 fhXENeutral(0), fhXEUeNeutral(0),
109 fhPtHbpXENeutral(0), fhPtHbpXEUeNeutral(0),
110 fhZTNeutral(0), fhZTUeNeutral(0),
111 fhPtHbpZTNeutral(0), fhPtHbpZTUeNeutral(0),
112 fhDeltaPhiUeLeftNeutral(0), fhDeltaPhiUeRightNeutral(0),
113 fhXEUeLeftNeutral(0), fhXEUeRightNeutral(0),
114 fhPtHbpXEUeLeftNeutral(0), fhPtHbpXEUeRightNeutral(0),
115 fhZTUeLeftNeutral(0), fhZTUeRightNeutral(0),
116 fhPtHbpZTUeLeftNeutral(0), fhPtHbpZTUeRightNeutral(0),
117 fhPtPi0DecayRatio(0),
118 fhDeltaPhiDecayCharged(0), fhXEDecayCharged(0), fhZTDecayCharged(0),
119 fhDeltaPhiDecayNeutral(0), fhXEDecayNeutral(0), fhZTDecayNeutral(0),
120 fhDeltaPhiDecayChargedAssocPtBin(0),
121 fhXEDecayChargedAssocPtBin(0), fhZTDecayChargedAssocPtBin(0),
122 fh2phiLeadingParticle(0x0), fhMCPtLeading(0),
123 fhMCEtaCharged(0), fhMCPhiCharged(0),
124 fhMCDeltaEtaCharged(0), fhMCDeltaPhiCharged(0x0),
125 fhMCDeltaPhiDeltaEtaCharged(0), fhMCDeltaPhiChargedPt(0),
126 fhMCPtXECharged(0), fhMCPtXEUeCharged(0),
127 fhMCPtHbpXECharged(0), fhMCPtHbpXEUeCharged(0),
129 fhMCPtZTCharged(0), fhMCPtHbpZTCharged(0),
130 fhMCPtTrigPout(0), fhMCPtAssocDeltaPhi(0),
133 fhNtracksAll(0), fhNtracksTrigger(0),
135 fhMixDeltaPhiCharged(0), fhMixDeltaPhiDeltaEtaCharged(0),
136 fhMixDeltaPhiChargedAssocPtBin(),
137 fhMixDeltaPhiChargedAssocPtBinDEta08(),
138 fhMixDeltaPhiDeltaEtaChargedAssocPtBin(),
139 fhEventBin(0), fhEventMixBin(0)
143 //Initialize parameters
147 //_________________________________________________________________
148 AliAnaParticleHadronCorrelation::~AliAnaParticleHadronCorrelation()
150 // Remove event containers
152 if(DoOwnMix() && fListMixEvents)
154 for(Int_t iz=0; iz < GetNZvertBin(); iz++)
156 for(Int_t ic=0; ic < GetNCentrBin(); ic++)
158 for(Int_t irp=0; irp<GetNRPBin(); irp++)
160 Int_t bin = GetEventMixBin(ic, iz, irp);
161 fListMixEvents[bin]->Delete() ;
162 delete fListMixEvents[bin] ;
167 delete[] fListMixEvents;
172 //______________________________________________________________________________________________________________________________________________________
173 void AliAnaParticleHadronCorrelation::FillChargedAngularCorrelationHistograms(const Float_t ptAssoc, const Float_t ptTrig, const Int_t assocBin,
174 const Float_t phiAssoc, const Float_t phiTrig, Float_t & deltaPhi,
175 const Float_t etaAssoc, const Float_t etaTrig,
176 const Bool_t decay, const Float_t hmpidSignal, const Int_t nTracks)
178 // Fill angular correlation related histograms
180 Float_t deltaEta = etaTrig-etaAssoc;
181 deltaPhi = phiTrig-phiAssoc;
182 Float_t deltaPhiOrg = deltaPhi;
184 if(deltaPhi <= -TMath::PiOver2()) deltaPhi+=TMath::TwoPi();
185 if(deltaPhi > 3*TMath::PiOver2()) deltaPhi-=TMath::TwoPi();
187 fhEtaCharged ->Fill(ptAssoc,etaAssoc);
188 fhPhiCharged ->Fill(ptAssoc,phiAssoc);
189 fhDeltaEtaCharged->Fill(ptTrig ,deltaEta);
190 fhDeltaPhiCharged->Fill(ptTrig ,deltaPhi);
192 if(ptAssoc > 2 ) fhDeltaPhiDeltaEtaCharged->Fill(deltaPhi, deltaEta);
194 if(fDecayTrigger && decay) fhDeltaPhiDecayCharged ->Fill(ptTrig , deltaPhi);
196 Double_t dphiBrad = -100;
199 dphiBrad = atan2(sin(deltaPhiOrg), cos(deltaPhiOrg))/TMath::Pi();//-1 to 1
200 if(TMath::Abs(dphiBrad)>0.325 && TMath::Abs(dphiBrad)<0.475) //Hardcoded values, BAD, FIXME
202 fhAssocPtBkg->Fill(ptTrig, ptAssoc);
205 if(dphiBrad<-1./3) dphiBrad += 2;
206 fhDeltaPhiBrad->Fill(ptTrig, dphiBrad);
209 // Fill histograms in bins of associated particle pT
212 fhDeltaPhiAssocPtBin [assocBin]->Fill(ptTrig, deltaPhi);
214 if(TMath::Abs(deltaEta)> 0.8)
215 fhDeltaPhiAssocPtBinDEta08 [assocBin]->Fill(ptTrig, deltaPhi);
218 fhDeltaPhiBradAssocPtBin [assocBin]->Fill(ptTrig, dphiBrad);
220 if(fDecayTrigger && decay)
221 fhDeltaPhiDecayChargedAssocPtBin[assocBin]->Fill(ptTrig, deltaPhi);
223 if(fHMPIDCorrelation)
225 if( hmpidSignal > 0 )
227 //printf("Track pt %f with HMPID signal %f \n",pt,hmpidSignal);
228 fhDeltaPhiAssocPtBinHMPID[assocBin]->Fill(ptTrig, deltaPhi);
231 if(phiAssoc > 5*TMath::DegToRad() && phiAssoc < 20*TMath::DegToRad())
233 //printf("Track pt %f in HMPID acceptance phi %f \n ",pt,phi*TMath::RadToDeg() );
234 fhDeltaPhiAssocPtBinHMPIDAcc[assocBin]->Fill(ptTrig, deltaPhi);
239 //fill different multiplicity histogram
242 for(Int_t im = 0; im<GetMultiBin(); im++)
244 if(nTracks < ( GetMaxMulti() - GetMinMulti() )/GetMultiBin()*(im+1))
246 fhTrigDeltaPhiCharged[im]->Fill(ptTrig,deltaPhi);
247 fhTrigDeltaEtaCharged[im]->Fill(ptTrig,deltaEta);
253 //____________________________________________________________________________________________________________________________________________________
254 Bool_t AliAnaParticleHadronCorrelation::FillChargedMCCorrelationHistograms(const Float_t mcAssocPt, Float_t mcAssocPhi, const Float_t mcAssocEta,
255 const Float_t mcTrigPt, const Float_t mcTrigPhi, const Float_t mcTrigEta)
257 // Fill MC histograms independently of AOD or ESD
259 //Select only hadrons in pt range
260 if(mcAssocPt < fMinAssocPt || mcAssocPt > fMaxAssocPt) return kTRUE ; // exclude but continue
262 if(mcAssocPhi < 0) mcAssocPhi+=TMath::TwoPi();
264 //remove trigger itself for correlation when use charged triggers
265 if(TMath::Abs(mcAssocPt -mcTrigPt ) < 1e-6 &&
266 TMath::Abs(mcAssocPhi-mcTrigPhi) < 1e-6 &&
267 TMath::Abs(mcAssocEta-mcTrigEta) < 1e-6) return kTRUE ; // exclude but continue
270 if( fMakeAbsoluteLeading && mcAssocPt > mcTrigPt ) return kFALSE; // jump event
272 //jump out this event if near side associated partile pt larger than trigger
273 if( fMakeNearSideLeading && mcAssocPt > mcTrigPt &&
274 TMath::Abs(mcAssocPhi-mcTrigPhi)<TMath::PiOver2() ) return kFALSE; // jump event
276 Float_t mcdeltaPhi= mcTrigPhi-mcAssocPhi;
277 if(mcdeltaPhi <= -TMath::PiOver2()) mcdeltaPhi+=TMath::TwoPi();
278 if(mcdeltaPhi > 3*TMath::PiOver2()) mcdeltaPhi-=TMath::TwoPi();
280 Float_t mcxE =-mcAssocPt/mcTrigPt*TMath::Cos(mcdeltaPhi);// -(mcAssocPx*pxprim+mcAssocPy*pyprim)/(mcTrigPt*mcTrigPt);
281 Float_t mchbpXE =-100 ;
282 if(mcxE > 0 ) mchbpXE = TMath::Log(1./mcxE);
284 Float_t mczT = mcAssocPt/mcTrigPt ;
285 Float_t mchbpZT =-100 ;
286 if(mczT > 0 ) mchbpZT = TMath::Log(1./mczT);
288 //Selection within angular range
289 if( mcdeltaPhi< -TMath::PiOver2()) mcdeltaPhi+=TMath::TwoPi();
290 if( mcdeltaPhi>3*TMath::PiOver2()) mcdeltaPhi-=TMath::TwoPi();
292 Double_t mcpout = mcAssocPt*TMath::Sin(mcdeltaPhi) ;
295 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",
296 mcAssocPt,mcAssocPhi, mcTrigPhi,fDeltaPhiMinCut, mcdeltaPhi, fDeltaPhiMaxCut, GetMinPt());
299 fhMCEtaCharged ->Fill(mcAssocPt, mcAssocEta);
300 fhMCPhiCharged ->Fill(mcAssocPt, mcAssocPhi);
301 fhMCDeltaEtaCharged->Fill(mcTrigPt, mcTrigEta-mcAssocEta);
302 fhMCDeltaPhiCharged->Fill(mcTrigPt, mcdeltaPhi);
303 fhMCPtAssocDeltaPhi->Fill(mcAssocPt, mcdeltaPhi);
305 fhMCDeltaPhiDeltaEtaCharged->Fill(mcdeltaPhi,mcTrigEta-mcAssocEta);
307 //delta phi cut for correlation
308 if( (mcdeltaPhi > fDeltaPhiMinCut) && (mcdeltaPhi < fDeltaPhiMaxCut) )
310 fhMCDeltaPhiChargedPt->Fill(mcAssocPt,mcdeltaPhi);
311 fhMCPtXECharged ->Fill(mcTrigPt,mcxE);
312 fhMCPtHbpXECharged ->Fill(mcTrigPt,mchbpXE);
313 fhMCPtZTCharged ->Fill(mcTrigPt,mczT);
314 fhMCPtHbpZTCharged ->Fill(mcTrigPt,mchbpZT);
315 fhMCPtTrigPout ->Fill(mcTrigPt, mcpout) ;
319 if ( (mcdeltaPhi > fUeDeltaPhiMinCut) && (mcdeltaPhi < fUeDeltaPhiMaxCut) )
321 Double_t randomphi = gRandom->Uniform(TMath::Pi()/2,3*TMath::Pi()/2);
322 Double_t mcUexE = -(mcAssocPt/mcTrigPt)*TMath::Cos(randomphi);
324 if(mcUexE < 0.) mcUexE = -mcUexE;
326 fhMCPtXEUeCharged->Fill(mcTrigPt,mcUexE);
327 if(mcUexE > 0) fhMCPtHbpXEUeCharged->Fill(mcTrigPt,TMath::Log(1/mcUexE));
329 fhMCUePart->Fill(mcTrigPt);
335 //___________________________________________________________________________________________________________________
336 void AliAnaParticleHadronCorrelation::FillChargedMomentumImbalanceHistograms(const Float_t ptTrig, const Float_t ptAssoc,
337 const Float_t xE, const Float_t hbpXE,
338 const Float_t zT, const Float_t hbpZT,
339 const Float_t pout, const Float_t deltaPhi,
340 const Int_t nTracks, const Int_t charge,
341 const Int_t assocBin, const Bool_t decay )
344 // Fill mostly momentum imbalance related histograms
346 fhDeltaPhiChargedPt ->Fill(ptAssoc, deltaPhi);
347 fhXECharged ->Fill(ptTrig , xE);
348 fhPtHbpXECharged ->Fill(ptTrig , hbpXE);
349 fhZTCharged ->Fill(ptTrig , zT);
350 fhPtHbpZTCharged ->Fill(ptTrig , hbpZT);
351 fhPtTrigPout ->Fill(ptTrig , pout) ;
352 fhPtTrigCharged ->Fill(ptTrig , ptAssoc) ;
354 if(fDecayTrigger && decay)
356 fhXEDecayCharged->Fill(ptTrig,xE);
357 fhZTDecayCharged->Fill(ptTrig,zT);
358 } // photon decay pi0/eta trigger
360 if(assocBin >= 0 )//away side
362 fhXEAssocPtBin[assocBin]->Fill(ptTrig, xE) ;
363 fhZTAssocPtBin[assocBin]->Fill(ptTrig, zT) ;
365 if(fDecayTrigger && decay)
367 fhXEDecayChargedAssocPtBin[assocBin]->Fill(ptTrig, xE);
368 fhZTDecayChargedAssocPtBin[assocBin]->Fill(ptTrig, zT);
374 fhXEPosCharged->Fill(ptTrig,xE) ;
375 fhZTPosCharged->Fill(ptTrig,zT) ;
379 fhXENegCharged->Fill(ptTrig,xE) ;
380 fhZTNegCharged->Fill(ptTrig,zT) ;
383 //fill different multiplicity histogram
386 for(Int_t im=0; im<GetMultiBin(); im++)
388 if(nTracks < ( GetMaxMulti() - GetMinMulti() )/GetMultiBin()*(im+1))
390 fhTrigXECorr[im]->Fill(ptTrig,xE);
391 fhTrigZTCorr[im]->Fill(ptTrig,zT);
394 } //multiplicity events selection
397 //_______________________________________________________________________________________________________________________
398 void AliAnaParticleHadronCorrelation::FillChargedUnderlyingEventHistograms(const Float_t ptTrig, const Float_t ptAssoc,
399 const Float_t deltaPhi, const Int_t nTracks)
401 // Fill underlying event histograms
403 fhDeltaPhiUeChargedPt->Fill(ptAssoc,deltaPhi);
405 Double_t randomphi = gRandom->Uniform(TMath::Pi()/2,3*TMath::Pi()/2);
406 Double_t uexE = -(ptAssoc/ptTrig)*TMath::Cos(randomphi);
407 Double_t uezT = ptAssoc/ptTrig;
409 if(uexE < 0.) uexE = -uexE;
411 fhXEUeCharged->Fill(ptTrig,uexE);
412 if(uexE > 0) fhPtHbpXEUeCharged->Fill(ptTrig,TMath::Log(1/uexE));
414 fhZTUeCharged->Fill(ptTrig,uezT);
415 if(uexE > 0) fhPtHbpZTUeCharged->Fill(ptTrig,TMath::Log(1/uezT));
419 for(Int_t im=0; im<GetMultiBin(); im++)
421 if(nTracks < ( GetMaxMulti() - GetMinMulti() )/GetMultiBin()*(im+1))
423 fhTrigXEUeCorr[im]->Fill(ptTrig,uexE); // xE? CHECK
424 fhTrigZTUeCorr[im]->Fill(ptTrig,uezT); // zT? CHECK
427 } //multiplicity events selection
430 //___________________________________________________________________________________________________________________________
431 void AliAnaParticleHadronCorrelation::FillChargedUnderlyingEventSidesHistograms(const Float_t ptTrig, const Float_t ptAssoc,
432 const Float_t xE, const Float_t hbpXE,
433 const Float_t zT, const Float_t hbpZT,
434 const Float_t deltaPhi)
436 // Fill underlying event histograms to the left and right of trigger
438 if((deltaPhi<-fUeDeltaPhiMinCut) && (deltaPhi >-fUeDeltaPhiMaxCut))
440 fhDeltaPhiUeLeftCharged->Fill(ptAssoc, deltaPhi);
441 fhXEUeLeftCharged ->Fill(ptTrig , xE);
442 fhPtHbpXEUeLeftCharged ->Fill(ptTrig , hbpXE);
443 fhZTUeLeftCharged ->Fill(ptTrig , zT);
444 fhPtHbpZTUeLeftCharged ->Fill(ptTrig , hbpZT);
447 if((deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < fUeDeltaPhiMaxCut))
449 fhDeltaPhiUeRightCharged->Fill(ptAssoc, deltaPhi);
450 fhXEUeRightCharged ->Fill(ptTrig , xE);
451 fhPtHbpXEUeRightCharged ->Fill(ptTrig , hbpXE);
452 fhZTUeRightCharged ->Fill(ptTrig , zT);
453 fhPtHbpZTUeRightCharged ->Fill(ptTrig , hbpZT);
457 //______________________________________________________________________________________________________________________________
458 void AliAnaParticleHadronCorrelation::FillDecayPhotonCorrelationHistograms(const Float_t ptAssoc, const Float_t phiAssoc,
459 const TLorentzVector mom1, const TLorentzVector mom2,
460 const Bool_t bChargedOrNeutral)
462 // Do correlation with decay photons of triggered pi0 or eta
464 // Calculate the correlation parameters
465 Float_t ptDecay1 = mom1.Pt();
466 Float_t ptDecay2 = mom2.Pt();
468 Float_t zTDecay1 = -100, zTDecay2 = -100;
469 if(ptDecay1) zTDecay1 = ptAssoc/ptDecay1 ;
470 if(ptDecay2) zTDecay2 = ptAssoc/ptDecay2 ;
472 Float_t deltaPhiDecay1 = mom1.Phi()-phiAssoc;
473 if(deltaPhiDecay1< -TMath::PiOver2()) deltaPhiDecay1+=TMath::TwoPi();
474 if(deltaPhiDecay1>3*TMath::PiOver2()) deltaPhiDecay1-=TMath::TwoPi();
476 Float_t deltaPhiDecay2 = mom2.Phi()-phiAssoc;
477 if(deltaPhiDecay2< -TMath::PiOver2()) deltaPhiDecay2+=TMath::TwoPi();
478 if(deltaPhiDecay2>3*TMath::PiOver2()) deltaPhiDecay2-=TMath::TwoPi();
480 Float_t xEDecay1 =-zTDecay1*TMath::Cos(deltaPhiDecay1); // -(px*pxTrig+py*pyTrig)/(ptTrig*ptTrig);
481 Float_t xEDecay2 =-zTDecay2*TMath::Cos(deltaPhiDecay2); // -(px*pxTrig+py*pyTrig)/(ptTrig*ptTrig);
483 if(bChargedOrNeutral) // correlate with charges
485 fhDeltaPhiDecayCharged->Fill(ptDecay1, deltaPhiDecay1);
486 fhDeltaPhiDecayCharged->Fill(ptDecay2, deltaPhiDecay2);
488 if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::FillDecayPhotonHistograms( Charged corr) - deltaPhoton1 = %f, deltaPhoton2 = %f \n", deltaPhiDecay1, deltaPhiDecay2);
490 if( (deltaPhiDecay1 > fDeltaPhiMinCut) && ( deltaPhiDecay1 < fDeltaPhiMaxCut) )
492 fhZTDecayCharged->Fill(ptDecay1,zTDecay1);
493 fhXEDecayCharged->Fill(ptDecay1,xEDecay1);
495 if( (deltaPhiDecay2 > fDeltaPhiMinCut) && ( deltaPhiDecay2 < fDeltaPhiMaxCut) )
497 fhZTDecayCharged->Fill(ptDecay2,zTDecay2);
498 fhXEDecayCharged->Fill(ptDecay2,xEDecay2);
501 else // correlate with neutrals
503 fhDeltaPhiDecayCharged->Fill(ptDecay1, deltaPhiDecay1);
504 fhDeltaPhiDecayCharged->Fill(ptDecay2, deltaPhiDecay2);
506 if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::FillDecayPhotonHistograms(Neutral corr) - deltaPhoton1 = %f, deltaPhoton2 = %f \n", deltaPhiDecay1, deltaPhiDecay2);
508 if( (deltaPhiDecay1 > fDeltaPhiMinCut) && ( deltaPhiDecay1 < fDeltaPhiMaxCut) )
510 fhZTDecayCharged->Fill(ptDecay1,zTDecay1);
511 fhXEDecayCharged->Fill(ptDecay1,xEDecay1);
513 if( (deltaPhiDecay2 > fDeltaPhiMinCut) && ( deltaPhiDecay2 < fDeltaPhiMaxCut) )
515 fhZTDecayCharged->Fill(ptDecay2,zTDecay2);
516 fhXEDecayCharged->Fill(ptDecay2,xEDecay2);
521 //______________________________________________________________________________________________________________________________________________________
522 void AliAnaParticleHadronCorrelation::FillNeutralAngularCorrelationHistograms(const Float_t ptAssoc, const Float_t ptTrig,
523 const Float_t phiAssoc, const Float_t phiTrig, Float_t & deltaPhi,
524 const Float_t etaAssoc, const Float_t etaTrig)
526 // Fill angular correlation related histograms
528 Float_t deltaEta = etaTrig-etaAssoc;
529 deltaPhi = phiTrig-phiAssoc;
531 if(deltaPhi <= -TMath::PiOver2()) deltaPhi+=TMath::TwoPi();
532 if(deltaPhi > 3*TMath::PiOver2()) deltaPhi-=TMath::TwoPi();
534 fhEtaNeutral ->Fill(ptAssoc,etaAssoc);
535 fhPhiNeutral ->Fill(ptAssoc,phiAssoc);
536 fhDeltaEtaNeutral->Fill(ptTrig ,deltaEta);
537 fhDeltaPhiNeutral->Fill(ptTrig ,deltaPhi);
539 if(ptAssoc > 2 ) fhDeltaPhiDeltaEtaNeutral->Fill(deltaPhi, deltaEta);
543 //_____________________________________________________________________________________________________________________________
544 void AliAnaParticleHadronCorrelation::FillNeutralUnderlyingEventSidesHistograms(const Float_t ptTrig, const Float_t ptAssoc,
545 const Float_t xE, const Float_t hbpXE,
546 const Float_t zT, const Float_t hbpZT,
547 const Float_t deltaPhi)
549 // Fill underlying event histograms to the left and right of trigger
551 if((deltaPhi<-fUeDeltaPhiMinCut) && (deltaPhi >-fUeDeltaPhiMaxCut))
553 fhDeltaPhiUeLeftNeutral->Fill(ptAssoc, deltaPhi);
554 fhXEUeLeftNeutral ->Fill(ptTrig , xE);
555 fhPtHbpXEUeLeftNeutral ->Fill(ptTrig , hbpXE);
556 fhZTUeLeftNeutral ->Fill(ptTrig , zT);
557 fhPtHbpZTUeLeftNeutral ->Fill(ptTrig , hbpZT);
560 if((deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < fUeDeltaPhiMaxCut))
562 fhDeltaPhiUeRightNeutral->Fill(ptAssoc, deltaPhi);
563 fhXEUeRightNeutral ->Fill(ptTrig , xE);
564 fhPtHbpXEUeRightNeutral ->Fill(ptTrig , hbpXE);
565 fhZTUeRightNeutral ->Fill(ptTrig , zT);
566 fhPtHbpZTUeRightNeutral ->Fill(ptTrig , hbpZT);
570 //_____________________________________________________________
571 void AliAnaParticleHadronCorrelation::FillChargedEventMixPool()
575 //printf("FillChargedEventMixPool for %s\n",GetInputAODName().Data());
577 Int_t nTracks = GetCTSTracks()->GetEntriesFast();
579 fhNtracksAll->Fill(nTracks);
581 AliAnalysisManager * manager = AliAnalysisManager::GetAnalysisManager();
582 AliInputEventHandler * inputHandler = dynamic_cast<AliInputEventHandler*>(manager->GetInputEventHandler());
584 if(!inputHandler) return ;
586 if(inputHandler->IsEventSelected( ) & GetReader()->GetEventTriggerMask())
588 fhNtracksTrigger->Fill(nTracks);
591 if(inputHandler->IsEventSelected( ) & AliVEvent::kMB)
594 fhNtracksMB->Fill(nTracks);
596 if(fUseMixStoredInReader && GetReader()->GetLastTracksMixedEvent() == GetEventNumber())
598 //printf("%s : Pool already filled for this event !!!\n",GetInputAODName().Data());
599 return ; // pool filled previously for another trigger
601 Int_t eventBin = GetEventMixBin();
603 //Check that the bin exists, if not (bad determination of RP, centrality or vz bin) do nothing
604 if(eventBin < 0) return;
606 TObjArray * mixEventTracks = new TObjArray;
608 if(fUseMixStoredInReader)
610 fListMixEvents[eventBin] = GetReader()->GetListWithMixedEventsForTracks(eventBin);
613 if(!fListMixEvents[eventBin]) fListMixEvents[eventBin] = new TList();
615 //printf("%s ***** Pool Event bin : %d - nTracks %d\n",GetInputAODName().Data(),eventBin, GetCTSTracks()->GetEntriesFast());
617 TList * pool = fListMixEvents[eventBin];
620 for(Int_t ipr = 0;ipr < GetCTSTracks()->GetEntriesFast() ; ipr ++ )
622 AliVTrack * track = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
624 Double_t mom[3] = {track->Px(),track->Py(),track->Pz()};
625 p3.SetXYZ(mom[0],mom[1],mom[2]);
626 Float_t pt = p3.Pt();
628 //Select only hadrons in pt range
629 if(pt < fMinAssocPt || pt > fMaxAssocPt) continue ;
631 AliAODPWG4Particle * mixedTrack = new AliAODPWG4Particle(mom[0],mom[1],mom[2],0);
632 mixedTrack->SetDetector("CTS");
633 mixedTrack->SetChargedBit(track->Charge()>0);
635 mixEventTracks->Add(mixedTrack);
638 //Set the event number where the last event was added, to avoid double pool filling
639 GetReader()->SetLastTracksMixedEvent(GetEventNumber());
641 pool->AddFirst(mixEventTracks);
643 //printf("Pool size %d, max %d\n",pool->GetSize(), GetNMaxEvMix());
645 if(pool->GetSize() > GetNMaxEvMix())
647 TClonesArray * tmp = static_cast<TClonesArray*>(pool->Last()) ;
656 //____________________________________________________________
657 TObjString* AliAnaParticleHadronCorrelation::GetAnalysisCuts()
659 //Save parameters used for analysis
660 TString parList ; //this will be list of parameters used for this analysis.
661 const Int_t buffersize = 560;
662 char onePar[buffersize] ;
664 snprintf(onePar,buffersize,"--- AliAnaPaticleHadronCorrelation ---\n") ;
666 snprintf(onePar,buffersize," Pt Trigger > %3.2f ", fMinTriggerPt) ;
668 snprintf(onePar,buffersize," %3.2f < Pt associated < %3.2f ", fMinAssocPt, fMaxAssocPt) ;
670 snprintf(onePar,buffersize," %3.2f < Phi trigger particle-Hadron < %3.2f ", fDeltaPhiMinCut, fDeltaPhiMaxCut) ;
672 snprintf(onePar,buffersize," %3.2f < Phi trigger particle-UeHadron < %3.2f ", fUeDeltaPhiMinCut, fUeDeltaPhiMaxCut) ;
674 snprintf(onePar,buffersize,"Isolated Trigger? %d\n", fSelectIsolated) ;
676 snprintf(onePar,buffersize,"Several UE? %d\n", fMakeSeveralUE) ;
678 snprintf(onePar,buffersize,"Name of AOD Pi0 Branch %s ", fPi0AODBranchName.Data());
680 snprintf(onePar,buffersize,"Do Decay-hadron correlation ? pi0 %d, decay %d", fPi0Trigger, fDecayTrigger) ;
682 snprintf(onePar,buffersize,"Select absolute leading for cluster triggers ? %d or Near Side Leading %d \n",
683 fMakeAbsoluteLeading, fMakeNearSideLeading) ;
685 snprintf(onePar,buffersize,"Associated particle pt bins %d: ", fNAssocPtBins) ;
687 for (Int_t ibin = 0; ibin<fNAssocPtBins; ibin++) {
688 snprintf(onePar,buffersize,"bin %d = [%2.1f,%2.1f];", ibin, fAssocPtBinLimit[ibin], fAssocPtBinLimit[ibin+1]) ;
692 //Get parameters set in base class.
693 parList += GetBaseParametersList() ;
695 //Get parameters set in FiducialCut class (not available yet)
696 //parlist += GetFidCut()->GetFidCutParametersList()
698 return new TObjString(parList) ;
702 //________________________________________________________________
703 TList * AliAnaParticleHadronCorrelation::GetCreateOutputObjects()
706 // Create histograms to be saved in output file and
707 // store them in fOutputContainer
709 TList * outputContainer = new TList() ;
710 outputContainer->SetName("CorrelationHistos") ;
712 Int_t nptbins = GetHistogramRanges()->GetHistoPtBins(); Int_t nphibins = GetHistogramRanges()->GetHistoPhiBins(); Int_t netabins = GetHistogramRanges()->GetHistoEtaBins(); Int_t ndeltaphibins = GetHistogramRanges()->GetHistoDeltaPhiBins(); Int_t ndeltaetabins = GetHistogramRanges()->GetHistoDeltaEtaBins();
713 Float_t ptmax = GetHistogramRanges()->GetHistoPtMax(); Float_t phimax = GetHistogramRanges()->GetHistoPhiMax(); Float_t etamax = GetHistogramRanges()->GetHistoEtaMax(); Float_t deltaphimax = GetHistogramRanges()->GetHistoDeltaPhiMax(); Float_t deltaetamax = GetHistogramRanges()->GetHistoDeltaEtaMax();
714 Float_t ptmin = GetHistogramRanges()->GetHistoPtMin(); Float_t phimin = GetHistogramRanges()->GetHistoPhiMin(); Float_t etamin = GetHistogramRanges()->GetHistoEtaMin(); Float_t deltaphimin = GetHistogramRanges()->GetHistoDeltaPhiMin(); Float_t deltaetamin = GetHistogramRanges()->GetHistoDeltaEtaMin();
716 fhPtLeading = new TH1F ("hPtLeading","p_T distribution of leading particles", nptbins,ptmin,ptmax);
717 fhPtLeading->SetXTitle("p_{T}^{trig} (GeV/c)");
719 fhPhiLeading = new TH2F ("hPhiLeading","#phi distribution of leading Particles",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
720 fhPhiLeading->SetYTitle("#phi (rad)");
722 fhEtaLeading = new TH2F ("hEtaLeading","#eta distribution of leading",nptbins,ptmin,ptmax, netabins,etamin,etamax);
723 fhEtaLeading->SetYTitle("#eta ");
725 outputContainer->Add(fhPtLeading);
726 outputContainer->Add(fhPhiLeading);
727 outputContainer->Add(fhEtaLeading);
729 fhPtLeadingCentrality = new TH2F("hPtLeadingCentrality","Leading particle p_{T} vs centrality",nptbins,ptmin,ptmax,100,0.,100) ;
730 fhPtLeadingCentrality->SetXTitle("p_{T}^{trig} (GeV/c)");
731 fhPtLeadingCentrality->SetYTitle("Centrality (%)");
732 outputContainer->Add(fhPtLeadingCentrality) ;
734 fhPtLeadingEventPlane = new TH2F("hPtLeadingEventPlane","Leading particle p_{T} vs event plane angle",nptbins,ptmin,ptmax, 100,0.,TMath::Pi()) ;
735 fhPtLeadingEventPlane->SetXTitle("p_{T}^{trig} (GeV/c)");
736 fhPtLeadingEventPlane->SetXTitle("EP angle (rad)");
737 outputContainer->Add(fhPtLeadingEventPlane) ;
739 fhLeadingEventPlaneCentrality = new TH2F("hLeadingEventPlane","Leading particle centrality vs event plane angle",100,0.,100,100,0.,TMath::Pi()) ;
740 fhLeadingEventPlaneCentrality->SetXTitle("Centrality (%)");
741 fhLeadingEventPlaneCentrality->SetYTitle("EP angle (rad)");
742 outputContainer->Add(fhLeadingEventPlaneCentrality) ;
744 //Correlation with charged hadrons
745 if(GetReader()->IsCTSSwitchedOn())
747 fhDeltaPhiDeltaEtaCharged = new TH2F
748 ("hDeltaPhiDeltaEtaCharged","#eta_{trigger} - #eta_{h^{#pm}} vs #phi_{trigger} - #phi_{h^{#pm}}",
749 ndeltaphibins ,deltaphimin,deltaphimax,ndeltaetabins,deltaetamin,deltaetamax);
750 fhDeltaPhiDeltaEtaCharged->SetXTitle("#Delta #phi");
751 fhDeltaPhiDeltaEtaCharged->SetYTitle("#Delta #eta");
753 fhPhiCharged = new TH2F
754 ("hPhiCharged","#phi_{h^{#pm}} vs p_{T #pm}",
755 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
756 fhPhiCharged->SetYTitle("#phi_{h^{#pm}} (rad)");
757 fhPhiCharged->SetXTitle("p_{T #pm} (GeV/c)");
759 fhEtaCharged = new TH2F
760 ("hEtaCharged","#eta_{h^{#pm}} vs p_{T #pm}",
761 nptbins,ptmin,ptmax,netabins,etamin,etamax);
762 fhEtaCharged->SetYTitle("#eta_{h^{#pm}} (rad)");
763 fhEtaCharged->SetXTitle("p_{T #pm} (GeV/c)");
765 fhDeltaPhiCharged = new TH2F
766 ("hDeltaPhiCharged","#phi_{trigger} - #phi_{h^{#pm}} vs p_{T trigger}",
767 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
768 fhDeltaPhiCharged->SetYTitle("#Delta #phi");
769 fhDeltaPhiCharged->SetXTitle("p_{T trigger} (GeV/c)");
771 fhDeltaPhiChargedPt = new TH2F
772 ("hDeltaPhiChargedPt","#phi_{trigger} - #phi_{#h^{#pm}} vs p_{T h^{#pm}}",
773 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
774 fhDeltaPhiChargedPt->SetYTitle("#Delta #phi");
775 fhDeltaPhiChargedPt->SetXTitle("p_{T h^{#pm}} (GeV/c)");
777 fhDeltaPhiUeChargedPt = new TH2F
778 ("hDeltaPhiUeChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs p_{T Ueh^{#pm}}",
779 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
780 fhDeltaPhiUeChargedPt->SetYTitle("#Delta #phi");
781 fhDeltaPhiUeChargedPt->SetXTitle("p_{T h^{#pm}} (GeV/c)");
783 fhUePart = new TH1F("hUePart","UE particles distribution vs pt trig",
784 nptbins,ptmin,ptmax);
785 fhUePart->SetYTitle("dNch");
786 fhUePart->SetXTitle("p_{T trigger}");
789 fhDeltaEtaCharged = new TH2F
790 ("hDeltaEtaCharged","#eta_{trigger} - #eta_{h^{#pm}} vs p_{T trigger}",
791 nptbins,ptmin,ptmax,ndeltaetabins,deltaetamin,deltaetamax);
792 fhDeltaEtaCharged->SetYTitle("#Delta #eta");
793 fhDeltaEtaCharged->SetXTitle("p_{T trigger} (GeV/c)");
796 new TH2F("hXECharged","x_{E} for charged tracks",
797 nptbins,ptmin,ptmax,200,0.,2.);
798 fhXECharged->SetYTitle("x_{E}");
799 fhXECharged->SetXTitle("p_{T trigger}");
802 new TH2F("hXEUeCharged","x_{E} for Underlying Event",
803 nptbins,ptmin,ptmax,200,0.,2.);
804 fhXEUeCharged->SetYTitle("x_{E}");
805 fhXEUeCharged->SetXTitle("p_{T trigger}");
808 new TH2F("hXEPositiveCharged","x_{E} for positive charged tracks",
809 nptbins,ptmin,ptmax,200,0.,2.);
810 fhXEPosCharged->SetYTitle("x_{E}");
811 fhXEPosCharged->SetXTitle("p_{T trigger}");
814 new TH2F("hXENegativeCharged","x_{E} for negative charged tracks",
815 nptbins,ptmin,ptmax,200,0.,2.);
816 fhXENegCharged->SetYTitle("x_{E}");
817 fhXENegCharged->SetXTitle("p_{T trigger}");
820 new TH2F("hHbpXECharged","#xi = ln(1/x_{E}) with charged hadrons",
821 nptbins,ptmin,ptmax,200,0.,10.);
822 fhPtHbpXECharged->SetYTitle("ln(1/x_{E})");
823 fhPtHbpXECharged->SetXTitle("p_{T trigger}");
826 new TH2F("hHbpXEUeCharged","#xi = ln(1/x_{E}) with charged hadrons,Underlying Event",
827 nptbins,ptmin,ptmax,200,0.,10.);
828 fhPtHbpXEUeCharged->SetYTitle("ln(1/x_{E})");
829 fhPtHbpXEUeCharged->SetXTitle("p_{T trigger}");
832 new TH2F("hZTCharged","z_{T} for charged tracks",
833 nptbins,ptmin,ptmax,200,0.,2.);
834 fhZTCharged->SetYTitle("z_{T}");
835 fhZTCharged->SetXTitle("p_{T trigger}");
838 new TH2F("hZTUeCharged","z_{T} for Underlying Event",
839 nptbins,ptmin,ptmax,200,0.,2.);
840 fhZTUeCharged->SetYTitle("z_{T}");
841 fhZTUeCharged->SetXTitle("p_{T trigger}");
844 new TH2F("hZTPositiveCharged","z_{T} for positive charged tracks",
845 nptbins,ptmin,ptmax,200,0.,2.);
846 fhZTPosCharged->SetYTitle("z_{T}");
847 fhZTPosCharged->SetXTitle("p_{T trigger}");
850 new TH2F("hZTNegativeCharged","z_{T} for negative charged tracks",
851 nptbins,ptmin,ptmax,200,0.,2.);
852 fhZTNegCharged->SetYTitle("z_{T}");
853 fhZTNegCharged->SetXTitle("p_{T trigger}");
856 new TH2F("hHbpZTCharged","#xi = ln(1/z_{T}) with charged hadrons",
857 nptbins,ptmin,ptmax,200,0.,10.);
858 fhPtHbpZTCharged->SetYTitle("ln(1/z_{T})");
859 fhPtHbpZTCharged->SetXTitle("p_{T trigger}");
862 new TH2F("hHbpZTUeCharged","#xi = ln(1/z_{T}) with charged hadrons,Underlying Event",
863 nptbins,ptmin,ptmax,200,0.,10.);
864 fhPtHbpZTUeCharged->SetYTitle("ln(1/x_{E})");
865 fhPtHbpZTUeCharged->SetXTitle("p_{T trigger}");
868 new TH2F("hPtTrigPout","Pout with triggers",
869 nptbins,ptmin,ptmax,2*nptbins,-ptmax,ptmax);
870 fhPtTrigPout->SetYTitle("p_{out} (GeV/c)");
871 fhPtTrigPout->SetXTitle("p_{T trigger} (GeV/c)");
874 new TH2F("hPtTrigCharged","trgger and charged tracks pt distribution",
875 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
876 fhPtTrigCharged->SetYTitle("p_{T h^{#pm}} (GeV/c)");
877 fhPtTrigCharged->SetXTitle("p_{T trigger} (GeV/c)");
879 outputContainer->Add(fhDeltaPhiDeltaEtaCharged);
880 outputContainer->Add(fhPhiCharged) ;
881 outputContainer->Add(fhEtaCharged) ;
882 outputContainer->Add(fhDeltaPhiCharged) ;
883 outputContainer->Add(fhDeltaEtaCharged) ;
884 outputContainer->Add(fhDeltaPhiChargedPt) ;
885 outputContainer->Add(fhDeltaPhiUeChargedPt) ;
886 outputContainer->Add(fhUePart);
888 outputContainer->Add(fhXECharged) ;
889 outputContainer->Add(fhXEPosCharged) ;
890 outputContainer->Add(fhXENegCharged) ;
891 outputContainer->Add(fhXEUeCharged) ;
892 outputContainer->Add(fhPtHbpXECharged) ;
893 outputContainer->Add(fhPtHbpXEUeCharged) ;
895 outputContainer->Add(fhZTCharged) ;
896 outputContainer->Add(fhZTPosCharged) ;
897 outputContainer->Add(fhZTNegCharged) ;
898 outputContainer->Add(fhZTUeCharged) ;
899 outputContainer->Add(fhPtHbpZTCharged) ;
900 outputContainer->Add(fhPtHbpZTUeCharged) ;
902 outputContainer->Add(fhPtTrigPout) ;
903 outputContainer->Add(fhPtTrigCharged) ;
907 Int_t nMultiBins = GetMultiBin();
908 fhTrigDeltaPhiCharged = new TH2F*[nMultiBins] ;
909 fhTrigDeltaEtaCharged = new TH2F*[nMultiBins] ;
910 fhTrigXECorr = new TH2F*[nMultiBins] ;
911 fhTrigXEUeCorr = new TH2F*[nMultiBins] ;
912 fhTrigZTCorr = new TH2F*[nMultiBins] ;
913 fhTrigZTUeCorr = new TH2F*[nMultiBins] ;
915 for(Int_t im=0; im<nMultiBins; im++)
917 fhTrigDeltaPhiCharged[im] = new TH2F
918 (Form("hTrigDeltaPhiCharged_%d",im),Form("hTrigDeltaPhiCharged_%d",im), nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
919 fhTrigDeltaPhiCharged[im]->SetXTitle("p_{T trigger} (GeV/c)");
920 fhTrigDeltaPhiCharged[im]->SetYTitle("#Delta #phi");
922 fhTrigDeltaEtaCharged[im] = new TH2F
923 (Form("hTrigDeltaEtaCharged_%d",im),Form("hTrigDeltaEtaCharged_%d",im), nptbins,ptmin,ptmax, ndeltaetabins ,deltaetamin,deltaetamax);
924 fhTrigDeltaEtaCharged[im]->SetXTitle("p_{T trigger} (GeV/c)");
925 fhTrigDeltaEtaCharged[im]->SetYTitle("#Delta #eta");
927 fhTrigXECorr[im] = new TH2F
928 (Form("hTrigXEPtCorr_%d",im),Form("hTrigXEPtCorr_%d",im), nptbins,ptmin,ptmax,200,0.,2.);
929 fhTrigXECorr[im]->SetYTitle("x_{E trigger h^{#pm}}");
930 fhTrigXECorr[im]->SetXTitle("p_{T trigger}");
932 fhTrigXEUeCorr[im] = new TH2F
933 (Form("hTrigXEPtUeCorr_%d",im),Form("hTrigXEPtUeCorr_%d",im), nptbins,ptmin,ptmax,200,0.,2.);
934 fhTrigXEUeCorr[im]->SetYTitle("x_{E trigger h^{#pm}}");
935 fhTrigXEUeCorr[im]->SetXTitle("p_{T trigger}");
937 fhTrigZTCorr[im] = new TH2F
938 (Form("hTrigZTPtCorr_%d",im),Form("hTrigZTPtCorr_%d",im), nptbins,ptmin,ptmax,200,0.,2.);
939 fhTrigZTCorr[im]->SetYTitle("z_{trigger h^{#pm}}");
940 fhTrigZTCorr[im]->SetXTitle("p_{T trigger}");
942 fhTrigZTUeCorr[im] = new TH2F
943 (Form("hTrigZTPtUeCorr_%d",im),Form("hTrigZTPtUeCorr_%d",im), nptbins,ptmin,ptmax,200,0.,2.);
944 fhTrigZTUeCorr[im]->SetYTitle("z_{trigger h^{#pm}}");
945 fhTrigZTUeCorr[im]->SetXTitle("p_{T trigger}");
947 outputContainer->Add(fhTrigDeltaPhiCharged[im]) ;
948 outputContainer->Add(fhTrigDeltaEtaCharged[im]) ;
949 outputContainer->Add(fhTrigXECorr[im]);
950 outputContainer->Add(fhTrigXEUeCorr[im]);
951 outputContainer->Add(fhTrigZTCorr[im]);
952 outputContainer->Add(fhTrigZTUeCorr[im]);
958 fhAssocPtBkg = new TH2F("hAssocPtBkg", " Trigger p_{T} vs associated hadron p_{T} from background",
959 nptbins, ptmin, ptmax,nptbins,ptmin,ptmax);
960 fhAssocPtBkg->SetXTitle("p_{T trigger}");
961 fhAssocPtBkg->SetYTitle("p_{T associated}");
962 outputContainer->Add(fhAssocPtBkg) ;
964 fhDeltaPhiBrad = new TH2F("hDeltaPhiBrad","atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi vs p_{T trigger} ",
965 nptbins, ptmin, ptmax,288, -1.0/3.0, 5.0/3.0);
966 fhDeltaPhiBrad->SetXTitle("p_{T trigger}");
967 fhDeltaPhiBrad->SetYTitle("atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi");
968 outputContainer->Add(fhDeltaPhiBrad) ;
971 fhDeltaPhiAssocPtBin = new TH2F*[fNAssocPtBins] ;
972 fhDeltaPhiAssocPtBinDEta08 = new TH2F*[fNAssocPtBins] ;
973 fhXEAssocPtBin = new TH2F*[fNAssocPtBins] ;
974 fhZTAssocPtBin = new TH2F*[fNAssocPtBins] ;
977 fhDeltaPhiBradAssocPtBin = new TH2F*[fNAssocPtBins] ;
979 if(fPi0Trigger || fDecayTrigger)
981 fhDeltaPhiAssocPtBin = new TH2F*[fNAssocPtBins] ;
982 fhDeltaPhiAssocPtBinDEta08 = new TH2F*[fNAssocPtBins] ;
983 fhXEAssocPtBin = new TH2F*[fNAssocPtBins] ;
984 fhZTAssocPtBin = new TH2F*[fNAssocPtBins] ;
985 fhXEDecayChargedAssocPtBin = new TH2F*[fNAssocPtBins] ;
986 fhZTDecayChargedAssocPtBin = new TH2F*[fNAssocPtBins] ;
987 fhDeltaPhiDecayChargedAssocPtBin = new TH2F*[fNAssocPtBins] ;
990 if(fHMPIDCorrelation)
992 fhDeltaPhiAssocPtBinHMPID = new TH2F*[fNAssocPtBins] ;
993 fhDeltaPhiAssocPtBinHMPIDAcc= new TH2F*[fNAssocPtBins] ;
996 for(Int_t i = 0 ; i < fNAssocPtBins ; i++)
998 fhDeltaPhiAssocPtBin[i] = new TH2F(Form("hDeltaPhiPtAssocPt%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
999 Form("#Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1000 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1001 fhDeltaPhiAssocPtBin[i]->SetXTitle("p_{T trigger}");
1002 fhDeltaPhiAssocPtBin[i]->SetYTitle("#Delta #phi");
1004 fhDeltaPhiAssocPtBinDEta08[i] = new TH2F(Form("hDeltaPhiDeltaEta0.8PtAssocPt%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1005 Form("#Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f], for #Delta #eta > 0.8", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1006 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1007 fhDeltaPhiAssocPtBinDEta08[i]->SetXTitle("p_{T trigger}");
1008 fhDeltaPhiAssocPtBinDEta08[i]->SetYTitle("#Delta #phi");
1010 fhXEAssocPtBin[i] = new TH2F(Form("hXEAssocPtBin%1.f_%1.f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1011 Form("x_{E} vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1012 nptbins, ptmin, ptmax,200, 0.0, 2.0);
1013 fhXEAssocPtBin[i]->SetXTitle("p_{T trigger}");
1014 fhXEAssocPtBin[i]->SetYTitle("x_{E}");
1016 fhZTAssocPtBin[i] = new TH2F(Form("hZTAssocPtBin%1.f_%1.f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1017 Form("z_{T} vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1018 nptbins, ptmin, ptmax,200, 0.0, 2.0);
1019 fhZTAssocPtBin[i]->SetXTitle("p_{T trigger}");
1020 fhZTAssocPtBin[i]->SetYTitle("z_{T}");
1022 outputContainer->Add(fhDeltaPhiAssocPtBin[i]) ;
1023 outputContainer->Add(fhDeltaPhiAssocPtBinDEta08[i]) ;
1024 outputContainer->Add(fhXEAssocPtBin[i]);
1025 outputContainer->Add(fhZTAssocPtBin[i]);
1027 if(fPi0Trigger || fDecayTrigger)
1029 fhDeltaPhiDecayChargedAssocPtBin[i] = new TH2F(Form("hDeltaPhiPtDecayChargedAssocPt%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1030 Form("#Delta #phi vs p_{T trigger} tagged as decay for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1031 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1032 fhDeltaPhiDecayChargedAssocPtBin[i]->SetXTitle("p_{T trigger}");
1033 fhDeltaPhiDecayChargedAssocPtBin[i]->SetYTitle("#Delta #phi");
1035 fhXEDecayChargedAssocPtBin[i] = new TH2F(Form("hXEDecayChargedAssocPtBin%1.f_%1.f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1036 Form("x_{E} vs p_{T trigger} tagged as decay for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1037 nptbins, ptmin, ptmax,200, 0.0, 2.0);
1038 fhXEDecayChargedAssocPtBin[i]->SetXTitle("p_{T trigger}");
1039 fhXEDecayChargedAssocPtBin[i]->SetYTitle("x_{E}");
1041 fhZTDecayChargedAssocPtBin[i] = new TH2F(Form("hZTDecayChargedAssocPtBin%1.f_%1.f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1042 Form("z_{T} vs p_{T trigger} tagged as decay for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1043 nptbins, ptmin, ptmax,200, 0.0, 2.0);
1044 fhZTDecayChargedAssocPtBin[i]->SetXTitle("p_{T trigger}");
1045 fhZTDecayChargedAssocPtBin[i]->SetYTitle("z_{T}");
1047 outputContainer->Add(fhDeltaPhiDecayChargedAssocPtBin[i]) ;
1048 outputContainer->Add(fhXEDecayChargedAssocPtBin[i]);
1049 outputContainer->Add(fhZTDecayChargedAssocPtBin[i]);
1055 fhDeltaPhiBradAssocPtBin[i] = new TH2F(Form("hDeltaPhiBradPtAssocPt%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1056 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]),
1057 nptbins, ptmin, ptmax,288, -1.0/3.0, 5.0/3.0);
1058 fhDeltaPhiBradAssocPtBin[i]->SetXTitle("p_{T trigger}");
1059 fhDeltaPhiBradAssocPtBin[i]->SetYTitle("atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi");
1060 outputContainer->Add(fhDeltaPhiBradAssocPtBin[i]) ;
1063 if(fHMPIDCorrelation)
1065 fhDeltaPhiAssocPtBinHMPID[i] = new TH2F(Form("hDeltaPhiPtAssocPt%2.1f_%2.1fHMPID", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1066 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]),
1067 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1068 fhDeltaPhiAssocPtBinHMPID[i]->SetXTitle("p_{T trigger}");
1069 fhDeltaPhiAssocPtBinHMPID[i]->SetYTitle("#Delta #phi");
1071 fhDeltaPhiAssocPtBinHMPIDAcc[i] = new TH2F(Form("hDeltaPhiPtAssocPt%2.1f_%2.1fHMPIDAcc", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1072 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]),
1073 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1074 fhDeltaPhiAssocPtBinHMPIDAcc[i]->SetXTitle("p_{T trigger}");
1075 fhDeltaPhiAssocPtBinHMPIDAcc[i]->SetYTitle("#Delta #phi");
1077 outputContainer->Add(fhDeltaPhiAssocPtBinHMPID[i]) ;
1078 outputContainer->Add(fhDeltaPhiAssocPtBinHMPIDAcc[i]) ;
1083 if(fPi0Trigger || fDecayTrigger)
1087 fhPtPi0DecayRatio = new TH2F
1088 ("hPtPi0DecayRatio","p_T of #pi^{0} and the ratio of pt for two decay",
1089 nptbins,ptmin,ptmax, 100,0.,2.);
1090 fhPtPi0DecayRatio->SetXTitle("p_{T}^{#pi^{0}} (GeV/c)");
1091 fhPtPi0DecayRatio->SetYTitle("p_{T}^{Decay}/p_{T}^{#pi^{0}}");
1092 outputContainer->Add(fhPtPi0DecayRatio) ;
1095 fhDeltaPhiDecayCharged = new TH2F
1096 ("hDeltaPhiDecayCharged","#phi_{Decay} - #phi_{h^{#pm}} vs p_{T Decay}",
1097 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1098 fhDeltaPhiDecayCharged->SetYTitle("#Delta #phi");
1099 fhDeltaPhiDecayCharged->SetXTitle("p_{T Decay} (GeV/c)");
1102 new TH2F("hXEDecayCharged","x_{E} Decay",
1103 nptbins,ptmin,ptmax,200,0.,2.);
1104 fhXEDecayCharged->SetYTitle("x_{E}");
1105 fhXEDecayCharged->SetXTitle("p_{T decay}");
1108 new TH2F("hZTDecayCharged","z_{trigger h^{#pm}} = p_{T h^{#pm}} / p_{T Decay}",
1109 nptbins,ptmin,ptmax,200,0.,2.);
1110 fhZTDecayCharged->SetYTitle("z_{decay h^{#pm}}");
1111 fhZTDecayCharged->SetXTitle("p_{T decay}");
1113 outputContainer->Add(fhDeltaPhiDecayCharged) ;
1114 outputContainer->Add(fhXEDecayCharged) ;
1115 outputContainer->Add(fhZTDecayCharged) ;
1120 fhDeltaPhiUeLeftCharged = new TH2F
1121 ("hDeltaPhiUeLeftChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs p_{T Ueh^{#pm}} with UE left side range of trigger particles",
1122 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1123 fhDeltaPhiUeLeftCharged->SetYTitle("#Delta #phi");
1124 fhDeltaPhiUeLeftCharged->SetXTitle("p_{T h^{#pm}} (GeV/c)");
1125 outputContainer->Add(fhDeltaPhiUeLeftCharged) ;
1127 fhDeltaPhiUeRightCharged = new TH2F
1128 ("hDeltaPhiUeRightChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs p_{T Ueh^{#pm}} with UE right side range of trigger particles",
1129 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1130 fhDeltaPhiUeRightCharged->SetYTitle("#Delta #phi");
1131 fhDeltaPhiUeRightCharged->SetXTitle("p_{T h^{#pm}} (GeV/c)");
1132 outputContainer->Add(fhDeltaPhiUeRightCharged) ;
1135 new TH2F("hXEUeChargedLeft","x_{E} with UE left side of trigger",
1136 nptbins,ptmin,ptmax,200,0.,2.);
1137 fhXEUeLeftCharged->SetYTitle("x_{E Ueh^{#pm}}");
1138 fhXEUeLeftCharged->SetXTitle("p_{T trigger}");
1139 outputContainer->Add(fhXEUeLeftCharged) ;
1141 fhXEUeRightCharged =
1142 new TH2F("hXEUeChargedRight","x_{E h^{#pm}} with UE right side of trigger",
1143 nptbins,ptmin,ptmax,200,0.,2.);
1144 fhXEUeRightCharged->SetYTitle("z_{trigger Ueh^{#pm}}");
1145 fhXEUeRightCharged->SetXTitle("p_{T trigger}");
1146 outputContainer->Add(fhXEUeRightCharged) ;
1148 fhPtHbpXEUeLeftCharged =
1149 new TH2F("hHbpXEUeChargedLeft","#xi = ln(1/x_{E}) with charged UE left side of trigger",
1150 nptbins,ptmin,ptmax,200,0.,10.);
1151 fhPtHbpXEUeLeftCharged->SetYTitle("ln(1/x_{E})");
1152 fhPtHbpXEUeLeftCharged->SetXTitle("p_{T trigger}");
1153 outputContainer->Add(fhPtHbpXEUeLeftCharged) ;
1155 fhPtHbpXEUeRightCharged =
1156 new TH2F("hHbpXEUeChargedRight","#xi = ln(1/x_{E}) with charged UE right side of trigger",
1157 nptbins,ptmin,ptmax,200,0.,10.);
1158 fhPtHbpXEUeRightCharged->SetYTitle("ln(1/x_{E})");
1159 fhPtHbpXEUeRightCharged->SetXTitle("p_{T trigger}");
1160 outputContainer->Add(fhPtHbpXEUeRightCharged) ;
1163 new TH2F("hZTUeChargedLeft","z_{trigger h^{#pm}} = p_{T Ueh^{#pm}} / p_{T trigger} with UE left side of trigger",
1164 nptbins,ptmin,ptmax,200,0.,2.);
1165 fhZTUeLeftCharged->SetYTitle("z_{trigger Ueh^{#pm}}");
1166 fhZTUeLeftCharged->SetXTitle("p_{T trigger}");
1167 outputContainer->Add(fhZTUeLeftCharged) ;
1169 fhZTUeRightCharged =
1170 new TH2F("hZTUeChargedRight","z_{trigger h^{#pm}} = p_{T Ueh^{#pm}} / p_{T trigger} with UE right side of trigger",
1171 nptbins,ptmin,ptmax,200,0.,2.);
1172 fhZTUeRightCharged->SetYTitle("z_{trigger Ueh^{#pm}}");
1173 fhZTUeRightCharged->SetXTitle("p_{T trigger}");
1174 outputContainer->Add(fhZTUeRightCharged) ;
1176 fhPtHbpZTUeLeftCharged =
1177 new TH2F("hHbpZTUeChargedLeft","#xi = ln(1/z_{T}) with charged UE left side of trigger",
1178 nptbins,ptmin,ptmax,200,0.,10.);
1179 fhPtHbpZTUeLeftCharged->SetYTitle("ln(1/z_{T})");
1180 fhPtHbpZTUeLeftCharged->SetXTitle("p_{T trigger}");
1181 outputContainer->Add(fhPtHbpZTUeLeftCharged) ;
1183 fhPtHbpZTUeRightCharged =
1184 new TH2F("hHbpZTUeChargedRight","#xi = ln(1/z_{T}) with charged UE right side of trigger",
1185 nptbins,ptmin,ptmax,200,0.,10.);
1186 fhPtHbpZTUeRightCharged->SetYTitle("ln(1/z_{T})");
1187 fhPtHbpZTUeRightCharged->SetXTitle("p_{T trigger}");
1188 outputContainer->Add(fhPtHbpZTUeRightCharged) ;
1191 } //Correlation with charged hadrons
1193 //Correlation with neutral hadrons
1196 fhDeltaPhiDeltaEtaNeutral = new TH2F
1197 ("hDeltaPhiDeltaEtaNeutral","#phi_{trigger} - #phi_{h^{0}} vs #eta_{trigger} - #eta_{h^{0}}",
1198 ndeltaphibins ,deltaphimin,deltaphimax, ndeltaetabins ,deltaetamin,deltaetamax);
1199 fhDeltaPhiDeltaEtaNeutral->SetXTitle("#Delta #phi");
1200 fhDeltaPhiDeltaEtaNeutral->SetYTitle("#Delta #eta");
1202 fhPhiNeutral = new TH2F
1203 ("hPhiNeutral","#phi_{#pi^{0}} vs p_{T #pi^{0}}",
1204 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
1205 fhPhiNeutral->SetYTitle("#phi_{#pi^{0}} (rad)");
1206 fhPhiNeutral->SetXTitle("p_{T #pi^{0}} (GeV/c)");
1208 fhEtaNeutral = new TH2F
1209 ("hEtaNeutral","#eta_{#pi^{0}} vs p_{T #pi^{0}}",
1210 nptbins,ptmin,ptmax,netabins,etamin,etamax);
1211 fhEtaNeutral->SetYTitle("#eta_{#pi^{0}} (rad)");
1212 fhEtaNeutral->SetXTitle("p_{T #pi^{0}} (GeV/c)");
1214 fhDeltaPhiNeutral = new TH2F
1215 ("hDeltaPhiNeutral","#phi_{trigger} - #phi_{#pi^{0}} vs p_{T trigger}",
1216 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
1217 fhDeltaPhiNeutral->SetYTitle("#Delta #phi");
1218 fhDeltaPhiNeutral->SetXTitle("p_{T trigger} (GeV/c)");
1220 fhDeltaPhiNeutralPt = new TH2F
1221 ("hDeltaPhiNeutralPt","#phi_{trigger} - #phi_{#pi^{0}} vs p_{T #pi^{0}}}",
1222 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1223 fhDeltaPhiNeutralPt->SetYTitle("#Delta #phi");
1224 fhDeltaPhiNeutralPt->SetXTitle("p_{T h^{0}} (GeV/c)");
1226 fhDeltaPhiUeNeutralPt = new TH2F
1227 ("hDeltaPhiUeNeutralPt","#phi_{trigger} - #phi_{#pi^{0}} vs p_{T #pi^{0}}}",
1228 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1229 fhDeltaPhiUeNeutralPt->SetYTitle("#Delta #phi");
1230 fhDeltaPhiUeNeutralPt->SetXTitle("p_{T h^{0}} (GeV/c)");
1232 fhDeltaEtaNeutral = new TH2F
1233 ("hDeltaEtaNeutral","#eta_{trigger} - #eta_{#pi^{0}} vs p_{T trigger}",
1234 nptbins,ptmin,ptmax, ndeltaetabins ,deltaetamin,deltaetamax);
1235 fhDeltaEtaNeutral->SetYTitle("#Delta #eta");
1236 fhDeltaEtaNeutral->SetXTitle("p_{T trigger} (GeV/c)");
1239 new TH2F("hXENeutral","x_{E} for #pi^{0} associated",
1240 nptbins,ptmin,ptmax,200,0.,2.);
1241 fhXENeutral->SetYTitle("x_{E}");
1242 fhXENeutral->SetXTitle("p_{T trigger}");
1245 new TH2F("hXEUeNeutral","x_{E} for #pi^{0} associated",
1246 nptbins,ptmin,ptmax,200,0.,2.);
1247 fhXEUeNeutral->SetYTitle("x_{E}");
1248 fhXEUeNeutral->SetXTitle("p_{T trigger}");
1251 new TH2F("hHbpXENeutral","#xi = ln(1/x_{E})for #pi^{0} associated",
1252 nptbins,ptmin,ptmax,200,0.,10.);
1253 fhPtHbpXENeutral->SetYTitle("ln(1/x_{E})");
1254 fhPtHbpXENeutral->SetXTitle("p_{T trigger}");
1256 fhPtHbpXEUeNeutral =
1257 new TH2F("hHbpXEUeNeutral","#xi = ln(1/x_{E}) for #pi^{0} associated",
1258 nptbins,ptmin,ptmax,200,0.,10.);
1259 fhPtHbpXEUeNeutral->SetYTitle("ln(1/x_{E})");
1260 fhPtHbpXEUeNeutral->SetXTitle("p_{T trigger}");
1263 new TH2F("hZTNeutral","z_{trigger #pi} = p_{T #pi^{0}} / p_{T trigger} for #pi^{0} associated",
1264 nptbins,ptmin,ptmax,200,0.,2.);
1265 fhZTNeutral->SetYTitle("z_{trigger #pi^{0}}");
1266 fhZTNeutral->SetXTitle("p_{T trigger}");
1269 new TH2F("hZTUeNeutral","z_{trigger #pi} = p_{T #pi^{0}} / p_{T trigger} for #pi^{0} associated",
1270 nptbins,ptmin,ptmax,200,0.,2.);
1271 fhZTUeNeutral->SetYTitle("z_{trigger #pi^{0}}");
1272 fhZTUeNeutral->SetXTitle("p_{T trigger}");
1275 new TH2F("hHbpZTNeutral","#xi = ln(1/x_{E}) for #pi^{0} associated",
1276 nptbins,ptmin,ptmax,200,0.,10.);
1277 fhPtHbpZTNeutral->SetYTitle("ln(1/z_{T})");
1278 fhPtHbpZTNeutral->SetXTitle("p_{T trigger}");
1280 fhPtHbpZTUeNeutral =
1281 new TH2F("hHbpZTUeNeutral","#xi = ln(1/x_{E}) for #pi^{0} associated",
1282 nptbins,ptmin,ptmax,200,0.,10.);
1283 fhPtHbpXEUeNeutral->SetYTitle("ln(1/z_{T})");
1284 fhPtHbpXEUeNeutral->SetXTitle("p_{T trigger}");
1286 outputContainer->Add(fhDeltaPhiDeltaEtaNeutral);
1287 outputContainer->Add(fhPhiNeutral) ;
1288 outputContainer->Add(fhEtaNeutral) ;
1289 outputContainer->Add(fhDeltaPhiNeutral) ;
1290 outputContainer->Add(fhDeltaPhiNeutralPt) ;
1291 outputContainer->Add(fhDeltaPhiUeNeutralPt) ;
1292 outputContainer->Add(fhDeltaEtaNeutral) ;
1293 outputContainer->Add(fhXENeutral) ;
1294 outputContainer->Add(fhXEUeNeutral) ;
1295 outputContainer->Add(fhPtHbpXENeutral) ;
1296 outputContainer->Add(fhPtHbpXEUeNeutral) ;
1297 outputContainer->Add(fhZTNeutral) ;
1298 outputContainer->Add(fhZTUeNeutral) ;
1299 outputContainer->Add(fhPtHbpZTNeutral) ;
1300 outputContainer->Add(fhPtHbpZTUeNeutral) ;
1302 if(fPi0Trigger || fDecayTrigger)
1304 fhDeltaPhiDecayNeutral = new TH2F
1305 ("hDeltaPhiDecayNeutral","#phi_{Decay} - #phi_{h^{0}} vs p_{T Decay}",
1306 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1307 fhDeltaPhiDecayNeutral->SetYTitle("#Delta #phi");
1308 fhDeltaPhiDecayNeutral->SetXTitle("p_{T Decay} (GeV/c)");
1311 new TH2F("hXEDecayNeutral","x_{E} for decay trigger",
1312 nptbins,ptmin,ptmax,200,0.,2.);
1313 fhXEDecayNeutral->SetYTitle("x_{E}");
1314 fhXEDecayNeutral->SetXTitle("p_{T decay}");
1317 new TH2F("hZTDecayNeutral","z_{trigger h^{0}} = p_{T h^{0}} / p_{T Decay}",
1318 nptbins,ptmin,ptmax,200,0.,2.);
1319 fhZTDecayNeutral->SetYTitle("z_{h^{0}}");
1320 fhZTDecayNeutral->SetXTitle("p_{T decay}");
1322 outputContainer->Add(fhDeltaPhiDecayNeutral) ;
1323 outputContainer->Add(fhXEDecayNeutral) ;
1324 outputContainer->Add(fhZTDecayNeutral) ;
1330 fhDeltaPhiUeLeftNeutral = new TH2F
1331 ("hDeltaPhiUeLeftNeutralPt","#phi_{trigger} - #phi_{#Ueh^{0}} vs p_{T h^{0}} with neutral UE left side range of trigger particles",
1332 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1333 fhDeltaPhiUeLeftNeutral->SetYTitle("#Delta #phi");
1334 fhDeltaPhiUeLeftNeutral->SetXTitle("p_{T h^{0}} (GeV/c)");
1335 outputContainer->Add(fhDeltaPhiUeLeftNeutral) ;
1337 fhDeltaPhiUeRightNeutral = new TH2F
1338 ("hDeltaPhiUeRightNeutralPt","#phi_{trigger} - #phi_{#Ueh^{0}} vs p_{T Ueh^{0}} with neutral UE right side range of trigger particles",
1339 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1340 fhDeltaPhiUeRightNeutral->SetYTitle("#Delta #phi");
1341 fhDeltaPhiUeRightNeutral->SetXTitle("p_{T h^{0}} (GeV/c)");
1342 outputContainer->Add(fhDeltaPhiUeRightNeutral) ;
1345 new TH2F("hXEUeNeutralLeft","x_{E} = p_{T Ueh^{0}} / p_{T trigger} with neutral UE left side of trigger",
1346 nptbins,ptmin,ptmax,140,0.,2.);
1347 fhXEUeLeftNeutral->SetYTitle("z_{trigger Ueh^{0}}");
1348 fhXEUeLeftNeutral->SetXTitle("p_{T trigger}");
1349 outputContainer->Add(fhXEUeLeftNeutral) ;
1351 fhXEUeRightNeutral =
1352 new TH2F("hXEUeNeutralRight","x_{E} = p_{T Ueh^{0}} / p_{T trigger} with neutral UE right side of trigger",
1353 nptbins,ptmin,ptmax,200,0.,2.);
1354 fhXEUeRightNeutral->SetYTitle("z_{trigger Ueh^{0}}");
1355 fhXEUeRightNeutral->SetXTitle("p_{T trigger}");
1356 outputContainer->Add(fhXEUeRightNeutral) ;
1358 fhPtHbpXEUeLeftNeutral =
1359 new TH2F("hHbpXEUeNeutralLeft","#xi = ln(1/x_{E}) with neutral UE left side of trigger",
1360 nptbins,ptmin,ptmax,200,0.,10.);
1361 fhPtHbpXEUeLeftNeutral->SetYTitle("ln(1/x_{E})");
1362 fhPtHbpXEUeLeftNeutral->SetXTitle("p_{T trigger}");
1363 outputContainer->Add(fhPtHbpXEUeLeftNeutral) ;
1365 fhPtHbpXEUeRightNeutral =
1366 new TH2F("hHbpXEUeNeutralRight","#xi = ln(1/x_{E}) with neutral UE right side of trigger",
1367 nptbins,ptmin,ptmax,200,0.,10.);
1368 fhPtHbpXEUeRightNeutral->SetYTitle("ln(1/x_{E})");
1369 fhPtHbpXEUeRightNeutral->SetXTitle("p_{T trigger}");
1370 outputContainer->Add(fhPtHbpXEUeRightNeutral) ;
1373 new TH2F("hZTUeNeutralLeft","z_{trigger h^{0}} = p_{T Ueh^{0}} / p_{T trigger} with neutral UE left side of trigger",
1374 nptbins,ptmin,ptmax,140,0.,2.);
1375 fhZTUeLeftNeutral->SetYTitle("z_{trigger Ueh^{0}}");
1376 fhZTUeLeftNeutral->SetXTitle("p_{T trigger}");
1377 outputContainer->Add(fhZTUeLeftNeutral) ;
1379 fhZTUeRightNeutral =
1380 new TH2F("hZTUeNeutralRight","z_{trigger h^{0}} = p_{T Ueh^{0}} / p_{T trigger} with neutral UE right side of trigger",
1381 nptbins,ptmin,ptmax,200,0.,2.);
1382 fhZTUeRightNeutral->SetYTitle("z_{trigger Ueh^{0}}");
1383 fhZTUeRightNeutral->SetXTitle("p_{T trigger}");
1384 outputContainer->Add(fhZTUeRightNeutral) ;
1386 fhPtHbpZTUeLeftNeutral =
1387 new TH2F("hHbpZTUeNeutralLeft","#xi = ln(1/z_{T}) with neutral UE left side of trigger",
1388 nptbins,ptmin,ptmax,200,0.,10.);
1389 fhPtHbpZTUeLeftNeutral->SetYTitle("ln(1/z_{T})");
1390 fhPtHbpZTUeLeftNeutral->SetXTitle("p_{T trigger}");
1391 outputContainer->Add(fhPtHbpZTUeLeftNeutral) ;
1393 fhPtHbpZTUeRightNeutral =
1394 new TH2F("hHbpZTUeNeutralRight","#xi = ln(1/z_{T}) with neutral UE right side of trigger",
1395 nptbins,ptmin,ptmax,200,0.,10.);
1396 fhPtHbpZTUeRightNeutral->SetYTitle("ln(1/z_{T})");
1397 fhPtHbpZTUeRightNeutral->SetXTitle("p_{T trigger}");
1398 outputContainer->Add(fhPtHbpZTUeRightNeutral) ;
1402 }//Correlation with neutral hadrons
1404 //if data is MC, fill more histograms
1407 fh2phiLeadingParticle=new TH2F("h2phiLeadingParticle","#phi resolustion for trigger particles",nptbins,ptmin,ptmax,100,-1,1);
1408 fh2phiLeadingParticle->GetXaxis()->SetTitle("p_{T gen Leading} (GeV/c)");
1409 fh2phiLeadingParticle->GetYaxis()->SetTitle("(#phi_{rec}-#phi_{gen})/#phi_{gen}");
1411 fhMCPtLeading = new TH1F ("hMCPtLeading","MC : p_T distribution of leading particles", nptbins,ptmin,ptmax);
1412 fhMCPtLeading->SetXTitle("p_{T}^{trig} (GeV/c)");
1414 fhMCEtaCharged = new TH2F
1415 ("hMCEtaCharged","MC #eta_{h^{#pm}} vs p_{T #pm}",
1416 nptbins,ptmin,ptmax,netabins,etamin,etamax);
1417 fhMCEtaCharged->SetYTitle("#eta_{h^{#pm}} (rad)");
1418 fhMCEtaCharged->SetXTitle("p_{T #pm} (GeV/c)");
1420 fhMCPhiCharged = new TH2F
1421 ("hMCPhiCharged","#MC phi_{h^{#pm}} vs p_{T #pm}",
1422 200,ptmin,ptmax,nphibins,phimin,phimax);
1423 fhMCPhiCharged->SetYTitle("MC #phi_{h^{#pm}} (rad)");
1424 fhMCPhiCharged->SetXTitle("p_{T #pm} (GeV/c)");
1426 fhMCDeltaPhiDeltaEtaCharged = new TH2F
1427 ("hMCDeltaPhiDeltaEtaCharged","#MC phi_{trigger} - #phi_{h^{#pm}} vs #eta_{trigger} - #eta_{h^{#pm}}",
1428 140,-2.,5.,200,-2,2);
1429 fhMCDeltaPhiDeltaEtaCharged->SetXTitle("#Delta #phi");
1430 fhMCDeltaPhiDeltaEtaCharged->SetYTitle("#Delta #eta");
1432 fhMCDeltaEtaCharged = new TH2F
1433 ("hMCDeltaEtaCharged","MC #eta_{trigger} - #eta_{h^{#pm}} vs p_{T trigger} and p_{T assoc}",
1434 nptbins,ptmin,ptmax,200,-2,2);
1435 fhMCDeltaEtaCharged->SetYTitle("#Delta #eta");
1436 fhMCDeltaEtaCharged->SetXTitle("p_{T trigger} (GeV/c)");
1438 fhMCDeltaPhiCharged = new TH2F
1439 ("hMCDeltaPhiCharged","#phi_{trigger} - #phi_{h^{#pm}} vs p_{T trigger}",
1440 nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax);
1441 fhMCDeltaPhiCharged->SetYTitle("#Delta #phi");
1442 fhMCDeltaPhiCharged->SetXTitle("p_{T trigger} (GeV/c)");
1444 fhMCDeltaPhiChargedPt = new TH2F
1445 ("hMCDeltaPhiChargedPt","MC #phi_{trigger} - #phi_{#h^{#pm}} vs p_{T h^{#pm}}",
1446 nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax);
1447 fhMCDeltaPhiChargedPt->SetYTitle("#Delta #phi");
1448 fhMCDeltaPhiChargedPt->SetXTitle("p_{T h^{#pm}} (GeV/c)");
1451 new TH2F("hMCPtXECharged","x_{E}",
1452 nptbins,ptmin,ptmax,200,0.,2.);
1453 fhMCPtXECharged->SetYTitle("x_{E}");
1454 fhMCPtXECharged->SetXTitle("p_{T trigger}");
1457 new TH2F("hMCPtXEUeCharged","x_{E}",
1458 nptbins,ptmin,ptmax,200,0.,2.);
1459 fhMCPtXEUeCharged->SetYTitle("x_{E}");
1460 fhMCPtXEUeCharged->SetXTitle("p_{T trigger}");
1462 fhMCPtHbpXECharged =
1463 new TH2F("hMCHbpXECharged","MC #xi = ln(1/x_{E}) with charged hadrons",
1464 nptbins,ptmin,ptmax,200,0.,10.);
1465 fhMCPtHbpXECharged->SetYTitle("ln(1/x_{E})");
1466 fhMCPtHbpXECharged->SetXTitle("p_{T trigger}");
1468 fhMCPtHbpXEUeCharged =
1469 new TH2F("hMCPtHbpXEUeCharged","#xi = ln(1/x_{E}) with charged hadrons,Underlying Event",
1470 nptbins,ptmin,ptmax,200,0.,10.);
1471 fhMCPtHbpXEUeCharged->SetYTitle("ln(1/x_{E})");
1472 fhMCPtHbpXEUeCharged->SetXTitle("p_{T trigger}");
1475 new TH1F("hMCUePart","MC UE particles distribution vs pt trig",
1476 nptbins,ptmin,ptmax);
1477 fhMCUePart->SetYTitle("dNch");
1478 fhMCUePart->SetXTitle("p_{T trigger}");
1481 new TH2F("hMCPtZTCharged","z_{T}",
1482 nptbins,ptmin,ptmax,200,0.,2.);
1483 fhMCPtZTCharged->SetYTitle("z_{T}");
1484 fhMCPtZTCharged->SetXTitle("p_{T trigger}");
1486 fhMCPtHbpZTCharged =
1487 new TH2F("hMCHbpZTCharged","MC #xi = ln(1/z_{T}) with charged hadrons",
1488 nptbins,ptmin,ptmax,200,0.,10.);
1489 fhMCPtHbpZTCharged->SetYTitle("ln(1/z_{T})");
1490 fhMCPtHbpZTCharged->SetXTitle("p_{T trigger}");
1493 new TH2F("hMCPtTrigPout","AOD MC Pout with triggers",
1494 nptbins,ptmin,ptmax,2*nptbins,-ptmax,ptmax);
1495 fhMCPtTrigPout->SetYTitle("p_{out} (GeV/c)");
1496 fhMCPtTrigPout->SetXTitle("p_{T trigger} (GeV/c)");
1498 fhMCPtAssocDeltaPhi =
1499 new TH2F("hMCPtAssocDeltaPhi","AOD MC delta phi with associated charged hadrons",
1500 nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax);
1501 fhMCPtAssocDeltaPhi->SetYTitle("#Delta #phi");
1502 fhMCPtAssocDeltaPhi->SetXTitle("p_{T trigger} (GeV/c)");
1504 outputContainer->Add(fh2phiLeadingParticle);
1505 outputContainer->Add(fhMCPtLeading);
1506 outputContainer->Add(fhMCDeltaPhiDeltaEtaCharged);
1507 outputContainer->Add(fhMCPhiCharged) ;
1508 outputContainer->Add(fhMCEtaCharged) ;
1509 outputContainer->Add(fhMCDeltaEtaCharged) ;
1510 outputContainer->Add(fhMCDeltaPhiCharged) ;
1512 outputContainer->Add(fhMCDeltaPhiChargedPt) ;
1513 outputContainer->Add(fhMCPtXECharged) ;
1514 outputContainer->Add(fhMCPtXEUeCharged) ;
1515 outputContainer->Add(fhMCPtZTCharged) ;
1516 outputContainer->Add(fhMCPtHbpXECharged) ;
1517 outputContainer->Add(fhMCPtHbpXEUeCharged);
1518 outputContainer->Add(fhMCUePart);
1519 outputContainer->Add(fhMCPtHbpZTCharged) ;
1520 outputContainer->Add(fhMCPtTrigPout) ;
1521 outputContainer->Add(fhMCPtAssocDeltaPhi) ;
1522 } //for MC histogram
1526 //create event containers
1528 if(!fUseMixStoredInReader || (fUseMixStoredInReader && !GetReader()->ListWithMixedEventsForTracksExists()))
1530 fListMixEvents= new TList*[GetNCentrBin()*GetNZvertBin()*GetNRPBin()] ;
1532 for(Int_t ic=0; ic<GetNCentrBin(); ic++)
1534 for(Int_t iz=0; iz<GetNZvertBin(); iz++)
1536 for(Int_t irp=0; irp<GetNRPBin(); irp++)
1538 //printf("GetCreateOutputObjects - Bins : cent %d, vz %d, RP %d, event %d/%d\n",
1539 // ic,iz, irp, ic*GetNZvertBin()*GetNRPBin()+iz*GetNRPBin()+irp,GetNZvertBin()*GetNRPBin()*GetNCentrBin());
1540 fListMixEvents[ic*GetNZvertBin()*GetNRPBin()+iz*GetNRPBin()+irp] = new TList() ;
1541 fListMixEvents[ic*GetNZvertBin()*GetNRPBin()+iz*GetNRPBin()+irp]->SetOwner(kFALSE);
1547 //Init the list in the reader if not done previously
1548 if(!GetReader()->ListWithMixedEventsForTracksExists() && fUseMixStoredInReader)
1550 //printf("%s : Set the list of events \n",GetInputAODName().Data());
1551 GetReader()->SetListWithMixedEventsForTracks(fListMixEvents);
1554 fhEventBin=new TH1I("hEventBin","Number of real events per bin(cen,vz,rp)",
1555 GetNCentrBin()*GetNZvertBin()*GetNRPBin()+1,0,
1556 GetNCentrBin()*GetNZvertBin()*GetNRPBin()+1) ;
1557 fhEventBin->SetXTitle("bin");
1558 outputContainer->Add(fhEventBin) ;
1560 fhEventMixBin=new TH1I("hEventMixBin","Number of events per bin(cen,vz,rp)",
1561 GetNCentrBin()*GetNZvertBin()*GetNRPBin()+1,0,
1562 GetNCentrBin()*GetNZvertBin()*GetNRPBin()+1) ;
1563 fhEventMixBin->SetXTitle("bin");
1564 outputContainer->Add(fhEventMixBin) ;
1566 fhNtracksAll=new TH1F("hNtracksAll","Number of tracks w/o event trigger",2000,0,2000);
1567 outputContainer->Add(fhNtracksAll);
1569 fhNtracksTrigger=new TH1F("hNtracksTriggerEvent","Number of tracks w/ event trigger",2000,0,2000);
1570 outputContainer->Add(fhNtracksTrigger);
1572 fhNtracksMB=new TH1F("hNtracksMBEvent","Number of tracks w/ event trigger kMB",2000,0,2000);
1573 outputContainer->Add(fhNtracksMB);
1575 fhMixDeltaPhiCharged = new TH2F
1576 ("hMixDeltaPhiCharged","Mixed event : #phi_{trigger} - #phi_{h^{#pm}} vs p_{T trigger}",
1577 nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax);
1578 fhMixDeltaPhiCharged->SetYTitle("#Delta #phi");
1579 fhMixDeltaPhiCharged->SetXTitle("p_{T trigger} (GeV/c)");
1580 outputContainer->Add(fhMixDeltaPhiCharged);
1582 fhMixDeltaPhiDeltaEtaCharged = new TH2F
1583 ("hMixDeltaPhiDeltaEtaCharged","Mixed event : #phi_{trigger} - #phi_{h^{#pm}} vs #eta_{trigger} - #eta_{h^{#pm}}",
1584 ndeltaphibins ,deltaphimin,deltaphimax,ndeltaetabins ,deltaetamin,deltaetamax);
1585 fhMixDeltaPhiDeltaEtaCharged->SetXTitle("#Delta #phi");
1586 fhMixDeltaPhiDeltaEtaCharged->SetYTitle("#Delta #eta");
1587 outputContainer->Add(fhMixDeltaPhiDeltaEtaCharged);
1589 fhMixDeltaPhiChargedAssocPtBin = new TH2F*[fNAssocPtBins] ;
1590 fhMixDeltaPhiChargedAssocPtBinDEta08 = new TH2F*[fNAssocPtBins] ;
1591 fhMixDeltaPhiDeltaEtaChargedAssocPtBin = new TH2F*[fNAssocPtBins] ;
1593 for(Int_t i = 0 ; i < fNAssocPtBins ; i++)
1595 fhMixDeltaPhiChargedAssocPtBin[i] = new TH2F(Form("hMixDeltaPhiChargedAssocPtBin%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1596 Form("Mixed event #Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1597 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1598 fhMixDeltaPhiChargedAssocPtBin[i]->SetXTitle("p_{T trigger}");
1599 fhMixDeltaPhiChargedAssocPtBin[i]->SetYTitle("#Delta #phi");
1601 fhMixDeltaPhiChargedAssocPtBinDEta08[i] = new TH2F(Form("hMixDeltaPhiDeltaEta0.8ChargedAssocPtBinDEta08%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1602 Form("Mixed event #Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f] for #Delta #eta > 0.8", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1603 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1604 fhMixDeltaPhiChargedAssocPtBinDEta08[i]->SetXTitle("p_{T trigger}");
1605 fhMixDeltaPhiChargedAssocPtBinDEta08[i]->SetYTitle("#Delta #phi");
1607 fhMixDeltaPhiDeltaEtaChargedAssocPtBin[i] = new TH2F(Form("hMixDeltaPhiDeltaEtaChargedAssocPtBin%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1608 Form("Mixed event #Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1609 ndeltaphibins ,deltaphimin,deltaphimax,ndeltaetabins ,deltaetamin,deltaetamax);
1610 fhMixDeltaPhiDeltaEtaChargedAssocPtBin[i]->SetXTitle("#Delta #phi");
1611 fhMixDeltaPhiDeltaEtaChargedAssocPtBin[i]->SetYTitle("#Delta #eta");
1613 outputContainer->Add(fhMixDeltaPhiChargedAssocPtBin[i]);
1614 outputContainer->Add(fhMixDeltaPhiChargedAssocPtBinDEta08[i]);
1615 outputContainer->Add(fhMixDeltaPhiDeltaEtaChargedAssocPtBin[i]);
1620 return outputContainer;
1624 //_________________________________________________________________________________________________
1625 Bool_t AliAnaParticleHadronCorrelation::GetDecayPhotonMomentum(const AliAODPWG4Particle* trigger,
1626 TLorentzVector & mom1,
1627 TLorentzVector & mom2)
1629 // Get the momentum of the pi0/eta assigned decay photons
1630 // In case of pi0/eta trigger, we may want to check their decay correlation,
1631 // get their decay children
1633 Int_t indexPhoton1 = trigger->GetCaloLabel(0);
1634 Int_t indexPhoton2 = trigger->GetCaloLabel(1);
1635 Float_t ptTrig = trigger->Pt();
1637 if(indexPhoton1!=-1 || indexPhoton2!=-1) return kFALSE;
1640 printf("AliAnaParticleHadronCorrelation::GetDecayPhotonMomentum() - indexPhoton1 = %d, indexPhoton2 = %d \n", indexPhoton1, indexPhoton2);
1642 TObjArray * clusters = 0x0 ;
1643 if(trigger->GetDetector()=="EMCAL") clusters = GetEMCALClusters() ;
1644 else clusters = GetPHOSClusters() ;
1646 for(Int_t iclus = 0; iclus < clusters->GetEntriesFast(); iclus++)
1648 AliVCluster * photon = (AliVCluster*) (clusters->At(iclus));
1649 if(photon->GetID()==indexPhoton1)
1651 photon->GetMomentum(mom1,GetVertex(0)) ;
1652 if(ptTrig) fhPtPi0DecayRatio->Fill(ptTrig, mom1.Pt()/ptTrig);
1654 if(photon->GetID()==indexPhoton2)
1656 photon->GetMomentum(mom1,GetVertex(0)) ;
1657 if(ptTrig > 0) fhPtPi0DecayRatio->Fill(ptTrig, mom2.Pt()/ptTrig);
1660 if(GetDebug() > 1)printf("AliAnaParticleHadronCorrelation::GetDecayPhotonMomentum() - Photon1 = %f, Photon2 = %f \n", mom1.Pt(), mom2.Pt());
1668 //____________________________________________________
1669 void AliAnaParticleHadronCorrelation::InitParameters()
1672 //Initialize the parameters of the analysis.
1673 SetInputAODName("Particle");
1674 SetAODObjArrayName("Hadrons");
1675 AddToHistogramsName("AnaHadronCorr_");
1677 SetPtCutRange(0.,300);
1678 fDeltaPhiMinCut = 1.5 ;
1679 fDeltaPhiMaxCut = 4.5 ;
1680 fSelectIsolated = kFALSE;
1681 fMakeSeveralUE = kFALSE;
1682 fUeDeltaPhiMinCut = 1. ;
1683 fUeDeltaPhiMaxCut = 1.5 ;
1685 fNeutralCorr = kFALSE ;
1686 fPi0Trigger = kFALSE ;
1687 fDecayTrigger = kFALSE ;
1688 fHMPIDCorrelation = kFALSE ;
1690 fMakeAbsoluteLeading = kTRUE;
1691 fMakeNearSideLeading = kFALSE;
1694 fAssocPtBinLimit[0] = 0.2 ;
1695 fAssocPtBinLimit[1] = 2.0 ;
1696 fAssocPtBinLimit[2] = 4.0 ;
1697 fAssocPtBinLimit[3] = 6.0 ;
1698 fAssocPtBinLimit[4] = 8.0 ;
1699 fAssocPtBinLimit[5] = 10. ;
1700 fAssocPtBinLimit[6] = 12. ;
1701 fAssocPtBinLimit[7] = 15. ;
1702 fAssocPtBinLimit[8] = 25. ;
1703 fAssocPtBinLimit[9] = 50. ;
1705 fUseMixStoredInReader = kTRUE;
1712 //__________________________________________________________
1713 void AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD()
1715 //Particle-Hadron Correlation Analysis, fill AODs
1717 if(!GetInputAODBranch())
1719 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - No input particles in AOD with name branch < %s >, STOP \n",GetInputAODName().Data());
1723 if(strcmp(GetInputAODBranch()->GetClass()->GetName(), "AliAODPWG4ParticleCorrelation"))
1725 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());
1731 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - Begin hadron correlation analysis, fill AODs \n");
1732 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - In particle branch aod entries %d\n", GetInputAODBranch()->GetEntriesFast());
1733 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - In CTS aod entries %d\n", GetCTSTracks() ->GetEntriesFast());
1734 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - In EMCAL aod entries %d\n", GetEMCALClusters()->GetEntriesFast());
1735 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - In PHOS aod entries %d\n", GetPHOSClusters() ->GetEntriesFast());
1738 //Get the vertex and check it is not too large in z
1739 Double_t v[3] = {0,0,0}; //vertex ;
1740 GetReader()->GetVertex(v);
1741 if(!GetMixedEvent() && TMath::Abs(v[2]) > GetZvertexCut()) return ;
1743 // Fill the pool with tracks if requested
1744 if(DoOwnMix()) FillChargedEventMixPool();
1746 //Loop on stored AOD particles, find leading trigger
1747 Double_t ptTrig = fMinTriggerPt ;
1748 fLeadingTriggerIndex = -1 ;
1749 Int_t naod = GetInputAODBranch()->GetEntriesFast() ;
1750 for(Int_t iaod = 0; iaod < naod ; iaod++)
1752 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1754 // Vertex cut in case of mixing
1755 Int_t check = CheckMixedEventVertex(particle->GetCaloLabel(0), particle->GetTrackLabel(0));
1756 if(check == 0) continue;
1757 if(check == -1) return;
1759 // find the leading particles with highest momentum
1760 if (particle->Pt() > ptTrig)
1762 ptTrig = particle->Pt() ;
1763 fLeadingTriggerIndex = iaod ;
1765 }// finish search of leading trigger particle
1768 //Do correlation with leading particle
1769 if(fLeadingTriggerIndex >= 0)
1772 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(fLeadingTriggerIndex));
1774 //check if the particle is isolated or if we want to take the isolation into account
1775 if(OnlyIsolated() && !particle->IsIsolated()) return;
1777 //Make correlation with charged hadrons
1778 Bool_t okcharged = kTRUE;
1779 Bool_t okneutral = kTRUE;
1780 if(GetReader()->IsCTSSwitchedOn() )
1781 okcharged = MakeChargedCorrelation(particle, GetCTSTracks(),kFALSE);
1783 TObjArray * pi0list = (TObjArray*) GetAODBranch(fPi0AODBranchName); //For the future, foresee more possible pi0 lists
1784 if(fNeutralCorr && pi0list && pi0list->GetEntriesFast() > 0)
1785 okneutral = MakeNeutralCorrelation(particle, pi0list,kFALSE);
1787 }//Correlate leading
1789 if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - End fill AODs \n");
1793 //_________________________________________________________________
1794 void AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms()
1796 //Particle-Hadron Correlation Analysis, fill histograms
1798 if(!GetInputAODBranch())
1800 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - No input particles in AOD with name branch < %s >, STOP \n",GetInputAODName().Data());
1806 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - Begin hadron correlation analysis, fill histograms \n");
1807 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - In particle branch aod entries %d\n", GetInputAODBranch()->GetEntriesFast());
1810 //Get the vertex and check it is not too large in z
1811 Double_t v[3] = {0,0,0}; //vertex ;
1812 GetReader()->GetVertex(v);
1813 if(!GetMixedEvent() && TMath::Abs(v[2]) > GetZvertexCut()) return ;
1815 //Loop on stored AOD particles, find leading
1816 Double_t ptTrig = fMinTriggerPt;
1817 if(fLeadingTriggerIndex < 0)
1819 //Search leading if not done before
1820 Int_t naod = GetInputAODBranch()->GetEntriesFast() ;
1821 for(Int_t iaod = 0; iaod < naod ; iaod++)
1822 { //loop on input trigger AOD file
1823 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1825 // Vertex cut in case of mixing
1826 Int_t check = CheckMixedEventVertex(particle->GetCaloLabel(0), particle->GetTrackLabel(0));
1827 if(check == 0) continue;
1828 if(check == -1) return;
1830 //check if the particle is isolated or if we want to take the isolation into account
1831 if(OnlyIsolated() && !particle->IsIsolated()) continue;
1833 //find the leading particles with highest momentum
1834 if (particle->Pt() > ptTrig)
1836 ptTrig = particle->Pt() ;
1837 fLeadingTriggerIndex = iaod ;
1840 }// Finish search of leading trigger particle
1841 }// Search leading if not done before
1843 if(fLeadingTriggerIndex >= 0 )
1844 { //using trigger particle to do correlations
1846 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(fLeadingTriggerIndex));
1848 // check if it was a calorimeter cluster and if the SS cut was requested, if so, apply it
1849 Int_t clID1 = particle->GetCaloLabel(0) ;
1850 Int_t clID2 = particle->GetCaloLabel(1) ; // for photon clusters should not be set.
1851 //printf("Leading for for %s: id1 %d, id2 %d, min %f, max %f, det %s\n",
1852 // GetInputAODName().Data(),clID1,clID2,fM02MinCut,fM02MaxCut,(particle->GetDetector()).Data());
1854 if(clID1 > 0 && clID2 < 0 && fM02MaxCut > 0 && fM02MinCut > 0)
1857 TObjArray* clusters = 0x0;
1858 if (particle->GetDetector() == "EMCAL") clusters = GetEMCALClusters();
1859 else if(particle->GetDetector() == "PHOS" ) clusters = GetPHOSClusters();
1863 AliVCluster *cluster = FindCluster(clusters,clID1,iclus);
1864 Float_t m02 = cluster->GetM02();
1865 //printf("\t Check m02 = %2.2f\n",m02);
1866 if(m02 > fM02MaxCut || m02 < fM02MinCut)
1868 //printf("\t \t Not accepted\n");
1874 // Check if trigger is in fiducial region
1875 if(IsFiducialCutOn())
1877 Bool_t in = GetFiducialCut()->IsInFiducialCut(*particle->Momentum(),particle->GetDetector()) ;
1881 // Check if the particle is isolated or if we want to take the isolation into account
1882 if(OnlyIsolated() && !particle->IsIsolated()) return;
1884 // Make correlation with charged hadrons
1885 Bool_t okcharged = kTRUE;
1886 Bool_t okneutral = kTRUE;
1887 if(GetReader()->IsCTSSwitchedOn() )
1889 okcharged = MakeChargedCorrelation(particle, GetCTSTracks(),kTRUE);
1892 MakeMCChargedCorrelation(particle);
1896 TObjArray * pi0list = (TObjArray*) GetAODBranch(fPi0AODBranchName); //For the future, foresee more possible pi0 lists
1897 if(fNeutralCorr && pi0list)
1899 if(pi0list->GetEntriesFast() > 0)
1900 okneutral = MakeNeutralCorrelation(particle, pi0list,kTRUE);
1903 // Fill leading particle histogram if correlation went well and
1904 // no problem was found, like not absolute leading, or bad vertex in mixing.
1905 if(okcharged && okneutral)
1907 Float_t pt = particle->Pt();
1908 fhPtLeading->Fill(pt);
1910 Float_t phi = particle->Phi();
1911 if(phi<0)phi+=TMath::TwoPi();
1912 fhPhiLeading->Fill(pt, phi);
1914 fhEtaLeading->Fill(pt, particle->Eta());
1915 //printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - Leading particle : pt %f, eta %f, phi %f\n",particle->Pt(),particle->Eta(),phi);
1917 Float_t cen = GetEventCentrality();
1918 Float_t ep = GetEventPlaneAngle();
1920 fhPtLeadingCentrality ->Fill(pt,cen);
1921 fhPtLeadingEventPlane ->Fill(pt,ep);
1922 fhLeadingEventPlaneCentrality->Fill(cen,ep);
1924 }//ok charged && neutral
1927 //Reinit for next event
1928 fLeadingTriggerIndex = -1;
1930 if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - End fill histograms \n");
1933 //___________________________________________________________________________________________________________
1934 Bool_t AliAnaParticleHadronCorrelation::MakeChargedCorrelation(AliAODPWG4ParticleCorrelation *aodParticle,
1935 const TObjArray* pl, const Bool_t bFillHisto)
1937 // Charged Hadron Correlation Analysis
1939 printf("AliAnaParticleHadronCorrelation::MakeChargedCorrelation() - Make trigger particle - charged hadron correlation \n");
1941 Float_t phiTrig = aodParticle->Phi();
1942 Float_t etaTrig = aodParticle->Eta();
1943 Float_t ptTrig = aodParticle->Pt();
1944 Bool_t decay = aodParticle->IsTagged();
1946 Float_t pt = -100. ;
1947 Float_t zT = -100. ;
1948 Float_t xE = -100. ;
1949 Float_t hbpXE = -100. ;
1950 Float_t hbpZT = -100. ;
1951 Float_t phi = -100. ;
1952 Float_t eta = -100. ;
1953 Float_t pout = -100. ;
1954 Float_t deltaPhi = -100. ;
1957 TLorentzVector photonMom ;
1958 TObjArray * reftracks = 0x0;
1960 Int_t nTracks = GetCTSTracks()->GetEntriesFast() ;
1962 // Mixed event settings
1963 Int_t evtIndex11 = -1 ; // cluster trigger or pi0 trigger
1964 Int_t evtIndex12 = -1 ; // pi0 trigger
1965 Int_t evtIndex13 = -1 ; // charged trigger
1967 Double_t v[3] = {0,0,0}; //vertex ;
1968 GetReader()->GetVertex(v);
1970 if (GetMixedEvent())
1972 evtIndex11 = GetMixedEvent()->EventIndexForCaloCluster(aodParticle->GetCaloLabel(0)) ;
1973 evtIndex12 = GetMixedEvent()->EventIndexForCaloCluster(aodParticle->GetCaloLabel(1)) ;
1974 evtIndex13 = GetMixedEvent()->EventIndex(aodParticle->GetTrackLabel(0)) ;
1977 // In case of pi0/eta trigger, we may want to check their decay correlation,
1978 // get their decay children
1979 TLorentzVector decayMom1;
1980 TLorentzVector decayMom2;
1981 Bool_t decayFound = kFALSE;
1982 if(fPi0Trigger && bFillHisto) decayFound = GetDecayPhotonMomentum(aodParticle,decayMom1, decayMom2);
1984 //-----------------------------------------------------------------------
1985 //Track loop, select tracks with good pt, phi and fill AODs or histograms
1986 //-----------------------------------------------------------------------
1988 for(Int_t ipr = 0;ipr < pl->GetEntriesFast() ; ipr ++ )
1990 AliVTrack * track = (AliVTrack *) (pl->At(ipr)) ;
1992 Double_t mom[3] = {track->Px(),track->Py(),track->Pz()};
1993 p3.SetXYZ(mom[0],mom[1],mom[2]);
1997 if(phi < 0) phi+=TMath::TwoPi();
1999 //Select only hadrons in pt range
2000 if(pt < fMinAssocPt || pt > fMaxAssocPt) continue ;
2002 //remove trigger itself for correlation when use charged triggers
2003 if( track->GetID() == aodParticle->GetTrackLabel(0) || track->GetID() == aodParticle->GetTrackLabel(1) ||
2004 track->GetID() == aodParticle->GetTrackLabel(2) || track->GetID() == aodParticle->GetTrackLabel(3) )
2007 //jump out this event if near side associated particle pt larger than trigger
2008 if (fMakeNearSideLeading)
2010 if(pt > ptTrig && TMath::Abs(phi-phiTrig) < TMath::PiOver2()) return kFALSE;
2012 //jump out this event if there is any other particle with pt larger than trigger
2013 else if(fMakeAbsoluteLeading)
2015 if(pt > ptTrig) return kFALSE;
2018 //Only for mixed event
2019 Int_t evtIndex2 = 0 ;
2020 if (GetMixedEvent())
2022 evtIndex2 = GetMixedEvent()->EventIndex(track->GetID()) ;
2023 if (evtIndex11 == evtIndex2 || evtIndex12 == evtIndex2 || evtIndex13 == evtIndex2 ) // photon and track from different events
2026 if (TMath::Abs(GetVertex(evtIndex2)[2]) > GetZvertexCut())
2035 printf("AliAnaParticleHadronCorrelation::MakeChargedCorrelation() - Selected charge for momentum imbalance: pt %2.2f, phi %2.2f, eta %2.2f \n",pt,phi,eta);
2037 // Set the pt associated bin for the defined bins
2038 Int_t assocBin = -1;
2039 for(Int_t i = 0 ; i < fNAssocPtBins ; i++)
2041 if(pt > fAssocPtBinLimit[i] && pt < fAssocPtBinLimit[i+1]) assocBin= i;
2045 // calculate deltaPhi for later, shift when needed
2046 FillChargedAngularCorrelationHistograms(pt, ptTrig, assocBin, phi, phiTrig, deltaPhi,
2047 eta, etaTrig, decay, track->GetHMPIDsignal(),nTracks);
2049 // Imbalance zT/xE/pOut
2051 if(zT > 0 ) hbpZT = TMath::Log(1./zT);
2054 xE =-pt/ptTrig*TMath::Cos(deltaPhi); // -(px*pxTrig+py*pyTrig)/(ptTrig*ptTrig);
2055 //if(xE <0.)xE =-xE;
2056 if(xE > 0 ) hbpXE = TMath::Log(1./xE);
2059 pout = pt*TMath::Sin(deltaPhi) ;
2061 //delta phi cut for momentum imbalance correlation
2062 if ( (deltaPhi > fDeltaPhiMinCut) && (deltaPhi < fDeltaPhiMaxCut) )
2065 FillChargedMomentumImbalanceHistograms(ptTrig, pt, xE, hbpXE, zT, hbpZT, pout, deltaPhi,
2066 nTracks, track->Charge(), assocBin, decay);
2069 if ( (deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < fUeDeltaPhiMaxCut) )
2072 FillChargedUnderlyingEventHistograms(ptTrig, pt, deltaPhi, nTracks);
2074 fhUePart->Fill(ptTrig);
2078 if(fPi0Trigger && decayFound)
2079 FillDecayPhotonCorrelationHistograms(pt, phi, decayMom1,decayMom2, kTRUE) ;
2081 //several UE calculation
2082 if(fMakeSeveralUE) FillChargedUnderlyingEventSidesHistograms(ptTrig,pt,xE,hbpXE,zT,hbpZT,deltaPhi);
2090 reftracks = new TObjArray(0);
2091 TString trackname = Form("%s+Tracks", GetAODObjArrayName().Data());
2092 reftracks->SetName(trackname.Data());
2093 reftracks->SetOwner(kFALSE);
2096 reftracks->Add(track);
2098 }//aod particle loop
2101 //Fill AOD with reference tracks, if not filling histograms
2102 if(!bFillHisto && reftracks)
2104 aodParticle->AddObjArray(reftracks);
2107 //Own mixed event, add event and remove previous or fill the mixed histograms
2108 if(DoOwnMix() && bFillHisto)
2110 MakeChargedMixCorrelation(aodParticle);
2118 //______________________________________________________________________________________________________________________
2119 void AliAnaParticleHadronCorrelation::MakeChargedMixCorrelation(AliAODPWG4ParticleCorrelation *aodParticle)
2121 // Mix current trigger with tracks in another MB event
2123 if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation() - Make trigger particle - charged hadron mixed event correlation \n");
2125 if(GetMixedEvent()) return; // This is not the mixed event from general mixing frame
2127 // Get the event with similar caracteristics
2128 //printf("MakeChargedMixCorrelation for %s\n",GetInputAODName().Data());
2130 AliAnalysisManager * manager = AliAnalysisManager::GetAnalysisManager();
2132 AliInputEventHandler * inputHandler = dynamic_cast<AliInputEventHandler*>(manager->GetInputEventHandler());
2134 if(!inputHandler) return;
2136 if(!(inputHandler->IsEventSelected( ) & GetReader()->GetEventTriggerMask())) return;
2138 // Get the pool, check if it exits
2139 Int_t eventBin = GetEventMixBin();
2141 fhEventBin->Fill(eventBin);
2143 //Check that the bin exists, if not (bad determination of RP, centrality or vz bin) do nothing
2144 if(eventBin < 0) return;
2147 if(fUseMixStoredInReader) pool = GetReader()->GetListWithMixedEventsForTracks(eventBin);
2148 else pool = fListMixEvents[eventBin];
2152 Double_t ptTrig = aodParticle->Pt();
2153 Double_t etaTrig = aodParticle->Eta();
2154 Double_t phiTrig = aodParticle->Phi();
2155 if(phiTrig < 0.) phiTrig+=TMath::TwoPi();
2158 printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation() - Pool bin %d size %d, leading trigger pt=%f, phi=%f, eta=%f\n",
2159 eventBin,pool->GetSize(), ptTrig,phiTrig,etaTrig);
2161 Double_t ptAssoc = -999.;
2162 Double_t phiAssoc = -999.;
2163 Double_t etaAssoc = -999.;
2164 Double_t deltaPhi = -999.;
2165 Double_t deltaEta = -999.;
2167 //Start from first event in pool except if in this same event the pool was filled
2169 if(GetReader()->GetLastTracksMixedEvent() == GetEventNumber()) ev0 = 1;
2170 for(Int_t ev=ev0; ev < pool->GetSize(); ev++)
2172 TObjArray* bgTracks = static_cast<TObjArray*>(pool->At(ev));
2174 fhEventMixBin->Fill(eventBin);
2176 Int_t nTracks=bgTracks->GetEntriesFast();
2177 //printf("\t Read Pool event %d, nTracks %d\n",ev,nTracks);
2179 for(Int_t j1 = 0;j1 <nTracks; j1++ )
2181 AliAODPWG4Particle *track = (AliAODPWG4Particle*) bgTracks->At(j1) ;
2183 if(!track) continue;
2185 ptAssoc = track->Pt();
2186 etaAssoc = track->Eta();
2187 phiAssoc = track->Phi() ;
2188 if(phiAssoc < 0) phiAssoc+=TMath::TwoPi();
2190 if(IsFiducialCutOn())
2192 Bool_t in = GetFiducialCut()->IsInFiducialCut(*aodParticle->Momentum(),"CTS") ;
2196 deltaPhi = phiTrig-phiAssoc;
2197 if(deltaPhi < -TMath::PiOver2()) deltaPhi+=TMath::TwoPi();
2198 if(deltaPhi > 3*TMath::PiOver2()) deltaPhi-=TMath::TwoPi();
2199 deltaEta = etaTrig-etaAssoc;
2202 printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation(): deltaPhi= %f, deltaEta=%f\n",deltaPhi, deltaEta);
2204 // Set the pt associated bin for the defined bins
2205 Int_t assocBin = -1;
2206 for(Int_t i = 0 ; i < fNAssocPtBins ; i++)
2208 if(ptAssoc > fAssocPtBinLimit[i] && ptAssoc < fAssocPtBinLimit[i+1]) assocBin= i;
2211 fhMixDeltaPhiCharged ->Fill(ptTrig, deltaPhi);
2212 fhMixDeltaPhiDeltaEtaCharged->Fill(deltaPhi, deltaEta);
2214 if(assocBin < 0) continue ; // this pt bin was not considered
2216 if(TMath::Abs(deltaEta) > 0.8)
2217 fhMixDeltaPhiChargedAssocPtBinDEta08 [assocBin]->Fill(ptTrig, deltaPhi);
2219 fhMixDeltaPhiChargedAssocPtBin [assocBin]->Fill(ptTrig, deltaPhi);
2220 fhMixDeltaPhiDeltaEtaChargedAssocPtBin[assocBin]->Fill(deltaPhi, deltaEta);
2223 } // mixed event loop
2227 //________________________________________________________________________________________________________________
2228 Bool_t AliAnaParticleHadronCorrelation::MakeNeutralCorrelation(AliAODPWG4ParticleCorrelation * const aodParticle,
2229 const TObjArray* pi0list, const Bool_t bFillHisto)
2231 // Neutral Pion Correlation Analysis
2232 if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::MakeNeutralCorrelation() - Make trigger particle - pi0 correlation, %d pi0's \n",
2233 pi0list->GetEntriesFast());
2235 Int_t evtIndex11 = 0 ;
2236 Int_t evtIndex12 = 0 ;
2237 if (GetMixedEvent())
2239 evtIndex11 = GetMixedEvent()->EventIndexForCaloCluster(aodParticle->GetCaloLabel(0)) ;
2240 evtIndex12 = GetMixedEvent()->EventIndexForCaloCluster(aodParticle->GetCaloLabel(1)) ;
2243 Float_t pt = -100. ;
2244 Float_t zT = -100. ;
2245 Float_t phi = -100. ;
2246 Float_t eta = -100. ;
2247 Float_t xE = -100. ;
2248 Float_t hbpXE= -100. ;
2249 Float_t hbpZT= -100. ;
2251 Float_t ptTrig = aodParticle->Pt();
2252 Float_t phiTrig = aodParticle->Phi();
2253 Float_t etaTrig = aodParticle->Eta();
2254 Float_t deltaPhi= -100. ;
2256 TLorentzVector photonMom ;
2258 // In case of pi0/eta trigger, we may want to check their decay correlation,
2259 // get their decay children
2260 TLorentzVector decayMom1;
2261 TLorentzVector decayMom2;
2262 Bool_t decayFound = kFALSE;
2263 if(fPi0Trigger && bFillHisto) decayFound = GetDecayPhotonMomentum(aodParticle,decayMom1, decayMom2);
2265 TObjArray * refpi0 = 0x0;
2268 //Loop on stored AOD pi0
2270 Int_t naod = pi0list->GetEntriesFast();
2272 printf("AliAnaParticleHadronCorrelation::MakeNeutralCorrelationFillHistograms() - aod branch entries %d\n", naod);
2274 for(Int_t iaod = 0; iaod < naod ; iaod++)
2276 AliAODPWG4Particle* pi0 = (AliAODPWG4Particle*) (pi0list->At(iaod));
2278 Int_t evtIndex2 = 0 ;
2279 Int_t evtIndex3 = 0 ;
2280 if (GetMixedEvent())
2282 evtIndex2 = GetMixedEvent()->EventIndexForCaloCluster(pi0->GetCaloLabel(0)) ;
2283 evtIndex3 = GetMixedEvent()->EventIndexForCaloCluster(pi0->GetCaloLabel(1)) ;
2285 if (evtIndex11 == evtIndex2 || evtIndex12 == evtIndex2 ||
2286 evtIndex11 == evtIndex3 || evtIndex12 == evtIndex3) // trigger and pi0 are not from different events
2292 if(pt < fMinAssocPt || pt > fMaxAssocPt) continue ;
2294 //jump out this event if near side associated particle pt larger than trigger
2295 if (fMakeNearSideLeading)
2297 if(pt > ptTrig && TMath::Abs(phi-phiTrig) < TMath::PiOver2()) return kFALSE;
2299 //jump out this event if there is any other particle with pt larger than trigger
2300 else if(fMakeAbsoluteLeading)
2302 if(pt > ptTrig) return kFALSE;
2310 FillNeutralAngularCorrelationHistograms(pt, ptTrig, phi, phiTrig, deltaPhi, eta, etaTrig);
2313 xE =-pt/ptTrig*TMath::Cos(deltaPhi); // -(px*pxTrig+py*pyTrig)/(ptTrig*ptTrig);
2315 //if(xE <0.)xE =-xE;
2320 if(xE > 0 ) hbpXE = TMath::Log(1./xE);
2321 if(zT > 0 ) hbpZT = TMath::Log(1./zT);
2323 if(fPi0Trigger && decayFound)
2324 FillDecayPhotonCorrelationHistograms(pt, phi, decayMom1,decayMom2,kFALSE) ;
2326 //delta phi cut for correlation
2327 if( (deltaPhi > fDeltaPhiMinCut) && ( deltaPhi < fDeltaPhiMaxCut) )
2329 fhDeltaPhiNeutralPt->Fill(pt,deltaPhi);
2330 fhXENeutral ->Fill(ptTrig,xE);
2331 fhPtHbpXENeutral ->Fill(ptTrig,hbpXE);
2333 else if ( (deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < fUeDeltaPhiMaxCut) )
2335 fhDeltaPhiUeNeutralPt->Fill(pt,deltaPhi);
2336 fhXEUeNeutral ->Fill(ptTrig,xE);
2337 fhPtHbpXEUeNeutral ->Fill(ptTrig,hbpXE);
2340 //several UE calculation
2341 if(fMakeSeveralUE) FillChargedUnderlyingEventSidesHistograms(ptTrig,pt,xE,hbpXE,zT,hbpZT,deltaPhi);
2349 refpi0 = new TObjArray(0);
2350 refpi0->SetName(GetAODObjArrayName()+"Pi0s");
2351 refpi0->SetOwner(kFALSE);
2354 }//put references in trigger AOD
2357 printf("AliAnaParticleHadronCorrelation::MakeNeutralCorrelation() - Selected neutral for momentum imbalance: pt %2.2f, phi %2.2f, eta %2.2f \n",pt,phi,eta);
2364 //_________________________________________________________________________________________________________
2365 void AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation(AliAODPWG4ParticleCorrelation *aodParticle)
2367 // Charged Hadron Correlation Analysis with MC information
2370 printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation() - Make trigger particle - charged hadron correlation in AOD MC level\n");
2372 AliStack * stack = 0x0 ;
2373 TParticle * primary = 0x0 ;
2374 TClonesArray * mcparticles0 = 0x0 ;
2375 TClonesArray * mcparticles = 0x0 ;
2376 AliAODMCParticle * aodprimary = 0x0 ;
2378 Double_t eprim = 0 ;
2379 Double_t ptprim = 0 ;
2380 Double_t phiprim = 0 ;
2381 Double_t etaprim = 0 ;
2383 Int_t iParticle = 0 ;
2384 Double_t charge = 0.;
2387 if(GetReader()->ReadStack())
2389 nTracks = GetMCStack()->GetNtrack() ;
2393 nTracks = GetReader()->GetAODMCParticles()->GetEntriesFast() ;
2395 //Int_t trackIndex[nTracks];
2397 Int_t label= aodParticle->GetLabel();
2400 if(GetDebug() > 0) printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation *** bad label ***: label %d \n", label);
2405 if(GetReader()->ReadStack())
2407 stack = GetMCStack() ;
2410 printf(" AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation- Stack not available, is the MC handler called? STOP\n");
2414 nTracks=stack->GetNprimary();
2415 if(label >= stack->GetNtrack())
2417 if(GetDebug() > 2) printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation *** large label ***: label %d, n tracks %d \n", label, stack->GetNtrack());
2421 primary = stack->Particle(label);
2424 printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation *** no primary ***: label %d \n", label);
2430 eprim = primary->Energy();
2431 ptprim = primary->Pt();
2432 phiprim = primary->Phi();
2433 etaprim = primary->Eta();
2435 if(ptprim < 0.01 || eprim < 0.01) return ;
2437 for (iParticle = 0 ; iParticle < nTracks ; iParticle++)
2439 TParticle * particle = stack->Particle(iParticle);
2440 TLorentzVector momentum;
2442 //keep only final state particles
2443 if(particle->GetStatusCode()!=1) continue ;
2445 Int_t pdg = particle->GetPdgCode();
2447 charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge();
2449 particle->Momentum(momentum);
2451 //---------- Charged particles ----------------------
2454 //Particles in CTS acceptance
2455 Bool_t inCTS = GetFiducialCut()->IsInFiducialCut(momentum,"CTS");
2457 if(TMath::Abs(pdg) == 11 && stack->Particle(particle->GetFirstMother())->GetPdgCode()==22) continue ;
2461 if( label!=iParticle) // avoid trigger particle
2463 if(!FillChargedMCCorrelationHistograms(particle->Pt(),particle->Phi(),particle->Eta(),ptprim,phiprim,etaprim)) return;
2465 }// in CTS acceptance
2468 } //when the leading particles could trace back to MC
2470 else if(GetReader()->ReadAODMCParticles())
2472 //Get the list of MC particles
2473 mcparticles0 = GetReader()->GetAODMCParticles(0);
2474 if(!mcparticles0) return;
2475 if(label >=mcparticles0->GetEntriesFast())
2478 printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation *** large label ***: label %d, n tracks %d \n", label,mcparticles0->GetEntriesFast());
2482 aodprimary = (AliAODMCParticle*) mcparticles0->At(label);
2485 printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation *** no AOD primary ***: label %d \n", label);
2492 ptprim = aodprimary->Pt();
2493 phiprim = aodprimary->Phi();
2494 etaprim = aodprimary->Eta();
2495 eprim = aodprimary->E();
2497 Bool_t lead = kFALSE;
2499 if(ptprim < 0.01 || eprim < 0.01) return ;
2501 mcparticles= GetReader()->GetAODMCParticles();
2502 for (Int_t i = 0; i < nTracks; i++)
2504 AliAODMCParticle *part = (AliAODMCParticle*) mcparticles->At(i);
2506 if (!part->IsPhysicalPrimary()) continue;
2507 Int_t pdg = part->GetPdgCode();
2508 charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge();
2509 TLorentzVector momentum(part->Px(),part->Py(),part->Pz(),part->E());
2512 if(part->Pt()> GetReader()->GetCTSPtMin())
2514 //Particles in CTS acceptance
2515 Bool_t inCTS = GetFiducialCut()->IsInFiducialCut(momentum,"CTS");
2516 Int_t indexmother=part->GetMother();
2519 Int_t mPdg = ((AliAODMCParticle*) mcparticles->At(indexmother)) ->GetPdgCode();
2520 if(TMath::Abs(pdg) == 11 && mPdg == 22) continue;
2525 if( label!=iParticle) // avoid trigger particle
2527 if(!FillChargedMCCorrelationHistograms(part->Pt(),part->Phi(),part->Eta(),ptprim,phiprim,etaprim)) return;
2532 } //only charged particles
2533 } //MC particle loop
2534 if (lead) fhMCPtLeading->Fill(ptprim);
2535 } //when the leading particles could trace back to MC
2539 //_____________________________________________________________________
2540 void AliAnaParticleHadronCorrelation::Print(const Option_t * opt) const
2543 //Print some relevant parameters set for the analysis
2547 printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
2548 AliAnaCaloTrackCorrBaseClass::Print(" ");
2549 printf("Pt trigger > %3.2f\n", fMinTriggerPt) ;
2550 printf("Pt associated hadron < %3.2f\n", fMaxAssocPt) ;
2551 printf("Pt associated hadron > %3.2f\n", fMinAssocPt) ;
2552 printf("Phi trigger particle-Hadron < %3.2f\n", fDeltaPhiMaxCut) ;
2553 printf("Phi trigger particle-Hadron > %3.2f\n", fDeltaPhiMinCut) ;
2554 printf("Phi trigger particle-UeHadron < %3.2f\n", fUeDeltaPhiMaxCut) ;
2555 printf("Phi trigger particle-UeHadron > %3.2f\n", fUeDeltaPhiMinCut) ;
2556 printf("Isolated Trigger? %d\n" , fSelectIsolated) ;
2557 printf("Several UE? %d\n" , fMakeSeveralUE) ;
2558 printf("Name of AOD Pi0 Branch %s \n", fPi0AODBranchName.Data());
2559 printf("Do Decay-hadron correlation ? %d\n", fPi0Trigger) ;
2560 printf("Select absolute leading for cluster triggers ? %d or Near Side %d\n",
2561 fMakeAbsoluteLeading, fMakeNearSideLeading) ;
2562 printf("Trigger pt bins %d\n", fNAssocPtBins) ;
2563 for (Int_t ibin = 0; ibin<fNAssocPtBins; ibin++) {
2564 printf("\t bin %d = [%2.1f,%2.1f]\n", ibin, fAssocPtBinLimit[ibin], fAssocPtBinLimit[ibin+1]) ;
2569 //____________________________________________________________
2570 void AliAnaParticleHadronCorrelation::SetNAssocPtBins(Int_t n)
2572 // Set number of bins
2583 printf("n = larger than 9 or too small, set to 9 \n");
2588 //______________________________________________________________________________
2589 void AliAnaParticleHadronCorrelation::SetAssocPtBinLimit(Int_t ibin, Float_t pt)
2591 // Set the list of limits for the trigger pt bins
2593 if(ibin <= fNAssocPtBins || ibin >= 0)
2595 fAssocPtBinLimit[ibin] = pt ;
2599 printf("AliAnaParticleHadronCorrelation::SetAssocPtBinLimit() - bin number too large %d > %d or small, nothing done\n", ibin, fNAssocPtBins) ;