1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: Baldo Sahlmueller, Friederike Bock *
8 * Permission to use, copy, modify and distribute this software and its *
9 * documentation strictly for non-commercial purposes is hereby granted *
10 * without fee, provided that the above copyright notice appears in all *
11 * copies and that both the copyright notice and this permission notice *
12 * appear in the supporting documentation. The authors make no claims *
13 * about the suitability of this software for any purpose. It is *
14 * provided "as is" without express or implied warranty. *
15 **************************************************************************/
17 //////////////////////////////////////////////////////////////////
18 //----------------------------------------------------------------
19 // Class used to do analysis on conversion photons + calo photons
20 //----------------------------------------------------------------
21 //////////////////////////////////////////////////////////////////
29 #include "THnSparse.h"
32 #include "AliAnalysisTask.h"
33 #include "AliAnalysisManager.h"
34 #include "AliESDEvent.h"
35 #include "AliESDInputHandler.h"
36 #include "AliMCEventHandler.h"
37 #include "AliMCEvent.h"
38 #include "AliMCParticle.h"
39 #include "AliCentrality.h"
40 #include "AliESDVZERO.h"
41 #include "AliESDpid.h"
42 #include "AliAnalysisTaskGammaConvCalo.h"
43 #include "AliVParticle.h"
44 #include "AliESDtrack.h"
45 #include "AliESDtrackCuts.h"
46 #include "AliKFVertex.h"
47 #include "AliV0ReaderV1.h"
48 #include "AliGenCocktailEventHeader.h"
49 #include "AliConversionAODBGHandlerRP.h"
50 #include "AliAODMCParticle.h"
51 #include "AliAODMCHeader.h"
52 #include "AliEventplane.h"
53 #include "AliAnalysisTaskEMCALClusterizeFast.h"
54 #include "AliAODEvent.h"
55 #include "AliAODInputHandler.h"
56 #include "AliESDEvent.h"
57 #include "AliESDInputHandler.h"
58 #include "AliInputEventHandler.h"
60 ClassImp(AliAnalysisTaskGammaConvCalo)
62 //________________________________________________________________________
63 AliAnalysisTaskGammaConvCalo::AliAnalysisTaskGammaConvCalo(): AliAnalysisTaskSE(),
68 fBGClusHandlerRP(NULL),
79 fHeaderNameList(NULL),
80 fClusterOutputList(NULL),
81 fOutputContainer(NULL),
83 fGammaCandidates(NULL),
84 fClusterCandidates(NULL),
88 fConversionCuts(NULL),
89 fClusterCutArray(NULL),
90 fCaloPhotonCuts(NULL),
93 fHistoConvGammaPt(NULL),
94 fHistoConvGammaR(NULL),
95 fHistoConvGammaEta(NULL),
96 fTreeConvGammaPtDcazCat(NULL),
102 fCharPhotonMCInfo(0),
103 fHistoMotherInvMassPt(NULL),
104 fHistoMotherMatchedInvMassPt(NULL),
105 fSparseMotherInvMassPtZM(NULL),
106 fHistoMotherBackInvMassPt(NULL),
107 fSparseMotherBackInvMassPtZM(NULL),
108 fHistoMotherInvMassEalpha(NULL),
109 fHistoMotherPi0PtY(NULL),
110 fHistoMotherEtaPtY(NULL),
111 fHistoMotherPi0PtAlpha(NULL),
112 fHistoMotherEtaPtAlpha(NULL),
113 fHistoMotherPi0PtOpenAngle(NULL),
114 fHistoMotherEtaPtOpenAngle(NULL),
115 fHistoMotherPi0ConvPhotonEtaPhi(NULL),
116 fHistoMotherEtaConvPhotonEtaPhi(NULL),
117 fHistoMotherInvMassECalib(NULL),
118 fHistoMotherInvMassECalibalpha(NULL),
119 fHistoPhotonPairPtconv(NULL),
120 fHistoPhotonPairMixedEventPtconv(NULL),
121 fHistoClusGammaPt(NULL),
122 fHistoClusOverlapHeadersGammaPt(NULL),
123 fHistoMCHeaders(NULL),
124 fHistoMCAllGammaPt(NULL),
125 fHistoMCAllGammaEMCALAccPt(NULL),
126 fHistoMCDecayGammaPi0Pt(NULL),
127 fHistoMCDecayGammaRhoPt(NULL),
128 fHistoMCDecayGammaEtaPt(NULL),
129 fHistoMCDecayGammaOmegaPt(NULL),
130 fHistoMCDecayGammaEtapPt(NULL),
131 fHistoMCDecayGammaPhiPt(NULL),
132 fHistoMCDecayGammaSigmaPt(NULL),
133 fHistoMCConvGammaPt(NULL),
134 fHistoMCConvGammaR(NULL),
135 fHistoMCConvGammaEta(NULL),
137 fHistoMCPi0WOWeightPt(NULL),
139 fHistoMCEtaWOWeightPt(NULL),
140 fHistoMCPi0InAccPt(NULL),
141 fHistoMCEtaInAccPt(NULL),
142 fHistoMCPi0PtY(NULL),
143 fHistoMCEtaPtY(NULL),
144 fHistoMCPi0PtAlpha(NULL),
145 fHistoMCEtaPtAlpha(NULL),
147 fHistoMCK0sWOWeightPt(NULL),
148 fHistoMCK0sPtY(NULL),
149 fHistoMCSecPi0PtvsSource(NULL),
150 fHistoMCSecPi0Source(NULL),
151 fHistoMCSecEtaPt(NULL),
152 fHistoMCSecEtaSource(NULL),
153 fHistoTruePi0InvMassPt(NULL),
154 fHistoTrueEtaInvMassPt(NULL),
155 fHistoTruePi0CaloPhotonInvMassPt(NULL),
156 fHistoTrueEtaCaloPhotonInvMassPt(NULL),
157 fHistoTruePi0CaloConvertedPhotonInvMassPt(NULL),
158 fHistoTruePi0CaloConvertedPhotonMatchedInvMassPt(NULL),
159 fHistoTrueEtaCaloConvertedPhotonInvMassPt(NULL),
160 fHistoTrueEtaCaloConvertedPhotonMatchedInvMassPt(NULL),
161 fHistoTruePi0CaloElectronInvMassPt(NULL),
162 fHistoTrueEtaCaloElectronInvMassPt(NULL),
163 fHistoTruePi0CaloMergedClusterInvMassPt(NULL),
164 fHistoTrueEtaCaloMergedClusterInvMassPt(NULL),
165 fHistoTrueMotherCaloEMNonLeadingInvMassPt(NULL),
166 fHistoTruePi0CaloMergedClusterPartConvInvMassPt(NULL),
167 fHistoTrueEtaCaloMergedClusterPartConvInvMassPt(NULL),
168 fHistoTruePrimaryPi0InvMassPt(NULL),
169 fHistoTruePrimaryEtaInvMassPt(NULL),
170 fHistoTruePrimaryPi0W0WeightingInvMassPt(NULL),
171 fHistoTruePrimaryEtaW0WeightingInvMassPt(NULL),
172 fProfileTruePrimaryPi0WeightsInvMassPt(NULL),
173 fProfileTruePrimaryEtaWeightsInvMassPt(NULL),
174 fHistoTruePrimaryPi0MCPtResolPt(NULL),
175 fHistoTruePrimaryEtaMCPtResolPt(NULL),
176 fHistoTrueMotherPi0ConvPhotonEtaPhi(NULL),
177 fHistoTrueMotherEtaConvPhotonEtaPhi(NULL),
178 fHistoTrueSecondaryPi0InvMassPt(NULL),
179 fHistoTrueSecondaryPi0FromK0sInvMassPt(NULL),
180 fHistoTrueK0sWithPi0DaughterMCPt(NULL),
181 fHistoTrueSecondaryPi0FromEtaInvMassPt(NULL),
182 fHistoTrueEtaWithPi0DaughterMCPt(NULL),
183 fHistoTrueSecondaryPi0FromLambdaInvMassPt(NULL),
184 fHistoTrueLambdaWithPi0DaughterMCPt(NULL),
185 fHistoTrueBckGGInvMassPt(NULL),
186 fHistoTrueBckContInvMassPt(NULL),
187 fHistoTruePi0PtY(NULL),
188 fHistoTrueEtaPtY(NULL),
189 fHistoTruePi0PtAlpha(NULL),
190 fHistoTrueEtaPtAlpha(NULL),
191 fHistoTruePi0PtOpenAngle(NULL),
192 fHistoTrueEtaPtOpenAngle(NULL),
193 fHistoTrueConvGammaPt(NULL),
194 fHistoTrueConvPi0GammaPt(NULL),
195 fHistoTrueConvGammaEta(NULL),
196 fHistoCombinatorialPt(NULL),
197 fHistoTruePrimaryConvGammaPt(NULL),
198 fHistoTruePrimaryConvGammaESDPtMCPt(NULL),
199 fHistoTrueSecondaryConvGammaPt(NULL),
200 fHistoTrueSecondaryConvGammaFromXFromK0sPt(NULL),
201 fHistoTrueSecondaryConvGammaFromXFromLambdaPt(NULL),
202 fHistoTrueClusGammaPt(NULL),
203 fHistoTrueClusUnConvGammaPt(NULL),
204 fHistoTrueClusUnConvGammaMCPt(NULL),
205 fHistoTrueClusElectronPt(NULL),
206 fHistoTrueClusConvGammaPt(NULL),
207 fHistoTrueClusConvGammaMCPt(NULL),
208 fHistoTrueClusConvGammaFullyPt(NULL),
209 fHistoTrueClusMergedGammaPt(NULL),
210 fHistoTrueClusMergedPartConvGammaPt(NULL),
211 fHistoTrueClusDalitzPt(NULL),
212 fHistoTrueClusDalitzMergedPt(NULL),
213 fHistoTrueClusPhotonFromElecMotherPt(NULL),
214 fHistoTrueClusShowerPt(NULL),
215 fHistoTrueClusSubLeadingPt(NULL),
216 fHistoTrueClusNParticles(NULL),
217 fHistoTrueClusEMNonLeadingPt(NULL),
218 fHistoTrueNLabelsInClus(NULL),
219 fHistoTruePrimaryClusGammaPt(NULL),
220 fHistoTruePrimaryClusGammaESDPtMCPt(NULL),
221 fHistoTruePrimaryPi0PhotonPairPtconv(NULL),
222 fHistoTruePrimaryPi0DCPtconv(NULL),
223 fHistoTruePrimaryPi0MissingPtconv(NULL),
224 fHistoTruePrimaryEtaPhotonPairPtconv(NULL),
225 fHistoTruePrimaryEtaDCPtconv(NULL),
226 fHistoTruePrimaryEtaMissingPtconv(NULL),
227 fHistoTrueSecondaryPi0PhotonPairPtconv(NULL),
228 fHistoTrueSecondaryPi0DCPtconv(NULL),
229 fHistoTrueSecondaryPi0MissingPtconv(NULL),
230 fStringRecTruePi0s(NULL),
231 fStringRecTrueEtas(NULL),
233 fHistoNGoodESDTracks(NULL),
234 fHistoNGammaCandidates(NULL),
235 fHistoNGoodESDTracksVsNGammaCanditates(NULL),
236 fHistoNV0Tracks(NULL),
237 fProfileEtaShift(NULL),
238 fEventPlaneAngle(-100),
240 fNGammaCandidates(0),
251 fMoveParticleAccordingToVertex(kTRUE),
253 fDoMesonAnalysis(kTRUE),
257 fIsFromMBHeader(kTRUE),
258 fIsOverlappingWithOtherHeader(kFALSE),
265 //________________________________________________________________________
266 AliAnalysisTaskGammaConvCalo::AliAnalysisTaskGammaConvCalo(const char *name):
267 AliAnalysisTaskSE(name),
271 fBGClusHandler(NULL),
272 fBGClusHandlerRP(NULL),
280 fPhotonDCAList(NULL),
283 fHeaderNameList(NULL),
284 fClusterOutputList(NULL),
287 fGammaCandidates(NULL),
288 fClusterCandidates(NULL),
289 fEventCutArray(NULL),
292 fConversionCuts(NULL),
293 fClusterCutArray(NULL),
294 fCaloPhotonCuts(NULL),
295 fMesonCutArray(NULL),
297 fHistoConvGammaPt(NULL),
298 fHistoConvGammaR(NULL),
299 fHistoConvGammaEta(NULL),
300 fTreeConvGammaPtDcazCat(NULL),
306 fCharPhotonMCInfo(0),
307 fHistoMotherInvMassPt(NULL),
308 fHistoMotherMatchedInvMassPt(NULL),
309 fSparseMotherInvMassPtZM(NULL),
310 fHistoMotherBackInvMassPt(NULL),
311 fSparseMotherBackInvMassPtZM(NULL),
312 fHistoMotherInvMassEalpha(NULL),
313 fHistoMotherPi0PtY(NULL),
314 fHistoMotherEtaPtY(NULL),
315 fHistoMotherPi0PtAlpha(NULL),
316 fHistoMotherEtaPtAlpha(NULL),
317 fHistoMotherPi0PtOpenAngle(NULL),
318 fHistoMotherEtaPtOpenAngle(NULL),
319 fHistoMotherPi0ConvPhotonEtaPhi(NULL),
320 fHistoMotherEtaConvPhotonEtaPhi(NULL),
321 fHistoMotherInvMassECalib(NULL),
322 fHistoMotherInvMassECalibalpha(NULL),
323 fHistoPhotonPairPtconv(NULL),
324 fHistoPhotonPairMixedEventPtconv(NULL),
325 fHistoClusGammaPt(NULL),
326 fHistoClusOverlapHeadersGammaPt(NULL),
327 fHistoMCHeaders(NULL),
328 fHistoMCAllGammaPt(NULL),
329 fHistoMCAllGammaEMCALAccPt(NULL),
330 fHistoMCDecayGammaPi0Pt(NULL),
331 fHistoMCDecayGammaRhoPt(NULL),
332 fHistoMCDecayGammaEtaPt(NULL),
333 fHistoMCDecayGammaOmegaPt(NULL),
334 fHistoMCDecayGammaEtapPt(NULL),
335 fHistoMCDecayGammaPhiPt(NULL),
336 fHistoMCDecayGammaSigmaPt(NULL),
337 fHistoMCConvGammaPt(NULL),
338 fHistoMCConvGammaR(NULL),
339 fHistoMCConvGammaEta(NULL),
341 fHistoMCPi0WOWeightPt(NULL),
343 fHistoMCEtaWOWeightPt(NULL),
344 fHistoMCPi0InAccPt(NULL),
345 fHistoMCEtaInAccPt(NULL),
346 fHistoMCPi0PtY(NULL),
347 fHistoMCEtaPtY(NULL),
348 fHistoMCPi0PtAlpha(NULL),
349 fHistoMCEtaPtAlpha(NULL),
351 fHistoMCK0sWOWeightPt(NULL),
352 fHistoMCK0sPtY(NULL),
353 fHistoMCSecPi0PtvsSource(NULL),
354 fHistoMCSecPi0Source(NULL),
355 fHistoMCSecEtaPt(NULL),
356 fHistoMCSecEtaSource(NULL),
357 fHistoTruePi0InvMassPt(NULL),
358 fHistoTrueEtaInvMassPt(NULL),
359 fHistoTruePi0CaloPhotonInvMassPt(NULL),
360 fHistoTrueEtaCaloPhotonInvMassPt(NULL),
361 fHistoTruePi0CaloConvertedPhotonInvMassPt(NULL),
362 fHistoTruePi0CaloConvertedPhotonMatchedInvMassPt(NULL),
363 fHistoTrueEtaCaloConvertedPhotonInvMassPt(NULL),
364 fHistoTrueEtaCaloConvertedPhotonMatchedInvMassPt(NULL),
365 fHistoTruePi0CaloElectronInvMassPt(NULL),
366 fHistoTrueEtaCaloElectronInvMassPt(NULL),
367 fHistoTruePi0CaloMergedClusterInvMassPt(NULL),
368 fHistoTrueEtaCaloMergedClusterInvMassPt(NULL),
369 fHistoTrueMotherCaloEMNonLeadingInvMassPt(NULL),
370 fHistoTruePi0CaloMergedClusterPartConvInvMassPt(NULL),
371 fHistoTrueEtaCaloMergedClusterPartConvInvMassPt(NULL),
372 fHistoTruePrimaryPi0InvMassPt(NULL),
373 fHistoTruePrimaryEtaInvMassPt(NULL),
374 fHistoTruePrimaryPi0W0WeightingInvMassPt(NULL),
375 fHistoTruePrimaryEtaW0WeightingInvMassPt(NULL),
376 fProfileTruePrimaryPi0WeightsInvMassPt(NULL),
377 fProfileTruePrimaryEtaWeightsInvMassPt(NULL),
378 fHistoTruePrimaryPi0MCPtResolPt(NULL),
379 fHistoTruePrimaryEtaMCPtResolPt(NULL),
380 fHistoTrueMotherPi0ConvPhotonEtaPhi(NULL),
381 fHistoTrueMotherEtaConvPhotonEtaPhi(NULL),
382 fHistoTrueSecondaryPi0InvMassPt(NULL),
383 fHistoTrueSecondaryPi0FromK0sInvMassPt(NULL),
384 fHistoTrueK0sWithPi0DaughterMCPt(NULL),
385 fHistoTrueSecondaryPi0FromEtaInvMassPt(NULL),
386 fHistoTrueEtaWithPi0DaughterMCPt(NULL),
387 fHistoTrueSecondaryPi0FromLambdaInvMassPt(NULL),
388 fHistoTrueLambdaWithPi0DaughterMCPt(NULL),
389 fHistoTrueBckGGInvMassPt(NULL),
390 fHistoTrueBckContInvMassPt(NULL),
391 fHistoTruePi0PtY(NULL),
392 fHistoTrueEtaPtY(NULL),
393 fHistoTruePi0PtAlpha(NULL),
394 fHistoTrueEtaPtAlpha(NULL),
395 fHistoTruePi0PtOpenAngle(NULL),
396 fHistoTrueEtaPtOpenAngle(NULL),
397 fHistoTrueConvGammaPt(NULL),
398 fHistoTrueConvPi0GammaPt(NULL),
399 fHistoTrueConvGammaEta(NULL),
400 fHistoCombinatorialPt(NULL),
401 fHistoTruePrimaryConvGammaPt(NULL),
402 fHistoTruePrimaryConvGammaESDPtMCPt(NULL),
403 fHistoTrueSecondaryConvGammaPt(NULL),
404 fHistoTrueSecondaryConvGammaFromXFromK0sPt(NULL),
405 fHistoTrueSecondaryConvGammaFromXFromLambdaPt(NULL),
406 fHistoTrueClusGammaPt(NULL),
407 fHistoTrueClusUnConvGammaPt(NULL),
408 fHistoTrueClusUnConvGammaMCPt(NULL),
409 fHistoTrueClusElectronPt(NULL),
410 fHistoTrueClusConvGammaPt(NULL),
411 fHistoTrueClusConvGammaMCPt(NULL),
412 fHistoTrueClusConvGammaFullyPt(NULL),
413 fHistoTrueClusMergedGammaPt(NULL),
414 fHistoTrueClusMergedPartConvGammaPt(NULL),
415 fHistoTrueClusDalitzPt(NULL),
416 fHistoTrueClusDalitzMergedPt(NULL),
417 fHistoTrueClusPhotonFromElecMotherPt(NULL),
418 fHistoTrueClusShowerPt(NULL),
419 fHistoTrueClusSubLeadingPt(NULL),
420 fHistoTrueClusNParticles(NULL),
421 fHistoTrueClusEMNonLeadingPt(NULL),
422 fHistoTrueNLabelsInClus(NULL),
423 fHistoTruePrimaryClusGammaPt(NULL),
424 fHistoTruePrimaryClusGammaESDPtMCPt(NULL),
425 fHistoTruePrimaryPi0PhotonPairPtconv(NULL),
426 fHistoTruePrimaryPi0DCPtconv(NULL),
427 fHistoTruePrimaryPi0MissingPtconv(NULL),
428 fHistoTruePrimaryEtaPhotonPairPtconv(NULL),
429 fHistoTruePrimaryEtaDCPtconv(NULL),
430 fHistoTruePrimaryEtaMissingPtconv(NULL),
431 fHistoTrueSecondaryPi0PhotonPairPtconv(NULL),
432 fHistoTrueSecondaryPi0DCPtconv(NULL),
433 fHistoTrueSecondaryPi0MissingPtconv(NULL),
434 fStringRecTruePi0s(NULL),
435 fStringRecTrueEtas(NULL),
437 fHistoNGoodESDTracks(NULL),
438 fHistoNGammaCandidates(NULL),
439 fHistoNGoodESDTracksVsNGammaCanditates(NULL),
440 fHistoNV0Tracks(NULL),
441 fProfileEtaShift(NULL),
442 fEventPlaneAngle(-100),
444 fNGammaCandidates(0),
455 fMoveParticleAccordingToVertex(kTRUE),
457 fDoMesonAnalysis(kTRUE),
461 fIsFromMBHeader(kTRUE),
462 fIsOverlappingWithOtherHeader(kFALSE),
466 // Define output slots here
467 DefineOutput(1, TList::Class());
470 AliAnalysisTaskGammaConvCalo::~AliAnalysisTaskGammaConvCalo()
472 if(fGammaCandidates){
473 delete fGammaCandidates;
474 fGammaCandidates = 0x0;
476 if(fClusterCandidates){
477 delete fClusterCandidates;
478 fClusterCandidates = 0x0;
485 delete[] fBGHandlerRP;
489 delete[] fBGClusHandler;
490 fBGClusHandler = 0x0;
492 if(fBGClusHandlerRP){
493 delete[] fBGClusHandlerRP;
494 fBGClusHandlerRP = 0x0;
497 //___________________________________________________________
498 void AliAnalysisTaskGammaConvCalo::InitBack(){
500 const Int_t nDim = 4;
501 Int_t nBins[nDim] = {800,250,7,4};
502 Double_t xMin[nDim] = {0,0, 0,0};
503 Double_t xMax[nDim] = {0.8,25,7,4};
506 fSparseMotherInvMassPtZM = new THnSparseF*[fnCuts];
507 fSparseMotherBackInvMassPtZM = new THnSparseF*[fnCuts];
510 fBGHandler = new AliGammaConversionAODBGHandler*[fnCuts];
511 fBGHandlerRP = new AliConversionAODBGHandlerRP*[fnCuts];
513 fBGClusHandler = new AliGammaConversionAODBGHandler*[fnCuts];
514 fBGClusHandlerRP = new AliConversionAODBGHandlerRP*[fnCuts];
516 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
517 if (((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->DoBGCalculation()){
518 TString cutstringEvent = ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber();
519 TString cutstringPhoton = ((AliConversionPhotonCuts*)fCutArray->At(iCut))->GetCutNumber();
520 TString cutstringCalo = ((AliCaloPhotonCuts*)fClusterCutArray->At(iCut))->GetCutNumber();
521 TString cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
523 Int_t collisionSystem = atoi((TString)(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber())(0,1));
524 Int_t centMin = atoi((TString)(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber())(1,1));
525 Int_t centMax = atoi((TString)(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber())(2,1));
527 if(collisionSystem == 1 || collisionSystem == 2 ||
528 collisionSystem == 5 || collisionSystem == 8 ||
529 collisionSystem == 9){
530 centMin = centMin*10;
531 centMax = centMax*10;
532 if(centMax ==0 && centMax!=centMin) centMax=100;
533 } else if(collisionSystem == 3 || collisionSystem == 6){
536 } else if(collisionSystem == 4 || collisionSystem == 7){
537 centMin = ((centMin*5)+45);
538 centMax = ((centMax*5)+45);
542 fBackList[iCut] = new TList();
543 fBackList[iCut]->SetName(Form("%s_%s_%s_%s Back histograms",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(), cutstringMeson.Data()));
544 fBackList[iCut]->SetOwner(kTRUE);
545 fCutFolder[iCut]->Add(fBackList[iCut]);
547 fSparseMotherBackInvMassPtZM[iCut] = new THnSparseF("Back_Back_InvMass_Pt_z_m","Back_Back_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
548 fBackList[iCut]->Add(fSparseMotherBackInvMassPtZM[iCut]);
550 fMotherList[iCut] = new TList();
551 fMotherList[iCut]->SetName(Form("%s_%s_%s_%s Mother histograms",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
552 fMotherList[iCut]->SetOwner(kTRUE);
553 fCutFolder[iCut]->Add(fMotherList[iCut]);
555 fSparseMotherInvMassPtZM[iCut] = new THnSparseF("Back_Mother_InvMass_Pt_z_m","Back_Mother_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
556 fMotherList[iCut]->Add(fSparseMotherInvMassPtZM[iCut]);
559 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->BackgroundHandlerType() == 0){
560 fBGHandler[iCut] = new AliGammaConversionAODBGHandler(
561 collisionSystem,centMin,centMax,
562 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents(),
563 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseTrackMultiplicity(),
565 fBGClusHandler[iCut] = new AliGammaConversionAODBGHandler(
566 collisionSystem,centMin,centMax,
567 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents(),
568 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseTrackMultiplicity(),
570 fBGHandlerRP[iCut] = NULL;
572 fBGHandlerRP[iCut] = new AliConversionAODBGHandlerRP(
573 ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsHeavyIon(),
574 ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity(),
575 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents());
576 fBGClusHandlerRP[iCut] = new AliConversionAODBGHandlerRP(
577 ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsHeavyIon(),
578 ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity(),
579 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents());
580 fBGHandler[iCut] = NULL;
585 //________________________________________________________________________
586 void AliAnalysisTaskGammaConvCalo::UserCreateOutputObjects(){
589 if(fOutputContainer != NULL){
590 delete fOutputContainer;
591 fOutputContainer = NULL;
593 if(fOutputContainer == NULL){
594 fOutputContainer = new TList();
595 fOutputContainer->SetOwner(kTRUE);
598 // Array of current cut's gammas
599 fGammaCandidates = new TList();
600 fClusterCandidates = new TList();
602 fCutFolder = new TList*[fnCuts];
603 fESDList = new TList*[fnCuts];
606 fBackList = new TList*[fnCuts];
607 fMotherList = new TList*[fnCuts];
610 fHistoNEvents = new TH1I*[fnCuts];
611 fHistoNGoodESDTracks = new TH1I*[fnCuts];
612 fHistoNGammaCandidates = new TH1I*[fnCuts];
613 fHistoNGoodESDTracksVsNGammaCanditates = new TH2F*[fnCuts];
614 fHistoNV0Tracks = new TH1I*[fnCuts];
615 fProfileEtaShift = new TProfile*[fnCuts];
616 fHistoConvGammaPt = new TH1F*[fnCuts];
618 if (fDoPhotonQA == 2){
619 fPhotonDCAList = new TList*[fnCuts];
620 fTreeConvGammaPtDcazCat = new TTree*[fnCuts];
622 if (fDoPhotonQA > 0){
623 fHistoConvGammaR = new TH1F*[fnCuts];
624 fHistoConvGammaEta = new TH1F*[fnCuts];
627 if(fDoMesonAnalysis){
628 fHistoMotherInvMassPt = new TH2F*[fnCuts];
629 fHistoMotherMatchedInvMassPt = new TH2F*[fnCuts];
630 fHistoMotherBackInvMassPt = new TH2F*[fnCuts];
631 fHistoMotherInvMassEalpha = new TH2F*[fnCuts];
632 fHistoPhotonPairPtconv = new TH2F*[fnCuts];
633 fHistoPhotonPairMixedEventPtconv = new TH2F*[fnCuts];
635 fHistoMotherPi0PtY = new TH2F*[fnCuts];
636 fHistoMotherEtaPtY = new TH2F*[fnCuts];
637 fHistoMotherPi0PtAlpha = new TH2F*[fnCuts];
638 fHistoMotherEtaPtAlpha = new TH2F*[fnCuts];
639 fHistoMotherPi0PtOpenAngle = new TH2F*[fnCuts];
640 fHistoMotherEtaPtOpenAngle = new TH2F*[fnCuts];
641 fHistoMotherPi0ConvPhotonEtaPhi = new TH2F*[fnCuts];
642 fHistoMotherEtaConvPhotonEtaPhi = new TH2F*[fnCuts];
645 fHistoMotherInvMassECalib = new TH2F*[fnCuts];
646 fHistoMotherInvMassECalibalpha = new TH2F*[fnCuts];
650 fClusterOutputList = new TList*[fnCuts];
651 fHistoClusGammaPt = new TH1F*[fnCuts];
652 fHistoClusOverlapHeadersGammaPt = new TH1F*[fnCuts];
654 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
655 TString cutstringEvent = ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber();
656 TString cutstringPhoton = ((AliConversionPhotonCuts*)fCutArray->At(iCut))->GetCutNumber();
657 TString cutstringCalo = ((AliCaloPhotonCuts*)fClusterCutArray->At(iCut))->GetCutNumber();
658 TString cutstringMeson = "NoMesonCut";
659 if(fDoMesonAnalysis)cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
661 fCutFolder[iCut] = new TList();
662 fCutFolder[iCut]->SetName(Form("Cut Number %s_%s_%s_%s",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
663 fCutFolder[iCut]->SetOwner(kTRUE);
664 fOutputContainer->Add(fCutFolder[iCut]);
665 fESDList[iCut] = new TList();
666 fESDList[iCut]->SetName(Form("%s_%s_%s_%s ESD histograms",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
667 fESDList[iCut]->SetOwner(kTRUE);
668 fCutFolder[iCut]->Add(fESDList[iCut]);
670 fHistoNEvents[iCut] = new TH1I("NEvents","NEvents",10,-0.5,9.5);
671 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(1,"Accepted");
672 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(2,"Centrality");
673 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(3,"Missing MC");
674 if (((AliConvEventCuts*)fEventCutArray->At(iCut))->IsSpecialTrigger() > 1 ){
675 TString TriggerNames = "Not Trigger: ";
676 TriggerNames = TriggerNames+ ( (AliConvEventCuts*)fEventCutArray->At(iCut))->GetSpecialTriggerName();
677 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(4,TriggerNames.Data());
679 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(4,"Trigger");
681 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(5,"Vertex Z");
682 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(6,"Cont. Vertex");
683 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(7,"Pile-Up");
684 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(8,"no SDD");
685 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(9,"no V0AND");
686 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(10,"EMCAL problem");
687 fESDList[iCut]->Add(fHistoNEvents[iCut]);
689 if(fIsHeavyIon == 1) fHistoNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",4000,0,4000);
690 else if(fIsHeavyIon == 2) fHistoNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",400,0,400);
691 else fHistoNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",200,0,200);
692 fHistoNGoodESDTracks[iCut]->SetXTitle("# TPC tracks");
693 fESDList[iCut]->Add(fHistoNGoodESDTracks[iCut]);
695 if(fIsHeavyIon == 1) fHistoNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",100,0,100);
696 else if(fIsHeavyIon == 2) fHistoNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",50,0,50);
697 else fHistoNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",50,0,50);
698 fHistoNGammaCandidates[iCut]->SetXTitle("# accepted $#gamma_{conv}");
699 fESDList[iCut]->Add(fHistoNGammaCandidates[iCut]);
701 if(fIsHeavyIon == 1) fHistoNGoodESDTracksVsNGammaCanditates[iCut] = new TH2F("GoodESDTracksVsGammaCandidates","GoodESDTracksVsGammaCandidates",4000,0,4000,100,0,100);
702 else if(fIsHeavyIon == 2) fHistoNGoodESDTracksVsNGammaCanditates[iCut] = new TH2F("GoodESDTracksVsGammaCandidates","GoodESDTracksVsGammaCandidates",400,0,400,50,0,50);
703 else fHistoNGoodESDTracksVsNGammaCanditates[iCut] = new TH2F("GoodESDTracksVsGammaCandidates","GoodESDTracksVsGammaCandidates",200,0,200,50,0,50);
704 fHistoNGoodESDTracksVsNGammaCanditates[iCut]->SetXTitle("# TPC tracks");
705 fHistoNGoodESDTracksVsNGammaCanditates[iCut]->SetYTitle("# accepted $#gamma_{conv}");
706 fESDList[iCut]->Add(fHistoNGoodESDTracksVsNGammaCanditates[iCut]);
709 if(fIsHeavyIon == 1) fHistoNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",30000,0,30000);
710 else if(fIsHeavyIon == 2) fHistoNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",2500,0,2500);
711 else fHistoNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",1500,0,1500);
712 fHistoNV0Tracks[iCut]->SetXTitle("VZERO amp [arb. units]");
713 fESDList[iCut]->Add(fHistoNV0Tracks[iCut]);
714 fProfileEtaShift[iCut] = new TProfile("Eta Shift","Eta Shift",1, -0.5,0.5);
715 fESDList[iCut]->Add(fProfileEtaShift[iCut]);
716 fHistoConvGammaPt[iCut] = new TH1F("ESD_ConvGamma_Pt","ESD_ConvGamma_Pt",250,0,25);
717 fHistoConvGammaPt[iCut]->SetXTitle("p_{T,conv} (GeV/c)");
718 fESDList[iCut]->Add(fHistoConvGammaPt[iCut]);
720 if (fDoPhotonQA == 2){
721 fPhotonDCAList[iCut] = new TList();
722 fPhotonDCAList[iCut]->SetName(Form("%s_%s_%s_%s Photon DCA tree",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
723 fPhotonDCAList[iCut]->SetOwner(kTRUE);
724 fCutFolder[iCut]->Add(fPhotonDCAList[iCut]);
726 fTreeConvGammaPtDcazCat[iCut] = new TTree("ESD_ConvGamma_Pt_Dcaz_R_Eta","ESD_ConvGamma_Pt_Dcaz_R_Eta_Cat");
727 fTreeConvGammaPtDcazCat[iCut]->Branch("Pt",&fPtGamma,"fPtGamma/F");
728 fTreeConvGammaPtDcazCat[iCut]->Branch("DcaZPhoton",&fDCAzPhoton,"fDCAzPhoton/F");
729 fTreeConvGammaPtDcazCat[iCut]->Branch("cat",&fCharCatPhoton,"fCharCatPhoton/b");
731 fTreeConvGammaPtDcazCat[iCut]->Branch("photonMCInfo",&fCharPhotonMCInfo,"fCharPhotonMCInfo/b");
733 fPhotonDCAList[iCut]->Add(fTreeConvGammaPtDcazCat[iCut]);
736 if (fDoPhotonQA > 0){
737 fHistoConvGammaR[iCut] = new TH1F("ESD_ConvGamma_R","ESD_ConvGamma_R",800,0,200);
738 fHistoConvGammaR[iCut]->SetXTitle("R_{conv} (cm)");
739 fESDList[iCut]->Add(fHistoConvGammaR[iCut]);
740 fHistoConvGammaEta[iCut] = new TH1F("ESD_ConvGamma_Eta","ESD_ConvGamma_Eta",2000,-2,2);
741 fHistoConvGammaEta[iCut]->SetXTitle("#eta_{conv}");
742 fESDList[iCut]->Add(fHistoConvGammaEta[iCut]);
745 fClusterOutputList[iCut] = new TList();
746 fClusterOutputList[iCut]->SetName(Form("%s_%s_%s_%s Cluster Output",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
747 fClusterOutputList[iCut]->SetOwner(1);
748 fCutFolder[iCut]->Add(fClusterOutputList[iCut]);
750 fHistoClusGammaPt[iCut] = new TH1F("ClusGamma_Pt","ClusGamma_Pt",250,0,25);
751 fHistoClusGammaPt[iCut]->SetXTitle("p_{T,clus} (GeV/c)");
752 fClusterOutputList[iCut]->Add(fHistoClusGammaPt[iCut]);
753 fHistoClusOverlapHeadersGammaPt[iCut] = new TH1F("ClusGammaOverlapHeaders_Pt","ClusGammaOverlapHeaders_Pt",250,0,25);
754 fHistoClusOverlapHeadersGammaPt[iCut]->SetXTitle("p_{T,clus} (GeV/c), selected header w/ overlap");
755 fClusterOutputList[iCut]->Add(fHistoClusOverlapHeadersGammaPt[iCut]);
757 if(fDoMesonAnalysis){
758 fHistoMotherInvMassPt[iCut] = new TH2F("ESD_Mother_InvMass_Pt","ESD_Mother_InvMass_Pt",800,0,0.8,250,0,25);
759 fHistoMotherInvMassPt[iCut]->SetXTitle("M_{inv} (GeV/c^{2})");
760 fHistoMotherInvMassPt[iCut]->SetYTitle("p_{T,pair} (GeV/c)");
761 fESDList[iCut]->Add(fHistoMotherInvMassPt[iCut]);
763 fHistoMotherMatchedInvMassPt[iCut] = new TH2F("ESD_MotherMatched_InvMass_Pt","ESD_MotherMatched_InvMass_Pt",800,0,0.8,250,0,25);
764 fHistoMotherMatchedInvMassPt[iCut]->SetXTitle("M_{inv} (GeV/c^{2}) matched conv e^{+/-} to cluster");
765 fHistoMotherMatchedInvMassPt[iCut]->SetYTitle("p_{T,pair} (GeV/c)");
766 fESDList[iCut]->Add(fHistoMotherMatchedInvMassPt[iCut]);
768 fHistoMotherBackInvMassPt[iCut] = new TH2F("ESD_Background_InvMass_Pt","ESD_Background_InvMass_Pt",800,0,0.8,250,0,25);
769 fHistoMotherBackInvMassPt[iCut]->SetXTitle("M_{inv, mxed} (GeV/c^{2})");
770 fHistoMotherBackInvMassPt[iCut]->SetYTitle("p_{T,BG pair} (GeV/c)");
771 fESDList[iCut]->Add(fHistoMotherBackInvMassPt[iCut]);
773 fHistoMotherInvMassEalpha[iCut] = new TH2F("ESD_Mother_InvMass_vs_E_alpha","ESD_Mother_InvMass_vs_E_alpha",800,0,0.8,250,0,25);
774 fHistoMotherInvMassEalpha[iCut]->SetXTitle("M_{inv} (GeV/c^{2})");
775 fHistoMotherInvMassEalpha[iCut]->SetYTitle("p_{T,pair} (GeV/c)");
776 fESDList[iCut]->Add(fHistoMotherInvMassEalpha[iCut]);
778 fHistoPhotonPairPtconv[iCut] = new TH2F("ESD_Mother_InvMass_PtConv","",800,0,0.8,250,0,25);
779 fHistoPhotonPairPtconv[iCut]->SetXTitle("M_{inv} (GeV/c^{2})");
780 fHistoPhotonPairPtconv[iCut]->SetYTitle("#gamma^{conv} p_{T} (GeV/c)");
781 fESDList[iCut]->Add(fHistoPhotonPairPtconv[iCut]);
783 fHistoPhotonPairMixedEventPtconv[iCut] = new TH2F("ESD_Background_InvMass_PtConv","",800,0,0.8,250,0,25);
784 fHistoPhotonPairMixedEventPtconv[iCut]->SetXTitle("M_{inv,mixed} (GeV/c^{2})");
785 fHistoPhotonPairMixedEventPtconv[iCut]->SetYTitle("#gamma^{conv} p_{T} (GeV/c)");
786 fESDList[iCut]->Add(fHistoPhotonPairMixedEventPtconv[iCut]);
789 fHistoMotherInvMassECalib[iCut] = new TH2F("ESD_Mother_InvMass_E_Calib","ESD_Mother_InvMass_E_Calib",800,0,0.8,250,0,25);
790 fHistoMotherInvMassECalib[iCut]->SetXTitle("M_{inv} (GeV/c^{2})");
791 fHistoMotherInvMassECalib[iCut]->SetYTitle("p_{T,cluster} (GeV/c)");
792 fESDList[iCut]->Add(fHistoMotherInvMassECalib[iCut]);
794 fHistoMotherInvMassECalibalpha[iCut] = new TH2F("ESD_Mother_InvMass_vs_E_Calib_alpha","ESD_Mother_InvMass_vs_E_Calib_alpha",800,0,0.8,250,0,25);
795 fHistoMotherInvMassECalibalpha[iCut]->SetXTitle("M_{inv} (GeV/c^{2})");
796 fHistoMotherInvMassECalibalpha[iCut]->SetYTitle("p_{T,cluster} (GeV/c)");
797 fESDList[iCut]->Add(fHistoMotherInvMassECalibalpha[iCut]);
800 if (fDoMesonQA > 0 ){
801 fHistoMotherPi0PtY[iCut] = new TH2F("ESD_MotherPi0_Pt_Y","ESD_MotherPi0_Pt_Y",150,0.03,15.,150,-1.5,1.5);
802 fHistoMotherPi0PtY[iCut]->SetXTitle("p_{T, #pi^{0} cand} (GeV/c)");
803 fHistoMotherPi0PtY[iCut]->SetYTitle("y_{#pi^{0} cand}");
804 SetLogBinningXTH2(fHistoMotherPi0PtY[iCut]);
805 fESDList[iCut]->Add(fHistoMotherPi0PtY[iCut]);
806 fHistoMotherEtaPtY[iCut] = new TH2F("ESD_MotaherEta_Pt_Y","ESD_MotherEta_Pt_Y",150,0.03,15.,150,-1.5,1.5);
807 fHistoMotherEtaPtY[iCut]->SetXTitle("p_{T, #eta cand} (GeV/c)");
808 fHistoMotherEtaPtY[iCut]->SetYTitle("y_{ #eta cand}");
809 SetLogBinningXTH2(fHistoMotherEtaPtY[iCut]);
810 fESDList[iCut]->Add(fHistoMotherEtaPtY[iCut]);
811 fHistoMotherPi0PtAlpha[iCut] = new TH2F("ESD_MotherPi0_Pt_Alpha","ESD_MotherPi0_Pt_Alpha",150,0.03,15.,100,0,1);
812 fHistoMotherPi0PtAlpha[iCut]->SetXTitle("p_{T, #pi^{0} cand} (GeV/c)");
813 fHistoMotherPi0PtAlpha[iCut]->SetYTitle("#alpha_{#pi^{0} cand}");
814 SetLogBinningXTH2(fHistoMotherPi0PtAlpha[iCut]);
815 fESDList[iCut]->Add(fHistoMotherPi0PtAlpha[iCut]);
816 fHistoMotherEtaPtAlpha[iCut] = new TH2F("ESD_MotherEta_Pt_Alpha","ESD_MotherEta_Pt_Alpha",150,0.03,15.,100,0,1);
817 fHistoMotherEtaPtAlpha[iCut]->SetXTitle("p_{T, #eta cand} (GeV/c)");
818 fHistoMotherEtaPtAlpha[iCut]->SetYTitle("#alpha_{#eta cand}");
819 SetLogBinningXTH2(fHistoMotherEtaPtAlpha[iCut]);
820 fESDList[iCut]->Add(fHistoMotherEtaPtAlpha[iCut]);
821 fHistoMotherPi0PtOpenAngle[iCut] = new TH2F("ESD_MotherPi0_Pt_OpenAngle","ESD_MotherPi0_Pt_OpenAngle",150,0.03,15.,100,0,TMath::Pi());
822 fHistoMotherPi0PtOpenAngle[iCut]->SetXTitle("p_{T, #pi^{0} cand} (GeV/c)");
823 fHistoMotherPi0PtOpenAngle[iCut]->SetYTitle("#theta_{#pi^{0} cand}");
824 SetLogBinningXTH2(fHistoMotherPi0PtOpenAngle[iCut]);
825 fESDList[iCut]->Add(fHistoMotherPi0PtOpenAngle[iCut]);
826 fHistoMotherEtaPtOpenAngle[iCut] = new TH2F("ESD_MotherEta_Pt_OpenAngle","ESD_MotherEta_Pt_OpenAngle",150,0.03,15.,100,0,TMath::Pi());
827 fHistoMotherEtaPtOpenAngle[iCut]->SetXTitle("p_{T, #eta cand} (GeV/c)");
828 fHistoMotherEtaPtOpenAngle[iCut]->SetYTitle("#theta_{#eta cand}");
829 SetLogBinningXTH2(fHistoMotherEtaPtOpenAngle[iCut]);
830 fESDList[iCut]->Add(fHistoMotherEtaPtOpenAngle[iCut]);
831 fHistoMotherPi0ConvPhotonEtaPhi[iCut] = new TH2F("ESD_MotherPi0ConvPhoton_Eta_Phi","ConvPhoton under #pi^{0} peak",600,0,2*TMath::Pi(),200,-1,1);
832 fHistoMotherPi0ConvPhotonEtaPhi[iCut]->SetXTitle("#phi_{#gamma_{conv}} (rad)");
833 fHistoMotherPi0ConvPhotonEtaPhi[iCut]->SetYTitle("#eta_{#gamma_{conv}}");
834 fESDList[iCut]->Add(fHistoMotherPi0ConvPhotonEtaPhi[iCut]);
835 fHistoMotherEtaConvPhotonEtaPhi[iCut] = new TH2F("ESD_MotherEtaConvPhoton_Eta_Phi","ConvPhoton under #eta peak",600,0,2*TMath::Pi(),200,-1,1);
836 fHistoMotherEtaConvPhotonEtaPhi[iCut]->SetXTitle("#phi_{#gamma_{conv}} (rad)");
837 fHistoMotherEtaConvPhotonEtaPhi[iCut]->SetYTitle("#eta_{#gamma_{conv}}");
838 fESDList[iCut]->Add(fHistoMotherEtaConvPhotonEtaPhi[iCut]);
842 if(fDoMesonAnalysis){
843 InitBack(); // Init Background Handler
848 fMCList = new TList*[fnCuts];
850 fTrueList = new TList*[fnCuts];
851 // Selected Header List
852 fHeaderNameList = new TList*[fnCuts];
853 fHistoMCHeaders = new TH1I*[fnCuts];
854 fHistoMCAllGammaPt = new TH1F*[fnCuts];
855 fHistoMCAllGammaEMCALAccPt = new TH1F*[fnCuts];
856 fHistoMCDecayGammaPi0Pt = new TH1F*[fnCuts];
857 fHistoMCDecayGammaRhoPt = new TH1F*[fnCuts];
858 fHistoMCDecayGammaEtaPt = new TH1F*[fnCuts];
859 fHistoMCDecayGammaOmegaPt = new TH1F*[fnCuts];
860 fHistoMCDecayGammaEtapPt = new TH1F*[fnCuts];
861 fHistoMCDecayGammaPhiPt = new TH1F*[fnCuts];
862 fHistoMCDecayGammaSigmaPt = new TH1F*[fnCuts];
863 fHistoMCConvGammaPt = new TH1F*[fnCuts];
864 fHistoTrueConvGammaPt = new TH1F*[fnCuts];
865 fHistoTrueConvPi0GammaPt = new TH1F*[fnCuts];
867 fHistoCombinatorialPt = new TH2F*[fnCuts];
868 fHistoTruePrimaryConvGammaPt = new TH1F*[fnCuts];
869 fHistoTruePrimaryConvGammaESDPtMCPt = new TH2F*[fnCuts];
870 fHistoTrueSecondaryConvGammaPt = new TH1F*[fnCuts];
871 fHistoTrueSecondaryConvGammaFromXFromK0sPt = new TH1F*[fnCuts];
872 fHistoTrueSecondaryConvGammaFromXFromLambdaPt = new TH1F*[fnCuts];
874 fHistoTrueClusGammaPt = new TH1F*[fnCuts];
875 fHistoTruePrimaryClusGammaPt = new TH1F*[fnCuts];
876 fHistoTruePrimaryClusGammaESDPtMCPt = new TH2F*[fnCuts];
878 if (fDoPhotonQA > 0){
879 fHistoMCConvGammaR = new TH1F*[fnCuts];
880 fHistoMCConvGammaEta = new TH1F*[fnCuts];
881 fHistoTrueConvGammaEta = new TH1F*[fnCuts];
883 if (fDoClusterQA > 0){
884 fHistoTrueClusUnConvGammaPt = new TH1F*[fnCuts];
885 fHistoTrueClusUnConvGammaMCPt = new TH1F*[fnCuts];
886 fHistoTrueClusElectronPt = new TH1F*[fnCuts];
887 fHistoTrueClusConvGammaPt = new TH1F*[fnCuts];
888 fHistoTrueClusConvGammaMCPt = new TH1F*[fnCuts];
889 fHistoTrueClusConvGammaFullyPt = new TH1F*[fnCuts];
890 fHistoTrueClusMergedGammaPt = new TH1F*[fnCuts];
891 fHistoTrueClusMergedPartConvGammaPt = new TH1F*[fnCuts];
892 fHistoTrueClusDalitzPt = new TH1F*[fnCuts];
893 fHistoTrueClusDalitzMergedPt = new TH1F*[fnCuts];
894 fHistoTrueClusPhotonFromElecMotherPt= new TH1F*[fnCuts];
895 fHistoTrueClusShowerPt = new TH1F*[fnCuts];
896 fHistoTrueClusSubLeadingPt = new TH1F*[fnCuts];
897 fHistoTrueClusNParticles = new TH1I*[fnCuts];
898 fHistoTrueClusEMNonLeadingPt = new TH1F*[fnCuts];
899 fHistoTrueNLabelsInClus = new TH1F*[fnCuts];
902 if(fDoMesonAnalysis){
903 fHistoMCPi0Pt = new TH1F*[fnCuts];
904 fHistoMCPi0WOWeightPt = new TH1F*[fnCuts];
905 fHistoMCEtaPt = new TH1F*[fnCuts];
906 fHistoMCEtaWOWeightPt = new TH1F*[fnCuts];
907 fHistoMCPi0InAccPt = new TH1F*[fnCuts];
908 fHistoMCEtaInAccPt = new TH1F*[fnCuts];
910 fHistoTruePi0InvMassPt = new TH2F*[fnCuts];
911 fHistoTrueEtaInvMassPt = new TH2F*[fnCuts];
912 fHistoTruePrimaryPi0InvMassPt = new TH2F*[fnCuts];
913 fHistoTruePrimaryEtaInvMassPt = new TH2F*[fnCuts];
914 fHistoTruePrimaryPi0W0WeightingInvMassPt = new TH2F*[fnCuts];
915 fHistoTruePrimaryEtaW0WeightingInvMassPt = new TH2F*[fnCuts];
916 fProfileTruePrimaryPi0WeightsInvMassPt = new TProfile2D*[fnCuts];
917 fProfileTruePrimaryEtaWeightsInvMassPt = new TProfile2D*[fnCuts];
918 fHistoTrueSecondaryPi0InvMassPt = new TH2F*[fnCuts];
919 fHistoTrueSecondaryPi0FromK0sInvMassPt = new TH2F*[fnCuts];
920 fHistoTrueSecondaryPi0FromEtaInvMassPt = new TH2F*[fnCuts];
921 fHistoTrueSecondaryPi0FromLambdaInvMassPt = new TH2F*[fnCuts];
922 fHistoTruePrimaryPi0PhotonPairPtconv = new TH2F*[fnCuts];
923 fHistoTrueSecondaryPi0PhotonPairPtconv = new TH2F*[fnCuts];
924 fHistoTruePrimaryEtaPhotonPairPtconv = new TH2F*[fnCuts];
925 fHistoTruePrimaryPi0DCPtconv = new TH1F*[fnCuts];
926 fHistoTrueSecondaryPi0DCPtconv = new TH1F*[fnCuts];
927 fHistoTruePrimaryEtaDCPtconv = new TH1F*[fnCuts];
928 fHistoTruePrimaryPi0MissingPtconv = new TH1F*[fnCuts];
929 fHistoTrueSecondaryPi0MissingPtconv = new TH1F*[fnCuts];
930 fHistoTruePrimaryEtaMissingPtconv = new TH1F*[fnCuts];
931 fStringRecTruePi0s = new TString[fnCuts];
932 fStringRecTrueEtas = new TString[fnCuts];
935 fHistoMCPi0PtY = new TH2F*[fnCuts];
936 fHistoMCEtaPtY = new TH2F*[fnCuts];
937 fHistoMCPi0PtAlpha = new TH2F*[fnCuts];
938 fHistoMCEtaPtAlpha = new TH2F*[fnCuts];
939 fHistoMCK0sPt = new TH1F*[fnCuts];
940 fHistoMCK0sWOWeightPt = new TH1F*[fnCuts];
941 fHistoMCK0sPtY = new TH2F*[fnCuts];
942 fHistoMCSecPi0PtvsSource = new TH2F*[fnCuts];
943 fHistoMCSecPi0Source = new TH1F*[fnCuts];
944 fHistoMCSecEtaPt = new TH1F*[fnCuts];
945 fHistoMCSecEtaSource = new TH1F*[fnCuts];
946 fHistoTruePi0CaloPhotonInvMassPt = new TH2F*[fnCuts];
947 fHistoTrueEtaCaloPhotonInvMassPt = new TH2F*[fnCuts];
948 fHistoTruePi0CaloConvertedPhotonInvMassPt = new TH2F*[fnCuts];
949 fHistoTruePi0CaloConvertedPhotonMatchedInvMassPt = new TH2F*[fnCuts];
950 fHistoTrueEtaCaloConvertedPhotonInvMassPt = new TH2F*[fnCuts];
951 fHistoTrueEtaCaloConvertedPhotonMatchedInvMassPt = new TH2F*[fnCuts];
952 fHistoTruePi0CaloElectronInvMassPt = new TH2F*[fnCuts];
953 fHistoTrueEtaCaloElectronInvMassPt = new TH2F*[fnCuts];
954 fHistoTruePi0CaloMergedClusterInvMassPt = new TH2F*[fnCuts];
955 fHistoTrueEtaCaloMergedClusterInvMassPt = new TH2F*[fnCuts];
956 fHistoTruePi0CaloMergedClusterPartConvInvMassPt = new TH2F*[fnCuts];
957 fHistoTrueEtaCaloMergedClusterPartConvInvMassPt = new TH2F*[fnCuts];
958 fHistoTrueMotherCaloEMNonLeadingInvMassPt = new TH2F*[fnCuts];
959 fHistoTruePrimaryPi0MCPtResolPt = new TH2F*[fnCuts];
960 fHistoTruePrimaryEtaMCPtResolPt = new TH2F*[fnCuts];
961 fHistoTrueK0sWithPi0DaughterMCPt = new TH1F*[fnCuts];
962 fHistoTrueEtaWithPi0DaughterMCPt = new TH1F*[fnCuts];
963 fHistoTrueLambdaWithPi0DaughterMCPt = new TH1F*[fnCuts];
964 fHistoTrueBckGGInvMassPt = new TH2F*[fnCuts];
965 fHistoTrueBckContInvMassPt = new TH2F*[fnCuts];
966 fHistoTruePi0PtY = new TH2F*[fnCuts];
967 fHistoTrueEtaPtY = new TH2F*[fnCuts];
968 fHistoTruePi0PtAlpha = new TH2F*[fnCuts];
969 fHistoTrueEtaPtAlpha = new TH2F*[fnCuts];
970 fHistoTruePi0PtOpenAngle = new TH2F*[fnCuts];
971 fHistoTrueEtaPtOpenAngle = new TH2F*[fnCuts];
972 fHistoTrueMotherPi0ConvPhotonEtaPhi = new TH2F*[fnCuts];
973 fHistoTrueMotherEtaConvPhotonEtaPhi = new TH2F*[fnCuts];
977 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
978 TString cutstringEvent = ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber();
979 TString cutstringPhoton = ((AliConversionPhotonCuts*)fCutArray->At(iCut))->GetCutNumber();
980 TString cutstringCalo = ((AliCaloPhotonCuts*)fClusterCutArray->At(iCut))->GetCutNumber();
981 TString cutstringMeson = "NoMesonCut";
982 if(fDoMesonAnalysis)cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
984 fMCList[iCut] = new TList();
985 fMCList[iCut]->SetName(Form("%s_%s_%s_%s MC histograms",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
986 fMCList[iCut]->SetOwner(kTRUE);
987 fCutFolder[iCut]->Add(fMCList[iCut]);
988 fHistoMCHeaders[iCut] = new TH1I("MC_Headers","MC_Headers",20,0,20);
989 fMCList[iCut]->Add(fHistoMCHeaders[iCut]);
990 fHistoMCAllGammaPt[iCut] = new TH1F("MC_AllGamma_Pt","MC_AllGamma_Pt",250,0,25);
991 fMCList[iCut]->Add(fHistoMCAllGammaPt[iCut]);
992 fHistoMCAllGammaEMCALAccPt[iCut] = new TH1F("MC_AllGammaEMCALAcc_Pt","MC_AllGammaEMCALAcc_Pt",250,0,25);
993 fMCList[iCut]->Add(fHistoMCAllGammaEMCALAccPt[iCut]);
994 fHistoMCDecayGammaPi0Pt[iCut] = new TH1F("MC_DecayGammaPi0_Pt","MC_DecayGammaPi0_Pt",250,0,25);
995 fMCList[iCut]->Add(fHistoMCDecayGammaPi0Pt[iCut]);
996 fHistoMCDecayGammaRhoPt[iCut] = new TH1F("MC_DecayGammaRho_Pt","MC_DecayGammaRho_Pt",250,0,25);
997 fMCList[iCut]->Add(fHistoMCDecayGammaRhoPt[iCut]);
998 fHistoMCDecayGammaEtaPt[iCut] = new TH1F("MC_DecayGammaEta_Pt","MC_DecayGammaEta_Pt",250,0,25);
999 fMCList[iCut]->Add(fHistoMCDecayGammaEtaPt[iCut]);
1000 fHistoMCDecayGammaOmegaPt[iCut] = new TH1F("MC_DecayGammaOmega_Pt","MC_DecayGammaOmmega_Pt",250,0,25);
1001 fMCList[iCut]->Add(fHistoMCDecayGammaOmegaPt[iCut]);
1002 fHistoMCDecayGammaEtapPt[iCut] = new TH1F("MC_DecayGammaEtap_Pt","MC_DecayGammaEtap_Pt",250,0,25);
1003 fMCList[iCut]->Add(fHistoMCDecayGammaEtapPt[iCut]);
1004 fHistoMCDecayGammaPhiPt[iCut] = new TH1F("MC_DecayGammaPhi_Pt","MC_DecayGammaPhi_Pt",250,0,25);
1005 fMCList[iCut]->Add(fHistoMCDecayGammaPhiPt[iCut]);
1006 fHistoMCDecayGammaSigmaPt[iCut] = new TH1F("MC_DecayGammaSigma_Pt","MC_DecayGammaSigma_Pt",250,0,25);
1007 fMCList[iCut]->Add(fHistoMCDecayGammaSigmaPt[iCut]);
1008 fHistoMCConvGammaPt[iCut] = new TH1F("MC_ConvGamma_Pt","MC_ConvGamma_Pt",250,0,25);
1009 fMCList[iCut]->Add(fHistoMCConvGammaPt[iCut]);
1011 if (fDoPhotonQA > 0){
1012 fHistoMCConvGammaR[iCut] = new TH1F("MC_ConvGamma_R","MC_ConvGamma_R",800,0,200);
1013 fMCList[iCut]->Add(fHistoMCConvGammaR[iCut]);
1014 fHistoMCConvGammaEta[iCut] = new TH1F("MC_ConvGamma_Eta","MC_ConvGamma_Eta",2000,-2,2);
1015 fMCList[iCut]->Add(fHistoMCConvGammaEta[iCut]);
1018 if(fDoMesonAnalysis){
1019 fHistoMCPi0Pt[iCut] = new TH1F("MC_Pi0_Pt","MC_Pi0_Pt",250,0,25);
1020 fHistoMCPi0Pt[iCut]->Sumw2();
1021 fMCList[iCut]->Add(fHistoMCPi0Pt[iCut]);
1022 fHistoMCPi0WOWeightPt[iCut] = new TH1F("MC_Pi0_WOWeights_Pt","MC_Pi0_WOWeights_Pt",250,0,25);
1023 fHistoMCPi0WOWeightPt[iCut]->Sumw2();
1024 fMCList[iCut]->Add(fHistoMCPi0WOWeightPt[iCut]);
1026 fHistoMCEtaPt[iCut] = new TH1F("MC_Eta_Pt","MC_Eta_Pt",250,0,25);
1027 fHistoMCEtaPt[iCut]->Sumw2();
1028 fMCList[iCut]->Add(fHistoMCEtaPt[iCut]);
1029 fHistoMCEtaWOWeightPt[iCut] = new TH1F("MC_Eta_WOWeights_Pt","MC_Eta_WOWeights_Pt",250,0,25);
1030 fHistoMCEtaWOWeightPt[iCut]->Sumw2();
1031 fMCList[iCut]->Add(fHistoMCEtaWOWeightPt[iCut]);
1032 fHistoMCPi0InAccPt[iCut] = new TH1F("MC_Pi0InAcc_Pt","MC_Pi0InAcc_Pt",250,0,25);
1033 fHistoMCPi0InAccPt[iCut]->Sumw2();
1034 fMCList[iCut]->Add(fHistoMCPi0InAccPt[iCut]);
1035 fHistoMCEtaInAccPt[iCut] = new TH1F("MC_EtaInAcc_Pt","MC_EtaInAcc_Pt",250,0,25);
1036 fHistoMCEtaInAccPt[iCut]->Sumw2();
1037 fMCList[iCut]->Add(fHistoMCEtaInAccPt[iCut]);
1038 if (fDoMesonQA > 0){
1039 fHistoMCPi0PtY[iCut] = new TH2F("MC_Pi0_Pt_Y","MC_Pi0_Pt_Y",150,0.03,15.,150,-1.5,1.5);
1040 fHistoMCPi0PtY[iCut]->Sumw2();
1041 SetLogBinningXTH2(fHistoMCPi0PtY[iCut]);
1042 fMCList[iCut]->Add(fHistoMCPi0PtY[iCut]);
1043 fHistoMCEtaPtY[iCut] = new TH2F("MC_Eta_Pt_Y","MC_Eta_Pt_Y",150,0.03,15.,150,-1.5,1.5);
1044 fHistoMCEtaPtY[iCut]->Sumw2();
1045 SetLogBinningXTH2(fHistoMCEtaPtY[iCut]);
1046 fMCList[iCut]->Add(fHistoMCEtaPtY[iCut]);
1047 fHistoMCPi0PtAlpha[iCut] = new TH2F("MC_Pi0_Pt_Alpha","MC_Pi0_Pt_Alpha",150,0.03,15.,100,0,1);
1048 SetLogBinningXTH2(fHistoMCPi0PtAlpha[iCut]);
1049 fMCList[iCut]->Add(fHistoMCPi0PtAlpha[iCut]);
1050 fHistoMCEtaPtAlpha[iCut] = new TH2F("MC_Eta_Pt_Alpha","MC_Eta_Pt_Alpha",150,0.03,15.,100,0,1);
1051 SetLogBinningXTH2(fHistoMCEtaPtAlpha[iCut]);
1052 fMCList[iCut]->Add(fHistoMCEtaPtAlpha[iCut]);
1054 fHistoMCK0sPt[iCut] = new TH1F("MC_K0s_Pt","MC_K0s_Pt",150,0,15);
1055 fHistoMCK0sPt[iCut]->Sumw2();
1056 fMCList[iCut]->Add(fHistoMCK0sPt[iCut]);
1057 fHistoMCK0sWOWeightPt[iCut] = new TH1F("MC_K0s_WOWeights_Pt","MC_K0s_WOWeights_Pt",150,0,15);
1058 fHistoMCK0sWOWeightPt[iCut]->Sumw2();
1059 fMCList[iCut]->Add(fHistoMCK0sWOWeightPt[iCut]);
1060 fHistoMCK0sPtY[iCut] = new TH2F("MC_K0s_Pt_Y","MC_K0s_Pt_Y",150,0.03,15.,150,-1.5,1.5);
1061 fHistoMCK0sPtY[iCut]->Sumw2();
1062 SetLogBinningXTH2(fHistoMCK0sPtY[iCut]);
1063 fMCList[iCut]->Add(fHistoMCK0sPtY[iCut]);
1065 fHistoMCSecPi0Source[iCut] = new TH1F("MC_SecPi0_Source","MC_SecPi0_Source",5000,0.,5000);
1066 fMCList[iCut]->Add(fHistoMCSecPi0Source[iCut]);
1067 fHistoMCSecEtaSource[iCut] = new TH1F("MC_SecEta_Source","MC_SecEta_Source",5000,0,5000);
1068 fMCList[iCut]->Add(fHistoMCSecEtaSource[iCut]);
1069 fHistoMCSecPi0PtvsSource[iCut] = new TH2F("MC_SecPi0_Pt_Source","MC_SecPi0_Pt_Source",250,0.0,25.,16,-0.5,15.5);
1070 fHistoMCSecPi0PtvsSource[iCut]->Sumw2();
1071 fMCList[iCut]->Add(fHistoMCSecPi0PtvsSource[iCut]);
1072 fHistoMCSecEtaPt[iCut] = new TH1F("MC_SecEta_Pt","MC_SecEta_Pt",250,0,25);
1073 fHistoMCSecEtaPt[iCut]->Sumw2();
1074 fMCList[iCut]->Add(fHistoMCSecEtaPt[iCut]);
1078 fTrueList[iCut] = new TList();
1079 fTrueList[iCut]->SetName(Form("%s_%s_%s_%s True histograms",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
1080 fTrueList[iCut]->SetOwner(kTRUE);
1081 fCutFolder[iCut]->Add(fTrueList[iCut]);
1083 fHistoTrueConvGammaPt[iCut] = new TH1F("ESD_TrueConvGamma_Pt","ESD_TrueConvGamma_Pt",250,0,25);
1084 fTrueList[iCut]->Add(fHistoTrueConvGammaPt[iCut]);
1086 fHistoTrueConvPi0GammaPt[iCut] = new TH1F("ESD_TrueConvPi0Gamma_Pt","ESD_TrueConvPi0Gamma_Pt",250,0,25);
1087 fTrueList[iCut]->Add(fHistoTrueConvPi0GammaPt[iCut]);
1089 fHistoCombinatorialPt[iCut] = new TH2F("ESD_TrueCombinatorial_Pt","ESD_TrueCombinatorial_Pt",250,0,25,16,-0.5,15.5);
1090 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 1,"Elec+Elec");
1091 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 2,"Elec+Pion");
1092 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 3,"Elec+Kaon");
1093 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 4,"Elec+Proton");
1094 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 5,"Elec+Muon");
1095 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 6,"Pion+Pion");
1096 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 7,"Pion+Kaon");
1097 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 8,"Pion+Proton");
1098 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 9,"Pion+Muon");
1099 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(10,"Kaon+Kaon");
1100 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(11,"Kaon+Proton");
1101 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(12,"Kaon+Muon");
1102 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(13,"Proton+Proton");
1103 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(14,"Proton+Muon");
1104 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(15,"Muon+Muon");
1105 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(16,"Rest");
1106 fTrueList[iCut]->Add(fHistoCombinatorialPt[iCut]);
1107 fHistoTruePrimaryConvGammaPt[iCut] = new TH1F("ESD_TruePrimaryConvGamma_Pt","ESD_TruePrimaryConvGamma_Pt",250,0,25);
1108 fTrueList[iCut]->Add(fHistoTruePrimaryConvGammaPt[iCut]);
1109 fHistoTrueSecondaryConvGammaPt[iCut] = new TH1F("ESD_TrueSecondaryConvGamma_Pt","ESD_TrueSecondaryConvGamma_Pt",250,0,25);
1110 fTrueList[iCut]->Add(fHistoTrueSecondaryConvGammaPt[iCut]);
1112 fHistoTrueSecondaryConvGammaFromXFromK0sPt[iCut] = new TH1F("ESD_TrueSecondaryConvGammaFromXFromK0s_Pt", "ESD_TrueSecondaryConvGammaFromXFromK0s_Pt",250,0,25);
1113 fTrueList[iCut]->Add(fHistoTrueSecondaryConvGammaFromXFromK0sPt[iCut]);
1114 fHistoTrueSecondaryConvGammaFromXFromLambdaPt[iCut] = new TH1F("ESD_TrueSecondaryConvGammaFromXFromLambda_Pt", "ESD_TrueSecondaryConvGammaFromXFromLambda_Pt",250,0,25);
1115 fTrueList[iCut]->Add(fHistoTrueSecondaryConvGammaFromXFromLambdaPt[iCut]);
1117 fHistoTruePrimaryConvGammaESDPtMCPt[iCut] = new TH2F("ESD_TruePrimaryConvGammaESD_PtMCPt", "ESD_TruePrimaryConvGammaESD_PtMCPt",250,0,25,250,0,25);
1118 fTrueList[iCut]->Add(fHistoTruePrimaryConvGammaESDPtMCPt[iCut]);
1120 fHistoTrueClusGammaPt[iCut] = new TH1F("TrueClusGamma_Pt","ESD_TrueClusGamma_Pt",250,0,25);
1121 fClusterOutputList[iCut]->Add(fHistoTrueClusGammaPt[iCut]);
1122 fHistoTruePrimaryClusGammaPt[iCut] = new TH1F("TruePrimaryClusGamma_Pt","ESD_TruePrimaryClusGamma_Pt",250,0,25);
1123 fClusterOutputList[iCut]->Add(fHistoTruePrimaryClusGammaPt[iCut]);
1124 fHistoTruePrimaryClusGammaESDPtMCPt[iCut] = new TH2F("TruePrimaryClusGamma_Pt_MCPt","ESD_TruePrimaryClusGamma_MCPt",250,0,25,250,0,25);
1125 fClusterOutputList[iCut]->Add(fHistoTruePrimaryClusGammaESDPtMCPt[iCut]);
1127 if (fDoPhotonQA > 0){
1128 fHistoTrueConvGammaEta[iCut] = new TH1F("ESD_TrueConvGamma_Eta","ESD_TrueConvGamma_Eta",2000,-2,2);
1129 fTrueList[iCut]->Add(fHistoTrueConvGammaEta[iCut]);
1131 if (fDoClusterQA > 0){
1132 fHistoTrueClusUnConvGammaPt[iCut] = new TH1F("TrueClusUnConvGamma_Pt","TrueClusUnConvGamma_Pt",250,0,25);
1133 fClusterOutputList[iCut]->Add(fHistoTrueClusUnConvGammaPt[iCut]);
1134 fHistoTrueClusUnConvGammaMCPt[iCut] = new TH1F("TrueClusUnConvGamma_MCPt","TrueClusUnConvGamma_MCPt",250,0,25);
1135 fClusterOutputList[iCut]->Add(fHistoTrueClusUnConvGammaMCPt[iCut]);
1136 fHistoTrueClusElectronPt[iCut] = new TH1F("TrueClusElectron_Pt","TrueElectronGamma_Pt",250,0,25);
1137 fClusterOutputList[iCut]->Add(fHistoTrueClusElectronPt[iCut]);
1138 fHistoTrueClusConvGammaPt[iCut] = new TH1F("TrueClusConvGamma_Pt","TrueClusConvGamma_Pt",250,0,25);
1139 fClusterOutputList[iCut]->Add(fHistoTrueClusConvGammaPt[iCut]);
1140 fHistoTrueClusConvGammaMCPt[iCut] = new TH1F("TrueClusConvGamma_MCPt","TrueClusConvGamma_MCPt",250,0,25);
1141 fClusterOutputList[iCut]->Add(fHistoTrueClusConvGammaMCPt[iCut]);
1142 fHistoTrueClusConvGammaFullyPt[iCut] = new TH1F("TrueClusConvGammaFullyContained_Pt","TrueClusConvGammaFullyContained_Pt",250,0,25);
1143 fClusterOutputList[iCut]->Add(fHistoTrueClusConvGammaFullyPt[iCut]);
1144 fHistoTrueClusMergedGammaPt[iCut] = new TH1F("TrueClusMergedGamma_Pt","TrueClusMergedGamma_Pt",250,0,25);
1145 fClusterOutputList[iCut]->Add(fHistoTrueClusMergedGammaPt[iCut]);
1146 fHistoTrueClusMergedPartConvGammaPt[iCut] = new TH1F("TrueClusMergedPartConvGamma_Pt","TrueClusMergedPartConvGamma_Pt",250,0,25);
1147 fClusterOutputList[iCut]->Add(fHistoTrueClusMergedPartConvGammaPt[iCut]);
1148 fHistoTrueClusDalitzPt[iCut] = new TH1F("TrueClusDalitz_Pt","TrueClusDalitz_Pt",250,0,25);
1149 fClusterOutputList[iCut]->Add(fHistoTrueClusDalitzPt[iCut]);
1150 fHistoTrueClusDalitzMergedPt[iCut] = new TH1F("TrueClusDalitzMerged_Pt","TrueClusDalitzMerged_Pt",250,0,25);
1151 fClusterOutputList[iCut]->Add(fHistoTrueClusDalitzMergedPt[iCut]);
1152 fHistoTrueClusPhotonFromElecMotherPt[iCut] = new TH1F("TrueClusPhotonFromElecMother_Pt","TrueClusPhotonFromElecMother_Pt",250,0,25);
1153 fClusterOutputList[iCut]->Add(fHistoTrueClusPhotonFromElecMotherPt[iCut]);
1154 fHistoTrueClusShowerPt[iCut] = new TH1F("TrueClusShower_Pt","TrueClusShower_Pt",250,0,25);
1155 fClusterOutputList[iCut]->Add(fHistoTrueClusShowerPt[iCut]);
1156 fHistoTrueClusSubLeadingPt[iCut] = new TH1F("TrueClusSubleading_Pt","TrueClusSubleading_Pt",250,0,25);
1157 fClusterOutputList[iCut]->Add(fHistoTrueClusSubLeadingPt[iCut]);
1158 fHistoTrueClusNParticles[iCut] = new TH1I("TrueClusNParticles","TrueClusNParticles",20,0,20);
1159 fClusterOutputList[iCut]->Add(fHistoTrueClusNParticles[iCut]);
1160 fHistoTrueClusEMNonLeadingPt[iCut] = new TH1F("TrueClusEMNonLeading_Pt","TrueClusEMNonLeading_Pt",250,0,25);
1161 fClusterOutputList[iCut]->Add(fHistoTrueClusEMNonLeadingPt[iCut]);
1162 fHistoTrueNLabelsInClus[iCut] = new TH1F("TrueNLabelsInClus","TrueNLabelsInClus",100,-0.5,99.5);
1163 fClusterOutputList[iCut]->Add(fHistoTrueNLabelsInClus[iCut]);
1166 if(fDoMesonAnalysis){
1167 fHistoTruePi0InvMassPt[iCut] = new TH2F("ESD_TruePi0_InvMass_Pt","ESD_TruePi0_InvMass_Pt",800,0,0.8,250,0,25);
1168 fHistoTruePi0InvMassPt[iCut]->SetXTitle("M_{inv,#pi^{0}} (GeV/c^{2})");
1169 fHistoTruePi0InvMassPt[iCut]->SetYTitle("#pi^{0} p_{T} (GeV/c)");
1170 fTrueList[iCut]->Add(fHistoTruePi0InvMassPt[iCut]);
1171 fHistoTrueEtaInvMassPt[iCut] = new TH2F("ESD_TrueEta_InvMass_Pt","ESD_TrueEta_InvMass_Pt",800,0,0.8,250,0,25);
1172 fHistoTruePi0InvMassPt[iCut]->SetXTitle("M_{inv,#eta} (GeV/c^{2})");
1173 fHistoTruePi0InvMassPt[iCut]->SetYTitle("#eta p_{T} (GeV/c)");
1174 fTrueList[iCut]->Add(fHistoTrueEtaInvMassPt[iCut]);
1176 fHistoTruePrimaryPi0InvMassPt[iCut] = new TH2F("ESD_TruePrimaryPi0_InvMass_Pt", "ESD_TruePrimaryPi0_InvMass_Pt", 800,0,0.8,250,0,25);
1177 fHistoTruePrimaryPi0InvMassPt[iCut]->SetXTitle("M_{inv,prim #pi^{0}} (GeV/c^{2})");
1178 fHistoTruePrimaryPi0InvMassPt[iCut]->SetYTitle("#pi^{0} p_{T} (GeV/c)");
1179 fHistoTruePrimaryPi0InvMassPt[iCut]->Sumw2();
1180 fTrueList[iCut]->Add(fHistoTruePrimaryPi0InvMassPt[iCut]);
1182 fHistoTruePrimaryEtaInvMassPt[iCut] = new TH2F("ESD_TruePrimaryEta_InvMass_Pt", "ESD_TruePrimaryEta_InvMass_Pt", 800,0,0.8,250,0,25);
1183 fHistoTruePrimaryEtaInvMassPt[iCut]->SetXTitle("M_{inv,prim #eta} (GeV/c^{2})");
1184 fHistoTruePrimaryEtaInvMassPt[iCut]->SetYTitle("#eta p_{T} (GeV/c)");
1185 fHistoTruePrimaryEtaInvMassPt[iCut]->Sumw2();
1186 fTrueList[iCut]->Add(fHistoTruePrimaryEtaInvMassPt[iCut]);
1188 fHistoTruePrimaryPi0W0WeightingInvMassPt[iCut] = new TH2F("ESD_TruePrimaryPi0W0Weights_InvMass_Pt", "ESD_TruePrimaryPi0W0Weights_InvMass_Pt", 800,0,0.8,250,0,25);
1189 fHistoTruePrimaryPi0W0WeightingInvMassPt[iCut]->SetXTitle("M_{inv,prim #pi^{0}} (GeV/c^{2})");
1190 fHistoTruePrimaryPi0W0WeightingInvMassPt[iCut]->SetYTitle("#pi^{0} p_{T} (GeV/c)");
1191 fTrueList[iCut]->Add(fHistoTruePrimaryPi0W0WeightingInvMassPt[iCut]);
1193 fHistoTruePrimaryEtaW0WeightingInvMassPt[iCut] = new TH2F("ESD_TruePrimaryEtaW0Weights_InvMass_Pt", "ESD_TruePrimaryEtaW0Weights_InvMass_Pt", 800,0,0.8,250,0,25);
1194 fHistoTruePrimaryEtaW0WeightingInvMassPt[iCut]->SetXTitle("M_{inv,prim #eta} (GeV/c^{2})");
1195 fHistoTruePrimaryEtaW0WeightingInvMassPt[iCut]->SetYTitle("#eta p_{T} (GeV/c)");
1196 fTrueList[iCut]->Add(fHistoTruePrimaryEtaW0WeightingInvMassPt[iCut]);
1198 fProfileTruePrimaryPi0WeightsInvMassPt[iCut] = new TProfile2D("ESD_TruePrimaryPi0Weights_InvMass_Pt", "ESD_TruePrimaryPi0Weights_InvMass_Pt", 800,0,0.8,250,0,25);
1199 fProfileTruePrimaryPi0WeightsInvMassPt[iCut]->SetXTitle("M_{inv,prim #pi^{0}} (GeV/c^{2})");
1200 fProfileTruePrimaryPi0WeightsInvMassPt[iCut]->SetYTitle("#pi^{0} p_{T} (GeV/c)");
1201 fProfileTruePrimaryPi0WeightsInvMassPt[iCut]->Sumw2();
1202 fTrueList[iCut]->Add(fProfileTruePrimaryPi0WeightsInvMassPt[iCut]);
1203 fProfileTruePrimaryEtaWeightsInvMassPt[iCut] = new TProfile2D("ESD_TruePrimaryEtaWeights_InvMass_Pt", "ESD_TruePrimaryEtaWeights_InvMass_Pt", 800,0,0.8,250,0,25);
1204 fProfileTruePrimaryEtaWeightsInvMassPt[iCut]->SetXTitle("M_{inv,prim #eta} (GeV/c^{2})");
1205 fProfileTruePrimaryEtaWeightsInvMassPt[iCut]->SetYTitle("#eta p_{T} (GeV/c)");
1206 fProfileTruePrimaryEtaWeightsInvMassPt[iCut]->Sumw2();
1207 fTrueList[iCut]->Add(fProfileTruePrimaryEtaWeightsInvMassPt[iCut]);
1209 fHistoTrueSecondaryPi0InvMassPt[iCut] = new TH2F("ESD_TrueSecondaryPi0_InvMass_Pt", "ESD_TrueSecondaryPi0_InvMass_Pt", 800,0,0.8,250,0,25);
1210 fHistoTrueSecondaryPi0InvMassPt[iCut]->SetXTitle("M_{inv,sec #pi^{0}} (GeV/c^{2})");
1211 fHistoTrueSecondaryPi0InvMassPt[iCut]->SetYTitle("#pi^{0} p_{T} (GeV/c)");
1212 fHistoTrueSecondaryPi0InvMassPt[iCut]->Sumw2();
1213 fTrueList[iCut]->Add(fHistoTrueSecondaryPi0InvMassPt[iCut]);
1215 fHistoTrueSecondaryPi0FromK0sInvMassPt[iCut] = new TH2F("ESD_TrueSecondaryPi0FromK0s_InvMass_Pt","ESD_TrueSecondaryPi0FromK0s_InvMass_Pt",800,0,0.8,250,0,25);
1216 fHistoTrueSecondaryPi0FromK0sInvMassPt[iCut]->SetXTitle("M_{inv,#pi^{0} from K^{0}_{S}} (GeV/c^{2})");
1217 fHistoTrueSecondaryPi0FromK0sInvMassPt[iCut]->SetYTitle("#pi^{0} p_{T} (GeV/c)");
1218 fHistoTrueSecondaryPi0FromK0sInvMassPt[iCut]->Sumw2();
1219 fTrueList[iCut]->Add(fHistoTrueSecondaryPi0FromK0sInvMassPt[iCut]);
1220 fHistoTrueSecondaryPi0FromEtaInvMassPt[iCut] = new TH2F("ESD_TrueSecondaryPi0FromEta_InvMass_Pt","ESD_TrueSecondaryPi0FromEta_InvMass_Pt",800,0,0.8,250,0,25);
1221 fHistoTrueSecondaryPi0FromEtaInvMassPt[iCut]->SetXTitle("M_{inv,#pi^{0} from #eta} (GeV/c^{2})");
1222 fHistoTrueSecondaryPi0FromEtaInvMassPt[iCut]->SetYTitle("#pi^{0} p_{T} (GeV/c)");
1223 fTrueList[iCut]->Add(fHistoTrueSecondaryPi0FromEtaInvMassPt[iCut]);
1224 fHistoTrueSecondaryPi0FromLambdaInvMassPt[iCut] = new TH2F("ESD_TrueSecondaryPi0FromLambda_InvMass_Pt","ESD_TrueSecondaryPi0FromLambda_InvMass_Pt",800,0,0.8,250,0,25);
1225 fHistoTrueSecondaryPi0FromLambdaInvMassPt[iCut]->SetXTitle("M_{inv,#pi^{0} from #Lambda} (GeV/c^{2})");
1226 fHistoTrueSecondaryPi0FromLambdaInvMassPt[iCut]->SetYTitle("#pi^{0} p_{T} (GeV/c)");
1227 fTrueList[iCut]->Add(fHistoTrueSecondaryPi0FromLambdaInvMassPt[iCut]);
1229 fHistoTruePrimaryPi0PhotonPairPtconv[iCut] = new TH2F("ESD_TruePrimaryPi0_InvMass_PtConv","",800,0,0.8,250,0,25);
1230 fHistoTruePrimaryPi0PhotonPairPtconv[iCut]->SetXTitle("M_{inv,#pi^{0}} (GeV/c^{2})");
1231 fHistoTruePrimaryPi0PhotonPairPtconv[iCut]->SetYTitle("#gamma^{conv} p_{T} (GeV/c)");
1232 fHistoTruePrimaryPi0PhotonPairPtconv[iCut]->Sumw2();
1233 fTrueList[iCut]->Add(fHistoTruePrimaryPi0PhotonPairPtconv[iCut]);
1235 fHistoTrueSecondaryPi0PhotonPairPtconv[iCut] = new TH2F("ESD_TrueSecondaryPi0_InvMass_PtConv","",800,0,0.8,250,0,25);
1236 fHistoTrueSecondaryPi0PhotonPairPtconv[iCut]->SetXTitle("M_{inv,#pi^{0}} (GeV/c^{2})");
1237 fHistoTrueSecondaryPi0PhotonPairPtconv[iCut]->SetYTitle("#gamma^{conv} p_{T} (GeV/c)");
1238 fHistoTrueSecondaryPi0PhotonPairPtconv[iCut]->Sumw2();
1239 fTrueList[iCut]->Add(fHistoTrueSecondaryPi0PhotonPairPtconv[iCut]);
1241 fHistoTruePrimaryEtaPhotonPairPtconv[iCut] = new TH2F("ESD_TruePrimaryEta_InvMass_PtConv","",800,0,0.8,250,0,25);
1242 fHistoTruePrimaryEtaPhotonPairPtconv[iCut]->SetXTitle("M_{inv,#eta} (GeV/c^{2})");
1243 fHistoTruePrimaryEtaPhotonPairPtconv[iCut]->SetYTitle("#gamma^{conv} p_{T} (GeV/c)");
1244 fHistoTruePrimaryEtaPhotonPairPtconv[iCut]->Sumw2();
1245 fTrueList[iCut]->Add(fHistoTruePrimaryEtaPhotonPairPtconv[iCut]);
1247 fHistoTruePrimaryPi0DCPtconv[iCut] = new TH1F("ESD_TruePrimaryPi0DC_PtConv","",250,0,25);
1248 fHistoTruePrimaryPi0DCPtconv[iCut]->SetXTitle("#gamma^{conv} p_{T} (GeV/c)");
1249 fHistoTruePrimaryPi0DCPtconv[iCut]->Sumw2();
1250 fTrueList[iCut]->Add(fHistoTruePrimaryPi0DCPtconv[iCut]);
1252 fHistoTrueSecondaryPi0DCPtconv[iCut] = new TH1F("ESD_TrueSecondaryPi0DC_PtConv","",250,0,25);
1253 fHistoTrueSecondaryPi0DCPtconv[iCut]->SetXTitle("#gamma^{conv} p_{T} (GeV/c)");
1254 fHistoTrueSecondaryPi0DCPtconv[iCut]->Sumw2();
1255 fTrueList[iCut]->Add(fHistoTrueSecondaryPi0DCPtconv[iCut]);
1257 fHistoTruePrimaryEtaDCPtconv[iCut] = new TH1F("ESD_TruePrimaryEtaDC_PtConv","",250,0,25);
1258 fHistoTruePrimaryEtaDCPtconv[iCut]->SetXTitle("#gamma^{conv} p_{T} (GeV/c)");
1259 fHistoTruePrimaryEtaDCPtconv[iCut]->Sumw2();
1260 fTrueList[iCut]->Add(fHistoTruePrimaryEtaDCPtconv[iCut]);
1262 fHistoTruePrimaryPi0MissingPtconv[iCut] = new TH1F("ESD_TruePrimaryPi0Missing_PtConv","",250,0,25);
1263 fHistoTruePrimaryPi0MissingPtconv[iCut]->SetXTitle("#gamma^{conv} p_{T} (GeV/c)");
1264 fHistoTruePrimaryPi0MissingPtconv[iCut]->Sumw2();
1265 fTrueList[iCut]->Add(fHistoTruePrimaryPi0MissingPtconv[iCut]);
1267 fHistoTrueSecondaryPi0MissingPtconv[iCut] = new TH1F("ESD_TrueSecondaryPi0Missing_PtConv","",250,0,25);
1268 fHistoTrueSecondaryPi0MissingPtconv[iCut]->SetXTitle("#gamma^{conv} p_{T} (GeV/c)");
1269 fHistoTrueSecondaryPi0MissingPtconv[iCut]->Sumw2();
1270 fTrueList[iCut]->Add(fHistoTrueSecondaryPi0MissingPtconv[iCut]);
1272 fHistoTruePrimaryEtaMissingPtconv[iCut] = new TH1F("ESD_TruePrimaryEtaMissing_PtConv","",250,0,25);
1273 fHistoTruePrimaryEtaMissingPtconv[iCut]->SetXTitle("#gamma^{conv} p_{T} (GeV/c)");
1274 fHistoTruePrimaryEtaMissingPtconv[iCut]->Sumw2();
1275 fTrueList[iCut]->Add(fHistoTruePrimaryEtaMissingPtconv[iCut]);
1277 if (fDoMesonQA > 0){
1278 fHistoTruePi0CaloPhotonInvMassPt[iCut] = new TH2F("ESD_TruePi0CaloPhoton_InvMass_Pt","ESD_TruePi0CaloPhoton_InvMass_Pt",800,0,0.8,250,0,25);
1279 fHistoTruePi0CaloPhotonInvMassPt[iCut]->SetXTitle("M_{inv,#pi^{0}} (GeV/c^{2}) #gamma #gamma");
1280 fHistoTruePi0CaloPhotonInvMassPt[iCut]->SetYTitle("#pi^{0} p_{T} (GeV/c)");
1281 fTrueList[iCut]->Add(fHistoTruePi0CaloPhotonInvMassPt[iCut]);
1283 fHistoTrueEtaCaloPhotonInvMassPt[iCut] = new TH2F("ESD_TrueEtaCaloPhoton_InvMass_Pt","ESD_TrueEtaCaloPhoton_InvMass_Pt",800,0,0.8,250,0,25);
1284 fHistoTrueEtaCaloPhotonInvMassPt[iCut]->SetXTitle("M_{inv,#eta} (GeV/c^{2}) #gamma #gamma");
1285 fHistoTrueEtaCaloPhotonInvMassPt[iCut]->SetYTitle("#eta p_{T} (GeV/c)");
1286 fTrueList[iCut]->Add(fHistoTrueEtaCaloPhotonInvMassPt[iCut]);
1288 fHistoTruePi0CaloConvertedPhotonInvMassPt[iCut] = new TH2F("ESD_TruePi0CaloConvertedPhoton_InvMass_Pt","ESD_TruePi0CaloConvertedPhoton_InvMass_Pt",800,0,0.8,250,0,25);
1289 fHistoTruePi0CaloConvertedPhotonInvMassPt[iCut]->SetXTitle("M_{inv,#pi^{0}} (GeV/c^{2}) #gamma #gamma_{conv}");
1290 fHistoTruePi0CaloConvertedPhotonInvMassPt[iCut]->SetYTitle("#pi^{0} p_{T} (GeV/c)");
1291 fTrueList[iCut]->Add(fHistoTruePi0CaloConvertedPhotonInvMassPt[iCut]);
1293 fHistoTruePi0CaloConvertedPhotonMatchedInvMassPt[iCut] = new TH2F("ESD_TruePi0CaloConvertedPhotonMatched_InvMass_Pt","ESD_TruePi0CaloConvertedPhotonMatched_InvMass_Pt",800,0,0.8,250,0,25);
1294 fHistoTruePi0CaloConvertedPhotonMatchedInvMassPt[iCut]->SetXTitle("M_{inv,#pi^{0}} (GeV/c^{2}) #gamma #gamma_{conv,matched}");
1295 fHistoTruePi0CaloConvertedPhotonMatchedInvMassPt[iCut]->SetYTitle("#pi^{0} p_{T} (GeV/c)");
1296 fTrueList[iCut]->Add(fHistoTruePi0CaloConvertedPhotonMatchedInvMassPt[iCut]);
1298 fHistoTrueEtaCaloConvertedPhotonInvMassPt[iCut] = new TH2F("ESD_TrueEtaCaloConvertedPhoton_InvMass_Pt","ESD_TrueEtaCaloConvertedPhoton_InvMass_Pt",800,0,0.8,250,0,25);
1299 fHistoTrueEtaCaloConvertedPhotonInvMassPt[iCut]->SetXTitle("M_{inv,#eta} (GeV/c^{2}) #gamma #gamma_{conv}");
1300 fHistoTrueEtaCaloConvertedPhotonInvMassPt[iCut]->SetYTitle("#eta p_{T} (GeV/c)");
1301 fTrueList[iCut]->Add(fHistoTrueEtaCaloConvertedPhotonInvMassPt[iCut]);
1303 fHistoTrueEtaCaloConvertedPhotonMatchedInvMassPt[iCut] = new TH2F("ESD_TrueEtaCaloConvertedPhotonMatched_InvMass_Pt","ESD_TrueEtaCaloConvertedPhotonMatched_InvMass_Pt",800,0,0.8,250,0,25);
1304 fHistoTrueEtaCaloConvertedPhotonMatchedInvMassPt[iCut]->SetXTitle("M_{inv,#eta} (GeV/c^{2}) #gamma #gamma_{conv,matched}");
1305 fHistoTrueEtaCaloConvertedPhotonMatchedInvMassPt[iCut]->SetYTitle("#eta p_{T} (GeV/c)");
1306 fTrueList[iCut]->Add(fHistoTrueEtaCaloConvertedPhotonMatchedInvMassPt[iCut]);
1308 fHistoTruePi0CaloElectronInvMassPt[iCut] = new TH2F("ESD_TruePi0CaloElectron_InvMass_Pt","ESD_TruePi0CaloElectron_InvMass_Pt",800,0,0.8,250,0,25);
1309 fHistoTruePi0CaloElectronInvMassPt[iCut]->SetXTitle("M_{inv,#pi^{0}} (GeV/c^{2}) #gamma e^{#pm}");
1310 fHistoTruePi0CaloElectronInvMassPt[iCut]->SetYTitle("#pi^{0} p_{T} (GeV/c)");
1311 fTrueList[iCut]->Add(fHistoTruePi0CaloElectronInvMassPt[iCut]);
1312 fHistoTrueEtaCaloElectronInvMassPt[iCut] = new TH2F("ESD_TrueEtaCaloElectron_InvMass_Pt","ESD_TrueEtaCaloElectron_InvMass_Pt",800,0,0.8,250,0,25);
1313 fHistoTrueEtaCaloElectronInvMassPt[iCut]->SetXTitle("M_{inv,#eta} (GeV/c^{2}) #gamma e^{#pm}");
1314 fHistoTrueEtaCaloElectronInvMassPt[iCut]->SetYTitle("#eta p_{T} (GeV/c)");
1315 fTrueList[iCut]->Add(fHistoTrueEtaCaloElectronInvMassPt[iCut]);
1317 fHistoTruePi0CaloMergedClusterInvMassPt[iCut] = new TH2F("ESD_TruePi0CaloMergedCluster_InvMass_Pt","ESD_TruePi0CaloMergedCluster_InvMass_Pt",800,0,0.8,250,0,25);
1318 fHistoTruePi0CaloMergedClusterInvMassPt[iCut]->SetXTitle("M_{inv,#pi^{0}} (GeV/c^{2}) #gamma merged cluster");
1319 fHistoTruePi0CaloMergedClusterInvMassPt[iCut]->SetYTitle("#pi^{0} p_{T} (GeV/c)");
1320 fTrueList[iCut]->Add(fHistoTruePi0CaloMergedClusterInvMassPt[iCut]);
1321 fHistoTrueEtaCaloMergedClusterInvMassPt[iCut] = new TH2F("ESD_TrueEtaCaloMergedCluster_InvMass_Pt","ESD_TrueEtaCaloMergedCluster_InvMass_Pt",800,0,0.8,250,0,25);
1322 fHistoTrueEtaCaloMergedClusterInvMassPt[iCut]->SetXTitle("M_{inv,#eta} (GeV/c^{2}) #gamma merged cluster");
1323 fHistoTrueEtaCaloMergedClusterInvMassPt[iCut]->SetYTitle("#eta p_{T} (GeV/c)");
1324 fTrueList[iCut]->Add(fHistoTrueEtaCaloMergedClusterInvMassPt[iCut]);
1326 fHistoTrueMotherCaloEMNonLeadingInvMassPt[iCut] = new TH2F("ESD_TrueMotherCaloEMNonLeading_InvMass_Pt","ESD_TrueMotherCaloEMNonLeading_InvMass_Pt",800,0,0.8,250,0,25);
1327 fHistoTrueMotherCaloEMNonLeadingInvMassPt[iCut]->SetXTitle("M_{inv} (GeV/c^{2}) #gamma cluster no leading EM");
1328 fHistoTrueMotherCaloEMNonLeadingInvMassPt[iCut]->SetYTitle("#pair p_{T} (GeV/c)");
1329 fTrueList[iCut]->Add(fHistoTrueMotherCaloEMNonLeadingInvMassPt[iCut]);
1330 fHistoTruePi0CaloMergedClusterPartConvInvMassPt[iCut] = new TH2F("ESD_TruePi0CaloMergedClusterPartConv_InvMass_Pt","ESD_TruePi0CaloMergedClusterPartConv_InvMass_Pt",800,0,0.8,250,0,25);
1331 fHistoTruePi0CaloMergedClusterPartConvInvMassPt[iCut]->SetXTitle("M_{inv,#pi^{0}} (GeV/c^{2}) #gamma merged cluster, part conv");
1332 fHistoTruePi0CaloMergedClusterPartConvInvMassPt[iCut]->SetYTitle("#pi^{0} p_{T} (GeV/c)");
1333 fTrueList[iCut]->Add(fHistoTruePi0CaloMergedClusterPartConvInvMassPt[iCut]);
1334 fHistoTrueEtaCaloMergedClusterPartConvInvMassPt[iCut] = new TH2F("ESD_TrueEtaCaloMergedClusterPartConv_InvMass_Pt","ESD_TrueEtaCaloMergedClusterPartConv_InvMass_Pt",800,0,0.8,250,0,25);
1335 fHistoTrueEtaCaloMergedClusterPartConvInvMassPt[iCut]->SetXTitle("M_{inv,#eta} (GeV/c^{2}) #gamma merged cluster, part conv");
1336 fHistoTrueEtaCaloMergedClusterPartConvInvMassPt[iCut]->SetYTitle("#eta p_{T} (GeV/c)");
1337 fTrueList[iCut]->Add(fHistoTrueEtaCaloMergedClusterPartConvInvMassPt[iCut]);
1339 fHistoTruePrimaryPi0MCPtResolPt[iCut] = new TH2F("ESD_TruePrimaryPi0_MCPt_ResolPt","ESD_TruePrimaryPi0_ResolPt_MCPt",500,0.03,25,1000,-1.,1.);
1340 fHistoTruePrimaryPi0MCPtResolPt[iCut]->SetXTitle("#pi^{0} p_{T,MC} (GeV/c)");
1341 fHistoTruePrimaryPi0MCPtResolPt[iCut]->SetYTitle("#pi^{0} (p_{T,rec}-p_{T,MC})/p_{T,MC} ()");
1342 fHistoTruePrimaryPi0MCPtResolPt[iCut]->Sumw2();
1343 SetLogBinningXTH2(fHistoTruePrimaryPi0MCPtResolPt[iCut]);
1344 fTrueList[iCut]->Add(fHistoTruePrimaryPi0MCPtResolPt[iCut]);
1346 fHistoTruePrimaryEtaMCPtResolPt[iCut] = new TH2F("ESD_TruePrimaryEta_MCPt_ResolPt","ESD_TruePrimaryEta_ResolPt_MCPt",500,0.03,25,1000,-1.,1.);
1347 fHistoTruePrimaryEtaMCPtResolPt[iCut]->SetXTitle("#eta p_{T,MC} (GeV/c)");
1348 fHistoTruePrimaryEtaMCPtResolPt[iCut]->SetYTitle("#eta (p_{T,rec}-p_{T,MC})/p_{T,MC} ()");
1349 fHistoTruePrimaryEtaMCPtResolPt[iCut]->Sumw2();
1350 SetLogBinningXTH2(fHistoTruePrimaryEtaMCPtResolPt[iCut]);
1351 fTrueList[iCut]->Add(fHistoTruePrimaryEtaMCPtResolPt[iCut]);
1353 fHistoTrueBckGGInvMassPt[iCut] = new TH2F("ESD_TrueBckGG_InvMass_Pt","ESD_TrueBckGG_InvMass_Pt",800,0,0.8,250,0,25);
1354 fHistoTrueBckGGInvMassPt[iCut]->SetXTitle("M_{inv} (GeV/c^{2}) #gamma #gamma no signal");
1355 fHistoTrueBckGGInvMassPt[iCut]->SetYTitle("#pair p_{T} (GeV/c)");
1356 fTrueList[iCut]->Add(fHistoTrueBckGGInvMassPt[iCut]);
1357 fHistoTrueBckContInvMassPt[iCut] = new TH2F("ESD_TrueBckCont_InvMass_Pt","ESD_TrueBckCont_InvMass_Pt",800,0,0.8,250,0,25);
1358 fHistoTrueBckContInvMassPt[iCut]->SetXTitle("M_{inv} (GeV/c^{2}) contamination");
1359 fHistoTrueBckContInvMassPt[iCut]->SetYTitle("#pair p_{T} (GeV/c)");
1360 fTrueList[iCut]->Add(fHistoTrueBckContInvMassPt[iCut]);
1361 fHistoTrueK0sWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueK0sWithPi0Daughter_MCPt","ESD_TrueK0sWithPi0Daughter_MCPt",250,0,25);
1362 fHistoTrueK0sWithPi0DaughterMCPt[iCut]->SetXTitle("K^{0}_{s} p_{MC,T} (GeV/c) for K^{0}_{s} where #pi^{0} rec ");
1363 fTrueList[iCut]->Add(fHistoTrueK0sWithPi0DaughterMCPt[iCut]);
1364 fHistoTrueEtaWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueEtaWithPi0Daughter_MCPt","ESD_TrueEtaWithPi0Daughter_MCPt",250,0,25);
1365 fHistoTrueEtaWithPi0DaughterMCPt[iCut]->SetXTitle("#eta p_{MC,T} (GeV/c) for #eta where #pi^{0} rec ");
1366 fTrueList[iCut]->Add(fHistoTrueEtaWithPi0DaughterMCPt[iCut]);
1367 fHistoTrueLambdaWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueLambdaWithPi0Daughter_MCPt","ESD_TrueLambdaWithPi0Daughter_MCPt",250,0,25);
1368 fHistoTrueLambdaWithPi0DaughterMCPt[iCut]->SetXTitle("#Lambda p_{MC,T} (GeV/c) for #Lambda where #pi^{0} rec ");
1369 fTrueList[iCut]->Add(fHistoTrueLambdaWithPi0DaughterMCPt[iCut]);
1371 fHistoTruePi0PtY[iCut] = new TH2F("ESD_TruePi0_Pt_Y","ESD_TruePi0_Pt_Y",150,0.03,15.,150,-1.5,1.5);
1372 fHistoTruePi0PtY[iCut]->SetYTitle("Y_{#pi^{0}}");
1373 fHistoTruePi0PtY[iCut]->SetXTitle("#pi^{0} p_{T} (GeV/c)");
1374 SetLogBinningXTH2(fHistoTruePi0PtY[iCut]);
1375 fTrueList[iCut]->Add(fHistoTruePi0PtY[iCut]);
1376 fHistoTrueEtaPtY[iCut] = new TH2F("ESD_TrueEta_Pt_Y","ESD_TrueEta_Pt_Y",150,0.03,15.,150,-1.5,1.5);
1377 fHistoTrueEtaPtY[iCut]->SetYTitle("Y_{#eta}");
1378 fHistoTrueEtaPtY[iCut]->SetXTitle("#eta p_{T} (GeV/c)");
1379 SetLogBinningXTH2(fHistoTrueEtaPtY[iCut]);
1380 fTrueList[iCut]->Add(fHistoTrueEtaPtY[iCut]);
1381 fHistoTruePi0PtAlpha[iCut] = new TH2F("ESD_TruePi0_Pt_Alpha","ESD_TruePi0_Pt_Alpha",150,0.03,15.,100,0,1);
1382 fHistoTruePi0PtAlpha[iCut]->SetYTitle("#alpha_{#pi^{0}}");
1383 fHistoTruePi0PtAlpha[iCut]->SetXTitle("#pi^{0} p_{T} (GeV/c)");
1384 SetLogBinningXTH2(fHistoTruePi0PtAlpha[iCut]);
1385 fTrueList[iCut]->Add(fHistoTruePi0PtAlpha[iCut]);
1386 fHistoTrueEtaPtAlpha[iCut] = new TH2F("ESD_TrueEta_Pt_Alpha","ESD_TrueEta_Pt_Alpha",150,0.03,15.,100,0,1);
1387 fHistoTrueEtaPtAlpha[iCut]->SetYTitle("#alpha_{#eta}");
1388 fHistoTrueEtaPtAlpha[iCut]->SetXTitle("#eta p_{T} (GeV/c)");
1389 SetLogBinningXTH2(fHistoTrueEtaPtAlpha[iCut]);
1390 fTrueList[iCut]->Add(fHistoTrueEtaPtAlpha[iCut]);
1392 fHistoTruePi0PtOpenAngle[iCut] = new TH2F("ESD_TruePi0_Pt_OpenAngle","ESD_TruePi0_Pt_OpenAngle",150,0.03,15.,200,0,2*TMath::Pi());
1393 fHistoTruePi0PtOpenAngle[iCut]->SetYTitle("#theta_{#pi^{0}}");
1394 fHistoTruePi0PtOpenAngle[iCut]->SetXTitle("#pi^{0} p_{T} (GeV/c)");
1395 SetLogBinningXTH2(fHistoTruePi0PtOpenAngle[iCut]);
1396 fTrueList[iCut]->Add(fHistoTruePi0PtOpenAngle[iCut]);
1397 fHistoTrueEtaPtOpenAngle[iCut] = new TH2F("ESD_TrueEta_Pt_OpenAngle","ESD_TrueEta_Pt_OpenAngle",150,0.03,15.,200,0,2*TMath::Pi());
1398 fHistoTrueEtaPtOpenAngle[iCut]->SetYTitle("#theta_{#eta}");
1399 fHistoTrueEtaPtOpenAngle[iCut]->SetXTitle("#eta p_{T} (GeV/c)");
1400 SetLogBinningXTH2(fHistoTrueEtaPtOpenAngle[iCut]);
1401 fTrueList[iCut]->Add(fHistoTrueEtaPtOpenAngle[iCut]);
1403 fHistoTrueMotherPi0ConvPhotonEtaPhi[iCut] = new TH2F("ESD_TrueMotherPi0ConvPhoton_Eta_Phi","conv photons for true #pi^{0}",600,0,2*TMath::Pi(),200,-1,1);
1404 fHistoTrueMotherPi0ConvPhotonEtaPhi[iCut]->SetXTitle("#phi_{#gamma_{conv}} (rad)");
1405 fHistoTrueMotherPi0ConvPhotonEtaPhi[iCut]->SetYTitle("#eta_{#gamma_{conv}}");
1406 fTrueList[iCut]->Add(fHistoTrueMotherPi0ConvPhotonEtaPhi[iCut]);
1407 fHistoTrueMotherEtaConvPhotonEtaPhi[iCut] = new TH2F("ESD_TrueMotherEtaConvPhoton_Eta_Phi","conv photons for true #eta",600,0,2*TMath::Pi(),200,-1,1);
1408 fHistoTrueMotherEtaConvPhotonEtaPhi[iCut]->SetXTitle("#phi_{#gamma_{conv}} (rad)");
1409 fHistoTrueMotherEtaConvPhotonEtaPhi[iCut]->SetYTitle("#eta_{#gamma_{conv}}");
1410 fTrueList[iCut]->Add(fHistoTrueMotherEtaConvPhotonEtaPhi[iCut]);
1417 fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
1418 if(!fV0Reader){printf("Error: No V0 Reader");return;} // GetV0Reader
1421 if((AliConversionPhotonCuts*)fV0Reader->GetConversionCuts())
1422 if(((AliConversionPhotonCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms())
1423 fOutputContainer->Add(((AliConversionPhotonCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms());
1425 if((AliConvEventCuts*)fV0Reader->GetEventCuts())
1426 if(((AliConvEventCuts*)fV0Reader->GetEventCuts())->GetCutHistograms())
1427 fOutputContainer->Add(((AliConvEventCuts*)fV0Reader->GetEventCuts())->GetCutHistograms());
1430 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
1431 if(!((AliConvEventCuts*)fEventCutArray->At(iCut))) continue;
1432 if(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutHistograms()){
1433 fCutFolder[iCut]->Add(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutHistograms());
1435 if(!((AliConversionPhotonCuts*)fCutArray->At(iCut))) continue;
1436 if(((AliConversionPhotonCuts*)fCutArray->At(iCut))->GetCutHistograms()){
1437 fCutFolder[iCut]->Add(((AliConversionPhotonCuts*)fCutArray->At(iCut))->GetCutHistograms());
1439 if(!((AliCaloPhotonCuts*)fClusterCutArray->At(iCut))) continue;
1440 if(((AliCaloPhotonCuts*)fClusterCutArray->At(iCut))->GetCutHistograms()){
1441 fCutFolder[iCut]->Add(((AliCaloPhotonCuts*)fClusterCutArray->At(iCut))->GetCutHistograms());
1443 if(fDoMesonAnalysis){
1444 if(!((AliConversionMesonCuts*)fMesonCutArray->At(iCut))) continue;
1445 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms()){
1446 fCutFolder[iCut]->Add(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms());
1450 PostData(1, fOutputContainer);
1452 //_____________________________________________________________________________
1453 Bool_t AliAnalysisTaskGammaConvCalo::Notify()
1455 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
1456 if(!((AliConvEventCuts*)fEventCutArray->At(iCut))->GetDoEtaShift()){
1457 fProfileEtaShift[iCut]->Fill(0.,(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetEtaShift()));
1458 continue; // No Eta Shift requested, continue
1460 if(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetEtaShift() == 0.0){ // Eta Shift requested but not set, get shift automatically
1461 ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCorrectEtaShiftFromPeriod(fV0Reader->GetPeriodName());
1462 fProfileEtaShift[iCut]->Fill(0.,(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetEtaShift()));
1463 ((AliConvEventCuts*)fEventCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
1467 printf(" Gamma Conversion Task %s :: Eta Shift Manually Set to %f \n\n",
1468 (((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber()).Data(),((AliConvEventCuts*)fEventCutArray->At(iCut))->GetEtaShift());
1469 fProfileEtaShift[iCut]->Fill(0.,(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetEtaShift()));
1470 ((AliConvEventCuts*)fEventCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
1476 //_____________________________________________________________________________
1477 void AliAnalysisTaskGammaConvCalo::UserExec(Option_t *)
1480 // Called for each event
1482 Int_t eventQuality = ((AliConvEventCuts*)fV0Reader->GetEventCuts())->GetEventQuality();
1483 if(eventQuality == 2 || eventQuality == 3){// Event Not Accepted due to MC event missing or wrong trigger for V0ReaderV1
1484 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
1485 fHistoNEvents[iCut]->Fill(eventQuality);
1490 if(fIsMC) fMCEvent = MCEvent();
1491 if(fMCEvent == NULL) fIsMC = kFALSE;
1493 fInputEvent = InputEvent();
1495 if(fIsMC && fInputEvent->IsA()==AliESDEvent::Class()){
1496 fMCStack = fMCEvent->Stack();
1497 if(fMCStack == NULL) fIsMC = kFALSE;
1500 if(fInputEvent->IsA()==AliAODEvent::Class()){
1501 fInputEvent->InitMagneticField();
1504 fReaderGammas = fV0Reader->GetReconstructedGammas(); // Gammas from default Cut
1506 // ------------------- BeginEvent ----------------------------
1508 AliEventplane *EventPlane = fInputEvent->GetEventplane();
1509 if(fIsHeavyIon ==1)fEventPlaneAngle = EventPlane->GetEventplane("V0",fInputEvent,2);
1510 else fEventPlaneAngle=0.0;
1512 if(fIsMC && fInputEvent->IsA()==AliAODEvent::Class() && !(fV0Reader->AreAODsRelabeled())){
1513 RelabelAODPhotonCandidates(kTRUE); // In case of AODMC relabeling MC
1514 fV0Reader->RelabelAODs(kTRUE);
1518 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
1522 Bool_t isRunningEMCALrelAna = kFALSE;
1523 if (((AliCaloPhotonCuts*)fClusterCutArray->At(fiCut))->GetClusterType() == 1) isRunningEMCALrelAna = kTRUE;
1525 Int_t eventNotAccepted = ((AliConvEventCuts*)fEventCutArray->At(iCut))->IsEventAcceptedByCut(fV0Reader->GetEventCuts(),fInputEvent,fMCEvent,fIsHeavyIon,isRunningEMCALrelAna);
1527 if(eventNotAccepted){
1528 // cout << "event rejected due to wrong trigger: " <<eventNotAccepted << endl;
1529 fHistoNEvents[iCut]->Fill(eventNotAccepted); // Check Centrality, PileUp, SDD and V0AND --> Not Accepted => eventQuality = 1
1533 if(eventQuality != 0){// Event Not Accepted
1534 //cout << "event rejected due to: " <<eventQuality << endl;
1535 fHistoNEvents[iCut]->Fill(eventQuality);
1539 fHistoNEvents[iCut]->Fill(eventQuality); // Should be 0 here
1540 fHistoNGoodESDTracks[iCut]->Fill(fV0Reader->GetNumberOfPrimaryTracks());
1541 if(((AliConvEventCuts*)fEventCutArray->At(iCut))->IsHeavyIon() == 2) fHistoNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A());
1542 else fHistoNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A()+fInputEvent->GetVZEROData()->GetMTotV0C());
1545 // Process MC Particle
1546 fStringRecTruePi0s[iCut] = "";
1547 fStringRecTrueEtas[iCut] = "";
1548 if(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetSignalRejection() != 0){
1549 if(fInputEvent->IsA()==AliESDEvent::Class()){
1550 ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetNotRejectedParticles(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetSignalRejection(),
1551 ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetAcceptedHeader(),
1554 else if(fInputEvent->IsA()==AliAODEvent::Class()){
1555 ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetNotRejectedParticles(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetSignalRejection(),
1556 ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetAcceptedHeader(),
1560 if(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetAcceptedHeader()){
1561 for(Int_t i = 0;i<(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetAcceptedHeader())->GetEntries();i++){
1562 TString nameBin= fHistoMCHeaders[iCut]->GetXaxis()->GetBinLabel(i+1);
1563 if (nameBin.CompareTo("")== 0){
1564 TString nameHeader = ((TObjString*)((TList*)((AliConvEventCuts*)fEventCutArray->At(iCut))
1565 ->GetAcceptedHeader())->At(i))->GetString();
1566 fHistoMCHeaders[iCut]->GetXaxis()->SetBinLabel(i+1,nameHeader.Data());
1573 if(fInputEvent->IsA()==AliESDEvent::Class())
1574 ProcessMCParticles();
1575 if(fInputEvent->IsA()==AliAODEvent::Class())
1576 ProcessAODMCParticles();
1579 // it is in the loop to have the same conversion cut string (used also for MC stuff that should be same for V0 and Cluster)
1580 ProcessClusters(); // process calo clusters
1581 ProcessPhotonCandidates(); // Process this cuts gammas
1583 fHistoNGammaCandidates[iCut]->Fill(fGammaCandidates->GetEntries());
1584 fHistoNGoodESDTracksVsNGammaCanditates[iCut]->Fill(fV0Reader->GetNumberOfPrimaryTracks(),fGammaCandidates->GetEntries());
1585 if(fDoMesonAnalysis){ // Meson Analysis
1586 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseMCPSmearing() && fIsMC){
1587 fUnsmearedPx = new Double_t[fGammaCandidates->GetEntries()]; // Store unsmeared Momenta
1588 fUnsmearedPy = new Double_t[fGammaCandidates->GetEntries()];
1589 fUnsmearedPz = new Double_t[fGammaCandidates->GetEntries()];
1590 fUnsmearedE = new Double_t[fGammaCandidates->GetEntries()];
1592 for(Int_t gamma=0;gamma<fGammaCandidates->GetEntries();gamma++){ // Smear the AODPhotons in MC
1593 fUnsmearedPx[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Px();
1594 fUnsmearedPy[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Py();
1595 fUnsmearedPz[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Pz();
1596 fUnsmearedE[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->E();
1597 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->SmearParticle(dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(gamma)));
1601 CalculatePi0Candidates(); // Combine Gammas from conversion and from calo
1603 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->DoBGCalculation()){
1604 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->BackgroundHandlerType() == 0){
1605 CalculateBackground(); // Combinatorial Background
1606 UpdateEventByEventData(); // Store Event for mixed Events
1609 CalculateBackgroundRP(); // Combinatorial Background
1610 fBGHandlerRP[iCut]->AddEvent(fGammaCandidates,fInputEvent); // Store Event for mixed Events
1611 fBGClusHandlerRP[iCut]->AddEvent(fClusterCandidates,fInputEvent); // Store Event for mixed Events
1615 if(fIsMC && fInputEvent->IsA()==AliAODEvent::Class()){
1616 ProcessConversionPhotonsForMissingTagsAOD(); //Count missing tags
1617 } else if (fIsMC && fInputEvent->IsA()==AliESDEvent::Class()){
1618 ProcessConversionPhotonsForMissingTags(); //Count missing tags
1621 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseMCPSmearing() && fIsMC){
1622 for(Int_t gamma=0;gamma<fGammaCandidates->GetEntries();gamma++){ // Smear the AODPhotons in MC
1623 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPx(fUnsmearedPx[gamma]); // Reset Unsmeared Momenta
1624 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPy(fUnsmearedPy[gamma]);
1625 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPz(fUnsmearedPz[gamma]);
1626 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetE(fUnsmearedE[gamma]);
1628 delete[] fUnsmearedPx; fUnsmearedPx = 0x0;
1629 delete[] fUnsmearedPy; fUnsmearedPy = 0x0;
1630 delete[] fUnsmearedPz; fUnsmearedPz = 0x0;
1631 delete[] fUnsmearedE; fUnsmearedE = 0x0;
1635 fGammaCandidates->Clear(); // delete this cuts good gammas
1636 fClusterCandidates->Clear(); // delete cluster candidates
1639 if(fIsMC && fInputEvent->IsA()==AliAODEvent::Class() && !(fV0Reader->AreAODsRelabeled())){
1640 RelabelAODPhotonCandidates(kFALSE); // Back to ESDMC Label
1641 fV0Reader->RelabelAODs(kFALSE);
1644 PostData(1, fOutputContainer);
1647 //________________________________________________________________________
1648 void AliAnalysisTaskGammaConvCalo::ProcessClusters()
1652 nclus = fInputEvent->GetNumberOfCaloClusters();
1654 // cout << nclus << endl;
1656 if(nclus == 0) return;
1659 Double_t vertex[3] = {0};
1660 InputEvent()->GetPrimaryVertex()->GetXYZ(vertex);
1662 // Loop over EMCal clusters
1663 for(Long_t i = 0; i < nclus; i++){
1665 AliVCluster* clus = NULL;
1666 clus = fInputEvent->GetCaloCluster(i);
1667 if (!clus) continue;
1668 if(!((AliCaloPhotonCuts*)fClusterCutArray->At(fiCut))->ClusterIsSelected(clus,fInputEvent,fIsMC)) continue;
1669 // TLorentzvector with cluster
1670 TLorentzVector clusterVector;
1671 clus->GetMomentum(clusterVector,vertex);
1673 TLorentzVector* tmpvec = new TLorentzVector();
1674 tmpvec->SetPxPyPzE(clusterVector.Px(),clusterVector.Py(),clusterVector.Pz(),clusterVector.E());
1676 // convert to AODConversionPhoton
1677 AliAODConversionPhoton *PhotonCandidate=new AliAODConversionPhoton(tmpvec);
1678 if(!PhotonCandidate) continue;
1680 // Flag Photon as CaloPhoton
1681 PhotonCandidate->SetIsCaloPhoton();
1682 PhotonCandidate->SetCaloClusterRef(i);
1685 Int_t* mclabelsCluster = clus->GetLabels();
1686 PhotonCandidate->SetNCaloPhotonMCLabels(clus->GetNLabels());
1687 // cout << clus->GetNLabels() << endl;
1688 if (clus->GetNLabels()>0){
1689 for (Int_t k =0; k< (Int_t)clus->GetNLabels(); k++){
1690 if (k< 20)PhotonCandidate->SetCaloPhotonMCLabel(k,mclabelsCluster[k]);
1691 // Int_t pdgCode = fMCStack->Particle(mclabelsCluster[k])->GetPdgCode();
1692 // cout << "label " << k << "\t" << mclabelsCluster[k] << " pdg code: " << pdgCode << endl;
1697 fIsFromMBHeader = kTRUE;
1698 fIsOverlappingWithOtherHeader = kFALSE;
1699 // test whether largest contribution to cluster orginates in added signals
1700 if (fIsMC && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetCaloPhotonMCLabel(0), fMCStack, fInputEvent) == 0) fIsFromMBHeader = kFALSE;
1702 if (clus->GetNLabels()>1){
1703 Int_t* mclabelsCluster = clus->GetLabels();
1704 for (Int_t l = 1; l < (Int_t)clus->GetNLabels(); l++ ){
1705 if (((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(mclabelsCluster[l], fMCStack, fInputEvent) == 0) fIsOverlappingWithOtherHeader = kTRUE;
1710 if (fIsFromMBHeader && !fIsOverlappingWithOtherHeader){
1711 fHistoClusGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1712 fClusterCandidates->Add(PhotonCandidate); // if no second loop is required add to events good gammas
1714 if (fIsFromMBHeader && fIsOverlappingWithOtherHeader) fHistoClusOverlapHeadersGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1717 if(fInputEvent->IsA()==AliESDEvent::Class()){
1718 ProcessTrueClusterCandidates(PhotonCandidate);
1720 ProcessTrueClusterCandidatesAOD(PhotonCandidate);
1729 //________________________________________________________________________
1730 void AliAnalysisTaskGammaConvCalo::ProcessTrueClusterCandidates(AliAODConversionPhoton *TruePhotonCandidate)
1733 TParticle *Photon = NULL;
1734 if (!TruePhotonCandidate->GetIsCaloPhoton()) AliFatal("CaloPhotonFlag has not been set task will abort");
1735 fHistoTrueNLabelsInClus[fiCut]->Fill(TruePhotonCandidate->GetNCaloPhotonMCLabels());
1737 if (TruePhotonCandidate->GetNCaloPhotonMCLabels()>0)Photon = fMCStack->Particle(TruePhotonCandidate->GetCaloPhotonMCLabel(0));
1741 // cout << "no photon" << endl;
1745 TruePhotonCandidate->SetCaloPhotonMCFlags(fMCStack);
1748 if(fIsFromMBHeader && !fIsOverlappingWithOtherHeader){
1749 if (TruePhotonCandidate->IsLargestComponentPhoton() || TruePhotonCandidate->IsLargestComponentElectron() )fHistoTrueClusGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1750 else fHistoTrueClusEMNonLeadingPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1751 if (fDoClusterQA > 0){
1752 if (TruePhotonCandidate->IsLargestComponentPhoton()){
1753 fHistoTrueClusUnConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1754 fHistoTrueClusUnConvGammaMCPt[fiCut]->Fill(Photon->Pt());
1756 if (TruePhotonCandidate->IsLargestComponentElectron())
1757 fHistoTrueClusElectronPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1758 if (TruePhotonCandidate->IsLargestComponentElectron() && TruePhotonCandidate->IsConversion()){
1759 fHistoTrueClusConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1760 fHistoTrueClusConvGammaMCPt[fiCut]->Fill(((TParticle*)fMCStack->Particle(Photon->GetMother(0)))->Pt());
1762 if (TruePhotonCandidate->IsLargestComponentElectron() && TruePhotonCandidate->IsConversion() && TruePhotonCandidate->IsConversionFullyContained())
1763 fHistoTrueClusConvGammaFullyPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1764 if (TruePhotonCandidate->IsMerged() || TruePhotonCandidate->IsMergedPartConv() || TruePhotonCandidate->IsDalitzMerged())
1765 fHistoTrueClusMergedGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1766 if (TruePhotonCandidate->IsMergedPartConv())
1767 fHistoTrueClusMergedPartConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1768 if (TruePhotonCandidate->IsDalitz())
1769 fHistoTrueClusDalitzPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1770 if (TruePhotonCandidate->IsDalitzMerged())
1771 fHistoTrueClusDalitzMergedPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1772 if (TruePhotonCandidate->IsPhotonWithElecMother())
1773 fHistoTrueClusPhotonFromElecMotherPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1774 if (TruePhotonCandidate->IsShower())
1775 fHistoTrueClusShowerPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1776 if (TruePhotonCandidate->IsSubLeadingEM())
1777 fHistoTrueClusSubLeadingPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1778 fHistoTrueClusNParticles[fiCut]->Fill(TruePhotonCandidate->GetNCaloPhotonMotherMCLabels());
1782 if(Photon->GetMother(0) <= fMCStack->GetNprimary()){
1783 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
1784 if(fIsFromMBHeader){
1785 fHistoTruePrimaryClusGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1786 fHistoTruePrimaryClusGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
1793 //________________________________________________________________________
1794 void AliAnalysisTaskGammaConvCalo::ProcessTrueClusterCandidatesAOD(AliAODConversionPhoton *TruePhotonCandidate)
1796 AliAODMCParticle *Photon = NULL;
1797 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1798 if (AODMCTrackArray){
1799 if (!TruePhotonCandidate->GetIsCaloPhoton()) AliFatal("CaloPhotonFlag has not been set task will abort");
1800 if (TruePhotonCandidate->GetNCaloPhotonMCLabels()>0) Photon = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetCaloPhotonMCLabel(0));
1803 AliInfo("AODMCTrackArray could not be loaded");
1808 // cout << "no photon" << endl;
1811 TruePhotonCandidate->SetCaloPhotonMCFlagsAOD(fInputEvent);
1812 fHistoTrueNLabelsInClus[fiCut]->Fill(TruePhotonCandidate->GetNCaloPhotonMCLabels());
1814 if(fIsFromMBHeader && !fIsOverlappingWithOtherHeader){
1815 if (TruePhotonCandidate->IsLargestComponentPhoton() || TruePhotonCandidate->IsLargestComponentElectron() )fHistoTrueClusGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1816 else fHistoTrueClusEMNonLeadingPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1817 if (fDoClusterQA > 0){
1818 if (TruePhotonCandidate->IsLargestComponentPhoton()) {
1819 fHistoTrueClusUnConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1820 fHistoTrueClusUnConvGammaMCPt[fiCut]->Fill(Photon->Pt());
1822 if (TruePhotonCandidate->IsLargestComponentElectron())
1823 fHistoTrueClusElectronPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1824 if (TruePhotonCandidate->IsLargestComponentElectron() && TruePhotonCandidate->IsConversion()) {
1825 fHistoTrueClusConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1826 AliAODMCParticle *Mother = (AliAODMCParticle*) AODMCTrackArray->At(Photon->GetMother());
1827 fHistoTrueClusConvGammaMCPt[fiCut]->Fill(Mother->Pt());
1829 if (TruePhotonCandidate->IsLargestComponentElectron() && TruePhotonCandidate->IsConversion() && TruePhotonCandidate->IsConversionFullyContained())
1830 fHistoTrueClusConvGammaFullyPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1831 if (TruePhotonCandidate->IsMerged() || TruePhotonCandidate->IsMergedPartConv() || TruePhotonCandidate->IsDalitzMerged())
1832 fHistoTrueClusMergedGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1833 if (TruePhotonCandidate->IsMergedPartConv())
1834 fHistoTrueClusMergedPartConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1835 if (TruePhotonCandidate->IsDalitz())
1836 fHistoTrueClusDalitzPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1837 if (TruePhotonCandidate->IsDalitzMerged())
1838 fHistoTrueClusDalitzMergedPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1839 if (TruePhotonCandidate->IsPhotonWithElecMother())
1840 fHistoTrueClusPhotonFromElecMotherPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1841 if (TruePhotonCandidate->IsShower())
1842 fHistoTrueClusShowerPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1843 if (TruePhotonCandidate->IsSubLeadingEM())
1844 fHistoTrueClusSubLeadingPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1845 fHistoTrueClusNParticles[fiCut]->Fill(TruePhotonCandidate->GetNCaloPhotonMotherMCLabels());
1850 if(fIsFromMBHeader){
1851 fHistoTrueClusGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1852 // if (fDoPhotonQA > 0) fHistoTrueConvGammaEta[fiCut]->Fill(TruePhotonCandidate->Eta());
1855 if(Photon->IsPrimary()){
1856 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
1857 if(fIsFromMBHeader){
1858 fHistoTruePrimaryClusGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1859 fHistoTruePrimaryClusGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
1864 //________________________________________________________________________
1865 void AliAnalysisTaskGammaConvCalo::ProcessPhotonCandidates()
1868 TList *GammaCandidatesStepOne = new TList();
1869 TList *GammaCandidatesStepTwo = new TList();
1870 // Loop over Photon Candidates allocated by ReaderV1
1871 for(Int_t i = 0; i < fReaderGammas->GetEntriesFast(); i++){
1872 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(i);
1873 if(!PhotonCandidate) continue;
1874 fIsFromMBHeader = kTRUE;
1875 if(fIsMC && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
1876 Int_t isPosFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1877 if(isPosFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1878 Int_t isNegFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
1879 if(isNegFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1880 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1883 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelected(PhotonCandidate,fInputEvent)) continue;
1884 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(PhotonCandidate->GetPhotonPhi(),fEventPlaneAngle)) continue;
1885 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseElecSharingCut() &&
1886 !((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){
1887 fGammaCandidates->Add(PhotonCandidate); // if no second loop is required add to events good gammas
1889 if(fIsFromMBHeader){
1890 fHistoConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1891 if (fDoPhotonQA > 0){
1892 fHistoConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
1893 fHistoConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1897 if(fInputEvent->IsA()==AliESDEvent::Class())
1898 ProcessTruePhotonCandidates(PhotonCandidate);
1899 if(fInputEvent->IsA()==AliAODEvent::Class())
1900 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
1902 if (fIsFromMBHeader && fDoPhotonQA == 2){
1903 if (fIsHeavyIon == 1 && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
1904 fPtGamma = PhotonCandidate->Pt();
1905 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1906 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1907 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1908 fCharCatPhoton = PhotonCandidate->GetPhotonQuality();
1909 fTreeConvGammaPtDcazCat[fiCut]->Fill();
1910 } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
1911 fPtGamma = PhotonCandidate->Pt();
1912 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1913 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1914 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1915 fCharCatPhoton = PhotonCandidate->GetPhotonQuality();
1916 fTreeConvGammaPtDcazCat[fiCut]->Fill();
1919 } else if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseElecSharingCut()){ // if Shared Electron cut is enabled, Fill array, add to step one
1920 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->FillElectonLabelArray(PhotonCandidate,nV0);
1922 GammaCandidatesStepOne->Add(PhotonCandidate);
1923 } else if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseElecSharingCut() &&
1924 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){ // shared electron is disabled, step one not needed -> step two
1925 GammaCandidatesStepTwo->Add(PhotonCandidate);
1928 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseElecSharingCut()){
1929 for(Int_t i = 0;i<GammaCandidatesStepOne->GetEntries();i++){
1930 AliAODConversionPhoton *PhotonCandidate= (AliAODConversionPhoton*) GammaCandidatesStepOne->At(i);
1931 if(!PhotonCandidate) continue;
1932 fIsFromMBHeader = kTRUE;
1933 if(fMCStack && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
1934 Int_t isPosFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1935 Int_t isNegFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
1936 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1938 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->RejectSharedElectronV0s(PhotonCandidate,i,GammaCandidatesStepOne->GetEntries())) continue;
1939 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){ // To Colse v0s cut diabled, step two not needed
1940 fGammaCandidates->Add(PhotonCandidate);
1941 if(fIsFromMBHeader){
1942 fHistoConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1943 if (fDoPhotonQA > 0){
1944 fHistoConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
1945 fHistoConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1950 if(fInputEvent->IsA()==AliESDEvent::Class())
1951 ProcessTruePhotonCandidates(PhotonCandidate);
1952 if(fInputEvent->IsA()==AliAODEvent::Class())
1953 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
1954 } else GammaCandidatesStepTwo->Add(PhotonCandidate); // Close v0s cut enabled -> add to list two
1956 if (fIsFromMBHeader && fDoPhotonQA == 2){
1957 if (fIsHeavyIon ==1 && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
1958 fPtGamma = PhotonCandidate->Pt();
1959 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1960 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1961 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1962 fCharCatPhoton = PhotonCandidate->GetPhotonQuality();
1963 fTreeConvGammaPtDcazCat[fiCut]->Fill();
1964 } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
1965 fPtGamma = PhotonCandidate->Pt();
1966 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1967 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1968 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1969 fCharCatPhoton = PhotonCandidate->GetPhotonQuality();
1970 fTreeConvGammaPtDcazCat[fiCut]->Fill();
1975 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){
1976 for(Int_t i = 0;i<GammaCandidatesStepTwo->GetEntries();i++){
1977 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) GammaCandidatesStepTwo->At(i);
1978 if(!PhotonCandidate) continue;
1979 fIsFromMBHeader = kTRUE;
1980 if(fMCStack && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
1981 Int_t isPosFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1982 Int_t isNegFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
1983 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1985 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->RejectToCloseV0s(PhotonCandidate,GammaCandidatesStepTwo,i)) continue;
1986 fGammaCandidates->Add(PhotonCandidate); // Add gamma to current cut TList
1987 if(fIsFromMBHeader){
1988 fHistoConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1989 if (fDoPhotonQA > 0){
1990 fHistoConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
1991 fHistoConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1995 if(fInputEvent->IsA()==AliESDEvent::Class())
1996 ProcessTruePhotonCandidates(PhotonCandidate);
1997 if(fInputEvent->IsA()==AliAODEvent::Class())
1998 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
2000 if (fIsFromMBHeader){
2001 if (fIsHeavyIon == 1 && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
2002 fPtGamma = PhotonCandidate->Pt();
2003 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
2004 fRConvPhoton = PhotonCandidate->GetConversionRadius();
2005 fEtaPhoton = PhotonCandidate->GetPhotonEta();
2006 fCharCatPhoton = PhotonCandidate->GetPhotonQuality();
2007 fTreeConvGammaPtDcazCat[fiCut]->Fill();
2008 } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
2009 fPtGamma = PhotonCandidate->Pt();
2010 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
2011 fRConvPhoton = PhotonCandidate->GetConversionRadius();
2012 fEtaPhoton = PhotonCandidate->GetPhotonEta();
2013 fCharCatPhoton = PhotonCandidate->GetPhotonQuality();
2014 fTreeConvGammaPtDcazCat[fiCut]->Fill();
2020 delete GammaCandidatesStepOne;
2021 GammaCandidatesStepOne = 0x0;
2022 delete GammaCandidatesStepTwo;
2023 GammaCandidatesStepTwo = 0x0;
2027 //________________________________________________________________________
2028 void AliAnalysisTaskGammaConvCalo::ProcessTruePhotonCandidatesAOD(AliAODConversionPhoton *TruePhotonCandidate)
2031 Double_t magField = fInputEvent->GetMagneticField();
2032 if( magField < 0.0 ){
2039 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
2040 if (AODMCTrackArray == NULL) return;
2041 AliAODMCParticle *posDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelPositive());
2042 AliAODMCParticle *negDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelNegative());
2043 fCharPhotonMCInfo = 0;
2045 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
2046 Int_t pdgCode[2] = {abs(posDaughter->GetPdgCode()),abs(negDaughter->GetPdgCode())};
2048 if(posDaughter->GetMother() != negDaughter->GetMother()){
2049 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
2050 fCharPhotonMCInfo = 1;
2053 else if(posDaughter->GetMother() == -1){
2054 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
2055 fCharPhotonMCInfo = 1;
2059 if(pdgCode[0]!=11 || pdgCode[1]!=11){
2060 fCharPhotonMCInfo = 1;
2061 return; //One Particle is not a electron
2064 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()){
2065 fCharPhotonMCInfo = 1;
2066 return; // Same Charge
2069 AliAODMCParticle *Photon = (AliAODMCParticle*) AODMCTrackArray->At(posDaughter->GetMother());
2070 if(Photon->GetPdgCode() != 22){
2071 fCharPhotonMCInfo = 1;
2072 return; // Mother is no Photon
2075 if(((posDaughter->GetMCProcessCode())) != 5 || ((negDaughter->GetMCProcessCode())) != 5){
2076 fCharPhotonMCInfo = 1;
2077 return;// check if the daughters come from a conversion
2079 // STILL A BUG IN ALIROOT >>8 HAS TPO BE REMOVED AFTER FIX
2084 if(fIsFromMBHeader){
2085 fHistoTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
2086 if (fDoPhotonQA > 0) fHistoTrueConvGammaEta[fiCut]->Fill(TruePhotonCandidate->Eta());
2088 if(Photon->IsPrimary()){
2089 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
2090 if(fIsFromMBHeader){
2091 fCharPhotonMCInfo = 6;
2092 fHistoTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
2093 fHistoTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
2095 // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
2097 if(fIsFromMBHeader){
2098 fHistoTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
2099 fCharPhotonMCInfo = 2;
2100 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
2101 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 3122){
2102 fCharPhotonMCInfo = 5;
2103 fHistoTrueSecondaryConvGammaFromXFromLambdaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
2105 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
2106 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 310){
2107 fCharPhotonMCInfo = 4;
2108 fHistoTrueSecondaryConvGammaFromXFromK0sPt[fiCut]->Fill(TruePhotonCandidate->Pt());
2110 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
2111 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 221){
2112 fCharPhotonMCInfo = 3;
2116 TruePhotonCandidate->SetIsTrueConvertedPhoton();
2119 //________________________________________________________________________
2120 void AliAnalysisTaskGammaConvCalo::ProcessTruePhotonCandidates(AliAODConversionPhoton *TruePhotonCandidate)
2123 Double_t magField = fInputEvent->GetMagneticField();
2124 if( magField < 0.0 ){
2131 // Process True Photons
2132 TParticle *posDaughter = TruePhotonCandidate->GetPositiveMCDaughter(fMCStack);
2133 TParticle *negDaughter = TruePhotonCandidate->GetNegativeMCDaughter(fMCStack);
2134 fCharPhotonMCInfo = 0;
2136 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
2137 Int_t pdgCode[2] = {abs(posDaughter->GetPdgCode()),abs(negDaughter->GetPdgCode())};
2138 fCharPhotonMCInfo = 1;
2139 if(posDaughter->GetMother(0) != negDaughter->GetMother(0)){
2140 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
2143 else if(posDaughter->GetMother(0) == -1){
2144 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
2148 if(pdgCode[0]!=11 || pdgCode[1]!=11) return; //One Particle is not a electron
2150 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()) return; // Same Charge
2152 TParticle *Photon = TruePhotonCandidate->GetMCParticle(fMCStack);
2154 if(Photon->GetPdgCode() != 22){
2155 return; // Mother is no Photon
2158 if(posDaughter->GetUniqueID() != 5 || negDaughter->GetUniqueID() !=5) return;// check if the daughters come from a conversion
2161 if(fIsFromMBHeader){
2162 fHistoTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
2163 if (fDoPhotonQA > 0) fHistoTrueConvGammaEta[fiCut]->Fill(TruePhotonCandidate->Eta());
2165 if(posDaughter->GetMother(0) <= fMCStack->GetNprimary()){
2166 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
2167 if(fIsFromMBHeader){
2168 fCharPhotonMCInfo = 6;
2169 fHistoTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
2170 fHistoTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
2172 // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
2174 if(fIsFromMBHeader){
2175 fCharPhotonMCInfo = 2;
2176 fHistoTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
2177 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
2178 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 3122){
2179 fHistoTrueSecondaryConvGammaFromXFromLambdaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
2180 fCharPhotonMCInfo = 5;
2182 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
2183 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 310){
2184 fHistoTrueSecondaryConvGammaFromXFromK0sPt[fiCut]->Fill(TruePhotonCandidate->Pt());
2185 fCharPhotonMCInfo = 4;
2187 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
2188 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 221){
2189 fCharPhotonMCInfo = 3;
2193 TruePhotonCandidate->SetIsTrueConvertedPhoton();
2196 //________________________________________________________________________
2197 void AliAnalysisTaskGammaConvCalo::ProcessAODMCParticles()
2200 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
2201 if (AODMCTrackArray == NULL) return;
2203 // Loop over all primary MC particle
2204 for(Int_t i = 0; i < AODMCTrackArray->GetEntriesFast(); i++) {
2206 AliAODMCParticle* particle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(i));
2207 if (!particle) continue;
2208 if (!particle->IsPrimary()) continue;
2210 Int_t isMCFromMBHeader = -1;
2211 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
2212 isMCFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
2213 if(isMCFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
2216 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(particle->Phi(),fEventPlaneAngle,kFALSE)) continue;
2217 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kFALSE)){
2218 fHistoMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
2219 if (abs(particle->Eta()) < 0.66 ){
2220 if (particle->Phi() > 1.39626 && particle->Phi() < 3.125) fHistoMCAllGammaEMCALAccPt[fiCut]->Fill(particle->Pt());
2222 if(particle->GetMother() >-1){ // Meson Decay Gamma
2223 switch((static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetMother())))->GetPdgCode()){
2225 fHistoMCDecayGammaPi0Pt[fiCut]->Fill(particle->Pt());
2228 fHistoMCDecayGammaRhoPt[fiCut]->Fill(particle->Pt());
2231 fHistoMCDecayGammaEtaPt[fiCut]->Fill(particle->Pt());
2234 fHistoMCDecayGammaOmegaPt[fiCut]->Fill(particle->Pt());
2237 fHistoMCDecayGammaEtapPt[fiCut]->Fill(particle->Pt());
2240 fHistoMCDecayGammaPhiPt[fiCut]->Fill(particle->Pt());
2243 fHistoMCDecayGammaSigmaPt[fiCut]->Fill(particle->Pt());
2248 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kTRUE)){
2250 for(Int_t daughterIndex=particle->GetDaughter(0);daughterIndex<=particle->GetDaughter(1);daughterIndex++){
2251 AliAODMCParticle *tmpDaughter = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(daughterIndex));
2252 if(!tmpDaughter) continue;
2253 if(abs(tmpDaughter->GetPdgCode()) == 11){
2254 rConv = sqrt( (tmpDaughter->Xv()*tmpDaughter->Xv()) + (tmpDaughter->Yv()*tmpDaughter->Yv()) );
2257 fHistoMCConvGammaPt[fiCut]->Fill(particle->Pt());
2258 if (fDoPhotonQA > 0){
2259 fHistoMCConvGammaR[fiCut]->Fill(rConv);
2260 fHistoMCConvGammaEta[fiCut]->Fill(particle->Eta());
2263 // Converted MC Gamma
2264 if(fDoMesonAnalysis){
2265 if(particle->GetPdgCode() == 310 && fDoMesonQA > 0){
2266 Double_t mesonY = 10.;
2267 if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
2268 mesonY=10.-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
2270 mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
2272 Float_t weightedK0s= 1;
2273 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
2274 if (particle->Pt()>0.005){
2275 weightedK0s= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
2276 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
2279 fHistoMCK0sPt[fiCut]->Fill(particle->Pt(),weightedK0s);
2280 fHistoMCK0sWOWeightPt[fiCut]->Fill(particle->Pt());
2281 fHistoMCK0sPtY[fiCut]->Fill(particle->Pt(),mesonY,weightedK0s);
2283 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2284 ->MesonIsSelectedAODMC(particle,AODMCTrackArray,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
2285 AliAODMCParticle* daughter0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(0)));
2286 AliAODMCParticle* daughter1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(1)));
2287 Float_t weighted= 1;
2288 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
2289 if (particle->Pt()>0.005){
2290 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
2291 // if(particle->GetPdgCode() == 221){
2292 // cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
2296 Double_t mesonY = 10.;
2297 if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
2298 mesonY=10.-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
2300 mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
2303 Double_t alpha = -1;
2304 if (particle->GetPdgCode() == 111 || particle->GetPdgCode() == 221){
2305 alpha = TMath::Abs((daughter0->E() - daughter1->E()))/(daughter0->E() + daughter1->E());
2309 if(particle->GetPdgCode() == 111){
2310 fHistoMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
2311 fHistoMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
2312 if (fDoMesonQA > 0){
2313 fHistoMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
2314 fHistoMCPi0PtAlpha[fiCut]->Fill(particle->Pt(),alpha); // All MC Pi0
2316 } else if(particle->GetPdgCode() == 221){
2317 fHistoMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
2318 fHistoMCEtaWOWeightPt[fiCut]->Fill(particle->Pt());
2319 if (fDoMesonQA > 0){
2320 fHistoMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
2321 fHistoMCEtaPtAlpha[fiCut]->Fill(particle->Pt(),alpha); // All MC Pi0
2325 // Check the acceptance for both gammas
2326 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter0,AODMCTrackArray,kFALSE) &&
2327 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter1,AODMCTrackArray,kFALSE) &&
2328 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter0->Phi(),fEventPlaneAngle,kFALSE) &&
2329 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter1->Phi(),fEventPlaneAngle,kFALSE)){
2331 if(particle->GetPdgCode() == 111){
2332 fHistoMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
2333 } else if(particle->GetPdgCode() == 221){
2334 fHistoMCEtaInAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Eta with gamma in acc
2342 //________________________________________________________________________
2343 void AliAnalysisTaskGammaConvCalo::ProcessMCParticles()
2345 // Loop over all primary MC particle
2346 for(Int_t i = 0; i < fMCStack->GetNprimary(); i++) {
2347 TParticle* particle = (TParticle *)fMCStack->Particle(i);
2348 if (!particle) continue;
2350 Int_t isMCFromMBHeader = -1;
2351 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
2352 isMCFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
2353 if(isMCFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
2356 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(particle->Phi(),fEventPlaneAngle,kFALSE)) continue;
2357 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kFALSE)){
2358 fHistoMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
2359 if (abs(particle->Eta()) < 0.66 ){
2360 if (particle->Phi() > 1.39626 && particle->Phi() < 3.125) fHistoMCAllGammaEMCALAccPt[fiCut]->Fill(particle->Pt());
2363 if(particle->GetMother(0) >-1){ // Meson Decay Gamma
2364 switch(fMCStack->Particle(particle->GetMother(0))->GetPdgCode()){
2366 fHistoMCDecayGammaPi0Pt[fiCut]->Fill(particle->Pt());
2369 fHistoMCDecayGammaRhoPt[fiCut]->Fill(particle->Pt());
2372 fHistoMCDecayGammaEtaPt[fiCut]->Fill(particle->Pt());
2375 fHistoMCDecayGammaOmegaPt[fiCut]->Fill(particle->Pt());
2378 fHistoMCDecayGammaEtapPt[fiCut]->Fill(particle->Pt());
2381 fHistoMCDecayGammaPhiPt[fiCut]->Fill(particle->Pt());
2384 fHistoMCDecayGammaSigmaPt[fiCut]->Fill(particle->Pt());
2389 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kTRUE)){
2390 fHistoMCConvGammaPt[fiCut]->Fill(particle->Pt());
2391 if (fDoPhotonQA > 0){
2392 fHistoMCConvGammaR[fiCut]->Fill(((TParticle*)fMCStack->Particle(particle->GetFirstDaughter()))->R());
2393 fHistoMCConvGammaEta[fiCut]->Fill(particle->Eta());
2395 } // Converted MC Gamma
2396 if(fDoMesonAnalysis){
2397 if(particle->GetPdgCode() == 310 && fDoMesonQA > 0){
2398 Double_t mesonY = 10.;
2399 if(particle->Energy() - particle->Pz() == 0 || particle->Energy() + particle->Pz() == 0){
2400 mesonY=10.-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
2402 mesonY = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())))-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
2404 Float_t weightedK0s= 1;
2405 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
2406 if (particle->Pt()>0.005){
2407 weightedK0s= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
2408 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
2411 if (fMCStack->IsPhysicalPrimary(i)){
2412 fHistoMCK0sPt[fiCut]->Fill(particle->Pt(),weightedK0s);
2413 fHistoMCK0sWOWeightPt[fiCut]->Fill(particle->Pt());
2414 fHistoMCK0sPtY[fiCut]->Fill(particle->Pt(),mesonY,weightedK0s);
2417 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2418 ->MesonIsSelectedMC(particle,fMCStack,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
2419 TParticle* daughter0 = (TParticle*)fMCStack->Particle(particle->GetFirstDaughter());
2420 TParticle* daughter1 = (TParticle*)fMCStack->Particle(particle->GetLastDaughter());
2422 Float_t weighted= 1;
2423 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
2424 if (particle->Pt()>0.005){
2425 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
2426 // if(particle->GetPdgCode() == 221){
2427 // cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
2431 Double_t mesonY = 10.;
2432 if(particle->Energy() - particle->Pz() == 0 || particle->Energy() + particle->Pz() == 0){
2433 mesonY=10.-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
2435 mesonY = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())))-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
2438 Double_t alpha = -1;
2439 if (particle->GetPdgCode() == 111 || particle->GetPdgCode() == 221){
2440 alpha = TMath::Abs((daughter0->Energy() - daughter1->Energy()))/(daughter0->Energy() + daughter1->Energy());
2443 if(particle->GetPdgCode() == 111){
2444 fHistoMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
2445 fHistoMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
2446 if (fDoMesonQA > 0){
2447 fHistoMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
2448 fHistoMCPi0PtAlpha[fiCut]->Fill(particle->Pt(),alpha); // All MC Pi0
2450 } else if(particle->GetPdgCode() == 221){
2451 fHistoMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
2452 fHistoMCEtaWOWeightPt[fiCut]->Fill(particle->Pt());
2453 if (fDoMesonQA > 0){
2454 fHistoMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
2455 fHistoMCEtaPtAlpha[fiCut]->Fill(particle->Pt(),alpha); // All MC Pi0
2459 // Check the acceptance for both gammas
2460 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter0,fMCStack,kFALSE) &&
2461 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter1,fMCStack,kFALSE) &&
2462 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter0->Phi(),fEventPlaneAngle,kFALSE) &&
2463 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter1->Phi(),fEventPlaneAngle,kFALSE)){
2465 if(particle->GetPdgCode() == 111){
2466 fHistoMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
2467 } else if(particle->GetPdgCode() == 221){
2468 fHistoMCEtaInAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Eta with gamma in acc
2476 for(Int_t i = fMCStack->GetNprimary(); i < fMCStack->GetNtrack(); i++) {
2477 TParticle* particle = (TParticle *)fMCStack->Particle(i);
2478 if (!particle) continue;
2480 Int_t isMCFromMBHeader = -1;
2481 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
2482 isMCFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
2483 if(isMCFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
2486 if(fDoMesonAnalysis){
2487 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelectedMC(particle,fMCStack,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
2488 Float_t weighted= 1;
2489 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
2490 if (particle->Pt()>0.005){
2491 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
2492 // if(particle->GetPdgCode() == 221){
2493 // cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
2498 if(particle->GetPdgCode() == 111){
2499 Int_t pdgCode = ((TParticle*)fMCStack->Particle( particle->GetFirstMother() ))->GetPdgCode();
2500 Int_t source = GetSourceClassification(111,pdgCode);
2501 fHistoMCSecPi0PtvsSource[fiCut]->Fill(particle->Pt(),source,weighted); // All MC Pi0
2502 fHistoMCSecPi0Source[fiCut]->Fill(pdgCode);
2503 } else if(particle->GetPdgCode() == 221){
2504 Int_t pdgCode = ((TParticle*)fMCStack->Particle( particle->GetFirstMother() ))->GetPdgCode();
2505 fHistoMCSecEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
2506 fHistoMCSecEtaSource[fiCut]->Fill(pdgCode);
2514 //________________________________________________________________________
2515 void AliAnalysisTaskGammaConvCalo::CalculatePi0Candidates(){
2517 // Conversion Gammas
2518 if(fGammaCandidates->GetEntries()>0){
2521 Double_t vertex[3] = {0};
2522 InputEvent()->GetPrimaryVertex()->GetXYZ(vertex);
2524 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries();firstGammaIndex++){
2525 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
2526 if (gamma0==NULL) continue;
2528 for(Int_t secondGammaIndex=0;secondGammaIndex<fClusterCandidates->GetEntries();secondGammaIndex++){
2529 Bool_t matched = kFALSE;
2530 AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fClusterCandidates->At(secondGammaIndex));
2531 if (gamma1==NULL) continue;
2533 if (gamma1->GetIsCaloPhoton()){
2534 AliVCluster* cluster = fInputEvent->GetCaloCluster(gamma1->GetCaloClusterRef());
2535 matched = ((AliCaloPhotonCuts*)fClusterCutArray->At(fiCut))->MatchConvPhotonToCluster(gamma0,cluster, fInputEvent );
2538 AliAODConversionMother *pi0cand = new AliAODConversionMother(gamma0,gamma1);
2539 pi0cand->SetLabels(firstGammaIndex,secondGammaIndex);
2543 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(pi0cand,kTRUE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift()))){
2545 fHistoMotherMatchedInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
2547 fHistoMotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
2549 // fill new histograms
2551 fHistoPhotonPairPtconv[fiCut]->Fill(pi0cand->M(),gamma0->Pt());
2552 if(pi0cand->GetAlpha()<0.1)
2553 fHistoMotherInvMassEalpha[fiCut]->Fill(pi0cand->M(),pi0cand->E());
2555 if (fDoMesonQA > 0){
2556 if ( pi0cand->M() > 0.05 && pi0cand->M() < 0.17){
2557 fHistoMotherPi0PtY[fiCut]->Fill(pi0cand->Pt(),pi0cand->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2558 fHistoMotherPi0PtAlpha[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetAlpha());
2559 fHistoMotherPi0PtOpenAngle[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetOpeningAngle());
2560 fHistoMotherPi0ConvPhotonEtaPhi[fiCut]->Fill(gamma0->GetPhotonPhi(), gamma0->GetPhotonEta());
2562 if ( pi0cand->M() > 0.45 && pi0cand->M() < 0.65){
2563 fHistoMotherEtaPtY[fiCut]->Fill(pi0cand->Pt(),pi0cand->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2564 fHistoMotherEtaPtAlpha[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetAlpha());
2565 fHistoMotherEtaPtOpenAngle[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetOpeningAngle());
2566 fHistoMotherEtaConvPhotonEtaPhi[fiCut]->Fill(gamma0->GetPhotonPhi(), gamma0->GetPhotonEta());
2569 if(fDoTHnSparse && ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->DoBGCalculation()){
2573 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->BackgroundHandlerType() == 0){
2574 zbin = fBGHandler[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
2575 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2576 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
2578 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
2581 zbin = fBGHandlerRP[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
2582 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2583 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
2585 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
2588 Double_t sparesFill[4] = {pi0cand->M(),pi0cand->Pt(),(Double_t)zbin,(Double_t)mbin};
2589 fSparseMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
2594 if(fInputEvent->IsA()==AliESDEvent::Class())
2595 ProcessTrueMesonCandidates(pi0cand,gamma0,gamma1, matched);
2596 if(fInputEvent->IsA()==AliAODEvent::Class())
2597 ProcessTrueMesonCandidatesAOD(pi0cand,gamma0,gamma1, matched);
2600 if (fDoMesonQA == 1){
2601 fHistoMotherInvMassECalib[fiCut]->Fill(pi0cand->M(),gamma1->E());
2602 if(pi0cand->GetAlpha()<0.1)
2603 fHistoMotherInvMassECalibalpha[fiCut]->Fill(pi0cand->M(),gamma1->E());
2613 //______________________________________________________________________
2614 void AliAnalysisTaskGammaConvCalo::ProcessTrueMesonCandidates(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1, Bool_t matched)
2616 // Process True Mesons
2617 if(TrueGammaCandidate0->GetV0Index()<fInputEvent->GetNumberOfV0s()){
2618 Bool_t isTruePi0 = kFALSE;
2619 Bool_t isTrueEta = kFALSE;
2620 Int_t gamma0MCLabel = -1;
2621 Int_t gamma0MotherLabel = -1;
2622 if (TrueGammaCandidate0->IsTrueConvertedPhoton()){
2623 gamma0MCLabel = TrueGammaCandidate0->GetMCParticleLabel(fMCStack);
2624 TParticle * gammaMC0 = (TParticle*)fMCStack->Particle(gamma0MCLabel);
2625 gamma0MotherLabel=gammaMC0->GetFirstMother();
2628 if (!TrueGammaCandidate1->GetIsCaloPhoton()) AliFatal("CaloPhotonFlag has not been set. Aborting");
2630 Int_t gamma1MCLabel = TrueGammaCandidate1->GetCaloPhotonMCLabel(0); // get most probable MC label
2631 Int_t gamma1MotherLabel = -1;
2634 if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
2635 // Daughters Gamma 1
2636 TParticle * gammaMC1 = (TParticle*)fMCStack->Particle(gamma1MCLabel);
2637 if (TrueGammaCandidate1->IsLargestComponentPhoton() || TrueGammaCandidate1->IsLargestComponentElectron()){ // largest component is electro magnetic
2638 // get mother of interest (pi0 or eta)
2639 if (TrueGammaCandidate1->IsLargestComponentPhoton()){ // for photons its the direct mother
2640 gamma1MotherLabel=gammaMC1->GetMother(0);
2641 } else if (TrueGammaCandidate1->IsLargestComponentElectron()){ // for electrons its either the direct mother or for conversions the grandmother
2642 if (TrueGammaCandidate1->IsConversion()) gamma1MotherLabel=fMCStack->Particle(gammaMC1->GetMother(0))->GetMother(0);
2643 else gamma1MotherLabel=gammaMC1->GetMother(0);
2646 if (fDoMesonQA > 0) fHistoTrueMotherCaloEMNonLeadingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2650 if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
2651 if(((TParticle*)fMCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 111){
2654 if(((TParticle*)fMCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 221){
2659 if(isTruePi0 || isTrueEta){// True Pion or Eta
2661 if (isTruePi0)fHistoTruePi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2662 if (isTrueEta)fHistoTrueEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2664 if (fDoMesonQA > 0){
2665 if (TrueGammaCandidate1->IsLargestComponentPhoton() && !matched){
2666 if(isTruePi0) fHistoTruePi0CaloPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2667 if(isTrueEta) fHistoTrueEtaCaloPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2669 if (TrueGammaCandidate1->IsLargestComponentElectron() && !matched){
2670 if(isTruePi0) fHistoTruePi0CaloElectronInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2671 if(isTrueEta) fHistoTrueEtaCaloElectronInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2673 if (TrueGammaCandidate1->IsLargestComponentElectron() && TrueGammaCandidate1->IsConversion() ){
2674 if (isTruePi0 && !matched)fHistoTruePi0CaloConvertedPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2675 if (isTrueEta && !matched)fHistoTrueEtaCaloConvertedPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2676 if ((TrueGammaCandidate0->GetMCLabelPositive() == gamma1MCLabel || TrueGammaCandidate0->GetMCLabelNegative() == gamma1MCLabel) && isTruePi0){
2677 fHistoTruePi0CaloConvertedPhotonMatchedInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2679 if ((TrueGammaCandidate0->GetMCLabelPositive() == gamma1MCLabel || TrueGammaCandidate0->GetMCLabelNegative() == gamma1MCLabel) && isTrueEta){
2680 fHistoTrueEtaCaloConvertedPhotonMatchedInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2683 if ((TrueGammaCandidate1->IsMerged() || TrueGammaCandidate1->IsMergedPartConv() || TrueGammaCandidate1->IsDalitzMerged()) && !matched ){
2684 if (isTruePi0 )fHistoTruePi0CaloMergedClusterInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2685 if (isTrueEta )fHistoTrueEtaCaloMergedClusterInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2687 if (TrueGammaCandidate1->IsMergedPartConv() && !matched){
2688 if (isTruePi0) fHistoTruePi0CaloMergedClusterPartConvInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2689 if (isTrueEta) fHistoTrueEtaCaloMergedClusterPartConvInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2693 if (fDoMesonQA > 0){
2695 if ( Pi0Candidate->M() > 0.05 && Pi0Candidate->M() < 0.17){
2696 fHistoTruePi0PtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2697 fHistoTruePi0PtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
2698 fHistoTruePi0PtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
2699 fHistoTrueMotherPi0ConvPhotonEtaPhi[fiCut]->Fill(TrueGammaCandidate0->GetPhotonPhi(), TrueGammaCandidate0->GetPhotonEta());
2701 } else if (isTrueEta){
2702 if ( Pi0Candidate->M() > 0.45 && Pi0Candidate->M() < 0.65){
2703 fHistoTrueEtaPtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2704 fHistoTrueEtaPtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
2705 fHistoTrueEtaPtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
2706 fHistoTrueMotherEtaConvPhotonEtaPhi[fiCut]->Fill(TrueGammaCandidate0->GetPhotonPhi(), TrueGammaCandidate0->GetPhotonEta());
2711 if(gamma0MotherLabel >= fMCStack->GetNprimary()){ // Secondary Meson
2712 Int_t secMotherLabel = ((TParticle*)fMCStack->Particle(gamma0MotherLabel))->GetMother(0);
2713 Float_t weightedSec= 1;
2714 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, fMCStack, fInputEvent) && fMCStack->Particle(secMotherLabel)->GetPdgCode()==310){
2715 weightedSec= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),secMotherLabel, fMCStack, fInputEvent)/2.; //invariant mass is additive thus the weight for the daughters has to be devide by two for the K0s at a certain pt
2716 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
2719 fHistoTrueSecondaryPi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2720 fHistoTrueSecondaryPi0PhotonPairPtconv[fiCut]->Fill(Pi0Candidate->M(),TrueGammaCandidate0->Pt(),weightedSec);
2721 if(CheckIfContainedInString(fStringRecTruePi0s[fiCut],gamma0MotherLabel)){
2722 fHistoTrueSecondaryPi0DCPtconv[fiCut]->Fill(TrueGammaCandidate0->Pt(),weightedSec);
2725 if (secMotherLabel >-1){
2726 if(fMCStack->Particle(secMotherLabel)->GetPdgCode()==310 && isTruePi0 ){
2727 fHistoTrueSecondaryPi0FromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2728 if (fDoMesonQA > 0)fHistoTrueK0sWithPi0DaughterMCPt[fiCut]->Fill(fMCStack->Particle(secMotherLabel)->Pt());
2730 if(fMCStack->Particle(secMotherLabel)->GetPdgCode()==221 && isTruePi0){
2731 fHistoTrueSecondaryPi0FromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2732 if (fDoMesonQA > 0)fHistoTrueEtaWithPi0DaughterMCPt[fiCut]->Fill(fMCStack->Particle(secMotherLabel)->Pt());
2734 if(fMCStack->Particle(secMotherLabel)->GetPdgCode()==3122 && isTruePi0){
2735 fHistoTrueSecondaryPi0FromLambdaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2736 if (fDoMesonQA > 0)fHistoTrueLambdaWithPi0DaughterMCPt[fiCut]->Fill(fMCStack->Particle(secMotherLabel)->Pt());
2739 } else { // Only primary pi0 for efficiency calculation
2740 Float_t weighted= 1;
2741 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, fMCStack, fInputEvent)){
2742 if (((TParticle*)fMCStack->Particle(gamma1MotherLabel))->Pt()>0.005){
2743 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, fMCStack, fInputEvent);
2744 // cout << "rec \t " <<gamma1MotherLabel << "\t" << weighted << endl;
2748 fHistoTruePrimaryPi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2749 fHistoTruePrimaryPi0PhotonPairPtconv[fiCut]->Fill(Pi0Candidate->M(),TrueGammaCandidate0->Pt(),weighted);
2750 fHistoTruePrimaryPi0W0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2751 fProfileTruePrimaryPi0WeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2752 if(CheckIfContainedInString(fStringRecTruePi0s[fiCut],gamma0MotherLabel)){
2753 fHistoTruePrimaryPi0DCPtconv[fiCut]->Fill(TrueGammaCandidate0->Pt(),weighted);
2756 } else if (isTrueEta) {
2757 fHistoTruePrimaryEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2758 fHistoTruePrimaryEtaPhotonPairPtconv[fiCut]->Fill(Pi0Candidate->M(),TrueGammaCandidate0->Pt(),weighted);
2759 fHistoTruePrimaryEtaW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2760 fProfileTruePrimaryEtaWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2761 if(CheckIfContainedInString(fStringRecTrueEtas[fiCut],gamma0MotherLabel)){
2762 fHistoTruePrimaryEtaDCPtconv[fiCut]->Fill(TrueGammaCandidate0->Pt(),weighted);
2766 if (fDoMesonQA > 0){
2767 if(isTruePi0){ // Only primary pi0 for resolution
2768 fHistoTruePrimaryPi0MCPtResolPt[fiCut]->Fill(((TParticle*)fMCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)fMCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)fMCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
2770 if (isTrueEta){ // Only primary eta for resolution
2771 fHistoTruePrimaryEtaMCPtResolPt[fiCut]->Fill(((TParticle*)fMCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)fMCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)fMCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
2776 } else if(!isTruePi0 && !isTrueEta){ // Background
2777 if (fDoMesonQA > 0){
2778 if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
2779 fHistoTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2780 } else { // No photon or without mother
2781 fHistoTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2785 if (isTrueEta && !matched){
2786 fStringRecTrueEtas[fiCut].Append(Form("%i,",gamma0MotherLabel));
2788 if (isTruePi0 && !matched){
2789 fStringRecTruePi0s[fiCut].Append(Form("%i,",gamma0MotherLabel));
2794 //______________________________________________________________________
2795 void AliAnalysisTaskGammaConvCalo::ProcessTrueMesonCandidatesAOD(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1, Bool_t matched)
2798 // Process True Mesons
2799 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
2800 if (AODMCTrackArray == NULL) return;
2801 Bool_t isTruePi0 = kFALSE;
2802 Bool_t isTrueEta = kFALSE;
2804 AliAODMCParticle *positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelPositive()));
2805 AliAODMCParticle *negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelNegative()));
2807 Int_t gamma0MCLabel = -1;
2808 Int_t gamma0MotherLabel = -1;
2809 if(!positiveMC||!negativeMC)
2812 if (TrueGammaCandidate0->IsTrueConvertedPhoton()){
2813 gamma0MCLabel = positiveMC->GetMother();
2814 AliAODMCParticle * gammaMC0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MCLabel));
2815 gamma0MotherLabel=gammaMC0->GetMother();
2818 if (!TrueGammaCandidate1->GetIsCaloPhoton()) AliFatal("CaloPhotonFlag has not been set. Aborting");
2819 Int_t gamma1MCLabel = TrueGammaCandidate1->GetCaloPhotonMCLabel(0); // get most probable MC label
2820 Int_t gamma1MotherLabel = -1;
2823 if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
2824 // Daughters Gamma 1
2825 AliAODMCParticle * gammaMC1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MCLabel));
2826 if (TrueGammaCandidate1->IsLargestComponentPhoton() || TrueGammaCandidate1->IsLargestComponentElectron()){ // largest component is electro magnetic
2827 // get mother of interest (pi0 or eta)
2828 if (TrueGammaCandidate1->IsLargestComponentPhoton()){ // for photons its the direct mother
2829 gamma1MotherLabel=gammaMC1->GetMother();
2830 } else if (TrueGammaCandidate1->IsLargestComponentElectron()){ // for electrons its either the direct mother or for conversions the grandmother
2831 if (TrueGammaCandidate1->IsConversion()){
2832 AliAODMCParticle * gammaGrandMotherMC1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gammaMC1->GetMother()));
2833 gamma1MotherLabel=gammaGrandMotherMC1->GetMother();
2834 } else gamma1MotherLabel=gammaMC1->GetMother();
2837 if (fDoMesonQA > 0) fHistoTrueMotherCaloEMNonLeadingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2841 if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
2842 if(((AliAODMCParticle*)AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 111){
2845 if(((AliAODMCParticle*)AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 221){
2850 if(isTruePi0 || isTrueEta){// True Pion or Eta
2852 if (isTruePi0)fHistoTruePi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2853 if (isTrueEta)fHistoTrueEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2855 if (fDoMesonQA > 0){
2856 if (TrueGammaCandidate1->IsLargestComponentPhoton() && !matched){
2857 if (isTruePi0) fHistoTruePi0CaloPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2858 if (isTrueEta) fHistoTrueEtaCaloPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2860 if (TrueGammaCandidate1->IsLargestComponentElectron() && !matched) {
2861 if (isTruePi0) fHistoTruePi0CaloElectronInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2862 if (isTrueEta) fHistoTrueEtaCaloElectronInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2864 if (TrueGammaCandidate1->IsLargestComponentElectron() && TrueGammaCandidate1->IsConversion()){
2865 if (isTruePi0 && !matched)fHistoTruePi0CaloConvertedPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2866 if (isTrueEta && !matched)fHistoTrueEtaCaloConvertedPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2867 if ((TrueGammaCandidate0->GetMCLabelPositive() == gamma1MCLabel || TrueGammaCandidate0->GetMCLabelNegative() == gamma1MCLabel) && isTruePi0)
2868 fHistoTruePi0CaloConvertedPhotonMatchedInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2869 if ((TrueGammaCandidate0->GetMCLabelPositive() == gamma1MCLabel || TrueGammaCandidate0->GetMCLabelNegative() == gamma1MCLabel) && isTrueEta)
2870 fHistoTrueEtaCaloConvertedPhotonMatchedInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2872 if ((TrueGammaCandidate1->IsMerged() || TrueGammaCandidate1->IsMergedPartConv() || TrueGammaCandidate1->IsDalitzMerged()) && !matched ){
2873 if (isTruePi0) fHistoTruePi0CaloMergedClusterInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2874 if (isTrueEta) fHistoTrueEtaCaloMergedClusterInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2876 if (TrueGammaCandidate1->IsMergedPartConv() && !matched) {
2877 if (isTruePi0) fHistoTruePi0CaloMergedClusterPartConvInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2878 if (isTrueEta) fHistoTrueEtaCaloMergedClusterPartConvInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2883 if (fDoMesonQA > 0){
2885 if ( Pi0Candidate->M() > 0.05 && Pi0Candidate->M() < 0.17){
2886 fHistoTruePi0PtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2887 fHistoTruePi0PtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
2888 fHistoTruePi0PtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
2889 fHistoTrueMotherPi0ConvPhotonEtaPhi[fiCut]->Fill(TrueGammaCandidate0->GetPhotonPhi(), TrueGammaCandidate0->GetPhotonEta());
2891 } else if (isTrueEta){
2892 if ( Pi0Candidate->M() > 0.45 && Pi0Candidate->M() < 0.65){
2893 fHistoTrueEtaPtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2894 fHistoTrueEtaPtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
2895 fHistoTrueEtaPtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
2896 fHistoTrueMotherEtaConvPhotonEtaPhi[fiCut]->Fill(TrueGammaCandidate0->GetPhotonPhi(), TrueGammaCandidate0->GetPhotonEta());
2900 if(!(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MotherLabel))->IsPrimary())){ // Secondary Meson
2901 Int_t secMotherLabel = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetMother();
2902 Float_t weightedSec= 1;
2903 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, 0x0, fInputEvent) && static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
2904 weightedSec= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),secMotherLabel, 0x0, fInputEvent)/2.; //invariant mass is additive thus the weight for the daughters has to be devide by two for the K0s at a certain pt
2905 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
2908 fHistoTrueSecondaryPi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2909 fHistoTrueSecondaryPi0PhotonPairPtconv[fiCut]->Fill(Pi0Candidate->M(),TrueGammaCandidate0->Pt(),weightedSec);
2910 if(CheckIfContainedInString(fStringRecTruePi0s[fiCut],gamma0MotherLabel)){
2911 fHistoTrueSecondaryPi0DCPtconv[fiCut]->Fill(TrueGammaCandidate0->Pt(),weightedSec);
2914 if (secMotherLabel >-1){
2915 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310 && isTruePi0){
2916 fHistoTrueSecondaryPi0FromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2917 if (fDoMesonQA > 0)fHistoTrueK0sWithPi0DaughterMCPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
2919 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==221 && isTruePi0){
2920 fHistoTrueSecondaryPi0FromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2921 if (fDoMesonQA > 0)fHistoTrueEtaWithPi0DaughterMCPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
2923 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==3122 && isTruePi0){
2924 fHistoTrueSecondaryPi0FromLambdaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2925 if (fDoMesonQA > 0)fHistoTrueLambdaWithPi0DaughterMCPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
2928 } else{ // Only primary pi0 for efficiency calculation
2929 Float_t weighted= 1;
2930 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, 0x0, fInputEvent)){
2931 if (static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt()>0.005){
2932 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, 0x0, fInputEvent);
2933 // cout << "rec \t " <<gamma1MotherLabel << "\t" << weighted << endl;
2937 fHistoTruePrimaryPi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2938 fHistoTruePrimaryPi0W0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2939 fHistoTruePrimaryPi0PhotonPairPtconv[fiCut]->Fill(Pi0Candidate->M(),TrueGammaCandidate0->Pt(),weighted);
2940 fProfileTruePrimaryPi0WeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2941 if(CheckIfContainedInString(fStringRecTruePi0s[fiCut],gamma0MotherLabel)){
2942 fHistoTruePrimaryPi0DCPtconv[fiCut]->Fill(TrueGammaCandidate0->Pt(),weighted);
2944 } else if (isTrueEta){
2945 fHistoTruePrimaryEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2946 fHistoTruePrimaryEtaW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2947 fHistoTruePrimaryEtaPhotonPairPtconv[fiCut]->Fill(Pi0Candidate->M(),TrueGammaCandidate0->Pt(),weighted);
2948 fProfileTruePrimaryEtaWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2949 if(CheckIfContainedInString(fStringRecTrueEtas[fiCut],gamma0MotherLabel)){
2950 fHistoTruePrimaryEtaDCPtconv[fiCut]->Fill(TrueGammaCandidate0->Pt(),weighted);
2953 if (fDoMesonQA > 0){
2954 if(isTruePi0){ // Only primary pi0 for resolution
2955 fHistoTruePrimaryPi0MCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
2956 (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
2959 if (isTrueEta){ // Only primary eta for resolution
2960 fHistoTruePrimaryEtaMCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
2961 (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
2966 } else if(!isTruePi0 && !isTrueEta) { // Background
2967 if (fDoMesonQA > 0){
2968 if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
2969 fHistoTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2970 } else { // No photon or without mother
2971 fHistoTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2976 if (isTrueEta && !matched){
2977 fStringRecTrueEtas[fiCut].Append(Form("%i,",gamma0MotherLabel));
2979 if (isTruePi0 && !matched){
2980 fStringRecTruePi0s[fiCut].Append(Form("%i,",gamma0MotherLabel));
2987 //________________________________________________________________________
2988 void AliAnalysisTaskGammaConvCalo::CalculateBackground(){
2990 Int_t zbin = fBGClusHandler[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
2993 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2994 mbin = fBGClusHandler[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
2996 mbin = fBGClusHandler[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
3000 AliGammaConversionAODBGHandler::GammaConversionVertex *bgEventVertex = NULL;
3001 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
3002 for(Int_t nEventsInBG=0;nEventsInBG<fBGClusHandler[fiCut]->GetNBGEvents();nEventsInBG++){
3003 AliGammaConversionAODVector *previousEventV0s = fBGClusHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
3004 if(fMoveParticleAccordingToVertex == kTRUE || ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->GetInPlaneOutOfPlaneCut() != 0){
3005 bgEventVertex = fBGClusHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
3008 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
3009 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
3010 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
3011 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
3012 if(fMoveParticleAccordingToVertex == kTRUE){
3014 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
3017 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->GetInPlaneOutOfPlaneCut() != 0){
3019 RotateParticleAccordingToEP(&previousGoodV0,bgEventVertex->fEP,fEventPlaneAngle);
3023 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
3024 backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
3025 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
3026 ->MesonIsSelected(backgroundCandidate,kFALSE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift()))){
3027 fHistoMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
3028 fHistoPhotonPairMixedEventPtconv[fiCut]->Fill(backgroundCandidate->M(),currentEventGoodV0.Pt());
3030 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
3031 fSparseMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
3034 delete backgroundCandidate;
3035 backgroundCandidate = 0x0;
3040 for(Int_t nEventsInBG=0;nEventsInBG <fBGClusHandler[fiCut]->GetNBGEvents();nEventsInBG++){
3041 AliGammaConversionAODVector *previousEventV0s = fBGClusHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
3042 if(previousEventV0s){
3043 if(fMoveParticleAccordingToVertex == kTRUE || ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->GetInPlaneOutOfPlaneCut() != 0 ){
3044 bgEventVertex = fBGClusHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
3046 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
3047 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
3048 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
3050 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
3052 if(fMoveParticleAccordingToVertex == kTRUE){
3054 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
3057 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->GetInPlaneOutOfPlaneCut() != 0){
3059 RotateParticleAccordingToEP(&previousGoodV0,bgEventVertex->fEP,fEventPlaneAngle);
3063 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
3064 backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
3065 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift()))){
3066 fHistoMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
3067 fHistoPhotonPairMixedEventPtconv[fiCut]->Fill(backgroundCandidate->M(),currentEventGoodV0.Pt());
3069 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
3070 fSparseMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
3073 delete backgroundCandidate;
3074 backgroundCandidate = 0x0;
3082 //________________________________________________________________________
3083 void AliAnalysisTaskGammaConvCalo::CalculateBackgroundRP(){
3089 zbin= fBGHandlerRP[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
3090 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
3091 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
3093 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
3098 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseRotationMethod()){
3099 // Correct for the number of rotations
3100 // BG is for rotation the same, except for factor NRotations
3101 Double_t weight=1./Double_t(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents());
3103 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries();firstGammaIndex++){
3105 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
3106 if (gamma0==NULL) continue;
3107 for(Int_t secondGammaIndex=firstGammaIndex+1;secondGammaIndex<fGammaCandidates->GetEntries();secondGammaIndex++){
3108 AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(secondGammaIndex));
3109 if (gamma1 == NULL) continue;
3110 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelected(gamma1,fInputEvent))continue;
3111 for(Int_t nRandom=0;nRandom<((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents();nRandom++){
3113 RotateParticle(gamma1);
3114 AliAODConversionMother backgroundCandidate(gamma0,gamma1);
3115 backgroundCandidate.CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
3116 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
3117 ->MesonIsSelected(&backgroundCandidate,kFALSE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
3118 fHistoMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate.M(),backgroundCandidate.Pt());
3119 fHistoPhotonPairMixedEventPtconv[fiCut]->Fill(backgroundCandidate.M(),gamma0->Pt());
3121 Double_t sparesFill[4] = {backgroundCandidate.M(),backgroundCandidate.Pt(),(Double_t)zbin,(Double_t)mbin};
3122 fSparseMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,weight);
3130 for(Int_t nEventsInBG=0;nEventsInBG <fBGHandlerRP[fiCut]->GetNBGEvents(fGammaCandidates,fInputEvent);nEventsInBG++){
3132 AliGammaConversionPhotonVector *previousEventGammas = fBGHandlerRP[fiCut]->GetBGGoodGammas(fGammaCandidates,fInputEvent,nEventsInBG);
3134 if(previousEventGammas){
3135 // test weighted background
3136 Double_t weight=1.0;
3137 // Correct for the number of eventmixing:
3138 // N gammas -> (N-1) + (N-2) +(N-3) ...+ (N-(N-1)) using sum formula sum(i)=N*(N-1)/2 -> N*(N-1)/2
3139 // real combinations (since you cannot combine a photon with its own)
3140 // but BG leads to N_{a}*N_{b} combinations
3141 weight*=0.5*(Double_t(fGammaCandidates->GetEntries()-1))/Double_t(previousEventGammas->size());
3143 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
3144 AliAODConversionPhoton *gamma0 = (AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
3145 for(UInt_t iPrevious=0;iPrevious<previousEventGammas->size();iPrevious++){
3147 AliAODConversionPhoton *gamma1 = (AliAODConversionPhoton*)(previousEventGammas->at(iPrevious));
3149 AliAODConversionMother backgroundCandidate(gamma0,gamma1);
3150 backgroundCandidate.CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
3151 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
3152 ->MesonIsSelected(&backgroundCandidate,kFALSE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
3153 fHistoMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate.M(),backgroundCandidate.Pt());
3154 fHistoPhotonPairMixedEventPtconv[fiCut]->Fill(backgroundCandidate.M(),gamma0->Pt());
3156 Double_t sparesFill[4] = {backgroundCandidate.M(),backgroundCandidate.Pt(),(Double_t)zbin,(Double_t)mbin};
3157 fSparseMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,weight);
3166 //________________________________________________________________________
3167 void AliAnalysisTaskGammaConvCalo::RotateParticle(AliAODConversionPhoton *gamma){
3168 Int_t fNDegreesPMBackground= ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->NDegreesRotation();
3169 Double_t nRadiansPM = fNDegreesPMBackground*TMath::Pi()/180;
3170 Double_t rotationValue = fRandom.Rndm()*2*nRadiansPM + TMath::Pi()-nRadiansPM;
3171 gamma->RotateZ(rotationValue);
3174 //________________________________________________________________________
3175 void AliAnalysisTaskGammaConvCalo::RotateParticleAccordingToEP(AliAODConversionPhoton *gamma, Double_t previousEventEP, Double_t thisEventEP){
3177 previousEventEP=previousEventEP+TMath::Pi();
3178 thisEventEP=thisEventEP+TMath::Pi();
3179 Double_t rotationValue= thisEventEP-previousEventEP;
3180 gamma->RotateZ(rotationValue);
3183 //________________________________________________________________________
3184 void AliAnalysisTaskGammaConvCalo::MoveParticleAccordingToVertex(AliAODConversionPhoton* particle,const AliGammaConversionAODBGHandler::GammaConversionVertex *vertex){
3185 //see header file for documentation
3187 Double_t dx = vertex->fX - fInputEvent->GetPrimaryVertex()->GetX();
3188 Double_t dy = vertex->fY - fInputEvent->GetPrimaryVertex()->GetY();
3189 Double_t dz = vertex->fZ - fInputEvent->GetPrimaryVertex()->GetZ();
3191 Double_t movedPlace[3] = {particle->GetConversionX() - dx,particle->GetConversionY() - dy,particle->GetConversionZ() - dz};
3192 particle->SetConversionPoint(movedPlace);
3194 //________________________________________________________________________
3195 void AliAnalysisTaskGammaConvCalo::UpdateEventByEventData(){
3196 //see header file for documentation
3197 if(fGammaCandidates->GetEntries() >0 ){
3198 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
3199 fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fV0Reader->GetNumberOfPrimaryTracks(),fEventPlaneAngle);
3200 fBGClusHandler[fiCut]->AddEvent(fClusterCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fV0Reader->GetNumberOfPrimaryTracks(),fEventPlaneAngle);
3201 } else { // means we use #V0s for multiplicity
3202 fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fGammaCandidates->GetEntries(),fEventPlaneAngle);
3203 fBGClusHandler[fiCut]->AddEvent(fClusterCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fGammaCandidates->GetEntries(),fEventPlaneAngle);
3209 //________________________________________________________________________
3210 void AliAnalysisTaskGammaConvCalo::FillPhotonCombinatorialBackgroundHist(AliAODConversionPhoton *TruePhotonCandidate, Int_t pdgCode[])
3212 // Combinatorial Bck = 0 ee, 1 ep,i 2 ek, 3 ep, 4 emu, 5 pipi, 6 pik, 7 pip, 8 pimu, 9 kk, 10 kp, 11 kmu, 12 pp, 13 pmu, 14 mumu, 15 Rest
3213 if(pdgCode[0]==11 && pdgCode[1]==11){if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),0);}
3214 else if( (pdgCode[0]==11 && pdgCode[1]==211) || (pdgCode[0]==211 && pdgCode[1]==11) )
3215 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),1);}
3216 else if( (pdgCode[0]==11 && pdgCode[1]==321) || (pdgCode[0]==321 && pdgCode[1]==11) )
3217 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),2);}
3218 else if( (pdgCode[0]==11 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==11) )
3219 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),3);}
3220 else if( (pdgCode[0]==11 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==11) )
3221 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),4);}
3222 else if( pdgCode[0]==211 && pdgCode[1]==211 ){if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),5);}
3223 else if( (pdgCode[0]==211 && pdgCode[1]==321) || (pdgCode[0]==321 && pdgCode[1]==211) )
3224 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),6);}
3225 else if( (pdgCode[0]==211 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==211) )
3226 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),7);}
3227 else if( (pdgCode[0]==211 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==211) )
3228 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),8);}
3229 else if( pdgCode[0]==321 && pdgCode[1]==321 ){if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),9);}
3230 else if( (pdgCode[0]==321 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==321) )
3231 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),10);}
3232 else if( (pdgCode[0]==321 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==321) )
3233 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),11);}
3234 else if( pdgCode[0]==2212 && pdgCode[1]==2212 ){if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),12);}
3235 else if( (pdgCode[0]==2212 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==2212) )
3236 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),13);}
3237 else if( pdgCode[0]==13 && pdgCode[1]==13 ){if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),14);}
3238 else {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),15);}
3240 //________________________________________________________________________
3241 void AliAnalysisTaskGammaConvCalo::RelabelAODPhotonCandidates(Bool_t mode){
3243 // Relabeling For AOD Event
3245 // MCLabel -> AODMCLabel
3248 fMCStackPos = new Int_t[fReaderGammas->GetEntries()];
3249 fMCStackNeg = new Int_t[fReaderGammas->GetEntries()];
3250 fESDArrayPos = new Int_t[fReaderGammas->GetEntries()];
3251 fESDArrayNeg = new Int_t[fReaderGammas->GetEntries()];
3254 for(Int_t iGamma = 0;iGamma<fReaderGammas->GetEntries();iGamma++){
3255 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(iGamma);
3256 if(!PhotonCandidate) continue;
3257 if(!mode){// Back to ESD Labels
3258 PhotonCandidate->SetMCLabelPositive(fMCStackPos[iGamma]);
3259 PhotonCandidate->SetMCLabelNegative(fMCStackNeg[iGamma]);
3260 PhotonCandidate->SetLabelPositive(fESDArrayPos[iGamma]);
3261 PhotonCandidate->SetLabelNegative(fESDArrayNeg[iGamma]);
3264 fMCStackPos[iGamma] = PhotonCandidate->GetMCLabelPositive();
3265 fMCStackNeg[iGamma] = PhotonCandidate->GetMCLabelNegative();
3266 fESDArrayPos[iGamma] = PhotonCandidate->GetTrackLabelPositive();
3267 fESDArrayNeg[iGamma] = PhotonCandidate->GetTrackLabelNegative();
3269 Bool_t AODLabelPos = kFALSE;
3270 Bool_t AODLabelNeg = kFALSE;
3272 for(Int_t i = 0; i<fInputEvent->GetNumberOfTracks();i++){
3273 AliAODTrack *tempDaughter = static_cast<AliAODTrack*>(fInputEvent->GetTrack(i));
3275 if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelPositive() ){
3276 PhotonCandidate->SetMCLabelPositive(abs(tempDaughter->GetLabel()));
3277 PhotonCandidate->SetLabelPositive(i);
3278 AODLabelPos = kTRUE;
3282 if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelNegative()){
3283 PhotonCandidate->SetMCLabelNegative(abs(tempDaughter->GetLabel()));
3284 PhotonCandidate->SetLabelNegative(i);
3285 AODLabelNeg = kTRUE;
3288 if(AODLabelNeg && AODLabelPos){
3292 if(!AODLabelPos || !AODLabelNeg){
3293 cout<<"WARNING!!! AOD TRACKS NOT FOUND FOR"<<endl;
3299 delete[] fMCStackPos;
3300 delete[] fMCStackNeg;
3301 delete[] fESDArrayPos;
3302 delete[] fESDArrayNeg;
3306 void AliAnalysisTaskGammaConvCalo::SetLogBinningXTH2(TH2* histoRebin){
3307 TAxis *axisafter = histoRebin->GetXaxis();
3308 Int_t bins = axisafter->GetNbins();
3309 Double_t from = axisafter->GetXmin();
3310 Double_t to = axisafter->GetXmax();
3311 Double_t *newbins = new Double_t[bins+1];
3313 Double_t factor = TMath::Power(to/from, 1./bins);
3314 for(Int_t i=1; i<=bins; ++i) newbins[i] = factor * newbins[i-1];
3315 axisafter->Set(bins, newbins);
3319 //________________________________________________________________________
3320 void AliAnalysisTaskGammaConvCalo::Terminate(const Option_t *)
3323 //fOutputContainer->Print(); // Will crash on GRID
3326 //________________________________________________________________________
3327 Int_t AliAnalysisTaskGammaConvCalo::GetSourceClassification(Int_t daughter, Int_t pdgCode){
3329 if (daughter == 111) {
3330 if (abs(pdgCode) == 310) return 1; // k0s
3331 else if (abs(pdgCode) == 3122) return 2; // Lambda
3332 else if (abs(pdgCode) == 130) return 3; // K0L
3333 else if (abs(pdgCode) == 2212) return 4; // proton
3334 else if (abs(pdgCode) == 2112) return 5; // neutron
3335 else if (abs(pdgCode) == 211) return 6; // pion
3336 else if (abs(pdgCode) == 321) return 7; // kaon
3337 else if (abs(pdgCode) == 113 || abs(pdgCode) == 213 ) return 8; // rho 0,+,-
3338 else if (abs(pdgCode) == 3222 || abs(pdgCode) == 3212 || abs(pdgCode) == 3112 ) return 9; // Sigma
3339 else if (abs(pdgCode) == 2224 || abs(pdgCode) == 2214 || abs(pdgCode) == 2114 || abs(pdgCode) == 1114 ) return 10; // Delta
3340 else if (abs(pdgCode) == 313 || abs(pdgCode) == 323 ) return 11; // K*
3347 //_________________________________________________________________________________
3348 Bool_t AliAnalysisTaskGammaConvCalo::CheckIfContainedInString(TString input, Int_t tobechecked){
3349 TObjArray *arr = input.Tokenize(",");
3350 for (Int_t i = 0; i < arr->GetEntriesFast();i++){
3351 TString tempStr = ((TObjString*)arr->At(i))->GetString();
3352 if (tempStr.Atoi() == tobechecked) return kTRUE;
3357 //_________________________________________________________________________________
3358 Bool_t AliAnalysisTaskGammaConvCalo::CheckIfContainedInStringAndAppend(TString &input, Int_t tobechecked){
3359 TObjArray *arr = input.Tokenize(",");
3360 Bool_t isContained = kFALSE;
3361 for (Int_t i = 0; i < arr->GetEntriesFast();i++){
3362 TString tempStr = ((TObjString*)arr->At(i))->GetString();
3363 if (tempStr.Atoi() == tobechecked) isContained= kTRUE;
3365 if (!isContained)input.Append(Form("%i,",tobechecked));
3369 //_________________________________________________________________________________
3370 void AliAnalysisTaskGammaConvCalo::ProcessConversionPhotonsForMissingTags (){
3372 if (!fMCStack) return;
3374 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries();firstGammaIndex++){
3375 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
3376 if (gamma0->IsTrueConvertedPhoton()){
3377 Int_t gamma0MotherLabel = -1;
3378 Int_t gamma0MCLabel = gamma0->GetMCParticleLabel(fMCStack);
3379 if(gamma0MCLabel != -1){
3380 TParticle * gammaMC0 = (TParticle*)fMCStack->Particle(gamma0MCLabel);
3381 gamma0MotherLabel=gammaMC0->GetFirstMother();
3382 if (gamma0MotherLabel>-1){
3383 if(((TParticle*)fMCStack->Particle(gamma0MotherLabel))->GetPdgCode() == 111){
3384 if (!CheckIfContainedInStringAndAppend(fStringRecTruePi0s[fiCut],gamma0MotherLabel)){
3385 if (gamma0MotherLabel >= fMCStack->GetNprimary()){
3386 Int_t secMotherLabel = ((TParticle*)fMCStack->Particle(gamma0MotherLabel))->GetMother(0);
3387 Float_t weightedSec= 1;
3388 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, fMCStack, fInputEvent) && fMCStack->Particle(secMotherLabel)->GetPdgCode()==310){
3389 weightedSec= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),secMotherLabel, fMCStack, fInputEvent)/2.; //invariant mass is additive thus the weight for the daughters has to be devide by two for the K0s at a certain pt
3391 fHistoTrueSecondaryPi0MissingPtconv[fiCut]->Fill(gamma0->Pt(),weightedSec);
3393 Float_t weighted= 1;
3394 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(gamma0MotherLabel, fMCStack, fInputEvent)){
3395 if (((TParticle*)fMCStack->Particle(gamma0MotherLabel))->Pt()>0.005){
3396 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma0MotherLabel, fMCStack, fInputEvent);
3399 fHistoTruePrimaryPi0MissingPtconv[fiCut]->Fill(gamma0->Pt(),weighted);
3402 } else if(((TParticle*)fMCStack->Particle(gamma0MotherLabel))->GetPdgCode() == 221){
3403 if (!CheckIfContainedInStringAndAppend(fStringRecTrueEtas[fiCut],gamma0MotherLabel)){
3404 Float_t weighted= 1;
3405 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(gamma0MotherLabel, fMCStack, fInputEvent)){
3406 if (((TParticle*)fMCStack->Particle(gamma0MotherLabel))->Pt()>0.005){
3407 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma0MotherLabel, fMCStack, fInputEvent);
3410 fHistoTruePrimaryEtaMissingPtconv[fiCut]->Fill(gamma0->Pt(),weighted);
3420 //_________________________________________________________________________________
3421 void AliAnalysisTaskGammaConvCalo::ProcessConversionPhotonsForMissingTagsAOD (){
3423 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
3425 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries();firstGammaIndex++){
3426 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
3428 if (gamma0->IsTrueConvertedPhoton()){
3429 AliAODMCParticle *positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0->GetMCLabelPositive()));
3430 AliAODMCParticle *negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0->GetMCLabelNegative()));
3432 Int_t gamma0MCLabel = -1;
3433 Int_t gamma0MotherLabel = -1;
3434 if(!positiveMC||!negativeMC)
3437 if (gamma0->IsTrueConvertedPhoton()){
3438 gamma0MCLabel = positiveMC->GetMother();
3439 AliAODMCParticle * gammaMC0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MCLabel));
3440 gamma0MotherLabel=gammaMC0->GetMother();
3442 if (gamma0MotherLabel>-1){
3443 if(((AliAODMCParticle*)AODMCTrackArray->At(gamma0MotherLabel))->GetPdgCode() == 111){
3444 if (!CheckIfContainedInStringAndAppend(fStringRecTruePi0s[fiCut],gamma0MotherLabel)){
3445 if (!(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MotherLabel))->IsPrimary())){
3446 Int_t secMotherLabel = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MotherLabel))->GetMother();
3447 Float_t weightedSec= 1;
3448 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, 0x0, fInputEvent) && static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
3449 weightedSec= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),secMotherLabel, 0x0, fInputEvent)/2.; //invariant mass is additive thus the weight for the daughters has to be devide by two for the K0s at a certain pt
3451 fHistoTrueSecondaryPi0MissingPtconv[fiCut]->Fill(gamma0->Pt(),weightedSec);
3453 Float_t weighted= 1;
3454 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(gamma0MotherLabel, 0x0, fInputEvent)){
3455 if (static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MotherLabel))->Pt()>0.005){
3456 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma0MotherLabel, 0x0, fInputEvent);
3459 fHistoTruePrimaryPi0MissingPtconv[fiCut]->Fill(gamma0->Pt(),weighted);
3462 } else if(((AliAODMCParticle*)AODMCTrackArray->At(gamma0MotherLabel))->GetPdgCode() == 221){
3463 if (!CheckIfContainedInStringAndAppend(fStringRecTrueEtas[fiCut],gamma0MotherLabel)){
3464 Float_t weighted= 1;
3465 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(gamma0MotherLabel, 0x0, fInputEvent)){
3466 if (static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MotherLabel))->Pt()>0.005){
3467 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma0MotherLabel, 0x0, fInputEvent);
3470 fHistoTruePrimaryEtaMissingPtconv[fiCut]->Fill(gamma0->Pt(),weighted);