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 hESDMotherPi0PtOpenAngle(NULL),
104 hESDMotherEtaPtOpenAngle(NULL),
107 hMCDecayGammaPi0Pt(NULL),
108 hMCDecayGammaRhoPt(NULL),
109 hMCDecayGammaEtaPt(NULL),
110 hMCDecayGammaOmegaPt(NULL),
111 hMCDecayGammaEtapPt(NULL),
112 hMCDecayGammaPhiPt(NULL),
113 hMCDecayGammaSigmaPt(NULL),
114 hMCConvGammaPt(NULL),
116 hMCConvGammaEta(NULL),
118 hMCPi0WOWeightPt(NULL),
120 hMCEtaWOWeightPt(NULL),
126 hMCK0sWOWeightPt(NULL),
128 hESDTrueMotherInvMassPt(NULL),
129 hESDTruePrimaryMotherInvMassPt(NULL),
130 hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
131 pESDTruePrimaryMotherWeightsInvMassPt(NULL),
132 hESDTruePrimaryPi0MCPtResolPt(NULL),
133 hESDTruePrimaryEtaMCPtResolPt(NULL),
134 hESDTrueSecondaryMotherInvMassPt(NULL),
135 hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
136 hESDTrueK0sWithPi0DaughterMCPt(NULL),
137 hESDTrueSecondaryMotherFromEtaInvMassPt(NULL),
138 hESDTrueEtaWithPi0DaughterMCPt(NULL),
139 hESDTrueBckGGInvMassPt(NULL),
140 hESDTrueBckContInvMassPt(NULL),
141 hESDTruePi0PtY(NULL),
142 hESDTrueEtaPtY(NULL),
143 hESDTruePi0PtAlpha(NULL),
144 hESDTrueEtaPtAlpha(NULL),
145 hESDTruePi0PtOpenAngle(NULL),
146 hESDTrueEtaPtOpenAngle(NULL),
147 hESDTrueMotherDalitzInvMassPt(NULL),
148 hESDTrueConvGammaPt(NULL),
149 hESDCombinatorialPt(NULL),
150 hESDTruePrimaryConvGammaPt(NULL),
151 hESDTruePrimaryConvGammaESDPtMCPt(NULL),
152 hESDTrueSecondaryConvGammaPt(NULL),
153 hESDTrueSecondaryConvGammaFromXFromK0sPt(NULL),
154 hESDTrueSecondaryConvGammaFromXFromLambdaPt(NULL),
155 hESDTrueDalitzPsiPairDeltaPhi(NULL),
156 hESDTrueGammaPsiPairDeltaPhi(NULL),
158 hNGoodESDTracks(NULL),
159 hNGammaCandidates(NULL),
162 tESDMesonsInvMassPtDcazMinDcazMaxFlag(NULL),
169 fEventPlaneAngle(-100),
171 fnGammaCandidates(0),
182 fMoveParticleAccordingToVertex(kTRUE),
184 fDoMesonAnalysis(kTRUE),
187 fIsFromMBHeader(kTRUE),
193 //________________________________________________________________________
194 AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(const char *name):
195 AliAnalysisTaskSE(name),
206 fPhotonDCAList(NULL),
210 fHeaderNameList(NULL),
213 fGammaCandidates(NULL),
215 fConversionCuts(NULL),
216 fMesonCutArray(NULL),
218 hESDConvGammaPt(NULL),
219 hESDConvGammaR(NULL),
220 hESDConvGammaEta(NULL),
221 tESDConvGammaPtDcazCat(NULL),
228 hESDMotherInvMassPt(NULL),
229 sESDMotherInvMassPtZM(NULL),
230 hESDMotherBackInvMassPt(NULL),
231 sESDMotherBackInvMassPtZM(NULL),
232 hESDMotherInvMassEalpha(NULL),
233 hESDMotherPi0PtY(NULL),
234 hESDMotherEtaPtY(NULL),
235 hESDMotherPi0PtAlpha(NULL),
236 hESDMotherEtaPtAlpha(NULL),
237 hESDMotherPi0PtOpenAngle(NULL),
238 hESDMotherEtaPtOpenAngle(NULL),
241 hMCDecayGammaPi0Pt(NULL),
242 hMCDecayGammaRhoPt(NULL),
243 hMCDecayGammaEtaPt(NULL),
244 hMCDecayGammaOmegaPt(NULL),
245 hMCDecayGammaEtapPt(NULL),
246 hMCDecayGammaPhiPt(NULL),
247 hMCDecayGammaSigmaPt(NULL),
248 hMCConvGammaPt(NULL),
250 hMCConvGammaEta(NULL),
252 hMCPi0WOWeightPt(NULL),
254 hMCEtaWOWeightPt(NULL),
260 hMCK0sWOWeightPt(NULL),
262 hESDTrueMotherInvMassPt(NULL),
263 hESDTruePrimaryMotherInvMassPt(NULL),
264 hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
265 pESDTruePrimaryMotherWeightsInvMassPt(NULL),
266 hESDTruePrimaryPi0MCPtResolPt(NULL),
267 hESDTruePrimaryEtaMCPtResolPt(NULL),
268 hESDTrueSecondaryMotherInvMassPt(NULL),
269 hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
270 hESDTrueK0sWithPi0DaughterMCPt(NULL),
271 hESDTrueSecondaryMotherFromEtaInvMassPt(NULL),
272 hESDTrueEtaWithPi0DaughterMCPt(NULL),
273 hESDTrueBckGGInvMassPt(NULL),
274 hESDTrueBckContInvMassPt(NULL),
275 hESDTruePi0PtY(NULL),
276 hESDTrueEtaPtY(NULL),
277 hESDTruePi0PtAlpha(NULL),
278 hESDTrueEtaPtAlpha(NULL),
279 hESDTruePi0PtOpenAngle(NULL),
280 hESDTrueEtaPtOpenAngle(NULL),
281 hESDTrueMotherDalitzInvMassPt(NULL),
282 hESDTrueConvGammaPt(NULL),
283 hESDCombinatorialPt(NULL),
284 hESDTruePrimaryConvGammaPt(NULL),
285 hESDTruePrimaryConvGammaESDPtMCPt(NULL),
286 hESDTrueSecondaryConvGammaPt(NULL),
287 hESDTrueSecondaryConvGammaFromXFromK0sPt(NULL),
288 hESDTrueSecondaryConvGammaFromXFromLambdaPt(NULL),
289 hESDTrueDalitzPsiPairDeltaPhi(NULL),
290 hESDTrueGammaPsiPairDeltaPhi(NULL),
292 hNGoodESDTracks(NULL),
293 hNGammaCandidates(NULL),
296 tESDMesonsInvMassPtDcazMinDcazMaxFlag(NULL),
303 fEventPlaneAngle(-100),
305 fnGammaCandidates(0),
316 fMoveParticleAccordingToVertex(kTRUE),
318 fDoMesonAnalysis(kTRUE),
321 fIsFromMBHeader(kTRUE),
324 // Define output slots here
325 DefineOutput(1, TList::Class());
328 AliAnalysisTaskGammaConvV1::~AliAnalysisTaskGammaConvV1()
330 if(fGammaCandidates){
331 delete fGammaCandidates;
332 fGammaCandidates = 0x0;
339 delete[] fBGHandlerRP;
343 //___________________________________________________________
344 void AliAnalysisTaskGammaConvV1::InitBack(){
346 const Int_t nDim = 4;
347 Int_t nBins[nDim] = {800,250,7,4};
348 Double_t xMin[nDim] = {0,0, 0,0};
349 Double_t xMax[nDim] = {0.8,25,7,4};
351 sESDMotherInvMassPtZM = new THnSparseF*[fnCuts];
352 sESDMotherBackInvMassPtZM = new THnSparseF*[fnCuts];
354 fBGHandler = new AliGammaConversionAODBGHandler*[fnCuts];
355 fBGHandlerRP = new AliConversionAODBGHandlerRP*[fnCuts];
356 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
357 if (((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->DoBGCalculation()){
358 TString cutstring = ((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber();
359 TString cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
361 Int_t collisionSystem = atoi((TString)(((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber())(0,1));
362 Int_t centMin = atoi((TString)(((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber())(1,1));
363 Int_t centMax = atoi((TString)(((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber())(2,1));
365 if(collisionSystem == 1 || collisionSystem == 2 ||
366 collisionSystem == 5 || collisionSystem == 8 ||
367 collisionSystem == 9){
368 centMin = centMin*10;
369 centMax = centMax*10;
370 if(centMax ==0 && centMax!=centMin) centMax=100;
372 else if(collisionSystem == 3 || collisionSystem == 6){
376 else if(collisionSystem == 4 || collisionSystem == 7){
377 centMin = ((centMin*5)+45);
378 centMax = ((centMax*5)+45);
381 fBackList[iCut] = new TList();
382 fBackList[iCut]->SetName(Form("%s_%s Back histograms",cutstring.Data(),cutstringMeson.Data()));
383 fBackList[iCut]->SetOwner(kTRUE);
384 fCutFolder[iCut]->Add(fBackList[iCut]);
386 sESDMotherBackInvMassPtZM[iCut] = new THnSparseF("Back_Back_InvMass_Pt_z_m","Back_Back_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
387 fBackList[iCut]->Add(sESDMotherBackInvMassPtZM[iCut]);
389 fMotherList[iCut] = new TList();
390 fMotherList[iCut]->SetName(Form("%s_%s Mother histograms",cutstring.Data(),cutstringMeson.Data()));
391 fMotherList[iCut]->SetOwner(kTRUE);
392 fCutFolder[iCut]->Add(fMotherList[iCut]);
394 sESDMotherInvMassPtZM[iCut] = new THnSparseF("Back_Mother_InvMass_Pt_z_m","Back_Mother_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
395 fMotherList[iCut]->Add(sESDMotherInvMassPtZM[iCut]);
397 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->BackgroundHandlerType() == 0){
398 fBGHandler[iCut] = new AliGammaConversionAODBGHandler(
399 collisionSystem,centMin,centMax,
400 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents(),
401 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseTrackMultiplicity());
402 fBGHandlerRP[iCut] = NULL;
405 fBGHandlerRP[iCut] = new AliConversionAODBGHandlerRP(
406 ((AliConversionCuts*)fCutArray->At(fiCut))->IsHeavyIon(),
407 ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity(),
408 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents());
409 fBGHandler[iCut] = NULL;
414 //________________________________________________________________________
415 void AliAnalysisTaskGammaConvV1::UserCreateOutputObjects()
419 if(fOutputContainer != NULL){
420 delete fOutputContainer;
421 fOutputContainer = NULL;
423 if(fOutputContainer == NULL){
424 fOutputContainer = new TList();
425 fOutputContainer->SetOwner(kTRUE);
428 // Array of current cut's gammas
429 fGammaCandidates = new TList();
431 fCutFolder = new TList*[fnCuts];
432 fESDList = new TList*[fnCuts];
433 fBackList = new TList*[fnCuts];
434 fMotherList = new TList*[fnCuts];
435 hNEvents = new TH1I*[fnCuts];
436 hNGoodESDTracks = new TH1I*[fnCuts];
437 hNGammaCandidates = new TH1I*[fnCuts];
438 hNV0Tracks = new TH1I*[fnCuts];
439 hEtaShift = new TProfile*[fnCuts];
440 hESDConvGammaPt = new TH1F*[fnCuts];
442 if (fDoPhotonQA == 2){
443 fPhotonDCAList = new TList*[fnCuts];
444 tESDConvGammaPtDcazCat = new TTree*[fnCuts];
446 if (fDoPhotonQA > 0){
447 hESDConvGammaR = new TH1F*[fnCuts];
448 hESDConvGammaEta = new TH1F*[fnCuts];
451 if(fDoMesonAnalysis){
452 hESDMotherInvMassPt = new TH2F*[fnCuts];
453 hESDMotherBackInvMassPt = new TH2F*[fnCuts];
454 hESDMotherInvMassEalpha = new TH2F*[fnCuts];
455 if (fDoMesonQA == 2){
456 fMesonDCAList = new TList*[fnCuts];
457 tESDMesonsInvMassPtDcazMinDcazMaxFlag = new TTree*[fnCuts];
460 hESDMotherPi0PtY = new TH2F*[fnCuts];
461 hESDMotherEtaPtY = new TH2F*[fnCuts];
462 hESDMotherPi0PtAlpha = new TH2F*[fnCuts];
463 hESDMotherEtaPtAlpha = new TH2F*[fnCuts];
464 hESDMotherPi0PtOpenAngle = new TH2F*[fnCuts];
465 hESDMotherEtaPtOpenAngle = new TH2F*[fnCuts];
469 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
471 TString cutstring = ((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber();
472 TString cutstringMeson = "NoMesonCut";
473 if(fDoMesonAnalysis)cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
475 fCutFolder[iCut] = new TList();
476 fCutFolder[iCut]->SetName(Form("Cut Number %s_%s",cutstring.Data(),cutstringMeson.Data()));
477 fCutFolder[iCut]->SetOwner(kTRUE);
478 fOutputContainer->Add(fCutFolder[iCut]);
479 fESDList[iCut] = new TList();
480 fESDList[iCut]->SetName(Form("%s_%s ESD histograms",cutstring.Data(),cutstringMeson.Data()));
481 fESDList[iCut]->SetOwner(kTRUE);
482 fCutFolder[iCut]->Add(fESDList[iCut]);
484 hNEvents[iCut] = new TH1I("NEvents","NEvents",9,-0.5,8.5);
485 hNEvents[iCut]->GetXaxis()->SetBinLabel(1,"Accepted");
486 hNEvents[iCut]->GetXaxis()->SetBinLabel(2,"Centrality");
487 hNEvents[iCut]->GetXaxis()->SetBinLabel(3,"Missing MC");
488 if (((AliConversionCuts*)fCutArray->At(iCut))->IsSpecialTrigger() == 4 ){
489 TString TriggerNames = "Not Trigger: ";
490 TriggerNames = TriggerNames+ ( (AliConversionCuts*)fCutArray->At(iCut))->GetSpecialTriggerName();
491 hNEvents[iCut]->GetXaxis()->SetBinLabel(4,TriggerNames.Data());
493 hNEvents[iCut]->GetXaxis()->SetBinLabel(4,"Trigger");
495 hNEvents[iCut]->GetXaxis()->SetBinLabel(5,"Vertex Z");
496 hNEvents[iCut]->GetXaxis()->SetBinLabel(6,"Cont. Vertex");
497 hNEvents[iCut]->GetXaxis()->SetBinLabel(7,"Pile-Up");
498 hNEvents[iCut]->GetXaxis()->SetBinLabel(8,"no SDD");
499 hNEvents[iCut]->GetXaxis()->SetBinLabel(9,"no V0AND");
500 fESDList[iCut]->Add(hNEvents[iCut]);
501 if(fIsHeavyIon) hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",4000,0,4000);
502 else hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",200,0,200);
503 fESDList[iCut]->Add(hNGoodESDTracks[iCut]);
504 if(fIsHeavyIon) hNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",100,0,100);
505 else hNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",50,0,50);
506 fESDList[iCut]->Add(hNGammaCandidates[iCut]);
507 if(fIsHeavyIon) hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",30000,0,30000);
508 else hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",2000,0,2000);
509 fESDList[iCut]->Add(hNV0Tracks[iCut]);
510 hEtaShift[iCut] = new TProfile("Eta Shift","Eta Shift",1, -0.5,0.5);
511 fESDList[iCut]->Add(hEtaShift[iCut]);
512 hESDConvGammaPt[iCut] = new TH1F("ESD_ConvGamma_Pt","ESD_ConvGamma_Pt",250,0,25);
513 fESDList[iCut]->Add(hESDConvGammaPt[iCut]);
515 if (fDoPhotonQA == 2){
516 fPhotonDCAList[iCut] = new TList();
517 fPhotonDCAList[iCut]->SetName(Form("%s_%s Photon DCA tree",cutstring.Data(),cutstringMeson.Data()));
518 fPhotonDCAList[iCut]->SetOwner(kTRUE);
519 fCutFolder[iCut]->Add(fPhotonDCAList[iCut]);
521 tESDConvGammaPtDcazCat[iCut] = new TTree("ESD_ConvGamma_Pt_Dcaz_R_Eta","ESD_ConvGamma_Pt_Dcaz_R_Eta_Cat");
522 tESDConvGammaPtDcazCat[iCut]->Branch("Pt",&fPtGamma,"fPtGamma/F");
523 tESDConvGammaPtDcazCat[iCut]->Branch("DcaZPhoton",&fDCAzPhoton,"fDCAzPhoton/F");
524 // tESDConvGammaPtDcazCat[iCut]->Branch("R",&fRConvPhoton,"fRConvPhoton/F");
525 // tESDConvGammaPtDcazCat[iCut]->Branch("Eta",&fEtaPhoton,"fEtaPhoton/F");
527 tESDConvGammaPtDcazCat[iCut]->Branch("cat",&iCatPhoton,"iCatPhoton/b");
529 tESDConvGammaPtDcazCat[iCut]->Branch("photonMCInfo",&iPhotonMCInfo,"iPhotonMCInfo/b");
531 fPhotonDCAList[iCut]->Add(tESDConvGammaPtDcazCat[iCut]);
534 if (fDoPhotonQA > 0){
535 hESDConvGammaR[iCut] = new TH1F("ESD_ConvGamma_R","ESD_ConvGamma_R",800,0,200);
536 fESDList[iCut]->Add(hESDConvGammaR[iCut]);
537 hESDConvGammaEta[iCut] = new TH1F("ESD_ConvGamma_Eta","ESD_ConvGamma_Eta",2000,-2,2);
538 fESDList[iCut]->Add(hESDConvGammaEta[iCut]);
541 if(fDoMesonAnalysis){
542 hESDMotherInvMassPt[iCut] = new TH2F("ESD_Mother_InvMass_Pt","ESD_Mother_InvMass_Pt",800,0,0.8,250,0,25);
543 fESDList[iCut]->Add(hESDMotherInvMassPt[iCut]);
544 hESDMotherBackInvMassPt[iCut] = new TH2F("ESD_Background_InvMass_Pt","ESD_Background_InvMass_Pt",800,0,0.8,250,0,25);
545 fESDList[iCut]->Add(hESDMotherBackInvMassPt[iCut]);
546 hESDMotherInvMassEalpha[iCut] = new TH2F("ESD_Mother_InvMass_vs_E_alpha","ESD_Mother_InvMass_vs_E_alpha",800,0,0.8,250,0,25);
547 fESDList[iCut]->Add(hESDMotherInvMassEalpha[iCut]);
548 if (fDoMesonQA == 2){
549 fMesonDCAList[iCut] = new TList();
550 fMesonDCAList[iCut]->SetName(Form("%s_%s Meson DCA tree",cutstring.Data(),cutstringMeson.Data()));
551 fMesonDCAList[iCut]->SetOwner(kTRUE);
552 fCutFolder[iCut]->Add(fMesonDCAList[iCut]);
554 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut] = new TTree("ESD_Mesons_InvMass_Pt_DcazMin_DcazMax_Flag","ESD_Mesons_InvMass_Pt_DcazMin_DcazMax_Flag");
555 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("InvMass",&fInvMass,"fInvMass/F");
556 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("Pt",&fPt,"fPt/F");
557 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("DcaZMin",&fDCAzGammaMin,"fDCAzGammaMin/F");
558 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("DcaZMax",&fDCAzGammaMax,"fDCAzGammaMax/F");
559 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("kind",&iFlag,"iFlag/b");
561 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("mesonMCInfo",&iMesonMCInfo,"iMesonMCInfo/b");
563 fMesonDCAList[iCut]->Add(tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]);
566 if (fDoMesonQA > 0 ){
567 hESDMotherPi0PtY[iCut] = new TH2F("ESD_MotherPi0_Pt_Y","ESD_MotherPi0_Pt_Y",150,0.03,15.,150,-1.5,1.5);
568 SetLogBinningXTH2(hESDMotherPi0PtY[iCut]);
569 fESDList[iCut]->Add(hESDMotherPi0PtY[iCut]);
570 hESDMotherEtaPtY[iCut] = new TH2F("ESD_MotherEta_Pt_Y","ESD_MotherEta_Pt_Y",150,0.03,15.,150,-1.5,1.5);
571 SetLogBinningXTH2(hESDMotherEtaPtY[iCut]);
572 fESDList[iCut]->Add(hESDMotherEtaPtY[iCut]);
573 hESDMotherPi0PtAlpha[iCut] = new TH2F("ESD_MotherPi0_Pt_Alpha","ESD_MotherPi0_Pt_Alpha",150,0.03,15.,100,0,1);
574 SetLogBinningXTH2(hESDMotherPi0PtAlpha[iCut]);
575 fESDList[iCut]->Add(hESDMotherPi0PtAlpha[iCut]);
576 hESDMotherEtaPtAlpha[iCut] = new TH2F("ESD_MotherEta_Pt_Alpha","ESD_MotherEta_Pt_Alpha",150,0.03,15.,100,0,1);
577 SetLogBinningXTH2(hESDMotherEtaPtAlpha[iCut]);
578 fESDList[iCut]->Add(hESDMotherEtaPtAlpha[iCut]);
579 hESDMotherPi0PtOpenAngle[iCut] = new TH2F("ESD_MotherPi0_Pt_OpenAngle","ESD_MotherPi0_Pt_OpenAngle",150,0.03,15.,200,0,2*TMath::Pi());
580 SetLogBinningXTH2(hESDMotherPi0PtOpenAngle[iCut]);
581 fESDList[iCut]->Add(hESDMotherPi0PtOpenAngle[iCut]);
582 hESDMotherEtaPtOpenAngle[iCut] = new TH2F("ESD_MotherEta_Pt_OpenAngle","ESD_MotherEta_Pt_OpenAngle",150,0.03,15.,200,0,2*TMath::Pi());
583 SetLogBinningXTH2(hESDMotherEtaPtOpenAngle[iCut]);
584 fESDList[iCut]->Add(hESDMotherEtaPtOpenAngle[iCut]);
592 if(fDoMesonAnalysis){
593 InitBack(); // Init Background Handler
598 fMCList = new TList*[fnCuts];
600 fTrueList = new TList*[fnCuts];
601 // Selected Header List
602 fHeaderNameList = new TList*[fnCuts];
603 hMCHeaders = new TH1I*[fnCuts];
604 hMCAllGammaPt = new TH1F*[fnCuts];
605 hMCDecayGammaPi0Pt = new TH1F*[fnCuts];
606 hMCDecayGammaRhoPt = new TH1F*[fnCuts];
607 hMCDecayGammaEtaPt = new TH1F*[fnCuts];
608 hMCDecayGammaOmegaPt = new TH1F*[fnCuts];
609 hMCDecayGammaEtapPt = new TH1F*[fnCuts];
610 hMCDecayGammaPhiPt = new TH1F*[fnCuts];
611 hMCDecayGammaSigmaPt = new TH1F*[fnCuts];
612 hMCConvGammaPt = new TH1F*[fnCuts];
613 hESDTrueConvGammaPt = new TH1F*[fnCuts];
615 hESDCombinatorialPt = new TH2F*[fnCuts];
616 hESDTruePrimaryConvGammaPt = new TH1F*[fnCuts];
617 hESDTruePrimaryConvGammaESDPtMCPt = new TH2F*[fnCuts];
618 hESDTrueSecondaryConvGammaPt = new TH1F*[fnCuts];
619 hESDTrueSecondaryConvGammaFromXFromK0sPt = new TH1F*[fnCuts];
620 hESDTrueSecondaryConvGammaFromXFromLambdaPt = new TH1F*[fnCuts];
622 hESDTrueDalitzPsiPairDeltaPhi= new TH2F*[fnCuts];
623 hESDTrueGammaPsiPairDeltaPhi= new TH2F*[fnCuts];
625 if (fDoPhotonQA > 0){
626 hMCConvGammaR = new TH1F*[fnCuts];
627 hMCConvGammaEta = new TH1F*[fnCuts];
630 if(fDoMesonAnalysis){
631 hMCPi0Pt = new TH1F*[fnCuts];
632 hMCPi0WOWeightPt = new TH1F*[fnCuts];
633 hMCEtaPt = new TH1F*[fnCuts];
634 hMCEtaWOWeightPt = new TH1F*[fnCuts];
635 hMCPi0InAccPt = new TH1F*[fnCuts];
636 hMCEtaInAccPt = new TH1F*[fnCuts];
638 hESDTrueMotherInvMassPt = new TH2F*[fnCuts];
639 hESDTruePrimaryMotherInvMassPt = new TH2F*[fnCuts];
640 hESDTruePrimaryMotherW0WeightingInvMassPt = new TH2F*[fnCuts];
641 pESDTruePrimaryMotherWeightsInvMassPt = new TProfile2D*[fnCuts];
642 hESDTrueSecondaryMotherInvMassPt = new TH2F*[fnCuts];
643 hESDTrueSecondaryMotherFromK0sInvMassPt = new TH2F*[fnCuts];
644 hESDTrueSecondaryMotherFromEtaInvMassPt = new TH2F*[fnCuts];
645 hESDTrueMotherDalitzInvMassPt = new TH2F*[fnCuts];
647 hMCPi0PtY = new TH2F*[fnCuts];
648 hMCEtaPtY = new TH2F*[fnCuts];
649 hMCK0sPt = new TH1F*[fnCuts];
650 hMCK0sWOWeightPt = new TH1F*[fnCuts];
651 hMCK0sPtY = new TH2F*[fnCuts];
652 hESDTruePrimaryPi0MCPtResolPt = new TH2F*[fnCuts];
653 hESDTruePrimaryEtaMCPtResolPt = new TH2F*[fnCuts];
654 hESDTrueK0sWithPi0DaughterMCPt = new TH1F*[fnCuts];
655 hESDTrueEtaWithPi0DaughterMCPt = new TH1F*[fnCuts];
656 hESDTrueBckGGInvMassPt = new TH2F*[fnCuts];
657 hESDTrueBckContInvMassPt = new TH2F*[fnCuts];
658 hESDTruePi0PtY = new TH2F*[fnCuts];
659 hESDTrueEtaPtY = new TH2F*[fnCuts];
660 hESDTruePi0PtAlpha = new TH2F*[fnCuts];
661 hESDTrueEtaPtAlpha = new TH2F*[fnCuts];
662 hESDTruePi0PtOpenAngle = new TH2F*[fnCuts];
663 hESDTrueEtaPtOpenAngle = new TH2F*[fnCuts];
667 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
668 TString cutstring = ((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber();
669 TString cutstringMeson = "NoMesonCut";
670 if(fDoMesonAnalysis)cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
672 fMCList[iCut] = new TList();
673 fMCList[iCut]->SetName(Form("%s_%s MC histograms",cutstring.Data(),cutstringMeson.Data()));
674 fMCList[iCut]->SetOwner(kTRUE);
675 fCutFolder[iCut]->Add(fMCList[iCut]);
676 hMCHeaders[iCut] = new TH1I("MC_Headers","MC_Headers",20,0,20);
677 fMCList[iCut]->Add(hMCHeaders[iCut]);
678 hMCAllGammaPt[iCut] = new TH1F("MC_AllGamma_Pt","MC_AllGamma_Pt",250,0,25);
679 fMCList[iCut]->Add(hMCAllGammaPt[iCut]);
680 hMCDecayGammaPi0Pt[iCut] = new TH1F("MC_DecayGammaPi0_Pt","MC_DecayGammaPi0_Pt",250,0,25);
681 fMCList[iCut]->Add(hMCDecayGammaPi0Pt[iCut]);
682 hMCDecayGammaRhoPt[iCut] = new TH1F("MC_DecayGammaRho_Pt","MC_DecayGammaRho_Pt",250,0,25);
683 fMCList[iCut]->Add(hMCDecayGammaRhoPt[iCut]);
684 hMCDecayGammaEtaPt[iCut] = new TH1F("MC_DecayGammaEta_Pt","MC_DecayGammaEta_Pt",250,0,25);
685 fMCList[iCut]->Add(hMCDecayGammaEtaPt[iCut]);
686 hMCDecayGammaOmegaPt[iCut] = new TH1F("MC_DecayGammaOmega_Pt","MC_DecayGammaOmmega_Pt",250,0,25);
687 fMCList[iCut]->Add(hMCDecayGammaOmegaPt[iCut]);
688 hMCDecayGammaEtapPt[iCut] = new TH1F("MC_DecayGammaEtap_Pt","MC_DecayGammaEtap_Pt",250,0,25);
689 fMCList[iCut]->Add(hMCDecayGammaEtapPt[iCut]);
690 hMCDecayGammaPhiPt[iCut] = new TH1F("MC_DecayGammaPhi_Pt","MC_DecayGammaPhi_Pt",250,0,25);
691 fMCList[iCut]->Add(hMCDecayGammaPhiPt[iCut]);
692 hMCDecayGammaSigmaPt[iCut] = new TH1F("MC_DecayGammaSigma_Pt","MC_DecayGammaSigma_Pt",250,0,25);
693 fMCList[iCut]->Add(hMCDecayGammaSigmaPt[iCut]);
694 hMCConvGammaPt[iCut] = new TH1F("MC_ConvGamma_Pt","MC_ConvGamma_Pt",250,0,25);
695 fMCList[iCut]->Add(hMCConvGammaPt[iCut]);
697 if (fDoPhotonQA > 0){
698 hMCConvGammaR[iCut] = new TH1F("MC_ConvGamma_R","MC_ConvGamma_R",800,0,200);
699 fMCList[iCut]->Add(hMCConvGammaR[iCut]);
700 hMCConvGammaEta[iCut] = new TH1F("MC_ConvGamma_Eta","MC_ConvGamma_Eta",100,-4,4);
701 fMCList[iCut]->Add(hMCConvGammaEta[iCut]);
704 if(fDoMesonAnalysis){
705 hMCPi0Pt[iCut] = new TH1F("MC_Pi0_Pt","MC_Pi0_Pt",250,0,25);
706 hMCPi0Pt[iCut]->Sumw2();
707 fMCList[iCut]->Add(hMCPi0Pt[iCut]);
708 hMCPi0WOWeightPt[iCut] = new TH1F("MC_Pi0_WOWeights_Pt","MC_Pi0_WOWeights_Pt",250,0,25);
709 hMCPi0WOWeightPt[iCut]->Sumw2();
710 fMCList[iCut]->Add(hMCPi0WOWeightPt[iCut]);
712 hMCEtaPt[iCut] = new TH1F("MC_Eta_Pt","MC_Eta_Pt",250,0,25);
713 hMCEtaPt[iCut]->Sumw2();
714 fMCList[iCut]->Add(hMCEtaPt[iCut]);
715 hMCEtaWOWeightPt[iCut] = new TH1F("MC_Eta_WOWeights_Pt","MC_Eta_WOWeights_Pt",250,0,25);
716 hMCEtaWOWeightPt[iCut]->Sumw2();
717 fMCList[iCut]->Add(hMCEtaWOWeightPt[iCut]);
718 hMCPi0InAccPt[iCut] = new TH1F("MC_Pi0InAcc_Pt","MC_Pi0InAcc_Pt",250,0,25);
719 hMCPi0InAccPt[iCut]->Sumw2();
720 fMCList[iCut]->Add(hMCPi0InAccPt[iCut]);
721 hMCEtaInAccPt[iCut] = new TH1F("MC_EtaInAcc_Pt","MC_EtaInAcc_Pt",250,0,25);
722 hMCEtaInAccPt[iCut]->Sumw2();
723 fMCList[iCut]->Add(hMCEtaInAccPt[iCut]);
725 hMCPi0PtY[iCut] = new TH2F("MC_Pi0_Pt_Y","MC_Pi0_Pt_Y",150,0.03,15.,150,-1.5,1.5);
726 hMCPi0PtY[iCut]->Sumw2();
727 SetLogBinningXTH2(hMCPi0PtY[iCut]);
728 fMCList[iCut]->Add(hMCPi0PtY[iCut]);
729 hMCEtaPtY[iCut] = new TH2F("MC_Eta_Pt_Y","MC_Eta_Pt_Y",150,0.03,15.,150,-1.5,1.5);
730 hMCEtaPtY[iCut]->Sumw2();
731 SetLogBinningXTH2(hMCEtaPtY[iCut]);
732 fMCList[iCut]->Add(hMCEtaPtY[iCut]);
733 hMCK0sPt[iCut] = new TH1F("MC_K0s_Pt","MC_K0s_Pt",150,0,15);
734 hMCK0sPt[iCut]->Sumw2();
735 fMCList[iCut]->Add(hMCK0sPt[iCut]);
736 hMCK0sWOWeightPt[iCut] = new TH1F("MC_K0s_WOWeights_Pt","MC_K0s_WOWeights_Pt",150,0,15);
737 hMCK0sWOWeightPt[iCut]->Sumw2();
738 fMCList[iCut]->Add(hMCK0sWOWeightPt[iCut]);
739 hMCK0sPtY[iCut] = new TH2F("MC_K0s_Pt_Y","MC_K0s_Pt_Y",150,0.03,15.,150,-1.5,1.5);
740 hMCK0sPtY[iCut]->Sumw2();
741 SetLogBinningXTH2(hMCK0sPtY[iCut]);
742 fMCList[iCut]->Add(hMCK0sPtY[iCut]);
747 fTrueList[iCut] = new TList();
748 fTrueList[iCut]->SetName(Form("%s_%s True histograms",cutstring.Data(),cutstringMeson.Data()));
749 fTrueList[iCut]->SetOwner(kTRUE);
750 fCutFolder[iCut]->Add(fTrueList[iCut]);
752 hESDTrueConvGammaPt[iCut] = new TH1F("ESD_TrueConvGamma_Pt","ESD_TrueConvGamma_Pt",250,0,25);
753 fTrueList[iCut]->Add(hESDTrueConvGammaPt[iCut]);
755 hESDCombinatorialPt[iCut] = new TH2F("ESD_TrueCombinatorial_Pt","ESD_TrueCombinatorial_Pt",250,0,25,16,-0.5,15.5);
756 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 1,"Elec+Elec");
757 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 2,"Elec+Pion");
758 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 3,"Elec+Kaon");
759 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 4,"Elec+Proton");
760 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 5,"Elec+Muon");
761 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 6,"Pion+Pion");
762 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 7,"Pion+Kaon");
763 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 8,"Pion+Proton");
764 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 9,"Pion+Muon");
765 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(10,"Kaon+Kaon");
766 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(11,"Kaon+Proton");
767 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(12,"Kaon+Muon");
768 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(13,"Proton+Proton");
769 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(14,"Proton+Muon");
770 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(15,"Muon+Muon");
771 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(16,"Rest");
772 fTrueList[iCut]->Add(hESDCombinatorialPt[iCut]);
773 hESDTruePrimaryConvGammaPt[iCut] = new TH1F("ESD_TruePrimaryConvGamma_Pt","ESD_TruePrimaryConvGamma_Pt",250,0,25);
774 fTrueList[iCut]->Add(hESDTruePrimaryConvGammaPt[iCut]);
775 hESDTrueSecondaryConvGammaPt[iCut] = new TH1F("ESD_TrueSecondaryConvGamma_Pt","ESD_TrueSecondaryConvGamma_Pt",250,0,25);
776 fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaPt[iCut]);
778 hESDTrueSecondaryConvGammaFromXFromK0sPt[iCut]
779 = new TH1F("ESD_TrueSecondaryConvGammaFromXFromK0s_Pt", "ESD_TrueSecondaryConvGammaFromXFromK0s_Pt",250,0,25);
780 fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaFromXFromK0sPt[iCut]);
781 hESDTrueSecondaryConvGammaFromXFromLambdaPt[iCut]
782 = new TH1F("ESD_TrueSecondaryConvGammaFromXFromLambda_Pt", "ESD_TrueSecondaryConvGammaFromXFromLambda_Pt",250,0,25);
783 fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaFromXFromLambdaPt[iCut]);
785 hESDTrueDalitzPsiPairDeltaPhi[iCut]
786 = new TH2F("ESD_TrueDalitzPsiPairDeltaPhi_Pt", "ESD_TrueDalitzPsiPairDeltaPhi_Pt",100,-0.5,2,100,-0.5,0.5);
787 fTrueList[iCut]->Add(hESDTrueDalitzPsiPairDeltaPhi[iCut]);
789 hESDTrueGammaPsiPairDeltaPhi[iCut]
790 = new TH2F("ESD_TrueGammaPsiPairDeltaPhi_Pt", "ESD_TrueGammaPsiPairDeltaPhi_Pt",100,-0.5,2,100,-0.5,0.5);
791 fTrueList[iCut]->Add(hESDTrueGammaPsiPairDeltaPhi[iCut]);
794 hESDTruePrimaryConvGammaESDPtMCPt[iCut] = new TH2F("ESD_TruePrimaryConvGammaESD_PtMCPt", "ESD_TruePrimaryConvGammaESD_PtMCPt",250,0,25,250,0,25);
795 fTrueList[iCut]->Add(hESDTruePrimaryConvGammaESDPtMCPt[iCut]);
797 if(fDoMesonAnalysis){
798 hESDTrueMotherInvMassPt[iCut] = new TH2F("ESD_TrueMother_InvMass_Pt","ESD_TrueMother_InvMass_Pt",800,0,0.8,250,0,25);
799 fTrueList[iCut]->Add(hESDTrueMotherInvMassPt[iCut]);
800 hESDTruePrimaryMotherInvMassPt[iCut]
801 = new TH2F("ESD_TruePrimaryMother_InvMass_Pt", "ESD_TruePrimaryMother_InvMass_Pt", 800,0,0.8,250,0,25);
802 hESDTruePrimaryMotherInvMassPt[iCut]->Sumw2();
803 fTrueList[iCut]->Add(hESDTruePrimaryMotherInvMassPt[iCut]);
804 hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]
805 = new TH2F("ESD_TruePrimaryMotherW0Weights_InvMass_Pt", "ESD_TruePrimaryMotherW0Weights_InvMass_Pt", 800,0,0.8,250,0,25);
806 hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]->Sumw2();
807 fTrueList[iCut]->Add(hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]);
808 pESDTruePrimaryMotherWeightsInvMassPt[iCut]
809 = new TProfile2D("ESD_TruePrimaryMotherWeights_InvMass_Pt", "ESD_TruePrimaryMotherWeights_InvMass_Pt", 800,0,0.8,250,0,25);
810 pESDTruePrimaryMotherWeightsInvMassPt[iCut]->Sumw2();
811 fTrueList[iCut]->Add(pESDTruePrimaryMotherWeightsInvMassPt[iCut]);
812 hESDTrueSecondaryMotherInvMassPt[iCut]
813 = new TH2F("ESD_TrueSecondaryMother_InvMass_Pt", "ESD_TrueSecondaryMother_InvMass_Pt", 800,0,0.8,250,0,25);
814 hESDTrueSecondaryMotherInvMassPt[iCut]->Sumw2();
815 fTrueList[iCut]->Add(hESDTrueSecondaryMotherInvMassPt[iCut]);
816 hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]
817 = new TH2F("ESD_TrueSecondaryMotherFromK0s_InvMass_Pt","ESD_TrueSecondaryMotherFromK0s_InvMass_Pt",800,0,0.8,250,0,25);
818 hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]->Sumw2();
819 fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]);
820 hESDTrueSecondaryMotherFromEtaInvMassPt[iCut]
821 = new TH2F("ESD_TrueSecondaryMotherFromEta_InvMass_Pt","ESD_TrueSecondaryMotherFromEta_InvMass_Pt",800,0,0.8,250,0,25);
822 fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromEtaInvMassPt[iCut]);
823 hESDTrueMotherDalitzInvMassPt[iCut] = new TH2F("ESD_TrueDalitz_InvMass_Pt","ESD_TrueDalitz_InvMass_Pt",800,0,0.8,250,0,25);
824 fTrueList[iCut]->Add(hESDTrueMotherDalitzInvMassPt[iCut]);
826 hESDTruePrimaryPi0MCPtResolPt[iCut] = new TH2F("ESD_TruePrimaryPi0_MCPt_ResolPt","ESD_TruePrimaryPi0_ResolPt_MCPt",500,0.03,25,1000,-1.,1.);
827 hESDTruePrimaryPi0MCPtResolPt[iCut]->Sumw2();
828 SetLogBinningXTH2(hESDTruePrimaryPi0MCPtResolPt[iCut]);
829 fTrueList[iCut]->Add(hESDTruePrimaryPi0MCPtResolPt[iCut]);
830 hESDTruePrimaryEtaMCPtResolPt[iCut] = new TH2F("ESD_TruePrimaryEta_MCPt_ResolPt","ESD_TruePrimaryEta_ResolPt_MCPt",500,0.03,25,1000,-1.,1.);
831 hESDTruePrimaryEtaMCPtResolPt[iCut]->Sumw2();
832 SetLogBinningXTH2(hESDTruePrimaryEtaMCPtResolPt[iCut]);
833 fTrueList[iCut]->Add(hESDTruePrimaryEtaMCPtResolPt[iCut]);
834 hESDTrueBckGGInvMassPt[iCut] = new TH2F("ESD_TrueBckGG_InvMass_Pt","ESD_TrueBckGG_InvMass_Pt",800,0,0.8,250,0,25);
835 fTrueList[iCut]->Add(hESDTrueBckGGInvMassPt[iCut]);
836 hESDTrueBckContInvMassPt[iCut] = new TH2F("ESD_TrueBckCont_InvMass_Pt","ESD_TrueBckCont_InvMass_Pt",800,0,0.8,250,0,25);
837 fTrueList[iCut]->Add(hESDTrueBckContInvMassPt[iCut]);
838 hESDTrueK0sWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueK0sWithPi0Daughter_MCPt","ESD_TrueK0sWithPi0Daughter_MCPt",250,0,25);
839 fTrueList[iCut]->Add(hESDTrueK0sWithPi0DaughterMCPt[iCut]);
840 hESDTrueEtaWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueEtaWithPi0Daughter_MCPt","ESD_TrueEtaWithPi0Daughter_MCPt",250,0,25);
841 fTrueList[iCut]->Add(hESDTrueEtaWithPi0DaughterMCPt[iCut]);
842 hESDTruePi0PtY[iCut] = new TH2F("ESD_TruePi0_Pt_Y","ESD_TruePi0_Pt_Y",150,0.03,15.,150,-1.5,1.5);
843 SetLogBinningXTH2(hESDTruePi0PtY[iCut]);
844 fTrueList[iCut]->Add(hESDTruePi0PtY[iCut]);
845 hESDTrueEtaPtY[iCut] = new TH2F("ESD_TrueEta_Pt_Y","ESD_TrueEta_Pt_Y",150,0.03,15.,150,-1.5,1.5);
846 SetLogBinningXTH2(hESDTrueEtaPtY[iCut]);
847 fTrueList[iCut]->Add(hESDTrueEtaPtY[iCut]);
848 hESDTruePi0PtAlpha[iCut] = new TH2F("ESD_TruePi0_Pt_Alpha","ESD_TruePi0_Pt_Alpha",150,0.03,15.,100,0,1);
849 SetLogBinningXTH2(hESDTruePi0PtAlpha[iCut]);
850 fTrueList[iCut]->Add(hESDTruePi0PtAlpha[iCut]);
851 hESDTrueEtaPtAlpha[iCut] = new TH2F("ESD_TrueEta_Pt_Alpha","ESD_TrueEta_Pt_Alpha",150,0.03,15.,100,0,1);
852 SetLogBinningXTH2(hESDTrueEtaPtAlpha[iCut]);
853 fTrueList[iCut]->Add(hESDTrueEtaPtAlpha[iCut]);
855 hESDTruePi0PtOpenAngle[iCut] = new TH2F("ESD_TruePi0_Pt_OpenAngle","ESD_TruePi0_Pt_OpenAngle",150,0.03,15.,200,0,2*TMath::Pi());
856 SetLogBinningXTH2(hESDTruePi0PtOpenAngle[iCut]);
857 fTrueList[iCut]->Add(hESDTruePi0PtOpenAngle[iCut]);
858 hESDTrueEtaPtOpenAngle[iCut] = new TH2F("ESD_TrueEta_Pt_OpenAngle","ESD_TrueEta_Pt_OpenAngle",150,0.03,15.,200,0,2*TMath::Pi());
859 SetLogBinningXTH2(hESDTrueEtaPtOpenAngle[iCut]);
860 fTrueList[iCut]->Add(hESDTrueEtaPtOpenAngle[iCut]);
867 fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
868 if(!fV0Reader){printf("Error: No V0 Reader");return;} // GetV0Reader
871 if((AliConversionCuts*)fV0Reader->GetConversionCuts())
872 if(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms())
873 fOutputContainer->Add(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms());
875 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
876 if(!((AliConversionCuts*)fCutArray->At(iCut))) continue;
877 if(((AliConversionCuts*)fCutArray->At(iCut))->GetCutHistograms()){
878 fCutFolder[iCut]->Add(((AliConversionCuts*)fCutArray->At(iCut))->GetCutHistograms());
880 if(fDoMesonAnalysis){
881 if(!((AliConversionMesonCuts*)fMesonCutArray->At(iCut))) continue;
882 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms()){
883 fCutFolder[iCut]->Add(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms());
887 PostData(1, fOutputContainer);
889 //_____________________________________________________________________________
890 Bool_t AliAnalysisTaskGammaConvV1::Notify()
892 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
893 if(!((AliConversionCuts*)fCutArray->At(iCut))->GetDoEtaShift()){
894 hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift()));
895 continue; // No Eta Shift requested, continue
897 if(((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift() == 0.0){ // Eta Shift requested but not set, get shift automatically
898 ((AliConversionCuts*)fCutArray->At(iCut))->GetCorrectEtaShiftFromPeriod(fV0Reader->GetPeriodName());
899 hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift()));
900 ((AliConversionCuts*)fCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
904 printf(" Gamma Conversion Task %s :: Eta Shift Manually Set to %f \n\n",
905 (((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber()).Data(),((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift());
906 hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift()));
907 ((AliConversionCuts*)fCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
913 //_____________________________________________________________________________
914 void AliAnalysisTaskGammaConvV1::UserExec(Option_t *)
917 // Called for each event
919 Int_t eventQuality = ((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetEventQuality();
920 if(eventQuality == 2 || eventQuality == 3){// Event Not Accepted due to MC event missing or wrong trigger for V0ReaderV1
921 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
922 hNEvents[iCut]->Fill(eventQuality);
927 if(fIsMC) fMCEvent = MCEvent();
928 if(fMCEvent == NULL) fIsMC = kFALSE;
930 fInputEvent = InputEvent();
932 if(fIsMC && fInputEvent->IsA()==AliESDEvent::Class()){
933 fMCStack = fMCEvent->Stack();
934 if(fMCStack == NULL) fIsMC = kFALSE;
937 fReaderGammas = fV0Reader->GetReconstructedGammas(); // Gammas from default Cut
939 // ------------------- BeginEvent ----------------------------
941 AliEventplane *EventPlane = fInputEvent->GetEventplane();
942 if(fIsHeavyIon)fEventPlaneAngle = EventPlane->GetEventplane("V0",fInputEvent,2);
943 else fEventPlaneAngle=0.0;
945 if(fIsMC && fInputEvent->IsA()==AliAODEvent::Class() && !(fV0Reader->AreAODsRelabeled())){
946 RelabelAODPhotonCandidates(kTRUE); // In case of AODMC relabeling MC
947 fV0Reader->RelabelAODs(kTRUE);
949 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
951 Int_t eventNotAccepted =
952 ((AliConversionCuts*)fCutArray->At(iCut))
953 ->IsEventAcceptedByConversionCut(fV0Reader->GetConversionCuts(),fInputEvent,fMCEvent,fIsHeavyIon);
954 if(eventNotAccepted){
955 // cout << "event rejected due to wrong trigger: " <<eventNotAccepted << endl;
956 hNEvents[iCut]->Fill(eventNotAccepted); // Check Centrality, PileUp, SDD and V0AND --> Not Accepted => eventQuality = 1
960 if(eventQuality != 0){// Event Not Accepted
961 // cout << "event rejected due to: " <<eventQuality << endl;
962 hNEvents[iCut]->Fill(eventQuality);
966 hNEvents[iCut]->Fill(eventQuality); // Should be 0 here
967 hNGoodESDTracks[iCut]->Fill(fV0Reader->GetNumberOfPrimaryTracks());
968 if(((AliConversionCuts*)fCutArray->At(iCut))->IsHeavyIon() == 2) hNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A());
969 else hNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A()+fInputEvent->GetVZEROData()->GetMTotV0C());
972 // Process MC Particle
973 if(((AliConversionCuts*)fCutArray->At(iCut))->GetSignalRejection() != 0){
974 if(fInputEvent->IsA()==AliESDEvent::Class()){
975 ((AliConversionCuts*)fCutArray->At(iCut))->GetNotRejectedParticles(((AliConversionCuts*)fCutArray->At(iCut))->GetSignalRejection(),
976 ((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader(),
979 else if(fInputEvent->IsA()==AliAODEvent::Class()){
980 ((AliConversionCuts*)fCutArray->At(iCut))->GetNotRejectedParticles(((AliConversionCuts*)fCutArray->At(iCut))->GetSignalRejection(),
981 ((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader(),
985 if(((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader()){
986 for(Int_t i = 0;i<(((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader())->GetEntries();i++){
987 TString nameBin= hMCHeaders[iCut]->GetXaxis()->GetBinLabel(i+1);
988 if (nameBin.CompareTo("")== 0){
989 TString nameHeader = ((TObjString*)((TList*)((AliConversionCuts*)fCutArray->At(iCut))
990 ->GetAcceptedHeader())->At(i))->GetString();
991 hMCHeaders[iCut]->GetXaxis()->SetBinLabel(i+1,nameHeader.Data());
998 if(fInputEvent->IsA()==AliESDEvent::Class())
999 ProcessMCParticles();
1000 if(fInputEvent->IsA()==AliAODEvent::Class())
1001 ProcessAODMCParticles();
1004 ProcessPhotonCandidates(); // Process this cuts gammas
1006 hNGammaCandidates[iCut]->Fill(fGammaCandidates->GetEntries());
1007 if(fDoMesonAnalysis){ // Meson Analysis
1008 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseMCPSmearing() && fIsMC){
1009 fUnsmearedPx = new Double_t[fGammaCandidates->GetEntries()]; // Store unsmeared Momenta
1010 fUnsmearedPy = new Double_t[fGammaCandidates->GetEntries()];
1011 fUnsmearedPz = new Double_t[fGammaCandidates->GetEntries()];
1012 fUnsmearedE = new Double_t[fGammaCandidates->GetEntries()];
1014 for(Int_t gamma=0;gamma<fGammaCandidates->GetEntries();gamma++){ // Smear the AODPhotons in MC
1015 fUnsmearedPx[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Px();
1016 fUnsmearedPy[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Py();
1017 fUnsmearedPz[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Pz();
1018 fUnsmearedE[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->E();
1019 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->SmearParticle(dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(gamma)));
1023 CalculatePi0Candidates(); // Combine Gammas
1024 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->DoBGCalculation()){
1025 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->BackgroundHandlerType() == 0){
1026 CalculateBackground(); // Combinatorial Background
1027 UpdateEventByEventData(); // Store Event for mixed Events
1030 CalculateBackgroundRP(); // Combinatorial Background
1031 fBGHandlerRP[iCut]->AddEvent(fGammaCandidates,fInputEvent); // Store Event for mixed Events
1034 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseMCPSmearing() && fIsMC){
1035 for(Int_t gamma=0;gamma<fGammaCandidates->GetEntries();gamma++){ // Smear the AODPhotons in MC
1036 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPx(fUnsmearedPx[gamma]); // Reset Unsmeared Momenta
1037 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPy(fUnsmearedPy[gamma]);
1038 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPz(fUnsmearedPz[gamma]);
1039 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetE(fUnsmearedE[gamma]);
1041 delete[] fUnsmearedPx; fUnsmearedPx = 0x0;
1042 delete[] fUnsmearedPy; fUnsmearedPy = 0x0;
1043 delete[] fUnsmearedPz; fUnsmearedPz = 0x0;
1044 delete[] fUnsmearedE; fUnsmearedE = 0x0;
1047 fGammaCandidates->Clear(); // delete this cuts good gammas
1050 if(fIsMC && fInputEvent->IsA()==AliAODEvent::Class() && !(fV0Reader->AreAODsRelabeled())){
1051 RelabelAODPhotonCandidates(kFALSE); // Back to ESDMC Label
1052 fV0Reader->RelabelAODs(kFALSE);
1055 PostData(1, fOutputContainer);
1057 //________________________________________________________________________
1058 void AliAnalysisTaskGammaConvV1::ProcessPhotonCandidates()
1061 TList *GammaCandidatesStepOne = new TList();
1062 TList *GammaCandidatesStepTwo = new TList();
1063 // Loop over Photon Candidates allocated by ReaderV1
1064 for(Int_t i = 0; i < fReaderGammas->GetEntriesFast(); i++){
1065 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(i);
1066 if(!PhotonCandidate) continue;
1067 fIsFromMBHeader = kTRUE;
1068 if(fIsMC && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
1069 Int_t isPosFromMBHeader
1070 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1071 if(isPosFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1072 Int_t isNegFromMBHeader
1073 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
1074 if(isNegFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1076 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1079 if(!((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelected(PhotonCandidate,fInputEvent)) continue;
1080 if(!((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(PhotonCandidate->GetPhotonPhi(),fEventPlaneAngle)) continue;
1081 if(!((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut() &&
1082 !((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){
1083 fGammaCandidates->Add(PhotonCandidate); // if no second loop is required add to events good gammas
1085 if(fIsFromMBHeader){
1086 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1087 if (fDoPhotonQA > 0){
1088 hESDConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
1089 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1093 if(fInputEvent->IsA()==AliESDEvent::Class())
1094 ProcessTruePhotonCandidates(PhotonCandidate);
1095 if(fInputEvent->IsA()==AliAODEvent::Class())
1096 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
1098 if (fIsFromMBHeader && fDoPhotonQA == 2){
1099 if (fIsHeavyIon && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
1100 fPtGamma = PhotonCandidate->Pt();
1101 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1102 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1103 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1104 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1105 tESDConvGammaPtDcazCat[fiCut]->Fill();
1106 } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
1107 fPtGamma = PhotonCandidate->Pt();
1108 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1109 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1110 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1111 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1112 tESDConvGammaPtDcazCat[fiCut]->Fill();
1115 } else if(((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut()){ // if Shared Electron cut is enabled, Fill array, add to step one
1116 ((AliConversionCuts*)fCutArray->At(fiCut))->FillElectonLabelArray(PhotonCandidate,nV0);
1118 GammaCandidatesStepOne->Add(PhotonCandidate);
1119 } else if(!((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut() &&
1120 ((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){ // shared electron is disabled, step one not needed -> step two
1121 GammaCandidatesStepTwo->Add(PhotonCandidate);
1124 if(((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut()){
1125 for(Int_t i = 0;i<GammaCandidatesStepOne->GetEntries();i++){
1126 AliAODConversionPhoton *PhotonCandidate= (AliAODConversionPhoton*) GammaCandidatesStepOne->At(i);
1127 if(!PhotonCandidate) continue;
1128 fIsFromMBHeader = kTRUE;
1129 if(fMCStack && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
1130 Int_t isPosFromMBHeader
1131 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1132 Int_t isNegFromMBHeader
1133 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
1134 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1136 if(!((AliConversionCuts*)fCutArray->At(fiCut))->RejectSharedElectronV0s(PhotonCandidate,i,GammaCandidatesStepOne->GetEntries())) continue;
1137 if(!((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){ // To Colse v0s cut diabled, step two not needed
1138 fGammaCandidates->Add(PhotonCandidate);
1139 if(fIsFromMBHeader){
1140 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1141 if (fDoPhotonQA > 0){
1142 hESDConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
1143 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1148 if(fInputEvent->IsA()==AliESDEvent::Class())
1149 ProcessTruePhotonCandidates(PhotonCandidate);
1150 if(fInputEvent->IsA()==AliAODEvent::Class())
1151 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
1152 } else GammaCandidatesStepTwo->Add(PhotonCandidate); // Close v0s cut enabled -> add to list two
1154 if (fIsFromMBHeader && fDoPhotonQA == 2){
1155 if (fIsHeavyIon && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
1156 fPtGamma = PhotonCandidate->Pt();
1157 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1158 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1159 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1160 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1161 tESDConvGammaPtDcazCat[fiCut]->Fill();
1162 } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
1163 fPtGamma = PhotonCandidate->Pt();
1164 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1165 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1166 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1167 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1168 tESDConvGammaPtDcazCat[fiCut]->Fill();
1173 if(((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){
1174 for(Int_t i = 0;i<GammaCandidatesStepTwo->GetEntries();i++){
1175 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) GammaCandidatesStepTwo->At(i);
1176 if(!PhotonCandidate) continue;
1177 fIsFromMBHeader = kTRUE;
1178 if(fMCStack && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
1179 Int_t isPosFromMBHeader
1180 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1181 Int_t isNegFromMBHeader
1182 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
1183 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1185 if(!((AliConversionCuts*)fCutArray->At(fiCut))->RejectToCloseV0s(PhotonCandidate,GammaCandidatesStepTwo,i)) continue;
1186 fGammaCandidates->Add(PhotonCandidate); // Add gamma to current cut TList
1187 if(fIsFromMBHeader){
1188 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1189 if (fDoPhotonQA > 0){
1190 hESDConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
1191 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1195 if(fInputEvent->IsA()==AliESDEvent::Class())
1196 ProcessTruePhotonCandidates(PhotonCandidate);
1197 if(fInputEvent->IsA()==AliAODEvent::Class())
1198 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
1200 if (fIsFromMBHeader){
1201 if (fIsHeavyIon == 1 && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
1202 fPtGamma = PhotonCandidate->Pt();
1203 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1204 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1205 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1206 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1207 tESDConvGammaPtDcazCat[fiCut]->Fill();
1208 } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
1209 fPtGamma = PhotonCandidate->Pt();
1210 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1211 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1212 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1213 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1214 tESDConvGammaPtDcazCat[fiCut]->Fill();
1220 delete GammaCandidatesStepOne;
1221 GammaCandidatesStepOne = 0x0;
1222 delete GammaCandidatesStepTwo;
1223 GammaCandidatesStepTwo = 0x0;
1226 //________________________________________________________________________
1227 void AliAnalysisTaskGammaConvV1::ProcessTruePhotonCandidatesAOD(AliAODConversionPhoton *TruePhotonCandidate)
1230 Double_t magField = fInputEvent->GetMagneticField();
1231 if( magField < 0.0 ){
1238 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1239 AliAODMCParticle *posDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelPositive());
1240 AliAODMCParticle *negDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelNegative());
1243 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
1244 Int_t pdgCode[2] = {abs(posDaughter->GetPdgCode()),abs(negDaughter->GetPdgCode())};
1246 if(posDaughter->GetMother() != negDaughter->GetMother()){
1247 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1251 else if(posDaughter->GetMother() == -1){
1252 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1257 if(pdgCode[0]!=11 || pdgCode[1]!=11){
1259 return; //One Particle is not a electron
1261 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()){
1263 return; // Same Charge
1266 AliAODMCParticle *Photon = (AliAODMCParticle*) AODMCTrackArray->At(posDaughter->GetMother());
1267 AliVTrack * electronCandidate = ((AliConversionCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelNegative() );
1268 AliVTrack * positronCandidate = ((AliConversionCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelPositive() );
1269 Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronCandidate->Phi()-positronCandidate->Phi());
1271 if(Photon->GetPdgCode() != 22){
1272 hESDTrueDalitzPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
1274 return; // Mother is no Photon
1277 if(((posDaughter->GetMCProcessCode())) != 5 || ((negDaughter->GetMCProcessCode())) != 5){
1279 return;// check if the daughters come from a conversion
1281 // STILL A BUG IN ALIROOT >>8 HAS TPO BE REMOVED AFTER FIX
1286 if(fIsFromMBHeader)hESDTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1287 hESDTrueGammaPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
1288 if(Photon->IsPrimary()){
1289 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
1290 if(fIsFromMBHeader){
1292 hESDTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1293 hESDTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
1295 // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
1298 if(fIsFromMBHeader){
1299 hESDTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1301 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
1302 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 3122){
1304 hESDTrueSecondaryConvGammaFromXFromLambdaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1306 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
1307 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 310){
1309 hESDTrueSecondaryConvGammaFromXFromK0sPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1311 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
1312 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 221){
1319 //________________________________________________________________________
1320 void AliAnalysisTaskGammaConvV1::ProcessTruePhotonCandidates(AliAODConversionPhoton *TruePhotonCandidate)
1323 Double_t magField = fInputEvent->GetMagneticField();
1324 if( magField < 0.0 ){
1331 // Process True Photons
1332 TParticle *posDaughter = TruePhotonCandidate->GetPositiveMCDaughter(fMCStack);
1333 TParticle *negDaughter = TruePhotonCandidate->GetNegativeMCDaughter(fMCStack);
1337 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
1338 Int_t pdgCode[2] = {abs(posDaughter->GetPdgCode()),abs(negDaughter->GetPdgCode())};
1340 if(posDaughter->GetMother(0) != negDaughter->GetMother(0)){
1341 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1344 else if(posDaughter->GetMother(0) == -1){
1345 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1349 if(pdgCode[0]!=11 || pdgCode[1]!=11) return; //One Particle is not a electron
1351 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()) return; // Same Charge
1353 TParticle *Photon = TruePhotonCandidate->GetMCParticle(fMCStack);
1354 AliVTrack * electronCandidate = ((AliConversionCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelNegative() );
1355 AliVTrack * positronCandidate = ((AliConversionCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelPositive() );
1356 Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronCandidate->Phi()-positronCandidate->Phi());
1358 if(Photon->GetPdgCode() != 22){
1359 hESDTrueDalitzPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
1360 return; // Mother is no Photon
1363 if(posDaughter->GetUniqueID() != 5 || negDaughter->GetUniqueID() !=5) return;// check if the daughters come from a conversion
1368 if(fIsFromMBHeader){
1369 hESDTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1371 hESDTrueGammaPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
1372 if(posDaughter->GetMother(0) <= fMCStack->GetNprimary()){
1373 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
1374 if(fIsFromMBHeader){
1376 hESDTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1377 hESDTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
1380 // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
1383 if(fIsFromMBHeader){
1385 hESDTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1386 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
1387 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 3122){
1388 hESDTrueSecondaryConvGammaFromXFromLambdaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1391 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
1392 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 310){
1393 hESDTrueSecondaryConvGammaFromXFromK0sPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1396 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
1397 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 221){
1403 //________________________________________________________________________
1404 void AliAnalysisTaskGammaConvV1::ProcessAODMCParticles()
1407 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1409 // Loop over all primary MC particle
1410 for(Int_t i = 0; i < AODMCTrackArray->GetEntriesFast(); i++) {
1412 AliAODMCParticle* particle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(i));
1413 if (!particle) continue;
1414 if (!particle->IsPrimary()) continue;
1416 Int_t isMCFromMBHeader = -1;
1417 if(((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
1419 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
1420 if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1423 if(!((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(particle->Phi(),fEventPlaneAngle,kFALSE)) continue;
1424 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kFALSE)){
1425 hMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
1426 if(particle->GetMother() >-1){ // Meson Decay Gamma
1427 switch((static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetMother())))->GetPdgCode()){
1429 hMCDecayGammaPi0Pt[fiCut]->Fill(particle->Pt());
1432 hMCDecayGammaRhoPt[fiCut]->Fill(particle->Pt());
1435 hMCDecayGammaEtaPt[fiCut]->Fill(particle->Pt());
1438 hMCDecayGammaOmegaPt[fiCut]->Fill(particle->Pt());
1441 hMCDecayGammaEtapPt[fiCut]->Fill(particle->Pt());
1444 hMCDecayGammaPhiPt[fiCut]->Fill(particle->Pt());
1447 hMCDecayGammaSigmaPt[fiCut]->Fill(particle->Pt());
1452 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kTRUE)){
1454 for(Int_t daughterIndex=particle->GetDaughter(0);daughterIndex<=particle->GetDaughter(1);daughterIndex++){
1455 AliAODMCParticle *tmpDaughter = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(daughterIndex));
1456 if(!tmpDaughter) continue;
1457 if(abs(tmpDaughter->GetPdgCode()) == 11){
1458 rConv = sqrt( (tmpDaughter->Xv()*tmpDaughter->Xv()) + (tmpDaughter->Yv()*tmpDaughter->Yv()) );
1461 hMCConvGammaPt[fiCut]->Fill(particle->Pt());
1462 if (fDoPhotonQA > 0){
1463 hMCConvGammaR[fiCut]->Fill(rConv);
1464 hMCConvGammaEta[fiCut]->Fill(particle->Eta());
1467 // Converted MC Gamma
1468 if(fDoMesonAnalysis){
1469 if(particle->GetPdgCode() == 310 && fDoMesonQA > 0){
1470 Double_t mesonY = 10.;
1471 if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
1472 mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1474 mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))
1475 -((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1477 Float_t weightedK0s= 1;
1478 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1479 if (particle->Pt()>0.005){
1480 weightedK0s= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
1481 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1484 hMCK0sPt[fiCut]->Fill(particle->Pt(),weightedK0s);
1485 hMCK0sWOWeightPt[fiCut]->Fill(particle->Pt());
1486 hMCK0sPtY[fiCut]->Fill(particle->Pt(),mesonY,weightedK0s);
1488 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
1489 ->MesonIsSelectedAODMC(particle,AODMCTrackArray,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
1490 AliAODMCParticle* daughter0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(0)));
1491 AliAODMCParticle* daughter1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(1)));
1492 Float_t weighted= 1;
1493 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1494 if (particle->Pt()>0.005){
1495 weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
1496 // if(particle->GetPdgCode() == 221){
1497 // cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1501 Double_t mesonY = 10.;
1502 if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
1503 mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1505 mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))
1506 -((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1509 if(particle->GetPdgCode() == 111){
1510 hMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
1511 hMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
1512 if (fDoMesonQA > 0) hMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1513 } else if(particle->GetPdgCode() == 221){
1514 hMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
1515 hMCEtaWOWeightPt[fiCut]->Fill(particle->Pt());
1516 if (fDoMesonQA > 0) hMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1519 // Check the acceptance for both gammas
1520 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter0,AODMCTrackArray,kFALSE) &&
1521 ((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter1,AODMCTrackArray,kFALSE) &&
1522 ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter0->Phi(),fEventPlaneAngle,kFALSE) &&
1523 ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter1->Phi(),fEventPlaneAngle,kFALSE)){
1525 if(particle->GetPdgCode() == 111){
1526 hMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
1527 } else if(particle->GetPdgCode() == 221){
1528 hMCEtaInAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Eta with gamma in acc
1535 //________________________________________________________________________
1536 void AliAnalysisTaskGammaConvV1::ProcessMCParticles()
1538 // Loop over all primary MC particle
1539 for(Int_t i = 0; i < fMCStack->GetNprimary(); i++) {
1540 TParticle* particle = (TParticle *)fMCStack->Particle(i);
1541 if (!particle) continue;
1543 Int_t isMCFromMBHeader = -1;
1544 if(((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
1546 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
1547 if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1550 if(!((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(particle->Phi(),fEventPlaneAngle,kFALSE)) continue;
1551 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kFALSE)){
1552 hMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
1553 if(particle->GetMother(0) >-1){ // Meson Decay Gamma
1554 switch(fMCStack->Particle(particle->GetMother(0))->GetPdgCode()){
1556 hMCDecayGammaPi0Pt[fiCut]->Fill(particle->Pt());
1559 hMCDecayGammaRhoPt[fiCut]->Fill(particle->Pt());
1562 hMCDecayGammaEtaPt[fiCut]->Fill(particle->Pt());
1565 hMCDecayGammaOmegaPt[fiCut]->Fill(particle->Pt());
1568 hMCDecayGammaEtapPt[fiCut]->Fill(particle->Pt());
1571 hMCDecayGammaPhiPt[fiCut]->Fill(particle->Pt());
1574 hMCDecayGammaSigmaPt[fiCut]->Fill(particle->Pt());
1579 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kTRUE)){
1580 hMCConvGammaPt[fiCut]->Fill(particle->Pt());
1581 if (fDoPhotonQA > 0){
1582 hMCConvGammaR[fiCut]->Fill(((TParticle*)fMCStack->Particle(particle->GetFirstDaughter()))->R());
1583 hMCConvGammaEta[fiCut]->Fill(particle->Eta());
1585 } // Converted MC Gamma
1586 if(fDoMesonAnalysis){
1587 if(particle->GetPdgCode() == 310 && fDoMesonQA > 0){
1588 Double_t mesonY = 10.;
1589 if(particle->Energy() - particle->Pz() == 0 || particle->Energy() + particle->Pz() == 0){
1590 mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1592 mesonY = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())))
1593 -((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1595 Float_t weightedK0s= 1;
1596 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1597 if (particle->Pt()>0.005){
1598 weightedK0s= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
1599 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1602 hMCK0sPt[fiCut]->Fill(particle->Pt(),weightedK0s);
1603 hMCK0sWOWeightPt[fiCut]->Fill(particle->Pt());
1604 hMCK0sPtY[fiCut]->Fill(particle->Pt(),mesonY,weightedK0s);
1606 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
1607 ->MesonIsSelectedMC(particle,fMCStack,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
1608 TParticle* daughter0 = (TParticle*)fMCStack->Particle(particle->GetFirstDaughter());
1609 TParticle* daughter1 = (TParticle*)fMCStack->Particle(particle->GetLastDaughter());
1611 Float_t weighted= 1;
1612 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1613 if (particle->Pt()>0.005){
1614 weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
1615 // if(particle->GetPdgCode() == 221){
1616 // cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1620 Double_t mesonY = 10.;
1621 if(particle->Energy() - particle->Pz() == 0 || particle->Energy() + particle->Pz() == 0){
1622 mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1624 mesonY = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())))
1625 -((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1628 if(particle->GetPdgCode() == 111){
1629 hMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
1630 hMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
1631 if (fDoMesonQA > 0) hMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1632 } else if(particle->GetPdgCode() == 221){
1633 hMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
1634 hMCEtaWOWeightPt[fiCut]->Fill(particle->Pt());
1635 if (fDoMesonQA > 0) hMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1638 // Check the acceptance for both gammas
1639 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter0,fMCStack,kFALSE) &&
1640 ((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter1,fMCStack,kFALSE) &&
1641 ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter0->Phi(),fEventPlaneAngle,kFALSE) &&
1642 ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter1->Phi(),fEventPlaneAngle,kFALSE)){
1644 if(particle->GetPdgCode() == 111){
1645 hMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
1646 } else if(particle->GetPdgCode() == 221){
1647 hMCEtaInAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Eta with gamma in acc
1654 //________________________________________________________________________
1655 void AliAnalysisTaskGammaConvV1::CalculatePi0Candidates(){
1657 // Conversion Gammas
1658 if(fGammaCandidates->GetEntries()>1){
1659 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries()-1;firstGammaIndex++){
1660 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
1661 if (gamma0==NULL) continue;
1662 for(Int_t secondGammaIndex=firstGammaIndex+1;secondGammaIndex<fGammaCandidates->GetEntries();secondGammaIndex++){
1663 AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(secondGammaIndex));
1664 //Check for same Electron ID
1665 if (gamma1==NULL) continue;
1666 if(gamma0->GetTrackLabelPositive() == gamma1->GetTrackLabelPositive() ||
1667 gamma0->GetTrackLabelNegative() == gamma1->GetTrackLabelNegative() ||
1668 gamma0->GetTrackLabelNegative() == gamma1->GetTrackLabelPositive() ||
1669 gamma0->GetTrackLabelPositive() == gamma1->GetTrackLabelNegative() ) continue;
1671 AliAODConversionMother *pi0cand = new AliAODConversionMother(gamma0,gamma1);
1672 pi0cand->SetLabels(firstGammaIndex,secondGammaIndex);
1674 pi0cand->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
1675 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
1676 ->MesonIsSelected(pi0cand,kTRUE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()))){
1677 hESDMotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
1678 if(pi0cand->GetAlpha()<0.1)
1679 hESDMotherInvMassEalpha[fiCut]->Fill(pi0cand->M(),pi0cand->E());
1681 if (fDoMesonQA > 0){
1682 if ( pi0cand->M() > 0.05 && pi0cand->M() < 0.17){
1683 hESDMotherPi0PtY[fiCut]->Fill(pi0cand->Pt(),pi0cand->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
1684 hESDMotherPi0PtAlpha[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetAlpha());
1685 hESDMotherPi0PtOpenAngle[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetOpeningAngle());
1688 if ( pi0cand->M() > 0.45 && pi0cand->M() < 0.65){
1689 hESDMotherEtaPtY[fiCut]->Fill(pi0cand->Pt(),pi0cand->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
1690 hESDMotherEtaPtAlpha[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetAlpha());
1691 hESDMotherEtaPtOpenAngle[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetOpeningAngle());
1694 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->DoBGCalculation()){
1698 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->BackgroundHandlerType() == 0){
1699 zbin = fBGHandler[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
1700 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1701 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
1703 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
1707 zbin = fBGHandlerRP[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
1708 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1709 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
1711 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
1714 Double_t sparesFill[4] = {pi0cand->M(),pi0cand->Pt(),(Double_t)zbin,(Double_t)mbin};
1715 sESDMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
1720 if(fInputEvent->IsA()==AliESDEvent::Class())
1721 ProcessTrueMesonCandidates(pi0cand,gamma0,gamma1);
1722 if(fInputEvent->IsA()==AliAODEvent::Class())
1723 ProcessTrueMesonCandidatesAOD(pi0cand,gamma0,gamma1);
1725 if (fDoMesonQA == 2){
1726 fInvMass = pi0cand->M();
1727 fPt = pi0cand->Pt();
1728 if (abs(gamma0->GetDCAzToPrimVtx()) < abs(gamma1->GetDCAzToPrimVtx())){
1729 fDCAzGammaMin = gamma0->GetDCAzToPrimVtx();
1730 fDCAzGammaMax = gamma1->GetDCAzToPrimVtx();
1732 fDCAzGammaMin = gamma1->GetDCAzToPrimVtx();
1733 fDCAzGammaMax = gamma0->GetDCAzToPrimVtx();
1735 iFlag = pi0cand->GetMesonQuality();
1736 // cout << "gamma 0: " << gamma0->GetV0Index()<< "\t" << gamma0->GetPx() << "\t" << gamma0->GetPy() << "\t" << gamma0->GetPz() << "\t" << endl;
1737 // cout << "gamma 1: " << gamma1->GetV0Index()<< "\t"<< gamma1->GetPx() << "\t" << gamma1->GetPy() << "\t" << gamma1->GetPz() << "\t" << endl;
1738 // cout << "pi0: "<<fInvMass << "\t" << fPt <<"\t" << fDCAzGammaMin << "\t" << fDCAzGammaMax << "\t" << (Int_t)iFlag << "\t" << (Int_t)iMesonMCInfo <<endl;
1739 if (fIsHeavyIon == 1 && fPt > 0.399 && fPt < 20. ) {
1740 if (fInvMass > 0.08 && fInvMass < 0.2) tESDMesonsInvMassPtDcazMinDcazMaxFlag[fiCut]->Fill();
1741 if ((fInvMass > 0.45 && fInvMass < 0.6) && (fPt > 0.999 && fPt < 20.) )tESDMesonsInvMassPtDcazMinDcazMaxFlag[fiCut]->Fill();
1742 } else if (fPt > 0.299 && fPt < 20. ) {
1743 if ( (fInvMass > 0.08 && fInvMass < 0.2) || (fInvMass > 0.45 && fInvMass < 0.6)) tESDMesonsInvMassPtDcazMinDcazMaxFlag[fiCut]->Fill();
1753 //______________________________________________________________________
1754 void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidates(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1)
1756 // Process True Mesons
1757 AliStack *MCStack = fMCEvent->Stack();
1759 if(TrueGammaCandidate0->GetV0Index()<fInputEvent->GetNumberOfV0s()){
1760 Bool_t isTruePi0 = kFALSE;
1761 Bool_t isTrueEta = kFALSE;
1762 Bool_t isTruePi0Dalitz = kFALSE;
1763 Bool_t isTrueEtaDalitz = kFALSE;
1764 Bool_t gamma0DalitzCand = kFALSE;
1765 Bool_t gamma1DalitzCand = kFALSE;
1766 Int_t gamma0MCLabel = TrueGammaCandidate0->GetMCParticleLabel(MCStack);
1767 Int_t gamma0MotherLabel = -1;
1768 if(gamma0MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1769 // Daughters Gamma 0
1770 TParticle * negativeMC = (TParticle*)TrueGammaCandidate0->GetNegativeMCDaughter(MCStack);
1771 TParticle * positiveMC = (TParticle*)TrueGammaCandidate0->GetPositiveMCDaughter(MCStack);
1772 TParticle * gammaMC0 = (TParticle*)MCStack->Particle(gamma0MCLabel);
1773 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
1774 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
1775 if(gammaMC0->GetPdgCode() == 22){ // ... with Gamma Mother
1776 gamma0MotherLabel=gammaMC0->GetFirstMother();
1779 if(gammaMC0->GetPdgCode() ==111){ // Dalitz candidate
1780 gamma0DalitzCand = kTRUE;
1781 gamma0MotherLabel=-111;
1783 if(gammaMC0->GetPdgCode() ==221){ // Dalitz candidate
1784 gamma0DalitzCand = kTRUE;
1785 gamma0MotherLabel=-221;
1789 if(TrueGammaCandidate1->GetV0Index()<fInputEvent->GetNumberOfV0s()){
1790 Int_t gamma1MCLabel = TrueGammaCandidate1->GetMCParticleLabel(MCStack);
1791 Int_t gamma1MotherLabel = -1;
1792 if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1793 // Daughters Gamma 1
1794 TParticle * negativeMC = (TParticle*)TrueGammaCandidate1->GetNegativeMCDaughter(MCStack);
1795 TParticle * positiveMC = (TParticle*)TrueGammaCandidate1->GetPositiveMCDaughter(MCStack);
1796 TParticle * gammaMC1 = (TParticle*)MCStack->Particle(gamma1MCLabel);
1797 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
1798 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
1799 if(gammaMC1->GetPdgCode() == 22){ // ... with Gamma Mother
1800 gamma1MotherLabel=gammaMC1->GetFirstMother();
1803 if(gammaMC1->GetPdgCode() ==111 ){ // Dalitz candidate
1804 gamma1DalitzCand = kTRUE;
1805 gamma1MotherLabel=-111;
1807 if(gammaMC1->GetPdgCode() ==221){ // Dalitz candidate
1808 gamma1DalitzCand = kTRUE;
1809 gamma1MotherLabel=-221;
1813 if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
1814 if(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 111){
1817 if(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 221){
1822 //Identify Dalitz candidate
1823 if (gamma1DalitzCand || gamma0DalitzCand){
1824 if (gamma0DalitzCand && gamma0MCLabel >=0 && gamma0MCLabel==gamma1MotherLabel){
1825 if (gamma0MotherLabel == -111) isTruePi0Dalitz = kTRUE;
1826 if (gamma0MotherLabel == -221) isTrueEtaDalitz = kTRUE;
1828 if (gamma1DalitzCand && gamma1MCLabel >=0 && gamma1MCLabel==gamma0MotherLabel){
1829 if (gamma1MotherLabel == -111) isTruePi0Dalitz = kTRUE;
1830 if (gamma1MotherLabel == -221) isTrueEtaDalitz = kTRUE;
1835 if(isTruePi0 || isTrueEta){// True Pion or Eta
1836 hESDTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1837 if (fDoMesonQA > 0){
1839 if ( Pi0Candidate->M() > 0.05 && Pi0Candidate->M() < 0.17){
1840 hESDTruePi0PtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
1841 hESDTruePi0PtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
1842 hESDTruePi0PtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
1844 } else if (isTrueEta){
1845 if ( Pi0Candidate->M() > 0.45 && Pi0Candidate->M() < 0.65){
1846 hESDTrueEtaPtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
1847 hESDTrueEtaPtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
1848 hESDTrueEtaPtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
1852 if(gamma0MotherLabel >= MCStack->GetNprimary()){ // Secondary Meson
1853 Int_t secMotherLabel = ((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetMother(0);
1854 Float_t weightedSec= 1;
1855 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, fMCStack, fInputEvent) && MCStack->Particle(secMotherLabel)->GetPdgCode()==310){
1856 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
1857 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1859 hESDTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
1861 if (secMotherLabel >-1){
1862 if(MCStack->Particle(secMotherLabel)->GetPdgCode()==310){
1864 hESDTrueSecondaryMotherFromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
1865 if (fDoMesonQA > 0)hESDTrueK0sWithPi0DaughterMCPt[fiCut]
1866 ->Fill(MCStack->Particle(secMotherLabel)->Pt());
1868 if(MCStack->Particle(secMotherLabel)->GetPdgCode()==221){
1870 hESDTrueSecondaryMotherFromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
1871 if (fDoMesonQA > 0)hESDTrueEtaWithPi0DaughterMCPt[fiCut]
1872 ->Fill(MCStack->Particle(secMotherLabel)->Pt());
1875 }else{ // Only primary pi0 for efficiency calculation
1877 Float_t weighted= 1;
1878 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, fMCStack, fInputEvent)){
1879 if (((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt()>0.005){
1880 weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, fMCStack, fInputEvent);
1881 // cout << "rec \t " <<gamma1MotherLabel << "\t" << weighted << endl;
1884 hESDTruePrimaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
1885 hESDTruePrimaryMotherW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1886 pESDTruePrimaryMotherWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
1889 if (fDoMesonQA > 0){
1890 if(isTruePi0){ // Only primary pi0 for resolution
1891 hESDTruePrimaryPi0MCPtResolPt[fiCut]->Fill(((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
1893 if (isTrueEta){ // Only primary eta for resolution
1894 hESDTruePrimaryEtaMCPtResolPt[fiCut]->Fill(((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
1898 } else if(!isTruePi0 && !isTrueEta){ // Background
1899 if (fDoMesonQA > 0){
1900 if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
1901 hESDTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1903 } else { // No photon or without mother
1904 hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1907 if( isTruePi0Dalitz || isTrueEtaDalitz ){
1910 hESDTrueMotherDalitzInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1911 } else if (gamma0DalitzCand || gamma1DalitzCand){
1912 if (fDoMesonQA > 0)hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1918 //______________________________________________________________________
1919 void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidatesAOD(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1)
1922 // Process True Mesons
1923 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1924 Bool_t isTruePi0 = kFALSE;
1925 Bool_t isTrueEta = kFALSE;
1926 Bool_t isTruePi0Dalitz = kFALSE;
1927 Bool_t isTrueEtaDalitz = kFALSE;
1928 Bool_t gamma0DalitzCand = kFALSE;
1929 Bool_t gamma1DalitzCand = kFALSE;
1931 AliAODMCParticle *positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelPositive()));
1932 AliAODMCParticle *negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelNegative()));
1935 Int_t gamma0MCLabel = -1;
1936 Int_t gamma0MotherLabel = -1;
1937 if(!positiveMC||!negativeMC)
1940 if(positiveMC->GetMother()>-1&&(negativeMC->GetMother() == positiveMC->GetMother())){
1941 gamma0MCLabel = positiveMC->GetMother();
1944 if(gamma0MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1945 // Daughters Gamma 0
1946 AliAODMCParticle * gammaMC0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MCLabel));
1947 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
1948 if(((positiveMC->GetMCProcessCode())) == 5 && ((negativeMC->GetMCProcessCode())) == 5){ // ... From Conversion ...
1949 if(gammaMC0->GetPdgCode() == 22){ // ... with Gamma Mother
1950 gamma0MotherLabel=gammaMC0->GetMother();
1953 if(gammaMC0->GetPdgCode() ==111){ // Dalitz candidate
1954 gamma0DalitzCand = kTRUE;
1955 gamma0MotherLabel=-111;
1957 if(gammaMC0->GetPdgCode() ==221){ // Dalitz candidate
1958 gamma0DalitzCand = kTRUE;
1959 gamma0MotherLabel=-221;
1963 positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate1->GetMCLabelPositive()));
1964 negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate1->GetMCLabelNegative()));
1966 Int_t gamma1MCLabel = -1;
1967 Int_t gamma1MotherLabel = -1;
1968 if(!positiveMC||!negativeMC)
1971 if(positiveMC->GetMother()>-1&&(negativeMC->GetMother() == positiveMC->GetMother())){
1972 gamma1MCLabel = positiveMC->GetMother();
1974 if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1975 // Daughters Gamma 1
1976 AliAODMCParticle * gammaMC1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MCLabel));
1977 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
1978 if(((positiveMC->GetMCProcessCode())) == 5 && ((negativeMC->GetMCProcessCode())) == 5){ // ... From Conversion ...
1979 if(gammaMC1->GetPdgCode() == 22){ // ... with Gamma Mother
1980 gamma1MotherLabel=gammaMC1->GetMother();
1983 if(gammaMC1->GetPdgCode() ==111 ){ // Dalitz candidate
1984 gamma1DalitzCand = kTRUE;
1985 gamma1MotherLabel=-111;
1987 if(gammaMC1->GetPdgCode() ==221){ // Dalitz candidate
1988 gamma1DalitzCand = kTRUE;
1989 gamma1MotherLabel=-221;
1993 if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
1994 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 111){
1997 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 221){
2002 //Identify Dalitz candidate
2003 if (gamma1DalitzCand || gamma0DalitzCand){
2004 if (gamma0DalitzCand && gamma0MCLabel >=0 && gamma0MCLabel==gamma1MotherLabel){
2005 if (gamma0MotherLabel == -111) isTruePi0Dalitz = kTRUE;
2006 if (gamma0MotherLabel == -221) isTrueEtaDalitz = kTRUE;
2008 if (gamma1DalitzCand && gamma1MCLabel >=0 && gamma1MCLabel==gamma0MotherLabel){
2009 if (gamma1MotherLabel == -111) isTruePi0Dalitz = kTRUE;
2010 if (gamma1MotherLabel == -221) isTrueEtaDalitz = kTRUE;
2014 if(isTruePi0 || isTrueEta){// True Pion or Eta
2015 hESDTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2016 if (fDoMesonQA > 0){
2018 if ( Pi0Candidate->M() > 0.05 && Pi0Candidate->M() < 0.17){
2019 hESDTruePi0PtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
2020 hESDTruePi0PtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
2021 hESDTruePi0PtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
2023 } else if (isTrueEta){
2024 if ( Pi0Candidate->M() > 0.45 && Pi0Candidate->M() < 0.65){
2025 hESDTrueEtaPtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
2026 hESDTrueEtaPtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
2027 hESDTrueEtaPtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
2031 if(!(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MotherLabel))->IsPrimary())){ // Secondary Meson
2032 Int_t secMotherLabel = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetMother();
2033 Float_t weightedSec= 1;
2034 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, 0x0, fInputEvent) && static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
2035 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
2036 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
2038 hESDTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2040 if (secMotherLabel >-1){
2041 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
2043 hESDTrueSecondaryMotherFromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2044 if (fDoMesonQA > 0)hESDTrueK0sWithPi0DaughterMCPt[fiCut]
2045 ->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
2047 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==221){
2049 hESDTrueSecondaryMotherFromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2050 if (fDoMesonQA > 0)hESDTrueEtaWithPi0DaughterMCPt[fiCut]
2051 ->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
2054 }else{ // Only primary pi0 for efficiency calculation
2055 Float_t weighted= 1;
2057 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, 0x0, fInputEvent)){
2058 if (static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt()>0.005){
2059 weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, 0x0, fInputEvent);
2060 // cout << "rec \t " <<gamma1MotherLabel << "\t" << weighted << endl;
2063 hESDTruePrimaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2064 hESDTruePrimaryMotherW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2065 pESDTruePrimaryMotherWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2067 if (fDoMesonQA > 0){
2068 if(isTruePi0){ // Only primary pi0 for resolution
2069 hESDTruePrimaryPi0MCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
2070 (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
2073 if (isTrueEta){ // Only primary eta for resolution
2074 hESDTruePrimaryEtaMCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
2075 (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
2079 } else if(!isTruePi0 && !isTrueEta) { // Background
2080 if (fDoMesonQA > 0){
2081 if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
2082 hESDTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2084 } else { // No photon or without mother
2085 hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2088 if( isTruePi0Dalitz || isTrueEtaDalitz ){
2091 hESDTrueMotherDalitzInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2092 } else if (gamma0DalitzCand || gamma1DalitzCand){
2093 if (fDoMesonQA > 0)hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2097 //________________________________________________________________________
2098 void AliAnalysisTaskGammaConvV1::CalculateBackground(){
2100 Int_t zbin= fBGHandler[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
2103 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2104 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
2106 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
2109 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseRotationMethod()){
2111 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
2112 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2113 for(Int_t iCurrent2=iCurrent+1;iCurrent2<fGammaCandidates->GetEntries();iCurrent2++){
2114 for(Int_t nRandom=0;nRandom<((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents();nRandom++){
2115 AliAODConversionPhoton currentEventGoodV02 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent2));
2117 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->DoBGProbability()){
2118 AliAODConversionMother *backgroundCandidateProb = new AliAODConversionMother(¤tEventGoodV0,¤tEventGoodV02);
2119 Double_t massBGprob = backgroundCandidateProb->M();
2120 if(massBGprob>0.1 && massBGprob<0.14){
2121 if(fRandom.Rndm()>fBGHandler[fiCut]->GetBGProb(zbin,mbin)){
2122 delete backgroundCandidateProb;
2126 delete backgroundCandidateProb;
2127 backgroundCandidateProb = 0x0;
2130 RotateParticle(¤tEventGoodV02);
2131 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,¤tEventGoodV02);
2132 backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2133 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2134 ->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()))){
2135 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2136 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2137 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2139 delete backgroundCandidate;
2140 backgroundCandidate = 0x0;
2145 AliGammaConversionAODBGHandler::GammaConversionVertex *bgEventVertex = NULL;
2147 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2148 for(Int_t nEventsInBG=0;nEventsInBG<fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
2149 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
2150 if(fMoveParticleAccordingToVertex == kTRUE){
2151 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
2154 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
2155 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2156 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
2157 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
2158 if(fMoveParticleAccordingToVertex == kTRUE){
2159 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
2161 if(((AliConversionCuts*)fCutArray->At(fiCut))->GetInPlaneOutOfPlaneCut() != 0){
2162 RotateParticleAccordingToEP(&previousGoodV0,bgEventVertex->fEP,fEventPlaneAngle);
2165 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
2166 backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2167 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2168 ->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()))){
2169 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2170 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2171 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2173 delete backgroundCandidate;
2174 backgroundCandidate = 0x0;
2180 for(Int_t nEventsInBG=0;nEventsInBG <fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
2181 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
2182 if(previousEventV0s){
2183 if(fMoveParticleAccordingToVertex == kTRUE){
2184 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
2186 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
2187 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2188 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
2190 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
2192 if(fMoveParticleAccordingToVertex == kTRUE){
2193 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
2195 if(((AliConversionCuts*)fCutArray->At(fiCut))->GetInPlaneOutOfPlaneCut() != 0){
2196 RotateParticleAccordingToEP(&previousGoodV0,bgEventVertex->fEP,fEventPlaneAngle);
2200 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
2201 backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2202 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2203 ->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()))){
2204 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2205 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2206 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2208 delete backgroundCandidate;
2209 backgroundCandidate = 0x0;
2217 //________________________________________________________________________
2218 void AliAnalysisTaskGammaConvV1::CalculateBackgroundRP(){
2220 Int_t zbin= fBGHandlerRP[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
2222 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2223 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
2225 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
2230 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseRotationMethod()){
2231 // Correct for the number of rotations
2232 // BG is for rotation the same, except for factor NRotations
2233 Double_t weight=1./Double_t(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents());
2235 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries();firstGammaIndex++){
2237 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
2238 if (gamma0==NULL) continue;
2239 for(Int_t secondGammaIndex=firstGammaIndex+1;secondGammaIndex<fGammaCandidates->GetEntries();secondGammaIndex++){
2240 AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(secondGammaIndex));
2241 if (gamma1 == NULL) continue;
2242 if(!((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelected(gamma1,fInputEvent))continue;
2243 for(Int_t nRandom=0;nRandom<((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents();nRandom++){
2245 RotateParticle(gamma1);
2247 AliAODConversionMother backgroundCandidate(gamma0,gamma1);
2248 backgroundCandidate.CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2249 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2250 ->MesonIsSelected(&backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
2251 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate.M(),backgroundCandidate.Pt());
2252 Double_t sparesFill[4] = {backgroundCandidate.M(),backgroundCandidate.Pt(),(Double_t)zbin,(Double_t)mbin};
2253 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,weight);
2261 for(Int_t nEventsInBG=0;nEventsInBG <fBGHandlerRP[fiCut]->GetNBGEvents(fGammaCandidates,fInputEvent);nEventsInBG++){
2263 AliGammaConversionPhotonVector *previousEventGammas = fBGHandlerRP[fiCut]->GetBGGoodGammas(fGammaCandidates,fInputEvent,nEventsInBG);
2265 if(previousEventGammas){
2266 // test weighted background
2267 Double_t weight=1.0;
2268 // Correct for the number of eventmixing:
2269 // N gammas -> (N-1) + (N-2) +(N-3) ...+ (N-(N-1)) using sum formula sum(i)=N*(N-1)/2 -> N*(N-1)/2
2270 // real combinations (since you cannot combine a photon with its own)
2271 // but BG leads to N_{a}*N_{b} combinations
2272 weight*=0.5*(Double_t(fGammaCandidates->GetEntries()-1))/Double_t(previousEventGammas->size());
2274 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
2276 AliAODConversionPhoton *gamma0 = (AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2278 for(UInt_t iPrevious=0;iPrevious<previousEventGammas->size();iPrevious++){
2280 AliAODConversionPhoton *gamma1 = (AliAODConversionPhoton*)(previousEventGammas->at(iPrevious));
2282 AliAODConversionMother backgroundCandidate(gamma0,gamma1);
2283 backgroundCandidate.CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2284 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2285 ->MesonIsSelected(&backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
2286 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate.M(),backgroundCandidate.Pt());
2287 Double_t sparesFill[4] = {backgroundCandidate.M(),backgroundCandidate.Pt(),(Double_t)zbin,(Double_t)mbin};
2288 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,weight);
2296 //________________________________________________________________________
2297 void AliAnalysisTaskGammaConvV1::RotateParticle(AliAODConversionPhoton *gamma){
2298 Int_t fNDegreesPMBackground= ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->NDegreesRotation();
2299 Double_t nRadiansPM = fNDegreesPMBackground*TMath::Pi()/180;
2300 Double_t rotationValue = fRandom.Rndm()*2*nRadiansPM + TMath::Pi()-nRadiansPM;
2301 gamma->RotateZ(rotationValue);
2304 //________________________________________________________________________
2305 void AliAnalysisTaskGammaConvV1::RotateParticleAccordingToEP(AliAODConversionPhoton *gamma, Double_t previousEventEP, Double_t thisEventEP){
2307 previousEventEP=previousEventEP+TMath::Pi();
2308 thisEventEP=thisEventEP+TMath::Pi();
2309 Double_t rotationValue= thisEventEP-previousEventEP;
2310 gamma->RotateZ(rotationValue);
2313 //________________________________________________________________________
2314 void AliAnalysisTaskGammaConvV1::MoveParticleAccordingToVertex(AliAODConversionPhoton* particle,const AliGammaConversionAODBGHandler::GammaConversionVertex *vertex){
2315 //see header file for documentation
2317 Double_t dx = vertex->fX - fInputEvent->GetPrimaryVertex()->GetX();
2318 Double_t dy = vertex->fY - fInputEvent->GetPrimaryVertex()->GetY();
2319 Double_t dz = vertex->fZ - fInputEvent->GetPrimaryVertex()->GetZ();
2321 Double_t movedPlace[3] = {particle->GetConversionX() - dx,particle->GetConversionY() - dy,particle->GetConversionZ() - dz};
2322 particle->SetConversionPoint(movedPlace);
2324 //________________________________________________________________________
2325 void AliAnalysisTaskGammaConvV1::UpdateEventByEventData(){
2326 //see header file for documentation
2327 if(fGammaCandidates->GetEntries() >0 ){
2328 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2329 fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fV0Reader->GetNumberOfPrimaryTracks(),fEventPlaneAngle);
2331 else{ // means we use #V0s for multiplicity
2332 fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fGammaCandidates->GetEntries(),fEventPlaneAngle);
2338 //________________________________________________________________________
2339 void AliAnalysisTaskGammaConvV1::FillPhotonCombinatorialBackgroundHist(AliAODConversionPhoton *TruePhotonCandidate, Int_t pdgCode[])
2341 // 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
2342 if(pdgCode[0]==11 && pdgCode[1]==11){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),0);}
2343 else if( (pdgCode[0]==11 && pdgCode[1]==211) || (pdgCode[0]==211 && pdgCode[1]==11) )
2344 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),1);}
2345 else if( (pdgCode[0]==11 && pdgCode[1]==321) || (pdgCode[0]==321 && pdgCode[1]==11) )
2346 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),2);}
2347 else if( (pdgCode[0]==11 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==11) )
2348 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),3);}
2349 else if( (pdgCode[0]==11 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==11) )
2350 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),4);}
2351 else if( pdgCode[0]==211 && pdgCode[1]==211 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),5);}
2352 else if( (pdgCode[0]==211 && pdgCode[1]==321) || (pdgCode[0]==321 && pdgCode[1]==211) )
2353 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),6);}
2354 else if( (pdgCode[0]==211 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==211) )
2355 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),7);}
2356 else if( (pdgCode[0]==211 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==211) )
2357 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),8);}
2358 else if( pdgCode[0]==321 && pdgCode[1]==321 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),9);}
2359 else if( (pdgCode[0]==321 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==321) )
2360 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),10);}
2361 else if( (pdgCode[0]==321 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==321) )
2362 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),11);}
2363 else if( pdgCode[0]==2212 && pdgCode[1]==2212 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),12);}
2364 else if( (pdgCode[0]==2212 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==2212) )
2365 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),13);}
2366 else if( pdgCode[0]==13 && pdgCode[1]==13 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),14);}
2367 else {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),15);}
2369 //________________________________________________________________________
2370 void AliAnalysisTaskGammaConvV1::RelabelAODPhotonCandidates(Bool_t mode){
2372 // Relabeling For AOD Event
2374 // MCLabel -> AODMCLabel
2377 fMCStackPos = new Int_t[fReaderGammas->GetEntries()];
2378 fMCStackNeg = new Int_t[fReaderGammas->GetEntries()];
2379 fESDArrayPos = new Int_t[fReaderGammas->GetEntries()];
2380 fESDArrayNeg = new Int_t[fReaderGammas->GetEntries()];
2383 for(Int_t iGamma = 0;iGamma<fReaderGammas->GetEntries();iGamma++){
2384 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(iGamma);
2385 if(!PhotonCandidate) continue;
2386 if(!mode){// Back to ESD Labels
2387 PhotonCandidate->SetMCLabelPositive(fMCStackPos[iGamma]);
2388 PhotonCandidate->SetMCLabelNegative(fMCStackNeg[iGamma]);
2389 PhotonCandidate->SetLabelPositive(fESDArrayPos[iGamma]);
2390 PhotonCandidate->SetLabelNegative(fESDArrayNeg[iGamma]);
2393 fMCStackPos[iGamma] = PhotonCandidate->GetMCLabelPositive();
2394 fMCStackNeg[iGamma] = PhotonCandidate->GetMCLabelNegative();
2395 fESDArrayPos[iGamma] = PhotonCandidate->GetTrackLabelPositive();
2396 fESDArrayNeg[iGamma] = PhotonCandidate->GetTrackLabelNegative();
2398 Bool_t AODLabelPos = kFALSE;
2399 Bool_t AODLabelNeg = kFALSE;
2401 for(Int_t i = 0; i<fInputEvent->GetNumberOfTracks();i++){
2402 AliAODTrack *tempDaughter = static_cast<AliAODTrack*>(fInputEvent->GetTrack(i));
2404 if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelPositive() ){
2405 PhotonCandidate->SetMCLabelPositive(abs(tempDaughter->GetLabel()));
2406 PhotonCandidate->SetLabelPositive(i);
2407 AODLabelPos = kTRUE;
2411 if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelNegative()){
2412 PhotonCandidate->SetMCLabelNegative(abs(tempDaughter->GetLabel()));
2413 PhotonCandidate->SetLabelNegative(i);
2414 AODLabelNeg = kTRUE;
2417 if(AODLabelNeg && AODLabelPos){
2421 if(!AODLabelPos || !AODLabelNeg){
2422 cout<<"WARNING!!! AOD TRACKS NOT FOUND FOR"<<endl;
2428 delete[] fMCStackPos;
2429 delete[] fMCStackNeg;
2430 delete[] fESDArrayPos;
2431 delete[] fESDArrayNeg;
2435 void AliAnalysisTaskGammaConvV1::SetLogBinningXTH2(TH2* histoRebin){
2436 TAxis *axisafter = histoRebin->GetXaxis();
2437 Int_t bins = axisafter->GetNbins();
2438 Double_t from = axisafter->GetXmin();
2439 Double_t to = axisafter->GetXmax();
2440 Double_t *newbins = new Double_t[bins+1];
2442 Double_t factor = TMath::Power(to/from, 1./bins);
2443 for(Int_t i=1; i<=bins; ++i) newbins[i] = factor * newbins[i-1];
2444 axisafter->Set(bins, newbins);
2449 //________________________________________________________________________
2450 void AliAnalysisTaskGammaConvV1::Terminate(const Option_t *)
2453 //fOutputContainer->Print(); // Will crash on GRID