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());
1199 if( GetDebug() > 1 && leadptBin == 0 )
1200 printf("No track/clusters in isolation cone: cand pt %2.2f GeV/c, track multiplicity %d, N clusters %d\n",
1201 pt, GetTrackMultiplicity(),GetEMCALClusters()->GetEntriesFast());
1205 Int_t leadptBinMC = leadptBin+mcIndex*fNBkgBin;
1206 Int_t ptsumBinMC = ptsumBin+mcIndex*fNBkgBin;
1207 if( leadptBin >=0 ) fhPtLeadConeBinLambda0MC[leadptBinMC]->Fill(pt,cluster->GetM02());
1208 if( ptsumBin >=0 ) fhSumPtConeBinLambda0MC [ ptsumBinMC]->Fill(pt,cluster->GetM02());
1209 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
1211 leadptBinMC = leadptBin+kmcPhoton*fNBkgBin;
1212 ptsumBinMC = ptsumBin+kmcPhoton*fNBkgBin;
1213 if( leadptBin >=0 ) fhPtLeadConeBinLambda0MC[leadptBinMC]->Fill(pt,cluster->GetM02());
1214 if( ptsumBin >=0 ) fhSumPtConeBinLambda0MC [ ptsumBinMC]->Fill(pt,cluster->GetM02());
1222 fhELambda0 [isolated]->Fill(energy, cluster->GetM02() );
1223 fhPtLambda0[isolated]->Fill(pt, cluster->GetM02() );
1224 fhELambda1 [isolated]->Fill(energy, cluster->GetM20() );
1228 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
1229 fhPtLambda0MC[kmcPhoton][isolated]->Fill(pt, cluster->GetM02());
1231 fhPtLambda0MC[mcIndex][isolated]->Fill(pt, cluster->GetM02());
1234 if(fCalorimeter == "EMCAL" && GetFirstSMCoveredByTRD() >= 0 &&
1235 GetModuleNumber(cluster) >= GetFirstSMCoveredByTRD() )
1237 fhELambda0TRD [isolated]->Fill(energy, cluster->GetM02() );
1238 fhPtLambda0TRD[isolated]->Fill(pt , cluster->GetM02() );
1239 fhELambda1TRD [isolated]->Fill(energy, cluster->GetM20() );
1242 if(fFillNLMHistograms)
1244 fhNLocMax[isolated]->Fill(energy,nMaxima);
1245 if (nMaxima==1) { fhELambda0LocMax1[isolated]->Fill(energy,cluster->GetM02()); fhELambda1LocMax1[isolated]->Fill(energy,cluster->GetM20()); }
1246 else if(nMaxima==2) { fhELambda0LocMax2[isolated]->Fill(energy,cluster->GetM02()); fhELambda1LocMax2[isolated]->Fill(energy,cluster->GetM20()); }
1247 else { fhELambda0LocMaxN[isolated]->Fill(energy,cluster->GetM02()); fhELambda1LocMaxN[isolated]->Fill(energy,cluster->GetM20()); }
1253 Float_t dZ = cluster->GetTrackDz();
1254 Float_t dR = cluster->GetTrackDx();
1256 if(cluster->IsEMCAL() && GetCaloUtils()->IsRecalculationOfClusterTrackMatchingOn())
1258 dR = 2000., dZ = 2000.;
1259 GetCaloUtils()->GetEMCALRecoUtils()->GetMatchedResiduals(cluster->GetID(),dZ,dR);
1262 //printf("ParticleIsolation: dPhi %f, dEta %f\n",dR,dZ);
1263 if(fhTrackMatchedDEta[isolated] && TMath::Abs(dR) < 999)
1265 fhTrackMatchedDEta[isolated]->Fill(energy,dZ);
1266 fhTrackMatchedDPhi[isolated]->Fill(energy,dR);
1267 if(energy > 0.5) fhTrackMatchedDEtaDPhi[isolated]->Fill(dZ,dR);
1270 // Check dEdx and E/p of matched clusters
1272 if(TMath::Abs(dZ) < 0.05 && TMath::Abs(dR) < 0.05)
1275 AliVTrack *track = GetCaloUtils()->GetMatchedTrack(cluster, GetReader()->GetInputEvent());
1279 Float_t dEdx = track->GetTPCsignal();
1280 fhdEdx[isolated]->Fill(cluster->E(), dEdx);
1282 Float_t eOverp = cluster->E()/track->P();
1283 fhEOverP[isolated]->Fill(cluster->E(), eOverp);
1286 // printf("AliAnaParticleIsolation::FillTrackMatchingShowerShapeHistograms() - Residual OK but (dR, dZ)= (%2.4f,%2.4f) no track associated WHAT? \n", dR,dZ);
1291 if ( !GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCConversion) )
1293 if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0) ||
1294 GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEta) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 2.5 );
1295 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 0.5 );
1296 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 1.5 );
1297 else fhTrackMatchedMCParticle[isolated]->Fill(energy, 3.5 );
1302 if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0) ||
1303 GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEta) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 6.5 );
1304 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 4.5 );
1305 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 5.5 );
1306 else fhTrackMatchedMCParticle[isolated]->Fill(energy, 7.5 );
1315 } // clusters array available
1319 //______________________________________________________
1320 TObjString * AliAnaParticleIsolation::GetAnalysisCuts()
1322 //Save parameters used for analysis
1323 TString parList ; //this will be list of parameters used for this analysis.
1324 const Int_t buffersize = 255;
1325 char onePar[buffersize] ;
1327 snprintf(onePar, buffersize,"--- AliAnaParticleIsolation ---\n") ;
1329 snprintf(onePar, buffersize,"Calorimeter: %s\n",fCalorimeter.Data()) ;
1331 snprintf(onePar, buffersize,"Isolation Cand Detector: %s\n",fIsoDetector.Data()) ;
1333 snprintf(onePar, buffersize,"fReMakeIC =%d (Flag for reisolation during histogram filling) \n",fReMakeIC) ;
1335 snprintf(onePar, buffersize,"fMakeSeveralIC=%d (Flag for isolation with several cuts at the same time ) \n",fMakeSeveralIC) ;
1337 snprintf(onePar, buffersize,"fFillTMHisto=%d (Flag for track matching histograms) \n",fFillTMHisto) ;
1339 snprintf(onePar, buffersize,"fFillSSHisto=%d (Flag for shower shape histograms) \n",fFillSSHisto) ;
1344 snprintf(onePar, buffersize,"fNCones =%d (Number of cone sizes) \n",fNCones) ;
1346 snprintf(onePar, buffersize,"fNPtThresFrac=%d (Flag for isolation with several cuts at the same time ) \n",fNPtThresFrac) ;
1349 for(Int_t icone = 0; icone < fNCones ; icone++)
1351 snprintf(onePar, buffersize,"fConeSizes[%d]=%1.2f (isolation cone size) \n",icone, fConeSizes[icone]) ;
1354 for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
1356 snprintf(onePar, buffersize,"fPtThresholds[%d]=%1.2f (isolation pt threshold) \n",ipt, fPtThresholds[ipt]) ;
1359 for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
1361 snprintf(onePar, buffersize,"fPtFractions[%d]=%1.2f (isolation pt fraction threshold) \n",ipt, fPtFractions[ipt]) ;
1364 for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
1366 snprintf(onePar, buffersize,"fSumPtThresholds[%d]=%1.2f (isolation sum pt threshold) \n",ipt, fSumPtThresholds[ipt]) ;
1371 //Get parameters set in base class.
1372 parList += GetBaseParametersList() ;
1374 //Get parameters set in IC class.
1375 if(!fMakeSeveralIC)parList += GetIsolationCut()->GetICParametersList() ;
1377 return new TObjString(parList) ;
1381 //________________________________________________________
1382 TList * AliAnaParticleIsolation::GetCreateOutputObjects()
1384 // Create histograms to be saved in output file and
1385 // store them in outputContainer
1386 TList * outputContainer = new TList() ;
1387 outputContainer->SetName("IsolatedParticleHistos") ;
1389 Int_t nptbins = GetHistogramRanges()->GetHistoPtBins();
1390 Int_t nphibins = GetHistogramRanges()->GetHistoPhiBins();
1391 Int_t netabins = GetHistogramRanges()->GetHistoEtaBins();
1392 Float_t ptmax = GetHistogramRanges()->GetHistoPtMax();
1393 Float_t phimax = GetHistogramRanges()->GetHistoPhiMax();
1394 Float_t etamax = GetHistogramRanges()->GetHistoEtaMax();
1395 Float_t ptmin = GetHistogramRanges()->GetHistoPtMin();
1396 Float_t phimin = GetHistogramRanges()->GetHistoPhiMin();
1397 Float_t etamin = GetHistogramRanges()->GetHistoEtaMin();
1398 Int_t ssbins = GetHistogramRanges()->GetHistoShowerShapeBins();
1399 Float_t ssmax = GetHistogramRanges()->GetHistoShowerShapeMax();
1400 Float_t ssmin = GetHistogramRanges()->GetHistoShowerShapeMin();
1401 Int_t ntimebins= GetHistogramRanges()->GetHistoTimeBins();
1402 Float_t timemax = GetHistogramRanges()->GetHistoTimeMax();
1403 Float_t timemin = GetHistogramRanges()->GetHistoTimeMin();
1405 Int_t nresetabins = GetHistogramRanges()->GetHistoTrackResidualEtaBins();
1406 Float_t resetamax = GetHistogramRanges()->GetHistoTrackResidualEtaMax();
1407 Float_t resetamin = GetHistogramRanges()->GetHistoTrackResidualEtaMin();
1408 Int_t nresphibins = GetHistogramRanges()->GetHistoTrackResidualPhiBins();
1409 Float_t resphimax = GetHistogramRanges()->GetHistoTrackResidualPhiMax();
1410 Float_t resphimin = GetHistogramRanges()->GetHistoTrackResidualPhiMin();
1412 Int_t ndedxbins = GetHistogramRanges()->GetHistodEdxBins();
1413 Float_t dedxmax = GetHistogramRanges()->GetHistodEdxMax();
1414 Float_t dedxmin = GetHistogramRanges()->GetHistodEdxMin();
1415 Int_t nPoverEbins = GetHistogramRanges()->GetHistoPOverEBins();
1416 Float_t pOverEmax = GetHistogramRanges()->GetHistoPOverEMax();
1417 Float_t pOverEmin = GetHistogramRanges()->GetHistoPOverEMin();
1419 Int_t nptsumbins = GetHistogramRanges()->GetHistoNPtSumBins();
1420 Float_t ptsummax = GetHistogramRanges()->GetHistoPtSumMax();
1421 Float_t ptsummin = GetHistogramRanges()->GetHistoPtSumMin();
1422 Int_t nptinconebins = GetHistogramRanges()->GetHistoNPtInConeBins();
1423 Float_t ptinconemax = GetHistogramRanges()->GetHistoPtInConeMax();
1424 Float_t ptinconemin = GetHistogramRanges()->GetHistoPtInConeMin();
1426 //Float_t ptthre = GetIsolationCut()->GetPtThreshold();
1427 //Float_t ptsumthre = GetIsolationCut()->GetSumPtThreshold();
1428 //Float_t ptfrac = GetIsolationCut()->GetPtFraction();
1429 Float_t r = GetIsolationCut()->GetConeSize();
1430 Int_t method = GetIsolationCut()->GetICMethod() ;
1431 Int_t particle = GetIsolationCut()->GetParticleTypeInCone() ;
1433 TString sThreshold = "";
1434 if ( method == AliIsolationCut::kSumPtIC )
1436 sThreshold = Form(", %2.2f < #Sigma #it{p}_{T}^{in cone} < %2.2f GeV/#it{c}",
1437 GetIsolationCut()->GetSumPtThreshold(), GetIsolationCut()->GetSumPtThresholdMax());
1438 if(GetIsolationCut()->GetSumPtThresholdMax() > 200)
1439 sThreshold = Form(", #Sigma #it{p}_{T}^{in cone} = %2.2f GeV/#it{c}",
1440 GetIsolationCut()->GetSumPtThreshold());
1442 else if ( method == AliIsolationCut::kPtThresIC)
1444 sThreshold = Form(", %2.2f < #it{p}_{T}^{th} < %2.2f GeV/#it{c}",
1445 GetIsolationCut()->GetPtThreshold(),GetIsolationCut()->GetPtThresholdMax());
1446 if(GetIsolationCut()->GetSumPtThreshold() > 200)
1447 sThreshold = Form(", #it{p}_{T}^{th} = %2.2f GeV/#it{c}",
1448 GetIsolationCut()->GetPtThreshold());
1450 else if ( method == AliIsolationCut::kPtFracIC)
1451 sThreshold = Form(", #Sigma #it{p}_{T}^{in cone}/#it{p}_{T}^{trig} = %2.2f" ,
1452 GetIsolationCut()->GetPtFraction());
1454 TString sParticle = ", x^{0,#pm}";
1455 if ( particle == AliIsolationCut::kOnlyNeutral ) sParticle = ", x^{0}";
1456 else if ( particle == AliIsolationCut::kOnlyCharged ) sParticle = ", x^{#pm}";
1458 TString parTitle = Form("#it{R} = %2.2f%s%s",GetIsolationCut()->GetConeSize(), sThreshold.Data(),sParticle.Data());
1460 TString pileUpName[] = {"SPD","EMCAL","SPDOrEMCAL","SPDAndEMCAL","SPDAndNotEMCAL","EMCALAndNotSPD","NotSPDAndNotEMCAL"} ;
1462 // MC histograms title and name
1463 TString mcPartType[] = { "#gamma", "#gamma_{prompt}", "#gamma_{fragmentation}",
1464 "#pi^{0} (merged #gamma)","#gamma_{#pi decay}",
1465 "#gamma_{#eta decay}","#gamma_{other decay}",
1466 "e^{#pm}","hadrons?"} ;
1468 TString mcPartName[] = { "Photon","PhotonPrompt","PhotonFrag",
1469 "Pi0","Pi0Decay","EtaDecay","OtherDecay",
1470 "Electron","Hadron"} ;
1472 // Primary MC histograms title and name
1473 TString pptype[] = { "#gamma", "#gamma_{#pi decay}","#gamma_{other decay}",
1474 "#gamma_{prompt}","#gamma_{fragmentation}","#gamma_{ISR}"} ;
1476 TString ppname[] = { "Photon","PhotonPi0Decay","PhotonOtherDecay",
1477 "PhotonPrompt","PhotonFrag","PhotonISR"} ;
1479 // Not Isolated histograms, reference histograms
1481 fhENoIso = new TH1F("hENoIso",
1482 Form("Number of not isolated leading particles vs #it{p}_{T}, %s",parTitle.Data()),
1483 nptbins,ptmin,ptmax);
1484 fhENoIso->SetYTitle("#it{counts}");
1485 fhENoIso->SetXTitle("E (GeV/#it{c})");
1486 outputContainer->Add(fhENoIso) ;
1488 fhPtNoIso = new TH1F("hPtNoIso",
1489 Form("Number of not isolated leading particles vs #it{p}_{T}, %s",parTitle.Data()),
1490 nptbins,ptmin,ptmax);
1491 fhPtNoIso->SetYTitle("#it{counts}");
1492 fhPtNoIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1493 outputContainer->Add(fhPtNoIso) ;
1495 fhEtaPhiNoIso = new TH2F("hEtaPhiNoIso",
1496 Form("Number of not isolated leading particles #eta vs #phi, %s",parTitle.Data()),
1497 netabins,etamin,etamax,nphibins,phimin,phimax);
1498 fhEtaPhiNoIso->SetXTitle("#eta");
1499 fhEtaPhiNoIso->SetYTitle("#phi");
1500 outputContainer->Add(fhEtaPhiNoIso) ;
1504 // For histograms in arrays, index in the array, corresponding to any particle origin
1506 for(Int_t imc = 0; imc < 9; imc++)
1509 fhPtNoIsoMC[imc] = new TH1F(Form("hPtNoIsoMC%s",mcPartName[imc].Data()),
1510 Form("#it{p}_{T} of NOT isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
1511 nptbins,ptmin,ptmax);
1512 fhPtNoIsoMC[imc]->SetYTitle("#it{counts}");
1513 fhPtNoIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1514 outputContainer->Add(fhPtNoIsoMC[imc]) ;
1516 fhPtIsoMC[imc] = new TH1F(Form("hPtMC%s",mcPartName[imc].Data()),
1517 Form("#it{p}_{T} of isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
1518 nptbins,ptmin,ptmax);
1519 fhPtIsoMC[imc]->SetYTitle("#it{counts}");
1520 fhPtIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1521 outputContainer->Add(fhPtIsoMC[imc]) ;
1523 fhPhiIsoMC[imc] = new TH2F(Form("hPhiMC%s",mcPartName[imc].Data()),
1524 Form("#phi vs #it{p}_{T} of isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
1525 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
1526 fhPhiIsoMC[imc]->SetYTitle("#phi");
1527 fhPhiIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1528 outputContainer->Add(fhPhiIsoMC[imc]) ;
1530 fhEtaIsoMC[imc] = new TH2F(Form("hEtaMC%s",mcPartName[imc].Data()),
1531 Form("#phi vs #it{p}_{T} of isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
1532 nptbins,ptmin,ptmax,netabins,etamin,etamax);
1533 fhEtaIsoMC[imc]->SetYTitle("#eta");
1534 fhEtaIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1535 outputContainer->Add(fhEtaIsoMC[imc]) ;
1539 // Histograms for tagged candidates as decay
1540 if(fFillTaggedDecayHistograms)
1542 for(Int_t ibit = 0; ibit < fNDecayBits; ibit++)
1544 fhPtDecayNoIso[ibit] =
1545 new TH1F(Form("hPtDecayNoIso_bit%d",fDecayBits[ibit]),
1546 Form("Number of not isolated leading pi0 decay particles vs #it{p}_{T}, bit %d, %s",fDecayBits[ibit],parTitle.Data()),
1547 nptbins,ptmin,ptmax);
1548 fhPtDecayNoIso[ibit]->SetYTitle("#it{counts}");
1549 fhPtDecayNoIso[ibit]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1550 outputContainer->Add(fhPtDecayNoIso[ibit]) ;
1552 fhEtaPhiDecayNoIso[ibit] =
1553 new TH2F(Form("hEtaPhiDecayNoIso_bit%d",fDecayBits[ibit]),
1554 Form("Number of not isolated leading Pi0 decay particles #eta vs #phi, bit %d, %s",fDecayBits[ibit],parTitle.Data()),
1555 netabins,etamin,etamax,nphibins,phimin,phimax);
1556 fhEtaPhiDecayNoIso[ibit]->SetXTitle("#eta");
1557 fhEtaPhiDecayNoIso[ibit]->SetYTitle("#phi");
1558 outputContainer->Add(fhEtaPhiDecayNoIso[ibit]) ;
1562 fhPtDecayIso[ibit] =
1563 new TH1F(Form("hPtDecayIso_bit%d",fDecayBits[ibit]),
1564 Form("Number of isolated #pi^{0} decay particles vs #it{p}_{T}, bit %d, %s",fDecayBits[ibit],parTitle.Data()),
1565 nptbins,ptmin,ptmax);
1566 fhPtDecayIso[ibit]->SetYTitle("#it{counts}");
1567 fhPtDecayIso[ibit]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1568 outputContainer->Add(fhPtDecayIso[ibit]) ;
1570 fhEtaPhiDecayIso[ibit] =
1571 new TH2F(Form("hEtaPhiDecayIso_bit%d",fDecayBits[ibit]),
1572 Form("Number of isolated Pi0 decay particles #eta vs #phi, bit %d, %s",fDecayBits[ibit],parTitle.Data()),
1573 netabins,etamin,etamax,nphibins,phimin,phimax);
1574 fhEtaPhiDecayIso[ibit]->SetXTitle("#eta");
1575 fhEtaPhiDecayIso[ibit]->SetYTitle("#phi");
1576 outputContainer->Add(fhEtaPhiDecayIso[ibit]) ;
1581 for(Int_t imc = 0; imc < 9; imc++)
1584 fhPtDecayNoIsoMC[ibit][imc] =
1585 new TH1F(Form("hPtDecayNoIso_bit%d_MC%s",fDecayBits[ibit],mcPartName[imc].Data()),
1586 Form("#it{p}_{T} of NOT isolated, decay bit %d, %s, %s",fDecayBits[ibit],mcPartType[imc].Data(),parTitle.Data()),
1587 nptbins,ptmin,ptmax);
1588 fhPtDecayNoIsoMC[ibit][imc]->SetYTitle("#it{counts}");
1589 fhPtDecayNoIsoMC[ibit][imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1590 outputContainer->Add(fhPtDecayNoIsoMC[ibit][imc]) ;
1594 fhPtDecayIsoMC[ibit][imc] =
1595 new TH1F(Form("hPtDecay_bit%d_MC%s",fDecayBits[ibit],mcPartName[imc].Data()),
1596 Form("#it{p}_{T} of isolated %s, decay bit %d, %s",mcPartType[imc].Data(),fDecayBits[ibit],parTitle.Data()),
1597 nptbins,ptmin,ptmax);
1598 fhPtDecayIsoMC[ibit][imc]->SetYTitle("#it{counts}");
1599 fhPtDecayIsoMC[ibit][imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1600 outputContainer->Add(fhPtDecayIsoMC[ibit][imc]) ;
1602 }// MC particle loop
1609 TString isoName [] = {"NoIso",""};
1610 TString isoTitle[] = {"Not isolated" ,"isolated"};
1612 fhEIso = new TH1F("hE",
1613 Form("Number of isolated particles vs E, %s",parTitle.Data()),
1614 nptbins,ptmin,ptmax);
1615 fhEIso->SetYTitle("d#it{N} / d#it{E}");
1616 fhEIso->SetXTitle("#it{E} (GeV/#it{c})");
1617 outputContainer->Add(fhEIso) ;
1619 fhPtIso = new TH1F("hPt",
1620 Form("Number of isolated particles vs #it{p}_{T}, %s",parTitle.Data()),
1621 nptbins,ptmin,ptmax);
1622 fhPtIso->SetYTitle("d#it{N} / #it{p}_{T}");
1623 fhPtIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1624 outputContainer->Add(fhPtIso) ;
1626 fhPhiIso = new TH2F("hPhi",
1627 Form("Number of isolated particles vs #phi, %s",parTitle.Data()),
1628 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
1629 fhPhiIso->SetYTitle("#phi");
1630 fhPhiIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1631 outputContainer->Add(fhPhiIso) ;
1633 fhEtaIso = new TH2F("hEta",
1634 Form("Number of isolated particles vs #eta, %s",parTitle.Data()),
1635 nptbins,ptmin,ptmax,netabins,etamin,etamax);
1636 fhEtaIso->SetYTitle("#eta");
1637 fhEtaIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1638 outputContainer->Add(fhEtaIso) ;
1640 fhEtaPhiIso = new TH2F("hEtaPhiIso",
1641 Form("Number of isolated particles #eta vs #phi, %s",parTitle.Data()),
1642 netabins,etamin,etamax,nphibins,phimin,phimax);
1643 fhEtaPhiIso->SetXTitle("#eta");
1644 fhEtaPhiIso->SetYTitle("#phi");
1645 outputContainer->Add(fhEtaPhiIso) ;
1647 if(fFillHighMultHistograms)
1649 fhPtCentralityIso = new TH2F("hPtCentrality",
1650 Form("centrality vs #it{p}_{T} for isolated particles, %s",parTitle.Data()),
1651 nptbins,ptmin,ptmax, 100,0,100);
1652 fhPtCentralityIso->SetYTitle("centrality");
1653 fhPtCentralityIso->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1654 outputContainer->Add(fhPtCentralityIso) ;
1656 fhPtEventPlaneIso = new TH2F("hPtEventPlane",
1657 Form("event plane angle vs #it{p}_{T} for isolated particles, %s",parTitle.Data()),
1658 nptbins,ptmin,ptmax, 100,0,TMath::Pi());
1659 fhPtEventPlaneIso->SetYTitle("Event plane angle (rad)");
1660 fhPtEventPlaneIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1661 outputContainer->Add(fhPtEventPlaneIso) ;
1664 if(fFillNLMHistograms)
1666 fhPtNLocMaxIso = new TH2F("hPtNLocMax",
1667 Form("Number of isolated particles vs #it{p}_{T}, %s",parTitle.Data()),
1668 nptbins,ptmin,ptmax,10,0,10);
1669 fhPtNLocMaxIso->SetYTitle("#it{NLM}");
1670 fhPtNLocMaxIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1672 fhPtNLocMaxNoIso = new TH2F("hPtNLocMaxNoIso",
1673 Form("Number of not isolated particles vs #it{p}_{T}, %s",parTitle.Data()),
1674 nptbins,ptmin,ptmax,10,0,10);
1675 fhPtNLocMaxNoIso->SetYTitle("#it{NLM}");
1676 fhPtNLocMaxNoIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1677 outputContainer->Add(fhPtNLocMaxNoIso) ;
1680 fhConePtLead = new TH2F("hConePtLead",
1681 Form("Track or Cluster leading #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1682 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1683 fhConePtLead->SetYTitle("#it{p}_{T, leading} (GeV/#it{c})");
1684 fhConePtLead->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1685 outputContainer->Add(fhConePtLead) ;
1688 fhConeSumPt = new TH2F("hConePtSum",
1689 Form("Track and Cluster #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1690 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1691 fhConeSumPt->SetYTitle("#Sigma #it{p}_{T}");
1692 fhConeSumPt->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1693 outputContainer->Add(fhConeSumPt) ;
1695 fhConeSumPtTrigEtaPhi = new TH2F("hConePtSumTrigEtaPhi",
1696 Form("Trigger #eta vs #phi, #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1697 netabins,etamin,etamax,nphibins,phimin,phimax);
1698 fhConeSumPtTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1699 fhConeSumPtTrigEtaPhi->SetXTitle("#eta_{trigger}");
1700 fhConeSumPtTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1701 outputContainer->Add(fhConeSumPtTrigEtaPhi) ;
1703 fhPtInCone = new TH2F("hPtInCone",
1704 Form("#it{p}_{T} of clusters and tracks in isolation cone for #it{R} = %2.2f",r),
1705 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
1706 fhPtInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
1707 fhPtInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1708 outputContainer->Add(fhPtInCone) ;
1710 if(fFillBackgroundBinHistograms)
1712 fhPtLeadConeBinLambda0 = new TH2F*[fNBkgBin];
1713 fhSumPtConeBinLambda0 = new TH2F*[fNBkgBin];
1717 fhPtLeadConeBinLambda0MC = new TH2F*[fNBkgBin*9];
1718 fhSumPtConeBinLambda0MC = new TH2F*[fNBkgBin*9];
1721 for(Int_t ibin = 0; ibin < fNBkgBin; ibin++)
1723 fhPtLeadConeBinLambda0[ibin] = new TH2F
1724 (Form("hPtLeadConeLambda0_Bin%d",ibin),
1725 Form("#lambda_{0}, in cone %2.2f<#it{p}_{T}^{leading}<%2.2f (GeV/#it{c}), %s",
1726 fBkgBinLimit[ibin],fBkgBinLimit[ibin+1], parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1727 fhPtLeadConeBinLambda0[ibin]->SetYTitle("#lambda_{0}^{2}");
1728 fhPtLeadConeBinLambda0[ibin]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1729 outputContainer->Add(fhPtLeadConeBinLambda0[ibin]) ;
1731 fhSumPtConeBinLambda0[ibin] = new TH2F
1732 (Form("hSumPtConeLambda0_Bin%d",ibin),
1733 Form("#lambda_{0}, in cone %2.2f <#Sigma #it{p}_{T}< %2.2f (GeV/#it{c}), %s",
1734 fBkgBinLimit[ibin],fBkgBinLimit[ibin+1], parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1735 fhSumPtConeBinLambda0[ibin]->SetYTitle("#lambda_{0}^{2}");
1736 fhSumPtConeBinLambda0[ibin]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1737 outputContainer->Add(fhSumPtConeBinLambda0[ibin]) ;
1741 for(Int_t imc = 0; imc < 9; imc++)
1743 Int_t binmc = ibin+imc*fNBkgBin;
1744 fhPtLeadConeBinLambda0MC[binmc] = new TH2F
1745 (Form("hPtLeadConeLambda0_Bin%d_MC%s",ibin, mcPartName[imc].Data()),
1746 Form("#lambda_{0}, in cone %2.2f<#it{p}_{T}^{leading}<%2.2f (GeV/#it{c}), MC %s, %s",
1747 fBkgBinLimit[ibin],fBkgBinLimit[ibin+1], mcPartType[imc].Data(), parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1748 fhPtLeadConeBinLambda0MC[binmc]->SetYTitle("#lambda_{0}^{2}");
1749 fhPtLeadConeBinLambda0MC[binmc]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1750 outputContainer->Add(fhPtLeadConeBinLambda0MC[binmc]) ;
1752 fhSumPtConeBinLambda0MC[binmc] = new TH2F
1753 (Form("hSumPtConeLambda0_Bin%d_MC%s",ibin,mcPartName[imc].Data()),
1754 Form("#lambda_{0}, in cone %2.2f <#Sigma #it{p}_{T}< %2.2f (GeV/#it{c}), MC %s, %s",
1755 fBkgBinLimit[ibin],fBkgBinLimit[ibin+1], mcPartType[imc].Data(), parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1756 fhSumPtConeBinLambda0MC[binmc]->SetYTitle("#lambda_{0}^{2}");
1757 fhSumPtConeBinLambda0MC[binmc]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1758 outputContainer->Add(fhSumPtConeBinLambda0MC[binmc]) ;
1759 } // MC particle loop
1763 } // bkg cone pt bin histograms
1765 if(fFillHighMultHistograms)
1767 fhPtInConeCent = new TH2F("hPtInConeCent",
1768 Form("#it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1769 100,0,100,nptinconebins,ptinconemin,ptinconemax);
1770 fhPtInConeCent->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
1771 fhPtInConeCent->SetXTitle("centrality");
1772 outputContainer->Add(fhPtInConeCent) ;
1775 // Cluster only histograms
1776 if(GetIsolationCut()->GetParticleTypeInCone()!=AliIsolationCut::kOnlyCharged)
1778 fhConeSumPtCluster = new TH2F("hConePtSumCluster",
1779 Form("Cluster #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1780 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1781 fhConeSumPtCluster->SetYTitle("#Sigma #it{p}_{T}");
1782 fhConeSumPtCluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1783 outputContainer->Add(fhConeSumPtCluster) ;
1785 fhConePtLeadCluster = new TH2F("hConeLeadPtCluster",
1786 Form("Cluster leading in isolation cone for #it{R} = %2.2f",r),
1787 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1788 fhConePtLeadCluster->SetYTitle("#it{p}_{T, leading} (GeV/#it{c})");
1789 fhConePtLeadCluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1790 outputContainer->Add(fhConePtLeadCluster) ;
1793 if(fFillCellHistograms)
1795 fhConeSumPtCell = new TH2F("hConePtSumCell",
1796 Form("Cell #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1797 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1798 fhConeSumPtCell->SetYTitle("#Sigma #it{p}_{T}");
1799 fhConeSumPtCell->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1800 outputContainer->Add(fhConeSumPtCell) ;
1803 if(fFillUEBandSubtractHistograms)
1805 fhConeSumPtEtaBandUECluster = new TH2F("hConePtSumEtaBandUECluster",
1806 "#Sigma cluster #it{p}_{T} in UE Eta Band",
1807 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1808 fhConeSumPtEtaBandUECluster->SetYTitle("#Sigma #it{p}_{T}");
1809 fhConeSumPtEtaBandUECluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1810 outputContainer->Add(fhConeSumPtEtaBandUECluster) ;
1812 fhConeSumPtPhiBandUECluster = new TH2F("hConePtSumPhiBandUECluster",
1813 "#Sigma cluster #it{p}_{T} UE Phi Band",
1814 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1815 fhConeSumPtPhiBandUECluster->SetYTitle("#Sigma #it{p}_{T}");
1816 fhConeSumPtPhiBandUECluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1817 outputContainer->Add(fhConeSumPtPhiBandUECluster) ;
1819 fhConeSumPtEtaBandUEClusterTrigEtaPhi = new TH2F("hConePtSumEtaBandUEClusterTrigEtaPhi",
1820 "Trigger #eta vs #phi, #Sigma cluster #it{p}_{T} in UE Eta Band",
1821 netabins,etamin,etamax,nphibins,phimin,phimax);
1822 fhConeSumPtEtaBandUEClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1823 fhConeSumPtEtaBandUEClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
1824 fhConeSumPtEtaBandUEClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1825 outputContainer->Add(fhConeSumPtEtaBandUEClusterTrigEtaPhi) ;
1827 fhConeSumPtPhiBandUEClusterTrigEtaPhi = new TH2F("hConePtSumPhiBandUEClusterTrigEtaPhi",
1828 "Trigger #eta vs #phi, #Sigma cluster #it{p}_{T} UE Phi Band",
1829 netabins,etamin,etamax,nphibins,phimin,phimax);
1830 fhConeSumPtPhiBandUEClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1831 fhConeSumPtPhiBandUEClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
1832 fhConeSumPtPhiBandUEClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1833 outputContainer->Add(fhConeSumPtPhiBandUEClusterTrigEtaPhi) ;
1834 if(fFillCellHistograms)
1837 fhConeSumPtEtaBandUECell = new TH2F("hConePtSumEtaBandUECell",
1838 "#Sigma cell #it{p}_{T} in UE Eta Band",
1839 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1840 fhConeSumPtEtaBandUECell->SetYTitle("#Sigma #it{p}_{T}");
1841 fhConeSumPtEtaBandUECell->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1842 outputContainer->Add(fhConeSumPtEtaBandUECell) ;
1844 fhConeSumPtPhiBandUECell = new TH2F("hConePtSumPhiBandUECell",
1845 "#Sigma cell #it{p}_{T} UE Phi Band",
1846 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1847 fhConeSumPtPhiBandUECell->SetYTitle("#Sigma #it{p}_{T}");
1848 fhConeSumPtPhiBandUECell->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1849 outputContainer->Add(fhConeSumPtPhiBandUECell) ;
1851 fhConeSumPtEtaBandUECellTrigEtaPhi = new TH2F("hConePtSumEtaBandUECellTrigEtaPhi",
1852 "Trigger #eta vs #phi, #Sigma cell #it{p}_{T} in UE Eta Band",
1853 netabins,etamin,etamax,nphibins,phimin,phimax);
1854 fhConeSumPtEtaBandUECellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1855 fhConeSumPtEtaBandUECellTrigEtaPhi->SetXTitle("#eta_{trigger}");
1856 fhConeSumPtEtaBandUECellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1857 outputContainer->Add(fhConeSumPtEtaBandUECellTrigEtaPhi) ;
1859 fhConeSumPtPhiBandUECellTrigEtaPhi = new TH2F("hConePtSumPhiBandUECellTrigEtaPhi",
1860 "Trigger #eta vs #phi, #Sigma cell #it{p}_{T} UE Phi Band",
1861 netabins,etamin,etamax,nphibins,phimin,phimax);
1862 fhConeSumPtPhiBandUECellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1863 fhConeSumPtPhiBandUECellTrigEtaPhi->SetXTitle("#eta_{trigger}");
1864 fhConeSumPtPhiBandUECellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1865 outputContainer->Add(fhConeSumPtPhiBandUECellTrigEtaPhi) ;
1868 fhEtaBandCluster = new TH2F("hEtaBandCluster",
1869 Form("#eta vs #phi of clusters in #eta band isolation cone for #it{R} = %2.2f",r),
1870 netabins,-1,1,nphibins,0,TMath::TwoPi());
1871 fhEtaBandCluster->SetXTitle("#eta");
1872 fhEtaBandCluster->SetYTitle("#phi");
1873 outputContainer->Add(fhEtaBandCluster) ;
1875 fhPhiBandCluster = new TH2F("hPhiBandCluster",
1876 Form("#eta vs #phi of clusters in #phi band isolation cone for #it{R} = %2.2f",r),
1877 netabins,-1,1,nphibins,0,TMath::TwoPi());
1878 fhPhiBandCluster->SetXTitle("#eta");
1879 fhPhiBandCluster->SetYTitle("#phi");
1880 outputContainer->Add(fhPhiBandCluster) ;
1882 fhEtaPhiInConeCluster= new TH2F("hEtaPhiInConeCluster",
1883 Form("#eta vs #phi of clusters in cone for #it{R} = %2.2f",r),
1884 netabins,-1,1,nphibins,0,TMath::TwoPi());
1885 fhEtaPhiInConeCluster->SetXTitle("#eta");
1886 fhEtaPhiInConeCluster->SetYTitle("#phi");
1887 outputContainer->Add(fhEtaPhiInConeCluster) ;
1889 fhEtaPhiCluster= new TH2F("hEtaPhiCluster",
1890 Form("#eta vs #phi of all clusters"),
1891 netabins,-1,1,nphibins,0,TMath::TwoPi());
1892 fhEtaPhiCluster->SetXTitle("#eta");
1893 fhEtaPhiCluster->SetYTitle("#phi");
1894 outputContainer->Add(fhEtaPhiCluster) ;
1898 fhPtClusterInCone = new TH2F("hPtClusterInCone",
1899 Form("#it{p}_{T} of clusters in isolation cone for #it{R} = %2.2f",r),
1900 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
1901 fhPtClusterInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
1902 fhPtClusterInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1903 outputContainer->Add(fhPtClusterInCone) ;
1905 if(fFillCellHistograms)
1907 fhPtCellInCone = new TH2F("hPtCellInCone",
1908 Form("#it{p}_{T} of cells in isolation cone for #it{R} = %2.2f",r),
1909 nptbins,ptmin,ptmax,1000,0,50);
1910 fhPtCellInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
1911 fhPtCellInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1912 outputContainer->Add(fhPtCellInCone) ;
1914 fhEtaBandCell = new TH2F("hEtaBandCell",
1915 Form("#col vs #row of cells in #eta band isolation cone for #it{R} = %2.2f",r),
1917 fhEtaBandCell->SetXTitle("#col");
1918 fhEtaBandCell->SetYTitle("#row");
1919 outputContainer->Add(fhEtaBandCell) ;
1921 fhPhiBandCell = new TH2F("hPhiBandCell",
1922 Form("#col vs #row of cells in #phi band isolation cone for #it{R} = %2.2f",r),
1924 fhPhiBandCell->SetXTitle("#col");
1925 fhPhiBandCell->SetYTitle("#row");
1926 outputContainer->Add(fhPhiBandCell) ;
1929 if(fFillUEBandSubtractHistograms)
1931 fhConeSumPtEtaUESubCluster = new TH2F("hConeSumPtEtaUESubCluster",
1932 Form("Clusters #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
1933 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1934 fhConeSumPtEtaUESubCluster->SetYTitle("#Sigma #it{p}_{T}");
1935 fhConeSumPtEtaUESubCluster->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1936 outputContainer->Add(fhConeSumPtEtaUESubCluster) ;
1938 fhConeSumPtPhiUESubCluster = new TH2F("hConeSumPtPhiUESubCluster",
1939 Form("Clusters #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
1940 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1941 fhConeSumPtPhiUESubCluster->SetYTitle("#Sigma #it{p}_{T}");
1942 fhConeSumPtPhiUESubCluster->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1943 outputContainer->Add(fhConeSumPtPhiUESubCluster) ;
1945 fhConeSumPtEtaUESubClusterTrigEtaPhi = new TH2F("hConeSumPtEtaUESubClusterTrigEtaPhi",
1946 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),
1947 netabins,etamin,etamax,nphibins,phimin,phimax);
1948 fhConeSumPtEtaUESubClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1949 fhConeSumPtEtaUESubClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
1950 fhConeSumPtEtaUESubClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1951 outputContainer->Add(fhConeSumPtEtaUESubClusterTrigEtaPhi) ;
1953 fhConeSumPtPhiUESubClusterTrigEtaPhi = new TH2F("hConeSumPtPhiUESubClusterTrigEtaPhi",
1954 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),
1955 netabins,etamin,etamax,nphibins,phimin,phimax);
1956 fhConeSumPtPhiUESubClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1957 fhConeSumPtPhiUESubClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
1958 fhConeSumPtPhiUESubClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1959 outputContainer->Add(fhConeSumPtPhiUESubClusterTrigEtaPhi) ;
1961 if(fFillCellHistograms)
1963 fhConeSumPtEtaUESubCell = new TH2F("hConeSumPtEtaUESubCell",
1964 Form("Cells #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
1965 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1966 fhConeSumPtEtaUESubCell->SetYTitle("#Sigma #it{p}_{T}");
1967 fhConeSumPtEtaUESubCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1968 outputContainer->Add(fhConeSumPtEtaUESubCell) ;
1970 fhConeSumPtPhiUESubCell = new TH2F("hConeSumPtPhiUESubCell",
1971 Form("Cells #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
1972 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1973 fhConeSumPtPhiUESubCell->SetYTitle("#Sigma #it{p}_{T}");
1974 fhConeSumPtPhiUESubCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1975 outputContainer->Add(fhConeSumPtPhiUESubCell) ;
1977 fhConeSumPtEtaUESubCellTrigEtaPhi = new TH2F("hConeSumPtEtaUESubCellTrigEtaPhi",
1978 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),
1979 netabins,etamin,etamax,nphibins,phimin,phimax);
1980 fhConeSumPtEtaUESubCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1981 fhConeSumPtEtaUESubCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
1982 fhConeSumPtEtaUESubCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1983 outputContainer->Add(fhConeSumPtEtaUESubCellTrigEtaPhi) ;
1985 fhConeSumPtPhiUESubCellTrigEtaPhi = new TH2F("hConeSumPtPhiUESubCellTrigEtaPhi",
1986 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),
1987 netabins,etamin,etamax,nphibins,phimin,phimax);
1988 fhConeSumPtPhiUESubCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1989 fhConeSumPtPhiUESubCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
1990 fhConeSumPtPhiUESubCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1991 outputContainer->Add(fhConeSumPtPhiUESubCellTrigEtaPhi) ;
1994 fhFractionClusterOutConeEta = new TH2F("hFractionClusterOutConeEta",
1995 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #eta acceptance",r),
1996 nptbins,ptmin,ptmax,100,0,1);
1997 fhFractionClusterOutConeEta->SetYTitle("#it{fraction}");
1998 fhFractionClusterOutConeEta->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
1999 outputContainer->Add(fhFractionClusterOutConeEta) ;
2001 fhFractionClusterOutConeEtaTrigEtaPhi = new TH2F("hFractionClusterOutConeEtaTrigEtaPhi",
2002 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #eta acceptance, in trigger #eta-#phi ",r),
2003 netabins,etamin,etamax,nphibins,phimin,phimax);
2004 fhFractionClusterOutConeEtaTrigEtaPhi->SetZTitle("#it{fraction}");
2005 fhFractionClusterOutConeEtaTrigEtaPhi->SetXTitle("#eta_{trigger}");
2006 fhFractionClusterOutConeEtaTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2007 outputContainer->Add(fhFractionClusterOutConeEtaTrigEtaPhi) ;
2009 fhFractionClusterOutConePhi = new TH2F("hFractionClusterOutConePhi",
2010 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #phi acceptance",r),
2011 nptbins,ptmin,ptmax,100,0,1);
2012 fhFractionClusterOutConePhi->SetYTitle("#it{fraction}");
2013 fhFractionClusterOutConePhi->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
2014 outputContainer->Add(fhFractionClusterOutConePhi) ;
2016 fhFractionClusterOutConePhiTrigEtaPhi = new TH2F("hFractionClusterOutConePhiTrigEtaPhi",
2017 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #phi acceptance, in trigger #eta-#phi ",r),
2018 netabins,etamin,etamax,nphibins,phimin,phimax);
2019 fhFractionClusterOutConePhiTrigEtaPhi->SetZTitle("#it{fraction}");
2020 fhFractionClusterOutConePhiTrigEtaPhi->SetXTitle("#eta_{trigger}");
2021 fhFractionClusterOutConePhiTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2022 outputContainer->Add(fhFractionClusterOutConePhiTrigEtaPhi) ;
2024 fhConeSumPtSubvsConeSumPtTotPhiCluster = new TH2F("hConeSumPtSubvsConeSumPtTotPhiCluster",
2025 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),
2026 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2027 fhConeSumPtSubvsConeSumPtTotPhiCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2028 fhConeSumPtSubvsConeSumPtTotPhiCluster->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
2029 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotPhiCluster);
2031 fhConeSumPtSubNormvsConeSumPtTotPhiCluster = new TH2F("hConeSumPtSubNormvsConeSumPtTotPhiCluster",
2032 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),
2033 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2034 fhConeSumPtSubNormvsConeSumPtTotPhiCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2035 fhConeSumPtSubNormvsConeSumPtTotPhiCluster->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2036 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotPhiCluster);
2038 fhConeSumPtSubvsConeSumPtTotEtaCluster = new TH2F("hConeSumPtSubvsConeSumPtTotEtaCluster",
2039 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),
2040 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2041 fhConeSumPtSubvsConeSumPtTotEtaCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2042 fhConeSumPtSubvsConeSumPtTotEtaCluster->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
2043 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotEtaCluster);
2045 fhConeSumPtSubNormvsConeSumPtTotEtaCluster = new TH2F("hConeSumPtSubNormvsConeSumPtTotEtaCluster",
2046 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),
2047 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2048 fhConeSumPtSubNormvsConeSumPtTotEtaCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2049 fhConeSumPtSubNormvsConeSumPtTotEtaCluster->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2050 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotEtaCluster);
2052 fhConeSumPtVSUEClusterEtaBand = new TH2F("hConeSumPtVSUEClusterEtaBand",
2053 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in eta band for cluster (before normalization), R=%2.2f",r),
2054 nptsumbins,ptsummin,ptsummax,2*nptsumbins,ptsummin,2*ptsummax);
2055 fhConeSumPtVSUEClusterEtaBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
2056 fhConeSumPtVSUEClusterEtaBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
2057 outputContainer->Add(fhConeSumPtVSUEClusterEtaBand);
2059 fhConeSumPtVSUEClusterPhiBand = new TH2F("hConeSumPtVSUEClusterPhiBand",
2060 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in phi band for cluster (before normalization), R=%2.2f",r),
2061 nptsumbins,ptsummin,ptsummax,8*nptsumbins,ptsummin,8*ptsummax);
2062 fhConeSumPtVSUEClusterPhiBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
2063 fhConeSumPtVSUEClusterPhiBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
2064 outputContainer->Add(fhConeSumPtVSUEClusterPhiBand);
2066 if(fFillCellHistograms)
2068 fhFractionCellOutConeEta = new TH2F("hFractionCellOutConeEta",
2069 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #eta acceptance",r),
2070 nptbins,ptmin,ptmax,100,0,1);
2071 fhFractionCellOutConeEta->SetYTitle("#it{fraction}");
2072 fhFractionCellOutConeEta->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
2073 outputContainer->Add(fhFractionCellOutConeEta) ;
2075 fhFractionCellOutConeEtaTrigEtaPhi = new TH2F("hFractionCellOutConeEtaTrigEtaPhi",
2076 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #eta acceptance, in trigger #eta-#phi ",r),
2077 netabins,etamin,etamax,nphibins,phimin,phimax);
2078 fhFractionCellOutConeEtaTrigEtaPhi->SetZTitle("#it{fraction}");
2079 fhFractionCellOutConeEtaTrigEtaPhi->SetXTitle("#eta_{trigger}");
2080 fhFractionCellOutConeEtaTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2081 outputContainer->Add(fhFractionCellOutConeEtaTrigEtaPhi) ;
2083 fhFractionCellOutConePhi = new TH2F("hFractionCellOutConePhi",
2084 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #phi acceptance",r),
2085 nptbins,ptmin,ptmax,100,0,1);
2086 fhFractionCellOutConePhi->SetYTitle("#it{fraction}");
2087 fhFractionCellOutConePhi->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
2088 outputContainer->Add(fhFractionCellOutConePhi) ;
2090 fhFractionCellOutConePhiTrigEtaPhi = new TH2F("hFractionCellOutConePhiTrigEtaPhi",
2091 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #phi acceptance, in trigger #eta-#phi ",r),
2092 netabins,etamin,etamax,nphibins,phimin,phimax);
2093 fhFractionCellOutConePhiTrigEtaPhi->SetZTitle("#it{fraction}");
2094 fhFractionCellOutConePhiTrigEtaPhi->SetXTitle("#eta_{trigger}");
2095 fhFractionCellOutConePhiTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2096 outputContainer->Add(fhFractionCellOutConePhiTrigEtaPhi) ;
2099 fhConeSumPtSubvsConeSumPtTotPhiCell = new TH2F("hConeSumPtSubvsConeSumPtTotPhiCell",
2100 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),
2101 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2102 fhConeSumPtSubvsConeSumPtTotPhiCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2103 fhConeSumPtSubvsConeSumPtTotPhiCell->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
2104 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotPhiCell);
2106 fhConeSumPtSubNormvsConeSumPtTotPhiCell = new TH2F("hConeSumPtSubNormvsConeSumPtTotPhiCell",
2107 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),
2108 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2109 fhConeSumPtSubNormvsConeSumPtTotPhiCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2110 fhConeSumPtSubNormvsConeSumPtTotPhiCell->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2111 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotPhiCell);
2113 fhConeSumPtSubvsConeSumPtTotEtaCell = new TH2F("hConeSumPtSubvsConeSumPtTotEtaCell",
2114 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),
2115 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2116 fhConeSumPtSubvsConeSumPtTotEtaCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2117 fhConeSumPtSubvsConeSumPtTotEtaCell->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
2118 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotEtaCell);
2120 fhConeSumPtSubNormvsConeSumPtTotEtaCell = new TH2F("hConeSumPtSubNormvsConeSumPtTotEtaCell",
2121 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),
2122 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2123 fhConeSumPtSubNormvsConeSumPtTotEtaCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2124 fhConeSumPtSubNormvsConeSumPtTotEtaCell->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2125 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotEtaCell);
2130 // Track only histograms
2131 if(GetIsolationCut()->GetParticleTypeInCone()!=AliIsolationCut::kOnlyNeutral)
2133 fhConeSumPtTrack = new TH2F("hConePtSumTrack",
2134 Form("Track #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2135 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2136 fhConeSumPtTrack->SetYTitle("#Sigma #it{p}_{T}");
2137 fhConeSumPtTrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2138 outputContainer->Add(fhConeSumPtTrack) ;
2140 fhConePtLeadTrack = new TH2F("hConeLeadPtTrack",
2141 Form("Track leading in isolation cone for #it{R} = %2.2f",r),
2142 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2143 fhConePtLeadTrack->SetYTitle("#it{p}_{T, leading} (GeV/#it{c})");
2144 fhConePtLeadTrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2145 outputContainer->Add(fhConePtLeadTrack) ;
2147 fhPtTrackInCone = new TH2F("hPtTrackInCone",
2148 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f",r),
2149 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2150 fhPtTrackInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2151 fhPtTrackInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2152 outputContainer->Add(fhPtTrackInCone) ;
2155 if(fFillUEBandSubtractHistograms)
2157 fhConeSumPtEtaBandUETrack = new TH2F("hConePtSumEtaBandUETrack",
2158 "#Sigma track #it{p}_{T} in UE Eta Band",
2159 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2160 fhConeSumPtEtaBandUETrack->SetYTitle("#Sigma #it{p}_{T}");
2161 fhConeSumPtEtaBandUETrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2162 outputContainer->Add(fhConeSumPtEtaBandUETrack) ;
2164 fhConeSumPtPhiBandUETrack = new TH2F("hConePtSumPhiBandUETrack",
2165 "#Sigma track #it{p}_{T} in UE Phi Band",
2166 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax*8);
2167 fhConeSumPtPhiBandUETrack->SetYTitle("#Sigma #it{p}_{T}");
2168 fhConeSumPtPhiBandUETrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2169 outputContainer->Add(fhConeSumPtPhiBandUETrack) ;
2172 fhConeSumPtEtaBandUETrackTrigEtaPhi = new TH2F("hConePtSumEtaBandUETrackTrigEtaPhi",
2173 "Trigger #eta vs #phi, #Sigma track #it{p}_{T} in UE Eta Band",
2174 netabins,etamin,etamax,nphibins,phimin,phimax);
2175 fhConeSumPtEtaBandUETrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2176 fhConeSumPtEtaBandUETrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2177 fhConeSumPtEtaBandUETrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2178 outputContainer->Add(fhConeSumPtEtaBandUETrackTrigEtaPhi) ;
2180 fhConeSumPtPhiBandUETrackTrigEtaPhi = new TH2F("hConePtSumPhiBandUETrackTrigEtaPhi",
2181 "Trigger #eta vs #phi, #Sigma track #it{p}_{T} in UE Phi Band",
2182 netabins,etamin,etamax,nphibins,phimin,phimax);
2183 fhConeSumPtPhiBandUETrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2184 fhConeSumPtPhiBandUETrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2185 fhConeSumPtPhiBandUETrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2186 outputContainer->Add(fhConeSumPtPhiBandUETrackTrigEtaPhi) ;
2188 fhEtaBandTrack = new TH2F("hEtaBandTrack",
2189 Form("#eta vs #phi of tracks in #eta band isolation cone for #it{R} = %2.2f",r),
2190 netabins,-1,1,nphibins,0,TMath::TwoPi());
2191 fhEtaBandTrack->SetXTitle("#eta");
2192 fhEtaBandTrack->SetYTitle("#phi");
2193 outputContainer->Add(fhEtaBandTrack) ;
2195 fhPhiBandTrack = new TH2F("hPhiBandTrack",
2196 Form("#eta vs #phi of tracks in #phi band isolation cone for #it{R} = %2.2f",r),
2197 netabins,-1,1,nphibins,0,TMath::TwoPi());
2198 fhPhiBandTrack->SetXTitle("#eta");
2199 fhPhiBandTrack->SetYTitle("#phi");
2200 outputContainer->Add(fhPhiBandTrack) ;
2202 fhConeSumPtEtaUESubTrack = new TH2F("hConeSumPtEtaUESubTrack",
2203 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
2204 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2205 fhConeSumPtEtaUESubTrack->SetYTitle("#Sigma #it{p}_{T}");
2206 fhConeSumPtEtaUESubTrack->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2207 outputContainer->Add(fhConeSumPtEtaUESubTrack) ;
2209 fhConeSumPtPhiUESubTrack = new TH2F("hConeSumPtPhiUESubTrack",
2210 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
2211 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2212 fhConeSumPtPhiUESubTrack->SetYTitle("#Sigma #it{p}_{T}");
2213 fhConeSumPtPhiUESubTrack->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2214 outputContainer->Add(fhConeSumPtPhiUESubTrack) ;
2216 fhConeSumPtEtaUESubTrackTrigEtaPhi = new TH2F("hConeSumPtEtaUESubTrackTrigEtaPhi",
2217 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),
2218 netabins,etamin,etamax,nphibins,phimin,phimax);
2219 fhConeSumPtEtaUESubTrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2220 fhConeSumPtEtaUESubTrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2221 fhConeSumPtEtaUESubTrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2222 outputContainer->Add(fhConeSumPtEtaUESubTrackTrigEtaPhi) ;
2224 fhConeSumPtPhiUESubTrackTrigEtaPhi = new TH2F("hConeSumPtPhiUESubTrackTrigEtaPhi",
2225 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),
2226 netabins,etamin,etamax,nphibins,phimin,phimax);
2227 fhConeSumPtPhiUESubTrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2228 fhConeSumPtPhiUESubTrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2229 fhConeSumPtPhiUESubTrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2230 outputContainer->Add(fhConeSumPtPhiUESubTrackTrigEtaPhi) ;
2232 fhFractionTrackOutConeEta = new TH2F("hFractionTrackOutConeEta",
2233 Form("Fraction of the isolation cone #it{R} = %2.2f, out of tracks #eta acceptance",r),
2234 nptbins,ptmin,ptmax,100,0,1);
2235 fhFractionTrackOutConeEta->SetYTitle("#it{fraction}");
2236 fhFractionTrackOutConeEta->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
2237 outputContainer->Add(fhFractionTrackOutConeEta) ;
2239 fhFractionTrackOutConeEtaTrigEtaPhi = new TH2F("hFractionTrackOutConeEtaTrigEtaPhi",
2240 Form("Fraction of the isolation cone #it{R} = %2.2f, out of tracks #eta acceptance, in trigger #eta-#phi ",r),
2241 netabins,etamin,etamax,nphibins,phimin,phimax);
2242 fhFractionTrackOutConeEtaTrigEtaPhi->SetZTitle("#it{fraction}");
2243 fhFractionTrackOutConeEtaTrigEtaPhi->SetXTitle("#eta_{trigger}");
2244 fhFractionTrackOutConeEtaTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2245 outputContainer->Add(fhFractionTrackOutConeEtaTrigEtaPhi) ;
2247 fhConeSumPtSubvsConeSumPtTotPhiTrack = new TH2F("hConeSumPtSubvsConeSumPtTotPhiTrack",
2248 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),
2249 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2250 fhConeSumPtSubvsConeSumPtTotPhiTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2251 fhConeSumPtSubvsConeSumPtTotPhiTrack->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
2252 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotPhiTrack);
2254 fhConeSumPtSubNormvsConeSumPtTotPhiTrack = new TH2F("hConeSumPtSubNormvsConeSumPtTotPhiTrack",
2255 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),
2256 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2257 fhConeSumPtSubNormvsConeSumPtTotPhiTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2258 fhConeSumPtSubNormvsConeSumPtTotPhiTrack->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2259 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotPhiTrack);
2261 fhConeSumPtSubvsConeSumPtTotEtaTrack = new TH2F("hConeSumPtSubvsConeSumPtTotEtaTrack",
2262 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),
2263 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2264 fhConeSumPtSubvsConeSumPtTotEtaTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2265 fhConeSumPtSubvsConeSumPtTotEtaTrack->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
2266 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotEtaTrack);
2268 fhConeSumPtSubNormvsConeSumPtTotEtaTrack = new TH2F("hConeSumPtSubNormvsConeSumPtTotEtaTrack",
2269 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),
2270 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2271 fhConeSumPtSubNormvsConeSumPtTotEtaTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2272 fhConeSumPtSubNormvsConeSumPtTotEtaTrack->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2273 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotEtaTrack);
2276 // UE in perpendicular cone
2277 fhPerpConeSumPt = new TH2F("hPerpConePtSum",
2278 Form("#Sigma #it{p}_{T} in isolation cone at #pm 45 degree phi from trigger particle, #it{R} = %2.2f",r),
2279 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2280 fhPerpConeSumPt->SetYTitle("#Sigma #it{p}_{T}");
2281 fhPerpConeSumPt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2282 outputContainer->Add(fhPerpConeSumPt) ;
2284 fhPtInPerpCone = new TH2F("hPtInPerpCone",
2285 Form("#it{p}_{T} in isolation cone at #pm 45 degree phi from trigger particle, #it{R} = %2.2f",r),
2286 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2287 fhPtInPerpCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2288 fhPtInPerpCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2289 outputContainer->Add(fhPtInPerpCone) ;
2291 fhEtaPhiTrack= new TH2F("hEtaPhiTrack",
2292 Form("#eta vs #phi of all Tracks"),
2293 netabins,-1,1,nphibins,0,TMath::TwoPi());
2294 fhEtaPhiTrack->SetXTitle("#eta");
2295 fhEtaPhiTrack->SetYTitle("#phi");
2296 outputContainer->Add(fhEtaPhiTrack) ;
2298 fhEtaPhiInConeTrack= new TH2F("hEtaPhiInConeTrack",
2299 Form("#eta vs #phi of Tracks in cone for #it{R} = %2.2f",r),
2300 netabins,-1,1,nphibins,0,TMath::TwoPi());
2301 fhEtaPhiInConeTrack->SetXTitle("#eta");
2302 fhEtaPhiInConeTrack->SetYTitle("#phi");
2303 outputContainer->Add(fhEtaPhiInConeTrack) ;
2305 fhConeSumPtVSUETracksEtaBand = new TH2F("hConeSumPtVSUETracksEtaBand",
2306 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in eta band for tracks (before normalization), R=%2.2f",r),
2307 nptsumbins,ptsummin,ptsummax,2*nptsumbins,ptsummin,2*ptsummax);
2308 fhConeSumPtVSUETracksEtaBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
2309 fhConeSumPtVSUETracksEtaBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
2310 outputContainer->Add(fhConeSumPtVSUETracksEtaBand);
2312 fhConeSumPtVSUETracksPhiBand = new TH2F("hConeSumPtVSUETracksPhiBand",
2313 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in phi band for tracks (before normalization), R=%2.2f",r),
2314 nptsumbins,ptsummin,ptsummax,8*nptsumbins,ptsummin,8*ptsummax);
2315 fhConeSumPtVSUETracksPhiBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
2316 fhConeSumPtVSUETracksPhiBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
2317 outputContainer->Add(fhConeSumPtVSUETracksPhiBand);
2321 if(GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kNeutralAndCharged )
2323 fhConeSumPtClustervsTrack = new TH2F("hConePtSumClustervsTrack",
2324 Form("Track vs Cluster #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2325 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2326 fhConeSumPtClustervsTrack->SetXTitle("#Sigma #it{p}_{T}^{cluster} (GeV/#it{c})");
2327 fhConeSumPtClustervsTrack->SetYTitle("#Sigma #it{p}_{T}^{track} (GeV/#it{c})");
2328 outputContainer->Add(fhConeSumPtClustervsTrack) ;
2330 fhConeSumPtClusterTrackFrac = new TH2F("hConePtSumClusterTrackFraction",
2331 Form("#Sigma #it{p}_{T}^{cluster}/#Sigma #it{p}_{T}^{track} in isolation cone for #it{R} = %2.2f",r),
2332 nptbins,ptmin,ptmax,200,0,4);
2333 fhConeSumPtClusterTrackFrac->SetYTitle("#Sigma #it{p}^{cluster}_{T} /#Sigma #it{p}_{T}^{track}");
2334 fhConeSumPtClusterTrackFrac->SetXTitle("#it{p}^{trigger}_{T} (GeV/#it{c})");
2335 outputContainer->Add(fhConeSumPtClusterTrackFrac) ;
2338 fhConePtLeadClustervsTrack = new TH2F("hConePtLeadClustervsTrack",
2339 Form("Track vs Cluster lead #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2340 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
2341 fhConePtLeadClustervsTrack->SetXTitle("#it{p}^{leading cluster}_{T} (GeV/#it{c})");
2342 fhConePtLeadClustervsTrack->SetYTitle("#it{p}^{leading track}_{T} (GeV/#it{c})");
2343 outputContainer->Add(fhConePtLeadClustervsTrack) ;
2345 fhConePtLeadClusterTrackFrac = new TH2F("hConePtLeadClusterTrackFraction",
2346 Form(" #it{p}^{leading cluster}_{T}/#it{p}^{leading track}_{T} in isolation cone for #it{R} = %2.2f",r),
2347 nptbins,ptmin,ptmax,200,0,4);
2348 fhConePtLeadClusterTrackFrac->SetYTitle("#it{p}^{leading cluster}_{T}/ #it{p}^{leading track}_{T}");
2349 fhConePtLeadClusterTrackFrac->SetXTitle("#it{p}^{trigger}_{T} (GeV/#it{c})");
2350 outputContainer->Add(fhConePtLeadClusterTrackFrac) ;
2353 if(fFillCellHistograms)
2355 fhConeSumPtCellvsTrack = new TH2F("hConePtSumCellvsTrack",
2356 Form("Track vs cell #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2357 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2358 fhConeSumPtCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2359 fhConeSumPtCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2360 outputContainer->Add(fhConeSumPtCellvsTrack) ;
2362 fhConeSumPtCellTrack = new TH2F("hConePtSumCellTrack",
2363 Form("Track and Cell #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2364 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2365 fhConeSumPtCellTrack->SetYTitle("#Sigma #it{p}_{T}");
2366 fhConeSumPtCellTrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2367 outputContainer->Add(fhConeSumPtCellTrack) ;
2369 fhConeSumPtCellTrackTrigEtaPhi = new TH2F("hConePtSumCellTrackTrigEtaPhi",
2370 Form("Trigger #eta vs #phi, #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2371 netabins,etamin,etamax,nphibins,phimin,phimax);
2372 fhConeSumPtCellTrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2373 fhConeSumPtCellTrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2374 fhConeSumPtCellTrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2375 outputContainer->Add(fhConeSumPtCellTrackTrigEtaPhi) ;
2379 if(fFillUEBandSubtractHistograms)
2381 fhConeSumPtEtaUESub = new TH2F("hConeSumPtEtaUESub",
2382 Form("#Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
2383 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2384 fhConeSumPtEtaUESub->SetYTitle("#Sigma #it{p}_{T}");
2385 fhConeSumPtEtaUESub->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2386 outputContainer->Add(fhConeSumPtEtaUESub) ;
2388 fhConeSumPtPhiUESub = new TH2F("hConeSumPtPhiUESub",
2389 Form("#Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
2390 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2391 fhConeSumPtPhiUESub->SetYTitle("#Sigma #it{p}_{T}");
2392 fhConeSumPtPhiUESub->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2393 outputContainer->Add(fhConeSumPtPhiUESub) ;
2395 fhConeSumPtEtaUESubTrigEtaPhi = new TH2F("hConeSumPtEtaUESubTrigEtaPhi",
2396 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),
2397 netabins,etamin,etamax,nphibins,phimin,phimax);
2398 fhConeSumPtEtaUESubTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2399 fhConeSumPtEtaUESubTrigEtaPhi->SetXTitle("#eta_{trigger}");
2400 fhConeSumPtEtaUESubTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2401 outputContainer->Add(fhConeSumPtEtaUESubTrigEtaPhi) ;
2403 fhConeSumPtPhiUESubTrigEtaPhi = new TH2F("hConeSumPtPhiUESubTrigEtaPhi",
2404 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),
2405 netabins,etamin,etamax,nphibins,phimin,phimax);
2406 fhConeSumPtPhiUESubTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2407 fhConeSumPtPhiUESubTrigEtaPhi->SetXTitle("#eta_{trigger}");
2408 fhConeSumPtPhiUESubTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2409 outputContainer->Add(fhConeSumPtPhiUESubTrigEtaPhi) ;
2411 fhConeSumPtEtaUESubClustervsTrack = new TH2F("hConePtSumEtaUESubClustervsTrack",
2412 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub eta band in isolation cone for #it{R} = %2.2f",r),
2413 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2414 fhConeSumPtEtaUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2415 fhConeSumPtEtaUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2416 outputContainer->Add(fhConeSumPtEtaUESubClustervsTrack) ;
2418 fhConeSumPtPhiUESubClustervsTrack = new TH2F("hConePhiUESubPtSumClustervsTrack",
2419 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub phi band in isolation cone for #it{R} = %2.2f",r),
2420 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2421 fhConeSumPtPhiUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2422 fhConeSumPtPhiUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2423 outputContainer->Add(fhConeSumPtPhiUESubClustervsTrack) ;
2425 fhEtaBandClustervsTrack = new TH2F("hEtaBandClustervsTrack",
2426 Form("Track vs Cluster #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2427 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2428 fhEtaBandClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2429 fhEtaBandClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2430 outputContainer->Add(fhEtaBandClustervsTrack) ;
2432 fhPhiBandClustervsTrack = new TH2F("hPhiBandClustervsTrack",
2433 Form("Track vs Cluster #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2434 nptsumbins,ptsummin,ptsummax*4,nptsumbins,ptsummin,ptsummax*8);
2435 fhPhiBandClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2436 fhPhiBandClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2437 outputContainer->Add(fhPhiBandClustervsTrack) ;
2439 fhEtaBandNormClustervsTrack = new TH2F("hEtaBandNormClustervsTrack",
2440 Form("Track vs Cluster #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2441 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2442 fhEtaBandNormClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2443 fhEtaBandNormClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2444 outputContainer->Add(fhEtaBandNormClustervsTrack) ;
2446 fhPhiBandNormClustervsTrack = new TH2F("hPhiBandNormClustervsTrack",
2447 Form("Track vs Cluster #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2448 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2449 fhPhiBandNormClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2450 fhPhiBandNormClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2451 outputContainer->Add(fhPhiBandNormClustervsTrack) ;
2453 fhConeSumPtEtaUESubClustervsTrack = new TH2F("hConePtSumEtaUESubClustervsTrack",
2454 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub eta band in isolation cone for #it{R} = %2.2f",r),
2455 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2456 fhConeSumPtEtaUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2457 fhConeSumPtEtaUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2458 outputContainer->Add(fhConeSumPtEtaUESubClustervsTrack) ;
2460 fhConeSumPtPhiUESubClustervsTrack = new TH2F("hConePhiUESubPtSumClustervsTrack",
2461 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub phi band in isolation cone for #it{R} = %2.2f",r),
2462 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2463 fhConeSumPtPhiUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2464 fhConeSumPtPhiUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2465 outputContainer->Add(fhConeSumPtPhiUESubClustervsTrack) ;
2467 if(fFillCellHistograms)
2470 fhConeSumPtEtaUESubCellvsTrack = new TH2F("hConePtSumEtaUESubCellvsTrack",
2471 Form("Track vs Cell #Sigma #it{p}_{T} UE sub eta band in isolation cone for #it{R} = %2.2f",r),
2472 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2473 fhConeSumPtEtaUESubCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2474 fhConeSumPtEtaUESubCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2475 outputContainer->Add(fhConeSumPtEtaUESubCellvsTrack) ;
2477 fhConeSumPtPhiUESubCellvsTrack = new TH2F("hConePhiUESubPtSumCellvsTrack",
2478 Form("Track vs Cell #Sigma #it{p}_{T} UE sub phi band in isolation cone for #it{R} = %2.2f",r),
2479 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2480 fhConeSumPtPhiUESubCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2481 fhConeSumPtPhiUESubCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2482 outputContainer->Add(fhConeSumPtPhiUESubCellvsTrack) ;
2484 fhEtaBandCellvsTrack = new TH2F("hEtaBandCellvsTrack",
2485 Form("Track vs Cell #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2486 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2487 fhEtaBandCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2488 fhEtaBandCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2489 outputContainer->Add(fhEtaBandCellvsTrack) ;
2491 fhPhiBandCellvsTrack = new TH2F("hPhiBandCellvsTrack",
2492 Form("Track vs Cell #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2493 nptsumbins,ptsummin,ptsummax*4,nptsumbins,ptsummin,ptsummax*8);
2494 fhPhiBandCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2495 fhPhiBandCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2496 outputContainer->Add(fhPhiBandCellvsTrack) ;
2498 fhEtaBandNormCellvsTrack = new TH2F("hEtaBandNormCellvsTrack",
2499 Form("Track vs Cell #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2500 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2501 fhEtaBandNormCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2502 fhEtaBandNormCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2503 outputContainer->Add(fhEtaBandNormCellvsTrack) ;
2505 fhPhiBandNormCellvsTrack = new TH2F("hPhiBandNormCellvsTrack",
2506 Form("Track vs Cell #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2507 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2508 fhPhiBandNormCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2509 fhPhiBandNormCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2510 outputContainer->Add(fhPhiBandNormCellvsTrack) ;
2512 fhConeSumPtEtaUESubTrackCell = new TH2F("hConeSumPtEtaUESubTrackCell",
2513 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
2514 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2515 fhConeSumPtEtaUESubTrackCell->SetYTitle("#Sigma #it{p}_{T}");
2516 fhConeSumPtEtaUESubTrackCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2517 outputContainer->Add(fhConeSumPtEtaUESubTrackCell) ;
2519 fhConeSumPtPhiUESubTrackCell = new TH2F("hConeSumPtPhiUESubTrackCell",
2520 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
2521 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2522 fhConeSumPtPhiUESubTrackCell->SetYTitle("#Sigma #it{p}_{T}");
2523 fhConeSumPtPhiUESubTrackCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2524 outputContainer->Add(fhConeSumPtPhiUESubTrackCell) ;
2526 fhConeSumPtEtaUESubTrackCellTrigEtaPhi = new TH2F("hConeSumPtEtaUESubTrackCellTrigEtaPhi",
2527 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),
2528 netabins,etamin,etamax,nphibins,phimin,phimax);
2529 fhConeSumPtEtaUESubTrackCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2530 fhConeSumPtEtaUESubTrackCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
2531 fhConeSumPtEtaUESubTrackCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2532 outputContainer->Add(fhConeSumPtEtaUESubTrackCellTrigEtaPhi) ;
2534 fhConeSumPtPhiUESubTrackCellTrigEtaPhi = new TH2F("hConeSumPtPhiUESubTrackCellTrigEtaPhi",
2535 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),
2536 netabins,etamin,etamax,nphibins,phimin,phimax);
2537 fhConeSumPtPhiUESubTrackCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2538 fhConeSumPtPhiUESubTrackCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
2539 fhConeSumPtPhiUESubTrackCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2540 outputContainer->Add(fhConeSumPtPhiUESubTrackCellTrigEtaPhi) ;
2545 for(Int_t iso = 0; iso < 2; iso++)
2549 fhTrackMatchedDEta[iso] = new TH2F
2550 (Form("hTrackMatchedDEta%s",isoName[iso].Data()),
2551 Form("%s - d#eta of cluster-track vs cluster energy, %s",isoTitle[iso].Data(),parTitle.Data()),
2552 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
2553 fhTrackMatchedDEta[iso]->SetYTitle("d#eta");
2554 fhTrackMatchedDEta[iso]->SetXTitle("E_{cluster} (GeV)");
2556 fhTrackMatchedDPhi[iso] = new TH2F
2557 (Form("hTrackMatchedDPhi%s",isoName[iso].Data()),
2558 Form("%s - d#phi of cluster-track vs cluster energy, %s",isoTitle[iso].Data(),parTitle.Data()),
2559 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
2560 fhTrackMatchedDPhi[iso]->SetYTitle("d#phi (rad)");
2561 fhTrackMatchedDPhi[iso]->SetXTitle("E_{cluster} (GeV)");
2563 fhTrackMatchedDEtaDPhi[iso] = new TH2F
2564 (Form("hTrackMatchedDEtaDPhi%s",isoName[iso].Data()),
2565 Form("%s - d#eta vs d#phi of cluster-track, %s",isoTitle[iso].Data(),parTitle.Data()),
2566 nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax);
2567 fhTrackMatchedDEtaDPhi[iso]->SetYTitle("d#phi (rad)");
2568 fhTrackMatchedDEtaDPhi[iso]->SetXTitle("d#eta");
2570 outputContainer->Add(fhTrackMatchedDEta[iso]) ;
2571 outputContainer->Add(fhTrackMatchedDPhi[iso]) ;
2572 outputContainer->Add(fhTrackMatchedDEtaDPhi[iso]) ;
2574 fhdEdx[iso] = new TH2F
2575 (Form("hdEdx%s",isoName[iso].Data()),
2576 Form("%s - Matched track <d#it{E}/d#it{x}> vs cluster #it{E}, %s",isoTitle[iso].Data(),parTitle.Data()),
2577 nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
2578 fhdEdx[iso]->SetXTitle("#it{E} (GeV)");
2579 fhdEdx[iso]->SetYTitle("<d#it{E}/d#it{x}>");
2580 outputContainer->Add(fhdEdx[iso]);
2582 fhEOverP[iso] = new TH2F
2583 (Form("hEOverP%s",isoName[iso].Data()),
2584 Form("%s - Matched track #it{E}/#it{p} vs cluster, %s",isoTitle[iso].Data(),parTitle.Data()),
2585 nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
2586 fhEOverP[iso]->SetXTitle("#it{E} (GeV)");
2587 fhEOverP[iso]->SetYTitle("#it{E}/#it{p}");
2588 outputContainer->Add(fhEOverP[iso]);
2592 fhTrackMatchedMCParticle[iso] = new TH2F
2593 (Form("hTrackMatchedMCParticle%s",isoName[iso].Data()),
2594 Form("%s - Origin of particle vs cluster #it{E}, %s",isoTitle[iso].Data(),parTitle.Data()),
2595 nptbins,ptmin,ptmax,8,0,8);
2596 fhTrackMatchedMCParticle[iso]->SetXTitle("#it{E} (GeV)");
2597 //fhTrackMatchedMCParticle[iso]->SetYTitle("Particle type");
2599 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(1 ,"Photon");
2600 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(2 ,"Electron");
2601 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(3 ,"Meson Merged");
2602 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(4 ,"Rest");
2603 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(5 ,"Conv. Photon");
2604 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(6 ,"Conv. Electron");
2605 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(7 ,"Conv. Merged");
2606 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(8 ,"Conv. Rest");
2608 outputContainer->Add(fhTrackMatchedMCParticle[iso]);
2614 fhELambda0[iso] = new TH2F
2615 (Form("hELambda0%s",isoName[iso].Data()),
2616 Form("%s cluster : #it{E} vs #lambda_{0}, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2617 fhELambda0[iso]->SetYTitle("#lambda_{0}^{2}");
2618 fhELambda0[iso]->SetXTitle("#it{E} (GeV)");
2619 outputContainer->Add(fhELambda0[iso]) ;
2621 fhELambda1[iso] = new TH2F
2622 (Form("hELambda1%s",isoName[iso].Data()),
2623 Form("%s cluster: #it{E} vs #lambda_{1}, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2624 fhELambda1[iso]->SetYTitle("#lambda_{1}^{2}");
2625 fhELambda1[iso]->SetXTitle("#it{E} (GeV)");
2626 outputContainer->Add(fhELambda1[iso]) ;
2628 fhPtLambda0[iso] = new TH2F
2629 (Form("hPtLambda0%s",isoName[iso].Data()),
2630 Form("%s cluster : #it{p}_{T} vs #lambda_{0}, %s",isoTitle[iso].Data(), parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2631 fhPtLambda0[iso]->SetYTitle("#lambda_{0}^{2}");
2632 fhPtLambda0[iso]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2633 outputContainer->Add(fhPtLambda0[iso]) ;
2637 for(Int_t imc = 0; imc < 9; imc++)
2639 fhPtLambda0MC[imc][iso] = new TH2F(Form("hPtLambda0%s_MC%s",isoName[iso].Data(),mcPartName[imc].Data()),
2640 Form("%s cluster : #it{p}_{T} vs #lambda_{0}: %s %s",isoTitle[iso].Data(),mcPartType[imc].Data(),parTitle.Data()),
2641 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2642 fhPtLambda0MC[imc][iso]->SetYTitle("#lambda_{0}^{2}");
2643 fhPtLambda0MC[imc][iso]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2644 outputContainer->Add( fhPtLambda0MC[imc][iso]) ;
2648 if(fIsoDetector=="EMCAL" && GetFirstSMCoveredByTRD() >= 0)
2650 fhPtLambda0TRD[iso] = new TH2F
2651 (Form("hPtLambda0TRD%s",isoName[iso].Data()),
2652 Form("%s cluster: #it{p}_{T} vs #lambda_{0}, SM behind TRD, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2653 fhPtLambda0TRD[iso]->SetYTitle("#lambda_{0}^{2}");
2654 fhPtLambda0TRD[iso]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2655 outputContainer->Add(fhPtLambda0TRD[iso]) ;
2657 fhELambda0TRD[iso] = new TH2F
2658 (Form("hELambda0TRD%s",isoName[iso].Data()),
2659 Form("%s cluster: #it{E} vs #lambda_{0}, SM behind TRD, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2660 fhELambda0TRD[iso]->SetYTitle("#lambda_{0}^{2}");
2661 fhELambda0TRD[iso]->SetXTitle("#it{E} (GeV)");
2662 outputContainer->Add(fhELambda0TRD[iso]) ;
2664 fhELambda1TRD[iso] = new TH2F
2665 (Form("hELambda1TRD%s",isoName[iso].Data()),
2666 Form("%s cluster: #it{E} vs #lambda_{1}, SM behind TRD, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2667 fhELambda1TRD[iso]->SetYTitle("#lambda_{1}^{2}");
2668 fhELambda1TRD[iso]->SetXTitle("#it{E} (GeV)");
2669 outputContainer->Add(fhELambda1TRD[iso]) ;
2672 if(fFillNLMHistograms)
2674 fhNLocMax[iso] = new TH2F
2675 (Form("hNLocMax%s",isoName[iso].Data()),
2676 Form("%s - Number of local maxima in cluster, %s",isoTitle[iso].Data(),parTitle.Data()),
2677 nptbins,ptmin,ptmax,10,0,10);
2678 fhNLocMax[iso]->SetYTitle("#it{NLM}");
2679 fhNLocMax[iso]->SetXTitle("#it{E} (GeV)");
2680 outputContainer->Add(fhNLocMax[iso]) ;
2682 fhELambda0LocMax1[iso] = new TH2F
2683 (Form("hELambda0LocMax1%s",isoName[iso].Data()),
2684 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);
2685 fhELambda0LocMax1[iso]->SetYTitle("#lambda_{0}^{2}");
2686 fhELambda0LocMax1[iso]->SetXTitle("#it{E} (GeV)");
2687 outputContainer->Add(fhELambda0LocMax1[iso]) ;
2689 fhELambda1LocMax1[iso] = new TH2F
2690 (Form("hELambda1LocMax1%s",isoName[iso].Data()),
2691 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);
2692 fhELambda1LocMax1[iso]->SetYTitle("#lambda_{1}^{2}");
2693 fhELambda1LocMax1[iso]->SetXTitle("#it{E} (GeV)");
2694 outputContainer->Add(fhELambda1LocMax1[iso]) ;
2696 fhELambda0LocMax2[iso] = new TH2F
2697 (Form("hELambda0LocMax2%s",isoName[iso].Data()),
2698 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);
2699 fhELambda0LocMax2[iso]->SetYTitle("#lambda_{0}^{2}");
2700 fhELambda0LocMax2[iso]->SetXTitle("#it{E} (GeV)");
2701 outputContainer->Add(fhELambda0LocMax2[iso]) ;
2703 fhELambda1LocMax2[iso] = new TH2F
2704 (Form("hELambda1LocMax2%s",isoName[iso].Data()),
2705 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);
2706 fhELambda1LocMax2[iso]->SetYTitle("#lambda_{1}^{2}");
2707 fhELambda1LocMax2[iso]->SetXTitle("#it{E} (GeV)");
2708 outputContainer->Add(fhELambda1LocMax2[iso]) ;
2710 fhELambda0LocMaxN[iso] = new TH2F
2711 ( Form("hELambda0LocMaxN%s",isoName[iso].Data()),
2712 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);
2713 fhELambda0LocMaxN[iso]->SetYTitle("#lambda_{0}^{2}");
2714 fhELambda0LocMaxN[iso]->SetXTitle("#it{E} (GeV)");
2715 outputContainer->Add(fhELambda0LocMaxN[iso]) ;
2717 fhELambda1LocMaxN[iso] = new TH2F
2718 (Form("hELambda1LocMaxN%s",isoName[iso].Data()),
2719 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);
2720 fhELambda1LocMaxN[iso]->SetYTitle("#lambda_{1}^{2}");
2721 fhELambda1LocMaxN[iso]->SetXTitle("#it{E} (GeV)");
2722 outputContainer->Add(fhELambda1LocMaxN[iso]) ;
2725 } // control histograms for isolated and non isolated objects
2728 if(fFillPileUpHistograms)
2730 fhPtTrackInConeOtherBC = new TH2F("hPtTrackInConeOtherBC",
2731 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC!=0",r),
2732 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2733 fhPtTrackInConeOtherBC->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2734 fhPtTrackInConeOtherBC->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2735 outputContainer->Add(fhPtTrackInConeOtherBC) ;
2737 fhPtTrackInConeOtherBCPileUpSPD = new TH2F("hPtTrackInConeOtherBCPileUpSPD",
2738 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC!=0, pile-up from SPD",r),
2739 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2740 fhPtTrackInConeOtherBCPileUpSPD->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2741 fhPtTrackInConeOtherBCPileUpSPD->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2742 outputContainer->Add(fhPtTrackInConeOtherBCPileUpSPD) ;
2744 fhPtTrackInConeBC0 = new TH2F("hPtTrackInConeBC0",
2745 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC==0",r),
2746 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2747 fhPtTrackInConeBC0->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2748 fhPtTrackInConeBC0->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2749 outputContainer->Add(fhPtTrackInConeBC0) ;
2751 fhPtTrackInConeVtxBC0 = new TH2F("hPtTrackInConeVtxBC0",
2752 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC==0",r),
2753 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2754 fhPtTrackInConeVtxBC0->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2755 fhPtTrackInConeVtxBC0->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2756 outputContainer->Add(fhPtTrackInConeVtxBC0) ;
2759 fhPtTrackInConeBC0PileUpSPD = new TH2F("hPtTrackInConeBC0PileUpSPD",
2760 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC==0, pile-up from SPD",r),
2761 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2762 fhPtTrackInConeBC0PileUpSPD->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2763 fhPtTrackInConeBC0PileUpSPD->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2764 outputContainer->Add(fhPtTrackInConeBC0PileUpSPD) ;
2767 for (Int_t i = 0; i < 7 ; i++)
2769 fhPtInConePileUp[i] = new TH2F(Form("hPtInConePileUp%s",pileUpName[i].Data()),
2770 Form("#it{p}_{T} in isolation cone for #it{R} = %2.2f, from pile-up (%s)",r,pileUpName[i].Data()),
2771 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2772 fhPtInConePileUp[i]->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2773 fhPtInConePileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2774 outputContainer->Add(fhPtInConePileUp[i]) ;
2780 // For histograms in arrays, index in the array, corresponding to any particle origin
2782 for(Int_t i = 0; i < 6; i++)
2784 fhEPrimMC[i] = new TH1F(Form("hEPrim_MC%s",ppname[i].Data()),
2785 Form("primary photon %s : #it{E}, %s",pptype[i].Data(),parTitle.Data()),
2786 nptbins,ptmin,ptmax);
2787 fhEPrimMC[i]->SetXTitle("#it{E} (GeV)");
2788 outputContainer->Add(fhEPrimMC[i]) ;
2790 fhPtPrimMCiso[i] = new TH1F(Form("hPtPrim_MCiso%s",ppname[i].Data()),
2791 Form("primary isolated photon %s : #it{p}_{T}, %s",pptype[i].Data(),parTitle.Data()),
2792 nptbins,ptmin,ptmax);
2793 fhPtPrimMCiso[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2794 outputContainer->Add(fhPtPrimMCiso[i]) ;
2796 fhEtaPrimMC[i] = new TH2F(Form("hEtaPrim_MC%s",ppname[i].Data()),
2797 Form("primary photon %s : #eta vs #it{p}_{T}, %s",pptype[i].Data(),parTitle.Data()),
2798 nptbins,ptmin,ptmax,200,-2,2);
2799 fhEtaPrimMC[i]->SetYTitle("#eta");
2800 fhEtaPrimMC[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2801 outputContainer->Add(fhEtaPrimMC[i]) ;
2803 fhPhiPrimMC[i] = new TH2F(Form("hPhiPrim_MC%s",ppname[i].Data()),
2804 Form("primary photon %s : #phi vs #it{p}_{T}, %s",pptype[i].Data(),parTitle.Data()),
2805 nptbins,ptmin,ptmax,200,0.,TMath::TwoPi());
2806 fhPhiPrimMC[i]->SetYTitle("#phi");
2807 fhPhiPrimMC[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2808 outputContainer->Add(fhPhiPrimMC[i]) ;
2817 const Int_t buffersize = 255;
2818 char name[buffersize];
2819 char title[buffersize];
2820 for(Int_t icone = 0; icone<fNCones; icone++)
2822 // sum pt in cone vs. pt leading
2823 snprintf(name, buffersize,"hSumPtLeadingPt_Cone_%d",icone);
2824 snprintf(title, buffersize,"#Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
2825 fhSumPtLeadingPt[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2826 fhSumPtLeadingPt[icone] ->SetYTitle("#sum_{cone}#it{p}_{T} (GeV/#it{c})");//#Sigma #it{p}_{T}
2827 fhSumPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
2828 outputContainer->Add(fhSumPtLeadingPt[icone]) ;
2830 // pt in cone vs. pt leading
2831 snprintf(name, buffersize,"hPtLeadingPt_Cone_%d",icone);
2832 snprintf(title, buffersize,"#it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
2833 fhPtLeadingPt[icone] = new TH2F(name, title, nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2834 fhPtLeadingPt[icone] ->SetYTitle("#it{p}_{T}^{cone} (GeV/#it{c})");
2835 fhPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
2836 outputContainer->Add(fhPtLeadingPt[icone]) ;
2838 // sum pt in cone vs. pt leading in the forward region (for background subtraction studies)
2839 snprintf(name, buffersize,"hPerpSumPtLeadingPt_Cone_%d",icone);
2840 snprintf(title, buffersize,"#Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
2841 fhPerpSumPtLeadingPt[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2842 fhPerpSumPtLeadingPt[icone] ->SetYTitle("#sum_{cone}#it{p}_{T} (GeV/#it{c})");//#Sigma #it{p}_{T}
2843 fhPerpSumPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
2844 outputContainer->Add(fhPerpSumPtLeadingPt[icone]) ;
2846 // pt in cone vs. pt leading in the forward region (for background subtraction studies)
2847 snprintf(name, buffersize,"hPerpPtLeadingPt_Cone_%d",icone);
2848 snprintf(title, buffersize,"#it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
2849 fhPerpPtLeadingPt[icone] = new TH2F(name, title, nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2850 fhPerpPtLeadingPt[icone] ->SetYTitle("#it{p}_{T}^{cone} (GeV/#it{c})");
2851 fhPerpPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
2852 outputContainer->Add(fhPerpPtLeadingPt[icone]) ;
2856 for(Int_t imc = 0; imc < 9; imc++)
2858 snprintf(name , buffersize,"hSumPtLeadingPt_MC%s_Cone_%d",mcPartName[imc].Data(),icone);
2859 snprintf(title, buffersize,"Candidate %s #it{p}_{T} vs cone #Sigma #it{p}_{T} for #it{R}=%2.2f",mcPartType[imc].Data(),fConeSizes[icone]);
2860 fhSumPtLeadingPtMC[imc][icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2861 fhSumPtLeadingPtMC[imc][icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2862 fhSumPtLeadingPtMC[imc][icone]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2863 outputContainer->Add(fhSumPtLeadingPtMC[imc][icone]) ;
2867 for(Int_t ipt = 0; ipt<fNPtThresFrac;ipt++)
2869 snprintf(name, buffersize,"hPtThres_Cone_%d_Pt%d",icone,ipt);
2870 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]);
2871 fhPtThresIsolated[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2872 fhPtThresIsolated[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2873 outputContainer->Add(fhPtThresIsolated[icone][ipt]) ;
2875 snprintf(name, buffersize,"hPtFrac_Cone_%d_Pt%d",icone,ipt);
2876 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]);
2877 fhPtFracIsolated[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2878 fhPtFracIsolated[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2879 outputContainer->Add(fhPtFracIsolated[icone][ipt]) ;
2881 snprintf(name, buffersize,"hSumPt_Cone_%d_Pt%d",icone,ipt);
2882 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]);
2883 fhSumPtIsolated[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2884 // fhSumPtIsolated[icone][ipt]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2885 fhSumPtIsolated[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2886 outputContainer->Add(fhSumPtIsolated[icone][ipt]) ;
2888 snprintf(name, buffersize,"hPtSumDensity_Cone_%d_Pt%d",icone,ipt);
2889 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]);
2890 fhPtSumDensityIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2891 //fhPtSumIsolated[icone][ipt]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2892 fhPtSumDensityIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2893 outputContainer->Add(fhPtSumDensityIso[icone][ipt]) ;
2895 snprintf(name, buffersize,"hPtFracPtSum_Cone_%d_Pt%d",icone,ipt);
2896 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]);
2897 fhPtFracPtSumIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2898 //fhPtSumIsolated[icone][ipt]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2899 fhPtFracPtSumIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2900 outputContainer->Add(fhPtFracPtSumIso[icone][ipt]) ;
2903 snprintf(name, buffersize,"hEtaPhiPtThres_Cone_%d_Pt%d",icone,ipt);
2904 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]);
2905 fhEtaPhiPtThresIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2906 fhEtaPhiPtThresIso[icone][ipt]->SetXTitle("#eta");
2907 fhEtaPhiPtThresIso[icone][ipt]->SetYTitle("#phi");
2908 outputContainer->Add(fhEtaPhiPtThresIso[icone][ipt]) ;
2910 snprintf(name, buffersize,"hEtaPhiPtFrac_Cone_%d_Pt%d",icone,ipt);
2911 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]);
2912 fhEtaPhiPtFracIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2913 fhEtaPhiPtFracIso[icone][ipt]->SetXTitle("#eta");
2914 fhEtaPhiPtFracIso[icone][ipt]->SetYTitle("#phi");
2915 outputContainer->Add(fhEtaPhiPtFracIso[icone][ipt]) ;
2917 snprintf(name, buffersize,"hEtaPhiPtSum_Cone_%d_Pt%d",icone,ipt);
2918 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]);
2919 fhEtaPhiPtSumIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2920 fhEtaPhiPtSumIso[icone][ipt]->SetXTitle("#eta");
2921 fhEtaPhiPtSumIso[icone][ipt]->SetYTitle("#phi");
2922 outputContainer->Add(fhEtaPhiPtSumIso[icone][ipt]) ;
2924 snprintf(name, buffersize,"hEtaPhiSumDensity_Cone_%d_Pt%d",icone,ipt);
2925 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]);
2926 fhEtaPhiSumDensityIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2927 fhEtaPhiSumDensityIso[icone][ipt]->SetXTitle("#eta");
2928 fhEtaPhiSumDensityIso[icone][ipt]->SetYTitle("#phi");
2929 outputContainer->Add(fhEtaPhiSumDensityIso[icone][ipt]) ;
2931 snprintf(name, buffersize,"hEtaPhiFracPtSum_Cone_%d_Pt%d",icone,ipt);
2932 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]);
2933 fhEtaPhiFracPtSumIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2934 fhEtaPhiFracPtSumIso[icone][ipt]->SetXTitle("#eta");
2935 fhEtaPhiFracPtSumIso[icone][ipt]->SetYTitle("#phi");
2936 outputContainer->Add(fhEtaPhiFracPtSumIso[icone][ipt]) ;
2938 if(fFillTaggedDecayHistograms)
2940 // pt decays isolated
2941 snprintf(name, buffersize,"hPtThres_Decay_Cone_%d_Pt%d",icone,ipt);
2942 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]);
2943 fhPtPtThresDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2944 fhPtPtThresDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2945 outputContainer->Add(fhPtPtThresDecayIso[icone][ipt]) ;
2947 snprintf(name, buffersize,"hPtFrac_Decay_Cone_%d_Pt%d",icone,ipt);
2948 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]);
2949 fhPtPtFracDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2950 fhPtPtFracDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2951 outputContainer->Add(fhPtPtFracDecayIso[icone][ipt]) ;
2953 snprintf(name, buffersize,"hPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
2954 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]);
2955 fhPtPtSumDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2956 // fhPtPtSumDecayIso[icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2957 fhPtPtSumDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2958 outputContainer->Add(fhPtPtSumDecayIso[icone][ipt]) ;
2960 snprintf(name, buffersize,"hPtSumDensity_Decay_Cone_%d_Pt%d",icone,ipt);
2961 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]);
2962 fhPtSumDensityDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2963 // fhPtPtSumDecayIso[icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2964 fhPtSumDensityDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2965 outputContainer->Add(fhPtSumDensityDecayIso[icone][ipt]) ;
2967 snprintf(name, buffersize,"hPtFracPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
2968 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]);
2969 fhPtFracPtSumDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2970 // fhPtPtSumDecayIso[icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2971 fhPtFracPtSumDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2972 outputContainer->Add(fhPtFracPtSumDecayIso[icone][ipt]) ;
2975 snprintf(name, buffersize,"hEtaPhiPtThres_Decay_Cone_%d_Pt%d",icone,ipt);
2976 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]);
2977 fhEtaPhiPtThresDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2978 fhEtaPhiPtThresDecayIso[icone][ipt]->SetXTitle("#eta");
2979 fhEtaPhiPtThresDecayIso[icone][ipt]->SetYTitle("#phi");
2980 outputContainer->Add(fhEtaPhiPtThresDecayIso[icone][ipt]) ;
2982 snprintf(name, buffersize,"hEtaPhiPtFrac_Decay_Cone_%d_Pt%d",icone,ipt);
2983 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]);
2984 fhEtaPhiPtFracDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2985 fhEtaPhiPtFracDecayIso[icone][ipt]->SetXTitle("#eta");
2986 fhEtaPhiPtFracDecayIso[icone][ipt]->SetYTitle("#phi");
2987 outputContainer->Add(fhEtaPhiPtFracDecayIso[icone][ipt]) ;
2990 snprintf(name, buffersize,"hEtaPhiPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
2991 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]);
2992 fhEtaPhiPtSumDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2993 fhEtaPhiPtSumDecayIso[icone][ipt]->SetXTitle("#eta");
2994 fhEtaPhiPtSumDecayIso[icone][ipt]->SetYTitle("#phi");
2995 outputContainer->Add(fhEtaPhiPtSumDecayIso[icone][ipt]) ;
2997 snprintf(name, buffersize,"hEtaPhiSumDensity_Decay_Cone_%d_Pt%d",icone,ipt);
2998 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]);
2999 fhEtaPhiSumDensityDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
3000 fhEtaPhiSumDensityDecayIso[icone][ipt]->SetXTitle("#eta");
3001 fhEtaPhiSumDensityDecayIso[icone][ipt]->SetYTitle("#phi");
3002 outputContainer->Add(fhEtaPhiSumDensityDecayIso[icone][ipt]) ;
3004 snprintf(name, buffersize,"hEtaPhiFracPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
3005 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]);
3006 fhEtaPhiFracPtSumDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
3007 fhEtaPhiFracPtSumDecayIso[icone][ipt]->SetXTitle("#eta");
3008 fhEtaPhiFracPtSumDecayIso[icone][ipt]->SetYTitle("#phi");
3009 outputContainer->Add(fhEtaPhiFracPtSumDecayIso[icone][ipt]) ;
3015 for(Int_t imc = 0; imc < 9; imc++)
3017 snprintf(name , buffersize,"hPtThreshMC%s_Cone_%d_Pt%d",mcPartName[imc].Data(),icone,ipt);
3018 snprintf(title, buffersize,"Isolated %s #it{p}_{T} for #it{R}=%2.2f and #it{p}_{T}^{th}=%2.2f",
3019 mcPartType[imc].Data(),fConeSizes[icone], fPtThresholds[ipt]);
3020 fhPtThresIsolatedMC[imc][icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
3021 fhPtThresIsolatedMC[imc][icone][ipt]->SetYTitle("#it{counts}");
3022 fhPtThresIsolatedMC[imc][icone][ipt]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
3023 outputContainer->Add(fhPtThresIsolatedMC[imc][icone][ipt]) ;
3026 snprintf(name , buffersize,"hPtFracMC%s_Cone_%d_Pt%d",mcPartName[imc].Data(),icone,ipt);
3027 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",
3028 mcPartType[imc].Data(),fConeSizes[icone], fPtFractions[ipt]);
3029 fhPtFracIsolatedMC[imc][icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
3030 fhPtFracIsolatedMC[imc][icone][ipt]->SetYTitle("#it{counts}");
3031 fhPtFracIsolatedMC[imc][icone][ipt]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
3032 outputContainer->Add(fhPtFracIsolatedMC[imc][icone][ipt]) ;
3034 snprintf(name , buffersize,"hSumPtMC%s_Cone_%d_Pt%d",mcPartName[imc].Data(),icone,ipt);
3035 snprintf(title, buffersize,"Isolated %s #it{p}_{T} for #it{R}=%2.2f and #Sigma #it{p}_{T}^{in cone}=%2.2f",
3036 mcPartType[imc].Data(),fConeSizes[icone], fSumPtThresholds[ipt]);
3037 fhSumPtIsolatedMC[imc][icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
3038 fhSumPtIsolatedMC[imc][icone][ipt]->SetYTitle("#it{counts}");
3039 fhSumPtIsolatedMC[imc][icone][ipt]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
3040 outputContainer->Add(fhSumPtIsolatedMC[imc][icone][ipt]) ;
3047 if(fFillPileUpHistograms)
3049 for (Int_t i = 0; i < 7 ; i++)
3051 fhEIsoPileUp[i] = new TH1F(Form("hEPileUp%s",pileUpName[i].Data()),
3052 Form("Number of isolated particles vs E, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
3053 nptbins,ptmin,ptmax);
3054 fhEIsoPileUp[i]->SetYTitle("d#it{N} / d#it{E}");
3055 fhEIsoPileUp[i]->SetXTitle("#it{E} (GeV)");
3056 outputContainer->Add(fhEIsoPileUp[i]) ;
3058 fhPtIsoPileUp[i] = new TH1F(Form("hPtPileUp%s",pileUpName[i].Data()),
3059 Form("Number of isolated particles vs #it{p}_{T}, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
3060 nptbins,ptmin,ptmax);
3061 fhPtIsoPileUp[i]->SetYTitle("d#it{N} / #it{p}_{T}");
3062 fhPtIsoPileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3063 outputContainer->Add(fhPtIsoPileUp[i]) ;
3065 fhENoIsoPileUp[i] = new TH1F(Form("hENoIsoPileUp%s",pileUpName[i].Data()),
3066 Form("Number of not isolated particles vs E, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
3067 nptbins,ptmin,ptmax);
3068 fhENoIsoPileUp[i]->SetYTitle("d#it{N} / dE");
3069 fhENoIsoPileUp[i]->SetXTitle("#it{E} (GeV)");
3070 outputContainer->Add(fhENoIsoPileUp[i]) ;
3072 fhPtNoIsoPileUp[i] = new TH1F(Form("hPtNoIsoPileUp%s",pileUpName[i].Data()),
3073 Form("Number of not isolated particles vs #it{p}_{T}, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
3074 nptbins,ptmin,ptmax);
3075 fhPtNoIsoPileUp[i]->SetYTitle("d#it{N} / #it{p}_{T}");
3076 fhPtNoIsoPileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3077 outputContainer->Add(fhPtNoIsoPileUp[i]) ;
3080 fhTimeENoCut = new TH2F ("hTimeE_NoCut","time of cluster vs E of clusters, no cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
3081 fhTimeENoCut->SetXTitle("#it{E} (GeV)");
3082 fhTimeENoCut->SetYTitle("#it{time} (ns)");
3083 outputContainer->Add(fhTimeENoCut);
3085 fhTimeESPD = new TH2F ("hTimeE_SPD","time of cluster vs E of clusters, SPD cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
3086 fhTimeESPD->SetXTitle("#it{E} (GeV)");
3087 fhTimeESPD->SetYTitle("#it{time} (ns)");
3088 outputContainer->Add(fhTimeESPD);
3090 fhTimeESPDMulti = new TH2F ("hTimeE_SPDMulti","time of cluster vs E of clusters, SPD multi cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
3091 fhTimeESPDMulti->SetXTitle("#it{E} (GeV)");
3092 fhTimeESPDMulti->SetYTitle("#it{time} (ns)");
3093 outputContainer->Add(fhTimeESPDMulti);
3095 fhTimeNPileUpVertSPD = new TH2F ("hTime_NPileUpVertSPD","time of cluster vs N pile-up SPD vertex", ntimebins,timemin,timemax,50,0,50);
3096 fhTimeNPileUpVertSPD->SetYTitle("# vertex ");
3097 fhTimeNPileUpVertSPD->SetXTitle("#it{time} (ns)");
3098 outputContainer->Add(fhTimeNPileUpVertSPD);
3100 fhTimeNPileUpVertTrack = new TH2F ("hTime_NPileUpVertTracks","time of cluster vs N pile-up Tracks vertex", ntimebins,timemin,timemax, 50,0,50 );
3101 fhTimeNPileUpVertTrack->SetYTitle("# vertex ");
3102 fhTimeNPileUpVertTrack->SetXTitle("#it{time} (ns)");
3103 outputContainer->Add(fhTimeNPileUpVertTrack);
3105 fhTimeNPileUpVertContributors = new TH2F ("hTime_NPileUpVertContributors","time of cluster vs N constributors to pile-up SPD vertex", ntimebins,timemin,timemax,50,0,50);
3106 fhTimeNPileUpVertContributors->SetYTitle("# vertex ");
3107 fhTimeNPileUpVertContributors->SetXTitle("#it{time} (ns)");
3108 outputContainer->Add(fhTimeNPileUpVertContributors);
3110 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);
3111 fhTimePileUpMainVertexZDistance->SetYTitle("distance #it{z} (cm) ");
3112 fhTimePileUpMainVertexZDistance->SetXTitle("#it{time} (ns)");
3113 outputContainer->Add(fhTimePileUpMainVertexZDistance);
3115 fhTimePileUpMainVertexZDiamond = new TH2F ("hTime_PileUpMainVertexZDiamond","time of cluster vs distance in Z pile-up SPD vertex - z diamond",ntimebins,timemin,timemax,100,0,50);
3116 fhTimePileUpMainVertexZDiamond->SetYTitle("diamond distance #it{z} (cm) ");
3117 fhTimePileUpMainVertexZDiamond->SetXTitle("#it{time} (ns)");
3118 outputContainer->Add(fhTimePileUpMainVertexZDiamond);
3121 return outputContainer ;
3125 //____________________________________________________
3126 Int_t AliAnaParticleIsolation::GetMCIndex(Int_t mcTag)
3128 // Histogram index depending on origin of candidate
3130 if(!IsDataMC()) return -1;
3132 if (GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPrompt))
3136 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCFragmentation) ||
3137 GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCISR))
3141 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0))
3145 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0Decay))
3149 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEtaDecay))
3153 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCOtherDecay))
3155 return kmcOtherDecay;
3157 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron))
3161 else // anything else
3163 // careful can contain also other decays, to be checked.
3168 //__________________________________
3169 void AliAnaParticleIsolation::Init()
3171 // Do some checks and init stuff
3173 // In case of several cone and thresholds analysis, open the cuts for the filling of the
3174 // track and cluster reference arrays in cone when done in the MakeAnalysisFillAOD().
3175 // The different cones, thresholds are tested for this list of tracks, clusters.
3178 printf("AliAnaParticleIsolation::Init() - Open default isolation cuts for multiple Isolation analysis\n");
3179 GetIsolationCut()->SetPtThreshold(100);
3180 GetIsolationCut()->SetPtFraction(100);
3181 GetIsolationCut()->SetConeSize(1);
3184 if(!GetReader()->IsCTSSwitchedOn() && GetIsolationCut()->GetParticleTypeInCone()!=AliIsolationCut::kOnlyNeutral)
3185 AliFatal("STOP!: You want to use CTS tracks in analysis but not read!! \n!!Check the configuration file!!\n");
3189 //____________________________________________
3190 void AliAnaParticleIsolation::InitParameters()
3193 //Initialize the parameters of the analysis.
3194 SetInputAODName("PWG4Particle");
3195 SetAODObjArrayName("IsolationCone");
3196 AddToHistogramsName("AnaIsolation_");
3198 fCalorimeter = "EMCAL" ;
3199 fIsoDetector = "EMCAL" ;
3201 fReMakeIC = kFALSE ;
3202 fMakeSeveralIC = kFALSE ;
3204 fLeadingOnly = kTRUE;
3205 fCheckLeadingWithNeutralClusters = kTRUE;
3208 fDecayBits[0] = AliNeutralMesonSelection::kPi0;
3209 fDecayBits[1] = AliNeutralMesonSelection::kEta;
3210 fDecayBits[2] = AliNeutralMesonSelection::kPi0Side;
3211 fDecayBits[3] = AliNeutralMesonSelection::kEtaSide;
3214 fBkgBinLimit[ 0] = 00.0; fBkgBinLimit[ 1] = 00.2; fBkgBinLimit[ 2] = 00.3; fBkgBinLimit[ 3] = 00.4; fBkgBinLimit[ 4] = 00.5;
3215 fBkgBinLimit[ 5] = 01.0; fBkgBinLimit[ 6] = 01.5; fBkgBinLimit[ 7] = 02.0; fBkgBinLimit[ 8] = 03.0; fBkgBinLimit[ 9] = 05.0;
3216 fBkgBinLimit[10] = 10.0; fBkgBinLimit[11] = 100.;
3217 for(Int_t ibin = 12; ibin < 20; ibin++) fBkgBinLimit[ibin] = 00.0;
3219 //----------- Several IC-----------------
3222 fConeSizes [0] = 0.1; fConeSizes [1] = 0.2; fConeSizes [2] = 0.3; fConeSizes [3] = 0.4; fConeSizes [4] = 0.5;
3223 fPtThresholds [0] = 1.; fPtThresholds [1] = 2.; fPtThresholds [2] = 3.; fPtThresholds [3] = 4.; fPtThresholds [4] = 5.;
3224 fPtFractions [0] = 0.05; fPtFractions [1] = 0.075; fPtFractions [2] = 0.1; fPtFractions [3] = 1.25; fPtFractions [4] = 1.5;
3225 fSumPtThresholds[0] = 1.; fSumPtThresholds[1] = 2.; fSumPtThresholds[2] = 3.; fSumPtThresholds[3] = 4.; fSumPtThresholds[4] = 5.;
3229 //_________________________________________________________________________________________
3230 Bool_t AliAnaParticleIsolation::IsTriggerTheNearSideEventLeadingParticle(Int_t & idLeading)
3232 // Check if the what of the selected isolation candidates is leading particle in the same hemisphere
3233 // comparing with all the candidates, all the tracks or all the clusters.
3235 Double_t ptTrig = GetMinPt();
3236 Double_t phiTrig = 0 ;
3238 AliAODPWG4ParticleCorrelation* pLeading = 0;
3240 // Loop on stored AOD particles, find leading trigger on the selected list, with at least min pT.
3242 for(Int_t iaod = 0; iaod < GetInputAODBranch()->GetEntriesFast() ; iaod++)
3244 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
3245 particle->SetLeadingParticle(kFALSE); // set it later
3247 // Vertex cut in case of mixing
3250 Int_t check = CheckMixedEventVertex(particle->GetCaloLabel(0), particle->GetTrackLabel(0));
3251 if(check == 0) continue;
3252 if(check == -1) return kFALSE; // not sure if it is correct.
3255 //check if it is low pt trigger particle
3256 if((particle->Pt() < GetIsolationCut()->GetPtThreshold() ||
3257 particle->Pt() < GetIsolationCut()->GetSumPtThreshold()) &&
3260 continue ; //trigger should not come from underlying event
3263 // find the leading particles with highest momentum
3264 if (particle->Pt() > ptTrig)
3266 ptTrig = particle->Pt() ;
3267 phiTrig = particle->Phi();
3269 pLeading = particle ;
3271 }// finish search of leading trigger particle on the AOD branch.
3273 if(index < 0) return kFALSE;
3277 //printf("AOD leading pT %2.2f, ID %d\n", pLeading->Pt(),pLeading->GetCaloLabel(0));
3279 if(phiTrig < 0 ) phiTrig += TMath::TwoPi();
3281 // Compare if it is the leading of all tracks
3284 for(Int_t ipr = 0;ipr < GetCTSTracks()->GetEntriesFast() ; ipr ++ )
3286 AliVTrack * track = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
3288 if(track->GetID() == pLeading->GetTrackLabel(0) || track->GetID() == pLeading->GetTrackLabel(1) ||
3289 track->GetID() == pLeading->GetTrackLabel(2) || track->GetID() == pLeading->GetTrackLabel(3) ) continue ;
3291 Double_t mom[3] = {track->Px(),track->Py(),track->Pz()};
3292 p3.SetXYZ(mom[0],mom[1],mom[2]);
3293 Float_t pt = p3.Pt();
3294 Float_t phi = p3.Phi() ;
3295 if(phi < 0) phi+=TMath::TwoPi();
3297 //skip this event if near side associated particle pt larger than trigger
3299 Float_t deltaPhi = phiTrig-phi;
3301 // Calculate deltaPhi shift so that for the particles on the opposite side
3302 // it is defined between 90 and 270 degrees
3303 // Shift [-360,-90] to [0, 270]
3304 // and [270,360] to [-90,0]
3305 if(deltaPhi <= -TMath::PiOver2()) deltaPhi+=TMath::TwoPi();
3306 if(deltaPhi > 3*TMath::PiOver2()) deltaPhi-=TMath::TwoPi();
3308 if(pt > ptTrig && deltaPhi < TMath::PiOver2()) return kFALSE;
3312 // Compare if it is leading of all calorimeter clusters
3314 if(fCheckLeadingWithNeutralClusters)
3316 // Select the calorimeter cluster list
3317 TObjArray * nePl = 0x0;
3318 if (pLeading->GetDetector() == "PHOS" )
3319 nePl = GetPHOSClusters();
3321 nePl = GetEMCALClusters();
3323 if(!nePl) return kTRUE; // Do the selection just with the tracks if no calorimeter is available.
3326 for(Int_t ipr = 0;ipr < nePl->GetEntriesFast() ; ipr ++ )
3328 AliVCluster * cluster = (AliVCluster *) (nePl->At(ipr)) ;
3330 if(cluster->GetID() == pLeading->GetCaloLabel(0) || cluster->GetID() == pLeading->GetCaloLabel(1) ) continue ;
3332 cluster->GetMomentum(lv,GetVertex(0));
3334 Float_t pt = lv.Pt();
3335 Float_t phi = lv.Phi() ;
3336 if(phi < 0) phi+=TMath::TwoPi();
3338 if(IsTrackMatched(cluster,GetReader()->GetInputEvent())) continue ; // avoid charged clusters, already covered by tracks, or cluster merging with track.
3340 // skip this event if near side associated particle pt larger than trigger
3341 // not really needed for calorimeter, unless DCal is included
3343 Float_t deltaPhi = phiTrig-phi;
3344 if(deltaPhi <= -TMath::PiOver2()) deltaPhi+=TMath::TwoPi();
3345 if(deltaPhi > 3*TMath::PiOver2()) deltaPhi-=TMath::TwoPi();
3347 if(pt > ptTrig && deltaPhi < TMath::PiOver2()) return kFALSE ;
3350 } // check neutral clusters
3353 pLeading->SetLeadingParticle(kTRUE);
3355 if( GetDebug() > 1 )
3356 printf("AliAnaParticleIsolation::IsTriggerTheNearSideEventLeadingParticle() - Particle AOD with index %d is leading with pT %2.2f\n",
3357 idLeading, pLeading->Pt());
3363 //__________________________________________________
3364 void AliAnaParticleIsolation::MakeAnalysisFillAOD()
3366 // Do analysis and fill aods
3367 // Search for the isolated photon in fCalorimeter with GetMinPt() < pt < GetMaxPt()
3368 // and if the particle is leading in the near side (if requested)
3370 if(!GetInputAODBranch())
3371 AliFatal(Form("No input particles in AOD with name branch < %s >, STOP",GetInputAODName().Data()));
3373 if(strcmp(GetInputAODBranch()->GetClass()->GetName(), "AliAODPWG4ParticleCorrelation"))
3374 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()));
3376 Int_t n = 0, nfrac = 0;
3377 Bool_t isolated = kFALSE ;
3378 Float_t coneptsum = 0, coneptlead = 0;
3379 TObjArray * pl = 0x0; ;
3381 //Select the calorimeter for candidate isolation with neutral particles
3382 if (fCalorimeter == "PHOS" )
3383 pl = GetPHOSClusters();
3384 else if (fCalorimeter == "EMCAL")
3385 pl = GetEMCALClusters();
3387 //Loop on AOD branch, filled previously in AliAnaPhoton, find leading particle to do isolation only with it
3388 TLorentzVector mom ;
3389 Int_t idLeading = -1 ;
3391 Int_t naod = GetInputAODBranch()->GetEntriesFast();
3394 printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - Input aod branch entries %d\n", naod);
3396 if(IsLeadingOnlyOn())
3398 Bool_t leading = IsTriggerTheNearSideEventLeadingParticle(idLeading);
3401 if(GetDebug() > 1) printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - Not leading; End fill AODs \n");
3404 iaod0 = idLeading ; // first entry in particle loop
3405 naod = idLeading+1; // last entry in particle loop
3408 // Check isolation of list of candidate particles or leading particle
3410 for(Int_t iaod = iaod0; iaod < naod; iaod++)
3412 AliAODPWG4ParticleCorrelation * aodinput = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
3414 if(IsLeadingOnlyOn()) aodinput->SetLeadingParticle(kTRUE);
3416 // Check isolation only of clusters in fiducial region
3417 if(IsFiducialCutOn())
3419 Bool_t in = GetFiducialCut()->IsInFiducialCut(*aodinput->Momentum(),aodinput->GetDetector()) ;
3423 //If too small or too large pt, skip
3424 Float_t pt = aodinput->Pt();
3425 if(pt < GetMinPt() || pt > GetMaxPt() ) continue ;
3427 //check if it is low pt trigger particle
3428 if( ( pt < GetIsolationCut()->GetPtThreshold() || pt < GetIsolationCut()->GetSumPtThreshold() ) &&
3431 continue ; //trigger should not come from underlying event
3434 //After cuts, study isolation
3435 n=0; nfrac = 0; isolated = kFALSE; coneptsum = 0; coneptlead = 0;
3436 GetIsolationCut()->MakeIsolationCut(GetCTSTracks(),pl,
3437 GetReader(), GetCaloPID(),
3438 kTRUE, aodinput, GetAODObjArrayName(),
3439 n,nfrac,coneptsum,coneptlead,isolated);
3441 if(!fMakeSeveralIC) aodinput->SetIsolated(isolated);
3442 } // particle isolationloop
3446 if(isolated) printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() : Particle %d IS ISOLATED \n",idLeading);
3447 printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - End fill AODs \n");
3452 //_________________________________________________________
3453 void AliAnaParticleIsolation::MakeAnalysisFillHistograms()
3455 // Do analysis and fill histograms
3457 // In case of simulated data, fill acceptance histograms
3458 // Not ready for multiple case analysis.
3459 if(IsDataMC() && !fMakeSeveralIC) FillAcceptanceHistograms();
3461 //Loop on stored AOD
3462 Int_t naod = GetInputAODBranch()->GetEntriesFast();
3464 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Histo aod branch entries %d\n", naod);
3466 for(Int_t iaod = 0; iaod < naod ; iaod++)
3468 AliAODPWG4ParticleCorrelation* aod = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
3470 if(IsLeadingOnlyOn() && !aod->IsLeadingParticle()) continue; // Try to isolate only leading cluster or track
3472 // Check isolation only of clusters in fiducial region
3473 if(IsFiducialCutOn())
3475 Bool_t in = GetFiducialCut()->IsInFiducialCut(*aod->Momentum(),aod->GetDetector()) ;
3476 if(! in ) continue ;
3479 Float_t pt = aod->Pt();
3481 //If too small or too large pt, skip
3482 if(pt < GetMinPt() || pt > GetMaxPt() ) continue ;
3484 Int_t mcTag = aod->GetTag() ;
3485 Int_t mcIndex = GetMCIndex(mcTag);
3487 // --- In case of redoing isolation from delta AOD ----
3488 // Not standard case, not used since its implementation
3491 //Analysis of multiple IC at same time
3492 MakeSeveralICAnalysis(aod,mcIndex);
3496 // --- In case of redoing isolation multiple cuts ----
3500 //In case a more strict IC is needed in the produced AOD
3501 Bool_t isolated = kFALSE;
3502 Int_t n = 0, nfrac = 0;
3503 Float_t coneptsum = 0, coneptlead = 0;
3505 //Recover reference arrays with clusters and tracks
3506 TObjArray * refclusters = aod->GetObjArray(GetAODObjArrayName()+"Clusters");
3507 TObjArray * reftracks = aod->GetObjArray(GetAODObjArrayName()+"Tracks");
3509 GetIsolationCut()->MakeIsolationCut(reftracks, refclusters,
3510 GetReader(), GetCaloPID(),
3512 n,nfrac,coneptsum,coneptlead,isolated);
3515 Bool_t isolated = aod->IsIsolated();
3516 Float_t energy = aod->E();
3517 Float_t phi = aod->Phi();
3518 Float_t eta = aod->Eta();
3521 if(fFillTaggedDecayHistograms)
3523 decayTag = aod->GetBtag(); // temporary
3524 if(decayTag < 0) decayTag = 0; // temporary
3527 if(GetDebug() > 0) printf(" AliAnaParticleIsolation::MakeAnalysisFillHistograms() - pt %1.1f, eta %1.1f, phi %1.1f, Isolated %d\n",
3528 pt, eta, phi, isolated);
3530 //---------------------------------------------------------------
3531 // Fill pt/sum pT distribution of particles in cone or in UE band
3532 //---------------------------------------------------------------
3534 Float_t coneptLeadCluster= 0;
3535 Float_t coneptLeadTrack = 0;
3536 Float_t coneptsumCluster = 0;
3537 Float_t coneptsumTrack = 0;
3538 Float_t coneptsumCell = 0;
3539 Float_t etaBandptsumClusterNorm = 0;
3540 Float_t etaBandptsumTrackNorm = 0;
3542 CalculateTrackSignalInCone (aod,coneptsumTrack , coneptLeadTrack );
3543 CalculateCaloSignalInCone (aod,coneptsumCluster, coneptLeadCluster);
3544 if(fFillCellHistograms)
3545 CalculateCaloCellSignalInCone(aod,coneptsumCell );
3547 if(GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kNeutralAndCharged)
3549 fhConeSumPtClustervsTrack ->Fill(coneptsumCluster, coneptsumTrack );
3550 fhConePtLeadClustervsTrack->Fill(coneptLeadCluster,coneptLeadTrack);
3552 if(coneptsumTrack > 0) fhConeSumPtClusterTrackFrac ->Fill(pt, coneptsumCluster /coneptsumTrack );
3553 if(coneptLeadTrack > 0) fhConePtLeadClusterTrackFrac->Fill(pt, coneptLeadCluster/coneptLeadTrack);
3555 if(fFillCellHistograms)
3557 fhConeSumPtCellvsTrack ->Fill(coneptsumCell, coneptsumTrack);
3558 fhConeSumPtCellTrack ->Fill(pt, coneptsumTrack+coneptsumCell);
3559 fhConeSumPtCellTrackTrigEtaPhi->Fill(eta,phi,coneptsumTrack+coneptsumCell);
3563 fhConeSumPt ->Fill(pt, coneptsumTrack+coneptsumCluster);
3564 fhConeSumPtTrigEtaPhi ->Fill(eta,phi,coneptsumTrack+coneptsumCluster);
3566 Float_t coneptLead = coneptLeadTrack;
3567 if(coneptLeadCluster > coneptLeadTrack) coneptLead = coneptLeadCluster;
3568 fhConePtLead->Fill(pt, coneptLead );
3571 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d Energy Sum in Isolation Cone %2.2f, Leading pT in cone %2.2f\n",
3572 iaod, coneptsumTrack+coneptsumCluster, coneptLead);
3574 //normalize phi/eta band per area unit
3575 if(fFillUEBandSubtractHistograms)
3576 CalculateNormalizeUEBandPerUnitArea(aod, coneptsumCluster, coneptsumCell, coneptsumTrack, etaBandptsumTrackNorm, etaBandptsumClusterNorm) ;
3578 // printf("Histograms analysis : cluster pt = %f, etaBandTrack = %f, etaBandCluster = %f, isolation = %d\n",aod->Pt(),etaBandptsumTrackNorm,etaBandptsumClusterNorm,aod->IsIsolated());
3580 //---------------------------------------------------------------
3581 // Fill Shower shape and track matching histograms
3582 //---------------------------------------------------------------
3584 FillTrackMatchingShowerShapeControlHistograms(aod, coneptsumTrack+coneptsumCluster, coneptLead, mcIndex);
3586 //---------------------------------------------------------------
3587 // Isolated/ Non isolated histograms
3588 //---------------------------------------------------------------
3593 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d ISOLATED: fill histograms\n", iaod);
3595 fhEIso ->Fill(energy);
3597 fhPhiIso ->Fill(pt,phi);
3598 fhEtaIso ->Fill(pt,eta);
3599 fhEtaPhiIso ->Fill(eta,phi);
3603 // For histograms in arrays, index in the array, corresponding to any particle origin
3604 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
3606 fhPtIsoMC [kmcPhoton]->Fill(pt);
3607 fhPhiIsoMC[kmcPhoton]->Fill(pt,phi);
3608 fhEtaIsoMC[kmcPhoton]->Fill(pt,eta);
3611 fhPtIsoMC [mcIndex]->Fill(pt);
3612 fhPhiIsoMC[mcIndex]->Fill(pt,phi);
3613 fhEtaIsoMC[mcIndex]->Fill(pt,eta);
3614 }//Histograms with MC
3616 // Candidates tagged as decay in another analysis (AliAnaPi0EbE)
3617 if(fFillTaggedDecayHistograms && decayTag > 0)
3619 for(Int_t ibit = 0; ibit < fNDecayBits; ibit++)
3621 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[ibit]))
3623 fhPtDecayIso[ibit] ->Fill(pt);
3624 fhEtaPhiDecayIso[ibit]->Fill(eta,phi);
3628 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
3629 fhPtDecayIsoMC[ibit][kmcPhoton]->Fill(pt);
3631 fhPtDecayIsoMC[ibit][mcIndex]->Fill(pt);
3635 } // decay histograms
3637 if(fFillNLMHistograms)
3638 fhPtNLocMaxIso ->Fill(pt,aod->GetFiducialArea()) ; // remember to change method name
3640 if(fFillHighMultHistograms)
3642 fhPtCentralityIso ->Fill(pt,GetEventCentrality()) ;
3643 fhPtEventPlaneIso ->Fill(pt,GetEventPlaneAngle() ) ;
3646 if(fFillPileUpHistograms)
3648 if(GetReader()->IsPileUpFromSPD()) { fhEIsoPileUp[0] ->Fill(energy) ; fhPtIsoPileUp[0]->Fill(pt) ; }
3649 if(GetReader()->IsPileUpFromEMCal()) { fhEIsoPileUp[1] ->Fill(energy) ; fhPtIsoPileUp[1]->Fill(pt) ; }
3650 if(GetReader()->IsPileUpFromSPDOrEMCal()) { fhEIsoPileUp[2] ->Fill(energy) ; fhPtIsoPileUp[2]->Fill(pt) ; }
3651 if(GetReader()->IsPileUpFromSPDAndEMCal()) { fhEIsoPileUp[3] ->Fill(energy) ; fhPtIsoPileUp[3]->Fill(pt) ; }
3652 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) { fhEIsoPileUp[4] ->Fill(energy) ; fhPtIsoPileUp[4]->Fill(pt) ; }
3653 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) { fhEIsoPileUp[5] ->Fill(energy) ; fhPtIsoPileUp[5]->Fill(pt) ; }
3654 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhEIsoPileUp[6] ->Fill(energy) ; fhPtIsoPileUp[6]->Fill(pt) ; }
3656 // Fill histograms to undertand pile-up before other cuts applied
3657 // Remember to relax time cuts in the reader
3658 FillPileUpHistograms(aod->GetCaloLabel(0));
3661 }//Isolated histograms
3662 else // NON isolated
3665 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d NOT ISOLATED, fill histograms\n", iaod);
3667 fhENoIso ->Fill(energy);
3668 fhPtNoIso ->Fill(pt);
3669 fhEtaPhiNoIso ->Fill(eta,phi);
3673 if( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton) )
3674 fhPtNoIsoMC[kmcPhoton]->Fill(pt);
3676 fhPtNoIsoMC[mcIndex]->Fill(pt);
3679 // Candidates tagged as decay in another analysis (AliAnaPi0EbE)
3680 if(fFillTaggedDecayHistograms && decayTag > 0)
3682 for(Int_t ibit = 0; ibit < fNDecayBits; ibit++)
3684 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[ibit]))
3686 fhPtDecayNoIso[ibit] ->Fill(pt);
3687 fhEtaPhiDecayNoIso[ibit]->Fill(eta,phi);
3691 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
3692 fhPtDecayNoIsoMC[ibit][kmcPhoton]->Fill(pt);
3694 fhPtDecayNoIsoMC[ibit][mcIndex]->Fill(pt);
3698 } // decay histograms
3700 if(fFillNLMHistograms)
3701 fhPtNLocMaxNoIso ->Fill(pt,aod->GetFiducialArea()); // remember to change method name
3703 if(fFillPileUpHistograms)
3705 if(GetReader()->IsPileUpFromSPD()) { fhENoIsoPileUp[0] ->Fill(energy) ; fhPtNoIsoPileUp[0]->Fill(pt) ; }
3706 if(GetReader()->IsPileUpFromEMCal()) { fhENoIsoPileUp[1] ->Fill(energy) ; fhPtNoIsoPileUp[1]->Fill(pt) ; }
3707 if(GetReader()->IsPileUpFromSPDOrEMCal()) { fhENoIsoPileUp[2] ->Fill(energy) ; fhPtNoIsoPileUp[2]->Fill(pt) ; }
3708 if(GetReader()->IsPileUpFromSPDAndEMCal()) { fhENoIsoPileUp[3] ->Fill(energy) ; fhPtNoIsoPileUp[3]->Fill(pt) ; }
3709 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) { fhENoIsoPileUp[4] ->Fill(energy) ; fhPtNoIsoPileUp[4]->Fill(pt) ; }
3710 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) { fhENoIsoPileUp[5] ->Fill(energy) ; fhPtNoIsoPileUp[5]->Fill(pt) ; }
3711 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhENoIsoPileUp[6] ->Fill(energy) ; fhPtNoIsoPileUp[6]->Fill(pt) ; }
3718 //______________________________________________________________________
3719 void AliAnaParticleIsolation::FillAcceptanceHistograms()
3721 // Fill acceptance histograms if MC data is available
3722 // Only when particle is in the calorimeter. Rethink if CTS is used.
3724 if(GetDebug() > 0) printf("AliAnaParticleIsolation::FillAcceptanceHistograms() - Start \n");
3726 //Double_t photonY = -100 ;
3727 Double_t photonE = -1 ;
3728 Double_t photonPt = -1 ;
3729 Double_t photonPhi = 100 ;
3730 Double_t photonEta = -1 ;
3738 TParticle * primStack = 0;
3739 AliAODMCParticle * primAOD = 0;
3742 // Get the ESD MC particles container
3743 AliStack * stack = 0;
3744 if( GetReader()->ReadStack() )
3746 stack = GetMCStack();
3748 nprim = stack->GetNtrack();
3751 // Get the AOD MC particles container
3752 TClonesArray * mcparticles = 0;
3753 if( GetReader()->ReadAODMCParticles() )
3755 mcparticles = GetReader()->GetAODMCParticles();
3756 if( !mcparticles ) return;
3757 nprim = mcparticles->GetEntriesFast();
3760 for(Int_t i=0 ; i < nprim; i++)
3762 if(GetReader()->AcceptOnlyHIJINGLabels() && !GetReader()->IsHIJINGLabel(i)) continue ;
3764 if(GetReader()->ReadStack())
3766 primStack = stack->Particle(i) ;
3769 printf("AliAnaParticleIsolation::FillAcceptanceHistograms() - ESD primaries pointer not available!!\n");
3773 pdg = primStack->GetPdgCode();
3774 status = primStack->GetStatusCode();
3776 if(primStack->Energy() == TMath::Abs(primStack->Pz())) continue ; //Protection against floating point exception
3778 //printf("i %d, %s %d %s %d \n",i, stack->Particle(i)->GetName(), stack->Particle(i)->GetPdgCode(),
3779 // prim->GetName(), prim->GetPdgCode());
3781 //photonY = 0.5*TMath::Log((prim->Energy()-prim->Pz())/(prim->Energy()+prim->Pz())) ;
3784 primStack->Momentum(lv);
3789 primAOD = (AliAODMCParticle *) mcparticles->At(i);
3792 printf("AliAnaParticleIsolation::FillAcceptanceHistograms() - AOD primaries pointer not available!!\n");
3796 pdg = primAOD->GetPdgCode();
3797 status = primAOD->GetStatus();
3799 if(primAOD->E() == TMath::Abs(primAOD->Pz())) continue ; //Protection against floating point exception
3801 //photonY = 0.5*TMath::Log((prim->Energy()-prim->Pz())/(prim->Energy()+prim->Pz())) ;
3804 lv.SetPxPyPzE(primAOD->Px(),primAOD->Py(),primAOD->Pz(),primAOD->E());
3807 // Select only photons in the final state
3808 if(pdg != 22 ) continue ;
3810 // Consider only final state particles, but this depends on generator,
3811 // status 1 is the usual one, in case of not being ok, leave the possibility
3812 // to not consider this.
3813 if(status != 1 && GetMCAnalysisUtils()->GetMCGenerator()!="" ) continue ;
3815 // If too small or too large pt, skip, same cut as for data analysis
3816 photonPt = lv.Pt () ;
3818 if(photonPt < GetMinPt() || photonPt > GetMaxPt() ) continue ;
3821 photonEta = lv.Eta() ;
3822 photonPhi = lv.Phi() ;
3824 if(photonPhi < 0) photonPhi+=TMath::TwoPi();
3826 // Check if photons hit the Calorimeter acceptance
3827 if(IsRealCaloAcceptanceOn() && fIsoDetector!="CTS") // defined on base class
3829 if(GetReader()->ReadStack() &&
3830 !GetCaloUtils()->IsMCParticleInCalorimeterAcceptance(fIsoDetector, primStack)) continue ;
3831 if(GetReader()->ReadAODMCParticles() &&
3832 !GetCaloUtils()->IsMCParticleInCalorimeterAcceptance(fIsoDetector, primAOD )) continue ;
3835 // Check same fidutial borders as in data analysis on top of real acceptance if real was requested.
3836 if(!GetFiducialCut()->IsInFiducialCut(lv,fIsoDetector)) continue ;
3838 // Get tag of this particle photon from fragmentation, decay, prompt ...
3839 // Set the origin of the photon.
3840 tag = GetMCAnalysisUtils()->CheckOrigin(i,GetReader());
3842 if(!GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
3844 // A conversion photon from a hadron, skip this kind of photon
3845 // printf("AliAnaPhoton::FillAcceptanceHistograms() - not a photon, weird!\n ");
3846 // GetMCAnalysisUtils()->PrintMCTag(tag);
3852 if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPrompt) )
3854 mcIndex = kmcPrimPrompt;
3856 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCFragmentation) )
3858 mcIndex = kmcPrimFrag ;
3860 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCISR))
3862 mcIndex = kmcPrimISR;
3864 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0Decay))
3866 mcIndex = kmcPrimPi0Decay;
3868 else if( (GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEtaDecay) ||
3869 GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCOtherDecay)))
3871 mcIndex = kmcPrimOtherDecay;
3875 // Other decay but from non final state particle
3876 mcIndex = kmcPrimOtherDecay;
3879 // ////////////////////ISO MC/////////////////////////
3880 Double_t sumPtInCone = 0; Double_t dR=0. ;
3881 TParticle * mcisopStack = 0;
3882 AliAODMCParticle * mcisopAOD = 0;
3883 Int_t partInConeStatus = -1, partInConeMother = -1;
3884 Double_t partInConePt = 0, partInConeEta = 0, partInConePhi = 0;
3886 for(Int_t ip = 0; ip < nprim ; ip++)
3890 if( GetReader()->ReadStack() )
3892 mcisopStack = static_cast<TParticle*>(stack->Particle(ip));
3893 if( !mcisopStack ) continue;
3894 partInConeStatus = mcisopStack->GetStatusCode();
3895 partInConeMother = mcisopStack->GetMother(0);
3896 partInConePt = mcisopStack->Pt();
3897 partInConeEta = mcisopStack->Eta();
3898 partInConePhi = mcisopStack->Phi();
3902 mcisopAOD = (AliAODMCParticle *) mcparticles->At(ip);
3903 if( !mcisopAOD ) continue;
3904 partInConeStatus = mcisopAOD->GetStatus();
3905 partInConeMother = mcisopAOD->GetMother();
3906 partInConePt = mcisopAOD->Pt();
3907 partInConeEta = mcisopAOD->Eta();
3908 partInConePhi = mcisopAOD->Phi();
3911 // Consider only final state particles, but this depends on generator,
3912 // status 1 is the usual one, in case of not being ok, leave the possibility
3913 // to not consider this.
3914 if( partInConeStatus != 1 && GetMCAnalysisUtils()->GetMCGenerator()!="" ) continue ;
3916 if( partInConeMother == i ) continue;
3918 if( partInConePt < GetReader()->GetCTSPtMin() ) continue;
3919 // Careful!!!, cut for TPC tracks and calorimeter clusters in cone can be different
3921 // TVector3 vmcv(mcisop->Px(),mcisop->Py(), mcisop->Pz());
3922 // if(vmcv.Perp()>1)
3926 // Add here Acceptance cut???, charged particles CTS fid cut, neutral Calo real acceptance.
3929 dR = GetIsolationCut()->Radius(photonEta, photonPhi, partInConeEta, partInConePhi);
3931 if(dR > GetIsolationCut()->GetConeSize())
3934 sumPtInCone += partInConePt;
3935 if(partInConePt > GetIsolationCut()->GetPtThreshold() &&
3936 partInConePt < GetIsolationCut()->GetPtThresholdMax()) npart++;
3939 ///////END ISO MC/////////////////////////
3941 // Fill the histograms, only those in the defined calorimeter acceptance
3943 fhEtaPrimMC[kmcPrimPhoton]->Fill(photonPt , photonEta) ;
3944 fhPhiPrimMC[kmcPrimPhoton]->Fill(photonPt , photonPhi) ;
3945 fhEPrimMC [kmcPrimPhoton]->Fill(photonE) ;
3947 fhEtaPrimMC[mcIndex]->Fill(photonPt , photonEta) ;
3948 fhPhiPrimMC[mcIndex]->Fill(photonPt , photonPhi) ;
3949 fhEPrimMC [mcIndex]->Fill(photonE ) ;
3952 Bool_t isolated = kFALSE;
3953 if(GetIsolationCut()->GetICMethod() == AliIsolationCut::kSumPtIC &&
3954 (sumPtInCone < GetIsolationCut()->GetSumPtThreshold() ||
3955 sumPtInCone > GetIsolationCut()->GetSumPtThresholdMax()))
3958 if(GetIsolationCut()->GetICMethod() == AliIsolationCut::kPtThresIC &&
3964 fhPtPrimMCiso [mcIndex] ->Fill(photonPt) ;
3965 fhPtPrimMCiso [kmcPrimPhoton]->Fill(photonPt) ;
3968 }//loop on primaries
3970 if(GetDebug() > 0) printf("AliAnaParticleIsolation::FillAcceptanceHistograms() - End \n");
3975 //_____________________________________________________________________________________
3976 void AliAnaParticleIsolation::MakeSeveralICAnalysis(AliAODPWG4ParticleCorrelation* ph,
3980 //Isolation Cut Analysis for both methods and different pt cuts and cones
3981 Float_t ptC = ph->Pt();
3982 Float_t etaC = ph->Eta();
3983 Float_t phiC = ph->Phi();
3984 Int_t tag = ph->GetTag();
3987 if(fFillTaggedDecayHistograms)
3989 decayTag = ph->GetBtag(); // temporary
3990 if(decayTag < 0) decayTag = 0; // temporary
3994 printf("AliAnaParticleIsolation::MakeSeveralICAnalysis() - Isolate pT %2.2f, decay tag %d\n",ptC, decayTag);
3996 //Keep original setting used when filling AODs, reset at end of analysis
3997 Float_t ptthresorg = GetIsolationCut()->GetPtThreshold();
3998 Float_t ptfracorg = GetIsolationCut()->GetPtFraction();
3999 Float_t ptsumcorg = GetIsolationCut()->GetSumPtThreshold();
4000 Float_t rorg = GetIsolationCut()->GetConeSize();
4002 Float_t coneptsum = 0, coneptlead = 0;
4003 Int_t n [10][10];//[fNCones][fNPtThresFrac];
4004 Int_t nfrac[10][10];//[fNCones][fNPtThresFrac];
4005 Bool_t isolated = kFALSE;
4007 // Fill hist with all particles before isolation criteria
4008 fhENoIso ->Fill(ph->E());
4009 fhPtNoIso ->Fill(ptC);
4010 fhEtaPhiNoIso->Fill(etaC,phiC);
4014 if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
4015 fhPtNoIsoMC[kmcPhoton]->Fill(ptC);
4017 fhPtNoIsoMC[mcIndex]->Fill(ptC);
4020 // Candidates tagged as decay in another analysis (AliAnaPi0EbE)
4021 if(fFillTaggedDecayHistograms && decayTag > 0)
4023 for(Int_t ibit = 0; ibit < fNDecayBits; ibit++)
4025 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[ibit]))
4027 fhPtDecayNoIso[ibit] ->Fill(ptC);
4028 fhEtaPhiDecayNoIso[ibit]->Fill(etaC,phiC);
4032 if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
4033 fhPtDecayNoIsoMC[ibit][kmcPhoton]->Fill(ptC);
4035 fhPtDecayNoIsoMC[ibit][mcIndex]->Fill(ptC);
4039 } // decay histograms
4041 //Get vertex for photon momentum calculation
4042 Double_t vertex[] = {0,0,0} ; //vertex ;
4043 if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
4044 GetReader()->GetVertex(vertex);
4046 //Loop on cone sizes
4047 for(Int_t icone = 0; icone<fNCones; icone++)
4049 //Recover reference arrays with clusters and tracks
4050 TObjArray * refclusters = ph->GetObjArray(GetAODObjArrayName()+"Clusters");
4051 TObjArray * reftracks = ph->GetObjArray(GetAODObjArrayName()+"Tracks");
4053 //If too small or too large pt, skip
4054 if(ptC < GetMinPt() || ptC > GetMaxPt() ) continue ;
4056 //In case a more strict IC is needed in the produced AOD
4058 isolated = kFALSE; coneptsum = 0; coneptlead = 0;
4060 GetIsolationCut()->SetSumPtThreshold(100);
4061 GetIsolationCut()->SetPtThreshold(100);
4062 GetIsolationCut()->SetPtFraction(100);
4063 GetIsolationCut()->SetConeSize(fConeSizes[icone]);
4065 // retreive pt tracks to fill histo vs. pt leading
4066 //Fill pt distribution of particles in cone
4067 //fhPtLeadingPt(),fhPerpSumPtLeadingPt(),fhPerpPtLeadingPt(),
4069 // Tracks in perpendicular cones
4070 Double_t sumptPerp = 0. ;
4071 TObjArray * trackList = GetCTSTracks() ;
4072 for(Int_t itrack=0; itrack < trackList->GetEntriesFast(); itrack++)
4074 AliVTrack* track = (AliVTrack *) trackList->At(itrack);
4075 //fill the histograms at forward range
4078 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Track not available?");
4082 Double_t dPhi = phiC - track->Phi() + TMath::PiOver2();
4083 Double_t dEta = etaC - track->Eta();
4084 Double_t arg = dPhi*dPhi + dEta*dEta;
4085 if(TMath::Sqrt(arg) < fConeSizes[icone])
4087 fhPerpPtLeadingPt[icone]->Fill(ptC,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
4088 sumptPerp+=track->Pt();
4091 dPhi = phiC - track->Phi() - TMath::PiOver2();
4092 arg = dPhi*dPhi + dEta*dEta;
4093 if(TMath::Sqrt(arg) < fConeSizes[icone])
4095 fhPerpPtLeadingPt[icone]->Fill(ptC,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
4096 sumptPerp+=track->Pt();
4100 fhPerpSumPtLeadingPt[icone]->Fill(ptC,sumptPerp);
4102 // Tracks in isolation cone, pT distribution and sum
4103 if(reftracks && GetIsolationCut()->GetParticleTypeInCone()!= AliIsolationCut::kOnlyNeutral)
4105 for(Int_t itrack=0; itrack < reftracks->GetEntriesFast(); itrack++)
4107 AliVTrack* track = (AliVTrack *) reftracks->At(itrack);
4109 Float_t rad = GetIsolationCut()->Radius(etaC, phiC, track->Eta(), track->Phi());
4111 if(rad > fConeSizes[icone]) continue ;
4113 fhPtLeadingPt[icone]->Fill(ptC, track->Pt());
4114 coneptsum += track->Pt();
4118 // Clusters in isolation cone, pT distribution and sum
4119 if(refclusters && GetIsolationCut()->GetParticleTypeInCone()!= AliIsolationCut::kOnlyCharged)
4121 TLorentzVector mom ;
4122 for(Int_t icalo=0; icalo < refclusters->GetEntriesFast(); icalo++)
4124 AliVCluster* calo = (AliVCluster *) refclusters->At(icalo);
4126 calo->GetMomentum(mom,vertex) ;//Assume that come from vertex in straight line
4128 Float_t rad = GetIsolationCut()->Radius(etaC, phiC, mom.Eta(), mom.Phi());
4130 if(rad > fConeSizes[icone]) continue ;
4132 fhPtLeadingPt[icone]->Fill(ptC, mom.Pt());
4133 coneptsum += mom.Pt();
4137 fhSumPtLeadingPt[icone]->Fill(ptC,coneptsum);
4141 if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
4142 fhSumPtLeadingPtMC[kmcPhoton][icone]->Fill(ptC,coneptsum) ;
4144 fhSumPtLeadingPtMC[mcIndex][icone]->Fill(ptC,coneptsum) ;
4149 //Loop on pt thresholds
4150 for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
4153 nfrac[icone][ipt]=0;
4154 GetIsolationCut()->SetPtThreshold(fPtThresholds[ipt]);
4155 GetIsolationCut()->SetPtFraction(fPtFractions[ipt]) ;
4156 GetIsolationCut()->SetSumPtThreshold(fSumPtThresholds[ipt]);
4158 GetIsolationCut()->MakeIsolationCut(reftracks, refclusters,
4159 GetReader(), GetCaloPID(),
4161 n[icone][ipt],nfrac[icone][ipt],
4162 coneptsum, coneptlead, isolated);
4164 // Normal pT threshold cut
4168 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - cone size %1.1f, ptThres %1.1f, sumptThresh %1.1f\n",
4169 fConeSizes[icone],fPtThresholds[ipt],fSumPtThresholds[ipt]);
4170 printf("\t n %d, nfrac %d, coneptsum %2.2f\n",
4171 n[icone][ipt],nfrac[icone][ipt],coneptsum);
4173 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - pt %1.1f, eta %1.1f, phi %1.1f\n",ptC, etaC, phiC);
4176 if(n[icone][ipt] == 0)
4179 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling pt threshold loop\n");
4181 fhPtThresIsolated [icone][ipt]->Fill(ptC);
4182 fhEtaPhiPtThresIso[icone][ipt]->Fill(etaC,phiC);
4184 if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
4186 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
4188 fhPtPtThresDecayIso [icone][ipt]->Fill(ptC);
4189 fhEtaPhiPtThresDecayIso[icone][ipt]->Fill(etaC,phiC);
4195 if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton) )
4196 fhPtThresIsolatedMC[kmcPhoton][icone][ipt]->Fill(ptC) ;
4198 fhPtThresIsolatedMC[mcIndex][icone][ipt]->Fill(ptC) ;
4203 // pt in cone fraction
4204 if(nfrac[icone][ipt] == 0)
4207 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling frac loop\n");
4209 fhPtFracIsolated [icone][ipt]->Fill(ptC);
4210 fhEtaPhiPtFracIso[icone][ipt]->Fill(etaC,phiC);
4212 if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
4214 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
4216 fhPtPtFracDecayIso [icone][ipt]->Fill(ptC);
4217 fhEtaPhiPtFracDecayIso[icone][ipt]->Fill(etaC,phiC);
4223 if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
4224 fhPtFracIsolatedMC[kmcPhoton][icone][ipt]->Fill(ptC) ;
4226 fhPtFracIsolatedMC[mcIndex][icone][ipt]->Fill(ptC) ;
4231 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - checking IC method : %i\n",GetIsolationCut()->GetICMethod());
4233 //Pt threshold on pt cand/ sum in cone histograms
4234 if(coneptsum < fSumPtThresholds[ipt])
4237 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling sum loop\n");
4239 fhSumPtIsolated [icone][ipt]->Fill(ptC) ;
4240 fhEtaPhiPtSumIso[icone][ipt]->Fill(etaC, phiC) ;
4242 if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
4244 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
4246 fhPtPtSumDecayIso[icone][ipt]->Fill(ptC);
4247 fhEtaPhiPtSumDecayIso[icone][ipt]->Fill(etaC, phiC) ;
4253 if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
4254 fhSumPtIsolatedMC[kmcPhoton][icone][ipt]->Fill(ptC) ;
4256 fhSumPtIsolatedMC[mcIndex][icone][ipt]->Fill(ptC) ;
4260 // pt sum pt frac method
4261 // if( ((fPtFractions[ipt]*ptC < fSumPtThresholds[ipt]) && (coneptsum < fSumPtThresholds[ipt])) || ((fPtFractions[ipt]*ptC > fSumPtThresholds[ipt]) && (coneptsum < fPtFractions[ipt]*ptC)) )
4263 if(coneptsum < fPtFractions[ipt]*ptC)
4266 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling PtFrac PtSum loop\n");
4268 fhPtFracPtSumIso [icone][ipt]->Fill(ptC) ;
4269 fhEtaPhiFracPtSumIso[icone][ipt]->Fill(etaC,phiC) ;
4271 if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
4273 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
4275 fhPtFracPtSumDecayIso [icone][ipt]->Fill(ptC);
4276 fhEtaPhiFracPtSumDecayIso[icone][ipt]->Fill(etaC,phiC);
4282 Float_t cellDensity = GetIsolationCut()->GetCellDensity( ph, GetReader());
4283 if(coneptsum < fSumPtThresholds[ipt]*cellDensity)
4286 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling density loop\n");
4288 fhPtSumDensityIso [icone][ipt]->Fill(ptC) ;
4289 fhEtaPhiSumDensityIso[icone][ipt]->Fill(etaC,phiC) ;
4291 if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
4293 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
4295 fhPtSumDensityDecayIso [icone][ipt]->Fill(ptC);
4296 fhEtaPhiSumDensityDecayIso[icone][ipt]->Fill(etaC, phiC);
4305 //Reset original parameters for AOD analysis
4306 GetIsolationCut()->SetPtThreshold(ptthresorg);
4307 GetIsolationCut()->SetPtFraction(ptfracorg);
4308 GetIsolationCut()->SetSumPtThreshold(ptsumcorg);
4309 GetIsolationCut()->SetConeSize(rorg);
4313 //_____________________________________________________________
4314 void AliAnaParticleIsolation::Print(const Option_t * opt) const
4317 //Print some relevant parameters set for the analysis
4321 printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
4322 AliAnaCaloTrackCorrBaseClass::Print(" ");
4324 printf("ReMake Isolation = %d \n", fReMakeIC) ;
4325 printf("Make Several Isolation = %d \n", fMakeSeveralIC) ;
4326 printf("Calorimeter for isolation = %s \n", fCalorimeter.Data()) ;
4327 printf("Detector for candidate isolation = %s \n", fIsoDetector.Data()) ;
4331 printf("N Cone Sizes = %d\n", fNCones) ;
4332 printf("Cone Sizes = \n") ;
4333 for(Int_t i = 0; i < fNCones; i++)
4334 printf(" %1.2f;", fConeSizes[i]) ;
4337 printf("N pT thresholds/fractions = %d\n", fNPtThresFrac) ;
4338 printf(" pT thresholds = \n") ;
4339 for(Int_t i = 0; i < fNPtThresFrac; i++)
4340 printf(" %2.2f;", fPtThresholds[i]) ;
4344 printf(" pT fractions = \n") ;
4345 for(Int_t i = 0; i < fNPtThresFrac; i++)
4346 printf(" %2.2f;", fPtFractions[i]) ;
4350 printf("sum pT thresholds = \n") ;
4351 for(Int_t i = 0; i < fNPtThresFrac; i++)
4352 printf(" %2.2f;", fSumPtThresholds[i]) ;