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 if(fUseMixStoredInReader && GetReader()->GetLastTracksMixedEvent() == GetEventNumber())
579 //printf("%s : Pool already filled for this event !!!\n",GetInputAODName().Data());
580 return ; // pool filled previously for another trigger
583 Int_t nTracks = GetCTSTracks()->GetEntriesFast();
585 fhNtracksAll->Fill(nTracks);
587 AliAnalysisManager * manager = AliAnalysisManager::GetAnalysisManager();
588 AliInputEventHandler * inputHandler = dynamic_cast<AliInputEventHandler*>(manager->GetInputEventHandler());
590 if(!inputHandler) return ;
592 if( inputHandler->IsEventSelected( ) & GetReader()->GetEventTriggerMask() )
594 fhNtracksTrigger->Fill(nTracks);
597 if( inputHandler->IsEventSelected( ) & GetReader()->GetMixEventTriggerMask() )
600 fhNtracksMB->Fill(nTracks);
602 Int_t eventBin = GetEventMixBin();
604 //Check that the bin exists, if not (bad determination of RP, centrality or vz bin) do nothing
605 if(eventBin < 0) return;
607 TObjArray * mixEventTracks = new TObjArray;
609 if(fUseMixStoredInReader)
611 fListMixEvents[eventBin] = GetReader()->GetListWithMixedEventsForTracks(eventBin);
614 if(!fListMixEvents[eventBin]) fListMixEvents[eventBin] = new TList();
616 //printf("%s ***** Pool Event bin : %d - nTracks %d\n",GetInputAODName().Data(),eventBin, GetCTSTracks()->GetEntriesFast());
618 TList * pool = fListMixEvents[eventBin];
621 for(Int_t ipr = 0;ipr < GetCTSTracks()->GetEntriesFast() ; ipr ++ )
623 AliVTrack * track = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
625 Double_t mom[3] = {track->Px(),track->Py(),track->Pz()};
626 p3.SetXYZ(mom[0],mom[1],mom[2]);
627 Float_t pt = p3.Pt();
629 //Select only hadrons in pt range
630 if(pt < fMinAssocPt || pt > fMaxAssocPt) continue ;
632 AliAODPWG4Particle * mixedTrack = new AliAODPWG4Particle(mom[0],mom[1],mom[2],0);
633 mixedTrack->SetDetector("CTS");
634 mixedTrack->SetChargedBit(track->Charge()>0);
636 mixEventTracks->Add(mixedTrack);
639 //Set the event number where the last event was added, to avoid double pool filling
640 GetReader()->SetLastTracksMixedEvent(GetEventNumber());
642 pool->AddFirst(mixEventTracks);
644 //printf("Pool size %d, max %d\n",pool->GetSize(), GetNMaxEvMix());
646 if(pool->GetSize() > GetNMaxEvMix())
648 TClonesArray * tmp = static_cast<TClonesArray*>(pool->Last()) ;
657 //____________________________________________________________
658 TObjString* AliAnaParticleHadronCorrelation::GetAnalysisCuts()
660 //Save parameters used for analysis
661 TString parList ; //this will be list of parameters used for this analysis.
662 const Int_t buffersize = 560;
663 char onePar[buffersize] ;
665 snprintf(onePar,buffersize,"--- AliAnaPaticleHadronCorrelation ---\n") ;
667 snprintf(onePar,buffersize," Pt Trigger > %3.2f ", fMinTriggerPt) ;
669 snprintf(onePar,buffersize," %3.2f < Pt associated < %3.2f ", fMinAssocPt, fMaxAssocPt) ;
671 snprintf(onePar,buffersize," %3.2f < Phi trigger particle-Hadron < %3.2f ", fDeltaPhiMinCut, fDeltaPhiMaxCut) ;
673 snprintf(onePar,buffersize," %3.2f < Phi trigger particle-UeHadron < %3.2f ", fUeDeltaPhiMinCut, fUeDeltaPhiMaxCut) ;
675 snprintf(onePar,buffersize,"Isolated Trigger? %d\n", fSelectIsolated) ;
677 snprintf(onePar,buffersize,"Several UE? %d\n", fMakeSeveralUE) ;
679 snprintf(onePar,buffersize,"Name of AOD Pi0 Branch %s ", fPi0AODBranchName.Data());
681 snprintf(onePar,buffersize,"Do Decay-hadron correlation ? pi0 %d, decay %d", fPi0Trigger, fDecayTrigger) ;
683 snprintf(onePar,buffersize,"Select absolute leading for cluster triggers ? %d or Near Side Leading %d \n",
684 fMakeAbsoluteLeading, fMakeNearSideLeading) ;
686 snprintf(onePar,buffersize,"Associated particle pt bins %d: ", fNAssocPtBins) ;
688 for (Int_t ibin = 0; ibin<fNAssocPtBins; ibin++) {
689 snprintf(onePar,buffersize,"bin %d = [%2.1f,%2.1f];", ibin, fAssocPtBinLimit[ibin], fAssocPtBinLimit[ibin+1]) ;
693 //Get parameters set in base class.
694 parList += GetBaseParametersList() ;
696 //Get parameters set in FiducialCut class (not available yet)
697 //parlist += GetFidCut()->GetFidCutParametersList()
699 return new TObjString(parList) ;
703 //________________________________________________________________
704 TList * AliAnaParticleHadronCorrelation::GetCreateOutputObjects()
707 // Create histograms to be saved in output file and
708 // store them in fOutputContainer
710 TList * outputContainer = new TList() ;
711 outputContainer->SetName("CorrelationHistos") ;
713 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();
714 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();
715 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();
717 fhPtLeading = new TH1F ("hPtLeading","p_T distribution of leading particles", nptbins,ptmin,ptmax);
718 fhPtLeading->SetXTitle("p_{T}^{trig} (GeV/c)");
720 fhPhiLeading = new TH2F ("hPhiLeading","#phi distribution of leading Particles",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
721 fhPhiLeading->SetYTitle("#phi (rad)");
723 fhEtaLeading = new TH2F ("hEtaLeading","#eta distribution of leading",nptbins,ptmin,ptmax, netabins,etamin,etamax);
724 fhEtaLeading->SetYTitle("#eta ");
726 outputContainer->Add(fhPtLeading);
727 outputContainer->Add(fhPhiLeading);
728 outputContainer->Add(fhEtaLeading);
730 fhPtLeadingCentrality = new TH2F("hPtLeadingCentrality","Leading particle p_{T} vs centrality",nptbins,ptmin,ptmax,100,0.,100) ;
731 fhPtLeadingCentrality->SetXTitle("p_{T}^{trig} (GeV/c)");
732 fhPtLeadingCentrality->SetYTitle("Centrality (%)");
733 outputContainer->Add(fhPtLeadingCentrality) ;
735 fhPtLeadingEventPlane = new TH2F("hPtLeadingEventPlane","Leading particle p_{T} vs event plane angle",nptbins,ptmin,ptmax, 100,0.,TMath::Pi()) ;
736 fhPtLeadingEventPlane->SetXTitle("p_{T}^{trig} (GeV/c)");
737 fhPtLeadingEventPlane->SetXTitle("EP angle (rad)");
738 outputContainer->Add(fhPtLeadingEventPlane) ;
740 fhLeadingEventPlaneCentrality = new TH2F("hLeadingEventPlane","Leading particle centrality vs event plane angle",100,0.,100,100,0.,TMath::Pi()) ;
741 fhLeadingEventPlaneCentrality->SetXTitle("Centrality (%)");
742 fhLeadingEventPlaneCentrality->SetYTitle("EP angle (rad)");
743 outputContainer->Add(fhLeadingEventPlaneCentrality) ;
745 //Correlation with charged hadrons
746 if(GetReader()->IsCTSSwitchedOn())
748 fhDeltaPhiDeltaEtaCharged = new TH2F
749 ("hDeltaPhiDeltaEtaCharged","#eta_{trigger} - #eta_{h^{#pm}} vs #phi_{trigger} - #phi_{h^{#pm}}",
750 ndeltaphibins ,deltaphimin,deltaphimax,ndeltaetabins,deltaetamin,deltaetamax);
751 fhDeltaPhiDeltaEtaCharged->SetXTitle("#Delta #phi");
752 fhDeltaPhiDeltaEtaCharged->SetYTitle("#Delta #eta");
754 fhPhiCharged = new TH2F
755 ("hPhiCharged","#phi_{h^{#pm}} vs p_{T #pm}",
756 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
757 fhPhiCharged->SetYTitle("#phi_{h^{#pm}} (rad)");
758 fhPhiCharged->SetXTitle("p_{T #pm} (GeV/c)");
760 fhEtaCharged = new TH2F
761 ("hEtaCharged","#eta_{h^{#pm}} vs p_{T #pm}",
762 nptbins,ptmin,ptmax,netabins,etamin,etamax);
763 fhEtaCharged->SetYTitle("#eta_{h^{#pm}} (rad)");
764 fhEtaCharged->SetXTitle("p_{T #pm} (GeV/c)");
766 fhDeltaPhiCharged = new TH2F
767 ("hDeltaPhiCharged","#phi_{trigger} - #phi_{h^{#pm}} vs p_{T trigger}",
768 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
769 fhDeltaPhiCharged->SetYTitle("#Delta #phi");
770 fhDeltaPhiCharged->SetXTitle("p_{T trigger} (GeV/c)");
772 fhDeltaPhiChargedPt = new TH2F
773 ("hDeltaPhiChargedPt","#phi_{trigger} - #phi_{#h^{#pm}} vs p_{T h^{#pm}}",
774 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
775 fhDeltaPhiChargedPt->SetYTitle("#Delta #phi");
776 fhDeltaPhiChargedPt->SetXTitle("p_{T h^{#pm}} (GeV/c)");
778 fhDeltaPhiUeChargedPt = new TH2F
779 ("hDeltaPhiUeChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs p_{T Ueh^{#pm}}",
780 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
781 fhDeltaPhiUeChargedPt->SetYTitle("#Delta #phi");
782 fhDeltaPhiUeChargedPt->SetXTitle("p_{T h^{#pm}} (GeV/c)");
784 fhUePart = new TH1F("hUePart","UE particles distribution vs pt trig",
785 nptbins,ptmin,ptmax);
786 fhUePart->SetYTitle("dNch");
787 fhUePart->SetXTitle("p_{T trigger}");
790 fhDeltaEtaCharged = new TH2F
791 ("hDeltaEtaCharged","#eta_{trigger} - #eta_{h^{#pm}} vs p_{T trigger}",
792 nptbins,ptmin,ptmax,ndeltaetabins,deltaetamin,deltaetamax);
793 fhDeltaEtaCharged->SetYTitle("#Delta #eta");
794 fhDeltaEtaCharged->SetXTitle("p_{T trigger} (GeV/c)");
797 new TH2F("hXECharged","x_{E} for charged tracks",
798 nptbins,ptmin,ptmax,200,0.,2.);
799 fhXECharged->SetYTitle("x_{E}");
800 fhXECharged->SetXTitle("p_{T trigger}");
803 new TH2F("hXEUeCharged","x_{E} for Underlying Event",
804 nptbins,ptmin,ptmax,200,0.,2.);
805 fhXEUeCharged->SetYTitle("x_{E}");
806 fhXEUeCharged->SetXTitle("p_{T trigger}");
809 new TH2F("hXEPositiveCharged","x_{E} for positive charged tracks",
810 nptbins,ptmin,ptmax,200,0.,2.);
811 fhXEPosCharged->SetYTitle("x_{E}");
812 fhXEPosCharged->SetXTitle("p_{T trigger}");
815 new TH2F("hXENegativeCharged","x_{E} for negative charged tracks",
816 nptbins,ptmin,ptmax,200,0.,2.);
817 fhXENegCharged->SetYTitle("x_{E}");
818 fhXENegCharged->SetXTitle("p_{T trigger}");
821 new TH2F("hHbpXECharged","#xi = ln(1/x_{E}) with charged hadrons",
822 nptbins,ptmin,ptmax,200,0.,10.);
823 fhPtHbpXECharged->SetYTitle("ln(1/x_{E})");
824 fhPtHbpXECharged->SetXTitle("p_{T trigger}");
827 new TH2F("hHbpXEUeCharged","#xi = ln(1/x_{E}) with charged hadrons,Underlying Event",
828 nptbins,ptmin,ptmax,200,0.,10.);
829 fhPtHbpXEUeCharged->SetYTitle("ln(1/x_{E})");
830 fhPtHbpXEUeCharged->SetXTitle("p_{T trigger}");
833 new TH2F("hZTCharged","z_{T} for charged tracks",
834 nptbins,ptmin,ptmax,200,0.,2.);
835 fhZTCharged->SetYTitle("z_{T}");
836 fhZTCharged->SetXTitle("p_{T trigger}");
839 new TH2F("hZTUeCharged","z_{T} for Underlying Event",
840 nptbins,ptmin,ptmax,200,0.,2.);
841 fhZTUeCharged->SetYTitle("z_{T}");
842 fhZTUeCharged->SetXTitle("p_{T trigger}");
845 new TH2F("hZTPositiveCharged","z_{T} for positive charged tracks",
846 nptbins,ptmin,ptmax,200,0.,2.);
847 fhZTPosCharged->SetYTitle("z_{T}");
848 fhZTPosCharged->SetXTitle("p_{T trigger}");
851 new TH2F("hZTNegativeCharged","z_{T} for negative charged tracks",
852 nptbins,ptmin,ptmax,200,0.,2.);
853 fhZTNegCharged->SetYTitle("z_{T}");
854 fhZTNegCharged->SetXTitle("p_{T trigger}");
857 new TH2F("hHbpZTCharged","#xi = ln(1/z_{T}) with charged hadrons",
858 nptbins,ptmin,ptmax,200,0.,10.);
859 fhPtHbpZTCharged->SetYTitle("ln(1/z_{T})");
860 fhPtHbpZTCharged->SetXTitle("p_{T trigger}");
863 new TH2F("hHbpZTUeCharged","#xi = ln(1/z_{T}) with charged hadrons,Underlying Event",
864 nptbins,ptmin,ptmax,200,0.,10.);
865 fhPtHbpZTUeCharged->SetYTitle("ln(1/x_{E})");
866 fhPtHbpZTUeCharged->SetXTitle("p_{T trigger}");
869 new TH2F("hPtTrigPout","Pout with triggers",
870 nptbins,ptmin,ptmax,2*nptbins,-ptmax,ptmax);
871 fhPtTrigPout->SetYTitle("p_{out} (GeV/c)");
872 fhPtTrigPout->SetXTitle("p_{T trigger} (GeV/c)");
875 new TH2F("hPtTrigCharged","trgger and charged tracks pt distribution",
876 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
877 fhPtTrigCharged->SetYTitle("p_{T h^{#pm}} (GeV/c)");
878 fhPtTrigCharged->SetXTitle("p_{T trigger} (GeV/c)");
880 outputContainer->Add(fhDeltaPhiDeltaEtaCharged);
881 outputContainer->Add(fhPhiCharged) ;
882 outputContainer->Add(fhEtaCharged) ;
883 outputContainer->Add(fhDeltaPhiCharged) ;
884 outputContainer->Add(fhDeltaEtaCharged) ;
885 outputContainer->Add(fhDeltaPhiChargedPt) ;
886 outputContainer->Add(fhDeltaPhiUeChargedPt) ;
887 outputContainer->Add(fhUePart);
889 outputContainer->Add(fhXECharged) ;
890 outputContainer->Add(fhXEPosCharged) ;
891 outputContainer->Add(fhXENegCharged) ;
892 outputContainer->Add(fhXEUeCharged) ;
893 outputContainer->Add(fhPtHbpXECharged) ;
894 outputContainer->Add(fhPtHbpXEUeCharged) ;
896 outputContainer->Add(fhZTCharged) ;
897 outputContainer->Add(fhZTPosCharged) ;
898 outputContainer->Add(fhZTNegCharged) ;
899 outputContainer->Add(fhZTUeCharged) ;
900 outputContainer->Add(fhPtHbpZTCharged) ;
901 outputContainer->Add(fhPtHbpZTUeCharged) ;
903 outputContainer->Add(fhPtTrigPout) ;
904 outputContainer->Add(fhPtTrigCharged) ;
908 Int_t nMultiBins = GetMultiBin();
909 fhTrigDeltaPhiCharged = new TH2F*[nMultiBins] ;
910 fhTrigDeltaEtaCharged = new TH2F*[nMultiBins] ;
911 fhTrigXECorr = new TH2F*[nMultiBins] ;
912 fhTrigXEUeCorr = new TH2F*[nMultiBins] ;
913 fhTrigZTCorr = new TH2F*[nMultiBins] ;
914 fhTrigZTUeCorr = new TH2F*[nMultiBins] ;
916 for(Int_t im=0; im<nMultiBins; im++)
918 fhTrigDeltaPhiCharged[im] = new TH2F
919 (Form("hTrigDeltaPhiCharged_%d",im),Form("hTrigDeltaPhiCharged_%d",im), nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
920 fhTrigDeltaPhiCharged[im]->SetXTitle("p_{T trigger} (GeV/c)");
921 fhTrigDeltaPhiCharged[im]->SetYTitle("#Delta #phi");
923 fhTrigDeltaEtaCharged[im] = new TH2F
924 (Form("hTrigDeltaEtaCharged_%d",im),Form("hTrigDeltaEtaCharged_%d",im), nptbins,ptmin,ptmax, ndeltaetabins ,deltaetamin,deltaetamax);
925 fhTrigDeltaEtaCharged[im]->SetXTitle("p_{T trigger} (GeV/c)");
926 fhTrigDeltaEtaCharged[im]->SetYTitle("#Delta #eta");
928 fhTrigXECorr[im] = new TH2F
929 (Form("hTrigXEPtCorr_%d",im),Form("hTrigXEPtCorr_%d",im), nptbins,ptmin,ptmax,200,0.,2.);
930 fhTrigXECorr[im]->SetYTitle("x_{E trigger h^{#pm}}");
931 fhTrigXECorr[im]->SetXTitle("p_{T trigger}");
933 fhTrigXEUeCorr[im] = new TH2F
934 (Form("hTrigXEPtUeCorr_%d",im),Form("hTrigXEPtUeCorr_%d",im), nptbins,ptmin,ptmax,200,0.,2.);
935 fhTrigXEUeCorr[im]->SetYTitle("x_{E trigger h^{#pm}}");
936 fhTrigXEUeCorr[im]->SetXTitle("p_{T trigger}");
938 fhTrigZTCorr[im] = new TH2F
939 (Form("hTrigZTPtCorr_%d",im),Form("hTrigZTPtCorr_%d",im), nptbins,ptmin,ptmax,200,0.,2.);
940 fhTrigZTCorr[im]->SetYTitle("z_{trigger h^{#pm}}");
941 fhTrigZTCorr[im]->SetXTitle("p_{T trigger}");
943 fhTrigZTUeCorr[im] = new TH2F
944 (Form("hTrigZTPtUeCorr_%d",im),Form("hTrigZTPtUeCorr_%d",im), nptbins,ptmin,ptmax,200,0.,2.);
945 fhTrigZTUeCorr[im]->SetYTitle("z_{trigger h^{#pm}}");
946 fhTrigZTUeCorr[im]->SetXTitle("p_{T trigger}");
948 outputContainer->Add(fhTrigDeltaPhiCharged[im]) ;
949 outputContainer->Add(fhTrigDeltaEtaCharged[im]) ;
950 outputContainer->Add(fhTrigXECorr[im]);
951 outputContainer->Add(fhTrigXEUeCorr[im]);
952 outputContainer->Add(fhTrigZTCorr[im]);
953 outputContainer->Add(fhTrigZTUeCorr[im]);
959 fhAssocPtBkg = new TH2F("hAssocPtBkg", " Trigger p_{T} vs associated hadron p_{T} from background",
960 nptbins, ptmin, ptmax,nptbins,ptmin,ptmax);
961 fhAssocPtBkg->SetXTitle("p_{T trigger}");
962 fhAssocPtBkg->SetYTitle("p_{T associated}");
963 outputContainer->Add(fhAssocPtBkg) ;
965 fhDeltaPhiBrad = new TH2F("hDeltaPhiBrad","atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi vs p_{T trigger} ",
966 nptbins, ptmin, ptmax,288, -1.0/3.0, 5.0/3.0);
967 fhDeltaPhiBrad->SetXTitle("p_{T trigger}");
968 fhDeltaPhiBrad->SetYTitle("atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi");
969 outputContainer->Add(fhDeltaPhiBrad) ;
972 fhDeltaPhiAssocPtBin = new TH2F*[fNAssocPtBins] ;
973 fhDeltaPhiAssocPtBinDEta08 = new TH2F*[fNAssocPtBins] ;
974 fhXEAssocPtBin = new TH2F*[fNAssocPtBins] ;
975 fhZTAssocPtBin = new TH2F*[fNAssocPtBins] ;
978 fhDeltaPhiBradAssocPtBin = new TH2F*[fNAssocPtBins] ;
980 if(fPi0Trigger || fDecayTrigger)
982 fhDeltaPhiAssocPtBin = new TH2F*[fNAssocPtBins] ;
983 fhDeltaPhiAssocPtBinDEta08 = new TH2F*[fNAssocPtBins] ;
984 fhXEAssocPtBin = new TH2F*[fNAssocPtBins] ;
985 fhZTAssocPtBin = new TH2F*[fNAssocPtBins] ;
986 fhXEDecayChargedAssocPtBin = new TH2F*[fNAssocPtBins] ;
987 fhZTDecayChargedAssocPtBin = new TH2F*[fNAssocPtBins] ;
988 fhDeltaPhiDecayChargedAssocPtBin = new TH2F*[fNAssocPtBins] ;
991 if(fHMPIDCorrelation)
993 fhDeltaPhiAssocPtBinHMPID = new TH2F*[fNAssocPtBins] ;
994 fhDeltaPhiAssocPtBinHMPIDAcc= new TH2F*[fNAssocPtBins] ;
997 for(Int_t i = 0 ; i < fNAssocPtBins ; i++)
999 fhDeltaPhiAssocPtBin[i] = new TH2F(Form("hDeltaPhiPtAssocPt%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1000 Form("#Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1001 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1002 fhDeltaPhiAssocPtBin[i]->SetXTitle("p_{T trigger}");
1003 fhDeltaPhiAssocPtBin[i]->SetYTitle("#Delta #phi");
1005 fhDeltaPhiAssocPtBinDEta08[i] = new TH2F(Form("hDeltaPhiDeltaEta0.8PtAssocPt%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1006 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]),
1007 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1008 fhDeltaPhiAssocPtBinDEta08[i]->SetXTitle("p_{T trigger}");
1009 fhDeltaPhiAssocPtBinDEta08[i]->SetYTitle("#Delta #phi");
1011 fhXEAssocPtBin[i] = new TH2F(Form("hXEAssocPtBin%1.f_%1.f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1012 Form("x_{E} vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1013 nptbins, ptmin, ptmax,200, 0.0, 2.0);
1014 fhXEAssocPtBin[i]->SetXTitle("p_{T trigger}");
1015 fhXEAssocPtBin[i]->SetYTitle("x_{E}");
1017 fhZTAssocPtBin[i] = new TH2F(Form("hZTAssocPtBin%1.f_%1.f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1018 Form("z_{T} vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1019 nptbins, ptmin, ptmax,200, 0.0, 2.0);
1020 fhZTAssocPtBin[i]->SetXTitle("p_{T trigger}");
1021 fhZTAssocPtBin[i]->SetYTitle("z_{T}");
1023 outputContainer->Add(fhDeltaPhiAssocPtBin[i]) ;
1024 outputContainer->Add(fhDeltaPhiAssocPtBinDEta08[i]) ;
1025 outputContainer->Add(fhXEAssocPtBin[i]);
1026 outputContainer->Add(fhZTAssocPtBin[i]);
1028 if(fPi0Trigger || fDecayTrigger)
1030 fhDeltaPhiDecayChargedAssocPtBin[i] = new TH2F(Form("hDeltaPhiPtDecayChargedAssocPt%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1031 Form("#Delta #phi vs p_{T trigger} tagged as decay for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1032 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1033 fhDeltaPhiDecayChargedAssocPtBin[i]->SetXTitle("p_{T trigger}");
1034 fhDeltaPhiDecayChargedAssocPtBin[i]->SetYTitle("#Delta #phi");
1036 fhXEDecayChargedAssocPtBin[i] = new TH2F(Form("hXEDecayChargedAssocPtBin%1.f_%1.f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1037 Form("x_{E} vs p_{T trigger} tagged as decay for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1038 nptbins, ptmin, ptmax,200, 0.0, 2.0);
1039 fhXEDecayChargedAssocPtBin[i]->SetXTitle("p_{T trigger}");
1040 fhXEDecayChargedAssocPtBin[i]->SetYTitle("x_{E}");
1042 fhZTDecayChargedAssocPtBin[i] = new TH2F(Form("hZTDecayChargedAssocPtBin%1.f_%1.f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1043 Form("z_{T} vs p_{T trigger} tagged as decay for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1044 nptbins, ptmin, ptmax,200, 0.0, 2.0);
1045 fhZTDecayChargedAssocPtBin[i]->SetXTitle("p_{T trigger}");
1046 fhZTDecayChargedAssocPtBin[i]->SetYTitle("z_{T}");
1048 outputContainer->Add(fhDeltaPhiDecayChargedAssocPtBin[i]) ;
1049 outputContainer->Add(fhXEDecayChargedAssocPtBin[i]);
1050 outputContainer->Add(fhZTDecayChargedAssocPtBin[i]);
1056 fhDeltaPhiBradAssocPtBin[i] = new TH2F(Form("hDeltaPhiBradPtAssocPt%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1057 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]),
1058 nptbins, ptmin, ptmax,288, -1.0/3.0, 5.0/3.0);
1059 fhDeltaPhiBradAssocPtBin[i]->SetXTitle("p_{T trigger}");
1060 fhDeltaPhiBradAssocPtBin[i]->SetYTitle("atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi");
1061 outputContainer->Add(fhDeltaPhiBradAssocPtBin[i]) ;
1064 if(fHMPIDCorrelation)
1066 fhDeltaPhiAssocPtBinHMPID[i] = new TH2F(Form("hDeltaPhiPtAssocPt%2.1f_%2.1fHMPID", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1067 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]),
1068 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1069 fhDeltaPhiAssocPtBinHMPID[i]->SetXTitle("p_{T trigger}");
1070 fhDeltaPhiAssocPtBinHMPID[i]->SetYTitle("#Delta #phi");
1072 fhDeltaPhiAssocPtBinHMPIDAcc[i] = new TH2F(Form("hDeltaPhiPtAssocPt%2.1f_%2.1fHMPIDAcc", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1073 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]),
1074 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1075 fhDeltaPhiAssocPtBinHMPIDAcc[i]->SetXTitle("p_{T trigger}");
1076 fhDeltaPhiAssocPtBinHMPIDAcc[i]->SetYTitle("#Delta #phi");
1078 outputContainer->Add(fhDeltaPhiAssocPtBinHMPID[i]) ;
1079 outputContainer->Add(fhDeltaPhiAssocPtBinHMPIDAcc[i]) ;
1084 if(fPi0Trigger || fDecayTrigger)
1088 fhPtPi0DecayRatio = new TH2F
1089 ("hPtPi0DecayRatio","p_T of #pi^{0} and the ratio of pt for two decay",
1090 nptbins,ptmin,ptmax, 100,0.,2.);
1091 fhPtPi0DecayRatio->SetXTitle("p_{T}^{#pi^{0}} (GeV/c)");
1092 fhPtPi0DecayRatio->SetYTitle("p_{T}^{Decay}/p_{T}^{#pi^{0}}");
1093 outputContainer->Add(fhPtPi0DecayRatio) ;
1096 fhDeltaPhiDecayCharged = new TH2F
1097 ("hDeltaPhiDecayCharged","#phi_{Decay} - #phi_{h^{#pm}} vs p_{T Decay}",
1098 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1099 fhDeltaPhiDecayCharged->SetYTitle("#Delta #phi");
1100 fhDeltaPhiDecayCharged->SetXTitle("p_{T Decay} (GeV/c)");
1103 new TH2F("hXEDecayCharged","x_{E} Decay",
1104 nptbins,ptmin,ptmax,200,0.,2.);
1105 fhXEDecayCharged->SetYTitle("x_{E}");
1106 fhXEDecayCharged->SetXTitle("p_{T decay}");
1109 new TH2F("hZTDecayCharged","z_{trigger h^{#pm}} = p_{T h^{#pm}} / p_{T Decay}",
1110 nptbins,ptmin,ptmax,200,0.,2.);
1111 fhZTDecayCharged->SetYTitle("z_{decay h^{#pm}}");
1112 fhZTDecayCharged->SetXTitle("p_{T decay}");
1114 outputContainer->Add(fhDeltaPhiDecayCharged) ;
1115 outputContainer->Add(fhXEDecayCharged) ;
1116 outputContainer->Add(fhZTDecayCharged) ;
1121 fhDeltaPhiUeLeftCharged = new TH2F
1122 ("hDeltaPhiUeLeftChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs p_{T Ueh^{#pm}} with UE left side range of trigger particles",
1123 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1124 fhDeltaPhiUeLeftCharged->SetYTitle("#Delta #phi");
1125 fhDeltaPhiUeLeftCharged->SetXTitle("p_{T h^{#pm}} (GeV/c)");
1126 outputContainer->Add(fhDeltaPhiUeLeftCharged) ;
1128 fhDeltaPhiUeRightCharged = new TH2F
1129 ("hDeltaPhiUeRightChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs p_{T Ueh^{#pm}} with UE right side range of trigger particles",
1130 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1131 fhDeltaPhiUeRightCharged->SetYTitle("#Delta #phi");
1132 fhDeltaPhiUeRightCharged->SetXTitle("p_{T h^{#pm}} (GeV/c)");
1133 outputContainer->Add(fhDeltaPhiUeRightCharged) ;
1136 new TH2F("hXEUeChargedLeft","x_{E} with UE left side of trigger",
1137 nptbins,ptmin,ptmax,200,0.,2.);
1138 fhXEUeLeftCharged->SetYTitle("x_{E Ueh^{#pm}}");
1139 fhXEUeLeftCharged->SetXTitle("p_{T trigger}");
1140 outputContainer->Add(fhXEUeLeftCharged) ;
1142 fhXEUeRightCharged =
1143 new TH2F("hXEUeChargedRight","x_{E h^{#pm}} with UE right side of trigger",
1144 nptbins,ptmin,ptmax,200,0.,2.);
1145 fhXEUeRightCharged->SetYTitle("z_{trigger Ueh^{#pm}}");
1146 fhXEUeRightCharged->SetXTitle("p_{T trigger}");
1147 outputContainer->Add(fhXEUeRightCharged) ;
1149 fhPtHbpXEUeLeftCharged =
1150 new TH2F("hHbpXEUeChargedLeft","#xi = ln(1/x_{E}) with charged UE left side of trigger",
1151 nptbins,ptmin,ptmax,200,0.,10.);
1152 fhPtHbpXEUeLeftCharged->SetYTitle("ln(1/x_{E})");
1153 fhPtHbpXEUeLeftCharged->SetXTitle("p_{T trigger}");
1154 outputContainer->Add(fhPtHbpXEUeLeftCharged) ;
1156 fhPtHbpXEUeRightCharged =
1157 new TH2F("hHbpXEUeChargedRight","#xi = ln(1/x_{E}) with charged UE right side of trigger",
1158 nptbins,ptmin,ptmax,200,0.,10.);
1159 fhPtHbpXEUeRightCharged->SetYTitle("ln(1/x_{E})");
1160 fhPtHbpXEUeRightCharged->SetXTitle("p_{T trigger}");
1161 outputContainer->Add(fhPtHbpXEUeRightCharged) ;
1164 new TH2F("hZTUeChargedLeft","z_{trigger h^{#pm}} = p_{T Ueh^{#pm}} / p_{T trigger} with UE left side of trigger",
1165 nptbins,ptmin,ptmax,200,0.,2.);
1166 fhZTUeLeftCharged->SetYTitle("z_{trigger Ueh^{#pm}}");
1167 fhZTUeLeftCharged->SetXTitle("p_{T trigger}");
1168 outputContainer->Add(fhZTUeLeftCharged) ;
1170 fhZTUeRightCharged =
1171 new TH2F("hZTUeChargedRight","z_{trigger h^{#pm}} = p_{T Ueh^{#pm}} / p_{T trigger} with UE right side of trigger",
1172 nptbins,ptmin,ptmax,200,0.,2.);
1173 fhZTUeRightCharged->SetYTitle("z_{trigger Ueh^{#pm}}");
1174 fhZTUeRightCharged->SetXTitle("p_{T trigger}");
1175 outputContainer->Add(fhZTUeRightCharged) ;
1177 fhPtHbpZTUeLeftCharged =
1178 new TH2F("hHbpZTUeChargedLeft","#xi = ln(1/z_{T}) with charged UE left side of trigger",
1179 nptbins,ptmin,ptmax,200,0.,10.);
1180 fhPtHbpZTUeLeftCharged->SetYTitle("ln(1/z_{T})");
1181 fhPtHbpZTUeLeftCharged->SetXTitle("p_{T trigger}");
1182 outputContainer->Add(fhPtHbpZTUeLeftCharged) ;
1184 fhPtHbpZTUeRightCharged =
1185 new TH2F("hHbpZTUeChargedRight","#xi = ln(1/z_{T}) with charged UE right side of trigger",
1186 nptbins,ptmin,ptmax,200,0.,10.);
1187 fhPtHbpZTUeRightCharged->SetYTitle("ln(1/z_{T})");
1188 fhPtHbpZTUeRightCharged->SetXTitle("p_{T trigger}");
1189 outputContainer->Add(fhPtHbpZTUeRightCharged) ;
1192 } //Correlation with charged hadrons
1194 //Correlation with neutral hadrons
1197 fhDeltaPhiDeltaEtaNeutral = new TH2F
1198 ("hDeltaPhiDeltaEtaNeutral","#phi_{trigger} - #phi_{h^{0}} vs #eta_{trigger} - #eta_{h^{0}}",
1199 ndeltaphibins ,deltaphimin,deltaphimax, ndeltaetabins ,deltaetamin,deltaetamax);
1200 fhDeltaPhiDeltaEtaNeutral->SetXTitle("#Delta #phi");
1201 fhDeltaPhiDeltaEtaNeutral->SetYTitle("#Delta #eta");
1203 fhPhiNeutral = new TH2F
1204 ("hPhiNeutral","#phi_{#pi^{0}} vs p_{T #pi^{0}}",
1205 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
1206 fhPhiNeutral->SetYTitle("#phi_{#pi^{0}} (rad)");
1207 fhPhiNeutral->SetXTitle("p_{T #pi^{0}} (GeV/c)");
1209 fhEtaNeutral = new TH2F
1210 ("hEtaNeutral","#eta_{#pi^{0}} vs p_{T #pi^{0}}",
1211 nptbins,ptmin,ptmax,netabins,etamin,etamax);
1212 fhEtaNeutral->SetYTitle("#eta_{#pi^{0}} (rad)");
1213 fhEtaNeutral->SetXTitle("p_{T #pi^{0}} (GeV/c)");
1215 fhDeltaPhiNeutral = new TH2F
1216 ("hDeltaPhiNeutral","#phi_{trigger} - #phi_{#pi^{0}} vs p_{T trigger}",
1217 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
1218 fhDeltaPhiNeutral->SetYTitle("#Delta #phi");
1219 fhDeltaPhiNeutral->SetXTitle("p_{T trigger} (GeV/c)");
1221 fhDeltaPhiNeutralPt = new TH2F
1222 ("hDeltaPhiNeutralPt","#phi_{trigger} - #phi_{#pi^{0}} vs p_{T #pi^{0}}}",
1223 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1224 fhDeltaPhiNeutralPt->SetYTitle("#Delta #phi");
1225 fhDeltaPhiNeutralPt->SetXTitle("p_{T h^{0}} (GeV/c)");
1227 fhDeltaPhiUeNeutralPt = new TH2F
1228 ("hDeltaPhiUeNeutralPt","#phi_{trigger} - #phi_{#pi^{0}} vs p_{T #pi^{0}}}",
1229 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1230 fhDeltaPhiUeNeutralPt->SetYTitle("#Delta #phi");
1231 fhDeltaPhiUeNeutralPt->SetXTitle("p_{T h^{0}} (GeV/c)");
1233 fhDeltaEtaNeutral = new TH2F
1234 ("hDeltaEtaNeutral","#eta_{trigger} - #eta_{#pi^{0}} vs p_{T trigger}",
1235 nptbins,ptmin,ptmax, ndeltaetabins ,deltaetamin,deltaetamax);
1236 fhDeltaEtaNeutral->SetYTitle("#Delta #eta");
1237 fhDeltaEtaNeutral->SetXTitle("p_{T trigger} (GeV/c)");
1240 new TH2F("hXENeutral","x_{E} for #pi^{0} associated",
1241 nptbins,ptmin,ptmax,200,0.,2.);
1242 fhXENeutral->SetYTitle("x_{E}");
1243 fhXENeutral->SetXTitle("p_{T trigger}");
1246 new TH2F("hXEUeNeutral","x_{E} for #pi^{0} associated",
1247 nptbins,ptmin,ptmax,200,0.,2.);
1248 fhXEUeNeutral->SetYTitle("x_{E}");
1249 fhXEUeNeutral->SetXTitle("p_{T trigger}");
1252 new TH2F("hHbpXENeutral","#xi = ln(1/x_{E})for #pi^{0} associated",
1253 nptbins,ptmin,ptmax,200,0.,10.);
1254 fhPtHbpXENeutral->SetYTitle("ln(1/x_{E})");
1255 fhPtHbpXENeutral->SetXTitle("p_{T trigger}");
1257 fhPtHbpXEUeNeutral =
1258 new TH2F("hHbpXEUeNeutral","#xi = ln(1/x_{E}) for #pi^{0} associated",
1259 nptbins,ptmin,ptmax,200,0.,10.);
1260 fhPtHbpXEUeNeutral->SetYTitle("ln(1/x_{E})");
1261 fhPtHbpXEUeNeutral->SetXTitle("p_{T trigger}");
1264 new TH2F("hZTNeutral","z_{trigger #pi} = p_{T #pi^{0}} / p_{T trigger} for #pi^{0} associated",
1265 nptbins,ptmin,ptmax,200,0.,2.);
1266 fhZTNeutral->SetYTitle("z_{trigger #pi^{0}}");
1267 fhZTNeutral->SetXTitle("p_{T trigger}");
1270 new TH2F("hZTUeNeutral","z_{trigger #pi} = p_{T #pi^{0}} / p_{T trigger} for #pi^{0} associated",
1271 nptbins,ptmin,ptmax,200,0.,2.);
1272 fhZTUeNeutral->SetYTitle("z_{trigger #pi^{0}}");
1273 fhZTUeNeutral->SetXTitle("p_{T trigger}");
1276 new TH2F("hHbpZTNeutral","#xi = ln(1/x_{E}) for #pi^{0} associated",
1277 nptbins,ptmin,ptmax,200,0.,10.);
1278 fhPtHbpZTNeutral->SetYTitle("ln(1/z_{T})");
1279 fhPtHbpZTNeutral->SetXTitle("p_{T trigger}");
1281 fhPtHbpZTUeNeutral =
1282 new TH2F("hHbpZTUeNeutral","#xi = ln(1/x_{E}) for #pi^{0} associated",
1283 nptbins,ptmin,ptmax,200,0.,10.);
1284 fhPtHbpXEUeNeutral->SetYTitle("ln(1/z_{T})");
1285 fhPtHbpXEUeNeutral->SetXTitle("p_{T trigger}");
1287 outputContainer->Add(fhDeltaPhiDeltaEtaNeutral);
1288 outputContainer->Add(fhPhiNeutral) ;
1289 outputContainer->Add(fhEtaNeutral) ;
1290 outputContainer->Add(fhDeltaPhiNeutral) ;
1291 outputContainer->Add(fhDeltaPhiNeutralPt) ;
1292 outputContainer->Add(fhDeltaPhiUeNeutralPt) ;
1293 outputContainer->Add(fhDeltaEtaNeutral) ;
1294 outputContainer->Add(fhXENeutral) ;
1295 outputContainer->Add(fhXEUeNeutral) ;
1296 outputContainer->Add(fhPtHbpXENeutral) ;
1297 outputContainer->Add(fhPtHbpXEUeNeutral) ;
1298 outputContainer->Add(fhZTNeutral) ;
1299 outputContainer->Add(fhZTUeNeutral) ;
1300 outputContainer->Add(fhPtHbpZTNeutral) ;
1301 outputContainer->Add(fhPtHbpZTUeNeutral) ;
1303 if(fPi0Trigger || fDecayTrigger)
1305 fhDeltaPhiDecayNeutral = new TH2F
1306 ("hDeltaPhiDecayNeutral","#phi_{Decay} - #phi_{h^{0}} vs p_{T Decay}",
1307 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1308 fhDeltaPhiDecayNeutral->SetYTitle("#Delta #phi");
1309 fhDeltaPhiDecayNeutral->SetXTitle("p_{T Decay} (GeV/c)");
1312 new TH2F("hXEDecayNeutral","x_{E} for decay trigger",
1313 nptbins,ptmin,ptmax,200,0.,2.);
1314 fhXEDecayNeutral->SetYTitle("x_{E}");
1315 fhXEDecayNeutral->SetXTitle("p_{T decay}");
1318 new TH2F("hZTDecayNeutral","z_{trigger h^{0}} = p_{T h^{0}} / p_{T Decay}",
1319 nptbins,ptmin,ptmax,200,0.,2.);
1320 fhZTDecayNeutral->SetYTitle("z_{h^{0}}");
1321 fhZTDecayNeutral->SetXTitle("p_{T decay}");
1323 outputContainer->Add(fhDeltaPhiDecayNeutral) ;
1324 outputContainer->Add(fhXEDecayNeutral) ;
1325 outputContainer->Add(fhZTDecayNeutral) ;
1331 fhDeltaPhiUeLeftNeutral = new TH2F
1332 ("hDeltaPhiUeLeftNeutralPt","#phi_{trigger} - #phi_{#Ueh^{0}} vs p_{T h^{0}} with neutral UE left side range of trigger particles",
1333 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1334 fhDeltaPhiUeLeftNeutral->SetYTitle("#Delta #phi");
1335 fhDeltaPhiUeLeftNeutral->SetXTitle("p_{T h^{0}} (GeV/c)");
1336 outputContainer->Add(fhDeltaPhiUeLeftNeutral) ;
1338 fhDeltaPhiUeRightNeutral = new TH2F
1339 ("hDeltaPhiUeRightNeutralPt","#phi_{trigger} - #phi_{#Ueh^{0}} vs p_{T Ueh^{0}} with neutral UE right side range of trigger particles",
1340 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1341 fhDeltaPhiUeRightNeutral->SetYTitle("#Delta #phi");
1342 fhDeltaPhiUeRightNeutral->SetXTitle("p_{T h^{0}} (GeV/c)");
1343 outputContainer->Add(fhDeltaPhiUeRightNeutral) ;
1346 new TH2F("hXEUeNeutralLeft","x_{E} = p_{T Ueh^{0}} / p_{T trigger} with neutral UE left side of trigger",
1347 nptbins,ptmin,ptmax,140,0.,2.);
1348 fhXEUeLeftNeutral->SetYTitle("z_{trigger Ueh^{0}}");
1349 fhXEUeLeftNeutral->SetXTitle("p_{T trigger}");
1350 outputContainer->Add(fhXEUeLeftNeutral) ;
1352 fhXEUeRightNeutral =
1353 new TH2F("hXEUeNeutralRight","x_{E} = p_{T Ueh^{0}} / p_{T trigger} with neutral UE right side of trigger",
1354 nptbins,ptmin,ptmax,200,0.,2.);
1355 fhXEUeRightNeutral->SetYTitle("z_{trigger Ueh^{0}}");
1356 fhXEUeRightNeutral->SetXTitle("p_{T trigger}");
1357 outputContainer->Add(fhXEUeRightNeutral) ;
1359 fhPtHbpXEUeLeftNeutral =
1360 new TH2F("hHbpXEUeNeutralLeft","#xi = ln(1/x_{E}) with neutral UE left side of trigger",
1361 nptbins,ptmin,ptmax,200,0.,10.);
1362 fhPtHbpXEUeLeftNeutral->SetYTitle("ln(1/x_{E})");
1363 fhPtHbpXEUeLeftNeutral->SetXTitle("p_{T trigger}");
1364 outputContainer->Add(fhPtHbpXEUeLeftNeutral) ;
1366 fhPtHbpXEUeRightNeutral =
1367 new TH2F("hHbpXEUeNeutralRight","#xi = ln(1/x_{E}) with neutral UE right side of trigger",
1368 nptbins,ptmin,ptmax,200,0.,10.);
1369 fhPtHbpXEUeRightNeutral->SetYTitle("ln(1/x_{E})");
1370 fhPtHbpXEUeRightNeutral->SetXTitle("p_{T trigger}");
1371 outputContainer->Add(fhPtHbpXEUeRightNeutral) ;
1374 new TH2F("hZTUeNeutralLeft","z_{trigger h^{0}} = p_{T Ueh^{0}} / p_{T trigger} with neutral UE left side of trigger",
1375 nptbins,ptmin,ptmax,140,0.,2.);
1376 fhZTUeLeftNeutral->SetYTitle("z_{trigger Ueh^{0}}");
1377 fhZTUeLeftNeutral->SetXTitle("p_{T trigger}");
1378 outputContainer->Add(fhZTUeLeftNeutral) ;
1380 fhZTUeRightNeutral =
1381 new TH2F("hZTUeNeutralRight","z_{trigger h^{0}} = p_{T Ueh^{0}} / p_{T trigger} with neutral UE right side of trigger",
1382 nptbins,ptmin,ptmax,200,0.,2.);
1383 fhZTUeRightNeutral->SetYTitle("z_{trigger Ueh^{0}}");
1384 fhZTUeRightNeutral->SetXTitle("p_{T trigger}");
1385 outputContainer->Add(fhZTUeRightNeutral) ;
1387 fhPtHbpZTUeLeftNeutral =
1388 new TH2F("hHbpZTUeNeutralLeft","#xi = ln(1/z_{T}) with neutral UE left side of trigger",
1389 nptbins,ptmin,ptmax,200,0.,10.);
1390 fhPtHbpZTUeLeftNeutral->SetYTitle("ln(1/z_{T})");
1391 fhPtHbpZTUeLeftNeutral->SetXTitle("p_{T trigger}");
1392 outputContainer->Add(fhPtHbpZTUeLeftNeutral) ;
1394 fhPtHbpZTUeRightNeutral =
1395 new TH2F("hHbpZTUeNeutralRight","#xi = ln(1/z_{T}) with neutral UE right side of trigger",
1396 nptbins,ptmin,ptmax,200,0.,10.);
1397 fhPtHbpZTUeRightNeutral->SetYTitle("ln(1/z_{T})");
1398 fhPtHbpZTUeRightNeutral->SetXTitle("p_{T trigger}");
1399 outputContainer->Add(fhPtHbpZTUeRightNeutral) ;
1403 }//Correlation with neutral hadrons
1405 //if data is MC, fill more histograms
1408 fh2phiLeadingParticle=new TH2F("h2phiLeadingParticle","#phi resolustion for trigger particles",nptbins,ptmin,ptmax,100,-1,1);
1409 fh2phiLeadingParticle->GetXaxis()->SetTitle("p_{T gen Leading} (GeV/c)");
1410 fh2phiLeadingParticle->GetYaxis()->SetTitle("(#phi_{rec}-#phi_{gen})/#phi_{gen}");
1412 fhMCPtLeading = new TH1F ("hMCPtLeading","MC : p_T distribution of leading particles", nptbins,ptmin,ptmax);
1413 fhMCPtLeading->SetXTitle("p_{T}^{trig} (GeV/c)");
1415 fhMCEtaCharged = new TH2F
1416 ("hMCEtaCharged","MC #eta_{h^{#pm}} vs p_{T #pm}",
1417 nptbins,ptmin,ptmax,netabins,etamin,etamax);
1418 fhMCEtaCharged->SetYTitle("#eta_{h^{#pm}} (rad)");
1419 fhMCEtaCharged->SetXTitle("p_{T #pm} (GeV/c)");
1421 fhMCPhiCharged = new TH2F
1422 ("hMCPhiCharged","#MC phi_{h^{#pm}} vs p_{T #pm}",
1423 200,ptmin,ptmax,nphibins,phimin,phimax);
1424 fhMCPhiCharged->SetYTitle("MC #phi_{h^{#pm}} (rad)");
1425 fhMCPhiCharged->SetXTitle("p_{T #pm} (GeV/c)");
1427 fhMCDeltaPhiDeltaEtaCharged = new TH2F
1428 ("hMCDeltaPhiDeltaEtaCharged","#MC phi_{trigger} - #phi_{h^{#pm}} vs #eta_{trigger} - #eta_{h^{#pm}}",
1429 140,-2.,5.,200,-2,2);
1430 fhMCDeltaPhiDeltaEtaCharged->SetXTitle("#Delta #phi");
1431 fhMCDeltaPhiDeltaEtaCharged->SetYTitle("#Delta #eta");
1433 fhMCDeltaEtaCharged = new TH2F
1434 ("hMCDeltaEtaCharged","MC #eta_{trigger} - #eta_{h^{#pm}} vs p_{T trigger} and p_{T assoc}",
1435 nptbins,ptmin,ptmax,200,-2,2);
1436 fhMCDeltaEtaCharged->SetYTitle("#Delta #eta");
1437 fhMCDeltaEtaCharged->SetXTitle("p_{T trigger} (GeV/c)");
1439 fhMCDeltaPhiCharged = new TH2F
1440 ("hMCDeltaPhiCharged","#phi_{trigger} - #phi_{h^{#pm}} vs p_{T trigger}",
1441 nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax);
1442 fhMCDeltaPhiCharged->SetYTitle("#Delta #phi");
1443 fhMCDeltaPhiCharged->SetXTitle("p_{T trigger} (GeV/c)");
1445 fhMCDeltaPhiChargedPt = new TH2F
1446 ("hMCDeltaPhiChargedPt","MC #phi_{trigger} - #phi_{#h^{#pm}} vs p_{T h^{#pm}}",
1447 nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax);
1448 fhMCDeltaPhiChargedPt->SetYTitle("#Delta #phi");
1449 fhMCDeltaPhiChargedPt->SetXTitle("p_{T h^{#pm}} (GeV/c)");
1452 new TH2F("hMCPtXECharged","x_{E}",
1453 nptbins,ptmin,ptmax,200,0.,2.);
1454 fhMCPtXECharged->SetYTitle("x_{E}");
1455 fhMCPtXECharged->SetXTitle("p_{T trigger}");
1458 new TH2F("hMCPtXEUeCharged","x_{E}",
1459 nptbins,ptmin,ptmax,200,0.,2.);
1460 fhMCPtXEUeCharged->SetYTitle("x_{E}");
1461 fhMCPtXEUeCharged->SetXTitle("p_{T trigger}");
1463 fhMCPtHbpXECharged =
1464 new TH2F("hMCHbpXECharged","MC #xi = ln(1/x_{E}) with charged hadrons",
1465 nptbins,ptmin,ptmax,200,0.,10.);
1466 fhMCPtHbpXECharged->SetYTitle("ln(1/x_{E})");
1467 fhMCPtHbpXECharged->SetXTitle("p_{T trigger}");
1469 fhMCPtHbpXEUeCharged =
1470 new TH2F("hMCPtHbpXEUeCharged","#xi = ln(1/x_{E}) with charged hadrons,Underlying Event",
1471 nptbins,ptmin,ptmax,200,0.,10.);
1472 fhMCPtHbpXEUeCharged->SetYTitle("ln(1/x_{E})");
1473 fhMCPtHbpXEUeCharged->SetXTitle("p_{T trigger}");
1476 new TH1F("hMCUePart","MC UE particles distribution vs pt trig",
1477 nptbins,ptmin,ptmax);
1478 fhMCUePart->SetYTitle("dNch");
1479 fhMCUePart->SetXTitle("p_{T trigger}");
1482 new TH2F("hMCPtZTCharged","z_{T}",
1483 nptbins,ptmin,ptmax,200,0.,2.);
1484 fhMCPtZTCharged->SetYTitle("z_{T}");
1485 fhMCPtZTCharged->SetXTitle("p_{T trigger}");
1487 fhMCPtHbpZTCharged =
1488 new TH2F("hMCHbpZTCharged","MC #xi = ln(1/z_{T}) with charged hadrons",
1489 nptbins,ptmin,ptmax,200,0.,10.);
1490 fhMCPtHbpZTCharged->SetYTitle("ln(1/z_{T})");
1491 fhMCPtHbpZTCharged->SetXTitle("p_{T trigger}");
1494 new TH2F("hMCPtTrigPout","AOD MC Pout with triggers",
1495 nptbins,ptmin,ptmax,2*nptbins,-ptmax,ptmax);
1496 fhMCPtTrigPout->SetYTitle("p_{out} (GeV/c)");
1497 fhMCPtTrigPout->SetXTitle("p_{T trigger} (GeV/c)");
1499 fhMCPtAssocDeltaPhi =
1500 new TH2F("hMCPtAssocDeltaPhi","AOD MC delta phi with associated charged hadrons",
1501 nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax);
1502 fhMCPtAssocDeltaPhi->SetYTitle("#Delta #phi");
1503 fhMCPtAssocDeltaPhi->SetXTitle("p_{T trigger} (GeV/c)");
1505 outputContainer->Add(fh2phiLeadingParticle);
1506 outputContainer->Add(fhMCPtLeading);
1507 outputContainer->Add(fhMCDeltaPhiDeltaEtaCharged);
1508 outputContainer->Add(fhMCPhiCharged) ;
1509 outputContainer->Add(fhMCEtaCharged) ;
1510 outputContainer->Add(fhMCDeltaEtaCharged) ;
1511 outputContainer->Add(fhMCDeltaPhiCharged) ;
1513 outputContainer->Add(fhMCDeltaPhiChargedPt) ;
1514 outputContainer->Add(fhMCPtXECharged) ;
1515 outputContainer->Add(fhMCPtXEUeCharged) ;
1516 outputContainer->Add(fhMCPtZTCharged) ;
1517 outputContainer->Add(fhMCPtHbpXECharged) ;
1518 outputContainer->Add(fhMCPtHbpXEUeCharged);
1519 outputContainer->Add(fhMCUePart);
1520 outputContainer->Add(fhMCPtHbpZTCharged) ;
1521 outputContainer->Add(fhMCPtTrigPout) ;
1522 outputContainer->Add(fhMCPtAssocDeltaPhi) ;
1523 } //for MC histogram
1527 //create event containers
1529 if(!fUseMixStoredInReader || (fUseMixStoredInReader && !GetReader()->ListWithMixedEventsForTracksExists()))
1532 Int_t nvz = GetNZvertBin();
1533 Int_t nrp = GetNRPBin();
1534 Int_t nce = GetNCentrBin();
1536 fListMixEvents= new TList*[nvz*nrp*nce] ;
1538 for( Int_t ice = 0 ; ice < nce ; ice++ )
1540 for( Int_t ivz = 0 ; ivz < nvz ; ivz++ )
1542 for( Int_t irp = 0 ; irp < nrp ; irp++ )
1544 Int_t bin = GetEventMixBin(ice,ivz,irp); //ic*nvz*nrp+iz*nrp+irp;
1546 //printf("GetCreateOutputObjects - Bins : cent %d, vz %d, RP %d, event %d/%d\n",
1547 // ic,iz, irp, bin);
1549 fListMixEvents[bin] = new TList() ;
1550 fListMixEvents[bin]->SetOwner(kFALSE);
1556 //Init the list in the reader if not done previously
1557 if(!GetReader()->ListWithMixedEventsForTracksExists() && fUseMixStoredInReader)
1559 //printf("%s : Set the list of events \n",GetInputAODName().Data());
1560 GetReader()->SetListWithMixedEventsForTracks(fListMixEvents);
1563 fhEventBin=new TH1I("hEventBin","Number of real events per bin(cen,vz,rp)",
1564 GetNCentrBin()*GetNZvertBin()*GetNRPBin()+1,0,
1565 GetNCentrBin()*GetNZvertBin()*GetNRPBin()+1) ;
1566 fhEventBin->SetXTitle("bin");
1567 outputContainer->Add(fhEventBin) ;
1569 fhEventMixBin=new TH1I("hEventMixBin","Number of events per bin(cen,vz,rp)",
1570 GetNCentrBin()*GetNZvertBin()*GetNRPBin()+1,0,
1571 GetNCentrBin()*GetNZvertBin()*GetNRPBin()+1) ;
1572 fhEventMixBin->SetXTitle("bin");
1573 outputContainer->Add(fhEventMixBin) ;
1575 fhNtracksAll=new TH1F("hNtracksAll","Number of tracks w/o event trigger",2000,0,2000);
1576 outputContainer->Add(fhNtracksAll);
1578 fhNtracksTrigger=new TH1F("hNtracksTriggerEvent","Number of tracks w/ event trigger",2000,0,2000);
1579 outputContainer->Add(fhNtracksTrigger);
1581 fhNtracksMB=new TH1F("hNtracksMBEvent","Number of tracks w/ event trigger kMB",2000,0,2000);
1582 outputContainer->Add(fhNtracksMB);
1584 fhMixDeltaPhiCharged = new TH2F
1585 ("hMixDeltaPhiCharged","Mixed event : #phi_{trigger} - #phi_{h^{#pm}} vs p_{T trigger}",
1586 nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax);
1587 fhMixDeltaPhiCharged->SetYTitle("#Delta #phi");
1588 fhMixDeltaPhiCharged->SetXTitle("p_{T trigger} (GeV/c)");
1589 outputContainer->Add(fhMixDeltaPhiCharged);
1591 fhMixDeltaPhiDeltaEtaCharged = new TH2F
1592 ("hMixDeltaPhiDeltaEtaCharged","Mixed event : #phi_{trigger} - #phi_{h^{#pm}} vs #eta_{trigger} - #eta_{h^{#pm}}",
1593 ndeltaphibins ,deltaphimin,deltaphimax,ndeltaetabins ,deltaetamin,deltaetamax);
1594 fhMixDeltaPhiDeltaEtaCharged->SetXTitle("#Delta #phi");
1595 fhMixDeltaPhiDeltaEtaCharged->SetYTitle("#Delta #eta");
1596 outputContainer->Add(fhMixDeltaPhiDeltaEtaCharged);
1598 fhMixDeltaPhiChargedAssocPtBin = new TH2F*[fNAssocPtBins] ;
1599 fhMixDeltaPhiChargedAssocPtBinDEta08 = new TH2F*[fNAssocPtBins] ;
1600 fhMixDeltaPhiDeltaEtaChargedAssocPtBin = new TH2F*[fNAssocPtBins] ;
1602 for(Int_t i = 0 ; i < fNAssocPtBins ; i++)
1604 fhMixDeltaPhiChargedAssocPtBin[i] = new TH2F(Form("hMixDeltaPhiChargedAssocPtBin%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1605 Form("Mixed event #Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1606 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1607 fhMixDeltaPhiChargedAssocPtBin[i]->SetXTitle("p_{T trigger}");
1608 fhMixDeltaPhiChargedAssocPtBin[i]->SetYTitle("#Delta #phi");
1610 fhMixDeltaPhiChargedAssocPtBinDEta08[i] = new TH2F(Form("hMixDeltaPhiDeltaEta0.8ChargedAssocPtBinDEta08%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1611 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]),
1612 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1613 fhMixDeltaPhiChargedAssocPtBinDEta08[i]->SetXTitle("p_{T trigger}");
1614 fhMixDeltaPhiChargedAssocPtBinDEta08[i]->SetYTitle("#Delta #phi");
1616 fhMixDeltaPhiDeltaEtaChargedAssocPtBin[i] = new TH2F(Form("hMixDeltaPhiDeltaEtaChargedAssocPtBin%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1617 Form("Mixed event #Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
1618 ndeltaphibins ,deltaphimin,deltaphimax,ndeltaetabins ,deltaetamin,deltaetamax);
1619 fhMixDeltaPhiDeltaEtaChargedAssocPtBin[i]->SetXTitle("#Delta #phi");
1620 fhMixDeltaPhiDeltaEtaChargedAssocPtBin[i]->SetYTitle("#Delta #eta");
1622 outputContainer->Add(fhMixDeltaPhiChargedAssocPtBin[i]);
1623 outputContainer->Add(fhMixDeltaPhiChargedAssocPtBinDEta08[i]);
1624 outputContainer->Add(fhMixDeltaPhiDeltaEtaChargedAssocPtBin[i]);
1629 return outputContainer;
1633 //_________________________________________________________________________________________________
1634 Bool_t AliAnaParticleHadronCorrelation::GetDecayPhotonMomentum(const AliAODPWG4Particle* trigger,
1635 TLorentzVector & mom1,
1636 TLorentzVector & mom2)
1638 // Get the momentum of the pi0/eta assigned decay photons
1639 // In case of pi0/eta trigger, we may want to check their decay correlation,
1640 // get their decay children
1642 Int_t indexPhoton1 = trigger->GetCaloLabel(0);
1643 Int_t indexPhoton2 = trigger->GetCaloLabel(1);
1644 Float_t ptTrig = trigger->Pt();
1646 if(indexPhoton1!=-1 || indexPhoton2!=-1) return kFALSE;
1649 printf("AliAnaParticleHadronCorrelation::GetDecayPhotonMomentum() - indexPhoton1 = %d, indexPhoton2 = %d \n", indexPhoton1, indexPhoton2);
1651 TObjArray * clusters = 0x0 ;
1652 if(trigger->GetDetector()=="EMCAL") clusters = GetEMCALClusters() ;
1653 else clusters = GetPHOSClusters() ;
1655 for(Int_t iclus = 0; iclus < clusters->GetEntriesFast(); iclus++)
1657 AliVCluster * photon = (AliVCluster*) (clusters->At(iclus));
1658 if(photon->GetID()==indexPhoton1)
1660 photon->GetMomentum(mom1,GetVertex(0)) ;
1661 if(ptTrig) fhPtPi0DecayRatio->Fill(ptTrig, mom1.Pt()/ptTrig);
1663 if(photon->GetID()==indexPhoton2)
1665 photon->GetMomentum(mom1,GetVertex(0)) ;
1666 if(ptTrig > 0) fhPtPi0DecayRatio->Fill(ptTrig, mom2.Pt()/ptTrig);
1669 if(GetDebug() > 1)printf("AliAnaParticleHadronCorrelation::GetDecayPhotonMomentum() - Photon1 = %f, Photon2 = %f \n", mom1.Pt(), mom2.Pt());
1677 //____________________________________________________
1678 void AliAnaParticleHadronCorrelation::InitParameters()
1681 //Initialize the parameters of the analysis.
1682 SetInputAODName("Particle");
1683 SetAODObjArrayName("Hadrons");
1684 AddToHistogramsName("AnaHadronCorr_");
1686 SetPtCutRange(0.,300);
1687 fDeltaPhiMinCut = 1.5 ;
1688 fDeltaPhiMaxCut = 4.5 ;
1689 fSelectIsolated = kFALSE;
1690 fMakeSeveralUE = kFALSE;
1691 fUeDeltaPhiMinCut = 1. ;
1692 fUeDeltaPhiMaxCut = 1.5 ;
1694 fNeutralCorr = kFALSE ;
1695 fPi0Trigger = kFALSE ;
1696 fDecayTrigger = kFALSE ;
1697 fHMPIDCorrelation = kFALSE ;
1699 fMakeAbsoluteLeading = kTRUE;
1700 fMakeNearSideLeading = kFALSE;
1703 fAssocPtBinLimit[0] = 0.2 ;
1704 fAssocPtBinLimit[1] = 2.0 ;
1705 fAssocPtBinLimit[2] = 4.0 ;
1706 fAssocPtBinLimit[3] = 6.0 ;
1707 fAssocPtBinLimit[4] = 8.0 ;
1708 fAssocPtBinLimit[5] = 10. ;
1709 fAssocPtBinLimit[6] = 12. ;
1710 fAssocPtBinLimit[7] = 15. ;
1711 fAssocPtBinLimit[8] = 25. ;
1712 fAssocPtBinLimit[9] = 50. ;
1714 fUseMixStoredInReader = kTRUE;
1721 //__________________________________________________________
1722 void AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD()
1724 //Particle-Hadron Correlation Analysis, fill AODs
1726 if(!GetInputAODBranch())
1728 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - No input particles in AOD with name branch < %s >, STOP \n",GetInputAODName().Data());
1732 if(strcmp(GetInputAODBranch()->GetClass()->GetName(), "AliAODPWG4ParticleCorrelation"))
1734 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());
1740 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - Begin hadron correlation analysis, fill AODs \n");
1741 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - In particle branch aod entries %d\n", GetInputAODBranch()->GetEntriesFast());
1742 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - In CTS aod entries %d\n", GetCTSTracks() ->GetEntriesFast());
1743 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - In EMCAL aod entries %d\n", GetEMCALClusters()->GetEntriesFast());
1744 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - In PHOS aod entries %d\n", GetPHOSClusters() ->GetEntriesFast());
1747 //Get the vertex and check it is not too large in z
1748 Double_t v[3] = {0,0,0}; //vertex ;
1749 GetReader()->GetVertex(v);
1750 if(!GetMixedEvent() && TMath::Abs(v[2]) > GetZvertexCut()) return ;
1752 // Fill the pool with tracks if requested
1753 if(DoOwnMix()) FillChargedEventMixPool();
1755 //Loop on stored AOD particles, find leading trigger
1756 Double_t ptTrig = fMinTriggerPt ;
1757 fLeadingTriggerIndex = -1 ;
1758 Int_t naod = GetInputAODBranch()->GetEntriesFast() ;
1759 for(Int_t iaod = 0; iaod < naod ; iaod++)
1761 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1763 // Vertex cut in case of mixing
1764 Int_t check = CheckMixedEventVertex(particle->GetCaloLabel(0), particle->GetTrackLabel(0));
1765 if(check == 0) continue;
1766 if(check == -1) return;
1768 // find the leading particles with highest momentum
1769 if (particle->Pt() > ptTrig)
1771 ptTrig = particle->Pt() ;
1772 fLeadingTriggerIndex = iaod ;
1774 }// finish search of leading trigger particle
1777 //Do correlation with leading particle
1778 if(fLeadingTriggerIndex >= 0)
1781 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(fLeadingTriggerIndex));
1783 //check if the particle is isolated or if we want to take the isolation into account
1784 if(OnlyIsolated() && !particle->IsIsolated()) return;
1786 //Make correlation with charged hadrons
1787 Bool_t okcharged = kTRUE;
1788 Bool_t okneutral = kTRUE;
1789 if(GetReader()->IsCTSSwitchedOn() )
1790 okcharged = MakeChargedCorrelation(particle, GetCTSTracks(),kFALSE);
1792 TObjArray * pi0list = (TObjArray*) GetAODBranch(fPi0AODBranchName); //For the future, foresee more possible pi0 lists
1793 if(fNeutralCorr && pi0list && pi0list->GetEntriesFast() > 0)
1794 okneutral = MakeNeutralCorrelation(particle, pi0list,kFALSE);
1796 }//Correlate leading
1798 if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - End fill AODs \n");
1802 //_________________________________________________________________
1803 void AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms()
1805 //Particle-Hadron Correlation Analysis, fill histograms
1807 if(!GetInputAODBranch())
1809 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - No input particles in AOD with name branch < %s >, STOP \n",GetInputAODName().Data());
1815 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - Begin hadron correlation analysis, fill histograms \n");
1816 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - In particle branch aod entries %d\n", GetInputAODBranch()->GetEntriesFast());
1819 //Get the vertex and check it is not too large in z
1820 Double_t v[3] = {0,0,0}; //vertex ;
1821 GetReader()->GetVertex(v);
1822 if(!GetMixedEvent() && TMath::Abs(v[2]) > GetZvertexCut()) return ;
1824 //Loop on stored AOD particles, find leading
1825 Double_t ptTrig = fMinTriggerPt;
1826 if(fLeadingTriggerIndex < 0)
1828 //Search leading if not done before
1829 Int_t naod = GetInputAODBranch()->GetEntriesFast() ;
1830 for(Int_t iaod = 0; iaod < naod ; iaod++)
1831 { //loop on input trigger AOD file
1832 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
1834 // Vertex cut in case of mixing
1835 Int_t check = CheckMixedEventVertex(particle->GetCaloLabel(0), particle->GetTrackLabel(0));
1836 if(check == 0) continue;
1837 if(check == -1) return;
1839 //check if the particle is isolated or if we want to take the isolation into account
1840 if(OnlyIsolated() && !particle->IsIsolated()) continue;
1842 //find the leading particles with highest momentum
1843 if (particle->Pt() > ptTrig)
1845 ptTrig = particle->Pt() ;
1846 fLeadingTriggerIndex = iaod ;
1849 }// Finish search of leading trigger particle
1850 }// Search leading if not done before
1852 if(fLeadingTriggerIndex >= 0 )
1853 { //using trigger particle to do correlations
1855 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(fLeadingTriggerIndex));
1857 // check if it was a calorimeter cluster and if the SS cut was requested, if so, apply it
1858 Int_t clID1 = particle->GetCaloLabel(0) ;
1859 Int_t clID2 = particle->GetCaloLabel(1) ; // for photon clusters should not be set.
1860 //printf("Leading for for %s: id1 %d, id2 %d, min %f, max %f, det %s\n",
1861 // GetInputAODName().Data(),clID1,clID2,fM02MinCut,fM02MaxCut,(particle->GetDetector()).Data());
1863 if(clID1 > 0 && clID2 < 0 && fM02MaxCut > 0 && fM02MinCut > 0)
1866 TObjArray* clusters = 0x0;
1867 if (particle->GetDetector() == "EMCAL") clusters = GetEMCALClusters();
1868 else if(particle->GetDetector() == "PHOS" ) clusters = GetPHOSClusters();
1872 AliVCluster *cluster = FindCluster(clusters,clID1,iclus);
1873 Float_t m02 = cluster->GetM02();
1874 //printf("\t Check m02 = %2.2f\n",m02);
1875 if(m02 > fM02MaxCut || m02 < fM02MinCut)
1877 //printf("\t \t Not accepted\n");
1883 // Check if trigger is in fiducial region
1884 if(IsFiducialCutOn())
1886 Bool_t in = GetFiducialCut()->IsInFiducialCut(*particle->Momentum(),particle->GetDetector()) ;
1890 // Check if the particle is isolated or if we want to take the isolation into account
1891 if(OnlyIsolated() && !particle->IsIsolated()) return;
1893 // Make correlation with charged hadrons
1894 Bool_t okcharged = kTRUE;
1895 Bool_t okneutral = kTRUE;
1896 if(GetReader()->IsCTSSwitchedOn() )
1898 okcharged = MakeChargedCorrelation(particle, GetCTSTracks(),kTRUE);
1901 MakeMCChargedCorrelation(particle);
1905 TObjArray * pi0list = (TObjArray*) GetAODBranch(fPi0AODBranchName); //For the future, foresee more possible pi0 lists
1906 if(fNeutralCorr && pi0list)
1908 if(pi0list->GetEntriesFast() > 0)
1909 okneutral = MakeNeutralCorrelation(particle, pi0list,kTRUE);
1912 // Fill leading particle histogram if correlation went well and
1913 // no problem was found, like not absolute leading, or bad vertex in mixing.
1914 if(okcharged && okneutral)
1916 Float_t pt = particle->Pt();
1917 fhPtLeading->Fill(pt);
1919 Float_t phi = particle->Phi();
1920 if(phi<0)phi+=TMath::TwoPi();
1921 fhPhiLeading->Fill(pt, phi);
1923 fhEtaLeading->Fill(pt, particle->Eta());
1924 //printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - Leading particle : pt %f, eta %f, phi %f\n",particle->Pt(),particle->Eta(),phi);
1926 Float_t cen = GetEventCentrality();
1927 Float_t ep = GetEventPlaneAngle();
1929 fhPtLeadingCentrality ->Fill(pt,cen);
1930 fhPtLeadingEventPlane ->Fill(pt,ep);
1931 fhLeadingEventPlaneCentrality->Fill(cen,ep);
1933 }//ok charged && neutral
1936 //Reinit for next event
1937 fLeadingTriggerIndex = -1;
1939 if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - End fill histograms \n");
1942 //___________________________________________________________________________________________________________
1943 Bool_t AliAnaParticleHadronCorrelation::MakeChargedCorrelation(AliAODPWG4ParticleCorrelation *aodParticle,
1944 const TObjArray* pl, const Bool_t bFillHisto)
1946 // Charged Hadron Correlation Analysis
1948 printf("AliAnaParticleHadronCorrelation::MakeChargedCorrelation() - Make trigger particle - charged hadron correlation \n");
1950 Float_t phiTrig = aodParticle->Phi();
1951 Float_t etaTrig = aodParticle->Eta();
1952 Float_t ptTrig = aodParticle->Pt();
1953 Bool_t decay = aodParticle->IsTagged();
1955 Float_t pt = -100. ;
1956 Float_t zT = -100. ;
1957 Float_t xE = -100. ;
1958 Float_t hbpXE = -100. ;
1959 Float_t hbpZT = -100. ;
1960 Float_t phi = -100. ;
1961 Float_t eta = -100. ;
1962 Float_t pout = -100. ;
1963 Float_t deltaPhi = -100. ;
1966 TLorentzVector photonMom ;
1967 TObjArray * reftracks = 0x0;
1969 Int_t nTracks = GetCTSTracks()->GetEntriesFast() ;
1971 // Mixed event settings
1972 Int_t evtIndex11 = -1 ; // cluster trigger or pi0 trigger
1973 Int_t evtIndex12 = -1 ; // pi0 trigger
1974 Int_t evtIndex13 = -1 ; // charged trigger
1976 Double_t v[3] = {0,0,0}; //vertex ;
1977 GetReader()->GetVertex(v);
1979 if (GetMixedEvent())
1981 evtIndex11 = GetMixedEvent()->EventIndexForCaloCluster(aodParticle->GetCaloLabel(0)) ;
1982 evtIndex12 = GetMixedEvent()->EventIndexForCaloCluster(aodParticle->GetCaloLabel(1)) ;
1983 evtIndex13 = GetMixedEvent()->EventIndex(aodParticle->GetTrackLabel(0)) ;
1986 // In case of pi0/eta trigger, we may want to check their decay correlation,
1987 // get their decay children
1988 TLorentzVector decayMom1;
1989 TLorentzVector decayMom2;
1990 Bool_t decayFound = kFALSE;
1991 if(fPi0Trigger && bFillHisto) decayFound = GetDecayPhotonMomentum(aodParticle,decayMom1, decayMom2);
1993 //-----------------------------------------------------------------------
1994 //Track loop, select tracks with good pt, phi and fill AODs or histograms
1995 //-----------------------------------------------------------------------
1997 for(Int_t ipr = 0;ipr < pl->GetEntriesFast() ; ipr ++ )
1999 AliVTrack * track = (AliVTrack *) (pl->At(ipr)) ;
2001 Double_t mom[3] = {track->Px(),track->Py(),track->Pz()};
2002 p3.SetXYZ(mom[0],mom[1],mom[2]);
2006 if(phi < 0) phi+=TMath::TwoPi();
2008 //Select only hadrons in pt range
2009 if(pt < fMinAssocPt || pt > fMaxAssocPt) continue ;
2011 //remove trigger itself for correlation when use charged triggers
2012 if( track->GetID() == aodParticle->GetTrackLabel(0) || track->GetID() == aodParticle->GetTrackLabel(1) ||
2013 track->GetID() == aodParticle->GetTrackLabel(2) || track->GetID() == aodParticle->GetTrackLabel(3) )
2016 //jump out this event if near side associated particle pt larger than trigger
2017 if (fMakeNearSideLeading)
2019 if(pt > ptTrig && TMath::Abs(phi-phiTrig) < TMath::PiOver2()) return kFALSE;
2021 //jump out this event if there is any other particle with pt larger than trigger
2022 else if(fMakeAbsoluteLeading)
2024 if(pt > ptTrig) return kFALSE;
2027 //Only for mixed event
2028 Int_t evtIndex2 = 0 ;
2029 if (GetMixedEvent())
2031 evtIndex2 = GetMixedEvent()->EventIndex(track->GetID()) ;
2032 if (evtIndex11 == evtIndex2 || evtIndex12 == evtIndex2 || evtIndex13 == evtIndex2 ) // photon and track from different events
2035 if (TMath::Abs(GetVertex(evtIndex2)[2]) > GetZvertexCut())
2044 printf("AliAnaParticleHadronCorrelation::MakeChargedCorrelation() - Selected charge for momentum imbalance: pt %2.2f, phi %2.2f, eta %2.2f \n",pt,phi,eta);
2046 // Set the pt associated bin for the defined bins
2047 Int_t assocBin = -1;
2048 for(Int_t i = 0 ; i < fNAssocPtBins ; i++)
2050 if(pt > fAssocPtBinLimit[i] && pt < fAssocPtBinLimit[i+1]) assocBin= i;
2054 // calculate deltaPhi for later, shift when needed
2055 FillChargedAngularCorrelationHistograms(pt, ptTrig, assocBin, phi, phiTrig, deltaPhi,
2056 eta, etaTrig, decay, track->GetHMPIDsignal(),nTracks);
2058 // Imbalance zT/xE/pOut
2060 if(zT > 0 ) hbpZT = TMath::Log(1./zT);
2063 xE =-pt/ptTrig*TMath::Cos(deltaPhi); // -(px*pxTrig+py*pyTrig)/(ptTrig*ptTrig);
2064 //if(xE <0.)xE =-xE;
2065 if(xE > 0 ) hbpXE = TMath::Log(1./xE);
2068 pout = pt*TMath::Sin(deltaPhi) ;
2070 //delta phi cut for momentum imbalance correlation
2071 if ( (deltaPhi > fDeltaPhiMinCut) && (deltaPhi < fDeltaPhiMaxCut) )
2074 FillChargedMomentumImbalanceHistograms(ptTrig, pt, xE, hbpXE, zT, hbpZT, pout, deltaPhi,
2075 nTracks, track->Charge(), assocBin, decay);
2078 if ( (deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < fUeDeltaPhiMaxCut) )
2081 FillChargedUnderlyingEventHistograms(ptTrig, pt, deltaPhi, nTracks);
2083 fhUePart->Fill(ptTrig);
2087 if(fPi0Trigger && decayFound)
2088 FillDecayPhotonCorrelationHistograms(pt, phi, decayMom1,decayMom2, kTRUE) ;
2090 //several UE calculation
2091 if(fMakeSeveralUE) FillChargedUnderlyingEventSidesHistograms(ptTrig,pt,xE,hbpXE,zT,hbpZT,deltaPhi);
2099 reftracks = new TObjArray(0);
2100 TString trackname = Form("%s+Tracks", GetAODObjArrayName().Data());
2101 reftracks->SetName(trackname.Data());
2102 reftracks->SetOwner(kFALSE);
2105 reftracks->Add(track);
2107 }//aod particle loop
2110 //Fill AOD with reference tracks, if not filling histograms
2111 if(!bFillHisto && reftracks)
2113 aodParticle->AddObjArray(reftracks);
2116 //Own mixed event, add event and remove previous or fill the mixed histograms
2117 if(DoOwnMix() && bFillHisto)
2119 MakeChargedMixCorrelation(aodParticle);
2127 //_________________________________________________________________________________________________________
2128 void AliAnaParticleHadronCorrelation::MakeChargedMixCorrelation(AliAODPWG4ParticleCorrelation *aodParticle)
2130 // Mix current trigger with tracks in another MB event
2132 if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation() - Make trigger particle - charged hadron mixed event correlation \n");
2134 if(GetMixedEvent()) return; // This is not the mixed event from general mixing frame
2136 // Get the event with similar caracteristics
2137 //printf("MakeChargedMixCorrelation for %s\n",GetInputAODName().Data());
2139 AliAnalysisManager * manager = AliAnalysisManager::GetAnalysisManager();
2141 AliInputEventHandler * inputHandler = dynamic_cast<AliInputEventHandler*>(manager->GetInputEventHandler());
2143 if(!inputHandler) return;
2145 if(!(inputHandler->IsEventSelected( ) & GetReader()->GetEventTriggerMask())) return;
2147 // Get the pool, check if it exits
2148 Int_t eventBin = GetEventMixBin();
2150 fhEventBin->Fill(eventBin);
2152 //Check that the bin exists, if not (bad determination of RP, centrality or vz bin) do nothing
2153 if(eventBin < 0) return;
2156 if(fUseMixStoredInReader) pool = GetReader()->GetListWithMixedEventsForTracks(eventBin);
2157 else pool = fListMixEvents[eventBin];
2161 Double_t ptTrig = aodParticle->Pt();
2162 Double_t etaTrig = aodParticle->Eta();
2163 Double_t phiTrig = aodParticle->Phi();
2164 if(phiTrig < 0.) phiTrig+=TMath::TwoPi();
2167 printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation() - Pool bin %d size %d, leading trigger pt=%f, phi=%f, eta=%f\n",
2168 eventBin,pool->GetSize(), ptTrig,phiTrig,etaTrig);
2170 Double_t ptAssoc = -999.;
2171 Double_t phiAssoc = -999.;
2172 Double_t etaAssoc = -999.;
2173 Double_t deltaPhi = -999.;
2174 Double_t deltaEta = -999.;
2176 // Get the clusters array, needed for isolation
2177 TObjArray * caloList = 0x0; ;
2178 if (aodParticle->GetDetector() == "PHOS" )
2179 caloList = GetPHOSClusters();
2180 else if (aodParticle->GetDetector() == "EMCAL")
2181 caloList = GetEMCALClusters();
2183 //Start from first event in pool except if in this same event the pool was filled
2185 if(GetReader()->GetLastTracksMixedEvent() == GetEventNumber()) ev0 = 1;
2187 for(Int_t ev=ev0; ev < pool->GetSize(); ev++)
2189 TObjArray* bgTracks = static_cast<TObjArray*>(pool->At(ev));
2191 // Check if the particle is isolated in the mixed event, it not, do not fill the histograms
2194 Int_t n=0; Int_t nfrac = 0; Bool_t isolated = kFALSE; Float_t coneptsum = 0;
2195 GetIsolationCut()->MakeIsolationCut(bgTracks,caloList,
2196 GetReader(), GetCaloPID(),
2197 kTRUE, aodParticle, GetAODObjArrayName(),
2198 n,nfrac,coneptsum, isolated);
2199 printf("Isolated? %d - cone %f, ptthres %f",
2200 isolated,GetIsolationCut()->GetConeSize(),GetIsolationCut()->GetPtThreshold());
2201 if(caloList)printf(" - n clus %d",caloList->GetEntriesFast());
2202 if(bgTracks)printf(" - n track %d", bgTracks->GetEntriesFast());
2204 if(!isolated) return ;
2207 fhEventMixBin->Fill(eventBin);
2209 Int_t nTracks=bgTracks->GetEntriesFast();
2210 //printf("\t Read Pool event %d, nTracks %d\n",ev,nTracks);
2212 for(Int_t j1 = 0;j1 <nTracks; j1++ )
2214 AliAODPWG4Particle *track = (AliAODPWG4Particle*) bgTracks->At(j1) ;
2216 if(!track) continue;
2218 ptAssoc = track->Pt();
2219 etaAssoc = track->Eta();
2220 phiAssoc = track->Phi() ;
2221 if(phiAssoc < 0) phiAssoc+=TMath::TwoPi();
2223 if(IsFiducialCutOn())
2225 Bool_t in = GetFiducialCut()->IsInFiducialCut(*aodParticle->Momentum(),"CTS") ;
2229 deltaPhi = phiTrig-phiAssoc;
2230 if(deltaPhi < -TMath::PiOver2()) deltaPhi+=TMath::TwoPi();
2231 if(deltaPhi > 3*TMath::PiOver2()) deltaPhi-=TMath::TwoPi();
2232 deltaEta = etaTrig-etaAssoc;
2235 printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation(): deltaPhi= %f, deltaEta=%f\n",deltaPhi, deltaEta);
2237 // Set the pt associated bin for the defined bins
2238 Int_t assocBin = -1;
2239 for(Int_t i = 0 ; i < fNAssocPtBins ; i++)
2241 if(ptAssoc > fAssocPtBinLimit[i] && ptAssoc < fAssocPtBinLimit[i+1]) assocBin= i;
2244 fhMixDeltaPhiCharged ->Fill(ptTrig, deltaPhi);
2245 fhMixDeltaPhiDeltaEtaCharged->Fill(deltaPhi, deltaEta);
2247 if(assocBin < 0) continue ; // this pt bin was not considered
2249 if(TMath::Abs(deltaEta) > 0.8)
2250 fhMixDeltaPhiChargedAssocPtBinDEta08 [assocBin]->Fill(ptTrig, deltaPhi);
2252 fhMixDeltaPhiChargedAssocPtBin [assocBin]->Fill(ptTrig, deltaPhi);
2253 fhMixDeltaPhiDeltaEtaChargedAssocPtBin[assocBin]->Fill(deltaPhi, deltaEta);
2256 } // mixed event loop
2260 //________________________________________________________________________________________________________________
2261 Bool_t AliAnaParticleHadronCorrelation::MakeNeutralCorrelation(AliAODPWG4ParticleCorrelation * const aodParticle,
2262 const TObjArray* pi0list, const Bool_t bFillHisto)
2264 // Neutral Pion Correlation Analysis
2265 if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::MakeNeutralCorrelation() - Make trigger particle - pi0 correlation, %d pi0's \n",
2266 pi0list->GetEntriesFast());
2268 Int_t evtIndex11 = 0 ;
2269 Int_t evtIndex12 = 0 ;
2270 if (GetMixedEvent())
2272 evtIndex11 = GetMixedEvent()->EventIndexForCaloCluster(aodParticle->GetCaloLabel(0)) ;
2273 evtIndex12 = GetMixedEvent()->EventIndexForCaloCluster(aodParticle->GetCaloLabel(1)) ;
2276 Float_t pt = -100. ;
2277 Float_t zT = -100. ;
2278 Float_t phi = -100. ;
2279 Float_t eta = -100. ;
2280 Float_t xE = -100. ;
2281 Float_t hbpXE= -100. ;
2282 Float_t hbpZT= -100. ;
2284 Float_t ptTrig = aodParticle->Pt();
2285 Float_t phiTrig = aodParticle->Phi();
2286 Float_t etaTrig = aodParticle->Eta();
2287 Float_t deltaPhi= -100. ;
2289 TLorentzVector photonMom ;
2291 // In case of pi0/eta trigger, we may want to check their decay correlation,
2292 // get their decay children
2293 TLorentzVector decayMom1;
2294 TLorentzVector decayMom2;
2295 Bool_t decayFound = kFALSE;
2296 if(fPi0Trigger && bFillHisto) decayFound = GetDecayPhotonMomentum(aodParticle,decayMom1, decayMom2);
2298 TObjArray * refpi0 = 0x0;
2301 //Loop on stored AOD pi0
2303 Int_t naod = pi0list->GetEntriesFast();
2305 printf("AliAnaParticleHadronCorrelation::MakeNeutralCorrelationFillHistograms() - aod branch entries %d\n", naod);
2307 for(Int_t iaod = 0; iaod < naod ; iaod++)
2309 AliAODPWG4Particle* pi0 = (AliAODPWG4Particle*) (pi0list->At(iaod));
2311 Int_t evtIndex2 = 0 ;
2312 Int_t evtIndex3 = 0 ;
2313 if (GetMixedEvent())
2315 evtIndex2 = GetMixedEvent()->EventIndexForCaloCluster(pi0->GetCaloLabel(0)) ;
2316 evtIndex3 = GetMixedEvent()->EventIndexForCaloCluster(pi0->GetCaloLabel(1)) ;
2318 if (evtIndex11 == evtIndex2 || evtIndex12 == evtIndex2 ||
2319 evtIndex11 == evtIndex3 || evtIndex12 == evtIndex3) // trigger and pi0 are not from different events
2325 if(pt < fMinAssocPt || pt > fMaxAssocPt) continue ;
2327 //jump out this event if near side associated particle pt larger than trigger
2328 if (fMakeNearSideLeading)
2330 if(pt > ptTrig && TMath::Abs(phi-phiTrig) < TMath::PiOver2()) return kFALSE;
2332 //jump out this event if there is any other particle with pt larger than trigger
2333 else if(fMakeAbsoluteLeading)
2335 if(pt > ptTrig) return kFALSE;
2343 FillNeutralAngularCorrelationHistograms(pt, ptTrig, phi, phiTrig, deltaPhi, eta, etaTrig);
2346 xE =-pt/ptTrig*TMath::Cos(deltaPhi); // -(px*pxTrig+py*pyTrig)/(ptTrig*ptTrig);
2348 //if(xE <0.)xE =-xE;
2353 if(xE > 0 ) hbpXE = TMath::Log(1./xE);
2354 if(zT > 0 ) hbpZT = TMath::Log(1./zT);
2356 if(fPi0Trigger && decayFound)
2357 FillDecayPhotonCorrelationHistograms(pt, phi, decayMom1,decayMom2,kFALSE) ;
2359 //delta phi cut for correlation
2360 if( (deltaPhi > fDeltaPhiMinCut) && ( deltaPhi < fDeltaPhiMaxCut) )
2362 fhDeltaPhiNeutralPt->Fill(pt,deltaPhi);
2363 fhXENeutral ->Fill(ptTrig,xE);
2364 fhPtHbpXENeutral ->Fill(ptTrig,hbpXE);
2366 else if ( (deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < fUeDeltaPhiMaxCut) )
2368 fhDeltaPhiUeNeutralPt->Fill(pt,deltaPhi);
2369 fhXEUeNeutral ->Fill(ptTrig,xE);
2370 fhPtHbpXEUeNeutral ->Fill(ptTrig,hbpXE);
2373 //several UE calculation
2374 if(fMakeSeveralUE) FillChargedUnderlyingEventSidesHistograms(ptTrig,pt,xE,hbpXE,zT,hbpZT,deltaPhi);
2382 refpi0 = new TObjArray(0);
2383 refpi0->SetName(GetAODObjArrayName()+"Pi0s");
2384 refpi0->SetOwner(kFALSE);
2387 }//put references in trigger AOD
2390 printf("AliAnaParticleHadronCorrelation::MakeNeutralCorrelation() - Selected neutral for momentum imbalance: pt %2.2f, phi %2.2f, eta %2.2f \n",pt,phi,eta);
2397 //_________________________________________________________________________________________________________
2398 void AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation(AliAODPWG4ParticleCorrelation *aodParticle)
2400 // Charged Hadron Correlation Analysis with MC information
2403 printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation() - Make trigger particle - charged hadron correlation in AOD MC level\n");
2405 AliStack * stack = 0x0 ;
2406 TParticle * primary = 0x0 ;
2407 TClonesArray * mcparticles0 = 0x0 ;
2408 TClonesArray * mcparticles = 0x0 ;
2409 AliAODMCParticle * aodprimary = 0x0 ;
2411 Double_t eprim = 0 ;
2412 Double_t ptprim = 0 ;
2413 Double_t phiprim = 0 ;
2414 Double_t etaprim = 0 ;
2416 Int_t iParticle = 0 ;
2417 Double_t charge = 0.;
2420 if(GetReader()->ReadStack())
2422 nTracks = GetMCStack()->GetNtrack() ;
2426 nTracks = GetReader()->GetAODMCParticles()->GetEntriesFast() ;
2428 //Int_t trackIndex[nTracks];
2430 Int_t label= aodParticle->GetLabel();
2433 if(GetDebug() > 0) printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation *** bad label ***: label %d \n", label);
2438 if(GetReader()->ReadStack())
2440 stack = GetMCStack() ;
2443 printf(" AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation- Stack not available, is the MC handler called? STOP\n");
2447 nTracks=stack->GetNprimary();
2448 if(label >= stack->GetNtrack())
2450 if(GetDebug() > 2) printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation *** large label ***: label %d, n tracks %d \n", label, stack->GetNtrack());
2454 primary = stack->Particle(label);
2457 printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation *** no primary ***: label %d \n", label);
2463 eprim = primary->Energy();
2464 ptprim = primary->Pt();
2465 phiprim = primary->Phi();
2466 etaprim = primary->Eta();
2468 if(ptprim < 0.01 || eprim < 0.01) return ;
2470 for (iParticle = 0 ; iParticle < nTracks ; iParticle++)
2472 TParticle * particle = stack->Particle(iParticle);
2473 TLorentzVector momentum;
2475 //keep only final state particles
2476 if(particle->GetStatusCode()!=1) continue ;
2478 Int_t pdg = particle->GetPdgCode();
2480 charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge();
2482 particle->Momentum(momentum);
2484 //---------- Charged particles ----------------------
2487 //Particles in CTS acceptance
2488 Bool_t inCTS = GetFiducialCut()->IsInFiducialCut(momentum,"CTS");
2490 if(TMath::Abs(pdg) == 11 && stack->Particle(particle->GetFirstMother())->GetPdgCode()==22) continue ;
2494 if( label!=iParticle) // avoid trigger particle
2496 if(!FillChargedMCCorrelationHistograms(particle->Pt(),particle->Phi(),particle->Eta(),ptprim,phiprim,etaprim)) return;
2498 }// in CTS acceptance
2501 } //when the leading particles could trace back to MC
2503 else if(GetReader()->ReadAODMCParticles())
2505 //Get the list of MC particles
2506 mcparticles0 = GetReader()->GetAODMCParticles(0);
2507 if(!mcparticles0) return;
2508 if(label >=mcparticles0->GetEntriesFast())
2511 printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation *** large label ***: label %d, n tracks %d \n", label,mcparticles0->GetEntriesFast());
2515 aodprimary = (AliAODMCParticle*) mcparticles0->At(label);
2518 printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation *** no AOD primary ***: label %d \n", label);
2525 ptprim = aodprimary->Pt();
2526 phiprim = aodprimary->Phi();
2527 etaprim = aodprimary->Eta();
2528 eprim = aodprimary->E();
2530 Bool_t lead = kFALSE;
2532 if(ptprim < 0.01 || eprim < 0.01) return ;
2534 mcparticles= GetReader()->GetAODMCParticles();
2535 for (Int_t i = 0; i < nTracks; i++)
2537 AliAODMCParticle *part = (AliAODMCParticle*) mcparticles->At(i);
2539 if (!part->IsPhysicalPrimary()) continue;
2540 Int_t pdg = part->GetPdgCode();
2541 charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge();
2542 TLorentzVector momentum(part->Px(),part->Py(),part->Pz(),part->E());
2545 if(part->Pt()> GetReader()->GetCTSPtMin())
2547 //Particles in CTS acceptance
2548 Bool_t inCTS = GetFiducialCut()->IsInFiducialCut(momentum,"CTS");
2549 Int_t indexmother=part->GetMother();
2552 Int_t mPdg = ((AliAODMCParticle*) mcparticles->At(indexmother)) ->GetPdgCode();
2553 if(TMath::Abs(pdg) == 11 && mPdg == 22) continue;
2558 if( label!=iParticle) // avoid trigger particle
2560 if(!FillChargedMCCorrelationHistograms(part->Pt(),part->Phi(),part->Eta(),ptprim,phiprim,etaprim)) return;
2565 } //only charged particles
2566 } //MC particle loop
2567 if (lead) fhMCPtLeading->Fill(ptprim);
2568 } //when the leading particles could trace back to MC
2572 //_____________________________________________________________________
2573 void AliAnaParticleHadronCorrelation::Print(const Option_t * opt) const
2576 //Print some relevant parameters set for the analysis
2580 printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
2581 AliAnaCaloTrackCorrBaseClass::Print(" ");
2582 printf("Pt trigger > %3.2f\n", fMinTriggerPt) ;
2583 printf("Pt associated hadron < %3.2f\n", fMaxAssocPt) ;
2584 printf("Pt associated hadron > %3.2f\n", fMinAssocPt) ;
2585 printf("Phi trigger particle-Hadron < %3.2f\n", fDeltaPhiMaxCut) ;
2586 printf("Phi trigger particle-Hadron > %3.2f\n", fDeltaPhiMinCut) ;
2587 printf("Phi trigger particle-UeHadron < %3.2f\n", fUeDeltaPhiMaxCut) ;
2588 printf("Phi trigger particle-UeHadron > %3.2f\n", fUeDeltaPhiMinCut) ;
2589 printf("Isolated Trigger? %d\n" , fSelectIsolated) ;
2590 printf("Several UE? %d\n" , fMakeSeveralUE) ;
2591 printf("Name of AOD Pi0 Branch %s \n", fPi0AODBranchName.Data());
2592 printf("Do Decay-hadron correlation ? %d\n", fPi0Trigger) ;
2593 printf("Select absolute leading for cluster triggers ? %d or Near Side %d\n",
2594 fMakeAbsoluteLeading, fMakeNearSideLeading) ;
2595 printf("Trigger pt bins %d\n", fNAssocPtBins) ;
2596 for (Int_t ibin = 0; ibin<fNAssocPtBins; ibin++) {
2597 printf("\t bin %d = [%2.1f,%2.1f]\n", ibin, fAssocPtBinLimit[ibin], fAssocPtBinLimit[ibin+1]) ;
2602 //____________________________________________________________
2603 void AliAnaParticleHadronCorrelation::SetNAssocPtBins(Int_t n)
2605 // Set number of bins
2616 printf("n = larger than 9 or too small, set to 9 \n");
2621 //______________________________________________________________________________
2622 void AliAnaParticleHadronCorrelation::SetAssocPtBinLimit(Int_t ibin, Float_t pt)
2624 // Set the list of limits for the trigger pt bins
2626 if(ibin <= fNAssocPtBins || ibin >= 0)
2628 fAssocPtBinLimit[ibin] = pt ;
2632 printf("AliAnaParticleHadronCorrelation::SetAssocPtBinLimit() - bin number too large %d > %d or small, nothing done\n", ibin, fNAssocPtBins) ;