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