1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 //_________________________________________________________________________
17 // Class for analysis of particle isolation
18 // Input is selected particles put in AOD branch (AliAODPWG4ParticleCorrelation)
20 // Class created from old AliPHOSGammaJet
21 // (see AliRoot versions previous Release 4-09)
23 // -- Author: Gustavo Conesa (LNF-INFN)
25 //////////////////////////////////////////////////////////////////////////////
27 // --- ROOT system ---
28 #include <TClonesArray.h>
30 #include <TObjString.h>
34 #include "TParticle.h"
35 #include "TDatabasePDG.h"
37 // --- Analysis system ---
38 #include "AliAnaParticleIsolation.h"
39 #include "AliCaloTrackReader.h"
41 #include "AliIsolationCut.h"
42 #include "AliFiducialCut.h"
43 #include "AliMCAnalysisUtils.h"
44 #include "AliNeutralMesonSelection.h"
45 #include "AliAODMCParticle.h"
46 #include "AliAODPWG4ParticleCorrelation.h"
47 #include "AliMCAnalysisUtils.h"
48 #include "AliVTrack.h"
49 #include "AliVCluster.h"
50 #include "AliESDEvent.h"
51 #include "AliAODEvent.h"
53 #include "AliEMCALGeometry.h"
54 #include "AliPHOSGeoUtils.h"
56 ClassImp(AliAnaParticleIsolation)
58 //______________________________________________________________________________
59 AliAnaParticleIsolation::AliAnaParticleIsolation() :
60 AliAnaCaloTrackCorrBaseClass(),
61 fIsoDetector(-1), fIsoDetectorString(""),
62 fReMakeIC(0), fMakeSeveralIC(0),
63 fFillTMHisto(0), fFillSSHisto(1),
64 fFillUEBandSubtractHistograms(1), fFillCellHistograms(0),
65 fFillTaggedDecayHistograms(0),
66 fNDecayBits(0), fDecayBits(),
67 fFillNLMHistograms(0),
68 fLeadingOnly(0), fCheckLeadingWithNeutralClusters(0),
69 fSelectPrimariesInCone(0), fMakePrimaryPi0DecayStudy(0),
70 fFillBackgroundBinHistograms(0), fNBkgBin(0),
71 fFillPtTrigBinHistograms(0), fNPtTrigBin(0),
72 fMinCellsAngleOverlap(0),
74 fNCones(0), fNPtThresFrac(0),
75 fConeSizes(), fPtThresholds(),
76 fPtFractions(), fSumPtThresholds(),
77 fMomentum(), fMomIso(),
78 fMomDaugh1(), fMomDaugh2(),
81 fhEIso(0), fhPtIso(0),
82 fhPtCentralityIso(0), fhPtEventPlaneIso(0),
84 fhPhiIso(0), fhEtaIso(0), fhEtaPhiIso(0),
86 fhENoIso(0), fhPtNoIso(0), fhPtNLocMaxNoIso(0),
88 fhPtClusterInCone(0), fhPtCellInCone(0), fhPtTrackInCone(0),
89 fhPtTrackInConeOtherBC(0), fhPtTrackInConeOtherBCPileUpSPD(0),
90 fhPtTrackInConeBC0(0), fhPtTrackInConeVtxBC0(0),
91 fhPtTrackInConeBC0PileUpSPD(0),
92 fhPtInConePileUp(), fhPtInConeCent(0),
93 fhPerpConeSumPt(0), fhPtInPerpCone(0),
94 fhEtaPhiInConeCluster(0), fhEtaPhiCluster(0),
95 fhEtaPhiInConeTrack(0), fhEtaPhiTrack(0),
96 fhEtaBandCluster(0), fhPhiBandCluster(0),
97 fhEtaBandTrack(0), fhPhiBandTrack(0),
98 fhEtaBandCell(0), fhPhiBandCell(0),
99 fhConePtLead(0), fhConePtLeadCluster(0), fhConePtLeadTrack(0),
100 fhConePtLeadClustervsTrack(0), fhConePtLeadClusterTrackFrac(0),
101 fhConeSumPt(0), fhConeSumPtCellTrack(0),
102 fhConeSumPtCell(0), fhConeSumPtCluster(0), fhConeSumPtTrack(0),
103 fhConeSumPtEtaBandUECluster(0), fhConeSumPtPhiBandUECluster(0),
104 fhConeSumPtEtaBandUETrack(0), fhConeSumPtPhiBandUETrack(0),
105 fhConeSumPtEtaBandUECell(0), fhConeSumPtPhiBandUECell(0),
106 fhConeSumPtTrigEtaPhi(0),
107 fhConeSumPtCellTrackTrigEtaPhi(0),
108 fhConeSumPtEtaBandUEClusterTrigEtaPhi(0), fhConeSumPtPhiBandUEClusterTrigEtaPhi(0),
109 fhConeSumPtEtaBandUETrackTrigEtaPhi(0), fhConeSumPtPhiBandUETrackTrigEtaPhi(0),
110 fhConeSumPtEtaBandUECellTrigEtaPhi(0), fhConeSumPtPhiBandUECellTrigEtaPhi(0),
111 fhConeSumPtEtaUESub(0), fhConeSumPtPhiUESub(0),
112 fhConeSumPtEtaUESubTrigEtaPhi(0), fhConeSumPtPhiUESubTrigEtaPhi(0),
113 fhConeSumPtEtaUESubTrackCell(0), fhConeSumPtPhiUESubTrackCell(0),
114 fhConeSumPtEtaUESubTrackCellTrigEtaPhi(0), fhConeSumPtPhiUESubTrackCellTrigEtaPhi(0),
115 fhConeSumPtEtaUESubCluster(0), fhConeSumPtPhiUESubCluster(0),
116 fhConeSumPtEtaUESubClusterTrigEtaPhi(0), fhConeSumPtPhiUESubClusterTrigEtaPhi(0),
117 fhConeSumPtEtaUESubCell(0), fhConeSumPtPhiUESubCell(0),
118 fhConeSumPtEtaUESubCellTrigEtaPhi(0), fhConeSumPtPhiUESubCellTrigEtaPhi(0),
119 fhConeSumPtEtaUESubTrack(0), fhConeSumPtPhiUESubTrack(0),
120 fhConeSumPtEtaUESubTrackTrigEtaPhi(0), fhConeSumPtPhiUESubTrackTrigEtaPhi(0),
121 fhFractionTrackOutConeEta(0), fhFractionTrackOutConeEtaTrigEtaPhi(0),
122 fhFractionClusterOutConeEta(0), fhFractionClusterOutConeEtaTrigEtaPhi(0),
123 fhFractionClusterOutConePhi(0), fhFractionClusterOutConePhiTrigEtaPhi(0),
124 fhFractionCellOutConeEta(0), fhFractionCellOutConeEtaTrigEtaPhi(0),
125 fhFractionCellOutConePhi(0), fhFractionCellOutConePhiTrigEtaPhi(0),
126 fhConeSumPtClustervsTrack(0), fhConeSumPtClusterTrackFrac(0),
127 fhConeSumPtEtaUESubClustervsTrack(0), fhConeSumPtPhiUESubClustervsTrack(0),
128 fhConeSumPtCellvsTrack(0),
129 fhConeSumPtEtaUESubCellvsTrack(0), fhConeSumPtPhiUESubCellvsTrack(0),
130 fhEtaBandClustervsTrack(0), fhPhiBandClustervsTrack(0),
131 fhEtaBandNormClustervsTrack(0), fhPhiBandNormClustervsTrack(0),
132 fhEtaBandCellvsTrack(0), fhPhiBandCellvsTrack(0),
133 fhEtaBandNormCellvsTrack(0), fhPhiBandNormCellvsTrack(0),
134 fhConeSumPtSubvsConeSumPtTotPhiTrack(0), fhConeSumPtSubNormvsConeSumPtTotPhiTrack(0),
135 fhConeSumPtSubvsConeSumPtTotEtaTrack(0), fhConeSumPtSubNormvsConeSumPtTotEtaTrack(0),
136 fhConeSumPtSubvsConeSumPtTotPhiCluster(0), fhConeSumPtSubNormvsConeSumPtTotPhiCluster(0),
137 fhConeSumPtSubvsConeSumPtTotEtaCluster(0), fhConeSumPtSubNormvsConeSumPtTotEtaCluster(0),
138 fhConeSumPtSubvsConeSumPtTotPhiCell(0), fhConeSumPtSubNormvsConeSumPtTotPhiCell(0),
139 fhConeSumPtSubvsConeSumPtTotEtaCell(0), fhConeSumPtSubNormvsConeSumPtTotEtaCell(0),
140 fhConeSumPtVSUETracksEtaBand(0), fhConeSumPtVSUETracksPhiBand(0),
141 fhConeSumPtVSUEClusterEtaBand(0), fhConeSumPtVSUEClusterPhiBand(0),
142 fhPtPrimMCPi0DecayPairOutOfCone(0),
143 fhPtPrimMCPi0DecayPairOutOfAcceptance(0),
144 fhPtPrimMCPi0DecayPairOutOfAcceptanceNoOverlap(0),
145 fhPtPrimMCPi0DecayPairAcceptInConeLowPt(0),
146 fhPtPrimMCPi0DecayPairAcceptInConeLowPtNoOverlap(0),
147 fhPtPrimMCPi0DecayPairAcceptInConeLowPtNoOverlapCaloE(0),
148 fhPtPrimMCPi0DecayPairNoOverlap(0),
149 fhPtPrimMCPi0DecayIsoPairOutOfCone(0),
150 fhPtPrimMCPi0DecayIsoPairOutOfAcceptance(0),
151 fhPtPrimMCPi0DecayIsoPairOutOfAcceptanceNoOverlap(0),
152 fhPtPrimMCPi0DecayIsoPairAcceptInConeLowPt(0),
153 fhPtPrimMCPi0DecayIsoPairAcceptInConeLowPtNoOverlap(0),
154 fhPtPrimMCPi0DecayIsoPairAcceptInConeLowPtNoOverlapCaloE(0),
155 fhPtPrimMCPi0DecayIsoPairNoOverlap(0),
156 fhPtPrimMCPi0Overlap(0), fhPtPrimMCPi0IsoOverlap(0),
157 fhPtLeadConeBin(0), fhSumPtConeBin(0),
158 fhPtLeadConeBinMC(0), fhSumPtConeBinMC(0),
159 fhPtLeadConeBinDecay(0), fhSumPtConeBinDecay(0),
160 fhPtLeadConeBinLambda0(0), fhSumPtConeBinLambda0(0),
161 fhPtLeadConeBinLambda0MC(0), fhSumPtConeBinLambda0MC(0),
162 fhPtTrigBinPtLeadCone(0), fhPtTrigBinSumPtCone(0),
163 fhPtTrigBinPtLeadConeMC(0), fhPtTrigBinSumPtConeMC(0),
164 fhPtTrigBinPtLeadConeDecay(0), fhPtTrigBinSumPtConeDecay(0),
165 fhPtTrigBinLambda0vsPtLeadCone(0), fhPtTrigBinLambda0vsSumPtCone(0),
166 fhPtTrigBinLambda0vsPtLeadConeMC(0), fhPtTrigBinLambda0vsSumPtConeMC(0),
167 // Number of local maxima in cluster
169 fhELambda0LocMax1(), fhELambda1LocMax1(),
170 fhELambda0LocMax2(), fhELambda1LocMax2(),
171 fhELambda0LocMaxN(), fhELambda1LocMaxN(),
173 fhEIsoPileUp(), fhPtIsoPileUp(),
174 fhENoIsoPileUp(), fhPtNoIsoPileUp(),
175 fhTimeENoCut(0), fhTimeESPD(0), fhTimeESPDMulti(0),
176 fhTimeNPileUpVertSPD(0), fhTimeNPileUpVertTrack(0),
177 fhTimeNPileUpVertContributors(0),
178 fhTimePileUpMainVertexZDistance(0), fhTimePileUpMainVertexZDiamond(0)
182 //Initialize parameters
185 for(Int_t i = 0; i < 5 ; i++)
189 for(Int_t imc = 0; imc < fgkNmcTypes; imc++)
190 fhSumPtLeadingPtMC[imc][i] = 0 ;
192 for(Int_t j = 0; j < 5 ; j++)
194 fhPtThresIsolated [i][j] = 0 ;
195 fhPtFracIsolated [i][j] = 0 ;
196 fhSumPtIsolated [i][j] = 0 ;
198 fhEtaPhiPtThresIso [i][j] = 0 ;
199 fhEtaPhiPtThresDecayIso [i][j] = 0 ;
200 fhPtPtThresDecayIso [i][j] = 0 ;
202 fhEtaPhiPtFracIso [i][j] = 0 ;
203 fhEtaPhiPtFracDecayIso [i][j] = 0 ;
204 fhPtPtFracDecayIso [i][j] = 0 ;
205 fhPtPtSumDecayIso [i][j] = 0 ;
206 fhPtSumDensityIso [i][j] = 0 ;
207 fhPtSumDensityDecayIso [i][j] = 0 ;
208 fhEtaPhiSumDensityIso [i][j] = 0 ;
209 fhEtaPhiSumDensityDecayIso [i][j] = 0 ;
210 fhPtFracPtSumIso [i][j] = 0 ;
211 fhPtFracPtSumDecayIso [i][j] = 0 ;
212 fhEtaPhiFracPtSumIso [i][j] = 0 ;
213 fhEtaPhiFracPtSumDecayIso [i][j] = 0 ;
215 for(Int_t imc = 0; imc < fgkNmcTypes; imc++)
217 fhPtThresIsolatedMC[imc][i][j] = 0 ;
218 fhPtFracIsolatedMC [imc][i][j] = 0 ;
219 fhSumPtIsolatedMC [imc][i][j] = 0 ;
225 for(Int_t ibit =0; ibit < 4; ibit++)
227 for(Int_t iso =0; iso < 2; iso++)
229 fhPtDecay [iso][ibit] = 0;
230 fhEtaPhiDecay [iso][ibit] = 0;
231 fhPtLambda0Decay[iso][ibit] = 0;
232 for(Int_t imc = 0; imc < fgkNmcTypes; imc++)
233 fhPtDecayMC[iso][ibit][imc] = 0;
237 for(Int_t i = 0; i < 5 ; i++)
239 fPtFractions [i] = 0 ;
240 fPtThresholds [i] = 0 ;
241 fSumPtThresholds[i] = 0 ;
243 fhSumPtLeadingPt [i] = 0 ;
244 fhPtLeadingPt [i] = 0 ;
245 fhPerpSumPtLeadingPt[i] = 0 ;
246 fhPerpPtLeadingPt [i] = 0 ;
249 for(Int_t imc = 0; imc < fgkNmcTypes; imc++)
251 fhPtNoIsoMC [imc] = 0;
253 fhPhiIsoMC [imc] = 0;
254 fhEtaIsoMC [imc] = 0;
255 fhPtLambda0MC[imc][0] = 0;
256 fhPtLambda0MC[imc][1] = 0;
259 for(Int_t i = 0; i < 2 ; i++)
261 fhTrackMatchedDEta[i] = 0 ; fhTrackMatchedDPhi[i] = 0 ; fhTrackMatchedDEtaDPhi [i] = 0 ;
262 fhdEdx [i] = 0 ; fhEOverP [i] = 0 ; fhTrackMatchedMCParticle[i] = 0 ;
263 fhELambda0 [i] = 0 ; fhPtLambda0 [i] = 0 ; //fhELambda1 [i] = 0 ;
264 fhELambda0TRD [i] = 0 ; fhPtLambda0TRD [i] = 0 ; //fhELambda1TRD [i] = 0 ;
266 // Number of local maxima in cluster
268 fhELambda0LocMax1[i] = 0 ; fhELambda1LocMax1[i] = 0 ;
269 fhELambda0LocMax2[i] = 0 ; fhELambda1LocMax2[i] = 0 ;
270 fhELambda0LocMaxN[i] = 0 ; fhELambda1LocMaxN[i] = 0 ;
274 for(Int_t i = 0; i < fgkNmcPrimTypes; i++)
276 fhPtPrimMCiso[i] = 0;
285 for(Int_t i = 0 ; i < 7 ; i++)
287 fhPtInConePileUp[i] = 0 ;
288 fhEIsoPileUp [i] = 0 ;
289 fhPtIsoPileUp [i] = 0 ;
290 fhENoIsoPileUp [i] = 0 ;
291 fhPtNoIsoPileUp [i] = 0 ;
295 //_______________________________________________________________________________________________
296 void AliAnaParticleIsolation::CalculateCaloUEBand(AliAODPWG4ParticleCorrelation * pCandidate,
297 Float_t & etaBandPtSum, Float_t & phiBandPtSum)
299 // Get the clusters pT or sum of pT in phi/eta bands or at 45 degrees from trigger
301 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyCharged ) return ;
303 Float_t conesize = GetIsolationCut()->GetConeSize();
305 //Select the Calorimeter
306 TObjArray * pl = 0x0;
307 if (GetCalorimeter() == kPHOS )
308 pl = GetPHOSClusters();
309 else if (GetCalorimeter() == kEMCAL)
310 pl = GetEMCALClusters();
314 //Get vertex for cluster momentum calculation
315 Double_t vertex[] = {0,0,0} ; //vertex ;
316 if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
317 GetReader()->GetVertex(vertex);
319 Float_t ptTrig = pCandidate->Pt() ;
320 Float_t phiTrig = pCandidate->Phi();
321 Float_t etaTrig = pCandidate->Eta();
323 for(Int_t icluster=0; icluster < pl->GetEntriesFast(); icluster++)
325 AliVCluster* cluster = (AliVCluster *) pl->At(icluster);
329 AliWarning("Cluster not available?");
333 //Do not count the candidate (photon or pi0) or the daughters of the candidate
334 if(cluster->GetID() == pCandidate->GetCaloLabel(0) ||
335 cluster->GetID() == pCandidate->GetCaloLabel(1) ) continue ;
337 //Remove matched clusters to tracks if Neutral and Track info is used
338 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kNeutralAndCharged &&
339 IsTrackMatched(cluster,GetReader()->GetInputEvent())) continue ;
341 cluster->GetMomentum(fMomentum,vertex) ;//Assume that come from vertex in straight line
343 //exclude particles in cone
344 Float_t rad = GetIsolationCut()->Radius(etaTrig, phiTrig, fMomentum.Eta(), fMomentum.Phi());
346 // histo of eta and phi for all clusters
347 fhEtaPhiCluster->Fill(fMomentum.Eta(), fMomentum.Phi());
349 // histos for all clusters in cone
350 fhEtaPhiInConeCluster->Fill(fMomentum.Eta(), fMomentum.Phi());
353 //fill histogram for UE in phi band in EMCal acceptance
354 if(fMomentum.Eta() > (etaTrig-conesize) && fMomentum.Eta() < (etaTrig+conesize))
356 phiBandPtSum+=fMomentum.Pt();
357 fhPhiBandCluster->Fill(fMomentum.Eta(),fMomentum.Phi());
361 //fill histogram for UE in eta band in EMCal acceptance
362 if(fMomentum.Phi() > (phiTrig-conesize) && fMomentum.Phi() < (phiTrig+conesize))
364 etaBandPtSum+=fMomentum.Pt();
365 fhEtaBandCluster->Fill(fMomentum.Eta(),fMomentum.Phi());
369 fhConeSumPtEtaBandUECluster ->Fill(ptTrig , etaBandPtSum);
370 fhConeSumPtPhiBandUECluster ->Fill(ptTrig , phiBandPtSum);
371 fhConeSumPtEtaBandUEClusterTrigEtaPhi->Fill(etaTrig,phiTrig,etaBandPtSum);
372 fhConeSumPtPhiBandUEClusterTrigEtaPhi->Fill(etaTrig,phiTrig,phiBandPtSum);
376 //________________________________________________________________________________________________
377 void AliAnaParticleIsolation::CalculateCaloCellUEBand(AliAODPWG4ParticleCorrelation * pCandidate,
378 Float_t & etaBandPtSumCells, Float_t & phiBandPtSumCells)
380 // Get the cells amplitude or sum of amplitude in phi/eta bands or at 45 degrees from trigger
382 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyCharged ) return ;
384 Float_t conesize = GetIsolationCut()->GetConeSize();
386 Float_t phiTrig = pCandidate->Phi();
387 if(phiTrig<0) phiTrig += TMath::TwoPi();
388 Float_t etaTrig = pCandidate->Eta();
390 if(pCandidate->GetDetectorTag()==kEMCAL)
392 AliEMCALGeometry* eGeom = AliEMCALGeometry::GetInstance();
395 if (eGeom->GetAbsCellIdFromEtaPhi(etaTrig,phiTrig,absId))
397 if(!eGeom->CheckAbsCellId(absId)) return ;
399 // Get absolute (col,row) of trigger particle
400 Int_t nSupMod = eGeom->GetSuperModuleNumber(absId);
402 Int_t imEta=-1, imPhi=-1;
403 Int_t ieta =-1, iphi =-1;
405 if (eGeom->GetCellIndex(absId,nSupMod,nModule,imPhi,imEta))
407 eGeom->GetCellPhiEtaIndexInSModule(nSupMod,nModule,imPhi,imEta,iphi,ieta);
409 Int_t colTrig = ieta;
410 if (nSupMod % 2) colTrig = AliEMCALGeoParams::fgkEMCALCols + ieta ;
411 Int_t rowTrig = iphi + AliEMCALGeoParams::fgkEMCALRows*int(nSupMod/2);
413 Int_t sqrSize = int(conesize/0.0143);
415 AliVCaloCells * cells = GetEMCALCells();
417 Int_t nTotalRows = AliEMCALGeoParams::fgkEMCALRows*16/3 ; // 24*(16/3) 5 full-size Sectors (2 SM) + 1 one-third Sector (2 SM)
418 Int_t nTotalCols = 2*AliEMCALGeoParams::fgkEMCALCols;
419 // printf("nTotalRows %i, nTotalCols %i\n",nTotalRows,nTotalCols);
420 // Loop on cells in eta band
422 Int_t irowmin = rowTrig-sqrSize;
423 if(irowmin<0) irowmin=0;
424 Int_t irowmax = rowTrig+sqrSize;
425 if(irowmax>AliEMCALGeoParams::fgkEMCALRows) irowmax=AliEMCALGeoParams::fgkEMCALRows;
428 for(Int_t irow = irowmin; irow <irowmax; irow++)
430 for(Int_t icol = 0; icol < nTotalCols; icol++)
432 Int_t inSector = int(irow/AliEMCALGeoParams::fgkEMCALRows);
433 if(inSector==5) continue;
436 if(icol < AliEMCALGeoParams::fgkEMCALCols)
438 inSupMod = 2*inSector + 1;
441 else if(icol > AliEMCALGeoParams::fgkEMCALCols - 1)
443 inSupMod = 2*inSector;
444 icolLoc = icol-AliEMCALGeoParams::fgkEMCALCols;
447 Int_t irowLoc = irow - AliEMCALGeoParams::fgkEMCALRows*inSector ;
449 // Exclude cells in cone
450 if(TMath::Abs(icol-colTrig) < sqrSize || TMath::Abs(irow-rowTrig) < sqrSize){
453 Int_t iabsId = eGeom->GetAbsCellIdFromCellIndexes(inSupMod,irowLoc,icolLoc);
454 if(!eGeom->CheckAbsCellId(iabsId)) continue;
455 etaBandPtSumCells += cells->GetCellAmplitude(iabsId);
456 fhEtaBandCell->Fill(colTrig,rowTrig);
458 // printf("ETA inSupMod %i,irowLoc %i,icolLoc %i, iabsId %i, etaBandPtSumCells %f\n",nSupMod,irowLoc,icolLoc,iabsId,etaBandPtSumCells);
461 Int_t icolmin = colTrig-sqrSize;
462 if(icolmin<0) icolmin=0;
463 Int_t icolmax = colTrig+sqrSize;
464 if(icolmax>AliEMCALGeoParams::fgkEMCALCols) icolmax=AliEMCALGeoParams::fgkEMCALCols;
466 // Loop on cells in phi band
467 for(Int_t icol = icolmin; icol < icolmax; icol++)
469 for(Int_t irow = 0; irow < nTotalRows; irow++)
471 Int_t inSector = int(irow/AliEMCALGeoParams::fgkEMCALRows);
472 if(inSector==5) continue;
475 // printf("icol %i, irow %i, inSector %i\n",icol,irow ,inSector);
476 if(icol < AliEMCALGeoParams::fgkEMCALCols)
478 // printf("icol < AliEMCALGeoParams::fgkEMCALCols %i\n",AliEMCALGeoParams::fgkEMCALCols );
479 inSupMod = 2*inSector + 1;
482 else if(icol > AliEMCALGeoParams::fgkEMCALCols - 1)
484 // printf("icol > AliEMCALGeoParams::fgkEMCALCols -1 %i\n",AliEMCALGeoParams::fgkEMCALCols -1 );
485 inSupMod = 2*inSector;
486 icolLoc = icol-AliEMCALGeoParams::fgkEMCALCols;
489 Int_t irowLoc = irow - AliEMCALGeoParams::fgkEMCALRows*inSector ; // Stesso problema di sopra //
491 // Exclude cells in cone
492 if(TMath::Abs(icol-colTrig) < sqrSize) {
493 //printf("TMath::Abs(icol-colTrig) %i < sqrSize %i\n",TMath::Abs(icol-colTrig) ,sqrSize);continue ;
495 if(TMath::Abs(irow-rowTrig) < sqrSize) {
496 //printf("TMath::Abs(irow-rowTrig) %i < sqrSize %i\n",TMath::Abs(irow-rowTrig) ,sqrSize);continue ;
499 Int_t iabsId = eGeom->GetAbsCellIdFromCellIndexes(inSupMod,irowLoc,icolLoc);
500 if(!eGeom->CheckAbsCellId(iabsId))
502 AliWarning(Form("!eGeom->CheckAbsCellId(iabsId=%i) inSupMod %i irowLoc %i icolLoc %i",iabsId,inSupMod, irowLoc, icolLoc));
505 phiBandPtSumCells += cells->GetCellAmplitude(iabsId);
506 fhPhiBandCell->Fill(colTrig,rowTrig);
507 //printf("inSupMod %i,irowLoc %i,icolLoc %i, iabsId %i, phiBandPtSumCells %f\n",nSupMod,irowLoc,icolLoc,iabsId,phiBandPtSumCells);
514 Float_t ptTrig = pCandidate->Pt();
516 fhConeSumPtEtaBandUECell ->Fill(ptTrig , etaBandPtSumCells);
517 fhConeSumPtPhiBandUECell ->Fill(ptTrig , phiBandPtSumCells);
518 fhConeSumPtEtaBandUECellTrigEtaPhi->Fill(etaTrig,phiTrig,etaBandPtSumCells);
519 fhConeSumPtPhiBandUECellTrigEtaPhi->Fill(etaTrig,phiTrig,phiBandPtSumCells);
523 //________________________________________________________________________________________________
524 void AliAnaParticleIsolation::CalculateTrackUEBand(AliAODPWG4ParticleCorrelation * pCandidate,
525 Float_t & etaBandPtSum, Float_t & phiBandPtSum)
527 // Get the track pT or sum of pT in phi/eta bands or at 45 degrees from trigger
529 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyNeutral ) return ;
531 Float_t conesize = GetIsolationCut()->GetConeSize();
533 Double_t sumptPerp= 0. ;
534 Float_t ptTrig = pCandidate->Pt() ;
535 Float_t phiTrig = pCandidate->Phi();
536 Float_t etaTrig = pCandidate->Eta();
538 TObjArray * trackList = GetCTSTracks() ;
539 for(Int_t itrack=0; itrack < trackList->GetEntriesFast(); itrack++)
541 AliVTrack* track = (AliVTrack *) trackList->At(itrack);
545 AliWarning("Track not available?");
549 //Do not count the candidate (pion, conversion photon) or the daughters of the candidate
550 if(track->GetID() == pCandidate->GetTrackLabel(0) || track->GetID() == pCandidate->GetTrackLabel(1) ||
551 track->GetID() == pCandidate->GetTrackLabel(2) || track->GetID() == pCandidate->GetTrackLabel(3) ) continue ;
553 // histo of eta:phi for all tracks
554 fhEtaPhiTrack->Fill(track->Eta(),track->Phi());
556 //exclude particles in cone
557 Float_t rad = GetIsolationCut()->Radius(etaTrig, phiTrig, track->Eta(), track->Phi());
559 // histo of eta:phi for all tracks in cone
560 fhEtaPhiInConeTrack->Fill(track->Eta(),track->Phi());
564 //fill histogram for UE in phi band
565 if(track->Eta() > (etaTrig-conesize) && track->Eta() < (etaTrig+conesize))
567 phiBandPtSum+=track->Pt();
568 fhPhiBandTrack->Fill(track->Eta(),track->Phi());
571 //fill histogram for UE in eta band in EMCal acceptance
572 if(track->Phi() > (phiTrig-conesize) && track->Phi() < (phiTrig+conesize))
574 etaBandPtSum+=track->Pt();
575 fhEtaBandTrack->Fill(track->Eta(),track->Phi());
578 //fill the histograms at +-45 degrees in phi from trigger particle, perpedicular to trigger axis in phi
579 Double_t dPhi = phiTrig - track->Phi() + TMath::PiOver2();
580 Double_t dEta = etaTrig - track->Eta();
581 Double_t arg = dPhi*dPhi + dEta*dEta;
582 if(TMath::Sqrt(arg) < conesize)
584 fhPtInPerpCone->Fill(ptTrig,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
585 sumptPerp+=track->Pt();
588 dPhi = phiTrig - track->Phi() - TMath::PiOver2();
589 arg = dPhi*dPhi + dEta*dEta;
590 if(TMath::Sqrt(arg) < conesize)
592 fhPtInPerpCone->Fill(ptTrig,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
593 sumptPerp+=track->Pt();
597 fhPerpConeSumPt ->Fill(ptTrig , sumptPerp );
598 fhConeSumPtEtaBandUETrack ->Fill(ptTrig , etaBandPtSum);
599 fhConeSumPtPhiBandUETrack ->Fill(ptTrig , phiBandPtSum);
600 fhConeSumPtEtaBandUETrackTrigEtaPhi->Fill(etaTrig,phiTrig,etaBandPtSum);
601 fhConeSumPtPhiBandUETrackTrigEtaPhi->Fill(etaTrig,phiTrig,phiBandPtSum);
607 //_____________________________________________________________________________________________________________________________________
608 void AliAnaParticleIsolation::CalculateNormalizeUEBandPerUnitArea(AliAODPWG4ParticleCorrelation * pCandidate, Float_t coneptsumCluster,
609 Float_t coneptsumCell, Float_t coneptsumTrack,
610 Float_t &etaBandptsumTrackNorm, Float_t &etaBandptsumClusterNorm)
612 //normalize phi/eta band per area unit
614 Float_t etaUEptsumTrack = 0 ;
615 Float_t phiUEptsumTrack = 0 ;
616 Float_t etaUEptsumCluster = 0 ;
617 Float_t phiUEptsumCluster = 0 ;
618 Float_t etaUEptsumCell = 0 ;
619 Float_t phiUEptsumCell = 0 ;
621 Int_t partTypeInCone = GetIsolationCut()->GetParticleTypeInCone();
623 // Do the normalization
625 Float_t conesize = GetIsolationCut()->GetConeSize();
626 Float_t coneA = conesize*conesize*TMath::Pi(); // A = pi R^2, isolation cone area
627 Float_t ptTrig = pCandidate->Pt() ;
628 Float_t phiTrig = pCandidate->Phi();
629 Float_t etaTrig = pCandidate->Eta();
635 Float_t phiUEptsumTrackNorm = 0 ;
636 Float_t etaUEptsumTrackNorm = 0 ;
637 Float_t coneptsumTrackSubPhi = 0 ;
638 Float_t coneptsumTrackSubEta = 0 ;
639 Float_t coneptsumTrackSubPhiNorm = 0 ;
640 Float_t coneptsumTrackSubEtaNorm = 0 ;
641 etaBandptsumTrackNorm = 0 ;
643 if( partTypeInCone!=AliIsolationCut::kOnlyNeutral )
645 // Sum the pT in the phi or eta band for clusters or tracks
646 CalculateTrackUEBand (pCandidate,etaUEptsumTrack ,phiUEptsumTrack );// rajouter ici l'histo eta phi
649 fhConeSumPtVSUETracksEtaBand->Fill(coneptsumTrack,etaUEptsumTrack);
650 fhConeSumPtVSUETracksPhiBand->Fill(coneptsumTrack,phiUEptsumTrack);
653 Float_t correctConeSumTrack = 1;
654 Float_t correctConeSumTrackPhi = 1;
656 GetIsolationCut()->CalculateUEBandTrackNormalization(GetReader(),etaTrig, phiTrig,
657 phiUEptsumTrack,etaUEptsumTrack,
658 phiUEptsumTrackNorm,etaUEptsumTrackNorm,
659 correctConeSumTrack,correctConeSumTrackPhi);
661 coneptsumTrackSubPhi = coneptsumTrack - phiUEptsumTrackNorm;
662 coneptsumTrackSubEta = coneptsumTrack - etaUEptsumTrackNorm;
664 etaBandptsumTrackNorm = etaUEptsumTrackNorm;
666 fhConeSumPtPhiUESubTrack ->Fill(ptTrig , coneptsumTrackSubPhi);
667 fhConeSumPtPhiUESubTrackTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumTrackSubPhi);
668 fhConeSumPtEtaUESubTrack ->Fill(ptTrig , coneptsumTrackSubEta);
669 fhConeSumPtEtaUESubTrackTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumTrackSubEta);
671 fhFractionTrackOutConeEta ->Fill(ptTrig , correctConeSumTrack-1);
672 fhFractionTrackOutConeEtaTrigEtaPhi->Fill(etaTrig, phiTrig,correctConeSumTrack-1);
674 if(coneptsumTrack > 0)
676 coneptsumTrackSubPhiNorm = coneptsumTrackSubPhi/coneptsumTrack;
677 coneptsumTrackSubEtaNorm = coneptsumTrackSubEta/coneptsumTrack;
680 fhConeSumPtSubvsConeSumPtTotPhiTrack ->Fill(coneptsumTrack,coneptsumTrackSubPhi);
681 fhConeSumPtSubNormvsConeSumPtTotPhiTrack->Fill(coneptsumTrack,coneptsumTrackSubPhiNorm);
682 fhConeSumPtSubvsConeSumPtTotEtaTrack ->Fill(coneptsumTrack,coneptsumTrackSubEta);
683 fhConeSumPtSubNormvsConeSumPtTotEtaTrack->Fill(coneptsumTrack,coneptsumTrackSubEtaNorm);
687 // ------------------------ //
688 // EMCal Clusters and cells //
689 // ------------------------ //
690 Float_t phiUEptsumClusterNorm = 0 ;
691 Float_t etaUEptsumClusterNorm = 0 ;
692 Float_t coneptsumClusterSubPhi = 0 ;
693 Float_t coneptsumClusterSubEta = 0 ;
694 Float_t coneptsumClusterSubPhiNorm = 0 ;
695 Float_t coneptsumClusterSubEtaNorm = 0 ;
696 Float_t phiUEptsumCellNorm = 0 ;
697 Float_t etaUEptsumCellNorm = 0 ;
698 Float_t coneptsumCellSubPhi = 0 ;
699 Float_t coneptsumCellSubEta = 0 ;
700 Float_t coneptsumCellSubPhiNorm = 0 ;
701 Float_t coneptsumCellSubEtaNorm = 0 ;
702 etaBandptsumClusterNorm = 0;
704 if( partTypeInCone!=AliIsolationCut::kOnlyCharged )
711 // Sum the pT in the phi or eta band for clusters or tracks
712 CalculateCaloUEBand (pCandidate,etaUEptsumCluster,phiUEptsumCluster);// rajouter ici l'histo eta phi
715 fhConeSumPtVSUEClusterEtaBand->Fill(coneptsumCluster,etaUEptsumCluster);
716 fhConeSumPtVSUEClusterPhiBand->Fill(coneptsumCluster,phiUEptsumCluster);
719 Float_t correctConeSumClusterEta = 1;
720 Float_t correctConeSumClusterPhi = 1;
722 GetIsolationCut()->CalculateUEBandClusterNormalization(GetReader(),etaTrig, phiTrig,
723 phiUEptsumCluster,etaUEptsumCluster,
724 phiUEptsumClusterNorm,etaUEptsumClusterNorm,
725 correctConeSumClusterEta,correctConeSumClusterPhi);
727 // In case that cone is out of eta and phi side, we are over correcting, not too often with the current cuts ...
728 // Comment if not used
729 // Float_t coneBadCellsCoeff =1;
730 // Float_t etaBandBadCellsCoeff=1;
731 // Float_t phiBandBadCellsCoeff=1;
732 // GetIsolationCut()->GetCoeffNormBadCell(pCandidate, GetReader(),coneBadCellsCoeff,etaBandBadCellsCoeff,phiBandBadCellsCoeff) ;
734 //coneptsumCluster=coneptsumCluster*coneBadCellsCoeff*correctConeSumClusterEta*correctConeSumClusterPhi;
736 coneptsumClusterSubPhi = coneptsumCluster - phiUEptsumClusterNorm;
737 coneptsumClusterSubEta = coneptsumCluster - etaUEptsumClusterNorm;
739 etaBandptsumClusterNorm = etaUEptsumClusterNorm;
741 fhConeSumPtPhiUESubCluster ->Fill(ptTrig , coneptsumClusterSubPhi);
742 fhConeSumPtPhiUESubClusterTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumClusterSubPhi);
743 fhConeSumPtEtaUESubCluster ->Fill(ptTrig , coneptsumClusterSubEta);
744 fhConeSumPtEtaUESubClusterTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumClusterSubEta);
746 fhFractionClusterOutConeEta ->Fill(ptTrig , correctConeSumClusterEta-1);
747 fhFractionClusterOutConeEtaTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumClusterEta-1);
748 fhFractionClusterOutConePhi ->Fill(ptTrig , correctConeSumClusterPhi-1);
749 fhFractionClusterOutConePhiTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumClusterPhi-1);
751 if(coneptsumCluster!=0)
753 coneptsumClusterSubPhiNorm = coneptsumClusterSubPhi/coneptsumCluster;
754 coneptsumClusterSubEtaNorm = coneptsumClusterSubEta/coneptsumCluster;
757 fhConeSumPtSubvsConeSumPtTotPhiCluster ->Fill(coneptsumCluster,coneptsumClusterSubPhi);
758 fhConeSumPtSubNormvsConeSumPtTotPhiCluster->Fill(coneptsumCluster,coneptsumClusterSubPhiNorm);
759 fhConeSumPtSubvsConeSumPtTotEtaCluster ->Fill(coneptsumCluster,coneptsumClusterSubEta);
760 fhConeSumPtSubNormvsConeSumPtTotEtaCluster->Fill(coneptsumCluster,coneptsumClusterSubEtaNorm);
766 if(fFillCellHistograms)
768 // Sum the pT in the phi or eta band for clusters or tracks
769 CalculateCaloCellUEBand(pCandidate,etaUEptsumCell ,phiUEptsumCell );
771 // Move to AliIsolationCut the calculation not the histograms??
773 //Careful here if EMCal limits changed .. 2010 (4 SM) to 2011-12 (10 SM), for the moment consider 100 deg in phi
774 Float_t emcEtaSize = 0.7*2; // TO FIX
775 Float_t emcPhiSize = TMath::DegToRad()*100.; // TO FIX
777 if(((2*conesize*emcPhiSize)-coneA)!=0)phiUEptsumCellNorm = phiUEptsumCell*(coneA / ((2*conesize*emcPhiSize)-coneA));
778 if(((2*conesize*emcEtaSize)-coneA)!=0)etaUEptsumCellNorm = etaUEptsumCell*(coneA / ((2*conesize*emcEtaSize)-coneA));
780 // Need to correct coneptsumCluster by the fraction of the cone out of the calorimeter cut acceptance!
782 Float_t correctConeSumCellEta = 1;
783 if(TMath::Abs(etaTrig)+conesize > emcEtaSize/2.)
785 Float_t excess = TMath::Abs(etaTrig) + conesize - emcEtaSize/2.;
786 correctConeSumCellEta = GetIsolationCut()->CalculateExcessAreaFraction(excess);
787 //printf("Excess EMC-Eta %2.3f, coneA %2.2f, excessA %2.2f, angle %2.2f,factor %2.2f\n",excess,coneA, excessA, angle*TMath::RadToDeg(), correctConeSumClusterEta);
788 // Need to correct phi band surface if part of the cone falls out of track cut acceptance!
789 if(((2*(conesize-excess)*emcPhiSize)-(coneA-correctConeSumCellEta))!=0)phiUEptsumCellNorm = phiUEptsumCell*(coneA / ((2*(conesize-excess)*emcPhiSize)-(coneA-correctConeSumCellEta)));
792 Float_t correctConeSumCellPhi = 1;
793 //printf("EMCPhiTrig %2.2f, conesize %2.2f, sum %2.2f, rest %2.2f \n",phiTrig*TMath::RadToDeg(),conesize*TMath::RadToDeg(),(phiTrig+conesize)*TMath::RadToDeg(),(phiTrig-conesize)*TMath::RadToDeg() );
794 if((phiTrig+conesize > 180*TMath::DegToRad()) ||
795 (phiTrig-conesize < 80*TMath::DegToRad()))
798 if( phiTrig+conesize > 180*TMath::DegToRad() ) excess = conesize + phiTrig - 180*TMath::DegToRad() ;
799 else excess = conesize - phiTrig + 80*TMath::DegToRad() ;
801 correctConeSumCellPhi = GetIsolationCut()->CalculateExcessAreaFraction(excess);
802 //printf("Excess EMC-Phi %2.3f, coneA %2.2f, excessA %2.2f, angle %2.2f,factor %2.2f\n",excess,coneA, excessA, angle*TMath::RadToDeg(), correctConeSumClusterPhi);
804 // Need to correct eta band surface if part of the cone falls out of track cut acceptance!
805 if(((2*(conesize-excess)*emcEtaSize)-(coneA-correctConeSumCellPhi))!=0)etaUEptsumCellNorm = etaUEptsumCell*(coneA / ((2*(conesize-excess)*emcEtaSize)-(coneA-correctConeSumCellPhi)));
809 // In case that cone is out of eta and phi side, we are over correcting, not too often with the current cuts ...
810 coneptsumCellSubPhi = coneptsumCell*correctConeSumCellEta*correctConeSumCellPhi - phiUEptsumCellNorm;
811 coneptsumCellSubEta = coneptsumCell*correctConeSumCellEta*correctConeSumCellPhi - etaUEptsumCellNorm;
813 fhConeSumPtPhiUESubCell ->Fill(ptTrig , coneptsumCellSubPhi);
814 fhConeSumPtPhiUESubCellTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumCellSubPhi);
815 fhConeSumPtEtaUESubCell ->Fill(ptTrig , coneptsumCellSubEta);
816 fhConeSumPtEtaUESubCellTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumCellSubEta);
818 fhFractionCellOutConeEta ->Fill(ptTrig , correctConeSumCellEta-1);
819 fhFractionCellOutConeEtaTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumCellEta-1);
820 fhFractionCellOutConePhi ->Fill(ptTrig , correctConeSumCellPhi-1);
821 fhFractionCellOutConePhiTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumCellPhi-1);
824 coneptsumCellSubPhiNorm = coneptsumCellSubPhi/coneptsumCell;
825 coneptsumCellSubEtaNorm = coneptsumCellSubEta/coneptsumCell;
828 fhConeSumPtSubvsConeSumPtTotPhiCell ->Fill(coneptsumCell,coneptsumCellSubPhi);
829 fhConeSumPtSubNormvsConeSumPtTotPhiCell->Fill(coneptsumCell,coneptsumCellSubPhiNorm);
830 fhConeSumPtSubvsConeSumPtTotEtaCell ->Fill(coneptsumCell,coneptsumCellSubEta);
831 fhConeSumPtSubNormvsConeSumPtTotEtaCell->Fill(coneptsumCell,coneptsumCellSubEtaNorm);
835 if( partTypeInCone==AliIsolationCut::kNeutralAndCharged )
837 // --------------------------- //
838 // Tracks and clusters in cone //
839 // --------------------------- //
841 Double_t sumPhiUESub = coneptsumClusterSubPhi + coneptsumTrackSubPhi;
842 Double_t sumEtaUESub = coneptsumClusterSubEta + coneptsumTrackSubEta;
844 fhConeSumPtPhiUESub ->Fill(ptTrig , sumPhiUESub);
845 fhConeSumPtPhiUESubTrigEtaPhi->Fill(etaTrig, phiTrig, sumPhiUESub);
846 fhConeSumPtEtaUESub ->Fill(ptTrig , sumEtaUESub);
847 fhConeSumPtEtaUESubTrigEtaPhi->Fill(etaTrig, phiTrig, sumEtaUESub);
849 fhEtaBandClustervsTrack ->Fill(etaUEptsumCluster ,etaUEptsumTrack );
850 fhPhiBandClustervsTrack ->Fill(phiUEptsumCluster ,phiUEptsumTrack );
851 fhEtaBandNormClustervsTrack->Fill(etaUEptsumClusterNorm,etaUEptsumTrackNorm);
852 fhPhiBandNormClustervsTrack->Fill(phiUEptsumClusterNorm,phiUEptsumTrackNorm);
854 fhConeSumPtEtaUESubClustervsTrack->Fill(coneptsumClusterSubEta,coneptsumTrackSubEta);
855 fhConeSumPtPhiUESubClustervsTrack->Fill(coneptsumClusterSubPhi,coneptsumTrackSubPhi);
857 // ------------------------ //
858 // Tracks and cells in cone //
859 // ------------------------ //
861 if(fFillCellHistograms)
863 Double_t sumPhiUESubTrackCell = coneptsumCellSubPhi + coneptsumTrackSubPhi;
864 Double_t sumEtaUESubTrackCell = coneptsumCellSubEta + coneptsumTrackSubEta;
866 fhConeSumPtPhiUESubTrackCell ->Fill(ptTrig , sumPhiUESubTrackCell);
867 fhConeSumPtPhiUESubTrackCellTrigEtaPhi->Fill(etaTrig, phiTrig, sumPhiUESubTrackCell);
868 fhConeSumPtEtaUESubTrackCell ->Fill(ptTrig , sumEtaUESubTrackCell);
869 fhConeSumPtEtaUESubTrackCellTrigEtaPhi->Fill(etaTrig, phiTrig, sumEtaUESubTrackCell);
871 fhEtaBandCellvsTrack ->Fill(etaUEptsumCell ,etaUEptsumTrack );
872 fhPhiBandCellvsTrack ->Fill(phiUEptsumCell ,phiUEptsumTrack );
873 fhEtaBandNormCellvsTrack->Fill(etaUEptsumCellNorm,etaUEptsumTrackNorm);
874 fhPhiBandNormCellvsTrack->Fill(phiUEptsumCellNorm,phiUEptsumTrackNorm);
876 fhConeSumPtEtaUESubCellvsTrack->Fill(coneptsumCellSubEta,coneptsumTrackSubEta);
877 fhConeSumPtPhiUESubCellvsTrack->Fill(coneptsumCellSubPhi,coneptsumTrackSubPhi);
884 //______________________________________________________________________________________________________________
885 void AliAnaParticleIsolation::CalculateCaloSignalInCone(AliAODPWG4ParticleCorrelation * aodParticle,
886 Float_t & coneptsumCluster, Float_t & coneptLeadCluster)
888 // Get the cluster pT or sum of pT in isolation cone
889 coneptLeadCluster = 0;
890 coneptsumCluster = 0;
892 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyCharged ) return ;
894 //Recover reference arrays with clusters and tracks
895 TObjArray * refclusters = aodParticle->GetObjArray(GetAODObjArrayName()+"Clusters");
896 if(!refclusters) return ;
898 Float_t ptTrig = aodParticle->Pt();
900 //Get vertex for cluster momentum calculation
901 Double_t vertex[] = {0,0,0} ; //vertex ;
902 if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
903 GetReader()->GetVertex(vertex);
907 for(Int_t icalo=0; icalo < refclusters->GetEntriesFast(); icalo++)
909 AliVCluster* calo = (AliVCluster *) refclusters->At(icalo);
910 calo->GetMomentum(fMomentum,vertex) ;//Assume that come from vertex in straight line
911 ptcone = fMomentum.Pt();
913 fhPtInCone ->Fill(ptTrig, ptcone);
914 fhPtClusterInCone->Fill(ptTrig, ptcone);
916 if(IsPileUpAnalysisOn())
918 if(GetReader()->IsPileUpFromSPD()) fhPtInConePileUp[0]->Fill(ptTrig,ptcone);
919 if(GetReader()->IsPileUpFromEMCal()) fhPtInConePileUp[1]->Fill(ptTrig,ptcone);
920 if(GetReader()->IsPileUpFromSPDOrEMCal()) fhPtInConePileUp[2]->Fill(ptTrig,ptcone);
921 if(GetReader()->IsPileUpFromSPDAndEMCal()) fhPtInConePileUp[3]->Fill(ptTrig,ptcone);
922 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) fhPtInConePileUp[4]->Fill(ptTrig,ptcone);
923 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) fhPtInConePileUp[5]->Fill(ptTrig,ptcone);
924 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) fhPtInConePileUp[6]->Fill(ptTrig,ptcone);
927 if(IsHighMultiplicityAnalysisOn()) fhPtInConeCent->Fill(GetEventCentrality(),ptcone);
929 coneptsumCluster+=ptcone;
930 if(ptcone > coneptLeadCluster) coneptLeadCluster = ptcone;
933 fhConeSumPtCluster ->Fill(ptTrig, coneptsumCluster );
934 fhConePtLeadCluster->Fill(ptTrig, coneptLeadCluster);
937 //______________________________________________________________________________________________________
938 void AliAnaParticleIsolation::CalculateCaloCellSignalInCone(AliAODPWG4ParticleCorrelation * aodParticle,
939 Float_t & coneptsumCell)
941 // Get the cell amplityde or sum of amplitudes in isolation cone
942 // Mising: Remove signal cells in cone in case the trigger is a cluster!
944 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyCharged ) return ;
946 Float_t conesize = GetIsolationCut()->GetConeSize();
948 Float_t ptTrig = aodParticle->Pt();
949 Float_t phiTrig = aodParticle->Phi();
950 if(phiTrig<0) phiTrig += TMath::TwoPi();
951 Float_t etaTrig = aodParticle->Eta();
953 if(aodParticle->GetDetectorTag()==kEMCAL)
955 AliEMCALGeometry* eGeom = AliEMCALGeometry::GetInstance();
958 if (eGeom->GetAbsCellIdFromEtaPhi(etaTrig,phiTrig,absId))
960 if(!eGeom->CheckAbsCellId(absId)) return ;
962 // Get absolute (col,row) of trigger particle
963 Int_t nSupMod = eGeom->GetSuperModuleNumber(absId);
965 Int_t imEta=-1, imPhi=-1;
966 Int_t ieta =-1, iphi =-1;
968 if (eGeom->GetCellIndex(absId,nSupMod,nModule,imPhi,imEta))
970 Int_t iEta=-1, iPhi=-1;
971 eGeom->GetCellPhiEtaIndexInSModule(nSupMod,nModule,imPhi,imEta,iphi,ieta);
973 Int_t colTrig = iEta;
974 if (nSupMod % 2) colTrig = AliEMCALGeoParams::fgkEMCALCols + iEta ;
975 Int_t rowTrig = iPhi + AliEMCALGeoParams::fgkEMCALRows*int(nSupMod/2);
977 Int_t sqrSize = int(conesize/0.0143);
979 AliVCaloCells * cells = GetEMCALCells();
981 // Loop on cells in cone
982 for(Int_t irow = rowTrig-sqrSize; irow < rowTrig+sqrSize; irow++)
984 for(Int_t icol = colTrig-sqrSize; icol < colTrig+sqrSize; icol++)
986 Int_t inSector = int(irow/AliEMCALGeoParams::fgkEMCALRows);
987 if(inSector==5) continue;
991 if(icol < AliEMCALGeoParams::fgkEMCALCols)
993 inSupMod = 2*inSector + 1;
996 else if(icol > AliEMCALGeoParams::fgkEMCALCols - 1)
998 inSupMod = 2*inSector;
999 icolLoc = icol-AliEMCALGeoParams::fgkEMCALCols;
1002 Int_t irowLoc = irow - AliEMCALGeoParams::fgkEMCALRows*inSector ;
1004 Int_t iabsId = eGeom->GetAbsCellIdFromCellIndexes(inSupMod,irowLoc,icolLoc);
1005 if(!eGeom->CheckAbsCellId(iabsId)) continue;
1007 fhPtCellInCone->Fill(ptTrig, cells->GetCellAmplitude(iabsId));
1008 coneptsumCell += cells->GetCellAmplitude(iabsId);
1015 fhConeSumPtCell->Fill(ptTrig,coneptsumCell);
1019 //___________________________________________________________________________________________________________
1020 void AliAnaParticleIsolation::CalculateTrackSignalInCone(AliAODPWG4ParticleCorrelation * aodParticle,
1021 Float_t & coneptsumTrack, Float_t & coneptLeadTrack)
1023 // Get the track pT or sum of pT in isolation cone
1025 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyNeutral ) return ;
1027 //Recover reference arrays with clusters and tracks
1028 TObjArray * reftracks = aodParticle->GetObjArray(GetAODObjArrayName()+"Tracks");
1029 if(!reftracks) return ;
1031 Float_t ptTrig = aodParticle->Pt();
1032 Double_t bz = GetReader()->GetInputEvent()->GetMagneticField();
1034 for(Int_t itrack=0; itrack < reftracks->GetEntriesFast(); itrack++)
1036 AliVTrack* track = (AliVTrack *) reftracks->At(itrack);
1037 Float_t pTtrack = track->Pt();
1039 fhPtInCone ->Fill(ptTrig,pTtrack);
1040 fhPtTrackInCone->Fill(ptTrig,pTtrack);
1042 if(IsPileUpAnalysisOn())
1044 ULong_t status = track->GetStatus();
1045 Bool_t okTOF = ( (status & AliVTrack::kTOFout) == AliVTrack::kTOFout ) ;
1046 //Double32_t tof = track->GetTOFsignal()*1e-3;
1047 Int_t trackBC = track->GetTOFBunchCrossing(bz);
1049 if ( okTOF && trackBC!=0 ) fhPtTrackInConeOtherBC->Fill(ptTrig,pTtrack);
1050 else if( okTOF && trackBC==0 ) fhPtTrackInConeBC0 ->Fill(ptTrig,pTtrack);
1052 Int_t vtxBC = GetReader()->GetVertexBC();
1053 if(vtxBC == 0 || vtxBC==AliVTrack::kTOFBCNA) fhPtTrackInConeVtxBC0->Fill(ptTrig,pTtrack);
1055 if(GetReader()->IsPileUpFromSPD()) { fhPtInConePileUp[0]->Fill(ptTrig,pTtrack);
1056 if(okTOF && trackBC!=0 ) fhPtTrackInConeOtherBCPileUpSPD->Fill(ptTrig,pTtrack);
1057 if(okTOF && trackBC==0 ) fhPtTrackInConeBC0PileUpSPD ->Fill(ptTrig,pTtrack); }
1058 if(GetReader()->IsPileUpFromEMCal()) fhPtInConePileUp[1]->Fill(ptTrig,pTtrack);
1059 if(GetReader()->IsPileUpFromSPDOrEMCal()) fhPtInConePileUp[2]->Fill(ptTrig,pTtrack);
1060 if(GetReader()->IsPileUpFromSPDAndEMCal()) fhPtInConePileUp[3]->Fill(ptTrig,pTtrack);
1061 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) fhPtInConePileUp[4]->Fill(ptTrig,pTtrack);
1062 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) fhPtInConePileUp[5]->Fill(ptTrig,pTtrack);
1063 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) fhPtInConePileUp[6]->Fill(ptTrig,pTtrack);
1066 if(IsHighMultiplicityAnalysisOn()) fhPtInConeCent->Fill(GetEventCentrality(),pTtrack);
1068 coneptsumTrack+=pTtrack;
1069 if(pTtrack > coneptLeadTrack) coneptLeadTrack = pTtrack;
1072 fhConeSumPtTrack ->Fill(ptTrig, coneptsumTrack );
1073 fhConePtLeadTrack->Fill(ptTrig, coneptLeadTrack);
1077 //_________________________________________________________________
1078 void AliAnaParticleIsolation::FillPileUpHistograms(Int_t clusterID)
1080 // Fill some histograms to understand pile-up
1082 if ( clusterID < 0 )
1084 AliWarning(Form("ID of cluster = %d, not possible!", clusterID));
1089 TObjArray* clusters = 0x0;
1090 if (GetCalorimeter() == kEMCAL) clusters = GetEMCALClusters();
1091 else if(GetCalorimeter() == kPHOS ) clusters = GetPHOSClusters();
1094 Float_t time = -1000;
1098 AliVCluster *cluster = FindCluster(clusters,clusterID,iclus);
1099 energy = cluster->E();
1100 time = cluster->GetTOF()*1e9;
1103 //printf("E %f, time %f\n",energy,time);
1104 AliVEvent * event = GetReader()->GetInputEvent();
1106 fhTimeENoCut->Fill(energy,time);
1107 if(GetReader()->IsPileUpFromSPD()) fhTimeESPD ->Fill(energy,time);
1108 if(event->IsPileupFromSPDInMultBins()) fhTimeESPDMulti->Fill(energy,time);
1110 if(energy < 8) return; // Fill time figures for high energy clusters not too close to trigger threshold
1112 AliESDEvent* esdEv = dynamic_cast<AliESDEvent*> (event);
1113 AliAODEvent* aodEv = dynamic_cast<AliAODEvent*> (event);
1115 // N pile up vertices
1116 Int_t nVerticesSPD = -1;
1117 Int_t nVerticesTracks = -1;
1121 nVerticesSPD = esdEv->GetNumberOfPileupVerticesSPD();
1122 nVerticesTracks = esdEv->GetNumberOfPileupVerticesTracks();
1127 nVerticesSPD = aodEv->GetNumberOfPileupVerticesSPD();
1128 nVerticesTracks = aodEv->GetNumberOfPileupVerticesTracks();
1131 fhTimeNPileUpVertSPD ->Fill(time,nVerticesSPD);
1132 fhTimeNPileUpVertTrack->Fill(time,nVerticesTracks);
1134 //printf("Is SPD %d, Is SPD Multi %d, n spd %d, n track %d\n",
1135 // GetReader()->IsPileUpFromSPD(),event->IsPileupFromSPDInMultBins(),nVerticesSPD,nVerticesTracks);
1138 Float_t z1 = -1, z2 = -1;
1140 for(Int_t iVert=0; iVert<nVerticesSPD;iVert++)
1144 const AliESDVertex* pv=esdEv->GetPileupVertexSPD(iVert);
1145 ncont=pv->GetNContributors();
1146 z1 = esdEv->GetPrimaryVertexSPD()->GetZ();
1148 diamZ = esdEv->GetDiamondZ();
1152 AliAODVertex *pv=aodEv->GetVertex(iVert);
1153 if(pv->GetType()!=AliAODVertex::kPileupSPD) continue;
1154 ncont=pv->GetNContributors();
1155 z1=aodEv->GetPrimaryVertexSPD()->GetZ();
1157 diamZ = aodEv->GetDiamondZ();
1160 Double_t distZ = TMath::Abs(z2-z1);
1161 diamZ = TMath::Abs(z2-diamZ);
1163 fhTimeNPileUpVertContributors ->Fill(time,ncont);
1164 fhTimePileUpMainVertexZDistance->Fill(time,distZ);
1165 fhTimePileUpMainVertexZDiamond ->Fill(time,diamZ);
1170 //_____________________________________________________________________________________________________________________
1171 void AliAnaParticleIsolation::FillTrackMatchingShowerShapeControlHistograms(AliAODPWG4ParticleCorrelation *pCandidate,
1172 Float_t coneptsum, Float_t coneleadpt,
1175 // Fill Track matching and Shower Shape control histograms
1176 if(!fFillTMHisto && !fFillSSHisto && !fFillBackgroundBinHistograms && !fFillTaggedDecayHistograms) return;
1178 Int_t clusterID = pCandidate->GetCaloLabel(0) ;
1179 Int_t nMaxima = pCandidate->GetNLM();
1180 Int_t mcTag = pCandidate->GetTag() ;
1181 Bool_t isolated = pCandidate->IsIsolated();
1183 if ( clusterID < 0 )
1185 AliWarning(Form("ID of cluster = %d, not possible!", clusterID));
1189 Float_t m02 = pCandidate->GetM02() ;
1190 Float_t energy = pCandidate->E();
1191 Float_t pt = pCandidate->Pt();
1192 Float_t eta = pCandidate->Eta();
1193 Float_t phi = pCandidate->Phi();
1194 if(phi<0) phi+= TMath::TwoPi();
1196 // Candidates tagged as decay in another analysis (AliAnaPi0EbE)
1197 if(fFillTaggedDecayHistograms)
1199 Int_t decayTag = pCandidate->DecayTag();
1200 if(decayTag < 0) decayTag = 0;
1202 for(Int_t ibit = 0; ibit < fNDecayBits; ibit++)
1204 if(!GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[ibit])) continue;
1206 if(fFillSSHisto) fhPtLambda0Decay[isolated][ibit]->Fill(pt,m02);
1208 // In case it was not done on the trigger selection task
1209 // apply here a shower shape cut, not too strong, to select photons
1210 if( m02 < 0.3 ) continue;
1212 fhPtDecay [isolated][ibit]->Fill(pt);
1213 fhEtaPhiDecay[isolated][ibit]->Fill(eta,phi);
1217 fhPtDecayMC[isolated][ibit][mcIndex]->Fill(pt);
1219 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
1220 fhPtDecayMC[isolated][ibit][kmcPhoton]->Fill(pt);
1222 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCDecayPairLost) && mcIndex==kmcPi0Decay )
1223 fhPtDecayMC[isolated][ibit][kmcPi0DecayLostPair]->Fill(pt);
1226 } // decay histograms
1229 // Get the max pt leading in cone or the sum of pt in cone
1230 // assign a bin to the candidate, depending on both quantities
1231 // see the shower shape in those bins.
1232 if(fFillBackgroundBinHistograms)
1234 // Get the background bin for this cone and trigger
1235 Int_t ptsumBin = -1;
1236 Int_t leadptBin = -1;
1238 AliDebug(1,Form("pT cand: %2.2f, In cone pT: Sum %2.2f, Lead %2.2f, n bins %d",pt,coneptsum,coneleadpt,fNBkgBin));
1240 for(Int_t ibin = 0; ibin < fNBkgBin; ibin++)
1242 if( coneptsum >= fBkgBinLimit[ibin] && coneptsum < fBkgBinLimit[ibin+1]) ptsumBin = ibin;
1243 if( coneleadpt >= fBkgBinLimit[ibin] && coneleadpt < fBkgBinLimit[ibin+1]) leadptBin = ibin;
1246 // Fill the histograms per bin of pt lead or pt sum
1248 if ( leadptBin >= 0 )
1250 AliDebug(1,Form("\t Lead bin %d [%2.2f,%2.2f]", leadptBin,fBkgBinLimit[leadptBin],fBkgBinLimit[leadptBin+1]));
1251 fhPtLeadConeBin[leadptBin]->Fill(pt);
1252 if(fFillSSHisto) fhPtLeadConeBinLambda0[leadptBin]->Fill(pt,m02);
1254 if ( leadptBin == 0 )
1255 AliDebug(1,Form("No track/clusters in isolation cone: cand pt %2.2f GeV/c, track multiplicity %d, N clusters %d",
1256 pt, GetTrackMultiplicity(),GetEMCALClusters()->GetEntriesFast()));
1259 if ( ptsumBin >= 0 )
1261 AliDebug(1,Form("\t Sum bin %d [%2.2f,%2.2f]" , ptsumBin ,fBkgBinLimit[ptsumBin] ,fBkgBinLimit[ptsumBin +1]));
1262 fhSumPtConeBin[ptsumBin]->Fill(pt);
1263 if(fFillSSHisto) fhSumPtConeBinLambda0[ptsumBin]->Fill(pt,m02);
1266 // Check if it was a decay
1267 if(fFillTaggedDecayHistograms && m02 < 0.3)
1269 Int_t decayTag = pCandidate->DecayTag();
1270 if(decayTag < 0) decayTag = 0;
1271 for(Int_t ibit = 0; ibit < fNDecayBits; ibit++)
1273 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[ibit]))
1275 Int_t leadptBinDecay = leadptBin+ibit*fNBkgBin;
1276 Int_t ptsumBinDecay = ptsumBin+ibit*fNBkgBin;
1277 if( leadptBin >=0 ) fhPtLeadConeBinDecay[leadptBinDecay]->Fill(pt);
1278 if( ptsumBin >=0 ) fhSumPtConeBinDecay [ ptsumBinDecay]->Fill(pt);
1285 Int_t leadptBinMC = leadptBin+mcIndex*fNBkgBin;
1286 Int_t ptsumBinMC = ptsumBin+mcIndex*fNBkgBin;
1290 fhPtLeadConeBinMC[leadptBinMC]->Fill(pt);
1291 if(fFillSSHisto) fhPtLeadConeBinLambda0MC[leadptBinMC]->Fill(pt,m02);
1296 fhSumPtConeBinMC [ ptsumBinMC]->Fill(pt);
1297 if(fFillSSHisto) fhSumPtConeBinLambda0MC [ ptsumBinMC]->Fill(pt,m02);
1301 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
1303 leadptBinMC = leadptBin+kmcPhoton*fNBkgBin;
1304 ptsumBinMC = ptsumBin+kmcPhoton*fNBkgBin;
1307 fhPtLeadConeBinMC[leadptBinMC]->Fill(pt);
1308 if(fFillSSHisto) fhPtLeadConeBinLambda0MC[leadptBinMC]->Fill(pt,m02);
1313 fhSumPtConeBinMC [ ptsumBinMC]->Fill(pt);
1314 if(fFillSSHisto) fhSumPtConeBinLambda0MC [ ptsumBinMC]->Fill(pt,m02);
1320 if(fFillPtTrigBinHistograms)
1322 // Get the background bin for this cone and trigger
1323 Int_t ptTrigBin = -1;
1325 for(Int_t ibin = 0; ibin < fNPtTrigBin; ibin++)
1327 if( pt >= fPtTrigBinLimit[ibin] && coneptsum < fPtTrigBinLimit[ibin+1]) ptTrigBin = ibin;
1330 // Fill the histograms per pT candidate bin of pt lead or pt sum
1332 if ( ptTrigBin >= 0 )
1334 AliDebug(1,Form("Trigger pT %f, bin %d [%2.2f,%2.2f]",pt,ptTrigBin,fPtTrigBinLimit[ptTrigBin],fPtTrigBinLimit[ptTrigBin+1]));
1336 fhPtTrigBinPtLeadCone[ptTrigBin]->Fill(coneleadpt);
1337 fhPtTrigBinSumPtCone [ptTrigBin]->Fill(coneptsum );
1340 fhPtTrigBinLambda0vsPtLeadCone[ptTrigBin]->Fill(coneleadpt,m02);
1341 fhPtTrigBinLambda0vsSumPtCone [ptTrigBin]->Fill(coneptsum ,m02);
1345 // Check if it was a decay
1346 if( fFillTaggedDecayHistograms && m02 < 0.3 )
1348 Int_t decayTag = pCandidate->DecayTag();
1349 if(decayTag < 0) decayTag = 0;
1350 for(Int_t ibit = 0; ibit < fNDecayBits; ibit++)
1352 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[ibit]))
1354 Int_t binDecay = ptTrigBin+ibit*fNPtTrigBin;
1357 fhPtTrigBinPtLeadConeDecay[binDecay]->Fill(coneleadpt);
1358 fhPtTrigBinSumPtConeDecay [binDecay]->Fill(coneptsum );
1366 Int_t ptTrigBinMC = ptTrigBin+mcIndex*fNPtTrigBin;
1370 fhPtTrigBinPtLeadConeMC[ptTrigBinMC]->Fill(coneleadpt);
1371 fhPtTrigBinSumPtConeMC [ptTrigBinMC]->Fill(coneptsum );
1374 fhPtTrigBinLambda0vsPtLeadConeMC[ptTrigBinMC]->Fill(coneleadpt,m02);
1375 fhPtTrigBinLambda0vsSumPtConeMC [ptTrigBinMC]->Fill(coneptsum ,m02);
1379 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
1381 ptTrigBinMC = ptTrigBin+kmcPhoton*fNPtTrigBin;
1384 fhPtTrigBinPtLeadConeMC[ptTrigBinMC]->Fill(coneleadpt);
1385 fhPtTrigBinSumPtConeMC [ptTrigBinMC]->Fill(coneptsum );
1388 fhPtTrigBinLambda0vsPtLeadConeMC[ptTrigBinMC]->Fill(coneleadpt,m02);
1389 fhPtTrigBinLambda0vsSumPtConeMC [ptTrigBinMC]->Fill(coneptsum ,m02);
1394 } // pT trigger bins
1396 // Shower shape dependent histograms
1399 fhELambda0 [isolated]->Fill(energy, m02);
1400 fhPtLambda0[isolated]->Fill(pt, m02);
1401 //fhELambda1 [isolated]->Fill(energy, m20);
1405 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
1406 fhPtLambda0MC[kmcPhoton][isolated]->Fill(pt,m02);
1408 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCDecayPairLost) && mcIndex==kmcPi0Decay )
1409 fhPtLambda0MC[kmcPi0DecayLostPair][isolated]->Fill(pt,m02);
1411 fhPtLambda0MC[mcIndex][isolated]->Fill(pt,m02);
1414 if(GetCalorimeter() == kEMCAL && GetFirstSMCoveredByTRD() >= 0 &&
1415 GetModuleNumber(pCandidate) >= GetFirstSMCoveredByTRD() )
1417 fhELambda0TRD [isolated]->Fill(energy, m02 );
1418 fhPtLambda0TRD[isolated]->Fill(pt , m02 );
1419 //fhELambda1TRD [isolated]->Fill(energy, m20 );
1422 if(fFillNLMHistograms)
1424 fhNLocMax[isolated]->Fill(energy,nMaxima);
1425 if (nMaxima==1) { fhELambda0LocMax1[isolated]->Fill(energy,m02); fhELambda1LocMax1[isolated]->Fill(energy,m02); }
1426 else if(nMaxima==2) { fhELambda0LocMax2[isolated]->Fill(energy,m02); fhELambda1LocMax2[isolated]->Fill(energy,m02); }
1427 else { fhELambda0LocMaxN[isolated]->Fill(energy,m02); fhELambda1LocMaxN[isolated]->Fill(energy,m02); }
1431 // Track matching dependent histograms
1435 TObjArray* clusters = 0x0;
1436 if (GetCalorimeter() == kEMCAL) clusters = GetEMCALClusters();
1437 else if(GetCalorimeter() == kPHOS ) clusters = GetPHOSClusters();
1439 if(!clusters) return;
1441 AliVCluster *cluster = FindCluster(clusters,clusterID,iclus);
1443 Float_t dZ = cluster->GetTrackDz();
1444 Float_t dR = cluster->GetTrackDx();
1446 if(cluster->IsEMCAL() && GetCaloUtils()->IsRecalculationOfClusterTrackMatchingOn())
1448 dR = 2000., dZ = 2000.;
1449 GetCaloUtils()->GetEMCALRecoUtils()->GetMatchedResiduals(cluster->GetID(),dZ,dR);
1452 //printf("ParticleIsolation: dPhi %f, dEta %f\n",dR,dZ);
1453 if(fhTrackMatchedDEta[isolated] && TMath::Abs(dR) < 999)
1455 fhTrackMatchedDEta[isolated]->Fill(energy,dZ);
1456 fhTrackMatchedDPhi[isolated]->Fill(energy,dR);
1457 if(energy > 0.5) fhTrackMatchedDEtaDPhi[isolated]->Fill(dZ,dR);
1460 // Check dEdx and E/p of matched clusters
1462 if(TMath::Abs(dZ) < 0.05 && TMath::Abs(dR) < 0.05)
1465 AliVTrack *track = GetCaloUtils()->GetMatchedTrack(cluster, GetReader()->GetInputEvent());
1469 Float_t dEdx = track->GetTPCsignal();
1470 fhdEdx[isolated]->Fill(cluster->E(), dEdx);
1472 Float_t eOverp = cluster->E()/track->P();
1473 fhEOverP[isolated]->Fill(cluster->E(), eOverp);
1476 // printf("AliAnaParticleIsolation::FillTrackMatchingShowerShapeHistograms() - Residual OK but (dR, dZ)= (%2.4f,%2.4f) no track associated WHAT? \n", dR,dZ);
1481 if ( !GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCConversion) )
1483 if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0) ||
1484 GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEta) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 2.5 );
1485 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 0.5 );
1486 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 1.5 );
1487 else fhTrackMatchedMCParticle[isolated]->Fill(energy, 3.5 );
1492 if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0) ||
1493 GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEta) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 6.5 );
1494 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 4.5 );
1495 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 5.5 );
1496 else fhTrackMatchedMCParticle[isolated]->Fill(energy, 7.5 );
1506 //______________________________________________________
1507 TObjString * AliAnaParticleIsolation::GetAnalysisCuts()
1509 //Save parameters used for analysis
1510 TString parList ; //this will be list of parameters used for this analysis.
1511 const Int_t buffersize = 255;
1512 char onePar[buffersize] ;
1514 snprintf(onePar, buffersize,"--- AliAnaParticleIsolation ---:") ;
1516 snprintf(onePar, buffersize,"Calorimeter: %s;",GetCalorimeterString().Data()) ;
1518 snprintf(onePar, buffersize,"Isolation Cand Detector: %s;",fIsoDetectorString.Data()) ;
1520 snprintf(onePar, buffersize,"fReMakeIC =%d (Flag for reisolation during histogram filling);",fReMakeIC) ;
1522 snprintf(onePar, buffersize,"fMakeSeveralIC=%d (Flag for isolation with several cuts at the same time );",fMakeSeveralIC) ;
1524 snprintf(onePar, buffersize,"fFillTMHisto=%d (Flag for track matching histograms);",fFillTMHisto) ;
1526 snprintf(onePar, buffersize,"fFillSSHisto=%d (Flag for shower shape histograms);",fFillSSHisto) ;
1531 snprintf(onePar, buffersize,"fNCones =%d (Number of cone sizes);",fNCones) ;
1533 snprintf(onePar, buffersize,"fNPtThresFrac=%d (Flag for isolation with several cuts at the same time);",fNPtThresFrac) ;
1536 for(Int_t icone = 0; icone < fNCones ; icone++)
1538 snprintf(onePar, buffersize,"fConeSizes[%d]=%1.2f (isolation cone size);",icone, fConeSizes[icone]) ;
1541 for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
1543 snprintf(onePar, buffersize,"fPtThresholds[%d]=%1.2f (isolation pt threshold);",ipt, fPtThresholds[ipt]) ;
1546 for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
1548 snprintf(onePar, buffersize,"fPtFractions[%d]=%1.2f (isolation pt fraction threshold);",ipt, fPtFractions[ipt]) ;
1551 for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
1553 snprintf(onePar, buffersize,"fSumPtThresholds[%d]=%1.2f (isolation sum pt threshold);",ipt, fSumPtThresholds[ipt]) ;
1558 //Get parameters set in base class.
1559 parList += GetBaseParametersList() ;
1561 //Get parameters set in IC class.
1562 if(!fMakeSeveralIC)parList += GetIsolationCut()->GetICParametersList() ;
1564 return new TObjString(parList) ;
1568 //________________________________________________________
1569 TList * AliAnaParticleIsolation::GetCreateOutputObjects()
1571 // Create histograms to be saved in output file and
1572 // store them in outputContainer
1573 TList * outputContainer = new TList() ;
1574 outputContainer->SetName("IsolatedParticleHistos") ;
1576 Int_t nptbins = GetHistogramRanges()->GetHistoPtBins();
1577 Int_t nphibins = GetHistogramRanges()->GetHistoPhiBins();
1578 Int_t netabins = GetHistogramRanges()->GetHistoEtaBins();
1579 Float_t ptmax = GetHistogramRanges()->GetHistoPtMax();
1580 Float_t phimax = GetHistogramRanges()->GetHistoPhiMax();
1581 Float_t etamax = GetHistogramRanges()->GetHistoEtaMax();
1582 Float_t ptmin = GetHistogramRanges()->GetHistoPtMin();
1583 Float_t phimin = GetHistogramRanges()->GetHistoPhiMin();
1584 Float_t etamin = GetHistogramRanges()->GetHistoEtaMin();
1585 Int_t ssbins = GetHistogramRanges()->GetHistoShowerShapeBins();
1586 Float_t ssmax = GetHistogramRanges()->GetHistoShowerShapeMax();
1587 Float_t ssmin = GetHistogramRanges()->GetHistoShowerShapeMin();
1588 Int_t ntimebins= GetHistogramRanges()->GetHistoTimeBins();
1589 Float_t timemax = GetHistogramRanges()->GetHistoTimeMax();
1590 Float_t timemin = GetHistogramRanges()->GetHistoTimeMin();
1592 Int_t nresetabins = GetHistogramRanges()->GetHistoTrackResidualEtaBins();
1593 Float_t resetamax = GetHistogramRanges()->GetHistoTrackResidualEtaMax();
1594 Float_t resetamin = GetHistogramRanges()->GetHistoTrackResidualEtaMin();
1595 Int_t nresphibins = GetHistogramRanges()->GetHistoTrackResidualPhiBins();
1596 Float_t resphimax = GetHistogramRanges()->GetHistoTrackResidualPhiMax();
1597 Float_t resphimin = GetHistogramRanges()->GetHistoTrackResidualPhiMin();
1599 Int_t ndedxbins = GetHistogramRanges()->GetHistodEdxBins();
1600 Float_t dedxmax = GetHistogramRanges()->GetHistodEdxMax();
1601 Float_t dedxmin = GetHistogramRanges()->GetHistodEdxMin();
1602 Int_t nPoverEbins = GetHistogramRanges()->GetHistoPOverEBins();
1603 Float_t pOverEmax = GetHistogramRanges()->GetHistoPOverEMax();
1604 Float_t pOverEmin = GetHistogramRanges()->GetHistoPOverEMin();
1606 Int_t nptsumbins = GetHistogramRanges()->GetHistoNPtSumBins();
1607 Float_t ptsummax = GetHistogramRanges()->GetHistoPtSumMax();
1608 Float_t ptsummin = GetHistogramRanges()->GetHistoPtSumMin();
1609 Int_t nptinconebins = GetHistogramRanges()->GetHistoNPtInConeBins();
1610 Float_t ptinconemax = GetHistogramRanges()->GetHistoPtInConeMax();
1611 Float_t ptinconemin = GetHistogramRanges()->GetHistoPtInConeMin();
1613 //Float_t ptthre = GetIsolationCut()->GetPtThreshold();
1614 //Float_t ptsumthre = GetIsolationCut()->GetSumPtThreshold();
1615 //Float_t ptfrac = GetIsolationCut()->GetPtFraction();
1616 Float_t r = GetIsolationCut()->GetConeSize();
1617 Int_t method = GetIsolationCut()->GetICMethod() ;
1618 Int_t particle = GetIsolationCut()->GetParticleTypeInCone() ;
1620 TString sThreshold = "";
1621 if ( method == AliIsolationCut::kSumPtIC )
1623 sThreshold = Form(", %2.2f < #Sigma #it{p}_{T}^{in cone} < %2.2f GeV/#it{c}",
1624 GetIsolationCut()->GetSumPtThreshold(), GetIsolationCut()->GetSumPtThresholdMax());
1625 if(GetIsolationCut()->GetSumPtThresholdMax() > 200)
1626 sThreshold = Form(", #Sigma #it{p}_{T}^{in cone} = %2.2f GeV/#it{c}",
1627 GetIsolationCut()->GetSumPtThreshold());
1629 else if ( method == AliIsolationCut::kPtThresIC)
1631 sThreshold = Form(", %2.2f < #it{p}_{T}^{th} < %2.2f GeV/#it{c}",
1632 GetIsolationCut()->GetPtThreshold(),GetIsolationCut()->GetPtThresholdMax());
1633 if(GetIsolationCut()->GetSumPtThreshold() > 200)
1634 sThreshold = Form(", #it{p}_{T}^{th} = %2.2f GeV/#it{c}",
1635 GetIsolationCut()->GetPtThreshold());
1637 else if ( method == AliIsolationCut::kPtFracIC)
1638 sThreshold = Form(", #Sigma #it{p}_{T}^{in cone}/#it{p}_{T}^{trig} = %2.2f" ,
1639 GetIsolationCut()->GetPtFraction());
1641 TString sParticle = ", x^{0,#pm}";
1642 if ( particle == AliIsolationCut::kOnlyNeutral ) sParticle = ", x^{0}";
1643 else if ( particle == AliIsolationCut::kOnlyCharged ) sParticle = ", x^{#pm}";
1645 TString parTitle = Form("#it{R} = %2.2f%s%s",GetIsolationCut()->GetConeSize(), sThreshold.Data(),sParticle.Data());
1647 TString pileUpName[] = {"SPD","EMCAL","SPDOrEMCAL","SPDAndEMCAL","SPDAndNotEMCAL","EMCALAndNotSPD","NotSPDAndNotEMCAL"} ;
1649 // MC histograms title and name
1650 TString mcPartType[] = { "#gamma", "#gamma_{prompt}", "#gamma_{fragmentation}",
1651 "#pi^{0} (merged #gamma)","#gamma_{#pi decay}","#gamma_{#pi decay} lost companion",
1652 "#gamma_{#eta decay}","#gamma_{other decay}",
1653 "e^{#pm}","hadrons?"} ;
1655 TString mcPartName[] = { "Photon","PhotonPrompt","PhotonFrag",
1656 "Pi0","Pi0Decay","Pi0DecayLostPair","EtaDecay","OtherDecay",
1657 "Electron","Hadron"} ;
1659 // Primary MC histograms title and name
1660 TString pptype[] = { "#gamma", "#gamma_{#pi decay}","#gamma_{other decay}",
1661 "#gamma_{prompt}","#gamma_{fragmentation}","#gamma_{ISR}","#pi^{0}"} ;
1663 TString ppname[] = { "Photon","PhotonPi0Decay","PhotonOtherDecay",
1664 "PhotonPrompt","PhotonFrag","PhotonISR","Pi0"} ;
1666 // Not Isolated histograms, reference histograms
1668 fhENoIso = new TH1F("hENoIso",
1669 Form("Number of not isolated leading particles vs #it{p}_{T}, %s",parTitle.Data()),
1670 nptbins,ptmin,ptmax);
1671 fhENoIso->SetYTitle("#it{counts}");
1672 fhENoIso->SetXTitle("E (GeV/#it{c})");
1673 outputContainer->Add(fhENoIso) ;
1675 fhPtNoIso = new TH1F("hPtNoIso",
1676 Form("Number of not isolated leading particles vs #it{p}_{T}, %s",parTitle.Data()),
1677 nptbins,ptmin,ptmax);
1678 fhPtNoIso->SetYTitle("#it{counts}");
1679 fhPtNoIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1680 outputContainer->Add(fhPtNoIso) ;
1682 fhEtaPhiNoIso = new TH2F("hEtaPhiNoIso",
1683 Form("Number of not isolated leading particles #eta vs #phi, %s",parTitle.Data()),
1684 netabins,etamin,etamax,nphibins,phimin,phimax);
1685 fhEtaPhiNoIso->SetXTitle("#eta");
1686 fhEtaPhiNoIso->SetYTitle("#phi");
1687 outputContainer->Add(fhEtaPhiNoIso) ;
1691 // For histograms in arrays, index in the array, corresponding to any particle origin
1693 for(Int_t imc = 0; imc < fgkNmcTypes; imc++)
1695 fhPtNoIsoMC[imc] = new TH1F(Form("hPtNoIsoMC%s",mcPartName[imc].Data()),
1696 Form("#it{p}_{T} of NOT isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
1697 nptbins,ptmin,ptmax);
1698 fhPtNoIsoMC[imc]->SetYTitle("#it{counts}");
1699 fhPtNoIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1700 outputContainer->Add(fhPtNoIsoMC[imc]) ;
1702 fhPtIsoMC[imc] = new TH1F(Form("hPtMC%s",mcPartName[imc].Data()),
1703 Form("#it{p}_{T} of isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
1704 nptbins,ptmin,ptmax);
1705 fhPtIsoMC[imc]->SetYTitle("#it{counts}");
1706 fhPtIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1707 outputContainer->Add(fhPtIsoMC[imc]) ;
1709 fhPhiIsoMC[imc] = new TH2F(Form("hPhiMC%s",mcPartName[imc].Data()),
1710 Form("#phi vs #it{p}_{T} of isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
1711 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
1712 fhPhiIsoMC[imc]->SetYTitle("#phi");
1713 fhPhiIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1714 outputContainer->Add(fhPhiIsoMC[imc]) ;
1716 fhEtaIsoMC[imc] = new TH2F(Form("hEtaMC%s",mcPartName[imc].Data()),
1717 Form("#phi vs #it{p}_{T} of isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
1718 nptbins,ptmin,ptmax,netabins,etamin,etamax);
1719 fhEtaIsoMC[imc]->SetYTitle("#eta");
1720 fhEtaIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1721 outputContainer->Add(fhEtaIsoMC[imc]) ;
1725 // Histograms for tagged candidates as decay
1726 if(fFillTaggedDecayHistograms)
1728 TString isoName [] = {"NoIso","Iso"};
1729 TString isoTitle[] = {"Not isolated" ,"isolated"};
1731 for(Int_t ibit = 0; ibit < fNDecayBits; ibit++)
1733 for(Int_t iso = 0; iso < 2; iso++)
1735 if(fMakeSeveralIC && iso) continue;
1736 fhPtDecay[iso][ibit] =
1737 new TH1F(Form("hPtDecay%s_bit%d",isoName[iso].Data(),fDecayBits[ibit]),
1738 Form("Number of %s leading pi0 decay particles vs #it{p}_{T}, bit %d, %s",isoTitle[iso].Data(),fDecayBits[ibit],parTitle.Data()),
1739 nptbins,ptmin,ptmax);
1740 fhPtDecay[iso][ibit]->SetYTitle("#it{counts}");
1741 fhPtDecay[iso][ibit]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1742 outputContainer->Add(fhPtDecay[iso][ibit]) ;
1744 fhEtaPhiDecay[iso][ibit] =
1745 new TH2F(Form("hEtaPhiDecay%s_bit%d",isoName[iso].Data(),fDecayBits[ibit]),
1746 Form("Number of %s leading Pi0 decay particles #eta vs #phi, bit %d, %s",isoTitle[iso].Data(),fDecayBits[ibit],parTitle.Data()),
1747 netabins,etamin,etamax,nphibins,phimin,phimax);
1748 fhEtaPhiDecay[iso][ibit]->SetXTitle("#eta");
1749 fhEtaPhiDecay[iso][ibit]->SetYTitle("#phi");
1750 outputContainer->Add(fhEtaPhiDecay[iso][ibit]) ;
1754 fhPtLambda0Decay[iso][ibit] = new TH2F
1755 (Form("hPtLambda0Decay%s_bit%d",isoName[iso].Data(),fDecayBits[ibit]),
1756 Form("%s cluster : #it{p}_{T} vs #lambda_{0}, decay bit %d, %s",isoTitle[iso].Data(), fDecayBits[ibit], parTitle.Data()),
1757 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1758 fhPtLambda0Decay[iso][ibit]->SetYTitle("#lambda_{0}^{2}");
1759 fhPtLambda0Decay[iso][ibit]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1760 outputContainer->Add(fhPtLambda0Decay[iso][ibit]) ;
1765 for(Int_t imc = 0; imc < fgkNmcTypes; imc++)
1767 fhPtDecayMC[iso][ibit][imc] =
1768 new TH1F(Form("hPtDecay%s_bit%d_MC%s",isoName[iso].Data(),fDecayBits[ibit],mcPartName[imc].Data()),
1769 Form("#it{p}_{T} of %s, decay bit %d, %s, %s",isoTitle[iso].Data(),fDecayBits[ibit],mcPartType[imc].Data(),parTitle.Data()),
1770 nptbins,ptmin,ptmax);
1771 fhPtDecayMC[iso][ibit][imc]->SetYTitle("#it{counts}");
1772 fhPtDecayMC[iso][ibit][imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1773 outputContainer->Add(fhPtDecayMC[iso][ibit][imc]) ;
1774 }// MC particle loop
1782 TString isoName [] = {"NoIso","Iso"};
1783 TString isoTitle[] = {"Not isolated" ,"isolated"};
1785 fhEIso = new TH1F("hE",
1786 Form("Number of isolated particles vs E, %s",parTitle.Data()),
1787 nptbins,ptmin,ptmax);
1788 fhEIso->SetYTitle("d#it{N} / d#it{E}");
1789 fhEIso->SetXTitle("#it{E} (GeV/#it{c})");
1790 outputContainer->Add(fhEIso) ;
1792 fhPtIso = new TH1F("hPt",
1793 Form("Number of isolated particles vs #it{p}_{T}, %s",parTitle.Data()),
1794 nptbins,ptmin,ptmax);
1795 fhPtIso->SetYTitle("d#it{N} / #it{p}_{T}");
1796 fhPtIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1797 outputContainer->Add(fhPtIso) ;
1799 fhPhiIso = new TH2F("hPhi",
1800 Form("Number of isolated particles vs #phi, %s",parTitle.Data()),
1801 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
1802 fhPhiIso->SetYTitle("#phi");
1803 fhPhiIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1804 outputContainer->Add(fhPhiIso) ;
1806 fhEtaIso = new TH2F("hEta",
1807 Form("Number of isolated particles vs #eta, %s",parTitle.Data()),
1808 nptbins,ptmin,ptmax,netabins,etamin,etamax);
1809 fhEtaIso->SetYTitle("#eta");
1810 fhEtaIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1811 outputContainer->Add(fhEtaIso) ;
1813 fhEtaPhiIso = new TH2F("hEtaPhiIso",
1814 Form("Number of isolated particles #eta vs #phi, %s",parTitle.Data()),
1815 netabins,etamin,etamax,nphibins,phimin,phimax);
1816 fhEtaPhiIso->SetXTitle("#eta");
1817 fhEtaPhiIso->SetYTitle("#phi");
1818 outputContainer->Add(fhEtaPhiIso) ;
1820 if(IsHighMultiplicityAnalysisOn())
1822 fhPtCentralityIso = new TH2F("hPtCentrality",
1823 Form("centrality vs #it{p}_{T} for isolated particles, %s",parTitle.Data()),
1824 nptbins,ptmin,ptmax, 100,0,100);
1825 fhPtCentralityIso->SetYTitle("centrality");
1826 fhPtCentralityIso->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1827 outputContainer->Add(fhPtCentralityIso) ;
1829 fhPtEventPlaneIso = new TH2F("hPtEventPlane",
1830 Form("event plane angle vs #it{p}_{T} for isolated particles, %s",parTitle.Data()),
1831 nptbins,ptmin,ptmax, 100,0,TMath::Pi());
1832 fhPtEventPlaneIso->SetYTitle("Event plane angle (rad)");
1833 fhPtEventPlaneIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1834 outputContainer->Add(fhPtEventPlaneIso) ;
1837 if(fFillNLMHistograms)
1839 fhPtNLocMaxIso = new TH2F("hPtNLocMax",
1840 Form("Number of isolated particles vs #it{p}_{T}, %s",parTitle.Data()),
1841 nptbins,ptmin,ptmax,10,0,10);
1842 fhPtNLocMaxIso->SetYTitle("#it{NLM}");
1843 fhPtNLocMaxIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1845 fhPtNLocMaxNoIso = new TH2F("hPtNLocMaxNoIso",
1846 Form("Number of not isolated particles vs #it{p}_{T}, %s",parTitle.Data()),
1847 nptbins,ptmin,ptmax,10,0,10);
1848 fhPtNLocMaxNoIso->SetYTitle("#it{NLM}");
1849 fhPtNLocMaxNoIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1850 outputContainer->Add(fhPtNLocMaxNoIso) ;
1853 fhConePtLead = new TH2F("hConePtLead",
1854 Form("Track or Cluster leading #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1855 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
1856 fhConePtLead->SetYTitle("#it{p}_{T, leading} (GeV/#it{c})");
1857 fhConePtLead->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1858 outputContainer->Add(fhConePtLead) ;
1860 fhConeSumPt = new TH2F("hConePtSum",
1861 Form("Track and Cluster #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1862 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1863 fhConeSumPt->SetYTitle("#Sigma #it{p}_{T}");
1864 fhConeSumPt->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1865 outputContainer->Add(fhConeSumPt) ;
1867 fhConeSumPtTrigEtaPhi = new TH2F("hConePtSumTrigEtaPhi",
1868 Form("Trigger #eta vs #phi, #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1869 netabins,etamin,etamax,nphibins,phimin,phimax);
1870 fhConeSumPtTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1871 fhConeSumPtTrigEtaPhi->SetXTitle("#eta_{trigger}");
1872 fhConeSumPtTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1873 outputContainer->Add(fhConeSumPtTrigEtaPhi) ;
1875 fhPtInCone = new TH2F("hPtInCone",
1876 Form("#it{p}_{T} of clusters and tracks in isolation cone for #it{R} = %2.2f",r),
1877 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
1878 fhPtInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
1879 fhPtInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1880 outputContainer->Add(fhPtInCone) ;
1882 if(fFillBackgroundBinHistograms)
1884 fhPtLeadConeBin = new TH1F*[fNBkgBin];
1885 fhSumPtConeBin = new TH1F*[fNBkgBin];
1888 fhPtLeadConeBinLambda0 = new TH2F*[fNBkgBin];
1889 fhSumPtConeBinLambda0 = new TH2F*[fNBkgBin];
1892 if(fFillTaggedDecayHistograms)
1894 fhPtLeadConeBinDecay = new TH1F*[fNBkgBin*fNDecayBits];
1895 fhSumPtConeBinDecay = new TH1F*[fNBkgBin*fNDecayBits];
1900 fhPtLeadConeBinMC = new TH1F*[fNBkgBin*fgkNmcTypes];
1901 fhSumPtConeBinMC = new TH1F*[fNBkgBin*fgkNmcTypes];
1905 fhPtLeadConeBinLambda0MC = new TH2F*[fNBkgBin*fgkNmcTypes];
1906 fhSumPtConeBinLambda0MC = new TH2F*[fNBkgBin*fgkNmcTypes];
1910 for(Int_t ibin = 0; ibin < fNBkgBin; ibin++)
1912 fhPtLeadConeBin[ibin] = new TH1F
1913 (Form("hPtLeadCone_Bin%d",ibin),
1914 Form("cone %2.2f<#it{p}_{T}^{leading}<%2.2f GeV/#it{c}, %s",
1915 fBkgBinLimit[ibin],fBkgBinLimit[ibin+1], parTitle.Data()),nptbins,ptmin,ptmax);
1916 fhPtLeadConeBin[ibin]->SetYTitle("d #it{N} / d #it{p}_{T}");
1917 fhPtLeadConeBin[ibin]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1918 outputContainer->Add(fhPtLeadConeBin[ibin]) ;
1920 fhSumPtConeBin[ibin] = new TH1F
1921 (Form("hSumPtCone_Bin%d",ibin),
1922 Form("in cone %2.2f <#Sigma #it{p}_{T}< %2.2f GeV/#it{c}, %s",
1923 fBkgBinLimit[ibin],fBkgBinLimit[ibin+1], parTitle.Data()),nptbins,ptmin,ptmax);
1924 fhSumPtConeBin[ibin]->SetYTitle("d #it{N} / d #it{p}_{T}");
1925 fhSumPtConeBin[ibin]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1926 outputContainer->Add(fhSumPtConeBin[ibin]) ;
1928 if(fFillTaggedDecayHistograms)
1930 for(Int_t idecay = 0; idecay < fNDecayBits; idecay++)
1932 Int_t bindecay = ibin+idecay*fNBkgBin;
1934 fhPtLeadConeBinDecay[bindecay] = new TH1F
1935 (Form("hPtLeadCone_Bin%d_DecayBit%d",ibin,fDecayBits[idecay]),
1936 Form("Decay bit %d, cone %2.2f<#it{p}_{T}^{leading}<%2.2f GeV/#it{c}, %s",
1937 fDecayBits[idecay],fBkgBinLimit[ibin],fBkgBinLimit[ibin+1], parTitle.Data()),nptbins,ptmin,ptmax);
1938 fhPtLeadConeBinDecay[bindecay]->SetYTitle("d #it{N} / d #it{p}_{T}");
1939 fhPtLeadConeBinDecay[bindecay]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1940 outputContainer->Add(fhPtLeadConeBinDecay[bindecay]) ;
1942 fhSumPtConeBinDecay[bindecay] = new TH1F
1943 (Form("hSumPtCone_Bin%d_DecayBit%d",ibin,fDecayBits[idecay]),
1944 Form("Decay bit %d, in cone %2.2f <#Sigma #it{p}_{T}< %2.2f GeV/#it{c}, %s",
1945 fDecayBits[idecay],fBkgBinLimit[ibin],fBkgBinLimit[ibin+1], parTitle.Data()),nptbins,ptmin,ptmax);
1946 fhSumPtConeBinDecay[bindecay]->SetYTitle("d #it{N} / d #it{p}_{T}");
1947 fhSumPtConeBinDecay[bindecay]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1948 outputContainer->Add(fhSumPtConeBinDecay[bindecay]) ;
1954 for(Int_t imc = 0; imc < fgkNmcTypes; imc++)
1956 Int_t binmc = ibin+imc*fNBkgBin;
1957 fhPtLeadConeBinMC[binmc] = new TH1F
1958 (Form("hPtLeadCone_Bin%d_MC%s",ibin, mcPartName[imc].Data()),
1959 Form("in cone %2.2f<#it{p}_{T}^{leading}<%2.2f GeV/#it{c}, MC %s, %s",
1960 fBkgBinLimit[ibin],fBkgBinLimit[ibin+1], mcPartType[imc].Data(), parTitle.Data()),nptbins,ptmin,ptmax);
1961 fhPtLeadConeBinMC[binmc]->SetYTitle("d #it{N} / d #it{p}_{T}");
1962 fhPtLeadConeBinMC[binmc]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1963 outputContainer->Add(fhPtLeadConeBinMC[binmc]) ;
1965 fhSumPtConeBinMC[binmc] = new TH1F
1966 (Form("hSumPtCone_Bin%d_MC%s",ibin,mcPartName[imc].Data()),
1967 Form("in cone %2.2f <#Sigma #it{p}_{T}< %2.2f GeV/#it{c}, MC %s, %s",
1968 fBkgBinLimit[ibin],fBkgBinLimit[ibin+1], mcPartType[imc].Data(), parTitle.Data()),nptbins,ptmin,ptmax);
1969 fhSumPtConeBinMC[binmc]->SetYTitle("d #it{N} / d #it{p}_{T}");
1970 fhSumPtConeBinMC[binmc]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1971 outputContainer->Add(fhSumPtConeBinMC[binmc]) ;
1972 } // MC particle loop
1977 fhPtLeadConeBinLambda0[ibin] = new TH2F
1978 (Form("hPtLeadConeLambda0_Bin%d",ibin),
1979 Form("#lambda_{0}, in cone %2.2f<#it{p}_{T}^{leading}<%2.2f GeV/#it{c}, %s",
1980 fBkgBinLimit[ibin],fBkgBinLimit[ibin+1], parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1981 fhPtLeadConeBinLambda0[ibin]->SetYTitle("#lambda_{0}^{2}");
1982 fhPtLeadConeBinLambda0[ibin]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1983 outputContainer->Add(fhPtLeadConeBinLambda0[ibin]) ;
1985 fhSumPtConeBinLambda0[ibin] = new TH2F
1986 (Form("hSumPtConeLambda0_Bin%d",ibin),
1987 Form("#lambda_{0}, in cone %2.2f <#Sigma #it{p}_{T}< %2.2f GeV/#it{c}, %s",
1988 fBkgBinLimit[ibin],fBkgBinLimit[ibin+1], parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1989 fhSumPtConeBinLambda0[ibin]->SetYTitle("#lambda_{0}^{2}");
1990 fhSumPtConeBinLambda0[ibin]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1991 outputContainer->Add(fhSumPtConeBinLambda0[ibin]) ;
1995 for(Int_t imc = 0; imc < fgkNmcTypes; imc++)
1997 Int_t binmc = ibin+imc*fNBkgBin;
1998 fhPtLeadConeBinLambda0MC[binmc] = new TH2F
1999 (Form("hPtLeadConeLambda0_Bin%d_MC%s",ibin, mcPartName[imc].Data()),
2000 Form("#lambda_{0}, in cone %2.2f<#it{p}_{T}^{leading}<%2.2f GeV/#it{c}, MC %s, %s",
2001 fBkgBinLimit[ibin],fBkgBinLimit[ibin+1], mcPartType[imc].Data(), parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2002 fhPtLeadConeBinLambda0MC[binmc]->SetYTitle("#lambda_{0}^{2}");
2003 fhPtLeadConeBinLambda0MC[binmc]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2004 outputContainer->Add(fhPtLeadConeBinLambda0MC[binmc]) ;
2006 fhSumPtConeBinLambda0MC[binmc] = new TH2F
2007 (Form("hSumPtConeLambda0_Bin%d_MC%s",ibin,mcPartName[imc].Data()),
2008 Form("#lambda_{0}, in cone %2.2f <#Sigma #it{p}_{T}< %2.2f GeV/#it{c}, MC %s, %s",
2009 fBkgBinLimit[ibin],fBkgBinLimit[ibin+1], mcPartType[imc].Data(), parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2010 fhSumPtConeBinLambda0MC[binmc]->SetYTitle("#lambda_{0}^{2}");
2011 fhSumPtConeBinLambda0MC[binmc]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2012 outputContainer->Add(fhSumPtConeBinLambda0MC[binmc]) ;
2013 } // MC particle loop
2015 } // shower shape on
2016 } // pt in cone bin loop
2017 } // bkg cone pt bin histograms
2019 if(fFillPtTrigBinHistograms)
2021 fhPtTrigBinPtLeadCone = new TH1F*[fNPtTrigBin];
2022 fhPtTrigBinSumPtCone = new TH1F*[fNPtTrigBin];
2024 fhPtTrigBinPtLeadConeDecay = new TH1F*[fNPtTrigBin];
2025 fhPtTrigBinSumPtConeDecay = new TH1F*[fNPtTrigBin];
2029 fhPtTrigBinPtLeadConeMC = new TH1F*[fNPtTrigBin*fgkNmcTypes];
2030 fhPtTrigBinSumPtConeMC = new TH1F*[fNPtTrigBin*fgkNmcTypes];
2035 fhPtTrigBinLambda0vsPtLeadCone = new TH2F*[fNPtTrigBin];
2036 fhPtTrigBinLambda0vsSumPtCone = new TH2F*[fNPtTrigBin];
2040 fhPtTrigBinLambda0vsPtLeadConeMC = new TH2F*[fNPtTrigBin*fgkNmcTypes];
2041 fhPtTrigBinLambda0vsSumPtConeMC = new TH2F*[fNPtTrigBin*fgkNmcTypes];
2045 for(Int_t ibin = 0; ibin < fNPtTrigBin; ibin++)
2047 fhPtTrigBinPtLeadCone[ibin] = new TH1F
2048 (Form("hPtTrigBin_PtLeadCone_Bin%d",ibin),
2049 Form("#it{p}_{T}^{lead. in cone}, %2.2f<#it{p}_{T}^{cand}<%2.2f GeV/#it{c}, %s",
2050 fPtTrigBinLimit[ibin],fPtTrigBinLimit[ibin+1], parTitle.Data()),nptbins,ptmin,ptmax);
2051 fhPtTrigBinPtLeadCone[ibin]->SetYTitle("d #it{N} / d #it{p}_{T}");
2052 fhPtTrigBinPtLeadCone[ibin]->SetXTitle("#it{p}_{T}^{in cone} (GeV/#it{c})");
2053 outputContainer->Add(fhPtTrigBinPtLeadCone[ibin]) ;
2055 fhPtTrigBinSumPtCone[ibin] = new TH1F
2056 (Form("hPtTrigBin_SumPtCone_Bin%d",ibin),
2057 Form("#Sigma #it{p}_{T}^{in cone} %2.2f <#it{p}_{T}^{cand}< %2.2f GeV/#it{c}, %s",
2058 fPtTrigBinLimit[ibin],fPtTrigBinLimit[ibin+1], parTitle.Data()),nptsumbins,ptsummin,ptsummax);
2059 fhPtTrigBinSumPtCone[ibin]->SetYTitle("d #it{N} / d #it{p}_{T}");
2060 fhPtTrigBinSumPtCone[ibin]->SetXTitle("#Sigma #it{p}_{T}^{in cone} (GeV/#it{c})");
2061 outputContainer->Add(fhPtTrigBinSumPtCone[ibin]) ;
2063 if(fFillTaggedDecayHistograms)
2065 for(Int_t idecay = 0; idecay < fNDecayBits; idecay++)
2067 Int_t binDecay = ibin+idecay*fNPtTrigBin;
2069 fhPtTrigBinPtLeadConeDecay[binDecay] = new TH1F
2070 (Form("hPtTrigBin_PtLeadCone_Bin%d_DecayBit%d",ibin,fDecayBits[idecay]),
2071 Form("Decay bit %d, #it{p}_{T}^{lead. in cone}, %2.2f<#it{p}_{T}^{cand}<%2.2f GeV/#it{c}, %s",
2072 fDecayBits[idecay],fPtTrigBinLimit[ibin],fPtTrigBinLimit[ibin+1], parTitle.Data()),nptbins,ptmin,ptmax);
2073 fhPtTrigBinPtLeadConeDecay[binDecay]->SetYTitle("d #it{N} / d #it{p}_{T}");
2074 fhPtTrigBinPtLeadConeDecay[binDecay]->SetXTitle("#it{p}_{T}^{lead in cone} (GeV/#it{c})");
2075 outputContainer->Add(fhPtTrigBinPtLeadConeDecay[binDecay]) ;
2077 fhPtTrigBinSumPtConeDecay[binDecay] = new TH1F
2078 (Form("hPtTrigBin_SumPtCone_Bin%d_DecayBit%d",ibin,fDecayBits[idecay]),
2079 Form("Decay bit %d, #Sigma #it{p}_{T}^{in cone} %2.2f <#it{p}_{T}^{cand}< %2.2f GeV/#it{c}, %s",
2080 fDecayBits[idecay],fPtTrigBinLimit[ibin],fPtTrigBinLimit[ibin+1], parTitle.Data()),nptsumbins,ptsummin,ptsummax);
2081 fhPtTrigBinSumPtConeDecay[binDecay]->SetYTitle("d #it{N} / d #it{p}_{T}");
2082 fhPtTrigBinSumPtConeDecay[binDecay]->SetXTitle("#Sigma #it{p}_{T}^{in cone} (GeV/#it{c})");
2083 outputContainer->Add(fhPtTrigBinSumPtConeDecay[binDecay]) ;
2089 for(Int_t imc = 0; imc < fgkNmcTypes; imc++)
2091 Int_t binmc = ibin+imc*fNPtTrigBin;
2092 fhPtTrigBinPtLeadConeMC[binmc] = new TH1F
2093 (Form("hPtTrigBin_PtLeadCone_Bin%d_MC%s",ibin, mcPartName[imc].Data()),
2094 Form("#it{p}_{T}^{lead. in cone}, %2.2f<#it{p}_{T}^{cand}<%2.2f GeV/#it{c}, MC %s, %s",
2095 fPtTrigBinLimit[ibin],fPtTrigBinLimit[ibin+1], mcPartType[imc].Data(), parTitle.Data()),nptbins,ptmin,ptmax);
2096 fhPtTrigBinPtLeadConeMC[binmc]->SetYTitle("d #it{N} / d #it{p}_{T}");
2097 fhPtTrigBinPtLeadConeMC[binmc]->SetXTitle("#it{p}_{T}^{lead in cone} (GeV/#it{c})");
2098 outputContainer->Add(fhPtTrigBinPtLeadConeMC[binmc]) ;
2100 fhPtTrigBinSumPtConeMC[binmc] = new TH1F
2101 (Form("hPtTrigBin_SumPtCone_Bin%d_MC%s",ibin,mcPartName[imc].Data()),
2102 Form("#Sigma #it{p}_{T}^{in cone}, %2.2f <#it{p}_{T}^{cand}< %2.2f GeV/#it{c}, MC %s, %s",
2103 fPtTrigBinLimit[ibin],fPtTrigBinLimit[ibin+1], mcPartType[imc].Data(), parTitle.Data()),nptsumbins,ptsummin,ptsummax);
2104 fhPtTrigBinSumPtConeMC[binmc]->SetYTitle("d #it{N} / d #it{p}_{T}");
2105 fhPtTrigBinSumPtConeMC[binmc]->SetXTitle("#Sigma #it{p}_{T}^{in cone} (GeV/#it{c})");
2106 outputContainer->Add(fhPtTrigBinSumPtConeMC[binmc]) ;
2107 } // MC particle loop
2112 fhPtTrigBinLambda0vsPtLeadCone[ibin] = new TH2F
2113 (Form("hPtTrigBin_PtLeadConeVSLambda0_Bin%d",ibin),
2114 Form("#lambda_{0} vs #it{p}_{T}^{lead. in cone}, %2.2f<#it{p}_{T}^{cand}<%2.2f GeV/#it{c}, %s",
2115 fPtTrigBinLimit[ibin],fPtTrigBinLimit[ibin+1], parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2116 fhPtTrigBinLambda0vsPtLeadCone[ibin]->SetYTitle("#lambda_{0}^{2}");
2117 fhPtTrigBinLambda0vsPtLeadCone[ibin]->SetXTitle("#it{p}_{T}^{lead in cone} (GeV/#it{c})");
2118 outputContainer->Add(fhPtTrigBinLambda0vsPtLeadCone[ibin]) ;
2120 fhPtTrigBinLambda0vsSumPtCone[ibin] = new TH2F
2121 (Form("hPtTrigBin_SumPtConeVSLambda0_Bin%d",ibin),
2122 Form("#lambda_{0} vs #Sigma #it{p}_{T}^{in cone} %2.2f <#it{p}_{T}^{cand}< %2.2f GeV/#it{c}, %s",
2123 fPtTrigBinLimit[ibin],fPtTrigBinLimit[ibin+1], parTitle.Data()),nptsumbins,ptsummin,ptsummax,ssbins,ssmin,ssmax);
2124 fhPtTrigBinLambda0vsSumPtCone[ibin]->SetYTitle("#lambda_{0}^{2}");
2125 fhPtTrigBinLambda0vsSumPtCone[ibin]->SetXTitle("#Sigma #it{p}_{T}^{in cone} (GeV/#it{c})");
2126 outputContainer->Add(fhPtTrigBinLambda0vsSumPtCone[ibin]) ;
2130 for(Int_t imc = 0; imc < fgkNmcTypes; imc++)
2132 Int_t binmc = ibin+imc*fNPtTrigBin;
2133 fhPtTrigBinLambda0vsPtLeadConeMC[binmc] = new TH2F
2134 (Form("hPtTrigBin_PtLeadConeVSLambda0_Bin%d_MC%s",ibin, mcPartName[imc].Data()),
2135 Form("#lambda_{0} vs #it{p}_{T}^{lead. in cone}, %2.2f<#it{p}_{T}^{cand}<%2.2f GeV/#it{c}, MC %s, %s",
2136 fPtTrigBinLimit[ibin],fPtTrigBinLimit[ibin+1], mcPartType[imc].Data(), parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2137 fhPtTrigBinLambda0vsPtLeadConeMC[binmc]->SetYTitle("#lambda_{0}^{2}");
2138 fhPtTrigBinLambda0vsPtLeadConeMC[binmc]->SetXTitle("#it{p}_{T}^{lead in cone} (GeV/#it{c})");
2139 outputContainer->Add(fhPtTrigBinLambda0vsPtLeadConeMC[binmc]) ;
2141 fhPtTrigBinLambda0vsSumPtConeMC[binmc] = new TH2F
2142 (Form("hPtTrigBin_SumPtConeVSLambda0_Bin%d_MC%s",ibin,mcPartName[imc].Data()),
2143 Form("#lambda_{0} vs #Sigma #it{p}_{T}^{in cone}, %2.2f <#it{p}_{T}^{cand}< %2.2f GeV/#it{c}, MC %s, %s",
2144 fPtTrigBinLimit[ibin],fPtTrigBinLimit[ibin+1], mcPartType[imc].Data(), parTitle.Data()),nptsumbins,ptsummin,ptsummax,ssbins,ssmin,ssmax);
2145 fhPtTrigBinLambda0vsSumPtConeMC[binmc]->SetYTitle("#lambda_{0}^{2}");
2146 fhPtTrigBinLambda0vsSumPtConeMC[binmc]->SetXTitle("#Sigma #it{p}_{T}^{in cone} (GeV/#it{c})");
2147 outputContainer->Add(fhPtTrigBinLambda0vsSumPtConeMC[binmc]) ;
2148 } // MC particle loop
2151 } // pt trig bin loop
2152 } // pt trig bin histograms
2154 if(IsHighMultiplicityAnalysisOn())
2156 fhPtInConeCent = new TH2F("hPtInConeCent",
2157 Form("#it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2158 100,0,100,nptinconebins,ptinconemin,ptinconemax);
2159 fhPtInConeCent->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2160 fhPtInConeCent->SetXTitle("centrality");
2161 outputContainer->Add(fhPtInConeCent) ;
2164 // Cluster only histograms
2165 if(GetIsolationCut()->GetParticleTypeInCone()!=AliIsolationCut::kOnlyCharged)
2167 fhConeSumPtCluster = new TH2F("hConePtSumCluster",
2168 Form("Cluster #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2169 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2170 fhConeSumPtCluster->SetYTitle("#Sigma #it{p}_{T}");
2171 fhConeSumPtCluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2172 outputContainer->Add(fhConeSumPtCluster) ;
2174 fhConePtLeadCluster = new TH2F("hConeLeadPtCluster",
2175 Form("Cluster leading in isolation cone for #it{R} = %2.2f",r),
2176 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
2177 fhConePtLeadCluster->SetYTitle("#it{p}_{T, leading} (GeV/#it{c})");
2178 fhConePtLeadCluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2179 outputContainer->Add(fhConePtLeadCluster) ;
2182 if(fFillCellHistograms)
2184 fhConeSumPtCell = new TH2F("hConePtSumCell",
2185 Form("Cell #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2186 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2187 fhConeSumPtCell->SetYTitle("#Sigma #it{p}_{T}");
2188 fhConeSumPtCell->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2189 outputContainer->Add(fhConeSumPtCell) ;
2192 if(fFillUEBandSubtractHistograms)
2194 fhConeSumPtEtaBandUECluster = new TH2F("hConePtSumEtaBandUECluster",
2195 "#Sigma cluster #it{p}_{T} in UE Eta Band",
2196 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2197 fhConeSumPtEtaBandUECluster->SetYTitle("#Sigma #it{p}_{T}");
2198 fhConeSumPtEtaBandUECluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2199 outputContainer->Add(fhConeSumPtEtaBandUECluster) ;
2201 fhConeSumPtPhiBandUECluster = new TH2F("hConePtSumPhiBandUECluster",
2202 "#Sigma cluster #it{p}_{T} UE Phi Band",
2203 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2204 fhConeSumPtPhiBandUECluster->SetYTitle("#Sigma #it{p}_{T}");
2205 fhConeSumPtPhiBandUECluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2206 outputContainer->Add(fhConeSumPtPhiBandUECluster) ;
2208 fhConeSumPtEtaBandUEClusterTrigEtaPhi = new TH2F("hConePtSumEtaBandUEClusterTrigEtaPhi",
2209 "Trigger #eta vs #phi, #Sigma cluster #it{p}_{T} in UE Eta Band",
2210 netabins,etamin,etamax,nphibins,phimin,phimax);
2211 fhConeSumPtEtaBandUEClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2212 fhConeSumPtEtaBandUEClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
2213 fhConeSumPtEtaBandUEClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2214 outputContainer->Add(fhConeSumPtEtaBandUEClusterTrigEtaPhi) ;
2216 fhConeSumPtPhiBandUEClusterTrigEtaPhi = new TH2F("hConePtSumPhiBandUEClusterTrigEtaPhi",
2217 "Trigger #eta vs #phi, #Sigma cluster #it{p}_{T} UE Phi Band",
2218 netabins,etamin,etamax,nphibins,phimin,phimax);
2219 fhConeSumPtPhiBandUEClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2220 fhConeSumPtPhiBandUEClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
2221 fhConeSumPtPhiBandUEClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2222 outputContainer->Add(fhConeSumPtPhiBandUEClusterTrigEtaPhi) ;
2223 if(fFillCellHistograms)
2226 fhConeSumPtEtaBandUECell = new TH2F("hConePtSumEtaBandUECell",
2227 "#Sigma cell #it{p}_{T} in UE Eta Band",
2228 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2229 fhConeSumPtEtaBandUECell->SetYTitle("#Sigma #it{p}_{T}");
2230 fhConeSumPtEtaBandUECell->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2231 outputContainer->Add(fhConeSumPtEtaBandUECell) ;
2233 fhConeSumPtPhiBandUECell = new TH2F("hConePtSumPhiBandUECell",
2234 "#Sigma cell #it{p}_{T} UE Phi Band",
2235 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2236 fhConeSumPtPhiBandUECell->SetYTitle("#Sigma #it{p}_{T}");
2237 fhConeSumPtPhiBandUECell->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2238 outputContainer->Add(fhConeSumPtPhiBandUECell) ;
2240 fhConeSumPtEtaBandUECellTrigEtaPhi = new TH2F("hConePtSumEtaBandUECellTrigEtaPhi",
2241 "Trigger #eta vs #phi, #Sigma cell #it{p}_{T} in UE Eta Band",
2242 netabins,etamin,etamax,nphibins,phimin,phimax);
2243 fhConeSumPtEtaBandUECellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2244 fhConeSumPtEtaBandUECellTrigEtaPhi->SetXTitle("#eta_{trigger}");
2245 fhConeSumPtEtaBandUECellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2246 outputContainer->Add(fhConeSumPtEtaBandUECellTrigEtaPhi) ;
2248 fhConeSumPtPhiBandUECellTrigEtaPhi = new TH2F("hConePtSumPhiBandUECellTrigEtaPhi",
2249 "Trigger #eta vs #phi, #Sigma cell #it{p}_{T} UE Phi Band",
2250 netabins,etamin,etamax,nphibins,phimin,phimax);
2251 fhConeSumPtPhiBandUECellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2252 fhConeSumPtPhiBandUECellTrigEtaPhi->SetXTitle("#eta_{trigger}");
2253 fhConeSumPtPhiBandUECellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2254 outputContainer->Add(fhConeSumPtPhiBandUECellTrigEtaPhi) ;
2257 fhEtaBandCluster = new TH2F("hEtaBandCluster",
2258 Form("#eta vs #phi of clusters in #eta band isolation cone for #it{R} = %2.2f",r),
2259 netabins,-1,1,nphibins,0,TMath::TwoPi());
2260 fhEtaBandCluster->SetXTitle("#eta");
2261 fhEtaBandCluster->SetYTitle("#phi");
2262 outputContainer->Add(fhEtaBandCluster) ;
2264 fhPhiBandCluster = new TH2F("hPhiBandCluster",
2265 Form("#eta vs #phi of clusters in #phi band isolation cone for #it{R} = %2.2f",r),
2266 netabins,-1,1,nphibins,0,TMath::TwoPi());
2267 fhPhiBandCluster->SetXTitle("#eta");
2268 fhPhiBandCluster->SetYTitle("#phi");
2269 outputContainer->Add(fhPhiBandCluster) ;
2271 fhEtaPhiInConeCluster= new TH2F("hEtaPhiInConeCluster",
2272 Form("#eta vs #phi of clusters in cone for #it{R} = %2.2f",r),
2273 netabins,-1,1,nphibins,0,TMath::TwoPi());
2274 fhEtaPhiInConeCluster->SetXTitle("#eta");
2275 fhEtaPhiInConeCluster->SetYTitle("#phi");
2276 outputContainer->Add(fhEtaPhiInConeCluster) ;
2278 fhEtaPhiCluster= new TH2F("hEtaPhiCluster",
2279 Form("#eta vs #phi of all clusters"),
2280 netabins,-1,1,nphibins,0,TMath::TwoPi());
2281 fhEtaPhiCluster->SetXTitle("#eta");
2282 fhEtaPhiCluster->SetYTitle("#phi");
2283 outputContainer->Add(fhEtaPhiCluster) ;
2287 fhPtClusterInCone = new TH2F("hPtClusterInCone",
2288 Form("#it{p}_{T} of clusters in isolation cone for #it{R} = %2.2f",r),
2289 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2290 fhPtClusterInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2291 fhPtClusterInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2292 outputContainer->Add(fhPtClusterInCone) ;
2294 if(fFillCellHistograms)
2296 fhPtCellInCone = new TH2F("hPtCellInCone",
2297 Form("#it{p}_{T} of cells in isolation cone for #it{R} = %2.2f",r),
2298 nptbins,ptmin,ptmax,1000,0,50);
2299 fhPtCellInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2300 fhPtCellInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2301 outputContainer->Add(fhPtCellInCone) ;
2303 fhEtaBandCell = new TH2F("hEtaBandCell",
2304 Form("#col vs #row of cells in #eta band isolation cone for #it{R} = %2.2f",r),
2306 fhEtaBandCell->SetXTitle("#col");
2307 fhEtaBandCell->SetYTitle("#row");
2308 outputContainer->Add(fhEtaBandCell) ;
2310 fhPhiBandCell = new TH2F("hPhiBandCell",
2311 Form("#col vs #row of cells in #phi band isolation cone for #it{R} = %2.2f",r),
2313 fhPhiBandCell->SetXTitle("#col");
2314 fhPhiBandCell->SetYTitle("#row");
2315 outputContainer->Add(fhPhiBandCell) ;
2318 if(fFillUEBandSubtractHistograms)
2320 fhConeSumPtEtaUESubCluster = new TH2F("hConeSumPtEtaUESubCluster",
2321 Form("Clusters #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
2322 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2323 fhConeSumPtEtaUESubCluster->SetYTitle("#Sigma #it{p}_{T}");
2324 fhConeSumPtEtaUESubCluster->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2325 outputContainer->Add(fhConeSumPtEtaUESubCluster) ;
2327 fhConeSumPtPhiUESubCluster = new TH2F("hConeSumPtPhiUESubCluster",
2328 Form("Clusters #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
2329 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2330 fhConeSumPtPhiUESubCluster->SetYTitle("#Sigma #it{p}_{T}");
2331 fhConeSumPtPhiUESubCluster->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2332 outputContainer->Add(fhConeSumPtPhiUESubCluster) ;
2334 fhConeSumPtEtaUESubClusterTrigEtaPhi = new TH2F("hConeSumPtEtaUESubClusterTrigEtaPhi",
2335 Form("Trigger #eta vs #phi, Clusters #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
2336 netabins,etamin,etamax,nphibins,phimin,phimax);
2337 fhConeSumPtEtaUESubClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2338 fhConeSumPtEtaUESubClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
2339 fhConeSumPtEtaUESubClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2340 outputContainer->Add(fhConeSumPtEtaUESubClusterTrigEtaPhi) ;
2342 fhConeSumPtPhiUESubClusterTrigEtaPhi = new TH2F("hConeSumPtPhiUESubClusterTrigEtaPhi",
2343 Form("Trigger #eta vs #phi, Clusters #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
2344 netabins,etamin,etamax,nphibins,phimin,phimax);
2345 fhConeSumPtPhiUESubClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2346 fhConeSumPtPhiUESubClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
2347 fhConeSumPtPhiUESubClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2348 outputContainer->Add(fhConeSumPtPhiUESubClusterTrigEtaPhi) ;
2350 if(fFillCellHistograms)
2352 fhConeSumPtEtaUESubCell = new TH2F("hConeSumPtEtaUESubCell",
2353 Form("Cells #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
2354 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2355 fhConeSumPtEtaUESubCell->SetYTitle("#Sigma #it{p}_{T}");
2356 fhConeSumPtEtaUESubCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2357 outputContainer->Add(fhConeSumPtEtaUESubCell) ;
2359 fhConeSumPtPhiUESubCell = new TH2F("hConeSumPtPhiUESubCell",
2360 Form("Cells #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
2361 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2362 fhConeSumPtPhiUESubCell->SetYTitle("#Sigma #it{p}_{T}");
2363 fhConeSumPtPhiUESubCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2364 outputContainer->Add(fhConeSumPtPhiUESubCell) ;
2366 fhConeSumPtEtaUESubCellTrigEtaPhi = new TH2F("hConeSumPtEtaUESubCellTrigEtaPhi",
2367 Form("Trigger #eta vs #phi, Cells #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
2368 netabins,etamin,etamax,nphibins,phimin,phimax);
2369 fhConeSumPtEtaUESubCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2370 fhConeSumPtEtaUESubCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
2371 fhConeSumPtEtaUESubCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2372 outputContainer->Add(fhConeSumPtEtaUESubCellTrigEtaPhi) ;
2374 fhConeSumPtPhiUESubCellTrigEtaPhi = new TH2F("hConeSumPtPhiUESubCellTrigEtaPhi",
2375 Form("Trigger #eta vs #phi, Cells #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
2376 netabins,etamin,etamax,nphibins,phimin,phimax);
2377 fhConeSumPtPhiUESubCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2378 fhConeSumPtPhiUESubCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
2379 fhConeSumPtPhiUESubCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2380 outputContainer->Add(fhConeSumPtPhiUESubCellTrigEtaPhi) ;
2383 fhFractionClusterOutConeEta = new TH2F("hFractionClusterOutConeEta",
2384 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #eta acceptance",r),
2385 nptbins,ptmin,ptmax,100,0,1);
2386 fhFractionClusterOutConeEta->SetYTitle("#it{fraction}");
2387 fhFractionClusterOutConeEta->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
2388 outputContainer->Add(fhFractionClusterOutConeEta) ;
2390 fhFractionClusterOutConeEtaTrigEtaPhi = new TH2F("hFractionClusterOutConeEtaTrigEtaPhi",
2391 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #eta acceptance, in trigger #eta-#phi ",r),
2392 netabins,etamin,etamax,nphibins,phimin,phimax);
2393 fhFractionClusterOutConeEtaTrigEtaPhi->SetZTitle("#it{fraction}");
2394 fhFractionClusterOutConeEtaTrigEtaPhi->SetXTitle("#eta_{trigger}");
2395 fhFractionClusterOutConeEtaTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2396 outputContainer->Add(fhFractionClusterOutConeEtaTrigEtaPhi) ;
2398 fhFractionClusterOutConePhi = new TH2F("hFractionClusterOutConePhi",
2399 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #phi acceptance",r),
2400 nptbins,ptmin,ptmax,100,0,1);
2401 fhFractionClusterOutConePhi->SetYTitle("#it{fraction}");
2402 fhFractionClusterOutConePhi->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
2403 outputContainer->Add(fhFractionClusterOutConePhi) ;
2405 fhFractionClusterOutConePhiTrigEtaPhi = new TH2F("hFractionClusterOutConePhiTrigEtaPhi",
2406 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #phi acceptance, in trigger #eta-#phi ",r),
2407 netabins,etamin,etamax,nphibins,phimin,phimax);
2408 fhFractionClusterOutConePhiTrigEtaPhi->SetZTitle("#it{fraction}");
2409 fhFractionClusterOutConePhiTrigEtaPhi->SetXTitle("#eta_{trigger}");
2410 fhFractionClusterOutConePhiTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2411 outputContainer->Add(fhFractionClusterOutConePhiTrigEtaPhi) ;
2413 fhConeSumPtSubvsConeSumPtTotPhiCluster = new TH2F("hConeSumPtSubvsConeSumPtTotPhiCluster",
2414 Form("#Sigma #it{p}_{T} in cone after bkg sub from #phi band vs #Sigma #it{p}_{T} in cone before bkg sub, R=%2.2f",r),
2415 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2416 fhConeSumPtSubvsConeSumPtTotPhiCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2417 fhConeSumPtSubvsConeSumPtTotPhiCluster->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
2418 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotPhiCluster);
2420 fhConeSumPtSubNormvsConeSumPtTotPhiCluster = new TH2F("hConeSumPtSubNormvsConeSumPtTotPhiCluster",
2421 Form("#Sigma #it{p}_{T, norm} in cone after bkg sub from #phi band vs #Sigma #it{p}_{T} in cone before bkg sub, R=%2.2f",r),
2422 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2423 fhConeSumPtSubNormvsConeSumPtTotPhiCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2424 fhConeSumPtSubNormvsConeSumPtTotPhiCluster->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2425 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotPhiCluster);
2427 fhConeSumPtSubvsConeSumPtTotEtaCluster = new TH2F("hConeSumPtSubvsConeSumPtTotEtaCluster",
2428 Form("#Sigma #it{p}_{T} in cone after bkg sub from #eta band vs #Sigma #it{p}_{T} in cone before bkg sub, R=%2.2f",r),
2429 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2430 fhConeSumPtSubvsConeSumPtTotEtaCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2431 fhConeSumPtSubvsConeSumPtTotEtaCluster->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
2432 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotEtaCluster);
2434 fhConeSumPtSubNormvsConeSumPtTotEtaCluster = new TH2F("hConeSumPtSubNormvsConeSumPtTotEtaCluster",
2435 Form("#Sigma #it{p}_{T, norm} in cone after bkg sub from #eta band vs #Sigma #it{p}_{T} in cone before bkg sub, R=%2.2f",r),
2436 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2437 fhConeSumPtSubNormvsConeSumPtTotEtaCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2438 fhConeSumPtSubNormvsConeSumPtTotEtaCluster->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2439 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotEtaCluster);
2441 fhConeSumPtVSUEClusterEtaBand = new TH2F("hConeSumPtVSUEClusterEtaBand",
2442 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in eta band for cluster (before normalization), R=%2.2f",r),
2443 nptsumbins,ptsummin,ptsummax,2*nptsumbins,ptsummin,2*ptsummax);
2444 fhConeSumPtVSUEClusterEtaBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
2445 fhConeSumPtVSUEClusterEtaBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
2446 outputContainer->Add(fhConeSumPtVSUEClusterEtaBand);
2448 fhConeSumPtVSUEClusterPhiBand = new TH2F("hConeSumPtVSUEClusterPhiBand",
2449 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in phi band for cluster (before normalization), R=%2.2f",r),
2450 nptsumbins,ptsummin,ptsummax,8*nptsumbins,ptsummin,8*ptsummax);
2451 fhConeSumPtVSUEClusterPhiBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
2452 fhConeSumPtVSUEClusterPhiBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
2453 outputContainer->Add(fhConeSumPtVSUEClusterPhiBand);
2455 if(fFillCellHistograms)
2457 fhFractionCellOutConeEta = new TH2F("hFractionCellOutConeEta",
2458 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #eta acceptance",r),
2459 nptbins,ptmin,ptmax,100,0,1);
2460 fhFractionCellOutConeEta->SetYTitle("#it{fraction}");
2461 fhFractionCellOutConeEta->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
2462 outputContainer->Add(fhFractionCellOutConeEta) ;
2464 fhFractionCellOutConeEtaTrigEtaPhi = new TH2F("hFractionCellOutConeEtaTrigEtaPhi",
2465 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #eta acceptance, in trigger #eta-#phi ",r),
2466 netabins,etamin,etamax,nphibins,phimin,phimax);
2467 fhFractionCellOutConeEtaTrigEtaPhi->SetZTitle("#it{fraction}");
2468 fhFractionCellOutConeEtaTrigEtaPhi->SetXTitle("#eta_{trigger}");
2469 fhFractionCellOutConeEtaTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2470 outputContainer->Add(fhFractionCellOutConeEtaTrigEtaPhi) ;
2472 fhFractionCellOutConePhi = new TH2F("hFractionCellOutConePhi",
2473 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #phi acceptance",r),
2474 nptbins,ptmin,ptmax,100,0,1);
2475 fhFractionCellOutConePhi->SetYTitle("#it{fraction}");
2476 fhFractionCellOutConePhi->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
2477 outputContainer->Add(fhFractionCellOutConePhi) ;
2479 fhFractionCellOutConePhiTrigEtaPhi = new TH2F("hFractionCellOutConePhiTrigEtaPhi",
2480 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #phi acceptance, in trigger #eta-#phi ",r),
2481 netabins,etamin,etamax,nphibins,phimin,phimax);
2482 fhFractionCellOutConePhiTrigEtaPhi->SetZTitle("#it{fraction}");
2483 fhFractionCellOutConePhiTrigEtaPhi->SetXTitle("#eta_{trigger}");
2484 fhFractionCellOutConePhiTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2485 outputContainer->Add(fhFractionCellOutConePhiTrigEtaPhi) ;
2488 fhConeSumPtSubvsConeSumPtTotPhiCell = new TH2F("hConeSumPtSubvsConeSumPtTotPhiCell",
2489 Form("#Sigma #it{p}_{T} in cone after bkg sub from #phi band vs #Sigma #it{p}_{T} in cone before bkg sub, R=%2.2f",r),
2490 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2491 fhConeSumPtSubvsConeSumPtTotPhiCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2492 fhConeSumPtSubvsConeSumPtTotPhiCell->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
2493 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotPhiCell);
2495 fhConeSumPtSubNormvsConeSumPtTotPhiCell = new TH2F("hConeSumPtSubNormvsConeSumPtTotPhiCell",
2496 Form("#Sigma #it{p}_{T, norm} in cone after bkg sub from #phi band vs #Sigma #it{p}_{T} in cone before bkg sub, R=%2.2f",r),
2497 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2498 fhConeSumPtSubNormvsConeSumPtTotPhiCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2499 fhConeSumPtSubNormvsConeSumPtTotPhiCell->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2500 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotPhiCell);
2502 fhConeSumPtSubvsConeSumPtTotEtaCell = new TH2F("hConeSumPtSubvsConeSumPtTotEtaCell",
2503 Form("#Sigma #it{p}_{T} in cone after bkg sub from #eta band vs #Sigma #it{p}_{T} in cone before bkg sub, R=%2.2f",r),
2504 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2505 fhConeSumPtSubvsConeSumPtTotEtaCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2506 fhConeSumPtSubvsConeSumPtTotEtaCell->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
2507 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotEtaCell);
2509 fhConeSumPtSubNormvsConeSumPtTotEtaCell = new TH2F("hConeSumPtSubNormvsConeSumPtTotEtaCell",
2510 Form("#Sigma #it{p}_{T, norm} in cone after bkg sub from #eta band vs #Sigma #it{p}_{T} in cone before bkg sub, R=%2.2f",r),
2511 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2512 fhConeSumPtSubNormvsConeSumPtTotEtaCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2513 fhConeSumPtSubNormvsConeSumPtTotEtaCell->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2514 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotEtaCell);
2519 // Track only histograms
2520 if(GetIsolationCut()->GetParticleTypeInCone()!=AliIsolationCut::kOnlyNeutral)
2522 fhConeSumPtTrack = new TH2F("hConePtSumTrack",
2523 Form("Track #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2524 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2525 fhConeSumPtTrack->SetYTitle("#Sigma #it{p}_{T}");
2526 fhConeSumPtTrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2527 outputContainer->Add(fhConeSumPtTrack) ;
2529 fhConePtLeadTrack = new TH2F("hConeLeadPtTrack",
2530 Form("Track leading in isolation cone for #it{R} = %2.2f",r),
2531 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
2532 fhConePtLeadTrack->SetYTitle("#it{p}_{T, leading} (GeV/#it{c})");
2533 fhConePtLeadTrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2534 outputContainer->Add(fhConePtLeadTrack) ;
2536 fhPtTrackInCone = new TH2F("hPtTrackInCone",
2537 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f",r),
2538 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2539 fhPtTrackInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2540 fhPtTrackInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2541 outputContainer->Add(fhPtTrackInCone) ;
2544 if(fFillUEBandSubtractHistograms)
2546 fhConeSumPtEtaBandUETrack = new TH2F("hConePtSumEtaBandUETrack",
2547 "#Sigma track #it{p}_{T} in UE Eta Band",
2548 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2549 fhConeSumPtEtaBandUETrack->SetYTitle("#Sigma #it{p}_{T}");
2550 fhConeSumPtEtaBandUETrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2551 outputContainer->Add(fhConeSumPtEtaBandUETrack) ;
2553 fhConeSumPtPhiBandUETrack = new TH2F("hConePtSumPhiBandUETrack",
2554 "#Sigma track #it{p}_{T} in UE Phi Band",
2555 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax*8);
2556 fhConeSumPtPhiBandUETrack->SetYTitle("#Sigma #it{p}_{T}");
2557 fhConeSumPtPhiBandUETrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2558 outputContainer->Add(fhConeSumPtPhiBandUETrack) ;
2561 fhConeSumPtEtaBandUETrackTrigEtaPhi = new TH2F("hConePtSumEtaBandUETrackTrigEtaPhi",
2562 "Trigger #eta vs #phi, #Sigma track #it{p}_{T} in UE Eta Band",
2563 netabins,etamin,etamax,nphibins,phimin,phimax);
2564 fhConeSumPtEtaBandUETrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2565 fhConeSumPtEtaBandUETrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2566 fhConeSumPtEtaBandUETrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2567 outputContainer->Add(fhConeSumPtEtaBandUETrackTrigEtaPhi) ;
2569 fhConeSumPtPhiBandUETrackTrigEtaPhi = new TH2F("hConePtSumPhiBandUETrackTrigEtaPhi",
2570 "Trigger #eta vs #phi, #Sigma track #it{p}_{T} in UE Phi Band",
2571 netabins,etamin,etamax,nphibins,phimin,phimax);
2572 fhConeSumPtPhiBandUETrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2573 fhConeSumPtPhiBandUETrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2574 fhConeSumPtPhiBandUETrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2575 outputContainer->Add(fhConeSumPtPhiBandUETrackTrigEtaPhi) ;
2577 fhEtaBandTrack = new TH2F("hEtaBandTrack",
2578 Form("#eta vs #phi of tracks in #eta band isolation cone for #it{R} = %2.2f",r),
2579 netabins,-1,1,nphibins,0,TMath::TwoPi());
2580 fhEtaBandTrack->SetXTitle("#eta");
2581 fhEtaBandTrack->SetYTitle("#phi");
2582 outputContainer->Add(fhEtaBandTrack) ;
2584 fhPhiBandTrack = new TH2F("hPhiBandTrack",
2585 Form("#eta vs #phi of tracks in #phi band isolation cone for #it{R} = %2.2f",r),
2586 netabins,-1,1,nphibins,0,TMath::TwoPi());
2587 fhPhiBandTrack->SetXTitle("#eta");
2588 fhPhiBandTrack->SetYTitle("#phi");
2589 outputContainer->Add(fhPhiBandTrack) ;
2591 fhConeSumPtEtaUESubTrack = new TH2F("hConeSumPtEtaUESubTrack",
2592 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
2593 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2594 fhConeSumPtEtaUESubTrack->SetYTitle("#Sigma #it{p}_{T}");
2595 fhConeSumPtEtaUESubTrack->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2596 outputContainer->Add(fhConeSumPtEtaUESubTrack) ;
2598 fhConeSumPtPhiUESubTrack = new TH2F("hConeSumPtPhiUESubTrack",
2599 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
2600 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2601 fhConeSumPtPhiUESubTrack->SetYTitle("#Sigma #it{p}_{T}");
2602 fhConeSumPtPhiUESubTrack->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2603 outputContainer->Add(fhConeSumPtPhiUESubTrack) ;
2605 fhConeSumPtEtaUESubTrackTrigEtaPhi = new TH2F("hConeSumPtEtaUESubTrackTrigEtaPhi",
2606 Form("Trigger #eta vs #phi, Tracks #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
2607 netabins,etamin,etamax,nphibins,phimin,phimax);
2608 fhConeSumPtEtaUESubTrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2609 fhConeSumPtEtaUESubTrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2610 fhConeSumPtEtaUESubTrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2611 outputContainer->Add(fhConeSumPtEtaUESubTrackTrigEtaPhi) ;
2613 fhConeSumPtPhiUESubTrackTrigEtaPhi = new TH2F("hConeSumPtPhiUESubTrackTrigEtaPhi",
2614 Form("Trigger #eta vs #phi, Tracks #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
2615 netabins,etamin,etamax,nphibins,phimin,phimax);
2616 fhConeSumPtPhiUESubTrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2617 fhConeSumPtPhiUESubTrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2618 fhConeSumPtPhiUESubTrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2619 outputContainer->Add(fhConeSumPtPhiUESubTrackTrigEtaPhi) ;
2621 fhFractionTrackOutConeEta = new TH2F("hFractionTrackOutConeEta",
2622 Form("Fraction of the isolation cone #it{R} = %2.2f, out of tracks #eta acceptance",r),
2623 nptbins,ptmin,ptmax,100,0,1);
2624 fhFractionTrackOutConeEta->SetYTitle("#it{fraction}");
2625 fhFractionTrackOutConeEta->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
2626 outputContainer->Add(fhFractionTrackOutConeEta) ;
2628 fhFractionTrackOutConeEtaTrigEtaPhi = new TH2F("hFractionTrackOutConeEtaTrigEtaPhi",
2629 Form("Fraction of the isolation cone #it{R} = %2.2f, out of tracks #eta acceptance, in trigger #eta-#phi ",r),
2630 netabins,etamin,etamax,nphibins,phimin,phimax);
2631 fhFractionTrackOutConeEtaTrigEtaPhi->SetZTitle("#it{fraction}");
2632 fhFractionTrackOutConeEtaTrigEtaPhi->SetXTitle("#eta_{trigger}");
2633 fhFractionTrackOutConeEtaTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2634 outputContainer->Add(fhFractionTrackOutConeEtaTrigEtaPhi) ;
2636 fhConeSumPtSubvsConeSumPtTotPhiTrack = new TH2F("hConeSumPtSubvsConeSumPtTotPhiTrack",
2637 Form("#Sigma #it{p}_{T} in cone after bkg sub from #phi band vs #Sigma #it{p}_{T} in cone before bkg sub, R=%2.2f",r),
2638 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2639 fhConeSumPtSubvsConeSumPtTotPhiTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2640 fhConeSumPtSubvsConeSumPtTotPhiTrack->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
2641 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotPhiTrack);
2643 fhConeSumPtSubNormvsConeSumPtTotPhiTrack = new TH2F("hConeSumPtSubNormvsConeSumPtTotPhiTrack",
2644 Form("#Sigma #it{p}_{T, norm} in cone after bkg sub from #phi band vs #Sigma #it{p}_{T} in cone before bkg sub, R=%2.2f",r),
2645 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2646 fhConeSumPtSubNormvsConeSumPtTotPhiTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2647 fhConeSumPtSubNormvsConeSumPtTotPhiTrack->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2648 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotPhiTrack);
2650 fhConeSumPtSubvsConeSumPtTotEtaTrack = new TH2F("hConeSumPtSubvsConeSumPtTotEtaTrack",
2651 Form("#Sigma #it{p}_{T} in cone after bkg sub from #eta band vs #Sigma #it{p}_{T} in cone before bkg sub, R=%2.2f",r),
2652 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2653 fhConeSumPtSubvsConeSumPtTotEtaTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2654 fhConeSumPtSubvsConeSumPtTotEtaTrack->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
2655 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotEtaTrack);
2657 fhConeSumPtSubNormvsConeSumPtTotEtaTrack = new TH2F("hConeSumPtSubNormvsConeSumPtTotEtaTrack",
2658 Form("#Sigma #it{p}_{T, norm} in cone after bkg sub from #eta band vs #Sigma #it{p}_{T} in cone before bkg sub, R=%2.2f",r),
2659 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2660 fhConeSumPtSubNormvsConeSumPtTotEtaTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2661 fhConeSumPtSubNormvsConeSumPtTotEtaTrack->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2662 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotEtaTrack);
2665 // UE in perpendicular cone
2666 fhPerpConeSumPt = new TH2F("hPerpConePtSum",
2667 Form("#Sigma #it{p}_{T} in isolation cone at #pm 45 degree phi from trigger particle, #it{R} = %2.2f",r),
2668 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2669 fhPerpConeSumPt->SetYTitle("#Sigma #it{p}_{T}");
2670 fhPerpConeSumPt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2671 outputContainer->Add(fhPerpConeSumPt) ;
2673 fhPtInPerpCone = new TH2F("hPtInPerpCone",
2674 Form("#it{p}_{T} in isolation cone at #pm 45 degree phi from trigger particle, #it{R} = %2.2f",r),
2675 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2676 fhPtInPerpCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2677 fhPtInPerpCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2678 outputContainer->Add(fhPtInPerpCone) ;
2680 fhEtaPhiTrack= new TH2F("hEtaPhiTrack",
2681 Form("#eta vs #phi of all Tracks"),
2682 netabins,-1,1,nphibins,0,TMath::TwoPi());
2683 fhEtaPhiTrack->SetXTitle("#eta");
2684 fhEtaPhiTrack->SetYTitle("#phi");
2685 outputContainer->Add(fhEtaPhiTrack) ;
2687 fhEtaPhiInConeTrack= new TH2F("hEtaPhiInConeTrack",
2688 Form("#eta vs #phi of Tracks in cone for #it{R} = %2.2f",r),
2689 netabins,-1,1,nphibins,0,TMath::TwoPi());
2690 fhEtaPhiInConeTrack->SetXTitle("#eta");
2691 fhEtaPhiInConeTrack->SetYTitle("#phi");
2692 outputContainer->Add(fhEtaPhiInConeTrack) ;
2694 fhConeSumPtVSUETracksEtaBand = new TH2F("hConeSumPtVSUETracksEtaBand",
2695 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in eta band for tracks (before normalization), R=%2.2f",r),
2696 nptsumbins,ptsummin,ptsummax,2*nptsumbins,ptsummin,2*ptsummax);
2697 fhConeSumPtVSUETracksEtaBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
2698 fhConeSumPtVSUETracksEtaBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
2699 outputContainer->Add(fhConeSumPtVSUETracksEtaBand);
2701 fhConeSumPtVSUETracksPhiBand = new TH2F("hConeSumPtVSUETracksPhiBand",
2702 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in phi band for tracks (before normalization), R=%2.2f",r),
2703 nptsumbins,ptsummin,ptsummax,8*nptsumbins,ptsummin,8*ptsummax);
2704 fhConeSumPtVSUETracksPhiBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
2705 fhConeSumPtVSUETracksPhiBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
2706 outputContainer->Add(fhConeSumPtVSUETracksPhiBand);
2710 if(GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kNeutralAndCharged )
2712 fhConeSumPtClustervsTrack = new TH2F("hConePtSumClustervsTrack",
2713 Form("Track vs Cluster #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2714 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2715 fhConeSumPtClustervsTrack->SetXTitle("#Sigma #it{p}_{T}^{cluster} (GeV/#it{c})");
2716 fhConeSumPtClustervsTrack->SetYTitle("#Sigma #it{p}_{T}^{track} (GeV/#it{c})");
2717 outputContainer->Add(fhConeSumPtClustervsTrack) ;
2719 fhConeSumPtClusterTrackFrac = new TH2F("hConePtSumClusterTrackFraction",
2720 Form("#Sigma #it{p}_{T}^{cluster}/#Sigma #it{p}_{T}^{track} in isolation cone for #it{R} = %2.2f",r),
2721 nptbins,ptmin,ptmax,200,0,5);
2722 fhConeSumPtClusterTrackFrac->SetYTitle("#Sigma #it{p}^{cluster}_{T} /#Sigma #it{p}_{T}^{track}");
2723 fhConeSumPtClusterTrackFrac->SetXTitle("#it{p}^{trigger}_{T} (GeV/#it{c})");
2724 outputContainer->Add(fhConeSumPtClusterTrackFrac) ;
2727 fhConePtLeadClustervsTrack = new TH2F("hConePtLeadClustervsTrack",
2728 Form("Track vs Cluster lead #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2729 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
2730 fhConePtLeadClustervsTrack->SetXTitle("#it{p}^{leading cluster}_{T} (GeV/#it{c})");
2731 fhConePtLeadClustervsTrack->SetYTitle("#it{p}^{leading track}_{T} (GeV/#it{c})");
2732 outputContainer->Add(fhConePtLeadClustervsTrack) ;
2734 fhConePtLeadClusterTrackFrac = new TH2F("hConePtLeadClusterTrackFraction",
2735 Form(" #it{p}^{leading cluster}_{T}/#it{p}^{leading track}_{T} in isolation cone for #it{R} = %2.2f",r),
2736 nptbins,ptmin,ptmax,200,0,5);
2737 fhConePtLeadClusterTrackFrac->SetYTitle("#it{p}^{leading cluster}_{T}/ #it{p}^{leading track}_{T}");
2738 fhConePtLeadClusterTrackFrac->SetXTitle("#it{p}^{trigger}_{T} (GeV/#it{c})");
2739 outputContainer->Add(fhConePtLeadClusterTrackFrac) ;
2742 if(fFillCellHistograms)
2744 fhConeSumPtCellvsTrack = new TH2F("hConePtSumCellvsTrack",
2745 Form("Track vs cell #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2746 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2747 fhConeSumPtCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2748 fhConeSumPtCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2749 outputContainer->Add(fhConeSumPtCellvsTrack) ;
2751 fhConeSumPtCellTrack = new TH2F("hConePtSumCellTrack",
2752 Form("Track and Cell #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2753 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2754 fhConeSumPtCellTrack->SetYTitle("#Sigma #it{p}_{T}");
2755 fhConeSumPtCellTrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2756 outputContainer->Add(fhConeSumPtCellTrack) ;
2758 fhConeSumPtCellTrackTrigEtaPhi = new TH2F("hConePtSumCellTrackTrigEtaPhi",
2759 Form("Trigger #eta vs #phi, #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2760 netabins,etamin,etamax,nphibins,phimin,phimax);
2761 fhConeSumPtCellTrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2762 fhConeSumPtCellTrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2763 fhConeSumPtCellTrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2764 outputContainer->Add(fhConeSumPtCellTrackTrigEtaPhi) ;
2768 if(fFillUEBandSubtractHistograms)
2770 fhConeSumPtEtaUESub = new TH2F("hConeSumPtEtaUESub",
2771 Form("#Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
2772 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2773 fhConeSumPtEtaUESub->SetYTitle("#Sigma #it{p}_{T}");
2774 fhConeSumPtEtaUESub->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2775 outputContainer->Add(fhConeSumPtEtaUESub) ;
2777 fhConeSumPtPhiUESub = new TH2F("hConeSumPtPhiUESub",
2778 Form("#Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
2779 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2780 fhConeSumPtPhiUESub->SetYTitle("#Sigma #it{p}_{T}");
2781 fhConeSumPtPhiUESub->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2782 outputContainer->Add(fhConeSumPtPhiUESub) ;
2784 fhConeSumPtEtaUESubTrigEtaPhi = new TH2F("hConeSumPtEtaUESubTrigEtaPhi",
2785 Form("Trigger #eta vs #phi, #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
2786 netabins,etamin,etamax,nphibins,phimin,phimax);
2787 fhConeSumPtEtaUESubTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2788 fhConeSumPtEtaUESubTrigEtaPhi->SetXTitle("#eta_{trigger}");
2789 fhConeSumPtEtaUESubTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2790 outputContainer->Add(fhConeSumPtEtaUESubTrigEtaPhi) ;
2792 fhConeSumPtPhiUESubTrigEtaPhi = new TH2F("hConeSumPtPhiUESubTrigEtaPhi",
2793 Form("Trigger #eta vs #phi, #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
2794 netabins,etamin,etamax,nphibins,phimin,phimax);
2795 fhConeSumPtPhiUESubTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2796 fhConeSumPtPhiUESubTrigEtaPhi->SetXTitle("#eta_{trigger}");
2797 fhConeSumPtPhiUESubTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2798 outputContainer->Add(fhConeSumPtPhiUESubTrigEtaPhi) ;
2800 fhConeSumPtEtaUESubClustervsTrack = new TH2F("hConePtSumEtaUESubClustervsTrack",
2801 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub eta band in isolation cone for #it{R} = %2.2f",r),
2802 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2803 fhConeSumPtEtaUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2804 fhConeSumPtEtaUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2805 outputContainer->Add(fhConeSumPtEtaUESubClustervsTrack) ;
2807 fhConeSumPtPhiUESubClustervsTrack = new TH2F("hConePhiUESubPtSumClustervsTrack",
2808 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub phi band in isolation cone for #it{R} = %2.2f",r),
2809 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2810 fhConeSumPtPhiUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2811 fhConeSumPtPhiUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2812 outputContainer->Add(fhConeSumPtPhiUESubClustervsTrack) ;
2814 fhEtaBandClustervsTrack = new TH2F("hEtaBandClustervsTrack",
2815 Form("Track vs Cluster #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2816 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2817 fhEtaBandClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2818 fhEtaBandClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2819 outputContainer->Add(fhEtaBandClustervsTrack) ;
2821 fhPhiBandClustervsTrack = new TH2F("hPhiBandClustervsTrack",
2822 Form("Track vs Cluster #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2823 nptsumbins,ptsummin,ptsummax*4,nptsumbins,ptsummin,ptsummax*8);
2824 fhPhiBandClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2825 fhPhiBandClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2826 outputContainer->Add(fhPhiBandClustervsTrack) ;
2828 fhEtaBandNormClustervsTrack = new TH2F("hEtaBandNormClustervsTrack",
2829 Form("Track vs Cluster #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2830 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2831 fhEtaBandNormClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2832 fhEtaBandNormClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2833 outputContainer->Add(fhEtaBandNormClustervsTrack) ;
2835 fhPhiBandNormClustervsTrack = new TH2F("hPhiBandNormClustervsTrack",
2836 Form("Track vs Cluster #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2837 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2838 fhPhiBandNormClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2839 fhPhiBandNormClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2840 outputContainer->Add(fhPhiBandNormClustervsTrack) ;
2842 fhConeSumPtEtaUESubClustervsTrack = new TH2F("hConePtSumEtaUESubClustervsTrack",
2843 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub eta band in isolation cone for #it{R} = %2.2f",r),
2844 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2845 fhConeSumPtEtaUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2846 fhConeSumPtEtaUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2847 outputContainer->Add(fhConeSumPtEtaUESubClustervsTrack) ;
2849 fhConeSumPtPhiUESubClustervsTrack = new TH2F("hConePhiUESubPtSumClustervsTrack",
2850 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub phi band in isolation cone for #it{R} = %2.2f",r),
2851 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2852 fhConeSumPtPhiUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2853 fhConeSumPtPhiUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2854 outputContainer->Add(fhConeSumPtPhiUESubClustervsTrack) ;
2856 if(fFillCellHistograms)
2859 fhConeSumPtEtaUESubCellvsTrack = new TH2F("hConePtSumEtaUESubCellvsTrack",
2860 Form("Track vs Cell #Sigma #it{p}_{T} UE sub eta band in isolation cone for #it{R} = %2.2f",r),
2861 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2862 fhConeSumPtEtaUESubCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2863 fhConeSumPtEtaUESubCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2864 outputContainer->Add(fhConeSumPtEtaUESubCellvsTrack) ;
2866 fhConeSumPtPhiUESubCellvsTrack = new TH2F("hConePhiUESubPtSumCellvsTrack",
2867 Form("Track vs Cell #Sigma #it{p}_{T} UE sub phi band in isolation cone for #it{R} = %2.2f",r),
2868 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2869 fhConeSumPtPhiUESubCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2870 fhConeSumPtPhiUESubCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2871 outputContainer->Add(fhConeSumPtPhiUESubCellvsTrack) ;
2873 fhEtaBandCellvsTrack = new TH2F("hEtaBandCellvsTrack",
2874 Form("Track vs Cell #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2875 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2876 fhEtaBandCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2877 fhEtaBandCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2878 outputContainer->Add(fhEtaBandCellvsTrack) ;
2880 fhPhiBandCellvsTrack = new TH2F("hPhiBandCellvsTrack",
2881 Form("Track vs Cell #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2882 nptsumbins,ptsummin,ptsummax*4,nptsumbins,ptsummin,ptsummax*8);
2883 fhPhiBandCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2884 fhPhiBandCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2885 outputContainer->Add(fhPhiBandCellvsTrack) ;
2887 fhEtaBandNormCellvsTrack = new TH2F("hEtaBandNormCellvsTrack",
2888 Form("Track vs Cell #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2889 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2890 fhEtaBandNormCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2891 fhEtaBandNormCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2892 outputContainer->Add(fhEtaBandNormCellvsTrack) ;
2894 fhPhiBandNormCellvsTrack = new TH2F("hPhiBandNormCellvsTrack",
2895 Form("Track vs Cell #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2896 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2897 fhPhiBandNormCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2898 fhPhiBandNormCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2899 outputContainer->Add(fhPhiBandNormCellvsTrack) ;
2901 fhConeSumPtEtaUESubTrackCell = new TH2F("hConeSumPtEtaUESubTrackCell",
2902 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
2903 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2904 fhConeSumPtEtaUESubTrackCell->SetYTitle("#Sigma #it{p}_{T}");
2905 fhConeSumPtEtaUESubTrackCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2906 outputContainer->Add(fhConeSumPtEtaUESubTrackCell) ;
2908 fhConeSumPtPhiUESubTrackCell = new TH2F("hConeSumPtPhiUESubTrackCell",
2909 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
2910 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2911 fhConeSumPtPhiUESubTrackCell->SetYTitle("#Sigma #it{p}_{T}");
2912 fhConeSumPtPhiUESubTrackCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2913 outputContainer->Add(fhConeSumPtPhiUESubTrackCell) ;
2915 fhConeSumPtEtaUESubTrackCellTrigEtaPhi = new TH2F("hConeSumPtEtaUESubTrackCellTrigEtaPhi",
2916 Form("Trigger #eta vs #phi, Tracks #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
2917 netabins,etamin,etamax,nphibins,phimin,phimax);
2918 fhConeSumPtEtaUESubTrackCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2919 fhConeSumPtEtaUESubTrackCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
2920 fhConeSumPtEtaUESubTrackCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2921 outputContainer->Add(fhConeSumPtEtaUESubTrackCellTrigEtaPhi) ;
2923 fhConeSumPtPhiUESubTrackCellTrigEtaPhi = new TH2F("hConeSumPtPhiUESubTrackCellTrigEtaPhi",
2924 Form("Trigger #eta vs #phi, Tracks #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
2925 netabins,etamin,etamax,nphibins,phimin,phimax);
2926 fhConeSumPtPhiUESubTrackCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2927 fhConeSumPtPhiUESubTrackCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
2928 fhConeSumPtPhiUESubTrackCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2929 outputContainer->Add(fhConeSumPtPhiUESubTrackCellTrigEtaPhi) ;
2934 for(Int_t iso = 0; iso < 2; iso++)
2938 fhTrackMatchedDEta[iso] = new TH2F
2939 (Form("hTrackMatchedDEta%s",isoName[iso].Data()),
2940 Form("%s - d#eta of cluster-track vs cluster energy, %s",isoTitle[iso].Data(),parTitle.Data()),
2941 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
2942 fhTrackMatchedDEta[iso]->SetYTitle("d#eta");
2943 fhTrackMatchedDEta[iso]->SetXTitle("E_{cluster} (GeV)");
2945 fhTrackMatchedDPhi[iso] = new TH2F
2946 (Form("hTrackMatchedDPhi%s",isoName[iso].Data()),
2947 Form("%s - d#phi of cluster-track vs cluster energy, %s",isoTitle[iso].Data(),parTitle.Data()),
2948 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
2949 fhTrackMatchedDPhi[iso]->SetYTitle("d#phi (rad)");
2950 fhTrackMatchedDPhi[iso]->SetXTitle("E_{cluster} (GeV)");
2952 fhTrackMatchedDEtaDPhi[iso] = new TH2F
2953 (Form("hTrackMatchedDEtaDPhi%s",isoName[iso].Data()),
2954 Form("%s - d#eta vs d#phi of cluster-track, %s",isoTitle[iso].Data(),parTitle.Data()),
2955 nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax);
2956 fhTrackMatchedDEtaDPhi[iso]->SetYTitle("d#phi (rad)");
2957 fhTrackMatchedDEtaDPhi[iso]->SetXTitle("d#eta");
2959 outputContainer->Add(fhTrackMatchedDEta[iso]) ;
2960 outputContainer->Add(fhTrackMatchedDPhi[iso]) ;
2961 outputContainer->Add(fhTrackMatchedDEtaDPhi[iso]) ;
2963 fhdEdx[iso] = new TH2F
2964 (Form("hdEdx%s",isoName[iso].Data()),
2965 Form("%s - Matched track <d#it{E}/d#it{x}> vs cluster #it{E}, %s",isoTitle[iso].Data(),parTitle.Data()),
2966 nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
2967 fhdEdx[iso]->SetXTitle("#it{E} (GeV)");
2968 fhdEdx[iso]->SetYTitle("<d#it{E}/d#it{x}>");
2969 outputContainer->Add(fhdEdx[iso]);
2971 fhEOverP[iso] = new TH2F
2972 (Form("hEOverP%s",isoName[iso].Data()),
2973 Form("%s - Matched track #it{E}/#it{p} vs cluster, %s",isoTitle[iso].Data(),parTitle.Data()),
2974 nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
2975 fhEOverP[iso]->SetXTitle("#it{E} (GeV)");
2976 fhEOverP[iso]->SetYTitle("#it{E}/#it{p}");
2977 outputContainer->Add(fhEOverP[iso]);
2981 fhTrackMatchedMCParticle[iso] = new TH2F
2982 (Form("hTrackMatchedMCParticle%s",isoName[iso].Data()),
2983 Form("%s - Origin of particle vs cluster #it{E}, %s",isoTitle[iso].Data(),parTitle.Data()),
2984 nptbins,ptmin,ptmax,8,0,8);
2985 fhTrackMatchedMCParticle[iso]->SetXTitle("#it{E} (GeV)");
2986 //fhTrackMatchedMCParticle[iso]->SetYTitle("Particle type");
2988 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(1 ,"Photon");
2989 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(2 ,"Electron");
2990 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(3 ,"Meson Merged");
2991 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(4 ,"Rest");
2992 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(5 ,"Conv. Photon");
2993 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(6 ,"Conv. Electron");
2994 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(7 ,"Conv. Merged");
2995 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(8 ,"Conv. Rest");
2997 outputContainer->Add(fhTrackMatchedMCParticle[iso]);
3003 fhELambda0[iso] = new TH2F
3004 (Form("hELambda0%s",isoName[iso].Data()),
3005 Form("%s cluster : #it{E} vs #lambda_{0}, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
3006 fhELambda0[iso]->SetYTitle("#lambda_{0}^{2}");
3007 fhELambda0[iso]->SetXTitle("#it{E} (GeV)");
3008 outputContainer->Add(fhELambda0[iso]) ;
3010 // fhELambda1[iso] = new TH2F
3011 // (Form("hELambda1%s",isoName[iso].Data()),
3012 // Form("%s cluster: #it{E} vs #lambda_{1}, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
3013 // fhELambda1[iso]->SetYTitle("#lambda_{1}^{2}");
3014 // fhELambda1[iso]->SetXTitle("#it{E} (GeV)");
3015 // outputContainer->Add(fhELambda1[iso]) ;
3017 fhPtLambda0[iso] = new TH2F
3018 (Form("hPtLambda0%s",isoName[iso].Data()),
3019 Form("%s cluster : #it{p}_{T} vs #lambda_{0}, %s",isoTitle[iso].Data(), parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
3020 fhPtLambda0[iso]->SetYTitle("#lambda_{0}^{2}");
3021 fhPtLambda0[iso]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3022 outputContainer->Add(fhPtLambda0[iso]) ;
3026 for(Int_t imc = 0; imc < fgkNmcTypes; imc++)
3028 fhPtLambda0MC[imc][iso] = new TH2F(Form("hPtLambda0%s_MC%s",isoName[iso].Data(),mcPartName[imc].Data()),
3029 Form("%s cluster : #it{p}_{T} vs #lambda_{0}: %s %s",isoTitle[iso].Data(),mcPartType[imc].Data(),parTitle.Data()),
3030 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
3031 fhPtLambda0MC[imc][iso]->SetYTitle("#lambda_{0}^{2}");
3032 fhPtLambda0MC[imc][iso]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
3033 outputContainer->Add( fhPtLambda0MC[imc][iso]) ;
3037 if(fIsoDetector==kEMCAL && GetFirstSMCoveredByTRD() >= 0)
3039 fhPtLambda0TRD[iso] = new TH2F
3040 (Form("hPtLambda0TRD%s",isoName[iso].Data()),
3041 Form("%s cluster: #it{p}_{T} vs #lambda_{0}, SM behind TRD, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
3042 fhPtLambda0TRD[iso]->SetYTitle("#lambda_{0}^{2}");
3043 fhPtLambda0TRD[iso]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3044 outputContainer->Add(fhPtLambda0TRD[iso]) ;
3046 fhELambda0TRD[iso] = new TH2F
3047 (Form("hELambda0TRD%s",isoName[iso].Data()),
3048 Form("%s cluster: #it{E} vs #lambda_{0}, SM behind TRD, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
3049 fhELambda0TRD[iso]->SetYTitle("#lambda_{0}^{2}");
3050 fhELambda0TRD[iso]->SetXTitle("#it{E} (GeV)");
3051 outputContainer->Add(fhELambda0TRD[iso]) ;
3053 // fhELambda1TRD[iso] = new TH2F
3054 // (Form("hELambda1TRD%s",isoName[iso].Data()),
3055 // Form("%s cluster: #it{E} vs #lambda_{1}, SM behind TRD, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
3056 // fhELambda1TRD[iso]->SetYTitle("#lambda_{1}^{2}");
3057 // fhELambda1TRD[iso]->SetXTitle("#it{E} (GeV)");
3058 // outputContainer->Add(fhELambda1TRD[iso]) ;
3061 if(fFillNLMHistograms)
3063 fhNLocMax[iso] = new TH2F
3064 (Form("hNLocMax%s",isoName[iso].Data()),
3065 Form("%s - Number of local maxima in cluster, %s",isoTitle[iso].Data(),parTitle.Data()),
3066 nptbins,ptmin,ptmax,10,0,10);
3067 fhNLocMax[iso]->SetYTitle("#it{NLM}");
3068 fhNLocMax[iso]->SetXTitle("#it{E} (GeV)");
3069 outputContainer->Add(fhNLocMax[iso]) ;
3071 fhELambda0LocMax1[iso] = new TH2F
3072 (Form("hELambda0LocMax1%s",isoName[iso].Data()),
3073 Form("%s cluster (#eta) pairs: #it{E} vs #lambda_{0}, #it{NLM}=1, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
3074 fhELambda0LocMax1[iso]->SetYTitle("#lambda_{0}^{2}");
3075 fhELambda0LocMax1[iso]->SetXTitle("#it{E} (GeV)");
3076 outputContainer->Add(fhELambda0LocMax1[iso]) ;
3078 fhELambda1LocMax1[iso] = new TH2F
3079 (Form("hELambda1LocMax1%s",isoName[iso].Data()),
3080 Form("%s cluster (#eta) pairs: #it{E} vs #lambda_{1}, #it{NLM}=1, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
3081 fhELambda1LocMax1[iso]->SetYTitle("#lambda_{1}^{2}");
3082 fhELambda1LocMax1[iso]->SetXTitle("#it{E} (GeV)");
3083 outputContainer->Add(fhELambda1LocMax1[iso]) ;
3085 fhELambda0LocMax2[iso] = new TH2F
3086 (Form("hELambda0LocMax2%s",isoName[iso].Data()),
3087 Form("%s cluster (#eta) pairs: #it{E} vs #lambda_{0}, #it{NLM}=2, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
3088 fhELambda0LocMax2[iso]->SetYTitle("#lambda_{0}^{2}");
3089 fhELambda0LocMax2[iso]->SetXTitle("#it{E} (GeV)");
3090 outputContainer->Add(fhELambda0LocMax2[iso]) ;
3092 fhELambda1LocMax2[iso] = new TH2F
3093 (Form("hELambda1LocMax2%s",isoName[iso].Data()),
3094 Form("%s cluster (#eta) pairs: #it{E} vs #lambda_{1}, #it{NLM}=2, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
3095 fhELambda1LocMax2[iso]->SetYTitle("#lambda_{1}^{2}");
3096 fhELambda1LocMax2[iso]->SetXTitle("#it{E} (GeV)");
3097 outputContainer->Add(fhELambda1LocMax2[iso]) ;
3099 fhELambda0LocMaxN[iso] = new TH2F
3100 ( Form("hELambda0LocMaxN%s",isoName[iso].Data()),
3101 Form("%s cluster (#eta) pairs: #it{E} vs #lambda_{0}, #it{NLM}>2, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
3102 fhELambda0LocMaxN[iso]->SetYTitle("#lambda_{0}^{2}");
3103 fhELambda0LocMaxN[iso]->SetXTitle("#it{E} (GeV)");
3104 outputContainer->Add(fhELambda0LocMaxN[iso]) ;
3106 fhELambda1LocMaxN[iso] = new TH2F
3107 (Form("hELambda1LocMaxN%s",isoName[iso].Data()),
3108 Form("%s cluster (#eta) pairs: #it{E} vs #lambda_{1}, #it{NLM}>2, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
3109 fhELambda1LocMaxN[iso]->SetYTitle("#lambda_{1}^{2}");
3110 fhELambda1LocMaxN[iso]->SetXTitle("#it{E} (GeV)");
3111 outputContainer->Add(fhELambda1LocMaxN[iso]) ;
3114 } // control histograms for isolated and non isolated objects
3117 if(IsPileUpAnalysisOn())
3119 fhPtTrackInConeOtherBC = new TH2F("hPtTrackInConeOtherBC",
3120 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC!=0",r),
3121 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
3122 fhPtTrackInConeOtherBC->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
3123 fhPtTrackInConeOtherBC->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3124 outputContainer->Add(fhPtTrackInConeOtherBC) ;
3126 fhPtTrackInConeOtherBCPileUpSPD = new TH2F("hPtTrackInConeOtherBCPileUpSPD",
3127 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC!=0, pile-up from SPD",r),
3128 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
3129 fhPtTrackInConeOtherBCPileUpSPD->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
3130 fhPtTrackInConeOtherBCPileUpSPD->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3131 outputContainer->Add(fhPtTrackInConeOtherBCPileUpSPD) ;
3133 fhPtTrackInConeBC0 = new TH2F("hPtTrackInConeBC0",
3134 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC==0",r),
3135 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
3136 fhPtTrackInConeBC0->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
3137 fhPtTrackInConeBC0->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3138 outputContainer->Add(fhPtTrackInConeBC0) ;
3140 fhPtTrackInConeVtxBC0 = new TH2F("hPtTrackInConeVtxBC0",
3141 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC==0",r),
3142 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
3143 fhPtTrackInConeVtxBC0->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
3144 fhPtTrackInConeVtxBC0->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3145 outputContainer->Add(fhPtTrackInConeVtxBC0) ;
3148 fhPtTrackInConeBC0PileUpSPD = new TH2F("hPtTrackInConeBC0PileUpSPD",
3149 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC==0, pile-up from SPD",r),
3150 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
3151 fhPtTrackInConeBC0PileUpSPD->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
3152 fhPtTrackInConeBC0PileUpSPD->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3153 outputContainer->Add(fhPtTrackInConeBC0PileUpSPD) ;
3156 for (Int_t i = 0; i < 7 ; i++)
3158 fhPtInConePileUp[i] = new TH2F(Form("hPtInConePileUp%s",pileUpName[i].Data()),
3159 Form("#it{p}_{T} in isolation cone for #it{R} = %2.2f, from pile-up (%s)",r,pileUpName[i].Data()),
3160 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
3161 fhPtInConePileUp[i]->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
3162 fhPtInConePileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3163 outputContainer->Add(fhPtInConePileUp[i]) ;
3169 // For histograms in arrays, index in the array, corresponding to any particle origin
3171 for(Int_t i = 0; i < fgkNmcPrimTypes; i++)
3173 fhEPrimMC[i] = new TH1F(Form("hEPrim_MC%s",ppname[i].Data()),
3174 Form("primary photon %s : #it{E}, %s",pptype[i].Data(),parTitle.Data()),
3175 nptbins,ptmin,ptmax);
3176 fhEPrimMC[i]->SetXTitle("#it{E} (GeV)");
3177 outputContainer->Add(fhEPrimMC[i]) ;
3179 fhPtPrimMC[i] = new TH1F(Form("hPtPrim_MC%s",ppname[i].Data()),
3180 Form("primary photon %s : #it{p}_{T}, %s",pptype[i].Data(),parTitle.Data()),
3181 nptbins,ptmin,ptmax);
3182 fhPtPrimMC[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3183 outputContainer->Add(fhPtPrimMC[i]) ;
3185 fhPtPrimMCiso[i] = new TH1F(Form("hPtPrim_MCiso%s",ppname[i].Data()),
3186 Form("primary isolated photon %s : #it{p}_{T}, %s",pptype[i].Data(),parTitle.Data()),
3187 nptbins,ptmin,ptmax);
3188 fhPtPrimMCiso[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3189 outputContainer->Add(fhPtPrimMCiso[i]) ;
3191 fhEtaPrimMC[i] = new TH2F(Form("hEtaPrim_MC%s",ppname[i].Data()),
3192 Form("primary photon %s : #eta vs #it{p}_{T}, %s",pptype[i].Data(),parTitle.Data()),
3193 nptbins,ptmin,ptmax,200,-2,2);
3194 fhEtaPrimMC[i]->SetYTitle("#eta");
3195 fhEtaPrimMC[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3196 outputContainer->Add(fhEtaPrimMC[i]) ;
3198 fhPhiPrimMC[i] = new TH2F(Form("hPhiPrim_MC%s",ppname[i].Data()),
3199 Form("primary photon %s : #phi vs #it{p}_{T}, %s",pptype[i].Data(),parTitle.Data()),
3200 nptbins,ptmin,ptmax,200,0.,TMath::TwoPi());
3201 fhPhiPrimMC[i]->SetYTitle("#phi");
3202 fhPhiPrimMC[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3203 outputContainer->Add(fhPhiPrimMC[i]) ;
3206 if(fMakePrimaryPi0DecayStudy)
3208 fhPtPrimMCPi0DecayPairAcceptInConeLowPt = new TH1F("hPtPrim_MCPhotonPi0DecayPairAcceptInConeLowPt",
3209 Form("primary photon %s : #it{p}_{T}, pair in cone, %s",pptype[kmcPrimPi0Decay].Data(),parTitle.Data()),
3210 nptbins,ptmin,ptmax);
3211 fhPtPrimMCPi0DecayPairAcceptInConeLowPt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3212 outputContainer->Add(fhPtPrimMCPi0DecayPairAcceptInConeLowPt) ;
3214 fhPtPrimMCPi0DecayIsoPairAcceptInConeLowPt = new TH1F("hPtPrim_MCisoPhotonPi0DecayPairAcceptInConeLowPt",
3215 Form("isolated primary photon %s, pair in cone : #it{p}_{T}, %s",
3216 pptype[kmcPrimPi0Decay].Data(),parTitle.Data()),
3217 nptbins,ptmin,ptmax);
3218 fhPtPrimMCPi0DecayIsoPairAcceptInConeLowPt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3219 outputContainer->Add(fhPtPrimMCPi0DecayIsoPairAcceptInConeLowPt) ;
3221 fhPtPrimMCPi0DecayPairAcceptInConeLowPtNoOverlap = new TH1F("hPtPrim_MCPhotonPi0DecayPairAcceptInConeLowPtNoOverlap",
3222 Form("primary photon %s, no overlap, pair in cone : #it{p}_{T}, %s",
3223 pptype[kmcPrimPi0Decay].Data(),parTitle.Data()),
3224 nptbins,ptmin,ptmax);
3225 fhPtPrimMCPi0DecayPairAcceptInConeLowPtNoOverlap->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3226 outputContainer->Add(fhPtPrimMCPi0DecayPairAcceptInConeLowPtNoOverlap) ;
3228 fhPtPrimMCPi0DecayIsoPairAcceptInConeLowPtNoOverlap = new TH1F("hPtPrim_MCisoPhotonPi0DecayPairAcceptInConeLowPtNoOverlap",
3229 Form("isolated primary photon %s, pair in cone,no overlap : #it{p}_{T}, %s",
3230 pptype[kmcPrimPi0Decay].Data(),parTitle.Data()),
3231 nptbins,ptmin,ptmax);
3232 fhPtPrimMCPi0DecayIsoPairAcceptInConeLowPtNoOverlap->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3233 outputContainer->Add(fhPtPrimMCPi0DecayIsoPairAcceptInConeLowPtNoOverlap) ;
3235 fhPtPrimMCPi0DecayPairAcceptInConeLowPtNoOverlapCaloE = new TH1F("hPtPrim_MCPhotonPi0DecayPairAcceptInConeLowPtNoOverlapCaloE",
3236 Form("primary photon %s, no overlap, pair in cone, E > calo min: #it{p}_{T}, %s",
3237 pptype[kmcPrimPi0Decay].Data(),parTitle.Data()),
3238 nptbins,ptmin,ptmax);
3239 fhPtPrimMCPi0DecayPairAcceptInConeLowPtNoOverlapCaloE->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3240 outputContainer->Add(fhPtPrimMCPi0DecayPairAcceptInConeLowPtNoOverlapCaloE) ;
3242 fhPtPrimMCPi0DecayIsoPairAcceptInConeLowPtNoOverlapCaloE = new TH1F("hPtPrim_MCisoPhotonPi0DecayPairAcceptInConeLowPtNoOverlapCaloE",
3243 Form("isolated primary photon %s, pair in cone,no overlap, E > calo min: #it{p}_{T}, %s",
3244 pptype[kmcPrimPi0Decay].Data(),parTitle.Data()),
3245 nptbins,ptmin,ptmax);
3246 fhPtPrimMCPi0DecayIsoPairAcceptInConeLowPtNoOverlapCaloE->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3247 outputContainer->Add(fhPtPrimMCPi0DecayIsoPairAcceptInConeLowPtNoOverlapCaloE) ;
3250 fhPtPrimMCPi0DecayPairNoOverlap = new TH1F("hPtPrim_MCPhotonPi0DecayPairNoOverlap",
3251 Form("primary photon %s, no overlap: #it{p}_{T}, %s",
3252 pptype[kmcPrimPi0Decay].Data(),parTitle.Data()),
3253 nptbins,ptmin,ptmax);
3254 fhPtPrimMCPi0DecayPairNoOverlap->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3255 outputContainer->Add(fhPtPrimMCPi0DecayPairNoOverlap) ;
3257 fhPtPrimMCPi0DecayIsoPairNoOverlap = new TH1F("hPtPrim_MCisoPhotonPi0DecayPairNoOverlap",
3258 Form("isolated primary photon %s, no overlap: #it{p}_{T}, %s",
3259 pptype[kmcPrimPi0Decay].Data(),parTitle.Data()),
3260 nptbins,ptmin,ptmax);
3261 fhPtPrimMCPi0DecayIsoPairNoOverlap->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3262 outputContainer->Add(fhPtPrimMCPi0DecayIsoPairNoOverlap) ;
3264 fhPtPrimMCPi0DecayPairOutOfCone = new TH1F("hPtPrim_MCPhotonPi0DecayPairOutOfCone",
3265 Form("primary photon %s : #it{p}_{T}, pair out of cone, %s",pptype[kmcPrimPi0Decay].Data(),parTitle.Data()),
3266 nptbins,ptmin,ptmax);
3267 fhPtPrimMCPi0DecayPairOutOfCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3268 outputContainer->Add(fhPtPrimMCPi0DecayPairOutOfCone) ;
3270 fhPtPrimMCPi0DecayIsoPairOutOfCone = new TH1F("hPtPrim_MCisoPhotonPi0DecayPairOutOfCone",
3271 Form("isolated primary photon %s, pair out of cone : #it{p}_{T}, %s",
3272 pptype[kmcPrimPi0Decay].Data(),parTitle.Data()),
3273 nptbins,ptmin,ptmax);
3274 fhPtPrimMCPi0DecayIsoPairOutOfCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3275 outputContainer->Add(fhPtPrimMCPi0DecayIsoPairOutOfCone) ;
3277 fhPtPrimMCPi0DecayPairOutOfAcceptance = new TH1F("hPtPrim_MCPhotonPi0DecayPairOutOfAcceptance",
3278 Form("primary photon %s : #it{p}_{T}, pair out of acceptance, %s",pptype[kmcPrimPi0Decay].Data(),parTitle.Data()),
3279 nptbins,ptmin,ptmax);
3280 fhPtPrimMCPi0DecayPairOutOfAcceptance->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3281 outputContainer->Add(fhPtPrimMCPi0DecayPairOutOfAcceptance) ;
3283 fhPtPrimMCPi0DecayPairOutOfAcceptanceNoOverlap = new TH1F("hPtPrim_MCPhotonPi0DecayPairOutOfAcceptanceNoOverlap",
3284 Form("primary photon %s : #it{p}_{T}, pair out of acceptance, no overlap, %s",pptype[kmcPrimPi0Decay].Data(),parTitle.Data()),
3285 nptbins,ptmin,ptmax);
3286 fhPtPrimMCPi0DecayPairOutOfAcceptanceNoOverlap->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3287 outputContainer->Add(fhPtPrimMCPi0DecayPairOutOfAcceptanceNoOverlap) ;
3289 fhPtPrimMCPi0DecayIsoPairOutOfAcceptance = new TH1F("hPtPrim_MCisoPhotonPi0DecayPairOutOfAcceptance",
3290 Form("isolated primary photon %s, pair out of acceptance : #it{p}_{T}, %s",
3291 pptype[kmcPrimPi0Decay].Data(),parTitle.Data()),
3292 nptbins,ptmin,ptmax);
3293 fhPtPrimMCPi0DecayIsoPairOutOfAcceptance->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3294 outputContainer->Add(fhPtPrimMCPi0DecayIsoPairOutOfAcceptance) ;
3296 fhPtPrimMCPi0DecayIsoPairOutOfAcceptanceNoOverlap = new TH1F("hPtPrim_MCisoPhotonPi0DecayPairOutOfAcceptanceNoOverlap",
3297 Form("isolated primary photon %s, pair out of acceptance, no overlap : #it{p}_{T}, %s",
3298 pptype[kmcPrimPi0Decay].Data(),parTitle.Data()),
3299 nptbins,ptmin,ptmax);
3300 fhPtPrimMCPi0DecayIsoPairOutOfAcceptanceNoOverlap->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3301 outputContainer->Add(fhPtPrimMCPi0DecayIsoPairOutOfAcceptanceNoOverlap) ;
3303 fhPtPrimMCPi0Overlap = new TH1F("hPtPrim_MCPi0Overlap",
3304 Form("primary %s, overlap: #it{p}_{T}, %s",
3305 pptype[kmcPrimPi0].Data(),parTitle.Data()),
3306 nptbins,ptmin,ptmax);
3307 fhPtPrimMCPi0Overlap->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3308 outputContainer->Add(fhPtPrimMCPi0Overlap) ;
3310 fhPtPrimMCPi0IsoOverlap = new TH1F("hPtPrim_MCisoPi0Overlap",
3311 Form("primary %s, overlap: #it{p}_{T}, %s",
3312 pptype[kmcPrimPi0].Data(),parTitle.Data()),
3313 nptbins,ptmin,ptmax);
3314 fhPtPrimMCPi0IsoOverlap->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3315 outputContainer->Add(fhPtPrimMCPi0IsoOverlap) ;
3325 const Int_t buffersize = 255;
3326 char name[buffersize];
3327 char title[buffersize];
3328 for(Int_t icone = 0; icone<fNCones; icone++)
3330 // sum pt in cone vs. pt leading
3331 snprintf(name, buffersize,"hSumPtLeadingPt_Cone_%d",icone);
3332 snprintf(title, buffersize,"#Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
3333 fhSumPtLeadingPt[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
3334 fhSumPtLeadingPt[icone] ->SetYTitle("#sum_{cone}#it{p}_{T} (GeV/#it{c})");//#Sigma #it{p}_{T}
3335 fhSumPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
3336 outputContainer->Add(fhSumPtLeadingPt[icone]) ;
3338 // pt in cone vs. pt leading
3339 snprintf(name, buffersize,"hPtLeadingPt_Cone_%d",icone);
3340 snprintf(title, buffersize,"#it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
3341 fhPtLeadingPt[icone] = new TH2F(name, title, nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
3342 fhPtLeadingPt[icone] ->SetYTitle("#it{p}_{T}^{cone} (GeV/#it{c})");
3343 fhPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
3344 outputContainer->Add(fhPtLeadingPt[icone]) ;
3346 // sum pt in cone vs. pt leading in the forward region (for background subtraction studies)
3347 snprintf(name, buffersize,"hPerpSumPtLeadingPt_Cone_%d",icone);
3348 snprintf(title, buffersize,"#Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
3349 fhPerpSumPtLeadingPt[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
3350 fhPerpSumPtLeadingPt[icone] ->SetYTitle("#sum_{cone}#it{p}_{T} (GeV/#it{c})");//#Sigma #it{p}_{T}
3351 fhPerpSumPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
3352 outputContainer->Add(fhPerpSumPtLeadingPt[icone]) ;
3354 // pt in cone vs. pt leading in the forward region (for background subtraction studies)
3355 snprintf(name, buffersize,"hPerpPtLeadingPt_Cone_%d",icone);
3356 snprintf(title, buffersize,"#it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
3357 fhPerpPtLeadingPt[icone] = new TH2F(name, title, nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
3358 fhPerpPtLeadingPt[icone] ->SetYTitle("#it{p}_{T}^{cone} (GeV/#it{c})");
3359 fhPerpPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
3360 outputContainer->Add(fhPerpPtLeadingPt[icone]) ;
3364 for(Int_t imc = 0; imc < fgkNmcTypes; imc++)
3366 snprintf(name , buffersize,"hSumPtLeadingPt_MC%s_Cone_%d",mcPartName[imc].Data(),icone);
3367 snprintf(title, buffersize,"Candidate %s #it{p}_{T} vs cone #Sigma #it{p}_{T} for #it{R}=%2.2f",mcPartType[imc].Data(),fConeSizes[icone]);
3368 fhSumPtLeadingPtMC[imc][icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
3369 fhSumPtLeadingPtMC[imc][icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
3370 fhSumPtLeadingPtMC[imc][icone]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
3371 outputContainer->Add(fhSumPtLeadingPtMC[imc][icone]) ;
3375 for(Int_t ipt = 0; ipt<fNPtThresFrac;ipt++)
3377 snprintf(name, buffersize,"hPtThres_Cone_%d_Pt%d",icone,ipt);
3378 snprintf(title, buffersize,"Isolated candidate #it{p}_{T} distribution for #it{R} = %2.2f and #it{p}_{T}^{th} = %2.2f GeV/#it{c}",fConeSizes[icone],fPtThresholds[ipt]);
3379 fhPtThresIsolated[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
3380 fhPtThresIsolated[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3381 outputContainer->Add(fhPtThresIsolated[icone][ipt]) ;
3383 snprintf(name, buffersize,"hPtFrac_Cone_%d_Pt%d",icone,ipt);
3384 snprintf(title, buffersize,"Isolated candidate #it{p}_{T} distribution for #it{R} = %2.2f and #it{p}_{T}^{fr} = %2.2f GeV/#it{c}",fConeSizes[icone],fPtFractions[ipt]);
3385 fhPtFracIsolated[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
3386 fhPtFracIsolated[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3387 outputContainer->Add(fhPtFracIsolated[icone][ipt]) ;
3389 snprintf(name, buffersize,"hSumPt_Cone_%d_Pt%d",icone,ipt);
3390 snprintf(title, buffersize,"Isolated candidate #it{p}_{T} distribution for #it{R} = %2.2f and #it{p}_{T}^{sum} = %2.2f GeV/#it{c}",fConeSizes[icone],fSumPtThresholds[ipt]);
3391 fhSumPtIsolated[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
3392 // fhSumPtIsolated[icone][ipt]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
3393 fhSumPtIsolated[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3394 outputContainer->Add(fhSumPtIsolated[icone][ipt]) ;
3396 snprintf(name, buffersize,"hPtSumDensity_Cone_%d_Pt%d",icone,ipt);
3397 snprintf(title, buffersize,"Isolated candidate #it{p}_{T} distribution for density in #it{R} = %2.2f and #it{p}_{T}^{sum} = %2.2f GeV/#it{c}",fConeSizes[icone],fSumPtThresholds[ipt]);
3398 fhPtSumDensityIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
3399 //fhPtSumIsolated[icone][ipt]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
3400 fhPtSumDensityIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3401 outputContainer->Add(fhPtSumDensityIso[icone][ipt]) ;
3403 snprintf(name, buffersize,"hPtFracPtSum_Cone_%d_Pt%d",icone,ipt);
3404 snprintf(title, buffersize,"Isolated candidate #it{p}_{T} distribution for PtFracPtSum in #it{R} = %2.2f and #it{p}_{T}^{fr} = %2.2f GeV/#it{c}",fConeSizes[icone],fPtFractions[ipt]);
3405 fhPtFracPtSumIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
3406 //fhPtSumIsolated[icone][ipt]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
3407 fhPtFracPtSumIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3408 outputContainer->Add(fhPtFracPtSumIso[icone][ipt]) ;
3411 snprintf(name, buffersize,"hEtaPhiPtThres_Cone_%d_Pt%d",icone,ipt);
3412 snprintf(title, buffersize,"Isolated candidate #eta:#phi distribution for #it{R} = %2.2f and #it{p}_{T}^{th} = %2.2f GeV/#it{c}",fConeSizes[icone],fPtThresholds[ipt]);
3413 fhEtaPhiPtThresIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
3414 fhEtaPhiPtThresIso[icone][ipt]->SetXTitle("#eta");
3415 fhEtaPhiPtThresIso[icone][ipt]->SetYTitle("#phi");
3416 outputContainer->Add(fhEtaPhiPtThresIso[icone][ipt]) ;
3418 snprintf(name, buffersize,"hEtaPhiPtFrac_Cone_%d_Pt%d",icone,ipt);
3419 snprintf(title, buffersize,"Isolated candidate #eta:#phi distribution for #it{R} = %2.2f and #it{p}_{T}^{fr} = %2.2f GeV/#it{c}",fConeSizes[icone],fPtFractions[ipt]);
3420 fhEtaPhiPtFracIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
3421 fhEtaPhiPtFracIso[icone][ipt]->SetXTitle("#eta");
3422 fhEtaPhiPtFracIso[icone][ipt]->SetYTitle("#phi");
3423 outputContainer->Add(fhEtaPhiPtFracIso[icone][ipt]) ;
3425 snprintf(name, buffersize,"hEtaPhiPtSum_Cone_%d_Pt%d",icone,ipt);
3426 snprintf(title, buffersize,"Isolated candidate #eta:#phi distribution for #it{R} = %2.2f and #it{p}_{T}^{sum} = %2.2f GeV/#it{c}",fConeSizes[icone],fSumPtThresholds[ipt]);
3427 fhEtaPhiPtSumIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
3428 fhEtaPhiPtSumIso[icone][ipt]->SetXTitle("#eta");
3429 fhEtaPhiPtSumIso[icone][ipt]->SetYTitle("#phi");
3430 outputContainer->Add(fhEtaPhiPtSumIso[icone][ipt]) ;
3432 snprintf(name, buffersize,"hEtaPhiSumDensity_Cone_%d_Pt%d",icone,ipt);
3433 snprintf(title, buffersize,"Isolated candidate #eta:#phi distribution for density #it{R} = %2.2f and #it{p}_{T}^{sum} = %2.2f GeV/#it{c}",fConeSizes[icone],fSumPtThresholds[ipt]);
3434 fhEtaPhiSumDensityIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
3435 fhEtaPhiSumDensityIso[icone][ipt]->SetXTitle("#eta");
3436 fhEtaPhiSumDensityIso[icone][ipt]->SetYTitle("#phi");
3437 outputContainer->Add(fhEtaPhiSumDensityIso[icone][ipt]) ;
3439 snprintf(name, buffersize,"hEtaPhiFracPtSum_Cone_%d_Pt%d",icone,ipt);
3440 snprintf(title, buffersize,"Isolated candidate #eta:#phi distribution for FracPtSum #it{R} = %2.2f and #it{p}_{T}^{fr} = %2.2f GeV/#it{c}",fConeSizes[icone],fPtFractions[ipt]);
3441 fhEtaPhiFracPtSumIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
3442 fhEtaPhiFracPtSumIso[icone][ipt]->SetXTitle("#eta");
3443 fhEtaPhiFracPtSumIso[icone][ipt]->SetYTitle("#phi");
3444 outputContainer->Add(fhEtaPhiFracPtSumIso[icone][ipt]) ;
3446 if(fFillTaggedDecayHistograms)
3448 // pt decays isolated
3449 snprintf(name, buffersize,"hPtThres_Decay_Cone_%d_Pt%d",icone,ipt);
3450 snprintf(title, buffersize,"Isolated decay candidate #it{p}_{T} distribution for #it{R} = %2.2f and #it{p}_{T}^{th} = %2.2f GeV/#it{c}",fConeSizes[icone],fPtThresholds[ipt]);
3451 fhPtPtThresDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
3452 fhPtPtThresDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3453 outputContainer->Add(fhPtPtThresDecayIso[icone][ipt]) ;
3455 snprintf(name, buffersize,"hPtFrac_Decay_Cone_%d_Pt%d",icone,ipt);
3456 snprintf(title, buffersize,"Isolated decay candidate #it{p}_{T} distribution for #it{R} = %2.2f and #it{p}_{T}^{fr} = %2.2f GeV/#it{c}",fConeSizes[icone],fPtFractions[ipt]);
3457 fhPtPtFracDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
3458 fhPtPtFracDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3459 outputContainer->Add(fhPtPtFracDecayIso[icone][ipt]) ;
3461 snprintf(name, buffersize,"hPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
3462 snprintf(title, buffersize,"Isolated decay candidate #it{p}_{T} distribution for #it{R} = %2.2f and #it{p}_{T}^{sum} = %2.2f GeV/#it{c}",fConeSizes[icone],fSumPtThresholds[ipt]);
3463 fhPtPtSumDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
3464 // fhPtPtSumDecayIso[icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
3465 fhPtPtSumDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3466 outputContainer->Add(fhPtPtSumDecayIso[icone][ipt]) ;
3468 snprintf(name, buffersize,"hPtSumDensity_Decay_Cone_%d_Pt%d",icone,ipt);
3469 snprintf(title, buffersize,"Isolated decay candidate #it{p}_{T} distribution for density in #it{R} = %2.2f and #it{p}_{T}^{sum} = %2.2f GeV/#it{c}",fConeSizes[icone],fSumPtThresholds[ipt]);
3470 fhPtSumDensityDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
3471 // fhPtPtSumDecayIso[icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
3472 fhPtSumDensityDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3473 outputContainer->Add(fhPtSumDensityDecayIso[icone][ipt]) ;
3475 snprintf(name, buffersize,"hPtFracPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
3476 snprintf(title, buffersize,"Isolated decay candidate #it{p}_{T} distribution for PtFracPtSum in #it{R} = %2.2f and #it{p}_{T}^{fr} = %2.2f GeV/#it{c}",fConeSizes[icone],fPtFractions[ipt]);
3477 fhPtFracPtSumDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
3478 // fhPtPtSumDecayIso[icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
3479 fhPtFracPtSumDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3480 outputContainer->Add(fhPtFracPtSumDecayIso[icone][ipt]) ;
3483 snprintf(name, buffersize,"hEtaPhiPtThres_Decay_Cone_%d_Pt%d",icone,ipt);
3484 snprintf(title, buffersize,"Isolated decay candidate #eta:#phi distribution for #it{R} = %2.2f and #it{p}_{T}^{th} = %2.2f GeV/#it{c}",fConeSizes[icone],fPtThresholds[ipt]);
3485 fhEtaPhiPtThresDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
3486 fhEtaPhiPtThresDecayIso[icone][ipt]->SetXTitle("#eta");
3487 fhEtaPhiPtThresDecayIso[icone][ipt]->SetYTitle("#phi");
3488 outputContainer->Add(fhEtaPhiPtThresDecayIso[icone][ipt]) ;
3490 snprintf(name, buffersize,"hEtaPhiPtFrac_Decay_Cone_%d_Pt%d",icone,ipt);
3491 snprintf(title, buffersize,"Isolated decay candidate #eta:#phi distribution for #it{R} = %2.2f and #it{p}_{T}^{fr} = %2.2f GeV/#it{c}",fConeSizes[icone],fPtFractions[ipt]);
3492 fhEtaPhiPtFracDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
3493 fhEtaPhiPtFracDecayIso[icone][ipt]->SetXTitle("#eta");
3494 fhEtaPhiPtFracDecayIso[icone][ipt]->SetYTitle("#phi");
3495 outputContainer->Add(fhEtaPhiPtFracDecayIso[icone][ipt]) ;
3498 snprintf(name, buffersize,"hEtaPhiPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
3499 snprintf(title, buffersize,"Isolated decay candidate #eta:#phi distribution for #it{R} = %2.2f and #it{p}_{T}^{sum} = %2.2f GeV/#it{c}",fConeSizes[icone],fSumPtThresholds[ipt]);
3500 fhEtaPhiPtSumDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
3501 fhEtaPhiPtSumDecayIso[icone][ipt]->SetXTitle("#eta");
3502 fhEtaPhiPtSumDecayIso[icone][ipt]->SetYTitle("#phi");
3503 outputContainer->Add(fhEtaPhiPtSumDecayIso[icone][ipt]) ;
3505 snprintf(name, buffersize,"hEtaPhiSumDensity_Decay_Cone_%d_Pt%d",icone,ipt);
3506 snprintf(title, buffersize,"Isolated decay candidate #eta:#phi distribution for density #it{R} = %2.2f and #it{p}_{T}^{sum} = %2.2f GeV/#it{c}",fConeSizes[icone],fSumPtThresholds[ipt]);
3507 fhEtaPhiSumDensityDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
3508 fhEtaPhiSumDensityDecayIso[icone][ipt]->SetXTitle("#eta");
3509 fhEtaPhiSumDensityDecayIso[icone][ipt]->SetYTitle("#phi");
3510 outputContainer->Add(fhEtaPhiSumDensityDecayIso[icone][ipt]) ;
3512 snprintf(name, buffersize,"hEtaPhiFracPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
3513 snprintf(title, buffersize,"Isolated decay candidate #eta:#phi distribution for FracPtSum #it{R} = %2.2f and #it{p}_{T}^{fr} = %2.2f GeV/#it{c}",fConeSizes[icone],fPtFractions[ipt]);
3514 fhEtaPhiFracPtSumDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
3515 fhEtaPhiFracPtSumDecayIso[icone][ipt]->SetXTitle("#eta");
3516 fhEtaPhiFracPtSumDecayIso[icone][ipt]->SetYTitle("#phi");
3517 outputContainer->Add(fhEtaPhiFracPtSumDecayIso[icone][ipt]) ;
3523 for(Int_t imc = 0; imc < fgkNmcTypes; imc++)
3525 snprintf(name , buffersize,"hPtThreshMC%s_Cone_%d_Pt%d",mcPartName[imc].Data(),icone,ipt);
3526 snprintf(title, buffersize,"Isolated %s #it{p}_{T} for #it{R}=%2.2f and #it{p}_{T}^{th}=%2.2f",
3527 mcPartType[imc].Data(),fConeSizes[icone], fPtThresholds[ipt]);
3528 fhPtThresIsolatedMC[imc][icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
3529 fhPtThresIsolatedMC[imc][icone][ipt]->SetYTitle("#it{counts}");
3530 fhPtThresIsolatedMC[imc][icone][ipt]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
3531 outputContainer->Add(fhPtThresIsolatedMC[imc][icone][ipt]) ;
3534 snprintf(name , buffersize,"hPtFracMC%s_Cone_%d_Pt%d",mcPartName[imc].Data(),icone,ipt);
3535 snprintf(title, buffersize,"Isolated %s #it{p}_{T} for #it{R}=%2.2f and #Sigma #it{p}_{T}^{in cone}/#it{p}_{T}^{trig}=%2.2f",
3536 mcPartType[imc].Data(),fConeSizes[icone], fPtFractions[ipt]);
3537 fhPtFracIsolatedMC[imc][icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
3538 fhPtFracIsolatedMC[imc][icone][ipt]->SetYTitle("#it{counts}");
3539 fhPtFracIsolatedMC[imc][icone][ipt]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
3540 outputContainer->Add(fhPtFracIsolatedMC[imc][icone][ipt]) ;
3542 snprintf(name , buffersize,"hSumPtMC%s_Cone_%d_Pt%d",mcPartName[imc].Data(),icone,ipt);
3543 snprintf(title, buffersize,"Isolated %s #it{p}_{T} for #it{R}=%2.2f and #Sigma #it{p}_{T}^{in cone}=%2.2f",
3544 mcPartType[imc].Data(),fConeSizes[icone], fSumPtThresholds[ipt]);
3545 fhSumPtIsolatedMC[imc][icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
3546 fhSumPtIsolatedMC[imc][icone][ipt]->SetYTitle("#it{counts}");
3547 fhSumPtIsolatedMC[imc][icone][ipt]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
3548 outputContainer->Add(fhSumPtIsolatedMC[imc][icone][ipt]) ;
3555 if(IsPileUpAnalysisOn())
3557 for (Int_t i = 0; i < 7 ; i++)
3559 fhEIsoPileUp[i] = new TH1F(Form("hEPileUp%s",pileUpName[i].Data()),
3560 Form("Number of isolated particles vs E, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
3561 nptbins,ptmin,ptmax);
3562 fhEIsoPileUp[i]->SetYTitle("d#it{N} / d#it{E}");
3563 fhEIsoPileUp[i]->SetXTitle("#it{E} (GeV)");
3564 outputContainer->Add(fhEIsoPileUp[i]) ;
3566 fhPtIsoPileUp[i] = new TH1F(Form("hPtPileUp%s",pileUpName[i].Data()),
3567 Form("Number of isolated particles vs #it{p}_{T}, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
3568 nptbins,ptmin,ptmax);
3569 fhPtIsoPileUp[i]->SetYTitle("d#it{N} / #it{p}_{T}");
3570 fhPtIsoPileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3571 outputContainer->Add(fhPtIsoPileUp[i]) ;
3573 fhENoIsoPileUp[i] = new TH1F(Form("hENoIsoPileUp%s",pileUpName[i].Data()),
3574 Form("Number of not isolated particles vs E, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
3575 nptbins,ptmin,ptmax);
3576 fhENoIsoPileUp[i]->SetYTitle("d#it{N} / dE");
3577 fhENoIsoPileUp[i]->SetXTitle("#it{E} (GeV)");
3578 outputContainer->Add(fhENoIsoPileUp[i]) ;
3580 fhPtNoIsoPileUp[i] = new TH1F(Form("hPtNoIsoPileUp%s",pileUpName[i].Data()),
3581 Form("Number of not isolated particles vs #it{p}_{T}, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
3582 nptbins,ptmin,ptmax);
3583 fhPtNoIsoPileUp[i]->SetYTitle("d#it{N} / #it{p}_{T}");
3584 fhPtNoIsoPileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3585 outputContainer->Add(fhPtNoIsoPileUp[i]) ;
3588 fhTimeENoCut = new TH2F ("hTimeE_NoCut","time of cluster vs E of clusters, no cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
3589 fhTimeENoCut->SetXTitle("#it{E} (GeV)");
3590 fhTimeENoCut->SetYTitle("#it{time} (ns)");
3591 outputContainer->Add(fhTimeENoCut);
3593 fhTimeESPD = new TH2F ("hTimeE_SPD","time of cluster vs E of clusters, SPD cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
3594 fhTimeESPD->SetXTitle("#it{E} (GeV)");
3595 fhTimeESPD->SetYTitle("#it{time} (ns)");
3596 outputContainer->Add(fhTimeESPD);
3598 fhTimeESPDMulti = new TH2F ("hTimeE_SPDMulti","time of cluster vs E of clusters, SPD multi cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
3599 fhTimeESPDMulti->SetXTitle("#it{E} (GeV)");
3600 fhTimeESPDMulti->SetYTitle("#it{time} (ns)");
3601 outputContainer->Add(fhTimeESPDMulti);
3603 fhTimeNPileUpVertSPD = new TH2F ("hTime_NPileUpVertSPD","time of cluster vs N pile-up SPD vertex", ntimebins,timemin,timemax,50,0,50);
3604 fhTimeNPileUpVertSPD->SetYTitle("# vertex ");
3605 fhTimeNPileUpVertSPD->SetXTitle("#it{time} (ns)");
3606 outputContainer->Add(fhTimeNPileUpVertSPD);
3608 fhTimeNPileUpVertTrack = new TH2F ("hTime_NPileUpVertTracks","time of cluster vs N pile-up Tracks vertex", ntimebins,timemin,timemax, 50,0,50 );
3609 fhTimeNPileUpVertTrack->SetYTitle("# vertex ");
3610 fhTimeNPileUpVertTrack->SetXTitle("#it{time} (ns)");
3611 outputContainer->Add(fhTimeNPileUpVertTrack);
3613 fhTimeNPileUpVertContributors = new TH2F ("hTime_NPileUpVertContributors","time of cluster vs N constributors to pile-up SPD vertex", ntimebins,timemin,timemax,50,0,50);
3614 fhTimeNPileUpVertContributors->SetYTitle("# vertex ");
3615 fhTimeNPileUpVertContributors->SetXTitle("#it{time} (ns)");
3616 outputContainer->Add(fhTimeNPileUpVertContributors);
3618 fhTimePileUpMainVertexZDistance = new TH2F ("hTime_PileUpMainVertexZDistance","time of cluster vs distance in Z pile-up SPD vertex - main SPD vertex",ntimebins,timemin,timemax,100,0,50);
3619 fhTimePileUpMainVertexZDistance->SetYTitle("distance #it{z} (cm) ");
3620 fhTimePileUpMainVertexZDistance->SetXTitle("#it{time} (ns)");
3621 outputContainer->Add(fhTimePileUpMainVertexZDistance);
3623 fhTimePileUpMainVertexZDiamond = new TH2F ("hTime_PileUpMainVertexZDiamond","time of cluster vs distance in Z pile-up SPD vertex - z diamond",ntimebins,timemin,timemax,100,0,50);
3624 fhTimePileUpMainVertexZDiamond->SetYTitle("diamond distance #it{z} (cm) ");
3625 fhTimePileUpMainVertexZDiamond->SetXTitle("#it{time} (ns)");
3626 outputContainer->Add(fhTimePileUpMainVertexZDiamond);
3629 return outputContainer ;
3633 //____________________________________________________
3634 Int_t AliAnaParticleIsolation::GetMCIndex(Int_t mcTag)
3636 // Histogram index depending on origin of candidate
3638 if(!IsDataMC()) return -1;
3640 if (GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPrompt))
3644 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCFragmentation) ||
3645 GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCISR))
3649 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0))
3653 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0Decay))
3657 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEtaDecay))
3661 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCOtherDecay))
3663 return kmcOtherDecay;
3665 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron))
3669 else // anything else
3671 // careful can contain also other decays, to be checked.
3676 //__________________________________
3677 void AliAnaParticleIsolation::Init()
3679 // Do some checks and init stuff
3681 // In case of several cone and thresholds analysis, open the cuts for the filling of the
3682 // track and cluster reference arrays in cone when done in the MakeAnalysisFillAOD().
3683 // The different cones, thresholds are tested for this list of tracks, clusters.
3686 AliInfo("Open default isolation cuts for multiple Isolation analysis");
3687 GetIsolationCut()->SetPtThreshold(100);
3688 GetIsolationCut()->SetPtFraction(100);
3689 GetIsolationCut()->SetConeSize(1);
3692 if(!GetReader()->IsCTSSwitchedOn() && GetIsolationCut()->GetParticleTypeInCone()!=AliIsolationCut::kOnlyNeutral)
3693 AliFatal("STOP!: You want to use CTS tracks in analysis but not read!! \n!!Check the configuration file!!");
3697 //____________________________________________
3698 void AliAnaParticleIsolation::InitParameters()
3701 //Initialize the parameters of the analysis.
3702 SetInputAODName("PWG4Particle");
3703 SetAODObjArrayName("IsolationCone");
3704 AddToHistogramsName("AnaIsolation_");
3706 fIsoDetectorString = "EMCAL" ;
3707 fIsoDetector = kEMCAL ;
3709 fReMakeIC = kFALSE ;
3710 fMakeSeveralIC = kFALSE ;
3712 fMinCellsAngleOverlap = 3.;
3714 fLeadingOnly = kTRUE;
3715 fCheckLeadingWithNeutralClusters = kTRUE;
3718 fDecayBits[0] = AliNeutralMesonSelection::kPi0;
3719 fDecayBits[1] = AliNeutralMesonSelection::kEta;
3720 fDecayBits[2] = AliNeutralMesonSelection::kPi0Side;
3721 fDecayBits[3] = AliNeutralMesonSelection::kEtaSide;
3724 fBkgBinLimit[ 0] = 00.0; fBkgBinLimit[ 1] = 00.2; fBkgBinLimit[ 2] = 00.3; fBkgBinLimit[ 3] = 00.4; fBkgBinLimit[ 4] = 00.5;
3725 fBkgBinLimit[ 5] = 01.0; fBkgBinLimit[ 6] = 01.5; fBkgBinLimit[ 7] = 02.0; fBkgBinLimit[ 8] = 03.0; fBkgBinLimit[ 9] = 05.0;
3726 fBkgBinLimit[10] = 10.0; fBkgBinLimit[11] = 100.;
3727 for(Int_t ibin = fNBkgBin+1; ibin < 20; ibin++) fBkgBinLimit[ibin] = 00.0;
3730 fPtTrigBinLimit[ 0] = 8; fPtTrigBinLimit[ 1] = 10; fPtTrigBinLimit[ 2] = 12; fPtTrigBinLimit[ 3] = 14; fPtTrigBinLimit[ 4] = 16;
3731 fPtTrigBinLimit[ 5] = 20; fPtTrigBinLimit[ 6] = 25; ;
3732 for(Int_t ibin = fNPtTrigBin+1; ibin < 20; ibin++) fPtTrigBinLimit[ibin] = 00.0;
3734 //----------- Several IC-----------------
3737 fConeSizes [0] = 0.1; fConeSizes [1] = 0.2; fConeSizes [2] = 0.3; fConeSizes [3] = 0.4; fConeSizes [4] = 0.5;
3738 fPtThresholds [0] = 1.; fPtThresholds [1] = 2.; fPtThresholds [2] = 3.; fPtThresholds [3] = 4.; fPtThresholds [4] = 5.;
3739 fPtFractions [0] = 0.05; fPtFractions [1] = 0.075; fPtFractions [2] = 0.1; fPtFractions [3] = 1.25; fPtFractions [4] = 1.5;
3740 fSumPtThresholds[0] = 1.; fSumPtThresholds[1] = 2.; fSumPtThresholds[2] = 3.; fSumPtThresholds[3] = 4.; fSumPtThresholds[4] = 5.;
3744 //_________________________________________________________________________________________
3745 Bool_t AliAnaParticleIsolation::IsTriggerTheNearSideEventLeadingParticle(Int_t & idLeading)
3747 // Check if the what of the selected isolation candidates is leading particle in the same hemisphere
3748 // comparing with all the candidates, all the tracks or all the clusters.
3750 Double_t ptTrig = GetMinPt();
3751 Double_t phiTrig = 0 ;
3753 AliAODPWG4ParticleCorrelation* pLeading = 0;
3755 // Loop on stored AOD particles, find leading trigger on the selected list, with at least min pT.
3757 for(Int_t iaod = 0; iaod < GetInputAODBranch()->GetEntriesFast() ; iaod++)
3759 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
3760 particle->SetLeadingParticle(kFALSE); // set it later
3762 // Vertex cut in case of mixing
3765 Int_t check = CheckMixedEventVertex(particle->GetCaloLabel(0), particle->GetTrackLabel(0));
3766 if(check == 0) continue;
3767 if(check == -1) return kFALSE; // not sure if it is correct.
3770 //check if it is low pt trigger particle
3771 if((particle->Pt() < GetIsolationCut()->GetPtThreshold() ||
3772 particle->Pt() < GetIsolationCut()->GetSumPtThreshold()) &&
3775 continue ; //trigger should not come from underlying event
3778 // find the leading particles with highest momentum
3779 if (particle->Pt() > ptTrig)
3781 ptTrig = particle->Pt() ;
3782 phiTrig = particle->Phi();
3784 pLeading = particle ;
3786 }// finish search of leading trigger particle on the AOD branch.
3788 if(index < 0) return kFALSE;
3792 //printf("AOD leading pT %2.2f, ID %d\n", pLeading->Pt(),pLeading->GetCaloLabel(0));
3794 if(phiTrig < 0 ) phiTrig += TMath::TwoPi();
3796 // Compare if it is the leading of all tracks
3798 for(Int_t ipr = 0;ipr < GetCTSTracks()->GetEntriesFast() ; ipr ++ )
3800 AliVTrack * track = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
3802 if(track->GetID() == pLeading->GetTrackLabel(0) || track->GetID() == pLeading->GetTrackLabel(1) ||
3803 track->GetID() == pLeading->GetTrackLabel(2) || track->GetID() == pLeading->GetTrackLabel(3) ) continue ;
3805 fTrackVector.SetXYZ(track->Px(),track->Py(),track->Pz());
3806 Float_t pt = fTrackVector.Pt();
3807 Float_t phi = fTrackVector.Phi() ;
3808 if(phi < 0) phi+=TMath::TwoPi();
3810 //skip this event if near side associated particle pt larger than trigger
3812 Float_t deltaPhi = phiTrig-phi;
3814 // Calculate deltaPhi shift so that for the particles on the opposite side
3815 // it is defined between 90 and 270 degrees
3816 // Shift [-360,-90] to [0, 270]
3817 // and [270,360] to [-90,0]
3818 if(deltaPhi <= -TMath::PiOver2()) deltaPhi+=TMath::TwoPi();
3819 if(deltaPhi > 3*TMath::PiOver2()) deltaPhi-=TMath::TwoPi();
3821 if(pt > ptTrig && deltaPhi < TMath::PiOver2()) return kFALSE;
3825 // Compare if it is leading of all calorimeter clusters
3827 if(fCheckLeadingWithNeutralClusters)
3829 // Select the calorimeter cluster list
3830 TObjArray * nePl = 0x0;
3831 if (pLeading->GetDetectorTag() == kPHOS )
3832 nePl = GetPHOSClusters();
3834 nePl = GetEMCALClusters();
3836 if(!nePl) return kTRUE; // Do the selection just with the tracks if no calorimeter is available.
3838 for(Int_t ipr = 0;ipr < nePl->GetEntriesFast() ; ipr ++ )
3840 AliVCluster * cluster = (AliVCluster *) (nePl->At(ipr)) ;
3842 if(cluster->GetID() == pLeading->GetCaloLabel(0) || cluster->GetID() == pLeading->GetCaloLabel(1) ) continue ;
3844 cluster->GetMomentum(fMomentum,GetVertex(0));
3846 Float_t pt = fMomentum.Pt();
3847 Float_t phi = fMomentum.Phi() ;
3848 if(phi < 0) phi+=TMath::TwoPi();
3850 if(IsTrackMatched(cluster,GetReader()->GetInputEvent())) continue ; // avoid charged clusters, already covered by tracks, or cluster merging with track.
3852 // skip this event if near side associated particle pt larger than trigger
3853 // not really needed for calorimeter, unless DCal is included
3855 Float_t deltaPhi = phiTrig-phi;
3856 if(deltaPhi <= -TMath::PiOver2()) deltaPhi+=TMath::TwoPi();
3857 if(deltaPhi > 3*TMath::PiOver2()) deltaPhi-=TMath::TwoPi();
3859 if(pt > ptTrig && deltaPhi < TMath::PiOver2()) return kFALSE ;
3862 } // check neutral clusters
3865 pLeading->SetLeadingParticle(kTRUE);
3867 AliDebug(1,Form("Particle AOD with index %d is leading with pT %2.2f",idLeading, pLeading->Pt()));
3873 //__________________________________________________
3874 void AliAnaParticleIsolation::MakeAnalysisFillAOD()
3876 // Do analysis and fill aods
3877 // Search for the isolated photon in GetCalorimeter() with GetMinPt() < pt < GetMaxPt()
3878 // and if the particle is leading in the near side (if requested)
3880 if(!GetInputAODBranch())
3881 AliFatal(Form("No input particles in AOD with name branch < %s >, STOP",GetInputAODName().Data()));
3883 if(strcmp(GetInputAODBranch()->GetClass()->GetName(), "AliAODPWG4ParticleCorrelation"))
3884 AliFatal(Form("Wrong type of AOD object, change AOD class name in input AOD: It should be <AliAODPWG4ParticleCorrelation> and not <%s>",
3885 GetInputAODBranch()->GetClass()->GetName()));
3887 Int_t n = 0, nfrac = 0;
3888 Bool_t isolated = kFALSE ;
3889 Float_t coneptsum = 0, coneptlead = 0;
3890 TObjArray * pl = 0x0; ;
3892 //Select the calorimeter for candidate isolation with neutral particles
3893 if (GetCalorimeter() == kPHOS )
3894 pl = GetPHOSClusters();
3895 else if (GetCalorimeter() == kEMCAL)
3896 pl = GetEMCALClusters();
3898 //Loop on AOD branch, filled previously in AliAnaPhoton, find leading particle to do isolation only with it
3899 Int_t idLeading = -1 ;
3901 Int_t naod = GetInputAODBranch()->GetEntriesFast();
3903 AliDebug(1,Form("Input aod branch entries %d", naod));
3905 if(IsLeadingOnlyOn())
3907 Bool_t leading = IsTriggerTheNearSideEventLeadingParticle(idLeading);
3910 AliDebug(1,"Not leading; End fill AODs");
3913 iaod0 = idLeading ; // first entry in particle loop
3914 naod = idLeading+1; // last entry in particle loop
3917 // Check isolation of list of candidate particles or leading particle
3919 for(Int_t iaod = iaod0; iaod < naod; iaod++)
3921 AliAODPWG4ParticleCorrelation * aodinput = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
3923 // Check isolation only of clusters in fiducial region
3925 if(IsFiducialCutOn())
3927 Bool_t in = GetFiducialCut()->IsInFiducialCut(aodinput->Eta(), aodinput->Phi(), aodinput->GetDetectorTag()) ;
3928 if(! in ) continue ;
3931 //If too small or too large pt, skip
3932 Float_t pt = aodinput->Pt();
3933 if(pt < GetMinPt() || pt > GetMaxPt() ) continue ;
3936 //check if it is low pt trigger particle
3937 if( ( pt < GetIsolationCut()->GetPtThreshold() || pt < GetIsolationCut()->GetSumPtThreshold() ) &&
3940 continue ; //trigger should not come from underlying event
3943 //After cuts, study isolation
3944 n=0; nfrac = 0; isolated = kFALSE; coneptsum = 0; coneptlead = 0;
3945 GetIsolationCut()->MakeIsolationCut(GetCTSTracks(),pl,
3946 GetReader(), GetCaloPID(),
3947 kTRUE, aodinput, GetAODObjArrayName(),
3948 n,nfrac,coneptsum,coneptlead,isolated);
3950 if(!fMakeSeveralIC) aodinput->SetIsolated(isolated);
3952 AliDebug(1,Form("Particle isolated? %i; if so with index %d",isolated,iaod));
3955 } // particle isolation loop
3959 //_________________________________________________________
3960 void AliAnaParticleIsolation::MakeAnalysisFillHistograms()
3962 // Do analysis and fill histograms
3964 // In case of simulated data, fill acceptance histograms
3965 // Not ready for multiple case analysis.
3966 if(IsDataMC() && !fMakeSeveralIC) FillAcceptanceHistograms();
3968 //Loop on stored AOD
3969 Int_t naod = GetInputAODBranch()->GetEntriesFast();
3970 AliDebug(1,Form("Histo aod branch entries %d", naod));
3972 for(Int_t iaod = 0; iaod < naod ; iaod++)
3974 AliAODPWG4ParticleCorrelation* aod = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
3976 if(IsLeadingOnlyOn() && !aod->IsLeadingParticle()) continue; // Try to isolate only leading cluster or track
3978 // Check isolation only of clusters in fiducial region
3979 if(IsFiducialCutOn())
3981 Bool_t in = GetFiducialCut()->IsInFiducialCut(aod->Eta(),aod->Phi(),aod->GetDetectorTag()) ;
3982 if(! in ) continue ;
3985 Float_t pt = aod->Pt();
3987 //If too small or too large pt, skip
3988 if(pt < GetMinPt() || pt > GetMaxPt() ) continue ;
3990 Int_t mcTag = aod->GetTag() ;
3991 Int_t mcIndex = GetMCIndex(mcTag);
3993 // --- In case of redoing isolation from delta AOD ----
3994 // Not standard case, not used since its implementation
3997 //Analysis of multiple IC at same time
3998 MakeSeveralICAnalysis(aod,mcIndex);
4002 // --- In case of redoing isolation multiple cuts ----
4006 //In case a more strict IC is needed in the produced AOD
4007 Bool_t isolated = kFALSE;
4008 Int_t n = 0, nfrac = 0;
4009 Float_t coneptsum = 0, coneptlead = 0;
4011 //Recover reference arrays with clusters and tracks
4012 TObjArray * refclusters = aod->GetObjArray(GetAODObjArrayName()+"Clusters");
4013 TObjArray * reftracks = aod->GetObjArray(GetAODObjArrayName()+"Tracks");
4015 GetIsolationCut()->MakeIsolationCut(reftracks, refclusters,
4016 GetReader(), GetCaloPID(),
4018 n,nfrac,coneptsum,coneptlead,isolated);
4021 Bool_t isolated = aod->IsIsolated();
4022 Float_t energy = aod->E();
4023 Float_t phi = aod->Phi();
4024 Float_t eta = aod->Eta();
4026 AliDebug(1,Form("pt %1.1f, eta %1.1f, phi %1.1f, Isolated %d",pt, eta, phi, isolated));
4028 //---------------------------------------------------------------
4029 // Fill pt/sum pT distribution of particles in cone or in UE band
4030 //---------------------------------------------------------------
4032 Float_t coneptLeadCluster= 0;
4033 Float_t coneptLeadTrack = 0;
4034 Float_t coneptsumCluster = 0;
4035 Float_t coneptsumTrack = 0;
4036 Float_t coneptsumCell = 0;
4037 Float_t etaBandptsumClusterNorm = 0;
4038 Float_t etaBandptsumTrackNorm = 0;
4040 CalculateTrackSignalInCone (aod,coneptsumTrack , coneptLeadTrack );
4041 CalculateCaloSignalInCone (aod,coneptsumCluster, coneptLeadCluster);
4042 if(fFillCellHistograms)
4043 CalculateCaloCellSignalInCone(aod,coneptsumCell );
4045 if(GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kNeutralAndCharged)
4047 fhConeSumPtClustervsTrack ->Fill(coneptsumCluster, coneptsumTrack );
4048 fhConePtLeadClustervsTrack->Fill(coneptLeadCluster,coneptLeadTrack);
4050 if(coneptsumTrack > 0) fhConeSumPtClusterTrackFrac ->Fill(pt, coneptsumCluster /coneptsumTrack );
4051 if(coneptLeadTrack > 0) fhConePtLeadClusterTrackFrac->Fill(pt, coneptLeadCluster/coneptLeadTrack);
4053 if(fFillCellHistograms)
4055 fhConeSumPtCellvsTrack ->Fill(coneptsumCell, coneptsumTrack);
4056 fhConeSumPtCellTrack ->Fill(pt, coneptsumTrack+coneptsumCell);
4057 fhConeSumPtCellTrackTrigEtaPhi->Fill(eta,phi,coneptsumTrack+coneptsumCell);
4061 fhConeSumPt ->Fill(pt, coneptsumTrack+coneptsumCluster);
4062 fhConeSumPtTrigEtaPhi ->Fill(eta,phi,coneptsumTrack+coneptsumCluster);
4064 Float_t coneptLead = coneptLeadTrack;
4065 if(coneptLeadCluster > coneptLeadTrack) coneptLead = coneptLeadCluster;
4066 fhConePtLead->Fill(pt, coneptLead );
4068 AliDebug(1,Form("Particle %d Energy Sum in Isolation Cone %2.2f, Leading pT in cone %2.2f",
4069 iaod, coneptsumTrack+coneptsumCluster, coneptLead));
4071 //normalize phi/eta band per area unit
4072 if(fFillUEBandSubtractHistograms)
4073 CalculateNormalizeUEBandPerUnitArea(aod, coneptsumCluster, coneptsumCell, coneptsumTrack, etaBandptsumTrackNorm, etaBandptsumClusterNorm) ;
4075 // printf("Histograms analysis : cluster pt = %f, etaBandTrack = %f, etaBandCluster = %f, isolation = %d\n",aod->Pt(),etaBandptsumTrackNorm,etaBandptsumClusterNorm,aod->IsIsolated());
4077 //---------------------------------------------------------------
4078 // Fill Shower shape and track matching histograms
4079 //---------------------------------------------------------------
4081 FillTrackMatchingShowerShapeControlHistograms(aod, coneptsumTrack+coneptsumCluster, coneptLead, mcIndex);
4083 //---------------------------------------------------------------
4084 // Isolated/ Non isolated histograms
4085 //---------------------------------------------------------------
4089 AliDebug(1,Form("Particle %d ISOLATED: fill histograms", iaod));
4091 fhEIso ->Fill(energy);
4093 fhPhiIso ->Fill(pt,phi);
4094 fhEtaIso ->Fill(pt,eta);
4095 fhEtaPhiIso ->Fill(eta,phi);
4099 // For histograms in arrays, index in the array, corresponding to any particle origin
4100 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
4102 fhPtIsoMC [kmcPhoton]->Fill(pt);
4103 fhPhiIsoMC[kmcPhoton]->Fill(pt,phi);
4104 fhEtaIsoMC[kmcPhoton]->Fill(pt,eta);
4107 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCDecayPairLost) && mcIndex==kmcPi0Decay )
4109 fhPtIsoMC [kmcPi0DecayLostPair]->Fill(pt);
4110 fhPhiIsoMC[kmcPi0DecayLostPair]->Fill(pt,phi);
4111 fhEtaIsoMC[kmcPi0DecayLostPair]->Fill(pt,eta);
4114 fhPtIsoMC [mcIndex]->Fill(pt);
4115 fhPhiIsoMC[mcIndex]->Fill(pt,phi);
4116 fhEtaIsoMC[mcIndex]->Fill(pt,eta);
4117 }//Histograms with MC
4119 if(fFillNLMHistograms)
4120 fhPtNLocMaxIso ->Fill(pt,aod->GetNLM()) ;
4122 if(IsHighMultiplicityAnalysisOn())
4124 fhPtCentralityIso ->Fill(pt,GetEventCentrality()) ;
4125 fhPtEventPlaneIso ->Fill(pt,GetEventPlaneAngle() ) ;
4128 if(IsPileUpAnalysisOn())
4130 if(GetReader()->IsPileUpFromSPD()) { fhEIsoPileUp[0] ->Fill(energy) ; fhPtIsoPileUp[0]->Fill(pt) ; }
4131 if(GetReader()->IsPileUpFromEMCal()) { fhEIsoPileUp[1] ->Fill(energy) ; fhPtIsoPileUp[1]->Fill(pt) ; }
4132 if(GetReader()->IsPileUpFromSPDOrEMCal()) { fhEIsoPileUp[2] ->Fill(energy) ; fhPtIsoPileUp[2]->Fill(pt) ; }
4133 if(GetReader()->IsPileUpFromSPDAndEMCal()) { fhEIsoPileUp[3] ->Fill(energy) ; fhPtIsoPileUp[3]->Fill(pt) ; }
4134 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) { fhEIsoPileUp[4] ->Fill(energy) ; fhPtIsoPileUp[4]->Fill(pt) ; }
4135 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) { fhEIsoPileUp[5] ->Fill(energy) ; fhPtIsoPileUp[5]->Fill(pt) ; }
4136 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhEIsoPileUp[6] ->Fill(energy) ; fhPtIsoPileUp[6]->Fill(pt) ; }
4138 // Fill histograms to undertand pile-up before other cuts applied
4139 // Remember to relax time cuts in the reader
4140 FillPileUpHistograms(aod->GetCaloLabel(0));
4143 }//Isolated histograms
4144 else // NON isolated
4146 AliDebug(1,Form("Particle %d NOT ISOLATED, fill histograms", iaod));
4148 fhENoIso ->Fill(energy);
4149 fhPtNoIso ->Fill(pt);
4150 fhEtaPhiNoIso ->Fill(eta,phi);
4154 if( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton) )
4155 fhPtNoIsoMC[kmcPhoton]->Fill(pt);
4157 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCDecayPairLost) && mcIndex==kmcPi0Decay )
4158 fhPtNoIsoMC[kmcPi0DecayLostPair]->Fill(pt);
4160 fhPtNoIsoMC[mcIndex]->Fill(pt);
4163 if(fFillNLMHistograms)
4164 fhPtNLocMaxNoIso ->Fill(pt,aod->GetNLM());
4166 if(IsPileUpAnalysisOn())
4168 if(GetReader()->IsPileUpFromSPD()) { fhENoIsoPileUp[0] ->Fill(energy) ; fhPtNoIsoPileUp[0]->Fill(pt) ; }
4169 if(GetReader()->IsPileUpFromEMCal()) { fhENoIsoPileUp[1] ->Fill(energy) ; fhPtNoIsoPileUp[1]->Fill(pt) ; }
4170 if(GetReader()->IsPileUpFromSPDOrEMCal()) { fhENoIsoPileUp[2] ->Fill(energy) ; fhPtNoIsoPileUp[2]->Fill(pt) ; }
4171 if(GetReader()->IsPileUpFromSPDAndEMCal()) { fhENoIsoPileUp[3] ->Fill(energy) ; fhPtNoIsoPileUp[3]->Fill(pt) ; }
4172 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) { fhENoIsoPileUp[4] ->Fill(energy) ; fhPtNoIsoPileUp[4]->Fill(pt) ; }
4173 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) { fhENoIsoPileUp[5] ->Fill(energy) ; fhPtNoIsoPileUp[5]->Fill(pt) ; }
4174 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhENoIsoPileUp[6] ->Fill(energy) ; fhPtNoIsoPileUp[6]->Fill(pt) ; }
4181 //______________________________________________________
4182 void AliAnaParticleIsolation::FillAcceptanceHistograms()
4184 // Fill acceptance histograms if MC data is available
4185 // Only when particle is in the calorimeter. Rethink if CTS is used.
4187 AliDebug(1,"Start");
4189 //Double_t photonY = -100 ;
4190 Double_t photonE = -1 ;
4191 Double_t photonPt = -1 ;
4192 Double_t photonPhi = 100 ;
4193 Double_t photonEta = -1 ;
4201 TParticle * primStack = 0;
4202 AliAODMCParticle * primAOD = 0;
4204 // Calorimeter cluster merging angle
4205 // angle smaller than 3 cells 6 cm (0.014) in EMCal, 2.2 cm in PHOS (0.014*(2.2/6))
4206 Float_t overlapAngle = 0;
4207 Float_t minECalo = 0;
4208 if (GetCalorimeter()==kEMCAL)
4210 overlapAngle = fMinCellsAngleOverlap*0.014 ;
4211 minECalo = GetReader()->GetEMCALEMin();
4213 else if (GetCalorimeter()==kPHOS )
4215 overlapAngle = fMinCellsAngleOverlap*0.00382;
4216 minECalo = GetReader()->GetPHOSEMin();
4219 // Get the ESD MC particles container
4220 AliStack * stack = 0;
4221 if( GetReader()->ReadStack() )
4223 stack = GetMCStack();
4225 nprim = stack->GetNtrack();
4228 // Get the AOD MC particles container
4229 TClonesArray * mcparticles = 0;
4230 if( GetReader()->ReadAODMCParticles() )
4232 mcparticles = GetReader()->GetAODMCParticles();
4233 if( !mcparticles ) return;
4234 nprim = mcparticles->GetEntriesFast();
4237 for(Int_t i=0 ; i < nprim; i++)
4239 if(GetReader()->AcceptOnlyHIJINGLabels() && !GetReader()->IsHIJINGLabel(i)) continue ;
4241 if(GetReader()->ReadStack())
4243 primStack = stack->Particle(i) ;
4246 AliWarning("ESD primaries pointer not available!!");
4250 pdg = primStack->GetPdgCode();
4251 status = primStack->GetStatusCode();
4253 if(primStack->Energy() == TMath::Abs(primStack->Pz())) continue ; //Protection against floating point exception
4255 //printf("i %d, %s %d %s %d \n",i, stack->Particle(i)->GetName(), stack->Particle(i)->GetPdgCode(),
4256 // prim->GetName(), prim->GetPdgCode());
4258 //photonY = 0.5*TMath::Log((prim->Energy()+prim->Pz())/(prim->Energy()-prim->Pz())) ;
4261 primStack->Momentum(fMomentum);
4266 primAOD = (AliAODMCParticle *) mcparticles->At(i);
4269 AliWarning("AOD primaries pointer not available!!");
4273 pdg = primAOD->GetPdgCode();
4274 status = primAOD->GetStatus();
4276 if(primAOD->E() == TMath::Abs(primAOD->Pz())) continue ; //Protection against floating point exception
4278 //photonY = 0.5*TMath::Log((prim->Energy()+prim->Pz())/(prim->Energy()-prim->Pz())) ;
4281 fMomentum.SetPxPyPzE(primAOD->Px(),primAOD->Py(),primAOD->Pz(),primAOD->E());
4284 // Select only photons in the final state
4285 if(pdg != 22 && pdg!=111) continue ;
4287 // Consider only final state particles, but this depends on generator,
4288 // status 1 is the usual one, in case of not being ok, leave the possibility
4289 // to not consider this.
4290 if( pdg == 22 && status != 1 &&
4291 GetMCAnalysisUtils()->GetMCGenerator() != AliMCAnalysisUtils::kBoxLike ) continue ;
4293 // If too small or too large pt, skip, same cut as for data analysis
4294 photonPt = fMomentum.Pt () ;
4296 if(photonPt < GetMinPt() || photonPt > GetMaxPt() ) continue ;
4298 photonE = fMomentum.E () ;
4299 photonEta = fMomentum.Eta() ;
4300 photonPhi = fMomentum.Phi() ;
4302 if(photonPhi < 0) photonPhi+=TMath::TwoPi();
4304 // Check if photons hit the Calorimeter acceptance
4305 if(IsRealCaloAcceptanceOn() && fIsoDetector!=kCTS) // defined on base class
4307 if(GetReader()->ReadStack() &&
4308 !GetCaloUtils()->IsMCParticleInCalorimeterAcceptance(fIsoDetector, primStack)) continue ;
4309 if(GetReader()->ReadAODMCParticles() &&
4310 !GetCaloUtils()->IsMCParticleInCalorimeterAcceptance(fIsoDetector, primAOD )) continue ;
4313 // Check same fidutial borders as in data analysis on top of real acceptance if real was requested.
4314 if(!GetFiducialCut()->IsInFiducialCut(fMomentum.Eta(),fMomentum.Phi(),fIsoDetector)) continue ;
4316 // Get tag of this particle photon from fragmentation, decay, prompt ...
4317 // Set the origin of the photon.
4318 tag = GetMCAnalysisUtils()->CheckOrigin(i,GetReader(),fIsoDetector);
4320 if(pdg == 22 && !GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
4322 // A conversion photon from a hadron, skip this kind of photon
4323 // printf("AliAnaPhoton::FillAcceptanceHistograms() - not a photon, weird!\n ");
4324 // GetMCAnalysisUtils()->PrintMCTag(tag);
4329 // Check the origin of the photon or if it is a pi0, assing a tag
4330 Int_t pi0d1Label = -1, pi0d2Label = -1;
4331 Bool_t overlapPi0 = kTRUE;
4334 mcIndex = kmcPrimPi0;
4335 //printf("check pi0\n");
4336 // Get the labels of the decay particles, remove them from isolation cone
4337 // Get also the opening angle and check if decays likely overlap
4338 Bool_t okpi0 = kFALSE;
4339 Int_t ndaugh = GetMCAnalysisUtils()->GetNDaughters(i,GetReader(), okpi0);
4340 //printf("OK pi0 %d, ndaugh %d\n",okpi0,ndaugh);
4341 Int_t d1Pdg = 0, d1Status = 0; Bool_t ok1 = kFALSE;
4342 Int_t d2Pdg = 0, d2Status = 0; Bool_t ok2 = kFALSE;
4344 if ( ndaugh > 0 ) fMomDaugh1 = GetMCAnalysisUtils()->GetDaughter(0,i,GetReader(),d1Pdg, d1Status,ok1, pi0d1Label);
4345 if ( ndaugh > 1 ) fMomDaugh2 = GetMCAnalysisUtils()->GetDaughter(1,i,GetReader(),d2Pdg, d2Status,ok2, pi0d2Label);
4347 //printf("pi0 daug %d: a) %d, b) %d, c) %d\n", ndaugh,pi0d1Label,pi0d2Label);
4348 //if ( ndaugh !=2 ) printf("PDG: %d, %d, %d\n",d1Pdg,d2Pdg);
4350 // Select decays in 2 photons
4351 if( ndaugh!=2 || (d2Pdg != d1Pdg && d1Pdg!=22)) okpi0 = kFALSE;
4353 // Check overlap of decays
4354 if( okpi0 && fMakePrimaryPi0DecayStudy)
4356 Float_t d12Angle = fMomDaugh1.Angle(fMomDaugh2.Vect());
4357 if(d12Angle > overlapAngle) overlapPi0 = kFALSE;
4358 //printf(" -- d12 angle %2.3f, angle limit %2.3f, overlap %d\n",d12Angle,overlapAngle,overlapPi0);
4361 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPrompt) )
4363 mcIndex = kmcPrimPrompt;
4365 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCFragmentation) )
4367 mcIndex = kmcPrimFrag ;
4369 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCISR))
4371 mcIndex = kmcPrimISR;
4373 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0Decay))
4375 mcIndex = kmcPrimPi0Decay;
4377 else if( (GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEtaDecay) ||
4378 GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCOtherDecay)))
4380 mcIndex = kmcPrimOtherDecay;
4384 // Other decay but from non final state particle
4385 mcIndex = kmcPrimOtherDecay;
4388 // ////////////////////ISO MC/////////////////////////
4389 Double_t sumPtInCone = 0; Double_t dR=0. ;
4390 TParticle * mcisopStack = 0;
4391 AliAODMCParticle * mcisopAOD = 0;
4392 Int_t partInConeStatus = -1, partInConeMother = -1;
4393 Double_t partInConePt = 0, partInConeE = 0, partInConeEta = 0, partInConePhi = 0;
4394 Int_t partInConeCharge = 0, npart = 0;
4395 for(Int_t ip = 0; ip < nprim ; ip++)
4399 if( pdg==111 && ( ip == pi0d1Label || ip == pi0d2Label ) )
4401 //printf("Do not count pi0 decays in cone when isolating pi0 \n");
4405 if( GetReader()->ReadStack() )
4407 mcisopStack = static_cast<TParticle*>(stack->Particle(ip));
4408 if( !mcisopStack ) continue;
4409 partInConeStatus = mcisopStack->GetStatusCode();
4411 // Consider only final state particles, but this depends on generator,
4412 // status 1 is the usual one, in case of not being ok, leave the possibility
4413 // to not consider this.
4414 if( partInConeStatus != 1 &&
4415 GetMCAnalysisUtils()->GetMCGenerator()!= AliMCAnalysisUtils::kBoxLike ) continue ;
4417 partInConeMother = mcisopStack->GetMother(0);
4418 partInConePt = mcisopStack->Pt();
4419 partInConeE = mcisopStack->Energy();
4420 partInConeEta = mcisopStack->Eta();
4421 partInConePhi = mcisopStack->Phi();
4422 partInConeCharge = TMath::Abs((Int_t) TDatabasePDG::Instance()->GetParticle(mcisopStack->GetPdgCode())->Charge());
4423 mcisopStack->Momentum(fMomIso);
4427 mcisopAOD = (AliAODMCParticle *) mcparticles->At(ip);
4428 if( !mcisopAOD ) continue;
4430 partInConeStatus = mcisopAOD->GetStatus();
4431 // Consider only final state particles, but this depends on generator,
4432 // status 1 is the usual one, in case of not being ok, leave the possibility
4433 // to not consider this.
4434 if( partInConeStatus != 1 &&
4435 GetMCAnalysisUtils()->GetMCGenerator() != AliMCAnalysisUtils::kBoxLike ) continue ;
4437 partInConeMother = mcisopAOD->GetMother();
4438 partInConePt = mcisopAOD->Pt();
4439 partInConeE = mcisopAOD->E();
4440 partInConeEta = mcisopAOD->Eta();
4441 partInConePhi = mcisopAOD->Phi();
4442 partInConeCharge = TMath::Abs(mcisopAOD->Charge());
4443 fMomIso.SetPxPyPzE(mcisopAOD->Px(),mcisopAOD->Py(),mcisopAOD->Pz(),mcisopAOD->E());
4446 if( partInConeMother == i ) continue;
4449 // Apply acceptance and energy/pt cut for particles in cone
4450 if(fSelectPrimariesInCone)
4452 if( partInConeCharge > 0) // charged pT cut and acceptance
4454 if( GetIsolationCut()->GetParticleTypeInCone() == AliIsolationCut::kOnlyNeutral ) continue;
4456 if( partInConePt < GetReader()->GetCTSPtMin () ) continue;
4458 if(!GetReader()->GetFiducialCut()->IsInFiducialCut(fMomIso.Eta(),fMomIso.Phi(),kCTS)) continue ;
4460 else // neutrals E cut and acceptance
4462 if( GetIsolationCut()->GetParticleTypeInCone() == AliIsolationCut::kOnlyCharged ) continue;
4464 if( partInConeE <= minECalo ) continue;
4466 if(!GetReader()->GetFiducialCut()->IsInFiducialCut(fMomIso.Eta(),fMomIso.Phi(),GetCalorimeter())) continue ;
4468 if(IsRealCaloAcceptanceOn()) // defined on base class
4470 if(GetReader()->ReadStack() &&
4471 !GetCaloUtils()->IsMCParticleInCalorimeterAcceptance(GetCalorimeter(), mcisopStack)) continue ;
4472 if(GetReader()->ReadAODMCParticles() &&
4473 !GetCaloUtils()->IsMCParticleInCalorimeterAcceptance(GetCalorimeter(), mcisopAOD )) continue ;
4479 dR = GetIsolationCut()->Radius(photonEta, photonPhi, partInConeEta, partInConePhi);
4481 if(dR > GetIsolationCut()->GetConeSize())
4484 sumPtInCone += partInConePt;
4485 if(partInConePt > GetIsolationCut()->GetPtThreshold() &&
4486 partInConePt < GetIsolationCut()->GetPtThresholdMax()) npart++;
4489 ///////END ISO MC/////////////////////////
4491 // Fill the histograms, only those in the defined calorimeter acceptance
4493 fhEtaPrimMC[kmcPrimPhoton]->Fill(photonPt , photonEta) ;
4494 fhPhiPrimMC[kmcPrimPhoton]->Fill(photonPt , photonPhi) ;
4495 fhEPrimMC [kmcPrimPhoton]->Fill(photonE) ;
4496 fhPtPrimMC [kmcPrimPhoton]->Fill(photonPt) ;
4498 fhEtaPrimMC[mcIndex]->Fill(photonPt , photonEta) ;
4499 fhPhiPrimMC[mcIndex]->Fill(photonPt , photonPhi) ;
4500 fhEPrimMC [mcIndex]->Fill(photonE ) ;
4501 fhPtPrimMC [mcIndex]->Fill(photonPt) ;
4503 // In case the photon is a decay from pi0,
4504 // study how the decay kinematics affects the isolation
4506 Bool_t okpi0 = 0, ok1 = 0, ok2 = 0;
4507 Int_t pi0label = -1, d1Label = -1, d2Label = -1;
4508 Bool_t d2Acc = kTRUE, overlap = kTRUE;
4510 Float_t dRdaugh2 = 0, d12Angle = 0;
4511 if(mcIndex == kmcPrimPi0Decay && fMakePrimaryPi0DecayStudy)
4513 GetMCAnalysisUtils()->GetMotherWithPDG(i,111,GetReader(),okpi0, pi0label);
4516 ndaugh = GetMCAnalysisUtils()->GetNDaughters(pi0label,GetReader(), okpi0);
4519 Int_t d1Pdg = 0, d1Status = 0;
4520 fMomDaugh1 = GetMCAnalysisUtils()->GetDaughter(0,pi0label,GetReader(),d1Pdg, d1Status,ok1, d1Label);
4521 Int_t d2Pdg = 0, d2Status = 0;
4522 fMomDaugh2 = GetMCAnalysisUtils()->GetDaughter(1,pi0label,GetReader(),d2Pdg, d2Status,ok2, d2Label);
4523 if(d2Pdg != d1Pdg && d1Pdg!=22) okpi0 = kFALSE;
4525 // Check the momentum and location of second daughter
4528 // assign current trigger to first daughter
4531 Int_t tmpLabel = d2Label;
4534 fMomentum = fMomDaugh2;
4535 fMomDaugh2 = fMomDaugh1;
4536 fMomDaugh1 = fMomentum;
4539 // Check if photons hit the Calorimeter acceptance
4540 if(IsRealCaloAcceptanceOn() && fIsoDetector!=kCTS) // defined on base class
4541 d2Acc = GetCaloUtils()->IsMCParticleInCalorimeterAcceptance(fIsoDetector,fMomDaugh2.Eta(),
4542 fMomDaugh2.Theta(),fMomDaugh2.Phi(),d2AbsId) ;
4544 //printf("D2 (eta %2.2f,phi %2.2f)in real calo %d, with absId %d\n",
4545 // daugh2mom.Eta(), daugh2mom.Phi()*TMath::RadToDeg(),d2Acc,d2AbsId);
4547 // Check same fidutial borders as in data analysis on top of real acceptance if real was requested.
4548 if(d2Acc) d2Acc = GetReader()->GetFiducialCut()->IsInFiducialCut(fMomDaugh2.Eta(),fMomDaugh2.Phi(),fIsoDetector);
4549 //printf("D2 fidcut %d\n",d2Acc);
4551 Float_t phiDaugh2 = fMomDaugh2.Phi();
4552 if(phiDaugh2 < 0) phiDaugh2+=TMath::TwoPi();
4553 dRdaugh2 = GetIsolationCut()->Radius(photonEta, photonPhi, fMomDaugh2.Eta(),phiDaugh2);
4555 // Opening angle, check if pairs will likely overlap
4556 d12Angle = fMomDaugh1.Angle(fMomDaugh2.Vect());
4557 if(d12Angle > overlapAngle) overlap = kFALSE;
4563 //printf("Check mother of label %d: mom label %d, okmom %d ndaugh %d, daugh label1 %d, label2 %d, ok1 %d, ok2 %d, R %2.3f, opening angle %2.3f, overlap %d\n",
4564 // i, pi0label,okpi0,ndaugh,d1Label,d2Label,ok1,ok2, dRdaugh2, d12Angle, overlap);
4566 // Second decay out of cone
4567 if(dRdaugh2 > GetIsolationCut()->GetConeSize())
4568 fhPtPrimMCPi0DecayPairOutOfCone->Fill(photonPt);
4570 // Second decay out of acceptance
4571 if(!ok2 || !d2Acc || fMomDaugh2.E() <= minECalo)
4573 fhPtPrimMCPi0DecayPairOutOfAcceptance->Fill(photonPt);
4574 if(!overlap) fhPtPrimMCPi0DecayPairOutOfAcceptanceNoOverlap->Fill(photonPt);
4577 // Not Overlapped decay
4578 if(!overlap) fhPtPrimMCPi0DecayPairNoOverlap->Fill(photonPt);
4580 // Second decay pt smaller than threshold
4581 if(d2Acc && dRdaugh2 < GetIsolationCut()->GetConeSize() &&
4582 fMomDaugh2.E() < GetIsolationCut()->GetPtThreshold())
4584 fhPtPrimMCPi0DecayPairAcceptInConeLowPt->Fill(photonPt);
4587 fhPtPrimMCPi0DecayPairAcceptInConeLowPtNoOverlap->Fill(photonPt);
4588 if(fMomDaugh2.E() > minECalo) fhPtPrimMCPi0DecayPairAcceptInConeLowPtNoOverlapCaloE->Fill(photonPt);
4593 if(mcIndex == kmcPrimPi0 && fMakePrimaryPi0DecayStudy && overlapPi0)
4594 fhPtPrimMCPi0Overlap->Fill(photonPt);
4597 Bool_t isolated = kFALSE;
4598 if(GetIsolationCut()->GetICMethod() == AliIsolationCut::kSumPtIC &&
4599 (sumPtInCone < GetIsolationCut()->GetSumPtThreshold() ||
4600 sumPtInCone > GetIsolationCut()->GetSumPtThresholdMax()))
4603 if(GetIsolationCut()->GetICMethod() == AliIsolationCut::kPtThresIC &&
4609 fhPtPrimMCiso [mcIndex] ->Fill(photonPt) ;
4610 fhPtPrimMCiso [kmcPrimPhoton]->Fill(photonPt) ;
4611 if(mcIndex == kmcPrimPi0Decay && fMakePrimaryPi0DecayStudy)
4613 // Not Overlapped decay
4614 if(!overlap) fhPtPrimMCPi0DecayIsoPairNoOverlap->Fill(photonPt);
4616 // Second decay out of cone
4617 if(dRdaugh2 > GetIsolationCut()->GetConeSize())
4618 fhPtPrimMCPi0DecayIsoPairOutOfCone->Fill(photonPt);
4620 // Second decay out of acceptance
4621 if(!ok2 || !d2Acc || fMomDaugh2.E() <= minECalo)
4623 fhPtPrimMCPi0DecayIsoPairOutOfAcceptance->Fill(photonPt);
4624 if(!overlap) fhPtPrimMCPi0DecayIsoPairOutOfAcceptanceNoOverlap->Fill(photonPt);
4627 // Second decay pt smaller than threshold
4628 if(d2Acc && dRdaugh2 < GetIsolationCut()->GetConeSize() &&
4629 fMomDaugh2.E() < GetIsolationCut()->GetPtThreshold())
4631 fhPtPrimMCPi0DecayIsoPairAcceptInConeLowPt->Fill(photonPt);
4634 fhPtPrimMCPi0DecayIsoPairAcceptInConeLowPtNoOverlap->Fill(photonPt);
4635 if(fMomDaugh2.E() > minECalo) fhPtPrimMCPi0DecayIsoPairAcceptInConeLowPtNoOverlapCaloE->Fill(photonPt);
4640 if(mcIndex == kmcPrimPi0 && fMakePrimaryPi0DecayStudy && overlapPi0)
4641 fhPtPrimMCPi0IsoOverlap->Fill(photonPt);
4644 }//loop on primaries
4651 //_____________________________________________________________________________________
4652 void AliAnaParticleIsolation::MakeSeveralICAnalysis(AliAODPWG4ParticleCorrelation* ph,
4656 //Isolation Cut Analysis for both methods and different pt cuts and cones
4657 Float_t ptC = ph->Pt();
4658 Float_t etaC = ph->Eta();
4659 Float_t phiC = ph->Phi();
4660 if(phiC<0) phiC += TMath::TwoPi();
4661 Int_t tag = ph->GetTag();
4664 if(fFillTaggedDecayHistograms)
4666 decayTag = ph->DecayTag();
4667 if(decayTag < 0) decayTag = 0;
4670 AliDebug(1,Form("Isolate pT %2.2f, decay tag %d",ptC, decayTag));
4672 //Keep original setting used when filling AODs, reset at end of analysis
4673 Float_t ptthresorg = GetIsolationCut()->GetPtThreshold();
4674 Float_t ptfracorg = GetIsolationCut()->GetPtFraction();
4675 Float_t ptsumcorg = GetIsolationCut()->GetSumPtThreshold();
4676 Float_t rorg = GetIsolationCut()->GetConeSize();
4678 Float_t coneptsum = 0, coneptlead = 0;
4679 Int_t n [10][10];//[fNCones][fNPtThresFrac];
4680 Int_t nfrac[10][10];//[fNCones][fNPtThresFrac];
4681 Bool_t isolated = kFALSE;
4683 // Fill hist with all particles before isolation criteria
4684 fhENoIso ->Fill(ph->E());
4685 fhPtNoIso ->Fill(ptC);
4686 fhEtaPhiNoIso->Fill(etaC,phiC);
4690 if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
4691 fhPtNoIsoMC[kmcPhoton]->Fill(ptC);
4693 if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCDecayPairLost) && mcIndex==kmcPi0Decay )
4694 fhPtNoIsoMC[kmcPi0DecayLostPair]->Fill(ptC);
4696 fhPtNoIsoMC[mcIndex]->Fill(ptC);
4699 // Candidates tagged as decay in another analysis (AliAnaPi0EbE)
4700 if(fFillTaggedDecayHistograms && decayTag > 0)
4702 for(Int_t ibit = 0; ibit < fNDecayBits; ibit++)
4704 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[ibit]))
4706 fhPtDecay [0][ibit]->Fill(ptC);
4707 fhEtaPhiDecay[0][ibit]->Fill(etaC,phiC);
4711 if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
4712 fhPtDecayMC[0][ibit][kmcPhoton]->Fill(ptC);
4714 if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCDecayPairLost) && mcIndex==kmcPi0Decay )
4715 fhPtDecayMC[0][ibit][kmcPi0DecayLostPair]->Fill(ptC);
4717 fhPtDecayMC[0][ibit][mcIndex]->Fill(ptC);
4721 } // decay histograms
4723 //Get vertex for photon momentum calculation
4724 Double_t vertex[] = {0,0,0} ; //vertex ;
4725 if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
4726 GetReader()->GetVertex(vertex);
4728 //Loop on cone sizes
4729 for(Int_t icone = 0; icone<fNCones; icone++)
4731 //Recover reference arrays with clusters and tracks
4732 TObjArray * refclusters = ph->GetObjArray(GetAODObjArrayName()+"Clusters");
4733 TObjArray * reftracks = ph->GetObjArray(GetAODObjArrayName()+"Tracks");
4735 //If too small or too large pt, skip
4736 if(ptC < GetMinPt() || ptC > GetMaxPt() ) continue ;
4738 //In case a more strict IC is needed in the produced AOD
4740 isolated = kFALSE; coneptsum = 0; coneptlead = 0;
4742 GetIsolationCut()->SetSumPtThreshold(100);
4743 GetIsolationCut()->SetPtThreshold(100);
4744 GetIsolationCut()->SetPtFraction(100);
4745 GetIsolationCut()->SetConeSize(fConeSizes[icone]);
4747 // retreive pt tracks to fill histo vs. pt leading
4748 //Fill pt distribution of particles in cone
4749 //fhPtLeadingPt(),fhPerpSumPtLeadingPt(),fhPerpPtLeadingPt(),
4751 // Tracks in perpendicular cones
4752 Double_t sumptPerp = 0. ;
4753 TObjArray * trackList = GetCTSTracks() ;
4754 for(Int_t itrack=0; itrack < trackList->GetEntriesFast(); itrack++)
4756 AliVTrack* track = (AliVTrack *) trackList->At(itrack);
4757 //fill the histograms at forward range
4760 AliDebug(1,"Track not available?");
4764 Double_t dPhi = phiC - track->Phi() + TMath::PiOver2();
4765 Double_t dEta = etaC - track->Eta();
4766 Double_t arg = dPhi*dPhi + dEta*dEta;
4767 if(TMath::Sqrt(arg) < fConeSizes[icone])
4769 fhPerpPtLeadingPt[icone]->Fill(ptC,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
4770 sumptPerp+=track->Pt();
4773 dPhi = phiC - track->Phi() - TMath::PiOver2();
4774 arg = dPhi*dPhi + dEta*dEta;
4775 if(TMath::Sqrt(arg) < fConeSizes[icone])
4777 fhPerpPtLeadingPt[icone]->Fill(ptC,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
4778 sumptPerp+=track->Pt();
4782 fhPerpSumPtLeadingPt[icone]->Fill(ptC,sumptPerp);
4784 // Tracks in isolation cone, pT distribution and sum
4785 if(reftracks && GetIsolationCut()->GetParticleTypeInCone()!= AliIsolationCut::kOnlyNeutral)
4787 for(Int_t itrack=0; itrack < reftracks->GetEntriesFast(); itrack++)
4789 AliVTrack* track = (AliVTrack *) reftracks->At(itrack);
4791 Float_t rad = GetIsolationCut()->Radius(etaC, phiC, track->Eta(), track->Phi());
4793 if(rad > fConeSizes[icone]) continue ;
4795 fhPtLeadingPt[icone]->Fill(ptC, track->Pt());
4796 coneptsum += track->Pt();
4800 // Clusters in isolation cone, pT distribution and sum
4801 if(refclusters && GetIsolationCut()->GetParticleTypeInCone()!= AliIsolationCut::kOnlyCharged)
4803 for(Int_t icalo=0; icalo < refclusters->GetEntriesFast(); icalo++)
4805 AliVCluster* calo = (AliVCluster *) refclusters->At(icalo);
4807 calo->GetMomentum(fMomentum,vertex) ;//Assume that come from vertex in straight line
4809 Float_t rad = GetIsolationCut()->Radius(etaC, phiC, fMomentum.Eta(), fMomentum.Phi());
4811 if(rad > fConeSizes[icone]) continue ;
4813 fhPtLeadingPt[icone]->Fill(ptC, fMomentum.Pt());
4814 coneptsum += fMomentum.Pt();
4818 fhSumPtLeadingPt[icone]->Fill(ptC,coneptsum);
4822 if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
4823 fhSumPtLeadingPtMC[kmcPhoton][icone]->Fill(ptC,coneptsum) ;
4825 if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCDecayPairLost) && mcIndex==kmcPi0Decay )
4826 fhSumPtLeadingPtMC[kmcPi0DecayLostPair][icone]->Fill(ptC,coneptsum) ;
4828 fhSumPtLeadingPtMC[mcIndex][icone]->Fill(ptC,coneptsum) ;
4833 //Loop on pt thresholds
4834 for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
4837 nfrac[icone][ipt]=0;
4838 GetIsolationCut()->SetPtThreshold(fPtThresholds[ipt]);
4839 GetIsolationCut()->SetPtFraction(fPtFractions[ipt]) ;
4840 GetIsolationCut()->SetSumPtThreshold(fSumPtThresholds[ipt]);
4842 GetIsolationCut()->MakeIsolationCut(reftracks, refclusters,
4843 GetReader(), GetCaloPID(),
4845 n[icone][ipt],nfrac[icone][ipt],
4846 coneptsum, coneptlead, isolated);
4848 // Normal pT threshold cut
4850 AliDebug(1,Form("Cone size %1.1f, ptThres %1.1f, sumptThresh %1.1f",fConeSizes[icone],fPtThresholds[ipt],fSumPtThresholds[ipt]));
4851 AliDebug(1,Form("\t n %d, nfrac %d, coneptsum %2.2f",n[icone][ipt],nfrac[icone][ipt],coneptsum));
4852 AliDebug(1,Form("pt %1.1f, eta %1.1f, phi %1.1f",ptC, etaC, phiC));
4854 if(n[icone][ipt] == 0)
4856 AliDebug(1,"Filling pt threshold loop");
4858 fhPtThresIsolated [icone][ipt]->Fill(ptC);
4859 fhEtaPhiPtThresIso[icone][ipt]->Fill(etaC,phiC);
4861 if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
4863 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
4865 fhPtPtThresDecayIso [icone][ipt]->Fill(ptC);
4866 fhEtaPhiPtThresDecayIso[icone][ipt]->Fill(etaC,phiC);
4872 if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton) )
4873 fhPtThresIsolatedMC[kmcPhoton][icone][ipt]->Fill(ptC) ;
4875 if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCDecayPairLost) && mcIndex==kmcPi0Decay )
4876 fhPtThresIsolatedMC[kmcPi0DecayLostPair][icone][ipt]->Fill(ptC) ;
4878 fhPtThresIsolatedMC[mcIndex][icone][ipt]->Fill(ptC) ;
4883 // pt in cone fraction
4884 if(nfrac[icone][ipt] == 0)
4886 AliDebug(1,"Filling frac loop");
4888 fhPtFracIsolated [icone][ipt]->Fill(ptC);
4889 fhEtaPhiPtFracIso[icone][ipt]->Fill(etaC,phiC);
4891 if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
4893 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
4895 fhPtPtFracDecayIso [icone][ipt]->Fill(ptC);
4896 fhEtaPhiPtFracDecayIso[icone][ipt]->Fill(etaC,phiC);
4902 if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
4903 fhPtFracIsolatedMC[kmcPhoton][icone][ipt]->Fill(ptC) ;
4905 if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCDecayPairLost) && mcIndex==kmcPi0Decay )
4906 fhPtFracIsolatedMC[kmcPi0DecayLostPair][icone][ipt]->Fill(ptC) ;
4908 fhPtFracIsolatedMC[mcIndex][icone][ipt]->Fill(ptC) ;
4912 AliDebug(1,Form("Checking IC method : %i",GetIsolationCut()->GetICMethod()));
4914 //Pt threshold on pt cand/ sum in cone histograms
4915 if(coneptsum < fSumPtThresholds[ipt])
4917 AliDebug(1,"Filling sum loop");
4919 fhSumPtIsolated [icone][ipt]->Fill(ptC) ;
4920 fhEtaPhiPtSumIso[icone][ipt]->Fill(etaC, phiC) ;
4922 if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
4924 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
4926 fhPtPtSumDecayIso[icone][ipt]->Fill(ptC);
4927 fhEtaPhiPtSumDecayIso[icone][ipt]->Fill(etaC, phiC) ;
4933 if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
4934 fhSumPtIsolatedMC[kmcPhoton][icone][ipt]->Fill(ptC) ;
4936 if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCDecayPairLost) && mcIndex==kmcPi0Decay )
4937 fhSumPtIsolatedMC[kmcPi0DecayLostPair][icone][ipt]->Fill(ptC) ;
4939 fhSumPtIsolatedMC[mcIndex][icone][ipt]->Fill(ptC) ;
4943 // pt sum pt frac method
4944 // if( ((fPtFractions[ipt]*ptC < fSumPtThresholds[ipt]) && (coneptsum < fSumPtThresholds[ipt])) || ((fPtFractions[ipt]*ptC > fSumPtThresholds[ipt]) && (coneptsum < fPtFractions[ipt]*ptC)) )
4946 if(coneptsum < fPtFractions[ipt]*ptC)
4948 AliDebug(1,"Filling PtFrac PtSum loop");
4950 fhPtFracPtSumIso [icone][ipt]->Fill(ptC) ;
4951 fhEtaPhiFracPtSumIso[icone][ipt]->Fill(etaC,phiC) ;
4953 if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
4955 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
4957 fhPtFracPtSumDecayIso [icone][ipt]->Fill(ptC);
4958 fhEtaPhiFracPtSumDecayIso[icone][ipt]->Fill(etaC,phiC);
4964 Float_t cellDensity = GetIsolationCut()->GetCellDensity( ph, GetReader());
4965 if(coneptsum < fSumPtThresholds[ipt]*cellDensity)
4967 AliDebug(1,"Filling density loop");
4969 fhPtSumDensityIso [icone][ipt]->Fill(ptC) ;
4970 fhEtaPhiSumDensityIso[icone][ipt]->Fill(etaC,phiC) ;
4972 if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
4974 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
4976 fhPtSumDensityDecayIso [icone][ipt]->Fill(ptC);
4977 fhEtaPhiSumDensityDecayIso[icone][ipt]->Fill(etaC, phiC);
4986 //Reset original parameters for AOD analysis
4987 GetIsolationCut()->SetPtThreshold(ptthresorg);
4988 GetIsolationCut()->SetPtFraction(ptfracorg);
4989 GetIsolationCut()->SetSumPtThreshold(ptsumcorg);
4990 GetIsolationCut()->SetConeSize(rorg);
4994 //_____________________________________________________________
4995 void AliAnaParticleIsolation::Print(const Option_t * opt) const
4998 //Print some relevant parameters set for the analysis
5002 printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
5003 AliAnaCaloTrackCorrBaseClass::Print(" ");
5005 printf("ReMake Isolation = %d \n", fReMakeIC) ;
5006 printf("Make Several Isolation = %d \n", fMakeSeveralIC) ;
5007 printf("Calorimeter for isolation = %s \n", GetCalorimeterString().Data()) ;
5008 printf("Detector for candidate isolation = %s \n", fIsoDetectorString.Data()) ;
5012 printf("N Cone Sizes = %d\n", fNCones) ;
5013 printf("Cone Sizes = \n") ;
5014 for(Int_t i = 0; i < fNCones; i++)
5015 printf(" %1.2f;", fConeSizes[i]) ;
5018 printf("N pT thresholds/fractions = %d\n", fNPtThresFrac) ;
5019 printf(" pT thresholds = \n") ;
5020 for(Int_t i = 0; i < fNPtThresFrac; i++)
5021 printf(" %2.2f;", fPtThresholds[i]) ;
5025 printf(" pT fractions = \n") ;
5026 for(Int_t i = 0; i < fNPtThresFrac; i++)
5027 printf(" %2.2f;", fPtFractions[i]) ;
5031 printf("sum pT thresholds = \n") ;
5032 for(Int_t i = 0; i < fNPtThresFrac; i++)
5033 printf(" %2.2f;", fSumPtThresholds[i]) ;
5042 //_____________________________________________________________
5043 void AliAnaParticleIsolation::SetTriggerDetector(TString & det)
5045 // Set the detrimeter for the analysis
5047 fIsoDetectorString = det;
5049 if (det=="EMCAL") fIsoDetector = kEMCAL;
5050 else if(det=="PHOS" ) fIsoDetector = kPHOS;
5051 else if(det=="CTS") fIsoDetector = kCTS;
5052 else if(det=="DCAL") fIsoDetector = kDCAL;
5053 else if(det.Contains("DCAL") && det.Contains("PHOS")) fIsoDetector = kDCALPHOS;
5054 else AliFatal(Form("Detector < %s > not known!", det.Data()));
5058 //_________________________________________________________
5059 void AliAnaParticleIsolation::SetTriggerDetector(Int_t det)
5061 // Set the detrimeter for the analysis
5065 if (det==kEMCAL) fIsoDetectorString = "EMCAL";
5066 else if(det==kPHOS ) fIsoDetectorString = "PHOS";
5067 else if(det==kCTS) fIsoDetectorString = "CTS";
5068 else if(det==kDCAL) fIsoDetectorString = "DCAL";
5069 else if(det==kDCALPHOS) fIsoDetectorString = "DCAL_PHOS";
5070 else AliFatal(Form("Detector < %d > not known!", det));