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