]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGGA/CaloTrackCorrelations/AliAnaParticleHadronCorrelation.cxx
Add more control histograms to check the input spectra of trigger particles after...
[u/mrichter/AliRoot.git] / PWGGA / CaloTrackCorrelations / AliAnaParticleHadronCorrelation.cxx
CommitLineData
e09cf5ef 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
e09cf5ef 15
16//_________________________________________________________________________
17// Class for the analysis of particle - hadron correlations
18// Particle (for example direct gamma) must be found in a previous analysis
19//-- Author: Gustavo Conesa (LNF-INFN)
20
21// Modified by Yaxian Mao:
22// 1. add the UE subtraction for corrlation study
23// 2. change the correlation variable
24// 3. Only use leading particle(cluster/track) as trigger for correlation (2010/07/02)
25// 4. Make decay photon-hadron correlations where decay contribute pi0 mass (2010/09/09)
26// 5. fill the pout to extract kt at the end, also to study charge asymmetry(2010/10/06)
045396c8 27// 6. Add the possibility for event selection analysis based on vertex and multiplicity bins (10/10/2010)
28// 7. change the way of delta phi cut for UE study due to memory issue (reduce histograms)
29// 8. Add the possibility to request the absolute leading particle at the near side or not, set trigger bins, general clean-up (08/2011)
e09cf5ef 30//////////////////////////////////////////////////////////////////////////////
31
32
33// --- ROOT system ---
34//#include "TClonesArray.h"
907b38cd 35#include <TClass.h>
36#include <TMath.h>
37#include <TH2F.h>
38#include <TDatabasePDG.h>
e09cf5ef 39
40//---- ANALYSIS system ----
41#include "AliNeutralMesonSelection.h"
42#include "AliAnaParticleHadronCorrelation.h"
43#include "AliCaloTrackReader.h"
e09cf5ef 44#include "AliAODPWG4ParticleCorrelation.h"
45#include "AliFiducialCut.h"
46#include "AliVTrack.h"
47#include "AliVCluster.h"
48#include "AliMCAnalysisUtils.h"
49#include "TParticle.h"
50#include "AliStack.h"
51#include "AliAODMCParticle.h"
52#include "AliMixedEvent.h"
029dea5a 53#include "AliAnalysisManager.h"
54#include "AliInputEventHandler.h"
2e876d85 55#include "AliEventplane.h"
e09cf5ef 56
57ClassImp(AliAnaParticleHadronCorrelation)
58
59
05d0d05d 60//___________________________________________________________________
e09cf5ef 61 AliAnaParticleHadronCorrelation::AliAnaParticleHadronCorrelation():
745913ae 62 AliAnaCaloTrackCorrBaseClass(),
66e64043 63 fMinTriggerPt(0.),
64 fMaxAssocPt(1000.), fMinAssocPt(0.),
05d0d05d 65 fDeltaPhiMaxCut(0.), fDeltaPhiMinCut(0.),
66 fSelectIsolated(0), fMakeSeveralUE(0),
67 fUeDeltaPhiMaxCut(0.), fUeDeltaPhiMinCut(0.),
68 fPi0AODBranchName(""), fNeutralCorr(0),
907b38cd 69 fPi0Trigger(0), fDecayTrigger(0),
3f150b4b 70 fMakeAbsoluteLeading(0), fMakeNearSideLeading(0),
907b38cd 71 fLeadingTriggerIndex(-1), fHMPIDCorrelation(0), fFillBradHisto(0),
05d0d05d 72 fNAssocPtBins(0), fAssocPtBinLimit(),
7d306daf 73 fCorrelVzBin(0),
2bb7ac98 74 fListMixTrackEvents(), fListMixCaloEvents(),
75 fUseMixStoredInReader(0), fFillNeutralEventMixPool(0),
b1f720a7 76 fM02MaxCut(0), fM02MinCut(0),
f7408d50 77 fFillPileUpHistograms(0),
78 fSelectLeadingHadronAngle(0),
79 fMinLeadHadPhi(0), fMaxLeadHadPhi(0),
80 fMinLeadHadPt(0), fMaxLeadHadPt(0),
81
05d0d05d 82 //Histograms
bef61a43 83 fhPtTriggerInput(0), fhPtTriggerSSCut(0),
84 fhPtTriggerIsoCut(0), fhPtTriggerFidCut(0),
cc944149 85 fhPtLeading(0), fhPtLeadingVtxBC0(0),
b1f720a7 86 fhPtLeadingVzBin(0), fhPtLeadingBin(0),
764ab1f4 87 fhPhiLeading(0), fhEtaLeading(0),
88 fhPtLeadingMC(),
68cd2624 89 fhPtLeadingCentrality(0), fhPtLeadingEventPlane(0),
d0b625bc 90 fhLeadingEventPlaneCentrality(0),
7d306daf 91 fhPtLeadingMixed(0), fhPtLeadingMixedVzBin(0), fhPtLeadingMixedBin(0),
d0b625bc 92 fhPhiLeadingMixed(0), fhEtaLeadingMixed(0),
93 fhDeltaPhiDeltaEtaCharged(0),
05d0d05d 94 fhPhiCharged(0), fhEtaCharged(0),
95 fhDeltaPhiCharged(0), fhDeltaEtaCharged(0),
96 fhDeltaPhiChargedPt(0), fhDeltaPhiUeChargedPt(0),
9623bf34 97 fhUePart(0),
f7408d50 98 fhXECharged(0), fhXECharged_Cone2(0), fhXEUeCharged(0),
3f150b4b 99 fhXEPosCharged(0), fhXENegCharged(0),
f7408d50 100 fhPtHbpXECharged(0), fhPtHbpXECharged_Cone2(0), fhPtHbpXEUeCharged(0),
3f150b4b 101 fhZTCharged(0), fhZTUeCharged(0),
102 fhZTPosCharged(0), fhZTNegCharged(0),
103 fhPtHbpZTCharged(0), fhPtHbpZTUeCharged(0),
b1f720a7 104 fhXEChargedMC(), fhDeltaPhiChargedMC(),
105 fhDeltaPhiDeltaEtaChargedPtA3GeV(0),
106 fhDeltaPhiChargedPtA3GeV(0), fhDeltaEtaChargedPtA3GeV(0),
107 //Pile-Up
17af6e24 108 fhDeltaPhiChargedPileUp(), fhDeltaEtaChargedPileUp(),
fedea415 109 fhDeltaPhiChargedPtA3GeVPileUp(), fhDeltaEtaChargedPtA3GeVPileUp(),
110 fhXEChargedPileUp(), fhXEUeChargedPileUp(),
17af6e24 111 fhZTChargedPileUp(), fhZTUeChargedPileUp(),
112 fhPtTrigChargedPileUp(),
fedea415 113 fhDeltaPhiChargedOtherBC(), fhDeltaPhiChargedPtA3GeVOtherBC(),
114 fhXEChargedOtherBC(), fhXEUeChargedOtherBC(),
115 fhZTChargedOtherBC(), fhZTUeChargedOtherBC(),
116 fhPtTrigChargedOtherBC(),
2a9171b5 117 fhDeltaPhiChargedBC0(), fhDeltaPhiChargedPtA3GeVBC0(),
118 fhXEChargedBC0(), fhXEUeChargedBC0(),
119 fhZTChargedBC0(), fhZTUeChargedBC0(),
120 fhPtTrigChargedBC0(),
cc944149 121 fhDeltaPhiChargedVtxBC0(), fhDeltaPhiChargedPtA3GeVVtxBC0(),
122 fhXEChargedVtxBC0(), fhXEUeChargedVtxBC0(),
123 fhZTChargedVtxBC0(), fhZTUeChargedVtxBC0(),
124 fhPtTrigChargedVtxBC0(),
05d0d05d 125 fhDeltaPhiUeLeftCharged(0), fhDeltaPhiUeRightCharged(0),
8cc41381 126 fhDeltaPhiUeLeftUpCharged(0), fhDeltaPhiUeRightUpCharged(0),
127 fhDeltaPhiUeLeftDownCharged(0), fhDeltaPhiUeRightDownCharged(0),
3f150b4b 128 fhXEUeLeftCharged(0), fhXEUeRightCharged(0),
8cc41381 129 fhXEUeLeftUpCharged(0), fhXEUeRightUpCharged(0),
130 fhXEUeLeftDownCharged(0), fhXEUeRightDownCharged(0),
3f150b4b 131 fhPtHbpXEUeLeftCharged(0), fhPtHbpXEUeRightCharged(0),
132 fhZTUeLeftCharged(0), fhZTUeRightCharged(0),
133 fhPtHbpZTUeLeftCharged(0), fhPtHbpZTUeRightCharged(0),
05d0d05d 134 fhPtTrigPout(0), fhPtTrigCharged(0),
135 fhTrigDeltaPhiCharged(0x0), fhTrigDeltaEtaCharged(0x0),
3f150b4b 136 fhTrigXECorr(0x0), fhTrigXEUeCorr(0x0),
137 fhTrigZTCorr(0x0), fhTrigZTUeCorr(0x0),
8cc41381 138 fhAssocPtBkg(0), fhDeltaPhiDeltaEtaAssocPtBin(0),
139 fhDeltaPhiAssocPtBin(0),
140 fhDeltaPhiAssocPtBinDEta08(0), fhDeltaPhiAssocPtBinDEta0(0),
2013f378 141 fhDeltaPhiAssocPtBinHMPID(0), fhDeltaPhiAssocPtBinHMPIDAcc(0),
66e64043 142 fhDeltaPhiBradAssocPtBin(0), fhDeltaPhiBrad(0),
907b38cd 143 fhXEAssocPtBin(0), fhZTAssocPtBin(0),
e09cf5ef 144 fhDeltaPhiDeltaEtaNeutral(0),
05d0d05d 145 fhPhiNeutral(0), fhEtaNeutral(0),
146 fhDeltaPhiNeutral(0), fhDeltaEtaNeutral(0),
147 fhDeltaPhiNeutralPt(0), fhDeltaPhiUeNeutralPt(0),
3f150b4b 148 fhXENeutral(0), fhXEUeNeutral(0),
149 fhPtHbpXENeutral(0), fhPtHbpXEUeNeutral(0),
150 fhZTNeutral(0), fhZTUeNeutral(0),
151 fhPtHbpZTNeutral(0), fhPtHbpZTUeNeutral(0),
05d0d05d 152 fhDeltaPhiUeLeftNeutral(0), fhDeltaPhiUeRightNeutral(0),
3f150b4b 153 fhXEUeLeftNeutral(0), fhXEUeRightNeutral(0),
154 fhPtHbpXEUeLeftNeutral(0), fhPtHbpXEUeRightNeutral(0),
155 fhZTUeLeftNeutral(0), fhZTUeRightNeutral(0),
156 fhPtHbpZTUeLeftNeutral(0), fhPtHbpZTUeRightNeutral(0),
e09cf5ef 157 fhPtPi0DecayRatio(0),
3f150b4b 158 fhDeltaPhiDecayCharged(0), fhXEDecayCharged(0), fhZTDecayCharged(0),
159 fhDeltaPhiDecayNeutral(0), fhXEDecayNeutral(0), fhZTDecayNeutral(0),
907b38cd 160 fhDeltaPhiDecayChargedAssocPtBin(0),
161 fhXEDecayChargedAssocPtBin(0), fhZTDecayChargedAssocPtBin(0),
9623bf34 162 fh2phiLeadingParticle(0x0), fhMCPtLeading(0),
08f220c8 163 fhMCPhiLeading(0), fhMCEtaLeading(0),
05d0d05d 164 fhMCEtaCharged(0), fhMCPhiCharged(0),
165 fhMCDeltaEtaCharged(0), fhMCDeltaPhiCharged(0x0),
166 fhMCDeltaPhiDeltaEtaCharged(0), fhMCDeltaPhiChargedPt(0),
9623bf34 167 fhMCPtXECharged(0), fhMCPtXEUeCharged(0),
c78eef61 168 fhMCPtXEUeLeftCharged(0), fhMCPtXEUeRightCharged(0),
9623bf34 169 fhMCPtHbpXECharged(0), fhMCPtHbpXEUeCharged(0),
c78eef61 170 fhMCPtHbpXEUeLeftCharged(0), fhMCPtHbpXEUeRightCharged(0),
9623bf34 171 fhMCUePart(0),
c78eef61 172 fhMCPtZTCharged(0), fhMCPtZTUeCharged(0),
173 fhMCPtZTUeLeftCharged(0), fhMCPtZTUeRightCharged(0),
174 fhMCPtHbpZTCharged(0), fhMCPtHbpZTUeCharged(0),
175 fhMCPtHbpZTUeLeftCharged(0), fhMCPtHbpZTUeRightCharged(0),
029dea5a 176 fhMCPtTrigPout(0), fhMCPtAssocDeltaPhi(0),
177 //Mixing
31864468 178 fhNEventsTrigger(0), fhNtracksMB(0), fhNclustersMB(0),
029dea5a 179 fhMixDeltaPhiCharged(0), fhMixDeltaPhiDeltaEtaCharged(0),
18838011 180 fhMixXECharged(0), fhMixXEUeCharged(0), fhMixHbpXECharged(0),
2013f378 181 fhMixDeltaPhiChargedAssocPtBin(),
182 fhMixDeltaPhiChargedAssocPtBinDEta08(),
8cc41381 183 fhMixDeltaPhiChargedAssocPtBinDEta0(),
2013f378 184 fhMixDeltaPhiDeltaEtaChargedAssocPtBin(),
68cd2624 185 fhEventBin(0), fhEventMixBin(0)
029dea5a 186{
8cc41381 187 //Default Ctor
029dea5a 188
e09cf5ef 189 //Initialize parameters
190 InitParameters();
764ab1f4 191
b1f720a7 192 for(Int_t i = 0; i < 7; i++)
764ab1f4 193 {
194 fhPtLeadingMC[i] = 0;
195 fhXEChargedMC[i] = 0;
b1f720a7 196 fhDeltaPhiChargedMC[i] = 0;
764ab1f4 197 }
198
17af6e24 199 for(Int_t i = 0; i < 7; i++)
200 {
201 fhPtLeadingPileUp [i] = 0 ;
202 fhDeltaPhiChargedPileUp [i] = 0 ; fhDeltaEtaChargedPileUp [i] = 0 ;
203 fhXEChargedPileUp [i] = 0 ; fhXEUeChargedPileUp [i] = 0 ;
204 fhZTChargedPileUp [i] = 0 ; fhZTUeChargedPileUp [i] = 0 ;
205 fhPtTrigChargedPileUp [i] = 0 ;
206 fhDeltaPhiChargedPtA3GeVPileUp[i] = 0 ; fhDeltaEtaChargedPtA3GeVPileUp[i] = 0 ;
17af6e24 207 }
208
e09cf5ef 209}
210
029dea5a 211//_________________________________________________________________
2bb7ac98 212AliAnaParticleHadronCorrelation::~AliAnaParticleHadronCorrelation()
029dea5a 213{
214 // Remove event containers
215
d07ffd54 216 if(DoOwnMix())
217 {
218 if(fListMixTrackEvents)
219 {
220 for(Int_t iz=0; iz < GetNZvertBin(); iz++)
029dea5a 221 {
d07ffd54 222 for(Int_t ic=0; ic < GetNCentrBin(); ic++)
223 {
224 for(Int_t irp=0; irp<GetNRPBin(); irp++)
225 {
226 Int_t bin = GetEventMixBin(ic, iz, irp);
227 fListMixTrackEvents[bin]->Delete() ;
228 delete fListMixTrackEvents[bin] ;
229 }
230 }
029dea5a 231 }
232 }
d07ffd54 233
234 delete[] fListMixTrackEvents;
235
236 if(fListMixCaloEvents)
237 {
238 for(Int_t iz=0; iz < GetNZvertBin(); iz++)
239 {
240 for(Int_t ic=0; ic < GetNCentrBin(); ic++)
241 {
242 for(Int_t irp=0; irp<GetNRPBin(); irp++)
243 {
244 Int_t bin = GetEventMixBin(ic, iz, irp);
245 fListMixCaloEvents[bin]->Delete() ;
246 delete fListMixCaloEvents[bin] ;
247 }
248 }
249 }
250 }
251
252 delete[] fListMixCaloEvents;
029dea5a 253
254 }
255}
256
907b38cd 257//______________________________________________________________________________________________________________________________________________________
22ad7981 258void AliAnaParticleHadronCorrelation::FillChargedAngularCorrelationHistograms(Float_t ptAssoc, Float_t ptTrig, Int_t bin,
259 Float_t phiAssoc, Float_t phiTrig, Float_t & deltaPhi,
260 Float_t etaAssoc, Float_t etaTrig,
261 Bool_t decay, Float_t hmpidSignal, Int_t outTOF,
262 Int_t nTracks, Int_t mcTag)
907b38cd 263{
264 // Fill angular correlation related histograms
265
266 Float_t deltaEta = etaTrig-etaAssoc;
267 deltaPhi = phiTrig-phiAssoc;
268 Float_t deltaPhiOrg = deltaPhi;
269
270 if(deltaPhi <= -TMath::PiOver2()) deltaPhi+=TMath::TwoPi();
271 if(deltaPhi > 3*TMath::PiOver2()) deltaPhi-=TMath::TwoPi();
272
b1f720a7 273 fhEtaCharged ->Fill(ptAssoc,etaAssoc);
274 fhPhiCharged ->Fill(ptAssoc,phiAssoc);
275 fhDeltaEtaCharged ->Fill(ptTrig ,deltaEta);
276 fhDeltaPhiCharged ->Fill(ptTrig ,deltaPhi);
277 fhDeltaPhiChargedPt->Fill(ptAssoc, deltaPhi);
278 fhDeltaPhiDeltaEtaCharged->Fill(deltaPhi, deltaEta);
279
280 if(ptAssoc > 3 )
281 {
282 fhDeltaEtaChargedPtA3GeV ->Fill(ptTrig ,deltaEta);
283 fhDeltaPhiChargedPtA3GeV ->Fill(ptTrig ,deltaPhi);
284 fhDeltaPhiDeltaEtaChargedPtA3GeV->Fill(deltaPhi, deltaEta);
285 }
907b38cd 286
b1f720a7 287 // Pile up studies
17af6e24 288
289 if(fFillPileUpHistograms)
b1f720a7 290 {
2a9171b5 291 if (outTOF==1)
fedea415 292 {
560498d1 293 fhDeltaPhiChargedOtherBC->Fill(ptTrig ,deltaPhi) ;
fedea415 294 if(ptAssoc > 3 ) fhDeltaPhiChargedPtA3GeVOtherBC->Fill(ptTrig ,deltaPhi) ;
295 }
2a9171b5 296 else if(outTOF==0)
297 {
298 fhDeltaPhiChargedBC0->Fill(ptTrig ,deltaPhi) ;
299 if(ptAssoc > 3 ) fhDeltaPhiChargedPtA3GeVBC0->Fill(ptTrig ,deltaPhi) ;
300 }
fedea415 301
cc944149 302 Int_t vtxBC = GetReader()->GetVertexBC();
303 if(vtxBC == 0 || vtxBC==AliVTrack::kTOFBCNA)
304 {
305 fhDeltaPhiChargedVtxBC0->Fill(ptTrig ,deltaPhi) ;
306 if(ptAssoc > 3 ) fhDeltaPhiChargedPtA3GeVVtxBC0->Fill(ptTrig ,deltaPhi) ;
307 }
308
17af6e24 309 if(GetReader()->IsPileUpFromSPD()) { fhDeltaEtaChargedPileUp[0]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPileUp[0]->Fill(ptTrig ,deltaPhi) ; }
310 if(GetReader()->IsPileUpFromEMCal()) { fhDeltaEtaChargedPileUp[1]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPileUp[1]->Fill(ptTrig ,deltaPhi) ; }
311 if(GetReader()->IsPileUpFromSPDOrEMCal()) { fhDeltaEtaChargedPileUp[2]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPileUp[2]->Fill(ptTrig ,deltaPhi) ; }
312 if(GetReader()->IsPileUpFromSPDAndEMCal()) { fhDeltaEtaChargedPileUp[3]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPileUp[3]->Fill(ptTrig ,deltaPhi) ; }
313 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) { fhDeltaEtaChargedPileUp[4]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPileUp[4]->Fill(ptTrig ,deltaPhi) ; }
314 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) { fhDeltaEtaChargedPileUp[5]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPileUp[5]->Fill(ptTrig ,deltaPhi) ; }
315 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhDeltaEtaChargedPileUp[6]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPileUp[6]->Fill(ptTrig ,deltaPhi) ; }
316
b1f720a7 317 if(ptAssoc > 3 )
318 {
17af6e24 319 if(GetReader()->IsPileUpFromSPD()) { fhDeltaEtaChargedPtA3GeVPileUp[0]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPtA3GeVPileUp[0]->Fill(ptTrig ,deltaPhi) ; }
320 if(GetReader()->IsPileUpFromEMCal()) { fhDeltaEtaChargedPtA3GeVPileUp[1]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPtA3GeVPileUp[1]->Fill(ptTrig ,deltaPhi) ; }
321 if(GetReader()->IsPileUpFromSPDOrEMCal()) { fhDeltaEtaChargedPtA3GeVPileUp[2]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPtA3GeVPileUp[2]->Fill(ptTrig ,deltaPhi) ; }
322 if(GetReader()->IsPileUpFromSPDAndEMCal()) { fhDeltaEtaChargedPtA3GeVPileUp[3]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPtA3GeVPileUp[3]->Fill(ptTrig ,deltaPhi) ; }
323 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) { fhDeltaEtaChargedPtA3GeVPileUp[4]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPtA3GeVPileUp[4]->Fill(ptTrig ,deltaPhi) ; }
324 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) { fhDeltaEtaChargedPtA3GeVPileUp[5]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPtA3GeVPileUp[5]->Fill(ptTrig ,deltaPhi) ; }
325 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhDeltaEtaChargedPtA3GeVPileUp[6]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPtA3GeVPileUp[6]->Fill(ptTrig ,deltaPhi) ; }
b1f720a7 326 }
327 }
328
329 if(IsDataMC())
330 {
331 Int_t mcIndex = GetMCTagHistogramIndex(mcTag);
332 fhDeltaPhiChargedMC[mcIndex]->Fill(ptTrig , deltaPhi);
333 }
907b38cd 334
335 if(fDecayTrigger && decay) fhDeltaPhiDecayCharged ->Fill(ptTrig , deltaPhi);
336
337 Double_t dphiBrad = -100;
338 if(fFillBradHisto)
339 {
340 dphiBrad = atan2(sin(deltaPhiOrg), cos(deltaPhiOrg))/TMath::Pi();//-1 to 1
341 if(TMath::Abs(dphiBrad)>0.325 && TMath::Abs(dphiBrad)<0.475) //Hardcoded values, BAD, FIXME
342 {
343 fhAssocPtBkg->Fill(ptTrig, ptAssoc);
344 }
345
346 if(dphiBrad<-1./3) dphiBrad += 2;
347 fhDeltaPhiBrad->Fill(ptTrig, dphiBrad);
348 }
349
350 // Fill histograms in bins of associated particle pT
8cc41381 351 if(bin>=0)
907b38cd 352 {
8cc41381 353 fhDeltaPhiDeltaEtaAssocPtBin [bin]->Fill(deltaPhi,deltaEta);
354
355 fhDeltaPhiAssocPtBin [bin]->Fill(ptTrig, deltaPhi);
2013f378 356
357 if(TMath::Abs(deltaEta)> 0.8)
8cc41381 358 fhDeltaPhiAssocPtBinDEta08 [bin]->Fill(ptTrig, deltaPhi);
359
03a96401 360 if(TMath::Abs(deltaEta)< 0.01)
8cc41381 361 fhDeltaPhiAssocPtBinDEta0 [bin]->Fill(ptTrig, deltaPhi);
2013f378 362
363 if (fFillBradHisto)
8cc41381 364 fhDeltaPhiBradAssocPtBin [bin]->Fill(ptTrig, dphiBrad);
2013f378 365
366 if(fDecayTrigger && decay)
8cc41381 367 fhDeltaPhiDecayChargedAssocPtBin[bin]->Fill(ptTrig, deltaPhi);
907b38cd 368
369 if(fHMPIDCorrelation)
370 {
371 if( hmpidSignal > 0 )
372 {
373 //printf("Track pt %f with HMPID signal %f \n",pt,hmpidSignal);
8cc41381 374 fhDeltaPhiAssocPtBinHMPID[bin]->Fill(ptTrig, deltaPhi);
907b38cd 375 }
376
377 if(phiAssoc > 5*TMath::DegToRad() && phiAssoc < 20*TMath::DegToRad())
378 {
379 //printf("Track pt %f in HMPID acceptance phi %f \n ",pt,phi*TMath::RadToDeg() );
8cc41381 380 fhDeltaPhiAssocPtBinHMPIDAcc[bin]->Fill(ptTrig, deltaPhi);
907b38cd 381 }
382 }
383 }
384
385 //fill different multiplicity histogram
386 if(DoEventSelect())
387 {
388 for(Int_t im = 0; im<GetMultiBin(); im++)
389 {
390 if(nTracks < ( GetMaxMulti() - GetMinMulti() )/GetMultiBin()*(im+1))
391 {
392 fhTrigDeltaPhiCharged[im]->Fill(ptTrig,deltaPhi);
393 fhTrigDeltaEtaCharged[im]->Fill(ptTrig,deltaEta);
394 }
395 }
396 }
397}
398
399//____________________________________________________________________________________________________________________________________________________
22ad7981 400Bool_t AliAnaParticleHadronCorrelation::FillChargedMCCorrelationHistograms(Float_t mcAssocPt, Float_t mcAssocPhi, Float_t mcAssocEta,
401 Float_t mcTrigPt, Float_t mcTrigPhi, Float_t mcTrigEta)
907b38cd 402{
403 // Fill MC histograms independently of AOD or ESD
404
405 //Select only hadrons in pt range
d07cdf32 406 if( mcAssocPt < fMinAssocPt || mcAssocPt > fMaxAssocPt ) return kTRUE ; // exclude but continue
907b38cd 407
d07cdf32 408 if( mcAssocPhi < 0 ) mcAssocPhi+=TMath::TwoPi();
907b38cd 409
410 //remove trigger itself for correlation when use charged triggers
411 if(TMath::Abs(mcAssocPt -mcTrigPt ) < 1e-6 &&
412 TMath::Abs(mcAssocPhi-mcTrigPhi) < 1e-6 &&
413 TMath::Abs(mcAssocEta-mcTrigEta) < 1e-6) return kTRUE ; // exclude but continue
414
415 // Absolute leading?
d07cdf32 416 if( fMakeAbsoluteLeading && mcAssocPt > mcTrigPt ) return kFALSE; // skip event
907b38cd 417
d07cdf32 418 // Skip this event if near side associated particle pt larger than trigger
907b38cd 419 if( fMakeNearSideLeading && mcAssocPt > mcTrigPt &&
d07cdf32 420 TMath::Abs(mcAssocPhi-mcTrigPhi)<TMath::PiOver2() ) return kFALSE; // skip event
907b38cd 421
422 Float_t mcdeltaPhi= mcTrigPhi-mcAssocPhi;
423 if(mcdeltaPhi <= -TMath::PiOver2()) mcdeltaPhi+=TMath::TwoPi();
424 if(mcdeltaPhi > 3*TMath::PiOver2()) mcdeltaPhi-=TMath::TwoPi();
425
426 Float_t mcxE =-mcAssocPt/mcTrigPt*TMath::Cos(mcdeltaPhi);// -(mcAssocPx*pxprim+mcAssocPy*pyprim)/(mcTrigPt*mcTrigPt);
427 Float_t mchbpXE =-100 ;
f16872ec 428 if(mcxE > 0 ) mchbpXE = TMath::Log(1./mcxE);
907b38cd 429
430 Float_t mczT = mcAssocPt/mcTrigPt ;
431 Float_t mchbpZT =-100 ;
f16872ec 432 if(mczT > 0 ) mchbpZT = TMath::Log(1./mczT);
907b38cd 433
434 //Selection within angular range
435 if( mcdeltaPhi< -TMath::PiOver2()) mcdeltaPhi+=TMath::TwoPi();
436 if( mcdeltaPhi>3*TMath::PiOver2()) mcdeltaPhi-=TMath::TwoPi();
437
438 Double_t mcpout = mcAssocPt*TMath::Sin(mcdeltaPhi) ;
439
d07cdf32 440 if(GetDebug() > 0 )
441 {
442 AliInfo(Form("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",
443 mcAssocPt,mcAssocPhi, mcTrigPhi,fDeltaPhiMinCut, mcdeltaPhi, fDeltaPhiMaxCut, GetMinPt()));
444 }
907b38cd 445
446 // Fill Histograms
447 fhMCEtaCharged ->Fill(mcAssocPt, mcAssocEta);
448 fhMCPhiCharged ->Fill(mcAssocPt, mcAssocPhi);
c78eef61 449 fhMCDeltaEtaCharged->Fill(mcTrigPt , mcTrigEta-mcAssocEta);
450 fhMCDeltaPhiCharged->Fill(mcTrigPt , mcdeltaPhi);
907b38cd 451 fhMCPtAssocDeltaPhi->Fill(mcAssocPt, mcdeltaPhi);
452
453 fhMCDeltaPhiDeltaEtaCharged->Fill(mcdeltaPhi,mcTrigEta-mcAssocEta);
454
455 //delta phi cut for correlation
456 if( (mcdeltaPhi > fDeltaPhiMinCut) && (mcdeltaPhi < fDeltaPhiMaxCut) )
457 {
458 fhMCDeltaPhiChargedPt->Fill(mcAssocPt,mcdeltaPhi);
c78eef61 459 fhMCPtXECharged ->Fill(mcTrigPt, mcxE);
460 fhMCPtHbpXECharged ->Fill(mcTrigPt, mchbpXE);
461 fhMCPtZTCharged ->Fill(mcTrigPt, mczT);
462 fhMCPtHbpZTCharged ->Fill(mcTrigPt, mchbpZT);
907b38cd 463 fhMCPtTrigPout ->Fill(mcTrigPt, mcpout) ;
464 }
9623bf34 465
466 //underlying event
9623bf34 467
c78eef61 468 if ( (mcdeltaPhi > fUeDeltaPhiMinCut) && (mcdeltaPhi < fUeDeltaPhiMaxCut) )
469 {
470 //Double_t randomphi = gRandom->Uniform(TMath::Pi()/2,3*TMath::Pi()/2);
471 Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
472 Double_t mcUexE = -(mcAssocPt/mcTrigPt)*TMath::Cos(randomphi);
473 Double_t mcUezT = mcAssocPt/mcTrigPt;
474
475 if(mcUexE < 0.) mcUexE = -mcUexE;
9623bf34 476
c78eef61 477 fhMCPtXEUeCharged->Fill(mcTrigPt,mcUexE);
478 if(mcUexE > 0) fhMCPtHbpXEUeCharged->Fill(mcTrigPt,TMath::Log(1/mcUexE));
9623bf34 479
c78eef61 480 fhMCPtZTUeCharged->Fill(mcTrigPt,mcUezT);
481 if(mcUezT > 0) fhMCPtHbpZTUeCharged->Fill(mcTrigPt,TMath::Log(1/mcUezT));
482
483 fhMCUePart->Fill(mcTrigPt);
484 }
485
486 //left
487 if((mcdeltaPhi<-fUeDeltaPhiMinCut) || (mcdeltaPhi >2*fUeDeltaPhiMaxCut))
488 {
489 Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
490 Double_t mcUexE = -(mcAssocPt/mcTrigPt)*TMath::Cos(randomphi);
491 Double_t mcUezT = mcAssocPt/mcTrigPt;
492
493 if(mcUexE < 0.) mcUexE = -mcUexE;
494
495 fhMCPtXEUeLeftCharged->Fill(mcTrigPt,mcUexE);
496 if(mcUexE > 0) fhMCPtHbpXEUeLeftCharged->Fill(mcTrigPt,TMath::Log(1/mcUexE));
497
498 fhMCPtZTUeLeftCharged->Fill(mcTrigPt,mcUezT);
499 if(mcUexE > 0) fhMCPtHbpZTUeLeftCharged->Fill(mcTrigPt,TMath::Log(1/mcUezT));
500
501 }
502
503 //right
504 if((mcdeltaPhi > fUeDeltaPhiMinCut) && (mcdeltaPhi < fUeDeltaPhiMaxCut))
505 {
506 Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
507 Double_t mcUexE = -(mcAssocPt/mcTrigPt)*TMath::Cos(randomphi);
508 Double_t mcUezT = mcAssocPt/mcTrigPt;
509
510 if(mcUexE < 0.) mcUexE = -mcUexE;
511
512 fhMCPtXEUeRightCharged->Fill(mcTrigPt,mcUexE);
513 if(mcUexE > 0) fhMCPtHbpXEUeRightCharged->Fill(mcTrigPt,TMath::Log(1/mcUexE));
514
515 fhMCPtZTUeRightCharged->Fill(mcTrigPt,mcUezT);
516 if(mcUexE > 0) fhMCPtHbpZTUeRightCharged->Fill(mcTrigPt,TMath::Log(1/mcUezT));
517 }
907b38cd 518
519 return kTRUE;
520}
521
522//___________________________________________________________________________________________________________________
22ad7981 523void AliAnaParticleHadronCorrelation::FillChargedMomentumImbalanceHistograms(Float_t ptTrig, Float_t ptAssoc,
524 Float_t xE, Float_t hbpXE,
525 Float_t zT, Float_t hbpZT,
727a309a 526 Float_t pout, Float_t deltaPhi,
22ad7981 527 Int_t nTracks, Int_t charge,
528 Int_t bin, Bool_t decay,
529 Int_t outTOF, Int_t mcTag)
907b38cd 530
531{
532 // Fill mostly momentum imbalance related histograms
533
727a309a 534 fhXECharged ->Fill(ptTrig , xE);
907b38cd 535 fhPtHbpXECharged ->Fill(ptTrig , hbpXE);
536 fhZTCharged ->Fill(ptTrig , zT);
537 fhPtHbpZTCharged ->Fill(ptTrig , hbpZT);
538 fhPtTrigPout ->Fill(ptTrig , pout) ;
539 fhPtTrigCharged ->Fill(ptTrig , ptAssoc) ;
727a309a 540 if((deltaPhi > 5*TMath::Pi()/6.) && (deltaPhi < 7*TMath::Pi()/6.)) {
541 fhXECharged_Cone2 ->Fill(ptTrig , xE);
542 fhPtHbpXECharged_Cone2 ->Fill(ptTrig , hbpXE);
543 }
907b38cd 544
b1f720a7 545 // Pile up studies
17af6e24 546 if(fFillPileUpHistograms)
b1f720a7 547 {
2a9171b5 548 if (outTOF==1)
fedea415 549 {
550 fhXEChargedOtherBC ->Fill(ptTrig,xE);
551 fhZTChargedOtherBC ->Fill(ptTrig,zT);
552 fhPtTrigChargedOtherBC->Fill(ptTrig,ptAssoc);
553 }
2a9171b5 554 else if(outTOF==0)
555 {
556 fhXEChargedBC0 ->Fill(ptTrig,xE);
557 fhZTChargedBC0 ->Fill(ptTrig,zT);
558 fhPtTrigChargedBC0->Fill(ptTrig,ptAssoc);
559 }
560
cc944149 561 Int_t vtxBC = GetReader()->GetVertexBC();
562 if(vtxBC == 0 || vtxBC==AliVTrack::kTOFBCNA)
563 {
564 fhXEChargedVtxBC0 ->Fill(ptTrig,xE);
565 fhZTChargedVtxBC0 ->Fill(ptTrig,zT);
566 fhPtTrigChargedVtxBC0->Fill(ptTrig,ptAssoc);
567 }
568
fedea415 569 if(GetReader()->IsPileUpFromSPD()) { fhXEChargedPileUp[0]->Fill(ptTrig,xE); fhZTChargedPileUp[0]->Fill(ptTrig,zT); fhPtTrigChargedPileUp[0]->Fill(ptTrig,ptAssoc); }
570 if(GetReader()->IsPileUpFromEMCal()) { fhXEChargedPileUp[1]->Fill(ptTrig,xE); fhZTChargedPileUp[1]->Fill(ptTrig,zT); fhPtTrigChargedPileUp[1]->Fill(ptTrig,ptAssoc); }
571 if(GetReader()->IsPileUpFromSPDOrEMCal()) { fhXEChargedPileUp[2]->Fill(ptTrig,xE); fhZTChargedPileUp[2]->Fill(ptTrig,zT); fhPtTrigChargedPileUp[2]->Fill(ptTrig,ptAssoc); }
572 if(GetReader()->IsPileUpFromSPDAndEMCal()) { fhXEChargedPileUp[3]->Fill(ptTrig,xE); fhZTChargedPileUp[3]->Fill(ptTrig,zT); fhPtTrigChargedPileUp[3]->Fill(ptTrig,ptAssoc); }
573 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) { fhXEChargedPileUp[4]->Fill(ptTrig,xE); fhZTChargedPileUp[4]->Fill(ptTrig,zT); fhPtTrigChargedPileUp[4]->Fill(ptTrig,ptAssoc); }
574 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) { fhXEChargedPileUp[5]->Fill(ptTrig,xE); fhZTChargedPileUp[5]->Fill(ptTrig,zT); fhPtTrigChargedPileUp[5]->Fill(ptTrig,ptAssoc); }
575 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhXEChargedPileUp[6]->Fill(ptTrig,xE); fhZTChargedPileUp[6]->Fill(ptTrig,zT); fhPtTrigChargedPileUp[6]->Fill(ptTrig,ptAssoc); }
b1f720a7 576 }
577
764ab1f4 578 if(IsDataMC())
579 {
b1f720a7 580 Int_t mcIndex = GetMCTagHistogramIndex(mcTag);
581 fhXEChargedMC [mcIndex]->Fill(ptTrig , xE );
764ab1f4 582 }
583
907b38cd 584 if(fDecayTrigger && decay)
585 {
586 fhXEDecayCharged->Fill(ptTrig,xE);
587 fhZTDecayCharged->Fill(ptTrig,zT);
588 } // photon decay pi0/eta trigger
589
8cc41381 590 if(bin >= 0 )//away side
907b38cd 591 {
8cc41381 592 fhXEAssocPtBin[bin]->Fill(ptTrig, xE) ;
593 fhZTAssocPtBin[bin]->Fill(ptTrig, zT) ;
907b38cd 594
595 if(fDecayTrigger && decay)
596 {
8cc41381 597 fhXEDecayChargedAssocPtBin[bin]->Fill(ptTrig, xE);
598 fhZTDecayChargedAssocPtBin[bin]->Fill(ptTrig, zT);
907b38cd 599 }
600 }
601
602 if(charge > 0)
603 {
604 fhXEPosCharged->Fill(ptTrig,xE) ;
605 fhZTPosCharged->Fill(ptTrig,zT) ;
606 }
607 else
608 {
609 fhXENegCharged->Fill(ptTrig,xE) ;
610 fhZTNegCharged->Fill(ptTrig,zT) ;
611 }
612
613 //fill different multiplicity histogram
614 if(DoEventSelect())
615 {
616 for(Int_t im=0; im<GetMultiBin(); im++)
617 {
618 if(nTracks < ( GetMaxMulti() - GetMinMulti() )/GetMultiBin()*(im+1))
619 {
620 fhTrigXECorr[im]->Fill(ptTrig,xE);
621 fhTrigZTCorr[im]->Fill(ptTrig,zT);
622 }
623 }
624 } //multiplicity events selection
625}
626
627//_______________________________________________________________________________________________________________________
22ad7981 628void AliAnaParticleHadronCorrelation::FillChargedUnderlyingEventHistograms(Float_t ptTrig, Float_t ptAssoc,
629 Float_t deltaPhi, Int_t nTracks, Int_t outTOF)
907b38cd 630{
631 // Fill underlying event histograms
632
633 fhDeltaPhiUeChargedPt->Fill(ptAssoc,deltaPhi);
634
08f220c8 635 Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
907b38cd 636 Double_t uexE = -(ptAssoc/ptTrig)*TMath::Cos(randomphi);
637 Double_t uezT = ptAssoc/ptTrig;
638
639 if(uexE < 0.) uexE = -uexE;
640
641 fhXEUeCharged->Fill(ptTrig,uexE);
f16872ec 642 if(uexE > 0) fhPtHbpXEUeCharged->Fill(ptTrig,TMath::Log(1/uexE));
907b38cd 643
644 fhZTUeCharged->Fill(ptTrig,uezT);
76fc98bb 645 if(uezT > 0) fhPtHbpZTUeCharged->Fill(ptTrig,TMath::Log(1/uezT));
907b38cd 646
b1f720a7 647 // Pile up studies
17af6e24 648
649 if(fFillPileUpHistograms)
b1f720a7 650 {
2a9171b5 651 if (outTOF==1)
fedea415 652 {
653 fhXEUeChargedOtherBC->Fill(ptTrig,uexE);
654 fhZTUeChargedOtherBC->Fill(ptTrig,uezT);
655 }
2a9171b5 656 else if(outTOF==0)
657 {
658 fhXEUeChargedBC0->Fill(ptTrig,uexE);
659 fhZTUeChargedBC0->Fill(ptTrig,uezT);
660 }
fedea415 661
cc944149 662 Int_t vtxBC = GetReader()->GetVertexBC();
663 if(vtxBC == 0 || vtxBC==AliVTrack::kTOFBCNA)
664 {
665 fhXEUeChargedVtxBC0->Fill(ptTrig,uexE);
666 fhZTUeChargedVtxBC0->Fill(ptTrig,uezT);
667 }
668
17af6e24 669 if(GetReader()->IsPileUpFromSPD()) { fhXEUeChargedPileUp[0]->Fill(ptTrig,uexE); fhZTUeChargedPileUp[0]->Fill(ptTrig,uezT);}
670 if(GetReader()->IsPileUpFromEMCal()) { fhXEUeChargedPileUp[1]->Fill(ptTrig,uexE); fhZTUeChargedPileUp[1]->Fill(ptTrig,uezT);}
671 if(GetReader()->IsPileUpFromSPDOrEMCal()) { fhXEUeChargedPileUp[2]->Fill(ptTrig,uexE); fhZTUeChargedPileUp[2]->Fill(ptTrig,uezT);}
672 if(GetReader()->IsPileUpFromSPDAndEMCal()) { fhXEUeChargedPileUp[3]->Fill(ptTrig,uexE); fhZTUeChargedPileUp[3]->Fill(ptTrig,uezT);}
673 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) { fhXEUeChargedPileUp[4]->Fill(ptTrig,uexE); fhZTUeChargedPileUp[4]->Fill(ptTrig,uezT);}
674 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) { fhXEUeChargedPileUp[5]->Fill(ptTrig,uexE); fhZTUeChargedPileUp[5]->Fill(ptTrig,uezT);}
675 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhXEUeChargedPileUp[6]->Fill(ptTrig,uexE); fhZTUeChargedPileUp[6]->Fill(ptTrig,uezT);}
676 }
b1f720a7 677
907b38cd 678 if(DoEventSelect())
679 {
680 for(Int_t im=0; im<GetMultiBin(); im++)
681 {
682 if(nTracks < ( GetMaxMulti() - GetMinMulti() )/GetMultiBin()*(im+1))
683 {
684 fhTrigXEUeCorr[im]->Fill(ptTrig,uexE); // xE? CHECK
685 fhTrigZTUeCorr[im]->Fill(ptTrig,uezT); // zT? CHECK
686 }
687 }
688 } //multiplicity events selection
689}
690
8cc41381 691//_____________________________________________________________________________________________________
22ad7981 692void AliAnaParticleHadronCorrelation::FillChargedUnderlyingEventSidesHistograms(Float_t ptTrig,
693 Float_t ptAssoc,
694 Float_t deltaPhi)
907b38cd 695{
08f220c8 696 // Fill underlying event histograms to the left and right of trigger
697 if((deltaPhi<-fUeDeltaPhiMinCut) || (deltaPhi >2*fUeDeltaPhiMaxCut))
907b38cd 698 {
08f220c8 699 fhDeltaPhiUeLeftCharged->Fill(ptAssoc,deltaPhi);
700 Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
701 Double_t uexE = -(ptAssoc/ptTrig)*TMath::Cos(randomphi);
702 Double_t uezT = ptAssoc/ptTrig;
703
704 if(uexE < 0.) uexE = -uexE;
705
706 fhXEUeLeftCharged->Fill(ptTrig,uexE);
707 if(uexE > 0) fhPtHbpXEUeLeftCharged->Fill(ptTrig,TMath::Log(1/uexE));
708
709 fhZTUeLeftCharged->Fill(ptTrig,uezT);
710 if(uexE > 0) fhPtHbpZTUeLeftCharged->Fill(ptTrig,TMath::Log(1/uezT));
907b38cd 711 fhDeltaPhiUeLeftCharged->Fill(ptAssoc, deltaPhi);
907b38cd 712 }
713
714 if((deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < fUeDeltaPhiMaxCut))
715 {
08f220c8 716 fhDeltaPhiUeRightCharged->Fill(ptAssoc,deltaPhi);
717 Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
718 Double_t uexE = -(ptAssoc/ptTrig)*TMath::Cos(randomphi);
719 Double_t uezT = ptAssoc/ptTrig;
720
721 if(uexE < 0.) uexE = -uexE;
722
723 fhXEUeRightCharged->Fill(ptTrig,uexE);
724 if(uexE > 0) fhPtHbpXEUeRightCharged->Fill(ptTrig,TMath::Log(1/uexE));
725
726 fhZTUeRightCharged->Fill(ptTrig,uezT);
727 if(uexE > 0) fhPtHbpZTUeRightCharged->Fill(ptTrig,TMath::Log(1/uezT));
907b38cd 728 fhDeltaPhiUeRightCharged->Fill(ptAssoc, deltaPhi);
907b38cd 729 }
8cc41381 730
731 if((deltaPhi<-fUeDeltaPhiMinCut) && (deltaPhi >-TMath::Pi()/2))
732 {
733 fhDeltaPhiUeLeftDownCharged->Fill(ptAssoc,deltaPhi);
734 Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
735 Double_t uexE = -(ptAssoc/ptTrig)*TMath::Cos(randomphi);
736
737 if(uexE < 0.) uexE = -uexE;
738
739 fhXEUeLeftDownCharged->Fill(ptTrig,uexE);
740 }
741
742 if((deltaPhi>2*fUeDeltaPhiMaxCut) && (deltaPhi <3*TMath::Pi()/2))
743 {
744 fhDeltaPhiUeLeftUpCharged->Fill(ptAssoc,deltaPhi);
745 Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
746 Double_t uexE = -(ptAssoc/ptTrig)*TMath::Cos(randomphi);
747
748 if(uexE < 0.) uexE = -uexE;
749
750 fhXEUeLeftUpCharged->Fill(ptTrig,uexE);
751 }
752
753 if((deltaPhi > TMath::Pi()/2) && (deltaPhi < fUeDeltaPhiMaxCut))
754 {
755 fhDeltaPhiUeRightUpCharged->Fill(ptAssoc,deltaPhi);
756 Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
757 Double_t uexE = -(ptAssoc/ptTrig)*TMath::Cos(randomphi);
758
759 if(uexE < 0.) uexE = -uexE;
760
761 fhXEUeRightUpCharged->Fill(ptTrig,uexE);
762 }
763
764 if((deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < TMath::Pi()/2))
765 {
766 fhDeltaPhiUeRightDownCharged->Fill(ptAssoc,deltaPhi);
767 Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
768 Double_t uexE = -(ptAssoc/ptTrig)*TMath::Cos(randomphi);
769
770 if(uexE < 0.) uexE = -uexE;
771
772 fhXEUeRightDownCharged->Fill(ptTrig,uexE);
773 }
907b38cd 774}
775
776//______________________________________________________________________________________________________________________________
22ad7981 777void AliAnaParticleHadronCorrelation::FillDecayPhotonCorrelationHistograms(Float_t ptAssoc, Float_t phiAssoc,
778 TLorentzVector mom1, TLorentzVector mom2,
779 Bool_t bChargedOrNeutral)
907b38cd 780{
781 // Do correlation with decay photons of triggered pi0 or eta
782
783 // Calculate the correlation parameters
784 Float_t ptDecay1 = mom1.Pt();
785 Float_t ptDecay2 = mom2.Pt();
786
787 Float_t zTDecay1 = -100, zTDecay2 = -100;
788 if(ptDecay1) zTDecay1 = ptAssoc/ptDecay1 ;
789 if(ptDecay2) zTDecay2 = ptAssoc/ptDecay2 ;
790
791 Float_t deltaPhiDecay1 = mom1.Phi()-phiAssoc;
792 if(deltaPhiDecay1< -TMath::PiOver2()) deltaPhiDecay1+=TMath::TwoPi();
793 if(deltaPhiDecay1>3*TMath::PiOver2()) deltaPhiDecay1-=TMath::TwoPi();
794
795 Float_t deltaPhiDecay2 = mom2.Phi()-phiAssoc;
796 if(deltaPhiDecay2< -TMath::PiOver2()) deltaPhiDecay2+=TMath::TwoPi();
797 if(deltaPhiDecay2>3*TMath::PiOver2()) deltaPhiDecay2-=TMath::TwoPi();
798
799 Float_t xEDecay1 =-zTDecay1*TMath::Cos(deltaPhiDecay1); // -(px*pxTrig+py*pyTrig)/(ptTrig*ptTrig);
800 Float_t xEDecay2 =-zTDecay2*TMath::Cos(deltaPhiDecay2); // -(px*pxTrig+py*pyTrig)/(ptTrig*ptTrig);
801
802 if(bChargedOrNeutral) // correlate with charges
803 {
804 fhDeltaPhiDecayCharged->Fill(ptDecay1, deltaPhiDecay1);
805 fhDeltaPhiDecayCharged->Fill(ptDecay2, deltaPhiDecay2);
806
2e876d85 807 if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::FillDecayPhotonHistograms( Charged corr) - deltaPhoton1 = %f, deltaPhoton2 = %f \n", deltaPhiDecay1, deltaPhiDecay2);
907b38cd 808
809 if( (deltaPhiDecay1 > fDeltaPhiMinCut) && ( deltaPhiDecay1 < fDeltaPhiMaxCut) )
810 {
811 fhZTDecayCharged->Fill(ptDecay1,zTDecay1);
812 fhXEDecayCharged->Fill(ptDecay1,xEDecay1);
813 }
814 if( (deltaPhiDecay2 > fDeltaPhiMinCut) && ( deltaPhiDecay2 < fDeltaPhiMaxCut) )
815 {
816 fhZTDecayCharged->Fill(ptDecay2,zTDecay2);
817 fhXEDecayCharged->Fill(ptDecay2,xEDecay2);
818 }
819 }
820 else // correlate with neutrals
821 {
822 fhDeltaPhiDecayCharged->Fill(ptDecay1, deltaPhiDecay1);
823 fhDeltaPhiDecayCharged->Fill(ptDecay2, deltaPhiDecay2);
824
2e876d85 825 if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::FillDecayPhotonHistograms(Neutral corr) - deltaPhoton1 = %f, deltaPhoton2 = %f \n", deltaPhiDecay1, deltaPhiDecay2);
907b38cd 826
827 if( (deltaPhiDecay1 > fDeltaPhiMinCut) && ( deltaPhiDecay1 < fDeltaPhiMaxCut) )
828 {
829 fhZTDecayCharged->Fill(ptDecay1,zTDecay1);
830 fhXEDecayCharged->Fill(ptDecay1,xEDecay1);
831 }
832 if( (deltaPhiDecay2 > fDeltaPhiMinCut) && ( deltaPhiDecay2 < fDeltaPhiMaxCut) )
833 {
834 fhZTDecayCharged->Fill(ptDecay2,zTDecay2);
835 fhXEDecayCharged->Fill(ptDecay2,xEDecay2);
836 }
837 }
838}
839
840//______________________________________________________________________________________________________________________________________________________
22ad7981 841void AliAnaParticleHadronCorrelation::FillNeutralAngularCorrelationHistograms(Float_t ptAssoc, Float_t ptTrig,
842 Float_t phiAssoc, Float_t phiTrig, Float_t & deltaPhi,
843 Float_t etaAssoc, Float_t etaTrig)
907b38cd 844{
845 // Fill angular correlation related histograms
846
847 Float_t deltaEta = etaTrig-etaAssoc;
848 deltaPhi = phiTrig-phiAssoc;
849
850 if(deltaPhi <= -TMath::PiOver2()) deltaPhi+=TMath::TwoPi();
851 if(deltaPhi > 3*TMath::PiOver2()) deltaPhi-=TMath::TwoPi();
852
853 fhEtaNeutral ->Fill(ptAssoc,etaAssoc);
854 fhPhiNeutral ->Fill(ptAssoc,phiAssoc);
855 fhDeltaEtaNeutral->Fill(ptTrig ,deltaEta);
856 fhDeltaPhiNeutral->Fill(ptTrig ,deltaPhi);
857
858 if(ptAssoc > 2 ) fhDeltaPhiDeltaEtaNeutral->Fill(deltaPhi, deltaEta);
859
860}
861
862//_____________________________________________________________________________________________________________________________
22ad7981 863void AliAnaParticleHadronCorrelation::FillNeutralUnderlyingEventSidesHistograms(Float_t ptTrig, Float_t ptAssoc,
864 Float_t xE, Float_t hbpXE,
865 Float_t zT, Float_t hbpZT,
866 Float_t deltaPhi)
907b38cd 867{
868 // Fill underlying event histograms to the left and right of trigger
869
870 if((deltaPhi<-fUeDeltaPhiMinCut) && (deltaPhi >-fUeDeltaPhiMaxCut))
871 {
872 fhDeltaPhiUeLeftNeutral->Fill(ptAssoc, deltaPhi);
873 fhXEUeLeftNeutral ->Fill(ptTrig , xE);
874 fhPtHbpXEUeLeftNeutral ->Fill(ptTrig , hbpXE);
875 fhZTUeLeftNeutral ->Fill(ptTrig , zT);
876 fhPtHbpZTUeLeftNeutral ->Fill(ptTrig , hbpZT);
877 }
878
879 if((deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < fUeDeltaPhiMaxCut))
880 {
881 fhDeltaPhiUeRightNeutral->Fill(ptAssoc, deltaPhi);
882 fhXEUeRightNeutral ->Fill(ptTrig , xE);
883 fhPtHbpXEUeRightNeutral ->Fill(ptTrig , hbpXE);
884 fhZTUeRightNeutral ->Fill(ptTrig , zT);
885 fhPtHbpZTUeRightNeutral ->Fill(ptTrig , hbpZT);
886 }
887}
888
31864468 889//______________________________________________________
890void AliAnaParticleHadronCorrelation::FillEventMixPool()
891{
892 // Fill the pool with tracks if requested
893
894 if(DoOwnMix())
895 {
896 FillChargedEventMixPool();
897
898 if(OnlyIsolated() || fFillNeutralEventMixPool)
899 FillNeutralEventMixPool();
900 }
901
902}
903
029dea5a 904//_____________________________________________________________
905void AliAnaParticleHadronCorrelation::FillChargedEventMixPool()
906{
d07ffd54 907 // Mixed event pool filling for tracks
31864468 908
7ed3a248 909 if(fUseMixStoredInReader && GetReader()->GetLastTracksMixedEvent() == GetEventNumber())
910 {
911 //printf("%s : Pool already filled for this event !!!\n",GetInputAODName().Data());
912 return ; // pool filled previously for another trigger
913 }
914
029dea5a 915 Int_t nTracks = GetCTSTracks()->GetEntriesFast();
31864468 916
029dea5a 917 AliAnalysisManager * manager = AliAnalysisManager::GetAnalysisManager();
918 AliInputEventHandler * inputHandler = dynamic_cast<AliInputEventHandler*>(manager->GetInputEventHandler());
919
c6b4facc 920 if(!inputHandler) return ;
31864468 921
d07ffd54 922 // Do mixing only with MB event (or the chosen mask), if not skip
923 if( !(inputHandler->IsEventSelected( ) & GetReader()->GetMixEventTriggerMask()) ) return ;
924
925 fhNtracksMB->Fill(nTracks);
926
927 Int_t eventBin = GetEventMixBin();
928
929 //Check that the bin exists, if not (bad determination of RP, centrality or vz bin) do nothing
930 if(eventBin < 0) return;
931
932 TObjArray * mixEventTracks = new TObjArray;
933
934 if(fUseMixStoredInReader)
029dea5a 935 {
d07ffd54 936 fListMixTrackEvents[eventBin] = GetReader()->GetListWithMixedEventsForTracks(eventBin);
937 }
938
939 if(!fListMixTrackEvents[eventBin]) fListMixTrackEvents[eventBin] = new TList();
940
941 //printf("%s ***** Pool Event bin : %d - nTracks %d\n",GetInputAODName().Data(),eventBin, GetCTSTracks()->GetEntriesFast());
942
943 TList * pool = fListMixTrackEvents[eventBin];
944
945 TVector3 p3;
946 for(Int_t ipr = 0;ipr < GetCTSTracks()->GetEntriesFast() ; ipr ++ )
947 {
948 AliVTrack * track = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
029dea5a 949
d07ffd54 950 Double_t mom[3] = {track->Px(),track->Py(),track->Pz()};
951 p3.SetXYZ(mom[0],mom[1],mom[2]);
952 Float_t pt = p3.Pt();
2e876d85 953
d07ffd54 954 //Select only hadrons in pt range
955 if(pt < fMinAssocPt || pt > fMaxAssocPt) continue ;
029dea5a 956
d07ffd54 957 AliAODPWG4Particle * mixedTrack = new AliAODPWG4Particle(mom[0],mom[1],mom[2],0);
958 mixedTrack->SetDetector("CTS");
959 mixedTrack->SetChargedBit(track->Charge()>0);
960 mixEventTracks->Add(mixedTrack);
961 }
962
963 //Set the event number where the last event was added, to avoid double pool filling
964 GetReader()->SetLastTracksMixedEvent(GetEventNumber());
965
966 //printf("Add event to pool with %d tracks \n ",mixEventTracks->GetEntries());
967 pool->AddFirst(mixEventTracks);
968 mixEventTracks = 0;
969
970 //printf("Pool size %d, max %d\n",pool->GetSize(), GetNMaxEvMix());
971
972 if(pool->GetSize() > GetNMaxEvMix())
973 {//Remove last event
974 TClonesArray * tmp = static_cast<TClonesArray*>(pool->Last()) ;
975 pool->RemoveLast() ;
976 delete tmp ;
977 }
978}
979
980//_____________________________________________________________
981void AliAnaParticleHadronCorrelation::FillNeutralEventMixPool()
982{
983 // Mixed event pool filling for neutral clusters
984 // Right now only for EMCAL and in isolation case
985
986 //printf("FillNeutralEventMixPool for %s\n",GetInputAODName().Data());
987
2bb7ac98 988 TObjArray * pl = GetEMCALClusters();
989 //if (GetAODObjArrayName.Contains("PHOS") )pl = GetPHOSClusters();
990 //else pl = GetEMCALClusters();
991
992 Int_t nClusters = pl->GetEntriesFast();
2bb7ac98 993
d07ffd54 994 if(fUseMixStoredInReader && GetReader()->GetLastCaloMixedEvent() == GetEventNumber())
995 {
996 //printf("%s : Pool already filled for this event !!!\n",GetInputAODName().Data());
997 return ; // pool filled previously for another trigger
998 }
999
d07ffd54 1000 AliAnalysisManager * manager = AliAnalysisManager::GetAnalysisManager();
1001 AliInputEventHandler * inputHandler = dynamic_cast<AliInputEventHandler*>(manager->GetInputEventHandler());
1002
1003 if(!inputHandler) return ;
31864468 1004
d07ffd54 1005 // Do mixing only with MB event (or the chosen mask), if not skip
1006 if( !(inputHandler->IsEventSelected( ) & GetReader()->GetMixEventTriggerMask()) ) return ;
1007
2bb7ac98 1008 fhNclustersMB->Fill(nClusters);
d07ffd54 1009
1010 Int_t eventBin = GetEventMixBin();
1011
1012 //Check that the bin exists, if not (bad determination of RP, centrality or vz bin) do nothing
1013 if(eventBin < 0) return;
1014
1015 TObjArray * mixEventCalo = new TObjArray;
1016
1017 if(fUseMixStoredInReader)
1018 {
1019 fListMixCaloEvents[eventBin] = GetReader()->GetListWithMixedEventsForCalo(eventBin);
1020 }
1021
1022 if(!fListMixCaloEvents[eventBin]) fListMixCaloEvents[eventBin] = new TList();
1023
1024 TList * poolCalo = fListMixCaloEvents[eventBin];
1025
d07ffd54 1026 TLorentzVector mom;
2bb7ac98 1027
1028 for(Int_t ipr = 0;ipr < nClusters ; ipr ++ )
d07ffd54 1029 {
1030 AliVCluster * calo = (AliVCluster *) (pl->At(ipr)) ;
1031
1032 // remove matched clusters
1033 if( IsTrackMatched( calo, GetReader()->GetInputEvent() ) ) continue ;
283f989c 1034
2bb7ac98 1035 //Cluster momentum calculation
d07ffd54 1036 if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
283f989c 1037 {
d07ffd54 1038 calo->GetMomentum(mom,GetVertex(0)) ;
1039 }//Assume that come from vertex in straight line
1040 else
029dea5a 1041 {
d07ffd54 1042 Double_t vertex[]={0,0,0};
1043 calo->GetMomentum(mom,vertex) ;
029dea5a 1044 }
1045
d07ffd54 1046 Float_t pt = mom.Pt();
1047 //Select only clusters in pt range
1048 if(pt < fMinAssocPt || pt > fMaxAssocPt) continue ;
2e876d85 1049
d07ffd54 1050 AliAODPWG4Particle * mixedCalo = new AliAODPWG4Particle(mom);
1051 mixedCalo->SetDetector("EMCAL");
1052 mixEventCalo->Add(mixedCalo);
1053 }
1054
1055 //Set the event number where the last event was added, to avoid double pool filling
1056 GetReader()->SetLastCaloMixedEvent(GetEventNumber());
1057
1058 //printf("Add event to pool with %d clusters \n ",mixEventCalo->GetEntries());
1059 poolCalo->AddFirst(mixEventCalo);
1060 mixEventCalo = 0;
1061
1062 //printf("Pool size %d, max %d\n",poolCalo->GetSize(), GetNMaxEvMix());
029dea5a 1063
d07ffd54 1064 if(poolCalo->GetSize() > GetNMaxEvMix())
1065 {//Remove last event
1066 TClonesArray * tmp = static_cast<TClonesArray*>(poolCalo->Last()) ;
1067 poolCalo->RemoveLast() ;
1068 delete tmp ;
1069 }
029dea5a 1070}
1071
05d0d05d 1072//____________________________________________________________
1073TObjString* AliAnaParticleHadronCorrelation::GetAnalysisCuts()
1074{
1075 //Save parameters used for analysis
1076 TString parList ; //this will be list of parameters used for this analysis.
1077 const Int_t buffersize = 560;
1078 char onePar[buffersize] ;
1079
1080 snprintf(onePar,buffersize,"--- AliAnaPaticleHadronCorrelation ---\n") ;
1081 parList+=onePar ;
66e64043 1082 snprintf(onePar,buffersize," Pt Trigger > %3.2f ", fMinTriggerPt) ;
05d0d05d 1083 parList+=onePar ;
66e64043 1084 snprintf(onePar,buffersize," %3.2f < Pt associated < %3.2f ", fMinAssocPt, fMaxAssocPt) ;
05d0d05d 1085 parList+=onePar ;
66e64043 1086 snprintf(onePar,buffersize," %3.2f < Phi trigger particle-Hadron < %3.2f ", fDeltaPhiMinCut, fDeltaPhiMaxCut) ;
05d0d05d 1087 parList+=onePar ;
66e64043 1088 snprintf(onePar,buffersize," %3.2f < Phi trigger particle-UeHadron < %3.2f ", fUeDeltaPhiMinCut, fUeDeltaPhiMaxCut) ;
05d0d05d 1089 parList+=onePar ;
66e64043 1090 snprintf(onePar,buffersize,"Isolated Trigger? %d\n", fSelectIsolated) ;
05d0d05d 1091 parList+=onePar ;
66e64043 1092 snprintf(onePar,buffersize,"Several UE? %d\n", fMakeSeveralUE) ;
05d0d05d 1093 parList+=onePar ;
66e64043 1094 snprintf(onePar,buffersize,"Name of AOD Pi0 Branch %s ", fPi0AODBranchName.Data());
05d0d05d 1095 parList+=onePar ;
907b38cd 1096 snprintf(onePar,buffersize,"Do Decay-hadron correlation ? pi0 %d, decay %d", fPi0Trigger, fDecayTrigger) ;
05d0d05d 1097 parList+=onePar ;
3f150b4b 1098 snprintf(onePar,buffersize,"Select absolute leading for cluster triggers ? %d or Near Side Leading %d \n",
1099 fMakeAbsoluteLeading, fMakeNearSideLeading) ;
05d0d05d 1100 parList+=onePar ;
1101 snprintf(onePar,buffersize,"Associated particle pt bins %d: ", fNAssocPtBins) ;
1102 parList+=onePar ;
1103 for (Int_t ibin = 0; ibin<fNAssocPtBins; ibin++) {
1104 snprintf(onePar,buffersize,"bin %d = [%2.1f,%2.1f];", ibin, fAssocPtBinLimit[ibin], fAssocPtBinLimit[ibin+1]) ;
1105 }
1106 parList+=onePar ;
1107
1108 //Get parameters set in base class.
1109 parList += GetBaseParametersList() ;
1110
05d0d05d 1111 //Get parameters set in FiducialCut class (not available yet)
1112 //parlist += GetFidCut()->GetFidCutParametersList()
1113
1114 return new TObjString(parList) ;
1115
1116}
1117
1118//________________________________________________________________
e09cf5ef 1119TList * AliAnaParticleHadronCorrelation::GetCreateOutputObjects()
1120{
1121
1122 // Create histograms to be saved in output file and
1123 // store them in fOutputContainer
029dea5a 1124
e09cf5ef 1125 TList * outputContainer = new TList() ;
1126 outputContainer->SetName("CorrelationHistos") ;
1127
62f2fe4d 1128 Int_t nptbins = GetHistogramRanges()->GetHistoPtBins(); Int_t nphibins = GetHistogramRanges()->GetHistoPhiBins(); Int_t netabins = GetHistogramRanges()->GetHistoEtaBins(); Int_t ndeltaphibins = GetHistogramRanges()->GetHistoDeltaPhiBins(); Int_t ndeltaetabins = GetHistogramRanges()->GetHistoDeltaEtaBins();
1129 Float_t ptmax = GetHistogramRanges()->GetHistoPtMax(); Float_t phimax = GetHistogramRanges()->GetHistoPhiMax(); Float_t etamax = GetHistogramRanges()->GetHistoEtaMax(); Float_t deltaphimax = GetHistogramRanges()->GetHistoDeltaPhiMax(); Float_t deltaetamax = GetHistogramRanges()->GetHistoDeltaEtaMax();
1130 Float_t ptmin = GetHistogramRanges()->GetHistoPtMin(); Float_t phimin = GetHistogramRanges()->GetHistoPhiMin(); Float_t etamin = GetHistogramRanges()->GetHistoEtaMin(); Float_t deltaphimin = GetHistogramRanges()->GetHistoDeltaPhiMin(); Float_t deltaetamin = GetHistogramRanges()->GetHistoDeltaEtaMin();
e09cf5ef 1131
d0b625bc 1132 Int_t nMixBins = GetNCentrBin()*GetNZvertBin()*GetNRPBin();
1133
17af6e24 1134 TString nameMC[] = {"Photon","Pi0","Pi0Decay","EtaDecay","OtherDecay","Electron","Hadron"};
1135 TString pileUpName[] = {"SPD","EMCAL","SPDOrEMCAL","SPDAndEMCAL","SPDAndNotEMCAL","EMCALAndNotSPD","NotSPDAndNotEMCAL"} ;
1136
7d306daf 1137 // For vz dependent histograms, if option ON
1138 Int_t nz = 1 ;
1139 if(fCorrelVzBin) nz = GetNZvertBin();
1140 TString sz = "" ;
1141 TString tz = "" ;
1142
bef61a43 1143 fhPtTriggerInput = new TH1F("hPtInput","Input trigger #it{p}_{T}", nptbins,ptmin,ptmax);
1144 fhPtTriggerInput->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
1145 outputContainer->Add(fhPtTriggerInput);
7d306daf 1146
bef61a43 1147 if( fM02MaxCut > 0 && fM02MinCut > 0 )
1148 {
1149 fhPtTriggerSSCut = new TH1F("hPtTriggerSSCut","Trigger #it{p}_{T} after #lambda^{2}_{0} cut", nptbins,ptmin,ptmax);
1150 fhPtTriggerSSCut->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
1151 outputContainer->Add(fhPtTriggerSSCut);
1152 }
1153
1154 if( OnlyIsolated() )
1155 {
1156 fhPtTriggerIsoCut = new TH1F("hPtTriggerIsoCut","Trigger #it{p}_{T} after isolation (and #lambda^{2}_{0}) cut", nptbins,ptmin,ptmax);
1157 fhPtTriggerIsoCut->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
1158 outputContainer->Add(fhPtTriggerIsoCut);
1159 }
1160
1161 fhPtTriggerFidCut = new TH1F("hPtTriggerFidCut","Trigger #it{p}_{T} after fiducial (isolation and #lambda^{2}_{0}) cut", nptbins,ptmin,ptmax);
1162 fhPtTriggerFidCut->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
1163 outputContainer->Add(fhPtTriggerFidCut);
7d306daf 1164
858212dd 1165 fhPtLeading = new TH1F("hPtLeading","#it{p}_{T} distribution of leading particles", nptbins,ptmin,ptmax);
1166 fhPtLeading->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
7d306daf 1167 outputContainer->Add(fhPtLeading);
ca17b39f 1168
764ab1f4 1169 if(IsDataMC())
1170 {
b1f720a7 1171 for(Int_t i=0; i < 7; i++)
764ab1f4 1172 {
1173 fhPtLeadingMC[i] = new TH1F(Form("hPtLeading_MC%s",nameMC[i].Data()),
858212dd 1174 Form("#it{p}_{T} distribution of leading particles, trigger origin is %s",nameMC[i].Data()),
764ab1f4 1175 nptbins,ptmin,ptmax);
858212dd 1176 fhPtLeadingMC[i]->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
764ab1f4 1177 outputContainer->Add(fhPtLeadingMC[i]);
1178 }
1179 }
1180
7d306daf 1181 if(fCorrelVzBin)
1182 {
858212dd 1183 fhPtLeadingVzBin = new TH2F("hPtLeadingVzBin","#it{p}_{T} distribution of leading particles vs vz bin", nptbins,ptmin,ptmax,GetNZvertBin(),0,GetNZvertBin());
1184 fhPtLeadingVzBin->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
1185 fhPtLeadingVzBin->SetYTitle("#it{v}_{#it{z}} bin");
7d306daf 1186 outputContainer->Add(fhPtLeadingVzBin);
1187 }
1188
858212dd 1189 fhPtLeadingBin = new TH2F ("hPtLeadingBin","#it{p}_{T} distribution of leading particles", nptbins,ptmin,ptmax,nMixBins,0,nMixBins);
1190 fhPtLeadingBin->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
d0b625bc 1191 fhPtLeadingBin->SetYTitle("Bin");
7d306daf 1192 outputContainer->Add(fhPtLeadingBin);
d0b625bc 1193
e09cf5ef 1194 fhPhiLeading = new TH2F ("hPhiLeading","#phi distribution of leading Particles",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
1195 fhPhiLeading->SetYTitle("#phi (rad)");
7d306daf 1196 outputContainer->Add(fhPhiLeading);
1197
e09cf5ef 1198 fhEtaLeading = new TH2F ("hEtaLeading","#eta distribution of leading",nptbins,ptmin,ptmax, netabins,etamin,etamax);
1199 fhEtaLeading->SetYTitle("#eta ");
e09cf5ef 1200 outputContainer->Add(fhEtaLeading);
1201
858212dd 1202 fhPtLeadingCentrality = new TH2F("hPtLeadingCentrality","Leading particle #it{p}_{T} vs centrality",nptbins,ptmin,ptmax,100,0.,100) ;
1203 fhPtLeadingCentrality->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
68cd2624 1204 fhPtLeadingCentrality->SetYTitle("Centrality (%)");
1205 outputContainer->Add(fhPtLeadingCentrality) ;
1206
858212dd 1207 fhPtLeadingEventPlane = new TH2F("hPtLeadingEventPlane","Leading particle #it{p}_{T} vs event plane angle",nptbins,ptmin,ptmax, 100,0.,TMath::Pi()) ;
1208 fhPtLeadingEventPlane->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
68cd2624 1209 fhPtLeadingEventPlane->SetXTitle("EP angle (rad)");
1210 outputContainer->Add(fhPtLeadingEventPlane) ;
1211
1212 fhLeadingEventPlaneCentrality = new TH2F("hLeadingEventPlane","Leading particle centrality vs event plane angle",100,0.,100,100,0.,TMath::Pi()) ;
1213 fhLeadingEventPlaneCentrality->SetXTitle("Centrality (%)");
1214 fhLeadingEventPlaneCentrality->SetYTitle("EP angle (rad)");
1215 outputContainer->Add(fhLeadingEventPlaneCentrality) ;
1216
e09cf5ef 1217 //Correlation with charged hadrons
547c2f01 1218 if(GetReader()->IsCTSSwitchedOn())
1219 {
e09cf5ef 1220 fhDeltaPhiDeltaEtaCharged = new TH2F
62f2fe4d 1221 ("hDeltaPhiDeltaEtaCharged","#eta_{trigger} - #eta_{h^{#pm}} vs #phi_{trigger} - #phi_{h^{#pm}}",
1222 ndeltaphibins ,deltaphimin,deltaphimax,ndeltaetabins,deltaetamin,deltaetamax);
2bb7ac98 1223 fhDeltaPhiDeltaEtaCharged->SetXTitle("#Delta #phi (rad)");
e09cf5ef 1224 fhDeltaPhiDeltaEtaCharged->SetYTitle("#Delta #eta");
1225
b1f720a7 1226 fhDeltaPhiDeltaEtaChargedPtA3GeV = new TH2F
858212dd 1227 ("hDeltaPhiDeltaEtaChargedPtA3GeV","#eta_{trigger} - #eta_{h^{#pm}} vs #phi_{trigger} - #phi_{h^{#pm}, #it{p}_{TA}>3 GeV/#it{c}}",
b1f720a7 1228 ndeltaphibins ,deltaphimin,deltaphimax,ndeltaetabins,deltaetamin,deltaetamax);
2bb7ac98 1229 fhDeltaPhiDeltaEtaChargedPtA3GeV->SetXTitle("#Delta #phi (rad)");
b1f720a7 1230 fhDeltaPhiDeltaEtaChargedPtA3GeV->SetYTitle("#Delta #eta");
1231
e09cf5ef 1232 fhPhiCharged = new TH2F
858212dd 1233 ("hPhiCharged","#phi_{h^{#pm}} vs #it{p}_{T #pm}",
e09cf5ef 1234 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
1235 fhPhiCharged->SetYTitle("#phi_{h^{#pm}} (rad)");
858212dd 1236 fhPhiCharged->SetXTitle("#it{p}_{T #pm} (GeV/#it{c})");
e09cf5ef 1237
1238 fhEtaCharged = new TH2F
858212dd 1239 ("hEtaCharged","#eta_{h^{#pm}} vs #it{p}_{T #pm}",
e09cf5ef 1240 nptbins,ptmin,ptmax,netabins,etamin,etamax);
1241 fhEtaCharged->SetYTitle("#eta_{h^{#pm}} (rad)");
858212dd 1242 fhEtaCharged->SetXTitle("#it{p}_{T #pm} (GeV/#it{c})");
e09cf5ef 1243
1244 fhDeltaPhiCharged = new TH2F
858212dd 1245 ("hDeltaPhiCharged","#phi_{trigger} - #phi_{h^{#pm}} vs #it{p}_{T trigger}",
62f2fe4d 1246 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
2bb7ac98 1247 fhDeltaPhiCharged->SetYTitle("#Delta #phi (rad)");
858212dd 1248 fhDeltaPhiCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
e09cf5ef 1249
b1f720a7 1250 fhDeltaPhiChargedPtA3GeV = new TH2F
858212dd 1251 ("hDeltaPhiChargedPtA3GeV","#phi_{trigger} - #phi_{h^{#pm}} vs #it{p}_{T trigger}, #it{p}_{TA}>3 GeV/#it{c}",
b1f720a7 1252 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
2bb7ac98 1253 fhDeltaPhiChargedPtA3GeV->SetYTitle("#Delta #phi (rad)");
858212dd 1254 fhDeltaPhiChargedPtA3GeV->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
b1f720a7 1255
1256
e09cf5ef 1257 fhDeltaPhiChargedPt = new TH2F
858212dd 1258 ("hDeltaPhiChargedPt","#phi_{trigger} - #phi_{#h^{#pm}} vs #it{p}_{T h^{#pm}}",
62f2fe4d 1259 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
2bb7ac98 1260 fhDeltaPhiChargedPt->SetYTitle("#Delta #phi (rad)");
858212dd 1261 fhDeltaPhiChargedPt->SetXTitle("#it{p}_{T h^{#pm}} (GeV/#it{c})");
e09cf5ef 1262
1263 fhDeltaPhiUeChargedPt = new TH2F
858212dd 1264 ("hDeltaPhiUeChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs #it{p}_{T Ueh^{#pm}}",
62f2fe4d 1265 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
2bb7ac98 1266 fhDeltaPhiUeChargedPt->SetYTitle("#Delta #phi (rad)");
858212dd 1267 fhDeltaPhiUeChargedPt->SetXTitle("#it{p}_{T h^{#pm}} (GeV/#it{c})");
e09cf5ef 1268
9623bf34 1269 fhUePart = new TH1F("hUePart","UE particles distribution vs pt trig",
1270 nptbins,ptmin,ptmax);
1271 fhUePart->SetYTitle("dNch");
858212dd 1272 fhUePart->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
9623bf34 1273
1274
e09cf5ef 1275 fhDeltaEtaCharged = new TH2F
858212dd 1276 ("hDeltaEtaCharged","#eta_{trigger} - #eta_{h^{#pm}} vs #it{p}_{T trigger}",
62f2fe4d 1277 nptbins,ptmin,ptmax,ndeltaetabins,deltaetamin,deltaetamax);
e09cf5ef 1278 fhDeltaEtaCharged->SetYTitle("#Delta #eta");
858212dd 1279 fhDeltaEtaCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
e09cf5ef 1280
b1f720a7 1281 fhDeltaEtaChargedPtA3GeV = new TH2F
858212dd 1282 ("hDeltaEtaChargedPtA3GeV","#eta_{trigger} - #eta_{h^{#pm}} vs #it{p}_{T trigger}, #it{p}_{TA}>3 GeV/#it{c}",
b1f720a7 1283 nptbins,ptmin,ptmax,ndeltaetabins,deltaetamin,deltaetamax);
1284 fhDeltaEtaChargedPtA3GeV->SetYTitle("#Delta #eta");
858212dd 1285 fhDeltaEtaChargedPtA3GeV->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
b1f720a7 1286
3f150b4b 1287 fhXECharged =
858212dd 1288 new TH2F("hXECharged","#it{x}_{#it{E}} for charged tracks",
e09cf5ef 1289 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1290 fhXECharged->SetYTitle("#it{x}_{#it{E}}");
1291 fhXECharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
727a309a 1292
1293 fhXECharged_Cone2 =
858212dd 1294 new TH2F("hXECharged_Cone2","#it{x}_{#it{E}} for charged tracks in cone 2 (5#pi/6-7#pi/6)",
727a309a 1295 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1296 fhXECharged_Cone2->SetYTitle("#it{x}_{#it{E}}");
1297 fhXECharged_Cone2->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
e09cf5ef 1298
3f150b4b 1299 fhXEUeCharged =
858212dd 1300 new TH2F("hXEUeCharged","#it{x}_{#it{E}} for Underlying Event",
e09cf5ef 1301 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1302 fhXEUeCharged->SetYTitle("#it{x}_{#it{E}}");
1303 fhXEUeCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
e09cf5ef 1304
3f150b4b 1305 fhXEPosCharged =
858212dd 1306 new TH2F("hXEPositiveCharged","#it{x}_{#it{E}} for positive charged tracks",
e09cf5ef 1307 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1308 fhXEPosCharged->SetYTitle("#it{x}_{#it{E}}");
1309 fhXEPosCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
e09cf5ef 1310
3f150b4b 1311 fhXENegCharged =
858212dd 1312 new TH2F("hXENegativeCharged","#it{x}_{#it{E}} for negative charged tracks",
e09cf5ef 1313 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1314 fhXENegCharged->SetYTitle("#it{x}_{#it{E}}");
1315 fhXENegCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
e09cf5ef 1316
3f150b4b 1317 fhPtHbpXECharged =
858212dd 1318 new TH2F("hHbpXECharged","#xi = ln(1/#it{x}_{#it{E}}) with charged hadrons",
e09cf5ef 1319 nptbins,ptmin,ptmax,200,0.,10.);
858212dd 1320 fhPtHbpXECharged->SetYTitle("ln(1/#it{x}_{#it{E}})");
1321 fhPtHbpXECharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
727a309a 1322
1323 fhPtHbpXECharged_Cone2 =
858212dd 1324 new TH2F("hHbpXECharged_Cone2","#xi = ln(1/#it{x}_{#it{E}}) with charged hadrons in cone 2 (5#pi/6-7#pi/6)",
727a309a 1325 nptbins,ptmin,ptmax,200,0.,10.);
858212dd 1326 fhPtHbpXECharged_Cone2->SetYTitle("ln(1/#it{x}_{#it{E}})");
1327 fhPtHbpXECharged_Cone2->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
e09cf5ef 1328
3f150b4b 1329 fhPtHbpXEUeCharged =
858212dd 1330 new TH2F("hHbpXEUeCharged","#xi = ln(1/#it{x}_{#it{E}}) with charged hadrons,Underlying Event",
e09cf5ef 1331 nptbins,ptmin,ptmax,200,0.,10.);
858212dd 1332 fhPtHbpXEUeCharged->SetYTitle("ln(1/#it{x}_{#it{E}})");
1333 fhPtHbpXEUeCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
3f150b4b 1334
1335 fhZTCharged =
858212dd 1336 new TH2F("hZTCharged","#it{z}_{T} for charged tracks",
3f150b4b 1337 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1338 fhZTCharged->SetYTitle("#it{z}_{T}");
1339 fhZTCharged->SetXTitle("#it{p}_{T trigger}");
3f150b4b 1340
1341 fhZTUeCharged =
858212dd 1342 new TH2F("hZTUeCharged","#it{z}_{T} for Underlying Event",
3f150b4b 1343 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1344 fhZTUeCharged->SetYTitle("#it{z}_{T}");
1345 fhZTUeCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
3f150b4b 1346
1347 fhZTPosCharged =
858212dd 1348 new TH2F("hZTPositiveCharged","#it{z}_{T} for positive charged tracks",
3f150b4b 1349 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1350 fhZTPosCharged->SetYTitle("#it{z}_{T}");
1351 fhZTPosCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
3f150b4b 1352
1353 fhZTNegCharged =
858212dd 1354 new TH2F("hZTNegativeCharged","#it{z}_{T} for negative charged tracks",
3f150b4b 1355 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1356 fhZTNegCharged->SetYTitle("#it{z}_{T}");
1357 fhZTNegCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
3f150b4b 1358
1359 fhPtHbpZTCharged =
858212dd 1360 new TH2F("hHbpZTCharged","#xi = ln(1/#it{z}_{T}) with charged hadrons",
3f150b4b 1361 nptbins,ptmin,ptmax,200,0.,10.);
858212dd 1362 fhPtHbpZTCharged->SetYTitle("ln(1/#it{z}_{T})");
1363 fhPtHbpZTCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
3f150b4b 1364
1365 fhPtHbpZTUeCharged =
858212dd 1366 new TH2F("hHbpZTUeCharged","#xi = ln(1/#it{z}_{T}) with charged hadrons,Underlying Event",
3f150b4b 1367 nptbins,ptmin,ptmax,200,0.,10.);
858212dd 1368 fhPtHbpZTUeCharged->SetYTitle("ln(1/#it{x}_{#it{E}})");
1369 fhPtHbpZTUeCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
e09cf5ef 1370
1371 fhPtTrigPout =
babcbc9d 1372 new TH2F("hPtTrigPout","Pout with triggers",
e09cf5ef 1373 nptbins,ptmin,ptmax,2*nptbins,-ptmax,ptmax);
858212dd 1374 fhPtTrigPout->SetYTitle("#it{p}_{out} (GeV/#it{c})");
1375 fhPtTrigPout->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
e09cf5ef 1376
e09cf5ef 1377 fhPtTrigCharged =
b1f720a7 1378 new TH2F("hPtTrigCharged","trigger and charged tracks pt distribution",
e09cf5ef 1379 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
858212dd 1380 fhPtTrigCharged->SetYTitle("#it{p}_{T h^{#pm}} (GeV/#it{c})");
1381 fhPtTrigCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
e09cf5ef 1382
1383 outputContainer->Add(fhDeltaPhiDeltaEtaCharged);
b1f720a7 1384 outputContainer->Add(fhDeltaPhiDeltaEtaChargedPtA3GeV);
e09cf5ef 1385 outputContainer->Add(fhPhiCharged) ;
1386 outputContainer->Add(fhEtaCharged) ;
1387 outputContainer->Add(fhDeltaPhiCharged) ;
b1f720a7 1388 outputContainer->Add(fhDeltaPhiChargedPtA3GeV) ;
e09cf5ef 1389 outputContainer->Add(fhDeltaEtaCharged) ;
b1f720a7 1390 outputContainer->Add(fhDeltaEtaChargedPtA3GeV) ;
e09cf5ef 1391 outputContainer->Add(fhDeltaPhiChargedPt) ;
1392 outputContainer->Add(fhDeltaPhiUeChargedPt) ;
9623bf34 1393 outputContainer->Add(fhUePart);
050ad675 1394
3f150b4b 1395 outputContainer->Add(fhXECharged) ;
727a309a 1396 outputContainer->Add(fhXECharged_Cone2) ;
764ab1f4 1397 if(IsDataMC())
1398 {
b1f720a7 1399 for(Int_t i=0; i < 7; i++)
764ab1f4 1400 {
b1f720a7 1401
1402 fhDeltaPhiChargedMC[i] = new TH2F(Form("hDeltaPhiCharged_MC%s",nameMC[i].Data()),
1403 Form("#Delta #phi for charged tracks, trigger origin is %s",nameMC[i].Data()),
1404 nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax);
858212dd 1405 fhDeltaPhiChargedMC[i]->SetYTitle("#it{x}_{#it{E}}");
1406 fhDeltaPhiChargedMC[i]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
b1f720a7 1407 outputContainer->Add(fhDeltaPhiChargedMC[i]) ;
1408
764ab1f4 1409 fhXEChargedMC[i] = new TH2F(Form("hXECharged_MC%s",nameMC[i].Data()),
858212dd 1410 Form("#it{x}_{#it{E}} for charged tracks, trigger origin is %s",nameMC[i].Data()),
764ab1f4 1411 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1412 fhXEChargedMC[i]->SetYTitle("#it{x}_{#it{E}}");
1413 fhXEChargedMC[i]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
764ab1f4 1414 outputContainer->Add(fhXEChargedMC[i]) ;
1415 }
1416 }
1417
3f150b4b 1418 outputContainer->Add(fhXEPosCharged) ;
1419 outputContainer->Add(fhXENegCharged) ;
1420 outputContainer->Add(fhXEUeCharged) ;
1421 outputContainer->Add(fhPtHbpXECharged) ;
727a309a 1422 outputContainer->Add(fhPtHbpXECharged_Cone2) ;
3f150b4b 1423 outputContainer->Add(fhPtHbpXEUeCharged) ;
050ad675 1424
3f150b4b 1425 outputContainer->Add(fhZTCharged) ;
1426 outputContainer->Add(fhZTPosCharged) ;
1427 outputContainer->Add(fhZTNegCharged) ;
1428 outputContainer->Add(fhZTUeCharged) ;
1429 outputContainer->Add(fhPtHbpZTCharged) ;
1430 outputContainer->Add(fhPtHbpZTUeCharged) ;
1431
e09cf5ef 1432 outputContainer->Add(fhPtTrigPout) ;
e09cf5ef 1433 outputContainer->Add(fhPtTrigCharged) ;
1434
b1f720a7 1435 if(fFillPileUpHistograms)
1436 {
560498d1 1437 fhDeltaPhiChargedOtherBC = new TH2F
858212dd 1438 ("hDeltaPhiChargedOtherBC","#phi_{trigger} - #phi_{h^{#pm}} vs #it{p}_{T trigger}, track BC!=0",
560498d1 1439 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1440 fhDeltaPhiChargedOtherBC->SetYTitle("#Delta #phi (rad)");
858212dd 1441 fhDeltaPhiChargedOtherBC->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
560498d1 1442
1443 fhDeltaPhiChargedPtA3GeVOtherBC = new TH2F
858212dd 1444 ("hDeltaPhiChargedPtA3GeVOtherBC","#phi_{trigger} - #phi_{h^{#pm}} vs #it{p}_{T trigger}, #it{p}_{TA}>3 GeV/#it{c}, track BC!=0",
560498d1 1445 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1446 fhDeltaPhiChargedPtA3GeVOtherBC->SetYTitle("#Delta #phi (rad)");
858212dd 1447 fhDeltaPhiChargedPtA3GeVOtherBC->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
560498d1 1448
1449 fhPtTrigChargedOtherBC =
1450 new TH2F("hPtTrigChargedOtherBC","trigger and charged tracks pt distribution, track BC!=0",
1451 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
858212dd 1452 fhPtTrigChargedOtherBC->SetYTitle("#it{p}_{T h^{#pm}} (GeV/#it{c})");
1453 fhPtTrigChargedOtherBC->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
560498d1 1454
1455 fhXEChargedOtherBC =
858212dd 1456 new TH2F("hXEChargedOtherBC","#it{x}_{#it{E}} for charged tracks, track BC!=0",
560498d1 1457 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1458 fhXEChargedOtherBC->SetYTitle("#it{x}_{#it{E}}");
1459 fhXEChargedOtherBC->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
560498d1 1460
1461 fhXEUeChargedOtherBC =
858212dd 1462 new TH2F("hXEUeChargedOtherBC","#it{x}_{#it{E}} for Underlying Event, track BC!=0",
560498d1 1463 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1464 fhXEUeChargedOtherBC->SetYTitle("#it{x}_{#it{E}}");
1465 fhXEUeChargedOtherBC->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
560498d1 1466
1467 fhZTChargedOtherBC =
858212dd 1468 new TH2F("hZTChargedOtherBC","#it{z}_{T} for charged tracks, track BC!=0",
560498d1 1469 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1470 fhZTChargedOtherBC->SetYTitle("#it{z}_{T}");
1471 fhZTChargedOtherBC->SetXTitle("#it{p}_{T trigger}");
560498d1 1472
1473 fhZTUeChargedOtherBC =
858212dd 1474 new TH2F("hZTUeChargedOtherBC","#it{z}_{T} for Underlying Event, track BC!=0",
560498d1 1475 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1476 fhZTUeChargedOtherBC->SetYTitle("#it{z}_{T}");
1477 fhZTUeChargedOtherBC->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
560498d1 1478
1479 outputContainer->Add(fhDeltaPhiChargedOtherBC) ;
1480 outputContainer->Add(fhDeltaPhiChargedPtA3GeVOtherBC) ;
1481 outputContainer->Add(fhXEChargedOtherBC) ;
1482 outputContainer->Add(fhXEUeChargedOtherBC) ;
1483 outputContainer->Add(fhZTChargedOtherBC) ;
1484 outputContainer->Add(fhZTUeChargedOtherBC) ;
1485 outputContainer->Add(fhPtTrigChargedOtherBC) ;
1486
2a9171b5 1487 fhDeltaPhiChargedBC0 = new TH2F
858212dd 1488 ("hDeltaPhiChargedBC0","#phi_{trigger} - #phi_{h^{#pm}} vs #it{p}_{T trigger}, track BC==0",
2a9171b5 1489 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1490 fhDeltaPhiChargedBC0->SetYTitle("#Delta #phi (rad)");
858212dd 1491 fhDeltaPhiChargedBC0->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2a9171b5 1492
1493 fhDeltaPhiChargedPtA3GeVBC0 = new TH2F
858212dd 1494 ("hDeltaPhiChargedPtA3GeVBC0","#phi_{trigger} - #phi_{h^{#pm}} vs #it{p}_{T trigger}, #it{p}_{TA}>3 GeV/#it{c}, track BC==0",
2a9171b5 1495 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1496 fhDeltaPhiChargedPtA3GeVBC0->SetYTitle("#Delta #phi (rad)");
858212dd 1497 fhDeltaPhiChargedPtA3GeVBC0->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2a9171b5 1498
1499 fhPtTrigChargedBC0 =
1500 new TH2F("hPtTrigChargedBC0","trigger and charged tracks pt distribution, track BC==0",
1501 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
858212dd 1502 fhPtTrigChargedBC0->SetYTitle("#it{p}_{T h^{#pm}} (GeV/#it{c})");
1503 fhPtTrigChargedBC0->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2a9171b5 1504
1505 fhXEChargedBC0 =
858212dd 1506 new TH2F("hXEChargedBC0","#it{x}_{#it{E}} for charged tracks, track BC==0",
2a9171b5 1507 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1508 fhXEChargedBC0->SetYTitle("#it{x}_{#it{E}}");
1509 fhXEChargedBC0->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2a9171b5 1510
1511 fhXEUeChargedBC0 =
858212dd 1512 new TH2F("hXEUeChargedBC0","#it{x}_{#it{E}} for Underlying Event, track BC==0",
2a9171b5 1513 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1514 fhXEUeChargedBC0->SetYTitle("#it{x}_{#it{E}}");
1515 fhXEUeChargedBC0->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2a9171b5 1516
1517 fhZTChargedBC0 =
858212dd 1518 new TH2F("hZTChargedBC0","#it{z}_{T} for charged tracks, track BC==0",
2a9171b5 1519 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1520 fhZTChargedBC0->SetYTitle("#it{z}_{T}");
1521 fhZTChargedBC0->SetXTitle("#it{p}_{T trigger}");
2a9171b5 1522
1523 fhZTUeChargedBC0 =
858212dd 1524 new TH2F("hZTUeChargedBC0","#it{z}_{T} for Underlying Event, track BC==0",
2a9171b5 1525 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1526 fhZTUeChargedBC0->SetYTitle("#it{z}_{T}");
1527 fhZTUeChargedBC0->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2a9171b5 1528
1529 outputContainer->Add(fhDeltaPhiChargedBC0) ;
1530 outputContainer->Add(fhDeltaPhiChargedPtA3GeVBC0) ;
1531 outputContainer->Add(fhXEChargedBC0) ;
1532 outputContainer->Add(fhXEUeChargedBC0) ;
1533 outputContainer->Add(fhZTChargedBC0) ;
1534 outputContainer->Add(fhZTUeChargedBC0) ;
1535 outputContainer->Add(fhPtTrigChargedBC0) ;
1536
858212dd 1537 fhPtLeadingVtxBC0 = new TH1F("hPtLeadingVtxBC0","#it{p}_{T} distribution of leading particles", nptbins,ptmin,ptmax);
1538 fhPtLeadingVtxBC0->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
cc944149 1539
1540 fhDeltaPhiChargedVtxBC0 = new TH2F
858212dd 1541 ("hDeltaPhiChargedVtxBC0","#phi_{trigger} - #phi_{h^{#pm}} vs #it{p}_{T trigger}, track BC==0",
cc944149 1542 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1543 fhDeltaPhiChargedVtxBC0->SetYTitle("#Delta #phi (rad)");
858212dd 1544 fhDeltaPhiChargedVtxBC0->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
cc944149 1545
1546 fhDeltaPhiChargedPtA3GeVVtxBC0 = new TH2F
858212dd 1547 ("hDeltaPhiChargedPtA3GeVVtxBC0","#phi_{trigger} - #phi_{h^{#pm}} vs #it{p}_{T trigger}, #it{p}_{TA}>3 GeV/#it{c}, track BC==0",
cc944149 1548 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
1549 fhDeltaPhiChargedPtA3GeVVtxBC0->SetYTitle("#Delta #phi (rad)");
858212dd 1550 fhDeltaPhiChargedPtA3GeVVtxBC0->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
cc944149 1551
1552 fhPtTrigChargedVtxBC0 =
1553 new TH2F("hPtTrigChargedVtxBC0","trigger and charged tracks pt distribution, track BC==0",
1554 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
858212dd 1555 fhPtTrigChargedVtxBC0->SetYTitle("#it{p}_{T h^{#pm}} (GeV/#it{c})");
1556 fhPtTrigChargedVtxBC0->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
cc944149 1557
1558 fhXEChargedVtxBC0 =
858212dd 1559 new TH2F("hXEChargedVtxBC0","#it{x}_{#it{E}} for charged tracks, track BC==0",
cc944149 1560 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1561 fhXEChargedVtxBC0->SetYTitle("#it{x}_{#it{E}}");
1562 fhXEChargedVtxBC0->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
cc944149 1563
1564 fhXEUeChargedVtxBC0 =
858212dd 1565 new TH2F("hXEUeChargedVtxBC0","#it{x}_{#it{E}} for Underlying Event, track BC==0",
cc944149 1566 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1567 fhXEUeChargedVtxBC0->SetYTitle("#it{x}_{#it{E}}");
1568 fhXEUeChargedVtxBC0->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
cc944149 1569
1570 fhZTChargedVtxBC0 =
858212dd 1571 new TH2F("hZTChargedVtxBC0","#it{z}_{T} for charged tracks, track BC==0",
cc944149 1572 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1573 fhZTChargedVtxBC0->SetYTitle("#it{z}_{T}");
1574 fhZTChargedVtxBC0->SetXTitle("#it{p}_{T trigger}");
cc944149 1575
1576 fhZTUeChargedVtxBC0 =
858212dd 1577 new TH2F("hZTUeChargedVtxBC0","#it{z}_{T} for Underlying Event, track BC==0",
cc944149 1578 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1579 fhZTUeChargedVtxBC0->SetYTitle("#it{z}_{T}");
1580 fhZTUeChargedVtxBC0->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
cc944149 1581
1582 outputContainer->Add(fhPtLeadingVtxBC0);
1583 outputContainer->Add(fhDeltaPhiChargedVtxBC0) ;
1584 outputContainer->Add(fhDeltaPhiChargedPtA3GeVVtxBC0) ;
1585 outputContainer->Add(fhXEChargedVtxBC0) ;
1586 outputContainer->Add(fhXEUeChargedVtxBC0) ;
1587 outputContainer->Add(fhZTChargedVtxBC0) ;
1588 outputContainer->Add(fhZTUeChargedVtxBC0) ;
1589 outputContainer->Add(fhPtTrigChargedVtxBC0) ;
2a9171b5 1590
17af6e24 1591 for(Int_t i = 0 ; i < 7 ; i++)
1592 {
1593 fhPtLeadingPileUp[i] = new TH1F(Form("hPtLeadingPileUp%s",pileUpName[i].Data()),
858212dd 1594 Form("#it{p}_{T} distribution of leading particles, %s Pile-Up event",pileUpName[i].Data()), nptbins,ptmin,ptmax);
1595 fhPtLeadingPileUp[i]->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
17af6e24 1596 outputContainer->Add(fhPtLeadingPileUp[i]);
1597
1598 fhDeltaPhiChargedPileUp[i] = new TH2F(Form("hDeltaPhiChargedPileUp%s",pileUpName[i].Data()),
858212dd 1599 Form("#phi_{trigger} - #phi_{h^{#pm}} vs #it{p}_{T trigger}, %s Pile-Up event",pileUpName[i].Data()),
17af6e24 1600 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
2bb7ac98 1601 fhDeltaPhiChargedPileUp[i]->SetYTitle("#Delta #phi (rad)");
858212dd 1602 fhDeltaPhiChargedPileUp[i]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
17af6e24 1603 outputContainer->Add(fhDeltaPhiChargedPileUp[i]) ;
1604
1605 fhDeltaPhiChargedPtA3GeVPileUp[i] = new TH2F(Form("hDeltaPhiChargedPtA3GeVPileUp%s",pileUpName[i].Data()),
858212dd 1606 Form("#phi_{trigger} - #phi_{h^{#pm}} vs #it{p}_{T trigger}, #it{p}_{TA}>3 GeV/#it{c}, %s Pile-Up event",pileUpName[i].Data()),
17af6e24 1607 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
2bb7ac98 1608 fhDeltaPhiChargedPtA3GeVPileUp[i]->SetYTitle("#Delta #phi (rad)");
858212dd 1609 fhDeltaPhiChargedPtA3GeVPileUp[i]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
17af6e24 1610 outputContainer->Add(fhDeltaPhiChargedPtA3GeVPileUp[i]) ;
1611
1612 fhDeltaEtaChargedPileUp[i] = new TH2F(Form("hDeltaEtaChargedPileUp%s",pileUpName[i].Data()),
858212dd 1613 Form("#eta_{trigger} - #eta_{h^{#pm}} vs #it{p}_{T trigger}, %s Pile-Up event",pileUpName[i].Data()),
17af6e24 1614 nptbins,ptmin,ptmax,ndeltaetabins,deltaetamin,deltaetamax);
1615 fhDeltaEtaChargedPileUp[i]->SetYTitle("#Delta #eta");
858212dd 1616 fhDeltaEtaChargedPileUp[i]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
17af6e24 1617 outputContainer->Add(fhDeltaEtaChargedPileUp[i]) ;
1618
1619 fhDeltaEtaChargedPtA3GeVPileUp[i] = new TH2F(Form("hDeltaEtaChargedPtA3GeVPileUp%s",pileUpName[i].Data()),
858212dd 1620 Form("#eta_{trigger} - #eta_{h^{#pm}} vs #it{p}_{T trigger}, #it{p}_{TA}>3 GeV/#it{c}, %s Pile-Up event",pileUpName[i].Data()),
17af6e24 1621 nptbins,ptmin,ptmax,ndeltaetabins,deltaetamin,deltaetamax);
1622 fhDeltaEtaChargedPtA3GeVPileUp[i]->SetYTitle("#Delta #eta");
858212dd 1623 fhDeltaEtaChargedPtA3GeVPileUp[i]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
17af6e24 1624 outputContainer->Add(fhDeltaEtaChargedPtA3GeVPileUp[i]) ;
1625
1626 fhXEChargedPileUp[i] = new TH2F(Form("hXEChargedPileUp%s",pileUpName[i].Data()),
858212dd 1627 Form("#it{x}_{#it{E}} for charged tracks, %s Pile-Up event",pileUpName[i].Data()),
17af6e24 1628 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1629 fhXEChargedPileUp[i]->SetYTitle("#it{x}_{#it{E}}");
1630 fhXEChargedPileUp[i]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
17af6e24 1631 outputContainer->Add(fhXEChargedPileUp[i]) ;
1632
1633 fhXEUeChargedPileUp[i] = new TH2F(Form("hXEUeChargedPileUp%s",pileUpName[i].Data()),
858212dd 1634 Form("#it{x}_{#it{E}} for Underlying Event, %s Pile-Up event",pileUpName[i].Data()),
17af6e24 1635 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1636 fhXEUeChargedPileUp[i]->SetYTitle("#it{x}_{#it{E}}");
1637 fhXEUeChargedPileUp[i]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
17af6e24 1638 outputContainer->Add(fhXEUeChargedPileUp[i]) ;
1639
1640 fhZTChargedPileUp[i] = new TH2F(Form("hZTChargedPileUp%s",pileUpName[i].Data()),
858212dd 1641 Form("#it{z}_{T} for charged tracks, %s Pile-Up event",pileUpName[i].Data()),
17af6e24 1642 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1643 fhZTChargedPileUp[i]->SetYTitle("#it{z}_{T}");
1644 fhZTChargedPileUp[i]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
17af6e24 1645 outputContainer->Add(fhZTChargedPileUp[i]) ;
1646
1647 fhZTUeChargedPileUp[i] = new TH2F(Form("hZTUeChargedPileUp%s",pileUpName[i].Data()),
858212dd 1648 Form("#it{z}_{T} for Underlying Event, %s Pile-Up event",pileUpName[i].Data()),
17af6e24 1649 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1650 fhZTUeChargedPileUp[i]->SetYTitle("#it{z}_{T}");
1651 fhZTUeChargedPileUp[i]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
17af6e24 1652 outputContainer->Add(fhZTUeChargedPileUp[i]) ;
1653
1654 fhPtTrigChargedPileUp[i] = new TH2F(Form("hPtTrigChargedPileUp%s",pileUpName[i].Data()),
1655 Form("trigger and charged tracks pt distribution, %s Pile-Up event",pileUpName[i].Data()),
1656 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
858212dd 1657 fhPtTrigChargedPileUp[i]->SetYTitle("#it{p}_{T h^{#pm}} (GeV/#it{c})");
1658 fhPtTrigChargedPileUp[i]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
17af6e24 1659 outputContainer->Add(fhPtTrigChargedPileUp[i]) ;
2bb7ac98 1660
17af6e24 1661 }
b1f720a7 1662 }
1663
547c2f01 1664 if(DoEventSelect())
1665 {
e09cf5ef 1666 Int_t nMultiBins = GetMultiBin();
1667 fhTrigDeltaPhiCharged = new TH2F*[nMultiBins] ;
1668 fhTrigDeltaEtaCharged = new TH2F*[nMultiBins] ;
3f150b4b 1669 fhTrigXECorr = new TH2F*[nMultiBins] ;
1670 fhTrigXEUeCorr = new TH2F*[nMultiBins] ;
1671 fhTrigZTCorr = new TH2F*[nMultiBins] ;
1672 fhTrigZTUeCorr = new TH2F*[nMultiBins] ;
1673
1674 for(Int_t im=0; im<nMultiBins; im++)
1675 {
e09cf5ef 1676 fhTrigDeltaPhiCharged[im] = new TH2F
62f2fe4d 1677 (Form("hTrigDeltaPhiCharged_%d",im),Form("hTrigDeltaPhiCharged_%d",im), nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
858212dd 1678 fhTrigDeltaPhiCharged[im]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2bb7ac98 1679 fhTrigDeltaPhiCharged[im]->SetYTitle("#Delta #phi (rad)");
3f150b4b 1680
e09cf5ef 1681 fhTrigDeltaEtaCharged[im] = new TH2F
62f2fe4d 1682 (Form("hTrigDeltaEtaCharged_%d",im),Form("hTrigDeltaEtaCharged_%d",im), nptbins,ptmin,ptmax, ndeltaetabins ,deltaetamin,deltaetamax);
858212dd 1683 fhTrigDeltaEtaCharged[im]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
e09cf5ef 1684 fhTrigDeltaEtaCharged[im]->SetYTitle("#Delta #eta");
3f150b4b 1685
1686 fhTrigXECorr[im] = new TH2F
1687 (Form("hTrigXEPtCorr_%d",im),Form("hTrigXEPtCorr_%d",im), nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1688 fhTrigXECorr[im]->SetYTitle("#it{x}_{#it{E} trigger h^{#pm}}");
1689 fhTrigXECorr[im]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
3f150b4b 1690
1691 fhTrigXEUeCorr[im] = new TH2F
1692 (Form("hTrigXEPtUeCorr_%d",im),Form("hTrigXEPtUeCorr_%d",im), nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1693 fhTrigXEUeCorr[im]->SetYTitle("#it{x}_{#it{E} trigger h^{#pm}}");
1694 fhTrigXEUeCorr[im]->SetXTitle("#it{p}_{T trigger}(GeV/#it{c})");
3f150b4b 1695
1696 fhTrigZTCorr[im] = new TH2F
1697 (Form("hTrigZTPtCorr_%d",im),Form("hTrigZTPtCorr_%d",im), nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1698 fhTrigZTCorr[im]->SetYTitle("#it{z}_{trigger h^{#pm}}");
1699 fhTrigZTCorr[im]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
3f150b4b 1700
1701 fhTrigZTUeCorr[im] = new TH2F
1702 (Form("hTrigZTPtUeCorr_%d",im),Form("hTrigZTPtUeCorr_%d",im), nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1703 fhTrigZTUeCorr[im]->SetYTitle("#it{z}_{trigger h^{#pm}}");
1704 fhTrigZTUeCorr[im]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
045396c8 1705
e09cf5ef 1706 outputContainer->Add(fhTrigDeltaPhiCharged[im]) ;
1707 outputContainer->Add(fhTrigDeltaEtaCharged[im]) ;
3f150b4b 1708 outputContainer->Add(fhTrigXECorr[im]);
1709 outputContainer->Add(fhTrigXEUeCorr[im]);
1710 outputContainer->Add(fhTrigZTCorr[im]);
1711 outputContainer->Add(fhTrigZTUeCorr[im]);
045396c8 1712 }
1713 }
1714
907b38cd 1715 if(fFillBradHisto)
1716 {
858212dd 1717 fhAssocPtBkg = new TH2F("hAssocPtBkg", " Trigger #it{p}_{T} vs associated hadron #it{p}_{T} from background",
907b38cd 1718 nptbins, ptmin, ptmax,nptbins,ptmin,ptmax);
858212dd 1719 fhAssocPtBkg->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1720 fhAssocPtBkg->SetYTitle("#it{p}_{T associated} (GeV/#it{c})");
907b38cd 1721 outputContainer->Add(fhAssocPtBkg) ;
1722
858212dd 1723 fhDeltaPhiBrad = new TH2F("hDeltaPhiBrad","atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi vs #it{p}_{T trigger} ",
907b38cd 1724 nptbins, ptmin, ptmax,288, -1.0/3.0, 5.0/3.0);
858212dd 1725 fhDeltaPhiBrad->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
907b38cd 1726 fhDeltaPhiBrad->SetYTitle("atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi");
1727 outputContainer->Add(fhDeltaPhiBrad) ;
1728 }
7d306daf 1729
1730 fhDeltaPhiDeltaEtaAssocPtBin = new TH2F*[fNAssocPtBins*nz];
1731 fhDeltaPhiAssocPtBin = new TH2F*[fNAssocPtBins*nz];
1732 fhDeltaPhiAssocPtBinDEta08 = new TH2F*[fNAssocPtBins*nz];
1733 fhDeltaPhiAssocPtBinDEta0 = new TH2F*[fNAssocPtBins*nz];
1734 fhXEAssocPtBin = new TH2F*[fNAssocPtBins*nz];
1735 fhZTAssocPtBin = new TH2F*[fNAssocPtBins*nz];
3f150b4b 1736
907b38cd 1737 if(fFillBradHisto)
7d306daf 1738 fhDeltaPhiBradAssocPtBin = new TH2F*[fNAssocPtBins*nz];
907b38cd 1739
1740 if(fPi0Trigger || fDecayTrigger)
1741 {
7d306daf 1742 fhDeltaPhiAssocPtBin = new TH2F*[fNAssocPtBins*nz];
1743 fhDeltaPhiAssocPtBinDEta08 = new TH2F*[fNAssocPtBins*nz];
1744 fhXEAssocPtBin = new TH2F*[fNAssocPtBins*nz];
1745 fhZTAssocPtBin = new TH2F*[fNAssocPtBins*nz];
1746 fhXEDecayChargedAssocPtBin = new TH2F*[fNAssocPtBins*nz];
1747 fhZTDecayChargedAssocPtBin = new TH2F*[fNAssocPtBins*nz];
1748 fhDeltaPhiDecayChargedAssocPtBin = new TH2F*[fNAssocPtBins*nz];
907b38cd 1749 }
050ad675 1750
907b38cd 1751 if(fHMPIDCorrelation)
1752 {
7d306daf 1753 fhDeltaPhiAssocPtBinHMPID = new TH2F*[fNAssocPtBins*nz];
1754 fhDeltaPhiAssocPtBinHMPIDAcc= new TH2F*[fNAssocPtBins*nz];
907b38cd 1755 }
1756
babcbc9d 1757 for(Int_t i = 0 ; i < fNAssocPtBins ; i++)
1758 {
7d306daf 1759 for(Int_t z = 0 ; z < nz ; z++)
907b38cd 1760 {
7d306daf 1761 Int_t bin = i*nz+z;
1762
1763 if(fCorrelVzBin)
1764 {
d71a7d1f 1765 sz = Form("_vz%d",z);
858212dd 1766 tz = Form(", #it{v}_{#it{z}} bin %d",z);
7d306daf 1767 }
1768
1769 //printf("iAssoc %d, Vz %d, bin %d - sz %s, tz %s \n",i,z,bin,sz.Data(),tz.Data());
8cc41381 1770
7d306daf 1771 fhDeltaPhiDeltaEtaAssocPtBin[bin] = new TH2F(Form("hDeltaPhiDeltaEtaPtAssocPt%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
858212dd 1772 Form("#Delta #phi vs #Delta #eta for associated #it{p}_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
8cc41381 1773 ndeltaphibins ,deltaphimin,deltaphimax,ndeltaetabins,deltaetamin,deltaetamax);
2bb7ac98 1774 fhDeltaPhiDeltaEtaAssocPtBin[bin]->SetXTitle("#Delta #phi (rad)");
8cc41381 1775 fhDeltaPhiDeltaEtaAssocPtBin[bin]->SetYTitle("#Delta #eta");
1776
7d306daf 1777 fhDeltaPhiAssocPtBin[bin] = new TH2F(Form("hDeltaPhiPtAssocPt%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
858212dd 1778 Form("#Delta #phi vs #it{p}_{T trigger} for associated #it{p}_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
62f2fe4d 1779 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
858212dd 1780 fhDeltaPhiAssocPtBin[bin]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2bb7ac98 1781 fhDeltaPhiAssocPtBin[bin]->SetYTitle("#Delta #phi (rad)");
907b38cd 1782
7d306daf 1783 fhDeltaPhiAssocPtBinDEta08[bin] = new TH2F(Form("hDeltaPhiDeltaEta0.8PtAssocPt%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
858212dd 1784 Form("#Delta #phi vs #it{p}_{T trigger} for associated #it{p}_{T} bin [%2.1f,%2.1f]%s, for #Delta #eta > 0.8", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
8cc41381 1785 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
858212dd 1786 fhDeltaPhiAssocPtBinDEta08[bin]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2bb7ac98 1787 fhDeltaPhiAssocPtBinDEta08[bin]->SetYTitle("#Delta #phi (rad)");
8cc41381 1788
7d306daf 1789 fhDeltaPhiAssocPtBinDEta0[bin] = new TH2F(Form("hDeltaPhiDeltaEta0PtAssocPt%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
858212dd 1790 Form("#Delta #phi vs #it{p}_{T trigger} for associated #it{p}_{T} bin [%2.1f,%2.1f]%s, for #Delta #eta = 0.", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
8cc41381 1791 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
858212dd 1792 fhDeltaPhiAssocPtBinDEta0[bin]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2bb7ac98 1793 fhDeltaPhiAssocPtBinDEta0[bin]->SetYTitle("#Delta #phi (rad)");
907b38cd 1794
7d306daf 1795 fhXEAssocPtBin[bin] = new TH2F(Form("hXEAssocPtBin%1.f_%1.f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
858212dd 1796 Form("#it{x}_{#it{E}} vs #it{p}_{T trigger} for associated #it{p}_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
907b38cd 1797 nptbins, ptmin, ptmax,200, 0.0, 2.0);
858212dd 1798 fhXEAssocPtBin[bin]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1799 fhXEAssocPtBin[bin]->SetYTitle("#it{x}_{#it{E}}");
907b38cd 1800
7d306daf 1801 fhZTAssocPtBin[bin] = new TH2F(Form("hZTAssocPtBin%1.f_%1.f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
858212dd 1802 Form("#it{z}_{T} vs #it{p}_{T trigger} for associated #it{p}_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
8cc41381 1803 nptbins, ptmin, ptmax,200, 0.0, 2.0);
858212dd 1804 fhZTAssocPtBin[bin]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1805 fhZTAssocPtBin[bin]->SetYTitle("#it{z}_{T}");
907b38cd 1806
8cc41381 1807 outputContainer->Add(fhDeltaPhiDeltaEtaAssocPtBin[bin]) ;
1808 outputContainer->Add(fhDeltaPhiAssocPtBin[bin]) ;
1809 outputContainer->Add(fhDeltaPhiAssocPtBinDEta08[bin]) ;
1810 outputContainer->Add(fhDeltaPhiAssocPtBinDEta0[bin]) ;
1811 outputContainer->Add(fhXEAssocPtBin[bin]);
1812 outputContainer->Add(fhZTAssocPtBin[bin]);
1813
1814 if(fPi0Trigger || fDecayTrigger)
1815 {
7d306daf 1816 fhDeltaPhiDecayChargedAssocPtBin[bin] = new TH2F(Form("hDeltaPhiPtDecayChargedAssocPt%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
858212dd 1817 Form("#Delta #phi vs #it{p}_{T trigger} tagged as decay for associated #it{p}_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
8cc41381 1818 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
858212dd 1819 fhDeltaPhiDecayChargedAssocPtBin[bin]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2bb7ac98 1820 fhDeltaPhiDecayChargedAssocPtBin[bin]->SetYTitle("#Delta #phi (rad)");
8cc41381 1821
7d306daf 1822 fhXEDecayChargedAssocPtBin[bin] = new TH2F(Form("hXEDecayChargedAssocPtBin%1.f_%1.f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
858212dd 1823 Form("#it{x}_{#it{E}} vs #it{p}_{T trigger} tagged as decay for associated #it{p}_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
8cc41381 1824 nptbins, ptmin, ptmax,200, 0.0, 2.0);
858212dd 1825 fhXEDecayChargedAssocPtBin[bin]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1826 fhXEDecayChargedAssocPtBin[bin]->SetYTitle("#it{x}_{#it{E}}");
8cc41381 1827
7d306daf 1828 fhZTDecayChargedAssocPtBin[bin] = new TH2F(Form("hZTDecayChargedAssocPtBin%1.f_%1.f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
858212dd 1829 Form("#it{z}_{T} vs #it{p}_{T trigger} tagged as decay for associated #it{p}_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
8cc41381 1830 nptbins, ptmin, ptmax,200, 0.0, 2.0);
858212dd 1831 fhZTDecayChargedAssocPtBin[bin]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
1832 fhZTDecayChargedAssocPtBin[bin]->SetYTitle("#it{z}_{T}");
8cc41381 1833
1834 outputContainer->Add(fhDeltaPhiDecayChargedAssocPtBin[bin]) ;
1835 outputContainer->Add(fhXEDecayChargedAssocPtBin[bin]);
1836 outputContainer->Add(fhZTDecayChargedAssocPtBin[bin]);
1837
1838 }
907b38cd 1839
8cc41381 1840 if(fFillBradHisto)
1841 {
7d306daf 1842 fhDeltaPhiBradAssocPtBin[bin] = new TH2F(Form("hDeltaPhiBradPtAssocPt%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
858212dd 1843 Form("atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi vs #it{p}_{T trigger} for associated #it{p}_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
8cc41381 1844 nptbins, ptmin, ptmax,288, -1.0/3.0, 5.0/3.0);
858212dd 1845 fhDeltaPhiBradAssocPtBin[bin]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
8cc41381 1846 fhDeltaPhiBradAssocPtBin[bin]->SetYTitle("atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi");
1847 outputContainer->Add(fhDeltaPhiBradAssocPtBin[bin]) ;
1848 }
907b38cd 1849
8cc41381 1850 if(fHMPIDCorrelation)
1851 {
7d306daf 1852 fhDeltaPhiAssocPtBinHMPID[bin] = new TH2F(Form("hDeltaPhiPtAssocPt%2.1f_%2.1f%sHMPID", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
858212dd 1853 Form("#Delta #phi vs #it{p}_{T trigger} for associated #it{p}_{T} bin [%2.1f,%2.1f]%s, with track having HMPID signal", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
8cc41381 1854 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
858212dd 1855 fhDeltaPhiAssocPtBinHMPID[bin]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})" );
2bb7ac98 1856 fhDeltaPhiAssocPtBinHMPID[bin]->SetYTitle("#Delta #phi (rad)");
8cc41381 1857
7d306daf 1858 fhDeltaPhiAssocPtBinHMPIDAcc[bin] = new TH2F(Form("hDeltaPhiPtAssocPt%2.1f_%2.1f%sHMPIDAcc", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
858212dd 1859 Form("#Delta #phi vs #it{p}_{T trigger} for associated #it{p}_{T} bin [%2.1f,%2.1f]%s, with track within 5<phi<20 deg", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
8cc41381 1860 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
858212dd 1861 fhDeltaPhiAssocPtBinHMPIDAcc[bin]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2bb7ac98 1862 fhDeltaPhiAssocPtBinHMPIDAcc[bin]->SetYTitle("#Delta #phi (rad)");
8cc41381 1863
7d306daf 1864 outputContainer->Add(fhDeltaPhiAssocPtBinHMPID[bin]) ;
1865 outputContainer->Add(fhDeltaPhiAssocPtBinHMPIDAcc[bin]) ;
8cc41381 1866
1867 }
1868 }
e09cf5ef 1869 }
045396c8 1870
907b38cd 1871 if(fPi0Trigger || fDecayTrigger)
547c2f01 1872 {
907b38cd 1873 if(fPi0Trigger)
1874 {
1875 fhPtPi0DecayRatio = new TH2F
858212dd 1876 ("hPtPi0DecayRatio","#it{p}_{T} of #pi^{0} and the ratio of pt for two decay",
907b38cd 1877 nptbins,ptmin,ptmax, 100,0.,2.);
858212dd 1878 fhPtPi0DecayRatio->SetXTitle("#it{p}_{T}^{#pi^{0}} (GeV/#it{c})");
1879 fhPtPi0DecayRatio->SetYTitle("#it{p}_{T}^{Decay}/#it{p}_{T}^{#pi^{0}}");
050ad675 1880 outputContainer->Add(fhPtPi0DecayRatio) ;
907b38cd 1881 }
e09cf5ef 1882
1883 fhDeltaPhiDecayCharged = new TH2F
858212dd 1884 ("hDeltaPhiDecayCharged","#phi_{Decay} - #phi_{h^{#pm}} vs #it{p}_{T Decay}",
62f2fe4d 1885 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
2bb7ac98 1886 fhDeltaPhiDecayCharged->SetYTitle("#Delta #phi (rad)");
858212dd 1887 fhDeltaPhiDecayCharged->SetXTitle("#it{p}_{T Decay} (GeV/#it{c})");
e09cf5ef 1888
3f150b4b 1889 fhXEDecayCharged =
858212dd 1890 new TH2F("hXEDecayCharged","#it{x}_{#it{E}} Decay",
3f150b4b 1891 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1892 fhXEDecayCharged->SetYTitle("#it{x}_{#it{E}}");
1893 fhXEDecayCharged->SetXTitle("#it{p}_{T decay} (GeV/#it{c})");
3f150b4b 1894
1895 fhZTDecayCharged =
858212dd 1896 new TH2F("hZTDecayCharged","#it{z}_{trigger h^{#pm}} = #it{p}_{T h^{#pm}} / #it{p}_{T Decay}",
e09cf5ef 1897 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1898 fhZTDecayCharged->SetYTitle("#it{z}_{decay h^{#pm}}");
1899 fhZTDecayCharged->SetXTitle("#it{p}_{T decay} (GeV/#it{c})");
e09cf5ef 1900
e09cf5ef 1901 outputContainer->Add(fhDeltaPhiDecayCharged) ;
3f150b4b 1902 outputContainer->Add(fhXEDecayCharged) ;
1903 outputContainer->Add(fhZTDecayCharged) ;
e09cf5ef 1904 }
1905
547c2f01 1906 if(fMakeSeveralUE)
1907 {
e09cf5ef 1908 fhDeltaPhiUeLeftCharged = new TH2F
858212dd 1909 ("hDeltaPhiUeLeftChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs #it{p}_{T Ueh^{#pm}} with UE left side range of trigger particles",
62f2fe4d 1910 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
2bb7ac98 1911 fhDeltaPhiUeLeftCharged->SetYTitle("#Delta #phi (rad)");
858212dd 1912 fhDeltaPhiUeLeftCharged->SetXTitle("#it{p}_{T h^{#pm}} (GeV/#it{c})");
e09cf5ef 1913 outputContainer->Add(fhDeltaPhiUeLeftCharged) ;
1914
1915 fhDeltaPhiUeRightCharged = new TH2F
858212dd 1916 ("hDeltaPhiUeRightChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs #it{p}_{T Ueh^{#pm}} with UE right side range of trigger particles",
62f2fe4d 1917 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
2bb7ac98 1918 fhDeltaPhiUeRightCharged->SetYTitle("#Delta #phi (rad)");
858212dd 1919 fhDeltaPhiUeRightCharged->SetXTitle("#it{p}_{T h^{#pm}} (GeV/#it{c})");
e09cf5ef 1920 outputContainer->Add(fhDeltaPhiUeRightCharged) ;
1921
8cc41381 1922 fhDeltaPhiUeLeftUpCharged = new TH2F
858212dd 1923 ("hDeltaPhiUeLeftUpChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs #it{p}_{T Ueh^{#pm}} with UE left Up side range of trigger particles",
8cc41381 1924 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
2bb7ac98 1925 fhDeltaPhiUeLeftUpCharged->SetYTitle("#Delta #phi (rad)");
858212dd 1926 fhDeltaPhiUeLeftUpCharged->SetXTitle("#it{p}_{T h^{#pm}} (GeV/#it{c})");
8cc41381 1927 outputContainer->Add(fhDeltaPhiUeLeftUpCharged) ;
1928
1929 fhDeltaPhiUeRightUpCharged = new TH2F
858212dd 1930 ("hDeltaPhiUeRightUpChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs #it{p}_{T Ueh^{#pm}} with UE right Up side range of trigger particles",
8cc41381 1931 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
2bb7ac98 1932 fhDeltaPhiUeRightUpCharged->SetYTitle("#Delta #phi (rad)");
858212dd 1933 fhDeltaPhiUeRightUpCharged->SetXTitle("#it{p}_{T h^{#pm}} (GeV/#it{c})");
8cc41381 1934 outputContainer->Add(fhDeltaPhiUeRightUpCharged) ;
1935
1936 fhDeltaPhiUeLeftDownCharged = new TH2F
858212dd 1937 ("hDeltaPhiUeLeftDownChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs #it{p}_{T Ueh^{#pm}} with UE left Down side range of trigger particles",
8cc41381 1938 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
2bb7ac98 1939 fhDeltaPhiUeLeftDownCharged->SetYTitle("#Delta #phi (rad)");
858212dd 1940 fhDeltaPhiUeLeftDownCharged->SetXTitle("#it{p}_{T h^{#pm}} (GeV/#it{c})");
8cc41381 1941 outputContainer->Add(fhDeltaPhiUeLeftDownCharged) ;
1942
1943 fhDeltaPhiUeRightDownCharged = new TH2F
858212dd 1944 ("hDeltaPhiUeRightDownChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs #it{p}_{T Ueh^{#pm}} with UE right Down side range of trigger particles",
8cc41381 1945 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
2bb7ac98 1946 fhDeltaPhiUeRightDownCharged->SetYTitle("#Delta #phi (rad)");
858212dd 1947 fhDeltaPhiUeRightDownCharged->SetXTitle("#it{p}_{T h^{#pm}} (GeV/#it{c})");
8cc41381 1948 outputContainer->Add(fhDeltaPhiUeRightDownCharged) ;
1949
3f150b4b 1950 fhXEUeLeftCharged =
858212dd 1951 new TH2F("hXEUeChargedLeft","#it{x}_{#it{E}} with UE left side of trigger",
e09cf5ef 1952 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1953 fhXEUeLeftCharged->SetYTitle("#it{x}_{#it{E} Ueh^{#pm}}");
1954 fhXEUeLeftCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
3f150b4b 1955 outputContainer->Add(fhXEUeLeftCharged) ;
e09cf5ef 1956
3f150b4b 1957 fhXEUeRightCharged =
858212dd 1958 new TH2F("hXEUeChargedRight","#it{x}_{#it{E} h^{#pm}} with UE right side of trigger",
e09cf5ef 1959 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1960 fhXEUeRightCharged->SetYTitle("#it{z}_{trigger Ueh^{#pm}}");
1961 fhXEUeRightCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
3f150b4b 1962 outputContainer->Add(fhXEUeRightCharged) ;
1963
8cc41381 1964 fhXEUeLeftUpCharged =
858212dd 1965 new TH2F("hXEUeChargedLeftUp","#it{x}_{#it{E}} with UE left Up side of trigger",
8cc41381 1966 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1967 fhXEUeLeftUpCharged->SetYTitle("#it{x}_{#it{E} Ueh^{#pm}}");
1968 fhXEUeLeftUpCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
8cc41381 1969 outputContainer->Add(fhXEUeLeftUpCharged) ;
1970
1971 fhXEUeRightUpCharged =
858212dd 1972 new TH2F("hXEUeChargedRightUp","#it{x}_{#it{E} h^{#pm}} with UE right Up side of trigger",
8cc41381 1973 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1974 fhXEUeRightUpCharged->SetYTitle("#it{z}_{trigger Ueh^{#pm}}");
1975 fhXEUeRightUpCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
8cc41381 1976 outputContainer->Add(fhXEUeRightUpCharged) ;
1977
1978 fhXEUeLeftDownCharged =
858212dd 1979 new TH2F("hXEUeChargedLeftDown","#it{x}_{#it{E}} with UE left Down side of trigger",
8cc41381 1980 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1981 fhXEUeLeftDownCharged->SetYTitle("#it{x}_{#it{E} Ueh^{#pm}}");
1982 fhXEUeLeftDownCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
8cc41381 1983 outputContainer->Add(fhXEUeLeftDownCharged) ;
1984
1985 fhXEUeRightDownCharged =
858212dd 1986 new TH2F("hXEUeChargedRightDown","#it{x}_{#it{E} h^{#pm}} with UE right Down side of trigger",
8cc41381 1987 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 1988 fhXEUeRightDownCharged->SetYTitle("#it{z}_{trigger Ueh^{#pm}}");
1989 fhXEUeRightDownCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
8cc41381 1990 outputContainer->Add(fhXEUeRightDownCharged) ;
1991
3f150b4b 1992 fhPtHbpXEUeLeftCharged =
858212dd 1993 new TH2F("hHbpXEUeChargedLeft","#xi = ln(1/#it{x}_{#it{E}}) with charged UE left side of trigger",
3f150b4b 1994 nptbins,ptmin,ptmax,200,0.,10.);
858212dd 1995 fhPtHbpXEUeLeftCharged->SetYTitle("ln(1/#it{x}_{#it{E}})");
1996 fhPtHbpXEUeLeftCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
3f150b4b 1997 outputContainer->Add(fhPtHbpXEUeLeftCharged) ;
e09cf5ef 1998
3f150b4b 1999 fhPtHbpXEUeRightCharged =
858212dd 2000 new TH2F("hHbpXEUeChargedRight","#xi = ln(1/#it{x}_{#it{E}}) with charged UE right side of trigger",
e09cf5ef 2001 nptbins,ptmin,ptmax,200,0.,10.);
858212dd 2002 fhPtHbpXEUeRightCharged->SetYTitle("ln(1/#it{x}_{#it{E}})");
2003 fhPtHbpXEUeRightCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
3f150b4b 2004 outputContainer->Add(fhPtHbpXEUeRightCharged) ;
2005
2006 fhZTUeLeftCharged =
858212dd 2007 new TH2F("hZTUeChargedLeft","#it{z}_{trigger h^{#pm}} = #it{p}_{T Ueh^{#pm}} / #it{p}_{T trigger} with UE left side of trigger",
3f150b4b 2008 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 2009 fhZTUeLeftCharged->SetYTitle("#it{z}_{trigger Ueh^{#pm}}");
2010 fhZTUeLeftCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
3f150b4b 2011 outputContainer->Add(fhZTUeLeftCharged) ;
2012
2013 fhZTUeRightCharged =
858212dd 2014 new TH2F("hZTUeChargedRight","#it{z}_{trigger h^{#pm}} = #it{p}_{T Ueh^{#pm}} / #it{p}_{T trigger} with UE right side of trigger",
3f150b4b 2015 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 2016 fhZTUeRightCharged->SetYTitle("#it{z}_{trigger Ueh^{#pm}}");
2017 fhZTUeRightCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
3f150b4b 2018 outputContainer->Add(fhZTUeRightCharged) ;
e09cf5ef 2019
3f150b4b 2020 fhPtHbpZTUeLeftCharged =
858212dd 2021 new TH2F("hHbpZTUeChargedLeft","#xi = ln(1/#it{z}_{T}) with charged UE left side of trigger",
e09cf5ef 2022 nptbins,ptmin,ptmax,200,0.,10.);
858212dd 2023 fhPtHbpZTUeLeftCharged->SetYTitle("ln(1/#it{z}_{T})");
2024 fhPtHbpZTUeLeftCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
3f150b4b 2025 outputContainer->Add(fhPtHbpZTUeLeftCharged) ;
2026
2027 fhPtHbpZTUeRightCharged =
858212dd 2028 new TH2F("hHbpZTUeChargedRight","#xi = ln(1/#it{z}_{T}) with charged UE right side of trigger",
3f150b4b 2029 nptbins,ptmin,ptmax,200,0.,10.);
858212dd 2030 fhPtHbpZTUeRightCharged->SetYTitle("ln(1/#it{z}_{T})");
2031 fhPtHbpZTUeRightCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
3f150b4b 2032 outputContainer->Add(fhPtHbpZTUeRightCharged) ;
e09cf5ef 2033
8cc41381 2034 }
e09cf5ef 2035 } //Correlation with charged hadrons
050ad675 2036
e09cf5ef 2037 //Correlation with neutral hadrons
547c2f01 2038 if(fNeutralCorr)
2039 {
e09cf5ef 2040 fhDeltaPhiDeltaEtaNeutral = new TH2F
babcbc9d 2041 ("hDeltaPhiDeltaEtaNeutral","#phi_{trigger} - #phi_{h^{0}} vs #eta_{trigger} - #eta_{h^{0}}",
62f2fe4d 2042 ndeltaphibins ,deltaphimin,deltaphimax, ndeltaetabins ,deltaetamin,deltaetamax);
2bb7ac98 2043 fhDeltaPhiDeltaEtaNeutral->SetXTitle("#Delta #phi (rad)");
e09cf5ef 2044 fhDeltaPhiDeltaEtaNeutral->SetYTitle("#Delta #eta");
2045
2046 fhPhiNeutral = new TH2F
858212dd 2047 ("hPhiNeutral","#phi_{#pi^{0}} vs #it{p}_{T #pi^{0}}",
e09cf5ef 2048 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
2049 fhPhiNeutral->SetYTitle("#phi_{#pi^{0}} (rad)");
858212dd 2050 fhPhiNeutral->SetXTitle("#it{p}_{T #pi^{0}} (GeV/#it{c})");
e09cf5ef 2051
2052 fhEtaNeutral = new TH2F
858212dd 2053 ("hEtaNeutral","#eta_{#pi^{0}} vs #it{p}_{T #pi^{0}}",
e09cf5ef 2054 nptbins,ptmin,ptmax,netabins,etamin,etamax);
2055 fhEtaNeutral->SetYTitle("#eta_{#pi^{0}} (rad)");
858212dd 2056 fhEtaNeutral->SetXTitle("#it{p}_{T #pi^{0}} (GeV/#it{c})");
e09cf5ef 2057
2058 fhDeltaPhiNeutral = new TH2F
858212dd 2059 ("hDeltaPhiNeutral","#phi_{trigger} - #phi_{#pi^{0}} vs #it{p}_{T trigger}",
e09cf5ef 2060 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
2bb7ac98 2061 fhDeltaPhiNeutral->SetYTitle("#Delta #phi (rad)");
858212dd 2062 fhDeltaPhiNeutral->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
e09cf5ef 2063
2064 fhDeltaPhiNeutralPt = new TH2F
858212dd 2065 ("hDeltaPhiNeutralPt","#phi_{trigger} - #phi_{#pi^{0}} vs #it{p}_{T #pi^{0}}}",
62f2fe4d 2066 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
2bb7ac98 2067 fhDeltaPhiNeutralPt->SetYTitle("#Delta #phi (rad)");
858212dd 2068 fhDeltaPhiNeutralPt->SetXTitle("#it{p}_{T h^{0}} (GeV/#it{c})");
e09cf5ef 2069
2070 fhDeltaPhiUeNeutralPt = new TH2F
858212dd 2071 ("hDeltaPhiUeNeutralPt","#phi_{trigger} - #phi_{#pi^{0}} vs #it{p}_{T #pi^{0}}}",
62f2fe4d 2072 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
2bb7ac98 2073 fhDeltaPhiUeNeutralPt->SetYTitle("#Delta #phi (rad)");
858212dd 2074 fhDeltaPhiUeNeutralPt->SetXTitle("#it{p}_{T h^{0}} (GeV/#it{c})");
e09cf5ef 2075
2076 fhDeltaEtaNeutral = new TH2F
858212dd 2077 ("hDeltaEtaNeutral","#eta_{trigger} - #eta_{#pi^{0}} vs #it{p}_{T trigger}",
62f2fe4d 2078 nptbins,ptmin,ptmax, ndeltaetabins ,deltaetamin,deltaetamax);
e09cf5ef 2079 fhDeltaEtaNeutral->SetYTitle("#Delta #eta");
858212dd 2080 fhDeltaEtaNeutral->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
e09cf5ef 2081
3f150b4b 2082 fhXENeutral =
858212dd 2083 new TH2F("hXENeutral","#it{x}_{#it{E}} for #pi^{0} associated",
e09cf5ef 2084 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 2085 fhXENeutral->SetYTitle("#it{x}_{#it{E}}");
2086 fhXENeutral->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
e09cf5ef 2087
3f150b4b 2088 fhXEUeNeutral =
858212dd 2089 new TH2F("hXEUeNeutral","#it{x}_{#it{E}} for #pi^{0} associated",
e09cf5ef 2090 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 2091 fhXEUeNeutral->SetYTitle("#it{x}_{#it{E}}");
2092 fhXEUeNeutral->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
e09cf5ef 2093
3f150b4b 2094 fhPtHbpXENeutral =
858212dd 2095 new TH2F("hHbpXENeutral","#xi = ln(1/#it{x}_{#it{E}})for #pi^{0} associated",
e09cf5ef 2096 nptbins,ptmin,ptmax,200,0.,10.);
858212dd 2097 fhPtHbpXENeutral->SetYTitle("ln(1/#it{x}_{#it{E}})");
2098 fhPtHbpXENeutral->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
e09cf5ef 2099
3f150b4b 2100 fhPtHbpXEUeNeutral =
858212dd 2101 new TH2F("hHbpXEUeNeutral","#xi = ln(1/#it{x}_{#it{E}}) for #pi^{0} associated",
e09cf5ef 2102 nptbins,ptmin,ptmax,200,0.,10.);
858212dd 2103 fhPtHbpXEUeNeutral->SetYTitle("ln(1/#it{x}_{#it{E}})");
2104 fhPtHbpXEUeNeutral->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
3f150b4b 2105
2106 fhZTNeutral =
858212dd 2107 new TH2F("hZTNeutral","#it{z}_{trigger #pi} = #it{p}_{T #pi^{0}} / #it{p}_{T trigger} for #pi^{0} associated",
3f150b4b 2108 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 2109 fhZTNeutral->SetYTitle("#it{z}_{trigger #pi^{0}}");
2110 fhZTNeutral->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
e09cf5ef 2111
3f150b4b 2112 fhZTUeNeutral =
858212dd 2113 new TH2F("hZTUeNeutral","#it{z}_{trigger #pi} = #it{p}_{T #pi^{0}} / #it{p}_{T trigger} for #pi^{0} associated",
3f150b4b 2114 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 2115 fhZTUeNeutral->SetYTitle("#it{z}_{trigger #pi^{0}}");
2116 fhZTUeNeutral->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
3f150b4b 2117
2118 fhPtHbpZTNeutral =
858212dd 2119 new TH2F("hHbpZTNeutral","#xi = ln(1/#it{x}_{#it{E}}) for #pi^{0} associated",
3f150b4b 2120 nptbins,ptmin,ptmax,200,0.,10.);
858212dd 2121 fhPtHbpZTNeutral->SetYTitle("ln(1/#it{z}_{T})");
2122 fhPtHbpZTNeutral->SetXTitle("#it{p}_{T trigger}");
3f150b4b 2123
2124 fhPtHbpZTUeNeutral =
858212dd 2125 new TH2F("hHbpZTUeNeutral","#xi = ln(1/#it{x}_{#it{E}}) for #pi^{0} associated",
3f150b4b 2126 nptbins,ptmin,ptmax,200,0.,10.);
858212dd 2127 fhPtHbpXEUeNeutral->SetYTitle("ln(1/#it{z}_{T})");
2128 fhPtHbpXEUeNeutral->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
e09cf5ef 2129
2130 outputContainer->Add(fhDeltaPhiDeltaEtaNeutral);
2131 outputContainer->Add(fhPhiNeutral) ;
2132 outputContainer->Add(fhEtaNeutral) ;
2133 outputContainer->Add(fhDeltaPhiNeutral) ;
2134 outputContainer->Add(fhDeltaPhiNeutralPt) ;
2135 outputContainer->Add(fhDeltaPhiUeNeutralPt) ;
2136 outputContainer->Add(fhDeltaEtaNeutral) ;
3f150b4b 2137 outputContainer->Add(fhXENeutral) ;
2138 outputContainer->Add(fhXEUeNeutral) ;
2139 outputContainer->Add(fhPtHbpXENeutral) ;
2140 outputContainer->Add(fhPtHbpXEUeNeutral) ;
2141 outputContainer->Add(fhZTNeutral) ;
2142 outputContainer->Add(fhZTUeNeutral) ;
2143 outputContainer->Add(fhPtHbpZTNeutral) ;
2144 outputContainer->Add(fhPtHbpZTUeNeutral) ;
e09cf5ef 2145
907b38cd 2146 if(fPi0Trigger || fDecayTrigger)
babcbc9d 2147 {
e09cf5ef 2148 fhDeltaPhiDecayNeutral = new TH2F
858212dd 2149 ("hDeltaPhiDecayNeutral","#phi_{Decay} - #phi_{h^{0}} vs #it{p}_{T Decay}",
62f2fe4d 2150 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
2bb7ac98 2151 fhDeltaPhiDecayNeutral->SetYTitle("#Delta #phi (rad)");
858212dd 2152 fhDeltaPhiDecayNeutral->SetXTitle("#it{p}_{T Decay} (GeV/#it{c})");
e09cf5ef 2153
3f150b4b 2154 fhXEDecayNeutral =
858212dd 2155 new TH2F("hXEDecayNeutral","#it{x}_{#it{E}} for decay trigger",
3f150b4b 2156 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 2157 fhXEDecayNeutral->SetYTitle("#it{x}_{#it{E}}");
2158 fhXEDecayNeutral->SetXTitle("#it{p}_{T decay}");
3f150b4b 2159
2160 fhZTDecayNeutral =
858212dd 2161 new TH2F("hZTDecayNeutral","#it{z}_{trigger h^{0}} = #it{p}_{T h^{0}} / #it{p}_{T Decay}",
e09cf5ef 2162 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 2163 fhZTDecayNeutral->SetYTitle("#it{z}_{h^{0}}");
2164 fhZTDecayNeutral->SetXTitle("#it{p}_{T decay}");
e09cf5ef 2165
2166 outputContainer->Add(fhDeltaPhiDecayNeutral) ;
3f150b4b 2167 outputContainer->Add(fhXEDecayNeutral) ;
2168 outputContainer->Add(fhZTDecayNeutral) ;
2169
e09cf5ef 2170 }
2171
547c2f01 2172 if(fMakeSeveralUE)
2173 {
e09cf5ef 2174 fhDeltaPhiUeLeftNeutral = new TH2F
858212dd 2175 ("hDeltaPhiUeLeftNeutralPt","#phi_{trigger} - #phi_{#Ueh^{0}} vs #it{p}_{T h^{0}} with neutral UE left side range of trigger particles",
62f2fe4d 2176 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
2bb7ac98 2177 fhDeltaPhiUeLeftNeutral->SetYTitle("#Delta #phi (rad)");
858212dd 2178 fhDeltaPhiUeLeftNeutral->SetXTitle("#it{p}_{T h^{0}} (GeV/#it{c})");
e09cf5ef 2179 outputContainer->Add(fhDeltaPhiUeLeftNeutral) ;
2180
2181 fhDeltaPhiUeRightNeutral = new TH2F
858212dd 2182 ("hDeltaPhiUeRightNeutralPt","#phi_{trigger} - #phi_{#Ueh^{0}} vs #it{p}_{T Ueh^{0}} with neutral UE right side range of trigger particles",
62f2fe4d 2183 nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
2bb7ac98 2184 fhDeltaPhiUeRightNeutral->SetYTitle("#Delta #phi (rad)");
858212dd 2185 fhDeltaPhiUeRightNeutral->SetXTitle("#it{p}_{T h^{0}} (GeV/#it{c})");
e09cf5ef 2186 outputContainer->Add(fhDeltaPhiUeRightNeutral) ;
2187
3f150b4b 2188 fhXEUeLeftNeutral =
858212dd 2189 new TH2F("hXEUeNeutralLeft","#it{x}_{#it{E}} = #it{p}_{T Ueh^{0}} / #it{p}_{T trigger} with neutral UE left side of trigger",
3f150b4b 2190 nptbins,ptmin,ptmax,140,0.,2.);
858212dd 2191 fhXEUeLeftNeutral->SetYTitle("#it{z}_{trigger Ueh^{0}}");
2192 fhXEUeLeftNeutral->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
3f150b4b 2193 outputContainer->Add(fhXEUeLeftNeutral) ;
2194
2195 fhXEUeRightNeutral =
858212dd 2196 new TH2F("hXEUeNeutralRight","#it{x}_{#it{E}} = #it{p}_{T Ueh^{0}} / #it{p}_{T trigger} with neutral UE right side of trigger",
3f150b4b 2197 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 2198 fhXEUeRightNeutral->SetYTitle("#it{z}_{trigger Ueh^{0}}");
2199 fhXEUeRightNeutral->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
3f150b4b 2200 outputContainer->Add(fhXEUeRightNeutral) ;
2201
2202 fhPtHbpXEUeLeftNeutral =
858212dd 2203 new TH2F("hHbpXEUeNeutralLeft","#xi = ln(1/#it{x}_{#it{E}}) with neutral UE left side of trigger",
3f150b4b 2204 nptbins,ptmin,ptmax,200,0.,10.);
858212dd 2205 fhPtHbpXEUeLeftNeutral->SetYTitle("ln(1/#it{x}_{#it{E}})");
2206 fhPtHbpXEUeLeftNeutral->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
3f150b4b 2207 outputContainer->Add(fhPtHbpXEUeLeftNeutral) ;
2208
2209 fhPtHbpXEUeRightNeutral =
858212dd 2210 new TH2F("hHbpXEUeNeutralRight","#xi = ln(1/#it{x}_{#it{E}}) with neutral UE right side of trigger",
3f150b4b 2211 nptbins,ptmin,ptmax,200,0.,10.);
858212dd 2212 fhPtHbpXEUeRightNeutral->SetYTitle("ln(1/#it{x}_{#it{E}})");
2213 fhPtHbpXEUeRightNeutral->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
3f150b4b 2214 outputContainer->Add(fhPtHbpXEUeRightNeutral) ;
2215
2216 fhZTUeLeftNeutral =
858212dd 2217 new TH2F("hZTUeNeutralLeft","#it{z}_{trigger h^{0}} = #it{p}_{T Ueh^{0}} / #it{p}_{T trigger} with neutral UE left side of trigger",
e09cf5ef 2218 nptbins,ptmin,ptmax,140,0.,2.);
858212dd 2219 fhZTUeLeftNeutral->SetYTitle("#it{z}_{trigger Ueh^{0}}");
2220 fhZTUeLeftNeutral->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
3f150b4b 2221 outputContainer->Add(fhZTUeLeftNeutral) ;
e09cf5ef 2222
3f150b4b 2223 fhZTUeRightNeutral =
858212dd 2224 new TH2F("hZTUeNeutralRight","#it{z}_{trigger h^{0}} = #it{p}_{T Ueh^{0}} / #it{p}_{T trigger} with neutral UE right side of trigger",
e09cf5ef 2225 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 2226 fhZTUeRightNeutral->SetYTitle("#it{z}_{trigger Ueh^{0}}");
2227 fhZTUeRightNeutral->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
3f150b4b 2228 outputContainer->Add(fhZTUeRightNeutral) ;
e09cf5ef 2229
3f150b4b 2230 fhPtHbpZTUeLeftNeutral =
858212dd 2231 new TH2F("hHbpZTUeNeutralLeft","#xi = ln(1/#it{z}_{T}) with neutral UE left side of trigger",
e09cf5ef 2232 nptbins,ptmin,ptmax,200,0.,10.);
858212dd 2233 fhPtHbpZTUeLeftNeutral->SetYTitle("ln(1/#it{z}_{T})");
2234 fhPtHbpZTUeLeftNeutral->SetXTitle("#it{p}_{T trigger}");
3f150b4b 2235 outputContainer->Add(fhPtHbpZTUeLeftNeutral) ;
e09cf5ef 2236
3f150b4b 2237 fhPtHbpZTUeRightNeutral =
858212dd 2238 new TH2F("hHbpZTUeNeutralRight","#xi = ln(1/#it{z}_{T}) with neutral UE right side of trigger",
e09cf5ef 2239 nptbins,ptmin,ptmax,200,0.,10.);
858212dd 2240 fhPtHbpZTUeRightNeutral->SetYTitle("ln(1/#it{z}_{T})");
2241 fhPtHbpZTUeRightNeutral->SetXTitle("#it{p}_{T trigger}");
3f150b4b 2242 outputContainer->Add(fhPtHbpZTUeRightNeutral) ;
e09cf5ef 2243
2244 }
fe871b21 2245
2246 }//Correlation with neutral hadrons
2247
2248 //if data is MC, fill more histograms
babcbc9d 2249 if(IsDataMC())
2250 {
2251 fh2phiLeadingParticle=new TH2F("h2phiLeadingParticle","#phi resolustion for trigger particles",nptbins,ptmin,ptmax,100,-1,1);
858212dd 2252 fh2phiLeadingParticle->GetXaxis()->SetTitle("#it{p}_{T gen Leading} (GeV/#it{c})");
fe871b21 2253 fh2phiLeadingParticle->GetYaxis()->SetTitle("(#phi_{rec}-#phi_{gen})/#phi_{gen}");
9623bf34 2254
858212dd 2255 fhMCPtLeading = new TH1F ("hMCPtLeading","MC : #it{p}_{T} distribution of leading particles", nptbins,ptmin,ptmax);
2256 fhMCPtLeading->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
08f220c8 2257
2258 fhMCPhiLeading = new TH2F ("hMCPhiLeading","MC : #phi distribution of leading Particles",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
2259 fhMCPhiLeading->SetYTitle("#phi (rad)");
2260
2261 fhMCEtaLeading = new TH2F ("hMCEtaLeading","MC : #eta distribution of leading",nptbins,ptmin,ptmax, netabins,etamin,etamax);
2262 fhMCEtaLeading->SetYTitle("#eta ");
2263
e09cf5ef 2264
fe871b21 2265 fhMCEtaCharged = new TH2F
858212dd 2266 ("hMCEtaCharged","MC #eta_{h^{#pm}} vs #it{p}_{T #pm}",
fe871b21 2267 nptbins,ptmin,ptmax,netabins,etamin,etamax);
2268 fhMCEtaCharged->SetYTitle("#eta_{h^{#pm}} (rad)");
858212dd 2269 fhMCEtaCharged->SetXTitle("#it{p}_{T #pm} (GeV/#it{c})");
fe871b21 2270
2271 fhMCPhiCharged = new TH2F
858212dd 2272 ("hMCPhiCharged","#MC phi_{h^{#pm}} vs #it{p}_{T #pm}",
fe871b21 2273 200,ptmin,ptmax,nphibins,phimin,phimax);
2274 fhMCPhiCharged->SetYTitle("MC #phi_{h^{#pm}} (rad)");
858212dd 2275 fhMCPhiCharged->SetXTitle("#it{p}_{T #pm} (GeV/#it{c})");
fe871b21 2276
2277 fhMCDeltaPhiDeltaEtaCharged = new TH2F
babcbc9d 2278 ("hMCDeltaPhiDeltaEtaCharged","#MC phi_{trigger} - #phi_{h^{#pm}} vs #eta_{trigger} - #eta_{h^{#pm}}",
fe871b21 2279 140,-2.,5.,200,-2,2);
2bb7ac98 2280 fhMCDeltaPhiDeltaEtaCharged->SetXTitle("#Delta #phi (rad)");
fe871b21 2281 fhMCDeltaPhiDeltaEtaCharged->SetYTitle("#Delta #eta");
2282
2283 fhMCDeltaEtaCharged = new TH2F
858212dd 2284 ("hMCDeltaEtaCharged","MC #eta_{trigger} - #eta_{h^{#pm}} vs #it{p}_{T trigger} and #it{p}_{T assoc}",
fe871b21 2285 nptbins,ptmin,ptmax,200,-2,2);
2286 fhMCDeltaEtaCharged->SetYTitle("#Delta #eta");
858212dd 2287 fhMCDeltaEtaCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
fe871b21 2288
2289 fhMCDeltaPhiCharged = new TH2F
858212dd 2290 ("hMCDeltaPhiCharged","#phi_{trigger} - #phi_{h^{#pm}} vs #it{p}_{T trigger}",
62f2fe4d 2291 nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax);
2bb7ac98 2292 fhMCDeltaPhiCharged->SetYTitle("#Delta #phi (rad)");
858212dd 2293 fhMCDeltaPhiCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
fe871b21 2294
2295 fhMCDeltaPhiChargedPt = new TH2F
858212dd 2296 ("hMCDeltaPhiChargedPt","MC #phi_{trigger} - #phi_{#h^{#pm}} vs #it{p}_{T h^{#pm}}",
62f2fe4d 2297 nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax);
2bb7ac98 2298 fhMCDeltaPhiChargedPt->SetYTitle("#Delta #phi (rad)");
858212dd 2299 fhMCDeltaPhiChargedPt->SetXTitle("#it{p}_{T h^{#pm}} (GeV/#it{c})");
fe871b21 2300
3f150b4b 2301 fhMCPtXECharged =
c78eef61 2302 new TH2F("hMCPtXECharged","#it{x}_{#it{E}} with charged hadrons",
fe871b21 2303 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 2304 fhMCPtXECharged->SetYTitle("#it{x}_{#it{E}}");
2305 fhMCPtXECharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
9623bf34 2306
2307 fhMCPtXEUeCharged =
c78eef61 2308 new TH2F("hMCPtXEUeCharged","#it{x}_{#it{E}} with charged hadrons, Underlying Event",
9623bf34 2309 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 2310 fhMCPtXEUeCharged->SetYTitle("#it{x}_{#it{E}}");
2311 fhMCPtXEUeCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
c78eef61 2312
2313 fhMCPtXEUeLeftCharged =
2314 new TH2F("hMCPtXEUeChargedLeft","#it{x}_{#it{E}} with charged hadrons, with UE left side range of trigger particles",
2315 nptbins,ptmin,ptmax,200,0.,2.);
2316 fhMCPtXEUeLeftCharged->SetYTitle("#it{x}_{#it{E}}");
2317 fhMCPtXEUeLeftCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2318
2319 fhMCPtXEUeRightCharged =
2320 new TH2F("hMCPtXEUeChargedRight","#it{x}_{#it{E}} with charged hadrons, with UE left side range of trigger particles",
2321 nptbins,ptmin,ptmax,200,0.,2.);
2322 fhMCPtXEUeRightCharged->SetYTitle("#it{x}_{#it{E}}");
2323 fhMCPtXEUeRightCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2324
fe871b21 2325
3f150b4b 2326 fhMCPtHbpXECharged =
858212dd 2327 new TH2F("hMCHbpXECharged","MC #xi = ln(1/#it{x}_{#it{E}}) with charged hadrons",
fe871b21 2328 nptbins,ptmin,ptmax,200,0.,10.);
858212dd 2329 fhMCPtHbpXECharged->SetYTitle("ln(1/#it{x}_{#it{E}})");
2330 fhMCPtHbpXECharged->SetXTitle("#it{p}_{T trigger}");
9623bf34 2331
2332 fhMCPtHbpXEUeCharged =
c78eef61 2333 new TH2F("hMCPtHbpXEUeCharged","#xi = ln(1/#it{x}_{#it{E}}) with charged hadrons, Underlying Event",
2334 nptbins,ptmin,ptmax,200,0.,10.);
858212dd 2335 fhMCPtHbpXEUeCharged->SetYTitle("ln(1/#it{x}_{#it{E}})");
2336 fhMCPtHbpXEUeCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
c78eef61 2337
2338 fhMCPtHbpXEUeLeftCharged =
2339 new TH2F("hMCPtHbpXEUeChargedLeft","#xi = ln(1/#it{x}_{#it{E}}) with charged hadrons, with UE left side range of trigger particles",
2340 nptbins,ptmin,ptmax,200,0.,10.);
2341 fhMCPtHbpXEUeLeftCharged->SetYTitle("ln(1/#it{x}_{#it{E}})");
2342 fhMCPtHbpXEUeLeftCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2343
2344 fhMCPtHbpXEUeRightCharged =
2345 new TH2F("hMCPtHbpXEUeChargedRight","#xi = ln(1/#it{x}_{#it{E}}) with charged hadrons, with UE right side range of trigger particles",
2346 nptbins,ptmin,ptmax,200,0.,10.);
2347 fhMCPtHbpXEUeRightCharged->SetYTitle("ln(1/#it{x}_{#it{E}})");
2348 fhMCPtHbpXEUeRightCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
9623bf34 2349
c78eef61 2350
9623bf34 2351 fhMCUePart =
2352 new TH1F("hMCUePart","MC UE particles distribution vs pt trig",
2353 nptbins,ptmin,ptmax);
858212dd 2354 fhMCUePart->SetYTitle("#it{dN}^{ch}");
2355 fhMCUePart->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
3f150b4b 2356
2357 fhMCPtZTCharged =
c78eef61 2358 new TH2F("hMCPtZTCharged","#it{z}_{T} with charged hadrons",
3f150b4b 2359 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 2360 fhMCPtZTCharged->SetYTitle("#it{z}_{T}");
2361 fhMCPtZTCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
c78eef61 2362
2363 fhMCPtZTUeCharged =
2364 new TH2F("hMCPtZTUeCharged","#it{z}_{T} with charged hadrons, Underlying Event",
2365 nptbins,ptmin,ptmax,200,0.,2.);
2366 fhMCPtZTUeCharged->SetYTitle("#it{z}_{T}");
2367 fhMCPtZTUeCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2368
2369 fhMCPtZTUeLeftCharged =
2370 new TH2F("hMCPtZTUeChargedLeft","#it{z}_{T} with charged hadrons, with UE left side range of trigger particles",
2371 nptbins,ptmin,ptmax,200,0.,2.);
2372 fhMCPtZTUeLeftCharged->SetYTitle("#it{z}_{T}");
2373 fhMCPtZTUeLeftCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2374
2375 fhMCPtZTUeRightCharged =
2376 new TH2F("hMCPtZTUeChargedRight","#it{z}_{T} with charged hadrons, with UE right side range of trigger particles",
2377 nptbins,ptmin,ptmax,200,0.,2.);
2378 fhMCPtZTUeRightCharged->SetYTitle("#it{z}_{T}");
2379 fhMCPtZTUeRightCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2380
3f150b4b 2381 fhMCPtHbpZTCharged =
858212dd 2382 new TH2F("hMCHbpZTCharged","MC #xi = ln(1/#it{z}_{T}) with charged hadrons",
3f150b4b 2383 nptbins,ptmin,ptmax,200,0.,10.);
858212dd 2384 fhMCPtHbpZTCharged->SetYTitle("ln(1/#it{z}_{T})");
2385 fhMCPtHbpZTCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
fe871b21 2386
c78eef61 2387 fhMCPtHbpZTUeCharged =
2388 new TH2F("hMCPtHbpZTUeCharged","#xi = ln(1/#it{z}_{T}) with charged hadrons, Underlying Event",
2389 nptbins,ptmin,ptmax,200,0.,10.);
2390 fhMCPtHbpZTUeCharged->SetYTitle("ln(1/#it{z}_{T})");
2391 fhMCPtHbpZTUeCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2392
2393 fhMCPtHbpZTUeLeftCharged =
2394 new TH2F("hMCPtHbpZTUeChargedLeft","#xi = ln(1/#it{z}_{T}) with charged hadrons, with UE left side range of trigger particles",
2395 nptbins,ptmin,ptmax,200,0.,10.);
2396 fhMCPtHbpZTUeLeftCharged->SetYTitle("ln(1/#it{z}_{T})");
2397 fhMCPtHbpZTUeLeftCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2398
2399 fhMCPtHbpZTUeRightCharged =
2400 new TH2F("hMCPtHbpZTUeChargedRight","#xi = ln(1/#it{z}_{T}) with charged hadrons, with UE right side range of trigger particles",
2401 nptbins,ptmin,ptmax,200,0.,10.);
2402 fhMCPtHbpZTUeRightCharged->SetYTitle("ln(1/#it{z}_{T})");
2403 fhMCPtHbpZTUeRightCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2404
fe871b21 2405 fhMCPtTrigPout =
babcbc9d 2406 new TH2F("hMCPtTrigPout","AOD MC Pout with triggers",
fe871b21 2407 nptbins,ptmin,ptmax,2*nptbins,-ptmax,ptmax);
858212dd 2408 fhMCPtTrigPout->SetYTitle("#it{p}_{out} (GeV/#it{c})");
2409 fhMCPtTrigPout->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
fe871b21 2410
2411 fhMCPtAssocDeltaPhi =
babcbc9d 2412 new TH2F("hMCPtAssocDeltaPhi","AOD MC delta phi with associated charged hadrons",
62f2fe4d 2413 nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax);
2bb7ac98 2414 fhMCPtAssocDeltaPhi->SetYTitle("#Delta #phi (rad)");
858212dd 2415 fhMCPtAssocDeltaPhi->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
fe871b21 2416
2417 outputContainer->Add(fh2phiLeadingParticle);
9623bf34 2418 outputContainer->Add(fhMCPtLeading);
08f220c8 2419 outputContainer->Add(fhMCPhiLeading);
2420 outputContainer->Add(fhMCEtaLeading);
fe871b21 2421 outputContainer->Add(fhMCDeltaPhiDeltaEtaCharged);
2422 outputContainer->Add(fhMCPhiCharged) ;
2423 outputContainer->Add(fhMCEtaCharged) ;
2424 outputContainer->Add(fhMCDeltaEtaCharged) ;
2425 outputContainer->Add(fhMCDeltaPhiCharged) ;
2426
2427 outputContainer->Add(fhMCDeltaPhiChargedPt) ;
3f150b4b 2428 outputContainer->Add(fhMCPtXECharged) ;
9623bf34 2429 outputContainer->Add(fhMCPtXEUeCharged) ;
c78eef61 2430 outputContainer->Add(fhMCPtXEUeLeftCharged) ;
2431 outputContainer->Add(fhMCPtXEUeRightCharged) ;
3f150b4b 2432 outputContainer->Add(fhMCPtZTCharged) ;
c78eef61 2433 outputContainer->Add(fhMCPtZTUeCharged) ;
2434 outputContainer->Add(fhMCPtZTUeLeftCharged) ;
2435 outputContainer->Add(fhMCPtZTUeRightCharged) ;
3f150b4b 2436 outputContainer->Add(fhMCPtHbpXECharged) ;
9623bf34 2437 outputContainer->Add(fhMCPtHbpXEUeCharged);
c78eef61 2438 outputContainer->Add(fhMCPtHbpXEUeLeftCharged);
2439 outputContainer->Add(fhMCPtHbpXEUeRightCharged);
9623bf34 2440 outputContainer->Add(fhMCUePart);
3f150b4b 2441 outputContainer->Add(fhMCPtHbpZTCharged) ;
c78eef61 2442 outputContainer->Add(fhMCPtHbpZTUeCharged) ;
2443 outputContainer->Add(fhMCPtHbpZTUeLeftCharged) ;
2444 outputContainer->Add(fhMCPtHbpZTUeRightCharged) ;
fe871b21 2445 outputContainer->Add(fhMCPtTrigPout) ;
2446 outputContainer->Add(fhMCPtAssocDeltaPhi) ;
2447 } //for MC histogram
2448
2e876d85 2449 if(DoOwnMix())
029dea5a 2450 {
2451 //create event containers
029dea5a 2452
283f989c 2453 if(!fUseMixStoredInReader || (fUseMixStoredInReader && !GetReader()->ListWithMixedEventsForTracksExists()))
2e876d85 2454 {
d07ffd54 2455 Int_t nvz = GetNZvertBin();
2456 Int_t nrp = GetNRPBin();
2457 Int_t nce = GetNCentrBin();
283f989c 2458
d07ffd54 2459 fListMixTrackEvents= new TList*[nvz*nrp*nce] ;
2460
2461 for( Int_t ice = 0 ; ice < nce ; ice++ )
2462 {
2463 for( Int_t ivz = 0 ; ivz < nvz ; ivz++ )
2464 {
2465 for( Int_t irp = 0 ; irp < nrp ; irp++ )
2466 {
2467 Int_t bin = GetEventMixBin(ice,ivz,irp); //ic*nvz*nrp+iz*nrp+irp;
2468
2469 //printf("GetCreateOutputObjects - Bins : cent %d, vz %d, RP %d, event %d/%d\n",
2470 // ic,iz, irp, bin);
2471
2472 fListMixTrackEvents[bin] = new TList() ;
2473 fListMixTrackEvents[bin]->SetOwner(kFALSE);
2474 }
2475 }
2476 }
2477 }
d0b625bc 2478
858212dd 2479 fhPtLeadingMixed = new TH1F ("hPtLeadingMixed","#it{p}_{T} distribution of leading particles, used for mixing", nptbins,ptmin,ptmax);
2480 fhPtLeadingMixed->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
ca17b39f 2481
7d306daf 2482 if(fCorrelVzBin)
2483 {
858212dd 2484 fhPtLeadingMixedVzBin = new TH2F ("hPtLeadingMixedVzBin","#it{p}_{T} distribution of leading particles, used for mixing", nptbins,ptmin,ptmax,GetNZvertBin(),0,GetNZvertBin());
2485 fhPtLeadingMixedVzBin->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
2486 fhPtLeadingMixedVzBin->SetYTitle("#it{v}_{#it{z}} bin");
7d306daf 2487 outputContainer->Add(fhPtLeadingMixedVzBin);
2488 }
2489
858212dd 2490 fhPtLeadingMixedBin = new TH2F ("hPtLeadingMixedBin","#it{p}_{T} distribution of leading particles vs mixing bin", nptbins,ptmin,ptmax,nMixBins,0,nMixBins);
2491 fhPtLeadingMixedBin->SetXTitle("#it{p}_{T}^{trig} (GeV/#it{c})");
d0b625bc 2492 fhPtLeadingMixedBin->SetYTitle("Bin");
d07ffd54 2493
d0b625bc 2494 fhPhiLeadingMixed = new TH2F ("hPhiLeadingMixed","#phi distribution of leading Particles, used for mixing",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
2495 fhPhiLeadingMixed->SetYTitle("#phi (rad)");
2496
2497 fhEtaLeadingMixed = new TH2F ("hEtaLeadingMixed","#eta distribution of leading, used for mixing",nptbins,ptmin,ptmax, netabins,etamin,etamax);
2498 fhEtaLeadingMixed->SetYTitle("#eta ");
2499
2500 outputContainer->Add(fhPtLeadingMixed);
2501 outputContainer->Add(fhPtLeadingMixedBin);
2502 outputContainer->Add(fhPhiLeadingMixed);
2503 outputContainer->Add(fhEtaLeadingMixed);
2504
2bb7ac98 2505 // Fill the cluster pool only in isolation analysis or if requested
2506 if( ( OnlyIsolated() || fFillNeutralEventMixPool) &&
2507 (!fUseMixStoredInReader || (fUseMixStoredInReader && !GetReader()->ListWithMixedEventsForCaloExists())))
d07ffd54 2508 {
7ed3a248 2509 Int_t nvz = GetNZvertBin();
2510 Int_t nrp = GetNRPBin();
2511 Int_t nce = GetNCentrBin();
2512
d07ffd54 2513 fListMixCaloEvents= new TList*[nvz*nrp*nce] ;
7ed3a248 2514
2515 for( Int_t ice = 0 ; ice < nce ; ice++ )
2e876d85 2516 {
7ed3a248 2517 for( Int_t ivz = 0 ; ivz < nvz ; ivz++ )
2e876d85 2518 {
7ed3a248 2519 for( Int_t irp = 0 ; irp < nrp ; irp++ )
283f989c 2520 {
7ed3a248 2521 Int_t bin = GetEventMixBin(ice,ivz,irp); //ic*nvz*nrp+iz*nrp+irp;
2522
da3c40f7 2523 //printf("GetCreateOutputObjects - Bins : cent %d, vz %d, RP %d, event %d/%d\n",
7ed3a248 2524 // ic,iz, irp, bin);
2525
d07ffd54 2526 fListMixCaloEvents[bin] = new TList() ;
2527 fListMixCaloEvents[bin]->SetOwner(kFALSE);
283f989c 2528 }
2e876d85 2529 }
283f989c 2530 }
2531 }
2532
2533 //Init the list in the reader if not done previously
d07ffd54 2534 if(fUseMixStoredInReader)
283f989c 2535 {
d07ffd54 2536 if( !GetReader()->ListWithMixedEventsForTracksExists() )
2537 GetReader()->SetListWithMixedEventsForTracks(fListMixTrackEvents);
2538
2539 if( !GetReader()->ListWithMixedEventsForCaloExists() )
2540 GetReader()->SetListWithMixedEventsForCalo (fListMixCaloEvents );
283f989c 2541 }
029dea5a 2542
2e876d85 2543 fhEventBin=new TH1I("hEventBin","Number of real events per bin(cen,vz,rp)",
2544 GetNCentrBin()*GetNZvertBin()*GetNRPBin()+1,0,
2545 GetNCentrBin()*GetNZvertBin()*GetNRPBin()+1) ;
2546 fhEventBin->SetXTitle("bin");
2547 outputContainer->Add(fhEventBin) ;
283f989c 2548
2e876d85 2549 fhEventMixBin=new TH1I("hEventMixBin","Number of events per bin(cen,vz,rp)",
2550 GetNCentrBin()*GetNZvertBin()*GetNRPBin()+1,0,
2551 GetNCentrBin()*GetNZvertBin()*GetNRPBin()+1) ;
2552 fhEventMixBin->SetXTitle("bin");
2553 outputContainer->Add(fhEventMixBin) ;
283f989c 2554
2e876d85 2555 fhNtracksMB=new TH1F("hNtracksMBEvent","Number of tracks w/ event trigger kMB",2000,0,2000);
2556 outputContainer->Add(fhNtracksMB);
029dea5a 2557
2bb7ac98 2558 if(fFillNeutralEventMixPool || OnlyIsolated())
2559 {
2bb7ac98 2560 fhNclustersMB=new TH1F("hNclustersMBEvent","Number of clusters w/ event trigger kMB",2000,0,2000);
2561 outputContainer->Add(fhNclustersMB);
2562 }
2563
029dea5a 2564 fhMixDeltaPhiCharged = new TH2F
858212dd 2565 ("hMixDeltaPhiCharged","Mixed event : #phi_{trigger} - #phi_{h^{#pm}} vs #it{p}_{T trigger}",
62f2fe4d 2566 nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax);
2bb7ac98 2567 fhMixDeltaPhiCharged->SetYTitle("#Delta #phi (rad)");
858212dd 2568 fhMixDeltaPhiCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
029dea5a 2569 outputContainer->Add(fhMixDeltaPhiCharged);
283f989c 2570
029dea5a 2571 fhMixDeltaPhiDeltaEtaCharged = new TH2F
2572 ("hMixDeltaPhiDeltaEtaCharged","Mixed event : #phi_{trigger} - #phi_{h^{#pm}} vs #eta_{trigger} - #eta_{h^{#pm}}",
62f2fe4d 2573 ndeltaphibins ,deltaphimin,deltaphimax,ndeltaetabins ,deltaetamin,deltaetamax);
2bb7ac98 2574 fhMixDeltaPhiDeltaEtaCharged->SetXTitle("#Delta #phi (rad)");
029dea5a 2575 fhMixDeltaPhiDeltaEtaCharged->SetYTitle("#Delta #eta");
2576 outputContainer->Add(fhMixDeltaPhiDeltaEtaCharged);
283f989c 2577
08f220c8 2578 fhMixXECharged =
858212dd 2579 new TH2F("hMixXECharged","Mixed event : #it{x}_{#it{E}} for charged tracks",
08f220c8 2580 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 2581 fhMixXECharged->SetYTitle("#it{x}_{#it{E}}");
2582 fhMixXECharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
08f220c8 2583 outputContainer->Add(fhMixXECharged);
18838011 2584
2585 fhMixXEUeCharged =
858212dd 2586 new TH2F("hMixXEUeCharged","Mixed event : #it{x}_{#it{E}} for charged tracks in Ue region",
18838011 2587 nptbins,ptmin,ptmax,200,0.,2.);
858212dd 2588 fhMixXEUeCharged->SetYTitle("#it{x}_{#it{E}}");
2589 fhMixXEUeCharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
18838011 2590 outputContainer->Add(fhMixXEUeCharged);
08f220c8 2591
18838011 2592 fhMixHbpXECharged =
858212dd 2593 new TH2F("hMixHbpXECharged","mixed event : #xi = ln(1/#it{x}_{#it{E}}) with charged hadrons",
08f220c8 2594 nptbins,ptmin,ptmax,200,0.,10.);
858212dd 2595 fhMixHbpXECharged->SetYTitle("ln(1/#it{x}_{#it{E}})");
2596 fhMixHbpXECharged->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
08f220c8 2597 outputContainer->Add(fhMixHbpXECharged);
2598
7d306daf 2599 fhMixDeltaPhiChargedAssocPtBin = new TH2F*[fNAssocPtBins*nz];
2600 fhMixDeltaPhiChargedAssocPtBinDEta08 = new TH2F*[fNAssocPtBins*nz];
2601 fhMixDeltaPhiChargedAssocPtBinDEta0 = new TH2F*[fNAssocPtBins*nz];
2602 fhMixDeltaPhiDeltaEtaChargedAssocPtBin = new TH2F*[fNAssocPtBins*nz];
283f989c 2603
029dea5a 2604 for(Int_t i = 0 ; i < fNAssocPtBins ; i++)
8cc41381 2605 {
7d306daf 2606 for(Int_t z = 0 ; z < nz ; z++)
8cc41381 2607 {
7d306daf 2608 Int_t bin = i*nz+z;
8cc41381 2609
7d306daf 2610 if(fCorrelVzBin)
2611 {
d71a7d1f 2612 sz = Form("_vz%d",z);
858212dd 2613 tz = Form(", #it{v}_{#it{z}} bin %d",z);
7d306daf 2614 }
2615
2616 //printf("MIX : iAssoc %d, Vz %d, bin %d - sz %s, tz %s \n",i,z,bin,sz.Data(),tz.Data());
2617
2618 fhMixDeltaPhiChargedAssocPtBin[bin] = new TH2F(Form("hMixDeltaPhiChargedAssocPtBin%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
858212dd 2619 Form("Mixed event #Delta #phi vs #it{p}_{T trigger} for associated #it{p}_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
8cc41381 2620 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
858212dd 2621 fhMixDeltaPhiChargedAssocPtBin[bin]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2bb7ac98 2622 fhMixDeltaPhiChargedAssocPtBin[bin]->SetYTitle("#Delta #phi (rad)");
8cc41381 2623
7d306daf 2624 fhMixDeltaPhiChargedAssocPtBinDEta08[bin] = new TH2F(Form("hMixDeltaPhiDeltaEta0.8ChargedAssocPtBin%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
858212dd 2625 Form("Mixed event #Delta #phi vs #it{p}_{T trigger} for associated #it{p}_{T} bin [%2.1f,%2.1f]%s, for #Delta #eta > 0.8", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
8cc41381 2626 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
858212dd 2627 fhMixDeltaPhiChargedAssocPtBinDEta08[bin]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2bb7ac98 2628 fhMixDeltaPhiChargedAssocPtBinDEta08[bin]->SetYTitle("#Delta #phi (rad)");
8cc41381 2629
7d306daf 2630 fhMixDeltaPhiChargedAssocPtBinDEta0[bin] = new TH2F(Form("hMixDeltaPhiDeltaEta0ChargedAssocPtBin%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
858212dd 2631 Form("Mixed event #Delta #phi vs #it{p}_{T trigger} for associated #it{p}_{T} bin [%2.1f,%2.1f]%s, for #Delta #eta = 0", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
8cc41381 2632 nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
858212dd 2633 fhMixDeltaPhiChargedAssocPtBinDEta0[bin]->SetXTitle("#it{p}_{T trigger} (GeV/#it{c})");
2bb7ac98 2634 fhMixDeltaPhiChargedAssocPtBinDEta0[bin]->SetYTitle("#Delta #phi (rad)");
8cc41381 2635
7d306daf 2636 fhMixDeltaPhiDeltaEtaChargedAssocPtBin[bin] = new TH2F(Form("hMixDeltaPhiDeltaEtaChargedAssocPtBin%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
858212dd 2637 Form("Mixed event #Delta #phi vs #it{p}_{T trigger} for associated #it{p}_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
8cc41381 2638 ndeltaphibins ,deltaphimin,deltaphimax,ndeltaetabins ,deltaetamin,deltaetamax);
2bb7ac98 2639 fhMixDeltaPhiDeltaEtaChargedAssocPtBin[bin]->SetXTitle("#Delta #phi (rad)");
8cc41381 2640 fhMixDeltaPhiDeltaEtaChargedAssocPtBin[bin]->SetYTitle("#Delta #eta");
2641
2642 outputContainer->Add(fhMixDeltaPhiChargedAssocPtBin[bin]);
2643 outputContainer->Add(fhMixDeltaPhiChargedAssocPtBinDEta08[bin]);
2644 outputContainer->Add(fhMixDeltaPhiChargedAssocPtBinDEta0[bin]);
2645 outputContainer->Add(fhMixDeltaPhiDeltaEtaChargedAssocPtBin[bin]);
2646 }
050ad675 2647 }
029dea5a 2648 }
7d306daf 2649
e09cf5ef 2650 return outputContainer;
2651
2652}
2653
907b38cd 2654//_________________________________________________________________________________________________
2655Bool_t AliAnaParticleHadronCorrelation::GetDecayPhotonMomentum(const AliAODPWG4Particle* trigger,
2656 TLorentzVector & mom1,
2657 TLorentzVector & mom2)
2658{
2659 // Get the momentum of the pi0/eta assigned decay photons
2660 // In case of pi0/eta trigger, we may want to check their decay correlation,
2661 // get their decay children
2662
2663 Int_t indexPhoton1 = trigger->GetCaloLabel(0);
2664 Int_t indexPhoton2 = trigger->GetCaloLabel(1);
2665 Float_t ptTrig = trigger->Pt();
2666
2667 if(indexPhoton1!=-1 || indexPhoton2!=-1) return kFALSE;
2668
2669 if(GetDebug() > 1)
2670 printf("AliAnaParticleHadronCorrelation::GetDecayPhotonMomentum() - indexPhoton1 = %d, indexPhoton2 = %d \n", indexPhoton1, indexPhoton2);
2671
2672 TObjArray * clusters = 0x0 ;
2673 if(trigger->GetDetector()=="EMCAL") clusters = GetEMCALClusters() ;
2674 else clusters = GetPHOSClusters() ;
2675
2676 for(Int_t iclus = 0; iclus < clusters->GetEntriesFast(); iclus++)
2677 {
2678 AliVCluster * photon = (AliVCluster*) (clusters->At(iclus));
2679 if(photon->GetID()==indexPhoton1)
2680 {
2681 photon->GetMomentum(mom1,GetVertex(0)) ;
2682 if(ptTrig) fhPtPi0DecayRatio->Fill(ptTrig, mom1.Pt()/ptTrig);
2683 }
2684 if(photon->GetID()==indexPhoton2)
2685 {
2686 photon->GetMomentum(mom1,GetVertex(0)) ;
2687 if(ptTrig > 0) fhPtPi0DecayRatio->Fill(ptTrig, mom2.Pt()/ptTrig);
2688 }
2689
2690 if(GetDebug() > 1)printf("AliAnaParticleHadronCorrelation::GetDecayPhotonMomentum() - Photon1 = %f, Photon2 = %f \n", mom1.Pt(), mom2.Pt());
2691
2692 } //cluster loop
2693
2694 return kTRUE;
2695
2696}
2697
b1f720a7 2698//_____________________________________________________________
22ad7981 2699Int_t AliAnaParticleHadronCorrelation::GetMCTagHistogramIndex(Int_t mcTag)
b1f720a7 2700{
2701 // Index of MC histograms depending on MC origin
2702
2703 if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPrompt) ||
2704 GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCFragmentation)) return 0;
2705 else if( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0)) return 1;
2706 else if( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0Decay)) return 2;
2707 else if( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEtaDecay)) return 3;
2708 else if( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCOtherDecay)) return 4;
2709 else if(!GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron)) return 5;
2710 else return 6;
2711
2712}
2713
05d0d05d 2714//____________________________________________________
e09cf5ef 2715void AliAnaParticleHadronCorrelation::InitParameters()
2716{
2717
2718 //Initialize the parameters of the analysis.
e4c0a0eb 2719 SetInputAODName("Particle");
e09cf5ef 2720 SetAODObjArrayName("Hadrons");
2721 AddToHistogramsName("AnaHadronCorr_");
045396c8 2722
e09cf5ef 2723 SetPtCutRange(0.,300);
045396c8 2724 fDeltaPhiMinCut = 1.5 ;
2725 fDeltaPhiMaxCut = 4.5 ;
2726 fSelectIsolated = kFALSE;
2727 fMakeSeveralUE = kFALSE;
2728 fUeDeltaPhiMinCut = 1. ;
2729 fUeDeltaPhiMaxCut = 1.5 ;
907b38cd 2730
045396c8 2731 fNeutralCorr = kFALSE ;
2732 fPi0Trigger = kFALSE ;
907b38cd 2733 fDecayTrigger = kFALSE ;
2734 fHMPIDCorrelation = kFALSE ;
045396c8 2735
3f150b4b 2736 fMakeAbsoluteLeading = kTRUE;
2737 fMakeNearSideLeading = kFALSE;
2738
050ad675 2739 fNAssocPtBins = 9 ;
2740 fAssocPtBinLimit[0] = 0.2 ;
f85f4afb 2741 fAssocPtBinLimit[1] = 0.5 ;
2742 fAssocPtBinLimit[2] = 1.0 ;
2743 fAssocPtBinLimit[3] = 2.0 ;
2744 fAssocPtBinLimit[4] = 3.0 ;
2745 fAssocPtBinLimit[5] = 4.0 ;
2746 fAssocPtBinLimit[6] = 5.0 ;
2747 fAssocPtBinLimit[7] = 6.0 ;
2748 fAssocPtBinLimit[8] = 7.0 ;
2749 fAssocPtBinLimit[9] = 8.0 ;
2750 fAssocPtBinLimit[10] = 9.0 ;
2751 fAssocPtBinLimit[11] = 10.0 ;
2752 fAssocPtBinLimit[12] = 12.0 ;
2753 fAssocPtBinLimit[13] = 14.0 ;
2754 fAssocPtBinLimit[14] = 16.0 ;
2755 fAssocPtBinLimit[15] = 20.0 ;
2756 fAssocPtBinLimit[16] = 30.0 ;
2757 fAssocPtBinLimit[17] = 40.0 ;
2758 fAssocPtBinLimit[18] = 50.0 ;
2759 fAssocPtBinLimit[19] = 200.0 ;
2760
283f989c 2761 fUseMixStoredInReader = kTRUE;
2762
e4c0a0eb 2763 fM02MinCut = -1 ;
2764 fM02MaxCut = -1 ;
2765
f7408d50 2766 fSelectLeadingHadronAngle = kFALSE;
2767 fMinLeadHadPhi = 150*TMath::DegToRad();
2768 fMaxLeadHadPhi = 210*TMath::DegToRad();
2769
2770 fMinLeadHadPt = 1;
2771 fMaxLeadHadPt = 100;
2772
e09cf5ef 2773}
2774
05d0d05d 2775//__________________________________________________________
e09cf5ef 2776void AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD()
2777{
2778 //Particle-Hadron Correlation Analysis, fill AODs
2779
547c2f01 2780 if(!GetInputAODBranch())
2781 {
e09cf5ef 2782 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - No input particles in AOD with name branch < %s >, STOP \n",GetInputAODName().Data());
2783 abort();
2784 }
2785
547c2f01 2786 if(strcmp(GetInputAODBranch()->GetClass()->GetName(), "AliAODPWG4ParticleCorrelation"))
2787 {
e09cf5ef 2788 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());
2789 abort();
2790 }
2791
283f989c 2792 if(GetDebug() > 1)
2793 {
e09cf5ef 2794 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - Begin hadron correlation analysis, fill AODs \n");
2795 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - In particle branch aod entries %d\n", GetInputAODBranch()->GetEntriesFast());
66e64043 2796 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - In CTS aod entries %d\n", GetCTSTracks() ->GetEntriesFast());
e09cf5ef 2797 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - In EMCAL aod entries %d\n", GetEMCALClusters()->GetEntriesFast());
66e64043 2798 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - In PHOS aod entries %d\n", GetPHOSClusters() ->GetEntriesFast());
e09cf5ef 2799 }
31864468 2800
045396c8 2801 //Loop on stored AOD particles, find leading trigger
66e64043 2802 Double_t ptTrig = fMinTriggerPt ;
045396c8 2803 fLeadingTriggerIndex = -1 ;
2804 Int_t naod = GetInputAODBranch()->GetEntriesFast() ;
04f7a616 2805 for(Int_t iaod = 0; iaod < naod ; iaod++)
2806 {
e09cf5ef 2807 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
045396c8 2808
04f7a616 2809 // Vertex cut in case of mixing
2810 Int_t check = CheckMixedEventVertex(particle->GetCaloLabel(0), particle->GetTrackLabel(0));
2811 if(check == 0) continue;
2812 if(check == -1) return;
2813
045396c8 2814 // find the leading particles with highest momentum
547c2f01 2815 if (particle->Pt() > ptTrig)
2816 {
045396c8 2817 ptTrig = particle->Pt() ;
2818 fLeadingTriggerIndex = iaod ;
2819 }
2820 }// finish search of leading trigger particle
e09cf5ef 2821
66e64043 2822
e09cf5ef 2823 //Do correlation with leading particle
7a12c958 2824 if(fLeadingTriggerIndex < 0) return ;
2825
2826 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(fLeadingTriggerIndex));
2827
2828 //check if the particle is isolated or if we want to take the isolation into account
2829 if(OnlyIsolated() && !particle->IsIsolated()) return;
2830
2831 //Make correlation with charged hadrons
2832 Bool_t okcharged = kTRUE;
2833 Bool_t okneutral = kTRUE;
2834 if(GetReader()->IsCTSSwitchedOn() )
2835 okcharged = MakeChargedCorrelation(particle, GetCTSTracks(),kFALSE);
e09cf5ef 2836
7a12c958 2837 TObjArray * pi0list = (TObjArray*) GetAODBranch(fPi0AODBranchName); //For the future, foresee more possible pi0 lists
2838 if(fNeutralCorr && pi0list && pi0list->GetEntriesFast() > 0)
2839 okneutral = MakeNeutralCorrelation(particle, pi0list,kFALSE);
2840
2841 if( GetDebug() > 1 ) printf("Charged correlation OK %d; Neutral correlation OK %d",okcharged,okneutral);
2842
2843 if( GetDebug() > 1 ) printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - End fill AODs \n");
e09cf5ef 2844
2845}
2846
05d0d05d 2847//_________________________________________________________________
e09cf5ef 2848void AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms()
2849{
2850 //Particle-Hadron Correlation Analysis, fill histograms
2851
3f150b4b 2852 if(!GetInputAODBranch())
2853 {
7a12c958 2854 AliFatal(Form("No input particles in AOD with name branch < %s >, STOP \n",GetInputAODName().Data()));
2855 return ; // coverity
e09cf5ef 2856 }
2857
3f150b4b 2858 if(GetDebug() > 1)
2859 {
e09cf5ef 2860 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - Begin hadron correlation analysis, fill histograms \n");
2861 printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - In particle branch aod entries %d\n", GetInputAODBranch()->GetEntriesFast());
2862 }
e09cf5ef 2863
7a12c958 2864 //---------------------------------------------------
2865 // Loop on stored AOD particles, find leading trigger
c8710850 2866
66e64043 2867 Double_t ptTrig = fMinTriggerPt;
04f7a616 2868 if(fLeadingTriggerIndex < 0)
2869 {
2870 //Search leading if not done before
045396c8 2871 Int_t naod = GetInputAODBranch()->GetEntriesFast() ;
547c2f01 2872 for(Int_t iaod = 0; iaod < naod ; iaod++)
2873 { //loop on input trigger AOD file
045396c8 2874 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
04f7a616 2875
2876 // Vertex cut in case of mixing
2877 Int_t check = CheckMixedEventVertex(particle->GetCaloLabel(0), particle->GetTrackLabel(0));
2878 if(check == 0) continue;
2879 if(check == -1) return;
9623bf34 2880
045396c8 2881 //check if the particle is isolated or if we want to take the isolation into account
2882 if(OnlyIsolated() && !particle->IsIsolated()) continue;
e09cf5ef 2883
045396c8 2884 //find the leading particles with highest momentum
547c2f01 2885 if (particle->Pt() > ptTrig)
2886 {
045396c8 2887 ptTrig = particle->Pt() ;
2888 fLeadingTriggerIndex = iaod ;
e09cf5ef 2889 }
547c2f01 2890
2891 }// Finish search of leading trigger particle
2892 }// Search leading if not done before
045396c8 2893
7a12c958 2894 //-----------------------------------------
2895 // Fill Leading trigger related histograms
2896 //-----------------------------------------
2897 if(fLeadingTriggerIndex < 0 ) return ;
2898
2899 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(fLeadingTriggerIndex));
2900
bef61a43 2901 Float_t pt = particle->Pt();
2902 fhPtTriggerInput->Fill(pt);
2903
7a12c958 2904 // check if it was a calorimeter cluster and if the SS cut was requested, if so, apply it
2905 Int_t clID1 = particle->GetCaloLabel(0) ;
2906 Int_t clID2 = particle->GetCaloLabel(1) ; // for photon clusters should not be set.
2907 //printf("Leading for for %s: id1 %d, id2 %d, min %f, max %f, det %s\n",
2908 // GetInputAODName().Data(),clID1,clID2,fM02MinCut,fM02MaxCut,(particle->GetDetector()).Data());
2909
2910
2911 // if requested, do the rejection of clusters out of a shower shape window
2912 // not needed if already done at the particle identification level, but for isolation
2913 // studies, it is preferred not to remove so we do it here
2914 if(clID1 > 0 && clID2 < 0 && fM02MaxCut > 0 && fM02MinCut > 0)
2915 {
2916 Int_t iclus = -1;
2917 TObjArray* clusters = 0x0;
2918 if (particle->GetDetector() == "EMCAL") clusters = GetEMCALClusters();
2919 else if(particle->GetDetector() == "PHOS" ) clusters = GetPHOSClusters();
7d306daf 2920
7a12c958 2921 if(clusters)
547c2f01 2922 {
7a12c958 2923 AliVCluster *cluster = FindCluster(clusters,clID1,iclus);
2924 Float_t m02 = cluster->GetM02();
7a12c958 2925 if(m02 > fM02MaxCut || m02 < fM02MinCut) return ;
9623bf34 2926 }
bef61a43 2927
2928 fhPtTriggerSSCut->Fill(pt);
7a12c958 2929 }
2930
2931 // Check if the particle is isolated or if we want to take the isolation into account
bef61a43 2932 if(OnlyIsolated())
2933 {
2934 if( !particle->IsIsolated() ) return;
2935 fhPtTriggerIsoCut->Fill(pt);
2936 }
7a12c958 2937
2938 // Check if trigger is in fiducial region
2939 if(IsFiducialCutOn())
2940 {
2941 Bool_t in = GetFiducialCut()->IsInFiducialCut(*particle->Momentum(),particle->GetDetector()) ;
2942 if(! in ) return ;
2943 }
2944
bef61a43 2945 fhPtTriggerFidCut->Fill(pt);
7a12c958 2946
2947 // Make correlation with charged hadrons
2948 Bool_t okcharged = kTRUE;
2949 Bool_t okneutral = kTRUE;
2950 if(GetReader()->IsCTSSwitchedOn() )
2951 {
2952 okcharged = MakeChargedCorrelation(particle, GetCTSTracks(),kTRUE);
2953 if(IsDataMC())
547c2f01 2954 {
7a12c958 2955 MakeMCChargedCorrelation(particle);
a5f1e836 2956 }
7a12c958 2957 }
2958
2959 TObjArray * pi0list = (TObjArray*) GetAODBranch(fPi0AODBranchName); //For the future, foresee more possible pi0 lists
2960 if(fNeutralCorr && pi0list)
2961 {
2962 if(pi0list->GetEntriesFast() > 0)
2963 okneutral = MakeNeutralCorrelation(particle, pi0list,kTRUE);
2964 }
2965
2966 // If the correlation or the finding of the leading did not succeed.
2967 if(!okcharged || !okneutral) return ;
2968
2969 // Fill leading particle histogram if correlation went well and
2970 // no problem was found, like not absolute leading, or bad vertex in mixing.
2971
2972 // pT of the leading, vs leading origin if MC
2973 fhPtLeading->Fill(pt);
2974
2975 if(IsDataMC())
2976 {
2977 Int_t mcIndex = GetMCTagHistogramIndex(particle->GetTag());
2978 fhPtLeadingMC[mcIndex]->Fill(pt);
2979 }
2980
2981 // Acceptance of the leading
2982 Float_t phi = particle->Phi();
2983 if( phi<0 ) phi+=TMath::TwoPi();
2984 fhPhiLeading->Fill(pt, phi);
2985
2986 fhEtaLeading->Fill(pt, particle->Eta());
2987 //printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - Leading particle : pt %f, eta %f, phi %f\n",particle->Pt(),particle->Eta(),phi);
2988
2989 //----------------------------------
2990 // Leading particle pT vs event bins
2991
2992 fhPtLeadingBin->Fill(pt,GetEventMixBin());
2993 if(fCorrelVzBin) fhPtLeadingVzBin->Fill(pt,GetEventVzBin());
2994
2995 Float_t cen = GetEventCentrality();
2996 Float_t ep = GetEventPlaneAngle();
2997
2998 fhPtLeadingCentrality ->Fill(pt,cen);
2999 fhPtLeadingEventPlane ->Fill(pt,ep);
3000 fhLeadingEventPlaneCentrality->Fill(cen,ep);
3001
3002 //----------------------------------
3003 // Leading particle pT vs pile-up
3004
3005 if(fFillPileUpHistograms)
3006 {
3007 Int_t vtxBC = GetReader()->GetVertexBC();
3008 if(vtxBC == 0 || vtxBC==AliVTrack::kTOFBCNA) fhPtLeadingVtxBC0->Fill(pt);
3009
3010 if(GetReader()->IsPileUpFromSPD()) fhPtLeadingPileUp[0]->Fill(pt);
3011 if(GetReader()->IsPileUpFromEMCal()) fhPtLeadingPileUp[1]->Fill(pt);
3012 if(GetReader()->IsPileUpFromSPDOrEMCal()) fhPtLeadingPileUp[2]->Fill(pt);
3013 if(GetReader()->IsPileUpFromSPDAndEMCal()) fhPtLeadingPileUp[3]->Fill(pt);
3014 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) fhPtLeadingPileUp[4]->Fill(pt);
3015 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) fhPtLeadingPileUp[5]->Fill(pt);
3016 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) fhPtLeadingPileUp[6]->Fill(pt);
3017 }
e09cf5ef 3018
045396c8 3019 //Reinit for next event
3020 fLeadingTriggerIndex = -1;
e09cf5ef 3021
045396c8 3022 if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - End fill histograms \n");
e09cf5ef 3023}
3024
c5693f62 3025//___________________________________________________________________________________________________________
045396c8 3026Bool_t AliAnaParticleHadronCorrelation::MakeChargedCorrelation(AliAODPWG4ParticleCorrelation *aodParticle,
22ad7981 3027 const TObjArray* pl, Bool_t bFillHisto)
e09cf5ef 3028{
3029 // Charged Hadron Correlation Analysis
283f989c 3030 if(GetDebug() > 1)
3031 printf("AliAnaParticleHadronCorrelation::MakeChargedCorrelation() - Make trigger particle - charged hadron correlation \n");
907b38cd 3032
3033 Float_t phiTrig = aodParticle->Phi();
3034 Float_t etaTrig = aodParticle->Eta();
3035 Float_t ptTrig = aodParticle->Pt();
3036 Bool_t decay = aodParticle->IsTagged();
b1f720a7 3037 Int_t mcTag = aodParticle->GetTag();
fedea415 3038 Double_t bz = GetReader()->GetInputEvent()->GetMagneticField();
3039
907b38cd 3040 Float_t pt = -100. ;
3041 Float_t zT = -100. ;
3042 Float_t xE = -100. ;
3043 Float_t hbpXE = -100. ;
3044 Float_t hbpZT = -100. ;
3045 Float_t phi = -100. ;
3046 Float_t eta = -100. ;
3047 Float_t pout = -100. ;
3048 Float_t deltaPhi = -100. ;
f7408d50 3049 Float_t ptLeadHad = -100 ;
3050 Float_t phiLeadHad = -100 ;
e09cf5ef 3051
907b38cd 3052 TVector3 p3;
3053 TLorentzVector photonMom ;
3054 TObjArray * reftracks = 0x0;
3055 Int_t nrefs = 0;
3056 Int_t nTracks = GetCTSTracks()->GetEntriesFast() ;
3057
3058 // Mixed event settings
3059 Int_t evtIndex11 = -1 ; // cluster trigger or pi0 trigger
045396c8 3060 Int_t evtIndex12 = -1 ; // pi0 trigger
3061 Int_t evtIndex13 = -1 ; // charged trigger
045396c8 3062
3063 Double_t v[3] = {0,0,0}; //vertex ;
e09cf5ef 3064 GetReader()->GetVertex(v);
e09cf5ef 3065
04f7a616 3066 if (GetMixedEvent())
3067 {
e09cf5ef 3068 evtIndex11 = GetMixedEvent()->EventIndexForCaloCluster(aodParticle->GetCaloLabel(0)) ;
3069 evtIndex12 = GetMixedEvent()->EventIndexForCaloCluster(aodParticle->GetCaloLabel(1)) ;
3070 evtIndex13 = GetMixedEvent()->EventIndex(aodParticle->GetTrackLabel(0)) ;
3071 }
3072
907b38cd 3073 // In case of pi0/eta trigger, we may want to check their decay correlation,
3074 // get their decay children
3075 TLorentzVector decayMom1;
3076 TLorentzVector decayMom2;
3077 Bool_t decayFound = kFALSE;
3078 if(fPi0Trigger && bFillHisto) decayFound = GetDecayPhotonMomentum(aodParticle,decayMom1, decayMom2);
3079
3080 //-----------------------------------------------------------------------
f7408d50 3081 // Track loop, select tracks with good pt, phi and fill AODs or histograms
907b38cd 3082 //-----------------------------------------------------------------------
3083
f7408d50 3084 // select events where the leading particle in the opposite hemisphere to the trigger particle is
3085 // is in a window centered at 180 from the trigger
3086 // Find the leading hadron
3087 if(fSelectLeadingHadronAngle)
3088 {
3089 for(Int_t ipr = 0;ipr < pl->GetEntriesFast() ; ipr ++ )
3090 {
3091 AliVTrack * track = (AliVTrack *) (pl->At(ipr)) ;
3092 Double_t mom[3] = {track->Px(),track->Py(),track->Pz()};
3093 p3.SetXYZ(mom[0],mom[1],mom[2]);
3094 pt = p3.Pt();
3095 phi = p3.Phi() ;
3096
3097 if(pt > ptLeadHad && TMath::Abs(phi-phiTrig) > TMath::PiOver2())
3098 {
3099 ptLeadHad = pt ;
3100 phiLeadHad = phi;
3101 }
3102
3103 }// track loop
3104
3105 if( ptLeadHad < fMinLeadHadPt ||
3106 ptLeadHad > fMaxLeadHadPt ) return kFALSE;
3107
3108 if( TMath::Abs(phiLeadHad-phiTrig) < fMinLeadHadPhi ||
3109 TMath::Abs(phiLeadHad-phiTrig) > fMaxLeadHadPhi ) return kFALSE;
3110
3111 }// select leading hadron
3112
547c2f01 3113 for(Int_t ipr = 0;ipr < pl->GetEntriesFast() ; ipr ++ )
3114 {
e09cf5ef 3115 AliVTrack * track = (AliVTrack *) (pl->At(ipr)) ;
045396c8 3116
e09cf5ef 3117 Double_t mom[3] = {track->Px(),track->Py(),track->Pz()};
3118 p3.SetXYZ(mom[0],mom[1],mom[2]);
3119 pt = p3.Pt();
e09cf5ef 3120 eta = p3.Eta();
3121 phi = p3.Phi() ;
3122 if(phi < 0) phi+=TMath::TwoPi();
045396c8 3123
e09cf5ef 3124 //Select only hadrons in pt range
66e64043 3125 if(pt < fMinAssocPt || pt > fMaxAssocPt) continue ;
3126
e09cf5ef 3127 //remove trigger itself for correlation when use charged triggers
3128 if( track->GetID() == aodParticle->GetTrackLabel(0) || track->GetID() == aodParticle->GetTrackLabel(1) ||
66e64043 3129 track->GetID() == aodParticle->GetTrackLabel(2) || track->GetID() == aodParticle->GetTrackLabel(3) )
045396c8 3130 continue ;
3131
045396c8 3132 //jump out this event if near side associated particle pt larger than trigger
3f150b4b 3133 if (fMakeNearSideLeading)
547c2f01 3134 {
3f150b4b 3135 if(pt > ptTrig && TMath::Abs(phi-phiTrig) < TMath::PiOver2()) return kFALSE;
3136 }
3137 //jump out this event if there is any other particle with pt larger than trigger
3138 else if(fMakeAbsoluteLeading)
3139 {
3140 if(pt > ptTrig) return kFALSE;
045396c8 3141 }
f7408d50 3142
045396c8 3143 //Only for mixed event
3144 Int_t evtIndex2 = 0 ;
04f7a616 3145 if (GetMixedEvent())
3146 {
045396c8 3147 evtIndex2 = GetMixedEvent()->EventIndex(track->GetID()) ;
3148 if (evtIndex11 == evtIndex2 || evtIndex12 == evtIndex2 || evtIndex13 == evtIndex2 ) // photon and track from different events
3149 continue ;
3150 //vertex cut
3151 if (TMath::Abs(GetVertex(evtIndex2)[2]) > GetZvertexCut())
3152 return kFALSE;
3153 }
3154
045396c8 3155 // Fill Histograms
3f150b4b 3156 if(bFillHisto)
907b38cd 3157 {
66e64043 3158
283f989c 3159 if(GetDebug() > 2 )
3160 printf("AliAnaParticleHadronCorrelation::MakeChargedCorrelation() - Selected charge for momentum imbalance: pt %2.2f, phi %2.2f, eta %2.2f \n",pt,phi,eta);
907b38cd 3161
3162 // Set the pt associated bin for the defined bins
3163 Int_t assocBin = -1;
3164 for(Int_t i = 0 ; i < fNAssocPtBins ; i++)
547c2f01 3165 {
907b38cd 3166 if(pt > fAssocPtBinLimit[i] && pt < fAssocPtBinLimit[i+1]) assocBin= i;
3167 }
66e64043 3168
8cc41381 3169 // Assign to the histogram array a bin corresponding to a combination of pTa and vz bins
7d306daf 3170 Int_t nz = 1;
3171 Int_t vz = 0;
3172
3173 if(fCorrelVzBin)
3174 {
3175 nz = GetNZvertBin();
3176 vz = GetEventVzBin();
3177 }
3178
3179 Int_t bin = assocBin*nz+vz;
3180
8cc41381 3181 //printf("assoc Bin = %d, vZ bin = %d, bin = %d \n", assocBin,GetEventVzBin(),bin);
3182
fedea415 3183 ULong_t status = track->GetStatus();
3184 Bool_t okTOF = ( (status & AliVTrack::kTOFout) == AliVTrack::kTOFout ) ;
3185 //Double32_t tof = track->GetTOFsignal()*1e-3;
3186 Int_t trackBC = track->GetTOFBunchCrossing(bz);
3187
2a9171b5 3188 Int_t outTOF = -1;
3189 if (okTOF && trackBC!=0) outTOF = 1;
3190 else if(okTOF && trackBC==0) outTOF = 0;
fedea415 3191
907b38cd 3192 // Azimuthal Angle
3193 // calculate deltaPhi for later, shift when needed
8cc41381 3194 FillChargedAngularCorrelationHistograms(pt, ptTrig, bin, phi, phiTrig, deltaPhi,
fedea415 3195 eta, etaTrig, decay, track->GetHMPIDsignal(),outTOF,nTracks,mcTag);
05d0d05d 3196
907b38cd 3197 // Imbalance zT/xE/pOut
3198 zT = pt/ptTrig ;
f16872ec 3199 if(zT > 0 ) hbpZT = TMath::Log(1./zT);
907b38cd 3200 else hbpZT =-100;
e09cf5ef 3201
907b38cd 3202 xE =-pt/ptTrig*TMath::Cos(deltaPhi); // -(px*pxTrig+py*pyTrig)/(ptTrig*ptTrig);
3203 //if(xE <0.)xE =-xE;
f16872ec 3204 if(xE > 0 ) hbpXE = TMath::Log(1./xE);
907b38cd 3205 else hbpXE =-100;
3206
3207 pout = pt*TMath::Sin(deltaPhi) ;
66e64043 3208
907b38cd 3209 //delta phi cut for momentum imbalance correlation
18838011 3210 if ( (deltaPhi > fDeltaPhiMinCut) && (deltaPhi < fDeltaPhiMaxCut) )
547c2f01 3211 {
3f150b4b 3212
727a309a 3213 FillChargedMomentumImbalanceHistograms(ptTrig, pt, xE, hbpXE, zT, hbpZT, pout, deltaPhi,
fedea415 3214 nTracks, track->Charge(), bin, decay,outTOF,mcTag);
3f150b4b 3215
18838011 3216 }
3217
fedea415 3218 if ( (deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < fUeDeltaPhiMaxCut) )
547c2f01 3219 { //UE study
3f150b4b 3220
fedea415 3221 FillChargedUnderlyingEventHistograms(ptTrig, pt, deltaPhi, nTracks,outTOF);
9623bf34 3222
d0b625bc 3223 fhUePart->Fill(ptTrig);
3f150b4b 3224
907b38cd 3225 }
e09cf5ef 3226
907b38cd 3227 if(fPi0Trigger && decayFound)
3228 FillDecayPhotonCorrelationHistograms(pt, phi, decayMom1,decayMom2, kTRUE) ;
e09cf5ef 3229
3230 //several UE calculation
8cc41381 3231 if(fMakeSeveralUE) FillChargedUnderlyingEventSidesHistograms(ptTrig,pt,deltaPhi);
907b38cd 3232
e09cf5ef 3233 } //Fill histogram
547c2f01 3234 else
3235 {
e09cf5ef 3236 nrefs++;
547c2f01 3237 if(nrefs==1)
3238 {
e09cf5ef 3239 reftracks = new TObjArray(0);
045396c8 3240 TString trackname = Form("%s+Tracks", GetAODObjArrayName().Data());
3241 reftracks->SetName(trackname.Data());
029dea5a 3242 reftracks->SetOwner(kFALSE);
e09cf5ef 3243 }
029dea5a 3244
e09cf5ef 3245 reftracks->Add(track);
029dea5a 3246
e09cf5ef 3247 }//aod particle loop
3248 }// track loop
3249
3250 //Fill AOD with reference tracks, if not filling histograms
547c2f01 3251 if(!bFillHisto && reftracks)
3252 {
e09cf5ef 3253 aodParticle->AddObjArray(reftracks);
3254 }
283f989c 3255
029dea5a 3256 //Own mixed event, add event and remove previous or fill the mixed histograms
2e876d85 3257 if(DoOwnMix() && bFillHisto)
029dea5a 3258 {
3259 MakeChargedMixCorrelation(aodParticle);
3260 }
3261
045396c8 3262 return kTRUE;
e09cf5ef 3263
3264}
3265
029dea5a 3266
7ed3a248 3267//_________________________________________________________________________________________________________
3268void AliAnaParticleHadronCorrelation::MakeChargedMixCorrelation(AliAODPWG4ParticleCorrelation *aodParticle)
029dea5a 3269{
2e876d85 3270 // Mix current trigger with tracks in another MB event
029dea5a 3271
2e876d85 3272 if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation() - Make trigger particle - charged hadron mixed event correlation \n");
029dea5a 3273
3274 if(GetMixedEvent()) return; // This is not the mixed event from general mixing frame
3275
029dea5a 3276 // Get the event with similar caracteristics
2e876d85 3277 //printf("MakeChargedMixCorrelation for %s\n",GetInputAODName().Data());
3278
3279 AliAnalysisManager * manager = AliAnalysisManager::GetAnalysisManager();
c52aeef5 3280
2e876d85 3281 AliInputEventHandler * inputHandler = dynamic_cast<AliInputEventHandler*>(manager->GetInputEventHandler());
c52aeef5 3282
3283 if(!inputHandler) return;
3284
2e876d85 3285 if(!(inputHandler->IsEventSelected( ) & GetReader()->GetEventTriggerMask())) return;
7ed3a248 3286
029dea5a 3287 // Get the pool, check if it exits
2e876d85 3288 Int_t eventBin = GetEventMixBin();
3289
3290 fhEventBin->Fill(eventBin);
029dea5a 3291
2e876d85 3292 //Check that the bin exists, if not (bad determination of RP, centrality or vz bin) do nothing
3293 if(eventBin < 0) return;
029dea5a 3294
d07ffd54 3295 TList * pool = 0;
3296 TList * poolCalo = 0;
3297 if(fUseMixStoredInReader)
3298 {
3299 pool = GetReader()->GetListWithMixedEventsForTracks(eventBin);
2bb7ac98 3300 if(OnlyIsolated() || fFillNeutralEventMixPool) poolCalo = GetReader()->GetListWithMixedEventsForCalo (eventBin);
d07ffd54 3301 }
3302 else
3303 {
3304 pool = fListMixTrackEvents[eventBin];
2bb7ac98 3305 if(OnlyIsolated() || fFillNeutralEventMixPool) poolCalo = fListMixCaloEvents [eventBin];
d07ffd54 3306 }
3307
2e876d85 3308 if(!pool) return ;
029dea5a 3309
2bb7ac98 3310 if((OnlyIsolated() || fFillNeutralEventMixPool ) && !poolCalo &&
d07ffd54 3311 (GetIsolationCut()->GetParticleTypeInCone()!=AliIsolationCut::AliIsolationCut::kOnlyCharged))
3312 printf("AliAnaParticleHadronCorrelation::MakeChargedMixCorrelation() - Careful, cluster pool not available\n");
3313
029dea5a 3314 Double_t ptTrig = aodParticle->Pt();
3315 Double_t etaTrig = aodParticle->Eta();
3316 Double_t phiTrig = aodParticle->Phi();
3317 if(phiTrig < 0.) phiTrig+=TMath::TwoPi();
3318
2e876d85 3319 if(GetDebug() > 1)
283f989c 3320 printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation() - Pool bin %d size %d, leading trigger pt=%f, phi=%f, eta=%f\n",
3321 eventBin,pool->GetSize(), ptTrig,phiTrig,etaTrig);
029dea5a 3322
3323 Double_t ptAssoc = -999.;
2e876d85 3324 Double_t phiAssoc = -999.;
029dea5a 3325 Double_t etaAssoc = -999.;
3326 Double_t deltaPhi = -999.;
3327 Double_t deltaEta = -999.;
08f220c8 3328 Double_t xE = -999.;
3329 Double_t hbpXE = -999.;
3330
2e876d85 3331 //Start from first event in pool except if in this same event the pool was filled
283f989c 3332 Int_t ev0 = 0;
3333 if(GetReader()->GetLastTracksMixedEvent() == GetEventNumber()) ev0 = 1;
7ed3a248 3334
283f989c 3335 for(Int_t ev=ev0; ev < pool->GetSize(); ev++)
029dea5a 3336 {
3337 TObjArray* bgTracks = static_cast<TObjArray*>(pool->At(ev));
2bb7ac98 3338 TObjArray* bgCalo = 0;
3339
7ed3a248 3340 // Check if the particle is isolated in the mixed event, it not, do not fill the histograms
5a951426 3341 if((OnlyIsolated() || fFillNeutralEventMixPool) && poolCalo)
7ed3a248 3342 {
d07ffd54 3343 if(pool->GetSize()!=poolCalo->GetSize())
3344 printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation() - Different size of calo and track pools\n");
3345
2bb7ac98 3346 bgCalo = static_cast<TObjArray*>(poolCalo->At(ev));
d07ffd54 3347
3348 if(!bgCalo)
3349 printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation() - Event %d in calo pool not available?\n",ev);
3350
152c5ca9 3351 if(OnlyIsolated())
2bb7ac98 3352 {
3353 Int_t n=0; Int_t nfrac = 0; Bool_t isolated = kFALSE; Float_t coneptsum = 0;
3354 GetIsolationCut()->MakeIsolationCut(bgTracks,bgCalo,
3355 GetReader(), GetCaloPID(),
3356 kFALSE, aodParticle, "",
3357 n,nfrac,coneptsum, isolated);
3358
3359 //printf("AliAnaParticleHadronCorrelation::MakeChargedMixCorrelation() - Isolated? %d - cone %f, ptthres %f",
3360 // isolated,GetIsolationCut()->GetConeSize(),GetIsolationCut()->GetPtThreshold());
3361 //if(bgTracks)printf(" - n track %d", bgTracks->GetEntriesFast());
3362 //printf("\n");
3363
3364 if(!isolated) continue ;
3365 }
7ed3a248 3366 }
3367
2e876d85 3368 fhEventMixBin->Fill(eventBin);
029dea5a 3369
2e876d85 3370 Int_t nTracks=bgTracks->GetEntriesFast();
3371 //printf("\t Read Pool event %d, nTracks %d\n",ev,nTracks);
3372
d0b625bc 3373 //Check if it is leading if mixed event
3374 if(fMakeNearSideLeading || fMakeAbsoluteLeading)
3375 {
3376 Bool_t leading = kTRUE;
3377 for(Int_t jlead = 0;jlead <nTracks; jlead++ )
3378 {
3379 AliAODPWG4Particle *track = (AliAODPWG4Particle*) bgTracks->At(jlead) ;
3380
3381 ptAssoc = track->Pt();
3382 phiAssoc = track->Phi() ;
3383
3384 if(phiAssoc < 0) phiAssoc+=TMath::TwoPi();
d0b625bc 3385 if (fMakeNearSideLeading)
3386 {
3387 if(ptAssoc > ptTrig && TMath::Abs(phiAssoc-phiTrig) < TMath::PiOver2())
3388 {
3389 leading = kFALSE;
3390 break;
3391 }
3392 }
3393 //jump out this event if there is any other particle with pt larger than trigger
3394 else if(fMakeAbsoluteLeading)
3395 {
3396 if(ptAssoc > ptTrig)
3397 {
3398 leading = kFALSE;
d0b625bc 3399 break;
3400 }
3401 }
3402 }
2bb7ac98 3403
3404 if(fFillNeutralEventMixPool && bgCalo)
3405 {
3406 Int_t nClusters=bgCalo->GetEntriesFast();
3407 TLorentzVector mom ;
3408 for(Int_t jlead = 0;jlead <nClusters; jlead++ )
3409 {
152c5ca9 3410 AliAODPWG4Particle *cluster= (AliAODPWG4Particle*) bgCalo->At(jlead) ;
2bb7ac98 3411
152c5ca9 3412 ptAssoc = cluster->Pt();
3413 phiAssoc = cluster->Phi() ;
2bb7ac98 3414
3415 if(phiAssoc < 0) phiAssoc+=TMath::TwoPi();
3416 if (fMakeNearSideLeading)
3417 {
3418 if(ptAssoc > ptTrig && TMath::Abs(phiAssoc-phiTrig) < TMath::PiOver2())
3419 {
3420 leading = kFALSE;
3421 break;
3422 }
3423 }
3424 //jump out this event if there is any other particle with pt larger than trigger
3425 else if(fMakeAbsoluteLeading)
3426 {
3427 if(ptAssoc > ptTrig)
3428 {
3429 leading = kFALSE;
3430 break;
3431 }
3432 }
3433 }
3434 }
3435
d0b625bc 3436 if(!leading) continue; // not leading, check the next event in pool
2bb7ac98 3437
d0b625bc 3438 }
3439
7d306daf 3440 fhPtLeadingMixed ->Fill(ptTrig);
ca17b39f 3441 fhPhiLeadingMixed ->Fill(ptTrig, phiTrig);
3442 fhEtaLeadingMixed ->Fill(ptTrig, etaTrig);
d0b625bc 3443 fhPtLeadingMixedBin->Fill(ptTrig,eventBin);
7d306daf 3444 if(fCorrelVzBin)fhPtLeadingMixedVzBin->Fill(ptTrig, GetEventVzBin());
d0b625bc 3445
029dea5a 3446 for(Int_t j1 = 0;j1 <nTracks; j1++ )
3447 {
3448 AliAODPWG4Particle *track = (AliAODPWG4Particle*) bgTracks->At(j1) ;
3449
3450 if(!track) continue;
3451
3452 ptAssoc = track->Pt();
3453 etaAssoc = track->Eta();
3454 phiAssoc = track->Phi() ;
3455 if(phiAssoc < 0) phiAssoc+=TMath::TwoPi();
2e876d85 3456
029dea5a 3457 if(IsFiducialCutOn())
3458 {
3459 Bool_t in = GetFiducialCut()->IsInFiducialCut(*aodParticle->Momentum(),"CTS") ;
3460 if(!in) continue ;
3461 }
3462
3463 deltaPhi = phiTrig-phiAssoc;
3464 if(deltaPhi < -TMath::PiOver2()) deltaPhi+=TMath::TwoPi();
3465 if(deltaPhi > 3*TMath::PiOver2()) deltaPhi-=TMath::TwoPi();
3466 deltaEta = etaTrig-etaAssoc;
3467
3468 if(GetDebug()>0)
3469 printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation(): deltaPhi= %f, deltaEta=%f\n",deltaPhi, deltaEta);
3470
3471 // Set the pt associated bin for the defined bins
3472 Int_t assocBin = -1;
3473 for(Int_t i = 0 ; i < fNAssocPtBins ; i++)
3474 {
3475 if(ptAssoc > fAssocPtBinLimit[i] && ptAssoc < fAssocPtBinLimit[i+1]) assocBin= i;
3476 }
3477
8cc41381 3478 // Assign to the histogram array a bin corresponding to a combination of pTa and vz bins
7d306daf 3479 Int_t nz = 1;
3480 Int_t vz = 0;
3481
3482 if(fCorrelVzBin)
3483 {
3484 nz = GetNZvertBin();
3485 vz = GetEventVzBin();
3486 }
3487
3488 Int_t bin = assocBin*nz+vz;
8cc41381 3489
029dea5a 3490 fhMixDeltaPhiCharged ->Fill(ptTrig, deltaPhi);
3491 fhMixDeltaPhiDeltaEtaCharged->Fill(deltaPhi, deltaEta);
3492
08f220c8 3493 fhMixDeltaPhiCharged ->Fill(ptTrig, deltaPhi);
3494 fhMixDeltaPhiDeltaEtaCharged->Fill(deltaPhi, deltaEta);
3495
3496 xE =-ptAssoc/ptTrig*TMath::Cos(deltaPhi); // -(px*pxTrig+py*pyTrig)/(ptTrig*ptTrig);
3497 //if(xE <0.)xE =-xE;
3498 if(xE > 0 ) hbpXE = TMath::Log(1./xE);
3499 else hbpXE =-100;
3500
18838011 3501 if ( (deltaPhi > fDeltaPhiMinCut) && (deltaPhi < fDeltaPhiMaxCut) )
08f220c8 3502 {
7d306daf 3503 fhMixXECharged->Fill(ptTrig,xE);
3504 fhMixHbpXECharged->Fill(ptTrig,hbpXE);
08f220c8 3505 }
18838011 3506
3507 if ( (deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < fUeDeltaPhiMaxCut) )
3508 {
3509 //Underlying event region
3510 Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
3511 Double_t uexE = -(ptAssoc/ptTrig)*TMath::Cos(randomphi);
3512
3513 if(uexE < 0.) uexE = -uexE;
3514
3515 fhMixXEUeCharged->Fill(ptTrig,uexE);
3516 }
3517
8cc41381 3518 if(bin < 0) continue ; // this pt bin was not considered
029dea5a 3519
2013f378 3520 if(TMath::Abs(deltaEta) > 0.8)
8cc41381 3521 fhMixDeltaPhiChargedAssocPtBinDEta08 [bin]->Fill(ptTrig, deltaPhi);
03a96401 3522 if(TMath::Abs(deltaEta) < 0.01)
8cc41381 3523 fhMixDeltaPhiChargedAssocPtBinDEta0 [bin]->Fill(ptTrig, deltaPhi);
2013f378 3524
8cc41381 3525 fhMixDeltaPhiChargedAssocPtBin [bin]->Fill(ptTrig, deltaPhi);
3526 fhMixDeltaPhiDeltaEtaChargedAssocPtBin[bin]->Fill(deltaPhi, deltaEta);
029dea5a 3527
3528 } // track loop
3529 } // mixed event loop
3530}
3531
3532
05d0d05d 3533//________________________________________________________________________________________________________________
045396c8 3534Bool_t AliAnaParticleHadronCorrelation::MakeNeutralCorrelation(AliAODPWG4ParticleCorrelation * const aodParticle,
22ad7981 3535 const TObjArray* pi0list, Bool_t bFillHisto)
e09cf5ef 3536{
3537 // Neutral Pion Correlation Analysis
907b38cd 3538 if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::MakeNeutralCorrelation() - Make trigger particle - pi0 correlation, %d pi0's \n",
3539 pi0list->GetEntriesFast());
e09cf5ef 3540
3541 Int_t evtIndex11 = 0 ;
3542 Int_t evtIndex12 = 0 ;
04f7a616 3543 if (GetMixedEvent())
3544 {
e09cf5ef 3545 evtIndex11 = GetMixedEvent()->EventIndexForCaloCluster(aodParticle->GetCaloLabel(0)) ;
3546 evtIndex12 = GetMixedEvent()->EventIndexForCaloCluster(aodParticle->GetCaloLabel(1)) ;
3547 }
3548
907b38cd 3549 Float_t pt = -100. ;
4b58c519 3550// Float_t zT = -100. ;
907b38cd 3551 Float_t phi = -100. ;
3552 Float_t eta = -100. ;
3553 Float_t xE = -100. ;
3554 Float_t hbpXE= -100. ;
37bd27d6 3555 //Float_t hbpZT= -100. ;
907b38cd 3556
3557 Float_t ptTrig = aodParticle->Pt();
3558 Float_t phiTrig = aodParticle->Phi();
3559 Float_t etaTrig = aodParticle->Eta();
3560 Float_t deltaPhi= -100. ;
3f150b4b 3561
045396c8 3562 TLorentzVector photonMom ;
3563
907b38cd 3564 // In case of pi0/eta trigger, we may want to check their decay correlation,
3565 // get their decay children
3566 TLorentzVector decayMom1;
3567 TLorentzVector decayMom2;
3568 Bool_t decayFound = kFALSE;
3569 if(fPi0Trigger && bFillHisto) decayFound = GetDecayPhotonMomentum(aodParticle,decayMom1, decayMom2);
e09cf5ef 3570
907b38cd 3571 TObjArray * refpi0 = 0x0;
3572 Int_t nrefs = 0;
e09cf5ef 3573
3574 //Loop on stored AOD pi0
547c2f01 3575
e09cf5ef 3576 Int_t naod = pi0list->GetEntriesFast();
045396c8 3577 if(GetDebug() > 0)
3578 printf("AliAnaParticleHadronCorrelation::MakeNeutralCorrelationFillHistograms() - aod branch entries %d\n", naod);
547c2f01 3579
3580 for(Int_t iaod = 0; iaod < naod ; iaod++)
3581 {
e09cf5ef 3582 AliAODPWG4Particle* pi0 = (AliAODPWG4Particle*) (pi0list->At(iaod));
3583
3584 Int_t evtIndex2 = 0 ;
3585 Int_t evtIndex3 = 0 ;
04f7a616 3586 if (GetMixedEvent())
3587 {
e09cf5ef 3588 evtIndex2 = GetMixedEvent()->EventIndexForCaloCluster(pi0->GetCaloLabel(0)) ;
3589 evtIndex3 = GetMixedEvent()->EventIndexForCaloCluster(pi0->GetCaloLabel(1)) ;
3590
045396c8 3591 if (evtIndex11 == evtIndex2 || evtIndex12 == evtIndex2 ||
3592 evtIndex11 == evtIndex3 || evtIndex12 == evtIndex3) // trigger and pi0 are not from different events
e09cf5ef 3593 continue ;
3594 }
907b38cd 3595
e09cf5ef 3596 pt = pi0->Pt();
907b38cd 3597
66e64043 3598 if(pt < fMinAssocPt || pt > fMaxAssocPt) continue ;
3599
907b38cd 3600 //jump out this event if near side associated particle pt larger than trigger
3601 if (fMakeNearSideLeading)
3602 {
3603 if(pt > ptTrig && TMath::Abs(phi-phiTrig) < TMath::PiOver2()) return kFALSE;
3604 }
3605 //jump out this event if there is any other particle with pt larger than trigger
3606 else if(fMakeAbsoluteLeading)
3607 {
3608 if(pt > ptTrig) return kFALSE;
3609 }
e09cf5ef 3610
547c2f01 3611 if(bFillHisto)
3612 {
e09cf5ef 3613 phi = pi0->Phi() ;
3614 eta = pi0->Eta() ;
907b38cd 3615
3616 FillNeutralAngularCorrelationHistograms(pt, ptTrig, phi, phiTrig, deltaPhi, eta, etaTrig);
3617
4b58c519 3618 //zT = pt/ptTrig ;
3f150b4b 3619 xE =-pt/ptTrig*TMath::Cos(deltaPhi); // -(px*pxTrig+py*pyTrig)/(ptTrig*ptTrig);
3620
66e64043 3621 //if(xE <0.)xE =-xE;
e09cf5ef 3622
3f150b4b 3623 hbpXE = -100;
37bd27d6 3624 //hbpZT = -100;
907b38cd 3625
f16872ec 3626 if(xE > 0 ) hbpXE = TMath::Log(1./xE);
37bd27d6 3627 //if(zT > 0 ) hbpZT = TMath::Log(1./zT);
e09cf5ef 3628
907b38cd 3629 if(fPi0Trigger && decayFound)
3630 FillDecayPhotonCorrelationHistograms(pt, phi, decayMom1,decayMom2,kFALSE) ;
e09cf5ef 3631
3632 //delta phi cut for correlation
547c2f01 3633 if( (deltaPhi > fDeltaPhiMinCut) && ( deltaPhi < fDeltaPhiMaxCut) )
3634 {
045396c8 3635 fhDeltaPhiNeutralPt->Fill(pt,deltaPhi);
3f150b4b 3636 fhXENeutral ->Fill(ptTrig,xE);
3637 fhPtHbpXENeutral ->Fill(ptTrig,hbpXE);
e09cf5ef 3638 }
907b38cd 3639 else if ( (deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < fUeDeltaPhiMaxCut) )
547c2f01 3640 {
045396c8 3641 fhDeltaPhiUeNeutralPt->Fill(pt,deltaPhi);
3f150b4b 3642 fhXEUeNeutral ->Fill(ptTrig,xE);
3643 fhPtHbpXEUeNeutral ->Fill(ptTrig,hbpXE);
e09cf5ef 3644 }
907b38cd 3645
e09cf5ef 3646 //several UE calculation
8cc41381 3647 if(fMakeSeveralUE) FillChargedUnderlyingEventSidesHistograms(ptTrig,pt,deltaPhi);
907b38cd 3648
e09cf5ef 3649 }
547c2f01 3650 else
3651 {
e09cf5ef 3652 nrefs++;
547c2f01 3653 if(nrefs==1)
3654 {
e09cf5ef 3655 refpi0 = new TObjArray(0);
3656 refpi0->SetName(GetAODObjArrayName()+"Pi0s");
3657 refpi0->SetOwner(kFALSE);
3658 }
3659 refpi0->Add(pi0);
3660 }//put references in trigger AOD
045396c8 3661
3662 if(GetDebug() > 2 )
3663 printf("AliAnaParticleHadronCorrelation::MakeNeutralCorrelation() - Selected neutral for momentum imbalance: pt %2.2f, phi %2.2f, eta %2.2f \n",pt,phi,eta);
3664
3665 }//loop
3666
3667 return kTRUE;
3668}
3669
05d0d05d 3670//_________________________________________________________________________________________________________
045396c8 3671void AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation(AliAODPWG4ParticleCorrelation *aodParticle)
d07cdf32 3672{
045396c8 3673 // Charged Hadron Correlation Analysis with MC information
a426f453 3674
d07cdf32 3675 if ( GetDebug() > 1 )
3676 AliInfo("Make trigger particle - charged hadron correlation in AOD MC level");
045396c8 3677
3678 AliStack * stack = 0x0 ;
d07cdf32 3679 TParticle * primary = 0x0 ;
045396c8 3680 TClonesArray * mcparticles = 0x0 ;
d07cdf32 3681 AliAODMCParticle * aodprimary = 0x0 ;
045396c8 3682
3683 Double_t eprim = 0 ;
3684 Double_t ptprim = 0 ;
3685 Double_t phiprim = 0 ;
3686 Double_t etaprim = 0 ;
d07cdf32 3687 Int_t nTracks = 0 ;
045396c8 3688 Int_t iParticle = 0 ;
a9023d3b 3689
d07cdf32 3690 Bool_t lead = kFALSE;
045396c8 3691
3692 Int_t label= aodParticle->GetLabel();
d07cdf32 3693 if( label < 0 )
a426f453 3694 {
d07cdf32 3695 if( GetDebug() > 0 ) AliInfo(Form(" *** bad label ***: label %d", label));
045396c8 3696 return;
d07cdf32 3697 }
045396c8 3698
d07cdf32 3699 if( GetReader()->ReadStack() )
547c2f01 3700 {
045396c8 3701 stack = GetMCStack() ;
d07cdf32 3702 if(!stack)
2e876d85 3703 {
d07cdf32 3704 AliFatal("Stack not available, is the MC handler called? STOP");
3705 return;
045396c8 3706 }
3707
d07cdf32 3708 //nTracks = stack->GetNtrack() ;
3709 nTracks = stack->GetNprimary();
3710 if( label >= stack->GetNtrack() )
547c2f01 3711 {
d07cdf32 3712 if(GetDebug() > 2)
3713 AliInfo(Form("*** large label ***: label %d, n tracks %d", label, stack->GetNtrack()));
045396c8 3714 return ;
3715 }
547c2f01 3716
045396c8 3717 primary = stack->Particle(label);
d07cdf32 3718 if ( !primary )
547c2f01 3719 {
d07cdf32 3720 AliInfo(Form(" *** no primary ***: label %d", label));
045396c8 3721 return;
3722 }
3723
d07cdf32 3724 eprim = primary->Energy();
3725 ptprim = primary->Pt();
3726 phiprim = primary->Phi();
3727 etaprim = primary->Eta();
3728
3729 if(ptprim < 0.01 || eprim < 0.01) return ;
3730
3731 for (iParticle = 0 ; iParticle < nTracks ; iParticle++)
547c2f01 3732 {
d07cdf32 3733 TParticle * particle = stack->Particle(iParticle);
3734 TLorentzVector momentum;
2747966a 3735
d07cdf32 3736 //keep only final state particles
3737 if( particle->GetStatusCode() != 1 ) continue ;
a9023d3b 3738
d07cdf32 3739 if ( particle->Pt() < GetReader()->GetCTSPtMin()) continue;
3740
3741 //---------- Charged particles ----------------------
3742 Int_t pdg = particle->GetPdgCode();
3743 Int_t charge = (Int_t) TDatabasePDG::Instance()->GetParticle(pdg)->Charge();
3744 if(charge == 0) continue;
3745
3746 particle->Momentum(momentum);
3747
3748 //Particles in CTS acceptance, make sure to use the same selection as in the reader
3749 Bool_t inCTS = GetReader()->GetFiducialCut()->IsInFiducialCut(momentum,"CTS");
3750 //printf("Accepted? %d; pt %2.2f, eta %2.2f, phi %2.2f\n",inCTS,momentum.Pt(),momentum.Eta(),momentum.Phi()*TMath::RadToDeg());
3751 if( !inCTS ) continue;
3752
3753 // Remove conversions
3754 if ( TMath::Abs(pdg) == 11 && stack->Particle(particle->GetFirstMother())->GetPdgCode() == 22 ) continue ;
3755
3756 if ( label == iParticle ) continue; // avoid trigger particle
3757
3758 lead = FillChargedMCCorrelationHistograms(particle->Pt(),particle->Phi(),particle->Eta(),ptprim,phiprim,etaprim);
3759 if ( !lead ) return;
3760
3761 } //track loop
3762
045396c8 3763 } //ESD MC
a9023d3b 3764
d07cdf32 3765 else if( GetReader()->ReadAODMCParticles() )
547c2f01 3766 {
045396c8 3767 //Get the list of MC particles
d07cdf32 3768 mcparticles = GetReader()->GetAODMCParticles();
3769 if( !mcparticles ) return;
a9023d3b 3770
d07cdf32 3771 nTracks = mcparticles->GetEntriesFast() ;
3772
3773 if( label >= nTracks )
547c2f01 3774 {
d07cdf32 3775 if(GetDebug() > 2)
3776 AliInfo(Form(" *** large label ***: label %d, n tracks %d", label,nTracks));
045396c8 3777 return;
3778 }
a9023d3b 3779
045396c8 3780 //Get the particle
d07cdf32 3781 aodprimary = (AliAODMCParticle*) mcparticles->At(label);
3782 if( !aodprimary )
547c2f01 3783 {
d07cdf32 3784 AliInfo(Form(" *** no AOD primary ***: label %d", label));
045396c8 3785 return;
3786 }
a9023d3b 3787
d07cdf32 3788 ptprim = aodprimary->Pt();
3789 phiprim = aodprimary->Phi();
3790 etaprim = aodprimary->Eta();
3791 eprim = aodprimary->E();
3792
3793 if(ptprim < 0.01 || eprim < 0.01) return ;
3794
3795 for (iParticle = 0; iParticle < nTracks; iParticle++)
547c2f01 3796 {
d07cdf32 3797 AliAODMCParticle *part = (AliAODMCParticle*) mcparticles->At(iParticle);
a9023d3b 3798
d07cdf32 3799 if (!part->IsPhysicalPrimary() ) continue; // same as part->GetStatus() !=1
2747966a 3800
d07cdf32 3801 if ( part->Charge() == 0 ) continue;
a9023d3b 3802
d07cdf32 3803 if ( part->Pt() < GetReader()->GetCTSPtMin()) continue;
3804
3805 TLorentzVector momentum(part->Px(),part->Py(),part->Pz(),part->E());
3806
3807 //Particles in CTS acceptance, make sure to use the same selection as in the reader
3808 Bool_t inCTS = GetReader()->GetFiducialCut()->IsInFiducialCut(momentum,"CTS");
3809 //printf("Accepted? %d; pt %2.2f, eta %2.2f, phi %2.2f\n",inCTS,momentum.Pt(),momentum.Eta(),momentum.Phi()*TMath::RadToDeg());
3810 if( !inCTS ) continue;
3811
3812 // Remove conversions
3813 Int_t indexmother = part->GetMother();
3814 if ( indexmother > -1 )
a9023d3b 3815 {
d07cdf32 3816 Int_t pdg = part->GetPdgCode();
3817 Int_t mPdg = ((AliAODMCParticle*) mcparticles->At(indexmother)) ->GetPdgCode();
3818 if (TMath::Abs(pdg) == 11 && mPdg == 22) continue;
a9023d3b 3819 }
d07cdf32 3820
3821 if ( label == iParticle ) continue; // avoid trigger particle
3822
3823 lead = FillChargedMCCorrelationHistograms(part->Pt(),part->Phi(),part->Eta(),ptprim,phiprim,etaprim);
3824 if ( !lead ) return;
3825
3826 } //MC particle loop
045396c8 3827 }// AOD MC
d07cdf32 3828
3829 // Leading MC particle histograms
3830 if (lead)
3831 {
3832 fhMCPtLeading ->Fill(ptprim);
3833 fhMCPhiLeading->Fill(ptprim,phiprim);
3834 fhMCEtaLeading->Fill(ptprim,etaprim);
3835 }
e09cf5ef 3836}
045396c8 3837
05d0d05d 3838//_____________________________________________________________________
3839void AliAnaParticleHadronCorrelation::Print(const Option_t * opt) const
3840{
3841
3842 //Print some relevant parameters set for the analysis
3843 if(! opt)
3844 return;
3845
3846 printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
745913ae 3847 AliAnaCaloTrackCorrBaseClass::Print(" ");
66e64043 3848 printf("Pt trigger > %3.2f\n", fMinTriggerPt) ;
3849 printf("Pt associated hadron < %3.2f\n", fMaxAssocPt) ;
3850 printf("Pt associated hadron > %3.2f\n", fMinAssocPt) ;
3851 printf("Phi trigger particle-Hadron < %3.2f\n", fDeltaPhiMaxCut) ;
3852 printf("Phi trigger particle-Hadron > %3.2f\n", fDeltaPhiMinCut) ;
3853 printf("Phi trigger particle-UeHadron < %3.2f\n", fUeDeltaPhiMaxCut) ;
3854 printf("Phi trigger particle-UeHadron > %3.2f\n", fUeDeltaPhiMinCut) ;
3855 printf("Isolated Trigger? %d\n" , fSelectIsolated) ;
3856 printf("Several UE? %d\n" , fMakeSeveralUE) ;
3857 printf("Name of AOD Pi0 Branch %s \n", fPi0AODBranchName.Data());
05d0d05d 3858 printf("Do Decay-hadron correlation ? %d\n", fPi0Trigger) ;
3f150b4b 3859 printf("Select absolute leading for cluster triggers ? %d or Near Side %d\n",
3860 fMakeAbsoluteLeading, fMakeNearSideLeading) ;
05d0d05d 3861 printf("Trigger pt bins %d\n", fNAssocPtBins) ;
3862 for (Int_t ibin = 0; ibin<fNAssocPtBins; ibin++) {
3863 printf("\t bin %d = [%2.1f,%2.1f]\n", ibin, fAssocPtBinLimit[ibin], fAssocPtBinLimit[ibin+1]) ;
3864 }
3865
3866}
3867
3868//____________________________________________________________
3869void AliAnaParticleHadronCorrelation::SetNAssocPtBins(Int_t n)
045396c8 3870{
3871 // Set number of bins
e09cf5ef 3872
05d0d05d 3873 fNAssocPtBins = n ;
3874
3875
f85f4afb 3876 if(n < 20 && n > 0)
045396c8 3877 {
05d0d05d 3878 fNAssocPtBins = n ;
045396c8 3879 }
3880 else
3881 {
f85f4afb 3882 printf("n = larger than 19 or too small, set to 19 \n");
3883 fNAssocPtBins = 19;
045396c8 3884 }
3885}
e09cf5ef 3886
05d0d05d 3887//______________________________________________________________________________
3888void AliAnaParticleHadronCorrelation::SetAssocPtBinLimit(Int_t ibin, Float_t pt)
045396c8 3889{
3890 // Set the list of limits for the trigger pt bins
3891
05d0d05d 3892 if(ibin <= fNAssocPtBins || ibin >= 0)
045396c8 3893 {
05d0d05d 3894 fAssocPtBinLimit[ibin] = pt ;
045396c8 3895 }
2e876d85 3896 else
3897 {
05d0d05d 3898 printf("AliAnaParticleHadronCorrelation::SetAssocPtBinLimit() - bin number too large %d > %d or small, nothing done\n", ibin, fNAssocPtBins) ;
045396c8 3899 }
3900}
3901