]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGGA/CaloTrackCorrelations/AliAnaPi0EbE.cxx
update again the list of parameters to pass to the cuts container
[u/mrichter/AliRoot.git] / PWGGA / CaloTrackCorrelations / AliAnaPi0EbE.cxx
CommitLineData
477d6cee 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
21a4b1c0 8 * documentation strictly for non-commercial purposes is hereby granted *
477d6cee 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 **************************************************************************/
477d6cee 15
16//_________________________________________________________________________
17// Class for the analysis of high pT pi0 event by event
09273901 18// Pi0/Eta identified by one of the following:
477d6cee 19// -Invariant mass of 2 cluster in calorimeter
20// -Shower shape analysis in calorimeter
21a4b1c0 21// -Invariant mass of one cluster in calorimeter and one photon reconstructed in CTS
477d6cee 22//
23// -- Author: Gustavo Conesa (LNF-INFN) & Raphaelle Ichou (SUBATECH)
24//////////////////////////////////////////////////////////////////////////////
85c4406e 25
26
27// --- ROOT system ---
477d6cee 28#include <TList.h>
29#include <TClonesArray.h>
0c1383b5 30#include <TObjString.h>
477d6cee 31
85c4406e 32// --- Analysis system ---
33#include "AliAnaPi0EbE.h"
477d6cee 34#include "AliCaloTrackReader.h"
35#include "AliIsolationCut.h"
36#include "AliNeutralMesonSelection.h"
37#include "AliCaloPID.h"
38#include "AliMCAnalysisUtils.h"
477d6cee 39#include "AliStack.h"
ff45398a 40#include "AliFiducialCut.h"
477d6cee 41#include "TParticle.h"
0ae57829 42#include "AliVCluster.h"
2ad19c3d 43#include "AliESDEvent.h"
477d6cee 44#include "AliAODEvent.h"
591cc579 45#include "AliAODMCParticle.h"
477d6cee 46
47ClassImp(AliAnaPi0EbE)
34c16486 48
85c4406e 49//____________________________
50AliAnaPi0EbE::AliAnaPi0EbE() :
3a4c49b7 51AliAnaCaloTrackCorrBaseClass(), fAnaType(kIMCalo), fCalorimeter(""),
52fMinDist(0.),fMinDist2(0.), fMinDist3(0.),
53fNLMCutMin(-1), fNLMCutMax(10),
54fTimeCutMin(-10000), fTimeCutMax(10000),
85c4406e 55fRejectTrackMatch(kTRUE),
56fFillPileUpHistograms(0),
3a4c49b7 57fFillWeightHistograms(kFALSE), fFillTMHisto(0),
58fFillSelectClHisto(0), fFillOnlySimpleSSHisto(1), fFillEMCALBCHistograms(0),
85c4406e 59fInputAODGammaConvName(""),
9f48b3f0 60fCheckSplitDistToBad(0),
85c4406e 61// Histograms
3a4c49b7 62fhPt(0), fhE(0),
3a4c49b7 63fhPtEta(0), fhPtPhi(0), fhEtaPhi(0),
64fhEtaPhiEMCALBC0(0), fhEtaPhiEMCALBC1(0), fhEtaPhiEMCALBCN(0),
126b8c62 65fhTimeTriggerEMCALBC0UMReMatchOpenTime(0),
66fhTimeTriggerEMCALBC0UMReMatchCheckNeigh(0),
67fhTimeTriggerEMCALBC0UMReMatchBoth(0),
3a4c49b7 68fhPtCentrality(), fhPtEventPlane(0),
69fhPtReject(0), fhEReject(0),
08c09f10 70fhPtEtaReject(0), fhPtPhiReject(0), fhEtaPhiReject(0),
3a4c49b7 71fhMass(0), fhMassPt(0), fhMassSplitPt(0),
08c09f10 72fhSelectedMass(), fhSelectedMassPt(0), fhSelectedMassSplitPt(0),
3a4c49b7 73fhMassNoOverlap(0), fhMassPtNoOverlap(0), fhMassSplitPtNoOverlap(0),
74fhSelectedMassNoOverlap(0), fhSelectedMassPtNoOverlap(0), fhSelectedMassSplitPtNoOverlap(0),
1e90d4df 75fhMCPi0PtRecoPtPrim(0), fhMCEtaPtRecoPtPrim(0),
76fhMCPi0PtRecoPtPrimNoOverlap(0), fhMCEtaPtRecoPtPrimNoOverlap(0),
77fhMCPi0SplitPtRecoPtPrim(0), fhMCEtaSplitPtRecoPtPrim(0),
1253480f 78fhMCPi0SplitPtRecoPtPrimNoOverlap(0), fhMCEtaSplitPtRecoPtPrimNoOverlap(0),
79fhMCPi0SelectedPtRecoPtPrim(0), fhMCEtaSelectedPtRecoPtPrim(0),
80fhMCPi0SelectedPtRecoPtPrimNoOverlap(0), fhMCEtaSelectedPtRecoPtPrimNoOverlap(0),
81fhMCPi0SelectedSplitPtRecoPtPrim(0), fhMCEtaSelectedSplitPtRecoPtPrim(0),
82fhMCPi0SelectedSplitPtRecoPtPrimNoOverlap(0), fhMCEtaSelectedSplitPtRecoPtPrimNoOverlap(0),
3a4c49b7 83fhAsymmetry(0), fhSelectedAsymmetry(0),
84fhSplitE(0), fhSplitPt(0),
85fhSplitPtEta(0), fhSplitPtPhi(0),
85c4406e 86fhNLocMaxSplitPt(0),
3a4c49b7 87fhPtDecay(0), fhEDecay(0),
85c4406e 88// Shower shape histos
08c09f10 89fhPtDispersion(0), fhPtLambda0(0), fhPtLambda1(0),
90fhPtLambda0NoTRD(0), fhPtLambda0FracMaxCellCut(0),
91fhPtFracMaxCell(0), fhPtFracMaxCellNoTRD(0),
92fhPtNCells(0), fhPtTime(0), fhEPairDiffTime(0),
93fhPtDispEta(0), fhPtDispPhi(0),
94fhPtSumEta(0), fhPtSumPhi(0), fhPtSumEtaPhi(0),
95fhPtDispEtaPhiDiff(0), fhPtSphericity(0),
85c4406e 96
97// MC histos
3a4c49b7 98fhMCE(), fhMCPt(),
08c09f10 99fhMCPtPhi(), fhMCPtEta(),
3a4c49b7 100fhMCEReject(), fhMCPtReject(),
85c4406e 101fhMCPtCentrality(),
3a4c49b7 102fhMCPi0PtGenRecoFraction(0), fhMCEtaPtGenRecoFraction(0),
103fhMCPi0DecayPt(0), fhMCPi0DecayPtFraction(0),
104fhMCEtaDecayPt(0), fhMCEtaDecayPtFraction(0),
85c4406e 105fhMCOtherDecayPt(0),
3a4c49b7 106fhMassPairMCPi0(0), fhMassPairMCEta(0),
107fhAnglePairMCPi0(0), fhAnglePairMCEta(0),
4bbe6213 108fhMCPi0PtOrigin(0x0), fhMCEtaPtOrigin(0x0),
109fhMCPi0ProdVertex(0), fhMCEtaProdVertex(0),
4bbe6213 110
85c4406e 111// Weight studies
3a4c49b7 112fhECellClusterRatio(0), fhECellClusterLogRatio(0),
113fhEMaxCellClusterRatio(0), fhEMaxCellClusterLogRatio(0),
114fhTrackMatchedDEta(0), fhTrackMatchedDPhi(0), fhTrackMatchedDEtaDPhi(0),
115fhTrackMatchedDEtaPos(0), fhTrackMatchedDPhiPos(0), fhTrackMatchedDEtaDPhiPos(0),
116fhTrackMatchedDEtaNeg(0), fhTrackMatchedDPhiNeg(0), fhTrackMatchedDEtaDPhiNeg(0),
08c09f10 117fhTrackMatchedMCParticlePt(0),
3a4c49b7 118fhTrackMatchedMCParticleDEta(0), fhTrackMatchedMCParticleDPhi(0),
119fhdEdx(0), fhEOverP(0), fhEOverPNoTRD(0),
85c4406e 120// Number of local maxima in cluster
08c09f10 121fhNLocMaxPt(0), fhNLocMaxPtReject(0),
85c4406e 122// PileUp
3a4c49b7 123fhTimePtNoCut(0), fhTimePtSPD(0), fhTimePtSPDMulti(0),
85c4406e 124fhTimeNPileUpVertSPD(0), fhTimeNPileUpVertTrack(0),
125fhTimeNPileUpVertContributors(0),
126fhTimePileUpMainVertexZDistance(0), fhTimePileUpMainVertexZDiamond(0),
127fhPtNPileUpSPDVtx(0), fhPtNPileUpTrkVtx(0),
128fhPtNPileUpSPDVtxTimeCut(0), fhPtNPileUpTrkVtxTimeCut(0),
129fhPtNPileUpSPDVtxTimeCut2(0), fhPtNPileUpTrkVtxTimeCut2(0)
477d6cee 130{
131 //default ctor
132
34c16486 133 for(Int_t i = 0; i < 6; i++)
134 {
40d3ce60 135 fhMCE [i] = 0;
3455f821 136 fhMCPt [i] = 0;
08c09f10 137 fhMCPtPhi [i] = 0;
138 fhMCPtEta [i] = 0;
17f5b4b6 139 fhMCPtCentrality [i] = 0;
140
cfdf2b91 141 fhMCSplitE [i] = 0;
142 fhMCSplitPt [i] = 0;
29250849 143 fhMCSplitPtPhi [i] = 0;
144 fhMCSplitPtEta [i] = 0;
3a4c49b7 145
146 fhMCNLocMaxPt [i] = 0;
6e66993c 147 fhMCNLocMaxSplitPt [i] = 0;
3a4c49b7 148 fhMCNLocMaxPtReject[i] = 0;
cfdf2b91 149
08c09f10 150 fhMCPtLambda0 [i] = 0;
151 fhMCPtLambda0NoTRD [i] = 0;
152 fhMCPtLambda0FracMaxCellCut[i]= 0;
153 fhMCPtFracMaxCell [i] = 0;
154 fhMCPtLambda1 [i] = 0;
155 fhMCPtDispersion [i] = 0;
34c16486 156
08c09f10 157 fhMCPtDispEta [i] = 0;
158 fhMCPtDispPhi [i] = 0;
159 fhMCPtSumEtaPhi [i] = 0;
160 fhMCPtDispEtaPhiDiff[i] = 0;
161 fhMCPtSphericity [i] = 0;
162 fhMCPtAsymmetry [i] = 0;
85c4406e 163
29250849 164 fhMCMassPt [i]=0;
165 fhMCMassSplitPt [i]=0;
166 fhMCSelectedMassPt [i]=0;
167 fhMCSelectedMassSplitPt[i]=0;
168
1253480f 169 fhMCMassPtNoOverlap [i]=0;
170 fhMCMassSplitPtNoOverlap [i]=0;
171 fhMCSelectedMassPtNoOverlap [i]=0;
172 fhMCSelectedMassSplitPtNoOverlap[i]=0;
173
d2655d46 174 for(Int_t j = 0; j < 7; j++)
85c4406e 175 {
bfdcf7fb 176 fhMCLambda0DispEta [j][i] = 0;
177 fhMCLambda0DispPhi [j][i] = 0;
85c4406e 178 fhMCDispEtaDispPhi [j][i] = 0;
179 fhMCAsymmetryLambda0 [j][i] = 0;
180 fhMCAsymmetryDispEta [j][i] = 0;
bfdcf7fb 181 fhMCAsymmetryDispPhi [j][i] = 0;
182 }
34c16486 183 }
184
d2655d46 185 for(Int_t j = 0; j < 7; j++)
85c4406e 186 {
bfdcf7fb 187 fhLambda0DispEta [j] = 0;
188 fhLambda0DispPhi [j] = 0;
85c4406e 189 fhDispEtaDispPhi [j] = 0;
190 fhAsymmetryLambda0 [j] = 0;
191 fhAsymmetryDispEta [j] = 0;
bfdcf7fb 192 fhAsymmetryDispPhi [j] = 0;
5e5e056f 193
126b8c62 194 fhPtPileUp [j] = 0;
5e5e056f 195 }
bfdcf7fb 196
34c16486 197 for(Int_t i = 0; i < 3; i++)
198 {
08c09f10 199 fhPtLambda0LocMax [i] = 0;
200 fhPtLambda1LocMax [i] = 0;
201 fhPtDispersionLocMax [i] = 0;
202 fhPtDispEtaLocMax [i] = 0;
203 fhPtDispPhiLocMax [i] = 0;
204 fhPtSumEtaPhiLocMax [i] = 0;
205 fhPtDispEtaPhiDiffLocMax[i] = 0;
206 fhPtSphericityLocMax [i] = 0;
207 fhPtAsymmetryLocMax [i] = 0;
208 fhMassPtLocMax [i] = 0;
209 fhSelectedMassPtLocMax [i] = 0;
210 for(Int_t ipart = 0; ipart<6; ipart++)
211 {
212 fhMCPtLambda0LocMax [ipart][i] = 0;
213 fhMCSelectedMassPtLocMax[ipart][i] = 0;
214 }
afba5771 215
216 fhMCPi0PtRecoPtPrimLocMax [i] = 0;
217 fhMCEtaPtRecoPtPrimLocMax [i] = 0;
218 fhMCPi0SplitPtRecoPtPrimLocMax [i] = 0;
219 fhMCEtaSplitPtRecoPtPrimLocMax [i] = 0;
220
221 fhMCPi0SelectedPtRecoPtPrimLocMax [i] = 0;
222 fhMCEtaSelectedPtRecoPtPrimLocMax [i] = 0;
223 fhMCPi0SelectedSplitPtRecoPtPrimLocMax[i] = 0;
224 fhMCEtaSelectedSplitPtRecoPtPrimLocMax[i] = 0;
225
521636d2 226 }
227
78a28af3 228 //Weight studies
1a72f6c5 229 for(Int_t i =0; i < 14; i++){
78a28af3 230 fhLambda0ForW0[i] = 0;
1a72f6c5 231 //fhLambda1ForW0[i] = 0;
3c1d9afb 232 if(i<8)fhMassPairLocMax[i] = 0;
78a28af3 233 }
234
afb3af8a 235 for(Int_t i = 0; i < 11; i++)
c2a62a94 236 {
370169ad 237 fhEtaPhiTriggerEMCALBC [i] = 0 ;
238 fhTimeTriggerEMCALBC [i] = 0 ;
239 fhTimeTriggerEMCALBCPileUpSPD[i] = 0 ;
afb3af8a 240
241 fhEtaPhiTriggerEMCALBCUM [i] = 0 ;
242 fhTimeTriggerEMCALBCUM [i] = 0 ;
85c4406e 243
c2a62a94 244 }
245
9605388f 246 for(Int_t iSM = 0; iSM < 22; iSM++)
247 {
248 fhNLocMaxPtSM[iSM] = 0;
249 for(Int_t inlm = 0; inlm < 3; inlm++)
250 {
251 fhSelectedMassPtLocMaxSM [inlm][iSM] = 0;
252 fhSelectedLambda0PtLocMaxSM [inlm][iSM] = 0;
253 }
254 }
477d6cee 255 //Initialize parameters
256 InitParameters();
257
258}
477d6cee 259
b94e038e 260//___________________________________________________________________________________
261void AliAnaPi0EbE::FillPileUpHistograms(Float_t pt, Float_t time, AliVCluster * calo)
2ad19c3d 262{
263 // Fill some histograms to understand pile-up
264 if(!fFillPileUpHistograms) return;
265
266 //printf("E %f, time %f\n",energy,time);
267 AliVEvent * event = GetReader()->GetInputEvent();
268
126b8c62 269 fhTimePtNoCut->Fill(pt,time);
270 if(GetReader()->IsPileUpFromSPD())
2ad19c3d 271
126b8c62 272 if(GetReader()->IsPileUpFromSPD()) { fhPtPileUp[0]->Fill(pt); fhTimePtSPD ->Fill(pt,time); }
273 if(GetReader()->IsPileUpFromEMCal()) fhPtPileUp[1]->Fill(pt);
274 if(GetReader()->IsPileUpFromSPDOrEMCal()) fhPtPileUp[2]->Fill(pt);
275 if(GetReader()->IsPileUpFromSPDAndEMCal()) fhPtPileUp[3]->Fill(pt);
276 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) fhPtPileUp[4]->Fill(pt);
277 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) fhPtPileUp[5]->Fill(pt);
278 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) fhPtPileUp[6]->Fill(pt);
279
280 if(event->IsPileupFromSPDInMultBins()) fhTimePtSPDMulti->Fill(pt,time);
281
282 // cells in cluster
283
284 AliVCaloCells* cells = 0;
285 if(fCalorimeter == "EMCAL") cells = GetEMCALCells();
286 else cells = GetPHOSCells();
287
288 Float_t maxCellFraction = 0.;
289 Int_t absIdMax = GetCaloUtils()->GetMaxEnergyCell(cells,calo,maxCellFraction);
290
291 Double_t tmax = cells->GetCellTime(absIdMax);
292 GetCaloUtils()->RecalibrateCellTime(tmax, fCalorimeter, absIdMax,GetReader()->GetInputEvent()->GetBunchCrossNumber());
293 tmax*=1.e9;
294
295 //Loop on cells inside cluster, max cell must be over 100 MeV and time in BC=0
296 if(cells->GetCellAmplitude(absIdMax) > 0.1 && TMath::Abs(tmax) < 30)
297 {
298 for (Int_t ipos = 0; ipos < calo->GetNCells(); ipos++)
299 {
300 Int_t absId = calo->GetCellsAbsId()[ipos];
301
302 if( absId == absIdMax ) continue ;
303
304 Double_t timecell = cells->GetCellTime(absId);
305 Float_t amp = cells->GetCellAmplitude(absId);
306 Int_t bc = GetReader()->GetInputEvent()->GetBunchCrossNumber();
307 GetCaloUtils()->GetEMCALRecoUtils()->AcceptCalibrateCell(absId,bc,amp,timecell,cells);
308 timecell*=1e9;
309
310 Float_t diff = (tmax-timecell);
311
36769d30 312 if( cells->GetCellAmplitude(absIdMax) < 0.1 ) continue ;
126b8c62 313
314 if(GetReader()->IsPileUpFromSPD())
315 {
316 fhPtCellTimePileUp[0]->Fill(pt, timecell);
317 fhPtTimeDiffPileUp[0]->Fill(pt, diff);
318 }
319
320 if(GetReader()->IsPileUpFromEMCal())
321 {
322 fhPtCellTimePileUp[1]->Fill(pt, timecell);
323 fhPtTimeDiffPileUp[1]->Fill(pt, diff);
324 }
325
326 if(GetReader()->IsPileUpFromSPDOrEMCal())
327 {
328 fhPtCellTimePileUp[2]->Fill(pt, timecell);
329 fhPtTimeDiffPileUp[2]->Fill(pt, diff);
330 }
331
332 if(GetReader()->IsPileUpFromSPDAndEMCal())
333 {
334 fhPtCellTimePileUp[3]->Fill(pt, timecell);
335 fhPtTimeDiffPileUp[3]->Fill(pt, diff);
336 }
337
338 if(GetReader()->IsPileUpFromSPDAndNotEMCal())
339 {
340 fhPtCellTimePileUp[4]->Fill(pt, timecell);
341 fhPtTimeDiffPileUp[4]->Fill(pt, diff);
342 }
343
344 if(GetReader()->IsPileUpFromEMCalAndNotSPD())
345 {
346 fhPtCellTimePileUp[5]->Fill(pt, timecell);
347 fhPtTimeDiffPileUp[5]->Fill(pt, diff);
348 }
349
350 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal())
351 {
352 fhPtCellTimePileUp[6]->Fill(pt, timecell);
353 fhPtTimeDiffPileUp[6]->Fill(pt, diff);
354 }
355 }//loop
356 }
357
358 if(pt < 8) return; // Fill time figures for high energy clusters not too close to trigger threshold
2ad19c3d 359
360 AliESDEvent* esdEv = dynamic_cast<AliESDEvent*> (event);
361 AliAODEvent* aodEv = dynamic_cast<AliAODEvent*> (event);
362
363 // N pile up vertices
0f7e7205 364 Int_t nVtxSPD = -1;
365 Int_t nVtxTrk = -1;
2ad19c3d 366
367 if (esdEv)
368 {
0f7e7205 369 nVtxSPD = esdEv->GetNumberOfPileupVerticesSPD();
370 nVtxTrk = esdEv->GetNumberOfPileupVerticesTracks();
2ad19c3d 371
372 }//ESD
373 else if (aodEv)
374 {
0f7e7205 375 nVtxSPD = aodEv->GetNumberOfPileupVerticesSPD();
376 nVtxTrk = aodEv->GetNumberOfPileupVerticesTracks();
2ad19c3d 377 }//AOD
378
0f7e7205 379 fhTimeNPileUpVertSPD ->Fill(time,nVtxSPD);
380 fhTimeNPileUpVertTrack->Fill(time,nVtxTrk);
2ad19c3d 381
85c4406e 382 fhPtNPileUpSPDVtx->Fill(pt,nVtxSPD);
0f7e7205 383 fhPtNPileUpTrkVtx->Fill(pt,nVtxTrk);
384
385 if(TMath::Abs(time) < 25)
85c4406e 386 {
387 fhPtNPileUpSPDVtxTimeCut ->Fill(pt,nVtxSPD);
388 fhPtNPileUpTrkVtxTimeCut ->Fill(pt,nVtxTrk);
389 }
390
391 if(time < 75 && time > -25)
392 {
393 fhPtNPileUpSPDVtxTimeCut2->Fill(pt,nVtxSPD);
394 fhPtNPileUpTrkVtxTimeCut2->Fill(pt,nVtxTrk);
395 }
396
397 //printf("Is SPD %d, Is SPD Multi %d, n spd %d, n track %d\n",
0f7e7205 398 // GetReader()->IsPileUpFromSPD(),event->IsPileupFromSPDInMultBins(),nVtxSPD,nVtxTracks);
2ad19c3d 399
400 Int_t ncont = -1;
5559f30a 401 Float_t z1 = -1, z2 = -1;
2ad19c3d 402 Float_t diamZ = -1;
0f7e7205 403 for(Int_t iVert=0; iVert<nVtxSPD;iVert++)
2ad19c3d 404 {
405 if (esdEv)
406 {
407 const AliESDVertex* pv=esdEv->GetPileupVertexSPD(iVert);
408 ncont=pv->GetNContributors();
409 z1 = esdEv->GetPrimaryVertexSPD()->GetZ();
410 z2 = pv->GetZ();
411 diamZ = esdEv->GetDiamondZ();
412 }//ESD
413 else if (aodEv)
414 {
415 AliAODVertex *pv=aodEv->GetVertex(iVert);
416 if(pv->GetType()!=AliAODVertex::kPileupSPD) continue;
417 ncont=pv->GetNContributors();
418 z1=aodEv->GetPrimaryVertexSPD()->GetZ();
419 z2=pv->GetZ();
420 diamZ = aodEv->GetDiamondZ();
421 }// AOD
422
423 Double_t distZ = TMath::Abs(z2-z1);
424 diamZ = TMath::Abs(z2-diamZ);
425
426 fhTimeNPileUpVertContributors ->Fill(time,ncont);
427 fhTimePileUpMainVertexZDistance->Fill(time,distZ);
428 fhTimePileUpMainVertexZDiamond ->Fill(time,diamZ);
429
126b8c62 430 }// vertex loop
2ad19c3d 431}
432
40d3ce60 433
b94e038e 434//______________________________________________________________________________________________
435void AliAnaPi0EbE::FillRejectedClusterHistograms(TLorentzVector mom, Int_t mctag, Int_t nMaxima)
40d3ce60 436{
85c4406e 437 // Fill histograms that do not pass the identification (SS case only)
40d3ce60 438
439 Float_t ener = mom.E();
440 Float_t pt = mom.Pt();
441 Float_t phi = mom.Phi();
442 if(phi < 0) phi+=TMath::TwoPi();
443 Float_t eta = mom.Eta();
444
445 fhPtReject ->Fill(pt);
446 fhEReject ->Fill(ener);
447
08c09f10 448 fhPtEtaReject ->Fill(ener,eta);
449 fhPtPhiReject ->Fill(ener,phi);
40d3ce60 450 fhEtaPhiReject ->Fill(eta,phi);
451
3a4c49b7 452 fhNLocMaxPtReject->Fill(pt,nMaxima);
453
40d3ce60 454 if(IsDataMC())
455 {
456 Int_t mcIndex = GetMCIndex(mctag);
457 fhMCEReject [mcIndex] ->Fill(ener);
458 fhMCPtReject [mcIndex] ->Fill(pt);
3a4c49b7 459 fhMCNLocMaxPtReject[mcIndex]->Fill(pt,nMaxima);
85c4406e 460 }
40d3ce60 461}
462
b94e038e 463//___________________________________________________________________________________
08c09f10 464void AliAnaPi0EbE::FillSelectedClusterHistograms(AliVCluster* cluster, Float_t pt, Int_t nMaxima,
b94e038e 465 Int_t tag, Float_t asy)
5c46c992 466{
42d47cb7 467 // Fill shower shape, timing and other histograms for selected clusters from decay
468
08c09f10 469 Float_t ener = cluster->E();
42d47cb7 470 Float_t disp = cluster->GetDispersion()*cluster->GetDispersion();
471 Float_t l0 = cluster->GetM02();
85c4406e 472 Float_t l1 = cluster->GetM20();
42d47cb7 473 Int_t nSM = GetModuleNumber(cluster);
85c4406e 474
08c09f10 475 Int_t ptbin = -1;
476 if (pt < 2 ) ptbin = 0;
477 else if (pt < 4 ) ptbin = 1;
478 else if (pt < 6 ) ptbin = 2;
479 else if (pt < 10) ptbin = 3;
480 else if (pt < 15) ptbin = 4;
481 else if (pt < 20) ptbin = 5;
482 else ptbin = 6;
85c4406e 483
bfdcf7fb 484 Int_t indexMax = -1;
485 if (nMaxima==1) indexMax = 0 ;
85c4406e 486 else if(nMaxima==2) indexMax = 1 ;
487 else indexMax = 2 ;
bfdcf7fb 488
489
85c4406e 490 AliVCaloCells * cell = 0x0;
491 if(fCalorimeter == "PHOS")
42d47cb7 492 cell = GetPHOSCells();
85c4406e 493 else
42d47cb7 494 cell = GetEMCALCells();
495
496 Float_t maxCellFraction = 0;
497 GetCaloUtils()->GetMaxEnergyCell(cell, cluster, maxCellFraction);
08c09f10 498 fhPtFracMaxCell->Fill(pt,maxCellFraction);
42d47cb7 499
500 FillWeightHistograms(cluster);
501
08c09f10 502 fhPtDispersion->Fill(pt, disp);
503 fhPtLambda0 ->Fill(pt, l0 );
504 fhPtLambda1 ->Fill(pt, l1 );
42d47cb7 505
34c16486 506 Float_t ll0 = 0., ll1 = 0.;
85c4406e 507 Float_t dispp= 0., dEta = 0., dPhi = 0.;
508 Float_t sEta = 0., sPhi = 0., sEtaPhi = 0.;
764ab1f4 509 if(fCalorimeter == "EMCAL" && !fFillOnlySimpleSSHisto)
34c16486 510 {
511 GetCaloUtils()->GetEMCALRecoUtils()->RecalculateClusterShowerShapeParameters(GetEMCALGeometry(), GetReader()->GetInputEvent()->GetEMCALCells(), cluster,
512 ll0, ll1, dispp, dEta, dPhi, sEta, sPhi, sEtaPhi);
764ab1f4 513
08c09f10 514 fhPtDispEta -> Fill(pt,dEta);
515 fhPtDispPhi -> Fill(pt,dPhi);
516 fhPtSumEta -> Fill(pt,sEta);
517 fhPtSumPhi -> Fill(pt,sPhi);
518 fhPtSumEtaPhi -> Fill(pt,sEtaPhi);
519 fhPtDispEtaPhiDiff-> Fill(pt,dPhi-dEta);
520 if(dEta+dPhi>0)fhPtSphericity-> Fill(pt,(dPhi-dEta)/(dEta+dPhi));
34c16486 521
08c09f10 522 fhDispEtaDispPhi[ptbin]->Fill(dEta,dPhi);
523 fhLambda0DispEta[ptbin]->Fill(l0 ,dEta);
524 fhLambda0DispPhi[ptbin]->Fill(l0 ,dPhi);
34c16486 525
bfdcf7fb 526 if (fAnaType==kSSCalo)
527 {
528 // Asymmetry histograms
08c09f10 529 fhAsymmetryLambda0[ptbin]->Fill(l0 ,asy);
530 fhAsymmetryDispEta[ptbin]->Fill(dEta,asy);
531 fhAsymmetryDispPhi[ptbin]->Fill(dPhi,asy);
bfdcf7fb 532 }
85c4406e 533 }
34c16486 534
08c09f10 535 fhNLocMaxPt->Fill(pt,nMaxima);
764ab1f4 536
9f48b3f0 537 if(nSM < GetCaloUtils()->GetNumberOfSuperModulesUsed() && nSM >=0)
2dc84d31 538 fhNLocMaxPtSM[nSM]->Fill(pt,nMaxima);
539
08c09f10 540 fhPtLambda0LocMax [indexMax]->Fill(pt,l0);
541 fhPtLambda1LocMax [indexMax]->Fill(pt,l1);
542 fhPtDispersionLocMax[indexMax]->Fill(pt,disp);
543
85c4406e 544 if(fCalorimeter=="EMCAL" && !fFillOnlySimpleSSHisto)
34c16486 545 {
08c09f10 546 fhPtDispEtaLocMax [indexMax]-> Fill(pt,dEta);
547 fhPtDispPhiLocMax [indexMax]-> Fill(pt,dPhi);
548 fhPtSumEtaPhiLocMax [indexMax]-> Fill(pt,sEtaPhi);
549 fhPtDispEtaPhiDiffLocMax[indexMax]-> Fill(pt,dPhi-dEta);
550 if(dEta+dPhi>0) fhPtSphericityLocMax[indexMax]->Fill(pt,(dPhi-dEta)/(dEta+dPhi));
551 if(fAnaType==kSSCalo) fhPtAsymmetryLocMax [indexMax]->Fill(pt ,asy);
bfdcf7fb 552
34c16486 553 }
554
4d1d8f00 555 if(fCalorimeter=="EMCAL" && GetFirstSMCoveredByTRD() >= 0 &&
556 GetModuleNumber(cluster) < GetFirstSMCoveredByTRD() )
b5dbb99b 557 {
08c09f10 558 fhPtLambda0NoTRD ->Fill(pt, l0 );
559 fhPtFracMaxCellNoTRD->Fill(pt,maxCellFraction);
42d47cb7 560 }
561
85c4406e 562 if(maxCellFraction < 0.5)
08c09f10 563 fhPtLambda0FracMaxCellCut->Fill(pt, l0 );
42d47cb7 564
08c09f10 565 fhPtTime ->Fill(pt, cluster->GetTOF()*1.e9);
566 fhPtNCells->Fill(pt, cluster->GetNCells());
42d47cb7 567
09273901 568 // Fill Track matching control histograms
b5dbb99b 569 if(fFillTMHisto)
570 {
09273901 571 Float_t dZ = cluster->GetTrackDz();
572 Float_t dR = cluster->GetTrackDx();
85c4406e 573
b5dbb99b 574 if(cluster->IsEMCAL() && GetCaloUtils()->IsRecalculationOfClusterTrackMatchingOn())
575 {
09273901 576 dR = 2000., dZ = 2000.;
31ae6d59 577 GetCaloUtils()->GetEMCALRecoUtils()->GetMatchedResiduals(cluster->GetID(),dZ,dR);
85c4406e 578 }
09273901 579 //printf("Pi0EbE: dPhi %f, dEta %f\n",dR,dZ);
85c4406e 580
b2e375c7 581 AliVTrack *track = GetCaloUtils()->GetMatchedTrack(cluster, GetReader()->GetInputEvent());
582
583 Bool_t positive = kFALSE;
584 if(track) positive = (track->Charge()>0);
585
b5dbb99b 586 if(fhTrackMatchedDEta && TMath::Abs(dR) < 999)
587 {
08c09f10 588 fhTrackMatchedDEta->Fill(pt,dZ);
589 fhTrackMatchedDPhi->Fill(pt,dR);
590 if(ener > 0.5) fhTrackMatchedDEtaDPhi->Fill(dZ,dR);
b2e375c7 591
592 if(track)
593 {
594 if(positive)
595 {
08c09f10 596 fhTrackMatchedDEtaPos->Fill(pt,dZ);
597 fhTrackMatchedDPhiPos->Fill(pt,dR);
598 if(ener > 0.5) fhTrackMatchedDEtaDPhiPos->Fill(dZ,dR);
b2e375c7 599 }
600 else
601 {
08c09f10 602 fhTrackMatchedDEtaNeg->Fill(pt,dZ);
603 fhTrackMatchedDPhiNeg->Fill(pt,dR);
604 if(ener > 0.5) fhTrackMatchedDEtaDPhiNeg->Fill(dZ,dR);
b2e375c7 605 }
606 }
09273901 607 }
31ae6d59 608 // Check dEdx and E/p of matched clusters
609
610 if(TMath::Abs(dZ) < 0.05 && TMath::Abs(dR) < 0.05)
b2e375c7 611 {
85c4406e 612 if(track)
34c16486 613 {
31ae6d59 614 Float_t dEdx = track->GetTPCsignal();
08c09f10 615 fhdEdx->Fill(pt, dEdx);
31ae6d59 616
08c09f10 617 Float_t eOverp = cluster->E()/track->P();
618 fhEOverP->Fill(pt, eOverp);
4bfeae64 619
08c09f10 620 // Change nSM for year > 2011 (< 4 in 2012-13, none after)
4d1d8f00 621 if(fCalorimeter=="EMCAL" && GetFirstSMCoveredByTRD() >= 0 &&
622 GetModuleNumber(cluster) < GetFirstSMCoveredByTRD() )
623 fhEOverPNoTRD->Fill(pt, eOverp);
85c4406e 624
31ae6d59 625 }
85c4406e 626 //else
4bfeae64 627 // printf("AliAnaPi0EbE::FillSelectedClusterHistograms() - Residual OK but (dR, dZ)= (%2.4f,%2.4f) no track associated WHAT? \n", dR,dZ);
628
b5dbb99b 629 if(IsDataMC())
630 {
f7d8e6b8 631 Float_t mctag = -1;
31ae6d59 632 if ( !GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion) )
633 {
634 if ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0) ||
08c09f10 635 GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEta) ) mctag = 2.5 ;
5dde270e 636 else if ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton) ) mctag = 0.5 ;
637 else if ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCElectron) ) mctag = 1.5 ;
638 else mctag = 3.5 ;
31ae6d59 639
640 }
641 else
642 {
643 if ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0) ||
08c09f10 644 GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEta) ) mctag = 6.5 ;
5dde270e 645 else if ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton) ) mctag = 4.5 ;
646 else if ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCElectron) ) mctag = 5.5 ;
647 else mctag = 7.5 ;
648 }
649
08c09f10 650 fhTrackMatchedMCParticlePt ->Fill(pt, mctag);
5dde270e 651 fhTrackMatchedMCParticleDEta->Fill(dZ, mctag);
652 fhTrackMatchedMCParticleDPhi->Fill(dR, mctag);
653
654 } // MC
31ae6d59 655 }
85c4406e 656 }// Track matching histograms
09273901 657
85c4406e 658 if(IsDataMC())
b5dbb99b 659 {
3455f821 660 Int_t mcIndex = GetMCIndex(tag);
34c16486 661
08c09f10 662 fhMCPtLambda0[mcIndex] ->Fill(pt, l0);
663 fhMCPtLambda1[mcIndex] ->Fill(pt, l1);
664 fhMCPtDispersion[mcIndex] ->Fill(pt, disp);
665 fhMCPtFracMaxCell[mcIndex]->Fill(pt,maxCellFraction);
34c16486 666
08c09f10 667 fhMCPtLambda0LocMax [mcIndex][indexMax]->Fill(pt,l0);
668
4d1d8f00 669 if(fCalorimeter=="EMCAL" && GetFirstSMCoveredByTRD() >= 0 &&
670 GetModuleNumber(cluster) < GetFirstSMCoveredByTRD() )
08c09f10 671 fhMCPtLambda0NoTRD[mcIndex]->Fill(pt, l0 );
764ab1f4 672
85c4406e 673 if(maxCellFraction < 0.5)
08c09f10 674 fhMCPtLambda0FracMaxCellCut[mcIndex]->Fill(pt, l0 );
34c16486 675
764ab1f4 676 if(fCalorimeter == "EMCAL" && !fFillOnlySimpleSSHisto)
34c16486 677 {
08c09f10 678 fhMCPtDispEta [mcIndex]-> Fill(pt,dEta);
679 fhMCPtDispPhi [mcIndex]-> Fill(pt,dPhi);
680 fhMCPtSumEtaPhi [mcIndex]-> Fill(pt,sEtaPhi);
681 fhMCPtDispEtaPhiDiff [mcIndex]-> Fill(pt,dPhi-dEta);
682 if(dEta+dPhi>0)fhMCPtSphericity[mcIndex]-> Fill(pt,(dPhi-dEta)/(dEta+dPhi));
85c4406e 683
bfdcf7fb 684 if (fAnaType==kSSCalo)
685 {
08c09f10 686 fhMCAsymmetryLambda0[ptbin][mcIndex]->Fill(l0 ,asy);
687 fhMCAsymmetryDispEta[ptbin][mcIndex]->Fill(dEta,asy);
688 fhMCAsymmetryDispPhi[ptbin][mcIndex]->Fill(dPhi,asy);
bfdcf7fb 689 }
690
08c09f10 691 fhMCDispEtaDispPhi[ptbin][mcIndex]->Fill(dEta,dPhi);
692 fhMCLambda0DispEta[ptbin][mcIndex]->Fill(l0 ,dEta);
693 fhMCLambda0DispPhi[ptbin][mcIndex]->Fill(l0 ,dPhi);
34c16486 694
695 }
696
42d47cb7 697 }//MC
bfdcf7fb 698
42d47cb7 699}
700
701//________________________________________________________
702void AliAnaPi0EbE::FillWeightHistograms(AliVCluster *clus)
703{
704 // Calculate weights and fill histograms
705
706 if(!fFillWeightHistograms || GetMixedEvent()) return;
707
708 AliVCaloCells* cells = 0;
709 if(fCalorimeter == "EMCAL") cells = GetEMCALCells();
710 else cells = GetPHOSCells();
711
712 // First recalculate energy in case non linearity was applied
713 Float_t energy = 0;
85c4406e 714 Float_t ampMax = 0;
715 for (Int_t ipos = 0; ipos < clus->GetNCells(); ipos++)
b5dbb99b 716 {
42d47cb7 717
718 Int_t id = clus->GetCellsAbsId()[ipos];
719
720 //Recalibrate cell energy if needed
721 Float_t amp = cells->GetCellAmplitude(id);
dbba06ca 722 GetCaloUtils()->RecalibrateCellAmplitude(amp,fCalorimeter, id);
42d47cb7 723
724 energy += amp;
725
85c4406e 726 if(amp> ampMax)
42d47cb7 727 ampMax = amp;
728
85c4406e 729 } // energy loop
42d47cb7 730
85c4406e 731 if(energy <=0 )
b5dbb99b 732 {
42d47cb7 733 printf("AliAnaPi0EbE::WeightHistograms()- Wrong calculated energy %f\n",energy);
734 return;
735 }
736
737 fhEMaxCellClusterRatio ->Fill(energy,ampMax/energy);
738 fhEMaxCellClusterLogRatio->Fill(energy,TMath::Log(ampMax/energy));
739
740 //Get the ratio and log ratio to all cells in cluster
85c4406e 741 for (Int_t ipos = 0; ipos < clus->GetNCells(); ipos++)
b5dbb99b 742 {
42d47cb7 743 Int_t id = clus->GetCellsAbsId()[ipos];
744
745 //Recalibrate cell energy if needed
746 Float_t amp = cells->GetCellAmplitude(id);
dbba06ca 747 GetCaloUtils()->RecalibrateCellAmplitude(amp,fCalorimeter, id);
42d47cb7 748
749 fhECellClusterRatio ->Fill(energy,amp/energy);
750 fhECellClusterLogRatio->Fill(energy,TMath::Log(amp/energy));
85c4406e 751 }
42d47cb7 752
753 //Recalculate shower shape for different W0
754 if(fCalorimeter=="EMCAL"){
755
756 Float_t l0org = clus->GetM02();
757 Float_t l1org = clus->GetM20();
758 Float_t dorg = clus->GetDispersion();
759
b5dbb99b 760 for(Int_t iw = 0; iw < 14; iw++)
761 {
85c4406e 762 GetCaloUtils()->GetEMCALRecoUtils()->SetW0(1+iw*0.5);
42d47cb7 763 GetCaloUtils()->GetEMCALRecoUtils()->RecalculateClusterShowerShapeParameters(GetEMCALGeometry(), cells, clus);
764
765 fhLambda0ForW0[iw]->Fill(energy,clus->GetM02());
1a72f6c5 766 //fhLambda1ForW0[iw]->Fill(energy,clus->GetM20());
42d47cb7 767
768 } // w0 loop
769
770 // Set the original values back
771 clus->SetM02(l0org);
772 clus->SetM20(l1org);
773 clus->SetDispersion(dorg);
774
775 }// EMCAL
776}
777
b5dbb99b 778//__________________________________________
779TObjString * AliAnaPi0EbE::GetAnalysisCuts()
85c4406e 780{
0c1383b5 781 //Save parameters used for analysis
521636d2 782 TString parList ; //this will be list of parameters used for this analysis.
783 const Int_t buffersize = 255;
784 char onePar[buffersize] ;
785
786 snprintf(onePar,buffersize,"--- AliAnaPi0EbE ---\n") ;
85c4406e 787 parList+=onePar ;
b7937ba1 788 snprintf(onePar,buffersize,"fAnaType=%d (selection type) \n",fAnaType) ;
521636d2 789 parList+=onePar ;
de2e61cd 790 snprintf(onePar,buffersize,"Calorimeter: %s;",fCalorimeter.Data()) ;
791 parList+=onePar ;
521636d2 792
b5dbb99b 793 if(fAnaType == kSSCalo)
794 {
b7937ba1 795 snprintf(onePar,buffersize,"E cut: %2.2f<E<%2.2f;",GetMinEnergy(),GetMaxEnergy()) ;
796 parList+=onePar ;
de2e61cd 797 snprintf(onePar,buffersize,"Min Dist to Bad channel: fMinDist =%2.2f; fMinDist2=%2.2f, fMinDist3=%2.2f;",fMinDist, fMinDist2,fMinDist3) ;
521636d2 798 parList+=onePar ;
de2e61cd 799 snprintf(onePar,buffersize,"Min E cut for NLM cases: 1) %2.2f; 2) %2.2f; 3) %2.2f;",fNLMECutMin[0],fNLMECutMin[1],fNLMECutMin[2]) ;
521636d2 800 parList+=onePar ;
de2e61cd 801 snprintf(onePar,buffersize,"Reject Matched tracks?: %d;",fRejectTrackMatch) ;
521636d2 802 parList+=onePar ;
de2e61cd 803 snprintf(onePar,buffersize,"Time cut: %2.2f<t<%2.2f;",fTimeCutMin,fTimeCutMax) ;
804 parList+=onePar ;
805 //Get parameters set in PID class.
806 parList += GetCaloPID()->GetPIDParametersList() ;
807 }
b7937ba1 808 else if(fAnaType == kIMCalo || fAnaType == kIMCaloTracks)
de2e61cd 809 {
b7937ba1 810 snprintf(onePar,buffersize,"Select %s;", (GetNeutralMesonSelection()->GetParticle()).Data()) ;
de2e61cd 811 parList+=onePar ;
b7937ba1 812 snprintf(onePar,buffersize,"Mass cut: %2.2f<M<%2.2f;",GetNeutralMesonSelection()->GetInvMassMinCut() ,GetNeutralMesonSelection()->GetInvMassMaxCut()) ;
813 parList+=onePar ;
814 snprintf(onePar,buffersize,"Local maxima in cluster: %d < nlm < %d;",fNLMCutMin,fNLMCutMax) ;
de2e61cd 815 parList+=onePar ;
de2e61cd 816 }
817 else if(fAnaType == kIMCaloTracks)
818 {
b7937ba1 819 snprintf(onePar,buffersize,"Photon Conv Array: %s;",fInputAODGammaConvName.Data()) ;
de2e61cd 820 parList+=onePar ;
b7937ba1 821 }
822 else if(fAnaType == kIMCalo)
823 {
824 snprintf(onePar,buffersize,"Time Diff: %2.2f;",GetPairTimeCut()) ;
521636d2 825 parList+=onePar ;
826 }
827
828 //Get parameters set in base class.
de2e61cd 829 //parList += GetBaseParametersList() ;
521636d2 830
831 return new TObjString(parList) ;
0c1383b5 832}
833
78a28af3 834//_____________________________________________
477d6cee 835TList * AliAnaPi0EbE::GetCreateOutputObjects()
85c4406e 836{
837 // Create histograms to be saved in output file and
477d6cee 838 // store them in outputContainer
85c4406e 839 TList * outputContainer = new TList() ;
840 outputContainer->SetName("Pi0EbEHistos") ;
477d6cee 841
745913ae 842 Int_t nptbins = GetHistogramRanges()->GetHistoPtBins(); Float_t ptmax = GetHistogramRanges()->GetHistoPtMax(); Float_t ptmin = GetHistogramRanges()->GetHistoPtMin();
843 Int_t nphibins = GetHistogramRanges()->GetHistoPhiBins(); Float_t phimax = GetHistogramRanges()->GetHistoPhiMax(); Float_t phimin = GetHistogramRanges()->GetHistoPhiMin();
844 Int_t netabins = GetHistogramRanges()->GetHistoEtaBins(); Float_t etamax = GetHistogramRanges()->GetHistoEtaMax(); Float_t etamin = GetHistogramRanges()->GetHistoEtaMin();
845 Int_t ssbins = GetHistogramRanges()->GetHistoShowerShapeBins(); Float_t ssmax = GetHistogramRanges()->GetHistoShowerShapeMax(); Float_t ssmin = GetHistogramRanges()->GetHistoShowerShapeMin();
846 Int_t tdbins = GetHistogramRanges()->GetHistoDiffTimeBins() ; Float_t tdmax = GetHistogramRanges()->GetHistoDiffTimeMax(); Float_t tdmin = GetHistogramRanges()->GetHistoDiffTimeMin();
847 Int_t tbins = GetHistogramRanges()->GetHistoTimeBins() ; Float_t tmax = GetHistogramRanges()->GetHistoTimeMax(); Float_t tmin = GetHistogramRanges()->GetHistoTimeMin();
85c4406e 848 Int_t nbins = GetHistogramRanges()->GetHistoNClusterCellBins(); Int_t nmax = GetHistogramRanges()->GetHistoNClusterCellMax(); Int_t nmin = GetHistogramRanges()->GetHistoNClusterCellMin();
849
850 Int_t nmassbins = GetHistogramRanges()->GetHistoMassBins();
851 Float_t massmin = GetHistogramRanges()->GetHistoMassMin();
b5dbb99b 852 Float_t massmax = GetHistogramRanges()->GetHistoMassMax();
853
85c4406e 854 Int_t nresetabins = GetHistogramRanges()->GetHistoTrackResidualEtaBins();
855 Float_t resetamax = GetHistogramRanges()->GetHistoTrackResidualEtaMax();
09273901 856 Float_t resetamin = GetHistogramRanges()->GetHistoTrackResidualEtaMin();
85c4406e 857 Int_t nresphibins = GetHistogramRanges()->GetHistoTrackResidualPhiBins();
858 Float_t resphimax = GetHistogramRanges()->GetHistoTrackResidualPhiMax();
09273901 859 Float_t resphimin = GetHistogramRanges()->GetHistoTrackResidualPhiMin();
860
85c4406e 861 Int_t ndedxbins = GetHistogramRanges()->GetHistodEdxBins();
862 Float_t dedxmax = GetHistogramRanges()->GetHistodEdxMax();
31ae6d59 863 Float_t dedxmin = GetHistogramRanges()->GetHistodEdxMin();
85c4406e 864 Int_t nPoverEbins = GetHistogramRanges()->GetHistoPOverEBins();
865 Float_t pOverEmax = GetHistogramRanges()->GetHistoPOverEMax();
31ae6d59 866 Float_t pOverEmin = GetHistogramRanges()->GetHistoPOverEMin();
867
5ba76d0d 868 Int_t ntimptbins = GetHistogramRanges()->GetHistoTimeBins();
869 Float_t timemax = GetHistogramRanges()->GetHistoTimeMax();
870 Float_t timemin = GetHistogramRanges()->GetHistoTimeMin();
2ad19c3d 871
5ba76d0d 872 TString nlm[] = {"1 Local Maxima","2 Local Maxima", "NLM > 2"};
873 TString ptype[] = {"#gamma","#gamma->e^{#pm}","#pi^{0}","#eta","e^{#pm}", "hadron"};
874 TString pname[] = {"Photon","Conversion", "Pi0", "Eta", "Electron","Hadron"};
d2655d46 875 Int_t bin[] = {0,2,4,6,10,15,20,100}; // energy bins
85c4406e 876
877 fhPt = new TH1F("hPt","Number of identified #pi^{0} (#eta) decay",nptbins,ptmin,ptmax);
5ba76d0d 878 fhPt->SetYTitle("#it{N}");
879 fhPt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
85c4406e 880 outputContainer->Add(fhPt) ;
09273901 881
85c4406e 882 fhE = new TH1F("hE","Number of identified #pi^{0} (#eta) decay pairs",nptbins,ptmin,ptmax);
5ba76d0d 883 fhE->SetYTitle("#it{N}");
884 fhE->SetXTitle("#it{E} (GeV)");
85c4406e 885 outputContainer->Add(fhE) ;
09273901 886
08c09f10 887 fhPtPhi = new TH2F
5ba76d0d 888 ("hPtPhi","Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #phi",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
08c09f10 889 fhPtPhi->SetYTitle("#phi (rad)");
5ba76d0d 890 fhPtPhi->SetXTitle("#it{E} (GeV)");
08c09f10 891 outputContainer->Add(fhPtPhi) ;
09273901 892
08c09f10 893 fhPtEta = new TH2F
5ba76d0d 894 ("hPtEta","Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #eta",nptbins,ptmin,ptmax,netabins,etamin,etamax);
08c09f10 895 fhPtEta->SetYTitle("#eta");
5ba76d0d 896 fhPtEta->SetXTitle("#it{E} (GeV)");
08c09f10 897 outputContainer->Add(fhPtEta) ;
85c4406e 898
09273901 899 fhEtaPhi = new TH2F
85c4406e 900 ("hEtaPhi","Selected #pi^{0} (#eta) pairs: #eta vs #phi",netabins,etamin,etamax, nphibins,phimin,phimax);
b9947879 901 fhEtaPhi->SetYTitle("#phi (rad)");
902 fhEtaPhi->SetXTitle("#eta");
85c4406e 903 outputContainer->Add(fhEtaPhi) ;
09273901 904
c2a62a94 905 if(fCalorimeter=="EMCAL" && fFillEMCALBCHistograms)
906 {
907 fhEtaPhiEMCALBC0 = new TH2F
5ba76d0d 908 ("hEtaPhiEMCALBC0","cluster, #it{E} > 2 GeV, #eta vs #phi, for clusters with |#it{t}| < 25 ns, EMCAL-BC=0",netabins,etamin,etamax,nphibins,phimin,phimax);
c2a62a94 909 fhEtaPhiEMCALBC0->SetYTitle("#phi (rad)");
910 fhEtaPhiEMCALBC0->SetXTitle("#eta");
911 outputContainer->Add(fhEtaPhiEMCALBC0) ;
912
913 fhEtaPhiEMCALBC1 = new TH2F
5ba76d0d 914 ("hEtaPhiEMCALBC1","cluster, #it{E} > 2 GeV, #eta vs #phi, for clusters with 25 < |#it{t}| < 75 ns, EMCAL-BC=1",netabins,etamin,etamax,nphibins,phimin,phimax);
c2a62a94 915 fhEtaPhiEMCALBC1->SetYTitle("#phi (rad)");
916 fhEtaPhiEMCALBC1->SetXTitle("#eta");
917 outputContainer->Add(fhEtaPhiEMCALBC1) ;
918
919 fhEtaPhiEMCALBCN = new TH2F
5ba76d0d 920 ("hEtaPhiEMCALBCN","cluster, #it{E} > 2 GeV, #eta vs #phi, for clusters with |#it{t}| > 75 ns, EMCAL-BC>1",netabins,etamin,etamax,nphibins,phimin,phimax);
c2a62a94 921 fhEtaPhiEMCALBCN->SetYTitle("#phi (rad)");
922 fhEtaPhiEMCALBCN->SetXTitle("#eta");
923 outputContainer->Add(fhEtaPhiEMCALBCN) ;
924
afb3af8a 925 for(Int_t i = 0; i < 11; i++)
c2a62a94 926 {
927 fhEtaPhiTriggerEMCALBC[i] = new TH2F
928 (Form("hEtaPhiTriggerEMCALBC%d",i-5),
5ba76d0d 929 Form("meson #it{E} > 2 GeV, #eta vs #phi, Trigger EMCAL-BC=%d",i-5),
c2a62a94 930 netabins,etamin,etamax,nphibins,phimin,phimax);
931 fhEtaPhiTriggerEMCALBC[i]->SetYTitle("#phi (rad)");
932 fhEtaPhiTriggerEMCALBC[i]->SetXTitle("#eta");
933 outputContainer->Add(fhEtaPhiTriggerEMCALBC[i]) ;
934
935 fhTimeTriggerEMCALBC[i] = new TH2F
936 (Form("hTimeTriggerEMCALBC%d",i-5),
5ba76d0d 937 Form("meson #it{t} vs #it{E}, Trigger EMCAL-BC=%d",i-5),
08c09f10 938 nptbins,ptmin,ptmax, ntimptbins,timemin,timemax);
5ba76d0d 939 fhTimeTriggerEMCALBC[i]->SetXTitle("#it{E} (GeV)");
940 fhTimeTriggerEMCALBC[i]->SetYTitle("#it{t} (ns)");
c2a62a94 941 outputContainer->Add(fhTimeTriggerEMCALBC[i]);
942
943 fhTimeTriggerEMCALBCPileUpSPD[i] = new TH2F
944 (Form("hTimeTriggerEMCALBC%dPileUpSPD",i-5),
5ba76d0d 945 Form("meson #it{t} vs #it{E}, Trigger EMCAL-BC=%d",i-5),
08c09f10 946 nptbins,ptmin,ptmax, ntimptbins,timemin,timemax);
5ba76d0d 947 fhTimeTriggerEMCALBCPileUpSPD[i]->SetXTitle("#it{E} (GeV)");
948 fhTimeTriggerEMCALBCPileUpSPD[i]->SetYTitle("#it{t} (ns)");
c2a62a94 949 outputContainer->Add(fhTimeTriggerEMCALBCPileUpSPD[i]);
afb3af8a 950
951 fhEtaPhiTriggerEMCALBCUM[i] = new TH2F
952 (Form("hEtaPhiTriggerEMCALBC%d_UnMatch",i-5),
5ba76d0d 953 Form("meson #it{E} > 2 GeV, #eta vs #phi, unmatched trigger EMCAL-BC=%d",i-5),
afb3af8a 954 netabins,etamin,etamax,nphibins,phimin,phimax);
955 fhEtaPhiTriggerEMCALBCUM[i]->SetYTitle("#phi (rad)");
956 fhEtaPhiTriggerEMCALBCUM[i]->SetXTitle("#eta");
957 outputContainer->Add(fhEtaPhiTriggerEMCALBCUM[i]) ;
958
959 fhTimeTriggerEMCALBCUM[i] = new TH2F
960 (Form("hTimeTriggerEMCALBC%d_UnMatch",i-5),
5ba76d0d 961 Form("meson #it{t} vs #it{E}, unmatched trigger EMCAL-BC=%d",i-5),
08c09f10 962 nptbins,ptmin,ptmax, ntimptbins,timemin,timemax);
5ba76d0d 963 fhTimeTriggerEMCALBCUM[i]->SetXTitle("#it{E} (GeV)");
964 fhTimeTriggerEMCALBCUM[i]->SetYTitle("#it{t} (ns)");
afb3af8a 965 outputContainer->Add(fhTimeTriggerEMCALBCUM[i]);
85c4406e 966
c2a62a94 967 }
126b8c62 968
969 fhTimeTriggerEMCALBC0UMReMatchOpenTime = new TH2F("hTimeTriggerBC0_UnMatch_ReMatch_OpenTime",
5ba76d0d 970 "cluster #it{t} vs #it{E} of clusters, no match, rematch open time",
08c09f10 971 nptbins,ptmin,ptmax, ntimptbins,timemin,timemax);
5ba76d0d 972 fhTimeTriggerEMCALBC0UMReMatchOpenTime->SetXTitle("#it{E} (GeV)");
973 fhTimeTriggerEMCALBC0UMReMatchOpenTime->SetYTitle("#it{t} (ns)");
126b8c62 974 outputContainer->Add(fhTimeTriggerEMCALBC0UMReMatchOpenTime);
975
976
977 fhTimeTriggerEMCALBC0UMReMatchCheckNeigh = new TH2F("hTimeTriggerBC0_UnMatch_ReMatch_CheckNeighbours",
5ba76d0d 978 "cluster #it{t} vs #it{E} of clusters, no match, rematch with neigbour parches",
08c09f10 979 nptbins,ptmin,ptmax, ntimptbins,timemin,timemax);
5ba76d0d 980 fhTimeTriggerEMCALBC0UMReMatchCheckNeigh->SetXTitle("#it{E} (GeV)");
981 fhTimeTriggerEMCALBC0UMReMatchCheckNeigh->SetYTitle("#it{t} (ns)");
126b8c62 982 outputContainer->Add(fhTimeTriggerEMCALBC0UMReMatchCheckNeigh);
983
984 fhTimeTriggerEMCALBC0UMReMatchBoth = new TH2F("hTimeTriggerBC0_UnMatch_ReMatch_Both",
5ba76d0d 985 "cluster #it{t} vs #it{E} of clusters, no match, rematch open time and neigbour",
08c09f10 986 nptbins,ptmin,ptmax, ntimptbins,timemin,timemax);
5ba76d0d 987 fhTimeTriggerEMCALBC0UMReMatchBoth->SetXTitle("#it{E} (GeV)");
988 fhTimeTriggerEMCALBC0UMReMatchBoth->SetYTitle("#it{t} (ns)");
126b8c62 989 outputContainer->Add(fhTimeTriggerEMCALBC0UMReMatchBoth);
990
c2a62a94 991 }
992
5ba76d0d 993 fhPtCentrality = new TH2F("hPtCentrality","centrality vs #it{p}_{T}",nptbins,ptmin,ptmax, 100,0,100);
c8710850 994 fhPtCentrality->SetYTitle("centrality");
5ba76d0d 995 fhPtCentrality->SetXTitle("#it{p}_{T} (GeV/#it{c})");
c8710850 996 outputContainer->Add(fhPtCentrality) ;
997
5ba76d0d 998 fhPtEventPlane = new TH2F("hPtEventPlane","event plane angle vs #it{p}_{T}",nptbins,ptmin,ptmax, 100,0,TMath::Pi());
c8710850 999 fhPtEventPlane->SetYTitle("Event plane angle (rad)");
5ba76d0d 1000 fhPtEventPlane->SetXTitle("#it{p}_{T} (GeV/#it{c})");
c8710850 1001 outputContainer->Add(fhPtEventPlane) ;
1002
40d3ce60 1003 if(fAnaType == kSSCalo)
1004 {
85c4406e 1005 fhPtReject = new TH1F("hPtReject","Number of rejected as #pi^{0} (#eta) decay",nptbins,ptmin,ptmax);
5ba76d0d 1006 fhPtReject->SetYTitle("#it{N}");
1007 fhPtReject->SetXTitle("#it{p}_{T} (GeV/#it{c})");
85c4406e 1008 outputContainer->Add(fhPtReject) ;
40d3ce60 1009
85c4406e 1010 fhEReject = new TH1F("hEReject","Number of rejected as #pi^{0} (#eta) decay pairs",nptbins,ptmin,ptmax);
5ba76d0d 1011 fhEReject->SetYTitle("#it{N}");
1012 fhEReject->SetXTitle("#it{E} (GeV)");
85c4406e 1013 outputContainer->Add(fhEReject) ;
40d3ce60 1014
08c09f10 1015 fhPtPhiReject = new TH2F
5ba76d0d 1016 ("hPtPhiReject","Rejected #pi^{0} (#eta) cluster: #it{p}_{T} vs #phi",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
08c09f10 1017 fhPtPhiReject->SetYTitle("#phi (rad)");
5ba76d0d 1018 fhPtPhiReject->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1019 outputContainer->Add(fhPtPhiReject) ;
40d3ce60 1020
08c09f10 1021 fhPtEtaReject = new TH2F
5ba76d0d 1022 ("hPtEtaReject","Rejected #pi^{0} (#eta) cluster: #it{p}_{T} vs #eta",nptbins,ptmin,ptmax,netabins,etamin,etamax);
08c09f10 1023 fhPtEtaReject->SetYTitle("#eta");
5ba76d0d 1024 fhPtEtaReject->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1025 outputContainer->Add(fhPtEtaReject) ;
40d3ce60 1026
1027 fhEtaPhiReject = new TH2F
85c4406e 1028 ("hEtaPhiReject","Rejected #pi^{0} (#eta) cluster: #eta vs #phi",netabins,etamin,etamax, nphibins,phimin,phimax);
40d3ce60 1029 fhEtaPhiReject->SetYTitle("#phi (rad)");
1030 fhEtaPhiReject->SetXTitle("#eta");
85c4406e 1031 outputContainer->Add(fhEtaPhiReject) ;
40d3ce60 1032 }
1033
f02db2c0 1034 fhMass = new TH2F
5ba76d0d 1035 ("hMass","all pairs #it{M}: #it{E} vs #it{M}",nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
1036 fhMass->SetYTitle("#it{M} (GeV/#it{c}^{2})");
1037 fhMass->SetXTitle("#it{E} (GeV)");
85c4406e 1038 outputContainer->Add(fhMass) ;
f02db2c0 1039
1040 fhSelectedMass = new TH2F
5ba76d0d 1041 ("hSelectedMass","Selected #pi^{0} (#eta) pairs #it{M}: E vs #it{M}",nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
1042 fhSelectedMass->SetYTitle("#it{M} (GeV/#it{c}^{2})");
1043 fhSelectedMass->SetXTitle("#it{E} (GeV)");
85c4406e 1044 outputContainer->Add(fhSelectedMass) ;
1045
08c09f10 1046 if(fAnaType == kSSCalo)
1253480f 1047 {
08c09f10 1048
1049 fhMassPt = new TH2F
5ba76d0d 1050 ("hMassPt","all pairs #it{M}: #it{p}_{T} vs #it{M}",nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
1051 fhMassPt->SetYTitle("#it{M} (GeV/#it{c}^{2})");
1052 fhMassPt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1053 outputContainer->Add(fhMassPt) ;
1054
1055 fhSelectedMassPt = new TH2F
5ba76d0d 1056 ("hSelectedMassPt","Selected #pi^{0} (#eta) pairs #it{M}: #it{p}_{T} vs #it{M}",nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
1057 fhSelectedMassPt->SetYTitle("#it{M} (GeV/#it{c}^{2})");
1058 fhSelectedMassPt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1059 outputContainer->Add(fhSelectedMassPt) ;
1060
1061 for(Int_t inlm = 0; inlm < 3; inlm++)
1062 {
1063 fhMassPtLocMax[inlm] = new TH2F
5ba76d0d 1064 (Form("hMassPtNLocMax%d",inlm+1),Form("all pairs #it{M}: #it{p}_{T} vs #it{M} and NLM=%s",nlm[inlm].Data()),nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
1065 fhMassPtLocMax[inlm]->SetYTitle("#it{M} (GeV/#it{c}^{2})");
1066 fhMassPtLocMax[inlm]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1067 outputContainer->Add(fhMassPtLocMax[inlm]) ;
1068
1069 fhSelectedMassPtLocMax[inlm] = new TH2F
5ba76d0d 1070 (Form("hSelectedMassPtLocMax%d",inlm+1),Form("Selected #pi^{0} (#eta) pairs #it{M}: #it{p}_{T} vs #it{M}, NLM=%s",nlm[inlm].Data()),nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
1071 fhSelectedMassPtLocMax[inlm]->SetYTitle("#it{M} (GeV/#it{c}^{2})");
1072 fhSelectedMassPtLocMax[inlm]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1073 outputContainer->Add(fhSelectedMassPtLocMax[inlm]) ;
1074
9f48b3f0 1075 for(Int_t iSM = 0; iSM < GetCaloUtils()->GetNumberOfSuperModulesUsed(); iSM++)
9605388f 1076 {
1077 fhSelectedMassPtLocMaxSM[inlm][iSM] = new TH2F
5ba76d0d 1078 (Form("hSelectedMassPtLocMax%d_SM%d",inlm+1,iSM),Form("Selected #pi^{0} (#eta) pairs #it{M}: #it{p}_{T} vs #it{M}, NLM=%s for SM=%d",nlm[inlm].Data(),iSM),nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
1079 fhSelectedMassPtLocMaxSM[inlm][iSM]->SetYTitle("#it{M} (GeV/#it{c}^{2})");
1080 fhSelectedMassPtLocMaxSM[inlm][iSM]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
9605388f 1081 outputContainer->Add(fhSelectedMassPtLocMaxSM[inlm][iSM]) ;
1082
1083 fhSelectedLambda0PtLocMaxSM[inlm][iSM] = new TH2F
5ba76d0d 1084 (Form("hSelectedLambda0PtLocMax%d_SM%d",inlm+1,iSM),Form("Selected #pi^{0} (#eta) pairs #lambda_{0}^{2}: #it{p}_{T} vs #it{M}, NLM=%s for SM=%d",nlm[inlm].Data(),iSM),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
9605388f 1085 fhSelectedLambda0PtLocMaxSM[inlm][iSM]->SetYTitle("#lambda_{0}^{2}");
5ba76d0d 1086 fhSelectedLambda0PtLocMaxSM[inlm][iSM]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
9605388f 1087 outputContainer->Add(fhSelectedLambda0PtLocMaxSM[inlm][iSM]) ;
1088 }
1089
08c09f10 1090 if(IsDataMC())
1091 {
1092 for(Int_t ipart = 0; ipart < 6; ipart++)
1093 {
1094 fhMCSelectedMassPtLocMax[ipart][inlm] = new TH2F
1095 (Form("hSelectedMassPtLocMax%d_MC%s",inlm+1,pname[ipart].Data()),
5ba76d0d 1096 Form("Selected #pi^{0} (#eta) pairs #it{M}: #it{p}_{T} vs #it{M}, NLM=%s, %s",nlm[inlm].Data(),pname[ipart].Data()),
08c09f10 1097 nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
5ba76d0d 1098 fhMCSelectedMassPtLocMax[ipart][inlm]->SetYTitle("#it{M} (GeV/#it{c}^{2})");
1099 fhMCSelectedMassPtLocMax[ipart][inlm]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1100 outputContainer->Add(fhMCSelectedMassPtLocMax[ipart][inlm]) ;
1101 }
1102 }
1103 }
1104
1105 if(IsDataMC())
1106 {
1107 fhMassNoOverlap = new TH2F
5ba76d0d 1108 ("hMassNoOverlap","all pairs #it{M}: #it{E} vs #it{M}, no overlap",nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
1109 fhMassNoOverlap->SetYTitle("#it{M} (GeV/#it{c}^{2})");
1110 fhMassNoOverlap->SetXTitle("#it{E} (GeV)");
08c09f10 1111 outputContainer->Add(fhMassNoOverlap) ;
1112
1113 fhSelectedMassNoOverlap = new TH2F
5ba76d0d 1114 ("hSelectedMassNoOverlap","Selected #pi^{0} (#eta) pairs #it{M}: #it{E} vs #it{M}, no overlap",nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
1115 fhSelectedMassNoOverlap->SetYTitle("#it{M} (GeV/#it{c}^{2})");
1116 fhSelectedMassNoOverlap->SetXTitle("#it{E} (GeV)");
08c09f10 1117 outputContainer->Add(fhSelectedMassNoOverlap) ;
1118
1119 fhMassPtNoOverlap = new TH2F
5ba76d0d 1120 ("hMassPtNoOverlap","all pairs #it{M}: #it{p}_{T} vs #it{M}, no overlap",nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
1121 fhMassPtNoOverlap->SetYTitle("#it{M} (GeV/#it{c}^{2})");
1122 fhMassPtNoOverlap->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1123 outputContainer->Add(fhMassPtNoOverlap) ;
1124
1125 fhSelectedMassPtNoOverlap = new TH2F
5ba76d0d 1126 ("hSelectedMassPtNoOverlap","Selected #pi^{0} (#eta) pairs #it{M}: #it{p}_{T} vs #it{M}, no overlap",nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
1127 fhSelectedMassPtNoOverlap->SetYTitle("#it{M} (GeV/#it{c}^{2})");
1128 fhSelectedMassPtNoOverlap->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1129 outputContainer->Add(fhSelectedMassPtNoOverlap) ;
1130 }
1253480f 1131 }
85c4406e 1132
34c16486 1133 if(fAnaType != kSSCalo)
1134 {
85c4406e 1135 fhPtDecay = new TH1F("hPtDecay","Number of identified #pi^{0} (#eta) decay photons",nptbins,ptmin,ptmax);
5ba76d0d 1136 fhPtDecay->SetYTitle("#it{N}");
1137 fhPtDecay->SetXTitle("#it{p}_{T} (GeV/#it{c})");
85c4406e 1138 outputContainer->Add(fhPtDecay) ;
34c16486 1139
85c4406e 1140 fhEDecay = new TH1F("hEDecay","Number of identified #pi^{0} (#eta) decay photons",nptbins,ptmin,ptmax);
5ba76d0d 1141 fhEDecay->SetYTitle("#it{N}");
1142 fhEDecay->SetXTitle("#it{E} (GeV)");
85c4406e 1143 outputContainer->Add(fhEDecay) ;
34c16486 1144 }
57b97dc6 1145
c4a7d28a 1146 ////////
57b97dc6 1147
34c16486 1148 if( fFillSelectClHisto )
b5dbb99b 1149 {
08c09f10 1150 fhPtDispersion = new TH2F
5ba76d0d 1151 ("hPtDispersion","Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs dispersion",nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
08c09f10 1152 fhPtDispersion->SetYTitle("D^{2}");
5ba76d0d 1153 fhPtDispersion->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1154 outputContainer->Add(fhPtDispersion) ;
1155
1156 fhPtLambda0 = new TH2F
5ba76d0d 1157 ("hPtLambda0","Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #lambda_{0}",nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
08c09f10 1158 fhPtLambda0->SetYTitle("#lambda_{0}^{2}");
5ba76d0d 1159 fhPtLambda0->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1160 outputContainer->Add(fhPtLambda0) ;
1161
1162 fhPtLambda1 = new TH2F
5ba76d0d 1163 ("hPtLambda1","Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #lambda_{1}",nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
08c09f10 1164 fhPtLambda1->SetYTitle("#lambda_{1}^{2}");
5ba76d0d 1165 fhPtLambda1->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1166 outputContainer->Add(fhPtLambda1) ;
1167
1168 fhPtLambda0FracMaxCellCut = new TH2F
5ba76d0d 1169 ("hPtLambda0FracMaxCellCut","Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #lambda_{0}, Max cell fraction of energy < 0.5",nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
08c09f10 1170 fhPtLambda0FracMaxCellCut->SetYTitle("#lambda_{0}^{2}");
5ba76d0d 1171 fhPtLambda0FracMaxCellCut->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1172 outputContainer->Add(fhPtLambda0FracMaxCellCut) ;
1173
1174 fhPtFracMaxCell = new TH2F
5ba76d0d 1175 ("hPtFracMaxCell","Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #lambda_{0}, Max cell fraction of energy",nptbins,ptmin,ptmax,100,0,1);
08c09f10 1176 fhPtFracMaxCell->SetYTitle("Fraction");
5ba76d0d 1177 fhPtFracMaxCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1178 outputContainer->Add(fhPtFracMaxCell) ;
5c46c992 1179
4d1d8f00 1180 if(fCalorimeter=="EMCAL" && GetFirstSMCoveredByTRD() >=0 )
06e81356 1181 {
08c09f10 1182 fhPtLambda0NoTRD = new TH2F
5ba76d0d 1183 ("hPtLambda0NoTRD","Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #lambda_{0}, not behind TRD",nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
08c09f10 1184 fhPtLambda0NoTRD->SetYTitle("#lambda_{0}^{2}");
5ba76d0d 1185 fhPtLambda0NoTRD->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1186 outputContainer->Add(fhPtLambda0NoTRD) ;
1187
1188 fhPtFracMaxCellNoTRD = new TH2F
5ba76d0d 1189 ("hPtFracMaxCellNoTRD","Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #lambda_{0}, Max cell fraction of energy, not behind TRD",nptbins,ptmin,ptmax,100,0,1);
08c09f10 1190 fhPtFracMaxCellNoTRD->SetYTitle("Fraction");
5ba76d0d 1191 fhPtFracMaxCellNoTRD->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1192 outputContainer->Add(fhPtFracMaxCellNoTRD) ;
34c16486 1193
764ab1f4 1194 if(!fFillOnlySimpleSSHisto)
34c16486 1195 {
5ba76d0d 1196 fhPtDispEta = new TH2F ("hPtDispEta","#sigma^{2}_{#eta #eta} = #Sigma w_{i}(#eta_{i} - <#eta>)^{2}/ #Sigma w_{i} vs #it{p}_{T}", nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
1197 fhPtDispEta->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1198 fhPtDispEta->SetYTitle("#sigma^{2}_{#eta #eta}");
1199 outputContainer->Add(fhPtDispEta);
1200
5ba76d0d 1201 fhPtDispPhi = new TH2F ("hPtDispPhi","#sigma^{2}_{#phi #phi} = #Sigma w_{i}(#phi_{i} - <#phi>)^{2} / #Sigma w_{i} vs #it{p}_{T}", nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
1202 fhPtDispPhi->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1203 fhPtDispPhi->SetYTitle("#sigma^{2}_{#phi #phi}");
1204 outputContainer->Add(fhPtDispPhi);
1205
5ba76d0d 1206 fhPtSumEta = new TH2F ("hPtSumEta","#sigma^{2}_{#eta #eta} = #Sigma w_{i}(#eta_{i})^{2} / #Sigma w_{i} - <#eta>^{2} vs #it{p}_{T}", nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
1207 fhPtSumEta->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1208 fhPtSumEta->SetYTitle("#delta^{2}_{#eta #eta}");
1209 outputContainer->Add(fhPtSumEta);
1210
5ba76d0d 1211 fhPtSumPhi = new TH2F ("hPtSumPhi","#sigma^{2}_{#phi #phi} = #Sigma w_{i}(#phi_{i})^{2}/ #Sigma w_{i} - <#phi>^{2} vs #it{p}_{T}",
85c4406e 1212 nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
5ba76d0d 1213 fhPtSumPhi->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1214 fhPtSumPhi->SetYTitle("#delta^{2}_{#phi #phi}");
1215 outputContainer->Add(fhPtSumPhi);
764ab1f4 1216
5ba76d0d 1217 fhPtSumEtaPhi = new TH2F ("hPtSumEtaPhi","#delta^{2}_{#eta #phi} = #Sigma w_{i}(#phi_{i} #eta_{i} ) / #Sigma w_{i} - <#phi><#eta> vs #it{p}_{T}",
85c4406e 1218 nptbins,ptmin,ptmax, 2*ssbins,-ssmax,ssmax);
5ba76d0d 1219 fhPtSumEtaPhi->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1220 fhPtSumEtaPhi->SetYTitle("#delta^{2}_{#eta #phi}");
1221 outputContainer->Add(fhPtSumEtaPhi);
bfdcf7fb 1222
5ba76d0d 1223 fhPtDispEtaPhiDiff = new TH2F ("hPtDispEtaPhiDiff","#sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta} vs #it{p}_{T}",
85c4406e 1224 nptbins,ptmin,ptmax,200, -10,10);
5ba76d0d 1225 fhPtDispEtaPhiDiff->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1226 fhPtDispEtaPhiDiff->SetYTitle("#sigma^{2}_{#phi #phi}-#sigma^{2}_{#eta #eta}");
1227 outputContainer->Add(fhPtDispEtaPhiDiff);
bfdcf7fb 1228
5ba76d0d 1229 fhPtSphericity = new TH2F ("hPtSphericity","(#sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta}) / (#sigma^{2}_{#eta #eta} + #sigma^{2}_{#phi #phi}) vs #it{p}_{T} (GeV/#it{c})",
85c4406e 1230 nptbins,ptmin,ptmax, 200, -1,1);
5ba76d0d 1231 fhPtSphericity->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1232 fhPtSphericity->SetYTitle("s = (#sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta}) / (#sigma^{2}_{#eta #eta} + #sigma^{2}_{#phi #phi})");
1233 outputContainer->Add(fhPtSphericity);
bfdcf7fb 1234
764ab1f4 1235 for(Int_t i = 0; i < 7; i++)
1236 {
85c4406e 1237 fhDispEtaDispPhi[i] = new TH2F (Form("hDispEtaDispPhi_EBin%d",i),Form("#sigma^{2}_{#phi #phi} vs #sigma^{2}_{#eta #eta} for %d < E < %d GeV",bin[i],bin[i+1]),
1238 ssbins,ssmin,ssmax , ssbins,ssmin,ssmax);
764ab1f4 1239 fhDispEtaDispPhi[i]->SetXTitle("#sigma^{2}_{#eta #eta}");
1240 fhDispEtaDispPhi[i]->SetYTitle("#sigma^{2}_{#phi #phi}");
85c4406e 1241 outputContainer->Add(fhDispEtaDispPhi[i]);
764ab1f4 1242
85c4406e 1243 fhLambda0DispEta[i] = new TH2F (Form("hLambda0DispEta_EBin%d",i),Form("#lambda^{2}_{0} vs #sigma^{2}_{#eta #eta} for %d < E < %d GeV",bin[i],bin[i+1]),
1244 ssbins,ssmin,ssmax , ssbins,ssmin,ssmax);
764ab1f4 1245 fhLambda0DispEta[i]->SetXTitle("#lambda^{2}_{0}");
1246 fhLambda0DispEta[i]->SetYTitle("#sigma^{2}_{#eta #eta}");
85c4406e 1247 outputContainer->Add(fhLambda0DispEta[i]);
764ab1f4 1248
85c4406e 1249 fhLambda0DispPhi[i] = new TH2F (Form("hLambda0DispPhi_EBin%d",i),Form("#lambda^{2}_{0}} vs #sigma^{2}_{#phi #phi} for %d < E < %d GeV",bin[i],bin[i+1]),
1250 ssbins,ssmin,ssmax , ssbins,ssmin,ssmax);
764ab1f4 1251 fhLambda0DispPhi[i]->SetXTitle("#lambda^{2}_{0}");
1252 fhLambda0DispPhi[i]->SetYTitle("#sigma^{2}_{#phi #phi}");
85c4406e 1253 outputContainer->Add(fhLambda0DispPhi[i]);
764ab1f4 1254
1255 }
34c16486 1256 }
85c4406e 1257 }
08c09f10 1258
1259 fhNLocMaxPt = new TH2F("hNLocMaxPt","Number of local maxima in cluster, selected clusters",
1260 nptbins,ptmin,ptmax,20,0,20);
1261 fhNLocMaxPt ->SetYTitle("N maxima");
5ba76d0d 1262 fhNLocMaxPt ->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1263 outputContainer->Add(fhNLocMaxPt) ;
1264
9f48b3f0 1265 for(Int_t iSM = 0; iSM < GetCaloUtils()->GetNumberOfSuperModulesUsed(); iSM++)
2dc84d31 1266 {
1267 fhNLocMaxPtSM[iSM] = new TH2F(Form("hNLocMaxPt_SM%d",iSM),Form("Number of local maxima in cluster, selected clusters in SM %d",iSM),
1268 nptbins,ptmin,ptmax,20,0,20);
1269 fhNLocMaxPtSM[iSM] ->SetYTitle("N maxima");
5ba76d0d 1270 fhNLocMaxPtSM[iSM] ->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2dc84d31 1271 outputContainer->Add(fhNLocMaxPtSM[iSM]) ;
1272 }
1273
6e66993c 1274 if(fAnaType == kSSCalo)
1275 {
3a4c49b7 1276
1277 fhNLocMaxPtReject = new TH2F("hNLocMaxPtReject","Number of local maxima in cluster, rejected clusters",
08c09f10 1278 nptbins,ptmin,ptmax,20,0,20);
3a4c49b7 1279 fhNLocMaxPtReject ->SetYTitle("N maxima");
5ba76d0d 1280 fhNLocMaxPtReject ->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3a4c49b7 1281 outputContainer->Add(fhNLocMaxPtReject) ;
6e66993c 1282 }
521636d2 1283
85c4406e 1284 for (Int_t i = 0; i < 3; i++)
34c16486 1285 {
08c09f10 1286 fhPtLambda0LocMax[i] = new TH2F(Form("hPtLambda0LocMax%d",i+1),
5ba76d0d 1287 Form("Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #lambda_{0}, NLM=%s",nlm[i].Data()),
85c4406e 1288 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
08c09f10 1289 fhPtLambda0LocMax[i]->SetYTitle("#lambda_{0}^{2}");
5ba76d0d 1290 fhPtLambda0LocMax[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1291 outputContainer->Add(fhPtLambda0LocMax[i]) ;
1292
1293 if(IsDataMC())
1294 {
1295 for(Int_t ipart = 0; ipart < 6; ipart++)
1296 {
1297 fhMCPtLambda0LocMax[ipart][i] = new TH2F
1298 (Form("hPtLambda0LocMax%d_MC%s",i+1,pname[ipart].Data()),
5ba76d0d 1299 Form("Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #lambda_{0}, NLM=%s, MC %s",nlm[i].Data(),pname[ipart].Data()),
08c09f10 1300 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1301 fhMCPtLambda0LocMax[ipart][i]->SetYTitle("#lambda_{0}^{2}");
5ba76d0d 1302 fhMCPtLambda0LocMax[ipart][i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1303 outputContainer->Add(fhMCPtLambda0LocMax[ipart][i]) ;
1304 }
1305 }
34c16486 1306
08c09f10 1307 fhPtLambda1LocMax[i] = new TH2F(Form("hPtLambda1LocMax%d",i+1),
5ba76d0d 1308 Form("Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #lambda_{1}, %s",nlm[i].Data()),
85c4406e 1309 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
08c09f10 1310 fhPtLambda1LocMax[i]->SetYTitle("#lambda_{1}^{2}");
5ba76d0d 1311 fhPtLambda1LocMax[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1312 outputContainer->Add(fhPtLambda1LocMax[i]) ;
34c16486 1313
08c09f10 1314 fhPtDispersionLocMax[i] = new TH2F(Form("hPtDispersionLocMax%d",i+1),
5ba76d0d 1315 Form("Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs dispersion^{2}, %s",nlm[i].Data()),
85c4406e 1316 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
08c09f10 1317 fhPtDispersionLocMax[i]->SetYTitle("dispersion^{2}");
5ba76d0d 1318 fhPtDispersionLocMax[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1319 outputContainer->Add(fhPtDispersionLocMax[i]) ;
34c16486 1320
764ab1f4 1321 if(fCalorimeter == "EMCAL" && !fFillOnlySimpleSSHisto)
34c16486 1322 {
08c09f10 1323 fhPtDispEtaLocMax[i] = new TH2F(Form("hPtDispEtaLocMax%d",i+1),
5ba76d0d 1324 Form("Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #sigma_{#eta #eta}, %s",nlm[i].Data()),
85c4406e 1325 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
08c09f10 1326 fhPtDispEtaLocMax[i]->SetYTitle("#sigma_{#eta #eta}");
5ba76d0d 1327 fhPtDispEtaLocMax[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1328 outputContainer->Add(fhPtDispEtaLocMax[i]) ;
34c16486 1329
08c09f10 1330 fhPtDispPhiLocMax[i] = new TH2F(Form("hPtDispPhiLocMax%d",i+1),
5ba76d0d 1331 Form("Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #sigma_{#phi #phi}, %s",nlm[i].Data()),
85c4406e 1332 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
08c09f10 1333 fhPtDispPhiLocMax[i]->SetYTitle("#sigma_{#phi #phi}");
5ba76d0d 1334 fhPtDispPhiLocMax[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1335 outputContainer->Add(fhPtDispPhiLocMax[i]) ;
34c16486 1336
08c09f10 1337 fhPtSumEtaPhiLocMax[i] = new TH2F(Form("hPtSumEtaPhiLocMax%d",i+1),
5ba76d0d 1338 Form("Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #sigma_{#eta #phi}, %s",nlm[i].Data()),
85c4406e 1339 nptbins,ptmin,ptmax,2*ssbins,-ssmax,ssmax);
08c09f10 1340 fhPtSumEtaPhiLocMax[i]->SetYTitle("#sigma_{#eta #phi}");
5ba76d0d 1341 fhPtSumEtaPhiLocMax[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1342 outputContainer->Add(fhPtSumEtaPhiLocMax[i]) ;
34c16486 1343
08c09f10 1344 fhPtDispEtaPhiDiffLocMax[i] = new TH2F(Form("hPtDispEtaPhiDiffLocMax%d",i+1),
5ba76d0d 1345 Form("Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #sigma_{#phi #phi} - #sigma_{#eta #eta}, %s",nlm[i].Data()),
85c4406e 1346 nptbins,ptmin,ptmax,200, -10,10);
08c09f10 1347 fhPtDispEtaPhiDiffLocMax[i]->SetYTitle("#sigma_{#phi #phi} - #sigma_{#eta #eta}");
5ba76d0d 1348 fhPtDispEtaPhiDiffLocMax[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1349 outputContainer->Add(fhPtDispEtaPhiDiffLocMax[i]) ;
34c16486 1350
08c09f10 1351 fhPtSphericityLocMax[i] = new TH2F(Form("hPtSphericityLocMax%d",i+1),
5ba76d0d 1352 Form("Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #sigma_{#phi #phi} - #sigma_{#eta #eta} / (#sigma_{#phi #phi} + #sigma_{#eta #eta}), %s",nlm[i].Data()),
85c4406e 1353 nptbins,ptmin,ptmax,200, -1,1);
08c09f10 1354 fhPtSphericityLocMax[i]->SetYTitle("#sigma_{#phi #phi} - #sigma_{#eta #eta} / (#sigma_{#phi #phi} + #sigma_{#eta #eta})");
5ba76d0d 1355 fhPtSphericityLocMax[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1356 outputContainer->Add(fhPtSphericityLocMax[i]) ;
34c16486 1357 }
34c16486 1358
85c4406e 1359 }
1360
08c09f10 1361 fhPtNCells = new TH2F ("hPtNCells","N cells in cluster vs E ", nptbins,ptmin,ptmax, nbins,nmin,nmax);
5ba76d0d 1362 fhPtNCells->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1363 fhPtNCells->SetYTitle("# of cells in cluster");
1364 outputContainer->Add(fhPtNCells);
42d47cb7 1365
08c09f10 1366 fhPtTime = new TH2F("hPtTime","cluster time vs pair E",nptbins,ptmin,ptmax, tbins,tmin,tmax);
5ba76d0d 1367 fhPtTime->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1368 fhPtTime->SetYTitle("t (ns)");
1369 outputContainer->Add(fhPtTime);
521636d2 1370
764ab1f4 1371 }
e7fd282f 1372
85c4406e 1373
1374 fhEPairDiffTime = new TH2F("hEPairDiffTime","cluster pair time difference vs E",nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
5ba76d0d 1375 fhEPairDiffTime->SetXTitle("#it{E}_{pair} (GeV)");
85c4406e 1376 fhEPairDiffTime->SetYTitle("#Delta t (ns)");
1377 outputContainer->Add(fhEPairDiffTime);
a1fd1b69 1378
1379 if(fAnaType == kIMCalo)
1380 {
3c1d9afb 1381 TString combiName [] = {"1LocMax","2LocMax","NLocMax","1LocMax2LocMax","1LocMaxNLocMax","2LocMaxNLocMax","1LocMaxSSBad","NLocMaxSSGood"};
5c46c992 1382 TString combiTitle[] = {"1 Local Maxima in both clusters","2 Local Maxima in both clusters","more than 2 Local Maxima in both clusters",
1383 "1 Local Maxima paired with 2 Local Maxima","1 Local Maxima paired with more than 2 Local Maxima",
3c1d9afb 1384 "2 Local Maxima paired with more than 2 Local Maxima",
1385 "1 Local Maxima paired with #lambda_{0}^{2}>0.3","N Local Maxima paired with 0.1<#lambda_{0}^{2}<0.3"};
85c4406e 1386
1387 for (Int_t i = 0; i < 8 ; i++)
5c46c992 1388 {
85c4406e 1389
1390 if (fAnaType == kIMCaloTracks && i > 2 ) continue ;
1391
5c46c992 1392 fhMassPairLocMax[i] = new TH2F
1393 (Form("MassPairLocMax%s",combiName[i].Data()),
5ba76d0d 1394 Form("#it{M} for decay #gamma pair vs #it{E}_{pair}, origin #pi^{0}, %s", combiTitle[i].Data()),
85c4406e 1395 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
5ba76d0d 1396 fhMassPairLocMax[i]->SetYTitle("#it{M} (GeV/#it{c}^{2})");
1397 fhMassPairLocMax[i]->SetXTitle("#it{E}_{pair} (GeV)");
85c4406e 1398 outputContainer->Add(fhMassPairLocMax[i]) ;
5c46c992 1399 }
e7fd282f 1400 }
477d6cee 1401
b5dbb99b 1402 if(fFillTMHisto)
1403 {
09273901 1404 fhTrackMatchedDEta = new TH2F
31ae6d59 1405 ("hTrackMatchedDEta",
5ba76d0d 1406 "d#eta of cluster-track vs cluster #it{p}_{T}",
85c4406e 1407 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
09273901 1408 fhTrackMatchedDEta->SetYTitle("d#eta");
5ba76d0d 1409 fhTrackMatchedDEta->SetXTitle("#it{p}_{T} (GeV/#it{c})");
09273901 1410
1411 fhTrackMatchedDPhi = new TH2F
31ae6d59 1412 ("hTrackMatchedDPhi",
5ba76d0d 1413 "d#phi of cluster-track vs cluster #it{p}_{T}",
85c4406e 1414 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
09273901 1415 fhTrackMatchedDPhi->SetYTitle("d#phi (rad)");
5ba76d0d 1416 fhTrackMatchedDPhi->SetXTitle("#it{p}_{T} (GeV/#it{c})");
09273901 1417
1418 fhTrackMatchedDEtaDPhi = new TH2F
31ae6d59 1419 ("hTrackMatchedDEtaDPhi",
08c09f10 1420 "d#eta vs d#phi of cluster-track",
85c4406e 1421 nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax);
09273901 1422 fhTrackMatchedDEtaDPhi->SetYTitle("d#phi (rad)");
85c4406e 1423 fhTrackMatchedDEtaDPhi->SetXTitle("d#eta");
09273901 1424
85c4406e 1425 outputContainer->Add(fhTrackMatchedDEta) ;
09273901 1426 outputContainer->Add(fhTrackMatchedDPhi) ;
1427 outputContainer->Add(fhTrackMatchedDEtaDPhi) ;
b2e375c7 1428
1429 fhTrackMatchedDEtaPos = new TH2F
1430 ("hTrackMatchedDEtaPos",
5ba76d0d 1431 "d#eta of cluster-track vs cluster #it{p}_{T}",
b2e375c7 1432 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
1433 fhTrackMatchedDEtaPos->SetYTitle("d#eta");
5ba76d0d 1434 fhTrackMatchedDEtaPos->SetXTitle("#it{p}_{T} (GeV/#it{c})");
b2e375c7 1435
1436 fhTrackMatchedDPhiPos = new TH2F
1437 ("hTrackMatchedDPhiPos",
5ba76d0d 1438 "d#phi of cluster-track vs cluster #it{p}_{T}",
b2e375c7 1439 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
1440 fhTrackMatchedDPhiPos->SetYTitle("d#phi (rad)");
5ba76d0d 1441 fhTrackMatchedDPhiPos->SetXTitle("#it{p}_{T} (GeV/#it{c})");
b2e375c7 1442
1443 fhTrackMatchedDEtaDPhiPos = new TH2F
1444 ("hTrackMatchedDEtaDPhiPos",
08c09f10 1445 "d#eta vs d#phi of cluster-track",
b2e375c7 1446 nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax);
1447 fhTrackMatchedDEtaDPhiPos->SetYTitle("d#phi (rad)");
1448 fhTrackMatchedDEtaDPhiPos->SetXTitle("d#eta");
1449
1450 outputContainer->Add(fhTrackMatchedDEtaPos) ;
1451 outputContainer->Add(fhTrackMatchedDPhiPos) ;
1452 outputContainer->Add(fhTrackMatchedDEtaDPhiPos) ;
1453
1454 fhTrackMatchedDEtaNeg = new TH2F
1455 ("hTrackMatchedDEtaNeg",
5ba76d0d 1456 "d#eta of cluster-track vs cluster #it{p}_{T}",
b2e375c7 1457 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
1458 fhTrackMatchedDEtaNeg->SetYTitle("d#eta");
5ba76d0d 1459 fhTrackMatchedDEtaNeg->SetXTitle("#it{p}_{T} (GeV/#it{c})");
b2e375c7 1460
1461 fhTrackMatchedDPhiNeg = new TH2F
1462 ("hTrackMatchedDPhiNeg",
5ba76d0d 1463 "d#phi of cluster-track vs cluster #it{p}_{T}",
b2e375c7 1464 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
1465 fhTrackMatchedDPhiNeg->SetYTitle("d#phi (rad)");
5ba76d0d 1466 fhTrackMatchedDPhiNeg->SetXTitle("#it{p}_{T} (GeV/#it{c})");
b2e375c7 1467
1468 fhTrackMatchedDEtaDPhiNeg = new TH2F
1469 ("hTrackMatchedDEtaDPhiNeg",
08c09f10 1470 "d#eta vs d#phi of cluster-track",
b2e375c7 1471 nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax);
1472 fhTrackMatchedDEtaDPhiNeg->SetYTitle("d#phi (rad)");
1473 fhTrackMatchedDEtaDPhiNeg->SetXTitle("d#eta");
1474
1475 outputContainer->Add(fhTrackMatchedDEtaNeg) ;
1476 outputContainer->Add(fhTrackMatchedDPhiNeg) ;
1477 outputContainer->Add(fhTrackMatchedDEtaDPhiNeg) ;
31ae6d59 1478
5ba76d0d 1479 fhdEdx = new TH2F ("hdEdx","matched track <dE/dx> vs cluster #it{p}_{T}", nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
1480 fhdEdx->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1481 fhdEdx->SetYTitle("<#it{dE}/#it{dx}>");
85c4406e 1482 outputContainer->Add(fhdEdx);
31ae6d59 1483
5ba76d0d 1484 fhEOverP = new TH2F ("hEOverP","matched track E/p vs cluster #it{p}_{T}", nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
1485 fhEOverP->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1486 fhEOverP->SetYTitle("#it{E}/#it{p}");
85c4406e 1487 outputContainer->Add(fhEOverP);
b5dbb99b 1488
4d1d8f00 1489 if(fCalorimeter=="EMCAL" && GetFirstSMCoveredByTRD() >=0)
b5dbb99b 1490 {
85c4406e 1491 fhEOverPNoTRD = new TH2F ("hEOverPNoTRD","matched track E/p vs cluster E, SM not behind TRD ", nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
5ba76d0d 1492 fhEOverPNoTRD->SetXTitle("#it{E} (GeV)");
1493 fhEOverPNoTRD->SetYTitle("#it{E}/#it{p}");
85c4406e 1494 outputContainer->Add(fhEOverPNoTRD);
1495 }
31ae6d59 1496
764ab1f4 1497 if(IsDataMC() && fFillTMHisto)
31ae6d59 1498 {
08c09f10 1499 fhTrackMatchedMCParticlePt = new TH2F
1500 ("hTrackMatchedMCParticlePt",
31ae6d59 1501 "Origin of particle vs energy",
85c4406e 1502 nptbins,ptmin,ptmax,8,0,8);
5ba76d0d 1503 fhTrackMatchedMCParticlePt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1504 //fhTrackMatchedMCParticlePt->SetYTitle("Particle type");
5dde270e 1505
08c09f10 1506 fhTrackMatchedMCParticlePt->GetYaxis()->SetBinLabel(1 ,"Photon");
1507 fhTrackMatchedMCParticlePt->GetYaxis()->SetBinLabel(2 ,"Electron");
1508 fhTrackMatchedMCParticlePt->GetYaxis()->SetBinLabel(3 ,"Meson Merged");
1509 fhTrackMatchedMCParticlePt->GetYaxis()->SetBinLabel(4 ,"Rest");
1510 fhTrackMatchedMCParticlePt->GetYaxis()->SetBinLabel(5 ,"Conv. Photon");
1511 fhTrackMatchedMCParticlePt->GetYaxis()->SetBinLabel(6 ,"Conv. Electron");
1512 fhTrackMatchedMCParticlePt->GetYaxis()->SetBinLabel(7 ,"Conv. Merged");
1513 fhTrackMatchedMCParticlePt->GetYaxis()->SetBinLabel(8 ,"Conv. Rest");
5dde270e 1514
08c09f10 1515 outputContainer->Add(fhTrackMatchedMCParticlePt);
5dde270e 1516
1517 fhTrackMatchedMCParticleDEta = new TH2F
1518 ("hTrackMatchedMCParticleDEta",
1519 "Origin of particle vs #eta residual",
1520 nresetabins,resetamin,resetamax,8,0,8);
1521 fhTrackMatchedMCParticleDEta->SetXTitle("#Delta #eta");
1522 //fhTrackMatchedMCParticleDEta->SetYTitle("Particle type");
31ae6d59 1523
5dde270e 1524 fhTrackMatchedMCParticleDEta->GetYaxis()->SetBinLabel(1 ,"Photon");
1525 fhTrackMatchedMCParticleDEta->GetYaxis()->SetBinLabel(2 ,"Electron");
1526 fhTrackMatchedMCParticleDEta->GetYaxis()->SetBinLabel(3 ,"Meson Merged");
1527 fhTrackMatchedMCParticleDEta->GetYaxis()->SetBinLabel(4 ,"Rest");
1528 fhTrackMatchedMCParticleDEta->GetYaxis()->SetBinLabel(5 ,"Conv. Photon");
1529 fhTrackMatchedMCParticleDEta->GetYaxis()->SetBinLabel(6 ,"Conv. Electron");
1530 fhTrackMatchedMCParticleDEta->GetYaxis()->SetBinLabel(7 ,"Conv. Merged");
1531 fhTrackMatchedMCParticleDEta->GetYaxis()->SetBinLabel(8 ,"Conv. Rest");
1532
1533 outputContainer->Add(fhTrackMatchedMCParticleDEta);
85c4406e 1534
5dde270e 1535 fhTrackMatchedMCParticleDPhi = new TH2F
1536 ("hTrackMatchedMCParticleDPhi",
1537 "Origin of particle vs #phi residual",
1538 nresphibins,resphimin,resphimax,8,0,8);
1539 fhTrackMatchedMCParticleDPhi->SetXTitle("#Delta #phi");
1540 //fhTrackMatchedMCParticleDPhi->SetYTitle("Particle type");
1541
1542 fhTrackMatchedMCParticleDPhi->GetYaxis()->SetBinLabel(1 ,"Photon");
1543 fhTrackMatchedMCParticleDPhi->GetYaxis()->SetBinLabel(2 ,"Electron");
1544 fhTrackMatchedMCParticleDPhi->GetYaxis()->SetBinLabel(3 ,"Meson Merged");
1545 fhTrackMatchedMCParticleDPhi->GetYaxis()->SetBinLabel(4 ,"Rest");
1546 fhTrackMatchedMCParticleDPhi->GetYaxis()->SetBinLabel(5 ,"Conv. Photon");
1547 fhTrackMatchedMCParticleDPhi->GetYaxis()->SetBinLabel(6 ,"Conv. Electron");
1548 fhTrackMatchedMCParticleDPhi->GetYaxis()->SetBinLabel(7 ,"Conv. Merged");
1549 fhTrackMatchedMCParticleDPhi->GetYaxis()->SetBinLabel(8 ,"Conv. Rest");
1550
1551 outputContainer->Add(fhTrackMatchedMCParticleDPhi);
85c4406e 1552
31ae6d59 1553
31ae6d59 1554 }
85c4406e 1555 }
09273901 1556
b5dbb99b 1557 if(fFillWeightHistograms)
1558 {
78a28af3 1559 fhECellClusterRatio = new TH2F ("hECellClusterRatio"," cell energy / cluster energy vs cluster energy, for selected decay photons from neutral meson",
85c4406e 1560 nptbins,ptmin,ptmax, 100,0,1.);
5ba76d0d 1561 fhECellClusterRatio->SetXTitle("#it{E}_{cluster} (GeV) ");
1562 fhECellClusterRatio->SetYTitle("#it{E}_{cell i}/#it{E}_{cluster}");
78a28af3 1563 outputContainer->Add(fhECellClusterRatio);
1564
1565 fhECellClusterLogRatio = new TH2F ("hECellClusterLogRatio"," Log(cell energy / cluster energy) vs cluster energy, for selected decay photons from neutral meson",
85c4406e 1566 nptbins,ptmin,ptmax, 100,-10,0);
5ba76d0d 1567 fhECellClusterLogRatio->SetXTitle("#it{E}_{cluster} (GeV) ");
1568 fhECellClusterLogRatio->SetYTitle("Log (#it{E}_{max cell}/#it{E}_{cluster})");
78a28af3 1569 outputContainer->Add(fhECellClusterLogRatio);
1570
1571 fhEMaxCellClusterRatio = new TH2F ("hEMaxCellClusterRatio"," max cell energy / cluster energy vs cluster energy, for selected decay photons from neutral meson",
85c4406e 1572 nptbins,ptmin,ptmax, 100,0,1.);
5ba76d0d 1573 fhEMaxCellClusterRatio->SetXTitle("#it{E}_{cluster} (GeV) ");
1574 fhEMaxCellClusterRatio->SetYTitle("#it{E}_{max cell}/#it{E}_{cluster}");
78a28af3 1575 outputContainer->Add(fhEMaxCellClusterRatio);
1576
1577 fhEMaxCellClusterLogRatio = new TH2F ("hEMaxCellClusterLogRatio"," Log(max cell energy / cluster energy) vs cluster energy, for selected decay photons from neutral meson",
85c4406e 1578 nptbins,ptmin,ptmax, 100,-10,0);
5ba76d0d 1579 fhEMaxCellClusterLogRatio->SetXTitle("#it{E}_{cluster} (GeV) ");
1580 fhEMaxCellClusterLogRatio->SetYTitle("Log (#it{E}_{max cell}/#it{E}_{cluster})");
78a28af3 1581 outputContainer->Add(fhEMaxCellClusterLogRatio);
1582
b5dbb99b 1583 for(Int_t iw = 0; iw < 14; iw++)
1584 {
1a72f6c5 1585 fhLambda0ForW0[iw] = new TH2F (Form("hLambda0ForW0%d",iw),Form("shower shape, #lambda^{2}_{0} vs E, w0 = %1.1f, for selected decay photons from neutral meson",1+0.5*iw),
85c4406e 1586 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
5ba76d0d 1587 fhLambda0ForW0[iw]->SetXTitle("#it{E}_{cluster}");
78a28af3 1588 fhLambda0ForW0[iw]->SetYTitle("#lambda^{2}_{0}");
85c4406e 1589 outputContainer->Add(fhLambda0ForW0[iw]);
78a28af3 1590
85c4406e 1591 // fhLambda1ForW0[iw] = new TH2F (Form("hLambda1ForW0%d",iw),Form("shower shape, #lambda^{2}_{1} vs E, w0 = %1.1f, for selected decay photons from neutral meson",0.5+0.5*iw),
1592 // nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
5ba76d0d 1593 // fhLambda1ForW0[iw]->SetXTitle("#it{E}_{cluster}");
85c4406e 1594 // fhLambda1ForW0[iw]->SetYTitle("#lambda^{2}_{1}");
1595 // outputContainer->Add(fhLambda1ForW0[iw]);
78a28af3 1596
1597 }
85c4406e 1598 }
78a28af3 1599
85c4406e 1600 if(IsDataMC())
b5dbb99b 1601 {
4bbe6213 1602 // Origin
1603
1604 fhMCPi0PtOrigin = new TH2F("hMCPi0PtOrigin","Reconstructed pair from generated #pi^{0} #it{p}_{T} vs origin",nptbins,ptmin,ptmax,11,0,11) ;
1605 fhMCPi0PtOrigin->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1606 fhMCPi0PtOrigin->SetYTitle("Origin");
1607 fhMCPi0PtOrigin->GetYaxis()->SetBinLabel(1 ,"Status 21");
1608 fhMCPi0PtOrigin->GetYaxis()->SetBinLabel(2 ,"Quark");
1609 fhMCPi0PtOrigin->GetYaxis()->SetBinLabel(3 ,"qq Resonances");
1610 fhMCPi0PtOrigin->GetYaxis()->SetBinLabel(4 ,"Resonances");
1611 fhMCPi0PtOrigin->GetYaxis()->SetBinLabel(5 ,"#rho");
1612 fhMCPi0PtOrigin->GetYaxis()->SetBinLabel(6 ,"#omega");
1613 fhMCPi0PtOrigin->GetYaxis()->SetBinLabel(7 ,"K");
1614 fhMCPi0PtOrigin->GetYaxis()->SetBinLabel(8 ,"Other");
1615 fhMCPi0PtOrigin->GetYaxis()->SetBinLabel(9 ,"#eta");
1616 fhMCPi0PtOrigin->GetYaxis()->SetBinLabel(10 ,"#eta prime");
1617 outputContainer->Add(fhMCPi0PtOrigin) ;
1618
1619 fhMCEtaPtOrigin = new TH2F("hMCEtaPtOrigin","Reconstructed pair from generated #pi^{0} #it{p}_{T} vs origin",nptbins,ptmin,ptmax,7,0,7) ;
1620 fhMCEtaPtOrigin->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1621 fhMCEtaPtOrigin->SetYTitle("Origin");
1622 fhMCEtaPtOrigin->GetYaxis()->SetBinLabel(1 ,"Status 21");
1623 fhMCEtaPtOrigin->GetYaxis()->SetBinLabel(2 ,"Quark");
1624 fhMCEtaPtOrigin->GetYaxis()->SetBinLabel(3 ,"qq Resonances");
1625 fhMCEtaPtOrigin->GetYaxis()->SetBinLabel(4 ,"Resonances");
1626 fhMCEtaPtOrigin->GetYaxis()->SetBinLabel(5 ,"Other");
1627 fhMCEtaPtOrigin->GetYaxis()->SetBinLabel(6 ,"#eta prime");
1628 outputContainer->Add(fhMCEtaPtOrigin) ;
1629
d4546932 1630 fhMCPi0ProdVertex = new TH2F("hMCPi0ProdVertex","Selected reco pair from generated #pi^{0} #it{p}_{T} vs production vertex",200,ptmin,20+ptmin,5000,0,500) ;
4bbe6213 1631 fhMCPi0ProdVertex->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1632 fhMCPi0ProdVertex->SetYTitle("#it{R} (cm)");
1633 outputContainer->Add(fhMCPi0ProdVertex) ;
1634
d4546932 1635 fhMCEtaProdVertex = new TH2F("hMCEtaProdVertex","Selected reco pair from generated #eta #it{p}_{T} vs production vertex",200,ptmin,20+ptmin,5000,0,500) ;
4bbe6213 1636 fhMCEtaProdVertex->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1637 fhMCEtaProdVertex->SetYTitle("#it{R} (cm)");
1638 outputContainer->Add(fhMCEtaProdVertex) ;
1639
3455f821 1640 if(GetReader()->GetDataType() != AliCaloTrackReader::kMC && fAnaType==kSSCalo)
1641 {
5ba76d0d 1642 fhMCPi0PtGenRecoFraction = new TH2F("hMCPi0PtGenRecoFraction","Number of clusters from #pi^{0} (2 #gamma) identified as #pi^{0} (#eta), #it{p}_{T} versus E primary #pi^{0} / E reco",
85c4406e 1643 nptbins,ptmin,ptmax,200,0,2);
5ba76d0d 1644 fhMCPi0PtGenRecoFraction->SetXTitle("#it{p}^{rec}_{T} (GeV/#it{c})");
1645 fhMCPi0PtGenRecoFraction->SetYTitle("#it{E}^{#pi^{0} mother} / #it{E}^{rec}");
85c4406e 1646 outputContainer->Add(fhMCPi0PtGenRecoFraction) ;
1647
5ba76d0d 1648 fhMCEtaPtGenRecoFraction = new TH2F("hMCEtaPtGenRecoFraction","Number of clusters from #eta (2 #gamma) identified as #pi^{0} (#eta),#it{p}_{T} versus E primary #eta / E reco",
85c4406e 1649 nptbins,ptmin,ptmax,200,0,2);
5ba76d0d 1650 fhMCEtaPtGenRecoFraction->SetXTitle("#it{p}^{rec}_{T} (GeV/#it{c})");
1651 fhMCEtaPtGenRecoFraction->SetYTitle("#it{E}^{ #eta mother} / #it{E}^{rec}");
85c4406e 1652 outputContainer->Add(fhMCEtaPtGenRecoFraction) ;
51a0ace5 1653
85c4406e 1654 fhMCPi0DecayPt = new TH1F("hMCPi0DecayPt","Number of #gamma from #pi^{0} decay identified as #pi^{0} (#eta)",nptbins,ptmin,ptmax);
5ba76d0d 1655 fhMCPi0DecayPt->SetYTitle("#it{N}");
1656 fhMCPi0DecayPt->SetXTitle("#it{p}^{rec}_{T} (GeV/#it{c})");
85c4406e 1657 outputContainer->Add(fhMCPi0DecayPt) ;
3455f821 1658
5ba76d0d 1659 fhMCPi0DecayPtFraction = new TH2F("hMCPi0DecayPtFraction","Number of #gamma from #pi^{0} decay identified as #pi^{0} (#eta), #it{p}_{T} versus E primary #gamma / #it{E} primary #pi^{0}",
85c4406e 1660 nptbins,ptmin,ptmax,100,0,1);
5ba76d0d 1661 fhMCPi0DecayPtFraction->SetXTitle("p^{rec}_{T} (GeV/#it{c})");
883411b2 1662 fhMCPi0DecayPtFraction->SetYTitle("E^{gen} / E^{gen-mother}");
85c4406e 1663 outputContainer->Add(fhMCPi0DecayPtFraction) ;
3455f821 1664
85c4406e 1665 fhMCEtaDecayPt = new TH1F("hMCEtaDecayPt","Number of #gamma from #eta decay identified as #pi^{0} (#eta)",nptbins,ptmin,ptmax);
5ba76d0d 1666 fhMCEtaDecayPt->SetYTitle("#it{N}");
1667 fhMCEtaDecayPt->SetXTitle("#it{p}^{rec}_{T} (GeV/#it{c})");
85c4406e 1668 outputContainer->Add(fhMCEtaDecayPt) ;
3455f821 1669
5ba76d0d 1670 fhMCEtaDecayPtFraction = new TH2F("hMCEtaDecayPtFraction","Number of #gamma from #eta decay identified as #pi^{0} (#eta), #it{p}_{T} versus E primary #gamma / E primary #eta",
85c4406e 1671 nptbins,ptmin,ptmax,100,0,1);
5ba76d0d 1672 fhMCEtaDecayPtFraction->SetXTitle("#it{p}^{rec}_{T} (GeV/#it{c})");
1673 fhMCEtaDecayPtFraction->SetYTitle("#it{E}^{gen} / #it{E}^{gen-mother}");
85c4406e 1674 outputContainer->Add(fhMCEtaDecayPtFraction) ;
3455f821 1675
85c4406e 1676 fhMCOtherDecayPt = new TH1F("hMCOtherDecayPt","Number of #gamma decay (not #eta or #pi^{0}) identified as #pi^{0} (#eta)",nptbins,ptmin,ptmax);
5ba76d0d 1677 fhMCOtherDecayPt->SetYTitle("#it{N}");
1678 fhMCOtherDecayPt->SetXTitle("#it{p}^{rec}_{T} (GeV/#it{c})");
85c4406e 1679 outputContainer->Add(fhMCOtherDecayPt) ;
3455f821 1680
1681 }
85c4406e 1682
1683 if((GetReader()->GetDataType() == AliCaloTrackReader::kMC && fAnaType!=kSSCalo) ||
b5dbb99b 1684 GetReader()->GetDataType() != AliCaloTrackReader::kMC)
1685 {
477d6cee 1686
b5dbb99b 1687 fhAnglePairMCPi0 = new TH2F
1688 ("AnglePairMCPi0",
5ba76d0d 1689 "Angle between decay #gamma pair vs #it{E}_{pair}, origin #pi^{0}",nptbins,ptmin,ptmax,250,0,0.5);
b5dbb99b 1690 fhAnglePairMCPi0->SetYTitle("#alpha (rad)");
5ba76d0d 1691 fhAnglePairMCPi0->SetXTitle("#it{E}_{pair} (GeV)");
85c4406e 1692 outputContainer->Add(fhAnglePairMCPi0) ;
1693
af722ce4 1694 if (fAnaType!= kSSCalo)
1695 {
1696 fhAnglePairMCEta = new TH2F
1697 ("AnglePairMCEta",
5ba76d0d 1698 "Angle between decay #gamma pair vs #it{E}_{pair}, origin #eta",nptbins,ptmin,ptmax,250,0,0.5);
af722ce4 1699 fhAnglePairMCEta->SetYTitle("#alpha (rad)");
5ba76d0d 1700 fhAnglePairMCEta->SetXTitle("#it{E}_{pair} (GeV)");
85c4406e 1701 outputContainer->Add(fhAnglePairMCEta) ;
af722ce4 1702
1703 fhMassPairMCPi0 = new TH2F
1704 ("MassPairMCPi0",
5ba76d0d 1705 "#it{M} for decay #gamma pair vs #it{E}_{pair}, origin #pi^{0}",nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
1706 fhMassPairMCPi0->SetYTitle("#it{M} (GeV/#it{c}^{2})");
1707 fhMassPairMCPi0->SetXTitle("#it{E}_{pair} (GeV)");
85c4406e 1708 outputContainer->Add(fhMassPairMCPi0) ;
af722ce4 1709
1710 fhMassPairMCEta = new TH2F
1711 ("MassPairMCEta",
5ba76d0d 1712 "#it{M} for decay #gamma pair vs #it{E}_{pair}, origin #eta",nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
1713 fhMassPairMCEta->SetYTitle("#it{M} (GeV/#it{c}^{2})");
1714 fhMassPairMCEta->SetXTitle("#it{E}_{pair} (GeV)");
85c4406e 1715 outputContainer->Add(fhMassPairMCEta) ;
af722ce4 1716 }
e4ef72be 1717
3455f821 1718 for(Int_t i = 0; i < 6; i++)
85c4406e 1719 {
3455f821 1720
40d3ce60 1721 fhMCE[i] = new TH1F
2928c46d 1722 (Form("hE_MC%s",pname[i].Data()),
40d3ce60 1723 Form("Identified as #pi^{0} (#eta), cluster from %s",
1724 ptype[i].Data()),
85c4406e 1725 nptbins,ptmin,ptmax);
5ba76d0d 1726 fhMCE[i]->SetYTitle("#it{N}");
1727 fhMCE[i]->SetXTitle("#it{E} (GeV)");
85c4406e 1728 outputContainer->Add(fhMCE[i]) ;
40d3ce60 1729
3455f821 1730 fhMCPt[i] = new TH1F
1731 (Form("hPt_MC%s",pname[i].Data()),
1732 Form("Identified as #pi^{0} (#eta), cluster from %s",
1733 ptype[i].Data()),
85c4406e 1734 nptbins,ptmin,ptmax);
5ba76d0d 1735 fhMCPt[i]->SetYTitle("#it{N}");
1736 fhMCPt[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
85c4406e 1737 outputContainer->Add(fhMCPt[i]) ;
3455f821 1738
17f5b4b6 1739 fhMCPtCentrality[i] = new TH2F
1740 (Form("hPtCentrality_MC%s",pname[i].Data()),
1741 Form("Identified as #pi^{0} (#eta), cluster from %s",
1742 ptype[i].Data()),
1743 nptbins,ptmin,ptmax, 100,0,100);
1744 fhMCPtCentrality[i]->SetYTitle("centrality");
5ba76d0d 1745 fhMCPtCentrality[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
17f5b4b6 1746 outputContainer->Add(fhMCPtCentrality[i]) ;
1747
40d3ce60 1748 if(fAnaType == kSSCalo)
1749 {
6e66993c 1750 fhMCNLocMaxPt[i] = new TH2F
1751 (Form("hNLocMaxPt_MC%s",pname[i].Data()),
5ba76d0d 1752 Form("cluster from %s, #it{p}_{T} of cluster vs NLM, accepted",ptype[i].Data()),
08c09f10 1753 nptbins,ptmin,ptmax,20,0,20);
5ba76d0d 1754 fhMCNLocMaxPt[i] ->SetYTitle("#it{NLM}");
1755 fhMCNLocMaxPt[i] ->SetXTitle("#it{p}_{T} (GeV/#it{c})");
6e66993c 1756 outputContainer->Add(fhMCNLocMaxPt[i]) ;
3a4c49b7 1757
1758 fhMCNLocMaxPtReject[i] = new TH2F
1759 (Form("hNLocMaxPtReject_MC%s",pname[i].Data()),
5ba76d0d 1760 Form("cluster from %s, #it{p}_{T} of cluster vs NLM, rejected",ptype[i].Data()),
08c09f10 1761 nptbins,ptmin,ptmax,20,0,20);
5ba76d0d 1762 fhMCNLocMaxPtReject[i] ->SetYTitle("#it{NLM}");
1763 fhMCNLocMaxPtReject[i] ->SetXTitle("#it{p}_{T} (GeV/#it{c})");
3a4c49b7 1764 outputContainer->Add(fhMCNLocMaxPtReject[i]) ;
85c4406e 1765
40d3ce60 1766 fhMCEReject[i] = new TH1F
1767 (Form("hEReject_MC%s",pname[i].Data()),
1768 Form("Rejected as #pi^{0} (#eta), cluster from %s",
1769 ptype[i].Data()),
85c4406e 1770 nptbins,ptmin,ptmax);
5ba76d0d 1771 fhMCEReject[i]->SetYTitle("#it{N}");
1772 fhMCEReject[i]->SetXTitle("#it{E} (GeV)");
85c4406e 1773 outputContainer->Add(fhMCEReject[i]) ;
40d3ce60 1774
1775 fhMCPtReject[i] = new TH1F
1776 (Form("hPtReject_MC%s",pname[i].Data()),
1777 Form("Rejected as #pi^{0} (#eta), cluster from %s",
1778 ptype[i].Data()),
85c4406e 1779 nptbins,ptmin,ptmax);
5ba76d0d 1780 fhMCPtReject[i]->SetYTitle("#it{N}");
1781 fhMCPtReject[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
85c4406e 1782 outputContainer->Add(fhMCPtReject[i]) ;
40d3ce60 1783 }
1784
08c09f10 1785 fhMCPtPhi[i] = new TH2F
1786 (Form("hPtPhi_MC%s",pname[i].Data()),
3455f821 1787 Form("Identified as #pi^{0} (#eta), cluster from %s",ptype[i].Data()),
85c4406e 1788 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
08c09f10 1789 fhMCPtPhi[i]->SetYTitle("#phi");
5ba76d0d 1790 fhMCPtPhi[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1791 outputContainer->Add(fhMCPtPhi[i]) ;
3455f821 1792
08c09f10 1793 fhMCPtEta[i] = new TH2F
1794 (Form("hPtEta_MC%s",pname[i].Data()),
3455f821 1795 Form("Identified as #pi^{0} (#eta), cluster from %s",
85c4406e 1796 ptype[i].Data()),nptbins,ptmin,ptmax,netabins,etamin,etamax);
08c09f10 1797 fhMCPtEta[i]->SetYTitle("#eta");
5ba76d0d 1798 fhMCPtEta[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1799 outputContainer->Add(fhMCPtEta[i]) ;
85c4406e 1800
29250849 1801 fhMCMassPt[i] = new TH2F
1802 (Form("hMassPt_MC%s",pname[i].Data()),
5ba76d0d 1803 Form("all pairs #it{M}: #it{p}_{T} vs #it{M} from %s",ptype[i].Data()),
29250849 1804 nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
5ba76d0d 1805 fhMCMassPt[i]->SetYTitle("#it{M} (GeV/#it{c}^{2})");
1806 fhMCMassPt[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
29250849 1807 outputContainer->Add(fhMCMassPt[i]) ;
3455f821 1808
29250849 1809 fhMCSelectedMassPt[i] = new TH2F
1810 (Form("hSelectedMassPt_MC%s",pname[i].Data()),
5ba76d0d 1811 Form("Selected #pi^{0} (#eta) pairs #it{M}: #it{p}_{T} vs #it{M} from %s",ptype[i].Data()),
29250849 1812 nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
5ba76d0d 1813 fhMCSelectedMassPt[i]->SetYTitle("#it{M} (GeV/#it{c}^{2})");
1814 fhMCSelectedMassPt[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
29250849 1815 outputContainer->Add(fhMCSelectedMassPt[i]) ;
85c4406e 1816
1253480f 1817 if(fAnaType == kSSCalo)
1818 {
1819 fhMCMassPtNoOverlap[i] = new TH2F
1820 (Form("hMassPtNoOverlap_MC%s",pname[i].Data()),
5ba76d0d 1821 Form("all pairs #it{M}: #it{p}_{T} vs #it{M} from %s, no overlap",ptype[i].Data()),
1253480f 1822 nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
5ba76d0d 1823 fhMCMassPt[i]->SetYTitle("#it{M} (GeV/#it{c}^{2})");
1824 fhMCMassPt[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1253480f 1825 outputContainer->Add(fhMCMassPtNoOverlap[i]) ;
1826
1827 fhMCSelectedMassPtNoOverlap[i] = new TH2F
1828 (Form("hSelectedMassPtNoOverlap_MC%s",pname[i].Data()),
5ba76d0d 1829 Form("Selected #pi^{0} (#eta) pairs #it{M}: #it{p}_{T} vs #it{M} from %s, no overlap",ptype[i].Data()),
1253480f 1830 nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
5ba76d0d 1831 fhMCSelectedMassPtNoOverlap[i]->SetYTitle("#it{M} (GeV/#it{c}^{2})");
1832 fhMCSelectedMassPtNoOverlap[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1253480f 1833 outputContainer->Add(fhMCSelectedMassPtNoOverlap[i]) ;
1834 }
3455f821 1835
1836 if( fFillSelectClHisto )
1837 {
08c09f10 1838 fhMCPtLambda0[i] = new TH2F(Form("hELambda0_MC%s",pname[i].Data()),
5ba76d0d 1839 Form("Selected pair, cluster from %s : #it{p}_{T} vs #lambda_{0}^{2}",ptype[i].Data()),
85c4406e 1840 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
08c09f10 1841 fhMCPtLambda0[i]->SetYTitle("#lambda_{0}^{2}");
5ba76d0d 1842 fhMCPtLambda0[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1843 outputContainer->Add(fhMCPtLambda0[i]) ;
34c16486 1844
08c09f10 1845 fhMCPtLambda1[i] = new TH2F(Form("hELambda1_MC%s",pname[i].Data()),
5ba76d0d 1846 Form("Selected pair, cluster from %s : #it{p}_{T} vs #lambda_{1}^{2}",ptype[i].Data()),
85c4406e 1847 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
08c09f10 1848 fhMCPtLambda1[i]->SetYTitle("#lambda_{1}^{2}");
5ba76d0d 1849 fhMCPtLambda1[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1850 outputContainer->Add(fhMCPtLambda1[i]) ;
34c16486 1851
08c09f10 1852 fhMCPtDispersion[i] = new TH2F(Form("hEDispersion_MC%s",pname[i].Data()),
5ba76d0d 1853 Form("Selected pair, cluster from %s : #it{p}_{T} vs dispersion^{2}",ptype[i].Data()),
85c4406e 1854 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
5ba76d0d 1855 fhMCPtDispersion[i]->SetYTitle("#it{D}^{2}");
1856 fhMCPtDispersion[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1857 outputContainer->Add(fhMCPtDispersion[i]) ;
34c16486 1858
4d1d8f00 1859 if(fCalorimeter=="EMCAL" && GetFirstSMCoveredByTRD() >= 0)
34c16486 1860 {
08c09f10 1861 fhMCPtLambda0NoTRD[i] = new TH2F(Form("hELambda0NoTRD_MC%s",pname[i].Data()),
5ba76d0d 1862 Form("Selected pair, cluster from %s : #it{p}_{T} vs #lambda_{0}^{2}, NoTRD",ptype[i].Data()),
85c4406e 1863 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
08c09f10 1864 fhMCPtLambda0NoTRD[i]->SetYTitle("#lambda_{0}^{2}");
5ba76d0d 1865 fhMCPtLambda0NoTRD[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1866 outputContainer->Add(fhMCPtLambda0NoTRD[i]) ;
bfdcf7fb 1867
764ab1f4 1868 if(!fFillOnlySimpleSSHisto)
e4ef72be 1869 {
08c09f10 1870 fhMCPtDispEta[i] = new TH2F (Form("hPtDispEta_MC%s",pname[i].Data()),
5ba76d0d 1871 Form("cluster from %s : #sigma^{2}_{#eta #eta} = #Sigma w_{i}(#eta_{i} - <#eta>)^{2}/ #Sigma w_{i} vs #it{p}_{T}",ptype[i].Data()),
85c4406e 1872 nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
5ba76d0d 1873 fhMCPtDispEta[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1874 fhMCPtDispEta[i]->SetYTitle("#sigma^{2}_{#eta #eta}");
1875 outputContainer->Add(fhMCPtDispEta[i]);
764ab1f4 1876
08c09f10 1877 fhMCPtDispPhi[i] = new TH2F (Form("hPtDispPhi_MC%s",pname[i].Data()),
5ba76d0d 1878 Form("cluster from %s : #sigma^{2}_{#phi #phi} = #Sigma w_{i}(#phi_{i} - <#phi>)^{2} / #Sigma w_{i} vs #it{p}_{T}",ptype[i].Data()),
85c4406e 1879 nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
5ba76d0d 1880 fhMCPtDispPhi[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1881 fhMCPtDispPhi[i]->SetYTitle("#sigma^{2}_{#phi #phi}");
1882 outputContainer->Add(fhMCPtDispPhi[i]);
764ab1f4 1883
08c09f10 1884 fhMCPtSumEtaPhi[i] = new TH2F (Form("hPtSumEtaPhi_MC%s",pname[i].Data()),
5ba76d0d 1885 Form("cluster from %s : #delta^{2}_{#eta #phi} = #Sigma w_{i}(#phi_{i} #eta_{i} ) / #Sigma w_{i} - <#phi><#eta> vs #it{p}_{T}",ptype[i].Data()),
85c4406e 1886 nptbins,ptmin,ptmax, 2*ssbins,-ssmax,ssmax);
5ba76d0d 1887 fhMCPtSumEtaPhi[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1888 fhMCPtSumEtaPhi[i]->SetYTitle("#delta^{2}_{#eta #phi}");
1889 outputContainer->Add(fhMCPtSumEtaPhi[i]);
e4ef72be 1890
08c09f10 1891 fhMCPtDispEtaPhiDiff[i] = new TH2F (Form("hPtDispEtaPhiDiff_MC%s",pname[i].Data()),
5ba76d0d 1892 Form("cluster from %s : #sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta} vs #it{p}_{T}",ptype[i].Data()),
85c4406e 1893 nptbins,ptmin,ptmax,200,-10,10);
5ba76d0d 1894 fhMCPtDispEtaPhiDiff[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 1895 fhMCPtDispEtaPhiDiff[i]->SetYTitle("#sigma^{2}_{#phi #phi}-#sigma^{2}_{#eta #eta}");
1896 outputContainer->Add(fhMCPtDispEtaPhiDiff[i]);
e4ef72be 1897
08c09f10 1898 fhMCPtSphericity[i] = new TH2F (Form("hPtSphericity_MC%s",pname[i].Data()),
85c4406e 1899 Form("cluster from %s : (#sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta}) / (#sigma^{2}_{#eta #eta} + #sigma^{2}_{#phi #phi}) vs E",ptype[i].Data()),
1900 nptbins,ptmin,ptmax, 200,-1,1);
5ba76d0d 1901 fhMCPtSphericity[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1902 fhMCPtSphericity[i]->SetYTitle("#it{s} = (#sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta}) / (#sigma^{2}_{#eta #eta} + #sigma^{2}_{#phi #phi})");
08c09f10 1903 outputContainer->Add(fhMCPtSphericity[i]);
e4ef72be 1904
764ab1f4 1905 for(Int_t ie = 0; ie < 7; ie++)
1906 {
1907 fhMCDispEtaDispPhi[ie][i] = new TH2F (Form("hMCDispEtaDispPhi_EBin%d_MC%s",ie,pname[i].Data()),
85c4406e 1908 Form("cluster from %s : #sigma^{2}_{#phi #phi} vs #sigma^{2}_{#eta #eta} for %d < E < %d GeV",pname[i].Data(),bin[ie],bin[ie+1]),
1909 ssbins,ssmin,ssmax , ssbins,ssmin,ssmax);
764ab1f4 1910 fhMCDispEtaDispPhi[ie][i]->SetXTitle("#sigma^{2}_{#eta #eta}");
1911 fhMCDispEtaDispPhi[ie][i]->SetYTitle("#sigma^{2}_{#phi #phi}");
85c4406e 1912 outputContainer->Add(fhMCDispEtaDispPhi[ie][i]);
764ab1f4 1913
1914 fhMCLambda0DispEta[ie][i] = new TH2F (Form("hMCLambda0DispEta_EBin%d_MC%s",ie,pname[i].Data()),
85c4406e 1915 Form("cluster from %s : #lambda^{2}_{0} vs #sigma^{2}_{#eta #eta} for %d < E < %d GeV",pname[i].Data(),bin[ie],bin[ie+1]),
1916 ssbins,ssmin,ssmax , ssbins,ssmin,ssmax);
764ab1f4 1917 fhMCLambda0DispEta[ie][i]->SetXTitle("#lambda^{2}_{0}");
1918 fhMCLambda0DispEta[ie][i]->SetYTitle("#sigma^{2}_{#phi #phi}");
85c4406e 1919 outputContainer->Add(fhMCLambda0DispEta[ie][i]);
764ab1f4 1920
1921 fhMCLambda0DispPhi[ie][i] = new TH2F (Form("hMCLambda0DispPhi_EBin%d_MC%s",ie,pname[i].Data()),
85c4406e 1922 Form("cluster from %s :#lambda^{2}_{0} vs #sigma^{2}_{#phi #phi} for %d < E < %d GeV",pname[i].Data(),bin[ie],bin[ie+1]),
1923 ssbins,ssmin,ssmax , ssbins,ssmin,ssmax);
764ab1f4 1924 fhMCLambda0DispPhi[ie][i]->SetXTitle("#lambda^{2}_{0}");
1925 fhMCLambda0DispPhi[ie][i]->SetYTitle("#sigma^{2}_{#phi #phi}");
85c4406e 1926 outputContainer->Add(fhMCLambda0DispPhi[ie][i]);
764ab1f4 1927
85c4406e 1928 }
764ab1f4 1929 }
e4ef72be 1930 }
1931
08c09f10 1932 fhMCPtLambda0FracMaxCellCut[i] = new TH2F(Form("hELambda0FracMaxCellCut_MC%s",pname[i].Data()),
5ba76d0d 1933 Form("Selected pair, cluster from %s : #it{p}_{T} vs #lambda_{0}^{2}, Max cell fraction of energy < 0.5 ",ptype[i].Data()),
85c4406e 1934 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
08c09f10 1935 fhMCPtLambda0FracMaxCellCut[i]->SetYTitle("#lambda_{0}^{2}");
5ba76d0d 1936 fhMCPtLambda0FracMaxCellCut[i]->SetXTitle("#it{E} (GeV)");
08c09f10 1937 outputContainer->Add(fhMCPtLambda0FracMaxCellCut[i]) ;
e4ef72be 1938
08c09f10 1939 fhMCPtFracMaxCell[i] = new TH2F(Form("hEFracMaxCell_MC%s",pname[i].Data()),
5ba76d0d 1940 Form("Selected pair, cluster from %s : #it{p}_{T} vs Max cell fraction of energy",ptype[i].Data()),
85c4406e 1941 nptbins,ptmin,ptmax,100,0,1);
5ba76d0d 1942 fhMCPtFracMaxCell[i]->SetYTitle("#it{Fraction}");
1943 fhMCPtFracMaxCell[i]->SetXTitle("#it{E} (GeV)");
08c09f10 1944 outputContainer->Add(fhMCPtFracMaxCell[i]) ;
e4ef72be 1945
1946 }//
1947 } // shower shape histo
34c16486 1948
521636d2 1949 } //Not MC reader
477d6cee 1950 }//Histos with MC
1951
4650f5cf 1952 if(fAnaType==kSSCalo)
1953 {
5ba76d0d 1954 fhAsymmetry = new TH2F ("hAsymmetry","#it{A} = ( #it{E}_{1} - #it{E}_{2} ) / ( #it{E}_{1} + #it{E}_{2} ) vs #it{E}",
85c4406e 1955 nptbins,ptmin,ptmax, 200, -1,1);
5ba76d0d 1956 fhAsymmetry->SetXTitle("#it{E} (GeV)");
1957 fhAsymmetry->SetYTitle("#it{A} = ( #it{E}_{1} - #it{E}_{2} ) / ( #it{E}_{1} + #it{E}_{2} )");
4650f5cf 1958 outputContainer->Add(fhAsymmetry);
1959
5ba76d0d 1960 fhSelectedAsymmetry = new TH2F ("hSelectedAsymmetry","#it{A} = ( #it{E}_{1} - #it{E}_{2} ) / ( #it{E}_{1} + #it{E}_{2} ) vs #it{E}",
85c4406e 1961 nptbins,ptmin,ptmax, 200, -1,1);
5ba76d0d 1962 fhSelectedAsymmetry->SetXTitle("#it{E} (GeV)");
1963 fhSelectedAsymmetry->SetYTitle("#it{A} = ( #it{E}_{1} - #it{E}_{2} ) / ( #it{E}_{1} + #it{E}_{2} )");
4650f5cf 1964 outputContainer->Add(fhSelectedAsymmetry);
1965
cfdf2b91 1966 fhSplitE = new TH1F
1967 ("hSplitE","Selected #pi^{0} (#eta) pairs energy sum of split sub-clusters",nptbins,ptmin,ptmax);
1968 fhSplitE->SetYTitle("counts");
5ba76d0d 1969 fhSplitE->SetXTitle("#it{E} (GeV)");
cfdf2b91 1970 outputContainer->Add(fhSplitE) ;
1971
1972 fhSplitPt = new TH1F
5ba76d0d 1973 ("hSplitPt","Selected #pi^{0} (#eta) pairs #it{p}_{T} sum of split sub-clusters",nptbins,ptmin,ptmax);
cfdf2b91 1974 fhSplitPt->SetYTitle("counts");
5ba76d0d 1975 fhSplitPt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
cfdf2b91 1976 outputContainer->Add(fhSplitPt) ;
1977
29250849 1978
1979 fhSplitPtPhi = new TH2F
5ba76d0d 1980 ("hSplitPtPhi","Selected #pi^{0} (#eta) pairs: sum split sub-cluster #it{p}_{T} vs #phi",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
29250849 1981 fhSplitPtPhi->SetYTitle("#phi (rad)");
5ba76d0d 1982 fhSplitPtPhi->SetXTitle("#it{p}_{T} (GeV/#it{c})");
29250849 1983 outputContainer->Add(fhSplitPtPhi) ;
1984
1985 fhSplitPtEta = new TH2F
5ba76d0d 1986 ("hSplitPtEta","Selected #pi^{0} (#eta) pairs: sum split sub-cluster #it{p}_{T} vs #eta",nptbins,ptmin,ptmax,netabins,etamin,etamax);
29250849 1987 fhSplitPtEta->SetYTitle("#eta");
5ba76d0d 1988 fhSplitPtEta->SetXTitle("#it{p}_{T} (GeV/#it{c})");
29250849 1989 outputContainer->Add(fhSplitPtEta) ;
85c4406e 1990
29250849 1991
6e66993c 1992 fhNLocMaxSplitPt = new TH2F("hNLocMaxSplitPt","Number of local maxima in cluster",
08c09f10 1993 nptbins,ptmin,ptmax,20,0,20);
5ba76d0d 1994 fhNLocMaxSplitPt ->SetYTitle("#it{NLM}");
1995 fhNLocMaxSplitPt ->SetXTitle("#it{p}_{T} (GeV/#it{c})");
6e66993c 1996 outputContainer->Add(fhNLocMaxSplitPt) ;
85c4406e 1997
6e66993c 1998
29250849 1999 fhMassSplitPt = new TH2F
5ba76d0d 2000 ("hMassSplitPt","all pairs #it{M}: sum split sub-cluster #it{p}_{T} vs #it{M}",
1253480f 2001 nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
5ba76d0d 2002 fhMassSplitPt->SetYTitle("#it{M} (GeV/#it{c}^{2})");
2003 fhMassSplitPt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
29250849 2004 outputContainer->Add(fhMassSplitPt) ;
2005
2006 fhSelectedMassSplitPt = new TH2F
5ba76d0d 2007 ("hSelectedMassSplitPt","Selected #pi^{0} (#eta) pairs #it{M}: sum split sub-cluster #it{p}_{T} vs #it{M}",
1253480f 2008 nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
5ba76d0d 2009 fhSelectedMassSplitPt->SetYTitle("#it{M} (GeV/#it{c}^{2})");
2010 fhSelectedMassSplitPt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
29250849 2011 outputContainer->Add(fhSelectedMassSplitPt) ;
2012
4650f5cf 2013 if(IsDataMC())
2014 {
1253480f 2015 fhMassSplitPtNoOverlap = new TH2F
5ba76d0d 2016 ("hMassSplitPtNoOverlap","all pairs #it{M}: sum split sub-cluster #it{p}_{T} vs #it{M}, no overlap",
1253480f 2017 nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
5ba76d0d 2018 fhMassSplitPtNoOverlap->SetYTitle("#it{M} (GeV/#it{c}^{2})");
2019 fhMassSplitPtNoOverlap->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1253480f 2020 outputContainer->Add(fhMassSplitPtNoOverlap) ;
2021
2022 fhSelectedMassSplitPtNoOverlap = new TH2F
5ba76d0d 2023 ("hSelectedMassSplitPtNoOverlap","Selected #pi^{0} (#eta) pairs #it{M}: sum split sub-cluster #it{p}_{T} vs #it{M}, no overlap",
1253480f 2024 nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
5ba76d0d 2025 fhSelectedMassSplitPtNoOverlap->SetYTitle("#it{M} (GeV/#it{c}^{2})");
2026 fhSelectedMassSplitPtNoOverlap->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1253480f 2027 outputContainer->Add(fhSelectedMassSplitPtNoOverlap) ;
2028
2029
2030 fhMCPi0PtRecoPtPrim = new TH2F
5ba76d0d 2031 ("hMCPi0PtRecoPtPrim","#it{p}_{T,reco} vs #it{p}_{T,gen}",
1253480f 2032 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
5ba76d0d 2033 fhMCPi0PtRecoPtPrim ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
2034 fhMCPi0PtRecoPtPrim ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
1253480f 2035 outputContainer->Add(fhMCPi0PtRecoPtPrim ) ;
2036
2037 fhMCPi0PtRecoPtPrimNoOverlap = new TH2F
5ba76d0d 2038 ("hMCPi0PtRecoPtPrimNoOverlap","#it{p}_{T,reco} vs #it{p}_{T,gen}, no overlap",
1253480f 2039 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
5ba76d0d 2040 fhMCPi0PtRecoPtPrimNoOverlap ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
2041 fhMCPi0PtRecoPtPrimNoOverlap ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
1253480f 2042 outputContainer->Add(fhMCPi0PtRecoPtPrimNoOverlap ) ;
2043
2044 fhMCPi0SelectedPtRecoPtPrim = new TH2F
5ba76d0d 2045 ("hMCPi0SelectedPtRecoPtPrim","#it{p}_{T,reco} vs #it{p}_{T,gen}",
1253480f 2046 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
5ba76d0d 2047 fhMCPi0SelectedPtRecoPtPrim ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
2048 fhMCPi0SelectedPtRecoPtPrim ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
1253480f 2049 outputContainer->Add(fhMCPi0SelectedPtRecoPtPrim ) ;
2050
2051 fhMCPi0SelectedPtRecoPtPrimNoOverlap = new TH2F
5ba76d0d 2052 ("hMCPi0SelectedPtRecoPtPrimNoOverlap","#it{p}_{T,reco} vs #it{p}_{T,gen}, no overlap",
1253480f 2053 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
5ba76d0d 2054 fhMCPi0SelectedPtRecoPtPrimNoOverlap ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
2055 fhMCPi0SelectedPtRecoPtPrimNoOverlap ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
1253480f 2056 outputContainer->Add(fhMCPi0SelectedPtRecoPtPrimNoOverlap ) ;
2057
2058
2059 fhMCPi0SplitPtRecoPtPrim = new TH2F
5ba76d0d 2060 ("hMCPi0SplitPtRecoPtPrim","#it{p}_{T,reco} (split sum) vs #it{p}_{T,gen}",
1253480f 2061 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
5ba76d0d 2062 fhMCPi0SplitPtRecoPtPrim ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
2063 fhMCPi0SplitPtRecoPtPrim ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
1253480f 2064 outputContainer->Add(fhMCPi0SplitPtRecoPtPrim ) ;
2065
2066 fhMCPi0SplitPtRecoPtPrimNoOverlap = new TH2F
5ba76d0d 2067 ("hMCPi0SplitPtRecoPtPrimNoOverlap","#it{p}_{T,reco} (split sum) vs #it{p}_{T,gen}, no overlap",
1253480f 2068 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
5ba76d0d 2069 fhMCPi0SplitPtRecoPtPrimNoOverlap ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
2070 fhMCPi0SplitPtRecoPtPrimNoOverlap ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
1253480f 2071 outputContainer->Add(fhMCPi0SplitPtRecoPtPrimNoOverlap ) ;
2072
2073 fhMCPi0SelectedSplitPtRecoPtPrim = new TH2F
5ba76d0d 2074 ("hMCPi0SelectedSplitPtRecoPtPrim","#it{p}_{T,reco} (split sum) vs #it{p}_{T,gen}",
1253480f 2075 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
5ba76d0d 2076 fhMCPi0SelectedSplitPtRecoPtPrim ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
2077 fhMCPi0SelectedSplitPtRecoPtPrim ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
1253480f 2078 outputContainer->Add(fhMCPi0SelectedSplitPtRecoPtPrim ) ;
2079
2080 fhMCPi0SelectedSplitPtRecoPtPrimNoOverlap = new TH2F
5ba76d0d 2081 ("hMCPi0SelectedSplitPtRecoPtPrimNoOverlap","#it{p}_{T,reco} (split sum) vs #it{p}_{T,gen}, no overlap",
1253480f 2082 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
5ba76d0d 2083 fhMCPi0SelectedSplitPtRecoPtPrimNoOverlap ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
2084 fhMCPi0SelectedSplitPtRecoPtPrimNoOverlap ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
1253480f 2085 outputContainer->Add(fhMCPi0SelectedSplitPtRecoPtPrimNoOverlap ) ;
2086
2087 fhMCEtaPtRecoPtPrim = new TH2F
5ba76d0d 2088 ("hMCEtaPtRecoPtPrim","#it{p}_{T,reco} vs #it{p}_{T,gen}",
1253480f 2089 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
5ba76d0d 2090 fhMCEtaPtRecoPtPrim ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
2091 fhMCEtaPtRecoPtPrim ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
1253480f 2092 outputContainer->Add(fhMCEtaPtRecoPtPrim ) ;
2093
2094 fhMCEtaPtRecoPtPrimNoOverlap = new TH2F
5ba76d0d 2095 ("hMCEtaPtRecoPtPrimNoOverlap","#it{p}_{T,reco} vs #it{p}_{T,gen}, no overlap",
1253480f 2096 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
5ba76d0d 2097 fhMCEtaPtRecoPtPrimNoOverlap ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
2098 fhMCEtaPtRecoPtPrimNoOverlap ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
1253480f 2099 outputContainer->Add(fhMCEtaPtRecoPtPrimNoOverlap ) ;
2100
2101 fhMCEtaSelectedPtRecoPtPrim = new TH2F
5ba76d0d 2102 ("hMCEtaSelectedPtRecoPtPrim","#it{p}_{T,reco} vs #it{p}_{T,gen}",
1253480f 2103 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
5ba76d0d 2104 fhMCEtaSelectedPtRecoPtPrim ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
2105 fhMCEtaSelectedPtRecoPtPrim ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
1253480f 2106 outputContainer->Add(fhMCEtaSelectedPtRecoPtPrim ) ;
2107
2108 fhMCEtaSelectedPtRecoPtPrimNoOverlap = new TH2F
5ba76d0d 2109 ("hMCEtaSelectedPtRecoPtPrimNoOverlap","#it{p}_{T,reco} vs #it{p}_{T,gen}, no overlap",
1253480f 2110 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
5ba76d0d 2111 fhMCEtaSelectedPtRecoPtPrimNoOverlap ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
2112 fhMCEtaSelectedPtRecoPtPrimNoOverlap ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
1253480f 2113 outputContainer->Add(fhMCEtaSelectedPtRecoPtPrimNoOverlap ) ;
2114
2115
2116 fhMCEtaSplitPtRecoPtPrim = new TH2F
5ba76d0d 2117 ("hMCEtaSplitPtRecoPtPrim","#it{p}_{T,reco} (split sum) vs #it{p}_{T,gen}",
1253480f 2118 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
5ba76d0d 2119 fhMCEtaSplitPtRecoPtPrim ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
2120 fhMCEtaSplitPtRecoPtPrim ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
1253480f 2121 outputContainer->Add(fhMCEtaSplitPtRecoPtPrim ) ;
2122
2123 fhMCEtaSplitPtRecoPtPrimNoOverlap = new TH2F
5ba76d0d 2124 ("hMCEtaSplitPtRecoPtPrimNoOverlap","#it{p}_{T,reco} (split sum) vs #it{p}_{T,gen}, no overlap",
1253480f 2125 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
5ba76d0d 2126 fhMCEtaSplitPtRecoPtPrimNoOverlap ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
2127 fhMCEtaSplitPtRecoPtPrimNoOverlap ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
1253480f 2128 outputContainer->Add(fhMCEtaSplitPtRecoPtPrimNoOverlap ) ;
2129
2130 fhMCEtaSelectedSplitPtRecoPtPrim = new TH2F
5ba76d0d 2131 ("hMCEtaSelectedSplitPtRecoPtPrim","#it{p}_{T,reco} (split sum) vs #it{p}_{T,gen}",
1253480f 2132 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
5ba76d0d 2133 fhMCEtaSelectedSplitPtRecoPtPrim ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
2134 fhMCEtaSelectedSplitPtRecoPtPrim ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
1253480f 2135 outputContainer->Add(fhMCEtaSelectedSplitPtRecoPtPrim ) ;
2136
2137 fhMCEtaSelectedSplitPtRecoPtPrimNoOverlap = new TH2F
5ba76d0d 2138 ("hMCEtaSelectedSplitPtRecoPtPrimNoOverlap","#it{p}_{T,reco} (split sum) vs #it{p}_{T,gen}, no overlap",
1253480f 2139 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
5ba76d0d 2140 fhMCEtaSelectedSplitPtRecoPtPrimNoOverlap ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
2141 fhMCEtaSelectedSplitPtRecoPtPrimNoOverlap ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
1253480f 2142 outputContainer->Add(fhMCEtaSelectedSplitPtRecoPtPrimNoOverlap ) ;
2143
afba5771 2144
2145 for(Int_t inlm = 0; inlm < 3; inlm++)
2146 {
2147 fhMCPi0PtRecoPtPrimLocMax[inlm] = new TH2F
5ba76d0d 2148 (Form("hMCPi0PtRecoPtPrimLocMax%d",inlm+1),Form("#it{p}_{T,reco} vs #it{p}_{T,gen}, %s",nlm[inlm].Data()),
afba5771 2149 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
5ba76d0d 2150 fhMCPi0PtRecoPtPrimLocMax[inlm] ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
2151 fhMCPi0PtRecoPtPrimLocMax[inlm] ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
afba5771 2152 outputContainer->Add(fhMCPi0PtRecoPtPrimLocMax[inlm] ) ;
2153
2154 fhMCPi0SelectedPtRecoPtPrimLocMax[inlm] = new TH2F
5ba76d0d 2155 (Form("hMCPi0SelectedPtRecoPtPrimLocMax%d",inlm+1),Form("#it{p}_{T,reco} vs #it{p}_{T,gen}, %s",nlm[inlm].Data()),
afba5771 2156 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
5ba76d0d 2157 fhMCPi0SelectedPtRecoPtPrimLocMax[inlm] ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
2158 fhMCPi0SelectedPtRecoPtPrimLocMax[inlm] ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
afba5771 2159 outputContainer->Add(fhMCPi0SelectedPtRecoPtPrimLocMax[inlm] ) ;
2160
2161 fhMCPi0SplitPtRecoPtPrimLocMax[inlm] = new TH2F
5ba76d0d 2162 (Form("hMCPi0SplitPtRecoPtPrimLocMax%d",inlm+1),Form("#it{p}_{T,reco} (split sum) vs #it{p}_{T,gen}, %s",nlm[inlm].Data()),
afba5771 2163 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
5ba76d0d 2164 fhMCPi0SplitPtRecoPtPrimLocMax[inlm] ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
2165 fhMCPi0SplitPtRecoPtPrimLocMax[inlm] ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
afba5771 2166 outputContainer->Add(fhMCPi0SplitPtRecoPtPrimLocMax[inlm] ) ;
2167
2168 fhMCPi0SelectedSplitPtRecoPtPrimLocMax[inlm] = new TH2F
5ba76d0d 2169 (Form("hMCPi0SelectedSplitPtRecoPtPrimLocMax%d",inlm+1),Form("#it{p}_{T,reco} (split sum) vs #it{p}_{T,gen}, %s",nlm[inlm].Data()),
afba5771 2170 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
5ba76d0d 2171 fhMCPi0SelectedSplitPtRecoPtPrimLocMax[inlm] ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
2172 fhMCPi0SelectedSplitPtRecoPtPrimLocMax[inlm] ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
afba5771 2173 outputContainer->Add(fhMCPi0SelectedSplitPtRecoPtPrimLocMax[inlm] ) ;
2174
2175 fhMCEtaPtRecoPtPrimLocMax[inlm] = new TH2F
5ba76d0d 2176 (Form("hMCEtaPtRecoPtPrimLocMax%d",inlm+1),Form("#it{p}_{T,reco} vs #it{p}_{T,gen}, %s",nlm[inlm].Data()),
afba5771 2177 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
5ba76d0d 2178 fhMCEtaPtRecoPtPrimLocMax[inlm] ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
2179 fhMCEtaPtRecoPtPrimLocMax[inlm] ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
afba5771 2180 outputContainer->Add(fhMCEtaPtRecoPtPrimLocMax[inlm] ) ;
2181
2182 fhMCEtaSelectedPtRecoPtPrimLocMax[inlm] = new TH2F
5ba76d0d 2183 (Form("hMCEtaSelectedPtRecoPtPrimLocMax%d",inlm+1),Form("#it{p}_{T,reco} vs #it{p}_{T,gen}, %s",nlm[inlm].Data()),
afba5771 2184 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
5ba76d0d 2185 fhMCEtaSelectedPtRecoPtPrimLocMax[inlm] ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
2186 fhMCEtaSelectedPtRecoPtPrimLocMax[inlm] ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
afba5771 2187 outputContainer->Add(fhMCEtaSelectedPtRecoPtPrimLocMax[inlm] ) ;
2188
2189 fhMCEtaSplitPtRecoPtPrimLocMax[inlm] = new TH2F
5ba76d0d 2190 (Form("hMCEtaSplitPtRecoPtPrimLocMax%d",inlm+1),Form("#it{p}_{T,reco} (split sum) vs #it{p}_{T,gen}, %s",nlm[inlm].Data()),
afba5771 2191 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
5ba76d0d 2192 fhMCEtaSplitPtRecoPtPrimLocMax[inlm] ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
2193 fhMCEtaSplitPtRecoPtPrimLocMax[inlm] ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
afba5771 2194 outputContainer->Add(fhMCEtaSplitPtRecoPtPrimLocMax[inlm] ) ;
2195
2196 fhMCEtaSelectedSplitPtRecoPtPrimLocMax[inlm] = new TH2F
5ba76d0d 2197 (Form("hMCEtaSelectedSplitPtRecoPtPrimLocMax%d",inlm+1),Form("#it{p}_{T,reco} (split sum) vs #it{p}_{T,gen}, %s",nlm[inlm].Data()),
afba5771 2198 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
5ba76d0d 2199 fhMCEtaSelectedSplitPtRecoPtPrimLocMax[inlm] ->SetYTitle("#it{p}_{T,gen} (GeV/#it{c})");
2200 fhMCEtaSelectedSplitPtRecoPtPrimLocMax[inlm] ->SetXTitle("#it{p}_{T,reco} (GeV/#it{c})");
afba5771 2201 outputContainer->Add(fhMCEtaSelectedSplitPtRecoPtPrimLocMax[inlm] ) ;
2202
2203 }
2204
4650f5cf 2205 for(Int_t i = 0; i< 6; i++)
2206 {
08c09f10 2207 fhMCPtAsymmetry[i] = new TH2F (Form("hEAsymmetry_MC%s",pname[i].Data()),
5ba76d0d 2208 Form("cluster from %s : #it{A} = ( #it{E}_{1} - #it{E}_{2} ) / ( #it{E}_{1} + #it{E}_{2} ) vs #it{E}",ptype[i].Data()),
85c4406e 2209 nptbins,ptmin,ptmax, 200,-1,1);
5ba76d0d 2210 fhMCPtAsymmetry[i]->SetXTitle("#it{E} (GeV)");
2211 fhMCPtAsymmetry[i]->SetYTitle("#it{A} = ( #it{E}_{1} - #it{E}_{2} ) / ( #it{E}_{1} + #it{E}_{2} )");
08c09f10 2212 outputContainer->Add(fhMCPtAsymmetry[i]);
cfdf2b91 2213
2214 fhMCSplitE[i] = new TH1F
2928c46d 2215 (Form("hSplitE_MC%s",pname[i].Data()),
cfdf2b91 2216 Form("cluster from %s, energy sum of split sub-clusters",ptype[i].Data()),
2217 nptbins,ptmin,ptmax);
2218 fhMCSplitE[i]->SetYTitle("counts");
5ba76d0d 2219 fhMCSplitE[i]->SetXTitle("#it{E} (GeV)");
cfdf2b91 2220 outputContainer->Add(fhMCSplitE[i]) ;
85c4406e 2221
cfdf2b91 2222 fhMCSplitPt[i] = new TH1F
2223 (Form("hSplitPt_MC%s",pname[i].Data()),
5ba76d0d 2224 Form("cluster from %s, #it{p}_{T} sum of split sub-clusters",ptype[i].Data()),
cfdf2b91 2225 nptbins,ptmin,ptmax);
2226 fhMCSplitPt[i]->SetYTitle("counts");
5ba76d0d 2227 fhMCSplitPt[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
cfdf2b91 2228 outputContainer->Add(fhMCSplitPt[i]) ;
2229
29250849 2230
2231 fhMCSplitPtPhi[i] = new TH2F
2232 (Form("hSplitPtPhi_MC%s",pname[i].Data()),
2233 Form("Identified as #pi^{0} (#eta), cluster from %s",ptype[i].Data()),
2234 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
2235 fhMCSplitPtPhi[i]->SetYTitle("#phi");
5ba76d0d 2236 fhMCSplitPtPhi[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
29250849 2237 outputContainer->Add(fhMCSplitPtPhi[i]) ;
2238
2239 fhMCSplitPtEta[i] = new TH2F
2240 (Form("hSplitPtEta_MC%s",pname[i].Data()),
2241 Form("Identified as #pi^{0} (#eta), cluster from %s",
2242 ptype[i].Data()),nptbins,ptmin,ptmax,netabins,etamin,etamax);
2243 fhMCSplitPtEta[i]->SetYTitle("#eta");
5ba76d0d 2244 fhMCSplitPtEta[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
29250849 2245 outputContainer->Add(fhMCSplitPtEta[i]) ;
85c4406e 2246
29250849 2247
6e66993c 2248 fhMCNLocMaxSplitPt[i] = new TH2F
2249 (Form("hNLocMaxSplitPt_MC%s",pname[i].Data()),
5ba76d0d 2250 Form("cluster from %s, #it{p}_{T} sum of split sub-clusters, for NLM",ptype[i].Data()),
08c09f10 2251 nptbins,ptmin,ptmax,20,0,20);
5ba76d0d 2252 fhMCNLocMaxSplitPt[i] ->SetYTitle("#it{NLM}");
2253 fhMCNLocMaxSplitPt[i] ->SetXTitle("#it{p}_{T} (GeV/#it{c})");
6e66993c 2254 outputContainer->Add(fhMCNLocMaxSplitPt[i]) ;
2255
29250849 2256 fhMCMassSplitPt[i] = new TH2F
2257 (Form("hMassSplitPt_MC%s",pname[i].Data()),
5ba76d0d 2258 Form("all pairs #it{M}: split #it{p}_{T} vs #it{M} from %s",ptype[i].Data()),
29250849 2259 nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
5ba76d0d 2260 fhMCMassSplitPt[i]->SetYTitle("#it{M} (GeV/#it{c}^{2})");
2261 fhMCMassSplitPt[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
29250849 2262 outputContainer->Add(fhMCMassSplitPt[i]) ;
2263
2264 fhMCSelectedMassSplitPt[i] = new TH2F
2265 (Form("hSelectedMassSplitPt_MC%s",pname[i].Data()),
5ba76d0d 2266 Form("Selected #pi^{0} (#eta) pairs #it{M}: split #it{p}_{T} vs #it{M} from %s",ptype[i].Data()),
29250849 2267 nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
5ba76d0d 2268 fhMCSelectedMassSplitPt[i]->SetYTitle("#it{M} (GeV/#it{c}^{2})");
2269 fhMCSelectedMassSplitPt[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
29250849 2270 outputContainer->Add(fhMCSelectedMassSplitPt[i]) ;
1253480f 2271
2272 fhMCMassSplitPtNoOverlap[i] = new TH2F
2273 (Form("hMassSplitPtNoOverlap_MC%s",pname[i].Data()),
5ba76d0d 2274 Form("all pairs #it{M}: split #it{p}_{T} vs #it{M} from %s, no overlap",ptype[i].Data()),
1253480f 2275 nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
5ba76d0d 2276 fhMCMassSplitPtNoOverlap[i]->SetYTitle("#it{M} (GeV/#it{c}^{2})");
2277 fhMCMassSplitPtNoOverlap[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1253480f 2278 outputContainer->Add(fhMCMassSplitPtNoOverlap[i]) ;
29250849 2279
1253480f 2280 fhMCSelectedMassSplitPtNoOverlap[i] = new TH2F
2281 (Form("hSelectedMassSplitPtNoOverlap_MC%s",pname[i].Data()),
5ba76d0d 2282 Form("Selected #pi^{0} (#eta) pairs #it{M}: split #it{p}_{T} vs #it{M} from %s, no overlap",ptype[i].Data()),
1253480f 2283 nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
5ba76d0d 2284 fhMCSelectedMassSplitPtNoOverlap[i]->SetYTitle("#it{M} (GeV/#it{c}^{2})");
2285 fhMCSelectedMassSplitPtNoOverlap[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
1253480f 2286 outputContainer->Add(fhMCSelectedMassSplitPtNoOverlap[i]) ;
85c4406e 2287 }
4650f5cf 2288 }
2289 }
477d6cee 2290
764ab1f4 2291 if(fAnaType==kSSCalo && fFillSelectClHisto && !fFillOnlySimpleSSHisto )
bfdcf7fb 2292 {
2293
bfdcf7fb 2294
2295 for(Int_t i = 0; i< 3; i++)
2296 {
08c09f10 2297 fhPtAsymmetryLocMax[i] = new TH2F(Form("hEAsymmetryLocMax%d",i+1),
5ba76d0d 2298 Form("Selected #pi^{0} (#eta) pairs: #it{p}_{T} vs #it{A} = ( #it{E}_{1} - #it{E}_{2} ) / ( #it{E}_{1} + #it{E}_{2} ), %s",nlm[i].Data()),
85c4406e 2299 nptbins,ptmin,ptmax,200, -1,1);
5ba76d0d 2300 fhPtAsymmetryLocMax[i]->SetYTitle("#it{A} = ( #it{E}_{1} - #it{E}_{2} ) / ( #it{E}_{1} + #it{E}_{2} )");
2301 fhPtAsymmetryLocMax[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
08c09f10 2302 outputContainer->Add(fhPtAsymmetryLocMax[i]) ;
bfdcf7fb 2303 }
2304
d2655d46 2305 for(Int_t ie = 0; ie< 7; ie++)
bfdcf7fb 2306 {
2307
2308 fhAsymmetryLambda0[ie] = new TH2F (Form("hAsymmetryLambda0_EBin%d",ie),
5ba76d0d 2309 Form("#lambda_{0}^{2} vs A for %d < #it{E} < %d GeV",bin[ie],bin[ie+1]),
85c4406e 2310 ssbins,ssmin,ssmax , 200,-1,1);
bfdcf7fb 2311 fhAsymmetryLambda0[ie]->SetXTitle("#lambda_{0}^{2}");
2312 fhAsymmetryLambda0[ie]->SetYTitle("A = ( E1 - E2 ) / ( E1 + E2 )");
85c4406e 2313 outputContainer->Add(fhAsymmetryLambda0[ie]);
bfdcf7fb 2314
2315 fhAsymmetryDispEta[ie] = new TH2F (Form("hAsymmetryDispEta_EBin%d",ie),
5ba76d0d 2316 Form("#sigma^{2}_{#eta #eta} vs #it{A} for %d < #it{E} < %d GeV",bin[ie],bin[ie+1]),
85c4406e 2317 ssbins,ssmin,ssmax , 200,-1,1);
bfdcf7fb 2318 fhAsymmetryDispEta[ie]->SetXTitle("#sigma^{2}_{#eta #eta}");
5ba76d0d 2319 fhAsymmetryDispEta[ie]->SetYTitle("#it{A} = ( #it{E}_{1} - #it{E}_{2} ) / ( #it{E}_{1} + #it{E}_{2} )");
85c4406e 2320 outputContainer->Add(fhAsymmetryDispEta[ie]);
bfdcf7fb 2321
2322 fhAsymmetryDispPhi[ie] = new TH2F (Form("hAsymmetryDispPhi_EBin%d",ie),
5ba76d0d 2323 Form("#sigma^{2}_{#phi #phi} vs #it{A} for %d < #it{E} < %d GeV",bin[ie],bin[ie+1]),
85c4406e 2324 ssbins,ssmin,ssmax , 200,-1,1);
bfdcf7fb 2325 fhAsymmetryDispPhi[ie]->SetXTitle("#sigma^{2}_{#phi #phi}");
5ba76d0d 2326 fhAsymmetryDispPhi[ie]->SetYTitle("#it{A} = ( #it{E}_{1} - #it{E}_{2} ) / ( #it{E}_{1} + #it{E}_{2} )");
85c4406e 2327 outputContainer->Add(fhAsymmetryDispPhi[ie]);
2328 }
bfdcf7fb 2329
2330
85c4406e 2331 if(IsDataMC())
bfdcf7fb 2332 {
2333 for(Int_t i = 0; i< 6; i++)
2334 {
d2655d46 2335 for(Int_t ie = 0; ie < 7; ie++)
bfdcf7fb 2336 {
2337 fhMCAsymmetryLambda0[ie][i] = new TH2F (Form("hMCAsymmetryLambda0_EBin%d_MC%s",ie,pname[i].Data()),
5ba76d0d 2338 Form("cluster from %s : #lambda_{0}^{2} vs A for %d < #it{E} < %d GeV",pname[i].Data(),bin[ie],bin[ie+1]),
85c4406e 2339 ssbins,ssmin,ssmax , 200,-1,1);
bfdcf7fb 2340 fhMCAsymmetryLambda0[ie][i]->SetXTitle("#lambda_{0}^{2}");
5ba76d0d 2341 fhMCAsymmetryLambda0[ie][i]->SetYTitle("#it{A} = ( #it{E}_{1} - #it{E}_{2} ) / ( #it{E}_{1} + #it{E}_{2} )");
85c4406e 2342 outputContainer->Add(fhMCAsymmetryLambda0[ie][i]);
bfdcf7fb 2343
2344 fhMCAsymmetryDispEta[ie][i] = new TH2F (Form("hMCAsymmetryDispEta_EBin%d_MC%s",ie,pname[i].Data()),
5ba76d0d 2345 Form("cluster from %s : #sigma^{2}_{#eta #eta} vs #it{A} for %d < #it{E} < %d GeV",pname[i].Data(),bin[ie],bin[ie+1]),
85c4406e 2346 ssbins,ssmin,ssmax , 200,-1,1);
bfdcf7fb 2347 fhMCAsymmetryDispEta[ie][i]->SetXTitle("#sigma^{2}_{#eta #eta}");
5ba76d0d 2348 fhMCAsymmetryDispEta[ie][i]->SetYTitle("#it{A} = ( #it{E}_{1} - #it{E}_{2} ) / ( #it{E}_{1} + #it{E}_{2} )");
85c4406e 2349 outputContainer->Add(fhMCAsymmetryDispEta[ie][i]);
bfdcf7fb 2350
2351 fhMCAsymmetryDispPhi[ie][i] = new TH2F (Form("hMCAsymmetryDispPhi_EBin%d_MC%s",ie,pname[i].Data()),
5ba76d0d 2352 Form("cluster from %s : #sigma^{2}_{#phi #phi} vs #it{A} for %d < #it{E} < %d GeV",pname[i].Data(),bin[ie],bin[ie+1]),
85c4406e 2353 ssbins,ssmin,ssmax , 200,-1,1);
bfdcf7fb 2354 fhMCAsymmetryDispPhi[ie][i]->SetXTitle("#sigma^{2}_{#phi #phi}");
5ba76d0d 2355 fhMCAsymmetryDispPhi[ie][i]->SetYTitle("#it{A} = ( #it{E}_{1} - #it{E}_{2} ) / ( #it{E}_{1} + #it{E}_{2} )");
85c4406e 2356 outputContainer->Add(fhMCAsymmetryDispPhi[ie][i]);
2357 }
bfdcf7fb 2358 }
2359 }
bfdcf7fb 2360 }
2361
2ad19c3d 2362 if(fFillPileUpHistograms)
2363 {
5e5e056f 2364
2365 TString pileUpName[] = {"SPD","EMCAL","SPDOrEMCAL","SPDAndEMCAL","SPDAndNotEMCAL","EMCALAndNotSPD","NotSPDAndNotEMCAL"} ;
85c4406e 2366
5e5e056f 2367 for(Int_t i = 0 ; i < 7 ; i++)
2368 {
126b8c62 2369 fhPtPileUp[i] = new TH1F(Form("hPtPileUp%s",pileUpName[i].Data()),
5ba76d0d 2370 Form("Selected #pi^{0} (#eta) #it{p}_{T} distribution, %s Pile-Up event",pileUpName[i].Data()), nptbins,ptmin,ptmax);
2371 fhPtPileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
126b8c62 2372 outputContainer->Add(fhPtPileUp[i]);
2373
2374 fhPtCellTimePileUp[i] = new TH2F(Form("hPtCellTimePileUp%s",pileUpName[i].Data()),
2375 Form("Pt vs cell time in cluster, %s Pile-Up event",pileUpName[i].Data()),
08c09f10 2376 nptbins,ptmin,ptmax,ntimptbins,timemin,timemax);
5ba76d0d 2377 fhPtCellTimePileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2378 fhPtCellTimePileUp[i]->SetYTitle("#it{t}_{cell} (ns)");
126b8c62 2379 outputContainer->Add(fhPtCellTimePileUp[i]);
2380
2381 fhPtTimeDiffPileUp[i] = new TH2F(Form("hPtTimeDiffPileUp%s",pileUpName[i].Data()),
2382 Form("Pt vs t_{max}-t_{cell} in cluster, %s Pile-Up event",pileUpName[i].Data()),
e31d67f1 2383 nptbins,ptmin,ptmax,400,-200,200);
5ba76d0d 2384 fhPtTimeDiffPileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2385 fhPtTimeDiffPileUp[i]->SetYTitle("#it{t}_{max}-#it{t}_{cell} (ns)");
126b8c62 2386 outputContainer->Add(fhPtTimeDiffPileUp[i]);
2387
5e5e056f 2388 }
2389
5ba76d0d 2390 fhTimePtNoCut = new TH2F ("hTimePt_NoCut","#it{t} of cluster vs #it{E} of clusters, no cut", nptbins,ptmin,ptmax, ntimptbins,timemin,timemax);
2391 fhTimePtNoCut->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2392 fhTimePtNoCut->SetYTitle("#it{t} (ns)");
126b8c62 2393 outputContainer->Add(fhTimePtNoCut);
2ad19c3d 2394
5ba76d0d 2395 fhTimePtSPD = new TH2F ("hTimePt_SPD","#it{t} of cluster vs #it{E} of clusters, SPD cut", nptbins,ptmin,ptmax, ntimptbins,timemin,timemax);
2396 fhTimePtSPD->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2397 fhTimePtSPD->SetYTitle("#it{t} (ns)");
126b8c62 2398 outputContainer->Add(fhTimePtSPD);
2ad19c3d 2399
5ba76d0d 2400 fhTimePtSPDMulti = new TH2F ("hTimePt_SPDMulti","time of cluster vs #it{E} of clusters, SPD multi cut", nptbins,ptmin,ptmax, ntimptbins,timemin,timemax);
2401 fhTimePtSPDMulti->SetXTitle("#it{p}_{T} (GeV/#it{c})");
2402 fhTimePtSPDMulti->SetYTitle("#it{t} (ns)");
126b8c62 2403 outputContainer->Add(fhTimePtSPDMulti);
2ad19c3d 2404
5ba76d0d 2405 fhTimeNPileUpVertSPD = new TH2F ("hTime_NPileUpVertSPD","#it{t} of cluster vs #it{N} pile-up SPD vertex", ntimptbins,timemin,timemax,50,0,50);
2ad19c3d 2406 fhTimeNPileUpVertSPD->SetYTitle("# vertex ");
5ba76d0d 2407 fhTimeNPileUpVertSPD->SetXTitle("#it{t} (ns)");
85c4406e 2408 outputContainer->Add(fhTimeNPileUpVertSPD);
2ad19c3d 2409
5ba76d0d 2410 fhTimeNPileUpVertTrack = new TH2F ("hTime_NPileUpVertTracks","#it{t} of cluster vs #it{N} pile-up Tracks vertex", ntimptbins,timemin,timemax, 50,0,50 );
2ad19c3d 2411 fhTimeNPileUpVertTrack->SetYTitle("# vertex ");
5ba76d0d 2412 fhTimeNPileUpVertTrack->SetXTitle("#it{t} (ns)");
85c4406e 2413 outputContainer->Add(fhTimeNPileUpVertTrack);
2ad19c3d 2414
5ba76d0d 2415 fhTimeNPileUpVertContributors = new TH2F ("hTime_NPileUpVertContributors","#it{t} of cluster vs #it{N} constributors to pile-up SPD vertex", ntimptbins,timemin,timemax,50,0,50);
2ad19c3d 2416 fhTimeNPileUpVertContributors->SetYTitle("# vertex ");
5ba76d0d 2417 fhTimeNPileUpVertContributors->SetXTitle("#it{t} (ns)");
85c4406e 2418 outputContainer->Add(fhTimeNPileUpVertContributors);
2ad19c3d 2419
5ba76d0d 2420 fhTimePileUpMainVertexZDistance = new TH2F ("hTime_PileUpMainVertexZDistance","#it{t} of cluster vs distance in #it{Z} pile-up SPD vertex - main SPD vertex",ntimptbins,timemin,timemax,100,0,50);
2421 fhTimePileUpMainVertexZDistance->SetYTitle("distance #it{Z} (cm) ");
2422 fhTimePileUpMainVertexZDistance->SetXTitle("#it{t} (ns)");
85c4406e 2423 outputContainer->Add(fhTimePileUpMainVertexZDistance);
2ad19c3d 2424
5ba76d0d 2425 fhTimePileUpMainVertexZDiamond = new TH2F ("hTime_PileUpMainVertexZDiamond","#it{t} of cluster vs distance in #it{Z} pile-up SPD vertex - z diamond",ntimptbins,timemin,timemax,100,0,50);
2426 fhTimePileUpMainVertexZDiamond->SetYTitle("diamond distance #it{Z} (cm) ");
2427 fhTimePileUpMainVertexZDiamond->SetXTitle("#it{t} (ns)");
85c4406e 2428 outputContainer->Add(fhTimePileUpMainVertexZDiamond);
0f7e7205 2429
5ba76d0d 2430 fhPtNPileUpSPDVtx = new TH2F ("hPt_NPileUpVertSPD","#it{p}_{T} of cluster vs #it{N} pile-up SPD vertex",
85c4406e 2431 nptbins,ptmin,ptmax,20,0,20);
0f7e7205 2432 fhPtNPileUpSPDVtx->SetYTitle("# vertex ");
5ba76d0d 2433 fhPtNPileUpSPDVtx->SetXTitle("#it{p}_{T} (GeV/#it{c})");
0f7e7205 2434 outputContainer->Add(fhPtNPileUpSPDVtx);
2435
5ba76d0d 2436 fhPtNPileUpTrkVtx = new TH2F ("hPt_NPileUpVertTracks","#it{p}_{T} of cluster vs #it{N} pile-up Tracks vertex",
85c4406e 2437 nptbins,ptmin,ptmax, 20,0,20 );
0f7e7205 2438 fhPtNPileUpTrkVtx->SetYTitle("# vertex ");
5ba76d0d 2439 fhPtNPileUpTrkVtx->SetXTitle("#it{p}_{T} (GeV/#it{c})");
85c4406e 2440 outputContainer->Add(fhPtNPileUpTrkVtx);
0f7e7205 2441
5ba76d0d 2442 fhPtNPileUpSPDVtxTimeCut = new TH2F ("hPt_NPileUpVertSPD_TimeCut","#it{p}_{T} of cluster vs N pile-up SPD vertex, |tof| < 25 ns",
85c4406e 2443 nptbins,ptmin,ptmax,20,0,20);
0f7e7205 2444 fhPtNPileUpSPDVtxTimeCut->SetYTitle("# vertex ");
5ba76d0d 2445 fhPtNPileUpSPDVtxTimeCut->SetXTitle("#it{p}_{T} (GeV/#it{c})");
0f7e7205 2446 outputContainer->Add(fhPtNPileUpSPDVtxTimeCut);
2447
5ba76d0d 2448 fhPtNPileUpTrkVtxTimeCut = new TH2F ("hPt_NPileUpVertTracks_TimeCut","#it{p}_{T} of cluster vs N pile-up Tracks vertex, |tof| < 25 ns",
85c4406e 2449 nptbins,ptmin,ptmax, 20,0,20 );
0f7e7205 2450 fhPtNPileUpTrkVtxTimeCut->SetYTitle("# vertex ");
5ba76d0d 2451 fhPtNPileUpTrkVtxTimeCut->SetXTitle("#it{p}_{T} (GeV/#it{c})");
85c4406e 2452 outputContainer->Add(fhPtNPileUpTrkVtxTimeCut);
2453
5ba76d0d 2454 fhPtNPileUpSPDVtxTimeCut2 = new TH2F ("hPt_NPileUpVertSPD_TimeCut2","#it{p}_{T} of cluster vs N pile-up SPD vertex, -25 < tof < 75 ns",
85c4406e 2455 nptbins,ptmin,ptmax,20,0,20);
2456 fhPtNPileUpSPDVtxTimeCut2->SetYTitle("# vertex ");
5ba76d0d 2457 fhPtNPileUpSPDVtxTimeCut2->SetXTitle("#it{p}_{T} (GeV/#it{c})");
85c4406e 2458 outputContainer->Add(fhPtNPileUpSPDVtxTimeCut2);
2459
5ba76d0d 2460 fhPtNPileUpTrkVtxTimeCut2 = new TH2F ("hPt_NPileUpVertTracks_TimeCut2","#it{p}_{T} of cluster vs N pile-up Tracks vertex, -25 < tof < 75 ns",
85c4406e 2461 nptbins,ptmin,ptmax, 20,0,20 );
2462 fhPtNPileUpTrkVtxTimeCut2->SetYTitle("# vertex ");
5ba76d0d 2463 fhPtNPileUpTrkVtxTimeCut2->SetXTitle("#it{p}_{T} (GeV/#it{c})");
85c4406e 2464 outputContainer->Add(fhPtNPileUpTrkVtxTimeCut2);
2465
2ad19c3d 2466 }
2467
477d6cee 2468 //Keep neutral meson selection histograms if requiered
2469 //Setting done in AliNeutralMesonSelection
2470
e4ef72be 2471 if(fAnaType!=kSSCalo && GetNeutralMesonSelection())
2472 {
477d6cee 2473 TList * nmsHistos = GetNeutralMesonSelection()->GetCreateOutputObjects() ;
e4ef72be 2474
477d6cee 2475 if(GetNeutralMesonSelection()->AreNeutralMesonSelectionHistosKept())
2476 for(Int_t i = 0; i < nmsHistos->GetEntries(); i++) outputContainer->Add(nmsHistos->At(i)) ;
e4ef72be 2477
5ae09196 2478 delete nmsHistos;
477d6cee 2479 }
2480
477d6cee 2481 return outputContainer ;
2482
2483}
2484
3455f821 2485//_____________________________________________
2486Int_t AliAnaPi0EbE::GetMCIndex(const Int_t tag)
85c4406e 2487{
3455f821 2488
2489 // Assign mc index depending on MC bit set
2490
2491 if ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0) )
2492 {
85c4406e 2493 return kmcPi0 ;
3455f821 2494 }//pi0
2495 else if ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEta) )
2496 {
85c4406e 2497 return kmcEta ;
2498 }//eta
3455f821 2499 else if ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton) &&
1253480f 2500 GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion) )
3455f821 2501 {
85c4406e 2502 return kmcConversion ;
3455f821 2503 }//conversion photon
2504 else if ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton) )
2505 {
85c4406e 2506 return kmcPhoton ;
3455f821 2507 }//photon no conversion
2508 else if ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCElectron))
2509 {
85c4406e 2510 return kmcElectron ;
3455f821 2511 }//electron
85c4406e 2512 else
3455f821 2513 {
85c4406e 2514 return kmcHadron ;
2515 }//other particles
3455f821 2516
2517}
2518
2519//__________________________________________________________________
85c4406e 2520void AliAnaPi0EbE::HasPairSameMCMother(AliAODPWG4Particle * photon1,
2521 AliAODPWG4Particle * photon2,
3455f821 2522 Int_t & label, Int_t & tag)
2523{
2524 // Check the labels of pare in case mother was same pi0 or eta
2525 // Set the new AOD accordingly
2526
2527 Int_t label1 = photon1->GetLabel();
2528 Int_t label2 = photon2->GetLabel();
2529
2530 if(label1 < 0 || label2 < 0 ) return ;
2531
2644ead9 2532 //Int_t tag1 = GetMCAnalysisUtils()->CheckOrigin(label1, GetReader());
2533 //Int_t tag2 = GetMCAnalysisUtils()->CheckOrigin(label2, GetReader());
3455f821 2534 Int_t tag1 = photon1->GetTag();
2535 Int_t tag2 = photon2->GetTag();
2536
2537 if(GetDebug() > 0) printf("AliAnaPi0EbE::MakeInvMassInCalorimeter() - Origin of: photon1 %d; photon2 %d \n",tag1, tag2);
85c4406e 2538 if( (GetMCAnalysisUtils()->CheckTagBit(tag1,AliMCAnalysisUtils::kMCPi0Decay) &&
3455f821 2539 GetMCAnalysisUtils()->CheckTagBit(tag2,AliMCAnalysisUtils::kMCPi0Decay) ) ||
08c09f10 2540 (GetMCAnalysisUtils()->CheckTagBit(tag1,AliMCAnalysisUtils::kMCEtaDecay) &&
2541 GetMCAnalysisUtils()->CheckTagBit(tag2,AliMCAnalysisUtils::kMCEtaDecay) )
3455f821 2542 )
2543 {
2544
2545 //Check if pi0/eta mother is the same
2546 if(GetReader()->ReadStack())
85c4406e 2547 {
3455f821 2548 if(label1>=0)
2549 {
2550 TParticle * mother1 = GetMCStack()->Particle(label1);//photon in kine tree
2551 label1 = mother1->GetFirstMother();
2552 //mother1 = GetMCStack()->Particle(label1);//pi0
2553 }
2554 if(label2>=0)
2555 {
2556 TParticle * mother2 = GetMCStack()->Particle(label2);//photon in kine tree
2557 label2 = mother2->GetFirstMother();
2558 //mother2 = GetMCStack()->Particle(label2);//pi0
2559 }
2560 } // STACK
2561 else if(GetReader()->ReadAODMCParticles())
2562 {//&& (input > -1)){
2563 if(label1>=0)
2564 {
2644ead9 2565 AliAODMCParticle * mother1 = (AliAODMCParticle *) (GetReader()->GetAODMCParticles())->At(label1);//photon in kine tree
3455f821 2566 label1 = mother1->GetMother();
2567 //mother1 = GetMCStack()->Particle(label1);//pi0
2568 }
2569 if(label2>=0)
2570 {
2644ead9 2571 AliAODMCParticle * mother2 = (AliAODMCParticle *) (GetReader()->GetAODMCParticles())->At(label2);//photon in kine tree
3455f821 2572 label2 = mother2->GetMother();
2573 //mother2 = GetMCStack()->Particle(label2);//pi0
2574 }
2575 }// AOD
2576
2577 //printf("mother1 %d, mother2 %d\n",label1,label2);
2578 if( label1 == label2 && label1>=0 )
2579 {
2580
2581 label = label1;
2582
2583 TLorentzVector mom1 = *(photon1->Momentum());
2584 TLorentzVector mom2 = *(photon2->Momentum());
2585
2586 Double_t angle = mom2.Angle(mom1.Vect());
2587 Double_t mass = (mom1+mom2).M();
2588 Double_t epair = (mom1+mom2).E();
2589
2590 if(GetMCAnalysisUtils()->CheckTagBit(tag1,AliMCAnalysisUtils::kMCPi0Decay))
2591 {
2592 fhMassPairMCPi0 ->Fill(epair,mass);
2593 fhAnglePairMCPi0->Fill(epair,angle);
2594 GetMCAnalysisUtils()->SetTagBit(tag,AliMCAnalysisUtils::kMCPi0);
2595 }
85c4406e 2596 else
3455f821 2597 {
2598 fhMassPairMCEta ->Fill(epair,mass);
2599 fhAnglePairMCEta->Fill(epair,angle);
2600 GetMCAnalysisUtils()->SetTagBit(tag,AliMCAnalysisUtils::kMCEta);
2601 }
2602
2603 } // same label
2604 } // both from eta or pi0 decay
2605
85c4406e 2606}
3455f821 2607
521636d2 2608//____________________________________________________________________________
2609void AliAnaPi0EbE::Init()
85c4406e 2610{
521636d2 2611 //Init
2612 //Do some checks
2613 if(fCalorimeter == "PHOS" && !GetReader()->IsPHOSSwitchedOn() && NewOutputAOD()){
2614 printf("AliAnaPi0EbE::Init() - !!STOP: You want to use PHOS in analysis but it is not read!! \n!!Check the configuration file!!\n");
2615 abort();
2616 }
2617 else if(fCalorimeter == "EMCAL" && !GetReader()->IsEMCALSwitchedOn() && NewOutputAOD()){
2618 printf("AliAnaPi0EbE::Init() - !!STOP: You want to use EMCAL in analysis but it is not read!! \n!!Check the configuration file!!\n");
2619 abort();
2620 }
2621
2622}
2623
2624//____________________________________________________________________________
2625void AliAnaPi0EbE::InitParameters()
2626{
85c4406e 2627 //Initialize the parameters of the analysis.
5d0ba847 2628 AddToHistogramsName("AnaPi0EbE_");
521636d2 2629
1db06135 2630 fInputAODGammaConvName = "PhotonsCTS" ;
521636d2 2631 fAnaType = kIMCalo ;
2632 fCalorimeter = "EMCAL" ;
2633 fMinDist = 2.;
2634 fMinDist2 = 4.;
2635 fMinDist3 = 5.;
2636
4d97a954 2637 fNLMECutMin[0] = 10.;
2638 fNLMECutMin[1] = 6. ;
2639 fNLMECutMin[2] = 6. ;
521636d2 2640}
2641
477d6cee 2642//__________________________________________________________________
85c4406e 2643void AliAnaPi0EbE::MakeAnalysisFillAOD()
477d6cee 2644{
2645 //Do analysis and fill aods
2646
85c4406e 2647 switch(fAnaType)
521636d2 2648 {
477d6cee 2649 case kIMCalo:
2650 MakeInvMassInCalorimeter();
2651 break;
2652
2653 case kSSCalo:
2654 MakeShowerShapeIdentification();
2655 break;
2656
2657 case kIMCaloTracks:
2658 MakeInvMassInCalorimeterAndCTS();
2659 break;
2660
521636d2 2661 }
477d6cee 2662}
2663
42d47cb7 2664//____________________________________________
85c4406e 2665void AliAnaPi0EbE::MakeInvMassInCalorimeter()
477d6cee 2666{
57b97dc6 2667 //Do analysis and fill aods
2668 //Search for the photon decay in calorimeters
2669 //Read photon list from AOD, produced in class AliAnaPhoton
2670 //Check if 2 photons have the mass of the pi0.
477d6cee 2671
2672 TLorentzVector mom1;
2673 TLorentzVector mom2;
2674 TLorentzVector mom ;
85c4406e 2675
b5dbb99b 2676 Int_t tag = 0;
2677 Int_t label = 0;
477d6cee 2678
2679 if(!GetInputAODBranch()){
a3aebfff 2680 printf("AliAnaPi0EbE::MakeInvMassInCalorimeter() - No input calo photons in AOD with name branch < %s >, STOP \n",GetInputAODName().Data());
477d6cee 2681 abort();
2682 }
f8006433 2683
42d47cb7 2684 //Get shower shape information of clusters
2685 TObjArray *clusters = 0;
2686 if (fCalorimeter=="EMCAL") clusters = GetEMCALClusters();
2687 else if(fCalorimeter=="PHOS") clusters = GetPHOSClusters() ;
2688
c4a7d28a 2689 for(Int_t iphoton = 0; iphoton < GetInputAODBranch()->GetEntriesFast()-1; iphoton++){
477d6cee 2690 AliAODPWG4Particle * photon1 = (AliAODPWG4Particle*) (GetInputAODBranch()->At(iphoton));
c8fe2783 2691
c4a7d28a 2692 //Vertex cut in case of mixed events
85c4406e 2693 Int_t evtIndex1 = 0 ;
c8fe2783 2694 if(GetMixedEvent())
2695 evtIndex1 = GetMixedEvent()->EventIndexForCaloCluster(photon1->GetCaloLabel(0)) ;
5025c139 2696 if(TMath::Abs(GetVertex(evtIndex1)[2]) > GetZvertexCut()) continue ; //vertex cut
477d6cee 2697 mom1 = *(photon1->Momentum());
2698
42d47cb7 2699 //Get original cluster, to recover some information
1db06135 2700 Int_t iclus = -1;
85c4406e 2701 AliVCluster *cluster1 = FindCluster(clusters,photon1->GetCaloLabel(0),iclus);
42d47cb7 2702
1db06135 2703 if(!cluster1){
42d47cb7 2704 printf("AliAnaPi0EbE::MakeInvMassInCalorimeter() - First cluster not found\n");
2705 return;
9ab9e937 2706 }
c4a7d28a 2707
b5dbb99b 2708 for(Int_t jphoton = iphoton+1; jphoton < GetInputAODBranch()->GetEntriesFast(); jphoton++)
2709 {
a3aebfff 2710 AliAODPWG4Particle * photon2 = (AliAODPWG4Particle*) (GetInputAODBranch()->At(jphoton));
b5dbb99b 2711
85c4406e 2712 Int_t evtIndex2 = 0 ;
c8fe2783 2713 if(GetMixedEvent())
2714 evtIndex2 = GetMixedEvent()->EventIndexForCaloCluster(photon2->GetCaloLabel(0)) ;
b5dbb99b 2715
c8fe2783 2716 if(GetMixedEvent() && (evtIndex1 == evtIndex2))
85c4406e 2717 continue ;
b5dbb99b 2718
5025c139 2719 if(TMath::Abs(GetVertex(evtIndex2)[2]) > GetZvertexCut()) continue ; //vertex cut
b5dbb99b 2720
477d6cee 2721 mom2 = *(photon2->Momentum());
c4a7d28a 2722
1db06135 2723 //Get original cluster, to recover some information
5d0ba847 2724 Int_t iclus2 = -1;
85c4406e 2725 AliVCluster *cluster2 = FindCluster(clusters,photon2->GetCaloLabel(0),iclus2,iclus+1);
5d0ba847 2726 // start new loop from iclus1+1 to gain some time
2727
b5dbb99b 2728 if(!cluster2)
2729 {
42d47cb7 2730 printf("AliAnaPi0EbE::MakeInvMassInCalorimeter() - Second cluster not found\n");
1db06135 2731 return;
9ab9e937 2732 }
c4a7d28a 2733
85c4406e 2734 Float_t e1 = photon1->E();
42d47cb7 2735 Float_t e2 = photon2->E();
2736
2737 //Select clusters with good time window difference
2738 Float_t tof1 = cluster1->GetTOF()*1e9;;
2739 Float_t tof2 = cluster2->GetTOF()*1e9;;
2740 Double_t t12diff = tof1-tof2;
2741 fhEPairDiffTime->Fill(e1+e2, t12diff);
2742 if(TMath::Abs(t12diff) > GetPairTimeCut()) continue;
2743
b5dbb99b 2744 //Play with the MC stack if available
2745 if(IsDataMC()) HasPairSameMCMother(photon1, photon2, label, tag) ;
85c4406e 2746
5c46c992 2747 // Check the invariant mass for different selection on the local maxima
2748 // Name of AOD method TO BE FIXED
2749 Int_t nMaxima1 = photon1->GetFiducialArea();
2750 Int_t nMaxima2 = photon2->GetFiducialArea();
2751
5d0ba847 2752 mom = mom1+mom2;
2753
2754 Double_t mass = mom.M();
2755 Double_t epair = mom.E();
5c46c992 2756
2757 if(nMaxima1==nMaxima2)
2758 {
2759 if (nMaxima1==1) fhMassPairLocMax[0]->Fill(epair,mass);
2760 else if(nMaxima1==2) fhMassPairLocMax[1]->Fill(epair,mass);
2761 else fhMassPairLocMax[2]->Fill(epair,mass);
2762 }
2763 else if(nMaxima1==1 || nMaxima2==1)
2764 {
2765 if (nMaxima1==2 || nMaxima2==2) fhMassPairLocMax[3]->Fill(epair,mass);
85c4406e 2766 else fhMassPairLocMax[4]->Fill(epair,mass);
5c46c992 2767 }
85c4406e 2768 else
5c46c992 2769 fhMassPairLocMax[5]->Fill(epair,mass);
2770
3c1d9afb 2771 // combinations with SS axis cut and NLM cut
85c4406e 2772 if(nMaxima1 == 1 && cluster2->GetM02() > 0.3) fhMassPairLocMax[6]->Fill(epair,mass);
2773 if(nMaxima2 == 1 && cluster1->GetM02() > 0.3) fhMassPairLocMax[6]->Fill(epair,mass);
2774 if(nMaxima1 > 1 && cluster2->GetM02() < 0.3 && cluster2->GetM02()> 0.1 ) fhMassPairLocMax[7]->Fill(epair,mass);
2775 if(nMaxima2 > 1 && cluster1->GetM02() < 0.3 && cluster1->GetM02()> 0.1 ) fhMassPairLocMax[7]->Fill(epair,mass);
3c1d9afb 2776
a6e83e39 2777 //Skip events with too few or too many NLM
fb51265c 2778 if((nMaxima1 < fNLMCutMin || nMaxima1 > fNLMCutMax) || (nMaxima2 < fNLMCutMin || nMaxima2 > fNLMCutMax)) continue ;
a6e83e39 2779
2780 if(GetDebug() > 1) printf("AliAnaPi0EbE::MakeInvMassInCalorimeter() - NLM of out of range: cluster1 %d, cluster2 %d \n",nMaxima1, nMaxima2);
2781
f02db2c0 2782 //Mass of all pairs
5d0ba847 2783 fhMass->Fill(epair,mass);
a6e83e39 2784
57b97dc6 2785 //Select good pair (good phi, pt cuts, aperture and invariant mass)
3bfcb597 2786 if(GetNeutralMesonSelection()->SelectPair(mom1, mom2,fCalorimeter))
c8fe2783 2787 {
85c4406e 2788 if(GetDebug()>1)
aa845126 2789 printf("AliAnaPi0EbE::MakeInvMassInCalorimeter() - Selected gamma pair: pt %f, phi %f, eta%f \n",
2790 mom.Pt(), mom.Phi()*TMath::RadToDeg(), mom.Eta());
42d47cb7 2791
57b97dc6 2792 //Fill some histograms about shower shape
06e81356 2793 if(fFillSelectClHisto && clusters && GetReader()->GetDataType()!=AliCaloTrackReader::kMC)
5c46c992 2794 {
08c09f10 2795 FillSelectedClusterHistograms(cluster1, mom1.Pt(), nMaxima1, photon1->GetTag());
2796 FillSelectedClusterHistograms(cluster2, mom2.Pt(), nMaxima2, photon2->GetTag());
42d47cb7 2797 }
521636d2 2798
aa845126 2799 // Tag both photons as decay, !!careful!! since in case of SideBand analysis, also they will be tagged.
803d06a8 2800 photon1->SetTagged(kTRUE);
2801 photon2->SetTagged(kTRUE);
09273901 2802
2803 fhPtDecay->Fill(photon1->Pt());
2804 fhEDecay ->Fill(photon1->E() );
2805
2806 fhPtDecay->Fill(photon2->Pt());
2807 fhEDecay ->Fill(photon2->E() );
2ad19c3d 2808
f02db2c0 2809 //Mass of selected pairs
5d0ba847 2810 fhSelectedMass->Fill(epair,mass);
f02db2c0 2811
2ad19c3d 2812 // Fill histograms to undertand pile-up before other cuts applied
2813 // Remember to relax time cuts in the reader
126b8c62 2814 FillPileUpHistograms(mom.Pt(),((cluster1->GetTOF()+cluster2->GetTOF())*1e9)/2,cluster1);
2ad19c3d 2815
5d0ba847 2816 //Create AOD for analysis
2817
c8fe2783 2818 AliAODPWG4Particle pi0 = AliAODPWG4Particle(mom);
b5dbb99b 2819
5d0ba847 2820 if ( (GetNeutralMesonSelection()->GetParticle()).Contains("Pi0") ) pi0.SetIdentifiedParticleType(AliCaloPID::kPi0);
2821 else if( (GetNeutralMesonSelection()->GetParticle()).Contains("Eta") ) pi0.SetIdentifiedParticleType(AliCaloPID::kEta);
2822 else
2823 {
2824 printf("AliAnaPi0EbE::MakeInvMassInCalorimeter() - Particle type declared in AliNeutralMeson not correct, do not add \n");
2825 return ;
2826 }
c8fe2783 2827 pi0.SetDetector(photon1->GetDetector());
b5dbb99b 2828
2829 // MC
2830 pi0.SetLabel(label);
85c4406e 2831 pi0.SetTag(tag);
b5dbb99b 2832
85c4406e 2833 //Set the indeces of the original caloclusters
c8fe2783 2834 pi0.SetCaloLabel(photon1->GetCaloLabel(0), photon2->GetCaloLabel(0));
f8006433 2835 //pi0.SetInputFileIndex(input);
b5dbb99b 2836
c8fe2783 2837 AddAODParticle(pi0);
b5dbb99b 2838
c8fe2783 2839 }//pi0
57b97dc6 2840
477d6cee 2841 }//2n photon loop
2842
2843 }//1st photon loop
2844
85c4406e 2845 if(GetDebug() > 1) printf("AliAnaPi0EbE::MakeInvMassInCalorimeter() - End fill AODs \n");
477d6cee 2846
2847}
2848
e7fd282f 2849//__________________________________________________
85c4406e 2850void AliAnaPi0EbE::MakeInvMassInCalorimeterAndCTS()
477d6cee 2851{
2852 //Do analysis and fill aods
2853 //Search for the photon decay in calorimeters
2854 //Read photon list from AOD, produced in class AliAnaPhoton and AliGammaConversion
2855 //Check if 2 photons have the mass of the pi0.
2856
2857 TLorentzVector mom1;
2858 TLorentzVector mom2;
2859 TLorentzVector mom ;
b5dbb99b 2860 Int_t tag = 0;
2861 Int_t label = 0;
5025c139 2862 Int_t evtIndex = 0;
1db06135 2863
2864 // Check calorimeter input
aa845126 2865 if(!GetInputAODBranch())
2866 {
a3aebfff 2867 printf("AliAnaPi0EbE::MakeInvMassInCalorimeterAndCTS() - No input calo photons in AOD branch with name < %s > , STOP\n",GetInputAODName().Data());
477d6cee 2868 abort();
2869 }
57b97dc6 2870
1db06135 2871 // Get the array with conversion photons
2872 TClonesArray * inputAODGammaConv = (TClonesArray *) GetReader()->GetOutputEvent()->FindListObject(fInputAODGammaConvName);
aa845126 2873 if(!inputAODGammaConv)
2874 {
1db06135 2875 inputAODGammaConv = (TClonesArray *) GetReader()->GetInputEvent()->FindListObject(fInputAODGammaConvName);
2876
aa845126 2877 if(!inputAODGammaConv)
2878 {
1db06135 2879 printf("AliAnaPi0EbE::MakeInvMassInCalorimeterAndCTS() - No input gamma conversions in AOD branch with name < %s >\n",fInputAODGammaConvName.Data());
2880
2881 return;
2882 }
85c4406e 2883 }
1db06135 2884
2885 //Get shower shape information of clusters
2886 TObjArray *clusters = 0;
2887 if (fCalorimeter=="EMCAL") clusters = GetEMCALClusters();
85c4406e 2888 else if(fCalorimeter=="PHOS") clusters = GetPHOSClusters() ;
1db06135 2889
2890 Int_t nCTS = inputAODGammaConv->GetEntriesFast();
2891 Int_t nCalo = GetInputAODBranch()->GetEntriesFast();
85c4406e 2892 if(nCTS<=0 || nCalo <=0)
a6e83e39 2893 {
1db06135 2894 if(GetDebug() > 1) printf("AliAnaPi0EbE::MakeInvMassInCalorimeterAndCTS() - nCalo %d, nCTS %d, cannot loop\n",nCalo,nCTS);
2895 return;
2896 }
2897
2898 if(GetDebug() > 1)
2899 printf("AliAnaPi0EbE::MakeInvMassInCalorimeterAndCTS() - Number of conversion photons %d\n",nCTS);
2900
2901 // Do the loop, first calo, second CTS
aa845126 2902 for(Int_t iphoton = 0; iphoton < GetInputAODBranch()->GetEntriesFast(); iphoton++)
2903 {
477d6cee 2904 AliAODPWG4Particle * photon1 = (AliAODPWG4Particle*) (GetInputAODBranch()->At(iphoton));
2905 mom1 = *(photon1->Momentum());
2906
1db06135 2907 //Get original cluster, to recover some information
2908 Int_t iclus = -1;
85c4406e 2909 AliVCluster *cluster = FindCluster(clusters,photon1->GetCaloLabel(0),iclus);
1db06135 2910
aa845126 2911 for(Int_t jphoton = 0; jphoton < nCTS; jphoton++)
2912 {
1db06135 2913 AliAODPWG4Particle * photon2 = (AliAODPWG4Particle*) (inputAODGammaConv->At(jphoton));
aa845126 2914
5025c139 2915 if(GetMixedEvent())
2916 evtIndex = GetMixedEvent()->EventIndexForCaloCluster(photon2->GetCaloLabel(0)) ;
2917 if(TMath::Abs(GetVertex(evtIndex)[2]) > GetZvertexCut()) continue ; //vertex cut
2918
477d6cee 2919 mom2 = *(photon2->Momentum());
57b97dc6 2920
aa845126 2921 mom = mom1+mom2;
2922
2923 Double_t mass = mom.M();
2924 Double_t epair = mom.E();
5c46c992 2925
2926 Int_t nMaxima = photon1->GetFiducialArea();
2927 if (nMaxima==1) fhMassPairLocMax[0]->Fill(epair,mass);
2928 else if(nMaxima==2) fhMassPairLocMax[1]->Fill(epair,mass);
2929 else fhMassPairLocMax[2]->Fill(epair,mass);
2930
a6e83e39 2931 if(nMaxima < fNLMCutMin || nMaxima > fNLMCutMax) continue ;
2932 if(GetDebug() > 1) printf("AliAnaPi0EbE::MakeInvMassInCalorimeterAndCTS() - NLM %d of out of range \n",nMaxima);
85c4406e 2933
b5dbb99b 2934 //Play with the MC stack if available
2935 if(IsDataMC())
2936 {
2937 Int_t label2 = photon2->GetLabel();
2644ead9 2938 if(label2 >= 0 )photon2->SetTag(GetMCAnalysisUtils()->CheckOrigin(label2, GetReader()));
b5dbb99b 2939
2940 HasPairSameMCMother(photon1, photon2, label, tag) ;
2941 }
2942
f02db2c0 2943 //Mass of selected pairs
aa845126 2944 fhMass->Fill(epair,mass);
f02db2c0 2945
477d6cee 2946 //Select good pair (good phi, pt cuts, aperture and invariant mass)
b5dbb99b 2947 if(GetNeutralMesonSelection()->SelectPair(mom1, mom2,fCalorimeter))
2948 {
aa845126 2949 if(GetDebug() > 1) printf("AliAnaPi0EbE::MakeInvMassInCalorimeterAndCTS() - Selected gamma pair: pt %f, phi %f, eta%f\n",
2950 mom.Pt(), mom.Phi()*TMath::RadToDeg(), mom.Eta());
57b97dc6 2951
1db06135 2952 //Fill some histograms about shower shape
06e81356 2953 if(fFillSelectClHisto && cluster && GetReader()->GetDataType()!=AliCaloTrackReader::kMC)
b5dbb99b 2954 {
08c09f10 2955 FillSelectedClusterHistograms(cluster, mom1.Pt(), nMaxima, photon1->GetTag());
85c4406e 2956 }
803d06a8 2957
aa845126 2958 // Tag both photons as decay, !!careful!! since in case of SideBand analysis, also they will be tagged.
803d06a8 2959 photon1->SetTagged(kTRUE);
85c4406e 2960 photon2->SetTagged(kTRUE);
1db06135 2961
09273901 2962 fhPtDecay->Fill(photon1->Pt());
2963 fhEDecay ->Fill(photon1->E() );
2964
f02db2c0 2965 //Mass of selected pairs
aa845126 2966 fhSelectedMass->Fill(epair,mass);
f02db2c0 2967
2ad19c3d 2968 // Fill histograms to undertand pile-up before other cuts applied
2969 // Remember to relax time cuts in the reader
126b8c62 2970 if(cluster) FillPileUpHistograms(mom.Pt(),cluster->GetTOF()*1e9,cluster);
aa845126 2971
2972 //Create AOD for analysis
2ad19c3d 2973
57b97dc6 2974 AliAODPWG4Particle pi0 = AliAODPWG4Particle(mom);
b5dbb99b 2975
5d0ba847 2976 if ( (GetNeutralMesonSelection()->GetParticle()).Contains("Pi0") ) pi0.SetIdentifiedParticleType(AliCaloPID::kPi0);
2977 else if( (GetNeutralMesonSelection()->GetParticle()).Contains("Eta") ) pi0.SetIdentifiedParticleType(AliCaloPID::kEta);
2978 else
2979 {
2980 printf("AliAnaPi0EbE::MakeInvMassInCalorimeterAndCTS() - Particle type declared in AliNeutralMeson not correct, do not add \n");
2981 return ;
2982 }
57b97dc6 2983 pi0.SetDetector(photon1->GetDetector());
b5dbb99b 2984
2985 // MC
2986 pi0.SetLabel(label);
57b97dc6 2987 pi0.SetTag(tag);
b5dbb99b 2988
85c4406e 2989 //Set the indeces of the original tracks or caloclusters
aa845126 2990 pi0.SetCaloLabel (photon1->GetCaloLabel(0) , -1);
57b97dc6 2991 pi0.SetTrackLabel(photon2->GetTrackLabel(0), photon2->GetTrackLabel(1));
f8006433 2992 //pi0.SetInputFileIndex(input);
b5dbb99b 2993
57b97dc6 2994 AddAODParticle(pi0);
b5dbb99b 2995
477d6cee 2996 }//pi0
2997 }//2n photon loop
2998
2999 }//1st photon loop
3000
85c4406e 3001 if(GetDebug() > 1) printf("AliAnaPi0EbE::MakeInvMassInCalorimeterAndCTS() - End fill AODs \n");
477d6cee 3002
3003}
3004
e7fd282f 3005//_________________________________________________
85c4406e 3006void AliAnaPi0EbE::MakeShowerShapeIdentification()
477d6cee 3007{
85c4406e 3008 //Search for pi0 in fCalorimeter with shower shape analysis
477d6cee 3009
85c4406e 3010 TObjArray * pl = 0x0;
34c16486 3011 AliVCaloCells * cells = 0x0;
5ae09196 3012 //Select the Calorimeter of the photon
b5dbb99b 3013 if (fCalorimeter == "PHOS" )
34c16486 3014 {
3015 pl = GetPHOSClusters();
3016 cells = GetPHOSCells();
3017 }
5ae09196 3018 else if (fCalorimeter == "EMCAL")
34c16486 3019 {
3020 pl = GetEMCALClusters();
3021 cells = GetEMCALCells();
3022 }
57b97dc6 3023
85c4406e 3024 if(!pl)
34c16486 3025 {
5ae09196 3026 Info("MakeShowerShapeIdentification","TObjArray with %s clusters is NULL!\n",fCalorimeter.Data());
3027 return;
85c4406e 3028 }
233e0df8 3029
477d6cee 3030 TLorentzVector mom ;
b5dbb99b 3031 for(Int_t icalo = 0; icalo < pl->GetEntriesFast(); icalo++)
3032 {
85c4406e 3033 AliVCluster * calo = (AliVCluster*) (pl->At(icalo));
477d6cee 3034
85c4406e 3035 Int_t evtIndex = 0 ;
3036 if (GetMixedEvent())
b5dbb99b 3037 {
85c4406e 3038 evtIndex=GetMixedEvent()->EventIndexForCaloCluster(calo->GetID()) ;
f8006433 3039 }
34c16486 3040
5025c139 3041 if(TMath::Abs(GetVertex(evtIndex)[2]) > GetZvertexCut()) continue ; //vertex cut
521636d2 3042
85c4406e 3043 //Get Momentum vector,
a6e83e39 3044 Double_t vertex[]={0,0,0};
34c16486 3045 if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
3046 {
3047 calo->GetMomentum(mom,GetVertex(evtIndex)) ;
3048 }//Assume that come from vertex in straight line
3049 else
3050 {
f8006433 3051 calo->GetMomentum(mom,vertex) ;
3052 }
233e0df8 3053
57b97dc6 3054 //If too small or big pt, skip it
85c4406e 3055 if(mom.E() < GetMinEnergy() || mom.E() > GetMaxEnergy() ) continue ;
34c16486 3056
477d6cee 3057 //Check acceptance selection
b5dbb99b 3058 if(IsFiducialCutOn())
3059 {
ff45398a 3060 Bool_t in = GetFiducialCut()->IsInFiducialCut(mom,fCalorimeter) ;
477d6cee 3061 if(! in ) continue ;
3062 }
3063
85c4406e 3064 if(GetDebug() > 1)
3065 printf("AliAnaPi0EbE::MakeShowerShapeIdentification() - FillAOD: Min pt cut and fiducial cut passed: pt %3.2f, phi %2.2f, eta %1.2f\n",mom.Pt(),mom.Phi(),mom.Eta());
3066
3a4c49b7 3067 //Play with the MC stack if available
3068 //Check origin of the candidates
3069 Int_t tag = 0 ;
3070 if(IsDataMC())
3071 {
3072 tag = GetMCAnalysisUtils()->CheckOrigin(calo->GetLabels(),calo->GetNLabels(),GetReader());
3073 //GetMCAnalysisUtils()->CheckMultipleOrigin(calo->GetLabels(),calo->GetNLabels(), GetReader(), aodpi0.GetInputFileIndex(), tag);
3074 if(GetDebug() > 0) printf("AliAnaPi0EbE::MakeShowerShapeIdentification() - Origin of candidate %d\n",tag);
3075 }
3076
3077 //Int_t nMaxima = GetCaloUtils()->GetNumberOfLocalMaxima(calo, cells); // NLM
3078
477d6cee 3079 //Check Distance to Bad channel, set bit.
c8fe2783 3080 Double_t distBad=calo->GetDistanceToBadChannel() ; //Distance to bad channel
477d6cee 3081 if(distBad < 0.) distBad=9999. ; //workout strange convension dist = -1. ;
3a4c49b7 3082 if(distBad < fMinDist){ //In bad channel (PHOS cristal size 2.2x2.2 cm)
3083 //FillRejectedClusterHistograms(mom,tag,nMaxima);
477d6cee 3084 continue ;
3a4c49b7 3085 }
08c09f10 3086
a6e83e39 3087 if(GetDebug() > 1) printf("AliAnaPi0EbE::MakeShowerShapeIdentification() - FillAOD: Bad channel cut passed %4.2f\n",distBad);
85c4406e 3088
74e3eb22 3089 //If too low number of cells, skip it
3a4c49b7 3090 if ( calo->GetNCells() < GetCaloPID()->GetClusterSplittingMinNCells())
3091 {
3092 //FillRejectedClusterHistograms(mom,tag,nMaxima);
3093 continue ;
3094 }
74e3eb22 3095
3096 if(GetDebug() > 1)
3097 printf("AliAnaPi0EbE::MakeShowerShapeIdentification() - FillAOD: N cells cut passed %d > %d\n",
3098 calo->GetNCells(), GetCaloPID()->GetClusterSplittingMinNCells());
3099
34c16486 3100 //.......................................
3101 // TOF cut, BE CAREFUL WITH THIS CUT
3102 Double_t tof = calo->GetTOF()*1e9;
3a4c49b7 3103 if(tof < fTimeCutMin || tof > fTimeCutMax)
40d3ce60 3104 {
3a4c49b7 3105 //FillRejectedClusterHistograms(mom,tag,nMaxima);
3106 continue ;
85c4406e 3107 }
b583134f 3108
477d6cee 3109 //Check PID
3110 //PID selection or bit setting
3a4c49b7 3111 Int_t nMaxima = 0;
3112 Double_t mass = 0, angle = 0;
3113 Int_t absId1 =-1, absId2 =-1;
3114 Float_t distbad1 =-1, distbad2 =-1;
3115 Bool_t fidcut1 = 0, fidcut2 = 0;
cfdf2b91 3116 TLorentzVector l1, l2;
3a4c49b7 3117
a6e83e39 3118 Int_t idPartType = GetCaloPID()->GetIdentifiedParticleTypeFromClusterSplitting(calo,cells,GetCaloUtils(),
3119 GetVertex(evtIndex),nMaxima,
4914e781 3120 mass,angle,l1,l2,absId1,absId2,
3121 distbad1,distbad2,fidcut1,fidcut2) ;
34c16486 3122
b583134f 3123
a6e83e39 3124 if(GetDebug() > 1) printf("AliAnaPi0EbE::MakeShowerShapeIdentification() - PDG of identified particle %d\n",idPartType);
85c4406e 3125
3126
4914e781 3127 // Skip events where one of the new clusters (lowest energy) is close to an EMCal border or a bad channel
1253480f 3128 if( (fCheckSplitDistToBad) &&
b583134f 3129 (!fidcut2 || !fidcut1 || distbad1 < fMinDist || distbad2 < fMinDist))
4914e781 3130 {
74e3eb22 3131 if(GetDebug() > 1)
a6d3b0a8 3132 Info("MakeShowerShapeIdentification", "Dist to bad channel cl %f, cl1 %f, cl2 %f; fid cl1 %d, cl2 %d \n",
74e3eb22 3133 calo->GetDistanceToBadChannel(),distbad1,distbad2, fidcut1,fidcut2);
b583134f 3134
3a4c49b7 3135 //FillRejectedClusterHistograms(mom,tag,nMaxima);
4914e781 3136 continue ;
3137 }
3138
a6e83e39 3139 //Skip events with too few or too many NLM
85c4406e 3140 if(nMaxima < fNLMCutMin || nMaxima > fNLMCutMax)
40d3ce60 3141 {
3a4c49b7 3142 //FillRejectedClusterHistograms(mom,tag,nMaxima);
40d3ce60 3143 continue ;
3144 }
3145
bb2d339b 3146 if(GetDebug() > 1)
3147 printf("AliAnaPi0EbE::MakeShowerShapeIdentification() - NLM %d accepted \n",nMaxima);
a6e83e39 3148
b583134f 3149 //Skip matched clusters with tracks
3150 if(fRejectTrackMatch && IsTrackMatched(calo, GetReader()->GetInputEvent()))
3151 {
3a4c49b7 3152 FillRejectedClusterHistograms(mom,tag,nMaxima);
b583134f 3153 continue ;
3154 }
3155
29250849 3156 Float_t e1 = l1.Energy();
3157 Float_t e2 = l2.Energy();
3158 TLorentzVector l12 = l1+l2;
3159 Float_t ptSplit = l12.Pt();
3160 Float_t eSplit = e1+e2;
1253480f 3161
3162 Int_t mcIndex =-1;
3163 Int_t noverlaps = 0;
3164 Float_t ptprim = 0;
3165 if(IsDataMC())
3166 {
3167 mcIndex = GetMCIndex(tag);
3168
3169 Bool_t ok = kFALSE;
3170 Int_t mcLabel = calo->GetLabel();
3171
3172 TLorentzVector primary = GetMCAnalysisUtils()->GetMother(mcLabel,GetReader(),ok);
3173
3174 Int_t mesonLabel = -1;
3175
3176 if(mcIndex == kmcPi0 || mcIndex == kmcEta)
3177 {
3178 if(mcIndex == kmcPi0)
3179 {
3180 TLorentzVector grandmom = GetMCAnalysisUtils()->GetMotherWithPDG(mcLabel,111,GetReader(),ok,mesonLabel);
3181 if(grandmom.E() > 0 && ok) ptprim = grandmom.Pt();
3182 }
3183 else
3184 {
3185 TLorentzVector grandmom = GetMCAnalysisUtils()->GetMotherWithPDG(mcLabel,221,GetReader(),ok,mesonLabel);
3186 if(grandmom.E() > 0 && ok) ptprim = grandmom.Pt();
3187 }
3188 }
3189
3190 const UInt_t nlabels = calo->GetNLabels();
3191 Int_t overpdg[nlabels];
3192 noverlaps = GetMCAnalysisUtils()->GetNOverlaps(calo->GetLabels(), nlabels,tag,mesonLabel,GetReader(),overpdg);
3193 }
85c4406e 3194
f02db2c0 3195 //mass of all clusters
1253480f 3196 fhMass ->Fill(mom.E() ,mass);
29250849 3197 fhMassPt ->Fill(mom.Pt(),mass);
1253480f 3198 fhMassSplitPt->Fill(ptSplit ,mass);
85c4406e 3199
08c09f10 3200 Int_t indexMax = -1;
3201 if (nMaxima==1) indexMax = 0 ;
3202 else if(nMaxima==2) indexMax = 1 ;
3203 else indexMax = 2 ;
3204 fhMassPtLocMax[indexMax]->Fill(mom.Pt(),mass);
3205
29250849 3206 if(IsDataMC())
3207 {
3208 fhMCMassPt[mcIndex] ->Fill(mom.Pt(),mass);
1253480f 3209 fhMCMassSplitPt[mcIndex]->Fill(ptSplit ,mass);
3210 if(mcIndex==kmcPi0)
3211 {
afba5771 3212 fhMCPi0PtRecoPtPrim ->Fill(mom.Pt(),ptprim);
3213 fhMCPi0SplitPtRecoPtPrim ->Fill(ptSplit ,ptprim);
3214 fhMCPi0PtRecoPtPrimLocMax [indexMax]->Fill(mom.Pt(),ptprim);
3215 fhMCPi0SplitPtRecoPtPrimLocMax[indexMax]->Fill(ptSplit ,ptprim);
3216
1253480f 3217 }
3218 else if(mcIndex==kmcEta)
3219 {
afba5771 3220 fhMCEtaPtRecoPtPrim ->Fill(mom.Pt(),ptprim);
3221 fhMCEtaSplitPtRecoPtPrim ->Fill(ptSplit ,ptprim);
3222 fhMCEtaPtRecoPtPrimLocMax [indexMax]->Fill(mom.Pt(),ptprim);
3223 fhMCEtaSplitPtRecoPtPrimLocMax[indexMax]->Fill(ptSplit ,ptprim);
1253480f 3224 }
3225
3226 if(noverlaps==0)
3227 {
3228 if(mcIndex==kmcPi0)
3229 {
3230 fhMCPi0PtRecoPtPrimNoOverlap ->Fill(mom.Pt(),ptprim);
3231 fhMCPi0SplitPtRecoPtPrimNoOverlap->Fill(ptSplit ,ptprim);
3232 }
3233 else if(mcIndex==kmcEta)
3234 {
3235 fhMCEtaPtRecoPtPrimNoOverlap ->Fill(mom.Pt(),ptprim);
3236 fhMCEtaSplitPtRecoPtPrimNoOverlap->Fill(ptSplit ,ptprim);
3237 }
3238
3239 fhMassNoOverlap ->Fill(mom.E() ,mass);
3240 fhMassPtNoOverlap ->Fill(mom.Pt(),mass);
3241 fhMassSplitPtNoOverlap->Fill(ptSplit ,mass);
3242
3243 fhMCMassPtNoOverlap[mcIndex] ->Fill(mom.Pt(),mass);
3244 fhMCMassSplitPtNoOverlap[mcIndex]->Fill(ptSplit ,mass);
3245 }
29250849 3246 }
85c4406e 3247
4650f5cf 3248 // Asymmetry of all clusters
cfdf2b91 3249 Float_t asy =-10;
85c4406e 3250
4650f5cf 3251 if(e1+e2 > 0) asy = (e1-e2) / (e1+e2);
3252 fhAsymmetry->Fill(mom.E(),asy);
85c4406e 3253
4650f5cf 3254 if(IsDataMC())
3255 {
08c09f10 3256 fhMCPtAsymmetry[mcIndex]->Fill(mom.Pt(),asy);
cfdf2b91 3257 }
f02db2c0 3258
a6e83e39 3259 // If cluster does not pass pid, not pi0/eta, skip it.
85c4406e 3260 if (GetOutputAODName().Contains("Pi0") && idPartType != AliCaloPID::kPi0)
3261 {
a6d3b0a8 3262 if(GetDebug() > 1) Info("MakeShowerShapeIdentification","Cluster is not Pi0\n");
3a4c49b7 3263 FillRejectedClusterHistograms(mom,tag,nMaxima);
bb2d339b 3264 continue ;
85c4406e 3265 }
bb2d339b 3266
85c4406e 3267 else if(GetOutputAODName().Contains("Eta") && idPartType != AliCaloPID::kEta)
3268 {
a6d3b0a8 3269 if(GetDebug() > 1) Info("MakeShowerShapeIdentification","Cluster is not Eta\n");
3a4c49b7 3270 FillRejectedClusterHistograms(mom,tag,nMaxima);
bb2d339b 3271 continue ;
85c4406e 3272 }
a6e83e39 3273
85c4406e 3274 if(GetDebug() > 1)
a6d3b0a8 3275 Info("MakeShowerShapeIdentification","Pi0/Eta selection cuts passed: pT %3.2f, pdg %d\n",
85c4406e 3276 mom.Pt(), idPartType);
34c16486 3277
667432ef 3278 //Mass and asymmetry of selected pairs
29250849 3279 fhSelectedAsymmetry ->Fill(mom.E() ,asy );
3280 fhSelectedMass ->Fill(mom.E() ,mass);
3281 fhSelectedMassPt ->Fill(mom.Pt(),mass);
3282 fhSelectedMassSplitPt->Fill(ptSplit ,mass);
08c09f10 3283 fhSelectedMassPtLocMax[indexMax]->Fill(mom.Pt(),mass);
9605388f 3284
3285 Int_t nSM = GetModuleNumber(calo);
9f48b3f0 3286 if(nSM < GetCaloUtils()->GetNumberOfSuperModulesUsed() && nSM >=0)
9605388f 3287 {
3288 fhSelectedMassPtLocMaxSM [indexMax][nSM]->Fill(mom.Pt(),mass);
3289 fhSelectedLambda0PtLocMaxSM[indexMax][nSM]->Fill(mom.Pt(),calo->GetM02());
3290 }
3291
1253480f 3292 if(IsDataMC())
3293 {
3294 if(mcIndex==kmcPi0)
3295 {
afba5771 3296 fhMCPi0SelectedPtRecoPtPrim ->Fill(mom.Pt(),ptprim);
3297 fhMCPi0SelectedSplitPtRecoPtPrim ->Fill(ptSplit ,ptprim);
3298 fhMCPi0SelectedPtRecoPtPrimLocMax [indexMax]->Fill(mom.Pt(),ptprim);
3299 fhMCPi0SelectedSplitPtRecoPtPrimLocMax[indexMax]->Fill(ptSplit ,ptprim);
1253480f 3300 }
3301 else if(mcIndex==kmcEta)
3302 {
afba5771 3303 fhMCEtaSelectedPtRecoPtPrim ->Fill(mom.Pt(),ptprim);
3304 fhMCEtaSelectedSplitPtRecoPtPrim ->Fill(ptSplit ,ptprim);
3305 fhMCEtaSelectedPtRecoPtPrimLocMax [indexMax]->Fill(mom.Pt(),ptprim);
3306 fhMCEtaSelectedSplitPtRecoPtPrimLocMax[indexMax]->Fill(ptSplit ,ptprim);
1253480f 3307 }
3308
3309 if(noverlaps==0)
3310 {
3311 fhSelectedMassNoOverlap ->Fill(mom.E() ,mass);
3312 fhSelectedMassPtNoOverlap ->Fill(mom.Pt(),mass);
3313 fhSelectedMassSplitPtNoOverlap->Fill(ptSplit ,mass);
3314
3315 if(mcIndex==kmcPi0)
3316 {
3317 fhMCPi0SelectedPtRecoPtPrimNoOverlap ->Fill(mom.Pt(),ptprim);
3318 fhMCPi0SelectedSplitPtRecoPtPrimNoOverlap->Fill(ptSplit ,ptprim);
3319 }
3320 else if(mcIndex==kmcEta)
3321 {
3322 fhMCEtaSelectedPtRecoPtPrimNoOverlap ->Fill(mom.Pt(),ptprim);
3323 fhMCEtaSelectedSplitPtRecoPtPrimNoOverlap->Fill(ptSplit ,ptprim);
3324 }
3325 }
3326 }
3327
6e66993c 3328 fhSplitE ->Fill( eSplit);
3329 fhSplitPt ->Fill(ptSplit);
29250849 3330 Float_t phi = mom.Phi();
3331 if(phi<0) phi+=TMath::TwoPi();
3332 fhSplitPtPhi ->Fill(ptSplit,phi);
3333 fhSplitPtEta ->Fill(ptSplit,mom.Eta());
6e66993c 3334 fhNLocMaxSplitPt->Fill(ptSplit ,nMaxima);
85c4406e 3335
a1fd1b69 3336 //Check split-clusters with good time window difference
3337 Double_t tof1 = cells->GetCellTime(absId1);
3338 GetCaloUtils()->RecalibrateCellTime(tof1, fCalorimeter, absId1,GetReader()->GetInputEvent()->GetBunchCrossNumber());
3339 tof1*=1.e9;
3340
3341 Double_t tof2 = cells->GetCellTime(absId2);
3342 GetCaloUtils()->RecalibrateCellTime(tof2, fCalorimeter, absId2,GetReader()->GetInputEvent()->GetBunchCrossNumber());
3343 tof2*=1.e9;
3344
3345 Double_t t12diff = tof1-tof2;
3346 fhEPairDiffTime->Fill(e1+e2, t12diff);
3347
cfdf2b91 3348 if(IsDataMC())
3349 {
6e66993c 3350 fhMCSplitE [mcIndex]->Fill( eSplit);
3351 fhMCSplitPt [mcIndex]->Fill(ptSplit);
29250849 3352 fhMCSplitPtPhi [mcIndex]->Fill(ptSplit,phi);
3353 fhMCSplitPtEta [mcIndex]->Fill(ptSplit,mom.Eta());
6e66993c 3354 fhMCNLocMaxSplitPt[mcIndex]->Fill(ptSplit ,nMaxima);
3355 fhMCNLocMaxPt [mcIndex]->Fill(mom.Pt(),nMaxima);
29250849 3356
3357 fhMCSelectedMassPt [mcIndex]->Fill(mom.Pt(),mass);
3358 fhMCSelectedMassSplitPt[mcIndex]->Fill(ptSplit,mass);
08c09f10 3359 fhMCSelectedMassPtLocMax[mcIndex][indexMax]->Fill(mom.Pt(),mass);
3360
1253480f 3361 if(noverlaps==0)
3362 {
3363 fhMCSelectedMassPtNoOverlap [mcIndex]->Fill(mom.Pt(),mass);
3364 fhMCSelectedMassSplitPtNoOverlap[mcIndex]->Fill(ptSplit,mass);
3365 }
cfdf2b91 3366 }
cfdf2b91 3367
a6e83e39 3368 //-----------------------
3369 //Create AOD for analysis
477d6cee 3370
3a4c49b7 3371 if(nMaxima == 1 && fNLMECutMin[0] > mom.E()) continue;
3372 if(nMaxima == 2 && fNLMECutMin[1] > mom.E()) continue;
3373 if(nMaxima > 2 && fNLMECutMin[2] > mom.E()) continue;
3374
a6e83e39 3375 AliAODPWG4Particle aodpi0 = AliAODPWG4Particle(mom);
3376 aodpi0.SetLabel(calo->GetLabel());
3377
85c4406e 3378 //Set the indeces of the original caloclusters
a6e83e39 3379 aodpi0.SetCaloLabel(calo->GetID(),-1);
3380 aodpi0.SetDetector(fCalorimeter);
85c4406e 3381
a6e83e39 3382 if (distBad > fMinDist3) aodpi0.SetDistToBad(2) ;
85c4406e 3383 else if(distBad > fMinDist2) aodpi0.SetDistToBad(1) ;
a6e83e39 3384 else aodpi0.SetDistToBad(0) ;
3385
3386 // Check if cluster is pi0 via cluster splitting
85c4406e 3387 aodpi0.SetIdentifiedParticleType(idPartType);
3388
8736d400 3389 // Add number of local maxima to AOD, method name in AOD to be FIXED
3390 aodpi0.SetFiducialArea(nMaxima);
3391
4650f5cf 3392 aodpi0.SetTag(tag);
477d6cee 3393
34c16486 3394 //Fill some histograms about shower shape
3395 if(fFillSelectClHisto && GetReader()->GetDataType()!=AliCaloTrackReader::kMC)
3396 {
08c09f10 3397 FillSelectedClusterHistograms(calo, aodpi0.Pt(), nMaxima, tag, asy);
85c4406e 3398 }
2ad19c3d 3399
3400 // Fill histograms to undertand pile-up before other cuts applied
3401 // Remember to relax time cuts in the reader
c2a62a94 3402 Double_t tofcluster = calo->GetTOF()*1e9;
3403 Double_t tofclusterUS = TMath::Abs(tofcluster);
85c4406e 3404
126b8c62 3405 FillPileUpHistograms(aodpi0.Pt(),tofcluster,calo);
85c4406e 3406
afb3af8a 3407 Int_t id = GetReader()->GetTriggerClusterId();
3408 if(fFillEMCALBCHistograms && fCalorimeter=="EMCAL" && id >=0 )
c2a62a94 3409 {
3410 Float_t phicluster = aodpi0.Phi();
3411 if(phicluster < 0) phicluster+=TMath::TwoPi();
3412
3413 if(calo->E() > 2)
3414 {
3415 if (tofclusterUS < 25) fhEtaPhiEMCALBC0->Fill(aodpi0.Eta(), phicluster);
3416 else if (tofclusterUS < 75) fhEtaPhiEMCALBC1->Fill(aodpi0.Eta(), phicluster);
3417 else fhEtaPhiEMCALBCN->Fill(aodpi0.Eta(), phicluster);
3418 }
3419
afb3af8a 3420 Int_t bc = GetReader()->GetTriggerClusterBC();
3421 if(TMath::Abs(bc) < 6 && !GetReader()->IsBadCellTriggerEvent() && !GetReader()->IsExoticEvent() )
c2a62a94 3422 {
afb3af8a 3423 if(GetReader()->IsTriggerMatched())
3424 {
3425 if(calo->E() > 2) fhEtaPhiTriggerEMCALBC[bc+5]->Fill(aodpi0.Eta(), phicluster);
3426 fhTimeTriggerEMCALBC[bc+5]->Fill(calo->E(), tofcluster);
3427 if(GetReader()->IsPileUpFromSPD()) fhTimeTriggerEMCALBCPileUpSPD[bc+5]->Fill(calo->E(), tofcluster);
3428 }
3429 else
3430 {
3431 if(calo->E() > 2) fhEtaPhiTriggerEMCALBCUM[bc+5]->Fill(aodpi0.Eta(), phicluster);
3432 fhTimeTriggerEMCALBCUM[bc+5]->Fill(calo->E(), tofcluster);
126b8c62 3433
3434 if(bc==0)
3435 {
3436 if(GetReader()->IsTriggerMatchedOpenCuts(0)) fhTimeTriggerEMCALBC0UMReMatchOpenTime ->Fill(calo->E(), tofcluster);
3437 if(GetReader()->IsTriggerMatchedOpenCuts(1)) fhTimeTriggerEMCALBC0UMReMatchCheckNeigh ->Fill(calo->E(), tofcluster);
3438 if(GetReader()->IsTriggerMatchedOpenCuts(2)) fhTimeTriggerEMCALBC0UMReMatchBoth ->Fill(calo->E(), tofcluster);
3439 }
3440 }
c2a62a94 3441 }
afb3af8a 3442 else if(TMath::Abs(bc) >= 6)
a6d3b0a8 3443 Info("MakeShowerShapeIdentification","Trigger BC not expected = %d\n",bc);
c2a62a94 3444 }
2ad19c3d 3445
477d6cee 3446 //Add AOD with pi0 object to aod branch
3447 AddAODParticle(aodpi0);
3448
3449 }//loop
3450
a6d3b0a8 3451 if(GetDebug() > 1) Info("MakeShowerShapeIdentification","End fill AODs \n");
477d6cee 3452
3453}
de2e61cd 3454
e7fd282f 3455//______________________________________________
85c4406e 3456void AliAnaPi0EbE::MakeAnalysisFillHistograms()
691bdd02 3457{
477d6cee 3458 //Do analysis and fill histograms
691bdd02 3459
b5dbb99b 3460 if(!GetOutputAODBranch())
3461 {
a6d3b0a8 3462 AliFatal(Form("No output pi0 in AOD branch with name < %s >,STOP \n",GetOutputAODName().Data()));
477d6cee 3463 }
aa845126 3464
477d6cee 3465 //Loop on stored AOD pi0
3466 Int_t naod = GetOutputAODBranch()->GetEntriesFast();
a6d3b0a8 3467 if(GetDebug() > 0) Info("MakeAnalysisFillHistograms","aod branch entries %d\n", naod);
477d6cee 3468
c8710850 3469 Float_t cen = GetEventCentrality();
3470 Float_t ep = GetEventPlaneAngle();
3471
b5dbb99b 3472 for(Int_t iaod = 0; iaod < naod ; iaod++)
3473 {
477d6cee 3474 AliAODPWG4Particle* pi0 = (AliAODPWG4Particle*) (GetOutputAODBranch()->At(iaod));
21a4b1c0 3475 Int_t pdg = pi0->GetIdentifiedParticleType();
9415d854 3476
aa845126 3477 if( ( pdg != AliCaloPID::kPi0 && pdg != AliCaloPID::kEta ) ) continue;
477d6cee 3478
85c4406e 3479 //Fill pi0 histograms
c4a7d28a 3480 Float_t ener = pi0->E();
3481 Float_t pt = pi0->Pt();
3482 Float_t phi = pi0->Phi();
57b97dc6 3483 if(phi < 0) phi+=TMath::TwoPi();
477d6cee 3484 Float_t eta = pi0->Eta();
3485
c8710850 3486 fhPt ->Fill(pt );
09273901 3487 fhE ->Fill(ener);
477d6cee 3488
29250849 3489 fhPtEta ->Fill(pt ,eta);
3490 fhPtPhi ->Fill(pt ,phi);
c8710850 3491 fhEtaPhi ->Fill(eta ,phi);
85c4406e 3492
c8710850 3493 fhPtCentrality ->Fill(pt,cen) ;
3494 fhPtEventPlane ->Fill(pt,ep ) ;
3495
b5dbb99b 3496 if(IsDataMC())
3497 {
3455f821 3498 Int_t tag = pi0->GetTag();
4bbe6213 3499 Int_t label = pi0->GetLabel();
3455f821 3500 Int_t mcIndex = GetMCIndex(tag);
85c4406e 3501
08c09f10 3502 fhMCE [mcIndex] ->Fill(ener);
3503 fhMCPt [mcIndex] ->Fill(pt);
3504 fhMCPtPhi[mcIndex] ->Fill(pt,phi);
3505 fhMCPtEta[mcIndex] ->Fill(pt,eta);
3455f821 3506
17f5b4b6 3507 fhMCPtCentrality[mcIndex]->Fill(pt,cen);
85c4406e 3508
883411b2 3509 if((mcIndex==kmcPhoton || mcIndex==kmcPi0 || mcIndex==kmcEta) && fAnaType==kSSCalo)
af722ce4 3510 {
36769d30 3511 Float_t efracMC = 0;
36769d30 3512 Int_t momlabel = -1;
3513 Bool_t ok = kFALSE;
51a0ace5 3514
85c4406e 3515 TLorentzVector mom = GetMCAnalysisUtils()->GetMother(label,GetReader(),ok);
51a0ace5 3516 if(!ok) continue;
3517
3518 if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0))
3519 {
36769d30 3520 TLorentzVector grandmom = GetMCAnalysisUtils()->GetMotherWithPDG(label,111,GetReader(),ok,momlabel);
85c4406e 3521 if(grandmom.E() > 0 && ok)
51a0ace5 3522 {
883411b2 3523 efracMC = grandmom.E()/ener;
3524 fhMCPi0PtGenRecoFraction ->Fill(pt,efracMC);
51a0ace5 3525 }
85c4406e 3526 }
51a0ace5 3527 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0Decay))
3455f821 3528 {
3529 fhMCPi0DecayPt->Fill(pt);
36769d30 3530 TLorentzVector grandmom = GetMCAnalysisUtils()->GetMotherWithPDG(label,111,GetReader(),ok,momlabel);
85c4406e 3531 if(grandmom.E() > 0 && ok)
51a0ace5 3532 {
3533 efracMC = mom.E()/grandmom.E();
3534 fhMCPi0DecayPtFraction ->Fill(pt,efracMC);
3535 }
3455f821 3536 }
51a0ace5 3537 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEta))
3538 {
36769d30 3539 TLorentzVector grandmom = GetMCAnalysisUtils()->GetMotherWithPDG(label,221,GetReader(),ok,momlabel);
85c4406e 3540 if(grandmom.E() > 0 && ok)
51a0ace5 3541 {
883411b2 3542 efracMC = grandmom.E()/ener;
3543 fhMCEtaPtGenRecoFraction ->Fill(pt,efracMC);
51a0ace5 3544 }
85c4406e 3545 }
3455f821 3546 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEtaDecay))
3547 {
3548 fhMCEtaDecayPt->Fill(pt);
36769d30 3549 TLorentzVector grandmom = GetMCAnalysisUtils()->GetMotherWithPDG(label,221,GetReader(),ok,momlabel);
85c4406e 3550 if(grandmom.E() > 0 && ok)
51a0ace5 3551 {
3552 efracMC = mom.E()/grandmom.E();
3553 fhMCEtaDecayPtFraction ->Fill(pt,efracMC);
3554 }
3455f821 3555 }
3556 else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCOtherDecay))
3557 {
3558 fhMCOtherDecayPt->Fill(pt);
3559 }
af722ce4 3560
477d6cee 3561 }
3455f821 3562
4bbe6213 3563 if( mcIndex==kmcPi0 || mcIndex==kmcEta )
3564 {
3565 Float_t prodR = -1;
3566 Int_t momindex = -1;
3567 Int_t mompdg = -1;
3568 Int_t momstatus = -1;
3569
3570 if(GetReader()->ReadStack())
3571 {
3572 TParticle* ancestor = GetMCStack()->Particle(label);
3573 momindex = ancestor->GetFirstMother();
3574 if(momindex < 0) return;
3575 TParticle* mother = GetMCStack()->Particle(momindex);
3576 mompdg = TMath::Abs(mother->GetPdgCode());
3577 momstatus = mother->GetStatusCode();
3578 prodR = mother->R();
3579 }
3580 else
3581 {
3582 TClonesArray * mcparticles = GetReader()->GetAODMCParticles();
3583 AliAODMCParticle* ancestor = (AliAODMCParticle *) mcparticles->At(label);
3584 momindex = ancestor->GetMother();
3585 if(momindex < 0) return;
3586 AliAODMCParticle* mother = (AliAODMCParticle *) mcparticles->At(momindex);
3587 mompdg = TMath::Abs(mother->GetPdgCode());
3588 momstatus = mother->GetStatus();
3589 prodR = TMath::Sqrt(mother->Xv()*mother->Xv()+mother->Yv()*mother->Yv());
3590 }
3591
3592 if( mcIndex==kmcPi0 )
3593 {
3594 fhMCPi0ProdVertex->Fill(pt,prodR);
4bbe6213 3595
3596 if (momstatus == 21) fhMCPi0PtOrigin->Fill(pt,0.5);//parton
3597 else if(mompdg < 22 ) fhMCPi0PtOrigin->Fill(pt,1.5);//quark
3598 else if(mompdg > 2100 && mompdg < 2210) fhMCPi0PtOrigin->Fill(pt,2.5);// resonances
3599 else if(mompdg == 221) fhMCPi0PtOrigin->Fill(pt,8.5);//eta
3600 else if(mompdg == 331) fhMCPi0PtOrigin->Fill(pt,9.5);//eta prime
3601 else if(mompdg == 213) fhMCPi0PtOrigin->Fill(pt,4.5);//rho
3602 else if(mompdg == 223) fhMCPi0PtOrigin->Fill(pt,5.5);//omega
3603 else if(mompdg >= 310 && mompdg <= 323) fhMCPi0PtOrigin->Fill(pt,6.5);//k0S, k+-,k*
3604 else if(mompdg == 130) fhMCPi0PtOrigin->Fill(pt,6.5);//k0L
3605 else if(momstatus == 11 || momstatus == 12 ) fhMCPi0PtOrigin->Fill(pt,3.5);//resonances
3606 else fhMCPi0PtOrigin->Fill(pt,7.5);//other?
3607 }
3608 else if (mcIndex==kmcEta )
3609 {
3610 fhMCEtaProdVertex->Fill(pt,prodR);
4bbe6213 3611
3612 if (momstatus == 21) fhMCEtaPtOrigin->Fill(pt,0.5);//parton
3613 else if(mompdg < 22 ) fhMCEtaPtOrigin->Fill(pt,1.5);//quark
3614 else if(mompdg > 2100 && mompdg < 2210) fhMCEtaPtOrigin->Fill(pt,2.5);// resonances
3615 else if(mompdg == 221) fhMCEtaPtOrigin->Fill(pt,8.5);//eta
3616 else if(mompdg == 331) fhMCEtaPtOrigin->Fill(pt,9.5);//eta prime
3617 else if(mompdg == 213) fhMCEtaPtOrigin->Fill(pt,4.5);//rho
3618 else if(mompdg == 223) fhMCEtaPtOrigin->Fill(pt,5.5);//omega
3619 else if(mompdg >= 310 && mompdg <= 323) fhMCEtaPtOrigin->Fill(pt,6.5);//k0S, k+-,k*
3620 else if(mompdg == 130) fhMCEtaPtOrigin->Fill(pt,6.5);//k0L
3621 else if(momstatus == 11 || momstatus == 12 ) fhMCEtaPtOrigin->Fill(pt,3.5);//resonances
3622 else fhMCEtaPtOrigin->Fill(pt,7.5);//other?
3623 }
3624 }
3625
477d6cee 3626 }//Histograms with MC
3627
3628 }// aod loop
3629
3630}
3631
477d6cee 3632//__________________________________________________________________
3633void AliAnaPi0EbE::Print(const Option_t * opt) const
3634{
3635 //Print some relevant parameters set for the analysis
3636 if(! opt)
3637 return;
3638
3639 printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
745913ae 3640 AliAnaCaloTrackCorrBaseClass::Print("");
477d6cee 3641 printf("Analysis Type = %d \n", fAnaType) ;
85c4406e 3642 if(fAnaType == kSSCalo)
3643 {
477d6cee 3644 printf("Calorimeter = %s\n", fCalorimeter.Data()) ;
3645 printf("Min Distance to Bad Channel = %2.1f\n",fMinDist);
3646 printf("Min Distance to Bad Channel 2 = %2.1f\n",fMinDist2);
85c4406e 3647 printf("Min Distance to Bad Channel 3 = %2.1f\n",fMinDist3);
477d6cee 3648 }
3649 printf(" \n") ;
3650
3651}
78a28af3 3652
78a28af3 3653