]>
Commit | Line | Data |
---|---|---|
e09cf5ef | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
e09cf5ef | 15 | |
16 | //_________________________________________________________________________ | |
17 | // Class for the analysis of particle - hadron correlations | |
18 | // Particle (for example direct gamma) must be found in a previous analysis | |
19 | //-- Author: Gustavo Conesa (LNF-INFN) | |
20 | ||
21 | // Modified by Yaxian Mao: | |
22 | // 1. add the UE subtraction for corrlation study | |
23 | // 2. change the correlation variable | |
24 | // 3. Only use leading particle(cluster/track) as trigger for correlation (2010/07/02) | |
25 | // 4. Make decay photon-hadron correlations where decay contribute pi0 mass (2010/09/09) | |
26 | // 5. fill the pout to extract kt at the end, also to study charge asymmetry(2010/10/06) | |
045396c8 | 27 | // 6. Add the possibility for event selection analysis based on vertex and multiplicity bins (10/10/2010) |
28 | // 7. change the way of delta phi cut for UE study due to memory issue (reduce histograms) | |
29 | // 8. Add the possibility to request the absolute leading particle at the near side or not, set trigger bins, general clean-up (08/2011) | |
e09cf5ef | 30 | ////////////////////////////////////////////////////////////////////////////// |
31 | ||
32 | ||
33 | // --- ROOT system --- | |
34 | //#include "TClonesArray.h" | |
907b38cd | 35 | #include <TClass.h> |
36 | #include <TMath.h> | |
37 | #include <TH2F.h> | |
38 | #include <TDatabasePDG.h> | |
e09cf5ef | 39 | |
40 | //---- ANALYSIS system ---- | |
41 | #include "AliNeutralMesonSelection.h" | |
42 | #include "AliAnaParticleHadronCorrelation.h" | |
43 | #include "AliCaloTrackReader.h" | |
e09cf5ef | 44 | #include "AliAODPWG4ParticleCorrelation.h" |
45 | #include "AliFiducialCut.h" | |
46 | #include "AliVTrack.h" | |
47 | #include "AliVCluster.h" | |
48 | #include "AliMCAnalysisUtils.h" | |
49 | #include "TParticle.h" | |
50 | #include "AliStack.h" | |
51 | #include "AliAODMCParticle.h" | |
52 | #include "AliMixedEvent.h" | |
029dea5a | 53 | #include "AliAnalysisManager.h" |
54 | #include "AliInputEventHandler.h" | |
2e876d85 | 55 | #include "AliEventplane.h" |
e09cf5ef | 56 | |
57 | ClassImp(AliAnaParticleHadronCorrelation) | |
58 | ||
59 | ||
05d0d05d | 60 | //___________________________________________________________________ |
e09cf5ef | 61 | AliAnaParticleHadronCorrelation::AliAnaParticleHadronCorrelation(): |
745913ae | 62 | AliAnaCaloTrackCorrBaseClass(), |
66e64043 | 63 | fMinTriggerPt(0.), |
64 | fMaxAssocPt(1000.), fMinAssocPt(0.), | |
05d0d05d | 65 | fDeltaPhiMaxCut(0.), fDeltaPhiMinCut(0.), |
66 | fSelectIsolated(0), fMakeSeveralUE(0), | |
67 | fUeDeltaPhiMaxCut(0.), fUeDeltaPhiMinCut(0.), | |
68 | fPi0AODBranchName(""), fNeutralCorr(0), | |
907b38cd | 69 | fPi0Trigger(0), fDecayTrigger(0), |
3f150b4b | 70 | fMakeAbsoluteLeading(0), fMakeNearSideLeading(0), |
907b38cd | 71 | fLeadingTriggerIndex(-1), fHMPIDCorrelation(0), fFillBradHisto(0), |
05d0d05d | 72 | fNAssocPtBins(0), fAssocPtBinLimit(), |
283f989c | 73 | fListMixEvents(), fUseMixStoredInReader(0), |
05d0d05d | 74 | //Histograms |
75 | fhPtLeading(0), fhPhiLeading(0), | |
76 | fhEtaLeading(0), fhDeltaPhiDeltaEtaCharged(0), | |
77 | fhPhiCharged(0), fhEtaCharged(0), | |
78 | fhDeltaPhiCharged(0), fhDeltaEtaCharged(0), | |
79 | fhDeltaPhiChargedPt(0), fhDeltaPhiUeChargedPt(0), | |
3f150b4b | 80 | fhXECharged(0), fhXEUeCharged(0), |
81 | fhXEPosCharged(0), fhXENegCharged(0), | |
82 | fhPtHbpXECharged(0), fhPtHbpXEUeCharged(0), | |
83 | fhZTCharged(0), fhZTUeCharged(0), | |
84 | fhZTPosCharged(0), fhZTNegCharged(0), | |
85 | fhPtHbpZTCharged(0), fhPtHbpZTUeCharged(0), | |
05d0d05d | 86 | fhDeltaPhiUeLeftCharged(0), fhDeltaPhiUeRightCharged(0), |
3f150b4b | 87 | fhXEUeLeftCharged(0), fhXEUeRightCharged(0), |
88 | fhPtHbpXEUeLeftCharged(0), fhPtHbpXEUeRightCharged(0), | |
89 | fhZTUeLeftCharged(0), fhZTUeRightCharged(0), | |
90 | fhPtHbpZTUeLeftCharged(0), fhPtHbpZTUeRightCharged(0), | |
05d0d05d | 91 | fhPtTrigPout(0), fhPtTrigCharged(0), |
92 | fhTrigDeltaPhiCharged(0x0), fhTrigDeltaEtaCharged(0x0), | |
3f150b4b | 93 | fhTrigXECorr(0x0), fhTrigXEUeCorr(0x0), |
94 | fhTrigZTCorr(0x0), fhTrigZTUeCorr(0x0), | |
907b38cd | 95 | fhAssocPtBkg(0), |
96 | fhDeltaPhiAssocPtBin(0), fhDeltaPhiAssocPtBinHMPID(0), fhDeltaPhiAssocPtBinHMPIDAcc(0), | |
66e64043 | 97 | fhDeltaPhiBradAssocPtBin(0), fhDeltaPhiBrad(0), |
907b38cd | 98 | fhXEAssocPtBin(0), fhZTAssocPtBin(0), |
e09cf5ef | 99 | fhDeltaPhiDeltaEtaNeutral(0), |
05d0d05d | 100 | fhPhiNeutral(0), fhEtaNeutral(0), |
101 | fhDeltaPhiNeutral(0), fhDeltaEtaNeutral(0), | |
102 | fhDeltaPhiNeutralPt(0), fhDeltaPhiUeNeutralPt(0), | |
3f150b4b | 103 | fhXENeutral(0), fhXEUeNeutral(0), |
104 | fhPtHbpXENeutral(0), fhPtHbpXEUeNeutral(0), | |
105 | fhZTNeutral(0), fhZTUeNeutral(0), | |
106 | fhPtHbpZTNeutral(0), fhPtHbpZTUeNeutral(0), | |
05d0d05d | 107 | fhDeltaPhiUeLeftNeutral(0), fhDeltaPhiUeRightNeutral(0), |
3f150b4b | 108 | fhXEUeLeftNeutral(0), fhXEUeRightNeutral(0), |
109 | fhPtHbpXEUeLeftNeutral(0), fhPtHbpXEUeRightNeutral(0), | |
110 | fhZTUeLeftNeutral(0), fhZTUeRightNeutral(0), | |
111 | fhPtHbpZTUeLeftNeutral(0), fhPtHbpZTUeRightNeutral(0), | |
e09cf5ef | 112 | fhPtPi0DecayRatio(0), |
3f150b4b | 113 | fhDeltaPhiDecayCharged(0), fhXEDecayCharged(0), fhZTDecayCharged(0), |
114 | fhDeltaPhiDecayNeutral(0), fhXEDecayNeutral(0), fhZTDecayNeutral(0), | |
907b38cd | 115 | fhDeltaPhiDecayChargedAssocPtBin(0), |
116 | fhXEDecayChargedAssocPtBin(0), fhZTDecayChargedAssocPtBin(0), | |
045396c8 | 117 | fh2phiLeadingParticle(0x0), |
05d0d05d | 118 | fhMCEtaCharged(0), fhMCPhiCharged(0), |
119 | fhMCDeltaEtaCharged(0), fhMCDeltaPhiCharged(0x0), | |
120 | fhMCDeltaPhiDeltaEtaCharged(0), fhMCDeltaPhiChargedPt(0), | |
3f150b4b | 121 | fhMCPtXECharged(0), fhMCPtHbpXECharged(0), |
122 | fhMCPtZTCharged(0), fhMCPtHbpZTCharged(0), | |
029dea5a | 123 | fhMCPtTrigPout(0), fhMCPtAssocDeltaPhi(0), |
124 | //Mixing | |
125 | fhNEventsTrigger(0), | |
126 | fhNtracksAll(0), fhNtracksTrigger(0), | |
2e876d85 | 127 | fhNtracksMB(0), |
029dea5a | 128 | fhMixDeltaPhiCharged(0), fhMixDeltaPhiDeltaEtaCharged(0), |
2e876d85 | 129 | fhMixDeltaPhiChargedAssocPtBin(),fhMixDeltaPhiDeltaEtaChargedAssocPtBin(0), |
130 | fhEventBin(0), fhEventMixBin(0) | |
029dea5a | 131 | { |
e09cf5ef | 132 | //Default Ctor |
029dea5a | 133 | |
e09cf5ef | 134 | //Initialize parameters |
135 | InitParameters(); | |
136 | } | |
137 | ||
029dea5a | 138 | //_________________________________________________________________ |
139 | AliAnaParticleHadronCorrelation::~AliAnaParticleHadronCorrelation() | |
140 | { | |
141 | // Remove event containers | |
142 | ||
2e876d85 | 143 | if(DoOwnMix() && fListMixEvents) |
029dea5a | 144 | { |
145 | for(Int_t iz=0; iz < GetNZvertBin(); iz++) | |
146 | { | |
147 | for(Int_t ic=0; ic < GetNCentrBin(); ic++) | |
148 | { | |
2e876d85 | 149 | for(Int_t irp=0; irp<GetNRPBin(); irp++) |
150 | { | |
151 | Int_t bin = GetEventMixBin(ic, iz, irp); | |
152 | fListMixEvents[bin]->Delete() ; | |
153 | delete fListMixEvents[bin] ; | |
154 | } | |
029dea5a | 155 | } |
156 | } | |
157 | ||
158 | delete[] fListMixEvents; | |
159 | ||
160 | } | |
161 | } | |
162 | ||
907b38cd | 163 | //______________________________________________________________________________________________________________________________________________________ |
164 | void AliAnaParticleHadronCorrelation::FillChargedAngularCorrelationHistograms(const Float_t ptAssoc, const Float_t ptTrig, const Int_t assocBin, | |
165 | const Float_t phiAssoc, const Float_t phiTrig, Float_t & deltaPhi, | |
166 | const Float_t etaAssoc, const Float_t etaTrig, | |
167 | const Bool_t decay, const Float_t hmpidSignal, const Int_t nTracks) | |
168 | { | |
169 | // Fill angular correlation related histograms | |
170 | ||
171 | Float_t deltaEta = etaTrig-etaAssoc; | |
172 | deltaPhi = phiTrig-phiAssoc; | |
173 | Float_t deltaPhiOrg = deltaPhi; | |
174 | ||
175 | if(deltaPhi <= -TMath::PiOver2()) deltaPhi+=TMath::TwoPi(); | |
176 | if(deltaPhi > 3*TMath::PiOver2()) deltaPhi-=TMath::TwoPi(); | |
177 | ||
178 | fhEtaCharged ->Fill(ptAssoc,etaAssoc); | |
179 | fhPhiCharged ->Fill(ptAssoc,phiAssoc); | |
180 | fhDeltaEtaCharged->Fill(ptTrig ,deltaEta); | |
181 | fhDeltaPhiCharged->Fill(ptTrig ,deltaPhi); | |
182 | ||
183 | if(ptAssoc > 2 ) fhDeltaPhiDeltaEtaCharged->Fill(deltaPhi, deltaEta); | |
184 | ||
185 | if(fDecayTrigger && decay) fhDeltaPhiDecayCharged ->Fill(ptTrig , deltaPhi); | |
186 | ||
187 | Double_t dphiBrad = -100; | |
188 | if(fFillBradHisto) | |
189 | { | |
190 | dphiBrad = atan2(sin(deltaPhiOrg), cos(deltaPhiOrg))/TMath::Pi();//-1 to 1 | |
191 | if(TMath::Abs(dphiBrad)>0.325 && TMath::Abs(dphiBrad)<0.475) //Hardcoded values, BAD, FIXME | |
192 | { | |
193 | fhAssocPtBkg->Fill(ptTrig, ptAssoc); | |
194 | } | |
195 | ||
196 | if(dphiBrad<-1./3) dphiBrad += 2; | |
197 | fhDeltaPhiBrad->Fill(ptTrig, dphiBrad); | |
198 | } | |
199 | ||
200 | // Fill histograms in bins of associated particle pT | |
201 | if(assocBin>=0) | |
202 | { | |
203 | fhDeltaPhiAssocPtBin[assocBin]->Fill(ptTrig, deltaPhi); | |
204 | if (fFillBradHisto) fhDeltaPhiBradAssocPtBin [assocBin]->Fill(ptTrig, dphiBrad); | |
205 | if(fDecayTrigger && decay) fhDeltaPhiDecayChargedAssocPtBin[assocBin]->Fill(ptTrig, deltaPhi); | |
206 | ||
207 | if(fHMPIDCorrelation) | |
208 | { | |
209 | if( hmpidSignal > 0 ) | |
210 | { | |
211 | //printf("Track pt %f with HMPID signal %f \n",pt,hmpidSignal); | |
212 | fhDeltaPhiAssocPtBinHMPID[assocBin]->Fill(ptTrig, deltaPhi); | |
213 | } | |
214 | ||
215 | if(phiAssoc > 5*TMath::DegToRad() && phiAssoc < 20*TMath::DegToRad()) | |
216 | { | |
217 | //printf("Track pt %f in HMPID acceptance phi %f \n ",pt,phi*TMath::RadToDeg() ); | |
218 | fhDeltaPhiAssocPtBinHMPIDAcc[assocBin]->Fill(ptTrig, deltaPhi); | |
219 | } | |
220 | } | |
221 | } | |
222 | ||
223 | //fill different multiplicity histogram | |
224 | if(DoEventSelect()) | |
225 | { | |
226 | for(Int_t im = 0; im<GetMultiBin(); im++) | |
227 | { | |
228 | if(nTracks < ( GetMaxMulti() - GetMinMulti() )/GetMultiBin()*(im+1)) | |
229 | { | |
230 | fhTrigDeltaPhiCharged[im]->Fill(ptTrig,deltaPhi); | |
231 | fhTrigDeltaEtaCharged[im]->Fill(ptTrig,deltaEta); | |
232 | } | |
233 | } | |
234 | } | |
235 | } | |
236 | ||
237 | //____________________________________________________________________________________________________________________________________________________ | |
238 | Bool_t AliAnaParticleHadronCorrelation::FillChargedMCCorrelationHistograms(const Float_t mcAssocPt, Float_t mcAssocPhi, const Float_t mcAssocEta, | |
239 | const Float_t mcTrigPt, const Float_t mcTrigPhi, const Float_t mcTrigEta) | |
240 | { | |
241 | // Fill MC histograms independently of AOD or ESD | |
242 | ||
243 | //Select only hadrons in pt range | |
244 | if(mcAssocPt < fMinAssocPt || mcAssocPt > fMaxAssocPt) return kTRUE ; // exclude but continue | |
245 | ||
246 | if(mcAssocPhi < 0) mcAssocPhi+=TMath::TwoPi(); | |
247 | ||
248 | //remove trigger itself for correlation when use charged triggers | |
249 | if(TMath::Abs(mcAssocPt -mcTrigPt ) < 1e-6 && | |
250 | TMath::Abs(mcAssocPhi-mcTrigPhi) < 1e-6 && | |
251 | TMath::Abs(mcAssocEta-mcTrigEta) < 1e-6) return kTRUE ; // exclude but continue | |
252 | ||
253 | // Absolute leading? | |
254 | if( fMakeAbsoluteLeading && mcAssocPt > mcTrigPt ) return kFALSE; // jump event | |
255 | ||
256 | //jump out this event if near side associated partile pt larger than trigger | |
257 | if( fMakeNearSideLeading && mcAssocPt > mcTrigPt && | |
258 | TMath::Abs(mcAssocPhi-mcTrigPhi)<TMath::PiOver2() ) return kFALSE; // jump event | |
259 | ||
260 | Float_t mcdeltaPhi= mcTrigPhi-mcAssocPhi; | |
261 | if(mcdeltaPhi <= -TMath::PiOver2()) mcdeltaPhi+=TMath::TwoPi(); | |
262 | if(mcdeltaPhi > 3*TMath::PiOver2()) mcdeltaPhi-=TMath::TwoPi(); | |
263 | ||
264 | Float_t mcxE =-mcAssocPt/mcTrigPt*TMath::Cos(mcdeltaPhi);// -(mcAssocPx*pxprim+mcAssocPy*pyprim)/(mcTrigPt*mcTrigPt); | |
265 | Float_t mchbpXE =-100 ; | |
2e876d85 | 266 | if(mcxE > 0 ) mchbpXE = TMath::Log10(1./mcxE); |
907b38cd | 267 | |
268 | Float_t mczT = mcAssocPt/mcTrigPt ; | |
269 | Float_t mchbpZT =-100 ; | |
2e876d85 | 270 | if(mczT > 0 ) mchbpZT = TMath::Log10(1./mczT); |
907b38cd | 271 | |
272 | //Selection within angular range | |
273 | if( mcdeltaPhi< -TMath::PiOver2()) mcdeltaPhi+=TMath::TwoPi(); | |
274 | if( mcdeltaPhi>3*TMath::PiOver2()) mcdeltaPhi-=TMath::TwoPi(); | |
275 | ||
276 | Double_t mcpout = mcAssocPt*TMath::Sin(mcdeltaPhi) ; | |
277 | ||
278 | if(GetDebug() > 0 ) | |
279 | printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation() - Charged hadron: track Pt %f, track Phi %f, phi trigger %f. Cuts: delta phi %2.2f < %2.2f < %2.2f, pT min %2.2f \n", | |
280 | mcAssocPt,mcAssocPhi, mcTrigPhi,fDeltaPhiMinCut, mcdeltaPhi, fDeltaPhiMaxCut, GetMinPt()); | |
281 | ||
282 | // Fill Histograms | |
283 | fhMCEtaCharged ->Fill(mcAssocPt, mcAssocEta); | |
284 | fhMCPhiCharged ->Fill(mcAssocPt, mcAssocPhi); | |
285 | fhMCDeltaEtaCharged->Fill(mcTrigPt, mcTrigEta-mcAssocEta); | |
286 | fhMCDeltaPhiCharged->Fill(mcTrigPt, mcdeltaPhi); | |
287 | fhMCPtAssocDeltaPhi->Fill(mcAssocPt, mcdeltaPhi); | |
288 | ||
289 | fhMCDeltaPhiDeltaEtaCharged->Fill(mcdeltaPhi,mcTrigEta-mcAssocEta); | |
290 | ||
291 | //delta phi cut for correlation | |
292 | if( (mcdeltaPhi > fDeltaPhiMinCut) && (mcdeltaPhi < fDeltaPhiMaxCut) ) | |
293 | { | |
294 | fhMCDeltaPhiChargedPt->Fill(mcAssocPt,mcdeltaPhi); | |
295 | fhMCPtXECharged ->Fill(mcTrigPt,mcxE); | |
296 | fhMCPtHbpXECharged ->Fill(mcTrigPt,mchbpXE); | |
297 | fhMCPtZTCharged ->Fill(mcTrigPt,mczT); | |
298 | fhMCPtHbpZTCharged ->Fill(mcTrigPt,mchbpZT); | |
299 | fhMCPtTrigPout ->Fill(mcTrigPt, mcpout) ; | |
300 | } | |
301 | ||
302 | return kTRUE; | |
303 | } | |
304 | ||
305 | //___________________________________________________________________________________________________________________ | |
306 | void AliAnaParticleHadronCorrelation::FillChargedMomentumImbalanceHistograms(const Float_t ptTrig, const Float_t ptAssoc, | |
307 | const Float_t xE, const Float_t hbpXE, | |
308 | const Float_t zT, const Float_t hbpZT, | |
309 | const Float_t pout, const Float_t deltaPhi, | |
310 | const Int_t nTracks, const Int_t charge, | |
311 | const Int_t assocBin, const Bool_t decay ) | |
312 | ||
313 | { | |
314 | // Fill mostly momentum imbalance related histograms | |
315 | ||
316 | fhDeltaPhiChargedPt ->Fill(ptAssoc, deltaPhi); | |
317 | fhXECharged ->Fill(ptTrig , xE); | |
318 | fhPtHbpXECharged ->Fill(ptTrig , hbpXE); | |
319 | fhZTCharged ->Fill(ptTrig , zT); | |
320 | fhPtHbpZTCharged ->Fill(ptTrig , hbpZT); | |
321 | fhPtTrigPout ->Fill(ptTrig , pout) ; | |
322 | fhPtTrigCharged ->Fill(ptTrig , ptAssoc) ; | |
323 | ||
324 | if(fDecayTrigger && decay) | |
325 | { | |
326 | fhXEDecayCharged->Fill(ptTrig,xE); | |
327 | fhZTDecayCharged->Fill(ptTrig,zT); | |
328 | } // photon decay pi0/eta trigger | |
329 | ||
330 | if(assocBin >= 0 )//away side | |
331 | { | |
332 | fhXEAssocPtBin[assocBin]->Fill(ptTrig, xE) ; | |
333 | fhZTAssocPtBin[assocBin]->Fill(ptTrig, zT) ; | |
334 | ||
335 | if(fDecayTrigger && decay) | |
336 | { | |
337 | fhXEDecayChargedAssocPtBin[assocBin]->Fill(ptTrig, xE); | |
338 | fhZTDecayChargedAssocPtBin[assocBin]->Fill(ptTrig, zT); | |
339 | } | |
340 | } | |
341 | ||
342 | if(charge > 0) | |
343 | { | |
344 | fhXEPosCharged->Fill(ptTrig,xE) ; | |
345 | fhZTPosCharged->Fill(ptTrig,zT) ; | |
346 | } | |
347 | else | |
348 | { | |
349 | fhXENegCharged->Fill(ptTrig,xE) ; | |
350 | fhZTNegCharged->Fill(ptTrig,zT) ; | |
351 | } | |
352 | ||
353 | //fill different multiplicity histogram | |
354 | if(DoEventSelect()) | |
355 | { | |
356 | for(Int_t im=0; im<GetMultiBin(); im++) | |
357 | { | |
358 | if(nTracks < ( GetMaxMulti() - GetMinMulti() )/GetMultiBin()*(im+1)) | |
359 | { | |
360 | fhTrigXECorr[im]->Fill(ptTrig,xE); | |
361 | fhTrigZTCorr[im]->Fill(ptTrig,zT); | |
362 | } | |
363 | } | |
364 | } //multiplicity events selection | |
365 | } | |
366 | ||
367 | //_______________________________________________________________________________________________________________________ | |
368 | void AliAnaParticleHadronCorrelation::FillChargedUnderlyingEventHistograms(const Float_t ptTrig, const Float_t ptAssoc, | |
369 | const Float_t deltaPhi, const Int_t nTracks) | |
370 | { | |
371 | // Fill underlying event histograms | |
372 | ||
373 | fhDeltaPhiUeChargedPt->Fill(ptAssoc,deltaPhi); | |
374 | ||
375 | Double_t randomphi = gRandom->Uniform(TMath::Pi()/2,3*TMath::Pi()/2); | |
376 | Double_t uexE = -(ptAssoc/ptTrig)*TMath::Cos(randomphi); | |
377 | Double_t uezT = ptAssoc/ptTrig; | |
378 | ||
379 | if(uexE < 0.) uexE = -uexE; | |
380 | ||
381 | fhXEUeCharged->Fill(ptTrig,uexE); | |
2e876d85 | 382 | if(uexE > 0) fhPtHbpXEUeCharged->Fill(ptTrig,TMath::Log10(1/uexE)); |
907b38cd | 383 | |
384 | fhZTUeCharged->Fill(ptTrig,uezT); | |
2e876d85 | 385 | if(uexE > 0) fhPtHbpZTUeCharged->Fill(ptTrig,TMath::Log10(1/uezT)); |
907b38cd | 386 | |
387 | if(DoEventSelect()) | |
388 | { | |
389 | for(Int_t im=0; im<GetMultiBin(); im++) | |
390 | { | |
391 | if(nTracks < ( GetMaxMulti() - GetMinMulti() )/GetMultiBin()*(im+1)) | |
392 | { | |
393 | fhTrigXEUeCorr[im]->Fill(ptTrig,uexE); // xE? CHECK | |
394 | fhTrigZTUeCorr[im]->Fill(ptTrig,uezT); // zT? CHECK | |
395 | } | |
396 | } | |
397 | } //multiplicity events selection | |
398 | } | |
399 | ||
400 | //___________________________________________________________________________________________________________________________ | |
401 | void AliAnaParticleHadronCorrelation::FillChargedUnderlyingEventSidesHistograms(const Float_t ptTrig, const Float_t ptAssoc, | |
402 | const Float_t xE, const Float_t hbpXE, | |
403 | const Float_t zT, const Float_t hbpZT, | |
404 | const Float_t deltaPhi) | |
405 | { | |
406 | // Fill underlying event histograms to the left and right of trigger | |
407 | ||
408 | if((deltaPhi<-fUeDeltaPhiMinCut) && (deltaPhi >-fUeDeltaPhiMaxCut)) | |
409 | { | |
410 | fhDeltaPhiUeLeftCharged->Fill(ptAssoc, deltaPhi); | |
411 | fhXEUeLeftCharged ->Fill(ptTrig , xE); | |
412 | fhPtHbpXEUeLeftCharged ->Fill(ptTrig , hbpXE); | |
413 | fhZTUeLeftCharged ->Fill(ptTrig , zT); | |
414 | fhPtHbpZTUeLeftCharged ->Fill(ptTrig , hbpZT); | |
415 | } | |
416 | ||
417 | if((deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < fUeDeltaPhiMaxCut)) | |
418 | { | |
419 | fhDeltaPhiUeRightCharged->Fill(ptAssoc, deltaPhi); | |
420 | fhXEUeRightCharged ->Fill(ptTrig , xE); | |
421 | fhPtHbpXEUeRightCharged ->Fill(ptTrig , hbpXE); | |
422 | fhZTUeRightCharged ->Fill(ptTrig , zT); | |
423 | fhPtHbpZTUeRightCharged ->Fill(ptTrig , hbpZT); | |
424 | } | |
425 | } | |
426 | ||
427 | //______________________________________________________________________________________________________________________________ | |
428 | void AliAnaParticleHadronCorrelation::FillDecayPhotonCorrelationHistograms(const Float_t ptAssoc, const Float_t phiAssoc, | |
429 | const TLorentzVector mom1, const TLorentzVector mom2, | |
430 | const Bool_t bChargedOrNeutral) | |
431 | { | |
432 | // Do correlation with decay photons of triggered pi0 or eta | |
433 | ||
434 | // Calculate the correlation parameters | |
435 | Float_t ptDecay1 = mom1.Pt(); | |
436 | Float_t ptDecay2 = mom2.Pt(); | |
437 | ||
438 | Float_t zTDecay1 = -100, zTDecay2 = -100; | |
439 | if(ptDecay1) zTDecay1 = ptAssoc/ptDecay1 ; | |
440 | if(ptDecay2) zTDecay2 = ptAssoc/ptDecay2 ; | |
441 | ||
442 | Float_t deltaPhiDecay1 = mom1.Phi()-phiAssoc; | |
443 | if(deltaPhiDecay1< -TMath::PiOver2()) deltaPhiDecay1+=TMath::TwoPi(); | |
444 | if(deltaPhiDecay1>3*TMath::PiOver2()) deltaPhiDecay1-=TMath::TwoPi(); | |
445 | ||
446 | Float_t deltaPhiDecay2 = mom2.Phi()-phiAssoc; | |
447 | if(deltaPhiDecay2< -TMath::PiOver2()) deltaPhiDecay2+=TMath::TwoPi(); | |
448 | if(deltaPhiDecay2>3*TMath::PiOver2()) deltaPhiDecay2-=TMath::TwoPi(); | |
449 | ||
450 | Float_t xEDecay1 =-zTDecay1*TMath::Cos(deltaPhiDecay1); // -(px*pxTrig+py*pyTrig)/(ptTrig*ptTrig); | |
451 | Float_t xEDecay2 =-zTDecay2*TMath::Cos(deltaPhiDecay2); // -(px*pxTrig+py*pyTrig)/(ptTrig*ptTrig); | |
452 | ||
453 | if(bChargedOrNeutral) // correlate with charges | |
454 | { | |
455 | fhDeltaPhiDecayCharged->Fill(ptDecay1, deltaPhiDecay1); | |
456 | fhDeltaPhiDecayCharged->Fill(ptDecay2, deltaPhiDecay2); | |
457 | ||
2e876d85 | 458 | if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::FillDecayPhotonHistograms( Charged corr) - deltaPhoton1 = %f, deltaPhoton2 = %f \n", deltaPhiDecay1, deltaPhiDecay2); |
907b38cd | 459 | |
460 | if( (deltaPhiDecay1 > fDeltaPhiMinCut) && ( deltaPhiDecay1 < fDeltaPhiMaxCut) ) | |
461 | { | |
462 | fhZTDecayCharged->Fill(ptDecay1,zTDecay1); | |
463 | fhXEDecayCharged->Fill(ptDecay1,xEDecay1); | |
464 | } | |
465 | if( (deltaPhiDecay2 > fDeltaPhiMinCut) && ( deltaPhiDecay2 < fDeltaPhiMaxCut) ) | |
466 | { | |
467 | fhZTDecayCharged->Fill(ptDecay2,zTDecay2); | |
468 | fhXEDecayCharged->Fill(ptDecay2,xEDecay2); | |
469 | } | |
470 | } | |
471 | else // correlate with neutrals | |
472 | { | |
473 | fhDeltaPhiDecayCharged->Fill(ptDecay1, deltaPhiDecay1); | |
474 | fhDeltaPhiDecayCharged->Fill(ptDecay2, deltaPhiDecay2); | |
475 | ||
2e876d85 | 476 | if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::FillDecayPhotonHistograms(Neutral corr) - deltaPhoton1 = %f, deltaPhoton2 = %f \n", deltaPhiDecay1, deltaPhiDecay2); |
907b38cd | 477 | |
478 | if( (deltaPhiDecay1 > fDeltaPhiMinCut) && ( deltaPhiDecay1 < fDeltaPhiMaxCut) ) | |
479 | { | |
480 | fhZTDecayCharged->Fill(ptDecay1,zTDecay1); | |
481 | fhXEDecayCharged->Fill(ptDecay1,xEDecay1); | |
482 | } | |
483 | if( (deltaPhiDecay2 > fDeltaPhiMinCut) && ( deltaPhiDecay2 < fDeltaPhiMaxCut) ) | |
484 | { | |
485 | fhZTDecayCharged->Fill(ptDecay2,zTDecay2); | |
486 | fhXEDecayCharged->Fill(ptDecay2,xEDecay2); | |
487 | } | |
488 | } | |
489 | } | |
490 | ||
491 | //______________________________________________________________________________________________________________________________________________________ | |
492 | void AliAnaParticleHadronCorrelation::FillNeutralAngularCorrelationHistograms(const Float_t ptAssoc, const Float_t ptTrig, | |
493 | const Float_t phiAssoc, const Float_t phiTrig, Float_t & deltaPhi, | |
494 | const Float_t etaAssoc, const Float_t etaTrig) | |
495 | { | |
496 | // Fill angular correlation related histograms | |
497 | ||
498 | Float_t deltaEta = etaTrig-etaAssoc; | |
499 | deltaPhi = phiTrig-phiAssoc; | |
500 | ||
501 | if(deltaPhi <= -TMath::PiOver2()) deltaPhi+=TMath::TwoPi(); | |
502 | if(deltaPhi > 3*TMath::PiOver2()) deltaPhi-=TMath::TwoPi(); | |
503 | ||
504 | fhEtaNeutral ->Fill(ptAssoc,etaAssoc); | |
505 | fhPhiNeutral ->Fill(ptAssoc,phiAssoc); | |
506 | fhDeltaEtaNeutral->Fill(ptTrig ,deltaEta); | |
507 | fhDeltaPhiNeutral->Fill(ptTrig ,deltaPhi); | |
508 | ||
509 | if(ptAssoc > 2 ) fhDeltaPhiDeltaEtaNeutral->Fill(deltaPhi, deltaEta); | |
510 | ||
511 | } | |
512 | ||
513 | //_____________________________________________________________________________________________________________________________ | |
514 | void AliAnaParticleHadronCorrelation::FillNeutralUnderlyingEventSidesHistograms(const Float_t ptTrig, const Float_t ptAssoc, | |
515 | const Float_t xE, const Float_t hbpXE, | |
516 | const Float_t zT, const Float_t hbpZT, | |
517 | const Float_t deltaPhi) | |
518 | { | |
519 | // Fill underlying event histograms to the left and right of trigger | |
520 | ||
521 | if((deltaPhi<-fUeDeltaPhiMinCut) && (deltaPhi >-fUeDeltaPhiMaxCut)) | |
522 | { | |
523 | fhDeltaPhiUeLeftNeutral->Fill(ptAssoc, deltaPhi); | |
524 | fhXEUeLeftNeutral ->Fill(ptTrig , xE); | |
525 | fhPtHbpXEUeLeftNeutral ->Fill(ptTrig , hbpXE); | |
526 | fhZTUeLeftNeutral ->Fill(ptTrig , zT); | |
527 | fhPtHbpZTUeLeftNeutral ->Fill(ptTrig , hbpZT); | |
528 | } | |
529 | ||
530 | if((deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < fUeDeltaPhiMaxCut)) | |
531 | { | |
532 | fhDeltaPhiUeRightNeutral->Fill(ptAssoc, deltaPhi); | |
533 | fhXEUeRightNeutral ->Fill(ptTrig , xE); | |
534 | fhPtHbpXEUeRightNeutral ->Fill(ptTrig , hbpXE); | |
535 | fhZTUeRightNeutral ->Fill(ptTrig , zT); | |
536 | fhPtHbpZTUeRightNeutral ->Fill(ptTrig , hbpZT); | |
537 | } | |
538 | } | |
539 | ||
029dea5a | 540 | //_____________________________________________________________ |
541 | void AliAnaParticleHadronCorrelation::FillChargedEventMixPool() | |
542 | { | |
543 | // Mixed event init | |
544 | ||
2e876d85 | 545 | //printf("FillChargedEventMixPool for %s\n",GetInputAODName().Data()); |
283f989c | 546 | |
029dea5a | 547 | Int_t nTracks = GetCTSTracks()->GetEntriesFast(); |
548 | ||
549 | fhNtracksAll->Fill(nTracks); | |
550 | ||
551 | AliAnalysisManager * manager = AliAnalysisManager::GetAnalysisManager(); | |
552 | AliInputEventHandler * inputHandler = dynamic_cast<AliInputEventHandler*>(manager->GetInputEventHandler()); | |
553 | ||
c6b4facc | 554 | if(!inputHandler) return ; |
555 | ||
029dea5a | 556 | if(inputHandler->IsEventSelected( ) & GetReader()->GetEventTriggerMask()) |
557 | { | |
558 | fhNtracksTrigger->Fill(nTracks); | |
559 | } | |
560 | ||
2e876d85 | 561 | if(inputHandler->IsEventSelected( ) & AliVEvent::kMB) |
029dea5a | 562 | { |
563 | ||
2e876d85 | 564 | fhNtracksMB->Fill(nTracks); |
283f989c | 565 | |
566 | if(fUseMixStoredInReader && GetReader()->GetLastTracksMixedEvent() == GetEventNumber()) | |
567 | { | |
568 | //printf("%s : Pool already filled for this event !!!\n",GetInputAODName().Data()); | |
569 | return ; // pool filled previously for another trigger | |
570 | } | |
2e876d85 | 571 | Int_t eventBin = GetEventMixBin(); |
2e876d85 | 572 | |
573 | //Check that the bin exists, if not (bad determination of RP, centrality or vz bin) do nothing | |
574 | if(eventBin < 0) return; | |
029dea5a | 575 | |
283f989c | 576 | TObjArray * mixEventTracks = new TObjArray; |
577 | ||
578 | if(fUseMixStoredInReader) | |
579 | { | |
580 | fListMixEvents[eventBin] = GetReader()->GetListWithMixedEventsForTracks(eventBin); | |
581 | } | |
582 | ||
2e876d85 | 583 | if(!fListMixEvents[eventBin]) fListMixEvents[eventBin] = new TList(); |
029dea5a | 584 | |
283f989c | 585 | //printf("%s ***** Pool Event bin : %d - nTracks %d\n",GetInputAODName().Data(),eventBin, GetCTSTracks()->GetEntriesFast()); |
586 | ||
2e876d85 | 587 | TList * pool = fListMixEvents[eventBin]; |
029dea5a | 588 | |
589 | TVector3 p3; | |
590 | for(Int_t ipr = 0;ipr < GetCTSTracks()->GetEntriesFast() ; ipr ++ ) | |
591 | { | |
592 | AliVTrack * track = (AliVTrack *) (GetCTSTracks()->At(ipr)) ; | |
593 | ||
594 | Double_t mom[3] = {track->Px(),track->Py(),track->Pz()}; | |
595 | p3.SetXYZ(mom[0],mom[1],mom[2]); | |
596 | Float_t pt = p3.Pt(); | |
597 | ||
598 | //Select only hadrons in pt range | |
599 | if(pt < fMinAssocPt || pt > fMaxAssocPt) continue ; | |
600 | ||
601 | AliAODPWG4Particle * mixedTrack = new AliAODPWG4Particle(mom[0],mom[1],mom[2],0); | |
602 | mixedTrack->SetDetector("CTS"); | |
603 | mixedTrack->SetChargedBit(track->Charge()>0); | |
604 | ||
605 | mixEventTracks->Add(mixedTrack); | |
606 | } | |
607 | ||
283f989c | 608 | //Set the event number where the last event was added, to avoid double pool filling |
609 | GetReader()->SetLastTracksMixedEvent(GetEventNumber()); | |
610 | ||
029dea5a | 611 | pool->AddFirst(mixEventTracks); |
612 | mixEventTracks = 0; | |
2e876d85 | 613 | //printf("Pool size %d, max %d\n",pool->GetSize(), GetNMaxEvMix()); |
614 | ||
615 | if(pool->GetSize() > GetNMaxEvMix()) | |
029dea5a | 616 | {//Remove last event |
617 | TClonesArray * tmp = static_cast<TClonesArray*>(pool->Last()) ; | |
618 | pool->RemoveLast() ; | |
619 | delete tmp ; | |
620 | } | |
283f989c | 621 | |
029dea5a | 622 | } // MB event |
623 | ||
624 | } | |
625 | ||
05d0d05d | 626 | //____________________________________________________________ |
627 | TObjString* AliAnaParticleHadronCorrelation::GetAnalysisCuts() | |
628 | { | |
629 | //Save parameters used for analysis | |
630 | TString parList ; //this will be list of parameters used for this analysis. | |
631 | const Int_t buffersize = 560; | |
632 | char onePar[buffersize] ; | |
633 | ||
634 | snprintf(onePar,buffersize,"--- AliAnaPaticleHadronCorrelation ---\n") ; | |
635 | parList+=onePar ; | |
66e64043 | 636 | snprintf(onePar,buffersize," Pt Trigger > %3.2f ", fMinTriggerPt) ; |
05d0d05d | 637 | parList+=onePar ; |
66e64043 | 638 | snprintf(onePar,buffersize," %3.2f < Pt associated < %3.2f ", fMinAssocPt, fMaxAssocPt) ; |
05d0d05d | 639 | parList+=onePar ; |
66e64043 | 640 | snprintf(onePar,buffersize," %3.2f < Phi trigger particle-Hadron < %3.2f ", fDeltaPhiMinCut, fDeltaPhiMaxCut) ; |
05d0d05d | 641 | parList+=onePar ; |
66e64043 | 642 | snprintf(onePar,buffersize," %3.2f < Phi trigger particle-UeHadron < %3.2f ", fUeDeltaPhiMinCut, fUeDeltaPhiMaxCut) ; |
05d0d05d | 643 | parList+=onePar ; |
66e64043 | 644 | snprintf(onePar,buffersize,"Isolated Trigger? %d\n", fSelectIsolated) ; |
05d0d05d | 645 | parList+=onePar ; |
66e64043 | 646 | snprintf(onePar,buffersize,"Several UE? %d\n", fMakeSeveralUE) ; |
05d0d05d | 647 | parList+=onePar ; |
66e64043 | 648 | snprintf(onePar,buffersize,"Name of AOD Pi0 Branch %s ", fPi0AODBranchName.Data()); |
05d0d05d | 649 | parList+=onePar ; |
907b38cd | 650 | snprintf(onePar,buffersize,"Do Decay-hadron correlation ? pi0 %d, decay %d", fPi0Trigger, fDecayTrigger) ; |
05d0d05d | 651 | parList+=onePar ; |
3f150b4b | 652 | snprintf(onePar,buffersize,"Select absolute leading for cluster triggers ? %d or Near Side Leading %d \n", |
653 | fMakeAbsoluteLeading, fMakeNearSideLeading) ; | |
05d0d05d | 654 | parList+=onePar ; |
655 | snprintf(onePar,buffersize,"Associated particle pt bins %d: ", fNAssocPtBins) ; | |
656 | parList+=onePar ; | |
657 | for (Int_t ibin = 0; ibin<fNAssocPtBins; ibin++) { | |
658 | snprintf(onePar,buffersize,"bin %d = [%2.1f,%2.1f];", ibin, fAssocPtBinLimit[ibin], fAssocPtBinLimit[ibin+1]) ; | |
659 | } | |
660 | parList+=onePar ; | |
661 | ||
662 | //Get parameters set in base class. | |
663 | parList += GetBaseParametersList() ; | |
664 | ||
05d0d05d | 665 | //Get parameters set in FiducialCut class (not available yet) |
666 | //parlist += GetFidCut()->GetFidCutParametersList() | |
667 | ||
668 | return new TObjString(parList) ; | |
669 | ||
670 | } | |
671 | ||
672 | //________________________________________________________________ | |
e09cf5ef | 673 | TList * AliAnaParticleHadronCorrelation::GetCreateOutputObjects() |
674 | { | |
675 | ||
676 | // Create histograms to be saved in output file and | |
677 | // store them in fOutputContainer | |
029dea5a | 678 | |
e09cf5ef | 679 | TList * outputContainer = new TList() ; |
680 | outputContainer->SetName("CorrelationHistos") ; | |
681 | ||
62f2fe4d | 682 | 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(); |
683 | 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(); | |
684 | 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(); | |
e09cf5ef | 685 | |
e09cf5ef | 686 | fhPtLeading = new TH1F ("hPtLeading","p_T distribution of leading particles", nptbins,ptmin,ptmax); |
687 | fhPtLeading->SetXTitle("p_{T}^{trig} (GeV/c)"); | |
688 | ||
689 | fhPhiLeading = new TH2F ("hPhiLeading","#phi distribution of leading Particles",nptbins,ptmin,ptmax, nphibins,phimin,phimax); | |
690 | fhPhiLeading->SetYTitle("#phi (rad)"); | |
691 | ||
692 | fhEtaLeading = new TH2F ("hEtaLeading","#eta distribution of leading",nptbins,ptmin,ptmax, netabins,etamin,etamax); | |
693 | fhEtaLeading->SetYTitle("#eta "); | |
045396c8 | 694 | |
e09cf5ef | 695 | outputContainer->Add(fhPtLeading); |
696 | outputContainer->Add(fhPhiLeading); | |
697 | outputContainer->Add(fhEtaLeading); | |
698 | ||
699 | //Correlation with charged hadrons | |
547c2f01 | 700 | if(GetReader()->IsCTSSwitchedOn()) |
701 | { | |
e09cf5ef | 702 | fhDeltaPhiDeltaEtaCharged = new TH2F |
62f2fe4d | 703 | ("hDeltaPhiDeltaEtaCharged","#eta_{trigger} - #eta_{h^{#pm}} vs #phi_{trigger} - #phi_{h^{#pm}}", |
704 | ndeltaphibins ,deltaphimin,deltaphimax,ndeltaetabins,deltaetamin,deltaetamax); | |
e09cf5ef | 705 | fhDeltaPhiDeltaEtaCharged->SetXTitle("#Delta #phi"); |
706 | fhDeltaPhiDeltaEtaCharged->SetYTitle("#Delta #eta"); | |
707 | ||
708 | fhPhiCharged = new TH2F | |
babcbc9d | 709 | ("hPhiCharged","#phi_{h^{#pm}} vs p_{T #pm}", |
e09cf5ef | 710 | nptbins,ptmin,ptmax,nphibins,phimin,phimax); |
711 | fhPhiCharged->SetYTitle("#phi_{h^{#pm}} (rad)"); | |
712 | fhPhiCharged->SetXTitle("p_{T #pm} (GeV/c)"); | |
713 | ||
714 | fhEtaCharged = new TH2F | |
babcbc9d | 715 | ("hEtaCharged","#eta_{h^{#pm}} vs p_{T #pm}", |
e09cf5ef | 716 | nptbins,ptmin,ptmax,netabins,etamin,etamax); |
717 | fhEtaCharged->SetYTitle("#eta_{h^{#pm}} (rad)"); | |
718 | fhEtaCharged->SetXTitle("p_{T #pm} (GeV/c)"); | |
719 | ||
720 | fhDeltaPhiCharged = new TH2F | |
babcbc9d | 721 | ("hDeltaPhiCharged","#phi_{trigger} - #phi_{h^{#pm}} vs p_{T trigger}", |
62f2fe4d | 722 | nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax); |
e09cf5ef | 723 | fhDeltaPhiCharged->SetYTitle("#Delta #phi"); |
724 | fhDeltaPhiCharged->SetXTitle("p_{T trigger} (GeV/c)"); | |
725 | ||
726 | fhDeltaPhiChargedPt = new TH2F | |
babcbc9d | 727 | ("hDeltaPhiChargedPt","#phi_{trigger} - #phi_{#h^{#pm}} vs p_{T h^{#pm}}", |
62f2fe4d | 728 | nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax); |
e09cf5ef | 729 | fhDeltaPhiChargedPt->SetYTitle("#Delta #phi"); |
730 | fhDeltaPhiChargedPt->SetXTitle("p_{T h^{#pm}} (GeV/c)"); | |
731 | ||
732 | fhDeltaPhiUeChargedPt = new TH2F | |
babcbc9d | 733 | ("hDeltaPhiUeChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs p_{T Ueh^{#pm}}", |
62f2fe4d | 734 | nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax); |
e09cf5ef | 735 | fhDeltaPhiUeChargedPt->SetYTitle("#Delta #phi"); |
736 | fhDeltaPhiUeChargedPt->SetXTitle("p_{T h^{#pm}} (GeV/c)"); | |
737 | ||
738 | fhDeltaEtaCharged = new TH2F | |
babcbc9d | 739 | ("hDeltaEtaCharged","#eta_{trigger} - #eta_{h^{#pm}} vs p_{T trigger}", |
62f2fe4d | 740 | nptbins,ptmin,ptmax,ndeltaetabins,deltaetamin,deltaetamax); |
e09cf5ef | 741 | fhDeltaEtaCharged->SetYTitle("#Delta #eta"); |
742 | fhDeltaEtaCharged->SetXTitle("p_{T trigger} (GeV/c)"); | |
743 | ||
3f150b4b | 744 | fhXECharged = |
745 | new TH2F("hXECharged","x_{E} for charged tracks", | |
e09cf5ef | 746 | nptbins,ptmin,ptmax,200,0.,2.); |
3f150b4b | 747 | fhXECharged->SetYTitle("x_{E}"); |
748 | fhXECharged->SetXTitle("p_{T trigger}"); | |
e09cf5ef | 749 | |
3f150b4b | 750 | fhXEUeCharged = |
751 | new TH2F("hXEUeCharged","x_{E} for Underlying Event", | |
e09cf5ef | 752 | nptbins,ptmin,ptmax,200,0.,2.); |
3f150b4b | 753 | fhXEUeCharged->SetYTitle("x_{E}"); |
754 | fhXEUeCharged->SetXTitle("p_{T trigger}"); | |
e09cf5ef | 755 | |
3f150b4b | 756 | fhXEPosCharged = |
757 | new TH2F("hXEPositiveCharged","x_{E} for positive charged tracks", | |
e09cf5ef | 758 | nptbins,ptmin,ptmax,200,0.,2.); |
3f150b4b | 759 | fhXEPosCharged->SetYTitle("x_{E}"); |
760 | fhXEPosCharged->SetXTitle("p_{T trigger}"); | |
e09cf5ef | 761 | |
3f150b4b | 762 | fhXENegCharged = |
763 | new TH2F("hXENegativeCharged","x_{E} for negative charged tracks", | |
e09cf5ef | 764 | nptbins,ptmin,ptmax,200,0.,2.); |
3f150b4b | 765 | fhXENegCharged->SetYTitle("x_{E}"); |
766 | fhXENegCharged->SetXTitle("p_{T trigger}"); | |
e09cf5ef | 767 | |
3f150b4b | 768 | fhPtHbpXECharged = |
769 | new TH2F("hHbpXECharged","#xi = ln(1/x_{E}) with charged hadrons", | |
e09cf5ef | 770 | nptbins,ptmin,ptmax,200,0.,10.); |
3f150b4b | 771 | fhPtHbpXECharged->SetYTitle("ln(1/x_{E})"); |
772 | fhPtHbpXECharged->SetXTitle("p_{T trigger}"); | |
e09cf5ef | 773 | |
3f150b4b | 774 | fhPtHbpXEUeCharged = |
775 | new TH2F("hHbpXEUeCharged","#xi = ln(1/x_{E}) with charged hadrons,Underlying Event", | |
e09cf5ef | 776 | nptbins,ptmin,ptmax,200,0.,10.); |
3f150b4b | 777 | fhPtHbpXEUeCharged->SetYTitle("ln(1/x_{E})"); |
778 | fhPtHbpXEUeCharged->SetXTitle("p_{T trigger}"); | |
779 | ||
780 | fhZTCharged = | |
781 | new TH2F("hZTCharged","z_{T} for charged tracks", | |
782 | nptbins,ptmin,ptmax,200,0.,2.); | |
783 | fhZTCharged->SetYTitle("z_{T}"); | |
784 | fhZTCharged->SetXTitle("p_{T trigger}"); | |
785 | ||
786 | fhZTUeCharged = | |
787 | new TH2F("hZTUeCharged","z_{T} for Underlying Event", | |
788 | nptbins,ptmin,ptmax,200,0.,2.); | |
789 | fhZTUeCharged->SetYTitle("z_{T}"); | |
790 | fhZTUeCharged->SetXTitle("p_{T trigger}"); | |
791 | ||
792 | fhZTPosCharged = | |
793 | new TH2F("hZTPositiveCharged","z_{T} for positive charged tracks", | |
794 | nptbins,ptmin,ptmax,200,0.,2.); | |
795 | fhZTPosCharged->SetYTitle("z_{T}"); | |
796 | fhZTPosCharged->SetXTitle("p_{T trigger}"); | |
797 | ||
798 | fhZTNegCharged = | |
799 | new TH2F("hZTNegativeCharged","z_{T} for negative charged tracks", | |
800 | nptbins,ptmin,ptmax,200,0.,2.); | |
801 | fhZTNegCharged->SetYTitle("z_{T}"); | |
802 | fhZTNegCharged->SetXTitle("p_{T trigger}"); | |
803 | ||
804 | fhPtHbpZTCharged = | |
805 | new TH2F("hHbpZTCharged","#xi = ln(1/z_{T}) with charged hadrons", | |
806 | nptbins,ptmin,ptmax,200,0.,10.); | |
807 | fhPtHbpZTCharged->SetYTitle("ln(1/z_{T})"); | |
808 | fhPtHbpZTCharged->SetXTitle("p_{T trigger}"); | |
809 | ||
810 | fhPtHbpZTUeCharged = | |
811 | new TH2F("hHbpZTUeCharged","#xi = ln(1/z_{T}) with charged hadrons,Underlying Event", | |
812 | nptbins,ptmin,ptmax,200,0.,10.); | |
813 | fhPtHbpZTUeCharged->SetYTitle("ln(1/x_{E})"); | |
814 | fhPtHbpZTUeCharged->SetXTitle("p_{T trigger}"); | |
e09cf5ef | 815 | |
816 | fhPtTrigPout = | |
babcbc9d | 817 | new TH2F("hPtTrigPout","Pout with triggers", |
e09cf5ef | 818 | nptbins,ptmin,ptmax,2*nptbins,-ptmax,ptmax); |
819 | fhPtTrigPout->SetYTitle("p_{out} (GeV/c)"); | |
820 | fhPtTrigPout->SetXTitle("p_{T trigger} (GeV/c)"); | |
821 | ||
e09cf5ef | 822 | fhPtTrigCharged = |
babcbc9d | 823 | new TH2F("hPtTrigCharged","trgger and charged tracks pt distribution", |
e09cf5ef | 824 | nptbins,ptmin,ptmax,nptbins,ptmin,ptmax); |
825 | fhPtTrigCharged->SetYTitle("p_{T h^{#pm}} (GeV/c)"); | |
826 | fhPtTrigCharged->SetXTitle("p_{T trigger} (GeV/c)"); | |
827 | ||
828 | outputContainer->Add(fhDeltaPhiDeltaEtaCharged); | |
829 | outputContainer->Add(fhPhiCharged) ; | |
830 | outputContainer->Add(fhEtaCharged) ; | |
831 | outputContainer->Add(fhDeltaPhiCharged) ; | |
832 | outputContainer->Add(fhDeltaEtaCharged) ; | |
833 | outputContainer->Add(fhDeltaPhiChargedPt) ; | |
834 | outputContainer->Add(fhDeltaPhiUeChargedPt) ; | |
050ad675 | 835 | |
3f150b4b | 836 | outputContainer->Add(fhXECharged) ; |
837 | outputContainer->Add(fhXEPosCharged) ; | |
838 | outputContainer->Add(fhXENegCharged) ; | |
839 | outputContainer->Add(fhXEUeCharged) ; | |
840 | outputContainer->Add(fhPtHbpXECharged) ; | |
841 | outputContainer->Add(fhPtHbpXEUeCharged) ; | |
050ad675 | 842 | |
3f150b4b | 843 | outputContainer->Add(fhZTCharged) ; |
844 | outputContainer->Add(fhZTPosCharged) ; | |
845 | outputContainer->Add(fhZTNegCharged) ; | |
846 | outputContainer->Add(fhZTUeCharged) ; | |
847 | outputContainer->Add(fhPtHbpZTCharged) ; | |
848 | outputContainer->Add(fhPtHbpZTUeCharged) ; | |
849 | ||
e09cf5ef | 850 | outputContainer->Add(fhPtTrigPout) ; |
e09cf5ef | 851 | outputContainer->Add(fhPtTrigCharged) ; |
852 | ||
547c2f01 | 853 | if(DoEventSelect()) |
854 | { | |
e09cf5ef | 855 | Int_t nMultiBins = GetMultiBin(); |
856 | fhTrigDeltaPhiCharged = new TH2F*[nMultiBins] ; | |
857 | fhTrigDeltaEtaCharged = new TH2F*[nMultiBins] ; | |
3f150b4b | 858 | fhTrigXECorr = new TH2F*[nMultiBins] ; |
859 | fhTrigXEUeCorr = new TH2F*[nMultiBins] ; | |
860 | fhTrigZTCorr = new TH2F*[nMultiBins] ; | |
861 | fhTrigZTUeCorr = new TH2F*[nMultiBins] ; | |
862 | ||
863 | for(Int_t im=0; im<nMultiBins; im++) | |
864 | { | |
e09cf5ef | 865 | fhTrigDeltaPhiCharged[im] = new TH2F |
62f2fe4d | 866 | (Form("hTrigDeltaPhiCharged_%d",im),Form("hTrigDeltaPhiCharged_%d",im), nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax); |
e09cf5ef | 867 | fhTrigDeltaPhiCharged[im]->SetXTitle("p_{T trigger} (GeV/c)"); |
868 | fhTrigDeltaPhiCharged[im]->SetYTitle("#Delta #phi"); | |
3f150b4b | 869 | |
e09cf5ef | 870 | fhTrigDeltaEtaCharged[im] = new TH2F |
62f2fe4d | 871 | (Form("hTrigDeltaEtaCharged_%d",im),Form("hTrigDeltaEtaCharged_%d",im), nptbins,ptmin,ptmax, ndeltaetabins ,deltaetamin,deltaetamax); |
e09cf5ef | 872 | fhTrigDeltaEtaCharged[im]->SetXTitle("p_{T trigger} (GeV/c)"); |
873 | fhTrigDeltaEtaCharged[im]->SetYTitle("#Delta #eta"); | |
3f150b4b | 874 | |
875 | fhTrigXECorr[im] = new TH2F | |
876 | (Form("hTrigXEPtCorr_%d",im),Form("hTrigXEPtCorr_%d",im), nptbins,ptmin,ptmax,200,0.,2.); | |
877 | fhTrigXECorr[im]->SetYTitle("x_{E trigger h^{#pm}}"); | |
878 | fhTrigXECorr[im]->SetXTitle("p_{T trigger}"); | |
879 | ||
880 | fhTrigXEUeCorr[im] = new TH2F | |
881 | (Form("hTrigXEPtUeCorr_%d",im),Form("hTrigXEPtUeCorr_%d",im), nptbins,ptmin,ptmax,200,0.,2.); | |
882 | fhTrigXEUeCorr[im]->SetYTitle("x_{E trigger h^{#pm}}"); | |
883 | fhTrigXEUeCorr[im]->SetXTitle("p_{T trigger}"); | |
884 | ||
885 | fhTrigZTCorr[im] = new TH2F | |
886 | (Form("hTrigZTPtCorr_%d",im),Form("hTrigZTPtCorr_%d",im), nptbins,ptmin,ptmax,200,0.,2.); | |
887 | fhTrigZTCorr[im]->SetYTitle("z_{trigger h^{#pm}}"); | |
888 | fhTrigZTCorr[im]->SetXTitle("p_{T trigger}"); | |
889 | ||
890 | fhTrigZTUeCorr[im] = new TH2F | |
891 | (Form("hTrigZTPtUeCorr_%d",im),Form("hTrigZTPtUeCorr_%d",im), nptbins,ptmin,ptmax,200,0.,2.); | |
892 | fhTrigZTUeCorr[im]->SetYTitle("z_{trigger h^{#pm}}"); | |
893 | fhTrigZTUeCorr[im]->SetXTitle("p_{T trigger}"); | |
045396c8 | 894 | |
e09cf5ef | 895 | outputContainer->Add(fhTrigDeltaPhiCharged[im]) ; |
896 | outputContainer->Add(fhTrigDeltaEtaCharged[im]) ; | |
3f150b4b | 897 | outputContainer->Add(fhTrigXECorr[im]); |
898 | outputContainer->Add(fhTrigXEUeCorr[im]); | |
899 | outputContainer->Add(fhTrigZTCorr[im]); | |
900 | outputContainer->Add(fhTrigZTUeCorr[im]); | |
045396c8 | 901 | } |
902 | } | |
903 | ||
907b38cd | 904 | if(fFillBradHisto) |
905 | { | |
906 | fhAssocPtBkg = new TH2F("hAssocPtBkg", " Trigger p_{T} vs associated hadron p_{T} from background", | |
907 | nptbins, ptmin, ptmax,nptbins,ptmin,ptmax); | |
908 | fhAssocPtBkg->SetXTitle("p_{T trigger}"); | |
909 | fhAssocPtBkg->SetYTitle("p_{T associated}"); | |
910 | outputContainer->Add(fhAssocPtBkg) ; | |
911 | ||
912 | fhDeltaPhiBrad = new TH2F("hDeltaPhiBrad","atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi vs p_{T trigger} ", | |
913 | nptbins, ptmin, ptmax,288, -1.0/3.0, 5.0/3.0); | |
914 | fhDeltaPhiBrad->SetXTitle("p_{T trigger}"); | |
915 | fhDeltaPhiBrad->SetYTitle("atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi"); | |
916 | outputContainer->Add(fhDeltaPhiBrad) ; | |
917 | } | |
66e64043 | 918 | |
05d0d05d | 919 | fhDeltaPhiAssocPtBin = new TH2F*[fNAssocPtBins] ; |
05d0d05d | 920 | fhXEAssocPtBin = new TH2F*[fNAssocPtBins] ; |
3f150b4b | 921 | fhZTAssocPtBin = new TH2F*[fNAssocPtBins] ; |
922 | ||
907b38cd | 923 | if(fFillBradHisto) |
924 | fhDeltaPhiBradAssocPtBin = new TH2F*[fNAssocPtBins] ; | |
925 | ||
926 | if(fPi0Trigger || fDecayTrigger) | |
927 | { | |
928 | fhDeltaPhiAssocPtBin = new TH2F*[fNAssocPtBins] ; | |
929 | fhXEAssocPtBin = new TH2F*[fNAssocPtBins] ; | |
930 | fhZTAssocPtBin = new TH2F*[fNAssocPtBins] ; | |
931 | fhXEDecayChargedAssocPtBin = new TH2F*[fNAssocPtBins] ; | |
932 | fhZTDecayChargedAssocPtBin = new TH2F*[fNAssocPtBins] ; | |
933 | fhDeltaPhiDecayChargedAssocPtBin = new TH2F*[fNAssocPtBins] ; | |
934 | } | |
050ad675 | 935 | |
907b38cd | 936 | if(fHMPIDCorrelation) |
937 | { | |
938 | fhDeltaPhiAssocPtBinHMPID = new TH2F*[fNAssocPtBins] ; | |
939 | fhDeltaPhiAssocPtBinHMPIDAcc= new TH2F*[fNAssocPtBins] ; | |
940 | } | |
941 | ||
babcbc9d | 942 | for(Int_t i = 0 ; i < fNAssocPtBins ; i++) |
943 | { | |
944 | fhDeltaPhiAssocPtBin[i] = new TH2F(Form("hDeltaPhiPtAssocPt%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]), | |
05d0d05d | 945 | Form("#Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]), |
62f2fe4d | 946 | nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax); |
05d0d05d | 947 | fhDeltaPhiAssocPtBin[i]->SetXTitle("p_{T trigger}"); |
948 | fhDeltaPhiAssocPtBin[i]->SetYTitle("#Delta #phi"); | |
907b38cd | 949 | |
babcbc9d | 950 | fhXEAssocPtBin[i] = new TH2F(Form("hXEAssocPtBin%1.f_%1.f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]), |
66e64043 | 951 | Form("x_{E} vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]), |
3f150b4b | 952 | nptbins, ptmin, ptmax,200, 0.0, 2.0); |
05d0d05d | 953 | fhXEAssocPtBin[i]->SetXTitle("p_{T trigger}"); |
954 | fhXEAssocPtBin[i]->SetYTitle("x_{E}"); | |
955 | ||
3f150b4b | 956 | fhZTAssocPtBin[i] = new TH2F(Form("hZTAssocPtBin%1.f_%1.f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]), |
957 | Form("z_{T} vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]), | |
958 | nptbins, ptmin, ptmax,200, 0.0, 2.0); | |
959 | fhZTAssocPtBin[i]->SetXTitle("p_{T trigger}"); | |
960 | fhZTAssocPtBin[i]->SetYTitle("z_{T}"); | |
961 | ||
05d0d05d | 962 | outputContainer->Add(fhDeltaPhiAssocPtBin[i]) ; |
05d0d05d | 963 | outputContainer->Add(fhXEAssocPtBin[i]); |
3f150b4b | 964 | outputContainer->Add(fhZTAssocPtBin[i]); |
907b38cd | 965 | |
966 | if(fPi0Trigger || fDecayTrigger) | |
967 | { | |
968 | fhDeltaPhiDecayChargedAssocPtBin[i] = new TH2F(Form("hDeltaPhiPtDecayChargedAssocPt%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]), | |
969 | Form("#Delta #phi vs p_{T trigger} tagged as decay for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]), | |
62f2fe4d | 970 | nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax); |
907b38cd | 971 | fhDeltaPhiDecayChargedAssocPtBin[i]->SetXTitle("p_{T trigger}"); |
972 | fhDeltaPhiDecayChargedAssocPtBin[i]->SetYTitle("#Delta #phi"); | |
973 | ||
974 | fhXEDecayChargedAssocPtBin[i] = new TH2F(Form("hXEDecayChargedAssocPtBin%1.f_%1.f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]), | |
975 | Form("x_{E} vs p_{T trigger} tagged as decay for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]), | |
976 | nptbins, ptmin, ptmax,200, 0.0, 2.0); | |
977 | fhXEDecayChargedAssocPtBin[i]->SetXTitle("p_{T trigger}"); | |
978 | fhXEDecayChargedAssocPtBin[i]->SetYTitle("x_{E}"); | |
979 | ||
980 | fhZTDecayChargedAssocPtBin[i] = new TH2F(Form("hZTDecayChargedAssocPtBin%1.f_%1.f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]), | |
981 | Form("z_{T} vs p_{T trigger} tagged as decay for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]), | |
982 | nptbins, ptmin, ptmax,200, 0.0, 2.0); | |
983 | fhZTDecayChargedAssocPtBin[i]->SetXTitle("p_{T trigger}"); | |
984 | fhZTDecayChargedAssocPtBin[i]->SetYTitle("z_{T}"); | |
985 | ||
986 | outputContainer->Add(fhDeltaPhiDecayChargedAssocPtBin[i]) ; | |
987 | outputContainer->Add(fhXEDecayChargedAssocPtBin[i]); | |
988 | outputContainer->Add(fhZTDecayChargedAssocPtBin[i]); | |
989 | ||
990 | } | |
991 | ||
992 | if(fFillBradHisto) | |
993 | { | |
994 | fhDeltaPhiBradAssocPtBin[i] = new TH2F(Form("hDeltaPhiBradPtAssocPt%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]), | |
995 | Form("atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]), | |
996 | nptbins, ptmin, ptmax,288, -1.0/3.0, 5.0/3.0); | |
997 | fhDeltaPhiBradAssocPtBin[i]->SetXTitle("p_{T trigger}"); | |
998 | fhDeltaPhiBradAssocPtBin[i]->SetYTitle("atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi"); | |
999 | outputContainer->Add(fhDeltaPhiBradAssocPtBin[i]) ; | |
1000 | } | |
1001 | ||
1002 | if(fHMPIDCorrelation) | |
1003 | { | |
1004 | fhDeltaPhiAssocPtBinHMPID[i] = new TH2F(Form("hDeltaPhiPtAssocPt%2.1f_%2.1fHMPID", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]), | |
1005 | Form("#Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f], with track having HMPID signal", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]), | |
62f2fe4d | 1006 | nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax); |
907b38cd | 1007 | fhDeltaPhiAssocPtBinHMPID[i]->SetXTitle("p_{T trigger}"); |
1008 | fhDeltaPhiAssocPtBinHMPID[i]->SetYTitle("#Delta #phi"); | |
1009 | ||
1010 | fhDeltaPhiAssocPtBinHMPIDAcc[i] = new TH2F(Form("hDeltaPhiPtAssocPt%2.1f_%2.1fHMPIDAcc", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]), | |
1011 | Form("#Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f], with track within 5<phi<20 deg", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]), | |
62f2fe4d | 1012 | nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax); |
907b38cd | 1013 | fhDeltaPhiAssocPtBinHMPIDAcc[i]->SetXTitle("p_{T trigger}"); |
1014 | fhDeltaPhiAssocPtBinHMPIDAcc[i]->SetYTitle("#Delta #phi"); | |
1015 | ||
1016 | outputContainer->Add(fhDeltaPhiAssocPtBinHMPID[i]) ; | |
1017 | outputContainer->Add(fhDeltaPhiAssocPtBinHMPIDAcc[i]) ; | |
1018 | ||
1019 | } | |
e09cf5ef | 1020 | } |
045396c8 | 1021 | |
907b38cd | 1022 | if(fPi0Trigger || fDecayTrigger) |
547c2f01 | 1023 | { |
907b38cd | 1024 | if(fPi0Trigger) |
1025 | { | |
1026 | fhPtPi0DecayRatio = new TH2F | |
1027 | ("hPtPi0DecayRatio","p_T of #pi^{0} and the ratio of pt for two decay", | |
1028 | nptbins,ptmin,ptmax, 100,0.,2.); | |
1029 | fhPtPi0DecayRatio->SetXTitle("p_{T}^{#pi^{0}} (GeV/c)"); | |
1030 | fhPtPi0DecayRatio->SetYTitle("p_{T}^{Decay}/p_{T}^{#pi^{0}}"); | |
050ad675 | 1031 | outputContainer->Add(fhPtPi0DecayRatio) ; |
907b38cd | 1032 | } |
e09cf5ef | 1033 | |
1034 | fhDeltaPhiDecayCharged = new TH2F | |
babcbc9d | 1035 | ("hDeltaPhiDecayCharged","#phi_{Decay} - #phi_{h^{#pm}} vs p_{T Decay}", |
62f2fe4d | 1036 | nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax); |
e09cf5ef | 1037 | fhDeltaPhiDecayCharged->SetYTitle("#Delta #phi"); |
1038 | fhDeltaPhiDecayCharged->SetXTitle("p_{T Decay} (GeV/c)"); | |
1039 | ||
3f150b4b | 1040 | fhXEDecayCharged = |
1041 | new TH2F("hXEDecayCharged","x_{E} Decay", | |
1042 | nptbins,ptmin,ptmax,200,0.,2.); | |
1043 | fhXEDecayCharged->SetYTitle("x_{E}"); | |
1044 | fhXEDecayCharged->SetXTitle("p_{T decay}"); | |
1045 | ||
1046 | fhZTDecayCharged = | |
1047 | new TH2F("hZTDecayCharged","z_{trigger h^{#pm}} = p_{T h^{#pm}} / p_{T Decay}", | |
e09cf5ef | 1048 | nptbins,ptmin,ptmax,200,0.,2.); |
3f150b4b | 1049 | fhZTDecayCharged->SetYTitle("z_{decay h^{#pm}}"); |
1050 | fhZTDecayCharged->SetXTitle("p_{T decay}"); | |
e09cf5ef | 1051 | |
e09cf5ef | 1052 | outputContainer->Add(fhDeltaPhiDecayCharged) ; |
3f150b4b | 1053 | outputContainer->Add(fhXEDecayCharged) ; |
1054 | outputContainer->Add(fhZTDecayCharged) ; | |
e09cf5ef | 1055 | } |
1056 | ||
547c2f01 | 1057 | if(fMakeSeveralUE) |
1058 | { | |
e09cf5ef | 1059 | fhDeltaPhiUeLeftCharged = new TH2F |
babcbc9d | 1060 | ("hDeltaPhiUeLeftChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs p_{T Ueh^{#pm}} with UE left side range of trigger particles", |
62f2fe4d | 1061 | nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax); |
e09cf5ef | 1062 | fhDeltaPhiUeLeftCharged->SetYTitle("#Delta #phi"); |
1063 | fhDeltaPhiUeLeftCharged->SetXTitle("p_{T h^{#pm}} (GeV/c)"); | |
1064 | outputContainer->Add(fhDeltaPhiUeLeftCharged) ; | |
1065 | ||
1066 | fhDeltaPhiUeRightCharged = new TH2F | |
babcbc9d | 1067 | ("hDeltaPhiUeRightChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs p_{T Ueh^{#pm}} with UE right side range of trigger particles", |
62f2fe4d | 1068 | nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax); |
e09cf5ef | 1069 | fhDeltaPhiUeRightCharged->SetYTitle("#Delta #phi"); |
1070 | fhDeltaPhiUeRightCharged->SetXTitle("p_{T h^{#pm}} (GeV/c)"); | |
1071 | outputContainer->Add(fhDeltaPhiUeRightCharged) ; | |
1072 | ||
3f150b4b | 1073 | fhXEUeLeftCharged = |
1074 | new TH2F("hXEUeChargedLeft","x_{E} with UE left side of trigger", | |
e09cf5ef | 1075 | nptbins,ptmin,ptmax,200,0.,2.); |
3f150b4b | 1076 | fhXEUeLeftCharged->SetYTitle("x_{E Ueh^{#pm}}"); |
1077 | fhXEUeLeftCharged->SetXTitle("p_{T trigger}"); | |
1078 | outputContainer->Add(fhXEUeLeftCharged) ; | |
e09cf5ef | 1079 | |
3f150b4b | 1080 | fhXEUeRightCharged = |
1081 | new TH2F("hXEUeChargedRight","x_{E h^{#pm}} with UE right side of trigger", | |
e09cf5ef | 1082 | nptbins,ptmin,ptmax,200,0.,2.); |
3f150b4b | 1083 | fhXEUeRightCharged->SetYTitle("z_{trigger Ueh^{#pm}}"); |
1084 | fhXEUeRightCharged->SetXTitle("p_{T trigger}"); | |
1085 | outputContainer->Add(fhXEUeRightCharged) ; | |
1086 | ||
1087 | fhPtHbpXEUeLeftCharged = | |
1088 | new TH2F("hHbpXEUeChargedLeft","#xi = ln(1/x_{E}) with charged UE left side of trigger", | |
1089 | nptbins,ptmin,ptmax,200,0.,10.); | |
1090 | fhPtHbpXEUeLeftCharged->SetYTitle("ln(1/x_{E})"); | |
1091 | fhPtHbpXEUeLeftCharged->SetXTitle("p_{T trigger}"); | |
1092 | outputContainer->Add(fhPtHbpXEUeLeftCharged) ; | |
e09cf5ef | 1093 | |
3f150b4b | 1094 | fhPtHbpXEUeRightCharged = |
1095 | new TH2F("hHbpXEUeChargedRight","#xi = ln(1/x_{E}) with charged UE right side of trigger", | |
e09cf5ef | 1096 | nptbins,ptmin,ptmax,200,0.,10.); |
3f150b4b | 1097 | fhPtHbpXEUeRightCharged->SetYTitle("ln(1/x_{E})"); |
1098 | fhPtHbpXEUeRightCharged->SetXTitle("p_{T trigger}"); | |
1099 | outputContainer->Add(fhPtHbpXEUeRightCharged) ; | |
1100 | ||
1101 | fhZTUeLeftCharged = | |
1102 | new TH2F("hZTUeChargedLeft","z_{trigger h^{#pm}} = p_{T Ueh^{#pm}} / p_{T trigger} with UE left side of trigger", | |
1103 | nptbins,ptmin,ptmax,200,0.,2.); | |
1104 | fhZTUeLeftCharged->SetYTitle("z_{trigger Ueh^{#pm}}"); | |
1105 | fhZTUeLeftCharged->SetXTitle("p_{T trigger}"); | |
1106 | outputContainer->Add(fhZTUeLeftCharged) ; | |
1107 | ||
1108 | fhZTUeRightCharged = | |
1109 | new TH2F("hZTUeChargedRight","z_{trigger h^{#pm}} = p_{T Ueh^{#pm}} / p_{T trigger} with UE right side of trigger", | |
1110 | nptbins,ptmin,ptmax,200,0.,2.); | |
1111 | fhZTUeRightCharged->SetYTitle("z_{trigger Ueh^{#pm}}"); | |
1112 | fhZTUeRightCharged->SetXTitle("p_{T trigger}"); | |
1113 | outputContainer->Add(fhZTUeRightCharged) ; | |
e09cf5ef | 1114 | |
3f150b4b | 1115 | fhPtHbpZTUeLeftCharged = |
1116 | new TH2F("hHbpZTUeChargedLeft","#xi = ln(1/z_{T}) with charged UE left side of trigger", | |
e09cf5ef | 1117 | nptbins,ptmin,ptmax,200,0.,10.); |
3f150b4b | 1118 | fhPtHbpZTUeLeftCharged->SetYTitle("ln(1/z_{T})"); |
1119 | fhPtHbpZTUeLeftCharged->SetXTitle("p_{T trigger}"); | |
1120 | outputContainer->Add(fhPtHbpZTUeLeftCharged) ; | |
1121 | ||
1122 | fhPtHbpZTUeRightCharged = | |
1123 | new TH2F("hHbpZTUeChargedRight","#xi = ln(1/z_{T}) with charged UE right side of trigger", | |
1124 | nptbins,ptmin,ptmax,200,0.,10.); | |
1125 | fhPtHbpZTUeRightCharged->SetYTitle("ln(1/z_{T})"); | |
1126 | fhPtHbpZTUeRightCharged->SetXTitle("p_{T trigger}"); | |
1127 | outputContainer->Add(fhPtHbpZTUeRightCharged) ; | |
e09cf5ef | 1128 | |
1129 | } | |
1130 | } //Correlation with charged hadrons | |
050ad675 | 1131 | |
e09cf5ef | 1132 | //Correlation with neutral hadrons |
547c2f01 | 1133 | if(fNeutralCorr) |
1134 | { | |
e09cf5ef | 1135 | fhDeltaPhiDeltaEtaNeutral = new TH2F |
babcbc9d | 1136 | ("hDeltaPhiDeltaEtaNeutral","#phi_{trigger} - #phi_{h^{0}} vs #eta_{trigger} - #eta_{h^{0}}", |
62f2fe4d | 1137 | ndeltaphibins ,deltaphimin,deltaphimax, ndeltaetabins ,deltaetamin,deltaetamax); |
e09cf5ef | 1138 | fhDeltaPhiDeltaEtaNeutral->SetXTitle("#Delta #phi"); |
1139 | fhDeltaPhiDeltaEtaNeutral->SetYTitle("#Delta #eta"); | |
1140 | ||
1141 | fhPhiNeutral = new TH2F | |
babcbc9d | 1142 | ("hPhiNeutral","#phi_{#pi^{0}} vs p_{T #pi^{0}}", |
e09cf5ef | 1143 | nptbins,ptmin,ptmax,nphibins,phimin,phimax); |
1144 | fhPhiNeutral->SetYTitle("#phi_{#pi^{0}} (rad)"); | |
1145 | fhPhiNeutral->SetXTitle("p_{T #pi^{0}} (GeV/c)"); | |
1146 | ||
1147 | fhEtaNeutral = new TH2F | |
babcbc9d | 1148 | ("hEtaNeutral","#eta_{#pi^{0}} vs p_{T #pi^{0}}", |
e09cf5ef | 1149 | nptbins,ptmin,ptmax,netabins,etamin,etamax); |
1150 | fhEtaNeutral->SetYTitle("#eta_{#pi^{0}} (rad)"); | |
1151 | fhEtaNeutral->SetXTitle("p_{T #pi^{0}} (GeV/c)"); | |
1152 | ||
1153 | fhDeltaPhiNeutral = new TH2F | |
babcbc9d | 1154 | ("hDeltaPhiNeutral","#phi_{trigger} - #phi_{#pi^{0}} vs p_{T trigger}", |
e09cf5ef | 1155 | nptbins,ptmin,ptmax,nphibins,phimin,phimax); |
1156 | fhDeltaPhiNeutral->SetYTitle("#Delta #phi"); | |
1157 | fhDeltaPhiNeutral->SetXTitle("p_{T trigger} (GeV/c)"); | |
1158 | ||
1159 | fhDeltaPhiNeutralPt = new TH2F | |
babcbc9d | 1160 | ("hDeltaPhiNeutralPt","#phi_{trigger} - #phi_{#pi^{0}} vs p_{T #pi^{0}}}", |
62f2fe4d | 1161 | nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax); |
e09cf5ef | 1162 | fhDeltaPhiNeutralPt->SetYTitle("#Delta #phi"); |
1163 | fhDeltaPhiNeutralPt->SetXTitle("p_{T h^{0}} (GeV/c)"); | |
1164 | ||
1165 | fhDeltaPhiUeNeutralPt = new TH2F | |
babcbc9d | 1166 | ("hDeltaPhiUeNeutralPt","#phi_{trigger} - #phi_{#pi^{0}} vs p_{T #pi^{0}}}", |
62f2fe4d | 1167 | nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax); |
e09cf5ef | 1168 | fhDeltaPhiUeNeutralPt->SetYTitle("#Delta #phi"); |
1169 | fhDeltaPhiUeNeutralPt->SetXTitle("p_{T h^{0}} (GeV/c)"); | |
1170 | ||
1171 | fhDeltaEtaNeutral = new TH2F | |
babcbc9d | 1172 | ("hDeltaEtaNeutral","#eta_{trigger} - #eta_{#pi^{0}} vs p_{T trigger}", |
62f2fe4d | 1173 | nptbins,ptmin,ptmax, ndeltaetabins ,deltaetamin,deltaetamax); |
e09cf5ef | 1174 | fhDeltaEtaNeutral->SetYTitle("#Delta #eta"); |
1175 | fhDeltaEtaNeutral->SetXTitle("p_{T trigger} (GeV/c)"); | |
1176 | ||
3f150b4b | 1177 | fhXENeutral = |
1178 | new TH2F("hXENeutral","x_{E} for #pi^{0} associated", | |
e09cf5ef | 1179 | nptbins,ptmin,ptmax,200,0.,2.); |
3f150b4b | 1180 | fhXENeutral->SetYTitle("x_{E}"); |
1181 | fhXENeutral->SetXTitle("p_{T trigger}"); | |
e09cf5ef | 1182 | |
3f150b4b | 1183 | fhXEUeNeutral = |
1184 | new TH2F("hXEUeNeutral","x_{E} for #pi^{0} associated", | |
e09cf5ef | 1185 | nptbins,ptmin,ptmax,200,0.,2.); |
3f150b4b | 1186 | fhXEUeNeutral->SetYTitle("x_{E}"); |
1187 | fhXEUeNeutral->SetXTitle("p_{T trigger}"); | |
e09cf5ef | 1188 | |
3f150b4b | 1189 | fhPtHbpXENeutral = |
1190 | new TH2F("hHbpXENeutral","#xi = ln(1/x_{E})for #pi^{0} associated", | |
e09cf5ef | 1191 | nptbins,ptmin,ptmax,200,0.,10.); |
3f150b4b | 1192 | fhPtHbpXENeutral->SetYTitle("ln(1/x_{E})"); |
1193 | fhPtHbpXENeutral->SetXTitle("p_{T trigger}"); | |
e09cf5ef | 1194 | |
3f150b4b | 1195 | fhPtHbpXEUeNeutral = |
1196 | new TH2F("hHbpXEUeNeutral","#xi = ln(1/x_{E}) for #pi^{0} associated", | |
e09cf5ef | 1197 | nptbins,ptmin,ptmax,200,0.,10.); |
3f150b4b | 1198 | fhPtHbpXEUeNeutral->SetYTitle("ln(1/x_{E})"); |
1199 | fhPtHbpXEUeNeutral->SetXTitle("p_{T trigger}"); | |
1200 | ||
1201 | fhZTNeutral = | |
1202 | new TH2F("hZTNeutral","z_{trigger #pi} = p_{T #pi^{0}} / p_{T trigger} for #pi^{0} associated", | |
1203 | nptbins,ptmin,ptmax,200,0.,2.); | |
1204 | fhZTNeutral->SetYTitle("z_{trigger #pi^{0}}"); | |
1205 | fhZTNeutral->SetXTitle("p_{T trigger}"); | |
e09cf5ef | 1206 | |
3f150b4b | 1207 | fhZTUeNeutral = |
1208 | new TH2F("hZTUeNeutral","z_{trigger #pi} = p_{T #pi^{0}} / p_{T trigger} for #pi^{0} associated", | |
1209 | nptbins,ptmin,ptmax,200,0.,2.); | |
1210 | fhZTUeNeutral->SetYTitle("z_{trigger #pi^{0}}"); | |
1211 | fhZTUeNeutral->SetXTitle("p_{T trigger}"); | |
1212 | ||
1213 | fhPtHbpZTNeutral = | |
1214 | new TH2F("hHbpZTNeutral","#xi = ln(1/x_{E}) for #pi^{0} associated", | |
1215 | nptbins,ptmin,ptmax,200,0.,10.); | |
1216 | fhPtHbpZTNeutral->SetYTitle("ln(1/z_{T})"); | |
1217 | fhPtHbpZTNeutral->SetXTitle("p_{T trigger}"); | |
1218 | ||
1219 | fhPtHbpZTUeNeutral = | |
1220 | new TH2F("hHbpZTUeNeutral","#xi = ln(1/x_{E}) for #pi^{0} associated", | |
1221 | nptbins,ptmin,ptmax,200,0.,10.); | |
1222 | fhPtHbpXEUeNeutral->SetYTitle("ln(1/z_{T})"); | |
1223 | fhPtHbpXEUeNeutral->SetXTitle("p_{T trigger}"); | |
e09cf5ef | 1224 | |
1225 | outputContainer->Add(fhDeltaPhiDeltaEtaNeutral); | |
1226 | outputContainer->Add(fhPhiNeutral) ; | |
1227 | outputContainer->Add(fhEtaNeutral) ; | |
1228 | outputContainer->Add(fhDeltaPhiNeutral) ; | |
1229 | outputContainer->Add(fhDeltaPhiNeutralPt) ; | |
1230 | outputContainer->Add(fhDeltaPhiUeNeutralPt) ; | |
1231 | outputContainer->Add(fhDeltaEtaNeutral) ; | |
3f150b4b | 1232 | outputContainer->Add(fhXENeutral) ; |
1233 | outputContainer->Add(fhXEUeNeutral) ; | |
1234 | outputContainer->Add(fhPtHbpXENeutral) ; | |
1235 | outputContainer->Add(fhPtHbpXEUeNeutral) ; | |
1236 | outputContainer->Add(fhZTNeutral) ; | |
1237 | outputContainer->Add(fhZTUeNeutral) ; | |
1238 | outputContainer->Add(fhPtHbpZTNeutral) ; | |
1239 | outputContainer->Add(fhPtHbpZTUeNeutral) ; | |
e09cf5ef | 1240 | |
907b38cd | 1241 | if(fPi0Trigger || fDecayTrigger) |
babcbc9d | 1242 | { |
e09cf5ef | 1243 | fhDeltaPhiDecayNeutral = new TH2F |
babcbc9d | 1244 | ("hDeltaPhiDecayNeutral","#phi_{Decay} - #phi_{h^{0}} vs p_{T Decay}", |
62f2fe4d | 1245 | nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax); |
e09cf5ef | 1246 | fhDeltaPhiDecayNeutral->SetYTitle("#Delta #phi"); |
1247 | fhDeltaPhiDecayNeutral->SetXTitle("p_{T Decay} (GeV/c)"); | |
1248 | ||
3f150b4b | 1249 | fhXEDecayNeutral = |
1250 | new TH2F("hXEDecayNeutral","x_{E} for decay trigger", | |
1251 | nptbins,ptmin,ptmax,200,0.,2.); | |
1252 | fhXEDecayNeutral->SetYTitle("x_{E}"); | |
1253 | fhXEDecayNeutral->SetXTitle("p_{T decay}"); | |
1254 | ||
1255 | fhZTDecayNeutral = | |
1256 | new TH2F("hZTDecayNeutral","z_{trigger h^{0}} = p_{T h^{0}} / p_{T Decay}", | |
e09cf5ef | 1257 | nptbins,ptmin,ptmax,200,0.,2.); |
3f150b4b | 1258 | fhZTDecayNeutral->SetYTitle("z_{h^{0}}"); |
1259 | fhZTDecayNeutral->SetXTitle("p_{T decay}"); | |
e09cf5ef | 1260 | |
1261 | outputContainer->Add(fhDeltaPhiDecayNeutral) ; | |
3f150b4b | 1262 | outputContainer->Add(fhXEDecayNeutral) ; |
1263 | outputContainer->Add(fhZTDecayNeutral) ; | |
1264 | ||
e09cf5ef | 1265 | } |
1266 | ||
547c2f01 | 1267 | if(fMakeSeveralUE) |
1268 | { | |
e09cf5ef | 1269 | fhDeltaPhiUeLeftNeutral = new TH2F |
babcbc9d | 1270 | ("hDeltaPhiUeLeftNeutralPt","#phi_{trigger} - #phi_{#Ueh^{0}} vs p_{T h^{0}} with neutral UE left side range of trigger particles", |
62f2fe4d | 1271 | nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax); |
e09cf5ef | 1272 | fhDeltaPhiUeLeftNeutral->SetYTitle("#Delta #phi"); |
1273 | fhDeltaPhiUeLeftNeutral->SetXTitle("p_{T h^{0}} (GeV/c)"); | |
1274 | outputContainer->Add(fhDeltaPhiUeLeftNeutral) ; | |
1275 | ||
1276 | fhDeltaPhiUeRightNeutral = new TH2F | |
babcbc9d | 1277 | ("hDeltaPhiUeRightNeutralPt","#phi_{trigger} - #phi_{#Ueh^{0}} vs p_{T Ueh^{0}} with neutral UE right side range of trigger particles", |
62f2fe4d | 1278 | nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax); |
e09cf5ef | 1279 | fhDeltaPhiUeRightNeutral->SetYTitle("#Delta #phi"); |
1280 | fhDeltaPhiUeRightNeutral->SetXTitle("p_{T h^{0}} (GeV/c)"); | |
1281 | outputContainer->Add(fhDeltaPhiUeRightNeutral) ; | |
1282 | ||
3f150b4b | 1283 | fhXEUeLeftNeutral = |
1284 | new TH2F("hXEUeNeutralLeft","x_{E} = p_{T Ueh^{0}} / p_{T trigger} with neutral UE left side of trigger", | |
1285 | nptbins,ptmin,ptmax,140,0.,2.); | |
1286 | fhXEUeLeftNeutral->SetYTitle("z_{trigger Ueh^{0}}"); | |
1287 | fhXEUeLeftNeutral->SetXTitle("p_{T trigger}"); | |
1288 | outputContainer->Add(fhXEUeLeftNeutral) ; | |
1289 | ||
1290 | fhXEUeRightNeutral = | |
1291 | new TH2F("hXEUeNeutralRight","x_{E} = p_{T Ueh^{0}} / p_{T trigger} with neutral UE right side of trigger", | |
1292 | nptbins,ptmin,ptmax,200,0.,2.); | |
1293 | fhXEUeRightNeutral->SetYTitle("z_{trigger Ueh^{0}}"); | |
1294 | fhXEUeRightNeutral->SetXTitle("p_{T trigger}"); | |
1295 | outputContainer->Add(fhXEUeRightNeutral) ; | |
1296 | ||
1297 | fhPtHbpXEUeLeftNeutral = | |
1298 | new TH2F("hHbpXEUeNeutralLeft","#xi = ln(1/x_{E}) with neutral UE left side of trigger", | |
1299 | nptbins,ptmin,ptmax,200,0.,10.); | |
1300 | fhPtHbpXEUeLeftNeutral->SetYTitle("ln(1/x_{E})"); | |
1301 | fhPtHbpXEUeLeftNeutral->SetXTitle("p_{T trigger}"); | |
1302 | outputContainer->Add(fhPtHbpXEUeLeftNeutral) ; | |
1303 | ||
1304 | fhPtHbpXEUeRightNeutral = | |
1305 | new TH2F("hHbpXEUeNeutralRight","#xi = ln(1/x_{E}) with neutral UE right side of trigger", | |
1306 | nptbins,ptmin,ptmax,200,0.,10.); | |
1307 | fhPtHbpXEUeRightNeutral->SetYTitle("ln(1/x_{E})"); | |
1308 | fhPtHbpXEUeRightNeutral->SetXTitle("p_{T trigger}"); | |
1309 | outputContainer->Add(fhPtHbpXEUeRightNeutral) ; | |
1310 | ||
1311 | fhZTUeLeftNeutral = | |
1312 | new TH2F("hZTUeNeutralLeft","z_{trigger h^{0}} = p_{T Ueh^{0}} / p_{T trigger} with neutral UE left side of trigger", | |
e09cf5ef | 1313 | nptbins,ptmin,ptmax,140,0.,2.); |
3f150b4b | 1314 | fhZTUeLeftNeutral->SetYTitle("z_{trigger Ueh^{0}}"); |
1315 | fhZTUeLeftNeutral->SetXTitle("p_{T trigger}"); | |
1316 | outputContainer->Add(fhZTUeLeftNeutral) ; | |
e09cf5ef | 1317 | |
3f150b4b | 1318 | fhZTUeRightNeutral = |
1319 | new TH2F("hZTUeNeutralRight","z_{trigger h^{0}} = p_{T Ueh^{0}} / p_{T trigger} with neutral UE right side of trigger", | |
e09cf5ef | 1320 | nptbins,ptmin,ptmax,200,0.,2.); |
3f150b4b | 1321 | fhZTUeRightNeutral->SetYTitle("z_{trigger Ueh^{0}}"); |
1322 | fhZTUeRightNeutral->SetXTitle("p_{T trigger}"); | |
1323 | outputContainer->Add(fhZTUeRightNeutral) ; | |
e09cf5ef | 1324 | |
3f150b4b | 1325 | fhPtHbpZTUeLeftNeutral = |
1326 | new TH2F("hHbpZTUeNeutralLeft","#xi = ln(1/z_{T}) with neutral UE left side of trigger", | |
e09cf5ef | 1327 | nptbins,ptmin,ptmax,200,0.,10.); |
3f150b4b | 1328 | fhPtHbpZTUeLeftNeutral->SetYTitle("ln(1/z_{T})"); |
1329 | fhPtHbpZTUeLeftNeutral->SetXTitle("p_{T trigger}"); | |
1330 | outputContainer->Add(fhPtHbpZTUeLeftNeutral) ; | |
e09cf5ef | 1331 | |
3f150b4b | 1332 | fhPtHbpZTUeRightNeutral = |
1333 | new TH2F("hHbpZTUeNeutralRight","#xi = ln(1/z_{T}) with neutral UE right side of trigger", | |
e09cf5ef | 1334 | nptbins,ptmin,ptmax,200,0.,10.); |
3f150b4b | 1335 | fhPtHbpZTUeRightNeutral->SetYTitle("ln(1/z_{T})"); |
1336 | fhPtHbpZTUeRightNeutral->SetXTitle("p_{T trigger}"); | |
1337 | outputContainer->Add(fhPtHbpZTUeRightNeutral) ; | |
e09cf5ef | 1338 | |
1339 | } | |
fe871b21 | 1340 | |
1341 | }//Correlation with neutral hadrons | |
1342 | ||
1343 | //if data is MC, fill more histograms | |
babcbc9d | 1344 | if(IsDataMC()) |
1345 | { | |
1346 | fh2phiLeadingParticle=new TH2F("h2phiLeadingParticle","#phi resolustion for trigger particles",nptbins,ptmin,ptmax,100,-1,1); | |
fe871b21 | 1347 | fh2phiLeadingParticle->GetXaxis()->SetTitle("p_{T gen Leading} (GeV/c)"); |
1348 | fh2phiLeadingParticle->GetYaxis()->SetTitle("(#phi_{rec}-#phi_{gen})/#phi_{gen}"); | |
e09cf5ef | 1349 | |
fe871b21 | 1350 | fhMCEtaCharged = new TH2F |
babcbc9d | 1351 | ("hMCEtaCharged","MC #eta_{h^{#pm}} vs p_{T #pm}", |
fe871b21 | 1352 | nptbins,ptmin,ptmax,netabins,etamin,etamax); |
1353 | fhMCEtaCharged->SetYTitle("#eta_{h^{#pm}} (rad)"); | |
1354 | fhMCEtaCharged->SetXTitle("p_{T #pm} (GeV/c)"); | |
1355 | ||
1356 | fhMCPhiCharged = new TH2F | |
babcbc9d | 1357 | ("hMCPhiCharged","#MC phi_{h^{#pm}} vs p_{T #pm}", |
fe871b21 | 1358 | 200,ptmin,ptmax,nphibins,phimin,phimax); |
1359 | fhMCPhiCharged->SetYTitle("MC #phi_{h^{#pm}} (rad)"); | |
1360 | fhMCPhiCharged->SetXTitle("p_{T #pm} (GeV/c)"); | |
1361 | ||
1362 | fhMCDeltaPhiDeltaEtaCharged = new TH2F | |
babcbc9d | 1363 | ("hMCDeltaPhiDeltaEtaCharged","#MC phi_{trigger} - #phi_{h^{#pm}} vs #eta_{trigger} - #eta_{h^{#pm}}", |
fe871b21 | 1364 | 140,-2.,5.,200,-2,2); |
1365 | fhMCDeltaPhiDeltaEtaCharged->SetXTitle("#Delta #phi"); | |
1366 | fhMCDeltaPhiDeltaEtaCharged->SetYTitle("#Delta #eta"); | |
1367 | ||
1368 | fhMCDeltaEtaCharged = new TH2F | |
babcbc9d | 1369 | ("hMCDeltaEtaCharged","MC #eta_{trigger} - #eta_{h^{#pm}} vs p_{T trigger} and p_{T assoc}", |
fe871b21 | 1370 | nptbins,ptmin,ptmax,200,-2,2); |
1371 | fhMCDeltaEtaCharged->SetYTitle("#Delta #eta"); | |
1372 | fhMCDeltaEtaCharged->SetXTitle("p_{T trigger} (GeV/c)"); | |
1373 | ||
1374 | fhMCDeltaPhiCharged = new TH2F | |
babcbc9d | 1375 | ("hMCDeltaPhiCharged","#phi_{trigger} - #phi_{h^{#pm}} vs p_{T trigger}", |
62f2fe4d | 1376 | nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax); |
fe871b21 | 1377 | fhMCDeltaPhiCharged->SetYTitle("#Delta #phi"); |
1378 | fhMCDeltaPhiCharged->SetXTitle("p_{T trigger} (GeV/c)"); | |
1379 | ||
1380 | fhMCDeltaPhiChargedPt = new TH2F | |
babcbc9d | 1381 | ("hMCDeltaPhiChargedPt","MC #phi_{trigger} - #phi_{#h^{#pm}} vs p_{T h^{#pm}}", |
62f2fe4d | 1382 | nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax); |
fe871b21 | 1383 | fhMCDeltaPhiChargedPt->SetYTitle("#Delta #phi"); |
1384 | fhMCDeltaPhiChargedPt->SetXTitle("p_{T h^{#pm}} (GeV/c)"); | |
1385 | ||
3f150b4b | 1386 | fhMCPtXECharged = |
1387 | new TH2F("hMCPtXECharged","x_{E}", | |
fe871b21 | 1388 | nptbins,ptmin,ptmax,200,0.,2.); |
3f150b4b | 1389 | fhMCPtXECharged->SetYTitle("x_{E}"); |
1390 | fhMCPtXECharged->SetXTitle("p_{T trigger}"); | |
fe871b21 | 1391 | |
3f150b4b | 1392 | fhMCPtHbpXECharged = |
1393 | new TH2F("hMCHbpXECharged","MC #xi = ln(1/x_{E}) with charged hadrons", | |
fe871b21 | 1394 | nptbins,ptmin,ptmax,200,0.,10.); |
3f150b4b | 1395 | fhMCPtHbpXECharged->SetYTitle("ln(1/x_{E})"); |
1396 | fhMCPtHbpXECharged->SetXTitle("p_{T trigger}"); | |
1397 | ||
1398 | fhMCPtZTCharged = | |
1399 | new TH2F("hMCPtZTCharged","z_{T}", | |
1400 | nptbins,ptmin,ptmax,200,0.,2.); | |
1401 | fhMCPtZTCharged->SetYTitle("z_{T}"); | |
1402 | fhMCPtZTCharged->SetXTitle("p_{T trigger}"); | |
1403 | ||
1404 | fhMCPtHbpZTCharged = | |
1405 | new TH2F("hMCHbpZTCharged","MC #xi = ln(1/z_{T}) with charged hadrons", | |
1406 | nptbins,ptmin,ptmax,200,0.,10.); | |
1407 | fhMCPtHbpZTCharged->SetYTitle("ln(1/z_{T})"); | |
1408 | fhMCPtHbpZTCharged->SetXTitle("p_{T trigger}"); | |
fe871b21 | 1409 | |
1410 | fhMCPtTrigPout = | |
babcbc9d | 1411 | new TH2F("hMCPtTrigPout","AOD MC Pout with triggers", |
fe871b21 | 1412 | nptbins,ptmin,ptmax,2*nptbins,-ptmax,ptmax); |
1413 | fhMCPtTrigPout->SetYTitle("p_{out} (GeV/c)"); | |
1414 | fhMCPtTrigPout->SetXTitle("p_{T trigger} (GeV/c)"); | |
1415 | ||
1416 | fhMCPtAssocDeltaPhi = | |
babcbc9d | 1417 | new TH2F("hMCPtAssocDeltaPhi","AOD MC delta phi with associated charged hadrons", |
62f2fe4d | 1418 | nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax); |
fe871b21 | 1419 | fhMCPtAssocDeltaPhi->SetYTitle("#Delta #phi"); |
1420 | fhMCPtAssocDeltaPhi->SetXTitle("p_{T trigger} (GeV/c)"); | |
1421 | ||
1422 | outputContainer->Add(fh2phiLeadingParticle); | |
fe871b21 | 1423 | outputContainer->Add(fhMCDeltaPhiDeltaEtaCharged); |
1424 | outputContainer->Add(fhMCPhiCharged) ; | |
1425 | outputContainer->Add(fhMCEtaCharged) ; | |
1426 | outputContainer->Add(fhMCDeltaEtaCharged) ; | |
1427 | outputContainer->Add(fhMCDeltaPhiCharged) ; | |
1428 | ||
1429 | outputContainer->Add(fhMCDeltaPhiChargedPt) ; | |
3f150b4b | 1430 | outputContainer->Add(fhMCPtXECharged) ; |
1431 | outputContainer->Add(fhMCPtZTCharged) ; | |
1432 | outputContainer->Add(fhMCPtHbpXECharged) ; | |
1433 | outputContainer->Add(fhMCPtHbpZTCharged) ; | |
fe871b21 | 1434 | outputContainer->Add(fhMCPtTrigPout) ; |
1435 | outputContainer->Add(fhMCPtAssocDeltaPhi) ; | |
1436 | } //for MC histogram | |
1437 | ||
2e876d85 | 1438 | if(DoOwnMix()) |
029dea5a | 1439 | { |
1440 | //create event containers | |
029dea5a | 1441 | |
283f989c | 1442 | if(!fUseMixStoredInReader || (fUseMixStoredInReader && !GetReader()->ListWithMixedEventsForTracksExists())) |
2e876d85 | 1443 | { |
283f989c | 1444 | fListMixEvents= new TList*[GetNCentrBin()*GetNZvertBin()*GetNRPBin()] ; |
1445 | ||
1446 | for(Int_t ic=0; ic<GetNCentrBin(); ic++) | |
2e876d85 | 1447 | { |
283f989c | 1448 | for(Int_t iz=0; iz<GetNZvertBin(); iz++) |
2e876d85 | 1449 | { |
283f989c | 1450 | for(Int_t irp=0; irp<GetNRPBin(); irp++) |
1451 | { | |
1452 | //printf("GetCreateOutputObjects - Bins : cent %d, vz %d, RP %d, event %d/%d\n", | |
1453 | // ic,iz, irp, ic*GetNZvertBin()*GetNRPBin()+iz*GetNRPBin()+irp,GetNZvertBin()*GetNRPBin()*GetNCentrBin()); | |
1454 | fListMixEvents[ic*GetNZvertBin()*GetNRPBin()+iz*GetNRPBin()+irp] = new TList() ; | |
1455 | fListMixEvents[ic*GetNZvertBin()*GetNRPBin()+iz*GetNRPBin()+irp]->SetOwner(kFALSE); | |
1456 | } | |
2e876d85 | 1457 | } |
283f989c | 1458 | } |
1459 | } | |
1460 | ||
1461 | //Init the list in the reader if not done previously | |
1462 | if(!GetReader()->ListWithMixedEventsForTracksExists() && fUseMixStoredInReader) | |
1463 | { | |
1464 | printf("%s : Set the list of events \n",GetInputAODName().Data()); | |
1465 | GetReader()->SetListWithMixedEventsForTracks(fListMixEvents); | |
1466 | } | |
029dea5a | 1467 | |
2e876d85 | 1468 | fhEventBin=new TH1I("hEventBin","Number of real events per bin(cen,vz,rp)", |
1469 | GetNCentrBin()*GetNZvertBin()*GetNRPBin()+1,0, | |
1470 | GetNCentrBin()*GetNZvertBin()*GetNRPBin()+1) ; | |
1471 | fhEventBin->SetXTitle("bin"); | |
1472 | outputContainer->Add(fhEventBin) ; | |
283f989c | 1473 | |
2e876d85 | 1474 | fhEventMixBin=new TH1I("hEventMixBin","Number of events per bin(cen,vz,rp)", |
1475 | GetNCentrBin()*GetNZvertBin()*GetNRPBin()+1,0, | |
1476 | GetNCentrBin()*GetNZvertBin()*GetNRPBin()+1) ; | |
1477 | fhEventMixBin->SetXTitle("bin"); | |
1478 | outputContainer->Add(fhEventMixBin) ; | |
283f989c | 1479 | |
029dea5a | 1480 | fhNtracksAll=new TH1F("hNtracksAll","Number of tracks w/o event trigger",2000,0,2000); |
1481 | outputContainer->Add(fhNtracksAll); | |
1482 | ||
1483 | fhNtracksTrigger=new TH1F("hNtracksTriggerEvent","Number of tracks w/ event trigger",2000,0,2000); | |
1484 | outputContainer->Add(fhNtracksTrigger); | |
1485 | ||
2e876d85 | 1486 | fhNtracksMB=new TH1F("hNtracksMBEvent","Number of tracks w/ event trigger kMB",2000,0,2000); |
1487 | outputContainer->Add(fhNtracksMB); | |
029dea5a | 1488 | |
1489 | fhMixDeltaPhiCharged = new TH2F | |
1490 | ("hMixDeltaPhiCharged","Mixed event : #phi_{trigger} - #phi_{h^{#pm}} vs p_{T trigger}", | |
62f2fe4d | 1491 | nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax); |
029dea5a | 1492 | fhMixDeltaPhiCharged->SetYTitle("#Delta #phi"); |
1493 | fhMixDeltaPhiCharged->SetXTitle("p_{T trigger} (GeV/c)"); | |
1494 | outputContainer->Add(fhMixDeltaPhiCharged); | |
283f989c | 1495 | |
029dea5a | 1496 | fhMixDeltaPhiDeltaEtaCharged = new TH2F |
1497 | ("hMixDeltaPhiDeltaEtaCharged","Mixed event : #phi_{trigger} - #phi_{h^{#pm}} vs #eta_{trigger} - #eta_{h^{#pm}}", | |
62f2fe4d | 1498 | ndeltaphibins ,deltaphimin,deltaphimax,ndeltaetabins ,deltaetamin,deltaetamax); |
029dea5a | 1499 | fhMixDeltaPhiDeltaEtaCharged->SetXTitle("#Delta #phi"); |
1500 | fhMixDeltaPhiDeltaEtaCharged->SetYTitle("#Delta #eta"); | |
1501 | outputContainer->Add(fhMixDeltaPhiDeltaEtaCharged); | |
283f989c | 1502 | |
029dea5a | 1503 | fhMixDeltaPhiChargedAssocPtBin = new TH2F*[fNAssocPtBins] ; |
1504 | fhMixDeltaPhiDeltaEtaChargedAssocPtBin = new TH2F*[fNAssocPtBins] ; | |
283f989c | 1505 | |
029dea5a | 1506 | for(Int_t i = 0 ; i < fNAssocPtBins ; i++) |
1507 | { | |
1508 | fhMixDeltaPhiChargedAssocPtBin[i] = new TH2F(Form("hMixDeltaPhiChargedAssocPtBin%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]), | |
283f989c | 1509 | Form("Mixed event #Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]), |
1510 | nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax); | |
029dea5a | 1511 | fhMixDeltaPhiChargedAssocPtBin[i]->SetXTitle("p_{T trigger}"); |
1512 | fhMixDeltaPhiChargedAssocPtBin[i]->SetYTitle("#Delta #phi"); | |
283f989c | 1513 | |
029dea5a | 1514 | fhMixDeltaPhiDeltaEtaChargedAssocPtBin[i] = new TH2F(Form("hMixDeltaPhiDeltaEtaChargedAssocPtBin%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]), |
283f989c | 1515 | Form("Mixed event #Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]), |
1516 | ndeltaphibins ,deltaphimin,deltaphimax,ndeltaetabins ,deltaetamin,deltaetamax); | |
029dea5a | 1517 | fhMixDeltaPhiDeltaEtaChargedAssocPtBin[i]->SetXTitle("#Delta #phi"); |
1518 | fhMixDeltaPhiDeltaEtaChargedAssocPtBin[i]->SetYTitle("#Delta #eta"); | |
1519 | ||
1520 | outputContainer->Add(fhMixDeltaPhiChargedAssocPtBin[i]); | |
1521 | outputContainer->Add(fhMixDeltaPhiDeltaEtaChargedAssocPtBin[i]); | |
1522 | ||
050ad675 | 1523 | } |
029dea5a | 1524 | } |
050ad675 | 1525 | |
e09cf5ef | 1526 | return outputContainer; |
1527 | ||
1528 | } | |
1529 | ||
907b38cd | 1530 | //_________________________________________________________________________________________________ |
1531 | Bool_t AliAnaParticleHadronCorrelation::GetDecayPhotonMomentum(const AliAODPWG4Particle* trigger, | |
1532 | TLorentzVector & mom1, | |
1533 | TLorentzVector & mom2) | |
1534 | { | |
1535 | // Get the momentum of the pi0/eta assigned decay photons | |
1536 | // In case of pi0/eta trigger, we may want to check their decay correlation, | |
1537 | // get their decay children | |
1538 | ||
1539 | Int_t indexPhoton1 = trigger->GetCaloLabel(0); | |
1540 | Int_t indexPhoton2 = trigger->GetCaloLabel(1); | |
1541 | Float_t ptTrig = trigger->Pt(); | |
1542 | ||
1543 | if(indexPhoton1!=-1 || indexPhoton2!=-1) return kFALSE; | |
1544 | ||
1545 | if(GetDebug() > 1) | |
1546 | printf("AliAnaParticleHadronCorrelation::GetDecayPhotonMomentum() - indexPhoton1 = %d, indexPhoton2 = %d \n", indexPhoton1, indexPhoton2); | |
1547 | ||
1548 | TObjArray * clusters = 0x0 ; | |
1549 | if(trigger->GetDetector()=="EMCAL") clusters = GetEMCALClusters() ; | |
1550 | else clusters = GetPHOSClusters() ; | |
1551 | ||
1552 | for(Int_t iclus = 0; iclus < clusters->GetEntriesFast(); iclus++) | |
1553 | { | |
1554 | AliVCluster * photon = (AliVCluster*) (clusters->At(iclus)); | |
1555 | if(photon->GetID()==indexPhoton1) | |
1556 | { | |
1557 | photon->GetMomentum(mom1,GetVertex(0)) ; | |
1558 | if(ptTrig) fhPtPi0DecayRatio->Fill(ptTrig, mom1.Pt()/ptTrig); | |
1559 | } | |
1560 | if(photon->GetID()==indexPhoton2) | |
1561 | { | |
1562 | photon->GetMomentum(mom1,GetVertex(0)) ; | |
1563 | if(ptTrig > 0) fhPtPi0DecayRatio->Fill(ptTrig, mom2.Pt()/ptTrig); | |
1564 | } | |
1565 | ||
1566 | if(GetDebug() > 1)printf("AliAnaParticleHadronCorrelation::GetDecayPhotonMomentum() - Photon1 = %f, Photon2 = %f \n", mom1.Pt(), mom2.Pt()); | |
1567 | ||
1568 | } //cluster loop | |
1569 | ||
1570 | return kTRUE; | |
1571 | ||
1572 | } | |
1573 | ||
05d0d05d | 1574 | //____________________________________________________ |
e09cf5ef | 1575 | void AliAnaParticleHadronCorrelation::InitParameters() |
1576 | { | |
1577 | ||
1578 | //Initialize the parameters of the analysis. | |
1579 | SetInputAODName("PWG4Particle"); | |
1580 | SetAODObjArrayName("Hadrons"); | |
1581 | AddToHistogramsName("AnaHadronCorr_"); | |
045396c8 | 1582 | |
e09cf5ef | 1583 | SetPtCutRange(0.,300); |
045396c8 | 1584 | fDeltaPhiMinCut = 1.5 ; |
1585 | fDeltaPhiMaxCut = 4.5 ; | |
1586 | fSelectIsolated = kFALSE; | |
1587 | fMakeSeveralUE = kFALSE; | |
1588 | fUeDeltaPhiMinCut = 1. ; | |
1589 | fUeDeltaPhiMaxCut = 1.5 ; | |
907b38cd | 1590 | |
045396c8 | 1591 | fNeutralCorr = kFALSE ; |
1592 | fPi0Trigger = kFALSE ; | |
907b38cd | 1593 | fDecayTrigger = kFALSE ; |
1594 | fHMPIDCorrelation = kFALSE ; | |
045396c8 | 1595 | |
3f150b4b | 1596 | fMakeAbsoluteLeading = kTRUE; |
1597 | fMakeNearSideLeading = kFALSE; | |
1598 | ||
050ad675 | 1599 | fNAssocPtBins = 9 ; |
1600 | fAssocPtBinLimit[0] = 0.2 ; | |
1601 | fAssocPtBinLimit[1] = 2.0 ; | |
1602 | fAssocPtBinLimit[2] = 4.0 ; | |
1603 | fAssocPtBinLimit[3] = 6.0 ; | |
1604 | fAssocPtBinLimit[4] = 8.0 ; | |
1605 | fAssocPtBinLimit[5] = 10. ; | |
1606 | fAssocPtBinLimit[6] = 12. ; | |
1607 | fAssocPtBinLimit[7] = 15. ; | |
1608 | fAssocPtBinLimit[8] = 25. ; | |
1609 | fAssocPtBinLimit[9] = 50. ; | |
045396c8 | 1610 | |
283f989c | 1611 | fUseMixStoredInReader = kTRUE; |
1612 | ||
e09cf5ef | 1613 | } |
1614 | ||
05d0d05d | 1615 | //__________________________________________________________ |
e09cf5ef | 1616 | void AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() |
1617 | { | |
1618 | //Particle-Hadron Correlation Analysis, fill AODs | |
1619 | ||
547c2f01 | 1620 | if(!GetInputAODBranch()) |
1621 | { | |
e09cf5ef | 1622 | printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - No input particles in AOD with name branch < %s >, STOP \n",GetInputAODName().Data()); |
1623 | abort(); | |
1624 | } | |
1625 | ||
547c2f01 | 1626 | if(strcmp(GetInputAODBranch()->GetClass()->GetName(), "AliAODPWG4ParticleCorrelation")) |
1627 | { | |
e09cf5ef | 1628 | printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - Wrong type of AOD object, change AOD class name in input AOD: It should be <AliAODPWG4ParticleCorrelation> and not <%s> \n",GetInputAODBranch()->GetClass()->GetName()); |
1629 | abort(); | |
1630 | } | |
1631 | ||
283f989c | 1632 | if(GetDebug() > 1) |
1633 | { | |
e09cf5ef | 1634 | printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - Begin hadron correlation analysis, fill AODs \n"); |
1635 | printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - In particle branch aod entries %d\n", GetInputAODBranch()->GetEntriesFast()); | |
66e64043 | 1636 | printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - In CTS aod entries %d\n", GetCTSTracks() ->GetEntriesFast()); |
e09cf5ef | 1637 | printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - In EMCAL aod entries %d\n", GetEMCALClusters()->GetEntriesFast()); |
66e64043 | 1638 | printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - In PHOS aod entries %d\n", GetPHOSClusters() ->GetEntriesFast()); |
e09cf5ef | 1639 | } |
1640 | ||
045396c8 | 1641 | //Get the vertex and check it is not too large in z |
1642 | Double_t v[3] = {0,0,0}; //vertex ; | |
1643 | GetReader()->GetVertex(v); | |
1644 | if(!GetMixedEvent() && TMath::Abs(v[2]) > GetZvertexCut()) return ; | |
1645 | ||
029dea5a | 1646 | // Fill the pool with tracks if requested |
2e876d85 | 1647 | if(DoOwnMix()) FillChargedEventMixPool(); |
029dea5a | 1648 | |
045396c8 | 1649 | //Loop on stored AOD particles, find leading trigger |
66e64043 | 1650 | Double_t ptTrig = fMinTriggerPt ; |
045396c8 | 1651 | fLeadingTriggerIndex = -1 ; |
1652 | Int_t naod = GetInputAODBranch()->GetEntriesFast() ; | |
04f7a616 | 1653 | for(Int_t iaod = 0; iaod < naod ; iaod++) |
1654 | { | |
e09cf5ef | 1655 | AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod)); |
045396c8 | 1656 | |
04f7a616 | 1657 | // Vertex cut in case of mixing |
1658 | Int_t check = CheckMixedEventVertex(particle->GetCaloLabel(0), particle->GetTrackLabel(0)); | |
1659 | if(check == 0) continue; | |
1660 | if(check == -1) return; | |
1661 | ||
045396c8 | 1662 | // find the leading particles with highest momentum |
547c2f01 | 1663 | if (particle->Pt() > ptTrig) |
1664 | { | |
045396c8 | 1665 | ptTrig = particle->Pt() ; |
1666 | fLeadingTriggerIndex = iaod ; | |
1667 | } | |
1668 | }// finish search of leading trigger particle | |
e09cf5ef | 1669 | |
66e64043 | 1670 | |
e09cf5ef | 1671 | //Do correlation with leading particle |
547c2f01 | 1672 | if(fLeadingTriggerIndex >= 0) |
1673 | { | |
e09cf5ef | 1674 | |
045396c8 | 1675 | AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(fLeadingTriggerIndex)); |
1676 | ||
1677 | //check if the particle is isolated or if we want to take the isolation into account | |
1678 | if(OnlyIsolated() && !particle->IsIsolated()) return; | |
1679 | ||
e09cf5ef | 1680 | //Make correlation with charged hadrons |
045396c8 | 1681 | Bool_t okcharged = kTRUE; |
1682 | Bool_t okneutral = kTRUE; | |
e09cf5ef | 1683 | if(GetReader()->IsCTSSwitchedOn() ) |
045396c8 | 1684 | okcharged = MakeChargedCorrelation(particle, GetCTSTracks(),kFALSE); |
e09cf5ef | 1685 | |
1686 | TObjArray * pi0list = (TObjArray*) GetAODBranch(fPi0AODBranchName); //For the future, foresee more possible pi0 lists | |
1687 | if(fNeutralCorr && pi0list && pi0list->GetEntriesFast() > 0) | |
045396c8 | 1688 | okneutral = MakeNeutralCorrelation(particle, pi0list,kFALSE); |
e09cf5ef | 1689 | |
1690 | }//Correlate leading | |
1691 | ||
1692 | if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - End fill AODs \n"); | |
1693 | ||
1694 | } | |
1695 | ||
05d0d05d | 1696 | //_________________________________________________________________ |
e09cf5ef | 1697 | void AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() |
1698 | { | |
1699 | //Particle-Hadron Correlation Analysis, fill histograms | |
1700 | ||
3f150b4b | 1701 | if(!GetInputAODBranch()) |
1702 | { | |
e09cf5ef | 1703 | printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - No input particles in AOD with name branch < %s >, STOP \n",GetInputAODName().Data()); |
1704 | abort(); | |
1705 | } | |
1706 | ||
3f150b4b | 1707 | if(GetDebug() > 1) |
1708 | { | |
e09cf5ef | 1709 | printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - Begin hadron correlation analysis, fill histograms \n"); |
1710 | printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - In particle branch aod entries %d\n", GetInputAODBranch()->GetEntriesFast()); | |
1711 | } | |
babcbc9d | 1712 | |
e09cf5ef | 1713 | //Get the vertex and check it is not too large in z |
1714 | Double_t v[3] = {0,0,0}; //vertex ; | |
1715 | GetReader()->GetVertex(v); | |
1716 | if(!GetMixedEvent() && TMath::Abs(v[2]) > GetZvertexCut()) return ; | |
1717 | ||
1718 | //Loop on stored AOD particles, find leading | |
66e64043 | 1719 | Double_t ptTrig = fMinTriggerPt; |
04f7a616 | 1720 | if(fLeadingTriggerIndex < 0) |
1721 | { | |
1722 | //Search leading if not done before | |
045396c8 | 1723 | Int_t naod = GetInputAODBranch()->GetEntriesFast() ; |
547c2f01 | 1724 | for(Int_t iaod = 0; iaod < naod ; iaod++) |
1725 | { //loop on input trigger AOD file | |
045396c8 | 1726 | AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod)); |
04f7a616 | 1727 | |
1728 | // Vertex cut in case of mixing | |
1729 | Int_t check = CheckMixedEventVertex(particle->GetCaloLabel(0), particle->GetTrackLabel(0)); | |
1730 | if(check == 0) continue; | |
1731 | if(check == -1) return; | |
1732 | ||
045396c8 | 1733 | //check if the particle is isolated or if we want to take the isolation into account |
1734 | if(OnlyIsolated() && !particle->IsIsolated()) continue; | |
e09cf5ef | 1735 | |
045396c8 | 1736 | //find the leading particles with highest momentum |
547c2f01 | 1737 | if (particle->Pt() > ptTrig) |
1738 | { | |
045396c8 | 1739 | ptTrig = particle->Pt() ; |
1740 | fLeadingTriggerIndex = iaod ; | |
e09cf5ef | 1741 | } |
547c2f01 | 1742 | |
1743 | }// Finish search of leading trigger particle | |
1744 | }// Search leading if not done before | |
045396c8 | 1745 | |
547c2f01 | 1746 | if(fLeadingTriggerIndex >= 0 ) |
1747 | { //using trigger particle to do correlations | |
1748 | ||
045396c8 | 1749 | AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(fLeadingTriggerIndex)); |
06d3bad7 | 1750 | |
547c2f01 | 1751 | // Check if trigger is in fiducial region |
1752 | if(IsFiducialCutOn()) | |
1753 | { | |
1754 | Bool_t in = GetFiducialCut()->IsInFiducialCut(*particle->Momentum(),particle->GetDetector()) ; | |
1755 | if(! in ) return ; | |
1756 | } | |
1757 | ||
1758 | // Check if the particle is isolated or if we want to take the isolation into account | |
045396c8 | 1759 | if(OnlyIsolated() && !particle->IsIsolated()) return; |
e09cf5ef | 1760 | |
547c2f01 | 1761 | // Make correlation with charged hadrons |
045396c8 | 1762 | Bool_t okcharged = kTRUE; |
1763 | Bool_t okneutral = kTRUE; | |
547c2f01 | 1764 | if(GetReader()->IsCTSSwitchedOn() ) |
1765 | { | |
045396c8 | 1766 | okcharged = MakeChargedCorrelation(particle, GetCTSTracks(),kTRUE); |
547c2f01 | 1767 | if(IsDataMC()) |
1768 | { | |
045396c8 | 1769 | MakeMCChargedCorrelation(particle); |
1770 | } | |
a5f1e836 | 1771 | } |
1772 | ||
e09cf5ef | 1773 | TObjArray * pi0list = (TObjArray*) GetAODBranch(fPi0AODBranchName); //For the future, foresee more possible pi0 lists |
547c2f01 | 1774 | if(fNeutralCorr && pi0list) |
1775 | { | |
a5f1e836 | 1776 | if(pi0list->GetEntriesFast() > 0) |
1777 | okneutral = MakeNeutralCorrelation(particle, pi0list,kTRUE); | |
1778 | } | |
e09cf5ef | 1779 | |
045396c8 | 1780 | // Fill leading particle histogram if correlation went well and |
1781 | // no problem was found, like not absolute leading, or bad vertex in mixing. | |
547c2f01 | 1782 | if(okcharged && okneutral) |
1783 | { | |
045396c8 | 1784 | fhPtLeading->Fill(particle->Pt()); |
1785 | Float_t phi = particle->Phi(); | |
1786 | if(phi<0)phi+=TMath::TwoPi(); | |
1787 | fhPhiLeading->Fill(particle->Pt(), phi); | |
1788 | fhEtaLeading->Fill(particle->Pt(), particle->Eta()); | |
283f989c | 1789 | //printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - Leading particle : pt %f, eta %f, phi %f\n",particle->Pt(),particle->Eta(),phi); |
1790 | ||
045396c8 | 1791 | }//ok charged && neutral |
e09cf5ef | 1792 | }//Aod branch loop |
1793 | ||
045396c8 | 1794 | //Reinit for next event |
1795 | fLeadingTriggerIndex = -1; | |
e09cf5ef | 1796 | |
045396c8 | 1797 | if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - End fill histograms \n"); |
e09cf5ef | 1798 | } |
1799 | ||
c5693f62 | 1800 | //___________________________________________________________________________________________________________ |
045396c8 | 1801 | Bool_t AliAnaParticleHadronCorrelation::MakeChargedCorrelation(AliAODPWG4ParticleCorrelation *aodParticle, |
c5693f62 | 1802 | const TObjArray* pl, const Bool_t bFillHisto) |
e09cf5ef | 1803 | { |
1804 | // Charged Hadron Correlation Analysis | |
283f989c | 1805 | if(GetDebug() > 1) |
1806 | printf("AliAnaParticleHadronCorrelation::MakeChargedCorrelation() - Make trigger particle - charged hadron correlation \n"); | |
907b38cd | 1807 | |
1808 | Float_t phiTrig = aodParticle->Phi(); | |
1809 | Float_t etaTrig = aodParticle->Eta(); | |
1810 | Float_t ptTrig = aodParticle->Pt(); | |
1811 | Bool_t decay = aodParticle->IsTagged(); | |
1812 | ||
1813 | Float_t pt = -100. ; | |
1814 | Float_t zT = -100. ; | |
1815 | Float_t xE = -100. ; | |
1816 | Float_t hbpXE = -100. ; | |
1817 | Float_t hbpZT = -100. ; | |
1818 | Float_t phi = -100. ; | |
1819 | Float_t eta = -100. ; | |
1820 | Float_t pout = -100. ; | |
1821 | Float_t deltaPhi = -100. ; | |
e09cf5ef | 1822 | |
907b38cd | 1823 | TVector3 p3; |
1824 | TLorentzVector photonMom ; | |
1825 | TObjArray * reftracks = 0x0; | |
1826 | Int_t nrefs = 0; | |
1827 | Int_t nTracks = GetCTSTracks()->GetEntriesFast() ; | |
1828 | ||
1829 | // Mixed event settings | |
1830 | Int_t evtIndex11 = -1 ; // cluster trigger or pi0 trigger | |
045396c8 | 1831 | Int_t evtIndex12 = -1 ; // pi0 trigger |
1832 | Int_t evtIndex13 = -1 ; // charged trigger | |
045396c8 | 1833 | |
1834 | Double_t v[3] = {0,0,0}; //vertex ; | |
e09cf5ef | 1835 | GetReader()->GetVertex(v); |
e09cf5ef | 1836 | |
04f7a616 | 1837 | if (GetMixedEvent()) |
1838 | { | |
e09cf5ef | 1839 | evtIndex11 = GetMixedEvent()->EventIndexForCaloCluster(aodParticle->GetCaloLabel(0)) ; |
1840 | evtIndex12 = GetMixedEvent()->EventIndexForCaloCluster(aodParticle->GetCaloLabel(1)) ; | |
1841 | evtIndex13 = GetMixedEvent()->EventIndex(aodParticle->GetTrackLabel(0)) ; | |
1842 | } | |
1843 | ||
907b38cd | 1844 | // In case of pi0/eta trigger, we may want to check their decay correlation, |
1845 | // get their decay children | |
1846 | TLorentzVector decayMom1; | |
1847 | TLorentzVector decayMom2; | |
1848 | Bool_t decayFound = kFALSE; | |
1849 | if(fPi0Trigger && bFillHisto) decayFound = GetDecayPhotonMomentum(aodParticle,decayMom1, decayMom2); | |
1850 | ||
1851 | //----------------------------------------------------------------------- | |
e09cf5ef | 1852 | //Track loop, select tracks with good pt, phi and fill AODs or histograms |
907b38cd | 1853 | //----------------------------------------------------------------------- |
1854 | ||
547c2f01 | 1855 | for(Int_t ipr = 0;ipr < pl->GetEntriesFast() ; ipr ++ ) |
1856 | { | |
e09cf5ef | 1857 | AliVTrack * track = (AliVTrack *) (pl->At(ipr)) ; |
045396c8 | 1858 | |
e09cf5ef | 1859 | Double_t mom[3] = {track->Px(),track->Py(),track->Pz()}; |
1860 | p3.SetXYZ(mom[0],mom[1],mom[2]); | |
1861 | pt = p3.Pt(); | |
e09cf5ef | 1862 | eta = p3.Eta(); |
1863 | phi = p3.Phi() ; | |
1864 | if(phi < 0) phi+=TMath::TwoPi(); | |
045396c8 | 1865 | |
e09cf5ef | 1866 | //Select only hadrons in pt range |
66e64043 | 1867 | if(pt < fMinAssocPt || pt > fMaxAssocPt) continue ; |
1868 | ||
e09cf5ef | 1869 | //remove trigger itself for correlation when use charged triggers |
1870 | if( track->GetID() == aodParticle->GetTrackLabel(0) || track->GetID() == aodParticle->GetTrackLabel(1) || | |
66e64043 | 1871 | track->GetID() == aodParticle->GetTrackLabel(2) || track->GetID() == aodParticle->GetTrackLabel(3) ) |
045396c8 | 1872 | continue ; |
1873 | ||
045396c8 | 1874 | //jump out this event if near side associated particle pt larger than trigger |
3f150b4b | 1875 | if (fMakeNearSideLeading) |
547c2f01 | 1876 | { |
3f150b4b | 1877 | if(pt > ptTrig && TMath::Abs(phi-phiTrig) < TMath::PiOver2()) return kFALSE; |
1878 | } | |
1879 | //jump out this event if there is any other particle with pt larger than trigger | |
1880 | else if(fMakeAbsoluteLeading) | |
1881 | { | |
1882 | if(pt > ptTrig) return kFALSE; | |
045396c8 | 1883 | } |
1884 | ||
1885 | //Only for mixed event | |
1886 | Int_t evtIndex2 = 0 ; | |
04f7a616 | 1887 | if (GetMixedEvent()) |
1888 | { | |
045396c8 | 1889 | evtIndex2 = GetMixedEvent()->EventIndex(track->GetID()) ; |
1890 | if (evtIndex11 == evtIndex2 || evtIndex12 == evtIndex2 || evtIndex13 == evtIndex2 ) // photon and track from different events | |
1891 | continue ; | |
1892 | //vertex cut | |
1893 | if (TMath::Abs(GetVertex(evtIndex2)[2]) > GetZvertexCut()) | |
1894 | return kFALSE; | |
1895 | } | |
1896 | ||
045396c8 | 1897 | // Fill Histograms |
3f150b4b | 1898 | if(bFillHisto) |
907b38cd | 1899 | { |
66e64043 | 1900 | |
283f989c | 1901 | if(GetDebug() > 2 ) |
1902 | printf("AliAnaParticleHadronCorrelation::MakeChargedCorrelation() - Selected charge for momentum imbalance: pt %2.2f, phi %2.2f, eta %2.2f \n",pt,phi,eta); | |
907b38cd | 1903 | |
1904 | // Set the pt associated bin for the defined bins | |
1905 | Int_t assocBin = -1; | |
1906 | for(Int_t i = 0 ; i < fNAssocPtBins ; i++) | |
547c2f01 | 1907 | { |
907b38cd | 1908 | if(pt > fAssocPtBinLimit[i] && pt < fAssocPtBinLimit[i+1]) assocBin= i; |
1909 | } | |
66e64043 | 1910 | |
907b38cd | 1911 | // Azimuthal Angle |
1912 | // calculate deltaPhi for later, shift when needed | |
1913 | FillChargedAngularCorrelationHistograms(pt, ptTrig, assocBin, phi, phiTrig, deltaPhi, | |
1914 | eta, etaTrig, decay, track->GetHMPIDsignal(),nTracks); | |
05d0d05d | 1915 | |
907b38cd | 1916 | // Imbalance zT/xE/pOut |
1917 | zT = pt/ptTrig ; | |
2e876d85 | 1918 | if(zT > 0 ) hbpZT = TMath::Log10(1./zT); |
907b38cd | 1919 | else hbpZT =-100; |
e09cf5ef | 1920 | |
907b38cd | 1921 | xE =-pt/ptTrig*TMath::Cos(deltaPhi); // -(px*pxTrig+py*pyTrig)/(ptTrig*ptTrig); |
1922 | //if(xE <0.)xE =-xE; | |
2e876d85 | 1923 | if(xE > 0 ) hbpXE = TMath::Log10(1./xE); |
907b38cd | 1924 | else hbpXE =-100; |
1925 | ||
1926 | pout = pt*TMath::Sin(deltaPhi) ; | |
66e64043 | 1927 | |
907b38cd | 1928 | //delta phi cut for momentum imbalance correlation |
547c2f01 | 1929 | if ( (deltaPhi > fDeltaPhiMinCut) && (deltaPhi < fDeltaPhiMaxCut) ) |
1930 | { | |
3f150b4b | 1931 | |
907b38cd | 1932 | FillChargedMomentumImbalanceHistograms(ptTrig, pt, xE, hbpXE, zT, hbpZT, pout, deltaPhi, |
1933 | nTracks, track->Charge(), assocBin, decay); | |
3f150b4b | 1934 | |
907b38cd | 1935 | } |
547c2f01 | 1936 | else if ( (deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < fUeDeltaPhiMaxCut) ) |
1937 | { //UE study | |
3f150b4b | 1938 | |
907b38cd | 1939 | FillChargedUnderlyingEventHistograms(ptTrig, pt, deltaPhi, nTracks); |
3f150b4b | 1940 | |
907b38cd | 1941 | } |
e09cf5ef | 1942 | |
907b38cd | 1943 | if(fPi0Trigger && decayFound) |
1944 | FillDecayPhotonCorrelationHistograms(pt, phi, decayMom1,decayMom2, kTRUE) ; | |
e09cf5ef | 1945 | |
1946 | //several UE calculation | |
907b38cd | 1947 | if(fMakeSeveralUE) FillChargedUnderlyingEventSidesHistograms(ptTrig,pt,xE,hbpXE,zT,hbpZT,deltaPhi); |
1948 | ||
e09cf5ef | 1949 | } //Fill histogram |
547c2f01 | 1950 | else |
1951 | { | |
e09cf5ef | 1952 | nrefs++; |
547c2f01 | 1953 | if(nrefs==1) |
1954 | { | |
e09cf5ef | 1955 | reftracks = new TObjArray(0); |
045396c8 | 1956 | TString trackname = Form("%s+Tracks", GetAODObjArrayName().Data()); |
1957 | reftracks->SetName(trackname.Data()); | |
029dea5a | 1958 | reftracks->SetOwner(kFALSE); |
e09cf5ef | 1959 | } |
029dea5a | 1960 | |
e09cf5ef | 1961 | reftracks->Add(track); |
029dea5a | 1962 | |
e09cf5ef | 1963 | }//aod particle loop |
1964 | }// track loop | |
1965 | ||
1966 | //Fill AOD with reference tracks, if not filling histograms | |
547c2f01 | 1967 | if(!bFillHisto && reftracks) |
1968 | { | |
e09cf5ef | 1969 | aodParticle->AddObjArray(reftracks); |
1970 | } | |
283f989c | 1971 | |
029dea5a | 1972 | //Own mixed event, add event and remove previous or fill the mixed histograms |
2e876d85 | 1973 | if(DoOwnMix() && bFillHisto) |
029dea5a | 1974 | { |
1975 | MakeChargedMixCorrelation(aodParticle); | |
1976 | } | |
1977 | ||
045396c8 | 1978 | return kTRUE; |
e09cf5ef | 1979 | |
1980 | } | |
1981 | ||
029dea5a | 1982 | |
1983 | //______________________________________________________________________________________________________________________ | |
1984 | void AliAnaParticleHadronCorrelation::MakeChargedMixCorrelation(AliAODPWG4ParticleCorrelation *aodParticle) | |
1985 | { | |
2e876d85 | 1986 | // Mix current trigger with tracks in another MB event |
029dea5a | 1987 | |
2e876d85 | 1988 | if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation() - Make trigger particle - charged hadron mixed event correlation \n"); |
029dea5a | 1989 | |
1990 | if(GetMixedEvent()) return; // This is not the mixed event from general mixing frame | |
1991 | ||
029dea5a | 1992 | // Get the event with similar caracteristics |
2e876d85 | 1993 | //printf("MakeChargedMixCorrelation for %s\n",GetInputAODName().Data()); |
1994 | ||
1995 | AliAnalysisManager * manager = AliAnalysisManager::GetAnalysisManager(); | |
1996 | AliInputEventHandler * inputHandler = dynamic_cast<AliInputEventHandler*>(manager->GetInputEventHandler()); | |
1997 | ||
1998 | if(!(inputHandler->IsEventSelected( ) & GetReader()->GetEventTriggerMask())) return; | |
029dea5a | 1999 | |
2000 | // Get the pool, check if it exits | |
2e876d85 | 2001 | Int_t eventBin = GetEventMixBin(); |
2002 | ||
2003 | fhEventBin->Fill(eventBin); | |
029dea5a | 2004 | |
2e876d85 | 2005 | //Check that the bin exists, if not (bad determination of RP, centrality or vz bin) do nothing |
2006 | if(eventBin < 0) return; | |
029dea5a | 2007 | |
283f989c | 2008 | TList * pool = 0; |
2009 | if(fUseMixStoredInReader) pool = GetReader()->GetListWithMixedEventsForTracks(eventBin); | |
2010 | else pool = fListMixEvents[eventBin]; | |
2e876d85 | 2011 | |
2012 | if(!pool) return ; | |
029dea5a | 2013 | |
2014 | Double_t ptTrig = aodParticle->Pt(); | |
2015 | Double_t etaTrig = aodParticle->Eta(); | |
2016 | Double_t phiTrig = aodParticle->Phi(); | |
2017 | if(phiTrig < 0.) phiTrig+=TMath::TwoPi(); | |
2018 | ||
2e876d85 | 2019 | if(GetDebug() > 1) |
283f989c | 2020 | printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation() - Pool bin %d size %d, leading trigger pt=%f, phi=%f, eta=%f\n", |
2021 | eventBin,pool->GetSize(), ptTrig,phiTrig,etaTrig); | |
029dea5a | 2022 | |
2023 | Double_t ptAssoc = -999.; | |
2e876d85 | 2024 | Double_t phiAssoc = -999.; |
029dea5a | 2025 | Double_t etaAssoc = -999.; |
2026 | Double_t deltaPhi = -999.; | |
2027 | Double_t deltaEta = -999.; | |
2028 | ||
2e876d85 | 2029 | //Start from first event in pool except if in this same event the pool was filled |
283f989c | 2030 | Int_t ev0 = 0; |
2031 | if(GetReader()->GetLastTracksMixedEvent() == GetEventNumber()) ev0 = 1; | |
2032 | for(Int_t ev=ev0; ev < pool->GetSize(); ev++) | |
029dea5a | 2033 | { |
2034 | TObjArray* bgTracks = static_cast<TObjArray*>(pool->At(ev)); | |
2035 | ||
2e876d85 | 2036 | fhEventMixBin->Fill(eventBin); |
029dea5a | 2037 | |
2e876d85 | 2038 | Int_t nTracks=bgTracks->GetEntriesFast(); |
2039 | //printf("\t Read Pool event %d, nTracks %d\n",ev,nTracks); | |
2040 | ||
029dea5a | 2041 | for(Int_t j1 = 0;j1 <nTracks; j1++ ) |
2042 | { | |
2043 | AliAODPWG4Particle *track = (AliAODPWG4Particle*) bgTracks->At(j1) ; | |
2044 | ||
2045 | if(!track) continue; | |
2046 | ||
2047 | ptAssoc = track->Pt(); | |
2048 | etaAssoc = track->Eta(); | |
2049 | phiAssoc = track->Phi() ; | |
2050 | if(phiAssoc < 0) phiAssoc+=TMath::TwoPi(); | |
2e876d85 | 2051 | |
029dea5a | 2052 | if(IsFiducialCutOn()) |
2053 | { | |
2054 | Bool_t in = GetFiducialCut()->IsInFiducialCut(*aodParticle->Momentum(),"CTS") ; | |
2055 | if(!in) continue ; | |
2056 | } | |
2057 | ||
2058 | deltaPhi = phiTrig-phiAssoc; | |
2059 | if(deltaPhi < -TMath::PiOver2()) deltaPhi+=TMath::TwoPi(); | |
2060 | if(deltaPhi > 3*TMath::PiOver2()) deltaPhi-=TMath::TwoPi(); | |
2061 | deltaEta = etaTrig-etaAssoc; | |
2062 | ||
2063 | if(GetDebug()>0) | |
2064 | printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation(): deltaPhi= %f, deltaEta=%f\n",deltaPhi, deltaEta); | |
2065 | ||
2066 | // Set the pt associated bin for the defined bins | |
2067 | Int_t assocBin = -1; | |
2068 | for(Int_t i = 0 ; i < fNAssocPtBins ; i++) | |
2069 | { | |
2070 | if(ptAssoc > fAssocPtBinLimit[i] && ptAssoc < fAssocPtBinLimit[i+1]) assocBin= i; | |
2071 | } | |
2072 | ||
2073 | fhMixDeltaPhiCharged ->Fill(ptTrig, deltaPhi); | |
2074 | fhMixDeltaPhiDeltaEtaCharged->Fill(deltaPhi, deltaEta); | |
2075 | ||
2076 | if(assocBin < 0) continue ; // this pt bin was not considered | |
2077 | ||
2078 | fhMixDeltaPhiChargedAssocPtBin[assocBin] ->Fill(ptTrig, deltaPhi); | |
2079 | fhMixDeltaPhiDeltaEtaChargedAssocPtBin[assocBin]->Fill(deltaPhi, deltaEta); | |
2080 | ||
2081 | } // track loop | |
2082 | } // mixed event loop | |
2083 | } | |
2084 | ||
2085 | ||
05d0d05d | 2086 | //________________________________________________________________________________________________________________ |
045396c8 | 2087 | Bool_t AliAnaParticleHadronCorrelation::MakeNeutralCorrelation(AliAODPWG4ParticleCorrelation * const aodParticle, |
c5693f62 | 2088 | const TObjArray* pi0list, const Bool_t bFillHisto) |
e09cf5ef | 2089 | { |
2090 | // Neutral Pion Correlation Analysis | |
907b38cd | 2091 | if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::MakeNeutralCorrelation() - Make trigger particle - pi0 correlation, %d pi0's \n", |
2092 | pi0list->GetEntriesFast()); | |
e09cf5ef | 2093 | |
2094 | Int_t evtIndex11 = 0 ; | |
2095 | Int_t evtIndex12 = 0 ; | |
04f7a616 | 2096 | if (GetMixedEvent()) |
2097 | { | |
e09cf5ef | 2098 | evtIndex11 = GetMixedEvent()->EventIndexForCaloCluster(aodParticle->GetCaloLabel(0)) ; |
2099 | evtIndex12 = GetMixedEvent()->EventIndexForCaloCluster(aodParticle->GetCaloLabel(1)) ; | |
2100 | } | |
2101 | ||
907b38cd | 2102 | Float_t pt = -100. ; |
2103 | Float_t zT = -100. ; | |
2104 | Float_t phi = -100. ; | |
2105 | Float_t eta = -100. ; | |
2106 | Float_t xE = -100. ; | |
2107 | Float_t hbpXE= -100. ; | |
2108 | Float_t hbpZT= -100. ; | |
2109 | ||
2110 | Float_t ptTrig = aodParticle->Pt(); | |
2111 | Float_t phiTrig = aodParticle->Phi(); | |
2112 | Float_t etaTrig = aodParticle->Eta(); | |
2113 | Float_t deltaPhi= -100. ; | |
3f150b4b | 2114 | |
045396c8 | 2115 | TLorentzVector photonMom ; |
2116 | ||
907b38cd | 2117 | // In case of pi0/eta trigger, we may want to check their decay correlation, |
2118 | // get their decay children | |
2119 | TLorentzVector decayMom1; | |
2120 | TLorentzVector decayMom2; | |
2121 | Bool_t decayFound = kFALSE; | |
2122 | if(fPi0Trigger && bFillHisto) decayFound = GetDecayPhotonMomentum(aodParticle,decayMom1, decayMom2); | |
e09cf5ef | 2123 | |
907b38cd | 2124 | TObjArray * refpi0 = 0x0; |
2125 | Int_t nrefs = 0; | |
e09cf5ef | 2126 | |
2127 | //Loop on stored AOD pi0 | |
547c2f01 | 2128 | |
e09cf5ef | 2129 | Int_t naod = pi0list->GetEntriesFast(); |
045396c8 | 2130 | if(GetDebug() > 0) |
2131 | printf("AliAnaParticleHadronCorrelation::MakeNeutralCorrelationFillHistograms() - aod branch entries %d\n", naod); | |
547c2f01 | 2132 | |
2133 | for(Int_t iaod = 0; iaod < naod ; iaod++) | |
2134 | { | |
e09cf5ef | 2135 | AliAODPWG4Particle* pi0 = (AliAODPWG4Particle*) (pi0list->At(iaod)); |
2136 | ||
2137 | Int_t evtIndex2 = 0 ; | |
2138 | Int_t evtIndex3 = 0 ; | |
04f7a616 | 2139 | if (GetMixedEvent()) |
2140 | { | |
e09cf5ef | 2141 | evtIndex2 = GetMixedEvent()->EventIndexForCaloCluster(pi0->GetCaloLabel(0)) ; |
2142 | evtIndex3 = GetMixedEvent()->EventIndexForCaloCluster(pi0->GetCaloLabel(1)) ; | |
2143 | ||
045396c8 | 2144 | if (evtIndex11 == evtIndex2 || evtIndex12 == evtIndex2 || |
2145 | evtIndex11 == evtIndex3 || evtIndex12 == evtIndex3) // trigger and pi0 are not from different events | |
e09cf5ef | 2146 | continue ; |
2147 | } | |
907b38cd | 2148 | |
e09cf5ef | 2149 | pt = pi0->Pt(); |
907b38cd | 2150 | |
66e64043 | 2151 | if(pt < fMinAssocPt || pt > fMaxAssocPt) continue ; |
2152 | ||
907b38cd | 2153 | //jump out this event if near side associated particle pt larger than trigger |
2154 | if (fMakeNearSideLeading) | |
2155 | { | |
2156 | if(pt > ptTrig && TMath::Abs(phi-phiTrig) < TMath::PiOver2()) return kFALSE; | |
2157 | } | |
2158 | //jump out this event if there is any other particle with pt larger than trigger | |
2159 | else if(fMakeAbsoluteLeading) | |
2160 | { | |
2161 | if(pt > ptTrig) return kFALSE; | |
2162 | } | |
e09cf5ef | 2163 | |
547c2f01 | 2164 | if(bFillHisto) |
2165 | { | |
e09cf5ef | 2166 | phi = pi0->Phi() ; |
2167 | eta = pi0->Eta() ; | |
907b38cd | 2168 | |
2169 | FillNeutralAngularCorrelationHistograms(pt, ptTrig, phi, phiTrig, deltaPhi, eta, etaTrig); | |
2170 | ||
3f150b4b | 2171 | zT = pt/ptTrig ; |
2172 | xE =-pt/ptTrig*TMath::Cos(deltaPhi); // -(px*pxTrig+py*pyTrig)/(ptTrig*ptTrig); | |
2173 | ||
66e64043 | 2174 | //if(xE <0.)xE =-xE; |
e09cf5ef | 2175 | |
3f150b4b | 2176 | hbpXE = -100; |
2177 | hbpZT = -100; | |
907b38cd | 2178 | |
2e876d85 | 2179 | if(xE > 0 ) hbpXE = TMath::Log10(1./xE); |
2180 | if(zT > 0 ) hbpZT = TMath::Log10(1./zT); | |
e09cf5ef | 2181 | |
907b38cd | 2182 | if(fPi0Trigger && decayFound) |
2183 | FillDecayPhotonCorrelationHistograms(pt, phi, decayMom1,decayMom2,kFALSE) ; | |
e09cf5ef | 2184 | |
2185 | //delta phi cut for correlation | |
547c2f01 | 2186 | if( (deltaPhi > fDeltaPhiMinCut) && ( deltaPhi < fDeltaPhiMaxCut) ) |
2187 | { | |
045396c8 | 2188 | fhDeltaPhiNeutralPt->Fill(pt,deltaPhi); |
3f150b4b | 2189 | fhXENeutral ->Fill(ptTrig,xE); |
2190 | fhPtHbpXENeutral ->Fill(ptTrig,hbpXE); | |
e09cf5ef | 2191 | } |
907b38cd | 2192 | else if ( (deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < fUeDeltaPhiMaxCut) ) |
547c2f01 | 2193 | { |
045396c8 | 2194 | fhDeltaPhiUeNeutralPt->Fill(pt,deltaPhi); |
3f150b4b | 2195 | fhXEUeNeutral ->Fill(ptTrig,xE); |
2196 | fhPtHbpXEUeNeutral ->Fill(ptTrig,hbpXE); | |
e09cf5ef | 2197 | } |
907b38cd | 2198 | |
e09cf5ef | 2199 | //several UE calculation |
907b38cd | 2200 | if(fMakeSeveralUE) FillChargedUnderlyingEventSidesHistograms(ptTrig,pt,xE,hbpXE,zT,hbpZT,deltaPhi); |
2201 | ||
e09cf5ef | 2202 | } |
547c2f01 | 2203 | else |
2204 | { | |
e09cf5ef | 2205 | nrefs++; |
547c2f01 | 2206 | if(nrefs==1) |
2207 | { | |
e09cf5ef | 2208 | refpi0 = new TObjArray(0); |
2209 | refpi0->SetName(GetAODObjArrayName()+"Pi0s"); | |
2210 | refpi0->SetOwner(kFALSE); | |
2211 | } | |
2212 | refpi0->Add(pi0); | |
2213 | }//put references in trigger AOD | |
045396c8 | 2214 | |
2215 | if(GetDebug() > 2 ) | |
2216 | printf("AliAnaParticleHadronCorrelation::MakeNeutralCorrelation() - Selected neutral for momentum imbalance: pt %2.2f, phi %2.2f, eta %2.2f \n",pt,phi,eta); | |
2217 | ||
2218 | }//loop | |
2219 | ||
2220 | return kTRUE; | |
2221 | } | |
2222 | ||
05d0d05d | 2223 | //_________________________________________________________________________________________________________ |
045396c8 | 2224 | void AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation(AliAODPWG4ParticleCorrelation *aodParticle) |
2225 | { | |
2226 | // Charged Hadron Correlation Analysis with MC information | |
a426f453 | 2227 | |
045396c8 | 2228 | if(GetDebug()>1) |
2229 | printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation() - Make trigger particle - charged hadron correlation in AOD MC level\n"); | |
2230 | ||
2231 | AliStack * stack = 0x0 ; | |
2232 | TParticle * primary = 0x0 ; | |
2233 | TClonesArray * mcparticles0 = 0x0 ; | |
2234 | TClonesArray * mcparticles = 0x0 ; | |
2235 | AliAODMCParticle * aodprimary = 0x0 ; | |
2236 | ||
2237 | Double_t eprim = 0 ; | |
2238 | Double_t ptprim = 0 ; | |
2239 | Double_t phiprim = 0 ; | |
2240 | Double_t etaprim = 0 ; | |
045396c8 | 2241 | Int_t nTracks = 0 ; |
2242 | Int_t iParticle = 0 ; | |
2243 | Double_t charge = 0.; | |
66e64043 | 2244 | |
547c2f01 | 2245 | if(GetReader()->ReadStack()) |
2246 | { | |
045396c8 | 2247 | nTracks = GetMCStack()->GetNtrack() ; |
2248 | } | |
547c2f01 | 2249 | else |
2250 | { | |
2251 | nTracks = GetReader()->GetAODMCParticles()->GetEntriesFast() ; | |
2252 | } | |
045396c8 | 2253 | //Int_t trackIndex[nTracks]; |
2254 | ||
2255 | Int_t label= aodParticle->GetLabel(); | |
a426f453 | 2256 | if(label < 0) |
2257 | { | |
2258 | if(GetDebug() > 0) printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation *** bad label ***: label %d \n", label); | |
045396c8 | 2259 | return; |
2260 | } | |
2261 | ||
547c2f01 | 2262 | if(GetReader()->ReadStack()) |
2263 | { | |
045396c8 | 2264 | stack = GetMCStack() ; |
2e876d85 | 2265 | if(!stack) |
2266 | { | |
045396c8 | 2267 | printf(" AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation- Stack not available, is the MC handler called? STOP\n"); |
2268 | abort(); | |
2269 | } | |
2270 | ||
2271 | nTracks=stack->GetNprimary(); | |
547c2f01 | 2272 | if(label >= stack->GetNtrack()) |
2273 | { | |
045396c8 | 2274 | if(GetDebug() > 2) printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation *** large label ***: label %d, n tracks %d \n", label, stack->GetNtrack()); |
2275 | return ; | |
2276 | } | |
547c2f01 | 2277 | |
045396c8 | 2278 | primary = stack->Particle(label); |
547c2f01 | 2279 | if(!primary) |
2280 | { | |
045396c8 | 2281 | printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation *** no primary ***: label %d \n", label); |
2282 | return; | |
2283 | } | |
2284 | ||
547c2f01 | 2285 | if(primary) |
2286 | { | |
2747966a | 2287 | eprim = primary->Energy(); |
2288 | ptprim = primary->Pt(); | |
2289 | phiprim = primary->Phi(); | |
2290 | etaprim = primary->Eta(); | |
2747966a | 2291 | |
2292 | if(ptprim < 0.01 || eprim < 0.01) return ; | |
2293 | ||
547c2f01 | 2294 | for (iParticle = 0 ; iParticle < nTracks ; iParticle++) |
2295 | { | |
045396c8 | 2296 | TParticle * particle = stack->Particle(iParticle); |
2297 | TLorentzVector momentum; | |
3f150b4b | 2298 | |
045396c8 | 2299 | //keep only final state particles |
2300 | if(particle->GetStatusCode()!=1) continue ; | |
3f150b4b | 2301 | |
2302 | Int_t pdg = particle->GetPdgCode(); | |
2303 | ||
045396c8 | 2304 | charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge(); |
3f150b4b | 2305 | |
045396c8 | 2306 | particle->Momentum(momentum); |
2307 | ||
2308 | //---------- Charged particles ---------------------- | |
547c2f01 | 2309 | if(charge != 0) |
2310 | { | |
045396c8 | 2311 | //Particles in CTS acceptance |
2312 | Bool_t inCTS = GetFiducialCut()->IsInFiducialCut(momentum,"CTS"); | |
3f150b4b | 2313 | |
045396c8 | 2314 | if(TMath::Abs(pdg) == 11 && stack->Particle(particle->GetFirstMother())->GetPdgCode()==22) continue ; |
3f150b4b | 2315 | |
66e64043 | 2316 | if(inCTS) |
045396c8 | 2317 | { |
907b38cd | 2318 | if( label!=iParticle) // avoid trigger particle |
2319 | { | |
2320 | if(!FillChargedMCCorrelationHistograms(particle->Pt(),particle->Phi(),particle->Eta(),ptprim,phiprim,etaprim)) return; | |
2321 | } | |
2322 | }// in CTS acceptance | |
2323 | }// charged | |
045396c8 | 2324 | } //track loop |
2325 | } //when the leading particles could trace back to MC | |
2326 | } //ESD MC | |
547c2f01 | 2327 | else if(GetReader()->ReadAODMCParticles()) |
2328 | { | |
045396c8 | 2329 | //Get the list of MC particles |
2330 | mcparticles0 = GetReader()->GetAODMCParticles(0); | |
2331 | if(!mcparticles0) return; | |
547c2f01 | 2332 | if(label >=mcparticles0->GetEntriesFast()) |
2333 | { | |
045396c8 | 2334 | if(GetDebug() > 2) |
2335 | printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation *** large label ***: label %d, n tracks %d \n", label,mcparticles0->GetEntriesFast()); | |
2336 | return; | |
2337 | } | |
2338 | //Get the particle | |
2339 | aodprimary = (AliAODMCParticle*) mcparticles0->At(label); | |
547c2f01 | 2340 | if(!aodprimary) |
2341 | { | |
045396c8 | 2342 | printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation *** no AOD primary ***: label %d \n", label); |
2343 | return; | |
2344 | } | |
2345 | ||
547c2f01 | 2346 | if(aodprimary) |
2347 | { | |
2747966a | 2348 | ptprim = aodprimary->Pt(); |
2349 | phiprim = aodprimary->Phi(); | |
2350 | etaprim = aodprimary->Eta(); | |
2747966a | 2351 | |
2352 | if(ptprim < 0.01 || eprim < 0.01) return ; | |
2353 | ||
045396c8 | 2354 | mcparticles= GetReader()->GetAODMCParticles(); |
907b38cd | 2355 | for (Int_t i = 0; i < nTracks; i++) |
547c2f01 | 2356 | { |
045396c8 | 2357 | AliAODMCParticle *part = (AliAODMCParticle*) mcparticles->At(i); |
2358 | if (!part->IsPhysicalPrimary()) continue; | |
2359 | Int_t pdg = part->GetPdgCode(); | |
2360 | charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge(); | |
2361 | TLorentzVector momentum(part->Px(),part->Py(),part->Pz(),part->E()); | |
547c2f01 | 2362 | if(charge != 0) |
2363 | { | |
2364 | if(part->Pt()> GetReader()->GetCTSPtMin()) | |
2365 | { | |
045396c8 | 2366 | //Particles in CTS acceptance |
2367 | Bool_t inCTS = GetFiducialCut()->IsInFiducialCut(momentum,"CTS"); | |
2368 | Int_t indexmother=part->GetMother(); | |
2369 | if(indexmother>-1) | |
2370 | { | |
2371 | Int_t mPdg = ((AliAODMCParticle*) mcparticles->At(indexmother)) ->GetPdgCode(); | |
2372 | if(TMath::Abs(pdg) == 11 && mPdg == 22) continue; | |
2373 | } | |
547c2f01 | 2374 | |
66e64043 | 2375 | if(inCTS) |
045396c8 | 2376 | { |
907b38cd | 2377 | if( label!=iParticle) // avoid trigger particle |
2378 | { | |
2379 | if(!FillChargedMCCorrelationHistograms(part->Pt(),part->Phi(),part->Eta(),ptprim,phiprim,etaprim)) return; | |
2380 | } | |
2381 | } // in acceptance | |
2382 | } // min pt cut | |
045396c8 | 2383 | } //only charged particles |
2384 | } //MC particle loop | |
2385 | } //when the leading particles could trace back to MC | |
2386 | }// AOD MC | |
e09cf5ef | 2387 | } |
045396c8 | 2388 | |
05d0d05d | 2389 | //_____________________________________________________________________ |
2390 | void AliAnaParticleHadronCorrelation::Print(const Option_t * opt) const | |
2391 | { | |
2392 | ||
2393 | //Print some relevant parameters set for the analysis | |
2394 | if(! opt) | |
2395 | return; | |
2396 | ||
2397 | printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ; | |
745913ae | 2398 | AliAnaCaloTrackCorrBaseClass::Print(" "); |
66e64043 | 2399 | printf("Pt trigger > %3.2f\n", fMinTriggerPt) ; |
2400 | printf("Pt associated hadron < %3.2f\n", fMaxAssocPt) ; | |
2401 | printf("Pt associated hadron > %3.2f\n", fMinAssocPt) ; | |
2402 | printf("Phi trigger particle-Hadron < %3.2f\n", fDeltaPhiMaxCut) ; | |
2403 | printf("Phi trigger particle-Hadron > %3.2f\n", fDeltaPhiMinCut) ; | |
2404 | printf("Phi trigger particle-UeHadron < %3.2f\n", fUeDeltaPhiMaxCut) ; | |
2405 | printf("Phi trigger particle-UeHadron > %3.2f\n", fUeDeltaPhiMinCut) ; | |
2406 | printf("Isolated Trigger? %d\n" , fSelectIsolated) ; | |
2407 | printf("Several UE? %d\n" , fMakeSeveralUE) ; | |
2408 | printf("Name of AOD Pi0 Branch %s \n", fPi0AODBranchName.Data()); | |
05d0d05d | 2409 | printf("Do Decay-hadron correlation ? %d\n", fPi0Trigger) ; |
3f150b4b | 2410 | printf("Select absolute leading for cluster triggers ? %d or Near Side %d\n", |
2411 | fMakeAbsoluteLeading, fMakeNearSideLeading) ; | |
05d0d05d | 2412 | printf("Trigger pt bins %d\n", fNAssocPtBins) ; |
2413 | for (Int_t ibin = 0; ibin<fNAssocPtBins; ibin++) { | |
2414 | printf("\t bin %d = [%2.1f,%2.1f]\n", ibin, fAssocPtBinLimit[ibin], fAssocPtBinLimit[ibin+1]) ; | |
2415 | } | |
2416 | ||
2417 | } | |
2418 | ||
2419 | //____________________________________________________________ | |
2420 | void AliAnaParticleHadronCorrelation::SetNAssocPtBins(Int_t n) | |
045396c8 | 2421 | { |
2422 | // Set number of bins | |
e09cf5ef | 2423 | |
05d0d05d | 2424 | fNAssocPtBins = n ; |
2425 | ||
2426 | ||
045396c8 | 2427 | if(n < 10 && n > 0) |
2428 | { | |
05d0d05d | 2429 | fNAssocPtBins = n ; |
045396c8 | 2430 | } |
2431 | else | |
2432 | { | |
2433 | printf("n = larger than 9 or too small, set to 9 \n"); | |
05d0d05d | 2434 | fNAssocPtBins = 9; |
045396c8 | 2435 | } |
2436 | } | |
e09cf5ef | 2437 | |
05d0d05d | 2438 | //______________________________________________________________________________ |
2439 | void AliAnaParticleHadronCorrelation::SetAssocPtBinLimit(Int_t ibin, Float_t pt) | |
045396c8 | 2440 | { |
2441 | // Set the list of limits for the trigger pt bins | |
2442 | ||
05d0d05d | 2443 | if(ibin <= fNAssocPtBins || ibin >= 0) |
045396c8 | 2444 | { |
05d0d05d | 2445 | fAssocPtBinLimit[ibin] = pt ; |
045396c8 | 2446 | } |
2e876d85 | 2447 | else |
2448 | { | |
05d0d05d | 2449 | printf("AliAnaParticleHadronCorrelation::SetAssocPtBinLimit() - bin number too large %d > %d or small, nothing done\n", ibin, fNAssocPtBins) ; |
045396c8 | 2450 | } |
2451 | } | |
2452 |