1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: Martin Wilde, Daniel Lohner, Friederike Bock *
7 * based on: on older version (see aliroot up to v5-04-42-AN) *
8 * AliAnalysisTaskGammaConversion.cxx *
9 * Authors: Kathrin Koch, Kenneth Aamodt, Ana Marin *
11 * Permission to use, copy, modify and distribute this software and its *
12 * documentation strictly for non-commercial purposes is hereby granted *
13 * without fee, provided that the above copyright notice appears in all *
14 * copies and that both the copyright notice and this permission notice *
15 * appear in the supporting documentation. The authors make no claims *
16 * about the suitability of this software for any purpose. It is *
17 * provided "as is" without express or implied warranty. *
18 **************************************************************************/
20 ////////////////////////////////////////////////
21 //---------------------------------------------
23 // Class used to do analysis on conversion pairs
24 //---------------------------------------------
25 ///////////////////////////////////////////////
33 #include "THnSparse.h"
36 #include "AliAnalysisTask.h"
37 #include "AliAnalysisManager.h"
38 #include "AliESDEvent.h"
39 #include "AliESDInputHandler.h"
40 #include "AliMCEventHandler.h"
41 #include "AliMCEvent.h"
42 #include "AliMCParticle.h"
43 #include "AliCentrality.h"
44 #include "AliESDVZERO.h"
45 #include "AliESDpid.h"
46 #include "AliAnalysisTaskGammaConvV1.h"
47 #include "AliVParticle.h"
48 #include "AliESDtrack.h"
49 #include "AliESDtrackCuts.h"
50 #include "AliKFVertex.h"
51 #include "AliV0ReaderV1.h"
52 #include "AliGenCocktailEventHeader.h"
53 #include "AliConversionAODBGHandlerRP.h"
54 #include "AliAODMCParticle.h"
55 #include "AliAODMCHeader.h"
56 #include "AliEventplane.h"
58 ClassImp(AliAnalysisTaskGammaConvV1)
60 //________________________________________________________________________
61 AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(): AliAnalysisTaskSE(),
76 fHeaderNameList(NULL),
79 fGammaCandidates(NULL),
81 fConversionCuts(NULL),
84 hESDConvGammaPt(NULL),
86 hESDConvGammaEta(NULL),
87 tESDConvGammaPtDcazCat(NULL),
94 hESDMotherInvMassPt(NULL),
95 sESDMotherInvMassPtZM(NULL),
96 hESDMotherBackInvMassPt(NULL),
97 sESDMotherBackInvMassPtZM(NULL),
98 hESDMotherInvMassEalpha(NULL),
99 hESDMotherPi0PtY(NULL),
100 hESDMotherEtaPtY(NULL),
101 hESDMotherPi0PtAlpha(NULL),
102 hESDMotherEtaPtAlpha(NULL),
103 hESDMotherPi0YEtaLowPtGamma(NULL),
104 hESDMotherPi0YEtaHighPtGamma(NULL),
105 hESDMotherEtaYEtaLowPtGamma(NULL),
106 hESDMotherEtaYEtaHighPtGamma(NULL),
109 hMCDecayGammaPi0Pt(NULL),
110 hMCDecayGammaRhoPt(NULL),
111 hMCDecayGammaEtaPt(NULL),
112 hMCDecayGammaOmegaPt(NULL),
113 hMCDecayGammaEtapPt(NULL),
114 hMCDecayGammaPhiPt(NULL),
115 hMCDecayGammaSigmaPt(NULL),
116 hMCConvGammaPt(NULL),
118 hMCConvGammaEta(NULL),
120 hMCPi0WOWeightPt(NULL),
127 hMCK0sWOWeightPt(NULL),
129 hESDTrueMotherInvMassPt(NULL),
130 hESDTruePrimaryMotherInvMassPt(NULL),
131 hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
132 pESDTruePrimaryMotherWeightsInvMassPt(NULL),
133 hESDTruePrimaryPi0MCPtResolPt(NULL),
134 hESDTruePrimaryEtaMCPtResolPt(NULL),
135 hESDTrueSecondaryMotherInvMassPt(NULL),
136 hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
137 hESDTrueK0sWithPi0DaughterMCPt(NULL),
138 hESDTrueSecondaryMotherFromEtaInvMassPt(NULL),
139 hESDTrueEtaWithPi0DaughterMCPt(NULL),
140 hESDTrueBckGGInvMassPt(NULL),
141 hESDTrueBckContInvMassPt(NULL),
142 hESDTruePi0PtY(NULL),
143 hESDTrueEtaPtY(NULL),
144 hESDTruePi0PtAlpha(NULL),
145 hESDTrueEtaPtAlpha(NULL),
146 hESDTruePi0YEtaLowPtGamma(NULL),
147 hESDTruePi0YEtaHighPtGamma(NULL),
148 hESDTrueEtaYEtaLowPtGamma(NULL),
149 hESDTrueEtaYEtaHighPtGamma(NULL),
150 hESDTrueMotherDalitzInvMassPt(NULL),
151 hESDTrueConvGammaPt(NULL),
152 hESDCombinatorialPt(NULL),
153 hESDTruePrimaryConvGammaPt(NULL),
154 hESDTruePrimaryConvGammaESDPtMCPt(NULL),
155 hESDTrueSecondaryConvGammaPt(NULL),
156 hESDTrueSecondaryConvGammaFromXFromK0sPt(NULL),
157 hESDTrueSecondaryConvGammaFromXFromLambdaPt(NULL),
158 hESDTrueDalitzPsiPairDeltaPhi(NULL),
159 hESDTrueGammaPsiPairDeltaPhi(NULL),
161 hNGoodESDTracks(NULL),
162 hNGammaCandidates(NULL),
165 tESDMesonsInvMassPtDcazMinDcazMaxFlag(NULL),
172 fEventPlaneAngle(-100),
174 fnGammaCandidates(0),
185 fMoveParticleAccordingToVertex(kTRUE),
187 fDoMesonAnalysis(kTRUE),
190 fIsFromMBHeader(kTRUE),
196 //________________________________________________________________________
197 AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(const char *name):
198 AliAnalysisTaskSE(name),
209 fPhotonDCAList(NULL),
213 fHeaderNameList(NULL),
216 fGammaCandidates(NULL),
218 fConversionCuts(NULL),
219 fMesonCutArray(NULL),
221 hESDConvGammaPt(NULL),
222 hESDConvGammaR(NULL),
223 hESDConvGammaEta(NULL),
224 tESDConvGammaPtDcazCat(NULL),
231 hESDMotherInvMassPt(NULL),
232 sESDMotherInvMassPtZM(NULL),
233 hESDMotherBackInvMassPt(NULL),
234 sESDMotherBackInvMassPtZM(NULL),
235 hESDMotherInvMassEalpha(NULL),
236 hESDMotherPi0PtY(NULL),
237 hESDMotherEtaPtY(NULL),
238 hESDMotherPi0PtAlpha(NULL),
239 hESDMotherEtaPtAlpha(NULL),
240 hESDMotherPi0YEtaLowPtGamma(NULL),
241 hESDMotherPi0YEtaHighPtGamma(NULL),
242 hESDMotherEtaYEtaLowPtGamma(NULL),
243 hESDMotherEtaYEtaHighPtGamma(NULL),
246 hMCDecayGammaPi0Pt(NULL),
247 hMCDecayGammaRhoPt(NULL),
248 hMCDecayGammaEtaPt(NULL),
249 hMCDecayGammaOmegaPt(NULL),
250 hMCDecayGammaEtapPt(NULL),
251 hMCDecayGammaPhiPt(NULL),
252 hMCDecayGammaSigmaPt(NULL),
253 hMCConvGammaPt(NULL),
255 hMCConvGammaEta(NULL),
257 hMCPi0WOWeightPt(NULL),
264 hMCK0sWOWeightPt(NULL),
266 hESDTrueMotherInvMassPt(NULL),
267 hESDTruePrimaryMotherInvMassPt(NULL),
268 hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
269 pESDTruePrimaryMotherWeightsInvMassPt(NULL),
270 hESDTruePrimaryPi0MCPtResolPt(NULL),
271 hESDTruePrimaryEtaMCPtResolPt(NULL),
272 hESDTrueSecondaryMotherInvMassPt(NULL),
273 hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
274 hESDTrueK0sWithPi0DaughterMCPt(NULL),
275 hESDTrueSecondaryMotherFromEtaInvMassPt(NULL),
276 hESDTrueEtaWithPi0DaughterMCPt(NULL),
277 hESDTrueBckGGInvMassPt(NULL),
278 hESDTrueBckContInvMassPt(NULL),
279 hESDTruePi0PtY(NULL),
280 hESDTrueEtaPtY(NULL),
281 hESDTruePi0PtAlpha(NULL),
282 hESDTrueEtaPtAlpha(NULL),
283 hESDTruePi0YEtaLowPtGamma(NULL),
284 hESDTruePi0YEtaHighPtGamma(NULL),
285 hESDTrueEtaYEtaLowPtGamma(NULL),
286 hESDTrueEtaYEtaHighPtGamma(NULL),
287 hESDTrueMotherDalitzInvMassPt(NULL),
288 hESDTrueConvGammaPt(NULL),
289 hESDCombinatorialPt(NULL),
290 hESDTruePrimaryConvGammaPt(NULL),
291 hESDTruePrimaryConvGammaESDPtMCPt(NULL),
292 hESDTrueSecondaryConvGammaPt(NULL),
293 hESDTrueSecondaryConvGammaFromXFromK0sPt(NULL),
294 hESDTrueSecondaryConvGammaFromXFromLambdaPt(NULL),
295 hESDTrueDalitzPsiPairDeltaPhi(NULL),
296 hESDTrueGammaPsiPairDeltaPhi(NULL),
298 hNGoodESDTracks(NULL),
299 hNGammaCandidates(NULL),
302 tESDMesonsInvMassPtDcazMinDcazMaxFlag(NULL),
309 fEventPlaneAngle(-100),
311 fnGammaCandidates(0),
322 fMoveParticleAccordingToVertex(kTRUE),
324 fDoMesonAnalysis(kTRUE),
327 fIsFromMBHeader(kTRUE),
330 // Define output slots here
331 DefineOutput(1, TList::Class());
334 AliAnalysisTaskGammaConvV1::~AliAnalysisTaskGammaConvV1()
336 if(fGammaCandidates){
337 delete fGammaCandidates;
338 fGammaCandidates = 0x0;
345 delete[] fBGHandlerRP;
349 //___________________________________________________________
350 void AliAnalysisTaskGammaConvV1::InitBack(){
352 const Int_t nDim = 4;
353 Int_t nBins[nDim] = {800,250,7,4};
354 Double_t xMin[nDim] = {0,0, 0,0};
355 Double_t xMax[nDim] = {0.8,25,7,4};
357 sESDMotherInvMassPtZM = new THnSparseF*[fnCuts];
358 sESDMotherBackInvMassPtZM = new THnSparseF*[fnCuts];
360 fBGHandler = new AliGammaConversionAODBGHandler*[fnCuts];
361 fBGHandlerRP = new AliConversionAODBGHandlerRP*[fnCuts];
362 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
363 if (((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->DoBGCalculation()){
364 TString cutstring = ((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber();
365 TString cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
367 Int_t collisionSystem = atoi((TString)(((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber())(0,1));
368 Int_t centMin = atoi((TString)(((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber())(1,1));
369 Int_t centMax = atoi((TString)(((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber())(2,1));
371 if(collisionSystem == 1 || collisionSystem == 2 ||
372 collisionSystem == 5 || collisionSystem == 8 ||
373 collisionSystem == 9){
374 centMin = centMin*10;
375 centMax = centMax*10;
376 if(centMax ==0 && centMax!=centMin) centMax=100;
378 else if(collisionSystem == 3 || collisionSystem == 6){
382 else if(collisionSystem == 4 || collisionSystem == 7){
383 centMin = ((centMin*5)+45);
384 centMax = ((centMax*5)+45);
387 fBackList[iCut] = new TList();
388 fBackList[iCut]->SetName(Form("%s_%s Back histograms",cutstring.Data(),cutstringMeson.Data()));
389 fBackList[iCut]->SetOwner(kTRUE);
390 fCutFolder[iCut]->Add(fBackList[iCut]);
392 sESDMotherBackInvMassPtZM[iCut] = new THnSparseF("Back_Back_InvMass_Pt_z_m","Back_Back_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
393 fBackList[iCut]->Add(sESDMotherBackInvMassPtZM[iCut]);
395 fMotherList[iCut] = new TList();
396 fMotherList[iCut]->SetName(Form("%s_%s Mother histograms",cutstring.Data(),cutstringMeson.Data()));
397 fMotherList[iCut]->SetOwner(kTRUE);
398 fCutFolder[iCut]->Add(fMotherList[iCut]);
400 sESDMotherInvMassPtZM[iCut] = new THnSparseF("Back_Mother_InvMass_Pt_z_m","Back_Mother_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
401 fMotherList[iCut]->Add(sESDMotherInvMassPtZM[iCut]);
403 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->BackgroundHandlerType() == 0){
404 fBGHandler[iCut] = new AliGammaConversionAODBGHandler(
405 collisionSystem,centMin,centMax,
406 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents(),
407 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseTrackMultiplicity());
408 fBGHandlerRP[iCut] = NULL;
411 fBGHandlerRP[iCut] = new AliConversionAODBGHandlerRP(
412 ((AliConversionCuts*)fCutArray->At(fiCut))->IsHeavyIon(),
413 ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity(),
414 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents());
415 fBGHandler[iCut] = NULL;
420 //________________________________________________________________________
421 void AliAnalysisTaskGammaConvV1::UserCreateOutputObjects()
425 if(fOutputContainer != NULL){
426 delete fOutputContainer;
427 fOutputContainer = NULL;
429 if(fOutputContainer == NULL){
430 fOutputContainer = new TList();
431 fOutputContainer->SetOwner(kTRUE);
434 // Array of current cut's gammas
435 fGammaCandidates = new TList();
437 fCutFolder = new TList*[fnCuts];
438 fESDList = new TList*[fnCuts];
439 fBackList = new TList*[fnCuts];
440 fMotherList = new TList*[fnCuts];
441 hNEvents = new TH1I*[fnCuts];
442 hNGoodESDTracks = new TH1I*[fnCuts];
443 hNGammaCandidates = new TH1I*[fnCuts];
444 hNV0Tracks = new TH1I*[fnCuts];
445 hEtaShift = new TProfile*[fnCuts];
446 hESDConvGammaPt = new TH1F*[fnCuts];
448 if (fDoPhotonQA == 2){
449 fPhotonDCAList = new TList*[fnCuts];
450 tESDConvGammaPtDcazCat = new TTree*[fnCuts];
452 if (fDoPhotonQA > 0){
453 hESDConvGammaR = new TH1F*[fnCuts];
454 hESDConvGammaEta = new TH1F*[fnCuts];
457 if(fDoMesonAnalysis){
458 hESDMotherInvMassPt = new TH2F*[fnCuts];
459 hESDMotherBackInvMassPt = new TH2F*[fnCuts];
460 hESDMotherInvMassEalpha = new TH2F*[fnCuts];
461 if (fDoMesonQA == 2){
462 fMesonDCAList = new TList*[fnCuts];
463 tESDMesonsInvMassPtDcazMinDcazMaxFlag = new TTree*[fnCuts];
466 hESDMotherPi0PtY = new TH2F*[fnCuts];
467 hESDMotherEtaPtY = new TH2F*[fnCuts];
468 hESDMotherPi0PtAlpha = new TH2F*[fnCuts];
469 hESDMotherEtaPtAlpha = new TH2F*[fnCuts];
470 hESDMotherPi0YEtaLowPtGamma = new TH2F*[fnCuts];
471 hESDMotherPi0YEtaHighPtGamma = new TH2F*[fnCuts];
472 hESDMotherEtaYEtaLowPtGamma = new TH2F*[fnCuts];
473 hESDMotherEtaYEtaHighPtGamma = new TH2F*[fnCuts];
477 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
479 TString cutstring = ((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber();
480 TString cutstringMeson = "NoMesonCut";
481 if(fDoMesonAnalysis)cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
483 fCutFolder[iCut] = new TList();
484 fCutFolder[iCut]->SetName(Form("Cut Number %s_%s",cutstring.Data(),cutstringMeson.Data()));
485 fCutFolder[iCut]->SetOwner(kTRUE);
486 fOutputContainer->Add(fCutFolder[iCut]);
487 fESDList[iCut] = new TList();
488 fESDList[iCut]->SetName(Form("%s_%s ESD histograms",cutstring.Data(),cutstringMeson.Data()));
489 fESDList[iCut]->SetOwner(kTRUE);
490 fCutFolder[iCut]->Add(fESDList[iCut]);
492 hNEvents[iCut] = new TH1I("NEvents","NEvents",9,-0.5,8.5);
493 hNEvents[iCut]->GetXaxis()->SetBinLabel(1,"Accepted");
494 hNEvents[iCut]->GetXaxis()->SetBinLabel(2,"Centrality");
495 hNEvents[iCut]->GetXaxis()->SetBinLabel(3,"Missing MC");
496 if (((AliConversionCuts*)fCutArray->At(iCut))->IsSpecialTrigger() == 4 ){
497 TString TriggerNames = "Not Trigger: ";
498 TriggerNames = TriggerNames+ ( (AliConversionCuts*)fCutArray->At(iCut))->GetSpecialTriggerName();
499 hNEvents[iCut]->GetXaxis()->SetBinLabel(4,TriggerNames.Data());
501 hNEvents[iCut]->GetXaxis()->SetBinLabel(4,"Trigger");
503 hNEvents[iCut]->GetXaxis()->SetBinLabel(5,"Vertex Z");
504 hNEvents[iCut]->GetXaxis()->SetBinLabel(6,"Cont. Vertex");
505 hNEvents[iCut]->GetXaxis()->SetBinLabel(7,"Pile-Up");
506 hNEvents[iCut]->GetXaxis()->SetBinLabel(8,"no SDD");
507 hNEvents[iCut]->GetXaxis()->SetBinLabel(9,"no V0AND");
508 fESDList[iCut]->Add(hNEvents[iCut]);
509 if(fIsHeavyIon) hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",4000,0,4000);
510 else hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",200,0,200);
511 fESDList[iCut]->Add(hNGoodESDTracks[iCut]);
512 if(fIsHeavyIon) hNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",100,0,100);
513 else hNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",50,0,50);
514 fESDList[iCut]->Add(hNGammaCandidates[iCut]);
515 if(fIsHeavyIon) hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",30000,0,30000);
516 else hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",2000,0,2000);
517 fESDList[iCut]->Add(hNV0Tracks[iCut]);
518 hEtaShift[iCut] = new TProfile("Eta Shift","Eta Shift",1, -0.5,0.5);
519 fESDList[iCut]->Add(hEtaShift[iCut]);
520 hESDConvGammaPt[iCut] = new TH1F("ESD_ConvGamma_Pt","ESD_ConvGamma_Pt",250,0,25);
521 fESDList[iCut]->Add(hESDConvGammaPt[iCut]);
523 if (fDoPhotonQA == 2){
524 fPhotonDCAList[iCut] = new TList();
525 fPhotonDCAList[iCut]->SetName(Form("%s_%s Photon DCA tree",cutstring.Data(),cutstringMeson.Data()));
526 fPhotonDCAList[iCut]->SetOwner(kTRUE);
527 fCutFolder[iCut]->Add(fPhotonDCAList[iCut]);
529 tESDConvGammaPtDcazCat[iCut] = new TTree("ESD_ConvGamma_Pt_Dcaz_R_Eta","ESD_ConvGamma_Pt_Dcaz_R_Eta_Cat");
530 tESDConvGammaPtDcazCat[iCut]->Branch("Pt",&fPtGamma,"fPtGamma/F");
531 tESDConvGammaPtDcazCat[iCut]->Branch("DcaZPhoton",&fDCAzPhoton,"fDCAzPhoton/F");
532 // tESDConvGammaPtDcazCat[iCut]->Branch("R",&fRConvPhoton,"fRConvPhoton/F");
533 // tESDConvGammaPtDcazCat[iCut]->Branch("Eta",&fEtaPhoton,"fEtaPhoton/F");
535 tESDConvGammaPtDcazCat[iCut]->Branch("cat",&iCatPhoton,"iCatPhoton/b");
537 tESDConvGammaPtDcazCat[iCut]->Branch("photonMCInfo",&iPhotonMCInfo,"iPhotonMCInfo/b");
539 fPhotonDCAList[iCut]->Add(tESDConvGammaPtDcazCat[iCut]);
542 if (fDoPhotonQA > 0){
543 hESDConvGammaR[iCut] = new TH1F("ESD_ConvGamma_R","ESD_ConvGamma_R",800,0,200);
544 fESDList[iCut]->Add(hESDConvGammaR[iCut]);
545 hESDConvGammaEta[iCut] = new TH1F("ESD_ConvGamma_Eta","ESD_ConvGamma_Eta",100,-4,4);
546 fESDList[iCut]->Add(hESDConvGammaEta[iCut]);
549 if(fDoMesonAnalysis){
550 hESDMotherInvMassPt[iCut] = new TH2F("ESD_Mother_InvMass_Pt","ESD_Mother_InvMass_Pt",800,0,0.8,250,0,25);
551 fESDList[iCut]->Add(hESDMotherInvMassPt[iCut]);
552 hESDMotherBackInvMassPt[iCut] = new TH2F("ESD_Background_InvMass_Pt","ESD_Background_InvMass_Pt",800,0,0.8,250,0,25);
553 fESDList[iCut]->Add(hESDMotherBackInvMassPt[iCut]);
554 hESDMotherInvMassEalpha[iCut] = new TH2F("ESD_Mother_InvMass_vs_E_alpha","ESD_Mother_InvMass_vs_E_alpha",800,0,0.8,250,0,25);
555 fESDList[iCut]->Add(hESDMotherInvMassEalpha[iCut]);
556 if (fDoMesonQA == 2){
557 fMesonDCAList[iCut] = new TList();
558 fMesonDCAList[iCut]->SetName(Form("%s_%s Meson DCA tree",cutstring.Data(),cutstringMeson.Data()));
559 fMesonDCAList[iCut]->SetOwner(kTRUE);
560 fCutFolder[iCut]->Add(fMesonDCAList[iCut]);
562 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut] = new TTree("ESD_Mesons_InvMass_Pt_DcazMin_DcazMax_Flag","ESD_Mesons_InvMass_Pt_DcazMin_DcazMax_Flag");
563 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("InvMass",&fInvMass,"fInvMass/F");
564 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("Pt",&fPt,"fPt/F");
565 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("DcaZMin",&fDCAzGammaMin,"fDCAzGammaMin/F");
566 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("DcaZMax",&fDCAzGammaMax,"fDCAzGammaMax/F");
567 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("kind",&iFlag,"iFlag/b");
569 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("mesonMCInfo",&iMesonMCInfo,"iMesonMCInfo/b");
571 fMesonDCAList[iCut]->Add(tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]);
574 if (fDoMesonQA > 0 ){
575 hESDMotherPi0PtY[iCut] = new TH2F("ESD_MotherPi0_Pt_Y","ESD_MotherPi0_Pt_Y",250,0,25,150,-1.5,1.5);
576 fESDList[iCut]->Add(hESDMotherPi0PtY[iCut]);
577 hESDMotherEtaPtY[iCut] = new TH2F("ESD_MotherEta_Pt_Y","ESD_MotherEta_Pt_Y",250,0,25,150,-1.5,1.5);
578 fESDList[iCut]->Add(hESDMotherEtaPtY[iCut]);
579 hESDMotherPi0PtAlpha[iCut] = new TH2F("ESD_MotherPi0_Pt_Alpha","ESD_MotherPi0_Pt_Alpha",250,0,25,100,0,1);
580 fESDList[iCut]->Add(hESDMotherPi0PtAlpha[iCut]);
581 hESDMotherEtaPtAlpha[iCut] = new TH2F("ESD_MotherEta_Pt_Alpha","ESD_MotherEta_Pt_Alpha",250,0,25,100,0,1);
582 fESDList[iCut]->Add(hESDMotherEtaPtAlpha[iCut]);
583 hESDMotherPi0YEtaLowPtGamma[iCut] = new TH2F("ESD_MotherPi0_Y_EtaLowPtGamma","ESD_MotherPi0_Y_EtaLowPtGamma",150,-1.5,1.5,200,-2,2);
584 fESDList[iCut]->Add(hESDMotherPi0YEtaLowPtGamma[iCut]);
585 hESDMotherPi0YEtaHighPtGamma[iCut] = new TH2F("ESD_MotherPi0_Y_EtaHighPtGamma","ESD_MotherPi0_Y_EtaHighPtGamma",150,-1.5,1.5,200,-2,2);
586 fESDList[iCut]->Add(hESDMotherPi0YEtaHighPtGamma[iCut]);
587 hESDMotherEtaYEtaLowPtGamma[iCut] = new TH2F("ESD_MotherEta_Y_EtaLowPtGamma","ESD_MotherEta_Y_EtaLowPtGamma",150,-1.5,1.5,200,-2,2);
588 fESDList[iCut]->Add(hESDMotherEtaYEtaLowPtGamma[iCut]);
589 hESDMotherEtaYEtaHighPtGamma[iCut] = new TH2F("ESD_MotherEta_Y_EtaHighPtGamma","ESD_MotherEta_Y_EtaHighPtGamma",150,-1.5,1.5,200,-2,2);
590 fESDList[iCut]->Add(hESDMotherEtaYEtaHighPtGamma[iCut]);
598 if(fDoMesonAnalysis){
599 InitBack(); // Init Background Handler
604 fMCList = new TList*[fnCuts];
606 fTrueList = new TList*[fnCuts];
607 // Selected Header List
608 fHeaderNameList = new TList*[fnCuts];
609 hMCHeaders = new TH1I*[fnCuts];
610 hMCAllGammaPt = new TH1F*[fnCuts];
611 hMCDecayGammaPi0Pt = new TH1F*[fnCuts];
612 hMCDecayGammaRhoPt = new TH1F*[fnCuts];
613 hMCDecayGammaEtaPt = new TH1F*[fnCuts];
614 hMCDecayGammaOmegaPt = new TH1F*[fnCuts];
615 hMCDecayGammaEtapPt = new TH1F*[fnCuts];
616 hMCDecayGammaPhiPt = new TH1F*[fnCuts];
617 hMCDecayGammaSigmaPt = new TH1F*[fnCuts];
618 hMCConvGammaPt = new TH1F*[fnCuts];
619 hESDTrueConvGammaPt = new TH1F*[fnCuts];
621 hESDCombinatorialPt = new TH2F*[fnCuts];
622 hESDTruePrimaryConvGammaPt = new TH1F*[fnCuts];
623 hESDTruePrimaryConvGammaESDPtMCPt = new TH2F*[fnCuts];
624 hESDTrueSecondaryConvGammaPt = new TH1F*[fnCuts];
625 hESDTrueSecondaryConvGammaFromXFromK0sPt = new TH1F*[fnCuts];
626 hESDTrueSecondaryConvGammaFromXFromLambdaPt = new TH1F*[fnCuts];
628 hESDTrueDalitzPsiPairDeltaPhi= new TH2F*[fnCuts];
629 hESDTrueGammaPsiPairDeltaPhi= new TH2F*[fnCuts];
631 if (fDoPhotonQA > 0){
632 hMCConvGammaR = new TH1F*[fnCuts];
633 hMCConvGammaEta = new TH1F*[fnCuts];
636 if(fDoMesonAnalysis){
637 hMCPi0Pt = new TH1F*[fnCuts];
638 hMCPi0WOWeightPt = new TH1F*[fnCuts];
639 hMCEtaPt = new TH1F*[fnCuts];
640 hMCPi0InAccPt = new TH1F*[fnCuts];
641 hMCEtaInAccPt = new TH1F*[fnCuts];
643 hESDTrueMotherInvMassPt = new TH2F*[fnCuts];
644 hESDTruePrimaryMotherInvMassPt = new TH2F*[fnCuts];
645 hESDTruePrimaryMotherW0WeightingInvMassPt = new TH2F*[fnCuts];
646 pESDTruePrimaryMotherWeightsInvMassPt = new TProfile2D*[fnCuts];
647 hESDTrueSecondaryMotherInvMassPt = new TH2F*[fnCuts];
648 hESDTrueSecondaryMotherFromK0sInvMassPt = new TH2F*[fnCuts];
649 hESDTrueSecondaryMotherFromEtaInvMassPt = new TH2F*[fnCuts];
650 hESDTrueMotherDalitzInvMassPt = new TH2F*[fnCuts];
652 hMCPi0PtY = new TH2F*[fnCuts];
653 hMCEtaPtY = new TH2F*[fnCuts];
654 hMCK0sPt = new TH1F*[fnCuts];
655 hMCK0sWOWeightPt = new TH1F*[fnCuts];
656 hMCK0sPtY = new TH2F*[fnCuts];
657 hESDTruePrimaryPi0MCPtResolPt = new TH2F*[fnCuts];
658 hESDTruePrimaryEtaMCPtResolPt = new TH2F*[fnCuts];
659 hESDTrueK0sWithPi0DaughterMCPt = new TH1F*[fnCuts];
660 hESDTrueEtaWithPi0DaughterMCPt = new TH1F*[fnCuts];
661 hESDTrueBckGGInvMassPt = new TH2F*[fnCuts];
662 hESDTrueBckContInvMassPt = new TH2F*[fnCuts];
663 hESDTruePi0PtY = new TH2F*[fnCuts];
664 hESDTrueEtaPtY = new TH2F*[fnCuts];
665 hESDTruePi0PtAlpha = new TH2F*[fnCuts];
666 hESDTrueEtaPtAlpha = new TH2F*[fnCuts];
667 hESDTruePi0YEtaLowPtGamma = new TH2F*[fnCuts];
668 hESDTruePi0YEtaHighPtGamma = new TH2F*[fnCuts];
669 hESDTrueEtaYEtaLowPtGamma = new TH2F*[fnCuts];
670 hESDTrueEtaYEtaHighPtGamma = new TH2F*[fnCuts];
674 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
675 TString cutstring = ((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber();
676 TString cutstringMeson = "NoMesonCut";
677 if(fDoMesonAnalysis)cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
679 fMCList[iCut] = new TList();
680 fMCList[iCut]->SetName(Form("%s_%s MC histograms",cutstring.Data(),cutstringMeson.Data()));
681 fMCList[iCut]->SetOwner(kTRUE);
682 fCutFolder[iCut]->Add(fMCList[iCut]);
683 hMCHeaders[iCut] = new TH1I("MC_Headers","MC_Headers",20,0,20);
684 fMCList[iCut]->Add(hMCHeaders[iCut]);
685 hMCAllGammaPt[iCut] = new TH1F("MC_AllGamma_Pt","MC_AllGamma_Pt",250,0,25);
686 fMCList[iCut]->Add(hMCAllGammaPt[iCut]);
687 hMCDecayGammaPi0Pt[iCut] = new TH1F("MC_DecayGammaPi0_Pt","MC_DecayGammaPi0_Pt",250,0,25);
688 fMCList[iCut]->Add(hMCDecayGammaPi0Pt[iCut]);
689 hMCDecayGammaRhoPt[iCut] = new TH1F("MC_DecayGammaRho_Pt","MC_DecayGammaRho_Pt",250,0,25);
690 fMCList[iCut]->Add(hMCDecayGammaRhoPt[iCut]);
691 hMCDecayGammaEtaPt[iCut] = new TH1F("MC_DecayGammaEta_Pt","MC_DecayGammaEta_Pt",250,0,25);
692 fMCList[iCut]->Add(hMCDecayGammaEtaPt[iCut]);
693 hMCDecayGammaOmegaPt[iCut] = new TH1F("MC_DecayGammaOmega_Pt","MC_DecayGammaOmmega_Pt",250,0,25);
694 fMCList[iCut]->Add(hMCDecayGammaOmegaPt[iCut]);
695 hMCDecayGammaEtapPt[iCut] = new TH1F("MC_DecayGammaEtap_Pt","MC_DecayGammaEtap_Pt",250,0,25);
696 fMCList[iCut]->Add(hMCDecayGammaEtapPt[iCut]);
697 hMCDecayGammaPhiPt[iCut] = new TH1F("MC_DecayGammaPhi_Pt","MC_DecayGammaPhi_Pt",250,0,25);
698 fMCList[iCut]->Add(hMCDecayGammaPhiPt[iCut]);
699 hMCDecayGammaSigmaPt[iCut] = new TH1F("MC_DecayGammaSigma_Pt","MC_DecayGammaSigma_Pt",250,0,25);
700 fMCList[iCut]->Add(hMCDecayGammaSigmaPt[iCut]);
701 hMCConvGammaPt[iCut] = new TH1F("MC_ConvGamma_Pt","MC_ConvGamma_Pt",250,0,25);
702 fMCList[iCut]->Add(hMCConvGammaPt[iCut]);
704 if (fDoPhotonQA > 0){
705 hMCConvGammaR[iCut] = new TH1F("MC_ConvGamma_R","MC_ConvGamma_R",800,0,200);
706 fMCList[iCut]->Add(hMCConvGammaR[iCut]);
707 hMCConvGammaEta[iCut] = new TH1F("MC_ConvGamma_Eta","MC_ConvGamma_Eta",100,-4,4);
708 fMCList[iCut]->Add(hMCConvGammaEta[iCut]);
711 if(fDoMesonAnalysis){
712 hMCPi0Pt[iCut] = new TH1F("MC_Pi0_Pt","MC_Pi0_Pt",250,0,25);
713 hMCPi0Pt[iCut]->Sumw2();
714 fMCList[iCut]->Add(hMCPi0Pt[iCut]);
715 hMCPi0WOWeightPt[iCut] = new TH1F("MC_Pi0_WOWeights_Pt","MC_Pi0_WOWeights_Pt",250,0,25);
716 hMCPi0WOWeightPt[iCut]->Sumw2();
717 fMCList[iCut]->Add(hMCPi0WOWeightPt[iCut]);
719 hMCEtaPt[iCut] = new TH1F("MC_Eta_Pt","MC_Eta_Pt",250,0,25);
720 hMCEtaPt[iCut]->Sumw2();
721 fMCList[iCut]->Add(hMCEtaPt[iCut]);
722 hMCPi0InAccPt[iCut] = new TH1F("MC_Pi0InAcc_Pt","MC_Pi0InAcc_Pt",250,0,25);
723 hMCPi0InAccPt[iCut]->Sumw2();
724 fMCList[iCut]->Add(hMCPi0InAccPt[iCut]);
725 hMCEtaInAccPt[iCut] = new TH1F("MC_EtaInAcc_Pt","MC_EtaInAcc_Pt",250,0,25);
726 hMCEtaInAccPt[iCut]->Sumw2();
727 fMCList[iCut]->Add(hMCEtaInAccPt[iCut]);
729 hMCPi0PtY[iCut] = new TH2F("MC_Pi0_Pt_Y","MC_Pi0_Pt_Y",250,0,25,150,-1.5,1.5);
730 hMCPi0PtY[iCut]->Sumw2();
731 fMCList[iCut]->Add(hMCPi0PtY[iCut]);
732 hMCEtaPtY[iCut] = new TH2F("MC_Eta_Pt_Y","MC_Eta_Pt_Y",250,0,25,150,-1.5,1.5);
733 hMCEtaPtY[iCut]->Sumw2();
734 fMCList[iCut]->Add(hMCEtaPtY[iCut]);
735 hMCK0sPt[iCut] = new TH1F("MC_K0s_Pt","MC_K0s_Pt",250,0,25);
736 hMCK0sPt[iCut]->Sumw2();
737 fMCList[iCut]->Add(hMCK0sPt[iCut]);
738 hMCK0sWOWeightPt[iCut] = new TH1F("MC_K0s_WOWeights_Pt","MC_K0s_WOWeights_Pt",250,0,25);
739 hMCK0sWOWeightPt[iCut]->Sumw2();
740 fMCList[iCut]->Add(hMCK0sWOWeightPt[iCut]);
741 hMCK0sPtY[iCut] = new TH2F("MC_K0s_Pt_Y","MC_K0s_Pt_Y",250,0,25,150,-1.5,1.5);
742 hMCK0sPtY[iCut]->Sumw2();
743 fMCList[iCut]->Add(hMCK0sPtY[iCut]);
748 fTrueList[iCut] = new TList();
749 fTrueList[iCut]->SetName(Form("%s_%s True histograms",cutstring.Data(),cutstringMeson.Data()));
750 fTrueList[iCut]->SetOwner(kTRUE);
751 fCutFolder[iCut]->Add(fTrueList[iCut]);
753 hESDTrueConvGammaPt[iCut] = new TH1F("ESD_TrueConvGamma_Pt","ESD_TrueConvGamma_Pt",250,0,25);
754 fTrueList[iCut]->Add(hESDTrueConvGammaPt[iCut]);
756 hESDCombinatorialPt[iCut] = new TH2F("ESD_TrueCombinatorial_Pt","ESD_TrueCombinatorial_Pt",250,0,25,16,-0.5,15.5);
757 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 1,"Elec+Elec");
758 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 2,"Elec+Pion");
759 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 3,"Elec+Kaon");
760 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 4,"Elec+Proton");
761 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 5,"Elec+Muon");
762 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 6,"Pion+Pion");
763 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 7,"Pion+Kaon");
764 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 8,"Pion+Proton");
765 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 9,"Pion+Muon");
766 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(10,"Kaon+Kaon");
767 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(11,"Kaon+Proton");
768 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(12,"Kaon+Muon");
769 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(13,"Proton+Proton");
770 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(14,"Proton+Muon");
771 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(15,"Muon+Muon");
772 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(16,"Rest");
773 fTrueList[iCut]->Add(hESDCombinatorialPt[iCut]);
774 hESDTruePrimaryConvGammaPt[iCut] = new TH1F("ESD_TruePrimaryConvGamma_Pt","ESD_TruePrimaryConvGamma_Pt",250,0,25);
775 fTrueList[iCut]->Add(hESDTruePrimaryConvGammaPt[iCut]);
776 hESDTrueSecondaryConvGammaPt[iCut] = new TH1F("ESD_TrueSecondaryConvGamma_Pt","ESD_TrueSecondaryConvGamma_Pt",250,0,25);
777 fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaPt[iCut]);
779 hESDTrueSecondaryConvGammaFromXFromK0sPt[iCut]
780 = new TH1F("ESD_TrueSecondaryConvGammaFromXFromK0s_Pt", "ESD_TrueSecondaryConvGammaFromXFromK0s_Pt",250,0,25);
781 fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaFromXFromK0sPt[iCut]);
782 hESDTrueSecondaryConvGammaFromXFromLambdaPt[iCut]
783 = new TH1F("ESD_TrueSecondaryConvGammaFromXFromLambda_Pt", "ESD_TrueSecondaryConvGammaFromXFromLambda_Pt",250,0,25);
784 fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaFromXFromLambdaPt[iCut]);
786 hESDTrueDalitzPsiPairDeltaPhi[iCut]
787 = new TH2F("ESD_TrueDalitzPsiPairDeltaPhi_Pt", "ESD_TrueDalitzPsiPairDeltaPhi_Pt",400,-2,2,400,-2,2);
788 fTrueList[iCut]->Add(hESDTrueDalitzPsiPairDeltaPhi[iCut]);
790 hESDTrueGammaPsiPairDeltaPhi[iCut]
791 = new TH2F("ESD_TrueGammaPsiPairDeltaPhi_Pt", "ESD_TrueGammaPsiPairDeltaPhi_Pt",200,-2,2,400,-2,2);
792 fTrueList[iCut]->Add(hESDTrueGammaPsiPairDeltaPhi[iCut]);
795 hESDTruePrimaryConvGammaESDPtMCPt[iCut] = new TH2F("ESD_TruePrimaryConvGammaESD_PtMCPt", "ESD_TruePrimaryConvGammaESD_PtMCPt",250,0,25,250,0,25);
796 fTrueList[iCut]->Add(hESDTruePrimaryConvGammaESDPtMCPt[iCut]);
798 if(fDoMesonAnalysis){
799 hESDTrueMotherInvMassPt[iCut] = new TH2F("ESD_TrueMother_InvMass_Pt","ESD_TrueMother_InvMass_Pt",800,0,0.8,250,0,25);
800 fTrueList[iCut]->Add(hESDTrueMotherInvMassPt[iCut]);
801 hESDTruePrimaryMotherInvMassPt[iCut]
802 = new TH2F("ESD_TruePrimaryMother_InvMass_Pt", "ESD_TruePrimaryMother_InvMass_Pt", 800,0,0.8,250,0,25);
803 hESDTruePrimaryMotherInvMassPt[iCut]->Sumw2();
804 fTrueList[iCut]->Add(hESDTruePrimaryMotherInvMassPt[iCut]);
805 hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]
806 = new TH2F("ESD_TruePrimaryMotherW0Weights_InvMass_Pt", "ESD_TruePrimaryMotherW0Weights_InvMass_Pt", 800,0,0.8,250,0,25);
807 hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]->Sumw2();
808 fTrueList[iCut]->Add(hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]);
809 pESDTruePrimaryMotherWeightsInvMassPt[iCut]
810 = new TProfile2D("ESD_TruePrimaryMotherWeights_InvMass_Pt", "ESD_TruePrimaryMotherWeights_InvMass_Pt", 800,0,0.8,250,0,25);
811 pESDTruePrimaryMotherWeightsInvMassPt[iCut]->Sumw2();
812 fTrueList[iCut]->Add(pESDTruePrimaryMotherWeightsInvMassPt[iCut]);
813 hESDTrueSecondaryMotherInvMassPt[iCut]
814 = new TH2F("ESD_TrueSecondaryMother_InvMass_Pt", "ESD_TrueSecondaryMother_InvMass_Pt", 800,0,0.8,250,0,25);
815 hESDTrueSecondaryMotherInvMassPt[iCut]->Sumw2();
816 fTrueList[iCut]->Add(hESDTrueSecondaryMotherInvMassPt[iCut]);
817 hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]
818 = new TH2F("ESD_TrueSecondaryMotherFromK0s_InvMass_Pt","ESD_TrueSecondaryMotherFromK0s_InvMass_Pt",800,0,0.8,250,0,25);
819 hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]->Sumw2();
820 fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]);
821 hESDTrueSecondaryMotherFromEtaInvMassPt[iCut]
822 = new TH2F("ESD_TrueSecondaryMotherFromEta_InvMass_Pt","ESD_TrueSecondaryMotherFromEta_InvMass_Pt",800,0,0.8,250,0,25);
823 fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromEtaInvMassPt[iCut]);
824 hESDTrueMotherDalitzInvMassPt[iCut] = new TH2F("ESD_TrueDalitz_InvMass_Pt","ESD_TrueDalitz_InvMass_Pt",800,0,0.8,250,0,25);
825 fTrueList[iCut]->Add(hESDTrueMotherDalitzInvMassPt[iCut]);
827 hESDTruePrimaryPi0MCPtResolPt[iCut] = new TH2F("ESD_TruePrimaryPi0_MCPt_ResolPt","ESD_TruePrimaryPi0_ResolPt_MCPt",500,0,25,1000,-1.,1.);
828 hESDTruePrimaryPi0MCPtResolPt[iCut]->Sumw2();
829 fTrueList[iCut]->Add(hESDTruePrimaryPi0MCPtResolPt[iCut]);
830 hESDTruePrimaryEtaMCPtResolPt[iCut] = new TH2F("ESD_TruePrimaryEta_MCPt_ResolPt","ESD_TruePrimaryEta_ResolPt_MCPt",500,0,25,1000,-1.,1.);
831 hESDTruePrimaryEtaMCPtResolPt[iCut]->Sumw2();
832 fTrueList[iCut]->Add(hESDTruePrimaryEtaMCPtResolPt[iCut]);
833 hESDTrueBckGGInvMassPt[iCut] = new TH2F("ESD_TrueBckGG_InvMass_Pt","ESD_TrueBckGG_InvMass_Pt",800,0,0.8,250,0,25);
834 fTrueList[iCut]->Add(hESDTrueBckGGInvMassPt[iCut]);
835 hESDTrueBckContInvMassPt[iCut] = new TH2F("ESD_TrueBckCont_InvMass_Pt","ESD_TrueBckCont_InvMass_Pt",800,0,0.8,250,0,25);
836 fTrueList[iCut]->Add(hESDTrueBckContInvMassPt[iCut]);
837 hESDTrueK0sWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueK0sWithPi0Daughter_MCPt","ESD_TrueK0sWithPi0Daughter_MCPt",250,0,25);
838 fTrueList[iCut]->Add(hESDTrueK0sWithPi0DaughterMCPt[iCut]);
839 hESDTrueEtaWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueEtaWithPi0Daughter_MCPt","ESD_TrueEtaWithPi0Daughter_MCPt",250,0,25);
840 fTrueList[iCut]->Add(hESDTrueEtaWithPi0DaughterMCPt[iCut]);
841 hESDTruePi0PtY[iCut] = new TH2F("ESD_TruePi0_Pt_Y","ESD_TruePi0_Pt_Y",250,0,25,150,-1.5,1.5);
842 fTrueList[iCut]->Add(hESDTruePi0PtY[iCut]);
843 hESDTrueEtaPtY[iCut] = new TH2F("ESD_TrueEta_Pt_Y","ESD_TrueEta_Pt_Y",250,0,25,150,-1.5,1.5);
844 fTrueList[iCut]->Add(hESDTrueEtaPtY[iCut]);
845 hESDTruePi0PtAlpha[iCut] = new TH2F("ESD_TruePi0_Pt_Alpha","ESD_TruePi0_Pt_Alpha",250,0,25,100,0,1);
846 fTrueList[iCut]->Add(hESDTruePi0PtAlpha[iCut]);
847 hESDTrueEtaPtAlpha[iCut] = new TH2F("ESD_TrueEta_Pt_Alpha","ESD_TrueEta_Pt_Alpha",250,0,25,100,0,1);
848 fTrueList[iCut]->Add(hESDTrueEtaPtAlpha[iCut]);
850 hESDTruePi0YEtaLowPtGamma[iCut] = new TH2F("ESD_TruePi0_Y_EtaLowPtGamma","ESD_TruePi0_Y_EtaLowPtGamma",150,-1.5,1.5,200,-2,2);
851 fTrueList[iCut]->Add(hESDTruePi0YEtaLowPtGamma[iCut]);
852 hESDTruePi0YEtaHighPtGamma[iCut] = new TH2F("ESD_TruePi0_Y_EtaHighPtGamma","ESD_TruePi0_Y_EtaHighPtGamma",150,-1.5,1.5,200,-2,2);
853 fTrueList[iCut]->Add(hESDTruePi0YEtaHighPtGamma[iCut]);
854 hESDTrueEtaYEtaLowPtGamma[iCut] = new TH2F("ESD_TrueEta_Y_EtaLowPtGamma","ESD_TrueEta_Y_EtaLowPtGamma",150,-1.5,1.5,200,-2,2);
855 fTrueList[iCut]->Add(hESDTrueEtaYEtaLowPtGamma[iCut]);
856 hESDTrueEtaYEtaHighPtGamma[iCut] = new TH2F("ESD_TrueEta_Y_EtaHighPtGamma","ESD_TrueEta_Y_EtaHighPtGamma",150,-1.5,1.5,200,-2,2);
857 fTrueList[iCut]->Add(hESDTrueEtaYEtaHighPtGamma[iCut]);
863 fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
864 if(!fV0Reader){printf("Error: No V0 Reader");return;} // GetV0Reader
867 if((AliConversionCuts*)fV0Reader->GetConversionCuts())
868 if(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms())
869 fOutputContainer->Add(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms());
871 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
872 if(!((AliConversionCuts*)fCutArray->At(iCut))) continue;
873 if(((AliConversionCuts*)fCutArray->At(iCut))->GetCutHistograms()){
874 fCutFolder[iCut]->Add(((AliConversionCuts*)fCutArray->At(iCut))->GetCutHistograms());
876 if(fDoMesonAnalysis){
877 if(!((AliConversionMesonCuts*)fMesonCutArray->At(iCut))) continue;
878 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms()){
879 fCutFolder[iCut]->Add(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms());
883 PostData(1, fOutputContainer);
885 //_____________________________________________________________________________
886 Bool_t AliAnalysisTaskGammaConvV1::Notify()
888 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
889 if(!((AliConversionCuts*)fCutArray->At(iCut))->GetDoEtaShift()){
890 hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift()));
891 continue; // No Eta Shift requested, continue
893 if(((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift() == 0.0){ // Eta Shift requested but not set, get shift automatically
894 ((AliConversionCuts*)fCutArray->At(iCut))->GetCorrectEtaShiftFromPeriod(fV0Reader->GetPeriodName());
895 hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift()));
896 ((AliConversionCuts*)fCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
900 printf(" Gamma Conversion Task %s :: Eta Shift Manually Set to %f \n\n",
901 (((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber()).Data(),((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift());
902 hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift()));
903 ((AliConversionCuts*)fCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
909 //_____________________________________________________________________________
910 void AliAnalysisTaskGammaConvV1::UserExec(Option_t *)
913 // Called for each event
915 Int_t eventQuality = ((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetEventQuality();
916 if(eventQuality == 2 || eventQuality == 3){// Event Not Accepted due to MC event missing or wrong trigger for V0ReaderV1
917 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
918 hNEvents[iCut]->Fill(eventQuality);
923 if(fIsMC) fMCEvent = MCEvent();
924 if(fMCEvent == NULL) fIsMC = kFALSE;
926 fInputEvent = InputEvent();
928 if(fIsMC && fInputEvent->IsA()==AliESDEvent::Class()){
929 fMCStack = fMCEvent->Stack();
930 if(fMCStack == NULL) fIsMC = kFALSE;
933 fReaderGammas = fV0Reader->GetReconstructedGammas(); // Gammas from default Cut
935 // ------------------- BeginEvent ----------------------------
937 AliEventplane *EventPlane = fInputEvent->GetEventplane();
938 if(fIsHeavyIon)fEventPlaneAngle = EventPlane->GetEventplane("V0",fInputEvent,2);
939 else fEventPlaneAngle=0.0;
941 if(fIsMC && fInputEvent->IsA()==AliAODEvent::Class() && !(fV0Reader->AreAODsRelabeled())){
942 RelabelAODPhotonCandidates(kTRUE); // In case of AODMC relabeling MC
943 fV0Reader->RelabelAODs(kTRUE);
945 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
947 Int_t eventNotAccepted =
948 ((AliConversionCuts*)fCutArray->At(iCut))
949 ->IsEventAcceptedByConversionCut(fV0Reader->GetConversionCuts(),fInputEvent,fMCEvent,fIsHeavyIon);
950 if(eventNotAccepted){
951 // cout << "event rejected due to wrong trigger: " <<eventNotAccepted << endl;
952 hNEvents[iCut]->Fill(eventNotAccepted); // Check Centrality, PileUp, SDD and V0AND --> Not Accepted => eventQuality = 1
956 if(eventQuality != 0){// Event Not Accepted
957 // cout << "event rejected due to: " <<eventQuality << endl;
958 hNEvents[iCut]->Fill(eventQuality);
962 hNEvents[iCut]->Fill(eventQuality); // Should be 0 here
963 hNGoodESDTracks[iCut]->Fill(fV0Reader->GetNumberOfPrimaryTracks());
964 if(((AliConversionCuts*)fCutArray->At(iCut))->IsHeavyIon() == 2) hNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A());
965 else hNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A()+fInputEvent->GetVZEROData()->GetMTotV0C());
968 // Process MC Particle
969 if(((AliConversionCuts*)fCutArray->At(iCut))->GetSignalRejection() != 0){
970 if(fInputEvent->IsA()==AliESDEvent::Class()){
971 ((AliConversionCuts*)fCutArray->At(iCut))->GetNotRejectedParticles(((AliConversionCuts*)fCutArray->At(iCut))->GetSignalRejection(),
972 ((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader(),
975 else if(fInputEvent->IsA()==AliAODEvent::Class()){
976 ((AliConversionCuts*)fCutArray->At(iCut))->GetNotRejectedParticles(((AliConversionCuts*)fCutArray->At(iCut))->GetSignalRejection(),
977 ((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader(),
981 if(((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader()){
982 for(Int_t i = 0;i<(((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader())->GetEntries();i++){
983 TString nameBin= hMCHeaders[iCut]->GetXaxis()->GetBinLabel(i+1);
984 if (nameBin.CompareTo("")== 0){
985 TString nameHeader = ((TObjString*)((TList*)((AliConversionCuts*)fCutArray->At(iCut))
986 ->GetAcceptedHeader())->At(i))->GetString();
987 hMCHeaders[iCut]->GetXaxis()->SetBinLabel(i+1,nameHeader.Data());
994 if(fInputEvent->IsA()==AliESDEvent::Class())
995 ProcessMCParticles();
996 if(fInputEvent->IsA()==AliAODEvent::Class())
997 ProcessAODMCParticles();
1000 ProcessPhotonCandidates(); // Process this cuts gammas
1002 hNGammaCandidates[iCut]->Fill(fGammaCandidates->GetEntries());
1003 if(fDoMesonAnalysis){ // Meson Analysis
1004 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseMCPSmearing() && fIsMC){
1005 fUnsmearedPx = new Double_t[fGammaCandidates->GetEntries()]; // Store unsmeared Momenta
1006 fUnsmearedPy = new Double_t[fGammaCandidates->GetEntries()];
1007 fUnsmearedPz = new Double_t[fGammaCandidates->GetEntries()];
1008 fUnsmearedE = new Double_t[fGammaCandidates->GetEntries()];
1010 for(Int_t gamma=0;gamma<fGammaCandidates->GetEntries();gamma++){ // Smear the AODPhotons in MC
1011 fUnsmearedPx[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Px();
1012 fUnsmearedPy[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Py();
1013 fUnsmearedPz[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Pz();
1014 fUnsmearedE[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->E();
1015 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->SmearParticle(dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(gamma)));
1019 CalculatePi0Candidates(); // Combine Gammas
1020 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->DoBGCalculation()){
1021 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->BackgroundHandlerType() == 0){
1022 CalculateBackground(); // Combinatorial Background
1023 UpdateEventByEventData(); // Store Event for mixed Events
1026 CalculateBackgroundRP(); // Combinatorial Background
1027 fBGHandlerRP[iCut]->AddEvent(fGammaCandidates,fInputEvent); // Store Event for mixed Events
1030 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseMCPSmearing() && fIsMC){
1031 for(Int_t gamma=0;gamma<fGammaCandidates->GetEntries();gamma++){ // Smear the AODPhotons in MC
1032 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPx(fUnsmearedPx[gamma]); // Reset Unsmeared Momenta
1033 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPy(fUnsmearedPy[gamma]);
1034 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPz(fUnsmearedPz[gamma]);
1035 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetE(fUnsmearedE[gamma]);
1037 delete[] fUnsmearedPx; fUnsmearedPx = 0x0;
1038 delete[] fUnsmearedPy; fUnsmearedPy = 0x0;
1039 delete[] fUnsmearedPz; fUnsmearedPz = 0x0;
1040 delete[] fUnsmearedE; fUnsmearedE = 0x0;
1043 fGammaCandidates->Clear(); // delete this cuts good gammas
1046 if(fIsMC && fInputEvent->IsA()==AliAODEvent::Class() && !(fV0Reader->AreAODsRelabeled())){
1047 RelabelAODPhotonCandidates(kFALSE); // Back to ESDMC Label
1048 fV0Reader->RelabelAODs(kFALSE);
1051 PostData(1, fOutputContainer);
1053 //________________________________________________________________________
1054 void AliAnalysisTaskGammaConvV1::ProcessPhotonCandidates()
1057 TList *GammaCandidatesStepOne = new TList();
1058 TList *GammaCandidatesStepTwo = new TList();
1059 // Loop over Photon Candidates allocated by ReaderV1
1060 for(Int_t i = 0; i < fReaderGammas->GetEntriesFast(); i++){
1061 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(i);
1062 if(!PhotonCandidate) continue;
1063 fIsFromMBHeader = kTRUE;
1064 if(fIsMC && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
1065 Int_t isPosFromMBHeader
1066 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1067 if(isPosFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1068 Int_t isNegFromMBHeader
1069 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
1070 if(isNegFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1072 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1075 if(!((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelected(PhotonCandidate,fInputEvent)) continue;
1076 if(!((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(PhotonCandidate->GetPhotonPhi(),fEventPlaneAngle)) continue;
1077 if(!((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut() &&
1078 !((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){
1079 fGammaCandidates->Add(PhotonCandidate); // if no second loop is required add to events good gammas
1081 if(fIsFromMBHeader){
1082 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1083 if (fDoPhotonQA > 0){
1084 hESDConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
1085 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1089 if(fInputEvent->IsA()==AliESDEvent::Class())
1090 ProcessTruePhotonCandidates(PhotonCandidate);
1091 if(fInputEvent->IsA()==AliAODEvent::Class())
1092 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
1094 if (fIsFromMBHeader && fDoPhotonQA == 2){
1095 if (fIsHeavyIon && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
1096 fPtGamma = PhotonCandidate->Pt();
1097 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1098 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1099 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1100 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1101 tESDConvGammaPtDcazCat[fiCut]->Fill();
1102 } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
1103 fPtGamma = PhotonCandidate->Pt();
1104 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1105 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1106 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1107 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1108 tESDConvGammaPtDcazCat[fiCut]->Fill();
1111 } else if(((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut()){ // if Shared Electron cut is enabled, Fill array, add to step one
1112 ((AliConversionCuts*)fCutArray->At(fiCut))->FillElectonLabelArray(PhotonCandidate,nV0);
1114 GammaCandidatesStepOne->Add(PhotonCandidate);
1115 } else if(!((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut() &&
1116 ((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){ // shared electron is disabled, step one not needed -> step two
1117 GammaCandidatesStepTwo->Add(PhotonCandidate);
1120 if(((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut()){
1121 for(Int_t i = 0;i<GammaCandidatesStepOne->GetEntries();i++){
1122 AliAODConversionPhoton *PhotonCandidate= (AliAODConversionPhoton*) GammaCandidatesStepOne->At(i);
1123 if(!PhotonCandidate) continue;
1124 fIsFromMBHeader = kTRUE;
1125 if(fMCStack && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
1126 Int_t isPosFromMBHeader
1127 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1128 Int_t isNegFromMBHeader
1129 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
1130 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1132 if(!((AliConversionCuts*)fCutArray->At(fiCut))->RejectSharedElectronV0s(PhotonCandidate,i,GammaCandidatesStepOne->GetEntries())) continue;
1133 if(!((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){ // To Colse v0s cut diabled, step two not needed
1134 fGammaCandidates->Add(PhotonCandidate);
1135 if(fIsFromMBHeader){
1136 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1137 if (fDoPhotonQA > 0){
1138 hESDConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
1139 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1144 if(fInputEvent->IsA()==AliESDEvent::Class())
1145 ProcessTruePhotonCandidates(PhotonCandidate);
1146 if(fInputEvent->IsA()==AliAODEvent::Class())
1147 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
1148 } else GammaCandidatesStepTwo->Add(PhotonCandidate); // Close v0s cut enabled -> add to list two
1150 if (fIsFromMBHeader && fDoPhotonQA == 2){
1151 if (fIsHeavyIon && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
1152 fPtGamma = PhotonCandidate->Pt();
1153 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1154 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1155 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1156 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1157 tESDConvGammaPtDcazCat[fiCut]->Fill();
1158 } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
1159 fPtGamma = PhotonCandidate->Pt();
1160 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1161 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1162 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1163 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1164 tESDConvGammaPtDcazCat[fiCut]->Fill();
1169 if(((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){
1170 for(Int_t i = 0;i<GammaCandidatesStepTwo->GetEntries();i++){
1171 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) GammaCandidatesStepTwo->At(i);
1172 if(!PhotonCandidate) continue;
1173 fIsFromMBHeader = kTRUE;
1174 if(fMCStack && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
1175 Int_t isPosFromMBHeader
1176 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1177 Int_t isNegFromMBHeader
1178 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
1179 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1181 if(!((AliConversionCuts*)fCutArray->At(fiCut))->RejectToCloseV0s(PhotonCandidate,GammaCandidatesStepTwo,i)) continue;
1182 fGammaCandidates->Add(PhotonCandidate); // Add gamma to current cut TList
1183 if(fIsFromMBHeader){
1184 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1185 if (fDoPhotonQA > 0){
1186 hESDConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
1187 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1191 if(fInputEvent->IsA()==AliESDEvent::Class())
1192 ProcessTruePhotonCandidates(PhotonCandidate);
1193 if(fInputEvent->IsA()==AliAODEvent::Class())
1194 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
1196 if (fIsFromMBHeader){
1197 if (fIsHeavyIon == 1 && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
1198 fPtGamma = PhotonCandidate->Pt();
1199 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1200 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1201 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1202 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1203 tESDConvGammaPtDcazCat[fiCut]->Fill();
1204 } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
1205 fPtGamma = PhotonCandidate->Pt();
1206 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1207 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1208 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1209 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1210 tESDConvGammaPtDcazCat[fiCut]->Fill();
1216 delete GammaCandidatesStepOne;
1217 GammaCandidatesStepOne = 0x0;
1218 delete GammaCandidatesStepTwo;
1219 GammaCandidatesStepTwo = 0x0;
1222 //________________________________________________________________________
1223 void AliAnalysisTaskGammaConvV1::ProcessTruePhotonCandidatesAOD(AliAODConversionPhoton *TruePhotonCandidate)
1226 Double_t magField = fInputEvent->GetMagneticField();
1227 if( magField < 0.0 ){
1234 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1235 AliAODMCParticle *posDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelPositive());
1236 AliAODMCParticle *negDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelNegative());
1239 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
1240 Int_t pdgCode[2] = {abs(posDaughter->GetPdgCode()),abs(negDaughter->GetPdgCode())};
1242 if(posDaughter->GetMother() != negDaughter->GetMother()){
1243 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1247 else if(posDaughter->GetMother() == -1){
1248 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1253 if(pdgCode[0]!=11 || pdgCode[1]!=11){
1255 return; //One Particle is not a electron
1257 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()){
1259 return; // Same Charge
1262 AliAODMCParticle *Photon = (AliAODMCParticle*) AODMCTrackArray->At(posDaughter->GetMother());
1263 AliVTrack * electronCandidate = ((AliConversionCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelNegative() );
1264 AliVTrack * positronCandidate = ((AliConversionCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelPositive() );
1265 Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronCandidate->Phi()-positronCandidate->Phi());
1267 if(Photon->GetPdgCode() != 22){
1268 hESDTrueDalitzPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
1270 return; // Mother is no Photon
1273 if(((posDaughter->GetMCProcessCode())) != 5 || ((negDaughter->GetMCProcessCode())) != 5){
1275 return;// check if the daughters come from a conversion
1277 // STILL A BUG IN ALIROOT >>8 HAS TPO BE REMOVED AFTER FIX
1282 if(fIsFromMBHeader)hESDTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1283 hESDTrueGammaPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
1284 if(Photon->IsPrimary()){
1285 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
1286 if(fIsFromMBHeader){
1288 hESDTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1289 hESDTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
1291 // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
1294 if(fIsFromMBHeader){
1295 hESDTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1297 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
1298 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 3122){
1300 hESDTrueSecondaryConvGammaFromXFromLambdaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1302 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
1303 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 310){
1305 hESDTrueSecondaryConvGammaFromXFromK0sPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1307 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
1308 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 221){
1315 //________________________________________________________________________
1316 void AliAnalysisTaskGammaConvV1::ProcessTruePhotonCandidates(AliAODConversionPhoton *TruePhotonCandidate)
1319 Double_t magField = fInputEvent->GetMagneticField();
1320 if( magField < 0.0 ){
1327 // Process True Photons
1328 TParticle *posDaughter = TruePhotonCandidate->GetPositiveMCDaughter(fMCStack);
1329 TParticle *negDaughter = TruePhotonCandidate->GetNegativeMCDaughter(fMCStack);
1333 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
1334 Int_t pdgCode[2] = {abs(posDaughter->GetPdgCode()),abs(negDaughter->GetPdgCode())};
1336 if(posDaughter->GetMother(0) != negDaughter->GetMother(0)){
1337 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1340 else if(posDaughter->GetMother(0) == -1){
1341 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1345 if(pdgCode[0]!=11 || pdgCode[1]!=11) return; //One Particle is not a electron
1347 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()) return; // Same Charge
1349 TParticle *Photon = TruePhotonCandidate->GetMCParticle(fMCStack);
1350 AliVTrack * electronCandidate = ((AliConversionCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelNegative() );
1351 AliVTrack * positronCandidate = ((AliConversionCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelPositive() );
1352 Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronCandidate->Phi()-positronCandidate->Phi());
1354 if(Photon->GetPdgCode() != 22){
1355 hESDTrueDalitzPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
1356 return; // Mother is no Photon
1359 if(posDaughter->GetUniqueID() != 5 || negDaughter->GetUniqueID() !=5) return;// check if the daughters come from a conversion
1364 if(fIsFromMBHeader){
1365 hESDTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1367 hESDTrueGammaPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
1368 if(posDaughter->GetMother(0) <= fMCStack->GetNprimary()){
1369 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
1370 if(fIsFromMBHeader){
1372 hESDTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1373 hESDTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
1376 // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
1379 if(fIsFromMBHeader){
1381 hESDTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1382 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
1383 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 3122){
1384 hESDTrueSecondaryConvGammaFromXFromLambdaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1387 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
1388 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 310){
1389 hESDTrueSecondaryConvGammaFromXFromK0sPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1392 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
1393 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 221){
1399 //________________________________________________________________________
1400 void AliAnalysisTaskGammaConvV1::ProcessAODMCParticles()
1403 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1405 // Loop over all primary MC particle
1406 for(Int_t i = 0; i < AODMCTrackArray->GetEntriesFast(); i++) {
1408 AliAODMCParticle* particle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(i));
1409 if (!particle) continue;
1410 if (!particle->IsPrimary()) continue;
1412 Int_t isMCFromMBHeader = -1;
1413 if(((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
1415 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
1416 if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1419 if(!((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(particle->Phi(),fEventPlaneAngle,kFALSE)) continue;
1420 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kFALSE)){
1421 hMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
1422 if(particle->GetMother() >-1){ // Meson Decay Gamma
1423 switch((static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetMother())))->GetPdgCode()){
1425 hMCDecayGammaPi0Pt[fiCut]->Fill(particle->Pt());
1428 hMCDecayGammaRhoPt[fiCut]->Fill(particle->Pt());
1431 hMCDecayGammaEtaPt[fiCut]->Fill(particle->Pt());
1434 hMCDecayGammaOmegaPt[fiCut]->Fill(particle->Pt());
1437 hMCDecayGammaEtapPt[fiCut]->Fill(particle->Pt());
1440 hMCDecayGammaPhiPt[fiCut]->Fill(particle->Pt());
1443 hMCDecayGammaSigmaPt[fiCut]->Fill(particle->Pt());
1448 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kTRUE)){
1450 for(Int_t daughterIndex=particle->GetDaughter(0);daughterIndex<=particle->GetDaughter(1);daughterIndex++){
1451 AliAODMCParticle *tmpDaughter = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(daughterIndex));
1452 if(!tmpDaughter) continue;
1453 if(abs(tmpDaughter->GetPdgCode()) == 11){
1454 rConv = sqrt( (tmpDaughter->Xv()*tmpDaughter->Xv()) + (tmpDaughter->Yv()*tmpDaughter->Yv()) );
1457 hMCConvGammaPt[fiCut]->Fill(particle->Pt());
1458 if (fDoPhotonQA > 0){
1459 hMCConvGammaR[fiCut]->Fill(rConv);
1460 hMCConvGammaEta[fiCut]->Fill(particle->Eta());
1463 // Converted MC Gamma
1464 if(fDoMesonAnalysis){
1465 if(particle->GetPdgCode() == 310 && fDoMesonQA > 0){
1466 Double_t mesonY = 10.;
1467 if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
1468 mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1470 mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))
1471 -((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1473 Float_t weightedK0s= 1;
1474 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1475 if (particle->Pt()>0.005){
1476 weightedK0s= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
1477 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1480 hMCK0sPt[fiCut]->Fill(particle->Pt(),weightedK0s);
1481 hMCK0sWOWeightPt[fiCut]->Fill(particle->Pt());
1482 hMCK0sPtY[fiCut]->Fill(particle->Pt(),mesonY,weightedK0s);
1484 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
1485 ->MesonIsSelectedAODMC(particle,AODMCTrackArray,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
1486 AliAODMCParticle* daughter0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(0)));
1487 AliAODMCParticle* daughter1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(1)));
1488 Float_t weighted= 1;
1489 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1490 if (particle->Pt()>0.005){
1491 weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
1492 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1495 Double_t mesonY = 10.;
1496 if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
1497 mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1499 mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))
1500 -((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1503 if(particle->GetPdgCode() == 111){
1504 hMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
1505 hMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
1506 if (fDoMesonQA > 0) hMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1507 } else if(particle->GetPdgCode() == 221){
1508 hMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
1509 if (fDoMesonQA > 0) hMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1512 // Check the acceptance for both gammas
1513 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter0,AODMCTrackArray,kFALSE) &&
1514 ((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter1,AODMCTrackArray,kFALSE) &&
1515 ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter0->Phi(),fEventPlaneAngle,kFALSE) &&
1516 ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter1->Phi(),fEventPlaneAngle,kFALSE)){
1518 if(particle->GetPdgCode() == 111){
1519 hMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
1520 } else if(particle->GetPdgCode() == 221){
1521 hMCEtaInAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Eta with gamma in acc
1528 //________________________________________________________________________
1529 void AliAnalysisTaskGammaConvV1::ProcessMCParticles()
1531 // Loop over all primary MC particle
1532 for(Int_t i = 0; i < fMCStack->GetNprimary(); i++) {
1533 TParticle* particle = (TParticle *)fMCStack->Particle(i);
1534 if (!particle) continue;
1536 Int_t isMCFromMBHeader = -1;
1537 if(((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
1539 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
1540 if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1543 if(!((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(particle->Phi(),fEventPlaneAngle,kFALSE)) continue;
1544 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kFALSE)){
1545 hMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
1546 if(particle->GetMother(0) >-1){ // Meson Decay Gamma
1547 switch(fMCStack->Particle(particle->GetMother(0))->GetPdgCode()){
1549 hMCDecayGammaPi0Pt[fiCut]->Fill(particle->Pt());
1552 hMCDecayGammaRhoPt[fiCut]->Fill(particle->Pt());
1555 hMCDecayGammaEtaPt[fiCut]->Fill(particle->Pt());
1558 hMCDecayGammaOmegaPt[fiCut]->Fill(particle->Pt());
1561 hMCDecayGammaEtapPt[fiCut]->Fill(particle->Pt());
1564 hMCDecayGammaPhiPt[fiCut]->Fill(particle->Pt());
1567 hMCDecayGammaSigmaPt[fiCut]->Fill(particle->Pt());
1572 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kTRUE)){
1573 hMCConvGammaPt[fiCut]->Fill(particle->Pt());
1574 if (fDoPhotonQA > 0){
1575 hMCConvGammaR[fiCut]->Fill(((TParticle*)fMCStack->Particle(particle->GetFirstDaughter()))->R());
1576 hMCConvGammaEta[fiCut]->Fill(particle->Eta());
1578 } // Converted MC Gamma
1579 if(fDoMesonAnalysis){
1580 if(particle->GetPdgCode() == 310 && fDoMesonQA > 0){
1581 Double_t mesonY = 10.;
1582 if(particle->Energy() - particle->Pz() == 0 || particle->Energy() + particle->Pz() == 0){
1583 mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1585 mesonY = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())))
1586 -((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1588 Float_t weightedK0s= 1;
1589 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1590 if (particle->Pt()>0.005){
1591 weightedK0s= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
1592 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1595 hMCK0sPt[fiCut]->Fill(particle->Pt(),weightedK0s);
1596 hMCK0sWOWeightPt[fiCut]->Fill(particle->Pt());
1597 hMCK0sPtY[fiCut]->Fill(particle->Pt(),mesonY,weightedK0s);
1599 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
1600 ->MesonIsSelectedMC(particle,fMCStack,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
1601 TParticle* daughter0 = (TParticle*)fMCStack->Particle(particle->GetFirstDaughter());
1602 TParticle* daughter1 = (TParticle*)fMCStack->Particle(particle->GetLastDaughter());
1604 Float_t weighted= 1;
1605 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1606 if (particle->Pt()>0.005){
1607 weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
1608 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1611 Double_t mesonY = 10.;
1612 if(particle->Energy() - particle->Pz() == 0 || particle->Energy() + particle->Pz() == 0){
1613 mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1615 mesonY = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())))
1616 -((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1619 if(particle->GetPdgCode() == 111){
1620 hMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
1621 hMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
1622 if (fDoMesonQA > 0) hMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1623 } else if(particle->GetPdgCode() == 221){
1624 hMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
1625 if (fDoMesonQA > 0) hMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1628 // Check the acceptance for both gammas
1629 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter0,fMCStack,kFALSE) &&
1630 ((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter1,fMCStack,kFALSE) &&
1631 ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter0->Phi(),fEventPlaneAngle,kFALSE) &&
1632 ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter1->Phi(),fEventPlaneAngle,kFALSE)){
1634 if(particle->GetPdgCode() == 111){
1635 hMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
1636 } else if(particle->GetPdgCode() == 221){
1637 hMCEtaInAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Eta with gamma in acc
1644 //________________________________________________________________________
1645 void AliAnalysisTaskGammaConvV1::CalculatePi0Candidates(){
1647 // Conversion Gammas
1648 if(fGammaCandidates->GetEntries()>1){
1649 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries()-1;firstGammaIndex++){
1650 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
1651 if (gamma0==NULL) continue;
1652 for(Int_t secondGammaIndex=firstGammaIndex+1;secondGammaIndex<fGammaCandidates->GetEntries();secondGammaIndex++){
1653 AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(secondGammaIndex));
1654 //Check for same Electron ID
1655 if (gamma1==NULL) continue;
1656 if(gamma0->GetTrackLabelPositive() == gamma1->GetTrackLabelPositive() ||
1657 gamma0->GetTrackLabelNegative() == gamma1->GetTrackLabelNegative() ||
1658 gamma0->GetTrackLabelNegative() == gamma1->GetTrackLabelPositive() ||
1659 gamma0->GetTrackLabelPositive() == gamma1->GetTrackLabelNegative() ) continue;
1661 AliAODConversionMother *pi0cand = new AliAODConversionMother(gamma0,gamma1);
1662 pi0cand->SetLabels(firstGammaIndex,secondGammaIndex);
1664 pi0cand->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
1665 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
1666 ->MesonIsSelected(pi0cand,kTRUE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()))){
1667 hESDMotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
1668 if(pi0cand->GetAlpha()<0.1)
1669 hESDMotherInvMassEalpha[fiCut]->Fill(pi0cand->M(),pi0cand->E());
1671 if (fDoMesonQA > 0){
1672 if ( pi0cand->M() < 0.17){
1673 hESDMotherPi0PtY[fiCut]->Fill(pi0cand->Pt(),pi0cand->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
1674 hESDMotherPi0PtAlpha[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetAlpha());
1675 if (gamma0->Pt() < gamma1->Pt()){
1676 hESDMotherPi0YEtaLowPtGamma[fiCut]->Fill(pi0cand->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift(),gamma0->Eta());
1677 hESDMotherPi0YEtaHighPtGamma[fiCut]->Fill(pi0cand->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift(),gamma1->Eta());
1679 hESDMotherPi0YEtaLowPtGamma[fiCut]->Fill(pi0cand->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift(),gamma1->Eta());
1680 hESDMotherPi0YEtaHighPtGamma[fiCut]->Fill(pi0cand->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift(),gamma0->Eta());
1683 if ( pi0cand->M() > 0.17 && pi0cand->M() < 0.7){
1684 hESDMotherEtaPtY[fiCut]->Fill(pi0cand->Pt(),pi0cand->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
1685 hESDMotherEtaPtAlpha[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetAlpha());
1686 if (gamma0->Pt() < gamma1->Pt()){
1687 hESDMotherEtaYEtaLowPtGamma[fiCut]->Fill(pi0cand->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift(),gamma0->Eta());
1688 hESDMotherEtaYEtaHighPtGamma[fiCut]->Fill(pi0cand->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift(),gamma1->Eta());
1690 hESDMotherEtaYEtaLowPtGamma[fiCut]->Fill(pi0cand->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift(),gamma1->Eta());
1691 hESDMotherEtaYEtaHighPtGamma[fiCut]->Fill(pi0cand->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift(),gamma0->Eta());
1695 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->DoBGCalculation()){
1699 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->BackgroundHandlerType() == 0){
1700 zbin = fBGHandler[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
1701 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1702 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
1704 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
1708 zbin = fBGHandlerRP[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
1709 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1710 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
1712 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
1715 Double_t sparesFill[4] = {pi0cand->M(),pi0cand->Pt(),(Double_t)zbin,(Double_t)mbin};
1716 sESDMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
1721 if(fInputEvent->IsA()==AliESDEvent::Class())
1722 ProcessTrueMesonCandidates(pi0cand,gamma0,gamma1);
1723 if(fInputEvent->IsA()==AliAODEvent::Class())
1724 ProcessTrueMesonCandidatesAOD(pi0cand,gamma0,gamma1);
1726 if (fDoMesonQA == 2){
1727 fInvMass = pi0cand->M();
1728 fPt = pi0cand->Pt();
1729 if (abs(gamma0->GetDCAzToPrimVtx()) < abs(gamma1->GetDCAzToPrimVtx())){
1730 fDCAzGammaMin = gamma0->GetDCAzToPrimVtx();
1731 fDCAzGammaMax = gamma1->GetDCAzToPrimVtx();
1733 fDCAzGammaMin = gamma1->GetDCAzToPrimVtx();
1734 fDCAzGammaMax = gamma0->GetDCAzToPrimVtx();
1736 iFlag = pi0cand->GetMesonQuality();
1737 // cout << "gamma 0: " << gamma0->GetV0Index()<< "\t" << gamma0->GetPx() << "\t" << gamma0->GetPy() << "\t" << gamma0->GetPz() << "\t" << endl;
1738 // cout << "gamma 1: " << gamma1->GetV0Index()<< "\t"<< gamma1->GetPx() << "\t" << gamma1->GetPy() << "\t" << gamma1->GetPz() << "\t" << endl;
1739 // cout << "pi0: "<<fInvMass << "\t" << fPt <<"\t" << fDCAzGammaMin << "\t" << fDCAzGammaMax << "\t" << (Int_t)iFlag << "\t" << (Int_t)iMesonMCInfo <<endl;
1740 if (fIsHeavyIon == 1 && fPt > 0.399 && fPt < 20. ) {
1741 if (fInvMass > 0.08 && fInvMass < 0.2) tESDMesonsInvMassPtDcazMinDcazMaxFlag[fiCut]->Fill();
1742 if ((fInvMass > 0.45 && fInvMass < 0.6) && (fPt > 0.999 && fPt < 20.) )tESDMesonsInvMassPtDcazMinDcazMaxFlag[fiCut]->Fill();
1743 } else if (fPt > 0.299 && fPt < 20. ) {
1744 if ( (fInvMass > 0.08 && fInvMass < 0.2) || (fInvMass > 0.45 && fInvMass < 0.6)) tESDMesonsInvMassPtDcazMinDcazMaxFlag[fiCut]->Fill();
1754 //______________________________________________________________________
1755 void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidates(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1)
1757 // Process True Mesons
1758 AliStack *MCStack = fMCEvent->Stack();
1760 if(TrueGammaCandidate0->GetV0Index()<fInputEvent->GetNumberOfV0s()){
1761 Bool_t isTruePi0 = kFALSE;
1762 Bool_t isTrueEta = kFALSE;
1763 Bool_t isTruePi0Dalitz = kFALSE;
1764 Bool_t isTrueEtaDalitz = kFALSE;
1765 Bool_t gamma0DalitzCand = kFALSE;
1766 Bool_t gamma1DalitzCand = kFALSE;
1767 Int_t gamma0MCLabel = TrueGammaCandidate0->GetMCParticleLabel(MCStack);
1768 Int_t gamma0MotherLabel = -1;
1769 if(gamma0MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1770 // Daughters Gamma 0
1771 TParticle * negativeMC = (TParticle*)TrueGammaCandidate0->GetNegativeMCDaughter(MCStack);
1772 TParticle * positiveMC = (TParticle*)TrueGammaCandidate0->GetPositiveMCDaughter(MCStack);
1773 TParticle * gammaMC0 = (TParticle*)MCStack->Particle(gamma0MCLabel);
1774 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
1775 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
1776 if(gammaMC0->GetPdgCode() == 22){ // ... with Gamma Mother
1777 gamma0MotherLabel=gammaMC0->GetFirstMother();
1780 if(gammaMC0->GetPdgCode() ==111){ // Dalitz candidate
1781 gamma0DalitzCand = kTRUE;
1782 gamma0MotherLabel=-111;
1784 if(gammaMC0->GetPdgCode() ==221){ // Dalitz candidate
1785 gamma0DalitzCand = kTRUE;
1786 gamma0MotherLabel=-221;
1790 if(TrueGammaCandidate1->GetV0Index()<fInputEvent->GetNumberOfV0s()){
1791 Int_t gamma1MCLabel = TrueGammaCandidate1->GetMCParticleLabel(MCStack);
1792 Int_t gamma1MotherLabel = -1;
1793 if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1794 // Daughters Gamma 1
1795 TParticle * negativeMC = (TParticle*)TrueGammaCandidate1->GetNegativeMCDaughter(MCStack);
1796 TParticle * positiveMC = (TParticle*)TrueGammaCandidate1->GetPositiveMCDaughter(MCStack);
1797 TParticle * gammaMC1 = (TParticle*)MCStack->Particle(gamma1MCLabel);
1798 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
1799 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
1800 if(gammaMC1->GetPdgCode() == 22){ // ... with Gamma Mother
1801 gamma1MotherLabel=gammaMC1->GetFirstMother();
1804 if(gammaMC1->GetPdgCode() ==111 ){ // Dalitz candidate
1805 gamma1DalitzCand = kTRUE;
1806 gamma1MotherLabel=-111;
1808 if(gammaMC1->GetPdgCode() ==221){ // Dalitz candidate
1809 gamma1DalitzCand = kTRUE;
1810 gamma1MotherLabel=-221;
1814 if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
1815 if(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 111){
1818 if(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 221){
1823 //Identify Dalitz candidate
1824 if (gamma1DalitzCand || gamma0DalitzCand){
1825 if (gamma0DalitzCand && gamma0MCLabel >=0 && gamma0MCLabel==gamma1MotherLabel){
1826 if (gamma0MotherLabel == -111) isTruePi0Dalitz = kTRUE;
1827 if (gamma0MotherLabel == -221) isTrueEtaDalitz = kTRUE;
1829 if (gamma1DalitzCand && gamma1MCLabel >=0 && gamma1MCLabel==gamma0MotherLabel){
1830 if (gamma1MotherLabel == -111) isTruePi0Dalitz = kTRUE;
1831 if (gamma1MotherLabel == -221) isTrueEtaDalitz = kTRUE;
1836 if(isTruePi0 || isTrueEta){// True Pion or Eta
1837 hESDTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1838 if (fDoMesonQA > 0){
1840 hESDTruePi0PtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
1841 hESDTruePi0PtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
1842 if (TrueGammaCandidate0->Pt() < TrueGammaCandidate1->Pt()){
1843 hESDMotherPi0YEtaLowPtGamma[fiCut]->Fill(Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift(),TrueGammaCandidate0->Eta());
1844 hESDMotherPi0YEtaHighPtGamma[fiCut]->Fill(Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift(),TrueGammaCandidate1->Eta());
1846 hESDMotherPi0YEtaLowPtGamma[fiCut]->Fill(Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift(),TrueGammaCandidate1->Eta());
1847 hESDMotherPi0YEtaHighPtGamma[fiCut]->Fill(Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift(),TrueGammaCandidate0->Eta());
1850 } else if (isTrueEta){
1851 hESDTrueEtaPtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
1852 hESDTrueEtaPtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
1853 if (TrueGammaCandidate0->Pt() < TrueGammaCandidate1->Pt()){
1854 hESDMotherEtaYEtaLowPtGamma[fiCut]->Fill(Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift(),TrueGammaCandidate0->Eta());
1855 hESDMotherEtaYEtaHighPtGamma[fiCut]->Fill(Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift(),TrueGammaCandidate1->Eta());
1857 hESDMotherEtaYEtaLowPtGamma[fiCut]->Fill(Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift(),TrueGammaCandidate1->Eta());
1858 hESDMotherEtaYEtaHighPtGamma[fiCut]->Fill(Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift(),TrueGammaCandidate0->Eta());
1862 if(gamma0MotherLabel >= MCStack->GetNprimary()){ // Secondary Meson
1863 Int_t secMotherLabel = ((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetMother(0);
1864 Float_t weightedSec= 1;
1865 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, fMCStack, fInputEvent) && MCStack->Particle(secMotherLabel)->GetPdgCode()==310){
1866 weightedSec= ((AliConversionCuts*)fCutArray->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
1867 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1869 hESDTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
1871 if (secMotherLabel >-1){
1872 if(MCStack->Particle(secMotherLabel)->GetPdgCode()==310){
1874 hESDTrueSecondaryMotherFromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
1875 if (fDoMesonQA > 0)hESDTrueK0sWithPi0DaughterMCPt[fiCut]
1876 ->Fill(MCStack->Particle(secMotherLabel)->Pt());
1878 if(MCStack->Particle(secMotherLabel)->GetPdgCode()==221){
1880 hESDTrueSecondaryMotherFromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
1881 if (fDoMesonQA > 0)hESDTrueEtaWithPi0DaughterMCPt[fiCut]
1882 ->Fill(MCStack->Particle(secMotherLabel)->Pt());
1885 }else{ // Only primary pi0 for efficiency calculation
1887 Float_t weighted= 1;
1888 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, fMCStack, fInputEvent)){
1889 if (((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt()>0.005){
1890 weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, fMCStack, fInputEvent);
1891 // cout << "rec \t " <<gamma1MotherLabel << "\t" << weighted << endl;
1894 hESDTruePrimaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
1895 hESDTruePrimaryMotherW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1896 pESDTruePrimaryMotherWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
1899 if (fDoMesonQA > 0){
1900 if(isTruePi0){ // Only primary pi0 for resolution
1901 hESDTruePrimaryPi0MCPtResolPt[fiCut]->Fill(((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
1903 if (isTrueEta){ // Only primary eta for resolution
1904 hESDTruePrimaryEtaMCPtResolPt[fiCut]->Fill(((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
1908 } else if(!isTruePi0 && !isTrueEta){ // Background
1909 if (fDoMesonQA > 0){
1910 if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
1911 hESDTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1913 } else { // No photon or without mother
1914 hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1917 if( isTruePi0Dalitz || isTrueEtaDalitz ){
1920 hESDTrueMotherDalitzInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1921 } else if (gamma0DalitzCand || gamma1DalitzCand){
1922 if (fDoMesonQA > 0)hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1928 //______________________________________________________________________
1929 void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidatesAOD(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1)
1932 // Process True Mesons
1933 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1934 Bool_t isTruePi0 = kFALSE;
1935 Bool_t isTrueEta = kFALSE;
1936 Bool_t isTruePi0Dalitz = kFALSE;
1937 Bool_t isTrueEtaDalitz = kFALSE;
1938 Bool_t gamma0DalitzCand = kFALSE;
1939 Bool_t gamma1DalitzCand = kFALSE;
1941 AliAODMCParticle *positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelPositive()));
1942 AliAODMCParticle *negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelNegative()));
1945 Int_t gamma0MCLabel = -1;
1946 Int_t gamma0MotherLabel = -1;
1947 if(!positiveMC||!negativeMC)
1950 if(positiveMC->GetMother()>-1&&(negativeMC->GetMother() == positiveMC->GetMother())){
1951 gamma0MCLabel = positiveMC->GetMother();
1954 if(gamma0MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1955 // Daughters Gamma 0
1956 AliAODMCParticle * gammaMC0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MCLabel));
1957 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
1958 if(((positiveMC->GetMCProcessCode())) == 5 && ((negativeMC->GetMCProcessCode())) == 5){ // ... From Conversion ...
1959 if(gammaMC0->GetPdgCode() == 22){ // ... with Gamma Mother
1960 gamma0MotherLabel=gammaMC0->GetMother();
1963 if(gammaMC0->GetPdgCode() ==111){ // Dalitz candidate
1964 gamma0DalitzCand = kTRUE;
1965 gamma0MotherLabel=-111;
1967 if(gammaMC0->GetPdgCode() ==221){ // Dalitz candidate
1968 gamma0DalitzCand = kTRUE;
1969 gamma0MotherLabel=-221;
1973 positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate1->GetMCLabelPositive()));
1974 negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate1->GetMCLabelNegative()));
1976 Int_t gamma1MCLabel = -1;
1977 Int_t gamma1MotherLabel = -1;
1978 if(!positiveMC||!negativeMC)
1981 if(positiveMC->GetMother()>-1&&(negativeMC->GetMother() == positiveMC->GetMother())){
1982 gamma1MCLabel = positiveMC->GetMother();
1984 if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1985 // Daughters Gamma 1
1986 AliAODMCParticle * gammaMC1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MCLabel));
1987 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
1988 if(((positiveMC->GetMCProcessCode())) == 5 && ((negativeMC->GetMCProcessCode())) == 5){ // ... From Conversion ...
1989 if(gammaMC1->GetPdgCode() == 22){ // ... with Gamma Mother
1990 gamma1MotherLabel=gammaMC1->GetMother();
1993 if(gammaMC1->GetPdgCode() ==111 ){ // Dalitz candidate
1994 gamma1DalitzCand = kTRUE;
1995 gamma1MotherLabel=-111;
1997 if(gammaMC1->GetPdgCode() ==221){ // Dalitz candidate
1998 gamma1DalitzCand = kTRUE;
1999 gamma1MotherLabel=-221;
2003 if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
2004 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 111){
2007 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 221){
2012 //Identify Dalitz candidate
2013 if (gamma1DalitzCand || gamma0DalitzCand){
2014 if (gamma0DalitzCand && gamma0MCLabel >=0 && gamma0MCLabel==gamma1MotherLabel){
2015 if (gamma0MotherLabel == -111) isTruePi0Dalitz = kTRUE;
2016 if (gamma0MotherLabel == -221) isTrueEtaDalitz = kTRUE;
2018 if (gamma1DalitzCand && gamma1MCLabel >=0 && gamma1MCLabel==gamma0MotherLabel){
2019 if (gamma1MotherLabel == -111) isTruePi0Dalitz = kTRUE;
2020 if (gamma1MotherLabel == -221) isTrueEtaDalitz = kTRUE;
2024 if(isTruePi0 || isTrueEta){// True Pion or Eta
2025 hESDTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2026 if (fDoMesonQA > 0){
2028 hESDTruePi0PtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
2029 hESDTruePi0PtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
2030 if (TrueGammaCandidate0->Pt() < TrueGammaCandidate1->Pt()){
2031 hESDTruePi0YEtaLowPtGamma[fiCut]->Fill(Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift(),TrueGammaCandidate0->Eta());
2032 hESDTruePi0YEtaHighPtGamma[fiCut]->Fill(Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift(),TrueGammaCandidate1->Eta());
2034 hESDTruePi0YEtaLowPtGamma[fiCut]->Fill(Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift(),TrueGammaCandidate1->Eta());
2035 hESDTruePi0YEtaHighPtGamma[fiCut]->Fill(Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift(),TrueGammaCandidate0->Eta());
2037 } else if (isTrueEta){
2038 hESDTrueEtaPtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
2039 hESDTrueEtaPtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
2040 if (TrueGammaCandidate0->Pt() < TrueGammaCandidate1->Pt()){
2041 hESDTrueEtaYEtaLowPtGamma[fiCut]->Fill(Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift(),TrueGammaCandidate0->Eta());
2042 hESDTrueEtaYEtaHighPtGamma[fiCut]->Fill(Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift(),TrueGammaCandidate1->Eta());
2044 hESDTrueEtaYEtaLowPtGamma[fiCut]->Fill(Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift(),TrueGammaCandidate1->Eta());
2045 hESDTrueEtaYEtaHighPtGamma[fiCut]->Fill(Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift(),TrueGammaCandidate0->Eta());
2050 if(!(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MotherLabel))->IsPrimary())){ // Secondary Meson
2051 Int_t secMotherLabel = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetMother();
2052 Float_t weightedSec= 1;
2053 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, 0x0, fInputEvent) && static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
2054 weightedSec= ((AliConversionCuts*)fCutArray->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
2055 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
2057 hESDTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2059 if (secMotherLabel >-1){
2060 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
2062 hESDTrueSecondaryMotherFromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2063 if (fDoMesonQA > 0)hESDTrueK0sWithPi0DaughterMCPt[fiCut]
2064 ->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
2066 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==221){
2068 hESDTrueSecondaryMotherFromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2069 if (fDoMesonQA > 0)hESDTrueEtaWithPi0DaughterMCPt[fiCut]
2070 ->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
2073 }else{ // Only primary pi0 for efficiency calculation
2074 Float_t weighted= 1;
2076 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, 0x0, fInputEvent)){
2077 if (static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt()>0.005){
2078 weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, 0x0, fInputEvent);
2079 // cout << "rec \t " <<gamma1MotherLabel << "\t" << weighted << endl;
2082 hESDTruePrimaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2083 hESDTruePrimaryMotherW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2084 pESDTruePrimaryMotherWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2086 if (fDoMesonQA > 0){
2087 if(isTruePi0){ // Only primary pi0 for resolution
2088 hESDTruePrimaryPi0MCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
2089 (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
2092 if (isTrueEta){ // Only primary eta for resolution
2093 hESDTruePrimaryEtaMCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
2094 (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
2098 } else if(!isTruePi0 && !isTrueEta) { // Background
2099 if (fDoMesonQA > 0){
2100 if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
2101 hESDTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2103 } else { // No photon or without mother
2104 hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2107 if( isTruePi0Dalitz || isTrueEtaDalitz ){
2110 hESDTrueMotherDalitzInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2111 } else if (gamma0DalitzCand || gamma1DalitzCand){
2112 if (fDoMesonQA > 0)hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2116 //________________________________________________________________________
2117 void AliAnalysisTaskGammaConvV1::CalculateBackground(){
2119 Int_t zbin= fBGHandler[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
2122 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2123 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
2125 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
2128 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseRotationMethod()){
2130 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
2131 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2132 for(Int_t iCurrent2=iCurrent+1;iCurrent2<fGammaCandidates->GetEntries();iCurrent2++){
2133 for(Int_t nRandom=0;nRandom<((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents();nRandom++){
2134 AliAODConversionPhoton currentEventGoodV02 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent2));
2136 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->DoBGProbability()){
2137 AliAODConversionMother *backgroundCandidateProb = new AliAODConversionMother(¤tEventGoodV0,¤tEventGoodV02);
2138 Double_t massBGprob = backgroundCandidateProb->M();
2139 if(massBGprob>0.1 && massBGprob<0.14){
2140 if(fRandom.Rndm()>fBGHandler[fiCut]->GetBGProb(zbin,mbin)){
2141 delete backgroundCandidateProb;
2145 delete backgroundCandidateProb;
2146 backgroundCandidateProb = 0x0;
2149 RotateParticle(¤tEventGoodV02);
2150 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,¤tEventGoodV02);
2151 backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2152 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2153 ->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()))){
2154 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2155 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2156 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2158 delete backgroundCandidate;
2159 backgroundCandidate = 0x0;
2164 AliGammaConversionAODBGHandler::GammaConversionVertex *bgEventVertex = NULL;
2166 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2167 for(Int_t nEventsInBG=0;nEventsInBG<fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
2168 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
2169 if(fMoveParticleAccordingToVertex == kTRUE){
2170 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
2173 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
2174 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2175 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
2176 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
2177 if(fMoveParticleAccordingToVertex == kTRUE){
2178 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
2181 RotateParticleAccordingToEP(&previousGoodV0,bgEventVertex->fEP,fEventPlaneAngle);
2184 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
2185 backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2186 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2187 ->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()))){
2188 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2189 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2190 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2192 delete backgroundCandidate;
2193 backgroundCandidate = 0x0;
2199 for(Int_t nEventsInBG=0;nEventsInBG <fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
2200 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
2201 if(previousEventV0s){
2202 if(fMoveParticleAccordingToVertex == kTRUE){
2203 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
2205 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
2206 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2207 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
2209 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
2211 if(fMoveParticleAccordingToVertex == kTRUE){
2212 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
2215 RotateParticleAccordingToEP(&previousGoodV0,bgEventVertex->fEP,fEventPlaneAngle);
2219 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
2220 backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2221 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2222 ->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()))){
2223 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2224 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2225 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2227 delete backgroundCandidate;
2228 backgroundCandidate = 0x0;
2236 //________________________________________________________________________
2237 void AliAnalysisTaskGammaConvV1::CalculateBackgroundRP(){
2239 Int_t zbin= fBGHandlerRP[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
2241 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2242 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
2244 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
2249 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseRotationMethod()){
2250 // Correct for the number of rotations
2251 // BG is for rotation the same, except for factor NRotations
2252 Double_t weight=1./Double_t(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents());
2254 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries();firstGammaIndex++){
2256 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
2257 if (gamma0==NULL) continue;
2258 for(Int_t secondGammaIndex=firstGammaIndex+1;secondGammaIndex<fGammaCandidates->GetEntries();secondGammaIndex++){
2259 AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(secondGammaIndex));
2260 if (gamma1 == NULL) continue;
2261 if(!((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelected(gamma1,fInputEvent))continue;
2262 for(Int_t nRandom=0;nRandom<((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents();nRandom++){
2264 RotateParticle(gamma1);
2266 AliAODConversionMother backgroundCandidate(gamma0,gamma1);
2267 backgroundCandidate.CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2268 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2269 ->MesonIsSelected(&backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
2270 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate.M(),backgroundCandidate.Pt());
2271 Double_t sparesFill[4] = {backgroundCandidate.M(),backgroundCandidate.Pt(),(Double_t)zbin,(Double_t)mbin};
2272 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,weight);
2280 for(Int_t nEventsInBG=0;nEventsInBG <fBGHandlerRP[fiCut]->GetNBGEvents(fGammaCandidates,fInputEvent);nEventsInBG++){
2282 AliGammaConversionPhotonVector *previousEventGammas = fBGHandlerRP[fiCut]->GetBGGoodGammas(fGammaCandidates,fInputEvent,nEventsInBG);
2284 if(previousEventGammas){
2285 // test weighted background
2286 Double_t weight=1.0;
2287 // Correct for the number of eventmixing:
2288 // N gammas -> (N-1) + (N-2) +(N-3) ...+ (N-(N-1)) using sum formula sum(i)=N*(N-1)/2 -> N*(N-1)/2
2289 // real combinations (since you cannot combine a photon with its own)
2290 // but BG leads to N_{a}*N_{b} combinations
2291 weight*=0.5*(Double_t(fGammaCandidates->GetEntries()-1))/Double_t(previousEventGammas->size());
2293 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
2295 AliAODConversionPhoton *gamma0 = (AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2297 for(UInt_t iPrevious=0;iPrevious<previousEventGammas->size();iPrevious++){
2299 AliAODConversionPhoton *gamma1 = (AliAODConversionPhoton*)(previousEventGammas->at(iPrevious));
2301 AliAODConversionMother backgroundCandidate(gamma0,gamma1);
2302 backgroundCandidate.CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2303 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2304 ->MesonIsSelected(&backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
2305 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate.M(),backgroundCandidate.Pt());
2306 Double_t sparesFill[4] = {backgroundCandidate.M(),backgroundCandidate.Pt(),(Double_t)zbin,(Double_t)mbin};
2307 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,weight);
2315 //________________________________________________________________________
2316 void AliAnalysisTaskGammaConvV1::RotateParticle(AliAODConversionPhoton *gamma){
2317 Int_t fNDegreesPMBackground= ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->NDegreesRotation();
2318 Double_t nRadiansPM = fNDegreesPMBackground*TMath::Pi()/180;
2319 Double_t rotationValue = fRandom.Rndm()*2*nRadiansPM + TMath::Pi()-nRadiansPM;
2320 gamma->RotateZ(rotationValue);
2323 //________________________________________________________________________
2324 void AliAnalysisTaskGammaConvV1::RotateParticleAccordingToEP(AliAODConversionPhoton *gamma, Double_t previousEventEP, Double_t thisEventEP){
2326 previousEventEP=previousEventEP+TMath::Pi();
2327 thisEventEP=thisEventEP+TMath::Pi();
2328 Double_t rotationValue= thisEventEP-previousEventEP;
2329 gamma->RotateZ(rotationValue);
2332 //________________________________________________________________________
2333 void AliAnalysisTaskGammaConvV1::MoveParticleAccordingToVertex(AliAODConversionPhoton* particle,const AliGammaConversionAODBGHandler::GammaConversionVertex *vertex){
2334 //see header file for documentation
2336 Double_t dx = vertex->fX - fInputEvent->GetPrimaryVertex()->GetX();
2337 Double_t dy = vertex->fY - fInputEvent->GetPrimaryVertex()->GetY();
2338 Double_t dz = vertex->fZ - fInputEvent->GetPrimaryVertex()->GetZ();
2340 Double_t movedPlace[3] = {particle->GetConversionX() - dx,particle->GetConversionY() - dy,particle->GetConversionZ() - dz};
2341 particle->SetConversionPoint(movedPlace);
2343 //________________________________________________________________________
2344 void AliAnalysisTaskGammaConvV1::UpdateEventByEventData(){
2345 //see header file for documentation
2346 if(fGammaCandidates->GetEntries() >0 ){
2347 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2348 fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fV0Reader->GetNumberOfPrimaryTracks(),fEventPlaneAngle);
2350 else{ // means we use #V0s for multiplicity
2351 fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fGammaCandidates->GetEntries(),fEventPlaneAngle);
2357 //________________________________________________________________________
2358 void AliAnalysisTaskGammaConvV1::FillPhotonCombinatorialBackgroundHist(AliAODConversionPhoton *TruePhotonCandidate, Int_t pdgCode[])
2360 // 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
2361 if(pdgCode[0]==11 && pdgCode[1]==11){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),0);}
2362 else if( (pdgCode[0]==11 && pdgCode[1]==211) || (pdgCode[0]==211 && pdgCode[1]==11) )
2363 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),1);}
2364 else if( (pdgCode[0]==11 && pdgCode[1]==321) || (pdgCode[0]==321 && pdgCode[1]==11) )
2365 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),2);}
2366 else if( (pdgCode[0]==11 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==11) )
2367 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),3);}
2368 else if( (pdgCode[0]==11 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==11) )
2369 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),4);}
2370 else if( pdgCode[0]==211 && pdgCode[1]==211 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),5);}
2371 else if( (pdgCode[0]==211 && pdgCode[1]==321) || (pdgCode[0]==321 && pdgCode[1]==211) )
2372 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),6);}
2373 else if( (pdgCode[0]==211 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==211) )
2374 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),7);}
2375 else if( (pdgCode[0]==211 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==211) )
2376 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),8);}
2377 else if( pdgCode[0]==321 && pdgCode[1]==321 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),9);}
2378 else if( (pdgCode[0]==321 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==321) )
2379 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),10);}
2380 else if( (pdgCode[0]==321 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==321) )
2381 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),11);}
2382 else if( pdgCode[0]==2212 && pdgCode[1]==2212 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),12);}
2383 else if( (pdgCode[0]==2212 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==2212) )
2384 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),13);}
2385 else if( pdgCode[0]==13 && pdgCode[1]==13 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),14);}
2386 else {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),15);}
2388 //________________________________________________________________________
2389 void AliAnalysisTaskGammaConvV1::RelabelAODPhotonCandidates(Bool_t mode){
2391 // Relabeling For AOD Event
2393 // MCLabel -> AODMCLabel
2396 fMCStackPos = new Int_t[fReaderGammas->GetEntries()];
2397 fMCStackNeg = new Int_t[fReaderGammas->GetEntries()];
2398 fESDArrayPos = new Int_t[fReaderGammas->GetEntries()];
2399 fESDArrayNeg = new Int_t[fReaderGammas->GetEntries()];
2402 for(Int_t iGamma = 0;iGamma<fReaderGammas->GetEntries();iGamma++){
2403 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(iGamma);
2404 if(!PhotonCandidate) continue;
2405 if(!mode){// Back to ESD Labels
2406 PhotonCandidate->SetMCLabelPositive(fMCStackPos[iGamma]);
2407 PhotonCandidate->SetMCLabelNegative(fMCStackNeg[iGamma]);
2408 PhotonCandidate->SetLabelPositive(fESDArrayPos[iGamma]);
2409 PhotonCandidate->SetLabelNegative(fESDArrayNeg[iGamma]);
2412 fMCStackPos[iGamma] = PhotonCandidate->GetMCLabelPositive();
2413 fMCStackNeg[iGamma] = PhotonCandidate->GetMCLabelNegative();
2414 fESDArrayPos[iGamma] = PhotonCandidate->GetTrackLabelPositive();
2415 fESDArrayNeg[iGamma] = PhotonCandidate->GetTrackLabelNegative();
2417 Bool_t AODLabelPos = kFALSE;
2418 Bool_t AODLabelNeg = kFALSE;
2420 for(Int_t i = 0; i<fInputEvent->GetNumberOfTracks();i++){
2421 AliAODTrack *tempDaughter = static_cast<AliAODTrack*>(fInputEvent->GetTrack(i));
2423 if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelPositive() ){
2424 PhotonCandidate->SetMCLabelPositive(abs(tempDaughter->GetLabel()));
2425 PhotonCandidate->SetLabelPositive(i);
2426 AODLabelPos = kTRUE;
2430 if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelNegative()){
2431 PhotonCandidate->SetMCLabelNegative(abs(tempDaughter->GetLabel()));
2432 PhotonCandidate->SetLabelNegative(i);
2433 AODLabelNeg = kTRUE;
2436 if(AODLabelNeg && AODLabelPos){
2440 if(!AODLabelPos || !AODLabelNeg){
2441 cout<<"WARNING!!! AOD TRACKS NOT FOUND FOR"<<endl;
2447 delete[] fMCStackPos;
2448 delete[] fMCStackNeg;
2449 delete[] fESDArrayPos;
2450 delete[] fESDArrayNeg;
2453 //________________________________________________________________________
2454 void AliAnalysisTaskGammaConvV1::Terminate(const Option_t *)
2457 //fOutputContainer->Print(); // Will crash on GRID