]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG4/PartCorrDep/AliAnaPhotonConvInCalo.cxx
Add cluster disitribution histograms as a function of eta/phi and depending on V0...
[u/mrichter/AliRoot.git] / PWG4 / PartCorrDep / AliAnaPhotonConvInCalo.cxx
CommitLineData
5812a064 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
16//_________________________________________________________________________
17//
18// Conversions pairs analysis
19// Check if cluster comes from a conversion in the material in front of the calorimeter
20// Do invariant mass of all pairs, if mass is close to 0, then it is conversion.
21// Input are selected clusters with AliAnaPhoton
22//
23//
24//-- Author: Gustavo Conesa (LPSC-IN2P3-CNRS)
25//////////////////////////////////////////////////////////////////////////////
26
27
28// --- ROOT system ---
29#include <TH2F.h>
30#include <TH3D.h>
31#include <TClonesArray.h>
32#include <TObjString.h>
33#include "TParticle.h"
34#include "TDatabasePDG.h"
35
36// --- Analysis system ---
37#include "AliAnaPhotonConvInCalo.h"
38#include "AliCaloTrackReader.h"
39#include "AliStack.h"
40#include "AliCaloPID.h"
41#include "AliMCAnalysisUtils.h"
42#include "AliFiducialCut.h"
43#include "AliVCluster.h"
44#include "AliAODMCParticle.h"
45
46ClassImp(AliAnaPhotonConvInCalo)
47
48//________________________________________
49AliAnaPhotonConvInCalo::AliAnaPhotonConvInCalo() :
50AliAnaPartCorrBaseClass(),
51fRemoveConvertedPair(kFALSE),
52fAddConvertedPairsToAOD(kFALSE),
53fMassCut(0),
54fConvAsymCut(1.), fConvDEtaCut(2.),
55fConvDPhiMinCut(-1.), fConvDPhiMaxCut(7.),
56
57// Histograms
58fhPtPhotonConv(0), fhEtaPhiPhotonConv(0), fhEtaPhi05PhotonConv(0),
59fhConvDeltaEta(0), fhConvDeltaPhi(0), fhConvDeltaEtaPhi(0),
60fhConvAsym(0), fhConvPt(0),
61fhConvDistEta(0), fhConvDistEn(0), fhConvDistMass(0),
62fhConvDistEtaCutEta(0), fhConvDistEnCutEta(0), fhConvDistMassCutEta(0),
63fhConvDistEtaCutMass(0), fhConvDistEnCutMass(0),
64fhConvDistEtaCutAsy(0), fhConvDistEnCutAsy(0),
65
66// MC histograms
67fhPtConversionTagged(0), fhPtAntiNeutronTagged(0),
68fhPtAntiProtonTagged(0), fhPtUnknownTagged(0),
69
70fhConvDeltaEtaMCConversion(0), fhConvDeltaPhiMCConversion(0), fhConvDeltaEtaPhiMCConversion(0),
71fhConvAsymMCConversion(0), fhConvPtMCConversion(0),
72fhConvDispersionMCConversion(0), fhConvM02MCConversion(0),
73
74fhConvDeltaEtaMCAntiNeutron(0), fhConvDeltaPhiMCAntiNeutron(0), fhConvDeltaEtaPhiMCAntiNeutron(0),
75fhConvAsymMCAntiNeutron(0), fhConvPtMCAntiNeutron(0),
76fhConvDispersionMCAntiNeutron(0), fhConvM02MCAntiNeutron(0),
77fhConvDeltaEtaMCAntiProton(0), fhConvDeltaPhiMCAntiProton(0), fhConvDeltaEtaPhiMCAntiProton(0),
78fhConvAsymMCAntiProton(0), fhConvPtMCAntiProton(0),
79fhConvDispersionMCAntiProton(0), fhConvM02MCAntiProton(0),
80fhConvDeltaEtaMCString(0), fhConvDeltaPhiMCString(0), fhConvDeltaEtaPhiMCString(0),
81fhConvAsymMCString(0), fhConvPtMCString(0),
82fhConvDispersionMCString(0), fhConvM02MCString(0),
83fhConvDistMCConversion(0), fhConvDistMCConversionCuts(0)
84{
85 //default ctor
86
87 //Initialize parameters
88 InitParameters();
89
90}
91
92//_________________________________________________
93TObjString * AliAnaPhotonConvInCalo::GetAnalysisCuts()
94{
95 //Save parameters used for analysis
96 TString parList ; //this will be list of parameters used for this analysis.
97 const Int_t buffersize = 255;
98 char onePar[buffersize] ;
99
100 snprintf(onePar,buffersize,"--- AliAnaPhotonConvInCalo---\n") ;
101 parList+=onePar ;
102 snprintf(onePar,buffersize,"Conversion Selection: fConvAsymCut %1.2f, fConvDEtaCut %1.2f fConvDPhiCut (%1.2f,%1.2f)\n",
103 fConvAsymCut, fConvDEtaCut, fConvDPhiMinCut, fConvDPhiMaxCut) ;
104 parList+=onePar ;
105
106 return new TObjString(parList) ;
107}
108
109//___________________________________________________
110TList * AliAnaPhotonConvInCalo::GetCreateOutputObjects()
111{
112 // Create histograms to be saved in output file and
113 // store them in outputContainer
114 TList * outputContainer = new TList() ;
115 outputContainer->SetName("PhotonConvInCaloHistos") ;
116
117 Int_t nptbins = GetHistoPtBins(); Float_t ptmax = GetHistoPtMax(); Float_t ptmin = GetHistoPtMin();
118 Int_t nphibins = GetHistoPhiBins(); Float_t phimax = GetHistoPhiMax(); Float_t phimin = GetHistoPhiMin();
119 Int_t netabins = GetHistoEtaBins(); Float_t etamax = GetHistoEtaMax(); Float_t etamin = GetHistoEtaMin();
120
121 fhPtPhotonConv = new TH1F("hPtPhotonConv","Number of #gamma over calorimeter, conversion",nptbins,ptmin,ptmax);
122 fhPtPhotonConv->SetYTitle("N");
123 fhPtPhotonConv->SetXTitle("p_{T #gamma}(GeV/c)");
124 outputContainer->Add(fhPtPhotonConv) ;
125
126 fhEtaPhiPhotonConv = new TH2F
127 ("hEtaPhiPhotonConv","#eta vs #phi",netabins,etamin,etamax,nphibins,phimin,phimax);
128 fhEtaPhiPhotonConv->SetYTitle("#phi (rad)");
129 fhEtaPhiPhotonConv->SetXTitle("#eta");
130 outputContainer->Add(fhEtaPhiPhotonConv) ;
131 if(GetMinPt() < 0.5){
132 fhEtaPhi05PhotonConv = new TH2F
133 ("hEtaPhi05PhotonConv","#eta vs #phi, E > 0.5",netabins,etamin,etamax,nphibins,phimin,phimax);
134 fhEtaPhi05PhotonConv->SetYTitle("#phi (rad)");
135 fhEtaPhi05PhotonConv->SetXTitle("#eta");
136 outputContainer->Add(fhEtaPhi05PhotonConv) ;
137 }
138
139 fhConvDeltaEta = new TH2F
140 ("hConvDeltaEta","#Delta #eta of selected conversion pairs",100,0,fMassCut,netabins*2,-0.5,0.5);
141 fhConvDeltaEta->SetYTitle("#Delta #eta");
142 fhConvDeltaEta->SetXTitle("Pair Mass (GeV/c^2)");
143 outputContainer->Add(fhConvDeltaEta) ;
144
145 fhConvDeltaPhi = new TH2F
146 ("hConvDeltaPhi","#Delta #phi of selected conversion pairs",100,0,fMassCut,nphibins*2,-0.5,0.5);
147 fhConvDeltaPhi->SetYTitle("#Delta #phi");
148 fhConvDeltaPhi->SetXTitle("Pair Mass (GeV/c^2)");
149 outputContainer->Add(fhConvDeltaPhi) ;
150
151 fhConvDeltaEtaPhi = new TH2F
152 ("hConvDeltaEtaPhi","#Delta #eta vs #Delta #phi of selected conversion pairs",netabins,-0.5,0.5,nphibins,-0.5,0.5);
153 fhConvDeltaEtaPhi->SetYTitle("#Delta #phi");
154 fhConvDeltaEtaPhi->SetXTitle("#Delta #eta");
155 outputContainer->Add(fhConvDeltaEtaPhi) ;
156
157 fhConvAsym = new TH2F
158 ("hConvAsym","Asymmetry of selected conversion pairs",100,0,fMassCut,100,0,1);
159 fhConvAsym->SetYTitle("Asymmetry");
160 fhConvAsym->SetXTitle("Pair Mass (GeV/c^2)");
161 outputContainer->Add(fhConvAsym) ;
162
163 fhConvPt = new TH2F
164 ("hConvPt","p_{T} of selected conversion pairs",100,0,fMassCut,100,0.,10.);
165 fhConvPt->SetYTitle("Pair p_{T} (GeV/c)");
166 fhConvPt->SetXTitle("Pair Mass (GeV/c^2)");
167 outputContainer->Add(fhConvPt) ;
168
169 fhConvDistEta = new TH2F
170 ("hConvDistEta","distance to conversion vertex",100,-0.7,0.7,100,0.,5.);
171 fhConvDistEta->SetXTitle("#eta");
172 fhConvDistEta->SetYTitle(" distance (m)");
173 outputContainer->Add(fhConvDistEta) ;
174
175 fhConvDistEn = new TH2F
176 ("hConvDistEn","distance to conversion vertex",nptbins,ptmin,ptmax,100,0.,5.);
177 fhConvDistEn->SetXTitle("E (GeV)");
178 fhConvDistEn->SetYTitle(" distance (m)");
179 outputContainer->Add(fhConvDistEn) ;
180
181 fhConvDistMass = new TH2F
182 ("hConvDistMass","distance to conversion vertex",100,0,fMassCut,100,0.,5.);
183 fhConvDistMass->SetXTitle("m (GeV/c^2)");
184 fhConvDistMass->SetYTitle(" distance (m)");
185 outputContainer->Add(fhConvDistMass) ;
186
187 fhConvDistEtaCutEta = new TH2F
188 ("hConvDistEtaCutEta","distance to conversion vertex, dEta < 0.05",100,-0.7,0.7,100,0.,5.);
189 fhConvDistEtaCutEta->SetXTitle("#eta");
190 fhConvDistEtaCutEta->SetYTitle(" distance (m)");
191 outputContainer->Add(fhConvDistEtaCutEta) ;
192
193 fhConvDistEnCutEta = new TH2F
194 ("hConvDistEnCutEta","distance to conversion vertex, dEta < 0.05",nptbins,ptmin,ptmax,100,0.,5.);
195 fhConvDistEnCutEta->SetXTitle("E (GeV)");
196 fhConvDistEnCutEta->SetYTitle(" distance (m)");
197 outputContainer->Add(fhConvDistEnCutEta) ;
198
199 fhConvDistMassCutEta = new TH2F
200 ("hConvDistMassCutEta","distance to conversion vertex, dEta < 0.05",100,0,fMassCut,100,0.,5.);
201 fhConvDistMassCutEta->SetXTitle("m (GeV/c^2)");
202 fhConvDistMassCutEta->SetYTitle(" distance (m)");
203 outputContainer->Add(fhConvDistMassCutEta) ;
204
205 fhConvDistEtaCutMass = new TH2F
206 ("hConvDistEtaCutMass","distance to conversion vertex, dEta < 0.05, m < 10 MeV",100,-0.7,0.7,100,0.,5.);
207 fhConvDistEtaCutMass->SetXTitle("#eta");
208 fhConvDistEtaCutMass->SetYTitle(" distance (m)");
209 outputContainer->Add(fhConvDistEtaCutMass) ;
210
211 fhConvDistEnCutMass = new TH2F
212 ("hConvDistEnCutMass","distance to conversion vertex, dEta < 0.05, m < 10 MeV",nptbins,ptmin,ptmax,100,0.,5.);
213 fhConvDistEnCutMass->SetXTitle("E (GeV)");
214 fhConvDistEnCutMass->SetYTitle(" distance (m)");
215 outputContainer->Add(fhConvDistEnCutMass) ;
216
217 fhConvDistEtaCutAsy = new TH2F
218 ("hConvDistEtaCutAsy","distance to conversion vertex, dEta < 0.05, m < 10 MeV, A < 0.1",100,-0.7,0.7,100,0.,5.);
219 fhConvDistEtaCutAsy->SetXTitle("#eta");
220 fhConvDistEtaCutAsy->SetYTitle(" distance (m)");
221 outputContainer->Add(fhConvDistEtaCutAsy) ;
222
223 fhConvDistEnCutAsy = new TH2F
224 ("hConvDistEnCutAsy","distance to conversion vertex, dEta < 0.05, m < 10 MeV, A < 0.1",nptbins,ptmin,ptmax,100,0.,5.);
225 fhConvDistEnCutAsy->SetXTitle("E (GeV)");
226 fhConvDistEnCutAsy->SetYTitle(" distance (m)");
227 outputContainer->Add(fhConvDistEnCutAsy) ;
228
229 if(IsDataMC()){
230
231 fhPtConversionTagged = new TH1F("hPtMCConversionTagged","Number of converted #gamma over calorimeter, tagged as converted",nptbins,ptmin,ptmax);
232 fhPtConversionTagged->SetYTitle("N");
233 fhPtConversionTagged->SetXTitle("p_{T #gamma}(GeV/c)");
234 outputContainer->Add(fhPtConversionTagged) ;
235
236
237 fhPtAntiNeutronTagged = new TH1F("hPtMCAntiNeutronTagged","Number of AntiNeutron id as Photon over calorimeter, tagged as converted",nptbins,ptmin,ptmax);
238 fhPtAntiNeutronTagged->SetYTitle("N");
239 fhPtAntiNeutronTagged->SetXTitle("p_{T #gamma}(GeV/c)");
240 outputContainer->Add(fhPtAntiNeutronTagged) ;
241
242 fhPtAntiProtonTagged = new TH1F("hPtMCAntiProtonTagged","Number of AntiProton id as Photon over calorimeter, tagged as converted",nptbins,ptmin,ptmax);
243 fhPtAntiProtonTagged->SetYTitle("N");
244 fhPtAntiProtonTagged->SetXTitle("p_{T #gamma}(GeV/c)");
245 outputContainer->Add(fhPtAntiProtonTagged) ;
246
247 fhPtUnknownTagged = new TH1F("hPtMCUnknownTagged","Number of Unknown id as Photon over calorimeter, tagged as converted",nptbins,ptmin,ptmax);
248 fhPtUnknownTagged->SetYTitle("N");
249 fhPtUnknownTagged->SetXTitle("p_{T #gamma}(GeV/c)");
250 outputContainer->Add(fhPtUnknownTagged) ;
251
252 fhConvDeltaEtaMCConversion = new TH2F
253 ("hConvDeltaEtaMCConversion","#Delta #eta of selected conversion pairs from real conversions",100,0,fMassCut,netabins,-0.5,0.5);
254 fhConvDeltaEtaMCConversion->SetYTitle("#Delta #eta");
255 fhConvDeltaEtaMCConversion->SetXTitle("Pair Mass (GeV/c^2)");
256 outputContainer->Add(fhConvDeltaEtaMCConversion) ;
257
258 fhConvDeltaPhiMCConversion = new TH2F
259 ("hConvDeltaPhiMCConversion","#Delta #phi of selected conversion pairs from real conversions",100,0,fMassCut,nphibins,-0.5,0.5);
260 fhConvDeltaPhiMCConversion->SetYTitle("#Delta #phi");
261 fhConvDeltaPhiMCConversion->SetXTitle("Pair Mass (GeV/c^2)");
262 outputContainer->Add(fhConvDeltaPhiMCConversion) ;
263
264 fhConvDeltaEtaPhiMCConversion = new TH2F
265 ("hConvDeltaEtaPhiMCConversion","#Delta #eta vs #Delta #phi of selected conversion pairs, from real conversions",netabins,-0.5,0.5,nphibins,-0.5,0.5);
266 fhConvDeltaEtaPhiMCConversion->SetYTitle("#Delta #phi");
267 fhConvDeltaEtaPhiMCConversion->SetXTitle("#Delta #eta");
268 outputContainer->Add(fhConvDeltaEtaPhiMCConversion) ;
269
270 fhConvAsymMCConversion = new TH2F
271 ("hConvAsymMCConversion","Asymmetry of selected conversion pairs from real conversions",100,0,fMassCut,100,0,1);
272 fhConvAsymMCConversion->SetYTitle("Asymmetry");
273 fhConvAsymMCConversion->SetXTitle("Pair Mass (GeV/c^2)");
274 outputContainer->Add(fhConvAsymMCConversion) ;
275
276 fhConvPtMCConversion = new TH2F
277 ("hConvPtMCConversion","p_{T} of selected conversion pairs from real conversions",100,0,fMassCut,100,0.,10.);
278 fhConvPtMCConversion->SetYTitle("Pair p_{T} (GeV/c)");
279 fhConvPtMCConversion->SetXTitle("Pair Mass (GeV/c^2)");
280 outputContainer->Add(fhConvPtMCConversion) ;
281
282 fhConvDispersionMCConversion = new TH2F
283 ("hConvDispersionMCConversion","p_{T} of selected conversion pairs from real conversions",100,0.,1.,100,0.,1.);
284 fhConvDispersionMCConversion->SetYTitle("Dispersion cluster 1");
285 fhConvDispersionMCConversion->SetXTitle("Dispersion cluster 2");
286 outputContainer->Add(fhConvDispersionMCConversion) ;
287
288 fhConvM02MCConversion = new TH2F
289 ("hConvM02MCConversion","p_{T} of selected conversion pairs from string",100,0.,1.,100,0.,1.);
290 fhConvM02MCConversion->SetYTitle("M02 cluster 1");
291 fhConvM02MCConversion->SetXTitle("M02 cluster 2");
292 outputContainer->Add(fhConvM02MCConversion) ;
293
294 fhConvDeltaEtaMCAntiNeutron = new TH2F
295 ("hConvDeltaEtaMCAntiNeutron","#Delta #eta of selected conversion pairs from anti-neutrons",100,0,fMassCut,netabins,-0.5,0.5);
296 fhConvDeltaEtaMCAntiNeutron->SetYTitle("#Delta #eta");
297 fhConvDeltaEtaMCAntiNeutron->SetXTitle("Pair Mass (GeV/c^2)");
298 outputContainer->Add(fhConvDeltaEtaMCAntiNeutron) ;
299
300 fhConvDeltaPhiMCAntiNeutron = new TH2F
301 ("hConvDeltaPhiMCAntiNeutron","#Delta #phi of selected conversion pairs from anti-neutrons",100,0,fMassCut,nphibins,-0.5,0.5);
302 fhConvDeltaPhiMCAntiNeutron->SetYTitle("#Delta #phi");
303 fhConvDeltaPhiMCAntiNeutron->SetXTitle("Pair Mass (GeV/c^2)");
304 outputContainer->Add(fhConvDeltaPhiMCAntiNeutron) ;
305
306 fhConvDeltaEtaPhiMCAntiNeutron = new TH2F
307 ("hConvDeltaEtaPhiMCAntiNeutron","#Delta #eta vs #Delta #phi of selected conversion pairs from anti-neutrons",netabins,-0.5,0.5,nphibins,-0.5,0.5);
308 fhConvDeltaEtaPhiMCAntiNeutron->SetYTitle("#Delta #phi");
309 fhConvDeltaEtaPhiMCAntiNeutron->SetXTitle("#Delta #eta");
310 outputContainer->Add(fhConvDeltaEtaPhiMCAntiNeutron) ;
311
312 fhConvAsymMCAntiNeutron = new TH2F
313 ("hConvAsymMCAntiNeutron","Asymmetry of selected conversion pairs from anti-neutrons",100,0,fMassCut,100,0,1);
314 fhConvAsymMCAntiNeutron->SetYTitle("Asymmetry");
315 fhConvAsymMCAntiNeutron->SetXTitle("Pair Mass (GeV/c^2)");
316 outputContainer->Add(fhConvAsymMCAntiNeutron) ;
317
318 fhConvPtMCAntiNeutron = new TH2F
319 ("hConvPtMCAntiNeutron","p_{T} of selected conversion pairs from anti-neutrons",100,0,fMassCut,100,0.,10.);
320 fhConvPtMCAntiNeutron->SetYTitle("Pair p_{T} (GeV/c)");
321 fhConvPtMCAntiNeutron->SetXTitle("Pair Mass (GeV/c^2)");
322 outputContainer->Add(fhConvPtMCAntiNeutron) ;
323
324 fhConvDispersionMCAntiNeutron = new TH2F
325 ("hConvDispersionMCAntiNeutron","p_{T} of selected conversion pairs from anti-neutrons",100,0.,1.,100,0.,1.);
326 fhConvDispersionMCAntiNeutron->SetYTitle("Dispersion cluster 1");
327 fhConvDispersionMCAntiNeutron->SetXTitle("Dispersion cluster 2");
328 outputContainer->Add(fhConvDispersionMCAntiNeutron) ;
329
330 fhConvM02MCAntiNeutron = new TH2F
331 ("hConvM02MCAntiNeutron","p_{T} of selected conversion pairs from string",100,0.,1.,100,0.,1.);
332 fhConvM02MCAntiNeutron->SetYTitle("M02 cluster 1");
333 fhConvM02MCAntiNeutron->SetXTitle("M02 cluster 2");
334 outputContainer->Add(fhConvM02MCAntiNeutron) ;
335
336 fhConvDeltaEtaMCAntiProton = new TH2F
337 ("hConvDeltaEtaMCAntiProton","#Delta #eta of selected conversion pairs from anti-protons",100,0,fMassCut,netabins,-0.5,0.5);
338 fhConvDeltaEtaMCAntiProton->SetYTitle("#Delta #eta");
339 fhConvDeltaEtaMCAntiProton->SetXTitle("Pair Mass (GeV/c^2)");
340 outputContainer->Add(fhConvDeltaEtaMCAntiProton) ;
341
342 fhConvDeltaPhiMCAntiProton = new TH2F
343 ("hConvDeltaPhiMCAntiProton","#Delta #phi of selected conversion pairs from anti-protons",100,0,fMassCut,nphibins,-0.5,0.5);
344 fhConvDeltaPhiMCAntiProton->SetYTitle("#Delta #phi");
345 fhConvDeltaPhiMCAntiProton->SetXTitle("Pair Mass (GeV/c^2)");
346 outputContainer->Add(fhConvDeltaPhiMCAntiProton) ;
347
348 fhConvDeltaEtaPhiMCAntiProton = new TH2F
349 ("hConvDeltaEtaPhiMCAntiProton","#Delta #eta vs #Delta #phi of selected conversion pairs from anti-protons",netabins,-0.5,0.5,nphibins,-0.5,0.5);
350 fhConvDeltaEtaPhiMCAntiProton->SetYTitle("#Delta #phi");
351 fhConvDeltaEtaPhiMCAntiProton->SetXTitle("#Delta #eta");
352 outputContainer->Add(fhConvDeltaEtaPhiMCAntiProton) ;
353
354 fhConvAsymMCAntiProton = new TH2F
355 ("hConvAsymMCAntiProton","Asymmetry of selected conversion pairs from anti-protons",100,0,fMassCut,100,0,1);
356 fhConvAsymMCAntiProton->SetYTitle("Asymmetry");
357 fhConvAsymMCAntiProton->SetXTitle("Pair Mass (GeV/c^2)");
358 outputContainer->Add(fhConvAsymMCAntiProton) ;
359
360 fhConvPtMCAntiProton = new TH2F
361 ("hConvPtMCAntiProton","p_{T} of selected conversion pairs from anti-protons",100,0,fMassCut,100,0.,10.);
362 fhConvPtMCAntiProton->SetYTitle("Pair p_{T} (GeV/c)");
363 fhConvPtMCAntiProton->SetXTitle("Pair Mass (GeV/c^2)");
364 outputContainer->Add(fhConvPtMCAntiProton) ;
365
366 fhConvDispersionMCAntiProton = new TH2F
367 ("hConvDispersionMCAntiProton","p_{T} of selected conversion pairs from anti-protons",100,0.,1.,100,0.,1.);
368 fhConvDispersionMCAntiProton->SetYTitle("Dispersion cluster 1");
369 fhConvDispersionMCAntiProton->SetXTitle("Dispersion cluster 2");
370 outputContainer->Add(fhConvDispersionMCAntiProton) ;
371
372 fhConvM02MCAntiProton = new TH2F
373 ("hConvM02MCAntiProton","p_{T} of selected conversion pairs from string",100,0.,1.,100,0.,1.);
374 fhConvM02MCAntiProton->SetYTitle("M02 cluster 1");
375 fhConvM02MCAntiProton->SetXTitle("M02 cluster 2");
376 outputContainer->Add(fhConvM02MCAntiProton) ;
377
378 fhConvDeltaEtaMCString = new TH2F
379 ("hConvDeltaEtaMCString","#Delta #eta of selected conversion pairs from string",100,0,fMassCut,netabins,-0.5,0.5);
380 fhConvDeltaEtaMCString->SetYTitle("#Delta #eta");
381 fhConvDeltaEtaMCString->SetXTitle("Pair Mass (GeV/c^2)");
382 outputContainer->Add(fhConvDeltaEtaMCString) ;
383
384 fhConvDeltaPhiMCString = new TH2F
385 ("hConvDeltaPhiMCString","#Delta #phi of selected conversion pairs from string",100,0,fMassCut,nphibins,-0.5,0.5);
386 fhConvDeltaPhiMCString->SetYTitle("#Delta #phi");
387 fhConvDeltaPhiMCString->SetXTitle("Pair Mass (GeV/c^2)");
388 outputContainer->Add(fhConvDeltaPhiMCString) ;
389
390 fhConvDeltaEtaPhiMCString = new TH2F
391 ("hConvDeltaEtaPhiMCString","#Delta #eta vs #Delta #phi of selected conversion pairs from string",netabins,-0.5,0.5,nphibins,-0.5,0.5);
392 fhConvDeltaEtaPhiMCString->SetYTitle("#Delta #phi");
393 fhConvDeltaEtaPhiMCString->SetXTitle("#Delta #eta");
394 outputContainer->Add(fhConvDeltaEtaPhiMCString) ;
395
396 fhConvAsymMCString = new TH2F
397 ("hConvAsymMCString","Asymmetry of selected conversion pairs from string",100,0,fMassCut,100,0,1);
398 fhConvAsymMCString->SetYTitle("Asymmetry");
399 fhConvAsymMCString->SetXTitle("Pair Mass (GeV/c^2)");
400 outputContainer->Add(fhConvAsymMCString) ;
401
402 fhConvPtMCString = new TH2F
403 ("hConvPtMCString","p_{T} of selected conversion pairs from string",100,0,fMassCut,100,0.,10.);
404 fhConvPtMCString->SetYTitle("Pair p_{T} (GeV/c)");
405 fhConvPtMCString->SetXTitle("Pair Mass (GeV/c^2)");
406 outputContainer->Add(fhConvPtMCString) ;
407
408 fhConvDispersionMCString = new TH2F
409 ("hConvDispersionMCString","p_{T} of selected conversion pairs from string",100,0.,1.,100,0.,1.);
410 fhConvDispersionMCString->SetYTitle("Dispersion cluster 1");
411 fhConvDispersionMCString->SetXTitle("Dispersion cluster 2");
412 outputContainer->Add(fhConvDispersionMCString) ;
413
414 fhConvM02MCString = new TH2F
415 ("hConvM02MCString","p_{T} of selected conversion pairs from string",100,0.,1.,100,0.,1.);
416 fhConvM02MCString->SetYTitle("M02 cluster 1");
417 fhConvM02MCString->SetXTitle("M02 cluster 2");
418 outputContainer->Add(fhConvM02MCString) ;
419
420 fhConvDistMCConversion = new TH2F
421 ("hConvDistMCConversion","calculated conversion distance vs real vertes for MC conversion",100,0.,5.,100,0.,5.);
422 fhConvDistMCConversion->SetYTitle("distance");
423 fhConvDistMCConversion->SetXTitle("vertex R");
424 outputContainer->Add(fhConvDistMCConversion) ;
425
426 fhConvDistMCConversionCuts = new TH2F
427 ("hConvDistMCConversionCuts","calculated conversion distance vs real vertes for MC conversion, deta < 0.05, m < 10 MeV, asym < 0.1",100,0.,5.,100,0.,5.);
428 fhConvDistMCConversionCuts->SetYTitle("distance");
429 fhConvDistMCConversionCuts->SetXTitle("vertex R");
430 outputContainer->Add(fhConvDistMCConversionCuts) ;
431
432 }
433
434 return outputContainer ;
435
436}
437
438//_______________________________________
439void AliAnaPhotonConvInCalo::InitParameters()
440{
441
442 //Initialize the parameters of the analysis.
443 AddToHistogramsName("AnaPhotonConvInCalo_");
444
445 fMassCut = 0.03; //30 MeV
446 fRemoveConvertedPair = kFALSE;
447 fAddConvertedPairsToAOD = kFALSE;
448
449}
450
451//_____________________________________________
452void AliAnaPhotonConvInCalo::MakeAnalysisFillAOD()
453{
454 //Do conversion photon analysis and fill aods
455
456 //Loop on stored AOD photons
457 Int_t naod = GetOutputAODBranch()->GetEntriesFast();
458 if(GetDebug() > 0) printf("AliAnaPhotonConvInCalo::MakeAnalysisFillAOD() - aod branch entries %d\n", naod);
459
460 //List to be used in conversion analysis, to tag the cluster as candidate for conversion
461 Bool_t * indexConverted = new Bool_t[naod];
462 for (Int_t i = 0; i < naod; i++) indexConverted[i] = kFALSE;
463
464 for(Int_t iaod = 0; iaod < naod ; iaod++){
465 AliAODPWG4Particle* calo = (AliAODPWG4Particle*) (GetOutputAODBranch()->At(iaod));
466
467 Bool_t bConverted = kFALSE;
468 Int_t id2 = -1;
469
470 //Check if set previously as converted couple, if so skip its use.
471 if (indexConverted[iaod]) continue;
472
473 // Second cluster loop
474 AliAODPWG4Particle* calo2 = 0;
475 for(Int_t jaod = iaod + 1 ; jaod < naod ; jaod++) {
476 //Check if set previously as converted couple, if so skip its use.
477 if (indexConverted[jaod]) continue;
478 //printf("Check Conversion indeces %d and %d\n",iaod,jaod);
479 calo2 = (AliAODPWG4Particle*) (GetOutputAODBranch()->At(jaod));
480
481 //................................................
482 //Get mass of pair, if small, take this pair.
483 Float_t pairM = calo->GetPairMass(calo2);
484 //printf("\t both in calo, mass %f, cut %f\n",pairM,fMassCut);
485 if(pairM < fMassCut){
486 calo->SetTagged(kFALSE);
487 id2 = calo2->GetCaloLabel(0);
488 Float_t asymmetry = TMath::Abs(calo->E()-calo2->E())/(calo->E()+calo2->E());
489 Float_t dPhi = (calo->Momentum())->Phi()-(calo2->Momentum())->Phi();
490 Float_t dEta = (calo->Momentum())->Eta()-(calo2->Momentum())->Eta();
491
492 //...............................................
493 //Fill few histograms with kinematics of the pair
494 //FIXME, move all this to MakeAnalysisFillHistograms ...
495
496 fhConvDeltaEta ->Fill( pairM, dPhi );
497 fhConvDeltaPhi ->Fill( pairM, dEta );
498 fhConvAsym ->Fill( pairM, asymmetry );
499 fhConvDeltaEtaPhi->Fill( dEta , dPhi );
500 fhConvPt ->Fill( pairM, (calo->Momentum())->Pt()+(calo2->Momentum())->Pt());
501
502 //Estimate conversion distance, T. Awes, M. Ivanov
503 //Under the assumption that the pair has zero mass, and that each electron
504 //of the pair has the same momentum, they will each have the same bend radius
505 //given by R=p/(qB) = p / (300 B) with p in [MeV/c], B in [Tesla] and R in [m].
506 //With nominal ALICE magnet current of 30kA B=0.5T, and so with E_cluster=p,
507 //R = E/1.5 [cm]. Under these assumptions, the distance from the conversion
508 //point to the MCEal can be related to the separation distance, L=2y, on the MCEal
509 //as d = sqrt(R^2 -(R-y)^2) = sqrt(2Ry - y^2). And since R>>y we can write as
510 //d = sqrt(E*L/1.5) where E is the cluster energy and L is the distance in cm between
511 //the clusters.
512
513 TObjArray * clusters = 0;
514 if(calo->GetDetector() == "EMCAL"){
515 clusters = GetEMCALClusters();
516 }
517 else{
518 clusters = GetPHOSClusters();
519 }
520
521 Int_t iclus = -1;
522 AliVCluster *cluster1 = FindCluster(clusters,calo ->GetCaloLabel(0),iclus);
523 AliVCluster *cluster2 = FindCluster(clusters,calo2->GetCaloLabel(0),iclus);
524
525 Float_t pos1[3];
526 cluster1->GetPosition(pos1);
527 Float_t pos2[3];
528 cluster2->GetPosition(pos2);
529 Float_t clustDist = TMath::Sqrt((pos1[0]-pos2[0])*(pos1[0]-pos2[0])+
530 (pos1[1]-pos2[1])*(pos1[1]-pos2[1])+
531 (pos1[2]-pos2[2])*(pos1[2]-pos2[2]));
532
533 Float_t convDist = TMath::Sqrt(calo->E() *clustDist*0.01/0.15);
534 Float_t convDist2 = TMath::Sqrt(calo2->E()*clustDist*0.01/0.15);
535 //printf("l = %f, e1 = %f, d1=%f, e2 = %f, d2=%f\n",clustDist,calo->E(),convDist,calo2->E(),convDist2);
536 if(GetDebug() > 2)
537 printf("AliAnaPhotonConvInCalo::MakeAnalysisFillAOD(): Pair with mass %2.3f < %2.3f, %1.2f < dPhi %2.2f < %2.2f, dEta %f < %2.2f, asymmetry %2.2f< %2.2f; \n cluster1 id %d, e %2.3f SM %d, eta %2.3f, phi %2.3f ; \n cluster2 id %d, e %2.3f, SM %d,eta %2.3f, phi %2.3f\n",
538 pairM,fMassCut,fConvDPhiMinCut, dPhi, fConvDPhiMaxCut, dEta, fConvDEtaCut, asymmetry, fConvAsymCut,
539 calo->GetCaloLabel(0),calo->E(),GetCaloUtils()->GetModuleNumber(calo,GetReader()->GetInputEvent()), calo->Eta(), calo->Phi(),
540 id2, calo2->E(), GetCaloUtils()->GetModuleNumber(calo2,GetReader()->GetInputEvent()),calo2->Eta(), calo2->Phi());
541
542 fhConvDistEta ->Fill(calo ->Eta(),convDist );
543 fhConvDistEta ->Fill(calo2->Eta(),convDist2);
544 fhConvDistEn ->Fill(calo ->E(), convDist );
545 fhConvDistEn ->Fill(calo2->E(), convDist2);
546 fhConvDistMass->Fill(pairM, convDist );
547 //dEta cut
548 if(dEta<0.05){
549 fhConvDistEtaCutEta ->Fill(calo->Eta(), convDist );
550 fhConvDistEtaCutEta ->Fill(calo2->Eta(),convDist2);
551 fhConvDistEnCutEta ->Fill(calo->E(), convDist );
552 fhConvDistEnCutEta ->Fill(calo2->E(), convDist2);
553 fhConvDistMassCutEta->Fill(pairM, convDist );
554 //mass cut
555 if(pairM<0.01){//10 MeV
556 fhConvDistEtaCutMass ->Fill(calo ->Eta(), convDist );
557 fhConvDistEtaCutMass ->Fill(calo2->Eta(), convDist2);
558 fhConvDistEnCutMass ->Fill(calo ->E(), convDist );
559 fhConvDistEnCutMass ->Fill(calo2->E(), convDist2);
560 // asymmetry cut
561 if(asymmetry<0.1){
562 fhConvDistEtaCutAsy ->Fill(calo ->Eta(), convDist );
563 fhConvDistEtaCutAsy ->Fill(calo2->Eta(), convDist2);
564 fhConvDistEnCutAsy ->Fill(calo ->E(), convDist );
565 fhConvDistEnCutAsy ->Fill(calo2->E(), convDist2);
566 }//asymmetry cut
567 }//mass cut
568 }//dEta cut
569
570 //...............................................
571 //Select pairs in a eta-phi window
572 if(TMath::Abs(dEta) < fConvDEtaCut &&
573 TMath::Abs(dPhi) < fConvDPhiMaxCut &&
574 TMath::Abs(dPhi) > fConvDPhiMinCut &&
575 asymmetry < fConvAsymCut ){
576 indexConverted[iaod] = kTRUE;
577 indexConverted[jaod] = kTRUE;
578 bConverted = kTRUE;
579 }
580 //printf("Accepted? %d\n",bConverted);
581 //...........................................
582 //Fill more histograms, simulated data
583 //FIXME, move all this to MakeAnalysisFillHistograms ...
584 if(IsDataMC()){
585
586 //Check the origin of the pair, look for conversion, antinucleons or jet correlations (strings)
587 Int_t ancPDG = 0;
588 Int_t ancStatus = 0;
589 TLorentzVector momentum;
590 TVector3 prodVertex;
591 Int_t ancLabel = GetMCAnalysisUtils()->CheckCommonAncestor(cluster1->GetLabel(), cluster2->GetLabel(),
592 GetReader(), ancPDG, ancStatus, momentum, prodVertex);
593
594 // printf("AliAnaPhotonConvInCalo::MakeAnalysisFillHistograms() - Common ancestor label %d, pdg %d, name %s, status %d; \n",
595 // ancLabel,ancPDG,TDatabasePDG::Instance()->GetParticle(ancPDG)->GetName(),ancStatus);
596
597 Int_t tag1 = calo ->GetTag();
598 Int_t tag2 = calo2->GetTag();
599 if(GetMCAnalysisUtils()->CheckTagBit(tag1,AliMCAnalysisUtils::kMCConversion)){
600 if(GetMCAnalysisUtils()->CheckTagBit(tag2,AliMCAnalysisUtils::kMCConversion) && (ancPDG==22 || TMath::Abs(ancPDG)==11) && ancLabel > -1){
601 fhConvDeltaEtaMCConversion ->Fill( pairM, dEta );
602 fhConvDeltaPhiMCConversion ->Fill( pairM, dPhi );
603 fhConvAsymMCConversion ->Fill( pairM, asymmetry );
604 fhConvDeltaEtaPhiMCConversion->Fill( dEta , dPhi );
605 fhConvPtMCConversion ->Fill( pairM, calo->Pt()+calo2->Pt());
606 fhConvDispersionMCConversion ->Fill( cluster1->GetDispersion(), cluster2->GetDispersion());
607 fhConvM02MCConversion ->Fill( cluster1->GetM02(), cluster2->GetM02());
608 fhConvDistMCConversion ->Fill( convDist , prodVertex.Mag() );
609 fhConvDistMCConversion ->Fill( convDist2, prodVertex.Mag() );
610
611 if(dEta<0.05 && pairM<0.01 && asymmetry<0.1){
612 fhConvDistMCConversionCuts->Fill( convDist , prodVertex.Mag() );
613 fhConvDistMCConversionCuts->Fill( convDist2, prodVertex.Mag() );
614 }
615
616 }
617 }
618 else if(GetMCAnalysisUtils()->CheckTagBit(tag1,AliMCAnalysisUtils::kMCAntiNeutron)){
619 if(GetMCAnalysisUtils()->CheckTagBit(tag2,AliMCAnalysisUtils::kMCAntiNeutron) && ancPDG==-2112 && ancLabel > -1){
620 fhConvDeltaEtaMCAntiNeutron ->Fill( pairM, dEta );
621 fhConvDeltaPhiMCAntiNeutron ->Fill( pairM, dPhi );
622 fhConvAsymMCAntiNeutron ->Fill( pairM, asymmetry );
623 fhConvDeltaEtaPhiMCAntiNeutron ->Fill( dEta , dPhi );
624 fhConvPtMCAntiNeutron ->Fill( pairM, calo->Pt()+calo2->Pt());
625 fhConvDispersionMCAntiNeutron ->Fill( cluster1->GetDispersion(), cluster2->GetDispersion());
626 fhConvM02MCAntiNeutron ->Fill( cluster1->GetM02(), cluster2->GetM02());
627 }
628 }
629 else if(GetMCAnalysisUtils()->CheckTagBit(tag1,AliMCAnalysisUtils::kMCAntiProton)){
630 if(GetMCAnalysisUtils()->CheckTagBit(tag2,AliMCAnalysisUtils::kMCAntiProton) && ancPDG==-2212 && ancLabel > -1){
631 fhConvDeltaEtaMCAntiProton ->Fill( pairM, dEta );
632 fhConvDeltaPhiMCAntiProton ->Fill( pairM, dPhi );
633 fhConvAsymMCAntiProton ->Fill( pairM, asymmetry );
634 fhConvDeltaEtaPhiMCAntiProton ->Fill( dEta , dPhi );
635 fhConvPtMCAntiProton ->Fill( pairM, calo->Pt()+calo2->Pt());
636 fhConvDispersionMCAntiProton ->Fill( cluster1->GetDispersion(), cluster2->GetDispersion());
637 fhConvM02MCAntiProton ->Fill( cluster1->GetM02(), cluster2->GetM02());
638 }
639 }
640
641 //Pairs coming from fragmenting pairs.
642 if(ancPDG < 22 && ancLabel > 7 && (ancStatus == 11 || ancStatus == 12) ){
643 fhConvDeltaEtaMCString ->Fill( pairM, dPhi);
644 fhConvDeltaPhiMCString ->Fill( pairM, dPhi);
645 fhConvAsymMCString ->Fill( pairM, TMath::Abs(calo->E()-calo2->E())/(calo->E()+calo2->E()) );
646 fhConvDeltaEtaPhiMCString ->Fill( dPhi, dPhi);
647 fhConvPtMCString ->Fill( pairM, calo->Pt()+calo2->Pt());
648 fhConvDispersionMCString ->Fill( cluster1->GetDispersion(), cluster2->GetDispersion());
649 fhConvM02MCString ->Fill( cluster1->GetM02(), cluster2->GetM02());
650 }
651
652 }// Data MC
653
654 break;
655 }
656
657 }//Mass loop
658
659 //..........................................................................................................
660 //Pair selected as converted, remove both clusters or recombine them into a photon and put them in the AOD
661 if(bConverted){
662 //Add to AOD
663 if(fAddConvertedPairsToAOD){
664 //Create AOD of pair analysis
665 TLorentzVector mpair = *(calo->Momentum())+*(calo2->Momentum());
666 AliAODPWG4Particle aodpair = AliAODPWG4Particle(mpair);
667 aodpair.SetLabel(calo->GetLabel());
668
669 //printf("Index %d, Id %d\n",iaod, calo->GetID());
670 //Set the indeces of the original caloclusters
671 aodpair.SetCaloLabel(calo->GetCaloLabel(0),id2);
672 aodpair.SetDetector(calo->GetDetector());
673 aodpair.SetIdentifiedParticleType(calo->GetIdentifiedParticleType());
674 aodpair.SetTag(calo ->GetTag());
675 aodpair.SetTagged(kTRUE);
676 //Add AOD with pair object to aod branch
677 AddAODParticle(aodpair);
678 //printf("\t \t both added pair\n");
679 }
680
681 //Do not add the current calocluster
682 if(!fRemoveConvertedPair)
683 {
684 //printf("TAGGED\n");
685 //Tag this cluster as likely conversion
686 calo->SetTagged(kTRUE);
687 }
688 }//converted pair
689
690 }// main loop
691
692 // Remove entries identified as conversion electrons
693 // Revise if this is OK
694 if(fRemoveConvertedPair || fAddConvertedPairsToAOD){
695 for(Int_t iaod = 0; iaod < naod ; iaod++)
696 if(indexConverted[iaod])GetOutputAODBranch()->RemoveAt(iaod);
697 GetOutputAODBranch()->Compress();
698 }
699
700 delete [] indexConverted;
701
702 if(GetDebug() > 1) printf("AliAnaPhotonConvInCalo::MakeAnalysisFillAOD() End fill AODs, with %d entries \n",GetOutputAODBranch()->GetEntriesFast());
703
704}
705
706//____________________________________________________
707void AliAnaPhotonConvInCalo::MakeAnalysisFillHistograms()
708{
709 //Fill histograms
710
711 //-------------------------------------------------------------------
712 // Access MC information in stack if requested, check that it exists.
713 AliStack * stack = 0x0;
714 TParticle * primary = 0x0;
715 TClonesArray * mcparticles = 0x0;
716 AliAODMCParticle * aodprimary = 0x0;
717
718 if(IsDataMC()){
719
720 if(GetReader()->ReadStack()){
721 stack = GetMCStack() ;
722 if(!stack) {
723 printf("AliAnaPhotonConvInCalo::MakeAnalysisFillHistograms() - Stack not available, is the MC handler called? STOP\n");
724 abort();
725 }
726
727 }
728 else if(GetReader()->ReadAODMCParticles()){
729
730 //Get the list of MC particles
731 mcparticles = GetReader()->GetAODMCParticles(0);
732 if(!mcparticles && GetDebug() > 0) {
733 printf("AliAnaPhotonConvInCalo::MakeAnalysisFillHistograms() - Standard MCParticles not available!\n");
734 }
735 }
736 }// is data and MC
737
738 //----------------------------------
739 //Loop on stored AOD photons
740 Int_t naod = GetOutputAODBranch()->GetEntriesFast();
741 if(GetDebug() > 0) printf("AliAnaPhotonConvInCalo::MakeAnalysisFillHistograms() - aod branch entries %d\n", naod);
742
743 for(Int_t iaod = 0; iaod < naod ; iaod++){
744 AliAODPWG4Particle* ph = (AliAODPWG4Particle*) (GetOutputAODBranch()->At(iaod));
745 //Int_t pdg = ph->GetIdentifiedParticleType();
746
747 if(ph->IsTagged()){
748
749 if(GetDebug() > 2)
750 printf("AliAnaPhotonConvInCalo::MakeAnalysisFillHistograms() - ID Photon: pt %f, phi %f, eta %f\n", ph->Pt(),ph->Phi(),ph->Eta()) ;
751 //................................
752 //Fill photon histograms
753 Float_t ptcluster = ph->Pt();
754 Float_t phicluster = ph->Phi();
755 Float_t etacluster = ph->Eta();
756 Float_t ecluster = ph->E();
757
758 fhPtPhotonConv->Fill(ptcluster);
759 if(ecluster > 0.5) fhEtaPhiPhotonConv ->Fill(etacluster, phicluster);
760 else if(GetMinPt() < 0.5) fhEtaPhi05PhotonConv->Fill(etacluster, phicluster);
761
762
763 //.......................................
764 //Play with the MC data if available
765 if(IsDataMC()){
766
767
768 //....................................................................
769 // Access MC information in stack if requested, check that it exists.
770 Int_t label =ph->GetLabel();
771 if(label < 0) {
772 if(GetDebug() > 1) printf("AliAnaPhotonConvInCalo::MakeAnalysisFillHistograms() *** bad label ***: label %d \n", label);
773 continue;
774 }
775
776 Float_t eprim = 0;
777 Float_t ptprim = 0;
778 if(GetReader()->ReadStack()){
779
780 if(label >= stack->GetNtrack()) {
781 if(GetDebug() > 2) printf("AliAnaPhotonConvInCalo::MakeAnalysisFillHistograms() *** large label ***: label %d, n tracks %d \n", label, stack->GetNtrack());
782 continue ;
783 }
784
785 primary = stack->Particle(label);
786 if(!primary){
787 printf("AliAnaPhotonConvInCalo::MakeAnalysisFillHistograms() *** no primary ***: label %d \n", label);
788 continue;
789 }
790 eprim = primary->Energy();
791 ptprim = primary->Pt();
792
793 }
794 else if(GetReader()->ReadAODMCParticles()){
795 //Check which is the input
796 if(ph->GetInputFileIndex() == 0){
797 if(!mcparticles) continue;
798 if(label >= mcparticles->GetEntriesFast()) {
799 if(GetDebug() > 2) printf("AliAnaPhotonConvInCalo::MakeAnalysisFillHistograms() *** large label ***: label %d, n tracks %d \n",
800 label, mcparticles->GetEntriesFast());
801 continue ;
802 }
803 //Get the particle
804 aodprimary = (AliAODMCParticle*) mcparticles->At(label);
805
806 }
807
808 if(!aodprimary){
809 printf("AliAnaPhotonConvInCalo::MakeAnalysisFillHistograms() *** no primary ***: label %d \n", label);
810 continue;
811 }
812
813 eprim = aodprimary->E();
814 ptprim = aodprimary->Pt();
815
816 }
817
818 Int_t tag =ph->GetTag();
819
820 if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
821 {
822
823 if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion))
824 {
825
826 fhPtConversionTagged ->Fill(ptcluster);
827
828 }
829 }
830 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCAntiNeutron))
831 {
832
833 fhPtAntiNeutronTagged ->Fill(ptcluster);
834
835 }
836 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCAntiProton))
837 {
838 fhPtAntiProtonTagged ->Fill(ptcluster);
839
840 }
841
842 else {
843 fhPtUnknownTagged ->Fill(ptcluster);
844
845 }
846
847 }//Histograms with MC
848 }// tagged by conversion
849 }// aod loop
850
851}
852
853
854//________________________________________________________
855void AliAnaPhotonConvInCalo::Print(const Option_t * opt) const
856{
857 //Print some relevant parameters set for the analysis
858
859 if(! opt)
860 return;
861
862 printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
863 AliAnaPartCorrBaseClass::Print(" ");
864
865 printf("Add conversion pair to AOD = %d\n",fAddConvertedPairsToAOD);
866 printf("Conversion pair mass cut = %f\n",fMassCut);
867 printf("Conversion selection cut : A < %1.2f; %1.3f < Dphi < %1.3f; Deta < %1.3f\n",
868 fConvAsymCut,fConvDPhiMinCut, fConvDPhiMaxCut, fConvDEtaCut);
869
870 printf(" \n") ;
871
872}