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),
75 fNCones(0), fNPtThresFrac(0),
76 fConeSizes(), fPtThresholds(),
77 fPtFractions(), fSumPtThresholds(),
79 fhEIso(0), fhPtIso(0),
80 fhPtCentralityIso(0), fhPtEventPlaneIso(0),
82 fhPhiIso(0), fhEtaIso(0), fhEtaPhiIso(0),
84 fhENoIso(0), fhPtNoIso(0), fhPtNLocMaxNoIso(0),
86 fhPtClusterInCone(0), fhPtCellInCone(0), fhPtTrackInCone(0),
87 fhPtTrackInConeOtherBC(0), fhPtTrackInConeOtherBCPileUpSPD(0),
88 fhPtTrackInConeBC0(0), fhPtTrackInConeVtxBC0(0),
89 fhPtTrackInConeBC0PileUpSPD(0),
90 fhPtInConePileUp(), fhPtInConeCent(0),
91 fhPerpConeSumPt(0), fhPtInPerpCone(0),
92 fhEtaPhiInConeCluster(0), fhEtaPhiCluster(0),
93 fhEtaPhiInConeTrack(0), fhEtaPhiTrack(0),
94 fhEtaBandCluster(0), fhPhiBandCluster(0),
95 fhEtaBandTrack(0), fhPhiBandTrack(0),
96 fhEtaBandCell(0), fhPhiBandCell(0),
97 fhConeSumPt(0), fhConeSumPtCellTrack(0),
98 fhConeSumPtCell(0), fhConeSumPtCluster(0), fhConeSumPtTrack(0),
99 fhConeSumPtEtaBandUECluster(0), fhConeSumPtPhiBandUECluster(0),
100 fhConeSumPtEtaBandUETrack(0), fhConeSumPtPhiBandUETrack(0),
101 fhConeSumPtEtaBandUECell(0), fhConeSumPtPhiBandUECell(0),
102 fhConeSumPtTrigEtaPhi(0),
103 fhConeSumPtCellTrackTrigEtaPhi(0),
104 fhConeSumPtEtaBandUEClusterTrigEtaPhi(0), fhConeSumPtPhiBandUEClusterTrigEtaPhi(0),
105 fhConeSumPtEtaBandUETrackTrigEtaPhi(0), fhConeSumPtPhiBandUETrackTrigEtaPhi(0),
106 fhConeSumPtEtaBandUECellTrigEtaPhi(0), fhConeSumPtPhiBandUECellTrigEtaPhi(0),
107 fhConeSumPtEtaUESub(0), fhConeSumPtPhiUESub(0),
108 fhConeSumPtEtaUESubTrigEtaPhi(0), fhConeSumPtPhiUESubTrigEtaPhi(0),
109 fhConeSumPtEtaUESubTrackCell(0), fhConeSumPtPhiUESubTrackCell(0),
110 fhConeSumPtEtaUESubTrackCellTrigEtaPhi(0), fhConeSumPtPhiUESubTrackCellTrigEtaPhi(0),
111 fhConeSumPtEtaUESubCluster(0), fhConeSumPtPhiUESubCluster(0),
112 fhConeSumPtEtaUESubClusterTrigEtaPhi(0), fhConeSumPtPhiUESubClusterTrigEtaPhi(0),
113 fhConeSumPtEtaUESubCell(0), fhConeSumPtPhiUESubCell(0),
114 fhConeSumPtEtaUESubCellTrigEtaPhi(0), fhConeSumPtPhiUESubCellTrigEtaPhi(0),
115 fhConeSumPtEtaUESubTrack(0), fhConeSumPtPhiUESubTrack(0),
116 fhConeSumPtEtaUESubTrackTrigEtaPhi(0), fhConeSumPtPhiUESubTrackTrigEtaPhi(0),
117 fhFractionTrackOutConeEta(0), fhFractionTrackOutConeEtaTrigEtaPhi(0),
118 fhFractionClusterOutConeEta(0), fhFractionClusterOutConeEtaTrigEtaPhi(0),
119 fhFractionClusterOutConePhi(0), fhFractionClusterOutConePhiTrigEtaPhi(0),
120 fhFractionCellOutConeEta(0), fhFractionCellOutConeEtaTrigEtaPhi(0),
121 fhFractionCellOutConePhi(0), fhFractionCellOutConePhiTrigEtaPhi(0),
122 fhConeSumPtClustervsTrack(0),
123 fhConeSumPtEtaUESubClustervsTrack(0), fhConeSumPtPhiUESubClustervsTrack(0),
124 fhConeSumPtCellvsTrack(0),
125 fhConeSumPtEtaUESubCellvsTrack(0), fhConeSumPtPhiUESubCellvsTrack(0),
126 fhEtaBandClustervsTrack(0), fhPhiBandClustervsTrack(0),
127 fhEtaBandNormClustervsTrack(0), fhPhiBandNormClustervsTrack(0),
128 fhEtaBandCellvsTrack(0), fhPhiBandCellvsTrack(0),
129 fhEtaBandNormCellvsTrack(0), fhPhiBandNormCellvsTrack(0),
130 fhConeSumPtSubvsConeSumPtTotPhiTrack(0), fhConeSumPtSubNormvsConeSumPtTotPhiTrack(0),
131 fhConeSumPtSubvsConeSumPtTotEtaTrack(0), fhConeSumPtSubNormvsConeSumPtTotEtaTrack(0),
132 fhConeSumPtSubvsConeSumPtTotPhiCluster(0), fhConeSumPtSubNormvsConeSumPtTotPhiCluster(0),
133 fhConeSumPtSubvsConeSumPtTotEtaCluster(0), fhConeSumPtSubNormvsConeSumPtTotEtaCluster(0),
134 fhConeSumPtSubvsConeSumPtTotPhiCell(0), fhConeSumPtSubNormvsConeSumPtTotPhiCell(0),
135 fhConeSumPtSubvsConeSumPtTotEtaCell(0), fhConeSumPtSubNormvsConeSumPtTotEtaCell(0),
136 fhConeSumPtVSUETracksEtaBand(0), fhConeSumPtVSUETracksPhiBand(0),
137 fhConeSumPtVSUEClusterEtaBand(0), fhConeSumPtVSUEClusterPhiBand(0),
139 // Number of local maxima in cluster
141 fhELambda0LocMax1(), fhELambda1LocMax1(),
142 fhELambda0LocMax2(), fhELambda1LocMax2(),
143 fhELambda0LocMaxN(), fhELambda1LocMaxN(),
145 fhEIsoPileUp(), fhPtIsoPileUp(),
146 fhENoIsoPileUp(), fhPtNoIsoPileUp(),
147 fhTimeENoCut(0), fhTimeESPD(0), fhTimeESPDMulti(0),
148 fhTimeNPileUpVertSPD(0), fhTimeNPileUpVertTrack(0),
149 fhTimeNPileUpVertContributors(0),
150 fhTimePileUpMainVertexZDistance(0), fhTimePileUpMainVertexZDiamond(0)
154 //Initialize parameters
157 for(Int_t i = 0; i < 5 ; i++)
161 for(Int_t imc = 0; imc < 9; imc++)
162 fhSumPtLeadingPtMC[imc][i] = 0 ;
164 for(Int_t j = 0; j < 5 ; j++)
166 fhPtThresIsolated [i][j] = 0 ;
167 fhPtFracIsolated [i][j] = 0 ;
168 fhSumPtIsolated [i][j] = 0 ;
170 fhEtaPhiPtThresIso [i][j] = 0 ;
171 fhEtaPhiPtThresDecayIso [i][j] = 0 ;
172 fhPtPtThresDecayIso [i][j] = 0 ;
174 fhEtaPhiPtFracIso [i][j] = 0 ;
175 fhEtaPhiPtFracDecayIso [i][j] = 0 ;
176 fhPtPtFracDecayIso [i][j] = 0 ;
177 fhPtPtSumDecayIso [i][j] = 0 ;
178 fhPtSumDensityIso [i][j] = 0 ;
179 fhPtSumDensityDecayIso [i][j] = 0 ;
180 fhEtaPhiSumDensityIso [i][j] = 0 ;
181 fhEtaPhiSumDensityDecayIso [i][j] = 0 ;
182 fhPtFracPtSumIso [i][j] = 0 ;
183 fhPtFracPtSumDecayIso [i][j] = 0 ;
184 fhEtaPhiFracPtSumIso [i][j] = 0 ;
185 fhEtaPhiFracPtSumDecayIso [i][j] = 0 ;
187 for(Int_t imc = 0; imc < 9; imc++)
189 fhPtThresIsolatedMC[imc][i][j] = 0 ;
190 fhPtFracIsolatedMC [imc][i][j] = 0 ;
191 fhSumPtIsolatedMC [imc][i][j] = 0 ;
197 for(Int_t ibit =0; ibit< 4; ibit++)
199 fhPtDecayIso [ibit] = 0;
200 fhPtDecayNoIso [ibit] = 0;
201 fhEtaPhiDecayIso [ibit] = 0;
202 fhEtaPhiDecayNoIso[ibit] = 0;
203 for(Int_t imc = 0; imc < 9; imc++)
205 fhPtDecayIsoMC [ibit][imc] = 0;
206 fhPtDecayNoIsoMC[ibit][imc] = 0;
210 for(Int_t i = 0; i < 5 ; i++)
212 fPtFractions [i] = 0 ;
213 fPtThresholds [i] = 0 ;
214 fSumPtThresholds[i] = 0 ;
216 fhSumPtLeadingPt [i] = 0 ;
217 fhPtLeadingPt [i] = 0 ;
218 fhPerpSumPtLeadingPt[i] = 0 ;
219 fhPerpPtLeadingPt [i] = 0 ;
222 for(Int_t imc = 0; imc < 9; imc++)
224 fhPtNoIsoMC [imc] = 0;
226 fhPhiIsoMC [imc] = 0;
227 fhEtaIsoMC [imc] = 0;
228 fhPtLambda0MC[imc][0] = 0;
229 fhPtLambda0MC[imc][1] = 0;
232 for(Int_t i = 0; i < 2 ; i++)
234 fhTrackMatchedDEta[i] = 0 ; fhTrackMatchedDPhi[i] = 0 ; fhTrackMatchedDEtaDPhi [i] = 0 ;
235 fhdEdx [i] = 0 ; fhEOverP [i] = 0 ; fhTrackMatchedMCParticle[i] = 0 ;
236 fhELambda0 [i] = 0 ; fhELambda1 [i] = 0 ; fhPtLambda0 [i] = 0 ;
237 fhELambda0TRD [i] = 0 ; fhELambda1TRD [i] = 0 ; fhPtLambda0TRD [i] = 0 ;
239 // Number of local maxima in cluster
241 fhELambda0LocMax1[i] = 0 ; fhELambda1LocMax1[i] = 0 ;
242 fhELambda0LocMax2[i] = 0 ; fhELambda1LocMax2[i] = 0 ;
243 fhELambda0LocMaxN[i] = 0 ; fhELambda1LocMaxN[i] = 0 ;
247 for(Int_t i = 0; i < 6; i++)
249 fhPtPrimMCiso[i] = 0;
257 for(Int_t i = 0 ; i < 7 ; i++)
259 fhPtInConePileUp[i] = 0 ;
260 fhEIsoPileUp [i] = 0 ;
261 fhPtIsoPileUp [i] = 0 ;
262 fhENoIsoPileUp [i] = 0 ;
263 fhPtNoIsoPileUp [i] = 0 ;
268 //_______________________________________________________________________________________________
269 void AliAnaParticleIsolation::CalculateCaloUEBand(AliAODPWG4ParticleCorrelation * pCandidate,
270 Float_t & etaBandPtSum, Float_t & phiBandPtSum)
272 // Get the clusters pT or sum of pT in phi/eta bands or at 45 degrees from trigger
274 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyCharged ) return ;
276 Float_t conesize = GetIsolationCut()->GetConeSize();
279 //Select the Calorimeter
280 TObjArray * pl = 0x0;
281 if (fCalorimeter == "PHOS" )
282 pl = GetPHOSClusters();
283 else if (fCalorimeter == "EMCAL")
284 pl = GetEMCALClusters();
288 //Get vertex for cluster momentum calculation
289 Double_t vertex[] = {0,0,0} ; //vertex ;
290 if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
291 GetReader()->GetVertex(vertex);
293 Float_t ptTrig = pCandidate->Pt() ;
294 Float_t phiTrig = pCandidate->Phi();
295 Float_t etaTrig = pCandidate->Eta();
297 for(Int_t icluster=0; icluster < pl->GetEntriesFast(); icluster++)
299 AliVCluster* cluster = (AliVCluster *) pl->At(icluster);
303 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Cluster not available?");
307 //Do not count the candidate (photon or pi0) or the daughters of the candidate
308 if(cluster->GetID() == pCandidate->GetCaloLabel(0) ||
309 cluster->GetID() == pCandidate->GetCaloLabel(1) ) continue ;
311 //Remove matched clusters to tracks if Neutral and Track info is used
312 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kNeutralAndCharged &&
313 IsTrackMatched(cluster,GetReader()->GetInputEvent())) continue ;
315 cluster->GetMomentum(mom,vertex) ;//Assume that come from vertex in straight line
317 //exclude particles in cone
318 Float_t rad = GetIsolationCut()->Radius(etaTrig, phiTrig, mom.Eta(), mom.Phi());
320 // histo of eta and phi for all clusters
321 fhEtaPhiCluster->Fill(mom.Eta(), mom.Phi());
323 // histos for all clusters in cone
324 fhEtaPhiInConeCluster->Fill(mom.Eta(), mom.Phi());
327 //fill histogram for UE in phi band in EMCal acceptance
328 if(mom.Eta() > (etaTrig-conesize) && mom.Eta() < (etaTrig+conesize))
330 phiBandPtSum+=mom.Pt();
331 fhPhiBandCluster->Fill(mom.Eta(),mom.Phi());
335 //fill histogram for UE in eta band in EMCal acceptance
336 if(mom.Phi() > (phiTrig-conesize) && mom.Phi() < (phiTrig+conesize))
338 etaBandPtSum+=mom.Pt();
339 fhEtaBandCluster->Fill(mom.Eta(),mom.Phi());
343 fhConeSumPtEtaBandUECluster ->Fill(ptTrig , etaBandPtSum);
344 fhConeSumPtPhiBandUECluster ->Fill(ptTrig , phiBandPtSum);
345 fhConeSumPtEtaBandUEClusterTrigEtaPhi->Fill(etaTrig,phiTrig,etaBandPtSum);
346 fhConeSumPtPhiBandUEClusterTrigEtaPhi->Fill(etaTrig,phiTrig,phiBandPtSum);
350 //________________________________________________________________________________________________
351 void AliAnaParticleIsolation::CalculateCaloCellUEBand(AliAODPWG4ParticleCorrelation * pCandidate,
352 Float_t & etaBandPtSumCells, Float_t & phiBandPtSumCells)
354 // Get the cells amplitude or sum of amplitude in phi/eta bands or at 45 degrees from trigger
356 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyCharged ) return ;
358 Float_t conesize = GetIsolationCut()->GetConeSize();
360 Float_t phiTrig = pCandidate->Phi();
361 if(phiTrig<0) phiTrig += TMath::TwoPi();
362 Float_t etaTrig = pCandidate->Eta();
364 if(pCandidate->GetDetector()=="EMCAL")
366 AliEMCALGeometry* eGeom = AliEMCALGeometry::GetInstance();
369 if (eGeom->GetAbsCellIdFromEtaPhi(etaTrig,phiTrig,absId))
371 if(!eGeom->CheckAbsCellId(absId)) return ;
373 // Get absolute (col,row) of trigger particle
374 Int_t nSupMod = eGeom->GetSuperModuleNumber(absId);
376 Int_t imEta=-1, imPhi=-1;
377 Int_t ieta =-1, iphi =-1;
379 if (eGeom->GetCellIndex(absId,nSupMod,nModule,imPhi,imEta))
381 eGeom->GetCellPhiEtaIndexInSModule(nSupMod,nModule,imPhi,imEta,iphi,ieta);
383 Int_t colTrig = ieta;
384 if (nSupMod % 2) colTrig = AliEMCALGeoParams::fgkEMCALCols + ieta ;
385 Int_t rowTrig = iphi + AliEMCALGeoParams::fgkEMCALRows*int(nSupMod/2);
387 Int_t sqrSize = int(conesize/0.0143);
389 AliVCaloCells * cells = GetEMCALCells();
391 Int_t nTotalRows = AliEMCALGeoParams::fgkEMCALRows*16/3 ; // 24*(16/3) 5 full-size Sectors (2 SM) + 1 one-third Sector (2 SM)
392 Int_t nTotalCols = 2*AliEMCALGeoParams::fgkEMCALCols;
393 // printf("nTotalRows %i, nTotalCols %i\n",nTotalRows,nTotalCols);
394 // Loop on cells in eta band
396 Int_t irowmin = rowTrig-sqrSize;
397 if(irowmin<0) irowmin=0;
398 Int_t irowmax = rowTrig+sqrSize;
399 if(irowmax>AliEMCALGeoParams::fgkEMCALRows) irowmax=AliEMCALGeoParams::fgkEMCALRows;
402 for(Int_t irow = irowmin; irow <irowmax; irow++)
404 for(Int_t icol = 0; icol < nTotalCols; icol++)
406 Int_t inSector = int(irow/AliEMCALGeoParams::fgkEMCALRows);
407 if(inSector==5) continue;
410 if(icol < AliEMCALGeoParams::fgkEMCALCols)
412 inSupMod = 2*inSector + 1;
415 else if(icol > AliEMCALGeoParams::fgkEMCALCols - 1)
417 inSupMod = 2*inSector;
418 icolLoc = icol-AliEMCALGeoParams::fgkEMCALCols;
421 Int_t irowLoc = irow - AliEMCALGeoParams::fgkEMCALRows*inSector ;
423 // Exclude cells in cone
424 if(TMath::Abs(icol-colTrig) < sqrSize || TMath::Abs(irow-rowTrig) < sqrSize){
427 Int_t iabsId = eGeom->GetAbsCellIdFromCellIndexes(inSupMod,irowLoc,icolLoc);
428 if(!eGeom->CheckAbsCellId(iabsId)) continue;
429 etaBandPtSumCells += cells->GetCellAmplitude(iabsId);
430 fhEtaBandCell->Fill(colTrig,rowTrig);
432 // printf("ETA inSupMod %i,irowLoc %i,icolLoc %i, iabsId %i, etaBandPtSumCells %f\n",nSupMod,irowLoc,icolLoc,iabsId,etaBandPtSumCells);
435 Int_t icolmin = colTrig-sqrSize;
436 if(icolmin<0) icolmin=0;
437 Int_t icolmax = colTrig+sqrSize;
438 if(icolmax>AliEMCALGeoParams::fgkEMCALCols) icolmax=AliEMCALGeoParams::fgkEMCALCols;
440 // Loop on cells in phi band
441 for(Int_t icol = icolmin; icol < icolmax; icol++)
443 for(Int_t irow = 0; irow < nTotalRows; irow++)
445 Int_t inSector = int(irow/AliEMCALGeoParams::fgkEMCALRows);
446 if(inSector==5) continue;
449 // printf("icol %i, irow %i, inSector %i\n",icol,irow ,inSector);
450 if(icol < AliEMCALGeoParams::fgkEMCALCols)
452 // printf("icol < AliEMCALGeoParams::fgkEMCALCols %i\n",AliEMCALGeoParams::fgkEMCALCols );
453 inSupMod = 2*inSector + 1;
456 else if(icol > AliEMCALGeoParams::fgkEMCALCols - 1)
458 // printf("icol > AliEMCALGeoParams::fgkEMCALCols -1 %i\n",AliEMCALGeoParams::fgkEMCALCols -1 );
459 inSupMod = 2*inSector;
460 icolLoc = icol-AliEMCALGeoParams::fgkEMCALCols;
463 Int_t irowLoc = irow - AliEMCALGeoParams::fgkEMCALRows*inSector ; // Stesso problema di sopra //
465 // Exclude cells in cone
466 if(TMath::Abs(icol-colTrig) < sqrSize) {
467 //printf("TMath::Abs(icol-colTrig) %i < sqrSize %i\n",TMath::Abs(icol-colTrig) ,sqrSize);continue ;
469 if(TMath::Abs(irow-rowTrig) < sqrSize) {
470 //printf("TMath::Abs(irow-rowTrig) %i < sqrSize %i\n",TMath::Abs(irow-rowTrig) ,sqrSize);continue ;
473 Int_t iabsId = eGeom->GetAbsCellIdFromCellIndexes(inSupMod,irowLoc,icolLoc);
474 if(!eGeom->CheckAbsCellId(iabsId)) {printf("!eGeom->CheckAbsCellId(iabsId=%i) inSupMod %i irowLoc %i icolLoc %i \n",iabsId,inSupMod, irowLoc, icolLoc);continue;}
475 phiBandPtSumCells += cells->GetCellAmplitude(iabsId);
476 fhPhiBandCell->Fill(colTrig,rowTrig);
477 //printf("inSupMod %i,irowLoc %i,icolLoc %i, iabsId %i, phiBandPtSumCells %f\n",nSupMod,irowLoc,icolLoc,iabsId,phiBandPtSumCells);
484 Float_t ptTrig = pCandidate->Pt();
486 fhConeSumPtEtaBandUECell ->Fill(ptTrig , etaBandPtSumCells);
487 fhConeSumPtPhiBandUECell ->Fill(ptTrig , phiBandPtSumCells);
488 fhConeSumPtEtaBandUECellTrigEtaPhi->Fill(etaTrig,phiTrig,etaBandPtSumCells);
489 fhConeSumPtPhiBandUECellTrigEtaPhi->Fill(etaTrig,phiTrig,phiBandPtSumCells);
493 //________________________________________________________________________________________________
494 void AliAnaParticleIsolation::CalculateTrackUEBand(AliAODPWG4ParticleCorrelation * pCandidate,
495 Float_t & etaBandPtSum, Float_t & phiBandPtSum)
497 // Get the track pT or sum of pT in phi/eta bands or at 45 degrees from trigger
499 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyNeutral ) return ;
501 Float_t conesize = GetIsolationCut()->GetConeSize();
503 Double_t sumptPerp= 0. ;
504 Float_t ptTrig = pCandidate->Pt() ;
505 Float_t phiTrig = pCandidate->Phi();
506 Float_t etaTrig = pCandidate->Eta();
508 TObjArray * trackList = GetCTSTracks() ;
509 for(Int_t itrack=0; itrack < trackList->GetEntriesFast(); itrack++)
511 AliVTrack* track = (AliVTrack *) trackList->At(itrack);
515 printf("AliAnaParticleIsolation::CalculateTrackUEBand() - Track not available?");
519 //Do not count the candidate (pion, conversion photon) or the daughters of the candidate
520 if(track->GetID() == pCandidate->GetTrackLabel(0) || track->GetID() == pCandidate->GetTrackLabel(1) ||
521 track->GetID() == pCandidate->GetTrackLabel(2) || track->GetID() == pCandidate->GetTrackLabel(3) ) continue ;
523 // histo of eta:phi for all tracks
524 fhEtaPhiTrack->Fill(track->Eta(),track->Phi());
526 //exclude particles in cone
527 Float_t rad = GetIsolationCut()->Radius(etaTrig, phiTrig, track->Eta(), track->Phi());
529 // histo of eta:phi for all tracks in cone
530 fhEtaPhiInConeTrack->Fill(track->Eta(),track->Phi());
534 //fill histogram for UE in phi band
535 if(track->Eta() > (etaTrig-conesize) && track->Eta() < (etaTrig+conesize))
537 phiBandPtSum+=track->Pt();
538 fhPhiBandTrack->Fill(track->Eta(),track->Phi());
541 //fill histogram for UE in eta band in EMCal acceptance
542 if(track->Phi() > (phiTrig-conesize) && track->Phi() < (phiTrig+conesize))
544 etaBandPtSum+=track->Pt();
545 fhEtaBandTrack->Fill(track->Eta(),track->Phi());
548 //fill the histograms at +-45 degrees in phi from trigger particle, perpedicular to trigger axis in phi
549 Double_t dPhi = phiTrig - track->Phi() + TMath::PiOver2();
550 Double_t dEta = etaTrig - track->Eta();
551 Double_t arg = dPhi*dPhi + dEta*dEta;
552 if(TMath::Sqrt(arg) < conesize)
554 fhPtInPerpCone->Fill(ptTrig,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
555 sumptPerp+=track->Pt();
558 dPhi = phiTrig - track->Phi() - TMath::PiOver2();
559 arg = dPhi*dPhi + dEta*dEta;
560 if(TMath::Sqrt(arg) < conesize)
562 fhPtInPerpCone->Fill(ptTrig,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
563 sumptPerp+=track->Pt();
567 fhPerpConeSumPt ->Fill(ptTrig , sumptPerp );
568 fhConeSumPtEtaBandUETrack ->Fill(ptTrig , etaBandPtSum);
569 fhConeSumPtPhiBandUETrack ->Fill(ptTrig , phiBandPtSum);
570 fhConeSumPtEtaBandUETrackTrigEtaPhi->Fill(etaTrig,phiTrig,etaBandPtSum);
571 fhConeSumPtPhiBandUETrackTrigEtaPhi->Fill(etaTrig,phiTrig,phiBandPtSum);
577 //_____________________________________________________________________________________________________________________________________
578 void AliAnaParticleIsolation::CalculateNormalizeUEBandPerUnitArea(AliAODPWG4ParticleCorrelation * pCandidate, Float_t coneptsumCluster,
579 Float_t coneptsumCell, Float_t coneptsumTrack,
580 Float_t &etaBandptsumTrackNorm, Float_t &etaBandptsumClusterNorm)
582 //normalize phi/eta band per area unit
584 Float_t etaUEptsumTrack = 0 ;
585 Float_t phiUEptsumTrack = 0 ;
586 Float_t etaUEptsumCluster = 0 ;
587 Float_t phiUEptsumCluster = 0 ;
588 Float_t etaUEptsumCell = 0 ;
589 Float_t phiUEptsumCell = 0 ;
591 Int_t partTypeInCone = GetIsolationCut()->GetParticleTypeInCone();
593 // Do the normalization
595 Float_t conesize = GetIsolationCut()->GetConeSize();
596 Float_t coneA = conesize*conesize*TMath::Pi(); // A = pi R^2, isolation cone area
597 Float_t ptTrig = pCandidate->Pt() ;
598 Float_t phiTrig = pCandidate->Phi();
599 Float_t etaTrig = pCandidate->Eta();
605 Float_t phiUEptsumTrackNorm = 0 ;
606 Float_t etaUEptsumTrackNorm = 0 ;
607 Float_t coneptsumTrackSubPhi = 0 ;
608 Float_t coneptsumTrackSubEta = 0 ;
609 Float_t coneptsumTrackSubPhiNorm = 0 ;
610 Float_t coneptsumTrackSubEtaNorm = 0 ;
611 etaBandptsumTrackNorm = 0 ;
613 if( partTypeInCone!=AliIsolationCut::kOnlyNeutral )
615 // Sum the pT in the phi or eta band for clusters or tracks
616 CalculateTrackUEBand (pCandidate,etaUEptsumTrack ,phiUEptsumTrack );// rajouter ici l'histo eta phi
619 fhConeSumPtVSUETracksEtaBand->Fill(coneptsumTrack,etaUEptsumTrack);
620 fhConeSumPtVSUETracksPhiBand->Fill(coneptsumTrack,phiUEptsumTrack);
623 Float_t correctConeSumTrack = 1;
624 Float_t correctConeSumTrackPhi = 1;
626 GetIsolationCut()->CalculateUEBandTrackNormalization(GetReader(),etaTrig, phiTrig,
627 phiUEptsumTrack,etaUEptsumTrack,
628 phiUEptsumTrackNorm,etaUEptsumTrackNorm,
629 correctConeSumTrack,correctConeSumTrackPhi);
631 coneptsumTrackSubPhi = coneptsumTrack - phiUEptsumTrackNorm;
632 coneptsumTrackSubEta = coneptsumTrack - etaUEptsumTrackNorm;
634 etaBandptsumTrackNorm = etaUEptsumTrackNorm;
636 fhConeSumPtPhiUESubTrack ->Fill(ptTrig , coneptsumTrackSubPhi);
637 fhConeSumPtPhiUESubTrackTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumTrackSubPhi);
638 fhConeSumPtEtaUESubTrack ->Fill(ptTrig , coneptsumTrackSubEta);
639 fhConeSumPtEtaUESubTrackTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumTrackSubEta);
641 fhFractionTrackOutConeEta ->Fill(ptTrig , correctConeSumTrack-1);
642 fhFractionTrackOutConeEtaTrigEtaPhi->Fill(etaTrig, phiTrig,correctConeSumTrack-1);
644 if(coneptsumTrack > 0)
646 coneptsumTrackSubPhiNorm = coneptsumTrackSubPhi/coneptsumTrack;
647 coneptsumTrackSubEtaNorm = coneptsumTrackSubEta/coneptsumTrack;
650 fhConeSumPtSubvsConeSumPtTotPhiTrack ->Fill(coneptsumTrack,coneptsumTrackSubPhi);
651 fhConeSumPtSubNormvsConeSumPtTotPhiTrack->Fill(coneptsumTrack,coneptsumTrackSubPhiNorm);
652 fhConeSumPtSubvsConeSumPtTotEtaTrack ->Fill(coneptsumTrack,coneptsumTrackSubEta);
653 fhConeSumPtSubNormvsConeSumPtTotEtaTrack->Fill(coneptsumTrack,coneptsumTrackSubEtaNorm);
657 // ------------------------ //
658 // EMCal Clusters and cells //
659 // ------------------------ //
660 Float_t phiUEptsumClusterNorm = 0 ;
661 Float_t etaUEptsumClusterNorm = 0 ;
662 Float_t coneptsumClusterSubPhi = 0 ;
663 Float_t coneptsumClusterSubEta = 0 ;
664 Float_t coneptsumClusterSubPhiNorm = 0 ;
665 Float_t coneptsumClusterSubEtaNorm = 0 ;
666 Float_t phiUEptsumCellNorm = 0 ;
667 Float_t etaUEptsumCellNorm = 0 ;
668 Float_t coneptsumCellSubPhi = 0 ;
669 Float_t coneptsumCellSubEta = 0 ;
670 Float_t coneptsumCellSubPhiNorm = 0 ;
671 Float_t coneptsumCellSubEtaNorm = 0 ;
672 etaBandptsumClusterNorm = 0;
674 if( partTypeInCone!=AliIsolationCut::kOnlyCharged )
681 // Sum the pT in the phi or eta band for clusters or tracks
682 CalculateCaloUEBand (pCandidate,etaUEptsumCluster,phiUEptsumCluster);// rajouter ici l'histo eta phi
685 fhConeSumPtVSUEClusterEtaBand->Fill(coneptsumCluster,etaUEptsumCluster);
686 fhConeSumPtVSUEClusterPhiBand->Fill(coneptsumCluster,phiUEptsumCluster);
689 Float_t correctConeSumClusterEta = 1;
690 Float_t correctConeSumClusterPhi = 1;
692 GetIsolationCut()->CalculateUEBandClusterNormalization(GetReader(),etaTrig, phiTrig,
693 phiUEptsumCluster,etaUEptsumCluster,
694 phiUEptsumClusterNorm,etaUEptsumClusterNorm,
695 correctConeSumClusterEta,correctConeSumClusterPhi);
697 // In case that cone is out of eta and phi side, we are over correcting, not too often with the current cuts ...
698 // Comment if not used
699 // Float_t coneBadCellsCoeff =1;
700 // Float_t etaBandBadCellsCoeff=1;
701 // Float_t phiBandBadCellsCoeff=1;
702 // GetIsolationCut()->GetCoeffNormBadCell(pCandidate, GetReader(),coneBadCellsCoeff,etaBandBadCellsCoeff,phiBandBadCellsCoeff) ;
704 //coneptsumCluster=coneptsumCluster*coneBadCellsCoeff*correctConeSumClusterEta*correctConeSumClusterPhi;
706 coneptsumClusterSubPhi = coneptsumCluster - phiUEptsumClusterNorm;
707 coneptsumClusterSubEta = coneptsumCluster - etaUEptsumClusterNorm;
709 etaBandptsumClusterNorm = etaUEptsumClusterNorm;
711 fhConeSumPtPhiUESubCluster ->Fill(ptTrig , coneptsumClusterSubPhi);
712 fhConeSumPtPhiUESubClusterTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumClusterSubPhi);
713 fhConeSumPtEtaUESubCluster ->Fill(ptTrig , coneptsumClusterSubEta);
714 fhConeSumPtEtaUESubClusterTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumClusterSubEta);
716 fhFractionClusterOutConeEta ->Fill(ptTrig , correctConeSumClusterEta-1);
717 fhFractionClusterOutConeEtaTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumClusterEta-1);
718 fhFractionClusterOutConePhi ->Fill(ptTrig , correctConeSumClusterPhi-1);
719 fhFractionClusterOutConePhiTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumClusterPhi-1);
721 if(coneptsumCluster!=0)
723 coneptsumClusterSubPhiNorm = coneptsumClusterSubPhi/coneptsumCluster;
724 coneptsumClusterSubEtaNorm = coneptsumClusterSubEta/coneptsumCluster;
727 fhConeSumPtSubvsConeSumPtTotPhiCluster ->Fill(coneptsumCluster,coneptsumClusterSubPhi);
728 fhConeSumPtSubNormvsConeSumPtTotPhiCluster->Fill(coneptsumCluster,coneptsumClusterSubPhiNorm);
729 fhConeSumPtSubvsConeSumPtTotEtaCluster ->Fill(coneptsumCluster,coneptsumClusterSubEta);
730 fhConeSumPtSubNormvsConeSumPtTotEtaCluster->Fill(coneptsumCluster,coneptsumClusterSubEtaNorm);
736 if(fFillCellHistograms)
738 // Sum the pT in the phi or eta band for clusters or tracks
739 CalculateCaloCellUEBand(pCandidate,etaUEptsumCell ,phiUEptsumCell );
741 // Move to AliIsolationCut the calculation not the histograms??
743 //Careful here if EMCal limits changed .. 2010 (4 SM) to 2011-12 (10 SM), for the moment consider 100 deg in phi
744 Float_t emcEtaSize = 0.7*2; // TO FIX
745 Float_t emcPhiSize = TMath::DegToRad()*100.; // TO FIX
747 if(((2*conesize*emcPhiSize)-coneA)!=0)phiUEptsumCellNorm = phiUEptsumCell*(coneA / ((2*conesize*emcPhiSize)-coneA));
748 if(((2*conesize*emcEtaSize)-coneA)!=0)etaUEptsumCellNorm = etaUEptsumCell*(coneA / ((2*conesize*emcEtaSize)-coneA));
750 // Need to correct coneptsumCluster by the fraction of the cone out of the calorimeter cut acceptance!
752 Float_t correctConeSumCellEta = 1;
753 if(TMath::Abs(etaTrig)+conesize > emcEtaSize/2.)
755 Float_t excess = TMath::Abs(etaTrig) + conesize - emcEtaSize/2.;
756 correctConeSumCellEta = GetIsolationCut()->CalculateExcessAreaFraction(excess);
757 //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);
758 // Need to correct phi band surface if part of the cone falls out of track cut acceptance!
759 if(((2*(conesize-excess)*emcPhiSize)-(coneA-correctConeSumCellEta))!=0)phiUEptsumCellNorm = phiUEptsumCell*(coneA / ((2*(conesize-excess)*emcPhiSize)-(coneA-correctConeSumCellEta)));
762 Float_t correctConeSumCellPhi = 1;
763 //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() );
764 if((phiTrig+conesize > 180*TMath::DegToRad()) ||
765 (phiTrig-conesize < 80*TMath::DegToRad()))
768 if( phiTrig+conesize > 180*TMath::DegToRad() ) excess = conesize + phiTrig - 180*TMath::DegToRad() ;
769 else excess = conesize - phiTrig + 80*TMath::DegToRad() ;
771 correctConeSumCellPhi = GetIsolationCut()->CalculateExcessAreaFraction(excess);
772 //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);
774 // Need to correct eta band surface if part of the cone falls out of track cut acceptance!
775 if(((2*(conesize-excess)*emcEtaSize)-(coneA-correctConeSumCellPhi))!=0)etaUEptsumCellNorm = etaUEptsumCell*(coneA / ((2*(conesize-excess)*emcEtaSize)-(coneA-correctConeSumCellPhi)));
779 // In case that cone is out of eta and phi side, we are over correcting, not too often with the current cuts ...
780 coneptsumCellSubPhi = coneptsumCell*correctConeSumCellEta*correctConeSumCellPhi - phiUEptsumCellNorm;
781 coneptsumCellSubEta = coneptsumCell*correctConeSumCellEta*correctConeSumCellPhi - etaUEptsumCellNorm;
783 fhConeSumPtPhiUESubCell ->Fill(ptTrig , coneptsumCellSubPhi);
784 fhConeSumPtPhiUESubCellTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumCellSubPhi);
785 fhConeSumPtEtaUESubCell ->Fill(ptTrig , coneptsumCellSubEta);
786 fhConeSumPtEtaUESubCellTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumCellSubEta);
788 fhFractionCellOutConeEta ->Fill(ptTrig , correctConeSumCellEta-1);
789 fhFractionCellOutConeEtaTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumCellEta-1);
790 fhFractionCellOutConePhi ->Fill(ptTrig , correctConeSumCellPhi-1);
791 fhFractionCellOutConePhiTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumCellPhi-1);
794 coneptsumCellSubPhiNorm = coneptsumCellSubPhi/coneptsumCell;
795 coneptsumCellSubEtaNorm = coneptsumCellSubEta/coneptsumCell;
798 fhConeSumPtSubvsConeSumPtTotPhiCell ->Fill(coneptsumCell,coneptsumCellSubPhi);
799 fhConeSumPtSubNormvsConeSumPtTotPhiCell->Fill(coneptsumCell,coneptsumCellSubPhiNorm);
800 fhConeSumPtSubvsConeSumPtTotEtaCell ->Fill(coneptsumCell,coneptsumCellSubEta);
801 fhConeSumPtSubNormvsConeSumPtTotEtaCell->Fill(coneptsumCell,coneptsumCellSubEtaNorm);
805 if( partTypeInCone==AliIsolationCut::kNeutralAndCharged )
807 // --------------------------- //
808 // Tracks and clusters in cone //
809 // --------------------------- //
811 Double_t sumPhiUESub = coneptsumClusterSubPhi + coneptsumTrackSubPhi;
812 Double_t sumEtaUESub = coneptsumClusterSubEta + coneptsumTrackSubEta;
814 fhConeSumPtPhiUESub ->Fill(ptTrig , sumPhiUESub);
815 fhConeSumPtPhiUESubTrigEtaPhi->Fill(etaTrig, phiTrig, sumPhiUESub);
816 fhConeSumPtEtaUESub ->Fill(ptTrig , sumEtaUESub);
817 fhConeSumPtEtaUESubTrigEtaPhi->Fill(etaTrig, phiTrig, sumEtaUESub);
819 fhEtaBandClustervsTrack ->Fill(etaUEptsumCluster ,etaUEptsumTrack );
820 fhPhiBandClustervsTrack ->Fill(phiUEptsumCluster ,phiUEptsumTrack );
821 fhEtaBandNormClustervsTrack->Fill(etaUEptsumClusterNorm,etaUEptsumTrackNorm);
822 fhPhiBandNormClustervsTrack->Fill(phiUEptsumClusterNorm,phiUEptsumTrackNorm);
824 fhConeSumPtEtaUESubClustervsTrack->Fill(coneptsumClusterSubEta,coneptsumTrackSubEta);
825 fhConeSumPtPhiUESubClustervsTrack->Fill(coneptsumClusterSubPhi,coneptsumTrackSubPhi);
827 // ------------------------ //
828 // Tracks and cells in cone //
829 // ------------------------ //
831 if(fFillCellHistograms)
833 Double_t sumPhiUESubTrackCell = coneptsumCellSubPhi + coneptsumTrackSubPhi;
834 Double_t sumEtaUESubTrackCell = coneptsumCellSubEta + coneptsumTrackSubEta;
836 fhConeSumPtPhiUESubTrackCell ->Fill(ptTrig , sumPhiUESubTrackCell);
837 fhConeSumPtPhiUESubTrackCellTrigEtaPhi->Fill(etaTrig, phiTrig, sumPhiUESubTrackCell);
838 fhConeSumPtEtaUESubTrackCell ->Fill(ptTrig , sumEtaUESubTrackCell);
839 fhConeSumPtEtaUESubTrackCellTrigEtaPhi->Fill(etaTrig, phiTrig, sumEtaUESubTrackCell);
841 fhEtaBandCellvsTrack ->Fill(etaUEptsumCell ,etaUEptsumTrack );
842 fhPhiBandCellvsTrack ->Fill(phiUEptsumCell ,phiUEptsumTrack );
843 fhEtaBandNormCellvsTrack->Fill(etaUEptsumCellNorm,etaUEptsumTrackNorm);
844 fhPhiBandNormCellvsTrack->Fill(phiUEptsumCellNorm,phiUEptsumTrackNorm);
846 fhConeSumPtEtaUESubCellvsTrack->Fill(coneptsumCellSubEta,coneptsumTrackSubEta);
847 fhConeSumPtPhiUESubCellvsTrack->Fill(coneptsumCellSubPhi,coneptsumTrackSubPhi);
854 //__________________________________________________________________________________________________
855 void AliAnaParticleIsolation::CalculateCaloSignalInCone(AliAODPWG4ParticleCorrelation * aodParticle,
856 Float_t & coneptsumCluster)
858 // Get the cluster pT or sum of pT in isolation cone
860 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyCharged ) return ;
862 //Recover reference arrays with clusters and tracks
863 TObjArray * refclusters = aodParticle->GetObjArray(GetAODObjArrayName()+"Clusters");
864 if(!refclusters) return ;
866 Float_t ptTrig = aodParticle->Pt();
868 //Get vertex for cluster momentum calculation
869 Double_t vertex[] = {0,0,0} ; //vertex ;
870 if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
871 GetReader()->GetVertex(vertex);
874 for(Int_t icalo=0; icalo < refclusters->GetEntriesFast(); icalo++)
876 AliVCluster* calo = (AliVCluster *) refclusters->At(icalo);
877 calo->GetMomentum(mom,vertex) ;//Assume that come from vertex in straight line
879 fhPtInCone ->Fill(ptTrig, mom.Pt());
880 fhPtClusterInCone->Fill(ptTrig, mom.Pt());
882 if(fFillPileUpHistograms)
884 if(GetReader()->IsPileUpFromSPD()) fhPtInConePileUp[0]->Fill(ptTrig,mom.Pt());
885 if(GetReader()->IsPileUpFromEMCal()) fhPtInConePileUp[1]->Fill(ptTrig,mom.Pt());
886 if(GetReader()->IsPileUpFromSPDOrEMCal()) fhPtInConePileUp[2]->Fill(ptTrig,mom.Pt());
887 if(GetReader()->IsPileUpFromSPDAndEMCal()) fhPtInConePileUp[3]->Fill(ptTrig,mom.Pt());
888 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) fhPtInConePileUp[4]->Fill(ptTrig,mom.Pt());
889 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) fhPtInConePileUp[5]->Fill(ptTrig,mom.Pt());
890 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) fhPtInConePileUp[6]->Fill(ptTrig,mom.Pt());
893 if(fFillHighMultHistograms) fhPtInConeCent->Fill(GetEventCentrality(),mom.Pt());
895 coneptsumCluster+=mom.Pt();
898 fhConeSumPtCluster ->Fill(ptTrig, coneptsumCluster);
901 //______________________________________________________________________________________________________
902 void AliAnaParticleIsolation::CalculateCaloCellSignalInCone(AliAODPWG4ParticleCorrelation * aodParticle,
903 Float_t & coneptsumCell)
905 // Get the cell amplityde or sum of amplitudes in isolation cone
906 // Mising: Remove signal cells in cone in case the trigger is a cluster!
908 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyCharged ) return ;
910 Float_t conesize = GetIsolationCut()->GetConeSize();
912 Float_t ptTrig = aodParticle->Pt();
913 Float_t phiTrig = aodParticle->Phi();
914 if(phiTrig<0) phiTrig += TMath::TwoPi();
915 Float_t etaTrig = aodParticle->Eta();
917 if(aodParticle->GetDetector()=="EMCAL")
919 AliEMCALGeometry* eGeom = AliEMCALGeometry::GetInstance();
922 if (eGeom->GetAbsCellIdFromEtaPhi(etaTrig,phiTrig,absId))
924 if(!eGeom->CheckAbsCellId(absId)) return ;
926 // Get absolute (col,row) of trigger particle
927 Int_t nSupMod = eGeom->GetSuperModuleNumber(absId);
929 Int_t imEta=-1, imPhi=-1;
930 Int_t ieta =-1, iphi =-1;
932 if (eGeom->GetCellIndex(absId,nSupMod,nModule,imPhi,imEta))
934 Int_t iEta=-1, iPhi=-1;
935 eGeom->GetCellPhiEtaIndexInSModule(nSupMod,nModule,imPhi,imEta,iphi,ieta);
937 Int_t colTrig = iEta;
938 if (nSupMod % 2) colTrig = AliEMCALGeoParams::fgkEMCALCols + iEta ;
939 Int_t rowTrig = iPhi + AliEMCALGeoParams::fgkEMCALRows*int(nSupMod/2);
941 Int_t sqrSize = int(conesize/0.0143);
943 AliVCaloCells * cells = GetEMCALCells();
945 // Loop on cells in cone
946 for(Int_t irow = rowTrig-sqrSize; irow < rowTrig+sqrSize; irow++)
948 for(Int_t icol = colTrig-sqrSize; icol < colTrig+sqrSize; icol++)
950 Int_t inSector = int(irow/AliEMCALGeoParams::fgkEMCALRows);
951 if(inSector==5) continue;
955 if(icol < AliEMCALGeoParams::fgkEMCALCols)
957 inSupMod = 2*inSector + 1;
960 else if(icol > AliEMCALGeoParams::fgkEMCALCols - 1)
962 inSupMod = 2*inSector;
963 icolLoc = icol-AliEMCALGeoParams::fgkEMCALCols;
966 Int_t irowLoc = irow - AliEMCALGeoParams::fgkEMCALRows*inSector ;
968 Int_t iabsId = eGeom->GetAbsCellIdFromCellIndexes(inSupMod,irowLoc,icolLoc);
969 if(!eGeom->CheckAbsCellId(iabsId)) continue;
971 fhPtCellInCone->Fill(ptTrig, cells->GetCellAmplitude(iabsId));
972 coneptsumCell += cells->GetCellAmplitude(iabsId);
979 fhConeSumPtCell->Fill(ptTrig,coneptsumCell);
983 //___________________________________________________________________________________________________
984 void AliAnaParticleIsolation::CalculateTrackSignalInCone(AliAODPWG4ParticleCorrelation * aodParticle,
985 Float_t & coneptsumTrack)
987 // Get the track pT or sum of pT in isolation cone
989 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyNeutral ) return ;
991 //Recover reference arrays with clusters and tracks
992 TObjArray * reftracks = aodParticle->GetObjArray(GetAODObjArrayName()+"Tracks");
993 if(!reftracks) return ;
995 Float_t ptTrig = aodParticle->Pt();
996 Double_t bz = GetReader()->GetInputEvent()->GetMagneticField();
998 for(Int_t itrack=0; itrack < reftracks->GetEntriesFast(); itrack++)
1000 AliVTrack* track = (AliVTrack *) reftracks->At(itrack);
1001 Float_t pTtrack = track->Pt();
1003 fhPtInCone ->Fill(ptTrig,pTtrack);
1004 fhPtTrackInCone->Fill(ptTrig,pTtrack);
1006 if(fFillPileUpHistograms)
1008 ULong_t status = track->GetStatus();
1009 Bool_t okTOF = ( (status & AliVTrack::kTOFout) == AliVTrack::kTOFout ) ;
1010 //Double32_t tof = track->GetTOFsignal()*1e-3;
1011 Int_t trackBC = track->GetTOFBunchCrossing(bz);
1013 if ( okTOF && trackBC!=0 ) fhPtTrackInConeOtherBC->Fill(ptTrig,pTtrack);
1014 else if( okTOF && trackBC==0 ) fhPtTrackInConeBC0 ->Fill(ptTrig,pTtrack);
1016 Int_t vtxBC = GetReader()->GetVertexBC();
1017 if(vtxBC == 0 || vtxBC==AliVTrack::kTOFBCNA) fhPtTrackInConeVtxBC0->Fill(ptTrig,pTtrack);
1019 if(GetReader()->IsPileUpFromSPD()) { fhPtInConePileUp[0]->Fill(ptTrig,pTtrack);
1020 if(okTOF && trackBC!=0 ) fhPtTrackInConeOtherBCPileUpSPD->Fill(ptTrig,pTtrack);
1021 if(okTOF && trackBC==0 ) fhPtTrackInConeBC0PileUpSPD ->Fill(ptTrig,pTtrack); }
1022 if(GetReader()->IsPileUpFromEMCal()) fhPtInConePileUp[1]->Fill(ptTrig,pTtrack);
1023 if(GetReader()->IsPileUpFromSPDOrEMCal()) fhPtInConePileUp[2]->Fill(ptTrig,pTtrack);
1024 if(GetReader()->IsPileUpFromSPDAndEMCal()) fhPtInConePileUp[3]->Fill(ptTrig,pTtrack);
1025 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) fhPtInConePileUp[4]->Fill(ptTrig,pTtrack);
1026 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) fhPtInConePileUp[5]->Fill(ptTrig,pTtrack);
1027 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) fhPtInConePileUp[6]->Fill(ptTrig,pTtrack);
1030 if(fFillHighMultHistograms) fhPtInConeCent->Fill(GetEventCentrality(),pTtrack);
1032 coneptsumTrack+=pTtrack;
1035 fhConeSumPtTrack->Fill(ptTrig, coneptsumTrack);
1039 //_________________________________________________________________
1040 void AliAnaParticleIsolation::FillPileUpHistograms(Int_t clusterID)
1042 // Fill some histograms to understand pile-up
1046 printf("AliAnaParticleIsolation::FillPileUpHistograms(), ID of cluster = %d, not possible! ", clusterID);
1051 TObjArray* clusters = 0x0;
1052 if (fCalorimeter == "EMCAL") clusters = GetEMCALClusters();
1053 else if(fCalorimeter == "PHOS" ) clusters = GetPHOSClusters();
1056 Float_t time = -1000;
1060 AliVCluster *cluster = FindCluster(clusters,clusterID,iclus);
1061 energy = cluster->E();
1062 time = cluster->GetTOF()*1e9;
1065 //printf("E %f, time %f\n",energy,time);
1066 AliVEvent * event = GetReader()->GetInputEvent();
1068 fhTimeENoCut->Fill(energy,time);
1069 if(GetReader()->IsPileUpFromSPD()) fhTimeESPD ->Fill(energy,time);
1070 if(event->IsPileupFromSPDInMultBins()) fhTimeESPDMulti->Fill(energy,time);
1072 if(energy < 8) return; // Fill time figures for high energy clusters not too close to trigger threshold
1074 AliESDEvent* esdEv = dynamic_cast<AliESDEvent*> (event);
1075 AliAODEvent* aodEv = dynamic_cast<AliAODEvent*> (event);
1077 // N pile up vertices
1078 Int_t nVerticesSPD = -1;
1079 Int_t nVerticesTracks = -1;
1083 nVerticesSPD = esdEv->GetNumberOfPileupVerticesSPD();
1084 nVerticesTracks = esdEv->GetNumberOfPileupVerticesTracks();
1089 nVerticesSPD = aodEv->GetNumberOfPileupVerticesSPD();
1090 nVerticesTracks = aodEv->GetNumberOfPileupVerticesTracks();
1093 fhTimeNPileUpVertSPD ->Fill(time,nVerticesSPD);
1094 fhTimeNPileUpVertTrack->Fill(time,nVerticesTracks);
1096 //printf("Is SPD %d, Is SPD Multi %d, n spd %d, n track %d\n",
1097 // GetReader()->IsPileUpFromSPD(),event->IsPileupFromSPDInMultBins(),nVerticesSPD,nVerticesTracks);
1100 Float_t z1 = -1, z2 = -1;
1102 for(Int_t iVert=0; iVert<nVerticesSPD;iVert++)
1106 const AliESDVertex* pv=esdEv->GetPileupVertexSPD(iVert);
1107 ncont=pv->GetNContributors();
1108 z1 = esdEv->GetPrimaryVertexSPD()->GetZ();
1110 diamZ = esdEv->GetDiamondZ();
1114 AliAODVertex *pv=aodEv->GetVertex(iVert);
1115 if(pv->GetType()!=AliAODVertex::kPileupSPD) continue;
1116 ncont=pv->GetNContributors();
1117 z1=aodEv->GetPrimaryVertexSPD()->GetZ();
1119 diamZ = aodEv->GetDiamondZ();
1122 Double_t distZ = TMath::Abs(z2-z1);
1123 diamZ = TMath::Abs(z2-diamZ);
1125 fhTimeNPileUpVertContributors ->Fill(time,ncont);
1126 fhTimePileUpMainVertexZDistance->Fill(time,distZ);
1127 fhTimePileUpMainVertexZDiamond ->Fill(time,diamZ);
1132 //_____________________________________________________________________________________________________________________
1133 void AliAnaParticleIsolation::FillTrackMatchingShowerShapeControlHistograms(AliAODPWG4ParticleCorrelation *pCandidate,
1136 // Fill Track matching and Shower Shape control histograms
1137 if(!fFillTMHisto && !fFillSSHisto) return;
1139 Int_t clusterID = pCandidate->GetCaloLabel(0) ;
1140 Int_t nMaxima = pCandidate->GetFiducialArea(); // bad name, just place holder for the moment
1141 Int_t mcTag = pCandidate->GetTag() ;
1142 Bool_t isolated = pCandidate->IsIsolated();
1146 printf("AliAnaParticleIsolation::FillTrackMatchingShowerShapeControlHistograms(), ID of cluster = %d, not possible! \n", clusterID);
1151 TObjArray* clusters = 0x0;
1152 if (fCalorimeter == "EMCAL") clusters = GetEMCALClusters();
1153 else if(fCalorimeter == "PHOS" ) clusters = GetPHOSClusters();
1155 Float_t energy = pCandidate->E();
1156 Float_t pt = pCandidate->Pt();
1160 AliVCluster *cluster = FindCluster(clusters,clusterID,iclus);
1164 fhELambda0 [isolated]->Fill(energy, cluster->GetM02() );
1165 fhPtLambda0[isolated]->Fill(pt, cluster->GetM02() );
1166 fhELambda1 [isolated]->Fill(energy, cluster->GetM20() );
1170 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
1171 fhPtLambda0MC[kmcPhoton][isolated]->Fill(pt, cluster->GetM02());
1173 fhPtLambda0MC[mcIndex][isolated]->Fill(pt, cluster->GetM02());
1176 if(fCalorimeter == "EMCAL" && GetFirstSMCoveredByTRD() >= 0 &&
1177 GetModuleNumber(cluster) >= GetFirstSMCoveredByTRD() )
1179 fhELambda0TRD [isolated]->Fill(energy, cluster->GetM02() );
1180 fhPtLambda0TRD[isolated]->Fill(pt , cluster->GetM02() );
1181 fhELambda1TRD [isolated]->Fill(energy, cluster->GetM20() );
1184 if(fFillNLMHistograms)
1186 fhNLocMax[isolated]->Fill(energy,nMaxima);
1187 if (nMaxima==1) { fhELambda0LocMax1[isolated]->Fill(energy,cluster->GetM02()); fhELambda1LocMax1[isolated]->Fill(energy,cluster->GetM20()); }
1188 else if(nMaxima==2) { fhELambda0LocMax2[isolated]->Fill(energy,cluster->GetM02()); fhELambda1LocMax2[isolated]->Fill(energy,cluster->GetM20()); }
1189 else { fhELambda0LocMaxN[isolated]->Fill(energy,cluster->GetM02()); fhELambda1LocMaxN[isolated]->Fill(energy,cluster->GetM20()); }
1196 Float_t dZ = cluster->GetTrackDz();
1197 Float_t dR = cluster->GetTrackDx();
1199 if(cluster->IsEMCAL() && GetCaloUtils()->IsRecalculationOfClusterTrackMatchingOn())
1201 dR = 2000., dZ = 2000.;
1202 GetCaloUtils()->GetEMCALRecoUtils()->GetMatchedResiduals(cluster->GetID(),dZ,dR);
1205 //printf("ParticleIsolation: dPhi %f, dEta %f\n",dR,dZ);
1206 if(fhTrackMatchedDEta[isolated] && TMath::Abs(dR) < 999)
1208 fhTrackMatchedDEta[isolated]->Fill(energy,dZ);
1209 fhTrackMatchedDPhi[isolated]->Fill(energy,dR);
1210 if(energy > 0.5) fhTrackMatchedDEtaDPhi[isolated]->Fill(dZ,dR);
1213 // Check dEdx and E/p of matched clusters
1215 if(TMath::Abs(dZ) < 0.05 && TMath::Abs(dR) < 0.05)
1218 AliVTrack *track = GetCaloUtils()->GetMatchedTrack(cluster, GetReader()->GetInputEvent());
1222 Float_t dEdx = track->GetTPCsignal();
1223 fhdEdx[isolated]->Fill(cluster->E(), dEdx);
1225 Float_t eOverp = cluster->E()/track->P();
1226 fhEOverP[isolated]->Fill(cluster->E(), eOverp);
1229 // printf("AliAnaParticleIsolation::FillTrackMatchingShowerShapeHistograms() - Residual OK but (dR, dZ)= (%2.4f,%2.4f) no track associated WHAT? \n", dR,dZ);
1234 if ( !GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCConversion) )
1236 if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0) ||
1237 GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEta) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 2.5 );
1238 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 0.5 );
1239 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 1.5 );
1240 else fhTrackMatchedMCParticle[isolated]->Fill(energy, 3.5 );
1245 if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0) ||
1246 GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEta) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 6.5 );
1247 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 4.5 );
1248 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 5.5 );
1249 else fhTrackMatchedMCParticle[isolated]->Fill(energy, 7.5 );
1258 } // clusters array available
1262 //______________________________________________________
1263 TObjString * AliAnaParticleIsolation::GetAnalysisCuts()
1265 //Save parameters used for analysis
1266 TString parList ; //this will be list of parameters used for this analysis.
1267 const Int_t buffersize = 255;
1268 char onePar[buffersize] ;
1270 snprintf(onePar, buffersize,"--- AliAnaParticleIsolation ---\n") ;
1272 snprintf(onePar, buffersize,"Calorimeter: %s\n",fCalorimeter.Data()) ;
1274 snprintf(onePar, buffersize,"Isolation Cand Detector: %s\n",fIsoDetector.Data()) ;
1276 snprintf(onePar, buffersize,"fReMakeIC =%d (Flag for reisolation during histogram filling) \n",fReMakeIC) ;
1278 snprintf(onePar, buffersize,"fMakeSeveralIC=%d (Flag for isolation with several cuts at the same time ) \n",fMakeSeveralIC) ;
1280 snprintf(onePar, buffersize,"fFillTMHisto=%d (Flag for track matching histograms) \n",fFillTMHisto) ;
1282 snprintf(onePar, buffersize,"fFillSSHisto=%d (Flag for shower shape histograms) \n",fFillSSHisto) ;
1287 snprintf(onePar, buffersize,"fNCones =%d (Number of cone sizes) \n",fNCones) ;
1289 snprintf(onePar, buffersize,"fNPtThresFrac=%d (Flag for isolation with several cuts at the same time ) \n",fNPtThresFrac) ;
1292 for(Int_t icone = 0; icone < fNCones ; icone++)
1294 snprintf(onePar, buffersize,"fConeSizes[%d]=%1.2f (isolation cone size) \n",icone, fConeSizes[icone]) ;
1297 for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
1299 snprintf(onePar, buffersize,"fPtThresholds[%d]=%1.2f (isolation pt threshold) \n",ipt, fPtThresholds[ipt]) ;
1302 for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
1304 snprintf(onePar, buffersize,"fPtFractions[%d]=%1.2f (isolation pt fraction threshold) \n",ipt, fPtFractions[ipt]) ;
1307 for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
1309 snprintf(onePar, buffersize,"fSumPtThresholds[%d]=%1.2f (isolation sum pt threshold) \n",ipt, fSumPtThresholds[ipt]) ;
1314 //Get parameters set in base class.
1315 parList += GetBaseParametersList() ;
1317 //Get parameters set in IC class.
1318 if(!fMakeSeveralIC)parList += GetIsolationCut()->GetICParametersList() ;
1320 return new TObjString(parList) ;
1324 //________________________________________________________
1325 TList * AliAnaParticleIsolation::GetCreateOutputObjects()
1327 // Create histograms to be saved in output file and
1328 // store them in outputContainer
1329 TList * outputContainer = new TList() ;
1330 outputContainer->SetName("IsolatedParticleHistos") ;
1332 Int_t nptbins = GetHistogramRanges()->GetHistoPtBins();
1333 Int_t nphibins = GetHistogramRanges()->GetHistoPhiBins();
1334 Int_t netabins = GetHistogramRanges()->GetHistoEtaBins();
1335 Float_t ptmax = GetHistogramRanges()->GetHistoPtMax();
1336 Float_t phimax = GetHistogramRanges()->GetHistoPhiMax();
1337 Float_t etamax = GetHistogramRanges()->GetHistoEtaMax();
1338 Float_t ptmin = GetHistogramRanges()->GetHistoPtMin();
1339 Float_t phimin = GetHistogramRanges()->GetHistoPhiMin();
1340 Float_t etamin = GetHistogramRanges()->GetHistoEtaMin();
1341 Int_t ssbins = GetHistogramRanges()->GetHistoShowerShapeBins();
1342 Float_t ssmax = GetHistogramRanges()->GetHistoShowerShapeMax();
1343 Float_t ssmin = GetHistogramRanges()->GetHistoShowerShapeMin();
1344 Int_t ntimebins= GetHistogramRanges()->GetHistoTimeBins();
1345 Float_t timemax = GetHistogramRanges()->GetHistoTimeMax();
1346 Float_t timemin = GetHistogramRanges()->GetHistoTimeMin();
1348 Int_t nresetabins = GetHistogramRanges()->GetHistoTrackResidualEtaBins();
1349 Float_t resetamax = GetHistogramRanges()->GetHistoTrackResidualEtaMax();
1350 Float_t resetamin = GetHistogramRanges()->GetHistoTrackResidualEtaMin();
1351 Int_t nresphibins = GetHistogramRanges()->GetHistoTrackResidualPhiBins();
1352 Float_t resphimax = GetHistogramRanges()->GetHistoTrackResidualPhiMax();
1353 Float_t resphimin = GetHistogramRanges()->GetHistoTrackResidualPhiMin();
1355 Int_t ndedxbins = GetHistogramRanges()->GetHistodEdxBins();
1356 Float_t dedxmax = GetHistogramRanges()->GetHistodEdxMax();
1357 Float_t dedxmin = GetHistogramRanges()->GetHistodEdxMin();
1358 Int_t nPoverEbins = GetHistogramRanges()->GetHistoPOverEBins();
1359 Float_t pOverEmax = GetHistogramRanges()->GetHistoPOverEMax();
1360 Float_t pOverEmin = GetHistogramRanges()->GetHistoPOverEMin();
1362 Int_t nptsumbins = GetHistogramRanges()->GetHistoNPtSumBins();
1363 Float_t ptsummax = GetHistogramRanges()->GetHistoPtSumMax();
1364 Float_t ptsummin = GetHistogramRanges()->GetHistoPtSumMin();
1365 Int_t nptinconebins = GetHistogramRanges()->GetHistoNPtInConeBins();
1366 Float_t ptinconemax = GetHistogramRanges()->GetHistoPtInConeMax();
1367 Float_t ptinconemin = GetHistogramRanges()->GetHistoPtInConeMin();
1369 //Float_t ptthre = GetIsolationCut()->GetPtThreshold();
1370 //Float_t ptsumthre = GetIsolationCut()->GetSumPtThreshold();
1371 //Float_t ptfrac = GetIsolationCut()->GetPtFraction();
1372 Float_t r = GetIsolationCut()->GetConeSize();
1373 Int_t method = GetIsolationCut()->GetICMethod() ;
1374 Int_t particle = GetIsolationCut()->GetParticleTypeInCone() ;
1376 TString sThreshold = "";
1377 if ( method == AliIsolationCut::kSumPtIC )
1379 sThreshold = Form(", %2.2f < #Sigma #it{p}_{T}^{in cone} < %2.2f GeV/#it{c}",
1380 GetIsolationCut()->GetSumPtThreshold(), GetIsolationCut()->GetSumPtThresholdMax());
1381 if(GetIsolationCut()->GetSumPtThresholdMax() > 200)
1382 sThreshold = Form(", #Sigma #it{p}_{T}^{in cone} = %2.2f GeV/#it{c}",
1383 GetIsolationCut()->GetSumPtThreshold());
1385 else if ( method == AliIsolationCut::kPtThresIC)
1387 sThreshold = Form(", %2.2f < #it{p}_{T}^{th} < %2.2f GeV/#it{c}",
1388 GetIsolationCut()->GetPtThreshold(),GetIsolationCut()->GetPtThresholdMax());
1389 if(GetIsolationCut()->GetSumPtThreshold() > 200)
1390 sThreshold = Form(", #it{p}_{T}^{th} = %2.2f GeV/#it{c}",
1391 GetIsolationCut()->GetPtThreshold());
1393 else if ( method == AliIsolationCut::kPtFracIC)
1394 sThreshold = Form(", #Sigma #it{p}_{T}^{in cone}/#it{p}_{T}^{trig} = %2.2f" ,
1395 GetIsolationCut()->GetPtFraction());
1397 TString sParticle = ", x^{0,#pm}";
1398 if ( particle == AliIsolationCut::kOnlyNeutral ) sParticle = ", x^{0}";
1399 else if ( particle == AliIsolationCut::kOnlyCharged ) sParticle = ", x^{#pm}";
1401 TString parTitle = Form("#it{R} = %2.2f%s%s",GetIsolationCut()->GetConeSize(), sThreshold.Data(),sParticle.Data());
1403 TString pileUpName[] = {"SPD","EMCAL","SPDOrEMCAL","SPDAndEMCAL","SPDAndNotEMCAL","EMCALAndNotSPD","NotSPDAndNotEMCAL"} ;
1405 // MC histograms title and name
1406 TString mcPartType[] = { "#gamma", "#gamma_{prompt}", "#gamma_{fragmentation}",
1407 "#pi^{0} (merged #gamma)","#gamma_{#pi decay}",
1408 "#gamma_{#eta decay}","#gamma_{other decay}",
1409 "e^{#pm}","hadrons?"} ;
1411 TString mcPartName[] = { "Photon","PhotonPrompt","PhotonFrag",
1412 "Pi0","Pi0Decay","EtaDecay","OtherDecay",
1413 "Electron","Hadron"} ;
1415 // Primary MC histograms title and name
1416 TString pptype[] = { "#gamma", "#gamma_{#pi decay}","#gamma_{other decay}",
1417 "#gamma_{prompt}","#gamma_{fragmentation}","#gamma_{ISR}"} ;
1419 TString ppname[] = { "Photon","PhotonPi0Decay","PhotonOtherDecay",
1420 "PhotonPrompt","PhotonFrag","PhotonISR"} ;
1422 // Not Isolated histograms, reference histograms
1424 fhENoIso = new TH1F("hENoIso",
1425 Form("Number of not isolated leading particles vs #it{p}_{T}, %s",parTitle.Data()),
1426 nptbins,ptmin,ptmax);
1427 fhENoIso->SetYTitle("#it{counts}");
1428 fhENoIso->SetXTitle("E (GeV/#it{c})");
1429 outputContainer->Add(fhENoIso) ;
1431 fhPtNoIso = new TH1F("hPtNoIso",
1432 Form("Number of not isolated leading particles vs #it{p}_{T}, %s",parTitle.Data()),
1433 nptbins,ptmin,ptmax);
1434 fhPtNoIso->SetYTitle("#it{counts}");
1435 fhPtNoIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1436 outputContainer->Add(fhPtNoIso) ;
1438 fhEtaPhiNoIso = new TH2F("hEtaPhiNoIso",
1439 Form("Number of not isolated leading particles #eta vs #phi, %s",parTitle.Data()),
1440 netabins,etamin,etamax,nphibins,phimin,phimax);
1441 fhEtaPhiNoIso->SetXTitle("#eta");
1442 fhEtaPhiNoIso->SetYTitle("#phi");
1443 outputContainer->Add(fhEtaPhiNoIso) ;
1447 // For histograms in arrays, index in the array, corresponding to any particle origin
1449 for(Int_t imc = 0; imc < 9; imc++)
1452 fhPtNoIsoMC[imc] = new TH1F(Form("hPtNoIsoMC%s",mcPartName[imc].Data()),
1453 Form("#it{p}_{T} of NOT isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
1454 nptbins,ptmin,ptmax);
1455 fhPtNoIsoMC[imc]->SetYTitle("#it{counts}");
1456 fhPtNoIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1457 outputContainer->Add(fhPtNoIsoMC[imc]) ;
1459 fhPtIsoMC[imc] = new TH1F(Form("hPtMC%s",mcPartName[imc].Data()),
1460 Form("#it{p}_{T} of isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
1461 nptbins,ptmin,ptmax);
1462 fhPtIsoMC[imc]->SetYTitle("#it{counts}");
1463 fhPtIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1464 outputContainer->Add(fhPtIsoMC[imc]) ;
1466 fhPhiIsoMC[imc] = new TH2F(Form("hPhiMC%s",mcPartName[imc].Data()),
1467 Form("#phi vs #it{p}_{T} of isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
1468 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
1469 fhPhiIsoMC[imc]->SetYTitle("#phi");
1470 fhPhiIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1471 outputContainer->Add(fhPhiIsoMC[imc]) ;
1473 fhEtaIsoMC[imc] = new TH2F(Form("hEtaMC%s",mcPartName[imc].Data()),
1474 Form("#phi vs #it{p}_{T} of isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
1475 nptbins,ptmin,ptmax,netabins,etamin,etamax);
1476 fhEtaIsoMC[imc]->SetYTitle("#eta");
1477 fhEtaIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1478 outputContainer->Add(fhEtaIsoMC[imc]) ;
1482 // Histograms for tagged candidates as decay
1483 if(fFillTaggedDecayHistograms)
1485 for(Int_t ibit = 0; ibit < fNDecayBits; ibit++)
1487 fhPtDecayNoIso[ibit] =
1488 new TH1F(Form("hPtDecayNoIso_bit%d",fDecayBits[ibit]),
1489 Form("Number of not isolated leading pi0 decay particles vs #it{p}_{T}, bit %d, %s",fDecayBits[ibit],parTitle.Data()),
1490 nptbins,ptmin,ptmax);
1491 fhPtDecayNoIso[ibit]->SetYTitle("#it{counts}");
1492 fhPtDecayNoIso[ibit]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1493 outputContainer->Add(fhPtDecayNoIso[ibit]) ;
1495 fhEtaPhiDecayNoIso[ibit] =
1496 new TH2F(Form("hEtaPhiDecayNoIso_bit%d",fDecayBits[ibit]),
1497 Form("Number of not isolated leading Pi0 decay particles #eta vs #phi, bit %d, %s",fDecayBits[ibit],parTitle.Data()),
1498 netabins,etamin,etamax,nphibins,phimin,phimax);
1499 fhEtaPhiDecayNoIso[ibit]->SetXTitle("#eta");
1500 fhEtaPhiDecayNoIso[ibit]->SetYTitle("#phi");
1501 outputContainer->Add(fhEtaPhiDecayNoIso[ibit]) ;
1505 fhPtDecayIso[ibit] =
1506 new TH1F(Form("hPtDecayIso_bit%d",fDecayBits[ibit]),
1507 Form("Number of isolated #pi^{0} decay particles vs #it{p}_{T}, bit %d, %s",fDecayBits[ibit],parTitle.Data()),
1508 nptbins,ptmin,ptmax);
1509 fhPtDecayIso[ibit]->SetYTitle("#it{counts}");
1510 fhPtDecayIso[ibit]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1511 outputContainer->Add(fhPtDecayIso[ibit]) ;
1513 fhEtaPhiDecayIso[ibit] =
1514 new TH2F(Form("hEtaPhiDecayIso_bit%d",fDecayBits[ibit]),
1515 Form("Number of isolated Pi0 decay particles #eta vs #phi, bit %d, %s",fDecayBits[ibit],parTitle.Data()),
1516 netabins,etamin,etamax,nphibins,phimin,phimax);
1517 fhEtaPhiDecayIso[ibit]->SetXTitle("#eta");
1518 fhEtaPhiDecayIso[ibit]->SetYTitle("#phi");
1519 outputContainer->Add(fhEtaPhiDecayIso[ibit]) ;
1524 for(Int_t imc = 0; imc < 9; imc++)
1527 fhPtDecayNoIsoMC[ibit][imc] =
1528 new TH1F(Form("hPtDecayNoIso_bit%d_MC%s",fDecayBits[ibit],mcPartName[imc].Data()),
1529 Form("#it{p}_{T} of NOT isolated, decay bit %d, %s, %s",fDecayBits[ibit],mcPartType[imc].Data(),parTitle.Data()),
1530 nptbins,ptmin,ptmax);
1531 fhPtDecayNoIsoMC[ibit][imc]->SetYTitle("#it{counts}");
1532 fhPtDecayNoIsoMC[ibit][imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1533 outputContainer->Add(fhPtDecayNoIsoMC[ibit][imc]) ;
1537 fhPtDecayIsoMC[ibit][imc] =
1538 new TH1F(Form("hPtDecay_bit%d_MC%s",fDecayBits[ibit],mcPartName[imc].Data()),
1539 Form("#it{p}_{T} of isolated %s, decay bit %d, %s",mcPartType[imc].Data(),fDecayBits[ibit],parTitle.Data()),
1540 nptbins,ptmin,ptmax);
1541 fhPtDecayIsoMC[ibit][imc]->SetYTitle("#it{counts}");
1542 fhPtDecayIsoMC[ibit][imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1543 outputContainer->Add(fhPtDecayIsoMC[ibit][imc]) ;
1545 }// MC particle loop
1552 TString isoName [] = {"NoIso",""};
1553 TString isoTitle[] = {"Not isolated" ,"isolated"};
1555 fhEIso = new TH1F("hE",
1556 Form("Number of isolated particles vs E, %s",parTitle.Data()),
1557 nptbins,ptmin,ptmax);
1558 fhEIso->SetYTitle("d#it{N} / d#it{E}");
1559 fhEIso->SetXTitle("#it{E} (GeV/#it{c})");
1560 outputContainer->Add(fhEIso) ;
1562 fhPtIso = new TH1F("hPt",
1563 Form("Number of isolated particles vs #it{p}_{T}, %s",parTitle.Data()),
1564 nptbins,ptmin,ptmax);
1565 fhPtIso->SetYTitle("d#it{N} / #it{p}_{T}");
1566 fhPtIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1567 outputContainer->Add(fhPtIso) ;
1569 fhPhiIso = new TH2F("hPhi",
1570 Form("Number of isolated particles vs #phi, %s",parTitle.Data()),
1571 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
1572 fhPhiIso->SetYTitle("#phi");
1573 fhPhiIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1574 outputContainer->Add(fhPhiIso) ;
1576 fhEtaIso = new TH2F("hEta",
1577 Form("Number of isolated particles vs #eta, %s",parTitle.Data()),
1578 nptbins,ptmin,ptmax,netabins,etamin,etamax);
1579 fhEtaIso->SetYTitle("#eta");
1580 fhEtaIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1581 outputContainer->Add(fhEtaIso) ;
1583 fhEtaPhiIso = new TH2F("hEtaPhiIso",
1584 Form("Number of isolated particles #eta vs #phi, %s",parTitle.Data()),
1585 netabins,etamin,etamax,nphibins,phimin,phimax);
1586 fhEtaPhiIso->SetXTitle("#eta");
1587 fhEtaPhiIso->SetYTitle("#phi");
1588 outputContainer->Add(fhEtaPhiIso) ;
1590 if(fFillHighMultHistograms)
1592 fhPtCentralityIso = new TH2F("hPtCentrality",
1593 Form("centrality vs #it{p}_{T} for isolated particles, %s",parTitle.Data()),
1594 nptbins,ptmin,ptmax, 100,0,100);
1595 fhPtCentralityIso->SetYTitle("centrality");
1596 fhPtCentralityIso->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1597 outputContainer->Add(fhPtCentralityIso) ;
1599 fhPtEventPlaneIso = new TH2F("hPtEventPlane",
1600 Form("event plane angle vs #it{p}_{T} for isolated particles, %s",parTitle.Data()),
1601 nptbins,ptmin,ptmax, 100,0,TMath::Pi());
1602 fhPtEventPlaneIso->SetYTitle("Event plane angle (rad)");
1603 fhPtEventPlaneIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1604 outputContainer->Add(fhPtEventPlaneIso) ;
1607 if(fFillNLMHistograms)
1609 fhPtNLocMaxIso = new TH2F("hPtNLocMax",
1610 Form("Number of isolated particles vs #it{p}_{T}, %s",parTitle.Data()),
1611 nptbins,ptmin,ptmax,10,0,10);
1612 fhPtNLocMaxIso->SetYTitle("#it{NLM}");
1613 fhPtNLocMaxIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1615 fhPtNLocMaxNoIso = new TH2F("hPtNLocMaxNoIso",
1616 Form("Number of not isolated particles vs #it{p}_{T}, %s",parTitle.Data()),
1617 nptbins,ptmin,ptmax,10,0,10);
1618 fhPtNLocMaxNoIso->SetYTitle("#it{NLM}");
1619 fhPtNLocMaxNoIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1620 outputContainer->Add(fhPtNLocMaxNoIso) ;
1623 fhConeSumPt = new TH2F("hConePtSum",
1624 Form("Track and Cluster #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1625 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1626 fhConeSumPt->SetYTitle("#Sigma #it{p}_{T}");
1627 fhConeSumPt->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1628 outputContainer->Add(fhConeSumPt) ;
1630 fhConeSumPtTrigEtaPhi = new TH2F("hConePtSumTrigEtaPhi",
1631 Form("Trigger #eta vs #phi, #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1632 netabins,etamin,etamax,nphibins,phimin,phimax);
1633 fhConeSumPtTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1634 fhConeSumPtTrigEtaPhi->SetXTitle("#eta_{trigger}");
1635 fhConeSumPtTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1636 outputContainer->Add(fhConeSumPtTrigEtaPhi) ;
1638 fhPtInCone = new TH2F("hPtInCone",
1639 Form("#it{p}_{T} of clusters and tracks in isolation cone for #it{R} = %2.2f",r),
1640 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
1641 fhPtInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
1642 fhPtInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1643 outputContainer->Add(fhPtInCone) ;
1645 if(fFillHighMultHistograms)
1647 fhPtInConeCent = new TH2F("hPtInConeCent",
1648 Form("#it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1649 100,0,100,nptinconebins,ptinconemin,ptinconemax);
1650 fhPtInConeCent->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
1651 fhPtInConeCent->SetXTitle("centrality");
1652 outputContainer->Add(fhPtInConeCent) ;
1655 // Cluster only histograms
1656 if(GetIsolationCut()->GetParticleTypeInCone()!=AliIsolationCut::kOnlyCharged)
1658 fhConeSumPtCluster = new TH2F("hConePtSumCluster",
1659 Form("Cluster #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1660 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1661 fhConeSumPtCluster->SetYTitle("#Sigma #it{p}_{T}");
1662 fhConeSumPtCluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1663 outputContainer->Add(fhConeSumPtCluster) ;
1665 if(fFillCellHistograms)
1667 fhConeSumPtCell = new TH2F("hConePtSumCell",
1668 Form("Cell #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1669 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1670 fhConeSumPtCell->SetYTitle("#Sigma #it{p}_{T}");
1671 fhConeSumPtCell->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1672 outputContainer->Add(fhConeSumPtCell) ;
1675 if(fFillUEBandSubtractHistograms)
1677 fhConeSumPtEtaBandUECluster = new TH2F("hConePtSumEtaBandUECluster",
1678 "#Sigma cluster #it{p}_{T} in UE Eta Band",
1679 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1680 fhConeSumPtEtaBandUECluster->SetYTitle("#Sigma #it{p}_{T}");
1681 fhConeSumPtEtaBandUECluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1682 outputContainer->Add(fhConeSumPtEtaBandUECluster) ;
1684 fhConeSumPtPhiBandUECluster = new TH2F("hConePtSumPhiBandUECluster",
1685 "#Sigma cluster #it{p}_{T} UE Phi Band",
1686 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1687 fhConeSumPtPhiBandUECluster->SetYTitle("#Sigma #it{p}_{T}");
1688 fhConeSumPtPhiBandUECluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1689 outputContainer->Add(fhConeSumPtPhiBandUECluster) ;
1691 fhConeSumPtEtaBandUEClusterTrigEtaPhi = new TH2F("hConePtSumEtaBandUEClusterTrigEtaPhi",
1692 "Trigger #eta vs #phi, #Sigma cluster #it{p}_{T} in UE Eta Band",
1693 netabins,etamin,etamax,nphibins,phimin,phimax);
1694 fhConeSumPtEtaBandUEClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1695 fhConeSumPtEtaBandUEClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
1696 fhConeSumPtEtaBandUEClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1697 outputContainer->Add(fhConeSumPtEtaBandUEClusterTrigEtaPhi) ;
1699 fhConeSumPtPhiBandUEClusterTrigEtaPhi = new TH2F("hConePtSumPhiBandUEClusterTrigEtaPhi",
1700 "Trigger #eta vs #phi, #Sigma cluster #it{p}_{T} UE Phi Band",
1701 netabins,etamin,etamax,nphibins,phimin,phimax);
1702 fhConeSumPtPhiBandUEClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1703 fhConeSumPtPhiBandUEClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
1704 fhConeSumPtPhiBandUEClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1705 outputContainer->Add(fhConeSumPtPhiBandUEClusterTrigEtaPhi) ;
1706 if(fFillCellHistograms)
1709 fhConeSumPtEtaBandUECell = new TH2F("hConePtSumEtaBandUECell",
1710 "#Sigma cell #it{p}_{T} in UE Eta Band",
1711 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1712 fhConeSumPtEtaBandUECell->SetYTitle("#Sigma #it{p}_{T}");
1713 fhConeSumPtEtaBandUECell->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1714 outputContainer->Add(fhConeSumPtEtaBandUECell) ;
1716 fhConeSumPtPhiBandUECell = new TH2F("hConePtSumPhiBandUECell",
1717 "#Sigma cell #it{p}_{T} UE Phi Band",
1718 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1719 fhConeSumPtPhiBandUECell->SetYTitle("#Sigma #it{p}_{T}");
1720 fhConeSumPtPhiBandUECell->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1721 outputContainer->Add(fhConeSumPtPhiBandUECell) ;
1723 fhConeSumPtEtaBandUECellTrigEtaPhi = new TH2F("hConePtSumEtaBandUECellTrigEtaPhi",
1724 "Trigger #eta vs #phi, #Sigma cell #it{p}_{T} in UE Eta Band",
1725 netabins,etamin,etamax,nphibins,phimin,phimax);
1726 fhConeSumPtEtaBandUECellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1727 fhConeSumPtEtaBandUECellTrigEtaPhi->SetXTitle("#eta_{trigger}");
1728 fhConeSumPtEtaBandUECellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1729 outputContainer->Add(fhConeSumPtEtaBandUECellTrigEtaPhi) ;
1731 fhConeSumPtPhiBandUECellTrigEtaPhi = new TH2F("hConePtSumPhiBandUECellTrigEtaPhi",
1732 "Trigger #eta vs #phi, #Sigma cell #it{p}_{T} UE Phi Band",
1733 netabins,etamin,etamax,nphibins,phimin,phimax);
1734 fhConeSumPtPhiBandUECellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1735 fhConeSumPtPhiBandUECellTrigEtaPhi->SetXTitle("#eta_{trigger}");
1736 fhConeSumPtPhiBandUECellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1737 outputContainer->Add(fhConeSumPtPhiBandUECellTrigEtaPhi) ;
1740 fhEtaBandCluster = new TH2F("hEtaBandCluster",
1741 Form("#eta vs #phi of clusters in #eta band isolation cone for #it{R} = %2.2f",r),
1742 netabins,-1,1,nphibins,0,TMath::TwoPi());
1743 fhEtaBandCluster->SetXTitle("#eta");
1744 fhEtaBandCluster->SetYTitle("#phi");
1745 outputContainer->Add(fhEtaBandCluster) ;
1747 fhPhiBandCluster = new TH2F("hPhiBandCluster",
1748 Form("#eta vs #phi of clusters in #phi band isolation cone for #it{R} = %2.2f",r),
1749 netabins,-1,1,nphibins,0,TMath::TwoPi());
1750 fhPhiBandCluster->SetXTitle("#eta");
1751 fhPhiBandCluster->SetYTitle("#phi");
1752 outputContainer->Add(fhPhiBandCluster) ;
1754 fhEtaPhiInConeCluster= new TH2F("hEtaPhiInConeCluster",
1755 Form("#eta vs #phi of clusters in cone for #it{R} = %2.2f",r),
1756 netabins,-1,1,nphibins,0,TMath::TwoPi());
1757 fhEtaPhiInConeCluster->SetXTitle("#eta");
1758 fhEtaPhiInConeCluster->SetYTitle("#phi");
1759 outputContainer->Add(fhEtaPhiInConeCluster) ;
1761 fhEtaPhiCluster= new TH2F("hEtaPhiCluster",
1762 Form("#eta vs #phi of all clusters"),
1763 netabins,-1,1,nphibins,0,TMath::TwoPi());
1764 fhEtaPhiCluster->SetXTitle("#eta");
1765 fhEtaPhiCluster->SetYTitle("#phi");
1766 outputContainer->Add(fhEtaPhiCluster) ;
1770 fhPtClusterInCone = new TH2F("hPtClusterInCone",
1771 Form("#it{p}_{T} of clusters in isolation cone for #it{R} = %2.2f",r),
1772 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
1773 fhPtClusterInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
1774 fhPtClusterInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1775 outputContainer->Add(fhPtClusterInCone) ;
1777 if(fFillCellHistograms)
1779 fhPtCellInCone = new TH2F("hPtCellInCone",
1780 Form("#it{p}_{T} of cells in isolation cone for #it{R} = %2.2f",r),
1781 nptbins,ptmin,ptmax,1000,0,50);
1782 fhPtCellInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
1783 fhPtCellInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1784 outputContainer->Add(fhPtCellInCone) ;
1786 fhEtaBandCell = new TH2F("hEtaBandCell",
1787 Form("#col vs #row of cells in #eta band isolation cone for #it{R} = %2.2f",r),
1789 fhEtaBandCell->SetXTitle("#col");
1790 fhEtaBandCell->SetYTitle("#row");
1791 outputContainer->Add(fhEtaBandCell) ;
1793 fhPhiBandCell = new TH2F("hPhiBandCell",
1794 Form("#col vs #row of cells in #phi band isolation cone for #it{R} = %2.2f",r),
1796 fhPhiBandCell->SetXTitle("#col");
1797 fhPhiBandCell->SetYTitle("#row");
1798 outputContainer->Add(fhPhiBandCell) ;
1801 if(fFillUEBandSubtractHistograms)
1803 fhConeSumPtEtaUESubCluster = new TH2F("hConeSumPtEtaUESubCluster",
1804 Form("Clusters #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
1805 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1806 fhConeSumPtEtaUESubCluster->SetYTitle("#Sigma #it{p}_{T}");
1807 fhConeSumPtEtaUESubCluster->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1808 outputContainer->Add(fhConeSumPtEtaUESubCluster) ;
1810 fhConeSumPtPhiUESubCluster = new TH2F("hConeSumPtPhiUESubCluster",
1811 Form("Clusters #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
1812 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1813 fhConeSumPtPhiUESubCluster->SetYTitle("#Sigma #it{p}_{T}");
1814 fhConeSumPtPhiUESubCluster->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1815 outputContainer->Add(fhConeSumPtPhiUESubCluster) ;
1817 fhConeSumPtEtaUESubClusterTrigEtaPhi = new TH2F("hConeSumPtEtaUESubClusterTrigEtaPhi",
1818 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),
1819 netabins,etamin,etamax,nphibins,phimin,phimax);
1820 fhConeSumPtEtaUESubClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1821 fhConeSumPtEtaUESubClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
1822 fhConeSumPtEtaUESubClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1823 outputContainer->Add(fhConeSumPtEtaUESubClusterTrigEtaPhi) ;
1825 fhConeSumPtPhiUESubClusterTrigEtaPhi = new TH2F("hConeSumPtPhiUESubClusterTrigEtaPhi",
1826 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),
1827 netabins,etamin,etamax,nphibins,phimin,phimax);
1828 fhConeSumPtPhiUESubClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1829 fhConeSumPtPhiUESubClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
1830 fhConeSumPtPhiUESubClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1831 outputContainer->Add(fhConeSumPtPhiUESubClusterTrigEtaPhi) ;
1833 if(fFillCellHistograms)
1835 fhConeSumPtEtaUESubCell = new TH2F("hConeSumPtEtaUESubCell",
1836 Form("Cells #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
1837 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1838 fhConeSumPtEtaUESubCell->SetYTitle("#Sigma #it{p}_{T}");
1839 fhConeSumPtEtaUESubCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1840 outputContainer->Add(fhConeSumPtEtaUESubCell) ;
1842 fhConeSumPtPhiUESubCell = new TH2F("hConeSumPtPhiUESubCell",
1843 Form("Cells #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
1844 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1845 fhConeSumPtPhiUESubCell->SetYTitle("#Sigma #it{p}_{T}");
1846 fhConeSumPtPhiUESubCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1847 outputContainer->Add(fhConeSumPtPhiUESubCell) ;
1849 fhConeSumPtEtaUESubCellTrigEtaPhi = new TH2F("hConeSumPtEtaUESubCellTrigEtaPhi",
1850 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),
1851 netabins,etamin,etamax,nphibins,phimin,phimax);
1852 fhConeSumPtEtaUESubCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1853 fhConeSumPtEtaUESubCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
1854 fhConeSumPtEtaUESubCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1855 outputContainer->Add(fhConeSumPtEtaUESubCellTrigEtaPhi) ;
1857 fhConeSumPtPhiUESubCellTrigEtaPhi = new TH2F("hConeSumPtPhiUESubCellTrigEtaPhi",
1858 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),
1859 netabins,etamin,etamax,nphibins,phimin,phimax);
1860 fhConeSumPtPhiUESubCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1861 fhConeSumPtPhiUESubCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
1862 fhConeSumPtPhiUESubCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1863 outputContainer->Add(fhConeSumPtPhiUESubCellTrigEtaPhi) ;
1866 fhFractionClusterOutConeEta = new TH2F("hFractionClusterOutConeEta",
1867 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #eta acceptance",r),
1868 nptbins,ptmin,ptmax,100,0,1);
1869 fhFractionClusterOutConeEta->SetYTitle("#it{fraction}");
1870 fhFractionClusterOutConeEta->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
1871 outputContainer->Add(fhFractionClusterOutConeEta) ;
1873 fhFractionClusterOutConeEtaTrigEtaPhi = new TH2F("hFractionClusterOutConeEtaTrigEtaPhi",
1874 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #eta acceptance, in trigger #eta-#phi ",r),
1875 netabins,etamin,etamax,nphibins,phimin,phimax);
1876 fhFractionClusterOutConeEtaTrigEtaPhi->SetZTitle("#it{fraction}");
1877 fhFractionClusterOutConeEtaTrigEtaPhi->SetXTitle("#eta_{trigger}");
1878 fhFractionClusterOutConeEtaTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1879 outputContainer->Add(fhFractionClusterOutConeEtaTrigEtaPhi) ;
1881 fhFractionClusterOutConePhi = new TH2F("hFractionClusterOutConePhi",
1882 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #phi acceptance",r),
1883 nptbins,ptmin,ptmax,100,0,1);
1884 fhFractionClusterOutConePhi->SetYTitle("#it{fraction}");
1885 fhFractionClusterOutConePhi->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
1886 outputContainer->Add(fhFractionClusterOutConePhi) ;
1888 fhFractionClusterOutConePhiTrigEtaPhi = new TH2F("hFractionClusterOutConePhiTrigEtaPhi",
1889 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #phi acceptance, in trigger #eta-#phi ",r),
1890 netabins,etamin,etamax,nphibins,phimin,phimax);
1891 fhFractionClusterOutConePhiTrigEtaPhi->SetZTitle("#it{fraction}");
1892 fhFractionClusterOutConePhiTrigEtaPhi->SetXTitle("#eta_{trigger}");
1893 fhFractionClusterOutConePhiTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1894 outputContainer->Add(fhFractionClusterOutConePhiTrigEtaPhi) ;
1896 fhConeSumPtSubvsConeSumPtTotPhiCluster = new TH2F("hConeSumPtSubvsConeSumPtTotPhiCluster",
1897 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),
1898 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1899 fhConeSumPtSubvsConeSumPtTotPhiCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1900 fhConeSumPtSubvsConeSumPtTotPhiCluster->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
1901 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotPhiCluster);
1903 fhConeSumPtSubNormvsConeSumPtTotPhiCluster = new TH2F("hConeSumPtSubNormvsConeSumPtTotPhiCluster",
1904 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),
1905 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1906 fhConeSumPtSubNormvsConeSumPtTotPhiCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1907 fhConeSumPtSubNormvsConeSumPtTotPhiCluster->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
1908 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotPhiCluster);
1910 fhConeSumPtSubvsConeSumPtTotEtaCluster = new TH2F("hConeSumPtSubvsConeSumPtTotEtaCluster",
1911 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),
1912 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1913 fhConeSumPtSubvsConeSumPtTotEtaCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1914 fhConeSumPtSubvsConeSumPtTotEtaCluster->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
1915 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotEtaCluster);
1917 fhConeSumPtSubNormvsConeSumPtTotEtaCluster = new TH2F("hConeSumPtSubNormvsConeSumPtTotEtaCluster",
1918 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),
1919 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1920 fhConeSumPtSubNormvsConeSumPtTotEtaCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1921 fhConeSumPtSubNormvsConeSumPtTotEtaCluster->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
1922 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotEtaCluster);
1924 fhConeSumPtVSUEClusterEtaBand = new TH2F("hConeSumPtVSUEClusterEtaBand",
1925 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in eta band for cluster (before normalization), R=%2.2f",r),
1926 nptsumbins,ptsummin,ptsummax,2*nptsumbins,ptsummin,2*ptsummax);
1927 fhConeSumPtVSUEClusterEtaBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
1928 fhConeSumPtVSUEClusterEtaBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
1929 outputContainer->Add(fhConeSumPtVSUEClusterEtaBand);
1931 fhConeSumPtVSUEClusterPhiBand = new TH2F("hConeSumPtVSUEClusterPhiBand",
1932 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in phi band for cluster (before normalization), R=%2.2f",r),
1933 nptsumbins,ptsummin,ptsummax,8*nptsumbins,ptsummin,8*ptsummax);
1934 fhConeSumPtVSUEClusterPhiBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
1935 fhConeSumPtVSUEClusterPhiBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
1936 outputContainer->Add(fhConeSumPtVSUEClusterPhiBand);
1938 if(fFillCellHistograms)
1940 fhFractionCellOutConeEta = new TH2F("hFractionCellOutConeEta",
1941 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #eta acceptance",r),
1942 nptbins,ptmin,ptmax,100,0,1);
1943 fhFractionCellOutConeEta->SetYTitle("#it{fraction}");
1944 fhFractionCellOutConeEta->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
1945 outputContainer->Add(fhFractionCellOutConeEta) ;
1947 fhFractionCellOutConeEtaTrigEtaPhi = new TH2F("hFractionCellOutConeEtaTrigEtaPhi",
1948 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #eta acceptance, in trigger #eta-#phi ",r),
1949 netabins,etamin,etamax,nphibins,phimin,phimax);
1950 fhFractionCellOutConeEtaTrigEtaPhi->SetZTitle("#it{fraction}");
1951 fhFractionCellOutConeEtaTrigEtaPhi->SetXTitle("#eta_{trigger}");
1952 fhFractionCellOutConeEtaTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1953 outputContainer->Add(fhFractionCellOutConeEtaTrigEtaPhi) ;
1955 fhFractionCellOutConePhi = new TH2F("hFractionCellOutConePhi",
1956 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #phi acceptance",r),
1957 nptbins,ptmin,ptmax,100,0,1);
1958 fhFractionCellOutConePhi->SetYTitle("#it{fraction}");
1959 fhFractionCellOutConePhi->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
1960 outputContainer->Add(fhFractionCellOutConePhi) ;
1962 fhFractionCellOutConePhiTrigEtaPhi = new TH2F("hFractionCellOutConePhiTrigEtaPhi",
1963 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #phi acceptance, in trigger #eta-#phi ",r),
1964 netabins,etamin,etamax,nphibins,phimin,phimax);
1965 fhFractionCellOutConePhiTrigEtaPhi->SetZTitle("#it{fraction}");
1966 fhFractionCellOutConePhiTrigEtaPhi->SetXTitle("#eta_{trigger}");
1967 fhFractionCellOutConePhiTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1968 outputContainer->Add(fhFractionCellOutConePhiTrigEtaPhi) ;
1971 fhConeSumPtSubvsConeSumPtTotPhiCell = new TH2F("hConeSumPtSubvsConeSumPtTotPhiCell",
1972 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),
1973 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1974 fhConeSumPtSubvsConeSumPtTotPhiCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1975 fhConeSumPtSubvsConeSumPtTotPhiCell->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
1976 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotPhiCell);
1978 fhConeSumPtSubNormvsConeSumPtTotPhiCell = new TH2F("hConeSumPtSubNormvsConeSumPtTotPhiCell",
1979 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),
1980 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1981 fhConeSumPtSubNormvsConeSumPtTotPhiCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1982 fhConeSumPtSubNormvsConeSumPtTotPhiCell->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
1983 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotPhiCell);
1985 fhConeSumPtSubvsConeSumPtTotEtaCell = new TH2F("hConeSumPtSubvsConeSumPtTotEtaCell",
1986 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),
1987 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1988 fhConeSumPtSubvsConeSumPtTotEtaCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1989 fhConeSumPtSubvsConeSumPtTotEtaCell->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
1990 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotEtaCell);
1992 fhConeSumPtSubNormvsConeSumPtTotEtaCell = new TH2F("hConeSumPtSubNormvsConeSumPtTotEtaCell",
1993 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),
1994 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1995 fhConeSumPtSubNormvsConeSumPtTotEtaCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1996 fhConeSumPtSubNormvsConeSumPtTotEtaCell->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
1997 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotEtaCell);
2002 // Track only histograms
2003 if(GetIsolationCut()->GetParticleTypeInCone()!=AliIsolationCut::kOnlyNeutral)
2005 fhConeSumPtTrack = new TH2F("hConePtSumTrack",
2006 Form("Track #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2007 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2008 fhConeSumPtTrack->SetYTitle("#Sigma #it{p}_{T}");
2009 fhConeSumPtTrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2010 outputContainer->Add(fhConeSumPtTrack) ;
2012 fhPtTrackInCone = new TH2F("hPtTrackInCone",
2013 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f",r),
2014 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2015 fhPtTrackInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2016 fhPtTrackInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2017 outputContainer->Add(fhPtTrackInCone) ;
2020 if(fFillUEBandSubtractHistograms)
2022 fhConeSumPtEtaBandUETrack = new TH2F("hConePtSumEtaBandUETrack",
2023 "#Sigma track #it{p}_{T} in UE Eta Band",
2024 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2025 fhConeSumPtEtaBandUETrack->SetYTitle("#Sigma #it{p}_{T}");
2026 fhConeSumPtEtaBandUETrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2027 outputContainer->Add(fhConeSumPtEtaBandUETrack) ;
2029 fhConeSumPtPhiBandUETrack = new TH2F("hConePtSumPhiBandUETrack",
2030 "#Sigma track #it{p}_{T} in UE Phi Band",
2031 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax*8);
2032 fhConeSumPtPhiBandUETrack->SetYTitle("#Sigma #it{p}_{T}");
2033 fhConeSumPtPhiBandUETrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2034 outputContainer->Add(fhConeSumPtPhiBandUETrack) ;
2037 fhConeSumPtEtaBandUETrackTrigEtaPhi = new TH2F("hConePtSumEtaBandUETrackTrigEtaPhi",
2038 "Trigger #eta vs #phi, #Sigma track #it{p}_{T} in UE Eta Band",
2039 netabins,etamin,etamax,nphibins,phimin,phimax);
2040 fhConeSumPtEtaBandUETrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2041 fhConeSumPtEtaBandUETrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2042 fhConeSumPtEtaBandUETrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2043 outputContainer->Add(fhConeSumPtEtaBandUETrackTrigEtaPhi) ;
2045 fhConeSumPtPhiBandUETrackTrigEtaPhi = new TH2F("hConePtSumPhiBandUETrackTrigEtaPhi",
2046 "Trigger #eta vs #phi, #Sigma track #it{p}_{T} in UE Phi Band",
2047 netabins,etamin,etamax,nphibins,phimin,phimax);
2048 fhConeSumPtPhiBandUETrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2049 fhConeSumPtPhiBandUETrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2050 fhConeSumPtPhiBandUETrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2051 outputContainer->Add(fhConeSumPtPhiBandUETrackTrigEtaPhi) ;
2053 fhEtaBandTrack = new TH2F("hEtaBandTrack",
2054 Form("#eta vs #phi of tracks in #eta band isolation cone for #it{R} = %2.2f",r),
2055 netabins,-1,1,nphibins,0,TMath::TwoPi());
2056 fhEtaBandTrack->SetXTitle("#eta");
2057 fhEtaBandTrack->SetYTitle("#phi");
2058 outputContainer->Add(fhEtaBandTrack) ;
2060 fhPhiBandTrack = new TH2F("hPhiBandTrack",
2061 Form("#eta vs #phi of tracks in #phi band isolation cone for #it{R} = %2.2f",r),
2062 netabins,-1,1,nphibins,0,TMath::TwoPi());
2063 fhPhiBandTrack->SetXTitle("#eta");
2064 fhPhiBandTrack->SetYTitle("#phi");
2065 outputContainer->Add(fhPhiBandTrack) ;
2067 fhConeSumPtEtaUESubTrack = new TH2F("hConeSumPtEtaUESubTrack",
2068 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
2069 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2070 fhConeSumPtEtaUESubTrack->SetYTitle("#Sigma #it{p}_{T}");
2071 fhConeSumPtEtaUESubTrack->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2072 outputContainer->Add(fhConeSumPtEtaUESubTrack) ;
2074 fhConeSumPtPhiUESubTrack = new TH2F("hConeSumPtPhiUESubTrack",
2075 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
2076 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2077 fhConeSumPtPhiUESubTrack->SetYTitle("#Sigma #it{p}_{T}");
2078 fhConeSumPtPhiUESubTrack->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2079 outputContainer->Add(fhConeSumPtPhiUESubTrack) ;
2081 fhConeSumPtEtaUESubTrackTrigEtaPhi = new TH2F("hConeSumPtEtaUESubTrackTrigEtaPhi",
2082 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),
2083 netabins,etamin,etamax,nphibins,phimin,phimax);
2084 fhConeSumPtEtaUESubTrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2085 fhConeSumPtEtaUESubTrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2086 fhConeSumPtEtaUESubTrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2087 outputContainer->Add(fhConeSumPtEtaUESubTrackTrigEtaPhi) ;
2089 fhConeSumPtPhiUESubTrackTrigEtaPhi = new TH2F("hConeSumPtPhiUESubTrackTrigEtaPhi",
2090 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),
2091 netabins,etamin,etamax,nphibins,phimin,phimax);
2092 fhConeSumPtPhiUESubTrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2093 fhConeSumPtPhiUESubTrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2094 fhConeSumPtPhiUESubTrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2095 outputContainer->Add(fhConeSumPtPhiUESubTrackTrigEtaPhi) ;
2097 fhFractionTrackOutConeEta = new TH2F("hFractionTrackOutConeEta",
2098 Form("Fraction of the isolation cone #it{R} = %2.2f, out of tracks #eta acceptance",r),
2099 nptbins,ptmin,ptmax,100,0,1);
2100 fhFractionTrackOutConeEta->SetYTitle("#it{fraction}");
2101 fhFractionTrackOutConeEta->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
2102 outputContainer->Add(fhFractionTrackOutConeEta) ;
2104 fhFractionTrackOutConeEtaTrigEtaPhi = new TH2F("hFractionTrackOutConeEtaTrigEtaPhi",
2105 Form("Fraction of the isolation cone #it{R} = %2.2f, out of tracks #eta acceptance, in trigger #eta-#phi ",r),
2106 netabins,etamin,etamax,nphibins,phimin,phimax);
2107 fhFractionTrackOutConeEtaTrigEtaPhi->SetZTitle("#it{fraction}");
2108 fhFractionTrackOutConeEtaTrigEtaPhi->SetXTitle("#eta_{trigger}");
2109 fhFractionTrackOutConeEtaTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2110 outputContainer->Add(fhFractionTrackOutConeEtaTrigEtaPhi) ;
2112 fhConeSumPtSubvsConeSumPtTotPhiTrack = new TH2F("hConeSumPtSubvsConeSumPtTotPhiTrack",
2113 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),
2114 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2115 fhConeSumPtSubvsConeSumPtTotPhiTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2116 fhConeSumPtSubvsConeSumPtTotPhiTrack->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
2117 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotPhiTrack);
2119 fhConeSumPtSubNormvsConeSumPtTotPhiTrack = new TH2F("hConeSumPtSubNormvsConeSumPtTotPhiTrack",
2120 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),
2121 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2122 fhConeSumPtSubNormvsConeSumPtTotPhiTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2123 fhConeSumPtSubNormvsConeSumPtTotPhiTrack->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2124 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotPhiTrack);
2126 fhConeSumPtSubvsConeSumPtTotEtaTrack = new TH2F("hConeSumPtSubvsConeSumPtTotEtaTrack",
2127 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),
2128 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2129 fhConeSumPtSubvsConeSumPtTotEtaTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2130 fhConeSumPtSubvsConeSumPtTotEtaTrack->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
2131 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotEtaTrack);
2133 fhConeSumPtSubNormvsConeSumPtTotEtaTrack = new TH2F("hConeSumPtSubNormvsConeSumPtTotEtaTrack",
2134 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),
2135 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2136 fhConeSumPtSubNormvsConeSumPtTotEtaTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2137 fhConeSumPtSubNormvsConeSumPtTotEtaTrack->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2138 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotEtaTrack);
2141 // UE in perpendicular cone
2142 fhPerpConeSumPt = new TH2F("hPerpConePtSum",
2143 Form("#Sigma #it{p}_{T} in isolation cone at #pm 45 degree phi from trigger particle, #it{R} = %2.2f",r),
2144 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2145 fhPerpConeSumPt->SetYTitle("#Sigma #it{p}_{T}");
2146 fhPerpConeSumPt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2147 outputContainer->Add(fhPerpConeSumPt) ;
2149 fhPtInPerpCone = new TH2F("hPtInPerpCone",
2150 Form("#it{p}_{T} in isolation cone at #pm 45 degree phi from trigger particle, #it{R} = %2.2f",r),
2151 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2152 fhPtInPerpCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2153 fhPtInPerpCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2154 outputContainer->Add(fhPtInPerpCone) ;
2156 fhEtaPhiTrack= new TH2F("hEtaPhiTrack",
2157 Form("#eta vs #phi of all Tracks"),
2158 netabins,-1,1,nphibins,0,TMath::TwoPi());
2159 fhEtaPhiTrack->SetXTitle("#eta");
2160 fhEtaPhiTrack->SetYTitle("#phi");
2161 outputContainer->Add(fhEtaPhiTrack) ;
2163 fhEtaPhiInConeTrack= new TH2F("hEtaPhiInConeTrack",
2164 Form("#eta vs #phi of Tracks in cone for #it{R} = %2.2f",r),
2165 netabins,-1,1,nphibins,0,TMath::TwoPi());
2166 fhEtaPhiInConeTrack->SetXTitle("#eta");
2167 fhEtaPhiInConeTrack->SetYTitle("#phi");
2168 outputContainer->Add(fhEtaPhiInConeTrack) ;
2170 fhConeSumPtVSUETracksEtaBand = new TH2F("hConeSumPtVSUETracksEtaBand",
2171 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in eta band for tracks (before normalization), R=%2.2f",r),
2172 nptsumbins,ptsummin,ptsummax,2*nptsumbins,ptsummin,2*ptsummax);
2173 fhConeSumPtVSUETracksEtaBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
2174 fhConeSumPtVSUETracksEtaBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
2175 outputContainer->Add(fhConeSumPtVSUETracksEtaBand);
2177 fhConeSumPtVSUETracksPhiBand = new TH2F("hConeSumPtVSUETracksPhiBand",
2178 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in phi band for tracks (before normalization), R=%2.2f",r),
2179 nptsumbins,ptsummin,ptsummax,8*nptsumbins,ptsummin,8*ptsummax);
2180 fhConeSumPtVSUETracksPhiBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
2181 fhConeSumPtVSUETracksPhiBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
2182 outputContainer->Add(fhConeSumPtVSUETracksPhiBand);
2186 if(GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kNeutralAndCharged )
2188 fhConeSumPtClustervsTrack = new TH2F("hConePtSumClustervsTrack",
2189 Form("Track vs Cluster #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2190 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2191 fhConeSumPtClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2192 fhConeSumPtClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2193 outputContainer->Add(fhConeSumPtClustervsTrack) ;
2195 if(fFillCellHistograms)
2197 fhConeSumPtCellvsTrack = new TH2F("hConePtSumCellvsTrack",
2198 Form("Track vs cell #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2199 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2200 fhConeSumPtCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2201 fhConeSumPtCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2202 outputContainer->Add(fhConeSumPtCellvsTrack) ;
2204 fhConeSumPtCellTrack = new TH2F("hConePtSumCellTrack",
2205 Form("Track and Cell #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2206 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2207 fhConeSumPtCellTrack->SetYTitle("#Sigma #it{p}_{T}");
2208 fhConeSumPtCellTrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2209 outputContainer->Add(fhConeSumPtCellTrack) ;
2211 fhConeSumPtCellTrackTrigEtaPhi = new TH2F("hConePtSumCellTrackTrigEtaPhi",
2212 Form("Trigger #eta vs #phi, #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2213 netabins,etamin,etamax,nphibins,phimin,phimax);
2214 fhConeSumPtCellTrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2215 fhConeSumPtCellTrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2216 fhConeSumPtCellTrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2217 outputContainer->Add(fhConeSumPtCellTrackTrigEtaPhi) ;
2221 if(fFillUEBandSubtractHistograms)
2223 fhConeSumPtEtaUESub = new TH2F("hConeSumPtEtaUESub",
2224 Form("#Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
2225 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2226 fhConeSumPtEtaUESub->SetYTitle("#Sigma #it{p}_{T}");
2227 fhConeSumPtEtaUESub->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2228 outputContainer->Add(fhConeSumPtEtaUESub) ;
2230 fhConeSumPtPhiUESub = new TH2F("hConeSumPtPhiUESub",
2231 Form("#Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
2232 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2233 fhConeSumPtPhiUESub->SetYTitle("#Sigma #it{p}_{T}");
2234 fhConeSumPtPhiUESub->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2235 outputContainer->Add(fhConeSumPtPhiUESub) ;
2237 fhConeSumPtEtaUESubTrigEtaPhi = new TH2F("hConeSumPtEtaUESubTrigEtaPhi",
2238 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),
2239 netabins,etamin,etamax,nphibins,phimin,phimax);
2240 fhConeSumPtEtaUESubTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2241 fhConeSumPtEtaUESubTrigEtaPhi->SetXTitle("#eta_{trigger}");
2242 fhConeSumPtEtaUESubTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2243 outputContainer->Add(fhConeSumPtEtaUESubTrigEtaPhi) ;
2245 fhConeSumPtPhiUESubTrigEtaPhi = new TH2F("hConeSumPtPhiUESubTrigEtaPhi",
2246 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),
2247 netabins,etamin,etamax,nphibins,phimin,phimax);
2248 fhConeSumPtPhiUESubTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2249 fhConeSumPtPhiUESubTrigEtaPhi->SetXTitle("#eta_{trigger}");
2250 fhConeSumPtPhiUESubTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2251 outputContainer->Add(fhConeSumPtPhiUESubTrigEtaPhi) ;
2253 fhConeSumPtEtaUESubClustervsTrack = new TH2F("hConePtSumEtaUESubClustervsTrack",
2254 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub eta band in isolation cone for #it{R} = %2.2f",r),
2255 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2256 fhConeSumPtEtaUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2257 fhConeSumPtEtaUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2258 outputContainer->Add(fhConeSumPtEtaUESubClustervsTrack) ;
2260 fhConeSumPtPhiUESubClustervsTrack = new TH2F("hConePhiUESubPtSumClustervsTrack",
2261 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub phi band in isolation cone for #it{R} = %2.2f",r),
2262 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2263 fhConeSumPtPhiUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2264 fhConeSumPtPhiUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2265 outputContainer->Add(fhConeSumPtPhiUESubClustervsTrack) ;
2267 fhEtaBandClustervsTrack = new TH2F("hEtaBandClustervsTrack",
2268 Form("Track vs Cluster #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2269 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2270 fhEtaBandClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2271 fhEtaBandClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2272 outputContainer->Add(fhEtaBandClustervsTrack) ;
2274 fhPhiBandClustervsTrack = new TH2F("hPhiBandClustervsTrack",
2275 Form("Track vs Cluster #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2276 nptsumbins,ptsummin,ptsummax*4,nptsumbins,ptsummin,ptsummax*8);
2277 fhPhiBandClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2278 fhPhiBandClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2279 outputContainer->Add(fhPhiBandClustervsTrack) ;
2281 fhEtaBandNormClustervsTrack = new TH2F("hEtaBandNormClustervsTrack",
2282 Form("Track vs Cluster #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2283 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2284 fhEtaBandNormClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2285 fhEtaBandNormClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2286 outputContainer->Add(fhEtaBandNormClustervsTrack) ;
2288 fhPhiBandNormClustervsTrack = new TH2F("hPhiBandNormClustervsTrack",
2289 Form("Track vs Cluster #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2290 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2291 fhPhiBandNormClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2292 fhPhiBandNormClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2293 outputContainer->Add(fhPhiBandNormClustervsTrack) ;
2295 fhConeSumPtEtaUESubClustervsTrack = new TH2F("hConePtSumEtaUESubClustervsTrack",
2296 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub eta band in isolation cone for #it{R} = %2.2f",r),
2297 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2298 fhConeSumPtEtaUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2299 fhConeSumPtEtaUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2300 outputContainer->Add(fhConeSumPtEtaUESubClustervsTrack) ;
2302 fhConeSumPtPhiUESubClustervsTrack = new TH2F("hConePhiUESubPtSumClustervsTrack",
2303 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub phi band in isolation cone for #it{R} = %2.2f",r),
2304 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2305 fhConeSumPtPhiUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2306 fhConeSumPtPhiUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2307 outputContainer->Add(fhConeSumPtPhiUESubClustervsTrack) ;
2309 if(fFillCellHistograms)
2312 fhConeSumPtEtaUESubCellvsTrack = new TH2F("hConePtSumEtaUESubCellvsTrack",
2313 Form("Track vs Cell #Sigma #it{p}_{T} UE sub eta band in isolation cone for #it{R} = %2.2f",r),
2314 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2315 fhConeSumPtEtaUESubCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2316 fhConeSumPtEtaUESubCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2317 outputContainer->Add(fhConeSumPtEtaUESubCellvsTrack) ;
2319 fhConeSumPtPhiUESubCellvsTrack = new TH2F("hConePhiUESubPtSumCellvsTrack",
2320 Form("Track vs Cell #Sigma #it{p}_{T} UE sub phi band in isolation cone for #it{R} = %2.2f",r),
2321 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2322 fhConeSumPtPhiUESubCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2323 fhConeSumPtPhiUESubCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2324 outputContainer->Add(fhConeSumPtPhiUESubCellvsTrack) ;
2326 fhEtaBandCellvsTrack = new TH2F("hEtaBandCellvsTrack",
2327 Form("Track vs Cell #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2328 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2329 fhEtaBandCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2330 fhEtaBandCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2331 outputContainer->Add(fhEtaBandCellvsTrack) ;
2333 fhPhiBandCellvsTrack = new TH2F("hPhiBandCellvsTrack",
2334 Form("Track vs Cell #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2335 nptsumbins,ptsummin,ptsummax*4,nptsumbins,ptsummin,ptsummax*8);
2336 fhPhiBandCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2337 fhPhiBandCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2338 outputContainer->Add(fhPhiBandCellvsTrack) ;
2340 fhEtaBandNormCellvsTrack = new TH2F("hEtaBandNormCellvsTrack",
2341 Form("Track vs Cell #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2342 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2343 fhEtaBandNormCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2344 fhEtaBandNormCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2345 outputContainer->Add(fhEtaBandNormCellvsTrack) ;
2347 fhPhiBandNormCellvsTrack = new TH2F("hPhiBandNormCellvsTrack",
2348 Form("Track vs Cell #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2349 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2350 fhPhiBandNormCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2351 fhPhiBandNormCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2352 outputContainer->Add(fhPhiBandNormCellvsTrack) ;
2354 fhConeSumPtEtaUESubTrackCell = new TH2F("hConeSumPtEtaUESubTrackCell",
2355 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
2356 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2357 fhConeSumPtEtaUESubTrackCell->SetYTitle("#Sigma #it{p}_{T}");
2358 fhConeSumPtEtaUESubTrackCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2359 outputContainer->Add(fhConeSumPtEtaUESubTrackCell) ;
2361 fhConeSumPtPhiUESubTrackCell = new TH2F("hConeSumPtPhiUESubTrackCell",
2362 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
2363 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2364 fhConeSumPtPhiUESubTrackCell->SetYTitle("#Sigma #it{p}_{T}");
2365 fhConeSumPtPhiUESubTrackCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2366 outputContainer->Add(fhConeSumPtPhiUESubTrackCell) ;
2368 fhConeSumPtEtaUESubTrackCellTrigEtaPhi = new TH2F("hConeSumPtEtaUESubTrackCellTrigEtaPhi",
2369 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),
2370 netabins,etamin,etamax,nphibins,phimin,phimax);
2371 fhConeSumPtEtaUESubTrackCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2372 fhConeSumPtEtaUESubTrackCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
2373 fhConeSumPtEtaUESubTrackCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2374 outputContainer->Add(fhConeSumPtEtaUESubTrackCellTrigEtaPhi) ;
2376 fhConeSumPtPhiUESubTrackCellTrigEtaPhi = new TH2F("hConeSumPtPhiUESubTrackCellTrigEtaPhi",
2377 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),
2378 netabins,etamin,etamax,nphibins,phimin,phimax);
2379 fhConeSumPtPhiUESubTrackCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2380 fhConeSumPtPhiUESubTrackCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
2381 fhConeSumPtPhiUESubTrackCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2382 outputContainer->Add(fhConeSumPtPhiUESubTrackCellTrigEtaPhi) ;
2387 for(Int_t iso = 0; iso < 2; iso++)
2391 fhTrackMatchedDEta[iso] = new TH2F
2392 (Form("hTrackMatchedDEta%s",isoName[iso].Data()),
2393 Form("%s - d#eta of cluster-track vs cluster energy, %s",isoTitle[iso].Data(),parTitle.Data()),
2394 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
2395 fhTrackMatchedDEta[iso]->SetYTitle("d#eta");
2396 fhTrackMatchedDEta[iso]->SetXTitle("E_{cluster} (GeV)");
2398 fhTrackMatchedDPhi[iso] = new TH2F
2399 (Form("hTrackMatchedDPhi%s",isoName[iso].Data()),
2400 Form("%s - d#phi of cluster-track vs cluster energy, %s",isoTitle[iso].Data(),parTitle.Data()),
2401 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
2402 fhTrackMatchedDPhi[iso]->SetYTitle("d#phi (rad)");
2403 fhTrackMatchedDPhi[iso]->SetXTitle("E_{cluster} (GeV)");
2405 fhTrackMatchedDEtaDPhi[iso] = new TH2F
2406 (Form("hTrackMatchedDEtaDPhi%s",isoName[iso].Data()),
2407 Form("%s - d#eta vs d#phi of cluster-track, %s",isoTitle[iso].Data(),parTitle.Data()),
2408 nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax);
2409 fhTrackMatchedDEtaDPhi[iso]->SetYTitle("d#phi (rad)");
2410 fhTrackMatchedDEtaDPhi[iso]->SetXTitle("d#eta");
2412 outputContainer->Add(fhTrackMatchedDEta[iso]) ;
2413 outputContainer->Add(fhTrackMatchedDPhi[iso]) ;
2414 outputContainer->Add(fhTrackMatchedDEtaDPhi[iso]) ;
2416 fhdEdx[iso] = new TH2F
2417 (Form("hdEdx%s",isoName[iso].Data()),
2418 Form("%s - Matched track <d#it{E}/d#it{x}> vs cluster #it{E}, %s",isoTitle[iso].Data(),parTitle.Data()),
2419 nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
2420 fhdEdx[iso]->SetXTitle("#it{E} (GeV)");
2421 fhdEdx[iso]->SetYTitle("<d#it{E}/d#it{x}>");
2422 outputContainer->Add(fhdEdx[iso]);
2424 fhEOverP[iso] = new TH2F
2425 (Form("hEOverP%s",isoName[iso].Data()),
2426 Form("%s - Matched track #it{E}/#it{p} vs cluster, %s",isoTitle[iso].Data(),parTitle.Data()),
2427 nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
2428 fhEOverP[iso]->SetXTitle("#it{E} (GeV)");
2429 fhEOverP[iso]->SetYTitle("#it{E}/#it{p}");
2430 outputContainer->Add(fhEOverP[iso]);
2434 fhTrackMatchedMCParticle[iso] = new TH2F
2435 (Form("hTrackMatchedMCParticle%s",isoName[iso].Data()),
2436 Form("%s - Origin of particle vs cluster #it{E}, %s",isoTitle[iso].Data(),parTitle.Data()),
2437 nptbins,ptmin,ptmax,8,0,8);
2438 fhTrackMatchedMCParticle[iso]->SetXTitle("#it{E} (GeV)");
2439 //fhTrackMatchedMCParticle[iso]->SetYTitle("Particle type");
2441 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(1 ,"Photon");
2442 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(2 ,"Electron");
2443 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(3 ,"Meson Merged");
2444 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(4 ,"Rest");
2445 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(5 ,"Conv. Photon");
2446 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(6 ,"Conv. Electron");
2447 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(7 ,"Conv. Merged");
2448 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(8 ,"Conv. Rest");
2450 outputContainer->Add(fhTrackMatchedMCParticle[iso]);
2456 fhELambda0[iso] = new TH2F
2457 (Form("hELambda0%s",isoName[iso].Data()),
2458 Form("%s cluster : #it{E} vs #lambda_{0}, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2459 fhELambda0[iso]->SetYTitle("#lambda_{0}^{2}");
2460 fhELambda0[iso]->SetXTitle("#it{E} (GeV)");
2461 outputContainer->Add(fhELambda0[iso]) ;
2463 fhELambda1[iso] = new TH2F
2464 (Form("hELambda1%s",isoName[iso].Data()),
2465 Form("%s cluster: #it{E} vs #lambda_{1}, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2466 fhELambda1[iso]->SetYTitle("#lambda_{1}^{2}");
2467 fhELambda1[iso]->SetXTitle("#it{E} (GeV)");
2468 outputContainer->Add(fhELambda1[iso]) ;
2470 fhPtLambda0[iso] = new TH2F
2471 (Form("hPtLambda0%s",isoName[iso].Data()),
2472 Form("%s cluster : #it{p}_{T} vs #lambda_{0}, %s",isoTitle[iso].Data(), parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2473 fhPtLambda0[iso]->SetYTitle("#lambda_{0}^{2}");
2474 fhPtLambda0[iso]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2475 outputContainer->Add(fhPtLambda0[iso]) ;
2479 for(Int_t imc = 0; imc < 9; imc++)
2481 fhPtLambda0MC[imc][iso] = new TH2F(Form("hPtLambda0%s_MC%s",isoName[iso].Data(),mcPartName[imc].Data()),
2482 Form("%s cluster : #it{p}_{T} vs #lambda_{0}: %s %s",isoTitle[iso].Data(),mcPartType[imc].Data(),parTitle.Data()),
2483 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2484 fhPtLambda0MC[imc][iso]->SetYTitle("#lambda_{0}^{2}");
2485 fhPtLambda0MC[imc][iso]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2486 outputContainer->Add( fhPtLambda0MC[imc][iso]) ;
2490 if(fIsoDetector=="EMCAL" && GetFirstSMCoveredByTRD() >= 0)
2492 fhPtLambda0TRD[iso] = new TH2F
2493 (Form("hPtLambda0TRD%s",isoName[iso].Data()),
2494 Form("%s cluster: #it{p}_{T} vs #lambda_{0}, SM behind TRD, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2495 fhPtLambda0TRD[iso]->SetYTitle("#lambda_{0}^{2}");
2496 fhPtLambda0TRD[iso]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2497 outputContainer->Add(fhPtLambda0TRD[iso]) ;
2499 fhELambda0TRD[iso] = new TH2F
2500 (Form("hELambda0TRD%s",isoName[iso].Data()),
2501 Form("%s cluster: #it{E} vs #lambda_{0}, SM behind TRD, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2502 fhELambda0TRD[iso]->SetYTitle("#lambda_{0}^{2}");
2503 fhELambda0TRD[iso]->SetXTitle("#it{E} (GeV)");
2504 outputContainer->Add(fhELambda0TRD[iso]) ;
2506 fhELambda1TRD[iso] = new TH2F
2507 (Form("hELambda1TRD%s",isoName[iso].Data()),
2508 Form("%s cluster: #it{E} vs #lambda_{1}, SM behind TRD, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2509 fhELambda1TRD[iso]->SetYTitle("#lambda_{1}^{2}");
2510 fhELambda1TRD[iso]->SetXTitle("#it{E} (GeV)");
2511 outputContainer->Add(fhELambda1TRD[iso]) ;
2514 if(fFillNLMHistograms)
2516 fhNLocMax[iso] = new TH2F
2517 (Form("hNLocMax%s",isoName[iso].Data()),
2518 Form("%s - Number of local maxima in cluster, %s",isoTitle[iso].Data(),parTitle.Data()),
2519 nptbins,ptmin,ptmax,10,0,10);
2520 fhNLocMax[iso]->SetYTitle("#it{NLM}");
2521 fhNLocMax[iso]->SetXTitle("#it{E} (GeV)");
2522 outputContainer->Add(fhNLocMax[iso]) ;
2524 fhELambda0LocMax1[iso] = new TH2F
2525 (Form("hELambda0LocMax1%s",isoName[iso].Data()),
2526 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);
2527 fhELambda0LocMax1[iso]->SetYTitle("#lambda_{0}^{2}");
2528 fhELambda0LocMax1[iso]->SetXTitle("#it{E} (GeV)");
2529 outputContainer->Add(fhELambda0LocMax1[iso]) ;
2531 fhELambda1LocMax1[iso] = new TH2F
2532 (Form("hELambda1LocMax1%s",isoName[iso].Data()),
2533 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);
2534 fhELambda1LocMax1[iso]->SetYTitle("#lambda_{1}^{2}");
2535 fhELambda1LocMax1[iso]->SetXTitle("#it{E} (GeV)");
2536 outputContainer->Add(fhELambda1LocMax1[iso]) ;
2538 fhELambda0LocMax2[iso] = new TH2F
2539 (Form("hELambda0LocMax2%s",isoName[iso].Data()),
2540 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);
2541 fhELambda0LocMax2[iso]->SetYTitle("#lambda_{0}^{2}");
2542 fhELambda0LocMax2[iso]->SetXTitle("#it{E} (GeV)");
2543 outputContainer->Add(fhELambda0LocMax2[iso]) ;
2545 fhELambda1LocMax2[iso] = new TH2F
2546 (Form("hELambda1LocMax2%s",isoName[iso].Data()),
2547 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);
2548 fhELambda1LocMax2[iso]->SetYTitle("#lambda_{1}^{2}");
2549 fhELambda1LocMax2[iso]->SetXTitle("#it{E} (GeV)");
2550 outputContainer->Add(fhELambda1LocMax2[iso]) ;
2552 fhELambda0LocMaxN[iso] = new TH2F
2553 ( Form("hELambda0LocMaxN%s",isoName[iso].Data()),
2554 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);
2555 fhELambda0LocMaxN[iso]->SetYTitle("#lambda_{0}^{2}");
2556 fhELambda0LocMaxN[iso]->SetXTitle("#it{E} (GeV)");
2557 outputContainer->Add(fhELambda0LocMaxN[iso]) ;
2559 fhELambda1LocMaxN[iso] = new TH2F
2560 (Form("hELambda1LocMaxN%s",isoName[iso].Data()),
2561 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);
2562 fhELambda1LocMaxN[iso]->SetYTitle("#lambda_{1}^{2}");
2563 fhELambda1LocMaxN[iso]->SetXTitle("#it{E} (GeV)");
2564 outputContainer->Add(fhELambda1LocMaxN[iso]) ;
2567 } // control histograms for isolated and non isolated objects
2570 if(fFillPileUpHistograms)
2572 fhPtTrackInConeOtherBC = new TH2F("hPtTrackInConeOtherBC",
2573 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC!=0",r),
2574 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2575 fhPtTrackInConeOtherBC->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2576 fhPtTrackInConeOtherBC->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2577 outputContainer->Add(fhPtTrackInConeOtherBC) ;
2579 fhPtTrackInConeOtherBCPileUpSPD = new TH2F("hPtTrackInConeOtherBCPileUpSPD",
2580 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC!=0, pile-up from SPD",r),
2581 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2582 fhPtTrackInConeOtherBCPileUpSPD->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2583 fhPtTrackInConeOtherBCPileUpSPD->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2584 outputContainer->Add(fhPtTrackInConeOtherBCPileUpSPD) ;
2586 fhPtTrackInConeBC0 = new TH2F("hPtTrackInConeBC0",
2587 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC==0",r),
2588 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2589 fhPtTrackInConeBC0->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2590 fhPtTrackInConeBC0->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2591 outputContainer->Add(fhPtTrackInConeBC0) ;
2593 fhPtTrackInConeVtxBC0 = new TH2F("hPtTrackInConeVtxBC0",
2594 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC==0",r),
2595 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2596 fhPtTrackInConeVtxBC0->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2597 fhPtTrackInConeVtxBC0->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2598 outputContainer->Add(fhPtTrackInConeVtxBC0) ;
2601 fhPtTrackInConeBC0PileUpSPD = new TH2F("hPtTrackInConeBC0PileUpSPD",
2602 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC==0, pile-up from SPD",r),
2603 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2604 fhPtTrackInConeBC0PileUpSPD->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2605 fhPtTrackInConeBC0PileUpSPD->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2606 outputContainer->Add(fhPtTrackInConeBC0PileUpSPD) ;
2609 for (Int_t i = 0; i < 7 ; i++)
2611 fhPtInConePileUp[i] = new TH2F(Form("hPtInConePileUp%s",pileUpName[i].Data()),
2612 Form("#it{p}_{T} in isolation cone for #it{R} = %2.2f, from pile-up (%s)",r,pileUpName[i].Data()),
2613 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2614 fhPtInConePileUp[i]->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2615 fhPtInConePileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2616 outputContainer->Add(fhPtInConePileUp[i]) ;
2622 // For histograms in arrays, index in the array, corresponding to any particle origin
2624 for(Int_t i = 0; i < 6; i++)
2626 fhEPrimMC[i] = new TH1F(Form("hEPrim_MC%s",ppname[i].Data()),
2627 Form("primary photon %s : #it{E}, %s",pptype[i].Data(),parTitle.Data()),
2628 nptbins,ptmin,ptmax);
2629 fhEPrimMC[i]->SetXTitle("#it{E} (GeV)");
2630 outputContainer->Add(fhEPrimMC[i]) ;
2632 fhPtPrimMCiso[i] = new TH1F(Form("hPtPrim_MCiso%s",ppname[i].Data()),
2633 Form("primary isolated photon %s : #it{p}_{T}, %s",pptype[i].Data(),parTitle.Data()),
2634 nptbins,ptmin,ptmax);
2635 fhPtPrimMCiso[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2636 outputContainer->Add(fhPtPrimMCiso[i]) ;
2638 fhEtaPrimMC[i] = new TH2F(Form("hEtaPrim_MC%s",ppname[i].Data()),
2639 Form("primary photon %s : #eta vs #it{p}_{T}, %s",pptype[i].Data(),parTitle.Data()),
2640 nptbins,ptmin,ptmax,200,-2,2);
2641 fhEtaPrimMC[i]->SetYTitle("#eta");
2642 fhEtaPrimMC[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2643 outputContainer->Add(fhEtaPrimMC[i]) ;
2645 fhPhiPrimMC[i] = new TH2F(Form("hPhiPrim_MC%s",ppname[i].Data()),
2646 Form("primary photon %s : #phi vs #it{p}_{T}, %s",pptype[i].Data(),parTitle.Data()),
2647 nptbins,ptmin,ptmax,200,0.,TMath::TwoPi());
2648 fhPhiPrimMC[i]->SetYTitle("#phi");
2649 fhPhiPrimMC[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2650 outputContainer->Add(fhPhiPrimMC[i]) ;
2659 const Int_t buffersize = 255;
2660 char name[buffersize];
2661 char title[buffersize];
2662 for(Int_t icone = 0; icone<fNCones; icone++)
2664 // sum pt in cone vs. pt leading
2665 snprintf(name, buffersize,"hSumPtLeadingPt_Cone_%d",icone);
2666 snprintf(title, buffersize,"#Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
2667 fhSumPtLeadingPt[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2668 fhSumPtLeadingPt[icone] ->SetYTitle("#sum_{cone}#it{p}_{T} (GeV/#it{c})");//#Sigma #it{p}_{T}
2669 fhSumPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
2670 outputContainer->Add(fhSumPtLeadingPt[icone]) ;
2672 // pt in cone vs. pt leading
2673 snprintf(name, buffersize,"hPtLeadingPt_Cone_%d",icone);
2674 snprintf(title, buffersize,"#it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
2675 fhPtLeadingPt[icone] = new TH2F(name, title, nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2676 fhPtLeadingPt[icone] ->SetYTitle("#it{p}_{T}^{cone} (GeV/#it{c})");
2677 fhPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
2678 outputContainer->Add(fhPtLeadingPt[icone]) ;
2680 // sum pt in cone vs. pt leading in the forward region (for background subtraction studies)
2681 snprintf(name, buffersize,"hPerpSumPtLeadingPt_Cone_%d",icone);
2682 snprintf(title, buffersize,"#Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
2683 fhPerpSumPtLeadingPt[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2684 fhPerpSumPtLeadingPt[icone] ->SetYTitle("#sum_{cone}#it{p}_{T} (GeV/#it{c})");//#Sigma #it{p}_{T}
2685 fhPerpSumPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
2686 outputContainer->Add(fhPerpSumPtLeadingPt[icone]) ;
2688 // pt in cone vs. pt leading in the forward region (for background subtraction studies)
2689 snprintf(name, buffersize,"hPerpPtLeadingPt_Cone_%d",icone);
2690 snprintf(title, buffersize,"#it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
2691 fhPerpPtLeadingPt[icone] = new TH2F(name, title, nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2692 fhPerpPtLeadingPt[icone] ->SetYTitle("#it{p}_{T}^{cone} (GeV/#it{c})");
2693 fhPerpPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
2694 outputContainer->Add(fhPerpPtLeadingPt[icone]) ;
2698 for(Int_t imc = 0; imc < 9; imc++)
2700 snprintf(name , buffersize,"hSumPtLeadingPt_MC%s_Cone_%d",mcPartName[imc].Data(),icone);
2701 snprintf(title, buffersize,"Candidate %s #it{p}_{T} vs cone #Sigma #it{p}_{T} for #it{R}=%2.2f",mcPartType[imc].Data(),fConeSizes[icone]);
2702 fhSumPtLeadingPtMC[imc][icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2703 fhSumPtLeadingPtMC[imc][icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2704 fhSumPtLeadingPtMC[imc][icone]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2705 outputContainer->Add(fhSumPtLeadingPtMC[imc][icone]) ;
2709 for(Int_t ipt = 0; ipt<fNPtThresFrac;ipt++)
2711 snprintf(name, buffersize,"hPtThres_Cone_%d_Pt%d",icone,ipt);
2712 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]);
2713 fhPtThresIsolated[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2714 fhPtThresIsolated[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2715 outputContainer->Add(fhPtThresIsolated[icone][ipt]) ;
2717 snprintf(name, buffersize,"hPtFrac_Cone_%d_Pt%d",icone,ipt);
2718 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]);
2719 fhPtFracIsolated[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2720 fhPtFracIsolated[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2721 outputContainer->Add(fhPtFracIsolated[icone][ipt]) ;
2723 snprintf(name, buffersize,"hSumPt_Cone_%d_Pt%d",icone,ipt);
2724 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]);
2725 fhSumPtIsolated[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2726 // fhSumPtIsolated[icone][ipt]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2727 fhSumPtIsolated[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2728 outputContainer->Add(fhSumPtIsolated[icone][ipt]) ;
2730 snprintf(name, buffersize,"hPtSumDensity_Cone_%d_Pt%d",icone,ipt);
2731 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]);
2732 fhPtSumDensityIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2733 //fhPtSumIsolated[icone][ipt]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2734 fhPtSumDensityIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2735 outputContainer->Add(fhPtSumDensityIso[icone][ipt]) ;
2737 snprintf(name, buffersize,"hPtFracPtSum_Cone_%d_Pt%d",icone,ipt);
2738 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]);
2739 fhPtFracPtSumIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2740 //fhPtSumIsolated[icone][ipt]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2741 fhPtFracPtSumIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2742 outputContainer->Add(fhPtFracPtSumIso[icone][ipt]) ;
2745 snprintf(name, buffersize,"hEtaPhiPtThres_Cone_%d_Pt%d",icone,ipt);
2746 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]);
2747 fhEtaPhiPtThresIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2748 fhEtaPhiPtThresIso[icone][ipt]->SetXTitle("#eta");
2749 fhEtaPhiPtThresIso[icone][ipt]->SetYTitle("#phi");
2750 outputContainer->Add(fhEtaPhiPtThresIso[icone][ipt]) ;
2752 snprintf(name, buffersize,"hEtaPhiPtFrac_Cone_%d_Pt%d",icone,ipt);
2753 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]);
2754 fhEtaPhiPtFracIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2755 fhEtaPhiPtFracIso[icone][ipt]->SetXTitle("#eta");
2756 fhEtaPhiPtFracIso[icone][ipt]->SetYTitle("#phi");
2757 outputContainer->Add(fhEtaPhiPtFracIso[icone][ipt]) ;
2759 snprintf(name, buffersize,"hEtaPhiPtSum_Cone_%d_Pt%d",icone,ipt);
2760 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]);
2761 fhEtaPhiPtSumIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2762 fhEtaPhiPtSumIso[icone][ipt]->SetXTitle("#eta");
2763 fhEtaPhiPtSumIso[icone][ipt]->SetYTitle("#phi");
2764 outputContainer->Add(fhEtaPhiPtSumIso[icone][ipt]) ;
2766 snprintf(name, buffersize,"hEtaPhiSumDensity_Cone_%d_Pt%d",icone,ipt);
2767 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]);
2768 fhEtaPhiSumDensityIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2769 fhEtaPhiSumDensityIso[icone][ipt]->SetXTitle("#eta");
2770 fhEtaPhiSumDensityIso[icone][ipt]->SetYTitle("#phi");
2771 outputContainer->Add(fhEtaPhiSumDensityIso[icone][ipt]) ;
2773 snprintf(name, buffersize,"hEtaPhiFracPtSum_Cone_%d_Pt%d",icone,ipt);
2774 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]);
2775 fhEtaPhiFracPtSumIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2776 fhEtaPhiFracPtSumIso[icone][ipt]->SetXTitle("#eta");
2777 fhEtaPhiFracPtSumIso[icone][ipt]->SetYTitle("#phi");
2778 outputContainer->Add(fhEtaPhiFracPtSumIso[icone][ipt]) ;
2780 if(fFillTaggedDecayHistograms)
2782 // pt decays isolated
2783 snprintf(name, buffersize,"hPtThres_Decay_Cone_%d_Pt%d",icone,ipt);
2784 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]);
2785 fhPtPtThresDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2786 fhPtPtThresDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2787 outputContainer->Add(fhPtPtThresDecayIso[icone][ipt]) ;
2789 snprintf(name, buffersize,"hPtFrac_Decay_Cone_%d_Pt%d",icone,ipt);
2790 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]);
2791 fhPtPtFracDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2792 fhPtPtFracDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2793 outputContainer->Add(fhPtPtFracDecayIso[icone][ipt]) ;
2795 snprintf(name, buffersize,"hPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
2796 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]);
2797 fhPtPtSumDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2798 // fhPtPtSumDecayIso[icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2799 fhPtPtSumDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2800 outputContainer->Add(fhPtPtSumDecayIso[icone][ipt]) ;
2802 snprintf(name, buffersize,"hPtSumDensity_Decay_Cone_%d_Pt%d",icone,ipt);
2803 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]);
2804 fhPtSumDensityDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2805 // fhPtPtSumDecayIso[icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2806 fhPtSumDensityDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2807 outputContainer->Add(fhPtSumDensityDecayIso[icone][ipt]) ;
2809 snprintf(name, buffersize,"hPtFracPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
2810 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]);
2811 fhPtFracPtSumDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2812 // fhPtPtSumDecayIso[icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2813 fhPtFracPtSumDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2814 outputContainer->Add(fhPtFracPtSumDecayIso[icone][ipt]) ;
2817 snprintf(name, buffersize,"hEtaPhiPtThres_Decay_Cone_%d_Pt%d",icone,ipt);
2818 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]);
2819 fhEtaPhiPtThresDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2820 fhEtaPhiPtThresDecayIso[icone][ipt]->SetXTitle("#eta");
2821 fhEtaPhiPtThresDecayIso[icone][ipt]->SetYTitle("#phi");
2822 outputContainer->Add(fhEtaPhiPtThresDecayIso[icone][ipt]) ;
2824 snprintf(name, buffersize,"hEtaPhiPtFrac_Decay_Cone_%d_Pt%d",icone,ipt);
2825 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]);
2826 fhEtaPhiPtFracDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2827 fhEtaPhiPtFracDecayIso[icone][ipt]->SetXTitle("#eta");
2828 fhEtaPhiPtFracDecayIso[icone][ipt]->SetYTitle("#phi");
2829 outputContainer->Add(fhEtaPhiPtFracDecayIso[icone][ipt]) ;
2832 snprintf(name, buffersize,"hEtaPhiPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
2833 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]);
2834 fhEtaPhiPtSumDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2835 fhEtaPhiPtSumDecayIso[icone][ipt]->SetXTitle("#eta");
2836 fhEtaPhiPtSumDecayIso[icone][ipt]->SetYTitle("#phi");
2837 outputContainer->Add(fhEtaPhiPtSumDecayIso[icone][ipt]) ;
2839 snprintf(name, buffersize,"hEtaPhiSumDensity_Decay_Cone_%d_Pt%d",icone,ipt);
2840 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]);
2841 fhEtaPhiSumDensityDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2842 fhEtaPhiSumDensityDecayIso[icone][ipt]->SetXTitle("#eta");
2843 fhEtaPhiSumDensityDecayIso[icone][ipt]->SetYTitle("#phi");
2844 outputContainer->Add(fhEtaPhiSumDensityDecayIso[icone][ipt]) ;
2846 snprintf(name, buffersize,"hEtaPhiFracPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
2847 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]);
2848 fhEtaPhiFracPtSumDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2849 fhEtaPhiFracPtSumDecayIso[icone][ipt]->SetXTitle("#eta");
2850 fhEtaPhiFracPtSumDecayIso[icone][ipt]->SetYTitle("#phi");
2851 outputContainer->Add(fhEtaPhiFracPtSumDecayIso[icone][ipt]) ;
2857 for(Int_t imc = 0; imc < 9; imc++)
2859 snprintf(name , buffersize,"hPtThreshMC%s_Cone_%d_Pt%d",mcPartName[imc].Data(),icone,ipt);
2860 snprintf(title, buffersize,"Isolated %s #it{p}_{T} for #it{R}=%2.2f and #it{p}_{T}^{th}=%2.2f",
2861 mcPartType[imc].Data(),fConeSizes[icone], fPtThresholds[ipt]);
2862 fhPtThresIsolatedMC[imc][icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2863 fhPtThresIsolatedMC[imc][icone][ipt]->SetYTitle("#it{counts}");
2864 fhPtThresIsolatedMC[imc][icone][ipt]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2865 outputContainer->Add(fhPtThresIsolatedMC[imc][icone][ipt]) ;
2868 snprintf(name , buffersize,"hPtFracMC%s_Cone_%d_Pt%d",mcPartName[imc].Data(),icone,ipt);
2869 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",
2870 mcPartType[imc].Data(),fConeSizes[icone], fPtFractions[ipt]);
2871 fhPtFracIsolatedMC[imc][icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2872 fhPtFracIsolatedMC[imc][icone][ipt]->SetYTitle("#it{counts}");
2873 fhPtFracIsolatedMC[imc][icone][ipt]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2874 outputContainer->Add(fhPtFracIsolatedMC[imc][icone][ipt]) ;
2876 snprintf(name , buffersize,"hSumPtMC%s_Cone_%d_Pt%d",mcPartName[imc].Data(),icone,ipt);
2877 snprintf(title, buffersize,"Isolated %s #it{p}_{T} for #it{R}=%2.2f and #Sigma #it{p}_{T}^{in cone}=%2.2f",
2878 mcPartType[imc].Data(),fConeSizes[icone], fSumPtThresholds[ipt]);
2879 fhSumPtIsolatedMC[imc][icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2880 fhSumPtIsolatedMC[imc][icone][ipt]->SetYTitle("#it{counts}");
2881 fhSumPtIsolatedMC[imc][icone][ipt]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2882 outputContainer->Add(fhSumPtIsolatedMC[imc][icone][ipt]) ;
2889 if(fFillPileUpHistograms)
2891 for (Int_t i = 0; i < 7 ; i++)
2893 fhEIsoPileUp[i] = new TH1F(Form("hEPileUp%s",pileUpName[i].Data()),
2894 Form("Number of isolated particles vs E, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
2895 nptbins,ptmin,ptmax);
2896 fhEIsoPileUp[i]->SetYTitle("d#it{N} / d#it{E}");
2897 fhEIsoPileUp[i]->SetXTitle("#it{E} (GeV)");
2898 outputContainer->Add(fhEIsoPileUp[i]) ;
2900 fhPtIsoPileUp[i] = new TH1F(Form("hPtPileUp%s",pileUpName[i].Data()),
2901 Form("Number of isolated particles vs #it{p}_{T}, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
2902 nptbins,ptmin,ptmax);
2903 fhPtIsoPileUp[i]->SetYTitle("d#it{N} / #it{p}_{T}");
2904 fhPtIsoPileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2905 outputContainer->Add(fhPtIsoPileUp[i]) ;
2907 fhENoIsoPileUp[i] = new TH1F(Form("hENoIsoPileUp%s",pileUpName[i].Data()),
2908 Form("Number of not isolated particles vs E, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
2909 nptbins,ptmin,ptmax);
2910 fhENoIsoPileUp[i]->SetYTitle("d#it{N} / dE");
2911 fhENoIsoPileUp[i]->SetXTitle("#it{E} (GeV)");
2912 outputContainer->Add(fhENoIsoPileUp[i]) ;
2914 fhPtNoIsoPileUp[i] = new TH1F(Form("hPtNoIsoPileUp%s",pileUpName[i].Data()),
2915 Form("Number of not isolated particles vs #it{p}_{T}, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
2916 nptbins,ptmin,ptmax);
2917 fhPtNoIsoPileUp[i]->SetYTitle("d#it{N} / #it{p}_{T}");
2918 fhPtNoIsoPileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2919 outputContainer->Add(fhPtNoIsoPileUp[i]) ;
2922 fhTimeENoCut = new TH2F ("hTimeE_NoCut","time of cluster vs E of clusters, no cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
2923 fhTimeENoCut->SetXTitle("#it{E} (GeV)");
2924 fhTimeENoCut->SetYTitle("#it{time} (ns)");
2925 outputContainer->Add(fhTimeENoCut);
2927 fhTimeESPD = new TH2F ("hTimeE_SPD","time of cluster vs E of clusters, SPD cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
2928 fhTimeESPD->SetXTitle("#it{E} (GeV)");
2929 fhTimeESPD->SetYTitle("#it{time} (ns)");
2930 outputContainer->Add(fhTimeESPD);
2932 fhTimeESPDMulti = new TH2F ("hTimeE_SPDMulti","time of cluster vs E of clusters, SPD multi cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
2933 fhTimeESPDMulti->SetXTitle("#it{E} (GeV)");
2934 fhTimeESPDMulti->SetYTitle("#it{time} (ns)");
2935 outputContainer->Add(fhTimeESPDMulti);
2937 fhTimeNPileUpVertSPD = new TH2F ("hTime_NPileUpVertSPD","time of cluster vs N pile-up SPD vertex", ntimebins,timemin,timemax,50,0,50);
2938 fhTimeNPileUpVertSPD->SetYTitle("# vertex ");
2939 fhTimeNPileUpVertSPD->SetXTitle("#it{time} (ns)");
2940 outputContainer->Add(fhTimeNPileUpVertSPD);
2942 fhTimeNPileUpVertTrack = new TH2F ("hTime_NPileUpVertTracks","time of cluster vs N pile-up Tracks vertex", ntimebins,timemin,timemax, 50,0,50 );
2943 fhTimeNPileUpVertTrack->SetYTitle("# vertex ");
2944 fhTimeNPileUpVertTrack->SetXTitle("#it{time} (ns)");
2945 outputContainer->Add(fhTimeNPileUpVertTrack);
2947 fhTimeNPileUpVertContributors = new TH2F ("hTime_NPileUpVertContributors","time of cluster vs N constributors to pile-up SPD vertex", ntimebins,timemin,timemax,50,0,50);
2948 fhTimeNPileUpVertContributors->SetYTitle("# vertex ");
2949 fhTimeNPileUpVertContributors->SetXTitle("#it{time} (ns)");
2950 outputContainer->Add(fhTimeNPileUpVertContributors);
2952 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);
2953 fhTimePileUpMainVertexZDistance->SetYTitle("distance #it{z} (cm) ");
2954 fhTimePileUpMainVertexZDistance->SetXTitle("#it{time} (ns)");
2955 outputContainer->Add(fhTimePileUpMainVertexZDistance);
2957 fhTimePileUpMainVertexZDiamond = new TH2F ("hTime_PileUpMainVertexZDiamond","time of cluster vs distance in Z pile-up SPD vertex - z diamond",ntimebins,timemin,timemax,100,0,50);
2958 fhTimePileUpMainVertexZDiamond->SetYTitle("diamond distance #it{z} (cm) ");
2959 fhTimePileUpMainVertexZDiamond->SetXTitle("#it{time} (ns)");
2960 outputContainer->Add(fhTimePileUpMainVertexZDiamond);
2963 return outputContainer ;
2967 //____________________________________________________
2968 Int_t AliAnaParticleIsolation::GetMCIndex(Int_t mcTag)
2970 // Histogram index depending on origin of candidate
2972 if(!IsDataMC()) return -1;
2974 if (GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPrompt))
2978 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCFragmentation))
2982 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0))
2986 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0Decay))
2990 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEtaDecay))
2994 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCOtherDecay))
2996 return kmcOtherDecay;
2998 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron))
3002 else // anything else
3004 // careful can contain also other decays, to be checked.
3009 //__________________________________
3010 void AliAnaParticleIsolation::Init()
3012 // Do some checks and init stuff
3014 // In case of several cone and thresholds analysis, open the cuts for the filling of the
3015 // track and cluster reference arrays in cone when done in the MakeAnalysisFillAOD().
3016 // The different cones, thresholds are tested for this list of tracks, clusters.
3019 printf("AliAnaParticleIsolation::Init() - Open default isolation cuts for multiple Isolation analysis\n");
3020 GetIsolationCut()->SetPtThreshold(100);
3021 GetIsolationCut()->SetPtFraction(100);
3022 GetIsolationCut()->SetConeSize(1);
3025 if(!GetReader()->IsCTSSwitchedOn() && GetIsolationCut()->GetParticleTypeInCone()!=AliIsolationCut::kOnlyNeutral)
3026 AliFatal("STOP!: You want to use CTS tracks in analysis but not read!! \n!!Check the configuration file!!\n");
3030 //____________________________________________
3031 void AliAnaParticleIsolation::InitParameters()
3034 //Initialize the parameters of the analysis.
3035 SetInputAODName("PWG4Particle");
3036 SetAODObjArrayName("IsolationCone");
3037 AddToHistogramsName("AnaIsolation_");
3039 fCalorimeter = "EMCAL" ;
3040 fIsoDetector = "EMCAL" ;
3042 fReMakeIC = kFALSE ;
3043 fMakeSeveralIC = kFALSE ;
3045 fLeadingOnly = kTRUE;
3046 fCheckLeadingWithNeutralClusters = kTRUE;
3049 fDecayBits[0] = AliNeutralMesonSelection::kPi0;
3050 fDecayBits[1] = AliNeutralMesonSelection::kEta;
3051 fDecayBits[2] = AliNeutralMesonSelection::kPi0Side;
3052 fDecayBits[3] = AliNeutralMesonSelection::kEtaSide;
3054 //----------- Several IC-----------------
3057 fConeSizes [0] = 0.1; fConeSizes [1] = 0.2; fConeSizes [2] = 0.3; fConeSizes [3] = 0.4; fConeSizes [4] = 0.5;
3058 fPtThresholds [0] = 1.; fPtThresholds [1] = 2.; fPtThresholds [2] = 3.; fPtThresholds [3] = 4.; fPtThresholds [4] = 5.;
3059 fPtFractions [0] = 0.05; fPtFractions [1] = 0.075; fPtFractions [2] = 0.1; fPtFractions [3] = 1.25; fPtFractions [4] = 1.5;
3060 fSumPtThresholds[0] = 1.; fSumPtThresholds[1] = 2.; fSumPtThresholds[2] = 3.; fSumPtThresholds[3] = 4.; fSumPtThresholds[4] = 5.;
3064 //_________________________________________________________________________________________
3065 Bool_t AliAnaParticleIsolation::IsTriggerTheNearSideEventLeadingParticle(Int_t & idLeading)
3067 // Check if the what of the selected isolation candidates is leading particle in the same hemisphere
3068 // comparing with all the candidates, all the tracks or all the clusters.
3070 Double_t ptTrig = GetMinPt();
3071 Double_t phiTrig = 0 ;
3073 AliAODPWG4ParticleCorrelation* pLeading = 0;
3075 // Loop on stored AOD particles, find leading trigger on the selected list, with at least min pT.
3077 for(Int_t iaod = 0; iaod < GetInputAODBranch()->GetEntriesFast() ; iaod++)
3079 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
3080 particle->SetLeadingParticle(kFALSE); // set it later
3082 // Vertex cut in case of mixing
3085 Int_t check = CheckMixedEventVertex(particle->GetCaloLabel(0), particle->GetTrackLabel(0));
3086 if(check == 0) continue;
3087 if(check == -1) return kFALSE; // not sure if it is correct.
3090 //check if it is low pt trigger particle
3091 if((particle->Pt() < GetIsolationCut()->GetPtThreshold() ||
3092 particle->Pt() < GetIsolationCut()->GetSumPtThreshold()) &&
3095 continue ; //trigger should not come from underlying event
3098 // find the leading particles with highest momentum
3099 if (particle->Pt() > ptTrig)
3101 ptTrig = particle->Pt() ;
3102 phiTrig = particle->Phi();
3104 pLeading = particle ;
3106 }// finish search of leading trigger particle on the AOD branch.
3108 if(index < 0) return kFALSE;
3112 //printf("AOD leading pT %2.2f, ID %d\n", pLeading->Pt(),pLeading->GetCaloLabel(0));
3114 if(phiTrig < 0 ) phiTrig += TMath::TwoPi();
3116 // Compare if it is the leading of all tracks
3119 for(Int_t ipr = 0;ipr < GetCTSTracks()->GetEntriesFast() ; ipr ++ )
3121 AliVTrack * track = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
3123 if(track->GetID() == pLeading->GetTrackLabel(0) || track->GetID() == pLeading->GetTrackLabel(1) ||
3124 track->GetID() == pLeading->GetTrackLabel(2) || track->GetID() == pLeading->GetTrackLabel(3) ) continue ;
3126 Double_t mom[3] = {track->Px(),track->Py(),track->Pz()};
3127 p3.SetXYZ(mom[0],mom[1],mom[2]);
3128 Float_t pt = p3.Pt();
3129 Float_t phi = p3.Phi() ;
3130 if(phi < 0) phi+=TMath::TwoPi();
3132 //skip this event if near side associated particle pt larger than trigger
3134 if(pt > ptTrig && TMath::Abs(phi-phiTrig) < TMath::PiOver2()) return kFALSE;
3138 // Compare if it is leading of all calorimeter clusters
3140 if(fCheckLeadingWithNeutralClusters)
3142 // Select the calorimeter cluster list
3143 TObjArray * nePl = 0x0;
3144 if (pLeading->GetDetector() == "PHOS" )
3145 nePl = GetPHOSClusters();
3147 nePl = GetEMCALClusters();
3149 if(!nePl) return kTRUE; // Do the selection just with the tracks if no calorimeter is available.
3152 for(Int_t ipr = 0;ipr < nePl->GetEntriesFast() ; ipr ++ )
3154 AliVCluster * cluster = (AliVCluster *) (nePl->At(ipr)) ;
3156 if(cluster->GetID() == pLeading->GetCaloLabel(0) || cluster->GetID() == pLeading->GetCaloLabel(1) ) continue ;
3158 cluster->GetMomentum(lv,GetVertex(0));
3160 Float_t pt = lv.Pt();
3161 Float_t phi = lv.Phi() ;
3162 if(phi < 0) phi+=TMath::TwoPi();
3164 if(IsTrackMatched(cluster,GetReader()->GetInputEvent())) continue ; // avoid charged clusters, already covered by tracks, or cluster merging with track.
3166 // skip this event if near side associated particle pt larger than trigger
3167 // not really needed for calorimeter, unless DCal is included
3169 if(pt > ptTrig && TMath::Abs(phi-phiTrig) < TMath::PiOver2()) return kFALSE ;
3172 } // check neutral clusters
3175 pLeading->SetLeadingParticle(kTRUE);
3177 if( GetDebug() > 1 )
3178 printf("AliAnaParticleIsolation::IsTriggerTheNearSideEventLeadingParticle() - Particle AOD with index %d is leading with pT %2.2f\n",
3179 idLeading, pLeading->Pt());
3185 //__________________________________________________
3186 void AliAnaParticleIsolation::MakeAnalysisFillAOD()
3188 // Do analysis and fill aods
3189 // Search for the isolated photon in fCalorimeter with GetMinPt() < pt < GetMaxPt()
3190 // and if the particle is leading in the near side (if requested)
3192 if(!GetInputAODBranch())
3193 AliFatal(Form("No input particles in AOD with name branch < %s >, STOP",GetInputAODName().Data()));
3195 if(strcmp(GetInputAODBranch()->GetClass()->GetName(), "AliAODPWG4ParticleCorrelation"))
3196 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()));
3198 Int_t n = 0, nfrac = 0;
3199 Bool_t isolated = kFALSE ;
3200 Float_t coneptsum = 0, coneptlead = 0;
3201 TObjArray * pl = 0x0; ;
3203 //Select the calorimeter for candidate isolation with neutral particles
3204 if (fCalorimeter == "PHOS" )
3205 pl = GetPHOSClusters();
3206 else if (fCalorimeter == "EMCAL")
3207 pl = GetEMCALClusters();
3209 //Loop on AOD branch, filled previously in AliAnaPhoton, find leading particle to do isolation only with it
3210 TLorentzVector mom ;
3211 Int_t idLeading = -1 ;
3213 Int_t naod = GetInputAODBranch()->GetEntriesFast();
3216 printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - Input aod branch entries %d\n", naod);
3218 if(IsLeadingOnlyOn())
3220 Bool_t leading = IsTriggerTheNearSideEventLeadingParticle(idLeading);
3223 if(GetDebug() > 1) printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - Not leading; End fill AODs \n");
3226 iaod0 = idLeading ; // first entry in particle loop
3227 naod = idLeading+1; // last entry in particle loop
3230 // Check isolation of list of candidate particles or leading particle
3232 for(Int_t iaod = iaod0; iaod < naod; iaod++)
3234 AliAODPWG4ParticleCorrelation * aodinput = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
3236 if(IsLeadingOnlyOn()) aodinput->SetLeadingParticle(kTRUE);
3238 // Check isolation only of clusters in fiducial region
3239 if(IsFiducialCutOn())
3241 Bool_t in = GetFiducialCut()->IsInFiducialCut(*aodinput->Momentum(),aodinput->GetDetector()) ;
3245 //If too small or too large pt, skip
3246 Float_t pt = aodinput->Pt();
3247 if(pt < GetMinPt() || pt > GetMaxPt() ) continue ;
3249 //check if it is low pt trigger particle
3250 if( ( pt < GetIsolationCut()->GetPtThreshold() || pt < GetIsolationCut()->GetSumPtThreshold() ) &&
3253 continue ; //trigger should not come from underlying event
3256 //After cuts, study isolation
3257 n=0; nfrac = 0; isolated = kFALSE; coneptsum = 0; coneptlead = 0;
3258 GetIsolationCut()->MakeIsolationCut(GetCTSTracks(),pl,
3259 GetReader(), GetCaloPID(),
3260 kTRUE, aodinput, GetAODObjArrayName(),
3261 n,nfrac,coneptsum,coneptlead,isolated);
3263 if(!fMakeSeveralIC) aodinput->SetIsolated(isolated);
3264 } // particle isolationloop
3268 if(isolated) printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() : Particle %d IS ISOLATED \n",idLeading);
3269 printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - End fill AODs \n");
3274 //_________________________________________________________
3275 void AliAnaParticleIsolation::MakeAnalysisFillHistograms()
3277 // Do analysis and fill histograms
3279 // In case of simulated data, fill acceptance histograms
3280 // Not ready for multiple case analysis.
3281 if(IsDataMC() && !fMakeSeveralIC) FillAcceptanceHistograms();
3283 //Loop on stored AOD
3284 Int_t naod = GetInputAODBranch()->GetEntriesFast();
3286 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Histo aod branch entries %d\n", naod);
3288 for(Int_t iaod = 0; iaod < naod ; iaod++)
3290 AliAODPWG4ParticleCorrelation* aod = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
3292 if(IsLeadingOnlyOn() && !aod->IsLeadingParticle()) continue; // Try to isolate only leading cluster or track
3294 // Check isolation only of clusters in fiducial region
3295 if(IsFiducialCutOn())
3297 Bool_t in = GetFiducialCut()->IsInFiducialCut(*aod->Momentum(),aod->GetDetector()) ;
3298 if(! in ) continue ;
3301 Float_t pt = aod->Pt();
3303 //If too small or too large pt, skip
3304 if(pt < GetMinPt() || pt > GetMaxPt() ) continue ;
3306 Int_t mcTag = aod->GetTag() ;
3307 Int_t mcIndex = GetMCIndex(mcTag);
3309 // --- In case of redoing isolation from delta AOD ----
3310 // Not standard case, not used since its implementation
3313 //Analysis of multiple IC at same time
3314 MakeSeveralICAnalysis(aod,mcIndex);
3318 // --- In case of redoing isolation multiple cuts ----
3322 //In case a more strict IC is needed in the produced AOD
3323 Bool_t isolated = kFALSE;
3324 Int_t n = 0, nfrac = 0;
3325 Float_t coneptsum = 0, coneptlead = 0;
3327 //Recover reference arrays with clusters and tracks
3328 TObjArray * refclusters = aod->GetObjArray(GetAODObjArrayName()+"Clusters");
3329 TObjArray * reftracks = aod->GetObjArray(GetAODObjArrayName()+"Tracks");
3331 GetIsolationCut()->MakeIsolationCut(reftracks, refclusters,
3332 GetReader(), GetCaloPID(),
3334 n,nfrac,coneptsum,coneptlead,isolated);
3337 Bool_t isolated = aod->IsIsolated();
3338 Float_t energy = aod->E();
3339 Float_t phi = aod->Phi();
3340 Float_t eta = aod->Eta();
3343 if(fFillTaggedDecayHistograms)
3345 decayTag = aod->GetBtag(); // temporary
3346 if(decayTag < 0) decayTag = 0; // temporary
3349 if(GetDebug() > 0) printf(" AliAnaParticleIsolation::MakeAnalysisFillHistograms() - pt %1.1f, eta %1.1f, phi %1.1f, Isolated %d\n",
3350 pt, eta, phi, isolated);
3352 //---------------------------------------------------------------
3353 // Fill Shower shape and track matching histograms
3354 //---------------------------------------------------------------
3356 FillTrackMatchingShowerShapeControlHistograms(aod,mcIndex);
3358 //---------------------------------------------------------------
3359 // Fill pt/sum pT distribution of particles in cone or in UE band
3360 //---------------------------------------------------------------
3362 Float_t coneptsumCluster = 0;
3363 Float_t coneptsumTrack = 0;
3364 Float_t coneptsumCell = 0;
3365 Float_t etaBandptsumClusterNorm = 0;
3366 Float_t etaBandptsumTrackNorm = 0;
3368 CalculateTrackSignalInCone (aod,coneptsumTrack );
3369 CalculateCaloSignalInCone (aod,coneptsumCluster);
3370 if(fFillCellHistograms)
3371 CalculateCaloCellSignalInCone(aod,coneptsumCell );
3373 if(GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kNeutralAndCharged)
3375 fhConeSumPtClustervsTrack ->Fill(coneptsumCluster,coneptsumTrack);
3376 if(fFillCellHistograms)
3378 fhConeSumPtCellvsTrack ->Fill(coneptsumCell, coneptsumTrack);
3379 fhConeSumPtCellTrack ->Fill(pt, coneptsumTrack+coneptsumCell);
3380 fhConeSumPtCellTrackTrigEtaPhi->Fill(eta,phi,coneptsumTrack+coneptsumCell);
3384 fhConeSumPt ->Fill(pt, coneptsumTrack+coneptsumCluster);
3385 fhConeSumPtTrigEtaPhi ->Fill(eta,phi,coneptsumTrack+coneptsumCluster);
3388 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d Energy Sum in Isolation Cone %2.2f\n", iaod, coneptsumTrack+coneptsumCluster);
3390 //normalize phi/eta band per area unit
3391 if(fFillUEBandSubtractHistograms)
3392 CalculateNormalizeUEBandPerUnitArea(aod, coneptsumCluster, coneptsumCell, coneptsumTrack, etaBandptsumTrackNorm, etaBandptsumClusterNorm) ;
3394 // printf("Histograms analysis : cluster pt = %f, etaBandTrack = %f, etaBandCluster = %f, isolation = %d\n",aod->Pt(),etaBandptsumTrackNorm,etaBandptsumClusterNorm,aod->IsIsolated());
3397 //---------------------------------------------------------------
3398 // Isolated/ Non isolated histograms
3399 //---------------------------------------------------------------
3404 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d ISOLATED: fill histograms\n", iaod);
3406 fhEIso ->Fill(energy);
3408 fhPhiIso ->Fill(pt,phi);
3409 fhEtaIso ->Fill(pt,eta);
3410 fhEtaPhiIso ->Fill(eta,phi);
3414 // For histograms in arrays, index in the array, corresponding to any particle origin
3415 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
3417 fhPtIsoMC [kmcPhoton]->Fill(pt);
3418 fhPhiIsoMC[kmcPhoton]->Fill(pt,phi);
3419 fhEtaIsoMC[kmcPhoton]->Fill(pt,eta);
3422 fhPtIsoMC [mcIndex]->Fill(pt);
3423 fhPhiIsoMC[mcIndex]->Fill(pt,phi);
3424 fhEtaIsoMC[mcIndex]->Fill(pt,eta);
3425 }//Histograms with MC
3427 // Candidates tagged as decay in another analysis (AliAnaPi0EbE)
3428 if(fFillTaggedDecayHistograms && decayTag > 0)
3430 for(Int_t ibit = 0; ibit < fNDecayBits; ibit++)
3432 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[ibit]))
3434 fhPtDecayIso[ibit] ->Fill(pt);
3435 fhEtaPhiDecayIso[ibit]->Fill(eta,phi);
3439 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
3440 fhPtDecayIsoMC[ibit][kmcPhoton]->Fill(pt);
3442 fhPtDecayIsoMC[ibit][mcIndex]->Fill(pt);
3446 } // decay histograms
3448 if(fFillNLMHistograms)
3449 fhPtNLocMaxIso ->Fill(pt,aod->GetFiducialArea()) ; // remember to change method name
3451 if(fFillHighMultHistograms)
3453 fhPtCentralityIso ->Fill(pt,GetEventCentrality()) ;
3454 fhPtEventPlaneIso ->Fill(pt,GetEventPlaneAngle() ) ;
3457 if(fFillPileUpHistograms)
3459 if(GetReader()->IsPileUpFromSPD()) { fhEIsoPileUp[0] ->Fill(energy) ; fhPtIsoPileUp[0]->Fill(pt) ; }
3460 if(GetReader()->IsPileUpFromEMCal()) { fhEIsoPileUp[1] ->Fill(energy) ; fhPtIsoPileUp[1]->Fill(pt) ; }
3461 if(GetReader()->IsPileUpFromSPDOrEMCal()) { fhEIsoPileUp[2] ->Fill(energy) ; fhPtIsoPileUp[2]->Fill(pt) ; }
3462 if(GetReader()->IsPileUpFromSPDAndEMCal()) { fhEIsoPileUp[3] ->Fill(energy) ; fhPtIsoPileUp[3]->Fill(pt) ; }
3463 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) { fhEIsoPileUp[4] ->Fill(energy) ; fhPtIsoPileUp[4]->Fill(pt) ; }
3464 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) { fhEIsoPileUp[5] ->Fill(energy) ; fhPtIsoPileUp[5]->Fill(pt) ; }
3465 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhEIsoPileUp[6] ->Fill(energy) ; fhPtIsoPileUp[6]->Fill(pt) ; }
3467 // Fill histograms to undertand pile-up before other cuts applied
3468 // Remember to relax time cuts in the reader
3469 FillPileUpHistograms(aod->GetCaloLabel(0));
3472 }//Isolated histograms
3473 else // NON isolated
3476 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d NOT ISOLATED, fill histograms\n", iaod);
3478 fhENoIso ->Fill(energy);
3479 fhPtNoIso ->Fill(pt);
3480 fhEtaPhiNoIso ->Fill(eta,phi);
3484 if( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton) )
3485 fhPtNoIsoMC[kmcPhoton]->Fill(pt);
3487 fhPtNoIsoMC[mcIndex]->Fill(pt);
3490 // Candidates tagged as decay in another analysis (AliAnaPi0EbE)
3491 if(fFillTaggedDecayHistograms && decayTag > 0)
3493 for(Int_t ibit = 0; ibit < fNDecayBits; ibit++)
3495 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[ibit]))
3497 fhPtDecayNoIso[ibit] ->Fill(pt);
3498 fhEtaPhiDecayNoIso[ibit]->Fill(eta,phi);
3502 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
3503 fhPtDecayNoIsoMC[ibit][kmcPhoton]->Fill(pt);
3505 fhPtDecayNoIsoMC[ibit][mcIndex]->Fill(pt);
3509 } // decay histograms
3511 if(fFillNLMHistograms)
3512 fhPtNLocMaxNoIso ->Fill(pt,aod->GetFiducialArea()); // remember to change method name
3514 if(fFillPileUpHistograms)
3516 if(GetReader()->IsPileUpFromSPD()) { fhENoIsoPileUp[0] ->Fill(energy) ; fhPtNoIsoPileUp[0]->Fill(pt) ; }
3517 if(GetReader()->IsPileUpFromEMCal()) { fhENoIsoPileUp[1] ->Fill(energy) ; fhPtNoIsoPileUp[1]->Fill(pt) ; }
3518 if(GetReader()->IsPileUpFromSPDOrEMCal()) { fhENoIsoPileUp[2] ->Fill(energy) ; fhPtNoIsoPileUp[2]->Fill(pt) ; }
3519 if(GetReader()->IsPileUpFromSPDAndEMCal()) { fhENoIsoPileUp[3] ->Fill(energy) ; fhPtNoIsoPileUp[3]->Fill(pt) ; }
3520 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) { fhENoIsoPileUp[4] ->Fill(energy) ; fhPtNoIsoPileUp[4]->Fill(pt) ; }
3521 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) { fhENoIsoPileUp[5] ->Fill(energy) ; fhPtNoIsoPileUp[5]->Fill(pt) ; }
3522 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhENoIsoPileUp[6] ->Fill(energy) ; fhPtNoIsoPileUp[6]->Fill(pt) ; }
3529 //______________________________________________________________________
3530 void AliAnaParticleIsolation::FillAcceptanceHistograms()
3532 // Fill acceptance histograms if MC data is available
3533 // Only when particle is in the calorimeter. Rethink if CTS is used.
3535 if(GetDebug() > 0) printf("AliAnaParticleIsolation::FillAcceptanceHistograms() - Start \n");
3537 //Double_t photonY = -100 ;
3538 Double_t photonE = -1 ;
3539 Double_t photonPt = -1 ;
3540 Double_t photonPhi = 100 ;
3541 Double_t photonEta = -1 ;
3549 TParticle * primStack = 0;
3550 AliAODMCParticle * primAOD = 0;
3553 // Get the ESD MC particles container
3554 AliStack * stack = 0;
3555 if( GetReader()->ReadStack() )
3557 stack = GetMCStack();
3559 nprim = stack->GetNtrack();
3562 // Get the AOD MC particles container
3563 TClonesArray * mcparticles = 0;
3564 if( GetReader()->ReadAODMCParticles() )
3566 mcparticles = GetReader()->GetAODMCParticles();
3567 if( !mcparticles ) return;
3568 nprim = mcparticles->GetEntriesFast();
3571 for(Int_t i=0 ; i < nprim; i++)
3573 if(GetReader()->AcceptOnlyHIJINGLabels() && !GetReader()->IsHIJINGLabel(i)) continue ;
3575 if(GetReader()->ReadStack())
3577 primStack = stack->Particle(i) ;
3580 printf("AliAnaParticleIsolation::FillAcceptanceHistograms() - ESD primaries pointer not available!!\n");
3584 pdg = primStack->GetPdgCode();
3585 status = primStack->GetStatusCode();
3587 if(primStack->Energy() == TMath::Abs(primStack->Pz())) continue ; //Protection against floating point exception
3589 //printf("i %d, %s %d %s %d \n",i, stack->Particle(i)->GetName(), stack->Particle(i)->GetPdgCode(),
3590 // prim->GetName(), prim->GetPdgCode());
3592 //photonY = 0.5*TMath::Log((prim->Energy()-prim->Pz())/(prim->Energy()+prim->Pz())) ;
3595 primStack->Momentum(lv);
3600 primAOD = (AliAODMCParticle *) mcparticles->At(i);
3603 printf("AliAnaParticleIsolation::FillAcceptanceHistograms() - AOD primaries pointer not available!!\n");
3607 pdg = primAOD->GetPdgCode();
3608 status = primAOD->GetStatus();
3610 if(primAOD->E() == TMath::Abs(primAOD->Pz())) continue ; //Protection against floating point exception
3612 //photonY = 0.5*TMath::Log((prim->Energy()-prim->Pz())/(prim->Energy()+prim->Pz())) ;
3615 lv.SetPxPyPzE(primAOD->Px(),primAOD->Py(),primAOD->Pz(),primAOD->E());
3618 // Select only photons in the final state
3619 if(pdg != 22 ) continue ;
3621 // Consider only final state particles, but this depends on generator,
3622 // status 1 is the usual one, in case of not being ok, leave the possibility
3623 // to not consider this.
3624 if(status != 1 && GetMCAnalysisUtils()->GetMCGenerator()!="" ) continue ;
3626 // If too small or too large pt, skip, same cut as for data analysis
3627 photonPt = lv.Pt () ;
3629 if(photonPt < GetMinPt() || photonPt > GetMaxPt() ) continue ;
3632 photonEta = lv.Eta() ;
3633 photonPhi = lv.Phi() ;
3635 if(photonPhi < 0) photonPhi+=TMath::TwoPi();
3637 // Check if photons hit the Calorimeter acceptance
3638 if(IsRealCaloAcceptanceOn() && fIsoDetector!="CTS") // defined on base class
3640 if(GetReader()->ReadStack() &&
3641 !GetCaloUtils()->IsMCParticleInCalorimeterAcceptance(fIsoDetector, primStack)) continue ;
3642 if(GetReader()->ReadAODMCParticles() &&
3643 !GetCaloUtils()->IsMCParticleInCalorimeterAcceptance(fIsoDetector, primAOD )) continue ;
3646 // Check same fidutial borders as in data analysis on top of real acceptance if real was requested.
3647 if(!GetFiducialCut()->IsInFiducialCut(lv,fIsoDetector)) continue ;
3649 // Get tag of this particle photon from fragmentation, decay, prompt ...
3650 // Set the origin of the photon.
3651 tag = GetMCAnalysisUtils()->CheckOrigin(i,GetReader());
3653 if(!GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
3655 // A conversion photon from a hadron, skip this kind of photon
3656 // printf("AliAnaPhoton::FillAcceptanceHistograms() - not a photon, weird!\n ");
3657 // GetMCAnalysisUtils()->PrintMCTag(tag);
3663 if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPrompt) )
3665 mcIndex = kmcPrimPrompt;
3667 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCFragmentation) )
3669 mcIndex = kmcPrimFrag ;
3671 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCISR))
3673 mcIndex = kmcPrimISR;
3675 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0Decay))
3677 mcIndex = kmcPrimPi0Decay;
3679 else if( (GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEtaDecay) ||
3680 GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCOtherDecay)))
3682 mcIndex = kmcPrimOtherDecay;
3686 // Other decay but from non final state particle
3687 mcIndex = kmcPrimOtherDecay;
3690 // ////////////////////ISO MC/////////////////////////
3691 Double_t sumPtInCone = 0; Double_t dR=0. ;
3692 TParticle * mcisopStack = 0;
3693 AliAODMCParticle * mcisopAOD = 0;
3694 Int_t partInConeStatus = -1, partInConeMother = -1;
3695 Double_t partInConePt = 0, partInConeEta = 0, partInConePhi = 0;
3697 for(Int_t ip = 0; ip < nprim ; ip++)
3701 if( GetReader()->ReadStack() )
3703 mcisopStack = static_cast<TParticle*>(stack->Particle(ip));
3704 if( !mcisopStack ) continue;
3705 partInConeStatus = mcisopStack->GetStatusCode();
3706 partInConeMother = mcisopStack->GetMother(0);
3707 partInConePt = mcisopStack->Pt();
3708 partInConeEta = mcisopStack->Eta();
3709 partInConePhi = mcisopStack->Phi();
3713 mcisopAOD = (AliAODMCParticle *) mcparticles->At(ip);
3714 if( !mcisopAOD ) continue;
3715 partInConeStatus = mcisopAOD->GetStatus();
3716 partInConeMother = mcisopAOD->GetMother();
3717 partInConePt = mcisopAOD->Pt();
3718 partInConeEta = mcisopAOD->Eta();
3719 partInConePhi = mcisopAOD->Phi();
3722 // Consider only final state particles, but this depends on generator,
3723 // status 1 is the usual one, in case of not being ok, leave the possibility
3724 // to not consider this.
3725 if( partInConeStatus != 1 && GetMCAnalysisUtils()->GetMCGenerator()!="" ) continue ;
3727 if( partInConeMother == i ) continue;
3729 if( partInConePt < GetReader()->GetCTSPtMin() ) continue;
3730 // Careful!!!, cut for TPC tracks and calorimeter clusters in cone can be different
3732 // TVector3 vmcv(mcisop->Px(),mcisop->Py(), mcisop->Pz());
3733 // if(vmcv.Perp()>1)
3737 // Add here Acceptance cut???, charged particles CTS fid cut, neutral Calo real acceptance.
3740 dR = GetIsolationCut()->Radius(photonEta, photonPhi, partInConeEta, partInConePhi);
3742 if(dR > GetIsolationCut()->GetConeSize())
3745 sumPtInCone += partInConePt;
3746 if(partInConePt > GetIsolationCut()->GetPtThreshold() &&
3747 partInConePt < GetIsolationCut()->GetPtThresholdMax()) npart++;
3750 ///////END ISO MC/////////////////////////
3752 // Fill the histograms, only those in the defined calorimeter acceptance
3754 fhEtaPrimMC[kmcPrimPhoton]->Fill(photonPt , photonEta) ;
3755 fhPhiPrimMC[kmcPrimPhoton]->Fill(photonPt , photonPhi) ;
3756 fhEPrimMC [kmcPrimPhoton]->Fill(photonE) ;
3758 fhEtaPrimMC[mcIndex]->Fill(photonPt , photonEta) ;
3759 fhPhiPrimMC[mcIndex]->Fill(photonPt , photonPhi) ;
3760 fhEPrimMC [mcIndex]->Fill(photonE ) ;
3763 Bool_t isolated = kFALSE;
3764 if(GetIsolationCut()->GetICMethod() == AliIsolationCut::kSumPtIC &&
3765 (sumPtInCone < GetIsolationCut()->GetSumPtThreshold() ||
3766 sumPtInCone > GetIsolationCut()->GetSumPtThresholdMax()))
3769 if(GetIsolationCut()->GetICMethod() == AliIsolationCut::kPtThresIC &&
3775 fhPtPrimMCiso [mcIndex] ->Fill(photonPt) ;
3776 fhPtPrimMCiso [kmcPrimPhoton]->Fill(photonPt) ;
3779 }//loop on primaries
3781 if(GetDebug() > 0) printf("AliAnaParticleIsolation::FillAcceptanceHistograms() - End \n");
3786 //_____________________________________________________________________________________
3787 void AliAnaParticleIsolation::MakeSeveralICAnalysis(AliAODPWG4ParticleCorrelation* ph,
3791 //Isolation Cut Analysis for both methods and different pt cuts and cones
3792 Float_t ptC = ph->Pt();
3793 Float_t etaC = ph->Eta();
3794 Float_t phiC = ph->Phi();
3795 Int_t tag = ph->GetTag();
3798 if(fFillTaggedDecayHistograms)
3800 decayTag = ph->GetBtag(); // temporary
3801 if(decayTag < 0) decayTag = 0; // temporary
3805 printf("AliAnaParticleIsolation::MakeSeveralICAnalysis() - Isolate pT %2.2f, decay tag %d\n",ptC, decayTag);
3807 //Keep original setting used when filling AODs, reset at end of analysis
3808 Float_t ptthresorg = GetIsolationCut()->GetPtThreshold();
3809 Float_t ptfracorg = GetIsolationCut()->GetPtFraction();
3810 Float_t ptsumcorg = GetIsolationCut()->GetSumPtThreshold();
3811 Float_t rorg = GetIsolationCut()->GetConeSize();
3813 Float_t coneptsum = 0, coneptlead = 0;
3814 Int_t n [10][10];//[fNCones][fNPtThresFrac];
3815 Int_t nfrac[10][10];//[fNCones][fNPtThresFrac];
3816 Bool_t isolated = kFALSE;
3818 // Fill hist with all particles before isolation criteria
3819 fhENoIso ->Fill(ph->E());
3820 fhPtNoIso ->Fill(ptC);
3821 fhEtaPhiNoIso->Fill(etaC,phiC);
3825 if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
3826 fhPtNoIsoMC[kmcPhoton]->Fill(ptC);
3828 fhPtNoIsoMC[mcIndex]->Fill(ptC);
3831 // Candidates tagged as decay in another analysis (AliAnaPi0EbE)
3832 if(fFillTaggedDecayHistograms && decayTag > 0)
3834 for(Int_t ibit = 0; ibit < fNDecayBits; ibit++)
3836 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[ibit]))
3838 fhPtDecayNoIso[ibit] ->Fill(ptC);
3839 fhEtaPhiDecayNoIso[ibit]->Fill(etaC,phiC);
3843 if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
3844 fhPtDecayNoIsoMC[ibit][kmcPhoton]->Fill(ptC);
3846 fhPtDecayNoIsoMC[ibit][mcIndex]->Fill(ptC);
3850 } // decay histograms
3852 //Get vertex for photon momentum calculation
3853 Double_t vertex[] = {0,0,0} ; //vertex ;
3854 if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
3855 GetReader()->GetVertex(vertex);
3857 //Loop on cone sizes
3858 for(Int_t icone = 0; icone<fNCones; icone++)
3860 //Recover reference arrays with clusters and tracks
3861 TObjArray * refclusters = ph->GetObjArray(GetAODObjArrayName()+"Clusters");
3862 TObjArray * reftracks = ph->GetObjArray(GetAODObjArrayName()+"Tracks");
3864 //If too small or too large pt, skip
3865 if(ptC < GetMinPt() || ptC > GetMaxPt() ) continue ;
3867 //In case a more strict IC is needed in the produced AOD
3869 isolated = kFALSE; coneptsum = 0; coneptlead = 0;
3871 GetIsolationCut()->SetSumPtThreshold(100);
3872 GetIsolationCut()->SetPtThreshold(100);
3873 GetIsolationCut()->SetPtFraction(100);
3874 GetIsolationCut()->SetConeSize(fConeSizes[icone]);
3876 // retreive pt tracks to fill histo vs. pt leading
3877 //Fill pt distribution of particles in cone
3878 //fhPtLeadingPt(),fhPerpSumPtLeadingPt(),fhPerpPtLeadingPt(),
3880 // Tracks in perpendicular cones
3881 Double_t sumptPerp = 0. ;
3882 TObjArray * trackList = GetCTSTracks() ;
3883 for(Int_t itrack=0; itrack < trackList->GetEntriesFast(); itrack++)
3885 AliVTrack* track = (AliVTrack *) trackList->At(itrack);
3886 //fill the histograms at forward range
3889 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Track not available?");
3893 Double_t dPhi = phiC - track->Phi() + TMath::PiOver2();
3894 Double_t dEta = etaC - track->Eta();
3895 Double_t arg = dPhi*dPhi + dEta*dEta;
3896 if(TMath::Sqrt(arg) < fConeSizes[icone])
3898 fhPerpPtLeadingPt[icone]->Fill(ptC,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
3899 sumptPerp+=track->Pt();
3902 dPhi = phiC - track->Phi() - TMath::PiOver2();
3903 arg = dPhi*dPhi + dEta*dEta;
3904 if(TMath::Sqrt(arg) < fConeSizes[icone])
3906 fhPerpPtLeadingPt[icone]->Fill(ptC,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
3907 sumptPerp+=track->Pt();
3911 fhPerpSumPtLeadingPt[icone]->Fill(ptC,sumptPerp);
3913 // Tracks in isolation cone, pT distribution and sum
3914 if(reftracks && GetIsolationCut()->GetParticleTypeInCone()!= AliIsolationCut::kOnlyNeutral)
3916 for(Int_t itrack=0; itrack < reftracks->GetEntriesFast(); itrack++)
3918 AliVTrack* track = (AliVTrack *) reftracks->At(itrack);
3920 Float_t rad = GetIsolationCut()->Radius(etaC, phiC, track->Eta(), track->Phi());
3922 if(rad > fConeSizes[icone]) continue ;
3924 fhPtLeadingPt[icone]->Fill(ptC, track->Pt());
3925 coneptsum += track->Pt();
3929 // Clusters in isolation cone, pT distribution and sum
3930 if(refclusters && GetIsolationCut()->GetParticleTypeInCone()!= AliIsolationCut::kOnlyCharged)
3932 TLorentzVector mom ;
3933 for(Int_t icalo=0; icalo < refclusters->GetEntriesFast(); icalo++)
3935 AliVCluster* calo = (AliVCluster *) refclusters->At(icalo);
3937 calo->GetMomentum(mom,vertex) ;//Assume that come from vertex in straight line
3939 Float_t rad = GetIsolationCut()->Radius(etaC, phiC, mom.Eta(), mom.Phi());
3941 if(rad > fConeSizes[icone]) continue ;
3943 fhPtLeadingPt[icone]->Fill(ptC, mom.Pt());
3944 coneptsum += mom.Pt();
3948 fhSumPtLeadingPt[icone]->Fill(ptC,coneptsum);
3952 if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
3953 fhSumPtLeadingPtMC[kmcPhoton][icone]->Fill(ptC,coneptsum) ;
3955 fhSumPtLeadingPtMC[mcIndex][icone]->Fill(ptC,coneptsum) ;
3960 //Loop on pt thresholds
3961 for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
3964 nfrac[icone][ipt]=0;
3965 GetIsolationCut()->SetPtThreshold(fPtThresholds[ipt]);
3966 GetIsolationCut()->SetPtFraction(fPtFractions[ipt]) ;
3967 GetIsolationCut()->SetSumPtThreshold(fSumPtThresholds[ipt]);
3969 GetIsolationCut()->MakeIsolationCut(reftracks, refclusters,
3970 GetReader(), GetCaloPID(),
3972 n[icone][ipt],nfrac[icone][ipt],
3973 coneptsum, coneptlead, isolated);
3975 // Normal pT threshold cut
3979 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - cone size %1.1f, ptThres %1.1f, sumptThresh %1.1f\n",
3980 fConeSizes[icone],fPtThresholds[ipt],fSumPtThresholds[ipt]);
3981 printf("\t n %d, nfrac %d, coneptsum %2.2f\n",
3982 n[icone][ipt],nfrac[icone][ipt],coneptsum);
3984 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - pt %1.1f, eta %1.1f, phi %1.1f\n",ptC, etaC, phiC);
3987 if(n[icone][ipt] == 0)
3990 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling pt threshold loop\n");
3992 fhPtThresIsolated [icone][ipt]->Fill(ptC);
3993 fhEtaPhiPtThresIso[icone][ipt]->Fill(etaC,phiC);
3995 if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
3997 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
3999 fhPtPtThresDecayIso [icone][ipt]->Fill(ptC);
4000 fhEtaPhiPtThresDecayIso[icone][ipt]->Fill(etaC,phiC);
4006 if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton) )
4007 fhPtThresIsolatedMC[kmcPhoton][icone][ipt]->Fill(ptC) ;
4009 fhPtThresIsolatedMC[mcIndex][icone][ipt]->Fill(ptC) ;
4014 // pt in cone fraction
4015 if(nfrac[icone][ipt] == 0)
4018 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling frac loop\n");
4020 fhPtFracIsolated [icone][ipt]->Fill(ptC);
4021 fhEtaPhiPtFracIso[icone][ipt]->Fill(etaC,phiC);
4023 if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
4025 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
4027 fhPtPtFracDecayIso [icone][ipt]->Fill(ptC);
4028 fhEtaPhiPtFracDecayIso[icone][ipt]->Fill(etaC,phiC);
4034 if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
4035 fhPtFracIsolatedMC[kmcPhoton][icone][ipt]->Fill(ptC) ;
4037 fhPtFracIsolatedMC[mcIndex][icone][ipt]->Fill(ptC) ;
4042 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - checking IC method : %i\n",GetIsolationCut()->GetICMethod());
4044 //Pt threshold on pt cand/ sum in cone histograms
4045 if(coneptsum < fSumPtThresholds[ipt])
4048 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling sum loop\n");
4050 fhSumPtIsolated [icone][ipt]->Fill(ptC) ;
4051 fhEtaPhiPtSumIso[icone][ipt]->Fill(etaC, phiC) ;
4053 if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
4055 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
4057 fhPtPtSumDecayIso[icone][ipt]->Fill(ptC);
4058 fhEtaPhiPtSumDecayIso[icone][ipt]->Fill(etaC, phiC) ;
4064 if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
4065 fhSumPtIsolatedMC[kmcPhoton][icone][ipt]->Fill(ptC) ;
4067 fhSumPtIsolatedMC[mcIndex][icone][ipt]->Fill(ptC) ;
4071 // pt sum pt frac method
4072 // if( ((fPtFractions[ipt]*ptC < fSumPtThresholds[ipt]) && (coneptsum < fSumPtThresholds[ipt])) || ((fPtFractions[ipt]*ptC > fSumPtThresholds[ipt]) && (coneptsum < fPtFractions[ipt]*ptC)) )
4074 if(coneptsum < fPtFractions[ipt]*ptC)
4077 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling PtFrac PtSum loop\n");
4079 fhPtFracPtSumIso [icone][ipt]->Fill(ptC) ;
4080 fhEtaPhiFracPtSumIso[icone][ipt]->Fill(etaC,phiC) ;
4082 if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
4084 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
4086 fhPtFracPtSumDecayIso [icone][ipt]->Fill(ptC);
4087 fhEtaPhiFracPtSumDecayIso[icone][ipt]->Fill(etaC,phiC);
4093 Float_t cellDensity = GetIsolationCut()->GetCellDensity( ph, GetReader());
4094 if(coneptsum < fSumPtThresholds[ipt]*cellDensity)
4097 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling density loop\n");
4099 fhPtSumDensityIso [icone][ipt]->Fill(ptC) ;
4100 fhEtaPhiSumDensityIso[icone][ipt]->Fill(etaC,phiC) ;
4102 if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
4104 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
4106 fhPtSumDensityDecayIso [icone][ipt]->Fill(ptC);
4107 fhEtaPhiSumDensityDecayIso[icone][ipt]->Fill(etaC, phiC);
4116 //Reset original parameters for AOD analysis
4117 GetIsolationCut()->SetPtThreshold(ptthresorg);
4118 GetIsolationCut()->SetPtFraction(ptfracorg);
4119 GetIsolationCut()->SetSumPtThreshold(ptsumcorg);
4120 GetIsolationCut()->SetConeSize(rorg);
4124 //_____________________________________________________________
4125 void AliAnaParticleIsolation::Print(const Option_t * opt) const
4128 //Print some relevant parameters set for the analysis
4132 printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
4133 AliAnaCaloTrackCorrBaseClass::Print(" ");
4135 printf("ReMake Isolation = %d \n", fReMakeIC) ;
4136 printf("Make Several Isolation = %d \n", fMakeSeveralIC) ;
4137 printf("Calorimeter for isolation = %s \n", fCalorimeter.Data()) ;
4138 printf("Detector for candidate isolation = %s \n", fIsoDetector.Data()) ;
4142 printf("N Cone Sizes = %d\n", fNCones) ;
4143 printf("Cone Sizes = \n") ;
4144 for(Int_t i = 0; i < fNCones; i++)
4145 printf(" %1.2f;", fConeSizes[i]) ;
4148 printf("N pT thresholds/fractions = %d\n", fNPtThresFrac) ;
4149 printf(" pT thresholds = \n") ;
4150 for(Int_t i = 0; i < fNPtThresFrac; i++)
4151 printf(" %2.2f;", fPtThresholds[i]) ;
4155 printf(" pT fractions = \n") ;
4156 for(Int_t i = 0; i < fNPtThresFrac; i++)
4157 printf(" %2.2f;", fPtFractions[i]) ;
4161 printf("sum pT thresholds = \n") ;
4162 for(Int_t i = 0; i < fNPtThresFrac; i++)
4163 printf(" %2.2f;", fSumPtThresholds[i]) ;