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 fhConePtLead(0), fhConePtLeadCluster(0), fhConePtLeadTrack(0),
98 fhConeSumPt(0), fhConeSumPtCellTrack(0),
99 fhConeSumPtCell(0), fhConeSumPtCluster(0), fhConeSumPtTrack(0),
100 fhConeSumPtEtaBandUECluster(0), fhConeSumPtPhiBandUECluster(0),
101 fhConeSumPtEtaBandUETrack(0), fhConeSumPtPhiBandUETrack(0),
102 fhConeSumPtEtaBandUECell(0), fhConeSumPtPhiBandUECell(0),
103 fhConeSumPtTrigEtaPhi(0),
104 fhConeSumPtCellTrackTrigEtaPhi(0),
105 fhConeSumPtEtaBandUEClusterTrigEtaPhi(0), fhConeSumPtPhiBandUEClusterTrigEtaPhi(0),
106 fhConeSumPtEtaBandUETrackTrigEtaPhi(0), fhConeSumPtPhiBandUETrackTrigEtaPhi(0),
107 fhConeSumPtEtaBandUECellTrigEtaPhi(0), fhConeSumPtPhiBandUECellTrigEtaPhi(0),
108 fhConeSumPtEtaUESub(0), fhConeSumPtPhiUESub(0),
109 fhConeSumPtEtaUESubTrigEtaPhi(0), fhConeSumPtPhiUESubTrigEtaPhi(0),
110 fhConeSumPtEtaUESubTrackCell(0), fhConeSumPtPhiUESubTrackCell(0),
111 fhConeSumPtEtaUESubTrackCellTrigEtaPhi(0), fhConeSumPtPhiUESubTrackCellTrigEtaPhi(0),
112 fhConeSumPtEtaUESubCluster(0), fhConeSumPtPhiUESubCluster(0),
113 fhConeSumPtEtaUESubClusterTrigEtaPhi(0), fhConeSumPtPhiUESubClusterTrigEtaPhi(0),
114 fhConeSumPtEtaUESubCell(0), fhConeSumPtPhiUESubCell(0),
115 fhConeSumPtEtaUESubCellTrigEtaPhi(0), fhConeSumPtPhiUESubCellTrigEtaPhi(0),
116 fhConeSumPtEtaUESubTrack(0), fhConeSumPtPhiUESubTrack(0),
117 fhConeSumPtEtaUESubTrackTrigEtaPhi(0), fhConeSumPtPhiUESubTrackTrigEtaPhi(0),
118 fhFractionTrackOutConeEta(0), fhFractionTrackOutConeEtaTrigEtaPhi(0),
119 fhFractionClusterOutConeEta(0), fhFractionClusterOutConeEtaTrigEtaPhi(0),
120 fhFractionClusterOutConePhi(0), fhFractionClusterOutConePhiTrigEtaPhi(0),
121 fhFractionCellOutConeEta(0), fhFractionCellOutConeEtaTrigEtaPhi(0),
122 fhFractionCellOutConePhi(0), fhFractionCellOutConePhiTrigEtaPhi(0),
123 fhConeSumPtClustervsTrack(0),
124 fhConeSumPtEtaUESubClustervsTrack(0), fhConeSumPtPhiUESubClustervsTrack(0),
125 fhConeSumPtCellvsTrack(0),
126 fhConeSumPtEtaUESubCellvsTrack(0), fhConeSumPtPhiUESubCellvsTrack(0),
127 fhEtaBandClustervsTrack(0), fhPhiBandClustervsTrack(0),
128 fhEtaBandNormClustervsTrack(0), fhPhiBandNormClustervsTrack(0),
129 fhEtaBandCellvsTrack(0), fhPhiBandCellvsTrack(0),
130 fhEtaBandNormCellvsTrack(0), fhPhiBandNormCellvsTrack(0),
131 fhConeSumPtSubvsConeSumPtTotPhiTrack(0), fhConeSumPtSubNormvsConeSumPtTotPhiTrack(0),
132 fhConeSumPtSubvsConeSumPtTotEtaTrack(0), fhConeSumPtSubNormvsConeSumPtTotEtaTrack(0),
133 fhConeSumPtSubvsConeSumPtTotPhiCluster(0), fhConeSumPtSubNormvsConeSumPtTotPhiCluster(0),
134 fhConeSumPtSubvsConeSumPtTotEtaCluster(0), fhConeSumPtSubNormvsConeSumPtTotEtaCluster(0),
135 fhConeSumPtSubvsConeSumPtTotPhiCell(0), fhConeSumPtSubNormvsConeSumPtTotPhiCell(0),
136 fhConeSumPtSubvsConeSumPtTotEtaCell(0), fhConeSumPtSubNormvsConeSumPtTotEtaCell(0),
137 fhConeSumPtVSUETracksEtaBand(0), fhConeSumPtVSUETracksPhiBand(0),
138 fhConeSumPtVSUEClusterEtaBand(0), fhConeSumPtVSUEClusterPhiBand(0),
140 // Number of local maxima in cluster
142 fhELambda0LocMax1(), fhELambda1LocMax1(),
143 fhELambda0LocMax2(), fhELambda1LocMax2(),
144 fhELambda0LocMaxN(), fhELambda1LocMaxN(),
146 fhEIsoPileUp(), fhPtIsoPileUp(),
147 fhENoIsoPileUp(), fhPtNoIsoPileUp(),
148 fhTimeENoCut(0), fhTimeESPD(0), fhTimeESPDMulti(0),
149 fhTimeNPileUpVertSPD(0), fhTimeNPileUpVertTrack(0),
150 fhTimeNPileUpVertContributors(0),
151 fhTimePileUpMainVertexZDistance(0), fhTimePileUpMainVertexZDiamond(0)
155 //Initialize parameters
158 for(Int_t i = 0; i < 5 ; i++)
162 for(Int_t imc = 0; imc < 9; imc++)
163 fhSumPtLeadingPtMC[imc][i] = 0 ;
165 for(Int_t j = 0; j < 5 ; j++)
167 fhPtThresIsolated [i][j] = 0 ;
168 fhPtFracIsolated [i][j] = 0 ;
169 fhSumPtIsolated [i][j] = 0 ;
171 fhEtaPhiPtThresIso [i][j] = 0 ;
172 fhEtaPhiPtThresDecayIso [i][j] = 0 ;
173 fhPtPtThresDecayIso [i][j] = 0 ;
175 fhEtaPhiPtFracIso [i][j] = 0 ;
176 fhEtaPhiPtFracDecayIso [i][j] = 0 ;
177 fhPtPtFracDecayIso [i][j] = 0 ;
178 fhPtPtSumDecayIso [i][j] = 0 ;
179 fhPtSumDensityIso [i][j] = 0 ;
180 fhPtSumDensityDecayIso [i][j] = 0 ;
181 fhEtaPhiSumDensityIso [i][j] = 0 ;
182 fhEtaPhiSumDensityDecayIso [i][j] = 0 ;
183 fhPtFracPtSumIso [i][j] = 0 ;
184 fhPtFracPtSumDecayIso [i][j] = 0 ;
185 fhEtaPhiFracPtSumIso [i][j] = 0 ;
186 fhEtaPhiFracPtSumDecayIso [i][j] = 0 ;
188 for(Int_t imc = 0; imc < 9; imc++)
190 fhPtThresIsolatedMC[imc][i][j] = 0 ;
191 fhPtFracIsolatedMC [imc][i][j] = 0 ;
192 fhSumPtIsolatedMC [imc][i][j] = 0 ;
198 for(Int_t ibit =0; ibit< 4; ibit++)
200 fhPtDecayIso [ibit] = 0;
201 fhPtDecayNoIso [ibit] = 0;
202 fhEtaPhiDecayIso [ibit] = 0;
203 fhEtaPhiDecayNoIso[ibit] = 0;
204 for(Int_t imc = 0; imc < 9; imc++)
206 fhPtDecayIsoMC [ibit][imc] = 0;
207 fhPtDecayNoIsoMC[ibit][imc] = 0;
211 for(Int_t i = 0; i < 5 ; i++)
213 fPtFractions [i] = 0 ;
214 fPtThresholds [i] = 0 ;
215 fSumPtThresholds[i] = 0 ;
217 fhSumPtLeadingPt [i] = 0 ;
218 fhPtLeadingPt [i] = 0 ;
219 fhPerpSumPtLeadingPt[i] = 0 ;
220 fhPerpPtLeadingPt [i] = 0 ;
223 for(Int_t imc = 0; imc < 9; imc++)
225 fhPtNoIsoMC [imc] = 0;
227 fhPhiIsoMC [imc] = 0;
228 fhEtaIsoMC [imc] = 0;
229 fhPtLambda0MC[imc][0] = 0;
230 fhPtLambda0MC[imc][1] = 0;
233 for(Int_t i = 0; i < 2 ; i++)
235 fhTrackMatchedDEta[i] = 0 ; fhTrackMatchedDPhi[i] = 0 ; fhTrackMatchedDEtaDPhi [i] = 0 ;
236 fhdEdx [i] = 0 ; fhEOverP [i] = 0 ; fhTrackMatchedMCParticle[i] = 0 ;
237 fhELambda0 [i] = 0 ; fhELambda1 [i] = 0 ; fhPtLambda0 [i] = 0 ;
238 fhELambda0TRD [i] = 0 ; fhELambda1TRD [i] = 0 ; fhPtLambda0TRD [i] = 0 ;
240 // Number of local maxima in cluster
242 fhELambda0LocMax1[i] = 0 ; fhELambda1LocMax1[i] = 0 ;
243 fhELambda0LocMax2[i] = 0 ; fhELambda1LocMax2[i] = 0 ;
244 fhELambda0LocMaxN[i] = 0 ; fhELambda1LocMaxN[i] = 0 ;
248 for(Int_t i = 0; i < 6; i++)
250 fhPtPrimMCiso[i] = 0;
258 for(Int_t i = 0 ; i < 7 ; i++)
260 fhPtInConePileUp[i] = 0 ;
261 fhEIsoPileUp [i] = 0 ;
262 fhPtIsoPileUp [i] = 0 ;
263 fhENoIsoPileUp [i] = 0 ;
264 fhPtNoIsoPileUp [i] = 0 ;
269 //_______________________________________________________________________________________________
270 void AliAnaParticleIsolation::CalculateCaloUEBand(AliAODPWG4ParticleCorrelation * pCandidate,
271 Float_t & etaBandPtSum, Float_t & phiBandPtSum)
273 // Get the clusters pT or sum of pT in phi/eta bands or at 45 degrees from trigger
275 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyCharged ) return ;
277 Float_t conesize = GetIsolationCut()->GetConeSize();
280 //Select the Calorimeter
281 TObjArray * pl = 0x0;
282 if (fCalorimeter == "PHOS" )
283 pl = GetPHOSClusters();
284 else if (fCalorimeter == "EMCAL")
285 pl = GetEMCALClusters();
289 //Get vertex for cluster momentum calculation
290 Double_t vertex[] = {0,0,0} ; //vertex ;
291 if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
292 GetReader()->GetVertex(vertex);
294 Float_t ptTrig = pCandidate->Pt() ;
295 Float_t phiTrig = pCandidate->Phi();
296 Float_t etaTrig = pCandidate->Eta();
298 for(Int_t icluster=0; icluster < pl->GetEntriesFast(); icluster++)
300 AliVCluster* cluster = (AliVCluster *) pl->At(icluster);
304 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Cluster not available?");
308 //Do not count the candidate (photon or pi0) or the daughters of the candidate
309 if(cluster->GetID() == pCandidate->GetCaloLabel(0) ||
310 cluster->GetID() == pCandidate->GetCaloLabel(1) ) continue ;
312 //Remove matched clusters to tracks if Neutral and Track info is used
313 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kNeutralAndCharged &&
314 IsTrackMatched(cluster,GetReader()->GetInputEvent())) continue ;
316 cluster->GetMomentum(mom,vertex) ;//Assume that come from vertex in straight line
318 //exclude particles in cone
319 Float_t rad = GetIsolationCut()->Radius(etaTrig, phiTrig, mom.Eta(), mom.Phi());
321 // histo of eta and phi for all clusters
322 fhEtaPhiCluster->Fill(mom.Eta(), mom.Phi());
324 // histos for all clusters in cone
325 fhEtaPhiInConeCluster->Fill(mom.Eta(), mom.Phi());
328 //fill histogram for UE in phi band in EMCal acceptance
329 if(mom.Eta() > (etaTrig-conesize) && mom.Eta() < (etaTrig+conesize))
331 phiBandPtSum+=mom.Pt();
332 fhPhiBandCluster->Fill(mom.Eta(),mom.Phi());
336 //fill histogram for UE in eta band in EMCal acceptance
337 if(mom.Phi() > (phiTrig-conesize) && mom.Phi() < (phiTrig+conesize))
339 etaBandPtSum+=mom.Pt();
340 fhEtaBandCluster->Fill(mom.Eta(),mom.Phi());
344 fhConeSumPtEtaBandUECluster ->Fill(ptTrig , etaBandPtSum);
345 fhConeSumPtPhiBandUECluster ->Fill(ptTrig , phiBandPtSum);
346 fhConeSumPtEtaBandUEClusterTrigEtaPhi->Fill(etaTrig,phiTrig,etaBandPtSum);
347 fhConeSumPtPhiBandUEClusterTrigEtaPhi->Fill(etaTrig,phiTrig,phiBandPtSum);
351 //________________________________________________________________________________________________
352 void AliAnaParticleIsolation::CalculateCaloCellUEBand(AliAODPWG4ParticleCorrelation * pCandidate,
353 Float_t & etaBandPtSumCells, Float_t & phiBandPtSumCells)
355 // Get the cells amplitude or sum of amplitude in phi/eta bands or at 45 degrees from trigger
357 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyCharged ) return ;
359 Float_t conesize = GetIsolationCut()->GetConeSize();
361 Float_t phiTrig = pCandidate->Phi();
362 if(phiTrig<0) phiTrig += TMath::TwoPi();
363 Float_t etaTrig = pCandidate->Eta();
365 if(pCandidate->GetDetector()=="EMCAL")
367 AliEMCALGeometry* eGeom = AliEMCALGeometry::GetInstance();
370 if (eGeom->GetAbsCellIdFromEtaPhi(etaTrig,phiTrig,absId))
372 if(!eGeom->CheckAbsCellId(absId)) return ;
374 // Get absolute (col,row) of trigger particle
375 Int_t nSupMod = eGeom->GetSuperModuleNumber(absId);
377 Int_t imEta=-1, imPhi=-1;
378 Int_t ieta =-1, iphi =-1;
380 if (eGeom->GetCellIndex(absId,nSupMod,nModule,imPhi,imEta))
382 eGeom->GetCellPhiEtaIndexInSModule(nSupMod,nModule,imPhi,imEta,iphi,ieta);
384 Int_t colTrig = ieta;
385 if (nSupMod % 2) colTrig = AliEMCALGeoParams::fgkEMCALCols + ieta ;
386 Int_t rowTrig = iphi + AliEMCALGeoParams::fgkEMCALRows*int(nSupMod/2);
388 Int_t sqrSize = int(conesize/0.0143);
390 AliVCaloCells * cells = GetEMCALCells();
392 Int_t nTotalRows = AliEMCALGeoParams::fgkEMCALRows*16/3 ; // 24*(16/3) 5 full-size Sectors (2 SM) + 1 one-third Sector (2 SM)
393 Int_t nTotalCols = 2*AliEMCALGeoParams::fgkEMCALCols;
394 // printf("nTotalRows %i, nTotalCols %i\n",nTotalRows,nTotalCols);
395 // Loop on cells in eta band
397 Int_t irowmin = rowTrig-sqrSize;
398 if(irowmin<0) irowmin=0;
399 Int_t irowmax = rowTrig+sqrSize;
400 if(irowmax>AliEMCALGeoParams::fgkEMCALRows) irowmax=AliEMCALGeoParams::fgkEMCALRows;
403 for(Int_t irow = irowmin; irow <irowmax; irow++)
405 for(Int_t icol = 0; icol < nTotalCols; icol++)
407 Int_t inSector = int(irow/AliEMCALGeoParams::fgkEMCALRows);
408 if(inSector==5) continue;
411 if(icol < AliEMCALGeoParams::fgkEMCALCols)
413 inSupMod = 2*inSector + 1;
416 else if(icol > AliEMCALGeoParams::fgkEMCALCols - 1)
418 inSupMod = 2*inSector;
419 icolLoc = icol-AliEMCALGeoParams::fgkEMCALCols;
422 Int_t irowLoc = irow - AliEMCALGeoParams::fgkEMCALRows*inSector ;
424 // Exclude cells in cone
425 if(TMath::Abs(icol-colTrig) < sqrSize || TMath::Abs(irow-rowTrig) < sqrSize){
428 Int_t iabsId = eGeom->GetAbsCellIdFromCellIndexes(inSupMod,irowLoc,icolLoc);
429 if(!eGeom->CheckAbsCellId(iabsId)) continue;
430 etaBandPtSumCells += cells->GetCellAmplitude(iabsId);
431 fhEtaBandCell->Fill(colTrig,rowTrig);
433 // printf("ETA inSupMod %i,irowLoc %i,icolLoc %i, iabsId %i, etaBandPtSumCells %f\n",nSupMod,irowLoc,icolLoc,iabsId,etaBandPtSumCells);
436 Int_t icolmin = colTrig-sqrSize;
437 if(icolmin<0) icolmin=0;
438 Int_t icolmax = colTrig+sqrSize;
439 if(icolmax>AliEMCALGeoParams::fgkEMCALCols) icolmax=AliEMCALGeoParams::fgkEMCALCols;
441 // Loop on cells in phi band
442 for(Int_t icol = icolmin; icol < icolmax; icol++)
444 for(Int_t irow = 0; irow < nTotalRows; irow++)
446 Int_t inSector = int(irow/AliEMCALGeoParams::fgkEMCALRows);
447 if(inSector==5) continue;
450 // printf("icol %i, irow %i, inSector %i\n",icol,irow ,inSector);
451 if(icol < AliEMCALGeoParams::fgkEMCALCols)
453 // printf("icol < AliEMCALGeoParams::fgkEMCALCols %i\n",AliEMCALGeoParams::fgkEMCALCols );
454 inSupMod = 2*inSector + 1;
457 else if(icol > AliEMCALGeoParams::fgkEMCALCols - 1)
459 // printf("icol > AliEMCALGeoParams::fgkEMCALCols -1 %i\n",AliEMCALGeoParams::fgkEMCALCols -1 );
460 inSupMod = 2*inSector;
461 icolLoc = icol-AliEMCALGeoParams::fgkEMCALCols;
464 Int_t irowLoc = irow - AliEMCALGeoParams::fgkEMCALRows*inSector ; // Stesso problema di sopra //
466 // Exclude cells in cone
467 if(TMath::Abs(icol-colTrig) < sqrSize) {
468 //printf("TMath::Abs(icol-colTrig) %i < sqrSize %i\n",TMath::Abs(icol-colTrig) ,sqrSize);continue ;
470 if(TMath::Abs(irow-rowTrig) < sqrSize) {
471 //printf("TMath::Abs(irow-rowTrig) %i < sqrSize %i\n",TMath::Abs(irow-rowTrig) ,sqrSize);continue ;
474 Int_t iabsId = eGeom->GetAbsCellIdFromCellIndexes(inSupMod,irowLoc,icolLoc);
475 if(!eGeom->CheckAbsCellId(iabsId)) {printf("!eGeom->CheckAbsCellId(iabsId=%i) inSupMod %i irowLoc %i icolLoc %i \n",iabsId,inSupMod, irowLoc, icolLoc);continue;}
476 phiBandPtSumCells += cells->GetCellAmplitude(iabsId);
477 fhPhiBandCell->Fill(colTrig,rowTrig);
478 //printf("inSupMod %i,irowLoc %i,icolLoc %i, iabsId %i, phiBandPtSumCells %f\n",nSupMod,irowLoc,icolLoc,iabsId,phiBandPtSumCells);
485 Float_t ptTrig = pCandidate->Pt();
487 fhConeSumPtEtaBandUECell ->Fill(ptTrig , etaBandPtSumCells);
488 fhConeSumPtPhiBandUECell ->Fill(ptTrig , phiBandPtSumCells);
489 fhConeSumPtEtaBandUECellTrigEtaPhi->Fill(etaTrig,phiTrig,etaBandPtSumCells);
490 fhConeSumPtPhiBandUECellTrigEtaPhi->Fill(etaTrig,phiTrig,phiBandPtSumCells);
494 //________________________________________________________________________________________________
495 void AliAnaParticleIsolation::CalculateTrackUEBand(AliAODPWG4ParticleCorrelation * pCandidate,
496 Float_t & etaBandPtSum, Float_t & phiBandPtSum)
498 // Get the track pT or sum of pT in phi/eta bands or at 45 degrees from trigger
500 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyNeutral ) return ;
502 Float_t conesize = GetIsolationCut()->GetConeSize();
504 Double_t sumptPerp= 0. ;
505 Float_t ptTrig = pCandidate->Pt() ;
506 Float_t phiTrig = pCandidate->Phi();
507 Float_t etaTrig = pCandidate->Eta();
509 TObjArray * trackList = GetCTSTracks() ;
510 for(Int_t itrack=0; itrack < trackList->GetEntriesFast(); itrack++)
512 AliVTrack* track = (AliVTrack *) trackList->At(itrack);
516 printf("AliAnaParticleIsolation::CalculateTrackUEBand() - Track not available?");
520 //Do not count the candidate (pion, conversion photon) or the daughters of the candidate
521 if(track->GetID() == pCandidate->GetTrackLabel(0) || track->GetID() == pCandidate->GetTrackLabel(1) ||
522 track->GetID() == pCandidate->GetTrackLabel(2) || track->GetID() == pCandidate->GetTrackLabel(3) ) continue ;
524 // histo of eta:phi for all tracks
525 fhEtaPhiTrack->Fill(track->Eta(),track->Phi());
527 //exclude particles in cone
528 Float_t rad = GetIsolationCut()->Radius(etaTrig, phiTrig, track->Eta(), track->Phi());
530 // histo of eta:phi for all tracks in cone
531 fhEtaPhiInConeTrack->Fill(track->Eta(),track->Phi());
535 //fill histogram for UE in phi band
536 if(track->Eta() > (etaTrig-conesize) && track->Eta() < (etaTrig+conesize))
538 phiBandPtSum+=track->Pt();
539 fhPhiBandTrack->Fill(track->Eta(),track->Phi());
542 //fill histogram for UE in eta band in EMCal acceptance
543 if(track->Phi() > (phiTrig-conesize) && track->Phi() < (phiTrig+conesize))
545 etaBandPtSum+=track->Pt();
546 fhEtaBandTrack->Fill(track->Eta(),track->Phi());
549 //fill the histograms at +-45 degrees in phi from trigger particle, perpedicular to trigger axis in phi
550 Double_t dPhi = phiTrig - track->Phi() + TMath::PiOver2();
551 Double_t dEta = etaTrig - track->Eta();
552 Double_t arg = dPhi*dPhi + dEta*dEta;
553 if(TMath::Sqrt(arg) < conesize)
555 fhPtInPerpCone->Fill(ptTrig,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
556 sumptPerp+=track->Pt();
559 dPhi = phiTrig - track->Phi() - TMath::PiOver2();
560 arg = dPhi*dPhi + dEta*dEta;
561 if(TMath::Sqrt(arg) < conesize)
563 fhPtInPerpCone->Fill(ptTrig,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
564 sumptPerp+=track->Pt();
568 fhPerpConeSumPt ->Fill(ptTrig , sumptPerp );
569 fhConeSumPtEtaBandUETrack ->Fill(ptTrig , etaBandPtSum);
570 fhConeSumPtPhiBandUETrack ->Fill(ptTrig , phiBandPtSum);
571 fhConeSumPtEtaBandUETrackTrigEtaPhi->Fill(etaTrig,phiTrig,etaBandPtSum);
572 fhConeSumPtPhiBandUETrackTrigEtaPhi->Fill(etaTrig,phiTrig,phiBandPtSum);
578 //_____________________________________________________________________________________________________________________________________
579 void AliAnaParticleIsolation::CalculateNormalizeUEBandPerUnitArea(AliAODPWG4ParticleCorrelation * pCandidate, Float_t coneptsumCluster,
580 Float_t coneptsumCell, Float_t coneptsumTrack,
581 Float_t &etaBandptsumTrackNorm, Float_t &etaBandptsumClusterNorm)
583 //normalize phi/eta band per area unit
585 Float_t etaUEptsumTrack = 0 ;
586 Float_t phiUEptsumTrack = 0 ;
587 Float_t etaUEptsumCluster = 0 ;
588 Float_t phiUEptsumCluster = 0 ;
589 Float_t etaUEptsumCell = 0 ;
590 Float_t phiUEptsumCell = 0 ;
592 Int_t partTypeInCone = GetIsolationCut()->GetParticleTypeInCone();
594 // Do the normalization
596 Float_t conesize = GetIsolationCut()->GetConeSize();
597 Float_t coneA = conesize*conesize*TMath::Pi(); // A = pi R^2, isolation cone area
598 Float_t ptTrig = pCandidate->Pt() ;
599 Float_t phiTrig = pCandidate->Phi();
600 Float_t etaTrig = pCandidate->Eta();
606 Float_t phiUEptsumTrackNorm = 0 ;
607 Float_t etaUEptsumTrackNorm = 0 ;
608 Float_t coneptsumTrackSubPhi = 0 ;
609 Float_t coneptsumTrackSubEta = 0 ;
610 Float_t coneptsumTrackSubPhiNorm = 0 ;
611 Float_t coneptsumTrackSubEtaNorm = 0 ;
612 etaBandptsumTrackNorm = 0 ;
614 if( partTypeInCone!=AliIsolationCut::kOnlyNeutral )
616 // Sum the pT in the phi or eta band for clusters or tracks
617 CalculateTrackUEBand (pCandidate,etaUEptsumTrack ,phiUEptsumTrack );// rajouter ici l'histo eta phi
620 fhConeSumPtVSUETracksEtaBand->Fill(coneptsumTrack,etaUEptsumTrack);
621 fhConeSumPtVSUETracksPhiBand->Fill(coneptsumTrack,phiUEptsumTrack);
624 Float_t correctConeSumTrack = 1;
625 Float_t correctConeSumTrackPhi = 1;
627 GetIsolationCut()->CalculateUEBandTrackNormalization(GetReader(),etaTrig, phiTrig,
628 phiUEptsumTrack,etaUEptsumTrack,
629 phiUEptsumTrackNorm,etaUEptsumTrackNorm,
630 correctConeSumTrack,correctConeSumTrackPhi);
632 coneptsumTrackSubPhi = coneptsumTrack - phiUEptsumTrackNorm;
633 coneptsumTrackSubEta = coneptsumTrack - etaUEptsumTrackNorm;
635 etaBandptsumTrackNorm = etaUEptsumTrackNorm;
637 fhConeSumPtPhiUESubTrack ->Fill(ptTrig , coneptsumTrackSubPhi);
638 fhConeSumPtPhiUESubTrackTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumTrackSubPhi);
639 fhConeSumPtEtaUESubTrack ->Fill(ptTrig , coneptsumTrackSubEta);
640 fhConeSumPtEtaUESubTrackTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumTrackSubEta);
642 fhFractionTrackOutConeEta ->Fill(ptTrig , correctConeSumTrack-1);
643 fhFractionTrackOutConeEtaTrigEtaPhi->Fill(etaTrig, phiTrig,correctConeSumTrack-1);
645 if(coneptsumTrack > 0)
647 coneptsumTrackSubPhiNorm = coneptsumTrackSubPhi/coneptsumTrack;
648 coneptsumTrackSubEtaNorm = coneptsumTrackSubEta/coneptsumTrack;
651 fhConeSumPtSubvsConeSumPtTotPhiTrack ->Fill(coneptsumTrack,coneptsumTrackSubPhi);
652 fhConeSumPtSubNormvsConeSumPtTotPhiTrack->Fill(coneptsumTrack,coneptsumTrackSubPhiNorm);
653 fhConeSumPtSubvsConeSumPtTotEtaTrack ->Fill(coneptsumTrack,coneptsumTrackSubEta);
654 fhConeSumPtSubNormvsConeSumPtTotEtaTrack->Fill(coneptsumTrack,coneptsumTrackSubEtaNorm);
658 // ------------------------ //
659 // EMCal Clusters and cells //
660 // ------------------------ //
661 Float_t phiUEptsumClusterNorm = 0 ;
662 Float_t etaUEptsumClusterNorm = 0 ;
663 Float_t coneptsumClusterSubPhi = 0 ;
664 Float_t coneptsumClusterSubEta = 0 ;
665 Float_t coneptsumClusterSubPhiNorm = 0 ;
666 Float_t coneptsumClusterSubEtaNorm = 0 ;
667 Float_t phiUEptsumCellNorm = 0 ;
668 Float_t etaUEptsumCellNorm = 0 ;
669 Float_t coneptsumCellSubPhi = 0 ;
670 Float_t coneptsumCellSubEta = 0 ;
671 Float_t coneptsumCellSubPhiNorm = 0 ;
672 Float_t coneptsumCellSubEtaNorm = 0 ;
673 etaBandptsumClusterNorm = 0;
675 if( partTypeInCone!=AliIsolationCut::kOnlyCharged )
682 // Sum the pT in the phi or eta band for clusters or tracks
683 CalculateCaloUEBand (pCandidate,etaUEptsumCluster,phiUEptsumCluster);// rajouter ici l'histo eta phi
686 fhConeSumPtVSUEClusterEtaBand->Fill(coneptsumCluster,etaUEptsumCluster);
687 fhConeSumPtVSUEClusterPhiBand->Fill(coneptsumCluster,phiUEptsumCluster);
690 Float_t correctConeSumClusterEta = 1;
691 Float_t correctConeSumClusterPhi = 1;
693 GetIsolationCut()->CalculateUEBandClusterNormalization(GetReader(),etaTrig, phiTrig,
694 phiUEptsumCluster,etaUEptsumCluster,
695 phiUEptsumClusterNorm,etaUEptsumClusterNorm,
696 correctConeSumClusterEta,correctConeSumClusterPhi);
698 // In case that cone is out of eta and phi side, we are over correcting, not too often with the current cuts ...
699 // Comment if not used
700 // Float_t coneBadCellsCoeff =1;
701 // Float_t etaBandBadCellsCoeff=1;
702 // Float_t phiBandBadCellsCoeff=1;
703 // GetIsolationCut()->GetCoeffNormBadCell(pCandidate, GetReader(),coneBadCellsCoeff,etaBandBadCellsCoeff,phiBandBadCellsCoeff) ;
705 //coneptsumCluster=coneptsumCluster*coneBadCellsCoeff*correctConeSumClusterEta*correctConeSumClusterPhi;
707 coneptsumClusterSubPhi = coneptsumCluster - phiUEptsumClusterNorm;
708 coneptsumClusterSubEta = coneptsumCluster - etaUEptsumClusterNorm;
710 etaBandptsumClusterNorm = etaUEptsumClusterNorm;
712 fhConeSumPtPhiUESubCluster ->Fill(ptTrig , coneptsumClusterSubPhi);
713 fhConeSumPtPhiUESubClusterTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumClusterSubPhi);
714 fhConeSumPtEtaUESubCluster ->Fill(ptTrig , coneptsumClusterSubEta);
715 fhConeSumPtEtaUESubClusterTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumClusterSubEta);
717 fhFractionClusterOutConeEta ->Fill(ptTrig , correctConeSumClusterEta-1);
718 fhFractionClusterOutConeEtaTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumClusterEta-1);
719 fhFractionClusterOutConePhi ->Fill(ptTrig , correctConeSumClusterPhi-1);
720 fhFractionClusterOutConePhiTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumClusterPhi-1);
722 if(coneptsumCluster!=0)
724 coneptsumClusterSubPhiNorm = coneptsumClusterSubPhi/coneptsumCluster;
725 coneptsumClusterSubEtaNorm = coneptsumClusterSubEta/coneptsumCluster;
728 fhConeSumPtSubvsConeSumPtTotPhiCluster ->Fill(coneptsumCluster,coneptsumClusterSubPhi);
729 fhConeSumPtSubNormvsConeSumPtTotPhiCluster->Fill(coneptsumCluster,coneptsumClusterSubPhiNorm);
730 fhConeSumPtSubvsConeSumPtTotEtaCluster ->Fill(coneptsumCluster,coneptsumClusterSubEta);
731 fhConeSumPtSubNormvsConeSumPtTotEtaCluster->Fill(coneptsumCluster,coneptsumClusterSubEtaNorm);
737 if(fFillCellHistograms)
739 // Sum the pT in the phi or eta band for clusters or tracks
740 CalculateCaloCellUEBand(pCandidate,etaUEptsumCell ,phiUEptsumCell );
742 // Move to AliIsolationCut the calculation not the histograms??
744 //Careful here if EMCal limits changed .. 2010 (4 SM) to 2011-12 (10 SM), for the moment consider 100 deg in phi
745 Float_t emcEtaSize = 0.7*2; // TO FIX
746 Float_t emcPhiSize = TMath::DegToRad()*100.; // TO FIX
748 if(((2*conesize*emcPhiSize)-coneA)!=0)phiUEptsumCellNorm = phiUEptsumCell*(coneA / ((2*conesize*emcPhiSize)-coneA));
749 if(((2*conesize*emcEtaSize)-coneA)!=0)etaUEptsumCellNorm = etaUEptsumCell*(coneA / ((2*conesize*emcEtaSize)-coneA));
751 // Need to correct coneptsumCluster by the fraction of the cone out of the calorimeter cut acceptance!
753 Float_t correctConeSumCellEta = 1;
754 if(TMath::Abs(etaTrig)+conesize > emcEtaSize/2.)
756 Float_t excess = TMath::Abs(etaTrig) + conesize - emcEtaSize/2.;
757 correctConeSumCellEta = GetIsolationCut()->CalculateExcessAreaFraction(excess);
758 //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);
759 // Need to correct phi band surface if part of the cone falls out of track cut acceptance!
760 if(((2*(conesize-excess)*emcPhiSize)-(coneA-correctConeSumCellEta))!=0)phiUEptsumCellNorm = phiUEptsumCell*(coneA / ((2*(conesize-excess)*emcPhiSize)-(coneA-correctConeSumCellEta)));
763 Float_t correctConeSumCellPhi = 1;
764 //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() );
765 if((phiTrig+conesize > 180*TMath::DegToRad()) ||
766 (phiTrig-conesize < 80*TMath::DegToRad()))
769 if( phiTrig+conesize > 180*TMath::DegToRad() ) excess = conesize + phiTrig - 180*TMath::DegToRad() ;
770 else excess = conesize - phiTrig + 80*TMath::DegToRad() ;
772 correctConeSumCellPhi = GetIsolationCut()->CalculateExcessAreaFraction(excess);
773 //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);
775 // Need to correct eta band surface if part of the cone falls out of track cut acceptance!
776 if(((2*(conesize-excess)*emcEtaSize)-(coneA-correctConeSumCellPhi))!=0)etaUEptsumCellNorm = etaUEptsumCell*(coneA / ((2*(conesize-excess)*emcEtaSize)-(coneA-correctConeSumCellPhi)));
780 // In case that cone is out of eta and phi side, we are over correcting, not too often with the current cuts ...
781 coneptsumCellSubPhi = coneptsumCell*correctConeSumCellEta*correctConeSumCellPhi - phiUEptsumCellNorm;
782 coneptsumCellSubEta = coneptsumCell*correctConeSumCellEta*correctConeSumCellPhi - etaUEptsumCellNorm;
784 fhConeSumPtPhiUESubCell ->Fill(ptTrig , coneptsumCellSubPhi);
785 fhConeSumPtPhiUESubCellTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumCellSubPhi);
786 fhConeSumPtEtaUESubCell ->Fill(ptTrig , coneptsumCellSubEta);
787 fhConeSumPtEtaUESubCellTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumCellSubEta);
789 fhFractionCellOutConeEta ->Fill(ptTrig , correctConeSumCellEta-1);
790 fhFractionCellOutConeEtaTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumCellEta-1);
791 fhFractionCellOutConePhi ->Fill(ptTrig , correctConeSumCellPhi-1);
792 fhFractionCellOutConePhiTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumCellPhi-1);
795 coneptsumCellSubPhiNorm = coneptsumCellSubPhi/coneptsumCell;
796 coneptsumCellSubEtaNorm = coneptsumCellSubEta/coneptsumCell;
799 fhConeSumPtSubvsConeSumPtTotPhiCell ->Fill(coneptsumCell,coneptsumCellSubPhi);
800 fhConeSumPtSubNormvsConeSumPtTotPhiCell->Fill(coneptsumCell,coneptsumCellSubPhiNorm);
801 fhConeSumPtSubvsConeSumPtTotEtaCell ->Fill(coneptsumCell,coneptsumCellSubEta);
802 fhConeSumPtSubNormvsConeSumPtTotEtaCell->Fill(coneptsumCell,coneptsumCellSubEtaNorm);
806 if( partTypeInCone==AliIsolationCut::kNeutralAndCharged )
808 // --------------------------- //
809 // Tracks and clusters in cone //
810 // --------------------------- //
812 Double_t sumPhiUESub = coneptsumClusterSubPhi + coneptsumTrackSubPhi;
813 Double_t sumEtaUESub = coneptsumClusterSubEta + coneptsumTrackSubEta;
815 fhConeSumPtPhiUESub ->Fill(ptTrig , sumPhiUESub);
816 fhConeSumPtPhiUESubTrigEtaPhi->Fill(etaTrig, phiTrig, sumPhiUESub);
817 fhConeSumPtEtaUESub ->Fill(ptTrig , sumEtaUESub);
818 fhConeSumPtEtaUESubTrigEtaPhi->Fill(etaTrig, phiTrig, sumEtaUESub);
820 fhEtaBandClustervsTrack ->Fill(etaUEptsumCluster ,etaUEptsumTrack );
821 fhPhiBandClustervsTrack ->Fill(phiUEptsumCluster ,phiUEptsumTrack );
822 fhEtaBandNormClustervsTrack->Fill(etaUEptsumClusterNorm,etaUEptsumTrackNorm);
823 fhPhiBandNormClustervsTrack->Fill(phiUEptsumClusterNorm,phiUEptsumTrackNorm);
825 fhConeSumPtEtaUESubClustervsTrack->Fill(coneptsumClusterSubEta,coneptsumTrackSubEta);
826 fhConeSumPtPhiUESubClustervsTrack->Fill(coneptsumClusterSubPhi,coneptsumTrackSubPhi);
828 // ------------------------ //
829 // Tracks and cells in cone //
830 // ------------------------ //
832 if(fFillCellHistograms)
834 Double_t sumPhiUESubTrackCell = coneptsumCellSubPhi + coneptsumTrackSubPhi;
835 Double_t sumEtaUESubTrackCell = coneptsumCellSubEta + coneptsumTrackSubEta;
837 fhConeSumPtPhiUESubTrackCell ->Fill(ptTrig , sumPhiUESubTrackCell);
838 fhConeSumPtPhiUESubTrackCellTrigEtaPhi->Fill(etaTrig, phiTrig, sumPhiUESubTrackCell);
839 fhConeSumPtEtaUESubTrackCell ->Fill(ptTrig , sumEtaUESubTrackCell);
840 fhConeSumPtEtaUESubTrackCellTrigEtaPhi->Fill(etaTrig, phiTrig, sumEtaUESubTrackCell);
842 fhEtaBandCellvsTrack ->Fill(etaUEptsumCell ,etaUEptsumTrack );
843 fhPhiBandCellvsTrack ->Fill(phiUEptsumCell ,phiUEptsumTrack );
844 fhEtaBandNormCellvsTrack->Fill(etaUEptsumCellNorm,etaUEptsumTrackNorm);
845 fhPhiBandNormCellvsTrack->Fill(phiUEptsumCellNorm,phiUEptsumTrackNorm);
847 fhConeSumPtEtaUESubCellvsTrack->Fill(coneptsumCellSubEta,coneptsumTrackSubEta);
848 fhConeSumPtPhiUESubCellvsTrack->Fill(coneptsumCellSubPhi,coneptsumTrackSubPhi);
855 //______________________________________________________________________________________________________________
856 void AliAnaParticleIsolation::CalculateCaloSignalInCone(AliAODPWG4ParticleCorrelation * aodParticle,
857 Float_t & coneptsumCluster, Float_t & coneptLeadCluster)
859 // Get the cluster pT or sum of pT in isolation cone
860 coneptLeadCluster = 0;
861 coneptsumCluster = 0;
863 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyCharged ) return ;
865 //Recover reference arrays with clusters and tracks
866 TObjArray * refclusters = aodParticle->GetObjArray(GetAODObjArrayName()+"Clusters");
867 if(!refclusters) return ;
869 Float_t ptTrig = aodParticle->Pt();
871 //Get vertex for cluster momentum calculation
872 Double_t vertex[] = {0,0,0} ; //vertex ;
873 if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
874 GetReader()->GetVertex(vertex);
877 for(Int_t icalo=0; icalo < refclusters->GetEntriesFast(); icalo++)
879 AliVCluster* calo = (AliVCluster *) refclusters->At(icalo);
880 calo->GetMomentum(mom,vertex) ;//Assume that come from vertex in straight line
882 fhPtInCone ->Fill(ptTrig, mom.Pt());
883 fhPtClusterInCone->Fill(ptTrig, mom.Pt());
885 if(fFillPileUpHistograms)
887 if(GetReader()->IsPileUpFromSPD()) fhPtInConePileUp[0]->Fill(ptTrig,mom.Pt());
888 if(GetReader()->IsPileUpFromEMCal()) fhPtInConePileUp[1]->Fill(ptTrig,mom.Pt());
889 if(GetReader()->IsPileUpFromSPDOrEMCal()) fhPtInConePileUp[2]->Fill(ptTrig,mom.Pt());
890 if(GetReader()->IsPileUpFromSPDAndEMCal()) fhPtInConePileUp[3]->Fill(ptTrig,mom.Pt());
891 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) fhPtInConePileUp[4]->Fill(ptTrig,mom.Pt());
892 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) fhPtInConePileUp[5]->Fill(ptTrig,mom.Pt());
893 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) fhPtInConePileUp[6]->Fill(ptTrig,mom.Pt());
896 if(fFillHighMultHistograms) fhPtInConeCent->Fill(GetEventCentrality(),mom.Pt());
898 coneptsumCluster+=mom.Pt();
899 if(mom.Pt() > coneptLeadCluster) coneptLeadCluster = mom.Pt();
902 fhConeSumPtCluster ->Fill(ptTrig, coneptsumCluster );
903 fhConePtLeadCluster->Fill(ptTrig, coneptLeadCluster);
906 //______________________________________________________________________________________________________
907 void AliAnaParticleIsolation::CalculateCaloCellSignalInCone(AliAODPWG4ParticleCorrelation * aodParticle,
908 Float_t & coneptsumCell)
910 // Get the cell amplityde or sum of amplitudes in isolation cone
911 // Mising: Remove signal cells in cone in case the trigger is a cluster!
913 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyCharged ) return ;
915 Float_t conesize = GetIsolationCut()->GetConeSize();
917 Float_t ptTrig = aodParticle->Pt();
918 Float_t phiTrig = aodParticle->Phi();
919 if(phiTrig<0) phiTrig += TMath::TwoPi();
920 Float_t etaTrig = aodParticle->Eta();
922 if(aodParticle->GetDetector()=="EMCAL")
924 AliEMCALGeometry* eGeom = AliEMCALGeometry::GetInstance();
927 if (eGeom->GetAbsCellIdFromEtaPhi(etaTrig,phiTrig,absId))
929 if(!eGeom->CheckAbsCellId(absId)) return ;
931 // Get absolute (col,row) of trigger particle
932 Int_t nSupMod = eGeom->GetSuperModuleNumber(absId);
934 Int_t imEta=-1, imPhi=-1;
935 Int_t ieta =-1, iphi =-1;
937 if (eGeom->GetCellIndex(absId,nSupMod,nModule,imPhi,imEta))
939 Int_t iEta=-1, iPhi=-1;
940 eGeom->GetCellPhiEtaIndexInSModule(nSupMod,nModule,imPhi,imEta,iphi,ieta);
942 Int_t colTrig = iEta;
943 if (nSupMod % 2) colTrig = AliEMCALGeoParams::fgkEMCALCols + iEta ;
944 Int_t rowTrig = iPhi + AliEMCALGeoParams::fgkEMCALRows*int(nSupMod/2);
946 Int_t sqrSize = int(conesize/0.0143);
948 AliVCaloCells * cells = GetEMCALCells();
950 // Loop on cells in cone
951 for(Int_t irow = rowTrig-sqrSize; irow < rowTrig+sqrSize; irow++)
953 for(Int_t icol = colTrig-sqrSize; icol < colTrig+sqrSize; icol++)
955 Int_t inSector = int(irow/AliEMCALGeoParams::fgkEMCALRows);
956 if(inSector==5) continue;
960 if(icol < AliEMCALGeoParams::fgkEMCALCols)
962 inSupMod = 2*inSector + 1;
965 else if(icol > AliEMCALGeoParams::fgkEMCALCols - 1)
967 inSupMod = 2*inSector;
968 icolLoc = icol-AliEMCALGeoParams::fgkEMCALCols;
971 Int_t irowLoc = irow - AliEMCALGeoParams::fgkEMCALRows*inSector ;
973 Int_t iabsId = eGeom->GetAbsCellIdFromCellIndexes(inSupMod,irowLoc,icolLoc);
974 if(!eGeom->CheckAbsCellId(iabsId)) continue;
976 fhPtCellInCone->Fill(ptTrig, cells->GetCellAmplitude(iabsId));
977 coneptsumCell += cells->GetCellAmplitude(iabsId);
984 fhConeSumPtCell->Fill(ptTrig,coneptsumCell);
988 //___________________________________________________________________________________________________________
989 void AliAnaParticleIsolation::CalculateTrackSignalInCone(AliAODPWG4ParticleCorrelation * aodParticle,
990 Float_t & coneptsumTrack, Float_t & coneptLeadTrack)
992 // Get the track pT or sum of pT in isolation cone
994 if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyNeutral ) return ;
996 //Recover reference arrays with clusters and tracks
997 TObjArray * reftracks = aodParticle->GetObjArray(GetAODObjArrayName()+"Tracks");
998 if(!reftracks) return ;
1000 Float_t ptTrig = aodParticle->Pt();
1001 Double_t bz = GetReader()->GetInputEvent()->GetMagneticField();
1003 for(Int_t itrack=0; itrack < reftracks->GetEntriesFast(); itrack++)
1005 AliVTrack* track = (AliVTrack *) reftracks->At(itrack);
1006 Float_t pTtrack = track->Pt();
1008 fhPtInCone ->Fill(ptTrig,pTtrack);
1009 fhPtTrackInCone->Fill(ptTrig,pTtrack);
1011 if(fFillPileUpHistograms)
1013 ULong_t status = track->GetStatus();
1014 Bool_t okTOF = ( (status & AliVTrack::kTOFout) == AliVTrack::kTOFout ) ;
1015 //Double32_t tof = track->GetTOFsignal()*1e-3;
1016 Int_t trackBC = track->GetTOFBunchCrossing(bz);
1018 if ( okTOF && trackBC!=0 ) fhPtTrackInConeOtherBC->Fill(ptTrig,pTtrack);
1019 else if( okTOF && trackBC==0 ) fhPtTrackInConeBC0 ->Fill(ptTrig,pTtrack);
1021 Int_t vtxBC = GetReader()->GetVertexBC();
1022 if(vtxBC == 0 || vtxBC==AliVTrack::kTOFBCNA) fhPtTrackInConeVtxBC0->Fill(ptTrig,pTtrack);
1024 if(GetReader()->IsPileUpFromSPD()) { fhPtInConePileUp[0]->Fill(ptTrig,pTtrack);
1025 if(okTOF && trackBC!=0 ) fhPtTrackInConeOtherBCPileUpSPD->Fill(ptTrig,pTtrack);
1026 if(okTOF && trackBC==0 ) fhPtTrackInConeBC0PileUpSPD ->Fill(ptTrig,pTtrack); }
1027 if(GetReader()->IsPileUpFromEMCal()) fhPtInConePileUp[1]->Fill(ptTrig,pTtrack);
1028 if(GetReader()->IsPileUpFromSPDOrEMCal()) fhPtInConePileUp[2]->Fill(ptTrig,pTtrack);
1029 if(GetReader()->IsPileUpFromSPDAndEMCal()) fhPtInConePileUp[3]->Fill(ptTrig,pTtrack);
1030 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) fhPtInConePileUp[4]->Fill(ptTrig,pTtrack);
1031 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) fhPtInConePileUp[5]->Fill(ptTrig,pTtrack);
1032 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) fhPtInConePileUp[6]->Fill(ptTrig,pTtrack);
1035 if(fFillHighMultHistograms) fhPtInConeCent->Fill(GetEventCentrality(),pTtrack);
1037 coneptsumTrack+=pTtrack;
1038 if(pTtrack > coneptLeadTrack) coneptLeadTrack = pTtrack;
1041 fhConeSumPtTrack ->Fill(ptTrig, coneptsumTrack );
1042 fhConePtLeadTrack->Fill(ptTrig, coneptLeadTrack);
1046 //_________________________________________________________________
1047 void AliAnaParticleIsolation::FillPileUpHistograms(Int_t clusterID)
1049 // Fill some histograms to understand pile-up
1053 printf("AliAnaParticleIsolation::FillPileUpHistograms(), ID of cluster = %d, not possible! ", clusterID);
1058 TObjArray* clusters = 0x0;
1059 if (fCalorimeter == "EMCAL") clusters = GetEMCALClusters();
1060 else if(fCalorimeter == "PHOS" ) clusters = GetPHOSClusters();
1063 Float_t time = -1000;
1067 AliVCluster *cluster = FindCluster(clusters,clusterID,iclus);
1068 energy = cluster->E();
1069 time = cluster->GetTOF()*1e9;
1072 //printf("E %f, time %f\n",energy,time);
1073 AliVEvent * event = GetReader()->GetInputEvent();
1075 fhTimeENoCut->Fill(energy,time);
1076 if(GetReader()->IsPileUpFromSPD()) fhTimeESPD ->Fill(energy,time);
1077 if(event->IsPileupFromSPDInMultBins()) fhTimeESPDMulti->Fill(energy,time);
1079 if(energy < 8) return; // Fill time figures for high energy clusters not too close to trigger threshold
1081 AliESDEvent* esdEv = dynamic_cast<AliESDEvent*> (event);
1082 AliAODEvent* aodEv = dynamic_cast<AliAODEvent*> (event);
1084 // N pile up vertices
1085 Int_t nVerticesSPD = -1;
1086 Int_t nVerticesTracks = -1;
1090 nVerticesSPD = esdEv->GetNumberOfPileupVerticesSPD();
1091 nVerticesTracks = esdEv->GetNumberOfPileupVerticesTracks();
1096 nVerticesSPD = aodEv->GetNumberOfPileupVerticesSPD();
1097 nVerticesTracks = aodEv->GetNumberOfPileupVerticesTracks();
1100 fhTimeNPileUpVertSPD ->Fill(time,nVerticesSPD);
1101 fhTimeNPileUpVertTrack->Fill(time,nVerticesTracks);
1103 //printf("Is SPD %d, Is SPD Multi %d, n spd %d, n track %d\n",
1104 // GetReader()->IsPileUpFromSPD(),event->IsPileupFromSPDInMultBins(),nVerticesSPD,nVerticesTracks);
1107 Float_t z1 = -1, z2 = -1;
1109 for(Int_t iVert=0; iVert<nVerticesSPD;iVert++)
1113 const AliESDVertex* pv=esdEv->GetPileupVertexSPD(iVert);
1114 ncont=pv->GetNContributors();
1115 z1 = esdEv->GetPrimaryVertexSPD()->GetZ();
1117 diamZ = esdEv->GetDiamondZ();
1121 AliAODVertex *pv=aodEv->GetVertex(iVert);
1122 if(pv->GetType()!=AliAODVertex::kPileupSPD) continue;
1123 ncont=pv->GetNContributors();
1124 z1=aodEv->GetPrimaryVertexSPD()->GetZ();
1126 diamZ = aodEv->GetDiamondZ();
1129 Double_t distZ = TMath::Abs(z2-z1);
1130 diamZ = TMath::Abs(z2-diamZ);
1132 fhTimeNPileUpVertContributors ->Fill(time,ncont);
1133 fhTimePileUpMainVertexZDistance->Fill(time,distZ);
1134 fhTimePileUpMainVertexZDiamond ->Fill(time,diamZ);
1139 //_____________________________________________________________________________________________________________________
1140 void AliAnaParticleIsolation::FillTrackMatchingShowerShapeControlHistograms(AliAODPWG4ParticleCorrelation *pCandidate,
1143 // Fill Track matching and Shower Shape control histograms
1144 if(!fFillTMHisto && !fFillSSHisto) return;
1146 Int_t clusterID = pCandidate->GetCaloLabel(0) ;
1147 Int_t nMaxima = pCandidate->GetFiducialArea(); // bad name, just place holder for the moment
1148 Int_t mcTag = pCandidate->GetTag() ;
1149 Bool_t isolated = pCandidate->IsIsolated();
1153 printf("AliAnaParticleIsolation::FillTrackMatchingShowerShapeControlHistograms(), ID of cluster = %d, not possible! \n", clusterID);
1158 TObjArray* clusters = 0x0;
1159 if (fCalorimeter == "EMCAL") clusters = GetEMCALClusters();
1160 else if(fCalorimeter == "PHOS" ) clusters = GetPHOSClusters();
1162 Float_t energy = pCandidate->E();
1163 Float_t pt = pCandidate->Pt();
1167 AliVCluster *cluster = FindCluster(clusters,clusterID,iclus);
1171 fhELambda0 [isolated]->Fill(energy, cluster->GetM02() );
1172 fhPtLambda0[isolated]->Fill(pt, cluster->GetM02() );
1173 fhELambda1 [isolated]->Fill(energy, cluster->GetM20() );
1177 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
1178 fhPtLambda0MC[kmcPhoton][isolated]->Fill(pt, cluster->GetM02());
1180 fhPtLambda0MC[mcIndex][isolated]->Fill(pt, cluster->GetM02());
1183 if(fCalorimeter == "EMCAL" && GetFirstSMCoveredByTRD() >= 0 &&
1184 GetModuleNumber(cluster) >= GetFirstSMCoveredByTRD() )
1186 fhELambda0TRD [isolated]->Fill(energy, cluster->GetM02() );
1187 fhPtLambda0TRD[isolated]->Fill(pt , cluster->GetM02() );
1188 fhELambda1TRD [isolated]->Fill(energy, cluster->GetM20() );
1191 if(fFillNLMHistograms)
1193 fhNLocMax[isolated]->Fill(energy,nMaxima);
1194 if (nMaxima==1) { fhELambda0LocMax1[isolated]->Fill(energy,cluster->GetM02()); fhELambda1LocMax1[isolated]->Fill(energy,cluster->GetM20()); }
1195 else if(nMaxima==2) { fhELambda0LocMax2[isolated]->Fill(energy,cluster->GetM02()); fhELambda1LocMax2[isolated]->Fill(energy,cluster->GetM20()); }
1196 else { fhELambda0LocMaxN[isolated]->Fill(energy,cluster->GetM02()); fhELambda1LocMaxN[isolated]->Fill(energy,cluster->GetM20()); }
1203 Float_t dZ = cluster->GetTrackDz();
1204 Float_t dR = cluster->GetTrackDx();
1206 if(cluster->IsEMCAL() && GetCaloUtils()->IsRecalculationOfClusterTrackMatchingOn())
1208 dR = 2000., dZ = 2000.;
1209 GetCaloUtils()->GetEMCALRecoUtils()->GetMatchedResiduals(cluster->GetID(),dZ,dR);
1212 //printf("ParticleIsolation: dPhi %f, dEta %f\n",dR,dZ);
1213 if(fhTrackMatchedDEta[isolated] && TMath::Abs(dR) < 999)
1215 fhTrackMatchedDEta[isolated]->Fill(energy,dZ);
1216 fhTrackMatchedDPhi[isolated]->Fill(energy,dR);
1217 if(energy > 0.5) fhTrackMatchedDEtaDPhi[isolated]->Fill(dZ,dR);
1220 // Check dEdx and E/p of matched clusters
1222 if(TMath::Abs(dZ) < 0.05 && TMath::Abs(dR) < 0.05)
1225 AliVTrack *track = GetCaloUtils()->GetMatchedTrack(cluster, GetReader()->GetInputEvent());
1229 Float_t dEdx = track->GetTPCsignal();
1230 fhdEdx[isolated]->Fill(cluster->E(), dEdx);
1232 Float_t eOverp = cluster->E()/track->P();
1233 fhEOverP[isolated]->Fill(cluster->E(), eOverp);
1236 // printf("AliAnaParticleIsolation::FillTrackMatchingShowerShapeHistograms() - Residual OK but (dR, dZ)= (%2.4f,%2.4f) no track associated WHAT? \n", dR,dZ);
1241 if ( !GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCConversion) )
1243 if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0) ||
1244 GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEta) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 2.5 );
1245 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 0.5 );
1246 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 1.5 );
1247 else fhTrackMatchedMCParticle[isolated]->Fill(energy, 3.5 );
1252 if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0) ||
1253 GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEta) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 6.5 );
1254 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 4.5 );
1255 else if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron) ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 5.5 );
1256 else fhTrackMatchedMCParticle[isolated]->Fill(energy, 7.5 );
1265 } // clusters array available
1269 //______________________________________________________
1270 TObjString * AliAnaParticleIsolation::GetAnalysisCuts()
1272 //Save parameters used for analysis
1273 TString parList ; //this will be list of parameters used for this analysis.
1274 const Int_t buffersize = 255;
1275 char onePar[buffersize] ;
1277 snprintf(onePar, buffersize,"--- AliAnaParticleIsolation ---\n") ;
1279 snprintf(onePar, buffersize,"Calorimeter: %s\n",fCalorimeter.Data()) ;
1281 snprintf(onePar, buffersize,"Isolation Cand Detector: %s\n",fIsoDetector.Data()) ;
1283 snprintf(onePar, buffersize,"fReMakeIC =%d (Flag for reisolation during histogram filling) \n",fReMakeIC) ;
1285 snprintf(onePar, buffersize,"fMakeSeveralIC=%d (Flag for isolation with several cuts at the same time ) \n",fMakeSeveralIC) ;
1287 snprintf(onePar, buffersize,"fFillTMHisto=%d (Flag for track matching histograms) \n",fFillTMHisto) ;
1289 snprintf(onePar, buffersize,"fFillSSHisto=%d (Flag for shower shape histograms) \n",fFillSSHisto) ;
1294 snprintf(onePar, buffersize,"fNCones =%d (Number of cone sizes) \n",fNCones) ;
1296 snprintf(onePar, buffersize,"fNPtThresFrac=%d (Flag for isolation with several cuts at the same time ) \n",fNPtThresFrac) ;
1299 for(Int_t icone = 0; icone < fNCones ; icone++)
1301 snprintf(onePar, buffersize,"fConeSizes[%d]=%1.2f (isolation cone size) \n",icone, fConeSizes[icone]) ;
1304 for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
1306 snprintf(onePar, buffersize,"fPtThresholds[%d]=%1.2f (isolation pt threshold) \n",ipt, fPtThresholds[ipt]) ;
1309 for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
1311 snprintf(onePar, buffersize,"fPtFractions[%d]=%1.2f (isolation pt fraction threshold) \n",ipt, fPtFractions[ipt]) ;
1314 for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
1316 snprintf(onePar, buffersize,"fSumPtThresholds[%d]=%1.2f (isolation sum pt threshold) \n",ipt, fSumPtThresholds[ipt]) ;
1321 //Get parameters set in base class.
1322 parList += GetBaseParametersList() ;
1324 //Get parameters set in IC class.
1325 if(!fMakeSeveralIC)parList += GetIsolationCut()->GetICParametersList() ;
1327 return new TObjString(parList) ;
1331 //________________________________________________________
1332 TList * AliAnaParticleIsolation::GetCreateOutputObjects()
1334 // Create histograms to be saved in output file and
1335 // store them in outputContainer
1336 TList * outputContainer = new TList() ;
1337 outputContainer->SetName("IsolatedParticleHistos") ;
1339 Int_t nptbins = GetHistogramRanges()->GetHistoPtBins();
1340 Int_t nphibins = GetHistogramRanges()->GetHistoPhiBins();
1341 Int_t netabins = GetHistogramRanges()->GetHistoEtaBins();
1342 Float_t ptmax = GetHistogramRanges()->GetHistoPtMax();
1343 Float_t phimax = GetHistogramRanges()->GetHistoPhiMax();
1344 Float_t etamax = GetHistogramRanges()->GetHistoEtaMax();
1345 Float_t ptmin = GetHistogramRanges()->GetHistoPtMin();
1346 Float_t phimin = GetHistogramRanges()->GetHistoPhiMin();
1347 Float_t etamin = GetHistogramRanges()->GetHistoEtaMin();
1348 Int_t ssbins = GetHistogramRanges()->GetHistoShowerShapeBins();
1349 Float_t ssmax = GetHistogramRanges()->GetHistoShowerShapeMax();
1350 Float_t ssmin = GetHistogramRanges()->GetHistoShowerShapeMin();
1351 Int_t ntimebins= GetHistogramRanges()->GetHistoTimeBins();
1352 Float_t timemax = GetHistogramRanges()->GetHistoTimeMax();
1353 Float_t timemin = GetHistogramRanges()->GetHistoTimeMin();
1355 Int_t nresetabins = GetHistogramRanges()->GetHistoTrackResidualEtaBins();
1356 Float_t resetamax = GetHistogramRanges()->GetHistoTrackResidualEtaMax();
1357 Float_t resetamin = GetHistogramRanges()->GetHistoTrackResidualEtaMin();
1358 Int_t nresphibins = GetHistogramRanges()->GetHistoTrackResidualPhiBins();
1359 Float_t resphimax = GetHistogramRanges()->GetHistoTrackResidualPhiMax();
1360 Float_t resphimin = GetHistogramRanges()->GetHistoTrackResidualPhiMin();
1362 Int_t ndedxbins = GetHistogramRanges()->GetHistodEdxBins();
1363 Float_t dedxmax = GetHistogramRanges()->GetHistodEdxMax();
1364 Float_t dedxmin = GetHistogramRanges()->GetHistodEdxMin();
1365 Int_t nPoverEbins = GetHistogramRanges()->GetHistoPOverEBins();
1366 Float_t pOverEmax = GetHistogramRanges()->GetHistoPOverEMax();
1367 Float_t pOverEmin = GetHistogramRanges()->GetHistoPOverEMin();
1369 Int_t nptsumbins = GetHistogramRanges()->GetHistoNPtSumBins();
1370 Float_t ptsummax = GetHistogramRanges()->GetHistoPtSumMax();
1371 Float_t ptsummin = GetHistogramRanges()->GetHistoPtSumMin();
1372 Int_t nptinconebins = GetHistogramRanges()->GetHistoNPtInConeBins();
1373 Float_t ptinconemax = GetHistogramRanges()->GetHistoPtInConeMax();
1374 Float_t ptinconemin = GetHistogramRanges()->GetHistoPtInConeMin();
1376 //Float_t ptthre = GetIsolationCut()->GetPtThreshold();
1377 //Float_t ptsumthre = GetIsolationCut()->GetSumPtThreshold();
1378 //Float_t ptfrac = GetIsolationCut()->GetPtFraction();
1379 Float_t r = GetIsolationCut()->GetConeSize();
1380 Int_t method = GetIsolationCut()->GetICMethod() ;
1381 Int_t particle = GetIsolationCut()->GetParticleTypeInCone() ;
1383 TString sThreshold = "";
1384 if ( method == AliIsolationCut::kSumPtIC )
1386 sThreshold = Form(", %2.2f < #Sigma #it{p}_{T}^{in cone} < %2.2f GeV/#it{c}",
1387 GetIsolationCut()->GetSumPtThreshold(), GetIsolationCut()->GetSumPtThresholdMax());
1388 if(GetIsolationCut()->GetSumPtThresholdMax() > 200)
1389 sThreshold = Form(", #Sigma #it{p}_{T}^{in cone} = %2.2f GeV/#it{c}",
1390 GetIsolationCut()->GetSumPtThreshold());
1392 else if ( method == AliIsolationCut::kPtThresIC)
1394 sThreshold = Form(", %2.2f < #it{p}_{T}^{th} < %2.2f GeV/#it{c}",
1395 GetIsolationCut()->GetPtThreshold(),GetIsolationCut()->GetPtThresholdMax());
1396 if(GetIsolationCut()->GetSumPtThreshold() > 200)
1397 sThreshold = Form(", #it{p}_{T}^{th} = %2.2f GeV/#it{c}",
1398 GetIsolationCut()->GetPtThreshold());
1400 else if ( method == AliIsolationCut::kPtFracIC)
1401 sThreshold = Form(", #Sigma #it{p}_{T}^{in cone}/#it{p}_{T}^{trig} = %2.2f" ,
1402 GetIsolationCut()->GetPtFraction());
1404 TString sParticle = ", x^{0,#pm}";
1405 if ( particle == AliIsolationCut::kOnlyNeutral ) sParticle = ", x^{0}";
1406 else if ( particle == AliIsolationCut::kOnlyCharged ) sParticle = ", x^{#pm}";
1408 TString parTitle = Form("#it{R} = %2.2f%s%s",GetIsolationCut()->GetConeSize(), sThreshold.Data(),sParticle.Data());
1410 TString pileUpName[] = {"SPD","EMCAL","SPDOrEMCAL","SPDAndEMCAL","SPDAndNotEMCAL","EMCALAndNotSPD","NotSPDAndNotEMCAL"} ;
1412 // MC histograms title and name
1413 TString mcPartType[] = { "#gamma", "#gamma_{prompt}", "#gamma_{fragmentation}",
1414 "#pi^{0} (merged #gamma)","#gamma_{#pi decay}",
1415 "#gamma_{#eta decay}","#gamma_{other decay}",
1416 "e^{#pm}","hadrons?"} ;
1418 TString mcPartName[] = { "Photon","PhotonPrompt","PhotonFrag",
1419 "Pi0","Pi0Decay","EtaDecay","OtherDecay",
1420 "Electron","Hadron"} ;
1422 // Primary MC histograms title and name
1423 TString pptype[] = { "#gamma", "#gamma_{#pi decay}","#gamma_{other decay}",
1424 "#gamma_{prompt}","#gamma_{fragmentation}","#gamma_{ISR}"} ;
1426 TString ppname[] = { "Photon","PhotonPi0Decay","PhotonOtherDecay",
1427 "PhotonPrompt","PhotonFrag","PhotonISR"} ;
1429 // Not Isolated histograms, reference histograms
1431 fhENoIso = new TH1F("hENoIso",
1432 Form("Number of not isolated leading particles vs #it{p}_{T}, %s",parTitle.Data()),
1433 nptbins,ptmin,ptmax);
1434 fhENoIso->SetYTitle("#it{counts}");
1435 fhENoIso->SetXTitle("E (GeV/#it{c})");
1436 outputContainer->Add(fhENoIso) ;
1438 fhPtNoIso = new TH1F("hPtNoIso",
1439 Form("Number of not isolated leading particles vs #it{p}_{T}, %s",parTitle.Data()),
1440 nptbins,ptmin,ptmax);
1441 fhPtNoIso->SetYTitle("#it{counts}");
1442 fhPtNoIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1443 outputContainer->Add(fhPtNoIso) ;
1445 fhEtaPhiNoIso = new TH2F("hEtaPhiNoIso",
1446 Form("Number of not isolated leading particles #eta vs #phi, %s",parTitle.Data()),
1447 netabins,etamin,etamax,nphibins,phimin,phimax);
1448 fhEtaPhiNoIso->SetXTitle("#eta");
1449 fhEtaPhiNoIso->SetYTitle("#phi");
1450 outputContainer->Add(fhEtaPhiNoIso) ;
1454 // For histograms in arrays, index in the array, corresponding to any particle origin
1456 for(Int_t imc = 0; imc < 9; imc++)
1459 fhPtNoIsoMC[imc] = new TH1F(Form("hPtNoIsoMC%s",mcPartName[imc].Data()),
1460 Form("#it{p}_{T} of NOT isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
1461 nptbins,ptmin,ptmax);
1462 fhPtNoIsoMC[imc]->SetYTitle("#it{counts}");
1463 fhPtNoIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1464 outputContainer->Add(fhPtNoIsoMC[imc]) ;
1466 fhPtIsoMC[imc] = new TH1F(Form("hPtMC%s",mcPartName[imc].Data()),
1467 Form("#it{p}_{T} of isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
1468 nptbins,ptmin,ptmax);
1469 fhPtIsoMC[imc]->SetYTitle("#it{counts}");
1470 fhPtIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1471 outputContainer->Add(fhPtIsoMC[imc]) ;
1473 fhPhiIsoMC[imc] = new TH2F(Form("hPhiMC%s",mcPartName[imc].Data()),
1474 Form("#phi vs #it{p}_{T} of isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
1475 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
1476 fhPhiIsoMC[imc]->SetYTitle("#phi");
1477 fhPhiIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1478 outputContainer->Add(fhPhiIsoMC[imc]) ;
1480 fhEtaIsoMC[imc] = new TH2F(Form("hEtaMC%s",mcPartName[imc].Data()),
1481 Form("#phi vs #it{p}_{T} of isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
1482 nptbins,ptmin,ptmax,netabins,etamin,etamax);
1483 fhEtaIsoMC[imc]->SetYTitle("#eta");
1484 fhEtaIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1485 outputContainer->Add(fhEtaIsoMC[imc]) ;
1489 // Histograms for tagged candidates as decay
1490 if(fFillTaggedDecayHistograms)
1492 for(Int_t ibit = 0; ibit < fNDecayBits; ibit++)
1494 fhPtDecayNoIso[ibit] =
1495 new TH1F(Form("hPtDecayNoIso_bit%d",fDecayBits[ibit]),
1496 Form("Number of not isolated leading pi0 decay particles vs #it{p}_{T}, bit %d, %s",fDecayBits[ibit],parTitle.Data()),
1497 nptbins,ptmin,ptmax);
1498 fhPtDecayNoIso[ibit]->SetYTitle("#it{counts}");
1499 fhPtDecayNoIso[ibit]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1500 outputContainer->Add(fhPtDecayNoIso[ibit]) ;
1502 fhEtaPhiDecayNoIso[ibit] =
1503 new TH2F(Form("hEtaPhiDecayNoIso_bit%d",fDecayBits[ibit]),
1504 Form("Number of not isolated leading Pi0 decay particles #eta vs #phi, bit %d, %s",fDecayBits[ibit],parTitle.Data()),
1505 netabins,etamin,etamax,nphibins,phimin,phimax);
1506 fhEtaPhiDecayNoIso[ibit]->SetXTitle("#eta");
1507 fhEtaPhiDecayNoIso[ibit]->SetYTitle("#phi");
1508 outputContainer->Add(fhEtaPhiDecayNoIso[ibit]) ;
1512 fhPtDecayIso[ibit] =
1513 new TH1F(Form("hPtDecayIso_bit%d",fDecayBits[ibit]),
1514 Form("Number of isolated #pi^{0} decay particles vs #it{p}_{T}, bit %d, %s",fDecayBits[ibit],parTitle.Data()),
1515 nptbins,ptmin,ptmax);
1516 fhPtDecayIso[ibit]->SetYTitle("#it{counts}");
1517 fhPtDecayIso[ibit]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1518 outputContainer->Add(fhPtDecayIso[ibit]) ;
1520 fhEtaPhiDecayIso[ibit] =
1521 new TH2F(Form("hEtaPhiDecayIso_bit%d",fDecayBits[ibit]),
1522 Form("Number of isolated Pi0 decay particles #eta vs #phi, bit %d, %s",fDecayBits[ibit],parTitle.Data()),
1523 netabins,etamin,etamax,nphibins,phimin,phimax);
1524 fhEtaPhiDecayIso[ibit]->SetXTitle("#eta");
1525 fhEtaPhiDecayIso[ibit]->SetYTitle("#phi");
1526 outputContainer->Add(fhEtaPhiDecayIso[ibit]) ;
1531 for(Int_t imc = 0; imc < 9; imc++)
1534 fhPtDecayNoIsoMC[ibit][imc] =
1535 new TH1F(Form("hPtDecayNoIso_bit%d_MC%s",fDecayBits[ibit],mcPartName[imc].Data()),
1536 Form("#it{p}_{T} of NOT isolated, decay bit %d, %s, %s",fDecayBits[ibit],mcPartType[imc].Data(),parTitle.Data()),
1537 nptbins,ptmin,ptmax);
1538 fhPtDecayNoIsoMC[ibit][imc]->SetYTitle("#it{counts}");
1539 fhPtDecayNoIsoMC[ibit][imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1540 outputContainer->Add(fhPtDecayNoIsoMC[ibit][imc]) ;
1544 fhPtDecayIsoMC[ibit][imc] =
1545 new TH1F(Form("hPtDecay_bit%d_MC%s",fDecayBits[ibit],mcPartName[imc].Data()),
1546 Form("#it{p}_{T} of isolated %s, decay bit %d, %s",mcPartType[imc].Data(),fDecayBits[ibit],parTitle.Data()),
1547 nptbins,ptmin,ptmax);
1548 fhPtDecayIsoMC[ibit][imc]->SetYTitle("#it{counts}");
1549 fhPtDecayIsoMC[ibit][imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1550 outputContainer->Add(fhPtDecayIsoMC[ibit][imc]) ;
1552 }// MC particle loop
1559 TString isoName [] = {"NoIso",""};
1560 TString isoTitle[] = {"Not isolated" ,"isolated"};
1562 fhEIso = new TH1F("hE",
1563 Form("Number of isolated particles vs E, %s",parTitle.Data()),
1564 nptbins,ptmin,ptmax);
1565 fhEIso->SetYTitle("d#it{N} / d#it{E}");
1566 fhEIso->SetXTitle("#it{E} (GeV/#it{c})");
1567 outputContainer->Add(fhEIso) ;
1569 fhPtIso = new TH1F("hPt",
1570 Form("Number of isolated particles vs #it{p}_{T}, %s",parTitle.Data()),
1571 nptbins,ptmin,ptmax);
1572 fhPtIso->SetYTitle("d#it{N} / #it{p}_{T}");
1573 fhPtIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1574 outputContainer->Add(fhPtIso) ;
1576 fhPhiIso = new TH2F("hPhi",
1577 Form("Number of isolated particles vs #phi, %s",parTitle.Data()),
1578 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
1579 fhPhiIso->SetYTitle("#phi");
1580 fhPhiIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1581 outputContainer->Add(fhPhiIso) ;
1583 fhEtaIso = new TH2F("hEta",
1584 Form("Number of isolated particles vs #eta, %s",parTitle.Data()),
1585 nptbins,ptmin,ptmax,netabins,etamin,etamax);
1586 fhEtaIso->SetYTitle("#eta");
1587 fhEtaIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1588 outputContainer->Add(fhEtaIso) ;
1590 fhEtaPhiIso = new TH2F("hEtaPhiIso",
1591 Form("Number of isolated particles #eta vs #phi, %s",parTitle.Data()),
1592 netabins,etamin,etamax,nphibins,phimin,phimax);
1593 fhEtaPhiIso->SetXTitle("#eta");
1594 fhEtaPhiIso->SetYTitle("#phi");
1595 outputContainer->Add(fhEtaPhiIso) ;
1597 if(fFillHighMultHistograms)
1599 fhPtCentralityIso = new TH2F("hPtCentrality",
1600 Form("centrality vs #it{p}_{T} for isolated particles, %s",parTitle.Data()),
1601 nptbins,ptmin,ptmax, 100,0,100);
1602 fhPtCentralityIso->SetYTitle("centrality");
1603 fhPtCentralityIso->SetXTitle("#it{p}_{T}(GeV/#it{c})");
1604 outputContainer->Add(fhPtCentralityIso) ;
1606 fhPtEventPlaneIso = new TH2F("hPtEventPlane",
1607 Form("event plane angle vs #it{p}_{T} for isolated particles, %s",parTitle.Data()),
1608 nptbins,ptmin,ptmax, 100,0,TMath::Pi());
1609 fhPtEventPlaneIso->SetYTitle("Event plane angle (rad)");
1610 fhPtEventPlaneIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1611 outputContainer->Add(fhPtEventPlaneIso) ;
1614 if(fFillNLMHistograms)
1616 fhPtNLocMaxIso = new TH2F("hPtNLocMax",
1617 Form("Number of isolated particles vs #it{p}_{T}, %s",parTitle.Data()),
1618 nptbins,ptmin,ptmax,10,0,10);
1619 fhPtNLocMaxIso->SetYTitle("#it{NLM}");
1620 fhPtNLocMaxIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1622 fhPtNLocMaxNoIso = new TH2F("hPtNLocMaxNoIso",
1623 Form("Number of not isolated particles vs #it{p}_{T}, %s",parTitle.Data()),
1624 nptbins,ptmin,ptmax,10,0,10);
1625 fhPtNLocMaxNoIso->SetYTitle("#it{NLM}");
1626 fhPtNLocMaxNoIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1627 outputContainer->Add(fhPtNLocMaxNoIso) ;
1630 fhConePtLead = new TH2F("hConePtLead",
1631 Form("Track or Cluster leading #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1632 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1633 fhConePtLead->SetYTitle("#it{p}_{T, leading} (GeV/#it{c})");
1634 fhConePtLead->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1635 outputContainer->Add(fhConePtLead) ;
1638 fhConeSumPt = new TH2F("hConePtSum",
1639 Form("Track and Cluster #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1640 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1641 fhConeSumPt->SetYTitle("#Sigma #it{p}_{T}");
1642 fhConeSumPt->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1643 outputContainer->Add(fhConeSumPt) ;
1645 fhConeSumPtTrigEtaPhi = new TH2F("hConePtSumTrigEtaPhi",
1646 Form("Trigger #eta vs #phi, #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1647 netabins,etamin,etamax,nphibins,phimin,phimax);
1648 fhConeSumPtTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1649 fhConeSumPtTrigEtaPhi->SetXTitle("#eta_{trigger}");
1650 fhConeSumPtTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1651 outputContainer->Add(fhConeSumPtTrigEtaPhi) ;
1653 fhPtInCone = new TH2F("hPtInCone",
1654 Form("#it{p}_{T} of clusters and tracks in isolation cone for #it{R} = %2.2f",r),
1655 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
1656 fhPtInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
1657 fhPtInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1658 outputContainer->Add(fhPtInCone) ;
1660 if(fFillHighMultHistograms)
1662 fhPtInConeCent = new TH2F("hPtInConeCent",
1663 Form("#it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1664 100,0,100,nptinconebins,ptinconemin,ptinconemax);
1665 fhPtInConeCent->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
1666 fhPtInConeCent->SetXTitle("centrality");
1667 outputContainer->Add(fhPtInConeCent) ;
1670 // Cluster only histograms
1671 if(GetIsolationCut()->GetParticleTypeInCone()!=AliIsolationCut::kOnlyCharged)
1673 fhConeSumPtCluster = new TH2F("hConePtSumCluster",
1674 Form("Cluster #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1675 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1676 fhConeSumPtCluster->SetYTitle("#Sigma #it{p}_{T}");
1677 fhConeSumPtCluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1678 outputContainer->Add(fhConeSumPtCluster) ;
1680 fhConePtLeadCluster = new TH2F("hConeLeadPtCluster",
1681 Form("Cluster leading in isolation cone for #it{R} = %2.2f",r),
1682 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1683 fhConePtLeadCluster->SetYTitle("#it{p}_{T, leading} (GeV/#it{c})");
1684 fhConePtLeadCluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1685 outputContainer->Add(fhConePtLeadCluster) ;
1688 if(fFillCellHistograms)
1690 fhConeSumPtCell = new TH2F("hConePtSumCell",
1691 Form("Cell #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
1692 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1693 fhConeSumPtCell->SetYTitle("#Sigma #it{p}_{T}");
1694 fhConeSumPtCell->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1695 outputContainer->Add(fhConeSumPtCell) ;
1698 if(fFillUEBandSubtractHistograms)
1700 fhConeSumPtEtaBandUECluster = new TH2F("hConePtSumEtaBandUECluster",
1701 "#Sigma cluster #it{p}_{T} in UE Eta Band",
1702 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1703 fhConeSumPtEtaBandUECluster->SetYTitle("#Sigma #it{p}_{T}");
1704 fhConeSumPtEtaBandUECluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1705 outputContainer->Add(fhConeSumPtEtaBandUECluster) ;
1707 fhConeSumPtPhiBandUECluster = new TH2F("hConePtSumPhiBandUECluster",
1708 "#Sigma cluster #it{p}_{T} UE Phi Band",
1709 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1710 fhConeSumPtPhiBandUECluster->SetYTitle("#Sigma #it{p}_{T}");
1711 fhConeSumPtPhiBandUECluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1712 outputContainer->Add(fhConeSumPtPhiBandUECluster) ;
1714 fhConeSumPtEtaBandUEClusterTrigEtaPhi = new TH2F("hConePtSumEtaBandUEClusterTrigEtaPhi",
1715 "Trigger #eta vs #phi, #Sigma cluster #it{p}_{T} in UE Eta Band",
1716 netabins,etamin,etamax,nphibins,phimin,phimax);
1717 fhConeSumPtEtaBandUEClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1718 fhConeSumPtEtaBandUEClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
1719 fhConeSumPtEtaBandUEClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1720 outputContainer->Add(fhConeSumPtEtaBandUEClusterTrigEtaPhi) ;
1722 fhConeSumPtPhiBandUEClusterTrigEtaPhi = new TH2F("hConePtSumPhiBandUEClusterTrigEtaPhi",
1723 "Trigger #eta vs #phi, #Sigma cluster #it{p}_{T} UE Phi Band",
1724 netabins,etamin,etamax,nphibins,phimin,phimax);
1725 fhConeSumPtPhiBandUEClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1726 fhConeSumPtPhiBandUEClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
1727 fhConeSumPtPhiBandUEClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1728 outputContainer->Add(fhConeSumPtPhiBandUEClusterTrigEtaPhi) ;
1729 if(fFillCellHistograms)
1732 fhConeSumPtEtaBandUECell = new TH2F("hConePtSumEtaBandUECell",
1733 "#Sigma cell #it{p}_{T} in UE Eta Band",
1734 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1735 fhConeSumPtEtaBandUECell->SetYTitle("#Sigma #it{p}_{T}");
1736 fhConeSumPtEtaBandUECell->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1737 outputContainer->Add(fhConeSumPtEtaBandUECell) ;
1739 fhConeSumPtPhiBandUECell = new TH2F("hConePtSumPhiBandUECell",
1740 "#Sigma cell #it{p}_{T} UE Phi Band",
1741 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
1742 fhConeSumPtPhiBandUECell->SetYTitle("#Sigma #it{p}_{T}");
1743 fhConeSumPtPhiBandUECell->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
1744 outputContainer->Add(fhConeSumPtPhiBandUECell) ;
1746 fhConeSumPtEtaBandUECellTrigEtaPhi = new TH2F("hConePtSumEtaBandUECellTrigEtaPhi",
1747 "Trigger #eta vs #phi, #Sigma cell #it{p}_{T} in UE Eta Band",
1748 netabins,etamin,etamax,nphibins,phimin,phimax);
1749 fhConeSumPtEtaBandUECellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1750 fhConeSumPtEtaBandUECellTrigEtaPhi->SetXTitle("#eta_{trigger}");
1751 fhConeSumPtEtaBandUECellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1752 outputContainer->Add(fhConeSumPtEtaBandUECellTrigEtaPhi) ;
1754 fhConeSumPtPhiBandUECellTrigEtaPhi = new TH2F("hConePtSumPhiBandUECellTrigEtaPhi",
1755 "Trigger #eta vs #phi, #Sigma cell #it{p}_{T} UE Phi Band",
1756 netabins,etamin,etamax,nphibins,phimin,phimax);
1757 fhConeSumPtPhiBandUECellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1758 fhConeSumPtPhiBandUECellTrigEtaPhi->SetXTitle("#eta_{trigger}");
1759 fhConeSumPtPhiBandUECellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1760 outputContainer->Add(fhConeSumPtPhiBandUECellTrigEtaPhi) ;
1763 fhEtaBandCluster = new TH2F("hEtaBandCluster",
1764 Form("#eta vs #phi of clusters in #eta band isolation cone for #it{R} = %2.2f",r),
1765 netabins,-1,1,nphibins,0,TMath::TwoPi());
1766 fhEtaBandCluster->SetXTitle("#eta");
1767 fhEtaBandCluster->SetYTitle("#phi");
1768 outputContainer->Add(fhEtaBandCluster) ;
1770 fhPhiBandCluster = new TH2F("hPhiBandCluster",
1771 Form("#eta vs #phi of clusters in #phi band isolation cone for #it{R} = %2.2f",r),
1772 netabins,-1,1,nphibins,0,TMath::TwoPi());
1773 fhPhiBandCluster->SetXTitle("#eta");
1774 fhPhiBandCluster->SetYTitle("#phi");
1775 outputContainer->Add(fhPhiBandCluster) ;
1777 fhEtaPhiInConeCluster= new TH2F("hEtaPhiInConeCluster",
1778 Form("#eta vs #phi of clusters in cone for #it{R} = %2.2f",r),
1779 netabins,-1,1,nphibins,0,TMath::TwoPi());
1780 fhEtaPhiInConeCluster->SetXTitle("#eta");
1781 fhEtaPhiInConeCluster->SetYTitle("#phi");
1782 outputContainer->Add(fhEtaPhiInConeCluster) ;
1784 fhEtaPhiCluster= new TH2F("hEtaPhiCluster",
1785 Form("#eta vs #phi of all clusters"),
1786 netabins,-1,1,nphibins,0,TMath::TwoPi());
1787 fhEtaPhiCluster->SetXTitle("#eta");
1788 fhEtaPhiCluster->SetYTitle("#phi");
1789 outputContainer->Add(fhEtaPhiCluster) ;
1793 fhPtClusterInCone = new TH2F("hPtClusterInCone",
1794 Form("#it{p}_{T} of clusters in isolation cone for #it{R} = %2.2f",r),
1795 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
1796 fhPtClusterInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
1797 fhPtClusterInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1798 outputContainer->Add(fhPtClusterInCone) ;
1800 if(fFillCellHistograms)
1802 fhPtCellInCone = new TH2F("hPtCellInCone",
1803 Form("#it{p}_{T} of cells in isolation cone for #it{R} = %2.2f",r),
1804 nptbins,ptmin,ptmax,1000,0,50);
1805 fhPtCellInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
1806 fhPtCellInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1807 outputContainer->Add(fhPtCellInCone) ;
1809 fhEtaBandCell = new TH2F("hEtaBandCell",
1810 Form("#col vs #row of cells in #eta band isolation cone for #it{R} = %2.2f",r),
1812 fhEtaBandCell->SetXTitle("#col");
1813 fhEtaBandCell->SetYTitle("#row");
1814 outputContainer->Add(fhEtaBandCell) ;
1816 fhPhiBandCell = new TH2F("hPhiBandCell",
1817 Form("#col vs #row of cells in #phi band isolation cone for #it{R} = %2.2f",r),
1819 fhPhiBandCell->SetXTitle("#col");
1820 fhPhiBandCell->SetYTitle("#row");
1821 outputContainer->Add(fhPhiBandCell) ;
1824 if(fFillUEBandSubtractHistograms)
1826 fhConeSumPtEtaUESubCluster = new TH2F("hConeSumPtEtaUESubCluster",
1827 Form("Clusters #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
1828 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1829 fhConeSumPtEtaUESubCluster->SetYTitle("#Sigma #it{p}_{T}");
1830 fhConeSumPtEtaUESubCluster->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1831 outputContainer->Add(fhConeSumPtEtaUESubCluster) ;
1833 fhConeSumPtPhiUESubCluster = new TH2F("hConeSumPtPhiUESubCluster",
1834 Form("Clusters #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
1835 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1836 fhConeSumPtPhiUESubCluster->SetYTitle("#Sigma #it{p}_{T}");
1837 fhConeSumPtPhiUESubCluster->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1838 outputContainer->Add(fhConeSumPtPhiUESubCluster) ;
1840 fhConeSumPtEtaUESubClusterTrigEtaPhi = new TH2F("hConeSumPtEtaUESubClusterTrigEtaPhi",
1841 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),
1842 netabins,etamin,etamax,nphibins,phimin,phimax);
1843 fhConeSumPtEtaUESubClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1844 fhConeSumPtEtaUESubClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
1845 fhConeSumPtEtaUESubClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1846 outputContainer->Add(fhConeSumPtEtaUESubClusterTrigEtaPhi) ;
1848 fhConeSumPtPhiUESubClusterTrigEtaPhi = new TH2F("hConeSumPtPhiUESubClusterTrigEtaPhi",
1849 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),
1850 netabins,etamin,etamax,nphibins,phimin,phimax);
1851 fhConeSumPtPhiUESubClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1852 fhConeSumPtPhiUESubClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
1853 fhConeSumPtPhiUESubClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1854 outputContainer->Add(fhConeSumPtPhiUESubClusterTrigEtaPhi) ;
1856 if(fFillCellHistograms)
1858 fhConeSumPtEtaUESubCell = new TH2F("hConeSumPtEtaUESubCell",
1859 Form("Cells #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
1860 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1861 fhConeSumPtEtaUESubCell->SetYTitle("#Sigma #it{p}_{T}");
1862 fhConeSumPtEtaUESubCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1863 outputContainer->Add(fhConeSumPtEtaUESubCell) ;
1865 fhConeSumPtPhiUESubCell = new TH2F("hConeSumPtPhiUESubCell",
1866 Form("Cells #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
1867 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
1868 fhConeSumPtPhiUESubCell->SetYTitle("#Sigma #it{p}_{T}");
1869 fhConeSumPtPhiUESubCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1870 outputContainer->Add(fhConeSumPtPhiUESubCell) ;
1872 fhConeSumPtEtaUESubCellTrigEtaPhi = new TH2F("hConeSumPtEtaUESubCellTrigEtaPhi",
1873 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),
1874 netabins,etamin,etamax,nphibins,phimin,phimax);
1875 fhConeSumPtEtaUESubCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1876 fhConeSumPtEtaUESubCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
1877 fhConeSumPtEtaUESubCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1878 outputContainer->Add(fhConeSumPtEtaUESubCellTrigEtaPhi) ;
1880 fhConeSumPtPhiUESubCellTrigEtaPhi = new TH2F("hConeSumPtPhiUESubCellTrigEtaPhi",
1881 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),
1882 netabins,etamin,etamax,nphibins,phimin,phimax);
1883 fhConeSumPtPhiUESubCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
1884 fhConeSumPtPhiUESubCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
1885 fhConeSumPtPhiUESubCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1886 outputContainer->Add(fhConeSumPtPhiUESubCellTrigEtaPhi) ;
1889 fhFractionClusterOutConeEta = new TH2F("hFractionClusterOutConeEta",
1890 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #eta acceptance",r),
1891 nptbins,ptmin,ptmax,100,0,1);
1892 fhFractionClusterOutConeEta->SetYTitle("#it{fraction}");
1893 fhFractionClusterOutConeEta->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
1894 outputContainer->Add(fhFractionClusterOutConeEta) ;
1896 fhFractionClusterOutConeEtaTrigEtaPhi = new TH2F("hFractionClusterOutConeEtaTrigEtaPhi",
1897 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #eta acceptance, in trigger #eta-#phi ",r),
1898 netabins,etamin,etamax,nphibins,phimin,phimax);
1899 fhFractionClusterOutConeEtaTrigEtaPhi->SetZTitle("#it{fraction}");
1900 fhFractionClusterOutConeEtaTrigEtaPhi->SetXTitle("#eta_{trigger}");
1901 fhFractionClusterOutConeEtaTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1902 outputContainer->Add(fhFractionClusterOutConeEtaTrigEtaPhi) ;
1904 fhFractionClusterOutConePhi = new TH2F("hFractionClusterOutConePhi",
1905 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #phi acceptance",r),
1906 nptbins,ptmin,ptmax,100,0,1);
1907 fhFractionClusterOutConePhi->SetYTitle("#it{fraction}");
1908 fhFractionClusterOutConePhi->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
1909 outputContainer->Add(fhFractionClusterOutConePhi) ;
1911 fhFractionClusterOutConePhiTrigEtaPhi = new TH2F("hFractionClusterOutConePhiTrigEtaPhi",
1912 Form("Fraction of the isolation cone #it{R} = %2.2f, out of clusters #phi acceptance, in trigger #eta-#phi ",r),
1913 netabins,etamin,etamax,nphibins,phimin,phimax);
1914 fhFractionClusterOutConePhiTrigEtaPhi->SetZTitle("#it{fraction}");
1915 fhFractionClusterOutConePhiTrigEtaPhi->SetXTitle("#eta_{trigger}");
1916 fhFractionClusterOutConePhiTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1917 outputContainer->Add(fhFractionClusterOutConePhiTrigEtaPhi) ;
1919 fhConeSumPtSubvsConeSumPtTotPhiCluster = new TH2F("hConeSumPtSubvsConeSumPtTotPhiCluster",
1920 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),
1921 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1922 fhConeSumPtSubvsConeSumPtTotPhiCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1923 fhConeSumPtSubvsConeSumPtTotPhiCluster->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
1924 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotPhiCluster);
1926 fhConeSumPtSubNormvsConeSumPtTotPhiCluster = new TH2F("hConeSumPtSubNormvsConeSumPtTotPhiCluster",
1927 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),
1928 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1929 fhConeSumPtSubNormvsConeSumPtTotPhiCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1930 fhConeSumPtSubNormvsConeSumPtTotPhiCluster->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
1931 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotPhiCluster);
1933 fhConeSumPtSubvsConeSumPtTotEtaCluster = new TH2F("hConeSumPtSubvsConeSumPtTotEtaCluster",
1934 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),
1935 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1936 fhConeSumPtSubvsConeSumPtTotEtaCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1937 fhConeSumPtSubvsConeSumPtTotEtaCluster->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
1938 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotEtaCluster);
1940 fhConeSumPtSubNormvsConeSumPtTotEtaCluster = new TH2F("hConeSumPtSubNormvsConeSumPtTotEtaCluster",
1941 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),
1942 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1943 fhConeSumPtSubNormvsConeSumPtTotEtaCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1944 fhConeSumPtSubNormvsConeSumPtTotEtaCluster->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
1945 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotEtaCluster);
1947 fhConeSumPtVSUEClusterEtaBand = new TH2F("hConeSumPtVSUEClusterEtaBand",
1948 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in eta band for cluster (before normalization), R=%2.2f",r),
1949 nptsumbins,ptsummin,ptsummax,2*nptsumbins,ptsummin,2*ptsummax);
1950 fhConeSumPtVSUEClusterEtaBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
1951 fhConeSumPtVSUEClusterEtaBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
1952 outputContainer->Add(fhConeSumPtVSUEClusterEtaBand);
1954 fhConeSumPtVSUEClusterPhiBand = new TH2F("hConeSumPtVSUEClusterPhiBand",
1955 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in phi band for cluster (before normalization), R=%2.2f",r),
1956 nptsumbins,ptsummin,ptsummax,8*nptsumbins,ptsummin,8*ptsummax);
1957 fhConeSumPtVSUEClusterPhiBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
1958 fhConeSumPtVSUEClusterPhiBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
1959 outputContainer->Add(fhConeSumPtVSUEClusterPhiBand);
1961 if(fFillCellHistograms)
1963 fhFractionCellOutConeEta = new TH2F("hFractionCellOutConeEta",
1964 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #eta acceptance",r),
1965 nptbins,ptmin,ptmax,100,0,1);
1966 fhFractionCellOutConeEta->SetYTitle("#it{fraction}");
1967 fhFractionCellOutConeEta->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
1968 outputContainer->Add(fhFractionCellOutConeEta) ;
1970 fhFractionCellOutConeEtaTrigEtaPhi = new TH2F("hFractionCellOutConeEtaTrigEtaPhi",
1971 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #eta acceptance, in trigger #eta-#phi ",r),
1972 netabins,etamin,etamax,nphibins,phimin,phimax);
1973 fhFractionCellOutConeEtaTrigEtaPhi->SetZTitle("#it{fraction}");
1974 fhFractionCellOutConeEtaTrigEtaPhi->SetXTitle("#eta_{trigger}");
1975 fhFractionCellOutConeEtaTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1976 outputContainer->Add(fhFractionCellOutConeEtaTrigEtaPhi) ;
1978 fhFractionCellOutConePhi = new TH2F("hFractionCellOutConePhi",
1979 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #phi acceptance",r),
1980 nptbins,ptmin,ptmax,100,0,1);
1981 fhFractionCellOutConePhi->SetYTitle("#it{fraction}");
1982 fhFractionCellOutConePhi->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
1983 outputContainer->Add(fhFractionCellOutConePhi) ;
1985 fhFractionCellOutConePhiTrigEtaPhi = new TH2F("hFractionCellOutConePhiTrigEtaPhi",
1986 Form("Fraction of the isolation cone #it{R} = %2.2f, out of cells #phi acceptance, in trigger #eta-#phi ",r),
1987 netabins,etamin,etamax,nphibins,phimin,phimax);
1988 fhFractionCellOutConePhiTrigEtaPhi->SetZTitle("#it{fraction}");
1989 fhFractionCellOutConePhiTrigEtaPhi->SetXTitle("#eta_{trigger}");
1990 fhFractionCellOutConePhiTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
1991 outputContainer->Add(fhFractionCellOutConePhiTrigEtaPhi) ;
1994 fhConeSumPtSubvsConeSumPtTotPhiCell = new TH2F("hConeSumPtSubvsConeSumPtTotPhiCell",
1995 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),
1996 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
1997 fhConeSumPtSubvsConeSumPtTotPhiCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
1998 fhConeSumPtSubvsConeSumPtTotPhiCell->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
1999 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotPhiCell);
2001 fhConeSumPtSubNormvsConeSumPtTotPhiCell = new TH2F("hConeSumPtSubNormvsConeSumPtTotPhiCell",
2002 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),
2003 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2004 fhConeSumPtSubNormvsConeSumPtTotPhiCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2005 fhConeSumPtSubNormvsConeSumPtTotPhiCell->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2006 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotPhiCell);
2008 fhConeSumPtSubvsConeSumPtTotEtaCell = new TH2F("hConeSumPtSubvsConeSumPtTotEtaCell",
2009 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),
2010 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2011 fhConeSumPtSubvsConeSumPtTotEtaCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2012 fhConeSumPtSubvsConeSumPtTotEtaCell->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
2013 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotEtaCell);
2015 fhConeSumPtSubNormvsConeSumPtTotEtaCell = new TH2F("hConeSumPtSubNormvsConeSumPtTotEtaCell",
2016 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),
2017 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2018 fhConeSumPtSubNormvsConeSumPtTotEtaCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2019 fhConeSumPtSubNormvsConeSumPtTotEtaCell->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2020 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotEtaCell);
2025 // Track only histograms
2026 if(GetIsolationCut()->GetParticleTypeInCone()!=AliIsolationCut::kOnlyNeutral)
2028 fhConeSumPtTrack = new TH2F("hConePtSumTrack",
2029 Form("Track #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2030 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2031 fhConeSumPtTrack->SetYTitle("#Sigma #it{p}_{T}");
2032 fhConeSumPtTrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2033 outputContainer->Add(fhConeSumPtTrack) ;
2035 fhConePtLeadTrack = new TH2F("hConeLeadPtTrack",
2036 Form("Track leading in isolation cone for #it{R} = %2.2f",r),
2037 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2038 fhConePtLeadTrack->SetYTitle("#it{p}_{T, leading} (GeV/#it{c})");
2039 fhConePtLeadTrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2040 outputContainer->Add(fhConePtLeadTrack) ;
2042 fhPtTrackInCone = new TH2F("hPtTrackInCone",
2043 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f",r),
2044 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2045 fhPtTrackInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2046 fhPtTrackInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2047 outputContainer->Add(fhPtTrackInCone) ;
2050 if(fFillUEBandSubtractHistograms)
2052 fhConeSumPtEtaBandUETrack = new TH2F("hConePtSumEtaBandUETrack",
2053 "#Sigma track #it{p}_{T} in UE Eta Band",
2054 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2055 fhConeSumPtEtaBandUETrack->SetYTitle("#Sigma #it{p}_{T}");
2056 fhConeSumPtEtaBandUETrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2057 outputContainer->Add(fhConeSumPtEtaBandUETrack) ;
2059 fhConeSumPtPhiBandUETrack = new TH2F("hConePtSumPhiBandUETrack",
2060 "#Sigma track #it{p}_{T} in UE Phi Band",
2061 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax*8);
2062 fhConeSumPtPhiBandUETrack->SetYTitle("#Sigma #it{p}_{T}");
2063 fhConeSumPtPhiBandUETrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2064 outputContainer->Add(fhConeSumPtPhiBandUETrack) ;
2067 fhConeSumPtEtaBandUETrackTrigEtaPhi = new TH2F("hConePtSumEtaBandUETrackTrigEtaPhi",
2068 "Trigger #eta vs #phi, #Sigma track #it{p}_{T} in UE Eta Band",
2069 netabins,etamin,etamax,nphibins,phimin,phimax);
2070 fhConeSumPtEtaBandUETrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2071 fhConeSumPtEtaBandUETrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2072 fhConeSumPtEtaBandUETrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2073 outputContainer->Add(fhConeSumPtEtaBandUETrackTrigEtaPhi) ;
2075 fhConeSumPtPhiBandUETrackTrigEtaPhi = new TH2F("hConePtSumPhiBandUETrackTrigEtaPhi",
2076 "Trigger #eta vs #phi, #Sigma track #it{p}_{T} in UE Phi Band",
2077 netabins,etamin,etamax,nphibins,phimin,phimax);
2078 fhConeSumPtPhiBandUETrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2079 fhConeSumPtPhiBandUETrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2080 fhConeSumPtPhiBandUETrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2081 outputContainer->Add(fhConeSumPtPhiBandUETrackTrigEtaPhi) ;
2083 fhEtaBandTrack = new TH2F("hEtaBandTrack",
2084 Form("#eta vs #phi of tracks in #eta band isolation cone for #it{R} = %2.2f",r),
2085 netabins,-1,1,nphibins,0,TMath::TwoPi());
2086 fhEtaBandTrack->SetXTitle("#eta");
2087 fhEtaBandTrack->SetYTitle("#phi");
2088 outputContainer->Add(fhEtaBandTrack) ;
2090 fhPhiBandTrack = new TH2F("hPhiBandTrack",
2091 Form("#eta vs #phi of tracks in #phi band isolation cone for #it{R} = %2.2f",r),
2092 netabins,-1,1,nphibins,0,TMath::TwoPi());
2093 fhPhiBandTrack->SetXTitle("#eta");
2094 fhPhiBandTrack->SetYTitle("#phi");
2095 outputContainer->Add(fhPhiBandTrack) ;
2097 fhConeSumPtEtaUESubTrack = new TH2F("hConeSumPtEtaUESubTrack",
2098 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
2099 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2100 fhConeSumPtEtaUESubTrack->SetYTitle("#Sigma #it{p}_{T}");
2101 fhConeSumPtEtaUESubTrack->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2102 outputContainer->Add(fhConeSumPtEtaUESubTrack) ;
2104 fhConeSumPtPhiUESubTrack = new TH2F("hConeSumPtPhiUESubTrack",
2105 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
2106 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2107 fhConeSumPtPhiUESubTrack->SetYTitle("#Sigma #it{p}_{T}");
2108 fhConeSumPtPhiUESubTrack->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2109 outputContainer->Add(fhConeSumPtPhiUESubTrack) ;
2111 fhConeSumPtEtaUESubTrackTrigEtaPhi = new TH2F("hConeSumPtEtaUESubTrackTrigEtaPhi",
2112 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),
2113 netabins,etamin,etamax,nphibins,phimin,phimax);
2114 fhConeSumPtEtaUESubTrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2115 fhConeSumPtEtaUESubTrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2116 fhConeSumPtEtaUESubTrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2117 outputContainer->Add(fhConeSumPtEtaUESubTrackTrigEtaPhi) ;
2119 fhConeSumPtPhiUESubTrackTrigEtaPhi = new TH2F("hConeSumPtPhiUESubTrackTrigEtaPhi",
2120 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),
2121 netabins,etamin,etamax,nphibins,phimin,phimax);
2122 fhConeSumPtPhiUESubTrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2123 fhConeSumPtPhiUESubTrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2124 fhConeSumPtPhiUESubTrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2125 outputContainer->Add(fhConeSumPtPhiUESubTrackTrigEtaPhi) ;
2127 fhFractionTrackOutConeEta = new TH2F("hFractionTrackOutConeEta",
2128 Form("Fraction of the isolation cone #it{R} = %2.2f, out of tracks #eta acceptance",r),
2129 nptbins,ptmin,ptmax,100,0,1);
2130 fhFractionTrackOutConeEta->SetYTitle("#it{fraction}");
2131 fhFractionTrackOutConeEta->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
2132 outputContainer->Add(fhFractionTrackOutConeEta) ;
2134 fhFractionTrackOutConeEtaTrigEtaPhi = new TH2F("hFractionTrackOutConeEtaTrigEtaPhi",
2135 Form("Fraction of the isolation cone #it{R} = %2.2f, out of tracks #eta acceptance, in trigger #eta-#phi ",r),
2136 netabins,etamin,etamax,nphibins,phimin,phimax);
2137 fhFractionTrackOutConeEtaTrigEtaPhi->SetZTitle("#it{fraction}");
2138 fhFractionTrackOutConeEtaTrigEtaPhi->SetXTitle("#eta_{trigger}");
2139 fhFractionTrackOutConeEtaTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2140 outputContainer->Add(fhFractionTrackOutConeEtaTrigEtaPhi) ;
2142 fhConeSumPtSubvsConeSumPtTotPhiTrack = new TH2F("hConeSumPtSubvsConeSumPtTotPhiTrack",
2143 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),
2144 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2145 fhConeSumPtSubvsConeSumPtTotPhiTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2146 fhConeSumPtSubvsConeSumPtTotPhiTrack->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
2147 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotPhiTrack);
2149 fhConeSumPtSubNormvsConeSumPtTotPhiTrack = new TH2F("hConeSumPtSubNormvsConeSumPtTotPhiTrack",
2150 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),
2151 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2152 fhConeSumPtSubNormvsConeSumPtTotPhiTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2153 fhConeSumPtSubNormvsConeSumPtTotPhiTrack->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2154 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotPhiTrack);
2156 fhConeSumPtSubvsConeSumPtTotEtaTrack = new TH2F("hConeSumPtSubvsConeSumPtTotEtaTrack",
2157 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),
2158 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2159 fhConeSumPtSubvsConeSumPtTotEtaTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2160 fhConeSumPtSubvsConeSumPtTotEtaTrack->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
2161 outputContainer->Add(fhConeSumPtSubvsConeSumPtTotEtaTrack);
2163 fhConeSumPtSubNormvsConeSumPtTotEtaTrack = new TH2F("hConeSumPtSubNormvsConeSumPtTotEtaTrack",
2164 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),
2165 nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2166 fhConeSumPtSubNormvsConeSumPtTotEtaTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
2167 fhConeSumPtSubNormvsConeSumPtTotEtaTrack->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
2168 outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotEtaTrack);
2171 // UE in perpendicular cone
2172 fhPerpConeSumPt = new TH2F("hPerpConePtSum",
2173 Form("#Sigma #it{p}_{T} in isolation cone at #pm 45 degree phi from trigger particle, #it{R} = %2.2f",r),
2174 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2175 fhPerpConeSumPt->SetYTitle("#Sigma #it{p}_{T}");
2176 fhPerpConeSumPt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2177 outputContainer->Add(fhPerpConeSumPt) ;
2179 fhPtInPerpCone = new TH2F("hPtInPerpCone",
2180 Form("#it{p}_{T} in isolation cone at #pm 45 degree phi from trigger particle, #it{R} = %2.2f",r),
2181 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2182 fhPtInPerpCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2183 fhPtInPerpCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2184 outputContainer->Add(fhPtInPerpCone) ;
2186 fhEtaPhiTrack= new TH2F("hEtaPhiTrack",
2187 Form("#eta vs #phi of all Tracks"),
2188 netabins,-1,1,nphibins,0,TMath::TwoPi());
2189 fhEtaPhiTrack->SetXTitle("#eta");
2190 fhEtaPhiTrack->SetYTitle("#phi");
2191 outputContainer->Add(fhEtaPhiTrack) ;
2193 fhEtaPhiInConeTrack= new TH2F("hEtaPhiInConeTrack",
2194 Form("#eta vs #phi of Tracks in cone for #it{R} = %2.2f",r),
2195 netabins,-1,1,nphibins,0,TMath::TwoPi());
2196 fhEtaPhiInConeTrack->SetXTitle("#eta");
2197 fhEtaPhiInConeTrack->SetYTitle("#phi");
2198 outputContainer->Add(fhEtaPhiInConeTrack) ;
2200 fhConeSumPtVSUETracksEtaBand = new TH2F("hConeSumPtVSUETracksEtaBand",
2201 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in eta band for tracks (before normalization), R=%2.2f",r),
2202 nptsumbins,ptsummin,ptsummax,2*nptsumbins,ptsummin,2*ptsummax);
2203 fhConeSumPtVSUETracksEtaBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
2204 fhConeSumPtVSUETracksEtaBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
2205 outputContainer->Add(fhConeSumPtVSUETracksEtaBand);
2207 fhConeSumPtVSUETracksPhiBand = new TH2F("hConeSumPtVSUETracksPhiBand",
2208 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in phi band for tracks (before normalization), R=%2.2f",r),
2209 nptsumbins,ptsummin,ptsummax,8*nptsumbins,ptsummin,8*ptsummax);
2210 fhConeSumPtVSUETracksPhiBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
2211 fhConeSumPtVSUETracksPhiBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
2212 outputContainer->Add(fhConeSumPtVSUETracksPhiBand);
2216 if(GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kNeutralAndCharged )
2218 fhConeSumPtClustervsTrack = new TH2F("hConePtSumClustervsTrack",
2219 Form("Track vs Cluster #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2220 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2221 fhConeSumPtClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2222 fhConeSumPtClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2223 outputContainer->Add(fhConeSumPtClustervsTrack) ;
2225 if(fFillCellHistograms)
2227 fhConeSumPtCellvsTrack = new TH2F("hConePtSumCellvsTrack",
2228 Form("Track vs cell #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2229 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2230 fhConeSumPtCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2231 fhConeSumPtCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2232 outputContainer->Add(fhConeSumPtCellvsTrack) ;
2234 fhConeSumPtCellTrack = new TH2F("hConePtSumCellTrack",
2235 Form("Track and Cell #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2236 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2237 fhConeSumPtCellTrack->SetYTitle("#Sigma #it{p}_{T}");
2238 fhConeSumPtCellTrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
2239 outputContainer->Add(fhConeSumPtCellTrack) ;
2241 fhConeSumPtCellTrackTrigEtaPhi = new TH2F("hConePtSumCellTrackTrigEtaPhi",
2242 Form("Trigger #eta vs #phi, #Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",r),
2243 netabins,etamin,etamax,nphibins,phimin,phimax);
2244 fhConeSumPtCellTrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2245 fhConeSumPtCellTrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
2246 fhConeSumPtCellTrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2247 outputContainer->Add(fhConeSumPtCellTrackTrigEtaPhi) ;
2251 if(fFillUEBandSubtractHistograms)
2253 fhConeSumPtEtaUESub = new TH2F("hConeSumPtEtaUESub",
2254 Form("#Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
2255 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2256 fhConeSumPtEtaUESub->SetYTitle("#Sigma #it{p}_{T}");
2257 fhConeSumPtEtaUESub->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2258 outputContainer->Add(fhConeSumPtEtaUESub) ;
2260 fhConeSumPtPhiUESub = new TH2F("hConeSumPtPhiUESub",
2261 Form("#Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
2262 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2263 fhConeSumPtPhiUESub->SetYTitle("#Sigma #it{p}_{T}");
2264 fhConeSumPtPhiUESub->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2265 outputContainer->Add(fhConeSumPtPhiUESub) ;
2267 fhConeSumPtEtaUESubTrigEtaPhi = new TH2F("hConeSumPtEtaUESubTrigEtaPhi",
2268 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),
2269 netabins,etamin,etamax,nphibins,phimin,phimax);
2270 fhConeSumPtEtaUESubTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2271 fhConeSumPtEtaUESubTrigEtaPhi->SetXTitle("#eta_{trigger}");
2272 fhConeSumPtEtaUESubTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2273 outputContainer->Add(fhConeSumPtEtaUESubTrigEtaPhi) ;
2275 fhConeSumPtPhiUESubTrigEtaPhi = new TH2F("hConeSumPtPhiUESubTrigEtaPhi",
2276 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),
2277 netabins,etamin,etamax,nphibins,phimin,phimax);
2278 fhConeSumPtPhiUESubTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2279 fhConeSumPtPhiUESubTrigEtaPhi->SetXTitle("#eta_{trigger}");
2280 fhConeSumPtPhiUESubTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2281 outputContainer->Add(fhConeSumPtPhiUESubTrigEtaPhi) ;
2283 fhConeSumPtEtaUESubClustervsTrack = new TH2F("hConePtSumEtaUESubClustervsTrack",
2284 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub eta band in isolation cone for #it{R} = %2.2f",r),
2285 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2286 fhConeSumPtEtaUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2287 fhConeSumPtEtaUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2288 outputContainer->Add(fhConeSumPtEtaUESubClustervsTrack) ;
2290 fhConeSumPtPhiUESubClustervsTrack = new TH2F("hConePhiUESubPtSumClustervsTrack",
2291 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub phi band in isolation cone for #it{R} = %2.2f",r),
2292 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2293 fhConeSumPtPhiUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2294 fhConeSumPtPhiUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2295 outputContainer->Add(fhConeSumPtPhiUESubClustervsTrack) ;
2297 fhEtaBandClustervsTrack = new TH2F("hEtaBandClustervsTrack",
2298 Form("Track vs Cluster #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2299 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2300 fhEtaBandClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2301 fhEtaBandClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2302 outputContainer->Add(fhEtaBandClustervsTrack) ;
2304 fhPhiBandClustervsTrack = new TH2F("hPhiBandClustervsTrack",
2305 Form("Track vs Cluster #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2306 nptsumbins,ptsummin,ptsummax*4,nptsumbins,ptsummin,ptsummax*8);
2307 fhPhiBandClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2308 fhPhiBandClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2309 outputContainer->Add(fhPhiBandClustervsTrack) ;
2311 fhEtaBandNormClustervsTrack = new TH2F("hEtaBandNormClustervsTrack",
2312 Form("Track vs Cluster #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2313 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2314 fhEtaBandNormClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2315 fhEtaBandNormClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2316 outputContainer->Add(fhEtaBandNormClustervsTrack) ;
2318 fhPhiBandNormClustervsTrack = new TH2F("hPhiBandNormClustervsTrack",
2319 Form("Track vs Cluster #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2320 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2321 fhPhiBandNormClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2322 fhPhiBandNormClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2323 outputContainer->Add(fhPhiBandNormClustervsTrack) ;
2325 fhConeSumPtEtaUESubClustervsTrack = new TH2F("hConePtSumEtaUESubClustervsTrack",
2326 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub eta band in isolation cone for #it{R} = %2.2f",r),
2327 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2328 fhConeSumPtEtaUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2329 fhConeSumPtEtaUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2330 outputContainer->Add(fhConeSumPtEtaUESubClustervsTrack) ;
2332 fhConeSumPtPhiUESubClustervsTrack = new TH2F("hConePhiUESubPtSumClustervsTrack",
2333 Form("Track vs Cluster #Sigma #it{p}_{T} UE sub phi band in isolation cone for #it{R} = %2.2f",r),
2334 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2335 fhConeSumPtPhiUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
2336 fhConeSumPtPhiUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2337 outputContainer->Add(fhConeSumPtPhiUESubClustervsTrack) ;
2339 if(fFillCellHistograms)
2342 fhConeSumPtEtaUESubCellvsTrack = new TH2F("hConePtSumEtaUESubCellvsTrack",
2343 Form("Track vs Cell #Sigma #it{p}_{T} UE sub eta band in isolation cone for #it{R} = %2.2f",r),
2344 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2345 fhConeSumPtEtaUESubCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2346 fhConeSumPtEtaUESubCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2347 outputContainer->Add(fhConeSumPtEtaUESubCellvsTrack) ;
2349 fhConeSumPtPhiUESubCellvsTrack = new TH2F("hConePhiUESubPtSumCellvsTrack",
2350 Form("Track vs Cell #Sigma #it{p}_{T} UE sub phi band in isolation cone for #it{R} = %2.2f",r),
2351 2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
2352 fhConeSumPtPhiUESubCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2353 fhConeSumPtPhiUESubCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2354 outputContainer->Add(fhConeSumPtPhiUESubCellvsTrack) ;
2356 fhEtaBandCellvsTrack = new TH2F("hEtaBandCellvsTrack",
2357 Form("Track vs Cell #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2358 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2359 fhEtaBandCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2360 fhEtaBandCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2361 outputContainer->Add(fhEtaBandCellvsTrack) ;
2363 fhPhiBandCellvsTrack = new TH2F("hPhiBandCellvsTrack",
2364 Form("Track vs Cell #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2365 nptsumbins,ptsummin,ptsummax*4,nptsumbins,ptsummin,ptsummax*8);
2366 fhPhiBandCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2367 fhPhiBandCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2368 outputContainer->Add(fhPhiBandCellvsTrack) ;
2370 fhEtaBandNormCellvsTrack = new TH2F("hEtaBandNormCellvsTrack",
2371 Form("Track vs Cell #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} = %2.2f",r),
2372 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2373 fhEtaBandNormCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2374 fhEtaBandNormCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2375 outputContainer->Add(fhEtaBandNormCellvsTrack) ;
2377 fhPhiBandNormCellvsTrack = new TH2F("hPhiBandNormCellvsTrack",
2378 Form("Track vs Cell #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} = %2.2f",r),
2379 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
2380 fhPhiBandNormCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
2381 fhPhiBandNormCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
2382 outputContainer->Add(fhPhiBandNormCellvsTrack) ;
2384 fhConeSumPtEtaUESubTrackCell = new TH2F("hConeSumPtEtaUESubTrackCell",
2385 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} = %2.2f",r),
2386 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2387 fhConeSumPtEtaUESubTrackCell->SetYTitle("#Sigma #it{p}_{T}");
2388 fhConeSumPtEtaUESubTrackCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2389 outputContainer->Add(fhConeSumPtEtaUESubTrackCell) ;
2391 fhConeSumPtPhiUESubTrackCell = new TH2F("hConeSumPtPhiUESubTrackCell",
2392 Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} = %2.2f",r),
2393 nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
2394 fhConeSumPtPhiUESubTrackCell->SetYTitle("#Sigma #it{p}_{T}");
2395 fhConeSumPtPhiUESubTrackCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2396 outputContainer->Add(fhConeSumPtPhiUESubTrackCell) ;
2398 fhConeSumPtEtaUESubTrackCellTrigEtaPhi = new TH2F("hConeSumPtEtaUESubTrackCellTrigEtaPhi",
2399 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),
2400 netabins,etamin,etamax,nphibins,phimin,phimax);
2401 fhConeSumPtEtaUESubTrackCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2402 fhConeSumPtEtaUESubTrackCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
2403 fhConeSumPtEtaUESubTrackCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2404 outputContainer->Add(fhConeSumPtEtaUESubTrackCellTrigEtaPhi) ;
2406 fhConeSumPtPhiUESubTrackCellTrigEtaPhi = new TH2F("hConeSumPtPhiUESubTrackCellTrigEtaPhi",
2407 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),
2408 netabins,etamin,etamax,nphibins,phimin,phimax);
2409 fhConeSumPtPhiUESubTrackCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
2410 fhConeSumPtPhiUESubTrackCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
2411 fhConeSumPtPhiUESubTrackCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
2412 outputContainer->Add(fhConeSumPtPhiUESubTrackCellTrigEtaPhi) ;
2417 for(Int_t iso = 0; iso < 2; iso++)
2421 fhTrackMatchedDEta[iso] = new TH2F
2422 (Form("hTrackMatchedDEta%s",isoName[iso].Data()),
2423 Form("%s - d#eta of cluster-track vs cluster energy, %s",isoTitle[iso].Data(),parTitle.Data()),
2424 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
2425 fhTrackMatchedDEta[iso]->SetYTitle("d#eta");
2426 fhTrackMatchedDEta[iso]->SetXTitle("E_{cluster} (GeV)");
2428 fhTrackMatchedDPhi[iso] = new TH2F
2429 (Form("hTrackMatchedDPhi%s",isoName[iso].Data()),
2430 Form("%s - d#phi of cluster-track vs cluster energy, %s",isoTitle[iso].Data(),parTitle.Data()),
2431 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
2432 fhTrackMatchedDPhi[iso]->SetYTitle("d#phi (rad)");
2433 fhTrackMatchedDPhi[iso]->SetXTitle("E_{cluster} (GeV)");
2435 fhTrackMatchedDEtaDPhi[iso] = new TH2F
2436 (Form("hTrackMatchedDEtaDPhi%s",isoName[iso].Data()),
2437 Form("%s - d#eta vs d#phi of cluster-track, %s",isoTitle[iso].Data(),parTitle.Data()),
2438 nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax);
2439 fhTrackMatchedDEtaDPhi[iso]->SetYTitle("d#phi (rad)");
2440 fhTrackMatchedDEtaDPhi[iso]->SetXTitle("d#eta");
2442 outputContainer->Add(fhTrackMatchedDEta[iso]) ;
2443 outputContainer->Add(fhTrackMatchedDPhi[iso]) ;
2444 outputContainer->Add(fhTrackMatchedDEtaDPhi[iso]) ;
2446 fhdEdx[iso] = new TH2F
2447 (Form("hdEdx%s",isoName[iso].Data()),
2448 Form("%s - Matched track <d#it{E}/d#it{x}> vs cluster #it{E}, %s",isoTitle[iso].Data(),parTitle.Data()),
2449 nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
2450 fhdEdx[iso]->SetXTitle("#it{E} (GeV)");
2451 fhdEdx[iso]->SetYTitle("<d#it{E}/d#it{x}>");
2452 outputContainer->Add(fhdEdx[iso]);
2454 fhEOverP[iso] = new TH2F
2455 (Form("hEOverP%s",isoName[iso].Data()),
2456 Form("%s - Matched track #it{E}/#it{p} vs cluster, %s",isoTitle[iso].Data(),parTitle.Data()),
2457 nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
2458 fhEOverP[iso]->SetXTitle("#it{E} (GeV)");
2459 fhEOverP[iso]->SetYTitle("#it{E}/#it{p}");
2460 outputContainer->Add(fhEOverP[iso]);
2464 fhTrackMatchedMCParticle[iso] = new TH2F
2465 (Form("hTrackMatchedMCParticle%s",isoName[iso].Data()),
2466 Form("%s - Origin of particle vs cluster #it{E}, %s",isoTitle[iso].Data(),parTitle.Data()),
2467 nptbins,ptmin,ptmax,8,0,8);
2468 fhTrackMatchedMCParticle[iso]->SetXTitle("#it{E} (GeV)");
2469 //fhTrackMatchedMCParticle[iso]->SetYTitle("Particle type");
2471 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(1 ,"Photon");
2472 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(2 ,"Electron");
2473 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(3 ,"Meson Merged");
2474 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(4 ,"Rest");
2475 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(5 ,"Conv. Photon");
2476 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(6 ,"Conv. Electron");
2477 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(7 ,"Conv. Merged");
2478 fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(8 ,"Conv. Rest");
2480 outputContainer->Add(fhTrackMatchedMCParticle[iso]);
2486 fhELambda0[iso] = new TH2F
2487 (Form("hELambda0%s",isoName[iso].Data()),
2488 Form("%s cluster : #it{E} vs #lambda_{0}, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2489 fhELambda0[iso]->SetYTitle("#lambda_{0}^{2}");
2490 fhELambda0[iso]->SetXTitle("#it{E} (GeV)");
2491 outputContainer->Add(fhELambda0[iso]) ;
2493 fhELambda1[iso] = new TH2F
2494 (Form("hELambda1%s",isoName[iso].Data()),
2495 Form("%s cluster: #it{E} vs #lambda_{1}, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2496 fhELambda1[iso]->SetYTitle("#lambda_{1}^{2}");
2497 fhELambda1[iso]->SetXTitle("#it{E} (GeV)");
2498 outputContainer->Add(fhELambda1[iso]) ;
2500 fhPtLambda0[iso] = new TH2F
2501 (Form("hPtLambda0%s",isoName[iso].Data()),
2502 Form("%s cluster : #it{p}_{T} vs #lambda_{0}, %s",isoTitle[iso].Data(), parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2503 fhPtLambda0[iso]->SetYTitle("#lambda_{0}^{2}");
2504 fhPtLambda0[iso]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2505 outputContainer->Add(fhPtLambda0[iso]) ;
2509 for(Int_t imc = 0; imc < 9; imc++)
2511 fhPtLambda0MC[imc][iso] = new TH2F(Form("hPtLambda0%s_MC%s",isoName[iso].Data(),mcPartName[imc].Data()),
2512 Form("%s cluster : #it{p}_{T} vs #lambda_{0}: %s %s",isoTitle[iso].Data(),mcPartType[imc].Data(),parTitle.Data()),
2513 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2514 fhPtLambda0MC[imc][iso]->SetYTitle("#lambda_{0}^{2}");
2515 fhPtLambda0MC[imc][iso]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2516 outputContainer->Add( fhPtLambda0MC[imc][iso]) ;
2520 if(fIsoDetector=="EMCAL" && GetFirstSMCoveredByTRD() >= 0)
2522 fhPtLambda0TRD[iso] = new TH2F
2523 (Form("hPtLambda0TRD%s",isoName[iso].Data()),
2524 Form("%s cluster: #it{p}_{T} vs #lambda_{0}, SM behind TRD, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2525 fhPtLambda0TRD[iso]->SetYTitle("#lambda_{0}^{2}");
2526 fhPtLambda0TRD[iso]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2527 outputContainer->Add(fhPtLambda0TRD[iso]) ;
2529 fhELambda0TRD[iso] = new TH2F
2530 (Form("hELambda0TRD%s",isoName[iso].Data()),
2531 Form("%s cluster: #it{E} vs #lambda_{0}, SM behind TRD, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2532 fhELambda0TRD[iso]->SetYTitle("#lambda_{0}^{2}");
2533 fhELambda0TRD[iso]->SetXTitle("#it{E} (GeV)");
2534 outputContainer->Add(fhELambda0TRD[iso]) ;
2536 fhELambda1TRD[iso] = new TH2F
2537 (Form("hELambda1TRD%s",isoName[iso].Data()),
2538 Form("%s cluster: #it{E} vs #lambda_{1}, SM behind TRD, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2539 fhELambda1TRD[iso]->SetYTitle("#lambda_{1}^{2}");
2540 fhELambda1TRD[iso]->SetXTitle("#it{E} (GeV)");
2541 outputContainer->Add(fhELambda1TRD[iso]) ;
2544 if(fFillNLMHistograms)
2546 fhNLocMax[iso] = new TH2F
2547 (Form("hNLocMax%s",isoName[iso].Data()),
2548 Form("%s - Number of local maxima in cluster, %s",isoTitle[iso].Data(),parTitle.Data()),
2549 nptbins,ptmin,ptmax,10,0,10);
2550 fhNLocMax[iso]->SetYTitle("#it{NLM}");
2551 fhNLocMax[iso]->SetXTitle("#it{E} (GeV)");
2552 outputContainer->Add(fhNLocMax[iso]) ;
2554 fhELambda0LocMax1[iso] = new TH2F
2555 (Form("hELambda0LocMax1%s",isoName[iso].Data()),
2556 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);
2557 fhELambda0LocMax1[iso]->SetYTitle("#lambda_{0}^{2}");
2558 fhELambda0LocMax1[iso]->SetXTitle("#it{E} (GeV)");
2559 outputContainer->Add(fhELambda0LocMax1[iso]) ;
2561 fhELambda1LocMax1[iso] = new TH2F
2562 (Form("hELambda1LocMax1%s",isoName[iso].Data()),
2563 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);
2564 fhELambda1LocMax1[iso]->SetYTitle("#lambda_{1}^{2}");
2565 fhELambda1LocMax1[iso]->SetXTitle("#it{E} (GeV)");
2566 outputContainer->Add(fhELambda1LocMax1[iso]) ;
2568 fhELambda0LocMax2[iso] = new TH2F
2569 (Form("hELambda0LocMax2%s",isoName[iso].Data()),
2570 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);
2571 fhELambda0LocMax2[iso]->SetYTitle("#lambda_{0}^{2}");
2572 fhELambda0LocMax2[iso]->SetXTitle("#it{E} (GeV)");
2573 outputContainer->Add(fhELambda0LocMax2[iso]) ;
2575 fhELambda1LocMax2[iso] = new TH2F
2576 (Form("hELambda1LocMax2%s",isoName[iso].Data()),
2577 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);
2578 fhELambda1LocMax2[iso]->SetYTitle("#lambda_{1}^{2}");
2579 fhELambda1LocMax2[iso]->SetXTitle("#it{E} (GeV)");
2580 outputContainer->Add(fhELambda1LocMax2[iso]) ;
2582 fhELambda0LocMaxN[iso] = new TH2F
2583 ( Form("hELambda0LocMaxN%s",isoName[iso].Data()),
2584 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);
2585 fhELambda0LocMaxN[iso]->SetYTitle("#lambda_{0}^{2}");
2586 fhELambda0LocMaxN[iso]->SetXTitle("#it{E} (GeV)");
2587 outputContainer->Add(fhELambda0LocMaxN[iso]) ;
2589 fhELambda1LocMaxN[iso] = new TH2F
2590 (Form("hELambda1LocMaxN%s",isoName[iso].Data()),
2591 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);
2592 fhELambda1LocMaxN[iso]->SetYTitle("#lambda_{1}^{2}");
2593 fhELambda1LocMaxN[iso]->SetXTitle("#it{E} (GeV)");
2594 outputContainer->Add(fhELambda1LocMaxN[iso]) ;
2597 } // control histograms for isolated and non isolated objects
2600 if(fFillPileUpHistograms)
2602 fhPtTrackInConeOtherBC = new TH2F("hPtTrackInConeOtherBC",
2603 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC!=0",r),
2604 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2605 fhPtTrackInConeOtherBC->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2606 fhPtTrackInConeOtherBC->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2607 outputContainer->Add(fhPtTrackInConeOtherBC) ;
2609 fhPtTrackInConeOtherBCPileUpSPD = new TH2F("hPtTrackInConeOtherBCPileUpSPD",
2610 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC!=0, pile-up from SPD",r),
2611 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2612 fhPtTrackInConeOtherBCPileUpSPD->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2613 fhPtTrackInConeOtherBCPileUpSPD->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2614 outputContainer->Add(fhPtTrackInConeOtherBCPileUpSPD) ;
2616 fhPtTrackInConeBC0 = new TH2F("hPtTrackInConeBC0",
2617 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC==0",r),
2618 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2619 fhPtTrackInConeBC0->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2620 fhPtTrackInConeBC0->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2621 outputContainer->Add(fhPtTrackInConeBC0) ;
2623 fhPtTrackInConeVtxBC0 = new TH2F("hPtTrackInConeVtxBC0",
2624 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC==0",r),
2625 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2626 fhPtTrackInConeVtxBC0->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2627 fhPtTrackInConeVtxBC0->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2628 outputContainer->Add(fhPtTrackInConeVtxBC0) ;
2631 fhPtTrackInConeBC0PileUpSPD = new TH2F("hPtTrackInConeBC0PileUpSPD",
2632 Form("#it{p}_{T} of tracks in isolation cone for #it{R} = %2.2f, TOF from BC==0, pile-up from SPD",r),
2633 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2634 fhPtTrackInConeBC0PileUpSPD->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2635 fhPtTrackInConeBC0PileUpSPD->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2636 outputContainer->Add(fhPtTrackInConeBC0PileUpSPD) ;
2639 for (Int_t i = 0; i < 7 ; i++)
2641 fhPtInConePileUp[i] = new TH2F(Form("hPtInConePileUp%s",pileUpName[i].Data()),
2642 Form("#it{p}_{T} in isolation cone for #it{R} = %2.2f, from pile-up (%s)",r,pileUpName[i].Data()),
2643 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2644 fhPtInConePileUp[i]->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
2645 fhPtInConePileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2646 outputContainer->Add(fhPtInConePileUp[i]) ;
2652 // For histograms in arrays, index in the array, corresponding to any particle origin
2654 for(Int_t i = 0; i < 6; i++)
2656 fhEPrimMC[i] = new TH1F(Form("hEPrim_MC%s",ppname[i].Data()),
2657 Form("primary photon %s : #it{E}, %s",pptype[i].Data(),parTitle.Data()),
2658 nptbins,ptmin,ptmax);
2659 fhEPrimMC[i]->SetXTitle("#it{E} (GeV)");
2660 outputContainer->Add(fhEPrimMC[i]) ;
2662 fhPtPrimMCiso[i] = new TH1F(Form("hPtPrim_MCiso%s",ppname[i].Data()),
2663 Form("primary isolated photon %s : #it{p}_{T}, %s",pptype[i].Data(),parTitle.Data()),
2664 nptbins,ptmin,ptmax);
2665 fhPtPrimMCiso[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2666 outputContainer->Add(fhPtPrimMCiso[i]) ;
2668 fhEtaPrimMC[i] = new TH2F(Form("hEtaPrim_MC%s",ppname[i].Data()),
2669 Form("primary photon %s : #eta vs #it{p}_{T}, %s",pptype[i].Data(),parTitle.Data()),
2670 nptbins,ptmin,ptmax,200,-2,2);
2671 fhEtaPrimMC[i]->SetYTitle("#eta");
2672 fhEtaPrimMC[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2673 outputContainer->Add(fhEtaPrimMC[i]) ;
2675 fhPhiPrimMC[i] = new TH2F(Form("hPhiPrim_MC%s",ppname[i].Data()),
2676 Form("primary photon %s : #phi vs #it{p}_{T}, %s",pptype[i].Data(),parTitle.Data()),
2677 nptbins,ptmin,ptmax,200,0.,TMath::TwoPi());
2678 fhPhiPrimMC[i]->SetYTitle("#phi");
2679 fhPhiPrimMC[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2680 outputContainer->Add(fhPhiPrimMC[i]) ;
2689 const Int_t buffersize = 255;
2690 char name[buffersize];
2691 char title[buffersize];
2692 for(Int_t icone = 0; icone<fNCones; icone++)
2694 // sum pt in cone vs. pt leading
2695 snprintf(name, buffersize,"hSumPtLeadingPt_Cone_%d",icone);
2696 snprintf(title, buffersize,"#Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
2697 fhSumPtLeadingPt[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2698 fhSumPtLeadingPt[icone] ->SetYTitle("#sum_{cone}#it{p}_{T} (GeV/#it{c})");//#Sigma #it{p}_{T}
2699 fhSumPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
2700 outputContainer->Add(fhSumPtLeadingPt[icone]) ;
2702 // pt in cone vs. pt leading
2703 snprintf(name, buffersize,"hPtLeadingPt_Cone_%d",icone);
2704 snprintf(title, buffersize,"#it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
2705 fhPtLeadingPt[icone] = new TH2F(name, title, nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2706 fhPtLeadingPt[icone] ->SetYTitle("#it{p}_{T}^{cone} (GeV/#it{c})");
2707 fhPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
2708 outputContainer->Add(fhPtLeadingPt[icone]) ;
2710 // sum pt in cone vs. pt leading in the forward region (for background subtraction studies)
2711 snprintf(name, buffersize,"hPerpSumPtLeadingPt_Cone_%d",icone);
2712 snprintf(title, buffersize,"#Sigma #it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
2713 fhPerpSumPtLeadingPt[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2714 fhPerpSumPtLeadingPt[icone] ->SetYTitle("#sum_{cone}#it{p}_{T} (GeV/#it{c})");//#Sigma #it{p}_{T}
2715 fhPerpSumPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
2716 outputContainer->Add(fhPerpSumPtLeadingPt[icone]) ;
2718 // pt in cone vs. pt leading in the forward region (for background subtraction studies)
2719 snprintf(name, buffersize,"hPerpPtLeadingPt_Cone_%d",icone);
2720 snprintf(title, buffersize,"#it{p}_{T} in isolation cone for #it{R} = %2.2f",fConeSizes[icone]);
2721 fhPerpPtLeadingPt[icone] = new TH2F(name, title, nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
2722 fhPerpPtLeadingPt[icone] ->SetYTitle("#it{p}_{T}^{cone} (GeV/#it{c})");
2723 fhPerpPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
2724 outputContainer->Add(fhPerpPtLeadingPt[icone]) ;
2728 for(Int_t imc = 0; imc < 9; imc++)
2730 snprintf(name , buffersize,"hSumPtLeadingPt_MC%s_Cone_%d",mcPartName[imc].Data(),icone);
2731 snprintf(title, buffersize,"Candidate %s #it{p}_{T} vs cone #Sigma #it{p}_{T} for #it{R}=%2.2f",mcPartType[imc].Data(),fConeSizes[icone]);
2732 fhSumPtLeadingPtMC[imc][icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
2733 fhSumPtLeadingPtMC[imc][icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2734 fhSumPtLeadingPtMC[imc][icone]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2735 outputContainer->Add(fhSumPtLeadingPtMC[imc][icone]) ;
2739 for(Int_t ipt = 0; ipt<fNPtThresFrac;ipt++)
2741 snprintf(name, buffersize,"hPtThres_Cone_%d_Pt%d",icone,ipt);
2742 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]);
2743 fhPtThresIsolated[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2744 fhPtThresIsolated[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2745 outputContainer->Add(fhPtThresIsolated[icone][ipt]) ;
2747 snprintf(name, buffersize,"hPtFrac_Cone_%d_Pt%d",icone,ipt);
2748 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]);
2749 fhPtFracIsolated[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2750 fhPtFracIsolated[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2751 outputContainer->Add(fhPtFracIsolated[icone][ipt]) ;
2753 snprintf(name, buffersize,"hSumPt_Cone_%d_Pt%d",icone,ipt);
2754 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]);
2755 fhSumPtIsolated[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2756 // fhSumPtIsolated[icone][ipt]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2757 fhSumPtIsolated[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2758 outputContainer->Add(fhSumPtIsolated[icone][ipt]) ;
2760 snprintf(name, buffersize,"hPtSumDensity_Cone_%d_Pt%d",icone,ipt);
2761 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]);
2762 fhPtSumDensityIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2763 //fhPtSumIsolated[icone][ipt]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2764 fhPtSumDensityIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2765 outputContainer->Add(fhPtSumDensityIso[icone][ipt]) ;
2767 snprintf(name, buffersize,"hPtFracPtSum_Cone_%d_Pt%d",icone,ipt);
2768 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]);
2769 fhPtFracPtSumIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2770 //fhPtSumIsolated[icone][ipt]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2771 fhPtFracPtSumIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2772 outputContainer->Add(fhPtFracPtSumIso[icone][ipt]) ;
2775 snprintf(name, buffersize,"hEtaPhiPtThres_Cone_%d_Pt%d",icone,ipt);
2776 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]);
2777 fhEtaPhiPtThresIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2778 fhEtaPhiPtThresIso[icone][ipt]->SetXTitle("#eta");
2779 fhEtaPhiPtThresIso[icone][ipt]->SetYTitle("#phi");
2780 outputContainer->Add(fhEtaPhiPtThresIso[icone][ipt]) ;
2782 snprintf(name, buffersize,"hEtaPhiPtFrac_Cone_%d_Pt%d",icone,ipt);
2783 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]);
2784 fhEtaPhiPtFracIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2785 fhEtaPhiPtFracIso[icone][ipt]->SetXTitle("#eta");
2786 fhEtaPhiPtFracIso[icone][ipt]->SetYTitle("#phi");
2787 outputContainer->Add(fhEtaPhiPtFracIso[icone][ipt]) ;
2789 snprintf(name, buffersize,"hEtaPhiPtSum_Cone_%d_Pt%d",icone,ipt);
2790 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]);
2791 fhEtaPhiPtSumIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2792 fhEtaPhiPtSumIso[icone][ipt]->SetXTitle("#eta");
2793 fhEtaPhiPtSumIso[icone][ipt]->SetYTitle("#phi");
2794 outputContainer->Add(fhEtaPhiPtSumIso[icone][ipt]) ;
2796 snprintf(name, buffersize,"hEtaPhiSumDensity_Cone_%d_Pt%d",icone,ipt);
2797 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]);
2798 fhEtaPhiSumDensityIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2799 fhEtaPhiSumDensityIso[icone][ipt]->SetXTitle("#eta");
2800 fhEtaPhiSumDensityIso[icone][ipt]->SetYTitle("#phi");
2801 outputContainer->Add(fhEtaPhiSumDensityIso[icone][ipt]) ;
2803 snprintf(name, buffersize,"hEtaPhiFracPtSum_Cone_%d_Pt%d",icone,ipt);
2804 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]);
2805 fhEtaPhiFracPtSumIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2806 fhEtaPhiFracPtSumIso[icone][ipt]->SetXTitle("#eta");
2807 fhEtaPhiFracPtSumIso[icone][ipt]->SetYTitle("#phi");
2808 outputContainer->Add(fhEtaPhiFracPtSumIso[icone][ipt]) ;
2810 if(fFillTaggedDecayHistograms)
2812 // pt decays isolated
2813 snprintf(name, buffersize,"hPtThres_Decay_Cone_%d_Pt%d",icone,ipt);
2814 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]);
2815 fhPtPtThresDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2816 fhPtPtThresDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2817 outputContainer->Add(fhPtPtThresDecayIso[icone][ipt]) ;
2819 snprintf(name, buffersize,"hPtFrac_Decay_Cone_%d_Pt%d",icone,ipt);
2820 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]);
2821 fhPtPtFracDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2822 fhPtPtFracDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2823 outputContainer->Add(fhPtPtFracDecayIso[icone][ipt]) ;
2825 snprintf(name, buffersize,"hPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
2826 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]);
2827 fhPtPtSumDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2828 // fhPtPtSumDecayIso[icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2829 fhPtPtSumDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2830 outputContainer->Add(fhPtPtSumDecayIso[icone][ipt]) ;
2832 snprintf(name, buffersize,"hPtSumDensity_Decay_Cone_%d_Pt%d",icone,ipt);
2833 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]);
2834 fhPtSumDensityDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2835 // fhPtPtSumDecayIso[icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2836 fhPtSumDensityDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2837 outputContainer->Add(fhPtSumDensityDecayIso[icone][ipt]) ;
2839 snprintf(name, buffersize,"hPtFracPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
2840 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]);
2841 fhPtFracPtSumDecayIso[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
2842 // fhPtPtSumDecayIso[icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
2843 fhPtFracPtSumDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2844 outputContainer->Add(fhPtFracPtSumDecayIso[icone][ipt]) ;
2847 snprintf(name, buffersize,"hEtaPhiPtThres_Decay_Cone_%d_Pt%d",icone,ipt);
2848 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]);
2849 fhEtaPhiPtThresDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2850 fhEtaPhiPtThresDecayIso[icone][ipt]->SetXTitle("#eta");
2851 fhEtaPhiPtThresDecayIso[icone][ipt]->SetYTitle("#phi");
2852 outputContainer->Add(fhEtaPhiPtThresDecayIso[icone][ipt]) ;
2854 snprintf(name, buffersize,"hEtaPhiPtFrac_Decay_Cone_%d_Pt%d",icone,ipt);
2855 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]);
2856 fhEtaPhiPtFracDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2857 fhEtaPhiPtFracDecayIso[icone][ipt]->SetXTitle("#eta");
2858 fhEtaPhiPtFracDecayIso[icone][ipt]->SetYTitle("#phi");
2859 outputContainer->Add(fhEtaPhiPtFracDecayIso[icone][ipt]) ;
2862 snprintf(name, buffersize,"hEtaPhiPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
2863 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]);
2864 fhEtaPhiPtSumDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2865 fhEtaPhiPtSumDecayIso[icone][ipt]->SetXTitle("#eta");
2866 fhEtaPhiPtSumDecayIso[icone][ipt]->SetYTitle("#phi");
2867 outputContainer->Add(fhEtaPhiPtSumDecayIso[icone][ipt]) ;
2869 snprintf(name, buffersize,"hEtaPhiSumDensity_Decay_Cone_%d_Pt%d",icone,ipt);
2870 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]);
2871 fhEtaPhiSumDensityDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2872 fhEtaPhiSumDensityDecayIso[icone][ipt]->SetXTitle("#eta");
2873 fhEtaPhiSumDensityDecayIso[icone][ipt]->SetYTitle("#phi");
2874 outputContainer->Add(fhEtaPhiSumDensityDecayIso[icone][ipt]) ;
2876 snprintf(name, buffersize,"hEtaPhiFracPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
2877 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]);
2878 fhEtaPhiFracPtSumDecayIso[icone][ipt] = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
2879 fhEtaPhiFracPtSumDecayIso[icone][ipt]->SetXTitle("#eta");
2880 fhEtaPhiFracPtSumDecayIso[icone][ipt]->SetYTitle("#phi");
2881 outputContainer->Add(fhEtaPhiFracPtSumDecayIso[icone][ipt]) ;
2887 for(Int_t imc = 0; imc < 9; imc++)
2889 snprintf(name , buffersize,"hPtThreshMC%s_Cone_%d_Pt%d",mcPartName[imc].Data(),icone,ipt);
2890 snprintf(title, buffersize,"Isolated %s #it{p}_{T} for #it{R}=%2.2f and #it{p}_{T}^{th}=%2.2f",
2891 mcPartType[imc].Data(),fConeSizes[icone], fPtThresholds[ipt]);
2892 fhPtThresIsolatedMC[imc][icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2893 fhPtThresIsolatedMC[imc][icone][ipt]->SetYTitle("#it{counts}");
2894 fhPtThresIsolatedMC[imc][icone][ipt]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2895 outputContainer->Add(fhPtThresIsolatedMC[imc][icone][ipt]) ;
2898 snprintf(name , buffersize,"hPtFracMC%s_Cone_%d_Pt%d",mcPartName[imc].Data(),icone,ipt);
2899 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",
2900 mcPartType[imc].Data(),fConeSizes[icone], fPtFractions[ipt]);
2901 fhPtFracIsolatedMC[imc][icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2902 fhPtFracIsolatedMC[imc][icone][ipt]->SetYTitle("#it{counts}");
2903 fhPtFracIsolatedMC[imc][icone][ipt]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2904 outputContainer->Add(fhPtFracIsolatedMC[imc][icone][ipt]) ;
2906 snprintf(name , buffersize,"hSumPtMC%s_Cone_%d_Pt%d",mcPartName[imc].Data(),icone,ipt);
2907 snprintf(title, buffersize,"Isolated %s #it{p}_{T} for #it{R}=%2.2f and #Sigma #it{p}_{T}^{in cone}=%2.2f",
2908 mcPartType[imc].Data(),fConeSizes[icone], fSumPtThresholds[ipt]);
2909 fhSumPtIsolatedMC[imc][icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
2910 fhSumPtIsolatedMC[imc][icone][ipt]->SetYTitle("#it{counts}");
2911 fhSumPtIsolatedMC[imc][icone][ipt]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
2912 outputContainer->Add(fhSumPtIsolatedMC[imc][icone][ipt]) ;
2919 if(fFillPileUpHistograms)
2921 for (Int_t i = 0; i < 7 ; i++)
2923 fhEIsoPileUp[i] = new TH1F(Form("hEPileUp%s",pileUpName[i].Data()),
2924 Form("Number of isolated particles vs E, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
2925 nptbins,ptmin,ptmax);
2926 fhEIsoPileUp[i]->SetYTitle("d#it{N} / d#it{E}");
2927 fhEIsoPileUp[i]->SetXTitle("#it{E} (GeV)");
2928 outputContainer->Add(fhEIsoPileUp[i]) ;
2930 fhPtIsoPileUp[i] = new TH1F(Form("hPtPileUp%s",pileUpName[i].Data()),
2931 Form("Number of isolated particles vs #it{p}_{T}, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
2932 nptbins,ptmin,ptmax);
2933 fhPtIsoPileUp[i]->SetYTitle("d#it{N} / #it{p}_{T}");
2934 fhPtIsoPileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2935 outputContainer->Add(fhPtIsoPileUp[i]) ;
2937 fhENoIsoPileUp[i] = new TH1F(Form("hENoIsoPileUp%s",pileUpName[i].Data()),
2938 Form("Number of not isolated particles vs E, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
2939 nptbins,ptmin,ptmax);
2940 fhENoIsoPileUp[i]->SetYTitle("d#it{N} / dE");
2941 fhENoIsoPileUp[i]->SetXTitle("#it{E} (GeV)");
2942 outputContainer->Add(fhENoIsoPileUp[i]) ;
2944 fhPtNoIsoPileUp[i] = new TH1F(Form("hPtNoIsoPileUp%s",pileUpName[i].Data()),
2945 Form("Number of not isolated particles vs #it{p}_{T}, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
2946 nptbins,ptmin,ptmax);
2947 fhPtNoIsoPileUp[i]->SetYTitle("d#it{N} / #it{p}_{T}");
2948 fhPtNoIsoPileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2949 outputContainer->Add(fhPtNoIsoPileUp[i]) ;
2952 fhTimeENoCut = new TH2F ("hTimeE_NoCut","time of cluster vs E of clusters, no cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
2953 fhTimeENoCut->SetXTitle("#it{E} (GeV)");
2954 fhTimeENoCut->SetYTitle("#it{time} (ns)");
2955 outputContainer->Add(fhTimeENoCut);
2957 fhTimeESPD = new TH2F ("hTimeE_SPD","time of cluster vs E of clusters, SPD cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
2958 fhTimeESPD->SetXTitle("#it{E} (GeV)");
2959 fhTimeESPD->SetYTitle("#it{time} (ns)");
2960 outputContainer->Add(fhTimeESPD);
2962 fhTimeESPDMulti = new TH2F ("hTimeE_SPDMulti","time of cluster vs E of clusters, SPD multi cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
2963 fhTimeESPDMulti->SetXTitle("#it{E} (GeV)");
2964 fhTimeESPDMulti->SetYTitle("#it{time} (ns)");
2965 outputContainer->Add(fhTimeESPDMulti);
2967 fhTimeNPileUpVertSPD = new TH2F ("hTime_NPileUpVertSPD","time of cluster vs N pile-up SPD vertex", ntimebins,timemin,timemax,50,0,50);
2968 fhTimeNPileUpVertSPD->SetYTitle("# vertex ");
2969 fhTimeNPileUpVertSPD->SetXTitle("#it{time} (ns)");
2970 outputContainer->Add(fhTimeNPileUpVertSPD);
2972 fhTimeNPileUpVertTrack = new TH2F ("hTime_NPileUpVertTracks","time of cluster vs N pile-up Tracks vertex", ntimebins,timemin,timemax, 50,0,50 );
2973 fhTimeNPileUpVertTrack->SetYTitle("# vertex ");
2974 fhTimeNPileUpVertTrack->SetXTitle("#it{time} (ns)");
2975 outputContainer->Add(fhTimeNPileUpVertTrack);
2977 fhTimeNPileUpVertContributors = new TH2F ("hTime_NPileUpVertContributors","time of cluster vs N constributors to pile-up SPD vertex", ntimebins,timemin,timemax,50,0,50);
2978 fhTimeNPileUpVertContributors->SetYTitle("# vertex ");
2979 fhTimeNPileUpVertContributors->SetXTitle("#it{time} (ns)");
2980 outputContainer->Add(fhTimeNPileUpVertContributors);
2982 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);
2983 fhTimePileUpMainVertexZDistance->SetYTitle("distance #it{z} (cm) ");
2984 fhTimePileUpMainVertexZDistance->SetXTitle("#it{time} (ns)");
2985 outputContainer->Add(fhTimePileUpMainVertexZDistance);
2987 fhTimePileUpMainVertexZDiamond = new TH2F ("hTime_PileUpMainVertexZDiamond","time of cluster vs distance in Z pile-up SPD vertex - z diamond",ntimebins,timemin,timemax,100,0,50);
2988 fhTimePileUpMainVertexZDiamond->SetYTitle("diamond distance #it{z} (cm) ");
2989 fhTimePileUpMainVertexZDiamond->SetXTitle("#it{time} (ns)");
2990 outputContainer->Add(fhTimePileUpMainVertexZDiamond);
2993 return outputContainer ;
2997 //____________________________________________________
2998 Int_t AliAnaParticleIsolation::GetMCIndex(Int_t mcTag)
3000 // Histogram index depending on origin of candidate
3002 if(!IsDataMC()) return -1;
3004 if (GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPrompt))
3008 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCFragmentation))
3012 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0))
3016 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0Decay))
3020 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEtaDecay))
3024 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCOtherDecay))
3026 return kmcOtherDecay;
3028 else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron))
3032 else // anything else
3034 // careful can contain also other decays, to be checked.
3039 //__________________________________
3040 void AliAnaParticleIsolation::Init()
3042 // Do some checks and init stuff
3044 // In case of several cone and thresholds analysis, open the cuts for the filling of the
3045 // track and cluster reference arrays in cone when done in the MakeAnalysisFillAOD().
3046 // The different cones, thresholds are tested for this list of tracks, clusters.
3049 printf("AliAnaParticleIsolation::Init() - Open default isolation cuts for multiple Isolation analysis\n");
3050 GetIsolationCut()->SetPtThreshold(100);
3051 GetIsolationCut()->SetPtFraction(100);
3052 GetIsolationCut()->SetConeSize(1);
3055 if(!GetReader()->IsCTSSwitchedOn() && GetIsolationCut()->GetParticleTypeInCone()!=AliIsolationCut::kOnlyNeutral)
3056 AliFatal("STOP!: You want to use CTS tracks in analysis but not read!! \n!!Check the configuration file!!\n");
3060 //____________________________________________
3061 void AliAnaParticleIsolation::InitParameters()
3064 //Initialize the parameters of the analysis.
3065 SetInputAODName("PWG4Particle");
3066 SetAODObjArrayName("IsolationCone");
3067 AddToHistogramsName("AnaIsolation_");
3069 fCalorimeter = "EMCAL" ;
3070 fIsoDetector = "EMCAL" ;
3072 fReMakeIC = kFALSE ;
3073 fMakeSeveralIC = kFALSE ;
3075 fLeadingOnly = kTRUE;
3076 fCheckLeadingWithNeutralClusters = kTRUE;
3079 fDecayBits[0] = AliNeutralMesonSelection::kPi0;
3080 fDecayBits[1] = AliNeutralMesonSelection::kEta;
3081 fDecayBits[2] = AliNeutralMesonSelection::kPi0Side;
3082 fDecayBits[3] = AliNeutralMesonSelection::kEtaSide;
3084 //----------- Several IC-----------------
3087 fConeSizes [0] = 0.1; fConeSizes [1] = 0.2; fConeSizes [2] = 0.3; fConeSizes [3] = 0.4; fConeSizes [4] = 0.5;
3088 fPtThresholds [0] = 1.; fPtThresholds [1] = 2.; fPtThresholds [2] = 3.; fPtThresholds [3] = 4.; fPtThresholds [4] = 5.;
3089 fPtFractions [0] = 0.05; fPtFractions [1] = 0.075; fPtFractions [2] = 0.1; fPtFractions [3] = 1.25; fPtFractions [4] = 1.5;
3090 fSumPtThresholds[0] = 1.; fSumPtThresholds[1] = 2.; fSumPtThresholds[2] = 3.; fSumPtThresholds[3] = 4.; fSumPtThresholds[4] = 5.;
3094 //_________________________________________________________________________________________
3095 Bool_t AliAnaParticleIsolation::IsTriggerTheNearSideEventLeadingParticle(Int_t & idLeading)
3097 // Check if the what of the selected isolation candidates is leading particle in the same hemisphere
3098 // comparing with all the candidates, all the tracks or all the clusters.
3100 Double_t ptTrig = GetMinPt();
3101 Double_t phiTrig = 0 ;
3103 AliAODPWG4ParticleCorrelation* pLeading = 0;
3105 // Loop on stored AOD particles, find leading trigger on the selected list, with at least min pT.
3107 for(Int_t iaod = 0; iaod < GetInputAODBranch()->GetEntriesFast() ; iaod++)
3109 AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
3110 particle->SetLeadingParticle(kFALSE); // set it later
3112 // Vertex cut in case of mixing
3115 Int_t check = CheckMixedEventVertex(particle->GetCaloLabel(0), particle->GetTrackLabel(0));
3116 if(check == 0) continue;
3117 if(check == -1) return kFALSE; // not sure if it is correct.
3120 //check if it is low pt trigger particle
3121 if((particle->Pt() < GetIsolationCut()->GetPtThreshold() ||
3122 particle->Pt() < GetIsolationCut()->GetSumPtThreshold()) &&
3125 continue ; //trigger should not come from underlying event
3128 // find the leading particles with highest momentum
3129 if (particle->Pt() > ptTrig)
3131 ptTrig = particle->Pt() ;
3132 phiTrig = particle->Phi();
3134 pLeading = particle ;
3136 }// finish search of leading trigger particle on the AOD branch.
3138 if(index < 0) return kFALSE;
3142 //printf("AOD leading pT %2.2f, ID %d\n", pLeading->Pt(),pLeading->GetCaloLabel(0));
3144 if(phiTrig < 0 ) phiTrig += TMath::TwoPi();
3146 // Compare if it is the leading of all tracks
3149 for(Int_t ipr = 0;ipr < GetCTSTracks()->GetEntriesFast() ; ipr ++ )
3151 AliVTrack * track = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
3153 if(track->GetID() == pLeading->GetTrackLabel(0) || track->GetID() == pLeading->GetTrackLabel(1) ||
3154 track->GetID() == pLeading->GetTrackLabel(2) || track->GetID() == pLeading->GetTrackLabel(3) ) continue ;
3156 Double_t mom[3] = {track->Px(),track->Py(),track->Pz()};
3157 p3.SetXYZ(mom[0],mom[1],mom[2]);
3158 Float_t pt = p3.Pt();
3159 Float_t phi = p3.Phi() ;
3160 if(phi < 0) phi+=TMath::TwoPi();
3162 //skip this event if near side associated particle pt larger than trigger
3164 if(pt > ptTrig && TMath::Abs(phi-phiTrig) < TMath::PiOver2()) return kFALSE;
3168 // Compare if it is leading of all calorimeter clusters
3170 if(fCheckLeadingWithNeutralClusters)
3172 // Select the calorimeter cluster list
3173 TObjArray * nePl = 0x0;
3174 if (pLeading->GetDetector() == "PHOS" )
3175 nePl = GetPHOSClusters();
3177 nePl = GetEMCALClusters();
3179 if(!nePl) return kTRUE; // Do the selection just with the tracks if no calorimeter is available.
3182 for(Int_t ipr = 0;ipr < nePl->GetEntriesFast() ; ipr ++ )
3184 AliVCluster * cluster = (AliVCluster *) (nePl->At(ipr)) ;
3186 if(cluster->GetID() == pLeading->GetCaloLabel(0) || cluster->GetID() == pLeading->GetCaloLabel(1) ) continue ;
3188 cluster->GetMomentum(lv,GetVertex(0));
3190 Float_t pt = lv.Pt();
3191 Float_t phi = lv.Phi() ;
3192 if(phi < 0) phi+=TMath::TwoPi();
3194 if(IsTrackMatched(cluster,GetReader()->GetInputEvent())) continue ; // avoid charged clusters, already covered by tracks, or cluster merging with track.
3196 // skip this event if near side associated particle pt larger than trigger
3197 // not really needed for calorimeter, unless DCal is included
3199 if(pt > ptTrig && TMath::Abs(phi-phiTrig) < TMath::PiOver2()) return kFALSE ;
3202 } // check neutral clusters
3205 pLeading->SetLeadingParticle(kTRUE);
3207 if( GetDebug() > 1 )
3208 printf("AliAnaParticleIsolation::IsTriggerTheNearSideEventLeadingParticle() - Particle AOD with index %d is leading with pT %2.2f\n",
3209 idLeading, pLeading->Pt());
3215 //__________________________________________________
3216 void AliAnaParticleIsolation::MakeAnalysisFillAOD()
3218 // Do analysis and fill aods
3219 // Search for the isolated photon in fCalorimeter with GetMinPt() < pt < GetMaxPt()
3220 // and if the particle is leading in the near side (if requested)
3222 if(!GetInputAODBranch())
3223 AliFatal(Form("No input particles in AOD with name branch < %s >, STOP",GetInputAODName().Data()));
3225 if(strcmp(GetInputAODBranch()->GetClass()->GetName(), "AliAODPWG4ParticleCorrelation"))
3226 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()));
3228 Int_t n = 0, nfrac = 0;
3229 Bool_t isolated = kFALSE ;
3230 Float_t coneptsum = 0, coneptlead = 0;
3231 TObjArray * pl = 0x0; ;
3233 //Select the calorimeter for candidate isolation with neutral particles
3234 if (fCalorimeter == "PHOS" )
3235 pl = GetPHOSClusters();
3236 else if (fCalorimeter == "EMCAL")
3237 pl = GetEMCALClusters();
3239 //Loop on AOD branch, filled previously in AliAnaPhoton, find leading particle to do isolation only with it
3240 TLorentzVector mom ;
3241 Int_t idLeading = -1 ;
3243 Int_t naod = GetInputAODBranch()->GetEntriesFast();
3246 printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - Input aod branch entries %d\n", naod);
3248 if(IsLeadingOnlyOn())
3250 Bool_t leading = IsTriggerTheNearSideEventLeadingParticle(idLeading);
3253 if(GetDebug() > 1) printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - Not leading; End fill AODs \n");
3256 iaod0 = idLeading ; // first entry in particle loop
3257 naod = idLeading+1; // last entry in particle loop
3260 // Check isolation of list of candidate particles or leading particle
3262 for(Int_t iaod = iaod0; iaod < naod; iaod++)
3264 AliAODPWG4ParticleCorrelation * aodinput = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
3266 if(IsLeadingOnlyOn()) aodinput->SetLeadingParticle(kTRUE);
3268 // Check isolation only of clusters in fiducial region
3269 if(IsFiducialCutOn())
3271 Bool_t in = GetFiducialCut()->IsInFiducialCut(*aodinput->Momentum(),aodinput->GetDetector()) ;
3275 //If too small or too large pt, skip
3276 Float_t pt = aodinput->Pt();
3277 if(pt < GetMinPt() || pt > GetMaxPt() ) continue ;
3279 //check if it is low pt trigger particle
3280 if( ( pt < GetIsolationCut()->GetPtThreshold() || pt < GetIsolationCut()->GetSumPtThreshold() ) &&
3283 continue ; //trigger should not come from underlying event
3286 //After cuts, study isolation
3287 n=0; nfrac = 0; isolated = kFALSE; coneptsum = 0; coneptlead = 0;
3288 GetIsolationCut()->MakeIsolationCut(GetCTSTracks(),pl,
3289 GetReader(), GetCaloPID(),
3290 kTRUE, aodinput, GetAODObjArrayName(),
3291 n,nfrac,coneptsum,coneptlead,isolated);
3293 if(!fMakeSeveralIC) aodinput->SetIsolated(isolated);
3294 } // particle isolationloop
3298 if(isolated) printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() : Particle %d IS ISOLATED \n",idLeading);
3299 printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - End fill AODs \n");
3304 //_________________________________________________________
3305 void AliAnaParticleIsolation::MakeAnalysisFillHistograms()
3307 // Do analysis and fill histograms
3309 // In case of simulated data, fill acceptance histograms
3310 // Not ready for multiple case analysis.
3311 if(IsDataMC() && !fMakeSeveralIC) FillAcceptanceHistograms();
3313 //Loop on stored AOD
3314 Int_t naod = GetInputAODBranch()->GetEntriesFast();
3316 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Histo aod branch entries %d\n", naod);
3318 for(Int_t iaod = 0; iaod < naod ; iaod++)
3320 AliAODPWG4ParticleCorrelation* aod = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
3322 if(IsLeadingOnlyOn() && !aod->IsLeadingParticle()) continue; // Try to isolate only leading cluster or track
3324 // Check isolation only of clusters in fiducial region
3325 if(IsFiducialCutOn())
3327 Bool_t in = GetFiducialCut()->IsInFiducialCut(*aod->Momentum(),aod->GetDetector()) ;
3328 if(! in ) continue ;
3331 Float_t pt = aod->Pt();
3333 //If too small or too large pt, skip
3334 if(pt < GetMinPt() || pt > GetMaxPt() ) continue ;
3336 Int_t mcTag = aod->GetTag() ;
3337 Int_t mcIndex = GetMCIndex(mcTag);
3339 // --- In case of redoing isolation from delta AOD ----
3340 // Not standard case, not used since its implementation
3343 //Analysis of multiple IC at same time
3344 MakeSeveralICAnalysis(aod,mcIndex);
3348 // --- In case of redoing isolation multiple cuts ----
3352 //In case a more strict IC is needed in the produced AOD
3353 Bool_t isolated = kFALSE;
3354 Int_t n = 0, nfrac = 0;
3355 Float_t coneptsum = 0, coneptlead = 0;
3357 //Recover reference arrays with clusters and tracks
3358 TObjArray * refclusters = aod->GetObjArray(GetAODObjArrayName()+"Clusters");
3359 TObjArray * reftracks = aod->GetObjArray(GetAODObjArrayName()+"Tracks");
3361 GetIsolationCut()->MakeIsolationCut(reftracks, refclusters,
3362 GetReader(), GetCaloPID(),
3364 n,nfrac,coneptsum,coneptlead,isolated);
3367 Bool_t isolated = aod->IsIsolated();
3368 Float_t energy = aod->E();
3369 Float_t phi = aod->Phi();
3370 Float_t eta = aod->Eta();
3373 if(fFillTaggedDecayHistograms)
3375 decayTag = aod->GetBtag(); // temporary
3376 if(decayTag < 0) decayTag = 0; // temporary
3379 if(GetDebug() > 0) printf(" AliAnaParticleIsolation::MakeAnalysisFillHistograms() - pt %1.1f, eta %1.1f, phi %1.1f, Isolated %d\n",
3380 pt, eta, phi, isolated);
3382 //---------------------------------------------------------------
3383 // Fill Shower shape and track matching histograms
3384 //---------------------------------------------------------------
3386 FillTrackMatchingShowerShapeControlHistograms(aod,mcIndex);
3388 //---------------------------------------------------------------
3389 // Fill pt/sum pT distribution of particles in cone or in UE band
3390 //---------------------------------------------------------------
3392 Float_t coneptLeadCluster= 0;
3393 Float_t coneptLeadTrack = 0;
3394 Float_t coneptsumCluster = 0;
3395 Float_t coneptsumTrack = 0;
3396 Float_t coneptsumCell = 0;
3397 Float_t etaBandptsumClusterNorm = 0;
3398 Float_t etaBandptsumTrackNorm = 0;
3400 CalculateTrackSignalInCone (aod,coneptsumTrack , coneptLeadTrack );
3401 CalculateCaloSignalInCone (aod,coneptsumCluster, coneptLeadCluster);
3402 if(fFillCellHistograms)
3403 CalculateCaloCellSignalInCone(aod,coneptsumCell );
3405 if(GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kNeutralAndCharged)
3407 fhConeSumPtClustervsTrack ->Fill(coneptsumCluster,coneptsumTrack);
3408 if(fFillCellHistograms)
3410 fhConeSumPtCellvsTrack ->Fill(coneptsumCell, coneptsumTrack);
3411 fhConeSumPtCellTrack ->Fill(pt, coneptsumTrack+coneptsumCell);
3412 fhConeSumPtCellTrackTrigEtaPhi->Fill(eta,phi,coneptsumTrack+coneptsumCell);
3416 fhConeSumPt ->Fill(pt, coneptsumTrack+coneptsumCluster);
3417 fhConeSumPtTrigEtaPhi ->Fill(eta,phi,coneptsumTrack+coneptsumCluster);
3419 if(coneptLeadTrack > coneptLeadCluster) fhConePtLead->Fill(pt, coneptLeadTrack );
3420 else fhConePtLead->Fill(pt, coneptLeadCluster);
3423 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d Energy Sum in Isolation Cone %2.2f\n", iaod, coneptsumTrack+coneptsumCluster);
3425 //normalize phi/eta band per area unit
3426 if(fFillUEBandSubtractHistograms)
3427 CalculateNormalizeUEBandPerUnitArea(aod, coneptsumCluster, coneptsumCell, coneptsumTrack, etaBandptsumTrackNorm, etaBandptsumClusterNorm) ;
3429 // printf("Histograms analysis : cluster pt = %f, etaBandTrack = %f, etaBandCluster = %f, isolation = %d\n",aod->Pt(),etaBandptsumTrackNorm,etaBandptsumClusterNorm,aod->IsIsolated());
3432 //---------------------------------------------------------------
3433 // Isolated/ Non isolated histograms
3434 //---------------------------------------------------------------
3439 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d ISOLATED: fill histograms\n", iaod);
3441 fhEIso ->Fill(energy);
3443 fhPhiIso ->Fill(pt,phi);
3444 fhEtaIso ->Fill(pt,eta);
3445 fhEtaPhiIso ->Fill(eta,phi);
3449 // For histograms in arrays, index in the array, corresponding to any particle origin
3450 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
3452 fhPtIsoMC [kmcPhoton]->Fill(pt);
3453 fhPhiIsoMC[kmcPhoton]->Fill(pt,phi);
3454 fhEtaIsoMC[kmcPhoton]->Fill(pt,eta);
3457 fhPtIsoMC [mcIndex]->Fill(pt);
3458 fhPhiIsoMC[mcIndex]->Fill(pt,phi);
3459 fhEtaIsoMC[mcIndex]->Fill(pt,eta);
3460 }//Histograms with MC
3462 // Candidates tagged as decay in another analysis (AliAnaPi0EbE)
3463 if(fFillTaggedDecayHistograms && decayTag > 0)
3465 for(Int_t ibit = 0; ibit < fNDecayBits; ibit++)
3467 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[ibit]))
3469 fhPtDecayIso[ibit] ->Fill(pt);
3470 fhEtaPhiDecayIso[ibit]->Fill(eta,phi);
3474 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
3475 fhPtDecayIsoMC[ibit][kmcPhoton]->Fill(pt);
3477 fhPtDecayIsoMC[ibit][mcIndex]->Fill(pt);
3481 } // decay histograms
3483 if(fFillNLMHistograms)
3484 fhPtNLocMaxIso ->Fill(pt,aod->GetFiducialArea()) ; // remember to change method name
3486 if(fFillHighMultHistograms)
3488 fhPtCentralityIso ->Fill(pt,GetEventCentrality()) ;
3489 fhPtEventPlaneIso ->Fill(pt,GetEventPlaneAngle() ) ;
3492 if(fFillPileUpHistograms)
3494 if(GetReader()->IsPileUpFromSPD()) { fhEIsoPileUp[0] ->Fill(energy) ; fhPtIsoPileUp[0]->Fill(pt) ; }
3495 if(GetReader()->IsPileUpFromEMCal()) { fhEIsoPileUp[1] ->Fill(energy) ; fhPtIsoPileUp[1]->Fill(pt) ; }
3496 if(GetReader()->IsPileUpFromSPDOrEMCal()) { fhEIsoPileUp[2] ->Fill(energy) ; fhPtIsoPileUp[2]->Fill(pt) ; }
3497 if(GetReader()->IsPileUpFromSPDAndEMCal()) { fhEIsoPileUp[3] ->Fill(energy) ; fhPtIsoPileUp[3]->Fill(pt) ; }
3498 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) { fhEIsoPileUp[4] ->Fill(energy) ; fhPtIsoPileUp[4]->Fill(pt) ; }
3499 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) { fhEIsoPileUp[5] ->Fill(energy) ; fhPtIsoPileUp[5]->Fill(pt) ; }
3500 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhEIsoPileUp[6] ->Fill(energy) ; fhPtIsoPileUp[6]->Fill(pt) ; }
3502 // Fill histograms to undertand pile-up before other cuts applied
3503 // Remember to relax time cuts in the reader
3504 FillPileUpHistograms(aod->GetCaloLabel(0));
3507 }//Isolated histograms
3508 else // NON isolated
3511 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d NOT ISOLATED, fill histograms\n", iaod);
3513 fhENoIso ->Fill(energy);
3514 fhPtNoIso ->Fill(pt);
3515 fhEtaPhiNoIso ->Fill(eta,phi);
3519 if( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton) )
3520 fhPtNoIsoMC[kmcPhoton]->Fill(pt);
3522 fhPtNoIsoMC[mcIndex]->Fill(pt);
3525 // Candidates tagged as decay in another analysis (AliAnaPi0EbE)
3526 if(fFillTaggedDecayHistograms && decayTag > 0)
3528 for(Int_t ibit = 0; ibit < fNDecayBits; ibit++)
3530 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[ibit]))
3532 fhPtDecayNoIso[ibit] ->Fill(pt);
3533 fhEtaPhiDecayNoIso[ibit]->Fill(eta,phi);
3537 if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
3538 fhPtDecayNoIsoMC[ibit][kmcPhoton]->Fill(pt);
3540 fhPtDecayNoIsoMC[ibit][mcIndex]->Fill(pt);
3544 } // decay histograms
3546 if(fFillNLMHistograms)
3547 fhPtNLocMaxNoIso ->Fill(pt,aod->GetFiducialArea()); // remember to change method name
3549 if(fFillPileUpHistograms)
3551 if(GetReader()->IsPileUpFromSPD()) { fhENoIsoPileUp[0] ->Fill(energy) ; fhPtNoIsoPileUp[0]->Fill(pt) ; }
3552 if(GetReader()->IsPileUpFromEMCal()) { fhENoIsoPileUp[1] ->Fill(energy) ; fhPtNoIsoPileUp[1]->Fill(pt) ; }
3553 if(GetReader()->IsPileUpFromSPDOrEMCal()) { fhENoIsoPileUp[2] ->Fill(energy) ; fhPtNoIsoPileUp[2]->Fill(pt) ; }
3554 if(GetReader()->IsPileUpFromSPDAndEMCal()) { fhENoIsoPileUp[3] ->Fill(energy) ; fhPtNoIsoPileUp[3]->Fill(pt) ; }
3555 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) { fhENoIsoPileUp[4] ->Fill(energy) ; fhPtNoIsoPileUp[4]->Fill(pt) ; }
3556 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) { fhENoIsoPileUp[5] ->Fill(energy) ; fhPtNoIsoPileUp[5]->Fill(pt) ; }
3557 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhENoIsoPileUp[6] ->Fill(energy) ; fhPtNoIsoPileUp[6]->Fill(pt) ; }
3564 //______________________________________________________________________
3565 void AliAnaParticleIsolation::FillAcceptanceHistograms()
3567 // Fill acceptance histograms if MC data is available
3568 // Only when particle is in the calorimeter. Rethink if CTS is used.
3570 if(GetDebug() > 0) printf("AliAnaParticleIsolation::FillAcceptanceHistograms() - Start \n");
3572 //Double_t photonY = -100 ;
3573 Double_t photonE = -1 ;
3574 Double_t photonPt = -1 ;
3575 Double_t photonPhi = 100 ;
3576 Double_t photonEta = -1 ;
3584 TParticle * primStack = 0;
3585 AliAODMCParticle * primAOD = 0;
3588 // Get the ESD MC particles container
3589 AliStack * stack = 0;
3590 if( GetReader()->ReadStack() )
3592 stack = GetMCStack();
3594 nprim = stack->GetNtrack();
3597 // Get the AOD MC particles container
3598 TClonesArray * mcparticles = 0;
3599 if( GetReader()->ReadAODMCParticles() )
3601 mcparticles = GetReader()->GetAODMCParticles();
3602 if( !mcparticles ) return;
3603 nprim = mcparticles->GetEntriesFast();
3606 for(Int_t i=0 ; i < nprim; i++)
3608 if(GetReader()->AcceptOnlyHIJINGLabels() && !GetReader()->IsHIJINGLabel(i)) continue ;
3610 if(GetReader()->ReadStack())
3612 primStack = stack->Particle(i) ;
3615 printf("AliAnaParticleIsolation::FillAcceptanceHistograms() - ESD primaries pointer not available!!\n");
3619 pdg = primStack->GetPdgCode();
3620 status = primStack->GetStatusCode();
3622 if(primStack->Energy() == TMath::Abs(primStack->Pz())) continue ; //Protection against floating point exception
3624 //printf("i %d, %s %d %s %d \n",i, stack->Particle(i)->GetName(), stack->Particle(i)->GetPdgCode(),
3625 // prim->GetName(), prim->GetPdgCode());
3627 //photonY = 0.5*TMath::Log((prim->Energy()-prim->Pz())/(prim->Energy()+prim->Pz())) ;
3630 primStack->Momentum(lv);
3635 primAOD = (AliAODMCParticle *) mcparticles->At(i);
3638 printf("AliAnaParticleIsolation::FillAcceptanceHistograms() - AOD primaries pointer not available!!\n");
3642 pdg = primAOD->GetPdgCode();
3643 status = primAOD->GetStatus();
3645 if(primAOD->E() == TMath::Abs(primAOD->Pz())) continue ; //Protection against floating point exception
3647 //photonY = 0.5*TMath::Log((prim->Energy()-prim->Pz())/(prim->Energy()+prim->Pz())) ;
3650 lv.SetPxPyPzE(primAOD->Px(),primAOD->Py(),primAOD->Pz(),primAOD->E());
3653 // Select only photons in the final state
3654 if(pdg != 22 ) continue ;
3656 // Consider only final state particles, but this depends on generator,
3657 // status 1 is the usual one, in case of not being ok, leave the possibility
3658 // to not consider this.
3659 if(status != 1 && GetMCAnalysisUtils()->GetMCGenerator()!="" ) continue ;
3661 // If too small or too large pt, skip, same cut as for data analysis
3662 photonPt = lv.Pt () ;
3664 if(photonPt < GetMinPt() || photonPt > GetMaxPt() ) continue ;
3667 photonEta = lv.Eta() ;
3668 photonPhi = lv.Phi() ;
3670 if(photonPhi < 0) photonPhi+=TMath::TwoPi();
3672 // Check if photons hit the Calorimeter acceptance
3673 if(IsRealCaloAcceptanceOn() && fIsoDetector!="CTS") // defined on base class
3675 if(GetReader()->ReadStack() &&
3676 !GetCaloUtils()->IsMCParticleInCalorimeterAcceptance(fIsoDetector, primStack)) continue ;
3677 if(GetReader()->ReadAODMCParticles() &&
3678 !GetCaloUtils()->IsMCParticleInCalorimeterAcceptance(fIsoDetector, primAOD )) continue ;
3681 // Check same fidutial borders as in data analysis on top of real acceptance if real was requested.
3682 if(!GetFiducialCut()->IsInFiducialCut(lv,fIsoDetector)) continue ;
3684 // Get tag of this particle photon from fragmentation, decay, prompt ...
3685 // Set the origin of the photon.
3686 tag = GetMCAnalysisUtils()->CheckOrigin(i,GetReader());
3688 if(!GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
3690 // A conversion photon from a hadron, skip this kind of photon
3691 // printf("AliAnaPhoton::FillAcceptanceHistograms() - not a photon, weird!\n ");
3692 // GetMCAnalysisUtils()->PrintMCTag(tag);
3698 if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPrompt) )
3700 mcIndex = kmcPrimPrompt;
3702 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCFragmentation) )
3704 mcIndex = kmcPrimFrag ;
3706 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCISR))
3708 mcIndex = kmcPrimISR;
3710 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0Decay))
3712 mcIndex = kmcPrimPi0Decay;
3714 else if( (GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEtaDecay) ||
3715 GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCOtherDecay)))
3717 mcIndex = kmcPrimOtherDecay;
3721 // Other decay but from non final state particle
3722 mcIndex = kmcPrimOtherDecay;
3725 // ////////////////////ISO MC/////////////////////////
3726 Double_t sumPtInCone = 0; Double_t dR=0. ;
3727 TParticle * mcisopStack = 0;
3728 AliAODMCParticle * mcisopAOD = 0;
3729 Int_t partInConeStatus = -1, partInConeMother = -1;
3730 Double_t partInConePt = 0, partInConeEta = 0, partInConePhi = 0;
3732 for(Int_t ip = 0; ip < nprim ; ip++)
3736 if( GetReader()->ReadStack() )
3738 mcisopStack = static_cast<TParticle*>(stack->Particle(ip));
3739 if( !mcisopStack ) continue;
3740 partInConeStatus = mcisopStack->GetStatusCode();
3741 partInConeMother = mcisopStack->GetMother(0);
3742 partInConePt = mcisopStack->Pt();
3743 partInConeEta = mcisopStack->Eta();
3744 partInConePhi = mcisopStack->Phi();
3748 mcisopAOD = (AliAODMCParticle *) mcparticles->At(ip);
3749 if( !mcisopAOD ) continue;
3750 partInConeStatus = mcisopAOD->GetStatus();
3751 partInConeMother = mcisopAOD->GetMother();
3752 partInConePt = mcisopAOD->Pt();
3753 partInConeEta = mcisopAOD->Eta();
3754 partInConePhi = mcisopAOD->Phi();
3757 // Consider only final state particles, but this depends on generator,
3758 // status 1 is the usual one, in case of not being ok, leave the possibility
3759 // to not consider this.
3760 if( partInConeStatus != 1 && GetMCAnalysisUtils()->GetMCGenerator()!="" ) continue ;
3762 if( partInConeMother == i ) continue;
3764 if( partInConePt < GetReader()->GetCTSPtMin() ) continue;
3765 // Careful!!!, cut for TPC tracks and calorimeter clusters in cone can be different
3767 // TVector3 vmcv(mcisop->Px(),mcisop->Py(), mcisop->Pz());
3768 // if(vmcv.Perp()>1)
3772 // Add here Acceptance cut???, charged particles CTS fid cut, neutral Calo real acceptance.
3775 dR = GetIsolationCut()->Radius(photonEta, photonPhi, partInConeEta, partInConePhi);
3777 if(dR > GetIsolationCut()->GetConeSize())
3780 sumPtInCone += partInConePt;
3781 if(partInConePt > GetIsolationCut()->GetPtThreshold() &&
3782 partInConePt < GetIsolationCut()->GetPtThresholdMax()) npart++;
3785 ///////END ISO MC/////////////////////////
3787 // Fill the histograms, only those in the defined calorimeter acceptance
3789 fhEtaPrimMC[kmcPrimPhoton]->Fill(photonPt , photonEta) ;
3790 fhPhiPrimMC[kmcPrimPhoton]->Fill(photonPt , photonPhi) ;
3791 fhEPrimMC [kmcPrimPhoton]->Fill(photonE) ;
3793 fhEtaPrimMC[mcIndex]->Fill(photonPt , photonEta) ;
3794 fhPhiPrimMC[mcIndex]->Fill(photonPt , photonPhi) ;
3795 fhEPrimMC [mcIndex]->Fill(photonE ) ;
3798 Bool_t isolated = kFALSE;
3799 if(GetIsolationCut()->GetICMethod() == AliIsolationCut::kSumPtIC &&
3800 (sumPtInCone < GetIsolationCut()->GetSumPtThreshold() ||
3801 sumPtInCone > GetIsolationCut()->GetSumPtThresholdMax()))
3804 if(GetIsolationCut()->GetICMethod() == AliIsolationCut::kPtThresIC &&
3810 fhPtPrimMCiso [mcIndex] ->Fill(photonPt) ;
3811 fhPtPrimMCiso [kmcPrimPhoton]->Fill(photonPt) ;
3814 }//loop on primaries
3816 if(GetDebug() > 0) printf("AliAnaParticleIsolation::FillAcceptanceHistograms() - End \n");
3821 //_____________________________________________________________________________________
3822 void AliAnaParticleIsolation::MakeSeveralICAnalysis(AliAODPWG4ParticleCorrelation* ph,
3826 //Isolation Cut Analysis for both methods and different pt cuts and cones
3827 Float_t ptC = ph->Pt();
3828 Float_t etaC = ph->Eta();
3829 Float_t phiC = ph->Phi();
3830 Int_t tag = ph->GetTag();
3833 if(fFillTaggedDecayHistograms)
3835 decayTag = ph->GetBtag(); // temporary
3836 if(decayTag < 0) decayTag = 0; // temporary
3840 printf("AliAnaParticleIsolation::MakeSeveralICAnalysis() - Isolate pT %2.2f, decay tag %d\n",ptC, decayTag);
3842 //Keep original setting used when filling AODs, reset at end of analysis
3843 Float_t ptthresorg = GetIsolationCut()->GetPtThreshold();
3844 Float_t ptfracorg = GetIsolationCut()->GetPtFraction();
3845 Float_t ptsumcorg = GetIsolationCut()->GetSumPtThreshold();
3846 Float_t rorg = GetIsolationCut()->GetConeSize();
3848 Float_t coneptsum = 0, coneptlead = 0;
3849 Int_t n [10][10];//[fNCones][fNPtThresFrac];
3850 Int_t nfrac[10][10];//[fNCones][fNPtThresFrac];
3851 Bool_t isolated = kFALSE;
3853 // Fill hist with all particles before isolation criteria
3854 fhENoIso ->Fill(ph->E());
3855 fhPtNoIso ->Fill(ptC);
3856 fhEtaPhiNoIso->Fill(etaC,phiC);
3860 if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
3861 fhPtNoIsoMC[kmcPhoton]->Fill(ptC);
3863 fhPtNoIsoMC[mcIndex]->Fill(ptC);
3866 // Candidates tagged as decay in another analysis (AliAnaPi0EbE)
3867 if(fFillTaggedDecayHistograms && decayTag > 0)
3869 for(Int_t ibit = 0; ibit < fNDecayBits; ibit++)
3871 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[ibit]))
3873 fhPtDecayNoIso[ibit] ->Fill(ptC);
3874 fhEtaPhiDecayNoIso[ibit]->Fill(etaC,phiC);
3878 if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
3879 fhPtDecayNoIsoMC[ibit][kmcPhoton]->Fill(ptC);
3881 fhPtDecayNoIsoMC[ibit][mcIndex]->Fill(ptC);
3885 } // decay histograms
3887 //Get vertex for photon momentum calculation
3888 Double_t vertex[] = {0,0,0} ; //vertex ;
3889 if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
3890 GetReader()->GetVertex(vertex);
3892 //Loop on cone sizes
3893 for(Int_t icone = 0; icone<fNCones; icone++)
3895 //Recover reference arrays with clusters and tracks
3896 TObjArray * refclusters = ph->GetObjArray(GetAODObjArrayName()+"Clusters");
3897 TObjArray * reftracks = ph->GetObjArray(GetAODObjArrayName()+"Tracks");
3899 //If too small or too large pt, skip
3900 if(ptC < GetMinPt() || ptC > GetMaxPt() ) continue ;
3902 //In case a more strict IC is needed in the produced AOD
3904 isolated = kFALSE; coneptsum = 0; coneptlead = 0;
3906 GetIsolationCut()->SetSumPtThreshold(100);
3907 GetIsolationCut()->SetPtThreshold(100);
3908 GetIsolationCut()->SetPtFraction(100);
3909 GetIsolationCut()->SetConeSize(fConeSizes[icone]);
3911 // retreive pt tracks to fill histo vs. pt leading
3912 //Fill pt distribution of particles in cone
3913 //fhPtLeadingPt(),fhPerpSumPtLeadingPt(),fhPerpPtLeadingPt(),
3915 // Tracks in perpendicular cones
3916 Double_t sumptPerp = 0. ;
3917 TObjArray * trackList = GetCTSTracks() ;
3918 for(Int_t itrack=0; itrack < trackList->GetEntriesFast(); itrack++)
3920 AliVTrack* track = (AliVTrack *) trackList->At(itrack);
3921 //fill the histograms at forward range
3924 printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Track not available?");
3928 Double_t dPhi = phiC - track->Phi() + TMath::PiOver2();
3929 Double_t dEta = etaC - track->Eta();
3930 Double_t arg = dPhi*dPhi + dEta*dEta;
3931 if(TMath::Sqrt(arg) < fConeSizes[icone])
3933 fhPerpPtLeadingPt[icone]->Fill(ptC,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
3934 sumptPerp+=track->Pt();
3937 dPhi = phiC - track->Phi() - TMath::PiOver2();
3938 arg = dPhi*dPhi + dEta*dEta;
3939 if(TMath::Sqrt(arg) < fConeSizes[icone])
3941 fhPerpPtLeadingPt[icone]->Fill(ptC,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
3942 sumptPerp+=track->Pt();
3946 fhPerpSumPtLeadingPt[icone]->Fill(ptC,sumptPerp);
3948 // Tracks in isolation cone, pT distribution and sum
3949 if(reftracks && GetIsolationCut()->GetParticleTypeInCone()!= AliIsolationCut::kOnlyNeutral)
3951 for(Int_t itrack=0; itrack < reftracks->GetEntriesFast(); itrack++)
3953 AliVTrack* track = (AliVTrack *) reftracks->At(itrack);
3955 Float_t rad = GetIsolationCut()->Radius(etaC, phiC, track->Eta(), track->Phi());
3957 if(rad > fConeSizes[icone]) continue ;
3959 fhPtLeadingPt[icone]->Fill(ptC, track->Pt());
3960 coneptsum += track->Pt();
3964 // Clusters in isolation cone, pT distribution and sum
3965 if(refclusters && GetIsolationCut()->GetParticleTypeInCone()!= AliIsolationCut::kOnlyCharged)
3967 TLorentzVector mom ;
3968 for(Int_t icalo=0; icalo < refclusters->GetEntriesFast(); icalo++)
3970 AliVCluster* calo = (AliVCluster *) refclusters->At(icalo);
3972 calo->GetMomentum(mom,vertex) ;//Assume that come from vertex in straight line
3974 Float_t rad = GetIsolationCut()->Radius(etaC, phiC, mom.Eta(), mom.Phi());
3976 if(rad > fConeSizes[icone]) continue ;
3978 fhPtLeadingPt[icone]->Fill(ptC, mom.Pt());
3979 coneptsum += mom.Pt();
3983 fhSumPtLeadingPt[icone]->Fill(ptC,coneptsum);
3987 if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
3988 fhSumPtLeadingPtMC[kmcPhoton][icone]->Fill(ptC,coneptsum) ;
3990 fhSumPtLeadingPtMC[mcIndex][icone]->Fill(ptC,coneptsum) ;
3995 //Loop on pt thresholds
3996 for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
3999 nfrac[icone][ipt]=0;
4000 GetIsolationCut()->SetPtThreshold(fPtThresholds[ipt]);
4001 GetIsolationCut()->SetPtFraction(fPtFractions[ipt]) ;
4002 GetIsolationCut()->SetSumPtThreshold(fSumPtThresholds[ipt]);
4004 GetIsolationCut()->MakeIsolationCut(reftracks, refclusters,
4005 GetReader(), GetCaloPID(),
4007 n[icone][ipt],nfrac[icone][ipt],
4008 coneptsum, coneptlead, isolated);
4010 // Normal pT threshold cut
4014 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - cone size %1.1f, ptThres %1.1f, sumptThresh %1.1f\n",
4015 fConeSizes[icone],fPtThresholds[ipt],fSumPtThresholds[ipt]);
4016 printf("\t n %d, nfrac %d, coneptsum %2.2f\n",
4017 n[icone][ipt],nfrac[icone][ipt],coneptsum);
4019 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - pt %1.1f, eta %1.1f, phi %1.1f\n",ptC, etaC, phiC);
4022 if(n[icone][ipt] == 0)
4025 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling pt threshold loop\n");
4027 fhPtThresIsolated [icone][ipt]->Fill(ptC);
4028 fhEtaPhiPtThresIso[icone][ipt]->Fill(etaC,phiC);
4030 if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
4032 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
4034 fhPtPtThresDecayIso [icone][ipt]->Fill(ptC);
4035 fhEtaPhiPtThresDecayIso[icone][ipt]->Fill(etaC,phiC);
4041 if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton) )
4042 fhPtThresIsolatedMC[kmcPhoton][icone][ipt]->Fill(ptC) ;
4044 fhPtThresIsolatedMC[mcIndex][icone][ipt]->Fill(ptC) ;
4049 // pt in cone fraction
4050 if(nfrac[icone][ipt] == 0)
4053 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling frac loop\n");
4055 fhPtFracIsolated [icone][ipt]->Fill(ptC);
4056 fhEtaPhiPtFracIso[icone][ipt]->Fill(etaC,phiC);
4058 if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
4060 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
4062 fhPtPtFracDecayIso [icone][ipt]->Fill(ptC);
4063 fhEtaPhiPtFracDecayIso[icone][ipt]->Fill(etaC,phiC);
4069 if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
4070 fhPtFracIsolatedMC[kmcPhoton][icone][ipt]->Fill(ptC) ;
4072 fhPtFracIsolatedMC[mcIndex][icone][ipt]->Fill(ptC) ;
4077 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - checking IC method : %i\n",GetIsolationCut()->GetICMethod());
4079 //Pt threshold on pt cand/ sum in cone histograms
4080 if(coneptsum < fSumPtThresholds[ipt])
4083 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling sum loop\n");
4085 fhSumPtIsolated [icone][ipt]->Fill(ptC) ;
4086 fhEtaPhiPtSumIso[icone][ipt]->Fill(etaC, phiC) ;
4088 if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
4090 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
4092 fhPtPtSumDecayIso[icone][ipt]->Fill(ptC);
4093 fhEtaPhiPtSumDecayIso[icone][ipt]->Fill(etaC, phiC) ;
4099 if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
4100 fhSumPtIsolatedMC[kmcPhoton][icone][ipt]->Fill(ptC) ;
4102 fhSumPtIsolatedMC[mcIndex][icone][ipt]->Fill(ptC) ;
4106 // pt sum pt frac method
4107 // if( ((fPtFractions[ipt]*ptC < fSumPtThresholds[ipt]) && (coneptsum < fSumPtThresholds[ipt])) || ((fPtFractions[ipt]*ptC > fSumPtThresholds[ipt]) && (coneptsum < fPtFractions[ipt]*ptC)) )
4109 if(coneptsum < fPtFractions[ipt]*ptC)
4112 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling PtFrac PtSum loop\n");
4114 fhPtFracPtSumIso [icone][ipt]->Fill(ptC) ;
4115 fhEtaPhiFracPtSumIso[icone][ipt]->Fill(etaC,phiC) ;
4117 if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
4119 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
4121 fhPtFracPtSumDecayIso [icone][ipt]->Fill(ptC);
4122 fhEtaPhiFracPtSumDecayIso[icone][ipt]->Fill(etaC,phiC);
4128 Float_t cellDensity = GetIsolationCut()->GetCellDensity( ph, GetReader());
4129 if(coneptsum < fSumPtThresholds[ipt]*cellDensity)
4132 printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling density loop\n");
4134 fhPtSumDensityIso [icone][ipt]->Fill(ptC) ;
4135 fhEtaPhiSumDensityIso[icone][ipt]->Fill(etaC,phiC) ;
4137 if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
4139 if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
4141 fhPtSumDensityDecayIso [icone][ipt]->Fill(ptC);
4142 fhEtaPhiSumDensityDecayIso[icone][ipt]->Fill(etaC, phiC);
4151 //Reset original parameters for AOD analysis
4152 GetIsolationCut()->SetPtThreshold(ptthresorg);
4153 GetIsolationCut()->SetPtFraction(ptfracorg);
4154 GetIsolationCut()->SetSumPtThreshold(ptsumcorg);
4155 GetIsolationCut()->SetConeSize(rorg);
4159 //_____________________________________________________________
4160 void AliAnaParticleIsolation::Print(const Option_t * opt) const
4163 //Print some relevant parameters set for the analysis
4167 printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
4168 AliAnaCaloTrackCorrBaseClass::Print(" ");
4170 printf("ReMake Isolation = %d \n", fReMakeIC) ;
4171 printf("Make Several Isolation = %d \n", fMakeSeveralIC) ;
4172 printf("Calorimeter for isolation = %s \n", fCalorimeter.Data()) ;
4173 printf("Detector for candidate isolation = %s \n", fIsoDetector.Data()) ;
4177 printf("N Cone Sizes = %d\n", fNCones) ;
4178 printf("Cone Sizes = \n") ;
4179 for(Int_t i = 0; i < fNCones; i++)
4180 printf(" %1.2f;", fConeSizes[i]) ;
4183 printf("N pT thresholds/fractions = %d\n", fNPtThresFrac) ;
4184 printf(" pT thresholds = \n") ;
4185 for(Int_t i = 0; i < fNPtThresFrac; i++)
4186 printf(" %2.2f;", fPtThresholds[i]) ;
4190 printf(" pT fractions = \n") ;
4191 for(Int_t i = 0; i < fNPtThresFrac; i++)
4192 printf(" %2.2f;", fPtFractions[i]) ;
4196 printf("sum pT thresholds = \n") ;
4197 for(Int_t i = 0; i < fNPtThresFrac; i++)
4198 printf(" %2.2f;", fSumPtThresholds[i]) ;