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 //-Yaxian Mao (add the possibility for different IC method with different pt range, 01/10/2010)
26 //////////////////////////////////////////////////////////////////////////////
29 // --- ROOT system ---
30 #include <TClonesArray.h>
32 #include <TObjString.h>
36 #include "TParticle.h"
37 #include "TDatabasePDG.h"
41 // --- Analysis system ---
42 #include "AliAnaParticleIsolation.h"
43 #include "AliCaloTrackReader.h"
45 #include "AliIsolationCut.h"
46 #include "AliFiducialCut.h"
47 #include "AliMCAnalysisUtils.h"
48 #include "AliNeutralMesonSelection.h"
49 #include "AliAODMCParticle.h"
50 #include "AliAODPWG4ParticleCorrelation.h"
51 #include "AliMCAnalysisUtils.h"
52 #include "AliVTrack.h"
53 #include "AliVCluster.h"
54 #include "AliESDEvent.h"
55 #include "AliAODEvent.h"
57 #include "AliEMCALGeometry.h"
58 #include "AliPHOSGeoUtils.h"
60 ClassImp(AliAnaParticleIsolation)
62 //______________________________________________________________________________
63 AliAnaParticleIsolation::AliAnaParticleIsolation() :
64 AliAnaCaloTrackCorrBaseClass(),
65 fCalorimeter(""), fIsoDetector(""),
66 fReMakeIC(0), fMakeSeveralIC(0),
67 fFillPileUpHistograms(0),
68 fFillTMHisto(0), fFillSSHisto(1),
69 fFillUEBandSubtractHistograms(1), fFillCellHistograms(0),
70 fFillHighMultHistograms(0), fFillTaggedDecayHistograms(0),
71 fFillNLMHistograms(0),
73 fNCones(0), fNPtThresFrac(0),
74 fConeSizes(), fPtThresholds(),
75 fPtFractions(), fSumPtThresholds(),
77 fhEIso(0), fhPtIso(0),
78 fhPtCentralityIso(0), fhPtEventPlaneIso(0),
80 fhPhiIso(0), fhEtaIso(0), fhEtaPhiIso(0),
82 fhENoIso(0), fhPtNoIso(0), fhPtNLocMaxNoIso(0),
83 fhPtDecayIso(0), fhPtDecayNoIso(0),
84 fhEtaPhiDecayIso(0), fhEtaPhiDecayNoIso(0),
86 fhPtClusterInCone(0), fhPtCellInCone(0), fhPtTrackInCone(0),
87 fhPtTrackInConeOtherBC(0), fhPtTrackInConeOtherBCPileUpSPD(0),
88 fhPtTrackInConeBC0(0), fhPtTrackInConeVtxBC0(0),
89 fhPtTrackInConeBC0PileUpSPD(0),
90 fhPtInConePileUp(), fhPtInConeCent(0),
91 fhPerpConeSumPt(0), fhPtInPerpCone(0),
92 fhEtaPhiInConeCluster(0), fhEtaPhiCluster(0),
93 fhEtaPhiInConeTrack(0), fhEtaPhiTrack(0),
94 fhEtaBandCluster(0), fhPhiBandCluster(0),
95 fhEtaBandTrack(0), fhPhiBandTrack(0),
96 fhEtaBandCell(0), fhPhiBandCell(0),
97 fhConeSumPt(0), fhConeSumPtCellTrack(0),
98 fhConeSumPtCell(0), fhConeSumPtCluster(0), fhConeSumPtTrack(0),
99 fhConeSumPtEtaBandUECluster(0), fhConeSumPtPhiBandUECluster(0),
100 fhConeSumPtEtaBandUETrack(0), fhConeSumPtPhiBandUETrack(0),
101 fhConeSumPtEtaBandUECell(0), fhConeSumPtPhiBandUECell(0),
102 fhConeSumPtTrigEtaPhi(0),
103 fhConeSumPtCellTrackTrigEtaPhi(0),
104 fhConeSumPtEtaBandUEClusterTrigEtaPhi(0), fhConeSumPtPhiBandUEClusterTrigEtaPhi(0),
105 fhConeSumPtEtaBandUETrackTrigEtaPhi(0), fhConeSumPtPhiBandUETrackTrigEtaPhi(0),
106 fhConeSumPtEtaBandUECellTrigEtaPhi(0), fhConeSumPtPhiBandUECellTrigEtaPhi(0),
107 fhConeSumPtEtaUESub(0), fhConeSumPtPhiUESub(0),
108 fhConeSumPtEtaUESubTrigEtaPhi(0), fhConeSumPtPhiUESubTrigEtaPhi(0),
109 fhConeSumPtEtaUESubTrackCell(0), fhConeSumPtPhiUESubTrackCell(0),
110 fhConeSumPtEtaUESubTrackCellTrigEtaPhi(0), fhConeSumPtPhiUESubTrackCellTrigEtaPhi(0),
111 fhConeSumPtEtaUESubCluster(0), fhConeSumPtPhiUESubCluster(0),
112 fhConeSumPtEtaUESubClusterTrigEtaPhi(0), fhConeSumPtPhiUESubClusterTrigEtaPhi(0),
113 fhConeSumPtEtaUESubCell(0), fhConeSumPtPhiUESubCell(0),
114 fhConeSumPtEtaUESubCellTrigEtaPhi(0), fhConeSumPtPhiUESubCellTrigEtaPhi(0),
115 fhConeSumPtEtaUESubTrack(0), fhConeSumPtPhiUESubTrack(0),
116 fhConeSumPtEtaUESubTrackTrigEtaPhi(0), fhConeSumPtPhiUESubTrackTrigEtaPhi(0),
117 fhFractionTrackOutConeEta(0), fhFractionTrackOutConeEtaTrigEtaPhi(0),
118 fhFractionClusterOutConeEta(0), fhFractionClusterOutConeEtaTrigEtaPhi(0),
119 fhFractionClusterOutConePhi(0), fhFractionClusterOutConePhiTrigEtaPhi(0),
120 fhFractionCellOutConeEta(0), fhFractionCellOutConeEtaTrigEtaPhi(0),
121 fhFractionCellOutConePhi(0), fhFractionCellOutConePhiTrigEtaPhi(0),
122 fhConeSumPtClustervsTrack(0),
123 fhConeSumPtEtaUESubClustervsTrack(0), fhConeSumPtPhiUESubClustervsTrack(0),
124 fhConeSumPtCellvsTrack(0),
125 fhConeSumPtEtaUESubCellvsTrack(0), fhConeSumPtPhiUESubCellvsTrack(0),
126 fhEtaBandClustervsTrack(0), fhPhiBandClustervsTrack(0),
127 fhEtaBandNormClustervsTrack(0), fhPhiBandNormClustervsTrack(0),
128 fhEtaBandCellvsTrack(0), fhPhiBandCellvsTrack(0),
129 fhEtaBandNormCellvsTrack(0), fhPhiBandNormCellvsTrack(0),
130 fhConeSumPtSubvsConeSumPtTotPhiTrack(0), fhConeSumPtSubNormvsConeSumPtTotPhiTrack(0),
131 fhConeSumPtSubvsConeSumPtTotEtaTrack(0), fhConeSumPtSubNormvsConeSumPtTotEtaTrack(0),
132 fhConeSumPtSubvsConeSumPtTotPhiCluster(0), fhConeSumPtSubNormvsConeSumPtTotPhiCluster(0),
133 fhConeSumPtSubvsConeSumPtTotEtaCluster(0), fhConeSumPtSubNormvsConeSumPtTotEtaCluster(0),
134 fhConeSumPtSubvsConeSumPtTotPhiCell(0), fhConeSumPtSubNormvsConeSumPtTotPhiCell(0),
135 fhConeSumPtSubvsConeSumPtTotEtaCell(0), fhConeSumPtSubNormvsConeSumPtTotEtaCell(0),
136 fhConeSumPtVSUETracksEtaBand(0), fhConeSumPtVSUETracksPhiBand(0),
137 fhConeSumPtVSUEClusterEtaBand(0), fhConeSumPtVSUEClusterPhiBand(0),
139 // Number of local maxima in cluster
141 fhELambda0LocMax1(), fhELambda1LocMax1(),
142 fhELambda0LocMax2(), fhELambda1LocMax2(),
143 fhELambda0LocMaxN(), fhELambda1LocMaxN(),
145 fhEIsoPileUp(), fhPtIsoPileUp(),
146 fhENoIsoPileUp(), fhPtNoIsoPileUp(),
147 fhTimeENoCut(0), fhTimeESPD(0), fhTimeESPDMulti(0),
148 fhTimeNPileUpVertSPD(0), fhTimeNPileUpVertTrack(0),
149 fhTimeNPileUpVertContributors(0),
150 fhTimePileUpMainVertexZDistance(0), fhTimePileUpMainVertexZDiamond(0),
151 // Histograms settings
152 fHistoNPtSumBins(0), fHistoPtSumMax(0.), fHistoPtSumMin(0.),
153 fHistoNPtInConeBins(0), fHistoPtInConeMax(0.), fHistoPtInConeMin(0.)
157 //Initialize parameters
160 for(Int_t i = 0; i < 5 ; i++)
164 for(Int_t imc = 0; imc < 9; imc++)
165 fhPtSumIsolatedMC[imc][i] = 0 ;
167 for(Int_t j = 0; j < 5 ; j++)
169 fhPtThresIsolated [i][j] = 0 ;
170 fhPtFracIsolated [i][j] = 0 ;
171 fhPtSumIsolated [i][j] = 0 ;
173 fhEtaPhiPtThresIso [i][j] = 0 ;
174 fhEtaPhiPtThresDecayIso [i][j] = 0 ;
175 fhPtPtThresDecayIso [i][j] = 0 ;
177 fhEtaPhiPtFracIso [i][j] = 0 ;
178 fhEtaPhiPtFracDecayIso [i][j] = 0 ;
179 fhPtPtFracDecayIso [i][j] = 0 ;
180 fhPtPtSumDecayIso [i][j] = 0 ;
181 fhPtSumDensityIso [i][j] = 0 ;
182 fhPtSumDensityDecayIso [i][j] = 0 ;
183 fhEtaPhiSumDensityIso [i][j] = 0 ;
184 fhEtaPhiSumDensityDecayIso [i][j] = 0 ;
185 fhPtFracPtSumIso [i][j] = 0 ;
186 fhPtFracPtSumDecayIso [i][j] = 0 ;
187 fhEtaPhiFracPtSumIso [i][j] = 0 ;
188 fhEtaPhiFracPtSumDecayIso [i][j] = 0 ;
190 for(Int_t imc = 0; imc < 9; imc++)
192 fhPtThresIsolatedMC[imc][i][j] = 0 ;
193 fhPtFracIsolatedMC [imc][i][j] = 0 ;
199 for(Int_t i = 0; i < 5 ; i++)
201 fPtFractions [i] = 0 ;
202 fPtThresholds [i] = 0 ;
203 fSumPtThresholds[i] = 0 ;
206 for(Int_t imc = 0; imc < 9; imc++)
208 fhPtNoIsoMC [imc] = 0;
210 fhPhiIsoMC [imc] = 0;
211 fhEtaIsoMC [imc] = 0;
212 fhPtLambda0MC[imc][0] = 0;
213 fhPtLambda0MC[imc][1] = 0;
216 for(Int_t i = 0; i < 2 ; i++)
218 fhTrackMatchedDEta[i] = 0 ; fhTrackMatchedDPhi[i] = 0 ; fhTrackMatchedDEtaDPhi [i] = 0 ;
219 fhdEdx [i] = 0 ; fhEOverP [i] = 0 ; fhTrackMatchedMCParticle[i] = 0 ;
220 fhELambda0 [i] = 0 ; fhELambda1 [i] = 0 ;
221 fhELambda0TRD [i] = 0 ; fhELambda1TRD [i] = 0 ;
223 // Number of local maxima in cluster
225 fhELambda0LocMax1[i] = 0 ; fhELambda1LocMax1[i] = 0 ;
226 fhELambda0LocMax2[i] = 0 ; fhELambda1LocMax2[i] = 0 ;
227 fhELambda0LocMaxN[i] = 0 ; fhELambda1LocMaxN[i] = 0 ;
231 for(Int_t i = 0; i < 6; i++)
233 fhPtPrimMCiso[i] = 0;
241 for(Int_t i = 0 ; i < 7 ; i++)
243 fhPtInConePileUp[i] = 0 ;
244 fhEIsoPileUp [i] = 0 ;
245 fhPtIsoPileUp [i] = 0 ;
246 fhENoIsoPileUp [i] = 0 ;
247 fhPtNoIsoPileUp [i] = 0 ;
252 //_______________________________________________________________________________________________
253 void AliAnaParticleIsolation::CalculateCaloUEBand(AliAODPWG4ParticleCorrelation * pCandidate,
254 Float_t & etaBandPtSum, Float_t & phiBandPtSum)
256 // Get the clusters pT or sum of pT in phi/eta bands or at 45 degrees from trigger
258 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyCharged ) return ;
260 Float_t conesize = GetIsolationCut()->GetConeSize();
263 //Select the Calorimeter
264 TObjArray * pl = 0x0;
265 if (fCalorimeter == "PHOS" )
266 pl = GetPHOSClusters();
267 else if (fCalorimeter == "EMCAL")
268 pl = GetEMCALClusters();
272 //Get vertex for cluster momentum calculation
273 Double_t vertex[] = {0,0,0} ; //vertex ;
274 if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
275 GetReader()->GetVertex(vertex);
277 Float_t ptTrig = pCandidate->Pt() ;
278 Float_t phiTrig = pCandidate->Phi();
279 Float_t etaTrig = pCandidate->Eta();
281 for(Int_t icluster=0; icluster < pl->GetEntriesFast(); icluster++)
283 AliVCluster* cluster = (AliVCluster *) pl->At(icluster);
287 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Cluster not available?");
291 //Do not count the candidate (photon or pi0) or the daughters of the candidate
292 if(cluster->GetID() == pCandidate->GetCaloLabel(0) ||
293 cluster->GetID() == pCandidate->GetCaloLabel(1) ) continue ;
295 //Remove matched clusters to tracks if Neutral and Track info is used
296 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kNeutralAndCharged &&
297 IsTrackMatched(cluster,GetReader()->GetInputEvent())) continue ;
299 cluster->GetMomentum(mom,vertex) ;//Assume that come from vertex in straight line
301 //exclude particles in cone
302 Float_t rad = GetIsolationCut()->Radius(etaTrig, phiTrig, mom.Eta(), mom.Phi());
304 // histo of eta and phi for all clusters
305 fhEtaPhiCluster->Fill(mom.Eta(), mom.Phi());
307 // histos for all clusters in cone
308 fhEtaPhiInConeCluster->Fill(mom.Eta(), mom.Phi());
311 //fill histogram for UE in phi band in EMCal acceptance
312 if(mom.Eta() > (etaTrig-conesize) && mom.Eta() < (etaTrig+conesize))
314 phiBandPtSum+=mom.Pt();
315 fhPhiBandCluster->Fill(mom.Eta(),mom.Phi());
319 //fill histogram for UE in eta band in EMCal acceptance
320 if(mom.Phi() > (phiTrig-conesize) && mom.Phi() < (phiTrig+conesize))
322 etaBandPtSum+=mom.Pt();
323 fhEtaBandCluster->Fill(mom.Eta(),mom.Phi());
327 fhConeSumPtEtaBandUECluster ->Fill(ptTrig , etaBandPtSum);
328 fhConeSumPtPhiBandUECluster ->Fill(ptTrig , phiBandPtSum);
329 fhConeSumPtEtaBandUEClusterTrigEtaPhi->Fill(etaTrig,phiTrig,etaBandPtSum);
330 fhConeSumPtPhiBandUEClusterTrigEtaPhi->Fill(etaTrig,phiTrig,phiBandPtSum);
334 //________________________________________________________________________________________________
335 void AliAnaParticleIsolation::CalculateCaloCellUEBand(AliAODPWG4ParticleCorrelation * pCandidate,
336 Float_t & etaBandPtSumCells, Float_t & phiBandPtSumCells)
338 // Get the cells amplitude or sum of amplitude in phi/eta bands or at 45 degrees from trigger
340 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyCharged ) return ;
342 Float_t conesize = GetIsolationCut()->GetConeSize();
344 Float_t phiTrig = pCandidate->Phi();
345 if(phiTrig<0) phiTrig += TMath::TwoPi();
346 Float_t etaTrig = pCandidate->Eta();
348 if(pCandidate->GetDetector()=="EMCAL")
350 AliEMCALGeometry* eGeom = AliEMCALGeometry::GetInstance();
353 if (eGeom->GetAbsCellIdFromEtaPhi(etaTrig,phiTrig,absId))
355 if(!eGeom->CheckAbsCellId(absId)) return ;
357 // Get absolute (col,row) of trigger particle
358 Int_t nSupMod = eGeom->GetSuperModuleNumber(absId);
360 Int_t imEta=-1, imPhi=-1;
361 Int_t ieta =-1, iphi =-1;
363 if (eGeom->GetCellIndex(absId,nSupMod,nModule,imPhi,imEta))
365 eGeom->GetCellPhiEtaIndexInSModule(nSupMod,nModule,imPhi,imEta,iphi,ieta);
367 Int_t colTrig = ieta;
368 if (nSupMod % 2) colTrig = AliEMCALGeoParams::fgkEMCALCols + ieta ;
369 Int_t rowTrig = iphi + AliEMCALGeoParams::fgkEMCALRows*int(nSupMod/2);
371 Int_t sqrSize = int(conesize/0.0143);
373 AliVCaloCells * cells = GetEMCALCells();
375 Int_t nTotalRows = AliEMCALGeoParams::fgkEMCALRows*16/3 ; // 24*(16/3) 5 full-size Sectors (2 SM) + 1 one-third Sector (2 SM)
376 Int_t nTotalCols = 2*AliEMCALGeoParams::fgkEMCALCols;
377 // printf("nTotalRows %i, nTotalCols %i\n",nTotalRows,nTotalCols);
378 // Loop on cells in eta band
380 Int_t irowmin = rowTrig-sqrSize;
381 if(irowmin<0) irowmin=0;
382 Int_t irowmax = rowTrig+sqrSize;
383 if(irowmax>AliEMCALGeoParams::fgkEMCALRows) irowmax=AliEMCALGeoParams::fgkEMCALRows;
386 for(Int_t irow = irowmin; irow <irowmax; irow++)
388 for(Int_t icol = 0; icol < nTotalCols; icol++)
390 Int_t inSector = int(irow/AliEMCALGeoParams::fgkEMCALRows);
391 if(inSector==5) continue;
394 if(icol < AliEMCALGeoParams::fgkEMCALCols)
396 inSupMod = 2*inSector + 1;
399 else if(icol > AliEMCALGeoParams::fgkEMCALCols - 1)
401 inSupMod = 2*inSector;
402 icolLoc = icol-AliEMCALGeoParams::fgkEMCALCols;
405 Int_t irowLoc = irow - AliEMCALGeoParams::fgkEMCALRows*inSector ;
407 // Exclude cells in cone
408 if(TMath::Abs(icol-colTrig) < sqrSize || TMath::Abs(irow-rowTrig) < sqrSize){
411 Int_t iabsId = eGeom->GetAbsCellIdFromCellIndexes(inSupMod,irowLoc,icolLoc);
412 if(!eGeom->CheckAbsCellId(iabsId)) continue;
413 etaBandPtSumCells += cells->GetCellAmplitude(iabsId);
414 fhEtaBandCell->Fill(colTrig,rowTrig);
416 // printf("ETA inSupMod %i,irowLoc %i,icolLoc %i, iabsId %i, etaBandPtSumCells %f\n",nSupMod,irowLoc,icolLoc,iabsId,etaBandPtSumCells);
419 Int_t icolmin = colTrig-sqrSize;
420 if(icolmin<0) icolmin=0;
421 Int_t icolmax = colTrig+sqrSize;
422 if(icolmax>AliEMCALGeoParams::fgkEMCALCols) icolmax=AliEMCALGeoParams::fgkEMCALCols;
424 // Loop on cells in phi band
425 for(Int_t icol = icolmin; icol < icolmax; icol++)
427 for(Int_t irow = 0; irow < nTotalRows; irow++)
429 Int_t inSector = int(irow/AliEMCALGeoParams::fgkEMCALRows);
430 if(inSector==5) continue;
433 // printf("icol %i, irow %i, inSector %i\n",icol,irow ,inSector);
434 if(icol < AliEMCALGeoParams::fgkEMCALCols)
436 // printf("icol < AliEMCALGeoParams::fgkEMCALCols %i\n",AliEMCALGeoParams::fgkEMCALCols );
437 inSupMod = 2*inSector + 1;
440 else if(icol > AliEMCALGeoParams::fgkEMCALCols - 1)
442 // printf("icol > AliEMCALGeoParams::fgkEMCALCols -1 %i\n",AliEMCALGeoParams::fgkEMCALCols -1 );
443 inSupMod = 2*inSector;
444 icolLoc = icol-AliEMCALGeoParams::fgkEMCALCols;
447 Int_t irowLoc = irow - AliEMCALGeoParams::fgkEMCALRows*inSector ; // Stesso problema di sopra //
449 // Exclude cells in cone
450 if(TMath::Abs(icol-colTrig) < sqrSize) {
451 //printf("TMath::Abs(icol-colTrig) %i < sqrSize %i\n",TMath::Abs(icol-colTrig) ,sqrSize);continue ;
453 if(TMath::Abs(irow-rowTrig) < sqrSize) {
454 //printf("TMath::Abs(irow-rowTrig) %i < sqrSize %i\n",TMath::Abs(irow-rowTrig) ,sqrSize);continue ;
457 Int_t iabsId = eGeom->GetAbsCellIdFromCellIndexes(inSupMod,irowLoc,icolLoc);
458 if(!eGeom->CheckAbsCellId(iabsId)) {printf("!eGeom->CheckAbsCellId(iabsId=%i) inSupMod %i irowLoc %i icolLoc %i \n",iabsId,inSupMod, irowLoc, icolLoc);continue;}
459 phiBandPtSumCells += cells->GetCellAmplitude(iabsId);
460 fhPhiBandCell->Fill(colTrig,rowTrig);
461 //printf("inSupMod %i,irowLoc %i,icolLoc %i, iabsId %i, phiBandPtSumCells %f\n",nSupMod,irowLoc,icolLoc,iabsId,phiBandPtSumCells);
468 Float_t ptTrig = pCandidate->Pt();
470 fhConeSumPtEtaBandUECell ->Fill(ptTrig , etaBandPtSumCells);
471 fhConeSumPtPhiBandUECell ->Fill(ptTrig , phiBandPtSumCells);
472 fhConeSumPtEtaBandUECellTrigEtaPhi->Fill(etaTrig,phiTrig,etaBandPtSumCells);
473 fhConeSumPtPhiBandUECellTrigEtaPhi->Fill(etaTrig,phiTrig,phiBandPtSumCells);
477 //________________________________________________________________________________________________
478 void AliAnaParticleIsolation::CalculateTrackUEBand(AliAODPWG4ParticleCorrelation * pCandidate,
479 Float_t & etaBandPtSum, Float_t & phiBandPtSum)
481 // Get the track pT or sum of pT in phi/eta bands or at 45 degrees from trigger
483 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyNeutral ) return ;
485 Float_t conesize = GetIsolationCut()->GetConeSize();
487 Double_t sumptPerp= 0. ;
488 Float_t ptTrig = pCandidate->Pt() ;
489 Float_t phiTrig = pCandidate->Phi();
490 Float_t etaTrig = pCandidate->Eta();
492 TObjArray * trackList = GetCTSTracks() ;
493 for(Int_t itrack=0; itrack < trackList->GetEntriesFast(); itrack++)
495 AliVTrack* track = (AliVTrack *) trackList->At(itrack);
499 printf("AliAnaParticleIsolation::CalculateTrackUEBand() - Track not available?");
503 //Do not count the candidate (pion, conversion photon) or the daughters of the candidate
504 if(track->GetID() == pCandidate->GetTrackLabel(0) || track->GetID() == pCandidate->GetTrackLabel(1) ||
505 track->GetID() == pCandidate->GetTrackLabel(2) || track->GetID() == pCandidate->GetTrackLabel(3) ) continue ;
507 // histo of eta:phi for all tracks
508 fhEtaPhiTrack->Fill(track->Eta(),track->Phi());
510 //exclude particles in cone
511 Float_t rad = GetIsolationCut()->Radius(etaTrig, phiTrig, track->Eta(), track->Phi());
513 // histo of eta:phi for all tracks in cone
514 fhEtaPhiInConeTrack->Fill(track->Eta(),track->Phi());
518 //fill histogram for UE in phi band
519 if(track->Eta() > (etaTrig-conesize) && track->Eta() < (etaTrig+conesize))
521 phiBandPtSum+=track->Pt();
522 fhPhiBandTrack->Fill(track->Eta(),track->Phi());
525 //fill histogram for UE in eta band in EMCal acceptance
526 if(track->Phi() > (phiTrig-conesize) && track->Phi() < (phiTrig+conesize))
528 etaBandPtSum+=track->Pt();
529 fhEtaBandTrack->Fill(track->Eta(),track->Phi());
532 //fill the histograms at +-45 degrees in phi from trigger particle, perpedicular to trigger axis in phi
533 Double_t dPhi = phiTrig - track->Phi() + TMath::PiOver2();
534 Double_t dEta = etaTrig - track->Eta();
535 Double_t arg = dPhi*dPhi + dEta*dEta;
536 if(TMath::Sqrt(arg) < conesize)
538 fhPtInPerpCone->Fill(ptTrig,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
539 sumptPerp+=track->Pt();
542 dPhi = phiTrig - track->Phi() - TMath::PiOver2();
543 arg = dPhi*dPhi + dEta*dEta;
544 if(TMath::Sqrt(arg) < conesize)
546 fhPtInPerpCone->Fill(ptTrig,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
547 sumptPerp+=track->Pt();
551 fhPerpConeSumPt ->Fill(ptTrig , sumptPerp );
552 fhConeSumPtEtaBandUETrack ->Fill(ptTrig , etaBandPtSum);
553 fhConeSumPtPhiBandUETrack ->Fill(ptTrig , phiBandPtSum);
554 fhConeSumPtEtaBandUETrackTrigEtaPhi->Fill(etaTrig,phiTrig,etaBandPtSum);
555 fhConeSumPtPhiBandUETrackTrigEtaPhi->Fill(etaTrig,phiTrig,phiBandPtSum);
561 //_____________________________________________________________________________________________________________________________________
562 void AliAnaParticleIsolation::CalculateNormalizeUEBandPerUnitArea(AliAODPWG4ParticleCorrelation * pCandidate, Float_t coneptsumCluster,
563 Float_t coneptsumCell, Float_t coneptsumTrack,
564 Float_t &etaBandptsumTrackNorm, Float_t &etaBandptsumClusterNorm)
566 //normalize phi/eta band per area unit
568 Float_t etaUEptsumTrack = 0 ;
569 Float_t phiUEptsumTrack = 0 ;
570 Float_t etaUEptsumCluster = 0 ;
571 Float_t phiUEptsumCluster = 0 ;
572 Float_t etaUEptsumCell = 0 ;
573 Float_t phiUEptsumCell = 0 ;
575 Int_t partTypeInCone = GetIsolationCut()->GetParticleTypeInCone();
577 // Do the normalization
579 Float_t conesize = GetIsolationCut()->GetConeSize();
580 Float_t coneA = conesize*conesize*TMath::Pi(); // A = pi R^2, isolation cone area
581 Float_t ptTrig = pCandidate->Pt() ;
582 Float_t phiTrig = pCandidate->Phi();
583 Float_t etaTrig = pCandidate->Eta();
589 Float_t phiUEptsumTrackNorm = 0 ;
590 Float_t etaUEptsumTrackNorm = 0 ;
591 Float_t coneptsumTrackSubPhi = 0 ;
592 Float_t coneptsumTrackSubEta = 0 ;
593 Float_t coneptsumTrackSubPhiNorm = 0 ;
594 Float_t coneptsumTrackSubEtaNorm = 0 ;
595 etaBandptsumTrackNorm = 0 ;
597 if( partTypeInCone!=AliIsolationCut::kOnlyNeutral )
599 // Sum the pT in the phi or eta band for clusters or tracks
600 CalculateTrackUEBand (pCandidate,etaUEptsumTrack ,phiUEptsumTrack );// rajouter ici l'histo eta phi
603 fhConeSumPtVSUETracksEtaBand->Fill(coneptsumTrack,etaUEptsumTrack);
604 fhConeSumPtVSUETracksPhiBand->Fill(coneptsumTrack,phiUEptsumTrack);
607 Float_t correctConeSumTrack = 1;
608 Float_t correctConeSumTrackPhi = 1;
610 GetIsolationCut()->CalculateUEBandTrackNormalization(GetReader(),etaTrig, phiTrig,
611 phiUEptsumTrack,etaUEptsumTrack,
612 phiUEptsumTrackNorm,etaUEptsumTrackNorm,
613 correctConeSumTrack,correctConeSumTrackPhi);
615 coneptsumTrackSubPhi = coneptsumTrack - phiUEptsumTrackNorm;
616 coneptsumTrackSubEta = coneptsumTrack - etaUEptsumTrackNorm;
618 etaBandptsumTrackNorm = etaUEptsumTrackNorm;
620 fhConeSumPtPhiUESubTrack ->Fill(ptTrig , coneptsumTrackSubPhi);
621 fhConeSumPtPhiUESubTrackTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumTrackSubPhi);
622 fhConeSumPtEtaUESubTrack ->Fill(ptTrig , coneptsumTrackSubEta);
623 fhConeSumPtEtaUESubTrackTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumTrackSubEta);
625 fhFractionTrackOutConeEta ->Fill(ptTrig , correctConeSumTrack-1);
626 fhFractionTrackOutConeEtaTrigEtaPhi->Fill(etaTrig, phiTrig,correctConeSumTrack-1);
628 if(coneptsumTrack > 0)
630 coneptsumTrackSubPhiNorm = coneptsumTrackSubPhi/coneptsumTrack;
631 coneptsumTrackSubEtaNorm = coneptsumTrackSubEta/coneptsumTrack;
634 fhConeSumPtSubvsConeSumPtTotPhiTrack ->Fill(coneptsumTrack,coneptsumTrackSubPhi);
635 fhConeSumPtSubNormvsConeSumPtTotPhiTrack->Fill(coneptsumTrack,coneptsumTrackSubPhiNorm);
636 fhConeSumPtSubvsConeSumPtTotEtaTrack ->Fill(coneptsumTrack,coneptsumTrackSubEta);
637 fhConeSumPtSubNormvsConeSumPtTotEtaTrack->Fill(coneptsumTrack,coneptsumTrackSubEtaNorm);
641 // ------------------------ //
642 // EMCal Clusters and cells //
643 // ------------------------ //
644 Float_t phiUEptsumClusterNorm = 0 ;
645 Float_t etaUEptsumClusterNorm = 0 ;
646 Float_t coneptsumClusterSubPhi = 0 ;
647 Float_t coneptsumClusterSubEta = 0 ;
648 Float_t coneptsumClusterSubPhiNorm = 0 ;
649 Float_t coneptsumClusterSubEtaNorm = 0 ;
650 Float_t phiUEptsumCellNorm = 0 ;
651 Float_t etaUEptsumCellNorm = 0 ;
652 Float_t coneptsumCellSubPhi = 0 ;
653 Float_t coneptsumCellSubEta = 0 ;
654 Float_t coneptsumCellSubPhiNorm = 0 ;
655 Float_t coneptsumCellSubEtaNorm = 0 ;
656 etaBandptsumClusterNorm = 0;
658 if( partTypeInCone!=AliIsolationCut::kOnlyCharged )
665 // Sum the pT in the phi or eta band for clusters or tracks
666 CalculateCaloUEBand (pCandidate,etaUEptsumCluster,phiUEptsumCluster);// rajouter ici l'histo eta phi
669 fhConeSumPtVSUEClusterEtaBand->Fill(coneptsumCluster,etaUEptsumCluster);
670 fhConeSumPtVSUEClusterPhiBand->Fill(coneptsumCluster,phiUEptsumCluster);
673 Float_t correctConeSumClusterEta = 1;
674 Float_t correctConeSumClusterPhi = 1;
676 GetIsolationCut()->CalculateUEBandClusterNormalization(GetReader(),etaTrig, phiTrig,
677 phiUEptsumCluster,etaUEptsumCluster,
678 phiUEptsumClusterNorm,etaUEptsumClusterNorm,
679 correctConeSumClusterEta,correctConeSumClusterPhi);
681 // In case that cone is out of eta and phi side, we are over correcting, not too often with the current cuts ...
682 // Comment if not used
683 // Float_t coneBadCellsCoeff =1;
684 // Float_t etaBandBadCellsCoeff=1;
685 // Float_t phiBandBadCellsCoeff=1;
686 // GetIsolationCut()->GetCoeffNormBadCell(pCandidate, GetReader(),coneBadCellsCoeff,etaBandBadCellsCoeff,phiBandBadCellsCoeff) ;
688 //coneptsumCluster=coneptsumCluster*coneBadCellsCoeff*correctConeSumClusterEta*correctConeSumClusterPhi;
690 coneptsumClusterSubPhi = coneptsumCluster - phiUEptsumClusterNorm;
691 coneptsumClusterSubEta = coneptsumCluster - etaUEptsumClusterNorm;
693 etaBandptsumClusterNorm = etaUEptsumClusterNorm;
695 fhConeSumPtPhiUESubCluster ->Fill(ptTrig , coneptsumClusterSubPhi);
696 fhConeSumPtPhiUESubClusterTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumClusterSubPhi);
697 fhConeSumPtEtaUESubCluster ->Fill(ptTrig , coneptsumClusterSubEta);
698 fhConeSumPtEtaUESubClusterTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumClusterSubEta);
700 fhFractionClusterOutConeEta ->Fill(ptTrig , correctConeSumClusterEta-1);
701 fhFractionClusterOutConeEtaTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumClusterEta-1);
702 fhFractionClusterOutConePhi ->Fill(ptTrig , correctConeSumClusterPhi-1);
703 fhFractionClusterOutConePhiTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumClusterPhi-1);
705 if(coneptsumCluster!=0)
707 coneptsumClusterSubPhiNorm = coneptsumClusterSubPhi/coneptsumCluster;
708 coneptsumClusterSubEtaNorm = coneptsumClusterSubEta/coneptsumCluster;
711 fhConeSumPtSubvsConeSumPtTotPhiCluster ->Fill(coneptsumCluster,coneptsumClusterSubPhi);
712 fhConeSumPtSubNormvsConeSumPtTotPhiCluster->Fill(coneptsumCluster,coneptsumClusterSubPhiNorm);
713 fhConeSumPtSubvsConeSumPtTotEtaCluster ->Fill(coneptsumCluster,coneptsumClusterSubEta);
714 fhConeSumPtSubNormvsConeSumPtTotEtaCluster->Fill(coneptsumCluster,coneptsumClusterSubEtaNorm);
720 if(fFillCellHistograms)
722 // Sum the pT in the phi or eta band for clusters or tracks
723 CalculateCaloCellUEBand(pCandidate,etaUEptsumCell ,phiUEptsumCell );
725 // Move to AliIsolationCut the calculation not the histograms??
727 //Careful here if EMCal limits changed .. 2010 (4 SM) to 2011-12 (10 SM), for the moment consider 100 deg in phi
728 Float_t emcEtaSize = 0.7*2; // TO FIX
729 Float_t emcPhiSize = TMath::DegToRad()*100.; // TO FIX
731 if(((2*conesize*emcPhiSize)-coneA)!=0)phiUEptsumCellNorm = phiUEptsumCell*(coneA / ((2*conesize*emcPhiSize)-coneA));
732 if(((2*conesize*emcEtaSize)-coneA)!=0)etaUEptsumCellNorm = etaUEptsumCell*(coneA / ((2*conesize*emcEtaSize)-coneA));
734 // Need to correct coneptsumCluster by the fraction of the cone out of the calorimeter cut acceptance!
736 Float_t correctConeSumCellEta = 1;
737 if(TMath::Abs(etaTrig)+conesize > emcEtaSize/2.)
739 Float_t excess = TMath::Abs(etaTrig) + conesize - emcEtaSize/2.;
740 correctConeSumCellEta = GetIsolationCut()->CalculateExcessAreaFraction(excess);
741 //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);
742 // Need to correct phi band surface if part of the cone falls out of track cut acceptance!
743 if(((2*(conesize-excess)*emcPhiSize)-(coneA-correctConeSumCellEta))!=0)phiUEptsumCellNorm = phiUEptsumCell*(coneA / ((2*(conesize-excess)*emcPhiSize)-(coneA-correctConeSumCellEta)));
746 Float_t correctConeSumCellPhi = 1;
747 //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() );
748 if((phiTrig+conesize > 180*TMath::DegToRad()) ||
749 (phiTrig-conesize < 80*TMath::DegToRad()))
752 if( phiTrig+conesize > 180*TMath::DegToRad() ) excess = conesize + phiTrig - 180*TMath::DegToRad() ;
753 else excess = conesize - phiTrig + 80*TMath::DegToRad() ;
755 correctConeSumCellPhi = GetIsolationCut()->CalculateExcessAreaFraction(excess);
756 //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);
758 // Need to correct eta band surface if part of the cone falls out of track cut acceptance!
759 if(((2*(conesize-excess)*emcEtaSize)-(coneA-correctConeSumCellPhi))!=0)etaUEptsumCellNorm = etaUEptsumCell*(coneA / ((2*(conesize-excess)*emcEtaSize)-(coneA-correctConeSumCellPhi)));
763 // In case that cone is out of eta and phi side, we are over correcting, not too often with the current cuts ...
764 coneptsumCellSubPhi = coneptsumCell*correctConeSumCellEta*correctConeSumCellPhi - phiUEptsumCellNorm;
765 coneptsumCellSubEta = coneptsumCell*correctConeSumCellEta*correctConeSumCellPhi - etaUEptsumCellNorm;
767 fhConeSumPtPhiUESubCell ->Fill(ptTrig , coneptsumCellSubPhi);
768 fhConeSumPtPhiUESubCellTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumCellSubPhi);
769 fhConeSumPtEtaUESubCell ->Fill(ptTrig , coneptsumCellSubEta);
770 fhConeSumPtEtaUESubCellTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumCellSubEta);
772 fhFractionCellOutConeEta ->Fill(ptTrig , correctConeSumCellEta-1);
773 fhFractionCellOutConeEtaTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumCellEta-1);
774 fhFractionCellOutConePhi ->Fill(ptTrig , correctConeSumCellPhi-1);
775 fhFractionCellOutConePhiTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumCellPhi-1);
778 coneptsumCellSubPhiNorm = coneptsumCellSubPhi/coneptsumCell;
779 coneptsumCellSubEtaNorm = coneptsumCellSubEta/coneptsumCell;
782 fhConeSumPtSubvsConeSumPtTotPhiCell ->Fill(coneptsumCell,coneptsumCellSubPhi);
783 fhConeSumPtSubNormvsConeSumPtTotPhiCell->Fill(coneptsumCell,coneptsumCellSubPhiNorm);
784 fhConeSumPtSubvsConeSumPtTotEtaCell ->Fill(coneptsumCell,coneptsumCellSubEta);
785 fhConeSumPtSubNormvsConeSumPtTotEtaCell->Fill(coneptsumCell,coneptsumCellSubEtaNorm);
789 if( partTypeInCone==AliIsolationCut::kNeutralAndCharged )
791 // --------------------------- //
792 // Tracks and clusters in cone //
793 // --------------------------- //
795 Double_t sumPhiUESub = coneptsumClusterSubPhi + coneptsumTrackSubPhi;
796 Double_t sumEtaUESub = coneptsumClusterSubEta + coneptsumTrackSubEta;
798 fhConeSumPtPhiUESub ->Fill(ptTrig , sumPhiUESub);
799 fhConeSumPtPhiUESubTrigEtaPhi->Fill(etaTrig, phiTrig, sumPhiUESub);
800 fhConeSumPtEtaUESub ->Fill(ptTrig , sumEtaUESub);
801 fhConeSumPtEtaUESubTrigEtaPhi->Fill(etaTrig, phiTrig, sumEtaUESub);
803 fhEtaBandClustervsTrack ->Fill(etaUEptsumCluster ,etaUEptsumTrack );
804 fhPhiBandClustervsTrack ->Fill(phiUEptsumCluster ,phiUEptsumTrack );
805 fhEtaBandNormClustervsTrack->Fill(etaUEptsumClusterNorm,etaUEptsumTrackNorm);
806 fhPhiBandNormClustervsTrack->Fill(phiUEptsumClusterNorm,phiUEptsumTrackNorm);
808 fhConeSumPtEtaUESubClustervsTrack->Fill(coneptsumClusterSubEta,coneptsumTrackSubEta);
809 fhConeSumPtPhiUESubClustervsTrack->Fill(coneptsumClusterSubPhi,coneptsumTrackSubPhi);
811 // ------------------------ //
812 // Tracks and cells in cone //
813 // ------------------------ //
815 if(fFillCellHistograms)
817 Double_t sumPhiUESubTrackCell = coneptsumCellSubPhi + coneptsumTrackSubPhi;
818 Double_t sumEtaUESubTrackCell = coneptsumCellSubEta + coneptsumTrackSubEta;
820 fhConeSumPtPhiUESubTrackCell ->Fill(ptTrig , sumPhiUESubTrackCell);
821 fhConeSumPtPhiUESubTrackCellTrigEtaPhi->Fill(etaTrig, phiTrig, sumPhiUESubTrackCell);
822 fhConeSumPtEtaUESubTrackCell ->Fill(ptTrig , sumEtaUESubTrackCell);
823 fhConeSumPtEtaUESubTrackCellTrigEtaPhi->Fill(etaTrig, phiTrig, sumEtaUESubTrackCell);
825 fhEtaBandCellvsTrack ->Fill(etaUEptsumCell ,etaUEptsumTrack );
826 fhPhiBandCellvsTrack ->Fill(phiUEptsumCell ,phiUEptsumTrack );
827 fhEtaBandNormCellvsTrack->Fill(etaUEptsumCellNorm,etaUEptsumTrackNorm);
828 fhPhiBandNormCellvsTrack->Fill(phiUEptsumCellNorm,phiUEptsumTrackNorm);
830 fhConeSumPtEtaUESubCellvsTrack->Fill(coneptsumCellSubEta,coneptsumTrackSubEta);
831 fhConeSumPtPhiUESubCellvsTrack->Fill(coneptsumCellSubPhi,coneptsumTrackSubPhi);
838 //__________________________________________________________________________________________________
839 void AliAnaParticleIsolation::CalculateCaloSignalInCone(AliAODPWG4ParticleCorrelation * aodParticle,
840 Float_t & coneptsumCluster)
842 // Get the cluster pT or sum of pT in isolation cone
844 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyCharged ) return ;
846 //Recover reference arrays with clusters and tracks
847 TObjArray * refclusters = aodParticle->GetObjArray(GetAODObjArrayName()+"Clusters");
848 if(!refclusters) return ;
850 Float_t ptTrig = aodParticle->Pt();
852 //Get vertex for cluster momentum calculation
853 Double_t vertex[] = {0,0,0} ; //vertex ;
854 if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
855 GetReader()->GetVertex(vertex);
858 for(Int_t icalo=0; icalo < refclusters->GetEntriesFast(); icalo++)
860 AliVCluster* calo = (AliVCluster *) refclusters->At(icalo);
861 calo->GetMomentum(mom,vertex) ;//Assume that come from vertex in straight line
863 fhPtInCone ->Fill(ptTrig, mom.Pt());
864 fhPtClusterInCone->Fill(ptTrig, mom.Pt());
866 if(fFillPileUpHistograms)
868 if(GetReader()->IsPileUpFromSPD()) fhPtInConePileUp[0]->Fill(ptTrig,mom.Pt());
869 if(GetReader()->IsPileUpFromEMCal()) fhPtInConePileUp[1]->Fill(ptTrig,mom.Pt());
870 if(GetReader()->IsPileUpFromSPDOrEMCal()) fhPtInConePileUp[2]->Fill(ptTrig,mom.Pt());
871 if(GetReader()->IsPileUpFromSPDAndEMCal()) fhPtInConePileUp[3]->Fill(ptTrig,mom.Pt());
872 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) fhPtInConePileUp[4]->Fill(ptTrig,mom.Pt());
873 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) fhPtInConePileUp[5]->Fill(ptTrig,mom.Pt());
874 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) fhPtInConePileUp[6]->Fill(ptTrig,mom.Pt());
877 if(fFillHighMultHistograms) fhPtInConeCent->Fill(GetEventCentrality(),mom.Pt());
879 coneptsumCluster+=mom.Pt();
882 fhConeSumPtCluster ->Fill(ptTrig, coneptsumCluster);
885 //______________________________________________________________________________________________________
886 void AliAnaParticleIsolation::CalculateCaloCellSignalInCone(AliAODPWG4ParticleCorrelation * aodParticle,
887 Float_t & coneptsumCell)
889 // Get the cell amplityde or sum of amplitudes in isolation cone
890 // Mising: Remove signal cells in cone in case the trigger is a cluster!
892 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyCharged ) return ;
894 Float_t conesize = GetIsolationCut()->GetConeSize();
896 Float_t ptTrig = aodParticle->Pt();
897 Float_t phiTrig = aodParticle->Phi();
898 if(phiTrig<0) phiTrig += TMath::TwoPi();
899 Float_t etaTrig = aodParticle->Eta();
901 if(aodParticle->GetDetector()=="EMCAL")
903 AliEMCALGeometry* eGeom = AliEMCALGeometry::GetInstance();
906 if (eGeom->GetAbsCellIdFromEtaPhi(etaTrig,phiTrig,absId))
908 if(!eGeom->CheckAbsCellId(absId)) return ;
910 // Get absolute (col,row) of trigger particle
911 Int_t nSupMod = eGeom->GetSuperModuleNumber(absId);
913 Int_t imEta=-1, imPhi=-1;
914 Int_t ieta =-1, iphi =-1;
916 if (eGeom->GetCellIndex(absId,nSupMod,nModule,imPhi,imEta))
918 Int_t iEta=-1, iPhi=-1;
919 eGeom->GetCellPhiEtaIndexInSModule(nSupMod,nModule,imPhi,imEta,iphi,ieta);
921 Int_t colTrig = iEta;
922 if (nSupMod % 2) colTrig = AliEMCALGeoParams::fgkEMCALCols + iEta ;
923 Int_t rowTrig = iPhi + AliEMCALGeoParams::fgkEMCALRows*int(nSupMod/2);
925 Int_t sqrSize = int(conesize/0.0143);
927 AliVCaloCells * cells = GetEMCALCells();
929 // Loop on cells in cone
930 for(Int_t irow = rowTrig-sqrSize; irow < rowTrig+sqrSize; irow++)
932 for(Int_t icol = colTrig-sqrSize; icol < colTrig+sqrSize; icol++)
934 Int_t inSector = int(irow/AliEMCALGeoParams::fgkEMCALRows);
935 if(inSector==5) continue;
939 if(icol < AliEMCALGeoParams::fgkEMCALCols)
941 inSupMod = 2*inSector + 1;
944 else if(icol > AliEMCALGeoParams::fgkEMCALCols - 1)
946 inSupMod = 2*inSector;
947 icolLoc = icol-AliEMCALGeoParams::fgkEMCALCols;
950 Int_t irowLoc = irow - AliEMCALGeoParams::fgkEMCALRows*inSector ;
952 Int_t iabsId = eGeom->GetAbsCellIdFromCellIndexes(inSupMod,irowLoc,icolLoc);
953 if(!eGeom->CheckAbsCellId(iabsId)) continue;
955 fhPtCellInCone->Fill(ptTrig, cells->GetCellAmplitude(iabsId));
956 coneptsumCell += cells->GetCellAmplitude(iabsId);
963 fhConeSumPtCell->Fill(ptTrig,coneptsumCell);
967 //___________________________________________________________________________________________________
968 void AliAnaParticleIsolation::CalculateTrackSignalInCone(AliAODPWG4ParticleCorrelation * aodParticle,
969 Float_t & coneptsumTrack)
971 // Get the track pT or sum of pT in isolation cone
973 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyNeutral ) return ;
975 //Recover reference arrays with clusters and tracks
976 TObjArray * reftracks = aodParticle->GetObjArray(GetAODObjArrayName()+"Tracks");
977 if(!reftracks) return ;
979 Float_t ptTrig = aodParticle->Pt();
980 Double_t bz = GetReader()->GetInputEvent()->GetMagneticField();
982 for(Int_t itrack=0; itrack < reftracks->GetEntriesFast(); itrack++)
984 AliVTrack* track = (AliVTrack *) reftracks->At(itrack);
985 Float_t pTtrack = track->Pt();
987 fhPtInCone ->Fill(ptTrig,pTtrack);
988 fhPtTrackInCone->Fill(ptTrig,pTtrack);
990 if(fFillPileUpHistograms)
992 ULong_t status = track->GetStatus();
993 Bool_t okTOF = ( (status & AliVTrack::kTOFout) == AliVTrack::kTOFout ) ;
994 //Double32_t tof = track->GetTOFsignal()*1e-3;
995 Int_t trackBC = track->GetTOFBunchCrossing(bz);
997 if ( okTOF && trackBC!=0 ) fhPtTrackInConeOtherBC->Fill(ptTrig,pTtrack);
998 else if( okTOF && trackBC==0 ) fhPtTrackInConeBC0 ->Fill(ptTrig,pTtrack);
1000 Int_t vtxBC = GetReader()->GetVertexBC();
1001 if(vtxBC == 0 || vtxBC==AliVTrack::kTOFBCNA) fhPtTrackInConeVtxBC0->Fill(ptTrig,pTtrack);
1003 if(GetReader()->IsPileUpFromSPD()) { fhPtInConePileUp[0]->Fill(ptTrig,pTtrack);
1004 if(okTOF && trackBC!=0 ) fhPtTrackInConeOtherBCPileUpSPD->Fill(ptTrig,pTtrack);
1005 if(okTOF && trackBC==0 ) fhPtTrackInConeBC0PileUpSPD ->Fill(ptTrig,pTtrack); }
1006 if(GetReader()->IsPileUpFromEMCal()) fhPtInConePileUp[1]->Fill(ptTrig,pTtrack);
1007 if(GetReader()->IsPileUpFromSPDOrEMCal()) fhPtInConePileUp[2]->Fill(ptTrig,pTtrack);
1008 if(GetReader()->IsPileUpFromSPDAndEMCal()) fhPtInConePileUp[3]->Fill(ptTrig,pTtrack);
1009 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) fhPtInConePileUp[4]->Fill(ptTrig,pTtrack);
1010 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) fhPtInConePileUp[5]->Fill(ptTrig,pTtrack);
1011 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) fhPtInConePileUp[6]->Fill(ptTrig,pTtrack);
1014 if(fFillHighMultHistograms) fhPtInConeCent->Fill(GetEventCentrality(),pTtrack);
1016 coneptsumTrack+=pTtrack;
1019 fhConeSumPtTrack->Fill(ptTrig, coneptsumTrack);
1023 //_________________________________________________________________
1024 void AliAnaParticleIsolation::FillPileUpHistograms(Int_t clusterID)
1026 // Fill some histograms to understand pile-up
1027 if(!fFillPileUpHistograms) return;
1031 printf("AliAnaParticleIsolation::FillPileUpHistograms(), ID of cluster = %d, not possible! ", clusterID);
1036 TObjArray* clusters = 0x0;
1037 if (fCalorimeter == "EMCAL") clusters = GetEMCALClusters();
1038 else if(fCalorimeter == "PHOS" ) clusters = GetPHOSClusters();
1041 Float_t time = -1000;
1045 AliVCluster *cluster = FindCluster(clusters,clusterID,iclus);
1046 energy = cluster->E();
1047 time = cluster->GetTOF()*1e9;
1050 //printf("E %f, time %f\n",energy,time);
1051 AliVEvent * event = GetReader()->GetInputEvent();
1053 fhTimeENoCut->Fill(energy,time);
1054 if(GetReader()->IsPileUpFromSPD()) fhTimeESPD ->Fill(energy,time);
1055 if(event->IsPileupFromSPDInMultBins()) fhTimeESPDMulti->Fill(energy,time);
1057 if(energy < 8) return; // Fill time figures for high energy clusters not too close to trigger threshold
1059 AliESDEvent* esdEv = dynamic_cast<AliESDEvent*> (event);
1060 AliAODEvent* aodEv = dynamic_cast<AliAODEvent*> (event);
1062 // N pile up vertices
1063 Int_t nVerticesSPD = -1;
1064 Int_t nVerticesTracks = -1;
1068 nVerticesSPD = esdEv->GetNumberOfPileupVerticesSPD();
1069 nVerticesTracks = esdEv->GetNumberOfPileupVerticesTracks();
1074 nVerticesSPD = aodEv->GetNumberOfPileupVerticesSPD();
1075 nVerticesTracks = aodEv->GetNumberOfPileupVerticesTracks();
1078 fhTimeNPileUpVertSPD ->Fill(time,nVerticesSPD);
1079 fhTimeNPileUpVertTrack->Fill(time,nVerticesTracks);
1081 //printf("Is SPD %d, Is SPD Multi %d, n spd %d, n track %d\n",
1082 // GetReader()->IsPileUpFromSPD(),event->IsPileupFromSPDInMultBins(),nVerticesSPD,nVerticesTracks);
1085 Float_t z1 = -1, z2 = -1;
1087 for(Int_t iVert=0; iVert<nVerticesSPD;iVert++)
1091 const AliESDVertex* pv=esdEv->GetPileupVertexSPD(iVert);
1092 ncont=pv->GetNContributors();
1093 z1 = esdEv->GetPrimaryVertexSPD()->GetZ();
1095 diamZ = esdEv->GetDiamondZ();
1099 AliAODVertex *pv=aodEv->GetVertex(iVert);
1100 if(pv->GetType()!=AliAODVertex::kPileupSPD) continue;
1101 ncont=pv->GetNContributors();
1102 z1=aodEv->GetPrimaryVertexSPD()->GetZ();
1104 diamZ = aodEv->GetDiamondZ();
1107 Double_t distZ = TMath::Abs(z2-z1);
1108 diamZ = TMath::Abs(z2-diamZ);
1110 fhTimeNPileUpVertContributors ->Fill(time,ncont);
1111 fhTimePileUpMainVertexZDistance->Fill(time,distZ);
1112 fhTimePileUpMainVertexZDiamond ->Fill(time,diamZ);
1117 //_____________________________________________________________________________________________________________________
1118 void AliAnaParticleIsolation::FillTrackMatchingShowerShapeControlHistograms(AliAODPWG4ParticleCorrelation *pCandidate,
1121 // Fill Track matching and Shower Shape control histograms
1122 if(!fFillTMHisto && !fFillSSHisto) return;
1124 Int_t clusterID = pCandidate->GetCaloLabel(0) ;
1125 Int_t nMaxima = pCandidate->GetFiducialArea(); // bad name, just place holder for the moment
1126 Int_t mcTag = pCandidate->GetTag() ;
1127 Bool_t isolated = pCandidate->IsIsolated();
1131 printf("AliAnaParticleIsolation::FillTrackMatchingShowerShapeControlHistograms(), ID of cluster = %d, not possible! \n", clusterID);
1136 TObjArray* clusters = 0x0;
1137 if (fCalorimeter == "EMCAL") clusters = GetEMCALClusters();
1138 else if(fCalorimeter == "PHOS" ) clusters = GetPHOSClusters();
1140 Float_t energy = pCandidate->E();
1141 Float_t pt = pCandidate->Pt();
1145 AliVCluster *cluster = FindCluster(clusters,clusterID,iclus);
1149 fhELambda0 [isolated]->Fill(energy, cluster->GetM02() );
1150 fhPtLambda0[isolated]->Fill(pt, cluster->GetM02() );
1151 fhELambda1 [isolated]->Fill(energy, cluster->GetM20() );
1155 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
1156 fhPtLambda0MC[kmcPhoton][isolated]->Fill(pt, cluster->GetM02());
1158 fhPtLambda0MC[mcIndex][isolated]->Fill(pt, cluster->GetM02());
1161 if(fCalorimeter == "EMCAL" && GetFirstSMCoveredByTRD() >= 0 &&
1162 GetModuleNumber(cluster) >= GetFirstSMCoveredByTRD() )
1164 fhELambda0TRD [isolated]->Fill(energy, cluster->GetM02() );
1165 fhPtLambda0TRD[isolated]->Fill(pt , cluster->GetM02() );
1166 fhELambda1TRD [isolated]->Fill(energy, cluster->GetM20() );
1169 if(fFillNLMHistograms)
1171 fhNLocMax[isolated]->Fill(energy,nMaxima);
1172 if (nMaxima==1) { fhELambda0LocMax1[isolated]->Fill(energy,cluster->GetM02()); fhELambda1LocMax1[isolated]->Fill(energy,cluster->GetM20()); }
1173 else if(nMaxima==2) { fhELambda0LocMax2[isolated]->Fill(energy,cluster->GetM02()); fhELambda1LocMax2[isolated]->Fill(energy,cluster->GetM20()); }
1174 else { fhELambda0LocMaxN[isolated]->Fill(energy,cluster->GetM02()); fhELambda1LocMaxN[isolated]->Fill(energy,cluster->GetM20()); }
1181 Float_t dZ = cluster->GetTrackDz();
1182 Float_t dR = cluster->GetTrackDx();
1184 if(cluster->IsEMCAL() && GetCaloUtils()->IsRecalculationOfClusterTrackMatchingOn())
1186 dR = 2000., dZ = 2000.;
1187 GetCaloUtils()->GetEMCALRecoUtils()->GetMatchedResiduals(cluster->GetID(),dZ,dR);
1190 //printf("ParticleIsolation: dPhi %f, dEta %f\n",dR,dZ);
1191 if(fhTrackMatchedDEta[isolated] && TMath::Abs(dR) < 999)
1193 fhTrackMatchedDEta[isolated]->Fill(energy,dZ);
1194 fhTrackMatchedDPhi[isolated]->Fill(energy,dR);
1195 if(energy > 0.5) fhTrackMatchedDEtaDPhi[isolated]->Fill(dZ,dR);
1198 // Check dEdx and E/p of matched clusters
1200 if(TMath::Abs(dZ) < 0.05 && TMath::Abs(dR) < 0.05)
1203 AliVTrack *track = GetCaloUtils()->GetMatchedTrack(cluster, GetReader()->GetInputEvent());
1207 Float_t dEdx = track->GetTPCsignal();
1208 fhdEdx[isolated]->Fill(cluster->E(), dEdx);
1210 Float_t eOverp = cluster->E()/track->P();
1211 fhEOverP[isolated]->Fill(cluster->E(), eOverp);
1214 // printf("AliAnaParticleIsolation::FillTrackMatchingShowerShapeHistograms() - Residual OK but (dR, dZ)= (%2.4f,%2.4f) no track associated WHAT? \n", dR,dZ);
1219 if ( !GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCConversion) )
1221 if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0) ||
1222 GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEta) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 2.5 );
1223 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 0.5 );
1224 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 1.5 );
1225 else fhTrackMatchedMCParticle[isolated]->Fill(energy, 3.5 );
1230 if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0) ||
1231 GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEta) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 6.5 );
1232 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 4.5 );
1233 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 5.5 );
1234 else fhTrackMatchedMCParticle[isolated]->Fill(energy, 7.5 );
1243 } // clusters array available
1247 //______________________________________________________
1248 TObjString * AliAnaParticleIsolation::GetAnalysisCuts()
1250 //Save parameters used for analysis
1251 TString parList ; //this will be list of parameters used for this analysis.
1252 const Int_t buffersize = 255;
1253 char onePar[buffersize] ;
1255 snprintf(onePar, buffersize,"--- AliAnaParticleIsolation ---\n") ;
1257 snprintf(onePar, buffersize,"Calorimeter: %s\n",fCalorimeter.Data()) ;
1259 snprintf(onePar, buffersize,"Isolation Cand Detector: %s\n",fIsoDetector.Data()) ;
1261 snprintf(onePar, buffersize,"fReMakeIC =%d (Flag for reisolation during histogram filling) \n",fReMakeIC) ;
1263 snprintf(onePar, buffersize,"fMakeSeveralIC=%d (Flag for isolation with several cuts at the same time ) \n",fMakeSeveralIC) ;
1265 snprintf(onePar, buffersize,"fFillTMHisto=%d (Flag for track matching histograms) \n",fFillTMHisto) ;
1267 snprintf(onePar, buffersize,"fFillSSHisto=%d (Flag for shower shape histograms) \n",fFillSSHisto) ;
1272 snprintf(onePar, buffersize,"fNCones =%d (Number of cone sizes) \n",fNCones) ;
1274 snprintf(onePar, buffersize,"fNPtThresFrac=%d (Flag for isolation with several cuts at the same time ) \n",fNPtThresFrac) ;
1277 for(Int_t icone = 0; icone < fNCones ; icone++)
1279 snprintf(onePar, buffersize,"fConeSizes[%d]=%1.2f (isolation cone size) \n",icone, fConeSizes[icone]) ;
1282 for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
1284 snprintf(onePar, buffersize,"fPtThresholds[%d]=%1.2f (isolation pt threshold) \n",ipt, fPtThresholds[ipt]) ;
1287 for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
1289 snprintf(onePar, buffersize,"fPtFractions[%d]=%1.2f (isolation pt fraction threshold) \n",ipt, fPtFractions[ipt]) ;
1292 for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
1294 snprintf(onePar, buffersize,"fSumPtThresholds[%d]=%1.2f (isolation sum pt threshold) \n",ipt, fSumPtThresholds[ipt]) ;
1299 //Get parameters set in base class.
1300 parList += GetBaseParametersList() ;
1302 //Get parameters set in IC class.
1303 if(!fMakeSeveralIC)parList += GetIsolationCut()->GetICParametersList() ;
1305 return new TObjString(parList) ;
1309 //________________________________________________________
1310 TList * AliAnaParticleIsolation::GetCreateOutputObjects()
1312 // Create histograms to be saved in output file and
1313 // store them in outputContainer
1314 TList * outputContainer = new TList() ;
1315 outputContainer->SetName("IsolatedParticleHistos") ;
1317 Int_t nptbins = GetHistogramRanges()->GetHistoPtBins();
1318 Int_t nphibins = GetHistogramRanges()->GetHistoPhiBins();
1319 Int_t netabins = GetHistogramRanges()->GetHistoEtaBins();
1320 Float_t ptmax = GetHistogramRanges()->GetHistoPtMax();
1321 Float_t phimax = GetHistogramRanges()->GetHistoPhiMax();
1322 Float_t etamax = GetHistogramRanges()->GetHistoEtaMax();
1323 Float_t ptmin = GetHistogramRanges()->GetHistoPtMin();
1324 Float_t phimin = GetHistogramRanges()->GetHistoPhiMin();
1325 Float_t etamin = GetHistogramRanges()->GetHistoEtaMin();
1326 Int_t ssbins = GetHistogramRanges()->GetHistoShowerShapeBins();
1327 Float_t ssmax = GetHistogramRanges()->GetHistoShowerShapeMax();
1328 Float_t ssmin = GetHistogramRanges()->GetHistoShowerShapeMin();
1329 Int_t ntimebins= GetHistogramRanges()->GetHistoTimeBins();
1330 Float_t timemax = GetHistogramRanges()->GetHistoTimeMax();
1331 Float_t timemin = GetHistogramRanges()->GetHistoTimeMin();
1333 Int_t nresetabins = GetHistogramRanges()->GetHistoTrackResidualEtaBins();
1334 Float_t resetamax = GetHistogramRanges()->GetHistoTrackResidualEtaMax();
1335 Float_t resetamin = GetHistogramRanges()->GetHistoTrackResidualEtaMin();
1336 Int_t nresphibins = GetHistogramRanges()->GetHistoTrackResidualPhiBins();
1337 Float_t resphimax = GetHistogramRanges()->GetHistoTrackResidualPhiMax();
1338 Float_t resphimin = GetHistogramRanges()->GetHistoTrackResidualPhiMin();
1340 Int_t ndedxbins = GetHistogramRanges()->GetHistodEdxBins();
1341 Float_t dedxmax = GetHistogramRanges()->GetHistodEdxMax();
1342 Float_t dedxmin = GetHistogramRanges()->GetHistodEdxMin();
1343 Int_t nPoverEbins = GetHistogramRanges()->GetHistoPOverEBins();
1344 Float_t pOverEmax = GetHistogramRanges()->GetHistoPOverEMax();
1345 Float_t pOverEmin = GetHistogramRanges()->GetHistoPOverEMin();
1347 Int_t nptsumbins = fHistoNPtSumBins;
1348 Float_t ptsummax = fHistoPtSumMax;
1349 Float_t ptsummin = fHistoPtSumMin;
1350 Int_t nptinconebins = fHistoNPtInConeBins;
1351 Float_t ptinconemax = fHistoPtInConeMax;
1352 Float_t ptinconemin = fHistoPtInConeMin;
1354 //Float_t ptthre = GetIsolationCut()->GetPtThreshold();
1355 //Float_t ptsumthre = GetIsolationCut()->GetSumPtThreshold();
1356 //Float_t ptfrac = GetIsolationCut()->GetPtFraction();
1357 Float_t r = GetIsolationCut()->GetConeSize();
1358 Int_t method = GetIsolationCut()->GetICMethod() ;
1359 Int_t particle = GetIsolationCut()->GetParticleTypeInCone() ;
1361 TString sThreshold = "";
1362 if ( method == AliIsolationCut::kSumPtIC )
1364 sThreshold = Form(", %2.2f < #Sigma #it{p}_{T}^{in cone} < %2.2f GeV/#it{c}",
1365 GetIsolationCut()->GetSumPtThreshold(), GetIsolationCut()->GetSumPtThresholdMax());
1366 if(GetIsolationCut()->GetSumPtThresholdMax() > 200)
1367 sThreshold = Form(", #Sigma #it{p}_{T}^{in cone} = %2.2f GeV/#it{c}",
1368 GetIsolationCut()->GetSumPtThreshold());
1370 else if ( method == AliIsolationCut::kPtThresIC)
1372 sThreshold = Form(", %2.2f < #it{p}_{T}^{th} < %2.2f GeV/#it{c}",
1373 GetIsolationCut()->GetPtThreshold(),GetIsolationCut()->GetPtThresholdMax());
1374 if(GetIsolationCut()->GetSumPtThreshold() > 200)
1375 sThreshold = Form(", #it{p}_{T}^{th} = %2.2f GeV/#it{c}",
1376 GetIsolationCut()->GetPtThreshold());
1378 else if ( method == AliIsolationCut::kPtFracIC)
1379 sThreshold = Form(", #Sigma #it{p}_{T}^{in cone}/#it{p}_{T}^{trig} = %2.2f" ,
1380 GetIsolationCut()->GetPtFraction());
1382 TString sParticle = ", x^{0,#pm}";
1383 if ( particle == AliIsolationCut::kOnlyNeutral ) sParticle = ", x^{0}";
1384 else if ( particle == AliIsolationCut::kOnlyCharged ) sParticle = ", x^{#pm}";
1386 TString parTitle = Form("#it{R} = %2.2f%s%s",GetIsolationCut()->GetConeSize(), sThreshold.Data(),sParticle.Data());
1388 TString pileUpName[] = {"SPD","EMCAL","SPDOrEMCAL","SPDAndEMCAL","SPDAndNotEMCAL","EMCALAndNotSPD","NotSPDAndNotEMCAL"} ;
1390 // MC histograms title and name
1391 TString mcPartType[] = { "#gamma", "#gamma_{prompt}", "#gamma_{fragmentation}",
1392 "#pi^{0} (merged #gamma)","#gamma_{#pi decay}",
1393 "#gamma_{#eta decay}","#gamma_{other decay}",
1394 "e^{#pm}","hadrons?"} ;
1396 TString mcPartName[] = { "Photon","PhotonPrompt","PhotonFrag",
1397 "Pi0","Pi0Decay","EtaDecay","OtherDecay",
1398 "Electron","Hadron"} ;
1400 // Primary MC histograms title and name
1401 TString pptype[] = { "#gamma", "#gamma_{#pi decay}","#gamma_{other decay}",
1402 "#gamma_{prompt}","#gamma_{fragmentation}","#gamma_{ISR}"} ;
1404 TString ppname[] = { "Photon","PhotonPi0Decay","PhotonOtherDecay",
1405 "PhotonPrompt","PhotonFrag","PhotonISR"} ;
1409 TString isoName [] = {"NoIso",""};
1410 TString isoTitle[] = {"Not isolated" ,"isolated"};
1412 fhEIso = new TH1F("hE",
1413 Form("Number of isolated particles vs E, %s",parTitle.Data()),
1414 nptbins,ptmin,ptmax);
1415 fhEIso->SetYTitle("d#it{N} / d#it{E}");
1416 fhEIso->SetXTitle("#it{E} (GeV/#it{c})");
1417 outputContainer->Add(fhEIso) ;
1419 fhPtIso = new TH1F("hPt",
1420 Form("Number of isolated particles vs #it{p}_{T}, %s",parTitle.Data()),
1421 nptbins,ptmin,ptmax);
1422 fhPtIso->SetYTitle("d#it{N} / #it{p}_{T}");
1423 fhPtIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1424 outputContainer->Add(fhPtIso) ;
1426 fhPhiIso = new TH2F("hPhi",
1427 Form("Number of isolated particles vs #phi, %s",parTitle.Data()),
1428 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
1429 fhPhiIso->SetYTitle("#phi");
1430 fhPhiIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1431 outputContainer->Add(fhPhiIso) ;
1433 fhEtaIso = new TH2F("hEta",
1434 Form("Number of isolated particles vs #eta, %s",parTitle.Data()),
1435 nptbins,ptmin,ptmax,netabins,etamin,etamax);
1436 fhEtaIso->SetYTitle("#eta");
1437 fhEtaIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1438 outputContainer->Add(fhEtaIso) ;
1440 fhEtaPhiIso = new TH2F("hEtaPhiIso",
1441 Form("Number of isolated particles #eta vs #phi, %s",parTitle.Data()),
1442 netabins,etamin,etamax,nphibins,phimin,phimax);
1443 fhEtaPhiIso->SetXTitle("#eta");
1444 fhEtaPhiIso->SetYTitle("#phi");
1445 outputContainer->Add(fhEtaPhiIso) ;
1447 // Not Isolated histograms, reference histograms
1449 fhENoIso = new TH1F("hENoIso",
1450 Form("Number of not isolated leading particles vs #it{p}_{T}, %s",parTitle.Data()),
1451 nptbins,ptmin,ptmax);
1452 fhENoIso->SetYTitle("#it{counts}");
1453 fhENoIso->SetXTitle("E (GeV/#it{c})");
1454 outputContainer->Add(fhENoIso) ;
1456 fhPtNoIso = new TH1F("hPtNoIso",
1457 Form("Number of not isolated leading particles vs #it{p}_{T}, %s",parTitle.Data()),
1458 nptbins,ptmin,ptmax);
1459 fhPtNoIso->SetYTitle("#it{counts}");
1460 fhPtNoIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1461 outputContainer->Add(fhPtNoIso) ;
1463 fhEtaPhiNoIso = new TH2F("hEtaPhiNoIso",
1464 Form("Number of not isolated leading particles #eta vs #phi, %s",parTitle.Data()),
1465 netabins,etamin,etamax,nphibins,phimin,phimax);
1466 fhEtaPhiNoIso->SetXTitle("#eta");
1467 fhEtaPhiNoIso->SetYTitle("#phi");
1468 outputContainer->Add(fhEtaPhiNoIso) ;
1470 if(fFillHighMultHistograms)
1472 fhPtCentralityIso = new TH2F("hPtCentrality",
1473 Form("centrality vs #it{p}_{T} for isolated particles, %s",parTitle.Data()),
1474 nptbins,ptmin,ptmax, 100,0,100);
1475 fhPtCentralityIso->SetYTitle("centrality");
1476 fhPtCentralityIso->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1477 outputContainer->Add(fhPtCentralityIso) ;
1479 fhPtEventPlaneIso = new TH2F("hPtEventPlane",
1480 Form("event plane angle vs #it{p}_{T} for isolated particles, %s",parTitle.Data()),
1481 nptbins,ptmin,ptmax, 100,0,TMath::Pi());
1482 fhPtEventPlaneIso->SetYTitle("Event plane angle (rad)");
1483 fhPtEventPlaneIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1484 outputContainer->Add(fhPtEventPlaneIso) ;
1487 if(fFillNLMHistograms)
1489 fhPtNLocMaxIso = new TH2F("hPtNLocMax",
1490 Form("Number of isolated particles vs #it{p}_{T}, %s",parTitle.Data()),
1491 nptbins,ptmin,ptmax,10,0,10);
1492 fhPtNLocMaxIso->SetYTitle("#it{NLM}");
1493 fhPtNLocMaxIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1495 fhPtNLocMaxNoIso = new TH2F("hPtNLocMaxNoIso",
1496 Form("Number of not isolated particles vs #it{p}_{T}, %s",parTitle.Data()),
1497 nptbins,ptmin,ptmax,10,0,10);
1498 fhPtNLocMaxNoIso->SetYTitle("#it{NLM}");
1499 fhPtNLocMaxNoIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1500 outputContainer->Add(fhPtNLocMaxNoIso) ;
1503 if(fFillTaggedDecayHistograms)
1505 fhPtDecayIso = new TH1F("hPtDecayIso",
1506 Form("Number of isolated #pi^{0} decay particles vs #it{p}_{T}, %s",parTitle.Data()),
1507 nptbins,ptmin,ptmax);
1508 fhPtDecayIso->SetYTitle("#it{counts}");
1509 fhPtDecayIso->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1510 outputContainer->Add(fhPtDecayIso) ;
1512 fhEtaPhiDecayIso = new TH2F("hEtaPhiDecayIso",
1513 Form("Number of isolated Pi0 decay particles #eta vs #phi, %s",parTitle.Data()),
1514 netabins,etamin,etamax,nphibins,phimin,phimax);
1515 fhEtaPhiDecayIso->SetXTitle("#eta");
1516 fhEtaPhiDecayIso->SetYTitle("#phi");
1517 outputContainer->Add(fhEtaPhiDecayIso) ;
1519 fhPtDecayNoIso = new TH1F("hPtDecayNoIso",
1520 Form("Number of not isolated leading pi0 decay particles vs #it{p}_{T}, %s",parTitle.Data()),
1521 nptbins,ptmin,ptmax);
1522 fhPtDecayNoIso->SetYTitle("#it{counts}");
1523 fhPtDecayNoIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1524 outputContainer->Add(fhPtDecayNoIso) ;
1526 fhEtaPhiDecayNoIso = new TH2F("hEtaPhiDecayNoIso",
1527 Form("Number of not isolated leading Pi0 decay particles #eta vs #phi, %s",parTitle.Data()),
1528 netabins,etamin,etamax,nphibins,phimin,phimax);
1529 fhEtaPhiDecayNoIso->SetXTitle("#eta");
1530 fhEtaPhiDecayNoIso->SetYTitle("#phi");
1531 outputContainer->Add(fhEtaPhiDecayNoIso) ;
1534 fhConeSumPt = new TH2F("hConePtSum",
1535 Form("Track and Cluster #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1536 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1537 fhConeSumPt->SetYTitle("#Sigma #it{p}_{T}");
1538 fhConeSumPt->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1539 outputContainer->Add(fhConeSumPt) ;
1541 fhConeSumPtTrigEtaPhi = new TH2F("hConePtSumTrigEtaPhi",
1542 Form("Trigger #eta vs #phi, #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1543 netabins,etamin,etamax,nphibins,phimin,phimax);
1544 fhConeSumPtTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1545 fhConeSumPtTrigEtaPhi->SetXTitle("#eta_{trigger}");
1546 fhConeSumPtTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1547 outputContainer->Add(fhConeSumPtTrigEtaPhi) ;
1549 fhPtInCone = new TH2F("hPtInCone",
1550 Form("#it{p}_{T} of clusters and tracks in isolation cone for #it{R} = %2.2f",r),
1551 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
1552 fhPtInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
1553 fhPtInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1554 outputContainer->Add(fhPtInCone) ;
1556 if(fFillHighMultHistograms)
1558 fhPtInConeCent = new TH2F("hPtInConeCent",
1559 Form("#it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1560 100,0,100,nptinconebins,ptinconemin,ptinconemax);
1561 fhPtInConeCent->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
1562 fhPtInConeCent->SetXTitle("centrality");
1563 outputContainer->Add(fhPtInConeCent) ;
1566 // Cluster only histograms
1567 if(GetIsolationCut()->GetParticleTypeInCone()!=AliIsolationCut::kOnlyCharged)
1569 fhConeSumPtCluster = new TH2F("hConePtSumCluster",
1570 Form("Cluster #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1571 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1572 fhConeSumPtCluster->SetYTitle("#Sigma #it{p}_{T}");
1573 fhConeSumPtCluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1574 outputContainer->Add(fhConeSumPtCluster) ;
1576 if(fFillCellHistograms)
1578 fhConeSumPtCell = new TH2F("hConePtSumCell",
1579 Form("Cell #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1580 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1581 fhConeSumPtCell->SetYTitle("#Sigma #it{p}_{T}");
1582 fhConeSumPtCell->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1583 outputContainer->Add(fhConeSumPtCell) ;
1586 if(fFillUEBandSubtractHistograms)
1588 fhConeSumPtEtaBandUECluster = new TH2F("hConePtSumEtaBandUECluster",
1589 "#Sigma cluster #it{p}_{T} in UE Eta Band",
1590 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1591 fhConeSumPtEtaBandUECluster->SetYTitle("#Sigma #it{p}_{T}");
1592 fhConeSumPtEtaBandUECluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1593 outputContainer->Add(fhConeSumPtEtaBandUECluster) ;
1595 fhConeSumPtPhiBandUECluster = new TH2F("hConePtSumPhiBandUECluster",
1596 "#Sigma cluster #it{p}_{T} UE Phi Band",
1597 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1598 fhConeSumPtPhiBandUECluster->SetYTitle("#Sigma #it{p}_{T}");
1599 fhConeSumPtPhiBandUECluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1600 outputContainer->Add(fhConeSumPtPhiBandUECluster) ;
1602 fhConeSumPtEtaBandUEClusterTrigEtaPhi = new TH2F("hConePtSumEtaBandUEClusterTrigEtaPhi",
1603 "Trigger #eta vs #phi, #Sigma cluster #it{p}_{T} in UE Eta Band",
1604 netabins,etamin,etamax,nphibins,phimin,phimax);
1605 fhConeSumPtEtaBandUEClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1606 fhConeSumPtEtaBandUEClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
1607 fhConeSumPtEtaBandUEClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1608 outputContainer->Add(fhConeSumPtEtaBandUEClusterTrigEtaPhi) ;
1610 fhConeSumPtPhiBandUEClusterTrigEtaPhi = new TH2F("hConePtSumPhiBandUEClusterTrigEtaPhi",
1611 "Trigger #eta vs #phi, #Sigma cluster #it{p}_{T} UE Phi Band",
1612 netabins,etamin,etamax,nphibins,phimin,phimax);
1613 fhConeSumPtPhiBandUEClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1614 fhConeSumPtPhiBandUEClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
1615 fhConeSumPtPhiBandUEClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1616 outputContainer->Add(fhConeSumPtPhiBandUEClusterTrigEtaPhi) ;
1617 if(fFillCellHistograms)
1620 fhConeSumPtEtaBandUECell = new TH2F("hConePtSumEtaBandUECell",
1621 "#Sigma cell #it{p}_{T} in UE Eta Band",
1622 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1623 fhConeSumPtEtaBandUECell->SetYTitle("#Sigma #it{p}_{T}");
1624 fhConeSumPtEtaBandUECell->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1625 outputContainer->Add(fhConeSumPtEtaBandUECell) ;
1627 fhConeSumPtPhiBandUECell = new TH2F("hConePtSumPhiBandUECell",
1628 "#Sigma cell #it{p}_{T} UE Phi Band",
1629 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1630 fhConeSumPtPhiBandUECell->SetYTitle("#Sigma #it{p}_{T}");
1631 fhConeSumPtPhiBandUECell->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1632 outputContainer->Add(fhConeSumPtPhiBandUECell) ;
1634 fhConeSumPtEtaBandUECellTrigEtaPhi = new TH2F("hConePtSumEtaBandUECellTrigEtaPhi",
1635 "Trigger #eta vs #phi, #Sigma cell #it{p}_{T} in UE Eta Band",
1636 netabins,etamin,etamax,nphibins,phimin,phimax);
1637 fhConeSumPtEtaBandUECellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1638 fhConeSumPtEtaBandUECellTrigEtaPhi->SetXTitle("#eta_{trigger}");
1639 fhConeSumPtEtaBandUECellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1640 outputContainer->Add(fhConeSumPtEtaBandUECellTrigEtaPhi) ;
1642 fhConeSumPtPhiBandUECellTrigEtaPhi = new TH2F("hConePtSumPhiBandUECellTrigEtaPhi",
1643 "Trigger #eta vs #phi, #Sigma cell #it{p}_{T} UE Phi Band",
1644 netabins,etamin,etamax,nphibins,phimin,phimax);
1645 fhConeSumPtPhiBandUECellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1646 fhConeSumPtPhiBandUECellTrigEtaPhi->SetXTitle("#eta_{trigger}");
1647 fhConeSumPtPhiBandUECellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1648 outputContainer->Add(fhConeSumPtPhiBandUECellTrigEtaPhi) ;
1651 fhEtaBandCluster = new TH2F("hEtaBandCluster",
1652 Form("#eta vs #phi of clusters in #eta band isolation cone for #it{R} = %2.2f",r),
1653 netabins,-1,1,nphibins,0,TMath::TwoPi());
1654 fhEtaBandCluster->SetXTitle("#eta");
1655 fhEtaBandCluster->SetYTitle("#phi");
1656 outputContainer->Add(fhEtaBandCluster) ;
1658 fhPhiBandCluster = new TH2F("hPhiBandCluster",
1659 Form("#eta vs #phi of clusters in #phi band isolation cone for #it{R} = %2.2f",r),
1660 netabins,-1,1,nphibins,0,TMath::TwoPi());
1661 fhPhiBandCluster->SetXTitle("#eta");
1662 fhPhiBandCluster->SetYTitle("#phi");
1663 outputContainer->Add(fhPhiBandCluster) ;
1665 fhEtaPhiInConeCluster= new TH2F("hEtaPhiInConeCluster",
1666 Form("#eta vs #phi of clusters in cone for #it{R} = %2.2f",r),
1667 netabins,-1,1,nphibins,0,TMath::TwoPi());
1668 fhEtaPhiInConeCluster->SetXTitle("#eta");
1669 fhEtaPhiInConeCluster->SetYTitle("#phi");
1670 outputContainer->Add(fhEtaPhiInConeCluster) ;
1672 fhEtaPhiCluster= new TH2F("hEtaPhiCluster",
1673 Form("#eta vs #phi of all clusters"),
1674 netabins,-1,1,nphibins,0,TMath::TwoPi());
1675 fhEtaPhiCluster->SetXTitle("#eta");
1676 fhEtaPhiCluster->SetYTitle("#phi");
1677 outputContainer->Add(fhEtaPhiCluster) ;
1681 fhPtClusterInCone = new TH2F("hPtClusterInCone",
1682 Form("#it{p}_{T} of clusters in isolation cone for #it{R} = %2.2f",r),
1683 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
1684 fhPtClusterInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
1685 fhPtClusterInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1686 outputContainer->Add(fhPtClusterInCone) ;
1688 if(fFillCellHistograms)
1690 fhPtCellInCone = new TH2F("hPtCellInCone",
1691 Form("#it{p}_{T} of cells in isolation cone for #it{R} = %2.2f",r),
1692 nptbins,ptmin,ptmax,1000,0,50);
1693 fhPtCellInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
1694 fhPtCellInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1695 outputContainer->Add(fhPtCellInCone) ;
1697 fhEtaBandCell = new TH2F("hEtaBandCell",
1698 Form("#col vs #row of cells in #eta band isolation cone for #it{R} = %2.2f",r),
1700 fhEtaBandCell->SetXTitle("#col");
1701 fhEtaBandCell->SetYTitle("#row");
1702 outputContainer->Add(fhEtaBandCell) ;
1704 fhPhiBandCell = new TH2F("hPhiBandCell",
1705 Form("#col vs #row of cells in #phi band isolation cone for #it{R} = %2.2f",r),
1707 fhPhiBandCell->SetXTitle("#col");
1708 fhPhiBandCell->SetYTitle("#row");
1709 outputContainer->Add(fhPhiBandCell) ;
1712 if(fFillUEBandSubtractHistograms)
1714 fhConeSumPtEtaUESubCluster = new TH2F("hConeSumPtEtaUESubCluster",
1715 Form("Clusters #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
1716 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1717 fhConeSumPtEtaUESubCluster->SetYTitle("#Sigma #it{p}_{T}");
1718 fhConeSumPtEtaUESubCluster->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1719 outputContainer->Add(fhConeSumPtEtaUESubCluster) ;
1721 fhConeSumPtPhiUESubCluster = new TH2F("hConeSumPtPhiUESubCluster",
1722 Form("Clusters #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
1723 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1724 fhConeSumPtPhiUESubCluster->SetYTitle("#Sigma #it{p}_{T}");
1725 fhConeSumPtPhiUESubCluster->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1726 outputContainer->Add(fhConeSumPtPhiUESubCluster) ;
1728 fhConeSumPtEtaUESubClusterTrigEtaPhi = new TH2F("hConeSumPtEtaUESubClusterTrigEtaPhi",
1729 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),
1730 netabins,etamin,etamax,nphibins,phimin,phimax);
1731 fhConeSumPtEtaUESubClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1732 fhConeSumPtEtaUESubClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
1733 fhConeSumPtEtaUESubClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1734 outputContainer->Add(fhConeSumPtEtaUESubClusterTrigEtaPhi) ;
1736 fhConeSumPtPhiUESubClusterTrigEtaPhi = new TH2F("hConeSumPtPhiUESubClusterTrigEtaPhi",
1737 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),
1738 netabins,etamin,etamax,nphibins,phimin,phimax);
1739 fhConeSumPtPhiUESubClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1740 fhConeSumPtPhiUESubClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
1741 fhConeSumPtPhiUESubClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1742 outputContainer->Add(fhConeSumPtPhiUESubClusterTrigEtaPhi) ;
1744 if(fFillCellHistograms)
1746 fhConeSumPtEtaUESubCell = new TH2F("hConeSumPtEtaUESubCell",
1747 Form("Cells #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
1748 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1749 fhConeSumPtEtaUESubCell->SetYTitle("#Sigma #it{p}_{T}");
1750 fhConeSumPtEtaUESubCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1751 outputContainer->Add(fhConeSumPtEtaUESubCell) ;
1753 fhConeSumPtPhiUESubCell = new TH2F("hConeSumPtPhiUESubCell",
1754 Form("Cells #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
1755 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1756 fhConeSumPtPhiUESubCell->SetYTitle("#Sigma #it{p}_{T}");
1757 fhConeSumPtPhiUESubCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1758 outputContainer->Add(fhConeSumPtPhiUESubCell) ;
1760 fhConeSumPtEtaUESubCellTrigEtaPhi = new TH2F("hConeSumPtEtaUESubCellTrigEtaPhi",
1761 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),
1762 netabins,etamin,etamax,nphibins,phimin,phimax);
1763 fhConeSumPtEtaUESubCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1764 fhConeSumPtEtaUESubCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
1765 fhConeSumPtEtaUESubCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1766 outputContainer->Add(fhConeSumPtEtaUESubCellTrigEtaPhi) ;
1768 fhConeSumPtPhiUESubCellTrigEtaPhi = new TH2F("hConeSumPtPhiUESubCellTrigEtaPhi",
1769 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),
1770 netabins,etamin,etamax,nphibins,phimin,phimax);
1771 fhConeSumPtPhiUESubCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1772 fhConeSumPtPhiUESubCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
1773 fhConeSumPtPhiUESubCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1774 outputContainer->Add(fhConeSumPtPhiUESubCellTrigEtaPhi) ;
1777 fhFractionClusterOutConeEta = new TH2F("hFractionClusterOutConeEta",
1778 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #eta acceptance",r),
1779 nptbins,ptmin,ptmax,100,0,1);
1780 fhFractionClusterOutConeEta->SetYTitle("#it{fraction}");
1781 fhFractionClusterOutConeEta->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
1782 outputContainer->Add(fhFractionClusterOutConeEta) ;
1784 fhFractionClusterOutConeEtaTrigEtaPhi = new TH2F("hFractionClusterOutConeEtaTrigEtaPhi",
1785 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #eta acceptance, in trigger #eta-#phi ",r),
1786 netabins,etamin,etamax,nphibins,phimin,phimax);
1787 fhFractionClusterOutConeEtaTrigEtaPhi->SetZTitle("#it{fraction}");
1788 fhFractionClusterOutConeEtaTrigEtaPhi->SetXTitle("#eta_{trigger}");
1789 fhFractionClusterOutConeEtaTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1790 outputContainer->Add(fhFractionClusterOutConeEtaTrigEtaPhi) ;
1792 fhFractionClusterOutConePhi = new TH2F("hFractionClusterOutConePhi",
1793 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #phi acceptance",r),
1794 nptbins,ptmin,ptmax,100,0,1);
1795 fhFractionClusterOutConePhi->SetYTitle("#it{fraction}");
1796 fhFractionClusterOutConePhi->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
1797 outputContainer->Add(fhFractionClusterOutConePhi) ;
1799 fhFractionClusterOutConePhiTrigEtaPhi = new TH2F("hFractionClusterOutConePhiTrigEtaPhi",
1800 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #phi acceptance, in trigger #eta-#phi ",r),
1801 netabins,etamin,etamax,nphibins,phimin,phimax);
1802 fhFractionClusterOutConePhiTrigEtaPhi->SetZTitle("#it{fraction}");
1803 fhFractionClusterOutConePhiTrigEtaPhi->SetXTitle("#eta_{trigger}");
1804 fhFractionClusterOutConePhiTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1805 outputContainer->Add(fhFractionClusterOutConePhiTrigEtaPhi) ;
1807 fhConeSumPtSubvsConeSumPtTotPhiCluster = new TH2F("hConeSumPtSubvsConeSumPtTotPhiCluster",
1808 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),
1809 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1810 fhConeSumPtSubvsConeSumPtTotPhiCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1811 fhConeSumPtSubvsConeSumPtTotPhiCluster->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
1812 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotPhiCluster);
1814 fhConeSumPtSubNormvsConeSumPtTotPhiCluster = new TH2F("hConeSumPtSubNormvsConeSumPtTotPhiCluster",
1815 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),
1816 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1817 fhConeSumPtSubNormvsConeSumPtTotPhiCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1818 fhConeSumPtSubNormvsConeSumPtTotPhiCluster->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
1819 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotPhiCluster);
1821 fhConeSumPtSubvsConeSumPtTotEtaCluster = new TH2F("hConeSumPtSubvsConeSumPtTotEtaCluster",
1822 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),
1823 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1824 fhConeSumPtSubvsConeSumPtTotEtaCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1825 fhConeSumPtSubvsConeSumPtTotEtaCluster->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
1826 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotEtaCluster);
1828 fhConeSumPtSubNormvsConeSumPtTotEtaCluster = new TH2F("hConeSumPtSubNormvsConeSumPtTotEtaCluster",
1829 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),
1830 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1831 fhConeSumPtSubNormvsConeSumPtTotEtaCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1832 fhConeSumPtSubNormvsConeSumPtTotEtaCluster->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
1833 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotEtaCluster);
1835 fhConeSumPtVSUEClusterEtaBand = new TH2F("hConeSumPtVSUEClusterEtaBand",
1836 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in eta band for cluster (before normalization), R=%2.2f",r),
1837 nptsumbins,ptsummin,ptsummax,2*nptsumbins,ptsummin,2*ptsummax);
1838 fhConeSumPtVSUEClusterEtaBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
1839 fhConeSumPtVSUEClusterEtaBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
1840 outputContainer->Add(fhConeSumPtVSUEClusterEtaBand);
1842 fhConeSumPtVSUEClusterPhiBand = new TH2F("hConeSumPtVSUEClusterPhiBand",
1843 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in phi band for cluster (before normalization), R=%2.2f",r),
1844 nptsumbins,ptsummin,ptsummax,8*nptsumbins,ptsummin,8*ptsummax);
1845 fhConeSumPtVSUEClusterPhiBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
1846 fhConeSumPtVSUEClusterPhiBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
1847 outputContainer->Add(fhConeSumPtVSUEClusterPhiBand);
1849 if(fFillCellHistograms)
1851 fhFractionCellOutConeEta = new TH2F("hFractionCellOutConeEta",
1852 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #eta acceptance",r),
1853 nptbins,ptmin,ptmax,100,0,1);
1854 fhFractionCellOutConeEta->SetYTitle("#it{fraction}");
1855 fhFractionCellOutConeEta->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
1856 outputContainer->Add(fhFractionCellOutConeEta) ;
1858 fhFractionCellOutConeEtaTrigEtaPhi = new TH2F("hFractionCellOutConeEtaTrigEtaPhi",
1859 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #eta acceptance, in trigger #eta-#phi ",r),
1860 netabins,etamin,etamax,nphibins,phimin,phimax);
1861 fhFractionCellOutConeEtaTrigEtaPhi->SetZTitle("#it{fraction}");
1862 fhFractionCellOutConeEtaTrigEtaPhi->SetXTitle("#eta_{trigger}");
1863 fhFractionCellOutConeEtaTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1864 outputContainer->Add(fhFractionCellOutConeEtaTrigEtaPhi) ;
1866 fhFractionCellOutConePhi = new TH2F("hFractionCellOutConePhi",
1867 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #phi acceptance",r),
1868 nptbins,ptmin,ptmax,100,0,1);
1869 fhFractionCellOutConePhi->SetYTitle("#it{fraction}");
1870 fhFractionCellOutConePhi->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
1871 outputContainer->Add(fhFractionCellOutConePhi) ;
1873 fhFractionCellOutConePhiTrigEtaPhi = new TH2F("hFractionCellOutConePhiTrigEtaPhi",
1874 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #phi acceptance, in trigger #eta-#phi ",r),
1875 netabins,etamin,etamax,nphibins,phimin,phimax);
1876 fhFractionCellOutConePhiTrigEtaPhi->SetZTitle("#it{fraction}");
1877 fhFractionCellOutConePhiTrigEtaPhi->SetXTitle("#eta_{trigger}");
1878 fhFractionCellOutConePhiTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1879 outputContainer->Add(fhFractionCellOutConePhiTrigEtaPhi) ;
1882 fhConeSumPtSubvsConeSumPtTotPhiCell = new TH2F("hConeSumPtSubvsConeSumPtTotPhiCell",
1883 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),
1884 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1885 fhConeSumPtSubvsConeSumPtTotPhiCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1886 fhConeSumPtSubvsConeSumPtTotPhiCell->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
1887 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotPhiCell);
1889 fhConeSumPtSubNormvsConeSumPtTotPhiCell = new TH2F("hConeSumPtSubNormvsConeSumPtTotPhiCell",
1890 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),
1891 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1892 fhConeSumPtSubNormvsConeSumPtTotPhiCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1893 fhConeSumPtSubNormvsConeSumPtTotPhiCell->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
1894 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotPhiCell);
1896 fhConeSumPtSubvsConeSumPtTotEtaCell = new TH2F("hConeSumPtSubvsConeSumPtTotEtaCell",
1897 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),
1898 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1899 fhConeSumPtSubvsConeSumPtTotEtaCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1900 fhConeSumPtSubvsConeSumPtTotEtaCell->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
1901 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotEtaCell);
1903 fhConeSumPtSubNormvsConeSumPtTotEtaCell = new TH2F("hConeSumPtSubNormvsConeSumPtTotEtaCell",
1904 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),
1905 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1906 fhConeSumPtSubNormvsConeSumPtTotEtaCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1907 fhConeSumPtSubNormvsConeSumPtTotEtaCell->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
1908 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotEtaCell);
1913 // Track only histograms
1914 if(GetIsolationCut()->GetParticleTypeInCone()!=AliIsolationCut::kOnlyNeutral)
1916 fhConeSumPtTrack = new TH2F("hConePtSumTrack",
1917 Form("Track #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1918 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1919 fhConeSumPtTrack->SetYTitle("#Sigma #it{p}_{T}");
1920 fhConeSumPtTrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1921 outputContainer->Add(fhConeSumPtTrack) ;
1923 fhPtTrackInCone = new TH2F("hPtTrackInCone",
1924 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f",r),
1925 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
1926 fhPtTrackInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
1927 fhPtTrackInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1928 outputContainer->Add(fhPtTrackInCone) ;
1931 if(fFillUEBandSubtractHistograms)
1933 fhConeSumPtEtaBandUETrack = new TH2F("hConePtSumEtaBandUETrack",
1934 "#Sigma track #it{p}_{T} in UE Eta Band",
1935 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1936 fhConeSumPtEtaBandUETrack->SetYTitle("#Sigma #it{p}_{T}");
1937 fhConeSumPtEtaBandUETrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1938 outputContainer->Add(fhConeSumPtEtaBandUETrack) ;
1940 fhConeSumPtPhiBandUETrack = new TH2F("hConePtSumPhiBandUETrack",
1941 "#Sigma track #it{p}_{T} in UE Phi Band",
1942 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax*8);
1943 fhConeSumPtPhiBandUETrack->SetYTitle("#Sigma #it{p}_{T}");
1944 fhConeSumPtPhiBandUETrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1945 outputContainer->Add(fhConeSumPtPhiBandUETrack) ;
1948 fhConeSumPtEtaBandUETrackTrigEtaPhi = new TH2F("hConePtSumEtaBandUETrackTrigEtaPhi",
1949 "Trigger #eta vs #phi, #Sigma track #it{p}_{T} in UE Eta Band",
1950 netabins,etamin,etamax,nphibins,phimin,phimax);
1951 fhConeSumPtEtaBandUETrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1952 fhConeSumPtEtaBandUETrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
1953 fhConeSumPtEtaBandUETrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1954 outputContainer->Add(fhConeSumPtEtaBandUETrackTrigEtaPhi) ;
1956 fhConeSumPtPhiBandUETrackTrigEtaPhi = new TH2F("hConePtSumPhiBandUETrackTrigEtaPhi",
1957 "Trigger #eta vs #phi, #Sigma track #it{p}_{T} in UE Phi Band",
1958 netabins,etamin,etamax,nphibins,phimin,phimax);
1959 fhConeSumPtPhiBandUETrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1960 fhConeSumPtPhiBandUETrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
1961 fhConeSumPtPhiBandUETrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1962 outputContainer->Add(fhConeSumPtPhiBandUETrackTrigEtaPhi) ;
1964 fhEtaBandTrack = new TH2F("hEtaBandTrack",
1965 Form("#eta vs #phi of tracks in #eta band isolation cone for #it{R} = %2.2f",r),
1966 netabins,-1,1,nphibins,0,TMath::TwoPi());
1967 fhEtaBandTrack->SetXTitle("#eta");
1968 fhEtaBandTrack->SetYTitle("#phi");
1969 outputContainer->Add(fhEtaBandTrack) ;
1971 fhPhiBandTrack = new TH2F("hPhiBandTrack",
1972 Form("#eta vs #phi of tracks in #phi band isolation cone for #it{R} = %2.2f",r),
1973 netabins,-1,1,nphibins,0,TMath::TwoPi());
1974 fhPhiBandTrack->SetXTitle("#eta");
1975 fhPhiBandTrack->SetYTitle("#phi");
1976 outputContainer->Add(fhPhiBandTrack) ;
1978 fhConeSumPtEtaUESubTrack = new TH2F("hConeSumPtEtaUESubTrack",
1979 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
1980 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1981 fhConeSumPtEtaUESubTrack->SetYTitle("#Sigma #it{p}_{T}");
1982 fhConeSumPtEtaUESubTrack->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1983 outputContainer->Add(fhConeSumPtEtaUESubTrack) ;
1985 fhConeSumPtPhiUESubTrack = new TH2F("hConeSumPtPhiUESubTrack",
1986 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
1987 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1988 fhConeSumPtPhiUESubTrack->SetYTitle("#Sigma #it{p}_{T}");
1989 fhConeSumPtPhiUESubTrack->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1990 outputContainer->Add(fhConeSumPtPhiUESubTrack) ;
1992 fhConeSumPtEtaUESubTrackTrigEtaPhi = new TH2F("hConeSumPtEtaUESubTrackTrigEtaPhi",
1993 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),
1994 netabins,etamin,etamax,nphibins,phimin,phimax);
1995 fhConeSumPtEtaUESubTrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1996 fhConeSumPtEtaUESubTrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
1997 fhConeSumPtEtaUESubTrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1998 outputContainer->Add(fhConeSumPtEtaUESubTrackTrigEtaPhi) ;
2000 fhConeSumPtPhiUESubTrackTrigEtaPhi = new TH2F("hConeSumPtPhiUESubTrackTrigEtaPhi",
2001 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),
2002 netabins,etamin,etamax,nphibins,phimin,phimax);
2003 fhConeSumPtPhiUESubTrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2004 fhConeSumPtPhiUESubTrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2005 fhConeSumPtPhiUESubTrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2006 outputContainer->Add(fhConeSumPtPhiUESubTrackTrigEtaPhi) ;
2008 fhFractionTrackOutConeEta = new TH2F("hFractionTrackOutConeEta",
2009 Form("Fraction of the isolation cone #it{R} = %2.2f, out of tracks #eta acceptance",r),
2010 nptbins,ptmin,ptmax,100,0,1);
2011 fhFractionTrackOutConeEta->SetYTitle("#it{fraction}");
2012 fhFractionTrackOutConeEta->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
2013 outputContainer->Add(fhFractionTrackOutConeEta) ;
2015 fhFractionTrackOutConeEtaTrigEtaPhi = new TH2F("hFractionTrackOutConeEtaTrigEtaPhi",
2016 Form("Fraction of the isolation cone #it{R} = %2.2f, out of tracks #eta acceptance, in trigger #eta-#phi ",r),
2017 netabins,etamin,etamax,nphibins,phimin,phimax);
2018 fhFractionTrackOutConeEtaTrigEtaPhi->SetZTitle("#it{fraction}");
2019 fhFractionTrackOutConeEtaTrigEtaPhi->SetXTitle("#eta_{trigger}");
2020 fhFractionTrackOutConeEtaTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2021 outputContainer->Add(fhFractionTrackOutConeEtaTrigEtaPhi) ;
2023 fhConeSumPtSubvsConeSumPtTotPhiTrack = new TH2F("hConeSumPtSubvsConeSumPtTotPhiTrack",
2024 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),
2025 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2026 fhConeSumPtSubvsConeSumPtTotPhiTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2027 fhConeSumPtSubvsConeSumPtTotPhiTrack->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
2028 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotPhiTrack);
2030 fhConeSumPtSubNormvsConeSumPtTotPhiTrack = new TH2F("hConeSumPtSubNormvsConeSumPtTotPhiTrack",
2031 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),
2032 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2033 fhConeSumPtSubNormvsConeSumPtTotPhiTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2034 fhConeSumPtSubNormvsConeSumPtTotPhiTrack->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2035 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotPhiTrack);
2037 fhConeSumPtSubvsConeSumPtTotEtaTrack = new TH2F("hConeSumPtSubvsConeSumPtTotEtaTrack",
2038 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),
2039 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2040 fhConeSumPtSubvsConeSumPtTotEtaTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2041 fhConeSumPtSubvsConeSumPtTotEtaTrack->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
2042 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotEtaTrack);
2044 fhConeSumPtSubNormvsConeSumPtTotEtaTrack = new TH2F("hConeSumPtSubNormvsConeSumPtTotEtaTrack",
2045 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),
2046 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2047 fhConeSumPtSubNormvsConeSumPtTotEtaTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2048 fhConeSumPtSubNormvsConeSumPtTotEtaTrack->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2049 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotEtaTrack);
2052 // UE in perpendicular cone
2053 fhPerpConeSumPt = new TH2F("hPerpConePtSum",
2054 Form("#Sigma #it{p}_{T} in isolation cone at #pm 45 degree phi from trigger particle, #it{R} = %2.2f",r),
2055 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2056 fhPerpConeSumPt->SetYTitle("#Sigma #it{p}_{T}");
2057 fhPerpConeSumPt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2058 outputContainer->Add(fhPerpConeSumPt) ;
2060 fhPtInPerpCone = new TH2F("hPtInPerpCone",
2061 Form("#it{p}_{T} in isolation cone at #pm 45 degree phi from trigger particle, #it{R} = %2.2f",r),
2062 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2063 fhPtInPerpCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2064 fhPtInPerpCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2065 outputContainer->Add(fhPtInPerpCone) ;
2067 fhEtaPhiTrack= new TH2F("hEtaPhiTrack",
2068 Form("#eta vs #phi of all Tracks"),
2069 netabins,-1,1,nphibins,0,TMath::TwoPi());
2070 fhEtaPhiTrack->SetXTitle("#eta");
2071 fhEtaPhiTrack->SetYTitle("#phi");
2072 outputContainer->Add(fhEtaPhiTrack) ;
2074 fhEtaPhiInConeTrack= new TH2F("hEtaPhiInConeTrack",
2075 Form("#eta vs #phi of Tracks in cone for #it{R} = %2.2f",r),
2076 netabins,-1,1,nphibins,0,TMath::TwoPi());
2077 fhEtaPhiInConeTrack->SetXTitle("#eta");
2078 fhEtaPhiInConeTrack->SetYTitle("#phi");
2079 outputContainer->Add(fhEtaPhiInConeTrack) ;
2081 fhConeSumPtVSUETracksEtaBand = new TH2F("hConeSumPtVSUETracksEtaBand",
2082 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in eta band for tracks (before normalization), R=%2.2f",r),
2083 nptsumbins,ptsummin,ptsummax,2*nptsumbins,ptsummin,2*ptsummax);
2084 fhConeSumPtVSUETracksEtaBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
2085 fhConeSumPtVSUETracksEtaBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
2086 outputContainer->Add(fhConeSumPtVSUETracksEtaBand);
2088 fhConeSumPtVSUETracksPhiBand = new TH2F("hConeSumPtVSUETracksPhiBand",
2089 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in phi band for tracks (before normalization), R=%2.2f",r),
2090 nptsumbins,ptsummin,ptsummax,8*nptsumbins,ptsummin,8*ptsummax);
2091 fhConeSumPtVSUETracksPhiBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
2092 fhConeSumPtVSUETracksPhiBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
2093 outputContainer->Add(fhConeSumPtVSUETracksPhiBand);
2097 if(GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kNeutralAndCharged )
2099 fhConeSumPtClustervsTrack = new TH2F("hConePtSumClustervsTrack",
2100 Form("Track vs Cluster #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2101 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2102 fhConeSumPtClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2103 fhConeSumPtClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2104 outputContainer->Add(fhConeSumPtClustervsTrack) ;
2106 if(fFillCellHistograms)
2108 fhConeSumPtCellvsTrack = new TH2F("hConePtSumCellvsTrack",
2109 Form("Track vs cell #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2110 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2111 fhConeSumPtCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2112 fhConeSumPtCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2113 outputContainer->Add(fhConeSumPtCellvsTrack) ;
2115 fhConeSumPtCellTrack = new TH2F("hConePtSumCellTrack",
2116 Form("Track and Cell #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2117 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2118 fhConeSumPtCellTrack->SetYTitle("#Sigma #it{p}_{T}");
2119 fhConeSumPtCellTrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2120 outputContainer->Add(fhConeSumPtCellTrack) ;
2122 fhConeSumPtCellTrackTrigEtaPhi = new TH2F("hConePtSumCellTrackTrigEtaPhi",
2123 Form("Trigger #eta vs #phi, #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2124 netabins,etamin,etamax,nphibins,phimin,phimax);
2125 fhConeSumPtCellTrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2126 fhConeSumPtCellTrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2127 fhConeSumPtCellTrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2128 outputContainer->Add(fhConeSumPtCellTrackTrigEtaPhi) ;
2132 if(fFillUEBandSubtractHistograms)
2134 fhConeSumPtEtaUESub = new TH2F("hConeSumPtEtaUESub",
2135 Form("#Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
2136 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2137 fhConeSumPtEtaUESub->SetYTitle("#Sigma #it{p}_{T}");
2138 fhConeSumPtEtaUESub->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2139 outputContainer->Add(fhConeSumPtEtaUESub) ;
2141 fhConeSumPtPhiUESub = new TH2F("hConeSumPtPhiUESub",
2142 Form("#Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
2143 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2144 fhConeSumPtPhiUESub->SetYTitle("#Sigma #it{p}_{T}");
2145 fhConeSumPtPhiUESub->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2146 outputContainer->Add(fhConeSumPtPhiUESub) ;
2148 fhConeSumPtEtaUESubTrigEtaPhi = new TH2F("hConeSumPtEtaUESubTrigEtaPhi",
2149 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),
2150 netabins,etamin,etamax,nphibins,phimin,phimax);
2151 fhConeSumPtEtaUESubTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2152 fhConeSumPtEtaUESubTrigEtaPhi->SetXTitle("#eta_{trigger}");
2153 fhConeSumPtEtaUESubTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2154 outputContainer->Add(fhConeSumPtEtaUESubTrigEtaPhi) ;
2156 fhConeSumPtPhiUESubTrigEtaPhi = new TH2F("hConeSumPtPhiUESubTrigEtaPhi",
2157 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),
2158 netabins,etamin,etamax,nphibins,phimin,phimax);
2159 fhConeSumPtPhiUESubTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2160 fhConeSumPtPhiUESubTrigEtaPhi->SetXTitle("#eta_{trigger}");
2161 fhConeSumPtPhiUESubTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2162 outputContainer->Add(fhConeSumPtPhiUESubTrigEtaPhi) ;
2164 fhConeSumPtEtaUESubClustervsTrack = new TH2F("hConePtSumEtaUESubClustervsTrack",
2165 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub eta band in isolation cone for #it{R} = %2.2f",r),
2166 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2167 fhConeSumPtEtaUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2168 fhConeSumPtEtaUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2169 outputContainer->Add(fhConeSumPtEtaUESubClustervsTrack) ;
2171 fhConeSumPtPhiUESubClustervsTrack = new TH2F("hConePhiUESubPtSumClustervsTrack",
2172 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub phi band in isolation cone for #it{R} = %2.2f",r),
2173 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2174 fhConeSumPtPhiUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2175 fhConeSumPtPhiUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2176 outputContainer->Add(fhConeSumPtPhiUESubClustervsTrack) ;
2178 fhEtaBandClustervsTrack = new TH2F("hEtaBandClustervsTrack",
2179 Form("Track vs Cluster #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2180 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2181 fhEtaBandClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2182 fhEtaBandClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2183 outputContainer->Add(fhEtaBandClustervsTrack) ;
2185 fhPhiBandClustervsTrack = new TH2F("hPhiBandClustervsTrack",
2186 Form("Track vs Cluster #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2187 nptsumbins,ptsummin,ptsummax*4,nptsumbins,ptsummin,ptsummax*8);
2188 fhPhiBandClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2189 fhPhiBandClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2190 outputContainer->Add(fhPhiBandClustervsTrack) ;
2192 fhEtaBandNormClustervsTrack = new TH2F("hEtaBandNormClustervsTrack",
2193 Form("Track vs Cluster #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2194 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2195 fhEtaBandNormClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2196 fhEtaBandNormClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2197 outputContainer->Add(fhEtaBandNormClustervsTrack) ;
2199 fhPhiBandNormClustervsTrack = new TH2F("hPhiBandNormClustervsTrack",
2200 Form("Track vs Cluster #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2201 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2202 fhPhiBandNormClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2203 fhPhiBandNormClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2204 outputContainer->Add(fhPhiBandNormClustervsTrack) ;
2206 fhConeSumPtEtaUESubClustervsTrack = new TH2F("hConePtSumEtaUESubClustervsTrack",
2207 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub eta band in isolation cone for #it{R} = %2.2f",r),
2208 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2209 fhConeSumPtEtaUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2210 fhConeSumPtEtaUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2211 outputContainer->Add(fhConeSumPtEtaUESubClustervsTrack) ;
2213 fhConeSumPtPhiUESubClustervsTrack = new TH2F("hConePhiUESubPtSumClustervsTrack",
2214 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub phi band in isolation cone for #it{R} = %2.2f",r),
2215 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2216 fhConeSumPtPhiUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2217 fhConeSumPtPhiUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2218 outputContainer->Add(fhConeSumPtPhiUESubClustervsTrack) ;
2220 if(fFillCellHistograms)
2223 fhConeSumPtEtaUESubCellvsTrack = new TH2F("hConePtSumEtaUESubCellvsTrack",
2224 Form("Track vs Cell #Sigma #it{p}_{T} UE sub eta band in isolation cone for #it{R} = %2.2f",r),
2225 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2226 fhConeSumPtEtaUESubCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2227 fhConeSumPtEtaUESubCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2228 outputContainer->Add(fhConeSumPtEtaUESubCellvsTrack) ;
2230 fhConeSumPtPhiUESubCellvsTrack = new TH2F("hConePhiUESubPtSumCellvsTrack",
2231 Form("Track vs Cell #Sigma #it{p}_{T} UE sub phi band in isolation cone for #it{R} = %2.2f",r),
2232 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2233 fhConeSumPtPhiUESubCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2234 fhConeSumPtPhiUESubCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2235 outputContainer->Add(fhConeSumPtPhiUESubCellvsTrack) ;
2237 fhEtaBandCellvsTrack = new TH2F("hEtaBandCellvsTrack",
2238 Form("Track vs Cell #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2239 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2240 fhEtaBandCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2241 fhEtaBandCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2242 outputContainer->Add(fhEtaBandCellvsTrack) ;
2244 fhPhiBandCellvsTrack = new TH2F("hPhiBandCellvsTrack",
2245 Form("Track vs Cell #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2246 nptsumbins,ptsummin,ptsummax*4,nptsumbins,ptsummin,ptsummax*8);
2247 fhPhiBandCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2248 fhPhiBandCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2249 outputContainer->Add(fhPhiBandCellvsTrack) ;
2251 fhEtaBandNormCellvsTrack = new TH2F("hEtaBandNormCellvsTrack",
2252 Form("Track vs Cell #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2253 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2254 fhEtaBandNormCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2255 fhEtaBandNormCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2256 outputContainer->Add(fhEtaBandNormCellvsTrack) ;
2258 fhPhiBandNormCellvsTrack = new TH2F("hPhiBandNormCellvsTrack",
2259 Form("Track vs Cell #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2260 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2261 fhPhiBandNormCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2262 fhPhiBandNormCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2263 outputContainer->Add(fhPhiBandNormCellvsTrack) ;
2265 fhConeSumPtEtaUESubTrackCell = new TH2F("hConeSumPtEtaUESubTrackCell",
2266 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
2267 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2268 fhConeSumPtEtaUESubTrackCell->SetYTitle("#Sigma #it{p}_{T}");
2269 fhConeSumPtEtaUESubTrackCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2270 outputContainer->Add(fhConeSumPtEtaUESubTrackCell) ;
2272 fhConeSumPtPhiUESubTrackCell = new TH2F("hConeSumPtPhiUESubTrackCell",
2273 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
2274 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2275 fhConeSumPtPhiUESubTrackCell->SetYTitle("#Sigma #it{p}_{T}");
2276 fhConeSumPtPhiUESubTrackCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2277 outputContainer->Add(fhConeSumPtPhiUESubTrackCell) ;
2279 fhConeSumPtEtaUESubTrackCellTrigEtaPhi = new TH2F("hConeSumPtEtaUESubTrackCellTrigEtaPhi",
2280 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),
2281 netabins,etamin,etamax,nphibins,phimin,phimax);
2282 fhConeSumPtEtaUESubTrackCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2283 fhConeSumPtEtaUESubTrackCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
2284 fhConeSumPtEtaUESubTrackCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2285 outputContainer->Add(fhConeSumPtEtaUESubTrackCellTrigEtaPhi) ;
2287 fhConeSumPtPhiUESubTrackCellTrigEtaPhi = new TH2F("hConeSumPtPhiUESubTrackCellTrigEtaPhi",
2288 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),
2289 netabins,etamin,etamax,nphibins,phimin,phimax);
2290 fhConeSumPtPhiUESubTrackCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2291 fhConeSumPtPhiUESubTrackCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
2292 fhConeSumPtPhiUESubTrackCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2293 outputContainer->Add(fhConeSumPtPhiUESubTrackCellTrigEtaPhi) ;
2298 for(Int_t iso = 0; iso < 2; iso++)
2302 fhTrackMatchedDEta[iso] = new TH2F
2303 (Form("hTrackMatchedDEta%s",isoName[iso].Data()),
2304 Form("%s - d#eta of cluster-track vs cluster energy, %s",isoTitle[iso].Data(),parTitle.Data()),
2305 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
2306 fhTrackMatchedDEta[iso]->SetYTitle("d#eta");
2307 fhTrackMatchedDEta[iso]->SetXTitle("E_{cluster} (GeV)");
2309 fhTrackMatchedDPhi[iso] = new TH2F
2310 (Form("hTrackMatchedDPhi%s",isoName[iso].Data()),
2311 Form("%s - d#phi of cluster-track vs cluster energy, %s",isoTitle[iso].Data(),parTitle.Data()),
2312 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
2313 fhTrackMatchedDPhi[iso]->SetYTitle("d#phi (rad)");
2314 fhTrackMatchedDPhi[iso]->SetXTitle("E_{cluster} (GeV)");
2316 fhTrackMatchedDEtaDPhi[iso] = new TH2F
2317 (Form("hTrackMatchedDEtaDPhi%s",isoName[iso].Data()),
2318 Form("%s - d#eta vs d#phi of cluster-track, %s",isoTitle[iso].Data(),parTitle.Data()),
2319 nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax);
2320 fhTrackMatchedDEtaDPhi[iso]->SetYTitle("d#phi (rad)");
2321 fhTrackMatchedDEtaDPhi[iso]->SetXTitle("d#eta");
2323 outputContainer->Add(fhTrackMatchedDEta[iso]) ;
2324 outputContainer->Add(fhTrackMatchedDPhi[iso]) ;
2325 outputContainer->Add(fhTrackMatchedDEtaDPhi[iso]) ;
2327 fhdEdx[iso] = new TH2F
2328 (Form("hdEdx%s",isoName[iso].Data()),
2329 Form("%s - Matched track <d#it{E}/d#it{x}> vs cluster #it{E}, %s",isoTitle[iso].Data(),parTitle.Data()),
2330 nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
2331 fhdEdx[iso]->SetXTitle("#it{E} (GeV)");
2332 fhdEdx[iso]->SetYTitle("<d#it{E}/d#it{x}>");
2333 outputContainer->Add(fhdEdx[iso]);
2335 fhEOverP[iso] = new TH2F
2336 (Form("hEOverP%s",isoName[iso].Data()),
2337 Form("%s - Matched track #it{E}/#it{p} vs cluster, %s",isoTitle[iso].Data(),parTitle.Data()),
2338 nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
2339 fhEOverP[iso]->SetXTitle("#it{E} (GeV)");
2340 fhEOverP[iso]->SetYTitle("#it{E}/#it{p}");
2341 outputContainer->Add(fhEOverP[iso]);
2345 fhTrackMatchedMCParticle[iso] = new TH2F
2346 (Form("hTrackMatchedMCParticle%s",isoName[iso].Data()),
2347 Form("%s - Origin of particle vs cluster #it{E}, %s",isoTitle[iso].Data(),parTitle.Data()),
2348 nptbins,ptmin,ptmax,8,0,8);
2349 fhTrackMatchedMCParticle[iso]->SetXTitle("#it{E} (GeV)");
2350 //fhTrackMatchedMCParticle[iso]->SetYTitle("Particle type");
2352 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(1 ,"Photon");
2353 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(2 ,"Electron");
2354 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(3 ,"Meson Merged");
2355 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(4 ,"Rest");
2356 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(5 ,"Conv. Photon");
2357 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(6 ,"Conv. Electron");
2358 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(7 ,"Conv. Merged");
2359 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(8 ,"Conv. Rest");
2361 outputContainer->Add(fhTrackMatchedMCParticle[iso]);
2367 fhELambda0[iso] = new TH2F
2368 (Form("hELambda0%s",isoName[iso].Data()),
2369 Form("%s cluster : #it{E} vs #lambda_{0}, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2370 fhELambda0[iso]->SetYTitle("#lambda_{0}^{2}");
2371 fhELambda0[iso]->SetXTitle("#it{E} (GeV)");
2372 outputContainer->Add(fhELambda0[iso]) ;
2374 fhELambda1[iso] = new TH2F
2375 (Form("hELambda1%s",isoName[iso].Data()),
2376 Form("%s cluster: #it{E} vs #lambda_{1}, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2377 fhELambda1[iso]->SetYTitle("#lambda_{1}^{2}");
2378 fhELambda1[iso]->SetXTitle("#it{E} (GeV)");
2379 outputContainer->Add(fhELambda1[iso]) ;
2381 fhPtLambda0[iso] = new TH2F
2382 (Form("hPtLambda0%s",isoName[iso].Data()),
2383 Form("%s cluster : #it{p}_{T} vs #lambda_{0}, %s",isoTitle[iso].Data(), parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2384 fhPtLambda0[iso]->SetYTitle("#lambda_{0}^{2}");
2385 fhPtLambda0[iso]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2386 outputContainer->Add(fhPtLambda0[iso]) ;
2390 for(Int_t imc = 0; imc < 9; imc++)
2392 fhPtLambda0MC[imc][iso] = new TH2F(Form("hPtLambda0%s_MC%s",isoName[iso].Data(),mcPartName[imc].Data()),
2393 Form("%s cluster : #it{p}_{T} vs #lambda_{0}: %s %s",isoTitle[iso].Data(),mcPartType[imc].Data(),parTitle.Data()),
2394 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2395 fhPtLambda0MC[imc][iso]->SetYTitle("#lambda_{0}^{2}");
2396 fhPtLambda0MC[imc][iso]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2397 outputContainer->Add( fhPtLambda0MC[imc][iso]) ;
2401 if(fIsoDetector=="EMCAL" && GetFirstSMCoveredByTRD() >= 0)
2403 fhPtLambda0TRD[iso] = new TH2F
2404 (Form("hPtLambda0TRD%s",isoName[iso].Data()),
2405 Form("%s cluster: #it{p}_{T} vs #lambda_{0}, SM behind TRD, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2406 fhPtLambda0TRD[iso]->SetYTitle("#lambda_{0}^{2}");
2407 fhPtLambda0TRD[iso]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2408 outputContainer->Add(fhPtLambda0TRD[iso]) ;
2410 fhELambda0TRD[iso] = new TH2F
2411 (Form("hELambda0TRD%s",isoName[iso].Data()),
2412 Form("%s cluster: #it{E} vs #lambda_{0}, SM behind TRD, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2413 fhELambda0TRD[iso]->SetYTitle("#lambda_{0}^{2}");
2414 fhELambda0TRD[iso]->SetXTitle("#it{E} (GeV)");
2415 outputContainer->Add(fhELambda0TRD[iso]) ;
2417 fhELambda1TRD[iso] = new TH2F
2418 (Form("hELambda1TRD%s",isoName[iso].Data()),
2419 Form("%s cluster: #it{E} vs #lambda_{1}, SM behind TRD, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2420 fhELambda1TRD[iso]->SetYTitle("#lambda_{1}^{2}");
2421 fhELambda1TRD[iso]->SetXTitle("#it{E} (GeV)");
2422 outputContainer->Add(fhELambda1TRD[iso]) ;
2425 if(fFillNLMHistograms)
2427 fhNLocMax[iso] = new TH2F
2428 (Form("hNLocMax%s",isoName[iso].Data()),
2429 Form("%s - Number of local maxima in cluster, %s",isoTitle[iso].Data(),parTitle.Data()),
2430 nptbins,ptmin,ptmax,10,0,10);
2431 fhNLocMax[iso]->SetYTitle("#it{NLM}");
2432 fhNLocMax[iso]->SetXTitle("#it{E} (GeV)");
2433 outputContainer->Add(fhNLocMax[iso]) ;
2435 fhELambda0LocMax1[iso] = new TH2F
2436 (Form("hELambda0LocMax1%s",isoName[iso].Data()),
2437 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);
2438 fhELambda0LocMax1[iso]->SetYTitle("#lambda_{0}^{2}");
2439 fhELambda0LocMax1[iso]->SetXTitle("#it{E} (GeV)");
2440 outputContainer->Add(fhELambda0LocMax1[iso]) ;
2442 fhELambda1LocMax1[iso] = new TH2F
2443 (Form("hELambda1LocMax1%s",isoName[iso].Data()),
2444 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);
2445 fhELambda1LocMax1[iso]->SetYTitle("#lambda_{1}^{2}");
2446 fhELambda1LocMax1[iso]->SetXTitle("#it{E} (GeV)");
2447 outputContainer->Add(fhELambda1LocMax1[iso]) ;
2449 fhELambda0LocMax2[iso] = new TH2F
2450 (Form("hELambda0LocMax2%s",isoName[iso].Data()),
2451 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);
2452 fhELambda0LocMax2[iso]->SetYTitle("#lambda_{0}^{2}");
2453 fhELambda0LocMax2[iso]->SetXTitle("#it{E} (GeV)");
2454 outputContainer->Add(fhELambda0LocMax2[iso]) ;
2456 fhELambda1LocMax2[iso] = new TH2F
2457 (Form("hELambda1LocMax2%s",isoName[iso].Data()),
2458 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);
2459 fhELambda1LocMax2[iso]->SetYTitle("#lambda_{1}^{2}");
2460 fhELambda1LocMax2[iso]->SetXTitle("#it{E} (GeV)");
2461 outputContainer->Add(fhELambda1LocMax2[iso]) ;
2463 fhELambda0LocMaxN[iso] = new TH2F
2464 ( Form("hELambda0LocMaxN%s",isoName[iso].Data()),
2465 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);
2466 fhELambda0LocMaxN[iso]->SetYTitle("#lambda_{0}^{2}");
2467 fhELambda0LocMaxN[iso]->SetXTitle("#it{E} (GeV)");
2468 outputContainer->Add(fhELambda0LocMaxN[iso]) ;
2470 fhELambda1LocMaxN[iso] = new TH2F
2471 (Form("hELambda1LocMaxN%s",isoName[iso].Data()),
2472 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);
2473 fhELambda1LocMaxN[iso]->SetYTitle("#lambda_{1}^{2}");
2474 fhELambda1LocMaxN[iso]->SetXTitle("#it{E} (GeV)");
2475 outputContainer->Add(fhELambda1LocMaxN[iso]) ;
2478 } // control histograms for isolated and non isolated objects
2481 if(fFillPileUpHistograms)
2483 fhPtTrackInConeOtherBC = new TH2F("hPtTrackInConeOtherBC",
2484 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC!=0",r),
2485 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2486 fhPtTrackInConeOtherBC->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2487 fhPtTrackInConeOtherBC->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2488 outputContainer->Add(fhPtTrackInConeOtherBC) ;
2490 fhPtTrackInConeOtherBCPileUpSPD = new TH2F("hPtTrackInConeOtherBCPileUpSPD",
2491 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC!=0, pile-up from SPD",r),
2492 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2493 fhPtTrackInConeOtherBCPileUpSPD->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2494 fhPtTrackInConeOtherBCPileUpSPD->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2495 outputContainer->Add(fhPtTrackInConeOtherBCPileUpSPD) ;
2497 fhPtTrackInConeBC0 = new TH2F("hPtTrackInConeBC0",
2498 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC==0",r),
2499 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2500 fhPtTrackInConeBC0->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2501 fhPtTrackInConeBC0->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2502 outputContainer->Add(fhPtTrackInConeBC0) ;
2504 fhPtTrackInConeVtxBC0 = new TH2F("hPtTrackInConeVtxBC0",
2505 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC==0",r),
2506 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2507 fhPtTrackInConeVtxBC0->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2508 fhPtTrackInConeVtxBC0->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2509 outputContainer->Add(fhPtTrackInConeVtxBC0) ;
2512 fhPtTrackInConeBC0PileUpSPD = new TH2F("hPtTrackInConeBC0PileUpSPD",
2513 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC==0, pile-up from SPD",r),
2514 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2515 fhPtTrackInConeBC0PileUpSPD->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2516 fhPtTrackInConeBC0PileUpSPD->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2517 outputContainer->Add(fhPtTrackInConeBC0PileUpSPD) ;
2520 for (Int_t i = 0; i < 7 ; i++)
2522 fhPtInConePileUp[i] = new TH2F(Form("hPtInConePileUp%s",pileUpName[i].Data()),
2523 Form("#it{p}_{T} in isolation cone for #it{R} = %2.2f, from pile-up (%s)",r,pileUpName[i].Data()),
2524 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2525 fhPtInConePileUp[i]->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2526 fhPtInConePileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2527 outputContainer->Add(fhPtInConePileUp[i]) ;
2533 // For histograms in arrays, index in the array, corresponding to any particle origin
2535 for(Int_t imc = 0; imc < 9; imc++)
2538 fhPtNoIsoMC[imc] = new TH1F(Form("hPtNoIsoMC%s",mcPartName[imc].Data()),
2539 Form("#it{p}_{T} of NOT isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
2540 nptbins,ptmin,ptmax);
2541 fhPtNoIsoMC[imc]->SetYTitle("#it{counts}");
2542 fhPtNoIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2543 outputContainer->Add(fhPtNoIsoMC[imc]) ;
2545 fhPtIsoMC[imc] = new TH1F(Form("hPtMC%s",mcPartName[imc].Data()),
2546 Form("#it{p}_{T} of isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
2547 nptbins,ptmin,ptmax);
2548 fhPtIsoMC[imc]->SetYTitle("#it{counts}");
2549 fhPtIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2550 outputContainer->Add(fhPtIsoMC[imc]) ;
2552 fhPhiIsoMC[imc] = new TH2F(Form("hPhiMC%s",mcPartName[imc].Data()),
2553 Form("#phi vs #it{p}_{T} of isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
2554 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
2555 fhPhiIsoMC[imc]->SetYTitle("#phi");
2556 fhPhiIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2557 outputContainer->Add(fhPhiIsoMC[imc]) ;
2559 fhEtaIsoMC[imc] = new TH2F(Form("hEtaMC%s",mcPartName[imc].Data()),
2560 Form("#phi vs #it{p}_{T} of isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
2561 nptbins,ptmin,ptmax,netabins,etamin,etamax);
2562 fhEtaIsoMC[imc]->SetYTitle("#eta");
2563 fhEtaIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2564 outputContainer->Add(fhEtaIsoMC[imc]) ;
2567 for(Int_t i = 0; i < 6; i++)
2569 fhEPrimMC[i] = new TH1F(Form("hEPrim_MC%s",ppname[i].Data()),
2570 Form("primary photon %s : #it{E}, %s",pptype[i].Data(),parTitle.Data()),
2571 nptbins,ptmin,ptmax);
2572 fhEPrimMC[i]->SetXTitle("#it{E} (GeV)");
2573 outputContainer->Add(fhEPrimMC[i]) ;
2575 fhPtPrimMCiso[i] = new TH1F(Form("hPtPrim_MCiso%s",ppname[i].Data()),
2576 Form("primary isolated photon %s : #it{p}_{T}, %s",pptype[i].Data(),parTitle.Data()),
2577 nptbins,ptmin,ptmax);
2578 fhPtPrimMCiso[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2579 outputContainer->Add(fhPtPrimMCiso[i]) ;
2581 fhEtaPrimMC[i] = new TH2F(Form("hEtaPrim_MC%s",ppname[i].Data()),
2582 Form("primary photon %s : #eta vs #it{p}_{T}, %s",pptype[i].Data(),parTitle.Data()),
2583 nptbins,ptmin,ptmax,200,-2,2);
2584 fhEtaPrimMC[i]->SetYTitle("#eta");
2585 fhEtaPrimMC[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2586 outputContainer->Add(fhEtaPrimMC[i]) ;
2588 fhPhiPrimMC[i] = new TH2F(Form("hPhiPrim_MC%s",ppname[i].Data()),
2589 Form("primary photon %s : #phi vs #it{p}_{T}, %s",pptype[i].Data(),parTitle.Data()),
2590 nptbins,ptmin,ptmax,200,0.,TMath::TwoPi());
2591 fhPhiPrimMC[i]->SetYTitle("#phi");
2592 fhPhiPrimMC[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2593 outputContainer->Add(fhPhiPrimMC[i]) ;
2602 const Int_t buffersize = 255;
2603 char name[buffersize];
2604 char title[buffersize];
2605 for(Int_t icone = 0; icone<fNCones; icone++)
2607 // sum pt in cone vs. pt leading
2608 snprintf(name, buffersize,"hSumPtLeadingPt_Cone_%d",icone);
2609 snprintf(title, buffersize,"#Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
2610 fhSumPtLeadingPt[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2611 fhSumPtLeadingPt[icone] ->SetYTitle("#sum_{cone}#it{p}_{T} (GeV/#it{c})");//#Sigma #it{p}_{T}
2612 fhSumPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
2613 outputContainer->Add(fhSumPtLeadingPt[icone]) ;
2615 // pt in cone vs. pt leading
2616 snprintf(name, buffersize,"hPtLeadingPt_Cone_%d",icone);
2617 snprintf(title, buffersize,"#it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
2618 fhPtLeadingPt[icone] = new TH2F(name, title, nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2619 fhPtLeadingPt[icone] ->SetYTitle("#it{p}_{T}^{cone} (GeV/#it{c})");
2620 fhPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
2621 outputContainer->Add(fhPtLeadingPt[icone]) ;
2623 // sum pt in cone vs. pt leading in the forward region (for background subtraction studies)
2624 snprintf(name, buffersize,"hPerpSumPtLeadingPt_Cone_%d",icone);
2625 snprintf(title, buffersize,"#Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
2626 fhPerpSumPtLeadingPt[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2627 fhPerpSumPtLeadingPt[icone] ->SetYTitle("#sum_{cone}#it{p}_{T} (GeV/#it{c})");//#Sigma #it{p}_{T}
2628 fhPerpSumPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
2629 outputContainer->Add(fhPerpSumPtLeadingPt[icone]) ;
2631 // pt in cone vs. pt leading in the forward region (for background subtraction studies)
2632 snprintf(name, buffersize,"hPerpPtLeadingPt_Cone_%d",icone);
2633 snprintf(title, buffersize,"#it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
2634 fhPerpPtLeadingPt[icone] = new TH2F(name, title, nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2635 fhPerpPtLeadingPt[icone] ->SetYTitle("#it{p}_{T}^{cone} (GeV/#it{c})");
2636 fhPerpPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
2637 outputContainer->Add(fhPerpPtLeadingPt[icone]) ;
2641 for(Int_t imc = 0; imc < 9; imc++)
2643 snprintf(name , buffersize,"hPtSumMC%s_Cone_%d",mcPartName[imc].Data(),icone);
2644 snprintf(title, buffersize,"Candidate %s #it{p}_{T} vs cone #Sigma #it{p}_{T} for #it{R}=%2.2f",mcPartType[imc].Data(),fConeSizes[icone]);
2645 fhPtSumIsolatedMC[imc][icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2646 fhPtSumIsolatedMC[imc][icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2647 fhPtSumIsolatedMC[imc][icone]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2648 outputContainer->Add(fhPtSumIsolatedMC[imc][icone]) ;
2652 for(Int_t ipt = 0; ipt<fNPtThresFrac;ipt++)
2654 snprintf(name, buffersize,"hPtThres_Cone_%d_Pt%d",icone,ipt);
2655 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]);
2656 fhPtThresIsolated[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2657 fhPtThresIsolated[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2658 outputContainer->Add(fhPtThresIsolated[icone][ipt]) ;
2660 snprintf(name, buffersize,"hPtFrac_Cone_%d_Pt%d",icone,ipt);
2661 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]);
2662 fhPtFracIsolated[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2663 fhPtFracIsolated[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2664 outputContainer->Add(fhPtFracIsolated[icone][ipt]) ;
2667 snprintf(name, buffersize,"hPtSum_Cone_%d_Pt%d",icone,ipt);
2668 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]);
2669 fhPtSumIsolated[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2670 // fhPtSumIsolated[icone][ipt]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2671 fhPtSumIsolated[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2672 outputContainer->Add(fhPtSumIsolated[icone][ipt]) ;
2674 snprintf(name, buffersize,"hPtSumDensity_Cone_%d_Pt%d",icone,ipt);
2675 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]);
2676 fhPtSumDensityIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2677 //fhPtSumIsolated[icone][ipt]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2678 fhPtSumDensityIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2679 outputContainer->Add(fhPtSumDensityIso[icone][ipt]) ;
2681 snprintf(name, buffersize,"hPtFracPtSum_Cone_%d_Pt%d",icone,ipt);
2682 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]);
2683 fhPtFracPtSumIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2684 //fhPtSumIsolated[icone][ipt]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2685 fhPtFracPtSumIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2686 outputContainer->Add(fhPtFracPtSumIso[icone][ipt]) ;
2688 // pt decays isolated
2689 snprintf(name, buffersize,"hPtThres_Decay_Cone_%d_Pt%d",icone,ipt);
2690 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]);
2691 fhPtPtThresDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2692 fhPtPtThresDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2693 outputContainer->Add(fhPtPtThresDecayIso[icone][ipt]) ;
2695 snprintf(name, buffersize,"hPtFrac_Decay_Cone_%d_Pt%d",icone,ipt);
2696 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]);
2697 fhPtPtFracDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2698 fhPtPtFracDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2699 outputContainer->Add(fhPtPtFracDecayIso[icone][ipt]) ;
2701 snprintf(name, buffersize,"hPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
2702 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]);
2703 fhPtPtSumDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2704 // fhPtPtSumDecayIso[icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2705 fhPtPtSumDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2706 outputContainer->Add(fhPtPtSumDecayIso[icone][ipt]) ;
2708 snprintf(name, buffersize,"hPtSumDensity_Decay_Cone_%d_Pt%d",icone,ipt);
2709 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]);
2710 fhPtSumDensityDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2711 // fhPtPtSumDecayIso[icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2712 fhPtSumDensityDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2713 outputContainer->Add(fhPtSumDensityDecayIso[icone][ipt]) ;
2715 snprintf(name, buffersize,"hPtFracPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
2716 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]);
2717 fhPtFracPtSumDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2718 // fhPtPtSumDecayIso[icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2719 fhPtFracPtSumDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2720 outputContainer->Add(fhPtFracPtSumDecayIso[icone][ipt]) ;
2724 snprintf(name, buffersize,"hEtaPhiPtThres_Cone_%d_Pt%d",icone,ipt);
2725 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]);
2726 fhEtaPhiPtThresIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2727 fhEtaPhiPtThresIso[icone][ipt]->SetXTitle("#eta");
2728 fhEtaPhiPtThresIso[icone][ipt]->SetYTitle("#phi");
2729 outputContainer->Add(fhEtaPhiPtThresIso[icone][ipt]) ;
2731 snprintf(name, buffersize,"hEtaPhiPtFrac_Cone_%d_Pt%d",icone,ipt);
2732 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]);
2733 fhEtaPhiPtFracIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2734 fhEtaPhiPtFracIso[icone][ipt]->SetXTitle("#eta");
2735 fhEtaPhiPtFracIso[icone][ipt]->SetYTitle("#phi");
2736 outputContainer->Add(fhEtaPhiPtFracIso[icone][ipt]) ;
2738 snprintf(name, buffersize,"hEtaPhiPtSum_Cone_%d_Pt%d",icone,ipt);
2739 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]);
2740 fhEtaPhiPtSumIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2741 fhEtaPhiPtSumIso[icone][ipt]->SetXTitle("#eta");
2742 fhEtaPhiPtSumIso[icone][ipt]->SetYTitle("#phi");
2743 outputContainer->Add(fhEtaPhiPtSumIso[icone][ipt]) ;
2745 snprintf(name, buffersize,"hEtaPhiSumDensity_Cone_%d_Pt%d",icone,ipt);
2746 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]);
2747 fhEtaPhiSumDensityIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2748 fhEtaPhiSumDensityIso[icone][ipt]->SetXTitle("#eta");
2749 fhEtaPhiSumDensityIso[icone][ipt]->SetYTitle("#phi");
2750 outputContainer->Add(fhEtaPhiSumDensityIso[icone][ipt]) ;
2752 snprintf(name, buffersize,"hEtaPhiFracPtSum_Cone_%d_Pt%d",icone,ipt);
2753 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]);
2754 fhEtaPhiFracPtSumIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2755 fhEtaPhiFracPtSumIso[icone][ipt]->SetXTitle("#eta");
2756 fhEtaPhiFracPtSumIso[icone][ipt]->SetYTitle("#phi");
2757 outputContainer->Add(fhEtaPhiFracPtSumIso[icone][ipt]) ;
2760 snprintf(name, buffersize,"hEtaPhiPtThres_Decay_Cone_%d_Pt%d",icone,ipt);
2761 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]);
2762 fhEtaPhiPtThresDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2763 fhEtaPhiPtThresDecayIso[icone][ipt]->SetXTitle("#eta");
2764 fhEtaPhiPtThresDecayIso[icone][ipt]->SetYTitle("#phi");
2765 outputContainer->Add(fhEtaPhiPtThresDecayIso[icone][ipt]) ;
2767 snprintf(name, buffersize,"hEtaPhiPtFrac_Decay_Cone_%d_Pt%d",icone,ipt);
2768 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]);
2769 fhEtaPhiPtFracDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2770 fhEtaPhiPtFracDecayIso[icone][ipt]->SetXTitle("#eta");
2771 fhEtaPhiPtFracDecayIso[icone][ipt]->SetYTitle("#phi");
2772 outputContainer->Add(fhEtaPhiPtFracDecayIso[icone][ipt]) ;
2775 snprintf(name, buffersize,"hEtaPhiPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
2776 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]);
2777 fhEtaPhiPtSumDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2778 fhEtaPhiPtSumDecayIso[icone][ipt]->SetXTitle("#eta");
2779 fhEtaPhiPtSumDecayIso[icone][ipt]->SetYTitle("#phi");
2780 outputContainer->Add(fhEtaPhiPtSumDecayIso[icone][ipt]) ;
2782 snprintf(name, buffersize,"hEtaPhiSumDensity_Decay_Cone_%d_Pt%d",icone,ipt);
2783 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]);
2784 fhEtaPhiSumDensityDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2785 fhEtaPhiSumDensityDecayIso[icone][ipt]->SetXTitle("#eta");
2786 fhEtaPhiSumDensityDecayIso[icone][ipt]->SetYTitle("#phi");
2787 outputContainer->Add(fhEtaPhiSumDensityDecayIso[icone][ipt]) ;
2789 snprintf(name, buffersize,"hEtaPhiFracPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
2790 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]);
2791 fhEtaPhiFracPtSumDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2792 fhEtaPhiFracPtSumDecayIso[icone][ipt]->SetXTitle("#eta");
2793 fhEtaPhiFracPtSumDecayIso[icone][ipt]->SetYTitle("#phi");
2794 outputContainer->Add(fhEtaPhiFracPtSumDecayIso[icone][ipt]) ;
2799 for(Int_t imc = 0; imc < 9; imc++)
2801 snprintf(name , buffersize,"hPtThreshMC%s_Cone_%d_Pt%d",mcPartName[imc].Data(),icone,ipt);
2802 snprintf(title, buffersize,"Isolated %s #it{p}_{T} for #it{R}=%2.2f and #it{p}_{T}^{th}=%2.2f",
2803 mcPartType[imc].Data(),fConeSizes[icone], fPtThresholds[ipt]);
2804 fhPtThresIsolatedMC[imc][icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2805 fhPtThresIsolatedMC[imc][icone][ipt]->SetYTitle("#it{counts}");
2806 fhPtThresIsolatedMC[imc][icone][ipt]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2807 outputContainer->Add(fhPtThresIsolatedMC[imc][icone][ipt]) ;
2810 snprintf(name , buffersize,"hPtFracMC%s_Cone_%d_Pt%d",mcPartName[imc].Data(),icone,ipt);
2811 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",
2812 mcPartType[imc].Data(),fConeSizes[icone], fPtFractions[ipt]);
2813 fhPtFracIsolatedMC[imc][icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2814 fhPtFracIsolatedMC[imc][icone][ipt]->SetYTitle("#it{counts}");
2815 fhPtFracIsolatedMC[imc][icone][ipt]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2816 outputContainer->Add(fhPtFracIsolatedMC[imc][icone][ipt]) ;
2823 if(fFillPileUpHistograms)
2825 for (Int_t i = 0; i < 7 ; i++)
2827 fhEIsoPileUp[i] = new TH1F(Form("hEPileUp%s",pileUpName[i].Data()),
2828 Form("Number of isolated particles vs E, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
2829 nptbins,ptmin,ptmax);
2830 fhEIsoPileUp[i]->SetYTitle("d#it{N} / d#it{E}");
2831 fhEIsoPileUp[i]->SetXTitle("#it{E} (GeV)");
2832 outputContainer->Add(fhEIsoPileUp[i]) ;
2834 fhPtIsoPileUp[i] = new TH1F(Form("hPtPileUp%s",pileUpName[i].Data()),
2835 Form("Number of isolated particles vs #it{p}_{T}, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
2836 nptbins,ptmin,ptmax);
2837 fhPtIsoPileUp[i]->SetYTitle("d#it{N} / #it{p}_{T}");
2838 fhPtIsoPileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2839 outputContainer->Add(fhPtIsoPileUp[i]) ;
2841 fhENoIsoPileUp[i] = new TH1F(Form("hENoIsoPileUp%s",pileUpName[i].Data()),
2842 Form("Number of not isolated particles vs E, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
2843 nptbins,ptmin,ptmax);
2844 fhENoIsoPileUp[i]->SetYTitle("d#it{N} / dE");
2845 fhENoIsoPileUp[i]->SetXTitle("#it{E} (GeV)");
2846 outputContainer->Add(fhENoIsoPileUp[i]) ;
2848 fhPtNoIsoPileUp[i] = new TH1F(Form("hPtNoIsoPileUp%s",pileUpName[i].Data()),
2849 Form("Number of not isolated particles vs #it{p}_{T}, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
2850 nptbins,ptmin,ptmax);
2851 fhPtNoIsoPileUp[i]->SetYTitle("d#it{N} / #it{p}_{T}");
2852 fhPtNoIsoPileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2853 outputContainer->Add(fhPtNoIsoPileUp[i]) ;
2856 fhTimeENoCut = new TH2F ("hTimeE_NoCut","time of cluster vs E of clusters, no cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
2857 fhTimeENoCut->SetXTitle("#it{E} (GeV)");
2858 fhTimeENoCut->SetYTitle("#it{time} (ns)");
2859 outputContainer->Add(fhTimeENoCut);
2861 fhTimeESPD = new TH2F ("hTimeE_SPD","time of cluster vs E of clusters, SPD cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
2862 fhTimeESPD->SetXTitle("#it{E} (GeV)");
2863 fhTimeESPD->SetYTitle("#it{time} (ns)");
2864 outputContainer->Add(fhTimeESPD);
2866 fhTimeESPDMulti = new TH2F ("hTimeE_SPDMulti","time of cluster vs E of clusters, SPD multi cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
2867 fhTimeESPDMulti->SetXTitle("#it{E} (GeV)");
2868 fhTimeESPDMulti->SetYTitle("#it{time} (ns)");
2869 outputContainer->Add(fhTimeESPDMulti);
2871 fhTimeNPileUpVertSPD = new TH2F ("hTime_NPileUpVertSPD","time of cluster vs N pile-up SPD vertex", ntimebins,timemin,timemax,50,0,50);
2872 fhTimeNPileUpVertSPD->SetYTitle("# vertex ");
2873 fhTimeNPileUpVertSPD->SetXTitle("#it{time} (ns)");
2874 outputContainer->Add(fhTimeNPileUpVertSPD);
2876 fhTimeNPileUpVertTrack = new TH2F ("hTime_NPileUpVertTracks","time of cluster vs N pile-up Tracks vertex", ntimebins,timemin,timemax, 50,0,50 );
2877 fhTimeNPileUpVertTrack->SetYTitle("# vertex ");
2878 fhTimeNPileUpVertTrack->SetXTitle("#it{time} (ns)");
2879 outputContainer->Add(fhTimeNPileUpVertTrack);
2881 fhTimeNPileUpVertContributors = new TH2F ("hTime_NPileUpVertContributors","time of cluster vs N constributors to pile-up SPD vertex", ntimebins,timemin,timemax,50,0,50);
2882 fhTimeNPileUpVertContributors->SetYTitle("# vertex ");
2883 fhTimeNPileUpVertContributors->SetXTitle("#it{time} (ns)");
2884 outputContainer->Add(fhTimeNPileUpVertContributors);
2886 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);
2887 fhTimePileUpMainVertexZDistance->SetYTitle("distance #it{z} (cm) ");
2888 fhTimePileUpMainVertexZDistance->SetXTitle("#it{time} (ns)");
2889 outputContainer->Add(fhTimePileUpMainVertexZDistance);
2891 fhTimePileUpMainVertexZDiamond = new TH2F ("hTime_PileUpMainVertexZDiamond","time of cluster vs distance in Z pile-up SPD vertex - z diamond",ntimebins,timemin,timemax,100,0,50);
2892 fhTimePileUpMainVertexZDiamond->SetYTitle("diamond distance #it{z} (cm) ");
2893 fhTimePileUpMainVertexZDiamond->SetXTitle("#it{time} (ns)");
2894 outputContainer->Add(fhTimePileUpMainVertexZDiamond);
2897 return outputContainer ;
2901 //____________________________________________________
2902 Int_t AliAnaParticleIsolation::GetMCIndex(Int_t mcTag)
2904 // Histogram index depending on origin of candidate
2906 if(!IsDataMC()) return -1;
2908 if (GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPrompt))
2912 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCFragmentation))
2916 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0))
2920 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0Decay))
2924 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEtaDecay))
2928 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCOtherDecay))
2930 return kmcOtherDecay;
2932 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron))
2936 else // anything else
2938 // careful can contain also other decays, to be checked.
2943 //__________________________________
2944 void AliAnaParticleIsolation::Init()
2946 // Do some checks and init stuff
2948 // In case of several cone and thresholds analysis, open the cuts for the filling of the
2949 // track and cluster reference arrays in cone when done in the MakeAnalysisFillAOD().
2950 // The different cones, thresholds are tested for this list of tracks, clusters.
2953 printf("AliAnaParticleIsolation::Init() - Open default isolation cuts for multiple Isolation analysis\n");
2954 GetIsolationCut()->SetPtThreshold(100);
2955 GetIsolationCut()->SetPtFraction(100);
2956 GetIsolationCut()->SetConeSize(1);
2959 if(!GetReader()->IsCTSSwitchedOn() && GetIsolationCut()->GetParticleTypeInCone()!=AliIsolationCut::kOnlyNeutral)
2960 AliFatal("STOP!: You want to use CTS tracks in analysis but not read!! \n!!Check the configuration file!!\n");
2965 //____________________________________________
2966 void AliAnaParticleIsolation::InitParameters()
2969 //Initialize the parameters of the analysis.
2970 SetInputAODName("PWG4Particle");
2971 SetAODObjArrayName("IsolationCone");
2972 AddToHistogramsName("AnaIsolation_");
2974 fCalorimeter = "EMCAL" ;
2975 fIsoDetector = "EMCAL" ;
2977 fReMakeIC = kFALSE ;
2978 fMakeSeveralIC = kFALSE ;
2980 //----------- Several IC-----------------
2983 fConeSizes [0] = 0.1; fConeSizes [1] = 0.2; fConeSizes [2] = 0.3; fConeSizes [3] = 0.4; fConeSizes [4] = 0.5;
2984 fPtThresholds [0] = 1.; fPtThresholds [1] = 2.; fPtThresholds [2] = 3.; fPtThresholds [3] = 4.; fPtThresholds [4] = 5.;
2985 fPtFractions [0] = 0.05; fPtFractions [1] = 0.075; fPtFractions [2] = 0.1; fPtFractions [3] = 1.25; fPtFractions [4] = 1.5;
2986 fSumPtThresholds[0] = 1.; fSumPtThresholds[1] = 2.; fSumPtThresholds[2] = 3.; fSumPtThresholds[3] = 4.; fSumPtThresholds[4] = 5.;
2988 //------------- Histograms settings -------
2989 fHistoNPtSumBins = 100 ;
2990 fHistoPtSumMax = 50 ;
2991 fHistoPtSumMin = 0. ;
2993 fHistoNPtInConeBins = 100 ;
2994 fHistoPtInConeMax = 50 ;
2995 fHistoPtInConeMin = 0. ;
2999 //__________________________________________________
3000 void AliAnaParticleIsolation::MakeAnalysisFillAOD()
3002 //Do analysis and fill aods
3003 //Search for the isolated photon in fCalorimeter with pt > GetMinPt()
3005 if(!GetInputAODBranch())
3006 AliFatal(Form("No input particles in AOD with name branch < %s >, STOP",GetInputAODName().Data()));
3009 if(strcmp(GetInputAODBranch()->GetClass()->GetName(), "AliAODPWG4ParticleCorrelation"))
3010 AliFatal(Form("Wrong type of AOD object, change AOD class name in input AOD: It should be <AliAODPWG4ParticleCorrelation> and not <%s> \n",GetInputAODBranch()->GetClass()->GetName()));
3012 Int_t n = 0, nfrac = 0;
3013 Bool_t isolated = kFALSE ;
3014 Float_t coneptsum = 0 ;
3015 TObjArray * pl = 0x0; ;
3017 //Select the calorimeter for candidate isolation with neutral particles
3018 if (fCalorimeter == "PHOS" )
3019 pl = GetPHOSClusters();
3020 else if (fCalorimeter == "EMCAL")
3021 pl = GetEMCALClusters();
3023 //Loop on AOD branch, filled previously in AliAnaPhoton, find leading particle to do isolation only with it
3024 Double_t ptLeading = 0. ;
3025 Int_t idLeading = -1 ;
3026 TLorentzVector mom ;
3027 Int_t naod = GetInputAODBranch()->GetEntriesFast();
3028 if(GetDebug() > 0) printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - Input aod branch entries %d\n", naod);
3030 for(Int_t iaod = 0; iaod < naod; iaod++)
3032 AliAODPWG4ParticleCorrelation * aodinput = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
3034 //If too small or too large pt, skip
3035 if(aodinput->Pt() < GetMinPt() || aodinput->Pt() > GetMaxPt() ) continue ;
3037 //check if it is low pt trigger particle
3038 if((aodinput->Pt() < GetIsolationCut()->GetPtThreshold() ||
3039 aodinput->Pt() < GetIsolationCut()->GetSumPtThreshold()) &&
3042 continue ; //trigger should not come from underlying event
3045 //vertex cut in case of mixing
3046 Int_t check = CheckMixedEventVertex(aodinput->GetCaloLabel(0), aodinput->GetTrackLabel(0));
3047 if(check == 0) continue;
3048 if(check == -1) return;
3050 //find the leading particles with highest momentum
3051 if ( aodinput->Pt() > ptLeading )
3053 ptLeading = aodinput->Pt() ;
3057 aodinput->SetLeadingParticle(kFALSE);
3059 }//finish searching for leading trigger particle
3061 // Check isolation of leading particle
3062 if(idLeading < 0) return;
3064 AliAODPWG4ParticleCorrelation * aodinput = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(idLeading));
3065 aodinput->SetLeadingParticle(kTRUE);
3067 // Check isolation only of clusters in fiducial region
3068 if(IsFiducialCutOn())
3070 Bool_t in = GetFiducialCut()->IsInFiducialCut(*aodinput->Momentum(),aodinput->GetDetector()) ;
3074 //After cuts, study isolation
3075 n=0; nfrac = 0; isolated = kFALSE; coneptsum = 0;
3076 GetIsolationCut()->MakeIsolationCut(GetCTSTracks(),pl,
3077 GetReader(), GetCaloPID(),
3078 kTRUE, aodinput, GetAODObjArrayName(),
3079 n,nfrac,coneptsum, isolated);
3081 if(!fMakeSeveralIC) aodinput->SetIsolated(isolated);
3085 if(isolated)printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() : Particle %d IS ISOLATED \n",idLeading);
3086 printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - End fill AODs \n");
3091 //_________________________________________________________
3092 void AliAnaParticleIsolation::MakeAnalysisFillHistograms()
3094 //Do analysis and fill histograms
3096 //In case of simulated data, fill acceptance histograms
3097 if(IsDataMC()) FillAcceptanceHistograms();
3099 //Loop on stored AOD
3100 Int_t naod = GetInputAODBranch()->GetEntriesFast();
3101 if(GetDebug() > 0) printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Histo aod branch entries %d\n", naod);
3103 for(Int_t iaod = 0; iaod < naod ; iaod++)
3105 AliAODPWG4ParticleCorrelation* aod = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
3107 if(!aod->IsLeadingParticle()) continue; // Try to isolate only leading cluster or track
3109 // Check isolation only of clusters in fiducial region
3110 if(IsFiducialCutOn())
3112 Bool_t in = GetFiducialCut()->IsInFiducialCut(*aod->Momentum(),aod->GetDetector()) ;
3113 if(! in ) continue ;
3116 Float_t pt = aod->Pt();
3118 //If too small or too large pt, skip
3119 if(pt < GetMinPt() || pt > GetMaxPt() ) continue ;
3121 Int_t mcTag = aod->GetTag() ;
3122 Int_t mcIndex = GetMCIndex(mcTag);
3124 // --- In case of redoing isolation from delta AOD ----
3125 // Not standard case, not used since its implementation
3128 //Analysis of multiple IC at same time
3129 MakeSeveralICAnalysis(aod,mcIndex);
3133 // --- In case of redoing isolation multiple cuts ----
3137 //In case a more strict IC is needed in the produced AOD
3138 Bool_t isolated = kFALSE;
3139 Int_t n = 0, nfrac = 0;
3140 Float_t coneptsum = 0 ;
3142 //Recover reference arrays with clusters and tracks
3143 TObjArray * refclusters = aod->GetObjArray(GetAODObjArrayName()+"Clusters");
3144 TObjArray * reftracks = aod->GetObjArray(GetAODObjArrayName()+"Tracks");
3146 GetIsolationCut()->MakeIsolationCut(reftracks, refclusters,
3147 GetReader(), GetCaloPID(),
3149 n,nfrac,coneptsum, isolated);
3152 Bool_t isolated = aod->IsIsolated();
3153 Bool_t decay = aod->IsTagged();
3154 Float_t energy = aod->E();
3155 Float_t phi = aod->Phi();
3156 Float_t eta = aod->Eta();
3158 if(GetDebug() > 0) printf(" AliAnaParticleIsolation::MakeAnalysisFillHistograms() - pt %1.1f, eta %1.1f, phi %1.1f, Isolated %d\n",
3159 pt, eta, phi, isolated);
3161 //---------------------------------------------------------------
3162 // Fill Shower shape and track matching histograms
3163 //---------------------------------------------------------------
3165 FillTrackMatchingShowerShapeControlHistograms(aod,mcIndex);
3167 //---------------------------------------------------------------
3168 // Fill pt/sum pT distribution of particles in cone or in UE band
3169 //---------------------------------------------------------------
3171 Float_t coneptsumCluster = 0;
3172 Float_t coneptsumTrack = 0;
3173 Float_t coneptsumCell = 0;
3174 Float_t etaBandptsumClusterNorm = 0;
3175 Float_t etaBandptsumTrackNorm = 0;
3177 CalculateTrackSignalInCone (aod,coneptsumTrack );
3178 CalculateCaloSignalInCone (aod,coneptsumCluster);
3179 if(fFillCellHistograms)
3180 CalculateCaloCellSignalInCone(aod,coneptsumCell );
3182 if(GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kNeutralAndCharged)
3184 fhConeSumPtClustervsTrack ->Fill(coneptsumCluster,coneptsumTrack);
3185 if(fFillCellHistograms)
3187 fhConeSumPtCellvsTrack ->Fill(coneptsumCell, coneptsumTrack);
3188 fhConeSumPtCellTrack ->Fill(pt, coneptsumTrack+coneptsumCell);
3189 fhConeSumPtCellTrackTrigEtaPhi->Fill(eta,phi,coneptsumTrack+coneptsumCell);
3193 fhConeSumPt ->Fill(pt, coneptsumTrack+coneptsumCluster);
3194 fhConeSumPtTrigEtaPhi ->Fill(eta,phi,coneptsumTrack+coneptsumCluster);
3197 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d Energy Sum in Isolation Cone %2.2f\n", iaod, coneptsumTrack+coneptsumCluster);
3199 //normalize phi/eta band per area unit
3200 if(fFillUEBandSubtractHistograms)
3201 CalculateNormalizeUEBandPerUnitArea(aod, coneptsumCluster, coneptsumCell, coneptsumTrack, etaBandptsumTrackNorm, etaBandptsumClusterNorm) ;
3203 // printf("Histograms analysis : cluster pt = %f, etaBandTrack = %f, etaBandCluster = %f, isolation = %d\n",aod->Pt(),etaBandptsumTrackNorm,etaBandptsumClusterNorm,aod->IsIsolated());
3206 //---------------------------------------------------------------
3207 // Isolated/ Non isolated histograms
3208 //---------------------------------------------------------------
3212 if(GetDebug() > 1) printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d ISOLATED: fill histograms\n", iaod);
3214 // Fill histograms to undertand pile-up before other cuts applied
3215 // Remember to relax time cuts in the reader
3216 FillPileUpHistograms(aod->GetCaloLabel(0));
3218 fhEIso ->Fill(energy);
3220 fhPhiIso ->Fill(pt,phi);
3221 fhEtaIso ->Fill(pt,eta);
3222 fhEtaPhiIso ->Fill(eta,phi);
3224 if(fFillNLMHistograms) fhPtNLocMaxIso ->Fill(pt,aod->GetFiducialArea()) ;
3226 if(fFillHighMultHistograms)
3228 fhPtCentralityIso ->Fill(pt,GetEventCentrality()) ;
3229 fhPtEventPlaneIso ->Fill(pt,GetEventPlaneAngle() ) ;
3232 if(decay && fFillTaggedDecayHistograms)
3234 fhPtDecayIso ->Fill(pt);
3235 fhEtaPhiDecayIso->Fill(eta,phi);
3238 if(fFillPileUpHistograms)
3240 if(GetReader()->IsPileUpFromSPD()) { fhEIsoPileUp[0] ->Fill(energy) ; fhPtIsoPileUp[0]->Fill(pt) ; }
3241 if(GetReader()->IsPileUpFromEMCal()) { fhEIsoPileUp[1] ->Fill(energy) ; fhPtIsoPileUp[1]->Fill(pt) ; }
3242 if(GetReader()->IsPileUpFromSPDOrEMCal()) { fhEIsoPileUp[2] ->Fill(energy) ; fhPtIsoPileUp[2]->Fill(pt) ; }
3243 if(GetReader()->IsPileUpFromSPDAndEMCal()) { fhEIsoPileUp[3] ->Fill(energy) ; fhPtIsoPileUp[3]->Fill(pt) ; }
3244 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) { fhEIsoPileUp[4] ->Fill(energy) ; fhPtIsoPileUp[4]->Fill(pt) ; }
3245 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) { fhEIsoPileUp[5] ->Fill(energy) ; fhPtIsoPileUp[5]->Fill(pt) ; }
3246 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhEIsoPileUp[6] ->Fill(energy) ; fhPtIsoPileUp[6]->Fill(pt) ; }
3251 // For histograms in arrays, index in the array, corresponding to any particle origin
3252 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
3254 fhPtIsoMC [kmcPhoton]->Fill(pt);
3255 fhPhiIsoMC[kmcPhoton]->Fill(pt,phi);
3256 fhEtaIsoMC[kmcPhoton]->Fill(pt,eta);
3259 fhPtIsoMC [mcIndex]->Fill(pt);
3260 fhPhiIsoMC[mcIndex]->Fill(pt,phi);
3261 fhEtaIsoMC[mcIndex]->Fill(pt,eta);
3262 }//Histograms with MC
3264 }//Isolated histograms
3265 else // NON isolated
3267 if(GetDebug() > 1) printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d NOT ISOLATED, fill histograms\n", iaod);
3269 fhENoIso ->Fill(energy);
3270 fhPtNoIso ->Fill(pt);
3271 fhEtaPhiNoIso ->Fill(eta,phi);
3273 if(fFillNLMHistograms) fhPtNLocMaxNoIso->Fill(pt,aod->GetFiducialArea());
3275 if(fFillPileUpHistograms)
3277 if(GetReader()->IsPileUpFromSPD()) { fhENoIsoPileUp[0] ->Fill(energy) ; fhPtNoIsoPileUp[0]->Fill(pt) ; }
3278 if(GetReader()->IsPileUpFromEMCal()) { fhENoIsoPileUp[1] ->Fill(energy) ; fhPtNoIsoPileUp[1]->Fill(pt) ; }
3279 if(GetReader()->IsPileUpFromSPDOrEMCal()) { fhENoIsoPileUp[2] ->Fill(energy) ; fhPtNoIsoPileUp[2]->Fill(pt) ; }
3280 if(GetReader()->IsPileUpFromSPDAndEMCal()) { fhENoIsoPileUp[3] ->Fill(energy) ; fhPtNoIsoPileUp[3]->Fill(pt) ; }
3281 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) { fhENoIsoPileUp[4] ->Fill(energy) ; fhPtNoIsoPileUp[4]->Fill(pt) ; }
3282 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) { fhENoIsoPileUp[5] ->Fill(energy) ; fhPtNoIsoPileUp[5]->Fill(pt) ; }
3283 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhENoIsoPileUp[6] ->Fill(energy) ; fhPtNoIsoPileUp[6]->Fill(pt) ; }
3286 if(decay && fFillTaggedDecayHistograms)
3288 fhPtDecayNoIso ->Fill(pt);
3289 fhEtaPhiDecayNoIso->Fill(eta,phi);
3294 if( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton) )
3295 fhPtNoIsoMC[kmcPhoton]->Fill(pt);
3297 fhPtNoIsoMC[mcIndex]->Fill(pt);
3304 //______________________________________________________________________
3305 void AliAnaParticleIsolation::FillAcceptanceHistograms()
3307 // Fill acceptance histograms if MC data is available
3308 // Only when particle is in the calorimeter. Rethink if CTS is used.
3310 //Double_t photonY = -100 ;
3311 Double_t photonE = -1 ;
3312 Double_t photonPt = -1 ;
3313 Double_t photonPhi = 100 ;
3314 Double_t photonEta = -1 ;
3322 TParticle * primStack = 0;
3323 AliAODMCParticle * primAOD = 0;
3326 // Get the ESD MC particles container
3327 AliStack * stack = 0;
3328 if( GetReader()->ReadStack() )
3330 stack = GetMCStack();
3332 nprim = stack->GetNtrack();
3335 // Get the AOD MC particles container
3336 TClonesArray * mcparticles = 0;
3337 if( GetReader()->ReadAODMCParticles() )
3339 mcparticles = GetReader()->GetAODMCParticles();
3340 if( !mcparticles ) return;
3341 nprim = mcparticles->GetEntriesFast();
3344 for(Int_t i=0 ; i < nprim; i++)
3346 if(GetReader()->AcceptOnlyHIJINGLabels() && !GetReader()->IsHIJINGLabel(i)) continue ;
3348 if(GetReader()->ReadStack())
3350 primStack = stack->Particle(i) ;
3351 pdg = primStack->GetPdgCode();
3352 status = primStack->GetStatusCode();
3354 if(primStack->Energy() == TMath::Abs(primStack->Pz())) continue ; //Protection against floating point exception
3356 //printf("i %d, %s %d %s %d \n",i, stack->Particle(i)->GetName(), stack->Particle(i)->GetPdgCode(),
3357 // prim->GetName(), prim->GetPdgCode());
3359 //photonY = 0.5*TMath::Log((prim->Energy()-prim->Pz())/(prim->Energy()+prim->Pz())) ;
3362 primStack->Momentum(lv);
3367 primAOD = (AliAODMCParticle *) mcparticles->At(i);
3368 pdg = primAOD->GetPdgCode();
3369 status = primAOD->GetStatus();
3371 if(primAOD->E() == TMath::Abs(primAOD->Pz())) continue ; //Protection against floating point exception
3373 //photonY = 0.5*TMath::Log((prim->Energy()-prim->Pz())/(prim->Energy()+prim->Pz())) ;
3376 lv.SetPxPyPzE(primAOD->Px(),primAOD->Py(),primAOD->Pz(),primAOD->E());
3379 // Select only photons in the final state
3380 if(pdg != 22 ) continue ;
3382 // Consider only final state particles, but this depends on generator,
3383 // status 1 is the usual one, in case of not being ok, leave the possibility
3384 // to not consider this.
3385 if(status != 1 && GetMCAnalysisUtils()->GetMCGenerator()!="" ) continue ;
3387 // If too small or too large pt, skip, same cut as for data analysis
3388 photonPt = lv.Pt () ;
3390 if(photonPt < GetMinPt() || photonPt > GetMaxPt() ) continue ;
3393 photonEta = lv.Eta() ;
3394 photonPhi = lv.Phi() ;
3396 if(photonPhi < 0) photonPhi+=TMath::TwoPi();
3398 // Check if photons hit the Calorimeter acceptance
3399 if(IsRealCaloAcceptanceOn() && fIsoDetector!="CTS") // defined on base class
3401 if(GetReader()->ReadStack() &&
3402 !GetCaloUtils()->IsMCParticleInCalorimeterAcceptance(fIsoDetector, primStack)) continue ;
3403 if(GetReader()->ReadAODMCParticles() &&
3404 !GetCaloUtils()->IsMCParticleInCalorimeterAcceptance(fIsoDetector, primAOD )) continue ;
3407 // Check same fidutial borders as in data analysis on top of real acceptance if real was requested.
3408 if(!GetFiducialCut()->IsInFiducialCut(lv,fIsoDetector)) continue ;
3410 // Get tag of this particle photon from fragmentation, decay, prompt ...
3411 // Set the origin of the photon.
3412 tag = GetMCAnalysisUtils()->CheckOrigin(i,GetReader());
3414 if(!GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
3416 // A conversion photon from a hadron, skip this kind of photon
3417 // printf("AliAnaPhoton::FillAcceptanceHistograms() - not a photon, weird!\n ");
3418 // GetMCAnalysisUtils()->PrintMCTag(tag);
3424 if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPrompt) )
3426 mcIndex = kmcPrimPrompt;
3428 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCFragmentation) )
3430 mcIndex = kmcPrimFrag ;
3432 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCISR))
3434 mcIndex = kmcPrimISR;
3436 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0Decay))
3438 mcIndex = kmcPrimPi0Decay;
3440 else if( (GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEtaDecay) ||
3441 GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCOtherDecay)))
3443 mcIndex = kmcPrimOtherDecay;
3447 // Other decay but from non final state particle
3448 mcIndex = kmcPrimOtherDecay;
3451 // ////////////////////ISO MC/////////////////////////
3452 Double_t sumPtInCone = 0; Double_t dR=0. ;
3453 TParticle * mcisopStack = 0;
3454 AliAODMCParticle * mcisopAOD = 0;
3455 Int_t partInConeStatus = -1, partInConeMother = -1;
3456 Double_t partInConePt = 0, partInConeEta = 0, partInConePhi = 0;
3458 for(Int_t ip = 0; ip < nprim ; ip++)
3462 if( GetReader()->ReadStack() )
3464 mcisopStack = static_cast<TParticle*>(stack->Particle(ip));
3465 if( !mcisopStack ) continue;
3466 partInConeStatus = mcisopStack->GetStatusCode();
3467 partInConeMother = mcisopStack->GetMother(0);
3468 partInConePt = mcisopStack->Pt();
3469 partInConeEta = mcisopStack->Eta();
3470 partInConePhi = mcisopStack->Phi();
3474 mcisopAOD = (AliAODMCParticle *) mcparticles->At(ip);
3475 if( !mcisopAOD ) continue;
3476 partInConeStatus = mcisopAOD->GetStatus();
3477 partInConeMother = mcisopAOD->GetMother();
3478 partInConePt = mcisopAOD->Pt();
3479 partInConeEta = mcisopAOD->Eta();
3480 partInConePhi = mcisopAOD->Phi();
3483 // Consider only final state particles, but this depends on generator,
3484 // status 1 is the usual one, in case of not being ok, leave the possibility
3485 // to not consider this.
3486 if( partInConeStatus != 1 && GetMCAnalysisUtils()->GetMCGenerator()!="" ) continue ;
3488 if( partInConeMother == i ) continue;
3490 if( partInConePt < GetReader()->GetCTSPtMin() ) continue;
3491 // Careful!!!, cut for TPC tracks and calorimeter clusters in cone can be different
3493 // TVector3 vmcv(mcisop->Px(),mcisop->Py(), mcisop->Pz());
3494 // if(vmcv.Perp()>1)
3498 // Add here Acceptance cut???, charged particles CTS fid cut, neutral Calo real acceptance.
3501 dR = GetIsolationCut()->Radius(photonEta, photonPhi, partInConeEta, partInConePhi);
3503 if(dR > GetIsolationCut()->GetConeSize())
3506 sumPtInCone += partInConePt;
3507 if(partInConePt > GetIsolationCut()->GetPtThreshold() &&
3508 partInConePt < GetIsolationCut()->GetPtThresholdMax()) npart++;
3511 ///////END ISO MC/////////////////////////
3513 // Fill the histograms, only those in the defined calorimeter acceptance
3515 fhEtaPrimMC[kmcPrimPhoton]->Fill(photonPt , photonEta) ;
3516 fhPhiPrimMC[kmcPrimPhoton]->Fill(photonPt , photonPhi) ;
3517 fhEPrimMC [kmcPrimPhoton]->Fill(photonE) ;
3519 fhEtaPrimMC[mcIndex]->Fill(photonPt , photonEta) ;
3520 fhPhiPrimMC[mcIndex]->Fill(photonPt , photonPhi) ;
3521 fhEPrimMC [mcIndex]->Fill(photonE ) ;
3524 Bool_t isolated = kFALSE;
3525 if(GetIsolationCut()->GetICMethod() == AliIsolationCut::kSumPtIC &&
3526 (sumPtInCone < GetIsolationCut()->GetSumPtThreshold() ||
3527 sumPtInCone > GetIsolationCut()->GetSumPtThresholdMax()))
3530 if(GetIsolationCut()->GetICMethod() == AliIsolationCut::kPtThresIC &&
3536 fhPtPrimMCiso [mcIndex] ->Fill(photonPt) ;
3537 fhPtPrimMCiso [kmcPrimPhoton]->Fill(photonPt) ;
3540 }//loop on primaries
3544 //_____________________________________________________________________________________
3545 void AliAnaParticleIsolation::MakeSeveralICAnalysis(AliAODPWG4ParticleCorrelation* ph,
3549 //Isolation Cut Analysis for both methods and different pt cuts and cones
3550 Float_t ptC = ph->Pt();
3551 Float_t etaC = ph->Eta();
3552 Float_t phiC = ph->Phi();
3553 Int_t tag = ph->GetTag();
3554 Bool_t decay = ph->IsTagged();
3556 if(GetDebug() > 0) printf("AliAnaParticleIsolation::MakeSeveralICAnalysis() - Isolate pT %2.2f\n",ptC);
3558 //Keep original setting used when filling AODs, reset at end of analysis
3559 Float_t ptthresorg = GetIsolationCut()->GetPtThreshold();
3560 Float_t ptfracorg = GetIsolationCut()->GetPtFraction();
3561 Float_t rorg = GetIsolationCut()->GetConeSize();
3563 Float_t coneptsum = 0 ;
3564 Int_t n [10][10];//[fNCones][fNPtThresFrac];
3565 Int_t nfrac[10][10];//[fNCones][fNPtThresFrac];
3566 Bool_t isolated = kFALSE;
3568 Int_t nFracCone = 0;
3570 // Fill hist with all particles before isolation criteria
3571 fhPtNoIso ->Fill(ptC);
3572 fhEtaPhiNoIso->Fill(etaC,phiC);
3576 if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
3577 fhPtNoIsoMC[kmcPhoton]->Fill(ptC);
3579 fhPtNoIsoMC[mcIndex]->Fill(ptC);
3584 fhPtDecayNoIso ->Fill(ptC);
3585 fhEtaPhiDecayNoIso->Fill(etaC,phiC);
3587 //Get vertex for photon momentum calculation
3588 Double_t vertex[] = {0,0,0} ; //vertex ;
3589 if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
3590 GetReader()->GetVertex(vertex);
3592 //Loop on cone sizes
3593 for(Int_t icone = 0; icone<fNCones; icone++)
3595 //Recover reference arrays with clusters and tracks
3596 TObjArray * refclusters = ph->GetObjArray(GetAODObjArrayName()+"Clusters");
3597 TObjArray * reftracks = ph->GetObjArray(GetAODObjArrayName()+"Tracks");
3599 //If too small or too large pt, skip
3600 if(ptC < GetMinPt() || ptC > GetMaxPt() ) continue ;
3602 //In case a more strict IC is needed in the produced AOD
3604 nCone=0; nFracCone = 0; isolated = kFALSE; coneptsum = 0;
3606 GetIsolationCut()->SetSumPtThreshold(100);
3607 GetIsolationCut()->SetPtThreshold(100);
3608 GetIsolationCut()->SetPtFraction(100);
3609 GetIsolationCut()->SetConeSize(fConeSizes[icone]);
3610 GetIsolationCut()->MakeIsolationCut(reftracks, refclusters,
3611 GetReader(), GetCaloPID(),
3613 nCone,nFracCone,coneptsum, isolated);
3615 fhSumPtLeadingPt[icone]->Fill(ptC,coneptsum);
3617 // retreive pt tracks to fill histo vs. pt leading
3618 //Fill pt distribution of particles in cone
3619 //fhPtLeadingPt(),fhPerpSumPtLeadingPt(),fhPerpPtLeadingPt(),
3623 Double_t sumptPerp = 0. ;
3624 TObjArray * trackList = GetCTSTracks() ;
3625 for(Int_t itrack=0; itrack < trackList->GetEntriesFast(); itrack++)
3627 AliVTrack* track = (AliVTrack *) trackList->At(itrack);
3628 //fill the histograms at forward range
3631 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Track not available?");
3635 Double_t dPhi = phiC - track->Phi() + TMath::PiOver2();
3636 Double_t dEta = etaC - track->Eta();
3637 Double_t arg = dPhi*dPhi + dEta*dEta;
3638 if(TMath::Sqrt(arg) < fConeSizes[icone])
3640 fhPerpPtLeadingPt[icone]->Fill(ptC,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
3641 sumptPerp+=track->Pt();
3644 dPhi = phiC - track->Phi() - TMath::PiOver2();
3645 arg = dPhi*dPhi + dEta*dEta;
3646 if(TMath::Sqrt(arg) < fConeSizes[icone])
3648 fhPerpPtLeadingPt[icone]->Fill(ptC,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
3649 sumptPerp+=track->Pt();
3653 fhPerpSumPtLeadingPt[icone]->Fill(ptC,sumptPerp);
3657 for(Int_t itrack=0; itrack < reftracks->GetEntriesFast(); itrack++)
3659 AliVTrack* track = (AliVTrack *) reftracks->At(itrack);
3660 fhPtLeadingPt[icone]->Fill(ptC,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
3661 coneptsum+=track->Pt();
3668 TLorentzVector mom ;
3669 for(Int_t icalo=0; icalo < refclusters->GetEntriesFast(); icalo++)
3671 AliVCluster* calo = (AliVCluster *) refclusters->At(icalo);
3672 calo->GetMomentum(mom,vertex) ;//Assume that come from vertex in straight line
3674 fhPtLeadingPt[icone]->Fill(ptC, mom.Pt());
3675 coneptsum+=mom.Pt();
3681 //Loop on ptthresholds
3682 for(Int_t ipt = 0; ipt<fNPtThresFrac ;ipt++)
3685 nfrac[icone][ipt]=0;
3686 GetIsolationCut()->SetPtThreshold(fPtThresholds[ipt]);
3687 GetIsolationCut()->SetPtFraction(fPtFractions[ipt]) ;
3688 GetIsolationCut()->SetSumPtThreshold(fSumPtThresholds[ipt]);
3690 GetIsolationCut()->MakeIsolationCut(reftracks, refclusters,
3691 GetReader(), GetCaloPID(),
3693 n[icone][ipt],nfrac[icone][ipt],coneptsum, isolated);
3695 if(!isolated) continue;
3696 //Normal ptThreshold cut
3698 if(GetDebug() > 0) printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - cone size %1.1f, ptThres %1.1f, sumptThresh %1.1f, n %d, nfrac %d, coneptsum %2.2f, isolated %d\n",
3699 fConeSizes[icone],fPtThresholds[ipt],fSumPtThresholds[ipt],n[icone][ipt],nfrac[icone][ipt],coneptsum, isolated);
3700 if(GetDebug() > 0) printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - pt %1.1f, eta %1.1f, phi %1.1f\n",ptC, etaC, phiC);
3702 if(n[icone][ipt] == 0)
3704 if(GetDebug()>0) printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling pt threshold loop\n");
3705 fhPtThresIsolated[icone][ipt]->Fill(ptC);
3706 fhEtaPhiPtThresIso[icone][ipt]->Fill(etaC,phiC);
3710 fhPtPtThresDecayIso[icone][ipt]->Fill(ptC);
3711 // fhEtaPhiPtThresDecayIso[icone][ipt]->Fill(etaC,phiC);
3717 if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton) )
3718 fhPtThresIsolatedMC[kmcPhoton][icone][ipt]->Fill(ptC) ;
3720 fhPtThresIsolatedMC[mcIndex][icone][ipt]->Fill(ptC) ;
3725 // pt in cone fraction
3726 if(nfrac[icone][ipt] == 0)
3728 if(GetDebug()>0) printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling frac loop\n");
3729 fhPtFracIsolated[icone][ipt]->Fill(ptC);
3730 fhEtaPhiPtFracIso[icone][ipt]->Fill(etaC,phiC);
3734 fhPtPtFracDecayIso[icone][ipt]->Fill(ptC);
3735 fhEtaPhiPtFracDecayIso[icone][ipt]->Fill(etaC,phiC);
3740 if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
3741 fhPtFracIsolatedMC[kmcPhoton][icone][ipt]->Fill(ptC) ;
3743 fhPtFracIsolatedMC[mcIndex][icone][ipt]->Fill(ptC) ;
3747 if(GetDebug()>0) printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - checking IC method : %i\n",GetIsolationCut()->GetICMethod());
3749 //Pt threshold on pt cand/ sum in cone histograms
3750 if(coneptsum<fSumPtThresholds[ipt])
3751 {// if((GetIsolationCut()->GetICMethod())==1){//kSumPtIC){
3752 if(GetDebug()>0) printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling sum loop\n");
3753 fhPtSumIsolated[icone][ipt]->Fill(ptC) ;
3754 fhEtaPhiPtSumIso[icone][ipt]->Fill(etaC, phiC) ;
3757 fhPtPtSumDecayIso[icone][ipt]->Fill(ptC);
3758 fhEtaPhiPtSumDecayIso[icone][ipt]->Fill(etaC, phiC) ;
3762 // pt sum pt frac method
3763 // if( ((fPtFractions[ipt]*ptC < fSumPtThresholds[ipt]) && (coneptsum < fSumPtThresholds[ipt])) || ((fPtFractions[ipt]*ptC > fSumPtThresholds[ipt]) && (coneptsum < fPtFractions[ipt]*ptC)) )
3765 if(coneptsum < fPtFractions[ipt]*ptC)
3767 if(GetDebug()>0) printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling PtFrac PtSum loop\n");
3768 fhPtFracPtSumIso[icone][ipt]->Fill(ptC) ;
3769 fhEtaPhiFracPtSumIso[icone][ipt]->Fill(etaC,phiC) ;
3773 fhPtFracPtSumDecayIso[icone][ipt]->Fill(ptC);
3774 fhEtaPhiFracPtSumDecayIso[icone][ipt]->Fill(etaC,phiC);
3779 Float_t cellDensity = GetIsolationCut()->GetCellDensity( ph, GetReader());
3780 if(coneptsum<fSumPtThresholds[ipt]*cellDensity)
3781 {//(GetIsolationCut()->GetICMethod())==4){//kSumDensityIC) {
3782 if(GetDebug()>0) printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling density loop\n");
3783 fhPtSumDensityIso[icone][ipt]->Fill(ptC) ;
3784 fhEtaPhiSumDensityIso[icone][ipt]->Fill(etaC,phiC) ;
3788 fhPtSumDensityDecayIso[icone][ipt]->Fill(ptC);
3789 fhEtaPhiSumDensityDecayIso[icone][ipt]->Fill(etaC, phiC);
3797 if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
3798 fhPtSumIsolatedMC[kmcPhoton][icone]->Fill(ptC,coneptsum) ;
3800 fhPtSumIsolatedMC[mcIndex][icone]->Fill(ptC,coneptsum) ;
3805 //Reset original parameters for AOD analysis
3806 GetIsolationCut()->SetPtThreshold(ptthresorg);
3807 GetIsolationCut()->SetPtFraction(ptfracorg);
3808 GetIsolationCut()->SetConeSize(rorg);
3812 //_____________________________________________________________
3813 void AliAnaParticleIsolation::Print(const Option_t * opt) const
3816 //Print some relevant parameters set for the analysis
3820 printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
3821 AliAnaCaloTrackCorrBaseClass::Print(" ");
3823 printf("ReMake Isolation = %d \n", fReMakeIC) ;
3824 printf("Make Several Isolation = %d \n", fMakeSeveralIC) ;
3825 printf("Calorimeter for isolation = %s \n", fCalorimeter.Data()) ;
3826 printf("Detector for candidate isolation = %s \n", fIsoDetector.Data()) ;
3830 printf("N Cone Sizes = %d\n", fNCones) ;
3831 printf("Cone Sizes = \n") ;
3832 for(Int_t i = 0; i < fNCones; i++)
3833 printf(" %1.2f;", fConeSizes[i]) ;
3836 printf("N pT thresholds/fractions = %d\n", fNPtThresFrac) ;
3837 printf(" pT thresholds = \n") ;
3838 for(Int_t i = 0; i < fNPtThresFrac; i++)
3839 printf(" %2.2f;", fPtThresholds[i]) ;
3843 printf(" pT fractions = \n") ;
3844 for(Int_t i = 0; i < fNPtThresFrac; i++)
3845 printf(" %2.2f;", fPtFractions[i]) ;
3849 printf("sum pT thresholds = \n") ;
3850 for(Int_t i = 0; i < fNPtThresFrac; i++)
3851 printf(" %2.2f;", fSumPtThresholds[i]) ;
3856 printf("Histograms: %3.1f < pT sum < %3.1f, Nbin = %d\n", fHistoPtSumMin, fHistoPtSumMax, fHistoNPtSumBins );
3857 printf("Histograms: %3.1f < pT in cone < %3.1f, Nbin = %d\n", fHistoPtInConeMin, fHistoPtInConeMax, fHistoNPtInConeBins);