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