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