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
19 // in a previous analysis
21 //-- Author: Gustavo Conesa (LNF-INFN) (LPSC-IN2P3-CNRS)
22 // Yaxian Mao (LPSC-IN2P3-CNRS) and (CNWU) first usable implementation.
23 // Xiangrong Zhu (CNWU), implementtion of own mixing.
24 //////////////////////////////////////////////////////////////////////////////
27 // --- ROOT system ---
28 //#include "TClonesArray.h"
32 #include <TDatabasePDG.h>
34 //---- ANALYSIS system ----
35 #include "AliNeutralMesonSelection.h"
36 #include "AliAnaParticleHadronCorrelation.h"
37 #include "AliCaloTrackReader.h"
38 #include "AliAODPWG4ParticleCorrelation.h"
39 #include "AliFiducialCut.h"
40 #include "AliVTrack.h"
41 #include "AliVCluster.h"
42 #include "AliMCAnalysisUtils.h"
43 #include "TParticle.h"
45 #include "AliAODMCParticle.h"
46 #include "AliMixedEvent.h"
47 #include "AliAnalysisManager.h"
48 #include "AliInputEventHandler.h"
49 #include "AliEventplane.h"
51 ClassImp(AliAnaParticleHadronCorrelation)
54 //___________________________________________________________________
55 AliAnaParticleHadronCorrelation::AliAnaParticleHadronCorrelation():
56 AliAnaCaloTrackCorrBaseClass(),
57 fFillAODWithReferences(0), fCheckLeadingWithNeutralClusters(0),
58 fMaxAssocPt(1000.), fMinAssocPt(0.),
59 fDeltaPhiMaxCut(0.), fDeltaPhiMinCut(0.),
60 fSelectIsolated(0), fMakeSeveralUE(0),
61 fUeDeltaPhiMaxCut(0.), fUeDeltaPhiMinCut(0.),
62 fPi0AODBranchName(""), fNeutralCorr(0),
63 fPi0Trigger(0), fDecayTrigger(0),
64 fMakeAbsoluteLeading(0), fMakeNearSideLeading(0),
65 fLeadingTriggerIndex(-1), fHMPIDCorrelation(0), fFillBradHisto(0),
66 fNAssocPtBins(0), fAssocPtBinLimit(),
68 fListMixTrackEvents(), fListMixCaloEvents(),
69 fUseMixStoredInReader(0), fFillNeutralEventMixPool(0),
70 fM02MaxCut(0), fM02MinCut(0),
71 fFillPileUpHistograms(0),
72 fSelectLeadingHadronAngle(0),
73 fMinLeadHadPhi(0), fMaxLeadHadPhi(0),
74 fMinLeadHadPt(0), fMaxLeadHadPt(0),
77 fhPtTriggerInput(0), fhPtTriggerSSCut(0),
78 fhPtTriggerIsoCut(0), fhPtTriggerFidCut(0),
79 fhPtTrigger(0), fhPtTriggerVtxBC0(0),
80 fhPtTriggerVzBin(0), fhPtTriggerBin(0),
81 fhPhiTrigger(0), fhEtaTrigger(0),
83 fhPtTriggerCentrality(0), fhPtTriggerEventPlane(0),
84 fhTriggerEventPlaneCentrality(0),
85 fhPtTriggerMixed(0), fhPtTriggerMixedVzBin(0), fhPtTriggerMixedBin(0),
86 fhPhiTriggerMixed(0), fhEtaTriggerMixed(0),
87 fhPtLeadingOppositeHadron(0), fhPtDiffPhiLeadingOppositeHadron(0), fhPtDiffEtaLeadingOppositeHadron(0),
88 fhDeltaPhiDeltaEtaCharged(0),
89 fhPhiCharged(0), fhEtaCharged(0),
90 fhDeltaPhiCharged(0), fhDeltaEtaCharged(0),
91 fhDeltaPhiChargedPt(0), fhDeltaPhiUeChargedPt(0),
93 fhXECharged(0), fhXECharged_Cone2(0), fhXEUeCharged(0),
94 fhXEPosCharged(0), fhXENegCharged(0),
95 fhPtHbpXECharged(0), fhPtHbpXECharged_Cone2(0), fhPtHbpXEUeCharged(0),
96 fhZTCharged(0), fhZTUeCharged(0),
97 fhZTPosCharged(0), fhZTNegCharged(0),
98 fhPtHbpZTCharged(0), fhPtHbpZTUeCharged(0),
99 fhXEChargedMC(), fhDeltaPhiChargedMC(),
100 fhDeltaPhiDeltaEtaChargedPtA3GeV(0),
101 fhDeltaPhiChargedPtA3GeV(0), fhDeltaEtaChargedPtA3GeV(0),
103 fhDeltaPhiChargedPileUp(), fhDeltaEtaChargedPileUp(),
104 fhDeltaPhiChargedPtA3GeVPileUp(), fhDeltaEtaChargedPtA3GeVPileUp(),
105 fhXEChargedPileUp(), fhXEUeChargedPileUp(),
106 fhZTChargedPileUp(), fhZTUeChargedPileUp(),
107 fhPtTrigChargedPileUp(),
108 fhDeltaPhiChargedOtherBC(), fhDeltaPhiChargedPtA3GeVOtherBC(),
109 fhXEChargedOtherBC(), fhXEUeChargedOtherBC(),
110 fhZTChargedOtherBC(), fhZTUeChargedOtherBC(),
111 fhPtTrigChargedOtherBC(),
112 fhDeltaPhiChargedBC0(), fhDeltaPhiChargedPtA3GeVBC0(),
113 fhXEChargedBC0(), fhXEUeChargedBC0(),
114 fhZTChargedBC0(), fhZTUeChargedBC0(),
115 fhPtTrigChargedBC0(),
116 fhDeltaPhiChargedVtxBC0(), fhDeltaPhiChargedPtA3GeVVtxBC0(),
117 fhXEChargedVtxBC0(), fhXEUeChargedVtxBC0(),
118 fhZTChargedVtxBC0(), fhZTUeChargedVtxBC0(),
119 fhPtTrigChargedVtxBC0(),
120 fhDeltaPhiUeLeftCharged(0),
121 fhDeltaPhiUeLeftUpCharged(0), fhDeltaPhiUeRightUpCharged(0),
122 fhDeltaPhiUeLeftDownCharged(0), fhDeltaPhiUeRightDownCharged(0),
123 fhXEUeLeftCharged(0),
124 fhXEUeLeftUpCharged(0), fhXEUeRightUpCharged(0),
125 fhXEUeLeftDownCharged(0), fhXEUeRightDownCharged(0),
126 fhPtHbpXEUeLeftCharged(0), fhZTUeLeftCharged(0),
127 fhPtHbpZTUeLeftCharged(0),
128 fhPtTrigPout(0), fhPtTrigCharged(0),
129 fhDeltaPhiChargedMult(0x0), fhDeltaEtaChargedMult(0x0),
130 fhXEMult(0x0), fhXEUeMult(0x0),
131 fhZTMult(0x0), fhZTUeMult(0x0),
132 fhAssocPtBkg(0), fhDeltaPhiDeltaEtaAssocPtBin(0),
133 fhDeltaPhiAssocPtBin(0),
134 fhDeltaPhiAssocPtBinDEta08(0), fhDeltaPhiAssocPtBinDEta0(0),
135 fhDeltaPhiAssocPtBinHMPID(0), fhDeltaPhiAssocPtBinHMPIDAcc(0),
136 fhDeltaPhiBradAssocPtBin(0), fhDeltaPhiBrad(0),
137 fhXEAssocPtBin(0), fhZTAssocPtBin(0),
138 fhDeltaPhiDeltaEtaNeutral(0),
139 fhPhiNeutral(0), fhEtaNeutral(0),
140 fhDeltaPhiNeutral(0), fhDeltaEtaNeutral(0),
141 fhDeltaPhiNeutralPt(0), fhDeltaPhiUeNeutralPt(0),
142 fhXENeutral(0), fhXEUeNeutral(0),
143 fhPtHbpXENeutral(0), fhPtHbpXEUeNeutral(0),
144 fhZTNeutral(0), fhZTUeNeutral(0),
145 fhPtHbpZTNeutral(0), fhPtHbpZTUeNeutral(0),
146 fhDeltaPhiUeLeftNeutral(0), fhXEUeLeftNeutral(0),
147 fhPtHbpXEUeLeftNeutral(0), fhZTUeLeftNeutral(0),
148 fhPtHbpZTUeLeftNeutral(0), fhPtPi0DecayRatio(0),
149 fhDeltaPhiDecayCharged(0), fhXEDecayCharged(0), fhZTDecayCharged(0),
150 fhDeltaPhiDecayNeutral(0), fhXEDecayNeutral(0), fhZTDecayNeutral(0),
151 fhDeltaPhiDecayChargedAssocPtBin(0),
152 fh2phiTriggerParticle(0x0),
153 fhMCPtTrigger(0), fhMCPhiTrigger(0), fhMCEtaTrigger(0),
154 fhMCPtTriggerNotLeading(0), fhMCPhiTriggerNotLeading(0), fhMCEtaTriggerNotLeading(0),
155 fhMCEtaCharged(0), fhMCPhiCharged(0),
156 fhMCDeltaEtaCharged(0), fhMCDeltaPhiCharged(0x0),
157 fhMCDeltaPhiDeltaEtaCharged(0), fhMCDeltaPhiChargedPt(0),
158 fhMCPtXECharged(0), fhMCPtXEUeCharged(0),
159 fhMCPtXEUeLeftCharged(0),
160 fhMCPtHbpXECharged(0), fhMCPtHbpXEUeCharged(0),
161 fhMCPtHbpXEUeLeftCharged(0),
163 fhMCPtZTCharged(0), fhMCPtZTUeCharged(0),
164 fhMCPtZTUeLeftCharged(0),
165 fhMCPtHbpZTCharged(0), fhMCPtHbpZTUeCharged(0),
166 fhMCPtHbpZTUeLeftCharged(0),
167 fhMCPtTrigPout(0), fhMCPtAssocDeltaPhi(0),
169 fhNEventsTrigger(0), fhNtracksMB(0), fhNclustersMB(0),
170 fhMixDeltaPhiCharged(0), fhMixDeltaPhiDeltaEtaCharged(0),
171 fhMixXECharged(0), fhMixXEUeCharged(0), fhMixHbpXECharged(0),
172 fhMixDeltaPhiChargedAssocPtBin(),
173 fhMixDeltaPhiChargedAssocPtBinDEta08(),
174 fhMixDeltaPhiChargedAssocPtBinDEta0(),
175 fhMixDeltaPhiDeltaEtaChargedAssocPtBin(),
176 fhEventBin(0), fhEventMixBin(0)
180 //Initialize parameters
183 for(Int_t i = 0; i < 7; i++)
185 fhPtTriggerMC[i] = 0;
186 fhXEChargedMC[i] = 0;
187 fhDeltaPhiChargedMC[i] = 0;
190 for(Int_t i = 0; i < 7; i++)
192 fhPtTriggerPileUp [i] = 0 ;
193 fhDeltaPhiChargedPileUp [i] = 0 ; fhDeltaEtaChargedPileUp [i] = 0 ;
194 fhXEChargedPileUp [i] = 0 ; fhXEUeChargedPileUp [i] = 0 ;
195 fhZTChargedPileUp [i] = 0 ; fhZTUeChargedPileUp [i] = 0 ;
196 fhPtTrigChargedPileUp [i] = 0 ;
197 fhDeltaPhiChargedPtA3GeVPileUp[i] = 0 ; fhDeltaEtaChargedPtA3GeVPileUp[i] = 0 ;
202 //_________________________________________________________________
203 AliAnaParticleHadronCorrelation::~AliAnaParticleHadronCorrelation()
205 // Remove event containers
209 if(fListMixTrackEvents)
211 for(Int_t iz=0; iz < GetNZvertBin(); iz++)
213 for(Int_t ic=0; ic < GetNCentrBin(); ic++)
215 for(Int_t irp=0; irp<GetNRPBin(); irp++)
217 Int_t bin = GetEventMixBin(ic, iz, irp);
218 fListMixTrackEvents[bin]->Delete() ;
219 delete fListMixTrackEvents[bin] ;
225 delete[] fListMixTrackEvents;
227 if(fListMixCaloEvents)
229 for(Int_t iz=0; iz < GetNZvertBin(); iz++)
231 for(Int_t ic=0; ic < GetNCentrBin(); ic++)
233 for(Int_t irp=0; irp<GetNRPBin(); irp++)
235 Int_t bin = GetEventMixBin(ic, iz, irp);
236 fListMixCaloEvents[bin]->Delete() ;
237 delete fListMixCaloEvents[bin] ;
243 delete[] fListMixCaloEvents;
248 //__________________________________________________________________________________________________________________________________________
249 void AliAnaParticleHadronCorrelation::FillChargedAngularCorrelationHistograms(Float_t ptAssoc, Float_t ptTrig, Int_t bin,
250 Float_t phiAssoc, Float_t phiTrig, Float_t deltaPhi,
251 Float_t etaAssoc, Float_t etaTrig,
252 Bool_t decay, Float_t hmpidSignal, Int_t outTOF,
253 Int_t cen, Int_t mcTag)
255 // Fill angular correlation related histograms
257 Float_t deltaEta = etaTrig-etaAssoc;
258 Float_t deltaPhiOrg = phiTrig-phiAssoc;
260 fhEtaCharged ->Fill(ptAssoc,etaAssoc);
261 fhPhiCharged ->Fill(ptAssoc,phiAssoc);
262 fhDeltaEtaCharged ->Fill(ptTrig ,deltaEta);
263 fhDeltaPhiCharged ->Fill(ptTrig ,deltaPhi);
264 fhDeltaPhiChargedPt->Fill(ptAssoc, deltaPhi);
265 fhDeltaPhiDeltaEtaCharged->Fill(deltaPhi, deltaEta);
269 fhDeltaEtaChargedPtA3GeV ->Fill(ptTrig ,deltaEta);
270 fhDeltaPhiChargedPtA3GeV ->Fill(ptTrig ,deltaPhi);
271 fhDeltaPhiDeltaEtaChargedPtA3GeV->Fill(deltaPhi, deltaEta);
276 if(fFillPileUpHistograms)
280 fhDeltaPhiChargedOtherBC->Fill(ptTrig ,deltaPhi) ;
281 if(ptAssoc > 3 ) fhDeltaPhiChargedPtA3GeVOtherBC->Fill(ptTrig ,deltaPhi) ;
285 fhDeltaPhiChargedBC0->Fill(ptTrig ,deltaPhi) ;
286 if(ptAssoc > 3 ) fhDeltaPhiChargedPtA3GeVBC0->Fill(ptTrig ,deltaPhi) ;
289 Int_t vtxBC = GetReader()->GetVertexBC();
290 if(vtxBC == 0 || vtxBC==AliVTrack::kTOFBCNA)
292 fhDeltaPhiChargedVtxBC0->Fill(ptTrig ,deltaPhi) ;
293 if(ptAssoc > 3 ) fhDeltaPhiChargedPtA3GeVVtxBC0->Fill(ptTrig ,deltaPhi) ;
296 if(GetReader()->IsPileUpFromSPD()) { fhDeltaEtaChargedPileUp[0]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPileUp[0]->Fill(ptTrig ,deltaPhi) ; }
297 if(GetReader()->IsPileUpFromEMCal()) { fhDeltaEtaChargedPileUp[1]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPileUp[1]->Fill(ptTrig ,deltaPhi) ; }
298 if(GetReader()->IsPileUpFromSPDOrEMCal()) { fhDeltaEtaChargedPileUp[2]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPileUp[2]->Fill(ptTrig ,deltaPhi) ; }
299 if(GetReader()->IsPileUpFromSPDAndEMCal()) { fhDeltaEtaChargedPileUp[3]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPileUp[3]->Fill(ptTrig ,deltaPhi) ; }
300 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) { fhDeltaEtaChargedPileUp[4]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPileUp[4]->Fill(ptTrig ,deltaPhi) ; }
301 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) { fhDeltaEtaChargedPileUp[5]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPileUp[5]->Fill(ptTrig ,deltaPhi) ; }
302 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhDeltaEtaChargedPileUp[6]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPileUp[6]->Fill(ptTrig ,deltaPhi) ; }
306 if(GetReader()->IsPileUpFromSPD()) { fhDeltaEtaChargedPtA3GeVPileUp[0]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPtA3GeVPileUp[0]->Fill(ptTrig ,deltaPhi) ; }
307 if(GetReader()->IsPileUpFromEMCal()) { fhDeltaEtaChargedPtA3GeVPileUp[1]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPtA3GeVPileUp[1]->Fill(ptTrig ,deltaPhi) ; }
308 if(GetReader()->IsPileUpFromSPDOrEMCal()) { fhDeltaEtaChargedPtA3GeVPileUp[2]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPtA3GeVPileUp[2]->Fill(ptTrig ,deltaPhi) ; }
309 if(GetReader()->IsPileUpFromSPDAndEMCal()) { fhDeltaEtaChargedPtA3GeVPileUp[3]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPtA3GeVPileUp[3]->Fill(ptTrig ,deltaPhi) ; }
310 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) { fhDeltaEtaChargedPtA3GeVPileUp[4]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPtA3GeVPileUp[4]->Fill(ptTrig ,deltaPhi) ; }
311 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) { fhDeltaEtaChargedPtA3GeVPileUp[5]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPtA3GeVPileUp[5]->Fill(ptTrig ,deltaPhi) ; }
312 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhDeltaEtaChargedPtA3GeVPileUp[6]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPtA3GeVPileUp[6]->Fill(ptTrig ,deltaPhi) ; }
318 Int_t mcIndex = GetMCTagHistogramIndex(mcTag);
319 fhDeltaPhiChargedMC[mcIndex]->Fill(ptTrig , deltaPhi);
322 if(fDecayTrigger && decay) fhDeltaPhiDecayCharged ->Fill(ptTrig , deltaPhi);
324 Double_t dphiBrad = -100;
327 dphiBrad = atan2(sin(deltaPhiOrg), cos(deltaPhiOrg))/TMath::Pi();//-1 to 1
328 if(TMath::Abs(dphiBrad)>0.325 && TMath::Abs(dphiBrad)<0.475) //Hardcoded values, BAD, FIXME
330 fhAssocPtBkg->Fill(ptTrig, ptAssoc);
333 if(dphiBrad<-1./3) dphiBrad += 2;
334 fhDeltaPhiBrad->Fill(ptTrig, dphiBrad);
337 // Fill histograms in bins of associated particle pT
340 fhDeltaPhiDeltaEtaAssocPtBin [bin]->Fill(deltaPhi,deltaEta);
342 fhDeltaPhiAssocPtBin [bin]->Fill(ptTrig, deltaPhi);
344 if(TMath::Abs(deltaEta)> 0.8)
345 fhDeltaPhiAssocPtBinDEta08 [bin]->Fill(ptTrig, deltaPhi);
347 if(TMath::Abs(deltaEta)< 0.01)
348 fhDeltaPhiAssocPtBinDEta0 [bin]->Fill(ptTrig, deltaPhi);
351 fhDeltaPhiBradAssocPtBin [bin]->Fill(ptTrig, dphiBrad);
353 if(fDecayTrigger && decay)
354 fhDeltaPhiDecayChargedAssocPtBin[bin]->Fill(ptTrig, deltaPhi);
356 if(fHMPIDCorrelation)
358 if( hmpidSignal > 0 )
360 //printf("Track pt %f with HMPID signal %f \n",pt,hmpidSignal);
361 fhDeltaPhiAssocPtBinHMPID[bin]->Fill(ptTrig, deltaPhi);
364 if(phiAssoc > 5*TMath::DegToRad() && phiAssoc < 20*TMath::DegToRad())
366 //printf("Track pt %f in HMPID acceptance phi %f \n ",pt,phi*TMath::RadToDeg() );
367 fhDeltaPhiAssocPtBinHMPIDAcc[bin]->Fill(ptTrig, deltaPhi);
372 //fill different multiplicity/centrality histogram
373 if(fFillHighMultHistograms)
375 fhDeltaPhiChargedMult[cen]->Fill(ptTrig,deltaPhi);
376 fhDeltaEtaChargedMult[cen]->Fill(ptTrig,deltaEta);
380 //___________________________________________________________________________________________________________________________________
381 Bool_t AliAnaParticleHadronCorrelation::FillChargedMCCorrelationHistograms(Float_t mcAssocPt, Float_t mcAssocPhi, Float_t mcAssocEta,
382 Float_t mcTrigPt, Float_t mcTrigPhi, Float_t mcTrigEta)
384 // Fill MC histograms independently of AOD or ESD
388 // In case we requested the trigger to be a leading particle,
389 // check if this is true at the MC level.
390 // Not sure if it is correct to skip or not skip this.
392 if( fMakeAbsoluteLeading && mcAssocPt > mcTrigPt ) lead = kFALSE; // skip event
394 // Skip this event if near side associated particle pt larger than trigger
395 if( fMakeNearSideLeading && mcAssocPt > mcTrigPt &&
396 TMath::Abs(mcAssocPhi-mcTrigPhi)<TMath::PiOver2() ) lead = kFALSE; // skip event
399 // Select only hadrons in pt range
400 if ( mcAssocPt < fMinAssocPt || mcAssocPt > fMaxAssocPt ) return lead ; // exclude but continue
401 if ( mcAssocPt < GetReader()->GetCTSPtMin()) return lead ;
403 if( mcAssocPhi < 0 ) mcAssocPhi+=TMath::TwoPi();
406 // Remove trigger itself for correlation when use charged triggers
407 if(TMath::Abs(mcAssocPt -mcTrigPt ) < 1e-6 &&
408 TMath::Abs(mcAssocPhi-mcTrigPhi) < 1e-6 &&
409 TMath::Abs(mcAssocEta-mcTrigEta) < 1e-6) return lead ; // exclude but continue
411 Float_t mcdeltaPhi= mcTrigPhi-mcAssocPhi;
412 if(mcdeltaPhi <= -TMath::PiOver2()) mcdeltaPhi+=TMath::TwoPi();
413 if(mcdeltaPhi > 3*TMath::PiOver2()) mcdeltaPhi-=TMath::TwoPi();
415 Float_t mcxE =-mcAssocPt/mcTrigPt*TMath::Cos(mcdeltaPhi);// -(mcAssocPx*pxprim+mcAssocPy*pyprim)/(mcTrigPt*mcTrigPt);
416 Float_t mchbpXE =-100 ;
417 if(mcxE > 0 ) mchbpXE = TMath::Log(1./mcxE);
419 Float_t mczT = mcAssocPt/mcTrigPt ;
420 Float_t mchbpZT =-100 ;
421 if(mczT > 0 ) mchbpZT = TMath::Log(1./mczT);
423 Double_t mcpout = mcAssocPt*TMath::Sin(mcdeltaPhi) ;
427 AliInfo(Form("Charged hadron: track Pt %f, track Phi %f, phi trigger %f. Cuts: delta phi %2.2f < %2.2f < %2.2f \n",
428 mcAssocPt,mcAssocPhi, mcTrigPhi,fDeltaPhiMinCut, mcdeltaPhi, fDeltaPhiMaxCut));
432 fhMCEtaCharged ->Fill(mcAssocPt, mcAssocEta);
433 fhMCPhiCharged ->Fill(mcAssocPt, mcAssocPhi);
434 fhMCDeltaEtaCharged->Fill(mcTrigPt , mcTrigEta-mcAssocEta);
435 fhMCDeltaPhiCharged->Fill(mcTrigPt , mcdeltaPhi);
436 fhMCPtAssocDeltaPhi->Fill(mcAssocPt, mcdeltaPhi);
438 fhMCDeltaPhiDeltaEtaCharged->Fill(mcdeltaPhi,mcTrigEta-mcAssocEta);
440 //delta phi cut for correlation
441 if( (mcdeltaPhi > fDeltaPhiMinCut) && (mcdeltaPhi < fDeltaPhiMaxCut) )
443 fhMCDeltaPhiChargedPt->Fill(mcAssocPt,mcdeltaPhi);
444 fhMCPtXECharged ->Fill(mcTrigPt, mcxE);
445 fhMCPtHbpXECharged ->Fill(mcTrigPt, mchbpXE);
446 fhMCPtZTCharged ->Fill(mcTrigPt, mczT);
447 fhMCPtHbpZTCharged ->Fill(mcTrigPt, mchbpZT);
448 fhMCPtTrigPout ->Fill(mcTrigPt, mcpout) ;
454 if ( (mcdeltaPhi > fUeDeltaPhiMinCut) && (mcdeltaPhi < fUeDeltaPhiMaxCut) )
456 //Double_t randomphi = gRandom->Uniform(TMath::Pi()/2,3*TMath::Pi()/2);
457 Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
458 Double_t mcUexE = -(mcAssocPt/mcTrigPt)*TMath::Cos(randomphi);
459 Double_t mcUezT = mcAssocPt/mcTrigPt;
461 if(mcUexE < 0.) mcUexE = -mcUexE;
463 fhMCPtXEUeCharged->Fill(mcTrigPt,mcUexE);
464 if(mcUexE > 0) fhMCPtHbpXEUeCharged->Fill(mcTrigPt,TMath::Log(1/mcUexE));
466 fhMCPtZTUeCharged->Fill(mcTrigPt,mcUezT);
467 if(mcUezT > 0) fhMCPtHbpZTUeCharged->Fill(mcTrigPt,TMath::Log(1/mcUezT));
469 fhMCUePart->Fill(mcTrigPt);
475 if((mcdeltaPhi<-fUeDeltaPhiMinCut) || (mcdeltaPhi >2*fUeDeltaPhiMaxCut))
477 Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
478 Double_t mcUexE = -(mcAssocPt/mcTrigPt)*TMath::Cos(randomphi);
479 Double_t mcUezT = mcAssocPt/mcTrigPt;
481 if(mcUexE < 0.) mcUexE = -mcUexE;
483 fhMCPtXEUeLeftCharged->Fill(mcTrigPt,mcUexE);
484 if(mcUexE > 0) fhMCPtHbpXEUeLeftCharged->Fill(mcTrigPt,TMath::Log(1/mcUexE));
486 fhMCPtZTUeLeftCharged->Fill(mcTrigPt,mcUezT);
487 if(mcUexE > 0) fhMCPtHbpZTUeLeftCharged->Fill(mcTrigPt,TMath::Log(1/mcUezT));
494 //___________________________________________________________________________________________________________________
495 void AliAnaParticleHadronCorrelation::FillChargedMomentumImbalanceHistograms(Float_t ptTrig, Float_t ptAssoc,
497 Int_t cen, Int_t charge,
498 Int_t bin, Bool_t decay,
499 Int_t outTOF, Int_t mcTag)
502 // Fill mostly momentum imbalance related histograms
504 Float_t zT = ptAssoc/ptTrig ;
505 Float_t hbpZT = -100;
506 if(zT > 0 ) hbpZT = TMath::Log(1./zT);
509 Float_t xE =-ptAssoc/ptTrig*TMath::Cos(deltaPhi); // -(px*pxTrig+py*pyTrig)/(ptTrig*ptTrig);
510 Float_t hbpXE = -100;
512 if(xE > 0 ) hbpXE = TMath::Log(1./xE);
515 Float_t pout = ptAssoc*TMath::Sin(deltaPhi) ;
517 fhXECharged ->Fill(ptTrig , xE);
518 fhPtHbpXECharged ->Fill(ptTrig , hbpXE);
519 fhZTCharged ->Fill(ptTrig , zT);
520 fhPtHbpZTCharged ->Fill(ptTrig , hbpZT);
521 fhPtTrigPout ->Fill(ptTrig , pout) ;
522 fhPtTrigCharged ->Fill(ptTrig , ptAssoc) ;
523 if((deltaPhi > 5*TMath::Pi()/6.) && (deltaPhi < 7*TMath::Pi()/6.))
525 fhXECharged_Cone2 ->Fill(ptTrig , xE);
526 fhPtHbpXECharged_Cone2 ->Fill(ptTrig , hbpXE);
530 if(fFillPileUpHistograms)
534 fhXEChargedOtherBC ->Fill(ptTrig,xE);
535 fhZTChargedOtherBC ->Fill(ptTrig,zT);
536 fhPtTrigChargedOtherBC->Fill(ptTrig,ptAssoc);
540 fhXEChargedBC0 ->Fill(ptTrig,xE);
541 fhZTChargedBC0 ->Fill(ptTrig,zT);
542 fhPtTrigChargedBC0->Fill(ptTrig,ptAssoc);
545 Int_t vtxBC = GetReader()->GetVertexBC();
546 if(vtxBC == 0 || vtxBC==AliVTrack::kTOFBCNA)
548 fhXEChargedVtxBC0 ->Fill(ptTrig,xE);
549 fhZTChargedVtxBC0 ->Fill(ptTrig,zT);
550 fhPtTrigChargedVtxBC0->Fill(ptTrig,ptAssoc);
553 if(GetReader()->IsPileUpFromSPD()) { fhXEChargedPileUp[0]->Fill(ptTrig,xE); fhZTChargedPileUp[0]->Fill(ptTrig,zT); fhPtTrigChargedPileUp[0]->Fill(ptTrig,ptAssoc); }
554 if(GetReader()->IsPileUpFromEMCal()) { fhXEChargedPileUp[1]->Fill(ptTrig,xE); fhZTChargedPileUp[1]->Fill(ptTrig,zT); fhPtTrigChargedPileUp[1]->Fill(ptTrig,ptAssoc); }
555 if(GetReader()->IsPileUpFromSPDOrEMCal()) { fhXEChargedPileUp[2]->Fill(ptTrig,xE); fhZTChargedPileUp[2]->Fill(ptTrig,zT); fhPtTrigChargedPileUp[2]->Fill(ptTrig,ptAssoc); }
556 if(GetReader()->IsPileUpFromSPDAndEMCal()) { fhXEChargedPileUp[3]->Fill(ptTrig,xE); fhZTChargedPileUp[3]->Fill(ptTrig,zT); fhPtTrigChargedPileUp[3]->Fill(ptTrig,ptAssoc); }
557 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) { fhXEChargedPileUp[4]->Fill(ptTrig,xE); fhZTChargedPileUp[4]->Fill(ptTrig,zT); fhPtTrigChargedPileUp[4]->Fill(ptTrig,ptAssoc); }
558 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) { fhXEChargedPileUp[5]->Fill(ptTrig,xE); fhZTChargedPileUp[5]->Fill(ptTrig,zT); fhPtTrigChargedPileUp[5]->Fill(ptTrig,ptAssoc); }
559 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhXEChargedPileUp[6]->Fill(ptTrig,xE); fhZTChargedPileUp[6]->Fill(ptTrig,zT); fhPtTrigChargedPileUp[6]->Fill(ptTrig,ptAssoc); }
564 Int_t mcIndex = GetMCTagHistogramIndex(mcTag);
565 fhXEChargedMC[mcIndex]->Fill(ptTrig , xE);
568 if(fDecayTrigger && decay)
570 fhXEDecayCharged->Fill(ptTrig,xE);
571 fhZTDecayCharged->Fill(ptTrig,zT);
572 } // photon decay pi0/eta trigger
574 if(bin >= 0 )//away side
576 fhXEAssocPtBin[bin]->Fill(ptTrig, xE) ;
577 fhZTAssocPtBin[bin]->Fill(ptTrig, zT) ;
582 fhXEPosCharged->Fill(ptTrig,xE) ;
583 fhZTPosCharged->Fill(ptTrig,zT) ;
587 fhXENegCharged->Fill(ptTrig,xE) ;
588 fhZTNegCharged->Fill(ptTrig,zT) ;
591 //fill different multiplicity/centrality histogram
592 if(fFillHighMultHistograms)
594 fhXEMult[cen]->Fill(ptTrig,xE);
595 fhZTMult[cen]->Fill(ptTrig,zT);
596 } //multiplicity/centrality events selection
599 //_______________________________________________________________________________________________________________________
600 void AliAnaParticleHadronCorrelation::FillChargedUnderlyingEventHistograms(Float_t ptTrig, Float_t ptAssoc,
601 Float_t deltaPhi, Int_t cen, Int_t outTOF)
603 // Fill underlying event histograms
605 fhUePart->Fill(ptTrig);
607 fhDeltaPhiUeChargedPt->Fill(ptAssoc,deltaPhi);
609 Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
610 Double_t uexE = -(ptAssoc/ptTrig)*TMath::Cos(randomphi);
611 Double_t uezT = ptAssoc/ptTrig;
613 if(uexE < 0.) uexE = -uexE;
615 fhXEUeCharged->Fill(ptTrig,uexE);
616 if(uexE > 0) fhPtHbpXEUeCharged->Fill(ptTrig,TMath::Log(1/uexE));
618 fhZTUeCharged->Fill(ptTrig,uezT);
619 if(uezT > 0) fhPtHbpZTUeCharged->Fill(ptTrig,TMath::Log(1/uezT));
623 if(fFillPileUpHistograms)
627 fhXEUeChargedOtherBC->Fill(ptTrig,uexE);
628 fhZTUeChargedOtherBC->Fill(ptTrig,uezT);
632 fhXEUeChargedBC0->Fill(ptTrig,uexE);
633 fhZTUeChargedBC0->Fill(ptTrig,uezT);
636 Int_t vtxBC = GetReader()->GetVertexBC();
637 if(vtxBC == 0 || vtxBC==AliVTrack::kTOFBCNA)
639 fhXEUeChargedVtxBC0->Fill(ptTrig,uexE);
640 fhZTUeChargedVtxBC0->Fill(ptTrig,uezT);
643 if(GetReader()->IsPileUpFromSPD()) { fhXEUeChargedPileUp[0]->Fill(ptTrig,uexE); fhZTUeChargedPileUp[0]->Fill(ptTrig,uezT);}
644 if(GetReader()->IsPileUpFromEMCal()) { fhXEUeChargedPileUp[1]->Fill(ptTrig,uexE); fhZTUeChargedPileUp[1]->Fill(ptTrig,uezT);}
645 if(GetReader()->IsPileUpFromSPDOrEMCal()) { fhXEUeChargedPileUp[2]->Fill(ptTrig,uexE); fhZTUeChargedPileUp[2]->Fill(ptTrig,uezT);}
646 if(GetReader()->IsPileUpFromSPDAndEMCal()) { fhXEUeChargedPileUp[3]->Fill(ptTrig,uexE); fhZTUeChargedPileUp[3]->Fill(ptTrig,uezT);}
647 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) { fhXEUeChargedPileUp[4]->Fill(ptTrig,uexE); fhZTUeChargedPileUp[4]->Fill(ptTrig,uezT);}
648 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) { fhXEUeChargedPileUp[5]->Fill(ptTrig,uexE); fhZTUeChargedPileUp[5]->Fill(ptTrig,uezT);}
649 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhXEUeChargedPileUp[6]->Fill(ptTrig,uexE); fhZTUeChargedPileUp[6]->Fill(ptTrig,uezT);}
652 //fill different multiplicity/centrality histogram
653 if(fFillHighMultHistograms)
655 fhXEUeMult[cen]->Fill(ptTrig,uexE);
656 fhZTUeMult[cen]->Fill(ptTrig,uezT);
660 //_____________________________________________________________________________________________________
661 void AliAnaParticleHadronCorrelation::FillChargedUnderlyingEventSidesHistograms(Float_t ptTrig,
665 // Fill underlying event histograms to the left and right of trigger
666 // Right cone is the default UE.
668 if((deltaPhi<-fUeDeltaPhiMinCut) || (deltaPhi >2*fUeDeltaPhiMaxCut))
670 fhDeltaPhiUeLeftCharged->Fill(ptAssoc,deltaPhi);
671 Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
672 Double_t uexE = -(ptAssoc/ptTrig)*TMath::Cos(randomphi);
673 Double_t uezT = ptAssoc/ptTrig;
675 if(uexE < 0.) uexE = -uexE;
677 fhXEUeLeftCharged->Fill(ptTrig,uexE);
678 if(uexE > 0) fhPtHbpXEUeLeftCharged->Fill(ptTrig,TMath::Log(1/uexE));
680 fhZTUeLeftCharged->Fill(ptTrig,uezT);
681 if(uexE > 0) fhPtHbpZTUeLeftCharged->Fill(ptTrig,TMath::Log(1/uezT));
682 fhDeltaPhiUeLeftCharged->Fill(ptAssoc, deltaPhi);
685 if((deltaPhi<-fUeDeltaPhiMinCut) && (deltaPhi >-TMath::Pi()/2))
687 fhDeltaPhiUeLeftDownCharged->Fill(ptAssoc,deltaPhi);
688 Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
689 Double_t uexE = -(ptAssoc/ptTrig)*TMath::Cos(randomphi);
691 if(uexE < 0.) uexE = -uexE;
693 fhXEUeLeftDownCharged->Fill(ptTrig,uexE);
696 if((deltaPhi>2*fUeDeltaPhiMaxCut) && (deltaPhi <3*TMath::Pi()/2))
698 fhDeltaPhiUeLeftUpCharged->Fill(ptAssoc,deltaPhi);
699 Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
700 Double_t uexE = -(ptAssoc/ptTrig)*TMath::Cos(randomphi);
702 if(uexE < 0.) uexE = -uexE;
704 fhXEUeLeftUpCharged->Fill(ptTrig,uexE);
707 if((deltaPhi > TMath::Pi()/2) && (deltaPhi < fUeDeltaPhiMaxCut))
709 fhDeltaPhiUeRightUpCharged->Fill(ptAssoc,deltaPhi);
710 Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
711 Double_t uexE = -(ptAssoc/ptTrig)*TMath::Cos(randomphi);
713 if(uexE < 0.) uexE = -uexE;
715 fhXEUeRightUpCharged->Fill(ptTrig,uexE);
718 if((deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < TMath::Pi()/2))
720 fhDeltaPhiUeRightDownCharged->Fill(ptAssoc,deltaPhi);
721 Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
722 Double_t uexE = -(ptAssoc/ptTrig)*TMath::Cos(randomphi);
724 if(uexE < 0.) uexE = -uexE;
726 fhXEUeRightDownCharged->Fill(ptTrig,uexE);
730 //______________________________________________________________________________________________________________________________
731 void AliAnaParticleHadronCorrelation::FillDecayPhotonCorrelationHistograms(Float_t ptAssoc, Float_t phiAssoc,
732 TLorentzVector mom1, TLorentzVector mom2,
733 Bool_t bChargedOrNeutral)
735 // Do correlation with decay photons of triggered pi0 or eta
737 // Calculate the correlation parameters
738 Float_t ptDecay1 = mom1.Pt();
739 Float_t ptDecay2 = mom2.Pt();
741 Float_t zTDecay1 = -100, zTDecay2 = -100;
742 if(ptDecay1 > 0) zTDecay1 = ptAssoc/ptDecay1 ;
743 if(ptDecay2 > 0) zTDecay2 = ptAssoc/ptDecay2 ;
745 Float_t deltaPhiDecay1 = mom1.Phi()-phiAssoc;
746 if(deltaPhiDecay1< -TMath::PiOver2()) deltaPhiDecay1+=TMath::TwoPi();
747 if(deltaPhiDecay1>3*TMath::PiOver2()) deltaPhiDecay1-=TMath::TwoPi();
749 Float_t deltaPhiDecay2 = mom2.Phi()-phiAssoc;
750 if(deltaPhiDecay2< -TMath::PiOver2()) deltaPhiDecay2+=TMath::TwoPi();
751 if(deltaPhiDecay2>3*TMath::PiOver2()) deltaPhiDecay2-=TMath::TwoPi();
753 Float_t xEDecay1 =-zTDecay1*TMath::Cos(deltaPhiDecay1); // -(px*pxTrig+py*pyTrig)/(ptTrig*ptTrig);
754 Float_t xEDecay2 =-zTDecay2*TMath::Cos(deltaPhiDecay2); // -(px*pxTrig+py*pyTrig)/(ptTrig*ptTrig);
756 if(bChargedOrNeutral) // correlate with charges
758 fhDeltaPhiDecayCharged->Fill(ptDecay1, deltaPhiDecay1);
759 fhDeltaPhiDecayCharged->Fill(ptDecay2, deltaPhiDecay2);
761 if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::FillDecayPhotonHistograms( Charged corr) - deltaPhoton1 = %f, deltaPhoton2 = %f \n", deltaPhiDecay1, deltaPhiDecay2);
763 if( (deltaPhiDecay1 > fDeltaPhiMinCut) && ( deltaPhiDecay1 < fDeltaPhiMaxCut) )
765 fhZTDecayCharged->Fill(ptDecay1,zTDecay1);
766 fhXEDecayCharged->Fill(ptDecay1,xEDecay1);
768 if( (deltaPhiDecay2 > fDeltaPhiMinCut) && ( deltaPhiDecay2 < fDeltaPhiMaxCut) )
770 fhZTDecayCharged->Fill(ptDecay2,zTDecay2);
771 fhXEDecayCharged->Fill(ptDecay2,xEDecay2);
774 else // correlate with neutrals
776 fhDeltaPhiDecayNeutral->Fill(ptDecay1, deltaPhiDecay1);
777 fhDeltaPhiDecayNeutral->Fill(ptDecay2, deltaPhiDecay2);
779 if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::FillDecayPhotonHistograms(Neutral corr) - deltaPhoton1 = %f, deltaPhoton2 = %f \n", deltaPhiDecay1, deltaPhiDecay2);
781 if( (deltaPhiDecay1 > fDeltaPhiMinCut) && ( deltaPhiDecay1 < fDeltaPhiMaxCut) )
783 fhZTDecayNeutral->Fill(ptDecay1,zTDecay1);
784 fhXEDecayNeutral->Fill(ptDecay1,xEDecay1);
786 if( (deltaPhiDecay2 > fDeltaPhiMinCut) && ( deltaPhiDecay2 < fDeltaPhiMaxCut) )
788 fhZTDecayNeutral->Fill(ptDecay2,zTDecay2);
789 fhXEDecayNeutral->Fill(ptDecay2,xEDecay2);
794 //_____________________________________________________________________________________________________________________________
795 void AliAnaParticleHadronCorrelation::FillNeutralUnderlyingEventSidesHistograms(Float_t ptTrig, Float_t ptAssoc,
796 Float_t zT, Float_t hbpZT,
799 // Fill underlying event histograms to the left of trigger
800 // Right is the default case
802 Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
804 Float_t xE =-ptAssoc/ptTrig*TMath::Cos(randomphi); // -(px*pxTrig+py*pyTrig)/(ptTrig*ptTrig);
805 Float_t hbpXE = -100;
806 if(xE > 0 ) hbpXE = TMath::Log(1./xE);
808 if((deltaPhi<-fUeDeltaPhiMinCut) && (deltaPhi >-fUeDeltaPhiMaxCut))
810 fhDeltaPhiUeLeftNeutral->Fill(ptAssoc, deltaPhi);
811 fhXEUeLeftNeutral ->Fill(ptTrig , xE);
812 fhPtHbpXEUeLeftNeutral ->Fill(ptTrig , hbpXE);
813 fhZTUeLeftNeutral ->Fill(ptTrig , zT);
814 fhPtHbpZTUeLeftNeutral ->Fill(ptTrig , hbpZT);
818 //______________________________________________________
819 void AliAnaParticleHadronCorrelation::FillEventMixPool()
821 // Fill the pool with tracks or clusters if requested
823 if ( !DoOwnMix() ) return;
825 FillChargedEventMixPool();
827 // Do the cluster pool filling only if requested
828 // or in case of isolation cut using clusters in the cone.
829 Bool_t isoCase = OnlyIsolated() && (GetIsolationCut()->GetParticleTypeInCone() != AliIsolationCut::kOnlyCharged);
831 if( !fFillNeutralEventMixPool && !isoCase) return;
833 FillNeutralEventMixPool();
836 //_____________________________________________________________
837 void AliAnaParticleHadronCorrelation::FillChargedEventMixPool()
839 // Mixed event pool filling for tracks
841 if(fUseMixStoredInReader && GetReader()->GetLastTracksMixedEvent() == GetEventNumber())
843 //printf("%s : Pool already filled for this event !!!\n",GetInputAODName().Data());
844 return ; // pool filled previously for another trigger
847 Int_t nTracks = GetCTSTracks()->GetEntriesFast();
849 AliAnalysisManager * manager = AliAnalysisManager::GetAnalysisManager();
850 AliInputEventHandler * inputHandler = dynamic_cast<AliInputEventHandler*>(manager->GetInputEventHandler());
852 if(!inputHandler) return ;
854 // Do mixing only with MB event (or the chosen mask), if not skip
855 if( !(inputHandler->IsEventSelected( ) & GetReader()->GetMixEventTriggerMask()) ) return ;
857 fhNtracksMB->Fill(nTracks);
859 Int_t eventBin = GetEventMixBin();
861 //Check that the bin exists, if not (bad determination of RP, centrality or vz bin) do nothing
862 if(eventBin < 0) return;
864 TObjArray * mixEventTracks = new TObjArray;
866 if(fUseMixStoredInReader)
868 fListMixTrackEvents[eventBin] = GetReader()->GetListWithMixedEventsForTracks(eventBin);
871 if(!fListMixTrackEvents[eventBin]) fListMixTrackEvents[eventBin] = new TList();
873 //printf("%s ***** Pool Event bin : %d - nTracks %d\n",GetInputAODName().Data(),eventBin, GetCTSTracks()->GetEntriesFast());
875 TList * pool = fListMixTrackEvents[eventBin];
878 for(Int_t ipr = 0;ipr < GetCTSTracks()->GetEntriesFast() ; ipr ++ )
880 AliVTrack * track = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
882 Double_t mom[3] = {track->Px(),track->Py(),track->Pz()};
883 p3.SetXYZ(mom[0],mom[1],mom[2]);
884 Float_t pt = p3.Pt();
886 //Select only hadrons in pt range
887 if(pt < fMinAssocPt || pt > fMaxAssocPt) continue ;
889 AliAODPWG4Particle * mixedTrack = new AliAODPWG4Particle(mom[0],mom[1],mom[2],0);
890 mixedTrack->SetDetector("CTS");
891 mixedTrack->SetChargedBit(track->Charge()>0);
892 mixEventTracks->Add(mixedTrack);
895 //Set the event number where the last event was added, to avoid double pool filling
896 GetReader()->SetLastTracksMixedEvent(GetEventNumber());
898 //printf("Add event to pool with %d tracks \n ",mixEventTracks->GetEntries());
899 pool->AddFirst(mixEventTracks);
902 //printf("Pool size %d, max %d\n",pool->GetSize(), GetNMaxEvMix());
904 if(pool->GetSize() > GetNMaxEvMix())
906 TClonesArray * tmp = static_cast<TClonesArray*>(pool->Last()) ;
912 //_____________________________________________________________
913 void AliAnaParticleHadronCorrelation::FillNeutralEventMixPool()
915 // Mixed event pool filling for neutral clusters
916 // Right now only for EMCAL and in isolation case
918 //printf("FillNeutralEventMixPool for %s\n",GetInputAODName().Data());
920 if(fUseMixStoredInReader && GetReader()->GetLastCaloMixedEvent() == GetEventNumber())
922 //printf("%s : Pool already filled for this event !!!\n",GetInputAODName().Data());
923 return ; // pool filled previously for another trigger
926 TObjArray * pl = GetEMCALClusters();
927 //if (GetAODObjArrayName.Contains("PHOS") )pl = GetPHOSClusters();
928 //else pl = GetEMCALClusters();
930 Int_t nClusters = pl->GetEntriesFast();
932 AliAnalysisManager * manager = AliAnalysisManager::GetAnalysisManager();
933 AliInputEventHandler * inputHandler = dynamic_cast<AliInputEventHandler*>(manager->GetInputEventHandler());
935 if(!inputHandler) return ;
937 // Do mixing only with MB event (or the chosen mask), if not skip
938 if( !(inputHandler->IsEventSelected( ) & GetReader()->GetMixEventTriggerMask()) ) return ;
940 fhNclustersMB->Fill(nClusters);
942 Int_t eventBin = GetEventMixBin();
944 //Check that the bin exists, if not (bad determination of RP, centrality or vz bin) do nothing
945 if(eventBin < 0) return;
947 TObjArray * mixEventCalo = new TObjArray;
949 if(fUseMixStoredInReader)
951 fListMixCaloEvents[eventBin] = GetReader()->GetListWithMixedEventsForCalo(eventBin);
954 if(!fListMixCaloEvents[eventBin]) fListMixCaloEvents[eventBin] = new TList();
956 TList * poolCalo = fListMixCaloEvents[eventBin];
960 for(Int_t ipr = 0;ipr < nClusters ; ipr ++ )
962 AliVCluster * calo = (AliVCluster *) (pl->At(ipr)) ;
964 // remove matched clusters
965 if( IsTrackMatched( calo, GetReader()->GetInputEvent() ) ) continue ;
967 //Cluster momentum calculation
968 if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
970 calo->GetMomentum(mom,GetVertex(0)) ;
971 }//Assume that come from vertex in straight line
974 Double_t vertex[]={0,0,0};
975 calo->GetMomentum(mom,vertex) ;
978 Float_t pt = mom.Pt();
979 //Select only clusters in pt range
980 if(pt < fMinAssocPt || pt > fMaxAssocPt) continue ;
982 AliAODPWG4Particle * mixedCalo = new AliAODPWG4Particle(mom);
983 mixedCalo->SetDetector("EMCAL");
984 mixEventCalo->Add(mixedCalo);
987 //Set the event number where the last event was added, to avoid double pool filling
988 GetReader()->SetLastCaloMixedEvent(GetEventNumber());
990 //printf("Add event to pool with %d clusters \n ",mixEventCalo->GetEntries());
991 poolCalo->AddFirst(mixEventCalo);
994 //printf("Pool size %d, max %d\n",poolCalo->GetSize(), GetNMaxEvMix());
996 if(poolCalo->GetSize() > GetNMaxEvMix())
998 TClonesArray * tmp = static_cast<TClonesArray*>(poolCalo->Last()) ;
999 poolCalo->RemoveLast() ;
1004 //_________________________________________________________________________________________________________________
1005 Bool_t AliAnaParticleHadronCorrelation::FindLeadingOppositeHadronInWindow(AliAODPWG4ParticleCorrelation * particle)
1007 // Select events where the leading charged particle in the opposite hemisphere
1008 // to the trigger particle is in a window centered at 180 from the trigger
1010 Float_t phiTrig = particle->Phi();
1011 Float_t etaTrig = particle->Eta();
1012 Float_t ptTrig = particle->Pt();
1013 Float_t ptLeadHad = -100 ;
1014 Float_t phiLeadHad = -100 ;
1015 Float_t etaLeadHad = -100 ;
1018 for(Int_t ipr = 0;ipr < GetCTSTracks()->GetEntriesFast() ; ipr ++ )
1020 AliVTrack * track = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
1022 Double_t mom[3] = {track->Px(),track->Py(),track->Pz()};
1023 p3.SetXYZ(mom[0],mom[1],mom[2]);
1025 Float_t pt = p3.Pt();
1026 Float_t phi = p3.Phi() ;
1027 if(phi < 0 ) phi+= TMath::TwoPi();
1029 if(pt > ptLeadHad && TMath::Abs(phi-phiTrig) > TMath::PiOver2()) // in opposite hemisphere
1033 etaLeadHad = p3.Eta();
1037 fhPtLeadingOppositeHadron ->Fill(ptTrig, ptLeadHad);
1038 fhPtDiffPhiLeadingOppositeHadron->Fill(ptTrig,phiLeadHad-phiTrig);
1039 fhPtDiffEtaLeadingOppositeHadron->Fill(ptTrig,etaLeadHad-etaTrig);
1043 printf("AliAnaParticleHadronCorrelation::FindLeadingOppositeHadronInWindow() pT %2.2f, phi %2.2f, eta %2.2f\n",
1044 ptLeadHad,phiLeadHad*TMath::RadToDeg(),etaLeadHad);
1046 printf("\t pT trig %2.2f, Dphi (trigger-hadron) %2.2f, Deta (trigger-hadron) %2.2f\n",
1047 ptTrig, (phiLeadHad-phiTrig)*TMath::RadToDeg(), etaLeadHad-etaTrig);
1048 printf("\t cuts pT: min %2.2f, max %2.2f; DPhi: min %2.2f, max %2.2f\n",fMinLeadHadPt,fMaxLeadHadPt,fMinLeadHadPhi*TMath::RadToDeg(),fMaxLeadHadPhi*TMath::RadToDeg());
1051 if( ptLeadHad < fMinLeadHadPt ||
1052 ptLeadHad > fMaxLeadHadPt ) return kFALSE;
1054 //printf("Accept leading hadron pT \n");
1056 if( TMath::Abs(phiLeadHad-phiTrig) < fMinLeadHadPhi ||
1057 TMath::Abs(phiLeadHad-phiTrig) > fMaxLeadHadPhi ) return kFALSE;
1059 //printf("Accept leading hadron phi \n");
1064 //____________________________________________________________
1065 TObjString* AliAnaParticleHadronCorrelation::GetAnalysisCuts()
1067 //Save parameters used for analysis
1068 TString parList ; //this will be list of parameters used for this analysis.
1069 const Int_t buffersize = 560;
1070 char onePar[buffersize] ;
1072 snprintf(onePar,buffersize,"--- AliAnaPaticleHadronCorrelation ---:") ;
1074 snprintf(onePar,buffersize," %3.2f < Pt associated < %3.2f; ", fMinAssocPt, fMaxAssocPt) ;
1076 snprintf(onePar,buffersize," %3.2f < Phi trigger particle-Hadron < %3.2f; ", fDeltaPhiMinCut, fDeltaPhiMaxCut) ;
1078 snprintf(onePar,buffersize," %3.2f < Phi trigger particle-UeHadron < %3.2f; ", fUeDeltaPhiMinCut, fUeDeltaPhiMaxCut) ;
1080 snprintf(onePar,buffersize,"Isolated Trigger? %d;", fSelectIsolated) ;
1082 snprintf(onePar,buffersize,"Several UE? %d;", fMakeSeveralUE) ;
1084 snprintf(onePar,buffersize,"Name of AOD Pi0 Branch %s;", fPi0AODBranchName.Data());
1086 snprintf(onePar,buffersize,"Do Decay-hadron correlation ? pi0 %d, decay %d;", fPi0Trigger, fDecayTrigger) ;
1088 snprintf(onePar,buffersize,"Select absolute leading for cluster triggers ? %d or Near Side Leading %d;",
1089 fMakeAbsoluteLeading, fMakeNearSideLeading) ;
1091 snprintf(onePar,buffersize,"Associated particle pt bins %d: ", fNAssocPtBins) ;
1093 for (Int_t ibin = 0; ibin<fNAssocPtBins; ibin++) {
1094 snprintf(onePar,buffersize,"bin %d = [%2.1f,%2.1f];", ibin, fAssocPtBinLimit[ibin], fAssocPtBinLimit[ibin+1]) ;
1098 //Get parameters set in base class.
1099 parList += GetBaseParametersList() ;
1101 //Get parameters set in FiducialCut class (not available yet)
1102 //parlist += GetFidCut()->GetFidCutParametersList()
1104 return new TObjString(parList) ;
1108 //________________________________________________________________
1109 TList * AliAnaParticleHadronCorrelation::GetCreateOutputObjects()
1111 // Create histograms to be saved in output file and
1112 // store them in fOutputContainer
1114 TList * outputContainer = new TList() ;
1115 outputContainer->SetName("CorrelationHistos") ;
1117 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();
1118 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();
1119 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();
1121 Int_t nMixBins = GetNCentrBin()*GetNZvertBin()*GetNRPBin();
1123 TString nameMC[] = {"Photon","Pi0","Pi0Decay","EtaDecay","OtherDecay","Electron","Hadron"};
1124 TString pileUpName[] = {"SPD","EMCAL","SPDOrEMCAL","SPDAndEMCAL","SPDAndNotEMCAL","EMCALAndNotSPD","NotSPDAndNotEMCAL"} ;
1126 // For vz dependent histograms, if option ON
1128 if(fCorrelVzBin) nz = GetNZvertBin();
1132 fhPtTriggerInput = new TH1F("hPtTriggerInput","Input trigger #it{p}_{T}", nptbins,ptmin,ptmax);
1133 fhPtTriggerInput->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
1134 outputContainer->Add(fhPtTriggerInput);
1136 if( fM02MaxCut > 0 && fM02MinCut > 0 )
1138 fhPtTriggerSSCut = new TH1F("hPtTriggerSSCut","Trigger #it{p}_{T} after #lambda^{2}_{0} cut", nptbins,ptmin,ptmax);
1139 fhPtTriggerSSCut->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
1140 outputContainer->Add(fhPtTriggerSSCut);
1143 if( OnlyIsolated() )
1145 fhPtTriggerIsoCut = new TH1F("hPtTriggerIsoCut","Trigger #it{p}_{T} after isolation (and #lambda^{2}_{0}) cut", nptbins,ptmin,ptmax);
1146 fhPtTriggerIsoCut->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
1147 outputContainer->Add(fhPtTriggerIsoCut);
1150 fhPtTriggerFidCut = new TH1F("hPtTriggerFidCut","Trigger #it{p}_{T} after fiducial (isolation and #lambda^{2}_{0}) cut", nptbins,ptmin,ptmax);
1151 fhPtTriggerFidCut->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
1152 outputContainer->Add(fhPtTriggerFidCut);
1154 fhPtTrigger = new TH1F("hPtTrigger","#it{p}_{T} distribution of trigger particles", nptbins,ptmin,ptmax);
1155 fhPtTrigger->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
1156 outputContainer->Add(fhPtTrigger);
1160 for(Int_t i=0; i < 7; i++)
1162 fhPtTriggerMC[i] = new TH1F(Form("hPtTrigger_MC%s",nameMC[i].Data()),
1163 Form("#it{p}_{T} distribution of trigger particles, trigger origin is %s",nameMC[i].Data()),
1164 nptbins,ptmin,ptmax);
1165 fhPtTriggerMC[i]->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
1166 outputContainer->Add(fhPtTriggerMC[i]);
1172 fhPtTriggerVzBin = new TH2F("hPtTriggerVzBin","#it{p}_{T} distribution of trigger particles vs vz bin", nptbins,ptmin,ptmax,GetNZvertBin(),0,GetNZvertBin());
1173 fhPtTriggerVzBin->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
1174 fhPtTriggerVzBin->SetYTitle("#it{v}_{#it{z}} bin");
1175 outputContainer->Add(fhPtTriggerVzBin);
1178 fhPtTriggerBin = new TH2F ("hPtTriggerBin","#it{p}_{T} distribution of trigger particles", nptbins,ptmin,ptmax,nMixBins,0,nMixBins);
1179 fhPtTriggerBin->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
1180 fhPtTriggerBin->SetYTitle("Bin");
1181 outputContainer->Add(fhPtTriggerBin);
1183 fhPhiTrigger = new TH2F ("hPhiTrigger","#phi distribution of trigger Particles",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
1184 fhPhiTrigger->SetYTitle("#phi (rad)");
1185 outputContainer->Add(fhPhiTrigger);
1187 fhEtaTrigger = new TH2F ("hEtaTrigger","#eta distribution of trigger",nptbins,ptmin,ptmax, netabins,etamin,etamax);
1188 fhEtaTrigger->SetYTitle("#eta ");
1189 outputContainer->Add(fhEtaTrigger);
1191 if(fFillHighMultHistograms)
1193 fhPtTriggerCentrality = new TH2F("hPtTriggerCentrality","Trigger particle #it{p}_{T} vs centrality",nptbins,ptmin,ptmax,100,0.,100) ;
1194 fhPtTriggerCentrality->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
1195 fhPtTriggerCentrality->SetYTitle("Centrality (%)");
1196 outputContainer->Add(fhPtTriggerCentrality) ;
1198 fhPtTriggerEventPlane = new TH2F("hPtTriggerEventPlane","Trigger particle #it{p}_{T} vs event plane angle",nptbins,ptmin,ptmax, 100,0.,TMath::Pi()) ;
1199 fhPtTriggerEventPlane->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
1200 fhPtTriggerEventPlane->SetXTitle("EP angle (rad)");
1201 outputContainer->Add(fhPtTriggerEventPlane) ;
1203 fhTriggerEventPlaneCentrality = new TH2F("hTriggerEventPlaneCentrality","Trigger particle centrality vs event plane angle",100,0.,100,100,0.,TMath::Pi()) ;
1204 fhTriggerEventPlaneCentrality->SetXTitle("Centrality (%)");
1205 fhTriggerEventPlaneCentrality->SetYTitle("EP angle (rad)");
1206 outputContainer->Add(fhTriggerEventPlaneCentrality) ;
1209 // Leading hadron in oposite side
1210 if(fSelectLeadingHadronAngle)
1212 fhPtLeadingOppositeHadron = new TH2F("hPtTriggerPtLeadingOppositeHadron","Leading hadron opposite to trigger vs trigger #it{p}_{T}",
1213 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
1214 fhPtLeadingOppositeHadron->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
1215 fhPtLeadingOppositeHadron->SetYTitle("#it{p}_{T}^{lead hadron} (GeV/#it{c})");
1216 outputContainer->Add(fhPtLeadingOppositeHadron);
1218 fhPtDiffPhiLeadingOppositeHadron = new TH2F("hPtTriggerDiffPhiTriggerLeadingOppositeHadron","#phi_{trigger}-#phi_{leading opposite hadron} vs #it{p}_{T}^{trig}",
1219 nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax);
1220 fhPtDiffPhiLeadingOppositeHadron->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
1221 fhPtDiffPhiLeadingOppositeHadron->SetYTitle("#phi_{trigger}-#phi_{leading opposite hadron} (rad)");
1222 outputContainer->Add(fhPtDiffPhiLeadingOppositeHadron);
1224 fhPtDiffEtaLeadingOppositeHadron = new TH2F("hPtTriggerDiffEtaTriggerPhiLeadingOppositeHadron","#eta_{trigger}-#eta_{leading opposite hadron} vs #it{p}_{T}^{trig}",
1225 nptbins,ptmin,ptmax,ndeltaetabins,deltaetamin,deltaetamax);
1226 fhPtDiffEtaLeadingOppositeHadron->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
1227 fhPtDiffEtaLeadingOppositeHadron->SetYTitle("#eta_{trigger}-#eta_{leading opposite hadron}");
1228 outputContainer->Add(fhPtDiffEtaLeadingOppositeHadron);
1231 //Correlation with charged hadrons
1233 fhDeltaPhiDeltaEtaCharged = new TH2F
1234 ("hDeltaPhiDeltaEtaCharged","#eta_{trigger} - #eta_{h^{#pm}} vs #phi_{trigger} - #phi_{h^{#pm}}",
1235 ndeltaphibins ,deltaphimin,deltaphimax,ndeltaetabins,deltaetamin,deltaetamax);
1236 fhDeltaPhiDeltaEtaCharged->SetXTitle("#Delta #phi (rad)");
1237 fhDeltaPhiDeltaEtaCharged->SetYTitle("#Delta #eta");
1239 fhDeltaPhiDeltaEtaChargedPtA3GeV = new TH2F
1240 ("hDeltaPhiDeltaEtaChargedPtA3GeV","#eta_{trigger} - #eta_{h^{#pm}} vs #phi_{trigger} - #phi_{h^{#pm}, #it{p}_{TA}>3 GeV/#it{c}}",
1241 ndeltaphibins ,deltaphimin,deltaphimax,ndeltaetabins,deltaetamin,deltaetamax);
1242 fhDeltaPhiDeltaEtaChargedPtA3GeV->SetXTitle("#Delta #phi (rad)");
1243 fhDeltaPhiDeltaEtaChargedPtA3GeV->SetYTitle("#Delta #eta");
1245 fhPhiCharged = new TH2F
1246 ("hPhiCharged","#phi_{h^{#pm}} vs #it{p}_{T #pm}",
1247 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
1248 fhPhiCharged->SetYTitle("#phi_{h^{#pm}} (rad)");
1249 fhPhiCharged->SetXTitle("#it{p}_{T #pm} (GeV/#it{c})");
1251 fhEtaCharged = new TH2F
1252 ("hEtaCharged","#eta_{h^{#pm}} vs #it{p}_{T #pm}",
1253 nptbins,ptmin,ptmax,netabins,etamin,etamax);
1254 fhEtaCharged->SetYTitle("#eta_{h^{#pm}} (rad)");
1255 fhEtaCharged->SetXTitle("#it{p}_{T #pm} (GeV/#it{c})");
1257 fhDeltaPhiCharged = new TH2F
1258 ("hDeltaPhiCharged","#phi_{trigger} - #phi_{h^{#pm}} vs #it{p}_{T trigger}",
1259 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1260 fhDeltaPhiCharged->SetYTitle("#Delta #phi (rad)");
1261 fhDeltaPhiCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1263 fhDeltaPhiChargedPtA3GeV = new TH2F
1264 ("hDeltaPhiChargedPtA3GeV","#phi_{trigger} - #phi_{h^{#pm}} vs #it{p}_{T trigger}, #it{p}_{TA}>3 GeV/#it{c}",
1265 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1266 fhDeltaPhiChargedPtA3GeV->SetYTitle("#Delta #phi (rad)");
1267 fhDeltaPhiChargedPtA3GeV->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1270 fhDeltaPhiChargedPt = new TH2F
1271 ("hDeltaPhiChargedPt","#phi_{trigger} - #phi_{#h^{#pm}} vs #it{p}_{T h^{#pm}}",
1272 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1273 fhDeltaPhiChargedPt->SetYTitle("#Delta #phi (rad)");
1274 fhDeltaPhiChargedPt->SetXTitle("#it{p}_{T h^{#pm}} (GeV/#it{c})");
1276 fhDeltaEtaCharged = new TH2F
1277 ("hDeltaEtaCharged","#eta_{trigger} - #eta_{h^{#pm}} vs #it{p}_{T trigger}",
1278 nptbins,ptmin,ptmax,ndeltaetabins,deltaetamin,deltaetamax);
1279 fhDeltaEtaCharged->SetYTitle("#Delta #eta");
1280 fhDeltaEtaCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1282 fhDeltaEtaChargedPtA3GeV = new TH2F
1283 ("hDeltaEtaChargedPtA3GeV","#eta_{trigger} - #eta_{h^{#pm}} vs #it{p}_{T trigger}, #it{p}_{TA}>3 GeV/#it{c}",
1284 nptbins,ptmin,ptmax,ndeltaetabins,deltaetamin,deltaetamax);
1285 fhDeltaEtaChargedPtA3GeV->SetYTitle("#Delta #eta");
1286 fhDeltaEtaChargedPtA3GeV->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1289 new TH2F("hXECharged","#it{x}_{#it{E}} for charged tracks",
1290 nptbins,ptmin,ptmax,200,0.,2.);
1291 fhXECharged->SetYTitle("#it{x}_{#it{E}}");
1292 fhXECharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1295 new TH2F("hXECharged_Cone2","#it{x}_{#it{E}} for charged tracks in cone 2 (5#pi/6-7#pi/6)",
1296 nptbins,ptmin,ptmax,200,0.,2.);
1297 fhXECharged_Cone2->SetYTitle("#it{x}_{#it{E}}");
1298 fhXECharged_Cone2->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1301 new TH2F("hXEPositiveCharged","#it{x}_{#it{E}} for positive charged tracks",
1302 nptbins,ptmin,ptmax,200,0.,2.);
1303 fhXEPosCharged->SetYTitle("#it{x}_{#it{E}}");
1304 fhXEPosCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1307 new TH2F("hXENegativeCharged","#it{x}_{#it{E}} for negative charged tracks",
1308 nptbins,ptmin,ptmax,200,0.,2.);
1309 fhXENegCharged->SetYTitle("#it{x}_{#it{E}}");
1310 fhXENegCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1313 new TH2F("hHbpXECharged","#xi = ln(1/#it{x}_{#it{E}}) with charged hadrons",
1314 nptbins,ptmin,ptmax,200,0.,10.);
1315 fhPtHbpXECharged->SetYTitle("ln(1/#it{x}_{#it{E}})");
1316 fhPtHbpXECharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1318 fhPtHbpXECharged_Cone2 =
1319 new TH2F("hHbpXECharged_Cone2","#xi = ln(1/#it{x}_{#it{E}}) with charged hadrons in cone 2 (5#pi/6-7#pi/6)",
1320 nptbins,ptmin,ptmax,200,0.,10.);
1321 fhPtHbpXECharged_Cone2->SetYTitle("ln(1/#it{x}_{#it{E}})");
1322 fhPtHbpXECharged_Cone2->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1325 new TH2F("hZTCharged","#it{z}_{T} for charged tracks",
1326 nptbins,ptmin,ptmax,200,0.,2.);
1327 fhZTCharged->SetYTitle("#it{z}_{T}");
1328 fhZTCharged->SetXTitle("#it{p}_{T trigger}");
1331 new TH2F("hZTPositiveCharged","#it{z}_{T} for positive charged tracks",
1332 nptbins,ptmin,ptmax,200,0.,2.);
1333 fhZTPosCharged->SetYTitle("#it{z}_{T}");
1334 fhZTPosCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1337 new TH2F("hZTNegativeCharged","#it{z}_{T} for negative charged tracks",
1338 nptbins,ptmin,ptmax,200,0.,2.);
1339 fhZTNegCharged->SetYTitle("#it{z}_{T}");
1340 fhZTNegCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1343 new TH2F("hHbpZTCharged","#xi = ln(1/#it{z}_{T}) with charged hadrons",
1344 nptbins,ptmin,ptmax,200,0.,10.);
1345 fhPtHbpZTCharged->SetYTitle("ln(1/#it{z}_{T})");
1346 fhPtHbpZTCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1349 new TH2F("hPtTrigPout","Pout with triggers",
1350 nptbins,ptmin,ptmax,2*nptbins,-ptmax,ptmax);
1351 fhPtTrigPout->SetYTitle("#it{p}_{out} (GeV/#it{c})");
1352 fhPtTrigPout->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1355 new TH2F("hPtTrigCharged","trigger and charged tracks pt distribution",
1356 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
1357 fhPtTrigCharged->SetYTitle("#it{p}_{T h^{#pm}} (GeV/#it{c})");
1358 fhPtTrigCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1360 outputContainer->Add(fhDeltaPhiDeltaEtaCharged);
1361 outputContainer->Add(fhDeltaPhiDeltaEtaChargedPtA3GeV);
1362 outputContainer->Add(fhPhiCharged) ;
1363 outputContainer->Add(fhEtaCharged) ;
1364 outputContainer->Add(fhDeltaPhiCharged) ;
1365 outputContainer->Add(fhDeltaPhiChargedPtA3GeV) ;
1366 outputContainer->Add(fhDeltaEtaCharged) ;
1367 outputContainer->Add(fhDeltaEtaChargedPtA3GeV) ;
1368 outputContainer->Add(fhDeltaPhiChargedPt) ;
1370 outputContainer->Add(fhXECharged) ;
1371 outputContainer->Add(fhXECharged_Cone2) ;
1375 for(Int_t i=0; i < 7; i++)
1378 fhDeltaPhiChargedMC[i] = new TH2F(Form("hDeltaPhiCharged_MC%s",nameMC[i].Data()),
1379 Form("#Delta #phi for charged tracks, trigger origin is %s",nameMC[i].Data()),
1380 nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax);
1381 fhDeltaPhiChargedMC[i]->SetYTitle("#it{x}_{#it{E}}");
1382 fhDeltaPhiChargedMC[i]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1383 outputContainer->Add(fhDeltaPhiChargedMC[i]) ;
1385 fhXEChargedMC[i] = new TH2F(Form("hXECharged_MC%s",nameMC[i].Data()),
1386 Form("#it{x}_{#it{E}} for charged tracks, trigger origin is %s",nameMC[i].Data()),
1387 nptbins,ptmin,ptmax,200,0.,2.);
1388 fhXEChargedMC[i]->SetYTitle("#it{x}_{#it{E}}");
1389 fhXEChargedMC[i]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1390 outputContainer->Add(fhXEChargedMC[i]) ;
1394 outputContainer->Add(fhXEPosCharged) ;
1395 outputContainer->Add(fhXENegCharged) ;
1396 outputContainer->Add(fhPtHbpXECharged) ;
1397 outputContainer->Add(fhPtHbpXECharged_Cone2) ;
1399 outputContainer->Add(fhZTCharged) ;
1400 outputContainer->Add(fhZTPosCharged) ;
1401 outputContainer->Add(fhZTNegCharged) ;
1402 outputContainer->Add(fhPtHbpZTCharged) ;
1404 outputContainer->Add(fhPtTrigPout) ;
1405 outputContainer->Add(fhPtTrigCharged) ;
1408 if(fMakeSeveralUE) right = "Right";
1410 fhUePart = new TH1F("hUePart","UE particles distribution vs pt trig",
1411 nptbins,ptmin,ptmax);
1412 fhUePart->SetYTitle("dNch");
1413 fhUePart->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1415 fhDeltaPhiUeChargedPt = new TH2F
1416 (Form("hDeltaPhiUe%sChargedPt",right.Data()),"#phi_{trigger} - #phi_{#Ueh^{#pm}} vs #it{p}_{T Ueh^{#pm}}",
1417 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1418 fhDeltaPhiUeChargedPt->SetYTitle("#Delta #phi (rad)");
1419 fhDeltaPhiUeChargedPt->SetXTitle("#it{p}_{T h^{#pm}} (GeV/#it{c})");
1422 new TH2F(Form("hXEUeCharged%s",right.Data()),"#it{x}_{#it{E}} for Underlying Event",
1423 nptbins,ptmin,ptmax,200,0.,2.);
1424 fhXEUeCharged->SetYTitle("#it{x}_{#it{E}}");
1425 fhXEUeCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1427 fhPtHbpXEUeCharged =
1428 new TH2F(Form("hHbpXEUeCharged%s",right.Data()),"#xi = ln(1/#it{x}_{#it{E}}) for Underlying Event",
1429 nptbins,ptmin,ptmax,200,0.,10.);
1430 fhPtHbpXEUeCharged->SetYTitle("ln(1/#it{x}_{#it{E}})");
1431 fhPtHbpXEUeCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1434 new TH2F(Form("hZTUeCharged%s",right.Data()),"#it{z}_{T} for Underlying Event",
1435 nptbins,ptmin,ptmax,200,0.,2.);
1436 fhZTUeCharged->SetYTitle("#it{z}_{T}");
1437 fhZTUeCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1439 fhPtHbpZTUeCharged =
1440 new TH2F(Form("hHbpZTUeCharged%s",right.Data()),"#xi = ln(1/#it{z}_{T}) for Underlying Event",
1441 nptbins,ptmin,ptmax,200,0.,10.);
1442 fhPtHbpZTUeCharged->SetYTitle("ln(1/#it{x}_{#it{E}})");
1443 fhPtHbpZTUeCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1445 outputContainer->Add(fhUePart);
1446 outputContainer->Add(fhDeltaPhiUeChargedPt) ;
1447 outputContainer->Add(fhXEUeCharged) ;
1448 outputContainer->Add(fhPtHbpXEUeCharged) ;
1449 outputContainer->Add(fhZTUeCharged) ;
1450 outputContainer->Add(fhPtHbpZTUeCharged) ;
1454 fhDeltaPhiUeLeftCharged = new TH2F
1455 ("hDeltaPhiUeLeftChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs #it{p}_{T Ueh^{#pm}} with UE left side range of trigger particles",
1456 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1457 fhDeltaPhiUeLeftCharged->SetYTitle("#Delta #phi (rad)");
1458 fhDeltaPhiUeLeftCharged->SetXTitle("#it{p}_{T h^{#pm}} (GeV/#it{c})");
1459 outputContainer->Add(fhDeltaPhiUeLeftCharged) ;
1461 fhDeltaPhiUeLeftUpCharged = new TH2F
1462 ("hDeltaPhiUeLeftUpChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs #it{p}_{T Ueh^{#pm}} with UE left Up side range of trigger particles",
1463 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1464 fhDeltaPhiUeLeftUpCharged->SetYTitle("#Delta #phi (rad)");
1465 fhDeltaPhiUeLeftUpCharged->SetXTitle("#it{p}_{T h^{#pm}} (GeV/#it{c})");
1466 outputContainer->Add(fhDeltaPhiUeLeftUpCharged) ;
1468 fhDeltaPhiUeRightUpCharged = new TH2F
1469 ("hDeltaPhiUeRightUpChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs #it{p}_{T Ueh^{#pm}} with UE right Up side range of trigger particles",
1470 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1471 fhDeltaPhiUeRightUpCharged->SetYTitle("#Delta #phi (rad)");
1472 fhDeltaPhiUeRightUpCharged->SetXTitle("#it{p}_{T h^{#pm}} (GeV/#it{c})");
1473 outputContainer->Add(fhDeltaPhiUeRightUpCharged) ;
1475 fhDeltaPhiUeLeftDownCharged = new TH2F
1476 ("hDeltaPhiUeLeftDownChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs #it{p}_{T Ueh^{#pm}} with UE left Down side range of trigger particles",
1477 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1478 fhDeltaPhiUeLeftDownCharged->SetYTitle("#Delta #phi (rad)");
1479 fhDeltaPhiUeLeftDownCharged->SetXTitle("#it{p}_{T h^{#pm}} (GeV/#it{c})");
1480 outputContainer->Add(fhDeltaPhiUeLeftDownCharged) ;
1482 fhDeltaPhiUeRightDownCharged = new TH2F
1483 ("hDeltaPhiUeRightDownChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs #it{p}_{T Ueh^{#pm}} with UE right Down side range of trigger particles",
1484 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1485 fhDeltaPhiUeRightDownCharged->SetYTitle("#Delta #phi (rad)");
1486 fhDeltaPhiUeRightDownCharged->SetXTitle("#it{p}_{T h^{#pm}} (GeV/#it{c})");
1487 outputContainer->Add(fhDeltaPhiUeRightDownCharged) ;
1490 new TH2F("hXEUeChargedLeft","#it{x}_{#it{E}} with UE left side of trigger",
1491 nptbins,ptmin,ptmax,200,0.,2.);
1492 fhXEUeLeftCharged->SetYTitle("#it{x}_{#it{E} Ueh^{#pm}}");
1493 fhXEUeLeftCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1494 outputContainer->Add(fhXEUeLeftCharged) ;
1496 fhXEUeLeftUpCharged =
1497 new TH2F("hXEUeChargedLeftUp","#it{x}_{#it{E}} with UE left Up side of trigger",
1498 nptbins,ptmin,ptmax,200,0.,2.);
1499 fhXEUeLeftUpCharged->SetYTitle("#it{x}_{#it{E} Ueh^{#pm}}");
1500 fhXEUeLeftUpCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1501 outputContainer->Add(fhXEUeLeftUpCharged) ;
1503 fhXEUeRightUpCharged =
1504 new TH2F("hXEUeChargedRightUp","#it{x}_{#it{E} h^{#pm}} with UE right Up side of trigger",
1505 nptbins,ptmin,ptmax,200,0.,2.);
1506 fhXEUeRightUpCharged->SetYTitle("#it{z}_{trigger Ueh^{#pm}}");
1507 fhXEUeRightUpCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1508 outputContainer->Add(fhXEUeRightUpCharged) ;
1510 fhXEUeLeftDownCharged =
1511 new TH2F("hXEUeChargedLeftDown","#it{x}_{#it{E}} with UE left Down side of trigger",
1512 nptbins,ptmin,ptmax,200,0.,2.);
1513 fhXEUeLeftDownCharged->SetYTitle("#it{x}_{#it{E} Ueh^{#pm}}");
1514 fhXEUeLeftDownCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1515 outputContainer->Add(fhXEUeLeftDownCharged) ;
1517 fhXEUeRightDownCharged =
1518 new TH2F("hXEUeChargedRightDown","#it{x}_{#it{E} h^{#pm}} with UE right Down side of trigger",
1519 nptbins,ptmin,ptmax,200,0.,2.);
1520 fhXEUeRightDownCharged->SetYTitle("#it{z}_{trigger Ueh^{#pm}}");
1521 fhXEUeRightDownCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1522 outputContainer->Add(fhXEUeRightDownCharged) ;
1524 fhPtHbpXEUeLeftCharged =
1525 new TH2F("hHbpXEUeChargedLeft","#xi = ln(1/#it{x}_{#it{E}}) with charged UE left side of trigger",
1526 nptbins,ptmin,ptmax,200,0.,10.);
1527 fhPtHbpXEUeLeftCharged->SetYTitle("ln(1/#it{x}_{#it{E}})");
1528 fhPtHbpXEUeLeftCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1529 outputContainer->Add(fhPtHbpXEUeLeftCharged) ;
1532 new TH2F("hZTUeChargedLeft","#it{z}_{trigger h^{#pm}} = #it{p}_{T Ueh^{#pm}} / #it{p}_{T trigger} with UE left side of trigger",
1533 nptbins,ptmin,ptmax,200,0.,2.);
1534 fhZTUeLeftCharged->SetYTitle("#it{z}_{trigger Ueh^{#pm}}");
1535 fhZTUeLeftCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1536 outputContainer->Add(fhZTUeLeftCharged) ;
1538 fhPtHbpZTUeLeftCharged =
1539 new TH2F("hHbpZTUeChargedLeft","#xi = ln(1/#it{z}_{T}) with charged UE left side of trigger",
1540 nptbins,ptmin,ptmax,200,0.,10.);
1541 fhPtHbpZTUeLeftCharged->SetYTitle("ln(1/#it{z}_{T})");
1542 fhPtHbpZTUeLeftCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1543 outputContainer->Add(fhPtHbpZTUeLeftCharged) ;
1546 if(fFillPileUpHistograms)
1548 fhDeltaPhiChargedOtherBC = new TH2F
1549 ("hDeltaPhiChargedOtherBC","#phi_{trigger} - #phi_{h^{#pm}} vs #it{p}_{T trigger}, track BC!=0",
1550 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1551 fhDeltaPhiChargedOtherBC->SetYTitle("#Delta #phi (rad)");
1552 fhDeltaPhiChargedOtherBC->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1554 fhDeltaPhiChargedPtA3GeVOtherBC = new TH2F
1555 ("hDeltaPhiChargedPtA3GeVOtherBC","#phi_{trigger} - #phi_{h^{#pm}} vs #it{p}_{T trigger}, #it{p}_{TA}>3 GeV/#it{c}, track BC!=0",
1556 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1557 fhDeltaPhiChargedPtA3GeVOtherBC->SetYTitle("#Delta #phi (rad)");
1558 fhDeltaPhiChargedPtA3GeVOtherBC->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1560 fhPtTrigChargedOtherBC =
1561 new TH2F("hPtTrigChargedOtherBC","trigger and charged tracks pt distribution, track BC!=0",
1562 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
1563 fhPtTrigChargedOtherBC->SetYTitle("#it{p}_{T h^{#pm}} (GeV/#it{c})");
1564 fhPtTrigChargedOtherBC->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1566 fhXEChargedOtherBC =
1567 new TH2F("hXEChargedOtherBC","#it{x}_{#it{E}} for charged tracks, track BC!=0",
1568 nptbins,ptmin,ptmax,200,0.,2.);
1569 fhXEChargedOtherBC->SetYTitle("#it{x}_{#it{E}}");
1570 fhXEChargedOtherBC->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1572 fhXEUeChargedOtherBC =
1573 new TH2F("hXEUeChargedOtherBC","#it{x}_{#it{E}} for Underlying Event, track BC!=0",
1574 nptbins,ptmin,ptmax,200,0.,2.);
1575 fhXEUeChargedOtherBC->SetYTitle("#it{x}_{#it{E}}");
1576 fhXEUeChargedOtherBC->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1578 fhZTChargedOtherBC =
1579 new TH2F("hZTChargedOtherBC","#it{z}_{T} for charged tracks, track BC!=0",
1580 nptbins,ptmin,ptmax,200,0.,2.);
1581 fhZTChargedOtherBC->SetYTitle("#it{z}_{T}");
1582 fhZTChargedOtherBC->SetXTitle("#it{p}_{T trigger}");
1584 fhZTUeChargedOtherBC =
1585 new TH2F("hZTUeChargedOtherBC","#it{z}_{T} for Underlying Event, track BC!=0",
1586 nptbins,ptmin,ptmax,200,0.,2.);
1587 fhZTUeChargedOtherBC->SetYTitle("#it{z}_{T}");
1588 fhZTUeChargedOtherBC->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1590 outputContainer->Add(fhDeltaPhiChargedOtherBC) ;
1591 outputContainer->Add(fhDeltaPhiChargedPtA3GeVOtherBC) ;
1592 outputContainer->Add(fhXEChargedOtherBC) ;
1593 outputContainer->Add(fhXEUeChargedOtherBC) ;
1594 outputContainer->Add(fhZTChargedOtherBC) ;
1595 outputContainer->Add(fhZTUeChargedOtherBC) ;
1596 outputContainer->Add(fhPtTrigChargedOtherBC) ;
1598 fhDeltaPhiChargedBC0 = new TH2F
1599 ("hDeltaPhiChargedBC0","#phi_{trigger} - #phi_{h^{#pm}} vs #it{p}_{T trigger}, track BC==0",
1600 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1601 fhDeltaPhiChargedBC0->SetYTitle("#Delta #phi (rad)");
1602 fhDeltaPhiChargedBC0->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1604 fhDeltaPhiChargedPtA3GeVBC0 = new TH2F
1605 ("hDeltaPhiChargedPtA3GeVBC0","#phi_{trigger} - #phi_{h^{#pm}} vs #it{p}_{T trigger}, #it{p}_{TA}>3 GeV/#it{c}, track BC==0",
1606 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1607 fhDeltaPhiChargedPtA3GeVBC0->SetYTitle("#Delta #phi (rad)");
1608 fhDeltaPhiChargedPtA3GeVBC0->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1610 fhPtTrigChargedBC0 =
1611 new TH2F("hPtTrigChargedBC0","trigger and charged tracks pt distribution, track BC==0",
1612 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
1613 fhPtTrigChargedBC0->SetYTitle("#it{p}_{T h^{#pm}} (GeV/#it{c})");
1614 fhPtTrigChargedBC0->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1617 new TH2F("hXEChargedBC0","#it{x}_{#it{E}} for charged tracks, track BC==0",
1618 nptbins,ptmin,ptmax,200,0.,2.);
1619 fhXEChargedBC0->SetYTitle("#it{x}_{#it{E}}");
1620 fhXEChargedBC0->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1623 new TH2F("hXEUeChargedBC0","#it{x}_{#it{E}} for Underlying Event, track BC==0",
1624 nptbins,ptmin,ptmax,200,0.,2.);
1625 fhXEUeChargedBC0->SetYTitle("#it{x}_{#it{E}}");
1626 fhXEUeChargedBC0->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1629 new TH2F("hZTChargedBC0","#it{z}_{T} for charged tracks, track BC==0",
1630 nptbins,ptmin,ptmax,200,0.,2.);
1631 fhZTChargedBC0->SetYTitle("#it{z}_{T}");
1632 fhZTChargedBC0->SetXTitle("#it{p}_{T trigger}");
1635 new TH2F("hZTUeChargedBC0","#it{z}_{T} for Underlying Event, track BC==0",
1636 nptbins,ptmin,ptmax,200,0.,2.);
1637 fhZTUeChargedBC0->SetYTitle("#it{z}_{T}");
1638 fhZTUeChargedBC0->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1640 outputContainer->Add(fhDeltaPhiChargedBC0) ;
1641 outputContainer->Add(fhDeltaPhiChargedPtA3GeVBC0) ;
1642 outputContainer->Add(fhXEChargedBC0) ;
1643 outputContainer->Add(fhXEUeChargedBC0) ;
1644 outputContainer->Add(fhZTChargedBC0) ;
1645 outputContainer->Add(fhZTUeChargedBC0) ;
1646 outputContainer->Add(fhPtTrigChargedBC0) ;
1648 fhPtTriggerVtxBC0 = new TH1F("hPtTriggerVtxBC0","#it{p}_{T} distribution of trigger particles", nptbins,ptmin,ptmax);
1649 fhPtTriggerVtxBC0->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
1651 fhDeltaPhiChargedVtxBC0 = new TH2F
1652 ("hDeltaPhiChargedVtxBC0","#phi_{trigger} - #phi_{h^{#pm}} vs #it{p}_{T trigger}, track BC==0",
1653 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1654 fhDeltaPhiChargedVtxBC0->SetYTitle("#Delta #phi (rad)");
1655 fhDeltaPhiChargedVtxBC0->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1657 fhDeltaPhiChargedPtA3GeVVtxBC0 = new TH2F
1658 ("hDeltaPhiChargedPtA3GeVVtxBC0","#phi_{trigger} - #phi_{h^{#pm}} vs #it{p}_{T trigger}, #it{p}_{TA}>3 GeV/#it{c}, track BC==0",
1659 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1660 fhDeltaPhiChargedPtA3GeVVtxBC0->SetYTitle("#Delta #phi (rad)");
1661 fhDeltaPhiChargedPtA3GeVVtxBC0->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1663 fhPtTrigChargedVtxBC0 =
1664 new TH2F("hPtTrigChargedVtxBC0","trigger and charged tracks pt distribution, track BC==0",
1665 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
1666 fhPtTrigChargedVtxBC0->SetYTitle("#it{p}_{T h^{#pm}} (GeV/#it{c})");
1667 fhPtTrigChargedVtxBC0->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1670 new TH2F("hXEChargedVtxBC0","#it{x}_{#it{E}} for charged tracks, track BC==0",
1671 nptbins,ptmin,ptmax,200,0.,2.);
1672 fhXEChargedVtxBC0->SetYTitle("#it{x}_{#it{E}}");
1673 fhXEChargedVtxBC0->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1675 fhXEUeChargedVtxBC0 =
1676 new TH2F("hXEUeChargedVtxBC0","#it{x}_{#it{E}} for Underlying Event, track BC==0",
1677 nptbins,ptmin,ptmax,200,0.,2.);
1678 fhXEUeChargedVtxBC0->SetYTitle("#it{x}_{#it{E}}");
1679 fhXEUeChargedVtxBC0->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1682 new TH2F("hZTChargedVtxBC0","#it{z}_{T} for charged tracks, track BC==0",
1683 nptbins,ptmin,ptmax,200,0.,2.);
1684 fhZTChargedVtxBC0->SetYTitle("#it{z}_{T}");
1685 fhZTChargedVtxBC0->SetXTitle("#it{p}_{T trigger}");
1687 fhZTUeChargedVtxBC0 =
1688 new TH2F("hZTUeChargedVtxBC0","#it{z}_{T} for Underlying Event, track BC==0",
1689 nptbins,ptmin,ptmax,200,0.,2.);
1690 fhZTUeChargedVtxBC0->SetYTitle("#it{z}_{T}");
1691 fhZTUeChargedVtxBC0->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1693 outputContainer->Add(fhPtTriggerVtxBC0);
1694 outputContainer->Add(fhDeltaPhiChargedVtxBC0) ;
1695 outputContainer->Add(fhDeltaPhiChargedPtA3GeVVtxBC0) ;
1696 outputContainer->Add(fhXEChargedVtxBC0) ;
1697 outputContainer->Add(fhXEUeChargedVtxBC0) ;
1698 outputContainer->Add(fhZTChargedVtxBC0) ;
1699 outputContainer->Add(fhZTUeChargedVtxBC0) ;
1700 outputContainer->Add(fhPtTrigChargedVtxBC0) ;
1702 for(Int_t i = 0 ; i < 7 ; i++)
1704 fhPtTriggerPileUp[i] = new TH1F(Form("hPtTriggerPileUp%s",pileUpName[i].Data()),
1705 Form("#it{p}_{T} distribution of trigger particles, %s Pile-Up event",pileUpName[i].Data()), nptbins,ptmin,ptmax);
1706 fhPtTriggerPileUp[i]->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
1707 outputContainer->Add(fhPtTriggerPileUp[i]);
1709 fhDeltaPhiChargedPileUp[i] = new TH2F(Form("hDeltaPhiChargedPileUp%s",pileUpName[i].Data()),
1710 Form("#phi_{trigger} - #phi_{h^{#pm}} vs #it{p}_{T trigger}, %s Pile-Up event",pileUpName[i].Data()),
1711 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1712 fhDeltaPhiChargedPileUp[i]->SetYTitle("#Delta #phi (rad)");
1713 fhDeltaPhiChargedPileUp[i]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1714 outputContainer->Add(fhDeltaPhiChargedPileUp[i]) ;
1716 fhDeltaPhiChargedPtA3GeVPileUp[i] = new TH2F(Form("hDeltaPhiChargedPtA3GeVPileUp%s",pileUpName[i].Data()),
1717 Form("#phi_{trigger} - #phi_{h^{#pm}} vs #it{p}_{T trigger}, #it{p}_{TA}>3 GeV/#it{c}, %s Pile-Up event",pileUpName[i].Data()),
1718 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1719 fhDeltaPhiChargedPtA3GeVPileUp[i]->SetYTitle("#Delta #phi (rad)");
1720 fhDeltaPhiChargedPtA3GeVPileUp[i]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1721 outputContainer->Add(fhDeltaPhiChargedPtA3GeVPileUp[i]) ;
1723 fhDeltaEtaChargedPileUp[i] = new TH2F(Form("hDeltaEtaChargedPileUp%s",pileUpName[i].Data()),
1724 Form("#eta_{trigger} - #eta_{h^{#pm}} vs #it{p}_{T trigger}, %s Pile-Up event",pileUpName[i].Data()),
1725 nptbins,ptmin,ptmax,ndeltaetabins,deltaetamin,deltaetamax);
1726 fhDeltaEtaChargedPileUp[i]->SetYTitle("#Delta #eta");
1727 fhDeltaEtaChargedPileUp[i]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1728 outputContainer->Add(fhDeltaEtaChargedPileUp[i]) ;
1730 fhDeltaEtaChargedPtA3GeVPileUp[i] = new TH2F(Form("hDeltaEtaChargedPtA3GeVPileUp%s",pileUpName[i].Data()),
1731 Form("#eta_{trigger} - #eta_{h^{#pm}} vs #it{p}_{T trigger}, #it{p}_{TA}>3 GeV/#it{c}, %s Pile-Up event",pileUpName[i].Data()),
1732 nptbins,ptmin,ptmax,ndeltaetabins,deltaetamin,deltaetamax);
1733 fhDeltaEtaChargedPtA3GeVPileUp[i]->SetYTitle("#Delta #eta");
1734 fhDeltaEtaChargedPtA3GeVPileUp[i]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1735 outputContainer->Add(fhDeltaEtaChargedPtA3GeVPileUp[i]) ;
1737 fhXEChargedPileUp[i] = new TH2F(Form("hXEChargedPileUp%s",pileUpName[i].Data()),
1738 Form("#it{x}_{#it{E}} for charged tracks, %s Pile-Up event",pileUpName[i].Data()),
1739 nptbins,ptmin,ptmax,200,0.,2.);
1740 fhXEChargedPileUp[i]->SetYTitle("#it{x}_{#it{E}}");
1741 fhXEChargedPileUp[i]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1742 outputContainer->Add(fhXEChargedPileUp[i]) ;
1744 fhXEUeChargedPileUp[i] = new TH2F(Form("hXEUeChargedPileUp%s",pileUpName[i].Data()),
1745 Form("#it{x}_{#it{E}} for Underlying Event, %s Pile-Up event",pileUpName[i].Data()),
1746 nptbins,ptmin,ptmax,200,0.,2.);
1747 fhXEUeChargedPileUp[i]->SetYTitle("#it{x}_{#it{E}}");
1748 fhXEUeChargedPileUp[i]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1749 outputContainer->Add(fhXEUeChargedPileUp[i]) ;
1751 fhZTChargedPileUp[i] = new TH2F(Form("hZTChargedPileUp%s",pileUpName[i].Data()),
1752 Form("#it{z}_{T} for charged tracks, %s Pile-Up event",pileUpName[i].Data()),
1753 nptbins,ptmin,ptmax,200,0.,2.);
1754 fhZTChargedPileUp[i]->SetYTitle("#it{z}_{T}");
1755 fhZTChargedPileUp[i]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1756 outputContainer->Add(fhZTChargedPileUp[i]) ;
1758 fhZTUeChargedPileUp[i] = new TH2F(Form("hZTUeChargedPileUp%s",pileUpName[i].Data()),
1759 Form("#it{z}_{T} for Underlying Event, %s Pile-Up event",pileUpName[i].Data()),
1760 nptbins,ptmin,ptmax,200,0.,2.);
1761 fhZTUeChargedPileUp[i]->SetYTitle("#it{z}_{T}");
1762 fhZTUeChargedPileUp[i]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1763 outputContainer->Add(fhZTUeChargedPileUp[i]) ;
1765 fhPtTrigChargedPileUp[i] = new TH2F(Form("hPtTrigChargedPileUp%s",pileUpName[i].Data()),
1766 Form("trigger and charged tracks pt distribution, %s Pile-Up event",pileUpName[i].Data()),
1767 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
1768 fhPtTrigChargedPileUp[i]->SetYTitle("#it{p}_{T h^{#pm}} (GeV/#it{c})");
1769 fhPtTrigChargedPileUp[i]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1770 outputContainer->Add(fhPtTrigChargedPileUp[i]) ;
1775 if(fFillHighMultHistograms)
1777 Int_t nMultiBins = GetNCentrBin();
1778 fhDeltaPhiChargedMult = new TH2F*[nMultiBins] ;
1779 fhDeltaEtaChargedMult = new TH2F*[nMultiBins] ;
1780 fhXEMult = new TH2F*[nMultiBins] ;
1781 fhXEUeMult = new TH2F*[nMultiBins] ;
1782 fhZTMult = new TH2F*[nMultiBins] ;
1783 fhZTUeMult = new TH2F*[nMultiBins] ;
1785 for(Int_t im=0; im<nMultiBins; im++)
1787 fhDeltaPhiChargedMult[im] = new TH2F
1788 (Form("hDeltaPhiCharged_Mult%d",im),Form("#Delta #phi charged Mult bin %d",im), nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1789 fhDeltaPhiChargedMult[im]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1790 fhDeltaPhiChargedMult[im]->SetYTitle("#Delta #phi (rad)");
1792 fhDeltaEtaChargedMult[im] = new TH2F
1793 (Form("hDeltaEtaCharged_Mult%d",im),Form("#Delta #eta charged Mult bin %d",im), nptbins,ptmin,ptmax, ndeltaetabins ,deltaetamin,deltaetamax);
1794 fhDeltaEtaChargedMult[im]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1795 fhDeltaEtaChargedMult[im]->SetYTitle("#Delta #eta");
1797 fhXEMult[im] = new TH2F
1798 (Form("hXECharged_Mult%d",im),Form("#it{x}_{E} charged Mult bin %d",im), nptbins,ptmin,ptmax,200,0.,2.);
1799 fhXEMult[im]->SetYTitle("#it{x}_{E}");
1800 fhXEMult[im]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1802 fhXEUeMult[im] = new TH2F
1803 (Form("hXEUeCharged_Mult%d",im),Form("#it{x}_{E} UE charged Mult bin %d",im), nptbins,ptmin,ptmax,200,0.,2.);
1804 fhXEUeMult[im]->SetYTitle("#it{x}_{E}");
1805 fhXEUeMult[im]->SetXTitle("#it{p}_{T trigger}(GeV/#it{c})");
1807 fhZTMult[im] = new TH2F
1808 (Form("hZTCharged_Mult%d",im),Form("#it{z}_{T} charged Mult bin %d",im), nptbins,ptmin,ptmax,200,0.,2.);
1809 fhZTMult[im]->SetYTitle("#it{z}_{T}");
1810 fhZTMult[im]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1812 fhZTUeMult[im] = new TH2F
1813 (Form("hZTUeCharged_Mult%d",im),Form("#it{z}_{T} UE charged Mult bin %d",im), nptbins,ptmin,ptmax,200,0.,2.);
1814 fhZTUeMult[im]->SetYTitle("#it{z}_{T}");
1815 fhZTUeMult[im]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1817 outputContainer->Add(fhDeltaPhiChargedMult[im]) ;
1818 outputContainer->Add(fhDeltaEtaChargedMult[im]) ;
1819 outputContainer->Add(fhXEMult [im]);
1820 outputContainer->Add(fhXEUeMult[im]);
1821 outputContainer->Add(fhZTMult [im]);
1822 outputContainer->Add(fhZTUeMult[im]);
1828 fhAssocPtBkg = new TH2F("hAssocPtBkg", " Trigger #it{p}_{T} vs associated hadron #it{p}_{T} from background",
1829 nptbins, ptmin, ptmax,nptbins,ptmin,ptmax);
1830 fhAssocPtBkg->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1831 fhAssocPtBkg->SetYTitle("#it{p}_{T associated} (GeV/#it{c})");
1832 outputContainer->Add(fhAssocPtBkg) ;
1834 fhDeltaPhiBrad = new TH2F("hDeltaPhiBrad","atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi vs #it{p}_{T trigger} ",
1835 nptbins, ptmin, ptmax,288, -1.0/3.0, 5.0/3.0);
1836 fhDeltaPhiBrad->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1837 fhDeltaPhiBrad->SetYTitle("atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi");
1838 outputContainer->Add(fhDeltaPhiBrad) ;
1841 fhDeltaPhiDeltaEtaAssocPtBin = new TH2F*[fNAssocPtBins*nz];
1842 fhDeltaPhiAssocPtBin = new TH2F*[fNAssocPtBins*nz];
1843 fhDeltaPhiAssocPtBinDEta08 = new TH2F*[fNAssocPtBins*nz];
1844 fhDeltaPhiAssocPtBinDEta0 = new TH2F*[fNAssocPtBins*nz];
1845 fhXEAssocPtBin = new TH2F*[fNAssocPtBins*nz];
1846 fhZTAssocPtBin = new TH2F*[fNAssocPtBins*nz];
1849 fhDeltaPhiBradAssocPtBin = new TH2F*[fNAssocPtBins*nz];
1851 if(fPi0Trigger || fDecayTrigger)
1853 fhDeltaPhiAssocPtBin = new TH2F*[fNAssocPtBins*nz];
1854 fhDeltaPhiAssocPtBinDEta08 = new TH2F*[fNAssocPtBins*nz];
1855 fhDeltaPhiDecayChargedAssocPtBin = new TH2F*[fNAssocPtBins*nz];
1858 if(fHMPIDCorrelation)
1860 fhDeltaPhiAssocPtBinHMPID = new TH2F*[fNAssocPtBins*nz];
1861 fhDeltaPhiAssocPtBinHMPIDAcc= new TH2F*[fNAssocPtBins*nz];
1864 for(Int_t i = 0 ; i < fNAssocPtBins ; i++)
1866 for(Int_t z = 0 ; z < nz ; z++)
1872 sz = Form("_vz%d",z);
1873 tz = Form(", #it{v}_{#it{z}} bin %d",z);
1876 //printf("iAssoc %d, Vz %d, bin %d - sz %s, tz %s \n",i,z,bin,sz.Data(),tz.Data());
1878 fhDeltaPhiDeltaEtaAssocPtBin[bin] = new TH2F(Form("hDeltaPhiDeltaEtaPtAssocPt%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
1879 Form("#Delta #phi vs #Delta #eta for associated #it{p}_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
1880 ndeltaphibins ,deltaphimin,deltaphimax,ndeltaetabins,deltaetamin,deltaetamax);
1881 fhDeltaPhiDeltaEtaAssocPtBin[bin]->SetXTitle("#Delta #phi (rad)");
1882 fhDeltaPhiDeltaEtaAssocPtBin[bin]->SetYTitle("#Delta #eta");
1884 fhDeltaPhiAssocPtBin[bin] = new TH2F(Form("hDeltaPhiPtAssocPt%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
1885 Form("#Delta #phi vs #it{p}_{T trigger} for associated #it{p}_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
1886 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1887 fhDeltaPhiAssocPtBin[bin]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1888 fhDeltaPhiAssocPtBin[bin]->SetYTitle("#Delta #phi (rad)");
1890 fhDeltaPhiAssocPtBinDEta08[bin] = new TH2F(Form("hDeltaPhiDeltaEta0.8PtAssocPt%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
1891 Form("#Delta #phi vs #it{p}_{T trigger} for associated #it{p}_{T} bin [%2.1f,%2.1f]%s, for #Delta #eta > 0.8", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
1892 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1893 fhDeltaPhiAssocPtBinDEta08[bin]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1894 fhDeltaPhiAssocPtBinDEta08[bin]->SetYTitle("#Delta #phi (rad)");
1896 fhDeltaPhiAssocPtBinDEta0[bin] = new TH2F(Form("hDeltaPhiDeltaEta0PtAssocPt%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
1897 Form("#Delta #phi vs #it{p}_{T trigger} for associated #it{p}_{T} bin [%2.1f,%2.1f]%s, for #Delta #eta = 0.", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
1898 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1899 fhDeltaPhiAssocPtBinDEta0[bin]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1900 fhDeltaPhiAssocPtBinDEta0[bin]->SetYTitle("#Delta #phi (rad)");
1902 fhXEAssocPtBin[bin] = new TH2F(Form("hXEAssocPtBin%1.f_%1.f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
1903 Form("#it{x}_{#it{E}} vs #it{p}_{T trigger} for associated #it{p}_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
1904 nptbins, ptmin, ptmax,200, 0.0, 2.0);
1905 fhXEAssocPtBin[bin]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1906 fhXEAssocPtBin[bin]->SetYTitle("#it{x}_{#it{E}}");
1908 fhZTAssocPtBin[bin] = new TH2F(Form("hZTAssocPtBin%1.f_%1.f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
1909 Form("#it{z}_{T} vs #it{p}_{T trigger} for associated #it{p}_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
1910 nptbins, ptmin, ptmax,200, 0.0, 2.0);
1911 fhZTAssocPtBin[bin]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1912 fhZTAssocPtBin[bin]->SetYTitle("#it{z}_{T}");
1914 outputContainer->Add(fhDeltaPhiDeltaEtaAssocPtBin[bin]) ;
1915 outputContainer->Add(fhDeltaPhiAssocPtBin[bin]) ;
1916 outputContainer->Add(fhDeltaPhiAssocPtBinDEta08[bin]) ;
1917 outputContainer->Add(fhDeltaPhiAssocPtBinDEta0[bin]) ;
1918 outputContainer->Add(fhXEAssocPtBin[bin]);
1919 outputContainer->Add(fhZTAssocPtBin[bin]);
1921 if(fPi0Trigger || fDecayTrigger)
1923 fhDeltaPhiDecayChargedAssocPtBin[bin] = new TH2F(Form("hDeltaPhiPtDecayChargedAssocPt%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
1924 Form("#Delta #phi vs #it{p}_{T trigger} tagged as decay for associated #it{p}_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
1925 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1926 fhDeltaPhiDecayChargedAssocPtBin[bin]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1927 fhDeltaPhiDecayChargedAssocPtBin[bin]->SetYTitle("#Delta #phi (rad)");
1929 outputContainer->Add(fhDeltaPhiDecayChargedAssocPtBin[bin]) ;
1934 fhDeltaPhiBradAssocPtBin[bin] = new TH2F(Form("hDeltaPhiBradPtAssocPt%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
1935 Form("atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi vs #it{p}_{T trigger} for associated #it{p}_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
1936 nptbins, ptmin, ptmax,288, -1.0/3.0, 5.0/3.0);
1937 fhDeltaPhiBradAssocPtBin[bin]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1938 fhDeltaPhiBradAssocPtBin[bin]->SetYTitle("atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi");
1939 outputContainer->Add(fhDeltaPhiBradAssocPtBin[bin]) ;
1942 if(fHMPIDCorrelation)
1944 fhDeltaPhiAssocPtBinHMPID[bin] = new TH2F(Form("hDeltaPhiPtAssocPt%2.1f_%2.1f%sHMPID", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
1945 Form("#Delta #phi vs #it{p}_{T trigger} for associated #it{p}_{T} bin [%2.1f,%2.1f]%s, with track having HMPID signal", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
1946 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1947 fhDeltaPhiAssocPtBinHMPID[bin]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})" );
1948 fhDeltaPhiAssocPtBinHMPID[bin]->SetYTitle("#Delta #phi (rad)");
1950 fhDeltaPhiAssocPtBinHMPIDAcc[bin] = new TH2F(Form("hDeltaPhiPtAssocPt%2.1f_%2.1f%sHMPIDAcc", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
1951 Form("#Delta #phi vs #it{p}_{T trigger} for associated #it{p}_{T} bin [%2.1f,%2.1f]%s, with track within 5<phi<20 deg", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
1952 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1953 fhDeltaPhiAssocPtBinHMPIDAcc[bin]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1954 fhDeltaPhiAssocPtBinHMPIDAcc[bin]->SetYTitle("#Delta #phi (rad)");
1956 outputContainer->Add(fhDeltaPhiAssocPtBinHMPID [bin]) ;
1957 outputContainer->Add(fhDeltaPhiAssocPtBinHMPIDAcc[bin]) ;
1962 if(fPi0Trigger || fDecayTrigger)
1966 fhPtPi0DecayRatio = new TH2F
1967 ("hPtPi0DecayRatio","#it{p}_{T} of #pi^{0} and the ratio of pt for two decay",
1968 nptbins,ptmin,ptmax, 100,0.,2.);
1969 fhPtPi0DecayRatio->SetXTitle("#it{p}_{T}^{#pi^{0}} (GeV/#it{c})");
1970 fhPtPi0DecayRatio->SetYTitle("#it{p}_{T}^{Decay}/#it{p}_{T}^{#pi^{0}}");
1971 outputContainer->Add(fhPtPi0DecayRatio) ;
1974 fhDeltaPhiDecayCharged = new TH2F
1975 ("hDeltaPhiDecayCharged","#phi_{Decay} - #phi_{h^{#pm}} vs #it{p}_{T Decay}",
1976 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1977 fhDeltaPhiDecayCharged->SetYTitle("#Delta #phi (rad)");
1978 fhDeltaPhiDecayCharged->SetXTitle("#it{p}_{T Decay} (GeV/#it{c})");
1981 new TH2F("hXEDecayCharged","#it{x}_{#it{E}} Decay",
1982 nptbins,ptmin,ptmax,200,0.,2.);
1983 fhXEDecayCharged->SetYTitle("#it{x}_{#it{E}}");
1984 fhXEDecayCharged->SetXTitle("#it{p}_{T decay} (GeV/#it{c})");
1987 new TH2F("hZTDecayCharged","#it{z}_{trigger h^{#pm}} = #it{p}_{T h^{#pm}} / #it{p}_{T Decay}",
1988 nptbins,ptmin,ptmax,200,0.,2.);
1989 fhZTDecayCharged->SetYTitle("#it{z}_{decay h^{#pm}}");
1990 fhZTDecayCharged->SetXTitle("#it{p}_{T decay} (GeV/#it{c})");
1992 outputContainer->Add(fhDeltaPhiDecayCharged) ;
1993 outputContainer->Add(fhXEDecayCharged) ;
1994 outputContainer->Add(fhZTDecayCharged) ;
1997 //Correlation with neutral hadrons
2000 fhDeltaPhiDeltaEtaNeutral = new TH2F
2001 ("hDeltaPhiDeltaEtaNeutral","#phi_{trigger} - #phi_{h^{0}} vs #eta_{trigger} - #eta_{h^{0}}",
2002 ndeltaphibins ,deltaphimin,deltaphimax, ndeltaetabins ,deltaetamin,deltaetamax);
2003 fhDeltaPhiDeltaEtaNeutral->SetXTitle("#Delta #phi (rad)");
2004 fhDeltaPhiDeltaEtaNeutral->SetYTitle("#Delta #eta");
2006 fhPhiNeutral = new TH2F
2007 ("hPhiNeutral","#phi_{#pi^{0}} vs #it{p}_{T #pi^{0}}",
2008 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
2009 fhPhiNeutral->SetYTitle("#phi_{#pi^{0}} (rad)");
2010 fhPhiNeutral->SetXTitle("#it{p}_{T #pi^{0}} (GeV/#it{c})");
2012 fhEtaNeutral = new TH2F
2013 ("hEtaNeutral","#eta_{#pi^{0}} vs #it{p}_{T #pi^{0}}",
2014 nptbins,ptmin,ptmax,netabins,etamin,etamax);
2015 fhEtaNeutral->SetYTitle("#eta_{#pi^{0}} (rad)");
2016 fhEtaNeutral->SetXTitle("#it{p}_{T #pi^{0}} (GeV/#it{c})");
2018 fhDeltaPhiNeutral = new TH2F
2019 ("hDeltaPhiNeutral","#phi_{trigger} - #phi_{#pi^{0}} vs #it{p}_{T trigger}",
2020 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
2021 fhDeltaPhiNeutral->SetYTitle("#Delta #phi (rad)");
2022 fhDeltaPhiNeutral->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2024 fhDeltaPhiNeutralPt = new TH2F
2025 ("hDeltaPhiNeutralPt","#phi_{trigger} - #phi_{#pi^{0}} vs #it{p}_{T #pi^{0}}}",
2026 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
2027 fhDeltaPhiNeutralPt->SetYTitle("#Delta #phi (rad)");
2028 fhDeltaPhiNeutralPt->SetXTitle("#it{p}_{T h^{0}} (GeV/#it{c})");
2030 fhDeltaEtaNeutral = new TH2F
2031 ("hDeltaEtaNeutral","#eta_{trigger} - #eta_{#pi^{0}} vs #it{p}_{T trigger}",
2032 nptbins,ptmin,ptmax, ndeltaetabins ,deltaetamin,deltaetamax);
2033 fhDeltaEtaNeutral->SetYTitle("#Delta #eta");
2034 fhDeltaEtaNeutral->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2037 new TH2F("hXENeutral","#it{x}_{#it{E}} for #pi^{0} associated",
2038 nptbins,ptmin,ptmax,200,0.,2.);
2039 fhXENeutral->SetYTitle("#it{x}_{#it{E}}");
2040 fhXENeutral->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2043 new TH2F("hHbpXENeutral","#xi = ln(1/#it{x}_{#it{E}})for #pi^{0} associated",
2044 nptbins,ptmin,ptmax,200,0.,10.);
2045 fhPtHbpXENeutral->SetYTitle("ln(1/#it{x}_{#it{E}})");
2046 fhPtHbpXENeutral->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2049 new TH2F("hZTNeutral","#it{z}_{trigger #pi} = #it{p}_{T #pi^{0}} / #it{p}_{T trigger} for #pi^{0} associated",
2050 nptbins,ptmin,ptmax,200,0.,2.);
2051 fhZTNeutral->SetYTitle("#it{z}_{trigger #pi^{0}}");
2052 fhZTNeutral->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2055 new TH2F("hHbpZTNeutral","#xi = ln(1/#it{x}_{#it{E}}) for #pi^{0} associated",
2056 nptbins,ptmin,ptmax,200,0.,10.);
2057 fhPtHbpZTNeutral->SetYTitle("ln(1/#it{z}_{T})");
2058 fhPtHbpZTNeutral->SetXTitle("#it{p}_{T trigger}");
2060 outputContainer->Add(fhDeltaPhiDeltaEtaNeutral);
2061 outputContainer->Add(fhPhiNeutral) ;
2062 outputContainer->Add(fhEtaNeutral) ;
2063 outputContainer->Add(fhDeltaPhiNeutral) ;
2064 outputContainer->Add(fhDeltaPhiNeutralPt) ;
2065 outputContainer->Add(fhDeltaEtaNeutral) ;
2066 outputContainer->Add(fhXENeutral) ;
2067 outputContainer->Add(fhPtHbpXENeutral) ;
2068 outputContainer->Add(fhZTNeutral) ;
2069 outputContainer->Add(fhPtHbpZTNeutral) ;
2071 fhDeltaPhiUeNeutralPt = new TH2F
2072 (Form("hDeltaPhiUe%sNeutralPt",right.Data()),"#phi_{trigger} - #phi_{#pi^{0}} vs #it{p}_{T #pi^{0}}}",
2073 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
2074 fhDeltaPhiUeNeutralPt->SetYTitle("#Delta #phi (rad)");
2075 fhDeltaPhiUeNeutralPt->SetXTitle("#it{p}_{T h^{0}} (GeV/#it{c})");
2078 new TH2F(Form("hXEUeNeutral%s",right.Data()),"#it{x}_{#it{E}} for #pi^{0} associated",
2079 nptbins,ptmin,ptmax,200,0.,2.);
2080 fhXEUeNeutral->SetYTitle("#it{x}_{#it{E}}");
2081 fhXEUeNeutral->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2083 fhPtHbpXEUeNeutral =
2084 new TH2F(Form("hHbpXEUeNeutral%s",right.Data()),"#xi = ln(1/#it{x}_{#it{E}}) for #pi^{0} associated",
2085 nptbins,ptmin,ptmax,200,0.,10.);
2086 fhPtHbpXEUeNeutral->SetYTitle("ln(1/#it{x}_{#it{E}})");
2087 fhPtHbpXEUeNeutral->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2090 new TH2F(Form("hZTUeNeutral%s",right.Data()),"#it{z}_{trigger #pi} = #it{p}_{T #pi^{0}} / #it{p}_{T trigger} for #pi^{0} associated",
2091 nptbins,ptmin,ptmax,200,0.,2.);
2092 fhZTUeNeutral->SetYTitle("#it{z}_{trigger #pi^{0}}");
2093 fhZTUeNeutral->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2095 fhPtHbpZTUeNeutral =
2096 new TH2F(Form("hHbpZTUeNeutral%s",right.Data()),"#xi = ln(1/#it{x}_{#it{E}}) for #pi^{0} associated",
2097 nptbins,ptmin,ptmax,200,0.,10.);
2098 fhPtHbpXEUeNeutral->SetYTitle("ln(1/#it{z}_{T})");
2099 fhPtHbpXEUeNeutral->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2101 outputContainer->Add(fhDeltaPhiUeNeutralPt) ;
2102 outputContainer->Add(fhXEUeNeutral) ;
2103 outputContainer->Add(fhPtHbpXEUeNeutral) ;
2104 outputContainer->Add(fhZTUeNeutral) ;
2105 outputContainer->Add(fhPtHbpZTUeNeutral) ;
2109 fhDeltaPhiUeLeftNeutral = new TH2F
2110 ("hDeltaPhiUeLeftNeutralPt","#phi_{trigger} - #phi_{#Ueh^{0}} vs #it{p}_{T h^{0}} with neutral UE left side range of trigger particles",
2111 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
2112 fhDeltaPhiUeLeftNeutral->SetYTitle("#Delta #phi (rad)");
2113 fhDeltaPhiUeLeftNeutral->SetXTitle("#it{p}_{T h^{0}} (GeV/#it{c})");
2114 outputContainer->Add(fhDeltaPhiUeLeftNeutral) ;
2117 new TH2F("hXEUeNeutralLeft","#it{x}_{#it{E}} = #it{p}_{T Ueh^{0}} / #it{p}_{T trigger} with neutral UE left side of trigger",
2118 nptbins,ptmin,ptmax,140,0.,2.);
2119 fhXEUeLeftNeutral->SetYTitle("#it{z}_{trigger Ueh^{0}}");
2120 fhXEUeLeftNeutral->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2121 outputContainer->Add(fhXEUeLeftNeutral) ;
2123 fhPtHbpXEUeLeftNeutral =
2124 new TH2F("hHbpXEUeNeutralLeft","#xi = ln(1/#it{x}_{#it{E}}) with neutral UE left side of trigger",
2125 nptbins,ptmin,ptmax,200,0.,10.);
2126 fhPtHbpXEUeLeftNeutral->SetYTitle("ln(1/#it{x}_{#it{E}})");
2127 fhPtHbpXEUeLeftNeutral->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2128 outputContainer->Add(fhPtHbpXEUeLeftNeutral) ;
2131 new TH2F("hZTUeNeutralLeft","#it{z}_{trigger h^{0}} = #it{p}_{T Ueh^{0}} / #it{p}_{T trigger} with neutral UE left side of trigger",
2132 nptbins,ptmin,ptmax,140,0.,2.);
2133 fhZTUeLeftNeutral->SetYTitle("#it{z}_{trigger Ueh^{0}}");
2134 fhZTUeLeftNeutral->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2135 outputContainer->Add(fhZTUeLeftNeutral) ;
2137 fhPtHbpZTUeLeftNeutral =
2138 new TH2F("hHbpZTUeNeutralLeft","#xi = ln(1/#it{z}_{T}) with neutral UE left side of trigger",
2139 nptbins,ptmin,ptmax,200,0.,10.);
2140 fhPtHbpZTUeLeftNeutral->SetYTitle("ln(1/#it{z}_{T})");
2141 fhPtHbpZTUeLeftNeutral->SetXTitle("#it{p}_{T trigger}");
2142 outputContainer->Add(fhPtHbpZTUeLeftNeutral) ;
2145 if(fPi0Trigger || fDecayTrigger)
2147 fhDeltaPhiDecayNeutral = new TH2F
2148 ("hDeltaPhiDecayNeutral","#phi_{Decay} - #phi_{h^{0}} vs #it{p}_{T Decay}",
2149 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
2150 fhDeltaPhiDecayNeutral->SetYTitle("#Delta #phi (rad)");
2151 fhDeltaPhiDecayNeutral->SetXTitle("#it{p}_{T Decay} (GeV/#it{c})");
2154 new TH2F("hXEDecayNeutral","#it{x}_{#it{E}} for decay trigger",
2155 nptbins,ptmin,ptmax,200,0.,2.);
2156 fhXEDecayNeutral->SetYTitle("#it{x}_{#it{E}}");
2157 fhXEDecayNeutral->SetXTitle("#it{p}_{T decay}");
2160 new TH2F("hZTDecayNeutral","#it{z}_{trigger h^{0}} = #it{p}_{T h^{0}} / #it{p}_{T Decay}",
2161 nptbins,ptmin,ptmax,200,0.,2.);
2162 fhZTDecayNeutral->SetYTitle("#it{z}_{h^{0}}");
2163 fhZTDecayNeutral->SetXTitle("#it{p}_{T decay}");
2165 outputContainer->Add(fhDeltaPhiDecayNeutral) ;
2166 outputContainer->Add(fhXEDecayNeutral) ;
2167 outputContainer->Add(fhZTDecayNeutral) ;
2170 }//Correlation with neutral hadrons
2172 //if data is MC, fill more histograms
2175 fh2phiTriggerParticle = new TH2F("h2PhiTriggerParticle","#phi resolution for trigger particles",nptbins,ptmin,ptmax,100,-1,1);
2176 fh2phiTriggerParticle->GetXaxis()->SetTitle("#it{p}_{T gen Trigger} (GeV/#it{c})");
2177 fh2phiTriggerParticle->GetYaxis()->SetTitle("(#phi_{rec}-#phi_{gen})/#phi_{gen}");
2179 fhMCPtTrigger = new TH1F ("hMCPtTrigger","MC : trigger #it{p}_{T}", nptbins,ptmin,ptmax);
2180 fhMCPtTrigger->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
2182 fhMCPhiTrigger = new TH2F ("hMCPhiTrigger","MC : trigger #phi",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
2183 fhMCPhiTrigger->SetYTitle("#phi (rad)");
2184 fhMCPhiTrigger->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
2186 fhMCEtaTrigger = new TH2F ("hMCEtaTrigger","MC : trigger #eta",nptbins,ptmin,ptmax, netabins,etamin,etamax);
2187 fhMCEtaTrigger->SetYTitle("#eta");
2188 fhMCEtaTrigger->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
2190 if(fMakeAbsoluteLeading || fMakeNearSideLeading)
2192 fhMCPtTriggerNotLeading = new TH1F ("hMCPtTriggerNotLeading","MC : trigger #it{p}_{T}, when not leading of primaries",
2193 nptbins,ptmin,ptmax);
2194 fhMCPtTriggerNotLeading->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
2196 fhMCPhiTriggerNotLeading = new TH2F ("hMCPhiTriggerNotLeading","MC : trigger #phi, when not leading of primaries",
2197 nptbins,ptmin,ptmax, nphibins,phimin,phimax);
2198 fhMCPhiTriggerNotLeading->SetYTitle("#phi (rad)");
2199 fhMCPhiTriggerNotLeading->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
2202 fhMCEtaTriggerNotLeading = new TH2F ("hMCEtaTriggerNotLeading","MC : triogger #eta, when not leading of primaries",
2203 nptbins,ptmin,ptmax, netabins,etamin,etamax);
2204 fhMCEtaTriggerNotLeading->SetYTitle("#eta ");
2205 fhMCEtaTriggerNotLeading->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
2208 fhMCEtaCharged = new TH2F
2209 ("hMCEtaCharged","MC #eta_{h^{#pm}} vs #it{p}_{T #pm}",
2210 nptbins,ptmin,ptmax,netabins,etamin,etamax);
2211 fhMCEtaCharged->SetYTitle("#eta_{h^{#pm}} (rad)");
2212 fhMCEtaCharged->SetXTitle("#it{p}_{T #pm} (GeV/#it{c})");
2214 fhMCPhiCharged = new TH2F
2215 ("hMCPhiCharged","#MC phi_{h^{#pm}} vs #it{p}_{T #pm}",
2216 200,ptmin,ptmax,nphibins,phimin,phimax);
2217 fhMCPhiCharged->SetYTitle("MC #phi_{h^{#pm}} (rad)");
2218 fhMCPhiCharged->SetXTitle("#it{p}_{T #pm} (GeV/#it{c})");
2220 fhMCDeltaPhiDeltaEtaCharged = new TH2F
2221 ("hMCDeltaPhiDeltaEtaCharged","#MC phi_{trigger} - #phi_{h^{#pm}} vs #eta_{trigger} - #eta_{h^{#pm}}",
2222 140,-2.,5.,200,-2,2);
2223 fhMCDeltaPhiDeltaEtaCharged->SetXTitle("#Delta #phi (rad)");
2224 fhMCDeltaPhiDeltaEtaCharged->SetYTitle("#Delta #eta");
2226 fhMCDeltaEtaCharged = new TH2F
2227 ("hMCDeltaEtaCharged","MC #eta_{trigger} - #eta_{h^{#pm}} vs #it{p}_{T trigger} and #it{p}_{T assoc}",
2228 nptbins,ptmin,ptmax,200,-2,2);
2229 fhMCDeltaEtaCharged->SetYTitle("#Delta #eta");
2230 fhMCDeltaEtaCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2232 fhMCDeltaPhiCharged = new TH2F
2233 ("hMCDeltaPhiCharged","#phi_{trigger} - #phi_{h^{#pm}} vs #it{p}_{T trigger}",
2234 nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax);
2235 fhMCDeltaPhiCharged->SetYTitle("#Delta #phi (rad)");
2236 fhMCDeltaPhiCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2238 fhMCDeltaPhiChargedPt = new TH2F
2239 ("hMCDeltaPhiChargedPt","MC #phi_{trigger} - #phi_{#h^{#pm}} vs #it{p}_{T h^{#pm}}",
2240 nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax);
2241 fhMCDeltaPhiChargedPt->SetYTitle("#Delta #phi (rad)");
2242 fhMCDeltaPhiChargedPt->SetXTitle("#it{p}_{T h^{#pm}} (GeV/#it{c})");
2245 new TH2F("hMCPtXECharged","#it{x}_{#it{E}} with charged hadrons",
2246 nptbins,ptmin,ptmax,200,0.,2.);
2247 fhMCPtXECharged->SetYTitle("#it{x}_{#it{E}}");
2248 fhMCPtXECharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2250 fhMCPtHbpXECharged =
2251 new TH2F("hMCHbpXECharged","MC #xi = ln(1/#it{x}_{#it{E}}) with charged hadrons",
2252 nptbins,ptmin,ptmax,200,0.,10.);
2253 fhMCPtHbpXECharged->SetYTitle("ln(1/#it{x}_{#it{E}})");
2254 fhMCPtHbpXECharged->SetXTitle("#it{p}_{T trigger}");
2257 new TH2F("hMCPtZTCharged","#it{z}_{T} with charged hadrons",
2258 nptbins,ptmin,ptmax,200,0.,2.);
2259 fhMCPtZTCharged->SetYTitle("#it{z}_{T}");
2260 fhMCPtZTCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2262 fhMCPtHbpZTCharged =
2263 new TH2F("hMCHbpZTCharged","MC #xi = ln(1/#it{z}_{T}) with charged hadrons",
2264 nptbins,ptmin,ptmax,200,0.,10.);
2265 fhMCPtHbpZTCharged->SetYTitle("ln(1/#it{z}_{T})");
2266 fhMCPtHbpZTCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2269 new TH2F("hMCPtTrigPout","AOD MC Pout with triggers",
2270 nptbins,ptmin,ptmax,2*nptbins,-ptmax,ptmax);
2271 fhMCPtTrigPout->SetYTitle("#it{p}_{out} (GeV/#it{c})");
2272 fhMCPtTrigPout->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2274 fhMCPtAssocDeltaPhi =
2275 new TH2F("hMCPtAssocDeltaPhi","AOD MC delta phi with associated charged hadrons",
2276 nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax);
2277 fhMCPtAssocDeltaPhi->SetYTitle("#Delta #phi (rad)");
2278 fhMCPtAssocDeltaPhi->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2280 outputContainer->Add(fh2phiTriggerParticle);
2281 outputContainer->Add(fhMCPtTrigger);
2282 outputContainer->Add(fhMCPhiTrigger);
2283 outputContainer->Add(fhMCEtaTrigger);
2285 if(fMakeAbsoluteLeading || fMakeNearSideLeading)
2287 outputContainer->Add(fhMCPtTriggerNotLeading);
2288 outputContainer->Add(fhMCPhiTriggerNotLeading);
2289 outputContainer->Add(fhMCEtaTriggerNotLeading);
2292 outputContainer->Add(fhMCDeltaPhiDeltaEtaCharged);
2293 outputContainer->Add(fhMCPhiCharged) ;
2294 outputContainer->Add(fhMCEtaCharged) ;
2295 outputContainer->Add(fhMCDeltaEtaCharged) ;
2296 outputContainer->Add(fhMCDeltaPhiCharged) ;
2298 outputContainer->Add(fhMCDeltaPhiChargedPt) ;
2299 outputContainer->Add(fhMCPtXECharged) ;
2300 outputContainer->Add(fhMCPtZTCharged) ;
2301 outputContainer->Add(fhMCPtHbpXECharged) ;
2302 outputContainer->Add(fhMCPtHbpZTCharged) ;
2303 outputContainer->Add(fhMCPtTrigPout) ;
2304 outputContainer->Add(fhMCPtAssocDeltaPhi) ;
2309 new TH1F("hMCUePart","MC UE particles distribution vs pt trig",
2310 nptbins,ptmin,ptmax);
2311 fhMCUePart->SetYTitle("#it{dN}^{ch}");
2312 fhMCUePart->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2315 new TH2F(Form("hMCPtXEUeCharged%s",right.Data()),"#it{x}_{#it{E}} with charged hadrons, Underlying Event",
2316 nptbins,ptmin,ptmax,200,0.,2.);
2317 fhMCPtXEUeCharged->SetYTitle("#it{x}_{#it{E}}");
2318 fhMCPtXEUeCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2320 fhMCPtHbpXEUeCharged =
2321 new TH2F(Form("hMCPtHbpXEUeCharged%s",right.Data()),"#xi = ln(1/#it{x}_{#it{E}}) with charged hadrons, Underlying Event",
2322 nptbins,ptmin,ptmax,200,0.,10.);
2323 fhMCPtHbpXEUeCharged->SetYTitle("ln(1/#it{x}_{#it{E}})");
2324 fhMCPtHbpXEUeCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2327 new TH2F(Form("hMCPtZTUeCharged%s",right.Data()),"#it{z}_{T} with charged hadrons, Underlying Event",
2328 nptbins,ptmin,ptmax,200,0.,2.);
2329 fhMCPtZTUeCharged->SetYTitle("#it{z}_{T}");
2330 fhMCPtZTUeCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2332 fhMCPtHbpZTUeCharged =
2333 new TH2F(Form("hMCPtHbpZTUeCharged%s",right.Data()),"#xi = ln(1/#it{z}_{T}) with charged hadrons, Underlying Event",
2334 nptbins,ptmin,ptmax,200,0.,10.);
2335 fhMCPtHbpZTUeCharged->SetYTitle("ln(1/#it{z}_{T})");
2336 fhMCPtHbpZTUeCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2338 outputContainer->Add(fhMCUePart);
2339 outputContainer->Add(fhMCPtXEUeCharged) ;
2340 outputContainer->Add(fhMCPtZTUeCharged) ;
2341 outputContainer->Add(fhMCPtHbpZTUeCharged);
2342 outputContainer->Add(fhMCPtHbpXEUeCharged);
2346 fhMCPtXEUeLeftCharged =
2347 new TH2F("hMCPtXEUeChargedLeft","#it{x}_{#it{E}} with charged hadrons, with UE left side range of trigger particles",
2348 nptbins,ptmin,ptmax,200,0.,2.);
2349 fhMCPtXEUeLeftCharged->SetYTitle("#it{x}_{#it{E}}");
2350 fhMCPtXEUeLeftCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2353 fhMCPtHbpXEUeLeftCharged =
2354 new TH2F("hMCPtHbpXEUeChargedLeft","#xi = ln(1/#it{x}_{#it{E}}) with charged hadrons, with UE left side range of trigger particles",
2355 nptbins,ptmin,ptmax,200,0.,10.);
2356 fhMCPtHbpXEUeLeftCharged->SetYTitle("ln(1/#it{x}_{#it{E}})");
2357 fhMCPtHbpXEUeLeftCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2359 fhMCPtZTUeLeftCharged =
2360 new TH2F("hMCPtZTUeChargedLeft","#it{z}_{T} with charged hadrons, with UE left side range of trigger particles",
2361 nptbins,ptmin,ptmax,200,0.,2.);
2362 fhMCPtZTUeLeftCharged->SetYTitle("#it{z}_{T}");
2363 fhMCPtZTUeLeftCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2365 fhMCPtHbpZTUeLeftCharged =
2366 new TH2F("hMCPtHbpZTUeChargedLeft","#xi = ln(1/#it{z}_{T}) with charged hadrons, with UE left side range of trigger particles",
2367 nptbins,ptmin,ptmax,200,0.,10.);
2368 fhMCPtHbpZTUeLeftCharged->SetYTitle("ln(1/#it{z}_{T})");
2369 fhMCPtHbpZTUeLeftCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2371 outputContainer->Add(fhMCPtXEUeLeftCharged) ;
2372 outputContainer->Add(fhMCPtZTUeLeftCharged) ;
2373 outputContainer->Add(fhMCPtHbpXEUeLeftCharged);
2374 outputContainer->Add(fhMCPtHbpZTUeLeftCharged) ;
2377 } //for MC histogram
2381 //create event containers
2383 if(!fUseMixStoredInReader || (fUseMixStoredInReader && !GetReader()->ListWithMixedEventsForTracksExists()))
2385 Int_t nvz = GetNZvertBin();
2386 Int_t nrp = GetNRPBin();
2387 Int_t nce = GetNCentrBin();
2389 fListMixTrackEvents= new TList*[nvz*nrp*nce] ;
2391 for( Int_t ice = 0 ; ice < nce ; ice++ )
2393 for( Int_t ivz = 0 ; ivz < nvz ; ivz++ )
2395 for( Int_t irp = 0 ; irp < nrp ; irp++ )
2397 Int_t bin = GetEventMixBin(ice,ivz,irp); //ic*nvz*nrp+iz*nrp+irp;
2399 //printf("GetCreateOutputObjects - Bins : cent %d, vz %d, RP %d, event %d/%d\n",
2400 // ic,iz, irp, bin);
2402 fListMixTrackEvents[bin] = new TList() ;
2403 fListMixTrackEvents[bin]->SetOwner(kFALSE);
2409 fhPtTriggerMixed = new TH1F ("hPtTriggerMixed","#it{p}_{T} distribution of trigger particles, used for mixing", nptbins,ptmin,ptmax);
2410 fhPtTriggerMixed->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
2414 fhPtTriggerMixedVzBin = new TH2F ("hPtTriggerMixedVzBin","#it{p}_{T} distribution of trigger particles, used for mixing", nptbins,ptmin,ptmax,GetNZvertBin(),0,GetNZvertBin());
2415 fhPtTriggerMixedVzBin->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
2416 fhPtTriggerMixedVzBin->SetYTitle("#it{v}_{#it{z}} bin");
2417 outputContainer->Add(fhPtTriggerMixedVzBin);
2420 fhPtTriggerMixedBin = new TH2F ("hPtTriggerMixedBin","#it{p}_{T} distribution of trigger particles vs mixing bin", nptbins,ptmin,ptmax,nMixBins,0,nMixBins);
2421 fhPtTriggerMixedBin->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
2422 fhPtTriggerMixedBin->SetYTitle("Bin");
2424 fhPhiTriggerMixed = new TH2F ("hPhiTriggerMixed","#phi distribution of trigger Particles, used for mixing",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
2425 fhPhiTriggerMixed->SetYTitle("#phi (rad)");
2427 fhEtaTriggerMixed = new TH2F ("hEtaTriggerMixed","#eta distribution of trigger, used for mixing",nptbins,ptmin,ptmax, netabins,etamin,etamax);
2428 fhEtaTriggerMixed->SetYTitle("#eta ");
2430 outputContainer->Add(fhPtTriggerMixed);
2431 outputContainer->Add(fhPtTriggerMixedBin);
2432 outputContainer->Add(fhPhiTriggerMixed);
2433 outputContainer->Add(fhEtaTriggerMixed);
2435 // Fill the cluster pool only in isolation analysis or if requested
2436 if( ( OnlyIsolated() || fFillNeutralEventMixPool) &&
2437 (!fUseMixStoredInReader || (fUseMixStoredInReader && !GetReader()->ListWithMixedEventsForCaloExists())))
2439 Int_t nvz = GetNZvertBin();
2440 Int_t nrp = GetNRPBin();
2441 Int_t nce = GetNCentrBin();
2443 fListMixCaloEvents= new TList*[nvz*nrp*nce] ;
2445 for( Int_t ice = 0 ; ice < nce ; ice++ )
2447 for( Int_t ivz = 0 ; ivz < nvz ; ivz++ )
2449 for( Int_t irp = 0 ; irp < nrp ; irp++ )
2451 Int_t bin = GetEventMixBin(ice,ivz,irp); //ic*nvz*nrp+iz*nrp+irp;
2453 //printf("GetCreateOutputObjects - Bins : cent %d, vz %d, RP %d, event %d/%d\n",
2454 // ic,iz, irp, bin);
2456 fListMixCaloEvents[bin] = new TList() ;
2457 fListMixCaloEvents[bin]->SetOwner(kFALSE);
2463 //Init the list in the reader if not done previously
2464 if(fUseMixStoredInReader)
2466 if( !GetReader()->ListWithMixedEventsForTracksExists() )
2467 GetReader()->SetListWithMixedEventsForTracks(fListMixTrackEvents);
2469 if( !GetReader()->ListWithMixedEventsForCaloExists() )
2470 GetReader()->SetListWithMixedEventsForCalo (fListMixCaloEvents );
2473 fhEventBin=new TH1I("hEventBin","Number of real events per bin(cen,vz,rp)",
2474 GetNCentrBin()*GetNZvertBin()*GetNRPBin()+1,0,
2475 GetNCentrBin()*GetNZvertBin()*GetNRPBin()+1) ;
2476 fhEventBin->SetXTitle("bin");
2477 outputContainer->Add(fhEventBin) ;
2479 fhEventMixBin=new TH1I("hEventMixBin","Number of events per bin(cen,vz,rp)",
2480 GetNCentrBin()*GetNZvertBin()*GetNRPBin()+1,0,
2481 GetNCentrBin()*GetNZvertBin()*GetNRPBin()+1) ;
2482 fhEventMixBin->SetXTitle("bin");
2483 outputContainer->Add(fhEventMixBin) ;
2485 fhNtracksMB=new TH1F("hNtracksMBEvent","Number of tracks w/ event trigger kMB",2000,0,2000);
2486 outputContainer->Add(fhNtracksMB);
2488 if(fFillNeutralEventMixPool || OnlyIsolated())
2490 fhNclustersMB=new TH1F("hNclustersMBEvent","Number of clusters w/ event trigger kMB",2000,0,2000);
2491 outputContainer->Add(fhNclustersMB);
2494 fhMixDeltaPhiCharged = new TH2F
2495 ("hMixDeltaPhiCharged","Mixed event : #phi_{trigger} - #phi_{h^{#pm}} vs #it{p}_{T trigger}",
2496 nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax);
2497 fhMixDeltaPhiCharged->SetYTitle("#Delta #phi (rad)");
2498 fhMixDeltaPhiCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2499 outputContainer->Add(fhMixDeltaPhiCharged);
2501 fhMixDeltaPhiDeltaEtaCharged = new TH2F
2502 ("hMixDeltaPhiDeltaEtaCharged","Mixed event : #phi_{trigger} - #phi_{h^{#pm}} vs #eta_{trigger} - #eta_{h^{#pm}}",
2503 ndeltaphibins ,deltaphimin,deltaphimax,ndeltaetabins ,deltaetamin,deltaetamax);
2504 fhMixDeltaPhiDeltaEtaCharged->SetXTitle("#Delta #phi (rad)");
2505 fhMixDeltaPhiDeltaEtaCharged->SetYTitle("#Delta #eta");
2506 outputContainer->Add(fhMixDeltaPhiDeltaEtaCharged);
2509 new TH2F("hMixXECharged","Mixed event : #it{x}_{#it{E}} for charged tracks",
2510 nptbins,ptmin,ptmax,200,0.,2.);
2511 fhMixXECharged->SetYTitle("#it{x}_{#it{E}}");
2512 fhMixXECharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2513 outputContainer->Add(fhMixXECharged);
2516 new TH2F("hMixXEUeCharged","Mixed event : #it{x}_{#it{E}} for charged tracks in Ue region",
2517 nptbins,ptmin,ptmax,200,0.,2.);
2518 fhMixXEUeCharged->SetYTitle("#it{x}_{#it{E}}");
2519 fhMixXEUeCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2520 outputContainer->Add(fhMixXEUeCharged);
2523 new TH2F("hMixHbpXECharged","mixed event : #xi = ln(1/#it{x}_{#it{E}}) with charged hadrons",
2524 nptbins,ptmin,ptmax,200,0.,10.);
2525 fhMixHbpXECharged->SetYTitle("ln(1/#it{x}_{#it{E}})");
2526 fhMixHbpXECharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2527 outputContainer->Add(fhMixHbpXECharged);
2529 fhMixDeltaPhiChargedAssocPtBin = new TH2F*[fNAssocPtBins*nz];
2530 fhMixDeltaPhiChargedAssocPtBinDEta08 = new TH2F*[fNAssocPtBins*nz];
2531 fhMixDeltaPhiChargedAssocPtBinDEta0 = new TH2F*[fNAssocPtBins*nz];
2532 fhMixDeltaPhiDeltaEtaChargedAssocPtBin = new TH2F*[fNAssocPtBins*nz];
2534 for(Int_t i = 0 ; i < fNAssocPtBins ; i++)
2536 for(Int_t z = 0 ; z < nz ; z++)
2542 sz = Form("_vz%d",z);
2543 tz = Form(", #it{v}_{#it{z}} bin %d",z);
2546 //printf("MIX : iAssoc %d, Vz %d, bin %d - sz %s, tz %s \n",i,z,bin,sz.Data(),tz.Data());
2548 fhMixDeltaPhiChargedAssocPtBin[bin] = new TH2F(Form("hMixDeltaPhiChargedAssocPtBin%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
2549 Form("Mixed event #Delta #phi vs #it{p}_{T trigger} for associated #it{p}_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
2550 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
2551 fhMixDeltaPhiChargedAssocPtBin[bin]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2552 fhMixDeltaPhiChargedAssocPtBin[bin]->SetYTitle("#Delta #phi (rad)");
2554 fhMixDeltaPhiChargedAssocPtBinDEta08[bin] = new TH2F(Form("hMixDeltaPhiDeltaEta0.8ChargedAssocPtBin%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
2555 Form("Mixed event #Delta #phi vs #it{p}_{T trigger} for associated #it{p}_{T} bin [%2.1f,%2.1f]%s, for #Delta #eta > 0.8", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
2556 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
2557 fhMixDeltaPhiChargedAssocPtBinDEta08[bin]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2558 fhMixDeltaPhiChargedAssocPtBinDEta08[bin]->SetYTitle("#Delta #phi (rad)");
2560 fhMixDeltaPhiChargedAssocPtBinDEta0[bin] = new TH2F(Form("hMixDeltaPhiDeltaEta0ChargedAssocPtBin%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
2561 Form("Mixed event #Delta #phi vs #it{p}_{T trigger} for associated #it{p}_{T} bin [%2.1f,%2.1f]%s, for #Delta #eta = 0", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
2562 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
2563 fhMixDeltaPhiChargedAssocPtBinDEta0[bin]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2564 fhMixDeltaPhiChargedAssocPtBinDEta0[bin]->SetYTitle("#Delta #phi (rad)");
2566 fhMixDeltaPhiDeltaEtaChargedAssocPtBin[bin] = new TH2F(Form("hMixDeltaPhiDeltaEtaChargedAssocPtBin%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
2567 Form("Mixed event #Delta #phi vs #it{p}_{T trigger} for associated #it{p}_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
2568 ndeltaphibins ,deltaphimin,deltaphimax,ndeltaetabins ,deltaetamin,deltaetamax);
2569 fhMixDeltaPhiDeltaEtaChargedAssocPtBin[bin]->SetXTitle("#Delta #phi (rad)");
2570 fhMixDeltaPhiDeltaEtaChargedAssocPtBin[bin]->SetYTitle("#Delta #eta");
2572 outputContainer->Add(fhMixDeltaPhiChargedAssocPtBin[bin]);
2573 outputContainer->Add(fhMixDeltaPhiChargedAssocPtBinDEta08[bin]);
2574 outputContainer->Add(fhMixDeltaPhiChargedAssocPtBinDEta0[bin]);
2575 outputContainer->Add(fhMixDeltaPhiDeltaEtaChargedAssocPtBin[bin]);
2580 return outputContainer;
2584 //_________________________________________________________________________________________________
2585 Bool_t AliAnaParticleHadronCorrelation::GetDecayPhotonMomentum(AliAODPWG4Particle* trigger,
2586 TLorentzVector & mom1,
2587 TLorentzVector & mom2)
2589 // Get the momentum of the pi0/eta assigned decay photons
2590 // In case of pi0/eta trigger, we may want to check their decay correlation,
2591 // get their decay children
2593 Int_t indexPhoton1 = trigger->GetCaloLabel(0);
2594 Int_t indexPhoton2 = trigger->GetCaloLabel(1);
2596 if(indexPhoton1!=-1 || indexPhoton2!=-1) return kFALSE;
2599 printf("AliAnaParticleHadronCorrelation::GetDecayPhotonMomentum() - indexPhoton1 = %d, indexPhoton2 = %d \n", indexPhoton1, indexPhoton2);
2601 TObjArray * clusters = 0x0 ;
2602 if(trigger->GetDetector()=="EMCAL") clusters = GetEMCALClusters() ;
2603 else clusters = GetPHOSClusters() ;
2605 for(Int_t iclus = 0; iclus < clusters->GetEntriesFast(); iclus++)
2607 AliVCluster * photon = (AliVCluster*) (clusters->At(iclus));
2609 if(photon->GetID()==indexPhoton1) photon->GetMomentum(mom1,GetVertex(0)) ;
2610 if(photon->GetID()==indexPhoton2) photon->GetMomentum(mom1,GetVertex(0)) ;
2612 if(GetDebug() > 1)printf("AliAnaParticleHadronCorrelation::GetDecayPhotonMomentum() - Photon1 = %f, Photon2 = %f \n", mom1.Pt(), mom2.Pt());
2620 //_____________________________________________________________
2621 Int_t AliAnaParticleHadronCorrelation::GetMCTagHistogramIndex(Int_t mcTag)
2623 // Index of MC histograms depending on MC origin
2625 if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPrompt) ||
2626 GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCFragmentation)) return 0;
2627 else if( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0)) return 1;
2628 else if( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0Decay)) return 2;
2629 else if( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEtaDecay)) return 3;
2630 else if( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCOtherDecay)) return 4;
2631 else if(!GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron)) return 5;
2636 //_________________________________________
2637 void AliAnaParticleHadronCorrelation::Init()
2642 if(!GetReader()->IsCTSSwitchedOn())
2643 AliFatal("STOP!: You want to use CTS tracks in analysis but not read!! \n!!Check the configuration file!!\n");
2646 //____________________________________________________
2647 void AliAnaParticleHadronCorrelation::InitParameters()
2650 //Initialize the parameters of the analysis.
2651 SetInputAODName("Particle");
2652 SetAODObjArrayName("Hadrons");
2653 AddToHistogramsName("AnaHadronCorr_");
2655 SetPtCutRange(0.,300);
2656 fDeltaPhiMinCut = TMath::DegToRad()*120.;
2657 fDeltaPhiMaxCut = TMath::DegToRad()*240. ;
2658 fSelectIsolated = kFALSE;
2659 fMakeSeveralUE = kFALSE;
2660 fUeDeltaPhiMinCut = TMath::DegToRad()*60.;
2661 fUeDeltaPhiMaxCut = TMath::DegToRad()*120 ;
2663 fNeutralCorr = kFALSE ;
2664 fPi0Trigger = kFALSE ;
2665 fDecayTrigger = kFALSE ;
2666 fHMPIDCorrelation = kFALSE ;
2668 fMakeAbsoluteLeading = kTRUE;
2669 fMakeNearSideLeading = kFALSE;
2672 fAssocPtBinLimit[0] = 0.2 ;
2673 fAssocPtBinLimit[1] = 0.5 ;
2674 fAssocPtBinLimit[2] = 1.0 ;
2675 fAssocPtBinLimit[3] = 2.0 ;
2676 fAssocPtBinLimit[4] = 3.0 ;
2677 fAssocPtBinLimit[5] = 4.0 ;
2678 fAssocPtBinLimit[6] = 5.0 ;
2679 fAssocPtBinLimit[7] = 6.0 ;
2680 fAssocPtBinLimit[8] = 7.0 ;
2681 fAssocPtBinLimit[9] = 8.0 ;
2682 fAssocPtBinLimit[10] = 9.0 ;
2683 fAssocPtBinLimit[11] = 10.0 ;
2684 fAssocPtBinLimit[12] = 12.0 ;
2685 fAssocPtBinLimit[13] = 14.0 ;
2686 fAssocPtBinLimit[14] = 16.0 ;
2687 fAssocPtBinLimit[15] = 20.0 ;
2688 fAssocPtBinLimit[16] = 30.0 ;
2689 fAssocPtBinLimit[17] = 40.0 ;
2690 fAssocPtBinLimit[18] = 50.0 ;
2691 fAssocPtBinLimit[19] = 200.0 ;
2693 fUseMixStoredInReader = kTRUE;
2698 fSelectLeadingHadronAngle = kFALSE;
2699 fMinLeadHadPhi = 150*TMath::DegToRad();
2700 fMaxLeadHadPhi = 210*TMath::DegToRad();
2703 fMaxLeadHadPt = 100;
2707 //_________________________________________________________________________
2708 Bool_t AliAnaParticleHadronCorrelation::IsTriggerTheEventLeadingParticle()
2710 // Check if the what of the selected triggers is leading particle comparing
2711 // with all the triggers, all the tracks or all the clusters (if requested for the clusters).
2713 Double_t ptTrig = GetMinPt();
2714 Double_t phiTrig = 0 ;
2715 fLeadingTriggerIndex =-1 ;
2717 AliAODPWG4ParticleCorrelation* pLeading = 0;
2719 // Loop on stored AOD particles, find leading trigger on the selected list, with at least min pT.
2721 for(Int_t iaod = 0; iaod < GetInputAODBranch()->GetEntriesFast() ; iaod++)
2723 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
2724 particle->SetLeadingParticle(kFALSE); // set it later
2726 // Vertex cut in case of mixing
2727 Int_t check = CheckMixedEventVertex(particle->GetCaloLabel(0), particle->GetTrackLabel(0));
2728 if(check == 0) continue;
2729 if(check == -1) return kFALSE; // not sure if it is correct.
2731 // find the leading particles with highest momentum
2732 if (particle->Pt() > ptTrig)
2734 ptTrig = particle->Pt() ;
2735 phiTrig = particle->Phi();
2737 pLeading = particle ;
2739 }// finish search of leading trigger particle on the AOD branch.
2741 if(index < 0) return kFALSE;
2743 //printf("AOD leading pT %2.2f, ID %d\n", pLeading->Pt(),pLeading->GetCaloLabel(0));
2745 if(phiTrig < 0 ) phiTrig += TMath::TwoPi();
2747 // Compare if it is the leading of all tracks
2750 for(Int_t ipr = 0;ipr < GetCTSTracks()->GetEntriesFast() ; ipr ++ )
2752 AliVTrack * track = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
2754 if(track->GetID() == pLeading->GetTrackLabel(0) || track->GetID() == pLeading->GetTrackLabel(1) ||
2755 track->GetID() == pLeading->GetTrackLabel(2) || track->GetID() == pLeading->GetTrackLabel(3) ) continue ;
2757 Double_t mom[3] = {track->Px(),track->Py(),track->Pz()};
2758 p3.SetXYZ(mom[0],mom[1],mom[2]);
2759 Float_t pt = p3.Pt();
2760 Float_t phi = p3.Phi() ;
2761 if(phi < 0) phi+=TMath::TwoPi();
2763 //jump out this event if near side associated particle pt larger than trigger
2764 if (fMakeNearSideLeading)
2766 if(pt > ptTrig && TMath::Abs(phi-phiTrig) < TMath::PiOver2()) return kFALSE;
2768 //jump out this event if there is any other particle with pt larger than trigger
2771 if(pt > ptTrig) return kFALSE ;
2775 // Compare if it is leading of all calorimeter clusters
2777 if(fCheckLeadingWithNeutralClusters)
2779 // Select the calorimeter cluster list
2780 TObjArray * nePl = 0x0;
2781 if (pLeading->GetDetector() == "PHOS" )
2782 nePl = GetPHOSClusters();
2784 nePl = GetEMCALClusters();
2786 if(!nePl) return kTRUE; // Do the selection just with the tracks if no calorimeter is available.
2789 for(Int_t ipr = 0;ipr < nePl->GetEntriesFast() ; ipr ++ )
2791 AliVCluster * cluster = (AliVCluster *) (nePl->At(ipr)) ;
2793 if(cluster->GetID() == pLeading->GetCaloLabel(0) || cluster->GetID() == pLeading->GetCaloLabel(1) ) continue ;
2795 cluster->GetMomentum(lv,GetVertex(0));
2797 Float_t pt = lv.Pt();
2798 Float_t phi = lv.Phi() ;
2799 if(phi < 0) phi+=TMath::TwoPi();
2801 if(IsTrackMatched(cluster,GetReader()->GetInputEvent())) continue ; // avoid charged clusters, already covered by tracks, or cluster merging with track.
2803 //jump out this event if near side associated particle pt larger than trigger
2804 // not really needed for calorimeter, unless DCal is included
2805 if (fMakeNearSideLeading)
2807 if(pt > ptTrig && TMath::Abs(phi-phiTrig) < TMath::PiOver2()) return kFALSE ;
2809 //jump out this event if there is any other particle with pt larger than trigger
2812 if(pt > ptTrig) return kFALSE ;
2815 } // check neutral clusters
2817 fLeadingTriggerIndex = index ;
2818 pLeading->SetLeadingParticle(kTRUE);
2820 if( GetDebug() > 1 ) printf("\t particle AOD with index %d is leading with pT %2.2f\n", fLeadingTriggerIndex, pLeading->Pt());
2826 //_________________________________________________________________
2827 void AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms()
2829 //Particle-Hadron Correlation Analysis, fill histograms
2831 if(!GetInputAODBranch())
2833 AliFatal(Form("No input particles in AOD with name branch < %s >, STOP \n",GetInputAODName().Data()));
2834 return ; // coverity
2837 Int_t naod = GetInputAODBranch()->GetEntriesFast();
2841 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - No particle AOD found! \n");
2843 return ; // no trigger particles found.
2848 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - Begin hadron correlation analysis, fill histograms \n");
2849 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - In particle branch aod entries %d\n", naod);
2850 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - In CTS aod entries %d\n", GetCTSTracks()->GetEntriesFast());
2853 //------------------------------------------------------
2854 // Find leading trigger if analysis request only leading,
2855 // if there is no leading trigger, then skip the event
2858 if( fMakeAbsoluteLeading || fMakeNearSideLeading )
2860 Bool_t leading = IsTriggerTheEventLeadingParticle();
2863 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - AOD Leading trigger? %d, with index %d\n",leading,fLeadingTriggerIndex);
2867 if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - Leading was requested and not found\n");
2872 // Select only the leading in the trigger AOD loop
2874 iaod = fLeadingTriggerIndex;
2878 //------------------------------------------------------
2879 // Get event multiplicity and bins
2881 Float_t cen = GetEventCentrality();
2882 Float_t ep = GetEventPlaneAngle();
2883 if(fFillHighMultHistograms) fhTriggerEventPlaneCentrality->Fill(cen,ep);
2885 Int_t mixEventBin = GetEventMixBin();
2886 Int_t vzbin = GetEventVzBin();
2888 //------------------------------------------------------
2889 // Loop on trigger AOD
2891 for( iaod = 0; iaod < naod; iaod++ )
2893 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
2896 // Trigger particle selection criteria:
2898 Float_t pt = particle->Pt();
2900 if(pt < GetMinPt() || pt > GetMaxPt() ) continue ;
2902 fhPtTriggerInput->Fill(pt);
2905 // check if it was a calorimeter cluster
2906 // and if the shower shape cut was requested apply it.
2907 // Not needed if already done at the particle identification level,
2908 // but for isolation studies, it is preferred not to remove so we do it here
2910 Int_t clID1 = particle->GetCaloLabel(0) ;
2911 Int_t clID2 = particle->GetCaloLabel(1) ; // for photon clusters should not be set.
2912 if( GetDebug() > 1 ) printf("%s Trigger : id1 %d, id2 %d, min %f, max %f, det %s\n",
2913 GetInputAODName().Data(),clID1,clID2,fM02MinCut,fM02MaxCut,(particle->GetDetector()).Data());
2915 if(clID1 > 0 && clID2 < 0 && fM02MaxCut > 0 && fM02MinCut > 0)
2918 TObjArray* clusters = 0x0;
2919 if (particle->GetDetector() == "EMCAL") clusters = GetEMCALClusters();
2920 else if(particle->GetDetector() == "PHOS" ) clusters = GetPHOSClusters();
2924 AliVCluster *cluster = FindCluster(clusters,clID1,iclus);
2925 Float_t m02 = cluster->GetM02();
2926 if(m02 > fM02MaxCut || m02 < fM02MinCut) continue ;
2929 fhPtTriggerSSCut->Fill(pt);
2933 // Check if the particle is isolated or if we want to take the isolation into account
2934 // This bool is set in AliAnaParticleIsolation
2938 if( !particle->IsIsolated() ) continue;
2939 fhPtTriggerIsoCut->Fill(pt);
2943 // Check if trigger is in fiducial region
2945 if(IsFiducialCutOn())
2947 Bool_t in = GetFiducialCut()->IsInFiducialCut(*particle->Momentum(),particle->GetDetector()) ;
2948 if(! in ) continue ;
2951 fhPtTriggerFidCut->Fill(pt);
2953 //---------------------------------------
2956 // Find the leading hadron in the opposite hemisphere to the triggeer
2957 // and accept the trigger if leading is in defined window.
2958 Bool_t okLeadHad = kTRUE;
2959 if(fSelectLeadingHadronAngle)
2960 okLeadHad = FindLeadingOppositeHadronInWindow(particle);
2961 if(!okLeadHad) continue;
2964 // Charged particles correlation
2966 MakeChargedCorrelation(particle);
2970 MakeMCChargedCorrelation(particle->GetLabel());
2972 // Do own mixed event with charged,
2973 // add event and remove previous or fill the mixed histograms
2975 MakeChargedMixCorrelation(particle);
2978 // Neutral particles correlation
2981 MakeNeutralCorrelation(particle);
2983 //----------------------------------------------------------------
2984 // Fill trigger pT related histograms if not absolute leading
2987 // pT of the trigger, vs trigger origin if MC
2989 fhPtTrigger->Fill(pt);
2992 Int_t mcIndex = GetMCTagHistogramIndex(particle->GetTag());
2993 fhPtTriggerMC[mcIndex]->Fill(pt);
2997 // Acceptance of the trigger
2999 Float_t phi = particle->Phi();
3000 if( phi<0 ) phi+=TMath::TwoPi();
3001 fhPhiTrigger->Fill(pt, phi);
3003 fhEtaTrigger->Fill(pt, particle->Eta());
3004 //printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - Trigger particle : pt %f, eta %f, phi %f\n",particle->Pt(),particle->Eta(),phi);
3006 //----------------------------------
3007 // Trigger particle pT vs event bins
3009 fhPtTriggerBin->Fill(pt,mixEventBin);
3011 fhPtTriggerVzBin->Fill(pt,vzbin);
3013 if(fFillHighMultHistograms)
3015 fhPtTriggerCentrality->Fill(pt,cen);
3016 fhPtTriggerEventPlane->Fill(pt,ep);
3019 //----------------------------------
3020 // Trigger particle pT vs pile-up
3022 if(fFillPileUpHistograms)
3024 Int_t vtxBC = GetReader()->GetVertexBC();
3025 if(vtxBC == 0 || vtxBC==AliVTrack::kTOFBCNA) fhPtTriggerVtxBC0->Fill(pt);
3027 if(GetReader()->IsPileUpFromSPD()) fhPtTriggerPileUp[0]->Fill(pt);
3028 if(GetReader()->IsPileUpFromEMCal()) fhPtTriggerPileUp[1]->Fill(pt);
3029 if(GetReader()->IsPileUpFromSPDOrEMCal()) fhPtTriggerPileUp[2]->Fill(pt);
3030 if(GetReader()->IsPileUpFromSPDAndEMCal()) fhPtTriggerPileUp[3]->Fill(pt);
3031 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) fhPtTriggerPileUp[4]->Fill(pt);
3032 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) fhPtTriggerPileUp[5]->Fill(pt);
3033 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) fhPtTriggerPileUp[6]->Fill(pt);
3035 } // AOD trigger loop
3037 //Reinit for next event
3038 fLeadingTriggerIndex = -1;
3040 if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - End fill histograms \n");
3043 //_______________________________________________________________________________________________________
3044 void AliAnaParticleHadronCorrelation::MakeChargedCorrelation(AliAODPWG4ParticleCorrelation *aodParticle)
3046 // Charged Hadron Correlation Analysis
3048 printf("AliAnaParticleHadronCorrelation::MakeChargedCorrelation() - Make trigger particle - charged hadron correlation \n");
3050 Float_t phiTrig = aodParticle->Phi();
3051 Float_t etaTrig = aodParticle->Eta();
3052 Float_t ptTrig = aodParticle->Pt();
3053 Bool_t decay = aodParticle->IsTagged();
3054 Int_t mcTag = aodParticle->GetTag();
3055 Double_t bz = GetReader()->GetInputEvent()->GetMagneticField();
3057 Float_t pt = -100. ;
3058 Float_t phi = -100. ;
3059 Float_t eta = -100. ;
3060 Float_t deltaPhi = -100. ;
3063 TLorentzVector photonMom ;
3064 TObjArray * reftracks = 0x0;
3067 // Mixed event settings
3068 Int_t evtIndex11 = -1 ; // cluster trigger or pi0 trigger
3069 Int_t evtIndex12 = -1 ; // pi0 trigger
3070 Int_t evtIndex13 = -1 ; // charged trigger
3072 if (GetMixedEvent())
3074 evtIndex11 = GetMixedEvent()->EventIndexForCaloCluster(aodParticle->GetCaloLabel(0)) ;
3075 evtIndex12 = GetMixedEvent()->EventIndexForCaloCluster(aodParticle->GetCaloLabel(1)) ;
3076 evtIndex13 = GetMixedEvent()->EventIndex(aodParticle->GetTrackLabel(0)) ;
3080 // In case of pi0/eta trigger, we may want to check their decay correlation,
3081 // get their decay children
3083 TLorentzVector decayMom1;
3084 TLorentzVector decayMom2;
3085 Bool_t decayFound = kFALSE;
3088 decayFound = GetDecayPhotonMomentum(aodParticle,decayMom1, decayMom2);
3091 fhPtPi0DecayRatio->Fill(ptTrig, decayMom1.Pt()/ptTrig);
3092 fhPtPi0DecayRatio->Fill(ptTrig, decayMom2.Pt()/ptTrig);
3096 //-----------------------------------------------------------------------
3097 // Track loop, select tracks with good pt, phi and fill AODs or histograms
3098 //-----------------------------------------------------------------------
3100 for(Int_t ipr = 0;ipr < GetCTSTracks()->GetEntriesFast() ; ipr ++ )
3102 AliVTrack * track = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
3104 Double_t mom[3] = {track->Px(),track->Py(),track->Pz()};
3105 p3.SetXYZ(mom[0],mom[1],mom[2]);
3109 if(phi < 0) phi+=TMath::TwoPi();
3111 //Select only hadrons in pt range
3112 if(pt < fMinAssocPt || pt > fMaxAssocPt) continue ;
3114 //remove trigger itself for correlation when use charged triggers
3115 if( track->GetID() == aodParticle->GetTrackLabel(0) || track->GetID() == aodParticle->GetTrackLabel(1) ||
3116 track->GetID() == aodParticle->GetTrackLabel(2) || track->GetID() == aodParticle->GetTrackLabel(3) )
3119 //Only for mixed event frame
3120 Int_t evtIndex2 = 0 ;
3121 if (GetMixedEvent())
3123 evtIndex2 = GetMixedEvent()->EventIndex(track->GetID()) ;
3124 if (evtIndex11 == evtIndex2 || evtIndex12 == evtIndex2 || evtIndex13 == evtIndex2 ) // photon and track from different events
3127 if (TMath::Abs(GetVertex(evtIndex2)[2]) > GetZvertexCut())
3132 printf("AliAnaParticleHadronCorrelation::MakeChargedCorrelation() - Selected charge for momentum imbalance: pt %2.2f, phi %2.2f, eta %2.2f \n",pt,phi,eta);
3134 // ------------------------------
3135 // Track type bin or bits setting
3139 // * Set the pt associated bin for the defined bins *
3141 Int_t assocBin = -1;
3142 for(Int_t i = 0 ; i < fNAssocPtBins ; i++)
3144 if(pt > fAssocPtBinLimit[i] && pt < fAssocPtBinLimit[i+1]) assocBin= i;
3148 // * Assign to the histogram array a bin corresponding
3149 // to a combination of pTa and vz bins *
3156 nz = GetNZvertBin();
3157 vz = GetEventVzBin();
3160 Int_t bin = assocBin*nz+vz;
3162 //printf("assoc Bin = %d, vZ bin = %d, bin = %d \n", assocBin,GetEventVzBin(),bin);
3165 // * Get the status of the TOF bit *
3167 ULong_t status = track->GetStatus();
3168 Bool_t okTOF = ( (status & AliVTrack::kTOFout) == AliVTrack::kTOFout ) ;
3169 //Double32_t tof = track->GetTOFsignal()*1e-3;
3170 Int_t trackBC = track->GetTOFBunchCrossing(bz);
3173 if (okTOF && trackBC!=0) outTOF = 1;
3174 else if(okTOF && trackBC==0) outTOF = 0;
3176 // Track multiplicity or cent bin
3177 Int_t cenbin = GetEventCentralityBin(); // combine with vz assoc bin???
3183 // Azimuthal Angle histograms
3185 // Calculate deltaPhi shift
3186 deltaPhi = phiTrig-phi;
3187 if(deltaPhi <= -TMath::PiOver2()) deltaPhi+=TMath::TwoPi();
3188 if(deltaPhi > 3*TMath::PiOver2()) deltaPhi-=TMath::TwoPi();
3190 FillChargedAngularCorrelationHistograms(pt, ptTrig, bin, phi, phiTrig, deltaPhi,
3191 eta, etaTrig, decay, track->GetHMPIDsignal(),
3192 outTOF, cenbin, mcTag);
3194 // Imbalance zT/xE/pOut histograms
3198 // Delta phi cut for momentum imbalance correlation
3200 if ( (deltaPhi > fDeltaPhiMinCut) && (deltaPhi < fDeltaPhiMaxCut) )
3201 FillChargedMomentumImbalanceHistograms(ptTrig, pt, deltaPhi, cenbin, track->Charge(),
3202 bin, decay, outTOF, mcTag);
3205 // Underlying event, right side, default case
3207 if ( (deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < fUeDeltaPhiMaxCut) )
3208 FillChargedUnderlyingEventHistograms(ptTrig, pt, deltaPhi, cenbin, outTOF);
3211 // Several UE calculation, in different perpendicular regions, up to 6:
3212 // left, right, upper-left, lower left, upper-right, lower-right
3215 FillChargedUnderlyingEventSidesHistograms(ptTrig,pt,deltaPhi);
3218 if(fPi0Trigger && decayFound)
3219 FillDecayPhotonCorrelationHistograms(pt, phi, decayMom1,decayMom2, kTRUE) ;
3222 // Add track reference to array
3224 if(fFillAODWithReferences)
3229 reftracks = new TObjArray(0);
3230 TString trackname = Form("%sTracks", GetAODObjArrayName().Data());
3231 reftracks->SetName(trackname.Data());
3232 reftracks->SetOwner(kFALSE);
3235 reftracks->Add(track);
3236 }// reference track to AOD
3239 //Fill AOD with reference tracks, if not filling histograms
3240 if(fFillAODWithReferences && reftracks)
3242 aodParticle->AddObjArray(reftracks);
3247 //_________________________________________________________________________________________________________
3248 void AliAnaParticleHadronCorrelation::MakeChargedMixCorrelation(AliAODPWG4ParticleCorrelation *aodParticle)
3250 // Mix current trigger with tracks in another MB event
3252 if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation() - Make trigger particle - charged hadron mixed event correlation \n");
3254 if(GetMixedEvent()) return; // This is not the mixed event from general mixing frame
3256 // Get the event with similar caracteristics
3257 //printf("MakeChargedMixCorrelation for %s\n",GetInputAODName().Data());
3259 AliAnalysisManager * manager = AliAnalysisManager::GetAnalysisManager();
3261 AliInputEventHandler * inputHandler = dynamic_cast<AliInputEventHandler*>(manager->GetInputEventHandler());
3263 if(!inputHandler) return;
3265 if(!(inputHandler->IsEventSelected( ) & GetReader()->GetEventTriggerMask())) return;
3267 // Get the pool, check if it exits
3268 Int_t eventBin = GetEventMixBin();
3270 fhEventBin->Fill(eventBin);
3272 //Check that the bin exists, if not (bad determination of RP, ntrality or vz bin) do nothing
3273 if(eventBin < 0) return;
3276 TList * poolCalo = 0;
3277 if(fUseMixStoredInReader)
3279 pool = GetReader()->GetListWithMixedEventsForTracks(eventBin);
3280 if(OnlyIsolated() || fFillNeutralEventMixPool) poolCalo = GetReader()->GetListWithMixedEventsForCalo (eventBin);
3284 pool = fListMixTrackEvents[eventBin];
3285 if(OnlyIsolated() || fFillNeutralEventMixPool) poolCalo = fListMixCaloEvents [eventBin];
3290 if((OnlyIsolated() || fFillNeutralEventMixPool ) && !poolCalo &&
3291 (GetIsolationCut()->GetParticleTypeInCone()!=AliIsolationCut::AliIsolationCut::kOnlyCharged))
3292 printf("AliAnaParticleHadronCorrelation::MakeChargedMixCorrelation() - Careful, cluster pool not available\n");
3294 Double_t ptTrig = aodParticle->Pt();
3295 Double_t etaTrig = aodParticle->Eta();
3296 Double_t phiTrig = aodParticle->Phi();
3297 if(phiTrig < 0.) phiTrig+=TMath::TwoPi();
3300 printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation() - Pool bin %d size %d, trigger trigger pt=%f, phi=%f, eta=%f\n",
3301 eventBin,pool->GetSize(), ptTrig,phiTrig,etaTrig);
3303 Double_t ptAssoc = -999.;
3304 Double_t phiAssoc = -999.;
3305 Double_t etaAssoc = -999.;
3306 Double_t deltaPhi = -999.;
3307 Double_t deltaEta = -999.;
3308 Double_t xE = -999.;
3309 Double_t hbpXE = -999.;
3311 //Start from first event in pool except if in this same event the pool was filled
3313 if(GetReader()->GetLastTracksMixedEvent() == GetEventNumber()) ev0 = 1;
3315 for(Int_t ev=ev0; ev < pool->GetSize(); ev++)
3317 TObjArray* bgTracks = static_cast<TObjArray*>(pool->At(ev));
3318 TObjArray* bgCalo = 0;
3320 // Check if the particle is isolated in the mixed event, it not, do not fill the histograms
3321 if((OnlyIsolated() || fFillNeutralEventMixPool) && poolCalo)
3323 if(pool->GetSize()!=poolCalo->GetSize())
3324 printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation() - Different size of calo and track pools\n");
3326 bgCalo = static_cast<TObjArray*>(poolCalo->At(ev));
3329 printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation() - Event %d in calo pool not available?\n",ev);
3333 Int_t n=0; Int_t nfrac = 0; Bool_t isolated = kFALSE; Float_t coneptsum = 0;
3334 GetIsolationCut()->MakeIsolationCut(bgTracks,bgCalo,
3335 GetReader(), GetCaloPID(),
3336 kFALSE, aodParticle, "",
3337 n,nfrac,coneptsum, isolated);
3339 //printf("AliAnaParticleHadronCorrelation::MakeChargedMixCorrelation() - Isolated? %d - cone %f, ptthres %f",
3340 // isolated,GetIsolationCut()->GetConeSize(),GetIsolationCut()->GetPtThreshold());
3341 //if(bgTracks)printf(" - n track %d", bgTracks->GetEntriesFast());
3344 if(!isolated) continue ;
3348 fhEventMixBin->Fill(eventBin);
3350 Int_t nTracks=bgTracks->GetEntriesFast();
3351 //printf("\t Read Pool event %d, nTracks %d\n",ev,nTracks);
3353 //Check if it is leading if mixed event
3354 if(fMakeNearSideLeading || fMakeAbsoluteLeading)
3356 Bool_t leading = kTRUE;
3357 for(Int_t jlead = 0;jlead <nTracks; jlead++ )
3359 AliAODPWG4Particle *track = (AliAODPWG4Particle*) bgTracks->At(jlead) ;
3361 ptAssoc = track->Pt();
3362 phiAssoc = track->Phi() ;
3364 if(phiAssoc < 0) phiAssoc+=TMath::TwoPi();
3365 if (fMakeNearSideLeading)
3367 if(ptAssoc > ptTrig && TMath::Abs(phiAssoc-phiTrig) < TMath::PiOver2())
3373 //jump out this event if there is any other particle with pt larger than trigger
3374 else if(fMakeAbsoluteLeading)
3376 if(ptAssoc > ptTrig)
3384 if(fFillNeutralEventMixPool && bgCalo)
3386 Int_t nClusters=bgCalo->GetEntriesFast();
3387 TLorentzVector mom ;
3388 for(Int_t jlead = 0;jlead <nClusters; jlead++ )
3390 AliAODPWG4Particle *cluster= (AliAODPWG4Particle*) bgCalo->At(jlead) ;
3392 ptAssoc = cluster->Pt();
3393 phiAssoc = cluster->Phi() ;
3395 if(phiAssoc < 0) phiAssoc+=TMath::TwoPi();
3396 if (fMakeNearSideLeading)
3398 if(ptAssoc > ptTrig && TMath::Abs(phiAssoc-phiTrig) < TMath::PiOver2())
3404 //jump out this event if there is any other particle with pt larger than trigger
3405 else if(fMakeAbsoluteLeading)
3407 if(ptAssoc > ptTrig)
3416 if(!leading) continue; // not leading, check the next event in pool
3420 fhPtTriggerMixed ->Fill(ptTrig);
3421 fhPhiTriggerMixed ->Fill(ptTrig, phiTrig);
3422 fhEtaTriggerMixed ->Fill(ptTrig, etaTrig);
3423 fhPtTriggerMixedBin->Fill(ptTrig,eventBin);
3424 if(fCorrelVzBin)fhPtTriggerMixedVzBin->Fill(ptTrig, GetEventVzBin());
3426 for(Int_t j1 = 0;j1 <nTracks; j1++ )
3428 AliAODPWG4Particle *track = (AliAODPWG4Particle*) bgTracks->At(j1) ;
3430 if(!track) continue;
3432 ptAssoc = track->Pt();
3433 etaAssoc = track->Eta();
3434 phiAssoc = track->Phi() ;
3435 if(phiAssoc < 0) phiAssoc+=TMath::TwoPi();
3437 if(IsFiducialCutOn())
3439 Bool_t in = GetFiducialCut()->IsInFiducialCut(*aodParticle->Momentum(),"CTS") ;
3443 deltaPhi = phiTrig-phiAssoc;
3444 if(deltaPhi < -TMath::PiOver2()) deltaPhi+=TMath::TwoPi();
3445 if(deltaPhi > 3*TMath::PiOver2()) deltaPhi-=TMath::TwoPi();
3446 deltaEta = etaTrig-etaAssoc;
3449 printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation(): deltaPhi= %f, deltaEta=%f\n",deltaPhi, deltaEta);
3451 // Set the pt associated bin for the defined bins
3452 Int_t assocBin = -1;
3453 for(Int_t i = 0 ; i < fNAssocPtBins ; i++)
3455 if(ptAssoc > fAssocPtBinLimit[i] && ptAssoc < fAssocPtBinLimit[i+1]) assocBin= i;
3458 // Assign to the histogram array a bin corresponding to a combination of pTa and vz bins
3464 nz = GetNZvertBin();
3465 vz = GetEventVzBin();
3468 Int_t bin = assocBin*nz+vz;
3470 fhMixDeltaPhiCharged ->Fill(ptTrig, deltaPhi);
3471 fhMixDeltaPhiDeltaEtaCharged->Fill(deltaPhi, deltaEta);
3473 fhMixDeltaPhiCharged ->Fill(ptTrig, deltaPhi);
3474 fhMixDeltaPhiDeltaEtaCharged->Fill(deltaPhi, deltaEta);
3476 xE =-ptAssoc/ptTrig*TMath::Cos(deltaPhi); // -(px*pxTrig+py*pyTrig)/(ptTrig*ptTrig);
3477 //if(xE <0.)xE =-xE;
3478 if(xE > 0 ) hbpXE = TMath::Log(1./xE);
3481 if ( (deltaPhi > fDeltaPhiMinCut) && (deltaPhi < fDeltaPhiMaxCut) )
3483 fhMixXECharged->Fill(ptTrig,xE);
3484 fhMixHbpXECharged->Fill(ptTrig,hbpXE);
3487 if ( (deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < fUeDeltaPhiMaxCut) )
3489 //Underlying event region
3490 Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
3491 Double_t uexE = -(ptAssoc/ptTrig)*TMath::Cos(randomphi);
3493 if(uexE < 0.) uexE = -uexE;
3495 fhMixXEUeCharged->Fill(ptTrig,uexE);
3498 if(bin < 0) continue ; // this pt bin was not considered
3500 if(TMath::Abs(deltaEta) > 0.8)
3501 fhMixDeltaPhiChargedAssocPtBinDEta08 [bin]->Fill(ptTrig, deltaPhi);
3502 if(TMath::Abs(deltaEta) < 0.01)
3503 fhMixDeltaPhiChargedAssocPtBinDEta0 [bin]->Fill(ptTrig, deltaPhi);
3505 fhMixDeltaPhiChargedAssocPtBin [bin]->Fill(ptTrig, deltaPhi);
3506 fhMixDeltaPhiDeltaEtaChargedAssocPtBin[bin]->Fill(deltaPhi, deltaEta);
3509 } // mixed event loop
3513 //_______________________________________________________________________________________________________
3514 void AliAnaParticleHadronCorrelation::MakeNeutralCorrelation(AliAODPWG4ParticleCorrelation * aodParticle)
3516 // Neutral Pion Correlation Analysis
3518 TObjArray * pi0list = (TObjArray*) GetAODBranch(fPi0AODBranchName); // For the future, foresee more possible pi0 lists
3519 if(!pi0list) return ;
3521 Int_t npi0 = pi0list->GetEntriesFast();
3522 if(npi0 == 0) return ;
3525 printf("AliAnaParticleHadronCorrelation::MakeNeutralCorrelation() - Particle - pi0 correlation, %d pi0's\n",npi0);
3527 Int_t evtIndex11 = 0 ;
3528 Int_t evtIndex12 = 0 ;
3529 if (GetMixedEvent())
3531 evtIndex11 = GetMixedEvent()->EventIndexForCaloCluster(aodParticle->GetCaloLabel(0)) ;
3532 evtIndex12 = GetMixedEvent()->EventIndexForCaloCluster(aodParticle->GetCaloLabel(1)) ;
3535 Float_t pt = -100. ;
3536 Float_t zT = -100. ;
3537 Float_t phi = -100. ;
3538 Float_t eta = -100. ;
3539 Float_t xE = -100. ;
3540 Float_t hbpXE= -100. ;
3541 Float_t hbpZT= -100. ;
3543 Float_t ptTrig = aodParticle->Pt();
3544 Float_t phiTrig = aodParticle->Phi();
3545 Float_t etaTrig = aodParticle->Eta();
3546 Float_t deltaPhi= -100. ;
3547 Float_t deltaEta= -100. ;
3549 TLorentzVector photonMom ;
3551 // In case of pi0/eta trigger, we may want to check their decay correlation,
3552 // get their decay children
3553 TLorentzVector decayMom1;
3554 TLorentzVector decayMom2;
3555 Bool_t decayFound = kFALSE;
3556 if(fPi0Trigger) decayFound = GetDecayPhotonMomentum(aodParticle,decayMom1, decayMom2);
3558 TObjArray * refpi0 = 0x0;
3561 //Loop on stored AOD pi0
3563 for(Int_t iaod = 0; iaod < npi0 ; iaod++)
3565 AliAODPWG4Particle* pi0 = (AliAODPWG4Particle*) (pi0list->At(iaod));
3567 Int_t evtIndex2 = 0 ;
3568 Int_t evtIndex3 = 0 ;
3569 if (GetMixedEvent())
3571 evtIndex2 = GetMixedEvent()->EventIndexForCaloCluster(pi0->GetCaloLabel(0)) ;
3572 evtIndex3 = GetMixedEvent()->EventIndexForCaloCluster(pi0->GetCaloLabel(1)) ;
3574 if (evtIndex11 == evtIndex2 || evtIndex12 == evtIndex2 ||
3575 evtIndex11 == evtIndex3 || evtIndex12 == evtIndex3) // trigger and pi0 are not from different events
3581 if(pt < fMinAssocPt || pt > fMaxAssocPt) continue ;
3583 //remove trigger itself for correlation when use charged triggers
3584 if(aodParticle->GetCaloLabel(0) >= 0 &&
3585 (pi0->GetCaloLabel(0) == aodParticle->GetCaloLabel(0) || pi0->GetCaloLabel(1) == aodParticle->GetCaloLabel(0))) continue ;
3587 if( aodParticle->GetCaloLabel(1) >= 0 &&
3588 (pi0->GetCaloLabel(0) == aodParticle->GetCaloLabel(1) || pi0->GetCaloLabel(1) == aodParticle->GetCaloLabel(1))) continue ;
3591 // Angular correlations
3595 deltaEta = etaTrig-eta;
3596 deltaPhi = phiTrig-phi;
3597 if(deltaPhi <= -TMath::PiOver2()) deltaPhi+=TMath::TwoPi();
3598 if(deltaPhi > 3*TMath::PiOver2()) deltaPhi-=TMath::TwoPi();
3600 fhEtaNeutral ->Fill(pt , eta );
3601 fhPhiNeutral ->Fill(pt , phi );
3602 fhDeltaEtaNeutral->Fill(ptTrig, deltaEta);
3603 fhDeltaPhiNeutral->Fill(ptTrig, deltaPhi);
3605 if(pt > 2 ) fhDeltaPhiDeltaEtaNeutral->Fill(deltaPhi, deltaEta);
3608 // Momentum imbalance
3615 if(zT > 0 ) hbpZT = TMath::Log(1./zT);
3617 //delta phi cut for correlation
3618 if( (deltaPhi > fDeltaPhiMinCut) && ( deltaPhi < fDeltaPhiMaxCut) )
3620 xE =-pt/ptTrig*TMath::Cos(deltaPhi); // -(px*pxTrig+py*pyTrig)/(ptTrig*ptTrig);
3621 //if(xE <0.)xE =-xE;
3622 if(xE > 0 ) hbpXE = TMath::Log(1./xE);
3624 fhDeltaPhiNeutralPt->Fill(pt,deltaPhi);
3625 fhXENeutral ->Fill(ptTrig,xE);
3626 fhPtHbpXENeutral ->Fill(ptTrig,hbpXE);
3627 fhZTNeutral ->Fill(ptTrig,zT);
3628 fhPtHbpZTNeutral ->Fill(ptTrig,hbpZT);
3630 else if ( (deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < fUeDeltaPhiMaxCut) )
3632 // Randomize angle for xE calculation
3633 Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
3635 xE = -(pt/ptTrig)*TMath::Cos(randomphi);
3636 if(xE > 0 ) hbpXE = TMath::Log(1./xE);
3638 fhDeltaPhiUeNeutralPt->Fill(pt,deltaPhi);
3639 fhZTUeNeutral ->Fill(ptTrig,zT);
3640 fhPtHbpZTUeNeutral ->Fill(ptTrig,hbpZT);
3641 fhXEUeNeutral ->Fill(ptTrig,xE);
3642 fhPtHbpXEUeNeutral ->Fill(ptTrig,hbpXE);
3645 // Several UE calculation, not sure it is useful
3646 // with partical calorimter acceptance
3647 if(fMakeSeveralUE) FillNeutralUnderlyingEventSidesHistograms(ptTrig,pt,zT,hbpZT,deltaPhi);
3650 // Decay photon correlations
3652 if(fPi0Trigger && decayFound)
3653 FillDecayPhotonCorrelationHistograms(pt, phi, decayMom1,decayMom2,kFALSE) ;
3655 if(fFillAODWithReferences)
3660 refpi0 = new TObjArray(0);
3661 refpi0->SetName(GetAODObjArrayName()+"Pi0s");
3662 refpi0->SetOwner(kFALSE);
3665 }//put references in trigger AOD
3668 printf("AliAnaParticleHadronCorrelation::MakeNeutralCorrelation() - Selected pi0: pt %2.2f, phi %2.2f, eta %2.2f \n",pt,phi,eta);
3672 //Fill AOD with reference tracks, if not filling histograms
3673 if(fFillAODWithReferences && refpi0)
3675 aodParticle->AddObjArray(refpi0);
3679 //__________________________________________________________________________
3680 void AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation(Int_t label)
3682 // Charged Hadron Correlation Analysis with MC information
3684 if ( GetDebug() > 1 )
3685 AliInfo("Make trigger particle - charged hadron correlation in AOD MC level");
3689 if( GetDebug() > 0 ) AliInfo(Form(" *** bad label ***: label %d", label));
3693 AliStack * stack = 0x0 ;
3694 TParticle * primary = 0x0 ;
3695 TClonesArray * mcparticles = 0x0 ;
3696 AliAODMCParticle * aodprimary = 0x0 ;
3698 Double_t eprim = 0 ;
3699 Double_t ptprim = 0 ;
3700 Double_t phiprim = 0 ;
3701 Double_t etaprim = 0 ;
3703 Int_t iParticle = 0 ;
3705 Bool_t leadTrig = kTRUE;
3707 if( GetReader()->ReadStack() )
3709 stack = GetMCStack() ;
3712 AliFatal("Stack not available, is the MC handler called? STOP");
3716 //nTracks = stack->GetNtrack() ;
3717 nTracks = stack->GetNprimary();
3718 if( label >= stack->GetNtrack() )
3721 AliInfo(Form("*** large label ***: label %d, n tracks %d", label, stack->GetNtrack()));
3725 primary = stack->Particle(label);
3728 AliInfo(Form(" *** no primary ***: label %d", label));
3732 eprim = primary->Energy();
3733 ptprim = primary->Pt();
3734 etaprim = primary->Eta();
3735 phiprim = primary->Phi();
3736 if(phiprim < 0) phiprim+=TMath::TwoPi();
3738 if(ptprim < 0.01 || eprim < 0.01) return ;
3740 for (iParticle = 0 ; iParticle < nTracks ; iParticle++)
3742 TParticle * particle = stack->Particle(iParticle);
3743 TLorentzVector momentum;
3745 //keep only final state particles
3746 if( particle->GetStatusCode() != 1 ) continue ;
3748 //---------- Charged particles ----------------------
3749 Int_t pdg = particle->GetPdgCode();
3750 Int_t charge = (Int_t) TDatabasePDG::Instance()->GetParticle(pdg)->Charge();
3751 if(charge == 0) continue;
3753 particle->Momentum(momentum);
3755 //Particles in CTS acceptance, make sure to use the same selection as in the reader
3756 Bool_t inCTS = GetReader()->GetFiducialCut()->IsInFiducialCut(momentum,"CTS");
3757 //printf("Accepted? %d; pt %2.2f, eta %2.2f, phi %2.2f\n",inCTS,momentum.Pt(),momentum.Eta(),momentum.Phi()*TMath::RadToDeg());
3758 if( !inCTS ) continue;
3760 // Remove conversions
3761 if ( TMath::Abs(pdg) == 11 && stack->Particle(particle->GetFirstMother())->GetPdgCode() == 22 ) continue ;
3763 if ( label == iParticle ) continue; // avoid trigger particle
3765 Float_t phi = particle->Phi();
3766 if(phi < 0) phi+=TMath::TwoPi();
3768 Bool_t lead = FillChargedMCCorrelationHistograms(particle->Pt(),phi,particle->Eta(),ptprim,phiprim,etaprim);
3769 if(!lead) leadTrig = kFALSE;
3770 //if ( !lead && (fMakeAbsoluteLeading || fMakeNearSideLeading) ) return;
3776 else if( GetReader()->ReadAODMCParticles() )
3778 //Get the list of MC particles
3779 mcparticles = GetReader()->GetAODMCParticles();
3780 if( !mcparticles ) return;
3782 nTracks = mcparticles->GetEntriesFast() ;
3784 if( label >= nTracks )
3787 AliInfo(Form(" *** large label ***: label %d, n tracks %d", label,nTracks));
3792 aodprimary = (AliAODMCParticle*) mcparticles->At(label);
3795 AliInfo(Form(" *** no AOD primary ***: label %d", label));
3799 eprim = aodprimary->E();
3800 ptprim = aodprimary->Pt();
3801 etaprim = aodprimary->Eta();
3802 phiprim = aodprimary->Phi();
3803 if(phiprim < 0) phiprim+=TMath::TwoPi();
3805 if(ptprim < 0.01 || eprim < 0.01) return ;
3807 for (iParticle = 0; iParticle < nTracks; iParticle++)
3809 AliAODMCParticle *part = (AliAODMCParticle*) mcparticles->At(iParticle);
3811 if (!part->IsPhysicalPrimary() ) continue; // same as part->GetStatus() !=1
3813 if ( part->Charge() == 0 ) continue;
3815 TLorentzVector momentum(part->Px(),part->Py(),part->Pz(),part->E());
3817 //Particles in CTS acceptance, make sure to use the same selection as in the reader
3818 Bool_t inCTS = GetReader()->GetFiducialCut()->IsInFiducialCut(momentum,"CTS");
3819 //printf("Accepted? %d; pt %2.2f, eta %2.2f, phi %2.2f\n",inCTS,momentum.Pt(),momentum.Eta(),momentum.Phi()*TMath::RadToDeg());
3820 if( !inCTS ) continue;
3822 // Remove conversions
3823 Int_t indexmother = part->GetMother();
3824 if ( indexmother > -1 )
3826 Int_t pdg = part->GetPdgCode();
3827 Int_t mPdg = ((AliAODMCParticle*) mcparticles->At(indexmother)) ->GetPdgCode();
3828 if (TMath::Abs(pdg) == 11 && mPdg == 22) continue;
3831 if ( label == iParticle ) continue; // avoid trigger particle
3833 Float_t phi = part->Phi();
3834 if(phi < 0) phi+=TMath::TwoPi();
3836 Bool_t lead = FillChargedMCCorrelationHistograms(part->Pt(),phi,part->Eta(),ptprim,phiprim,etaprim);
3837 if(!lead) leadTrig = kFALSE;
3838 //if ( !lead && (fMakeAbsoluteLeading || fMakeNearSideLeading)) return;
3840 } //MC particle loop
3843 // Trigger MC particle histograms
3844 //if (!lead && (fMakeAbsoluteLeading || fMakeNearSideLeading)) return;
3846 fhMCPtTrigger ->Fill(ptprim);
3847 fhMCPhiTrigger->Fill(ptprim,phiprim);
3848 fhMCEtaTrigger->Fill(ptprim,etaprim);
3850 if(!leadTrig && (fMakeAbsoluteLeading || fMakeNearSideLeading) )
3853 printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation(): Not leading primary trigger: pT %2.2f, phi %2.2f, eta %2.2f\n",
3854 ptprim,phiprim*TMath::RadToDeg(),etaprim);
3856 fhMCPtTriggerNotLeading ->Fill(ptprim);
3857 fhMCPhiTriggerNotLeading->Fill(ptprim,phiprim);
3858 fhMCEtaTriggerNotLeading->Fill(ptprim,etaprim);
3862 //_____________________________________________________________________
3863 void AliAnaParticleHadronCorrelation::Print(const Option_t * opt) const
3866 //Print some relevant parameters set for the analysis
3870 printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
3871 AliAnaCaloTrackCorrBaseClass::Print(" ");
3872 printf("Pt trigger > %2.2f; < %2.2f\n", GetMinPt() , GetMaxPt()) ;
3873 printf("Pt associa > %2.2f; < %2.2f\n", fMinAssocPt, fMaxAssocPt) ;
3874 printf("Phi trigger particle-Hadron < %3.2f\n", fDeltaPhiMaxCut) ;
3875 printf("Phi trigger particle-Hadron > %3.2f\n", fDeltaPhiMinCut) ;
3876 printf("Phi trigger particle-UeHadron < %3.2f\n", fUeDeltaPhiMaxCut) ;
3877 printf("Phi trigger particle-UeHadron > %3.2f\n", fUeDeltaPhiMinCut) ;
3878 printf("Isolated Trigger? %d\n" , fSelectIsolated) ;
3879 printf("Several UE? %d\n" , fMakeSeveralUE) ;
3880 printf("Name of AOD Pi0 Branch %s \n", fPi0AODBranchName.Data());
3881 printf("Do Decay-hadron correlation ? %d\n", fPi0Trigger) ;
3882 printf("Select absolute leading for cluster triggers ? %d or Near Side %d\n",
3883 fMakeAbsoluteLeading, fMakeNearSideLeading) ;
3884 printf("Trigger pt bins %d\n", fNAssocPtBins) ;
3885 for (Int_t ibin = 0; ibin<fNAssocPtBins; ibin++) {
3886 printf("\t bin %d = [%2.1f,%2.1f]\n", ibin, fAssocPtBinLimit[ibin], fAssocPtBinLimit[ibin+1]) ;
3891 //____________________________________________________________
3892 void AliAnaParticleHadronCorrelation::SetNAssocPtBins(Int_t n)
3894 // Set number of bins
3904 printf("n = larger than 19 or too small, set to 19 \n");
3909 //______________________________________________________________________________
3910 void AliAnaParticleHadronCorrelation::SetAssocPtBinLimit(Int_t ibin, Float_t pt)
3912 // Set the list of limits for the trigger pt bins
3914 if(ibin <= fNAssocPtBins || ibin >= 0)
3916 fAssocPtBinLimit[ibin] = pt ;
3920 printf("AliAnaParticleHadronCorrelation::SetAssocPtBinLimit() - bin number too large %d > %d or small, nothing done\n", ibin, fNAssocPtBins) ;