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