]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG4/PartCorrDep/AliAnaPhoton.cxx
Completely reworked version of TPC CA tracker (Sergey)
[u/mrichter/AliRoot.git] / PWG4 / PartCorrDep / AliAnaPhoton.cxx
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
35 ClassImp(AliAnaPhoton)
36   
37 //____________________________________________________________________________
38   AliAnaPhoton::AliAnaPhoton() : 
39     AliAnaPartCorrBaseClass(), fCalorimeter(""), 
40     fMinDist(0.),fMinDist2(0.),fMinDist3(0.),
41     fhPtPhoton(0),fhPhiPhoton(0),fhEtaPhoton(0),
42     //MC
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 //____________________________________________________________________________
58 AliAnaPhoton::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 //_________________________________________________________________________
75 AliAnaPhoton & 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 //____________________________________________________________________________
114 AliAnaPhoton::~AliAnaPhoton() 
115 {
116   //dtor
117
118 }
119
120
121 //________________________________________________________________________
122 TList *  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
146           ("hPhiPhoton","#phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); 
147         fhPhiPhoton->SetYTitle("#phi");
148         fhPhiPhoton->SetXTitle("p_{T #gamma} (GeV/c)");
149         outputContainer->Add(fhPhiPhoton) ; 
150         
151         fhEtaPhoton  = new TH2F
152           ("hEtaPhoton","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); 
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)
284         //parlist += GetFidCut()->GetFidCutParametersList() 
285         
286         TObjString *oString= new TObjString(parList) ;
287         outputContainer->Add(oString);
288         
289         return outputContainer ;
290         
291 }
292
293 //____________________________________________________________________________
294 void 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 //__________________________________________________________________
308 void  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);
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());     
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
367                         if(GetDebug() > 1) printf("AliAnaPhoton::FillAOD: PDG of identified particle %d\n",aodph.GetPdg());      
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
409 if(GetDebug() > 1) printf("AliAnaPhoton::FillAOD: End fill AODs \n");  
410
411 }
412
413 //__________________________________________________________________
414 void  AliAnaPhoton::MakeAnalysisFillHistograms() 
415 {
416         //Do analysis and fill histograms
417
418         //Get vertex for photon momentum calculation
419         //Double_t v[]={0,0,0} ; //vertex ;
420         //if(!GetReader()->GetDataType()== AliCaloTrackReader::kMC) 
421                 //GetReader()->GetVertex(v);
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
431                 if(GetDebug() > 3) 
432                   printf("AliAnaPhoton::FillHistos: PDG %d, MC TAG %d, Calorimeter %s\n", ph->GetPdg(),ph->GetTag(), (ph->GetDetector()).Data()) ;
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                 
439                 if(GetDebug() > 1) 
440                   printf("AliAnaPhoton::FillHistos: ID Photon: pt %f, phi %f, eta %f\n", ph->Pt(),ph->Phi(),ph->Eta()) ;
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{
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 //__________________________________________________________________
495 void 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