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