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