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 fNDecayBits(0), fDecayBits(),
72 fFillNLMHistograms(0),
73 fLeadingOnly(0), fCheckLeadingWithNeutralClusters(0),
74 fFillBackgroundBinHistograms(0), fNBkgBin(0),
76 fNCones(0), fNPtThresFrac(0),
77 fConeSizes(), fPtThresholds(),
78 fPtFractions(), fSumPtThresholds(),
80 fhEIso(0), fhPtIso(0),
81 fhPtCentralityIso(0), fhPtEventPlaneIso(0),
83 fhPhiIso(0), fhEtaIso(0), fhEtaPhiIso(0),
85 fhENoIso(0), fhPtNoIso(0), fhPtNLocMaxNoIso(0),
87 fhPtClusterInCone(0), fhPtCellInCone(0), fhPtTrackInCone(0),
88 fhPtTrackInConeOtherBC(0), fhPtTrackInConeOtherBCPileUpSPD(0),
89 fhPtTrackInConeBC0(0), fhPtTrackInConeVtxBC0(0),
90 fhPtTrackInConeBC0PileUpSPD(0),
91 fhPtInConePileUp(), fhPtInConeCent(0),
92 fhPerpConeSumPt(0), fhPtInPerpCone(0),
94 fhEtaPhiInConeCluster(0), fhEtaPhiCluster(0),
95 fhEtaPhiInConeTrack(0), fhEtaPhiTrack(0),
96 fhEtaBandCluster(0), fhPhiBandCluster(0),
97 fhEtaBandTrack(0), fhPhiBandTrack(0),
98 fhEtaBandCell(0), fhPhiBandCell(0),
99 fhConePtLead(0), fhConePtLeadCluster(0), fhConePtLeadTrack(0),
100 fhConePtLeadClustervsTrack(0), fhConePtLeadClusterTrackFrac(0),
101 fhConeSumPt(0), fhConeSumPtCellTrack(0),
102 fhConeSumPtCell(0), fhConeSumPtCluster(0), fhConeSumPtTrack(0),
103 fhConeSumPtEtaBandUECluster(0), fhConeSumPtPhiBandUECluster(0),
104 fhConeSumPtEtaBandUETrack(0), fhConeSumPtPhiBandUETrack(0),
105 fhConeSumPtEtaBandUECell(0), fhConeSumPtPhiBandUECell(0),
106 fhConeSumPtTrigEtaPhi(0),
107 fhConeSumPtCellTrackTrigEtaPhi(0),
108 fhConeSumPtEtaBandUEClusterTrigEtaPhi(0), fhConeSumPtPhiBandUEClusterTrigEtaPhi(0),
109 fhConeSumPtEtaBandUETrackTrigEtaPhi(0), fhConeSumPtPhiBandUETrackTrigEtaPhi(0),
110 fhConeSumPtEtaBandUECellTrigEtaPhi(0), fhConeSumPtPhiBandUECellTrigEtaPhi(0),
111 fhConeSumPtEtaUESub(0), fhConeSumPtPhiUESub(0),
112 fhConeSumPtEtaUESubTrigEtaPhi(0), fhConeSumPtPhiUESubTrigEtaPhi(0),
113 fhConeSumPtEtaUESubTrackCell(0), fhConeSumPtPhiUESubTrackCell(0),
114 fhConeSumPtEtaUESubTrackCellTrigEtaPhi(0), fhConeSumPtPhiUESubTrackCellTrigEtaPhi(0),
115 fhConeSumPtEtaUESubCluster(0), fhConeSumPtPhiUESubCluster(0),
116 fhConeSumPtEtaUESubClusterTrigEtaPhi(0), fhConeSumPtPhiUESubClusterTrigEtaPhi(0),
117 fhConeSumPtEtaUESubCell(0), fhConeSumPtPhiUESubCell(0),
118 fhConeSumPtEtaUESubCellTrigEtaPhi(0), fhConeSumPtPhiUESubCellTrigEtaPhi(0),
119 fhConeSumPtEtaUESubTrack(0), fhConeSumPtPhiUESubTrack(0),
120 fhConeSumPtEtaUESubTrackTrigEtaPhi(0), fhConeSumPtPhiUESubTrackTrigEtaPhi(0),
121 fhFractionTrackOutConeEta(0), fhFractionTrackOutConeEtaTrigEtaPhi(0),
122 fhFractionClusterOutConeEta(0), fhFractionClusterOutConeEtaTrigEtaPhi(0),
123 fhFractionClusterOutConePhi(0), fhFractionClusterOutConePhiTrigEtaPhi(0),
124 fhFractionCellOutConeEta(0), fhFractionCellOutConeEtaTrigEtaPhi(0),
125 fhFractionCellOutConePhi(0), fhFractionCellOutConePhiTrigEtaPhi(0),
126 fhConeSumPtClustervsTrack(0), fhConeSumPtClusterTrackFrac(0),
127 fhConeSumPtEtaUESubClustervsTrack(0), fhConeSumPtPhiUESubClustervsTrack(0),
128 fhConeSumPtCellvsTrack(0),
129 fhConeSumPtEtaUESubCellvsTrack(0), fhConeSumPtPhiUESubCellvsTrack(0),
130 fhEtaBandClustervsTrack(0), fhPhiBandClustervsTrack(0),
131 fhEtaBandNormClustervsTrack(0), fhPhiBandNormClustervsTrack(0),
132 fhEtaBandCellvsTrack(0), fhPhiBandCellvsTrack(0),
133 fhEtaBandNormCellvsTrack(0), fhPhiBandNormCellvsTrack(0),
134 fhConeSumPtSubvsConeSumPtTotPhiTrack(0), fhConeSumPtSubNormvsConeSumPtTotPhiTrack(0),
135 fhConeSumPtSubvsConeSumPtTotEtaTrack(0), fhConeSumPtSubNormvsConeSumPtTotEtaTrack(0),
136 fhConeSumPtSubvsConeSumPtTotPhiCluster(0), fhConeSumPtSubNormvsConeSumPtTotPhiCluster(0),
137 fhConeSumPtSubvsConeSumPtTotEtaCluster(0), fhConeSumPtSubNormvsConeSumPtTotEtaCluster(0),
138 fhConeSumPtSubvsConeSumPtTotPhiCell(0), fhConeSumPtSubNormvsConeSumPtTotPhiCell(0),
139 fhConeSumPtSubvsConeSumPtTotEtaCell(0), fhConeSumPtSubNormvsConeSumPtTotEtaCell(0),
140 fhConeSumPtVSUETracksEtaBand(0), fhConeSumPtVSUETracksPhiBand(0),
141 fhConeSumPtVSUEClusterEtaBand(0), fhConeSumPtVSUEClusterPhiBand(0),
142 fhPtLeadConeBinLambda0(0), fhSumPtConeBinLambda0(0),
143 fhPtLeadConeBinLambda0MC(0), fhSumPtConeBinLambda0MC(0),
144 // Number of local maxima in cluster
146 fhELambda0LocMax1(), fhELambda1LocMax1(),
147 fhELambda0LocMax2(), fhELambda1LocMax2(),
148 fhELambda0LocMaxN(), fhELambda1LocMaxN(),
150 fhEIsoPileUp(), fhPtIsoPileUp(),
151 fhENoIsoPileUp(), fhPtNoIsoPileUp(),
152 fhTimeENoCut(0), fhTimeESPD(0), fhTimeESPDMulti(0),
153 fhTimeNPileUpVertSPD(0), fhTimeNPileUpVertTrack(0),
154 fhTimeNPileUpVertContributors(0),
155 fhTimePileUpMainVertexZDistance(0), fhTimePileUpMainVertexZDiamond(0)
159 //Initialize parameters
162 for(Int_t i = 0; i < 5 ; i++)
166 for(Int_t imc = 0; imc < 9; imc++)
167 fhSumPtLeadingPtMC[imc][i] = 0 ;
169 for(Int_t j = 0; j < 5 ; j++)
171 fhPtThresIsolated [i][j] = 0 ;
172 fhPtFracIsolated [i][j] = 0 ;
173 fhSumPtIsolated [i][j] = 0 ;
175 fhEtaPhiPtThresIso [i][j] = 0 ;
176 fhEtaPhiPtThresDecayIso [i][j] = 0 ;
177 fhPtPtThresDecayIso [i][j] = 0 ;
179 fhEtaPhiPtFracIso [i][j] = 0 ;
180 fhEtaPhiPtFracDecayIso [i][j] = 0 ;
181 fhPtPtFracDecayIso [i][j] = 0 ;
182 fhPtPtSumDecayIso [i][j] = 0 ;
183 fhPtSumDensityIso [i][j] = 0 ;
184 fhPtSumDensityDecayIso [i][j] = 0 ;
185 fhEtaPhiSumDensityIso [i][j] = 0 ;
186 fhEtaPhiSumDensityDecayIso [i][j] = 0 ;
187 fhPtFracPtSumIso [i][j] = 0 ;
188 fhPtFracPtSumDecayIso [i][j] = 0 ;
189 fhEtaPhiFracPtSumIso [i][j] = 0 ;
190 fhEtaPhiFracPtSumDecayIso [i][j] = 0 ;
192 for(Int_t imc = 0; imc < 9; imc++)
194 fhPtThresIsolatedMC[imc][i][j] = 0 ;
195 fhPtFracIsolatedMC [imc][i][j] = 0 ;
196 fhSumPtIsolatedMC [imc][i][j] = 0 ;
202 for(Int_t ibit =0; ibit< 4; ibit++)
204 fhPtDecayIso [ibit] = 0;
205 fhPtDecayNoIso [ibit] = 0;
206 fhEtaPhiDecayIso [ibit] = 0;
207 fhEtaPhiDecayNoIso[ibit] = 0;
208 for(Int_t imc = 0; imc < 9; imc++)
210 fhPtDecayIsoMC [ibit][imc] = 0;
211 fhPtDecayNoIsoMC[ibit][imc] = 0;
215 for(Int_t i = 0; i < 5 ; i++)
217 fPtFractions [i] = 0 ;
218 fPtThresholds [i] = 0 ;
219 fSumPtThresholds[i] = 0 ;
221 fhSumPtLeadingPt [i] = 0 ;
222 fhPtLeadingPt [i] = 0 ;
223 fhPerpSumPtLeadingPt[i] = 0 ;
224 fhPerpPtLeadingPt [i] = 0 ;
227 for(Int_t imc = 0; imc < 9; imc++)
229 fhPtNoIsoMC [imc] = 0;
231 fhPhiIsoMC [imc] = 0;
232 fhEtaIsoMC [imc] = 0;
233 fhPtLambda0MC[imc][0] = 0;
234 fhPtLambda0MC[imc][1] = 0;
237 for(Int_t i = 0; i < 2 ; i++)
239 fhTrackMatchedDEta[i] = 0 ; fhTrackMatchedDPhi[i] = 0 ; fhTrackMatchedDEtaDPhi [i] = 0 ;
240 fhdEdx [i] = 0 ; fhEOverP [i] = 0 ; fhTrackMatchedMCParticle[i] = 0 ;
241 fhELambda0 [i] = 0 ; fhELambda1 [i] = 0 ; fhPtLambda0 [i] = 0 ;
242 fhELambda0TRD [i] = 0 ; fhELambda1TRD [i] = 0 ; fhPtLambda0TRD [i] = 0 ;
244 // Number of local maxima in cluster
246 fhELambda0LocMax1[i] = 0 ; fhELambda1LocMax1[i] = 0 ;
247 fhELambda0LocMax2[i] = 0 ; fhELambda1LocMax2[i] = 0 ;
248 fhELambda0LocMaxN[i] = 0 ; fhELambda1LocMaxN[i] = 0 ;
252 for(Int_t i = 0; i < 6; i++)
254 fhPtPrimMCiso[i] = 0;
262 for(Int_t i = 0 ; i < 7 ; i++)
264 fhPtInConePileUp[i] = 0 ;
265 fhEIsoPileUp [i] = 0 ;
266 fhPtIsoPileUp [i] = 0 ;
267 fhENoIsoPileUp [i] = 0 ;
268 fhPtNoIsoPileUp [i] = 0 ;
272 //_______________________________________________________________________________________________
273 void AliAnaParticleIsolation::CalculateCaloUEBand(AliAODPWG4ParticleCorrelation * pCandidate,
274 Float_t & etaBandPtSum, Float_t & phiBandPtSum)
276 // Get the clusters pT or sum of pT in phi/eta bands or at 45 degrees from trigger
278 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyCharged ) return ;
280 Float_t conesize = GetIsolationCut()->GetConeSize();
283 //Select the Calorimeter
284 TObjArray * pl = 0x0;
285 if (fCalorimeter == "PHOS" )
286 pl = GetPHOSClusters();
287 else if (fCalorimeter == "EMCAL")
288 pl = GetEMCALClusters();
292 //Get vertex for cluster momentum calculation
293 Double_t vertex[] = {0,0,0} ; //vertex ;
294 if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
295 GetReader()->GetVertex(vertex);
297 Float_t ptTrig = pCandidate->Pt() ;
298 Float_t phiTrig = pCandidate->Phi();
299 Float_t etaTrig = pCandidate->Eta();
301 for(Int_t icluster=0; icluster < pl->GetEntriesFast(); icluster++)
303 AliVCluster* cluster = (AliVCluster *) pl->At(icluster);
307 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Cluster not available?");
311 //Do not count the candidate (photon or pi0) or the daughters of the candidate
312 if(cluster->GetID() == pCandidate->GetCaloLabel(0) ||
313 cluster->GetID() == pCandidate->GetCaloLabel(1) ) continue ;
315 //Remove matched clusters to tracks if Neutral and Track info is used
316 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kNeutralAndCharged &&
317 IsTrackMatched(cluster,GetReader()->GetInputEvent())) continue ;
319 cluster->GetMomentum(mom,vertex) ;//Assume that come from vertex in straight line
321 //exclude particles in cone
322 Float_t rad = GetIsolationCut()->Radius(etaTrig, phiTrig, mom.Eta(), mom.Phi());
324 // histo of eta and phi for all clusters
325 fhEtaPhiCluster->Fill(mom.Eta(), mom.Phi());
327 // histos for all clusters in cone
328 fhEtaPhiInConeCluster->Fill(mom.Eta(), mom.Phi());
331 //fill histogram for UE in phi band in EMCal acceptance
332 if(mom.Eta() > (etaTrig-conesize) && mom.Eta() < (etaTrig+conesize))
334 phiBandPtSum+=mom.Pt();
335 fhPhiBandCluster->Fill(mom.Eta(),mom.Phi());
339 //fill histogram for UE in eta band in EMCal acceptance
340 if(mom.Phi() > (phiTrig-conesize) && mom.Phi() < (phiTrig+conesize))
342 etaBandPtSum+=mom.Pt();
343 fhEtaBandCluster->Fill(mom.Eta(),mom.Phi());
347 fhConeSumPtEtaBandUECluster ->Fill(ptTrig , etaBandPtSum);
348 fhConeSumPtPhiBandUECluster ->Fill(ptTrig , phiBandPtSum);
349 fhConeSumPtEtaBandUEClusterTrigEtaPhi->Fill(etaTrig,phiTrig,etaBandPtSum);
350 fhConeSumPtPhiBandUEClusterTrigEtaPhi->Fill(etaTrig,phiTrig,phiBandPtSum);
354 //________________________________________________________________________________________________
355 void AliAnaParticleIsolation::CalculateCaloCellUEBand(AliAODPWG4ParticleCorrelation * pCandidate,
356 Float_t & etaBandPtSumCells, Float_t & phiBandPtSumCells)
358 // Get the cells amplitude or sum of amplitude in phi/eta bands or at 45 degrees from trigger
360 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyCharged ) return ;
362 Float_t conesize = GetIsolationCut()->GetConeSize();
364 Float_t phiTrig = pCandidate->Phi();
365 if(phiTrig<0) phiTrig += TMath::TwoPi();
366 Float_t etaTrig = pCandidate->Eta();
368 if(pCandidate->GetDetector()=="EMCAL")
370 AliEMCALGeometry* eGeom = AliEMCALGeometry::GetInstance();
373 if (eGeom->GetAbsCellIdFromEtaPhi(etaTrig,phiTrig,absId))
375 if(!eGeom->CheckAbsCellId(absId)) return ;
377 // Get absolute (col,row) of trigger particle
378 Int_t nSupMod = eGeom->GetSuperModuleNumber(absId);
380 Int_t imEta=-1, imPhi=-1;
381 Int_t ieta =-1, iphi =-1;
383 if (eGeom->GetCellIndex(absId,nSupMod,nModule,imPhi,imEta))
385 eGeom->GetCellPhiEtaIndexInSModule(nSupMod,nModule,imPhi,imEta,iphi,ieta);
387 Int_t colTrig = ieta;
388 if (nSupMod % 2) colTrig = AliEMCALGeoParams::fgkEMCALCols + ieta ;
389 Int_t rowTrig = iphi + AliEMCALGeoParams::fgkEMCALRows*int(nSupMod/2);
391 Int_t sqrSize = int(conesize/0.0143);
393 AliVCaloCells * cells = GetEMCALCells();
395 Int_t nTotalRows = AliEMCALGeoParams::fgkEMCALRows*16/3 ; // 24*(16/3) 5 full-size Sectors (2 SM) + 1 one-third Sector (2 SM)
396 Int_t nTotalCols = 2*AliEMCALGeoParams::fgkEMCALCols;
397 // printf("nTotalRows %i, nTotalCols %i\n",nTotalRows,nTotalCols);
398 // Loop on cells in eta band
400 Int_t irowmin = rowTrig-sqrSize;
401 if(irowmin<0) irowmin=0;
402 Int_t irowmax = rowTrig+sqrSize;
403 if(irowmax>AliEMCALGeoParams::fgkEMCALRows) irowmax=AliEMCALGeoParams::fgkEMCALRows;
406 for(Int_t irow = irowmin; irow <irowmax; irow++)
408 for(Int_t icol = 0; icol < nTotalCols; icol++)
410 Int_t inSector = int(irow/AliEMCALGeoParams::fgkEMCALRows);
411 if(inSector==5) continue;
414 if(icol < AliEMCALGeoParams::fgkEMCALCols)
416 inSupMod = 2*inSector + 1;
419 else if(icol > AliEMCALGeoParams::fgkEMCALCols - 1)
421 inSupMod = 2*inSector;
422 icolLoc = icol-AliEMCALGeoParams::fgkEMCALCols;
425 Int_t irowLoc = irow - AliEMCALGeoParams::fgkEMCALRows*inSector ;
427 // Exclude cells in cone
428 if(TMath::Abs(icol-colTrig) < sqrSize || TMath::Abs(irow-rowTrig) < sqrSize){
431 Int_t iabsId = eGeom->GetAbsCellIdFromCellIndexes(inSupMod,irowLoc,icolLoc);
432 if(!eGeom->CheckAbsCellId(iabsId)) continue;
433 etaBandPtSumCells += cells->GetCellAmplitude(iabsId);
434 fhEtaBandCell->Fill(colTrig,rowTrig);
436 // printf("ETA inSupMod %i,irowLoc %i,icolLoc %i, iabsId %i, etaBandPtSumCells %f\n",nSupMod,irowLoc,icolLoc,iabsId,etaBandPtSumCells);
439 Int_t icolmin = colTrig-sqrSize;
440 if(icolmin<0) icolmin=0;
441 Int_t icolmax = colTrig+sqrSize;
442 if(icolmax>AliEMCALGeoParams::fgkEMCALCols) icolmax=AliEMCALGeoParams::fgkEMCALCols;
444 // Loop on cells in phi band
445 for(Int_t icol = icolmin; icol < icolmax; icol++)
447 for(Int_t irow = 0; irow < nTotalRows; irow++)
449 Int_t inSector = int(irow/AliEMCALGeoParams::fgkEMCALRows);
450 if(inSector==5) continue;
453 // printf("icol %i, irow %i, inSector %i\n",icol,irow ,inSector);
454 if(icol < AliEMCALGeoParams::fgkEMCALCols)
456 // printf("icol < AliEMCALGeoParams::fgkEMCALCols %i\n",AliEMCALGeoParams::fgkEMCALCols );
457 inSupMod = 2*inSector + 1;
460 else if(icol > AliEMCALGeoParams::fgkEMCALCols - 1)
462 // printf("icol > AliEMCALGeoParams::fgkEMCALCols -1 %i\n",AliEMCALGeoParams::fgkEMCALCols -1 );
463 inSupMod = 2*inSector;
464 icolLoc = icol-AliEMCALGeoParams::fgkEMCALCols;
467 Int_t irowLoc = irow - AliEMCALGeoParams::fgkEMCALRows*inSector ; // Stesso problema di sopra //
469 // Exclude cells in cone
470 if(TMath::Abs(icol-colTrig) < sqrSize) {
471 //printf("TMath::Abs(icol-colTrig) %i < sqrSize %i\n",TMath::Abs(icol-colTrig) ,sqrSize);continue ;
473 if(TMath::Abs(irow-rowTrig) < sqrSize) {
474 //printf("TMath::Abs(irow-rowTrig) %i < sqrSize %i\n",TMath::Abs(irow-rowTrig) ,sqrSize);continue ;
477 Int_t iabsId = eGeom->GetAbsCellIdFromCellIndexes(inSupMod,irowLoc,icolLoc);
478 if(!eGeom->CheckAbsCellId(iabsId)) {printf("!eGeom->CheckAbsCellId(iabsId=%i) inSupMod %i irowLoc %i icolLoc %i \n",iabsId,inSupMod, irowLoc, icolLoc);continue;}
479 phiBandPtSumCells += cells->GetCellAmplitude(iabsId);
480 fhPhiBandCell->Fill(colTrig,rowTrig);
481 //printf("inSupMod %i,irowLoc %i,icolLoc %i, iabsId %i, phiBandPtSumCells %f\n",nSupMod,irowLoc,icolLoc,iabsId,phiBandPtSumCells);
488 Float_t ptTrig = pCandidate->Pt();
490 fhConeSumPtEtaBandUECell ->Fill(ptTrig , etaBandPtSumCells);
491 fhConeSumPtPhiBandUECell ->Fill(ptTrig , phiBandPtSumCells);
492 fhConeSumPtEtaBandUECellTrigEtaPhi->Fill(etaTrig,phiTrig,etaBandPtSumCells);
493 fhConeSumPtPhiBandUECellTrigEtaPhi->Fill(etaTrig,phiTrig,phiBandPtSumCells);
497 //________________________________________________________________________________________________
498 void AliAnaParticleIsolation::CalculateTrackUEBand(AliAODPWG4ParticleCorrelation * pCandidate,
499 Float_t & etaBandPtSum, Float_t & phiBandPtSum)
501 // Get the track pT or sum of pT in phi/eta bands or at 45 degrees from trigger
503 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyNeutral ) return ;
505 Float_t conesize = GetIsolationCut()->GetConeSize();
507 Double_t sumptPerp= 0. ;
508 Float_t ptTrig = pCandidate->Pt() ;
509 Float_t phiTrig = pCandidate->Phi();
510 Float_t etaTrig = pCandidate->Eta();
512 TObjArray * trackList = GetCTSTracks() ;
513 for(Int_t itrack=0; itrack < trackList->GetEntriesFast(); itrack++)
515 AliVTrack* track = (AliVTrack *) trackList->At(itrack);
519 printf("AliAnaParticleIsolation::CalculateTrackUEBand() - Track not available?");
523 //Do not count the candidate (pion, conversion photon) or the daughters of the candidate
524 if(track->GetID() == pCandidate->GetTrackLabel(0) || track->GetID() == pCandidate->GetTrackLabel(1) ||
525 track->GetID() == pCandidate->GetTrackLabel(2) || track->GetID() == pCandidate->GetTrackLabel(3) ) continue ;
527 // histo of eta:phi for all tracks
528 fhEtaPhiTrack->Fill(track->Eta(),track->Phi());
530 //exclude particles in cone
531 Float_t rad = GetIsolationCut()->Radius(etaTrig, phiTrig, track->Eta(), track->Phi());
533 // histo of eta:phi for all tracks in cone
534 fhEtaPhiInConeTrack->Fill(track->Eta(),track->Phi());
538 //fill histogram for UE in phi band
539 if(track->Eta() > (etaTrig-conesize) && track->Eta() < (etaTrig+conesize))
541 phiBandPtSum+=track->Pt();
542 fhPhiBandTrack->Fill(track->Eta(),track->Phi());
545 //fill histogram for UE in eta band in EMCal acceptance
546 if(track->Phi() > (phiTrig-conesize) && track->Phi() < (phiTrig+conesize))
548 etaBandPtSum+=track->Pt();
549 fhEtaBandTrack->Fill(track->Eta(),track->Phi());
552 //fill the histograms at +-45 degrees in phi from trigger particle, perpedicular to trigger axis in phi
553 Double_t dPhi = phiTrig - track->Phi() + TMath::PiOver2();
554 Double_t dEta = etaTrig - track->Eta();
555 Double_t arg = dPhi*dPhi + dEta*dEta;
556 if(TMath::Sqrt(arg) < conesize)
558 fhPtInPerpCone->Fill(ptTrig,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
559 sumptPerp+=track->Pt();
562 dPhi = phiTrig - track->Phi() - TMath::PiOver2();
563 arg = dPhi*dPhi + dEta*dEta;
564 if(TMath::Sqrt(arg) < conesize)
566 fhPtInPerpCone->Fill(ptTrig,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
567 sumptPerp+=track->Pt();
571 fhPerpConeSumPt ->Fill(ptTrig , sumptPerp );
572 fhConeSumPtEtaBandUETrack ->Fill(ptTrig , etaBandPtSum);
573 fhConeSumPtPhiBandUETrack ->Fill(ptTrig , phiBandPtSum);
574 fhConeSumPtEtaBandUETrackTrigEtaPhi->Fill(etaTrig,phiTrig,etaBandPtSum);
575 fhConeSumPtPhiBandUETrackTrigEtaPhi->Fill(etaTrig,phiTrig,phiBandPtSum);
581 //_____________________________________________________________________________________________________________________________________
582 void AliAnaParticleIsolation::CalculateNormalizeUEBandPerUnitArea(AliAODPWG4ParticleCorrelation * pCandidate, Float_t coneptsumCluster,
583 Float_t coneptsumCell, Float_t coneptsumTrack,
584 Float_t &etaBandptsumTrackNorm, Float_t &etaBandptsumClusterNorm)
586 //normalize phi/eta band per area unit
588 Float_t etaUEptsumTrack = 0 ;
589 Float_t phiUEptsumTrack = 0 ;
590 Float_t etaUEptsumCluster = 0 ;
591 Float_t phiUEptsumCluster = 0 ;
592 Float_t etaUEptsumCell = 0 ;
593 Float_t phiUEptsumCell = 0 ;
595 Int_t partTypeInCone = GetIsolationCut()->GetParticleTypeInCone();
597 // Do the normalization
599 Float_t conesize = GetIsolationCut()->GetConeSize();
600 Float_t coneA = conesize*conesize*TMath::Pi(); // A = pi R^2, isolation cone area
601 Float_t ptTrig = pCandidate->Pt() ;
602 Float_t phiTrig = pCandidate->Phi();
603 Float_t etaTrig = pCandidate->Eta();
609 Float_t phiUEptsumTrackNorm = 0 ;
610 Float_t etaUEptsumTrackNorm = 0 ;
611 Float_t coneptsumTrackSubPhi = 0 ;
612 Float_t coneptsumTrackSubEta = 0 ;
613 Float_t coneptsumTrackSubPhiNorm = 0 ;
614 Float_t coneptsumTrackSubEtaNorm = 0 ;
615 etaBandptsumTrackNorm = 0 ;
617 if( partTypeInCone!=AliIsolationCut::kOnlyNeutral )
619 // Sum the pT in the phi or eta band for clusters or tracks
620 CalculateTrackUEBand (pCandidate,etaUEptsumTrack ,phiUEptsumTrack );// rajouter ici l'histo eta phi
623 fhConeSumPtVSUETracksEtaBand->Fill(coneptsumTrack,etaUEptsumTrack);
624 fhConeSumPtVSUETracksPhiBand->Fill(coneptsumTrack,phiUEptsumTrack);
627 Float_t correctConeSumTrack = 1;
628 Float_t correctConeSumTrackPhi = 1;
630 GetIsolationCut()->CalculateUEBandTrackNormalization(GetReader(),etaTrig, phiTrig,
631 phiUEptsumTrack,etaUEptsumTrack,
632 phiUEptsumTrackNorm,etaUEptsumTrackNorm,
633 correctConeSumTrack,correctConeSumTrackPhi);
635 coneptsumTrackSubPhi = coneptsumTrack - phiUEptsumTrackNorm;
636 coneptsumTrackSubEta = coneptsumTrack - etaUEptsumTrackNorm;
638 etaBandptsumTrackNorm = etaUEptsumTrackNorm;
640 fhConeSumPtPhiUESubTrack ->Fill(ptTrig , coneptsumTrackSubPhi);
641 fhConeSumPtPhiUESubTrackTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumTrackSubPhi);
642 fhConeSumPtEtaUESubTrack ->Fill(ptTrig , coneptsumTrackSubEta);
643 fhConeSumPtEtaUESubTrackTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumTrackSubEta);
645 fhFractionTrackOutConeEta ->Fill(ptTrig , correctConeSumTrack-1);
646 fhFractionTrackOutConeEtaTrigEtaPhi->Fill(etaTrig, phiTrig,correctConeSumTrack-1);
648 if(coneptsumTrack > 0)
650 coneptsumTrackSubPhiNorm = coneptsumTrackSubPhi/coneptsumTrack;
651 coneptsumTrackSubEtaNorm = coneptsumTrackSubEta/coneptsumTrack;
654 fhConeSumPtSubvsConeSumPtTotPhiTrack ->Fill(coneptsumTrack,coneptsumTrackSubPhi);
655 fhConeSumPtSubNormvsConeSumPtTotPhiTrack->Fill(coneptsumTrack,coneptsumTrackSubPhiNorm);
656 fhConeSumPtSubvsConeSumPtTotEtaTrack ->Fill(coneptsumTrack,coneptsumTrackSubEta);
657 fhConeSumPtSubNormvsConeSumPtTotEtaTrack->Fill(coneptsumTrack,coneptsumTrackSubEtaNorm);
661 // ------------------------ //
662 // EMCal Clusters and cells //
663 // ------------------------ //
664 Float_t phiUEptsumClusterNorm = 0 ;
665 Float_t etaUEptsumClusterNorm = 0 ;
666 Float_t coneptsumClusterSubPhi = 0 ;
667 Float_t coneptsumClusterSubEta = 0 ;
668 Float_t coneptsumClusterSubPhiNorm = 0 ;
669 Float_t coneptsumClusterSubEtaNorm = 0 ;
670 Float_t phiUEptsumCellNorm = 0 ;
671 Float_t etaUEptsumCellNorm = 0 ;
672 Float_t coneptsumCellSubPhi = 0 ;
673 Float_t coneptsumCellSubEta = 0 ;
674 Float_t coneptsumCellSubPhiNorm = 0 ;
675 Float_t coneptsumCellSubEtaNorm = 0 ;
676 etaBandptsumClusterNorm = 0;
678 if( partTypeInCone!=AliIsolationCut::kOnlyCharged )
685 // Sum the pT in the phi or eta band for clusters or tracks
686 CalculateCaloUEBand (pCandidate,etaUEptsumCluster,phiUEptsumCluster);// rajouter ici l'histo eta phi
689 fhConeSumPtVSUEClusterEtaBand->Fill(coneptsumCluster,etaUEptsumCluster);
690 fhConeSumPtVSUEClusterPhiBand->Fill(coneptsumCluster,phiUEptsumCluster);
693 Float_t correctConeSumClusterEta = 1;
694 Float_t correctConeSumClusterPhi = 1;
696 GetIsolationCut()->CalculateUEBandClusterNormalization(GetReader(),etaTrig, phiTrig,
697 phiUEptsumCluster,etaUEptsumCluster,
698 phiUEptsumClusterNorm,etaUEptsumClusterNorm,
699 correctConeSumClusterEta,correctConeSumClusterPhi);
701 // In case that cone is out of eta and phi side, we are over correcting, not too often with the current cuts ...
702 // Comment if not used
703 // Float_t coneBadCellsCoeff =1;
704 // Float_t etaBandBadCellsCoeff=1;
705 // Float_t phiBandBadCellsCoeff=1;
706 // GetIsolationCut()->GetCoeffNormBadCell(pCandidate, GetReader(),coneBadCellsCoeff,etaBandBadCellsCoeff,phiBandBadCellsCoeff) ;
708 //coneptsumCluster=coneptsumCluster*coneBadCellsCoeff*correctConeSumClusterEta*correctConeSumClusterPhi;
710 coneptsumClusterSubPhi = coneptsumCluster - phiUEptsumClusterNorm;
711 coneptsumClusterSubEta = coneptsumCluster - etaUEptsumClusterNorm;
713 etaBandptsumClusterNorm = etaUEptsumClusterNorm;
715 fhConeSumPtPhiUESubCluster ->Fill(ptTrig , coneptsumClusterSubPhi);
716 fhConeSumPtPhiUESubClusterTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumClusterSubPhi);
717 fhConeSumPtEtaUESubCluster ->Fill(ptTrig , coneptsumClusterSubEta);
718 fhConeSumPtEtaUESubClusterTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumClusterSubEta);
720 fhFractionClusterOutConeEta ->Fill(ptTrig , correctConeSumClusterEta-1);
721 fhFractionClusterOutConeEtaTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumClusterEta-1);
722 fhFractionClusterOutConePhi ->Fill(ptTrig , correctConeSumClusterPhi-1);
723 fhFractionClusterOutConePhiTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumClusterPhi-1);
725 if(coneptsumCluster!=0)
727 coneptsumClusterSubPhiNorm = coneptsumClusterSubPhi/coneptsumCluster;
728 coneptsumClusterSubEtaNorm = coneptsumClusterSubEta/coneptsumCluster;
731 fhConeSumPtSubvsConeSumPtTotPhiCluster ->Fill(coneptsumCluster,coneptsumClusterSubPhi);
732 fhConeSumPtSubNormvsConeSumPtTotPhiCluster->Fill(coneptsumCluster,coneptsumClusterSubPhiNorm);
733 fhConeSumPtSubvsConeSumPtTotEtaCluster ->Fill(coneptsumCluster,coneptsumClusterSubEta);
734 fhConeSumPtSubNormvsConeSumPtTotEtaCluster->Fill(coneptsumCluster,coneptsumClusterSubEtaNorm);
740 if(fFillCellHistograms)
742 // Sum the pT in the phi or eta band for clusters or tracks
743 CalculateCaloCellUEBand(pCandidate,etaUEptsumCell ,phiUEptsumCell );
745 // Move to AliIsolationCut the calculation not the histograms??
747 //Careful here if EMCal limits changed .. 2010 (4 SM) to 2011-12 (10 SM), for the moment consider 100 deg in phi
748 Float_t emcEtaSize = 0.7*2; // TO FIX
749 Float_t emcPhiSize = TMath::DegToRad()*100.; // TO FIX
751 if(((2*conesize*emcPhiSize)-coneA)!=0)phiUEptsumCellNorm = phiUEptsumCell*(coneA / ((2*conesize*emcPhiSize)-coneA));
752 if(((2*conesize*emcEtaSize)-coneA)!=0)etaUEptsumCellNorm = etaUEptsumCell*(coneA / ((2*conesize*emcEtaSize)-coneA));
754 // Need to correct coneptsumCluster by the fraction of the cone out of the calorimeter cut acceptance!
756 Float_t correctConeSumCellEta = 1;
757 if(TMath::Abs(etaTrig)+conesize > emcEtaSize/2.)
759 Float_t excess = TMath::Abs(etaTrig) + conesize - emcEtaSize/2.;
760 correctConeSumCellEta = GetIsolationCut()->CalculateExcessAreaFraction(excess);
761 //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);
762 // Need to correct phi band surface if part of the cone falls out of track cut acceptance!
763 if(((2*(conesize-excess)*emcPhiSize)-(coneA-correctConeSumCellEta))!=0)phiUEptsumCellNorm = phiUEptsumCell*(coneA / ((2*(conesize-excess)*emcPhiSize)-(coneA-correctConeSumCellEta)));
766 Float_t correctConeSumCellPhi = 1;
767 //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() );
768 if((phiTrig+conesize > 180*TMath::DegToRad()) ||
769 (phiTrig-conesize < 80*TMath::DegToRad()))
772 if( phiTrig+conesize > 180*TMath::DegToRad() ) excess = conesize + phiTrig - 180*TMath::DegToRad() ;
773 else excess = conesize - phiTrig + 80*TMath::DegToRad() ;
775 correctConeSumCellPhi = GetIsolationCut()->CalculateExcessAreaFraction(excess);
776 //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);
778 // Need to correct eta band surface if part of the cone falls out of track cut acceptance!
779 if(((2*(conesize-excess)*emcEtaSize)-(coneA-correctConeSumCellPhi))!=0)etaUEptsumCellNorm = etaUEptsumCell*(coneA / ((2*(conesize-excess)*emcEtaSize)-(coneA-correctConeSumCellPhi)));
783 // In case that cone is out of eta and phi side, we are over correcting, not too often with the current cuts ...
784 coneptsumCellSubPhi = coneptsumCell*correctConeSumCellEta*correctConeSumCellPhi - phiUEptsumCellNorm;
785 coneptsumCellSubEta = coneptsumCell*correctConeSumCellEta*correctConeSumCellPhi - etaUEptsumCellNorm;
787 fhConeSumPtPhiUESubCell ->Fill(ptTrig , coneptsumCellSubPhi);
788 fhConeSumPtPhiUESubCellTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumCellSubPhi);
789 fhConeSumPtEtaUESubCell ->Fill(ptTrig , coneptsumCellSubEta);
790 fhConeSumPtEtaUESubCellTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumCellSubEta);
792 fhFractionCellOutConeEta ->Fill(ptTrig , correctConeSumCellEta-1);
793 fhFractionCellOutConeEtaTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumCellEta-1);
794 fhFractionCellOutConePhi ->Fill(ptTrig , correctConeSumCellPhi-1);
795 fhFractionCellOutConePhiTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumCellPhi-1);
798 coneptsumCellSubPhiNorm = coneptsumCellSubPhi/coneptsumCell;
799 coneptsumCellSubEtaNorm = coneptsumCellSubEta/coneptsumCell;
802 fhConeSumPtSubvsConeSumPtTotPhiCell ->Fill(coneptsumCell,coneptsumCellSubPhi);
803 fhConeSumPtSubNormvsConeSumPtTotPhiCell->Fill(coneptsumCell,coneptsumCellSubPhiNorm);
804 fhConeSumPtSubvsConeSumPtTotEtaCell ->Fill(coneptsumCell,coneptsumCellSubEta);
805 fhConeSumPtSubNormvsConeSumPtTotEtaCell->Fill(coneptsumCell,coneptsumCellSubEtaNorm);
809 if( partTypeInCone==AliIsolationCut::kNeutralAndCharged )
811 // --------------------------- //
812 // Tracks and clusters in cone //
813 // --------------------------- //
815 Double_t sumPhiUESub = coneptsumClusterSubPhi + coneptsumTrackSubPhi;
816 Double_t sumEtaUESub = coneptsumClusterSubEta + coneptsumTrackSubEta;
818 fhConeSumPtPhiUESub ->Fill(ptTrig , sumPhiUESub);
819 fhConeSumPtPhiUESubTrigEtaPhi->Fill(etaTrig, phiTrig, sumPhiUESub);
820 fhConeSumPtEtaUESub ->Fill(ptTrig , sumEtaUESub);
821 fhConeSumPtEtaUESubTrigEtaPhi->Fill(etaTrig, phiTrig, sumEtaUESub);
823 fhEtaBandClustervsTrack ->Fill(etaUEptsumCluster ,etaUEptsumTrack );
824 fhPhiBandClustervsTrack ->Fill(phiUEptsumCluster ,phiUEptsumTrack );
825 fhEtaBandNormClustervsTrack->Fill(etaUEptsumClusterNorm,etaUEptsumTrackNorm);
826 fhPhiBandNormClustervsTrack->Fill(phiUEptsumClusterNorm,phiUEptsumTrackNorm);
828 fhConeSumPtEtaUESubClustervsTrack->Fill(coneptsumClusterSubEta,coneptsumTrackSubEta);
829 fhConeSumPtPhiUESubClustervsTrack->Fill(coneptsumClusterSubPhi,coneptsumTrackSubPhi);
831 // ------------------------ //
832 // Tracks and cells in cone //
833 // ------------------------ //
835 if(fFillCellHistograms)
837 Double_t sumPhiUESubTrackCell = coneptsumCellSubPhi + coneptsumTrackSubPhi;
838 Double_t sumEtaUESubTrackCell = coneptsumCellSubEta + coneptsumTrackSubEta;
840 fhConeSumPtPhiUESubTrackCell ->Fill(ptTrig , sumPhiUESubTrackCell);
841 fhConeSumPtPhiUESubTrackCellTrigEtaPhi->Fill(etaTrig, phiTrig, sumPhiUESubTrackCell);
842 fhConeSumPtEtaUESubTrackCell ->Fill(ptTrig , sumEtaUESubTrackCell);
843 fhConeSumPtEtaUESubTrackCellTrigEtaPhi->Fill(etaTrig, phiTrig, sumEtaUESubTrackCell);
845 fhEtaBandCellvsTrack ->Fill(etaUEptsumCell ,etaUEptsumTrack );
846 fhPhiBandCellvsTrack ->Fill(phiUEptsumCell ,phiUEptsumTrack );
847 fhEtaBandNormCellvsTrack->Fill(etaUEptsumCellNorm,etaUEptsumTrackNorm);
848 fhPhiBandNormCellvsTrack->Fill(phiUEptsumCellNorm,phiUEptsumTrackNorm);
850 fhConeSumPtEtaUESubCellvsTrack->Fill(coneptsumCellSubEta,coneptsumTrackSubEta);
851 fhConeSumPtPhiUESubCellvsTrack->Fill(coneptsumCellSubPhi,coneptsumTrackSubPhi);
858 //______________________________________________________________________________________________________________
859 void AliAnaParticleIsolation::CalculateCaloSignalInCone(AliAODPWG4ParticleCorrelation * aodParticle,
860 Float_t & coneptsumCluster, Float_t & coneptLeadCluster)
862 // Get the cluster pT or sum of pT in isolation cone
863 coneptLeadCluster = 0;
864 coneptsumCluster = 0;
866 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyCharged ) return ;
868 //Recover reference arrays with clusters and tracks
869 TObjArray * refclusters = aodParticle->GetObjArray(GetAODObjArrayName()+"Clusters");
870 if(!refclusters) return ;
872 Float_t ptTrig = aodParticle->Pt();
874 //Get vertex for cluster momentum calculation
875 Double_t vertex[] = {0,0,0} ; //vertex ;
876 if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
877 GetReader()->GetVertex(vertex);
880 for(Int_t icalo=0; icalo < refclusters->GetEntriesFast(); icalo++)
882 AliVCluster* calo = (AliVCluster *) refclusters->At(icalo);
883 calo->GetMomentum(mom,vertex) ;//Assume that come from vertex in straight line
885 fhPtInCone ->Fill(ptTrig, mom.Pt());
886 fhPtClusterInCone->Fill(ptTrig, mom.Pt());
888 if(fFillPileUpHistograms)
890 if(GetReader()->IsPileUpFromSPD()) fhPtInConePileUp[0]->Fill(ptTrig,mom.Pt());
891 if(GetReader()->IsPileUpFromEMCal()) fhPtInConePileUp[1]->Fill(ptTrig,mom.Pt());
892 if(GetReader()->IsPileUpFromSPDOrEMCal()) fhPtInConePileUp[2]->Fill(ptTrig,mom.Pt());
893 if(GetReader()->IsPileUpFromSPDAndEMCal()) fhPtInConePileUp[3]->Fill(ptTrig,mom.Pt());
894 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) fhPtInConePileUp[4]->Fill(ptTrig,mom.Pt());
895 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) fhPtInConePileUp[5]->Fill(ptTrig,mom.Pt());
896 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) fhPtInConePileUp[6]->Fill(ptTrig,mom.Pt());
899 if(fFillHighMultHistograms) fhPtInConeCent->Fill(GetEventCentrality(),mom.Pt());
901 coneptsumCluster+=mom.Pt();
902 if(mom.Pt() > coneptLeadCluster) coneptLeadCluster = mom.Pt();
905 fhConeSumPtCluster ->Fill(ptTrig, coneptsumCluster );
906 fhConePtLeadCluster->Fill(ptTrig, coneptLeadCluster);
909 //______________________________________________________________________________________________________
910 void AliAnaParticleIsolation::CalculateCaloCellSignalInCone(AliAODPWG4ParticleCorrelation * aodParticle,
911 Float_t & coneptsumCell)
913 // Get the cell amplityde or sum of amplitudes in isolation cone
914 // Mising: Remove signal cells in cone in case the trigger is a cluster!
916 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyCharged ) return ;
918 Float_t conesize = GetIsolationCut()->GetConeSize();
920 Float_t ptTrig = aodParticle->Pt();
921 Float_t phiTrig = aodParticle->Phi();
922 if(phiTrig<0) phiTrig += TMath::TwoPi();
923 Float_t etaTrig = aodParticle->Eta();
925 if(aodParticle->GetDetector()=="EMCAL")
927 AliEMCALGeometry* eGeom = AliEMCALGeometry::GetInstance();
930 if (eGeom->GetAbsCellIdFromEtaPhi(etaTrig,phiTrig,absId))
932 if(!eGeom->CheckAbsCellId(absId)) return ;
934 // Get absolute (col,row) of trigger particle
935 Int_t nSupMod = eGeom->GetSuperModuleNumber(absId);
937 Int_t imEta=-1, imPhi=-1;
938 Int_t ieta =-1, iphi =-1;
940 if (eGeom->GetCellIndex(absId,nSupMod,nModule,imPhi,imEta))
942 Int_t iEta=-1, iPhi=-1;
943 eGeom->GetCellPhiEtaIndexInSModule(nSupMod,nModule,imPhi,imEta,iphi,ieta);
945 Int_t colTrig = iEta;
946 if (nSupMod % 2) colTrig = AliEMCALGeoParams::fgkEMCALCols + iEta ;
947 Int_t rowTrig = iPhi + AliEMCALGeoParams::fgkEMCALRows*int(nSupMod/2);
949 Int_t sqrSize = int(conesize/0.0143);
951 AliVCaloCells * cells = GetEMCALCells();
953 // Loop on cells in cone
954 for(Int_t irow = rowTrig-sqrSize; irow < rowTrig+sqrSize; irow++)
956 for(Int_t icol = colTrig-sqrSize; icol < colTrig+sqrSize; icol++)
958 Int_t inSector = int(irow/AliEMCALGeoParams::fgkEMCALRows);
959 if(inSector==5) continue;
963 if(icol < AliEMCALGeoParams::fgkEMCALCols)
965 inSupMod = 2*inSector + 1;
968 else if(icol > AliEMCALGeoParams::fgkEMCALCols - 1)
970 inSupMod = 2*inSector;
971 icolLoc = icol-AliEMCALGeoParams::fgkEMCALCols;
974 Int_t irowLoc = irow - AliEMCALGeoParams::fgkEMCALRows*inSector ;
976 Int_t iabsId = eGeom->GetAbsCellIdFromCellIndexes(inSupMod,irowLoc,icolLoc);
977 if(!eGeom->CheckAbsCellId(iabsId)) continue;
979 fhPtCellInCone->Fill(ptTrig, cells->GetCellAmplitude(iabsId));
980 coneptsumCell += cells->GetCellAmplitude(iabsId);
987 fhConeSumPtCell->Fill(ptTrig,coneptsumCell);
991 //___________________________________________________________________________________________________________
992 void AliAnaParticleIsolation::CalculateTrackSignalInCone(AliAODPWG4ParticleCorrelation * aodParticle,
993 Float_t & coneptsumTrack, Float_t & coneptLeadTrack)
995 // Get the track pT or sum of pT in isolation cone
997 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyNeutral ) return ;
999 //Recover reference arrays with clusters and tracks
1000 TObjArray * reftracks = aodParticle->GetObjArray(GetAODObjArrayName()+"Tracks");
1001 if(!reftracks) return ;
1003 Float_t ptTrig = aodParticle->Pt();
1004 Double_t bz = GetReader()->GetInputEvent()->GetMagneticField();
1006 for(Int_t itrack=0; itrack < reftracks->GetEntriesFast(); itrack++)
1008 AliVTrack* track = (AliVTrack *) reftracks->At(itrack);
1009 Float_t pTtrack = track->Pt();
1011 fhPtInCone ->Fill(ptTrig,pTtrack);
1012 fhPtTrackInCone->Fill(ptTrig,pTtrack);
1014 if(fFillPileUpHistograms)
1016 ULong_t status = track->GetStatus();
1017 Bool_t okTOF = ( (status & AliVTrack::kTOFout) == AliVTrack::kTOFout ) ;
1018 //Double32_t tof = track->GetTOFsignal()*1e-3;
1019 Int_t trackBC = track->GetTOFBunchCrossing(bz);
1021 if ( okTOF && trackBC!=0 ) fhPtTrackInConeOtherBC->Fill(ptTrig,pTtrack);
1022 else if( okTOF && trackBC==0 ) fhPtTrackInConeBC0 ->Fill(ptTrig,pTtrack);
1024 Int_t vtxBC = GetReader()->GetVertexBC();
1025 if(vtxBC == 0 || vtxBC==AliVTrack::kTOFBCNA) fhPtTrackInConeVtxBC0->Fill(ptTrig,pTtrack);
1027 if(GetReader()->IsPileUpFromSPD()) { fhPtInConePileUp[0]->Fill(ptTrig,pTtrack);
1028 if(okTOF && trackBC!=0 ) fhPtTrackInConeOtherBCPileUpSPD->Fill(ptTrig,pTtrack);
1029 if(okTOF && trackBC==0 ) fhPtTrackInConeBC0PileUpSPD ->Fill(ptTrig,pTtrack); }
1030 if(GetReader()->IsPileUpFromEMCal()) fhPtInConePileUp[1]->Fill(ptTrig,pTtrack);
1031 if(GetReader()->IsPileUpFromSPDOrEMCal()) fhPtInConePileUp[2]->Fill(ptTrig,pTtrack);
1032 if(GetReader()->IsPileUpFromSPDAndEMCal()) fhPtInConePileUp[3]->Fill(ptTrig,pTtrack);
1033 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) fhPtInConePileUp[4]->Fill(ptTrig,pTtrack);
1034 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) fhPtInConePileUp[5]->Fill(ptTrig,pTtrack);
1035 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) fhPtInConePileUp[6]->Fill(ptTrig,pTtrack);
1038 if(fFillHighMultHistograms) fhPtInConeCent->Fill(GetEventCentrality(),pTtrack);
1040 coneptsumTrack+=pTtrack;
1041 if(pTtrack > coneptLeadTrack) coneptLeadTrack = pTtrack;
1044 fhConeSumPtTrack ->Fill(ptTrig, coneptsumTrack );
1045 fhConePtLeadTrack->Fill(ptTrig, coneptLeadTrack);
1049 //_________________________________________________________________
1050 void AliAnaParticleIsolation::FillPileUpHistograms(Int_t clusterID)
1052 // Fill some histograms to understand pile-up
1056 printf("AliAnaParticleIsolation::FillPileUpHistograms(), ID of cluster = %d, not possible! ", clusterID);
1061 TObjArray* clusters = 0x0;
1062 if (fCalorimeter == "EMCAL") clusters = GetEMCALClusters();
1063 else if(fCalorimeter == "PHOS" ) clusters = GetPHOSClusters();
1066 Float_t time = -1000;
1070 AliVCluster *cluster = FindCluster(clusters,clusterID,iclus);
1071 energy = cluster->E();
1072 time = cluster->GetTOF()*1e9;
1075 //printf("E %f, time %f\n",energy,time);
1076 AliVEvent * event = GetReader()->GetInputEvent();
1078 fhTimeENoCut->Fill(energy,time);
1079 if(GetReader()->IsPileUpFromSPD()) fhTimeESPD ->Fill(energy,time);
1080 if(event->IsPileupFromSPDInMultBins()) fhTimeESPDMulti->Fill(energy,time);
1082 if(energy < 8) return; // Fill time figures for high energy clusters not too close to trigger threshold
1084 AliESDEvent* esdEv = dynamic_cast<AliESDEvent*> (event);
1085 AliAODEvent* aodEv = dynamic_cast<AliAODEvent*> (event);
1087 // N pile up vertices
1088 Int_t nVerticesSPD = -1;
1089 Int_t nVerticesTracks = -1;
1093 nVerticesSPD = esdEv->GetNumberOfPileupVerticesSPD();
1094 nVerticesTracks = esdEv->GetNumberOfPileupVerticesTracks();
1099 nVerticesSPD = aodEv->GetNumberOfPileupVerticesSPD();
1100 nVerticesTracks = aodEv->GetNumberOfPileupVerticesTracks();
1103 fhTimeNPileUpVertSPD ->Fill(time,nVerticesSPD);
1104 fhTimeNPileUpVertTrack->Fill(time,nVerticesTracks);
1106 //printf("Is SPD %d, Is SPD Multi %d, n spd %d, n track %d\n",
1107 // GetReader()->IsPileUpFromSPD(),event->IsPileupFromSPDInMultBins(),nVerticesSPD,nVerticesTracks);
1110 Float_t z1 = -1, z2 = -1;
1112 for(Int_t iVert=0; iVert<nVerticesSPD;iVert++)
1116 const AliESDVertex* pv=esdEv->GetPileupVertexSPD(iVert);
1117 ncont=pv->GetNContributors();
1118 z1 = esdEv->GetPrimaryVertexSPD()->GetZ();
1120 diamZ = esdEv->GetDiamondZ();
1124 AliAODVertex *pv=aodEv->GetVertex(iVert);
1125 if(pv->GetType()!=AliAODVertex::kPileupSPD) continue;
1126 ncont=pv->GetNContributors();
1127 z1=aodEv->GetPrimaryVertexSPD()->GetZ();
1129 diamZ = aodEv->GetDiamondZ();
1132 Double_t distZ = TMath::Abs(z2-z1);
1133 diamZ = TMath::Abs(z2-diamZ);
1135 fhTimeNPileUpVertContributors ->Fill(time,ncont);
1136 fhTimePileUpMainVertexZDistance->Fill(time,distZ);
1137 fhTimePileUpMainVertexZDiamond ->Fill(time,diamZ);
1142 //_____________________________________________________________________________________________________________________
1143 void AliAnaParticleIsolation::FillTrackMatchingShowerShapeControlHistograms(AliAODPWG4ParticleCorrelation *pCandidate,
1144 Float_t coneptsum, Float_t coneleadpt,
1147 // Fill Track matching and Shower Shape control histograms
1148 if(!fFillTMHisto && !fFillSSHisto && !fFillBackgroundBinHistograms) return;
1150 Int_t clusterID = pCandidate->GetCaloLabel(0) ;
1151 Int_t nMaxima = pCandidate->GetFiducialArea(); // bad name, just place holder for the moment
1152 Int_t mcTag = pCandidate->GetTag() ;
1153 Bool_t isolated = pCandidate->IsIsolated();
1157 printf("AliAnaParticleIsolation::FillTrackMatchingShowerShapeControlHistograms(), ID of cluster = %d, not possible! \n", clusterID);
1162 TObjArray* clusters = 0x0;
1163 if (fCalorimeter == "EMCAL") clusters = GetEMCALClusters();
1164 else if(fCalorimeter == "PHOS" ) clusters = GetPHOSClusters();
1166 Float_t energy = pCandidate->E();
1167 Float_t pt = pCandidate->Pt();
1171 AliVCluster *cluster = FindCluster(clusters,clusterID,iclus);
1173 // Get the max pt leading in cone or the sum of pt in cone
1174 // assign a bin to the candidate, depending on both quantities
1175 // see the shower shape in those bins.
1176 if(fFillBackgroundBinHistograms)
1178 // Get the background bin for this cone and trigger
1179 Int_t ptsumBin = -1;
1180 Int_t leadptBin = -1;
1182 if( GetDebug() > 1 )
1183 printf("AliAnaParticleIsolation::FillTrackMatchingShowerShapeControlHistograms() - pT cand: %2.2f, In cone pT: Sum %2.2f, Lead %2.2f, n bins %d\n",
1184 pt,coneptsum,coneleadpt,fNBkgBin);
1186 for(Int_t ibin = 0; ibin < fNBkgBin; ibin++)
1188 if( coneptsum >= fBkgBinLimit[ibin] && coneptsum < fBkgBinLimit[ibin+1]) ptsumBin = ibin;
1189 if( coneleadpt >= fBkgBinLimit[ibin] && coneleadpt < fBkgBinLimit[ibin+1]) leadptBin = ibin;
1192 // Fill the histograms per bin of pt lead or pt sum
1193 if( GetDebug() > 1 && ptsumBin >=0 ) printf("\t Sum bin %d [%2.2f,%2.2f]\n" , ptsumBin ,fBkgBinLimit[ptsumBin],fBkgBinLimit[ptsumBin+1]);
1194 if( GetDebug() > 1 && leadptBin >=0 ) printf("\t Lead bin %d [%2.2f,%2.2f]\n", leadptBin,fBkgBinLimit[leadptBin],fBkgBinLimit[leadptBin+1]);
1196 if( leadptBin >=0 ) fhPtLeadConeBinLambda0[leadptBin]->Fill(pt,cluster->GetM02());
1197 if( ptsumBin >=0 ) fhSumPtConeBinLambda0 [ ptsumBin]->Fill(pt,cluster->GetM02());
1201 Int_t leadptBinMC = leadptBin+mcIndex*fNBkgBin;
1202 Int_t ptsumBinMC = ptsumBin+mcIndex*fNBkgBin;
1203 if( leadptBin >=0 ) fhPtLeadConeBinLambda0MC[leadptBinMC]->Fill(pt,cluster->GetM02());
1204 if( ptsumBin >=0 ) fhSumPtConeBinLambda0MC [ ptsumBinMC]->Fill(pt,cluster->GetM02());
1205 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
1207 leadptBinMC = leadptBin+kmcPhoton*fNBkgBin;
1208 ptsumBinMC = ptsumBin+kmcPhoton*fNBkgBin;
1209 if( leadptBin >=0 ) fhPtLeadConeBinLambda0MC[leadptBinMC]->Fill(pt,cluster->GetM02());
1210 if( ptsumBin >=0 ) fhSumPtConeBinLambda0MC [ ptsumBinMC]->Fill(pt,cluster->GetM02());
1218 fhELambda0 [isolated]->Fill(energy, cluster->GetM02() );
1219 fhPtLambda0[isolated]->Fill(pt, cluster->GetM02() );
1220 fhELambda1 [isolated]->Fill(energy, cluster->GetM20() );
1224 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
1225 fhPtLambda0MC[kmcPhoton][isolated]->Fill(pt, cluster->GetM02());
1227 fhPtLambda0MC[mcIndex][isolated]->Fill(pt, cluster->GetM02());
1230 if(fCalorimeter == "EMCAL" && GetFirstSMCoveredByTRD() >= 0 &&
1231 GetModuleNumber(cluster) >= GetFirstSMCoveredByTRD() )
1233 fhELambda0TRD [isolated]->Fill(energy, cluster->GetM02() );
1234 fhPtLambda0TRD[isolated]->Fill(pt , cluster->GetM02() );
1235 fhELambda1TRD [isolated]->Fill(energy, cluster->GetM20() );
1238 if(fFillNLMHistograms)
1240 fhNLocMax[isolated]->Fill(energy,nMaxima);
1241 if (nMaxima==1) { fhELambda0LocMax1[isolated]->Fill(energy,cluster->GetM02()); fhELambda1LocMax1[isolated]->Fill(energy,cluster->GetM20()); }
1242 else if(nMaxima==2) { fhELambda0LocMax2[isolated]->Fill(energy,cluster->GetM02()); fhELambda1LocMax2[isolated]->Fill(energy,cluster->GetM20()); }
1243 else { fhELambda0LocMaxN[isolated]->Fill(energy,cluster->GetM02()); fhELambda1LocMaxN[isolated]->Fill(energy,cluster->GetM20()); }
1249 Float_t dZ = cluster->GetTrackDz();
1250 Float_t dR = cluster->GetTrackDx();
1252 if(cluster->IsEMCAL() && GetCaloUtils()->IsRecalculationOfClusterTrackMatchingOn())
1254 dR = 2000., dZ = 2000.;
1255 GetCaloUtils()->GetEMCALRecoUtils()->GetMatchedResiduals(cluster->GetID(),dZ,dR);
1258 //printf("ParticleIsolation: dPhi %f, dEta %f\n",dR,dZ);
1259 if(fhTrackMatchedDEta[isolated] && TMath::Abs(dR) < 999)
1261 fhTrackMatchedDEta[isolated]->Fill(energy,dZ);
1262 fhTrackMatchedDPhi[isolated]->Fill(energy,dR);
1263 if(energy > 0.5) fhTrackMatchedDEtaDPhi[isolated]->Fill(dZ,dR);
1266 // Check dEdx and E/p of matched clusters
1268 if(TMath::Abs(dZ) < 0.05 && TMath::Abs(dR) < 0.05)
1271 AliVTrack *track = GetCaloUtils()->GetMatchedTrack(cluster, GetReader()->GetInputEvent());
1275 Float_t dEdx = track->GetTPCsignal();
1276 fhdEdx[isolated]->Fill(cluster->E(), dEdx);
1278 Float_t eOverp = cluster->E()/track->P();
1279 fhEOverP[isolated]->Fill(cluster->E(), eOverp);
1282 // printf("AliAnaParticleIsolation::FillTrackMatchingShowerShapeHistograms() - Residual OK but (dR, dZ)= (%2.4f,%2.4f) no track associated WHAT? \n", dR,dZ);
1287 if ( !GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCConversion) )
1289 if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0) ||
1290 GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEta) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 2.5 );
1291 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 0.5 );
1292 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 1.5 );
1293 else fhTrackMatchedMCParticle[isolated]->Fill(energy, 3.5 );
1298 if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0) ||
1299 GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEta) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 6.5 );
1300 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 4.5 );
1301 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 5.5 );
1302 else fhTrackMatchedMCParticle[isolated]->Fill(energy, 7.5 );
1311 } // clusters array available
1315 //______________________________________________________
1316 TObjString * AliAnaParticleIsolation::GetAnalysisCuts()
1318 //Save parameters used for analysis
1319 TString parList ; //this will be list of parameters used for this analysis.
1320 const Int_t buffersize = 255;
1321 char onePar[buffersize] ;
1323 snprintf(onePar, buffersize,"--- AliAnaParticleIsolation ---\n") ;
1325 snprintf(onePar, buffersize,"Calorimeter: %s\n",fCalorimeter.Data()) ;
1327 snprintf(onePar, buffersize,"Isolation Cand Detector: %s\n",fIsoDetector.Data()) ;
1329 snprintf(onePar, buffersize,"fReMakeIC =%d (Flag for reisolation during histogram filling) \n",fReMakeIC) ;
1331 snprintf(onePar, buffersize,"fMakeSeveralIC=%d (Flag for isolation with several cuts at the same time ) \n",fMakeSeveralIC) ;
1333 snprintf(onePar, buffersize,"fFillTMHisto=%d (Flag for track matching histograms) \n",fFillTMHisto) ;
1335 snprintf(onePar, buffersize,"fFillSSHisto=%d (Flag for shower shape histograms) \n",fFillSSHisto) ;
1340 snprintf(onePar, buffersize,"fNCones =%d (Number of cone sizes) \n",fNCones) ;
1342 snprintf(onePar, buffersize,"fNPtThresFrac=%d (Flag for isolation with several cuts at the same time ) \n",fNPtThresFrac) ;
1345 for(Int_t icone = 0; icone < fNCones ; icone++)
1347 snprintf(onePar, buffersize,"fConeSizes[%d]=%1.2f (isolation cone size) \n",icone, fConeSizes[icone]) ;
1350 for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
1352 snprintf(onePar, buffersize,"fPtThresholds[%d]=%1.2f (isolation pt threshold) \n",ipt, fPtThresholds[ipt]) ;
1355 for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
1357 snprintf(onePar, buffersize,"fPtFractions[%d]=%1.2f (isolation pt fraction threshold) \n",ipt, fPtFractions[ipt]) ;
1360 for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
1362 snprintf(onePar, buffersize,"fSumPtThresholds[%d]=%1.2f (isolation sum pt threshold) \n",ipt, fSumPtThresholds[ipt]) ;
1367 //Get parameters set in base class.
1368 parList += GetBaseParametersList() ;
1370 //Get parameters set in IC class.
1371 if(!fMakeSeveralIC)parList += GetIsolationCut()->GetICParametersList() ;
1373 return new TObjString(parList) ;
1377 //________________________________________________________
1378 TList * AliAnaParticleIsolation::GetCreateOutputObjects()
1380 // Create histograms to be saved in output file and
1381 // store them in outputContainer
1382 TList * outputContainer = new TList() ;
1383 outputContainer->SetName("IsolatedParticleHistos") ;
1385 Int_t nptbins = GetHistogramRanges()->GetHistoPtBins();
1386 Int_t nphibins = GetHistogramRanges()->GetHistoPhiBins();
1387 Int_t netabins = GetHistogramRanges()->GetHistoEtaBins();
1388 Float_t ptmax = GetHistogramRanges()->GetHistoPtMax();
1389 Float_t phimax = GetHistogramRanges()->GetHistoPhiMax();
1390 Float_t etamax = GetHistogramRanges()->GetHistoEtaMax();
1391 Float_t ptmin = GetHistogramRanges()->GetHistoPtMin();
1392 Float_t phimin = GetHistogramRanges()->GetHistoPhiMin();
1393 Float_t etamin = GetHistogramRanges()->GetHistoEtaMin();
1394 Int_t ssbins = GetHistogramRanges()->GetHistoShowerShapeBins();
1395 Float_t ssmax = GetHistogramRanges()->GetHistoShowerShapeMax();
1396 Float_t ssmin = GetHistogramRanges()->GetHistoShowerShapeMin();
1397 Int_t ntimebins= GetHistogramRanges()->GetHistoTimeBins();
1398 Float_t timemax = GetHistogramRanges()->GetHistoTimeMax();
1399 Float_t timemin = GetHistogramRanges()->GetHistoTimeMin();
1401 Int_t nresetabins = GetHistogramRanges()->GetHistoTrackResidualEtaBins();
1402 Float_t resetamax = GetHistogramRanges()->GetHistoTrackResidualEtaMax();
1403 Float_t resetamin = GetHistogramRanges()->GetHistoTrackResidualEtaMin();
1404 Int_t nresphibins = GetHistogramRanges()->GetHistoTrackResidualPhiBins();
1405 Float_t resphimax = GetHistogramRanges()->GetHistoTrackResidualPhiMax();
1406 Float_t resphimin = GetHistogramRanges()->GetHistoTrackResidualPhiMin();
1408 Int_t ndedxbins = GetHistogramRanges()->GetHistodEdxBins();
1409 Float_t dedxmax = GetHistogramRanges()->GetHistodEdxMax();
1410 Float_t dedxmin = GetHistogramRanges()->GetHistodEdxMin();
1411 Int_t nPoverEbins = GetHistogramRanges()->GetHistoPOverEBins();
1412 Float_t pOverEmax = GetHistogramRanges()->GetHistoPOverEMax();
1413 Float_t pOverEmin = GetHistogramRanges()->GetHistoPOverEMin();
1415 Int_t nptsumbins = GetHistogramRanges()->GetHistoNPtSumBins();
1416 Float_t ptsummax = GetHistogramRanges()->GetHistoPtSumMax();
1417 Float_t ptsummin = GetHistogramRanges()->GetHistoPtSumMin();
1418 Int_t nptinconebins = GetHistogramRanges()->GetHistoNPtInConeBins();
1419 Float_t ptinconemax = GetHistogramRanges()->GetHistoPtInConeMax();
1420 Float_t ptinconemin = GetHistogramRanges()->GetHistoPtInConeMin();
1422 //Float_t ptthre = GetIsolationCut()->GetPtThreshold();
1423 //Float_t ptsumthre = GetIsolationCut()->GetSumPtThreshold();
1424 //Float_t ptfrac = GetIsolationCut()->GetPtFraction();
1425 Float_t r = GetIsolationCut()->GetConeSize();
1426 Int_t method = GetIsolationCut()->GetICMethod() ;
1427 Int_t particle = GetIsolationCut()->GetParticleTypeInCone() ;
1429 TString sThreshold = "";
1430 if ( method == AliIsolationCut::kSumPtIC )
1432 sThreshold = Form(", %2.2f < #Sigma #it{p}_{T}^{in cone} < %2.2f GeV/#it{c}",
1433 GetIsolationCut()->GetSumPtThreshold(), GetIsolationCut()->GetSumPtThresholdMax());
1434 if(GetIsolationCut()->GetSumPtThresholdMax() > 200)
1435 sThreshold = Form(", #Sigma #it{p}_{T}^{in cone} = %2.2f GeV/#it{c}",
1436 GetIsolationCut()->GetSumPtThreshold());
1438 else if ( method == AliIsolationCut::kPtThresIC)
1440 sThreshold = Form(", %2.2f < #it{p}_{T}^{th} < %2.2f GeV/#it{c}",
1441 GetIsolationCut()->GetPtThreshold(),GetIsolationCut()->GetPtThresholdMax());
1442 if(GetIsolationCut()->GetSumPtThreshold() > 200)
1443 sThreshold = Form(", #it{p}_{T}^{th} = %2.2f GeV/#it{c}",
1444 GetIsolationCut()->GetPtThreshold());
1446 else if ( method == AliIsolationCut::kPtFracIC)
1447 sThreshold = Form(", #Sigma #it{p}_{T}^{in cone}/#it{p}_{T}^{trig} = %2.2f" ,
1448 GetIsolationCut()->GetPtFraction());
1450 TString sParticle = ", x^{0,#pm}";
1451 if ( particle == AliIsolationCut::kOnlyNeutral ) sParticle = ", x^{0}";
1452 else if ( particle == AliIsolationCut::kOnlyCharged ) sParticle = ", x^{#pm}";
1454 TString parTitle = Form("#it{R} = %2.2f%s%s",GetIsolationCut()->GetConeSize(), sThreshold.Data(),sParticle.Data());
1456 TString pileUpName[] = {"SPD","EMCAL","SPDOrEMCAL","SPDAndEMCAL","SPDAndNotEMCAL","EMCALAndNotSPD","NotSPDAndNotEMCAL"} ;
1458 // MC histograms title and name
1459 TString mcPartType[] = { "#gamma", "#gamma_{prompt}", "#gamma_{fragmentation}",
1460 "#pi^{0} (merged #gamma)","#gamma_{#pi decay}",
1461 "#gamma_{#eta decay}","#gamma_{other decay}",
1462 "e^{#pm}","hadrons?"} ;
1464 TString mcPartName[] = { "Photon","PhotonPrompt","PhotonFrag",
1465 "Pi0","Pi0Decay","EtaDecay","OtherDecay",
1466 "Electron","Hadron"} ;
1468 // Primary MC histograms title and name
1469 TString pptype[] = { "#gamma", "#gamma_{#pi decay}","#gamma_{other decay}",
1470 "#gamma_{prompt}","#gamma_{fragmentation}","#gamma_{ISR}"} ;
1472 TString ppname[] = { "Photon","PhotonPi0Decay","PhotonOtherDecay",
1473 "PhotonPrompt","PhotonFrag","PhotonISR"} ;
1475 // Not Isolated histograms, reference histograms
1477 fhENoIso = new TH1F("hENoIso",
1478 Form("Number of not isolated leading particles vs #it{p}_{T}, %s",parTitle.Data()),
1479 nptbins,ptmin,ptmax);
1480 fhENoIso->SetYTitle("#it{counts}");
1481 fhENoIso->SetXTitle("E (GeV/#it{c})");
1482 outputContainer->Add(fhENoIso) ;
1484 fhPtNoIso = new TH1F("hPtNoIso",
1485 Form("Number of not isolated leading particles vs #it{p}_{T}, %s",parTitle.Data()),
1486 nptbins,ptmin,ptmax);
1487 fhPtNoIso->SetYTitle("#it{counts}");
1488 fhPtNoIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1489 outputContainer->Add(fhPtNoIso) ;
1491 fhEtaPhiNoIso = new TH2F("hEtaPhiNoIso",
1492 Form("Number of not isolated leading particles #eta vs #phi, %s",parTitle.Data()),
1493 netabins,etamin,etamax,nphibins,phimin,phimax);
1494 fhEtaPhiNoIso->SetXTitle("#eta");
1495 fhEtaPhiNoIso->SetYTitle("#phi");
1496 outputContainer->Add(fhEtaPhiNoIso) ;
1500 // For histograms in arrays, index in the array, corresponding to any particle origin
1502 for(Int_t imc = 0; imc < 9; imc++)
1505 fhPtNoIsoMC[imc] = new TH1F(Form("hPtNoIsoMC%s",mcPartName[imc].Data()),
1506 Form("#it{p}_{T} of NOT isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
1507 nptbins,ptmin,ptmax);
1508 fhPtNoIsoMC[imc]->SetYTitle("#it{counts}");
1509 fhPtNoIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1510 outputContainer->Add(fhPtNoIsoMC[imc]) ;
1512 fhPtIsoMC[imc] = new TH1F(Form("hPtMC%s",mcPartName[imc].Data()),
1513 Form("#it{p}_{T} of isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
1514 nptbins,ptmin,ptmax);
1515 fhPtIsoMC[imc]->SetYTitle("#it{counts}");
1516 fhPtIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1517 outputContainer->Add(fhPtIsoMC[imc]) ;
1519 fhPhiIsoMC[imc] = new TH2F(Form("hPhiMC%s",mcPartName[imc].Data()),
1520 Form("#phi vs #it{p}_{T} of isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
1521 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
1522 fhPhiIsoMC[imc]->SetYTitle("#phi");
1523 fhPhiIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1524 outputContainer->Add(fhPhiIsoMC[imc]) ;
1526 fhEtaIsoMC[imc] = new TH2F(Form("hEtaMC%s",mcPartName[imc].Data()),
1527 Form("#phi vs #it{p}_{T} of isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
1528 nptbins,ptmin,ptmax,netabins,etamin,etamax);
1529 fhEtaIsoMC[imc]->SetYTitle("#eta");
1530 fhEtaIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1531 outputContainer->Add(fhEtaIsoMC[imc]) ;
1535 // Histograms for tagged candidates as decay
1536 if(fFillTaggedDecayHistograms)
1538 for(Int_t ibit = 0; ibit < fNDecayBits; ibit++)
1540 fhPtDecayNoIso[ibit] =
1541 new TH1F(Form("hPtDecayNoIso_bit%d",fDecayBits[ibit]),
1542 Form("Number of not isolated leading pi0 decay particles vs #it{p}_{T}, bit %d, %s",fDecayBits[ibit],parTitle.Data()),
1543 nptbins,ptmin,ptmax);
1544 fhPtDecayNoIso[ibit]->SetYTitle("#it{counts}");
1545 fhPtDecayNoIso[ibit]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1546 outputContainer->Add(fhPtDecayNoIso[ibit]) ;
1548 fhEtaPhiDecayNoIso[ibit] =
1549 new TH2F(Form("hEtaPhiDecayNoIso_bit%d",fDecayBits[ibit]),
1550 Form("Number of not isolated leading Pi0 decay particles #eta vs #phi, bit %d, %s",fDecayBits[ibit],parTitle.Data()),
1551 netabins,etamin,etamax,nphibins,phimin,phimax);
1552 fhEtaPhiDecayNoIso[ibit]->SetXTitle("#eta");
1553 fhEtaPhiDecayNoIso[ibit]->SetYTitle("#phi");
1554 outputContainer->Add(fhEtaPhiDecayNoIso[ibit]) ;
1558 fhPtDecayIso[ibit] =
1559 new TH1F(Form("hPtDecayIso_bit%d",fDecayBits[ibit]),
1560 Form("Number of isolated #pi^{0} decay particles vs #it{p}_{T}, bit %d, %s",fDecayBits[ibit],parTitle.Data()),
1561 nptbins,ptmin,ptmax);
1562 fhPtDecayIso[ibit]->SetYTitle("#it{counts}");
1563 fhPtDecayIso[ibit]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1564 outputContainer->Add(fhPtDecayIso[ibit]) ;
1566 fhEtaPhiDecayIso[ibit] =
1567 new TH2F(Form("hEtaPhiDecayIso_bit%d",fDecayBits[ibit]),
1568 Form("Number of isolated Pi0 decay particles #eta vs #phi, bit %d, %s",fDecayBits[ibit],parTitle.Data()),
1569 netabins,etamin,etamax,nphibins,phimin,phimax);
1570 fhEtaPhiDecayIso[ibit]->SetXTitle("#eta");
1571 fhEtaPhiDecayIso[ibit]->SetYTitle("#phi");
1572 outputContainer->Add(fhEtaPhiDecayIso[ibit]) ;
1577 for(Int_t imc = 0; imc < 9; imc++)
1580 fhPtDecayNoIsoMC[ibit][imc] =
1581 new TH1F(Form("hPtDecayNoIso_bit%d_MC%s",fDecayBits[ibit],mcPartName[imc].Data()),
1582 Form("#it{p}_{T} of NOT isolated, decay bit %d, %s, %s",fDecayBits[ibit],mcPartType[imc].Data(),parTitle.Data()),
1583 nptbins,ptmin,ptmax);
1584 fhPtDecayNoIsoMC[ibit][imc]->SetYTitle("#it{counts}");
1585 fhPtDecayNoIsoMC[ibit][imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1586 outputContainer->Add(fhPtDecayNoIsoMC[ibit][imc]) ;
1590 fhPtDecayIsoMC[ibit][imc] =
1591 new TH1F(Form("hPtDecay_bit%d_MC%s",fDecayBits[ibit],mcPartName[imc].Data()),
1592 Form("#it{p}_{T} of isolated %s, decay bit %d, %s",mcPartType[imc].Data(),fDecayBits[ibit],parTitle.Data()),
1593 nptbins,ptmin,ptmax);
1594 fhPtDecayIsoMC[ibit][imc]->SetYTitle("#it{counts}");
1595 fhPtDecayIsoMC[ibit][imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1596 outputContainer->Add(fhPtDecayIsoMC[ibit][imc]) ;
1598 }// MC particle loop
1605 TString isoName [] = {"NoIso",""};
1606 TString isoTitle[] = {"Not isolated" ,"isolated"};
1608 fhEIso = new TH1F("hE",
1609 Form("Number of isolated particles vs E, %s",parTitle.Data()),
1610 nptbins,ptmin,ptmax);
1611 fhEIso->SetYTitle("d#it{N} / d#it{E}");
1612 fhEIso->SetXTitle("#it{E} (GeV/#it{c})");
1613 outputContainer->Add(fhEIso) ;
1615 fhPtIso = new TH1F("hPt",
1616 Form("Number of isolated particles vs #it{p}_{T}, %s",parTitle.Data()),
1617 nptbins,ptmin,ptmax);
1618 fhPtIso->SetYTitle("d#it{N} / #it{p}_{T}");
1619 fhPtIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1620 outputContainer->Add(fhPtIso) ;
1622 fhPhiIso = new TH2F("hPhi",
1623 Form("Number of isolated particles vs #phi, %s",parTitle.Data()),
1624 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
1625 fhPhiIso->SetYTitle("#phi");
1626 fhPhiIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1627 outputContainer->Add(fhPhiIso) ;
1629 fhEtaIso = new TH2F("hEta",
1630 Form("Number of isolated particles vs #eta, %s",parTitle.Data()),
1631 nptbins,ptmin,ptmax,netabins,etamin,etamax);
1632 fhEtaIso->SetYTitle("#eta");
1633 fhEtaIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1634 outputContainer->Add(fhEtaIso) ;
1636 fhEtaPhiIso = new TH2F("hEtaPhiIso",
1637 Form("Number of isolated particles #eta vs #phi, %s",parTitle.Data()),
1638 netabins,etamin,etamax,nphibins,phimin,phimax);
1639 fhEtaPhiIso->SetXTitle("#eta");
1640 fhEtaPhiIso->SetYTitle("#phi");
1641 outputContainer->Add(fhEtaPhiIso) ;
1643 if(fFillHighMultHistograms)
1645 fhPtCentralityIso = new TH2F("hPtCentrality",
1646 Form("centrality vs #it{p}_{T} for isolated particles, %s",parTitle.Data()),
1647 nptbins,ptmin,ptmax, 100,0,100);
1648 fhPtCentralityIso->SetYTitle("centrality");
1649 fhPtCentralityIso->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1650 outputContainer->Add(fhPtCentralityIso) ;
1652 fhPtEventPlaneIso = new TH2F("hPtEventPlane",
1653 Form("event plane angle vs #it{p}_{T} for isolated particles, %s",parTitle.Data()),
1654 nptbins,ptmin,ptmax, 100,0,TMath::Pi());
1655 fhPtEventPlaneIso->SetYTitle("Event plane angle (rad)");
1656 fhPtEventPlaneIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1657 outputContainer->Add(fhPtEventPlaneIso) ;
1660 if(fFillNLMHistograms)
1662 fhPtNLocMaxIso = new TH2F("hPtNLocMax",
1663 Form("Number of isolated particles vs #it{p}_{T}, %s",parTitle.Data()),
1664 nptbins,ptmin,ptmax,10,0,10);
1665 fhPtNLocMaxIso->SetYTitle("#it{NLM}");
1666 fhPtNLocMaxIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1668 fhPtNLocMaxNoIso = new TH2F("hPtNLocMaxNoIso",
1669 Form("Number of not isolated particles vs #it{p}_{T}, %s",parTitle.Data()),
1670 nptbins,ptmin,ptmax,10,0,10);
1671 fhPtNLocMaxNoIso->SetYTitle("#it{NLM}");
1672 fhPtNLocMaxNoIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1673 outputContainer->Add(fhPtNLocMaxNoIso) ;
1676 fhConePtLead = new TH2F("hConePtLead",
1677 Form("Track or Cluster leading #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1678 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1679 fhConePtLead->SetYTitle("#it{p}_{T, leading} (GeV/#it{c})");
1680 fhConePtLead->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1681 outputContainer->Add(fhConePtLead) ;
1684 fhConeSumPt = new TH2F("hConePtSum",
1685 Form("Track and Cluster #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1686 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1687 fhConeSumPt->SetYTitle("#Sigma #it{p}_{T}");
1688 fhConeSumPt->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1689 outputContainer->Add(fhConeSumPt) ;
1691 fhConeSumPtTrigEtaPhi = new TH2F("hConePtSumTrigEtaPhi",
1692 Form("Trigger #eta vs #phi, #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1693 netabins,etamin,etamax,nphibins,phimin,phimax);
1694 fhConeSumPtTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1695 fhConeSumPtTrigEtaPhi->SetXTitle("#eta_{trigger}");
1696 fhConeSumPtTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1697 outputContainer->Add(fhConeSumPtTrigEtaPhi) ;
1699 fhPtInCone = new TH2F("hPtInCone",
1700 Form("#it{p}_{T} of clusters and tracks in isolation cone for #it{R} = %2.2f",r),
1701 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
1702 fhPtInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
1703 fhPtInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1704 outputContainer->Add(fhPtInCone) ;
1706 if(fFillBackgroundBinHistograms)
1708 fhPtLeadConeBinLambda0 = new TH2F*[fNBkgBin];
1709 fhSumPtConeBinLambda0 = new TH2F*[fNBkgBin];
1713 fhPtLeadConeBinLambda0MC = new TH2F*[fNBkgBin*9];
1714 fhSumPtConeBinLambda0MC = new TH2F*[fNBkgBin*9];
1717 for(Int_t ibin = 0; ibin < fNBkgBin; ibin++)
1719 fhPtLeadConeBinLambda0[ibin] = new TH2F
1720 (Form("hPtLeadConeLambda0_Bin%d",ibin),
1721 Form("#lambda_{0}, in cone %2.2f<#it{p}_{T}^{leading}<%2.2f (GeV/#it{c}), %s",
1722 fBkgBinLimit[ibin],fBkgBinLimit[ibin+1], parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1723 fhPtLeadConeBinLambda0[ibin]->SetYTitle("#lambda_{0}^{2}");
1724 fhPtLeadConeBinLambda0[ibin]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1725 outputContainer->Add(fhPtLeadConeBinLambda0[ibin]) ;
1727 fhSumPtConeBinLambda0[ibin] = new TH2F
1728 (Form("hSumPtConeLambda0_Bin%d",ibin),
1729 Form("#lambda_{0}, in cone %2.2f <#Sigma #it{p}_{T}< %2.2f (GeV/#it{c}), %s",
1730 fBkgBinLimit[ibin],fBkgBinLimit[ibin+1], parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1731 fhSumPtConeBinLambda0[ibin]->SetYTitle("#lambda_{0}^{2}");
1732 fhSumPtConeBinLambda0[ibin]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1733 outputContainer->Add(fhSumPtConeBinLambda0[ibin]) ;
1737 for(Int_t imc = 0; imc < 9; imc++)
1739 Int_t binmc = ibin+imc*fNBkgBin;
1740 fhPtLeadConeBinLambda0MC[binmc] = new TH2F
1741 (Form("hPtLeadConeLambda0_Bin%d_MC%s",ibin, mcPartName[imc].Data()),
1742 Form("#lambda_{0}, in cone %2.2f<#it{p}_{T}^{leading}<%2.2f (GeV/#it{c}), MC %s, %s",
1743 fBkgBinLimit[ibin],fBkgBinLimit[ibin+1], mcPartType[imc].Data(), parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1744 fhPtLeadConeBinLambda0MC[binmc]->SetYTitle("#lambda_{0}^{2}");
1745 fhPtLeadConeBinLambda0MC[binmc]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1746 outputContainer->Add(fhPtLeadConeBinLambda0MC[binmc]) ;
1748 fhSumPtConeBinLambda0MC[binmc] = new TH2F
1749 (Form("hSumPtConeLambda0_Bin%d_MC%s",ibin,mcPartName[imc].Data()),
1750 Form("#lambda_{0}, in cone %2.2f <#Sigma #it{p}_{T}< %2.2f (GeV/#it{c}), MC %s, %s",
1751 fBkgBinLimit[ibin],fBkgBinLimit[ibin+1], mcPartType[imc].Data(), parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1752 fhSumPtConeBinLambda0MC[binmc]->SetYTitle("#lambda_{0}^{2}");
1753 fhSumPtConeBinLambda0MC[binmc]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1754 outputContainer->Add(fhSumPtConeBinLambda0MC[binmc]) ;
1755 } // MC particle loop
1759 } // bkg cone pt bin histograms
1761 if(fFillHighMultHistograms)
1763 fhPtInConeCent = new TH2F("hPtInConeCent",
1764 Form("#it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1765 100,0,100,nptinconebins,ptinconemin,ptinconemax);
1766 fhPtInConeCent->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
1767 fhPtInConeCent->SetXTitle("centrality");
1768 outputContainer->Add(fhPtInConeCent) ;
1771 // Cluster only histograms
1772 if(GetIsolationCut()->GetParticleTypeInCone()!=AliIsolationCut::kOnlyCharged)
1774 fhConeSumPtCluster = new TH2F("hConePtSumCluster",
1775 Form("Cluster #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1776 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1777 fhConeSumPtCluster->SetYTitle("#Sigma #it{p}_{T}");
1778 fhConeSumPtCluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1779 outputContainer->Add(fhConeSumPtCluster) ;
1781 fhConePtLeadCluster = new TH2F("hConeLeadPtCluster",
1782 Form("Cluster leading in isolation cone for #it{R} = %2.2f",r),
1783 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1784 fhConePtLeadCluster->SetYTitle("#it{p}_{T, leading} (GeV/#it{c})");
1785 fhConePtLeadCluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1786 outputContainer->Add(fhConePtLeadCluster) ;
1789 if(fFillCellHistograms)
1791 fhConeSumPtCell = new TH2F("hConePtSumCell",
1792 Form("Cell #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1793 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1794 fhConeSumPtCell->SetYTitle("#Sigma #it{p}_{T}");
1795 fhConeSumPtCell->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1796 outputContainer->Add(fhConeSumPtCell) ;
1799 if(fFillUEBandSubtractHistograms)
1801 fhConeSumPtEtaBandUECluster = new TH2F("hConePtSumEtaBandUECluster",
1802 "#Sigma cluster #it{p}_{T} in UE Eta Band",
1803 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1804 fhConeSumPtEtaBandUECluster->SetYTitle("#Sigma #it{p}_{T}");
1805 fhConeSumPtEtaBandUECluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1806 outputContainer->Add(fhConeSumPtEtaBandUECluster) ;
1808 fhConeSumPtPhiBandUECluster = new TH2F("hConePtSumPhiBandUECluster",
1809 "#Sigma cluster #it{p}_{T} UE Phi Band",
1810 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1811 fhConeSumPtPhiBandUECluster->SetYTitle("#Sigma #it{p}_{T}");
1812 fhConeSumPtPhiBandUECluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1813 outputContainer->Add(fhConeSumPtPhiBandUECluster) ;
1815 fhConeSumPtEtaBandUEClusterTrigEtaPhi = new TH2F("hConePtSumEtaBandUEClusterTrigEtaPhi",
1816 "Trigger #eta vs #phi, #Sigma cluster #it{p}_{T} in UE Eta Band",
1817 netabins,etamin,etamax,nphibins,phimin,phimax);
1818 fhConeSumPtEtaBandUEClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1819 fhConeSumPtEtaBandUEClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
1820 fhConeSumPtEtaBandUEClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1821 outputContainer->Add(fhConeSumPtEtaBandUEClusterTrigEtaPhi) ;
1823 fhConeSumPtPhiBandUEClusterTrigEtaPhi = new TH2F("hConePtSumPhiBandUEClusterTrigEtaPhi",
1824 "Trigger #eta vs #phi, #Sigma cluster #it{p}_{T} UE Phi Band",
1825 netabins,etamin,etamax,nphibins,phimin,phimax);
1826 fhConeSumPtPhiBandUEClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1827 fhConeSumPtPhiBandUEClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
1828 fhConeSumPtPhiBandUEClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1829 outputContainer->Add(fhConeSumPtPhiBandUEClusterTrigEtaPhi) ;
1830 if(fFillCellHistograms)
1833 fhConeSumPtEtaBandUECell = new TH2F("hConePtSumEtaBandUECell",
1834 "#Sigma cell #it{p}_{T} in UE Eta Band",
1835 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1836 fhConeSumPtEtaBandUECell->SetYTitle("#Sigma #it{p}_{T}");
1837 fhConeSumPtEtaBandUECell->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1838 outputContainer->Add(fhConeSumPtEtaBandUECell) ;
1840 fhConeSumPtPhiBandUECell = new TH2F("hConePtSumPhiBandUECell",
1841 "#Sigma cell #it{p}_{T} UE Phi Band",
1842 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1843 fhConeSumPtPhiBandUECell->SetYTitle("#Sigma #it{p}_{T}");
1844 fhConeSumPtPhiBandUECell->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1845 outputContainer->Add(fhConeSumPtPhiBandUECell) ;
1847 fhConeSumPtEtaBandUECellTrigEtaPhi = new TH2F("hConePtSumEtaBandUECellTrigEtaPhi",
1848 "Trigger #eta vs #phi, #Sigma cell #it{p}_{T} in UE Eta Band",
1849 netabins,etamin,etamax,nphibins,phimin,phimax);
1850 fhConeSumPtEtaBandUECellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1851 fhConeSumPtEtaBandUECellTrigEtaPhi->SetXTitle("#eta_{trigger}");
1852 fhConeSumPtEtaBandUECellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1853 outputContainer->Add(fhConeSumPtEtaBandUECellTrigEtaPhi) ;
1855 fhConeSumPtPhiBandUECellTrigEtaPhi = new TH2F("hConePtSumPhiBandUECellTrigEtaPhi",
1856 "Trigger #eta vs #phi, #Sigma cell #it{p}_{T} UE Phi Band",
1857 netabins,etamin,etamax,nphibins,phimin,phimax);
1858 fhConeSumPtPhiBandUECellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1859 fhConeSumPtPhiBandUECellTrigEtaPhi->SetXTitle("#eta_{trigger}");
1860 fhConeSumPtPhiBandUECellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1861 outputContainer->Add(fhConeSumPtPhiBandUECellTrigEtaPhi) ;
1864 fhEtaBandCluster = new TH2F("hEtaBandCluster",
1865 Form("#eta vs #phi of clusters in #eta band isolation cone for #it{R} = %2.2f",r),
1866 netabins,-1,1,nphibins,0,TMath::TwoPi());
1867 fhEtaBandCluster->SetXTitle("#eta");
1868 fhEtaBandCluster->SetYTitle("#phi");
1869 outputContainer->Add(fhEtaBandCluster) ;
1871 fhPhiBandCluster = new TH2F("hPhiBandCluster",
1872 Form("#eta vs #phi of clusters in #phi band isolation cone for #it{R} = %2.2f",r),
1873 netabins,-1,1,nphibins,0,TMath::TwoPi());
1874 fhPhiBandCluster->SetXTitle("#eta");
1875 fhPhiBandCluster->SetYTitle("#phi");
1876 outputContainer->Add(fhPhiBandCluster) ;
1878 fhEtaPhiInConeCluster= new TH2F("hEtaPhiInConeCluster",
1879 Form("#eta vs #phi of clusters in cone for #it{R} = %2.2f",r),
1880 netabins,-1,1,nphibins,0,TMath::TwoPi());
1881 fhEtaPhiInConeCluster->SetXTitle("#eta");
1882 fhEtaPhiInConeCluster->SetYTitle("#phi");
1883 outputContainer->Add(fhEtaPhiInConeCluster) ;
1885 fhEtaPhiCluster= new TH2F("hEtaPhiCluster",
1886 Form("#eta vs #phi of all clusters"),
1887 netabins,-1,1,nphibins,0,TMath::TwoPi());
1888 fhEtaPhiCluster->SetXTitle("#eta");
1889 fhEtaPhiCluster->SetYTitle("#phi");
1890 outputContainer->Add(fhEtaPhiCluster) ;
1894 fhPtClusterInCone = new TH2F("hPtClusterInCone",
1895 Form("#it{p}_{T} of clusters in isolation cone for #it{R} = %2.2f",r),
1896 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
1897 fhPtClusterInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
1898 fhPtClusterInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1899 outputContainer->Add(fhPtClusterInCone) ;
1901 if(fFillCellHistograms)
1903 fhPtCellInCone = new TH2F("hPtCellInCone",
1904 Form("#it{p}_{T} of cells in isolation cone for #it{R} = %2.2f",r),
1905 nptbins,ptmin,ptmax,1000,0,50);
1906 fhPtCellInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
1907 fhPtCellInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1908 outputContainer->Add(fhPtCellInCone) ;
1910 fhEtaBandCell = new TH2F("hEtaBandCell",
1911 Form("#col vs #row of cells in #eta band isolation cone for #it{R} = %2.2f",r),
1913 fhEtaBandCell->SetXTitle("#col");
1914 fhEtaBandCell->SetYTitle("#row");
1915 outputContainer->Add(fhEtaBandCell) ;
1917 fhPhiBandCell = new TH2F("hPhiBandCell",
1918 Form("#col vs #row of cells in #phi band isolation cone for #it{R} = %2.2f",r),
1920 fhPhiBandCell->SetXTitle("#col");
1921 fhPhiBandCell->SetYTitle("#row");
1922 outputContainer->Add(fhPhiBandCell) ;
1925 if(fFillUEBandSubtractHistograms)
1927 fhConeSumPtEtaUESubCluster = new TH2F("hConeSumPtEtaUESubCluster",
1928 Form("Clusters #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
1929 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1930 fhConeSumPtEtaUESubCluster->SetYTitle("#Sigma #it{p}_{T}");
1931 fhConeSumPtEtaUESubCluster->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1932 outputContainer->Add(fhConeSumPtEtaUESubCluster) ;
1934 fhConeSumPtPhiUESubCluster = new TH2F("hConeSumPtPhiUESubCluster",
1935 Form("Clusters #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
1936 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1937 fhConeSumPtPhiUESubCluster->SetYTitle("#Sigma #it{p}_{T}");
1938 fhConeSumPtPhiUESubCluster->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1939 outputContainer->Add(fhConeSumPtPhiUESubCluster) ;
1941 fhConeSumPtEtaUESubClusterTrigEtaPhi = new TH2F("hConeSumPtEtaUESubClusterTrigEtaPhi",
1942 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),
1943 netabins,etamin,etamax,nphibins,phimin,phimax);
1944 fhConeSumPtEtaUESubClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1945 fhConeSumPtEtaUESubClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
1946 fhConeSumPtEtaUESubClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1947 outputContainer->Add(fhConeSumPtEtaUESubClusterTrigEtaPhi) ;
1949 fhConeSumPtPhiUESubClusterTrigEtaPhi = new TH2F("hConeSumPtPhiUESubClusterTrigEtaPhi",
1950 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),
1951 netabins,etamin,etamax,nphibins,phimin,phimax);
1952 fhConeSumPtPhiUESubClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1953 fhConeSumPtPhiUESubClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
1954 fhConeSumPtPhiUESubClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1955 outputContainer->Add(fhConeSumPtPhiUESubClusterTrigEtaPhi) ;
1957 if(fFillCellHistograms)
1959 fhConeSumPtEtaUESubCell = new TH2F("hConeSumPtEtaUESubCell",
1960 Form("Cells #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
1961 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1962 fhConeSumPtEtaUESubCell->SetYTitle("#Sigma #it{p}_{T}");
1963 fhConeSumPtEtaUESubCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1964 outputContainer->Add(fhConeSumPtEtaUESubCell) ;
1966 fhConeSumPtPhiUESubCell = new TH2F("hConeSumPtPhiUESubCell",
1967 Form("Cells #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
1968 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1969 fhConeSumPtPhiUESubCell->SetYTitle("#Sigma #it{p}_{T}");
1970 fhConeSumPtPhiUESubCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1971 outputContainer->Add(fhConeSumPtPhiUESubCell) ;
1973 fhConeSumPtEtaUESubCellTrigEtaPhi = new TH2F("hConeSumPtEtaUESubCellTrigEtaPhi",
1974 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),
1975 netabins,etamin,etamax,nphibins,phimin,phimax);
1976 fhConeSumPtEtaUESubCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1977 fhConeSumPtEtaUESubCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
1978 fhConeSumPtEtaUESubCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1979 outputContainer->Add(fhConeSumPtEtaUESubCellTrigEtaPhi) ;
1981 fhConeSumPtPhiUESubCellTrigEtaPhi = new TH2F("hConeSumPtPhiUESubCellTrigEtaPhi",
1982 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),
1983 netabins,etamin,etamax,nphibins,phimin,phimax);
1984 fhConeSumPtPhiUESubCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1985 fhConeSumPtPhiUESubCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
1986 fhConeSumPtPhiUESubCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1987 outputContainer->Add(fhConeSumPtPhiUESubCellTrigEtaPhi) ;
1990 fhFractionClusterOutConeEta = new TH2F("hFractionClusterOutConeEta",
1991 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #eta acceptance",r),
1992 nptbins,ptmin,ptmax,100,0,1);
1993 fhFractionClusterOutConeEta->SetYTitle("#it{fraction}");
1994 fhFractionClusterOutConeEta->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
1995 outputContainer->Add(fhFractionClusterOutConeEta) ;
1997 fhFractionClusterOutConeEtaTrigEtaPhi = new TH2F("hFractionClusterOutConeEtaTrigEtaPhi",
1998 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #eta acceptance, in trigger #eta-#phi ",r),
1999 netabins,etamin,etamax,nphibins,phimin,phimax);
2000 fhFractionClusterOutConeEtaTrigEtaPhi->SetZTitle("#it{fraction}");
2001 fhFractionClusterOutConeEtaTrigEtaPhi->SetXTitle("#eta_{trigger}");
2002 fhFractionClusterOutConeEtaTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2003 outputContainer->Add(fhFractionClusterOutConeEtaTrigEtaPhi) ;
2005 fhFractionClusterOutConePhi = new TH2F("hFractionClusterOutConePhi",
2006 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #phi acceptance",r),
2007 nptbins,ptmin,ptmax,100,0,1);
2008 fhFractionClusterOutConePhi->SetYTitle("#it{fraction}");
2009 fhFractionClusterOutConePhi->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
2010 outputContainer->Add(fhFractionClusterOutConePhi) ;
2012 fhFractionClusterOutConePhiTrigEtaPhi = new TH2F("hFractionClusterOutConePhiTrigEtaPhi",
2013 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #phi acceptance, in trigger #eta-#phi ",r),
2014 netabins,etamin,etamax,nphibins,phimin,phimax);
2015 fhFractionClusterOutConePhiTrigEtaPhi->SetZTitle("#it{fraction}");
2016 fhFractionClusterOutConePhiTrigEtaPhi->SetXTitle("#eta_{trigger}");
2017 fhFractionClusterOutConePhiTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2018 outputContainer->Add(fhFractionClusterOutConePhiTrigEtaPhi) ;
2020 fhConeSumPtSubvsConeSumPtTotPhiCluster = new TH2F("hConeSumPtSubvsConeSumPtTotPhiCluster",
2021 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),
2022 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2023 fhConeSumPtSubvsConeSumPtTotPhiCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2024 fhConeSumPtSubvsConeSumPtTotPhiCluster->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
2025 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotPhiCluster);
2027 fhConeSumPtSubNormvsConeSumPtTotPhiCluster = new TH2F("hConeSumPtSubNormvsConeSumPtTotPhiCluster",
2028 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),
2029 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2030 fhConeSumPtSubNormvsConeSumPtTotPhiCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2031 fhConeSumPtSubNormvsConeSumPtTotPhiCluster->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2032 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotPhiCluster);
2034 fhConeSumPtSubvsConeSumPtTotEtaCluster = new TH2F("hConeSumPtSubvsConeSumPtTotEtaCluster",
2035 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),
2036 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2037 fhConeSumPtSubvsConeSumPtTotEtaCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2038 fhConeSumPtSubvsConeSumPtTotEtaCluster->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
2039 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotEtaCluster);
2041 fhConeSumPtSubNormvsConeSumPtTotEtaCluster = new TH2F("hConeSumPtSubNormvsConeSumPtTotEtaCluster",
2042 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),
2043 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2044 fhConeSumPtSubNormvsConeSumPtTotEtaCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2045 fhConeSumPtSubNormvsConeSumPtTotEtaCluster->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2046 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotEtaCluster);
2048 fhConeSumPtVSUEClusterEtaBand = new TH2F("hConeSumPtVSUEClusterEtaBand",
2049 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in eta band for cluster (before normalization), R=%2.2f",r),
2050 nptsumbins,ptsummin,ptsummax,2*nptsumbins,ptsummin,2*ptsummax);
2051 fhConeSumPtVSUEClusterEtaBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
2052 fhConeSumPtVSUEClusterEtaBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
2053 outputContainer->Add(fhConeSumPtVSUEClusterEtaBand);
2055 fhConeSumPtVSUEClusterPhiBand = new TH2F("hConeSumPtVSUEClusterPhiBand",
2056 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in phi band for cluster (before normalization), R=%2.2f",r),
2057 nptsumbins,ptsummin,ptsummax,8*nptsumbins,ptsummin,8*ptsummax);
2058 fhConeSumPtVSUEClusterPhiBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
2059 fhConeSumPtVSUEClusterPhiBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
2060 outputContainer->Add(fhConeSumPtVSUEClusterPhiBand);
2062 if(fFillCellHistograms)
2064 fhFractionCellOutConeEta = new TH2F("hFractionCellOutConeEta",
2065 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #eta acceptance",r),
2066 nptbins,ptmin,ptmax,100,0,1);
2067 fhFractionCellOutConeEta->SetYTitle("#it{fraction}");
2068 fhFractionCellOutConeEta->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
2069 outputContainer->Add(fhFractionCellOutConeEta) ;
2071 fhFractionCellOutConeEtaTrigEtaPhi = new TH2F("hFractionCellOutConeEtaTrigEtaPhi",
2072 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #eta acceptance, in trigger #eta-#phi ",r),
2073 netabins,etamin,etamax,nphibins,phimin,phimax);
2074 fhFractionCellOutConeEtaTrigEtaPhi->SetZTitle("#it{fraction}");
2075 fhFractionCellOutConeEtaTrigEtaPhi->SetXTitle("#eta_{trigger}");
2076 fhFractionCellOutConeEtaTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2077 outputContainer->Add(fhFractionCellOutConeEtaTrigEtaPhi) ;
2079 fhFractionCellOutConePhi = new TH2F("hFractionCellOutConePhi",
2080 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #phi acceptance",r),
2081 nptbins,ptmin,ptmax,100,0,1);
2082 fhFractionCellOutConePhi->SetYTitle("#it{fraction}");
2083 fhFractionCellOutConePhi->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
2084 outputContainer->Add(fhFractionCellOutConePhi) ;
2086 fhFractionCellOutConePhiTrigEtaPhi = new TH2F("hFractionCellOutConePhiTrigEtaPhi",
2087 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #phi acceptance, in trigger #eta-#phi ",r),
2088 netabins,etamin,etamax,nphibins,phimin,phimax);
2089 fhFractionCellOutConePhiTrigEtaPhi->SetZTitle("#it{fraction}");
2090 fhFractionCellOutConePhiTrigEtaPhi->SetXTitle("#eta_{trigger}");
2091 fhFractionCellOutConePhiTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2092 outputContainer->Add(fhFractionCellOutConePhiTrigEtaPhi) ;
2095 fhConeSumPtSubvsConeSumPtTotPhiCell = new TH2F("hConeSumPtSubvsConeSumPtTotPhiCell",
2096 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),
2097 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2098 fhConeSumPtSubvsConeSumPtTotPhiCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2099 fhConeSumPtSubvsConeSumPtTotPhiCell->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
2100 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotPhiCell);
2102 fhConeSumPtSubNormvsConeSumPtTotPhiCell = new TH2F("hConeSumPtSubNormvsConeSumPtTotPhiCell",
2103 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),
2104 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2105 fhConeSumPtSubNormvsConeSumPtTotPhiCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2106 fhConeSumPtSubNormvsConeSumPtTotPhiCell->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2107 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotPhiCell);
2109 fhConeSumPtSubvsConeSumPtTotEtaCell = new TH2F("hConeSumPtSubvsConeSumPtTotEtaCell",
2110 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),
2111 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2112 fhConeSumPtSubvsConeSumPtTotEtaCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2113 fhConeSumPtSubvsConeSumPtTotEtaCell->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
2114 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotEtaCell);
2116 fhConeSumPtSubNormvsConeSumPtTotEtaCell = new TH2F("hConeSumPtSubNormvsConeSumPtTotEtaCell",
2117 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),
2118 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2119 fhConeSumPtSubNormvsConeSumPtTotEtaCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2120 fhConeSumPtSubNormvsConeSumPtTotEtaCell->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2121 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotEtaCell);
2126 // Track only histograms
2127 if(GetIsolationCut()->GetParticleTypeInCone()!=AliIsolationCut::kOnlyNeutral)
2129 fhConeSumPtTrack = new TH2F("hConePtSumTrack",
2130 Form("Track #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2131 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2132 fhConeSumPtTrack->SetYTitle("#Sigma #it{p}_{T}");
2133 fhConeSumPtTrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2134 outputContainer->Add(fhConeSumPtTrack) ;
2136 fhConePtLeadTrack = new TH2F("hConeLeadPtTrack",
2137 Form("Track leading in isolation cone for #it{R} = %2.2f",r),
2138 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2139 fhConePtLeadTrack->SetYTitle("#it{p}_{T, leading} (GeV/#it{c})");
2140 fhConePtLeadTrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2141 outputContainer->Add(fhConePtLeadTrack) ;
2143 fhPtTrackInCone = new TH2F("hPtTrackInCone",
2144 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f",r),
2145 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2146 fhPtTrackInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2147 fhPtTrackInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2148 outputContainer->Add(fhPtTrackInCone) ;
2151 if(fFillUEBandSubtractHistograms)
2153 fhConeSumPtEtaBandUETrack = new TH2F("hConePtSumEtaBandUETrack",
2154 "#Sigma track #it{p}_{T} in UE Eta Band",
2155 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2156 fhConeSumPtEtaBandUETrack->SetYTitle("#Sigma #it{p}_{T}");
2157 fhConeSumPtEtaBandUETrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2158 outputContainer->Add(fhConeSumPtEtaBandUETrack) ;
2160 fhConeSumPtPhiBandUETrack = new TH2F("hConePtSumPhiBandUETrack",
2161 "#Sigma track #it{p}_{T} in UE Phi Band",
2162 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax*8);
2163 fhConeSumPtPhiBandUETrack->SetYTitle("#Sigma #it{p}_{T}");
2164 fhConeSumPtPhiBandUETrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2165 outputContainer->Add(fhConeSumPtPhiBandUETrack) ;
2168 fhConeSumPtEtaBandUETrackTrigEtaPhi = new TH2F("hConePtSumEtaBandUETrackTrigEtaPhi",
2169 "Trigger #eta vs #phi, #Sigma track #it{p}_{T} in UE Eta Band",
2170 netabins,etamin,etamax,nphibins,phimin,phimax);
2171 fhConeSumPtEtaBandUETrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2172 fhConeSumPtEtaBandUETrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2173 fhConeSumPtEtaBandUETrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2174 outputContainer->Add(fhConeSumPtEtaBandUETrackTrigEtaPhi) ;
2176 fhConeSumPtPhiBandUETrackTrigEtaPhi = new TH2F("hConePtSumPhiBandUETrackTrigEtaPhi",
2177 "Trigger #eta vs #phi, #Sigma track #it{p}_{T} in UE Phi Band",
2178 netabins,etamin,etamax,nphibins,phimin,phimax);
2179 fhConeSumPtPhiBandUETrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2180 fhConeSumPtPhiBandUETrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2181 fhConeSumPtPhiBandUETrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2182 outputContainer->Add(fhConeSumPtPhiBandUETrackTrigEtaPhi) ;
2184 fhEtaBandTrack = new TH2F("hEtaBandTrack",
2185 Form("#eta vs #phi of tracks in #eta band isolation cone for #it{R} = %2.2f",r),
2186 netabins,-1,1,nphibins,0,TMath::TwoPi());
2187 fhEtaBandTrack->SetXTitle("#eta");
2188 fhEtaBandTrack->SetYTitle("#phi");
2189 outputContainer->Add(fhEtaBandTrack) ;
2191 fhPhiBandTrack = new TH2F("hPhiBandTrack",
2192 Form("#eta vs #phi of tracks in #phi band isolation cone for #it{R} = %2.2f",r),
2193 netabins,-1,1,nphibins,0,TMath::TwoPi());
2194 fhPhiBandTrack->SetXTitle("#eta");
2195 fhPhiBandTrack->SetYTitle("#phi");
2196 outputContainer->Add(fhPhiBandTrack) ;
2198 fhConeSumPtEtaUESubTrack = new TH2F("hConeSumPtEtaUESubTrack",
2199 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
2200 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2201 fhConeSumPtEtaUESubTrack->SetYTitle("#Sigma #it{p}_{T}");
2202 fhConeSumPtEtaUESubTrack->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2203 outputContainer->Add(fhConeSumPtEtaUESubTrack) ;
2205 fhConeSumPtPhiUESubTrack = new TH2F("hConeSumPtPhiUESubTrack",
2206 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
2207 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2208 fhConeSumPtPhiUESubTrack->SetYTitle("#Sigma #it{p}_{T}");
2209 fhConeSumPtPhiUESubTrack->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2210 outputContainer->Add(fhConeSumPtPhiUESubTrack) ;
2212 fhConeSumPtEtaUESubTrackTrigEtaPhi = new TH2F("hConeSumPtEtaUESubTrackTrigEtaPhi",
2213 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),
2214 netabins,etamin,etamax,nphibins,phimin,phimax);
2215 fhConeSumPtEtaUESubTrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2216 fhConeSumPtEtaUESubTrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2217 fhConeSumPtEtaUESubTrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2218 outputContainer->Add(fhConeSumPtEtaUESubTrackTrigEtaPhi) ;
2220 fhConeSumPtPhiUESubTrackTrigEtaPhi = new TH2F("hConeSumPtPhiUESubTrackTrigEtaPhi",
2221 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),
2222 netabins,etamin,etamax,nphibins,phimin,phimax);
2223 fhConeSumPtPhiUESubTrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2224 fhConeSumPtPhiUESubTrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2225 fhConeSumPtPhiUESubTrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2226 outputContainer->Add(fhConeSumPtPhiUESubTrackTrigEtaPhi) ;
2228 fhFractionTrackOutConeEta = new TH2F("hFractionTrackOutConeEta",
2229 Form("Fraction of the isolation cone #it{R} = %2.2f, out of tracks #eta acceptance",r),
2230 nptbins,ptmin,ptmax,100,0,1);
2231 fhFractionTrackOutConeEta->SetYTitle("#it{fraction}");
2232 fhFractionTrackOutConeEta->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
2233 outputContainer->Add(fhFractionTrackOutConeEta) ;
2235 fhFractionTrackOutConeEtaTrigEtaPhi = new TH2F("hFractionTrackOutConeEtaTrigEtaPhi",
2236 Form("Fraction of the isolation cone #it{R} = %2.2f, out of tracks #eta acceptance, in trigger #eta-#phi ",r),
2237 netabins,etamin,etamax,nphibins,phimin,phimax);
2238 fhFractionTrackOutConeEtaTrigEtaPhi->SetZTitle("#it{fraction}");
2239 fhFractionTrackOutConeEtaTrigEtaPhi->SetXTitle("#eta_{trigger}");
2240 fhFractionTrackOutConeEtaTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2241 outputContainer->Add(fhFractionTrackOutConeEtaTrigEtaPhi) ;
2243 fhConeSumPtSubvsConeSumPtTotPhiTrack = new TH2F("hConeSumPtSubvsConeSumPtTotPhiTrack",
2244 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),
2245 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2246 fhConeSumPtSubvsConeSumPtTotPhiTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2247 fhConeSumPtSubvsConeSumPtTotPhiTrack->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
2248 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotPhiTrack);
2250 fhConeSumPtSubNormvsConeSumPtTotPhiTrack = new TH2F("hConeSumPtSubNormvsConeSumPtTotPhiTrack",
2251 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),
2252 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2253 fhConeSumPtSubNormvsConeSumPtTotPhiTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2254 fhConeSumPtSubNormvsConeSumPtTotPhiTrack->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2255 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotPhiTrack);
2257 fhConeSumPtSubvsConeSumPtTotEtaTrack = new TH2F("hConeSumPtSubvsConeSumPtTotEtaTrack",
2258 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),
2259 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2260 fhConeSumPtSubvsConeSumPtTotEtaTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2261 fhConeSumPtSubvsConeSumPtTotEtaTrack->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
2262 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotEtaTrack);
2264 fhConeSumPtSubNormvsConeSumPtTotEtaTrack = new TH2F("hConeSumPtSubNormvsConeSumPtTotEtaTrack",
2265 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),
2266 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2267 fhConeSumPtSubNormvsConeSumPtTotEtaTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2268 fhConeSumPtSubNormvsConeSumPtTotEtaTrack->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2269 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotEtaTrack);
2272 // UE in perpendicular cone
2273 fhPerpConeSumPt = new TH2F("hPerpConePtSum",
2274 Form("#Sigma #it{p}_{T} in isolation cone at #pm 45 degree phi from trigger particle, #it{R} = %2.2f",r),
2275 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2276 fhPerpConeSumPt->SetYTitle("#Sigma #it{p}_{T}");
2277 fhPerpConeSumPt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2278 outputContainer->Add(fhPerpConeSumPt) ;
2280 fhPtInPerpCone = new TH2F("hPtInPerpCone",
2281 Form("#it{p}_{T} in isolation cone at #pm 45 degree phi from trigger particle, #it{R} = %2.2f",r),
2282 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2283 fhPtInPerpCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2284 fhPtInPerpCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2285 outputContainer->Add(fhPtInPerpCone) ;
2287 fhEtaPhiTrack= new TH2F("hEtaPhiTrack",
2288 Form("#eta vs #phi of all Tracks"),
2289 netabins,-1,1,nphibins,0,TMath::TwoPi());
2290 fhEtaPhiTrack->SetXTitle("#eta");
2291 fhEtaPhiTrack->SetYTitle("#phi");
2292 outputContainer->Add(fhEtaPhiTrack) ;
2294 fhEtaPhiInConeTrack= new TH2F("hEtaPhiInConeTrack",
2295 Form("#eta vs #phi of Tracks in cone for #it{R} = %2.2f",r),
2296 netabins,-1,1,nphibins,0,TMath::TwoPi());
2297 fhEtaPhiInConeTrack->SetXTitle("#eta");
2298 fhEtaPhiInConeTrack->SetYTitle("#phi");
2299 outputContainer->Add(fhEtaPhiInConeTrack) ;
2301 fhConeSumPtVSUETracksEtaBand = new TH2F("hConeSumPtVSUETracksEtaBand",
2302 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in eta band for tracks (before normalization), R=%2.2f",r),
2303 nptsumbins,ptsummin,ptsummax,2*nptsumbins,ptsummin,2*ptsummax);
2304 fhConeSumPtVSUETracksEtaBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
2305 fhConeSumPtVSUETracksEtaBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
2306 outputContainer->Add(fhConeSumPtVSUETracksEtaBand);
2308 fhConeSumPtVSUETracksPhiBand = new TH2F("hConeSumPtVSUETracksPhiBand",
2309 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in phi band for tracks (before normalization), R=%2.2f",r),
2310 nptsumbins,ptsummin,ptsummax,8*nptsumbins,ptsummin,8*ptsummax);
2311 fhConeSumPtVSUETracksPhiBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
2312 fhConeSumPtVSUETracksPhiBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
2313 outputContainer->Add(fhConeSumPtVSUETracksPhiBand);
2317 if(GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kNeutralAndCharged )
2319 fhConeSumPtClustervsTrack = new TH2F("hConePtSumClustervsTrack",
2320 Form("Track vs Cluster #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2321 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2322 fhConeSumPtClustervsTrack->SetXTitle("#Sigma #it{p}_{T}^{cluster} (GeV/#it{c})");
2323 fhConeSumPtClustervsTrack->SetYTitle("#Sigma #it{p}_{T}^{track} (GeV/#it{c})");
2324 outputContainer->Add(fhConeSumPtClustervsTrack) ;
2326 fhConeSumPtClusterTrackFrac = new TH2F("hConePtSumClusterTrackFraction",
2327 Form("#Sigma #it{p}_{T}^{cluster}/#Sigma #it{p}_{T}^{track} in isolation cone for #it{R} = %2.2f",r),
2328 nptbins,ptmin,ptmax,200,0,4);
2329 fhConeSumPtClusterTrackFrac->SetYTitle("#Sigma #it{p}^{cluster}_{T} /#Sigma #it{p}_{T}^{track}");
2330 fhConeSumPtClusterTrackFrac->SetXTitle("#it{p}^{trigger}_{T} (GeV/#it{c})");
2331 outputContainer->Add(fhConeSumPtClusterTrackFrac) ;
2334 fhConePtLeadClustervsTrack = new TH2F("hConePtLeadClustervsTrack",
2335 Form("Track vs Cluster lead #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2336 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
2337 fhConePtLeadClustervsTrack->SetXTitle("#it{p}^{leading cluster}_{T} (GeV/#it{c})");
2338 fhConePtLeadClustervsTrack->SetYTitle("#it{p}^{leading track}_{T} (GeV/#it{c})");
2339 outputContainer->Add(fhConePtLeadClustervsTrack) ;
2341 fhConePtLeadClusterTrackFrac = new TH2F("hConePtLeadClusterTrackFraction",
2342 Form(" #it{p}^{leading cluster}_{T}/#it{p}^{leading track}_{T} in isolation cone for #it{R} = %2.2f",r),
2343 nptbins,ptmin,ptmax,200,0,4);
2344 fhConePtLeadClusterTrackFrac->SetYTitle("#it{p}^{leading cluster}_{T}/ #it{p}^{leading track}_{T}");
2345 fhConePtLeadClusterTrackFrac->SetXTitle("#it{p}^{trigger}_{T} (GeV/#it{c})");
2346 outputContainer->Add(fhConePtLeadClusterTrackFrac) ;
2349 if(fFillCellHistograms)
2351 fhConeSumPtCellvsTrack = new TH2F("hConePtSumCellvsTrack",
2352 Form("Track vs cell #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2353 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2354 fhConeSumPtCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2355 fhConeSumPtCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2356 outputContainer->Add(fhConeSumPtCellvsTrack) ;
2358 fhConeSumPtCellTrack = new TH2F("hConePtSumCellTrack",
2359 Form("Track and Cell #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2360 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2361 fhConeSumPtCellTrack->SetYTitle("#Sigma #it{p}_{T}");
2362 fhConeSumPtCellTrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2363 outputContainer->Add(fhConeSumPtCellTrack) ;
2365 fhConeSumPtCellTrackTrigEtaPhi = new TH2F("hConePtSumCellTrackTrigEtaPhi",
2366 Form("Trigger #eta vs #phi, #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2367 netabins,etamin,etamax,nphibins,phimin,phimax);
2368 fhConeSumPtCellTrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2369 fhConeSumPtCellTrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2370 fhConeSumPtCellTrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2371 outputContainer->Add(fhConeSumPtCellTrackTrigEtaPhi) ;
2375 if(fFillUEBandSubtractHistograms)
2377 fhConeSumPtEtaUESub = new TH2F("hConeSumPtEtaUESub",
2378 Form("#Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
2379 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2380 fhConeSumPtEtaUESub->SetYTitle("#Sigma #it{p}_{T}");
2381 fhConeSumPtEtaUESub->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2382 outputContainer->Add(fhConeSumPtEtaUESub) ;
2384 fhConeSumPtPhiUESub = new TH2F("hConeSumPtPhiUESub",
2385 Form("#Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
2386 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2387 fhConeSumPtPhiUESub->SetYTitle("#Sigma #it{p}_{T}");
2388 fhConeSumPtPhiUESub->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2389 outputContainer->Add(fhConeSumPtPhiUESub) ;
2391 fhConeSumPtEtaUESubTrigEtaPhi = new TH2F("hConeSumPtEtaUESubTrigEtaPhi",
2392 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),
2393 netabins,etamin,etamax,nphibins,phimin,phimax);
2394 fhConeSumPtEtaUESubTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2395 fhConeSumPtEtaUESubTrigEtaPhi->SetXTitle("#eta_{trigger}");
2396 fhConeSumPtEtaUESubTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2397 outputContainer->Add(fhConeSumPtEtaUESubTrigEtaPhi) ;
2399 fhConeSumPtPhiUESubTrigEtaPhi = new TH2F("hConeSumPtPhiUESubTrigEtaPhi",
2400 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),
2401 netabins,etamin,etamax,nphibins,phimin,phimax);
2402 fhConeSumPtPhiUESubTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2403 fhConeSumPtPhiUESubTrigEtaPhi->SetXTitle("#eta_{trigger}");
2404 fhConeSumPtPhiUESubTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2405 outputContainer->Add(fhConeSumPtPhiUESubTrigEtaPhi) ;
2407 fhConeSumPtEtaUESubClustervsTrack = new TH2F("hConePtSumEtaUESubClustervsTrack",
2408 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub eta band in isolation cone for #it{R} = %2.2f",r),
2409 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2410 fhConeSumPtEtaUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2411 fhConeSumPtEtaUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2412 outputContainer->Add(fhConeSumPtEtaUESubClustervsTrack) ;
2414 fhConeSumPtPhiUESubClustervsTrack = new TH2F("hConePhiUESubPtSumClustervsTrack",
2415 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub phi band in isolation cone for #it{R} = %2.2f",r),
2416 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2417 fhConeSumPtPhiUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2418 fhConeSumPtPhiUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2419 outputContainer->Add(fhConeSumPtPhiUESubClustervsTrack) ;
2421 fhEtaBandClustervsTrack = new TH2F("hEtaBandClustervsTrack",
2422 Form("Track vs Cluster #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2423 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2424 fhEtaBandClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2425 fhEtaBandClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2426 outputContainer->Add(fhEtaBandClustervsTrack) ;
2428 fhPhiBandClustervsTrack = new TH2F("hPhiBandClustervsTrack",
2429 Form("Track vs Cluster #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2430 nptsumbins,ptsummin,ptsummax*4,nptsumbins,ptsummin,ptsummax*8);
2431 fhPhiBandClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2432 fhPhiBandClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2433 outputContainer->Add(fhPhiBandClustervsTrack) ;
2435 fhEtaBandNormClustervsTrack = new TH2F("hEtaBandNormClustervsTrack",
2436 Form("Track vs Cluster #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2437 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2438 fhEtaBandNormClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2439 fhEtaBandNormClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2440 outputContainer->Add(fhEtaBandNormClustervsTrack) ;
2442 fhPhiBandNormClustervsTrack = new TH2F("hPhiBandNormClustervsTrack",
2443 Form("Track vs Cluster #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2444 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2445 fhPhiBandNormClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2446 fhPhiBandNormClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2447 outputContainer->Add(fhPhiBandNormClustervsTrack) ;
2449 fhConeSumPtEtaUESubClustervsTrack = new TH2F("hConePtSumEtaUESubClustervsTrack",
2450 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub eta band in isolation cone for #it{R} = %2.2f",r),
2451 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2452 fhConeSumPtEtaUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2453 fhConeSumPtEtaUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2454 outputContainer->Add(fhConeSumPtEtaUESubClustervsTrack) ;
2456 fhConeSumPtPhiUESubClustervsTrack = new TH2F("hConePhiUESubPtSumClustervsTrack",
2457 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub phi band in isolation cone for #it{R} = %2.2f",r),
2458 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2459 fhConeSumPtPhiUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2460 fhConeSumPtPhiUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2461 outputContainer->Add(fhConeSumPtPhiUESubClustervsTrack) ;
2463 if(fFillCellHistograms)
2466 fhConeSumPtEtaUESubCellvsTrack = new TH2F("hConePtSumEtaUESubCellvsTrack",
2467 Form("Track vs Cell #Sigma #it{p}_{T} UE sub eta band in isolation cone for #it{R} = %2.2f",r),
2468 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2469 fhConeSumPtEtaUESubCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2470 fhConeSumPtEtaUESubCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2471 outputContainer->Add(fhConeSumPtEtaUESubCellvsTrack) ;
2473 fhConeSumPtPhiUESubCellvsTrack = new TH2F("hConePhiUESubPtSumCellvsTrack",
2474 Form("Track vs Cell #Sigma #it{p}_{T} UE sub phi band in isolation cone for #it{R} = %2.2f",r),
2475 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2476 fhConeSumPtPhiUESubCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2477 fhConeSumPtPhiUESubCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2478 outputContainer->Add(fhConeSumPtPhiUESubCellvsTrack) ;
2480 fhEtaBandCellvsTrack = new TH2F("hEtaBandCellvsTrack",
2481 Form("Track vs Cell #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2482 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2483 fhEtaBandCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2484 fhEtaBandCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2485 outputContainer->Add(fhEtaBandCellvsTrack) ;
2487 fhPhiBandCellvsTrack = new TH2F("hPhiBandCellvsTrack",
2488 Form("Track vs Cell #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2489 nptsumbins,ptsummin,ptsummax*4,nptsumbins,ptsummin,ptsummax*8);
2490 fhPhiBandCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2491 fhPhiBandCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2492 outputContainer->Add(fhPhiBandCellvsTrack) ;
2494 fhEtaBandNormCellvsTrack = new TH2F("hEtaBandNormCellvsTrack",
2495 Form("Track vs Cell #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2496 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2497 fhEtaBandNormCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2498 fhEtaBandNormCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2499 outputContainer->Add(fhEtaBandNormCellvsTrack) ;
2501 fhPhiBandNormCellvsTrack = new TH2F("hPhiBandNormCellvsTrack",
2502 Form("Track vs Cell #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2503 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2504 fhPhiBandNormCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2505 fhPhiBandNormCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2506 outputContainer->Add(fhPhiBandNormCellvsTrack) ;
2508 fhConeSumPtEtaUESubTrackCell = new TH2F("hConeSumPtEtaUESubTrackCell",
2509 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
2510 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2511 fhConeSumPtEtaUESubTrackCell->SetYTitle("#Sigma #it{p}_{T}");
2512 fhConeSumPtEtaUESubTrackCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2513 outputContainer->Add(fhConeSumPtEtaUESubTrackCell) ;
2515 fhConeSumPtPhiUESubTrackCell = new TH2F("hConeSumPtPhiUESubTrackCell",
2516 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
2517 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2518 fhConeSumPtPhiUESubTrackCell->SetYTitle("#Sigma #it{p}_{T}");
2519 fhConeSumPtPhiUESubTrackCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2520 outputContainer->Add(fhConeSumPtPhiUESubTrackCell) ;
2522 fhConeSumPtEtaUESubTrackCellTrigEtaPhi = new TH2F("hConeSumPtEtaUESubTrackCellTrigEtaPhi",
2523 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),
2524 netabins,etamin,etamax,nphibins,phimin,phimax);
2525 fhConeSumPtEtaUESubTrackCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2526 fhConeSumPtEtaUESubTrackCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
2527 fhConeSumPtEtaUESubTrackCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2528 outputContainer->Add(fhConeSumPtEtaUESubTrackCellTrigEtaPhi) ;
2530 fhConeSumPtPhiUESubTrackCellTrigEtaPhi = new TH2F("hConeSumPtPhiUESubTrackCellTrigEtaPhi",
2531 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),
2532 netabins,etamin,etamax,nphibins,phimin,phimax);
2533 fhConeSumPtPhiUESubTrackCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2534 fhConeSumPtPhiUESubTrackCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
2535 fhConeSumPtPhiUESubTrackCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2536 outputContainer->Add(fhConeSumPtPhiUESubTrackCellTrigEtaPhi) ;
2541 for(Int_t iso = 0; iso < 2; iso++)
2545 fhTrackMatchedDEta[iso] = new TH2F
2546 (Form("hTrackMatchedDEta%s",isoName[iso].Data()),
2547 Form("%s - d#eta of cluster-track vs cluster energy, %s",isoTitle[iso].Data(),parTitle.Data()),
2548 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
2549 fhTrackMatchedDEta[iso]->SetYTitle("d#eta");
2550 fhTrackMatchedDEta[iso]->SetXTitle("E_{cluster} (GeV)");
2552 fhTrackMatchedDPhi[iso] = new TH2F
2553 (Form("hTrackMatchedDPhi%s",isoName[iso].Data()),
2554 Form("%s - d#phi of cluster-track vs cluster energy, %s",isoTitle[iso].Data(),parTitle.Data()),
2555 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
2556 fhTrackMatchedDPhi[iso]->SetYTitle("d#phi (rad)");
2557 fhTrackMatchedDPhi[iso]->SetXTitle("E_{cluster} (GeV)");
2559 fhTrackMatchedDEtaDPhi[iso] = new TH2F
2560 (Form("hTrackMatchedDEtaDPhi%s",isoName[iso].Data()),
2561 Form("%s - d#eta vs d#phi of cluster-track, %s",isoTitle[iso].Data(),parTitle.Data()),
2562 nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax);
2563 fhTrackMatchedDEtaDPhi[iso]->SetYTitle("d#phi (rad)");
2564 fhTrackMatchedDEtaDPhi[iso]->SetXTitle("d#eta");
2566 outputContainer->Add(fhTrackMatchedDEta[iso]) ;
2567 outputContainer->Add(fhTrackMatchedDPhi[iso]) ;
2568 outputContainer->Add(fhTrackMatchedDEtaDPhi[iso]) ;
2570 fhdEdx[iso] = new TH2F
2571 (Form("hdEdx%s",isoName[iso].Data()),
2572 Form("%s - Matched track <d#it{E}/d#it{x}> vs cluster #it{E}, %s",isoTitle[iso].Data(),parTitle.Data()),
2573 nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
2574 fhdEdx[iso]->SetXTitle("#it{E} (GeV)");
2575 fhdEdx[iso]->SetYTitle("<d#it{E}/d#it{x}>");
2576 outputContainer->Add(fhdEdx[iso]);
2578 fhEOverP[iso] = new TH2F
2579 (Form("hEOverP%s",isoName[iso].Data()),
2580 Form("%s - Matched track #it{E}/#it{p} vs cluster, %s",isoTitle[iso].Data(),parTitle.Data()),
2581 nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
2582 fhEOverP[iso]->SetXTitle("#it{E} (GeV)");
2583 fhEOverP[iso]->SetYTitle("#it{E}/#it{p}");
2584 outputContainer->Add(fhEOverP[iso]);
2588 fhTrackMatchedMCParticle[iso] = new TH2F
2589 (Form("hTrackMatchedMCParticle%s",isoName[iso].Data()),
2590 Form("%s - Origin of particle vs cluster #it{E}, %s",isoTitle[iso].Data(),parTitle.Data()),
2591 nptbins,ptmin,ptmax,8,0,8);
2592 fhTrackMatchedMCParticle[iso]->SetXTitle("#it{E} (GeV)");
2593 //fhTrackMatchedMCParticle[iso]->SetYTitle("Particle type");
2595 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(1 ,"Photon");
2596 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(2 ,"Electron");
2597 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(3 ,"Meson Merged");
2598 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(4 ,"Rest");
2599 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(5 ,"Conv. Photon");
2600 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(6 ,"Conv. Electron");
2601 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(7 ,"Conv. Merged");
2602 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(8 ,"Conv. Rest");
2604 outputContainer->Add(fhTrackMatchedMCParticle[iso]);
2610 fhELambda0[iso] = new TH2F
2611 (Form("hELambda0%s",isoName[iso].Data()),
2612 Form("%s cluster : #it{E} vs #lambda_{0}, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2613 fhELambda0[iso]->SetYTitle("#lambda_{0}^{2}");
2614 fhELambda0[iso]->SetXTitle("#it{E} (GeV)");
2615 outputContainer->Add(fhELambda0[iso]) ;
2617 fhELambda1[iso] = new TH2F
2618 (Form("hELambda1%s",isoName[iso].Data()),
2619 Form("%s cluster: #it{E} vs #lambda_{1}, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2620 fhELambda1[iso]->SetYTitle("#lambda_{1}^{2}");
2621 fhELambda1[iso]->SetXTitle("#it{E} (GeV)");
2622 outputContainer->Add(fhELambda1[iso]) ;
2624 fhPtLambda0[iso] = new TH2F
2625 (Form("hPtLambda0%s",isoName[iso].Data()),
2626 Form("%s cluster : #it{p}_{T} vs #lambda_{0}, %s",isoTitle[iso].Data(), parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2627 fhPtLambda0[iso]->SetYTitle("#lambda_{0}^{2}");
2628 fhPtLambda0[iso]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2629 outputContainer->Add(fhPtLambda0[iso]) ;
2633 for(Int_t imc = 0; imc < 9; imc++)
2635 fhPtLambda0MC[imc][iso] = new TH2F(Form("hPtLambda0%s_MC%s",isoName[iso].Data(),mcPartName[imc].Data()),
2636 Form("%s cluster : #it{p}_{T} vs #lambda_{0}: %s %s",isoTitle[iso].Data(),mcPartType[imc].Data(),parTitle.Data()),
2637 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2638 fhPtLambda0MC[imc][iso]->SetYTitle("#lambda_{0}^{2}");
2639 fhPtLambda0MC[imc][iso]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2640 outputContainer->Add( fhPtLambda0MC[imc][iso]) ;
2644 if(fIsoDetector=="EMCAL" && GetFirstSMCoveredByTRD() >= 0)
2646 fhPtLambda0TRD[iso] = new TH2F
2647 (Form("hPtLambda0TRD%s",isoName[iso].Data()),
2648 Form("%s cluster: #it{p}_{T} vs #lambda_{0}, SM behind TRD, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2649 fhPtLambda0TRD[iso]->SetYTitle("#lambda_{0}^{2}");
2650 fhPtLambda0TRD[iso]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2651 outputContainer->Add(fhPtLambda0TRD[iso]) ;
2653 fhELambda0TRD[iso] = new TH2F
2654 (Form("hELambda0TRD%s",isoName[iso].Data()),
2655 Form("%s cluster: #it{E} vs #lambda_{0}, SM behind TRD, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2656 fhELambda0TRD[iso]->SetYTitle("#lambda_{0}^{2}");
2657 fhELambda0TRD[iso]->SetXTitle("#it{E} (GeV)");
2658 outputContainer->Add(fhELambda0TRD[iso]) ;
2660 fhELambda1TRD[iso] = new TH2F
2661 (Form("hELambda1TRD%s",isoName[iso].Data()),
2662 Form("%s cluster: #it{E} vs #lambda_{1}, SM behind TRD, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2663 fhELambda1TRD[iso]->SetYTitle("#lambda_{1}^{2}");
2664 fhELambda1TRD[iso]->SetXTitle("#it{E} (GeV)");
2665 outputContainer->Add(fhELambda1TRD[iso]) ;
2668 if(fFillNLMHistograms)
2670 fhNLocMax[iso] = new TH2F
2671 (Form("hNLocMax%s",isoName[iso].Data()),
2672 Form("%s - Number of local maxima in cluster, %s",isoTitle[iso].Data(),parTitle.Data()),
2673 nptbins,ptmin,ptmax,10,0,10);
2674 fhNLocMax[iso]->SetYTitle("#it{NLM}");
2675 fhNLocMax[iso]->SetXTitle("#it{E} (GeV)");
2676 outputContainer->Add(fhNLocMax[iso]) ;
2678 fhELambda0LocMax1[iso] = new TH2F
2679 (Form("hELambda0LocMax1%s",isoName[iso].Data()),
2680 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);
2681 fhELambda0LocMax1[iso]->SetYTitle("#lambda_{0}^{2}");
2682 fhELambda0LocMax1[iso]->SetXTitle("#it{E} (GeV)");
2683 outputContainer->Add(fhELambda0LocMax1[iso]) ;
2685 fhELambda1LocMax1[iso] = new TH2F
2686 (Form("hELambda1LocMax1%s",isoName[iso].Data()),
2687 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);
2688 fhELambda1LocMax1[iso]->SetYTitle("#lambda_{1}^{2}");
2689 fhELambda1LocMax1[iso]->SetXTitle("#it{E} (GeV)");
2690 outputContainer->Add(fhELambda1LocMax1[iso]) ;
2692 fhELambda0LocMax2[iso] = new TH2F
2693 (Form("hELambda0LocMax2%s",isoName[iso].Data()),
2694 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);
2695 fhELambda0LocMax2[iso]->SetYTitle("#lambda_{0}^{2}");
2696 fhELambda0LocMax2[iso]->SetXTitle("#it{E} (GeV)");
2697 outputContainer->Add(fhELambda0LocMax2[iso]) ;
2699 fhELambda1LocMax2[iso] = new TH2F
2700 (Form("hELambda1LocMax2%s",isoName[iso].Data()),
2701 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);
2702 fhELambda1LocMax2[iso]->SetYTitle("#lambda_{1}^{2}");
2703 fhELambda1LocMax2[iso]->SetXTitle("#it{E} (GeV)");
2704 outputContainer->Add(fhELambda1LocMax2[iso]) ;
2706 fhELambda0LocMaxN[iso] = new TH2F
2707 ( Form("hELambda0LocMaxN%s",isoName[iso].Data()),
2708 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);
2709 fhELambda0LocMaxN[iso]->SetYTitle("#lambda_{0}^{2}");
2710 fhELambda0LocMaxN[iso]->SetXTitle("#it{E} (GeV)");
2711 outputContainer->Add(fhELambda0LocMaxN[iso]) ;
2713 fhELambda1LocMaxN[iso] = new TH2F
2714 (Form("hELambda1LocMaxN%s",isoName[iso].Data()),
2715 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);
2716 fhELambda1LocMaxN[iso]->SetYTitle("#lambda_{1}^{2}");
2717 fhELambda1LocMaxN[iso]->SetXTitle("#it{E} (GeV)");
2718 outputContainer->Add(fhELambda1LocMaxN[iso]) ;
2721 } // control histograms for isolated and non isolated objects
2724 if(fFillPileUpHistograms)
2726 fhPtTrackInConeOtherBC = new TH2F("hPtTrackInConeOtherBC",
2727 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC!=0",r),
2728 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2729 fhPtTrackInConeOtherBC->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2730 fhPtTrackInConeOtherBC->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2731 outputContainer->Add(fhPtTrackInConeOtherBC) ;
2733 fhPtTrackInConeOtherBCPileUpSPD = new TH2F("hPtTrackInConeOtherBCPileUpSPD",
2734 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC!=0, pile-up from SPD",r),
2735 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2736 fhPtTrackInConeOtherBCPileUpSPD->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2737 fhPtTrackInConeOtherBCPileUpSPD->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2738 outputContainer->Add(fhPtTrackInConeOtherBCPileUpSPD) ;
2740 fhPtTrackInConeBC0 = new TH2F("hPtTrackInConeBC0",
2741 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC==0",r),
2742 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2743 fhPtTrackInConeBC0->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2744 fhPtTrackInConeBC0->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2745 outputContainer->Add(fhPtTrackInConeBC0) ;
2747 fhPtTrackInConeVtxBC0 = new TH2F("hPtTrackInConeVtxBC0",
2748 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC==0",r),
2749 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2750 fhPtTrackInConeVtxBC0->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2751 fhPtTrackInConeVtxBC0->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2752 outputContainer->Add(fhPtTrackInConeVtxBC0) ;
2755 fhPtTrackInConeBC0PileUpSPD = new TH2F("hPtTrackInConeBC0PileUpSPD",
2756 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC==0, pile-up from SPD",r),
2757 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2758 fhPtTrackInConeBC0PileUpSPD->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2759 fhPtTrackInConeBC0PileUpSPD->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2760 outputContainer->Add(fhPtTrackInConeBC0PileUpSPD) ;
2763 for (Int_t i = 0; i < 7 ; i++)
2765 fhPtInConePileUp[i] = new TH2F(Form("hPtInConePileUp%s",pileUpName[i].Data()),
2766 Form("#it{p}_{T} in isolation cone for #it{R} = %2.2f, from pile-up (%s)",r,pileUpName[i].Data()),
2767 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2768 fhPtInConePileUp[i]->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2769 fhPtInConePileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2770 outputContainer->Add(fhPtInConePileUp[i]) ;
2776 // For histograms in arrays, index in the array, corresponding to any particle origin
2778 for(Int_t i = 0; i < 6; i++)
2780 fhEPrimMC[i] = new TH1F(Form("hEPrim_MC%s",ppname[i].Data()),
2781 Form("primary photon %s : #it{E}, %s",pptype[i].Data(),parTitle.Data()),
2782 nptbins,ptmin,ptmax);
2783 fhEPrimMC[i]->SetXTitle("#it{E} (GeV)");
2784 outputContainer->Add(fhEPrimMC[i]) ;
2786 fhPtPrimMCiso[i] = new TH1F(Form("hPtPrim_MCiso%s",ppname[i].Data()),
2787 Form("primary isolated photon %s : #it{p}_{T}, %s",pptype[i].Data(),parTitle.Data()),
2788 nptbins,ptmin,ptmax);
2789 fhPtPrimMCiso[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2790 outputContainer->Add(fhPtPrimMCiso[i]) ;
2792 fhEtaPrimMC[i] = new TH2F(Form("hEtaPrim_MC%s",ppname[i].Data()),
2793 Form("primary photon %s : #eta vs #it{p}_{T}, %s",pptype[i].Data(),parTitle.Data()),
2794 nptbins,ptmin,ptmax,200,-2,2);
2795 fhEtaPrimMC[i]->SetYTitle("#eta");
2796 fhEtaPrimMC[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2797 outputContainer->Add(fhEtaPrimMC[i]) ;
2799 fhPhiPrimMC[i] = new TH2F(Form("hPhiPrim_MC%s",ppname[i].Data()),
2800 Form("primary photon %s : #phi vs #it{p}_{T}, %s",pptype[i].Data(),parTitle.Data()),
2801 nptbins,ptmin,ptmax,200,0.,TMath::TwoPi());
2802 fhPhiPrimMC[i]->SetYTitle("#phi");
2803 fhPhiPrimMC[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2804 outputContainer->Add(fhPhiPrimMC[i]) ;
2813 const Int_t buffersize = 255;
2814 char name[buffersize];
2815 char title[buffersize];
2816 for(Int_t icone = 0; icone<fNCones; icone++)
2818 // sum pt in cone vs. pt leading
2819 snprintf(name, buffersize,"hSumPtLeadingPt_Cone_%d",icone);
2820 snprintf(title, buffersize,"#Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
2821 fhSumPtLeadingPt[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2822 fhSumPtLeadingPt[icone] ->SetYTitle("#sum_{cone}#it{p}_{T} (GeV/#it{c})");//#Sigma #it{p}_{T}
2823 fhSumPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
2824 outputContainer->Add(fhSumPtLeadingPt[icone]) ;
2826 // pt in cone vs. pt leading
2827 snprintf(name, buffersize,"hPtLeadingPt_Cone_%d",icone);
2828 snprintf(title, buffersize,"#it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
2829 fhPtLeadingPt[icone] = new TH2F(name, title, nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2830 fhPtLeadingPt[icone] ->SetYTitle("#it{p}_{T}^{cone} (GeV/#it{c})");
2831 fhPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
2832 outputContainer->Add(fhPtLeadingPt[icone]) ;
2834 // sum pt in cone vs. pt leading in the forward region (for background subtraction studies)
2835 snprintf(name, buffersize,"hPerpSumPtLeadingPt_Cone_%d",icone);
2836 snprintf(title, buffersize,"#Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
2837 fhPerpSumPtLeadingPt[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2838 fhPerpSumPtLeadingPt[icone] ->SetYTitle("#sum_{cone}#it{p}_{T} (GeV/#it{c})");//#Sigma #it{p}_{T}
2839 fhPerpSumPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
2840 outputContainer->Add(fhPerpSumPtLeadingPt[icone]) ;
2842 // pt in cone vs. pt leading in the forward region (for background subtraction studies)
2843 snprintf(name, buffersize,"hPerpPtLeadingPt_Cone_%d",icone);
2844 snprintf(title, buffersize,"#it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
2845 fhPerpPtLeadingPt[icone] = new TH2F(name, title, nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2846 fhPerpPtLeadingPt[icone] ->SetYTitle("#it{p}_{T}^{cone} (GeV/#it{c})");
2847 fhPerpPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
2848 outputContainer->Add(fhPerpPtLeadingPt[icone]) ;
2852 for(Int_t imc = 0; imc < 9; imc++)
2854 snprintf(name , buffersize,"hSumPtLeadingPt_MC%s_Cone_%d",mcPartName[imc].Data(),icone);
2855 snprintf(title, buffersize,"Candidate %s #it{p}_{T} vs cone #Sigma #it{p}_{T} for #it{R}=%2.2f",mcPartType[imc].Data(),fConeSizes[icone]);
2856 fhSumPtLeadingPtMC[imc][icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2857 fhSumPtLeadingPtMC[imc][icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2858 fhSumPtLeadingPtMC[imc][icone]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2859 outputContainer->Add(fhSumPtLeadingPtMC[imc][icone]) ;
2863 for(Int_t ipt = 0; ipt<fNPtThresFrac;ipt++)
2865 snprintf(name, buffersize,"hPtThres_Cone_%d_Pt%d",icone,ipt);
2866 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]);
2867 fhPtThresIsolated[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2868 fhPtThresIsolated[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2869 outputContainer->Add(fhPtThresIsolated[icone][ipt]) ;
2871 snprintf(name, buffersize,"hPtFrac_Cone_%d_Pt%d",icone,ipt);
2872 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]);
2873 fhPtFracIsolated[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2874 fhPtFracIsolated[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2875 outputContainer->Add(fhPtFracIsolated[icone][ipt]) ;
2877 snprintf(name, buffersize,"hSumPt_Cone_%d_Pt%d",icone,ipt);
2878 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]);
2879 fhSumPtIsolated[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2880 // fhSumPtIsolated[icone][ipt]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2881 fhSumPtIsolated[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2882 outputContainer->Add(fhSumPtIsolated[icone][ipt]) ;
2884 snprintf(name, buffersize,"hPtSumDensity_Cone_%d_Pt%d",icone,ipt);
2885 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]);
2886 fhPtSumDensityIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2887 //fhPtSumIsolated[icone][ipt]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2888 fhPtSumDensityIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2889 outputContainer->Add(fhPtSumDensityIso[icone][ipt]) ;
2891 snprintf(name, buffersize,"hPtFracPtSum_Cone_%d_Pt%d",icone,ipt);
2892 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]);
2893 fhPtFracPtSumIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2894 //fhPtSumIsolated[icone][ipt]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2895 fhPtFracPtSumIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2896 outputContainer->Add(fhPtFracPtSumIso[icone][ipt]) ;
2899 snprintf(name, buffersize,"hEtaPhiPtThres_Cone_%d_Pt%d",icone,ipt);
2900 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]);
2901 fhEtaPhiPtThresIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2902 fhEtaPhiPtThresIso[icone][ipt]->SetXTitle("#eta");
2903 fhEtaPhiPtThresIso[icone][ipt]->SetYTitle("#phi");
2904 outputContainer->Add(fhEtaPhiPtThresIso[icone][ipt]) ;
2906 snprintf(name, buffersize,"hEtaPhiPtFrac_Cone_%d_Pt%d",icone,ipt);
2907 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]);
2908 fhEtaPhiPtFracIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2909 fhEtaPhiPtFracIso[icone][ipt]->SetXTitle("#eta");
2910 fhEtaPhiPtFracIso[icone][ipt]->SetYTitle("#phi");
2911 outputContainer->Add(fhEtaPhiPtFracIso[icone][ipt]) ;
2913 snprintf(name, buffersize,"hEtaPhiPtSum_Cone_%d_Pt%d",icone,ipt);
2914 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]);
2915 fhEtaPhiPtSumIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2916 fhEtaPhiPtSumIso[icone][ipt]->SetXTitle("#eta");
2917 fhEtaPhiPtSumIso[icone][ipt]->SetYTitle("#phi");
2918 outputContainer->Add(fhEtaPhiPtSumIso[icone][ipt]) ;
2920 snprintf(name, buffersize,"hEtaPhiSumDensity_Cone_%d_Pt%d",icone,ipt);
2921 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]);
2922 fhEtaPhiSumDensityIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2923 fhEtaPhiSumDensityIso[icone][ipt]->SetXTitle("#eta");
2924 fhEtaPhiSumDensityIso[icone][ipt]->SetYTitle("#phi");
2925 outputContainer->Add(fhEtaPhiSumDensityIso[icone][ipt]) ;
2927 snprintf(name, buffersize,"hEtaPhiFracPtSum_Cone_%d_Pt%d",icone,ipt);
2928 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]);
2929 fhEtaPhiFracPtSumIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2930 fhEtaPhiFracPtSumIso[icone][ipt]->SetXTitle("#eta");
2931 fhEtaPhiFracPtSumIso[icone][ipt]->SetYTitle("#phi");
2932 outputContainer->Add(fhEtaPhiFracPtSumIso[icone][ipt]) ;
2934 if(fFillTaggedDecayHistograms)
2936 // pt decays isolated
2937 snprintf(name, buffersize,"hPtThres_Decay_Cone_%d_Pt%d",icone,ipt);
2938 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]);
2939 fhPtPtThresDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2940 fhPtPtThresDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2941 outputContainer->Add(fhPtPtThresDecayIso[icone][ipt]) ;
2943 snprintf(name, buffersize,"hPtFrac_Decay_Cone_%d_Pt%d",icone,ipt);
2944 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]);
2945 fhPtPtFracDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2946 fhPtPtFracDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2947 outputContainer->Add(fhPtPtFracDecayIso[icone][ipt]) ;
2949 snprintf(name, buffersize,"hPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
2950 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]);
2951 fhPtPtSumDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2952 // fhPtPtSumDecayIso[icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2953 fhPtPtSumDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2954 outputContainer->Add(fhPtPtSumDecayIso[icone][ipt]) ;
2956 snprintf(name, buffersize,"hPtSumDensity_Decay_Cone_%d_Pt%d",icone,ipt);
2957 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]);
2958 fhPtSumDensityDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2959 // fhPtPtSumDecayIso[icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2960 fhPtSumDensityDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2961 outputContainer->Add(fhPtSumDensityDecayIso[icone][ipt]) ;
2963 snprintf(name, buffersize,"hPtFracPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
2964 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]);
2965 fhPtFracPtSumDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2966 // fhPtPtSumDecayIso[icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2967 fhPtFracPtSumDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2968 outputContainer->Add(fhPtFracPtSumDecayIso[icone][ipt]) ;
2971 snprintf(name, buffersize,"hEtaPhiPtThres_Decay_Cone_%d_Pt%d",icone,ipt);
2972 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]);
2973 fhEtaPhiPtThresDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2974 fhEtaPhiPtThresDecayIso[icone][ipt]->SetXTitle("#eta");
2975 fhEtaPhiPtThresDecayIso[icone][ipt]->SetYTitle("#phi");
2976 outputContainer->Add(fhEtaPhiPtThresDecayIso[icone][ipt]) ;
2978 snprintf(name, buffersize,"hEtaPhiPtFrac_Decay_Cone_%d_Pt%d",icone,ipt);
2979 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]);
2980 fhEtaPhiPtFracDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2981 fhEtaPhiPtFracDecayIso[icone][ipt]->SetXTitle("#eta");
2982 fhEtaPhiPtFracDecayIso[icone][ipt]->SetYTitle("#phi");
2983 outputContainer->Add(fhEtaPhiPtFracDecayIso[icone][ipt]) ;
2986 snprintf(name, buffersize,"hEtaPhiPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
2987 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]);
2988 fhEtaPhiPtSumDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2989 fhEtaPhiPtSumDecayIso[icone][ipt]->SetXTitle("#eta");
2990 fhEtaPhiPtSumDecayIso[icone][ipt]->SetYTitle("#phi");
2991 outputContainer->Add(fhEtaPhiPtSumDecayIso[icone][ipt]) ;
2993 snprintf(name, buffersize,"hEtaPhiSumDensity_Decay_Cone_%d_Pt%d",icone,ipt);
2994 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]);
2995 fhEtaPhiSumDensityDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2996 fhEtaPhiSumDensityDecayIso[icone][ipt]->SetXTitle("#eta");
2997 fhEtaPhiSumDensityDecayIso[icone][ipt]->SetYTitle("#phi");
2998 outputContainer->Add(fhEtaPhiSumDensityDecayIso[icone][ipt]) ;
3000 snprintf(name, buffersize,"hEtaPhiFracPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
3001 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]);
3002 fhEtaPhiFracPtSumDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
3003 fhEtaPhiFracPtSumDecayIso[icone][ipt]->SetXTitle("#eta");
3004 fhEtaPhiFracPtSumDecayIso[icone][ipt]->SetYTitle("#phi");
3005 outputContainer->Add(fhEtaPhiFracPtSumDecayIso[icone][ipt]) ;
3011 for(Int_t imc = 0; imc < 9; imc++)
3013 snprintf(name , buffersize,"hPtThreshMC%s_Cone_%d_Pt%d",mcPartName[imc].Data(),icone,ipt);
3014 snprintf(title, buffersize,"Isolated %s #it{p}_{T} for #it{R}=%2.2f and #it{p}_{T}^{th}=%2.2f",
3015 mcPartType[imc].Data(),fConeSizes[icone], fPtThresholds[ipt]);
3016 fhPtThresIsolatedMC[imc][icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
3017 fhPtThresIsolatedMC[imc][icone][ipt]->SetYTitle("#it{counts}");
3018 fhPtThresIsolatedMC[imc][icone][ipt]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
3019 outputContainer->Add(fhPtThresIsolatedMC[imc][icone][ipt]) ;
3022 snprintf(name , buffersize,"hPtFracMC%s_Cone_%d_Pt%d",mcPartName[imc].Data(),icone,ipt);
3023 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",
3024 mcPartType[imc].Data(),fConeSizes[icone], fPtFractions[ipt]);
3025 fhPtFracIsolatedMC[imc][icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
3026 fhPtFracIsolatedMC[imc][icone][ipt]->SetYTitle("#it{counts}");
3027 fhPtFracIsolatedMC[imc][icone][ipt]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
3028 outputContainer->Add(fhPtFracIsolatedMC[imc][icone][ipt]) ;
3030 snprintf(name , buffersize,"hSumPtMC%s_Cone_%d_Pt%d",mcPartName[imc].Data(),icone,ipt);
3031 snprintf(title, buffersize,"Isolated %s #it{p}_{T} for #it{R}=%2.2f and #Sigma #it{p}_{T}^{in cone}=%2.2f",
3032 mcPartType[imc].Data(),fConeSizes[icone], fSumPtThresholds[ipt]);
3033 fhSumPtIsolatedMC[imc][icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
3034 fhSumPtIsolatedMC[imc][icone][ipt]->SetYTitle("#it{counts}");
3035 fhSumPtIsolatedMC[imc][icone][ipt]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
3036 outputContainer->Add(fhSumPtIsolatedMC[imc][icone][ipt]) ;
3043 if(fFillPileUpHistograms)
3045 for (Int_t i = 0; i < 7 ; i++)
3047 fhEIsoPileUp[i] = new TH1F(Form("hEPileUp%s",pileUpName[i].Data()),
3048 Form("Number of isolated particles vs E, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
3049 nptbins,ptmin,ptmax);
3050 fhEIsoPileUp[i]->SetYTitle("d#it{N} / d#it{E}");
3051 fhEIsoPileUp[i]->SetXTitle("#it{E} (GeV)");
3052 outputContainer->Add(fhEIsoPileUp[i]) ;
3054 fhPtIsoPileUp[i] = new TH1F(Form("hPtPileUp%s",pileUpName[i].Data()),
3055 Form("Number of isolated particles vs #it{p}_{T}, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
3056 nptbins,ptmin,ptmax);
3057 fhPtIsoPileUp[i]->SetYTitle("d#it{N} / #it{p}_{T}");
3058 fhPtIsoPileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3059 outputContainer->Add(fhPtIsoPileUp[i]) ;
3061 fhENoIsoPileUp[i] = new TH1F(Form("hENoIsoPileUp%s",pileUpName[i].Data()),
3062 Form("Number of not isolated particles vs E, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
3063 nptbins,ptmin,ptmax);
3064 fhENoIsoPileUp[i]->SetYTitle("d#it{N} / dE");
3065 fhENoIsoPileUp[i]->SetXTitle("#it{E} (GeV)");
3066 outputContainer->Add(fhENoIsoPileUp[i]) ;
3068 fhPtNoIsoPileUp[i] = new TH1F(Form("hPtNoIsoPileUp%s",pileUpName[i].Data()),
3069 Form("Number of not isolated particles vs #it{p}_{T}, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
3070 nptbins,ptmin,ptmax);
3071 fhPtNoIsoPileUp[i]->SetYTitle("d#it{N} / #it{p}_{T}");
3072 fhPtNoIsoPileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3073 outputContainer->Add(fhPtNoIsoPileUp[i]) ;
3076 fhTimeENoCut = new TH2F ("hTimeE_NoCut","time of cluster vs E of clusters, no cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
3077 fhTimeENoCut->SetXTitle("#it{E} (GeV)");
3078 fhTimeENoCut->SetYTitle("#it{time} (ns)");
3079 outputContainer->Add(fhTimeENoCut);
3081 fhTimeESPD = new TH2F ("hTimeE_SPD","time of cluster vs E of clusters, SPD cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
3082 fhTimeESPD->SetXTitle("#it{E} (GeV)");
3083 fhTimeESPD->SetYTitle("#it{time} (ns)");
3084 outputContainer->Add(fhTimeESPD);
3086 fhTimeESPDMulti = new TH2F ("hTimeE_SPDMulti","time of cluster vs E of clusters, SPD multi cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
3087 fhTimeESPDMulti->SetXTitle("#it{E} (GeV)");
3088 fhTimeESPDMulti->SetYTitle("#it{time} (ns)");
3089 outputContainer->Add(fhTimeESPDMulti);
3091 fhTimeNPileUpVertSPD = new TH2F ("hTime_NPileUpVertSPD","time of cluster vs N pile-up SPD vertex", ntimebins,timemin,timemax,50,0,50);
3092 fhTimeNPileUpVertSPD->SetYTitle("# vertex ");
3093 fhTimeNPileUpVertSPD->SetXTitle("#it{time} (ns)");
3094 outputContainer->Add(fhTimeNPileUpVertSPD);
3096 fhTimeNPileUpVertTrack = new TH2F ("hTime_NPileUpVertTracks","time of cluster vs N pile-up Tracks vertex", ntimebins,timemin,timemax, 50,0,50 );
3097 fhTimeNPileUpVertTrack->SetYTitle("# vertex ");
3098 fhTimeNPileUpVertTrack->SetXTitle("#it{time} (ns)");
3099 outputContainer->Add(fhTimeNPileUpVertTrack);
3101 fhTimeNPileUpVertContributors = new TH2F ("hTime_NPileUpVertContributors","time of cluster vs N constributors to pile-up SPD vertex", ntimebins,timemin,timemax,50,0,50);
3102 fhTimeNPileUpVertContributors->SetYTitle("# vertex ");
3103 fhTimeNPileUpVertContributors->SetXTitle("#it{time} (ns)");
3104 outputContainer->Add(fhTimeNPileUpVertContributors);
3106 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);
3107 fhTimePileUpMainVertexZDistance->SetYTitle("distance #it{z} (cm) ");
3108 fhTimePileUpMainVertexZDistance->SetXTitle("#it{time} (ns)");
3109 outputContainer->Add(fhTimePileUpMainVertexZDistance);
3111 fhTimePileUpMainVertexZDiamond = new TH2F ("hTime_PileUpMainVertexZDiamond","time of cluster vs distance in Z pile-up SPD vertex - z diamond",ntimebins,timemin,timemax,100,0,50);
3112 fhTimePileUpMainVertexZDiamond->SetYTitle("diamond distance #it{z} (cm) ");
3113 fhTimePileUpMainVertexZDiamond->SetXTitle("#it{time} (ns)");
3114 outputContainer->Add(fhTimePileUpMainVertexZDiamond);
3117 return outputContainer ;
3121 //____________________________________________________
3122 Int_t AliAnaParticleIsolation::GetMCIndex(Int_t mcTag)
3124 // Histogram index depending on origin of candidate
3126 if(!IsDataMC()) return -1;
3128 if (GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPrompt))
3132 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCFragmentation) ||
3133 GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCISR))
3137 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0))
3141 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0Decay))
3145 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEtaDecay))
3149 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCOtherDecay))
3151 return kmcOtherDecay;
3153 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron))
3157 else // anything else
3159 // careful can contain also other decays, to be checked.
3164 //__________________________________
3165 void AliAnaParticleIsolation::Init()
3167 // Do some checks and init stuff
3169 // In case of several cone and thresholds analysis, open the cuts for the filling of the
3170 // track and cluster reference arrays in cone when done in the MakeAnalysisFillAOD().
3171 // The different cones, thresholds are tested for this list of tracks, clusters.
3174 printf("AliAnaParticleIsolation::Init() - Open default isolation cuts for multiple Isolation analysis\n");
3175 GetIsolationCut()->SetPtThreshold(100);
3176 GetIsolationCut()->SetPtFraction(100);
3177 GetIsolationCut()->SetConeSize(1);
3180 if(!GetReader()->IsCTSSwitchedOn() && GetIsolationCut()->GetParticleTypeInCone()!=AliIsolationCut::kOnlyNeutral)
3181 AliFatal("STOP!: You want to use CTS tracks in analysis but not read!! \n!!Check the configuration file!!\n");
3185 //____________________________________________
3186 void AliAnaParticleIsolation::InitParameters()
3189 //Initialize the parameters of the analysis.
3190 SetInputAODName("PWG4Particle");
3191 SetAODObjArrayName("IsolationCone");
3192 AddToHistogramsName("AnaIsolation_");
3194 fCalorimeter = "EMCAL" ;
3195 fIsoDetector = "EMCAL" ;
3197 fReMakeIC = kFALSE ;
3198 fMakeSeveralIC = kFALSE ;
3200 fLeadingOnly = kTRUE;
3201 fCheckLeadingWithNeutralClusters = kTRUE;
3204 fDecayBits[0] = AliNeutralMesonSelection::kPi0;
3205 fDecayBits[1] = AliNeutralMesonSelection::kEta;
3206 fDecayBits[2] = AliNeutralMesonSelection::kPi0Side;
3207 fDecayBits[3] = AliNeutralMesonSelection::kEtaSide;
3210 fBkgBinLimit[ 0] = 00.0; fBkgBinLimit[ 1] = 00.2; fBkgBinLimit[ 2] = 00.3; fBkgBinLimit[ 3] = 00.4; fBkgBinLimit[ 4] = 00.5;
3211 fBkgBinLimit[ 5] = 01.0; fBkgBinLimit[ 6] = 01.5; fBkgBinLimit[ 7] = 02.0; fBkgBinLimit[ 8] = 03.0; fBkgBinLimit[ 9] = 05.0;
3212 fBkgBinLimit[10] = 10.0; fBkgBinLimit[11] = 100.;
3213 for(Int_t ibin = 12; ibin < 20; ibin++) fBkgBinLimit[ibin] = 00.0;
3215 //----------- Several IC-----------------
3218 fConeSizes [0] = 0.1; fConeSizes [1] = 0.2; fConeSizes [2] = 0.3; fConeSizes [3] = 0.4; fConeSizes [4] = 0.5;
3219 fPtThresholds [0] = 1.; fPtThresholds [1] = 2.; fPtThresholds [2] = 3.; fPtThresholds [3] = 4.; fPtThresholds [4] = 5.;
3220 fPtFractions [0] = 0.05; fPtFractions [1] = 0.075; fPtFractions [2] = 0.1; fPtFractions [3] = 1.25; fPtFractions [4] = 1.5;
3221 fSumPtThresholds[0] = 1.; fSumPtThresholds[1] = 2.; fSumPtThresholds[2] = 3.; fSumPtThresholds[3] = 4.; fSumPtThresholds[4] = 5.;
3225 //_________________________________________________________________________________________
3226 Bool_t AliAnaParticleIsolation::IsTriggerTheNearSideEventLeadingParticle(Int_t & idLeading)
3228 // Check if the what of the selected isolation candidates is leading particle in the same hemisphere
3229 // comparing with all the candidates, all the tracks or all the clusters.
3231 Double_t ptTrig = GetMinPt();
3232 Double_t phiTrig = 0 ;
3234 AliAODPWG4ParticleCorrelation* pLeading = 0;
3236 // Loop on stored AOD particles, find leading trigger on the selected list, with at least min pT.
3238 for(Int_t iaod = 0; iaod < GetInputAODBranch()->GetEntriesFast() ; iaod++)
3240 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
3241 particle->SetLeadingParticle(kFALSE); // set it later
3243 // Vertex cut in case of mixing
3246 Int_t check = CheckMixedEventVertex(particle->GetCaloLabel(0), particle->GetTrackLabel(0));
3247 if(check == 0) continue;
3248 if(check == -1) return kFALSE; // not sure if it is correct.
3251 //check if it is low pt trigger particle
3252 if((particle->Pt() < GetIsolationCut()->GetPtThreshold() ||
3253 particle->Pt() < GetIsolationCut()->GetSumPtThreshold()) &&
3256 continue ; //trigger should not come from underlying event
3259 // find the leading particles with highest momentum
3260 if (particle->Pt() > ptTrig)
3262 ptTrig = particle->Pt() ;
3263 phiTrig = particle->Phi();
3265 pLeading = particle ;
3267 }// finish search of leading trigger particle on the AOD branch.
3269 if(index < 0) return kFALSE;
3273 //printf("AOD leading pT %2.2f, ID %d\n", pLeading->Pt(),pLeading->GetCaloLabel(0));
3275 if(phiTrig < 0 ) phiTrig += TMath::TwoPi();
3277 // Compare if it is the leading of all tracks
3280 for(Int_t ipr = 0;ipr < GetCTSTracks()->GetEntriesFast() ; ipr ++ )
3282 AliVTrack * track = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
3284 if(track->GetID() == pLeading->GetTrackLabel(0) || track->GetID() == pLeading->GetTrackLabel(1) ||
3285 track->GetID() == pLeading->GetTrackLabel(2) || track->GetID() == pLeading->GetTrackLabel(3) ) continue ;
3287 Double_t mom[3] = {track->Px(),track->Py(),track->Pz()};
3288 p3.SetXYZ(mom[0],mom[1],mom[2]);
3289 Float_t pt = p3.Pt();
3290 Float_t phi = p3.Phi() ;
3291 if(phi < 0) phi+=TMath::TwoPi();
3293 //skip this event if near side associated particle pt larger than trigger
3295 if(pt > ptTrig && TMath::Abs(phi-phiTrig) < TMath::PiOver2()) return kFALSE;
3299 // Compare if it is leading of all calorimeter clusters
3301 if(fCheckLeadingWithNeutralClusters)
3303 // Select the calorimeter cluster list
3304 TObjArray * nePl = 0x0;
3305 if (pLeading->GetDetector() == "PHOS" )
3306 nePl = GetPHOSClusters();
3308 nePl = GetEMCALClusters();
3310 if(!nePl) return kTRUE; // Do the selection just with the tracks if no calorimeter is available.
3313 for(Int_t ipr = 0;ipr < nePl->GetEntriesFast() ; ipr ++ )
3315 AliVCluster * cluster = (AliVCluster *) (nePl->At(ipr)) ;
3317 if(cluster->GetID() == pLeading->GetCaloLabel(0) || cluster->GetID() == pLeading->GetCaloLabel(1) ) continue ;
3319 cluster->GetMomentum(lv,GetVertex(0));
3321 Float_t pt = lv.Pt();
3322 Float_t phi = lv.Phi() ;
3323 if(phi < 0) phi+=TMath::TwoPi();
3325 if(IsTrackMatched(cluster,GetReader()->GetInputEvent())) continue ; // avoid charged clusters, already covered by tracks, or cluster merging with track.
3327 // skip this event if near side associated particle pt larger than trigger
3328 // not really needed for calorimeter, unless DCal is included
3330 if(pt > ptTrig && TMath::Abs(phi-phiTrig) < TMath::PiOver2()) return kFALSE ;
3333 } // check neutral clusters
3336 pLeading->SetLeadingParticle(kTRUE);
3338 if( GetDebug() > 1 )
3339 printf("AliAnaParticleIsolation::IsTriggerTheNearSideEventLeadingParticle() - Particle AOD with index %d is leading with pT %2.2f\n",
3340 idLeading, pLeading->Pt());
3346 //__________________________________________________
3347 void AliAnaParticleIsolation::MakeAnalysisFillAOD()
3349 // Do analysis and fill aods
3350 // Search for the isolated photon in fCalorimeter with GetMinPt() < pt < GetMaxPt()
3351 // and if the particle is leading in the near side (if requested)
3353 if(!GetInputAODBranch())
3354 AliFatal(Form("No input particles in AOD with name branch < %s >, STOP",GetInputAODName().Data()));
3356 if(strcmp(GetInputAODBranch()->GetClass()->GetName(), "AliAODPWG4ParticleCorrelation"))
3357 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()));
3359 Int_t n = 0, nfrac = 0;
3360 Bool_t isolated = kFALSE ;
3361 Float_t coneptsum = 0, coneptlead = 0;
3362 TObjArray * pl = 0x0; ;
3364 //Select the calorimeter for candidate isolation with neutral particles
3365 if (fCalorimeter == "PHOS" )
3366 pl = GetPHOSClusters();
3367 else if (fCalorimeter == "EMCAL")
3368 pl = GetEMCALClusters();
3370 //Loop on AOD branch, filled previously in AliAnaPhoton, find leading particle to do isolation only with it
3371 TLorentzVector mom ;
3372 Int_t idLeading = -1 ;
3374 Int_t naod = GetInputAODBranch()->GetEntriesFast();
3377 printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - Input aod branch entries %d\n", naod);
3379 if(IsLeadingOnlyOn())
3381 Bool_t leading = IsTriggerTheNearSideEventLeadingParticle(idLeading);
3384 if(GetDebug() > 1) printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - Not leading; End fill AODs \n");
3387 iaod0 = idLeading ; // first entry in particle loop
3388 naod = idLeading+1; // last entry in particle loop
3391 // Check isolation of list of candidate particles or leading particle
3393 for(Int_t iaod = iaod0; iaod < naod; iaod++)
3395 AliAODPWG4ParticleCorrelation * aodinput = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
3397 if(IsLeadingOnlyOn()) aodinput->SetLeadingParticle(kTRUE);
3399 // Check isolation only of clusters in fiducial region
3400 if(IsFiducialCutOn())
3402 Bool_t in = GetFiducialCut()->IsInFiducialCut(*aodinput->Momentum(),aodinput->GetDetector()) ;
3406 //If too small or too large pt, skip
3407 Float_t pt = aodinput->Pt();
3408 if(pt < GetMinPt() || pt > GetMaxPt() ) continue ;
3410 //check if it is low pt trigger particle
3411 if( ( pt < GetIsolationCut()->GetPtThreshold() || pt < GetIsolationCut()->GetSumPtThreshold() ) &&
3414 continue ; //trigger should not come from underlying event
3417 //After cuts, study isolation
3418 n=0; nfrac = 0; isolated = kFALSE; coneptsum = 0; coneptlead = 0;
3419 GetIsolationCut()->MakeIsolationCut(GetCTSTracks(),pl,
3420 GetReader(), GetCaloPID(),
3421 kTRUE, aodinput, GetAODObjArrayName(),
3422 n,nfrac,coneptsum,coneptlead,isolated);
3424 if(!fMakeSeveralIC) aodinput->SetIsolated(isolated);
3425 } // particle isolationloop
3429 if(isolated) printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() : Particle %d IS ISOLATED \n",idLeading);
3430 printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - End fill AODs \n");
3435 //_________________________________________________________
3436 void AliAnaParticleIsolation::MakeAnalysisFillHistograms()
3438 // Do analysis and fill histograms
3440 // In case of simulated data, fill acceptance histograms
3441 // Not ready for multiple case analysis.
3442 if(IsDataMC() && !fMakeSeveralIC) FillAcceptanceHistograms();
3444 //Loop on stored AOD
3445 Int_t naod = GetInputAODBranch()->GetEntriesFast();
3447 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Histo aod branch entries %d\n", naod);
3449 for(Int_t iaod = 0; iaod < naod ; iaod++)
3451 AliAODPWG4ParticleCorrelation* aod = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
3453 if(IsLeadingOnlyOn() && !aod->IsLeadingParticle()) continue; // Try to isolate only leading cluster or track
3455 // Check isolation only of clusters in fiducial region
3456 if(IsFiducialCutOn())
3458 Bool_t in = GetFiducialCut()->IsInFiducialCut(*aod->Momentum(),aod->GetDetector()) ;
3459 if(! in ) continue ;
3462 Float_t pt = aod->Pt();
3464 //If too small or too large pt, skip
3465 if(pt < GetMinPt() || pt > GetMaxPt() ) continue ;
3467 Int_t mcTag = aod->GetTag() ;
3468 Int_t mcIndex = GetMCIndex(mcTag);
3470 // --- In case of redoing isolation from delta AOD ----
3471 // Not standard case, not used since its implementation
3474 //Analysis of multiple IC at same time
3475 MakeSeveralICAnalysis(aod,mcIndex);
3479 // --- In case of redoing isolation multiple cuts ----
3483 //In case a more strict IC is needed in the produced AOD
3484 Bool_t isolated = kFALSE;
3485 Int_t n = 0, nfrac = 0;
3486 Float_t coneptsum = 0, coneptlead = 0;
3488 //Recover reference arrays with clusters and tracks
3489 TObjArray * refclusters = aod->GetObjArray(GetAODObjArrayName()+"Clusters");
3490 TObjArray * reftracks = aod->GetObjArray(GetAODObjArrayName()+"Tracks");
3492 GetIsolationCut()->MakeIsolationCut(reftracks, refclusters,
3493 GetReader(), GetCaloPID(),
3495 n,nfrac,coneptsum,coneptlead,isolated);
3498 Bool_t isolated = aod->IsIsolated();
3499 Float_t energy = aod->E();
3500 Float_t phi = aod->Phi();
3501 Float_t eta = aod->Eta();
3504 if(fFillTaggedDecayHistograms)
3506 decayTag = aod->GetBtag(); // temporary
3507 if(decayTag < 0) decayTag = 0; // temporary
3510 if(GetDebug() > 0) printf(" AliAnaParticleIsolation::MakeAnalysisFillHistograms() - pt %1.1f, eta %1.1f, phi %1.1f, Isolated %d\n",
3511 pt, eta, phi, isolated);
3513 //---------------------------------------------------------------
3514 // Fill pt/sum pT distribution of particles in cone or in UE band
3515 //---------------------------------------------------------------
3517 Float_t coneptLeadCluster= 0;
3518 Float_t coneptLeadTrack = 0;
3519 Float_t coneptsumCluster = 0;
3520 Float_t coneptsumTrack = 0;
3521 Float_t coneptsumCell = 0;
3522 Float_t etaBandptsumClusterNorm = 0;
3523 Float_t etaBandptsumTrackNorm = 0;
3525 CalculateTrackSignalInCone (aod,coneptsumTrack , coneptLeadTrack );
3526 CalculateCaloSignalInCone (aod,coneptsumCluster, coneptLeadCluster);
3527 if(fFillCellHistograms)
3528 CalculateCaloCellSignalInCone(aod,coneptsumCell );
3530 if(GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kNeutralAndCharged)
3532 fhConeSumPtClustervsTrack ->Fill(coneptsumCluster, coneptsumTrack );
3533 fhConePtLeadClustervsTrack->Fill(coneptLeadCluster,coneptLeadTrack);
3535 if(coneptsumTrack > 0) fhConeSumPtClusterTrackFrac ->Fill(pt, coneptsumCluster /coneptsumTrack );
3536 if(coneptLeadTrack > 0) fhConePtLeadClusterTrackFrac->Fill(pt, coneptLeadCluster/coneptLeadTrack);
3538 if(fFillCellHistograms)
3540 fhConeSumPtCellvsTrack ->Fill(coneptsumCell, coneptsumTrack);
3541 fhConeSumPtCellTrack ->Fill(pt, coneptsumTrack+coneptsumCell);
3542 fhConeSumPtCellTrackTrigEtaPhi->Fill(eta,phi,coneptsumTrack+coneptsumCell);
3546 fhConeSumPt ->Fill(pt, coneptsumTrack+coneptsumCluster);
3547 fhConeSumPtTrigEtaPhi ->Fill(eta,phi,coneptsumTrack+coneptsumCluster);
3549 Float_t coneptLead = coneptLeadTrack;
3550 if(coneptLeadCluster > coneptLeadTrack) coneptLead = coneptLeadCluster;
3551 fhConePtLead->Fill(pt, coneptLead );
3554 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d Energy Sum in Isolation Cone %2.2f, Leading pT in cone %2.2f\n",
3555 iaod, coneptsumTrack+coneptsumCluster, coneptLead);
3557 //normalize phi/eta band per area unit
3558 if(fFillUEBandSubtractHistograms)
3559 CalculateNormalizeUEBandPerUnitArea(aod, coneptsumCluster, coneptsumCell, coneptsumTrack, etaBandptsumTrackNorm, etaBandptsumClusterNorm) ;
3561 // printf("Histograms analysis : cluster pt = %f, etaBandTrack = %f, etaBandCluster = %f, isolation = %d\n",aod->Pt(),etaBandptsumTrackNorm,etaBandptsumClusterNorm,aod->IsIsolated());
3563 //---------------------------------------------------------------
3564 // Fill Shower shape and track matching histograms
3565 //---------------------------------------------------------------
3567 FillTrackMatchingShowerShapeControlHistograms(aod, coneptsumTrack+coneptsumCluster, coneptLead, mcIndex);
3569 //---------------------------------------------------------------
3570 // Isolated/ Non isolated histograms
3571 //---------------------------------------------------------------
3576 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d ISOLATED: fill histograms\n", iaod);
3578 fhEIso ->Fill(energy);
3580 fhPhiIso ->Fill(pt,phi);
3581 fhEtaIso ->Fill(pt,eta);
3582 fhEtaPhiIso ->Fill(eta,phi);
3586 // For histograms in arrays, index in the array, corresponding to any particle origin
3587 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
3589 fhPtIsoMC [kmcPhoton]->Fill(pt);
3590 fhPhiIsoMC[kmcPhoton]->Fill(pt,phi);
3591 fhEtaIsoMC[kmcPhoton]->Fill(pt,eta);
3594 fhPtIsoMC [mcIndex]->Fill(pt);
3595 fhPhiIsoMC[mcIndex]->Fill(pt,phi);
3596 fhEtaIsoMC[mcIndex]->Fill(pt,eta);
3597 }//Histograms with MC
3599 // Candidates tagged as decay in another analysis (AliAnaPi0EbE)
3600 if(fFillTaggedDecayHistograms && decayTag > 0)
3602 for(Int_t ibit = 0; ibit < fNDecayBits; ibit++)
3604 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[ibit]))
3606 fhPtDecayIso[ibit] ->Fill(pt);
3607 fhEtaPhiDecayIso[ibit]->Fill(eta,phi);
3611 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
3612 fhPtDecayIsoMC[ibit][kmcPhoton]->Fill(pt);
3614 fhPtDecayIsoMC[ibit][mcIndex]->Fill(pt);
3618 } // decay histograms
3620 if(fFillNLMHistograms)
3621 fhPtNLocMaxIso ->Fill(pt,aod->GetFiducialArea()) ; // remember to change method name
3623 if(fFillHighMultHistograms)
3625 fhPtCentralityIso ->Fill(pt,GetEventCentrality()) ;
3626 fhPtEventPlaneIso ->Fill(pt,GetEventPlaneAngle() ) ;
3629 if(fFillPileUpHistograms)
3631 if(GetReader()->IsPileUpFromSPD()) { fhEIsoPileUp[0] ->Fill(energy) ; fhPtIsoPileUp[0]->Fill(pt) ; }
3632 if(GetReader()->IsPileUpFromEMCal()) { fhEIsoPileUp[1] ->Fill(energy) ; fhPtIsoPileUp[1]->Fill(pt) ; }
3633 if(GetReader()->IsPileUpFromSPDOrEMCal()) { fhEIsoPileUp[2] ->Fill(energy) ; fhPtIsoPileUp[2]->Fill(pt) ; }
3634 if(GetReader()->IsPileUpFromSPDAndEMCal()) { fhEIsoPileUp[3] ->Fill(energy) ; fhPtIsoPileUp[3]->Fill(pt) ; }
3635 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) { fhEIsoPileUp[4] ->Fill(energy) ; fhPtIsoPileUp[4]->Fill(pt) ; }
3636 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) { fhEIsoPileUp[5] ->Fill(energy) ; fhPtIsoPileUp[5]->Fill(pt) ; }
3637 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhEIsoPileUp[6] ->Fill(energy) ; fhPtIsoPileUp[6]->Fill(pt) ; }
3639 // Fill histograms to undertand pile-up before other cuts applied
3640 // Remember to relax time cuts in the reader
3641 FillPileUpHistograms(aod->GetCaloLabel(0));
3644 }//Isolated histograms
3645 else // NON isolated
3648 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d NOT ISOLATED, fill histograms\n", iaod);
3650 fhENoIso ->Fill(energy);
3651 fhPtNoIso ->Fill(pt);
3652 fhEtaPhiNoIso ->Fill(eta,phi);
3656 if( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton) )
3657 fhPtNoIsoMC[kmcPhoton]->Fill(pt);
3659 fhPtNoIsoMC[mcIndex]->Fill(pt);
3662 // Candidates tagged as decay in another analysis (AliAnaPi0EbE)
3663 if(fFillTaggedDecayHistograms && decayTag > 0)
3665 for(Int_t ibit = 0; ibit < fNDecayBits; ibit++)
3667 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[ibit]))
3669 fhPtDecayNoIso[ibit] ->Fill(pt);
3670 fhEtaPhiDecayNoIso[ibit]->Fill(eta,phi);
3674 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
3675 fhPtDecayNoIsoMC[ibit][kmcPhoton]->Fill(pt);
3677 fhPtDecayNoIsoMC[ibit][mcIndex]->Fill(pt);
3681 } // decay histograms
3683 if(fFillNLMHistograms)
3684 fhPtNLocMaxNoIso ->Fill(pt,aod->GetFiducialArea()); // remember to change method name
3686 if(fFillPileUpHistograms)
3688 if(GetReader()->IsPileUpFromSPD()) { fhENoIsoPileUp[0] ->Fill(energy) ; fhPtNoIsoPileUp[0]->Fill(pt) ; }
3689 if(GetReader()->IsPileUpFromEMCal()) { fhENoIsoPileUp[1] ->Fill(energy) ; fhPtNoIsoPileUp[1]->Fill(pt) ; }
3690 if(GetReader()->IsPileUpFromSPDOrEMCal()) { fhENoIsoPileUp[2] ->Fill(energy) ; fhPtNoIsoPileUp[2]->Fill(pt) ; }
3691 if(GetReader()->IsPileUpFromSPDAndEMCal()) { fhENoIsoPileUp[3] ->Fill(energy) ; fhPtNoIsoPileUp[3]->Fill(pt) ; }
3692 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) { fhENoIsoPileUp[4] ->Fill(energy) ; fhPtNoIsoPileUp[4]->Fill(pt) ; }
3693 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) { fhENoIsoPileUp[5] ->Fill(energy) ; fhPtNoIsoPileUp[5]->Fill(pt) ; }
3694 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhENoIsoPileUp[6] ->Fill(energy) ; fhPtNoIsoPileUp[6]->Fill(pt) ; }
3701 //______________________________________________________________________
3702 void AliAnaParticleIsolation::FillAcceptanceHistograms()
3704 // Fill acceptance histograms if MC data is available
3705 // Only when particle is in the calorimeter. Rethink if CTS is used.
3707 if(GetDebug() > 0) printf("AliAnaParticleIsolation::FillAcceptanceHistograms() - Start \n");
3709 //Double_t photonY = -100 ;
3710 Double_t photonE = -1 ;
3711 Double_t photonPt = -1 ;
3712 Double_t photonPhi = 100 ;
3713 Double_t photonEta = -1 ;
3721 TParticle * primStack = 0;
3722 AliAODMCParticle * primAOD = 0;
3725 // Get the ESD MC particles container
3726 AliStack * stack = 0;
3727 if( GetReader()->ReadStack() )
3729 stack = GetMCStack();
3731 nprim = stack->GetNtrack();
3734 // Get the AOD MC particles container
3735 TClonesArray * mcparticles = 0;
3736 if( GetReader()->ReadAODMCParticles() )
3738 mcparticles = GetReader()->GetAODMCParticles();
3739 if( !mcparticles ) return;
3740 nprim = mcparticles->GetEntriesFast();
3743 for(Int_t i=0 ; i < nprim; i++)
3745 if(GetReader()->AcceptOnlyHIJINGLabels() && !GetReader()->IsHIJINGLabel(i)) continue ;
3747 if(GetReader()->ReadStack())
3749 primStack = stack->Particle(i) ;
3752 printf("AliAnaParticleIsolation::FillAcceptanceHistograms() - ESD primaries pointer not available!!\n");
3756 pdg = primStack->GetPdgCode();
3757 status = primStack->GetStatusCode();
3759 if(primStack->Energy() == TMath::Abs(primStack->Pz())) continue ; //Protection against floating point exception
3761 //printf("i %d, %s %d %s %d \n",i, stack->Particle(i)->GetName(), stack->Particle(i)->GetPdgCode(),
3762 // prim->GetName(), prim->GetPdgCode());
3764 //photonY = 0.5*TMath::Log((prim->Energy()-prim->Pz())/(prim->Energy()+prim->Pz())) ;
3767 primStack->Momentum(lv);
3772 primAOD = (AliAODMCParticle *) mcparticles->At(i);
3775 printf("AliAnaParticleIsolation::FillAcceptanceHistograms() - AOD primaries pointer not available!!\n");
3779 pdg = primAOD->GetPdgCode();
3780 status = primAOD->GetStatus();
3782 if(primAOD->E() == TMath::Abs(primAOD->Pz())) continue ; //Protection against floating point exception
3784 //photonY = 0.5*TMath::Log((prim->Energy()-prim->Pz())/(prim->Energy()+prim->Pz())) ;
3787 lv.SetPxPyPzE(primAOD->Px(),primAOD->Py(),primAOD->Pz(),primAOD->E());
3790 // Select only photons in the final state
3791 if(pdg != 22 ) continue ;
3793 // Consider only final state particles, but this depends on generator,
3794 // status 1 is the usual one, in case of not being ok, leave the possibility
3795 // to not consider this.
3796 if(status != 1 && GetMCAnalysisUtils()->GetMCGenerator()!="" ) continue ;
3798 // If too small or too large pt, skip, same cut as for data analysis
3799 photonPt = lv.Pt () ;
3801 if(photonPt < GetMinPt() || photonPt > GetMaxPt() ) continue ;
3804 photonEta = lv.Eta() ;
3805 photonPhi = lv.Phi() ;
3807 if(photonPhi < 0) photonPhi+=TMath::TwoPi();
3809 // Check if photons hit the Calorimeter acceptance
3810 if(IsRealCaloAcceptanceOn() && fIsoDetector!="CTS") // defined on base class
3812 if(GetReader()->ReadStack() &&
3813 !GetCaloUtils()->IsMCParticleInCalorimeterAcceptance(fIsoDetector, primStack)) continue ;
3814 if(GetReader()->ReadAODMCParticles() &&
3815 !GetCaloUtils()->IsMCParticleInCalorimeterAcceptance(fIsoDetector, primAOD )) continue ;
3818 // Check same fidutial borders as in data analysis on top of real acceptance if real was requested.
3819 if(!GetFiducialCut()->IsInFiducialCut(lv,fIsoDetector)) continue ;
3821 // Get tag of this particle photon from fragmentation, decay, prompt ...
3822 // Set the origin of the photon.
3823 tag = GetMCAnalysisUtils()->CheckOrigin(i,GetReader());
3825 if(!GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
3827 // A conversion photon from a hadron, skip this kind of photon
3828 // printf("AliAnaPhoton::FillAcceptanceHistograms() - not a photon, weird!\n ");
3829 // GetMCAnalysisUtils()->PrintMCTag(tag);
3835 if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPrompt) )
3837 mcIndex = kmcPrimPrompt;
3839 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCFragmentation) )
3841 mcIndex = kmcPrimFrag ;
3843 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCISR))
3845 mcIndex = kmcPrimISR;
3847 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0Decay))
3849 mcIndex = kmcPrimPi0Decay;
3851 else if( (GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEtaDecay) ||
3852 GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCOtherDecay)))
3854 mcIndex = kmcPrimOtherDecay;
3858 // Other decay but from non final state particle
3859 mcIndex = kmcPrimOtherDecay;
3862 // ////////////////////ISO MC/////////////////////////
3863 Double_t sumPtInCone = 0; Double_t dR=0. ;
3864 TParticle * mcisopStack = 0;
3865 AliAODMCParticle * mcisopAOD = 0;
3866 Int_t partInConeStatus = -1, partInConeMother = -1;
3867 Double_t partInConePt = 0, partInConeEta = 0, partInConePhi = 0;
3869 for(Int_t ip = 0; ip < nprim ; ip++)
3873 if( GetReader()->ReadStack() )
3875 mcisopStack = static_cast<TParticle*>(stack->Particle(ip));
3876 if( !mcisopStack ) continue;
3877 partInConeStatus = mcisopStack->GetStatusCode();
3878 partInConeMother = mcisopStack->GetMother(0);
3879 partInConePt = mcisopStack->Pt();
3880 partInConeEta = mcisopStack->Eta();
3881 partInConePhi = mcisopStack->Phi();
3885 mcisopAOD = (AliAODMCParticle *) mcparticles->At(ip);
3886 if( !mcisopAOD ) continue;
3887 partInConeStatus = mcisopAOD->GetStatus();
3888 partInConeMother = mcisopAOD->GetMother();
3889 partInConePt = mcisopAOD->Pt();
3890 partInConeEta = mcisopAOD->Eta();
3891 partInConePhi = mcisopAOD->Phi();
3894 // Consider only final state particles, but this depends on generator,
3895 // status 1 is the usual one, in case of not being ok, leave the possibility
3896 // to not consider this.
3897 if( partInConeStatus != 1 && GetMCAnalysisUtils()->GetMCGenerator()!="" ) continue ;
3899 if( partInConeMother == i ) continue;
3901 if( partInConePt < GetReader()->GetCTSPtMin() ) continue;
3902 // Careful!!!, cut for TPC tracks and calorimeter clusters in cone can be different
3904 // TVector3 vmcv(mcisop->Px(),mcisop->Py(), mcisop->Pz());
3905 // if(vmcv.Perp()>1)
3909 // Add here Acceptance cut???, charged particles CTS fid cut, neutral Calo real acceptance.
3912 dR = GetIsolationCut()->Radius(photonEta, photonPhi, partInConeEta, partInConePhi);
3914 if(dR > GetIsolationCut()->GetConeSize())
3917 sumPtInCone += partInConePt;
3918 if(partInConePt > GetIsolationCut()->GetPtThreshold() &&
3919 partInConePt < GetIsolationCut()->GetPtThresholdMax()) npart++;
3922 ///////END ISO MC/////////////////////////
3924 // Fill the histograms, only those in the defined calorimeter acceptance
3926 fhEtaPrimMC[kmcPrimPhoton]->Fill(photonPt , photonEta) ;
3927 fhPhiPrimMC[kmcPrimPhoton]->Fill(photonPt , photonPhi) ;
3928 fhEPrimMC [kmcPrimPhoton]->Fill(photonE) ;
3930 fhEtaPrimMC[mcIndex]->Fill(photonPt , photonEta) ;
3931 fhPhiPrimMC[mcIndex]->Fill(photonPt , photonPhi) ;
3932 fhEPrimMC [mcIndex]->Fill(photonE ) ;
3935 Bool_t isolated = kFALSE;
3936 if(GetIsolationCut()->GetICMethod() == AliIsolationCut::kSumPtIC &&
3937 (sumPtInCone < GetIsolationCut()->GetSumPtThreshold() ||
3938 sumPtInCone > GetIsolationCut()->GetSumPtThresholdMax()))
3941 if(GetIsolationCut()->GetICMethod() == AliIsolationCut::kPtThresIC &&
3947 fhPtPrimMCiso [mcIndex] ->Fill(photonPt) ;
3948 fhPtPrimMCiso [kmcPrimPhoton]->Fill(photonPt) ;
3951 }//loop on primaries
3953 if(GetDebug() > 0) printf("AliAnaParticleIsolation::FillAcceptanceHistograms() - End \n");
3958 //_____________________________________________________________________________________
3959 void AliAnaParticleIsolation::MakeSeveralICAnalysis(AliAODPWG4ParticleCorrelation* ph,
3963 //Isolation Cut Analysis for both methods and different pt cuts and cones
3964 Float_t ptC = ph->Pt();
3965 Float_t etaC = ph->Eta();
3966 Float_t phiC = ph->Phi();
3967 Int_t tag = ph->GetTag();
3970 if(fFillTaggedDecayHistograms)
3972 decayTag = ph->GetBtag(); // temporary
3973 if(decayTag < 0) decayTag = 0; // temporary
3977 printf("AliAnaParticleIsolation::MakeSeveralICAnalysis() - Isolate pT %2.2f, decay tag %d\n",ptC, decayTag);
3979 //Keep original setting used when filling AODs, reset at end of analysis
3980 Float_t ptthresorg = GetIsolationCut()->GetPtThreshold();
3981 Float_t ptfracorg = GetIsolationCut()->GetPtFraction();
3982 Float_t ptsumcorg = GetIsolationCut()->GetSumPtThreshold();
3983 Float_t rorg = GetIsolationCut()->GetConeSize();
3985 Float_t coneptsum = 0, coneptlead = 0;
3986 Int_t n [10][10];//[fNCones][fNPtThresFrac];
3987 Int_t nfrac[10][10];//[fNCones][fNPtThresFrac];
3988 Bool_t isolated = kFALSE;
3990 // Fill hist with all particles before isolation criteria
3991 fhENoIso ->Fill(ph->E());
3992 fhPtNoIso ->Fill(ptC);
3993 fhEtaPhiNoIso->Fill(etaC,phiC);
3997 if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
3998 fhPtNoIsoMC[kmcPhoton]->Fill(ptC);
4000 fhPtNoIsoMC[mcIndex]->Fill(ptC);
4003 // Candidates tagged as decay in another analysis (AliAnaPi0EbE)
4004 if(fFillTaggedDecayHistograms && decayTag > 0)
4006 for(Int_t ibit = 0; ibit < fNDecayBits; ibit++)
4008 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[ibit]))
4010 fhPtDecayNoIso[ibit] ->Fill(ptC);
4011 fhEtaPhiDecayNoIso[ibit]->Fill(etaC,phiC);
4015 if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
4016 fhPtDecayNoIsoMC[ibit][kmcPhoton]->Fill(ptC);
4018 fhPtDecayNoIsoMC[ibit][mcIndex]->Fill(ptC);
4022 } // decay histograms
4024 //Get vertex for photon momentum calculation
4025 Double_t vertex[] = {0,0,0} ; //vertex ;
4026 if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
4027 GetReader()->GetVertex(vertex);
4029 //Loop on cone sizes
4030 for(Int_t icone = 0; icone<fNCones; icone++)
4032 //Recover reference arrays with clusters and tracks
4033 TObjArray * refclusters = ph->GetObjArray(GetAODObjArrayName()+"Clusters");
4034 TObjArray * reftracks = ph->GetObjArray(GetAODObjArrayName()+"Tracks");
4036 //If too small or too large pt, skip
4037 if(ptC < GetMinPt() || ptC > GetMaxPt() ) continue ;
4039 //In case a more strict IC is needed in the produced AOD
4041 isolated = kFALSE; coneptsum = 0; coneptlead = 0;
4043 GetIsolationCut()->SetSumPtThreshold(100);
4044 GetIsolationCut()->SetPtThreshold(100);
4045 GetIsolationCut()->SetPtFraction(100);
4046 GetIsolationCut()->SetConeSize(fConeSizes[icone]);
4048 // retreive pt tracks to fill histo vs. pt leading
4049 //Fill pt distribution of particles in cone
4050 //fhPtLeadingPt(),fhPerpSumPtLeadingPt(),fhPerpPtLeadingPt(),
4052 // Tracks in perpendicular cones
4053 Double_t sumptPerp = 0. ;
4054 TObjArray * trackList = GetCTSTracks() ;
4055 for(Int_t itrack=0; itrack < trackList->GetEntriesFast(); itrack++)
4057 AliVTrack* track = (AliVTrack *) trackList->At(itrack);
4058 //fill the histograms at forward range
4061 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Track not available?");
4065 Double_t dPhi = phiC - track->Phi() + TMath::PiOver2();
4066 Double_t dEta = etaC - track->Eta();
4067 Double_t arg = dPhi*dPhi + dEta*dEta;
4068 if(TMath::Sqrt(arg) < fConeSizes[icone])
4070 fhPerpPtLeadingPt[icone]->Fill(ptC,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
4071 sumptPerp+=track->Pt();
4074 dPhi = phiC - track->Phi() - TMath::PiOver2();
4075 arg = dPhi*dPhi + dEta*dEta;
4076 if(TMath::Sqrt(arg) < fConeSizes[icone])
4078 fhPerpPtLeadingPt[icone]->Fill(ptC,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
4079 sumptPerp+=track->Pt();
4083 fhPerpSumPtLeadingPt[icone]->Fill(ptC,sumptPerp);
4085 // Tracks in isolation cone, pT distribution and sum
4086 if(reftracks && GetIsolationCut()->GetParticleTypeInCone()!= AliIsolationCut::kOnlyNeutral)
4088 for(Int_t itrack=0; itrack < reftracks->GetEntriesFast(); itrack++)
4090 AliVTrack* track = (AliVTrack *) reftracks->At(itrack);
4092 Float_t rad = GetIsolationCut()->Radius(etaC, phiC, track->Eta(), track->Phi());
4094 if(rad > fConeSizes[icone]) continue ;
4096 fhPtLeadingPt[icone]->Fill(ptC, track->Pt());
4097 coneptsum += track->Pt();
4101 // Clusters in isolation cone, pT distribution and sum
4102 if(refclusters && GetIsolationCut()->GetParticleTypeInCone()!= AliIsolationCut::kOnlyCharged)
4104 TLorentzVector mom ;
4105 for(Int_t icalo=0; icalo < refclusters->GetEntriesFast(); icalo++)
4107 AliVCluster* calo = (AliVCluster *) refclusters->At(icalo);
4109 calo->GetMomentum(mom,vertex) ;//Assume that come from vertex in straight line
4111 Float_t rad = GetIsolationCut()->Radius(etaC, phiC, mom.Eta(), mom.Phi());
4113 if(rad > fConeSizes[icone]) continue ;
4115 fhPtLeadingPt[icone]->Fill(ptC, mom.Pt());
4116 coneptsum += mom.Pt();
4120 fhSumPtLeadingPt[icone]->Fill(ptC,coneptsum);
4124 if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
4125 fhSumPtLeadingPtMC[kmcPhoton][icone]->Fill(ptC,coneptsum) ;
4127 fhSumPtLeadingPtMC[mcIndex][icone]->Fill(ptC,coneptsum) ;
4132 //Loop on pt thresholds
4133 for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
4136 nfrac[icone][ipt]=0;
4137 GetIsolationCut()->SetPtThreshold(fPtThresholds[ipt]);
4138 GetIsolationCut()->SetPtFraction(fPtFractions[ipt]) ;
4139 GetIsolationCut()->SetSumPtThreshold(fSumPtThresholds[ipt]);
4141 GetIsolationCut()->MakeIsolationCut(reftracks, refclusters,
4142 GetReader(), GetCaloPID(),
4144 n[icone][ipt],nfrac[icone][ipt],
4145 coneptsum, coneptlead, isolated);
4147 // Normal pT threshold cut
4151 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - cone size %1.1f, ptThres %1.1f, sumptThresh %1.1f\n",
4152 fConeSizes[icone],fPtThresholds[ipt],fSumPtThresholds[ipt]);
4153 printf("\t n %d, nfrac %d, coneptsum %2.2f\n",
4154 n[icone][ipt],nfrac[icone][ipt],coneptsum);
4156 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - pt %1.1f, eta %1.1f, phi %1.1f\n",ptC, etaC, phiC);
4159 if(n[icone][ipt] == 0)
4162 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling pt threshold loop\n");
4164 fhPtThresIsolated [icone][ipt]->Fill(ptC);
4165 fhEtaPhiPtThresIso[icone][ipt]->Fill(etaC,phiC);
4167 if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
4169 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
4171 fhPtPtThresDecayIso [icone][ipt]->Fill(ptC);
4172 fhEtaPhiPtThresDecayIso[icone][ipt]->Fill(etaC,phiC);
4178 if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton) )
4179 fhPtThresIsolatedMC[kmcPhoton][icone][ipt]->Fill(ptC) ;
4181 fhPtThresIsolatedMC[mcIndex][icone][ipt]->Fill(ptC) ;
4186 // pt in cone fraction
4187 if(nfrac[icone][ipt] == 0)
4190 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling frac loop\n");
4192 fhPtFracIsolated [icone][ipt]->Fill(ptC);
4193 fhEtaPhiPtFracIso[icone][ipt]->Fill(etaC,phiC);
4195 if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
4197 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
4199 fhPtPtFracDecayIso [icone][ipt]->Fill(ptC);
4200 fhEtaPhiPtFracDecayIso[icone][ipt]->Fill(etaC,phiC);
4206 if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
4207 fhPtFracIsolatedMC[kmcPhoton][icone][ipt]->Fill(ptC) ;
4209 fhPtFracIsolatedMC[mcIndex][icone][ipt]->Fill(ptC) ;
4214 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - checking IC method : %i\n",GetIsolationCut()->GetICMethod());
4216 //Pt threshold on pt cand/ sum in cone histograms
4217 if(coneptsum < fSumPtThresholds[ipt])
4220 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling sum loop\n");
4222 fhSumPtIsolated [icone][ipt]->Fill(ptC) ;
4223 fhEtaPhiPtSumIso[icone][ipt]->Fill(etaC, phiC) ;
4225 if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
4227 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
4229 fhPtPtSumDecayIso[icone][ipt]->Fill(ptC);
4230 fhEtaPhiPtSumDecayIso[icone][ipt]->Fill(etaC, phiC) ;
4236 if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
4237 fhSumPtIsolatedMC[kmcPhoton][icone][ipt]->Fill(ptC) ;
4239 fhSumPtIsolatedMC[mcIndex][icone][ipt]->Fill(ptC) ;
4243 // pt sum pt frac method
4244 // if( ((fPtFractions[ipt]*ptC < fSumPtThresholds[ipt]) && (coneptsum < fSumPtThresholds[ipt])) || ((fPtFractions[ipt]*ptC > fSumPtThresholds[ipt]) && (coneptsum < fPtFractions[ipt]*ptC)) )
4246 if(coneptsum < fPtFractions[ipt]*ptC)
4249 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling PtFrac PtSum loop\n");
4251 fhPtFracPtSumIso [icone][ipt]->Fill(ptC) ;
4252 fhEtaPhiFracPtSumIso[icone][ipt]->Fill(etaC,phiC) ;
4254 if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
4256 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
4258 fhPtFracPtSumDecayIso [icone][ipt]->Fill(ptC);
4259 fhEtaPhiFracPtSumDecayIso[icone][ipt]->Fill(etaC,phiC);
4265 Float_t cellDensity = GetIsolationCut()->GetCellDensity( ph, GetReader());
4266 if(coneptsum < fSumPtThresholds[ipt]*cellDensity)
4269 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling density loop\n");
4271 fhPtSumDensityIso [icone][ipt]->Fill(ptC) ;
4272 fhEtaPhiSumDensityIso[icone][ipt]->Fill(etaC,phiC) ;
4274 if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
4276 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
4278 fhPtSumDensityDecayIso [icone][ipt]->Fill(ptC);
4279 fhEtaPhiSumDensityDecayIso[icone][ipt]->Fill(etaC, phiC);
4288 //Reset original parameters for AOD analysis
4289 GetIsolationCut()->SetPtThreshold(ptthresorg);
4290 GetIsolationCut()->SetPtFraction(ptfracorg);
4291 GetIsolationCut()->SetSumPtThreshold(ptsumcorg);
4292 GetIsolationCut()->SetConeSize(rorg);
4296 //_____________________________________________________________
4297 void AliAnaParticleIsolation::Print(const Option_t * opt) const
4300 //Print some relevant parameters set for the analysis
4304 printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
4305 AliAnaCaloTrackCorrBaseClass::Print(" ");
4307 printf("ReMake Isolation = %d \n", fReMakeIC) ;
4308 printf("Make Several Isolation = %d \n", fMakeSeveralIC) ;
4309 printf("Calorimeter for isolation = %s \n", fCalorimeter.Data()) ;
4310 printf("Detector for candidate isolation = %s \n", fIsoDetector.Data()) ;
4314 printf("N Cone Sizes = %d\n", fNCones) ;
4315 printf("Cone Sizes = \n") ;
4316 for(Int_t i = 0; i < fNCones; i++)
4317 printf(" %1.2f;", fConeSizes[i]) ;
4320 printf("N pT thresholds/fractions = %d\n", fNPtThresFrac) ;
4321 printf(" pT thresholds = \n") ;
4322 for(Int_t i = 0; i < fNPtThresFrac; i++)
4323 printf(" %2.2f;", fPtThresholds[i]) ;
4327 printf(" pT fractions = \n") ;
4328 for(Int_t i = 0; i < fNPtThresFrac; i++)
4329 printf(" %2.2f;", fPtFractions[i]) ;
4333 printf("sum pT thresholds = \n") ;
4334 for(Int_t i = 0; i < fNPtThresFrac; i++)
4335 printf(" %2.2f;", fSumPtThresholds[i]) ;