Including appropriate header
[u/mrichter/AliRoot.git] / PWG4 / PartCorrDep / AliAnaPhoton.cxx
CommitLineData
1c5acb87 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
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 **************************************************************************/
15/* $Id: AliAnaPhoton.cxx 28688 2008-09-11 15:04:07Z gconesab $ */
16
17//_________________________________________________________________________
18//
19// Class for the photon identification.
20// Clusters from calorimeters are identified as photons
21// and kept in the AOD. Few histograms produced.
22//
23// -- Author: Gustavo Conesa (LNF-INFN)
24//////////////////////////////////////////////////////////////////////////////
25
26
27// --- ROOT system ---
28#include <TH2F.h>
29
30// --- Analysis system ---
31#include "AliAnaPhoton.h"
32#include "AliCaloTrackReader.h"
33#include "AliCaloPID.h"
34
35ClassImp(AliAnaPhoton)
36
37//____________________________________________________________________________
38 AliAnaPhoton::AliAnaPhoton() :
39 AliAnaPartCorrBaseClass(), fCalorimeter(""),
7175a03a 40 fMinDist(0.),fMinDist2(0.),fMinDist3(0.),
41 fhPtPhoton(0),fhPhiPhoton(0),fhEtaPhoton(0),
42 //MC
1c5acb87 43 fhPtPrompt(0),fhPhiPrompt(0),fhEtaPrompt(0),
44 fhPtFragmentation(0),fhPhiFragmentation(0),fhEtaFragmentation(0),
45 fhPtPi0Decay(0),fhPhiPi0Decay(0),fhEtaPi0Decay(0),
46 fhPtOtherDecay(0),fhPhiOtherDecay(0),fhEtaOtherDecay(0),
47 fhPtConversion(0),fhPhiConversion(0),fhEtaConversion(0),
48 fhPtUnknown(0),fhPhiUnknown(0),fhEtaUnknown(0)
49{
50 //default ctor
51
52 //Initialize parameters
53 InitParameters();
54
55}
56
57//____________________________________________________________________________
58AliAnaPhoton::AliAnaPhoton(const AliAnaPhoton & g) :
59 AliAnaPartCorrBaseClass(g), fCalorimeter(g.fCalorimeter),
60 fMinDist(g.fMinDist),fMinDist2(g.fMinDist2), fMinDist3(g.fMinDist3),
61 fhPtPhoton(g.fhPtPhoton),fhPhiPhoton(g.fhPhiPhoton),fhEtaPhoton(g.fhEtaPhoton),
62 //MC
63 fhPtPrompt(g.fhPtPrompt),fhPhiPrompt(g.fhPhiPrompt),fhEtaPrompt(g.fhEtaPrompt),
64 fhPtFragmentation(g.fhPtFragmentation),fhPhiFragmentation(g.fhPhiFragmentation),fhEtaFragmentation(g.fhEtaFragmentation),
65 fhPtPi0Decay(g.fhPtPi0Decay),fhPhiPi0Decay(g.fhPhiPi0Decay),fhEtaPi0Decay(g.fhEtaPi0Decay),
66 fhPtOtherDecay(g.fhPtOtherDecay),fhPhiOtherDecay(g.fhPhiOtherDecay),fhEtaOtherDecay(g.fhEtaOtherDecay),
67 fhPtConversion(g. fhPtConversion),fhPhiConversion(g.fhPhiConversion),fhEtaConversion(g.fhEtaConversion),
68 fhPtUnknown(g.fhPtUnknown),fhPhiUnknown(g.fhPhiUnknown),fhEtaUnknown(g.fhEtaUnknown)
69{
70 // cpy ctor
71
72}
73
74//_________________________________________________________________________
75AliAnaPhoton & AliAnaPhoton::operator = (const AliAnaPhoton & g)
76{
77 // assignment operator
78
79 if(&g == this) return *this;
80
81 fCalorimeter = g.fCalorimeter ;
82 fMinDist = g.fMinDist;
83 fMinDist2 = g.fMinDist2;
84 fMinDist3 = g.fMinDist3;
85
86 fhPtPhoton = g.fhPtPhoton ;
87 fhPhiPhoton = g.fhPhiPhoton ;
88 fhEtaPhoton = g.fhEtaPhoton ;
89
90 fhPtPrompt = g.fhPtPrompt;
91 fhPhiPrompt = g.fhPhiPrompt;
92 fhEtaPrompt = g.fhEtaPrompt;
93 fhPtFragmentation = g.fhPtFragmentation;
94 fhPhiFragmentation = g.fhPhiFragmentation;
95 fhEtaFragmentation = g.fhEtaFragmentation;
96 fhPtPi0Decay = g.fhPtPi0Decay;
97 fhPhiPi0Decay = g.fhPhiPi0Decay;
98 fhEtaPi0Decay = g.fhEtaPi0Decay;
99 fhPtOtherDecay = g.fhPtOtherDecay;
100 fhPhiOtherDecay = g.fhPhiOtherDecay;
101 fhEtaOtherDecay = g.fhEtaOtherDecay;
102 fhPtConversion = g. fhPtConversion;
103 fhPhiConversion = g.fhPhiConversion;
104 fhEtaConversion = g.fhEtaConversion;
105 fhPtUnknown = g.fhPtUnknown;
106 fhPhiUnknown = g.fhPhiUnknown;
107 fhEtaUnknown = g.fhEtaUnknown;
108
109 return *this;
110
111}
112
113//____________________________________________________________________________
114AliAnaPhoton::~AliAnaPhoton()
115{
116 //dtor
117
118}
119
120
121//________________________________________________________________________
122TList * AliAnaPhoton::GetCreateOutputObjects()
123{
124 // Create histograms to be saved in output file and
125 // store them in outputContainer
126 TList * outputContainer = new TList() ;
127 outputContainer->SetName("PhotonHistos") ;
128
129 Int_t nptbins = GetHistoNPtBins();
130 Int_t nphibins = GetHistoNPhiBins();
131 Int_t netabins = GetHistoNEtaBins();
132 Float_t ptmax = GetHistoPtMax();
133 Float_t phimax = GetHistoPhiMax();
134 Float_t etamax = GetHistoEtaMax();
135 Float_t ptmin = GetHistoPtMin();
136 Float_t phimin = GetHistoPhiMin();
137 Float_t etamin = GetHistoEtaMin();
138
139 //Histograms of highest Photon identified in Event
140 fhPtPhoton = new TH1F("hPtPhoton","Number of #gamma over calorimeter",nptbins,ptmin,ptmax);
141 fhPtPhoton->SetYTitle("N");
142 fhPtPhoton->SetXTitle("p_{T #gamma}(GeV/c)");
143 outputContainer->Add(fhPtPhoton) ;
144
145 fhPhiPhoton = new TH2F
7175a03a 146 ("hPhiPhoton","#phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax);
1c5acb87 147 fhPhiPhoton->SetYTitle("#phi");
148 fhPhiPhoton->SetXTitle("p_{T #gamma} (GeV/c)");
149 outputContainer->Add(fhPhiPhoton) ;
150
151 fhEtaPhoton = new TH2F
7175a03a 152 ("hEtaPhoton","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax);
1c5acb87 153 fhEtaPhoton->SetYTitle("#eta");
154 fhEtaPhoton->SetXTitle("p_{T #gamma} (GeV/c)");
155 outputContainer->Add(fhEtaPhoton) ;
156
157 if(IsDataMC()){
158
159 fhPtPrompt = new TH1F("hPtPrompt","Number of #gamma over calorimeter",nptbins,ptmin,ptmax);
160 fhPtPrompt->SetYTitle("N");
161 fhPtPrompt->SetXTitle("p_{T #gamma}(GeV/c)");
162 outputContainer->Add(fhPtPrompt) ;
163
164 fhPhiPrompt = new TH2F
165 ("hPhiPrompt","#phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax);
166 fhPhiPrompt->SetYTitle("#phi");
167 fhPhiPrompt->SetXTitle("p_{T #gamma} (GeV/c)");
168 outputContainer->Add(fhPhiPrompt) ;
169
170 fhEtaPrompt = new TH2F
171 ("hEtaPrompt","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax);
172 fhEtaPrompt->SetYTitle("#eta");
173 fhEtaPrompt->SetXTitle("p_{T #gamma} (GeV/c)");
174 outputContainer->Add(fhEtaPrompt) ;
175
176 fhPtFragmentation = new TH1F("hPtFragmentation","Number of #gamma over calorimeter",nptbins,ptmin,ptmax);
177 fhPtFragmentation->SetYTitle("N");
178 fhPtFragmentation->SetXTitle("p_{T #gamma}(GeV/c)");
179 outputContainer->Add(fhPtFragmentation) ;
180
181 fhPhiFragmentation = new TH2F
182 ("hPhiFragmentation","#phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax);
183 fhPhiFragmentation->SetYTitle("#phi");
184 fhPhiFragmentation->SetXTitle("p_{T #gamma} (GeV/c)");
185 outputContainer->Add(fhPhiFragmentation) ;
186
187 fhEtaFragmentation = new TH2F
188 ("hEtaFragmentation","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax);
189 fhEtaFragmentation->SetYTitle("#eta");
190 fhEtaFragmentation->SetXTitle("p_{T #gamma} (GeV/c)");
191 outputContainer->Add(fhEtaFragmentation) ;
192
193 fhPtPi0Decay = new TH1F("hPtPi0Decay","Number of #gamma over calorimeter",nptbins,ptmin,ptmax);
194 fhPtPi0Decay->SetYTitle("N");
195 fhPtPi0Decay->SetXTitle("p_{T #gamma}(GeV/c)");
196 outputContainer->Add(fhPtPi0Decay) ;
197
198 fhPhiPi0Decay = new TH2F
199 ("hPhiPi0Decay","#phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax);
200 fhPhiPi0Decay->SetYTitle("#phi");
201 fhPhiPi0Decay->SetXTitle("p_{T #gamma} (GeV/c)");
202 outputContainer->Add(fhPhiPi0Decay) ;
203
204 fhEtaPi0Decay = new TH2F
205 ("hEtaPi0Decay","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax);
206 fhEtaPi0Decay->SetYTitle("#eta");
207 fhEtaPi0Decay->SetXTitle("p_{T #gamma} (GeV/c)");
208 outputContainer->Add(fhEtaPi0Decay) ;
209
210 fhPtOtherDecay = new TH1F("hPtOtherDecay","Number of #gamma over calorimeter",nptbins,ptmin,ptmax);
211 fhPtOtherDecay->SetYTitle("N");
212 fhPtOtherDecay->SetXTitle("p_{T #gamma}(GeV/c)");
213 outputContainer->Add(fhPtOtherDecay) ;
214
215 fhPhiOtherDecay = new TH2F
216 ("hPhiOtherDecay","#phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax);
217 fhPhiOtherDecay->SetYTitle("#phi");
218 fhPhiOtherDecay->SetXTitle("p_{T #gamma} (GeV/c)");
219 outputContainer->Add(fhPhiOtherDecay) ;
220
221 fhEtaOtherDecay = new TH2F
222 ("hEtaOtherDecay","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax);
223 fhEtaOtherDecay->SetYTitle("#eta");
224 fhEtaOtherDecay->SetXTitle("p_{T #gamma} (GeV/c)");
225 outputContainer->Add(fhEtaOtherDecay) ;
226
227 fhPtConversion = new TH1F("hPtConversion","Number of #gamma over calorimeter",nptbins,ptmin,ptmax);
228 fhPtConversion->SetYTitle("N");
229 fhPtConversion->SetXTitle("p_{T #gamma}(GeV/c)");
230 outputContainer->Add(fhPtConversion) ;
231
232 fhPhiConversion = new TH2F
233 ("hPhiConversion","#phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax);
234 fhPhiConversion->SetYTitle("#phi");
235 fhPhiConversion->SetXTitle("p_{T #gamma} (GeV/c)");
236 outputContainer->Add(fhPhiConversion) ;
237
238 fhEtaConversion = new TH2F
239 ("hEtaConversion","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax);
240 fhEtaConversion->SetYTitle("#eta");
241 fhEtaConversion->SetXTitle("p_{T #gamma} (GeV/c)");
242 outputContainer->Add(fhEtaConversion) ;
243
244 fhPtUnknown = new TH1F("hPtUnknown","Number of #gamma over calorimeter",nptbins,ptmin,ptmax);
245 fhPtUnknown->SetYTitle("N");
246 fhPtUnknown->SetXTitle("p_{T #gamma}(GeV/c)");
247 outputContainer->Add(fhPtUnknown) ;
248
249 fhPhiUnknown = new TH2F
250 ("hPhiUnknown","#phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax);
251 fhPhiUnknown->SetYTitle("#phi");
252 fhPhiUnknown->SetXTitle("p_{T #gamma} (GeV/c)");
253 outputContainer->Add(fhPhiUnknown) ;
254
255 fhEtaUnknown = new TH2F
256 ("hEtaUnknown","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax);
257 fhEtaUnknown->SetYTitle("#eta");
258 fhEtaUnknown->SetXTitle("p_{T #gamma} (GeV/c)");
259 outputContainer->Add(fhEtaUnknown) ;
260 }//Histos with MC
261
262 //Save parameters used for analysis
263 TString parList ; //this will be list of parameters used for this analysis.
264 char onePar[255] ;
265
266 sprintf(onePar,"--- AliAnaPhoton ---\n") ;
267 parList+=onePar ;
268 sprintf(onePar,"Calorimeter: %s\n",fCalorimeter.Data()) ;
269 parList+=onePar ;
270 sprintf(onePar,"fMinDist =%2.2f (Minimal distance to bad channel to accept cluster) \n",fMinDist) ;
271 parList+=onePar ;
272 sprintf(onePar,"fMinDist2=%2.2f (Cuts on Minimal distance to study acceptance evaluation) \n",fMinDist2) ;
273 parList+=onePar ;
274 sprintf(onePar,"fMinDist3=%2.2f (One more cut on distance used for acceptance-efficiency study) \n",fMinDist3) ;
275 parList+=onePar ;
276
277 //Get parameters set in base class.
278 parList += GetBaseParametersList() ;
279
280 //Get parameters set in PID class.
281 parList += GetCaloPID()->GetPIDParametersList() ;
282
283 //Get parameters set in FidutialCut class (not available yet)
7175a03a 284 //parlist += GetFidCut()->GetFidCutParametersList()
1c5acb87 285
286 TObjString *oString= new TObjString(parList) ;
287 outputContainer->Add(oString);
288
289 return outputContainer ;
290
291}
292
293//____________________________________________________________________________
294void AliAnaPhoton::InitParameters()
295{
296
297 //Initialize the parameters of the analysis.
298 SetOutputAODClassName("AliAODPWG4Particle");
299 SetOutputAODName("photons");
300 fCalorimeter = "PHOS" ;
301 fMinDist = 2.;
302 fMinDist2 = 4.;
303 fMinDist3 = 5.;
304
305}
306
307//__________________________________________________________________
308void AliAnaPhoton::MakeAnalysisFillAOD()
309{
310 //Do analysis and fill aods
311 //Search for photons in fCalorimeter
312
313 TClonesArray * pl = new TClonesArray;
314
315 //Get vertex for photon momentum calculation
316 Double_t vertex[]={0,0,0} ; //vertex ;
317 if(!GetReader()->GetDataType()== AliCaloTrackReader::kMC) GetReader()->GetVertex(vertex);
318
319 //Select the Calorimeter of the photon
320 if(fCalorimeter == "PHOS")
321 pl = GetAODPHOS();
322 else if (fCalorimeter == "EMCAL")
323 pl = GetAODEMCAL();
324 //Fill AODCaloClusters and AODParticle with PHOS aods
325 TLorentzVector mom ;
326 for(Int_t icalo = 0; icalo < pl->GetEntriesFast(); icalo++){
327 AliAODCaloCluster * calo = (AliAODCaloCluster*) (pl->At(icalo));
328
329 //Cluster selection, not charged, with photon id and in fidutial cut
330 //Get Momentum vector,
331 calo->GetMomentum(mom,vertex);//Assume that come from vertex in straight line
332 //If too small or big pt, skip it
333 if(mom.Pt() < GetMinPt() || mom.Pt() > GetMaxPt() ) continue ;
334 //Check acceptance selection
335 if(IsFidutialCutOn()){
336 Bool_t in = GetFidutialCut()->IsInFidutialCut(mom,fCalorimeter) ;
337 if(! in ) continue ;
338 }
339
340 //Create AOD for analysis
341 AliAODPWG4Particle aodph = AliAODPWG4Particle(mom);
342 aodph.SetLabel(calo->GetLabel(0));
343 //printf("Index %d, Id %d\n",icalo, calo->GetID());
344 //Set the indeces of the original caloclusters
345 aodph.SetCaloLabel(calo->GetID(),-1);
346 aodph.SetDetector(fCalorimeter);
7175a03a 347 if(GetDebug() > 1)
348 printf("AliAnaPhoton::FillAOD: Min pt cut and fidutial cut passed: pt %3.2f, phi %2.2f, eta %1.2f\n",aodph.Pt(),aodph.Phi(),aodph.Eta());
1c5acb87 349
350 //Check Distance to Bad channel, set bit.
351 Double_t distBad=calo->GetDistToBadChannel() ; //Distance to bad channel
352 if(distBad < 0.) distBad=9999. ; //workout strange convension dist = -1. ;
353 if(distBad < fMinDist) //In bad channel (PHOS cristal size 2.2x2.2 cm)
354 continue ;
355
356 if(GetDebug() > 1) printf("AliAnaPhoton::FillAOD: Bad channel cut passed %4.2f\n",distBad);
357
358 if(distBad > fMinDist3) aodph.SetDistToBad(2) ;
359 else if(distBad > fMinDist2) aodph.SetDistToBad(1) ;
360 else aodph.SetDistToBad(0) ;
361
362 //Check PID
363 //PID selection or bit setting
364 if(GetReader()->GetDataType() == AliCaloTrackReader::kMC){
365 //Get most probable PID, check PID weights (in MC this option is mandatory)
366 aodph.SetPdg(GetCaloPID()->GetPdg(fCalorimeter,calo->PID(),mom.E()));//PID with weights
7175a03a 367 if(GetDebug() > 1) printf("AliAnaPhoton::FillAOD: PDG of identified particle %d\n",aodph.GetPdg());
1c5acb87 368 //If primary is not photon, skip it.
369 if(aodph.GetPdg() != AliCaloPID::kPhoton) continue ;
370 }
371 else if(IsCaloPIDOn()){
372 //Skip matched clusters with tracks
373 if(calo->GetNTracksMatched() > 0) continue ;
374
375 //Get most probable PID, 2 options check PID weights
376 //or redo PID, recommended option for EMCal.
377 if(!IsCaloPIDRecalculationOn())
378 aodph.SetPdg(GetCaloPID()->GetPdg(fCalorimeter,calo->PID(),mom.E()));//PID with weights
379 else
380 aodph.SetPdg(GetCaloPID()->GetPdg(fCalorimeter,mom,calo));//PID recalculated
381
382 if(GetDebug() > 1) printf("AliAnaPhoton::FillAOD: PDG of identified particle %d\n",aodph.GetPdg());
383
384 //If cluster does not pass pid, not photon, skip it.
385 if(aodph.GetPdg() != AliCaloPID::kPhoton) continue ;
386
387 }
388 else{
389 //Set PID bits for later selection (AliAnaPi0 for example)
390 //GetPDG already called in SetPIDBits.
391 GetCaloPID()->SetPIDBits(fCalorimeter,calo,&aodph);
392 if(GetDebug() > 1) printf("AliAnaPhoton::FillAOD: PID Bits set \n");
393 }
394
395 if(GetDebug() > 1) printf("AliAnaPhoton::FillAOD: Photon selection cuts passed: pT %3.2f, pdg %d\n",aodph.Pt(), aodph.GetPdg());
396
397 //Play with the MC stack if available
398 //Check origin of the candidates
399 if(IsDataMC()){
400 aodph.SetTag(GetCaloPID()->CheckOrigin(calo->GetLabel(0),GetMCStack()));
401 if(GetDebug() > 0) printf("AliAnaPhoton::FillAOD: Origin of candidate %d\n",aodph.GetTag());
402 }//Work with stack also
403
404 //Add AOD with photon object to aod branch
405 AddAODParticle(aodph);
406
407 }//loop
408
409if(GetDebug() > 1) printf("AliAnaPhoton::FillAOD: End fill AODs \n");
410
411}
412
413//__________________________________________________________________
414void AliAnaPhoton::MakeAnalysisFillHistograms()
415{
416 //Do analysis and fill histograms
417
418 //Get vertex for photon momentum calculation
7175a03a 419 //Double_t v[]={0,0,0} ; //vertex ;
1c5acb87 420 //if(!GetReader()->GetDataType()== AliCaloTrackReader::kMC)
7175a03a 421 //GetReader()->GetVertex(v);
1c5acb87 422
423 //Loop on stored AOD photons
424 Int_t naod = GetOutputAODBranch()->GetEntriesFast();
425 if(GetDebug() > 0) printf("AliAnaPhoton::FillHistos: aod branch entries %d\n", naod);
426
427 for(Int_t iaod = 0; iaod < naod ; iaod++){
428 AliAODPWG4Particle* ph = (AliAODPWG4Particle*) (GetOutputAODBranch()->At(iaod));
429 Int_t pdg = ph->GetPdg();
430
7175a03a 431 if(GetDebug() > 3)
432 printf("AliAnaPhoton::FillHistos: PDG %d, MC TAG %d, Calorimeter %s\n", ph->GetPdg(),ph->GetTag(), (ph->GetDetector()).Data()) ;
1c5acb87 433
434 //If PID used, fill histos with photons in Calorimeter fCalorimeter
435 if(IsCaloPIDOn())
436 if(pdg != AliCaloPID::kPhoton) continue;
437 if(ph->GetDetector() != fCalorimeter) continue;
438
7175a03a 439 if(GetDebug() > 1)
440 printf("AliAnaPhoton::FillHistos: ID Photon: pt %f, phi %f, eta %f\n", ph->Pt(),ph->Phi(),ph->Eta()) ;
1c5acb87 441
442 //Fill photon histograms
443 Float_t ptcluster = ph->Pt();
444 Float_t phicluster = ph->Phi();
445 Float_t etacluster = ph->Eta();
446
447 fhPtPhoton ->Fill(ptcluster);
448 fhPhiPhoton ->Fill(ptcluster,phicluster);
449 fhEtaPhoton ->Fill(ptcluster,etacluster);
450
451 if(IsDataMC()){
452 Int_t tag =ph->GetTag();
453 if(tag == AliCaloPID::kMCPrompt){
454 fhPtPrompt ->Fill(ptcluster);
455 fhPhiPrompt ->Fill(ptcluster,phicluster);
456 fhEtaPrompt ->Fill(ptcluster,etacluster);
457 }
458 else if(tag==AliCaloPID::kMCFragmentation)
459 {
460 fhPtFragmentation ->Fill(ptcluster);
461 fhPhiFragmentation ->Fill(ptcluster,phicluster);
462 fhEtaFragmentation ->Fill(ptcluster,etacluster);
463 }
464 else if(tag==AliCaloPID::kMCPi0Decay)
465 {
466 fhPtPi0Decay ->Fill(ptcluster);
467 fhPhiPi0Decay ->Fill(ptcluster,phicluster);
468 fhEtaPi0Decay ->Fill(ptcluster,etacluster);
469 }
470 else if(tag==AliCaloPID::kMCEtaDecay || tag==AliCaloPID::kMCOtherDecay)
471 {
472 fhPtOtherDecay ->Fill(ptcluster);
473 fhPhiOtherDecay ->Fill(ptcluster,phicluster);
474 fhEtaOtherDecay ->Fill(ptcluster,etacluster);
475 }
476 else if(tag==AliCaloPID::kMCConversion)
477 {
478 fhPtConversion ->Fill(ptcluster);
479 fhPhiConversion ->Fill(ptcluster,phicluster);
480 fhEtaConversion ->Fill(ptcluster,etacluster);
481 }
482 else{
1c5acb87 483 fhPtUnknown ->Fill(ptcluster);
484 fhPhiUnknown ->Fill(ptcluster,phicluster);
485 fhEtaUnknown ->Fill(ptcluster,etacluster);
486 }
487 }//Histograms with MC
488
489 }// aod loop
490
491}
492
493
494//__________________________________________________________________
495void AliAnaPhoton::Print(const Option_t * opt) const
496{
497 //Print some relevant parameters set for the analysis
498
499 if(! opt)
500 return;
501
502 printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
503 AliAnaPartCorrBaseClass::Print(" ");
504 printf("Calorimeter = %s\n", fCalorimeter.Data()) ;
505 printf("Min Distance to Bad Channel = %2.1f\n",fMinDist);
506 printf("Min Distance to Bad Channel 2 = %2.1f\n",fMinDist2);
507 printf("Min Distance to Bad Channel 3 = %2.1f\n",fMinDist3);
508 printf(" \n") ;
509
510}