]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGGA/PHOSTasks/PHOS_embedding/AliAnalysisTaskPi0DiffEfficiency.cxx
Cumulative update
[u/mrichter/AliRoot.git] / PWGGA / PHOSTasks / PHOS_embedding / AliAnalysisTaskPi0DiffEfficiency.cxx
1 #include "TChain.h"
2 #include "TTree.h"
3 #include "TObjArray.h"
4 #include "TF1.h"
5 #include "TFile.h"
6 #include "TH1F.h"
7 #include "TH2F.h"
8 #include "TH2I.h"
9 #include "TH3F.h"
10 #include "TParticle.h"
11 #include "TCanvas.h"
12 #include "TStyle.h"
13 #include "TRandom.h"
14
15 #include "AliAODMCParticle.h"
16 #include "AliAnalysisManager.h"
17 #include "AliMCEventHandler.h"
18 #include "AliMCEvent.h"
19 #include "AliStack.h"
20 #include "AliAnalysisTaskSE.h"
21 #include "AliAnalysisTaskPi0DiffEfficiency.h"
22 #include "AliCaloPhoton.h"
23 #include "AliPHOSGeometry.h"
24 #include "AliPHOSAodCluster.h"
25 #include "AliPHOSCalibData.h"
26 #include "AliAODEvent.h"
27 #include "AliAODCaloCluster.h"
28 #include "AliAODVertex.h"
29 #include "AliESDtrackCuts.h"
30 #include "AliLog.h"
31 #include "AliPID.h"
32 #include "AliCDBManager.h"
33 #include "AliCentrality.h" 
34
35 // Analysis task to calculate pi0 registration efficiency
36 // as a difference between spectra before and after embedding
37 // Authors: Dmitri Peressounko
38 // Date   : Aug.2011
39
40 ClassImp(AliAnalysisTaskPi0DiffEfficiency)
41
42 //________________________________________________________________________
43 AliAnalysisTaskPi0DiffEfficiency::AliAnalysisTaskPi0DiffEfficiency(const char *name) 
44 : AliAnalysisTaskPi0Efficiency(name),
45   fPHOSEvent1(0),
46   fPHOSEvent2(0)
47 {
48   
49
50
51 }
52
53 //________________________________________________________________________
54 void AliAnalysisTaskPi0DiffEfficiency::UserCreateOutputObjects()
55 {
56   // Create histograms
57   // Called once
58
59   // ESD histograms
60   if(fOutputContainer != NULL){
61     delete fOutputContainer;
62   }
63   fOutputContainer = new TList();
64   fOutputContainer->SetOwner(kTRUE);
65
66   //Event selection
67   fOutputContainer->Add(new TH1F("hSelEvents","Event celection", 10,0.,10.)) ;
68
69   //vertex distribution
70   fOutputContainer->Add(new TH1F("hZvertex","Z vertex position", 50,-25.,25.)) ;
71
72   //Centrality
73   fOutputContainer->Add(new TH1F("hCentrality","Event centrality", 100,0.,100.)) ;
74
75   //QA histograms                       
76   fOutputContainer->Add(new TH2F("hCluM1","Cell (X,Z), M1" ,64,0.5,64.5, 56,0.5,56.5));
77   fOutputContainer->Add(new TH2F("hCluM2","Cell (X,Z), M2" ,64,0.5,64.5, 56,0.5,56.5));
78   fOutputContainer->Add(new TH2F("hCluM3","Cell (X,Z), M3" ,64,0.5,64.5, 56,0.5,56.5));
79
80   Int_t nM       = 500;
81   Double_t mMin  = 0.0;
82   Double_t mMax  = 1.0;
83   Int_t nPt      = 200;
84   Double_t ptMin = 0;
85   Double_t ptMax = 20;
86
87   char key[55] ;
88   for(Int_t cent=0; cent<6; cent++){
89     //Single photon
90     snprintf(key,55,"hPhotAll_cen%d",cent) ;
91     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
92     ((TH1F*)fOutputContainer->Last())->Sumw2() ;
93     snprintf(key,55,"hPhotAllcore_cen%d",cent) ;
94     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
95     ((TH1F*)fOutputContainer->Last())->Sumw2() ;
96     snprintf(key,55,"hPhotAllwou_cen%d",cent) ;
97     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
98     ((TH1F*)fOutputContainer->Last())->Sumw2() ;
99     snprintf(key,55,"hPhotCPV_cen%d",cent) ;
100     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
101     snprintf(key,55,"hPhotCPVcore_cen%d",cent) ;
102     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
103     snprintf(key,55,"hPhotCPV2_cen%d",cent) ;
104     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
105     ((TH1F*)fOutputContainer->Last())->Sumw2() ;
106     snprintf(key,55,"hPhotDisp_cen%d",cent) ;
107     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
108     ((TH1F*)fOutputContainer->Last())->Sumw2() ;
109     snprintf(key,55,"hPhotDisp2_cen%d",cent) ;
110     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
111     ((TH1F*)fOutputContainer->Last())->Sumw2() ;
112     snprintf(key,55,"hPhotDispwou_cen%d",cent) ;
113     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
114     ((TH1F*)fOutputContainer->Last())->Sumw2() ;
115     snprintf(key,55,"hPhotBoth_cen%d",cent) ;
116     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
117     ((TH1F*)fOutputContainer->Last())->Sumw2() ;
118     snprintf(key,55,"hPhotBothcore_cen%d",cent) ;
119     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
120     ((TH1F*)fOutputContainer->Last())->Sumw2() ;
121
122     snprintf(key,55,"hNegPhotAll_cen%d",cent) ;
123     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
124     ((TH1F*)fOutputContainer->Last())->Sumw2() ;
125     snprintf(key,55,"hNegPhotAllcore_cen%d",cent) ;
126     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
127     ((TH1F*)fOutputContainer->Last())->Sumw2() ;
128     snprintf(key,55,"hNegPhotAllwou_cen%d",cent) ;
129     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
130     ((TH1F*)fOutputContainer->Last())->Sumw2() ;
131     snprintf(key,55,"hNegPhotCPV_cen%d",cent) ;
132     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
133     snprintf(key,55,"hNegPhotCPVcore_cen%d",cent) ;
134     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
135     snprintf(key,55,"hNegPhotCPV2_cen%d",cent) ;
136     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
137     ((TH1F*)fOutputContainer->Last())->Sumw2() ;
138     snprintf(key,55,"hNegPhotDisp_cen%d",cent) ;
139     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
140     ((TH1F*)fOutputContainer->Last())->Sumw2() ;
141     snprintf(key,55,"hNegPhotDisp2_cen%d",cent) ;
142     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
143     ((TH1F*)fOutputContainer->Last())->Sumw2() ;
144     snprintf(key,55,"hNegPhotDispwou_cen%d",cent) ;
145     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
146     ((TH1F*)fOutputContainer->Last())->Sumw2() ;
147     snprintf(key,55,"hNegPhotBoth_cen%d",cent) ;
148     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
149     ((TH1F*)fOutputContainer->Last())->Sumw2() ;
150     snprintf(key,55,"hNegPhotBothcore_cen%d",cent) ;
151     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
152     ((TH1F*)fOutputContainer->Last())->Sumw2() ;
153     
154     snprintf(key,55,"hOldMassPtAll_cen%d",cent) ;
155     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
156     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
157     snprintf(key,55,"hOldMassPtAllcore_cen%d",cent) ;
158     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
159     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
160     snprintf(key,55,"hOldMassPtAllwou_cen%d",cent) ;
161     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
162     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
163     snprintf(key,55,"hOldMassPtCPV_cen%d",cent) ;
164     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
165     snprintf(key,55,"hOldMassPtCPVcore_cen%d",cent) ;
166     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
167     snprintf(key,55,"hOldMassPtCPV2_cen%d",cent) ;
168     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
169     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
170     snprintf(key,55,"hOldMassPtDisp_cen%d",cent) ;
171     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
172     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
173     snprintf(key,55,"hOldMassPtDisp2_cen%d",cent) ;
174     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
175     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
176     snprintf(key,55,"hOldMassPtDispwou_cen%d",cent) ;
177     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
178     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
179     snprintf(key,55,"hOldMassPtBoth_cen%d",cent) ;
180     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
181     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
182     snprintf(key,55,"hOldMassPtBothcore_cen%d",cent) ;
183     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
184     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
185     
186     snprintf(key,55,"hNewMassPtAll_cen%d",cent) ;
187     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
188     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
189     snprintf(key,55,"hNewMassPtAllcore_cen%d",cent) ;
190     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
191     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
192     snprintf(key,55,"hNewMassPtAllwou_cen%d",cent) ;
193     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
194     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
195     snprintf(key,55,"hNewMassPtCPV_cen%d",cent) ;
196     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
197     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
198     snprintf(key,55,"hNewMassPtCPVcore_cen%d",cent) ;
199     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
200     snprintf(key,55,"hNewMassPtCPV2_cen%d",cent) ;
201     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
202     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
203     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
204     snprintf(key,55,"hNewMassPtDisp_cen%d",cent) ;
205     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
206     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
207     snprintf(key,55,"hNewMassPtDisp2_cen%d",cent) ;
208     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
209     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
210     snprintf(key,55,"hNewMassPtDispwou_cen%d",cent) ;
211     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
212     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
213     snprintf(key,55,"hNewMassPtBoth_cen%d",cent) ;
214     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
215     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
216     snprintf(key,55,"hNewMassPtBothcore_cen%d",cent) ;
217     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
218     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
219
220     snprintf(key,55,"hNegMassPtAll_cen%d",cent) ;
221     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
222     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
223     snprintf(key,55,"hNegMassPtAllcore_cen%d",cent) ;
224     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
225     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
226     snprintf(key,55,"hNegMassPtAllwou_cen%d",cent) ;
227     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
228     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
229     snprintf(key,55,"hNegMassPtCPV_cen%d",cent) ;
230     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
231     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
232     snprintf(key,55,"hNegMassPtCPVcore_cen%d",cent) ;
233     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
234     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
235     snprintf(key,55,"hNegMassPtCPV2_cen%d",cent) ;
236     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
237     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
238     snprintf(key,55,"hNegMassPtDisp_cen%d",cent) ;
239     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
240     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
241     snprintf(key,55,"hNegMassPtDisp2_cen%d",cent) ;
242     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
243     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
244     snprintf(key,55,"hNegMassPtDispwou_cen%d",cent) ;
245     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
246     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
247     snprintf(key,55,"hNegMassPtBoth_cen%d",cent) ;
248     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
249     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
250     snprintf(key,55,"hNegMassPtBothcore_cen%d",cent) ;
251     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
252     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
253     
254     
255     snprintf(key,55,"hMassPtAll_cen%d",cent) ;
256     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
257     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
258     snprintf(key,55,"hMassPtAllcore_cen%d",cent) ;
259     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
260     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
261     snprintf(key,55,"hMassPtAllwou_cen%d",cent) ;
262     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
263     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
264     snprintf(key,55,"hMassPtCPV_cen%d",cent) ;
265     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
266     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
267     snprintf(key,55,"hMassPtCPVcore_cen%d",cent) ;
268     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
269     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
270     snprintf(key,55,"hMassPtCPV2_cen%d",cent) ;
271     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
272     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
273     snprintf(key,55,"hMassPtDisp_cen%d",cent) ;
274     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
275     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
276     snprintf(key,55,"hMassPtDisp2_cen%d",cent) ;
277     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
278     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
279     snprintf(key,55,"hMassPtDispwou_cen%d",cent) ;
280     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
281     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
282     snprintf(key,55,"hMassPtBoth_cen%d",cent) ;
283     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
284     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
285     snprintf(key,55,"hMassPtBothcore_cen%d",cent) ;
286     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
287     ((TH2F*)fOutputContainer->Last())->Sumw2() ;
288     
289     snprintf(key,55,"hMassPtAll_a07_cen%d",cent) ;
290     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
291     snprintf(key,55,"hMassPtCPV_a07_cen%d",cent) ;
292     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
293     snprintf(key,55,"hMassPtCPV2_a07_cen%d",cent) ;
294     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
295     snprintf(key,55,"hMassPtDisp_a07_cen%d",cent) ;
296     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
297     snprintf(key,55,"hMassPtBoth_a07_cen%d",cent) ;
298     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
299
300     snprintf(key,55,"hMassPtAll_a08_cen%d",cent) ;
301     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
302     snprintf(key,55,"hMassPtCPV_a08_cen%d",cent) ;
303     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
304     snprintf(key,55,"hMassPtCPV2_a08_cen%d",cent) ;
305     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
306     snprintf(key,55,"hMassPtDisp_a08_cen%d",cent) ;
307     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
308     snprintf(key,55,"hMassPtBoth_a08_cen%d",cent) ;
309     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
310     
311     snprintf(key,55,"hMassPtAll_a09_cen%d",cent) ;
312     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
313     snprintf(key,55,"hMassPtCPV_a09_cen%d",cent) ;
314     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
315     snprintf(key,55,"hMassPtCPV2_a09_cen%d",cent) ;
316     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
317     snprintf(key,55,"hMassPtDisp_a09_cen%d",cent) ;
318     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
319     snprintf(key,55,"hMassPtBoth_a09_cen%d",cent) ;
320     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));    
321     
322     
323     //Mixed
324     snprintf(key,55,"hMiMassPtAll_cen%d",cent) ;
325     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
326     snprintf(key,55,"hMiMassPtAllcore_cen%d",cent) ;
327     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
328     snprintf(key,55,"hMiMassPtAllwou_cen%d",cent) ;
329     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
330     snprintf(key,55,"hMiMassPtCPV_cen%d",cent) ;
331     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
332     snprintf(key,55,"hMiMassPtCPVcore_cen%d",cent) ;
333     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
334     snprintf(key,55,"hMiMassPtCPV2_cen%d",cent) ;
335     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
336     snprintf(key,55,"hMiMassPtDisp_cen%d",cent) ;
337     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
338     snprintf(key,55,"hMiMassPtDisp2_cen%d",cent) ;
339     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
340     snprintf(key,55,"hMiMassPtDispwou_cen%d",cent) ;
341     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
342     snprintf(key,55,"hMiMassPtBoth_cen%d",cent) ;
343     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
344     snprintf(key,55,"hMiMassPtBothcore_cen%d",cent) ;
345     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
346
347     snprintf(key,55,"hMiMassPtAll_a07_cen%d",cent) ;
348     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
349     snprintf(key,55,"hMiMassPtCPV_a07_cen%d",cent) ;
350     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
351     snprintf(key,55,"hMiMassPtCPV2_a07_cen%d",cent) ;
352     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
353     snprintf(key,55,"hMiMassPtDisp_a07_cen%d",cent) ;
354     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
355     snprintf(key,55,"hMiMassPtBoth_a07_cen%d",cent) ;
356     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
357
358     snprintf(key,55,"hMiMassPtAll_a08_cen%d",cent) ;
359     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
360     snprintf(key,55,"hMiMassPtCPV_a08_cen%d",cent) ;
361     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
362     snprintf(key,55,"hMiMassPtCPV2_a08_cen%d",cent) ;
363     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
364     snprintf(key,55,"hMiMassPtDisp_a08_cen%d",cent) ;
365     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
366     snprintf(key,55,"hMiMassPtBoth_a08_cen%d",cent) ;
367     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
368     
369      snprintf(key,55,"hMiMassPtAll_a09_cen%d",cent) ;
370     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
371     snprintf(key,55,"hMiMassPtCPV_a09_cen%d",cent) ;
372     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
373     snprintf(key,55,"hMiMassPtCPV2_a09_cen%d",cent) ;
374     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
375     snprintf(key,55,"hMiMassPtDisp_a09_cen%d",cent) ;
376     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
377     snprintf(key,55,"hMiMassPtBoth_a09_cen%d",cent) ;
378     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));    
379     
380     snprintf(key,55,"hMCMassPtAll_cen%d",cent) ;
381     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
382     snprintf(key,55,"hMCMassPtAllcore_cen%d",cent) ;
383     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
384     snprintf(key,55,"hMCMassPtAllwou_cen%d",cent) ;
385     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
386     snprintf(key,55,"hMCMassPtCPV_cen%d",cent) ;
387     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
388     snprintf(key,55,"hMCMassPtCPVcore_cen%d",cent) ;
389     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
390     snprintf(key,55,"hMCMassPtCPV2_cen%d",cent) ;
391     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
392     snprintf(key,55,"hMCMassPtDisp_cen%d",cent) ;
393     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
394     snprintf(key,55,"hMCMassPtDisp2_cen%d",cent) ;
395     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
396     snprintf(key,55,"hMCMassPtDispwou_cen%d",cent) ;
397     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
398     snprintf(key,55,"hMCMassPtBoth_cen%d",cent) ;
399     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
400     snprintf(key,55,"hMCMassPtBothcore_cen%d",cent) ;
401     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
402
403     snprintf(key,55,"hMCMassPtAll_a07_cen%d",cent) ;
404     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
405     snprintf(key,55,"hMCMassPtCPV_a07_cen%d",cent) ;
406     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
407     snprintf(key,55,"hMCMassPtCPV2_a07_cen%d",cent) ;
408     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
409     snprintf(key,55,"hMCMassPtDisp_a07_cen%d",cent) ;
410     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
411     snprintf(key,55,"hMCMassPtBoth_a07_cen%d",cent) ;
412     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
413
414     snprintf(key,55,"hMCMassPtAll_a08_cen%d",cent) ;
415     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
416     snprintf(key,55,"hMCMassPtCPV_a08_cen%d",cent) ;
417     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
418     snprintf(key,55,"hMCMassPtCPV2_a08_cen%d",cent) ;
419     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
420     snprintf(key,55,"hMCMassPtDisp_a08_cen%d",cent) ;
421     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
422     snprintf(key,55,"hMCMassPtBoth_a08_cen%d",cent) ;
423     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
424
425     snprintf(key,55,"hMCMassPtAll_a09_cen%d",cent) ;
426     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
427     snprintf(key,55,"hMCMassPtCPV_a09_cen%d",cent) ;
428     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
429     snprintf(key,55,"hMCMassPtCPV2_a09_cen%d",cent) ;
430     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
431     snprintf(key,55,"hMCMassPtDisp_a09_cen%d",cent) ;
432     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
433     snprintf(key,55,"hMCMassPtBoth_a09_cen%d",cent) ;
434     fOutputContainer->Add(new TH2F(key,"(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
435
436     //Single photon
437     snprintf(key,55,"hMCPhotAll_cen%d",cent) ;
438     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
439     ((TH1F*)fOutputContainer->Last())->Sumw2() ;
440     snprintf(key,55,"hMCPhotAllcore_cen%d",cent) ;
441     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
442     ((TH1F*)fOutputContainer->Last())->Sumw2() ;
443     snprintf(key,55,"hMCPhotAllwou_cen%d",cent) ;
444     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
445     ((TH1F*)fOutputContainer->Last())->Sumw2() ;
446     snprintf(key,55,"hMCPhotCPV_cen%d",cent) ;
447     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
448     ((TH1F*)fOutputContainer->Last())->Sumw2() ;
449     snprintf(key,55,"hMCPhotCPVcore_cen%d",cent) ;
450     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
451     ((TH1F*)fOutputContainer->Last())->Sumw2() ;
452     snprintf(key,55,"hMCPhotCPV2_cen%d",cent) ;
453     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
454     ((TH1F*)fOutputContainer->Last())->Sumw2() ;
455     snprintf(key,55,"hMCPhotDisp_cen%d",cent) ;
456     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
457     ((TH1F*)fOutputContainer->Last())->Sumw2() ;
458     snprintf(key,55,"hMCPhotDisp2_cen%d",cent) ;
459     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
460     ((TH1F*)fOutputContainer->Last())->Sumw2() ;
461     snprintf(key,55,"hMCPhotDispwou_cen%d",cent) ;
462     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
463     ((TH1F*)fOutputContainer->Last())->Sumw2() ;
464     snprintf(key,55,"hMCPhotBoth_cen%d",cent) ;
465     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
466     ((TH1F*)fOutputContainer->Last())->Sumw2() ;    
467     snprintf(key,55,"hMCPhotBothcore_cen%d",cent) ;
468     fOutputContainer->Add(new TH1F(key,"dN/dpt" ,nPt,ptMin,ptMax));
469     ((TH1F*)fOutputContainer->Last())->Sumw2() ;    
470     
471   }
472
473   fOutputContainer->Add(new TH2F("hMCPi0M11","(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
474   fOutputContainer->Add(new TH2F("hMCPi0M22","(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
475   fOutputContainer->Add(new TH2F("hMCPi0M33","(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
476   fOutputContainer->Add(new TH2F("hMCPi0M12","(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
477   fOutputContainer->Add(new TH2F("hMCPi0M13","(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
478   fOutputContainer->Add(new TH2F("hMCPi0M23","(M,p_{T},d#phi)_{#gamma#gamma}" ,nM,mMin,mMax,nPt,ptMin,ptMax));
479
480   //MC
481   for(Int_t cent=0; cent<6; cent++){
482     snprintf(key,55,"hMC_rap_gamma_cen%d",cent) ;
483     fOutputContainer->Add(new TH1F(key,"Rapidity pi0",200,-1.,1.)) ;
484     snprintf(key,55,"hMC_rap_pi0_cen%d",cent) ;
485     fOutputContainer->Add(new TH1F(key,"Rapidity pi0",200,-1.,1.)) ;
486     snprintf(key,55,"hMC_rap_eta_cen%d",cent) ;
487     fOutputContainer->Add(new TH1F("hMC_rap_eta","Rapidity eta",200,-1.,1.)) ;
488     snprintf(key,55,"hMC_phi_gamma_cen%d",cent) ;
489     fOutputContainer->Add(new TH1F(key,"Phi pi0",200,0.,TMath::TwoPi())) ;
490     snprintf(key,55,"hMC_phi_pi0_cen%d",cent) ;
491     fOutputContainer->Add(new TH1F(key,"Phi pi0",200,0.,TMath::TwoPi())) ;
492     snprintf(key,55,"hMC_phi_eta_cen%d",cent) ;
493     fOutputContainer->Add(new TH1F(key,"Phi eta",200,0.,TMath::TwoPi())) ;
494     snprintf(key,55,"hMC_all_gamma_cen%d",cent) ;
495     fOutputContainer->Add(new TH1F(key,"Rapidity photon",250,0.,25.)) ;
496     snprintf(key,55,"hMC_all_pi0_cen%d",cent) ;
497     fOutputContainer->Add(new TH1F(key,"Rapidity pi0",250,0.,25.)) ;
498     snprintf(key,55,"hMC_all_eta_cen%d",cent) ;
499     fOutputContainer->Add(new TH1F(key,"Rapidity eta",250,0.,25.)) ;
500     snprintf(key,55,"hMC_unitEta_gamma_cen%d",cent) ;
501     fOutputContainer->Add(new TH1F(key,"Pt photon",250,0.,25.)) ;
502     snprintf(key,55,"hMC_unitEta_pi0_cen%d",cent) ;
503     fOutputContainer->Add(new TH1F(key,"Rapidity eta",250,0.,25.)) ;
504     snprintf(key,55,"hMC_unitEta_eta_cen%d",cent) ;
505     fOutputContainer->Add(new TH1F(key,"Rapidity eta",250,0.,25.)) ;
506   }
507   
508   PostData(1, fOutputContainer);
509
510 }
511
512 //________________________________________________________________________
513 void AliAnalysisTaskPi0DiffEfficiency::UserExec(Option_t *) 
514 {
515   // Main loop, called for each event
516   // Analyze ESD/AOD
517
518   FillHistogram("hSelEvents",0.5) ;  
519   
520   AliAODEvent *event = dynamic_cast<AliAODEvent*>(InputEvent());
521   if (!event) {
522     Printf("ERROR: Could not retrieve event");
523     PostData(1, fOutputContainer);
524     return;
525   }
526   
527   FillHistogram("hSelEvents",1.5) ;
528   AliAODHeader *header = event->GetHeader() ;
529   
530   // Checks if we have a primary vertex
531   // Get primary vertices form ESD
532   const AliAODVertex *esdVertex5 = event->GetPrimaryVertex();
533
534  // don't rely on ESD vertex, assume (0,0,0)
535   Double_t vtx0[3] ={0.,0.,0.};
536   
537   
538   FillHistogram("hZvertex",esdVertex5->GetZ());
539   if (TMath::Abs(esdVertex5->GetZ()) > 10. ){
540     PostData(1, fOutputContainer);
541     return;
542   }
543   FillHistogram("hSelEvents",2.5) ;
544
545   //Vtx class z-bin
546   //  Int_t zvtx = (Int_t)((vtx5[2]+10.)/2.) ;
547   //  if(zvtx<0)zvtx=0 ;
548   //  if(zvtx>9)zvtx=9 ;
549   Int_t zvtx=0 ;
550
551 //  fCentrality=header->GetCentralityP()->GetCentralityPercentile("V0M"); // returns the centrality percentile, 
552 //                                                          //a float from 0 to 100 (or to the trigger efficiency)
553    fCentrality=header->GetZDCN2Energy() ;
554
555   if( fCentrality < 0. || fCentrality>80.){
556     PostData(1, fOutputContainer);
557     return;
558   }
559   FillHistogram("hSelEvents",3.5) ;
560   Float_t bins[7]={0.,5.,10.,20.,40.,60.,80.} ;
561   fCenBin=0 ;
562   while(fCenBin<6 && fCentrality > bins[fCenBin+1])
563     fCenBin++ ; 
564
565  
566   //reaction plain
567   fRPfull= header->GetZDCN1Energy() ;
568   if(fRPfull==999){ //reaction plain was not defined
569     PostData(1, fOutputContainer);
570     return;
571   } 
572
573   FillHistogram("hSelEvents",4.5) ;
574   //All event selections done
575   FillHistogram("hCentrality",fCentrality) ;
576   //Reaction plain is defined in the range (-pi/2;pi/2)
577   //We have 10 bins
578   Int_t irp=Int_t(10.*fRPfull/TMath::Pi());
579   if(irp>9)irp=9 ;
580
581   if(!fPHOSEvents[zvtx][fCenBin][irp]) 
582     fPHOSEvents[zvtx][fCenBin][irp]=new TList() ;
583   TList * prevPHOS = fPHOSEvents[zvtx][fCenBin][irp] ;
584
585   // Get PHOS rotation matrices from ESD and set them to the PHOS geometry
586   if(fEventCounter == 0) {
587     for(Int_t mod=0; mod<5; mod++) {
588       const TGeoHMatrix* m =header->GetPHOSMatrix(mod) ;
589       fPHOSGeo->SetMisalMatrix(m,mod) ;
590       Printf("PHOS geo matrix for module # %d is set: %p\n", mod,m);
591     }
592     fEventCounter++ ;
593   }
594
595   ProcessMC() ;
596
597   if(fPHOSEvent1){
598     fPHOSEvent1->Clear() ;
599     fPHOSEvent2->Clear() ;
600   }
601   else{
602     fPHOSEvent1 = new TClonesArray("AliCaloPhoton",200) ;
603     fPHOSEvent2 = new TClonesArray("AliCaloPhoton",200) ;
604   }
605
606   TClonesArray * clustersEmb = (TClonesArray*)event->FindListObject("EmbeddedCaloClusters") ;
607   AliAODCaloCells * cellsEmb = (AliAODCaloCells *)event->FindListObject("EmbeddedPHOScells") ;
608   TClonesArray * clustersOld = event->GetCaloClusters() ;
609   AliAODCaloCells * cellsOld = event->GetPHOSCells() ;
610   TVector3 vertex(vtx0);
611   char key[55] ;
612   //Before Embedding
613   Int_t multClustOld = clustersOld->GetEntriesFast();
614   Int_t multClustEmb = clustersEmb->GetEntriesFast();
615   Int_t inPHOSold=0 ;
616   Int_t inPHOSemb=0 ;
617   for (Int_t i=0; i<multClustOld; i++) {
618     AliAODCaloCluster *clu = (AliAODCaloCluster*)clustersOld->At(i);
619     if ( !clu->IsPHOS() || clu->E()<0.3) continue;
620
621     Bool_t survive=kFALSE ;
622     for(Int_t ii=0;(ii<multClustEmb)&&(!survive);ii++){
623        AliAODCaloCluster *clu2 = (AliAODCaloCluster*)clustersEmb->At(ii);
624        survive=IsSameCluster(clu,clu2);
625     }
626
627
628     Float_t  position[3];
629     clu->GetPosition(position);
630     TVector3 global(position) ;
631     Int_t relId[4] ;
632     fPHOSGeo->GlobalPos2RelId(global,relId) ;
633     Int_t mod  = relId[0] ;
634     Int_t cellX = relId[2];
635     Int_t cellZ = relId[3] ;
636     if ( !IsGoodChannel("PHOS",mod,cellX,cellZ) ) 
637       continue ;
638     if(clu->GetNCells()<3)
639       continue ;
640
641     snprintf(key,55,"hCluM%d",mod) ;
642     FillHistogram(key,cellX,cellZ,1.);
643
644     TLorentzVector pv1 ;
645     clu->GetMomentum(pv1 ,vtx0);
646     
647     if(inPHOSold>=fPHOSEvent1->GetSize()){
648       fPHOSEvent1->Expand(inPHOSold+50) ;
649     }
650     AliCaloPhoton * ph = new((*fPHOSEvent1)[inPHOSold]) AliCaloPhoton(pv1.X(),pv1.Py(),pv1.Z(),pv1.E()) ;
651     ph->SetModule(mod) ;
652     AliPHOSAodCluster cluPHOS1(*clu);
653     cluPHOS1.Recalibrate(fPHOSCalibData,cellsOld); // modify the cell energies
654     Double_t ecore=CoreEnergy(&cluPHOS1) ;
655     pv1*= ecore/pv1.E() ;    
656     ph->SetMomV2(&pv1) ;
657     ph->SetNCells(clu->GetNCells());
658     ph->SetDispBit(TestLambda(clu->E(),clu->GetM20(),clu->GetM02())) ;
659     ph->SetDisp2Bit(TestLambda2(clu->E(),clu->GetM20(),clu->GetM02())) ;
660     ph->SetCPVBit(clu->GetEmcCpvDistance()>2.) ;
661     ph->SetCPV2Bit(clu->GetEmcCpvDistance()>4.) ;
662     if(!survive) //this cluster found in list after embedding, skipping it
663       ph->SetTagged(1) ;
664     ph->SetPhoton(clu->GetNExMax()<2); // Remember, if it is unfolded
665
666     inPHOSold++ ;
667   }
668
669   for (Int_t i=0; i<multClustEmb; i++) {
670     AliAODCaloCluster *clu = (AliAODCaloCluster*)clustersEmb->At(i);
671     if ( !clu->IsPHOS() || clu->E()<0.3) continue;
672
673     Bool_t survive=kFALSE ;
674     for(Int_t ii=0;(ii<multClustOld)&&(!survive);ii++){
675        AliAODCaloCluster *clu2 = (AliAODCaloCluster*)clustersOld->At(ii);
676        survive=IsSameCluster(clu,clu2);
677     }
678     
679     Float_t  position[3];
680     clu->GetPosition(position);
681     TVector3 global(position) ;
682     Int_t relId[4] ;
683     fPHOSGeo->GlobalPos2RelId(global,relId) ;
684     Int_t mod  = relId[0] ;
685     Int_t cellX = relId[2];
686     Int_t cellZ = relId[3] ;
687     if ( !IsGoodChannel("PHOS",mod,cellX,cellZ) ) 
688       continue ;
689     if(clu->GetNCells()<3)
690       continue ;
691
692     snprintf(key,55,"hCluM%d",mod) ;
693     FillHistogram(key,cellX,cellZ,1.);
694
695     TLorentzVector pv1 ;
696     clu->GetMomentum(pv1 ,vtx0);
697     
698     if(inPHOSemb>=fPHOSEvent2->GetSize()){
699       fPHOSEvent2->Expand(inPHOSemb+50) ;
700     }
701     AliCaloPhoton * ph = new((*fPHOSEvent2)[inPHOSemb]) AliCaloPhoton(pv1.X(),pv1.Py(),pv1.Z(),pv1.E()) ;
702     ph->SetModule(mod) ;
703     AliPHOSAodCluster cluPHOS1(*clu);
704     cluPHOS1.Recalibrate(fPHOSCalibData,cellsEmb); // modify the cell energies
705     Double_t ecore=CoreEnergy(&cluPHOS1) ;
706     pv1*= ecore/pv1.E() ;    
707     ph->SetMomV2(&pv1) ;
708     ph->SetNCells(clu->GetNCells());
709     ph->SetDispBit(TestLambda(clu->E(),clu->GetM20(),clu->GetM02())) ;
710     ph->SetDisp2Bit(TestLambda2(clu->E(),clu->GetM20(),clu->GetM02())) ;
711     ph->SetCPVBit(clu->GetEmcCpvDistance()>2.) ;
712     ph->SetCPV2Bit(clu->GetEmcCpvDistance()>4.) ;
713     if(!survive) //this cluster found in list after embedding, skipping it
714       ph->SetTagged(1) ;
715     ph->SetPhoton(clu->GetNExMax()<2); // Remember, if it is unfolded
716
717     inPHOSemb++ ;
718   }
719   
720   //Single photon
721   for (Int_t i1=0; i1<inPHOSold; i1++) {
722     AliCaloPhoton * ph1=(AliCaloPhoton*)fPHOSEvent1->At(i1) ;
723     if(!ph1->IsTagged())
724       continue ;
725     snprintf(key,55,"hPhotAll_cen%d",fCenBin) ;
726     FillHistogram(key,ph1->Pt(),-1.) ;
727     snprintf(key,55,"hNegPhotAll_cen%d",fCenBin) ;
728     FillHistogram(key,ph1->Pt(),-1.) ;
729     snprintf(key,55,"hPhotAllcore_cen%d",fCenBin) ;
730     FillHistogram(key,ph1->GetMomV2()->Pt(),-1.) ;
731     snprintf(key,55,"hNegPhotAllcore_cen%d",fCenBin) ;
732     FillHistogram(key,ph1->GetMomV2()->Pt(),-1.) ;
733     if(ph1->IsPhoton()){
734       snprintf(key,55,"hPhotAllwou_cen%d",fCenBin) ;
735       FillHistogram(key,ph1->Pt(),-1.) ;
736       snprintf(key,55,"hNegPhotAllwou_cen%d",fCenBin) ;
737       FillHistogram(key,ph1->Pt(),-1.) ;
738     }    
739     if(ph1->IsCPVOK() ){
740       snprintf(key,55,"hPhotCPV_cen%d",fCenBin) ;
741       FillHistogram(key,ph1->Pt(),-1.) ;
742       snprintf(key,55,"hNegPhotCPV_cen%d",fCenBin) ;
743       FillHistogram(key,ph1->Pt(),-1.) ;
744       snprintf(key,55,"hPhotCPVcore_cen%d",fCenBin) ;
745       FillHistogram(key,ph1->GetMomV2()->Pt(),-1.) ;
746       snprintf(key,55,"hNegPhotCPVcore_cen%d",fCenBin) ;
747       FillHistogram(key,ph1->GetMomV2()->Pt(),-1.) ;
748     }
749     if(ph1->IsCPV2OK() ){
750       snprintf(key,55,"hPhotCPV2_cen%d",fCenBin) ;
751       FillHistogram(key,ph1->Pt(),-1.) ;
752       snprintf(key,55,"hNegPhotCPV2_cen%d",fCenBin) ;
753       FillHistogram(key,ph1->Pt(),-1.) ;
754     }
755     if(ph1->IsDisp2OK()){
756       snprintf(key,55,"hPhotDisp2_cen%d",fCenBin) ;
757       FillHistogram(key,ph1->Pt(),-1.) ;
758       snprintf(key,55,"hNegPhotDisp2_cen%d",fCenBin) ;
759       FillHistogram(key,ph1->Pt(),-1.) ;
760     }
761     if(ph1->IsDispOK()){
762       snprintf(key,55,"hPhotDisp_cen%d",fCenBin) ;
763       FillHistogram(key,ph1->Pt(),-1.) ;
764       snprintf(key,55,"hNegPhotDisp_cen%d",fCenBin) ;
765       FillHistogram(key,ph1->Pt(),-1.) ;
766       if(ph1->IsPhoton()){
767         snprintf(key,55,"hPhotDispwou_cen%d",fCenBin) ;
768         FillHistogram(key,ph1->Pt(),-1.) ;
769         snprintf(key,55,"hNegPhotDispwou_cen%d",fCenBin) ;
770         FillHistogram(key,ph1->Pt(),-1.) ;
771       }
772       if(ph1->IsCPVOK()){
773         snprintf(key,55,"hPhotBoth_cen%d",fCenBin) ;
774         FillHistogram(key,ph1->Pt(),-1.) ;
775         snprintf(key,55,"hNegPhotBoth_cen%d",fCenBin) ;
776         FillHistogram(key,ph1->Pt(),-1.) ;
777         snprintf(key,55,"hPhotBothcore_cen%d",fCenBin) ;
778         FillHistogram(key,ph1->GetMomV2()->Pt(),-1.) ;
779         snprintf(key,55,"hNegPhotBothcore_cen%d",fCenBin) ;
780         FillHistogram(key,ph1->GetMomV2()->Pt(),-1.) ;
781       }
782     } // end of loop i2
783   } // end of loop i1 
784
785   for (Int_t i1=0; i1<inPHOSemb; i1++) {
786     AliCaloPhoton * ph1=(AliCaloPhoton*)fPHOSEvent2->At(i1) ;
787     if(!ph1->IsTagged())
788       continue ;
789     snprintf(key,55,"hPhotAll_cen%d",fCenBin) ;
790     FillHistogram(key,ph1->Pt(),1.) ;
791     snprintf(key,55,"hPhotAllcore_cen%d",fCenBin) ;
792     FillHistogram(key,ph1->GetMomV2()->Pt(),1.) ;
793     if(ph1->IsPhoton()){
794       snprintf(key,55,"hPhotAllwou_cen%d",fCenBin) ;
795       FillHistogram(key,ph1->Pt(),1.) ;
796     }
797     if(ph1->IsCPVOK() ){
798       snprintf(key,55,"hPhotCPV_cen%d",fCenBin) ;
799       FillHistogram(key,ph1->Pt(),1.) ;
800       snprintf(key,55,"hPhotCPVcore_cen%d",fCenBin) ;
801       FillHistogram(key,ph1->GetMomV2()->Pt(),1.) ;
802     }
803     if(ph1->IsCPV2OK() ){
804       snprintf(key,55,"hPhotCPV2_cen%d",fCenBin) ;
805       FillHistogram(key,ph1->Pt(),1.) ;
806     }
807     if(ph1->IsDisp2OK()){
808       snprintf(key,55,"hPhotDisp2_cen%d",fCenBin) ;
809       FillHistogram(key,ph1->Pt(),1.) ;
810     }
811     if(ph1->IsDispOK()){
812       snprintf(key,55,"hPhotDisp_cen%d",fCenBin) ;
813       FillHistogram(key,ph1->Pt(),1.) ;
814       if(ph1->IsPhoton()){
815         snprintf(key,55,"hPhotDispwou_cen%d",fCenBin) ;
816         FillHistogram(key,ph1->Pt(),1.) ;
817       }
818       if(ph1->IsCPVOK()){
819         snprintf(key,55,"hPhotBoth_cen%d",fCenBin) ;
820         FillHistogram(key,ph1->Pt(),1.) ;
821         snprintf(key,55,"hPhotBothcore_cen%d",fCenBin) ;
822         FillHistogram(key,ph1->GetMomV2()->Pt(),1.) ;
823       }
824     } // end of loop i2
825   } // end of loop i1 
826
827
828
829   // Fill Real disribution:
830   // Disappeared clusters enter with negative contribution
831   // In addition fill control histogam with Real before embedding
832   for (Int_t i1=0; i1<inPHOSold-1; i1++) {
833     AliCaloPhoton * ph1=(AliCaloPhoton*)fPHOSEvent1->At(i1) ;
834     for (Int_t i2=i1+1; i2<inPHOSold; i2++) {
835       AliCaloPhoton * ph2=(AliCaloPhoton*)fPHOSEvent1->At(i2) ;
836
837       TLorentzVector p12  = *ph1  + *ph2;
838       TLorentzVector pv12 = *(ph1->GetMomV2()) + *(ph2->GetMomV2());      
839       Double_t a=TMath::Abs((ph1->E()-ph2->E())/(ph1->E()+ph2->E())) ;
840
841       //Fill Controll histogram: Real before embedding
842       snprintf(key,55,"hOldMassPtAll_cen%d",fCenBin) ;
843       FillHistogram(key,p12.M() ,p12.Pt(),-1.) ;
844       snprintf(key,55,"hOldMassPtAllcore_cen%d",fCenBin) ;
845       FillHistogram(key,pv12.M() ,pv12.Pt(),-1.) ;
846       if(ph1->IsPhoton() && ph2->IsPhoton()){
847         snprintf(key,55,"hOldMassPtAllwou_cen%d",fCenBin) ;
848         FillHistogram(key,p12.M() ,p12.Pt(),-1.) ;
849       }
850       if(ph1->IsCPVOK() && ph2->IsCPVOK()){
851         snprintf(key,55,"hOldMassPtCPV_cen%d",fCenBin) ;
852         FillHistogram(key,p12.M() ,p12.Pt(),-1) ;
853         snprintf(key,55,"hOldMassPtCPV_cen%d",fCenBin) ;
854         FillHistogram(key,pv12.M(), pv12.Pt(),-1) ;
855       }
856       if(ph1->IsCPV2OK() && ph2->IsCPV2OK()){
857         snprintf(key,55,"hOldMassPtCPV2_cen%d",fCenBin) ;
858         FillHistogram(key,p12.M() ,p12.Pt(),-1) ;
859       }
860       if(ph1->IsDisp2OK() && ph2->IsDisp2OK()){
861         snprintf(key,55,"hOldMassPtDisp2_cen%d",fCenBin) ;
862         FillHistogram(key,p12.M() ,p12.Pt(),-1) ;
863       }
864       if(ph1->IsDispOK() && ph2->IsDispOK()){
865         snprintf(key,55,"hOldMassPtDisp_cen%d",fCenBin) ;
866         FillHistogram(key,p12.M() ,p12.Pt(),-1) ;
867         if(ph1->IsPhoton() && ph2->IsPhoton()){
868           snprintf(key,55,"hOldMassPtDispwou_cen%d",fCenBin) ;
869           FillHistogram(key,p12.M() ,p12.Pt(),-1) ;
870         }
871         if(ph1->IsCPVOK() && ph2->IsCPVOK()){
872           snprintf(key,55,"hOldMassPtBoth_cen%d",fCenBin) ;
873           FillHistogram(key,p12.M() ,p12.Pt(),-1) ;
874           snprintf(key,55,"hOldMassPtBothcore_cen%d",fCenBin) ;
875           FillHistogram(key,pv12.M() ,pv12.Pt(),-1) ;
876         }
877       }
878       
879       //Now fill main histograms with negative contributions
880       if(!(ph1->IsTagged() || ph2->IsTagged()) )
881         continue ;
882       snprintf(key,55,"hMassPtAll_cen%d",fCenBin) ;
883       FillHistogram(key,p12.M() ,p12.Pt(),-1.) ;
884       snprintf(key,55,"hMassPtAllcore_cen%d",fCenBin) ;
885       FillHistogram(key,pv12.M() ,pv12.Pt(),-1.) ;
886       if(ph1->IsPhoton() && ph2->IsPhoton()){
887         snprintf(key,55,"hMassPtAllwou_cen%d",fCenBin) ;
888         FillHistogram(key,p12.M() ,p12.Pt(),-1.) ;
889       }
890       if(a<0.9){
891         snprintf(key,55,"hMassPtAll_a09_cen%d",fCenBin) ;
892         FillHistogram(key,p12.M() ,p12.Pt(),-1.) ;
893         if(a<0.8){
894           snprintf(key,55,"hMassPtAll_a08_cen%d",fCenBin) ;
895           FillHistogram(key,p12.M() ,p12.Pt(),-1.) ;
896           if(a<0.7){
897             snprintf(key,55,"hMassPtAll_a07_cen%d",fCenBin) ;
898             FillHistogram(key,p12.M() ,p12.Pt(),-1.) ;
899           }
900         }
901       }
902       snprintf(key,55,"hNegMassPtAll_cen%d",fCenBin) ;
903       FillHistogram(key,p12.M() ,p12.Pt(),-1.) ;
904       snprintf(key,55,"hNegMassPtAllcore_cen%d",fCenBin) ;
905       FillHistogram(key,pv12.M() ,pv12.Pt(),-1.) ;
906       if(ph1->IsPhoton() && ph2->IsPhoton()){
907         snprintf(key,55,"hNegMassPtAllwou_cen%d",fCenBin) ;
908         FillHistogram(key,p12.M() ,p12.Pt(),-1.) ;
909       }
910       
911       if(ph1->IsCPVOK() && ph2->IsCPVOK()){
912         snprintf(key,55,"hMassPtCPV_cen%d",fCenBin) ;
913         FillHistogram(key,p12.M() ,p12.Pt(),-1) ;
914         snprintf(key,55,"hMassPtCPVcore_cen%d",fCenBin) ;
915         FillHistogram(key,pv12.M() ,pv12.Pt(),-1) ;
916         if(a<0.9){
917           snprintf(key,55,"hMassPtCPV_a09_cen%d",fCenBin) ;
918           FillHistogram(key,p12.M() ,p12.Pt(),-1.) ;
919           if(a<0.8){
920             snprintf(key,55,"hMassPtCPV_a08_cen%d",fCenBin) ;
921             FillHistogram(key,p12.M() ,p12.Pt(),-1.) ;
922             if(a<0.7){
923               snprintf(key,55,"hMassPtCPV_a07_cen%d",fCenBin) ;
924               FillHistogram(key,p12.M() ,p12.Pt(),-1.) ;
925             }
926           }
927         }
928         snprintf(key,55,"hNegMassPtCPV_cen%d",fCenBin) ;
929         FillHistogram(key,p12.M() ,p12.Pt(),-1) ;
930         snprintf(key,55,"hNegMassPtCPVcore_cen%d",fCenBin) ;
931         FillHistogram(key,pv12.M() ,pv12.Pt(),-1) ;
932       }
933       if(ph1->IsCPV2OK() && ph2->IsCPV2OK()){
934         snprintf(key,55,"hMassPtCPV2_cen%d",fCenBin) ;
935         FillHistogram(key,p12.M() ,p12.Pt(),-1) ;
936         if(a<0.9){
937           snprintf(key,55,"hMassPtCPV2_a09_cen%d",fCenBin) ;
938           FillHistogram(key,p12.M() ,p12.Pt(),-1.) ;
939           if(a<0.8){
940             snprintf(key,55,"hMassPtCPV2_a08_cen%d",fCenBin) ;
941             FillHistogram(key,p12.M() ,p12.Pt(),-1.) ;
942             if(a<0.7){
943               snprintf(key,55,"hMassPtCPV2_a07_cen%d",fCenBin) ;
944               FillHistogram(key,p12.M() ,p12.Pt(),-1.) ;
945             }
946           }
947         }
948         snprintf(key,55,"hNegMassPtCPV2_cen%d",fCenBin) ;
949         FillHistogram(key,p12.M() ,p12.Pt(),-1) ;
950       }
951       
952       if(ph1->IsDisp2OK() && ph2->IsDisp2OK()){
953         snprintf(key,55,"hMassPtDisp2_cen%d",fCenBin) ;
954         FillHistogram(key,p12.M() ,p12.Pt(),-1) ;
955       }
956       if(ph1->IsDispOK() && ph2->IsDispOK()){
957         snprintf(key,55,"hMassPtDisp_cen%d",fCenBin) ;
958         FillHistogram(key,p12.M() ,p12.Pt(),-1) ;
959         if(ph1->IsPhoton() && ph2->IsPhoton()){
960           snprintf(key,55,"hMassPtDispwou_cen%d",fCenBin) ;
961           FillHistogram(key,p12.M() ,p12.Pt(),-1) ;
962         }
963         if(a<0.9){
964           snprintf(key,55,"hMassPtDisp_a09_cen%d",fCenBin) ;
965           FillHistogram(key,p12.M() ,p12.Pt(),-1.) ;
966           if(a<0.8){
967             snprintf(key,55,"hMassPtDisp_a08_cen%d",fCenBin) ;
968             FillHistogram(key,p12.M() ,p12.Pt()) ;
969             if(a<0.7){
970               snprintf(key,55,"hMassPtDisp_a07_cen%d",fCenBin) ;
971               FillHistogram(key,p12.M() ,p12.Pt(),-1.) ;
972             }
973           }
974         }
975         snprintf(key,55,"hNegMassPtDisp_cen%d",fCenBin) ;
976         FillHistogram(key,p12.M() ,p12.Pt(),-1) ;
977         if(ph1->IsPhoton() && ph2->IsPhoton()){
978           snprintf(key,55,"hNegMassPtDispwou_cen%d",fCenBin) ;
979           FillHistogram(key,p12.M() ,p12.Pt(),-1) ;
980         }
981         if(ph1->IsCPVOK() && ph2->IsCPVOK()){
982           snprintf(key,55,"hMassPtBoth_cen%d",fCenBin) ;
983           FillHistogram(key,p12.M() ,p12.Pt(),-1) ;
984           snprintf(key,55,"hMassPtBothcore_cen%d",fCenBin) ;
985           FillHistogram(key,pv12.M() ,pv12.Pt(),-1) ;
986           if(a<0.9){
987             snprintf(key,55,"hMassPtBoth_a09_cen%d",fCenBin) ;
988             FillHistogram(key,p12.M() ,p12.Pt(),-1.) ;
989             if(a<0.8){
990               snprintf(key,55,"hMassPtBoth_a08_cen%d",fCenBin) ;
991               FillHistogram(key,p12.M() ,p12.Pt(),-1.) ;
992               if(a<0.7){
993                 snprintf(key,55,"hMassPtBoth_a07_cen%d",fCenBin) ;
994                 FillHistogram(key,p12.M() ,p12.Pt(),-1.) ;
995              }
996             }
997           }
998           snprintf(key,55,"hNegMassPtBoth_cen%d",fCenBin) ;
999           FillHistogram(key,p12.M() ,p12.Pt(),-1) ;
1000           snprintf(key,55,"hNegMassPtBothcore_cen%d",fCenBin) ;
1001           FillHistogram(key,pv12.M() ,pv12.Pt(),-1) ;
1002         }
1003       }
1004     } // end of loop i2
1005   } // end of loop i1 
1006
1007
1008   // Further fill Real disribution
1009   // now with positive contribution from new clusters
1010   // ass well fill controll histogram
1011   for (Int_t i1=0; i1<inPHOSemb-1; i1++) {
1012     AliCaloPhoton * ph1=(AliCaloPhoton*)fPHOSEvent2->At(i1) ;
1013     for (Int_t i2=i1+1; i2<inPHOSemb; i2++) {
1014       AliCaloPhoton * ph2=(AliCaloPhoton*)fPHOSEvent2->At(i2) ;
1015
1016       TLorentzVector p12  = *ph1  + *ph2;
1017       TLorentzVector pv12 = *(ph1->GetMomV2()) + *(ph2->GetMomV2());      
1018       Double_t a=TMath::Abs((ph1->E()-ph2->E())/(ph1->E()+ph2->E())) ;
1019
1020       // Controll histogram: Real after embedding
1021       snprintf(key,55,"hNewMassPtAll_cen%d",fCenBin) ;
1022       FillHistogram(key,p12.M() ,p12.Pt(),1.) ;
1023       snprintf(key,55,"hNewMassPtAllcore_cen%d",fCenBin) ;
1024       FillHistogram(key,pv12.M() ,pv12.Pt(),1.) ;
1025       if(ph1->IsPhoton() && ph2->IsPhoton()){
1026         snprintf(key,55,"hNewMassPtAllwou_cen%d",fCenBin) ;
1027         FillHistogram(key,p12.M() ,p12.Pt(),1.) ;
1028       }
1029       if(ph1->IsCPVOK() && ph2->IsCPVOK()){
1030         snprintf(key,55,"hNewMassPtCPV_cen%d",fCenBin) ;
1031         FillHistogram(key,p12.M() ,p12.Pt(),1) ;
1032         snprintf(key,55,"hNewMassPtCPVcore_cen%d",fCenBin) ;
1033         FillHistogram(key,pv12.M() ,pv12.Pt(),1) ;
1034       }
1035       if(ph1->IsCPV2OK() && ph2->IsCPV2OK()){
1036         snprintf(key,55,"hNewMassPtCPV2_cen%d",fCenBin) ;
1037         FillHistogram(key,p12.M() ,p12.Pt(),1) ;
1038       }
1039       if(ph1->IsDisp2OK() && ph2->IsDisp2OK()){
1040         snprintf(key,55,"hNewMassPtDisp2_cen%d",fCenBin) ;
1041         FillHistogram(key,p12.M() ,p12.Pt(),1) ;
1042       }
1043       if(ph1->IsDispOK() && ph2->IsDispOK()){
1044         snprintf(key,55,"hNewMassPtDisp_cen%d",fCenBin) ;
1045         FillHistogram(key,p12.M() ,p12.Pt(),1) ;
1046         if(ph1->IsPhoton() && ph2->IsPhoton()){
1047           snprintf(key,55,"hNewMassPtDispwou_cen%d",fCenBin) ;
1048           FillHistogram(key,p12.M() ,p12.Pt(),1) ;
1049         }
1050         if(ph1->IsCPVOK() && ph2->IsCPVOK()){
1051           snprintf(key,55,"hNewMassPtBoth_cen%d",fCenBin) ;
1052           FillHistogram(key,p12.M() ,p12.Pt(),1) ;
1053           snprintf(key,55,"hNewMassPtBothcore_cen%d",fCenBin) ;
1054           FillHistogram(key,pv12.M() ,pv12.Pt(),1) ;
1055         }
1056       }
1057      
1058       //Now fill main histogamm
1059       //new clusters with positive contribution
1060       if(!(ph1->IsTagged() || ph2->IsTagged()) )
1061         continue ;
1062       snprintf(key,55,"hMassPtAll_cen%d",fCenBin) ;
1063       FillHistogram(key,p12.M() ,p12.Pt(),1.) ;
1064       snprintf(key,55,"hMassPtAllcore_cen%d",fCenBin) ;
1065       FillHistogram(key,pv12.M() ,pv12.Pt(),1.) ;
1066       if(ph1->IsPhoton() && ph2->IsPhoton()){
1067         snprintf(key,55,"hMassPtAllwou_cen%d",fCenBin) ;
1068         FillHistogram(key,p12.M() ,p12.Pt(),1.) ;
1069       }
1070       if(a<0.9){
1071         snprintf(key,55,"hMassPtAll_a09_cen%d",fCenBin) ;
1072         FillHistogram(key,p12.M() ,p12.Pt()) ;
1073         if(a<0.8){
1074           snprintf(key,55,"hMassPtAll_a08_cen%d",fCenBin) ;
1075           FillHistogram(key,p12.M() ,p12.Pt()) ;
1076           if(a<0.7){
1077             snprintf(key,55,"hMassPtAll_a07_cen%d",fCenBin) ;
1078             FillHistogram(key,p12.M() ,p12.Pt()) ;
1079           }
1080         }
1081       }
1082       if(ph1->IsCPVOK() && ph2->IsCPVOK()){
1083         snprintf(key,55,"hMassPtCPV_cen%d",fCenBin) ;
1084         FillHistogram(key,p12.M() ,p12.Pt(),1) ;
1085         snprintf(key,55,"hMassPtCPVcore_cen%d",fCenBin) ;
1086         FillHistogram(key,pv12.M() ,pv12.Pt(),1) ;
1087         if(a<0.9){
1088           snprintf(key,55,"hMassPtCPV_a09_cen%d",fCenBin) ;
1089           FillHistogram(key,p12.M() ,p12.Pt()) ;
1090           if(a<0.8){
1091             snprintf(key,55,"hMassPtCPV_a08_cen%d",fCenBin) ;
1092             FillHistogram(key,p12.M() ,p12.Pt()) ;
1093             if(a<0.7){
1094               snprintf(key,55,"hMassPtCPV_a07_cen%d",fCenBin) ;
1095               FillHistogram(key,p12.M() ,p12.Pt()) ;
1096             }
1097           }
1098         }
1099       }
1100       if(ph1->IsCPV2OK() && ph2->IsCPV2OK()){
1101         snprintf(key,55,"hMassPtCPV2_cen%d",fCenBin) ;
1102         FillHistogram(key,p12.M() ,p12.Pt(),1) ;
1103          if(a<0.9){
1104           snprintf(key,55,"hMassPtCPV2_a09_cen%d",fCenBin) ;
1105           FillHistogram(key,p12.M() ,p12.Pt()) ;
1106           if(a<0.8){
1107             snprintf(key,55,"hMassPtCPV2_a08_cen%d",fCenBin) ;
1108             FillHistogram(key,p12.M() ,p12.Pt()) ;
1109             if(a<0.7){
1110               snprintf(key,55,"hMassPtCPV2_a07_cen%d",fCenBin) ;
1111               FillHistogram(key,p12.M() ,p12.Pt()) ;
1112             }
1113           }
1114         }
1115       }
1116       if(ph1->IsDisp2OK() && ph2->IsDisp2OK()){
1117         snprintf(key,55,"hMassPtDisp2_cen%d",fCenBin) ;
1118         FillHistogram(key,p12.M() ,p12.Pt(),1) ;
1119       }
1120       if(ph1->IsDispOK() && ph2->IsDispOK()){
1121         snprintf(key,55,"hMassPtDisp_cen%d",fCenBin) ;
1122         FillHistogram(key,p12.M() ,p12.Pt(),1) ;
1123         if(ph1->IsPhoton() && ph2->IsPhoton()){
1124           snprintf(key,55,"hMassPtDispwou_cen%d",fCenBin) ;
1125           FillHistogram(key,p12.M() ,p12.Pt(),1) ;
1126         }
1127         if(a<0.9){
1128           snprintf(key,55,"hMassPtDisp_a09_cen%d",fCenBin) ;
1129           FillHistogram(key,p12.M() ,p12.Pt()) ;
1130           if(a<0.8){
1131             snprintf(key,55,"hMassPtDisp_a08_cen%d",fCenBin) ;
1132             FillHistogram(key,p12.M() ,p12.Pt()) ;
1133             if(a<0.7){
1134               snprintf(key,55,"hMassPtDisp_a07_cen%d",fCenBin) ;
1135               FillHistogram(key,p12.M() ,p12.Pt()) ;
1136             }
1137           }
1138         }
1139
1140         if(ph1->IsCPVOK() && ph2->IsCPVOK()){
1141           snprintf(key,55,"hMassPtBoth_cen%d",fCenBin) ;
1142           FillHistogram(key,p12.M() ,p12.Pt(),1) ;
1143           snprintf(key,55,"hMassPtBothcore_cen%d",fCenBin) ;
1144           FillHistogram(key,pv12.M() ,pv12.Pt(),1) ;
1145           if(a<0.9){
1146             snprintf(key,55,"hMassPtBoth_a09_cen%d",fCenBin) ;
1147             FillHistogram(key,p12.M() ,p12.Pt()) ;
1148             if(a<0.8){
1149               snprintf(key,55,"hMassPtBoth_a08_cen%d",fCenBin) ;
1150               FillHistogram(key,p12.M() ,p12.Pt()) ;
1151               if(a<0.7){
1152                 snprintf(key,55,"hMassPtBoth_a07_cen%d",fCenBin) ;
1153                 FillHistogram(key,p12.M() ,p12.Pt()) ;
1154               }
1155             }
1156           }
1157         }
1158       }
1159     } // end of loop i2
1160   } // end of loop i1 
1161
1162
1163   //now mixed, does not really matter old or new list of clusters
1164   for (Int_t i1=0; i1<inPHOSemb; i1++) {
1165     AliCaloPhoton * ph1=(AliCaloPhoton*)fPHOSEvent2->At(i1) ;
1166     for(Int_t ev=0; ev<prevPHOS->GetSize();ev++){
1167       TClonesArray * mixPHOS = static_cast<TClonesArray*>(prevPHOS->At(ev)) ;
1168       for(Int_t i2=0; i2<mixPHOS->GetEntriesFast();i2++){
1169         AliCaloPhoton * ph2=(AliCaloPhoton*)mixPHOS->At(i2) ;
1170         TLorentzVector p12  = *ph1  + *ph2;
1171         TLorentzVector pv12 = *(ph1->GetMomV2()) + *(ph2->GetMomV2());
1172         Double_t a=TMath::Abs((ph1->E()-ph2->E())/(ph1->E()+ph2->E())) ;
1173         
1174         snprintf(key,55,"hMiMassPtAll_cen%d",fCenBin) ;
1175         FillHistogram(key,p12.M() ,p12.Pt(),1.) ;
1176         snprintf(key,55,"hMiMassPtAllcore_cen%d",fCenBin) ;
1177         FillHistogram(key,pv12.M() ,pv12.Pt(),1.) ;
1178         if(ph1->IsPhoton() && ph2->IsPhoton()){
1179           snprintf(key,55,"hMiMassPtAllwou_cen%d",fCenBin) ;
1180           FillHistogram(key,p12.M() ,p12.Pt(),1.) ;
1181         }
1182         if(a<0.9){
1183           snprintf(key,55,"hMiMassPtAll_a09_cen%d",fCenBin) ;
1184           FillHistogram(key,p12.M() ,p12.Pt()) ;
1185           if(a<0.8){
1186             snprintf(key,55,"hMiMassPtAll_a08_cen%d",fCenBin) ;
1187             FillHistogram(key,p12.M() ,p12.Pt()) ;
1188             if(a<0.7){
1189               snprintf(key,55,"hMiMassPtAll_a07_cen%d",fCenBin) ;
1190               FillHistogram(key,p12.M() ,p12.Pt()) ;
1191             }
1192           }
1193         }
1194         if(ph1->IsCPVOK() && ph2->IsCPVOK()){
1195           snprintf(key,55,"hMiMassPtCPV_cen%d",fCenBin) ;
1196           FillHistogram(key,p12.M() ,p12.Pt(),1.) ;
1197           snprintf(key,55,"hMiMassPtCPVcore_cen%d",fCenBin) ;
1198           FillHistogram(key,pv12.M() ,pv12.Pt(),1.) ;
1199           if(a<0.9){
1200             snprintf(key,55,"hMiMassPtCPV_a09_cen%d",fCenBin) ;
1201             FillHistogram(key,p12.M() ,p12.Pt()) ;
1202             if(a<0.8){
1203               snprintf(key,55,"hMiMassPtCPV_a08_cen%d",fCenBin) ;
1204               FillHistogram(key,p12.M() ,p12.Pt()) ;
1205               if(a<0.7){
1206                 snprintf(key,55,"hMiMassPtCPV_a07_cen%d",fCenBin) ;
1207                 FillHistogram(key,p12.M() ,p12.Pt()) ;
1208               }
1209             }
1210           }
1211         }
1212         if(ph1->IsCPV2OK() && ph2->IsCPV2OK()){
1213           snprintf(key,55,"hMiMassPtCPV2_cen%d",fCenBin) ;
1214           FillHistogram(key,p12.M() ,p12.Pt(),1.) ;
1215           if(a<0.9){
1216             snprintf(key,55,"hMiMassPtCPV2_a09_cen%d",fCenBin) ;
1217             FillHistogram(key,p12.M() ,p12.Pt()) ;
1218             if(a<0.8){
1219               snprintf(key,55,"hMiMassPtCPV2_a08_cen%d",fCenBin) ;
1220               FillHistogram(key,p12.M() ,p12.Pt()) ;
1221               if(a<0.7){
1222                 snprintf(key,55,"hMiMassPtCPV2_a07_cen%d",fCenBin) ;
1223                 FillHistogram(key,p12.M() ,p12.Pt()) ;
1224               }
1225             }
1226           }
1227         }
1228         if(ph1->IsDisp2OK() && ph2->IsDisp2OK()){
1229           snprintf(key,55,"hMiMassPtDisp2_cen%d",fCenBin) ;
1230           FillHistogram(key,p12.M() ,p12.Pt(),1.) ;
1231         }
1232         if(ph1->IsDispOK() && ph2->IsDispOK()){
1233           snprintf(key,55,"hMiMassPtDisp_cen%d",fCenBin) ;
1234           FillHistogram(key,p12.M() ,p12.Pt(),1.) ;
1235           if(ph1->IsPhoton() && ph2->IsPhoton()){
1236             snprintf(key,55,"hMiMassPtDispwou_cen%d",fCenBin) ;
1237             FillHistogram(key,p12.M() ,p12.Pt(),1.) ;
1238           }
1239           if(a<0.9){
1240             snprintf(key,55,"hMiMassPtDisp_a09_cen%d",fCenBin) ;
1241             FillHistogram(key,p12.M() ,p12.Pt()) ;
1242             if(a<0.8){
1243               snprintf(key,55,"hMiMassPtDisp_a08_cen%d",fCenBin) ;
1244               FillHistogram(key,p12.M() ,p12.Pt()) ;
1245               if(a<0.7){
1246                 snprintf(key,55,"hMiMassPtDisp_a07_cen%d",fCenBin) ;
1247                 FillHistogram(key,p12.M() ,p12.Pt()) ;
1248               }
1249             }
1250           }
1251           
1252           if(ph1->IsCPVOK() && ph2->IsCPVOK()){
1253             snprintf(key,55,"hMiMassPtBoth_cen%d",fCenBin) ;
1254             FillHistogram(key,p12.M() ,p12.Pt(),1.) ;
1255             snprintf(key,55,"hMiMassPtBothcore_cen%d",fCenBin) ;
1256             FillHistogram(key,pv12.M() ,pv12.Pt(),1.) ;
1257             if(a<0.9){
1258               snprintf(key,55,"hMiMassPtBoth_a09_cen%d",fCenBin) ;
1259               FillHistogram(key,p12.M() ,p12.Pt()) ;
1260               if(a<0.8){
1261                 snprintf(key,55,"hMiMassPtBoth_a08_cen%d",fCenBin) ;
1262                 FillHistogram(key,p12.M() ,p12.Pt()) ;
1263                 if(a<0.7){
1264                   snprintf(key,55,"hMiMassPtBoth_a07_cen%d",fCenBin) ;
1265                   FillHistogram(key,p12.M() ,p12.Pt()) ;
1266                }
1267               }
1268             }
1269           }
1270         }
1271       } // end of loop i2
1272     }
1273   } // end of loop i1
1274   
1275   
1276   //Now we either add current events to stack or remove
1277   //If no photons in current event - no need to add it to mixed
1278   if(fPHOSEvent2->GetEntriesFast()>0){
1279     prevPHOS->AddFirst(fPHOSEvent2) ;
1280     fPHOSEvent2=0;
1281     delete fPHOSEvent1;
1282     fPHOSEvent1=0;
1283     if(prevPHOS->GetSize()>100){//Remove redundant events
1284       TClonesArray * tmp = static_cast<TClonesArray*>(prevPHOS->Last()) ;
1285       prevPHOS->RemoveLast() ;
1286       delete tmp ;
1287     }
1288   }
1289   // Post output data.
1290   PostData(1, fOutputContainer);
1291   fEventCounter++;
1292 }
1293 //___________________________________________________________________________
1294 Bool_t AliAnalysisTaskPi0DiffEfficiency::IsSameCluster(AliAODCaloCluster * c1, AliAODCaloCluster * c2)const{
1295  //Compare clusters before and after embedding
1296  //clusters are the same if 
1297  // - Energy changed less than 0.1%  (numerical accuracy in reconstruction)
1298  // - lists of digits are the same
1299   
1300  if(c1->GetNCells() != c2->GetNCells())
1301    return kFALSE ;
1302  
1303  if(TMath::Abs(c1->E()-c2->E())>0.01*c1->E())
1304    return kFALSE ;
1305
1306  UShort_t *list1 = c1->GetCellsAbsId() ; 
1307  UShort_t *list2 = c2->GetCellsAbsId() ; 
1308  for(Int_t i=0; i<c1->GetNCells(); i++){
1309   if(list1[i] != list2[i])
1310     return kFALSE ;
1311  }
1312  return kTRUE ; 
1313   
1314 }
1315
1316
1317