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 ;
205 fhSumPtLeadingPt [i] = 0 ;
206 fhPtLeadingPt [i] = 0 ;
207 fhPerpSumPtLeadingPt[i] = 0 ;
208 fhPerpPtLeadingPt [i] = 0 ;
211 for(Int_t imc = 0; imc < 9; imc++)
213 fhPtNoIsoMC [imc] = 0;
215 fhPhiIsoMC [imc] = 0;
216 fhEtaIsoMC [imc] = 0;
217 fhPtLambda0MC[imc][0] = 0;
218 fhPtLambda0MC[imc][1] = 0;
221 for(Int_t i = 0; i < 2 ; i++)
223 fhTrackMatchedDEta[i] = 0 ; fhTrackMatchedDPhi[i] = 0 ; fhTrackMatchedDEtaDPhi [i] = 0 ;
224 fhdEdx [i] = 0 ; fhEOverP [i] = 0 ; fhTrackMatchedMCParticle[i] = 0 ;
225 fhELambda0 [i] = 0 ; fhELambda1 [i] = 0 ; fhPtLambda0 [i] = 0 ;
226 fhELambda0TRD [i] = 0 ; fhELambda1TRD [i] = 0 ; fhPtLambda0TRD [i] = 0 ;
228 // Number of local maxima in cluster
230 fhELambda0LocMax1[i] = 0 ; fhELambda1LocMax1[i] = 0 ;
231 fhELambda0LocMax2[i] = 0 ; fhELambda1LocMax2[i] = 0 ;
232 fhELambda0LocMaxN[i] = 0 ; fhELambda1LocMaxN[i] = 0 ;
236 for(Int_t i = 0; i < 6; i++)
238 fhPtPrimMCiso[i] = 0;
246 for(Int_t i = 0 ; i < 7 ; i++)
248 fhPtInConePileUp[i] = 0 ;
249 fhEIsoPileUp [i] = 0 ;
250 fhPtIsoPileUp [i] = 0 ;
251 fhENoIsoPileUp [i] = 0 ;
252 fhPtNoIsoPileUp [i] = 0 ;
257 //_______________________________________________________________________________________________
258 void AliAnaParticleIsolation::CalculateCaloUEBand(AliAODPWG4ParticleCorrelation * pCandidate,
259 Float_t & etaBandPtSum, Float_t & phiBandPtSum)
261 // Get the clusters pT or sum of pT in phi/eta bands or at 45 degrees from trigger
263 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyCharged ) return ;
265 Float_t conesize = GetIsolationCut()->GetConeSize();
268 //Select the Calorimeter
269 TObjArray * pl = 0x0;
270 if (fCalorimeter == "PHOS" )
271 pl = GetPHOSClusters();
272 else if (fCalorimeter == "EMCAL")
273 pl = GetEMCALClusters();
277 //Get vertex for cluster momentum calculation
278 Double_t vertex[] = {0,0,0} ; //vertex ;
279 if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
280 GetReader()->GetVertex(vertex);
282 Float_t ptTrig = pCandidate->Pt() ;
283 Float_t phiTrig = pCandidate->Phi();
284 Float_t etaTrig = pCandidate->Eta();
286 for(Int_t icluster=0; icluster < pl->GetEntriesFast(); icluster++)
288 AliVCluster* cluster = (AliVCluster *) pl->At(icluster);
292 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Cluster not available?");
296 //Do not count the candidate (photon or pi0) or the daughters of the candidate
297 if(cluster->GetID() == pCandidate->GetCaloLabel(0) ||
298 cluster->GetID() == pCandidate->GetCaloLabel(1) ) continue ;
300 //Remove matched clusters to tracks if Neutral and Track info is used
301 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kNeutralAndCharged &&
302 IsTrackMatched(cluster,GetReader()->GetInputEvent())) continue ;
304 cluster->GetMomentum(mom,vertex) ;//Assume that come from vertex in straight line
306 //exclude particles in cone
307 Float_t rad = GetIsolationCut()->Radius(etaTrig, phiTrig, mom.Eta(), mom.Phi());
309 // histo of eta and phi for all clusters
310 fhEtaPhiCluster->Fill(mom.Eta(), mom.Phi());
312 // histos for all clusters in cone
313 fhEtaPhiInConeCluster->Fill(mom.Eta(), mom.Phi());
316 //fill histogram for UE in phi band in EMCal acceptance
317 if(mom.Eta() > (etaTrig-conesize) && mom.Eta() < (etaTrig+conesize))
319 phiBandPtSum+=mom.Pt();
320 fhPhiBandCluster->Fill(mom.Eta(),mom.Phi());
324 //fill histogram for UE in eta band in EMCal acceptance
325 if(mom.Phi() > (phiTrig-conesize) && mom.Phi() < (phiTrig+conesize))
327 etaBandPtSum+=mom.Pt();
328 fhEtaBandCluster->Fill(mom.Eta(),mom.Phi());
332 fhConeSumPtEtaBandUECluster ->Fill(ptTrig , etaBandPtSum);
333 fhConeSumPtPhiBandUECluster ->Fill(ptTrig , phiBandPtSum);
334 fhConeSumPtEtaBandUEClusterTrigEtaPhi->Fill(etaTrig,phiTrig,etaBandPtSum);
335 fhConeSumPtPhiBandUEClusterTrigEtaPhi->Fill(etaTrig,phiTrig,phiBandPtSum);
339 //________________________________________________________________________________________________
340 void AliAnaParticleIsolation::CalculateCaloCellUEBand(AliAODPWG4ParticleCorrelation * pCandidate,
341 Float_t & etaBandPtSumCells, Float_t & phiBandPtSumCells)
343 // Get the cells amplitude or sum of amplitude in phi/eta bands or at 45 degrees from trigger
345 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyCharged ) return ;
347 Float_t conesize = GetIsolationCut()->GetConeSize();
349 Float_t phiTrig = pCandidate->Phi();
350 if(phiTrig<0) phiTrig += TMath::TwoPi();
351 Float_t etaTrig = pCandidate->Eta();
353 if(pCandidate->GetDetector()=="EMCAL")
355 AliEMCALGeometry* eGeom = AliEMCALGeometry::GetInstance();
358 if (eGeom->GetAbsCellIdFromEtaPhi(etaTrig,phiTrig,absId))
360 if(!eGeom->CheckAbsCellId(absId)) return ;
362 // Get absolute (col,row) of trigger particle
363 Int_t nSupMod = eGeom->GetSuperModuleNumber(absId);
365 Int_t imEta=-1, imPhi=-1;
366 Int_t ieta =-1, iphi =-1;
368 if (eGeom->GetCellIndex(absId,nSupMod,nModule,imPhi,imEta))
370 eGeom->GetCellPhiEtaIndexInSModule(nSupMod,nModule,imPhi,imEta,iphi,ieta);
372 Int_t colTrig = ieta;
373 if (nSupMod % 2) colTrig = AliEMCALGeoParams::fgkEMCALCols + ieta ;
374 Int_t rowTrig = iphi + AliEMCALGeoParams::fgkEMCALRows*int(nSupMod/2);
376 Int_t sqrSize = int(conesize/0.0143);
378 AliVCaloCells * cells = GetEMCALCells();
380 Int_t nTotalRows = AliEMCALGeoParams::fgkEMCALRows*16/3 ; // 24*(16/3) 5 full-size Sectors (2 SM) + 1 one-third Sector (2 SM)
381 Int_t nTotalCols = 2*AliEMCALGeoParams::fgkEMCALCols;
382 // printf("nTotalRows %i, nTotalCols %i\n",nTotalRows,nTotalCols);
383 // Loop on cells in eta band
385 Int_t irowmin = rowTrig-sqrSize;
386 if(irowmin<0) irowmin=0;
387 Int_t irowmax = rowTrig+sqrSize;
388 if(irowmax>AliEMCALGeoParams::fgkEMCALRows) irowmax=AliEMCALGeoParams::fgkEMCALRows;
391 for(Int_t irow = irowmin; irow <irowmax; irow++)
393 for(Int_t icol = 0; icol < nTotalCols; icol++)
395 Int_t inSector = int(irow/AliEMCALGeoParams::fgkEMCALRows);
396 if(inSector==5) continue;
399 if(icol < AliEMCALGeoParams::fgkEMCALCols)
401 inSupMod = 2*inSector + 1;
404 else if(icol > AliEMCALGeoParams::fgkEMCALCols - 1)
406 inSupMod = 2*inSector;
407 icolLoc = icol-AliEMCALGeoParams::fgkEMCALCols;
410 Int_t irowLoc = irow - AliEMCALGeoParams::fgkEMCALRows*inSector ;
412 // Exclude cells in cone
413 if(TMath::Abs(icol-colTrig) < sqrSize || TMath::Abs(irow-rowTrig) < sqrSize){
416 Int_t iabsId = eGeom->GetAbsCellIdFromCellIndexes(inSupMod,irowLoc,icolLoc);
417 if(!eGeom->CheckAbsCellId(iabsId)) continue;
418 etaBandPtSumCells += cells->GetCellAmplitude(iabsId);
419 fhEtaBandCell->Fill(colTrig,rowTrig);
421 // printf("ETA inSupMod %i,irowLoc %i,icolLoc %i, iabsId %i, etaBandPtSumCells %f\n",nSupMod,irowLoc,icolLoc,iabsId,etaBandPtSumCells);
424 Int_t icolmin = colTrig-sqrSize;
425 if(icolmin<0) icolmin=0;
426 Int_t icolmax = colTrig+sqrSize;
427 if(icolmax>AliEMCALGeoParams::fgkEMCALCols) icolmax=AliEMCALGeoParams::fgkEMCALCols;
429 // Loop on cells in phi band
430 for(Int_t icol = icolmin; icol < icolmax; icol++)
432 for(Int_t irow = 0; irow < nTotalRows; irow++)
434 Int_t inSector = int(irow/AliEMCALGeoParams::fgkEMCALRows);
435 if(inSector==5) continue;
438 // printf("icol %i, irow %i, inSector %i\n",icol,irow ,inSector);
439 if(icol < AliEMCALGeoParams::fgkEMCALCols)
441 // printf("icol < AliEMCALGeoParams::fgkEMCALCols %i\n",AliEMCALGeoParams::fgkEMCALCols );
442 inSupMod = 2*inSector + 1;
445 else if(icol > AliEMCALGeoParams::fgkEMCALCols - 1)
447 // printf("icol > AliEMCALGeoParams::fgkEMCALCols -1 %i\n",AliEMCALGeoParams::fgkEMCALCols -1 );
448 inSupMod = 2*inSector;
449 icolLoc = icol-AliEMCALGeoParams::fgkEMCALCols;
452 Int_t irowLoc = irow - AliEMCALGeoParams::fgkEMCALRows*inSector ; // Stesso problema di sopra //
454 // Exclude cells in cone
455 if(TMath::Abs(icol-colTrig) < sqrSize) {
456 //printf("TMath::Abs(icol-colTrig) %i < sqrSize %i\n",TMath::Abs(icol-colTrig) ,sqrSize);continue ;
458 if(TMath::Abs(irow-rowTrig) < sqrSize) {
459 //printf("TMath::Abs(irow-rowTrig) %i < sqrSize %i\n",TMath::Abs(irow-rowTrig) ,sqrSize);continue ;
462 Int_t iabsId = eGeom->GetAbsCellIdFromCellIndexes(inSupMod,irowLoc,icolLoc);
463 if(!eGeom->CheckAbsCellId(iabsId)) {printf("!eGeom->CheckAbsCellId(iabsId=%i) inSupMod %i irowLoc %i icolLoc %i \n",iabsId,inSupMod, irowLoc, icolLoc);continue;}
464 phiBandPtSumCells += cells->GetCellAmplitude(iabsId);
465 fhPhiBandCell->Fill(colTrig,rowTrig);
466 //printf("inSupMod %i,irowLoc %i,icolLoc %i, iabsId %i, phiBandPtSumCells %f\n",nSupMod,irowLoc,icolLoc,iabsId,phiBandPtSumCells);
473 Float_t ptTrig = pCandidate->Pt();
475 fhConeSumPtEtaBandUECell ->Fill(ptTrig , etaBandPtSumCells);
476 fhConeSumPtPhiBandUECell ->Fill(ptTrig , phiBandPtSumCells);
477 fhConeSumPtEtaBandUECellTrigEtaPhi->Fill(etaTrig,phiTrig,etaBandPtSumCells);
478 fhConeSumPtPhiBandUECellTrigEtaPhi->Fill(etaTrig,phiTrig,phiBandPtSumCells);
482 //________________________________________________________________________________________________
483 void AliAnaParticleIsolation::CalculateTrackUEBand(AliAODPWG4ParticleCorrelation * pCandidate,
484 Float_t & etaBandPtSum, Float_t & phiBandPtSum)
486 // Get the track pT or sum of pT in phi/eta bands or at 45 degrees from trigger
488 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyNeutral ) return ;
490 Float_t conesize = GetIsolationCut()->GetConeSize();
492 Double_t sumptPerp= 0. ;
493 Float_t ptTrig = pCandidate->Pt() ;
494 Float_t phiTrig = pCandidate->Phi();
495 Float_t etaTrig = pCandidate->Eta();
497 TObjArray * trackList = GetCTSTracks() ;
498 for(Int_t itrack=0; itrack < trackList->GetEntriesFast(); itrack++)
500 AliVTrack* track = (AliVTrack *) trackList->At(itrack);
504 printf("AliAnaParticleIsolation::CalculateTrackUEBand() - Track not available?");
508 //Do not count the candidate (pion, conversion photon) or the daughters of the candidate
509 if(track->GetID() == pCandidate->GetTrackLabel(0) || track->GetID() == pCandidate->GetTrackLabel(1) ||
510 track->GetID() == pCandidate->GetTrackLabel(2) || track->GetID() == pCandidate->GetTrackLabel(3) ) continue ;
512 // histo of eta:phi for all tracks
513 fhEtaPhiTrack->Fill(track->Eta(),track->Phi());
515 //exclude particles in cone
516 Float_t rad = GetIsolationCut()->Radius(etaTrig, phiTrig, track->Eta(), track->Phi());
518 // histo of eta:phi for all tracks in cone
519 fhEtaPhiInConeTrack->Fill(track->Eta(),track->Phi());
523 //fill histogram for UE in phi band
524 if(track->Eta() > (etaTrig-conesize) && track->Eta() < (etaTrig+conesize))
526 phiBandPtSum+=track->Pt();
527 fhPhiBandTrack->Fill(track->Eta(),track->Phi());
530 //fill histogram for UE in eta band in EMCal acceptance
531 if(track->Phi() > (phiTrig-conesize) && track->Phi() < (phiTrig+conesize))
533 etaBandPtSum+=track->Pt();
534 fhEtaBandTrack->Fill(track->Eta(),track->Phi());
537 //fill the histograms at +-45 degrees in phi from trigger particle, perpedicular to trigger axis in phi
538 Double_t dPhi = phiTrig - track->Phi() + TMath::PiOver2();
539 Double_t dEta = etaTrig - track->Eta();
540 Double_t arg = dPhi*dPhi + dEta*dEta;
541 if(TMath::Sqrt(arg) < conesize)
543 fhPtInPerpCone->Fill(ptTrig,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
544 sumptPerp+=track->Pt();
547 dPhi = phiTrig - track->Phi() - TMath::PiOver2();
548 arg = dPhi*dPhi + dEta*dEta;
549 if(TMath::Sqrt(arg) < conesize)
551 fhPtInPerpCone->Fill(ptTrig,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
552 sumptPerp+=track->Pt();
556 fhPerpConeSumPt ->Fill(ptTrig , sumptPerp );
557 fhConeSumPtEtaBandUETrack ->Fill(ptTrig , etaBandPtSum);
558 fhConeSumPtPhiBandUETrack ->Fill(ptTrig , phiBandPtSum);
559 fhConeSumPtEtaBandUETrackTrigEtaPhi->Fill(etaTrig,phiTrig,etaBandPtSum);
560 fhConeSumPtPhiBandUETrackTrigEtaPhi->Fill(etaTrig,phiTrig,phiBandPtSum);
566 //_____________________________________________________________________________________________________________________________________
567 void AliAnaParticleIsolation::CalculateNormalizeUEBandPerUnitArea(AliAODPWG4ParticleCorrelation * pCandidate, Float_t coneptsumCluster,
568 Float_t coneptsumCell, Float_t coneptsumTrack,
569 Float_t &etaBandptsumTrackNorm, Float_t &etaBandptsumClusterNorm)
571 //normalize phi/eta band per area unit
573 Float_t etaUEptsumTrack = 0 ;
574 Float_t phiUEptsumTrack = 0 ;
575 Float_t etaUEptsumCluster = 0 ;
576 Float_t phiUEptsumCluster = 0 ;
577 Float_t etaUEptsumCell = 0 ;
578 Float_t phiUEptsumCell = 0 ;
580 Int_t partTypeInCone = GetIsolationCut()->GetParticleTypeInCone();
582 // Do the normalization
584 Float_t conesize = GetIsolationCut()->GetConeSize();
585 Float_t coneA = conesize*conesize*TMath::Pi(); // A = pi R^2, isolation cone area
586 Float_t ptTrig = pCandidate->Pt() ;
587 Float_t phiTrig = pCandidate->Phi();
588 Float_t etaTrig = pCandidate->Eta();
594 Float_t phiUEptsumTrackNorm = 0 ;
595 Float_t etaUEptsumTrackNorm = 0 ;
596 Float_t coneptsumTrackSubPhi = 0 ;
597 Float_t coneptsumTrackSubEta = 0 ;
598 Float_t coneptsumTrackSubPhiNorm = 0 ;
599 Float_t coneptsumTrackSubEtaNorm = 0 ;
600 etaBandptsumTrackNorm = 0 ;
602 if( partTypeInCone!=AliIsolationCut::kOnlyNeutral )
604 // Sum the pT in the phi or eta band for clusters or tracks
605 CalculateTrackUEBand (pCandidate,etaUEptsumTrack ,phiUEptsumTrack );// rajouter ici l'histo eta phi
608 fhConeSumPtVSUETracksEtaBand->Fill(coneptsumTrack,etaUEptsumTrack);
609 fhConeSumPtVSUETracksPhiBand->Fill(coneptsumTrack,phiUEptsumTrack);
612 Float_t correctConeSumTrack = 1;
613 Float_t correctConeSumTrackPhi = 1;
615 GetIsolationCut()->CalculateUEBandTrackNormalization(GetReader(),etaTrig, phiTrig,
616 phiUEptsumTrack,etaUEptsumTrack,
617 phiUEptsumTrackNorm,etaUEptsumTrackNorm,
618 correctConeSumTrack,correctConeSumTrackPhi);
620 coneptsumTrackSubPhi = coneptsumTrack - phiUEptsumTrackNorm;
621 coneptsumTrackSubEta = coneptsumTrack - etaUEptsumTrackNorm;
623 etaBandptsumTrackNorm = etaUEptsumTrackNorm;
625 fhConeSumPtPhiUESubTrack ->Fill(ptTrig , coneptsumTrackSubPhi);
626 fhConeSumPtPhiUESubTrackTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumTrackSubPhi);
627 fhConeSumPtEtaUESubTrack ->Fill(ptTrig , coneptsumTrackSubEta);
628 fhConeSumPtEtaUESubTrackTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumTrackSubEta);
630 fhFractionTrackOutConeEta ->Fill(ptTrig , correctConeSumTrack-1);
631 fhFractionTrackOutConeEtaTrigEtaPhi->Fill(etaTrig, phiTrig,correctConeSumTrack-1);
633 if(coneptsumTrack > 0)
635 coneptsumTrackSubPhiNorm = coneptsumTrackSubPhi/coneptsumTrack;
636 coneptsumTrackSubEtaNorm = coneptsumTrackSubEta/coneptsumTrack;
639 fhConeSumPtSubvsConeSumPtTotPhiTrack ->Fill(coneptsumTrack,coneptsumTrackSubPhi);
640 fhConeSumPtSubNormvsConeSumPtTotPhiTrack->Fill(coneptsumTrack,coneptsumTrackSubPhiNorm);
641 fhConeSumPtSubvsConeSumPtTotEtaTrack ->Fill(coneptsumTrack,coneptsumTrackSubEta);
642 fhConeSumPtSubNormvsConeSumPtTotEtaTrack->Fill(coneptsumTrack,coneptsumTrackSubEtaNorm);
646 // ------------------------ //
647 // EMCal Clusters and cells //
648 // ------------------------ //
649 Float_t phiUEptsumClusterNorm = 0 ;
650 Float_t etaUEptsumClusterNorm = 0 ;
651 Float_t coneptsumClusterSubPhi = 0 ;
652 Float_t coneptsumClusterSubEta = 0 ;
653 Float_t coneptsumClusterSubPhiNorm = 0 ;
654 Float_t coneptsumClusterSubEtaNorm = 0 ;
655 Float_t phiUEptsumCellNorm = 0 ;
656 Float_t etaUEptsumCellNorm = 0 ;
657 Float_t coneptsumCellSubPhi = 0 ;
658 Float_t coneptsumCellSubEta = 0 ;
659 Float_t coneptsumCellSubPhiNorm = 0 ;
660 Float_t coneptsumCellSubEtaNorm = 0 ;
661 etaBandptsumClusterNorm = 0;
663 if( partTypeInCone!=AliIsolationCut::kOnlyCharged )
670 // Sum the pT in the phi or eta band for clusters or tracks
671 CalculateCaloUEBand (pCandidate,etaUEptsumCluster,phiUEptsumCluster);// rajouter ici l'histo eta phi
674 fhConeSumPtVSUEClusterEtaBand->Fill(coneptsumCluster,etaUEptsumCluster);
675 fhConeSumPtVSUEClusterPhiBand->Fill(coneptsumCluster,phiUEptsumCluster);
678 Float_t correctConeSumClusterEta = 1;
679 Float_t correctConeSumClusterPhi = 1;
681 GetIsolationCut()->CalculateUEBandClusterNormalization(GetReader(),etaTrig, phiTrig,
682 phiUEptsumCluster,etaUEptsumCluster,
683 phiUEptsumClusterNorm,etaUEptsumClusterNorm,
684 correctConeSumClusterEta,correctConeSumClusterPhi);
686 // In case that cone is out of eta and phi side, we are over correcting, not too often with the current cuts ...
687 // Comment if not used
688 // Float_t coneBadCellsCoeff =1;
689 // Float_t etaBandBadCellsCoeff=1;
690 // Float_t phiBandBadCellsCoeff=1;
691 // GetIsolationCut()->GetCoeffNormBadCell(pCandidate, GetReader(),coneBadCellsCoeff,etaBandBadCellsCoeff,phiBandBadCellsCoeff) ;
693 //coneptsumCluster=coneptsumCluster*coneBadCellsCoeff*correctConeSumClusterEta*correctConeSumClusterPhi;
695 coneptsumClusterSubPhi = coneptsumCluster - phiUEptsumClusterNorm;
696 coneptsumClusterSubEta = coneptsumCluster - etaUEptsumClusterNorm;
698 etaBandptsumClusterNorm = etaUEptsumClusterNorm;
700 fhConeSumPtPhiUESubCluster ->Fill(ptTrig , coneptsumClusterSubPhi);
701 fhConeSumPtPhiUESubClusterTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumClusterSubPhi);
702 fhConeSumPtEtaUESubCluster ->Fill(ptTrig , coneptsumClusterSubEta);
703 fhConeSumPtEtaUESubClusterTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumClusterSubEta);
705 fhFractionClusterOutConeEta ->Fill(ptTrig , correctConeSumClusterEta-1);
706 fhFractionClusterOutConeEtaTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumClusterEta-1);
707 fhFractionClusterOutConePhi ->Fill(ptTrig , correctConeSumClusterPhi-1);
708 fhFractionClusterOutConePhiTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumClusterPhi-1);
710 if(coneptsumCluster!=0)
712 coneptsumClusterSubPhiNorm = coneptsumClusterSubPhi/coneptsumCluster;
713 coneptsumClusterSubEtaNorm = coneptsumClusterSubEta/coneptsumCluster;
716 fhConeSumPtSubvsConeSumPtTotPhiCluster ->Fill(coneptsumCluster,coneptsumClusterSubPhi);
717 fhConeSumPtSubNormvsConeSumPtTotPhiCluster->Fill(coneptsumCluster,coneptsumClusterSubPhiNorm);
718 fhConeSumPtSubvsConeSumPtTotEtaCluster ->Fill(coneptsumCluster,coneptsumClusterSubEta);
719 fhConeSumPtSubNormvsConeSumPtTotEtaCluster->Fill(coneptsumCluster,coneptsumClusterSubEtaNorm);
725 if(fFillCellHistograms)
727 // Sum the pT in the phi or eta band for clusters or tracks
728 CalculateCaloCellUEBand(pCandidate,etaUEptsumCell ,phiUEptsumCell );
730 // Move to AliIsolationCut the calculation not the histograms??
732 //Careful here if EMCal limits changed .. 2010 (4 SM) to 2011-12 (10 SM), for the moment consider 100 deg in phi
733 Float_t emcEtaSize = 0.7*2; // TO FIX
734 Float_t emcPhiSize = TMath::DegToRad()*100.; // TO FIX
736 if(((2*conesize*emcPhiSize)-coneA)!=0)phiUEptsumCellNorm = phiUEptsumCell*(coneA / ((2*conesize*emcPhiSize)-coneA));
737 if(((2*conesize*emcEtaSize)-coneA)!=0)etaUEptsumCellNorm = etaUEptsumCell*(coneA / ((2*conesize*emcEtaSize)-coneA));
739 // Need to correct coneptsumCluster by the fraction of the cone out of the calorimeter cut acceptance!
741 Float_t correctConeSumCellEta = 1;
742 if(TMath::Abs(etaTrig)+conesize > emcEtaSize/2.)
744 Float_t excess = TMath::Abs(etaTrig) + conesize - emcEtaSize/2.;
745 correctConeSumCellEta = GetIsolationCut()->CalculateExcessAreaFraction(excess);
746 //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);
747 // Need to correct phi band surface if part of the cone falls out of track cut acceptance!
748 if(((2*(conesize-excess)*emcPhiSize)-(coneA-correctConeSumCellEta))!=0)phiUEptsumCellNorm = phiUEptsumCell*(coneA / ((2*(conesize-excess)*emcPhiSize)-(coneA-correctConeSumCellEta)));
751 Float_t correctConeSumCellPhi = 1;
752 //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() );
753 if((phiTrig+conesize > 180*TMath::DegToRad()) ||
754 (phiTrig-conesize < 80*TMath::DegToRad()))
757 if( phiTrig+conesize > 180*TMath::DegToRad() ) excess = conesize + phiTrig - 180*TMath::DegToRad() ;
758 else excess = conesize - phiTrig + 80*TMath::DegToRad() ;
760 correctConeSumCellPhi = GetIsolationCut()->CalculateExcessAreaFraction(excess);
761 //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);
763 // Need to correct eta band surface if part of the cone falls out of track cut acceptance!
764 if(((2*(conesize-excess)*emcEtaSize)-(coneA-correctConeSumCellPhi))!=0)etaUEptsumCellNorm = etaUEptsumCell*(coneA / ((2*(conesize-excess)*emcEtaSize)-(coneA-correctConeSumCellPhi)));
768 // In case that cone is out of eta and phi side, we are over correcting, not too often with the current cuts ...
769 coneptsumCellSubPhi = coneptsumCell*correctConeSumCellEta*correctConeSumCellPhi - phiUEptsumCellNorm;
770 coneptsumCellSubEta = coneptsumCell*correctConeSumCellEta*correctConeSumCellPhi - etaUEptsumCellNorm;
772 fhConeSumPtPhiUESubCell ->Fill(ptTrig , coneptsumCellSubPhi);
773 fhConeSumPtPhiUESubCellTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumCellSubPhi);
774 fhConeSumPtEtaUESubCell ->Fill(ptTrig , coneptsumCellSubEta);
775 fhConeSumPtEtaUESubCellTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumCellSubEta);
777 fhFractionCellOutConeEta ->Fill(ptTrig , correctConeSumCellEta-1);
778 fhFractionCellOutConeEtaTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumCellEta-1);
779 fhFractionCellOutConePhi ->Fill(ptTrig , correctConeSumCellPhi-1);
780 fhFractionCellOutConePhiTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumCellPhi-1);
783 coneptsumCellSubPhiNorm = coneptsumCellSubPhi/coneptsumCell;
784 coneptsumCellSubEtaNorm = coneptsumCellSubEta/coneptsumCell;
787 fhConeSumPtSubvsConeSumPtTotPhiCell ->Fill(coneptsumCell,coneptsumCellSubPhi);
788 fhConeSumPtSubNormvsConeSumPtTotPhiCell->Fill(coneptsumCell,coneptsumCellSubPhiNorm);
789 fhConeSumPtSubvsConeSumPtTotEtaCell ->Fill(coneptsumCell,coneptsumCellSubEta);
790 fhConeSumPtSubNormvsConeSumPtTotEtaCell->Fill(coneptsumCell,coneptsumCellSubEtaNorm);
794 if( partTypeInCone==AliIsolationCut::kNeutralAndCharged )
796 // --------------------------- //
797 // Tracks and clusters in cone //
798 // --------------------------- //
800 Double_t sumPhiUESub = coneptsumClusterSubPhi + coneptsumTrackSubPhi;
801 Double_t sumEtaUESub = coneptsumClusterSubEta + coneptsumTrackSubEta;
803 fhConeSumPtPhiUESub ->Fill(ptTrig , sumPhiUESub);
804 fhConeSumPtPhiUESubTrigEtaPhi->Fill(etaTrig, phiTrig, sumPhiUESub);
805 fhConeSumPtEtaUESub ->Fill(ptTrig , sumEtaUESub);
806 fhConeSumPtEtaUESubTrigEtaPhi->Fill(etaTrig, phiTrig, sumEtaUESub);
808 fhEtaBandClustervsTrack ->Fill(etaUEptsumCluster ,etaUEptsumTrack );
809 fhPhiBandClustervsTrack ->Fill(phiUEptsumCluster ,phiUEptsumTrack );
810 fhEtaBandNormClustervsTrack->Fill(etaUEptsumClusterNorm,etaUEptsumTrackNorm);
811 fhPhiBandNormClustervsTrack->Fill(phiUEptsumClusterNorm,phiUEptsumTrackNorm);
813 fhConeSumPtEtaUESubClustervsTrack->Fill(coneptsumClusterSubEta,coneptsumTrackSubEta);
814 fhConeSumPtPhiUESubClustervsTrack->Fill(coneptsumClusterSubPhi,coneptsumTrackSubPhi);
816 // ------------------------ //
817 // Tracks and cells in cone //
818 // ------------------------ //
820 if(fFillCellHistograms)
822 Double_t sumPhiUESubTrackCell = coneptsumCellSubPhi + coneptsumTrackSubPhi;
823 Double_t sumEtaUESubTrackCell = coneptsumCellSubEta + coneptsumTrackSubEta;
825 fhConeSumPtPhiUESubTrackCell ->Fill(ptTrig , sumPhiUESubTrackCell);
826 fhConeSumPtPhiUESubTrackCellTrigEtaPhi->Fill(etaTrig, phiTrig, sumPhiUESubTrackCell);
827 fhConeSumPtEtaUESubTrackCell ->Fill(ptTrig , sumEtaUESubTrackCell);
828 fhConeSumPtEtaUESubTrackCellTrigEtaPhi->Fill(etaTrig, phiTrig, sumEtaUESubTrackCell);
830 fhEtaBandCellvsTrack ->Fill(etaUEptsumCell ,etaUEptsumTrack );
831 fhPhiBandCellvsTrack ->Fill(phiUEptsumCell ,phiUEptsumTrack );
832 fhEtaBandNormCellvsTrack->Fill(etaUEptsumCellNorm,etaUEptsumTrackNorm);
833 fhPhiBandNormCellvsTrack->Fill(phiUEptsumCellNorm,phiUEptsumTrackNorm);
835 fhConeSumPtEtaUESubCellvsTrack->Fill(coneptsumCellSubEta,coneptsumTrackSubEta);
836 fhConeSumPtPhiUESubCellvsTrack->Fill(coneptsumCellSubPhi,coneptsumTrackSubPhi);
843 //__________________________________________________________________________________________________
844 void AliAnaParticleIsolation::CalculateCaloSignalInCone(AliAODPWG4ParticleCorrelation * aodParticle,
845 Float_t & coneptsumCluster)
847 // Get the cluster pT or sum of pT in isolation cone
849 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyCharged ) return ;
851 //Recover reference arrays with clusters and tracks
852 TObjArray * refclusters = aodParticle->GetObjArray(GetAODObjArrayName()+"Clusters");
853 if(!refclusters) return ;
855 Float_t ptTrig = aodParticle->Pt();
857 //Get vertex for cluster momentum calculation
858 Double_t vertex[] = {0,0,0} ; //vertex ;
859 if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
860 GetReader()->GetVertex(vertex);
863 for(Int_t icalo=0; icalo < refclusters->GetEntriesFast(); icalo++)
865 AliVCluster* calo = (AliVCluster *) refclusters->At(icalo);
866 calo->GetMomentum(mom,vertex) ;//Assume that come from vertex in straight line
868 fhPtInCone ->Fill(ptTrig, mom.Pt());
869 fhPtClusterInCone->Fill(ptTrig, mom.Pt());
871 if(fFillPileUpHistograms)
873 if(GetReader()->IsPileUpFromSPD()) fhPtInConePileUp[0]->Fill(ptTrig,mom.Pt());
874 if(GetReader()->IsPileUpFromEMCal()) fhPtInConePileUp[1]->Fill(ptTrig,mom.Pt());
875 if(GetReader()->IsPileUpFromSPDOrEMCal()) fhPtInConePileUp[2]->Fill(ptTrig,mom.Pt());
876 if(GetReader()->IsPileUpFromSPDAndEMCal()) fhPtInConePileUp[3]->Fill(ptTrig,mom.Pt());
877 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) fhPtInConePileUp[4]->Fill(ptTrig,mom.Pt());
878 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) fhPtInConePileUp[5]->Fill(ptTrig,mom.Pt());
879 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) fhPtInConePileUp[6]->Fill(ptTrig,mom.Pt());
882 if(fFillHighMultHistograms) fhPtInConeCent->Fill(GetEventCentrality(),mom.Pt());
884 coneptsumCluster+=mom.Pt();
887 fhConeSumPtCluster ->Fill(ptTrig, coneptsumCluster);
890 //______________________________________________________________________________________________________
891 void AliAnaParticleIsolation::CalculateCaloCellSignalInCone(AliAODPWG4ParticleCorrelation * aodParticle,
892 Float_t & coneptsumCell)
894 // Get the cell amplityde or sum of amplitudes in isolation cone
895 // Mising: Remove signal cells in cone in case the trigger is a cluster!
897 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyCharged ) return ;
899 Float_t conesize = GetIsolationCut()->GetConeSize();
901 Float_t ptTrig = aodParticle->Pt();
902 Float_t phiTrig = aodParticle->Phi();
903 if(phiTrig<0) phiTrig += TMath::TwoPi();
904 Float_t etaTrig = aodParticle->Eta();
906 if(aodParticle->GetDetector()=="EMCAL")
908 AliEMCALGeometry* eGeom = AliEMCALGeometry::GetInstance();
911 if (eGeom->GetAbsCellIdFromEtaPhi(etaTrig,phiTrig,absId))
913 if(!eGeom->CheckAbsCellId(absId)) return ;
915 // Get absolute (col,row) of trigger particle
916 Int_t nSupMod = eGeom->GetSuperModuleNumber(absId);
918 Int_t imEta=-1, imPhi=-1;
919 Int_t ieta =-1, iphi =-1;
921 if (eGeom->GetCellIndex(absId,nSupMod,nModule,imPhi,imEta))
923 Int_t iEta=-1, iPhi=-1;
924 eGeom->GetCellPhiEtaIndexInSModule(nSupMod,nModule,imPhi,imEta,iphi,ieta);
926 Int_t colTrig = iEta;
927 if (nSupMod % 2) colTrig = AliEMCALGeoParams::fgkEMCALCols + iEta ;
928 Int_t rowTrig = iPhi + AliEMCALGeoParams::fgkEMCALRows*int(nSupMod/2);
930 Int_t sqrSize = int(conesize/0.0143);
932 AliVCaloCells * cells = GetEMCALCells();
934 // Loop on cells in cone
935 for(Int_t irow = rowTrig-sqrSize; irow < rowTrig+sqrSize; irow++)
937 for(Int_t icol = colTrig-sqrSize; icol < colTrig+sqrSize; icol++)
939 Int_t inSector = int(irow/AliEMCALGeoParams::fgkEMCALRows);
940 if(inSector==5) continue;
944 if(icol < AliEMCALGeoParams::fgkEMCALCols)
946 inSupMod = 2*inSector + 1;
949 else if(icol > AliEMCALGeoParams::fgkEMCALCols - 1)
951 inSupMod = 2*inSector;
952 icolLoc = icol-AliEMCALGeoParams::fgkEMCALCols;
955 Int_t irowLoc = irow - AliEMCALGeoParams::fgkEMCALRows*inSector ;
957 Int_t iabsId = eGeom->GetAbsCellIdFromCellIndexes(inSupMod,irowLoc,icolLoc);
958 if(!eGeom->CheckAbsCellId(iabsId)) continue;
960 fhPtCellInCone->Fill(ptTrig, cells->GetCellAmplitude(iabsId));
961 coneptsumCell += cells->GetCellAmplitude(iabsId);
968 fhConeSumPtCell->Fill(ptTrig,coneptsumCell);
972 //___________________________________________________________________________________________________
973 void AliAnaParticleIsolation::CalculateTrackSignalInCone(AliAODPWG4ParticleCorrelation * aodParticle,
974 Float_t & coneptsumTrack)
976 // Get the track pT or sum of pT in isolation cone
978 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyNeutral ) return ;
980 //Recover reference arrays with clusters and tracks
981 TObjArray * reftracks = aodParticle->GetObjArray(GetAODObjArrayName()+"Tracks");
982 if(!reftracks) return ;
984 Float_t ptTrig = aodParticle->Pt();
985 Double_t bz = GetReader()->GetInputEvent()->GetMagneticField();
987 for(Int_t itrack=0; itrack < reftracks->GetEntriesFast(); itrack++)
989 AliVTrack* track = (AliVTrack *) reftracks->At(itrack);
990 Float_t pTtrack = track->Pt();
992 fhPtInCone ->Fill(ptTrig,pTtrack);
993 fhPtTrackInCone->Fill(ptTrig,pTtrack);
995 if(fFillPileUpHistograms)
997 ULong_t status = track->GetStatus();
998 Bool_t okTOF = ( (status & AliVTrack::kTOFout) == AliVTrack::kTOFout ) ;
999 //Double32_t tof = track->GetTOFsignal()*1e-3;
1000 Int_t trackBC = track->GetTOFBunchCrossing(bz);
1002 if ( okTOF && trackBC!=0 ) fhPtTrackInConeOtherBC->Fill(ptTrig,pTtrack);
1003 else if( okTOF && trackBC==0 ) fhPtTrackInConeBC0 ->Fill(ptTrig,pTtrack);
1005 Int_t vtxBC = GetReader()->GetVertexBC();
1006 if(vtxBC == 0 || vtxBC==AliVTrack::kTOFBCNA) fhPtTrackInConeVtxBC0->Fill(ptTrig,pTtrack);
1008 if(GetReader()->IsPileUpFromSPD()) { fhPtInConePileUp[0]->Fill(ptTrig,pTtrack);
1009 if(okTOF && trackBC!=0 ) fhPtTrackInConeOtherBCPileUpSPD->Fill(ptTrig,pTtrack);
1010 if(okTOF && trackBC==0 ) fhPtTrackInConeBC0PileUpSPD ->Fill(ptTrig,pTtrack); }
1011 if(GetReader()->IsPileUpFromEMCal()) fhPtInConePileUp[1]->Fill(ptTrig,pTtrack);
1012 if(GetReader()->IsPileUpFromSPDOrEMCal()) fhPtInConePileUp[2]->Fill(ptTrig,pTtrack);
1013 if(GetReader()->IsPileUpFromSPDAndEMCal()) fhPtInConePileUp[3]->Fill(ptTrig,pTtrack);
1014 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) fhPtInConePileUp[4]->Fill(ptTrig,pTtrack);
1015 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) fhPtInConePileUp[5]->Fill(ptTrig,pTtrack);
1016 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) fhPtInConePileUp[6]->Fill(ptTrig,pTtrack);
1019 if(fFillHighMultHistograms) fhPtInConeCent->Fill(GetEventCentrality(),pTtrack);
1021 coneptsumTrack+=pTtrack;
1024 fhConeSumPtTrack->Fill(ptTrig, coneptsumTrack);
1028 //_________________________________________________________________
1029 void AliAnaParticleIsolation::FillPileUpHistograms(Int_t clusterID)
1031 // Fill some histograms to understand pile-up
1032 if(!fFillPileUpHistograms) return;
1036 printf("AliAnaParticleIsolation::FillPileUpHistograms(), ID of cluster = %d, not possible! ", clusterID);
1041 TObjArray* clusters = 0x0;
1042 if (fCalorimeter == "EMCAL") clusters = GetEMCALClusters();
1043 else if(fCalorimeter == "PHOS" ) clusters = GetPHOSClusters();
1046 Float_t time = -1000;
1050 AliVCluster *cluster = FindCluster(clusters,clusterID,iclus);
1051 energy = cluster->E();
1052 time = cluster->GetTOF()*1e9;
1055 //printf("E %f, time %f\n",energy,time);
1056 AliVEvent * event = GetReader()->GetInputEvent();
1058 fhTimeENoCut->Fill(energy,time);
1059 if(GetReader()->IsPileUpFromSPD()) fhTimeESPD ->Fill(energy,time);
1060 if(event->IsPileupFromSPDInMultBins()) fhTimeESPDMulti->Fill(energy,time);
1062 if(energy < 8) return; // Fill time figures for high energy clusters not too close to trigger threshold
1064 AliESDEvent* esdEv = dynamic_cast<AliESDEvent*> (event);
1065 AliAODEvent* aodEv = dynamic_cast<AliAODEvent*> (event);
1067 // N pile up vertices
1068 Int_t nVerticesSPD = -1;
1069 Int_t nVerticesTracks = -1;
1073 nVerticesSPD = esdEv->GetNumberOfPileupVerticesSPD();
1074 nVerticesTracks = esdEv->GetNumberOfPileupVerticesTracks();
1079 nVerticesSPD = aodEv->GetNumberOfPileupVerticesSPD();
1080 nVerticesTracks = aodEv->GetNumberOfPileupVerticesTracks();
1083 fhTimeNPileUpVertSPD ->Fill(time,nVerticesSPD);
1084 fhTimeNPileUpVertTrack->Fill(time,nVerticesTracks);
1086 //printf("Is SPD %d, Is SPD Multi %d, n spd %d, n track %d\n",
1087 // GetReader()->IsPileUpFromSPD(),event->IsPileupFromSPDInMultBins(),nVerticesSPD,nVerticesTracks);
1090 Float_t z1 = -1, z2 = -1;
1092 for(Int_t iVert=0; iVert<nVerticesSPD;iVert++)
1096 const AliESDVertex* pv=esdEv->GetPileupVertexSPD(iVert);
1097 ncont=pv->GetNContributors();
1098 z1 = esdEv->GetPrimaryVertexSPD()->GetZ();
1100 diamZ = esdEv->GetDiamondZ();
1104 AliAODVertex *pv=aodEv->GetVertex(iVert);
1105 if(pv->GetType()!=AliAODVertex::kPileupSPD) continue;
1106 ncont=pv->GetNContributors();
1107 z1=aodEv->GetPrimaryVertexSPD()->GetZ();
1109 diamZ = aodEv->GetDiamondZ();
1112 Double_t distZ = TMath::Abs(z2-z1);
1113 diamZ = TMath::Abs(z2-diamZ);
1115 fhTimeNPileUpVertContributors ->Fill(time,ncont);
1116 fhTimePileUpMainVertexZDistance->Fill(time,distZ);
1117 fhTimePileUpMainVertexZDiamond ->Fill(time,diamZ);
1122 //_____________________________________________________________________________________________________________________
1123 void AliAnaParticleIsolation::FillTrackMatchingShowerShapeControlHistograms(AliAODPWG4ParticleCorrelation *pCandidate,
1126 // Fill Track matching and Shower Shape control histograms
1127 if(!fFillTMHisto && !fFillSSHisto) return;
1129 Int_t clusterID = pCandidate->GetCaloLabel(0) ;
1130 Int_t nMaxima = pCandidate->GetFiducialArea(); // bad name, just place holder for the moment
1131 Int_t mcTag = pCandidate->GetTag() ;
1132 Bool_t isolated = pCandidate->IsIsolated();
1136 printf("AliAnaParticleIsolation::FillTrackMatchingShowerShapeControlHistograms(), ID of cluster = %d, not possible! \n", clusterID);
1141 TObjArray* clusters = 0x0;
1142 if (fCalorimeter == "EMCAL") clusters = GetEMCALClusters();
1143 else if(fCalorimeter == "PHOS" ) clusters = GetPHOSClusters();
1145 Float_t energy = pCandidate->E();
1146 Float_t pt = pCandidate->Pt();
1150 AliVCluster *cluster = FindCluster(clusters,clusterID,iclus);
1154 fhELambda0 [isolated]->Fill(energy, cluster->GetM02() );
1155 fhPtLambda0[isolated]->Fill(pt, cluster->GetM02() );
1156 fhELambda1 [isolated]->Fill(energy, cluster->GetM20() );
1160 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
1161 fhPtLambda0MC[kmcPhoton][isolated]->Fill(pt, cluster->GetM02());
1163 fhPtLambda0MC[mcIndex][isolated]->Fill(pt, cluster->GetM02());
1166 if(fCalorimeter == "EMCAL" && GetFirstSMCoveredByTRD() >= 0 &&
1167 GetModuleNumber(cluster) >= GetFirstSMCoveredByTRD() )
1169 fhELambda0TRD [isolated]->Fill(energy, cluster->GetM02() );
1170 fhPtLambda0TRD[isolated]->Fill(pt , cluster->GetM02() );
1171 fhELambda1TRD [isolated]->Fill(energy, cluster->GetM20() );
1174 if(fFillNLMHistograms)
1176 fhNLocMax[isolated]->Fill(energy,nMaxima);
1177 if (nMaxima==1) { fhELambda0LocMax1[isolated]->Fill(energy,cluster->GetM02()); fhELambda1LocMax1[isolated]->Fill(energy,cluster->GetM20()); }
1178 else if(nMaxima==2) { fhELambda0LocMax2[isolated]->Fill(energy,cluster->GetM02()); fhELambda1LocMax2[isolated]->Fill(energy,cluster->GetM20()); }
1179 else { fhELambda0LocMaxN[isolated]->Fill(energy,cluster->GetM02()); fhELambda1LocMaxN[isolated]->Fill(energy,cluster->GetM20()); }
1186 Float_t dZ = cluster->GetTrackDz();
1187 Float_t dR = cluster->GetTrackDx();
1189 if(cluster->IsEMCAL() && GetCaloUtils()->IsRecalculationOfClusterTrackMatchingOn())
1191 dR = 2000., dZ = 2000.;
1192 GetCaloUtils()->GetEMCALRecoUtils()->GetMatchedResiduals(cluster->GetID(),dZ,dR);
1195 //printf("ParticleIsolation: dPhi %f, dEta %f\n",dR,dZ);
1196 if(fhTrackMatchedDEta[isolated] && TMath::Abs(dR) < 999)
1198 fhTrackMatchedDEta[isolated]->Fill(energy,dZ);
1199 fhTrackMatchedDPhi[isolated]->Fill(energy,dR);
1200 if(energy > 0.5) fhTrackMatchedDEtaDPhi[isolated]->Fill(dZ,dR);
1203 // Check dEdx and E/p of matched clusters
1205 if(TMath::Abs(dZ) < 0.05 && TMath::Abs(dR) < 0.05)
1208 AliVTrack *track = GetCaloUtils()->GetMatchedTrack(cluster, GetReader()->GetInputEvent());
1212 Float_t dEdx = track->GetTPCsignal();
1213 fhdEdx[isolated]->Fill(cluster->E(), dEdx);
1215 Float_t eOverp = cluster->E()/track->P();
1216 fhEOverP[isolated]->Fill(cluster->E(), eOverp);
1219 // printf("AliAnaParticleIsolation::FillTrackMatchingShowerShapeHistograms() - Residual OK but (dR, dZ)= (%2.4f,%2.4f) no track associated WHAT? \n", dR,dZ);
1224 if ( !GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCConversion) )
1226 if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0) ||
1227 GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEta) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 2.5 );
1228 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 0.5 );
1229 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 1.5 );
1230 else fhTrackMatchedMCParticle[isolated]->Fill(energy, 3.5 );
1235 if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0) ||
1236 GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEta) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 6.5 );
1237 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 4.5 );
1238 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 5.5 );
1239 else fhTrackMatchedMCParticle[isolated]->Fill(energy, 7.5 );
1248 } // clusters array available
1252 //______________________________________________________
1253 TObjString * AliAnaParticleIsolation::GetAnalysisCuts()
1255 //Save parameters used for analysis
1256 TString parList ; //this will be list of parameters used for this analysis.
1257 const Int_t buffersize = 255;
1258 char onePar[buffersize] ;
1260 snprintf(onePar, buffersize,"--- AliAnaParticleIsolation ---\n") ;
1262 snprintf(onePar, buffersize,"Calorimeter: %s\n",fCalorimeter.Data()) ;
1264 snprintf(onePar, buffersize,"Isolation Cand Detector: %s\n",fIsoDetector.Data()) ;
1266 snprintf(onePar, buffersize,"fReMakeIC =%d (Flag for reisolation during histogram filling) \n",fReMakeIC) ;
1268 snprintf(onePar, buffersize,"fMakeSeveralIC=%d (Flag for isolation with several cuts at the same time ) \n",fMakeSeveralIC) ;
1270 snprintf(onePar, buffersize,"fFillTMHisto=%d (Flag for track matching histograms) \n",fFillTMHisto) ;
1272 snprintf(onePar, buffersize,"fFillSSHisto=%d (Flag for shower shape histograms) \n",fFillSSHisto) ;
1277 snprintf(onePar, buffersize,"fNCones =%d (Number of cone sizes) \n",fNCones) ;
1279 snprintf(onePar, buffersize,"fNPtThresFrac=%d (Flag for isolation with several cuts at the same time ) \n",fNPtThresFrac) ;
1282 for(Int_t icone = 0; icone < fNCones ; icone++)
1284 snprintf(onePar, buffersize,"fConeSizes[%d]=%1.2f (isolation cone size) \n",icone, fConeSizes[icone]) ;
1287 for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
1289 snprintf(onePar, buffersize,"fPtThresholds[%d]=%1.2f (isolation pt threshold) \n",ipt, fPtThresholds[ipt]) ;
1292 for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
1294 snprintf(onePar, buffersize,"fPtFractions[%d]=%1.2f (isolation pt fraction threshold) \n",ipt, fPtFractions[ipt]) ;
1297 for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
1299 snprintf(onePar, buffersize,"fSumPtThresholds[%d]=%1.2f (isolation sum pt threshold) \n",ipt, fSumPtThresholds[ipt]) ;
1304 //Get parameters set in base class.
1305 parList += GetBaseParametersList() ;
1307 //Get parameters set in IC class.
1308 if(!fMakeSeveralIC)parList += GetIsolationCut()->GetICParametersList() ;
1310 return new TObjString(parList) ;
1314 //________________________________________________________
1315 TList * AliAnaParticleIsolation::GetCreateOutputObjects()
1317 // Create histograms to be saved in output file and
1318 // store them in outputContainer
1319 TList * outputContainer = new TList() ;
1320 outputContainer->SetName("IsolatedParticleHistos") ;
1322 Int_t nptbins = GetHistogramRanges()->GetHistoPtBins();
1323 Int_t nphibins = GetHistogramRanges()->GetHistoPhiBins();
1324 Int_t netabins = GetHistogramRanges()->GetHistoEtaBins();
1325 Float_t ptmax = GetHistogramRanges()->GetHistoPtMax();
1326 Float_t phimax = GetHistogramRanges()->GetHistoPhiMax();
1327 Float_t etamax = GetHistogramRanges()->GetHistoEtaMax();
1328 Float_t ptmin = GetHistogramRanges()->GetHistoPtMin();
1329 Float_t phimin = GetHistogramRanges()->GetHistoPhiMin();
1330 Float_t etamin = GetHistogramRanges()->GetHistoEtaMin();
1331 Int_t ssbins = GetHistogramRanges()->GetHistoShowerShapeBins();
1332 Float_t ssmax = GetHistogramRanges()->GetHistoShowerShapeMax();
1333 Float_t ssmin = GetHistogramRanges()->GetHistoShowerShapeMin();
1334 Int_t ntimebins= GetHistogramRanges()->GetHistoTimeBins();
1335 Float_t timemax = GetHistogramRanges()->GetHistoTimeMax();
1336 Float_t timemin = GetHistogramRanges()->GetHistoTimeMin();
1338 Int_t nresetabins = GetHistogramRanges()->GetHistoTrackResidualEtaBins();
1339 Float_t resetamax = GetHistogramRanges()->GetHistoTrackResidualEtaMax();
1340 Float_t resetamin = GetHistogramRanges()->GetHistoTrackResidualEtaMin();
1341 Int_t nresphibins = GetHistogramRanges()->GetHistoTrackResidualPhiBins();
1342 Float_t resphimax = GetHistogramRanges()->GetHistoTrackResidualPhiMax();
1343 Float_t resphimin = GetHistogramRanges()->GetHistoTrackResidualPhiMin();
1345 Int_t ndedxbins = GetHistogramRanges()->GetHistodEdxBins();
1346 Float_t dedxmax = GetHistogramRanges()->GetHistodEdxMax();
1347 Float_t dedxmin = GetHistogramRanges()->GetHistodEdxMin();
1348 Int_t nPoverEbins = GetHistogramRanges()->GetHistoPOverEBins();
1349 Float_t pOverEmax = GetHistogramRanges()->GetHistoPOverEMax();
1350 Float_t pOverEmin = GetHistogramRanges()->GetHistoPOverEMin();
1352 Int_t nptsumbins = fHistoNPtSumBins;
1353 Float_t ptsummax = fHistoPtSumMax;
1354 Float_t ptsummin = fHistoPtSumMin;
1355 Int_t nptinconebins = fHistoNPtInConeBins;
1356 Float_t ptinconemax = fHistoPtInConeMax;
1357 Float_t ptinconemin = fHistoPtInConeMin;
1359 //Float_t ptthre = GetIsolationCut()->GetPtThreshold();
1360 //Float_t ptsumthre = GetIsolationCut()->GetSumPtThreshold();
1361 //Float_t ptfrac = GetIsolationCut()->GetPtFraction();
1362 Float_t r = GetIsolationCut()->GetConeSize();
1363 Int_t method = GetIsolationCut()->GetICMethod() ;
1364 Int_t particle = GetIsolationCut()->GetParticleTypeInCone() ;
1366 TString sThreshold = "";
1367 if ( method == AliIsolationCut::kSumPtIC )
1369 sThreshold = Form(", %2.2f < #Sigma #it{p}_{T}^{in cone} < %2.2f GeV/#it{c}",
1370 GetIsolationCut()->GetSumPtThreshold(), GetIsolationCut()->GetSumPtThresholdMax());
1371 if(GetIsolationCut()->GetSumPtThresholdMax() > 200)
1372 sThreshold = Form(", #Sigma #it{p}_{T}^{in cone} = %2.2f GeV/#it{c}",
1373 GetIsolationCut()->GetSumPtThreshold());
1375 else if ( method == AliIsolationCut::kPtThresIC)
1377 sThreshold = Form(", %2.2f < #it{p}_{T}^{th} < %2.2f GeV/#it{c}",
1378 GetIsolationCut()->GetPtThreshold(),GetIsolationCut()->GetPtThresholdMax());
1379 if(GetIsolationCut()->GetSumPtThreshold() > 200)
1380 sThreshold = Form(", #it{p}_{T}^{th} = %2.2f GeV/#it{c}",
1381 GetIsolationCut()->GetPtThreshold());
1383 else if ( method == AliIsolationCut::kPtFracIC)
1384 sThreshold = Form(", #Sigma #it{p}_{T}^{in cone}/#it{p}_{T}^{trig} = %2.2f" ,
1385 GetIsolationCut()->GetPtFraction());
1387 TString sParticle = ", x^{0,#pm}";
1388 if ( particle == AliIsolationCut::kOnlyNeutral ) sParticle = ", x^{0}";
1389 else if ( particle == AliIsolationCut::kOnlyCharged ) sParticle = ", x^{#pm}";
1391 TString parTitle = Form("#it{R} = %2.2f%s%s",GetIsolationCut()->GetConeSize(), sThreshold.Data(),sParticle.Data());
1393 TString pileUpName[] = {"SPD","EMCAL","SPDOrEMCAL","SPDAndEMCAL","SPDAndNotEMCAL","EMCALAndNotSPD","NotSPDAndNotEMCAL"} ;
1395 // MC histograms title and name
1396 TString mcPartType[] = { "#gamma", "#gamma_{prompt}", "#gamma_{fragmentation}",
1397 "#pi^{0} (merged #gamma)","#gamma_{#pi decay}",
1398 "#gamma_{#eta decay}","#gamma_{other decay}",
1399 "e^{#pm}","hadrons?"} ;
1401 TString mcPartName[] = { "Photon","PhotonPrompt","PhotonFrag",
1402 "Pi0","Pi0Decay","EtaDecay","OtherDecay",
1403 "Electron","Hadron"} ;
1405 // Primary MC histograms title and name
1406 TString pptype[] = { "#gamma", "#gamma_{#pi decay}","#gamma_{other decay}",
1407 "#gamma_{prompt}","#gamma_{fragmentation}","#gamma_{ISR}"} ;
1409 TString ppname[] = { "Photon","PhotonPi0Decay","PhotonOtherDecay",
1410 "PhotonPrompt","PhotonFrag","PhotonISR"} ;
1414 TString isoName [] = {"NoIso",""};
1415 TString isoTitle[] = {"Not isolated" ,"isolated"};
1417 fhEIso = new TH1F("hE",
1418 Form("Number of isolated particles vs E, %s",parTitle.Data()),
1419 nptbins,ptmin,ptmax);
1420 fhEIso->SetYTitle("d#it{N} / d#it{E}");
1421 fhEIso->SetXTitle("#it{E} (GeV/#it{c})");
1422 outputContainer->Add(fhEIso) ;
1424 fhPtIso = new TH1F("hPt",
1425 Form("Number of isolated particles vs #it{p}_{T}, %s",parTitle.Data()),
1426 nptbins,ptmin,ptmax);
1427 fhPtIso->SetYTitle("d#it{N} / #it{p}_{T}");
1428 fhPtIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1429 outputContainer->Add(fhPtIso) ;
1431 fhPhiIso = new TH2F("hPhi",
1432 Form("Number of isolated particles vs #phi, %s",parTitle.Data()),
1433 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
1434 fhPhiIso->SetYTitle("#phi");
1435 fhPhiIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1436 outputContainer->Add(fhPhiIso) ;
1438 fhEtaIso = new TH2F("hEta",
1439 Form("Number of isolated particles vs #eta, %s",parTitle.Data()),
1440 nptbins,ptmin,ptmax,netabins,etamin,etamax);
1441 fhEtaIso->SetYTitle("#eta");
1442 fhEtaIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1443 outputContainer->Add(fhEtaIso) ;
1445 fhEtaPhiIso = new TH2F("hEtaPhiIso",
1446 Form("Number of isolated particles #eta vs #phi, %s",parTitle.Data()),
1447 netabins,etamin,etamax,nphibins,phimin,phimax);
1448 fhEtaPhiIso->SetXTitle("#eta");
1449 fhEtaPhiIso->SetYTitle("#phi");
1450 outputContainer->Add(fhEtaPhiIso) ;
1452 // Not Isolated histograms, reference histograms
1454 fhENoIso = new TH1F("hENoIso",
1455 Form("Number of not isolated leading particles vs #it{p}_{T}, %s",parTitle.Data()),
1456 nptbins,ptmin,ptmax);
1457 fhENoIso->SetYTitle("#it{counts}");
1458 fhENoIso->SetXTitle("E (GeV/#it{c})");
1459 outputContainer->Add(fhENoIso) ;
1461 fhPtNoIso = new TH1F("hPtNoIso",
1462 Form("Number of not isolated leading particles vs #it{p}_{T}, %s",parTitle.Data()),
1463 nptbins,ptmin,ptmax);
1464 fhPtNoIso->SetYTitle("#it{counts}");
1465 fhPtNoIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1466 outputContainer->Add(fhPtNoIso) ;
1468 fhEtaPhiNoIso = new TH2F("hEtaPhiNoIso",
1469 Form("Number of not isolated leading particles #eta vs #phi, %s",parTitle.Data()),
1470 netabins,etamin,etamax,nphibins,phimin,phimax);
1471 fhEtaPhiNoIso->SetXTitle("#eta");
1472 fhEtaPhiNoIso->SetYTitle("#phi");
1473 outputContainer->Add(fhEtaPhiNoIso) ;
1475 if(fFillHighMultHistograms)
1477 fhPtCentralityIso = new TH2F("hPtCentrality",
1478 Form("centrality vs #it{p}_{T} for isolated particles, %s",parTitle.Data()),
1479 nptbins,ptmin,ptmax, 100,0,100);
1480 fhPtCentralityIso->SetYTitle("centrality");
1481 fhPtCentralityIso->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1482 outputContainer->Add(fhPtCentralityIso) ;
1484 fhPtEventPlaneIso = new TH2F("hPtEventPlane",
1485 Form("event plane angle vs #it{p}_{T} for isolated particles, %s",parTitle.Data()),
1486 nptbins,ptmin,ptmax, 100,0,TMath::Pi());
1487 fhPtEventPlaneIso->SetYTitle("Event plane angle (rad)");
1488 fhPtEventPlaneIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1489 outputContainer->Add(fhPtEventPlaneIso) ;
1492 if(fFillNLMHistograms)
1494 fhPtNLocMaxIso = new TH2F("hPtNLocMax",
1495 Form("Number of isolated particles vs #it{p}_{T}, %s",parTitle.Data()),
1496 nptbins,ptmin,ptmax,10,0,10);
1497 fhPtNLocMaxIso->SetYTitle("#it{NLM}");
1498 fhPtNLocMaxIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1500 fhPtNLocMaxNoIso = new TH2F("hPtNLocMaxNoIso",
1501 Form("Number of not isolated particles vs #it{p}_{T}, %s",parTitle.Data()),
1502 nptbins,ptmin,ptmax,10,0,10);
1503 fhPtNLocMaxNoIso->SetYTitle("#it{NLM}");
1504 fhPtNLocMaxNoIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1505 outputContainer->Add(fhPtNLocMaxNoIso) ;
1508 if(fFillTaggedDecayHistograms)
1510 fhPtDecayIso = new TH1F("hPtDecayIso",
1511 Form("Number of isolated #pi^{0} decay particles vs #it{p}_{T}, %s",parTitle.Data()),
1512 nptbins,ptmin,ptmax);
1513 fhPtDecayIso->SetYTitle("#it{counts}");
1514 fhPtDecayIso->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1515 outputContainer->Add(fhPtDecayIso) ;
1517 fhEtaPhiDecayIso = new TH2F("hEtaPhiDecayIso",
1518 Form("Number of isolated Pi0 decay particles #eta vs #phi, %s",parTitle.Data()),
1519 netabins,etamin,etamax,nphibins,phimin,phimax);
1520 fhEtaPhiDecayIso->SetXTitle("#eta");
1521 fhEtaPhiDecayIso->SetYTitle("#phi");
1522 outputContainer->Add(fhEtaPhiDecayIso) ;
1524 fhPtDecayNoIso = new TH1F("hPtDecayNoIso",
1525 Form("Number of not isolated leading pi0 decay particles vs #it{p}_{T}, %s",parTitle.Data()),
1526 nptbins,ptmin,ptmax);
1527 fhPtDecayNoIso->SetYTitle("#it{counts}");
1528 fhPtDecayNoIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1529 outputContainer->Add(fhPtDecayNoIso) ;
1531 fhEtaPhiDecayNoIso = new TH2F("hEtaPhiDecayNoIso",
1532 Form("Number of not isolated leading Pi0 decay particles #eta vs #phi, %s",parTitle.Data()),
1533 netabins,etamin,etamax,nphibins,phimin,phimax);
1534 fhEtaPhiDecayNoIso->SetXTitle("#eta");
1535 fhEtaPhiDecayNoIso->SetYTitle("#phi");
1536 outputContainer->Add(fhEtaPhiDecayNoIso) ;
1539 fhConeSumPt = new TH2F("hConePtSum",
1540 Form("Track and Cluster #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1541 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1542 fhConeSumPt->SetYTitle("#Sigma #it{p}_{T}");
1543 fhConeSumPt->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1544 outputContainer->Add(fhConeSumPt) ;
1546 fhConeSumPtTrigEtaPhi = new TH2F("hConePtSumTrigEtaPhi",
1547 Form("Trigger #eta vs #phi, #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1548 netabins,etamin,etamax,nphibins,phimin,phimax);
1549 fhConeSumPtTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1550 fhConeSumPtTrigEtaPhi->SetXTitle("#eta_{trigger}");
1551 fhConeSumPtTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1552 outputContainer->Add(fhConeSumPtTrigEtaPhi) ;
1554 fhPtInCone = new TH2F("hPtInCone",
1555 Form("#it{p}_{T} of clusters and tracks in isolation cone for #it{R} = %2.2f",r),
1556 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
1557 fhPtInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
1558 fhPtInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1559 outputContainer->Add(fhPtInCone) ;
1561 if(fFillHighMultHistograms)
1563 fhPtInConeCent = new TH2F("hPtInConeCent",
1564 Form("#it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1565 100,0,100,nptinconebins,ptinconemin,ptinconemax);
1566 fhPtInConeCent->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
1567 fhPtInConeCent->SetXTitle("centrality");
1568 outputContainer->Add(fhPtInConeCent) ;
1571 // Cluster only histograms
1572 if(GetIsolationCut()->GetParticleTypeInCone()!=AliIsolationCut::kOnlyCharged)
1574 fhConeSumPtCluster = new TH2F("hConePtSumCluster",
1575 Form("Cluster #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1576 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1577 fhConeSumPtCluster->SetYTitle("#Sigma #it{p}_{T}");
1578 fhConeSumPtCluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1579 outputContainer->Add(fhConeSumPtCluster) ;
1581 if(fFillCellHistograms)
1583 fhConeSumPtCell = new TH2F("hConePtSumCell",
1584 Form("Cell #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1585 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1586 fhConeSumPtCell->SetYTitle("#Sigma #it{p}_{T}");
1587 fhConeSumPtCell->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1588 outputContainer->Add(fhConeSumPtCell) ;
1591 if(fFillUEBandSubtractHistograms)
1593 fhConeSumPtEtaBandUECluster = new TH2F("hConePtSumEtaBandUECluster",
1594 "#Sigma cluster #it{p}_{T} in UE Eta Band",
1595 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1596 fhConeSumPtEtaBandUECluster->SetYTitle("#Sigma #it{p}_{T}");
1597 fhConeSumPtEtaBandUECluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1598 outputContainer->Add(fhConeSumPtEtaBandUECluster) ;
1600 fhConeSumPtPhiBandUECluster = new TH2F("hConePtSumPhiBandUECluster",
1601 "#Sigma cluster #it{p}_{T} UE Phi Band",
1602 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1603 fhConeSumPtPhiBandUECluster->SetYTitle("#Sigma #it{p}_{T}");
1604 fhConeSumPtPhiBandUECluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1605 outputContainer->Add(fhConeSumPtPhiBandUECluster) ;
1607 fhConeSumPtEtaBandUEClusterTrigEtaPhi = new TH2F("hConePtSumEtaBandUEClusterTrigEtaPhi",
1608 "Trigger #eta vs #phi, #Sigma cluster #it{p}_{T} in UE Eta Band",
1609 netabins,etamin,etamax,nphibins,phimin,phimax);
1610 fhConeSumPtEtaBandUEClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1611 fhConeSumPtEtaBandUEClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
1612 fhConeSumPtEtaBandUEClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1613 outputContainer->Add(fhConeSumPtEtaBandUEClusterTrigEtaPhi) ;
1615 fhConeSumPtPhiBandUEClusterTrigEtaPhi = new TH2F("hConePtSumPhiBandUEClusterTrigEtaPhi",
1616 "Trigger #eta vs #phi, #Sigma cluster #it{p}_{T} UE Phi Band",
1617 netabins,etamin,etamax,nphibins,phimin,phimax);
1618 fhConeSumPtPhiBandUEClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1619 fhConeSumPtPhiBandUEClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
1620 fhConeSumPtPhiBandUEClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1621 outputContainer->Add(fhConeSumPtPhiBandUEClusterTrigEtaPhi) ;
1622 if(fFillCellHistograms)
1625 fhConeSumPtEtaBandUECell = new TH2F("hConePtSumEtaBandUECell",
1626 "#Sigma cell #it{p}_{T} in UE Eta Band",
1627 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1628 fhConeSumPtEtaBandUECell->SetYTitle("#Sigma #it{p}_{T}");
1629 fhConeSumPtEtaBandUECell->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1630 outputContainer->Add(fhConeSumPtEtaBandUECell) ;
1632 fhConeSumPtPhiBandUECell = new TH2F("hConePtSumPhiBandUECell",
1633 "#Sigma cell #it{p}_{T} UE Phi Band",
1634 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1635 fhConeSumPtPhiBandUECell->SetYTitle("#Sigma #it{p}_{T}");
1636 fhConeSumPtPhiBandUECell->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1637 outputContainer->Add(fhConeSumPtPhiBandUECell) ;
1639 fhConeSumPtEtaBandUECellTrigEtaPhi = new TH2F("hConePtSumEtaBandUECellTrigEtaPhi",
1640 "Trigger #eta vs #phi, #Sigma cell #it{p}_{T} in UE Eta Band",
1641 netabins,etamin,etamax,nphibins,phimin,phimax);
1642 fhConeSumPtEtaBandUECellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1643 fhConeSumPtEtaBandUECellTrigEtaPhi->SetXTitle("#eta_{trigger}");
1644 fhConeSumPtEtaBandUECellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1645 outputContainer->Add(fhConeSumPtEtaBandUECellTrigEtaPhi) ;
1647 fhConeSumPtPhiBandUECellTrigEtaPhi = new TH2F("hConePtSumPhiBandUECellTrigEtaPhi",
1648 "Trigger #eta vs #phi, #Sigma cell #it{p}_{T} UE Phi Band",
1649 netabins,etamin,etamax,nphibins,phimin,phimax);
1650 fhConeSumPtPhiBandUECellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1651 fhConeSumPtPhiBandUECellTrigEtaPhi->SetXTitle("#eta_{trigger}");
1652 fhConeSumPtPhiBandUECellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1653 outputContainer->Add(fhConeSumPtPhiBandUECellTrigEtaPhi) ;
1656 fhEtaBandCluster = new TH2F("hEtaBandCluster",
1657 Form("#eta vs #phi of clusters in #eta band isolation cone for #it{R} = %2.2f",r),
1658 netabins,-1,1,nphibins,0,TMath::TwoPi());
1659 fhEtaBandCluster->SetXTitle("#eta");
1660 fhEtaBandCluster->SetYTitle("#phi");
1661 outputContainer->Add(fhEtaBandCluster) ;
1663 fhPhiBandCluster = new TH2F("hPhiBandCluster",
1664 Form("#eta vs #phi of clusters in #phi band isolation cone for #it{R} = %2.2f",r),
1665 netabins,-1,1,nphibins,0,TMath::TwoPi());
1666 fhPhiBandCluster->SetXTitle("#eta");
1667 fhPhiBandCluster->SetYTitle("#phi");
1668 outputContainer->Add(fhPhiBandCluster) ;
1670 fhEtaPhiInConeCluster= new TH2F("hEtaPhiInConeCluster",
1671 Form("#eta vs #phi of clusters in cone for #it{R} = %2.2f",r),
1672 netabins,-1,1,nphibins,0,TMath::TwoPi());
1673 fhEtaPhiInConeCluster->SetXTitle("#eta");
1674 fhEtaPhiInConeCluster->SetYTitle("#phi");
1675 outputContainer->Add(fhEtaPhiInConeCluster) ;
1677 fhEtaPhiCluster= new TH2F("hEtaPhiCluster",
1678 Form("#eta vs #phi of all clusters"),
1679 netabins,-1,1,nphibins,0,TMath::TwoPi());
1680 fhEtaPhiCluster->SetXTitle("#eta");
1681 fhEtaPhiCluster->SetYTitle("#phi");
1682 outputContainer->Add(fhEtaPhiCluster) ;
1686 fhPtClusterInCone = new TH2F("hPtClusterInCone",
1687 Form("#it{p}_{T} of clusters in isolation cone for #it{R} = %2.2f",r),
1688 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
1689 fhPtClusterInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
1690 fhPtClusterInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1691 outputContainer->Add(fhPtClusterInCone) ;
1693 if(fFillCellHistograms)
1695 fhPtCellInCone = new TH2F("hPtCellInCone",
1696 Form("#it{p}_{T} of cells in isolation cone for #it{R} = %2.2f",r),
1697 nptbins,ptmin,ptmax,1000,0,50);
1698 fhPtCellInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
1699 fhPtCellInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1700 outputContainer->Add(fhPtCellInCone) ;
1702 fhEtaBandCell = new TH2F("hEtaBandCell",
1703 Form("#col vs #row of cells in #eta band isolation cone for #it{R} = %2.2f",r),
1705 fhEtaBandCell->SetXTitle("#col");
1706 fhEtaBandCell->SetYTitle("#row");
1707 outputContainer->Add(fhEtaBandCell) ;
1709 fhPhiBandCell = new TH2F("hPhiBandCell",
1710 Form("#col vs #row of cells in #phi band isolation cone for #it{R} = %2.2f",r),
1712 fhPhiBandCell->SetXTitle("#col");
1713 fhPhiBandCell->SetYTitle("#row");
1714 outputContainer->Add(fhPhiBandCell) ;
1717 if(fFillUEBandSubtractHistograms)
1719 fhConeSumPtEtaUESubCluster = new TH2F("hConeSumPtEtaUESubCluster",
1720 Form("Clusters #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
1721 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1722 fhConeSumPtEtaUESubCluster->SetYTitle("#Sigma #it{p}_{T}");
1723 fhConeSumPtEtaUESubCluster->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1724 outputContainer->Add(fhConeSumPtEtaUESubCluster) ;
1726 fhConeSumPtPhiUESubCluster = new TH2F("hConeSumPtPhiUESubCluster",
1727 Form("Clusters #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
1728 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1729 fhConeSumPtPhiUESubCluster->SetYTitle("#Sigma #it{p}_{T}");
1730 fhConeSumPtPhiUESubCluster->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1731 outputContainer->Add(fhConeSumPtPhiUESubCluster) ;
1733 fhConeSumPtEtaUESubClusterTrigEtaPhi = new TH2F("hConeSumPtEtaUESubClusterTrigEtaPhi",
1734 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),
1735 netabins,etamin,etamax,nphibins,phimin,phimax);
1736 fhConeSumPtEtaUESubClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1737 fhConeSumPtEtaUESubClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
1738 fhConeSumPtEtaUESubClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1739 outputContainer->Add(fhConeSumPtEtaUESubClusterTrigEtaPhi) ;
1741 fhConeSumPtPhiUESubClusterTrigEtaPhi = new TH2F("hConeSumPtPhiUESubClusterTrigEtaPhi",
1742 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),
1743 netabins,etamin,etamax,nphibins,phimin,phimax);
1744 fhConeSumPtPhiUESubClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1745 fhConeSumPtPhiUESubClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
1746 fhConeSumPtPhiUESubClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1747 outputContainer->Add(fhConeSumPtPhiUESubClusterTrigEtaPhi) ;
1749 if(fFillCellHistograms)
1751 fhConeSumPtEtaUESubCell = new TH2F("hConeSumPtEtaUESubCell",
1752 Form("Cells #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
1753 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1754 fhConeSumPtEtaUESubCell->SetYTitle("#Sigma #it{p}_{T}");
1755 fhConeSumPtEtaUESubCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1756 outputContainer->Add(fhConeSumPtEtaUESubCell) ;
1758 fhConeSumPtPhiUESubCell = new TH2F("hConeSumPtPhiUESubCell",
1759 Form("Cells #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
1760 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1761 fhConeSumPtPhiUESubCell->SetYTitle("#Sigma #it{p}_{T}");
1762 fhConeSumPtPhiUESubCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1763 outputContainer->Add(fhConeSumPtPhiUESubCell) ;
1765 fhConeSumPtEtaUESubCellTrigEtaPhi = new TH2F("hConeSumPtEtaUESubCellTrigEtaPhi",
1766 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),
1767 netabins,etamin,etamax,nphibins,phimin,phimax);
1768 fhConeSumPtEtaUESubCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1769 fhConeSumPtEtaUESubCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
1770 fhConeSumPtEtaUESubCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1771 outputContainer->Add(fhConeSumPtEtaUESubCellTrigEtaPhi) ;
1773 fhConeSumPtPhiUESubCellTrigEtaPhi = new TH2F("hConeSumPtPhiUESubCellTrigEtaPhi",
1774 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),
1775 netabins,etamin,etamax,nphibins,phimin,phimax);
1776 fhConeSumPtPhiUESubCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1777 fhConeSumPtPhiUESubCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
1778 fhConeSumPtPhiUESubCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1779 outputContainer->Add(fhConeSumPtPhiUESubCellTrigEtaPhi) ;
1782 fhFractionClusterOutConeEta = new TH2F("hFractionClusterOutConeEta",
1783 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #eta acceptance",r),
1784 nptbins,ptmin,ptmax,100,0,1);
1785 fhFractionClusterOutConeEta->SetYTitle("#it{fraction}");
1786 fhFractionClusterOutConeEta->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
1787 outputContainer->Add(fhFractionClusterOutConeEta) ;
1789 fhFractionClusterOutConeEtaTrigEtaPhi = new TH2F("hFractionClusterOutConeEtaTrigEtaPhi",
1790 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #eta acceptance, in trigger #eta-#phi ",r),
1791 netabins,etamin,etamax,nphibins,phimin,phimax);
1792 fhFractionClusterOutConeEtaTrigEtaPhi->SetZTitle("#it{fraction}");
1793 fhFractionClusterOutConeEtaTrigEtaPhi->SetXTitle("#eta_{trigger}");
1794 fhFractionClusterOutConeEtaTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1795 outputContainer->Add(fhFractionClusterOutConeEtaTrigEtaPhi) ;
1797 fhFractionClusterOutConePhi = new TH2F("hFractionClusterOutConePhi",
1798 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #phi acceptance",r),
1799 nptbins,ptmin,ptmax,100,0,1);
1800 fhFractionClusterOutConePhi->SetYTitle("#it{fraction}");
1801 fhFractionClusterOutConePhi->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
1802 outputContainer->Add(fhFractionClusterOutConePhi) ;
1804 fhFractionClusterOutConePhiTrigEtaPhi = new TH2F("hFractionClusterOutConePhiTrigEtaPhi",
1805 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #phi acceptance, in trigger #eta-#phi ",r),
1806 netabins,etamin,etamax,nphibins,phimin,phimax);
1807 fhFractionClusterOutConePhiTrigEtaPhi->SetZTitle("#it{fraction}");
1808 fhFractionClusterOutConePhiTrigEtaPhi->SetXTitle("#eta_{trigger}");
1809 fhFractionClusterOutConePhiTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1810 outputContainer->Add(fhFractionClusterOutConePhiTrigEtaPhi) ;
1812 fhConeSumPtSubvsConeSumPtTotPhiCluster = new TH2F("hConeSumPtSubvsConeSumPtTotPhiCluster",
1813 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),
1814 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1815 fhConeSumPtSubvsConeSumPtTotPhiCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1816 fhConeSumPtSubvsConeSumPtTotPhiCluster->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
1817 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotPhiCluster);
1819 fhConeSumPtSubNormvsConeSumPtTotPhiCluster = new TH2F("hConeSumPtSubNormvsConeSumPtTotPhiCluster",
1820 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),
1821 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1822 fhConeSumPtSubNormvsConeSumPtTotPhiCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1823 fhConeSumPtSubNormvsConeSumPtTotPhiCluster->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
1824 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotPhiCluster);
1826 fhConeSumPtSubvsConeSumPtTotEtaCluster = new TH2F("hConeSumPtSubvsConeSumPtTotEtaCluster",
1827 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),
1828 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1829 fhConeSumPtSubvsConeSumPtTotEtaCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1830 fhConeSumPtSubvsConeSumPtTotEtaCluster->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
1831 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotEtaCluster);
1833 fhConeSumPtSubNormvsConeSumPtTotEtaCluster = new TH2F("hConeSumPtSubNormvsConeSumPtTotEtaCluster",
1834 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),
1835 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1836 fhConeSumPtSubNormvsConeSumPtTotEtaCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1837 fhConeSumPtSubNormvsConeSumPtTotEtaCluster->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
1838 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotEtaCluster);
1840 fhConeSumPtVSUEClusterEtaBand = new TH2F("hConeSumPtVSUEClusterEtaBand",
1841 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in eta band for cluster (before normalization), R=%2.2f",r),
1842 nptsumbins,ptsummin,ptsummax,2*nptsumbins,ptsummin,2*ptsummax);
1843 fhConeSumPtVSUEClusterEtaBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
1844 fhConeSumPtVSUEClusterEtaBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
1845 outputContainer->Add(fhConeSumPtVSUEClusterEtaBand);
1847 fhConeSumPtVSUEClusterPhiBand = new TH2F("hConeSumPtVSUEClusterPhiBand",
1848 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in phi band for cluster (before normalization), R=%2.2f",r),
1849 nptsumbins,ptsummin,ptsummax,8*nptsumbins,ptsummin,8*ptsummax);
1850 fhConeSumPtVSUEClusterPhiBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
1851 fhConeSumPtVSUEClusterPhiBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
1852 outputContainer->Add(fhConeSumPtVSUEClusterPhiBand);
1854 if(fFillCellHistograms)
1856 fhFractionCellOutConeEta = new TH2F("hFractionCellOutConeEta",
1857 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #eta acceptance",r),
1858 nptbins,ptmin,ptmax,100,0,1);
1859 fhFractionCellOutConeEta->SetYTitle("#it{fraction}");
1860 fhFractionCellOutConeEta->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
1861 outputContainer->Add(fhFractionCellOutConeEta) ;
1863 fhFractionCellOutConeEtaTrigEtaPhi = new TH2F("hFractionCellOutConeEtaTrigEtaPhi",
1864 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #eta acceptance, in trigger #eta-#phi ",r),
1865 netabins,etamin,etamax,nphibins,phimin,phimax);
1866 fhFractionCellOutConeEtaTrigEtaPhi->SetZTitle("#it{fraction}");
1867 fhFractionCellOutConeEtaTrigEtaPhi->SetXTitle("#eta_{trigger}");
1868 fhFractionCellOutConeEtaTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1869 outputContainer->Add(fhFractionCellOutConeEtaTrigEtaPhi) ;
1871 fhFractionCellOutConePhi = new TH2F("hFractionCellOutConePhi",
1872 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #phi acceptance",r),
1873 nptbins,ptmin,ptmax,100,0,1);
1874 fhFractionCellOutConePhi->SetYTitle("#it{fraction}");
1875 fhFractionCellOutConePhi->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
1876 outputContainer->Add(fhFractionCellOutConePhi) ;
1878 fhFractionCellOutConePhiTrigEtaPhi = new TH2F("hFractionCellOutConePhiTrigEtaPhi",
1879 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #phi acceptance, in trigger #eta-#phi ",r),
1880 netabins,etamin,etamax,nphibins,phimin,phimax);
1881 fhFractionCellOutConePhiTrigEtaPhi->SetZTitle("#it{fraction}");
1882 fhFractionCellOutConePhiTrigEtaPhi->SetXTitle("#eta_{trigger}");
1883 fhFractionCellOutConePhiTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1884 outputContainer->Add(fhFractionCellOutConePhiTrigEtaPhi) ;
1887 fhConeSumPtSubvsConeSumPtTotPhiCell = new TH2F("hConeSumPtSubvsConeSumPtTotPhiCell",
1888 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),
1889 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1890 fhConeSumPtSubvsConeSumPtTotPhiCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1891 fhConeSumPtSubvsConeSumPtTotPhiCell->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
1892 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotPhiCell);
1894 fhConeSumPtSubNormvsConeSumPtTotPhiCell = new TH2F("hConeSumPtSubNormvsConeSumPtTotPhiCell",
1895 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),
1896 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1897 fhConeSumPtSubNormvsConeSumPtTotPhiCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1898 fhConeSumPtSubNormvsConeSumPtTotPhiCell->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
1899 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotPhiCell);
1901 fhConeSumPtSubvsConeSumPtTotEtaCell = new TH2F("hConeSumPtSubvsConeSumPtTotEtaCell",
1902 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),
1903 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1904 fhConeSumPtSubvsConeSumPtTotEtaCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1905 fhConeSumPtSubvsConeSumPtTotEtaCell->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
1906 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotEtaCell);
1908 fhConeSumPtSubNormvsConeSumPtTotEtaCell = new TH2F("hConeSumPtSubNormvsConeSumPtTotEtaCell",
1909 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),
1910 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1911 fhConeSumPtSubNormvsConeSumPtTotEtaCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1912 fhConeSumPtSubNormvsConeSumPtTotEtaCell->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
1913 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotEtaCell);
1918 // Track only histograms
1919 if(GetIsolationCut()->GetParticleTypeInCone()!=AliIsolationCut::kOnlyNeutral)
1921 fhConeSumPtTrack = new TH2F("hConePtSumTrack",
1922 Form("Track #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1923 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1924 fhConeSumPtTrack->SetYTitle("#Sigma #it{p}_{T}");
1925 fhConeSumPtTrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1926 outputContainer->Add(fhConeSumPtTrack) ;
1928 fhPtTrackInCone = new TH2F("hPtTrackInCone",
1929 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f",r),
1930 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
1931 fhPtTrackInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
1932 fhPtTrackInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1933 outputContainer->Add(fhPtTrackInCone) ;
1936 if(fFillUEBandSubtractHistograms)
1938 fhConeSumPtEtaBandUETrack = new TH2F("hConePtSumEtaBandUETrack",
1939 "#Sigma track #it{p}_{T} in UE Eta Band",
1940 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1941 fhConeSumPtEtaBandUETrack->SetYTitle("#Sigma #it{p}_{T}");
1942 fhConeSumPtEtaBandUETrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1943 outputContainer->Add(fhConeSumPtEtaBandUETrack) ;
1945 fhConeSumPtPhiBandUETrack = new TH2F("hConePtSumPhiBandUETrack",
1946 "#Sigma track #it{p}_{T} in UE Phi Band",
1947 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax*8);
1948 fhConeSumPtPhiBandUETrack->SetYTitle("#Sigma #it{p}_{T}");
1949 fhConeSumPtPhiBandUETrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1950 outputContainer->Add(fhConeSumPtPhiBandUETrack) ;
1953 fhConeSumPtEtaBandUETrackTrigEtaPhi = new TH2F("hConePtSumEtaBandUETrackTrigEtaPhi",
1954 "Trigger #eta vs #phi, #Sigma track #it{p}_{T} in UE Eta Band",
1955 netabins,etamin,etamax,nphibins,phimin,phimax);
1956 fhConeSumPtEtaBandUETrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1957 fhConeSumPtEtaBandUETrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
1958 fhConeSumPtEtaBandUETrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1959 outputContainer->Add(fhConeSumPtEtaBandUETrackTrigEtaPhi) ;
1961 fhConeSumPtPhiBandUETrackTrigEtaPhi = new TH2F("hConePtSumPhiBandUETrackTrigEtaPhi",
1962 "Trigger #eta vs #phi, #Sigma track #it{p}_{T} in UE Phi Band",
1963 netabins,etamin,etamax,nphibins,phimin,phimax);
1964 fhConeSumPtPhiBandUETrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1965 fhConeSumPtPhiBandUETrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
1966 fhConeSumPtPhiBandUETrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1967 outputContainer->Add(fhConeSumPtPhiBandUETrackTrigEtaPhi) ;
1969 fhEtaBandTrack = new TH2F("hEtaBandTrack",
1970 Form("#eta vs #phi of tracks in #eta band isolation cone for #it{R} = %2.2f",r),
1971 netabins,-1,1,nphibins,0,TMath::TwoPi());
1972 fhEtaBandTrack->SetXTitle("#eta");
1973 fhEtaBandTrack->SetYTitle("#phi");
1974 outputContainer->Add(fhEtaBandTrack) ;
1976 fhPhiBandTrack = new TH2F("hPhiBandTrack",
1977 Form("#eta vs #phi of tracks in #phi band isolation cone for #it{R} = %2.2f",r),
1978 netabins,-1,1,nphibins,0,TMath::TwoPi());
1979 fhPhiBandTrack->SetXTitle("#eta");
1980 fhPhiBandTrack->SetYTitle("#phi");
1981 outputContainer->Add(fhPhiBandTrack) ;
1983 fhConeSumPtEtaUESubTrack = new TH2F("hConeSumPtEtaUESubTrack",
1984 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
1985 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1986 fhConeSumPtEtaUESubTrack->SetYTitle("#Sigma #it{p}_{T}");
1987 fhConeSumPtEtaUESubTrack->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1988 outputContainer->Add(fhConeSumPtEtaUESubTrack) ;
1990 fhConeSumPtPhiUESubTrack = new TH2F("hConeSumPtPhiUESubTrack",
1991 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
1992 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1993 fhConeSumPtPhiUESubTrack->SetYTitle("#Sigma #it{p}_{T}");
1994 fhConeSumPtPhiUESubTrack->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1995 outputContainer->Add(fhConeSumPtPhiUESubTrack) ;
1997 fhConeSumPtEtaUESubTrackTrigEtaPhi = new TH2F("hConeSumPtEtaUESubTrackTrigEtaPhi",
1998 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),
1999 netabins,etamin,etamax,nphibins,phimin,phimax);
2000 fhConeSumPtEtaUESubTrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2001 fhConeSumPtEtaUESubTrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2002 fhConeSumPtEtaUESubTrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2003 outputContainer->Add(fhConeSumPtEtaUESubTrackTrigEtaPhi) ;
2005 fhConeSumPtPhiUESubTrackTrigEtaPhi = new TH2F("hConeSumPtPhiUESubTrackTrigEtaPhi",
2006 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),
2007 netabins,etamin,etamax,nphibins,phimin,phimax);
2008 fhConeSumPtPhiUESubTrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2009 fhConeSumPtPhiUESubTrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2010 fhConeSumPtPhiUESubTrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2011 outputContainer->Add(fhConeSumPtPhiUESubTrackTrigEtaPhi) ;
2013 fhFractionTrackOutConeEta = new TH2F("hFractionTrackOutConeEta",
2014 Form("Fraction of the isolation cone #it{R} = %2.2f, out of tracks #eta acceptance",r),
2015 nptbins,ptmin,ptmax,100,0,1);
2016 fhFractionTrackOutConeEta->SetYTitle("#it{fraction}");
2017 fhFractionTrackOutConeEta->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
2018 outputContainer->Add(fhFractionTrackOutConeEta) ;
2020 fhFractionTrackOutConeEtaTrigEtaPhi = new TH2F("hFractionTrackOutConeEtaTrigEtaPhi",
2021 Form("Fraction of the isolation cone #it{R} = %2.2f, out of tracks #eta acceptance, in trigger #eta-#phi ",r),
2022 netabins,etamin,etamax,nphibins,phimin,phimax);
2023 fhFractionTrackOutConeEtaTrigEtaPhi->SetZTitle("#it{fraction}");
2024 fhFractionTrackOutConeEtaTrigEtaPhi->SetXTitle("#eta_{trigger}");
2025 fhFractionTrackOutConeEtaTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2026 outputContainer->Add(fhFractionTrackOutConeEtaTrigEtaPhi) ;
2028 fhConeSumPtSubvsConeSumPtTotPhiTrack = new TH2F("hConeSumPtSubvsConeSumPtTotPhiTrack",
2029 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),
2030 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2031 fhConeSumPtSubvsConeSumPtTotPhiTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2032 fhConeSumPtSubvsConeSumPtTotPhiTrack->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
2033 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotPhiTrack);
2035 fhConeSumPtSubNormvsConeSumPtTotPhiTrack = new TH2F("hConeSumPtSubNormvsConeSumPtTotPhiTrack",
2036 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),
2037 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2038 fhConeSumPtSubNormvsConeSumPtTotPhiTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2039 fhConeSumPtSubNormvsConeSumPtTotPhiTrack->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2040 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotPhiTrack);
2042 fhConeSumPtSubvsConeSumPtTotEtaTrack = new TH2F("hConeSumPtSubvsConeSumPtTotEtaTrack",
2043 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),
2044 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2045 fhConeSumPtSubvsConeSumPtTotEtaTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2046 fhConeSumPtSubvsConeSumPtTotEtaTrack->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
2047 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotEtaTrack);
2049 fhConeSumPtSubNormvsConeSumPtTotEtaTrack = new TH2F("hConeSumPtSubNormvsConeSumPtTotEtaTrack",
2050 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),
2051 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2052 fhConeSumPtSubNormvsConeSumPtTotEtaTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2053 fhConeSumPtSubNormvsConeSumPtTotEtaTrack->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2054 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotEtaTrack);
2057 // UE in perpendicular cone
2058 fhPerpConeSumPt = new TH2F("hPerpConePtSum",
2059 Form("#Sigma #it{p}_{T} in isolation cone at #pm 45 degree phi from trigger particle, #it{R} = %2.2f",r),
2060 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2061 fhPerpConeSumPt->SetYTitle("#Sigma #it{p}_{T}");
2062 fhPerpConeSumPt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2063 outputContainer->Add(fhPerpConeSumPt) ;
2065 fhPtInPerpCone = new TH2F("hPtInPerpCone",
2066 Form("#it{p}_{T} in isolation cone at #pm 45 degree phi from trigger particle, #it{R} = %2.2f",r),
2067 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2068 fhPtInPerpCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2069 fhPtInPerpCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2070 outputContainer->Add(fhPtInPerpCone) ;
2072 fhEtaPhiTrack= new TH2F("hEtaPhiTrack",
2073 Form("#eta vs #phi of all Tracks"),
2074 netabins,-1,1,nphibins,0,TMath::TwoPi());
2075 fhEtaPhiTrack->SetXTitle("#eta");
2076 fhEtaPhiTrack->SetYTitle("#phi");
2077 outputContainer->Add(fhEtaPhiTrack) ;
2079 fhEtaPhiInConeTrack= new TH2F("hEtaPhiInConeTrack",
2080 Form("#eta vs #phi of Tracks in cone for #it{R} = %2.2f",r),
2081 netabins,-1,1,nphibins,0,TMath::TwoPi());
2082 fhEtaPhiInConeTrack->SetXTitle("#eta");
2083 fhEtaPhiInConeTrack->SetYTitle("#phi");
2084 outputContainer->Add(fhEtaPhiInConeTrack) ;
2086 fhConeSumPtVSUETracksEtaBand = new TH2F("hConeSumPtVSUETracksEtaBand",
2087 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in eta band for tracks (before normalization), R=%2.2f",r),
2088 nptsumbins,ptsummin,ptsummax,2*nptsumbins,ptsummin,2*ptsummax);
2089 fhConeSumPtVSUETracksEtaBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
2090 fhConeSumPtVSUETracksEtaBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
2091 outputContainer->Add(fhConeSumPtVSUETracksEtaBand);
2093 fhConeSumPtVSUETracksPhiBand = new TH2F("hConeSumPtVSUETracksPhiBand",
2094 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in phi band for tracks (before normalization), R=%2.2f",r),
2095 nptsumbins,ptsummin,ptsummax,8*nptsumbins,ptsummin,8*ptsummax);
2096 fhConeSumPtVSUETracksPhiBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
2097 fhConeSumPtVSUETracksPhiBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
2098 outputContainer->Add(fhConeSumPtVSUETracksPhiBand);
2102 if(GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kNeutralAndCharged )
2104 fhConeSumPtClustervsTrack = new TH2F("hConePtSumClustervsTrack",
2105 Form("Track vs Cluster #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2106 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2107 fhConeSumPtClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2108 fhConeSumPtClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2109 outputContainer->Add(fhConeSumPtClustervsTrack) ;
2111 if(fFillCellHistograms)
2113 fhConeSumPtCellvsTrack = new TH2F("hConePtSumCellvsTrack",
2114 Form("Track vs cell #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2115 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2116 fhConeSumPtCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2117 fhConeSumPtCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2118 outputContainer->Add(fhConeSumPtCellvsTrack) ;
2120 fhConeSumPtCellTrack = new TH2F("hConePtSumCellTrack",
2121 Form("Track and Cell #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2122 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2123 fhConeSumPtCellTrack->SetYTitle("#Sigma #it{p}_{T}");
2124 fhConeSumPtCellTrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2125 outputContainer->Add(fhConeSumPtCellTrack) ;
2127 fhConeSumPtCellTrackTrigEtaPhi = new TH2F("hConePtSumCellTrackTrigEtaPhi",
2128 Form("Trigger #eta vs #phi, #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2129 netabins,etamin,etamax,nphibins,phimin,phimax);
2130 fhConeSumPtCellTrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2131 fhConeSumPtCellTrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2132 fhConeSumPtCellTrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2133 outputContainer->Add(fhConeSumPtCellTrackTrigEtaPhi) ;
2137 if(fFillUEBandSubtractHistograms)
2139 fhConeSumPtEtaUESub = new TH2F("hConeSumPtEtaUESub",
2140 Form("#Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
2141 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2142 fhConeSumPtEtaUESub->SetYTitle("#Sigma #it{p}_{T}");
2143 fhConeSumPtEtaUESub->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2144 outputContainer->Add(fhConeSumPtEtaUESub) ;
2146 fhConeSumPtPhiUESub = new TH2F("hConeSumPtPhiUESub",
2147 Form("#Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
2148 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2149 fhConeSumPtPhiUESub->SetYTitle("#Sigma #it{p}_{T}");
2150 fhConeSumPtPhiUESub->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2151 outputContainer->Add(fhConeSumPtPhiUESub) ;
2153 fhConeSumPtEtaUESubTrigEtaPhi = new TH2F("hConeSumPtEtaUESubTrigEtaPhi",
2154 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),
2155 netabins,etamin,etamax,nphibins,phimin,phimax);
2156 fhConeSumPtEtaUESubTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2157 fhConeSumPtEtaUESubTrigEtaPhi->SetXTitle("#eta_{trigger}");
2158 fhConeSumPtEtaUESubTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2159 outputContainer->Add(fhConeSumPtEtaUESubTrigEtaPhi) ;
2161 fhConeSumPtPhiUESubTrigEtaPhi = new TH2F("hConeSumPtPhiUESubTrigEtaPhi",
2162 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),
2163 netabins,etamin,etamax,nphibins,phimin,phimax);
2164 fhConeSumPtPhiUESubTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2165 fhConeSumPtPhiUESubTrigEtaPhi->SetXTitle("#eta_{trigger}");
2166 fhConeSumPtPhiUESubTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2167 outputContainer->Add(fhConeSumPtPhiUESubTrigEtaPhi) ;
2169 fhConeSumPtEtaUESubClustervsTrack = new TH2F("hConePtSumEtaUESubClustervsTrack",
2170 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub eta band in isolation cone for #it{R} = %2.2f",r),
2171 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2172 fhConeSumPtEtaUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2173 fhConeSumPtEtaUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2174 outputContainer->Add(fhConeSumPtEtaUESubClustervsTrack) ;
2176 fhConeSumPtPhiUESubClustervsTrack = new TH2F("hConePhiUESubPtSumClustervsTrack",
2177 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub phi band in isolation cone for #it{R} = %2.2f",r),
2178 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2179 fhConeSumPtPhiUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2180 fhConeSumPtPhiUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2181 outputContainer->Add(fhConeSumPtPhiUESubClustervsTrack) ;
2183 fhEtaBandClustervsTrack = new TH2F("hEtaBandClustervsTrack",
2184 Form("Track vs Cluster #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2185 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2186 fhEtaBandClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2187 fhEtaBandClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2188 outputContainer->Add(fhEtaBandClustervsTrack) ;
2190 fhPhiBandClustervsTrack = new TH2F("hPhiBandClustervsTrack",
2191 Form("Track vs Cluster #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2192 nptsumbins,ptsummin,ptsummax*4,nptsumbins,ptsummin,ptsummax*8);
2193 fhPhiBandClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2194 fhPhiBandClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2195 outputContainer->Add(fhPhiBandClustervsTrack) ;
2197 fhEtaBandNormClustervsTrack = new TH2F("hEtaBandNormClustervsTrack",
2198 Form("Track vs Cluster #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2199 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2200 fhEtaBandNormClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2201 fhEtaBandNormClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2202 outputContainer->Add(fhEtaBandNormClustervsTrack) ;
2204 fhPhiBandNormClustervsTrack = new TH2F("hPhiBandNormClustervsTrack",
2205 Form("Track vs Cluster #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2206 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2207 fhPhiBandNormClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2208 fhPhiBandNormClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2209 outputContainer->Add(fhPhiBandNormClustervsTrack) ;
2211 fhConeSumPtEtaUESubClustervsTrack = new TH2F("hConePtSumEtaUESubClustervsTrack",
2212 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub eta band in isolation cone for #it{R} = %2.2f",r),
2213 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2214 fhConeSumPtEtaUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2215 fhConeSumPtEtaUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2216 outputContainer->Add(fhConeSumPtEtaUESubClustervsTrack) ;
2218 fhConeSumPtPhiUESubClustervsTrack = new TH2F("hConePhiUESubPtSumClustervsTrack",
2219 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub phi band in isolation cone for #it{R} = %2.2f",r),
2220 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2221 fhConeSumPtPhiUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2222 fhConeSumPtPhiUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2223 outputContainer->Add(fhConeSumPtPhiUESubClustervsTrack) ;
2225 if(fFillCellHistograms)
2228 fhConeSumPtEtaUESubCellvsTrack = new TH2F("hConePtSumEtaUESubCellvsTrack",
2229 Form("Track vs Cell #Sigma #it{p}_{T} UE sub eta band in isolation cone for #it{R} = %2.2f",r),
2230 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2231 fhConeSumPtEtaUESubCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2232 fhConeSumPtEtaUESubCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2233 outputContainer->Add(fhConeSumPtEtaUESubCellvsTrack) ;
2235 fhConeSumPtPhiUESubCellvsTrack = new TH2F("hConePhiUESubPtSumCellvsTrack",
2236 Form("Track vs Cell #Sigma #it{p}_{T} UE sub phi band in isolation cone for #it{R} = %2.2f",r),
2237 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2238 fhConeSumPtPhiUESubCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2239 fhConeSumPtPhiUESubCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2240 outputContainer->Add(fhConeSumPtPhiUESubCellvsTrack) ;
2242 fhEtaBandCellvsTrack = new TH2F("hEtaBandCellvsTrack",
2243 Form("Track vs Cell #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2244 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2245 fhEtaBandCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2246 fhEtaBandCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2247 outputContainer->Add(fhEtaBandCellvsTrack) ;
2249 fhPhiBandCellvsTrack = new TH2F("hPhiBandCellvsTrack",
2250 Form("Track vs Cell #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2251 nptsumbins,ptsummin,ptsummax*4,nptsumbins,ptsummin,ptsummax*8);
2252 fhPhiBandCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2253 fhPhiBandCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2254 outputContainer->Add(fhPhiBandCellvsTrack) ;
2256 fhEtaBandNormCellvsTrack = new TH2F("hEtaBandNormCellvsTrack",
2257 Form("Track vs Cell #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2258 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2259 fhEtaBandNormCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2260 fhEtaBandNormCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2261 outputContainer->Add(fhEtaBandNormCellvsTrack) ;
2263 fhPhiBandNormCellvsTrack = new TH2F("hPhiBandNormCellvsTrack",
2264 Form("Track vs Cell #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2265 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2266 fhPhiBandNormCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2267 fhPhiBandNormCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2268 outputContainer->Add(fhPhiBandNormCellvsTrack) ;
2270 fhConeSumPtEtaUESubTrackCell = new TH2F("hConeSumPtEtaUESubTrackCell",
2271 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
2272 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2273 fhConeSumPtEtaUESubTrackCell->SetYTitle("#Sigma #it{p}_{T}");
2274 fhConeSumPtEtaUESubTrackCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2275 outputContainer->Add(fhConeSumPtEtaUESubTrackCell) ;
2277 fhConeSumPtPhiUESubTrackCell = new TH2F("hConeSumPtPhiUESubTrackCell",
2278 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
2279 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2280 fhConeSumPtPhiUESubTrackCell->SetYTitle("#Sigma #it{p}_{T}");
2281 fhConeSumPtPhiUESubTrackCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2282 outputContainer->Add(fhConeSumPtPhiUESubTrackCell) ;
2284 fhConeSumPtEtaUESubTrackCellTrigEtaPhi = new TH2F("hConeSumPtEtaUESubTrackCellTrigEtaPhi",
2285 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),
2286 netabins,etamin,etamax,nphibins,phimin,phimax);
2287 fhConeSumPtEtaUESubTrackCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2288 fhConeSumPtEtaUESubTrackCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
2289 fhConeSumPtEtaUESubTrackCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2290 outputContainer->Add(fhConeSumPtEtaUESubTrackCellTrigEtaPhi) ;
2292 fhConeSumPtPhiUESubTrackCellTrigEtaPhi = new TH2F("hConeSumPtPhiUESubTrackCellTrigEtaPhi",
2293 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),
2294 netabins,etamin,etamax,nphibins,phimin,phimax);
2295 fhConeSumPtPhiUESubTrackCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2296 fhConeSumPtPhiUESubTrackCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
2297 fhConeSumPtPhiUESubTrackCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2298 outputContainer->Add(fhConeSumPtPhiUESubTrackCellTrigEtaPhi) ;
2303 for(Int_t iso = 0; iso < 2; iso++)
2307 fhTrackMatchedDEta[iso] = new TH2F
2308 (Form("hTrackMatchedDEta%s",isoName[iso].Data()),
2309 Form("%s - d#eta of cluster-track vs cluster energy, %s",isoTitle[iso].Data(),parTitle.Data()),
2310 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
2311 fhTrackMatchedDEta[iso]->SetYTitle("d#eta");
2312 fhTrackMatchedDEta[iso]->SetXTitle("E_{cluster} (GeV)");
2314 fhTrackMatchedDPhi[iso] = new TH2F
2315 (Form("hTrackMatchedDPhi%s",isoName[iso].Data()),
2316 Form("%s - d#phi of cluster-track vs cluster energy, %s",isoTitle[iso].Data(),parTitle.Data()),
2317 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
2318 fhTrackMatchedDPhi[iso]->SetYTitle("d#phi (rad)");
2319 fhTrackMatchedDPhi[iso]->SetXTitle("E_{cluster} (GeV)");
2321 fhTrackMatchedDEtaDPhi[iso] = new TH2F
2322 (Form("hTrackMatchedDEtaDPhi%s",isoName[iso].Data()),
2323 Form("%s - d#eta vs d#phi of cluster-track, %s",isoTitle[iso].Data(),parTitle.Data()),
2324 nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax);
2325 fhTrackMatchedDEtaDPhi[iso]->SetYTitle("d#phi (rad)");
2326 fhTrackMatchedDEtaDPhi[iso]->SetXTitle("d#eta");
2328 outputContainer->Add(fhTrackMatchedDEta[iso]) ;
2329 outputContainer->Add(fhTrackMatchedDPhi[iso]) ;
2330 outputContainer->Add(fhTrackMatchedDEtaDPhi[iso]) ;
2332 fhdEdx[iso] = new TH2F
2333 (Form("hdEdx%s",isoName[iso].Data()),
2334 Form("%s - Matched track <d#it{E}/d#it{x}> vs cluster #it{E}, %s",isoTitle[iso].Data(),parTitle.Data()),
2335 nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
2336 fhdEdx[iso]->SetXTitle("#it{E} (GeV)");
2337 fhdEdx[iso]->SetYTitle("<d#it{E}/d#it{x}>");
2338 outputContainer->Add(fhdEdx[iso]);
2340 fhEOverP[iso] = new TH2F
2341 (Form("hEOverP%s",isoName[iso].Data()),
2342 Form("%s - Matched track #it{E}/#it{p} vs cluster, %s",isoTitle[iso].Data(),parTitle.Data()),
2343 nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
2344 fhEOverP[iso]->SetXTitle("#it{E} (GeV)");
2345 fhEOverP[iso]->SetYTitle("#it{E}/#it{p}");
2346 outputContainer->Add(fhEOverP[iso]);
2350 fhTrackMatchedMCParticle[iso] = new TH2F
2351 (Form("hTrackMatchedMCParticle%s",isoName[iso].Data()),
2352 Form("%s - Origin of particle vs cluster #it{E}, %s",isoTitle[iso].Data(),parTitle.Data()),
2353 nptbins,ptmin,ptmax,8,0,8);
2354 fhTrackMatchedMCParticle[iso]->SetXTitle("#it{E} (GeV)");
2355 //fhTrackMatchedMCParticle[iso]->SetYTitle("Particle type");
2357 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(1 ,"Photon");
2358 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(2 ,"Electron");
2359 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(3 ,"Meson Merged");
2360 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(4 ,"Rest");
2361 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(5 ,"Conv. Photon");
2362 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(6 ,"Conv. Electron");
2363 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(7 ,"Conv. Merged");
2364 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(8 ,"Conv. Rest");
2366 outputContainer->Add(fhTrackMatchedMCParticle[iso]);
2372 fhELambda0[iso] = new TH2F
2373 (Form("hELambda0%s",isoName[iso].Data()),
2374 Form("%s cluster : #it{E} vs #lambda_{0}, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2375 fhELambda0[iso]->SetYTitle("#lambda_{0}^{2}");
2376 fhELambda0[iso]->SetXTitle("#it{E} (GeV)");
2377 outputContainer->Add(fhELambda0[iso]) ;
2379 fhELambda1[iso] = new TH2F
2380 (Form("hELambda1%s",isoName[iso].Data()),
2381 Form("%s cluster: #it{E} vs #lambda_{1}, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2382 fhELambda1[iso]->SetYTitle("#lambda_{1}^{2}");
2383 fhELambda1[iso]->SetXTitle("#it{E} (GeV)");
2384 outputContainer->Add(fhELambda1[iso]) ;
2386 fhPtLambda0[iso] = new TH2F
2387 (Form("hPtLambda0%s",isoName[iso].Data()),
2388 Form("%s cluster : #it{p}_{T} vs #lambda_{0}, %s",isoTitle[iso].Data(), parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2389 fhPtLambda0[iso]->SetYTitle("#lambda_{0}^{2}");
2390 fhPtLambda0[iso]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2391 outputContainer->Add(fhPtLambda0[iso]) ;
2395 for(Int_t imc = 0; imc < 9; imc++)
2397 fhPtLambda0MC[imc][iso] = new TH2F(Form("hPtLambda0%s_MC%s",isoName[iso].Data(),mcPartName[imc].Data()),
2398 Form("%s cluster : #it{p}_{T} vs #lambda_{0}: %s %s",isoTitle[iso].Data(),mcPartType[imc].Data(),parTitle.Data()),
2399 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2400 fhPtLambda0MC[imc][iso]->SetYTitle("#lambda_{0}^{2}");
2401 fhPtLambda0MC[imc][iso]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2402 outputContainer->Add( fhPtLambda0MC[imc][iso]) ;
2406 if(fIsoDetector=="EMCAL" && GetFirstSMCoveredByTRD() >= 0)
2408 fhPtLambda0TRD[iso] = new TH2F
2409 (Form("hPtLambda0TRD%s",isoName[iso].Data()),
2410 Form("%s cluster: #it{p}_{T} vs #lambda_{0}, SM behind TRD, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2411 fhPtLambda0TRD[iso]->SetYTitle("#lambda_{0}^{2}");
2412 fhPtLambda0TRD[iso]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2413 outputContainer->Add(fhPtLambda0TRD[iso]) ;
2415 fhELambda0TRD[iso] = new TH2F
2416 (Form("hELambda0TRD%s",isoName[iso].Data()),
2417 Form("%s cluster: #it{E} vs #lambda_{0}, SM behind TRD, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2418 fhELambda0TRD[iso]->SetYTitle("#lambda_{0}^{2}");
2419 fhELambda0TRD[iso]->SetXTitle("#it{E} (GeV)");
2420 outputContainer->Add(fhELambda0TRD[iso]) ;
2422 fhELambda1TRD[iso] = new TH2F
2423 (Form("hELambda1TRD%s",isoName[iso].Data()),
2424 Form("%s cluster: #it{E} vs #lambda_{1}, SM behind TRD, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2425 fhELambda1TRD[iso]->SetYTitle("#lambda_{1}^{2}");
2426 fhELambda1TRD[iso]->SetXTitle("#it{E} (GeV)");
2427 outputContainer->Add(fhELambda1TRD[iso]) ;
2430 if(fFillNLMHistograms)
2432 fhNLocMax[iso] = new TH2F
2433 (Form("hNLocMax%s",isoName[iso].Data()),
2434 Form("%s - Number of local maxima in cluster, %s",isoTitle[iso].Data(),parTitle.Data()),
2435 nptbins,ptmin,ptmax,10,0,10);
2436 fhNLocMax[iso]->SetYTitle("#it{NLM}");
2437 fhNLocMax[iso]->SetXTitle("#it{E} (GeV)");
2438 outputContainer->Add(fhNLocMax[iso]) ;
2440 fhELambda0LocMax1[iso] = new TH2F
2441 (Form("hELambda0LocMax1%s",isoName[iso].Data()),
2442 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);
2443 fhELambda0LocMax1[iso]->SetYTitle("#lambda_{0}^{2}");
2444 fhELambda0LocMax1[iso]->SetXTitle("#it{E} (GeV)");
2445 outputContainer->Add(fhELambda0LocMax1[iso]) ;
2447 fhELambda1LocMax1[iso] = new TH2F
2448 (Form("hELambda1LocMax1%s",isoName[iso].Data()),
2449 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);
2450 fhELambda1LocMax1[iso]->SetYTitle("#lambda_{1}^{2}");
2451 fhELambda1LocMax1[iso]->SetXTitle("#it{E} (GeV)");
2452 outputContainer->Add(fhELambda1LocMax1[iso]) ;
2454 fhELambda0LocMax2[iso] = new TH2F
2455 (Form("hELambda0LocMax2%s",isoName[iso].Data()),
2456 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);
2457 fhELambda0LocMax2[iso]->SetYTitle("#lambda_{0}^{2}");
2458 fhELambda0LocMax2[iso]->SetXTitle("#it{E} (GeV)");
2459 outputContainer->Add(fhELambda0LocMax2[iso]) ;
2461 fhELambda1LocMax2[iso] = new TH2F
2462 (Form("hELambda1LocMax2%s",isoName[iso].Data()),
2463 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);
2464 fhELambda1LocMax2[iso]->SetYTitle("#lambda_{1}^{2}");
2465 fhELambda1LocMax2[iso]->SetXTitle("#it{E} (GeV)");
2466 outputContainer->Add(fhELambda1LocMax2[iso]) ;
2468 fhELambda0LocMaxN[iso] = new TH2F
2469 ( Form("hELambda0LocMaxN%s",isoName[iso].Data()),
2470 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);
2471 fhELambda0LocMaxN[iso]->SetYTitle("#lambda_{0}^{2}");
2472 fhELambda0LocMaxN[iso]->SetXTitle("#it{E} (GeV)");
2473 outputContainer->Add(fhELambda0LocMaxN[iso]) ;
2475 fhELambda1LocMaxN[iso] = new TH2F
2476 (Form("hELambda1LocMaxN%s",isoName[iso].Data()),
2477 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);
2478 fhELambda1LocMaxN[iso]->SetYTitle("#lambda_{1}^{2}");
2479 fhELambda1LocMaxN[iso]->SetXTitle("#it{E} (GeV)");
2480 outputContainer->Add(fhELambda1LocMaxN[iso]) ;
2483 } // control histograms for isolated and non isolated objects
2486 if(fFillPileUpHistograms)
2488 fhPtTrackInConeOtherBC = new TH2F("hPtTrackInConeOtherBC",
2489 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC!=0",r),
2490 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2491 fhPtTrackInConeOtherBC->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2492 fhPtTrackInConeOtherBC->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2493 outputContainer->Add(fhPtTrackInConeOtherBC) ;
2495 fhPtTrackInConeOtherBCPileUpSPD = new TH2F("hPtTrackInConeOtherBCPileUpSPD",
2496 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC!=0, pile-up from SPD",r),
2497 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2498 fhPtTrackInConeOtherBCPileUpSPD->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2499 fhPtTrackInConeOtherBCPileUpSPD->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2500 outputContainer->Add(fhPtTrackInConeOtherBCPileUpSPD) ;
2502 fhPtTrackInConeBC0 = new TH2F("hPtTrackInConeBC0",
2503 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC==0",r),
2504 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2505 fhPtTrackInConeBC0->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2506 fhPtTrackInConeBC0->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2507 outputContainer->Add(fhPtTrackInConeBC0) ;
2509 fhPtTrackInConeVtxBC0 = new TH2F("hPtTrackInConeVtxBC0",
2510 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC==0",r),
2511 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2512 fhPtTrackInConeVtxBC0->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2513 fhPtTrackInConeVtxBC0->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2514 outputContainer->Add(fhPtTrackInConeVtxBC0) ;
2517 fhPtTrackInConeBC0PileUpSPD = new TH2F("hPtTrackInConeBC0PileUpSPD",
2518 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC==0, pile-up from SPD",r),
2519 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2520 fhPtTrackInConeBC0PileUpSPD->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2521 fhPtTrackInConeBC0PileUpSPD->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2522 outputContainer->Add(fhPtTrackInConeBC0PileUpSPD) ;
2525 for (Int_t i = 0; i < 7 ; i++)
2527 fhPtInConePileUp[i] = new TH2F(Form("hPtInConePileUp%s",pileUpName[i].Data()),
2528 Form("#it{p}_{T} in isolation cone for #it{R} = %2.2f, from pile-up (%s)",r,pileUpName[i].Data()),
2529 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2530 fhPtInConePileUp[i]->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2531 fhPtInConePileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2532 outputContainer->Add(fhPtInConePileUp[i]) ;
2538 // For histograms in arrays, index in the array, corresponding to any particle origin
2540 for(Int_t imc = 0; imc < 9; imc++)
2543 fhPtNoIsoMC[imc] = new TH1F(Form("hPtNoIsoMC%s",mcPartName[imc].Data()),
2544 Form("#it{p}_{T} of NOT isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
2545 nptbins,ptmin,ptmax);
2546 fhPtNoIsoMC[imc]->SetYTitle("#it{counts}");
2547 fhPtNoIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2548 outputContainer->Add(fhPtNoIsoMC[imc]) ;
2550 fhPtIsoMC[imc] = new TH1F(Form("hPtMC%s",mcPartName[imc].Data()),
2551 Form("#it{p}_{T} of isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
2552 nptbins,ptmin,ptmax);
2553 fhPtIsoMC[imc]->SetYTitle("#it{counts}");
2554 fhPtIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2555 outputContainer->Add(fhPtIsoMC[imc]) ;
2557 fhPhiIsoMC[imc] = new TH2F(Form("hPhiMC%s",mcPartName[imc].Data()),
2558 Form("#phi vs #it{p}_{T} of isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
2559 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
2560 fhPhiIsoMC[imc]->SetYTitle("#phi");
2561 fhPhiIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2562 outputContainer->Add(fhPhiIsoMC[imc]) ;
2564 fhEtaIsoMC[imc] = new TH2F(Form("hEtaMC%s",mcPartName[imc].Data()),
2565 Form("#phi vs #it{p}_{T} of isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
2566 nptbins,ptmin,ptmax,netabins,etamin,etamax);
2567 fhEtaIsoMC[imc]->SetYTitle("#eta");
2568 fhEtaIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2569 outputContainer->Add(fhEtaIsoMC[imc]) ;
2572 for(Int_t i = 0; i < 6; i++)
2574 fhEPrimMC[i] = new TH1F(Form("hEPrim_MC%s",ppname[i].Data()),
2575 Form("primary photon %s : #it{E}, %s",pptype[i].Data(),parTitle.Data()),
2576 nptbins,ptmin,ptmax);
2577 fhEPrimMC[i]->SetXTitle("#it{E} (GeV)");
2578 outputContainer->Add(fhEPrimMC[i]) ;
2580 fhPtPrimMCiso[i] = new TH1F(Form("hPtPrim_MCiso%s",ppname[i].Data()),
2581 Form("primary isolated photon %s : #it{p}_{T}, %s",pptype[i].Data(),parTitle.Data()),
2582 nptbins,ptmin,ptmax);
2583 fhPtPrimMCiso[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2584 outputContainer->Add(fhPtPrimMCiso[i]) ;
2586 fhEtaPrimMC[i] = new TH2F(Form("hEtaPrim_MC%s",ppname[i].Data()),
2587 Form("primary photon %s : #eta vs #it{p}_{T}, %s",pptype[i].Data(),parTitle.Data()),
2588 nptbins,ptmin,ptmax,200,-2,2);
2589 fhEtaPrimMC[i]->SetYTitle("#eta");
2590 fhEtaPrimMC[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2591 outputContainer->Add(fhEtaPrimMC[i]) ;
2593 fhPhiPrimMC[i] = new TH2F(Form("hPhiPrim_MC%s",ppname[i].Data()),
2594 Form("primary photon %s : #phi vs #it{p}_{T}, %s",pptype[i].Data(),parTitle.Data()),
2595 nptbins,ptmin,ptmax,200,0.,TMath::TwoPi());
2596 fhPhiPrimMC[i]->SetYTitle("#phi");
2597 fhPhiPrimMC[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2598 outputContainer->Add(fhPhiPrimMC[i]) ;
2607 const Int_t buffersize = 255;
2608 char name[buffersize];
2609 char title[buffersize];
2610 for(Int_t icone = 0; icone<fNCones; icone++)
2612 // sum pt in cone vs. pt leading
2613 snprintf(name, buffersize,"hSumPtLeadingPt_Cone_%d",icone);
2614 snprintf(title, buffersize,"#Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
2615 fhSumPtLeadingPt[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2616 fhSumPtLeadingPt[icone] ->SetYTitle("#sum_{cone}#it{p}_{T} (GeV/#it{c})");//#Sigma #it{p}_{T}
2617 fhSumPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
2618 outputContainer->Add(fhSumPtLeadingPt[icone]) ;
2620 // pt in cone vs. pt leading
2621 snprintf(name, buffersize,"hPtLeadingPt_Cone_%d",icone);
2622 snprintf(title, buffersize,"#it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
2623 fhPtLeadingPt[icone] = new TH2F(name, title, nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2624 fhPtLeadingPt[icone] ->SetYTitle("#it{p}_{T}^{cone} (GeV/#it{c})");
2625 fhPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
2626 outputContainer->Add(fhPtLeadingPt[icone]) ;
2628 // sum pt in cone vs. pt leading in the forward region (for background subtraction studies)
2629 snprintf(name, buffersize,"hPerpSumPtLeadingPt_Cone_%d",icone);
2630 snprintf(title, buffersize,"#Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
2631 fhPerpSumPtLeadingPt[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2632 fhPerpSumPtLeadingPt[icone] ->SetYTitle("#sum_{cone}#it{p}_{T} (GeV/#it{c})");//#Sigma #it{p}_{T}
2633 fhPerpSumPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
2634 outputContainer->Add(fhPerpSumPtLeadingPt[icone]) ;
2636 // pt in cone vs. pt leading in the forward region (for background subtraction studies)
2637 snprintf(name, buffersize,"hPerpPtLeadingPt_Cone_%d",icone);
2638 snprintf(title, buffersize,"#it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
2639 fhPerpPtLeadingPt[icone] = new TH2F(name, title, nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2640 fhPerpPtLeadingPt[icone] ->SetYTitle("#it{p}_{T}^{cone} (GeV/#it{c})");
2641 fhPerpPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
2642 outputContainer->Add(fhPerpPtLeadingPt[icone]) ;
2646 for(Int_t imc = 0; imc < 9; imc++)
2648 snprintf(name , buffersize,"hPtSumMC%s_Cone_%d",mcPartName[imc].Data(),icone);
2649 snprintf(title, buffersize,"Candidate %s #it{p}_{T} vs cone #Sigma #it{p}_{T} for #it{R}=%2.2f",mcPartType[imc].Data(),fConeSizes[icone]);
2650 fhPtSumIsolatedMC[imc][icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2651 fhPtSumIsolatedMC[imc][icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2652 fhPtSumIsolatedMC[imc][icone]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2653 outputContainer->Add(fhPtSumIsolatedMC[imc][icone]) ;
2657 for(Int_t ipt = 0; ipt<fNPtThresFrac;ipt++)
2659 snprintf(name, buffersize,"hPtThres_Cone_%d_Pt%d",icone,ipt);
2660 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]);
2661 fhPtThresIsolated[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2662 fhPtThresIsolated[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2663 outputContainer->Add(fhPtThresIsolated[icone][ipt]) ;
2665 snprintf(name, buffersize,"hPtFrac_Cone_%d_Pt%d",icone,ipt);
2666 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]);
2667 fhPtFracIsolated[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2668 fhPtFracIsolated[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2669 outputContainer->Add(fhPtFracIsolated[icone][ipt]) ;
2672 snprintf(name, buffersize,"hPtSum_Cone_%d_Pt%d",icone,ipt);
2673 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]);
2674 fhPtSumIsolated[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2675 // fhPtSumIsolated[icone][ipt]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2676 fhPtSumIsolated[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2677 outputContainer->Add(fhPtSumIsolated[icone][ipt]) ;
2679 snprintf(name, buffersize,"hPtSumDensity_Cone_%d_Pt%d",icone,ipt);
2680 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]);
2681 fhPtSumDensityIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2682 //fhPtSumIsolated[icone][ipt]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2683 fhPtSumDensityIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2684 outputContainer->Add(fhPtSumDensityIso[icone][ipt]) ;
2686 snprintf(name, buffersize,"hPtFracPtSum_Cone_%d_Pt%d",icone,ipt);
2687 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]);
2688 fhPtFracPtSumIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2689 //fhPtSumIsolated[icone][ipt]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2690 fhPtFracPtSumIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2691 outputContainer->Add(fhPtFracPtSumIso[icone][ipt]) ;
2693 // pt decays isolated
2694 snprintf(name, buffersize,"hPtThres_Decay_Cone_%d_Pt%d",icone,ipt);
2695 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]);
2696 fhPtPtThresDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2697 fhPtPtThresDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2698 outputContainer->Add(fhPtPtThresDecayIso[icone][ipt]) ;
2700 snprintf(name, buffersize,"hPtFrac_Decay_Cone_%d_Pt%d",icone,ipt);
2701 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]);
2702 fhPtPtFracDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2703 fhPtPtFracDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2704 outputContainer->Add(fhPtPtFracDecayIso[icone][ipt]) ;
2706 snprintf(name, buffersize,"hPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
2707 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]);
2708 fhPtPtSumDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2709 // fhPtPtSumDecayIso[icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2710 fhPtPtSumDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2711 outputContainer->Add(fhPtPtSumDecayIso[icone][ipt]) ;
2713 snprintf(name, buffersize,"hPtSumDensity_Decay_Cone_%d_Pt%d",icone,ipt);
2714 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]);
2715 fhPtSumDensityDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2716 // fhPtPtSumDecayIso[icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2717 fhPtSumDensityDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2718 outputContainer->Add(fhPtSumDensityDecayIso[icone][ipt]) ;
2720 snprintf(name, buffersize,"hPtFracPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
2721 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]);
2722 fhPtFracPtSumDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2723 // fhPtPtSumDecayIso[icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2724 fhPtFracPtSumDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2725 outputContainer->Add(fhPtFracPtSumDecayIso[icone][ipt]) ;
2729 snprintf(name, buffersize,"hEtaPhiPtThres_Cone_%d_Pt%d",icone,ipt);
2730 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]);
2731 fhEtaPhiPtThresIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2732 fhEtaPhiPtThresIso[icone][ipt]->SetXTitle("#eta");
2733 fhEtaPhiPtThresIso[icone][ipt]->SetYTitle("#phi");
2734 outputContainer->Add(fhEtaPhiPtThresIso[icone][ipt]) ;
2736 snprintf(name, buffersize,"hEtaPhiPtFrac_Cone_%d_Pt%d",icone,ipt);
2737 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]);
2738 fhEtaPhiPtFracIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2739 fhEtaPhiPtFracIso[icone][ipt]->SetXTitle("#eta");
2740 fhEtaPhiPtFracIso[icone][ipt]->SetYTitle("#phi");
2741 outputContainer->Add(fhEtaPhiPtFracIso[icone][ipt]) ;
2743 snprintf(name, buffersize,"hEtaPhiPtSum_Cone_%d_Pt%d",icone,ipt);
2744 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]);
2745 fhEtaPhiPtSumIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2746 fhEtaPhiPtSumIso[icone][ipt]->SetXTitle("#eta");
2747 fhEtaPhiPtSumIso[icone][ipt]->SetYTitle("#phi");
2748 outputContainer->Add(fhEtaPhiPtSumIso[icone][ipt]) ;
2750 snprintf(name, buffersize,"hEtaPhiSumDensity_Cone_%d_Pt%d",icone,ipt);
2751 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]);
2752 fhEtaPhiSumDensityIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2753 fhEtaPhiSumDensityIso[icone][ipt]->SetXTitle("#eta");
2754 fhEtaPhiSumDensityIso[icone][ipt]->SetYTitle("#phi");
2755 outputContainer->Add(fhEtaPhiSumDensityIso[icone][ipt]) ;
2757 snprintf(name, buffersize,"hEtaPhiFracPtSum_Cone_%d_Pt%d",icone,ipt);
2758 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]);
2759 fhEtaPhiFracPtSumIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2760 fhEtaPhiFracPtSumIso[icone][ipt]->SetXTitle("#eta");
2761 fhEtaPhiFracPtSumIso[icone][ipt]->SetYTitle("#phi");
2762 outputContainer->Add(fhEtaPhiFracPtSumIso[icone][ipt]) ;
2765 snprintf(name, buffersize,"hEtaPhiPtThres_Decay_Cone_%d_Pt%d",icone,ipt);
2766 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]);
2767 fhEtaPhiPtThresDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2768 fhEtaPhiPtThresDecayIso[icone][ipt]->SetXTitle("#eta");
2769 fhEtaPhiPtThresDecayIso[icone][ipt]->SetYTitle("#phi");
2770 outputContainer->Add(fhEtaPhiPtThresDecayIso[icone][ipt]) ;
2772 snprintf(name, buffersize,"hEtaPhiPtFrac_Decay_Cone_%d_Pt%d",icone,ipt);
2773 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]);
2774 fhEtaPhiPtFracDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2775 fhEtaPhiPtFracDecayIso[icone][ipt]->SetXTitle("#eta");
2776 fhEtaPhiPtFracDecayIso[icone][ipt]->SetYTitle("#phi");
2777 outputContainer->Add(fhEtaPhiPtFracDecayIso[icone][ipt]) ;
2780 snprintf(name, buffersize,"hEtaPhiPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
2781 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]);
2782 fhEtaPhiPtSumDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2783 fhEtaPhiPtSumDecayIso[icone][ipt]->SetXTitle("#eta");
2784 fhEtaPhiPtSumDecayIso[icone][ipt]->SetYTitle("#phi");
2785 outputContainer->Add(fhEtaPhiPtSumDecayIso[icone][ipt]) ;
2787 snprintf(name, buffersize,"hEtaPhiSumDensity_Decay_Cone_%d_Pt%d",icone,ipt);
2788 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]);
2789 fhEtaPhiSumDensityDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2790 fhEtaPhiSumDensityDecayIso[icone][ipt]->SetXTitle("#eta");
2791 fhEtaPhiSumDensityDecayIso[icone][ipt]->SetYTitle("#phi");
2792 outputContainer->Add(fhEtaPhiSumDensityDecayIso[icone][ipt]) ;
2794 snprintf(name, buffersize,"hEtaPhiFracPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
2795 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]);
2796 fhEtaPhiFracPtSumDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2797 fhEtaPhiFracPtSumDecayIso[icone][ipt]->SetXTitle("#eta");
2798 fhEtaPhiFracPtSumDecayIso[icone][ipt]->SetYTitle("#phi");
2799 outputContainer->Add(fhEtaPhiFracPtSumDecayIso[icone][ipt]) ;
2804 for(Int_t imc = 0; imc < 9; imc++)
2806 snprintf(name , buffersize,"hPtThreshMC%s_Cone_%d_Pt%d",mcPartName[imc].Data(),icone,ipt);
2807 snprintf(title, buffersize,"Isolated %s #it{p}_{T} for #it{R}=%2.2f and #it{p}_{T}^{th}=%2.2f",
2808 mcPartType[imc].Data(),fConeSizes[icone], fPtThresholds[ipt]);
2809 fhPtThresIsolatedMC[imc][icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2810 fhPtThresIsolatedMC[imc][icone][ipt]->SetYTitle("#it{counts}");
2811 fhPtThresIsolatedMC[imc][icone][ipt]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2812 outputContainer->Add(fhPtThresIsolatedMC[imc][icone][ipt]) ;
2815 snprintf(name , buffersize,"hPtFracMC%s_Cone_%d_Pt%d",mcPartName[imc].Data(),icone,ipt);
2816 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",
2817 mcPartType[imc].Data(),fConeSizes[icone], fPtFractions[ipt]);
2818 fhPtFracIsolatedMC[imc][icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2819 fhPtFracIsolatedMC[imc][icone][ipt]->SetYTitle("#it{counts}");
2820 fhPtFracIsolatedMC[imc][icone][ipt]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2821 outputContainer->Add(fhPtFracIsolatedMC[imc][icone][ipt]) ;
2828 if(fFillPileUpHistograms)
2830 for (Int_t i = 0; i < 7 ; i++)
2832 fhEIsoPileUp[i] = new TH1F(Form("hEPileUp%s",pileUpName[i].Data()),
2833 Form("Number of isolated particles vs E, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
2834 nptbins,ptmin,ptmax);
2835 fhEIsoPileUp[i]->SetYTitle("d#it{N} / d#it{E}");
2836 fhEIsoPileUp[i]->SetXTitle("#it{E} (GeV)");
2837 outputContainer->Add(fhEIsoPileUp[i]) ;
2839 fhPtIsoPileUp[i] = new TH1F(Form("hPtPileUp%s",pileUpName[i].Data()),
2840 Form("Number of isolated particles vs #it{p}_{T}, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
2841 nptbins,ptmin,ptmax);
2842 fhPtIsoPileUp[i]->SetYTitle("d#it{N} / #it{p}_{T}");
2843 fhPtIsoPileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2844 outputContainer->Add(fhPtIsoPileUp[i]) ;
2846 fhENoIsoPileUp[i] = new TH1F(Form("hENoIsoPileUp%s",pileUpName[i].Data()),
2847 Form("Number of not isolated particles vs E, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
2848 nptbins,ptmin,ptmax);
2849 fhENoIsoPileUp[i]->SetYTitle("d#it{N} / dE");
2850 fhENoIsoPileUp[i]->SetXTitle("#it{E} (GeV)");
2851 outputContainer->Add(fhENoIsoPileUp[i]) ;
2853 fhPtNoIsoPileUp[i] = new TH1F(Form("hPtNoIsoPileUp%s",pileUpName[i].Data()),
2854 Form("Number of not isolated particles vs #it{p}_{T}, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
2855 nptbins,ptmin,ptmax);
2856 fhPtNoIsoPileUp[i]->SetYTitle("d#it{N} / #it{p}_{T}");
2857 fhPtNoIsoPileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2858 outputContainer->Add(fhPtNoIsoPileUp[i]) ;
2861 fhTimeENoCut = new TH2F ("hTimeE_NoCut","time of cluster vs E of clusters, no cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
2862 fhTimeENoCut->SetXTitle("#it{E} (GeV)");
2863 fhTimeENoCut->SetYTitle("#it{time} (ns)");
2864 outputContainer->Add(fhTimeENoCut);
2866 fhTimeESPD = new TH2F ("hTimeE_SPD","time of cluster vs E of clusters, SPD cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
2867 fhTimeESPD->SetXTitle("#it{E} (GeV)");
2868 fhTimeESPD->SetYTitle("#it{time} (ns)");
2869 outputContainer->Add(fhTimeESPD);
2871 fhTimeESPDMulti = new TH2F ("hTimeE_SPDMulti","time of cluster vs E of clusters, SPD multi cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
2872 fhTimeESPDMulti->SetXTitle("#it{E} (GeV)");
2873 fhTimeESPDMulti->SetYTitle("#it{time} (ns)");
2874 outputContainer->Add(fhTimeESPDMulti);
2876 fhTimeNPileUpVertSPD = new TH2F ("hTime_NPileUpVertSPD","time of cluster vs N pile-up SPD vertex", ntimebins,timemin,timemax,50,0,50);
2877 fhTimeNPileUpVertSPD->SetYTitle("# vertex ");
2878 fhTimeNPileUpVertSPD->SetXTitle("#it{time} (ns)");
2879 outputContainer->Add(fhTimeNPileUpVertSPD);
2881 fhTimeNPileUpVertTrack = new TH2F ("hTime_NPileUpVertTracks","time of cluster vs N pile-up Tracks vertex", ntimebins,timemin,timemax, 50,0,50 );
2882 fhTimeNPileUpVertTrack->SetYTitle("# vertex ");
2883 fhTimeNPileUpVertTrack->SetXTitle("#it{time} (ns)");
2884 outputContainer->Add(fhTimeNPileUpVertTrack);
2886 fhTimeNPileUpVertContributors = new TH2F ("hTime_NPileUpVertContributors","time of cluster vs N constributors to pile-up SPD vertex", ntimebins,timemin,timemax,50,0,50);
2887 fhTimeNPileUpVertContributors->SetYTitle("# vertex ");
2888 fhTimeNPileUpVertContributors->SetXTitle("#it{time} (ns)");
2889 outputContainer->Add(fhTimeNPileUpVertContributors);
2891 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);
2892 fhTimePileUpMainVertexZDistance->SetYTitle("distance #it{z} (cm) ");
2893 fhTimePileUpMainVertexZDistance->SetXTitle("#it{time} (ns)");
2894 outputContainer->Add(fhTimePileUpMainVertexZDistance);
2896 fhTimePileUpMainVertexZDiamond = new TH2F ("hTime_PileUpMainVertexZDiamond","time of cluster vs distance in Z pile-up SPD vertex - z diamond",ntimebins,timemin,timemax,100,0,50);
2897 fhTimePileUpMainVertexZDiamond->SetYTitle("diamond distance #it{z} (cm) ");
2898 fhTimePileUpMainVertexZDiamond->SetXTitle("#it{time} (ns)");
2899 outputContainer->Add(fhTimePileUpMainVertexZDiamond);
2902 return outputContainer ;
2906 //____________________________________________________
2907 Int_t AliAnaParticleIsolation::GetMCIndex(Int_t mcTag)
2909 // Histogram index depending on origin of candidate
2911 if(!IsDataMC()) return -1;
2913 if (GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPrompt))
2917 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCFragmentation))
2921 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0))
2925 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0Decay))
2929 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEtaDecay))
2933 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCOtherDecay))
2935 return kmcOtherDecay;
2937 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron))
2941 else // anything else
2943 // careful can contain also other decays, to be checked.
2948 //__________________________________
2949 void AliAnaParticleIsolation::Init()
2951 // Do some checks and init stuff
2953 // In case of several cone and thresholds analysis, open the cuts for the filling of the
2954 // track and cluster reference arrays in cone when done in the MakeAnalysisFillAOD().
2955 // The different cones, thresholds are tested for this list of tracks, clusters.
2958 printf("AliAnaParticleIsolation::Init() - Open default isolation cuts for multiple Isolation analysis\n");
2959 GetIsolationCut()->SetPtThreshold(100);
2960 GetIsolationCut()->SetPtFraction(100);
2961 GetIsolationCut()->SetConeSize(1);
2964 if(!GetReader()->IsCTSSwitchedOn() && GetIsolationCut()->GetParticleTypeInCone()!=AliIsolationCut::kOnlyNeutral)
2965 AliFatal("STOP!: You want to use CTS tracks in analysis but not read!! \n!!Check the configuration file!!\n");
2970 //____________________________________________
2971 void AliAnaParticleIsolation::InitParameters()
2974 //Initialize the parameters of the analysis.
2975 SetInputAODName("PWG4Particle");
2976 SetAODObjArrayName("IsolationCone");
2977 AddToHistogramsName("AnaIsolation_");
2979 fCalorimeter = "EMCAL" ;
2980 fIsoDetector = "EMCAL" ;
2982 fReMakeIC = kFALSE ;
2983 fMakeSeveralIC = kFALSE ;
2985 //----------- Several IC-----------------
2988 fConeSizes [0] = 0.1; fConeSizes [1] = 0.2; fConeSizes [2] = 0.3; fConeSizes [3] = 0.4; fConeSizes [4] = 0.5;
2989 fPtThresholds [0] = 1.; fPtThresholds [1] = 2.; fPtThresholds [2] = 3.; fPtThresholds [3] = 4.; fPtThresholds [4] = 5.;
2990 fPtFractions [0] = 0.05; fPtFractions [1] = 0.075; fPtFractions [2] = 0.1; fPtFractions [3] = 1.25; fPtFractions [4] = 1.5;
2991 fSumPtThresholds[0] = 1.; fSumPtThresholds[1] = 2.; fSumPtThresholds[2] = 3.; fSumPtThresholds[3] = 4.; fSumPtThresholds[4] = 5.;
2993 //------------- Histograms settings -------
2994 fHistoNPtSumBins = 100 ;
2995 fHistoPtSumMax = 50 ;
2996 fHistoPtSumMin = 0. ;
2998 fHistoNPtInConeBins = 100 ;
2999 fHistoPtInConeMax = 50 ;
3000 fHistoPtInConeMin = 0. ;
3004 //__________________________________________________
3005 void AliAnaParticleIsolation::MakeAnalysisFillAOD()
3007 //Do analysis and fill aods
3008 //Search for the isolated photon in fCalorimeter with pt > GetMinPt()
3010 if(!GetInputAODBranch())
3011 AliFatal(Form("No input particles in AOD with name branch < %s >, STOP",GetInputAODName().Data()));
3014 if(strcmp(GetInputAODBranch()->GetClass()->GetName(), "AliAODPWG4ParticleCorrelation"))
3015 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()));
3017 Int_t n = 0, nfrac = 0;
3018 Bool_t isolated = kFALSE ;
3019 Float_t coneptsum = 0 ;
3020 TObjArray * pl = 0x0; ;
3022 //Select the calorimeter for candidate isolation with neutral particles
3023 if (fCalorimeter == "PHOS" )
3024 pl = GetPHOSClusters();
3025 else if (fCalorimeter == "EMCAL")
3026 pl = GetEMCALClusters();
3028 //Loop on AOD branch, filled previously in AliAnaPhoton, find leading particle to do isolation only with it
3029 Double_t ptLeading = 0. ;
3030 Int_t idLeading = -1 ;
3031 TLorentzVector mom ;
3032 Int_t naod = GetInputAODBranch()->GetEntriesFast();
3033 if(GetDebug() > 0) printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - Input aod branch entries %d\n", naod);
3035 for(Int_t iaod = 0; iaod < naod; iaod++)
3037 AliAODPWG4ParticleCorrelation * aodinput = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
3039 //If too small or too large pt, skip
3040 if(aodinput->Pt() < GetMinPt() || aodinput->Pt() > GetMaxPt() ) continue ;
3042 //check if it is low pt trigger particle
3043 if((aodinput->Pt() < GetIsolationCut()->GetPtThreshold() ||
3044 aodinput->Pt() < GetIsolationCut()->GetSumPtThreshold()) &&
3047 continue ; //trigger should not come from underlying event
3050 //vertex cut in case of mixing
3051 Int_t check = CheckMixedEventVertex(aodinput->GetCaloLabel(0), aodinput->GetTrackLabel(0));
3052 if(check == 0) continue;
3053 if(check == -1) return;
3055 //find the leading particles with highest momentum
3056 if ( aodinput->Pt() > ptLeading )
3058 ptLeading = aodinput->Pt() ;
3062 aodinput->SetLeadingParticle(kFALSE);
3064 }//finish searching for leading trigger particle
3066 // Check isolation of leading particle
3067 if(idLeading < 0) return;
3069 AliAODPWG4ParticleCorrelation * aodinput = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(idLeading));
3070 aodinput->SetLeadingParticle(kTRUE);
3072 // Check isolation only of clusters in fiducial region
3073 if(IsFiducialCutOn())
3075 Bool_t in = GetFiducialCut()->IsInFiducialCut(*aodinput->Momentum(),aodinput->GetDetector()) ;
3079 //After cuts, study isolation
3080 n=0; nfrac = 0; isolated = kFALSE; coneptsum = 0;
3081 GetIsolationCut()->MakeIsolationCut(GetCTSTracks(),pl,
3082 GetReader(), GetCaloPID(),
3083 kTRUE, aodinput, GetAODObjArrayName(),
3084 n,nfrac,coneptsum, isolated);
3086 if(!fMakeSeveralIC) aodinput->SetIsolated(isolated);
3090 if(isolated)printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() : Particle %d IS ISOLATED \n",idLeading);
3091 printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - End fill AODs \n");
3096 //_________________________________________________________
3097 void AliAnaParticleIsolation::MakeAnalysisFillHistograms()
3099 //Do analysis and fill histograms
3101 //In case of simulated data, fill acceptance histograms
3102 if(IsDataMC()) FillAcceptanceHistograms();
3104 //Loop on stored AOD
3105 Int_t naod = GetInputAODBranch()->GetEntriesFast();
3106 if(GetDebug() > 0) printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Histo aod branch entries %d\n", naod);
3108 for(Int_t iaod = 0; iaod < naod ; iaod++)
3110 AliAODPWG4ParticleCorrelation* aod = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
3112 if(!aod->IsLeadingParticle()) continue; // Try to isolate only leading cluster or track
3114 // Check isolation only of clusters in fiducial region
3115 if(IsFiducialCutOn())
3117 Bool_t in = GetFiducialCut()->IsInFiducialCut(*aod->Momentum(),aod->GetDetector()) ;
3118 if(! in ) continue ;
3121 Float_t pt = aod->Pt();
3123 //If too small or too large pt, skip
3124 if(pt < GetMinPt() || pt > GetMaxPt() ) continue ;
3126 Int_t mcTag = aod->GetTag() ;
3127 Int_t mcIndex = GetMCIndex(mcTag);
3129 // --- In case of redoing isolation from delta AOD ----
3130 // Not standard case, not used since its implementation
3133 //Analysis of multiple IC at same time
3134 MakeSeveralICAnalysis(aod,mcIndex);
3138 // --- In case of redoing isolation multiple cuts ----
3142 //In case a more strict IC is needed in the produced AOD
3143 Bool_t isolated = kFALSE;
3144 Int_t n = 0, nfrac = 0;
3145 Float_t coneptsum = 0 ;
3147 //Recover reference arrays with clusters and tracks
3148 TObjArray * refclusters = aod->GetObjArray(GetAODObjArrayName()+"Clusters");
3149 TObjArray * reftracks = aod->GetObjArray(GetAODObjArrayName()+"Tracks");
3151 GetIsolationCut()->MakeIsolationCut(reftracks, refclusters,
3152 GetReader(), GetCaloPID(),
3154 n,nfrac,coneptsum, isolated);
3157 Bool_t isolated = aod->IsIsolated();
3158 Bool_t decay = aod->IsTagged();
3159 Float_t energy = aod->E();
3160 Float_t phi = aod->Phi();
3161 Float_t eta = aod->Eta();
3163 if(GetDebug() > 0) printf(" AliAnaParticleIsolation::MakeAnalysisFillHistograms() - pt %1.1f, eta %1.1f, phi %1.1f, Isolated %d\n",
3164 pt, eta, phi, isolated);
3166 //---------------------------------------------------------------
3167 // Fill Shower shape and track matching histograms
3168 //---------------------------------------------------------------
3170 FillTrackMatchingShowerShapeControlHistograms(aod,mcIndex);
3172 //---------------------------------------------------------------
3173 // Fill pt/sum pT distribution of particles in cone or in UE band
3174 //---------------------------------------------------------------
3176 Float_t coneptsumCluster = 0;
3177 Float_t coneptsumTrack = 0;
3178 Float_t coneptsumCell = 0;
3179 Float_t etaBandptsumClusterNorm = 0;
3180 Float_t etaBandptsumTrackNorm = 0;
3182 CalculateTrackSignalInCone (aod,coneptsumTrack );
3183 CalculateCaloSignalInCone (aod,coneptsumCluster);
3184 if(fFillCellHistograms)
3185 CalculateCaloCellSignalInCone(aod,coneptsumCell );
3187 if(GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kNeutralAndCharged)
3189 fhConeSumPtClustervsTrack ->Fill(coneptsumCluster,coneptsumTrack);
3190 if(fFillCellHistograms)
3192 fhConeSumPtCellvsTrack ->Fill(coneptsumCell, coneptsumTrack);
3193 fhConeSumPtCellTrack ->Fill(pt, coneptsumTrack+coneptsumCell);
3194 fhConeSumPtCellTrackTrigEtaPhi->Fill(eta,phi,coneptsumTrack+coneptsumCell);
3198 fhConeSumPt ->Fill(pt, coneptsumTrack+coneptsumCluster);
3199 fhConeSumPtTrigEtaPhi ->Fill(eta,phi,coneptsumTrack+coneptsumCluster);
3202 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d Energy Sum in Isolation Cone %2.2f\n", iaod, coneptsumTrack+coneptsumCluster);
3204 //normalize phi/eta band per area unit
3205 if(fFillUEBandSubtractHistograms)
3206 CalculateNormalizeUEBandPerUnitArea(aod, coneptsumCluster, coneptsumCell, coneptsumTrack, etaBandptsumTrackNorm, etaBandptsumClusterNorm) ;
3208 // printf("Histograms analysis : cluster pt = %f, etaBandTrack = %f, etaBandCluster = %f, isolation = %d\n",aod->Pt(),etaBandptsumTrackNorm,etaBandptsumClusterNorm,aod->IsIsolated());
3211 //---------------------------------------------------------------
3212 // Isolated/ Non isolated histograms
3213 //---------------------------------------------------------------
3217 if(GetDebug() > 1) printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d ISOLATED: fill histograms\n", iaod);
3219 // Fill histograms to undertand pile-up before other cuts applied
3220 // Remember to relax time cuts in the reader
3221 FillPileUpHistograms(aod->GetCaloLabel(0));
3223 fhEIso ->Fill(energy);
3225 fhPhiIso ->Fill(pt,phi);
3226 fhEtaIso ->Fill(pt,eta);
3227 fhEtaPhiIso ->Fill(eta,phi);
3229 if(fFillNLMHistograms) fhPtNLocMaxIso ->Fill(pt,aod->GetFiducialArea()) ;
3231 if(fFillHighMultHistograms)
3233 fhPtCentralityIso ->Fill(pt,GetEventCentrality()) ;
3234 fhPtEventPlaneIso ->Fill(pt,GetEventPlaneAngle() ) ;
3237 if(decay && fFillTaggedDecayHistograms)
3239 fhPtDecayIso ->Fill(pt);
3240 fhEtaPhiDecayIso->Fill(eta,phi);
3243 if(fFillPileUpHistograms)
3245 if(GetReader()->IsPileUpFromSPD()) { fhEIsoPileUp[0] ->Fill(energy) ; fhPtIsoPileUp[0]->Fill(pt) ; }
3246 if(GetReader()->IsPileUpFromEMCal()) { fhEIsoPileUp[1] ->Fill(energy) ; fhPtIsoPileUp[1]->Fill(pt) ; }
3247 if(GetReader()->IsPileUpFromSPDOrEMCal()) { fhEIsoPileUp[2] ->Fill(energy) ; fhPtIsoPileUp[2]->Fill(pt) ; }
3248 if(GetReader()->IsPileUpFromSPDAndEMCal()) { fhEIsoPileUp[3] ->Fill(energy) ; fhPtIsoPileUp[3]->Fill(pt) ; }
3249 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) { fhEIsoPileUp[4] ->Fill(energy) ; fhPtIsoPileUp[4]->Fill(pt) ; }
3250 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) { fhEIsoPileUp[5] ->Fill(energy) ; fhPtIsoPileUp[5]->Fill(pt) ; }
3251 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhEIsoPileUp[6] ->Fill(energy) ; fhPtIsoPileUp[6]->Fill(pt) ; }
3256 // For histograms in arrays, index in the array, corresponding to any particle origin
3257 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
3259 fhPtIsoMC [kmcPhoton]->Fill(pt);
3260 fhPhiIsoMC[kmcPhoton]->Fill(pt,phi);
3261 fhEtaIsoMC[kmcPhoton]->Fill(pt,eta);
3264 fhPtIsoMC [mcIndex]->Fill(pt);
3265 fhPhiIsoMC[mcIndex]->Fill(pt,phi);
3266 fhEtaIsoMC[mcIndex]->Fill(pt,eta);
3267 }//Histograms with MC
3269 }//Isolated histograms
3270 else // NON isolated
3272 if(GetDebug() > 1) printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d NOT ISOLATED, fill histograms\n", iaod);
3274 fhENoIso ->Fill(energy);
3275 fhPtNoIso ->Fill(pt);
3276 fhEtaPhiNoIso ->Fill(eta,phi);
3278 if(fFillNLMHistograms) fhPtNLocMaxNoIso->Fill(pt,aod->GetFiducialArea());
3280 if(fFillPileUpHistograms)
3282 if(GetReader()->IsPileUpFromSPD()) { fhENoIsoPileUp[0] ->Fill(energy) ; fhPtNoIsoPileUp[0]->Fill(pt) ; }
3283 if(GetReader()->IsPileUpFromEMCal()) { fhENoIsoPileUp[1] ->Fill(energy) ; fhPtNoIsoPileUp[1]->Fill(pt) ; }
3284 if(GetReader()->IsPileUpFromSPDOrEMCal()) { fhENoIsoPileUp[2] ->Fill(energy) ; fhPtNoIsoPileUp[2]->Fill(pt) ; }
3285 if(GetReader()->IsPileUpFromSPDAndEMCal()) { fhENoIsoPileUp[3] ->Fill(energy) ; fhPtNoIsoPileUp[3]->Fill(pt) ; }
3286 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) { fhENoIsoPileUp[4] ->Fill(energy) ; fhPtNoIsoPileUp[4]->Fill(pt) ; }
3287 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) { fhENoIsoPileUp[5] ->Fill(energy) ; fhPtNoIsoPileUp[5]->Fill(pt) ; }
3288 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhENoIsoPileUp[6] ->Fill(energy) ; fhPtNoIsoPileUp[6]->Fill(pt) ; }
3291 if(decay && fFillTaggedDecayHistograms)
3293 fhPtDecayNoIso ->Fill(pt);
3294 fhEtaPhiDecayNoIso->Fill(eta,phi);
3299 if( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton) )
3300 fhPtNoIsoMC[kmcPhoton]->Fill(pt);
3302 fhPtNoIsoMC[mcIndex]->Fill(pt);
3309 //______________________________________________________________________
3310 void AliAnaParticleIsolation::FillAcceptanceHistograms()
3312 // Fill acceptance histograms if MC data is available
3313 // Only when particle is in the calorimeter. Rethink if CTS is used.
3315 //Double_t photonY = -100 ;
3316 Double_t photonE = -1 ;
3317 Double_t photonPt = -1 ;
3318 Double_t photonPhi = 100 ;
3319 Double_t photonEta = -1 ;
3327 TParticle * primStack = 0;
3328 AliAODMCParticle * primAOD = 0;
3331 // Get the ESD MC particles container
3332 AliStack * stack = 0;
3333 if( GetReader()->ReadStack() )
3335 stack = GetMCStack();
3337 nprim = stack->GetNtrack();
3340 // Get the AOD MC particles container
3341 TClonesArray * mcparticles = 0;
3342 if( GetReader()->ReadAODMCParticles() )
3344 mcparticles = GetReader()->GetAODMCParticles();
3345 if( !mcparticles ) return;
3346 nprim = mcparticles->GetEntriesFast();
3349 for(Int_t i=0 ; i < nprim; i++)
3351 if(GetReader()->AcceptOnlyHIJINGLabels() && !GetReader()->IsHIJINGLabel(i)) continue ;
3353 if(GetReader()->ReadStack())
3355 primStack = stack->Particle(i) ;
3358 printf("AliAnaParticleIsolation::FillAcceptanceHistograms() - ESD primaries pointer not available!!\n");
3362 pdg = primStack->GetPdgCode();
3363 status = primStack->GetStatusCode();
3365 if(primStack->Energy() == TMath::Abs(primStack->Pz())) continue ; //Protection against floating point exception
3367 //printf("i %d, %s %d %s %d \n",i, stack->Particle(i)->GetName(), stack->Particle(i)->GetPdgCode(),
3368 // prim->GetName(), prim->GetPdgCode());
3370 //photonY = 0.5*TMath::Log((prim->Energy()-prim->Pz())/(prim->Energy()+prim->Pz())) ;
3373 primStack->Momentum(lv);
3378 primAOD = (AliAODMCParticle *) mcparticles->At(i);
3381 printf("AliAnaParticleIsolation::FillAcceptanceHistograms() - AOD primaries pointer not available!!\n");
3385 pdg = primAOD->GetPdgCode();
3386 status = primAOD->GetStatus();
3388 if(primAOD->E() == TMath::Abs(primAOD->Pz())) continue ; //Protection against floating point exception
3390 //photonY = 0.5*TMath::Log((prim->Energy()-prim->Pz())/(prim->Energy()+prim->Pz())) ;
3393 lv.SetPxPyPzE(primAOD->Px(),primAOD->Py(),primAOD->Pz(),primAOD->E());
3396 // Select only photons in the final state
3397 if(pdg != 22 ) continue ;
3399 // Consider only final state particles, but this depends on generator,
3400 // status 1 is the usual one, in case of not being ok, leave the possibility
3401 // to not consider this.
3402 if(status != 1 && GetMCAnalysisUtils()->GetMCGenerator()!="" ) continue ;
3404 // If too small or too large pt, skip, same cut as for data analysis
3405 photonPt = lv.Pt () ;
3407 if(photonPt < GetMinPt() || photonPt > GetMaxPt() ) continue ;
3410 photonEta = lv.Eta() ;
3411 photonPhi = lv.Phi() ;
3413 if(photonPhi < 0) photonPhi+=TMath::TwoPi();
3415 // Check if photons hit the Calorimeter acceptance
3416 if(IsRealCaloAcceptanceOn() && fIsoDetector!="CTS") // defined on base class
3418 if(GetReader()->ReadStack() &&
3419 !GetCaloUtils()->IsMCParticleInCalorimeterAcceptance(fIsoDetector, primStack)) continue ;
3420 if(GetReader()->ReadAODMCParticles() &&
3421 !GetCaloUtils()->IsMCParticleInCalorimeterAcceptance(fIsoDetector, primAOD )) continue ;
3424 // Check same fidutial borders as in data analysis on top of real acceptance if real was requested.
3425 if(!GetFiducialCut()->IsInFiducialCut(lv,fIsoDetector)) continue ;
3427 // Get tag of this particle photon from fragmentation, decay, prompt ...
3428 // Set the origin of the photon.
3429 tag = GetMCAnalysisUtils()->CheckOrigin(i,GetReader());
3431 if(!GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
3433 // A conversion photon from a hadron, skip this kind of photon
3434 // printf("AliAnaPhoton::FillAcceptanceHistograms() - not a photon, weird!\n ");
3435 // GetMCAnalysisUtils()->PrintMCTag(tag);
3441 if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPrompt) )
3443 mcIndex = kmcPrimPrompt;
3445 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCFragmentation) )
3447 mcIndex = kmcPrimFrag ;
3449 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCISR))
3451 mcIndex = kmcPrimISR;
3453 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0Decay))
3455 mcIndex = kmcPrimPi0Decay;
3457 else if( (GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEtaDecay) ||
3458 GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCOtherDecay)))
3460 mcIndex = kmcPrimOtherDecay;
3464 // Other decay but from non final state particle
3465 mcIndex = kmcPrimOtherDecay;
3468 // ////////////////////ISO MC/////////////////////////
3469 Double_t sumPtInCone = 0; Double_t dR=0. ;
3470 TParticle * mcisopStack = 0;
3471 AliAODMCParticle * mcisopAOD = 0;
3472 Int_t partInConeStatus = -1, partInConeMother = -1;
3473 Double_t partInConePt = 0, partInConeEta = 0, partInConePhi = 0;
3475 for(Int_t ip = 0; ip < nprim ; ip++)
3479 if( GetReader()->ReadStack() )
3481 mcisopStack = static_cast<TParticle*>(stack->Particle(ip));
3482 if( !mcisopStack ) continue;
3483 partInConeStatus = mcisopStack->GetStatusCode();
3484 partInConeMother = mcisopStack->GetMother(0);
3485 partInConePt = mcisopStack->Pt();
3486 partInConeEta = mcisopStack->Eta();
3487 partInConePhi = mcisopStack->Phi();
3491 mcisopAOD = (AliAODMCParticle *) mcparticles->At(ip);
3492 if( !mcisopAOD ) continue;
3493 partInConeStatus = mcisopAOD->GetStatus();
3494 partInConeMother = mcisopAOD->GetMother();
3495 partInConePt = mcisopAOD->Pt();
3496 partInConeEta = mcisopAOD->Eta();
3497 partInConePhi = mcisopAOD->Phi();
3500 // Consider only final state particles, but this depends on generator,
3501 // status 1 is the usual one, in case of not being ok, leave the possibility
3502 // to not consider this.
3503 if( partInConeStatus != 1 && GetMCAnalysisUtils()->GetMCGenerator()!="" ) continue ;
3505 if( partInConeMother == i ) continue;
3507 if( partInConePt < GetReader()->GetCTSPtMin() ) continue;
3508 // Careful!!!, cut for TPC tracks and calorimeter clusters in cone can be different
3510 // TVector3 vmcv(mcisop->Px(),mcisop->Py(), mcisop->Pz());
3511 // if(vmcv.Perp()>1)
3515 // Add here Acceptance cut???, charged particles CTS fid cut, neutral Calo real acceptance.
3518 dR = GetIsolationCut()->Radius(photonEta, photonPhi, partInConeEta, partInConePhi);
3520 if(dR > GetIsolationCut()->GetConeSize())
3523 sumPtInCone += partInConePt;
3524 if(partInConePt > GetIsolationCut()->GetPtThreshold() &&
3525 partInConePt < GetIsolationCut()->GetPtThresholdMax()) npart++;
3528 ///////END ISO MC/////////////////////////
3530 // Fill the histograms, only those in the defined calorimeter acceptance
3532 fhEtaPrimMC[kmcPrimPhoton]->Fill(photonPt , photonEta) ;
3533 fhPhiPrimMC[kmcPrimPhoton]->Fill(photonPt , photonPhi) ;
3534 fhEPrimMC [kmcPrimPhoton]->Fill(photonE) ;
3536 fhEtaPrimMC[mcIndex]->Fill(photonPt , photonEta) ;
3537 fhPhiPrimMC[mcIndex]->Fill(photonPt , photonPhi) ;
3538 fhEPrimMC [mcIndex]->Fill(photonE ) ;
3541 Bool_t isolated = kFALSE;
3542 if(GetIsolationCut()->GetICMethod() == AliIsolationCut::kSumPtIC &&
3543 (sumPtInCone < GetIsolationCut()->GetSumPtThreshold() ||
3544 sumPtInCone > GetIsolationCut()->GetSumPtThresholdMax()))
3547 if(GetIsolationCut()->GetICMethod() == AliIsolationCut::kPtThresIC &&
3553 fhPtPrimMCiso [mcIndex] ->Fill(photonPt) ;
3554 fhPtPrimMCiso [kmcPrimPhoton]->Fill(photonPt) ;
3557 }//loop on primaries
3561 //_____________________________________________________________________________________
3562 void AliAnaParticleIsolation::MakeSeveralICAnalysis(AliAODPWG4ParticleCorrelation* ph,
3566 //Isolation Cut Analysis for both methods and different pt cuts and cones
3567 Float_t ptC = ph->Pt();
3568 Float_t etaC = ph->Eta();
3569 Float_t phiC = ph->Phi();
3570 Int_t tag = ph->GetTag();
3571 Bool_t decay = ph->IsTagged();
3573 if(GetDebug() > 0) printf("AliAnaParticleIsolation::MakeSeveralICAnalysis() - Isolate pT %2.2f\n",ptC);
3575 //Keep original setting used when filling AODs, reset at end of analysis
3576 Float_t ptthresorg = GetIsolationCut()->GetPtThreshold();
3577 Float_t ptfracorg = GetIsolationCut()->GetPtFraction();
3578 Float_t rorg = GetIsolationCut()->GetConeSize();
3580 Float_t coneptsum = 0 ;
3581 Int_t n [10][10];//[fNCones][fNPtThresFrac];
3582 Int_t nfrac[10][10];//[fNCones][fNPtThresFrac];
3583 Bool_t isolated = kFALSE;
3585 Int_t nFracCone = 0;
3587 // Fill hist with all particles before isolation criteria
3588 fhPtNoIso ->Fill(ptC);
3589 fhEtaPhiNoIso->Fill(etaC,phiC);
3593 if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
3594 fhPtNoIsoMC[kmcPhoton]->Fill(ptC);
3596 fhPtNoIsoMC[mcIndex]->Fill(ptC);
3601 fhPtDecayNoIso ->Fill(ptC);
3602 fhEtaPhiDecayNoIso->Fill(etaC,phiC);
3604 //Get vertex for photon momentum calculation
3605 Double_t vertex[] = {0,0,0} ; //vertex ;
3606 if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
3607 GetReader()->GetVertex(vertex);
3609 //Loop on cone sizes
3610 for(Int_t icone = 0; icone<fNCones; icone++)
3612 //Recover reference arrays with clusters and tracks
3613 TObjArray * refclusters = ph->GetObjArray(GetAODObjArrayName()+"Clusters");
3614 TObjArray * reftracks = ph->GetObjArray(GetAODObjArrayName()+"Tracks");
3616 //If too small or too large pt, skip
3617 if(ptC < GetMinPt() || ptC > GetMaxPt() ) continue ;
3619 //In case a more strict IC is needed in the produced AOD
3621 nCone=0; nFracCone = 0; isolated = kFALSE; coneptsum = 0;
3623 GetIsolationCut()->SetSumPtThreshold(100);
3624 GetIsolationCut()->SetPtThreshold(100);
3625 GetIsolationCut()->SetPtFraction(100);
3626 GetIsolationCut()->SetConeSize(fConeSizes[icone]);
3627 GetIsolationCut()->MakeIsolationCut(reftracks, refclusters,
3628 GetReader(), GetCaloPID(),
3630 nCone,nFracCone,coneptsum, isolated);
3632 fhSumPtLeadingPt[icone]->Fill(ptC,coneptsum);
3634 // retreive pt tracks to fill histo vs. pt leading
3635 //Fill pt distribution of particles in cone
3636 //fhPtLeadingPt(),fhPerpSumPtLeadingPt(),fhPerpPtLeadingPt(),
3640 Double_t sumptPerp = 0. ;
3641 TObjArray * trackList = GetCTSTracks() ;
3642 for(Int_t itrack=0; itrack < trackList->GetEntriesFast(); itrack++)
3644 AliVTrack* track = (AliVTrack *) trackList->At(itrack);
3645 //fill the histograms at forward range
3648 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Track not available?");
3652 Double_t dPhi = phiC - track->Phi() + TMath::PiOver2();
3653 Double_t dEta = etaC - track->Eta();
3654 Double_t arg = dPhi*dPhi + dEta*dEta;
3655 if(TMath::Sqrt(arg) < fConeSizes[icone])
3657 fhPerpPtLeadingPt[icone]->Fill(ptC,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
3658 sumptPerp+=track->Pt();
3661 dPhi = phiC - track->Phi() - TMath::PiOver2();
3662 arg = dPhi*dPhi + dEta*dEta;
3663 if(TMath::Sqrt(arg) < fConeSizes[icone])
3665 fhPerpPtLeadingPt[icone]->Fill(ptC,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
3666 sumptPerp+=track->Pt();
3670 fhPerpSumPtLeadingPt[icone]->Fill(ptC,sumptPerp);
3674 for(Int_t itrack=0; itrack < reftracks->GetEntriesFast(); itrack++)
3676 AliVTrack* track = (AliVTrack *) reftracks->At(itrack);
3677 fhPtLeadingPt[icone]->Fill(ptC,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
3678 coneptsum+=track->Pt();
3685 TLorentzVector mom ;
3686 for(Int_t icalo=0; icalo < refclusters->GetEntriesFast(); icalo++)
3688 AliVCluster* calo = (AliVCluster *) refclusters->At(icalo);
3689 calo->GetMomentum(mom,vertex) ;//Assume that come from vertex in straight line
3691 fhPtLeadingPt[icone]->Fill(ptC, mom.Pt());
3692 coneptsum+=mom.Pt();
3698 //Loop on ptthresholds
3699 for(Int_t ipt = 0; ipt<fNPtThresFrac ;ipt++)
3702 nfrac[icone][ipt]=0;
3703 GetIsolationCut()->SetPtThreshold(fPtThresholds[ipt]);
3704 GetIsolationCut()->SetPtFraction(fPtFractions[ipt]) ;
3705 GetIsolationCut()->SetSumPtThreshold(fSumPtThresholds[ipt]);
3707 GetIsolationCut()->MakeIsolationCut(reftracks, refclusters,
3708 GetReader(), GetCaloPID(),
3710 n[icone][ipt],nfrac[icone][ipt],coneptsum, isolated);
3712 if(!isolated) continue;
3713 //Normal ptThreshold cut
3715 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",
3716 fConeSizes[icone],fPtThresholds[ipt],fSumPtThresholds[ipt],n[icone][ipt],nfrac[icone][ipt],coneptsum, isolated);
3717 if(GetDebug() > 0) printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - pt %1.1f, eta %1.1f, phi %1.1f\n",ptC, etaC, phiC);
3719 if(n[icone][ipt] == 0)
3721 if(GetDebug()>0) printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling pt threshold loop\n");
3722 fhPtThresIsolated[icone][ipt]->Fill(ptC);
3723 fhEtaPhiPtThresIso[icone][ipt]->Fill(etaC,phiC);
3727 fhPtPtThresDecayIso[icone][ipt]->Fill(ptC);
3728 // fhEtaPhiPtThresDecayIso[icone][ipt]->Fill(etaC,phiC);
3734 if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton) )
3735 fhPtThresIsolatedMC[kmcPhoton][icone][ipt]->Fill(ptC) ;
3737 fhPtThresIsolatedMC[mcIndex][icone][ipt]->Fill(ptC) ;
3742 // pt in cone fraction
3743 if(nfrac[icone][ipt] == 0)
3745 if(GetDebug()>0) printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling frac loop\n");
3746 fhPtFracIsolated[icone][ipt]->Fill(ptC);
3747 fhEtaPhiPtFracIso[icone][ipt]->Fill(etaC,phiC);
3751 fhPtPtFracDecayIso[icone][ipt]->Fill(ptC);
3752 fhEtaPhiPtFracDecayIso[icone][ipt]->Fill(etaC,phiC);
3757 if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
3758 fhPtFracIsolatedMC[kmcPhoton][icone][ipt]->Fill(ptC) ;
3760 fhPtFracIsolatedMC[mcIndex][icone][ipt]->Fill(ptC) ;
3764 if(GetDebug()>0) printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - checking IC method : %i\n",GetIsolationCut()->GetICMethod());
3766 //Pt threshold on pt cand/ sum in cone histograms
3767 if(coneptsum<fSumPtThresholds[ipt])
3768 {// if((GetIsolationCut()->GetICMethod())==1){//kSumPtIC){
3769 if(GetDebug()>0) printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling sum loop\n");
3770 fhPtSumIsolated[icone][ipt]->Fill(ptC) ;
3771 fhEtaPhiPtSumIso[icone][ipt]->Fill(etaC, phiC) ;
3774 fhPtPtSumDecayIso[icone][ipt]->Fill(ptC);
3775 fhEtaPhiPtSumDecayIso[icone][ipt]->Fill(etaC, phiC) ;
3779 // pt sum pt frac method
3780 // if( ((fPtFractions[ipt]*ptC < fSumPtThresholds[ipt]) && (coneptsum < fSumPtThresholds[ipt])) || ((fPtFractions[ipt]*ptC > fSumPtThresholds[ipt]) && (coneptsum < fPtFractions[ipt]*ptC)) )
3782 if(coneptsum < fPtFractions[ipt]*ptC)
3784 if(GetDebug()>0) printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling PtFrac PtSum loop\n");
3785 fhPtFracPtSumIso[icone][ipt]->Fill(ptC) ;
3786 fhEtaPhiFracPtSumIso[icone][ipt]->Fill(etaC,phiC) ;
3790 fhPtFracPtSumDecayIso[icone][ipt]->Fill(ptC);
3791 fhEtaPhiFracPtSumDecayIso[icone][ipt]->Fill(etaC,phiC);
3796 Float_t cellDensity = GetIsolationCut()->GetCellDensity( ph, GetReader());
3797 if(coneptsum<fSumPtThresholds[ipt]*cellDensity)
3798 {//(GetIsolationCut()->GetICMethod())==4){//kSumDensityIC) {
3799 if(GetDebug()>0) printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling density loop\n");
3800 fhPtSumDensityIso[icone][ipt]->Fill(ptC) ;
3801 fhEtaPhiSumDensityIso[icone][ipt]->Fill(etaC,phiC) ;
3805 fhPtSumDensityDecayIso[icone][ipt]->Fill(ptC);
3806 fhEtaPhiSumDensityDecayIso[icone][ipt]->Fill(etaC, phiC);
3814 if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
3815 fhPtSumIsolatedMC[kmcPhoton][icone]->Fill(ptC,coneptsum) ;
3817 fhPtSumIsolatedMC[mcIndex][icone]->Fill(ptC,coneptsum) ;
3822 //Reset original parameters for AOD analysis
3823 GetIsolationCut()->SetPtThreshold(ptthresorg);
3824 GetIsolationCut()->SetPtFraction(ptfracorg);
3825 GetIsolationCut()->SetConeSize(rorg);
3829 //_____________________________________________________________
3830 void AliAnaParticleIsolation::Print(const Option_t * opt) const
3833 //Print some relevant parameters set for the analysis
3837 printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
3838 AliAnaCaloTrackCorrBaseClass::Print(" ");
3840 printf("ReMake Isolation = %d \n", fReMakeIC) ;
3841 printf("Make Several Isolation = %d \n", fMakeSeveralIC) ;
3842 printf("Calorimeter for isolation = %s \n", fCalorimeter.Data()) ;
3843 printf("Detector for candidate isolation = %s \n", fIsoDetector.Data()) ;
3847 printf("N Cone Sizes = %d\n", fNCones) ;
3848 printf("Cone Sizes = \n") ;
3849 for(Int_t i = 0; i < fNCones; i++)
3850 printf(" %1.2f;", fConeSizes[i]) ;
3853 printf("N pT thresholds/fractions = %d\n", fNPtThresFrac) ;
3854 printf(" pT thresholds = \n") ;
3855 for(Int_t i = 0; i < fNPtThresFrac; i++)
3856 printf(" %2.2f;", fPtThresholds[i]) ;
3860 printf(" pT fractions = \n") ;
3861 for(Int_t i = 0; i < fNPtThresFrac; i++)
3862 printf(" %2.2f;", fPtFractions[i]) ;
3866 printf("sum pT thresholds = \n") ;
3867 for(Int_t i = 0; i < fNPtThresFrac; i++)
3868 printf(" %2.2f;", fSumPtThresholds[i]) ;
3873 printf("Histograms: %3.1f < pT sum < %3.1f, Nbin = %d\n", fHistoPtSumMin, fHistoPtSumMax, fHistoNPtSumBins );
3874 printf("Histograms: %3.1f < pT in cone < %3.1f, Nbin = %d\n", fHistoPtInConeMin, fHistoPtInConeMax, fHistoNPtInConeBins);