1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 //_________________________________________________________________________
18 // Split clusters with some criteria and calculate invariant mass
19 // to identify them as pi0 or conversion
22 //-- Author: Gustavo Conesa (LPSC-Grenoble)
23 //_________________________________________________________________________
25 //////////////////////////////////////////////////////////////////////////////
28 // --- ROOT system ---
30 #include <TClonesArray.h>
31 #include <TObjString.h>
33 #include <TDatabasePDG.h>
35 // --- Analysis system ---
36 #include "AliAnaInsideClusterInvariantMass.h"
37 #include "AliCaloTrackReader.h"
38 #include "AliMCAnalysisUtils.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"
48 //#include "AliPHOSGeoUtils.h"
49 #include "AliEMCALGeometry.h"
51 ClassImp(AliAnaInsideClusterInvariantMass)
53 //__________________________________________________________________
54 AliAnaInsideClusterInvariantMass::AliAnaInsideClusterInvariantMass() :
55 AliAnaCaloTrackCorrBaseClass(),
57 fM02MaxCut(0), fM02MinCut(0),
58 fMinNCells(0), fMinBadDist(0),
60 fFillAngleHisto(kFALSE),
62 fFillTMResidualHisto(kFALSE),
63 fFillSSExtraHisto(kFALSE),
65 fFillSSWeightHisto(kFALSE),
67 fFillMCOverlapHisto(0),
68 fSSWeightN(0), fSSECellCutN(0),
70 fhMassM02CutNLocMax1(0), fhMassM02CutNLocMax2(0), fhMassM02CutNLocMaxN(0),
71 fhAsymM02CutNLocMax1(0), fhAsymM02CutNLocMax2(0), fhAsymM02CutNLocMaxN(0),
72 fhMassSplitECutNLocMax1(0), fhMassSplitECutNLocMax2(0), fhMassSplitECutNLocMaxN(0),
73 fhMCGenFracAfterCutsNLocMax1MCPi0(0),
74 fhMCGenFracAfterCutsNLocMax2MCPi0(0),
75 fhMCGenFracAfterCutsNLocMaxNMCPi0(0),
76 fhMCGenSplitEFracAfterCutsNLocMax1MCPi0(0),
77 fhMCGenSplitEFracAfterCutsNLocMax2MCPi0(0),
78 fhMCGenSplitEFracAfterCutsNLocMaxNMCPi0(0),
79 fhEventPlanePi0NLocMax1(0), fhEventPlaneEtaNLocMax1(0),
80 fhEventPlanePi0NLocMax2(0), fhEventPlaneEtaNLocMax2(0),
81 fhEventPlanePi0NLocMaxN(0), fhEventPlaneEtaNLocMaxN(0),
82 fhClusterEtaPhiNLocMax1(0), fhClusterEtaPhiNLocMax2(0), fhClusterEtaPhiNLocMaxN(0),
83 fhPi0EtaPhiNLocMax1(0), fhPi0EtaPhiNLocMax2(0), fhPi0EtaPhiNLocMaxN(0),
84 fhEtaEtaPhiNLocMax1(0), fhEtaEtaPhiNLocMax2(0), fhEtaEtaPhiNLocMaxN(0),
85 fhPi0EPairDiffTimeNLM1(0), fhPi0EPairDiffTimeNLM2(0), fhPi0EPairDiffTimeNLMN(0),
86 fhEtaEPairDiffTimeNLM1(0), fhEtaEPairDiffTimeNLM2(0), fhEtaEPairDiffTimeNLMN(0),
87 fhMCPi0HighNLMPair(0), fhMCPi0LowNLMPair(0),
88 fhMCPi0AnyNLMPair(0), fhMCPi0NoneNLMPair(0),
89 fhMCPi0HighNLMPairNoMCMatch(0), fhMCPi0LowNLMPairNoMCMatch(0),
90 fhMCPi0AnyNLMPairNoMCMatch(0), fhMCPi0NoneNLMPairNoMCMatch(0),
91 fhMCEOverlapType(0), fhMCEOverlapTypeMatch(0)
95 // Init array of histograms
96 for(Int_t i = 0; i < 8; i++)
98 for(Int_t j = 0; j < 2; j++)
100 fhMassNLocMax1[i][j] = 0;
101 fhMassNLocMax2[i][j] = 0;
102 fhMassNLocMaxN[i][j] = 0;
104 fhNLocMaxM02Cut[i][j] = 0;
105 fhM02NLocMax1[i][j] = 0;
106 fhM02NLocMax2[i][j] = 0;
107 fhM02NLocMaxN[i][j] = 0;
108 fhNCellNLocMax1[i][j] = 0;
109 fhNCellNLocMax2[i][j] = 0;
110 fhNCellNLocMaxN[i][j] = 0;
111 fhM02Pi0NLocMax1[i][j] = 0;
112 fhM02EtaNLocMax1[i][j] = 0;
113 fhM02ConNLocMax1[i][j] = 0;
114 fhM02Pi0NLocMax2[i][j] = 0;
115 fhM02EtaNLocMax2[i][j] = 0;
116 fhM02ConNLocMax2[i][j] = 0;
117 fhM02Pi0NLocMaxN[i][j] = 0;
118 fhM02EtaNLocMaxN[i][j] = 0;
119 fhM02ConNLocMaxN[i][j] = 0;
121 fhMassPi0NLocMax1[i][j] = 0;
122 fhMassEtaNLocMax1[i][j] = 0;
123 fhMassConNLocMax1[i][j] = 0;
124 fhMassPi0NLocMax2[i][j] = 0;
125 fhMassEtaNLocMax2[i][j] = 0;
126 fhMassConNLocMax2[i][j] = 0;
127 fhMassPi0NLocMaxN[i][j] = 0;
128 fhMassEtaNLocMaxN[i][j] = 0;
129 fhMassConNLocMaxN[i][j] = 0;
132 fhAsyPi0NLocMax1[i][j] = 0;
133 fhAsyEtaNLocMax1[i][j] = 0;
134 fhAsyConNLocMax1[i][j] = 0;
135 fhAsyPi0NLocMax2[i][j] = 0;
136 fhAsyEtaNLocMax2[i][j] = 0;
137 fhAsyConNLocMax2[i][j] = 0;
138 fhAsyPi0NLocMaxN[i][j] = 0;
139 fhAsyEtaNLocMaxN[i][j] = 0;
140 fhAsyConNLocMaxN[i][j] = 0;
142 fhMassM02NLocMax1[i][j]= 0;
143 fhMassM02NLocMax2[i][j]= 0;
144 fhMassM02NLocMaxN[i][j]= 0;
145 fhMassDispEtaNLocMax1[i][j]= 0;
146 fhMassDispEtaNLocMax2[i][j]= 0;
147 fhMassDispEtaNLocMaxN[i][j]= 0;
148 fhMassDispPhiNLocMax1[i][j]= 0;
149 fhMassDispPhiNLocMax2[i][j]= 0;
150 fhMassDispPhiNLocMaxN[i][j]= 0;
151 fhMassDispAsyNLocMax1[i][j]= 0;
152 fhMassDispAsyNLocMax2[i][j]= 0;
153 fhMassDispAsyNLocMaxN[i][j]= 0;
155 fhSplitEFractionNLocMax1[i][j]=0;
156 fhSplitEFractionNLocMax2[i][j]=0;
157 fhSplitEFractionNLocMaxN[i][j]=0;
159 fhMCGenFracNLocMax1[i][j]= 0;
160 fhMCGenFracNLocMax2[i][j]= 0;
161 fhMCGenFracNLocMaxN[i][j]= 0;
163 fhMCGenSplitEFracNLocMax1[i][j]= 0;
164 fhMCGenSplitEFracNLocMax2[i][j]= 0;
165 fhMCGenSplitEFracNLocMaxN[i][j]= 0;
167 fhMCGenEFracvsSplitEFracNLocMax1[i][j]= 0;
168 fhMCGenEFracvsSplitEFracNLocMax2[i][j]= 0;
169 fhMCGenEFracvsSplitEFracNLocMaxN[i][j]= 0;
171 fhMCGenEvsSplitENLocMax1[i][j]= 0;
172 fhMCGenEvsSplitENLocMax2[i][j]= 0;
173 fhMCGenEvsSplitENLocMaxN[i][j]= 0;
175 fhAsymNLocMax1 [i][j] = 0;
176 fhAsymNLocMax2 [i][j] = 0;
177 fhAsymNLocMaxN [i][j] = 0;
179 fhMassAfterCutsNLocMax1[i][j] = 0;
180 fhMassAfterCutsNLocMax2[i][j] = 0;
181 fhMassAfterCutsNLocMaxN[i][j] = 0;
183 fhSplitEFractionAfterCutsNLocMax1[i][j] = 0 ;
184 fhSplitEFractionAfterCutsNLocMax2[i][j] = 0 ;
185 fhSplitEFractionAfterCutsNLocMaxN[i][j] = 0 ;
187 fhCentralityPi0NLocMax1[i][j] = 0 ;
188 fhCentralityEtaNLocMax1[i][j] = 0 ;
190 fhCentralityPi0NLocMax2[i][j] = 0 ;
191 fhCentralityEtaNLocMax2[i][j] = 0 ;
193 fhCentralityPi0NLocMaxN[i][j] = 0 ;
194 fhCentralityEtaNLocMaxN[i][j] = 0 ;
197 for(Int_t jj = 0; jj < 4; jj++)
199 fhM02MCGenFracNLocMax1Ebin[i][jj] = 0;
200 fhM02MCGenFracNLocMax2Ebin[i][jj] = 0;
201 fhM02MCGenFracNLocMaxNEbin[i][jj] = 0;
203 fhMassMCGenFracNLocMax1Ebin[i][jj]= 0;
204 fhMassMCGenFracNLocMax2Ebin[i][jj]= 0;
205 fhMassMCGenFracNLocMaxNEbin[i][jj]= 0;
207 fhMCGenFracNLocMaxEbin[i][jj] = 0;
208 fhMCGenFracNLocMaxEbinMatched[i][jj]= 0;
210 fhMassSplitEFractionNLocMax1Ebin[i][jj] = 0;
211 fhMassSplitEFractionNLocMax2Ebin[i][jj] = 0;
212 fhMassSplitEFractionNLocMaxNEbin[i][jj] = 0;
215 fhTrackMatchedDEtaNLocMax1[i] = 0;
216 fhTrackMatchedDPhiNLocMax1[i] = 0;
217 fhTrackMatchedDEtaNLocMax2[i] = 0;
218 fhTrackMatchedDPhiNLocMax2[i] = 0;
219 fhTrackMatchedDEtaNLocMaxN[i] = 0;
220 fhTrackMatchedDPhiNLocMaxN[i] = 0;
222 fhTrackMatchedDEtaNLocMax1Pos[i] = 0;
223 fhTrackMatchedDPhiNLocMax1Pos[i] = 0;
224 fhTrackMatchedDEtaNLocMax2Pos[i] = 0;
225 fhTrackMatchedDPhiNLocMax2Pos[i] = 0;
226 fhTrackMatchedDEtaNLocMaxNPos[i] = 0;
227 fhTrackMatchedDPhiNLocMaxNPos[i] = 0;
229 fhTrackMatchedDEtaNLocMax1Neg[i] = 0;
230 fhTrackMatchedDPhiNLocMax1Neg[i] = 0;
231 fhTrackMatchedDEtaNLocMax2Neg[i] = 0;
232 fhTrackMatchedDPhiNLocMax2Neg[i] = 0;
233 fhTrackMatchedDEtaNLocMaxNNeg[i] = 0;
234 fhTrackMatchedDPhiNLocMaxNNeg[i] = 0;
236 for(Int_t nlm = 0; nlm < 3; nlm++)
238 fhMCEM02Overlap0 [nlm][i] = 0;
239 fhMCEM02Overlap1 [nlm][i] = 0;
240 fhMCEM02OverlapN [nlm][i] = 0;
241 fhMCEM02Overlap0Match[nlm][i] = 0;
242 fhMCEM02Overlap1Match[nlm][i] = 0;
243 fhMCEM02OverlapNMatch[nlm][i] = 0;
245 fhMCEMassOverlap0 [nlm][i] = 0;
246 fhMCEMassOverlap1 [nlm][i] = 0;
247 fhMCEMassOverlapN [nlm][i] = 0;
248 fhMCEMassOverlap0Match[nlm][i] = 0;
249 fhMCEMassOverlap1Match[nlm][i] = 0;
250 fhMCEMassOverlapNMatch[nlm][i] = 0;
252 fhMCENOverlaps [nlm][i] = 0;
253 fhMCENOverlapsMatch [nlm][i] = 0;
257 fhMCPi0MassM02Overlap0 [nlm][i] = 0;
258 fhMCPi0MassM02Overlap1 [nlm][i] = 0;
259 fhMCPi0MassM02OverlapN [nlm][i] = 0;
260 fhMCPi0MassM02Overlap0Match[nlm][i] = 0;
261 fhMCPi0MassM02Overlap1Match[nlm][i] = 0;
262 fhMCPi0MassM02OverlapNMatch[nlm][i] = 0;
266 for(Int_t i = 0; i < 2; i++)
268 fhAnglePairNLocMax1 [i] = 0;
269 fhAnglePairNLocMax2 [i] = 0;
270 fhAnglePairNLocMaxN [i] = 0;
271 fhAnglePairMassNLocMax1[i] = 0;
272 fhAnglePairMassNLocMax2[i] = 0;
273 fhAnglePairMassNLocMaxN[i] = 0;
274 fhSplitEFractionvsAsyNLocMax1[i] = 0;
275 fhSplitEFractionvsAsyNLocMax2[i] = 0;
276 fhSplitEFractionvsAsyNLocMaxN[i] = 0;
279 for(Int_t i = 0; i < 4; i++)
281 fhMassM02NLocMax1Ebin[i] = 0 ;
282 fhMassM02NLocMax2Ebin[i] = 0 ;
283 fhMassM02NLocMaxNEbin[i] = 0 ;
285 fhMassAsyNLocMax1Ebin[i] = 0 ;
286 fhMassAsyNLocMax2Ebin[i] = 0 ;
287 fhMassAsyNLocMaxNEbin[i] = 0 ;
289 fhAsyMCGenRecoNLocMax1EbinPi0[i] = 0 ;
290 fhAsyMCGenRecoNLocMax2EbinPi0[i] = 0 ;
291 fhAsyMCGenRecoNLocMaxNEbinPi0[i] = 0 ;
293 fhMassDispEtaNLocMax1Ebin[i] = 0 ;
294 fhMassDispEtaNLocMax2Ebin[i] = 0 ;
295 fhMassDispEtaNLocMaxNEbin[i] = 0 ;
297 fhMassDispPhiNLocMax1Ebin[i] = 0 ;
298 fhMassDispPhiNLocMax2Ebin[i] = 0 ;
299 fhMassDispPhiNLocMaxNEbin[i] = 0 ;
301 fhMassDispAsyNLocMax1Ebin[i] = 0 ;
302 fhMassDispAsyNLocMax2Ebin[i] = 0 ;
303 fhMassDispAsyNLocMaxNEbin[i] = 0 ;
305 fhMCAsymM02NLocMax1MCPi0Ebin[i] = 0 ;
306 fhMCAsymM02NLocMax2MCPi0Ebin[i] = 0 ;
307 fhMCAsymM02NLocMaxNMCPi0Ebin[i] = 0 ;
310 for(Int_t nlm = 0; nlm < 3; nlm++)
312 fhPi0CellE [nlm] = 0 ;
313 fhPi0CellEFrac [nlm] = 0 ;
314 fhPi0CellLogEFrac[nlm] = 0 ;
316 fhPi0CellEMaxEMax2Frac [nlm] = 0 ;
317 fhPi0CellEMaxClusterFrac [nlm] = 0 ;
318 fhPi0CellEMax2ClusterFrac[nlm] = 0 ;
320 fhPi0CellEMaxFrac [nlm] = 0 ;
321 fhPi0CellEMax2Frac[nlm] = 0 ;
323 for(Int_t i = 0; i < 10; i++)
325 fhM02WeightPi0 [nlm][i] = 0;
326 fhM02ECellCutPi0[nlm][i] = 0;
334 //_______________________________________________________________________________________________________
335 void AliAnaInsideClusterInvariantMass::CheckLocalMaximaMCOrigin(AliVCluster* cluster, const Int_t mcindex)
337 // Check origin NLM tower of the cluster, when MC gives merged pi0
339 if(!fFillMCOverlapHisto) return;
341 if(!IsDataMC()) return;
343 if(mcindex != kmcPi0 && mcindex != kmcPi0Conv) return;
345 const UInt_t nc = cluster->GetNCells();
348 Int_t nMax = GetCaloUtils()->GetNumberOfLocalMaxima(cluster, GetEMCALCells(),list, elist);
350 // printf("AliAnaInsideClusterInvariantMass::CheckLocalMaximaMCOrigin() - Cluster E %2.2f; NLM = %d, cluster MC labels:\n",cluster->E(),nMax);
352 // for (UInt_t ilab = 0; ilab < cluster->GetNLabels(); ilab++ )
354 // Bool_t ok =kFALSE,gok = kFALSE;
355 // Int_t pdg = -22222, status = -1;
356 // Int_t gpdg = -22222, gstatus = -1;
357 // Int_t ggpdg = -22222, ggstatus = -1;
358 // Int_t gLabel = -1, ggLabel = -1;
360 // Int_t label = cluster->GetLabels()[ilab];
361 // TLorentzVector primary =GetMCAnalysisUtils()->GetMother (label,GetReader(), pdg, status, ok);
362 // TLorentzVector gprimary =GetMCAnalysisUtils()->GetGrandMother(label,GetReader(), gpdg, gstatus,gok, gLabel,ggLabel);
363 // TLorentzVector ggprimary =GetMCAnalysisUtils()->GetMother(ggLabel ,GetReader(),ggpdg,ggstatus,gok);
364 // printf("\t %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",
365 // ilab,label,pdg,primary.E(), gLabel,gpdg,gprimary.E(), ggLabel,ggpdg,ggprimary.E());
369 // printf("AliAnaInsideClusterInvariantMass::CheckLocalMaximaMCOrigin() - Cluster Cells MC labels:\n");
371 // for (UInt_t icell = 0; icell < nc; icell++ )
373 // Bool_t ok =kFALSE,gok = kFALSE;
374 // Int_t pdg = -22222, status = -1;
375 // Int_t gpdg = -22222, gstatus = -1;
376 // Int_t ggpdg = -22222, ggstatus = -1;
377 // Int_t gLabel = -1, ggLabel = -1;
379 // Int_t absId = cluster->GetCellAbsId(icell);
381 // printf("cell abs Id %d, amplitude %f\n",absId,GetEMCALCells()->GetCellAmplitude(absId));
383 // Int_t label = GetEMCALCells()->GetCellMCLabel(absId);
384 // TLorentzVector primary =GetMCAnalysisUtils()->GetMother (label,GetReader(), pdg, status, ok);
385 // TLorentzVector gprimary =GetMCAnalysisUtils()->GetGrandMother(label,GetReader(), gpdg, gstatus,gok, gLabel,ggLabel);
386 // TLorentzVector ggprimary =GetMCAnalysisUtils()->GetMother(ggLabel ,GetReader(),ggpdg,ggstatus,gok);
387 // printf(" %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",
388 // icell,label,pdg,primary.E(), gLabel,gpdg,gprimary.E(), ggLabel,ggpdg,ggprimary.E());
392 //If only one maxima, consider all the towers in the cluster
395 for (UInt_t icell = 0; icell < nc; icell++ )
397 list [icell] = cluster->GetCellAbsId(icell);
398 elist[icell] = GetEMCALCells()->GetCellAmplitude(list[icell]);
402 //Find highest energy Local Maxima Towers
407 for(Int_t i = 0; i < nMax; i++)
409 //printf("i %d: AbsId %d; E %2.3f\n",i,list[i],elist[i]);
416 //Find second highest
417 for(Int_t i = 0; i < nMax; i++)
419 if(i==imax) continue;
428 //printf("Highest : %d and %d\n",imax,imax2);
430 // Check that the highest mc label and the max cluster label are the same
431 Int_t mcLabelMax = GetEMCALCells()->GetCellMCLabel(list[imax]);
432 GetReader()->RemapMCLabelForAODs(mcLabelMax);
433 Int_t mcLabelMax2 = GetEMCALCells()->GetCellMCLabel(list[imax2]);
434 GetReader()->RemapMCLabelForAODs(mcLabelMax2);
436 Int_t mcLabelclusterMax = cluster->GetLabels()[0];
437 Bool_t matchHighLMAndHighMC = kFALSE;
439 if(mcLabelclusterMax==mcLabelMax)
441 matchHighLMAndHighMC = kTRUE;
442 //printf("*** MATCH cluster and LM maximum ***\n");
446 //printf("*** NO MATCH cluster and LM maximum, check second ***\n");
447 if(mcLabelclusterMax==mcLabelMax2)
449 //printf("\t *** MATCH cluster and 2nd LM maximum ***\n");
450 matchHighLMAndHighMC = kTRUE;
454 //printf("\t *** NO MATCH***\n");
455 matchHighLMAndHighMC = kFALSE;
459 // Compare the common ancestors of the 2 highest energy local maxima
460 Int_t ancPDG = 0, ancStatus = -1;
461 TLorentzVector momentum; TVector3 prodVertex;
463 Bool_t high = kFALSE;
466 // // print maxima origin
467 // for(Int_t i = 0; i < nMax; i++)
469 // Int_t mcLabel1 = GetEMCALCells()->GetCellMCLabel(list[i]);
470 // GetReader()->RemapMCLabelForAODs(mcLabel1);
472 // Bool_t ok =kFALSE,gok = kFALSE;
473 // Int_t pdg = -22222, status = -1;
474 // Int_t gpdg = -22222, gstatus = -1;
475 // Int_t ggpdg = -22222, ggstatus = -1;
476 // Int_t gLabel = -1, ggLabel = -1;
477 // TLorentzVector primary =GetMCAnalysisUtils()->GetMother (mcLabel1,GetReader(), pdg, status, ok);
478 // TLorentzVector gprimary =GetMCAnalysisUtils()->GetGrandMother(mcLabel1,GetReader(), gpdg, gstatus,gok, gLabel,ggLabel);
479 // TLorentzVector ggprimary =GetMCAnalysisUtils()->GetMother(ggLabel ,GetReader(),ggpdg,ggstatus,gok);
480 // 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",
481 // i,mcLabel1,pdg,primary.E(), gLabel,gpdg,gprimary.E(), ggLabel,ggpdg,ggprimary.E());
484 // Compare ancestors of all local maxima
485 Int_t nmaxima = nMax;
486 if(nMax==1) nmaxima = nc ;
487 for(Int_t i = 0; i < nmaxima-1; i++)
489 Int_t mcLabel1 = GetEMCALCells()->GetCellMCLabel(list[i]);
490 GetReader()->RemapMCLabelForAODs(mcLabel1);
492 for(Int_t j = i+1; j < nmaxima; j++)
494 Int_t mcLabel2 = GetEMCALCells()->GetCellMCLabel(list[j]);
495 GetReader()->RemapMCLabelForAODs(mcLabel2);
497 if(mcLabel1 < 0 || mcLabel2 < 0 )
499 //printf("\t i %d label %d - j %d label %d; skip!\n",i,mcLabel1,j,mcLabel2);
502 ancLabel = GetMCAnalysisUtils()->CheckCommonAncestor(mcLabel1,mcLabel2,
503 GetReader(),ancPDG,ancStatus,momentum,prodVertex);
506 if((i==imax && j==imax2) || (j==imax && i==imax2))
511 else if(ancPDG==22 || TMath::Abs(ancPDG)==11)
513 // If both bits are set, it could be that one of the maxima had a conversion
514 // reset the bit in this case
517 //printf("\t Reset low bit\n");
523 Int_t pdg = -22222, status = -1;
524 TLorentzVector primary =GetMCAnalysisUtils()->GetMother(ancLabel,GetReader(), pdg, status, ok);
526 //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);
531 Float_t en = cluster->E();
533 //printf("nMax %d; Match MC? %d; high %d; low %d\n",nMax,matchHighLMAndHighMC,high,low);
535 if(matchHighLMAndHighMC)
537 if (high && !low) fhMCPi0HighNLMPair->Fill(en,nMax);
538 else if(low && !high) fhMCPi0LowNLMPair ->Fill(en,nMax);
539 else if(low && high) fhMCPi0AnyNLMPair ->Fill(en,nMax);
540 else fhMCPi0NoneNLMPair->Fill(en,nMax);
544 if (high && !low) fhMCPi0HighNLMPairNoMCMatch->Fill(en,nMax);
545 else if(low && !high) fhMCPi0LowNLMPairNoMCMatch ->Fill(en,nMax);
546 else if(low && high) fhMCPi0AnyNLMPairNoMCMatch ->Fill(en,nMax);
547 else fhMCPi0NoneNLMPairNoMCMatch->Fill(en,nMax);
551 //___________________________________________________________________________________________________________________
552 void AliAnaInsideClusterInvariantMass::FillAngleHistograms(const Int_t nMax, const Bool_t matched,
553 const Float_t en, const Float_t angle, const Float_t mass)
555 // Fill histograms related to opening angle
557 if(!fFillAngleHisto) return;
561 fhAnglePairNLocMax1[matched]->Fill(en,angle);
562 if( en > fHistoECut ) fhAnglePairMassNLocMax1[matched]->Fill(mass,angle);
566 fhAnglePairNLocMax2[matched]->Fill(en,angle);
567 if( en > fHistoECut ) fhAnglePairMassNLocMax2[matched]->Fill(mass,angle);
571 fhAnglePairNLocMaxN[matched]->Fill(en,angle);
572 if( en > fHistoECut ) fhAnglePairMassNLocMaxN[matched]->Fill(mass,angle);
577 //__________________________________________________________________________________________________________________________________________
578 void AliAnaInsideClusterInvariantMass::FillEBinHistograms(const Int_t ebin , const Int_t nMax, const Int_t mcindex,
579 const Float_t splitFrac, const Float_t mass, const Float_t asym, const Float_t l0)
581 // Fill some histograms integrating in few energy bins
583 if(ebin < 0 || !fFillEbinHisto) return ;
587 fhMassSplitEFractionNLocMax1Ebin[0][ebin]->Fill(splitFrac, mass);
588 if(IsDataMC())fhMassSplitEFractionNLocMax1Ebin[mcindex][ebin]->Fill(splitFrac, mass);
590 fhMassM02NLocMax1Ebin [ebin]->Fill(l0 , mass );
591 fhMassAsyNLocMax1Ebin [ebin]->Fill(asym, mass );
595 fhMassSplitEFractionNLocMax2Ebin[0][ebin]->Fill(splitFrac, mass);
596 if(IsDataMC())fhMassSplitEFractionNLocMax2Ebin[mcindex][ebin]->Fill(splitFrac, mass);
598 fhMassM02NLocMax2Ebin [ebin]->Fill(l0 , mass );
599 fhMassAsyNLocMax2Ebin [ebin]->Fill(asym, mass );
603 fhMassSplitEFractionNLocMaxNEbin[0][ebin]->Fill(splitFrac, mass);
604 if(IsDataMC())fhMassSplitEFractionNLocMaxNEbin[mcindex][ebin]->Fill(splitFrac, mass);
606 fhMassM02NLocMaxNEbin [ebin]->Fill(l0 , mass );
607 fhMassAsyNLocMaxNEbin [ebin]->Fill(asym, mass );
612 //_____________________________________________________________________________________________________________________
613 void AliAnaInsideClusterInvariantMass::FillMCHistograms(const Float_t en, const Float_t e1 , const Float_t e2,
614 const Int_t ebin, const Int_t mcindex,
615 const Float_t l0, const Float_t mass,
616 const Int_t nMax, const Bool_t matched,
617 const Float_t splitFrac, const Float_t asym,
618 const Float_t eprim, const Float_t asymGen)
620 // Fill histograms needing some MC input
622 if(!IsDataMC() || !fFillMCHisto) return;
624 Float_t efrac = eprim/en;
625 Float_t efracSplit = 0;
626 if(e1+e2 > 0) efracSplit = eprim/(e1+e2);
628 //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",
629 // e1,e2,eprim,en,splitFrac,efrac,efracSplit);
631 if(ebin >= 0 && fFillEbinHisto)
633 if( !matched ) fhMCGenFracNLocMaxEbin [mcindex][ebin]->Fill(efrac,nMax);
634 else fhMCGenFracNLocMaxEbinMatched[mcindex][ebin]->Fill(efrac,nMax);
639 fhMCGenFracNLocMax1 [mcindex][matched]->Fill(en , efrac );
640 fhMCGenSplitEFracNLocMax1[mcindex][matched]->Fill(en , efracSplit );
641 fhMCGenEvsSplitENLocMax1 [mcindex][matched]->Fill(eprim , e1+e2);
643 if( en > fHistoECut )
645 fhMCGenEFracvsSplitEFracNLocMax1[mcindex][matched]->Fill(efrac,splitFrac );
647 if(!matched && ebin >= 0 && fFillEbinHisto)
649 fhM02MCGenFracNLocMax1Ebin [mcindex][ebin]->Fill(efrac , l0 );
650 fhMassMCGenFracNLocMax1Ebin[mcindex][ebin]->Fill(efrac , mass );
652 fhMCAsymM02NLocMax1MCPi0Ebin [ebin]->Fill(l0 , asymGen );
653 fhAsyMCGenRecoNLocMax1EbinPi0[ebin]->Fill(asym, asymGen );
659 fhMCGenFracNLocMax2 [mcindex][matched]->Fill(en , efrac );
660 fhMCGenSplitEFracNLocMax2[mcindex][matched]->Fill(en , efracSplit );
661 fhMCGenEvsSplitENLocMax2 [mcindex][matched]->Fill(eprim , e1+e2);
663 if( en > fHistoECut )
665 fhMCGenEFracvsSplitEFracNLocMax2[mcindex][matched]->Fill(efrac,splitFrac );
667 if(!matched && ebin >= 0 && fFillEbinHisto)
669 fhM02MCGenFracNLocMax2Ebin [mcindex][ebin]->Fill(efrac , l0 );
670 fhMassMCGenFracNLocMax2Ebin[mcindex][ebin]->Fill(efrac , mass );
672 fhMCAsymM02NLocMax2MCPi0Ebin [ebin]->Fill(l0 , asymGen );
673 fhAsyMCGenRecoNLocMax2EbinPi0[ebin]->Fill(asym, asymGen );
680 fhMCGenFracNLocMaxN [mcindex][matched]->Fill(en , efrac );
681 fhMCGenSplitEFracNLocMaxN[mcindex][matched]->Fill(en , efracSplit );
682 fhMCGenEvsSplitENLocMaxN [mcindex][matched]->Fill(eprim , e1+e2);
684 if( en > fHistoECut )
686 fhMCGenEFracvsSplitEFracNLocMaxN[mcindex][matched]->Fill(efrac,splitFrac );
688 if(!matched && ebin >= 0 && fFillEbinHisto)
690 fhM02MCGenFracNLocMaxNEbin [mcindex][ebin]->Fill(efrac , l0 );
691 fhMassMCGenFracNLocMaxNEbin[mcindex][ebin]->Fill(efrac , mass );
693 fhMCAsymM02NLocMaxNMCPi0Ebin [ebin]->Fill(l0 , asymGen );
694 fhAsyMCGenRecoNLocMaxNEbinPi0[ebin]->Fill(asym, asymGen );
700 //_________________________________________________________________________________________________________________________
701 void AliAnaInsideClusterInvariantMass::FillMCOverlapHistograms(const Float_t en, const Float_t mass, const Float_t l0,
702 const Int_t inlm, const Int_t ebin, const Bool_t matched,
703 const Int_t mcindex, const Int_t noverlaps)
706 // Fill histograms for MC Overlaps
708 //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);
710 if(!fFillMCOverlapHisto || !IsDataMC()) return;
712 //printf("AliAnaInsideClusterInvariantMass::FillMCOverlapHistograms - NLM bin=%d, mcIndex %d, n Overlaps %d\n",inlm,mcindex,noverlaps);
716 fhMCENOverlaps[inlm][mcindex]->Fill(en,noverlaps);
720 fhMCEM02Overlap0[inlm][mcindex]->Fill(en, l0);
721 fhMCEMassOverlap0[inlm][mcindex]->Fill(en, mass);
722 if((mcindex==kmcPi0 || mcindex == kmcPi0Conv) && ebin >=0) fhMCPi0MassM02Overlap0[inlm][ebin]->Fill(l0,mass);
724 else if(noverlaps == 1)
726 fhMCEM02Overlap1[inlm][mcindex]->Fill(en, l0);
727 fhMCEMassOverlap1[inlm][mcindex]->Fill(en, mass);
728 if((mcindex==kmcPi0 || mcindex == kmcPi0Conv) && ebin >=0) fhMCPi0MassM02Overlap1[inlm][ebin]->Fill(l0,mass);
730 else if(noverlaps > 1)
732 fhMCEM02OverlapN[inlm][mcindex]->Fill(en, l0);
733 fhMCEMassOverlapN[inlm][mcindex]->Fill(en, mass);
734 if((mcindex==kmcPi0 || mcindex == kmcPi0Conv) && ebin >=0) fhMCPi0MassM02OverlapN[inlm][ebin]->Fill(l0,mass);
737 printf("AliAnaInsideClusterInvariantMass::FillMCOverlapHistograms() - n overlaps = %d!!", noverlaps);
739 else if(fFillTMHisto)
741 fhMCENOverlapsMatch[inlm][mcindex]->Fill(en,noverlaps);
745 fhMCEM02Overlap0Match[inlm][mcindex]->Fill(en, l0);
746 fhMCEMassOverlap0Match[inlm][mcindex]->Fill(en, mass);
747 if((mcindex==kmcPi0 || mcindex == kmcPi0Conv) && ebin >=0) fhMCPi0MassM02Overlap0Match[inlm][ebin]->Fill(l0,mass);
749 else if(noverlaps == 1)
751 fhMCEM02Overlap1Match[inlm][mcindex]->Fill(en, l0);
752 fhMCEMassOverlap1Match[inlm][mcindex]->Fill(en, mass);
753 if((mcindex==kmcPi0 || mcindex == kmcPi0Conv) && ebin >=0) fhMCPi0MassM02Overlap1Match[inlm][ebin]->Fill(l0,mass);
755 else if(noverlaps > 1)
757 fhMCEM02OverlapNMatch[inlm][mcindex]->Fill(en, l0);
758 fhMCEMassOverlapNMatch[inlm][mcindex]->Fill(en, mass);
759 if((mcindex==kmcPi0 || mcindex == kmcPi0Conv) && ebin >=0) fhMCPi0MassM02OverlapNMatch[inlm][ebin]->Fill(l0,mass);
762 printf("AliAnaInsideClusterInvariantMass::FillMCOverlapHistograms() - n overlaps in matched = %d!!", noverlaps);
766 //______________________________________________________________________________________________________
767 void AliAnaInsideClusterInvariantMass::FillSSExtraHistograms(AliVCluster *cluster, const Int_t nMax,
768 const Bool_t matched, const Int_t mcindex,
769 const Float_t mass , const Int_t ebin)
771 // Fill optional histograms with more SS parameters
773 if(!fFillSSExtraHisto) return ;
775 Float_t en = cluster->E();
776 Float_t nc = cluster->GetNCells();
778 // Get more Shower Shape parameters
779 Float_t ll0 = 0., ll1 = 0.;
780 Float_t disp= 0., dispEta = 0., dispPhi = 0.;
781 Float_t sEta = 0., sPhi = 0., sEtaPhi = 0.;
783 GetCaloUtils()->GetEMCALRecoUtils()->RecalculateClusterShowerShapeParameters(GetEMCALGeometry(), GetReader()->GetInputEvent()->GetEMCALCells(), cluster,
784 ll0, ll1, disp, dispEta, dispPhi, sEta, sPhi, sEtaPhi);
786 Float_t dispAsy = -1;
787 if(dispEta+dispPhi >0 ) dispAsy = (dispPhi-dispEta) / (dispPhi+dispEta);
792 fhNCellNLocMax1[0][matched]->Fill(en,nc) ;
793 if(mcindex > 0 ) fhNCellNLocMax1[mcindex][matched]->Fill(en,nc) ;
795 if( en > fHistoECut )
797 fhMassDispEtaNLocMax1[0][matched]->Fill(dispEta, mass );
798 fhMassDispPhiNLocMax1[0][matched]->Fill(dispPhi, mass );
799 fhMassDispAsyNLocMax1[0][matched]->Fill(dispAsy, mass );
803 fhMassDispEtaNLocMax1[mcindex][matched]->Fill(dispEta, mass );
804 fhMassDispPhiNLocMax1[mcindex][matched]->Fill(dispPhi, mass );
805 fhMassDispAsyNLocMax1[mcindex][matched]->Fill(dispAsy, mass );
809 if(!matched && ebin >= 0 && fFillEbinHisto)
811 fhMassDispEtaNLocMax1Ebin[ebin]->Fill(dispEta, mass );
812 fhMassDispPhiNLocMax1Ebin[ebin]->Fill(dispPhi, mass );
813 fhMassDispAsyNLocMax1Ebin[ebin]->Fill(dispAsy, mass );
818 fhNCellNLocMax2[0][matched]->Fill(en,nc) ;
819 if(mcindex > 0 ) fhNCellNLocMax2[mcindex][matched]->Fill(en,nc) ;
821 if( en > fHistoECut )
823 fhMassDispEtaNLocMax2[0][matched]->Fill(dispEta, mass );
824 fhMassDispPhiNLocMax2[0][matched]->Fill(dispPhi, mass );
825 fhMassDispAsyNLocMax2[0][matched]->Fill(dispAsy, mass );
829 fhMassDispEtaNLocMax2[mcindex][matched]->Fill(dispEta, mass );
830 fhMassDispPhiNLocMax2[mcindex][matched]->Fill(dispPhi, mass );
831 fhMassDispAsyNLocMax2[mcindex][matched]->Fill(dispAsy, mass );
835 if(!matched && ebin >= 0 && fFillEbinHisto)
837 fhMassDispEtaNLocMax2Ebin[ebin]->Fill(dispEta, mass );
838 fhMassDispPhiNLocMax2Ebin[ebin]->Fill(dispPhi, mass );
839 fhMassDispAsyNLocMax2Ebin[ebin]->Fill(dispAsy, mass );
845 fhNCellNLocMaxN[0][matched]->Fill(en,nc) ;
846 if(mcindex > 0 ) fhNCellNLocMaxN[mcindex][matched]->Fill(en,nc) ;
848 if( en > fHistoECut )
850 fhMassDispEtaNLocMaxN[0][matched]->Fill(dispEta, mass );
851 fhMassDispPhiNLocMaxN[0][matched]->Fill(dispPhi, mass );
852 fhMassDispAsyNLocMaxN[0][matched]->Fill(dispAsy, mass );
856 fhMassDispEtaNLocMaxN[mcindex][matched]->Fill(dispEta, mass );
857 fhMassDispPhiNLocMaxN[mcindex][matched]->Fill(dispPhi, mass );
858 fhMassDispAsyNLocMaxN[mcindex][matched]->Fill(dispAsy, mass );
862 if(!matched && ebin >= 0 && fFillEbinHisto)
864 fhMassDispEtaNLocMaxNEbin[ebin]->Fill(dispEta, mass );
865 fhMassDispPhiNLocMaxNEbin[ebin]->Fill(dispPhi, mass );
866 fhMassDispAsyNLocMaxNEbin[ebin]->Fill(dispAsy, mass );
873 //__________________________________________________________________________________________________
874 void AliAnaInsideClusterInvariantMass::FillSSWeightHistograms(AliVCluster *clus, const Int_t nlm,
875 const Int_t absId1, const Int_t absId2)
877 // Calculate weights and fill histograms
879 if(!fFillSSWeightHisto) return;
881 AliVCaloCells* cells = 0;
882 if(fCalorimeter == "EMCAL") cells = GetEMCALCells();
883 else cells = GetPHOSCells();
885 // First recalculate energy in case non linearity was applied
887 for (Int_t ipos = 0; ipos < clus->GetNCells(); ipos++)
890 Int_t id = clus->GetCellsAbsId()[ipos];
892 //Recalibrate cell energy if needed
893 Float_t amp = cells->GetCellAmplitude(id);
894 GetCaloUtils()->RecalibrateCellAmplitude(amp,fCalorimeter, id);
902 printf("AliAnaInsideClusterInvatiantMass::WeightHistograms()- Wrong calculated energy %f\n",energy);
906 //Get amplitude of main local maxima, recalibrate if needed
907 Float_t amp1 = cells->GetCellAmplitude(absId1);
908 GetCaloUtils()->RecalibrateCellAmplitude(amp1,fCalorimeter, absId1);
909 Float_t amp2 = cells->GetCellAmplitude(absId2);
910 GetCaloUtils()->RecalibrateCellAmplitude(amp2,fCalorimeter, absId2);
912 if(amp1 < amp2) printf("Bad local maxima E ordering : id1 E %f, id2 E %f\n ",amp1,amp2);
913 if(amp1==0 || amp2==0) printf("Null E local maxima : id1 E %f, id2 E %f\n " ,amp1,amp2);
915 if(amp1>0)fhPi0CellEMaxEMax2Frac [nlm]->Fill(energy,amp2/amp1);
916 fhPi0CellEMaxClusterFrac [nlm]->Fill(energy,amp1/energy);
917 fhPi0CellEMax2ClusterFrac[nlm]->Fill(energy,amp2/energy);
919 //Get the ratio and log ratio to all cells in cluster
920 for (Int_t ipos = 0; ipos < clus->GetNCells(); ipos++)
922 Int_t id = clus->GetCellsAbsId()[ipos];
924 //Recalibrate cell energy if needed
925 Float_t amp = cells->GetCellAmplitude(id);
926 GetCaloUtils()->RecalibrateCellAmplitude(amp,fCalorimeter, id);
928 if(amp > 0)fhPi0CellE [nlm]->Fill(energy,amp);
929 fhPi0CellEFrac [nlm]->Fill(energy,amp/energy);
930 fhPi0CellLogEFrac[nlm]->Fill(energy,TMath::Log(amp/energy));
932 if (id!=absId1 && id!=absId2)
934 if(amp1>0)fhPi0CellEMaxFrac [nlm]->Fill(energy,amp/amp1);
935 if(amp2>0)fhPi0CellEMax2Frac[nlm]->Fill(energy,amp/amp2);
940 //Recalculate shower shape for different W0
941 if(fCalorimeter=="EMCAL")
943 Float_t l0org = clus->GetM02();
944 Float_t l1org = clus->GetM20();
945 Float_t dorg = clus->GetDispersion();
946 Float_t w0org = GetCaloUtils()->GetEMCALRecoUtils()->GetW0();
948 for(Int_t iw = 0; iw < fSSWeightN; iw++)
950 GetCaloUtils()->GetEMCALRecoUtils()->SetW0(fSSWeight[iw]);
951 //GetCaloUtils()->GetEMCALRecoUtils()->RecalculateClusterShowerShapeParameters(GetEMCALGeometry(), cells, clus);
953 Float_t l0 = 0., l1 = 0.;
954 Float_t disp = 0., dEta = 0., dPhi = 0.;
955 Float_t sEta = 0., sPhi = 0., sEtaPhi = 0.;
957 RecalculateClusterShowerShapeParametersWithCellCut(GetEMCALGeometry(), cells, clus,l0,l1,disp,
958 dEta, dPhi, sEta, sPhi, sEtaPhi,0);
961 fhM02WeightPi0[nlm][iw]->Fill(energy,clus->GetM02());
965 // Set the original values back
968 clus->SetDispersion(dorg);
969 GetCaloUtils()->GetEMCALRecoUtils()->SetW0(w0org);
971 for(Int_t iec = 0; iec < fSSECellCutN; iec++)
973 Float_t l0 = 0., l1 = 0.;
974 Float_t disp = 0., dEta = 0., dPhi = 0.;
975 Float_t sEta = 0., sPhi = 0., sEtaPhi = 0.;
977 RecalculateClusterShowerShapeParametersWithCellCut(GetEMCALGeometry(), cells, clus,l0,l1,disp,
978 dEta, dPhi, sEta, sPhi, sEtaPhi,fSSECellCut[iec]);
980 //printf("E %f, l0 org %f, l0 new %f, slope %f\n",clus->E(),l0org,l0,fSSECellCut[iec]);
981 fhM02ECellCutPi0[nlm][iec]->Fill(energy,l0);
988 //________________________________________________________________________________________
989 void AliAnaInsideClusterInvariantMass::FillTrackMatchingHistograms(AliVCluster * cluster,
993 // Fill histograms related to track matching
995 if(!fFillTMResidualHisto || !fFillTMHisto) return;
997 Float_t dZ = cluster->GetTrackDz();
998 Float_t dR = cluster->GetTrackDx();
999 Float_t en = cluster->E();
1001 if(cluster->IsEMCAL() && GetCaloUtils()->IsRecalculationOfClusterTrackMatchingOn())
1003 dR = 2000., dZ = 2000.;
1004 GetCaloUtils()->GetEMCALRecoUtils()->GetMatchedResiduals(cluster->GetID(),dZ,dR);
1007 //printf("Pi0EbE: dPhi %f, dEta %f\n",dR,dZ);
1009 if(TMath::Abs(dR) < 999)
1011 if ( nMax == 1 ) { fhTrackMatchedDEtaNLocMax1[0]->Fill(en,dZ); fhTrackMatchedDPhiNLocMax1[0]->Fill(en,dR); }
1012 else if( nMax == 2 ) { fhTrackMatchedDEtaNLocMax2[0]->Fill(en,dZ); fhTrackMatchedDPhiNLocMax2[0]->Fill(en,dR); }
1013 else if( nMax >= 3 ) { fhTrackMatchedDEtaNLocMaxN[0]->Fill(en,dZ); fhTrackMatchedDPhiNLocMaxN[0]->Fill(en,dR); }
1017 if ( nMax == 1 ) { fhTrackMatchedDEtaNLocMax1[mcindex]->Fill(en,dZ); fhTrackMatchedDPhiNLocMax1[mcindex]->Fill(en,dR); }
1018 else if( nMax == 2 ) { fhTrackMatchedDEtaNLocMax2[mcindex]->Fill(en,dZ); fhTrackMatchedDPhiNLocMax2[mcindex]->Fill(en,dR); }
1019 else if( nMax >= 3 ) { fhTrackMatchedDEtaNLocMaxN[mcindex]->Fill(en,dZ); fhTrackMatchedDPhiNLocMaxN[mcindex]->Fill(en,dR); }
1022 AliVTrack *track = GetCaloUtils()->GetMatchedTrack(cluster, GetReader()->GetInputEvent());
1024 Bool_t positive = kFALSE;
1025 if(track) positive = (track->Charge()>0);
1031 if ( nMax == 1 ) { fhTrackMatchedDEtaNLocMax1Pos[0]->Fill(en,dZ); fhTrackMatchedDPhiNLocMax1Pos[0]->Fill(en,dR); }
1032 else if( nMax == 2 ) { fhTrackMatchedDEtaNLocMax2Pos[0]->Fill(en,dZ); fhTrackMatchedDPhiNLocMax2Pos[0]->Fill(en,dR); }
1033 else if( nMax >= 3 ) { fhTrackMatchedDEtaNLocMaxNPos[0]->Fill(en,dZ); fhTrackMatchedDPhiNLocMaxNPos[0]->Fill(en,dR); }
1037 if ( nMax == 1 ) { fhTrackMatchedDEtaNLocMax1Pos[mcindex]->Fill(en,dZ); fhTrackMatchedDPhiNLocMax1Pos[mcindex]->Fill(en,dR); }
1038 else if( nMax == 2 ) { fhTrackMatchedDEtaNLocMax2Pos[mcindex]->Fill(en,dZ); fhTrackMatchedDPhiNLocMax2Pos[mcindex]->Fill(en,dR); }
1039 else if( nMax >= 3 ) { fhTrackMatchedDEtaNLocMaxNPos[mcindex]->Fill(en,dZ); fhTrackMatchedDPhiNLocMaxNPos[mcindex]->Fill(en,dR); }
1044 if ( nMax == 1 ) { fhTrackMatchedDEtaNLocMax1Neg[0]->Fill(en,dZ); fhTrackMatchedDPhiNLocMax1Neg[0]->Fill(en,dR); }
1045 else if( nMax == 2 ) { fhTrackMatchedDEtaNLocMax2Neg[0]->Fill(en,dZ); fhTrackMatchedDPhiNLocMax2Neg[0]->Fill(en,dR); }
1046 else if( nMax >= 3 ) { fhTrackMatchedDEtaNLocMaxNNeg[0]->Fill(en,dZ); fhTrackMatchedDPhiNLocMaxNNeg[0]->Fill(en,dR); }
1050 if ( nMax == 1 ) { fhTrackMatchedDEtaNLocMax1Neg[mcindex]->Fill(en,dZ); fhTrackMatchedDPhiNLocMax1Neg[mcindex]->Fill(en,dR); }
1051 else if( nMax == 2 ) { fhTrackMatchedDEtaNLocMax2Neg[mcindex]->Fill(en,dZ); fhTrackMatchedDPhiNLocMax2Neg[mcindex]->Fill(en,dR); }
1052 else if( nMax >= 3 ) { fhTrackMatchedDEtaNLocMaxNNeg[mcindex]->Fill(en,dZ); fhTrackMatchedDPhiNLocMaxNNeg[mcindex]->Fill(en,dR); }
1061 //_______________________________________________________________
1062 TObjString * AliAnaInsideClusterInvariantMass::GetAnalysisCuts()
1064 //Save parameters used for analysis
1065 TString parList ; //this will be list of parameters used for this analysis.
1066 const Int_t buffersize = 255;
1067 char onePar[buffersize] ;
1069 snprintf(onePar,buffersize,"--- AliAnaInsideClusterInvariantMass ---\n") ;
1072 snprintf(onePar,buffersize,"Calorimeter: %s\n", fCalorimeter.Data()) ;
1074 snprintf(onePar,buffersize,"fNLocMaxCutE =%2.2f \n", GetCaloUtils()->GetLocalMaximaCutE()) ;
1076 snprintf(onePar,buffersize,"fNLocMaxCutEDiff =%2.2f \n",GetCaloUtils()->GetLocalMaximaCutEDiff()) ;
1078 snprintf(onePar,buffersize,"%2.2f< M02 < %2.2f \n", fM02MinCut, fM02MaxCut) ;
1080 snprintf(onePar,buffersize,"fMinNCells =%d \n", fMinNCells) ;
1082 snprintf(onePar,buffersize,"fMinBadDist =%1.1f \n", fMinBadDist) ;
1084 if(fFillSSWeightHisto)
1086 snprintf(onePar,buffersize," N w %d - N e cut %d \n",fSSWeightN,fSSECellCutN);
1090 return new TObjString(parList) ;
1094 //________________________________________________________________
1095 TList * AliAnaInsideClusterInvariantMass::GetCreateOutputObjects()
1097 // Create histograms to be saved in output file and
1098 // store them in outputContainer
1099 TList * outputContainer = new TList() ;
1100 outputContainer->SetName("InsideClusterHistos") ;
1102 Int_t nptbins = GetHistogramRanges()->GetHistoPtBins(); Float_t ptmax = GetHistogramRanges()->GetHistoPtMax(); Float_t ptmin = GetHistogramRanges()->GetHistoPtMin();
1103 Int_t ssbins = GetHistogramRanges()->GetHistoShowerShapeBins(); Float_t ssmax = GetHistogramRanges()->GetHistoShowerShapeMax(); Float_t ssmin = GetHistogramRanges()->GetHistoShowerShapeMin();
1104 Int_t mbins = GetHistogramRanges()->GetHistoMassBins(); Float_t mmax = GetHistogramRanges()->GetHistoMassMax(); Float_t mmin = GetHistogramRanges()->GetHistoMassMin();
1105 Int_t ncbins = GetHistogramRanges()->GetHistoNClusterCellBins(); Int_t ncmax = GetHistogramRanges()->GetHistoNClusterCellMax(); Int_t ncmin = GetHistogramRanges()->GetHistoNClusterCellMin();
1106 Int_t nphibins = GetHistogramRanges()->GetHistoPhiBins(); Float_t phimax = GetHistogramRanges()->GetHistoPhiMax(); Float_t phimin = GetHistogramRanges()->GetHistoPhiMin();
1107 Int_t netabins = GetHistogramRanges()->GetHistoEtaBins(); Float_t etamax = GetHistogramRanges()->GetHistoEtaMax(); Float_t etamin = GetHistogramRanges()->GetHistoEtaMin();
1109 Int_t nresetabins = GetHistogramRanges()->GetHistoTrackResidualEtaBins();
1110 Float_t resetamax = GetHistogramRanges()->GetHistoTrackResidualEtaMax();
1111 Float_t resetamin = GetHistogramRanges()->GetHistoTrackResidualEtaMin();
1112 Int_t nresphibins = GetHistogramRanges()->GetHistoTrackResidualPhiBins();
1113 Float_t resphimax = GetHistogramRanges()->GetHistoTrackResidualPhiMax();
1114 Float_t resphimin = GetHistogramRanges()->GetHistoTrackResidualPhiMin();
1116 TString ptype[] ={"","#gamma","#gamma->e^{#pm}","#pi^{0}","#eta","e^{#pm}", "hadron","#pi^{0} (#gamma->e^{#pm})"};
1117 TString pname[] ={"","Photon","Conversion", "Pi0", "Eta", "Electron","Hadron","Pi0Conv"};
1121 if(IsDataMC()) n = 8;
1123 Int_t nMaxBins = 10;
1125 TString sMatched[] = {"","Matched"};
1128 if(!fFillTMHisto) nMatched = 1;
1130 for(Int_t i = 0; i < n; i++)
1132 for(Int_t j = 0; j < nMatched; j++)
1135 fhMassNLocMax1[i][j] = new TH2F(Form("hMassNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
1136 Form("Invariant mass of splitted cluster with NLM=1 vs E, %s %s",ptype[i].Data(),sMatched[j].Data()),
1137 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1138 fhMassNLocMax1[i][j]->SetYTitle("M (GeV/c^{2})");
1139 fhMassNLocMax1[i][j]->SetXTitle("E (GeV)");
1140 outputContainer->Add(fhMassNLocMax1[i][j]) ;
1142 fhMassNLocMax2[i][j] = new TH2F(Form("hMassNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
1143 Form("Invariant mass of splitted cluster with NLM=2 vs E, %s %s",ptype[i].Data(),sMatched[j].Data()),
1144 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1145 fhMassNLocMax2[i][j]->SetYTitle("M (GeV/c^{2})");
1146 fhMassNLocMax2[i][j]->SetXTitle("E (GeV)");
1147 outputContainer->Add(fhMassNLocMax2[i][j]) ;
1149 fhMassNLocMaxN[i][j] = new TH2F(Form("hMassNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
1150 Form("Invariant mass of splitted cluster with NLM>2 vs E, %s %s",ptype[i].Data(),sMatched[j].Data()),
1151 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1152 fhMassNLocMaxN[i][j]->SetYTitle("M (GeV/c^{2})");
1153 fhMassNLocMaxN[i][j]->SetXTitle("E (GeV)");
1154 outputContainer->Add(fhMassNLocMaxN[i][j]) ;
1158 fhMassSplitECutNLocMax1 = new TH2F("hMassSplitECutNLocMax1","Invariant mass of splitted cluster with NLM=1 vs E, (E1+E2)/E cut, no TM",
1159 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1160 fhMassSplitECutNLocMax1->SetYTitle("M (GeV/c^{2})");
1161 fhMassSplitECutNLocMax1->SetXTitle("E (GeV)");
1162 outputContainer->Add(fhMassSplitECutNLocMax1) ;
1164 fhMassSplitECutNLocMax2 = new TH2F("hMassSplitECutNLocMax2","Invariant mass of splitted cluster with NLM=2 vs E, (E1+E2)/E cut, no TM",
1165 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1166 fhMassSplitECutNLocMax2->SetYTitle("M (GeV/c^{2})");
1167 fhMassSplitECutNLocMax2->SetXTitle("E (GeV)");
1168 outputContainer->Add(fhMassSplitECutNLocMax2) ;
1170 fhMassSplitECutNLocMaxN = new TH2F("hMassSplitECutNLocMaxN","Invariant mass of splitted cluster with NLM>2 vs E, (E1+E2)/E cut, no TM",
1171 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1172 fhMassSplitECutNLocMaxN->SetYTitle("M (GeV/c^{2})");
1173 fhMassSplitECutNLocMaxN->SetXTitle("E (GeV)");
1174 outputContainer->Add(fhMassSplitECutNLocMaxN) ;
1176 fhMassM02CutNLocMax1 = new TH2F("hMassM02CutNLocMax1","Invariant mass of splitted cluster with NLM=1 vs E, M02 cut, no TM",
1177 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1178 fhMassM02CutNLocMax1->SetYTitle("M (GeV/c^{2})");
1179 fhMassM02CutNLocMax1->SetXTitle("E (GeV)");
1180 outputContainer->Add(fhMassM02CutNLocMax1) ;
1182 fhMassM02CutNLocMax2 = new TH2F("hMassM02CutNLocMax2","Invariant mass of splitted cluster with NLM=2 vs E, M02 cut, no TM",
1183 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1184 fhMassM02CutNLocMax2->SetYTitle("M (GeV/c^{2})");
1185 fhMassM02CutNLocMax2->SetXTitle("E (GeV)");
1186 outputContainer->Add(fhMassM02CutNLocMax2) ;
1188 fhMassM02CutNLocMaxN = new TH2F("hMassM02CutNLocMaxN","Invariant mass of splitted cluster with NLM>2 vs E, M02 cut, no TM",
1189 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1190 fhMassM02CutNLocMaxN->SetYTitle("M (GeV/c^{2})");
1191 fhMassM02CutNLocMaxN->SetXTitle("E (GeV)");
1192 outputContainer->Add(fhMassM02CutNLocMaxN) ;
1196 fhMassAfterCutsNLocMax1[i][j] = new TH2F(Form("hMassAfterCutsNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
1197 Form("Mass vs E, %s %s, for N Local max = 1, M02 and asy cut",ptype[i].Data(),sMatched[j].Data()),
1198 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1199 fhMassAfterCutsNLocMax1[i][j] ->SetYTitle("Mass (GeV/c^{2})");
1200 fhMassAfterCutsNLocMax1[i][j] ->SetXTitle("E (GeV)");
1201 outputContainer->Add(fhMassAfterCutsNLocMax1[i][j]) ;
1203 fhMassAfterCutsNLocMax2[i][j] = new TH2F(Form("hMassAfterCutsNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
1204 Form("Mass vs E, %s %s, for N Local max = 2, M02 and asy cut",ptype[i].Data(),sMatched[j].Data()),
1205 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1206 fhMassAfterCutsNLocMax2[i][j] ->SetYTitle("Mass (GeV/c^{2})");
1207 fhMassAfterCutsNLocMax2[i][j] ->SetXTitle("E (GeV)");
1208 outputContainer->Add(fhMassAfterCutsNLocMax2[i][j]) ;
1211 fhMassAfterCutsNLocMaxN[i][j] = new TH2F(Form("hMassAfterCutsNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
1212 Form("Mass vs E, %s %s, for N Local max > 2, M02 and asy cut",ptype[i].Data(),sMatched[j].Data()),
1213 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1214 fhMassAfterCutsNLocMaxN[i][j] ->SetYTitle("Mass (GeV/c^{2})");
1215 fhMassAfterCutsNLocMaxN[i][j] ->SetXTitle("E (GeV)");
1216 outputContainer->Add(fhMassAfterCutsNLocMaxN[i][j]) ;
1218 fhSplitEFractionAfterCutsNLocMax1[i][j] = new TH2F(Form("hSplitEFractionAfterCutsNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
1219 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()),
1220 nptbins,ptmin,ptmax,120,0,1.2);
1221 fhSplitEFractionAfterCutsNLocMax1[i][j] ->SetXTitle("E_{cluster} (GeV)");
1222 fhSplitEFractionAfterCutsNLocMax1[i][j] ->SetYTitle("(E_{split1}+E_{split2})/E_{cluster}");
1223 outputContainer->Add(fhSplitEFractionAfterCutsNLocMax1[i][j]) ;
1225 fhSplitEFractionAfterCutsNLocMax2[i][j] = new TH2F(Form("hSplitEFractionAfterCutsNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
1226 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()),
1227 nptbins,ptmin,ptmax,120,0,1.2);
1228 fhSplitEFractionAfterCutsNLocMax2[i][j] ->SetXTitle("E_{cluster} (GeV)");
1229 fhSplitEFractionAfterCutsNLocMax2[i][j] ->SetYTitle("(E_{split1}+E_{split2})/E_{cluster}");
1230 outputContainer->Add(fhSplitEFractionAfterCutsNLocMax2[i][j]) ;
1232 fhSplitEFractionAfterCutsNLocMaxN[i][j] = new TH2F(Form("hSplitEFractionAfterCutsNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
1233 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()),
1234 nptbins,ptmin,ptmax,120,0,1.2);
1235 fhSplitEFractionAfterCutsNLocMaxN[i][j] ->SetXTitle("E_{cluster} (GeV)");
1236 fhSplitEFractionAfterCutsNLocMaxN[i][j] ->SetYTitle("(E_{split1}+E_{split2})/E_{cluster}");
1237 outputContainer->Add(fhSplitEFractionAfterCutsNLocMaxN[i][j]) ;
1240 fhMassM02NLocMax1[i][j] = new TH2F(Form("hMassM02NLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
1241 Form("Invariant mass of splitted cluster with NLM=1, #lambda_{0}^{2}, E > 12 GeV,%s %s",ptype[i].Data(),sMatched[j].Data()),
1242 ssbins,ssmin,ssmax,mbins,mmin,mmax);
1243 fhMassM02NLocMax1[i][j]->SetYTitle("M (GeV/c^{2})");
1244 fhMassM02NLocMax1[i][j]->SetXTitle("#lambda_{0}^{2}");
1245 outputContainer->Add(fhMassM02NLocMax1[i][j]) ;
1247 fhMassM02NLocMax2[i][j] = new TH2F(Form("hMassM02NLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
1248 Form("Invariant mass of splitted cluster with NLM=2, #lambda_{0}^{2}, E > 12 GeV, %s %s",ptype[i].Data(),sMatched[j].Data()),
1249 ssbins,ssmin,ssmax,mbins,mmin,mmax);
1250 fhMassM02NLocMax2[i][j]->SetYTitle("M (GeV/c^{2})");
1251 fhMassM02NLocMax2[i][j]->SetXTitle("#lambda_{0}^{2}");
1252 outputContainer->Add(fhMassM02NLocMax2[i][j]) ;
1254 fhMassM02NLocMaxN[i][j] = new TH2F(Form("hMassM02NLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
1255 Form("Invariant mass of splitted cluster with NLM>2, vs #lambda_{0}^{2}, %s %s",ptype[i].Data(),sMatched[j].Data()),
1256 ssbins,ssmin,ssmax,mbins,mmin,mmax);
1257 fhMassM02NLocMaxN[i][j]->SetYTitle("M (GeV/c^{2})");
1258 fhMassM02NLocMaxN[i][j]->SetXTitle("#lambda_{0}^{2}");
1259 outputContainer->Add(fhMassM02NLocMaxN[i][j]) ;
1262 fhAsymNLocMax1[i][j] = new TH2F(Form("hAsymNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
1263 Form("Asymmetry of NLM=1 vs cluster Energy, %s %s",ptype[i].Data(),sMatched[j].Data()),
1264 nptbins,ptmin,ptmax,200,-1,1);
1265 fhAsymNLocMax1[i][j]->SetYTitle("(E_{1}-E_{2})/(E_{1}+E_{2})");
1266 fhAsymNLocMax1[i][j]->SetXTitle("E (GeV)");
1267 outputContainer->Add(fhAsymNLocMax1[i][j]) ;
1269 fhAsymNLocMax2[i][j] = new TH2F(Form("hAsymNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
1270 Form("Asymmetry of NLM=2 vs cluster Energy, %s %s",ptype[i].Data(),sMatched[j].Data()),
1271 nptbins,ptmin,ptmax,200,-1,1);
1272 fhAsymNLocMax2[i][j]->SetYTitle("(E_{1}-E_{2})/(E_{1}+E_{2})");
1273 fhAsymNLocMax2[i][j]->SetXTitle("E (GeV)");
1274 outputContainer->Add(fhAsymNLocMax2[i][j]) ;
1276 fhAsymNLocMaxN[i][j] = new TH2F(Form("hAsymNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
1277 Form("Asymmetry of NLM>2 vs cluster Energy, %s %s",ptype[i].Data(),sMatched[j].Data()),
1278 nptbins,ptmin,ptmax,200,-1,1);
1279 fhAsymNLocMaxN[i][j]->SetYTitle("(E_{1}-E_{2})/(E_{1}+E_{2})");
1280 fhAsymNLocMaxN[i][j]->SetXTitle("E (GeV)");
1281 outputContainer->Add(fhAsymNLocMaxN[i][j]) ;
1285 fhAsymM02CutNLocMax1 = new TH2F("hAsymM02CutNLocMax1","Asymmetry of NLM=1 vs cluster Energy, M02Cut, no TM", nptbins,ptmin,ptmax,200,-1,1);
1286 fhAsymM02CutNLocMax1->SetYTitle("(E_{1}-E_{2})/(E_{1}+E_{2})");
1287 fhAsymM02CutNLocMax1->SetXTitle("E (GeV)");
1288 outputContainer->Add(fhAsymM02CutNLocMax1) ;
1290 fhAsymM02CutNLocMax2 = new TH2F("hAsymM02CutNLocMax2","Asymmetry of NLM=2 vs cluster Energy, M02Cut, no TM", nptbins,ptmin,ptmax,200,-1,1);
1291 fhAsymM02CutNLocMax2->SetYTitle("(E_{1}-E_{2})/(E_{1}+E_{2})");
1292 fhAsymM02CutNLocMax2->SetXTitle("E (GeV)");
1293 outputContainer->Add(fhAsymM02CutNLocMax2) ;
1295 fhAsymM02CutNLocMaxN = new TH2F("hAsymM02CutNLocMaxN","Asymmetry of NLM>2 vs cluster Energy, M02Cut, no TM", nptbins,ptmin,ptmax,200,-1,1);
1296 fhAsymM02CutNLocMaxN->SetYTitle("(E_{1}-E_{2})/(E_{1}+E_{2})");
1297 fhAsymM02CutNLocMaxN->SetXTitle("E (GeV)");
1298 outputContainer->Add(fhAsymM02CutNLocMaxN) ;
1301 if(fFillSSExtraHisto)
1303 fhMassDispEtaNLocMax1[i][j] = new TH2F(Form("hMassDispEtaNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
1304 Form("Invariant mass of splitted cluster with NLM=1, #sigma_{#eta #eta}^{2}, E > 12 GeV,%s %s",ptype[i].Data(),sMatched[j].Data()),
1305 ssbins,ssmin,ssmax,mbins,mmin,mmax);
1306 fhMassDispEtaNLocMax1[i][j]->SetYTitle("M (GeV/c^{2})");
1307 fhMassDispEtaNLocMax1[i][j]->SetXTitle("#sigma_{#eta #eta}^{2}");
1308 outputContainer->Add(fhMassDispEtaNLocMax1[i][j]) ;
1310 fhMassDispEtaNLocMax2[i][j] = new TH2F(Form("hMassDispEtaNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
1311 Form("Invariant mass of splitted cluster with NLM=2 #sigma_{#eta #eta}^{2}, E > 12 GeV, %s %s",ptype[i].Data(),sMatched[j].Data()),
1312 ssbins,ssmin,ssmax,mbins,mmin,mmax);
1313 fhMassDispEtaNLocMax2[i][j]->SetYTitle("M (GeV/c^{2})");
1314 fhMassDispEtaNLocMax2[i][j]->SetXTitle("#sigma_{#eta #eta}^{2}");
1315 outputContainer->Add(fhMassDispEtaNLocMax2[i][j]) ;
1317 fhMassDispEtaNLocMaxN[i][j] = new TH2F(Form("hMassDispEtaNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
1318 Form("Invariant mass of splitted cluster with NLM>2, #sigma_{#eta #eta}^{2}, %s %s",ptype[i].Data(),sMatched[j].Data()),
1319 ssbins,ssmin,ssmax,mbins,mmin,mmax);
1320 fhMassDispEtaNLocMaxN[i][j]->SetYTitle("M (GeV/c^{2})");
1321 fhMassDispEtaNLocMaxN[i][j]->SetXTitle("#sigma_{#eta #eta}^{2}");
1322 outputContainer->Add(fhMassDispEtaNLocMaxN[i][j]) ;
1324 fhMassDispPhiNLocMax1[i][j] = new TH2F(Form("hMassDispPhiNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
1325 Form("Invariant mass of 2 highest energy cells #sigma_{#phi #phi}^{2}, E > 12 GeV,%s %s",ptype[i].Data(),sMatched[j].Data()),
1326 ssbins,ssmin,ssmax,mbins,mmin,mmax);
1327 fhMassDispPhiNLocMax1[i][j]->SetYTitle("M (GeV/c^{2})");
1328 fhMassDispPhiNLocMax1[i][j]->SetXTitle("#sigma_{#phi #phi}^{2}");
1329 outputContainer->Add(fhMassDispPhiNLocMax1[i][j]) ;
1331 fhMassDispPhiNLocMax2[i][j] = new TH2F(Form("hMassDispPhiNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
1332 Form("Invariant mass of 2 local maxima cells #sigma_{#phi #phi}^{2}, E > 12 GeV, %s %s",ptype[i].Data(),sMatched[j].Data()),
1333 ssbins,ssmin,ssmax,mbins,mmin,mmax);
1334 fhMassDispPhiNLocMax2[i][j]->SetYTitle("M (GeV/c^{2})");
1335 fhMassDispPhiNLocMax2[i][j]->SetXTitle("#sigma_{#phi #phi}^{2}");
1336 outputContainer->Add(fhMassDispPhiNLocMax2[i][j]) ;
1338 fhMassDispPhiNLocMaxN[i][j] = new TH2F(Form("hMassDispPhiNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
1339 Form("Invariant mass of N>2 local maxima cells vs #sigma_{#phi #phi}^{2}, %s %s",ptype[i].Data(),sMatched[j].Data()),
1340 ssbins,ssmin,ssmax,mbins,mmin,mmax);
1341 fhMassDispPhiNLocMaxN[i][j]->SetYTitle("M (GeV/c^{2})");
1342 fhMassDispPhiNLocMaxN[i][j]->SetXTitle("#sigma_{#phi #phi}^{2}");
1343 outputContainer->Add(fhMassDispPhiNLocMaxN[i][j]) ;
1345 fhMassDispAsyNLocMax1[i][j] = new TH2F(Form("hMassDispAsyNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
1346 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()),
1347 200,-1,1,mbins,mmin,mmax);
1348 fhMassDispAsyNLocMax1[i][j]->SetYTitle("M (GeV/c^{2})");
1349 fhMassDispAsyNLocMax1[i][j]->SetXTitle("A = (#sigma_{#phi #phi}^{2} - #sigma_{#eta #eta}^{2}) / (#sigma_{#phi #phi}^{2} + #sigma_{#eta #eta}^{2})");
1350 outputContainer->Add(fhMassDispAsyNLocMax1[i][j]) ;
1352 fhMassDispAsyNLocMax2[i][j] = new TH2F(Form("hMassDispAsyNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
1353 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()),
1354 200,-1,1,mbins,mmin,mmax);
1355 fhMassDispAsyNLocMax2[i][j]->SetYTitle("M (GeV/c^{2})");
1356 fhMassDispAsyNLocMax2[i][j]->SetXTitle("A = (#sigma_{#phi #phi}^{2} - #sigma_{#eta #eta}^{2}) / (#sigma_{#phi #phi}^{2} + #sigma_{#eta #eta}^{2})");
1357 outputContainer->Add(fhMassDispAsyNLocMax2[i][j]) ;
1359 fhMassDispAsyNLocMaxN[i][j] = new TH2F(Form("hMassDispAsyNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
1360 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()),
1361 200,-1,1,mbins,mmin,mmax);
1362 fhMassDispAsyNLocMaxN[i][j]->SetYTitle("M (GeV/c^{2})");
1363 fhMassDispAsyNLocMaxN[i][j]->SetXTitle("A = (#sigma_{#phi #phi}^{2} - #sigma_{#eta #eta}^{2}) / (#sigma_{#phi #phi}^{2} + #sigma_{#eta #eta}^{2})");
1364 outputContainer->Add(fhMassDispAsyNLocMaxN[i][j]) ;
1367 fhNLocMax[i][j] = new TH2F(Form("hNLocMax%s%s",pname[i].Data(),sMatched[j].Data()),
1368 Form("Number of local maxima in cluster %s %s",ptype[i].Data(),sMatched[j].Data()),
1369 nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
1370 fhNLocMax[i][j] ->SetYTitle("N maxima");
1371 fhNLocMax[i][j] ->SetXTitle("E (GeV)");
1372 outputContainer->Add(fhNLocMax[i][j]) ;
1374 fhNLocMaxM02Cut[i][j] = new TH2F(Form("hNLocMaxM02Cut%s%s",pname[i].Data(),sMatched[j].Data()),
1375 Form("Number of local maxima in cluster %s for %2.2f < M02 < %2.2f",ptype[i].Data(),fM02MinCut,fM02MaxCut),
1376 nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
1377 fhNLocMaxM02Cut[i][j]->SetYTitle("N maxima");
1378 fhNLocMaxM02Cut[i][j]->SetXTitle("E (GeV)");
1379 outputContainer->Add(fhNLocMaxM02Cut[i][j]) ;
1382 fhM02NLocMax1[i][j] = new TH2F(Form("hM02NLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
1383 Form("#lambda_{0}^{2} vs E for N max = 1 %s %s",ptype[i].Data(),sMatched[j].Data()),
1384 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1385 fhM02NLocMax1[i][j] ->SetYTitle("#lambda_{0}^{2}");
1386 fhM02NLocMax1[i][j] ->SetXTitle("E (GeV)");
1387 outputContainer->Add(fhM02NLocMax1[i][j]) ;
1389 fhM02NLocMax2[i][j] = new TH2F(Form("hM02NLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
1390 Form("#lambda_{0}^{2} vs E for N max = 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
1391 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1392 fhM02NLocMax2[i][j] ->SetYTitle("#lambda_{0}^{2}");
1393 fhM02NLocMax2[i][j] ->SetXTitle("E (GeV)");
1394 outputContainer->Add(fhM02NLocMax2[i][j]) ;
1396 fhM02NLocMaxN[i][j] = new TH2F(Form("hM02NLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
1397 Form("#lambda_{0}^{2} vs E for N max > 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
1398 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1399 fhM02NLocMaxN[i][j] ->SetYTitle("#lambda_{0}^{2}");
1400 fhM02NLocMaxN[i][j] ->SetXTitle("E (GeV)");
1401 outputContainer->Add(fhM02NLocMaxN[i][j]) ;
1404 fhSplitEFractionNLocMax1[i][j] = new TH2F(Form("hSplitEFractionNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
1405 Form("(E1+E2)/E_{cluster} vs E_{cluster} for N max = 1 %s %s",ptype[i].Data(),sMatched[j].Data()),
1406 nptbins,ptmin,ptmax,120,0,1.2);
1407 fhSplitEFractionNLocMax1[i][j] ->SetXTitle("E_{cluster} (GeV)");
1408 fhSplitEFractionNLocMax1[i][j] ->SetYTitle("(E_{split1}+E_{split2})/E_{cluster}");
1409 outputContainer->Add(fhSplitEFractionNLocMax1[i][j]) ;
1411 fhSplitEFractionNLocMax2[i][j] = new TH2F(Form("hSplitEFractionNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
1412 Form("(E1+E2)/E_{cluster} vs E_{cluster} for N max = 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
1413 nptbins,ptmin,ptmax,120,0,1.2);
1414 fhSplitEFractionNLocMax2[i][j] ->SetXTitle("E_{cluster} (GeV)");
1415 fhSplitEFractionNLocMax2[i][j] ->SetYTitle("(E_{split1}+E_{split2})/E_{cluster}");
1416 outputContainer->Add(fhSplitEFractionNLocMax2[i][j]) ;
1418 fhSplitEFractionNLocMaxN[i][j] = new TH2F(Form("hSplitEFractionNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
1419 Form("(E1+E2)/E_{cluster} vs E_{cluster} for N max > 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
1420 nptbins,ptmin,ptmax,120,0,1.2);
1421 fhSplitEFractionNLocMaxN[i][j] ->SetXTitle("E_{cluster} (GeV)");
1422 fhSplitEFractionNLocMaxN[i][j] ->SetYTitle("(E_{split1}+E_{split2})/E_{cluster}");
1423 outputContainer->Add(fhSplitEFractionNLocMaxN[i][j]) ;
1426 if(i > 0 && fFillMCHisto) // skip first entry in array, general case not filled
1428 fhMCGenFracNLocMax1[i][j] = new TH2F(Form("hMCGenFracNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
1429 Form("#lambda_{0}^{2} vs E for N max = 1 %s %s",ptype[i].Data(),sMatched[j].Data()),
1430 nptbins,ptmin,ptmax,200,0,2);
1431 fhMCGenFracNLocMax1[i][j] ->SetYTitle("E_{gen} / E_{reco}");
1432 fhMCGenFracNLocMax1[i][j] ->SetXTitle("E (GeV)");
1433 outputContainer->Add(fhMCGenFracNLocMax1[i][j]) ;
1435 fhMCGenFracNLocMax2[i][j] = new TH2F(Form("hMCGenFracNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
1436 Form("#lambda_{0}^{2} vs E for N max = 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
1437 nptbins,ptmin,ptmax,200,0,2);
1438 fhMCGenFracNLocMax2[i][j] ->SetYTitle("E_{gen} / E_{reco}");
1439 fhMCGenFracNLocMax2[i][j] ->SetXTitle("E (GeV)");
1440 outputContainer->Add(fhMCGenFracNLocMax2[i][j]) ;
1443 fhMCGenFracNLocMaxN[i][j] = new TH2F(Form("hMCGenFracNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
1444 Form("#lambda_{0}^{2} vs E for N max > 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
1445 nptbins,ptmin,ptmax,200,0,2);
1446 fhMCGenFracNLocMaxN[i][j] ->SetYTitle("E_{gen} / E_{reco}");
1447 fhMCGenFracNLocMaxN[i][j] ->SetXTitle("E (GeV)");
1448 outputContainer->Add(fhMCGenFracNLocMaxN[i][j]) ;
1450 fhMCGenSplitEFracNLocMax1[i][j] = new TH2F(Form("hMCGenSplitEFracNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
1451 Form("E_{gen} / (E_{1 split}+E_{2 split}) vs E for N max = 1 %s %s",ptype[i].Data(),sMatched[j].Data()),
1452 nptbins,ptmin,ptmax,200,0,2);
1453 fhMCGenSplitEFracNLocMax1[i][j] ->SetYTitle("E_{gen} / (E_{1 split}+E_{2 split})");
1454 fhMCGenSplitEFracNLocMax1[i][j] ->SetXTitle("E (GeV)");
1455 outputContainer->Add(fhMCGenSplitEFracNLocMax1[i][j]) ;
1457 fhMCGenSplitEFracNLocMax2[i][j] = new TH2F(Form("hMCGenSplitEFracNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
1458 Form("E_{gen} / (E_{1 split}+E_{2 split}) vs E for N max = 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
1459 nptbins,ptmin,ptmax,200,0,2);
1460 fhMCGenSplitEFracNLocMax2[i][j] ->SetYTitle("E_{gen} / (E_{1 split}+E_{2 split})");
1461 fhMCGenSplitEFracNLocMax2[i][j] ->SetXTitle("E (GeV)");
1462 outputContainer->Add(fhMCGenSplitEFracNLocMax2[i][j]) ;
1465 fhMCGenSplitEFracNLocMaxN[i][j] = new TH2F(Form("hMCGenSplitEFracNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
1466 Form("E_{gen} / (E_{1 split}+E_{2 split}) vs E for N max > 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
1467 nptbins,ptmin,ptmax,200,0,2);
1468 fhMCGenSplitEFracNLocMaxN[i][j] ->SetYTitle("E_{gen} / (E_{1 split}+E_{2 split})");
1469 fhMCGenSplitEFracNLocMaxN[i][j] ->SetXTitle("E (GeV)");
1470 outputContainer->Add(fhMCGenSplitEFracNLocMaxN[i][j]) ;
1472 fhMCGenEFracvsSplitEFracNLocMax1[i][j] = new TH2F(Form("hMCGenEFracvsSplitEFracNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
1473 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()),
1475 fhMCGenEFracvsSplitEFracNLocMax1[i][j] ->SetYTitle("(E_{1 split}+E_{2 split})/E_{reco}");
1476 fhMCGenEFracvsSplitEFracNLocMax1[i][j] ->SetXTitle("E_{gen} / E_{reco}");
1477 outputContainer->Add(fhMCGenEFracvsSplitEFracNLocMax1[i][j]) ;
1479 fhMCGenEFracvsSplitEFracNLocMax2[i][j] = new TH2F(Form("hMCGenEFracvsSplitEFracNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
1480 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()),
1482 fhMCGenEFracvsSplitEFracNLocMax2[i][j] ->SetYTitle("(E_{1 split}+E_{2 split})/E_{reco}");
1483 fhMCGenEFracvsSplitEFracNLocMax2[i][j] ->SetXTitle("E_{gen} / E_{reco}");
1484 outputContainer->Add(fhMCGenEFracvsSplitEFracNLocMax2[i][j]) ;
1487 fhMCGenEFracvsSplitEFracNLocMaxN[i][j] = new TH2F(Form("hMCGenEFracvsSplitEFracNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
1488 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()),
1490 fhMCGenEFracvsSplitEFracNLocMaxN[i][j] ->SetYTitle("(E_{1 split}+E_{2 split})/E_{reco}");
1491 fhMCGenEFracvsSplitEFracNLocMaxN[i][j] ->SetXTitle("E_{gen} / E_{reco}");
1492 outputContainer->Add(fhMCGenEFracvsSplitEFracNLocMaxN[i][j]) ;
1495 fhMCGenEvsSplitENLocMax1[i][j] = new TH2F(Form("hMCGenEvsSplitENLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
1496 Form("E_{1 split}+E_{2 split} vs E_{gen} for N max = 1 %s %s",ptype[i].Data(),sMatched[j].Data()),
1497 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
1498 fhMCGenEvsSplitENLocMax1[i][j] ->SetYTitle("E_{1 split}+E_{2 split} (GeV)");
1499 fhMCGenEvsSplitENLocMax1[i][j] ->SetXTitle("E_{gen} (GeV)");
1500 outputContainer->Add(fhMCGenEvsSplitENLocMax1[i][j]) ;
1502 fhMCGenEvsSplitENLocMax2[i][j] = new TH2F(Form("hMCGenEvsSplitENLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
1503 Form("E_{1 split}+E_{2 split} vs E_{gen} for N max = 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
1504 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
1505 fhMCGenEvsSplitENLocMax2[i][j] ->SetYTitle("E_{1 split}+E_{2 split} (GeV)");
1506 fhMCGenEvsSplitENLocMax2[i][j] ->SetXTitle("E_{gen} (GeV)");
1507 outputContainer->Add(fhMCGenEvsSplitENLocMax2[i][j]) ;
1510 fhMCGenEvsSplitENLocMaxN[i][j] = new TH2F(Form("hMCGenEvsSplitENLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
1511 Form("E_{1 split}+E_{2 split} vs E_{gen} for N max > 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
1512 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
1513 fhMCGenEvsSplitENLocMaxN[i][j] ->SetYTitle("E_{1 split}+E_{2 split} (GeV)");
1514 fhMCGenEvsSplitENLocMaxN[i][j] ->SetXTitle("E_{gen} (GeV)");
1515 outputContainer->Add(fhMCGenEvsSplitENLocMaxN[i][j]) ;
1519 if(fFillSSExtraHisto)
1521 fhNCellNLocMax1[i][j] = new TH2F(Form("hNCellNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
1522 Form("#lambda_{0}^{2} vs E for N max = 1 %s %s",ptype[i].Data(),sMatched[j].Data()),
1523 nptbins,ptmin,ptmax,ncbins,ncmin,ncmax);
1524 fhNCellNLocMax1[i][j] ->SetYTitle("N cells");
1525 fhNCellNLocMax1[i][j] ->SetXTitle("E (GeV)");
1526 outputContainer->Add(fhNCellNLocMax1[i][j]) ;
1528 fhNCellNLocMax2[i][j] = new TH2F(Form("hNCellNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
1529 Form("#lambda_{0}^{2} vs E for N max = 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
1530 nptbins,ptmin,ptmax,ncbins,ncmin,ncmax);
1531 fhNCellNLocMax2[i][j] ->SetYTitle("N cells");
1532 fhNCellNLocMax2[i][j] ->SetXTitle("E (GeV)");
1533 outputContainer->Add(fhNCellNLocMax2[i][j]) ;
1536 fhNCellNLocMaxN[i][j] = new TH2F(Form("hNCellNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
1537 Form("#lambda_{0}^{2} vs E for N max > 2 %s %s",ptype[i].Data(),sMatched[j].Data()),
1538 nptbins,ptmin,ptmax,ncbins,ncmin,ncmax);
1539 fhNCellNLocMaxN[i][j] ->SetYTitle("N cells");
1540 fhNCellNLocMaxN[i][j] ->SetXTitle("E (GeV)");
1541 outputContainer->Add(fhNCellNLocMaxN[i][j]) ;
1547 fhCentralityPi0NLocMax1[i][j] = new TH2F(Form("hCentralityPi0NLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
1548 Form("E vs Centrality, selected pi0 cluster with NLM=1, %s",ptype[i].Data()),
1549 nptbins,ptmin,ptmax,100,0,100);
1550 fhCentralityPi0NLocMax1[i][j]->SetYTitle("Centrality");
1551 fhCentralityPi0NLocMax1[i][j]->SetXTitle("E (GeV)");
1552 outputContainer->Add(fhCentralityPi0NLocMax1[i][j]) ;
1554 fhCentralityPi0NLocMax2[i][j] = new TH2F(Form("hCentralityPi0NLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
1555 Form("E vs Centrality, selected pi0 cluster with NLM=2, %s",ptype[i].Data()),
1556 nptbins,ptmin,ptmax,100,0,100);
1557 fhCentralityPi0NLocMax2[i][j]->SetYTitle("Centrality");
1558 fhCentralityPi0NLocMax2[i][j]->SetXTitle("E (GeV)");
1559 outputContainer->Add(fhCentralityPi0NLocMax2[i][j]) ;
1561 fhCentralityPi0NLocMaxN[i][j] = new TH2F(Form("hCentralityPi0NLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
1562 Form("E vs Centrality, selected pi0 cluster with NLM>1, %s",ptype[i].Data()),
1563 nptbins,ptmin,ptmax,100,0,100);
1564 fhCentralityPi0NLocMaxN[i][j]->SetYTitle("Centrality");
1565 fhCentralityPi0NLocMaxN[i][j]->SetXTitle("E (GeV)");
1566 outputContainer->Add(fhCentralityPi0NLocMaxN[i][j]) ;
1568 fhCentralityEtaNLocMax1[i][j] = new TH2F(Form("hCentralityEtaNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
1569 Form("E vs Centrality, selected pi0 cluster with NLM=1, %s",ptype[i].Data()),
1570 nptbins,ptmin,ptmax,100,0,100);
1571 fhCentralityEtaNLocMax1[i][j]->SetYTitle("Centrality");
1572 fhCentralityEtaNLocMax1[i][j]->SetXTitle("E (GeV)");
1573 outputContainer->Add(fhCentralityEtaNLocMax1[i][j]) ;
1575 fhCentralityEtaNLocMax2[i][j] = new TH2F(Form("hCentralityEtaNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
1576 Form("E vs Centrality, selected pi0 cluster with NLM=2, %s",ptype[i].Data()),
1577 nptbins,ptmin,ptmax,100,0,100);
1578 fhCentralityEtaNLocMax2[i][j]->SetYTitle("Centrality");
1579 fhCentralityEtaNLocMax2[i][j]->SetXTitle("E (GeV)");
1580 outputContainer->Add(fhCentralityEtaNLocMax2[i][j]) ;
1582 fhCentralityEtaNLocMaxN[i][j] = new TH2F(Form("hCentralityEtaNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
1583 Form("E vs Centrality, selected pi0 cluster with NLM>1, %s",ptype[i].Data()),
1584 nptbins,ptmin,ptmax,100,0,100);
1585 fhCentralityEtaNLocMaxN[i][j]->SetYTitle("Centrality");
1586 fhCentralityEtaNLocMaxN[i][j]->SetXTitle("E (GeV)");
1587 outputContainer->Add(fhCentralityEtaNLocMaxN[i][j]) ;
1590 fhM02Pi0NLocMax1[i][j] = new TH2F(Form("hM02Pi0NLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
1591 Form("#lambda_{0}^{2} vs E for mass range [%2.2f-%2.2f] GeV/c^{2} %s, for N Local max = 1",
1592 GetCaloPID()->GetPi0MinMass(),GetCaloPID()->GetPi0MaxMass(),ptype[i].Data()),
1593 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1594 fhM02Pi0NLocMax1[i][j] ->SetYTitle("#lambda_{0}^{2}");
1595 fhM02Pi0NLocMax1[i][j] ->SetXTitle("E (GeV)");
1596 outputContainer->Add(fhM02Pi0NLocMax1[i][j]) ;
1598 fhM02EtaNLocMax1[i][j] = new TH2F(Form("hM02EtaNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
1599 Form("#lambda_{0}^{2} vs E for mass range [%2.2f-%2.2f] GeV/c^{2}, %s, for N Local max = 1",
1600 GetCaloPID()->GetEtaMinMass(),GetCaloPID()->GetEtaMaxMass(),ptype[i].Data()),
1601 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1602 fhM02EtaNLocMax1[i][j] ->SetYTitle("#lambda_{0}^{2}");
1603 fhM02EtaNLocMax1[i][j] ->SetXTitle("E (GeV)");
1604 outputContainer->Add(fhM02EtaNLocMax1[i][j]) ;
1606 fhM02ConNLocMax1[i][j] = new TH2F(Form("hM02ConNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
1607 Form("#lambda_{0}^{2} vs E for mass range [%2.2f-%2.2f] GeV/c^{2}, %s, for N Local max = 1",
1608 GetCaloPID()->GetPhotonMinMass(),GetCaloPID()->GetPhotonMaxMass(),ptype[i].Data()),
1609 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1610 fhM02ConNLocMax1[i][j] ->SetYTitle("#lambda_{0}^{2}");
1611 fhM02ConNLocMax1[i][j] ->SetXTitle("E (GeV)");
1612 outputContainer->Add(fhM02ConNLocMax1[i][j]) ;
1614 fhM02Pi0NLocMax2[i][j] = new TH2F(Form("hM02Pi0NLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
1615 Form("#lambda_{0}^{2} vs E for mass range [%2.2f-%2.2f] GeV/c^{2} %s, for N Local max = 2",
1616 GetCaloPID()->GetPi0MinMass(),GetCaloPID()->GetPi0MaxMass(),ptype[i].Data()),
1617 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1618 fhM02Pi0NLocMax2[i][j] ->SetYTitle("#lambda_{0}^{2}");
1619 fhM02Pi0NLocMax2[i][j] ->SetXTitle("E (GeV)");
1620 outputContainer->Add(fhM02Pi0NLocMax2[i][j]) ;
1622 fhM02EtaNLocMax2[i][j] = new TH2F(Form("hM02EtaNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
1623 Form("#lambda_{0}^{2} vs E for mass range [%2.2f-%2.2f] GeV/c^{2}, %s, for N Local max = 2",
1624 GetCaloPID()->GetEtaMinMass(),GetCaloPID()->GetEtaMaxMass(),ptype[i].Data()),
1625 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1626 fhM02EtaNLocMax2[i][j] ->SetYTitle("#lambda_{0}^{2}");
1627 fhM02EtaNLocMax2[i][j] ->SetXTitle("E (GeV)");
1628 outputContainer->Add(fhM02EtaNLocMax2[i][j]) ;
1630 fhM02ConNLocMax2[i][j] = new TH2F(Form("hM02ConNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
1631 Form("#lambda_{0}^{2} vs E for mass range [%2.2f-%2.2f] GeV/c^{2}, %s, for N Local max = 2",
1632 GetCaloPID()->GetPhotonMinMass(),GetCaloPID()->GetPhotonMaxMass(),ptype[i].Data()),
1633 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1634 fhM02ConNLocMax2[i][j] ->SetYTitle("#lambda_{0}^{2}");
1635 fhM02ConNLocMax2[i][j] ->SetXTitle("E (GeV)");
1636 outputContainer->Add(fhM02ConNLocMax2[i][j]) ;
1638 fhM02Pi0NLocMaxN[i][j] = new TH2F(Form("hM02Pi0NLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
1639 Form("#lambda_{0}^{2} vs E for mass range [%2.2f-%2.2f] GeV/c^{2} %s, for N Local max > 2",
1640 GetCaloPID()->GetPi0MinMass(),GetCaloPID()->GetPi0MaxMass(),ptype[i].Data()),
1641 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1642 fhM02Pi0NLocMaxN[i][j] ->SetYTitle("#lambda_{0}^{2}");
1643 fhM02Pi0NLocMaxN[i][j] ->SetXTitle("E (GeV)");
1644 outputContainer->Add(fhM02Pi0NLocMaxN[i][j]) ;
1646 fhM02EtaNLocMaxN[i][j] = new TH2F(Form("hM02EtaNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
1647 Form("#lambda_{0}^{2} vs E for mass range [%2.2f-%2.2f] GeV/c^{2}, %s, for N Local max > 2",
1648 GetCaloPID()->GetEtaMinMass(),GetCaloPID()->GetEtaMaxMass(),ptype[i].Data()),
1649 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1650 fhM02EtaNLocMaxN[i][j] ->SetYTitle("#lambda_{0}^{2}");
1651 fhM02EtaNLocMaxN[i][j] ->SetXTitle("E (GeV)");
1652 outputContainer->Add(fhM02EtaNLocMaxN[i][j]) ;
1654 fhM02ConNLocMaxN[i][j] = new TH2F(Form("hM02ConNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
1655 Form("#lambda_{0}^{2} vs E for mass range [%2.2f-%2.2f], %s, for N Local max > 2",
1656 GetCaloPID()->GetPhotonMinMass(),GetCaloPID()->GetPhotonMaxMass(),ptype[i].Data()),
1657 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1658 fhM02ConNLocMaxN[i][j] ->SetYTitle("#lambda_{0}^{2}");
1659 fhM02ConNLocMaxN[i][j] ->SetXTitle("E (GeV)");
1660 outputContainer->Add(fhM02ConNLocMaxN[i][j]) ;
1663 fhMassPi0NLocMax1[i][j] = new TH2F(Form("hMassPi0NLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
1664 Form("Mass vs E for mass range [%2.2f-%2.2f] GeV/c^{2} %s, for N Local max = 1",
1665 GetCaloPID()->GetPi0MinMass(),GetCaloPID()->GetPi0MaxMass(),ptype[i].Data()),
1666 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1667 fhMassPi0NLocMax1[i][j] ->SetYTitle("Mass (GeV/c^{2})");
1668 fhMassPi0NLocMax1[i][j] ->SetXTitle("E (GeV)");
1669 outputContainer->Add(fhMassPi0NLocMax1[i][j]) ;
1672 fhMassEtaNLocMax1[i][j] = new TH2F(Form("hMassEtaNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
1673 Form("Mass vs E for mass range [%2.2f-%2.2f] GeV/c^{2}, %s, for N Local max = 1",
1674 GetCaloPID()->GetEtaMinMass(),GetCaloPID()->GetEtaMaxMass(),ptype[i].Data()),
1675 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1676 fhMassEtaNLocMax1[i][j] ->SetYTitle("Mass (GeV/c^{2})");
1677 fhMassEtaNLocMax1[i][j] ->SetXTitle("E (GeV)");
1678 outputContainer->Add(fhMassEtaNLocMax1[i][j]) ;
1680 fhMassConNLocMax1[i][j] = new TH2F(Form("hMassConNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
1681 Form("Mass vs E for mass range [%2.2f-%2.2f] GeV/c^{2}, %s, for N Local max = 1",
1682 GetCaloPID()->GetPhotonMinMass(),GetCaloPID()->GetPhotonMaxMass(),ptype[i].Data()),
1683 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1684 fhMassConNLocMax1[i][j] ->SetYTitle("Mass (GeV/c^{2})");
1685 fhMassConNLocMax1[i][j] ->SetXTitle("E (GeV)");
1686 outputContainer->Add(fhMassConNLocMax1[i][j]) ;
1688 fhMassPi0NLocMax2[i][j] = new TH2F(Form("hMassPi0NLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
1689 Form("Mass vs E for mass range [%2.2f-%2.2f] GeV/c^{2} %s, for N Local max = 2",
1690 GetCaloPID()->GetPi0MinMass(),GetCaloPID()->GetPi0MaxMass(),ptype[i].Data()),
1691 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1692 fhMassPi0NLocMax2[i][j] ->SetYTitle("Mass (GeV/c^{2})");
1693 fhMassPi0NLocMax2[i][j] ->SetXTitle("E (GeV)");
1694 outputContainer->Add(fhMassPi0NLocMax2[i][j]) ;
1697 fhMassEtaNLocMax2[i][j] = new TH2F(Form("hMassEtaNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
1698 Form("Mass vs E for mass range [%2.2f-%2.2f] GeV/c^{2}, %s, for N Local max = 2",
1699 GetCaloPID()->GetEtaMinMass(),GetCaloPID()->GetEtaMaxMass(),ptype[i].Data()),
1700 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1701 fhMassEtaNLocMax2[i][j] ->SetYTitle("Mass (GeV/c^{2})");
1702 fhMassEtaNLocMax2[i][j] ->SetXTitle("E (GeV)");
1703 outputContainer->Add(fhMassEtaNLocMax2[i][j]) ;
1705 fhMassConNLocMax2[i][j] = new TH2F(Form("hMassConNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
1706 Form("Mass vs E for mass range [%2.2f-%2.2f] GeV/c^{2}, %s, for N Local max = 2",
1707 GetCaloPID()->GetPhotonMinMass(),GetCaloPID()->GetPhotonMaxMass(),ptype[i].Data()),
1708 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1709 fhMassConNLocMax2[i][j] ->SetYTitle("Mass (GeV/c^{2})");
1710 fhMassConNLocMax2[i][j] ->SetXTitle("E (GeV)");
1711 outputContainer->Add(fhMassConNLocMax2[i][j]) ;
1713 fhMassPi0NLocMaxN[i][j] = new TH2F(Form("hMassPi0NLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
1714 Form("Mass vs E for mass range [%2.2f-%2.2f] GeV/c^{2} %s, for N Local max > 2",
1715 GetCaloPID()->GetPi0MinMass(),GetCaloPID()->GetPi0MaxMass(),ptype[i].Data()),
1716 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1717 fhMassPi0NLocMaxN[i][j] ->SetYTitle("Mass (GeV/c^{2})");
1718 fhMassPi0NLocMaxN[i][j] ->SetXTitle("E (GeV)");
1719 outputContainer->Add(fhMassPi0NLocMaxN[i][j]) ;
1721 fhMassEtaNLocMaxN[i][j] = new TH2F(Form("hMassEtaNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
1722 Form("Mass vs E for mass range [%2.2f-%2.2f] GeV/c^{2}, %s, for N Local max > 2",
1723 GetCaloPID()->GetEtaMinMass(),GetCaloPID()->GetEtaMaxMass(),ptype[i].Data()),
1724 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1725 fhMassEtaNLocMaxN[i][j] ->SetYTitle("Mass (GeV/c^{2})");
1726 fhMassEtaNLocMaxN[i][j] ->SetXTitle("E (GeV)");
1727 outputContainer->Add(fhMassEtaNLocMaxN[i][j]) ;
1729 fhMassConNLocMaxN[i][j] = new TH2F(Form("hMassConNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
1730 Form("Mass vs E for mass range [%2.2f-%2.2f], %s, for N Local max > 2",
1731 GetCaloPID()->GetPhotonMinMass(),GetCaloPID()->GetPhotonMaxMass(),ptype[i].Data()),
1732 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1733 fhMassConNLocMaxN[i][j] ->SetYTitle("Mass (GeV/c^{2})");
1734 fhMassConNLocMaxN[i][j] ->SetXTitle("E (GeV)");
1735 outputContainer->Add(fhMassConNLocMaxN[i][j]) ;
1738 fhAsyPi0NLocMax1[i][j] = new TH2F(Form("hAsyPi0NLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
1739 Form("Asymmetry vs E for mass range [%2.2f-%2.2f] GeV/c^{2} %s, for N Local max = 1",
1740 GetCaloPID()->GetPi0MinMass(),GetCaloPID()->GetPi0MaxMass(),ptype[i].Data()),
1741 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1742 fhAsyPi0NLocMax1[i][j] ->SetYTitle("Asymmetry");
1743 fhAsyPi0NLocMax1[i][j] ->SetXTitle("E (GeV)");
1744 outputContainer->Add(fhAsyPi0NLocMax1[i][j]) ;
1746 fhAsyEtaNLocMax1[i][j] = new TH2F(Form("hAsyEtaNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
1747 Form("Asymmetry vs E for mass range [%2.2f-%2.2f] GeV/c^{2}, %s, for N Local max = 1",
1748 GetCaloPID()->GetEtaMinMass(),GetCaloPID()->GetEtaMaxMass(),ptype[i].Data()),
1749 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1750 fhAsyEtaNLocMax1[i][j] ->SetYTitle("Asymmetry");
1751 fhAsyEtaNLocMax1[i][j] ->SetXTitle("E (GeV)");
1752 outputContainer->Add(fhAsyEtaNLocMax1[i][j]) ;
1754 fhAsyConNLocMax1[i][j] = new TH2F(Form("hAsyConNLocMax1%s%s",pname[i].Data(),sMatched[j].Data()),
1755 Form("Asymmetry vs E for mass range [%2.2f-%2.2f] GeV/c^{2}, %s, for N Local max = 1",
1756 GetCaloPID()->GetPhotonMinMass(),GetCaloPID()->GetPhotonMaxMass(),ptype[i].Data()),
1757 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1758 fhAsyConNLocMax1[i][j] ->SetYTitle("Asymmetry");
1759 fhAsyConNLocMax1[i][j] ->SetXTitle("E (GeV)");
1760 outputContainer->Add(fhAsyConNLocMax1[i][j]) ;
1762 fhAsyPi0NLocMax2[i][j] = new TH2F(Form("hAsyPi0NLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
1763 Form("Asymmetry vs E for mass range [%2.2f-%2.2f] GeV/c^{2} %s, for N Local max = 2",
1764 GetCaloPID()->GetPi0MinMass(),GetCaloPID()->GetPi0MaxMass(),ptype[i].Data()),
1765 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1766 fhAsyPi0NLocMax2[i][j] ->SetYTitle("Asymmetry");
1767 fhAsyPi0NLocMax2[i][j] ->SetXTitle("E (GeV)");
1768 outputContainer->Add(fhAsyPi0NLocMax2[i][j]) ;
1770 fhAsyEtaNLocMax2[i][j] = new TH2F(Form("hAsyEtaNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
1771 Form("Asymmetry vs E for mass range [%2.2f-%2.2f] GeV/c^{2}, %s, for N Local max = 2",
1772 GetCaloPID()->GetEtaMinMass(),GetCaloPID()->GetEtaMaxMass(),ptype[i].Data()),
1773 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1774 fhAsyEtaNLocMax2[i][j] ->SetYTitle("Asymmetry");
1775 fhAsyEtaNLocMax2[i][j] ->SetXTitle("E (GeV)");
1776 outputContainer->Add(fhAsyEtaNLocMax2[i][j]) ;
1778 fhAsyConNLocMax2[i][j] = new TH2F(Form("hAsyConNLocMax2%s%s",pname[i].Data(),sMatched[j].Data()),
1779 Form("Asymmetry vs E for mass range [%2.2f-%2.2f] GeV/c^{2}, %s, for N Local max = 2",
1780 GetCaloPID()->GetPhotonMinMass(),GetCaloPID()->GetPhotonMaxMass(),ptype[i].Data()),
1781 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1782 fhAsyConNLocMax2[i][j] ->SetYTitle("Asymmetry");
1783 fhAsyConNLocMax2[i][j] ->SetXTitle("E (GeV)");
1784 outputContainer->Add(fhAsyConNLocMax2[i][j]) ;
1786 fhAsyPi0NLocMaxN[i][j] = new TH2F(Form("hAsyPi0NLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
1787 Form("Asymmetry vs E for mass range [%2.2f-%2.2f] GeV/c^{2} %s, for N Local max > 2",
1788 GetCaloPID()->GetPi0MinMass(),GetCaloPID()->GetPi0MaxMass(),ptype[i].Data()),
1789 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1790 fhAsyPi0NLocMaxN[i][j] ->SetYTitle("Asymmetry");
1791 fhAsyPi0NLocMaxN[i][j] ->SetXTitle("E (GeV)");
1792 outputContainer->Add(fhAsyPi0NLocMaxN[i][j]) ;
1794 fhAsyEtaNLocMaxN[i][j] = new TH2F(Form("hAsyEtaNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
1795 Form("Asymmetry vs E for mass range [%2.2f-%2.2f] GeV/c^{2}, %s, for N Local max > 2",
1796 GetCaloPID()->GetEtaMinMass(),GetCaloPID()->GetEtaMaxMass(),ptype[i].Data()),
1797 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1798 fhAsyEtaNLocMaxN[i][j] ->SetYTitle("Asymmetry");
1799 fhAsyEtaNLocMaxN[i][j] ->SetXTitle("E (GeV)");
1800 outputContainer->Add(fhAsyEtaNLocMaxN[i][j]) ;
1802 fhAsyConNLocMaxN[i][j] = new TH2F(Form("hAsyConNLocMaxN%s%s",pname[i].Data(),sMatched[j].Data()),
1803 Form("Asymmetry vs E for mass range [%2.2f-%2.2f], %s, for N Local max > 2",
1804 GetCaloPID()->GetPhotonMinMass(),GetCaloPID()->GetPhotonMaxMass(),ptype[i].Data()),
1805 nptbins,ptmin,ptmax,mbins,mmin,mmax);
1806 fhAsyConNLocMaxN[i][j] ->SetYTitle("Asymmetry");
1807 fhAsyConNLocMaxN[i][j] ->SetXTitle("E (GeV)");
1808 outputContainer->Add(fhAsyConNLocMaxN[i][j]) ;
1810 } // matched, not matched
1814 for(Int_t j = 0; j < 4; j++)
1817 fhMassSplitEFractionNLocMax1Ebin[i][j] = new TH2F(Form("hMassSplitEFractionNLocMax1%sEbin%d",pname[i].Data(),j),
1818 Form("Invariant mass of 2 highest energy cells vs (E1+E2)/Ecluster, %s, E bin %d",ptype[i].Data(),j),
1819 120,0,1.2,mbins,mmin,mmax);
1820 fhMassSplitEFractionNLocMax1Ebin[i][j]->SetYTitle("M (GeV/c^{2})");
1821 fhMassSplitEFractionNLocMax1Ebin[i][j]->SetXTitle("(E_{split1}+E_{split2})/E_{cluster}");
1822 outputContainer->Add(fhMassSplitEFractionNLocMax1Ebin[i][j]) ;
1824 fhMassSplitEFractionNLocMax2Ebin[i][j] = new TH2F(Form("hMassSplitEFractionNLocMax2%sEbin%d",pname[i].Data(),j),
1825 Form("Invariant mass of 2 local maxima cells vs (E1+E2)/Ecluster, %s, E bin %d",ptype[i].Data(),j),
1826 120,0,1.2,mbins,mmin,mmax);
1827 fhMassSplitEFractionNLocMax2Ebin[i][j]->SetYTitle("M (GeV/c^{2})");
1828 fhMassSplitEFractionNLocMax2Ebin[i][j]->SetXTitle("(E_{split1}+E_{split2})/E_{cluster}");
1829 outputContainer->Add(fhMassSplitEFractionNLocMax2Ebin[i][j]) ;
1831 fhMassSplitEFractionNLocMaxNEbin[i][j] = new TH2F(Form("hMassSplitEFractionNLocMaxN%sEbin%d",pname[i].Data(),j),
1832 Form("Invariant mass of N>2 local maxima cells vs (E1+E2)/Ecluster, %s, E bin %d",ptype[i].Data(),j),
1833 120,0,1.2,mbins,mmin,mmax);
1834 fhMassSplitEFractionNLocMaxNEbin[i][j]->SetYTitle("M (GeV/c^{2})");
1835 fhMassSplitEFractionNLocMaxNEbin[i][j]->SetXTitle("(E_{split1}+E_{split2})/E_{cluster}");
1836 outputContainer->Add(fhMassSplitEFractionNLocMaxNEbin[i][j]) ;
1838 if(i>0 && fFillMCHisto) // skip first entry in array, general case not filled
1840 fhMCGenFracNLocMaxEbin[i][j] = new TH2F(Form("hMCGenFracNLocMax%sEbin%d",pname[i].Data(),j),
1841 Form("NLM vs E, %s, E bin %d",ptype[i].Data(),j),
1842 200,0,2,nMaxBins,0,nMaxBins);
1843 fhMCGenFracNLocMaxEbin[i][j]->SetYTitle("NLM");
1844 fhMCGenFracNLocMaxEbin[i][j]->SetXTitle("E_{gen} / E_{reco}");
1845 outputContainer->Add(fhMCGenFracNLocMaxEbin[i][j]) ;
1847 fhMCGenFracNLocMaxEbinMatched[i][j] = new TH2F(Form("hMCGenFracNLocMax%sEbin%dMatched",pname[i].Data(),j),
1848 Form("NLM vs E, %s, E bin %d, matched to a track",ptype[i].Data(),j),
1849 200,0,2,nMaxBins,0,nMaxBins);
1850 fhMCGenFracNLocMaxEbinMatched[i][j]->SetYTitle("NLM");
1851 fhMCGenFracNLocMaxEbinMatched[i][j]->SetXTitle("E_{gen} / E_{reco}");
1852 outputContainer->Add(fhMCGenFracNLocMaxEbinMatched[i][j]) ;
1854 fhMassMCGenFracNLocMax1Ebin[i][j] = new TH2F(Form("hMassMCGenFracNLocMax1%sEbin%d",pname[i].Data(),j),
1855 Form("Invariant mass of 2 highest energy cells vs E, %s, E bin %d",ptype[i].Data(),j),
1856 200,0,2,mbins,mmin,mmax);
1857 fhMassMCGenFracNLocMax1Ebin[i][j]->SetYTitle("M (GeV/c^{2})");
1858 fhMassMCGenFracNLocMax1Ebin[i][j]->SetXTitle("E_{gen} / E_{reco}");
1859 outputContainer->Add(fhMassMCGenFracNLocMax1Ebin[i][j]) ;
1861 fhMassMCGenFracNLocMax2Ebin[i][j] = new TH2F(Form("hMassMCGenFracNLocMax2%sEbin%d",pname[i].Data(),j),
1862 Form("Invariant mass of 2 local maxima cells vs E, %s, E bin %d",ptype[i].Data(),j),
1863 200,0,2,mbins,mmin,mmax);
1864 fhMassMCGenFracNLocMax2Ebin[i][j]->SetYTitle("M (GeV/c^{2})");
1865 fhMassMCGenFracNLocMax2Ebin[i][j]->SetXTitle("E_{gen} / E_{reco}");
1866 outputContainer->Add(fhMassMCGenFracNLocMax2Ebin[i][j]) ;
1868 fhMassMCGenFracNLocMaxNEbin[i][j] = new TH2F(Form("hMassMCGenFracNLocMaxN%sEbin%d",pname[i].Data(),j),
1869 Form("Invariant mass of N>2 local maxima cells vs E, %s, E bin %d",ptype[i].Data(),j),
1870 200,0,2,mbins,mmin,mmax);
1871 fhMassMCGenFracNLocMaxNEbin[i][j]->SetYTitle("M (GeV/c^{2})");
1872 fhMassMCGenFracNLocMaxNEbin[i][j]->SetXTitle("E_{gen} / E_{reco}");
1873 outputContainer->Add(fhMassMCGenFracNLocMaxNEbin[i][j]) ;
1875 fhM02MCGenFracNLocMax1Ebin[i][j] = new TH2F(Form("hM02MCGenFracNLocMax1%sEbin%d",pname[i].Data(),j),
1876 Form("#lambda_{0}^{2} vs E for N max = 1 %s, E bin %d",ptype[i].Data(), j),
1877 200,0,2,ssbins,ssmin,ssmax);
1878 fhM02MCGenFracNLocMax1Ebin[i][j] ->SetYTitle("#lambda_{0}^{2}");
1879 fhM02MCGenFracNLocMax1Ebin[i][j] ->SetXTitle("E_{gen} / E_{reco}");
1880 outputContainer->Add(fhM02MCGenFracNLocMax1Ebin[i][j]) ;
1882 fhM02MCGenFracNLocMax2Ebin[i][j] = new TH2F(Form("hM02MCGenFracNLocMax2%sEbin%d",pname[i].Data(),j),
1883 Form("#lambda_{0}^{2} vs E for N max = 2 %s, E bin %d",ptype[i].Data(),j),
1884 200,0,2,ssbins,ssmin,ssmax);
1885 fhM02MCGenFracNLocMax2Ebin[i][j] ->SetYTitle("#lambda_{0}^{2}");
1886 fhM02MCGenFracNLocMax2Ebin[i][j] ->SetXTitle("E_{gen} / E_{reco}");
1887 outputContainer->Add(fhM02MCGenFracNLocMax2Ebin[i][j]) ;
1889 fhM02MCGenFracNLocMaxNEbin[i][j] = new TH2F(Form("hM02MCGenFracNLocMaxN%sEbin%d",pname[i].Data(),j),
1890 Form("#lambda_{0}^{2} vs E for N max > 2 %s, E bin %d",ptype[i].Data(),j),
1891 200,0,2,ssbins,ssmin,ssmax);
1892 fhM02MCGenFracNLocMaxNEbin[i][j] ->SetYTitle("#lambda_{0}^{2}");
1893 fhM02MCGenFracNLocMaxNEbin[i][j] ->SetXTitle("E_{gen} / E_{reco}");
1894 outputContainer->Add(fhM02MCGenFracNLocMaxNEbin[i][j]) ;
1898 } // MC particle list
1900 // E vs Event plane angle
1902 fhEventPlanePi0NLocMax1 = new TH2F("hEventPlanePi0NLocMax1","E vs Event Plane Angle, selected pi0 cluster with NLM=1",
1903 nptbins,ptmin,ptmax,100,0,TMath::Pi());
1904 fhEventPlanePi0NLocMax1->SetYTitle("Event Plane Angle (rad)");
1905 fhEventPlanePi0NLocMax1->SetXTitle("E (GeV)");
1906 outputContainer->Add(fhEventPlanePi0NLocMax1) ;
1908 fhEventPlanePi0NLocMax2 = new TH2F("hEventPlanePi0NLocMax2","E vs Event Plane Angle, selected pi0 cluster with NLM=2",
1909 nptbins,ptmin,ptmax,100,0,TMath::Pi());
1910 fhEventPlanePi0NLocMax2->SetYTitle("Event Plane Angle (rad)");
1911 fhEventPlanePi0NLocMax2->SetXTitle("E (GeV)");
1912 outputContainer->Add(fhEventPlanePi0NLocMax2) ;
1914 fhEventPlanePi0NLocMaxN = new TH2F("hEventPlanePi0NLocMaxN","E vs Event Plane Angle, selected pi0 cluster with NLM>1",
1915 nptbins,ptmin,ptmax,100,0,TMath::Pi());
1916 fhEventPlanePi0NLocMaxN->SetYTitle("Event Plane Angle (rad)");
1917 fhEventPlanePi0NLocMaxN->SetXTitle("E (GeV)");
1918 outputContainer->Add(fhEventPlanePi0NLocMaxN) ;
1920 fhEventPlaneEtaNLocMax1 = new TH2F("hEventPlaneEtaNLocMax1","E vs Event Plane Angle, selected pi0 cluster with NLM=1",
1921 nptbins,ptmin,ptmax,100,0,TMath::Pi());
1922 fhEventPlaneEtaNLocMax1->SetYTitle("Event Plane Angle (rad)");
1923 fhEventPlaneEtaNLocMax1->SetXTitle("E (GeV)");
1924 outputContainer->Add(fhEventPlaneEtaNLocMax1) ;
1926 fhEventPlaneEtaNLocMax2 = new TH2F("hEventPlaneEtaNLocMax2","E vs Event Plane Angle, selected pi0 cluster with NLM=2",
1927 nptbins,ptmin,ptmax,100,0,TMath::Pi());
1928 fhEventPlaneEtaNLocMax2->SetYTitle("Event Plane Angle (rad)");
1929 fhEventPlaneEtaNLocMax2->SetXTitle("E (GeV)");
1930 outputContainer->Add(fhEventPlaneEtaNLocMax2) ;
1932 fhEventPlaneEtaNLocMaxN = new TH2F("hEventPlaneEtaNLocMaxN","E vs Event Plane Angle, selected pi0 cluster with NLM>1",
1933 nptbins,ptmin,ptmax,100,0,TMath::Pi());
1934 fhEventPlaneEtaNLocMaxN->SetYTitle("Event Plane Angle (rad)");
1935 fhEventPlaneEtaNLocMaxN->SetXTitle("E (GeV)");
1936 outputContainer->Add(fhEventPlaneEtaNLocMaxN) ;
1940 for(Int_t i = 0; i < 4; i++)
1942 fhMassM02NLocMax1Ebin[i] = new TH2F(Form("hMassM02NLocMax1Ebin%d",i),
1943 Form("Invariant mass of split clusters vs #lambda_{0}^{2}, NLM=1, E bin %d",i),
1944 ssbins,ssmin,ssmax,mbins,mmin,mmax);
1945 fhMassM02NLocMax1Ebin[i]->SetYTitle("M (GeV/c^{2})");
1946 fhMassM02NLocMax1Ebin[i]->SetXTitle("#lambda_{0}^{2}");
1947 outputContainer->Add(fhMassM02NLocMax1Ebin[i]) ;
1949 fhMassM02NLocMax2Ebin[i] = new TH2F(Form("hMassM02NLocMax2Ebin%d",i),
1950 Form("Invariant mass of split clusters vs #lambda_{0}^{2}, NLM=2, E bin %d",i),
1951 ssbins,ssmin,ssmax,mbins,mmin,mmax);
1952 fhMassM02NLocMax2Ebin[i]->SetYTitle("M (GeV/c^{2})");
1953 fhMassM02NLocMax2Ebin[i]->SetXTitle("#lambda_{0}^{2}");
1954 outputContainer->Add(fhMassM02NLocMax2Ebin[i]) ;
1956 fhMassM02NLocMaxNEbin[i] = new TH2F(Form("hMassM02NLocMaxNEbin%d",i),
1957 Form("Invariant mass of split clusters vs vs #lambda_{0}^{2}, NLM>2, E bin %d",i),
1958 ssbins,ssmin,ssmax,mbins,mmin,mmax);
1959 fhMassM02NLocMaxNEbin[i]->SetYTitle("M (GeV/c^{2})");
1960 fhMassM02NLocMaxNEbin[i]->SetXTitle("#lambda_{0}^{2}");
1961 outputContainer->Add(fhMassM02NLocMaxNEbin[i]) ;
1964 fhMassAsyNLocMax1Ebin[i] = new TH2F(Form("hMassAsyNLocMax1Ebin%d",i),
1965 Form("Invariant mass of split clusters vs split asymmetry, NLM=1, E bin %d",i),
1966 200,-1,1,mbins,mmin,mmax);
1967 fhMassAsyNLocMax1Ebin[i]->SetYTitle("M (GeV/c^{2})");
1968 fhMassAsyNLocMax1Ebin[i]->SetXTitle("asymmetry");
1969 outputContainer->Add(fhMassAsyNLocMax1Ebin[i]) ;
1971 fhMassAsyNLocMax2Ebin[i] = new TH2F(Form("hMassAsyNLocMax2Ebin%d",i),
1972 Form("Invariant mass of split clusters vs split asymmetry, NLM=2, E bin %d",i),
1973 200,-1,1,mbins,mmin,mmax);
1974 fhMassAsyNLocMax2Ebin[i]->SetYTitle("M (GeV/c^{2})");
1975 fhMassAsyNLocMax2Ebin[i]->SetXTitle("asymmetry");
1976 outputContainer->Add(fhMassAsyNLocMax2Ebin[i]) ;
1978 fhMassAsyNLocMaxNEbin[i] = new TH2F(Form("hMassAsyNLocMaxNEbin%d",i),
1979 Form("Invariant mass of split clusters vs split asymmetry, NLM>2, E bin %d",i),
1980 200,-1,1,mbins,mmin,mmax);
1981 fhMassAsyNLocMaxNEbin[i]->SetYTitle("M (GeV/c^{2})");
1982 fhMassAsyNLocMaxNEbin[i]->SetXTitle("asymmetry");
1983 outputContainer->Add(fhMassAsyNLocMaxNEbin[i]) ;
1986 if(IsDataMC() && fFillMCHisto)
1988 fhMCAsymM02NLocMax1MCPi0Ebin[i] = new TH2F(Form("hMCAsymM02NLocMax1MCPi0Ebin%d",i),
1989 Form("Asymmetry of MC #pi^{0} vs #lambda_{0}^{2}, NLM=1, E bin %d",i),
1990 ssbins,ssmin,ssmax,100,0,1);
1991 fhMCAsymM02NLocMax1MCPi0Ebin[i]->SetYTitle("Decay asymmetry");
1992 fhMCAsymM02NLocMax1MCPi0Ebin[i]->SetXTitle("#lambda_{0}^{2}");
1993 outputContainer->Add(fhMCAsymM02NLocMax1MCPi0Ebin[i]) ;
1995 fhMCAsymM02NLocMax2MCPi0Ebin[i] = new TH2F(Form("hMCAsymM02NLocMax2MCPi0Ebin%d",i),
1996 Form("Asymmetry of MC #pi^{0} vs #lambda_{0}^{2}, NLM=2, E bin %d",i),
1997 ssbins,ssmin,ssmax,100,0,1);
1998 fhMCAsymM02NLocMax2MCPi0Ebin[i]->SetYTitle("Decay asymmetry");
1999 fhMCAsymM02NLocMax2MCPi0Ebin[i]->SetXTitle("#lambda_{0}^{2}");
2000 outputContainer->Add(fhMCAsymM02NLocMax2MCPi0Ebin[i]) ;
2002 fhMCAsymM02NLocMaxNMCPi0Ebin[i] = new TH2F(Form("hMCAsymM02NLocMaxNMCPi0Ebin%d",i),
2003 Form("Asymmetry of MC #pi^{0} vs #lambda_{0}^{2}, NLM>2, E bin %d",i),
2004 ssbins,ssmin,ssmax,100,0,1);
2005 fhMCAsymM02NLocMaxNMCPi0Ebin[i]->SetYTitle("Decay asymmetry");
2006 fhMCAsymM02NLocMaxNMCPi0Ebin[i]->SetXTitle("#lambda_{0}^{2}");
2007 outputContainer->Add(fhMCAsymM02NLocMaxNMCPi0Ebin[i]) ;
2010 fhAsyMCGenRecoNLocMax1EbinPi0[i] = new TH2F(Form("hAsyMCGenRecoNLocMax1Ebin%dPi0",i),
2011 Form("Generated vs reconstructed asymmetry of split clusters from pi0, NLM=1, E bin %d",i),
2013 fhAsyMCGenRecoNLocMax1EbinPi0[i]->SetYTitle("M (GeV/c^{2})");
2014 fhAsyMCGenRecoNLocMax1EbinPi0[i]->SetXTitle("asymmetry");
2015 outputContainer->Add(fhAsyMCGenRecoNLocMax1EbinPi0[i]) ;
2017 fhAsyMCGenRecoNLocMax2EbinPi0[i] = new TH2F(Form("hAsyMCGenRecoNLocMax2Ebin%dPi0",i),
2018 Form("Generated vs reconstructed asymmetry of split clusters from pi0, NLM=2, E bin %d",i),
2020 fhAsyMCGenRecoNLocMax2EbinPi0[i]->SetYTitle("M (GeV/c^{2})");
2021 fhAsyMCGenRecoNLocMax2EbinPi0[i]->SetXTitle("asymmetry");
2022 outputContainer->Add(fhAsyMCGenRecoNLocMax2EbinPi0[i]) ;
2024 fhAsyMCGenRecoNLocMaxNEbinPi0[i] = new TH2F(Form("hAsyMCGenRecoNLocMaxNEbin%dPi0",i),
2025 Form("Generated vs reconstructed asymmetry of split clusters from pi0, NLM>2, E bin %d",i),
2027 fhAsyMCGenRecoNLocMaxNEbinPi0[i]->SetYTitle("M (GeV/c^{2})");
2028 fhAsyMCGenRecoNLocMaxNEbinPi0[i]->SetXTitle("asymmetry");
2029 outputContainer->Add(fhAsyMCGenRecoNLocMaxNEbinPi0[i]) ;
2032 if(fFillSSExtraHisto)
2034 fhMassDispEtaNLocMax1Ebin[i] = new TH2F(Form("hMassDispEtaNLocMax1Ebin%d",i),
2035 Form("Invariant mass of 2 highest energy cells #sigma_{#eta #eta}^{2}, E bin %d",i),
2036 ssbins,ssmin,ssmax,mbins,mmin,mmax);
2037 fhMassDispEtaNLocMax1Ebin[i]->SetYTitle("M (GeV/c^{2})");
2038 fhMassDispEtaNLocMax1Ebin[i]->SetXTitle("#sigma_{#eta #eta}^{2}");
2039 outputContainer->Add(fhMassDispEtaNLocMax1Ebin[i]) ;
2041 fhMassDispEtaNLocMax2Ebin[i] = new TH2F(Form("hMassDispEtaNLocMax2Ebin%d",i),
2042 Form("Invariant mass of 2 local maxima cells #sigma_{#eta #eta}^{2}, E bin %d",i),
2043 ssbins,ssmin,ssmax,mbins,mmin,mmax);
2044 fhMassDispEtaNLocMax2Ebin[i]->SetYTitle("M (GeV/c^{2})");
2045 fhMassDispEtaNLocMax2Ebin[i]->SetXTitle("#sigma_{#eta #eta}^{2}");
2046 outputContainer->Add(fhMassDispEtaNLocMax2Ebin[i]) ;
2048 fhMassDispEtaNLocMaxNEbin[i] = new TH2F(Form("hMassDispEtaNLocMaxNEbin%d",i),
2049 Form("Invariant mass of N>2 local maxima cells vs #sigma_{#eta #eta}^{2}, E bin %d",i),
2050 ssbins,ssmin,ssmax,mbins,mmin,mmax);
2051 fhMassDispEtaNLocMaxNEbin[i]->SetYTitle("M (GeV/c^{2})");
2052 fhMassDispEtaNLocMaxNEbin[i]->SetXTitle("#sigma_{#eta #eta}^{2}");
2053 outputContainer->Add(fhMassDispEtaNLocMaxNEbin[i]) ;
2055 fhMassDispPhiNLocMax1Ebin[i] = new TH2F(Form("hMassDispPhiNLocMax1Ebin%d",i),
2056 Form("Invariant mass of 2 highest energy cells #sigma_{#phi #phi}^{2}, E bin %d",i),
2057 ssbins,ssmin,ssmax,mbins,mmin,mmax);
2058 fhMassDispPhiNLocMax1Ebin[i]->SetYTitle("M (GeV/c^{2})");
2059 fhMassDispPhiNLocMax1Ebin[i]->SetXTitle("#sigma_{#phi #phi}^{2}");
2060 outputContainer->Add(fhMassDispPhiNLocMax1Ebin[i]) ;
2062 fhMassDispPhiNLocMax2Ebin[i] = new TH2F(Form("hMassDispPhiNLocMax2Ebin%d",i),
2063 Form("Invariant mass of 2 local maxima cells #sigma_{#phi #phi}^{2}, E bin %d",i),
2064 ssbins,ssmin,ssmax,mbins,mmin,mmax);
2065 fhMassDispPhiNLocMax2Ebin[i]->SetYTitle("M (GeV/c^{2})");
2066 fhMassDispPhiNLocMax2Ebin[i]->SetXTitle("#sigma_{#phi #phi}^{2}");
2067 outputContainer->Add(fhMassDispPhiNLocMax2Ebin[i]) ;
2069 fhMassDispPhiNLocMaxNEbin[i] = new TH2F(Form("hMassDispPhiNLocMaxNEbin%d",i),
2070 Form("Invariant mass of N>2 local maxima cells vs #sigma_{#phi #phi}^{2}, E bin %d",i),
2071 ssbins,ssmin,ssmax,mbins,mmin,mmax);
2072 fhMassDispPhiNLocMaxNEbin[i]->SetYTitle("M (GeV/c^{2})");
2073 fhMassDispPhiNLocMaxNEbin[i]->SetXTitle("#sigma_{#phi #phi}^{2}");
2074 outputContainer->Add(fhMassDispPhiNLocMaxNEbin[i]) ;
2076 fhMassDispAsyNLocMax1Ebin[i] = new TH2F(Form("hMassDispAsyNLocMax1Ebin%d",i),
2077 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),
2078 200,-1,1,mbins,mmin,mmax);
2079 fhMassDispAsyNLocMax1Ebin[i]->SetYTitle("M (GeV/c^{2})");
2080 fhMassDispAsyNLocMax1Ebin[i]->SetXTitle("A = (#sigma_{#phi #phi}^{2} - #sigma_{#eta #eta}^{2}) / (#sigma_{#phi #phi}^{2} + #sigma_{#eta #eta}^{2})");
2081 outputContainer->Add(fhMassDispAsyNLocMax1Ebin[i]) ;
2083 fhMassDispAsyNLocMax2Ebin[i] = new TH2F(Form("hMassDispAsyNLocMax2Ebin%d",i),
2084 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),
2085 200,-1,1,mbins,mmin,mmax);
2086 fhMassDispAsyNLocMax2Ebin[i]->SetYTitle("M (GeV/c^{2})");
2087 fhMassDispAsyNLocMax2Ebin[i]->SetXTitle("A = (#sigma_{#phi #phi}^{2} - #sigma_{#eta #eta}^{2}) / (#sigma_{#phi #phi}^{2} + #sigma_{#eta #eta}^{2})");
2088 outputContainer->Add(fhMassDispAsyNLocMax2Ebin[i]) ;
2090 fhMassDispAsyNLocMaxNEbin[i] = new TH2F(Form("hMassDispAsyNLocMaxNEbin%d",i),
2091 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),
2092 200,-1,1,mbins,mmin,mmax);
2093 fhMassDispAsyNLocMaxNEbin[i]->SetYTitle("M (GeV/c^{2})");
2094 fhMassDispAsyNLocMaxNEbin[i]->SetXTitle("A = (#sigma_{#phi #phi}^{2} - #sigma_{#eta #eta}^{2}) / (#sigma_{#phi #phi}^{2} + #sigma_{#eta #eta}^{2})");
2095 outputContainer->Add(fhMassDispAsyNLocMaxNEbin[i]) ;
2100 if(IsDataMC() && fFillMCHisto)
2102 fhMCGenSplitEFracAfterCutsNLocMax1MCPi0 = new TH2F("hMCGenSplitEFracAfterCutsNLocMax1MCPi0",
2103 "E_{gen} / (E_{1 split}+E_{2 split}) vs E for N max = 1 MC Pi0, after M02 and Asym cut",
2104 nptbins,ptmin,ptmax,200,0,2);
2105 fhMCGenSplitEFracAfterCutsNLocMax1MCPi0 ->SetYTitle("E_{gen} / (E_{1 split}+E_{2 split})");
2106 fhMCGenSplitEFracAfterCutsNLocMax1MCPi0 ->SetXTitle("E (GeV)");
2107 outputContainer->Add(fhMCGenSplitEFracAfterCutsNLocMax1MCPi0) ;
2109 fhMCGenSplitEFracAfterCutsNLocMax2MCPi0 = new TH2F("hMCGenSplitEFracAfterCutsNLocMax2MCPi0",
2110 "E_{gen} / (E_{1 split}+E_{2 split}) vs E for N max = 2 MC Pi0, after M02 and Asym cut",
2111 nptbins,ptmin,ptmax,200,0,2);
2112 fhMCGenSplitEFracAfterCutsNLocMax2MCPi0 ->SetYTitle("E_{gen} / (E_{1 split}+E_{2 split})");
2113 fhMCGenSplitEFracAfterCutsNLocMax2MCPi0 ->SetXTitle("E (GeV)");
2114 outputContainer->Add(fhMCGenSplitEFracAfterCutsNLocMax2MCPi0) ;
2117 fhMCGenSplitEFracAfterCutsNLocMaxNMCPi0 = new TH2F("hMCGenSplitEFracAfterCutsNLocMaxNMCPi0",
2118 "E_{gen} / (E_{1 split}+E_{2 split}) vs E for N max > 2 MC Pi0, after M02 and Asym cut",
2119 nptbins,ptmin,ptmax,200,0,2);
2120 fhMCGenSplitEFracAfterCutsNLocMaxNMCPi0 ->SetYTitle("E_{gen} / (E_{1 split}+E_{2 split})");
2121 fhMCGenSplitEFracAfterCutsNLocMaxNMCPi0 ->SetXTitle("E (GeV)");
2122 outputContainer->Add(fhMCGenSplitEFracAfterCutsNLocMaxNMCPi0) ;
2124 fhMCGenFracAfterCutsNLocMax1MCPi0 = new TH2F("hMCGenFracAfterCutsNLocMax1MCPi0",
2125 "E_{gen} / E_{reco} vs E_{reco} for N max = 1 MC Pi0, after M02 and Asym cut",
2126 nptbins,ptmin,ptmax,200,0,2);
2127 fhMCGenFracAfterCutsNLocMax1MCPi0 ->SetYTitle("E_{gen} / E_{reco}");
2128 fhMCGenFracAfterCutsNLocMax1MCPi0 ->SetXTitle("E (GeV)");
2129 outputContainer->Add(fhMCGenFracAfterCutsNLocMax1MCPi0) ;
2131 fhMCGenFracAfterCutsNLocMax2MCPi0 = new TH2F("hMCGenFracAfterCutsNLocMax2MCPi0",
2132 " E_{gen} / E_{reco} vs E_{reco} for N max = 2 MC Pi0, after M02 and Asym cut",
2133 nptbins,ptmin,ptmax,200,0,2);
2134 fhMCGenFracAfterCutsNLocMax2MCPi0 ->SetYTitle("E_{gen} / E_{reco}");
2135 fhMCGenFracAfterCutsNLocMax2MCPi0 ->SetXTitle("E (GeV)");
2136 outputContainer->Add(fhMCGenFracAfterCutsNLocMax2MCPi0) ;
2139 fhMCGenFracAfterCutsNLocMaxNMCPi0 = new TH2F("hMCGenFracAfterCutsNLocMaxNMCPi0",
2140 " E_{gen} / E_{reco} vs E_{reco} for N max > 2 MC Pi0, after M02 and Asym cut",
2141 nptbins,ptmin,ptmax,200,0,2);
2142 fhMCGenFracAfterCutsNLocMaxNMCPi0 ->SetYTitle("E_{gen} / E_{reco}");
2143 fhMCGenFracAfterCutsNLocMaxNMCPi0 ->SetXTitle("E (GeV)");
2144 outputContainer->Add(fhMCGenFracAfterCutsNLocMaxNMCPi0) ;
2148 if(fFillTMResidualHisto && fFillTMHisto)
2150 for(Int_t i = 0; i < n; i++)
2153 fhTrackMatchedDEtaNLocMax1[i] = new TH2F
2154 (Form("hTrackMatchedDEtaNLocMax1%s",pname[i].Data()),
2155 Form("d#eta of cluster-track vs cluster energy, 1 Local Maxima, %s",ptype[i].Data()),
2156 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
2157 fhTrackMatchedDEtaNLocMax1[i]->SetYTitle("d#eta");
2158 fhTrackMatchedDEtaNLocMax1[i]->SetXTitle("E_{cluster} (GeV)");
2160 fhTrackMatchedDPhiNLocMax1[i] = new TH2F
2161 (Form("hTrackMatchedDPhiNLocMax1%s",pname[i].Data()),
2162 Form("d#phi of cluster-track vs cluster energy, 1 Local Maxima, %s",ptype[i].Data()),
2163 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
2164 fhTrackMatchedDPhiNLocMax1[i]->SetYTitle("d#phi (rad)");
2165 fhTrackMatchedDPhiNLocMax1[i]->SetXTitle("E_{cluster} (GeV)");
2167 outputContainer->Add(fhTrackMatchedDEtaNLocMax1[i]) ;
2168 outputContainer->Add(fhTrackMatchedDPhiNLocMax1[i]) ;
2170 fhTrackMatchedDEtaNLocMax2[i] = new TH2F
2171 (Form("hTrackMatchedDEtaNLocMax2%s",pname[i].Data()),
2172 Form("d#eta of cluster-track vs cluster energy, 2 Local Maxima, %s",ptype[i].Data()),
2173 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
2174 fhTrackMatchedDEtaNLocMax2[i]->SetYTitle("d#eta");
2175 fhTrackMatchedDEtaNLocMax2[i]->SetXTitle("E_{cluster} (GeV)");
2177 fhTrackMatchedDPhiNLocMax2[i] = new TH2F
2178 (Form("hTrackMatchedDPhiNLocMax2%s",pname[i].Data()),
2179 Form("d#phi of cluster-track vs cluster energy, 2 Local Maxima, %s",ptype[i].Data()),
2180 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
2181 fhTrackMatchedDPhiNLocMax2[i]->SetYTitle("d#phi (rad)");
2182 fhTrackMatchedDPhiNLocMax2[i]->SetXTitle("E_{cluster} (GeV)");
2184 outputContainer->Add(fhTrackMatchedDEtaNLocMax2[i]) ;
2185 outputContainer->Add(fhTrackMatchedDPhiNLocMax2[i]) ;
2187 fhTrackMatchedDEtaNLocMaxN[i] = new TH2F
2188 (Form("hTrackMatchedDEtaNLocMaxN%s",pname[i].Data()),
2189 Form("d#eta of cluster-track vs cluster energy, N>2 Local Maxima, %s",ptype[i].Data()),
2190 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
2191 fhTrackMatchedDEtaNLocMaxN[i]->SetYTitle("d#eta");
2192 fhTrackMatchedDEtaNLocMaxN[i]->SetXTitle("E_{cluster} (GeV)");
2194 fhTrackMatchedDPhiNLocMaxN[i] = new TH2F
2195 (Form("hTrackMatchedDPhiNLocMaxN%s",pname[i].Data()),
2196 Form("d#phi of cluster-track vs cluster energy, N>2 Local Maxima, %s",ptype[i].Data()),
2197 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
2198 fhTrackMatchedDPhiNLocMaxN[i]->SetYTitle("d#phi (rad)");
2199 fhTrackMatchedDPhiNLocMaxN[i]->SetXTitle("E_{cluster} (GeV)");
2201 outputContainer->Add(fhTrackMatchedDEtaNLocMaxN[i]) ;
2202 outputContainer->Add(fhTrackMatchedDPhiNLocMaxN[i]) ;
2204 fhTrackMatchedDEtaNLocMax1Pos[i] = new TH2F
2205 (Form("hTrackMatchedDEtaNLocMax1Pos%s",pname[i].Data()),
2206 Form("d#eta of cluster-track vs cluster energy, 1 Local Maxima, %s",ptype[i].Data()),
2207 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
2208 fhTrackMatchedDEtaNLocMax1Pos[i]->SetYTitle("d#eta");
2209 fhTrackMatchedDEtaNLocMax1Pos[i]->SetXTitle("E_{cluster} (GeV)");
2211 fhTrackMatchedDPhiNLocMax1Pos[i] = new TH2F
2212 (Form("hTrackMatchedDPhiNLocMax1Pos%s",pname[i].Data()),
2213 Form("d#phi of cluster-track vs cluster energy, 1 Local Maxima, %s",ptype[i].Data()),
2214 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
2215 fhTrackMatchedDPhiNLocMax1Pos[i]->SetYTitle("d#phi (rad)");
2216 fhTrackMatchedDPhiNLocMax1Pos[i]->SetXTitle("E_{cluster} (GeV)");
2218 outputContainer->Add(fhTrackMatchedDEtaNLocMax1Pos[i]) ;
2219 outputContainer->Add(fhTrackMatchedDPhiNLocMax1Pos[i]) ;
2221 fhTrackMatchedDEtaNLocMax2Pos[i] = new TH2F
2222 (Form("hTrackMatchedDEtaNLocMax2Pos%s",pname[i].Data()),
2223 Form("d#eta of cluster-track vs cluster energy, 2 Local Maxima, %s",ptype[i].Data()),
2224 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
2225 fhTrackMatchedDEtaNLocMax2Pos[i]->SetYTitle("d#eta");
2226 fhTrackMatchedDEtaNLocMax2Pos[i]->SetXTitle("E_{cluster} (GeV)");
2228 fhTrackMatchedDPhiNLocMax2Pos[i] = new TH2F
2229 (Form("hTrackMatchedDPhiNLocMax2Pos%s",pname[i].Data()),
2230 Form("d#phi of cluster-track vs cluster energy, 2 Local Maxima, %s",ptype[i].Data()),
2231 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
2232 fhTrackMatchedDPhiNLocMax2Pos[i]->SetYTitle("d#phi (rad)");
2233 fhTrackMatchedDPhiNLocMax2Pos[i]->SetXTitle("E_{cluster} (GeV)");
2235 outputContainer->Add(fhTrackMatchedDEtaNLocMax2Pos[i]) ;
2236 outputContainer->Add(fhTrackMatchedDPhiNLocMax2Pos[i]) ;
2238 fhTrackMatchedDEtaNLocMaxNPos[i] = new TH2F
2239 (Form("hTrackMatchedDEtaNLocMaxNPos%s",pname[i].Data()),
2240 Form("d#eta of cluster-track vs cluster energy, N>2 Local Maxima, %s",ptype[i].Data()),
2241 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
2242 fhTrackMatchedDEtaNLocMaxNPos[i]->SetYTitle("d#eta");
2243 fhTrackMatchedDEtaNLocMaxNPos[i]->SetXTitle("E_{cluster} (GeV)");
2245 fhTrackMatchedDPhiNLocMaxNPos[i] = new TH2F
2246 (Form("hTrackMatchedDPhiNLocMaxNPos%s",pname[i].Data()),
2247 Form("d#phi of cluster-track vs cluster energy, N>2 Local Maxima, %s",ptype[i].Data()),
2248 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
2249 fhTrackMatchedDPhiNLocMaxNPos[i]->SetYTitle("d#phi (rad)");
2250 fhTrackMatchedDPhiNLocMaxNPos[i]->SetXTitle("E_{cluster} (GeV)");
2252 outputContainer->Add(fhTrackMatchedDEtaNLocMaxNPos[i]) ;
2253 outputContainer->Add(fhTrackMatchedDPhiNLocMaxNPos[i]) ;
2255 fhTrackMatchedDEtaNLocMax1Neg[i] = new TH2F
2256 (Form("hTrackMatchedDEtaNLocMax1Neg%s",pname[i].Data()),
2257 Form("d#eta of cluster-track vs cluster energy, 1 Local Maxima, %s",ptype[i].Data()),
2258 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
2259 fhTrackMatchedDEtaNLocMax1Neg[i]->SetYTitle("d#eta");
2260 fhTrackMatchedDEtaNLocMax1Neg[i]->SetXTitle("E_{cluster} (GeV)");
2262 fhTrackMatchedDPhiNLocMax1Neg[i] = new TH2F
2263 (Form("hTrackMatchedDPhiNLocMax1Neg%s",pname[i].Data()),
2264 Form("d#phi of cluster-track vs cluster energy, 1 Local Maxima, %s",ptype[i].Data()),
2265 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
2266 fhTrackMatchedDPhiNLocMax1Neg[i]->SetYTitle("d#phi (rad)");
2267 fhTrackMatchedDPhiNLocMax1Neg[i]->SetXTitle("E_{cluster} (GeV)");
2269 outputContainer->Add(fhTrackMatchedDEtaNLocMax1Neg[i]) ;
2270 outputContainer->Add(fhTrackMatchedDPhiNLocMax1Neg[i]) ;
2272 fhTrackMatchedDEtaNLocMax2Neg[i] = new TH2F
2273 (Form("hTrackMatchedDEtaNLocMax2Neg%s",pname[i].Data()),
2274 Form("d#eta of cluster-track vs cluster energy, 2 Local Maxima, %s",ptype[i].Data()),
2275 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
2276 fhTrackMatchedDEtaNLocMax2Neg[i]->SetYTitle("d#eta");
2277 fhTrackMatchedDEtaNLocMax2Neg[i]->SetXTitle("E_{cluster} (GeV)");
2279 fhTrackMatchedDPhiNLocMax2Neg[i] = new TH2F
2280 (Form("hTrackMatchedDPhiNLocMax2Neg%s",pname[i].Data()),
2281 Form("d#phi of cluster-track vs cluster energy, 2 Local Maxima, %s",ptype[i].Data()),
2282 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
2283 fhTrackMatchedDPhiNLocMax2Neg[i]->SetYTitle("d#phi (rad)");
2284 fhTrackMatchedDPhiNLocMax2Neg[i]->SetXTitle("E_{cluster} (GeV)");
2286 outputContainer->Add(fhTrackMatchedDEtaNLocMax2Neg[i]) ;
2287 outputContainer->Add(fhTrackMatchedDPhiNLocMax2Neg[i]) ;
2289 fhTrackMatchedDEtaNLocMaxNNeg[i] = new TH2F
2290 (Form("hTrackMatchedDEtaNLocMaxNNeg%s",pname[i].Data()),
2291 Form("d#eta of cluster-track vs cluster energy, N>2 Local Maxima, %s",ptype[i].Data()),
2292 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
2293 fhTrackMatchedDEtaNLocMaxNNeg[i]->SetYTitle("d#eta");
2294 fhTrackMatchedDEtaNLocMaxNNeg[i]->SetXTitle("E_{cluster} (GeV)");
2296 fhTrackMatchedDPhiNLocMaxNNeg[i] = new TH2F
2297 (Form("hTrackMatchedDPhiNLocMaxNNeg%s",pname[i].Data()),
2298 Form("d#phi of cluster-track vs cluster energy, N>2 Local Maxima, %s",ptype[i].Data()),
2299 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
2300 fhTrackMatchedDPhiNLocMaxNNeg[i]->SetYTitle("d#phi (rad)");
2301 fhTrackMatchedDPhiNLocMaxNNeg[i]->SetXTitle("E_{cluster} (GeV)");
2303 outputContainer->Add(fhTrackMatchedDEtaNLocMaxNNeg[i]) ;
2304 outputContainer->Add(fhTrackMatchedDPhiNLocMaxNNeg[i]) ;
2311 for(Int_t j = 0; j < nMatched; j++)
2314 fhAnglePairNLocMax1[j] = new TH2F(Form("hAnglePairNLocMax1%s",sMatched[j].Data()),
2315 Form("Opening angle of 2 highest energy cells vs pair Energy, %s",sMatched[j].Data()),
2316 nptbins,ptmin,ptmax,200,0,0.2);
2317 fhAnglePairNLocMax1[j]->SetYTitle("#alpha (rad)");
2318 fhAnglePairNLocMax1[j]->SetXTitle("E (GeV)");
2319 outputContainer->Add(fhAnglePairNLocMax1[j]) ;
2321 fhAnglePairNLocMax2[j] = new TH2F(Form("hAnglePairNLocMax2%s",sMatched[j].Data()),
2322 Form("Opening angle of 2 local maxima cells vs Energy, %s",sMatched[j].Data()),
2323 nptbins,ptmin,ptmax,200,0,0.2);
2324 fhAnglePairNLocMax2[j]->SetYTitle("#alpha (rad)");
2325 fhAnglePairNLocMax2[j]->SetXTitle("E (GeV)");
2326 outputContainer->Add(fhAnglePairNLocMax2[j]) ;
2328 fhAnglePairNLocMaxN[j] = new TH2F(Form("hAnglePairNLocMaxN%s",sMatched[j].Data()),
2329 Form("Opening angle of N>2 local maxima cells vs Energy, %s",sMatched[j].Data()),
2330 nptbins,ptmin,ptmax,200,0,0.2);
2331 fhAnglePairNLocMaxN[j]->SetYTitle("#alpha (rad)");
2332 fhAnglePairNLocMaxN[j]->SetXTitle("E (GeV)");
2333 outputContainer->Add(fhAnglePairNLocMaxN[j]) ;
2335 fhAnglePairMassNLocMax1[j] = new TH2F(Form("hAnglePairMassNLocMax1%s",sMatched[j].Data()),
2336 Form("Opening angle of 2 highest energy cells vs Mass for E > 12 GeV, %s",sMatched[j].Data()),
2337 mbins,mmin,mmax,200,0,0.2);
2338 fhAnglePairMassNLocMax1[j]->SetXTitle("M (GeV/c^{2})");
2339 fhAnglePairMassNLocMax1[j]->SetYTitle("#alpha (rad)");
2340 outputContainer->Add(fhAnglePairMassNLocMax1[j]) ;
2342 fhAnglePairMassNLocMax2[j] = new TH2F(Form("hAnglePairMassNLocMax2%s",sMatched[j].Data()),
2343 Form("Opening angle of 2 local maxima cells vs Mass for E > 12 GeV, %s",sMatched[j].Data()),
2344 mbins,mmin,mmax,200,0,0.2);
2345 fhAnglePairMassNLocMax2[j]->SetXTitle("M (GeV/c^{2})");
2346 fhAnglePairMassNLocMax2[j]->SetYTitle("#alpha (rad)");
2347 outputContainer->Add(fhAnglePairMassNLocMax2[j]) ;
2349 fhAnglePairMassNLocMaxN[j] = new TH2F(Form("hAnglePairMassNLocMaxN%s",sMatched[j].Data()),
2350 Form("Opening angle of N>2 local maxima cells vs Mass for E > 12 GeV, %s",sMatched[j].Data()),
2351 mbins,mmin,mmax,200,0,0.2);
2352 fhAnglePairMassNLocMaxN[j]->SetXTitle("M (GeV/c^{2})");
2353 fhAnglePairMassNLocMaxN[j]->SetYTitle("#alpha (rad)");
2354 outputContainer->Add(fhAnglePairMassNLocMaxN[j]) ;
2359 for(Int_t j = 0; j < nMatched; j++)
2361 fhSplitEFractionvsAsyNLocMax1[j] = new TH2F(Form("hSplitEFractionvsAsyNLocMax1%s",sMatched[j].Data()),
2362 Form("(E1+E2)/E_{cluster} vs (E_{split1}-E_{split2})/(E_{split1}+E_{split2}) for N max = 1, E>12, %s",sMatched[j].Data()),
2363 100,-1,1,120,0,1.2);
2364 fhSplitEFractionvsAsyNLocMax1[j] ->SetXTitle("(E_{split1}-E_{split2})/(E_{split1}+E_{split2})");
2365 fhSplitEFractionvsAsyNLocMax1[j] ->SetYTitle("(E_{split1}+E_{split2})/E_{cluster}");
2366 outputContainer->Add(fhSplitEFractionvsAsyNLocMax1[j]) ;
2368 fhSplitEFractionvsAsyNLocMax2[j] = new TH2F(Form("hSplitEFractionvsAsyNLocMax2%s",sMatched[j].Data()),
2369 Form("(E1+E2)/E_{cluster} vs (E_{split1}-E_{split2})/(E_{split1}+E_{split2}) for N max = 2,E>12, %s",sMatched[j].Data()),
2370 100,-1,1,120,0,1.2);
2371 fhSplitEFractionvsAsyNLocMax2[j] ->SetXTitle("(E_{split1}-E_{split2})/(E_{split1}+E_{split2})");
2372 fhSplitEFractionvsAsyNLocMax2[j] ->SetYTitle("(E_{split1}+E_{split2})/E_{cluster}");
2373 outputContainer->Add(fhSplitEFractionvsAsyNLocMax2[j]) ;
2375 fhSplitEFractionvsAsyNLocMaxN[j] = new TH2F(Form("hSplitEFractionvsAsyNLocMaxN%s",sMatched[j].Data()),
2376 Form("(E1+E2)/E_{cluster} vs (E_{split1}-E_{split2})/(E_{split1}+E_{split2}) for N max > 2, E>12, %s",sMatched[j].Data()),
2377 100,-1,1,120,0,1.2);
2378 fhSplitEFractionvsAsyNLocMaxN[j] ->SetXTitle("(E_{split1}-E_{split2})/(E_{split1}+E_{split2})");
2379 fhSplitEFractionvsAsyNLocMaxN[j] ->SetYTitle("(E_{split1}+E_{split2})/E_{cluster}");
2380 outputContainer->Add(fhSplitEFractionvsAsyNLocMaxN[j]) ;
2384 fhClusterEtaPhiNLocMax1 = new TH2F
2385 ("hClusterEtaPhiNLocMax1","Neutral Clusters with E > 8 GeV, NLM = 1: #eta vs #phi",netabins,etamin,etamax, nphibins,phimin,phimax);
2386 fhClusterEtaPhiNLocMax1->SetYTitle("#phi (rad)");
2387 fhClusterEtaPhiNLocMax1->SetXTitle("#eta");
2388 outputContainer->Add(fhClusterEtaPhiNLocMax1) ;
2390 fhClusterEtaPhiNLocMax2 = new TH2F
2391 ("hClusterEtaPhiNLocMax2","Neutral Clusters with E > 8 GeV, NLM = 2: #eta vs #phi",netabins,etamin,etamax, nphibins,phimin,phimax);
2392 fhClusterEtaPhiNLocMax2->SetYTitle("#phi (rad)");
2393 fhClusterEtaPhiNLocMax2->SetXTitle("#eta");
2394 outputContainer->Add(fhClusterEtaPhiNLocMax2) ;
2396 fhClusterEtaPhiNLocMaxN = new TH2F
2397 ("hClusterEtaPhiNLocMaxN","Neutral Clusters with E > 8 GeV, NLM > 2: #eta vs #phi",netabins,etamin,etamax, nphibins,phimin,phimax);
2398 fhClusterEtaPhiNLocMaxN->SetYTitle("#phi (rad)");
2399 fhClusterEtaPhiNLocMaxN->SetXTitle("#eta");
2400 outputContainer->Add(fhClusterEtaPhiNLocMaxN) ;
2402 fhPi0EtaPhiNLocMax1 = new TH2F
2403 ("hPi0EtaPhiNLocMax1","Selected #pi^{0}'s with E > 8 GeV, NLM = 1: #eta vs #phi",netabins,etamin,etamax, nphibins,phimin,phimax);
2404 fhPi0EtaPhiNLocMax1->SetYTitle("#phi (rad)");
2405 fhPi0EtaPhiNLocMax1->SetXTitle("#eta");
2406 outputContainer->Add(fhPi0EtaPhiNLocMax1) ;
2408 fhPi0EtaPhiNLocMax2 = new TH2F
2409 ("hPi0EtaPhiNLocMax2","Selected #pi^{0}'s with E > 8 GeV, NLM = 2: #eta vs #phi",netabins,etamin,etamax, nphibins,phimin,phimax);
2410 fhPi0EtaPhiNLocMax2->SetYTitle("#phi (rad)");
2411 fhPi0EtaPhiNLocMax2->SetXTitle("#eta");
2412 outputContainer->Add(fhPi0EtaPhiNLocMax2) ;
2414 fhPi0EtaPhiNLocMaxN = new TH2F
2415 ("hPi0EtaPhiNLocMaxN","Selected #pi^{0}'s with E > 8 GeV, NLM > 2: #eta vs #phi",netabins,etamin,etamax, nphibins,phimin,phimax);
2416 fhPi0EtaPhiNLocMaxN->SetYTitle("#phi (rad)");
2417 fhPi0EtaPhiNLocMaxN->SetXTitle("#eta");
2418 outputContainer->Add(fhPi0EtaPhiNLocMaxN) ;
2420 fhEtaEtaPhiNLocMax1 = new TH2F
2421 ("hEtaEtaPhiNLocMax1","Selected #eta's with E > 8 GeV, NLM = 1: #eta vs #phi",netabins,etamin,etamax, nphibins,phimin,phimax);
2422 fhEtaEtaPhiNLocMax1->SetYTitle("#phi (rad)");
2423 fhEtaEtaPhiNLocMax1->SetXTitle("#eta");
2424 outputContainer->Add(fhEtaEtaPhiNLocMax1) ;
2426 fhEtaEtaPhiNLocMax2 = new TH2F
2427 ("hEtaEtaPhiNLocMax2","Selected #eta's with E > 8 GeV, NLM = 2: #eta vs #phi",netabins,etamin,etamax, nphibins,phimin,phimax);
2428 fhEtaEtaPhiNLocMax2->SetYTitle("#phi (rad)");
2429 fhEtaEtaPhiNLocMax2->SetXTitle("#eta");
2430 outputContainer->Add(fhEtaEtaPhiNLocMax2) ;
2432 fhEtaEtaPhiNLocMaxN = new TH2F
2433 ("hEtaEtaPhiNLocMaxN","Selected #eta's with E > 8 GeV, NLM > 2: #eta vs #phi",netabins,etamin,etamax, nphibins,phimin,phimax);
2434 fhEtaEtaPhiNLocMaxN->SetYTitle("#phi (rad)");
2435 fhEtaEtaPhiNLocMaxN->SetXTitle("#eta");
2436 outputContainer->Add(fhEtaEtaPhiNLocMaxN) ;
2438 TString snlm[] = {"1","2","N"};
2440 if(fFillSSWeightHisto)
2442 for(Int_t nlm = 0; nlm < 3; nlm++)
2444 fhPi0CellE[nlm] = new TH2F(Form("hPi0CellENLocMax%s",snlm[nlm].Data()),
2445 Form("Selected #pi^{0}'s, NLM = %s: cluster E vs cell E",snlm[nlm].Data()),
2446 nptbins,ptmin,ptmax, nptbins,ptmin,ptmax);
2447 fhPi0CellE[nlm]->SetYTitle("E_{cell}");
2448 fhPi0CellE[nlm]->SetXTitle("E_{cluster}");
2449 outputContainer->Add(fhPi0CellE[nlm]) ;
2451 fhPi0CellEFrac[nlm] = new TH2F(Form("hPi0CellEFracNLocMax%s",snlm[nlm].Data()),
2452 Form("Selected #pi^{0}'s, NLM = %s: cluster E vs cell E / cluster E",snlm[nlm].Data()),
2453 nptbins,ptmin,ptmax, 100,0,1);
2454 fhPi0CellEFrac[nlm]->SetYTitle("E_{cell} / E_{cluster}");
2455 fhPi0CellEFrac[nlm]->SetXTitle("E_{cluster}");
2456 outputContainer->Add(fhPi0CellEFrac[nlm]) ;
2458 fhPi0CellLogEFrac[nlm] = new TH2F(Form("hPi0CellLogEFracNLocMax%s",snlm[nlm].Data()),
2459 Form("Selected #pi^{0}'s, NLM = %s: cluster E vs Log(cell E / cluster E)",snlm[nlm].Data()),
2460 nptbins,ptmin,ptmax, 100,-10,0);
2461 fhPi0CellLogEFrac[nlm]->SetYTitle("Log(E_{cell} / E_{cluster})");
2462 fhPi0CellLogEFrac[nlm]->SetXTitle("E_{cluster}");
2463 outputContainer->Add(fhPi0CellLogEFrac[nlm]) ;
2466 fhPi0CellEMaxEMax2Frac[nlm] = new TH2F(Form("hPi0CellEMaxEMax2FracNLocMax%s",snlm[nlm].Data()),
2467 Form("Selected #pi^{0}'s, NLM = %s: cluster E vs 2nd loc. max. E / 1st loc. max. E",snlm[nlm].Data()),
2468 nptbins,ptmin,ptmax, 100,0,1);
2469 fhPi0CellEMaxEMax2Frac[nlm]->SetYTitle("E_{Loc Max 2} / E_{Loc Max 1}");
2470 fhPi0CellEMaxEMax2Frac[nlm]->SetXTitle("E_{cluster}");
2471 outputContainer->Add(fhPi0CellEMaxEMax2Frac[nlm]) ;
2473 fhPi0CellEMaxClusterFrac[nlm] = new TH2F(Form("hPi0CellEMaxClusterFracNLocMax%s",snlm[nlm].Data()),
2474 Form("Selected #pi^{0}'s, NLM = %s: cluster E vs 1st loc. max. E / E cluster",snlm[nlm].Data()),
2475 nptbins,ptmin,ptmax, 100,0,1);
2476 fhPi0CellEMaxClusterFrac[nlm]->SetYTitle("E_{Loc Max 1} / E_{cluster}");
2477 fhPi0CellEMaxClusterFrac[nlm]->SetXTitle("E_{cluster}");
2478 outputContainer->Add(fhPi0CellEMaxClusterFrac[nlm]) ;
2480 fhPi0CellEMax2ClusterFrac[nlm] = new TH2F(Form("hPi0CellEMax2ClusterFracNLocMax%s",snlm[nlm].Data()),
2481 Form("Selected #pi^{0}'s, NLM = %s: cluster E vs 2nd loc. max. E / E cluster",snlm[nlm].Data()),
2482 nptbins,ptmin,ptmax, 100,0,1);
2483 fhPi0CellEMax2ClusterFrac[nlm]->SetYTitle("E_{Loc Max 2} / E_{cluster}");
2484 fhPi0CellEMax2ClusterFrac[nlm]->SetXTitle("E_{cluster}");
2485 outputContainer->Add(fhPi0CellEMax2ClusterFrac[nlm]) ;
2487 fhPi0CellEMaxFrac[nlm] = new TH2F(Form("hPi0CellEMaxFracNLocMax%s",snlm[nlm].Data()),
2488 Form("Selected #pi^{0}'s, NLM = %s: cluster E vs 1st loc. max. E / E cell i",snlm[nlm].Data()),
2489 nptbins,ptmin,ptmax, 100,0,1);
2490 fhPi0CellEMaxFrac[nlm]->SetYTitle("E_{Loc Max 1} / E_{cell i}");
2491 fhPi0CellEMaxFrac[nlm]->SetXTitle("E_{cluster}");
2492 outputContainer->Add(fhPi0CellEMaxFrac[nlm]) ;
2494 fhPi0CellEMax2Frac[nlm] = new TH2F(Form("hPi0CellEMax2FracNLocMax%s",snlm[nlm].Data()),
2495 Form("Selected #pi^{0}'s, NLM = %s: cluster E vs 2nd loc. max. E / E cell i",snlm[nlm].Data()),
2496 nptbins,ptmin,ptmax, 200,0,2);
2497 fhPi0CellEMax2Frac[nlm]->SetYTitle("E_{Loc Max 2} / E_{cell i}");
2498 fhPi0CellEMax2Frac[nlm]->SetXTitle("E_{cluster}");
2499 outputContainer->Add(fhPi0CellEMax2Frac[nlm]) ;
2502 for(Int_t i = 0; i < fSSWeightN; i++)
2504 fhM02WeightPi0[nlm][i] = new TH2F(Form("hM02Pi0NLocMax%s_W%d",snlm[nlm].Data(),i),
2505 Form("#lambda_{0}^{2} vs E, with W0 = %2.2f, for N Local max = %s", fSSWeight[i], snlm[nlm].Data()),
2506 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2507 fhM02WeightPi0[nlm][i] ->SetYTitle("#lambda_{0}^{2}");
2508 fhM02WeightPi0[nlm][i] ->SetXTitle("E (GeV)");
2509 outputContainer->Add(fhM02WeightPi0[nlm][i]) ;
2512 for(Int_t i = 0; i < fSSECellCutN; i++)
2514 fhM02ECellCutPi0[nlm][i] = new TH2F(Form("hM02Pi0NLocMax%s_Ecell%d",snlm[nlm].Data(),i),
2515 Form("#lambda_{0}^{2} vs E, with Ecell > %2.2f, for N Local max = %s", fSSECellCut[i], snlm[nlm].Data()),
2516 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2517 fhM02ECellCutPi0[nlm][i] ->SetYTitle("#lambda_{0}^{2}");
2518 fhM02ECellCutPi0[nlm][i] ->SetXTitle("E (GeV)");
2519 outputContainer->Add(fhM02ECellCutPi0[nlm][i]) ;
2525 Int_t tdbins = GetHistogramRanges()->GetHistoDiffTimeBins() ; Float_t tdmax = GetHistogramRanges()->GetHistoDiffTimeMax(); Float_t tdmin = GetHistogramRanges()->GetHistoDiffTimeMin();
2527 fhPi0EPairDiffTimeNLM1 = new TH2F("hPi0EPairDiffTimeNLocMax1","cluster pair time difference vs E, selected #pi, NLM=1",nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
2528 fhPi0EPairDiffTimeNLM1->SetXTitle("E_{pair} (GeV)");
2529 fhPi0EPairDiffTimeNLM1->SetYTitle("#Delta t (ns)");
2530 outputContainer->Add(fhPi0EPairDiffTimeNLM1);
2532 fhPi0EPairDiffTimeNLM2 = new TH2F("hPi0EPairDiffTimeNLocMax2","cluster pair time difference vs E, selected #pi, NLM=2",nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
2533 fhPi0EPairDiffTimeNLM2->SetXTitle("E_{pair} (GeV)");
2534 fhPi0EPairDiffTimeNLM2->SetYTitle("#Delta t (ns)");
2535 outputContainer->Add(fhPi0EPairDiffTimeNLM2);
2537 fhPi0EPairDiffTimeNLMN = new TH2F("hPi0EPairDiffTimeNLocMaxN","cluster pair time difference vs E, selected #pi, NLM>2",nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
2538 fhPi0EPairDiffTimeNLMN->SetXTitle("E_{pair} (GeV)");
2539 fhPi0EPairDiffTimeNLMN->SetYTitle("#Delta t (ns)");
2540 outputContainer->Add(fhPi0EPairDiffTimeNLMN);
2542 fhEtaEPairDiffTimeNLM1 = new TH2F("hEtaEPairDiffTimeNLocMax1","cluster pair time difference vs E, selected #eta, NLM=1",nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
2543 fhEtaEPairDiffTimeNLM1->SetXTitle("E_{pair} (GeV)");
2544 fhEtaEPairDiffTimeNLM1->SetYTitle("#Delta t (ns)");
2545 outputContainer->Add(fhEtaEPairDiffTimeNLM1);
2547 fhEtaEPairDiffTimeNLM2 = new TH2F("hEtaEPairDiffTimeNLocMax2","cluster pair time difference vs E, selected #eta, NLM=2",nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
2548 fhEtaEPairDiffTimeNLM2->SetXTitle("E_{pair} (GeV)");
2549 fhEtaEPairDiffTimeNLM2->SetYTitle("#Delta t (ns)");
2550 outputContainer->Add(fhEtaEPairDiffTimeNLM2);
2552 fhEtaEPairDiffTimeNLMN = new TH2F("hEtaEPairDiffTimeNLocMaxN","cluster pair time difference vs E, selected #eta, NLM>2",nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
2553 fhEtaEPairDiffTimeNLMN->SetXTitle("E_{pair} (GeV)");
2554 fhEtaEPairDiffTimeNLMN->SetYTitle("#Delta t (ns)");
2555 outputContainer->Add(fhEtaEPairDiffTimeNLMN);
2558 if(IsDataMC() && fFillMCOverlapHisto)
2560 for(Int_t i = 1; i < n; i++)
2562 for(Int_t j = 0; j < 3; j++)
2564 fhMCENOverlaps[j][i] = new TH2F(Form("hMCENOverlapsNLocMax%s%s",snlm[j].Data(),pname[i].Data()),
2565 Form("# overlaps vs E for NLM=%s, %s",snlm[j].Data(),ptype[i].Data()),
2566 nptbins,ptmin,ptmax,10,0,10);
2567 fhMCENOverlaps[j][i] ->SetYTitle("# overlaps");
2568 fhMCENOverlaps[j][i] ->SetXTitle("E (GeV)");
2569 outputContainer->Add(fhMCENOverlaps[j][i]) ;
2571 fhMCEM02Overlap0[j][i] = new TH2F(Form("hMCEM02Overlap0NLocMax%s%s",snlm[j].Data(),pname[i].Data()),
2572 Form("Overlap 0, #lambda_{0}^{2} vs E for NLM=%s, %s",snlm[j].Data(),ptype[i].Data()),
2573 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2574 fhMCEM02Overlap0[j][i] ->SetYTitle("#lambda_{0}^{2}");
2575 fhMCEM02Overlap0[j][i] ->SetXTitle("E (GeV)");
2576 outputContainer->Add(fhMCEM02Overlap0[j][i]) ;
2578 fhMCEM02Overlap1[j][i] = new TH2F(Form("hMCEM02Overlap1NLocMax%s%s",snlm[j].Data(), pname[i].Data()),
2579 Form("Overlap 1, #lambda_{0}^{2} vs E for NLM=%s, %s",snlm[j].Data(),ptype[i].Data()),
2580 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2581 fhMCEM02Overlap1[j][i] ->SetYTitle("#lambda_{0}^{2}");
2582 fhMCEM02Overlap1[j][i] ->SetXTitle("E (GeV)");
2583 outputContainer->Add(fhMCEM02Overlap1[j][i]) ;
2585 fhMCEM02OverlapN[j][i] = new TH2F(Form("hMCEM02OverlapNNLocMax%s%s",snlm[j].Data(), pname[i].Data()),
2586 Form("Overlap N, #lambda_{0}^{2} vs E for NLM=%s %s",snlm[j].Data(),ptype[i].Data()),
2587 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2588 fhMCEM02OverlapN[j][i] ->SetYTitle("#lambda_{0}^{2}");
2589 fhMCEM02OverlapN[j][i] ->SetXTitle("E (GeV)");
2590 outputContainer->Add(fhMCEM02OverlapN[j][i]) ;
2592 fhMCEMassOverlap0[j][i] = new TH2F(Form("hMCEMassOverlap0NLocMax%s%s",snlm[j].Data(),pname[i].Data()),
2593 Form("Overlap 0, Mass vs E for NLM=%s, %s",snlm[j].Data(),ptype[i].Data()),
2594 nptbins,ptmin,ptmax,mbins,mmin,mmax);
2595 fhMCEMassOverlap0[j][i] ->SetYTitle("Mass (GeV/c^{2}");
2596 fhMCEMassOverlap0[j][i] ->SetXTitle("E (GeV)");
2597 outputContainer->Add(fhMCEMassOverlap0[j][i]) ;
2599 fhMCEMassOverlap1[j][i] = new TH2F(Form("hMCEMassOverlap1NLocMax%s%s",snlm[j].Data(), pname[i].Data()),
2600 Form("Overalap 1, Mass vs E for NLM=%s, %s",snlm[j].Data(),ptype[i].Data()),
2601 nptbins,ptmin,ptmax,mbins,mmin,mmax);
2602 fhMCEMassOverlap1[j][i] ->SetYTitle("Mass (GeV/c^{2}");
2603 fhMCEMassOverlap1[j][i] ->SetXTitle("E (GeV)");
2604 outputContainer->Add(fhMCEMassOverlap1[j][i]) ;
2606 fhMCEMassOverlapN[j][i] = new TH2F(Form("hMCEMassOverlapNNLocMax%s%s",snlm[j].Data(), pname[i].Data()),
2607 Form("Overlap N, Mass vs E for NLM=%s %s",snlm[j].Data(),ptype[i].Data()),
2608 nptbins,ptmin,ptmax,mbins,mmin,mmax);
2609 fhMCEMassOverlapN[j][i] ->SetYTitle("Mass (GeV/c^{2})");
2610 fhMCEMassOverlapN[j][i] ->SetXTitle("E (GeV)");
2611 outputContainer->Add(fhMCEMassOverlapN[j][i]) ;
2616 fhMCPi0MassM02Overlap0[j][i-1] = new TH2F(Form("hMCPi0MassM02Overlap0NLocMax%sEbin%d",snlm[j].Data(),i-1),
2617 Form("Overlap 0, Mass vs #lambda_{0}^{2}, NLM=%s, E bin %d",snlm[j].Data(),i-1),
2618 ssbins,ssmin,ssmax,mbins,mmin,mmax);
2619 fhMCPi0MassM02Overlap0[j][i-1]->SetYTitle("M (GeV/c^{2})");
2620 fhMCPi0MassM02Overlap0[j][i-1]->SetXTitle("#lambda_{0}^{2}");
2621 outputContainer->Add(fhMCPi0MassM02Overlap0[j][i-1]) ;
2623 fhMCPi0MassM02Overlap1[j][i-1] = new TH2F(Form("hMCPi0MassM02Overlap1NLocMax%sEbin%d",snlm[j].Data(),i-1),
2624 Form("Overlap 1, Mass vs #lambda_{0}^{2}, NLM=%s, E bin %d",snlm[j].Data(),i-1),
2625 ssbins,ssmin,ssmax,mbins,mmin,mmax);
2626 fhMCPi0MassM02Overlap1[j][i-1]->SetYTitle("M (GeV/c^{2})");
2627 fhMCPi0MassM02Overlap1[j][i-1]->SetXTitle("#lambda_{0}^{2}");
2628 outputContainer->Add(fhMCPi0MassM02Overlap1[j][i-1]) ;
2630 fhMCPi0MassM02OverlapN[j][i-1] = new TH2F(Form("hMCPi0MassM02OverlapNNLocMax%sEbin%d",snlm[j].Data(),i-1),
2631 Form("Overlap N, Mass vs #lambda_{0}^{2}, NLM=%s, E bin %d",snlm[j].Data(),i-1),
2632 ssbins,ssmin,ssmax,mbins,mmin,mmax);
2633 fhMCPi0MassM02OverlapN[j][i-1]->SetYTitle("M (GeV/c^{2})");
2634 fhMCPi0MassM02OverlapN[j][i-1]->SetXTitle("#lambda_{0}^{2}");
2635 outputContainer->Add(fhMCPi0MassM02OverlapN[j][i-1]) ;
2640 fhMCENOverlapsMatch[j][i] = new TH2F(Form("hMCENOverlapsNLocMax%s%sMatched",snlm[j].Data(),pname[i].Data()),
2641 Form("# overlaps vs E for NLM=%s, %s",snlm[j].Data(),ptype[i].Data()),
2642 nptbins,ptmin,ptmax,10,0,10);
2643 fhMCENOverlapsMatch[j][i] ->SetYTitle("# overlaps");
2644 fhMCENOverlapsMatch[j][i] ->SetXTitle("E (GeV)");
2645 outputContainer->Add(fhMCENOverlapsMatch[j][i]) ;
2647 fhMCEM02Overlap0Match[j][i] = new TH2F(Form("hMCEM02Overlap0NLocMax%s%sMatched",snlm[j].Data(),pname[i].Data()),
2648 Form("#lambda_{0}^{2} vs E for NLM=%s, %s, Track Matched",snlm[j].Data(),ptype[i].Data()),
2649 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2650 fhMCEM02Overlap0Match[j][i] ->SetYTitle("#lambda_{0}^{2}");
2651 fhMCEM02Overlap0Match[j][i] ->SetXTitle("E (GeV)");
2652 outputContainer->Add(fhMCEM02Overlap0Match[j][i]) ;
2654 fhMCEM02Overlap1Match[j][i] = new TH2F(Form("hMCEM02Overlap1NLocMax%s%sMatched",snlm[j].Data(), pname[i].Data()),
2655 Form("#lambda_{0}^{2} vs E for NLM=%s, %s, Track Matched",snlm[j].Data(),ptype[i].Data()),
2656 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2657 fhMCEM02Overlap1Match[j][i] ->SetYTitle("#lambda_{0}^{2}");
2658 fhMCEM02Overlap1Match[j][i] ->SetXTitle("E (GeV)");
2659 outputContainer->Add(fhMCEM02Overlap1Match[j][i]) ;
2661 fhMCEM02OverlapNMatch[j][i] = new TH2F(Form("hMCEM02OverlapNNLocMax%s%sMatched",snlm[j].Data(), pname[i].Data()),
2662 Form("#lambda_{0}^{2} vs E for NLM=%s, %s, Track Matched",snlm[j].Data(),ptype[i].Data()),
2663 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
2664 fhMCEM02OverlapNMatch[j][i] ->SetYTitle("#lambda_{0}^{2}");
2665 fhMCEM02OverlapNMatch[j][i] ->SetXTitle("E (GeV)");
2666 outputContainer->Add(fhMCEM02OverlapNMatch[j][i]) ;
2668 fhMCEMassOverlap0Match[j][i] = new TH2F(Form("hMCEMassOverlap0NLocMax%s%sMatched",snlm[j].Data(),pname[i].Data()),
2669 Form("Mass vs E for NLM=%s, %s, Track Matched",snlm[j].Data(),ptype[i].Data()),
2670 nptbins,ptmin,ptmax,mbins,mmin,mmax);
2671 fhMCEMassOverlap0Match[j][i] ->SetYTitle("Mass (GeV/c^{2}");
2672 fhMCEMassOverlap0Match[j][i] ->SetXTitle("E (GeV)");
2673 outputContainer->Add(fhMCEMassOverlap0Match[j][i]) ;
2675 fhMCEMassOverlap1Match[j][i] = new TH2F(Form("hMCEMassOverlap1NLocMax%s%sMatched",snlm[j].Data(), pname[i].Data()),
2676 Form("Mass vs E for NLM=%s, %s, Track Matched",snlm[j].Data(),ptype[i].Data()),
2677 nptbins,ptmin,ptmax,mbins,mmin,mmax);
2678 fhMCEMassOverlap1Match[j][i] ->SetYTitle("Mass (GeV/c^{2}");
2679 fhMCEMassOverlap1Match[j][i] ->SetXTitle("E (GeV)");
2680 outputContainer->Add(fhMCEMassOverlap1Match[j][i]) ;
2682 fhMCEMassOverlapNMatch[j][i] = new TH2F(Form("hMCEMassOverlapNNLocMax%s%sMatched",snlm[j].Data(), pname[i].Data()),
2683 Form("Mass vs E for NLM=%s, %s, Track Matched",snlm[j].Data(),ptype[i].Data()),
2684 nptbins,ptmin,ptmax,mbins,mmin,mmax);
2685 fhMCEMassOverlapNMatch[j][i] ->SetYTitle("Mass (GeV/c^{2}");
2686 fhMCEMassOverlapNMatch[j][i] ->SetXTitle("E (GeV)");
2687 outputContainer->Add(fhMCEMassOverlapNMatch[j][i]) ;
2691 fhMCPi0MassM02Overlap0Match[j][i-1] = new TH2F(Form("hMCPi0MassM02Overlap0NLocMax%sEbin%dMatched",snlm[j].Data(),i-1),
2692 Form("Overlap 0, Mass vs #lambda_{0}^{2}, NLM=%s, E bin %d, Track Matched",snlm[j].Data(),i-1),
2693 ssbins,ssmin,ssmax,mbins,mmin,mmax);
2694 fhMCPi0MassM02Overlap0Match[j][i-1]->SetYTitle("M (GeV/c^{2})");
2695 fhMCPi0MassM02Overlap0Match[j][i-1]->SetXTitle("#lambda_{0}^{2}");
2696 outputContainer->Add(fhMCPi0MassM02Overlap0Match[j][i-1]) ;
2698 fhMCPi0MassM02Overlap1Match[j][i-1] = new TH2F(Form("hMCPi0MassM02Overlap1NLocMax%sEbin%dMatched",snlm[j].Data(),i-1),
2699 Form("Overlap 1, Mass vs #lambda_{0}^{2}, NLM=%s, E bin %d, Track Matched",snlm[j].Data(),i-1),
2700 ssbins,ssmin,ssmax,mbins,mmin,mmax);
2701 fhMCPi0MassM02Overlap1Match[j][i-1]->SetYTitle("M (GeV/c^{2})");
2702 fhMCPi0MassM02Overlap1Match[j][i-1]->SetXTitle("#lambda_{0}^{2}");
2703 outputContainer->Add(fhMCPi0MassM02Overlap1Match[j][i-1]) ;
2705 fhMCPi0MassM02OverlapNMatch[j][i-1] = new TH2F(Form("hMCPi0MassM02OverlapNNLocMax%sEbin%dMatched",snlm[j].Data(),i-1),
2706 Form("Overlap N, Mass vs #lambda_{0}^{2}, NLM=%s, E bin %d, Track Matched",snlm[j].Data(),i-1),
2707 ssbins,ssmin,ssmax,mbins,mmin,mmax);
2708 fhMCPi0MassM02OverlapNMatch[j][i-1]->SetYTitle("M (GeV/c^{2})");
2709 fhMCPi0MassM02OverlapNMatch[j][i-1]->SetXTitle("#lambda_{0}^{2}");
2710 outputContainer->Add(fhMCPi0MassM02OverlapNMatch[j][i-1]) ;
2718 fhMCPi0HighNLMPair = new TH2F("hMCPi0HighNLMPair","NLM vs E for merged pi0 cluster, high energy NLM pair are decays",
2719 nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
2720 fhMCPi0HighNLMPair ->SetYTitle("N maxima");
2721 fhMCPi0HighNLMPair ->SetXTitle("E (GeV)");
2722 outputContainer->Add(fhMCPi0HighNLMPair) ;
2724 fhMCPi0LowNLMPair = new TH2F("hMCPi0LowNLMPair","NLM vs E for merged pi0 cluster, lower energy NLM pair are decays",
2725 nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
2726 fhMCPi0LowNLMPair ->SetYTitle("N maxima");
2727 fhMCPi0LowNLMPair ->SetXTitle("E (GeV)");
2728 outputContainer->Add(fhMCPi0LowNLMPair) ;
2730 fhMCPi0AnyNLMPair = new TH2F("hMCPi0AnyNLMPair","NLM vs E for merged pi0 cluster, both high and other energy NLM pair are decays",
2731 nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
2732 fhMCPi0AnyNLMPair ->SetYTitle("N maxima");
2733 fhMCPi0AnyNLMPair ->SetXTitle("E (GeV)");
2734 outputContainer->Add(fhMCPi0AnyNLMPair) ;
2736 fhMCPi0NoneNLMPair = new TH2F("hMCPi0NoneNLMPair","NLM vs E for merged pi0 cluster, no NLM pair are decays",
2737 nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
2738 fhMCPi0NoneNLMPair ->SetYTitle("N maxima");
2739 fhMCPi0NoneNLMPair ->SetXTitle("E (GeV)");
2740 outputContainer->Add(fhMCPi0NoneNLMPair) ;
2743 fhMCPi0HighNLMPairNoMCMatch = new TH2F("hMCPi0HighNLMPairNoMCMatch","NLM vs E for merged pi0 cluster, high energy NLM pair are decays",
2744 nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
2745 fhMCPi0HighNLMPairNoMCMatch ->SetYTitle("N maxima");
2746 fhMCPi0HighNLMPairNoMCMatch ->SetXTitle("E (GeV)");
2747 outputContainer->Add(fhMCPi0HighNLMPairNoMCMatch) ;
2749 fhMCPi0LowNLMPairNoMCMatch = new TH2F("hMCPi0LowNLMPairNoMCMatch","NLM vs E for merged pi0 cluster, lower energy NLM pair are decays",
2750 nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
2751 fhMCPi0LowNLMPairNoMCMatch ->SetYTitle("N maxima");
2752 fhMCPi0LowNLMPairNoMCMatch ->SetXTitle("E (GeV)");
2753 outputContainer->Add(fhMCPi0LowNLMPairNoMCMatch) ;
2755 fhMCPi0AnyNLMPairNoMCMatch = new TH2F("hMCPi0AnyNLMPairNoMCMatch","NLM vs E for merged pi0 cluster, both high and other energy NLM pair are decays",
2756 nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
2757 fhMCPi0AnyNLMPairNoMCMatch ->SetYTitle("N maxima");
2758 fhMCPi0AnyNLMPairNoMCMatch ->SetXTitle("E (GeV)");
2759 outputContainer->Add(fhMCPi0AnyNLMPairNoMCMatch) ;
2761 fhMCPi0NoneNLMPairNoMCMatch = new TH2F("hMCPi0NoneNLMPairNoMCMatch","NLM vs E for merged pi0 cluster, no NLM pair are decays",
2762 nptbins,ptmin,ptmax,nMaxBins,0,nMaxBins);
2763 fhMCPi0NoneNLMPairNoMCMatch ->SetYTitle("N maxima");
2764 fhMCPi0NoneNLMPairNoMCMatch ->SetXTitle("E (GeV)");
2765 outputContainer->Add(fhMCPi0NoneNLMPairNoMCMatch) ;
2768 fhMCEOverlapType = new TH2F("hMCEOverlapType","Kind of overlap particle, neutral clusters",
2769 nptbins,ptmin,ptmax,5,0,5);
2770 //fhMCEOverlapType ->SetYTitle("Overlap Type");
2771 fhMCEOverlapType->GetYaxis()->SetBinLabel(1 ,"#gamma");
2772 fhMCEOverlapType->GetYaxis()->SetBinLabel(2 ,"e^{#pm}");
2773 fhMCEOverlapType->GetYaxis()->SetBinLabel(3 ,"hadron^{#pm}");
2774 fhMCEOverlapType->GetYaxis()->SetBinLabel(4 ,"hadron^{0}");
2775 fhMCEOverlapType->GetYaxis()->SetBinLabel(5 ,"??");
2776 fhMCEOverlapType ->SetXTitle("Cluster E (GeV)");
2777 outputContainer->Add(fhMCEOverlapType) ;
2779 fhMCEOverlapTypeMatch = new TH2F("hMCEOverlapTypeMatched","Kind of overlap particle, charged clusters",
2780 nptbins,ptmin,ptmax,5,0,5);
2781 //fhMCEOverlapTypeMatch ->SetYTitle("Overlap Type");
2782 fhMCEOverlapTypeMatch->GetYaxis()->SetBinLabel(1 ,"#gamma");
2783 fhMCEOverlapTypeMatch->GetYaxis()->SetBinLabel(2 ,"e^{#pm}");
2784 fhMCEOverlapTypeMatch->GetYaxis()->SetBinLabel(3 ,"hadron^{#pm}");
2785 fhMCEOverlapTypeMatch->GetYaxis()->SetBinLabel(4 ,"hadron^{0}");
2786 fhMCEOverlapTypeMatch->GetYaxis()->SetBinLabel(5 ,"??");
2787 fhMCEOverlapTypeMatch->SetXTitle("Cluster E (GeV)");
2788 outputContainer->Add(fhMCEOverlapTypeMatch) ;
2790 }// MC analysis, check overlaps
2792 return outputContainer ;
2796 //_____________________________________________________________________________
2797 void AliAnaInsideClusterInvariantMass::GetMCIndex(AliVCluster* cluster, Int_t & mcindex)
2800 // Assign mc index depending on MC bit set, to be used in histograms arrays
2802 if(!IsDataMC()) return;
2804 Int_t tag = GetMCAnalysisUtils()->CheckOrigin(cluster->GetLabels(),cluster->GetNLabels(), GetReader());
2806 if ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0) &&
2807 !GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion)) mcindex = kmcPi0;
2808 else if ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0) ) mcindex = kmcPi0Conv;
2809 else if ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEta) ) mcindex = kmcEta;
2810 else if ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton) &&
2811 !GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion)) mcindex = kmcPhoton;
2812 else if ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton) &&
2813 GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion)) mcindex = kmcConversion;
2814 else if ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCElectron)) mcindex = kmcElectron;
2815 else mcindex = kmcHadron;
2820 //______________________________________________________________________________________________________________________
2821 void AliAnaInsideClusterInvariantMass::GetMCPrimaryKine(AliVCluster* cluster, const Int_t mcindex, const Bool_t matched,
2822 Float_t & eprim, Float_t & asymGen, Int_t & noverlaps )
2824 // Check origin of the candidates, get primary kinematics if overlapped meson decay
2826 if(!IsDataMC()) return ;
2829 Int_t mcLabel = cluster->GetLabel();
2831 TLorentzVector primary = GetMCAnalysisUtils()->GetMother(mcLabel,GetReader(),ok);
2832 eprim = primary.E();
2834 if(mcindex == kmcPi0 || mcindex == kmcEta || mcindex == kmcPi0Conv)
2836 if(mcindex == kmcPi0 || mcindex == kmcPi0Conv)
2838 asymGen = TMath::Abs(GetMCAnalysisUtils()->GetMCDecayAsymmetryForPDG(mcLabel,111,GetReader(),ok));
2839 TLorentzVector grandmom = GetMCAnalysisUtils()->GetMotherWithPDG(mcLabel,111,GetReader(),ok);
2840 if(grandmom.E() > 0 && ok) eprim = grandmom.E();
2844 asymGen = TMath::Abs(GetMCAnalysisUtils()->GetMCDecayAsymmetryForPDG(mcLabel,221,GetReader(),ok));
2845 TLorentzVector grandmom = GetMCAnalysisUtils()->GetMotherWithPDG(mcLabel,221,GetReader(),ok);
2846 if(grandmom.E() > 0 && ok) eprim = grandmom.E();
2850 if(!fFillMCOverlapHisto) return;
2852 // Compare the primary depositing more energy with the rest,
2853 // if no photon/electron (conversion) or neutral meson as comon ancestor, consider it as other particle contributing
2854 Int_t ancPDG = 0, ancStatus = -1;
2855 TLorentzVector momentum; TVector3 prodVertex;
2858 for (UInt_t ilab = 1; ilab < cluster->GetNLabels(); ilab++ )
2860 ancLabel = GetMCAnalysisUtils()->CheckCommonAncestor(cluster->GetLabels()[0],cluster->GetLabels()[ilab],
2861 GetReader(),ancPDG,ancStatus,momentum,prodVertex);
2863 if(ancPDG!=22 && TMath::Abs(ancPDG)!=11 && ancPDG!=111 && ancPDG!=221)
2867 // What is the origin of the overlap?
2868 Bool_t mOK = 0, gOK = 0;
2869 Int_t mpdg = -999999, gpdg = -1;
2870 Int_t mstatus = -1, gstatus = -1;
2871 Int_t gLabel = -1, ggLabel = -1;
2872 TLorentzVector mother = GetMCAnalysisUtils()->GetMother (cluster->GetLabels()[ilab],GetReader(),mpdg,mstatus,mOK);
2873 TLorentzVector grandmother = GetMCAnalysisUtils()->GetGrandMother(cluster->GetLabels()[ilab],GetReader(),gpdg,gstatus,gOK, gLabel,ggLabel);
2875 //printf("Overlap!, mother pdg %d; grand mother pdg %d",mpdg,gpdg);
2877 if( ( mpdg == 22 || TMath::Abs(mpdg==11) ) &&
2878 ( gpdg == 22 || TMath::Abs(gpdg==11) ) &&
2881 Int_t label = gLabel;
2882 while( ( gpdg == 22 || TMath::Abs(gpdg==11) ) && gLabel >=0 )
2885 grandmother = GetMCAnalysisUtils()->GetGrandMother(label,GetReader(),gpdg,gstatus,ok, gLabel,ggLabel);
2890 //printf("; Final PDG %d\n",mpdg);
2891 Float_t histobin = -1;
2892 if (mpdg==22) histobin = 0.5;
2893 else if(TMath::Abs(mpdg)==11) histobin = 1.5;
2894 else if(mpdg==-999999) histobin = 4.5;
2896 Double_t charge = TDatabasePDG::Instance()->GetParticle(mpdg)->Charge();
2897 if(TMath::Abs(charge) > 0 ) histobin = 2.5;
2898 else histobin = 3.5;
2899 //printf("charge %f\n",charge);
2902 //printf("pdg = %d, histobin %2.1f\n",mpdg,histobin);
2905 if(matched)fhMCEOverlapType ->Fill(cluster->E(),histobin);
2906 else fhMCEOverlapTypeMatch->Fill(cluster->E(),histobin);
2913 //___________________________________________
2914 void AliAnaInsideClusterInvariantMass::Init()
2918 if(fCalorimeter == "PHOS" && !GetReader()->IsPHOSSwitchedOn() && NewOutputAOD())
2920 printf("AliAnaInsideClusterInvariantMass::Init() - !!STOP: You want to use PHOS in analysis but it is not read!! \n!!Check the configuration file!!\n");
2923 else if(fCalorimeter == "EMCAL" && !GetReader()->IsEMCALSwitchedOn() && NewOutputAOD())
2925 printf("AliAnaInsideClusterInvariantMass::Init() - !!STOP: You want to use EMCAL in analysis but it is not read!! \n!!Check the configuration file!!\n");
2929 if( GetReader()->GetDataType() == AliCaloTrackReader::kMC )
2931 printf("AliAnaInsideClusterInvariantMass::Init() - !!STOP: You want to use pure MC data!!\n");
2938 //_____________________________________________________
2939 void AliAnaInsideClusterInvariantMass::InitParameters()
2941 //Initialize the parameters of the analysis.
2942 AddToHistogramsName("AnaPi0InsideClusterInvariantMass_");
2944 fCalorimeter = "EMCAL" ;
2955 fSSWeight[0] = 4.6; fSSWeight[1] = 4.7; fSSWeight[2] = 4.8; fSSWeight[3] = 4.9; fSSWeight[4] = 5.0;
2956 fSSWeight[5] = 5.1; fSSWeight[6] = 5.2; fSSWeight[7] = 5.3; fSSWeight[8] = 5.4; fSSWeight[9] = 5.5;
2959 fSSECellCut[0] = 0.16; fSSECellCut[1] = 0.18; fSSECellCut[2] = 0.2; fSSECellCut[3] = 0.22; fSSECellCut[4] = 0.24;
2960 fSSECellCut[5] = 0.26; fSSECellCut[6] = 0.28; fSSECellCut[7] = 0.3; fSSECellCut[8] = 0.32; fSSECellCut[9] = 0.34;
2965 //__________________________________________________________________
2966 void AliAnaInsideClusterInvariantMass::MakeAnalysisFillHistograms()
2968 //Search for pi0 in fCalorimeter with shower shape analysis
2970 TObjArray * pl = 0x0;
2971 AliVCaloCells* cells = 0x0;
2973 //Select the Calorimeter of the photon
2974 if(fCalorimeter == "PHOS")
2976 pl = GetPHOSClusters();
2977 cells = GetPHOSCells();
2979 else if (fCalorimeter == "EMCAL")
2981 pl = GetEMCALClusters();
2982 cells = GetEMCALCells();
2987 Info("MakeAnalysisFillHistograms","TObjArray with %s clusters is NULL!\n",fCalorimeter.Data());
2991 if(fCalorimeter == "PHOS") return; // Not implemented for PHOS yet
2993 for(Int_t icluster = 0; icluster < pl->GetEntriesFast(); icluster++)
2995 AliVCluster * cluster = (AliVCluster*) (pl->At(icluster));
2997 //-------------------------------------------
2998 // Get cluster parameters, do some rejection
2999 //-------------------------------------------
3001 Float_t en = cluster->E();
3002 Float_t l0 = cluster->GetM02();
3003 Int_t nc = cluster->GetNCells();
3004 Float_t bd = cluster->GetDistanceToBadChannel() ;
3006 //If too small or big E or low number of cells, or close to a bad channel skip it
3008 if( en < GetMinEnergy() || en > GetMaxEnergy() || nc < fMinNCells || bd < fMinBadDist) continue ;
3010 // Track-cluster matching
3012 Bool_t matched = IsTrackMatched(cluster,GetReader()->GetInputEvent());
3013 if(!fFillTMHisto && matched) continue ;
3015 // Get cluster angles
3018 cluster->GetMomentum(lv, GetVertex(0));
3019 Float_t eta = lv.Eta();
3020 Float_t phi = lv.Phi();
3021 if(phi<0) phi=+TMath::TwoPi();
3023 //printf("en %2.2f, GetMinEnergy() %2.2f, GetMaxEnergy() %2.2f, nc %d, fMinNCells %d, bd %2.2f, fMinBadDist %2.2f\n",
3024 // en,GetMinEnergy(), GetMaxEnergy(), nc, fMinNCells, bd, fMinBadDist);
3026 // Get PID, N local maximum, *** split cluster ***
3029 Double_t mass = 0., angle = 0.;
3030 TLorentzVector l1, l2;
3031 Int_t absId1 = -1; Int_t absId2 = -1;
3033 Int_t pidTag = GetCaloPID()->GetIdentifiedParticleTypeFromClusterSplitting(cluster,cells,GetCaloUtils(),
3034 GetVertex(0), nMax, mass, angle,
3035 l1,l2,absId1,absId2);
3039 printf("AliAnaInsideClusterInvariantMass::MakeAnalysisFillHistograms() - No local maximum found! It did not pass CaloPID selection criteria \n");
3044 // Set some index for array histograms
3047 if (nMax == 1) inlm = 0;
3048 else if(nMax == 2) inlm = 1;
3049 else if(nMax > 2) inlm = 2;
3050 else printf("Wrong N local maximum -> %d, n cells in cluster %d \n",nMax,nc);
3052 // Get sub-cluster parameters
3054 Float_t e1 = l1.Energy();
3055 Float_t e2 = l2.Energy();
3057 Double_t tof1 = cells->GetCellTime(absId1);
3058 GetCaloUtils()->RecalibrateCellTime(tof1, fCalorimeter, absId1,GetReader()->GetInputEvent()->GetBunchCrossNumber());
3061 Double_t tof2 = cells->GetCellTime(absId2);
3062 GetCaloUtils()->RecalibrateCellTime(tof2, fCalorimeter, absId2,GetReader()->GetInputEvent()->GetBunchCrossNumber());
3065 Double_t t12diff = tof1-tof2;
3067 Float_t splitFrac = (e1+e2)/en;
3070 if(e1+e2>0) asym = (e1-e2)/(e1+e2);
3075 if(en > 8 && en <= 12) ebin = 0;
3076 if(en > 12 && en <= 16) ebin = 1;
3077 if(en > 16 && en <= 20) ebin = 2;
3078 if(en > 20) ebin = 3;
3083 //Int_t mcLabel = cluster->GetLabel();
3084 GetMCIndex(cluster,mcindex);
3086 // MC primary kine, generation fractions
3089 Float_t asymGen = -2;
3090 Int_t noverlaps = 0;
3091 GetMCPrimaryKine(cluster,mcindex,matched,eprim,asymGen,noverlaps);
3095 // For cluster with MC pi0 and more than 1 maxima
3096 CheckLocalMaximaMCOrigin(cluster, mcindex);
3102 fhNLocMax[0][matched]->Fill(en,nMax);
3104 fhNLocMax[mcindex][matched]->Fill(en,nMax);
3108 fhM02NLocMax1[0][matched]->Fill(en,l0) ;
3109 fhSplitEFractionNLocMax1[0][matched]->Fill(en,splitFrac) ;
3113 fhM02NLocMax1[mcindex][matched]->Fill(en,l0) ;
3114 fhSplitEFractionNLocMax1[mcindex][matched]->Fill(en,splitFrac) ;
3119 fhMassM02NLocMax1[0][matched]->Fill(l0, mass);
3120 if( IsDataMC() ) fhMassM02NLocMax1[mcindex][matched]->Fill(l0, mass);
3122 fhSplitEFractionvsAsyNLocMax1[matched]->Fill(asym,splitFrac) ;
3123 if(!matched)fhClusterEtaPhiNLocMax1->Fill(eta,phi);
3128 else if( nMax == 2 )
3130 fhM02NLocMax2[0][matched]->Fill(en,l0) ;
3131 fhSplitEFractionNLocMax2[0][matched]->Fill(en,splitFrac) ;
3135 fhM02NLocMax2[mcindex][matched]->Fill(en,l0) ;
3136 fhSplitEFractionNLocMax2[mcindex][matched]->Fill(en,splitFrac) ;
3141 fhMassM02NLocMax2[0][matched]->Fill(l0, mass );
3142 if( IsDataMC() ) fhMassM02NLocMax2[mcindex][matched]->Fill(l0,mass);
3144 fhSplitEFractionvsAsyNLocMax2[matched]->Fill(asym,splitFrac) ;
3145 if(!matched)fhClusterEtaPhiNLocMax2->Fill(eta,phi);
3148 else if( nMax >= 3 )
3150 fhM02NLocMaxN[0][matched]->Fill(en,l0) ;
3151 fhSplitEFractionNLocMaxN[0][matched]->Fill(en,splitFrac) ;
3155 fhM02NLocMaxN[mcindex][matched]->Fill(en,l0) ;
3156 fhSplitEFractionNLocMaxN[mcindex][matched]->Fill(en,splitFrac) ;
3162 fhMassM02NLocMaxN[0][matched]->Fill(l0,mass);
3163 if( IsDataMC() ) fhMassM02NLocMaxN[mcindex][matched]->Fill(l0,mass);
3165 fhSplitEFractionvsAsyNLocMaxN[matched]->Fill(asym,splitFrac) ;
3166 if(!matched)fhClusterEtaPhiNLocMaxN->Fill(eta,phi);
3172 FillTrackMatchingHistograms(cluster,nMax,mcindex);
3176 FillSSExtraHistograms(cluster, nMax, matched,mcindex,mass,ebin) ;
3180 FillMCHistograms(en,e1,e2,ebin,mcindex,l0,mass,
3181 nMax,matched,splitFrac, asym, eprim,asymGen);
3185 FillMCOverlapHistograms(en,mass,l0,inlm,ebin,matched,mcindex,noverlaps);
3189 if(!matched) FillEBinHistograms(ebin,nMax,mcindex,splitFrac,mass,asym,l0);
3191 //---------------------------------------------------------------------
3192 // From here only if M02 is large but not too large
3193 // or more strict cuts, fill histograms
3194 //---------------------------------------------------------------------
3196 if( l0 < fM02MinCut || l0 > fM02MaxCut ) continue ;
3198 FillAngleHistograms(matched,nMax,en,angle,mass);
3200 Bool_t m02OK = GetCaloPID()->IsInPi0M02Range(en,l0,nMax);
3201 Bool_t asyOK = GetCaloPID()->IsInPi0SplitAsymmetryRange(en,asym,nMax);
3203 Float_t efrac = eprim/en;
3204 Float_t efracSplit = 0;
3205 if(e1+e2 > 0) efracSplit = eprim/(e1+e2);
3207 Float_t cent = GetEventCentrality();
3208 Float_t evp = GetEventPlaneAngle();
3210 fhNLocMaxM02Cut[0][matched]->Fill(en,nMax);
3211 if(IsDataMC()) fhNLocMaxM02Cut[mcindex][matched]->Fill(en,nMax);
3213 Float_t splitFracMin = GetCaloPID()->GetSplitEnergyFractionMinimum(inlm) ;
3217 fhMassNLocMax1[0][matched]->Fill(en,mass );
3218 fhAsymNLocMax1[0][matched]->Fill(en,asym );
3220 // Effect of cuts in mass histograms
3226 fhMassM02CutNLocMax1->Fill(en,mass);
3227 fhAsymM02CutNLocMax1->Fill(en,asym );
3228 if(splitFrac > splitFracMin) fhMassSplitECutNLocMax1->Fill(en,mass );
3234 fhSplitEFractionAfterCutsNLocMax1[0][matched]->Fill(en,splitFrac);
3235 if(splitFrac > splitFracMin) fhMassAfterCutsNLocMax1[0][matched]->Fill(en,mass);
3237 if(!matched && IsDataMC() && fFillMCHisto && mcindex==kmcPi0)
3239 fhMCGenFracAfterCutsNLocMax1MCPi0 ->Fill(en , efrac );
3240 fhMCGenSplitEFracAfterCutsNLocMax1MCPi0->Fill(en , efracSplit);
3244 if (pidTag==AliCaloPID::kPhoton)
3246 fhM02ConNLocMax1 [0][matched]->Fill(en,l0);
3247 fhMassConNLocMax1[0][matched]->Fill(en,mass);
3248 fhAsyConNLocMax1 [0][matched]->Fill(en,asym);
3250 else if(pidTag==AliCaloPID::kPi0 )
3252 fhM02Pi0NLocMax1[0][matched]->Fill(en,l0);
3253 fhMassPi0NLocMax1[0][matched]->Fill(en,mass);
3254 fhAsyPi0NLocMax1[0][matched]->Fill(en,asym);
3255 fhCentralityPi0NLocMax1[0][matched]->Fill(en,cent) ;
3259 fhEventPlanePi0NLocMax1->Fill(en,evp) ;
3260 if(en > fHistoECut)fhPi0EtaPhiNLocMax1->Fill(eta,phi);
3261 FillSSWeightHistograms(cluster, 0, absId1, absId2);
3262 fhPi0EPairDiffTimeNLM1->Fill(e1+e2,t12diff);
3265 else if(pidTag==AliCaloPID::kEta)
3267 fhM02EtaNLocMax1 [0][matched]->Fill(en,l0);
3268 fhMassEtaNLocMax1[0][matched]->Fill(en,mass);
3269 fhAsyEtaNLocMax1 [0][matched]->Fill(en,asym);
3270 fhCentralityEtaNLocMax1[0][matched]->Fill(en,cent) ;
3274 fhEventPlaneEtaNLocMax1->Fill(en,evp) ;
3275 if(en > fHistoECut)fhEtaEtaPhiNLocMax1->Fill(eta,phi);
3276 fhEtaEPairDiffTimeNLM1->Fill(e1+e2,t12diff);
3283 fhMassNLocMax2[0][matched]->Fill(en,mass );
3284 fhAsymNLocMax2[0][matched]->Fill(en,asym );
3286 // Effect of cuts in mass histograms
3292 fhMassM02CutNLocMax2->Fill(en,mass);
3293 fhAsymM02CutNLocMax2->Fill(en,asym );
3294 if(splitFrac > splitFracMin) fhMassSplitECutNLocMax2->Fill(en,mass );
3300 fhSplitEFractionAfterCutsNLocMax2[0][matched]->Fill(en,splitFrac);
3301 if(splitFrac >splitFracMin) fhMassAfterCutsNLocMax2[0][matched]->Fill(en,mass);
3303 if(!matched && IsDataMC() && fFillMCHisto && mcindex==kmcPi0)
3306 fhMCGenFracAfterCutsNLocMax2MCPi0 ->Fill(en , efrac );
3307 fhMCGenSplitEFracAfterCutsNLocMax2MCPi0->Fill(en , efracSplit);
3311 if (pidTag==AliCaloPID::kPhoton)
3313 fhM02ConNLocMax2 [0][matched]->Fill(en,l0);
3314 fhMassConNLocMax2[0][matched]->Fill(en,mass);
3315 fhAsyConNLocMax2 [0][matched]->Fill(en,asym);
3317 else if(pidTag==AliCaloPID::kPi0 )
3319 fhM02Pi0NLocMax2 [0][matched]->Fill(en,l0);
3320 fhMassPi0NLocMax2[0][matched]->Fill(en,mass);
3321 fhAsyPi0NLocMax2 [0][matched]->Fill(en,asym);
3322 fhCentralityPi0NLocMax2[0][matched]->Fill(en,cent) ;
3326 fhEventPlanePi0NLocMax2->Fill(en,evp) ;
3327 if(en > fHistoECut)fhPi0EtaPhiNLocMax2->Fill(eta,phi);
3328 FillSSWeightHistograms(cluster, 1, absId1, absId2);
3329 fhPi0EPairDiffTimeNLM2->Fill(e1+e2,t12diff);
3332 else if(pidTag==AliCaloPID::kEta)
3334 fhM02EtaNLocMax2 [0][matched]->Fill(en,l0);
3335 fhMassEtaNLocMax2[0][matched]->Fill(en,mass);
3336 fhAsyEtaNLocMax2 [0][matched]->Fill(en,asym);
3337 fhCentralityEtaNLocMax2[0][matched]->Fill(en,cent) ;
3341 fhEventPlaneEtaNLocMax2->Fill(en,evp) ;
3342 if(en > fHistoECut)fhEtaEtaPhiNLocMax2->Fill(eta,phi);
3343 fhEtaEPairDiffTimeNLM2->Fill(e1+e2,t12diff);
3350 fhMassNLocMaxN[0][matched]->Fill(en,mass);
3351 fhAsymNLocMaxN[0][matched]->Fill(en,asym);
3353 // Effect of cuts in mass histograms
3358 fhMassM02CutNLocMaxN->Fill(en,mass);
3359 fhAsymM02CutNLocMaxN->Fill(en,asym );
3360 if(splitFrac > splitFracMin)fhMassSplitECutNLocMaxN->Fill(en,mass );
3366 fhSplitEFractionAfterCutsNLocMaxN[0][matched]->Fill(en,splitFrac);
3367 if(splitFrac > splitFracMin) fhMassAfterCutsNLocMaxN[0][matched]->Fill(en,mass);
3369 if(!matched && IsDataMC() && fFillMCHisto && mcindex==kmcPi0)
3371 fhMCGenFracAfterCutsNLocMaxNMCPi0 ->Fill(en , efrac );
3372 fhMCGenSplitEFracAfterCutsNLocMaxNMCPi0->Fill(en , efracSplit);
3376 if (pidTag==AliCaloPID::kPhoton)
3378 fhM02ConNLocMaxN [0][matched]->Fill(en,l0);
3379 fhMassConNLocMaxN[0][matched]->Fill(en,mass);
3380 fhAsyConNLocMaxN [0][matched]->Fill(en,asym);
3382 else if(pidTag==AliCaloPID::kPi0 )
3384 fhM02Pi0NLocMaxN [0][matched]->Fill(en,l0);
3385 fhMassPi0NLocMaxN[0][matched]->Fill(en,mass);
3386 fhAsyPi0NLocMaxN [0][matched]->Fill(en,asym);
3387 fhCentralityPi0NLocMaxN[0][matched]->Fill(en,cent) ;
3391 fhEventPlanePi0NLocMaxN->Fill(en,evp) ;
3392 if(en > fHistoECut)fhPi0EtaPhiNLocMaxN->Fill(eta,phi);
3393 FillSSWeightHistograms(cluster, 2, absId1, absId2);
3394 fhPi0EPairDiffTimeNLMN->Fill(e1+e2,t12diff);
3397 else if(pidTag==AliCaloPID::kEta)
3399 fhM02EtaNLocMaxN [0][matched]->Fill(en,l0);
3400 fhMassEtaNLocMaxN[0][matched]->Fill(en,mass);
3401 fhAsyEtaNLocMaxN [0][matched]->Fill(en,asym);
3402 fhCentralityEtaNLocMaxN[0][matched]->Fill(en,cent) ;
3406 fhEventPlaneEtaNLocMaxN->Fill(en,evp) ;
3407 if(en > fHistoECut)fhEtaEtaPhiNLocMaxN->Fill(eta,phi);
3408 fhEtaEPairDiffTimeNLMN->Fill(e1+e2,t12diff);
3417 fhMassNLocMax1[mcindex][matched]->Fill(en,mass);
3418 fhAsymNLocMax1[mcindex][matched]->Fill(en,asym);
3422 fhSplitEFractionAfterCutsNLocMax1[mcindex][matched]->Fill(en,splitFrac);
3423 if(splitFrac > splitFracMin)
3424 fhMassAfterCutsNLocMax1[mcindex][matched]->Fill(en,mass);
3427 if (pidTag==AliCaloPID::kPhoton) { fhM02ConNLocMax1[mcindex][matched]->Fill(en,l0); fhMassConNLocMax1[mcindex][matched]->Fill(en,mass); fhAsyConNLocMax1[mcindex][matched]->Fill(en,asym); }
3428 else if(pidTag==AliCaloPID::kPi0 ) { fhM02Pi0NLocMax1[mcindex][matched]->Fill(en,l0); fhMassPi0NLocMax1[mcindex][matched]->Fill(en,mass); fhAsyPi0NLocMax1[mcindex][matched]->Fill(en,asym); }
3429 else if(pidTag==AliCaloPID::kEta ) { fhM02EtaNLocMax1[mcindex][matched]->Fill(en,l0); fhMassEtaNLocMax1[mcindex][matched]->Fill(en,mass); fhAsyEtaNLocMax1[mcindex][matched]->Fill(en,asym); }
3431 if (pidTag==AliCaloPID::kPi0) fhCentralityPi0NLocMax1[mcindex][matched]->Fill(en,cent) ;
3432 else if(pidTag==AliCaloPID::kEta) fhCentralityEtaNLocMax1[mcindex][matched]->Fill(en,cent) ;
3436 fhMassNLocMax2[mcindex][matched]->Fill(en,mass);
3437 fhAsymNLocMax2[mcindex][matched]->Fill(en,asym);
3441 fhSplitEFractionAfterCutsNLocMax2[mcindex][matched]->Fill(en,splitFrac);
3442 if(splitFrac >splitFracMin)
3443 fhMassAfterCutsNLocMax2[mcindex][matched]->Fill(en,mass);
3446 if (pidTag==AliCaloPID::kPhoton) { fhM02ConNLocMax2[mcindex][matched]->Fill(en,l0); fhMassConNLocMax2[mcindex][matched]->Fill(en,mass); fhAsyConNLocMax2[mcindex][matched]->Fill(en,asym); }
3447 else if(pidTag==AliCaloPID::kPi0 ) { fhM02Pi0NLocMax2[mcindex][matched]->Fill(en,l0); fhMassPi0NLocMax2[mcindex][matched]->Fill(en,mass); fhAsyPi0NLocMax2[mcindex][matched]->Fill(en,asym); }
3448 else if(pidTag==AliCaloPID::kEta ) { fhM02EtaNLocMax2[mcindex][matched]->Fill(en,l0); fhMassEtaNLocMax2[mcindex][matched]->Fill(en,mass); fhAsyEtaNLocMax2[mcindex][matched]->Fill(en,asym); }
3450 if (pidTag==AliCaloPID::kPi0) fhCentralityPi0NLocMax2[mcindex][matched]->Fill(en,cent) ;
3451 else if(pidTag==AliCaloPID::kEta) fhCentralityEtaNLocMax2[mcindex][matched]->Fill(en,cent) ;
3456 fhMassNLocMaxN[mcindex][matched]->Fill(en,mass);
3457 fhAsymNLocMaxN[mcindex][matched]->Fill(en,asym);
3461 fhSplitEFractionAfterCutsNLocMaxN[mcindex][matched]->Fill(en,splitFrac);
3462 if(splitFrac > splitFracMin )
3463 fhMassAfterCutsNLocMaxN[mcindex][matched]->Fill(en,mass);
3466 if (pidTag==AliCaloPID::kPhoton) { fhM02ConNLocMaxN[mcindex][matched]->Fill(en,l0); fhMassConNLocMaxN[mcindex][matched]->Fill(en,mass); fhAsyConNLocMaxN[mcindex][matched]->Fill(en,asym); }
3467 else if(pidTag==AliCaloPID::kPi0 ) { fhM02Pi0NLocMaxN[mcindex][matched]->Fill(en,l0); fhMassPi0NLocMaxN[mcindex][matched]->Fill(en,mass); fhAsyPi0NLocMaxN[mcindex][matched]->Fill(en,asym); }
3468 else if(pidTag==AliCaloPID::kEta ) { fhM02EtaNLocMaxN[mcindex][matched]->Fill(en,l0); fhMassEtaNLocMaxN[mcindex][matched]->Fill(en,mass); fhAsyEtaNLocMaxN[mcindex][matched]->Fill(en,asym); }
3470 if (pidTag==AliCaloPID::kPi0) fhCentralityPi0NLocMaxN[mcindex][matched]->Fill(en,cent) ;
3471 else if(pidTag==AliCaloPID::kEta) fhCentralityEtaNLocMaxN[mcindex][matched]->Fill(en,cent) ;
3474 }//Work with MC truth first
3478 if(GetDebug() > 1) printf("AliAnaInsideClusterInvariantMass::MakeAnalysisFillHistograms() - END \n");
3482 //______________________________________________________________________
3483 void AliAnaInsideClusterInvariantMass::Print(const Option_t * opt) const
3485 //Print some relevant parameters set for the analysis
3489 printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
3490 AliAnaCaloTrackCorrBaseClass::Print("");
3491 printf("Calorimeter = %s\n", fCalorimeter.Data()) ;
3492 if(GetCaloUtils()) printf("Loc. Max. E > %2.2f\n", GetCaloUtils()->GetLocalMaximaCutE());
3493 if(GetCaloUtils()) printf("Loc. Max. E Diff > %2.2f\n", GetCaloUtils()->GetLocalMaximaCutEDiff());
3494 printf("Min. N Cells =%d \n", fMinNCells) ;
3495 printf("Min. Dist. to Bad =%1.1f \n", fMinBadDist) ;
3496 printf("%2.2f < lambda_0^2 <%2.2f \n",fM02MinCut,fM02MaxCut);
3497 if(fFillSSWeightHisto) printf(" N w %d - N e cut %d \n",fSSWeightN,fSSECellCutN);
3504 //___________________________________________________________________________________________________________________
3505 void AliAnaInsideClusterInvariantMass::RecalculateClusterShowerShapeParametersWithCellCut(const AliEMCALGeometry * geom,
3506 AliVCaloCells* cells,
3507 AliVCluster * cluster,
3508 Float_t & l0, Float_t & l1,
3509 Float_t & disp, Float_t & dEta, Float_t & dPhi,
3510 Float_t & sEta, Float_t & sPhi, Float_t & sEtaPhi,
3513 // Calculates new center of gravity in the local EMCAL-module coordinates
3514 // and tranfers into global ALICE coordinates
3515 // Calculates Dispersion and main axis
3519 AliInfo("Cluster pointer null!");
3523 Double_t eCell = 0.;
3524 Float_t fraction = 1.;
3525 Float_t recalFactor = 1.;
3533 Double_t etai = -1.;
3534 Double_t phii = -1.;
3539 Double_t etaMean = 0.;
3540 Double_t phiMean = 0.;
3542 //Loop on cells, calculate the cluster energy, in case a cut on cell energy is added
3543 // and to check if the cluster is between 2 SM in eta
3545 Bool_t shared = kFALSE;
3548 for(Int_t iDigit=0; iDigit < cluster->GetNCells(); iDigit++)
3550 //Get from the absid the supermodule, tower and eta/phi numbers
3551 geom->GetCellIndex(cluster->GetCellAbsId(iDigit),iSupMod,iTower,iIphi,iIeta);
3552 geom->GetCellPhiEtaIndexInSModule(iSupMod,iTower,iIphi,iIeta, iphi,ieta);
3554 //Check if there are cells of different SM
3555 if (iDigit == 0 ) iSM0 = iSupMod;
3556 else if(iSupMod!= iSM0) shared = kTRUE;
3558 //Get the cell energy, if recalibration is on, apply factors
3559 fraction = cluster->GetCellAmplitudeFraction(iDigit);
3560 if(fraction < 1e-4) fraction = 1.; // in case unfolding is off
3562 if(GetCaloUtils()->GetEMCALRecoUtils()->IsRecalibrationOn())
3564 recalFactor = GetCaloUtils()->GetEMCALRecoUtils()->GetEMCALChannelRecalibrationFactor(iSupMod,ieta,iphi);
3567 eCell = cells->GetCellAmplitude(cluster->GetCellAbsId(iDigit))*fraction*recalFactor;
3569 if(eCell > eCellMin) energy += eCell;
3573 //Loop on cells, get weighted parameters
3574 for(Int_t iDigit=0; iDigit < cluster->GetNCells(); iDigit++)
3576 //Get from the absid the supermodule, tower and eta/phi numbers
3577 geom->GetCellIndex(cluster->GetCellAbsId(iDigit),iSupMod,iTower,iIphi,iIeta);
3578 geom->GetCellPhiEtaIndexInSModule(iSupMod,iTower,iIphi,iIeta, iphi,ieta);
3580 //Get the cell energy, if recalibration is on, apply factors
3581 fraction = cluster->GetCellAmplitudeFraction(iDigit);
3582 if(fraction < 1e-4) fraction = 1.; // in case unfolding is off
3584 if(GetCaloUtils()->GetEMCALRecoUtils()->IsRecalibrationOn())
3586 recalFactor = GetCaloUtils()->GetEMCALRecoUtils()->GetEMCALChannelRecalibrationFactor(iSupMod,ieta,iphi);
3589 eCell = cells->GetCellAmplitude(cluster->GetCellAbsId(iDigit))*fraction*recalFactor;
3591 // In case of a shared cluster, index of SM in C side, columns start at 48 and ends at 48*2
3592 // C Side impair SM, nSupMod%2=1; A side pair SM, nSupMod%2=0
3593 if(shared && iSupMod%2) ieta+=AliEMCALGeoParams::fgkEMCALCols;
3595 if(energy > 0 && eCell > eCellMin)
3597 w = GetCaloUtils()->GetEMCALRecoUtils()->GetCellWeight(eCell,energy);
3599 //correct weight, ONLY in simulation
3600 w *= (1 - fWSimu * w );
3602 etai=(Double_t)ieta;
3603 phii=(Double_t)iphi;
3610 sEta += w * etai * etai ;
3611 etaMean += w * etai ;
3612 sPhi += w * phii * phii ;
3613 phiMean += w * phii ;
3614 sEtaPhi += w * etai * phii ;
3617 else if(energy == 0 || (eCellMin <0.01 && eCell == 0)) AliError(Form("Wrong energy %f and/or amplitude %f\n", eCell, energy));
3621 //Normalize to the weight
3628 AliError(Form("Wrong weight %f\n", wtot));
3630 //Calculate dispersion
3631 for(Int_t iDigit=0; iDigit < cluster->GetNCells(); iDigit++)
3633 //Get from the absid the supermodule, tower and eta/phi numbers
3634 geom->GetCellIndex(cluster->GetCellAbsId(iDigit),iSupMod,iTower,iIphi,iIeta);
3635 geom->GetCellPhiEtaIndexInSModule(iSupMod,iTower,iIphi,iIeta, iphi,ieta);
3637 //Get the cell energy, if recalibration is on, apply factors
3638 fraction = cluster->GetCellAmplitudeFraction(iDigit);
3639 if(fraction < 1e-4) fraction = 1.; // in case unfolding is off
3640 if (GetCaloUtils()->GetEMCALRecoUtils()->IsRecalibrationOn())
3642 recalFactor = GetCaloUtils()->GetEMCALRecoUtils()->GetEMCALChannelRecalibrationFactor(iSupMod,ieta,iphi);
3645 eCell = cells->GetCellAmplitude(cluster->GetCellAbsId(iDigit))*fraction*recalFactor;
3647 // In case of a shared cluster, index of SM in C side, columns start at 48 and ends at 48*2
3648 // C Side impair SM, nSupMod%2=1; A side pair SM, nSupMod%2=0
3649 if(shared && iSupMod%2) ieta+=AliEMCALGeoParams::fgkEMCALCols;
3651 if(energy > 0 && eCell > eCellMin)
3653 w = GetCaloUtils()->GetEMCALRecoUtils()->GetCellWeight(eCell,energy);
3655 //correct weight, ONLY in simulation
3656 w *= (1 - fWSimu * w );
3658 etai=(Double_t)ieta;
3659 phii=(Double_t)iphi;
3662 disp += w *((etai-etaMean)*(etai-etaMean)+(phii-phiMean)*(phii-phiMean));
3663 dEta += w * (etai-etaMean)*(etai-etaMean) ;
3664 dPhi += w * (phii-phiMean)*(phii-phiMean) ;
3667 else if(energy == 0 || (eCellMin <0.01 && eCell == 0)) AliError(Form("Wrong energy %f and/or amplitude %f\n", eCell, energy));
3670 //Normalize to the weigth and set shower shape parameters
3671 if (wtot > 0 && nstat > 1)
3680 sEta -= etaMean * etaMean ;
3681 sPhi -= phiMean * phiMean ;
3682 sEtaPhi -= etaMean * phiMean ;
3684 l0 = (0.5 * (sEta + sPhi) + TMath::Sqrt( 0.25 * (sEta - sPhi) * (sEta - sPhi) + sEtaPhi * sEtaPhi ));
3685 l1 = (0.5 * (sEta + sPhi) - TMath::Sqrt( 0.25 * (sEta - sPhi) * (sEta - sPhi) + sEtaPhi * sEtaPhi ));
3691 dEta = 0. ; dPhi = 0. ; disp = 0. ;
3692 sEta = 0. ; sPhi = 0. ; sEtaPhi = 0. ;