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 hMCSecPi0PtvsSource(NULL),
129 hMCSecPi0Source(NULL),
131 hMCSecEtaSource(NULL),
132 hESDTrueMotherInvMassPt(NULL),
133 hESDTruePrimaryMotherInvMassPt(NULL),
134 hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
135 pESDTruePrimaryMotherWeightsInvMassPt(NULL),
136 hESDTruePrimaryPi0MCPtResolPt(NULL),
137 hESDTruePrimaryEtaMCPtResolPt(NULL),
138 hESDTrueSecondaryMotherInvMassPt(NULL),
139 hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
140 hESDTrueK0sWithPi0DaughterMCPt(NULL),
141 hESDTrueSecondaryMotherFromEtaInvMassPt(NULL),
142 hESDTrueEtaWithPi0DaughterMCPt(NULL),
143 hESDTrueSecondaryMotherFromLambdaInvMassPt(NULL),
144 hESDTrueLambdaWithPi0DaughterMCPt(NULL),
145 hESDTrueBckGGInvMassPt(NULL),
146 hESDTrueBckContInvMassPt(NULL),
147 hESDTruePi0PtY(NULL),
148 hESDTrueEtaPtY(NULL),
149 hESDTruePi0PtAlpha(NULL),
150 hESDTrueEtaPtAlpha(NULL),
151 hESDTruePi0PtOpenAngle(NULL),
152 hESDTrueEtaPtOpenAngle(NULL),
153 hESDTrueMotherDalitzInvMassPt(NULL),
154 hESDTrueConvGammaPt(NULL),
155 hESDTrueConvGammaEta(NULL),
156 hESDCombinatorialPt(NULL),
157 hESDTruePrimaryConvGammaPt(NULL),
158 hESDTruePrimaryConvGammaESDPtMCPt(NULL),
159 hESDTrueSecondaryConvGammaPt(NULL),
160 hESDTrueSecondaryConvGammaFromXFromK0sPt(NULL),
161 hESDTrueSecondaryConvGammaFromXFromLambdaPt(NULL),
162 hESDTrueDalitzPsiPairDeltaPhi(NULL),
163 hESDTrueGammaPsiPairDeltaPhi(NULL),
165 hNGoodESDTracks(NULL),
166 hNGammaCandidates(NULL),
169 tESDMesonsInvMassPtDcazMinDcazMaxFlag(NULL),
176 fEventPlaneAngle(-100),
178 fnGammaCandidates(0),
189 fMoveParticleAccordingToVertex(kTRUE),
191 fDoMesonAnalysis(kTRUE),
194 fIsFromMBHeader(kTRUE),
200 //________________________________________________________________________
201 AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(const char *name):
202 AliAnalysisTaskSE(name),
213 fPhotonDCAList(NULL),
217 fHeaderNameList(NULL),
220 fGammaCandidates(NULL),
222 fConversionCuts(NULL),
223 fMesonCutArray(NULL),
225 hESDConvGammaPt(NULL),
226 hESDConvGammaR(NULL),
227 hESDConvGammaEta(NULL),
228 tESDConvGammaPtDcazCat(NULL),
235 hESDMotherInvMassPt(NULL),
236 sESDMotherInvMassPtZM(NULL),
237 hESDMotherBackInvMassPt(NULL),
238 sESDMotherBackInvMassPtZM(NULL),
239 hESDMotherInvMassEalpha(NULL),
240 hESDMotherPi0PtY(NULL),
241 hESDMotherEtaPtY(NULL),
242 hESDMotherPi0PtAlpha(NULL),
243 hESDMotherEtaPtAlpha(NULL),
244 hESDMotherPi0PtOpenAngle(NULL),
245 hESDMotherEtaPtOpenAngle(NULL),
248 hMCDecayGammaPi0Pt(NULL),
249 hMCDecayGammaRhoPt(NULL),
250 hMCDecayGammaEtaPt(NULL),
251 hMCDecayGammaOmegaPt(NULL),
252 hMCDecayGammaEtapPt(NULL),
253 hMCDecayGammaPhiPt(NULL),
254 hMCDecayGammaSigmaPt(NULL),
255 hMCConvGammaPt(NULL),
257 hMCConvGammaEta(NULL),
259 hMCPi0WOWeightPt(NULL),
261 hMCEtaWOWeightPt(NULL),
267 hMCK0sWOWeightPt(NULL),
269 hMCSecPi0PtvsSource(NULL),
270 hMCSecPi0Source(NULL),
272 hMCSecEtaSource(NULL),
273 hESDTrueMotherInvMassPt(NULL),
274 hESDTruePrimaryMotherInvMassPt(NULL),
275 hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
276 pESDTruePrimaryMotherWeightsInvMassPt(NULL),
277 hESDTruePrimaryPi0MCPtResolPt(NULL),
278 hESDTruePrimaryEtaMCPtResolPt(NULL),
279 hESDTrueSecondaryMotherInvMassPt(NULL),
280 hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
281 hESDTrueK0sWithPi0DaughterMCPt(NULL),
282 hESDTrueSecondaryMotherFromEtaInvMassPt(NULL),
283 hESDTrueEtaWithPi0DaughterMCPt(NULL),
284 hESDTrueSecondaryMotherFromLambdaInvMassPt(NULL),
285 hESDTrueLambdaWithPi0DaughterMCPt(NULL),
286 hESDTrueBckGGInvMassPt(NULL),
287 hESDTrueBckContInvMassPt(NULL),
288 hESDTruePi0PtY(NULL),
289 hESDTrueEtaPtY(NULL),
290 hESDTruePi0PtAlpha(NULL),
291 hESDTrueEtaPtAlpha(NULL),
292 hESDTruePi0PtOpenAngle(NULL),
293 hESDTrueEtaPtOpenAngle(NULL),
294 hESDTrueMotherDalitzInvMassPt(NULL),
295 hESDTrueConvGammaPt(NULL),
296 hESDTrueConvGammaEta(NULL),
297 hESDCombinatorialPt(NULL),
298 hESDTruePrimaryConvGammaPt(NULL),
299 hESDTruePrimaryConvGammaESDPtMCPt(NULL),
300 hESDTrueSecondaryConvGammaPt(NULL),
301 hESDTrueSecondaryConvGammaFromXFromK0sPt(NULL),
302 hESDTrueSecondaryConvGammaFromXFromLambdaPt(NULL),
303 hESDTrueDalitzPsiPairDeltaPhi(NULL),
304 hESDTrueGammaPsiPairDeltaPhi(NULL),
306 hNGoodESDTracks(NULL),
307 hNGammaCandidates(NULL),
310 tESDMesonsInvMassPtDcazMinDcazMaxFlag(NULL),
317 fEventPlaneAngle(-100),
319 fnGammaCandidates(0),
330 fMoveParticleAccordingToVertex(kTRUE),
332 fDoMesonAnalysis(kTRUE),
335 fIsFromMBHeader(kTRUE),
338 // Define output slots here
339 DefineOutput(1, TList::Class());
342 AliAnalysisTaskGammaConvV1::~AliAnalysisTaskGammaConvV1()
344 if(fGammaCandidates){
345 delete fGammaCandidates;
346 fGammaCandidates = 0x0;
353 delete[] fBGHandlerRP;
357 //___________________________________________________________
358 void AliAnalysisTaskGammaConvV1::InitBack(){
360 const Int_t nDim = 4;
361 Int_t nBins[nDim] = {800,250,7,4};
362 Double_t xMin[nDim] = {0,0, 0,0};
363 Double_t xMax[nDim] = {0.8,25,7,4};
365 sESDMotherInvMassPtZM = new THnSparseF*[fnCuts];
366 sESDMotherBackInvMassPtZM = new THnSparseF*[fnCuts];
368 fBGHandler = new AliGammaConversionAODBGHandler*[fnCuts];
369 fBGHandlerRP = new AliConversionAODBGHandlerRP*[fnCuts];
370 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
371 if (((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->DoBGCalculation()){
372 TString cutstring = ((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber();
373 TString cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
375 Int_t collisionSystem = atoi((TString)(((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber())(0,1));
376 Int_t centMin = atoi((TString)(((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber())(1,1));
377 Int_t centMax = atoi((TString)(((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber())(2,1));
379 if(collisionSystem == 1 || collisionSystem == 2 ||
380 collisionSystem == 5 || collisionSystem == 8 ||
381 collisionSystem == 9){
382 centMin = centMin*10;
383 centMax = centMax*10;
384 if(centMax ==0 && centMax!=centMin) centMax=100;
386 else if(collisionSystem == 3 || collisionSystem == 6){
390 else if(collisionSystem == 4 || collisionSystem == 7){
391 centMin = ((centMin*5)+45);
392 centMax = ((centMax*5)+45);
395 fBackList[iCut] = new TList();
396 fBackList[iCut]->SetName(Form("%s_%s Back histograms",cutstring.Data(),cutstringMeson.Data()));
397 fBackList[iCut]->SetOwner(kTRUE);
398 fCutFolder[iCut]->Add(fBackList[iCut]);
400 sESDMotherBackInvMassPtZM[iCut] = new THnSparseF("Back_Back_InvMass_Pt_z_m","Back_Back_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
401 fBackList[iCut]->Add(sESDMotherBackInvMassPtZM[iCut]);
403 fMotherList[iCut] = new TList();
404 fMotherList[iCut]->SetName(Form("%s_%s Mother histograms",cutstring.Data(),cutstringMeson.Data()));
405 fMotherList[iCut]->SetOwner(kTRUE);
406 fCutFolder[iCut]->Add(fMotherList[iCut]);
408 sESDMotherInvMassPtZM[iCut] = new THnSparseF("Back_Mother_InvMass_Pt_z_m","Back_Mother_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
409 fMotherList[iCut]->Add(sESDMotherInvMassPtZM[iCut]);
411 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->BackgroundHandlerType() == 0){
412 fBGHandler[iCut] = new AliGammaConversionAODBGHandler(
413 collisionSystem,centMin,centMax,
414 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents(),
415 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseTrackMultiplicity());
416 fBGHandlerRP[iCut] = NULL;
419 fBGHandlerRP[iCut] = new AliConversionAODBGHandlerRP(
420 ((AliConversionCuts*)fCutArray->At(fiCut))->IsHeavyIon(),
421 ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity(),
422 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents());
423 fBGHandler[iCut] = NULL;
428 //________________________________________________________________________
429 void AliAnalysisTaskGammaConvV1::UserCreateOutputObjects(){
432 if(fOutputContainer != NULL){
433 delete fOutputContainer;
434 fOutputContainer = NULL;
436 if(fOutputContainer == NULL){
437 fOutputContainer = new TList();
438 fOutputContainer->SetOwner(kTRUE);
441 // Array of current cut's gammas
442 fGammaCandidates = new TList();
444 fCutFolder = new TList*[fnCuts];
445 fESDList = new TList*[fnCuts];
446 fBackList = new TList*[fnCuts];
447 fMotherList = new TList*[fnCuts];
448 hNEvents = new TH1I*[fnCuts];
449 hNGoodESDTracks = new TH1I*[fnCuts];
450 hNGammaCandidates = new TH1I*[fnCuts];
451 hNV0Tracks = new TH1I*[fnCuts];
452 hEtaShift = new TProfile*[fnCuts];
453 hESDConvGammaPt = new TH1F*[fnCuts];
455 if (fDoPhotonQA == 2){
456 fPhotonDCAList = new TList*[fnCuts];
457 tESDConvGammaPtDcazCat = new TTree*[fnCuts];
459 if (fDoPhotonQA > 0){
460 hESDConvGammaR = new TH1F*[fnCuts];
461 hESDConvGammaEta = new TH1F*[fnCuts];
464 if(fDoMesonAnalysis){
465 hESDMotherInvMassPt = new TH2F*[fnCuts];
466 hESDMotherBackInvMassPt = new TH2F*[fnCuts];
467 hESDMotherInvMassEalpha = new TH2F*[fnCuts];
468 if (fDoMesonQA == 2){
469 fMesonDCAList = new TList*[fnCuts];
470 tESDMesonsInvMassPtDcazMinDcazMaxFlag = new TTree*[fnCuts];
473 hESDMotherPi0PtY = new TH2F*[fnCuts];
474 hESDMotherEtaPtY = new TH2F*[fnCuts];
475 hESDMotherPi0PtAlpha = new TH2F*[fnCuts];
476 hESDMotherEtaPtAlpha = new TH2F*[fnCuts];
477 hESDMotherPi0PtOpenAngle = new TH2F*[fnCuts];
478 hESDMotherEtaPtOpenAngle = new TH2F*[fnCuts];
482 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
484 TString cutstring = ((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber();
485 TString cutstringMeson = "NoMesonCut";
486 if(fDoMesonAnalysis)cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
488 fCutFolder[iCut] = new TList();
489 fCutFolder[iCut]->SetName(Form("Cut Number %s_%s",cutstring.Data(),cutstringMeson.Data()));
490 fCutFolder[iCut]->SetOwner(kTRUE);
491 fOutputContainer->Add(fCutFolder[iCut]);
492 fESDList[iCut] = new TList();
493 fESDList[iCut]->SetName(Form("%s_%s ESD histograms",cutstring.Data(),cutstringMeson.Data()));
494 fESDList[iCut]->SetOwner(kTRUE);
495 fCutFolder[iCut]->Add(fESDList[iCut]);
497 hNEvents[iCut] = new TH1I("NEvents","NEvents",9,-0.5,8.5);
498 hNEvents[iCut]->GetXaxis()->SetBinLabel(1,"Accepted");
499 hNEvents[iCut]->GetXaxis()->SetBinLabel(2,"Centrality");
500 hNEvents[iCut]->GetXaxis()->SetBinLabel(3,"Missing MC");
501 if (((AliConversionCuts*)fCutArray->At(iCut))->IsSpecialTrigger() == 4 ){
502 TString TriggerNames = "Not Trigger: ";
503 TriggerNames = TriggerNames+ ( (AliConversionCuts*)fCutArray->At(iCut))->GetSpecialTriggerName();
504 hNEvents[iCut]->GetXaxis()->SetBinLabel(4,TriggerNames.Data());
506 hNEvents[iCut]->GetXaxis()->SetBinLabel(4,"Trigger");
508 hNEvents[iCut]->GetXaxis()->SetBinLabel(5,"Vertex Z");
509 hNEvents[iCut]->GetXaxis()->SetBinLabel(6,"Cont. Vertex");
510 hNEvents[iCut]->GetXaxis()->SetBinLabel(7,"Pile-Up");
511 hNEvents[iCut]->GetXaxis()->SetBinLabel(8,"no SDD");
512 hNEvents[iCut]->GetXaxis()->SetBinLabel(9,"no V0AND");
513 fESDList[iCut]->Add(hNEvents[iCut]);
515 if(fIsHeavyIon == 1) hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",4000,0,4000);
516 else if(fIsHeavyIon == 2) hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",400,0,400);
517 else hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",200,0,200);
518 fESDList[iCut]->Add(hNGoodESDTracks[iCut]);
519 if(fIsHeavyIon == 1) hNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",100,0,100);
520 else if(fIsHeavyIon == 2) hNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",50,0,50);
521 else hNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",50,0,50);
522 fESDList[iCut]->Add(hNGammaCandidates[iCut]);
523 if(fIsHeavyIon == 1) hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",30000,0,30000);
524 else if(fIsHeavyIon == 2) hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",2500,0,2500);
525 else hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",1500,0,1500);
526 fESDList[iCut]->Add(hNV0Tracks[iCut]);
527 hEtaShift[iCut] = new TProfile("Eta Shift","Eta Shift",1, -0.5,0.5);
528 fESDList[iCut]->Add(hEtaShift[iCut]);
529 hESDConvGammaPt[iCut] = new TH1F("ESD_ConvGamma_Pt","ESD_ConvGamma_Pt",250,0,25);
530 fESDList[iCut]->Add(hESDConvGammaPt[iCut]);
532 if (fDoPhotonQA == 2){
533 fPhotonDCAList[iCut] = new TList();
534 fPhotonDCAList[iCut]->SetName(Form("%s_%s Photon DCA tree",cutstring.Data(),cutstringMeson.Data()));
535 fPhotonDCAList[iCut]->SetOwner(kTRUE);
536 fCutFolder[iCut]->Add(fPhotonDCAList[iCut]);
538 tESDConvGammaPtDcazCat[iCut] = new TTree("ESD_ConvGamma_Pt_Dcaz_R_Eta","ESD_ConvGamma_Pt_Dcaz_R_Eta_Cat");
539 tESDConvGammaPtDcazCat[iCut]->Branch("Pt",&fPtGamma,"fPtGamma/F");
540 tESDConvGammaPtDcazCat[iCut]->Branch("DcaZPhoton",&fDCAzPhoton,"fDCAzPhoton/F");
541 // tESDConvGammaPtDcazCat[iCut]->Branch("R",&fRConvPhoton,"fRConvPhoton/F");
542 // tESDConvGammaPtDcazCat[iCut]->Branch("Eta",&fEtaPhoton,"fEtaPhoton/F");
544 tESDConvGammaPtDcazCat[iCut]->Branch("cat",&iCatPhoton,"iCatPhoton/b");
546 tESDConvGammaPtDcazCat[iCut]->Branch("photonMCInfo",&iPhotonMCInfo,"iPhotonMCInfo/b");
548 fPhotonDCAList[iCut]->Add(tESDConvGammaPtDcazCat[iCut]);
551 if (fDoPhotonQA > 0){
552 hESDConvGammaR[iCut] = new TH1F("ESD_ConvGamma_R","ESD_ConvGamma_R",800,0,200);
553 fESDList[iCut]->Add(hESDConvGammaR[iCut]);
554 hESDConvGammaEta[iCut] = new TH1F("ESD_ConvGamma_Eta","ESD_ConvGamma_Eta",2000,-2,2);
555 fESDList[iCut]->Add(hESDConvGammaEta[iCut]);
558 if(fDoMesonAnalysis){
559 hESDMotherInvMassPt[iCut] = new TH2F("ESD_Mother_InvMass_Pt","ESD_Mother_InvMass_Pt",800,0,0.8,250,0,25);
560 fESDList[iCut]->Add(hESDMotherInvMassPt[iCut]);
561 hESDMotherBackInvMassPt[iCut] = new TH2F("ESD_Background_InvMass_Pt","ESD_Background_InvMass_Pt",800,0,0.8,250,0,25);
562 fESDList[iCut]->Add(hESDMotherBackInvMassPt[iCut]);
563 hESDMotherInvMassEalpha[iCut] = new TH2F("ESD_Mother_InvMass_vs_E_alpha","ESD_Mother_InvMass_vs_E_alpha",800,0,0.8,250,0,25);
564 fESDList[iCut]->Add(hESDMotherInvMassEalpha[iCut]);
565 if (fDoMesonQA == 2){
566 fMesonDCAList[iCut] = new TList();
567 fMesonDCAList[iCut]->SetName(Form("%s_%s Meson DCA tree",cutstring.Data(),cutstringMeson.Data()));
568 fMesonDCAList[iCut]->SetOwner(kTRUE);
569 fCutFolder[iCut]->Add(fMesonDCAList[iCut]);
571 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut] = new TTree("ESD_Mesons_InvMass_Pt_DcazMin_DcazMax_Flag","ESD_Mesons_InvMass_Pt_DcazMin_DcazMax_Flag");
572 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("InvMass",&fInvMass,"fInvMass/F");
573 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("Pt",&fPt,"fPt/F");
574 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("DcaZMin",&fDCAzGammaMin,"fDCAzGammaMin/F");
575 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("DcaZMax",&fDCAzGammaMax,"fDCAzGammaMax/F");
576 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("kind",&iFlag,"iFlag/b");
578 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("mesonMCInfo",&iMesonMCInfo,"iMesonMCInfo/b");
580 fMesonDCAList[iCut]->Add(tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]);
583 if (fDoMesonQA > 0 ){
584 hESDMotherPi0PtY[iCut] = new TH2F("ESD_MotherPi0_Pt_Y","ESD_MotherPi0_Pt_Y",150,0.03,15.,150,-1.5,1.5);
585 SetLogBinningXTH2(hESDMotherPi0PtY[iCut]);
586 fESDList[iCut]->Add(hESDMotherPi0PtY[iCut]);
587 hESDMotherEtaPtY[iCut] = new TH2F("ESD_MotherEta_Pt_Y","ESD_MotherEta_Pt_Y",150,0.03,15.,150,-1.5,1.5);
588 SetLogBinningXTH2(hESDMotherEtaPtY[iCut]);
589 fESDList[iCut]->Add(hESDMotherEtaPtY[iCut]);
590 hESDMotherPi0PtAlpha[iCut] = new TH2F("ESD_MotherPi0_Pt_Alpha","ESD_MotherPi0_Pt_Alpha",150,0.03,15.,100,0,1);
591 SetLogBinningXTH2(hESDMotherPi0PtAlpha[iCut]);
592 fESDList[iCut]->Add(hESDMotherPi0PtAlpha[iCut]);
593 hESDMotherEtaPtAlpha[iCut] = new TH2F("ESD_MotherEta_Pt_Alpha","ESD_MotherEta_Pt_Alpha",150,0.03,15.,100,0,1);
594 SetLogBinningXTH2(hESDMotherEtaPtAlpha[iCut]);
595 fESDList[iCut]->Add(hESDMotherEtaPtAlpha[iCut]);
596 hESDMotherPi0PtOpenAngle[iCut] = new TH2F("ESD_MotherPi0_Pt_OpenAngle","ESD_MotherPi0_Pt_OpenAngle",150,0.03,15.,200,0,2*TMath::Pi());
597 SetLogBinningXTH2(hESDMotherPi0PtOpenAngle[iCut]);
598 fESDList[iCut]->Add(hESDMotherPi0PtOpenAngle[iCut]);
599 hESDMotherEtaPtOpenAngle[iCut] = new TH2F("ESD_MotherEta_Pt_OpenAngle","ESD_MotherEta_Pt_OpenAngle",150,0.03,15.,200,0,2*TMath::Pi());
600 SetLogBinningXTH2(hESDMotherEtaPtOpenAngle[iCut]);
601 fESDList[iCut]->Add(hESDMotherEtaPtOpenAngle[iCut]);
609 if(fDoMesonAnalysis){
610 InitBack(); // Init Background Handler
615 fMCList = new TList*[fnCuts];
617 fTrueList = new TList*[fnCuts];
618 // Selected Header List
619 fHeaderNameList = new TList*[fnCuts];
620 hMCHeaders = new TH1I*[fnCuts];
621 hMCAllGammaPt = new TH1F*[fnCuts];
622 hMCDecayGammaPi0Pt = new TH1F*[fnCuts];
623 hMCDecayGammaRhoPt = new TH1F*[fnCuts];
624 hMCDecayGammaEtaPt = new TH1F*[fnCuts];
625 hMCDecayGammaOmegaPt = new TH1F*[fnCuts];
626 hMCDecayGammaEtapPt = new TH1F*[fnCuts];
627 hMCDecayGammaPhiPt = new TH1F*[fnCuts];
628 hMCDecayGammaSigmaPt = new TH1F*[fnCuts];
629 hMCConvGammaPt = new TH1F*[fnCuts];
630 hESDTrueConvGammaPt = new TH1F*[fnCuts];
632 hESDCombinatorialPt = new TH2F*[fnCuts];
633 hESDTruePrimaryConvGammaPt = new TH1F*[fnCuts];
634 hESDTruePrimaryConvGammaESDPtMCPt = new TH2F*[fnCuts];
635 hESDTrueSecondaryConvGammaPt = new TH1F*[fnCuts];
636 hESDTrueSecondaryConvGammaFromXFromK0sPt = new TH1F*[fnCuts];
637 hESDTrueSecondaryConvGammaFromXFromLambdaPt = new TH1F*[fnCuts];
639 hESDTrueDalitzPsiPairDeltaPhi= new TH2F*[fnCuts];
640 hESDTrueGammaPsiPairDeltaPhi= new TH2F*[fnCuts];
642 if (fDoPhotonQA > 0){
643 hMCConvGammaR = new TH1F*[fnCuts];
644 hMCConvGammaEta = new TH1F*[fnCuts];
645 hESDTrueConvGammaEta = new TH1F*[fnCuts];
648 if(fDoMesonAnalysis){
649 hMCPi0Pt = new TH1F*[fnCuts];
650 hMCPi0WOWeightPt = new TH1F*[fnCuts];
651 hMCEtaPt = new TH1F*[fnCuts];
652 hMCEtaWOWeightPt = new TH1F*[fnCuts];
653 hMCPi0InAccPt = new TH1F*[fnCuts];
654 hMCEtaInAccPt = new TH1F*[fnCuts];
656 hESDTrueMotherInvMassPt = new TH2F*[fnCuts];
657 hESDTruePrimaryMotherInvMassPt = new TH2F*[fnCuts];
658 hESDTruePrimaryMotherW0WeightingInvMassPt = new TH2F*[fnCuts];
659 pESDTruePrimaryMotherWeightsInvMassPt = new TProfile2D*[fnCuts];
660 hESDTrueSecondaryMotherInvMassPt = new TH2F*[fnCuts];
661 hESDTrueSecondaryMotherFromK0sInvMassPt = new TH2F*[fnCuts];
662 hESDTrueSecondaryMotherFromEtaInvMassPt = new TH2F*[fnCuts];
663 hESDTrueSecondaryMotherFromLambdaInvMassPt = new TH2F*[fnCuts];
664 hESDTrueMotherDalitzInvMassPt = new TH2F*[fnCuts];
666 hMCPi0PtY = new TH2F*[fnCuts];
667 hMCEtaPtY = new TH2F*[fnCuts];
668 hMCK0sPt = new TH1F*[fnCuts];
669 hMCK0sWOWeightPt = new TH1F*[fnCuts];
670 hMCK0sPtY = new TH2F*[fnCuts];
671 hMCSecPi0PtvsSource= new TH2F*[fnCuts];
672 hMCSecPi0Source = new TH1F*[fnCuts];
673 hMCSecEtaPt = new TH1F*[fnCuts];
674 hMCSecEtaSource = new TH1F*[fnCuts];
675 hESDTruePrimaryPi0MCPtResolPt = new TH2F*[fnCuts];
676 hESDTruePrimaryEtaMCPtResolPt = new TH2F*[fnCuts];
677 hESDTrueK0sWithPi0DaughterMCPt = new TH1F*[fnCuts];
678 hESDTrueEtaWithPi0DaughterMCPt = new TH1F*[fnCuts];
679 hESDTrueLambdaWithPi0DaughterMCPt = new TH1F*[fnCuts];
680 hESDTrueBckGGInvMassPt = new TH2F*[fnCuts];
681 hESDTrueBckContInvMassPt = new TH2F*[fnCuts];
682 hESDTruePi0PtY = new TH2F*[fnCuts];
683 hESDTrueEtaPtY = new TH2F*[fnCuts];
684 hESDTruePi0PtAlpha = new TH2F*[fnCuts];
685 hESDTrueEtaPtAlpha = new TH2F*[fnCuts];
686 hESDTruePi0PtOpenAngle = new TH2F*[fnCuts];
687 hESDTrueEtaPtOpenAngle = new TH2F*[fnCuts];
691 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
692 TString cutstring = ((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber();
693 TString cutstringMeson = "NoMesonCut";
694 if(fDoMesonAnalysis)cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
696 fMCList[iCut] = new TList();
697 fMCList[iCut]->SetName(Form("%s_%s MC histograms",cutstring.Data(),cutstringMeson.Data()));
698 fMCList[iCut]->SetOwner(kTRUE);
699 fCutFolder[iCut]->Add(fMCList[iCut]);
700 hMCHeaders[iCut] = new TH1I("MC_Headers","MC_Headers",20,0,20);
701 fMCList[iCut]->Add(hMCHeaders[iCut]);
702 hMCAllGammaPt[iCut] = new TH1F("MC_AllGamma_Pt","MC_AllGamma_Pt",250,0,25);
703 fMCList[iCut]->Add(hMCAllGammaPt[iCut]);
704 hMCDecayGammaPi0Pt[iCut] = new TH1F("MC_DecayGammaPi0_Pt","MC_DecayGammaPi0_Pt",250,0,25);
705 fMCList[iCut]->Add(hMCDecayGammaPi0Pt[iCut]);
706 hMCDecayGammaRhoPt[iCut] = new TH1F("MC_DecayGammaRho_Pt","MC_DecayGammaRho_Pt",250,0,25);
707 fMCList[iCut]->Add(hMCDecayGammaRhoPt[iCut]);
708 hMCDecayGammaEtaPt[iCut] = new TH1F("MC_DecayGammaEta_Pt","MC_DecayGammaEta_Pt",250,0,25);
709 fMCList[iCut]->Add(hMCDecayGammaEtaPt[iCut]);
710 hMCDecayGammaOmegaPt[iCut] = new TH1F("MC_DecayGammaOmega_Pt","MC_DecayGammaOmmega_Pt",250,0,25);
711 fMCList[iCut]->Add(hMCDecayGammaOmegaPt[iCut]);
712 hMCDecayGammaEtapPt[iCut] = new TH1F("MC_DecayGammaEtap_Pt","MC_DecayGammaEtap_Pt",250,0,25);
713 fMCList[iCut]->Add(hMCDecayGammaEtapPt[iCut]);
714 hMCDecayGammaPhiPt[iCut] = new TH1F("MC_DecayGammaPhi_Pt","MC_DecayGammaPhi_Pt",250,0,25);
715 fMCList[iCut]->Add(hMCDecayGammaPhiPt[iCut]);
716 hMCDecayGammaSigmaPt[iCut] = new TH1F("MC_DecayGammaSigma_Pt","MC_DecayGammaSigma_Pt",250,0,25);
717 fMCList[iCut]->Add(hMCDecayGammaSigmaPt[iCut]);
718 hMCConvGammaPt[iCut] = new TH1F("MC_ConvGamma_Pt","MC_ConvGamma_Pt",250,0,25);
719 fMCList[iCut]->Add(hMCConvGammaPt[iCut]);
721 if (fDoPhotonQA > 0){
722 hMCConvGammaR[iCut] = new TH1F("MC_ConvGamma_R","MC_ConvGamma_R",800,0,200);
723 fMCList[iCut]->Add(hMCConvGammaR[iCut]);
724 hMCConvGammaEta[iCut] = new TH1F("MC_ConvGamma_Eta","MC_ConvGamma_Eta",2000,-2,2);
725 fMCList[iCut]->Add(hMCConvGammaEta[iCut]);
728 if(fDoMesonAnalysis){
729 hMCPi0Pt[iCut] = new TH1F("MC_Pi0_Pt","MC_Pi0_Pt",250,0,25);
730 hMCPi0Pt[iCut]->Sumw2();
731 fMCList[iCut]->Add(hMCPi0Pt[iCut]);
732 hMCPi0WOWeightPt[iCut] = new TH1F("MC_Pi0_WOWeights_Pt","MC_Pi0_WOWeights_Pt",250,0,25);
733 hMCPi0WOWeightPt[iCut]->Sumw2();
734 fMCList[iCut]->Add(hMCPi0WOWeightPt[iCut]);
736 hMCEtaPt[iCut] = new TH1F("MC_Eta_Pt","MC_Eta_Pt",250,0,25);
737 hMCEtaPt[iCut]->Sumw2();
738 fMCList[iCut]->Add(hMCEtaPt[iCut]);
739 hMCEtaWOWeightPt[iCut] = new TH1F("MC_Eta_WOWeights_Pt","MC_Eta_WOWeights_Pt",250,0,25);
740 hMCEtaWOWeightPt[iCut]->Sumw2();
741 fMCList[iCut]->Add(hMCEtaWOWeightPt[iCut]);
742 hMCPi0InAccPt[iCut] = new TH1F("MC_Pi0InAcc_Pt","MC_Pi0InAcc_Pt",250,0,25);
743 hMCPi0InAccPt[iCut]->Sumw2();
744 fMCList[iCut]->Add(hMCPi0InAccPt[iCut]);
745 hMCEtaInAccPt[iCut] = new TH1F("MC_EtaInAcc_Pt","MC_EtaInAcc_Pt",250,0,25);
746 hMCEtaInAccPt[iCut]->Sumw2();
747 fMCList[iCut]->Add(hMCEtaInAccPt[iCut]);
749 hMCPi0PtY[iCut] = new TH2F("MC_Pi0_Pt_Y","MC_Pi0_Pt_Y",150,0.03,15.,150,-1.5,1.5);
750 hMCPi0PtY[iCut]->Sumw2();
751 SetLogBinningXTH2(hMCPi0PtY[iCut]);
752 fMCList[iCut]->Add(hMCPi0PtY[iCut]);
753 hMCEtaPtY[iCut] = new TH2F("MC_Eta_Pt_Y","MC_Eta_Pt_Y",150,0.03,15.,150,-1.5,1.5);
754 hMCEtaPtY[iCut]->Sumw2();
755 SetLogBinningXTH2(hMCEtaPtY[iCut]);
756 fMCList[iCut]->Add(hMCEtaPtY[iCut]);
757 hMCK0sPt[iCut] = new TH1F("MC_K0s_Pt","MC_K0s_Pt",150,0,15);
758 hMCK0sPt[iCut]->Sumw2();
759 fMCList[iCut]->Add(hMCK0sPt[iCut]);
760 hMCK0sWOWeightPt[iCut] = new TH1F("MC_K0s_WOWeights_Pt","MC_K0s_WOWeights_Pt",150,0,15);
761 hMCK0sWOWeightPt[iCut]->Sumw2();
762 fMCList[iCut]->Add(hMCK0sWOWeightPt[iCut]);
763 hMCK0sPtY[iCut] = new TH2F("MC_K0s_Pt_Y","MC_K0s_Pt_Y",150,0.03,15.,150,-1.5,1.5);
764 hMCK0sPtY[iCut]->Sumw2();
765 SetLogBinningXTH2(hMCK0sPtY[iCut]);
766 fMCList[iCut]->Add(hMCK0sPtY[iCut]);
768 hMCSecPi0Source[iCut] = new TH1F("MC_SecPi0_Source","MC_SecPi0_Source",5000,0.,5000);
769 fMCList[iCut]->Add(hMCSecPi0Source[iCut]);
770 hMCSecEtaSource[iCut] = new TH1F("MC_SecEta_Source","MC_SecEta_Source",5000,0,5000);
771 fMCList[iCut]->Add(hMCSecEtaSource[iCut]);
772 hMCSecPi0PtvsSource[iCut] = new TH2F("MC_SecPi0_Pt_Source","MC_SecPi0_Pt_Source",250,0.0,25.,16,-0.5,15.5);
773 hMCSecPi0PtvsSource[iCut]->Sumw2();
774 fMCList[iCut]->Add(hMCSecPi0PtvsSource[iCut]);
775 hMCSecEtaPt[iCut] = new TH1F("MC_SecEta_Pt","MC_SecEta_Pt",250,0,25);
776 hMCSecEtaPt[iCut]->Sumw2();
777 fMCList[iCut]->Add(hMCSecEtaPt[iCut]);
781 fTrueList[iCut] = new TList();
782 fTrueList[iCut]->SetName(Form("%s_%s True histograms",cutstring.Data(),cutstringMeson.Data()));
783 fTrueList[iCut]->SetOwner(kTRUE);
784 fCutFolder[iCut]->Add(fTrueList[iCut]);
786 hESDTrueConvGammaPt[iCut] = new TH1F("ESD_TrueConvGamma_Pt","ESD_TrueConvGamma_Pt",250,0,25);
787 fTrueList[iCut]->Add(hESDTrueConvGammaPt[iCut]);
789 hESDCombinatorialPt[iCut] = new TH2F("ESD_TrueCombinatorial_Pt","ESD_TrueCombinatorial_Pt",250,0,25,16,-0.5,15.5);
790 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 1,"Elec+Elec");
791 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 2,"Elec+Pion");
792 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 3,"Elec+Kaon");
793 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 4,"Elec+Proton");
794 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 5,"Elec+Muon");
795 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 6,"Pion+Pion");
796 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 7,"Pion+Kaon");
797 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 8,"Pion+Proton");
798 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 9,"Pion+Muon");
799 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(10,"Kaon+Kaon");
800 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(11,"Kaon+Proton");
801 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(12,"Kaon+Muon");
802 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(13,"Proton+Proton");
803 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(14,"Proton+Muon");
804 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(15,"Muon+Muon");
805 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(16,"Rest");
806 fTrueList[iCut]->Add(hESDCombinatorialPt[iCut]);
807 hESDTruePrimaryConvGammaPt[iCut] = new TH1F("ESD_TruePrimaryConvGamma_Pt","ESD_TruePrimaryConvGamma_Pt",250,0,25);
808 fTrueList[iCut]->Add(hESDTruePrimaryConvGammaPt[iCut]);
809 hESDTrueSecondaryConvGammaPt[iCut] = new TH1F("ESD_TrueSecondaryConvGamma_Pt","ESD_TrueSecondaryConvGamma_Pt",250,0,25);
810 fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaPt[iCut]);
812 hESDTrueSecondaryConvGammaFromXFromK0sPt[iCut]
813 = new TH1F("ESD_TrueSecondaryConvGammaFromXFromK0s_Pt", "ESD_TrueSecondaryConvGammaFromXFromK0s_Pt",250,0,25);
814 fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaFromXFromK0sPt[iCut]);
815 hESDTrueSecondaryConvGammaFromXFromLambdaPt[iCut]
816 = new TH1F("ESD_TrueSecondaryConvGammaFromXFromLambda_Pt", "ESD_TrueSecondaryConvGammaFromXFromLambda_Pt",250,0,25);
817 fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaFromXFromLambdaPt[iCut]);
819 hESDTrueDalitzPsiPairDeltaPhi[iCut]
820 = new TH2F("ESD_TrueDalitzPsiPairDeltaPhi_Pt", "ESD_TrueDalitzPsiPairDeltaPhi_Pt",100,-0.5,2,100,-0.5,0.5);
821 fTrueList[iCut]->Add(hESDTrueDalitzPsiPairDeltaPhi[iCut]);
823 hESDTrueGammaPsiPairDeltaPhi[iCut]
824 = new TH2F("ESD_TrueGammaPsiPairDeltaPhi_Pt", "ESD_TrueGammaPsiPairDeltaPhi_Pt",100,-0.5,2,100,-0.5,0.5);
825 fTrueList[iCut]->Add(hESDTrueGammaPsiPairDeltaPhi[iCut]);
827 hESDTruePrimaryConvGammaESDPtMCPt[iCut] = new TH2F("ESD_TruePrimaryConvGammaESD_PtMCPt", "ESD_TruePrimaryConvGammaESD_PtMCPt",250,0,25,250,0,25);
828 fTrueList[iCut]->Add(hESDTruePrimaryConvGammaESDPtMCPt[iCut]);
830 if(fDoMesonAnalysis){
831 hESDTrueMotherInvMassPt[iCut] = new TH2F("ESD_TrueMother_InvMass_Pt","ESD_TrueMother_InvMass_Pt",800,0,0.8,250,0,25);
832 fTrueList[iCut]->Add(hESDTrueMotherInvMassPt[iCut]);
833 hESDTruePrimaryMotherInvMassPt[iCut]
834 = new TH2F("ESD_TruePrimaryMother_InvMass_Pt", "ESD_TruePrimaryMother_InvMass_Pt", 800,0,0.8,250,0,25);
835 hESDTruePrimaryMotherInvMassPt[iCut]->Sumw2();
836 fTrueList[iCut]->Add(hESDTruePrimaryMotherInvMassPt[iCut]);
837 hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]
838 = new TH2F("ESD_TruePrimaryMotherW0Weights_InvMass_Pt", "ESD_TruePrimaryMotherW0Weights_InvMass_Pt", 800,0,0.8,250,0,25);
839 hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]->Sumw2();
840 fTrueList[iCut]->Add(hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]);
841 pESDTruePrimaryMotherWeightsInvMassPt[iCut]
842 = new TProfile2D("ESD_TruePrimaryMotherWeights_InvMass_Pt", "ESD_TruePrimaryMotherWeights_InvMass_Pt", 800,0,0.8,250,0,25);
843 pESDTruePrimaryMotherWeightsInvMassPt[iCut]->Sumw2();
844 fTrueList[iCut]->Add(pESDTruePrimaryMotherWeightsInvMassPt[iCut]);
845 hESDTrueSecondaryMotherInvMassPt[iCut]
846 = new TH2F("ESD_TrueSecondaryMother_InvMass_Pt", "ESD_TrueSecondaryMother_InvMass_Pt", 800,0,0.8,250,0,25);
847 hESDTrueSecondaryMotherInvMassPt[iCut]->Sumw2();
848 fTrueList[iCut]->Add(hESDTrueSecondaryMotherInvMassPt[iCut]);
849 hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]
850 = new TH2F("ESD_TrueSecondaryMotherFromK0s_InvMass_Pt","ESD_TrueSecondaryMotherFromK0s_InvMass_Pt",800,0,0.8,250,0,25);
851 hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]->Sumw2();
852 fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]);
853 hESDTrueSecondaryMotherFromEtaInvMassPt[iCut]
854 = new TH2F("ESD_TrueSecondaryMotherFromEta_InvMass_Pt","ESD_TrueSecondaryMotherFromEta_InvMass_Pt",800,0,0.8,250,0,25);
855 fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromEtaInvMassPt[iCut]);
856 hESDTrueSecondaryMotherFromLambdaInvMassPt[iCut]
857 = new TH2F("ESD_TrueSecondaryMotherFromLambda_InvMass_Pt","ESD_TrueSecondaryMotherFromLambda_InvMass_Pt",800,0,0.8,250,0,25);
858 fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromLambdaInvMassPt[iCut]);
859 hESDTrueMotherDalitzInvMassPt[iCut] = new TH2F("ESD_TrueDalitz_InvMass_Pt","ESD_TrueDalitz_InvMass_Pt",800,0,0.8,250,0,25);
860 fTrueList[iCut]->Add(hESDTrueMotherDalitzInvMassPt[iCut]);
862 hESDTruePrimaryPi0MCPtResolPt[iCut] = new TH2F("ESD_TruePrimaryPi0_MCPt_ResolPt","ESD_TruePrimaryPi0_ResolPt_MCPt",500,0.03,25,1000,-1.,1.);
863 hESDTruePrimaryPi0MCPtResolPt[iCut]->Sumw2();
864 SetLogBinningXTH2(hESDTruePrimaryPi0MCPtResolPt[iCut]);
865 fTrueList[iCut]->Add(hESDTruePrimaryPi0MCPtResolPt[iCut]);
866 hESDTruePrimaryEtaMCPtResolPt[iCut] = new TH2F("ESD_TruePrimaryEta_MCPt_ResolPt","ESD_TruePrimaryEta_ResolPt_MCPt",500,0.03,25,1000,-1.,1.);
867 hESDTruePrimaryEtaMCPtResolPt[iCut]->Sumw2();
868 SetLogBinningXTH2(hESDTruePrimaryEtaMCPtResolPt[iCut]);
869 fTrueList[iCut]->Add(hESDTruePrimaryEtaMCPtResolPt[iCut]);
870 hESDTrueBckGGInvMassPt[iCut] = new TH2F("ESD_TrueBckGG_InvMass_Pt","ESD_TrueBckGG_InvMass_Pt",800,0,0.8,250,0,25);
871 fTrueList[iCut]->Add(hESDTrueBckGGInvMassPt[iCut]);
872 hESDTrueBckContInvMassPt[iCut] = new TH2F("ESD_TrueBckCont_InvMass_Pt","ESD_TrueBckCont_InvMass_Pt",800,0,0.8,250,0,25);
873 fTrueList[iCut]->Add(hESDTrueBckContInvMassPt[iCut]);
874 hESDTrueK0sWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueK0sWithPi0Daughter_MCPt","ESD_TrueK0sWithPi0Daughter_MCPt",250,0,25);
875 fTrueList[iCut]->Add(hESDTrueK0sWithPi0DaughterMCPt[iCut]);
876 hESDTrueEtaWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueEtaWithPi0Daughter_MCPt","ESD_TrueEtaWithPi0Daughter_MCPt",250,0,25);
877 fTrueList[iCut]->Add(hESDTrueEtaWithPi0DaughterMCPt[iCut]);
878 hESDTrueLambdaWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueLambdaWithPi0Daughter_MCPt","ESD_TrueLambdaWithPi0Daughter_MCPt",250,0,25);
879 fTrueList[iCut]->Add(hESDTrueLambdaWithPi0DaughterMCPt[iCut]);
881 hESDTruePi0PtY[iCut] = new TH2F("ESD_TruePi0_Pt_Y","ESD_TruePi0_Pt_Y",150,0.03,15.,150,-1.5,1.5);
882 SetLogBinningXTH2(hESDTruePi0PtY[iCut]);
883 fTrueList[iCut]->Add(hESDTruePi0PtY[iCut]);
884 hESDTrueEtaPtY[iCut] = new TH2F("ESD_TrueEta_Pt_Y","ESD_TrueEta_Pt_Y",150,0.03,15.,150,-1.5,1.5);
885 SetLogBinningXTH2(hESDTrueEtaPtY[iCut]);
886 fTrueList[iCut]->Add(hESDTrueEtaPtY[iCut]);
887 hESDTruePi0PtAlpha[iCut] = new TH2F("ESD_TruePi0_Pt_Alpha","ESD_TruePi0_Pt_Alpha",150,0.03,15.,100,0,1);
888 SetLogBinningXTH2(hESDTruePi0PtAlpha[iCut]);
889 fTrueList[iCut]->Add(hESDTruePi0PtAlpha[iCut]);
890 hESDTrueEtaPtAlpha[iCut] = new TH2F("ESD_TrueEta_Pt_Alpha","ESD_TrueEta_Pt_Alpha",150,0.03,15.,100,0,1);
891 SetLogBinningXTH2(hESDTrueEtaPtAlpha[iCut]);
892 fTrueList[iCut]->Add(hESDTrueEtaPtAlpha[iCut]);
894 hESDTruePi0PtOpenAngle[iCut] = new TH2F("ESD_TruePi0_Pt_OpenAngle","ESD_TruePi0_Pt_OpenAngle",150,0.03,15.,200,0,2*TMath::Pi());
895 SetLogBinningXTH2(hESDTruePi0PtOpenAngle[iCut]);
896 fTrueList[iCut]->Add(hESDTruePi0PtOpenAngle[iCut]);
897 hESDTrueEtaPtOpenAngle[iCut] = new TH2F("ESD_TrueEta_Pt_OpenAngle","ESD_TrueEta_Pt_OpenAngle",150,0.03,15.,200,0,2*TMath::Pi());
898 SetLogBinningXTH2(hESDTrueEtaPtOpenAngle[iCut]);
899 fTrueList[iCut]->Add(hESDTrueEtaPtOpenAngle[iCut]);
901 hESDTrueConvGammaEta[iCut] = new TH1F("ESD_TrueConvGamma_Eta","ESD_TrueConvGamma_Eta",2000,-2,2);
902 fTrueList[iCut]->Add(hESDTrueConvGammaEta[iCut]);
909 fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
910 if(!fV0Reader){printf("Error: No V0 Reader");return;} // GetV0Reader
913 if((AliConversionCuts*)fV0Reader->GetConversionCuts())
914 if(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms())
915 fOutputContainer->Add(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms());
917 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
918 if(!((AliConversionCuts*)fCutArray->At(iCut))) continue;
919 if(((AliConversionCuts*)fCutArray->At(iCut))->GetCutHistograms()){
920 fCutFolder[iCut]->Add(((AliConversionCuts*)fCutArray->At(iCut))->GetCutHistograms());
922 if(fDoMesonAnalysis){
923 if(!((AliConversionMesonCuts*)fMesonCutArray->At(iCut))) continue;
924 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms()){
925 fCutFolder[iCut]->Add(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms());
929 PostData(1, fOutputContainer);
931 //_____________________________________________________________________________
932 Bool_t AliAnalysisTaskGammaConvV1::Notify()
934 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
935 if(!((AliConversionCuts*)fCutArray->At(iCut))->GetDoEtaShift()){
936 hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift()));
937 continue; // No Eta Shift requested, continue
939 if(((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift() == 0.0){ // Eta Shift requested but not set, get shift automatically
940 ((AliConversionCuts*)fCutArray->At(iCut))->GetCorrectEtaShiftFromPeriod(fV0Reader->GetPeriodName());
941 hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift()));
942 ((AliConversionCuts*)fCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
946 printf(" Gamma Conversion Task %s :: Eta Shift Manually Set to %f \n\n",
947 (((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber()).Data(),((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift());
948 hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift()));
949 ((AliConversionCuts*)fCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
955 //_____________________________________________________________________________
956 void AliAnalysisTaskGammaConvV1::UserExec(Option_t *)
959 // Called for each event
961 Int_t eventQuality = ((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetEventQuality();
962 if(eventQuality == 2 || eventQuality == 3){// Event Not Accepted due to MC event missing or wrong trigger for V0ReaderV1
963 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
964 hNEvents[iCut]->Fill(eventQuality);
969 if(fIsMC) fMCEvent = MCEvent();
970 if(fMCEvent == NULL) fIsMC = kFALSE;
972 fInputEvent = InputEvent();
974 if(fIsMC && fInputEvent->IsA()==AliESDEvent::Class()){
975 fMCStack = fMCEvent->Stack();
976 if(fMCStack == NULL) fIsMC = kFALSE;
979 fReaderGammas = fV0Reader->GetReconstructedGammas(); // Gammas from default Cut
981 // ------------------- BeginEvent ----------------------------
983 AliEventplane *EventPlane = fInputEvent->GetEventplane();
984 if(fIsHeavyIon ==1)fEventPlaneAngle = EventPlane->GetEventplane("V0",fInputEvent,2);
985 else fEventPlaneAngle=0.0;
987 if(fIsMC && fInputEvent->IsA()==AliAODEvent::Class() && !(fV0Reader->AreAODsRelabeled())){
988 RelabelAODPhotonCandidates(kTRUE); // In case of AODMC relabeling MC
989 fV0Reader->RelabelAODs(kTRUE);
991 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
993 Int_t eventNotAccepted =
994 ((AliConversionCuts*)fCutArray->At(iCut))
995 ->IsEventAcceptedByConversionCut(fV0Reader->GetConversionCuts(),fInputEvent,fMCEvent,fIsHeavyIon);
996 if(eventNotAccepted){
997 // cout << "event rejected due to wrong trigger: " <<eventNotAccepted << endl;
998 hNEvents[iCut]->Fill(eventNotAccepted); // Check Centrality, PileUp, SDD and V0AND --> Not Accepted => eventQuality = 1
1002 if(eventQuality != 0){// Event Not Accepted
1003 // cout << "event rejected due to: " <<eventQuality << endl;
1004 hNEvents[iCut]->Fill(eventQuality);
1008 hNEvents[iCut]->Fill(eventQuality); // Should be 0 here
1009 hNGoodESDTracks[iCut]->Fill(fV0Reader->GetNumberOfPrimaryTracks());
1010 if(((AliConversionCuts*)fCutArray->At(iCut))->IsHeavyIon() == 2) hNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A());
1011 else hNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A()+fInputEvent->GetVZEROData()->GetMTotV0C());
1014 // Process MC Particle
1015 if(((AliConversionCuts*)fCutArray->At(iCut))->GetSignalRejection() != 0){
1016 if(fInputEvent->IsA()==AliESDEvent::Class()){
1017 ((AliConversionCuts*)fCutArray->At(iCut))->GetNotRejectedParticles(((AliConversionCuts*)fCutArray->At(iCut))->GetSignalRejection(),
1018 ((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader(),
1021 else if(fInputEvent->IsA()==AliAODEvent::Class()){
1022 ((AliConversionCuts*)fCutArray->At(iCut))->GetNotRejectedParticles(((AliConversionCuts*)fCutArray->At(iCut))->GetSignalRejection(),
1023 ((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader(),
1027 if(((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader()){
1028 for(Int_t i = 0;i<(((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader())->GetEntries();i++){
1029 TString nameBin= hMCHeaders[iCut]->GetXaxis()->GetBinLabel(i+1);
1030 if (nameBin.CompareTo("")== 0){
1031 TString nameHeader = ((TObjString*)((TList*)((AliConversionCuts*)fCutArray->At(iCut))
1032 ->GetAcceptedHeader())->At(i))->GetString();
1033 hMCHeaders[iCut]->GetXaxis()->SetBinLabel(i+1,nameHeader.Data());
1040 if(fInputEvent->IsA()==AliESDEvent::Class())
1041 ProcessMCParticles();
1042 if(fInputEvent->IsA()==AliAODEvent::Class())
1043 ProcessAODMCParticles();
1046 ProcessPhotonCandidates(); // Process this cuts gammas
1048 hNGammaCandidates[iCut]->Fill(fGammaCandidates->GetEntries());
1049 if(fDoMesonAnalysis){ // Meson Analysis
1050 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseMCPSmearing() && fIsMC){
1051 fUnsmearedPx = new Double_t[fGammaCandidates->GetEntries()]; // Store unsmeared Momenta
1052 fUnsmearedPy = new Double_t[fGammaCandidates->GetEntries()];
1053 fUnsmearedPz = new Double_t[fGammaCandidates->GetEntries()];
1054 fUnsmearedE = new Double_t[fGammaCandidates->GetEntries()];
1056 for(Int_t gamma=0;gamma<fGammaCandidates->GetEntries();gamma++){ // Smear the AODPhotons in MC
1057 fUnsmearedPx[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Px();
1058 fUnsmearedPy[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Py();
1059 fUnsmearedPz[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Pz();
1060 fUnsmearedE[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->E();
1061 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->SmearParticle(dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(gamma)));
1065 CalculatePi0Candidates(); // Combine Gammas
1066 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->DoBGCalculation()){
1067 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->BackgroundHandlerType() == 0){
1068 CalculateBackground(); // Combinatorial Background
1069 UpdateEventByEventData(); // Store Event for mixed Events
1072 CalculateBackgroundRP(); // Combinatorial Background
1073 fBGHandlerRP[iCut]->AddEvent(fGammaCandidates,fInputEvent); // Store Event for mixed Events
1076 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseMCPSmearing() && fIsMC){
1077 for(Int_t gamma=0;gamma<fGammaCandidates->GetEntries();gamma++){ // Smear the AODPhotons in MC
1078 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPx(fUnsmearedPx[gamma]); // Reset Unsmeared Momenta
1079 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPy(fUnsmearedPy[gamma]);
1080 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPz(fUnsmearedPz[gamma]);
1081 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetE(fUnsmearedE[gamma]);
1083 delete[] fUnsmearedPx; fUnsmearedPx = 0x0;
1084 delete[] fUnsmearedPy; fUnsmearedPy = 0x0;
1085 delete[] fUnsmearedPz; fUnsmearedPz = 0x0;
1086 delete[] fUnsmearedE; fUnsmearedE = 0x0;
1089 fGammaCandidates->Clear(); // delete this cuts good gammas
1092 if(fIsMC && fInputEvent->IsA()==AliAODEvent::Class() && !(fV0Reader->AreAODsRelabeled())){
1093 RelabelAODPhotonCandidates(kFALSE); // Back to ESDMC Label
1094 fV0Reader->RelabelAODs(kFALSE);
1097 PostData(1, fOutputContainer);
1099 //________________________________________________________________________
1100 void AliAnalysisTaskGammaConvV1::ProcessPhotonCandidates()
1103 TList *GammaCandidatesStepOne = new TList();
1104 TList *GammaCandidatesStepTwo = new TList();
1105 // Loop over Photon Candidates allocated by ReaderV1
1106 for(Int_t i = 0; i < fReaderGammas->GetEntriesFast(); i++){
1107 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(i);
1108 if(!PhotonCandidate) continue;
1109 fIsFromMBHeader = kTRUE;
1110 if(fIsMC && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
1111 Int_t isPosFromMBHeader
1112 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1113 if(isPosFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1114 Int_t isNegFromMBHeader
1115 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
1116 if(isNegFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1118 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1121 if(!((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelected(PhotonCandidate,fInputEvent)) continue;
1122 if(!((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(PhotonCandidate->GetPhotonPhi(),fEventPlaneAngle)) continue;
1123 if(!((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut() &&
1124 !((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){
1125 fGammaCandidates->Add(PhotonCandidate); // if no second loop is required add to events good gammas
1127 if(fIsFromMBHeader){
1128 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1129 if (fDoPhotonQA > 0){
1130 hESDConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
1131 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1135 if(fInputEvent->IsA()==AliESDEvent::Class())
1136 ProcessTruePhotonCandidates(PhotonCandidate);
1137 if(fInputEvent->IsA()==AliAODEvent::Class())
1138 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
1140 if (fIsFromMBHeader && fDoPhotonQA == 2){
1141 if (fIsHeavyIon == 1 && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
1142 fPtGamma = PhotonCandidate->Pt();
1143 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1144 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1145 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1146 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1147 tESDConvGammaPtDcazCat[fiCut]->Fill();
1148 } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
1149 fPtGamma = PhotonCandidate->Pt();
1150 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1151 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1152 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1153 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1154 tESDConvGammaPtDcazCat[fiCut]->Fill();
1157 } else if(((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut()){ // if Shared Electron cut is enabled, Fill array, add to step one
1158 ((AliConversionCuts*)fCutArray->At(fiCut))->FillElectonLabelArray(PhotonCandidate,nV0);
1160 GammaCandidatesStepOne->Add(PhotonCandidate);
1161 } else if(!((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut() &&
1162 ((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){ // shared electron is disabled, step one not needed -> step two
1163 GammaCandidatesStepTwo->Add(PhotonCandidate);
1166 if(((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut()){
1167 for(Int_t i = 0;i<GammaCandidatesStepOne->GetEntries();i++){
1168 AliAODConversionPhoton *PhotonCandidate= (AliAODConversionPhoton*) GammaCandidatesStepOne->At(i);
1169 if(!PhotonCandidate) continue;
1170 fIsFromMBHeader = kTRUE;
1171 if(fMCStack && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
1172 Int_t isPosFromMBHeader
1173 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1174 Int_t isNegFromMBHeader
1175 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
1176 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1178 if(!((AliConversionCuts*)fCutArray->At(fiCut))->RejectSharedElectronV0s(PhotonCandidate,i,GammaCandidatesStepOne->GetEntries())) continue;
1179 if(!((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){ // To Colse v0s cut diabled, step two not needed
1180 fGammaCandidates->Add(PhotonCandidate);
1181 if(fIsFromMBHeader){
1182 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1183 if (fDoPhotonQA > 0){
1184 hESDConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
1185 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1190 if(fInputEvent->IsA()==AliESDEvent::Class())
1191 ProcessTruePhotonCandidates(PhotonCandidate);
1192 if(fInputEvent->IsA()==AliAODEvent::Class())
1193 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
1194 } else GammaCandidatesStepTwo->Add(PhotonCandidate); // Close v0s cut enabled -> add to list two
1196 if (fIsFromMBHeader && fDoPhotonQA == 2){
1197 if (fIsHeavyIon ==1 && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
1198 fPtGamma = PhotonCandidate->Pt();
1199 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1200 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1201 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1202 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1203 tESDConvGammaPtDcazCat[fiCut]->Fill();
1204 } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
1205 fPtGamma = PhotonCandidate->Pt();
1206 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1207 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1208 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1209 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1210 tESDConvGammaPtDcazCat[fiCut]->Fill();
1215 if(((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){
1216 for(Int_t i = 0;i<GammaCandidatesStepTwo->GetEntries();i++){
1217 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) GammaCandidatesStepTwo->At(i);
1218 if(!PhotonCandidate) continue;
1219 fIsFromMBHeader = kTRUE;
1220 if(fMCStack && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
1221 Int_t isPosFromMBHeader
1222 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1223 Int_t isNegFromMBHeader
1224 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
1225 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1227 if(!((AliConversionCuts*)fCutArray->At(fiCut))->RejectToCloseV0s(PhotonCandidate,GammaCandidatesStepTwo,i)) continue;
1228 fGammaCandidates->Add(PhotonCandidate); // Add gamma to current cut TList
1229 if(fIsFromMBHeader){
1230 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1231 if (fDoPhotonQA > 0){
1232 hESDConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
1233 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1237 if(fInputEvent->IsA()==AliESDEvent::Class())
1238 ProcessTruePhotonCandidates(PhotonCandidate);
1239 if(fInputEvent->IsA()==AliAODEvent::Class())
1240 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
1242 if (fIsFromMBHeader){
1243 if (fIsHeavyIon == 1 && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
1244 fPtGamma = PhotonCandidate->Pt();
1245 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1246 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1247 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1248 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1249 tESDConvGammaPtDcazCat[fiCut]->Fill();
1250 } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
1251 fPtGamma = PhotonCandidate->Pt();
1252 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1253 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1254 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1255 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1256 tESDConvGammaPtDcazCat[fiCut]->Fill();
1262 delete GammaCandidatesStepOne;
1263 GammaCandidatesStepOne = 0x0;
1264 delete GammaCandidatesStepTwo;
1265 GammaCandidatesStepTwo = 0x0;
1268 //________________________________________________________________________
1269 void AliAnalysisTaskGammaConvV1::ProcessTruePhotonCandidatesAOD(AliAODConversionPhoton *TruePhotonCandidate)
1272 Double_t magField = fInputEvent->GetMagneticField();
1273 if( magField < 0.0 ){
1280 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1281 AliAODMCParticle *posDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelPositive());
1282 AliAODMCParticle *negDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelNegative());
1285 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
1286 Int_t pdgCode[2] = {abs(posDaughter->GetPdgCode()),abs(negDaughter->GetPdgCode())};
1288 if(posDaughter->GetMother() != negDaughter->GetMother()){
1289 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1293 else if(posDaughter->GetMother() == -1){
1294 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1299 if(pdgCode[0]!=11 || pdgCode[1]!=11){
1301 return; //One Particle is not a electron
1303 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()){
1305 return; // Same Charge
1308 AliAODMCParticle *Photon = (AliAODMCParticle*) AODMCTrackArray->At(posDaughter->GetMother());
1309 AliVTrack * electronCandidate = ((AliConversionCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelNegative() );
1310 AliVTrack * positronCandidate = ((AliConversionCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelPositive() );
1311 Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronCandidate->Phi()-positronCandidate->Phi());
1313 if(Photon->GetPdgCode() != 22){
1314 hESDTrueDalitzPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
1316 return; // Mother is no Photon
1319 if(((posDaughter->GetMCProcessCode())) != 5 || ((negDaughter->GetMCProcessCode())) != 5){
1321 return;// check if the daughters come from a conversion
1323 // STILL A BUG IN ALIROOT >>8 HAS TPO BE REMOVED AFTER FIX
1328 if(fIsFromMBHeader){
1329 hESDTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1330 if (fDoPhotonQA > 0) hESDTrueConvGammaEta[fiCut]->Fill(TruePhotonCandidate->Eta());
1332 hESDTrueGammaPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
1333 if(Photon->IsPrimary()){
1334 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
1335 if(fIsFromMBHeader){
1337 hESDTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1338 hESDTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
1340 // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
1343 if(fIsFromMBHeader){
1344 hESDTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1346 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
1347 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 3122){
1349 hESDTrueSecondaryConvGammaFromXFromLambdaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1351 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
1352 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 310){
1354 hESDTrueSecondaryConvGammaFromXFromK0sPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1356 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
1357 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 221){
1364 //________________________________________________________________________
1365 void AliAnalysisTaskGammaConvV1::ProcessTruePhotonCandidates(AliAODConversionPhoton *TruePhotonCandidate)
1368 Double_t magField = fInputEvent->GetMagneticField();
1369 if( magField < 0.0 ){
1376 // Process True Photons
1377 TParticle *posDaughter = TruePhotonCandidate->GetPositiveMCDaughter(fMCStack);
1378 TParticle *negDaughter = TruePhotonCandidate->GetNegativeMCDaughter(fMCStack);
1382 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
1383 Int_t pdgCode[2] = {abs(posDaughter->GetPdgCode()),abs(negDaughter->GetPdgCode())};
1385 if(posDaughter->GetMother(0) != negDaughter->GetMother(0)){
1386 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1389 else if(posDaughter->GetMother(0) == -1){
1390 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1394 if(pdgCode[0]!=11 || pdgCode[1]!=11) return; //One Particle is not a electron
1396 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()) return; // Same Charge
1398 TParticle *Photon = TruePhotonCandidate->GetMCParticle(fMCStack);
1399 AliVTrack * electronCandidate = ((AliConversionCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelNegative() );
1400 AliVTrack * positronCandidate = ((AliConversionCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelPositive() );
1401 Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronCandidate->Phi()-positronCandidate->Phi());
1403 if(Photon->GetPdgCode() != 22){
1404 hESDTrueDalitzPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
1405 return; // Mother is no Photon
1408 if(posDaughter->GetUniqueID() != 5 || negDaughter->GetUniqueID() !=5) return;// check if the daughters come from a conversion
1413 if(fIsFromMBHeader){
1414 hESDTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1415 if (fDoPhotonQA > 0) hESDTrueConvGammaEta[fiCut]->Fill(TruePhotonCandidate->Eta());
1417 hESDTrueGammaPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
1418 if(posDaughter->GetMother(0) <= fMCStack->GetNprimary()){
1419 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
1420 if(fIsFromMBHeader){
1422 hESDTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1423 hESDTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
1426 // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
1429 if(fIsFromMBHeader){
1431 hESDTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1432 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
1433 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 3122){
1434 hESDTrueSecondaryConvGammaFromXFromLambdaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1437 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
1438 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 310){
1439 hESDTrueSecondaryConvGammaFromXFromK0sPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1442 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
1443 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 221){
1449 //________________________________________________________________________
1450 void AliAnalysisTaskGammaConvV1::ProcessAODMCParticles()
1453 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1455 // Loop over all primary MC particle
1456 for(Int_t i = 0; i < AODMCTrackArray->GetEntriesFast(); i++) {
1458 AliAODMCParticle* particle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(i));
1459 if (!particle) continue;
1460 if (!particle->IsPrimary()) continue;
1462 Int_t isMCFromMBHeader = -1;
1463 if(((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
1465 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
1466 if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1469 if(!((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(particle->Phi(),fEventPlaneAngle,kFALSE)) continue;
1470 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kFALSE)){
1471 hMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
1472 if(particle->GetMother() >-1){ // Meson Decay Gamma
1473 switch((static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetMother())))->GetPdgCode()){
1475 hMCDecayGammaPi0Pt[fiCut]->Fill(particle->Pt());
1478 hMCDecayGammaRhoPt[fiCut]->Fill(particle->Pt());
1481 hMCDecayGammaEtaPt[fiCut]->Fill(particle->Pt());
1484 hMCDecayGammaOmegaPt[fiCut]->Fill(particle->Pt());
1487 hMCDecayGammaEtapPt[fiCut]->Fill(particle->Pt());
1490 hMCDecayGammaPhiPt[fiCut]->Fill(particle->Pt());
1493 hMCDecayGammaSigmaPt[fiCut]->Fill(particle->Pt());
1498 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kTRUE)){
1500 for(Int_t daughterIndex=particle->GetDaughter(0);daughterIndex<=particle->GetDaughter(1);daughterIndex++){
1501 AliAODMCParticle *tmpDaughter = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(daughterIndex));
1502 if(!tmpDaughter) continue;
1503 if(abs(tmpDaughter->GetPdgCode()) == 11){
1504 rConv = sqrt( (tmpDaughter->Xv()*tmpDaughter->Xv()) + (tmpDaughter->Yv()*tmpDaughter->Yv()) );
1507 hMCConvGammaPt[fiCut]->Fill(particle->Pt());
1508 if (fDoPhotonQA > 0){
1509 hMCConvGammaR[fiCut]->Fill(rConv);
1510 hMCConvGammaEta[fiCut]->Fill(particle->Eta());
1513 // Converted MC Gamma
1514 if(fDoMesonAnalysis){
1515 if(particle->GetPdgCode() == 310 && fDoMesonQA > 0){
1516 Double_t mesonY = 10.;
1517 if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
1518 mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1520 mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))
1521 -((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1523 Float_t weightedK0s= 1;
1524 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1525 if (particle->Pt()>0.005){
1526 weightedK0s= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
1527 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1530 hMCK0sPt[fiCut]->Fill(particle->Pt(),weightedK0s);
1531 hMCK0sWOWeightPt[fiCut]->Fill(particle->Pt());
1532 hMCK0sPtY[fiCut]->Fill(particle->Pt(),mesonY,weightedK0s);
1534 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
1535 ->MesonIsSelectedAODMC(particle,AODMCTrackArray,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
1536 AliAODMCParticle* daughter0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(0)));
1537 AliAODMCParticle* daughter1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(1)));
1538 Float_t weighted= 1;
1539 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1540 if (particle->Pt()>0.005){
1541 weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
1542 // if(particle->GetPdgCode() == 221){
1543 // cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1547 Double_t mesonY = 10.;
1548 if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
1549 mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1551 mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))
1552 -((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1555 if(particle->GetPdgCode() == 111){
1556 hMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
1557 hMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
1558 if (fDoMesonQA > 0) hMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1559 } else if(particle->GetPdgCode() == 221){
1560 hMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
1561 hMCEtaWOWeightPt[fiCut]->Fill(particle->Pt());
1562 if (fDoMesonQA > 0) hMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1565 // Check the acceptance for both gammas
1566 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter0,AODMCTrackArray,kFALSE) &&
1567 ((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter1,AODMCTrackArray,kFALSE) &&
1568 ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter0->Phi(),fEventPlaneAngle,kFALSE) &&
1569 ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter1->Phi(),fEventPlaneAngle,kFALSE)){
1571 if(particle->GetPdgCode() == 111){
1572 hMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
1573 } else if(particle->GetPdgCode() == 221){
1574 hMCEtaInAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Eta with gamma in acc
1582 //________________________________________________________________________
1583 void AliAnalysisTaskGammaConvV1::ProcessMCParticles()
1585 // Loop over all primary MC particle
1586 for(Int_t i = 0; i < fMCStack->GetNprimary(); i++) {
1587 TParticle* particle = (TParticle *)fMCStack->Particle(i);
1588 if (!particle) continue;
1590 Int_t isMCFromMBHeader = -1;
1591 if(((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
1593 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
1594 if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1597 if(!((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(particle->Phi(),fEventPlaneAngle,kFALSE)) continue;
1598 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kFALSE)){
1599 hMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
1600 if(particle->GetMother(0) >-1){ // Meson Decay Gamma
1601 switch(fMCStack->Particle(particle->GetMother(0))->GetPdgCode()){
1603 hMCDecayGammaPi0Pt[fiCut]->Fill(particle->Pt());
1606 hMCDecayGammaRhoPt[fiCut]->Fill(particle->Pt());
1609 hMCDecayGammaEtaPt[fiCut]->Fill(particle->Pt());
1612 hMCDecayGammaOmegaPt[fiCut]->Fill(particle->Pt());
1615 hMCDecayGammaEtapPt[fiCut]->Fill(particle->Pt());
1618 hMCDecayGammaPhiPt[fiCut]->Fill(particle->Pt());
1621 hMCDecayGammaSigmaPt[fiCut]->Fill(particle->Pt());
1626 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kTRUE)){
1627 hMCConvGammaPt[fiCut]->Fill(particle->Pt());
1628 if (fDoPhotonQA > 0){
1629 hMCConvGammaR[fiCut]->Fill(((TParticle*)fMCStack->Particle(particle->GetFirstDaughter()))->R());
1630 hMCConvGammaEta[fiCut]->Fill(particle->Eta());
1632 } // Converted MC Gamma
1633 if(fDoMesonAnalysis){
1634 if(particle->GetPdgCode() == 310 && fDoMesonQA > 0){
1635 Double_t mesonY = 10.;
1636 if(particle->Energy() - particle->Pz() == 0 || particle->Energy() + particle->Pz() == 0){
1637 mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1639 mesonY = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())))
1640 -((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1642 Float_t weightedK0s= 1;
1643 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1644 if (particle->Pt()>0.005){
1645 weightedK0s= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
1646 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1649 if (fMCStack->IsPhysicalPrimary(i)){
1650 hMCK0sPt[fiCut]->Fill(particle->Pt(),weightedK0s);
1651 hMCK0sWOWeightPt[fiCut]->Fill(particle->Pt());
1652 hMCK0sPtY[fiCut]->Fill(particle->Pt(),mesonY,weightedK0s);
1655 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
1656 ->MesonIsSelectedMC(particle,fMCStack,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
1657 TParticle* daughter0 = (TParticle*)fMCStack->Particle(particle->GetFirstDaughter());
1658 TParticle* daughter1 = (TParticle*)fMCStack->Particle(particle->GetLastDaughter());
1660 Float_t weighted= 1;
1661 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1662 if (particle->Pt()>0.005){
1663 weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
1664 // if(particle->GetPdgCode() == 221){
1665 // cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1669 Double_t mesonY = 10.;
1670 if(particle->Energy() - particle->Pz() == 0 || particle->Energy() + particle->Pz() == 0){
1671 mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1673 mesonY = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())))
1674 -((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1677 if(particle->GetPdgCode() == 111){
1678 hMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
1679 hMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
1680 if (fDoMesonQA > 0) hMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1681 } else if(particle->GetPdgCode() == 221){
1682 hMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
1683 hMCEtaWOWeightPt[fiCut]->Fill(particle->Pt());
1684 if (fDoMesonQA > 0) hMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1687 // Check the acceptance for both gammas
1688 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter0,fMCStack,kFALSE) &&
1689 ((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter1,fMCStack,kFALSE) &&
1690 ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter0->Phi(),fEventPlaneAngle,kFALSE) &&
1691 ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter1->Phi(),fEventPlaneAngle,kFALSE)){
1693 if(particle->GetPdgCode() == 111){
1694 hMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
1695 } else if(particle->GetPdgCode() == 221){
1696 hMCEtaInAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Eta with gamma in acc
1704 for(Int_t i = fMCStack->GetNprimary(); i < fMCStack->GetNtrack(); i++) {
1705 TParticle* particle = (TParticle *)fMCStack->Particle(i);
1706 if (!particle) continue;
1708 Int_t isMCFromMBHeader = -1;
1709 if(((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
1711 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
1712 if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1715 if(fDoMesonAnalysis){
1716 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
1717 ->MesonIsSelectedMC(particle,fMCStack,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
1718 Float_t weighted= 1;
1719 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1720 if (particle->Pt()>0.005){
1721 weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
1722 // if(particle->GetPdgCode() == 221){
1723 // cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1728 if(particle->GetPdgCode() == 111){
1729 Int_t pdgCode = ((TParticle*)fMCStack->Particle( particle->GetFirstMother() ))->GetPdgCode();
1730 Int_t source = GetSourceClassification(111,pdgCode);
1731 hMCSecPi0PtvsSource[fiCut]->Fill(particle->Pt(),source,weighted); // All MC Pi0
1732 hMCSecPi0Source[fiCut]->Fill(pdgCode);
1733 } else if(particle->GetPdgCode() == 221){
1734 Int_t pdgCode = ((TParticle*)fMCStack->Particle( particle->GetFirstMother() ))->GetPdgCode();
1735 hMCSecEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
1736 hMCSecEtaSource[fiCut]->Fill(pdgCode);
1743 //________________________________________________________________________
1744 void AliAnalysisTaskGammaConvV1::CalculatePi0Candidates(){
1746 // Conversion Gammas
1747 if(fGammaCandidates->GetEntries()>1){
1748 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries()-1;firstGammaIndex++){
1749 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
1750 if (gamma0==NULL) continue;
1751 for(Int_t secondGammaIndex=firstGammaIndex+1;secondGammaIndex<fGammaCandidates->GetEntries();secondGammaIndex++){
1752 AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(secondGammaIndex));
1753 //Check for same Electron ID
1754 if (gamma1==NULL) continue;
1755 if(gamma0->GetTrackLabelPositive() == gamma1->GetTrackLabelPositive() ||
1756 gamma0->GetTrackLabelNegative() == gamma1->GetTrackLabelNegative() ||
1757 gamma0->GetTrackLabelNegative() == gamma1->GetTrackLabelPositive() ||
1758 gamma0->GetTrackLabelPositive() == gamma1->GetTrackLabelNegative() ) continue;
1760 AliAODConversionMother *pi0cand = new AliAODConversionMother(gamma0,gamma1);
1761 pi0cand->SetLabels(firstGammaIndex,secondGammaIndex);
1763 pi0cand->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
1764 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
1765 ->MesonIsSelected(pi0cand,kTRUE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()))){
1766 hESDMotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
1767 if(pi0cand->GetAlpha()<0.1)
1768 hESDMotherInvMassEalpha[fiCut]->Fill(pi0cand->M(),pi0cand->E());
1770 if (fDoMesonQA > 0){
1771 if ( pi0cand->M() > 0.05 && pi0cand->M() < 0.17){
1772 hESDMotherPi0PtY[fiCut]->Fill(pi0cand->Pt(),pi0cand->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
1773 hESDMotherPi0PtAlpha[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetAlpha());
1774 hESDMotherPi0PtOpenAngle[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetOpeningAngle());
1777 if ( pi0cand->M() > 0.45 && pi0cand->M() < 0.65){
1778 hESDMotherEtaPtY[fiCut]->Fill(pi0cand->Pt(),pi0cand->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
1779 hESDMotherEtaPtAlpha[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetAlpha());
1780 hESDMotherEtaPtOpenAngle[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetOpeningAngle());
1783 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->DoBGCalculation()){
1787 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->BackgroundHandlerType() == 0){
1788 zbin = fBGHandler[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
1789 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1790 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
1792 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
1796 zbin = fBGHandlerRP[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
1797 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1798 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
1800 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
1803 Double_t sparesFill[4] = {pi0cand->M(),pi0cand->Pt(),(Double_t)zbin,(Double_t)mbin};
1804 sESDMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
1809 if(fInputEvent->IsA()==AliESDEvent::Class())
1810 ProcessTrueMesonCandidates(pi0cand,gamma0,gamma1);
1811 if(fInputEvent->IsA()==AliAODEvent::Class())
1812 ProcessTrueMesonCandidatesAOD(pi0cand,gamma0,gamma1);
1814 if (fDoMesonQA == 2){
1815 fInvMass = pi0cand->M();
1816 fPt = pi0cand->Pt();
1817 if (abs(gamma0->GetDCAzToPrimVtx()) < abs(gamma1->GetDCAzToPrimVtx())){
1818 fDCAzGammaMin = gamma0->GetDCAzToPrimVtx();
1819 fDCAzGammaMax = gamma1->GetDCAzToPrimVtx();
1821 fDCAzGammaMin = gamma1->GetDCAzToPrimVtx();
1822 fDCAzGammaMax = gamma0->GetDCAzToPrimVtx();
1824 iFlag = pi0cand->GetMesonQuality();
1825 // cout << "gamma 0: " << gamma0->GetV0Index()<< "\t" << gamma0->GetPx() << "\t" << gamma0->GetPy() << "\t" << gamma0->GetPz() << "\t" << endl;
1826 // cout << "gamma 1: " << gamma1->GetV0Index()<< "\t"<< gamma1->GetPx() << "\t" << gamma1->GetPy() << "\t" << gamma1->GetPz() << "\t" << endl;
1827 // cout << "pi0: "<<fInvMass << "\t" << fPt <<"\t" << fDCAzGammaMin << "\t" << fDCAzGammaMax << "\t" << (Int_t)iFlag << "\t" << (Int_t)iMesonMCInfo <<endl;
1828 if (fIsHeavyIon == 1 && fPt > 0.399 && fPt < 20. ) {
1829 if (fInvMass > 0.08 && fInvMass < 0.2) tESDMesonsInvMassPtDcazMinDcazMaxFlag[fiCut]->Fill();
1830 if ((fInvMass > 0.45 && fInvMass < 0.6) && (fPt > 0.999 && fPt < 20.) )tESDMesonsInvMassPtDcazMinDcazMaxFlag[fiCut]->Fill();
1831 } else if (fPt > 0.299 && fPt < 20. ) {
1832 if ( (fInvMass > 0.08 && fInvMass < 0.2) || (fInvMass > 0.45 && fInvMass < 0.6)) tESDMesonsInvMassPtDcazMinDcazMaxFlag[fiCut]->Fill();
1842 //______________________________________________________________________
1843 void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidates(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1)
1845 // Process True Mesons
1846 AliStack *MCStack = fMCEvent->Stack();
1848 if(TrueGammaCandidate0->GetV0Index()<fInputEvent->GetNumberOfV0s()){
1849 Bool_t isTruePi0 = kFALSE;
1850 Bool_t isTrueEta = kFALSE;
1851 Bool_t isTruePi0Dalitz = kFALSE;
1852 Bool_t isTrueEtaDalitz = kFALSE;
1853 Bool_t gamma0DalitzCand = kFALSE;
1854 Bool_t gamma1DalitzCand = kFALSE;
1855 Int_t gamma0MCLabel = TrueGammaCandidate0->GetMCParticleLabel(MCStack);
1856 Int_t gamma0MotherLabel = -1;
1857 if(gamma0MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1858 // Daughters Gamma 0
1859 TParticle * negativeMC = (TParticle*)TrueGammaCandidate0->GetNegativeMCDaughter(MCStack);
1860 TParticle * positiveMC = (TParticle*)TrueGammaCandidate0->GetPositiveMCDaughter(MCStack);
1861 TParticle * gammaMC0 = (TParticle*)MCStack->Particle(gamma0MCLabel);
1862 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
1863 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
1864 if(gammaMC0->GetPdgCode() == 22){ // ... with Gamma Mother
1865 gamma0MotherLabel=gammaMC0->GetFirstMother();
1868 if(gammaMC0->GetPdgCode() ==111){ // Dalitz candidate
1869 gamma0DalitzCand = kTRUE;
1870 gamma0MotherLabel=-111;
1872 if(gammaMC0->GetPdgCode() ==221){ // Dalitz candidate
1873 gamma0DalitzCand = kTRUE;
1874 gamma0MotherLabel=-221;
1878 if(TrueGammaCandidate1->GetV0Index()<fInputEvent->GetNumberOfV0s()){
1879 Int_t gamma1MCLabel = TrueGammaCandidate1->GetMCParticleLabel(MCStack);
1880 Int_t gamma1MotherLabel = -1;
1881 if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1882 // Daughters Gamma 1
1883 TParticle * negativeMC = (TParticle*)TrueGammaCandidate1->GetNegativeMCDaughter(MCStack);
1884 TParticle * positiveMC = (TParticle*)TrueGammaCandidate1->GetPositiveMCDaughter(MCStack);
1885 TParticle * gammaMC1 = (TParticle*)MCStack->Particle(gamma1MCLabel);
1886 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
1887 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
1888 if(gammaMC1->GetPdgCode() == 22){ // ... with Gamma Mother
1889 gamma1MotherLabel=gammaMC1->GetFirstMother();
1892 if(gammaMC1->GetPdgCode() ==111 ){ // Dalitz candidate
1893 gamma1DalitzCand = kTRUE;
1894 gamma1MotherLabel=-111;
1896 if(gammaMC1->GetPdgCode() ==221){ // Dalitz candidate
1897 gamma1DalitzCand = kTRUE;
1898 gamma1MotherLabel=-221;
1902 if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
1903 if(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 111){
1906 if(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 221){
1911 //Identify Dalitz candidate
1912 if (gamma1DalitzCand || gamma0DalitzCand){
1913 if (gamma0DalitzCand && gamma0MCLabel >=0 && gamma0MCLabel==gamma1MotherLabel){
1914 if (gamma0MotherLabel == -111) isTruePi0Dalitz = kTRUE;
1915 if (gamma0MotherLabel == -221) isTrueEtaDalitz = kTRUE;
1917 if (gamma1DalitzCand && gamma1MCLabel >=0 && gamma1MCLabel==gamma0MotherLabel){
1918 if (gamma1MotherLabel == -111) isTruePi0Dalitz = kTRUE;
1919 if (gamma1MotherLabel == -221) isTrueEtaDalitz = kTRUE;
1924 if(isTruePi0 || isTrueEta){// True Pion or Eta
1925 hESDTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1926 if (fDoMesonQA > 0){
1928 if ( Pi0Candidate->M() > 0.05 && Pi0Candidate->M() < 0.17){
1929 hESDTruePi0PtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
1930 hESDTruePi0PtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
1931 hESDTruePi0PtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
1933 } else if (isTrueEta){
1934 if ( Pi0Candidate->M() > 0.45 && Pi0Candidate->M() < 0.65){
1935 hESDTrueEtaPtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
1936 hESDTrueEtaPtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
1937 hESDTrueEtaPtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
1941 if(gamma0MotherLabel >= MCStack->GetNprimary()){ // Secondary Meson
1942 Int_t secMotherLabel = ((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetMother(0);
1943 Float_t weightedSec= 1;
1944 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, fMCStack, fInputEvent) && MCStack->Particle(secMotherLabel)->GetPdgCode()==310){
1945 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
1946 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1948 hESDTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
1950 if (secMotherLabel >-1){
1951 if(MCStack->Particle(secMotherLabel)->GetPdgCode()==310){
1953 hESDTrueSecondaryMotherFromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
1954 if (fDoMesonQA > 0)hESDTrueK0sWithPi0DaughterMCPt[fiCut]
1955 ->Fill(MCStack->Particle(secMotherLabel)->Pt());
1957 if(MCStack->Particle(secMotherLabel)->GetPdgCode()==221){
1959 hESDTrueSecondaryMotherFromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
1960 if (fDoMesonQA > 0)hESDTrueEtaWithPi0DaughterMCPt[fiCut]
1961 ->Fill(MCStack->Particle(secMotherLabel)->Pt());
1963 if(MCStack->Particle(secMotherLabel)->GetPdgCode()==3122){
1965 hESDTrueSecondaryMotherFromLambdaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
1966 if (fDoMesonQA > 0)hESDTrueLambdaWithPi0DaughterMCPt[fiCut]
1967 ->Fill(MCStack->Particle(secMotherLabel)->Pt());
1970 }else{ // Only primary pi0 for efficiency calculation
1972 Float_t weighted= 1;
1973 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, fMCStack, fInputEvent)){
1974 if (((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt()>0.005){
1975 weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, fMCStack, fInputEvent);
1976 // cout << "rec \t " <<gamma1MotherLabel << "\t" << weighted << endl;
1979 hESDTruePrimaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
1980 hESDTruePrimaryMotherW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1981 pESDTruePrimaryMotherWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
1984 if (fDoMesonQA > 0){
1985 if(isTruePi0){ // Only primary pi0 for resolution
1986 hESDTruePrimaryPi0MCPtResolPt[fiCut]->Fill(((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
1988 if (isTrueEta){ // Only primary eta for resolution
1989 hESDTruePrimaryEtaMCPtResolPt[fiCut]->Fill(((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
1993 } else if(!isTruePi0 && !isTrueEta){ // Background
1994 if (fDoMesonQA > 0){
1995 if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
1996 hESDTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1998 } else { // No photon or without mother
1999 hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2002 if( isTruePi0Dalitz || isTrueEtaDalitz ){
2005 hESDTrueMotherDalitzInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2006 } else if (gamma0DalitzCand || gamma1DalitzCand){
2007 if (fDoMesonQA > 0)hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2013 //______________________________________________________________________
2014 void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidatesAOD(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1)
2017 // Process True Mesons
2018 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
2019 Bool_t isTruePi0 = kFALSE;
2020 Bool_t isTrueEta = kFALSE;
2021 Bool_t isTruePi0Dalitz = kFALSE;
2022 Bool_t isTrueEtaDalitz = kFALSE;
2023 Bool_t gamma0DalitzCand = kFALSE;
2024 Bool_t gamma1DalitzCand = kFALSE;
2026 AliAODMCParticle *positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelPositive()));
2027 AliAODMCParticle *negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelNegative()));
2030 Int_t gamma0MCLabel = -1;
2031 Int_t gamma0MotherLabel = -1;
2032 if(!positiveMC||!negativeMC)
2035 if(positiveMC->GetMother()>-1&&(negativeMC->GetMother() == positiveMC->GetMother())){
2036 gamma0MCLabel = positiveMC->GetMother();
2039 if(gamma0MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
2040 // Daughters Gamma 0
2041 AliAODMCParticle * gammaMC0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MCLabel));
2042 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
2043 if(((positiveMC->GetMCProcessCode())) == 5 && ((negativeMC->GetMCProcessCode())) == 5){ // ... From Conversion ...
2044 if(gammaMC0->GetPdgCode() == 22){ // ... with Gamma Mother
2045 gamma0MotherLabel=gammaMC0->GetMother();
2048 if(gammaMC0->GetPdgCode() ==111){ // Dalitz candidate
2049 gamma0DalitzCand = kTRUE;
2050 gamma0MotherLabel=-111;
2052 if(gammaMC0->GetPdgCode() ==221){ // Dalitz candidate
2053 gamma0DalitzCand = kTRUE;
2054 gamma0MotherLabel=-221;
2058 positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate1->GetMCLabelPositive()));
2059 negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate1->GetMCLabelNegative()));
2061 Int_t gamma1MCLabel = -1;
2062 Int_t gamma1MotherLabel = -1;
2063 if(!positiveMC||!negativeMC)
2066 if(positiveMC->GetMother()>-1&&(negativeMC->GetMother() == positiveMC->GetMother())){
2067 gamma1MCLabel = positiveMC->GetMother();
2069 if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
2070 // Daughters Gamma 1
2071 AliAODMCParticle * gammaMC1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MCLabel));
2072 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
2073 if(((positiveMC->GetMCProcessCode())) == 5 && ((negativeMC->GetMCProcessCode())) == 5){ // ... From Conversion ...
2074 if(gammaMC1->GetPdgCode() == 22){ // ... with Gamma Mother
2075 gamma1MotherLabel=gammaMC1->GetMother();
2078 if(gammaMC1->GetPdgCode() ==111 ){ // Dalitz candidate
2079 gamma1DalitzCand = kTRUE;
2080 gamma1MotherLabel=-111;
2082 if(gammaMC1->GetPdgCode() ==221){ // Dalitz candidate
2083 gamma1DalitzCand = kTRUE;
2084 gamma1MotherLabel=-221;
2088 if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
2089 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 111){
2092 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 221){
2097 //Identify Dalitz candidate
2098 if (gamma1DalitzCand || gamma0DalitzCand){
2099 if (gamma0DalitzCand && gamma0MCLabel >=0 && gamma0MCLabel==gamma1MotherLabel){
2100 if (gamma0MotherLabel == -111) isTruePi0Dalitz = kTRUE;
2101 if (gamma0MotherLabel == -221) isTrueEtaDalitz = kTRUE;
2103 if (gamma1DalitzCand && gamma1MCLabel >=0 && gamma1MCLabel==gamma0MotherLabel){
2104 if (gamma1MotherLabel == -111) isTruePi0Dalitz = kTRUE;
2105 if (gamma1MotherLabel == -221) isTrueEtaDalitz = kTRUE;
2109 if(isTruePi0 || isTrueEta){// True Pion or Eta
2110 hESDTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2111 if (fDoMesonQA > 0){
2113 if ( Pi0Candidate->M() > 0.05 && Pi0Candidate->M() < 0.17){
2114 hESDTruePi0PtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
2115 hESDTruePi0PtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
2116 hESDTruePi0PtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
2118 } else if (isTrueEta){
2119 if ( Pi0Candidate->M() > 0.45 && Pi0Candidate->M() < 0.65){
2120 hESDTrueEtaPtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
2121 hESDTrueEtaPtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
2122 hESDTrueEtaPtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
2126 if(!(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MotherLabel))->IsPrimary())){ // Secondary Meson
2127 Int_t secMotherLabel = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetMother();
2128 Float_t weightedSec= 1;
2129 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, 0x0, fInputEvent) && static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
2130 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
2131 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
2133 hESDTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2135 if (secMotherLabel >-1){
2136 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
2138 hESDTrueSecondaryMotherFromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2139 if (fDoMesonQA > 0)hESDTrueK0sWithPi0DaughterMCPt[fiCut]
2140 ->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
2142 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==221){
2144 hESDTrueSecondaryMotherFromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2145 if (fDoMesonQA > 0)hESDTrueEtaWithPi0DaughterMCPt[fiCut]
2146 ->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
2148 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==3122){
2150 hESDTrueSecondaryMotherFromLambdaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2151 if (fDoMesonQA > 0)hESDTrueLambdaWithPi0DaughterMCPt[fiCut]
2152 ->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
2155 }else{ // Only primary pi0 for efficiency calculation
2156 Float_t weighted= 1;
2158 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, 0x0, fInputEvent)){
2159 if (static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt()>0.005){
2160 weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, 0x0, fInputEvent);
2161 // cout << "rec \t " <<gamma1MotherLabel << "\t" << weighted << endl;
2164 hESDTruePrimaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2165 hESDTruePrimaryMotherW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2166 pESDTruePrimaryMotherWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2168 if (fDoMesonQA > 0){
2169 if(isTruePi0){ // Only primary pi0 for resolution
2170 hESDTruePrimaryPi0MCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
2171 (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
2174 if (isTrueEta){ // Only primary eta for resolution
2175 hESDTruePrimaryEtaMCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
2176 (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
2180 } else if(!isTruePi0 && !isTrueEta) { // Background
2181 if (fDoMesonQA > 0){
2182 if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
2183 hESDTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2185 } else { // No photon or without mother
2186 hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2189 if( isTruePi0Dalitz || isTrueEtaDalitz ){
2192 hESDTrueMotherDalitzInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2193 } else if (gamma0DalitzCand || gamma1DalitzCand){
2194 if (fDoMesonQA > 0)hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2198 //________________________________________________________________________
2199 void AliAnalysisTaskGammaConvV1::CalculateBackground(){
2201 Int_t zbin= fBGHandler[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
2204 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2205 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
2207 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
2210 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseRotationMethod()){
2212 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
2213 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2214 for(Int_t iCurrent2=iCurrent+1;iCurrent2<fGammaCandidates->GetEntries();iCurrent2++){
2215 for(Int_t nRandom=0;nRandom<((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents();nRandom++){
2216 AliAODConversionPhoton currentEventGoodV02 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent2));
2218 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->DoBGProbability()){
2219 AliAODConversionMother *backgroundCandidateProb = new AliAODConversionMother(¤tEventGoodV0,¤tEventGoodV02);
2220 Double_t massBGprob = backgroundCandidateProb->M();
2221 if(massBGprob>0.1 && massBGprob<0.14){
2222 if(fRandom.Rndm()>fBGHandler[fiCut]->GetBGProb(zbin,mbin)){
2223 delete backgroundCandidateProb;
2227 delete backgroundCandidateProb;
2228 backgroundCandidateProb = 0x0;
2231 RotateParticle(¤tEventGoodV02);
2232 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,¤tEventGoodV02);
2233 backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2234 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2235 ->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()))){
2236 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2237 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2238 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2240 delete backgroundCandidate;
2241 backgroundCandidate = 0x0;
2246 AliGammaConversionAODBGHandler::GammaConversionVertex *bgEventVertex = NULL;
2248 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2249 for(Int_t nEventsInBG=0;nEventsInBG<fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
2250 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
2251 if(fMoveParticleAccordingToVertex == kTRUE){
2252 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
2255 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
2256 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2257 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
2258 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
2259 if(fMoveParticleAccordingToVertex == kTRUE){
2260 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
2262 if(((AliConversionCuts*)fCutArray->At(fiCut))->GetInPlaneOutOfPlaneCut() != 0){
2263 RotateParticleAccordingToEP(&previousGoodV0,bgEventVertex->fEP,fEventPlaneAngle);
2266 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
2267 backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2268 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2269 ->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()))){
2270 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2271 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2272 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2274 delete backgroundCandidate;
2275 backgroundCandidate = 0x0;
2281 for(Int_t nEventsInBG=0;nEventsInBG <fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
2282 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
2283 if(previousEventV0s){
2284 if(fMoveParticleAccordingToVertex == kTRUE){
2285 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
2287 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
2288 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2289 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
2291 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
2293 if(fMoveParticleAccordingToVertex == kTRUE){
2294 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
2296 if(((AliConversionCuts*)fCutArray->At(fiCut))->GetInPlaneOutOfPlaneCut() != 0){
2297 RotateParticleAccordingToEP(&previousGoodV0,bgEventVertex->fEP,fEventPlaneAngle);
2301 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
2302 backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2303 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2304 ->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()))){
2305 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2306 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2307 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2309 delete backgroundCandidate;
2310 backgroundCandidate = 0x0;
2318 //________________________________________________________________________
2319 void AliAnalysisTaskGammaConvV1::CalculateBackgroundRP(){
2321 Int_t zbin= fBGHandlerRP[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
2323 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2324 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
2326 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
2331 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseRotationMethod()){
2332 // Correct for the number of rotations
2333 // BG is for rotation the same, except for factor NRotations
2334 Double_t weight=1./Double_t(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents());
2336 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries();firstGammaIndex++){
2338 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
2339 if (gamma0==NULL) continue;
2340 for(Int_t secondGammaIndex=firstGammaIndex+1;secondGammaIndex<fGammaCandidates->GetEntries();secondGammaIndex++){
2341 AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(secondGammaIndex));
2342 if (gamma1 == NULL) continue;
2343 if(!((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelected(gamma1,fInputEvent))continue;
2344 for(Int_t nRandom=0;nRandom<((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents();nRandom++){
2346 RotateParticle(gamma1);
2348 AliAODConversionMother backgroundCandidate(gamma0,gamma1);
2349 backgroundCandidate.CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2350 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2351 ->MesonIsSelected(&backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
2352 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate.M(),backgroundCandidate.Pt());
2353 Double_t sparesFill[4] = {backgroundCandidate.M(),backgroundCandidate.Pt(),(Double_t)zbin,(Double_t)mbin};
2354 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,weight);
2362 for(Int_t nEventsInBG=0;nEventsInBG <fBGHandlerRP[fiCut]->GetNBGEvents(fGammaCandidates,fInputEvent);nEventsInBG++){
2364 AliGammaConversionPhotonVector *previousEventGammas = fBGHandlerRP[fiCut]->GetBGGoodGammas(fGammaCandidates,fInputEvent,nEventsInBG);
2366 if(previousEventGammas){
2367 // test weighted background
2368 Double_t weight=1.0;
2369 // Correct for the number of eventmixing:
2370 // N gammas -> (N-1) + (N-2) +(N-3) ...+ (N-(N-1)) using sum formula sum(i)=N*(N-1)/2 -> N*(N-1)/2
2371 // real combinations (since you cannot combine a photon with its own)
2372 // but BG leads to N_{a}*N_{b} combinations
2373 weight*=0.5*(Double_t(fGammaCandidates->GetEntries()-1))/Double_t(previousEventGammas->size());
2375 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
2377 AliAODConversionPhoton *gamma0 = (AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2379 for(UInt_t iPrevious=0;iPrevious<previousEventGammas->size();iPrevious++){
2381 AliAODConversionPhoton *gamma1 = (AliAODConversionPhoton*)(previousEventGammas->at(iPrevious));
2383 AliAODConversionMother backgroundCandidate(gamma0,gamma1);
2384 backgroundCandidate.CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2385 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2386 ->MesonIsSelected(&backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
2387 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate.M(),backgroundCandidate.Pt());
2388 Double_t sparesFill[4] = {backgroundCandidate.M(),backgroundCandidate.Pt(),(Double_t)zbin,(Double_t)mbin};
2389 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,weight);
2397 //________________________________________________________________________
2398 void AliAnalysisTaskGammaConvV1::RotateParticle(AliAODConversionPhoton *gamma){
2399 Int_t fNDegreesPMBackground= ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->NDegreesRotation();
2400 Double_t nRadiansPM = fNDegreesPMBackground*TMath::Pi()/180;
2401 Double_t rotationValue = fRandom.Rndm()*2*nRadiansPM + TMath::Pi()-nRadiansPM;
2402 gamma->RotateZ(rotationValue);
2405 //________________________________________________________________________
2406 void AliAnalysisTaskGammaConvV1::RotateParticleAccordingToEP(AliAODConversionPhoton *gamma, Double_t previousEventEP, Double_t thisEventEP){
2408 previousEventEP=previousEventEP+TMath::Pi();
2409 thisEventEP=thisEventEP+TMath::Pi();
2410 Double_t rotationValue= thisEventEP-previousEventEP;
2411 gamma->RotateZ(rotationValue);
2414 //________________________________________________________________________
2415 void AliAnalysisTaskGammaConvV1::MoveParticleAccordingToVertex(AliAODConversionPhoton* particle,const AliGammaConversionAODBGHandler::GammaConversionVertex *vertex){
2416 //see header file for documentation
2418 Double_t dx = vertex->fX - fInputEvent->GetPrimaryVertex()->GetX();
2419 Double_t dy = vertex->fY - fInputEvent->GetPrimaryVertex()->GetY();
2420 Double_t dz = vertex->fZ - fInputEvent->GetPrimaryVertex()->GetZ();
2422 Double_t movedPlace[3] = {particle->GetConversionX() - dx,particle->GetConversionY() - dy,particle->GetConversionZ() - dz};
2423 particle->SetConversionPoint(movedPlace);
2425 //________________________________________________________________________
2426 void AliAnalysisTaskGammaConvV1::UpdateEventByEventData(){
2427 //see header file for documentation
2428 if(fGammaCandidates->GetEntries() >0 ){
2429 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2430 fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fV0Reader->GetNumberOfPrimaryTracks(),fEventPlaneAngle);
2432 else{ // means we use #V0s for multiplicity
2433 fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fGammaCandidates->GetEntries(),fEventPlaneAngle);
2439 //________________________________________________________________________
2440 void AliAnalysisTaskGammaConvV1::FillPhotonCombinatorialBackgroundHist(AliAODConversionPhoton *TruePhotonCandidate, Int_t pdgCode[])
2442 // 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
2443 if(pdgCode[0]==11 && pdgCode[1]==11){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),0);}
2444 else if( (pdgCode[0]==11 && pdgCode[1]==211) || (pdgCode[0]==211 && pdgCode[1]==11) )
2445 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),1);}
2446 else if( (pdgCode[0]==11 && pdgCode[1]==321) || (pdgCode[0]==321 && pdgCode[1]==11) )
2447 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),2);}
2448 else if( (pdgCode[0]==11 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==11) )
2449 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),3);}
2450 else if( (pdgCode[0]==11 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==11) )
2451 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),4);}
2452 else if( pdgCode[0]==211 && pdgCode[1]==211 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),5);}
2453 else if( (pdgCode[0]==211 && pdgCode[1]==321) || (pdgCode[0]==321 && pdgCode[1]==211) )
2454 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),6);}
2455 else if( (pdgCode[0]==211 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==211) )
2456 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),7);}
2457 else if( (pdgCode[0]==211 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==211) )
2458 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),8);}
2459 else if( pdgCode[0]==321 && pdgCode[1]==321 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),9);}
2460 else if( (pdgCode[0]==321 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==321) )
2461 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),10);}
2462 else if( (pdgCode[0]==321 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==321) )
2463 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),11);}
2464 else if( pdgCode[0]==2212 && pdgCode[1]==2212 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),12);}
2465 else if( (pdgCode[0]==2212 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==2212) )
2466 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),13);}
2467 else if( pdgCode[0]==13 && pdgCode[1]==13 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),14);}
2468 else {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),15);}
2470 //________________________________________________________________________
2471 void AliAnalysisTaskGammaConvV1::RelabelAODPhotonCandidates(Bool_t mode){
2473 // Relabeling For AOD Event
2475 // MCLabel -> AODMCLabel
2478 fMCStackPos = new Int_t[fReaderGammas->GetEntries()];
2479 fMCStackNeg = new Int_t[fReaderGammas->GetEntries()];
2480 fESDArrayPos = new Int_t[fReaderGammas->GetEntries()];
2481 fESDArrayNeg = new Int_t[fReaderGammas->GetEntries()];
2484 for(Int_t iGamma = 0;iGamma<fReaderGammas->GetEntries();iGamma++){
2485 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(iGamma);
2486 if(!PhotonCandidate) continue;
2487 if(!mode){// Back to ESD Labels
2488 PhotonCandidate->SetMCLabelPositive(fMCStackPos[iGamma]);
2489 PhotonCandidate->SetMCLabelNegative(fMCStackNeg[iGamma]);
2490 PhotonCandidate->SetLabelPositive(fESDArrayPos[iGamma]);
2491 PhotonCandidate->SetLabelNegative(fESDArrayNeg[iGamma]);
2494 fMCStackPos[iGamma] = PhotonCandidate->GetMCLabelPositive();
2495 fMCStackNeg[iGamma] = PhotonCandidate->GetMCLabelNegative();
2496 fESDArrayPos[iGamma] = PhotonCandidate->GetTrackLabelPositive();
2497 fESDArrayNeg[iGamma] = PhotonCandidate->GetTrackLabelNegative();
2499 Bool_t AODLabelPos = kFALSE;
2500 Bool_t AODLabelNeg = kFALSE;
2502 for(Int_t i = 0; i<fInputEvent->GetNumberOfTracks();i++){
2503 AliAODTrack *tempDaughter = static_cast<AliAODTrack*>(fInputEvent->GetTrack(i));
2505 if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelPositive() ){
2506 PhotonCandidate->SetMCLabelPositive(abs(tempDaughter->GetLabel()));
2507 PhotonCandidate->SetLabelPositive(i);
2508 AODLabelPos = kTRUE;
2512 if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelNegative()){
2513 PhotonCandidate->SetMCLabelNegative(abs(tempDaughter->GetLabel()));
2514 PhotonCandidate->SetLabelNegative(i);
2515 AODLabelNeg = kTRUE;
2518 if(AODLabelNeg && AODLabelPos){
2522 if(!AODLabelPos || !AODLabelNeg){
2523 cout<<"WARNING!!! AOD TRACKS NOT FOUND FOR"<<endl;
2529 delete[] fMCStackPos;
2530 delete[] fMCStackNeg;
2531 delete[] fESDArrayPos;
2532 delete[] fESDArrayNeg;
2536 void AliAnalysisTaskGammaConvV1::SetLogBinningXTH2(TH2* histoRebin){
2537 TAxis *axisafter = histoRebin->GetXaxis();
2538 Int_t bins = axisafter->GetNbins();
2539 Double_t from = axisafter->GetXmin();
2540 Double_t to = axisafter->GetXmax();
2541 Double_t *newbins = new Double_t[bins+1];
2543 Double_t factor = TMath::Power(to/from, 1./bins);
2544 for(Int_t i=1; i<=bins; ++i) newbins[i] = factor * newbins[i-1];
2545 axisafter->Set(bins, newbins);
2550 //________________________________________________________________________
2551 void AliAnalysisTaskGammaConvV1::Terminate(const Option_t *)
2554 //fOutputContainer->Print(); // Will crash on GRID
2557 //________________________________________________________________________
2558 Int_t AliAnalysisTaskGammaConvV1::GetSourceClassification(Int_t daughter, Int_t pdgCode){
2560 if (daughter == 111) {
2561 if (abs(pdgCode) == 310) return 1; // k0s
2562 else if (abs(pdgCode) == 3122) return 2; // Lambda
2563 else if (abs(pdgCode) == 130) return 3; // K0L
2564 else if (abs(pdgCode) == 2212) return 4; // proton
2565 else if (abs(pdgCode) == 2112) return 5; // neutron
2566 else if (abs(pdgCode) == 211) return 6; // pion
2567 else if (abs(pdgCode) == 321) return 7; // kaon
2568 else if (abs(pdgCode) == 113 || abs(pdgCode) == 213 ) return 8; // rho 0,+,-
2569 else if (abs(pdgCode) == 3222 || abs(pdgCode) == 3212 || abs(pdgCode) == 3112 ) return 9; // Sigma
2570 else if (abs(pdgCode) == 2224 || abs(pdgCode) == 2214 || abs(pdgCode) == 2114 || abs(pdgCode) == 1114 ) return 10; // Delta
2571 else if (abs(pdgCode) == 313 || abs(pdgCode) == 323 ) return 11; // K*