]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGGA/CaloTrackCorrelations/AliAnaInsideClusterInvariantMass.cxx
45c90af47b6e6c4e53945cf41b894e527d03e2f4
[u/mrichter/AliRoot.git] / PWGGA / CaloTrackCorrelations / AliAnaInsideClusterInvariantMass.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is 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 // Split clusters with some criteria and calculate invariant mass
19 // to identify them as pi0 or conversion
20 //
21 //
22 //-- Author: Gustavo Conesa (LPSC-Grenoble)  
23 //_________________________________________________________________________
24
25 //////////////////////////////////////////////////////////////////////////////
26   
27   
28 // --- ROOT system --- 
29 #include <TList.h>
30 #include <TClonesArray.h>
31 #include <TObjString.h>
32 #include <TH2F.h>
33 #include <TDatabasePDG.h>
34
35 // --- Analysis system --- 
36 #include "AliAnaInsideClusterInvariantMass.h" 
37 #include "AliCaloTrackReader.h"
38 #include "AliMCAnalysisUtils.h"
39 #include "AliStack.h"
40 #include "AliFiducialCut.h"
41 #include "TParticle.h"
42 #include "AliVCluster.h"
43 #include "AliAODEvent.h"
44 #include "AliAODMCParticle.h"
45 #include "AliEMCALGeoParams.h"
46
47 // --- Detectors ---
48 //#include "AliPHOSGeoUtils.h"
49 #include "AliEMCALGeometry.h"
50
51 ClassImp(AliAnaInsideClusterInvariantMass)
52   
53 //__________________________________________________________________
54 AliAnaInsideClusterInvariantMass::AliAnaInsideClusterInvariantMass() : 
55   AliAnaCaloTrackCorrBaseClass(),            fCalorimeter(""),
56   fMinNCells(0),                             fMinBadDist(0),
57   fHistoECut(0),                             fCheckSplitDistToBad(0),                   fFillAngleHisto(kFALSE),
58   fFillTMHisto(kFALSE),                      fFillTMResidualHisto(kFALSE),              fFillSSExtraHisto(kFALSE),
59   fFillMCHisto(kFALSE),                      fFillSSWeightHisto(kFALSE),                fFillEbinHisto(0),
60   fFillMCOverlapHisto(0),                    fFillNCellHisto(0),                        fFillIdConvHisto(0),
61   fFillIdEtaHisto(0),                        fFillHighMultHisto(0),
62   fFillArmenterosHisto(0),                   fFillThetaStarHisto(0),
63   fSSWeightN(0),                             fSSECellCutN(0),                           fWSimu(0),
64   fhMassAsyCutNLocMax1(0),                   fhMassAsyCutNLocMax2(0),                   fhMassAsyCutNLocMaxN(0),
65   fhM02AsyCutNLocMax1(0),                    fhM02AsyCutNLocMax2(0),                    fhM02AsyCutNLocMaxN(0),
66   fhMassM02CutNLocMax1(0),                   fhMassM02CutNLocMax2(0),                   fhMassM02CutNLocMaxN(0),
67   fhAsymM02CutNLocMax1(0),                   fhAsymM02CutNLocMax2(0),                   fhAsymM02CutNLocMaxN(0),
68   fhMassSplitECutNLocMax1(0),                fhMassSplitECutNLocMax2(0),                fhMassSplitECutNLocMaxN(0),
69   fhMCGenFracAfterCutsNLocMax1MCPi0(0),      fhMCGenFracAfterCutsNLocMax2MCPi0(0),      fhMCGenFracAfterCutsNLocMaxNMCPi0(0),
70   fhMCGenSplitEFracAfterCutsNLocMax1MCPi0(0),fhMCGenSplitEFracAfterCutsNLocMax2MCPi0(0),fhMCGenSplitEFracAfterCutsNLocMaxNMCPi0(0),
71   fhNCellMassEHighNLocMax1MCPi0(0),          fhNCellM02EHighNLocMax1MCPi0(0),
72   fhNCellMassELowNLocMax1MCPi0(0),           fhNCellM02ELowNLocMax1MCPi0(0),
73   fhNCellMassEHighNLocMax2MCPi0(0),          fhNCellM02EHighNLocMax2MCPi0(0),
74   fhNCellMassELowNLocMax2MCPi0(0),           fhNCellM02ELowNLocMax2MCPi0(0),
75   fhNCellMassEHighNLocMaxNMCPi0(0),          fhNCellM02EHighNLocMaxNMCPi0(0),
76   fhNCellMassELowNLocMaxNMCPi0(0),           fhNCellM02ELowNLocMaxNMCPi0(0),
77   fhAnglePairPrimPi0RecoNLocMax1(0),         fhAnglePairPrimPi0RecoNLocMax2(0),         fhAnglePairPrimPi0RecoNLocMaxN(0),
78   fhAnglePairPrimPi0vsRecoNLocMax1(0),       fhAnglePairPrimPi0vsRecoNLocMax2(0),       fhAnglePairPrimPi0vsRecoNLocMaxN(0),
79   fhCentralityPi0NLocMax1(0),                fhCentralityEtaNLocMax1(0),
80   fhCentralityPi0NLocMax2(0),                fhCentralityEtaNLocMax2(0),
81   fhCentralityPi0NLocMaxN(0),                fhCentralityEtaNLocMaxN(0),
82   fhEventPlanePi0NLocMax1(0),                fhEventPlaneEtaNLocMax1(0),
83   fhEventPlanePi0NLocMax2(0),                fhEventPlaneEtaNLocMax2(0),
84   fhEventPlanePi0NLocMaxN(0),                fhEventPlaneEtaNLocMaxN(0),
85   fhClusterEtaPhiNLocMax1(0),                fhClusterEtaPhiNLocMax2(0),                fhClusterEtaPhiNLocMaxN(0),
86   fhPi0EtaPhiNLocMax1(0),                    fhPi0EtaPhiNLocMax2(0),                    fhPi0EtaPhiNLocMaxN(0),
87   fhEtaEtaPhiNLocMax1(0),                    fhEtaEtaPhiNLocMax2(0),                    fhEtaEtaPhiNLocMaxN(0),
88   fhPi0EPairDiffTimeNLM1(0),                 fhPi0EPairDiffTimeNLM2(0),                 fhPi0EPairDiffTimeNLMN(0),
89   fhEtaEPairDiffTimeNLM1(0),                 fhEtaEPairDiffTimeNLM2(0),                 fhEtaEPairDiffTimeNLMN(0),
90   fhMCPi0HighNLMPair(0),                     fhMCPi0LowNLMPair(0),
91   fhMCPi0AnyNLMPair(0),                      fhMCPi0NoneNLMPair(0),
92   fhMCPi0HighNLMPairNoMCMatch(0),            fhMCPi0LowNLMPairNoMCMatch(0),
93   fhMCPi0AnyNLMPairNoMCMatch(0),             fhMCPi0NoneNLMPairNoMCMatch(0),
94   fhMCPi0HighNLMPairOverlap(0),              fhMCPi0LowNLMPairOverlap(0),
95   fhMCPi0AnyNLMPairOverlap(0),               fhMCPi0NoneNLMPairOverlap(0),
96   fhMCPi0HighNLMPairNoMCMatchOverlap(0),     fhMCPi0LowNLMPairNoMCMatchOverlap(0),
97   fhMCPi0AnyNLMPairNoMCMatchOverlap(0),      fhMCPi0NoneNLMPairNoMCMatchOverlap(0),
98   fhMCPi0DecayPhotonHitHighLM(0),            fhMCPi0DecayPhotonAdjHighLM(0),
99   fhMCPi0DecayPhotonHitOtherLM(0),           fhMCPi0DecayPhotonAdjOtherLM(0),
100   fhMCPi0DecayPhotonAdjacent(0),             fhMCPi0DecayPhotonHitNoLM(0),
101   fhMCPi0DecayPhotonHitHighLMOverlap(0),     fhMCPi0DecayPhotonAdjHighLMOverlap(0),
102   fhMCPi0DecayPhotonHitOtherLMOverlap(0),    fhMCPi0DecayPhotonAdjOtherLMOverlap(0),
103   fhMCPi0DecayPhotonAdjacentOverlap(0),      fhMCPi0DecayPhotonHitNoLMOverlap(0),
104   fhMCEOverlapType(0),                       fhMCEOverlapTypeMatch(0)
105 {
106   //default ctor
107   
108   // Init array of histograms
109   for(Int_t i = 0; i < 7; i++)
110   {
111     for(Int_t j = 0; j < 2; j++)
112     {
113       fhMassNLocMax1[i][j]  = 0;
114       fhMassNLocMax2[i][j]  = 0;
115       fhMassNLocMaxN[i][j]  = 0;
116       fhNLocMax[i][j]       = 0;
117       fhNLocMaxM02Cut[i][j] = 0;
118       fhSplitClusterENLocMax   [i][j] = 0;
119       fhSplitClusterEPi0NLocMax[i][j] = 0;
120       fhM02NLocMax1[i][j]   = 0;
121       fhM02NLocMax2[i][j]   = 0;
122       fhM02NLocMaxN[i][j]   = 0;
123       fhNCellNLocMax1[i][j] = 0;
124       fhNCellNLocMax2[i][j] = 0;
125       fhNCellNLocMaxN[i][j] = 0;
126       fhM02Pi0NLocMax1[i][j] = 0;
127       fhM02EtaNLocMax1[i][j] = 0;
128       fhM02ConNLocMax1[i][j] = 0;
129       fhM02Pi0NLocMax2[i][j] = 0;
130       fhM02EtaNLocMax2[i][j] = 0;
131       fhM02ConNLocMax2[i][j] = 0;
132       fhM02Pi0NLocMaxN[i][j] = 0;
133       fhM02EtaNLocMaxN[i][j] = 0;
134       fhM02ConNLocMaxN[i][j] = 0;
135       
136       fhMassPi0NLocMax1[i][j] = 0;
137       fhMassEtaNLocMax1[i][j] = 0;
138       fhMassConNLocMax1[i][j] = 0;
139       fhMassPi0NLocMax2[i][j] = 0;
140       fhMassEtaNLocMax2[i][j] = 0;
141       fhMassConNLocMax2[i][j] = 0;
142       fhMassPi0NLocMaxN[i][j] = 0;
143       fhMassEtaNLocMaxN[i][j] = 0;
144       fhMassConNLocMaxN[i][j] = 0;
145       
146       fhNCellPi0NLocMax1[i][j] = 0;
147       fhNCellEtaNLocMax1[i][j] = 0;
148       fhNCellPi0NLocMax2[i][j] = 0;
149       fhNCellEtaNLocMax2[i][j] = 0;
150       fhNCellPi0NLocMaxN[i][j] = 0;
151       fhNCellEtaNLocMaxN[i][j] = 0;
152       
153       fhAsyPi0NLocMax1[i][j] = 0;
154       fhAsyEtaNLocMax1[i][j] = 0;
155       fhAsyConNLocMax1[i][j] = 0;
156       fhAsyPi0NLocMax2[i][j] = 0;
157       fhAsyEtaNLocMax2[i][j] = 0;
158       fhAsyConNLocMax2[i][j] = 0;
159       fhAsyPi0NLocMaxN[i][j] = 0;
160       fhAsyEtaNLocMaxN[i][j] = 0;
161       fhAsyConNLocMaxN[i][j] = 0;      
162       
163       fhMassM02NLocMax1[i][j]= 0;
164       fhMassM02NLocMax2[i][j]= 0;
165       fhMassM02NLocMaxN[i][j]= 0;   
166       fhMassDispEtaNLocMax1[i][j]= 0;
167       fhMassDispEtaNLocMax2[i][j]= 0;
168       fhMassDispEtaNLocMaxN[i][j]= 0;      
169       fhMassDispPhiNLocMax1[i][j]= 0;
170       fhMassDispPhiNLocMax2[i][j]= 0;
171       fhMassDispPhiNLocMaxN[i][j]= 0;      
172       fhMassDispAsyNLocMax1[i][j]= 0;
173       fhMassDispAsyNLocMax2[i][j]= 0;
174       fhMassDispAsyNLocMaxN[i][j]= 0;      
175       
176       fhSplitEFractionNLocMax1[i][j]=0;
177       fhSplitEFractionNLocMax2[i][j]=0;
178       fhSplitEFractionNLocMaxN[i][j]=0;
179       
180       fhAnglePairNLocMax1         [i][j] = 0;
181       fhAnglePairNLocMax2         [i][j] = 0;
182       fhAnglePairNLocMaxN         [i][j] = 0;
183
184       fhAnglePairAfterCutsNLocMax1[i][j] = 0;
185       fhAnglePairAfterCutsNLocMax2[i][j] = 0;
186       fhAnglePairAfterCutsNLocMaxN[i][j] = 0;
187
188       fhAnglePairPi0NLocMax1      [i][j] = 0;
189       fhAnglePairPi0NLocMax2      [i][j] = 0;
190       fhAnglePairPi0NLocMaxN      [i][j] = 0;
191       
192       fhAnglePairMassNLocMax1     [i][j] = 0;
193       fhAnglePairMassNLocMax2     [i][j] = 0;
194       fhAnglePairMassNLocMaxN     [i][j] = 0;
195
196       fhAnglePairM02NLocMax1      [i][j] = 0;
197       fhAnglePairM02NLocMax2      [i][j] = 0;
198       fhAnglePairM02NLocMaxN      [i][j] = 0;
199       
200       fhCosThStarNLocMax1         [i][j] = 0;
201       fhCosThStarNLocMax2         [i][j] = 0;
202       fhCosThStarNLocMaxN         [i][j] = 0;
203       
204       fhCosThStarAfterCutsNLocMax1[i][j] = 0;
205       fhCosThStarAfterCutsNLocMax2[i][j] = 0;
206       fhCosThStarAfterCutsNLocMaxN[i][j] = 0;
207       
208       fhCosThStarPi0NLocMax1      [i][j] = 0;
209       fhCosThStarPi0NLocMax2      [i][j] = 0;
210       fhCosThStarPi0NLocMaxN      [i][j] = 0;
211       
212       fhMCGenFracNLocMax1[i][j]= 0;
213       fhMCGenFracNLocMax2[i][j]= 0;
214       fhMCGenFracNLocMaxN[i][j]= 0;
215
216       fhMCGenFracNLocMax1NoOverlap[i][j]= 0;
217       fhMCGenFracNLocMax2NoOverlap[i][j]= 0;
218       fhMCGenFracNLocMaxNNoOverlap[i][j]= 0;
219       
220       fhMCGenSplitEFracNLocMax1[i][j]= 0;
221       fhMCGenSplitEFracNLocMax2[i][j]= 0;
222       fhMCGenSplitEFracNLocMaxN[i][j]= 0;    
223
224       fhMCGenSplitEFracNLocMax1NoOverlap[i][j]= 0;
225       fhMCGenSplitEFracNLocMax2NoOverlap[i][j]= 0;
226       fhMCGenSplitEFracNLocMaxNNoOverlap[i][j]= 0;
227       
228       fhMCGenEFracvsSplitEFracNLocMax1[i][j]= 0;
229       fhMCGenEFracvsSplitEFracNLocMax2[i][j]= 0;
230       fhMCGenEFracvsSplitEFracNLocMaxN[i][j]= 0;    
231       
232       fhMCGenEvsSplitENLocMax1[i][j]= 0;
233       fhMCGenEvsSplitENLocMax2[i][j]= 0;
234       fhMCGenEvsSplitENLocMaxN[i][j]= 0;     
235       
236       fhAsymNLocMax1 [i][j] = 0;
237       fhAsymNLocMax2 [i][j] = 0;
238       fhAsymNLocMaxN [i][j] = 0;
239       
240       fhMassAfterCutsNLocMax1[i][j] = 0;
241       fhMassAfterCutsNLocMax2[i][j] = 0;
242       fhMassAfterCutsNLocMaxN[i][j] = 0;
243
244       
245       fhSplitEFractionAfterCutsNLocMax1[i][j] = 0 ;
246       fhSplitEFractionAfterCutsNLocMax2[i][j] = 0 ;
247       fhSplitEFractionAfterCutsNLocMaxN[i][j] = 0 ;
248     }
249    
250     for(Int_t jj = 0; jj < 4; jj++)
251     {
252       fhM02MCGenFracNLocMax1Ebin[i][jj] = 0;
253       fhM02MCGenFracNLocMax2Ebin[i][jj] = 0;
254       fhM02MCGenFracNLocMaxNEbin[i][jj] = 0;
255       
256       fhMassMCGenFracNLocMax1Ebin[i][jj]= 0;
257       fhMassMCGenFracNLocMax2Ebin[i][jj]= 0;
258       fhMassMCGenFracNLocMaxNEbin[i][jj]= 0;
259       
260       fhMCGenFracNLocMaxEbin[i][jj]       = 0;
261       fhMCGenFracNLocMaxEbinMatched[i][jj]= 0;
262       
263       fhMassSplitEFractionNLocMax1Ebin[i][jj] = 0;
264       fhMassSplitEFractionNLocMax2Ebin[i][jj] = 0;
265       fhMassSplitEFractionNLocMaxNEbin[i][jj] = 0;
266     }
267     
268     fhTrackMatchedDEtaNLocMax1[i] = 0;
269     fhTrackMatchedDPhiNLocMax1[i] = 0;
270     fhTrackMatchedDEtaNLocMax2[i] = 0;
271     fhTrackMatchedDPhiNLocMax2[i] = 0; 
272     fhTrackMatchedDEtaNLocMaxN[i] = 0; 
273     fhTrackMatchedDPhiNLocMaxN[i] = 0; 
274
275     fhTrackMatchedDEtaNLocMax1Pos[i] = 0;
276     fhTrackMatchedDPhiNLocMax1Pos[i] = 0;
277     fhTrackMatchedDEtaNLocMax2Pos[i] = 0;
278     fhTrackMatchedDPhiNLocMax2Pos[i] = 0;
279     fhTrackMatchedDEtaNLocMaxNPos[i] = 0;
280     fhTrackMatchedDPhiNLocMaxNPos[i] = 0;
281
282     fhTrackMatchedDEtaNLocMax1Neg[i] = 0;
283     fhTrackMatchedDPhiNLocMax1Neg[i] = 0;
284     fhTrackMatchedDEtaNLocMax2Neg[i] = 0;
285     fhTrackMatchedDPhiNLocMax2Neg[i] = 0;
286     fhTrackMatchedDEtaNLocMaxNNeg[i] = 0;
287     fhTrackMatchedDPhiNLocMaxNNeg[i] = 0;
288     
289     for(Int_t nlm = 0; nlm < 3; nlm++)
290     {
291       fhMCEM02Overlap0     [nlm][i] = 0;
292       fhMCEM02Overlap1     [nlm][i] = 0;
293       fhMCEM02OverlapN     [nlm][i] = 0;
294       fhMCEM02Overlap0Match[nlm][i] = 0;
295       fhMCEM02Overlap1Match[nlm][i] = 0;
296       fhMCEM02OverlapNMatch[nlm][i] = 0;
297       
298       fhMCEMassOverlap0     [nlm][i] = 0;
299       fhMCEMassOverlap1     [nlm][i] = 0;
300       fhMCEMassOverlapN     [nlm][i] = 0;
301       fhMCEMassOverlap0Match[nlm][i] = 0;
302       fhMCEMassOverlap1Match[nlm][i] = 0;
303       fhMCEMassOverlapNMatch[nlm][i] = 0;
304
305       fhMCEAsymOverlap0     [nlm][i] = 0;
306       fhMCEAsymOverlap1     [nlm][i] = 0;
307       fhMCEAsymOverlapN     [nlm][i] = 0;
308       fhMCEAsymOverlap0Match[nlm][i] = 0;
309       fhMCEAsymOverlap1Match[nlm][i] = 0;
310       fhMCEAsymOverlapNMatch[nlm][i] = 0;
311
312       fhMCENCellOverlap0     [nlm][i] = 0;
313       fhMCENCellOverlap1     [nlm][i] = 0;
314       fhMCENCellOverlapN     [nlm][i] = 0;
315       fhMCENCellOverlap0Match[nlm][i] = 0;
316       fhMCENCellOverlap1Match[nlm][i] = 0;
317       fhMCENCellOverlapNMatch[nlm][i] = 0;
318       
319       fhMCEEpriOverlap0     [nlm][i] = 0;
320       fhMCEEpriOverlap1     [nlm][i] = 0;
321       fhMCEEpriOverlapN     [nlm][i] = 0;
322       fhMCEEpriOverlap0Match[nlm][i] = 0;
323       fhMCEEpriOverlap1Match[nlm][i] = 0;
324       fhMCEEpriOverlapNMatch[nlm][i] = 0;
325
326       fhMCEEpriOverlap0IdPi0[nlm][i] = 0;
327       fhMCEEpriOverlap1IdPi0[nlm][i] = 0;
328       fhMCEEpriOverlapNIdPi0[nlm][i] = 0;
329       
330       fhMCESplitEFracOverlap0     [nlm][i] = 0;
331       fhMCESplitEFracOverlap1     [nlm][i] = 0;
332       fhMCESplitEFracOverlapN     [nlm][i] = 0;
333       fhMCESplitEFracOverlap0Match[nlm][i] = 0;
334       fhMCESplitEFracOverlap1Match[nlm][i] = 0;
335       fhMCESplitEFracOverlapNMatch[nlm][i] = 0;
336       
337       fhMCENOverlaps       [nlm][i] = 0;
338       fhMCENOverlapsMatch  [nlm][i] = 0;
339             
340       if(i > 3) continue ;
341       
342       fhMCPi0MassM02Overlap0     [nlm][i] = 0;
343       fhMCPi0MassM02Overlap1     [nlm][i] = 0;
344       fhMCPi0MassM02OverlapN     [nlm][i] = 0;
345       fhMCPi0MassM02Overlap0Match[nlm][i] = 0;
346       fhMCPi0MassM02Overlap1Match[nlm][i] = 0;
347       fhMCPi0MassM02OverlapNMatch[nlm][i] = 0;
348     }
349   }
350    
351   for(Int_t i = 0; i < 2; i++)
352   {
353     fhSplitEFractionvsAsyNLocMax1[i] = 0;
354     fhSplitEFractionvsAsyNLocMax2[i] = 0; 
355     fhSplitEFractionvsAsyNLocMaxN[i] = 0;    
356   }
357   
358   for(Int_t i = 0; i < 4; i++)
359   {
360     fhMassM02NLocMax1Ebin[i] = 0 ;
361     fhMassM02NLocMax2Ebin[i] = 0 ;
362     fhMassM02NLocMaxNEbin[i] = 0 ;
363
364     fhMassAsyNLocMax1Ebin[i] = 0 ;
365     fhMassAsyNLocMax2Ebin[i] = 0 ;
366     fhMassAsyNLocMaxNEbin[i] = 0 ;
367
368     fhAsyMCGenRecoNLocMax1EbinPi0[i] = 0 ;
369     fhAsyMCGenRecoNLocMax2EbinPi0[i] = 0 ;
370     fhAsyMCGenRecoNLocMaxNEbinPi0[i] = 0 ;
371     
372     fhMassDispEtaNLocMax1Ebin[i] = 0 ;
373     fhMassDispEtaNLocMax2Ebin[i] = 0 ;
374     fhMassDispEtaNLocMaxNEbin[i] = 0 ;
375     
376     fhMassDispPhiNLocMax1Ebin[i] = 0 ;
377     fhMassDispPhiNLocMax2Ebin[i] = 0 ;
378     fhMassDispPhiNLocMaxNEbin[i] = 0 ;    
379     
380     fhMassDispAsyNLocMax1Ebin[i] = 0 ;
381     fhMassDispAsyNLocMax2Ebin[i] = 0 ;
382     fhMassDispAsyNLocMaxNEbin[i] = 0 ;    
383
384     fhMCAsymM02NLocMax1MCPi0Ebin[i] = 0 ;
385     fhMCAsymM02NLocMax2MCPi0Ebin[i] = 0 ;
386     fhMCAsymM02NLocMaxNMCPi0Ebin[i] = 0 ;
387   }
388   
389   for(Int_t nlm = 0; nlm < 3; nlm++)
390   {
391     
392     fhMCPi0DecayPhotonHitHighLMDiffELM1 [nlm] = 0 ;
393     fhMCPi0DecayPhotonAdjHighLMDiffELM1 [nlm] = 0 ;           
394     fhMCPi0DecayPhotonHitOtherLMDiffELM1[nlm] = 0 ;           
395     fhMCPi0DecayPhotonAdjOtherLMDiffELM1[nlm] = 0 ;            
396     
397     fhMCPi0DecayPhotonHitHighLMOverlapDiffELM1 [nlm] = 0 ;     
398     fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM1 [nlm] = 0 ;      
399     fhMCPi0DecayPhotonHitOtherLMOverlapDiffELM1[nlm] = 0 ;     
400     fhMCPi0DecayPhotonAdjOtherLMOverlapDiffELM1[nlm] = 0 ;     
401     
402     fhMCPi0DecayPhotonHitHighLMDiffELM2 [nlm] = 0 ;           
403     fhMCPi0DecayPhotonAdjHighLMDiffELM2 [nlm] = 0 ;            
404     fhMCPi0DecayPhotonHitOtherLMDiffELM2[nlm] = 0 ;            
405     fhMCPi0DecayPhotonAdjOtherLMDiffELM2[nlm] = 0 ;         
406     
407     fhMCPi0DecayPhotonHitHighLMOverlapDiffELM2 [nlm] = 0 ;    
408     fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM2 [nlm] = 0 ;      
409     fhMCPi0DecayPhotonHitOtherLMOverlapDiffELM2[nlm] = 0 ;     
410     fhMCPi0DecayPhotonAdjOtherLMOverlapDiffELM2[nlm] = 0 ;
411     
412     fhMCPi0DecayPhotonHitHighLMDiffELM1vsELM1 [nlm] = 0 ;
413     fhMCPi0DecayPhotonAdjHighLMDiffELM1vsELM1 [nlm] = 0 ;
414     fhMCPi0DecayPhotonHitOtherLMDiffELM1vsELM1[nlm] = 0 ;
415     fhMCPi0DecayPhotonAdjOtherLMDiffELM1vsELM1[nlm] = 0 ;
416     
417     fhMCPi0DecayPhotonHitHighLMOverlapDiffELM1vsELM1 [nlm] = 0 ;
418     fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM1vsELM1 [nlm] = 0 ;
419     fhMCPi0DecayPhotonHitOtherLMOverlapDiffELM1vsELM1[nlm] = 0 ;
420     fhMCPi0DecayPhotonAdjOtherLMOverlapDiffELM1vsELM1[nlm] = 0 ;
421     
422     fhMCPi0DecayPhotonHitHighLMDiffELM2vsELM2 [nlm] = 0 ;
423     fhMCPi0DecayPhotonAdjHighLMDiffELM2vsELM2 [nlm] = 0 ;
424     fhMCPi0DecayPhotonHitOtherLMDiffELM2vsELM2[nlm] = 0 ;
425     fhMCPi0DecayPhotonAdjOtherLMDiffELM2vsELM2[nlm] = 0 ;
426     
427     fhMCPi0DecayPhotonHitHighLMOverlapDiffELM2vsELM2 [nlm] = 0 ;
428     fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM2vsELM2 [nlm] = 0 ;
429     fhMCPi0DecayPhotonHitOtherLMOverlapDiffELM2vsELM2[nlm] = 0 ;
430     fhMCPi0DecayPhotonAdjOtherLMOverlapDiffELM2vsELM2[nlm] = 0 ;
431     
432     fhMCPi0DecayPhotonHitHighLMMass [nlm] = 0 ;
433     fhMCPi0DecayPhotonAdjHighLMMass [nlm] = 0 ;                 
434     fhMCPi0DecayPhotonHitOtherLMMass[nlm] = 0 ;              
435     fhMCPi0DecayPhotonAdjOtherLMMass[nlm] = 0 ;               
436     fhMCPi0DecayPhotonAdjacentMass  [nlm] = 0 ;                  
437     fhMCPi0DecayPhotonHitNoLMMass   [nlm] = 0 ;                  
438     
439     fhMCPi0DecayPhotonHitHighLMOverlapMass [nlm] = 0 ;
440     fhMCPi0DecayPhotonAdjHighLMOverlapMass [nlm] = 0 ;          
441     fhMCPi0DecayPhotonHitOtherLMOverlapMass[nlm] = 0 ;        
442     fhMCPi0DecayPhotonAdjOtherLMOverlapMass[nlm] = 0 ;        
443     fhMCPi0DecayPhotonAdjacentOverlapMass  [nlm] = 0 ;
444     fhMCPi0DecayPhotonHitNoLMOverlapMass   [nlm] = 0 ;          
445     
446     fhPi0CellE       [nlm] = 0 ;
447     fhPi0CellEFrac   [nlm] = 0 ;
448     fhPi0CellLogEFrac[nlm] = 0 ;
449     
450     fhPi0CellEMaxEMax2Frac   [nlm] = 0 ;
451     fhPi0CellEMaxClusterFrac [nlm] = 0 ;
452     fhPi0CellEMax2ClusterFrac[nlm] = 0 ;
453
454     fhPi0CellEMaxFrac [nlm] = 0 ;
455     fhPi0CellEMax2Frac[nlm] = 0 ;
456     
457     for(Int_t i = 0; i < 10; i++)
458     {
459       fhM02WeightPi0  [nlm][i] = 0;
460       fhM02ECellCutPi0[nlm][i] = 0;
461     }
462     
463     fhMassBadDistClose[nlm] = 0;
464     fhM02BadDistClose [nlm] = 0;
465     fhMassOnBorder    [nlm] = 0;
466     fhM02OnBorder     [nlm] = 0;
467     
468     fhAsyMCGenRecoDiffMCPi0    [nlm] = 0;
469     fhAsyMCGenRecoDiffMCPi0Conv[nlm] = 0;
470
471   }
472   
473   for(Int_t i = 0; i < 7; i++)
474   {
475     for(Int_t j = 0; j < 4; j++)
476     {
477       
478       fhArmNLocMax1[i][j]  = 0;
479       fhArmNLocMax2[i][j]  = 0;
480       fhArmNLocMaxN[i][j]  = 0;
481       
482       fhArmPi0NLocMax1[i][j] = 0;
483       fhArmPi0NLocMax2[i][j] = 0;
484       fhArmPi0NLocMaxN[i][j] = 0;
485       
486       fhArmAfterCutsNLocMax1[i][j] = 0;
487       fhArmAfterCutsNLocMax2[i][j] = 0;
488       fhArmAfterCutsNLocMaxN[i][j] = 0;
489       
490     }
491   }
492   
493   InitParameters();
494
495 }
496
497 //_______________________________________________________________________________________________________
498 void AliAnaInsideClusterInvariantMass::CheckLocalMaximaMCOrigin(AliVCluster* cluster,const Int_t mcindex, const Int_t noverlaps,
499                                                                 const Float_t e1,    const Float_t e2,    const Float_t mass)
500                                                                 //Float_t m02,
501                                                                 //TLorentzVector l1, TLorentzVector l2)
502 {
503   // Check origin NLM tower of the cluster, when MC gives merged pi0
504   
505   if(mcindex != kmcPi0 && mcindex != kmcPi0Conv) return;
506
507   const UInt_t nc = cluster->GetNCells();
508   Int_t   list[nc];
509   Float_t elist[nc];
510   Int_t nMax = GetCaloUtils()->GetNumberOfLocalMaxima(cluster, GetEMCALCells(),list, elist);
511   
512   
513   //// PRINTS /////
514   
515   //if(mcindex==kmcPi0)     printf("** Normal Pi0 **\n");
516   //if(mcindex==kmcPi0Conv) printf("** Converted Pi0 **\n");
517
518 //  if((mass < 0.06 || mass > 1.8) && mcindex==kmcPi0 && noverlaps == 0)
519 //  {
520 //     printf("** N max %d - Overlaps = %d **, mass %2.2f, m02 %2.2f, Cl1(E,eta,phi)=(%2.2f,%2.2f,%2.2f),Cl2(E,eta,phi)=(%2.2f,%2.2f,%2.2f), mass(1,2) %2.2f \n",
521 //            nMax, noverlaps,mass,m02,
522 //            l1.E(),l1.Eta(),l1.Phi()*TMath::RadToDeg(),
523 //            l2.E(),l2.Eta(),l2.Phi()*TMath::RadToDeg(), (l1+l2).M());
524 //    
525 //    // Study the mothers of cluster
526 //    printf("Cluster MC labels %d \n", cluster->GetNLabels());
527 //    for (UInt_t ilab = 0; ilab < cluster->GetNLabels(); ilab++ )
528 //    {
529 //      Int_t mclabel = cluster->GetLabels()[ilab];
530 //      
531 //      Bool_t  mOK = 0;
532 //      Int_t   mpdg = -999999;
533 //      Int_t   mstatus = -1;
534 //      Int_t   grandLabel = -1;
535 //      TLorentzVector mother = GetMCAnalysisUtils()->GetMother(mclabel,GetReader(),mpdg,mstatus,mOK,grandLabel);
536 //      
537 //      printf("******** mother %d : Label %d, pdg %d; status %d, E %2.2f, Eta %2.2f, Phi %2.2f, ok %d, mother label %d\n",
538 //             ilab, mclabel, mpdg, mstatus,mother.E(), mother.Eta(),mother.Phi()*TMath::RadToDeg(),mOK,grandLabel);
539 //      
540 //      if( ( mpdg == 22 || TMath::Abs(mpdg)==11 ) && grandLabel >=0 )
541 //      {
542 //        while( ( mpdg == 22 || TMath::Abs(mpdg)==11 ) && grandLabel >=0 )
543 //        {
544 //          Int_t newLabel = -1;
545 //          TLorentzVector grandmother = GetMCAnalysisUtils()->GetMother(grandLabel,GetReader(),mpdg,mstatus,mOK,newLabel);
546 //          printf("\t grandmother %d : Label %d, pdg %d; status %d, E %2.2f, Eta %2.2f, Phi %2.2f, ok %d, mother label %d\n",
547 //                 ilab, grandLabel, mpdg, mstatus,grandmother.E(), grandmother.Eta(), grandmother.Phi()*TMath::RadToDeg(),mOK,newLabel);
548 //          grandLabel = newLabel;
549 //          
550 //        }
551 //      }
552 //    }
553 //    
554 //    printf("Cells in cluster %d\n",cluster->GetNCells() );
555 //    for(Int_t icell = 0; icell < cluster->GetNCells(); icell++)
556 //    {
557 //      Int_t absIdCell = cluster->GetCellAbsId(icell);
558 //      Int_t mcLabel   = GetEMCALCells()->GetCellMCLabel(absIdCell);
559 //      GetReader()->RemapMCLabelForAODs(mcLabel);
560 //      Int_t ietac=-1; Int_t iphic = 0; Int_t rcuc = 0;
561 //      Int_t smc = GetModuleNumberCellIndexes(absIdCell,fCalorimeter, ietac, iphic, rcuc);
562 //
563 //      printf(" \t cell i %d, abs %d, amp %2.3f, mclabel %d, (sm,ieta,iphi)=(%d,%d,%d)\n",icell,absIdCell,GetEMCALCells()->GetCellAmplitude(absIdCell),mcLabel,smc,ietac,iphic);
564 //    }
565 //  }
566   //// PRINTS /////
567   
568   
569   //If only one maxima, consider all the towers in the cluster
570   if(nMax==1)
571   {
572     for (UInt_t icell = 0; icell < nc; icell++ )
573     {
574       list [icell] = cluster->GetCellAbsId(icell);
575       elist[icell] = GetEMCALCells()->GetCellAmplitude(list[icell]);
576     }
577   }
578   
579   Int_t nmaxima = nMax;
580   if(nMax==1) nmaxima = nc ;
581   
582   //Find highest energy Local Maxima Towers
583   Int_t   imax  = -1;
584   Int_t   imax2 = -1;
585   Float_t emax  = -1;
586   Float_t emax2 = -1;
587   for(Int_t i = 0; i < nmaxima; i++)
588   {
589     //printf("i %d: AbsId %d; E %2.3f\n",i,list[i],elist[i]);
590     if(elist[i] > emax)
591     {
592       imax = i;
593       emax = elist[i];
594     }
595   }
596   //Find second highest
597   for(Int_t i = 0; i < nmaxima; i++)
598   {
599     if(i==imax) continue;
600     
601     //printf("j %d: AbsId %d; E %2.3f\n",i,list[i],elist[i]);
602     
603     
604     if(elist[i] > emax2)
605     {
606       imax2 = i;
607       emax2 = elist[i];
608     }
609   }
610   
611 // if((mass < 0.06 || mass > 1.8) && mcindex==kmcPi0 && noverlaps == 0)
612 //    printf("Local maxima: a) index %d, absId %d; b) index %d, absId %d\n",imax, list[imax], imax2, list[imax2]);
613   
614   //---------------------------------------------------------
615   //---------------------------------------------------------
616   // Compare ancestors of all local maxima at cell MC level
617   //---------------------------------------------------------
618   //---------------------------------------------------------
619   
620   // Check that the highest mc label and the max cluster label are the same
621   Int_t mcLabelMax = -1 ;
622   if(imax >=0 )
623   {
624     mcLabelMax = GetEMCALCells()->GetCellMCLabel(list[imax]);
625     GetReader()->RemapMCLabelForAODs(mcLabelMax);
626   }
627   
628   Int_t mcLabelMax2 = -1 ;
629   if(imax >=0 )
630   {
631     mcLabelMax2 = GetEMCALCells()->GetCellMCLabel(list[imax2]);
632     GetReader()->RemapMCLabelForAODs(mcLabelMax2);
633   }
634   
635   Int_t mcLabelclusterMax = cluster->GetLabels()[0];
636   Bool_t matchHighLMAndHighMC = kFALSE;
637   
638   //printf("MC label: LM1 %d, LM2 %d, cluster %d\n",mcLabelMax,mcLabelMax2,mcLabelclusterMax);
639   
640   if(mcLabelclusterMax == mcLabelMax && mcLabelclusterMax >= 0)
641   {
642     matchHighLMAndHighMC = kTRUE;
643     //printf("\t *** MATCH cluster and LM maximum ***\n");
644   }
645   else
646   {
647      //printf("\t *** NO MATCH cluster and LM maximum, check second ***\n");
648     if(mcLabelclusterMax == mcLabelMax2 && mcLabelclusterMax >= 0)
649     {
650       //printf("\t \t *** MATCH cluster and 2nd LM maximum ***\n");
651       matchHighLMAndHighMC = kTRUE;
652     }
653     else
654     {
655       //printf("\t \t *** NO MATCH***\n");
656       matchHighLMAndHighMC = kFALSE;
657     }
658   }
659   
660   // Compare the common ancestors of the 2 highest energy local maxima
661   Int_t ancPDG = 0, ancStatus = -1;
662   TLorentzVector momentum; TVector3 prodVertex;
663   Int_t ancLabel = 0;
664   Bool_t high = kFALSE;
665   Bool_t low  = kFALSE;
666
667 //  // print maxima origin
668 //  for(Int_t i = 0; i < nMax; i++)
669 //  {
670 //    Int_t mcLabel1 = GetEMCALCells()->GetCellMCLabel(list[i]);
671 //    GetReader()->RemapMCLabelForAODs(mcLabel1);
672 //    
673 //    Bool_t ok  =kFALSE,gok = kFALSE;
674 //    Int_t pdg    = -22222, status   = -1;
675 //    Int_t gpdg   = -22222, gstatus  = -1;
676 //    Int_t ggpdg  = -22222, ggstatus = -1;
677 //    Int_t gLabel = -1, ggLabel = -1;
678 //    TLorentzVector primary   =GetMCAnalysisUtils()->GetMother     (mcLabel1,GetReader(),  pdg,  status, ok);
679 //    TLorentzVector gprimary  =GetMCAnalysisUtils()->GetGrandMother(mcLabel1,GetReader(), gpdg, gstatus,gok, gLabel,ggLabel);
680 //    TLorentzVector ggprimary =GetMCAnalysisUtils()->GetMother(ggLabel  ,GetReader(),ggpdg,ggstatus,gok);
681 //    printf("Max index %d; mother: Label %d; PDG %d; E %2.2f - grand mother label %d; PDG %d; E %2.2f- great grand mother label %d; PDG %d; E %2.2f\n",
682 //           i,mcLabel1,pdg,primary.E(), gLabel,gpdg,gprimary.E(), ggLabel,ggpdg,ggprimary.E());
683 //  }
684
685   for(Int_t i = 0; i < nmaxima-1; i++)
686   {
687     Int_t mcLabel1 = GetEMCALCells()->GetCellMCLabel(list[i]);
688     GetReader()->RemapMCLabelForAODs(mcLabel1);
689  
690     for(Int_t j = i+1; j < nmaxima; j++)
691     {
692       Int_t mcLabel2 = GetEMCALCells()->GetCellMCLabel(list[j]);
693       GetReader()->RemapMCLabelForAODs(mcLabel2);
694       
695       if(mcLabel1 < 0 || mcLabel2 < 0 )
696       {
697         //printf("\t i %d label %d - j %d label %d; skip!\n",i,mcLabel1,j,mcLabel2);
698         continue;
699       }
700       
701       ancLabel = GetMCAnalysisUtils()->CheckCommonAncestor(mcLabel1,mcLabel2,
702                                                            GetReader(),ancPDG,ancStatus,momentum,prodVertex);
703       if(ancPDG==111)
704       {
705         if((i==imax && j==imax2) ||  (j==imax && i==imax2))
706           high = kTRUE;
707         else
708           low = kTRUE;
709       }
710       else if(ancPDG==22 || TMath::Abs(ancPDG)==11)
711       {
712         // If both bits are set, it could be that one of the maxima had a conversion
713         // reset the bit in this case
714         if(high && low)
715         {
716           //printf("\t Reset low bit\n");
717           low = kFALSE;
718         }
719       }
720      
721       Bool_t ok  =kFALSE;
722       Int_t pdg = -22222, status = -1;
723       TLorentzVector primary  =GetMCAnalysisUtils()->GetMother(ancLabel,GetReader(), pdg, status, ok);
724       //printf("\t i %d label %d - j %d label %d; ancestor label %d, PDG %d-%d; E %2.2f; high %d, any %d \n",i,mcLabel1,j,mcLabel2, ancLabel, ancPDG,pdg, primary.E(), high, low);
725
726     }
727   }
728   
729   Float_t en = cluster->E();
730   
731 // if((mass < 0.06 || mass > 1.8) && mcindex==kmcPi0 && noverlaps == 0)
732 //    printf("Cell MC match: nMax %d; Match MC? %d; high %d; low %d\n",nMax,matchHighLMAndHighMC,high,low);
733   
734   if(!noverlaps)
735   {
736     if(matchHighLMAndHighMC)
737     {
738       if     (high && !low)  fhMCPi0HighNLMPair->Fill(en,nMax);
739       else if(low  && !high) fhMCPi0LowNLMPair ->Fill(en,nMax);
740       else if(low  &&  high) fhMCPi0AnyNLMPair ->Fill(en,nMax);
741       else                   fhMCPi0NoneNLMPair->Fill(en,nMax);
742     }
743     else
744     {
745       if     (high && !low)  fhMCPi0HighNLMPairNoMCMatch->Fill(en,nMax);
746       else if(low  && !high) fhMCPi0LowNLMPairNoMCMatch ->Fill(en,nMax);
747       else if(low  &&  high) fhMCPi0AnyNLMPairNoMCMatch ->Fill(en,nMax);
748       else                   fhMCPi0NoneNLMPairNoMCMatch->Fill(en,nMax);
749     }
750   }
751   else
752   {
753     if(matchHighLMAndHighMC)
754     {
755       if     (high && !low)  fhMCPi0HighNLMPairOverlap->Fill(en,nMax);
756       else if(low  && !high) fhMCPi0LowNLMPairOverlap->Fill(en,nMax);
757       else if(low  &&  high) fhMCPi0AnyNLMPairOverlap->Fill(en,nMax);
758       else                   fhMCPi0NoneNLMPairOverlap->Fill(en,nMax);
759     }
760     else
761     {
762       if     (high && !low)  fhMCPi0HighNLMPairNoMCMatchOverlap->Fill(en,nMax);
763       else if(low  && !high) fhMCPi0LowNLMPairNoMCMatchOverlap->Fill(en,nMax);
764       else if(low  &&  high) fhMCPi0AnyNLMPairNoMCMatchOverlap->Fill(en,nMax);
765       else                   fhMCPi0NoneNLMPairNoMCMatchOverlap->Fill(en,nMax);
766     }  
767   }
768   
769   //----------------------------------------------------------------------
770   //----------------------------------------------------------------------
771   // Compare MC decay photon projection to cell location and Local Maxima
772   //----------------------------------------------------------------------
773   //----------------------------------------------------------------------
774   
775   // Get the mother pi0
776   
777   Bool_t ok     = kFALSE;
778   Int_t pdg    = -22222, status   = -1;
779   Int_t gLabel = -1;
780   
781   Int_t label = cluster->GetLabel();
782   TLorentzVector pi0Kine;
783     
784   while( pdg!=111 && label>=0 )
785   {
786     pi0Kine = GetMCAnalysisUtils()->GetGrandMother(label,GetReader(),pdg,status,ok, label,gLabel);
787   }
788   
789   if(pdg!=111 || label < 0)
790   {
791     printf("AliAnaInsideClusterInvariantMass::CheckLocalMaximaMCOrigin(() - Mother Pi0 not found!\n");
792     return;
793   }
794   
795   Int_t nDaugthers = GetMCAnalysisUtils()->GetNDaughters(label,GetReader(),ok);
796   
797   if(nDaugthers != 2)
798   {
799     printf("AliAnaInsideClusterInvariantMass::CheckLocalMaximaMCOrigin(() - N daughters %d !=2!\n",nDaugthers);
800     return;
801   }
802   
803   // Get daughter photon kinematics
804   Int_t pdg0 = -22222, status0   = -1; Int_t label0 = -1;
805   TLorentzVector photon0Kine = GetMCAnalysisUtils()->GetDaughter(0,label,GetReader(),pdg0,status0,ok,label0);
806   Int_t pdg1 = -22222, status1   = -1; Int_t label1 = -1;
807   TLorentzVector photon1Kine = GetMCAnalysisUtils()->GetDaughter(1,label,GetReader(),pdg1,status1,ok,label1);
808
809   if(pdg1!=22 || pdg0 != 22)
810   {
811     printf("AliAnaInsideClusterInvariantMass::CheckLocalMaximaMCOrigin(() - Wrong daughters PDG: photon0 %d - photon1 %d\n",pdg0,pdg1);
812     return;
813   }
814   
815   // In what cells did the photons hit
816   Float_t eta0 = photon0Kine.Eta();
817   Float_t eta1 = photon1Kine.Eta();
818   
819   Float_t phi0 = photon0Kine.Phi();
820   Float_t phi1 = photon1Kine.Phi();
821
822 // if((mass < 0.06 || mass > 1.8) && mcindex==kmcPi0 && noverlaps == 0)
823 //  {
824 //    printf("MC pi0 label %d E  %2.2f, eta %2.2f, phi %2.2f, mass (ph1, ph2) %2.2f: \n \t photon0 label %d E %2.2f, eta %2.2f, phi %2.2f \n \t photon1 label %d E %2.2f eta %2.2f, phi %2.2f\n",
825 //           label , pi0Kine.E()    , pi0Kine.Eta(),pi0Kine.Phi()*TMath::RadToDeg(), (photon0Kine+photon1Kine).M(),
826 //           label0, photon0Kine.E(),          eta0,         phi0*TMath::RadToDeg(),
827 //           label1, photon1Kine.E(),          eta1,         phi1*TMath::RadToDeg());
828 //    
829 //    TLorentzVector momclus;
830 //    cluster->GetMomentum(momclus,GetVertex(0));
831 //    printf("Cluster E %2.2F eta %2.2f, phi %2.2f, dist to bad %2.2f\n",momclus.E(),momclus.Eta(),momclus.Phi()*TMath::RadToDeg(), cluster->GetDistanceToBadChannel());
832 //  }
833   
834   if(phi0 < 0 ) phi0+=TMath::TwoPi();
835   if(phi1 < 0 ) phi1+=TMath::TwoPi();
836   
837   Int_t absId0=-1, absId1=-1;
838   GetEMCALGeometry()->GetAbsCellIdFromEtaPhi(eta0, phi0, absId0);
839   GetEMCALGeometry()->GetAbsCellIdFromEtaPhi(eta1, phi1, absId1);
840   
841   if(absId1 < 0 || absId1 < 0)
842   {
843     //printf("AliAnaInsideClusterInvariantMass::CheckLocalMaximaMCOrigin(() -  Photon hit AbsId: photon0 %d - photon1 %d\n",absId0,absId1);
844     return;
845   }
846   
847   //-----------------------------------------------
848   // Check that the 2 photons hit the Local Maxima
849   //-----------------------------------------------
850   
851   
852 // if((mass < 0.06 || mass > 1.8) && mcindex==kmcPi0 && noverlaps == 0)
853 //  {
854 //    printf("Photons AbsId (%d,%d); Local Maxima AbsId(%d,%d)\n",absId0,absId1,list[imax],list[imax2]);
855 //    printf("Photon1 (eta,phi)=(%f,%f); Photon2 (eta,phi)=(%f,%f);\n",eta0,phi0*TMath::RadToDeg(),eta1,phi1*TMath::RadToDeg());
856 //
857 //    Int_t ieta0=-1; Int_t iphi0 = 0; Int_t rcu0 = 0;
858 //    Int_t sm0 = GetModuleNumberCellIndexes(absId0,fCalorimeter, ieta0, iphi0, rcu0);
859 //    Int_t ieta1=-1; Int_t iphi1 = 0; Int_t rcu1 = 0;
860 //    Int_t sm1 = GetModuleNumberCellIndexes(absId1,fCalorimeter, ieta1, iphi1, rcu1);
861 //    
862 //    printf("Photon1 (id,sm,eta,phi)=(%d,%d,%d,%d), Photon2 (id,sm,eta,phi)=(%d,%d,%d,%d)\n",
863 //           absId0,sm0,ieta0,iphi0,absId1,sm1,ieta1,iphi1);
864 //    
865 //    Int_t ietam0=-1; Int_t iphim0 = 0; Int_t rcum0 = 0; Int_t smm0 = -1 ;
866 //    if(imax  >= 0) smm0 = GetModuleNumberCellIndexes(list[imax] ,fCalorimeter, ietam0, iphim0, rcum0);
867 //    Int_t ietam1=-1; Int_t iphim1 = 0; Int_t rcum1 = 0; Int_t smm1 = -1 ;
868 //    if(imax2 >= 0) smm1 = GetModuleNumberCellIndexes(list[imax2],fCalorimeter, ietam1, iphim1, rcum1);
869 //    
870 //    printf("Max (id, sm,eta,phi)=(%d,%d,%d,%d), Max2 (id, sm,eta,phi)=(%d,%d,%d,%d)\n",
871 //           list[imax],smm0,ietam0,iphim0,list[imax2],smm1,ietam1,iphim1);
872 //  }
873
874   Int_t inlm = nMax-1;
875   if(inlm > 2) inlm = 2;
876   
877   Bool_t match0  = kFALSE;
878   Bool_t match1  = kFALSE;
879   Int_t imatch0  = -1;
880   Int_t imatch1  = -1;
881   if(imax >= 0 && imax2 >=0 && absId0 > 0 && absId1 > 0 )
882   {
883     if     (absId0 == list[imax] ) { match0 = kTRUE ; imatch0 = imax  ; }
884     else if(absId0 == list[imax2]) { match0 = kTRUE ; imatch0 = imax2 ; }
885     
886     if     (absId1 == list[imax] ) { match1 = kTRUE ; imatch1 = imax  ; }
887     else if(absId1 == list[imax2]) { match1 = kTRUE ; imatch1 = imax2 ; }
888   }
889   
890   //printf("primary imatch0 %d, imatch1 %d\n",imatch0,imatch1);
891
892   // If one or the 2 not matched, check with the other MC labels
893   // only in case there was a conversion
894   
895   Int_t   absId0second  = -1;
896   Int_t   absId1second  = -1;
897   Int_t   secLabel0     = -1;
898   Int_t   secLabel1     = -1;
899   Int_t   mcLabel0      = -1;
900   Int_t   mcLabel1      = -1;
901   Bool_t  secOK         = 0;
902   Int_t   secpdg        = -999999;
903   Int_t   secstatus     = -1;
904   Int_t   secgrandLabel = -1;
905
906   if(match0) { secLabel0 = label0 ; mcLabel0 = label0 ; }
907   if(match1) { secLabel1 = label1 ; mcLabel1 = label1 ; }
908   
909   if((!match0 || !match1) && mcindex == kmcPi0Conv)
910   {
911     for (UInt_t ilab = 0; ilab < cluster->GetNLabels(); ilab++ )
912     {
913       Int_t mclabel = cluster->GetLabels()[ilab];
914       
915       //printf("Check label %d - %d\n",ilab,mclabel);
916       
917       if(mclabel == label0 || mclabel == label1)
918       {
919         //printf("continue: secLabel %d, label0 %d, label1 %d\n",mclabel,label0,label1);
920         if(mclabel == label0 && secLabel0 < 0) { secLabel0 = label0 ; mcLabel0 = label0 ; }
921         if(mclabel == label1 && secLabel1 < 0) { secLabel1 = label1 ; mcLabel1 = label1 ; }
922         continue ;
923       }
924       
925       //printf("Before while: secLabel0 %d, secLabel1 %d\n",secLabel0,secLabel1);
926       
927       // match mc label and parent photon
928       Int_t tmplabel   = mclabel;
929       while((secLabel0 < 0 || secLabel1 < 0) && tmplabel > 0 )
930       {
931         TLorentzVector mother = GetMCAnalysisUtils()->GetMother(tmplabel,GetReader(),secpdg,secstatus,secOK,secgrandLabel);
932         
933         //printf("\t \t while secLabel %d, mom %d, granmom %d\n",mclabel,tmplabel,secgrandLabel);
934         
935         if((secgrandLabel == label0) || (secgrandLabel == label1 ))
936         {
937           //printf("mcMatch! grand label %d, secLabel %d\n",secgrandLabel, mclabel);
938           if(!match0 && mcLabel1 != secgrandLabel) { secLabel0 = mclabel; mcLabel0 = secgrandLabel; }
939           if(!match1 && mcLabel0 != secgrandLabel) { secLabel1 = mclabel; mcLabel1 = secgrandLabel; }
940         }
941         
942         //printf("\t GrandMother %d, secLabel0 %d, secLabel1 %d \n",secgrandLabel, secLabel0,secLabel1);
943
944         tmplabel = secgrandLabel;
945       }
946     }
947     
948     // Get the position of the found secondaries mother
949     if(!match0 && secLabel0 > 0)
950     {
951       TLorentzVector mother = GetMCAnalysisUtils()->GetMother(secLabel0,GetReader(),secpdg,secstatus,secOK,secgrandLabel);
952       
953       //Float_t eta = mother.Eta();
954       //Float_t phi = mother.Phi();
955       //if(phi < 0 ) phi+=TMath::TwoPi();
956       //GetEMCALGeometry()->GetAbsCellIdFromEtaPhi(eta, phi, absId0second);
957       
958       //printf("Secondary MC0 label %d, absId %d E %2.2F eta %2.2f, phi %f\n", secLabel0,absId0second, mother.E(),mother.Eta(),mother.Phi()*TMath::RadToDeg());
959       
960       if(absId0second == list[imax] ) { match0 = kTRUE ; imatch0 = imax  ; }
961       if(absId0second == list[imax2]) { match0 = kTRUE ; imatch0 = imax2 ; }
962     }
963
964     if(!match1 && secLabel1 > 0)
965     {
966       TLorentzVector mother = GetMCAnalysisUtils()->GetMother(secLabel1,GetReader(),secpdg,secstatus,secOK,secgrandLabel);
967       
968       //Float_t eta = mother.Eta();
969       //Float_t phi = mother.Phi();
970       //if(phi < 0 ) phi+=TMath::TwoPi();
971       //GetEMCALGeometry()->GetAbsCellIdFromEtaPhi(eta, phi, absId1second);
972       
973       //printf("Secondary MC1 label %d absId %d E %2.2F eta %2.2f, phi %f\n",secLabel1, absId1second, mother.E(),mother.Eta(),mother.Phi()*TMath::RadToDeg());
974       
975       if(absId1second == list[imax] ) { match1 = kTRUE ; imatch1 = imax  ; }
976       if(absId1second == list[imax2]) { match1 = kTRUE ; imatch1 = imax2 ; }
977     }
978
979     //printf("secondary label mc0 %d, mc1 %d, imatch0 %d, imatch1 %d\n",secLabel0,secLabel1,imatch0,imatch1);
980     
981   }
982     
983   //printf("imatch0 %d, imatch1 %d\n",imatch0,imatch1);
984   if( match0 && match1 )
985   {
986 //   if((mass < 0.06 || mass > 1.8) && mcindex==kmcPi0 && noverlaps == 0)
987 //      printf("a) Both Photons hit local maxima \n");
988     
989     if(!noverlaps)
990     {
991       fhMCPi0DecayPhotonHitHighLM          ->Fill(en,nMax);
992       fhMCPi0DecayPhotonHitHighLMMass[inlm]->Fill(en,mass);
993       if(match0 && imatch0 == imax)
994       {
995         if(photon0Kine.E()>0)fhMCPi0DecayPhotonHitHighLMDiffELM1[inlm]->Fill(en,(e1-photon0Kine.E())/photon0Kine.E());
996         if(photon1Kine.E()>0)fhMCPi0DecayPhotonHitHighLMDiffELM2[inlm]->Fill(en,(e2-photon1Kine.E())/photon1Kine.E());
997         if(photon0Kine.E()>0)fhMCPi0DecayPhotonHitHighLMDiffELM1vsELM1[inlm]->Fill(e1,(e1-photon0Kine.E())/photon0Kine.E());
998         if(photon1Kine.E()>0)fhMCPi0DecayPhotonHitHighLMDiffELM2vsELM2[inlm]->Fill(e2,(e2-photon1Kine.E())/photon1Kine.E());
999       }
1000       else
1001       {
1002         if(photon1Kine.E()>0)fhMCPi0DecayPhotonHitHighLMDiffELM1[inlm]->Fill(en,(e1-photon1Kine.E())/photon1Kine.E());
1003         if(photon0Kine.E()>0)fhMCPi0DecayPhotonHitHighLMDiffELM2[inlm]->Fill(en,(e2-photon0Kine.E())/photon0Kine.E());
1004         if(photon1Kine.E()>0)fhMCPi0DecayPhotonHitHighLMDiffELM1vsELM1[inlm]->Fill(e1,(e1-photon1Kine.E())/photon1Kine.E());
1005         if(photon0Kine.E()>0)fhMCPi0DecayPhotonHitHighLMDiffELM2vsELM2[inlm]->Fill(e2,(e2-photon0Kine.E())/photon0Kine.E());
1006       }
1007     }
1008     else
1009     {
1010       fhMCPi0DecayPhotonHitHighLMOverlap          ->Fill(en,nMax);
1011       fhMCPi0DecayPhotonHitHighLMOverlapMass[inlm]->Fill(en,mass);
1012       if(match0 && imatch0 == imax )
1013       {
1014         if(photon0Kine.E()>0)fhMCPi0DecayPhotonHitHighLMOverlapDiffELM1[inlm]->Fill(en,(e1-photon0Kine.E())/photon0Kine.E());
1015         if(photon1Kine.E()>0)fhMCPi0DecayPhotonHitHighLMOverlapDiffELM2[inlm]->Fill(en,(e2-photon1Kine.E())/photon1Kine.E());
1016         if(photon0Kine.E()>0)fhMCPi0DecayPhotonHitHighLMOverlapDiffELM1vsELM1[inlm]->Fill(e1,(e1-photon0Kine.E())/photon0Kine.E());
1017         if(photon1Kine.E()>0)fhMCPi0DecayPhotonHitHighLMOverlapDiffELM2vsELM2[inlm]->Fill(e2,(e2-photon1Kine.E())/photon1Kine.E());
1018       }
1019       else
1020       {
1021         if(photon1Kine.E()>0)fhMCPi0DecayPhotonHitHighLMOverlapDiffELM1[inlm]->Fill(en,(e1-photon1Kine.E())/photon1Kine.E());
1022         if(photon0Kine.E()>0)fhMCPi0DecayPhotonHitHighLMOverlapDiffELM2[inlm]->Fill(en,(e2-photon0Kine.E())/photon0Kine.E());
1023         if(photon1Kine.E()>0)fhMCPi0DecayPhotonHitHighLMOverlapDiffELM1vsELM1[inlm]->Fill(e1,(e1-photon1Kine.E())/photon1Kine.E());
1024         if(photon0Kine.E()>0)fhMCPi0DecayPhotonHitHighLMOverlapDiffELM2vsELM2[inlm]->Fill(e2,(e2-photon0Kine.E())/photon0Kine.E());
1025       }
1026
1027     }
1028     
1029     return ;
1030   }
1031   
1032   //printf("Any match? photon0 %d, photon1 %d\n",match0,match1);
1033   //if(!match0 && !match1) printf("WARNING, LM not matched to any photon decay!\n");
1034   
1035   //---------------------------------------------
1036   // Check the adjacent cells to the local maxima
1037   //---------------------------------------------
1038   
1039   if(!match0)
1040   {
1041     if(imatch1!=imax  && GetCaloUtils()->AreNeighbours(fCalorimeter,absId0,list[imax]))   { match0 = kTRUE; imatch0 = imax  ; }
1042     //printf("imax - match0? (%d-%d)=%d, (%d-%d)=%d\n",ieta0,ietam0,ieta0-ietam0, iphi0,iphim0,iphi0-iphim0);
1043     if(imatch1!=imax2 && GetCaloUtils()->AreNeighbours(fCalorimeter,absId0,list[imax2]) ) { match0 = kTRUE; imatch0 = imax2 ; }
1044     //printf("imax2 - match0? (%d-%d)=%d, (%d-%d)=%d\n",ieta0,ietam1,ieta0-ietam1, iphi0,iphim1,iphi0-iphim1);
1045   }
1046   
1047   if(!match1)
1048   {
1049     if(imatch0!=imax  && GetCaloUtils()->AreNeighbours(fCalorimeter,absId1,list[imax]) ) { match1 = kTRUE; imatch1 = imax  ; }
1050     //printf("imax - match1? (%d-%d)=%d, (%d-%d)=%d\n",ieta1,ietam0,ieta1-ietam0, iphi1,iphim0,iphi1-iphim0);
1051   
1052     if(imatch0!=imax2 && GetCaloUtils()->AreNeighbours(fCalorimeter,absId1,list[imax2])) { match1 = kTRUE; imatch1 = imax2 ; }
1053     //printf("imax2 - match1? (%d-%d)=%d, (%d-%d)=%d\n",ieta1,ietam1,ieta1-ietam1, iphi1,iphim1,iphi1-iphim1);
1054   }
1055     
1056   //printf("Local Maxima: adjacent0 %d,adjacent1 %d \n",match0,match1);
1057   
1058   if(match0 && match1)
1059   {
1060 //   if((mass < 0.06 || mass > 1.8) && mcindex==kmcPi0 && noverlaps == 0)
1061 //      printf("b) Both Photons hit local maxima or cell adjacent or 2 cells adjacent \n");
1062     
1063     if(!noverlaps)
1064     {
1065       fhMCPi0DecayPhotonAdjHighLM          ->Fill(en,nMax);
1066       fhMCPi0DecayPhotonAdjHighLMMass[inlm]->Fill(en,mass);
1067
1068       if(match0 && imatch0 == imax)
1069       {
1070         if(photon0Kine.E()>0)fhMCPi0DecayPhotonAdjHighLMDiffELM1[inlm]->Fill(en,(e1-photon0Kine.E())/photon0Kine.E());
1071         if(photon1Kine.E()>0)fhMCPi0DecayPhotonAdjHighLMDiffELM2[inlm]->Fill(en,(e2-photon1Kine.E())/photon1Kine.E());
1072         if(photon0Kine.E()>0)fhMCPi0DecayPhotonAdjHighLMDiffELM1vsELM1[inlm]->Fill(e1,(e1-photon0Kine.E())/photon0Kine.E());
1073         if(photon1Kine.E()>0)fhMCPi0DecayPhotonAdjHighLMDiffELM2vsELM2[inlm]->Fill(e2,(e2-photon1Kine.E())/photon1Kine.E());
1074       }
1075       else
1076       {
1077         if(photon1Kine.E()>0)fhMCPi0DecayPhotonAdjHighLMDiffELM1[inlm]->Fill(en,(e1-photon1Kine.E())/photon1Kine.E());
1078         if(photon0Kine.E()>0)fhMCPi0DecayPhotonAdjHighLMDiffELM2[inlm]->Fill(en,(e2-photon0Kine.E())/photon0Kine.E());
1079         if(photon1Kine.E()>0)fhMCPi0DecayPhotonAdjHighLMDiffELM1vsELM1[inlm]->Fill(e1,(e1-photon1Kine.E())/photon1Kine.E());
1080         if(photon0Kine.E()>0)fhMCPi0DecayPhotonAdjHighLMDiffELM2vsELM2[inlm]->Fill(e2,(e2-photon0Kine.E())/photon0Kine.E());
1081       }
1082     }
1083     else
1084     {
1085       fhMCPi0DecayPhotonAdjHighLMOverlap          ->Fill(en,nMax);
1086       fhMCPi0DecayPhotonAdjHighLMOverlapMass[inlm]->Fill(en,mass);
1087       if(match0 && imatch0 == imax)
1088       {
1089         if(photon0Kine.E()>0)fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM1[inlm]->Fill(en,(e1-photon0Kine.E())/photon0Kine.E());
1090         if(photon1Kine.E()>0)fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM2[inlm]->Fill(en,(e2-photon1Kine.E())/photon1Kine.E());
1091         if(photon0Kine.E()>0)fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM1vsELM1[inlm]->Fill(e1,(e1-photon0Kine.E())/photon0Kine.E());
1092         if(photon1Kine.E()>0)fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM2vsELM2[inlm]->Fill(e2,(e2-photon1Kine.E())/photon1Kine.E());
1093       }
1094       else
1095       {
1096         if(photon1Kine.E()>0)fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM1[inlm]->Fill(en,(e1-photon1Kine.E())/photon1Kine.E());
1097         if(photon0Kine.E()>0)fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM2[inlm]->Fill(en,(e2-photon0Kine.E())/photon0Kine.E());
1098         if(photon1Kine.E()>0)fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM1vsELM1[inlm]->Fill(e1,(e1-photon1Kine.E())/photon1Kine.E());
1099         if(photon0Kine.E()>0)fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM2vsELM2[inlm]->Fill(e2,(e2-photon0Kine.E())/photon0Kine.E());
1100       }
1101     }
1102     
1103     return;
1104   }
1105   
1106   // Decay photon cells are adjacent?
1107   
1108   if( (match0 || match1) && GetCaloUtils()->AreNeighbours(fCalorimeter,absId0,absId1) )
1109   {
1110 //   if((mass < 0.06 || mass > 1.8) && mcindex==kmcPi0 && noverlaps == 0)
1111 //      printf("c) Both Photons hit a local maxima and in adjacent cells \n");
1112     if(!noverlaps)
1113     {
1114       fhMCPi0DecayPhotonAdjacent          ->Fill(en,nMax);
1115       fhMCPi0DecayPhotonAdjacentMass[inlm]->Fill(en,mass);
1116     }
1117     else
1118     {
1119       fhMCPi0DecayPhotonAdjacentOverlap          ->Fill(en,nMax);
1120       fhMCPi0DecayPhotonAdjacentOverlapMass[inlm]->Fill(en,mass);
1121     }
1122     
1123     return;
1124   }
1125   
1126   //--------------------
1127   // Other Local maxima
1128   //--------------------
1129   
1130   Bool_t matchMCHitOtherLM = kFALSE;
1131   if(!match1)
1132   {
1133     for(Int_t i = 0; i < nmaxima; i++)
1134     {
1135       if(imax!=i && imax2!=i && absId1 == list[i]) { match1 = kTRUE; matchMCHitOtherLM = kTRUE; }
1136     }
1137   }
1138   
1139   if(!match0)
1140   {
1141     for(Int_t i = 0; i < nmaxima; i++)
1142     {
1143       if(imax!=i && imax2!=i && absId0 == list[i]) { match0 = kTRUE; matchMCHitOtherLM = kTRUE; }
1144     }
1145   }
1146   
1147   if(matchMCHitOtherLM)
1148   {
1149 //   if((mass < 0.06 || mass > 1.8) && mcindex==kmcPi0 && noverlaps == 0)
1150 //      printf("d) One Photon hits a local maxima, the other another not high \n");
1151     
1152     if(!noverlaps)
1153     {
1154       fhMCPi0DecayPhotonHitOtherLM          ->Fill(en,nMax);
1155       fhMCPi0DecayPhotonHitOtherLMMass[inlm]->Fill(en,mass);
1156       if(match0 && imatch0 == imax)
1157       {
1158         if(photon0Kine.E()>0)fhMCPi0DecayPhotonHitOtherLMDiffELM1[inlm]->Fill(en,(e1-photon0Kine.E())/photon0Kine.E());
1159         if(photon1Kine.E()>0)fhMCPi0DecayPhotonHitOtherLMDiffELM2[inlm]->Fill(en,(e2-photon1Kine.E())/photon1Kine.E());
1160       }
1161       else
1162       {
1163         if(photon1Kine.E()>0)fhMCPi0DecayPhotonHitOtherLMDiffELM1[inlm]->Fill(en,(e1-photon1Kine.E())/photon1Kine.E());
1164         if(photon0Kine.E()>0)fhMCPi0DecayPhotonHitOtherLMDiffELM2[inlm]->Fill(en,(e2-photon0Kine.E())/photon0Kine.E());
1165       }
1166     }
1167     else
1168     {
1169       fhMCPi0DecayPhotonHitOtherLMOverlap   ->Fill(en,nMax);
1170       fhMCPi0DecayPhotonHitOtherLMMass[inlm]->Fill(en,mass);
1171       if(match0 && imatch0 == imax)
1172       {
1173         if(photon0Kine.E()>0)fhMCPi0DecayPhotonHitOtherLMOverlapDiffELM1[inlm]->Fill(en,(e1-photon0Kine.E())/photon0Kine.E());
1174         if(photon1Kine.E()>0)fhMCPi0DecayPhotonHitOtherLMOverlapDiffELM2[inlm]->Fill(en,(e2-photon1Kine.E())/photon1Kine.E());
1175       }
1176       else
1177       {
1178         if(photon1Kine.E()>0)fhMCPi0DecayPhotonHitOtherLMOverlapDiffELM1[inlm]->Fill(en,(e1-photon1Kine.E())/photon1Kine.E());
1179         if(photon0Kine.E()>0)fhMCPi0DecayPhotonHitOtherLMOverlapDiffELM2[inlm]->Fill(en,(e2-photon0Kine.E())/photon0Kine.E());
1180       }
1181     }
1182     
1183     return ;
1184   }
1185   
1186   // Adjacent to other maxima
1187   
1188   Bool_t adjacentOther1 = kFALSE;
1189   if(match0)
1190   {
1191     for(Int_t i = 0; i < nmaxima; i++)
1192     {
1193       Int_t ieta=-1; Int_t iphi = 0; Int_t rcu = 0;
1194       GetModuleNumberCellIndexes(list[i] ,fCalorimeter, ieta, iphi, rcu);
1195       
1196       //printf(" Other Max (eta,phi)=(%d,%d)\n",ieta,iphi);
1197       
1198       if(GetCaloUtils()->AreNeighbours(fCalorimeter,absId1,list[i]) ) adjacentOther1 = kTRUE;
1199       
1200       //printf("Other Maxima: adjacentOther1 %d\n",adjacentOther1);
1201     }
1202   }
1203   
1204   Bool_t adjacentOther0 = kFALSE;
1205   if(match1)
1206   {
1207     for(Int_t i = 0; i < nmaxima; i++)
1208     {
1209       Int_t ieta=-1; Int_t iphi = 0; Int_t rcu = 0;
1210       GetModuleNumberCellIndexes(list[i] ,fCalorimeter, ieta, iphi, rcu);
1211       
1212       //printf(" Other Max (eta,phi)=(%d,%d)\n",ieta,iphi);
1213       
1214       if(GetCaloUtils()->AreNeighbours(fCalorimeter,absId0,list[i]) ) adjacentOther0 = kTRUE;
1215       
1216       //printf("Other Maxima: adjacentOther0 %d\n",adjacentOther0);
1217     }
1218   }
1219   
1220   if((match0 && adjacentOther1) || (match1 && adjacentOther0))
1221   {
1222     
1223 //   if((mass < 0.06 || mass > 1.8) && mcindex==kmcPi0 && noverlaps == 0)
1224 //      printf("e) One Photon hits a local maxima, the other another not high, adjacent \n");
1225     
1226     if(!noverlaps)
1227     {
1228       fhMCPi0DecayPhotonAdjOtherLM       ->Fill(en,nMax);
1229       fhMCPi0DecayPhotonAdjOtherLMMass[inlm]->Fill(en,mass);
1230       if(match0 && imatch0 == imax)
1231       {
1232         if(photon0Kine.E()>0)fhMCPi0DecayPhotonAdjOtherLMDiffELM1[inlm]->Fill(en,(e1-photon0Kine.E())/photon0Kine.E());
1233         if(photon1Kine.E()>0)fhMCPi0DecayPhotonAdjOtherLMDiffELM2[inlm]->Fill(en,(e2-photon1Kine.E())/photon1Kine.E());
1234       }
1235       else
1236       {
1237         if(photon1Kine.E()>0)fhMCPi0DecayPhotonAdjOtherLMDiffELM1[inlm]->Fill(en,(e1-photon1Kine.E())/photon1Kine.E());
1238         if(photon0Kine.E()>0)fhMCPi0DecayPhotonAdjOtherLMDiffELM2[inlm]->Fill(en,(e2-photon0Kine.E())/photon0Kine.E());
1239       }
1240     }
1241     else
1242     {
1243       fhMCPi0DecayPhotonAdjOtherLMOverlap          ->Fill(en,nMax);
1244       fhMCPi0DecayPhotonAdjOtherLMOverlapMass[inlm]->Fill(en,mass);
1245       if(match0 && imatch0 == imax)
1246       {
1247         if(photon0Kine.E()>0)fhMCPi0DecayPhotonAdjOtherLMOverlapDiffELM1[inlm]->Fill(en,(e1-photon0Kine.E())/photon0Kine.E());
1248         if(photon1Kine.E()>0)fhMCPi0DecayPhotonAdjOtherLMOverlapDiffELM2[inlm]->Fill(en,(e2-photon1Kine.E())/photon1Kine.E());
1249       }
1250       else
1251       {
1252         if(photon1Kine.E()>0)fhMCPi0DecayPhotonAdjOtherLMOverlapDiffELM1[inlm]->Fill(en,(e1-photon1Kine.E())/photon1Kine.E());
1253         if(photon0Kine.E()>0)fhMCPi0DecayPhotonAdjOtherLMOverlapDiffELM2[inlm]->Fill(en,(e2-photon0Kine.E())/photon0Kine.E());
1254       }
1255     }
1256     
1257     return;
1258   }
1259   
1260 // if((mass < 0.06 || mass > 1.8) && mcindex==kmcPi0 && noverlaps == 0)
1261 //    printf("f) No hit found \n");
1262   if(!noverlaps)
1263   {
1264     fhMCPi0DecayPhotonHitNoLM          ->Fill(en,nMax);
1265     fhMCPi0DecayPhotonHitNoLMMass[inlm]->Fill(en,mass);
1266   }
1267   else
1268   {
1269     fhMCPi0DecayPhotonHitNoLMOverlap          ->Fill(en,nMax);
1270     fhMCPi0DecayPhotonHitNoLMOverlapMass[inlm]->Fill(en,mass);
1271   }
1272   
1273 }
1274
1275 //_____________________________________________________________________________________________________________________
1276 void AliAnaInsideClusterInvariantMass::FillAngleHistograms(const Int_t nMax, const Bool_t matched, const Int_t mcIndex,
1277                                                            const Float_t en, const Float_t angle, const Float_t mass,
1278                                                            const Float_t anglePrim, const Float_t m02,
1279                                                            const Float_t asym,      const Int_t pid)
1280 {
1281   // Fill histograms related to opening angle
1282   
1283   Bool_t m02OK = GetCaloPID()->IsInPi0M02Range(en,m02,nMax);
1284   Bool_t asyOK = GetCaloPID()->IsInPi0SplitAsymmetryRange(en,asym,nMax);
1285   Bool_t m02On = GetCaloPID()->IsSplitShowerShapeCutOn();
1286   Bool_t asyOn = GetCaloPID()->IsSplitAsymmetryCutOn();
1287   
1288   if     (nMax==1)
1289   {
1290     fhAnglePairNLocMax1[0][matched]->Fill(en,angle);
1291     
1292     if((m02OK && asyOK) && (asyOn || m02On))
1293       fhAnglePairAfterCutsNLocMax1[0][matched]->Fill(en,angle);
1294     if(pid==AliCaloPID::kPi0)
1295       fhAnglePairPi0NLocMax1[0][matched]->Fill(en,angle);
1296     
1297     if( en > 15 )
1298     {
1299       fhAnglePairMassNLocMax1[0][matched]->Fill(mass,angle);
1300       fhAnglePairM02NLocMax1 [0][matched]->Fill(m02 ,angle);
1301     }
1302   }
1303   else if(nMax==2)
1304   {
1305     fhAnglePairNLocMax2[0][matched]->Fill(en,angle);
1306     
1307     if((m02OK && asyOK) && (asyOn || m02On))
1308       fhAnglePairAfterCutsNLocMax2[0][matched]->Fill(en,angle);
1309     if(pid==AliCaloPID::kPi0)
1310       fhAnglePairPi0NLocMax2[0][matched]->Fill(en,angle);
1311     
1312     if( en > fHistoECut )
1313     {
1314       fhAnglePairMassNLocMax2[0][matched]->Fill(mass,angle);
1315       fhAnglePairM02NLocMax2 [0][matched]->Fill(m02,angle);
1316     }
1317   }
1318   else if(nMax >2)
1319   {
1320     fhAnglePairNLocMaxN[0][matched]->Fill(en,angle);
1321     
1322     if((m02OK && asyOK) && (asyOn || m02On))
1323       fhAnglePairAfterCutsNLocMaxN[0][matched]->Fill(en,angle);
1324     if(pid==AliCaloPID::kPi0)
1325       fhAnglePairPi0NLocMaxN[0][matched]->Fill(en,angle);
1326     
1327     if( en > fHistoECut )
1328     {
1329       fhAnglePairMassNLocMaxN[0][matched]->Fill(mass,angle);
1330       fhAnglePairM02NLocMaxN [0][matched]->Fill(m02,angle);
1331     }
1332   }
1333   
1334   if(IsDataMC() && mcIndex >  0 && mcIndex < 7)
1335   {
1336     if     (nMax==1)
1337     {
1338       fhAnglePairNLocMax1[mcIndex][matched]->Fill(en,angle);
1339       if( en > 15 )
1340       {
1341         fhAnglePairMassNLocMax1[mcIndex][matched]->Fill(mass,angle);
1342         fhAnglePairM02NLocMax1 [mcIndex][matched]->Fill(m02,angle);
1343       }
1344       if((m02OK && asyOK) && (asyOn || m02On))
1345         fhAnglePairAfterCutsNLocMax1[mcIndex][matched]->Fill(en,angle);
1346       if(pid==AliCaloPID::kPi0)
1347          fhAnglePairPi0NLocMax1[mcIndex][matched]->Fill(en,angle);
1348       
1349       if((mcIndex == kmcPi0 || mcIndex == kmcPi0Conv) && !matched && anglePrim > 0)
1350       {
1351         fhAnglePairPrimPi0RecoNLocMax1->Fill(en,angle/anglePrim);
1352         if(en > 15) fhAnglePairPrimPi0vsRecoNLocMax1->Fill(anglePrim,angle);
1353
1354       }
1355     }
1356     else if(nMax==2)
1357     {
1358       fhAnglePairNLocMax2[mcIndex][matched]->Fill(en,angle);
1359       if( en > fHistoECut )
1360       {
1361         fhAnglePairMassNLocMax2[mcIndex][matched]->Fill(mass,angle);
1362         fhAnglePairM02NLocMax2 [mcIndex][matched]->Fill(m02 ,angle);
1363       }
1364       
1365       if((m02OK && asyOK) && (asyOn || m02On))
1366         fhAnglePairAfterCutsNLocMax2[mcIndex][matched]->Fill(en,angle);
1367       if(pid==AliCaloPID::kPi0)
1368         fhAnglePairPi0NLocMax2[mcIndex][matched]->Fill(en,angle);
1369       
1370       if((mcIndex == kmcPi0 || mcIndex == kmcPi0Conv) && !matched && anglePrim > 0)
1371       {
1372         fhAnglePairPrimPi0RecoNLocMax2->Fill(en,angle/anglePrim);
1373         if(en > 10) fhAnglePairPrimPi0vsRecoNLocMax2->Fill(anglePrim,angle);
1374       }
1375     }
1376     else if(nMax >2)
1377     {
1378       fhAnglePairNLocMaxN[mcIndex][matched]->Fill(en,angle);
1379       if( en > fHistoECut )
1380       {
1381         fhAnglePairMassNLocMaxN[mcIndex][matched]->Fill(mass,angle);
1382         fhAnglePairM02NLocMaxN [mcIndex][matched]->Fill(m02 ,angle);
1383       }
1384       if((m02OK && asyOK) && (asyOn || m02On))
1385         fhAnglePairAfterCutsNLocMaxN[mcIndex][matched]->Fill(en,angle);
1386       if(pid==AliCaloPID::kPi0)
1387         fhAnglePairPi0NLocMaxN[mcIndex][matched]->Fill(en,angle);
1388       
1389       if((mcIndex == kmcPi0 || mcIndex == kmcPi0Conv) && !matched && anglePrim > 0)
1390       {
1391         fhAnglePairPrimPi0RecoNLocMaxN->Fill(en,angle/anglePrim);
1392         if(en > 10) fhAnglePairPrimPi0vsRecoNLocMaxN->Fill(anglePrim,angle);
1393       }
1394     }
1395     
1396   }
1397   
1398 }
1399
1400 //______________________________________________________________________________________________________________________
1401 void AliAnaInsideClusterInvariantMass::FillArmenterosHistograms(const Int_t nMax, const Int_t ebin, const Int_t mcIndex,
1402                                                                 const Float_t en, TLorentzVector g1, TLorentzVector g2,
1403                                                                 const Float_t m02, const Int_t pid)
1404 {
1405   // Fill Armeteros type histograms
1406   
1407   // Get pTArm and AlphaArm
1408   TLorentzVector pi0 = g1+g2;
1409   Float_t momentumSquaredMother = pi0.P()*pi0.P();
1410   Float_t momentumDaughter1AlongMother = 0.;
1411   Float_t momentumDaughter2AlongMother = 0.;
1412
1413   if (momentumSquaredMother > 0.)
1414   {
1415     momentumDaughter1AlongMother = (g1.Px()*pi0.Px() + g1.Py()*pi0.Py()+ g1.Pz()*pi0.Pz()) / sqrt(momentumSquaredMother);
1416     momentumDaughter2AlongMother = (g2.Px()*pi0.Px() + g2.Py()*pi0.Py()+ g2.Pz()*pi0.Pz()) / sqrt(momentumSquaredMother);
1417   }
1418
1419   Float_t momentumSquaredDaughter1 = g1.P()*g1.P();
1420   Float_t ptArmSquared = momentumSquaredDaughter1 - momentumDaughter1AlongMother*momentumDaughter1AlongMother;
1421   
1422   Float_t pTArm = 0.;
1423   if (ptArmSquared > 0.)
1424     pTArm = sqrt(ptArmSquared);
1425   
1426   Float_t alphaArm = 0.;
1427   if(momentumDaughter1AlongMother +momentumDaughter2AlongMother > 0)
1428     alphaArm = (momentumDaughter1AlongMother -momentumDaughter2AlongMother) / (momentumDaughter1AlongMother + momentumDaughter2AlongMother);
1429   
1430   Float_t asym = TMath::Abs( g1.Energy()-g2.Energy() )/( g1.Energy()+g2.Energy() ) ;
1431   
1432    if(GetDebug() > 2 ) printf("AliAnaInsideClusterInvariantMass::FillArmenterosHistograms() - E %f, alphaArm %f, pTArm %f\n",en,alphaArm,pTArm);
1433   
1434   Bool_t m02OK = GetCaloPID()->IsInPi0M02Range(en,m02,nMax);
1435   Bool_t asyOK = GetCaloPID()->IsInPi0SplitAsymmetryRange(en,asym,nMax);
1436   Bool_t m02On = GetCaloPID()->IsSplitShowerShapeCutOn();
1437   Bool_t asyOn = GetCaloPID()->IsSplitAsymmetryCutOn();
1438   
1439   if     (nMax==1)
1440   {
1441     fhArmNLocMax1[0][ebin]->Fill(alphaArm,pTArm);
1442     if((m02OK && asyOK) && (asyOn || m02On))
1443       fhArmAfterCutsNLocMax1[0][ebin]->Fill(alphaArm,pTArm);
1444     if(pid==AliCaloPID::kPi0)
1445       fhArmPi0NLocMax1[0][ebin]->Fill(alphaArm,pTArm);
1446   }
1447   else if(nMax==2)
1448   {
1449     fhArmNLocMax2[0][ebin]->Fill(alphaArm,pTArm);
1450     if((m02OK && asyOK) && (asyOn || m02On))
1451       fhArmAfterCutsNLocMax2[0][ebin]->Fill(alphaArm,pTArm);
1452     if(pid==AliCaloPID::kPi0)
1453       fhArmPi0NLocMax2[0][ebin]->Fill(alphaArm,pTArm);
1454   }
1455   else if(nMax >2)
1456   {
1457     fhArmNLocMaxN[0][ebin]->Fill(alphaArm,pTArm);
1458     if((m02OK && asyOK) && (asyOn || m02On))
1459       fhArmAfterCutsNLocMaxN[0][ebin]->Fill(alphaArm,pTArm);
1460     if(pid==AliCaloPID::kPi0)
1461       fhArmPi0NLocMaxN[0][ebin]->Fill(alphaArm,pTArm);
1462   }
1463
1464   if(IsDataMC() && mcIndex >  0 && mcIndex < 7)
1465   {
1466     if     (nMax==1)
1467     {
1468       fhArmNLocMax1[mcIndex][ebin]->Fill(alphaArm,pTArm);
1469       if((m02OK && asyOK) && (asyOn || m02On))
1470         fhArmAfterCutsNLocMax1[mcIndex][ebin]->Fill(alphaArm,pTArm);
1471       if(pid==AliCaloPID::kPi0)
1472         fhArmPi0NLocMax1[mcIndex][ebin]->Fill(alphaArm,pTArm);
1473     }
1474     else if(nMax==2)
1475     {
1476       fhArmNLocMax2[mcIndex][ebin]->Fill(alphaArm,pTArm);
1477       if((m02OK && asyOK) && (asyOn || m02On))
1478         fhArmAfterCutsNLocMax2[mcIndex][ebin]->Fill(alphaArm,pTArm);
1479       if(pid==AliCaloPID::kPi0)
1480         fhArmPi0NLocMax2[mcIndex][ebin]->Fill(alphaArm,pTArm);
1481     }
1482     else if(nMax >2)
1483     {
1484       fhArmNLocMaxN[mcIndex][ebin]->Fill(alphaArm,pTArm);
1485       if((m02OK && asyOK) && (asyOn || m02On))
1486         fhArmAfterCutsNLocMaxN[mcIndex][ebin]->Fill(alphaArm,pTArm);
1487       if(pid==AliCaloPID::kPi0)
1488         fhArmPi0NLocMaxN[mcIndex][ebin]->Fill(alphaArm,pTArm);
1489     }  
1490   
1491   }
1492   
1493 }
1494
1495 //______________________________________________________________________________________________________________________
1496 void AliAnaInsideClusterInvariantMass::FillThetaStarHistograms(const Int_t nMax, const Bool_t matched, const Int_t mcIndex,
1497                                                                const Float_t en, TLorentzVector g1, TLorentzVector g2,
1498                                                                const Float_t m02, const Int_t pid)
1499 {
1500   // Fill cos Theta^star histograms
1501
1502   
1503   // Get cos Theta^star
1504   TLorentzVector pi0 = g1+g2;
1505   TLorentzVector g1Boost = g1;
1506   g1Boost.Boost(-pi0.BoostVector());
1507   Float_t  cosThStar=TMath::Cos(g1Boost.Vect().Angle(pi0.Vect()));
1508   
1509   Float_t asym = TMath::Abs( g1.Energy()-g2.Energy() )/( g1.Energy()+g2.Energy() ) ;
1510
1511   Bool_t m02OK = GetCaloPID()->IsInPi0M02Range(en,m02,nMax);
1512   Bool_t asyOK = GetCaloPID()->IsInPi0SplitAsymmetryRange(en,asym,nMax);
1513   Bool_t m02On = GetCaloPID()->IsSplitShowerShapeCutOn();
1514   Bool_t asyOn = GetCaloPID()->IsSplitAsymmetryCutOn();
1515   
1516   //printf("Reco cos %f, asy %f\n",cosThStar,asym);
1517   
1518   if     (nMax==1)
1519   {
1520     fhCosThStarNLocMax1[0][matched]->Fill(en,cosThStar);
1521     
1522     if((m02OK && asyOK) && (asyOn || m02On))
1523       fhCosThStarAfterCutsNLocMax1[0][matched]->Fill(en,cosThStar);
1524     if(pid==AliCaloPID::kPi0)
1525       fhCosThStarPi0NLocMax1[0][matched]->Fill(en,cosThStar);
1526   }
1527   else if(nMax==2)
1528   {
1529     fhCosThStarNLocMax2[0][matched]->Fill(en,cosThStar);
1530     
1531     if((m02OK && asyOK) && (asyOn || m02On))
1532       fhCosThStarAfterCutsNLocMax2[0][matched]->Fill(en,cosThStar);
1533     if(pid==AliCaloPID::kPi0)
1534       fhCosThStarPi0NLocMax2[0][matched]->Fill(en,cosThStar);
1535   }
1536   else if(nMax >2)
1537   {
1538     fhCosThStarNLocMaxN[0][matched]->Fill(en,cosThStar);
1539     
1540     if((m02OK && asyOK) && (asyOn || m02On))
1541       fhCosThStarAfterCutsNLocMaxN[0][matched]->Fill(en,cosThStar);
1542     if(pid==AliCaloPID::kPi0)
1543       fhCosThStarPi0NLocMaxN[0][matched]->Fill(en,cosThStar);
1544   }
1545   
1546   if(IsDataMC() && mcIndex >  0 && mcIndex < 7)
1547   {
1548     if     (nMax==1)
1549     {
1550       fhCosThStarNLocMax1[mcIndex][matched]->Fill(en,cosThStar);
1551       
1552       if((m02OK && asyOK) && (asyOn || m02On))
1553         fhCosThStarAfterCutsNLocMax1[mcIndex][matched]->Fill(en,cosThStar);
1554       if(pid==AliCaloPID::kPi0)
1555         fhCosThStarPi0NLocMax1[mcIndex][matched]->Fill(en,cosThStar);
1556     }
1557     else if(nMax==2)
1558     {
1559       fhCosThStarNLocMax2[mcIndex][matched]->Fill(en,cosThStar);
1560       
1561       if((m02OK && asyOK) && (asyOn || m02On))
1562         fhCosThStarAfterCutsNLocMax2[mcIndex][matched]->Fill(en,cosThStar);
1563       if(pid==AliCaloPID::kPi0)
1564         fhCosThStarPi0NLocMax2[mcIndex][matched]->Fill(en,cosThStar);
1565     }
1566     else if(nMax >2)
1567     {
1568       fhCosThStarNLocMaxN[mcIndex][matched]->Fill(en,cosThStar);
1569       
1570       if((m02OK && asyOK) && (asyOn || m02On))
1571         fhCosThStarAfterCutsNLocMaxN[mcIndex][matched]->Fill(en,cosThStar);
1572       if(pid==AliCaloPID::kPi0)
1573         fhCosThStarPi0NLocMaxN[mcIndex][matched]->Fill(en,cosThStar);
1574     }
1575     
1576   }
1577
1578 }
1579
1580 //__________________________________________________________________________________________________________________________________________
1581 void AliAnaInsideClusterInvariantMass::FillEBinHistograms(const Int_t   ebin     , const Int_t   nMax, const Int_t mcindex,
1582                                                           const Float_t splitFrac, const Float_t mass, const Float_t asym, const Float_t l0)
1583 {
1584   // Fill some histograms integrating in few energy bins
1585     
1586   if     (nMax==1)
1587   {
1588     fhMassSplitEFractionNLocMax1Ebin[0][ebin]->Fill(splitFrac,  mass);
1589     if(IsDataMC() && mcindex > 0 && mcindex < 7)fhMassSplitEFractionNLocMax1Ebin[mcindex][ebin]->Fill(splitFrac,  mass);
1590     
1591     fhMassM02NLocMax1Ebin    [ebin]->Fill(l0  ,  mass );
1592     fhMassAsyNLocMax1Ebin    [ebin]->Fill(asym,  mass );
1593   }
1594   else if(nMax==2)
1595   {
1596     fhMassSplitEFractionNLocMax2Ebin[0][ebin]->Fill(splitFrac,  mass);
1597     if(IsDataMC() && mcindex > 0 && mcindex < 7)fhMassSplitEFractionNLocMax2Ebin[mcindex][ebin]->Fill(splitFrac,  mass);
1598     
1599     fhMassM02NLocMax2Ebin    [ebin]->Fill(l0  ,  mass );
1600     fhMassAsyNLocMax2Ebin    [ebin]->Fill(asym,  mass );
1601   }
1602   else if(nMax > 2 )
1603   {
1604     fhMassSplitEFractionNLocMaxNEbin[0][ebin]->Fill(splitFrac,  mass);
1605     if(IsDataMC() && mcindex > 0 && mcindex < 7)fhMassSplitEFractionNLocMaxNEbin[mcindex][ebin]->Fill(splitFrac,  mass);
1606     
1607     fhMassM02NLocMaxNEbin    [ebin]->Fill(l0  ,  mass );
1608     fhMassAsyNLocMaxNEbin    [ebin]->Fill(asym,  mass );
1609   }
1610   
1611 }
1612
1613 //________________________________________________________________________________________________________________________
1614 void AliAnaInsideClusterInvariantMass::FillHistograms1(const Float_t en,     const Float_t e1,     const Float_t e2,
1615                                                        const Int_t nMax,     const Float_t mass,   const Float_t l0,
1616                                                        const Float_t eta,    const Float_t phi,
1617                                                        const Bool_t matched, const Int_t mcindex)
1618 {
1619   // Fill histograms for clusters before any selection after spliting
1620   
1621   Float_t splitFrac = (e1+e2)/en;
1622   
1623   Float_t asym = -10;
1624   if(e1+e2>0) asym = (e1-e2)/(e1+e2);
1625   
1626   fhNLocMax   [0][matched]->Fill(en,nMax);
1627   fhLM1NLocMax[0][matched]->Fill(e1,nMax);
1628   fhLM2NLocMax[0][matched]->Fill(e2,nMax);
1629   fhSplitClusterENLocMax[0][matched]->Fill(e1,nMax);
1630   fhSplitClusterENLocMax[0][matched]->Fill(e2,nMax);
1631   
1632   if(IsDataMC() && mcindex > 0 && mcindex < 7)
1633   {
1634     fhNLocMax   [mcindex][matched]->Fill(en,nMax);
1635     fhLM1NLocMax[mcindex][matched]->Fill(e1,nMax);
1636     fhLM2NLocMax[mcindex][matched]->Fill(e2,nMax);
1637     fhSplitClusterENLocMax[mcindex][matched]->Fill(e1,nMax);
1638     fhSplitClusterENLocMax[mcindex][matched]->Fill(e2,nMax);
1639   }
1640   
1641   if     ( nMax == 1  )
1642   {
1643     fhM02NLocMax1[0][matched]->Fill(en,l0) ;
1644     fhSplitEFractionNLocMax1[0][matched]->Fill(en,splitFrac) ;
1645     
1646     if(IsDataMC() && mcindex > 0 && mcindex < 7)
1647     {
1648       fhM02NLocMax1[mcindex][matched]->Fill(en,l0) ;
1649       fhSplitEFractionNLocMax1[mcindex][matched]->Fill(en,splitFrac) ;
1650     }
1651     
1652     if(en > fHistoECut)
1653     {
1654       fhMassM02NLocMax1[0][matched]->Fill(l0, mass);
1655       if( IsDataMC() && mcindex > 0 && mcindex < 7 ) fhMassM02NLocMax1[mcindex][matched]->Fill(l0, mass);
1656       
1657       fhSplitEFractionvsAsyNLocMax1[matched]->Fill(asym,splitFrac) ;
1658       if(!matched)fhClusterEtaPhiNLocMax1->Fill(eta,phi);
1659     }
1660   }
1661   else if( nMax == 2  )
1662   {
1663     fhM02NLocMax2[0][matched]->Fill(en,l0) ;
1664     fhSplitEFractionNLocMax2[0][matched]->Fill(en,splitFrac) ;
1665     
1666     if(IsDataMC() && mcindex > 0 && mcindex < 7)
1667     {
1668       fhM02NLocMax2[mcindex][matched]->Fill(en,l0) ;
1669       fhSplitEFractionNLocMax2[mcindex][matched]->Fill(en,splitFrac) ;
1670     }
1671     
1672     if(en > fHistoECut)
1673     {
1674       fhMassM02NLocMax2[0][matched]->Fill(l0,  mass );
1675       if( IsDataMC() && mcindex > 0 && mcindex < 7 ) fhMassM02NLocMax2[mcindex][matched]->Fill(l0,mass);
1676       
1677       fhSplitEFractionvsAsyNLocMax2[matched]->Fill(asym,splitFrac) ;
1678       if(!matched)fhClusterEtaPhiNLocMax2->Fill(eta,phi);
1679     }
1680   }
1681   else if( nMax >= 3  )
1682   {
1683     fhM02NLocMaxN[0][matched]->Fill(en,l0) ;
1684     fhSplitEFractionNLocMaxN[0][matched]->Fill(en,splitFrac) ;
1685     
1686     if(IsDataMC() && mcindex > 0 && mcindex < 7)
1687     {
1688       fhM02NLocMaxN[mcindex][matched]->Fill(en,l0) ;
1689       fhSplitEFractionNLocMaxN[mcindex][matched]->Fill(en,splitFrac) ;
1690     }
1691     
1692     if(en > fHistoECut)
1693     {
1694       
1695       fhMassM02NLocMaxN[0][matched]->Fill(l0,mass);
1696       if( IsDataMC() && mcindex > 0 && mcindex < 7 ) fhMassM02NLocMaxN[mcindex][matched]->Fill(l0,mass);
1697       
1698       fhSplitEFractionvsAsyNLocMaxN[matched]->Fill(asym,splitFrac) ;
1699       if(!matched)fhClusterEtaPhiNLocMaxN->Fill(eta,phi);
1700     }
1701   }
1702   
1703   
1704 }
1705
1706 //________________________________________________________________________________________________________________________
1707 void AliAnaInsideClusterInvariantMass::FillHistograms2(const Float_t en,     const Float_t eprim,
1708                                                        const Float_t e1,     const Float_t e2,
1709                                                        const Int_t nMax,     const Float_t mass,   const Float_t l0,
1710                                                        const Bool_t matched, const Int_t mcindex)
1711 {
1712   // Fill histograms for clusters passing the first M02 selection
1713   
1714   Float_t efrac      = eprim/en;
1715   Float_t efracSplit = 0;
1716   if(e1+e2 > 0) efracSplit = eprim/(e1+e2);
1717   
1718   Float_t splitFrac = (e1+e2)/en;
1719   
1720   Float_t asym = -10;
1721   if(e1+e2>0) asym = (e1-e2)/(e1+e2);
1722   
1723   Int_t inlm = nMax-1;
1724   if(inlm > 2) inlm = 2;
1725   Float_t splitFracMin = GetCaloPID()->GetSplitEnergyFractionMinimum(inlm) ;
1726   
1727   Bool_t m02OK = GetCaloPID()->IsInPi0M02Range(en,l0,nMax);
1728   Bool_t asyOK = GetCaloPID()->IsInPi0SplitAsymmetryRange(en,asym,nMax);
1729   Bool_t m02On = GetCaloPID()->IsSplitShowerShapeCutOn();
1730   Bool_t asyOn = GetCaloPID()->IsSplitAsymmetryCutOn();
1731   
1732   //printf("splitFracMin %f, val %f, m02ok %d, asyok %d\n",splitFracMin,splitFrac,m02OK,asyOK);
1733   
1734   if(m02On && m02OK)
1735   {
1736     fhNLocMaxM02Cut   [0][matched]->Fill(en,nMax);
1737     fhLM1NLocMaxM02Cut[0][matched]->Fill(e1,nMax);
1738     fhLM2NLocMaxM02Cut[0][matched]->Fill(e2,nMax);
1739     if(IsDataMC() && mcindex > 0 && mcindex < 7)
1740     {
1741       fhNLocMaxM02Cut   [mcindex][matched]->Fill(en,nMax);
1742       fhLM1NLocMaxM02Cut[mcindex][matched]->Fill(e1,nMax);
1743       fhLM2NLocMaxM02Cut[mcindex][matched]->Fill(e2,nMax);
1744     }
1745   }
1746   
1747   if     (nMax==1)
1748   {
1749     fhMassNLocMax1[0][matched]->Fill(en,mass );
1750     fhAsymNLocMax1[0][matched]->Fill(en,asym );
1751     
1752     // Effect of cuts in mass histograms
1753
1754     if(!matched && asyOK && asyOn )
1755     {
1756       fhMassAsyCutNLocMax1->Fill(en,mass);
1757       fhM02AsyCutNLocMax1 ->Fill(en,l0 );
1758     }
1759     
1760     if(!matched && m02OK && m02On )
1761     {
1762       fhMassM02CutNLocMax1->Fill(en,mass);
1763       fhAsymM02CutNLocMax1->Fill(en,asym );
1764       if(splitFrac > splitFracMin && fhMassSplitECutNLocMax1) fhMassSplitECutNLocMax1->Fill(en,mass );
1765     } 
1766     
1767     if((m02OK && asyOK) && (asyOn || m02On))
1768     {
1769       fhSplitEFractionAfterCutsNLocMax1[0][matched]->Fill(en,splitFrac);
1770       if(splitFrac > splitFracMin) fhMassAfterCutsNLocMax1[0][matched]->Fill(en,mass);
1771       
1772       if(!matched && IsDataMC() && fFillMCHisto && mcindex==kmcPi0)
1773       {
1774         fhMCGenFracAfterCutsNLocMax1MCPi0      ->Fill(en   ,  efrac     );
1775         fhMCGenSplitEFracAfterCutsNLocMax1MCPi0->Fill(en   ,  efracSplit);
1776       }
1777     }
1778   }
1779   else if(nMax==2)
1780   {
1781     fhMassNLocMax2[0][matched]->Fill(en,mass );
1782     fhAsymNLocMax2[0][matched]->Fill(en,asym );
1783     
1784     // Effect of cuts in mass histograms
1785     
1786     if(!matched && asyOK && asyOn )
1787     {
1788       fhMassAsyCutNLocMax2->Fill(en,mass);
1789       fhM02AsyCutNLocMax2 ->Fill(en,l0 );
1790     }
1791     
1792     if(!matched && m02OK && m02On )
1793     {
1794       fhMassM02CutNLocMax2->Fill(en,mass);
1795       fhAsymM02CutNLocMax2->Fill(en,asym );
1796       if(splitFrac > splitFracMin && fhMassSplitECutNLocMax2) fhMassSplitECutNLocMax2->Fill(en,mass );
1797     } 
1798     
1799     if((m02OK && asyOK) && (asyOn || m02On))
1800     {
1801       fhSplitEFractionAfterCutsNLocMax2[0][matched]->Fill(en,splitFrac);
1802       if(splitFrac >splitFracMin) fhMassAfterCutsNLocMax2[0][matched]->Fill(en,mass);
1803       
1804       if(!matched && IsDataMC() && fFillMCHisto && mcindex==kmcPi0)
1805       {
1806         fhMCGenFracAfterCutsNLocMax2MCPi0      ->Fill(en   ,  efrac     );
1807         fhMCGenSplitEFracAfterCutsNLocMax2MCPi0->Fill(en   ,  efracSplit);
1808       }
1809     }
1810   }
1811   else if(nMax >2)
1812   {
1813     fhMassNLocMaxN[0][matched]->Fill(en,mass);
1814     fhAsymNLocMaxN[0][matched]->Fill(en,asym);
1815     
1816     // Effect of cuts in mass histograms
1817     
1818     if(!matched && asyOK && asyOn )
1819     {
1820       fhMassAsyCutNLocMaxN->Fill(en,mass);
1821       fhM02AsyCutNLocMaxN ->Fill(en,l0 );
1822     }
1823     
1824     if(!matched && m02OK && m02On )
1825     {
1826       fhMassM02CutNLocMaxN->Fill(en,mass);
1827       fhAsymM02CutNLocMaxN->Fill(en,asym );
1828       if(splitFrac > splitFracMin && fhMassSplitECutNLocMaxN) fhMassSplitECutNLocMaxN->Fill(en,mass );
1829     } 
1830     
1831     if((m02OK && asyOK) && (asyOn || m02On))
1832     {
1833       fhSplitEFractionAfterCutsNLocMaxN[0][matched]->Fill(en,splitFrac);
1834       if(splitFrac > splitFracMin) fhMassAfterCutsNLocMaxN[0][matched]->Fill(en,mass);
1835       
1836       if(!matched && IsDataMC() && fFillMCHisto && mcindex==kmcPi0)
1837       {
1838         fhMCGenFracAfterCutsNLocMaxNMCPi0      ->Fill(en   ,  efrac     );
1839         fhMCGenSplitEFracAfterCutsNLocMaxNMCPi0->Fill(en   ,  efracSplit);
1840       }
1841     }
1842   }
1843   
1844   if(IsDataMC() && mcindex > 0 && mcindex < 7)
1845   {
1846     if     (nMax==1)
1847     {
1848       fhMassNLocMax1[mcindex][matched]->Fill(en,mass);
1849       fhAsymNLocMax1[mcindex][matched]->Fill(en,asym);
1850       
1851       if((m02OK && asyOK) && (asyOn || m02On))
1852       {
1853         fhSplitEFractionAfterCutsNLocMax1[mcindex][matched]->Fill(en,splitFrac);
1854         if(splitFrac > splitFracMin)
1855           fhMassAfterCutsNLocMax1[mcindex][matched]->Fill(en,mass);
1856       }
1857     }
1858     else if(nMax==2)
1859     {
1860       fhMassNLocMax2[mcindex][matched]->Fill(en,mass);
1861       fhAsymNLocMax2[mcindex][matched]->Fill(en,asym);
1862       
1863       if((m02OK && asyOK) && (asyOn || m02On))
1864       {
1865         fhSplitEFractionAfterCutsNLocMax2[mcindex][matched]->Fill(en,splitFrac);
1866         if(splitFrac >splitFracMin)
1867           fhMassAfterCutsNLocMax2[mcindex][matched]->Fill(en,mass);
1868       }
1869     }
1870     else if(nMax >2)
1871     {
1872       fhMassNLocMaxN[mcindex][matched]->Fill(en,mass);
1873       fhAsymNLocMaxN[mcindex][matched]->Fill(en,asym);
1874       
1875       if((m02OK && asyOK) && (asyOn || m02On))
1876       {
1877         fhSplitEFractionAfterCutsNLocMaxN[mcindex][matched]->Fill(en,splitFrac);
1878         if(splitFrac > splitFracMin )
1879           fhMassAfterCutsNLocMaxN[mcindex][matched]->Fill(en,mass);
1880       }
1881     }
1882   }//Work with MC truth
1883 }
1884
1885
1886 //________________________________________________________________________________________________________________________
1887 void AliAnaInsideClusterInvariantMass::FillIdPi0Histograms(const Float_t en,     const Float_t e1,     const Float_t e2,
1888                                                            const Int_t nc,       const Int_t nMax,     const Float_t t12diff,
1889                                                            const Float_t mass,   const Float_t l0,
1890                                                            const Float_t eta,    const Float_t phi,
1891                                                            const Bool_t matched, const Int_t mcindex)
1892 {
1893   // Fill histograms for clusters passing the pi0 selection
1894   
1895   Float_t asym = -10;
1896   if(e1+e2>0) asym = (e1-e2)/(e1+e2);
1897   
1898   fhNLocMaxIdPi0   [0][matched]->Fill(en,nMax);
1899   fhLM1NLocMaxIdPi0[0][matched]->Fill(e1,nMax);
1900   fhLM2NLocMaxIdPi0[0][matched]->Fill(e2,nMax);
1901   
1902   fhSplitClusterEPi0NLocMax[0][matched]->Fill(e1,nMax);
1903   fhSplitClusterEPi0NLocMax[0][matched]->Fill(e2,nMax);
1904   
1905   if(IsDataMC() && mcindex > 0 && mcindex < 7)
1906   {
1907     fhSplitClusterEPi0NLocMax[mcindex][matched]->Fill(e1,nMax);
1908     fhSplitClusterEPi0NLocMax[mcindex][matched]->Fill(e2,nMax);
1909   }
1910   
1911   if     (nMax==1)
1912   {
1913     fhM02Pi0NLocMax1 [0][matched]->Fill(en,l0);
1914     fhMassPi0NLocMax1[0][matched]->Fill(en,mass);
1915     fhAsyPi0NLocMax1 [0][matched]->Fill(en,asym);
1916     if(fFillNCellHisto) fhNCellPi0NLocMax1[0][matched]->Fill(en,nc);
1917     
1918     if(!matched)
1919     {
1920       if(fFillHighMultHisto)
1921       {
1922         fhCentralityPi0NLocMax1->Fill(en,GetEventCentrality()) ;
1923         fhEventPlanePi0NLocMax1->Fill(en,GetEventPlaneAngle()) ;
1924       }
1925       if(en > fHistoECut)fhPi0EtaPhiNLocMax1->Fill(eta,phi);
1926       fhPi0EPairDiffTimeNLM1->Fill(e1+e2,t12diff);
1927     }
1928   }
1929   else if(nMax==2)
1930   {
1931     fhM02Pi0NLocMax2 [0][matched]->Fill(en,l0);
1932     fhMassPi0NLocMax2[0][matched]->Fill(en,mass);
1933     fhAsyPi0NLocMax2 [0][matched]->Fill(en,asym);
1934     if(fFillNCellHisto) fhNCellPi0NLocMax2[0][matched]->Fill(en,nc);
1935     
1936     if(!matched)
1937     {
1938       if(fFillHighMultHisto)
1939       {
1940         fhCentralityPi0NLocMax2->Fill(en,GetEventCentrality()) ;
1941         fhEventPlanePi0NLocMax2->Fill(en,GetEventPlaneAngle()) ;
1942       }
1943       if(en > fHistoECut)fhPi0EtaPhiNLocMax2->Fill(eta,phi);
1944       fhPi0EPairDiffTimeNLM2->Fill(e1+e2,t12diff);
1945     }
1946   }
1947   else if(nMax >2)
1948   {
1949     fhM02Pi0NLocMaxN [0][matched]->Fill(en,l0);
1950     fhMassPi0NLocMaxN[0][matched]->Fill(en,mass);
1951     fhAsyPi0NLocMaxN [0][matched]->Fill(en,asym);
1952     if(fFillNCellHisto) fhNCellPi0NLocMaxN[0][matched]->Fill(en,nc);
1953     
1954     if(!matched)
1955     {
1956       if(fFillHighMultHisto)
1957       {
1958         fhCentralityPi0NLocMaxN->Fill(en,GetEventCentrality()) ;
1959         fhEventPlanePi0NLocMaxN->Fill(en,GetEventPlaneAngle()) ;
1960       }
1961       if(en > fHistoECut)fhPi0EtaPhiNLocMaxN->Fill(eta,phi);
1962       fhPi0EPairDiffTimeNLMN->Fill(e1+e2,t12diff);
1963     }
1964   }
1965   
1966   if(IsDataMC() && mcindex > 0 && mcindex < 7)
1967   {
1968     fhNLocMaxIdPi0   [mcindex][matched]->Fill(en,nMax);
1969     fhLM1NLocMaxIdPi0[mcindex][matched]->Fill(e1,nMax);
1970     fhLM2NLocMaxIdPi0[mcindex][matched]->Fill(e2,nMax);
1971     
1972     if     (nMax==1)
1973     {
1974       fhM02Pi0NLocMax1 [mcindex][matched]->Fill(en,l0);
1975       fhMassPi0NLocMax1[mcindex][matched]->Fill(en,mass);
1976       fhAsyPi0NLocMax1 [mcindex][matched]->Fill(en,asym);
1977       if(fFillNCellHisto) fhNCellPi0NLocMax1[mcindex][matched]->Fill(en,nc);
1978       
1979     }
1980     else if(nMax==2)
1981     {
1982       fhM02Pi0NLocMax2 [mcindex][matched]->Fill(en,l0);
1983       fhMassPi0NLocMax2[mcindex][matched]->Fill(en,mass);
1984       fhAsyPi0NLocMax2 [mcindex][matched]->Fill(en,asym);
1985       if(fFillNCellHisto) fhNCellPi0NLocMax2[mcindex][matched]->Fill(en,nc);      
1986     }
1987     else if(nMax >2)
1988     {
1989       fhM02Pi0NLocMaxN [mcindex][matched]->Fill(en,l0);
1990       fhMassPi0NLocMaxN[mcindex][matched]->Fill(en,mass);
1991       fhAsyPi0NLocMaxN [mcindex][matched]->Fill(en,asym);
1992       if(fFillNCellHisto) fhNCellPi0NLocMaxN[mcindex][matched]->Fill(en,nc);
1993     }
1994   }//Work with MC truth
1995 }
1996
1997 //________________________________________________________________________________________________________________________
1998 void AliAnaInsideClusterInvariantMass::FillIdEtaHistograms(const Float_t en,     const Float_t e1,  const Float_t e2,
1999                                                            const Int_t nc,       const Int_t nMax,  const Float_t t12diff,
2000                                                            const Float_t mass,   const Float_t l0,
2001                                                            const Float_t eta,    const Float_t phi,
2002                                                            const Bool_t matched, const Int_t mcindex)
2003 {
2004   // Fill histograms for clusters passing the eta selection
2005   
2006   Float_t asym = -10;
2007   if(e1+e2>0) asym = (e1-e2)/(e1+e2);
2008   
2009   if     (nMax==1)
2010   {
2011     fhM02EtaNLocMax1 [0][matched]->Fill(en,l0);
2012     fhMassEtaNLocMax1[0][matched]->Fill(en,mass);
2013     fhAsyEtaNLocMax1 [0][matched]->Fill(en,asym);
2014     if(fFillNCellHisto) fhNCellEtaNLocMax1[0][matched]->Fill(en,nc);
2015     
2016     if(!matched)
2017     {
2018       if(fFillHighMultHisto)
2019       {
2020         fhCentralityEtaNLocMax1->Fill(en,GetEventCentrality()) ;
2021         fhEventPlaneEtaNLocMax1->Fill(en,GetEventPlaneAngle()) ;
2022       }
2023       if(en > fHistoECut)fhEtaEtaPhiNLocMax1->Fill(eta,phi);
2024       fhEtaEPairDiffTimeNLM1->Fill(e1+e2,t12diff);
2025     }
2026   }
2027   else if(nMax==2)
2028   {
2029     fhM02EtaNLocMax2 [0][matched]->Fill(en,l0);
2030     fhMassEtaNLocMax2[0][matched]->Fill(en,mass);
2031     fhAsyEtaNLocMax2 [0][matched]->Fill(en,asym);
2032     if(fFillNCellHisto) fhNCellEtaNLocMax2[0][matched]->Fill(en,nc);
2033     
2034     if(!matched)
2035     {
2036       if(fFillHighMultHisto)
2037       {
2038         fhCentralityEtaNLocMax2->Fill(en,GetEventCentrality()) ;
2039         fhEventPlaneEtaNLocMax2->Fill(en,GetEventPlaneAngle()) ;
2040       }
2041       if(en > fHistoECut)fhEtaEtaPhiNLocMax2->Fill(eta,phi);
2042       fhEtaEPairDiffTimeNLM2->Fill(e1+e2,t12diff);
2043     }
2044   }
2045   else if(nMax >2)
2046   {
2047     fhM02EtaNLocMaxN [0][matched]->Fill(en,l0);
2048     fhMassEtaNLocMaxN[0][matched]->Fill(en,mass);
2049     fhAsyEtaNLocMaxN [0][matched]->Fill(en,asym);
2050     if(fFillNCellHisto) fhNCellEtaNLocMaxN[0][matched]->Fill(en,nc);
2051     
2052     if(!matched)
2053     {
2054       if(fFillHighMultHisto)
2055       {
2056         fhCentralityEtaNLocMaxN->Fill(en,GetEventCentrality()) ;
2057         fhEventPlaneEtaNLocMaxN->Fill(en,GetEventPlaneAngle()) ;
2058       }
2059       if(en > fHistoECut)fhEtaEtaPhiNLocMaxN->Fill(eta,phi);
2060       fhEtaEPairDiffTimeNLMN->Fill(e1+e2,t12diff);
2061     }
2062   }
2063   
2064   if(IsDataMC() && mcindex > 0 && mcindex < 7)
2065   {
2066     if     (nMax==1)
2067     {
2068       fhM02EtaNLocMax1[mcindex][matched]->Fill(en,l0);
2069       fhMassEtaNLocMax1[mcindex][matched]->Fill(en,mass);
2070       fhAsyEtaNLocMax1[mcindex][matched]->Fill(en,asym);
2071       if(fFillNCellHisto) fhNCellEtaNLocMax1[mcindex][matched]->Fill(en,nc);
2072     }
2073     else if(nMax==2)
2074     {
2075       fhM02EtaNLocMax2 [mcindex][matched]->Fill(en,l0);
2076       fhMassEtaNLocMax2[mcindex][matched]->Fill(en,mass);
2077       fhAsyEtaNLocMax2 [mcindex][matched]->Fill(en,asym);
2078       if(fFillNCellHisto) fhNCellEtaNLocMax2[mcindex][matched]->Fill(en,nc);
2079       
2080     }
2081     else if(nMax >2)
2082     {
2083       fhM02Pi0NLocMaxN[mcindex][matched]->Fill(en,l0);
2084       fhMassPi0NLocMaxN[mcindex][matched]->Fill(en,mass);
2085       fhAsyPi0NLocMaxN[mcindex][matched]->Fill(en,asym);
2086       if(fFillNCellHisto) fhNCellPi0NLocMaxN[mcindex][matched]->Fill(en,nc);
2087     }
2088   }//Work with MC truth
2089 }
2090
2091
2092 //_____________________________________________________________________________________________________________________
2093 void AliAnaInsideClusterInvariantMass::FillIdConvHistograms(const Float_t en,    const Int_t nMax, const Float_t asym,
2094                                                             const Float_t mass,   const Float_t l0,
2095                                                             const Bool_t matched, const Int_t mcindex)
2096 {
2097   // Fill histograms for clusters passing the photon selection
2098   
2099   if     (nMax==1)
2100   {
2101     fhM02ConNLocMax1 [0][matched]->Fill(en,l0);
2102     fhMassConNLocMax1[0][matched]->Fill(en,mass);
2103     fhAsyConNLocMax1 [0][matched]->Fill(en,asym);
2104   }
2105   else if(nMax==2)
2106   {
2107     fhM02ConNLocMax2 [0][matched]->Fill(en,l0);
2108     fhMassConNLocMax2[0][matched]->Fill(en,mass);
2109     fhAsyConNLocMax2 [0][matched]->Fill(en,asym);
2110   }
2111   else if(nMax >2)
2112   {
2113     fhM02ConNLocMaxN [0][matched]->Fill(en,l0);
2114     fhMassConNLocMaxN[0][matched]->Fill(en,mass);
2115     fhAsyConNLocMaxN [0][matched]->Fill(en,asym);
2116   }
2117   
2118   if(IsDataMC() && mcindex > 0 && mcindex < 7)
2119   {
2120     if     (nMax==1)
2121     {
2122       fhM02ConNLocMax1 [mcindex][matched]->Fill(en,l0);
2123       fhMassConNLocMax1[mcindex][matched]->Fill(en,mass);
2124       fhAsyConNLocMax1 [mcindex][matched]->Fill(en,asym);
2125     }
2126     else if(nMax==2)
2127     {
2128       fhM02ConNLocMax2 [mcindex][matched]->Fill(en,l0);
2129       fhMassConNLocMax2[mcindex][matched]->Fill(en,mass);
2130       fhAsyConNLocMax2 [mcindex][matched]->Fill(en,asym);
2131     }
2132     else if(nMax >2)
2133     {
2134       fhM02ConNLocMaxN [mcindex][matched]->Fill(en,l0);
2135       fhMassConNLocMaxN[mcindex][matched]->Fill(en,mass);
2136       fhAsyConNLocMaxN [mcindex][matched]->Fill(en,asym);
2137     }
2138     
2139   }//Work with MC truth
2140 }
2141
2142 //_____________________________________________________________________________________________________________________
2143 void AliAnaInsideClusterInvariantMass::FillMCHistograms(const Float_t en,        const Float_t e1  , const Float_t e2,
2144                                                         const Int_t ebin,        const Int_t mcindex,const Int_t noverlaps,
2145                                                         const Float_t l0,        const Float_t mass,
2146                                                         const Int_t nMax,        const Bool_t  matched,
2147                                                         const Float_t splitFrac, const Float_t asym,
2148                                                         const Float_t eprim,     const Float_t asymGen)
2149 {
2150   // Fill histograms needing some MC input
2151     
2152   Float_t efrac      = eprim/en;
2153   Float_t efracSplit = 0;
2154   if(e1+e2 > 0) efracSplit = eprim/(e1+e2);
2155   Float_t asymDiff = TMath::Abs(asym) - TMath::Abs(asymGen);
2156   
2157   //printf("e1 %2.2f, e2 %2.2f, eprim %2.2f, ereco %2.2f, esplit/ereco %2.2f, egen/ereco %2.2f, egen/esplit %2.2f\n",
2158   //       e1,e2,eprim,en,splitFrac,efrac,efracSplit);
2159   
2160   if(ebin >= 0 && fFillEbinHisto)
2161   {
2162     if( !matched ) fhMCGenFracNLocMaxEbin       [mcindex][ebin]->Fill(efrac,nMax);
2163     else           fhMCGenFracNLocMaxEbinMatched[mcindex][ebin]->Fill(efrac,nMax);
2164   }
2165
2166   if     (nMax==1)
2167   {
2168     fhMCGenFracNLocMax1      [mcindex][matched]->Fill(en     ,  efrac );
2169     fhMCGenSplitEFracNLocMax1[mcindex][matched]->Fill(en     ,  efracSplit );
2170     fhMCGenEvsSplitENLocMax1 [mcindex][matched]->Fill(eprim  ,  e1+e2);
2171     if(asym > 0 && !matched)
2172     {
2173       if      (mcindex==kmcPi0)    fhAsyMCGenRecoDiffMCPi0[0]    ->Fill(en, asymDiff );
2174       else  if(mcindex==kmcPi0Conv)fhAsyMCGenRecoDiffMCPi0Conv[0]->Fill(en, asymDiff );
2175     }
2176
2177     if(noverlaps==0)
2178     {
2179       fhMCGenFracNLocMax1NoOverlap      [mcindex][matched]->Fill(en ,  efrac );
2180       fhMCGenSplitEFracNLocMax1NoOverlap[mcindex][matched]->Fill(en ,  efracSplit );
2181     }
2182     
2183     if( en > fHistoECut )
2184     {
2185       fhMCGenEFracvsSplitEFracNLocMax1[mcindex][matched]->Fill(efrac,splitFrac );
2186       
2187       if(!matched && ebin >= 0 && fFillEbinHisto)
2188       {
2189         fhM02MCGenFracNLocMax1Ebin [mcindex][ebin]->Fill(efrac  ,  l0    );
2190         fhMassMCGenFracNLocMax1Ebin[mcindex][ebin]->Fill(efrac  ,  mass  );
2191         
2192         if(mcindex==kmcPi0 || mcindex==kmcPi0Conv)
2193         {
2194           fhMCAsymM02NLocMax1MCPi0Ebin [ebin]->Fill(l0  ,  asymGen );
2195           fhAsyMCGenRecoNLocMax1EbinPi0[ebin]->Fill(asym,  asymGen );
2196         }
2197       }
2198     }
2199   }
2200   else if(nMax==2)
2201   {
2202     fhMCGenFracNLocMax2      [mcindex][matched]->Fill(en     ,  efrac );
2203     fhMCGenSplitEFracNLocMax2[mcindex][matched]->Fill(en     ,  efracSplit );
2204     fhMCGenEvsSplitENLocMax2 [mcindex][matched]->Fill(eprim  ,  e1+e2);
2205
2206     if(asym > 0 && !matched)
2207     {
2208      if      (mcindex==kmcPi0)    fhAsyMCGenRecoDiffMCPi0[1]    ->Fill(en, asymDiff );
2209      else  if(mcindex==kmcPi0Conv)fhAsyMCGenRecoDiffMCPi0Conv[1]->Fill(en, asymDiff );
2210     }
2211     
2212     if(noverlaps==0)
2213     {
2214       fhMCGenFracNLocMax2NoOverlap      [mcindex][matched]->Fill(en ,  efrac );
2215       fhMCGenSplitEFracNLocMax2NoOverlap[mcindex][matched]->Fill(en ,  efracSplit );
2216     }
2217     
2218     if( en > fHistoECut )
2219     {
2220       fhMCGenEFracvsSplitEFracNLocMax2[mcindex][matched]->Fill(efrac,splitFrac );
2221       
2222       if(!matched && ebin >= 0 && fFillEbinHisto)
2223       {
2224         fhM02MCGenFracNLocMax2Ebin [mcindex][ebin]->Fill(efrac  ,  l0    );
2225         fhMassMCGenFracNLocMax2Ebin[mcindex][ebin]->Fill(efrac  ,  mass  );
2226         if(mcindex==kmcPi0 || mcindex==kmcPi0Conv)
2227         {
2228           fhMCAsymM02NLocMax2MCPi0Ebin [ebin]->Fill(l0  ,  asymGen );
2229           fhAsyMCGenRecoNLocMax2EbinPi0[ebin]->Fill(asym,  asymGen );
2230         }
2231       }
2232     }
2233
2234   }
2235   else if(nMax > 2 )
2236   {
2237     fhMCGenFracNLocMaxN      [mcindex][matched]->Fill(en     ,  efrac );
2238     fhMCGenSplitEFracNLocMaxN[mcindex][matched]->Fill(en     ,  efracSplit );
2239     fhMCGenEvsSplitENLocMaxN [mcindex][matched]->Fill(eprim  ,  e1+e2);
2240     if(asym > 0 && !matched)
2241     {
2242       if      (mcindex==kmcPi0)    fhAsyMCGenRecoDiffMCPi0[2]    ->Fill(en, asymDiff );
2243       else  if(mcindex==kmcPi0Conv)fhAsyMCGenRecoDiffMCPi0Conv[2]->Fill(en, asymDiff );
2244     }
2245
2246     if(noverlaps==0)
2247     {
2248       fhMCGenFracNLocMaxNNoOverlap      [mcindex][matched]->Fill(en ,  efrac );
2249       fhMCGenSplitEFracNLocMaxNNoOverlap[mcindex][matched]->Fill(en ,  efracSplit );
2250     }
2251     
2252     if( en > fHistoECut )
2253     {
2254       fhMCGenEFracvsSplitEFracNLocMaxN[mcindex][matched]->Fill(efrac,splitFrac );
2255       
2256       if(!matched && ebin >= 0 && fFillEbinHisto)
2257       {
2258         fhM02MCGenFracNLocMaxNEbin [mcindex][ebin]->Fill(efrac  ,  l0    );
2259         fhMassMCGenFracNLocMaxNEbin[mcindex][ebin]->Fill(efrac  ,  mass  );
2260         
2261         if(mcindex==kmcPi0 || mcindex==kmcPi0Conv)
2262         {
2263           fhMCAsymM02NLocMaxNMCPi0Ebin [ebin]->Fill(l0  ,  asymGen );
2264           fhAsyMCGenRecoNLocMaxNEbinPi0[ebin]->Fill(asym,  asymGen );
2265         }
2266       }
2267     }
2268   }
2269 }
2270
2271 //__________________________________________________________________________________________________________________________________________________
2272 void AliAnaInsideClusterInvariantMass::FillMCOverlapHistograms(const Float_t en,      const Float_t enprim,
2273                                                                const Int_t   nc,      const Float_t mass,    const Float_t l0,
2274                                                                const Float_t asym,    const Float_t splitFrac,
2275                                                                const Int_t   inlm,    const Int_t ebin, const Bool_t matched,
2276                                                                const Int_t   mcindex, const Int_t noverlaps)
2277 {
2278   // Fill histograms for MC Overlaps
2279   
2280   //printf("en %f,mass %f,l0 %f,inlm %d,ebin %d,matched %d,mcindex %d,noverlaps %d \n",en,mass,l0,inlm,ebin,matched,mcindex,noverlaps);
2281     
2282   //printf("AliAnaInsideClusterInvariantMass::FillMCOverlapHistograms - NLM bin=%d, mcIndex %d, n Overlaps %d\n",inlm,mcindex,noverlaps);
2283   
2284   if(!matched)
2285   {
2286     fhMCENOverlaps[inlm][mcindex]->Fill(en,noverlaps);
2287     
2288     if     (noverlaps == 0)
2289     {
2290       fhMCEM02Overlap0  [inlm][mcindex]->Fill(en, l0);
2291       fhMCEMassOverlap0 [inlm][mcindex]->Fill(en, mass);
2292       fhMCEEpriOverlap0 [inlm][mcindex]->Fill(en, enprim);
2293       fhMCEAsymOverlap0 [inlm][mcindex]->Fill(en, TMath::Abs(asym));
2294       if(fFillNCellHisto) fhMCENCellOverlap0[inlm][mcindex]->Fill(en, nc);
2295       fhMCESplitEFracOverlap0[inlm][mcindex]->Fill(en, splitFrac);
2296       if((mcindex==kmcPi0 || mcindex == kmcPi0Conv) && ebin >=0) fhMCPi0MassM02Overlap0[inlm][ebin]->Fill(l0,mass);
2297     }
2298     else if(noverlaps == 1)
2299     {
2300       fhMCEM02Overlap1  [inlm][mcindex]->Fill(en, l0);
2301       fhMCEMassOverlap1 [inlm][mcindex]->Fill(en, mass);
2302       fhMCEEpriOverlap1 [inlm][mcindex]->Fill(en, enprim);
2303       fhMCEAsymOverlap1 [inlm][mcindex]->Fill(en, TMath::Abs(asym));
2304       if(fFillNCellHisto) fhMCENCellOverlap1[inlm][mcindex]->Fill(en, nc);
2305       fhMCESplitEFracOverlap1[inlm][mcindex]->Fill(en, splitFrac);
2306       if((mcindex==kmcPi0 || mcindex == kmcPi0Conv) && ebin >=0) fhMCPi0MassM02Overlap1[inlm][ebin]->Fill(l0,mass);
2307     }
2308     else if(noverlaps  > 1)
2309     {
2310       fhMCEM02OverlapN  [inlm][mcindex]->Fill(en, l0);
2311       fhMCEMassOverlapN [inlm][mcindex]->Fill(en, mass);
2312       fhMCEEpriOverlapN [inlm][mcindex]->Fill(en, enprim);
2313       fhMCEAsymOverlapN [inlm][mcindex]->Fill(en, TMath::Abs(asym));
2314       if(fFillNCellHisto) fhMCENCellOverlapN[inlm][mcindex]->Fill(en, nc);
2315       fhMCESplitEFracOverlapN[inlm][mcindex]->Fill(en, splitFrac);
2316       if((mcindex==kmcPi0 || mcindex == kmcPi0Conv) && ebin >=0) fhMCPi0MassM02OverlapN[inlm][ebin]->Fill(l0,mass);
2317     }
2318     else
2319       printf("AliAnaInsideClusterInvariantMass::FillMCOverlapHistograms() - n overlaps = %d!!", noverlaps);
2320   }
2321   else if(fFillTMHisto)
2322   {
2323     fhMCENOverlapsMatch[inlm][mcindex]->Fill(en,noverlaps);
2324     
2325     if     (noverlaps == 0)
2326     {
2327       fhMCEM02Overlap0Match  [inlm][mcindex]->Fill(en, l0);
2328       fhMCEMassOverlap0Match [inlm][mcindex]->Fill(en, mass);
2329       fhMCEEpriOverlap0Match [inlm][mcindex]->Fill(en, enprim);
2330       fhMCEAsymOverlap0Match [inlm][mcindex]->Fill(en, TMath::Abs(asym));
2331       if(fFillNCellHisto) fhMCENCellOverlap0Match[inlm][mcindex]->Fill(en, nc);
2332       fhMCESplitEFracOverlap0Match[inlm][mcindex]->Fill(en, splitFrac);
2333       if((mcindex==kmcPi0 || mcindex == kmcPi0Conv) && ebin >=0) fhMCPi0MassM02Overlap0Match[inlm][ebin]->Fill(l0,mass);
2334     }
2335     else if(noverlaps == 1)
2336     {
2337       fhMCEM02Overlap1Match  [inlm][mcindex]->Fill(en, l0);
2338       fhMCEMassOverlap1Match [inlm][mcindex]->Fill(en, mass);
2339       fhMCEEpriOverlap1Match [inlm][mcindex]->Fill(en, enprim);
2340       fhMCEAsymOverlap1Match [inlm][mcindex]->Fill(en, TMath::Abs(asym));
2341       if(fFillNCellHisto) fhMCENCellOverlap1Match[inlm][mcindex]->Fill(en, nc);
2342       fhMCESplitEFracOverlap1Match[inlm][mcindex]->Fill(en, splitFrac);
2343       if((mcindex==kmcPi0 || mcindex == kmcPi0Conv) && ebin >=0) fhMCPi0MassM02Overlap1Match[inlm][ebin]->Fill(l0,mass);
2344     }
2345     else if(noverlaps  > 1)
2346     {
2347       fhMCEM02OverlapNMatch  [inlm][mcindex]->Fill(en, l0);
2348       fhMCEMassOverlapNMatch [inlm][mcindex]->Fill(en, mass);
2349       fhMCEEpriOverlapNMatch [inlm][mcindex]->Fill(en, enprim);
2350       fhMCEAsymOverlapNMatch [inlm][mcindex]->Fill(en, TMath::Abs(asym));
2351       if(fFillNCellHisto) fhMCENCellOverlapNMatch[inlm][mcindex]->Fill(en, nc);
2352       fhMCESplitEFracOverlapN[inlm][mcindex]->Fill(en, splitFrac);
2353       if((mcindex==kmcPi0 || mcindex == kmcPi0Conv) && ebin >=0) fhMCPi0MassM02OverlapNMatch[inlm][ebin]->Fill(l0,mass);
2354     }
2355     else
2356         printf("AliAnaInsideClusterInvariantMass::FillMCOverlapHistograms() - n overlaps in matched = %d!!", noverlaps);
2357   }
2358 }
2359
2360
2361 //__________________________________________________________________________________________________
2362 void AliAnaInsideClusterInvariantMass::FillNCellHistograms(const Int_t   ncells,  const Float_t energy, const Int_t nMax,
2363                                                            const Bool_t  matched, const Int_t mcindex,
2364                                                            const Float_t mass   , const Float_t l0)
2365
2366 {
2367   // Fill optional histograms with more SS parameters
2368     
2369   if     (nMax==1)
2370   {
2371     fhNCellNLocMax1[0][matched]->Fill(energy,ncells) ;
2372     if(mcindex > 0 )  fhNCellNLocMax1[mcindex][matched]->Fill(energy,ncells) ;
2373     
2374     if (mcindex==kmcPi0 && !matched)
2375     {
2376       if( energy > fHistoECut)
2377       {
2378         fhNCellMassEHighNLocMax1MCPi0->Fill(ncells,mass);
2379         fhNCellM02EHighNLocMax1MCPi0 ->Fill(ncells,l0);
2380       }
2381       else
2382       {
2383         fhNCellMassELowNLocMax1MCPi0->Fill(ncells,mass);
2384         fhNCellM02ELowNLocMax1MCPi0 ->Fill(ncells,l0);
2385       }
2386     }
2387   }
2388   else if( nMax == 2  )
2389   {
2390     fhNCellNLocMax2[0][matched]->Fill(energy,ncells) ;
2391     if(mcindex > 0 )  fhNCellNLocMax2[mcindex][matched]->Fill(energy,ncells) ;
2392     
2393     
2394     if (mcindex==kmcPi0 && !matched)
2395     {
2396       if( energy > fHistoECut)
2397       {
2398         fhNCellMassEHighNLocMax2MCPi0->Fill(ncells,mass);
2399         fhNCellM02EHighNLocMax2MCPi0 ->Fill(ncells,l0);
2400       }
2401       else
2402       {
2403         fhNCellMassELowNLocMax2MCPi0->Fill(ncells,mass);
2404         fhNCellM02ELowNLocMax2MCPi0 ->Fill(ncells,l0);
2405       }
2406     }
2407   }
2408   else if( nMax >= 3  )
2409   {
2410     fhNCellNLocMaxN[0][matched]->Fill(energy,ncells) ;
2411     if(mcindex > 0 )  fhNCellNLocMaxN[mcindex][matched]->Fill(energy,ncells) ;
2412     
2413     if (mcindex==kmcPi0 && !matched)
2414     {
2415       if( energy > fHistoECut)
2416       {
2417         fhNCellMassEHighNLocMaxNMCPi0->Fill(ncells,mass);
2418         fhNCellM02EHighNLocMaxNMCPi0 ->Fill(ncells,l0);
2419       }
2420       else
2421       {
2422         fhNCellMassELowNLocMaxNMCPi0->Fill(ncells,mass);
2423         fhNCellM02ELowNLocMaxNMCPi0 ->Fill(ncells,l0);
2424       }
2425     }
2426   }
2427 }
2428
2429 //______________________________________________________________________________________________________
2430 void AliAnaInsideClusterInvariantMass::FillSSExtraHistograms(AliVCluster  *cluster, const Int_t nMax,
2431                                                              const Bool_t  matched, const Int_t mcindex,
2432                                                              const Float_t mass   , const Int_t ebin)
2433 {
2434   // Fill optional histograms with more SS parameters
2435     
2436   Float_t en = cluster->E();
2437   
2438   // Get more Shower Shape parameters
2439   Float_t ll0  = 0., ll1  = 0.;
2440   Float_t disp= 0., dispEta = 0., dispPhi    = 0.;
2441   Float_t sEta = 0., sPhi = 0., sEtaPhi = 0.;
2442   
2443   GetCaloUtils()->GetEMCALRecoUtils()->RecalculateClusterShowerShapeParameters(GetEMCALGeometry(), GetReader()->GetInputEvent()->GetEMCALCells(), cluster,
2444                                                                                ll0, ll1, disp, dispEta, dispPhi, sEta, sPhi, sEtaPhi);
2445   
2446   Float_t dispAsy = -1;
2447   if(dispEta+dispPhi >0 ) dispAsy = (dispPhi-dispEta) / (dispPhi+dispEta);
2448   
2449   if     (nMax==1)
2450   {
2451     if( en > fHistoECut )
2452     {
2453       fhMassDispEtaNLocMax1[0][matched]->Fill(dispEta,  mass );
2454       fhMassDispPhiNLocMax1[0][matched]->Fill(dispPhi,  mass );
2455       fhMassDispAsyNLocMax1[0][matched]->Fill(dispAsy,  mass );
2456       
2457       if(IsDataMC() && mcindex > 0 && mcindex < 7)
2458       {
2459         fhMassDispEtaNLocMax1[mcindex][matched]->Fill(dispEta,  mass );
2460         fhMassDispPhiNLocMax1[mcindex][matched]->Fill(dispPhi,  mass );
2461         fhMassDispAsyNLocMax1[mcindex][matched]->Fill(dispAsy,  mass );
2462       }
2463     }
2464     
2465     if(!matched && ebin >= 0 && fFillEbinHisto)
2466     {
2467       fhMassDispEtaNLocMax1Ebin[ebin]->Fill(dispEta,  mass );
2468       fhMassDispPhiNLocMax1Ebin[ebin]->Fill(dispPhi,  mass );
2469       fhMassDispAsyNLocMax1Ebin[ebin]->Fill(dispAsy,  mass );
2470     }
2471   }
2472   else if( nMax == 2  )
2473   {
2474     if( en > fHistoECut )
2475     {
2476       fhMassDispEtaNLocMax2[0][matched]->Fill(dispEta,  mass );
2477       fhMassDispPhiNLocMax2[0][matched]->Fill(dispPhi,  mass );
2478       fhMassDispAsyNLocMax2[0][matched]->Fill(dispAsy,  mass );
2479       
2480       if(IsDataMC() && mcindex > 0 && mcindex < 7)
2481       {
2482         fhMassDispEtaNLocMax2[mcindex][matched]->Fill(dispEta,  mass );
2483         fhMassDispPhiNLocMax2[mcindex][matched]->Fill(dispPhi,  mass );
2484         fhMassDispAsyNLocMax2[mcindex][matched]->Fill(dispAsy,  mass );
2485       }
2486     }
2487     
2488     if(!matched && ebin >= 0 && fFillEbinHisto)
2489     {
2490       fhMassDispEtaNLocMax2Ebin[ebin]->Fill(dispEta,  mass );
2491       fhMassDispPhiNLocMax2Ebin[ebin]->Fill(dispPhi,  mass );
2492       fhMassDispAsyNLocMax2Ebin[ebin]->Fill(dispAsy,  mass );
2493     }
2494     
2495   }
2496   else if( nMax >= 3  )
2497   {
2498     if( en > fHistoECut )
2499     {
2500       fhMassDispEtaNLocMaxN[0][matched]->Fill(dispEta,  mass );
2501       fhMassDispPhiNLocMaxN[0][matched]->Fill(dispPhi,  mass );
2502       fhMassDispAsyNLocMaxN[0][matched]->Fill(dispAsy,  mass );
2503       
2504       if(IsDataMC() && mcindex > 0 && mcindex < 7)
2505       {
2506         fhMassDispEtaNLocMaxN[mcindex][matched]->Fill(dispEta,  mass );
2507         fhMassDispPhiNLocMaxN[mcindex][matched]->Fill(dispPhi,  mass );
2508         fhMassDispAsyNLocMaxN[mcindex][matched]->Fill(dispAsy,  mass );
2509       }
2510     }
2511     
2512     if(!matched && ebin >= 0 && fFillEbinHisto)
2513     {
2514       fhMassDispEtaNLocMaxNEbin[ebin]->Fill(dispEta,  mass );
2515       fhMassDispPhiNLocMaxNEbin[ebin]->Fill(dispPhi,  mass );
2516       fhMassDispAsyNLocMaxNEbin[ebin]->Fill(dispAsy,  mass );
2517     }
2518
2519   }
2520   
2521 }
2522
2523 //__________________________________________________________________________________________________
2524 void AliAnaInsideClusterInvariantMass::FillSSWeightHistograms(AliVCluster *clus,  const Int_t nlm,
2525                                                               const Int_t absId1, const Int_t absId2)
2526 {
2527   // Calculate weights and fill histograms
2528     
2529   AliVCaloCells* cells = 0;
2530   if(fCalorimeter == "EMCAL") cells = GetEMCALCells();
2531   else                        cells = GetPHOSCells();
2532   
2533   // First recalculate energy in case non linearity was applied
2534   Float_t  energy = 0;
2535   for (Int_t ipos = 0; ipos < clus->GetNCells(); ipos++)
2536   {
2537     
2538     Int_t id       = clus->GetCellsAbsId()[ipos];
2539     
2540     //Recalibrate cell energy if needed
2541     Float_t amp = cells->GetCellAmplitude(id);
2542     GetCaloUtils()->RecalibrateCellAmplitude(amp,fCalorimeter, id);
2543     
2544     energy    += amp;
2545       
2546   } // energy loop
2547   
2548   if(energy <=0 )
2549   {
2550     printf("AliAnaInsideClusterInvatiantMass::WeightHistograms()- Wrong calculated energy %f\n",energy);
2551     return;
2552   }
2553   
2554   //Get amplitude of  main local maxima, recalibrate if needed
2555   Float_t amp1 = cells->GetCellAmplitude(absId1);
2556   GetCaloUtils()->RecalibrateCellAmplitude(amp1,fCalorimeter, absId1);
2557   Float_t amp2 = cells->GetCellAmplitude(absId2);
2558   GetCaloUtils()->RecalibrateCellAmplitude(amp2,fCalorimeter, absId2);
2559
2560   if(amp1 < amp2)        printf("Bad local maxima E ordering : id1 E %f, id2 E %f\n ",amp1,amp2);
2561   if(amp1==0 || amp2==0) printf("Null E local maxima : id1 E %f, id2 E %f\n "        ,amp1,amp2);
2562   
2563   if(amp1>0)fhPi0CellEMaxEMax2Frac   [nlm]->Fill(energy,amp2/amp1);
2564   fhPi0CellEMaxClusterFrac [nlm]->Fill(energy,amp1/energy);
2565   fhPi0CellEMax2ClusterFrac[nlm]->Fill(energy,amp2/energy);
2566   
2567   //Get the ratio and log ratio to all cells in cluster
2568   for (Int_t ipos = 0; ipos < clus->GetNCells(); ipos++)
2569   {
2570     Int_t id       = clus->GetCellsAbsId()[ipos];
2571     
2572     //Recalibrate cell energy if needed
2573     Float_t amp = cells->GetCellAmplitude(id);
2574     GetCaloUtils()->RecalibrateCellAmplitude(amp,fCalorimeter, id);
2575     
2576     if(amp > 0)fhPi0CellE       [nlm]->Fill(energy,amp);
2577     fhPi0CellEFrac   [nlm]->Fill(energy,amp/energy);
2578     fhPi0CellLogEFrac[nlm]->Fill(energy,TMath::Log(amp/energy));
2579     
2580     if     (id!=absId1 && id!=absId2)
2581     {
2582       if(amp1>0)fhPi0CellEMaxFrac [nlm]->Fill(energy,amp/amp1);
2583       if(amp2>0)fhPi0CellEMax2Frac[nlm]->Fill(energy,amp/amp2);
2584     }
2585
2586   }
2587   
2588   //Recalculate shower shape for different W0
2589   if(fCalorimeter=="EMCAL")
2590   {
2591     Float_t l0org = clus->GetM02();
2592     Float_t l1org = clus->GetM20();
2593     Float_t dorg  = clus->GetDispersion();
2594     Float_t w0org =  GetCaloUtils()->GetEMCALRecoUtils()->GetW0();
2595     
2596     for(Int_t iw = 0; iw < fSSWeightN; iw++)
2597     {
2598       GetCaloUtils()->GetEMCALRecoUtils()->SetW0(fSSWeight[iw]);
2599       //GetCaloUtils()->GetEMCALRecoUtils()->RecalculateClusterShowerShapeParameters(GetEMCALGeometry(), cells, clus);
2600       
2601       Float_t l0   = 0., l1   = 0.;
2602       Float_t disp = 0., dEta = 0., dPhi    = 0.;
2603       Float_t sEta = 0., sPhi = 0., sEtaPhi = 0.;
2604       
2605       RecalculateClusterShowerShapeParametersWithCellCut(GetEMCALGeometry(), cells, clus,l0,l1,disp,
2606                                                          dEta, dPhi, sEta, sPhi, sEtaPhi,0);
2607
2608       
2609       fhM02WeightPi0[nlm][iw]->Fill(energy,clus->GetM02());
2610       
2611     } // w0 loop
2612     
2613     // Set the original values back
2614     clus->SetM02(l0org);
2615     clus->SetM20(l1org);
2616     clus->SetDispersion(dorg);
2617     GetCaloUtils()->GetEMCALRecoUtils()->SetW0(w0org);
2618
2619     for(Int_t iec = 0; iec < fSSECellCutN; iec++)
2620     {
2621       Float_t l0   = 0., l1   = 0.;
2622       Float_t disp = 0., dEta = 0., dPhi    = 0.;
2623       Float_t sEta = 0., sPhi = 0., sEtaPhi = 0.;
2624       
2625       RecalculateClusterShowerShapeParametersWithCellCut(GetEMCALGeometry(), cells, clus,l0,l1,disp,
2626                                                          dEta, dPhi, sEta, sPhi, sEtaPhi,fSSECellCut[iec]);
2627       
2628       //printf("E %f, l0 org %f, l0 new %f, slope %f\n",clus->E(),l0org,l0,fSSECellCut[iec]);
2629       fhM02ECellCutPi0[nlm][iec]->Fill(energy,l0);
2630       
2631     } // w0 loop
2632   
2633   }// EMCAL
2634 }
2635
2636 //________________________________________________________________________________________
2637 void  AliAnaInsideClusterInvariantMass::FillTrackMatchingHistograms(AliVCluster * cluster, const Int_t nMax,
2638                                                                     const Int_t mcindex)
2639 {
2640   // Fill histograms related to track matching
2641     
2642   Float_t dZ  = cluster->GetTrackDz();
2643   Float_t dR  = cluster->GetTrackDx();
2644   Float_t en  = cluster->E();
2645   
2646   if(cluster->IsEMCAL() && GetCaloUtils()->IsRecalculationOfClusterTrackMatchingOn())
2647   {
2648     dR = 2000., dZ = 2000.;
2649     GetCaloUtils()->GetEMCALRecoUtils()->GetMatchedResiduals(cluster->GetID(),dZ,dR);
2650   }
2651   
2652   //printf("Pi0EbE: dPhi %f, dEta %f\n",dR,dZ);
2653   
2654   if(TMath::Abs(dR) < 999)
2655   {
2656     if     ( nMax == 1  ) { fhTrackMatchedDEtaNLocMax1[0]->Fill(en,dZ); fhTrackMatchedDPhiNLocMax1[0]->Fill(en,dR); }
2657     else if( nMax == 2  ) { fhTrackMatchedDEtaNLocMax2[0]->Fill(en,dZ); fhTrackMatchedDPhiNLocMax2[0]->Fill(en,dR); }
2658     else if( nMax >= 3  ) { fhTrackMatchedDEtaNLocMaxN[0]->Fill(en,dZ); fhTrackMatchedDPhiNLocMaxN[0]->Fill(en,dR); }
2659     
2660     if(IsDataMC() && mcindex > 0 && mcindex < 7)
2661     {
2662       if     ( nMax == 1  ) { fhTrackMatchedDEtaNLocMax1[mcindex]->Fill(en,dZ); fhTrackMatchedDPhiNLocMax1[mcindex]->Fill(en,dR); }
2663       else if( nMax == 2  ) { fhTrackMatchedDEtaNLocMax2[mcindex]->Fill(en,dZ); fhTrackMatchedDPhiNLocMax2[mcindex]->Fill(en,dR); }
2664       else if( nMax >= 3  ) { fhTrackMatchedDEtaNLocMaxN[mcindex]->Fill(en,dZ); fhTrackMatchedDPhiNLocMaxN[mcindex]->Fill(en,dR); }
2665     }
2666     
2667     AliVTrack *track = GetCaloUtils()->GetMatchedTrack(cluster, GetReader()->GetInputEvent());
2668     
2669     Bool_t positive = kFALSE;
2670     if(track) positive = (track->Charge()>0);
2671
2672     if(track)
2673     {
2674       if(positive)
2675       {
2676         if     ( nMax == 1  ) { fhTrackMatchedDEtaNLocMax1Pos[0]->Fill(en,dZ); fhTrackMatchedDPhiNLocMax1Pos[0]->Fill(en,dR); }
2677         else if( nMax == 2  ) { fhTrackMatchedDEtaNLocMax2Pos[0]->Fill(en,dZ); fhTrackMatchedDPhiNLocMax2Pos[0]->Fill(en,dR); }
2678         else if( nMax >= 3  ) { fhTrackMatchedDEtaNLocMaxNPos[0]->Fill(en,dZ); fhTrackMatchedDPhiNLocMaxNPos[0]->Fill(en,dR); }
2679         
2680         if(IsDataMC() && mcindex > 0 && mcindex < 7)
2681         {
2682           if     ( nMax == 1  ) { fhTrackMatchedDEtaNLocMax1Pos[mcindex]->Fill(en,dZ); fhTrackMatchedDPhiNLocMax1Pos[mcindex]->Fill(en,dR); }
2683           else if( nMax == 2  ) { fhTrackMatchedDEtaNLocMax2Pos[mcindex]->Fill(en,dZ); fhTrackMatchedDPhiNLocMax2Pos[mcindex]->Fill(en,dR); }
2684           else if( nMax >= 3  ) { fhTrackMatchedDEtaNLocMaxNPos[mcindex]->Fill(en,dZ); fhTrackMatchedDPhiNLocMaxNPos[mcindex]->Fill(en,dR); }
2685         }
2686       }
2687       else
2688       {
2689         if     ( nMax == 1  ) { fhTrackMatchedDEtaNLocMax1Neg[0]->Fill(en,dZ); fhTrackMatchedDPhiNLocMax1Neg[0]->Fill(en,dR); }
2690         else if( nMax == 2  ) { fhTrackMatchedDEtaNLocMax2Neg[0]->Fill(en,dZ); fhTrackMatchedDPhiNLocMax2Neg[0]->Fill(en,dR); }
2691         else if( nMax >= 3  ) { fhTrackMatchedDEtaNLocMaxNNeg[0]->Fill(en,dZ); fhTrackMatchedDPhiNLocMaxNNeg[0]->Fill(en,dR); }
2692         
2693         if(IsDataMC() && mcindex > 0 && mcindex < 7)
2694         {
2695           if     ( nMax == 1  ) { fhTrackMatchedDEtaNLocMax1Neg[mcindex]->Fill(en,dZ); fhTrackMatchedDPhiNLocMax1Neg[mcindex]->Fill(en,dR); }
2696           else if( nMax == 2  ) { fhTrackMatchedDEtaNLocMax2Neg[mcindex]->Fill(en,dZ); fhTrackMatchedDPhiNLocMax2Neg[mcindex]->Fill(en,dR); }
2697           else if( nMax >= 3  ) { fhTrackMatchedDEtaNLocMaxNNeg[mcindex]->Fill(en,dZ); fhTrackMatchedDPhiNLocMaxNNeg[mcindex]->Fill(en,dR); }
2698         }
2699       }
2700       
2701     }// track exists
2702     
2703   }
2704 }
2705
2706 //_______________________________________________________________
2707 TObjString *  AliAnaInsideClusterInvariantMass::GetAnalysisCuts()
2708 {       
2709         //Save parameters used for analysis
2710   TString parList ; //this will be list of parameters used for this analysis.
2711   const Int_t buffersize = 255;
2712   char onePar[buffersize] ;
2713   
2714   snprintf(onePar,buffersize,"--- AliAnaInsideClusterInvariantMass ---\n") ;
2715   parList+=onePar ;     
2716   
2717   snprintf(onePar,buffersize,"Calorimeter: %s\n",        fCalorimeter.Data()) ;
2718   parList+=onePar ;
2719   snprintf(onePar,buffersize,"fNLocMaxCutE =%2.2f \n",    GetCaloUtils()->GetLocalMaximaCutE()) ;
2720   parList+=onePar ;
2721   snprintf(onePar,buffersize,"fNLocMaxCutEDiff =%2.2f \n",GetCaloUtils()->GetLocalMaximaCutEDiff()) ;
2722   parList+=onePar ;
2723   snprintf(onePar,buffersize,"fMinNCells =%d \n",        fMinNCells) ;
2724   parList+=onePar ;    
2725   snprintf(onePar,buffersize,"fMinBadDist =%1.1f \n",    fMinBadDist) ;
2726   parList+=onePar ;  
2727   if(fFillSSWeightHisto)
2728   {
2729     snprintf(onePar,buffersize," N w %d - N e cut %d \n",fSSWeightN,fSSECellCutN);
2730     parList+=onePar ;
2731   }
2732   
2733   return new TObjString(parList) ;
2734   
2735 }
2736
2737 //________________________________________________________________
2738 TList * AliAnaInsideClusterInvariantMass::GetCreateOutputObjects()
2739 {
2740   // Create histograms to be saved in output file and 
2741   // store them in outputContainer
2742   TList * outputContainer = new TList() ; 
2743   outputContainer->SetName("InsideClusterHistos") ;
2744   
2745   Int_t nptbins  = GetHistogramRanges()->GetHistoPtBins();           Float_t ptmax  = GetHistogramRanges()->GetHistoPtMax();           Float_t ptmin  = GetHistogramRanges()->GetHistoPtMin();
2746   Int_t ssbins   = GetHistogramRanges()->GetHistoShowerShapeBins();  Float_t ssmax  = GetHistogramRanges()->GetHistoShowerShapeMax();  Float_t ssmin  = GetHistogramRanges()->GetHistoShowerShapeMin();
2747   Int_t mbins    = GetHistogramRanges()->GetHistoMassBins();         Float_t mmax   = GetHistogramRanges()->GetHistoMassMax();         Float_t mmin   = GetHistogramRanges()->GetHistoMassMin();
2748   Int_t ncbins   = GetHistogramRanges()->GetHistoNClusterCellBins(); Int_t   ncmax  = GetHistogramRanges()->GetHistoNClusterCellMax(); Int_t   ncmin  = GetHistogramRanges()->GetHistoNClusterCellMin(); 
2749   Int_t nphibins = GetHistogramRanges()->GetHistoPhiBins();          Float_t phimax = GetHistogramRanges()->GetHistoPhiMax();          Float_t phimin = GetHistogramRanges()->GetHistoPhiMin();
2750   Int_t netabins = GetHistogramRanges()->GetHistoEtaBins();          Float_t etamax = GetHistogramRanges()->GetHistoEtaMax();          Float_t etamin = GetHistogramRanges()->GetHistoEtaMin();
2751   
2752   Int_t   nresetabins = GetHistogramRanges()->GetHistoTrackResidualEtaBins();          
2753   Float_t resetamax   = GetHistogramRanges()->GetHistoTrackResidualEtaMax();          
2754   Float_t resetamin   = GetHistogramRanges()->GetHistoTrackResidualEtaMin();
2755   Int_t   nresphibins = GetHistogramRanges()->GetHistoTrackResidualPhiBins();          
2756   Float_t resphimax   = GetHistogramRanges()->GetHistoTrackResidualPhiMax();          
2757   Float_t resphimin   = GetHistogramRanges()->GetHistoTrackResidualPhiMin();  
2758   
2759   Bool_t m02On   = GetCaloPID()->IsSplitShowerShapeCutOn();
2760   Bool_t asyOn   = GetCaloPID()->IsSplitAsymmetryCutOn();
2761   Bool_t splitOn = kFALSE;
2762   if(GetCaloPID()->GetSplitEnergyFractionMinimum(0) > 0 ||
2763      GetCaloPID()->GetSplitEnergyFractionMinimum(1) > 0 ||
2764      GetCaloPID()->GetSplitEnergyFractionMinimum(2) > 0) splitOn = kTRUE;
2765   
2766   TString ptype[] ={"","#gamma","#gamma->e^{#pm}","#pi^{0}","#pi^{0} (#gamma->e^{#pm})","#eta", "hadron"};
2767   TString pname[] ={"","Photon","Conversion",     "Pi0",    "Pi0Conv",                  "Eta","Hadron"};
2768   TString snlm [] = {"1","2","N"};
2769
2770   TString sEBin[] = {"8 < E < 12 GeV","12 < E < 16 GeV", "16 < E < 20 GeV", "E > 20 GeV" };
2771
2772   Int_t n = 1;
2773   
2774   if(IsDataMC()) n = 7;
2775   
2776   Int_t nMaxBins = 10;
2777   
2778   TString sMatched[] = {"","Matched"};
2779   
2780   Int_t nMatched = 2;
2781   if(!fFillTMHisto) nMatched = 1;
2782   
2783   if(fCheckSplitDistToBad)
2784   {
2785     for(Int_t inlm = 0; inlm < 3; inlm++)
2786     {
2787       fhMassBadDistClose[inlm]  = new TH2F(Form("hMassBadDistCloseNLocMax%s",snlm[inlm].Data()),
2788                                            Form("Invariant mass of splitted cluster with NLM=%d vs E, 2nd LM close to bad channel",inlm),
2789                                            nptbins,ptmin,ptmax,mbins,mmin,mmax);
2790       fhMassBadDistClose[inlm]->SetYTitle("M (GeV/c^{2})");
2791       fhMassBadDistClose[inlm]->SetXTitle("E (GeV)");
2792       outputContainer->Add(fhMassBadDistClose[inlm]) ;
2793       
2794       fhM02BadDistClose[inlm]  = new TH2F(Form("hM02BadDistCloseNLocMax%s",snlm[inlm].Data()),
2795                                           Form("#lambda_{0}^{2} for cluster with NLM=%d vs E, 2nd LM close to bad channel",inlm),
2796                                           nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2797       fhM02BadDistClose[inlm]->SetYTitle("#lambda_{0}^{2}");
2798       fhM02BadDistClose[inlm]->SetXTitle("E (GeV)");
2799       outputContainer->Add(fhM02BadDistClose[inlm]) ;
2800       
2801       fhMassOnBorder[inlm]  = new TH2F(Form("hMassOnBorderNLocMax%s",snlm[inlm].Data()),
2802                                        Form("Invariant mass of splitted cluster with NLM=%d vs E, 2nd LM close to border",inlm),
2803                                        nptbins,ptmin,ptmax,mbins,mmin,mmax);
2804       fhMassOnBorder[inlm]->SetYTitle("M (GeV/c^{2})");
2805       fhMassOnBorder[inlm]->SetXTitle("E (GeV)");
2806       outputContainer->Add(fhMassOnBorder[inlm]) ;
2807       
2808       fhM02OnBorder[inlm]  = new TH2F(Form("hM02OnBorderNLocMax%s",snlm[inlm].Data()),
2809                                       Form("#lambda_{0}^{2} for cluster with NLM=%d vs E, 2nd LM close to border",inlm),
2810                                       nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2811       fhM02OnBorder[inlm]->SetYTitle("#lambda_{0}^{2}");
2812       fhM02OnBorder[inlm]->SetXTitle("E (GeV)");
2813       outputContainer->Add(fhM02OnBorder[inlm]) ;
2814       
2815     }
2816   }
2817   
2818   for(Int_t i = 0; i < n; i++)
2819   {
2820     for(Int_t j = 0; j < nMatched; j++)
2821     {
2822       
2823       fhNLocMax[i][j]     = new TH2F(Form("hNLocMax%s%s",pname[i].Data(),sMatched[j].Data()),
2824                                      Form("Number of local maxima in cluster %s %s",ptype[i].Data(),sMatched[j].Data()),
2825                                      nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
2826       fhNLocMax[i][j]   ->SetYTitle("N maxima");
2827       fhNLocMax[i][j]   ->SetXTitle("E (GeV)");
2828       outputContainer->Add(fhNLocMax[i][j]) ;
2829
2830       fhLM1NLocMax[i][j]     = new TH2F(Form("hLM1NLocMax%s%s",pname[i].Data(),sMatched[j].Data()),
2831                                      Form("Number of local maxima in cluster for split cluster 1 %s %s",ptype[i].Data(),sMatched[j].Data()),
2832                                      nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
2833       fhLM1NLocMax[i][j]   ->SetYTitle("N maxima");
2834       fhLM1NLocMax[i][j]   ->SetXTitle("E (GeV)");
2835       outputContainer->Add(fhLM1NLocMax[i][j]) ;
2836
2837       fhLM2NLocMax[i][j]     = new TH2F(Form("hLM2NLocMax%s%s",pname[i].Data(),sMatched[j].Data()),
2838                                         Form("Number of local maxima in cluster for split cluster 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
2839                                         nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
2840       fhLM2NLocMax[i][j]   ->SetYTitle("N maxima");
2841       fhLM2NLocMax[i][j]   ->SetXTitle("E (GeV)");
2842       outputContainer->Add(fhLM2NLocMax[i][j]) ;
2843       
2844       if(m02On)
2845       {
2846         fhNLocMaxM02Cut[i][j] = new TH2F(Form("hNLocMaxM02Cut%s%s",pname[i].Data(),sMatched[j].Data()),
2847                                          Form("Number of local maxima in cluster %s %s, M02 cut",ptype[i].Data(),sMatched[j].Data()),
2848                                          nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
2849         fhNLocMaxM02Cut[i][j]->SetYTitle("N maxima");
2850         fhNLocMaxM02Cut[i][j]->SetXTitle("E (GeV)");
2851         outputContainer->Add(fhNLocMaxM02Cut[i][j]) ;
2852         
2853         fhLM1NLocMaxM02Cut[i][j]     = new TH2F(Form("hLM1NLocMaxM02Cut%s%s",pname[i].Data(),sMatched[j].Data()),
2854                                           Form("Number of local maxima in cluster for split cluster 1 %s %s, M02 cut",ptype[i].Data(),sMatched[j].Data()),
2855                                           nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
2856         fhLM1NLocMaxM02Cut[i][j]   ->SetYTitle("N maxima");
2857         fhLM1NLocMaxM02Cut[i][j]   ->SetXTitle("E (GeV)");
2858         outputContainer->Add(fhLM1NLocMaxM02Cut[i][j]) ;
2859         
2860         fhLM2NLocMaxM02Cut[i][j]     = new TH2F(Form("hLM2NLocMaxM02Cut%s%s",pname[i].Data(),sMatched[j].Data()),
2861                                           Form("Number of local maxima in cluster for split cluster 2 %s %s, M02 cut",ptype[i].Data(),sMatched[j].Data()),
2862                                           nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
2863         fhLM2NLocMaxM02Cut[i][j]   ->SetYTitle("N maxima");
2864         fhLM2NLocMaxM02Cut[i][j]   ->SetXTitle("E (GeV)");
2865         outputContainer->Add(fhLM2NLocMaxM02Cut[i][j]) ;
2866
2867       }
2868       
2869
2870       fhNLocMaxIdPi0[i][j]     = new TH2F(Form("hNLocMaxIdPi0%s%s",pname[i].Data(),sMatched[j].Data()),
2871                                      Form("Number of local maxima in pi0 ID cluster %s %s",ptype[i].Data(),sMatched[j].Data()),
2872                                      nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
2873       fhNLocMaxIdPi0[i][j]   ->SetYTitle("N maxima");
2874       fhNLocMaxIdPi0[i][j]   ->SetXTitle("E (GeV)");
2875       outputContainer->Add(fhNLocMaxIdPi0[i][j]) ;
2876
2877       
2878       fhLM1NLocMaxIdPi0[i][j]     = new TH2F(Form("hLM1NLocMaxIdPi0%s%s",pname[i].Data(),sMatched[j].Data()),
2879                                         Form("Number of local maxima in cluster for split cluster 1 %s %s",ptype[i].Data(),sMatched[j].Data()),
2880                                         nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
2881       fhLM1NLocMaxIdPi0[i][j]   ->SetYTitle("N maxima");
2882       fhLM1NLocMaxIdPi0[i][j]   ->SetXTitle("E (GeV)");
2883       outputContainer->Add(fhLM1NLocMaxIdPi0[i][j]) ;
2884       
2885       fhLM2NLocMaxIdPi0[i][j]     = new TH2F(Form("hLM2NLocMaxIdPi0%s%s",pname[i].Data(),sMatched[j].Data()),
2886                                         Form("Number of local maxima in cluster for split cluster 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
2887                                         nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
2888       fhLM2NLocMaxIdPi0[i][j]   ->SetYTitle("N maxima");
2889       fhLM2NLocMaxIdPi0[i][j]   ->SetXTitle("E (GeV)");
2890       outputContainer->Add(fhLM2NLocMaxIdPi0[i][j]) ;
2891       
2892
2893       
2894       
2895       fhSplitClusterENLocMax[i][j]     = new TH2F(Form("hSplitEClusterNLocMax%s%s",pname[i].Data(),sMatched[j].Data()),
2896                                                   Form("Number of local maxima vs E of split clusters %s %s",ptype[i].Data(),sMatched[j].Data()),
2897                                                   nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
2898       fhSplitClusterENLocMax[i][j]   ->SetYTitle("N maxima");
2899       fhSplitClusterENLocMax[i][j]   ->SetXTitle("E (GeV)");
2900       outputContainer->Add(fhSplitClusterENLocMax[i][j]) ;
2901       
2902       
2903       fhSplitClusterEPi0NLocMax[i][j]     = new TH2F(Form("hSplitEClusterPi0NLocMax%s%s",pname[i].Data(),sMatched[j].Data()),
2904                                                      Form("Number of local maxima vs E of split clusters, id as pi0, %s %s",ptype[i].Data(),sMatched[j].Data()),
2905                                                      nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
2906       fhSplitClusterEPi0NLocMax[i][j]   ->SetYTitle("N maxima");
2907       fhSplitClusterEPi0NLocMax[i][j]   ->SetXTitle("E (GeV)");
2908       outputContainer->Add(fhSplitClusterEPi0NLocMax[i][j]) ;
2909
2910       if(fFillNCellHisto)
2911       {
2912         fhNCellNLocMax1[i][j]  = new TH2F(Form("hNCellNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
2913                                           Form("n cells vs E for N max  = 1 %s %s",ptype[i].Data(),sMatched[j].Data()),
2914                                           nptbins,ptmin,ptmax,ncbins,ncmin,ncmax);
2915         fhNCellNLocMax1[i][j] ->SetYTitle("N cells");
2916         fhNCellNLocMax1[i][j] ->SetXTitle("E (GeV)");
2917         outputContainer->Add(fhNCellNLocMax1[i][j]) ;
2918         
2919         fhNCellNLocMax2[i][j]     = new TH2F(Form("hNCellNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
2920                                              Form("n cells vs E for N max  = 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
2921                                              nptbins,ptmin,ptmax,ncbins,ncmin,ncmax);
2922         fhNCellNLocMax2[i][j]   ->SetYTitle("N cells");
2923         fhNCellNLocMax2[i][j]   ->SetXTitle("E (GeV)");
2924         outputContainer->Add(fhNCellNLocMax2[i][j]) ;
2925         
2926         
2927         fhNCellNLocMaxN[i][j]     = new TH2F(Form("hNCellNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
2928                                              Form("n cells vs E for N max  > 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
2929                                              nptbins,ptmin,ptmax,ncbins,ncmin,ncmax);
2930         fhNCellNLocMaxN[i][j]   ->SetYTitle("N cells");
2931         fhNCellNLocMaxN[i][j]   ->SetXTitle("E (GeV)");
2932         outputContainer->Add(fhNCellNLocMaxN[i][j]) ;
2933       }
2934
2935       fhMassNLocMax1[i][j]  = new TH2F(Form("hMassNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
2936                                        Form("Invariant mass of splitted cluster with NLM=1 vs E, %s %s",ptype[i].Data(),sMatched[j].Data()),
2937                                        nptbins,ptmin,ptmax,mbins,mmin,mmax); 
2938       fhMassNLocMax1[i][j]->SetYTitle("M (GeV/c^{2})");
2939       fhMassNLocMax1[i][j]->SetXTitle("E (GeV)");
2940       outputContainer->Add(fhMassNLocMax1[i][j]) ;   
2941       
2942       fhMassNLocMax2[i][j]  = new TH2F(Form("hMassNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
2943                                        Form("Invariant mass of splitted cluster with NLM=2 vs E, %s %s",ptype[i].Data(),sMatched[j].Data()),
2944                                        nptbins,ptmin,ptmax,mbins,mmin,mmax); 
2945       fhMassNLocMax2[i][j]->SetYTitle("M (GeV/c^{2})");
2946       fhMassNLocMax2[i][j]->SetXTitle("E (GeV)");
2947       outputContainer->Add(fhMassNLocMax2[i][j]) ;   
2948       
2949       fhMassNLocMaxN[i][j]  = new TH2F(Form("hMassNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
2950                                        Form("Invariant mass of splitted cluster with NLM>2 vs E, %s %s",ptype[i].Data(),sMatched[j].Data()),
2951                                        nptbins,ptmin,ptmax,mbins,mmin,mmax); 
2952       fhMassNLocMaxN[i][j]->SetYTitle("M (GeV/c^{2})");
2953       fhMassNLocMaxN[i][j]->SetXTitle("E (GeV)");
2954       outputContainer->Add(fhMassNLocMaxN[i][j]) ;
2955       
2956       fhM02NLocMax1[i][j]     = new TH2F(Form("hM02NLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
2957                                          Form("#lambda_{0}^{2} vs E for N max  = 1 %s %s",ptype[i].Data(),sMatched[j].Data()),
2958                                          nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2959       fhM02NLocMax1[i][j]   ->SetYTitle("#lambda_{0}^{2}");
2960       fhM02NLocMax1[i][j]   ->SetXTitle("E (GeV)");
2961       outputContainer->Add(fhM02NLocMax1[i][j]) ;
2962       
2963       fhM02NLocMax2[i][j]     = new TH2F(Form("hM02NLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
2964                                          Form("#lambda_{0}^{2} vs E for N max  = 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
2965                                          nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2966       fhM02NLocMax2[i][j]   ->SetYTitle("#lambda_{0}^{2}");
2967       fhM02NLocMax2[i][j]   ->SetXTitle("E (GeV)");
2968       outputContainer->Add(fhM02NLocMax2[i][j]) ;
2969       
2970       fhM02NLocMaxN[i][j]    = new TH2F(Form("hM02NLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
2971                                         Form("#lambda_{0}^{2} vs E for N max  > 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
2972                                         nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2973       fhM02NLocMaxN[i][j]   ->SetYTitle("#lambda_{0}^{2}");
2974       fhM02NLocMaxN[i][j]   ->SetXTitle("E (GeV)");
2975       outputContainer->Add(fhM02NLocMaxN[i][j]) ;
2976       
2977       fhAsymNLocMax1[i][j]  = new TH2F(Form("hAsymNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
2978                                        Form("Asymmetry of NLM=1  vs cluster Energy, %s %s",ptype[i].Data(),sMatched[j].Data()),
2979                                        nptbins,ptmin,ptmax,200,-1,1);
2980       fhAsymNLocMax1[i][j]->SetYTitle("(E_{1}-E_{2})/(E_{1}+E_{2})");
2981       fhAsymNLocMax1[i][j]->SetXTitle("E (GeV)");
2982       outputContainer->Add(fhAsymNLocMax1[i][j]) ;
2983       
2984       fhAsymNLocMax2[i][j]  = new TH2F(Form("hAsymNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
2985                                        Form("Asymmetry of NLM=2  vs cluster Energy, %s %s",ptype[i].Data(),sMatched[j].Data()),
2986                                        nptbins,ptmin,ptmax,200,-1,1);
2987       fhAsymNLocMax2[i][j]->SetYTitle("(E_{1}-E_{2})/(E_{1}+E_{2})");
2988       fhAsymNLocMax2[i][j]->SetXTitle("E (GeV)");
2989       outputContainer->Add(fhAsymNLocMax2[i][j]) ;
2990       
2991       fhAsymNLocMaxN[i][j]  = new TH2F(Form("hAsymNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
2992                                        Form("Asymmetry of NLM>2  vs cluster Energy, %s %s",ptype[i].Data(),sMatched[j].Data()),
2993                                        nptbins,ptmin,ptmax,200,-1,1);
2994       fhAsymNLocMaxN[i][j]->SetYTitle("(E_{1}-E_{2})/(E_{1}+E_{2})");
2995       fhAsymNLocMaxN[i][j]->SetXTitle("E (GeV)");
2996       outputContainer->Add(fhAsymNLocMaxN[i][j]) ;
2997       
2998       fhSplitEFractionNLocMax1[i][j]     = new TH2F(Form("hSplitEFractionNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
2999                                                     Form("(E1+E2)/E_{cluster} vs E_{cluster} for N max  = 1 %s %s",ptype[i].Data(),sMatched[j].Data()),
3000                                                     nptbins,ptmin,ptmax,120,0,1.2);
3001       fhSplitEFractionNLocMax1[i][j]   ->SetXTitle("E_{cluster} (GeV)");
3002       fhSplitEFractionNLocMax1[i][j]   ->SetYTitle("(E_{split1}+E_{split2})/E_{cluster}");
3003       outputContainer->Add(fhSplitEFractionNLocMax1[i][j]) ;
3004       
3005       fhSplitEFractionNLocMax2[i][j]     = new TH2F(Form("hSplitEFractionNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
3006                                                     Form("(E1+E2)/E_{cluster} vs E_{cluster} for N max  = 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
3007                                                     nptbins,ptmin,ptmax,120,0,1.2);
3008       fhSplitEFractionNLocMax2[i][j]   ->SetXTitle("E_{cluster} (GeV)");
3009       fhSplitEFractionNLocMax2[i][j]   ->SetYTitle("(E_{split1}+E_{split2})/E_{cluster}");
3010       outputContainer->Add(fhSplitEFractionNLocMax2[i][j]) ;
3011       
3012       fhSplitEFractionNLocMaxN[i][j]    = new TH2F(Form("hSplitEFractionNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
3013                                                    Form("(E1+E2)/E_{cluster} vs E_{cluster} for N max  > 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
3014                                                    nptbins,ptmin,ptmax,120,0,1.2);
3015       fhSplitEFractionNLocMaxN[i][j]   ->SetXTitle("E_{cluster} (GeV)");
3016       fhSplitEFractionNLocMaxN[i][j]   ->SetYTitle("(E_{split1}+E_{split2})/E_{cluster}");
3017       outputContainer->Add(fhSplitEFractionNLocMaxN[i][j]) ;
3018       
3019       if(i==0 && j==0 )
3020       {
3021         if(m02On)
3022         {
3023           fhMassM02CutNLocMax1  = new TH2F("hMassM02CutNLocMax1","Invariant mass of splitted cluster with NLM=1 vs E, M02 cut, no TM",
3024                                            nptbins,ptmin,ptmax,mbins,mmin,mmax);
3025           fhMassM02CutNLocMax1->SetYTitle("M (GeV/c^{2})");
3026           fhMassM02CutNLocMax1->SetXTitle("E (GeV)");
3027           outputContainer->Add(fhMassM02CutNLocMax1) ;
3028           
3029           fhMassM02CutNLocMax2  = new TH2F("hMassM02CutNLocMax2","Invariant mass of splitted cluster with NLM=2 vs E, M02 cut, no TM",
3030                                            nptbins,ptmin,ptmax,mbins,mmin,mmax);
3031           fhMassM02CutNLocMax2->SetYTitle("M (GeV/c^{2})");
3032           fhMassM02CutNLocMax2->SetXTitle("E (GeV)");
3033           outputContainer->Add(fhMassM02CutNLocMax2) ;
3034           
3035           fhMassM02CutNLocMaxN  = new TH2F("hMassM02CutNLocMaxN","Invariant mass of splitted cluster with NLM>2 vs E, M02 cut, no TM",
3036                                            nptbins,ptmin,ptmax,mbins,mmin,mmax);
3037           fhMassM02CutNLocMaxN->SetYTitle("M (GeV/c^{2})");
3038           fhMassM02CutNLocMaxN->SetXTitle("E (GeV)");
3039           outputContainer->Add(fhMassM02CutNLocMaxN) ;
3040           
3041           fhAsymM02CutNLocMax1  = new TH2F("hAsymM02CutNLocMax1","Asymmetry of NLM=1  vs cluster Energy, M02Cut, no TM", nptbins,ptmin,ptmax,200,-1,1);
3042           fhAsymM02CutNLocMax1->SetYTitle("(E_{1}-E_{2})/(E_{1}+E_{2})");
3043           fhAsymM02CutNLocMax1->SetXTitle("E (GeV)");
3044           outputContainer->Add(fhAsymM02CutNLocMax1) ;
3045           
3046           fhAsymM02CutNLocMax2  = new TH2F("hAsymM02CutNLocMax2","Asymmetry of NLM=2  vs cluster Energy, M02Cut, no TM", nptbins,ptmin,ptmax,200,-1,1);
3047           fhAsymM02CutNLocMax2->SetYTitle("(E_{1}-E_{2})/(E_{1}+E_{2})");
3048           fhAsymM02CutNLocMax2->SetXTitle("E (GeV)");
3049           outputContainer->Add(fhAsymM02CutNLocMax2) ;
3050           
3051           fhAsymM02CutNLocMaxN  = new TH2F("hAsymM02CutNLocMaxN","Asymmetry of NLM>2  vs cluster Energy, M02Cut, no TM", nptbins,ptmin,ptmax,200,-1,1);
3052           fhAsymM02CutNLocMaxN->SetYTitle("(E_{1}-E_{2})/(E_{1}+E_{2})");
3053           fhAsymM02CutNLocMaxN->SetXTitle("E (GeV)");
3054           outputContainer->Add(fhAsymM02CutNLocMaxN) ;
3055           if(splitOn)
3056           {
3057             fhMassSplitECutNLocMax1  = new TH2F("hMassSplitECutNLocMax1","Invariant mass of splitted cluster with NLM=1 vs E, (E1+E2)/E cut, M02 cut, no TM",
3058                                                 nptbins,ptmin,ptmax,mbins,mmin,mmax);
3059             fhMassSplitECutNLocMax1->SetYTitle("M (GeV/c^{2})");
3060             fhMassSplitECutNLocMax1->SetXTitle("E (GeV)");
3061             outputContainer->Add(fhMassSplitECutNLocMax1) ;
3062             
3063             fhMassSplitECutNLocMax2  = new TH2F("hMassSplitECutNLocMax2","Invariant mass of splitted cluster with NLM=2 vs E, (E1+E2)/E cut, M02 cut, no TM",
3064                                                 nptbins,ptmin,ptmax,mbins,mmin,mmax);
3065             fhMassSplitECutNLocMax2->SetYTitle("M (GeV/c^{2})");
3066             fhMassSplitECutNLocMax2->SetXTitle("E (GeV)");
3067             outputContainer->Add(fhMassSplitECutNLocMax2) ;
3068             
3069             fhMassSplitECutNLocMaxN  = new TH2F("hMassSplitECutNLocMaxN","Invariant mass of splitted cluster with NLM>2 vs E, (E1+E2)/E cut, M02 cut, no TM",
3070                                                 nptbins,ptmin,ptmax,mbins,mmin,mmax);
3071             fhMassSplitECutNLocMaxN->SetYTitle("M (GeV/c^{2})");
3072             fhMassSplitECutNLocMaxN->SetXTitle("E (GeV)");
3073             outputContainer->Add(fhMassSplitECutNLocMaxN) ;
3074           }
3075         }//m02on
3076         
3077         if(asyOn)
3078         {
3079           fhMassAsyCutNLocMax1  = new TH2F("hMassAsyCutNLocMax1","Invariant mass of splitted cluster with NLM=1 vs E, M02 cut, no TM",
3080                                            nptbins,ptmin,ptmax,mbins,mmin,mmax);
3081           fhMassAsyCutNLocMax1->SetYTitle("M (GeV/c^{2})");
3082           fhMassAsyCutNLocMax1->SetXTitle("E (GeV)");
3083           outputContainer->Add(fhMassAsyCutNLocMax1) ;
3084           
3085           fhMassAsyCutNLocMax2  = new TH2F("hMassAsyCutNLocMax2","Invariant mass of splitted cluster with NLM=2 vs E, M02 cut, no TM",
3086                                            nptbins,ptmin,ptmax,mbins,mmin,mmax);
3087           fhMassAsyCutNLocMax2->SetYTitle("M (GeV/c^{2})");
3088           fhMassAsyCutNLocMax2->SetXTitle("E (GeV)");
3089           outputContainer->Add(fhMassAsyCutNLocMax2) ;
3090           
3091           fhMassAsyCutNLocMaxN  = new TH2F("hMassAsyCutNLocMaxN","Invariant mass of splitted cluster with NLM>2 vs E, M02 cut, no TM",
3092                                            nptbins,ptmin,ptmax,mbins,mmin,mmax);
3093           fhMassAsyCutNLocMaxN->SetYTitle("M (GeV/c^{2})");
3094           fhMassAsyCutNLocMaxN->SetXTitle("E (GeV)");
3095           outputContainer->Add(fhMassAsyCutNLocMaxN) ;
3096           
3097           fhM02AsyCutNLocMax1  = new TH2F("hM02AsyCutNLocMax1","#lambda_{0}^{2} of NLM=1  vs cluster Energy, AsyCut, no TM",
3098                                           nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
3099           fhM02AsyCutNLocMax1->SetYTitle("#lambda_{0}^{2}");
3100           fhM02AsyCutNLocMax1->SetXTitle("E (GeV)");
3101           outputContainer->Add(fhM02AsyCutNLocMax1) ;
3102           
3103           fhM02AsyCutNLocMax2  = new TH2F("hM02AsyCutNLocMax2","#lambda_{0}^{2} of NLM=2  vs cluster Energy, AsyCut, no TM",
3104                                           nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
3105           fhM02AsyCutNLocMax2->SetYTitle("#lambda_{0}^{2}");
3106           fhM02AsyCutNLocMax2->SetXTitle("E (GeV)");
3107           outputContainer->Add(fhM02AsyCutNLocMax2) ;
3108           
3109           fhM02AsyCutNLocMaxN  = new TH2F("hM02AsyCutNLocMaxN","#lambda_{0}^{2} of NLM>2  vs cluster Energy, AsyCut, no TM",
3110                                           nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
3111           fhM02AsyCutNLocMaxN->SetYTitle("#lambda_{0}^{2}");
3112           fhM02AsyCutNLocMaxN->SetXTitle("E (GeV)");
3113           outputContainer->Add(fhM02AsyCutNLocMaxN) ;
3114       }
3115       }
3116       
3117       if(asyOn || m02On)
3118       {
3119         fhMassAfterCutsNLocMax1[i][j]     = new TH2F(Form("hMassAfterCutsNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
3120                                                      Form("Mass vs E, %s %s, for NLM = 1, M02 and asy cut",ptype[i].Data(),sMatched[j].Data()),
3121                                                      nptbins,ptmin,ptmax,mbins,mmin,mmax);
3122         fhMassAfterCutsNLocMax1[i][j]   ->SetYTitle("Mass (GeV/c^{2})");
3123         fhMassAfterCutsNLocMax1[i][j]   ->SetXTitle("E (GeV)");
3124         outputContainer->Add(fhMassAfterCutsNLocMax1[i][j]) ;
3125         
3126         fhMassAfterCutsNLocMax2[i][j]     = new TH2F(Form("hMassAfterCutsNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
3127                                                      Form("Mass vs E, %s %s, for NLM = 2, M02 and asy cut",ptype[i].Data(),sMatched[j].Data()),
3128                                                      nptbins,ptmin,ptmax,mbins,mmin,mmax);
3129         fhMassAfterCutsNLocMax2[i][j]   ->SetYTitle("Mass (GeV/c^{2})");
3130         fhMassAfterCutsNLocMax2[i][j]   ->SetXTitle("E (GeV)");
3131         outputContainer->Add(fhMassAfterCutsNLocMax2[i][j]) ;
3132         
3133         
3134         fhMassAfterCutsNLocMaxN[i][j]     = new TH2F(Form("hMassAfterCutsNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
3135                                                      Form("Mass vs E, %s %s, for NLM > 2, M02 and asy cut",ptype[i].Data(),sMatched[j].Data()),
3136                                                      nptbins,ptmin,ptmax,mbins,mmin,mmax);
3137         fhMassAfterCutsNLocMaxN[i][j]   ->SetYTitle("Mass (GeV/c^{2})");
3138         fhMassAfterCutsNLocMaxN[i][j]   ->SetXTitle("E (GeV)");
3139         outputContainer->Add(fhMassAfterCutsNLocMaxN[i][j]) ;
3140         
3141         fhSplitEFractionAfterCutsNLocMax1[i][j]     = new TH2F(Form("hSplitEFractionAfterCutsNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
3142                                                                Form("(E1+E2)/E_{cluster} vs E_{cluster} for N max  = 1, M02 and Asy cut on, %s %s",ptype[i].Data(),sMatched[j].Data()),
3143                                                                nptbins,ptmin,ptmax,120,0,1.2);
3144         fhSplitEFractionAfterCutsNLocMax1[i][j]   ->SetXTitle("E_{cluster} (GeV)");
3145         fhSplitEFractionAfterCutsNLocMax1[i][j]   ->SetYTitle("(E_{split1}+E_{split2})/E_{cluster}");
3146         outputContainer->Add(fhSplitEFractionAfterCutsNLocMax1[i][j]) ;
3147         
3148         fhSplitEFractionAfterCutsNLocMax2[i][j]     = new TH2F(Form("hSplitEFractionAfterCutsNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
3149                                                                Form("(E1+E2)/E_{cluster} vs E_{cluster} for N max  = 2, M02 and Asy cut on, %s %s",ptype[i].Data(),sMatched[j].Data()),
3150                                                                nptbins,ptmin,ptmax,120,0,1.2);
3151         fhSplitEFractionAfterCutsNLocMax2[i][j]   ->SetXTitle("E_{cluster} (GeV)");
3152         fhSplitEFractionAfterCutsNLocMax2[i][j]   ->SetYTitle("(E_{split1}+E_{split2})/E_{cluster}");
3153         outputContainer->Add(fhSplitEFractionAfterCutsNLocMax2[i][j]) ;
3154         
3155         fhSplitEFractionAfterCutsNLocMaxN[i][j]    = new TH2F(Form("hSplitEFractionAfterCutsNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
3156                                                               Form("(E1+E2)/E_{cluster} vs E_{cluster} for N max  > 2, M02 and Asy cut on, %s %s",ptype[i].Data(),sMatched[j].Data()),
3157                                                               nptbins,ptmin,ptmax,120,0,1.2);
3158         fhSplitEFractionAfterCutsNLocMaxN[i][j]   ->SetXTitle("E_{cluster} (GeV)");
3159         fhSplitEFractionAfterCutsNLocMaxN[i][j]   ->SetYTitle("(E_{split1}+E_{split2})/E_{cluster}");
3160         outputContainer->Add(fhSplitEFractionAfterCutsNLocMaxN[i][j]) ;
3161       }
3162       
3163       fhMassM02NLocMax1[i][j]  = new TH2F(Form("hMassM02NLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
3164                                           Form("Invariant mass of splitted cluster with NLM=1, #lambda_{0}^{2}, E > 12 GeV,%s %s",ptype[i].Data(),sMatched[j].Data()),
3165                                           ssbins,ssmin,ssmax,mbins,mmin,mmax); 
3166       fhMassM02NLocMax1[i][j]->SetYTitle("M (GeV/c^{2})");
3167       fhMassM02NLocMax1[i][j]->SetXTitle("#lambda_{0}^{2}");
3168       outputContainer->Add(fhMassM02NLocMax1[i][j]) ;   
3169       
3170       fhMassM02NLocMax2[i][j]  = new TH2F(Form("hMassM02NLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
3171                                           Form("Invariant mass of splitted cluster with NLM=2, #lambda_{0}^{2}, E > 12 GeV, %s %s",ptype[i].Data(),sMatched[j].Data()),
3172                                           ssbins,ssmin,ssmax,mbins,mmin,mmax); 
3173       fhMassM02NLocMax2[i][j]->SetYTitle("M (GeV/c^{2})");
3174       fhMassM02NLocMax2[i][j]->SetXTitle("#lambda_{0}^{2}");
3175       outputContainer->Add(fhMassM02NLocMax2[i][j]) ;   
3176       
3177       fhMassM02NLocMaxN[i][j]  = new TH2F(Form("hMassM02NLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
3178                                           Form("Invariant mass of splitted cluster with NLM>2, vs #lambda_{0}^{2}, %s %s",ptype[i].Data(),sMatched[j].Data()),
3179                                           ssbins,ssmin,ssmax,mbins,mmin,mmax); 
3180       fhMassM02NLocMaxN[i][j]->SetYTitle("M (GeV/c^{2})");
3181       fhMassM02NLocMaxN[i][j]->SetXTitle("#lambda_{0}^{2}");
3182       outputContainer->Add(fhMassM02NLocMaxN[i][j]) ;   
3183       
3184       if(fFillSSExtraHisto)
3185       {
3186         fhMassDispEtaNLocMax1[i][j]  = new TH2F(Form("hMassDispEtaNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
3187                                                 Form("Invariant mass of splitted cluster with NLM=1, #sigma_{#eta #eta}^{2}, E > 12 GeV,%s %s",ptype[i].Data(),sMatched[j].Data()),
3188                                                 ssbins,ssmin,ssmax,mbins,mmin,mmax); 
3189         fhMassDispEtaNLocMax1[i][j]->SetYTitle("M (GeV/c^{2})");
3190         fhMassDispEtaNLocMax1[i][j]->SetXTitle("#sigma_{#eta #eta}^{2}");
3191         outputContainer->Add(fhMassDispEtaNLocMax1[i][j]) ;   
3192         
3193         fhMassDispEtaNLocMax2[i][j]  = new TH2F(Form("hMassDispEtaNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
3194                                                 Form("Invariant mass of splitted cluster with NLM=2 #sigma_{#eta #eta}^{2}, E > 12 GeV, %s %s",ptype[i].Data(),sMatched[j].Data()),
3195                                                 ssbins,ssmin,ssmax,mbins,mmin,mmax); 
3196         fhMassDispEtaNLocMax2[i][j]->SetYTitle("M (GeV/c^{2})");
3197         fhMassDispEtaNLocMax2[i][j]->SetXTitle("#sigma_{#eta #eta}^{2}");
3198         outputContainer->Add(fhMassDispEtaNLocMax2[i][j]) ;   
3199         
3200         fhMassDispEtaNLocMaxN[i][j]  = new TH2F(Form("hMassDispEtaNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
3201                                                 Form("Invariant mass of splitted cluster with NLM>2, #sigma_{#eta #eta}^{2}, %s %s",ptype[i].Data(),sMatched[j].Data()),
3202                                                 ssbins,ssmin,ssmax,mbins,mmin,mmax); 
3203         fhMassDispEtaNLocMaxN[i][j]->SetYTitle("M (GeV/c^{2})");
3204         fhMassDispEtaNLocMaxN[i][j]->SetXTitle("#sigma_{#eta #eta}^{2}");
3205         outputContainer->Add(fhMassDispEtaNLocMaxN[i][j]) ;   
3206         
3207         fhMassDispPhiNLocMax1[i][j]  = new TH2F(Form("hMassDispPhiNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
3208                                                 Form("Invariant mass of 2 highest energy cells #sigma_{#phi #phi}^{2}, E > 12 GeV,%s %s",ptype[i].Data(),sMatched[j].Data()),
3209                                                 ssbins,ssmin,ssmax,mbins,mmin,mmax); 
3210         fhMassDispPhiNLocMax1[i][j]->SetYTitle("M (GeV/c^{2})");
3211         fhMassDispPhiNLocMax1[i][j]->SetXTitle("#sigma_{#phi #phi}^{2}");
3212         outputContainer->Add(fhMassDispPhiNLocMax1[i][j]) ;   
3213         
3214         fhMassDispPhiNLocMax2[i][j]  = new TH2F(Form("hMassDispPhiNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
3215                                                 Form("Invariant mass of 2 local maxima cells #sigma_{#phi #phi}^{2}, E > 12 GeV, %s %s",ptype[i].Data(),sMatched[j].Data()),
3216                                                 ssbins,ssmin,ssmax,mbins,mmin,mmax); 
3217         fhMassDispPhiNLocMax2[i][j]->SetYTitle("M (GeV/c^{2})");
3218         fhMassDispPhiNLocMax2[i][j]->SetXTitle("#sigma_{#phi #phi}^{2}");
3219         outputContainer->Add(fhMassDispPhiNLocMax2[i][j]) ;   
3220         
3221         fhMassDispPhiNLocMaxN[i][j]  = new TH2F(Form("hMassDispPhiNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
3222                                                 Form("Invariant mass of N>2 local maxima cells vs #sigma_{#phi #phi}^{2}, %s %s",ptype[i].Data(),sMatched[j].Data()),
3223                                                 ssbins,ssmin,ssmax,mbins,mmin,mmax); 
3224         fhMassDispPhiNLocMaxN[i][j]->SetYTitle("M (GeV/c^{2})");
3225         fhMassDispPhiNLocMaxN[i][j]->SetXTitle("#sigma_{#phi #phi}^{2}");
3226         outputContainer->Add(fhMassDispPhiNLocMaxN[i][j]) ;   
3227         
3228         fhMassDispAsyNLocMax1[i][j]  = new TH2F(Form("hMassDispAsyNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
3229                                                 Form("Invariant mass of 2 highest energy cells A = (#sigma_{#phi #phi}^{2} - #sigma_{#eta #eta}^{2}) / (#sigma_{#phi #phi}^{2} + #sigma_{#eta #eta}^{2}), E > 12 GeV,%s %s",ptype[i].Data(),sMatched[j].Data()),
3230                                                 200,-1,1,mbins,mmin,mmax); 
3231         fhMassDispAsyNLocMax1[i][j]->SetYTitle("M (GeV/c^{2})");
3232         fhMassDispAsyNLocMax1[i][j]->SetXTitle("A = (#sigma_{#phi #phi}^{2} - #sigma_{#eta #eta}^{2}) / (#sigma_{#phi #phi}^{2} + #sigma_{#eta #eta}^{2})");
3233         outputContainer->Add(fhMassDispAsyNLocMax1[i][j]) ;   
3234         
3235         fhMassDispAsyNLocMax2[i][j]  = new TH2F(Form("hMassDispAsyNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
3236                                                 Form("Invariant mass of 2 local maxima cells A = (#sigma_{#phi #phi}^{2} - #sigma_{#eta #eta}^{2}) / (#sigma_{#phi #phi}^{2} + #sigma_{#eta #eta}^{2}), E > 12 GeV, %s %s",ptype[i].Data(),sMatched[j].Data()),
3237                                                 200,-1,1,mbins,mmin,mmax); 
3238         fhMassDispAsyNLocMax2[i][j]->SetYTitle("M (GeV/c^{2})");
3239         fhMassDispAsyNLocMax2[i][j]->SetXTitle("A = (#sigma_{#phi #phi}^{2} - #sigma_{#eta #eta}^{2}) / (#sigma_{#phi #phi}^{2} + #sigma_{#eta #eta}^{2})");
3240         outputContainer->Add(fhMassDispAsyNLocMax2[i][j]) ;   
3241         
3242         fhMassDispAsyNLocMaxN[i][j]  = new TH2F(Form("hMassDispAsyNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
3243                                                 Form("Invariant mass of N>2 local maxima cells vsA = (#sigma_{#phi #phi}^{2} - #sigma_{#eta #eta}^{2}) / (#sigma_{#phi #phi}^{2} + #sigma_{#eta #eta}^{2}), %s %s",ptype[i].Data(),sMatched[j].Data()),
3244                                                 200,-1,1,mbins,mmin,mmax); 
3245         fhMassDispAsyNLocMaxN[i][j]->SetYTitle("M (GeV/c^{2})");
3246         fhMassDispAsyNLocMaxN[i][j]->SetXTitle("A = (#sigma_{#phi #phi}^{2} - #sigma_{#eta #eta}^{2}) / (#sigma_{#phi #phi}^{2} + #sigma_{#eta #eta}^{2})");
3247         outputContainer->Add(fhMassDispAsyNLocMaxN[i][j]) ;   
3248       }
3249       
3250       
3251       if(i > 0 && fFillMCHisto) // skip first entry in array, general case not filled
3252       {
3253         fhMCGenFracNLocMax1[i][j]     = new TH2F(Form("hMCGenFracNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
3254                                                  Form("#lambda_{0}^{2} vs E for N max  = 1 %s %s",ptype[i].Data(),sMatched[j].Data()),
3255                                                  nptbins,ptmin,ptmax,200,0,2); 
3256         fhMCGenFracNLocMax1[i][j]   ->SetYTitle("E_{gen} / E_{reco}");
3257         fhMCGenFracNLocMax1[i][j]   ->SetXTitle("E (GeV)");
3258         outputContainer->Add(fhMCGenFracNLocMax1[i][j]) ; 
3259         
3260         fhMCGenFracNLocMax2[i][j]     = new TH2F(Form("hMCGenFracNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
3261                                                  Form("#lambda_{0}^{2} vs E for N max  = 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
3262                                                  nptbins,ptmin,ptmax,200,0,2); 
3263         fhMCGenFracNLocMax2[i][j]   ->SetYTitle("E_{gen} / E_{reco}");
3264         fhMCGenFracNLocMax2[i][j]   ->SetXTitle("E (GeV)");
3265         outputContainer->Add(fhMCGenFracNLocMax2[i][j]) ; 
3266         
3267         fhMCGenFracNLocMaxN[i][j]    = new TH2F(Form("hMCGenFracNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
3268                                                 Form("#lambda_{0}^{2} vs E for N max  > 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
3269                                                 nptbins,ptmin,ptmax,200,0,2); 
3270         fhMCGenFracNLocMaxN[i][j]   ->SetYTitle("E_{gen} / E_{reco}");
3271         fhMCGenFracNLocMaxN[i][j]   ->SetXTitle("E (GeV)");
3272         outputContainer->Add(fhMCGenFracNLocMaxN[i][j]) ; 
3273         
3274         fhMCGenFracNLocMax1NoOverlap[i][j]     = new TH2F(Form("hMCGenFracNoOverlapNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
3275                                                           Form("#lambda_{0}^{2} vs E for N max  = 1 %s %s",ptype[i].Data(),sMatched[j].Data()),
3276                                                           nptbins,ptmin,ptmax,200,0,2);
3277         fhMCGenFracNLocMax1NoOverlap[i][j]   ->SetYTitle("E_{gen} / E_{reco}");
3278         fhMCGenFracNLocMax1NoOverlap[i][j]   ->SetXTitle("E (GeV)");
3279         outputContainer->Add(fhMCGenFracNLocMax1NoOverlap[i][j]) ;
3280         
3281         fhMCGenFracNLocMax2NoOverlap[i][j]     = new TH2F(Form("hMCGenFracNoOverlapNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
3282                                                           Form("#lambda_{0}^{2} vs E for N max  = 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
3283                                                           nptbins,ptmin,ptmax,200,0,2);
3284         fhMCGenFracNLocMax2NoOverlap[i][j]   ->SetYTitle("E_{gen} / E_{reco}");
3285         fhMCGenFracNLocMax2NoOverlap[i][j]   ->SetXTitle("E (GeV)");
3286         outputContainer->Add(fhMCGenFracNLocMax2NoOverlap[i][j]) ;
3287         
3288         fhMCGenFracNLocMaxNNoOverlap[i][j]    = new TH2F(Form("hMCGenFracNoOverlapNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
3289                                                          Form("#lambda_{0}^{2} vs E for N max  > 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
3290                                                          nptbins,ptmin,ptmax,200,0,2);
3291         fhMCGenFracNLocMaxNNoOverlap[i][j]   ->SetYTitle("E_{gen} / E_{reco}");
3292         fhMCGenFracNLocMaxNNoOverlap[i][j]   ->SetXTitle("E (GeV)");
3293         outputContainer->Add(fhMCGenFracNLocMaxNNoOverlap[i][j]) ;
3294         
3295         
3296         fhMCGenSplitEFracNLocMax1[i][j]     = new TH2F(Form("hMCGenSplitEFracNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
3297                                                        Form("E_{gen} / (E_{1 split}+E_{2 split}) vs E for N max  = 1 %s %s",ptype[i].Data(),sMatched[j].Data()),
3298                                                        nptbins,ptmin,ptmax,200,0,2); 
3299         fhMCGenSplitEFracNLocMax1[i][j]   ->SetYTitle("E_{gen} / (E_{1 split}+E_{2 split})");
3300         fhMCGenSplitEFracNLocMax1[i][j]   ->SetXTitle("E (GeV)");
3301         outputContainer->Add(fhMCGenSplitEFracNLocMax1[i][j]) ; 
3302         
3303         fhMCGenSplitEFracNLocMax2[i][j]     = new TH2F(Form("hMCGenSplitEFracNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
3304                                                        Form("E_{gen} / (E_{1 split}+E_{2 split}) vs E for N max  = 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
3305                                                        nptbins,ptmin,ptmax,200,0,2); 
3306         fhMCGenSplitEFracNLocMax2[i][j]   ->SetYTitle("E_{gen} / (E_{1 split}+E_{2 split})");
3307         fhMCGenSplitEFracNLocMax2[i][j]   ->SetXTitle("E (GeV)");
3308         outputContainer->Add(fhMCGenSplitEFracNLocMax2[i][j]) ; 
3309         
3310         fhMCGenSplitEFracNLocMaxN[i][j]    = new TH2F(Form("hMCGenSplitEFracNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
3311                                                       Form("E_{gen} / (E_{1 split}+E_{2 split}) vs E for N max  > 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
3312                                                       nptbins,ptmin,ptmax,200,0,2); 
3313         fhMCGenSplitEFracNLocMaxN[i][j]   ->SetYTitle("E_{gen} / (E_{1 split}+E_{2 split})");
3314         fhMCGenSplitEFracNLocMaxN[i][j]   ->SetXTitle("E (GeV)");
3315         outputContainer->Add(fhMCGenSplitEFracNLocMaxN[i][j]) ; 
3316         
3317         fhMCGenSplitEFracNLocMax1NoOverlap[i][j]     = new TH2F(Form("hMCGenSplitEFracNoOverlapNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
3318                                                                 Form("E_{gen} / (E_{1 split}+E_{2 split}) vs E for N max  = 1 %s %s",ptype[i].Data(),sMatched[j].Data()),
3319                                                                 nptbins,ptmin,ptmax,200,0,2);
3320         fhMCGenSplitEFracNLocMax1NoOverlap[i][j]   ->SetYTitle("E_{gen} / (E_{1 split}+E_{2 split})");
3321         fhMCGenSplitEFracNLocMax1NoOverlap[i][j]   ->SetXTitle("E (GeV)");
3322         outputContainer->Add(fhMCGenSplitEFracNLocMax1NoOverlap[i][j]) ;
3323         
3324         fhMCGenSplitEFracNLocMax2NoOverlap[i][j]     = new TH2F(Form("hMCGenSplitEFracNoOverlapNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
3325                                                                 Form("E_{gen} / (E_{1 split}+E_{2 split}) vs E for N max  = 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
3326                                                                 nptbins,ptmin,ptmax,200,0,2);
3327         fhMCGenSplitEFracNLocMax2NoOverlap[i][j]   ->SetYTitle("E_{gen} / (E_{1 split}+E_{2 split})");
3328         fhMCGenSplitEFracNLocMax2NoOverlap[i][j]   ->SetXTitle("E (GeV)");
3329         outputContainer->Add(fhMCGenSplitEFracNLocMax2NoOverlap[i][j]) ;
3330         
3331         fhMCGenSplitEFracNLocMaxNNoOverlap[i][j]    = new TH2F(Form("hMCGenSplitEFracNoOverlapNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
3332                                                                Form("E_{gen} / (E_{1 split}+E_{2 split}) vs E for N max  > 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
3333                                                                nptbins,ptmin,ptmax,200,0,2);
3334         fhMCGenSplitEFracNLocMaxNNoOverlap[i][j]   ->SetYTitle("E_{gen} / (E_{1 split}+E_{2 split})");
3335         fhMCGenSplitEFracNLocMaxNNoOverlap[i][j]   ->SetXTitle("E (GeV)");
3336         outputContainer->Add(fhMCGenSplitEFracNLocMaxNNoOverlap[i][j]) ;
3337         
3338         fhMCGenEFracvsSplitEFracNLocMax1[i][j]     = new TH2F(Form("hMCGenEFracvsSplitEFracNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
3339                                                               Form("(E_{1 split}+E_{2 split})/E_{reco} vs E_{gen} / E_{reco} for N max  = 1 %s %s",ptype[i].Data(),sMatched[j].Data()),
3340                                                               200,0,2,200,0,2); 
3341         fhMCGenEFracvsSplitEFracNLocMax1[i][j]   ->SetYTitle("(E_{1 split}+E_{2 split})/E_{reco}");
3342         fhMCGenEFracvsSplitEFracNLocMax1[i][j]   ->SetXTitle("E_{gen} / E_{reco}");
3343         outputContainer->Add(fhMCGenEFracvsSplitEFracNLocMax1[i][j]) ; 
3344         
3345         fhMCGenEFracvsSplitEFracNLocMax2[i][j]     = new TH2F(Form("hMCGenEFracvsSplitEFracNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
3346                                                               Form("(E_{1 split}+E_{2 split})/E_{reco} vs E_{gen} / E_{reco} for N max  = 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
3347                                                               200,0,2,200,0,2); 
3348         fhMCGenEFracvsSplitEFracNLocMax2[i][j]   ->SetYTitle("(E_{1 split}+E_{2 split})/E_{reco}");
3349         fhMCGenEFracvsSplitEFracNLocMax2[i][j]   ->SetXTitle("E_{gen} / E_{reco}");
3350         outputContainer->Add(fhMCGenEFracvsSplitEFracNLocMax2[i][j]) ; 
3351         
3352         
3353         fhMCGenEFracvsSplitEFracNLocMaxN[i][j]    = new TH2F(Form("hMCGenEFracvsSplitEFracNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
3354                                                              Form("(E_{1 split}+E_{2 split})/E_{reco} vs E_{gen} / E_{reco} for N max  > 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
3355                                                              200,0,2,200,0,2); 
3356         fhMCGenEFracvsSplitEFracNLocMaxN[i][j]   ->SetYTitle("(E_{1 split}+E_{2 split})/E_{reco}");
3357         fhMCGenEFracvsSplitEFracNLocMaxN[i][j]   ->SetXTitle("E_{gen} / E_{reco}");
3358         outputContainer->Add(fhMCGenEFracvsSplitEFracNLocMaxN[i][j]) ; 
3359         
3360         
3361         fhMCGenEvsSplitENLocMax1[i][j]     = new TH2F(Form("hMCGenEvsSplitENLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
3362                                                       Form("E_{1 split}+E_{2 split} vs E_{gen} for N max  = 1 %s %s",ptype[i].Data(),sMatched[j].Data()),
3363                                                       nptbins,ptmin,ptmax,nptbins,ptmin,ptmax); 
3364         fhMCGenEvsSplitENLocMax1[i][j]   ->SetYTitle("E_{1 split}+E_{2 split} (GeV)");
3365         fhMCGenEvsSplitENLocMax1[i][j]   ->SetXTitle("E_{gen} (GeV)");
3366         outputContainer->Add(fhMCGenEvsSplitENLocMax1[i][j]) ; 
3367         
3368         fhMCGenEvsSplitENLocMax2[i][j]     = new TH2F(Form("hMCGenEvsSplitENLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
3369                                                       Form("E_{1 split}+E_{2 split} vs E_{gen} for N max  = 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
3370                                                       nptbins,ptmin,ptmax,nptbins,ptmin,ptmax); 
3371         fhMCGenEvsSplitENLocMax2[i][j]   ->SetYTitle("E_{1 split}+E_{2 split} (GeV)");
3372         fhMCGenEvsSplitENLocMax2[i][j]   ->SetXTitle("E_{gen} (GeV)");
3373         outputContainer->Add(fhMCGenEvsSplitENLocMax2[i][j]) ; 
3374         
3375         
3376         fhMCGenEvsSplitENLocMaxN[i][j]    = new TH2F(Form("hMCGenEvsSplitENLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
3377                                                      Form("E_{1 split}+E_{2 split} vs E_{gen} for N max  > 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
3378                                                      nptbins,ptmin,ptmax,nptbins,ptmin,ptmax); 
3379         fhMCGenEvsSplitENLocMaxN[i][j]   ->SetYTitle("E_{1 split}+E_{2 split} (GeV)");
3380         fhMCGenEvsSplitENLocMaxN[i][j]   ->SetXTitle("E_{gen} (GeV)");
3381         outputContainer->Add(fhMCGenEvsSplitENLocMaxN[i][j]) ; 
3382       }
3383           
3384       // Histograms after cluster identification
3385       
3386       
3387       // Pi0 //
3388       
3389       fhM02Pi0NLocMax1[i][j]     = new TH2F(Form("hM02Pi0NLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
3390                                             Form("#lambda_{0}^{2} vs E, %s, for NLM = 1",ptype[i].Data()),
3391                                             nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
3392       fhM02Pi0NLocMax1[i][j]   ->SetYTitle("#lambda_{0}^{2}");
3393       fhM02Pi0NLocMax1[i][j]   ->SetXTitle("E (GeV)");
3394       outputContainer->Add(fhM02Pi0NLocMax1[i][j]) ;
3395       
3396       fhM02Pi0NLocMax2[i][j]     = new TH2F(Form("hM02Pi0NLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
3397                                             Form("#lambda_{0}^{2} vs E, %s, for NLM = 2",ptype[i].Data()),
3398                                             nptbins,ptmin,ptmax,ssbins,ssmin,ssmax); 
3399       fhM02Pi0NLocMax2[i][j]   ->SetYTitle("#lambda_{0}^{2}");
3400       fhM02Pi0NLocMax2[i][j]   ->SetXTitle("E (GeV)");
3401       outputContainer->Add(fhM02Pi0NLocMax2[i][j]) ; 
3402       
3403       fhM02Pi0NLocMaxN[i][j]     = new TH2F(Form("hM02Pi0NLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
3404                                             Form("#lambda_{0}^{2} vs E, %s, for NLM > 2",ptype[i].Data()),
3405                                             nptbins,ptmin,ptmax,ssbins,ssmin,ssmax); 
3406       fhM02Pi0NLocMaxN[i][j]   ->SetYTitle("#lambda_{0}^{2}");
3407       fhM02Pi0NLocMaxN[i][j]   ->SetXTitle("E (GeV)");
3408       outputContainer->Add(fhM02Pi0NLocMaxN[i][j]) ; 
3409       
3410       fhMassPi0NLocMax1[i][j]     = new TH2F(Form("hMassPi0NLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
3411                                              Form("Mass vs E, %s, for NLM = 1",ptype[i].Data()),
3412                                              nptbins,ptmin,ptmax,mbins,mmin,mmax); 
3413       fhMassPi0NLocMax1[i][j]   ->SetYTitle("Mass (GeV/c^{2})");
3414       fhMassPi0NLocMax1[i][j]   ->SetXTitle("E (GeV)");
3415       outputContainer->Add(fhMassPi0NLocMax1[i][j]) ; 
3416       
3417       fhMassPi0NLocMax2[i][j]     = new TH2F(Form("hMassPi0NLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
3418                                              Form("Mass vs E , %s, for NLM = 2",ptype[i].Data()),
3419                                              nptbins,ptmin,ptmax,mbins,mmin,mmax); 
3420       fhMassPi0NLocMax2[i][j]   ->SetYTitle("Mass (GeV/c^{2})");
3421       fhMassPi0NLocMax2[i][j]   ->SetXTitle("E (GeV)");
3422       outputContainer->Add(fhMassPi0NLocMax2[i][j]) ; 
3423       
3424       fhMassPi0NLocMaxN[i][j]     = new TH2F(Form("hMassPi0NLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
3425                                              Form("Mass vs E, %s, for NLM > 2",ptype[i].Data()),
3426                                              nptbins,ptmin,ptmax,mbins,mmin,mmax); 
3427       fhMassPi0NLocMaxN[i][j]   ->SetYTitle("Mass (GeV/c^{2})");
3428       fhMassPi0NLocMaxN[i][j]   ->SetXTitle("E (GeV)");
3429       outputContainer->Add(fhMassPi0NLocMaxN[i][j]) ; 
3430       
3431       fhAsyPi0NLocMax1[i][j]     = new TH2F(Form("hAsyPi0NLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
3432                                             Form("Asymmetry vs E, %s, for NLM = 1",ptype[i].Data()),
3433                                             nptbins,ptmin,ptmax,mbins,mmin,mmax); 
3434       fhAsyPi0NLocMax1[i][j]   ->SetYTitle("Asymmetry");
3435       fhAsyPi0NLocMax1[i][j]   ->SetXTitle("E (GeV)");
3436       outputContainer->Add(fhAsyPi0NLocMax1[i][j]) ; 
3437       
3438       fhAsyPi0NLocMax2[i][j]     = new TH2F(Form("hAsyPi0NLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
3439                                             Form("Asymmetry vs E, %s, for NLM = 2",ptype[i].Data()),
3440                                             nptbins,ptmin,ptmax,mbins,mmin,mmax); 
3441       fhAsyPi0NLocMax2[i][j]   ->SetYTitle("Asymmetry");
3442       fhAsyPi0NLocMax2[i][j]   ->SetXTitle("E (GeV)");
3443       outputContainer->Add(fhAsyPi0NLocMax2[i][j]) ; 
3444       
3445       fhAsyPi0NLocMaxN[i][j]     = new TH2F(Form("hAsyPi0NLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
3446                                             Form("Asymmetry vs E, %s, for NLM > 2",ptype[i].Data()),
3447                                             nptbins,ptmin,ptmax,mbins,mmin,mmax); 
3448       fhAsyPi0NLocMaxN[i][j]   ->SetYTitle("Asymmetry");
3449       fhAsyPi0NLocMaxN[i][j]   ->SetXTitle("E (GeV)");
3450       outputContainer->Add(fhAsyPi0NLocMaxN[i][j]) ; 
3451       
3452       if(fFillNCellHisto)
3453       {
3454         fhNCellPi0NLocMax1[i][j]     = new TH2F(Form("hNCellPi0NLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
3455                                                 Form("n cells vs E, %s, for NLM = 1",ptype[i].Data()),
3456                                                 nptbins,ptmin,ptmax,ncbins,ncmin,ncmax);
3457         fhNCellPi0NLocMax1[i][j]   ->SetYTitle("n cells");
3458         fhNCellPi0NLocMax1[i][j]   ->SetXTitle("E (GeV)");
3459         outputContainer->Add(fhNCellPi0NLocMax1[i][j]) ;
3460         
3461         fhNCellPi0NLocMax2[i][j]     = new TH2F(Form("hNCellPi0NLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
3462                                                 Form("n cells vs E, %s, for NLM = 2",ptype[i].Data()),
3463                                                 nptbins,ptmin,ptmax,ncbins,ncmin,ncmax);
3464         fhNCellPi0NLocMax2[i][j]   ->SetYTitle("n cells");
3465         fhNCellPi0NLocMax2[i][j]   ->SetXTitle("E (GeV)");
3466         outputContainer->Add(fhNCellPi0NLocMax2[i][j]) ;
3467         
3468         fhNCellPi0NLocMaxN[i][j]     = new TH2F(Form("hNCellPi0NLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
3469                                                 Form("n cells vs E, %s, for NLM > 2",ptype[i].Data()),
3470                                                 nptbins,ptmin,ptmax,ncbins,ncmin,ncmax);
3471         fhNCellPi0NLocMaxN[i][j]   ->SetYTitle("n cells");
3472         fhNCellPi0NLocMaxN[i][j]   ->SetXTitle("E (GeV)");
3473         outputContainer->Add(fhNCellPi0NLocMaxN[i][j]) ;
3474       }
3475       
3476       // Eta
3477     
3478       if(fFillIdEtaHisto)
3479       {
3480         fhM02EtaNLocMax1[i][j]     = new TH2F(Form("hM02EtaNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
3481                                               Form("#lambda_{0}^{2} vs E, %s, for NLM = 1",ptype[i].Data()),
3482                                               nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
3483         fhM02EtaNLocMax1[i][j]   ->SetYTitle("#lambda_{0}^{2}");
3484         fhM02EtaNLocMax1[i][j]   ->SetXTitle("E (GeV)");
3485         outputContainer->Add(fhM02EtaNLocMax1[i][j]) ;
3486         
3487         
3488         fhM02EtaNLocMax2[i][j]     = new TH2F(Form("hM02EtaNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
3489                                               Form("#lambda_{0}^{2} vs E, %s, for NLM = 2",ptype[i].Data()),
3490                                               nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
3491         fhM02EtaNLocMax2[i][j]   ->SetYTitle("#lambda_{0}^{2}");
3492         fhM02EtaNLocMax2[i][j]   ->SetXTitle("E (GeV)");
3493         outputContainer->Add(fhM02EtaNLocMax2[i][j]) ;
3494         
3495         fhM02EtaNLocMaxN[i][j]     = new TH2F(Form("hM02EtaNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
3496                                               Form("#lambda_{0}^{2} vs E, %s, for NLM > 2",ptype[i].Data()),
3497                                               nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
3498         fhM02EtaNLocMaxN[i][j]   ->SetYTitle("#lambda_{0}^{2}");
3499         fhM02EtaNLocMaxN[i][j]   ->SetXTitle("E (GeV)");
3500         outputContainer->Add(fhM02EtaNLocMaxN[i][j]) ;
3501         
3502         fhMassEtaNLocMax1[i][j]     = new TH2F(Form("hMassEtaNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
3503                                                Form("Mass vs E, %s, for NLM = 1",ptype[i].Data()),
3504                                                nptbins,ptmin,ptmax,mbins,mmin,mmax);
3505         fhMassEtaNLocMax1[i][j]   ->SetYTitle("Mass (GeV/c^{2})");
3506         fhMassEtaNLocMax1[i][j]   ->SetXTitle("E (GeV)");
3507         outputContainer->Add(fhMassEtaNLocMax1[i][j]) ;
3508         
3509         fhMassEtaNLocMax2[i][j]     = new TH2F(Form("hMassEtaNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
3510                                                Form("Mass vs E, %s, for NLM = 2",ptype[i].Data()),
3511                                                nptbins,ptmin,ptmax,mbins,mmin,mmax);
3512         fhMassEtaNLocMax2[i][j]   ->SetYTitle("Mass (GeV/c^{2})");
3513         fhMassEtaNLocMax2[i][j]   ->SetXTitle("E (GeV)");
3514         outputContainer->Add(fhMassEtaNLocMax2[i][j]) ;
3515         
3516         fhMassEtaNLocMaxN[i][j]     = new TH2F(Form("hMassEtaNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
3517                                                Form("Mass vs E, %s, for NLM > 2",ptype[i].Data()),
3518                                                nptbins,ptmin,ptmax,mbins,mmin,mmax);
3519         fhMassEtaNLocMaxN[i][j]   ->SetYTitle("Mass (GeV/c^{2})");
3520         fhMassEtaNLocMaxN[i][j]   ->SetXTitle("E (GeV)");
3521         outputContainer->Add(fhMassEtaNLocMaxN[i][j]) ;
3522         
3523         fhAsyEtaNLocMax1[i][j]     = new TH2F(Form("hAsyEtaNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
3524                                               Form("Asymmetry vs E, %s, for NLM = 1",ptype[i].Data()),
3525                                               nptbins,ptmin,ptmax,mbins,mmin,mmax);
3526         fhAsyEtaNLocMax1[i][j]   ->SetYTitle("Asymmetry");
3527         fhAsyEtaNLocMax1[i][j]   ->SetXTitle("E (GeV)");
3528         outputContainer->Add(fhAsyEtaNLocMax1[i][j]) ;
3529         
3530         fhAsyEtaNLocMax2[i][j]     = new TH2F(Form("hAsyEtaNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
3531                                               Form("Asymmetry vs E, %s, for NLM = 2",ptype[i].Data()),
3532                                               nptbins,ptmin,ptmax,mbins,mmin,mmax);
3533         fhAsyEtaNLocMax2[i][j]   ->SetYTitle("Asymmetry");
3534         fhAsyEtaNLocMax2[i][j]   ->SetXTitle("E (GeV)");
3535         outputContainer->Add(fhAsyEtaNLocMax2[i][j]) ;
3536         
3537         fhAsyEtaNLocMaxN[i][j]     = new TH2F(Form("hAsyEtaNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
3538                                               Form("Asymmetry vs E, %s, for NLM > 2",ptype[i].Data()),
3539                                               nptbins,ptmin,ptmax,mbins,mmin,mmax);
3540         fhAsyEtaNLocMaxN[i][j]   ->SetYTitle("Asymmetry");
3541         fhAsyEtaNLocMaxN[i][j]   ->SetXTitle("E (GeV)");
3542         outputContainer->Add(fhAsyEtaNLocMaxN[i][j]) ;
3543         
3544         if(fFillNCellHisto)
3545         {
3546           fhNCellEtaNLocMax1[i][j]     = new TH2F(Form("hNCellEtaNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
3547                                                   Form("n cells vs E, %s, for NLM = 1",ptype[i].Data()),
3548                                                   nptbins,ptmin,ptmax,ncbins,ncmin,ncmax);
3549           fhNCellEtaNLocMax1[i][j]   ->SetYTitle("n cells");
3550           fhNCellEtaNLocMax1[i][j]   ->SetXTitle("E (GeV)");
3551           outputContainer->Add(fhNCellEtaNLocMax1[i][j]) ;
3552           
3553           fhNCellEtaNLocMax2[i][j]     = new TH2F(Form("hNCellEtaNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
3554                                                   Form("n cells vs E, %s, for NLM = 2",ptype[i].Data()),
3555                                                   nptbins,ptmin,ptmax,ncbins,ncmin,ncmax);
3556           fhNCellEtaNLocMax2[i][j]   ->SetYTitle("n cells");
3557           fhNCellEtaNLocMax2[i][j]   ->SetXTitle("E (GeV)");
3558           outputContainer->Add(fhNCellEtaNLocMax2[i][j]) ;
3559           
3560           fhNCellEtaNLocMaxN[i][j]     = new TH2F(Form("hNCellEtaNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
3561                                                   Form("n cells vs E, %s, for NLM > 2",ptype[i].Data()),
3562                                                   nptbins,ptmin,ptmax,ncbins,ncmin,ncmax);
3563           fhNCellEtaNLocMaxN[i][j]   ->SetYTitle("n cells");
3564           fhNCellEtaNLocMaxN[i][j]   ->SetXTitle("E (GeV)");
3565           outputContainer->Add(fhNCellEtaNLocMaxN[i][j]) ;
3566           
3567         }
3568       }
3569       
3570       if(fFillIdConvHisto)
3571       {
3572         fhM02ConNLocMax1[i][j]    = new TH2F(Form("hM02ConNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
3573                                              Form("#lambda_{0}^{2} vs E, %s, for NLM = 1",ptype[i].Data()),
3574                                              nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
3575         fhM02ConNLocMax1[i][j]   ->SetYTitle("#lambda_{0}^{2}");
3576         fhM02ConNLocMax1[i][j]   ->SetXTitle("E (GeV)");
3577         outputContainer->Add(fhM02ConNLocMax1[i][j]) ;
3578         
3579         fhM02ConNLocMax2[i][j]    = new TH2F(Form("hM02ConNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
3580                                              Form("#lambda_{0}^{2} vs E, %s, for NLM = 2",ptype[i].Data()),
3581                                              nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
3582         fhM02ConNLocMax2[i][j]   ->SetYTitle("#lambda_{0}^{2}");
3583         fhM02ConNLocMax2[i][j]   ->SetXTitle("E (GeV)");
3584         outputContainer->Add(fhM02ConNLocMax2[i][j]) ;
3585         
3586         fhM02ConNLocMaxN[i][j]    = new TH2F(Form("hM02ConNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
3587                                              Form("#lambda_{0}^{2} vs E, %s, for NLM > 2",ptype[i].Data()),
3588                                              nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
3589         fhM02ConNLocMaxN[i][j]   ->SetYTitle("#lambda_{0}^{2}");
3590         fhM02ConNLocMaxN[i][j]   ->SetXTitle("E (GeV)");
3591         outputContainer->Add(fhM02ConNLocMaxN[i][j]) ;
3592         
3593         
3594         fhMassConNLocMax1[i][j]    = new TH2F(Form("hMassConNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
3595                                               Form("Mass vs E, %s, for NLM = 1",ptype[i].Data()),
3596                                               nptbins,ptmin,ptmax,mbins,mmin,mmax);
3597         fhMassConNLocMax1[i][j]   ->SetYTitle("Mass (GeV/c^{2})");
3598         fhMassConNLocMax1[i][j]   ->SetXTitle("E (GeV)");
3599         outputContainer->Add(fhMassConNLocMax1[i][j]) ;
3600         
3601         fhMassConNLocMax2[i][j]    = new TH2F(Form("hMassConNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
3602                                               Form("Mass vs E, %s, for NLM = 2",ptype[i].Data()),
3603                                               nptbins,ptmin,ptmax,mbins,mmin,mmax);
3604         fhMassConNLocMax2[i][j]   ->SetYTitle("Mass (GeV/c^{2})");
3605         fhMassConNLocMax2[i][j]   ->SetXTitle("E (GeV)");
3606         outputContainer->Add(fhMassConNLocMax2[i][j]) ;
3607         
3608         fhMassConNLocMaxN[i][j]    = new TH2F(Form("hMassConNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
3609                                               Form("Mass vs E, %s, for NLM > 2",ptype[i].Data()),
3610                                               nptbins,ptmin,ptmax,mbins,mmin,mmax);
3611         fhMassConNLocMaxN[i][j]   ->SetYTitle("Mass (GeV/c^{2})");
3612         fhMassConNLocMaxN[i][j]   ->SetXTitle("E (GeV)");
3613         outputContainer->Add(fhMassConNLocMaxN[i][j]) ;
3614         
3615         fhAsyConNLocMax1[i][j]    = new TH2F(Form("hAsyConNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
3616                                              Form("Asymmetry vs E, %s, for NLM = 1",ptype[i].Data()),
3617                                              nptbins,ptmin,ptmax,mbins,mmin,mmax);
3618         fhAsyConNLocMax1[i][j]   ->SetYTitle("Asymmetry");
3619         fhAsyConNLocMax1[i][j]   ->SetXTitle("E (GeV)");
3620         outputContainer->Add(fhAsyConNLocMax1[i][j]) ;
3621         
3622         fhAsyConNLocMax2[i][j]    = new TH2F(Form("hAsyConNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
3623                                              Form("Asymmetry vs E, %s, for NLM = 2",ptype[i].Data()),
3624                                              nptbins,ptmin,ptmax,mbins,mmin,mmax);
3625         fhAsyConNLocMax2[i][j]   ->SetYTitle("Asymmetry");
3626         fhAsyConNLocMax2[i][j]   ->SetXTitle("E (GeV)");
3627         outputContainer->Add(fhAsyConNLocMax2[i][j]) ;
3628         
3629         fhAsyConNLocMaxN[i][j]    = new TH2F(Form("hAsyConNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
3630                                              Form("Asymmetry vs E, %s, for NLM > 2",ptype[i].Data()),
3631                                              nptbins,ptmin,ptmax,mbins,mmin,mmax);
3632         fhAsyConNLocMaxN[i][j]   ->SetYTitle("Asymmetry");
3633         fhAsyConNLocMaxN[i][j]   ->SetXTitle("E (GeV)");
3634         outputContainer->Add(fhAsyConNLocMaxN[i][j]) ;
3635         
3636       }
3637       
3638     } // matched, not matched
3639     
3640     if(fFillEbinHisto)
3641     {
3642       for(Int_t j = 0; j < 4; j++)
3643       {
3644         
3645         fhMassSplitEFractionNLocMax1Ebin[i][j]  = new TH2F(Form("hMassSplitEFractionNLocMax1%sEbin%d",pname[i].Data(),j),
3646                                                            Form("Invariant mass of 2 highest energy cells vs (E1+E2)/Ecluster, %s, %s",ptype[i].Data(),sEBin[j].Data()),
3647                                                            120,0,1.2,mbins,mmin,mmax);
3648         fhMassSplitEFractionNLocMax1Ebin[i][j]->SetYTitle("M (GeV/c^{2})");
3649         fhMassSplitEFractionNLocMax1Ebin[i][j]->SetXTitle("(E_{split1}+E_{split2})/E_{cluster}");
3650         outputContainer->Add(fhMassSplitEFractionNLocMax1Ebin[i][j]) ;
3651         
3652         fhMassSplitEFractionNLocMax2Ebin[i][j]  = new TH2F(Form("hMassSplitEFractionNLocMax2%sEbin%d",pname[i].Data(),j),
3653                                                            Form("Invariant mass of 2 local maxima cells vs (E1+E2)/Ecluster, %s, %s",ptype[i].Data(),sEBin[j].Data()),
3654                                                            120,0,1.2,mbins,mmin,mmax);
3655         fhMassSplitEFractionNLocMax2Ebin[i][j]->SetYTitle("M (GeV/c^{2})");
3656         fhMassSplitEFractionNLocMax2Ebin[i][j]->SetXTitle("(E_{split1}+E_{split2})/E_{cluster}");
3657         outputContainer->Add(fhMassSplitEFractionNLocMax2Ebin[i][j]) ;
3658         
3659         fhMassSplitEFractionNLocMaxNEbin[i][j]  = new TH2F(Form("hMassSplitEFractionNLocMaxN%sEbin%d",pname[i].Data(),j),
3660                                                            Form("Invariant mass of N>2 local maxima cells vs (E1+E2)/Ecluster, %s, %s",ptype[i].Data(),sEBin[j].Data()),
3661                                                            120,0,1.2,mbins,mmin,mmax);
3662         fhMassSplitEFractionNLocMaxNEbin[i][j]->SetYTitle("M (GeV/c^{2})");
3663         fhMassSplitEFractionNLocMaxNEbin[i][j]->SetXTitle("(E_{split1}+E_{split2})/E_{cluster}");
3664         outputContainer->Add(fhMassSplitEFractionNLocMaxNEbin[i][j]) ;
3665         
3666         if(i>0 && fFillMCHisto) // skip first entry in array, general case not filled
3667         {
3668           fhMCGenFracNLocMaxEbin[i][j]  = new TH2F(Form("hMCGenFracNLocMax%sEbin%d",pname[i].Data(),j),
3669                                                    Form("NLM vs E, %s, %s",ptype[i].Data(),sEBin[j].Data()),
3670                                                    200,0,2,nMaxBins,0,nMaxBins);
3671           fhMCGenFracNLocMaxEbin[i][j]->SetYTitle("NLM");
3672           fhMCGenFracNLocMaxEbin[i][j]->SetXTitle("E_{gen} / E_{reco}");
3673           outputContainer->Add(fhMCGenFracNLocMaxEbin[i][j]) ;
3674           
3675           fhMCGenFracNLocMaxEbinMatched[i][j]  = new TH2F(Form("hMCGenFracNLocMax%sEbin%dMatched",pname[i].Data(),j),
3676                                                           Form("NLM vs E, %s, %s, matched to a track",ptype[i].Data(),sEBin[j].Data()),
3677                                                           200,0,2,nMaxBins,0,nMaxBins);
3678           fhMCGenFracNLocMaxEbinMatched[i][j]->SetYTitle("NLM");
3679           fhMCGenFracNLocMaxEbinMatched[i][j]->SetXTitle("E_{gen} / E_{reco}");
3680           outputContainer->Add(fhMCGenFracNLocMaxEbinMatched[i][j]) ;
3681           
3682           fhMassMCGenFracNLocMax1Ebin[i][j]  = new TH2F(Form("hMassMCGenFracNLocMax1%sEbin%d",pname[i].Data(),j),
3683                                                         Form("Invariant mass of 2 highest energy cells vs E, %s, %s",ptype[i].Data(),sEBin[j].Data()),
3684                                                         200,0,2,mbins,mmin,mmax);
3685           fhMassMCGenFracNLocMax1Ebin[i][j]->SetYTitle("M (GeV/c^{2})");
3686           fhMassMCGenFracNLocMax1Ebin[i][j]->SetXTitle("E_{gen} / E_{reco}");
3687           outputContainer->Add(fhMassMCGenFracNLocMax1Ebin[i][j]) ;
3688           
3689           fhMassMCGenFracNLocMax2Ebin[i][j]  = new TH2F(Form("hMassMCGenFracNLocMax2%sEbin%d",pname[i].Data(),j),
3690                                                         Form("Invariant mass of 2 local maxima cells vs E, %s, %s",ptype[i].Data(),sEBin[j].Data()),
3691                                                         200,0,2,mbins,mmin,mmax);
3692           fhMassMCGenFracNLocMax2Ebin[i][j]->SetYTitle("M (GeV/c^{2})");
3693           fhMassMCGenFracNLocMax2Ebin[i][j]->SetXTitle("E_{gen} / E_{reco}");
3694           outputContainer->Add(fhMassMCGenFracNLocMax2Ebin[i][j]) ;
3695           
3696           fhMassMCGenFracNLocMaxNEbin[i][j]  = new TH2F(Form("hMassMCGenFracNLocMaxN%sEbin%d",pname[i].Data(),j),
3697                                                         Form("Invariant mass of N>2 local maxima cells vs E, %s, %s",ptype[i].Data(),sEBin[j].Data()),
3698                                                         200,0,2,mbins,mmin,mmax);
3699           fhMassMCGenFracNLocMaxNEbin[i][j]->SetYTitle("M (GeV/c^{2})");
3700           fhMassMCGenFracNLocMaxNEbin[i][j]->SetXTitle("E_{gen} / E_{reco}");
3701           outputContainer->Add(fhMassMCGenFracNLocMaxNEbin[i][j]) ;
3702           
3703           fhM02MCGenFracNLocMax1Ebin[i][j]     = new TH2F(Form("hM02MCGenFracNLocMax1%sEbin%d",pname[i].Data(),j),
3704                                                           Form("#lambda_{0}^{2} vs E for N max  = 1 %s, %s",ptype[i].Data(),sEBin[j].Data()),
3705                                                           200,0,2,ssbins,ssmin,ssmax);
3706           fhM02MCGenFracNLocMax1Ebin[i][j]   ->SetYTitle("#lambda_{0}^{2}");
3707           fhM02MCGenFracNLocMax1Ebin[i][j]   ->SetXTitle("E_{gen} / E_{reco}");
3708           outputContainer->Add(fhM02MCGenFracNLocMax1Ebin[i][j]) ;
3709           
3710           fhM02MCGenFracNLocMax2Ebin[i][j]     = new TH2F(Form("hM02MCGenFracNLocMax2%sEbin%d",pname[i].Data(),j),
3711                                                           Form("#lambda_{0}^{2} vs E for N max  = 2 %s, %s",ptype[i].Data(),sEBin[j].Data()),
3712                                                           200,0,2,ssbins,ssmin,ssmax);
3713           fhM02MCGenFracNLocMax2Ebin[i][j]   ->SetYTitle("#lambda_{0}^{2}");
3714           fhM02MCGenFracNLocMax2Ebin[i][j]   ->SetXTitle("E_{gen} / E_{reco}");
3715           outputContainer->Add(fhM02MCGenFracNLocMax2Ebin[i][j]) ;
3716           
3717           fhM02MCGenFracNLocMaxNEbin[i][j]    = new TH2F(Form("hM02MCGenFracNLocMaxN%sEbin%d",pname[i].Data(),j),
3718                                                          Form("#lambda_{0}^{2} vs E for N max  > 2 %s, %s",ptype[i].Data(),sEBin[j].Data()),
3719                                                          200,0,2,ssbins,ssmin,ssmax);
3720           fhM02MCGenFracNLocMaxNEbin[i][j]   ->SetYTitle("#lambda_{0}^{2}");
3721           fhM02MCGenFracNLocMaxNEbin[i][j]   ->SetXTitle("E_{gen} / E_{reco}");
3722           outputContainer->Add(fhM02MCGenFracNLocMaxNEbin[i][j]) ;
3723         }
3724       }
3725     }
3726   } // MC particle list
3727   
3728   if(fFillHighMultHisto)
3729   {
3730     // E vs centrality
3731
3732     fhCentralityPi0NLocMax1  = new TH2F("hCentralityPi0NLocMax1",
3733                                         "E vs Centrality, selected pi0 cluster with NLM=1",
3734                                         nptbins,ptmin,ptmax,100,0,100);
3735     fhCentralityPi0NLocMax1->SetYTitle("Centrality");
3736     fhCentralityPi0NLocMax1->SetXTitle("E (GeV)");
3737     outputContainer->Add(fhCentralityPi0NLocMax1) ;
3738     
3739     fhCentralityPi0NLocMax2  = new TH2F("hCentralityPi0NLocMax2",
3740                                         "E vs Centrality, selected pi0 cluster with NLM=2",
3741                                         nptbins,ptmin,ptmax,100,0,100);
3742     fhCentralityPi0NLocMax2->SetYTitle("Centrality");
3743     fhCentralityPi0NLocMax2->SetXTitle("E (GeV)");
3744     outputContainer->Add(fhCentralityPi0NLocMax2) ;
3745     
3746     fhCentralityPi0NLocMaxN  = new TH2F("hCentralityPi0NLocMaxN",
3747                                         "E vs Centrality, selected pi0 cluster with NLM>1",
3748                                         nptbins,ptmin,ptmax,100,0,100);
3749     fhCentralityPi0NLocMaxN->SetYTitle("Centrality");
3750     fhCentralityPi0NLocMaxN->SetXTitle("E (GeV)");
3751     outputContainer->Add(fhCentralityPi0NLocMaxN) ;
3752     
3753     if(fFillIdEtaHisto)
3754     {
3755       fhCentralityEtaNLocMax1  = new TH2F("hCentralityEtaNLocMax1",
3756                                           "E vs Centrality, selected pi0 cluster with NLM=1",
3757                                           nptbins,ptmin,ptmax,100,0,100);
3758       fhCentralityEtaNLocMax1->SetYTitle("Centrality");
3759       fhCentralityEtaNLocMax1->SetXTitle("E (GeV)");
3760       outputContainer->Add(fhCentralityEtaNLocMax1) ;
3761       
3762       fhCentralityEtaNLocMax2  = new TH2F("hCentralityEtaNLocMax2",
3763                                           "E vs Centrality, selected pi0 cluster with NLM=2",
3764                                           nptbins,ptmin,ptmax,100,0,100);
3765       fhCentralityEtaNLocMax2->SetYTitle("Centrality");
3766       fhCentralityEtaNLocMax2->SetXTitle("E (GeV)");
3767       outputContainer->Add(fhCentralityEtaNLocMax2) ;
3768       
3769       fhCentralityEtaNLocMaxN  = new TH2F("hCentralityEtaNLocMaxN",
3770                                           "E vs Centrality, selected pi0 cluster with NLM>1",
3771                                           nptbins,ptmin,ptmax,100,0,100);
3772       fhCentralityEtaNLocMaxN->SetYTitle("Centrality");
3773       fhCentralityEtaNLocMaxN->SetXTitle("E (GeV)");
3774       outputContainer->Add(fhCentralityEtaNLocMaxN) ;
3775     }
3776     
3777     // E vs Event plane angle
3778     
3779     fhEventPlanePi0NLocMax1  = new TH2F("hEventPlanePi0NLocMax1","E vs Event Plane Angle, selected pi0 cluster with NLM=1",
3780                                         nptbins,ptmin,ptmax,100,0,TMath::Pi());
3781     fhEventPlanePi0NLocMax1->SetYTitle("Event Plane Angle (rad)");
3782     fhEventPlanePi0NLocMax1->SetXTitle("E (GeV)");
3783     outputContainer->Add(fhEventPlanePi0NLocMax1) ;
3784     
3785     fhEventPlanePi0NLocMax2  = new TH2F("hEventPlanePi0NLocMax2","E vs Event Plane Angle, selected pi0 cluster with NLM=2",
3786                                         nptbins,ptmin,ptmax,100,0,TMath::Pi());
3787     fhEventPlanePi0NLocMax2->SetYTitle("Event Plane Angle (rad)");
3788     fhEventPlanePi0NLocMax2->SetXTitle("E (GeV)");
3789     outputContainer->Add(fhEventPlanePi0NLocMax2) ;
3790     
3791     fhEventPlanePi0NLocMaxN  = new TH2F("hEventPlanePi0NLocMaxN","E vs Event Plane Angle, selected pi0 cluster with NLM>1",
3792                                         nptbins,ptmin,ptmax,100,0,TMath::Pi());
3793     fhEventPlanePi0NLocMaxN->SetYTitle("Event Plane Angle (rad)");
3794     fhEventPlanePi0NLocMaxN->SetXTitle("E (GeV)");
3795     outputContainer->Add(fhEventPlanePi0NLocMaxN) ;
3796     
3797     if(fFillIdEtaHisto)
3798     {
3799       fhEventPlaneEtaNLocMax1  = new TH2F("hEventPlaneEtaNLocMax1","E vs Event Plane Angle, selected pi0 cluster with NLM=1",
3800                                           nptbins,ptmin,ptmax,100,0,TMath::Pi());
3801       fhEventPlaneEtaNLocMax1->SetYTitle("Event Plane Angle (rad)");
3802       fhEventPlaneEtaNLocMax1->SetXTitle("E (GeV)");
3803       outputContainer->Add(fhEventPlaneEtaNLocMax1) ;
3804       
3805       fhEventPlaneEtaNLocMax2  = new TH2F("hEventPlaneEtaNLocMax2","E vs Event Plane Angle, selected pi0 cluster with NLM=2",
3806                                           nptbins,ptmin,ptmax,100,0,TMath::Pi());
3807       fhEventPlaneEtaNLocMax2->SetYTitle("Event Plane Angle (rad)");
3808       fhEventPlaneEtaNLocMax2->SetXTitle("E (GeV)");
3809       outputContainer->Add(fhEventPlaneEtaNLocMax2) ;
3810       
3811       fhEventPlaneEtaNLocMaxN  = new TH2F("hEventPlaneEtaNLocMaxN","E vs Event Plane Angle, selected pi0 cluster with NLM>1",
3812                                           nptbins,ptmin,ptmax,100,0,TMath::Pi());
3813       fhEventPlaneEtaNLocMaxN->SetYTitle("Event Plane Angle (rad)");
3814       fhEventPlaneEtaNLocMaxN->SetXTitle("E (GeV)");
3815       outputContainer->Add(fhEventPlaneEtaNLocMaxN) ;
3816     }
3817   }
3818   
3819   if(fFillEbinHisto)
3820   {
3821     for(Int_t i = 0; i < 4; i++)
3822     {
3823       fhMassM02NLocMax1Ebin[i]  = new TH2F(Form("hMassM02NLocMax1Ebin%d",i),
3824                                            Form("Invariant mass of split clusters vs #lambda_{0}^{2}, NLM=1, %s",sEBin[i].Data()),
3825                                            ssbins,ssmin,ssmax,mbins,mmin,mmax); 
3826       fhMassM02NLocMax1Ebin[i]->SetYTitle("M (GeV/c^{2})");
3827       fhMassM02NLocMax1Ebin[i]->SetXTitle("#lambda_{0}^{2}");
3828       outputContainer->Add(fhMassM02NLocMax1Ebin[i]) ;   
3829       
3830       fhMassM02NLocMax2Ebin[i]  = new TH2F(Form("hMassM02NLocMax2Ebin%d",i),
3831                                            Form("Invariant mass of split clusters vs #lambda_{0}^{2}, NLM=2, %s",sEBin[i].Data()),
3832                                            ssbins,ssmin,ssmax,mbins,mmin,mmax); 
3833       fhMassM02NLocMax2Ebin[i]->SetYTitle("M (GeV/c^{2})");
3834       fhMassM02NLocMax2Ebin[i]->SetXTitle("#lambda_{0}^{2}");
3835       outputContainer->Add(fhMassM02NLocMax2Ebin[i]) ;   
3836       
3837       fhMassM02NLocMaxNEbin[i]  = new TH2F(Form("hMassM02NLocMaxNEbin%d",i),
3838                                            Form("Invariant mass of split clusters vs vs #lambda_{0}^{2}, NLM>2, %s",sEBin[i].Data()),
3839                                            ssbins,ssmin,ssmax,mbins,mmin,mmax); 
3840       fhMassM02NLocMaxNEbin[i]->SetYTitle("M (GeV/c^{2})");
3841       fhMassM02NLocMaxNEbin[i]->SetXTitle("#lambda_{0}^{2}");
3842       outputContainer->Add(fhMassM02NLocMaxNEbin[i]) ; 
3843       
3844       
3845       fhMassAsyNLocMax1Ebin[i]  = new TH2F(Form("hMassAsyNLocMax1Ebin%d",i),
3846                                            Form("Invariant mass of split clusters vs split asymmetry, NLM=1, %s",sEBin[i].Data()),
3847                                            200,-1,1,mbins,mmin,mmax);
3848       fhMassAsyNLocMax1Ebin[i]->SetYTitle("M (GeV/c^{2})");
3849       fhMassAsyNLocMax1Ebin[i]->SetXTitle("asymmetry");
3850       outputContainer->Add(fhMassAsyNLocMax1Ebin[i]) ;
3851       
3852       fhMassAsyNLocMax2Ebin[i]  = new TH2F(Form("hMassAsyNLocMax2Ebin%d",i),
3853                                            Form("Invariant mass of split clusters vs split asymmetry, NLM=2, %s",sEBin[i].Data()),
3854                                            200,-1,1,mbins,mmin,mmax);
3855       fhMassAsyNLocMax2Ebin[i]->SetYTitle("M (GeV/c^{2})");
3856       fhMassAsyNLocMax2Ebin[i]->SetXTitle("asymmetry");
3857       outputContainer->Add(fhMassAsyNLocMax2Ebin[i]) ;
3858       
3859       fhMassAsyNLocMaxNEbin[i]  = new TH2F(Form("hMassAsyNLocMaxNEbin%d",i),
3860                                            Form("Invariant mass of split clusters vs split asymmetry, NLM>2, %s",sEBin[i].Data()),
3861                                            200,-1,1,mbins,mmin,mmax);
3862       fhMassAsyNLocMaxNEbin[i]->SetYTitle("M (GeV/c^{2})");
3863       fhMassAsyNLocMaxNEbin[i]->SetXTitle("asymmetry");
3864       outputContainer->Add(fhMassAsyNLocMaxNEbin[i]) ;
3865       
3866       
3867       if(IsDataMC() && fFillMCHisto)
3868       {
3869         fhMCAsymM02NLocMax1MCPi0Ebin[i]  = new TH2F(Form("hMCAsymM02NLocMax1MCPi0Ebin%d",i),
3870                                                     Form("Asymmetry of MC #pi^{0} vs #lambda_{0}^{2}, NLM=1, %s",sEBin[i].Data()),
3871                                                     ssbins,ssmin,ssmax,100,0,1);
3872         fhMCAsymM02NLocMax1MCPi0Ebin[i]->SetYTitle("Decay asymmetry");
3873         fhMCAsymM02NLocMax1MCPi0Ebin[i]->SetXTitle("#lambda_{0}^{2}");
3874         outputContainer->Add(fhMCAsymM02NLocMax1MCPi0Ebin[i]) ;
3875         
3876         fhMCAsymM02NLocMax2MCPi0Ebin[i]  = new TH2F(Form("hMCAsymM02NLocMax2MCPi0Ebin%d",i),
3877                                                     Form("Asymmetry of MC #pi^{0} vs #lambda_{0}^{2}, NLM=2, %s",sEBin[i].Data()),
3878                                                     ssbins,ssmin,ssmax,100,0,1);
3879         fhMCAsymM02NLocMax2MCPi0Ebin[i]->SetYTitle("Decay asymmetry");
3880         fhMCAsymM02NLocMax2MCPi0Ebin[i]->SetXTitle("#lambda_{0}^{2}");
3881         outputContainer->Add(fhMCAsymM02NLocMax2MCPi0Ebin[i]) ;
3882         
3883         fhMCAsymM02NLocMaxNMCPi0Ebin[i]  = new TH2F(Form("hMCAsymM02NLocMaxNMCPi0Ebin%d",i),
3884                                                     Form("Asymmetry of MC #pi^{0} vs #lambda_{0}^{2}, NLM>2, %s",sEBin[i].Data()),
3885                                                     ssbins,ssmin,ssmax,100,0,1);
3886         fhMCAsymM02NLocMaxNMCPi0Ebin[i]->SetYTitle("Decay asymmetry");
3887         fhMCAsymM02NLocMaxNMCPi0Ebin[i]->SetXTitle("#lambda_{0}^{2}");
3888         outputContainer->Add(fhMCAsymM02NLocMaxNMCPi0Ebin[i]) ;    
3889         
3890         
3891         fhAsyMCGenRecoNLocMax1EbinPi0[i]  = new TH2F(Form("hAsyMCGenRecoNLocMax1Ebin%dPi0",i),
3892                                                      Form("Generated vs reconstructed asymmetry of split clusters from pi0, NLM=1, %s",sEBin[i].Data()),
3893                                                      200,-1,1,200,-1,1);
3894         fhAsyMCGenRecoNLocMax1EbinPi0[i]->SetYTitle("M (GeV/c^{2})");
3895         fhAsyMCGenRecoNLocMax1EbinPi0[i]->SetXTitle("asymmetry");
3896         outputContainer->Add(fhAsyMCGenRecoNLocMax1EbinPi0[i]) ;
3897         
3898         fhAsyMCGenRecoNLocMax2EbinPi0[i]  = new TH2F(Form("hAsyMCGenRecoNLocMax2Ebin%dPi0",i),
3899                                                      Form("Generated vs reconstructed asymmetry of split clusters from pi0, NLM=2, %s",sEBin[i].Data()),
3900                                                      200,-1,1,200,-1,1);
3901         fhAsyMCGenRecoNLocMax2EbinPi0[i]->SetYTitle("M (GeV/c^{2})");
3902         fhAsyMCGenRecoNLocMax2EbinPi0[i]->SetXTitle("asymmetry");
3903         outputContainer->Add(fhAsyMCGenRecoNLocMax2EbinPi0[i]) ;
3904         
3905         fhAsyMCGenRecoNLocMaxNEbinPi0[i]  = new TH2F(Form("hAsyMCGenRecoNLocMaxNEbin%dPi0",i),
3906                                                      Form("Generated vs reconstructed asymmetry of split clusters from pi0, NLM>2, %s",sEBin[i].Data()),
3907                                                      200,-1,1,200,-1,1);
3908         fhAsyMCGenRecoNLocMaxNEbinPi0[i]->SetYTitle("M (GeV/c^{2})");
3909         fhAsyMCGenRecoNLocMaxNEbinPi0[i]->SetXTitle("asymmetry");
3910         outputContainer->Add(fhAsyMCGenRecoNLocMaxNEbinPi0[i]) ;
3911       }
3912       
3913       if(fFillSSExtraHisto)
3914       {
3915         fhMassDispEtaNLocMax1Ebin[i]  = new TH2F(Form("hMassDispEtaNLocMax1Ebin%d",i),
3916                                                  Form("Invariant mass of 2 highest energy cells #sigma_{#eta #eta}^{2}, %s",sEBin[i].Data()),
3917                                                  ssbins,ssmin,ssmax,mbins,mmin,mmax); 
3918         fhMassDispEtaNLocMax1Ebin[i]->SetYTitle("M (GeV/c^{2})");
3919         fhMassDispEtaNLocMax1Ebin[i]->SetXTitle("#sigma_{#eta #eta}^{2}");
3920         outputContainer->Add(fhMassDispEtaNLocMax1Ebin[i]) ;   
3921         
3922         fhMassDispEtaNLocMax2Ebin[i]  = new TH2F(Form("hMassDispEtaNLocMax2Ebin%d",i),
3923                                                  Form("Invariant mass of 2 local maxima cells #sigma_{#eta #eta}^{2}, %s",sEBin[i].Data()),
3924                                                  ssbins,ssmin,ssmax,mbins,mmin,mmax); 
3925         fhMassDispEtaNLocMax2Ebin[i]->SetYTitle("M (GeV/c^{2})");
3926         fhMassDispEtaNLocMax2Ebin[i]->SetXTitle("#sigma_{#eta #eta}^{2}");
3927         outputContainer->Add(fhMassDispEtaNLocMax2Ebin[i]) ;   
3928         
3929         fhMassDispEtaNLocMaxNEbin[i]  = new TH2F(Form("hMassDispEtaNLocMaxNEbin%d",i),
3930                                                  Form("Invariant mass of N>2 local maxima cells vs #sigma_{#eta #eta}^{2}, %s",sEBin[i].Data()),
3931                                                  ssbins,ssmin,ssmax,mbins,mmin,mmax); 
3932         fhMassDispEtaNLocMaxNEbin[i]->SetYTitle("M (GeV/c^{2})");
3933         fhMassDispEtaNLocMaxNEbin[i]->SetXTitle("#sigma_{#eta #eta}^{2}");
3934         outputContainer->Add(fhMassDispEtaNLocMaxNEbin[i]) ;   
3935         
3936         fhMassDispPhiNLocMax1Ebin[i]  = new TH2F(Form("hMassDispPhiNLocMax1Ebin%d",i),
3937                                                  Form("Invariant mass of 2 highest energy cells #sigma_{#phi #phi}^{2}, %s",sEBin[i].Data()),
3938                                                  ssbins,ssmin,ssmax,mbins,mmin,mmax); 
3939         fhMassDispPhiNLocMax1Ebin[i]->SetYTitle("M (GeV/c^{2})");
3940         fhMassDispPhiNLocMax1Ebin[i]->SetXTitle("#sigma_{#phi #phi}^{2}");
3941         outputContainer->Add(fhMassDispPhiNLocMax1Ebin[i]) ;   
3942         
3943         fhMassDispPhiNLocMax2Ebin[i]  = new TH2F(Form("hMassDispPhiNLocMax2Ebin%d",i),
3944                                                  Form("Invariant mass of 2 local maxima cells #sigma_{#phi #phi}^{2}, %s",sEBin[i].Data()),
3945                                                  ssbins,ssmin,ssmax,mbins,mmin,mmax); 
3946         fhMassDispPhiNLocMax2Ebin[i]->SetYTitle("M (GeV/c^{2})");
3947         fhMassDispPhiNLocMax2Ebin[i]->SetXTitle("#sigma_{#phi #phi}^{2}");
3948         outputContainer->Add(fhMassDispPhiNLocMax2Ebin[i]) ;   
3949         
3950         fhMassDispPhiNLocMaxNEbin[i]  = new TH2F(Form("hMassDispPhiNLocMaxNEbin%d",i),
3951                                                  Form("Invariant mass of N>2 local maxima cells vs #sigma_{#phi #phi}^{2}, %s",sEBin[i].Data()),
3952                                                  ssbins,ssmin,ssmax,mbins,mmin,mmax); 
3953         fhMassDispPhiNLocMaxNEbin[i]->SetYTitle("M (GeV/c^{2})");
3954         fhMassDispPhiNLocMaxNEbin[i]->SetXTitle("#sigma_{#phi #phi}^{2}");
3955         outputContainer->Add(fhMassDispPhiNLocMaxNEbin[i]) ;   
3956         
3957         fhMassDispAsyNLocMax1Ebin[i]  = new TH2F(Form("hMassDispAsyNLocMax1Ebin%d",i),
3958                                                  Form("Invariant mass of 2 highest energy cells A = (#sigma_{#phi #phi}^{2} - #sigma_{#eta #eta}^{2}) / (#sigma_{#phi #phi}^{2} + #sigma_{#eta #eta}^{2}), %s",sEBin[i].Data()),
3959                                                  200,-1,1,mbins,mmin,mmax); 
3960         fhMassDispAsyNLocMax1Ebin[i]->SetYTitle("M (GeV/c^{2})");
3961         fhMassDispAsyNLocMax1Ebin[i]->SetXTitle("A = (#sigma_{#phi #phi}^{2} - #sigma_{#eta #eta}^{2}) / (#sigma_{#phi #phi}^{2} + #sigma_{#eta #eta}^{2})");
3962         outputContainer->Add(fhMassDispAsyNLocMax1Ebin[i]) ;   
3963         
3964         fhMassDispAsyNLocMax2Ebin[i]  = new TH2F(Form("hMassDispAsyNLocMax2Ebin%d",i),
3965                                                  Form("Invariant mass of 2 local maxima cells A = (#sigma_{#phi #phi}^{2} - #sigma_{#eta #eta}^{2}) / (#sigma_{#phi #phi}^{2} + #sigma_{#eta #eta}^{2}), %s",sEBin[i].Data()),
3966                                                  200,-1,1,mbins,mmin,mmax); 
3967         fhMassDispAsyNLocMax2Ebin[i]->SetYTitle("M (GeV/c^{2})");
3968         fhMassDispAsyNLocMax2Ebin[i]->SetXTitle("A = (#sigma_{#phi #phi}^{2} - #sigma_{#eta #eta}^{2}) / (#sigma_{#phi #phi}^{2} + #sigma_{#eta #eta}^{2})");
3969         outputContainer->Add(fhMassDispAsyNLocMax2Ebin[i]) ;   
3970         
3971         fhMassDispAsyNLocMaxNEbin[i]  = new TH2F(Form("hMassDispAsyNLocMaxNEbin%d",i),
3972                                                  Form("Invariant mass of N>2 local maxima cells vs A = (#sigma_{#phi #phi}^{2} - #sigma_{#eta #eta}^{2}) / (#sigma_{#phi #phi}^{2} + #sigma_{#eta #eta}^{2}), %s",sEBin[i].Data()),
3973                                                  200,-1,1,mbins,mmin,mmax); 
3974         fhMassDispAsyNLocMaxNEbin[i]->SetYTitle("M (GeV/c^{2})");
3975         fhMassDispAsyNLocMaxNEbin[i]->SetXTitle("A = (#sigma_{#phi #phi}^{2} - #sigma_{#eta #eta}^{2}) / (#sigma_{#phi #phi}^{2} + #sigma_{#eta #eta}^{2})");
3976         outputContainer->Add(fhMassDispAsyNLocMaxNEbin[i]) ;   
3977       }
3978     }
3979   }
3980   
3981   if(IsDataMC() && fFillMCHisto && (asyOn || m02On))
3982   {
3983     fhMCGenSplitEFracAfterCutsNLocMax1MCPi0     = new TH2F("hMCGenSplitEFracAfterCutsNLocMax1MCPi0",
3984                                                            "E_{gen} / (E_{1 split}+E_{2 split}) vs E for N max  = 1 MC Pi0, after M02 and Asym cut",
3985                                                            nptbins,ptmin,ptmax,200,0,2);
3986     fhMCGenSplitEFracAfterCutsNLocMax1MCPi0   ->SetYTitle("E_{gen} / (E_{1 split}+E_{2 split})");
3987     fhMCGenSplitEFracAfterCutsNLocMax1MCPi0   ->SetXTitle("E (GeV)");
3988     outputContainer->Add(fhMCGenSplitEFracAfterCutsNLocMax1MCPi0) ;
3989     
3990     fhMCGenSplitEFracAfterCutsNLocMax2MCPi0    = new TH2F("hMCGenSplitEFracAfterCutsNLocMax2MCPi0",
3991                                                           "E_{gen} / (E_{1 split}+E_{2 split}) vs E for N max  = 2 MC Pi0, after M02 and Asym cut",
3992                                                           nptbins,ptmin,ptmax,200,0,2);
3993     fhMCGenSplitEFracAfterCutsNLocMax2MCPi0  ->SetYTitle("E_{gen} / (E_{1 split}+E_{2 split})");
3994     fhMCGenSplitEFracAfterCutsNLocMax2MCPi0  ->SetXTitle("E (GeV)");
3995     outputContainer->Add(fhMCGenSplitEFracAfterCutsNLocMax2MCPi0) ;
3996     
3997     
3998     fhMCGenSplitEFracAfterCutsNLocMaxNMCPi0    = new TH2F("hMCGenSplitEFracAfterCutsNLocMaxNMCPi0",
3999                                                           "E_{gen} / (E_{1 split}+E_{2 split}) vs E for N max  > 2 MC Pi0, after M02 and Asym cut",
4000                                                           nptbins,ptmin,ptmax,200,0,2);
4001     fhMCGenSplitEFracAfterCutsNLocMaxNMCPi0  ->SetYTitle("E_{gen} / (E_{1 split}+E_{2 split})");
4002     fhMCGenSplitEFracAfterCutsNLocMaxNMCPi0  ->SetXTitle("E (GeV)");
4003     outputContainer->Add(fhMCGenSplitEFracAfterCutsNLocMaxNMCPi0) ;
4004     
4005     fhMCGenFracAfterCutsNLocMax1MCPi0     = new TH2F("hMCGenFracAfterCutsNLocMax1MCPi0",
4006                                                      "E_{gen} / E_{reco} vs E_{reco} for N max  = 1 MC Pi0, after M02 and Asym cut",
4007                                                      nptbins,ptmin,ptmax,200,0,2);
4008     fhMCGenFracAfterCutsNLocMax1MCPi0   ->SetYTitle("E_{gen} / E_{reco}");
4009     fhMCGenFracAfterCutsNLocMax1MCPi0   ->SetXTitle("E (GeV)");
4010     outputContainer->Add(fhMCGenFracAfterCutsNLocMax1MCPi0) ;
4011     
4012     fhMCGenFracAfterCutsNLocMax2MCPi0    = new TH2F("hMCGenFracAfterCutsNLocMax2MCPi0",
4013                                                     " E_{gen} / E_{reco} vs E_{reco} for N max  = 2 MC Pi0, after M02 and Asym cut",
4014                                                     nptbins,ptmin,ptmax,200,0,2);
4015     fhMCGenFracAfterCutsNLocMax2MCPi0   ->SetYTitle("E_{gen} / E_{reco}");
4016     fhMCGenFracAfterCutsNLocMax2MCPi0   ->SetXTitle("E (GeV)");
4017     outputContainer->Add(fhMCGenFracAfterCutsNLocMax2MCPi0) ;
4018     
4019     
4020     fhMCGenFracAfterCutsNLocMaxNMCPi0   = new TH2F("hMCGenFracAfterCutsNLocMaxNMCPi0",
4021                                                    " E_{gen} / E_{reco}  vs E_{reco} for N max  > 2 MC Pi0, after M02 and Asym cut",
4022                                                    nptbins,ptmin,ptmax,200,0,2);
4023     fhMCGenFracAfterCutsNLocMaxNMCPi0   ->SetYTitle("E_{gen} / E_{reco}");
4024     fhMCGenFracAfterCutsNLocMaxNMCPi0   ->SetXTitle("E (GeV)");
4025     outputContainer->Add(fhMCGenFracAfterCutsNLocMaxNMCPi0) ;
4026     
4027   }
4028   
4029   if(fFillTMResidualHisto && fFillTMHisto)
4030   {
4031     for(Int_t i = 0; i < n; i++)
4032     {  
4033       
4034       fhTrackMatchedDEtaNLocMax1[i]  = new TH2F
4035       (Form("hTrackMatchedDEtaNLocMax1%s",pname[i].Data()),
4036        Form("d#eta of cluster-track vs cluster energy, 1 Local Maxima, %s",ptype[i].Data()),
4037        nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax); 
4038       fhTrackMatchedDEtaNLocMax1[i]->SetYTitle("d#eta");
4039       fhTrackMatchedDEtaNLocMax1[i]->SetXTitle("E_{cluster} (GeV)");
4040       
4041       fhTrackMatchedDPhiNLocMax1[i]  = new TH2F
4042       (Form("hTrackMatchedDPhiNLocMax1%s",pname[i].Data()),
4043        Form("d#phi of cluster-track vs cluster energy, 1 Local Maxima, %s",ptype[i].Data()),
4044        nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax); 
4045       fhTrackMatchedDPhiNLocMax1[i]->SetYTitle("d#phi (rad)");
4046       fhTrackMatchedDPhiNLocMax1[i]->SetXTitle("E_{cluster} (GeV)");
4047       
4048       outputContainer->Add(fhTrackMatchedDEtaNLocMax1[i]) ; 
4049       outputContainer->Add(fhTrackMatchedDPhiNLocMax1[i]) ;
4050       
4051       fhTrackMatchedDEtaNLocMax2[i]  = new TH2F
4052       (Form("hTrackMatchedDEtaNLocMax2%s",pname[i].Data()),
4053        Form("d#eta of cluster-track vs cluster energy, 2 Local Maxima, %s",ptype[i].Data()),
4054        nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax); 
4055       fhTrackMatchedDEtaNLocMax2[i]->SetYTitle("d#eta");
4056       fhTrackMatchedDEtaNLocMax2[i]->SetXTitle("E_{cluster} (GeV)");
4057       
4058       fhTrackMatchedDPhiNLocMax2[i]  = new TH2F
4059       (Form("hTrackMatchedDPhiNLocMax2%s",pname[i].Data()),
4060        Form("d#phi of cluster-track vs cluster energy, 2 Local Maxima, %s",ptype[i].Data()),
4061        nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax); 
4062       fhTrackMatchedDPhiNLocMax2[i]->SetYTitle("d#phi (rad)");
4063       fhTrackMatchedDPhiNLocMax2[i]->SetXTitle("E_{cluster} (GeV)");
4064       
4065       outputContainer->Add(fhTrackMatchedDEtaNLocMax2[i]) ; 
4066       outputContainer->Add(fhTrackMatchedDPhiNLocMax2[i]) ;
4067       
4068       fhTrackMatchedDEtaNLocMaxN[i]  = new TH2F
4069       (Form("hTrackMatchedDEtaNLocMaxN%s",pname[i].Data()),
4070        Form("d#eta of cluster-track vs cluster energy, N>2 Local Maxima, %s",ptype[i].Data()),
4071        nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax); 
4072       fhTrackMatchedDEtaNLocMaxN[i]->SetYTitle("d#eta");
4073       fhTrackMatchedDEtaNLocMaxN[i]->SetXTitle("E_{cluster} (GeV)");
4074       
4075       fhTrackMatchedDPhiNLocMaxN[i]  = new TH2F
4076       (Form("hTrackMatchedDPhiNLocMaxN%s",pname[i].Data()),
4077        Form("d#phi of cluster-track vs cluster energy, N>2 Local Maxima, %s",ptype[i].Data()),
4078        nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax); 
4079       fhTrackMatchedDPhiNLocMaxN[i]->SetYTitle("d#phi (rad)");
4080       fhTrackMatchedDPhiNLocMaxN[i]->SetXTitle("E_{cluster} (GeV)");
4081       
4082       outputContainer->Add(fhTrackMatchedDEtaNLocMaxN[i]) ; 
4083       outputContainer->Add(fhTrackMatchedDPhiNLocMaxN[i]) ;
4084       
4085       fhTrackMatchedDEtaNLocMax1Pos[i]  = new TH2F
4086       (Form("hTrackMatchedDEtaNLocMax1Pos%s",pname[i].Data()),
4087        Form("d#eta of cluster-track vs cluster energy, 1 Local Maxima, %s",ptype[i].Data()),
4088        nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
4089       fhTrackMatchedDEtaNLocMax1Pos[i]->SetYTitle("d#eta");
4090       fhTrackMatchedDEtaNLocMax1Pos[i]->SetXTitle("E_{cluster} (GeV)");
4091       
4092       fhTrackMatchedDPhiNLocMax1Pos[i]  = new TH2F
4093       (Form("hTrackMatchedDPhiNLocMax1Pos%s",pname[i].Data()),
4094        Form("d#phi of cluster-track vs cluster energy, 1 Local Maxima, %s",ptype[i].Data()),
4095        nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
4096       fhTrackMatchedDPhiNLocMax1Pos[i]->SetYTitle("d#phi (rad)");
4097       fhTrackMatchedDPhiNLocMax1Pos[i]->SetXTitle("E_{cluster} (GeV)");
4098       
4099       outputContainer->Add(fhTrackMatchedDEtaNLocMax1Pos[i]) ;
4100       outputContainer->Add(fhTrackMatchedDPhiNLocMax1Pos[i]) ;
4101       
4102       fhTrackMatchedDEtaNLocMax2Pos[i]  = new TH2F
4103       (Form("hTrackMatchedDEtaNLocMax2Pos%s",pname[i].Data()),
4104        Form("d#eta of cluster-track vs cluster energy, 2 Local Maxima, %s",ptype[i].Data()),
4105        nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
4106       fhTrackMatchedDEtaNLocMax2Pos[i]->SetYTitle("d#eta");
4107       fhTrackMatchedDEtaNLocMax2Pos[i]->SetXTitle("E_{cluster} (GeV)");
4108       
4109       fhTrackMatchedDPhiNLocMax2Pos[i]  = new TH2F
4110       (Form("hTrackMatchedDPhiNLocMax2Pos%s",pname[i].Data()),
4111        Form("d#phi of cluster-track vs cluster energy, 2 Local Maxima, %s",ptype[i].Data()),
4112        nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
4113       fhTrackMatchedDPhiNLocMax2Pos[i]->SetYTitle("d#phi (rad)");
4114       fhTrackMatchedDPhiNLocMax2Pos[i]->SetXTitle("E_{cluster} (GeV)");
4115       
4116       outputContainer->Add(fhTrackMatchedDEtaNLocMax2Pos[i]) ;
4117       outputContainer->Add(fhTrackMatchedDPhiNLocMax2Pos[i]) ;
4118       
4119       fhTrackMatchedDEtaNLocMaxNPos[i]  = new TH2F
4120       (Form("hTrackMatchedDEtaNLocMaxNPos%s",pname[i].Data()),
4121        Form("d#eta of cluster-track vs cluster energy, N>2 Local Maxima, %s",ptype[i].Data()),
4122        nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
4123       fhTrackMatchedDEtaNLocMaxNPos[i]->SetYTitle("d#eta");
4124       fhTrackMatchedDEtaNLocMaxNPos[i]->SetXTitle("E_{cluster} (GeV)");
4125       
4126       fhTrackMatchedDPhiNLocMaxNPos[i]  = new TH2F
4127       (Form("hTrackMatchedDPhiNLocMaxNPos%s",pname[i].Data()),
4128        Form("d#phi of cluster-track vs cluster energy, N>2 Local Maxima, %s",ptype[i].Data()),
4129        nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
4130       fhTrackMatchedDPhiNLocMaxNPos[i]->SetYTitle("d#phi (rad)");
4131       fhTrackMatchedDPhiNLocMaxNPos[i]->SetXTitle("E_{cluster} (GeV)");
4132       
4133       outputContainer->Add(fhTrackMatchedDEtaNLocMaxNPos[i]) ;
4134       outputContainer->Add(fhTrackMatchedDPhiNLocMaxNPos[i]) ;
4135       
4136       fhTrackMatchedDEtaNLocMax1Neg[i]  = new TH2F
4137       (Form("hTrackMatchedDEtaNLocMax1Neg%s",pname[i].Data()),
4138        Form("d#eta of cluster-track vs cluster energy, 1 Local Maxima, %s",ptype[i].Data()),
4139        nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
4140       fhTrackMatchedDEtaNLocMax1Neg[i]->SetYTitle("d#eta");
4141       fhTrackMatchedDEtaNLocMax1Neg[i]->SetXTitle("E_{cluster} (GeV)");
4142       
4143       fhTrackMatchedDPhiNLocMax1Neg[i]  = new TH2F
4144       (Form("hTrackMatchedDPhiNLocMax1Neg%s",pname[i].Data()),
4145        Form("d#phi of cluster-track vs cluster energy, 1 Local Maxima, %s",ptype[i].Data()),
4146        nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
4147       fhTrackMatchedDPhiNLocMax1Neg[i]->SetYTitle("d#phi (rad)");
4148       fhTrackMatchedDPhiNLocMax1Neg[i]->SetXTitle("E_{cluster} (GeV)");
4149       
4150       outputContainer->Add(fhTrackMatchedDEtaNLocMax1Neg[i]) ;
4151       outputContainer->Add(fhTrackMatchedDPhiNLocMax1Neg[i]) ;
4152       
4153       fhTrackMatchedDEtaNLocMax2Neg[i]  = new TH2F
4154       (Form("hTrackMatchedDEtaNLocMax2Neg%s",pname[i].Data()),
4155        Form("d#eta of cluster-track vs cluster energy, 2 Local Maxima, %s",ptype[i].Data()),
4156        nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
4157       fhTrackMatchedDEtaNLocMax2Neg[i]->SetYTitle("d#eta");
4158       fhTrackMatchedDEtaNLocMax2Neg[i]->SetXTitle("E_{cluster} (GeV)");
4159       
4160       fhTrackMatchedDPhiNLocMax2Neg[i]  = new TH2F
4161       (Form("hTrackMatchedDPhiNLocMax2Neg%s",pname[i].Data()),
4162        Form("d#phi of cluster-track vs cluster energy, 2 Local Maxima, %s",ptype[i].Data()),
4163        nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
4164       fhTrackMatchedDPhiNLocMax2Neg[i]->SetYTitle("d#phi (rad)");
4165       fhTrackMatchedDPhiNLocMax2Neg[i]->SetXTitle("E_{cluster} (GeV)");
4166       
4167       outputContainer->Add(fhTrackMatchedDEtaNLocMax2Neg[i]) ;
4168       outputContainer->Add(fhTrackMatchedDPhiNLocMax2Neg[i]) ;
4169       
4170       fhTrackMatchedDEtaNLocMaxNNeg[i]  = new TH2F
4171       (Form("hTrackMatchedDEtaNLocMaxNNeg%s",pname[i].Data()),
4172        Form("d#eta of cluster-track vs cluster energy, N>2 Local Maxima, %s",ptype[i].Data()),
4173        nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
4174       fhTrackMatchedDEtaNLocMaxNNeg[i]->SetYTitle("d#eta");
4175       fhTrackMatchedDEtaNLocMaxNNeg[i]->SetXTitle("E_{cluster} (GeV)");
4176       
4177       fhTrackMatchedDPhiNLocMaxNNeg[i]  = new TH2F
4178       (Form("hTrackMatchedDPhiNLocMaxNNeg%s",pname[i].Data()),
4179        Form("d#phi of cluster-track vs cluster energy, N>2 Local Maxima, %s",ptype[i].Data()),
4180        nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
4181       fhTrackMatchedDPhiNLocMaxNNeg[i]->SetYTitle("d#phi (rad)");
4182       fhTrackMatchedDPhiNLocMaxNNeg[i]->SetXTitle("E_{cluster} (GeV)");
4183       
4184       outputContainer->Add(fhTrackMatchedDEtaNLocMaxNNeg[i]) ;
4185       outputContainer->Add(fhTrackMatchedDPhiNLocMaxNNeg[i]) ;
4186       
4187     }
4188   }
4189   
4190   if(fFillAngleHisto)
4191   {
4192     for(Int_t i = 0; i < n; i++)
4193     {
4194       for(Int_t j = 0; j < nMatched; j++)
4195       {
4196         
4197         fhAnglePairNLocMax1[i][j]  = new TH2F(Form("hAnglePairNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
4198                                            Form("Opening angle split sub-clusters of cluster NLM=1 vs pair Energy, %s, %s",ptype[i].Data(),sMatched[j].Data()),
4199                                            nptbins,ptmin,ptmax,200,0,0.2);
4200         fhAnglePairNLocMax1[i][j]->SetYTitle("#alpha (rad)");
4201         fhAnglePairNLocMax1[i][j]->SetXTitle("E (GeV)");
4202         outputContainer->Add(fhAnglePairNLocMax1[i][j]) ;
4203         
4204         fhAnglePairNLocMax2[i][j]  = new TH2F(Form("hAnglePairNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
4205                                            Form("Opening angle split sub-clusters of cluster NLM=2 cells vs Energy, %s, %s",ptype[i].Data(),sMatched[j].Data()),
4206                                            nptbins,ptmin,ptmax,200,0,0.2);
4207         fhAnglePairNLocMax2[i][j]->SetYTitle("#alpha (rad)");
4208         fhAnglePairNLocMax2[i][j]->SetXTitle("E (GeV)");
4209         outputContainer->Add(fhAnglePairNLocMax2[i][j]) ;
4210         
4211         fhAnglePairNLocMaxN[i][j]  = new TH2F(Form("hAnglePairNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
4212                                            Form("Opening angle split sub-clusters of cluster NLM>2 vs Energy, %s, %s",ptype[i].Data(),sMatched[j].Data()),
4213                                            nptbins,ptmin,ptmax,200,0,0.2);
4214         fhAnglePairNLocMaxN[i][j]->SetYTitle("#alpha (rad)");
4215         fhAnglePairNLocMaxN[i][j]->SetXTitle("E (GeV)");
4216         outputContainer->Add(fhAnglePairNLocMaxN[i][j]) ;
4217         
4218         if(asyOn || m02On)
4219         {
4220           fhAnglePairAfterCutsNLocMax1[i][j]  = new TH2F(Form("hAnglePairAfterCutsNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
4221                                                 Form("Opening angle split sub-clusters of cluster NLM=1, after cuts, vs pair Energy, %s, %s",ptype[i].Data(),sMatched[j].Data()),
4222                                                 nptbins,ptmin,ptmax,200,0,0.2);
4223           fhAnglePairAfterCutsNLocMax1[i][j]->SetYTitle("#alpha (rad)");
4224           fhAnglePairAfterCutsNLocMax1[i][j]->SetXTitle("E (GeV)");
4225           outputContainer->Add(fhAnglePairAfterCutsNLocMax1[i][j]) ;
4226           
4227           fhAnglePairAfterCutsNLocMax2[i][j]  = new TH2F(Form("hAnglePairAfterCutsNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
4228                                                 Form("Opening angle split sub-clusters of cluster, after cuts, NLM=2 cells vs Energy, %s, %s",ptype[i].Data(),sMatched[j].Data()),
4229                                                 nptbins,ptmin,ptmax,200,0,0.2);
4230           fhAnglePairAfterCutsNLocMax2[i][j]->SetYTitle("#alpha (rad)");
4231           fhAnglePairAfterCutsNLocMax2[i][j]->SetXTitle("E (GeV)");
4232           outputContainer->Add(fhAnglePairAfterCutsNLocMax2[i][j]) ;
4233           
4234           fhAnglePairAfterCutsNLocMaxN[i][j]  = new TH2F(Form("hAnglePairAfterCutsNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
4235                                                 Form("Opening angle split sub-clusters of cluster, after cuts, NLM>2 vs Energy, %s, %s",ptype[i].Data(),sMatched[j].Data()),
4236                                                 nptbins,ptmin,ptmax,200,0,0.2);
4237           fhAnglePairAfterCutsNLocMaxN[i][j]->SetYTitle("#alpha (rad)");
4238           fhAnglePairAfterCutsNLocMaxN[i][j]->SetXTitle("E (GeV)");
4239           outputContainer->Add(fhAnglePairAfterCutsNLocMaxN[i][j]) ;
4240
4241         }
4242         
4243         fhAnglePairPi0NLocMax1[i][j]  = new TH2F(Form("hAnglePairPi0NLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
4244                                               Form("Opening angle split sub-clusters of cluster, Pi0 ID, NLM=1 vs pair Energy, %s, %s",ptype[i].Data(),sMatched[j].Data()),
4245                                               nptbins,ptmin,ptmax,200,0,0.2);
4246         fhAnglePairPi0NLocMax1[i][j]->SetYTitle("#alpha (rad)");
4247         fhAnglePairPi0NLocMax1[i][j]->SetXTitle("E (GeV)");
4248         outputContainer->Add(fhAnglePairPi0NLocMax1[i][j]) ;
4249         
4250         fhAnglePairPi0NLocMax2[i][j]  = new TH2F(Form("hAnglePairPi0NLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
4251                                               Form("Opening angle split sub-clusters of cluster, Pi0 ID, NLM=2 cells vs Energy, %s, %s",ptype[i].Data(),sMatched[j].Data()),
4252                                               nptbins,ptmin,ptmax,200,0,0.2);
4253         fhAnglePairPi0NLocMax2[i][j]->SetYTitle("#alpha (rad)");
4254         fhAnglePairPi0NLocMax2[i][j]->SetXTitle("E (GeV)");
4255         outputContainer->Add(fhAnglePairPi0NLocMax2[i][j]) ;
4256         
4257         fhAnglePairPi0NLocMaxN[i][j]  = new TH2F(Form("hAnglePairPi0NLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
4258                                               Form("Opening angle split sub-clusters of cluster, Pi0 ID, NLM>2 vs Energy, %s, %s",ptype[i].Data(),sMatched[j].Data()),
4259                                               nptbins,ptmin,ptmax,200,0,0.2);
4260         fhAnglePairPi0NLocMaxN[i][j]->SetYTitle("#alpha (rad)");
4261         fhAnglePairPi0NLocMaxN[i][j]->SetXTitle("E (GeV)");
4262         outputContainer->Add(fhAnglePairPi0NLocMaxN[i][j]) ;
4263         
4264         fhAnglePairMassNLocMax1[i][j]  = new TH2F(Form("hAnglePairMassNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
4265                                                Form("Opening angle split sub-clusters of cluster, Pi0 ID, NLM=1 vs Mass for E > 12 GeV, %s, %s",ptype[i].Data(),sMatched[j].Data()),
4266                                                mbins,mmin,mmax,200,0,0.2);
4267         fhAnglePairMassNLocMax1[i][j]->SetXTitle("M (GeV/c^{2})");
4268         fhAnglePairMassNLocMax1[i][j]->SetYTitle("#alpha (rad)");
4269         outputContainer->Add(fhAnglePairMassNLocMax1[i][j]) ;
4270         
4271         
4272         fhAnglePairMassNLocMax2[i][j]  = new TH2F(Form("hAnglePairMassNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
4273                                                Form("Opening angle split sub-clusters of cluster NLM=2 vs Mass for E > 12 GeV, %s, %s",ptype[i].Data(),sMatched[j].Data()),
4274                                                mbins,mmin,mmax,200,0,0.2);
4275         fhAnglePairMassNLocMax2[i][j]->SetXTitle("M (GeV/c^{2})");
4276         fhAnglePairMassNLocMax2[i][j]->SetYTitle("#alpha (rad)");
4277         outputContainer->Add(fhAnglePairMassNLocMax2[i][j]) ;
4278         
4279         fhAnglePairMassNLocMaxN[i][j]  = new TH2F(Form("hAnglePairMassNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
4280                                                Form("Opening angle split sub-clusters of cluster NLM>2 vs Mass for E > 12 GeV, %s, %s",ptype[i].Data(),sMatched[j].Data()),
4281                                                mbins,mmin,mmax,200,0,0.2);
4282         fhAnglePairMassNLocMaxN[i][j]->SetXTitle("M (GeV/c^{2})");
4283         fhAnglePairMassNLocMaxN[i][j]->SetYTitle("#alpha (rad)");
4284         outputContainer->Add(fhAnglePairMassNLocMaxN[i][j]) ;  
4285
4286         
4287         fhAnglePairM02NLocMax1[i][j]  = new TH2F(Form("hAnglePairM02NLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
4288                                                   Form("Opening angle split sub-clusters of cluster, Pi0 ID, NLM=1 vs Mass for E > 15 GeV, %s, %s",ptype[i].Data(),sMatched[j].Data()),
4289                                                   ssbins,ssmin,ssmax,200,0,0.2);
4290         fhAnglePairM02NLocMax1[i][j]->SetXTitle("#lambda_{0}^{2}");
4291         fhAnglePairM02NLocMax1[i][j]->SetYTitle("#alpha (rad)");
4292         outputContainer->Add(fhAnglePairM02NLocMax1[i][j]) ;
4293         
4294         
4295         fhAnglePairM02NLocMax2[i][j]  = new TH2F(Form("hAnglePairM02NLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
4296                                                   Form("Opening angle split sub-clusters of cluster NLM=2 vs Mass for E > 12 GeV, %s, %s",ptype[i].Data(),sMatched[j].Data()),
4297                                                   ssbins,ssmin,ssmax,200,0,0.2);
4298         fhAnglePairM02NLocMax2[i][j]->SetXTitle("#lambda_{0}^{2}");
4299         fhAnglePairM02NLocMax2[i][j]->SetYTitle("#alpha (rad)");
4300         outputContainer->Add(fhAnglePairM02NLocMax2[i][j]) ;
4301         
4302         fhAnglePairM02NLocMaxN[i][j]  = new TH2F(Form("hAnglePairM02NLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
4303                                                   Form("Opening angle split sub-clusters of cluster NLM>2 vs Mass for E > 12 GeV, %s, %s",ptype[i].Data(),sMatched[j].Data()),
4304                                                   ssbins,ssmin,ssmax,200,0,0.2);
4305         fhAnglePairM02NLocMaxN[i][j]->SetXTitle("#lambda_{0}^{2}");
4306         fhAnglePairM02NLocMaxN[i][j]->SetYTitle("#alpha (rad)");
4307         outputContainer->Add(fhAnglePairM02NLocMaxN[i][j]) ;
4308
4309       }
4310     }
4311     
4312     if(IsDataMC())
4313     {
4314       fhAnglePairPrimPi0RecoNLocMax1  = new TH2F("fhAnglePairPrimPi0RecoNLocMax1",
4315                                                  "Opening angle split neutral sub-clusters reconstructed / generated #pi^{0} vs pair Energy, NLM=1",
4316                                                  nptbins,ptmin,ptmax,300,0,3);
4317       fhAnglePairPrimPi0RecoNLocMax1->SetYTitle("#alpha_{reco} / #alpha_{gen}");
4318       fhAnglePairPrimPi0RecoNLocMax1->SetXTitle("E (GeV)");
4319       outputContainer->Add(fhAnglePairPrimPi0RecoNLocMax1) ;
4320
4321       fhAnglePairPrimPi0RecoNLocMax2  = new TH2F("fhAnglePairPrimPi0RecoNLocMax2",
4322                                                  "Opening angle split neutral sub-clusters reconstructed / generated #pi^{0} vs pair Energy, NLM=2",
4323                                                  nptbins,ptmin,ptmax,300,0,3);
4324       fhAnglePairPrimPi0RecoNLocMax2->SetYTitle("#alpha_{reco} / #alpha_{gen}");
4325       fhAnglePairPrimPi0RecoNLocMax2->SetXTitle("E (GeV)");
4326       outputContainer->Add(fhAnglePairPrimPi0RecoNLocMax2) ;
4327
4328       fhAnglePairPrimPi0RecoNLocMaxN  = new TH2F("fhAnglePairPrimPi0RecoNLocMaxN",
4329                                                  "Opening angle split neutral sub-clusters reconstructed / generated #pi^{0} vs pair Energy, NLM>2",
4330                                                  nptbins,ptmin,ptmax,300,0,3);
4331       fhAnglePairPrimPi0RecoNLocMaxN->SetYTitle("#alpha_{reco} / #alpha_{gen}");
4332       fhAnglePairPrimPi0RecoNLocMaxN->SetXTitle("E (GeV)");
4333       outputContainer->Add(fhAnglePairPrimPi0RecoNLocMaxN) ;
4334
4335       
4336       fhAnglePairPrimPi0vsRecoNLocMax1  = new TH2F("fhAnglePairPrimPi0vsRecoNLocMax1",
4337                                                    "Opening angle split neutral sub-clusters reconstructed vs generated #pi^{0} for E > 15 GeV, NLM=1",
4338                                                    200,0,0.2,200,0,0.2);
4339       fhAnglePairPrimPi0vsRecoNLocMax1->SetYTitle("#alpha_{reco} (rad)");
4340       fhAnglePairPrimPi0vsRecoNLocMax1->SetXTitle("#alpha_{gen} (rad)");
4341       outputContainer->Add(fhAnglePairPrimPi0vsRecoNLocMax1) ;
4342
4343       fhAnglePairPrimPi0vsRecoNLocMax2  = new TH2F("fhAnglePairPrimPi0vsRecoNLocMax2",
4344                                                    "Opening angle split neutral sub-clusters reconstructed vs generated #pi^{0} for E > 10 GeV, NLM=2",
4345                                                    200,0,0.2,200,0,0.2);
4346       fhAnglePairPrimPi0vsRecoNLocMax2->SetYTitle("#alpha_{reco} (rad)");
4347       fhAnglePairPrimPi0vsRecoNLocMax2->SetXTitle("#alpha_{gen} (rad)");
4348       outputContainer->Add(fhAnglePairPrimPi0vsRecoNLocMax2) ;
4349
4350       fhAnglePairPrimPi0vsRecoNLocMaxN  = new TH2F("fhAnglePairPrimPi0vsRecoNLocMaxN",
4351                                                    "Opening angle split neutral sub-clusters reconstructed vs generated #pi^{0} for E > 10 GeV, NLM=2",
4352                                                    200,0,0.2,200,0,0.2);
4353       fhAnglePairPrimPi0vsRecoNLocMaxN->SetYTitle("#alpha_{reco} (rad)");
4354       fhAnglePairPrimPi0vsRecoNLocMaxN->SetXTitle("#alpha_{gen} (rad)");
4355       outputContainer->Add(fhAnglePairPrimPi0vsRecoNLocMaxN) ;
4356       
4357     }
4358   }
4359  
4360   // Same as asymmetry ...
4361   if(fFillThetaStarHisto)
4362   {
4363     for(Int_t i = 0; i < n; i++)
4364     {
4365       for(Int_t j = 0; j < nMatched; j++)
4366       {
4367         
4368         fhCosThStarNLocMax1[i][j]  = new TH2F(Form("hCosThStarNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
4369                                               Form("cos(#theta^{*}) split sub-clusters of cluster NLM=1 vs pair Energy, %s, %s",ptype[i].Data(),sMatched[j].Data()),
4370                                               nptbins,ptmin,ptmax,200,-1,1);
4371         fhCosThStarNLocMax1[i][j]->SetYTitle("cos(#theta^{*})");
4372         fhCosThStarNLocMax1[i][j]->SetXTitle("E (GeV)");
4373         outputContainer->Add(fhCosThStarNLocMax1[i][j]) ;
4374         
4375         fhCosThStarNLocMax2[i][j]  = new TH2F(Form("hCosThStarNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
4376                                               Form("cos(#theta^{*}) split sub-clusters of cluster NLM=2 cells vs Energy, %s, %s",ptype[i].Data(),sMatched[j].Data()),
4377                                               nptbins,ptmin,ptmax,200,-1,1);
4378         fhCosThStarNLocMax2[i][j]->SetYTitle("cos(#theta^{*})");
4379         fhCosThStarNLocMax2[i][j]->SetXTitle("E (GeV)");
4380         outputContainer->Add(fhCosThStarNLocMax2[i][j]) ;
4381         
4382         fhCosThStarNLocMaxN[i][j]  = new TH2F(Form("hCosThStarNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
4383                                               Form("cos(#theta^{*}) split sub-clusters of cluster NLM>2 vs Energy, %s, %s",ptype[i].Data(),sMatched[j].Data()),
4384                                               nptbins,ptmin,ptmax,200,-1,1);
4385         fhCosThStarNLocMaxN[i][j]->SetYTitle("cos(#theta^{*})");
4386         fhCosThStarNLocMaxN[i][j]->SetXTitle("E (GeV)");
4387         outputContainer->Add(fhCosThStarNLocMaxN[i][j]) ;
4388         
4389         if(asyOn || m02On)
4390         {
4391           fhCosThStarAfterCutsNLocMax1[i][j]  = new TH2F(Form("hCosThStarAfterCutsNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
4392                                                          Form("cos(#theta^{*}) split sub-clusters of cluster NLM=1, after cuts, vs pair Energy, %s, %s",ptype[i].Data(),sMatched[j].Data()),
4393                                                          nptbins,ptmin,ptmax,200,-1,1);
4394           fhCosThStarAfterCutsNLocMax1[i][j]->SetYTitle("cos(#theta^{*})");
4395           fhCosThStarAfterCutsNLocMax1[i][j]->SetXTitle("E (GeV)");
4396           outputContainer->Add(fhCosThStarAfterCutsNLocMax1[i][j]) ;
4397           
4398           fhCosThStarAfterCutsNLocMax2[i][j]  = new TH2F(Form("hCosThStarAfterCutsNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
4399                                                          Form("cos(#theta^{*}) split sub-clusters of cluster, after cuts, NLM=2 cells vs Energy, %s, %s",ptype[i].Data(),sMatched[j].Data()),
4400                                                          nptbins,ptmin,ptmax,200,-1,1);
4401           fhCosThStarAfterCutsNLocMax2[i][j]->SetYTitle("cos(#theta^{*})");
4402           fhCosThStarAfterCutsNLocMax2[i][j]->SetXTitle("E (GeV)");
4403           outputContainer->Add(fhCosThStarAfterCutsNLocMax2[i][j]) ;
4404           
4405           fhCosThStarAfterCutsNLocMaxN[i][j]  = new TH2F(Form("hCosThStarAfterCutsNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
4406                                                          Form("cos(#theta^{*}) split sub-clusters of cluster, after cuts, NLM>2 vs Energy, %s, %s",ptype[i].Data(),sMatched[j].Data()),
4407                                                          nptbins,ptmin,ptmax,200,-1,1);
4408           fhCosThStarAfterCutsNLocMaxN[i][j]->SetYTitle("cos(#theta^{*})");
4409           fhCosThStarAfterCutsNLocMaxN[i][j]->SetXTitle("E (GeV)");
4410           outputContainer->Add(fhCosThStarAfterCutsNLocMaxN[i][j]) ;
4411           
4412         }
4413         
4414         fhCosThStarPi0NLocMax1[i][j]  = new TH2F(Form("hCosThStarPi0NLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
4415                                                  Form("cos(#theta^{*}) split sub-clusters of cluster, Pi0 ID, NLM=1 vs pair Energy, %s, %s",ptype[i].Data(),sMatched[j].Data()),
4416                                                  nptbins,ptmin,ptmax,200,-1,1);
4417         fhCosThStarPi0NLocMax1[i][j]->SetYTitle("cos(#theta^{*})");
4418         fhCosThStarPi0NLocMax1[i][j]->SetXTitle("E (GeV)");
4419         outputContainer->Add(fhCosThStarPi0NLocMax1[i][j]) ;
4420         
4421         fhCosThStarPi0NLocMax2[i][j]  = new TH2F(Form("hCosThStarPi0NLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
4422                                                  Form("cos(#theta^{*}) split sub-clusters of cluster, Pi0 ID, NLM=2 cells vs Energy, %s, %s",ptype[i].Data(),sMatched[j].Data()),
4423                                                  nptbins,ptmin,ptmax,200,-1,1);
4424         fhCosThStarPi0NLocMax2[i][j]->SetYTitle("cos(#theta^{*})");
4425         fhCosThStarPi0NLocMax2[i][j]->SetXTitle("E (GeV)");
4426         outputContainer->Add(fhCosThStarPi0NLocMax2[i][j]) ;
4427         
4428         fhCosThStarPi0NLocMaxN[i][j]  = new TH2F(Form("hCosThStarPi0NLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
4429                                                  Form("cos(#theta^{*}) split sub-clusters of cluster, Pi0 ID, NLM>2 vs Energy, %s, %s",ptype[i].Data(),sMatched[j].Data()),
4430                                                  nptbins,ptmin,ptmax,200,-1,1);
4431         fhCosThStarPi0NLocMaxN[i][j]->SetYTitle("cos(#theta^{*})");
4432         fhCosThStarPi0NLocMaxN[i][j]->SetXTitle("E (GeV)");
4433         outputContainer->Add(fhCosThStarPi0NLocMaxN[i][j]) ;
4434         
4435       }
4436     }
4437   }
4438
4439   
4440   for(Int_t j = 0; j < nMatched; j++)
4441   {
4442     fhSplitEFractionvsAsyNLocMax1[j]     = new TH2F(Form("hSplitEFractionvsAsyNLocMax1%s",sMatched[j].Data()),
4443                                                     Form("(E1+E2)/E_{cluster} vs (E_{split1}-E_{split2})/(E_{split1}+E_{split2}) for N max  = 1, E>12, %s",sMatched[j].Data()),
4444                                                     100,-1,1,120,0,1.2); 
4445     fhSplitEFractionvsAsyNLocMax1[j]   ->SetXTitle("(E_{split1}-E_{split2})/(E_{split1}+E_{split2})");
4446     fhSplitEFractionvsAsyNLocMax1[j]   ->SetYTitle("(E_{split1}+E_{split2})/E_{cluster}");
4447     outputContainer->Add(fhSplitEFractionvsAsyNLocMax1[j]) ; 
4448     
4449     fhSplitEFractionvsAsyNLocMax2[j]     = new TH2F(Form("hSplitEFractionvsAsyNLocMax2%s",sMatched[j].Data()),
4450                                                     Form("(E1+E2)/E_{cluster} vs (E_{split1}-E_{split2})/(E_{split1}+E_{split2}) for N max  = 2,E>12, %s",sMatched[j].Data()),
4451                                                     100,-1,1,120,0,1.2); 
4452     fhSplitEFractionvsAsyNLocMax2[j]   ->SetXTitle("(E_{split1}-E_{split2})/(E_{split1}+E_{split2})");
4453     fhSplitEFractionvsAsyNLocMax2[j]   ->SetYTitle("(E_{split1}+E_{split2})/E_{cluster}");
4454     outputContainer->Add(fhSplitEFractionvsAsyNLocMax2[j]) ; 
4455     
4456     fhSplitEFractionvsAsyNLocMaxN[j]    = new TH2F(Form("hSplitEFractionvsAsyNLocMaxN%s",sMatched[j].Data()),
4457                                                    Form("(E1+E2)/E_{cluster} vs (E_{split1}-E_{split2})/(E_{split1}+E_{split2}) for N max  > 2, E>12, %s",sMatched[j].Data()),
4458                                                    100,-1,1,120,0,1.2); 
4459     fhSplitEFractionvsAsyNLocMaxN[j]   ->SetXTitle("(E_{split1}-E_{split2})/(E_{split1}+E_{split2})");
4460     fhSplitEFractionvsAsyNLocMaxN[j]   ->SetYTitle("(E_{split1}+E_{split2})/E_{cluster}");
4461     outputContainer->Add(fhSplitEFractionvsAsyNLocMaxN[j]) ; 
4462   }
4463   
4464   
4465   fhClusterEtaPhiNLocMax1  = new TH2F
4466   ("hClusterEtaPhiNLocMax1","Neutral Clusters with E > 8 GeV, NLM = 1: #eta vs #phi",netabins,etamin,etamax, nphibins,phimin,phimax);
4467   fhClusterEtaPhiNLocMax1->SetYTitle("#phi (rad)");
4468   fhClusterEtaPhiNLocMax1->SetXTitle("#eta");
4469   outputContainer->Add(fhClusterEtaPhiNLocMax1) ;
4470   
4471   fhClusterEtaPhiNLocMax2  = new TH2F
4472   ("hClusterEtaPhiNLocMax2","Neutral Clusters with E > 8 GeV, NLM = 2: #eta vs #phi",netabins,etamin,etamax, nphibins,phimin,phimax);
4473   fhClusterEtaPhiNLocMax2->SetYTitle("#phi (rad)");
4474   fhClusterEtaPhiNLocMax2->SetXTitle("#eta");
4475   outputContainer->Add(fhClusterEtaPhiNLocMax2) ;
4476   
4477   fhClusterEtaPhiNLocMaxN  = new TH2F
4478   ("hClusterEtaPhiNLocMaxN","Neutral Clusters with E > 8 GeV, NLM > 2: #eta vs #phi",netabins,etamin,etamax, nphibins,phimin,phimax);
4479   fhClusterEtaPhiNLocMaxN->SetYTitle("#phi (rad)");
4480   fhClusterEtaPhiNLocMaxN->SetXTitle("#eta");
4481   outputContainer->Add(fhClusterEtaPhiNLocMaxN) ;
4482   
4483   fhPi0EtaPhiNLocMax1  = new TH2F
4484   ("hPi0EtaPhiNLocMax1","Selected #pi^{0}'s with E > 8 GeV, NLM = 1: #eta vs #phi",netabins,etamin,etamax, nphibins,phimin,phimax);
4485   fhPi0EtaPhiNLocMax1->SetYTitle("#phi (rad)");
4486   fhPi0EtaPhiNLocMax1->SetXTitle("#eta");
4487   outputContainer->Add(fhPi0EtaPhiNLocMax1) ;
4488   
4489   fhPi0EtaPhiNLocMax2  = new TH2F
4490   ("hPi0EtaPhiNLocMax2","Selected #pi^{0}'s with E > 8 GeV, NLM = 2: #eta vs #phi",netabins,etamin,etamax, nphibins,phimin,phimax);
4491   fhPi0EtaPhiNLocMax2->SetYTitle("#phi (rad)");
4492   fhPi0EtaPhiNLocMax2->SetXTitle("#eta");
4493   outputContainer->Add(fhPi0EtaPhiNLocMax2) ;
4494   
4495   fhPi0EtaPhiNLocMaxN  = new TH2F
4496   ("hPi0EtaPhiNLocMaxN","Selected #pi^{0}'s with E > 8 GeV, NLM > 2: #eta vs #phi",netabins,etamin,etamax, nphibins,phimin,phimax);
4497   fhPi0EtaPhiNLocMaxN->SetYTitle("#phi (rad)");
4498   fhPi0EtaPhiNLocMaxN->SetXTitle("#eta");
4499   outputContainer->Add(fhPi0EtaPhiNLocMaxN) ;
4500   
4501   if(fFillIdEtaHisto)
4502   {
4503     fhEtaEtaPhiNLocMax1  = new TH2F
4504     ("hEtaEtaPhiNLocMax1","Selected #eta's with E > 8 GeV, NLM = 1: #eta vs #phi",netabins,etamin,etamax, nphibins,phimin,phimax);
4505     fhEtaEtaPhiNLocMax1->SetYTitle("#phi (rad)");
4506     fhEtaEtaPhiNLocMax1->SetXTitle("#eta");
4507     outputContainer->Add(fhEtaEtaPhiNLocMax1) ;
4508     
4509     fhEtaEtaPhiNLocMax2  = new TH2F
4510     ("hEtaEtaPhiNLocMax2","Selected #eta's with E > 8 GeV, NLM = 2: #eta vs #phi",netabins,etamin,etamax, nphibins,phimin,phimax);
4511     fhEtaEtaPhiNLocMax2->SetYTitle("#phi (rad)");
4512     fhEtaEtaPhiNLocMax2->SetXTitle("#eta");
4513     outputContainer->Add(fhEtaEtaPhiNLocMax2) ;
4514     
4515     fhEtaEtaPhiNLocMaxN  = new TH2F
4516     ("hEtaEtaPhiNLocMaxN","Selected #eta's with E > 8 GeV, NLM > 2: #eta vs #phi",netabins,etamin,etamax, nphibins,phimin,phimax);
4517     fhEtaEtaPhiNLocMaxN->SetYTitle("#phi (rad)");
4518     fhEtaEtaPhiNLocMaxN->SetXTitle("#eta");
4519     outputContainer->Add(fhEtaEtaPhiNLocMaxN) ;
4520   }
4521   
4522   if(fFillSSWeightHisto)
4523   {
4524     for(Int_t nlm = 0; nlm < 3; nlm++)
4525     {
4526       fhPi0CellE[nlm]  = new TH2F(Form("hPi0CellENLocMax%s",snlm[nlm].Data()),
4527                                   Form("Selected #pi^{0}'s, NLM = %s: cluster E vs cell E",snlm[nlm].Data()),
4528                                   nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
4529       fhPi0CellE[nlm]->SetYTitle("E_{cell}");
4530       fhPi0CellE[nlm]->SetXTitle("E_{cluster}");
4531       outputContainer->Add(fhPi0CellE[nlm]) ;
4532       
4533       fhPi0CellEFrac[nlm]  = new TH2F(Form("hPi0CellEFracNLocMax%s",snlm[nlm].Data()),
4534                                       Form("Selected #pi^{0}'s, NLM = %s: cluster E vs cell E / cluster E",snlm[nlm].Data()),
4535                                       nptbins,ptmin,ptmax, 100,0,1);
4536       fhPi0CellEFrac[nlm]->SetYTitle("E_{cell} / E_{cluster}");
4537       fhPi0CellEFrac[nlm]->SetXTitle("E_{cluster}");
4538       outputContainer->Add(fhPi0CellEFrac[nlm]) ;
4539       
4540       fhPi0CellLogEFrac[nlm]  = new TH2F(Form("hPi0CellLogEFracNLocMax%s",snlm[nlm].Data()),
4541                                          Form("Selected #pi^{0}'s, NLM = %s: cluster E vs Log(cell E / cluster E)",snlm[nlm].Data()),
4542                                          nptbins,ptmin,ptmax, 100,-10,0);
4543       fhPi0CellLogEFrac[nlm]->SetYTitle("Log(E_{cell} / E_{cluster})");
4544       fhPi0CellLogEFrac[nlm]->SetXTitle("E_{cluster}");
4545       outputContainer->Add(fhPi0CellLogEFrac[nlm]) ;
4546       
4547       
4548       fhPi0CellEMaxEMax2Frac[nlm]  = new TH2F(Form("hPi0CellEMaxEMax2FracNLocMax%s",snlm[nlm].Data()),
4549                                               Form("Selected #pi^{0}'s, NLM = %s: cluster E vs 2nd loc. max. E / 1st loc. max.  E",snlm[nlm].Data()),
4550                                               nptbins,ptmin,ptmax, 100,0,1);
4551       fhPi0CellEMaxEMax2Frac[nlm]->SetYTitle("E_{Loc Max 2} / E_{Loc Max 1}");
4552       fhPi0CellEMaxEMax2Frac[nlm]->SetXTitle("E_{cluster}");
4553       outputContainer->Add(fhPi0CellEMaxEMax2Frac[nlm]) ;
4554       
4555       fhPi0CellEMaxClusterFrac[nlm]  = new TH2F(Form("hPi0CellEMaxClusterFracNLocMax%s",snlm[nlm].Data()),
4556                                                 Form("Selected #pi^{0}'s, NLM = %s: cluster E vs 1st loc. max. E / E cluster",snlm[nlm].Data()),
4557                                                 nptbins,ptmin,ptmax, 100,0,1);
4558       fhPi0CellEMaxClusterFrac[nlm]->SetYTitle("E_{Loc Max 1} / E_{cluster}");
4559       fhPi0CellEMaxClusterFrac[nlm]->SetXTitle("E_{cluster}");
4560       outputContainer->Add(fhPi0CellEMaxClusterFrac[nlm]) ;
4561       
4562       fhPi0CellEMax2ClusterFrac[nlm]  = new TH2F(Form("hPi0CellEMax2ClusterFracNLocMax%s",snlm[nlm].Data()),
4563                                                  Form("Selected #pi^{0}'s, NLM = %s: cluster E vs 2nd loc. max. E / E cluster",snlm[nlm].Data()),
4564                                                  nptbins,ptmin,ptmax, 100,0,1);
4565       fhPi0CellEMax2ClusterFrac[nlm]->SetYTitle("E_{Loc Max 2} / E_{cluster}");
4566       fhPi0CellEMax2ClusterFrac[nlm]->SetXTitle("E_{cluster}");
4567       outputContainer->Add(fhPi0CellEMax2ClusterFrac[nlm]) ;
4568       
4569       fhPi0CellEMaxFrac[nlm]  = new TH2F(Form("hPi0CellEMaxFracNLocMax%s",snlm[nlm].Data()),
4570                                          Form("Selected #pi^{0}'s, NLM = %s: cluster E vs 1st loc. max. E / E cell i",snlm[nlm].Data()),
4571                                          nptbins,ptmin,ptmax, 100,0,1);
4572       fhPi0CellEMaxFrac[nlm]->SetYTitle("E_{Loc Max 1} / E_{cell i}");
4573       fhPi0CellEMaxFrac[nlm]->SetXTitle("E_{cluster}");
4574       outputContainer->Add(fhPi0CellEMaxFrac[nlm]) ;
4575       
4576       fhPi0CellEMax2Frac[nlm]  = new TH2F(Form("hPi0CellEMax2FracNLocMax%s",snlm[nlm].Data()),
4577                                           Form("Selected #pi^{0}'s, NLM = %s: cluster E vs 2nd loc. max. E / E cell i",snlm[nlm].Data()),
4578                                           nptbins,ptmin,ptmax, 200,0,2);
4579       fhPi0CellEMax2Frac[nlm]->SetYTitle("E_{Loc Max 2} / E_{cell i}");
4580       fhPi0CellEMax2Frac[nlm]->SetXTitle("E_{cluster}");
4581       outputContainer->Add(fhPi0CellEMax2Frac[nlm]) ;
4582       
4583       
4584       for(Int_t i = 0; i < fSSWeightN; i++)
4585       {
4586         fhM02WeightPi0[nlm][i]     = new TH2F(Form("hM02Pi0NLocMax%s_W%d",snlm[nlm].Data(),i),
4587                                               Form("#lambda_{0}^{2} vs E, with W0 = %2.2f, for NLM = %s", fSSWeight[i], snlm[nlm].Data()),
4588                                               nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
4589         fhM02WeightPi0[nlm][i]   ->SetYTitle("#lambda_{0}^{2}");
4590         fhM02WeightPi0[nlm][i]   ->SetXTitle("E (GeV)");
4591         outputContainer->Add(fhM02WeightPi0[nlm][i]) ;
4592       }
4593       
4594       for(Int_t i = 0; i < fSSECellCutN; i++)
4595       {
4596         fhM02ECellCutPi0[nlm][i]     = new TH2F(Form("hM02Pi0NLocMax%s_Ecell%d",snlm[nlm].Data(),i),
4597                                                 Form("#lambda_{0}^{2} vs E, with Ecell > %2.2f, for NLM = %s", fSSECellCut[i], snlm[nlm].Data()),
4598                                                 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
4599         fhM02ECellCutPi0[nlm][i]   ->SetYTitle("#lambda_{0}^{2}");
4600         fhM02ECellCutPi0[nlm][i]   ->SetXTitle("E (GeV)");
4601         outputContainer->Add(fhM02ECellCutPi0[nlm][i]) ;
4602       }
4603       
4604     }
4605   }
4606   
4607   Int_t tdbins   = GetHistogramRanges()->GetHistoDiffTimeBins() ;    Float_t tdmax  = GetHistogramRanges()->GetHistoDiffTimeMax();     Float_t tdmin  = GetHistogramRanges()->GetHistoDiffTimeMin();
4608   
4609   fhPi0EPairDiffTimeNLM1 = new TH2F("hPi0EPairDiffTimeNLocMax1","cluster pair time difference vs E, selected #pi, NLM=1",nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
4610   fhPi0EPairDiffTimeNLM1->SetXTitle("E_{pair} (GeV)");
4611   fhPi0EPairDiffTimeNLM1->SetYTitle("#Delta t (ns)");
4612   outputContainer->Add(fhPi0EPairDiffTimeNLM1);
4613   
4614   fhPi0EPairDiffTimeNLM2 = new TH2F("hPi0EPairDiffTimeNLocMax2","cluster pair time difference vs E, selected #pi, NLM=2",nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
4615   fhPi0EPairDiffTimeNLM2->SetXTitle("E_{pair} (GeV)");
4616   fhPi0EPairDiffTimeNLM2->SetYTitle("#Delta t (ns)");
4617   outputContainer->Add(fhPi0EPairDiffTimeNLM2);
4618   
4619   fhPi0EPairDiffTimeNLMN = new TH2F("hPi0EPairDiffTimeNLocMaxN","cluster pair time difference vs E, selected #pi, NLM>2",nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
4620   fhPi0EPairDiffTimeNLMN->SetXTitle("E_{pair} (GeV)");
4621   fhPi0EPairDiffTimeNLMN->SetYTitle("#Delta t (ns)");
4622   outputContainer->Add(fhPi0EPairDiffTimeNLMN);
4623   
4624   if(fFillIdEtaHisto)
4625   {
4626     fhEtaEPairDiffTimeNLM1 = new TH2F("hEtaEPairDiffTimeNLocMax1","cluster pair time difference vs E, selected #eta, NLM=1",nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
4627     fhEtaEPairDiffTimeNLM1->SetXTitle("E_{pair} (GeV)");
4628     fhEtaEPairDiffTimeNLM1->SetYTitle("#Delta t (ns)");
4629     outputContainer->Add(fhEtaEPairDiffTimeNLM1);
4630     
4631     fhEtaEPairDiffTimeNLM2 = new TH2F("hEtaEPairDiffTimeNLocMax2","cluster pair time difference vs E, selected #eta, NLM=2",nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
4632     fhEtaEPairDiffTimeNLM2->SetXTitle("E_{pair} (GeV)");
4633     fhEtaEPairDiffTimeNLM2->SetYTitle("#Delta t (ns)");
4634     outputContainer->Add(fhEtaEPairDiffTimeNLM2);
4635     
4636     fhEtaEPairDiffTimeNLMN = new TH2F("hEtaEPairDiffTimeNLocMaxN","cluster pair time difference vs E, selected #eta, NLM>2",nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
4637     fhEtaEPairDiffTimeNLMN->SetXTitle("E_{pair} (GeV)");
4638     fhEtaEPairDiffTimeNLMN->SetYTitle("#Delta t (ns)");
4639     outputContainer->Add(fhEtaEPairDiffTimeNLMN);
4640   }
4641   
4642   if(fFillNCellHisto && IsDataMC())
4643   {
4644     
4645     fhNCellMassEHighNLocMax1MCPi0 = new TH2F("hNCellMassEHighNLocMax1MCPi0","n cells vs mass for MC pi0, high energy, NLM=1",ncbins,ncmin,ncmax,mbins,mmin,mmax);
4646     fhNCellMassEHighNLocMax1MCPi0->SetYTitle("M (GeV/c^{2})");
4647     fhNCellMassEHighNLocMax1MCPi0->SetXTitle("n cells");
4648     outputContainer->Add(fhNCellMassEHighNLocMax1MCPi0) ;
4649     
4650     fhNCellMassELowNLocMax1MCPi0 = new TH2F("hNCellMassELowNLocMax1MCPi0","n cells vs mass for MC pi0, low energy, NLM=1",ncbins,ncmin,ncmax,mbins,mmin,mmax);
4651     fhNCellMassELowNLocMax1MCPi0->SetYTitle("M (GeV/c^{2})");
4652     fhNCellMassELowNLocMax1MCPi0->SetXTitle("n cells");
4653     outputContainer->Add(fhNCellMassELowNLocMax1MCPi0) ;
4654     
4655     fhNCellM02EHighNLocMax1MCPi0 = new TH2F("hNCellM02EHighNLocMax1MCPi0","n cells vs #lambda_{0}^{2} for MC pi0, high energy, NLM=1",ncbins,ncmin,ncmax,ssbins,ssmin,ssmax);
4656     fhNCellM02EHighNLocMax1MCPi0->SetYTitle("#lambda_{0}^{2}");
4657     fhNCellM02EHighNLocMax1MCPi0->SetXTitle("n cells");
4658     outputContainer->Add(fhNCellM02EHighNLocMax1MCPi0) ;
4659     
4660     fhNCellM02ELowNLocMax1MCPi0 = new TH2F("hNCellM02ELowNLocMax1MCPi0","n cells vs #lambda_{0}^{2} for MC pi0, low energy, NLM=1",ncbins,ncmin,ncmax,ssbins,ssmin,ssmax);
4661     fhNCellM02ELowNLocMax1MCPi0->SetYTitle("#lambda_{0}^{2}");
4662     fhNCellM02ELowNLocMax1MCPi0->SetXTitle("n cells");
4663     outputContainer->Add(fhNCellM02ELowNLocMax1MCPi0) ;
4664     
4665     fhNCellMassEHighNLocMax2MCPi0 = new TH2F("hNCellMassEHighNLocMax2MCPi0","n cells vs mass for MC pi0, high energy, NLM=2",ncbins,ncmin,ncmax,mbins,mmin,mmax);
4666     fhNCellMassEHighNLocMax2MCPi0->SetYTitle("M (GeV/c^{2})");
4667     fhNCellMassEHighNLocMax2MCPi0->SetXTitle("n cells");
4668     outputContainer->Add(fhNCellMassEHighNLocMax2MCPi0) ;
4669     
4670     fhNCellMassELowNLocMax2MCPi0 = new TH2F("hNCellMassELowNLocMax2MCPi0","n cells vs mass for MC pi0, low energy, NLM=2",ncbins,ncmin,ncmax,mbins,mmin,mmax);
4671     fhNCellMassELowNLocMax2MCPi0->SetYTitle("M (GeV/c^{2})");
4672     fhNCellMassELowNLocMax2MCPi0->SetXTitle("n cells");
4673     outputContainer->Add(fhNCellMassELowNLocMax2MCPi0) ;
4674     
4675     fhNCellM02EHighNLocMax2MCPi0 = new TH2F("hNCellM02EHighNLocMax2MCPi0","n cells vs #lambda_{0}^{2} for MC pi0, high energy, NLM=2",ncbins,ncmin,ncmax,ssbins,ssmin,ssmax);
4676     fhNCellM02EHighNLocMax2MCPi0->SetYTitle("#lambda_{0}^{2}");
4677     fhNCellM02EHighNLocMax2MCPi0->SetXTitle("n cells");
4678     outputContainer->Add(fhNCellM02EHighNLocMax2MCPi0) ;
4679     
4680     fhNCellM02ELowNLocMax2MCPi0 = new TH2F("hNCellM02ELowNLocMax2MCPi0","n cells vs #lambda_{0}^{2} for MC pi0, low energy, NLM=2",ncbins,ncmin,ncmax,ssbins,ssmin,ssmax);
4681     fhNCellM02ELowNLocMax2MCPi0->SetYTitle("#lambda_{0}^{2}");
4682     fhNCellM02ELowNLocMax2MCPi0->SetXTitle("n cells");
4683     outputContainer->Add(fhNCellM02ELowNLocMax2MCPi0) ;
4684     
4685     fhNCellMassEHighNLocMaxNMCPi0 = new TH2F("hNCellMassEHighNLocMaxNMCPi0","n cells vs mass for MC pi0, high energy, NLM>2",ncbins,ncmin,ncmax,mbins,mmin,mmax);
4686     fhNCellMassEHighNLocMaxNMCPi0->SetYTitle("M (GeV/c^{2})");
4687     fhNCellMassEHighNLocMaxNMCPi0->SetXTitle("n cells");
4688     outputContainer->Add(fhNCellMassEHighNLocMaxNMCPi0) ;
4689     
4690     fhNCellMassELowNLocMaxNMCPi0 = new TH2F("hNCellMassELowNLocMaxNMCPi0","n cells vs mass for MC pi0, low energy, NLM>2",ncbins,ncmin,ncmax,mbins,mmin,mmax);
4691     fhNCellMassELowNLocMaxNMCPi0->SetYTitle("M (GeV/c^{2})");
4692     fhNCellMassELowNLocMaxNMCPi0->SetXTitle("n cells");
4693     outputContainer->Add(fhNCellMassELowNLocMaxNMCPi0) ;
4694     
4695     fhNCellM02EHighNLocMaxNMCPi0 = new TH2F("hNCellM02EHighNLocMaxNMCPi0","n cells vs #lambda_{0}^{2} for MC pi0, high energy, NLM>2",ncbins,ncmin,ncmax,ssbins,ssmin,ssmax);
4696     fhNCellM02EHighNLocMaxNMCPi0->SetYTitle("#lambda_{0}^{2}");
4697     fhNCellM02EHighNLocMaxNMCPi0->SetXTitle("n cells");
4698     outputContainer->Add(fhNCellM02EHighNLocMaxNMCPi0) ;
4699     
4700     fhNCellM02ELowNLocMaxNMCPi0 = new TH2F("hNCellM02ELowNLocMaxNMCPi0","n cells vs #lambda_{0}^{2} for MC pi0, low energy, NLM>2",ncbins,ncmin,ncmax,ssbins,ssmin,ssmax);
4701     fhNCellM02ELowNLocMaxNMCPi0->SetYTitle("#lambda_{0}^{2}");
4702     fhNCellM02ELowNLocMaxNMCPi0->SetXTitle("n cells");
4703     outputContainer->Add(fhNCellM02ELowNLocMaxNMCPi0) ;
4704     
4705   }
4706   
4707   if(IsDataMC() && fFillMCOverlapHisto)
4708   {
4709     for(Int_t i = 1; i < n; i++)
4710     {
4711       for(Int_t j = 0; j < 3; j++)
4712       {
4713         fhMCENOverlaps[j][i]     = new TH2F(Form("hMCENOverlapsNLocMax%s%s",snlm[j].Data(),pname[i].Data()),
4714                                             Form("# overlaps vs E for NLM=%s, %s",snlm[j].Data(),ptype[i].Data()),
4715                                             nptbins,ptmin,ptmax,10,0,10);
4716         fhMCENOverlaps[j][i]   ->SetYTitle("# overlaps");
4717         fhMCENOverlaps[j][i]   ->SetXTitle("E (GeV)");
4718         outputContainer->Add(fhMCENOverlaps[j][i]) ;
4719         
4720         fhMCEM02Overlap0[j][i]     = new TH2F(Form("hMCEM02Overlap0NLocMax%s%s",snlm[j].Data(),pname[i].Data()),
4721                                               Form("Overlap 0, #lambda_{0}^{2} vs E for NLM=%s, %s",snlm[j].Data(),ptype[i].Data()),
4722                                               nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
4723         fhMCEM02Overlap0[j][i]   ->SetYTitle("#lambda_{0}^{2}");
4724         fhMCEM02Overlap0[j][i]   ->SetXTitle("E (GeV)");
4725         outputContainer->Add(fhMCEM02Overlap0[j][i]) ;
4726         
4727         fhMCEM02Overlap1[j][i]     = new TH2F(Form("hMCEM02Overlap1NLocMax%s%s",snlm[j].Data(), pname[i].Data()),
4728                                               Form("Overlap 1, #lambda_{0}^{2} vs E for NLM=%s, %s",snlm[j].Data(),ptype[i].Data()),
4729                                               nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
4730         fhMCEM02Overlap1[j][i]   ->SetYTitle("#lambda_{0}^{2}");
4731         fhMCEM02Overlap1[j][i]   ->SetXTitle("E (GeV)");
4732         outputContainer->Add(fhMCEM02Overlap1[j][i]) ;
4733         
4734         fhMCEM02OverlapN[j][i]     = new TH2F(Form("hMCEM02OverlapNNLocMax%s%s",snlm[j].Data(), pname[i].Data()),
4735                                               Form("Overlap N, #lambda_{0}^{2} vs E for NLM=%s %s",snlm[j].Data(),ptype[i].Data()),
4736                                               nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
4737         fhMCEM02OverlapN[j][i]   ->SetYTitle("#lambda_{0}^{2}");
4738         fhMCEM02OverlapN[j][i]   ->SetXTitle("E (GeV)");
4739         outputContainer->Add(fhMCEM02OverlapN[j][i]) ;
4740         
4741         fhMCEMassOverlap0[j][i]     = new TH2F(Form("hMCEMassOverlap0NLocMax%s%s",snlm[j].Data(),pname[i].Data()),
4742                                                Form("Overlap 0, Mass vs E for NLM=%s, %s",snlm[j].Data(),ptype[i].Data()),
4743                                                nptbins,ptmin,ptmax,mbins,mmin,mmax);
4744         fhMCEMassOverlap0[j][i]   ->SetYTitle("Mass (GeV/c^{2}");
4745         fhMCEMassOverlap0[j][i]   ->SetXTitle("E (GeV)");
4746         outputContainer->Add(fhMCEMassOverlap0[j][i]) ;
4747         
4748         fhMCEMassOverlap1[j][i]     = new TH2F(Form("hMCEMassOverlap1NLocMax%s%s",snlm[j].Data(), pname[i].Data()),
4749                                                Form("Overalap 1, Mass vs E for NLM=%s, %s",snlm[j].Data(),ptype[i].Data()),
4750                                                nptbins,ptmin,ptmax,mbins,mmin,mmax);
4751         fhMCEMassOverlap1[j][i]   ->SetYTitle("Mass (GeV/c^{2}");
4752         fhMCEMassOverlap1[j][i]   ->SetXTitle("E (GeV)");
4753         outputContainer->Add(fhMCEMassOverlap1[j][i]) ;
4754         
4755         fhMCEMassOverlapN[j][i]     = new TH2F(Form("hMCEMassOverlapNNLocMax%s%s",snlm[j].Data(), pname[i].Data()),
4756                                                Form("Overlap N, Mass vs E for NLM=%s %s",snlm[j].Data(),ptype[i].Data()),
4757                                                nptbins,ptmin,ptmax,mbins,mmin,mmax);
4758         fhMCEMassOverlapN[j][i]   ->SetYTitle("Mass (GeV/c^{2})");
4759         fhMCEMassOverlapN[j][i]   ->SetXTitle("E (GeV)");
4760         outputContainer->Add(fhMCEMassOverlapN[j][i]) ;
4761         
4762         fhMCEAsymOverlap0[j][i]     = new TH2F(Form("hMCEAsymOverlap0NLocMax%s%s",snlm[j].Data(),pname[i].Data()),
4763                                                Form("Overlap 0, Asymmetry vs E for NLM=%s, %s",snlm[j].Data(),ptype[i].Data()),
4764                                                nptbins,ptmin,ptmax,100,0,1);
4765         fhMCEAsymOverlap0[j][i]   ->SetYTitle("|A|");
4766         fhMCEAsymOverlap0[j][i]   ->SetXTitle("E (GeV)");
4767         outputContainer->Add(fhMCEAsymOverlap0[j][i]) ;
4768         
4769         fhMCEAsymOverlap1[j][i]     = new TH2F(Form("hMCEAsymOverlap1NLocMax%s%s",snlm[j].Data(), pname[i].Data()),
4770                                                Form("Overalap 1, Asymmetry vs E for NLM=%s, %s",snlm[j].Data(),ptype[i].Data()),
4771                                                nptbins,ptmin,ptmax,100,0,1);
4772         fhMCEAsymOverlap1[j][i]   ->SetYTitle("|A|");
4773         fhMCEAsymOverlap1[j][i]   ->SetXTitle("E (GeV)");
4774         outputContainer->Add(fhMCEAsymOverlap1[j][i]) ;
4775         
4776         fhMCEAsymOverlapN[j][i]     = new TH2F(Form("hMCEAsymOverlapNNLocMax%s%s",snlm[j].Data(), pname[i].Data()),
4777                                                Form("Overlap N, Asymmetry vs E for NLM=%s %s",snlm[j].Data(),ptype[i].Data()),
4778                                                nptbins,ptmin,ptmax,100,0,1);
4779         fhMCEAsymOverlapN[j][i]   ->SetYTitle("|A|");
4780         fhMCEAsymOverlapN[j][i]   ->SetXTitle("E (GeV)");
4781         outputContainer->Add(fhMCEAsymOverlapN[j][i]) ;
4782
4783         
4784         if(fFillNCellHisto)
4785         {
4786           fhMCENCellOverlap0[j][i]     = new TH2F(Form("hMCENCellOverlap0NLocMax%s%s",snlm[j].Data(),pname[i].Data()),
4787                                                   Form("Overlap 0, n cells vs E for NLM=%s, %s",snlm[j].Data(),ptype[i].Data()),
4788                                                   nptbins,ptmin,ptmax,ncbins,ncmin,ncmax);
4789           fhMCENCellOverlap0[j][i]   ->SetYTitle("n cells");
4790           fhMCENCellOverlap0[j][i]   ->SetXTitle("E (GeV)");
4791           outputContainer->Add(fhMCENCellOverlap0[j][i]) ;
4792           
4793           fhMCENCellOverlap1[j][i]     = new TH2F(Form("hMCENCellOverlap1NLocMax%s%s",snlm[j].Data(), pname[i].Data()),
4794                                                   Form("Overalap 1, n cells vs E for NLM=%s, %s",snlm[j].Data(),ptype[i].Data()),
4795                                                   nptbins,ptmin,ptmax,ncbins,ncmin,ncmax);
4796           fhMCENCellOverlap1[j][i]   ->SetYTitle("n cells");
4797           fhMCENCellOverlap1[j][i]   ->SetXTitle("E (GeV)");
4798           outputContainer->Add(fhMCENCellOverlap1[j][i]) ;
4799           
4800           fhMCENCellOverlapN[j][i]     = new TH2F(Form("hMCENCellOverlapNNLocMax%s%s",snlm[j].Data(), pname[i].Data()),
4801                                                   Form("Overlap N, n cells vs E for NLM=%s %s",snlm[j].Data(),ptype[i].Data()),
4802                                                   nptbins,ptmin,ptmax,ncbins,ncmin,ncmax);
4803           fhMCENCellOverlapN[j][i]   ->SetYTitle("n cells");
4804           fhMCENCellOverlapN[j][i]   ->SetXTitle("E (GeV)");
4805           outputContainer->Add(fhMCENCellOverlapN[j][i]) ;
4806         }
4807         
4808         fhMCEEpriOverlap0[j][i]     = new TH2F(Form("hMCEEpriOverlap0NLocMax%s%s",snlm[j].Data(),pname[i].Data()),
4809                                                Form("Overlap 0, E reco vs E prim for NLM=%s, %s",snlm[j].Data(),ptype[i].Data()),
4810                                                nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
4811         fhMCEEpriOverlap0[j][i]   ->SetYTitle("E_{gen} (GeV)");
4812         fhMCEEpriOverlap0[j][i]   ->SetXTitle("E_{reco} (GeV)");
4813         outputContainer->Add(fhMCEEpriOverlap0[j][i]) ;
4814         
4815         fhMCEEpriOverlap1[j][i]     = new TH2F(Form("hMCEEpriOverlap1NLocMax%s%s",snlm[j].Data(), pname[i].Data()),
4816                                                Form("Overalap 1, E reco vs E prim for NLM=%s, %s",snlm[j].Data(),ptype[i].Data()),
4817                                                nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
4818         fhMCEEpriOverlap1[j][i]   ->SetYTitle("E_{gen} (GeV)");
4819         fhMCEEpriOverlap1[j][i]   ->SetXTitle("E_{reco} (GeV)");
4820         outputContainer->Add(fhMCEEpriOverlap1[j][i]) ;
4821         
4822         fhMCEEpriOverlapN[j][i]     = new TH2F(Form("hMCEEpriOverlapNNLocMax%s%s",snlm[j].Data(), pname[i].Data()),
4823                                                Form("Overlap N, E reco vs E prim for NLM=%s %s",snlm[j].Data(),ptype[i].Data()),
4824                                                nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
4825         fhMCEEpriOverlapN[j][i]   ->SetYTitle("E_{gen} (GeV)");
4826         fhMCEEpriOverlapN[j][i]   ->SetXTitle("E_{reco} (GeV)");
4827         outputContainer->Add(fhMCEEpriOverlapN[j][i]) ;
4828         
4829         
4830         fhMCEEpriOverlap0IdPi0[j][i]     = new TH2F(Form("hMCEEpriOverlap0IdPi0NLocMax%s%s",snlm[j].Data(),pname[i].Data()),
4831                                                Form("Overlap 0, E reco vs E prim for NLM=%s, %s",snlm[j].Data(),ptype[i].Data()),
4832                                                nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
4833         fhMCEEpriOverlap0IdPi0[j][i]   ->SetYTitle("E_{gen} (GeV)");
4834         fhMCEEpriOverlap0IdPi0[j][i]   ->SetXTitle("E_{reco} (GeV)");
4835         outputContainer->Add(fhMCEEpriOverlap0IdPi0[j][i]) ;
4836         
4837         fhMCEEpriOverlap1IdPi0[j][i]     = new TH2F(Form("hMCEEpriOverlap1IdPi0NLocMax%s%s",snlm[j].Data(), pname[i].Data()),
4838                                                Form("Overalap 1, E reco vs E prim for NLM=%s, %s",snlm[j].Data(),ptype[i].Data()),
4839                                                nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
4840         fhMCEEpriOverlap1IdPi0[j][i]   ->SetYTitle("E_{gen} (GeV)");
4841         fhMCEEpriOverlap1IdPi0[j][i]   ->SetXTitle("E_{reco} (GeV)");
4842         outputContainer->Add(fhMCEEpriOverlap1IdPi0[j][i]) ;
4843         
4844         fhMCEEpriOverlapNIdPi0[j][i]     = new TH2F(Form("hMCEEpriOverlapNIdPi0NLocMax%s%s",snlm[j].Data(), pname[i].Data()),
4845                                                Form("Overlap N, E reco vs E prim for NLM=%s %s",snlm[j].Data(),ptype[i].Data()),
4846                                                nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
4847         fhMCEEpriOverlapNIdPi0[j][i]   ->SetYTitle("E_{gen} (GeV)");
4848         fhMCEEpriOverlapNIdPi0[j][i]   ->SetXTitle("E_{reco} (GeV)");
4849         outputContainer->Add(fhMCEEpriOverlapNIdPi0[j][i]) ;
4850
4851         
4852         fhMCESplitEFracOverlap0[j][i]     = new TH2F(Form("hMCESplitEFracOverlap0NLocMax%s%s",snlm[j].Data(),pname[i].Data()),
4853                                                      Form("Overlap 0, SplitEFrac vs E for NLM=%s, %s",snlm[j].Data(),ptype[i].Data()),
4854                                                      nptbins,ptmin,ptmax,120,0,1.2);
4855         fhMCESplitEFracOverlap0[j][i]   ->SetYTitle("(E_{split1}+E_{split2})/E_{cluster}");
4856         fhMCESplitEFracOverlap0[j][i]   ->SetXTitle("E (GeV)");
4857         outputContainer->Add(fhMCESplitEFracOverlap0[j][i]) ;
4858         
4859         fhMCESplitEFracOverlap1[j][i]     = new TH2F(Form("hMCESplitEFracOverlap1NLocMax%s%s",snlm[j].Data(), pname[i].Data()),
4860                                                      Form("Overalap 1, SplitEFrac vs E for NLM=%s, %s",snlm[j].Data(),ptype[i].Data()),
4861                                                      nptbins,ptmin,ptmax,120,0,1.2);
4862         fhMCESplitEFracOverlap1[j][i]   ->SetYTitle("(E_{split1}+E_{split2})/E_{cluster}");
4863         fhMCESplitEFracOverlap1[j][i]   ->SetXTitle("E (GeV)");
4864         outputContainer->Add(fhMCESplitEFracOverlap1[j][i]) ;
4865         
4866         fhMCESplitEFracOverlapN[j][i]     = new TH2F(Form("hMCESplitEFracOverlapNNLocMax%s%s",snlm[j].Data(), pname[i].Data()),
4867                                                      Form("Overlap N, SplitEFrac vs E for NLM=%s %s",snlm[j].Data(),ptype[i].Data()),
4868                                                      nptbins,ptmin,ptmax,120,0,1.2);
4869         fhMCESplitEFracOverlapN[j][i]   ->SetYTitle("(E_{split1}+E_{split2})/E_{cluster}");
4870         fhMCESplitEFracOverlapN[j][i]   ->SetXTitle("E (GeV)");
4871         outputContainer->Add(fhMCESplitEFracOverlapN[j][i]) ;
4872         
4873         if(i < 5)
4874         {
4875           fhMCPi0MassM02Overlap0[j][i-1]  = new TH2F(Form("hMCPi0MassM02Overlap0NLocMax%sEbin%d",snlm[j].Data(),i-1),
4876                                                      Form("Overlap 0, Mass vs #lambda_{0}^{2}, NLM=%s, %s",snlm[j].Data(),sEBin[i-1].Data()),
4877                                                      ssbins,ssmin,ssmax,mbins,mmin,mmax);
4878           fhMCPi0MassM02Overlap0[j][i-1]->SetYTitle("M (GeV/c^{2})");
4879           fhMCPi0MassM02Overlap0[j][i-1]->SetXTitle("#lambda_{0}^{2}");
4880           outputContainer->Add(fhMCPi0MassM02Overlap0[j][i-1]) ;
4881           
4882           fhMCPi0MassM02Overlap1[j][i-1]  = new TH2F(Form("hMCPi0MassM02Overlap1NLocMax%sEbin%d",snlm[j].Data(),i-1),
4883                                                      Form("Overlap 1, Mass vs #lambda_{0}^{2}, NLM=%s, %s",snlm[j].Data(),sEBin[i-1].Data()),
4884                                                      ssbins,ssmin,ssmax,mbins,mmin,mmax);
4885           fhMCPi0MassM02Overlap1[j][i-1]->SetYTitle("M (GeV/c^{2})");
4886           fhMCPi0MassM02Overlap1[j][i-1]->SetXTitle("#lambda_{0}^{2}");
4887           outputContainer->Add(fhMCPi0MassM02Overlap1[j][i-1]) ;
4888           
4889           fhMCPi0MassM02OverlapN[j][i-1]  = new TH2F(Form("hMCPi0MassM02OverlapNNLocMax%sEbin%d",snlm[j].Data(),i-1),
4890                                                      Form("Overlap N, Mass vs #lambda_{0}^{2}, NLM=%s, %s",snlm[j].Data(),sEBin[i-1].Data()),
4891                                                      ssbins,ssmin,ssmax,mbins,mmin,mmax);
4892           fhMCPi0MassM02OverlapN[j][i-1]->SetYTitle("M (GeV/c^{2})");
4893           fhMCPi0MassM02OverlapN[j][i-1]->SetXTitle("#lambda_{0}^{2}");
4894           outputContainer->Add(fhMCPi0MassM02OverlapN[j][i-1]) ;
4895         }
4896         
4897         if(fFillTMHisto)
4898         {
4899           fhMCENOverlapsMatch[j][i]     = new TH2F(Form("hMCENOverlapsNLocMax%s%sMatched",snlm[j].Data(),pname[i].Data()),
4900                                                    Form("# overlaps vs E for NLM=%s, %s",snlm[j].Data(),ptype[i].Data()),
4901                                                    nptbins,ptmin,ptmax,10,0,10);
4902           fhMCENOverlapsMatch[j][i]   ->SetYTitle("# overlaps");
4903           fhMCENOverlapsMatch[j][i]   ->SetXTitle("E (GeV)");
4904           outputContainer->Add(fhMCENOverlapsMatch[j][i]) ;
4905           
4906           fhMCEM02Overlap0Match[j][i]     = new TH2F(Form("hMCEM02Overlap0NLocMax%s%sMatched",snlm[j].Data(),pname[i].Data()),
4907                                                      Form("#lambda_{0}^{2} vs E for NLM=%s, %s, Track Matched",snlm[j].Data(),ptype[i].Data()),
4908                                                      nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
4909           fhMCEM02Overlap0Match[j][i]   ->SetYTitle("#lambda_{0}^{2}");
4910           fhMCEM02Overlap0Match[j][i]   ->SetXTitle("E (GeV)");
4911           outputContainer->Add(fhMCEM02Overlap0Match[j][i]) ;
4912           
4913           fhMCEM02Overlap1Match[j][i]     = new TH2F(Form("hMCEM02Overlap1NLocMax%s%sMatched",snlm[j].Data(), pname[i].Data()),
4914                                                      Form("#lambda_{0}^{2} vs E for NLM=%s, %s, Track Matched",snlm[j].Data(),ptype[i].Data()),
4915                                                      nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
4916           fhMCEM02Overlap1Match[j][i]   ->SetYTitle("#lambda_{0}^{2}");
4917           fhMCEM02Overlap1Match[j][i]   ->SetXTitle("E (GeV)");
4918           outputContainer->Add(fhMCEM02Overlap1Match[j][i]) ;
4919           
4920           fhMCEM02OverlapNMatch[j][i]     = new TH2F(Form("hMCEM02OverlapNNLocMax%s%sMatched",snlm[j].Data(), pname[i].Data()),
4921                                                      Form("#lambda_{0}^{2} vs E for NLM=%s, %s, Track Matched",snlm[j].Data(),ptype[i].Data()),
4922                                                      nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
4923           fhMCEM02OverlapNMatch[j][i]   ->SetYTitle("#lambda_{0}^{2}");
4924           fhMCEM02OverlapNMatch[j][i]   ->SetXTitle("E (GeV)");
4925           outputContainer->Add(fhMCEM02OverlapNMatch[j][i]) ;
4926           
4927           fhMCEMassOverlap0Match[j][i]     = new TH2F(Form("hMCEMassOverlap0NLocMax%s%sMatched",snlm[j].Data(),pname[i].Data()),
4928                                                       Form("Mass vs E for NLM=%s, %s, Track Matched",snlm[j].Data(),ptype[i].Data()),
4929                                                       nptbins,ptmin,ptmax,mbins,mmin,mmax);
4930           fhMCEMassOverlap0Match[j][i]   ->SetYTitle("Mass (GeV/c^{2}");
4931           fhMCEMassOverlap0Match[j][i]   ->SetXTitle("E (GeV)");
4932           outputContainer->Add(fhMCEMassOverlap0Match[j][i]) ;
4933           
4934           fhMCEMassOverlap1Match[j][i]     = new TH2F(Form("hMCEMassOverlap1NLocMax%s%sMatched",snlm[j].Data(), pname[i].Data()),
4935                                                       Form("Mass vs E for NLM=%s, %s, Track Matched",snlm[j].Data(),ptype[i].Data()),
4936                                                       nptbins,ptmin,ptmax,mbins,mmin,mmax);
4937           fhMCEMassOverlap1Match[j][i]   ->SetYTitle("Mass (GeV/c^{2}");
4938           fhMCEMassOverlap1Match[j][i]   ->SetXTitle("E (GeV)");
4939           outputContainer->Add(fhMCEMassOverlap1Match[j][i]) ;
4940           
4941           fhMCEMassOverlapNMatch[j][i]     = new TH2F(Form("hMCEMassOverlapNNLocMax%s%sMatched",snlm[j].Data(), pname[i].Data()),
4942                                                       Form("Mass vs E for NLM=%s, %s, Track Matched",snlm[j].Data(),ptype[i].Data()),
4943                                                       nptbins,ptmin,ptmax,mbins,mmin,mmax);
4944           fhMCEMassOverlapNMatch[j][i]   ->SetYTitle("Mass (GeV/c^{2}");
4945           fhMCEMassOverlapNMatch[j][i]   ->SetXTitle("E (GeV)");
4946           outputContainer->Add(fhMCEMassOverlapNMatch[j][i]) ;
4947           
4948           
4949           fhMCEAsymOverlap0Match[j][i]     = new TH2F(Form("hMCEAsymOverlap0NLocMax%s%sMatched",snlm[j].Data(),pname[i].Data()),
4950                                                       Form("Overlap 0, Asymmetry vs E for NLM=%s, %s, Track Matched",snlm[j].Data(),ptype[i].Data()),
4951                                                       nptbins,ptmin,ptmax,100,0,1);
4952           fhMCEAsymOverlap0Match[j][i]   ->SetYTitle("|A|");
4953           fhMCEAsymOverlap0Match[j][i]   ->SetXTitle("E (GeV)");
4954           outputContainer->Add(fhMCEAsymOverlap0Match[j][i]) ;
4955           
4956           fhMCEAsymOverlap1Match[j][i]     = new TH2F(Form("hMCEAsymOverlap1NLocMax%s%sMatched",snlm[j].Data(), pname[i].Data()),
4957                                                       Form("Overalap 1, Asymmetry vs E for NLM=%s, %s, Track Matched",snlm[j].Data(),ptype[i].Data()),
4958                                                       nptbins,ptmin,ptmax,100,0,1);
4959           fhMCEAsymOverlap1Match[j][i]   ->SetYTitle("|A|");
4960           fhMCEAsymOverlap1Match[j][i]   ->SetXTitle("E (GeV)");
4961           outputContainer->Add(fhMCEAsymOverlap1Match[j][i]) ;
4962           
4963           fhMCEAsymOverlapNMatch[j][i]     = new TH2F(Form("hMCEAsymOverlapNNLocMax%s%sMatched",snlm[j].Data(), pname[i].Data()),
4964                                                       Form("Overlap N, Asymmetry vs E for NLM=%s %s, Track Matched",snlm[j].Data(),ptype[i].Data()),
4965                                                       nptbins,ptmin,ptmax,100,0,1);
4966           fhMCEAsymOverlapNMatch[j][i]   ->SetYTitle("|A|");
4967           fhMCEAsymOverlapNMatch[j][i]   ->SetXTitle("E (GeV)");
4968           outputContainer->Add(fhMCEAsymOverlapNMatch[j][i]) ;
4969
4970           
4971           fhMCENCellOverlap0Match[j][i]     = new TH2F(Form("hMCENCellOverlap0NLocMax%s%sMatched",snlm[j].Data(),pname[i].Data()),
4972                                                       Form("Overlap 0, n cells vs E for NLM=%s, %s, Track Matched",snlm[j].Data(),ptype[i].Data()),
4973                                                       nptbins,ptmin,ptmax,ncbins,ncmin,ncmax);
4974           fhMCENCellOverlap0Match[j][i]   ->SetYTitle("n cells");
4975           fhMCENCellOverlap0Match[j][i]   ->SetXTitle("E (GeV)");
4976           outputContainer->Add(fhMCENCellOverlap0Match[j][i]) ;
4977           
4978           fhMCENCellOverlap1Match[j][i]     = new TH2F(Form("hMCENCellOverlap1NLocMax%s%sMatched",snlm[j].Data(), pname[i].Data()),
4979                                                       Form("Overalap 1, n cell vs E for NLM=%s, %s, Track Matched",snlm[j].Data(),ptype[i].Data()),
4980                                                       nptbins,ptmin,ptmax,ncbins,ncmin,ncmax);
4981           fhMCENCellOverlap1Match[j][i]   ->SetYTitle("n cells");
4982           fhMCENCellOverlap1Match[j][i]   ->SetXTitle("E (GeV)");
4983           outputContainer->Add(fhMCENCellOverlap1Match[j][i]) ;
4984           
4985           fhMCENCellOverlapNMatch[j][i]     = new TH2F(Form("hMCENCellOverlapNNLocMax%s%sMatched",snlm[j].Data(), pname[i].Data()),
4986                                                       Form("Overlap N, n cell vs E for NLM=%s %s, Track Matched",snlm[j].Data(),ptype[i].Data()),
4987                                                       nptbins,ptmin,ptmax,ncbins,ncmin,ncmax);
4988           fhMCENCellOverlapNMatch[j][i]   ->SetYTitle("n cells");
4989           fhMCENCellOverlapNMatch[j][i]   ->SetXTitle("E (GeV)");
4990           outputContainer->Add(fhMCENCellOverlapNMatch[j][i]) ;
4991
4992           fhMCEEpriOverlap0Match[j][i]     = new TH2F(Form("hMCEEpriOverlap0NLocMax%s%sMatched",snlm[j].Data(),pname[i].Data()),
4993                                                       Form("Overlap 0, Asymmetry vs E for NLM=%s, %s, Track Matched",snlm[j].Data(),ptype[i].Data()),
4994                                                       nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
4995           fhMCEEpriOverlap0Match[j][i]   ->SetYTitle("E_{gen} (GeV)");
4996           fhMCEEpriOverlap0Match[j][i]   ->SetXTitle("E_{reco} (GeV)");
4997           outputContainer->Add(fhMCEEpriOverlap0Match[j][i]) ;
4998           
4999           fhMCEEpriOverlap1Match[j][i]     = new TH2F(Form("hMCEEpriOverlap1NLocMax%s%sMatched",snlm[j].Data(), pname[i].Data()),
5000                                                       Form("Overalap 1, Asymmetry vs E for NLM=%s, %s, Track Matched",snlm[j].Data(),ptype[i].Data()),
5001                                                       nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
5002           fhMCEEpriOverlap1Match[j][i]   ->SetYTitle("E_{gen} (GeV)");
5003           fhMCEEpriOverlap1Match[j][i]   ->SetXTitle("E_{reco} (GeV)");
5004           outputContainer->Add(fhMCEEpriOverlap1Match[j][i]) ;
5005           
5006           fhMCEEpriOverlapNMatch[j][i]     = new TH2F(Form("hMCEEpriOverlapNNLocMax%s%sMatched",snlm[j].Data(), pname[i].Data()),
5007                                                       Form("Overlap N, Asymmetry vs E for NLM=%s %s, Track Matched",snlm[j].Data(),ptype[i].Data()),
5008                                                       nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
5009           fhMCEEpriOverlapNMatch[j][i]   ->SetYTitle("E_{gen} (GeV)");
5010           fhMCEEpriOverlapNMatch[j][i]   ->SetXTitle("E_{reco} (GeV)");
5011           outputContainer->Add(fhMCEEpriOverlapNMatch[j][i]) ;
5012           
5013           
5014           fhMCESplitEFracOverlap0Match[j][i]     = new TH2F(Form("hMCESplitEFracOverlap0NLocMax%s%sMatched",snlm[j].Data(),pname[i].Data()),
5015                                                             Form("SplitEFrac vs E for NLM=%s, %s, Track Matched",snlm[j].Data(),ptype[i].Data()),
5016                                                             nptbins,ptmin,ptmax,120,0,1.2);
5017           fhMCESplitEFracOverlap0Match[j][i]   ->SetYTitle("(E_{split1}+E_{split2})/E_{cluster}");
5018           fhMCESplitEFracOverlap0Match[j][i]   ->SetXTitle("E (GeV)");
5019           outputContainer->Add(fhMCESplitEFracOverlap0Match[j][i]) ;
5020           
5021           fhMCESplitEFracOverlap1Match[j][i]     = new TH2F(Form("hMCESplitEFracOverlap1NLocMax%s%sMatched",snlm[j].Data(), pname[i].Data()),
5022                                                             Form("SplitEFrac vs E for NLM=%s, %s, Track Matched",snlm[j].Data(),ptype[i].Data()),
5023                                                             nptbins,ptmin,ptmax,120,0,1.2);
5024           fhMCESplitEFracOverlap1Match[j][i]   ->SetYTitle("(E_{split1}+E_{split2})/E_{cluster}");
5025           fhMCESplitEFracOverlap1Match[j][i]   ->SetXTitle("E (GeV)");
5026           outputContainer->Add(fhMCESplitEFracOverlap1Match[j][i]) ;
5027           
5028           fhMCESplitEFracOverlapNMatch[j][i]     = new TH2F(Form("hMCESplitEFracOverlapNNLocMax%s%sMatched",snlm[j].Data(), pname[i].Data()),
5029                                                             Form("SplitEFrac vs E for NLM=%s, %s, Track Matched",snlm[j].Data(),ptype[i].Data()),
5030                                                             nptbins,ptmin,ptmax,120,0,1.2);
5031           fhMCESplitEFracOverlapNMatch[j][i]   ->SetYTitle("(E_{split1}+E_{split2})/E_{cluster}");
5032           fhMCESplitEFracOverlapNMatch[j][i]   ->SetXTitle("E (GeV)");
5033           outputContainer->Add(fhMCESplitEFracOverlapNMatch[j][i]) ;
5034           
5035           
5036           if(i < 5)
5037           {
5038             fhMCPi0MassM02Overlap0Match[j][i-1]  = new TH2F(Form("hMCPi0MassM02Overlap0NLocMax%sEbin%dMatched",snlm[j].Data(),i-1),
5039                                                             Form("Overlap 0, Mass vs #lambda_{0}^{2}, NLM=%s, %s, Track Matched",snlm[j].Data(),sEBin[i-1].Data()),
5040                                                             ssbins,ssmin,ssmax,mbins,mmin,mmax);
5041             fhMCPi0MassM02Overlap0Match[j][i-1]->SetYTitle("M (GeV/c^{2})");
5042             fhMCPi0MassM02Overlap0Match[j][i-1]->SetXTitle("#lambda_{0}^{2}");
5043             outputContainer->Add(fhMCPi0MassM02Overlap0Match[j][i-1]) ;
5044             
5045             fhMCPi0MassM02Overlap1Match[j][i-1]  = new TH2F(Form("hMCPi0MassM02Overlap1NLocMax%sEbin%dMatched",snlm[j].Data(),i-1),
5046                                                             Form("Overlap 1, Mass vs #lambda_{0}^{2}, NLM=%s, %s, Track Matched",snlm[j].Data(),sEBin[i-1].Data()),
5047                                                             ssbins,ssmin,ssmax,mbins,mmin,mmax);
5048             fhMCPi0MassM02Overlap1Match[j][i-1]->SetYTitle("M (GeV/c^{2})");
5049             fhMCPi0MassM02Overlap1Match[j][i-1]->SetXTitle("#lambda_{0}^{2}");
5050             outputContainer->Add(fhMCPi0MassM02Overlap1Match[j][i-1]) ;
5051             
5052             fhMCPi0MassM02OverlapNMatch[j][i-1]  = new TH2F(Form("hMCPi0MassM02OverlapNNLocMax%sEbin%dMatched",snlm[j].Data(),i-1),
5053                                                             Form("Overlap N, Mass vs #lambda_{0}^{2}, NLM=%s, %s, Track Matched",snlm[j].Data(),sEBin[i-1].Data()),
5054                                                             ssbins,ssmin,ssmax,mbins,mmin,mmax);
5055             fhMCPi0MassM02OverlapNMatch[j][i-1]->SetYTitle("M (GeV/c^{2})");
5056             fhMCPi0MassM02OverlapNMatch[j][i-1]->SetXTitle("#lambda_{0}^{2}");
5057             outputContainer->Add(fhMCPi0MassM02OverlapNMatch[j][i-1]) ;
5058             
5059           }
5060           
5061         }
5062       }
5063     }
5064     
5065     fhMCPi0HighNLMPair    = new TH2F("hMCPi0HighNLMPair","NLM vs E for merged pi0 cluster, high energy NLM pair are decays",
5066                                      nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5067     fhMCPi0HighNLMPair   ->SetYTitle("N maxima");
5068     fhMCPi0HighNLMPair   ->SetXTitle("E (GeV)");
5069     outputContainer->Add(fhMCPi0HighNLMPair) ;
5070     
5071     fhMCPi0LowNLMPair     = new TH2F("hMCPi0LowNLMPair","NLM vs E for merged pi0 cluster, lower energy NLM pair are decays",
5072                                      nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5073     fhMCPi0LowNLMPair   ->SetYTitle("N maxima");
5074     fhMCPi0LowNLMPair   ->SetXTitle("E (GeV)");
5075     outputContainer->Add(fhMCPi0LowNLMPair) ;
5076     
5077     fhMCPi0AnyNLMPair     = new TH2F("hMCPi0AnyNLMPair","NLM vs E for merged pi0 cluster, both high and other energy NLM pair are decays",
5078                                      nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5079     fhMCPi0AnyNLMPair   ->SetYTitle("N maxima");
5080     fhMCPi0AnyNLMPair   ->SetXTitle("E (GeV)");
5081     outputContainer->Add(fhMCPi0AnyNLMPair) ;
5082     
5083     fhMCPi0NoneNLMPair     = new TH2F("hMCPi0NoneNLMPair","NLM vs E for merged pi0 cluster, no NLM pair are decays",
5084                                       nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5085     fhMCPi0NoneNLMPair   ->SetYTitle("N maxima");
5086     fhMCPi0NoneNLMPair   ->SetXTitle("E (GeV)");
5087     outputContainer->Add(fhMCPi0NoneNLMPair) ;
5088     
5089     
5090     fhMCPi0HighNLMPairNoMCMatch    = new TH2F("hMCPi0HighNLMPairNoMCMatch","NLM vs E for merged pi0 cluster, high energy NLM pair are decays",
5091                                               nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5092     fhMCPi0HighNLMPairNoMCMatch   ->SetYTitle("N maxima");
5093     fhMCPi0HighNLMPairNoMCMatch   ->SetXTitle("E (GeV)");
5094     outputContainer->Add(fhMCPi0HighNLMPairNoMCMatch) ;
5095     
5096     fhMCPi0LowNLMPairNoMCMatch     = new TH2F("hMCPi0LowNLMPairNoMCMatch","NLM vs E for merged pi0 cluster, lower energy NLM pair are decays",
5097                                               nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5098     fhMCPi0LowNLMPairNoMCMatch   ->SetYTitle("N maxima");
5099     fhMCPi0LowNLMPairNoMCMatch   ->SetXTitle("E (GeV)");
5100     outputContainer->Add(fhMCPi0LowNLMPairNoMCMatch) ;
5101     
5102     fhMCPi0AnyNLMPairNoMCMatch     = new TH2F("hMCPi0AnyNLMPairNoMCMatch","NLM vs E for merged pi0 cluster, both high and other energy NLM pair are decays",
5103                                               nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5104     fhMCPi0AnyNLMPairNoMCMatch   ->SetYTitle("N maxima");
5105     fhMCPi0AnyNLMPairNoMCMatch   ->SetXTitle("E (GeV)");
5106     outputContainer->Add(fhMCPi0AnyNLMPairNoMCMatch) ;
5107     
5108     fhMCPi0NoneNLMPairNoMCMatch     = new TH2F("hMCPi0NoneNLMPairNoMCMatch","NLM vs E for merged pi0 cluster, no NLM pair are decays",
5109                                                nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5110     fhMCPi0NoneNLMPairNoMCMatch   ->SetYTitle("N maxima");
5111     fhMCPi0NoneNLMPairNoMCMatch   ->SetXTitle("E (GeV)");
5112     outputContainer->Add(fhMCPi0NoneNLMPairNoMCMatch) ;
5113     
5114     
5115     fhMCPi0HighNLMPairOverlap    = new TH2F("hMCPi0HighNLMPairOverlap","NLM vs E for merged pi0 cluster, high energy NLM pair are decays",
5116                                             nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5117     fhMCPi0HighNLMPairOverlap   ->SetYTitle("N maxima");
5118     fhMCPi0HighNLMPairOverlap   ->SetXTitle("E (GeV)");
5119     outputContainer->Add(fhMCPi0HighNLMPairOverlap) ;
5120     
5121     fhMCPi0LowNLMPairOverlap     = new TH2F("hMCPi0LowNLMPairOverlap","NLM vs E for merged pi0 cluster, lower energy NLM pair are decays",
5122                                             nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5123     fhMCPi0LowNLMPairOverlap   ->SetYTitle("N maxima");
5124     fhMCPi0LowNLMPairOverlap   ->SetXTitle("E (GeV)");
5125     outputContainer->Add(fhMCPi0LowNLMPairOverlap) ;
5126     
5127     fhMCPi0AnyNLMPairOverlap     = new TH2F("hMCPi0AnyNLMPairOverlap","NLM vs E for merged pi0 cluster, both high and other energy NLM pair are decays",
5128                                             nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5129     fhMCPi0AnyNLMPairOverlap   ->SetYTitle("N maxima");
5130     fhMCPi0AnyNLMPairOverlap   ->SetXTitle("E (GeV)");
5131     outputContainer->Add(fhMCPi0AnyNLMPairOverlap) ;
5132     
5133     fhMCPi0NoneNLMPairOverlap     = new TH2F("hMCPi0NoneNLMPairOverlap","NLM vs E for merged pi0 cluster, no NLM pair are decays",
5134                                              nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5135     fhMCPi0NoneNLMPairOverlap   ->SetYTitle("N maxima");
5136     fhMCPi0NoneNLMPairOverlap   ->SetXTitle("E (GeV)");
5137     outputContainer->Add(fhMCPi0NoneNLMPairOverlap) ;
5138     
5139     fhMCPi0HighNLMPairNoMCMatchOverlap    = new TH2F("hMCPi0HighNLMPairNoMCMatchOverlap","NLM vs E for merged pi0 cluster, high energy NLM pair are decays",
5140                                                      nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5141     fhMCPi0HighNLMPairNoMCMatchOverlap   ->SetYTitle("N maxima");
5142     fhMCPi0HighNLMPairNoMCMatchOverlap   ->SetXTitle("E (GeV)");
5143     outputContainer->Add(fhMCPi0HighNLMPairNoMCMatchOverlap) ;
5144     
5145     fhMCPi0LowNLMPairNoMCMatchOverlap     = new TH2F("hMCPi0LowNLMPairNoMCMatchOverlap","NLM vs E for merged pi0 cluster, lower energy NLM pair are decays",
5146                                                      nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5147     fhMCPi0LowNLMPairNoMCMatchOverlap   ->SetYTitle("N maxima");
5148     fhMCPi0LowNLMPairNoMCMatchOverlap   ->SetXTitle("E (GeV)");
5149     outputContainer->Add(fhMCPi0LowNLMPairNoMCMatchOverlap) ;
5150     
5151     fhMCPi0AnyNLMPairNoMCMatchOverlap     = new TH2F("hMCPi0AnyNLMPairNoMCMatchOverlap","NLM vs E for merged pi0 cluster, both high and other energy NLM pair are decays",
5152                                                      nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5153     fhMCPi0AnyNLMPairNoMCMatchOverlap   ->SetYTitle("N maxima");
5154     fhMCPi0AnyNLMPairNoMCMatchOverlap   ->SetXTitle("E (GeV)");
5155     outputContainer->Add(fhMCPi0AnyNLMPairNoMCMatchOverlap) ;
5156     
5157     fhMCPi0NoneNLMPairNoMCMatchOverlap     = new TH2F("hMCPi0NoneNLMPairNoMCMatchOverlap","NLM vs E for merged pi0 cluster, no NLM pair are decays",
5158                                                       nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5159     fhMCPi0NoneNLMPairNoMCMatchOverlap   ->SetYTitle("N maxima");
5160     fhMCPi0NoneNLMPairNoMCMatchOverlap   ->SetXTitle("E (GeV)");
5161     outputContainer->Add(fhMCPi0NoneNLMPairNoMCMatchOverlap) ;
5162   
5163     
5164     fhMCPi0DecayPhotonHitHighLM    = new TH2F("hMCPi0DecayPhotonHitHighLM","NLM vs E for merged pi0 cluster, decay photon hit High Local Maxima",
5165                                               nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5166     fhMCPi0DecayPhotonHitHighLM    ->SetYTitle("N maxima");
5167     fhMCPi0DecayPhotonHitHighLM    ->SetXTitle("E (GeV)");
5168     outputContainer->Add(fhMCPi0DecayPhotonHitHighLM ) ;
5169     
5170     fhMCPi0DecayPhotonAdjHighLM    = new TH2F("hMCPi0DecayPhotonAdjHighLM","NLM vs E for merged pi0 cluster, decay photon hit cells adjacent to High Local Maxima",
5171                                               nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5172     fhMCPi0DecayPhotonAdjHighLM    ->SetYTitle("N maxima");
5173     fhMCPi0DecayPhotonAdjHighLM    ->SetXTitle("E (GeV)");
5174     outputContainer->Add(fhMCPi0DecayPhotonAdjHighLM ) ;
5175     
5176     fhMCPi0DecayPhotonHitOtherLM    = new TH2F("hMCPi0DecayPhotonHitOtherLM","NLM vs E for merged pi0 cluster, decay photon hit Other Local Maxima",
5177                                                nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5178     fhMCPi0DecayPhotonHitOtherLM    ->SetYTitle("N maxima");
5179     fhMCPi0DecayPhotonHitOtherLM    ->SetXTitle("E (GeV)");
5180     outputContainer->Add(fhMCPi0DecayPhotonHitOtherLM ) ;
5181     
5182     fhMCPi0DecayPhotonAdjOtherLM    = new TH2F("hMCPi0DecayPhotonAdjOtherLM","NLM vs E for merged pi0 cluster, decay photon hit cells adjacent to Other Local Maxima",
5183                                                nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5184     fhMCPi0DecayPhotonAdjOtherLM    ->SetYTitle("N maxima");
5185     fhMCPi0DecayPhotonAdjOtherLM    ->SetXTitle("E (GeV)");
5186     outputContainer->Add(fhMCPi0DecayPhotonAdjOtherLM ) ;
5187     
5188     fhMCPi0DecayPhotonAdjacent   = new TH2F("hMCPi0DecayPhotonAdjacent","NLM vs E for merged pi0 cluster, decay photon hit adjacent cells",
5189                                             nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5190     fhMCPi0DecayPhotonAdjacent    ->SetYTitle("N maxima");
5191     fhMCPi0DecayPhotonAdjacent    ->SetXTitle("E (GeV)");
5192     outputContainer->Add(fhMCPi0DecayPhotonAdjacent ) ;
5193     
5194     fhMCPi0DecayPhotonHitNoLM    = new TH2F("hMCPi0DecayPhotonHitNoLM","NLM vs E for merged pi0 cluster, decay photon do not hit Local Maxima",
5195                                             nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5196     fhMCPi0DecayPhotonHitNoLM    ->SetYTitle("N maxima");
5197     fhMCPi0DecayPhotonHitNoLM    ->SetXTitle("E (GeV)");
5198     outputContainer->Add(fhMCPi0DecayPhotonHitNoLM ) ;
5199     
5200     
5201     fhMCPi0DecayPhotonHitHighLMOverlap    = new TH2F("hMCPi0DecayPhotonHitHighLMOverlap","NLM vs E for merged pi0 cluster, decay photon hit High Local Maxima, there was an overlap",
5202                                                      nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5203     fhMCPi0DecayPhotonHitHighLMOverlap    ->SetYTitle("N maxima");
5204     fhMCPi0DecayPhotonHitHighLMOverlap    ->SetXTitle("E (GeV)");
5205     outputContainer->Add(fhMCPi0DecayPhotonHitHighLMOverlap ) ;
5206     
5207     fhMCPi0DecayPhotonAdjHighLMOverlap    = new TH2F("hMCPi0DecayPhotonAdjHighLMOverlap","NLM vs E for merged pi0 cluster, decay photon hit cells adjacent to High Local Maxima, there was an overlap",
5208                                                      nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5209     fhMCPi0DecayPhotonAdjHighLMOverlap    ->SetYTitle("N maxima");
5210     fhMCPi0DecayPhotonAdjHighLMOverlap    ->SetXTitle("E (GeV)");
5211     outputContainer->Add(fhMCPi0DecayPhotonAdjHighLMOverlap ) ;
5212     
5213     fhMCPi0DecayPhotonHitOtherLMOverlap    = new TH2F("hMCPi0DecayPhotonHitOtherLMOverlap","NLM vs E for merged pi0 cluster, decay photon hit Other Local Maxima, there was an overlap",
5214                                                       nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5215     fhMCPi0DecayPhotonHitOtherLMOverlap    ->SetYTitle("N maxima");
5216     fhMCPi0DecayPhotonHitOtherLMOverlap    ->SetXTitle("E (GeV)");
5217     outputContainer->Add(fhMCPi0DecayPhotonHitOtherLMOverlap ) ;
5218     
5219     fhMCPi0DecayPhotonAdjOtherLMOverlap    = new TH2F("hMCPi0DecayPhotonAdjOtherLMOverlap","NLM vs E for merged pi0 cluster, decay photon hit cells adjacent to Other Local Maxima, there was an overlap",
5220                                                       nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5221     fhMCPi0DecayPhotonAdjOtherLMOverlap    ->SetYTitle("N maxima");
5222     fhMCPi0DecayPhotonAdjOtherLMOverlap    ->SetXTitle("E (GeV)");
5223     outputContainer->Add(fhMCPi0DecayPhotonAdjOtherLMOverlap ) ;
5224     
5225     fhMCPi0DecayPhotonAdjacentOverlap   = new TH2F("hMCPi0DecayPhotonAdjacentOverlap","NLM vs E for merged pi0 cluster, decay photon hit adjacent cells, there was an overlap",
5226                                                    nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5227     fhMCPi0DecayPhotonAdjacentOverlap    ->SetYTitle("N maxima");
5228     fhMCPi0DecayPhotonAdjacentOverlap    ->SetXTitle("E (GeV)");
5229     outputContainer->Add(fhMCPi0DecayPhotonAdjacentOverlap ) ;
5230     
5231     fhMCPi0DecayPhotonHitNoLMOverlap    = new TH2F("hMCPi0DecayPhotonHitNoLMOverlap","NLM vs E for merged pi0 cluster, decay photon do not hit Local Maxima, there was an overlap",
5232                                                    nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
5233     fhMCPi0DecayPhotonHitNoLMOverlap    ->SetYTitle("N maxima");
5234     fhMCPi0DecayPhotonHitNoLMOverlap    ->SetXTitle("E (GeV)");
5235     outputContainer->Add(fhMCPi0DecayPhotonHitNoLMOverlap ) ;
5236     
5237     
5238     for(Int_t nlm = 0; nlm < 3; nlm++)
5239     {
5240       fhMCPi0DecayPhotonHitHighLMMass[nlm]  = new TH2F(Form("hMCPi0DecayPhotonHitHighLM%sMass",snlm[nlm].Data()),
5241                                                        Form("Mass vs E for merged pi0 cluster, NLM=%s, decay photon hit High Local Maxima",snlm[nlm].Data()),
5242                                                        nptbins,ptmin,ptmax,mbins,mmin,mmax);
5243       fhMCPi0DecayPhotonHitHighLMMass[nlm]  ->SetYTitle("Mass (MeV/c^{2})");
5244       fhMCPi0DecayPhotonHitHighLMMass[nlm]  ->SetXTitle("E (GeV)");
5245       outputContainer->Add(fhMCPi0DecayPhotonHitHighLMMass[nlm] ) ;
5246       
5247       fhMCPi0DecayPhotonAdjHighLMMass[nlm]  = new TH2F(Form("hMCPi0DecayPhotonAdjHighLM%sMass",snlm[nlm].Data()),
5248                                                        Form("Mass vs E for merged pi0 cluster, NLM=%s, decay photon hit cells adjacent to High Local Maxima",snlm[nlm].Data()),
5249                                                        nptbins,ptmin,ptmax,mbins,mmin,mmax);
5250       fhMCPi0DecayPhotonAdjHighLMMass[nlm]  ->SetYTitle("Mass (MeV/c^{2})");
5251       fhMCPi0DecayPhotonAdjHighLMMass[nlm]  ->SetXTitle("E (GeV)");
5252       outputContainer->Add(fhMCPi0DecayPhotonAdjHighLMMass[nlm] ) ;
5253       
5254       fhMCPi0DecayPhotonHitOtherLMMass[nlm]  = new TH2F(Form("hMCPi0DecayPhotonHitOtherLM%sMass",snlm[nlm].Data()),
5255                                                         Form("Mass vs E for merged pi0 cluster, NLM=%s, decay photon hit Other Local Maxima",snlm[nlm].Data()),
5256                                                         nptbins,ptmin,ptmax,mbins,mmin,mmax);
5257       fhMCPi0DecayPhotonHitOtherLMMass[nlm]  ->SetYTitle("Mass (MeV/c^{2})");
5258       fhMCPi0DecayPhotonHitOtherLMMass[nlm]  ->SetXTitle("E (GeV)");
5259       outputContainer->Add(fhMCPi0DecayPhotonHitOtherLMMass[nlm] ) ;
5260       
5261       fhMCPi0DecayPhotonAdjOtherLMMass[nlm]  = new TH2F(Form("hMCPi0DecayPhotonAdjOtherLM%sMass",snlm[nlm].Data()),
5262                                                         Form("Mass vs E for merged pi0 cluster, NLM=%s, decay photon hit cells adjacent to Other Local Maxima",snlm[nlm].Data()),
5263                                                         nptbins,ptmin,ptmax,mbins,mmin,mmax);
5264       fhMCPi0DecayPhotonAdjOtherLMMass[nlm]  ->SetYTitle("Mass (MeV/c^{2})");
5265       fhMCPi0DecayPhotonAdjOtherLMMass[nlm]  ->SetXTitle("E (GeV)");
5266       outputContainer->Add(fhMCPi0DecayPhotonAdjOtherLMMass[nlm] ) ;
5267       
5268       fhMCPi0DecayPhotonAdjacentMass[nlm]   = new TH2F(Form("hMCPi0DecayPhotonAdjacentLM%sMass",snlm[nlm].Data()),
5269                                                        Form("Mass vs E for merged pi0 cluster, NLM=%s, decay photon hit adjacent cells",snlm[nlm].Data()),
5270                                                        nptbins,ptmin,ptmax,mbins,mmin,mmax);
5271       fhMCPi0DecayPhotonAdjacentMass[nlm]    ->SetYTitle("Mass (MeV/c^{2})");
5272       fhMCPi0DecayPhotonAdjacentMass[nlm]    ->SetXTitle("E (GeV)");
5273       outputContainer->Add(fhMCPi0DecayPhotonAdjacentMass[nlm] ) ;
5274       
5275       fhMCPi0DecayPhotonHitNoLMMass[nlm]  = new TH2F(Form("hMCPi0DecayPhotonHitNoLM%sMass",snlm[nlm].Data()),
5276                                                      Form("Mass vs E for merged pi0 cluster, NLM=%s, decay photon do not hit Local Maxima",snlm[nlm].Data()),
5277                                                      nptbins,ptmin,ptmax,mbins,mmin,mmax);
5278       fhMCPi0DecayPhotonHitNoLMMass[nlm]  ->SetYTitle("Mass (MeV/c^{2})");
5279       fhMCPi0DecayPhotonHitNoLMMass[nlm]    ->SetXTitle("E (GeV)");
5280       outputContainer->Add(fhMCPi0DecayPhotonHitNoLMMass[nlm] ) ;
5281       
5282       
5283       fhMCPi0DecayPhotonHitHighLMOverlapMass[nlm]   = new TH2F(Form("hMCPi0DecayPhotonHitHighLM%sOverlapMass",snlm[nlm].Data()),
5284                                                                Form("Mass vs E for merged pi0 cluster, NLM=%s, decay photon hit High Local Maxima, there was an overlap",snlm[nlm].Data()),
5285                                                                nptbins,ptmin,ptmax,mbins,mmin,mmax);
5286       fhMCPi0DecayPhotonHitHighLMOverlapMass[nlm]   ->SetYTitle("Mass (MeV/c^{2})");
5287       fhMCPi0DecayPhotonHitHighLMOverlapMass[nlm]   ->SetXTitle("E (GeV)");
5288       outputContainer->Add(fhMCPi0DecayPhotonHitHighLMOverlapMass[nlm]) ;
5289       
5290       fhMCPi0DecayPhotonAdjHighLMOverlapMass[nlm]   = new TH2F(Form("hMCPi0DecayPhotonAdjHighLM%sOverlapMass",snlm[nlm].Data()),
5291                                                                Form("Mass vs E for merged pi0 cluster, NLM=%s, decay photon hit cells adjacent to High Local Maxima, there was an overlap",snlm[nlm].Data()),
5292                                                                nptbins,ptmin,ptmax,mbins,mmin,mmax);
5293       fhMCPi0DecayPhotonAdjHighLMOverlapMass[nlm]   ->SetYTitle("Mass (MeV/c^{2})");
5294       fhMCPi0DecayPhotonAdjHighLMOverlapMass[nlm]   ->SetXTitle("E (GeV)");
5295       outputContainer->Add(fhMCPi0DecayPhotonAdjHighLMOverlapMass[nlm]) ;
5296       
5297       fhMCPi0DecayPhotonHitOtherLMOverlapMass[nlm]   = new TH2F(Form("hMCPi0DecayPhotonHitOtherLM%sOverlapMass",snlm[nlm].Data()),
5298                                                                 Form("Mass vs E for merged pi0 cluster, NLM=%s, decay photon hit Other Local Maxima, there was an overlap",snlm[nlm].Data()),
5299                                                                 nptbins,ptmin,ptmax,mbins,mmin,mmax);
5300       fhMCPi0DecayPhotonHitOtherLMOverlapMass[nlm]   ->SetYTitle("Mass (MeV/c^{2})");
5301       fhMCPi0DecayPhotonHitOtherLMOverlapMass[nlm]   ->SetXTitle("E (GeV)");
5302       outputContainer->Add(fhMCPi0DecayPhotonHitOtherLMOverlapMass[nlm]) ;
5303       
5304       fhMCPi0DecayPhotonAdjOtherLMOverlapMass[nlm]   = new TH2F(Form("hMCPi0DecayPhotonAdjOtherLM%sOverlapMass",snlm[nlm].Data()),
5305                                                                 Form("Mass vs E for merged pi0 cluster, NLM=%s, decay photon hit cells adjacent to Other Local Maxima, there was an overlap",snlm[nlm].Data()),
5306                                                                 nptbins,ptmin,ptmax,mbins,mmin,mmax);
5307       fhMCPi0DecayPhotonAdjOtherLMOverlapMass[nlm]   ->SetYTitle("Mass (MeV/c^{2})");
5308       fhMCPi0DecayPhotonAdjOtherLMOverlapMass[nlm]   ->SetXTitle("E (GeV)");
5309       outputContainer->Add(fhMCPi0DecayPhotonAdjOtherLMOverlapMass[nlm]) ;
5310       
5311       fhMCPi0DecayPhotonAdjacentOverlapMass[nlm]  = new TH2F(Form("hMCPi0DecayPhotonAdjacentLM%sOverlapMass",snlm[nlm].Data()),
5312                                                              Form("Mass vs E for merged pi0 cluster, NLM=%s, decay photon hit adjacent cells, there was an overlap",snlm[nlm].Data()),
5313                                                              nptbins,ptmin,ptmax,mbins,mmin,mmax);
5314       fhMCPi0DecayPhotonAdjacentOverlapMass[nlm]   ->SetYTitle("Mass (MeV/c^{2})");
5315       fhMCPi0DecayPhotonAdjacentOverlapMass[nlm]   ->SetXTitle("E (GeV)");
5316       outputContainer->Add(fhMCPi0DecayPhotonAdjacentOverlapMass[nlm]) ;
5317       
5318       fhMCPi0DecayPhotonHitNoLMOverlapMass[nlm]   = new TH2F(Form("hMCPi0DecayPhotonHitNoLM%sOverlapMass",snlm[nlm].Data()),
5319                                                              Form("Mass vs E for merged pi0 cluster, NLM=%s, decay photon do not hit Local Maxima, there was an overlap",snlm[nlm].Data()),
5320                                                              nptbins,ptmin,ptmax,mbins,mmin,mmax);
5321       fhMCPi0DecayPhotonHitNoLMOverlapMass[nlm]   ->SetYTitle("Mass (MeV/c^{2})");
5322       fhMCPi0DecayPhotonHitNoLMOverlapMass[nlm]   ->SetXTitle("E (GeV)");
5323       outputContainer->Add(fhMCPi0DecayPhotonHitNoLMOverlapMass[nlm]) ;
5324       
5325       fhMCPi0DecayPhotonHitHighLMDiffELM1[nlm]  = new TH2F(Form("hMCPi0DecayPhotonHitHighLM%sDiffELM1",snlm[nlm].Data()),
5326                                                            Form("(E_{reco}-E_{gen})/E_{gen} vs E pi0 for merged pi0 cluster, NLM=%s, decay photon hit High Local Maxima",snlm[nlm].Data()),
5327                                                            nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5328       fhMCPi0DecayPhotonHitHighLMDiffELM1[nlm]  ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5329       fhMCPi0DecayPhotonHitHighLMDiffELM1[nlm]  ->SetXTitle("E_{pi0 reco} (GeV)");
5330       outputContainer->Add(fhMCPi0DecayPhotonHitHighLMDiffELM1[nlm] ) ;
5331       
5332       fhMCPi0DecayPhotonAdjHighLMDiffELM1[nlm]  = new TH2F(Form("hMCPi0DecayPhotonAdjHighLM%sDiffELM1",snlm[nlm].Data()),
5333                                                            Form("(E_{reco}-E_{gen})/E_{gen} vs E_{pi0 reco} for merged pi0 cluster, NLM=%s, decay photon hit cells adjacent to High Local Maxima",snlm[nlm].Data()),
5334                                                            nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5335       fhMCPi0DecayPhotonAdjHighLMDiffELM1[nlm]  ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5336       fhMCPi0DecayPhotonAdjHighLMDiffELM1[nlm]  ->SetXTitle("E pi0 (GeV)");
5337       outputContainer->Add(fhMCPi0DecayPhotonAdjHighLMDiffELM1[nlm] ) ;
5338       
5339       fhMCPi0DecayPhotonHitOtherLMDiffELM1[nlm]  = new TH2F(Form("hMCPi0DecayPhotonHitOtherLM%sDiffELM1",snlm[nlm].Data()),
5340                                                             Form("(E_{reco}-E_{gen})/E_{gen} vs E_{pi0 reco} for merged pi0 cluster, NLM=%s, decay photon hit Other Local Maxima",snlm[nlm].Data()),
5341                                                             nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5342       fhMCPi0DecayPhotonHitOtherLMDiffELM1[nlm]  ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5343       fhMCPi0DecayPhotonHitOtherLMDiffELM1[nlm]  ->SetXTitle("E_{reco} (GeV)");
5344       outputContainer->Add(fhMCPi0DecayPhotonHitOtherLMDiffELM1[nlm] ) ;
5345       
5346       fhMCPi0DecayPhotonAdjOtherLMDiffELM1[nlm]  = new TH2F(Form("hMCPi0DecayPhotonAdjOtherLM%sDiffELM1",snlm[nlm].Data()),
5347                                                             Form("(E_{reco}-E_{gen})/E_{gen} vs E_{pi0 reco} for merged pi0 cluster, NLM=%s, decay photon hit cells adjacent to Other Local Maxima",snlm[nlm].Data()),
5348                                                             nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5349       fhMCPi0DecayPhotonAdjOtherLMDiffELM1[nlm]  ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5350       fhMCPi0DecayPhotonAdjOtherLMDiffELM1[nlm]  ->SetXTitle("E_{pi0 reco} (GeV)");
5351       outputContainer->Add(fhMCPi0DecayPhotonAdjOtherLMDiffELM1[nlm] ) ;
5352       
5353       fhMCPi0DecayPhotonHitHighLMOverlapDiffELM1[nlm]   = new TH2F(Form("hMCPi0DecayPhotonHitHighLM%sOverlapDiffELM1",snlm[nlm].Data()),
5354                                                                    Form("(E_{reco}-E_{gen})/E_{gen} vs E_{pi0 reco} for merged pi0 cluster, NLM=%s, decay photon hit High Local Maxima, there was an overlap",snlm[nlm].Data()),
5355                                                                    nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5356       fhMCPi0DecayPhotonHitHighLMOverlapDiffELM1[nlm]   ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5357       fhMCPi0DecayPhotonHitHighLMOverlapDiffELM1[nlm]   ->SetXTitle("E_{pi0 reco} (GeV)");
5358       outputContainer->Add(fhMCPi0DecayPhotonHitHighLMOverlapDiffELM1[nlm]) ;
5359       
5360       fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM1[nlm]   = new TH2F(Form("hMCPi0DecayPhotonAdjHighLM%sOverlapDiffELM1",snlm[nlm].Data()),
5361                                                                    Form("(E_{reco}-E_{gen})/E_{gen} vs E_{pi0 reco} for merged pi0 cluster, NLM=%s, decay photon hit cells adjacent to High Local Maxima, there was an overlap",snlm[nlm].Data()),
5362                                                                    nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5363       fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM1[nlm]   ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5364       fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM1[nlm]   ->SetXTitle("E_{pi0 reco} (GeV)");
5365       outputContainer->Add(fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM1[nlm]) ;
5366       
5367       fhMCPi0DecayPhotonHitOtherLMOverlapDiffELM1[nlm]   = new TH2F(Form("hMCPi0DecayPhotonHitOtherLM%sOverlapDiffELM1",snlm[nlm].Data()),
5368                                                                     Form("(E_{reco}-E_{gen})/E_{gen} vs E_{pi0 reco} for merged pi0 cluster, NLM=%s, decay photon hit Other Local Maxima, there was an overlap",snlm[nlm].Data()),
5369                                                                     nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5370       fhMCPi0DecayPhotonHitOtherLMOverlapDiffELM1[nlm]   ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5371       fhMCPi0DecayPhotonHitOtherLMOverlapDiffELM1[nlm]   ->SetXTitle("E_{pi0 reco} (GeV)");
5372       outputContainer->Add(fhMCPi0DecayPhotonHitOtherLMOverlapDiffELM1[nlm]) ;
5373       
5374       fhMCPi0DecayPhotonAdjOtherLMOverlapDiffELM1[nlm]   = new TH2F(Form("hMCPi0DecayPhotonAdjOtherLM%sOverlapDiffELM1",snlm[nlm].Data()),
5375                                                                     Form("E_{reco}-E_{gen} vs E_{pi0 reco} for merged pi0 cluster, NLM=%s, decay photon hit cells adjacent to Other Local Maxima, there was an overlap",snlm[nlm].Data()),
5376                                                                     nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5377       fhMCPi0DecayPhotonAdjOtherLMOverlapDiffELM1[nlm]   ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5378       fhMCPi0DecayPhotonAdjOtherLMOverlapDiffELM1[nlm]   ->SetXTitle("E_{pi0 reco} (GeV)");
5379       outputContainer->Add(fhMCPi0DecayPhotonAdjOtherLMOverlapDiffELM1[nlm]) ;
5380       
5381       fhMCPi0DecayPhotonHitHighLMDiffELM2[nlm]  = new TH2F(Form("hMCPi0DecayPhotonHitHighLM%sDiffELM2",snlm[nlm].Data()),
5382                                                            Form("(E_{reco}-E_{gen})/E_{gen} vs E_{pi0 reco} for merged pi0 cluster, NLM=%s, decay photon hit High Local Maxima",snlm[nlm].Data()),
5383                                                            nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5384       fhMCPi0DecayPhotonHitHighLMDiffELM2[nlm]  ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5385       fhMCPi0DecayPhotonHitHighLMDiffELM2[nlm]  ->SetXTitle("E_{pi0 reco} (GeV)");
5386       outputContainer->Add(fhMCPi0DecayPhotonHitHighLMDiffELM2[nlm] ) ;
5387       
5388       fhMCPi0DecayPhotonAdjHighLMDiffELM2[nlm]  = new TH2F(Form("hMCPi0DecayPhotonAdjHighLM%sDiffELM2",snlm[nlm].Data()),
5389                                                            Form("(E_{reco}-E_{gen})/E_{gen} vs E_{pi0 reco} for merged pi0 cluster, NLM=%s, decay photon hit cells adjacent to High Local Maxima",snlm[nlm].Data()),
5390                                                            nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5391       fhMCPi0DecayPhotonAdjHighLMDiffELM2[nlm]  ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5392       fhMCPi0DecayPhotonAdjHighLMDiffELM2[nlm]  ->SetXTitle("E_{pi0 reco} (GeV)");
5393       outputContainer->Add(fhMCPi0DecayPhotonAdjHighLMDiffELM2[nlm] ) ;
5394       
5395       fhMCPi0DecayPhotonHitOtherLMDiffELM2[nlm]  = new TH2F(Form("hMCPi0DecayPhotonHitOtherLM%sDiffELM2",snlm[nlm].Data()),
5396                                                             Form("E_{reco}-E_{gen} vs E_{pi0 reco} for merged pi0 cluster, NLM=%s, decay photon hit Other Local Maxima",snlm[nlm].Data()),
5397                                                             nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5398       fhMCPi0DecayPhotonHitOtherLMDiffELM2[nlm]  ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5399       fhMCPi0DecayPhotonHitOtherLMDiffELM2[nlm]  ->SetXTitle("E_{pi0 reco} (GeV)");
5400       outputContainer->Add(fhMCPi0DecayPhotonHitOtherLMDiffELM2[nlm] ) ;
5401       
5402       fhMCPi0DecayPhotonAdjOtherLMDiffELM2[nlm]  = new TH2F(Form("hMCPi0DecayPhotonAdjOtherLM%sDiffELM2",snlm[nlm].Data()),
5403                                                             Form("E_{reco}-E_{gen} vs E_{pi0 reco} for merged pi0 cluster, NLM=%s, decay photon hit cells adjacent to Other Local Maxima",snlm[nlm].Data()),
5404                                                             nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5405       fhMCPi0DecayPhotonAdjOtherLMDiffELM2[nlm]  ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5406       fhMCPi0DecayPhotonAdjOtherLMDiffELM2[nlm]  ->SetXTitle("E_{pi0 reco} (GeV)");
5407       outputContainer->Add(fhMCPi0DecayPhotonAdjOtherLMDiffELM2[nlm] ) ;
5408       
5409       fhMCPi0DecayPhotonHitHighLMOverlapDiffELM2[nlm]   = new TH2F(Form("hMCPi0DecayPhotonHitHighLM%sOverlapDiffELM2",snlm[nlm].Data()),
5410                                                                    Form("(E_{reco}-E_{gen})/E_{gen} vs E_{pi0 reco} for merged pi0 cluster, NLM=%s, decay photon hit High Local Maxima, there was an overlap",snlm[nlm].Data()),
5411                                                                    nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5412       fhMCPi0DecayPhotonHitHighLMOverlapDiffELM2[nlm]   ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5413       fhMCPi0DecayPhotonHitHighLMOverlapDiffELM2[nlm]   ->SetXTitle("E_{pi0 reco} (GeV)");
5414       outputContainer->Add(fhMCPi0DecayPhotonHitHighLMOverlapDiffELM2[nlm]) ;
5415       
5416       fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM2[nlm]   = new TH2F(Form("hMCPi0DecayPhotonAdjHighLM%sOverlapDiffELM2",snlm[nlm].Data()),
5417                                                                    Form("E_{reco}-E_{gen} vs E_{pi0 reco} for merged pi0 cluster, NLM=%s, decay photon hit cells adjacent to High Local Maxima, there was an overlap",snlm[nlm].Data()),
5418                                                                    nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5419       fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM2[nlm]   ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5420       fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM2[nlm]   ->SetXTitle("E_{pi0 reco} (GeV)");
5421       outputContainer->Add(fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM2[nlm]) ;
5422       
5423       fhMCPi0DecayPhotonHitOtherLMOverlapDiffELM2[nlm]   = new TH2F(Form("hMCPi0DecayPhotonHitOtherLM%sOverlapDiffELM2",snlm[nlm].Data()),
5424                                                                     Form("(E_{reco}-E_{gen})/E_{gen} vs E_{pi0 reco} for merged pi0 cluster, NLM=%s, decay photon hit Other Local Maxima, there was an overlap",snlm[nlm].Data()),
5425                                                                     nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5426       fhMCPi0DecayPhotonHitOtherLMOverlapDiffELM2[nlm]   ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5427       fhMCPi0DecayPhotonHitOtherLMOverlapDiffELM2[nlm]   ->SetXTitle("E_{pi0 reco} (GeV)");
5428       outputContainer->Add(fhMCPi0DecayPhotonHitOtherLMOverlapDiffELM2[nlm]) ;
5429       
5430       fhMCPi0DecayPhotonAdjOtherLMOverlapDiffELM2[nlm]   = new TH2F(Form("hMCPi0DecayPhotonAdjOtherLM%sOverlapDiffELM2",snlm[nlm].Data()),
5431                                                                     Form("(E_{reco}-E_{gen})/E_{gen} vs E_{pi0 reco} for merged pi0 cluster, NLM=%s, decay photon hit cells adjacent to Other Local Maxima, there was an overlap",snlm[nlm].Data()),
5432                                                                     nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5433       fhMCPi0DecayPhotonAdjOtherLMOverlapDiffELM2[nlm]   ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5434       fhMCPi0DecayPhotonAdjOtherLMOverlapDiffELM2[nlm]   ->SetXTitle("E_{pi0 reco} (GeV)");
5435       outputContainer->Add(fhMCPi0DecayPhotonAdjOtherLMOverlapDiffELM2[nlm]) ;
5436       
5437       
5438       fhMCPi0DecayPhotonHitHighLMDiffELM1vsELM1[nlm]  = new TH2F(Form("hMCPi0DecayPhotonHitHighLM%sDiffELM1vsELM1",snlm[nlm].Data()),
5439                                                                  Form("(E_{reco}-E_{gen})/E_{gen} vs E for merged pi0 cluster, NLM=%s, decay photon hit High Local Maxima",snlm[nlm].Data()),
5440                                                                  nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5441       fhMCPi0DecayPhotonHitHighLMDiffELM1vsELM1[nlm]  ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5442       fhMCPi0DecayPhotonHitHighLMDiffELM1vsELM1[nlm]  ->SetXTitle("E_{reco} (GeV)");
5443       outputContainer->Add(fhMCPi0DecayPhotonHitHighLMDiffELM1vsELM1[nlm] ) ;
5444       
5445       fhMCPi0DecayPhotonAdjHighLMDiffELM1vsELM1[nlm]  = new TH2F(Form("hMCPi0DecayPhotonAdjHighLM%sDiffELM1vsELM1",snlm[nlm].Data()),
5446                                                                  Form("(E_{reco}-E_{gen})/E_{gen} vs E_{reco} for merged pi0 cluster, NLM=%s, decay photon hit cells adjacent to High Local Maxima",snlm[nlm].Data()),
5447                                                                  nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5448       fhMCPi0DecayPhotonAdjHighLMDiffELM1vsELM1[nlm]  ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5449       fhMCPi0DecayPhotonAdjHighLMDiffELM1vsELM1[nlm]  ->SetXTitle("E (GeV)");
5450       outputContainer->Add(fhMCPi0DecayPhotonAdjHighLMDiffELM1vsELM1[nlm] ) ;
5451       
5452       fhMCPi0DecayPhotonHitOtherLMDiffELM1vsELM1[nlm]  = new TH2F(Form("hMCPi0DecayPhotonHitOtherLM%sDiffELM1vsELM1",snlm[nlm].Data()),
5453                                                                   Form("(E_{reco}-E_{gen})/E_{gen} vs E_{reco} for merged pi0 cluster, NLM=%s, decay photon hit Other Local Maxima",snlm[nlm].Data()),
5454                                                                   nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5455       fhMCPi0DecayPhotonHitOtherLMDiffELM1vsELM1[nlm]  ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5456       fhMCPi0DecayPhotonHitOtherLMDiffELM1vsELM1[nlm]  ->SetXTitle("E_{reco} (GeV)");
5457       outputContainer->Add(fhMCPi0DecayPhotonHitOtherLMDiffELM1vsELM1[nlm] ) ;
5458       
5459       fhMCPi0DecayPhotonAdjOtherLMDiffELM1vsELM1[nlm]  = new TH2F(Form("hMCPi0DecayPhotonAdjOtherLM%sDiffELM1vsELM1",snlm[nlm].Data()),
5460                                                                   Form("(E_{reco}-E_{gen})/E_{gen} vs E_{reco} for merged pi0 cluster, NLM=%s, decay photon hit cells adjacent to Other Local Maxima",snlm[nlm].Data()),
5461                                                                   nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5462       fhMCPi0DecayPhotonAdjOtherLMDiffELM1vsELM1[nlm]  ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5463       fhMCPi0DecayPhotonAdjOtherLMDiffELM1vsELM1[nlm]  ->SetXTitle("E_{reco} (GeV)");
5464       outputContainer->Add(fhMCPi0DecayPhotonAdjOtherLMDiffELM1vsELM1[nlm] ) ;
5465       
5466       fhMCPi0DecayPhotonHitHighLMOverlapDiffELM1vsELM1[nlm]   = new TH2F(Form("hMCPi0DecayPhotonHitHighLM%sOverlapDiffELM1vsELM1",snlm[nlm].Data()),
5467                                                                          Form("(E_{reco}-E_{gen})/E_{gen} vs E_{reco} for merged pi0 cluster, NLM=%s, decay photon hit High Local Maxima, there was an overlap",snlm[nlm].Data()),
5468                                                                          nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5469       fhMCPi0DecayPhotonHitHighLMOverlapDiffELM1vsELM1[nlm]   ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5470       fhMCPi0DecayPhotonHitHighLMOverlapDiffELM1vsELM1[nlm]   ->SetXTitle("E_{reco} (GeV)");
5471       outputContainer->Add(fhMCPi0DecayPhotonHitHighLMOverlapDiffELM1vsELM1[nlm]) ;
5472       
5473       fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM1vsELM1[nlm]   = new TH2F(Form("hMCPi0DecayPhotonAdjHighLM%sOverlapDiffELM1vsELM1",snlm[nlm].Data()),
5474                                                                          Form("(E_{reco}-E_{gen})/E_{gen} vs E_{reco} for merged pi0 cluster, NLM=%s, decay photon hit cells adjacent to High Local Maxima, there was an overlap",snlm[nlm].Data()),
5475                                                                          nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5476       fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM1vsELM1[nlm]   ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5477       fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM1vsELM1[nlm]   ->SetXTitle("E_{reco} (GeV)");
5478       outputContainer->Add(fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM1vsELM1[nlm]) ;
5479       
5480       fhMCPi0DecayPhotonHitOtherLMOverlapDiffELM1vsELM1[nlm]   = new TH2F(Form("hMCPi0DecayPhotonHitOtherLM%sOverlapDiffELM1vsELM1",snlm[nlm].Data()),
5481                                                                           Form("(E_{reco}-E_{gen})/E_{gen} vs E_{reco} for merged pi0 cluster, NLM=%s, decay photon hit Other Local Maxima, there was an overlap",snlm[nlm].Data()),
5482                                                                           nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5483       fhMCPi0DecayPhotonHitOtherLMOverlapDiffELM1vsELM1[nlm]   ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5484       fhMCPi0DecayPhotonHitOtherLMOverlapDiffELM1vsELM1[nlm]   ->SetXTitle("E_{reco} (GeV)");
5485       outputContainer->Add(fhMCPi0DecayPhotonHitOtherLMOverlapDiffELM1vsELM1[nlm]) ;
5486       
5487       fhMCPi0DecayPhotonAdjOtherLMOverlapDiffELM1vsELM1[nlm]   = new TH2F(Form("hMCPi0DecayPhotonAdjOtherLM%sOverlapDiffELM1vsELM1",snlm[nlm].Data()),
5488                                                                           Form("E_{reco}-E_{gen} vs E_{reco} for merged pi0 cluster, NLM=%s, decay photon hit cells adjacent to Other Local Maxima, there was an overlap",snlm[nlm].Data()),
5489                                                                           nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5490       fhMCPi0DecayPhotonAdjOtherLMOverlapDiffELM1vsELM1[nlm]   ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5491       fhMCPi0DecayPhotonAdjOtherLMOverlapDiffELM1vsELM1[nlm]   ->SetXTitle("E_{reco} (GeV)");
5492       outputContainer->Add(fhMCPi0DecayPhotonAdjOtherLMOverlapDiffELM1vsELM1[nlm]) ;
5493       
5494       fhMCPi0DecayPhotonHitHighLMDiffELM2vsELM2[nlm]  = new TH2F(Form("hMCPi0DecayPhotonHitHighLM%sDiffELM2vsELM2",snlm[nlm].Data()),
5495                                                                  Form("(E_{reco}-E_{gen})/E_{gen} vs E_{reco} for merged pi0 cluster, NLM=%s, decay photon hit High Local Maxima",snlm[nlm].Data()),
5496                                                                  nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5497       fhMCPi0DecayPhotonHitHighLMDiffELM2vsELM2[nlm]  ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5498       fhMCPi0DecayPhotonHitHighLMDiffELM2vsELM2[nlm]  ->SetXTitle("E_{reco} (GeV)");
5499       outputContainer->Add(fhMCPi0DecayPhotonHitHighLMDiffELM2vsELM2[nlm] ) ;
5500       
5501       fhMCPi0DecayPhotonAdjHighLMDiffELM2vsELM2[nlm]  = new TH2F(Form("hMCPi0DecayPhotonAdjHighLM%sDiffELM2vsELM2",snlm[nlm].Data()),
5502                                                                  Form("(E_{reco}-E_{gen})/E_{gen} vs E_{reco} for merged pi0 cluster, NLM=%s, decay photon hit cells adjacent to High Local Maxima",snlm[nlm].Data()),
5503                                                                  nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5504       fhMCPi0DecayPhotonAdjHighLMDiffELM2vsELM2[nlm]  ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5505       fhMCPi0DecayPhotonAdjHighLMDiffELM2vsELM2[nlm]  ->SetXTitle("E_{reco} (GeV)");
5506       outputContainer->Add(fhMCPi0DecayPhotonAdjHighLMDiffELM2vsELM2[nlm] ) ;
5507       
5508       fhMCPi0DecayPhotonHitOtherLMDiffELM2vsELM2[nlm]  = new TH2F(Form("hMCPi0DecayPhotonHitOtherLM%sDiffELM2vsELM2",snlm[nlm].Data()),
5509                                                                   Form("E_{reco}-E_{gen} vs E_{reco} for merged pi0 cluster, NLM=%s, decay photon hit Other Local Maxima",snlm[nlm].Data()),
5510                                                                   nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5511       fhMCPi0DecayPhotonHitOtherLMDiffELM2vsELM2[nlm]  ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5512       fhMCPi0DecayPhotonHitOtherLMDiffELM2vsELM2[nlm]  ->SetXTitle("E_{reco} (GeV)");
5513       outputContainer->Add(fhMCPi0DecayPhotonHitOtherLMDiffELM2vsELM2[nlm] ) ;
5514       
5515       fhMCPi0DecayPhotonAdjOtherLMDiffELM2vsELM2[nlm]  = new TH2F(Form("hMCPi0DecayPhotonAdjOtherLM%sDiffELM2vsELM2",snlm[nlm].Data()),
5516                                                                   Form("E_{reco}-E_{gen} vs E_{reco} for merged pi0 cluster, NLM=%s, decay photon hit cells adjacent to Other Local Maxima",snlm[nlm].Data()),
5517                                                                   nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5518       fhMCPi0DecayPhotonAdjOtherLMDiffELM2vsELM2[nlm]  ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5519       fhMCPi0DecayPhotonAdjOtherLMDiffELM2vsELM2[nlm]  ->SetXTitle("E_{reco} (GeV)");
5520       outputContainer->Add(fhMCPi0DecayPhotonAdjOtherLMDiffELM2vsELM2[nlm] ) ;
5521       
5522       fhMCPi0DecayPhotonHitHighLMOverlapDiffELM2vsELM2[nlm]   = new TH2F(Form("hMCPi0DecayPhotonHitHighLM%sOverlapDiffELM2vsELM2",snlm[nlm].Data()),
5523                                                                          Form("(E_{reco}-E_{gen})/E_{gen} vs E_{reco} for merged pi0 cluster, NLM=%s, decay photon hit High Local Maxima, there was an overlap",snlm[nlm].Data()),
5524                                                                          nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5525       fhMCPi0DecayPhotonHitHighLMOverlapDiffELM2vsELM2[nlm]   ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5526       fhMCPi0DecayPhotonHitHighLMOverlapDiffELM2vsELM2[nlm]   ->SetXTitle("E_{reco} (GeV)");
5527       outputContainer->Add(fhMCPi0DecayPhotonHitHighLMOverlapDiffELM2vsELM2[nlm]) ;
5528       
5529       fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM2vsELM2[nlm]   = new TH2F(Form("hMCPi0DecayPhotonAdjHighLM%sOverlapDiffELM2vsELM2",snlm[nlm].Data()),
5530                                                                          Form("E_{reco}-E_{gen} vs E_{reco} for merged pi0 cluster, NLM=%s, decay photon hit cells adjacent to High Local Maxima, there was an overlap",snlm[nlm].Data()),
5531                                                                          nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5532       fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM2vsELM2[nlm]   ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5533       fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM2vsELM2[nlm]   ->SetXTitle("E_{reco} (GeV)");
5534       outputContainer->Add(fhMCPi0DecayPhotonAdjHighLMOverlapDiffELM2vsELM2[nlm]) ;
5535       
5536       fhMCPi0DecayPhotonHitOtherLMOverlapDiffELM2vsELM2[nlm]   = new TH2F(Form("hMCPi0DecayPhotonHitOtherLM%sOverlapDiffELM2vsELM2",snlm[nlm].Data()),
5537                                                                           Form("(E_{reco}-E_{gen})/E_{gen} vs E_{reco} for merged pi0 cluster, NLM=%s, decay photon hit Other Local Maxima, there was an overlap",snlm[nlm].Data()),
5538                                                                           nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5539       fhMCPi0DecayPhotonHitOtherLMOverlapDiffELM2vsELM2[nlm]   ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5540       fhMCPi0DecayPhotonHitOtherLMOverlapDiffELM2vsELM2[nlm]   ->SetXTitle("E_{reco} (GeV)");
5541       outputContainer->Add(fhMCPi0DecayPhotonHitOtherLMOverlapDiffELM2vsELM2[nlm]) ;
5542       
5543       fhMCPi0DecayPhotonAdjOtherLMOverlapDiffELM2vsELM2[nlm]   = new TH2F(Form("hMCPi0DecayPhotonAdjOtherLM%sOverlapDiffELM2vsELM2",snlm[nlm].Data()),
5544                                                                           Form("(E_{reco}-E_{gen})/E_{gen} vs E_{reco} for merged pi0 cluster, NLM=%s, decay photon hit cells adjacent to Other Local Maxima, there was an overlap",snlm[nlm].Data()),
5545                                                                           nptbins,ptmin,ptmax,200,-2,2);//nptbins,-ptmax/4,ptmax/4);
5546       fhMCPi0DecayPhotonAdjOtherLMOverlapDiffELM2vsELM2[nlm]   ->SetYTitle("(E_{reco}-E_{gen})/E_{gen}");
5547       fhMCPi0DecayPhotonAdjOtherLMOverlapDiffELM2vsELM2[nlm]   ->SetXTitle("E_{reco} (GeV)");
5548       outputContainer->Add(fhMCPi0DecayPhotonAdjOtherLMOverlapDiffELM2vsELM2[nlm]) ;
5549       
5550     }
5551     
5552     fhMCEOverlapType = new TH2F("hMCEOverlapType","Kind of overlap particle, neutral clusters",
5553                                 nptbins,ptmin,ptmax,5,0,5);
5554     //fhMCEOverlapType   ->SetYTitle("Overlap Type");
5555     fhMCEOverlapType->GetYaxis()->SetBinLabel(1 ,"#gamma");
5556     fhMCEOverlapType->GetYaxis()->SetBinLabel(2 ,"e^{#pm}");
5557     fhMCEOverlapType->GetYaxis()->SetBinLabel(3 ,"hadron^{#pm}");
5558     fhMCEOverlapType->GetYaxis()->SetBinLabel(4 ,"hadron^{0}");
5559     fhMCEOverlapType->GetYaxis()->SetBinLabel(5 ,"??");
5560     fhMCEOverlapType->SetXTitle("Cluster E (GeV)");
5561     outputContainer->Add(fhMCEOverlapType) ;
5562     
5563     fhMCEOverlapTypeMatch = new TH2F("hMCEOverlapTypeMatched","Kind of overlap particle, charged clusters",
5564                                      nptbins,ptmin,ptmax,5,0,5);
5565     //fhMCEOverlapTypeMatch   ->SetYTitle("Overlap Type");
5566     fhMCEOverlapTypeMatch->GetYaxis()->SetBinLabel(1 ,"#gamma");
5567     fhMCEOverlapTypeMatch->GetYaxis()->SetBinLabel(2 ,"e^{#pm}");
5568     fhMCEOverlapTypeMatch->GetYaxis()->SetBinLabel(3 ,"hadron^{#pm}");
5569     fhMCEOverlapTypeMatch->GetYaxis()->SetBinLabel(4 ,"hadron^{0}");
5570     fhMCEOverlapTypeMatch->GetYaxis()->SetBinLabel(5 ,"??");
5571     fhMCEOverlapTypeMatch->SetXTitle("Cluster E (GeV)");
5572     outputContainer->Add(fhMCEOverlapTypeMatch) ;
5573     
5574   }// MC analysis, check overlaps
5575   
5576   
5577   if(IsDataMC())
5578   {
5579     for(Int_t inlm = 0; inlm < 3; inlm++)
5580     {
5581       fhAsyMCGenRecoDiffMCPi0[inlm]  = new TH2F(Form("hAsyMCGenRecoFracNLocMax%sMCPi0",snlm[inlm].Data()),
5582                                                 Form("Reconstructed - Generated asymmetry with NLM=%d vs E, MC Pi0",inlm),
5583                                                 nptbins,ptmin,ptmax,200,-1,1);
5584       fhAsyMCGenRecoDiffMCPi0[inlm]->SetYTitle("A_{reco} - A_{gen}");
5585       fhAsyMCGenRecoDiffMCPi0[inlm]->SetXTitle("E (GeV)");
5586       outputContainer->Add(fhAsyMCGenRecoDiffMCPi0[inlm]) ;
5587       
5588       fhAsyMCGenRecoDiffMCPi0Conv[inlm]  = new TH2F(Form("hAsyMCGenRecoFracNLocMax%sMCPi0Conv",snlm[inlm].Data()),
5589                                                 Form("Reconstructed - Generated asymmetry  with NLM=%d vs E, MC Pi0Conv",inlm),
5590                                                 nptbins,ptmin,ptmax,200,-1,1);
5591       fhAsyMCGenRecoDiffMCPi0Conv[inlm]->SetYTitle("A_{reco} - A_{gen}");
5592       fhAsyMCGenRecoDiffMCPi0Conv[inlm]->SetXTitle("E (GeV)");
5593       outputContainer->Add(fhAsyMCGenRecoDiffMCPi0Conv[inlm]) ;
5594     }
5595   }
5596   
5597   if(fFillArmenterosHisto)
5598   {
5599     Int_t narmbins = 400;
5600     Float_t armmin = 0;
5601     Float_t armmax = 0.4;
5602     
5603     for(Int_t i = 0; i < 7; i++) // MC bin
5604     {
5605       for(Int_t j = 0; j < 4; j++) // E bin
5606       {
5607         fhArmNLocMax1[i][j]  = new TH2F(Form("hArmNLocMax1EBin%d%s",j,pname[i].Data()),
5608                                          Form("Armenteros of splitted cluster with NLM=1, %s, %s",sEBin[j].Data(),ptype[i].Data()),
5609                                          200, -1, 1, narmbins,armmin,armmax);
5610         fhArmNLocMax1[i][j]->SetYTitle("p_{T}^{Arm}");
5611         fhArmNLocMax1[i][j]->SetXTitle("#alpha^{Arm}");
5612         outputContainer->Add(fhArmNLocMax1[i][j]) ;
5613         
5614         fhArmNLocMax2[i][j]  = new TH2F(Form("hArmNLocMax2EBin%d%s",j,pname[i].Data()),
5615                                          Form("Armenteros of splitted cluster with NLM=2, %s, %s",sEBin[j].Data(),ptype[i].Data()),
5616                                          200, -1, 1, narmbins,armmin,armmax);
5617         fhArmNLocMax2[i][j]->SetYTitle("p_{T}^{Arm}");
5618         fhArmNLocMax2[i][j]->SetXTitle("#alpha^{Arm}");
5619         outputContainer->Add(fhArmNLocMax2[i][j]) ;
5620         
5621         fhArmNLocMaxN[i][j]  = new TH2F(Form("hArmNLocMaxNEBin%d%s",j,pname[i].Data()),
5622                                          Form("Armenteros of splitted cluster with NLM>2, %s, %s",sEBin[j].Data(),ptype[i].Data()),
5623                                          200, -1, 1, narmbins,armmin,armmax);
5624         fhArmNLocMaxN[i][j]->SetYTitle("p_{T}^{Arm}");
5625         fhArmNLocMaxN[i][j]->SetXTitle("#alpha^{Arm}");
5626         outputContainer->Add(fhArmNLocMaxN[i][j]) ;
5627         
5628         if(asyOn || m02On)
5629         {
5630           fhArmAfterCutsNLocMax1[i][j]  = new TH2F(Form("hArmAfterCutsNLocMax1EBin%d%s",j,pname[i].Data()),
5631                                           Form("Armenteros of splitted cluster with NLM=1, %s, %s",sEBin[j].Data(),ptype[i].Data()),
5632                                           200, -1, 1, narmbins,armmin,armmax);
5633           fhArmAfterCutsNLocMax1[i][j]->SetYTitle("p_{T}^{Arm}");
5634           fhArmAfterCutsNLocMax1[i][j]->SetXTitle("#alpha^{Arm}");
5635           outputContainer->Add(fhArmAfterCutsNLocMax1[i][j]) ;
5636           
5637           fhArmAfterCutsNLocMax2[i][j]  = new TH2F(Form("hArmAfterCutsNLocMax2EBin%d%s",j,pname[i].Data()),
5638                                           Form("Armenteros of splitted cluster with NLM=2, %s, %s",sEBin[j].Data(),ptype[i].Data()),
5639                                           200, -1, 1, narmbins,armmin,armmax);
5640           fhArmAfterCutsNLocMax2[i][j]->SetYTitle("p_{T}^{Arm}");
5641           fhArmAfterCutsNLocMax2[i][j]->SetXTitle("#alpha^{Arm}");
5642           outputContainer->Add(fhArmAfterCutsNLocMax2[i][j]) ;
5643           
5644           fhArmAfterCutsNLocMaxN[i][j]  = new TH2F(Form("hArmAfterCutsNLocMaxNEBin%d%s",j,pname[i].Data()),
5645                                           Form("Armenteros of splitted cluster with NLM>2, %s, %s",sEBin[j].Data(),ptype[i].Data()),
5646                                           200, -1, 1, narmbins,armmin,armmax);
5647           fhArmAfterCutsNLocMaxN[i][j]->SetYTitle("p_{T}^{Arm}");
5648           fhArmAfterCutsNLocMaxN[i][j]->SetXTitle("#alpha^{Arm}");
5649           outputContainer->Add(fhArmAfterCutsNLocMaxN[i][j]) ;
5650         }
5651
5652         fhArmPi0NLocMax1[i][j]  = new TH2F(Form("hArmPi0NLocMax1EBin%d%s",j,pname[i].Data()),
5653                                                  Form("Armenteros of splitted cluster with NLM=1, %s, %s",sEBin[j].Data(),ptype[i].Data()),
5654                                                  200, -1, 1, narmbins,armmin,armmax);
5655         fhArmPi0NLocMax1[i][j]->SetYTitle("p_{T}^{Arm}");
5656         fhArmPi0NLocMax1[i][j]->SetXTitle("#alpha^{Arm}");
5657         outputContainer->Add(fhArmPi0NLocMax1[i][j]) ;
5658         
5659         fhArmPi0NLocMax2[i][j]  = new TH2F(Form("hArmPi0NLocMax2EBin%d%s",j,pname[i].Data()),
5660                                                  Form("Armenteros of splitted cluster with NLM=2, %s, %s",sEBin[j].Data(),ptype[i].Data()),
5661                                                  200, -1, 1, narmbins,armmin,armmax);
5662         fhArmPi0NLocMax2[i][j]->SetYTitle("p_{T}^{Arm}");
5663         fhArmPi0NLocMax2[i][j]->SetXTitle("#alpha^{Arm}");
5664         outputContainer->Add(fhArmPi0NLocMax2[i][j]) ;
5665         
5666         fhArmPi0NLocMaxN[i][j]  = new TH2F(Form("hArmPi0NLocMaxNEBin%d%s",j,pname[i].Data()),
5667                                                  Form("Armenteros of splitted cluster with NLM>2, %s, %s",sEBin[j].Data(),ptype[i].Data()),
5668                                                  200, -1, 1, narmbins,armmin,armmax);
5669         fhArmPi0NLocMaxN[i][j]->SetYTitle("p_{T}^{Arm}");
5670         fhArmPi0NLocMaxN[i][j]->SetXTitle("#alpha^{Arm}");
5671         outputContainer->Add(fhArmPi0NLocMaxN[i][j]) ;
5672  
5673       }
5674     }
5675   }
5676   
5677   return outputContainer ;
5678   
5679 }
5680
5681 //_____________________________________________________________________________
5682 void AliAnaInsideClusterInvariantMass::GetMCIndex(AliVCluster* cluster,
5683                                                   Int_t & mcindex, Int_t & tag)
5684 {
5685   
5686   // Assign mc index depending on MC bit set, to be used in histograms arrays
5687     
5688   tag   = GetMCAnalysisUtils()->CheckOrigin(cluster->GetLabels(),cluster->GetNLabels(), GetReader());
5689   
5690   if      ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0) &&
5691            !GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion)) mcindex = kmcPi0;
5692   else if ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0)  )      mcindex = kmcPi0Conv;
5693   else if ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEta)  )      mcindex = kmcEta;
5694   else if ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton) &&
5695            !GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion)) mcindex = kmcPhoton;
5696   else if ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton) &&
5697             GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion)) mcindex = kmcConversion;
5698   else if (!GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCElectron)  ) mcindex = kmcHadron;
5699  
5700   //printf("MC index %d\n",mcindex);
5701   
5702 }
5703
5704 //______________________________________________________________________________________________________________
5705 void AliAnaInsideClusterInvariantMass::GetMCPrimaryKine(AliVCluster* cluster, const Int_t mcindex,
5706                                                         const Int_t mctag, const Bool_t matched,
5707                                                         Float_t & eprim, Float_t & asymGen, Float_t & angleGen, Int_t & noverlaps )
5708 {
5709   // Check origin of the candidates, get primary kinematics if overlapped meson decay
5710   
5711   Bool_t ok      = kFALSE;
5712   Int_t  mcLabel = cluster->GetLabel();
5713   
5714   TLorentzVector primary = GetMCAnalysisUtils()->GetMother(mcLabel,GetReader(),ok);
5715   eprim = primary.E();
5716   
5717   Int_t mesonLabel = -1;
5718   
5719   if(mcindex == kmcPi0 || mcindex == kmcEta || mcindex == kmcPi0Conv)
5720   {
5721     if(mcindex == kmcPi0 || mcindex == kmcPi0Conv)
5722     {
5723       GetMCAnalysisUtils()->GetMCDecayAsymmetryAngleForPDG(mcLabel,111,GetReader(),asymGen,angleGen,ok);
5724       asymGen = TMath::Abs(asymGen);
5725       TLorentzVector grandmom = GetMCAnalysisUtils()->GetMotherWithPDG(mcLabel,111,GetReader(),ok,mesonLabel);
5726       if(grandmom.E() > 0 && ok) eprim =  grandmom.E();
5727     }
5728     else
5729     {
5730       GetMCAnalysisUtils()->GetMCDecayAsymmetryAngleForPDG(mcLabel,221,GetReader(),asymGen,angleGen,ok);
5731       asymGen = TMath::Abs(asymGen);
5732       TLorentzVector grandmom = GetMCAnalysisUtils()->GetMotherWithPDG(mcLabel,221,GetReader(),ok,mesonLabel);
5733       if(grandmom.E() > 0 && ok) eprim =  grandmom.E();
5734     }
5735   }
5736   
5737   if(!fFillMCOverlapHisto) return;
5738     
5739   const UInt_t nlabels = cluster->GetNLabels();
5740   Int_t overpdg[nlabels];
5741   noverlaps = GetMCAnalysisUtils()->GetNOverlaps(cluster->GetLabels(), nlabels,mctag,mesonLabel,GetReader(),overpdg);
5742
5743   for(Int_t iover = 0; iover < noverlaps; iover++)
5744   {
5745     Float_t histobin = -1;
5746     Int_t   mpdg     = overpdg[iover];
5747     
5748     if     (mpdg==22)      histobin = 0.5;
5749     else if(TMath::Abs(mpdg)==11) histobin = 1.5;
5750     else if(mpdg==-999999) histobin = 4.5;
5751     else
5752     {
5753       Double_t charge = TDatabasePDG::Instance()->GetParticle(mpdg)->Charge();
5754       if(TMath::Abs(charge) > 0 ) histobin = 2.5;
5755       else                        histobin = 3.5;
5756       //printf("charge %f\n",charge);
5757     }
5758     
5759     //printf("\t pdg = %d, histobin %2.1f\n",mpdg,histobin);
5760     if(histobin > 0)
5761     {
5762       if(matched)fhMCEOverlapType     ->Fill(cluster->E(),histobin);
5763       else       fhMCEOverlapTypeMatch->Fill(cluster->E(),histobin);
5764     }
5765   }
5766 }
5767
5768 //___________________________________________
5769 void AliAnaInsideClusterInvariantMass::Init()
5770 {
5771   //Init
5772   //Do some checks
5773   if(fCalorimeter == "PHOS" && !GetReader()->IsPHOSSwitchedOn() && NewOutputAOD())
5774   {
5775     printf("AliAnaInsideClusterInvariantMass::Init() - !!STOP: You want to use PHOS in analysis but it is not read!! \n!!Check the configuration file!!\n");
5776     abort();
5777   }
5778   else  if(fCalorimeter == "EMCAL" && !GetReader()->IsEMCALSwitchedOn() && NewOutputAOD())
5779   {
5780     printf("AliAnaInsideClusterInvariantMass::Init() - !!STOP: You want to use EMCAL in analysis but it is not read!! \n!!Check the configuration file!!\n");
5781     abort();
5782   }
5783   
5784   if( GetReader()->GetDataType() == AliCaloTrackReader::kMC )
5785   {
5786     printf("AliAnaInsideClusterInvariantMass::Init() - !!STOP: You want to use pure MC data!!\n");
5787     abort();
5788     
5789   }
5790   
5791 }
5792
5793 //_____________________________________________________
5794 void AliAnaInsideClusterInvariantMass::InitParameters()
5795 {
5796   //Initialize the parameters of the analysis.  
5797   AddToHistogramsName("AnaPi0InsideClusterInvariantMass_");
5798   
5799   fCalorimeter = "EMCAL" ;
5800
5801   fMinNCells   = 4 ;
5802   fMinBadDist  = 2 ;
5803   
5804   fHistoECut   = 8 ;
5805   
5806   fSSWeightN   = 5;
5807   fSSWeight[0] = 4.6;  fSSWeight[1] = 4.7; fSSWeight[2] = 4.8; fSSWeight[3] = 4.9; fSSWeight[4] = 5.0;
5808   fSSWeight[5] = 5.1;  fSSWeight[6] = 5.2; fSSWeight[7] = 5.3; fSSWeight[8] = 5.4; fSSWeight[9] = 5.5;
5809   
5810   fSSECellCutN   = 10;
5811   fSSECellCut[0] = 0.16;  fSSECellCut[1] = 0.18; fSSECellCut[2] = 0.2; fSSECellCut[3] = 0.22; fSSECellCut[4] = 0.24;
5812   fSSECellCut[5] = 0.26;  fSSECellCut[6] = 0.28; fSSECellCut[7] = 0.3; fSSECellCut[8] = 0.32; fSSECellCut[9] = 0.34;
5813
5814 }
5815
5816
5817 //__________________________________________________________________
5818 void  AliAnaInsideClusterInvariantMass::MakeAnalysisFillHistograms() 
5819 {
5820   //Search for pi0 in fCalorimeter with shower shape analysis 
5821   
5822   TObjArray * pl       = 0x0; 
5823   AliVCaloCells* cells = 0x0;
5824
5825   //Select the Calorimeter of the photon
5826   if(fCalorimeter == "PHOS")
5827   {
5828     pl    = GetPHOSClusters();
5829     cells = GetPHOSCells();
5830   }
5831   else if (fCalorimeter == "EMCAL")
5832   {
5833     pl    = GetEMCALClusters();
5834     cells = GetEMCALCells();
5835   }
5836   
5837   if(!pl || !cells) 
5838   {
5839     Info("MakeAnalysisFillHistograms","TObjArray with %s clusters is NULL!\n",fCalorimeter.Data());
5840     return;
5841   }  
5842   
5843         if(fCalorimeter == "PHOS") return; // Not implemented for PHOS yet
5844
5845   for(Int_t icluster = 0; icluster < pl->GetEntriesFast(); icluster++)
5846   {
5847     AliVCluster * cluster = (AliVCluster*) (pl->At(icluster));  
5848
5849     //-------------------------------------------
5850     // Get cluster parameters, do some rejection
5851     //-------------------------------------------
5852     
5853     Float_t en = cluster->E();
5854     Float_t l0 = cluster->GetM02();
5855     Int_t   nc = cluster->GetNCells();
5856     Float_t bd = cluster->GetDistanceToBadChannel() ; 
5857     
5858     //If too small or big E or low number of cells, or close to a bad channel skip it
5859     
5860     if( en < GetMinEnergy() || en > GetMaxEnergy() || nc < fMinNCells || bd < fMinBadDist) continue ;
5861     
5862     //printf("en %2.3f  GetMinEnergy() %2.3f, GetMaxEnergy() %2.3f , nc %d fMinNCells %d\n",en, GetMinEnergy(),GetMaxEnergy(),nc ,fMinNCells);
5863     
5864     // Track-cluster matching
5865     
5866     Bool_t  matched   = IsTrackMatched(cluster,GetReader()->GetInputEvent());
5867     if(!fFillTMHisto && matched) continue ;
5868
5869     // Get cluster angles
5870     
5871     TLorentzVector lv;
5872     cluster->GetMomentum(lv, GetVertex(0));
5873     Float_t eta = lv.Eta();
5874     Float_t phi = lv.Phi();
5875     if(phi<0) phi=+TMath::TwoPi();
5876     
5877     //printf("en %2.2f, GetMinEnergy() %2.2f, GetMaxEnergy() %2.2f, nc %d, fMinNCells %d,  bd %2.2f, fMinBadDist %2.2f\n",
5878     //       en,GetMinEnergy(), GetMaxEnergy(), nc, fMinNCells, bd, fMinBadDist);
5879     
5880     // Get PID, N local maximum, *** split cluster ***
5881     
5882     Int_t    nMax = 0;
5883     Double_t mass = 0., angle = 0.;
5884     TLorentzVector    lv1, lv2;
5885     Int_t    absId1   =-1; Int_t   absId2   =-1;
5886     Float_t  distbad1 =-1; Float_t distbad2 =-1;
5887     Bool_t   fidcut1  = 0; Bool_t  fidcut2  = 0;
5888     
5889     Int_t pidTag = GetCaloPID()->GetIdentifiedParticleTypeFromClusterSplitting(cluster,cells,GetCaloUtils(),
5890                                                                                GetVertex(0), nMax, mass, angle,
5891                                                                                lv1,lv2,absId1,absId2,
5892                                                                                distbad1,distbad2,fidcut1,fidcut2);
5893     if (nMax <= 0) 
5894     {
5895       if(GetDebug() > 0 )
5896         printf("AliAnaInsideClusterInvariantMass::MakeAnalysisFillHistograms() - No local maximum found! It did not pass CaloPID selection criteria \n");
5897       
5898       continue;
5899     }
5900     
5901     // Set some index for array histograms
5902     
5903     Int_t inlm = -1;
5904     if     (nMax == 1) inlm = 0;
5905     else if(nMax == 2) inlm = 1;
5906     else if(nMax >  2) inlm = 2;
5907     else printf("Wrong N local maximum -> %d, n cells in cluster %d \n",nMax,nc);
5908
5909     // Skip events where one of the new clusters (lowest energy) is close to an EMCal border or a bad channel
5910     if( (fCheckSplitDistToBad) &&
5911         (!fidcut2 || !fidcut1 || distbad1 < fMinBadDist || distbad2 < fMinBadDist))
5912     {
5913       if(GetDebug() > 1)
5914         printf("AliAnaInsideClusterInvariantMass::MakeAnalysisFillHistograms()  - Dist to bad channel cl1 %f, cl2 %f; fid cl1 %d, cl2 %d \n",
5915                                  distbad1,distbad2, fidcut1,fidcut2);
5916       
5917       if(distbad1 < fMinBadDist || distbad2 < fMinBadDist)
5918       {
5919         fhMassBadDistClose[inlm]->Fill(en,mass);
5920         fhM02BadDistClose [inlm]->Fill(en,l0  );
5921       }
5922       
5923       if(!fidcut1 || !fidcut2)
5924       {
5925         fhMassOnBorder[inlm]->Fill(en,mass);
5926         fhM02OnBorder [inlm]->Fill(en,l0  );
5927       }
5928       
5929       continue ;
5930     }
5931
5932     // Get sub-cluster parameters
5933     
5934     Float_t e1 = lv1.Energy();
5935     Float_t e2 = lv2.Energy();
5936     
5937     Double_t tof1  = cells->GetCellTime(absId1);
5938     GetCaloUtils()->RecalibrateCellTime(tof1, fCalorimeter, absId1,GetReader()->GetInputEvent()->GetBunchCrossNumber());
5939     tof1*=1.e9;
5940     
5941     Double_t tof2  = cells->GetCellTime(absId2);
5942     GetCaloUtils()->RecalibrateCellTime(tof2, fCalorimeter, absId2,GetReader()->GetInputEvent()->GetBunchCrossNumber());
5943     tof2*=1.e9;
5944     
5945     Double_t t12diff = tof1-tof2;
5946     
5947     Float_t splitFrac = (e1+e2)/en;
5948
5949     Float_t asym = -10;
5950     if(e1+e2>0) asym = (e1-e2)/(e1+e2);
5951     
5952     //
5953     
5954     Int_t ebin = -1;
5955     if(en > 8  && en <= 12) ebin = 0;
5956     if(en > 12 && en <= 16) ebin = 1;
5957     if(en > 16 && en <= 20) ebin = 2;
5958     if(en > 20)             ebin = 3;
5959     
5960     // MC data histograms and some related calculations
5961     // mc tag, n overlaps, asym of generated mesons
5962     
5963     Int_t   mcindex   = -1;
5964     Int_t   mctag     = -1;
5965     Float_t eprim     = -1;
5966     Float_t asymGen   = -2;
5967     Float_t angleGen  =  2000;
5968     Int_t   noverlaps =  0;
5969     
5970     if(IsDataMC())
5971     {
5972       // MC indexes
5973
5974       GetMCIndex(cluster,mcindex,mctag);
5975       
5976       // MC primary kine, generation fractions
5977
5978       GetMCPrimaryKine(cluster,mcindex,mctag,matched,eprim,asymGen,angleGen,noverlaps);
5979         
5980       // For cluster with MC pi0 and more than 1 maxima
5981       
5982      }
5983     
5984     //
5985     
5986     FillHistograms1(en, e1, e2, nMax, mass, l0, eta, phi, matched, mcindex);
5987
5988     //
5989     
5990     if(fFillNCellHisto)
5991       FillNCellHistograms(nc,en, nMax,matched, mcindex,mass,l0);
5992     
5993     //
5994     
5995     if(fFillSSExtraHisto)
5996       FillSSExtraHistograms(cluster, nMax, matched,mcindex,mass,ebin)  ;
5997     
5998     //
5999
6000     if(!matched && ebin >= 0 && fFillEbinHisto)
6001       FillEBinHistograms(ebin,nMax,mcindex,splitFrac,mass,asym,l0);
6002
6003     //
6004     
6005     if(fFillAngleHisto)
6006       FillAngleHistograms(nMax,matched,mcindex,en,angle,mass,angleGen,l0, asym,pidTag);
6007
6008     if(fFillArmenterosHisto && ebin >= 0)
6009       FillArmenterosHistograms(nMax, ebin, mcindex, en, lv1, lv2, l0, pidTag);
6010
6011     if(fFillThetaStarHisto)
6012       FillThetaStarHistograms(nMax,matched,mcindex, en, lv1, lv2, l0, pidTag);
6013
6014     
6015     //---------------------------------------------------------------------
6016     // From here start applying some cuts
6017     //---------------------------------------------------------------------
6018     
6019     // If set, check just on MC clusters when SS cut is applied
6020     if( IsDataMC() && mcindex > 0 && mcindex < 7 && GetCaloPID()->IsInM02Range(l0) )
6021     {
6022       // For cluster with MC pi0 and more than 1 maxima
6023       
6024       if(fFillMCOverlapHisto)
6025         CheckLocalMaximaMCOrigin(cluster, mcindex,noverlaps,e1,e2,mass);
6026       //l0, l1, l2);
6027       
6028       //
6029       
6030       if(fFillMCHisto)
6031         FillMCHistograms(en,e1,e2,ebin,mcindex,noverlaps,l0,mass,
6032                          nMax,matched,splitFrac, asym, eprim,asymGen);
6033       
6034       //
6035       
6036       if(fFillMCOverlapHisto)
6037         FillMCOverlapHistograms(en,eprim,nc,mass,l0,asym,splitFrac,inlm,ebin,matched,mcindex,noverlaps);
6038       
6039     }
6040     
6041     // Fill few histograms, some still without cuts
6042     FillHistograms2(en, eprim, e1, e2, nMax, mass, l0, matched, mcindex);
6043     
6044     if(pidTag==AliCaloPID::kPi0)
6045     {
6046       FillIdPi0Histograms(en, e1, e2, nc, nMax, t12diff, mass, l0, eta, phi, matched, mcindex);
6047       
6048       if(fFillSSWeightHisto)
6049         FillSSWeightHistograms(cluster, inlm, absId1, absId2);
6050       
6051       if(fFillTMHisto && fFillTMResidualHisto)
6052         FillTrackMatchingHistograms(cluster,nMax,mcindex);
6053       
6054       if(fFillMCOverlapHisto && IsDataMC() && mcindex > 0 && mcindex < 7 && !matched)
6055       {
6056         if     (noverlaps == 0) fhMCEEpriOverlap0IdPi0 [inlm][mcindex]->Fill(en, eprim);
6057         else if(noverlaps == 1) fhMCEEpriOverlap1IdPi0 [inlm][mcindex]->Fill(en, eprim);
6058         else if(noverlaps  > 1) fhMCEEpriOverlapNIdPi0 [inlm][mcindex]->Fill(en, eprim);
6059       }
6060     }
6061     else if(fFillIdEtaHisto && pidTag==AliCaloPID::kEta)
6062     {
6063       FillIdEtaHistograms(en, e1, e2, nc, nMax, t12diff, mass, l0, eta, phi, matched, mcindex);
6064     }
6065     else if(fFillIdConvHisto && pidTag==AliCaloPID::kPhoton)
6066     {
6067       FillIdConvHistograms(en, nMax, asym, mass, l0, matched, mcindex);
6068     }
6069     
6070   }//loop
6071   
6072   if(GetDebug() > 1) printf("AliAnaInsideClusterInvariantMass::MakeAnalysisFillHistograms() - END \n");  
6073
6074 }
6075
6076 //______________________________________________________________________
6077 void AliAnaInsideClusterInvariantMass::Print(const Option_t * opt) const
6078 {
6079   //Print some relevant parameters set for the analysis
6080   if(! opt)
6081     return;
6082   
6083   printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
6084   AliAnaCaloTrackCorrBaseClass::Print("");
6085   printf("Calorimeter     =     %s\n",  fCalorimeter.Data()) ;
6086   if(GetCaloUtils()) printf("Loc. Max. E > %2.2f\n",       GetCaloUtils()->GetLocalMaximaCutE());
6087   if(GetCaloUtils()) printf("Loc. Max. E Diff > %2.2f\n",  GetCaloUtils()->GetLocalMaximaCutEDiff());
6088   printf("Min. N Cells =%d \n",         fMinNCells) ;
6089   printf("Min. Dist. to Bad =%1.1f \n", fMinBadDist) ;
6090   if(fFillSSWeightHisto) printf(" N w %d - N e cut %d \n",fSSWeightN,fSSECellCutN);
6091
6092   printf("    \n") ;
6093   
6094
6095
6096 //___________________________________________________________________________________________________________________
6097 void AliAnaInsideClusterInvariantMass::RecalculateClusterShowerShapeParametersWithCellCut(const AliEMCALGeometry * geom,
6098                                                                                           AliVCaloCells* cells,
6099                                                                                           AliVCluster * cluster,
6100                                                                                           Float_t & l0,   Float_t & l1,
6101                                                                                           Float_t & disp, Float_t & dEta, Float_t & dPhi,
6102                                                                                           Float_t & sEta, Float_t & sPhi, Float_t & sEtaPhi,
6103                                                                                           Float_t eCellMin)
6104 {
6105   // Calculates new center of gravity in the local EMCAL-module coordinates
6106   // and tranfers into global ALICE coordinates
6107   // Calculates Dispersion and main axis
6108   
6109   if(!cluster)
6110   {
6111     AliInfo("Cluster pointer null!");
6112     return;
6113   }
6114   
6115   Double_t eCell       = 0.;
6116   Float_t  fraction    = 1.;
6117   Float_t  recalFactor = 1.;
6118   
6119   Int_t    iSupMod = -1;
6120   Int_t    iTower  = -1;
6121   Int_t    iIphi   = -1;
6122   Int_t    iIeta   = -1;
6123   Int_t    iphi    = -1;
6124   Int_t    ieta    = -1;
6125   Double_t etai    = -1.;
6126   Double_t phii    = -1.;
6127   
6128   Int_t    nstat   = 0 ;
6129   Float_t  wtot    = 0.;
6130   Double_t w       = 0.;
6131   Double_t etaMean = 0.;
6132   Double_t phiMean = 0.;
6133     
6134   //Loop on cells, calculate the cluster energy, in case a cut on cell energy is added
6135   // and to check if the cluster is between 2 SM in eta
6136   Int_t   iSM0   = -1;
6137   Bool_t  shared = kFALSE;
6138   Float_t energy = 0;
6139
6140   for(Int_t iDigit=0; iDigit < cluster->GetNCells(); iDigit++)
6141   {
6142     //Get from the absid the supermodule, tower and eta/phi numbers
6143     geom->GetCellIndex(cluster->GetCellAbsId(iDigit),iSupMod,iTower,iIphi,iIeta);
6144     geom->GetCellPhiEtaIndexInSModule(iSupMod,iTower,iIphi,iIeta, iphi,ieta);
6145     
6146     //Check if there are cells of different SM
6147     if     (iDigit == 0   ) iSM0 = iSupMod;
6148     else if(iSupMod!= iSM0) shared = kTRUE;
6149     
6150     //Get the cell energy, if recalibration is on, apply factors
6151     fraction  = cluster->GetCellAmplitudeFraction(iDigit);
6152     if(fraction < 1e-4) fraction = 1.; // in case unfolding is off
6153     
6154     if(GetCaloUtils()->GetEMCALRecoUtils()->IsRecalibrationOn())
6155     {
6156       recalFactor = GetCaloUtils()->GetEMCALRecoUtils()->GetEMCALChannelRecalibrationFactor(iSupMod,ieta,iphi);
6157     }
6158     
6159     eCell  = cells->GetCellAmplitude(cluster->GetCellAbsId(iDigit))*fraction*recalFactor;
6160     
6161     if(eCell > eCellMin) energy += eCell;
6162     
6163   }//cell loop
6164   
6165   //Loop on cells, get weighted parameters
6166   for(Int_t iDigit=0; iDigit < cluster->GetNCells(); iDigit++)
6167   {
6168     //Get from the absid the supermodule, tower and eta/phi numbers
6169     geom->GetCellIndex(cluster->GetCellAbsId(iDigit),iSupMod,iTower,iIphi,iIeta);
6170     geom->GetCellPhiEtaIndexInSModule(iSupMod,iTower,iIphi,iIeta, iphi,ieta);
6171     
6172     //Get the cell energy, if recalibration is on, apply factors
6173     fraction  = cluster->GetCellAmplitudeFraction(iDigit);
6174     if(fraction < 1e-4) fraction = 1.; // in case unfolding is off
6175     
6176     if(GetCaloUtils()->GetEMCALRecoUtils()->IsRecalibrationOn())
6177     {
6178       recalFactor = GetCaloUtils()->GetEMCALRecoUtils()->GetEMCALChannelRecalibrationFactor(iSupMod,ieta,iphi);
6179     }
6180     
6181     eCell  = cells->GetCellAmplitude(cluster->GetCellAbsId(iDigit))*fraction*recalFactor;
6182     
6183     // In case of a shared cluster, index of SM in C side, columns start at 48 and ends at 48*2
6184     // C Side impair SM, nSupMod%2=1; A side pair SM, nSupMod%2=0
6185     if(shared && iSupMod%2) ieta+=AliEMCALGeoParams::fgkEMCALCols;
6186     
6187     if(energy > 0 && eCell > eCellMin)
6188     {
6189       w  = GetCaloUtils()->GetEMCALRecoUtils()->GetCellWeight(eCell,energy);
6190
6191       //correct weight, ONLY in simulation
6192       w *= (1 - fWSimu * w );
6193
6194       etai=(Double_t)ieta;
6195       phii=(Double_t)iphi;
6196       
6197       if(w > 0.0)
6198       {
6199         wtot += w ;
6200         nstat++;
6201         //Shower shape
6202         sEta     += w * etai * etai ;
6203         etaMean  += w * etai ;
6204         sPhi     += w * phii * phii ;
6205         phiMean  += w * phii ;
6206         sEtaPhi  += w * etai * phii ;
6207       }
6208     }
6209     else if(energy == 0 || (eCellMin <0.01 && eCell == 0)) AliError(Form("Wrong energy %f and/or amplitude %f\n", eCell, energy));
6210     
6211   }//cell loop
6212   
6213   //Normalize to the weight
6214   if (wtot > 0)
6215   {
6216     etaMean /= wtot ;
6217     phiMean /= wtot ;
6218   }
6219   else
6220     AliError(Form("Wrong weight %f\n", wtot));
6221   
6222   //Calculate dispersion
6223   for(Int_t iDigit=0; iDigit < cluster->GetNCells(); iDigit++)
6224   {
6225     //Get from the absid the supermodule, tower and eta/phi numbers
6226     geom->GetCellIndex(cluster->GetCellAbsId(iDigit),iSupMod,iTower,iIphi,iIeta);
6227     geom->GetCellPhiEtaIndexInSModule(iSupMod,iTower,iIphi,iIeta, iphi,ieta);
6228     
6229     //Get the cell energy, if recalibration is on, apply factors
6230     fraction  = cluster->GetCellAmplitudeFraction(iDigit);
6231     if(fraction < 1e-4) fraction = 1.; // in case unfolding is off
6232     if (GetCaloUtils()->GetEMCALRecoUtils()->IsRecalibrationOn())
6233     {
6234       recalFactor = GetCaloUtils()->GetEMCALRecoUtils()->GetEMCALChannelRecalibrationFactor(iSupMod,ieta,iphi);
6235     }
6236     
6237     eCell  = cells->GetCellAmplitude(cluster->GetCellAbsId(iDigit))*fraction*recalFactor;
6238     
6239     // In case of a shared cluster, index of SM in C side, columns start at 48 and ends at 48*2
6240     // C Side impair SM, nSupMod%2=1; A side pair SM, nSupMod%2=0
6241     if(shared && iSupMod%2) ieta+=AliEMCALGeoParams::fgkEMCALCols;
6242     
6243     if(energy > 0 && eCell > eCellMin)
6244     {
6245       w  = GetCaloUtils()->GetEMCALRecoUtils()->GetCellWeight(eCell,energy);
6246       
6247       //correct weight, ONLY in simulation
6248       w *= (1 - fWSimu * w );
6249
6250       etai=(Double_t)ieta;
6251       phii=(Double_t)iphi;
6252       if(w > 0.0)
6253       {
6254         disp +=  w *((etai-etaMean)*(etai-etaMean)+(phii-phiMean)*(phii-phiMean));
6255         dEta +=  w * (etai-etaMean)*(etai-etaMean) ;
6256         dPhi +=  w * (phii-phiMean)*(phii-phiMean) ;
6257       }
6258     }
6259     else if(energy == 0 || (eCellMin <0.01 && eCell == 0)) AliError(Form("Wrong energy %f and/or amplitude %f\n", eCell, energy));
6260   }// cell loop
6261   
6262   //Normalize to the weigth and set shower shape parameters
6263   if (wtot > 0 && nstat > 1)
6264   {
6265     disp    /= wtot ;
6266     dEta    /= wtot ;
6267     dPhi    /= wtot ;
6268     sEta    /= wtot ;
6269     sPhi    /= wtot ;
6270     sEtaPhi /= wtot ;
6271     
6272     sEta    -= etaMean * etaMean ;
6273     sPhi    -= phiMean * phiMean ;
6274     sEtaPhi -= etaMean * phiMean ;
6275     
6276     l0 = (0.5 * (sEta + sPhi) + TMath::Sqrt( 0.25 * (sEta - sPhi) * (sEta - sPhi) + sEtaPhi * sEtaPhi ));
6277     l1 = (0.5 * (sEta + sPhi) - TMath::Sqrt( 0.25 * (sEta - sPhi) * (sEta - sPhi) + sEtaPhi * sEtaPhi ));
6278   }
6279   else
6280   {
6281     l0   = 0. ;
6282     l1   = 0. ;
6283     dEta = 0. ; dPhi = 0. ; disp    = 0. ;
6284     sEta = 0. ; sPhi = 0. ; sEtaPhi = 0. ;
6285   }
6286   
6287 }
6288
6289