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),
83 fConversionCuts(NULL),
86 hESDConvGammaPt(NULL),
88 hESDConvGammaEta(NULL),
89 tESDConvGammaPtDcazCat(NULL),
96 hESDMotherInvMassPt(NULL),
97 sESDMotherInvMassPtZM(NULL),
98 hESDMotherBackInvMassPt(NULL),
99 sESDMotherBackInvMassPtZM(NULL),
100 hESDMotherInvMassEalpha(NULL),
101 hESDMotherPi0PtY(NULL),
102 hESDMotherEtaPtY(NULL),
103 hESDMotherPi0PtAlpha(NULL),
104 hESDMotherEtaPtAlpha(NULL),
105 hESDMotherPi0PtOpenAngle(NULL),
106 hESDMotherEtaPtOpenAngle(NULL),
109 hMCDecayGammaPi0Pt(NULL),
110 hMCDecayGammaRhoPt(NULL),
111 hMCDecayGammaEtaPt(NULL),
112 hMCDecayGammaOmegaPt(NULL),
113 hMCDecayGammaEtapPt(NULL),
114 hMCDecayGammaPhiPt(NULL),
115 hMCDecayGammaSigmaPt(NULL),
116 hMCConvGammaPt(NULL),
118 hMCConvGammaEta(NULL),
120 hMCPi0WOWeightPt(NULL),
122 hMCEtaWOWeightPt(NULL),
130 hMCK0sWOWeightPt(NULL),
132 hMCSecPi0PtvsSource(NULL),
133 hMCSecPi0Source(NULL),
135 hMCSecEtaSource(NULL),
136 hESDTrueMotherInvMassPt(NULL),
137 hESDTruePrimaryMotherInvMassPt(NULL),
138 hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
139 pESDTruePrimaryMotherWeightsInvMassPt(NULL),
140 hESDTruePrimaryPi0MCPtResolPt(NULL),
141 hESDTruePrimaryEtaMCPtResolPt(NULL),
142 hESDTrueSecondaryMotherInvMassPt(NULL),
143 hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
144 hESDTrueK0sWithPi0DaughterMCPt(NULL),
145 hESDTrueSecondaryMotherFromEtaInvMassPt(NULL),
146 hESDTrueEtaWithPi0DaughterMCPt(NULL),
147 hESDTrueSecondaryMotherFromLambdaInvMassPt(NULL),
148 hESDTrueLambdaWithPi0DaughterMCPt(NULL),
149 hESDTrueBckGGInvMassPt(NULL),
150 hESDTrueBckContInvMassPt(NULL),
151 hESDTruePi0PtY(NULL),
152 hESDTrueEtaPtY(NULL),
153 hESDTruePi0PtAlpha(NULL),
154 hESDTrueEtaPtAlpha(NULL),
155 hESDTruePi0PtOpenAngle(NULL),
156 hESDTrueEtaPtOpenAngle(NULL),
157 hESDTrueMotherDalitzInvMassPt(NULL),
158 hESDTrueConvGammaPt(NULL),
159 hESDTrueConvGammaR(NULL),
160 hESDTrueConvGammaPtMC(NULL),
161 hESDTrueConvGammaRMC(NULL),
162 hESDTrueConvGammaEta(NULL),
163 hESDCombinatorialPt(NULL),
164 hESDTruePrimaryConvGammaPt(NULL),
165 hESDTruePrimaryConvGammaESDPtMCPt(NULL),
166 hESDTrueSecondaryConvGammaPt(NULL),
167 hESDTrueSecondaryConvGammaFromXFromK0sPt(NULL),
168 hESDTrueSecondaryConvGammaFromXFromLambdaPt(NULL),
169 hESDTrueDalitzPsiPairDeltaPhi(NULL),
170 hESDTrueGammaPsiPairDeltaPhi(NULL),
172 hNGoodESDTracks(NULL),
173 hNGammaCandidates(NULL),
174 hNGoodESDTracksVsNGammaCanditates(NULL),
177 tESDMesonsInvMassPtDcazMinDcazMaxFlag(NULL),
184 fEventPlaneAngle(-100),
186 fnGammaCandidates(0),
197 fMoveParticleAccordingToVertex(kTRUE),
199 fDoMesonAnalysis(kTRUE),
202 fIsFromMBHeader(kTRUE),
208 //________________________________________________________________________
209 AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(const char *name):
210 AliAnalysisTaskSE(name),
221 fPhotonDCAList(NULL),
225 fHeaderNameList(NULL),
228 fGammaCandidates(NULL),
229 fEventCutArray(NULL),
232 fConversionCuts(NULL),
233 fMesonCutArray(NULL),
235 hESDConvGammaPt(NULL),
236 hESDConvGammaR(NULL),
237 hESDConvGammaEta(NULL),
238 tESDConvGammaPtDcazCat(NULL),
245 hESDMotherInvMassPt(NULL),
246 sESDMotherInvMassPtZM(NULL),
247 hESDMotherBackInvMassPt(NULL),
248 sESDMotherBackInvMassPtZM(NULL),
249 hESDMotherInvMassEalpha(NULL),
250 hESDMotherPi0PtY(NULL),
251 hESDMotherEtaPtY(NULL),
252 hESDMotherPi0PtAlpha(NULL),
253 hESDMotherEtaPtAlpha(NULL),
254 hESDMotherPi0PtOpenAngle(NULL),
255 hESDMotherEtaPtOpenAngle(NULL),
258 hMCDecayGammaPi0Pt(NULL),
259 hMCDecayGammaRhoPt(NULL),
260 hMCDecayGammaEtaPt(NULL),
261 hMCDecayGammaOmegaPt(NULL),
262 hMCDecayGammaEtapPt(NULL),
263 hMCDecayGammaPhiPt(NULL),
264 hMCDecayGammaSigmaPt(NULL),
265 hMCConvGammaPt(NULL),
267 hMCConvGammaEta(NULL),
269 hMCPi0WOWeightPt(NULL),
271 hMCEtaWOWeightPt(NULL),
279 hMCK0sWOWeightPt(NULL),
281 hMCSecPi0PtvsSource(NULL),
282 hMCSecPi0Source(NULL),
284 hMCSecEtaSource(NULL),
285 hESDTrueMotherInvMassPt(NULL),
286 hESDTruePrimaryMotherInvMassPt(NULL),
287 hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
288 pESDTruePrimaryMotherWeightsInvMassPt(NULL),
289 hESDTruePrimaryPi0MCPtResolPt(NULL),
290 hESDTruePrimaryEtaMCPtResolPt(NULL),
291 hESDTrueSecondaryMotherInvMassPt(NULL),
292 hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
293 hESDTrueK0sWithPi0DaughterMCPt(NULL),
294 hESDTrueSecondaryMotherFromEtaInvMassPt(NULL),
295 hESDTrueEtaWithPi0DaughterMCPt(NULL),
296 hESDTrueSecondaryMotherFromLambdaInvMassPt(NULL),
297 hESDTrueLambdaWithPi0DaughterMCPt(NULL),
298 hESDTrueBckGGInvMassPt(NULL),
299 hESDTrueBckContInvMassPt(NULL),
300 hESDTruePi0PtY(NULL),
301 hESDTrueEtaPtY(NULL),
302 hESDTruePi0PtAlpha(NULL),
303 hESDTrueEtaPtAlpha(NULL),
304 hESDTruePi0PtOpenAngle(NULL),
305 hESDTrueEtaPtOpenAngle(NULL),
306 hESDTrueMotherDalitzInvMassPt(NULL),
307 hESDTrueConvGammaPt(NULL),
308 hESDTrueConvGammaR(NULL),
309 hESDTrueConvGammaPtMC(NULL),
310 hESDTrueConvGammaRMC(NULL),
311 hESDTrueConvGammaEta(NULL),
312 hESDCombinatorialPt(NULL),
313 hESDTruePrimaryConvGammaPt(NULL),
314 hESDTruePrimaryConvGammaESDPtMCPt(NULL),
315 hESDTrueSecondaryConvGammaPt(NULL),
316 hESDTrueSecondaryConvGammaFromXFromK0sPt(NULL),
317 hESDTrueSecondaryConvGammaFromXFromLambdaPt(NULL),
318 hESDTrueDalitzPsiPairDeltaPhi(NULL),
319 hESDTrueGammaPsiPairDeltaPhi(NULL),
321 hNGoodESDTracks(NULL),
322 hNGammaCandidates(NULL),
323 hNGoodESDTracksVsNGammaCanditates(NULL),
326 tESDMesonsInvMassPtDcazMinDcazMaxFlag(NULL),
333 fEventPlaneAngle(-100),
335 fnGammaCandidates(0),
346 fMoveParticleAccordingToVertex(kTRUE),
348 fDoMesonAnalysis(kTRUE),
351 fIsFromMBHeader(kTRUE),
354 // Define output slots here
355 DefineOutput(1, TList::Class());
358 AliAnalysisTaskGammaConvV1::~AliAnalysisTaskGammaConvV1()
360 if(fGammaCandidates){
361 delete fGammaCandidates;
362 fGammaCandidates = 0x0;
369 delete[] fBGHandlerRP;
373 //___________________________________________________________
374 void AliAnalysisTaskGammaConvV1::InitBack(){
376 const Int_t nDim = 4;
377 Int_t nBins[nDim] = {800,250,7,4};
378 Double_t xMin[nDim] = {0,0, 0,0};
379 Double_t xMax[nDim] = {0.8,25,7,4};
381 sESDMotherInvMassPtZM = new THnSparseF*[fnCuts];
382 sESDMotherBackInvMassPtZM = new THnSparseF*[fnCuts];
384 fBGHandler = new AliGammaConversionAODBGHandler*[fnCuts];
385 fBGHandlerRP = new AliConversionAODBGHandlerRP*[fnCuts];
386 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
387 if (((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->DoBGCalculation()){
388 TString cutstringEvent = ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber();
389 TString cutstringPhoton = ((AliConversionPhotonCuts*)fCutArray->At(iCut))->GetCutNumber();
390 TString cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
392 Int_t collisionSystem = atoi((TString)(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber())(0,1));
393 Int_t centMin = atoi((TString)(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber())(1,1));
394 Int_t centMax = atoi((TString)(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber())(2,1));
396 if(collisionSystem == 1 || collisionSystem == 2 ||
397 collisionSystem == 5 || collisionSystem == 8 ||
398 collisionSystem == 9){
399 centMin = centMin*10;
400 centMax = centMax*10;
401 if(centMax ==0 && centMax!=centMin) centMax=100;
402 } else if(collisionSystem == 3 || collisionSystem == 6) {
405 } else if(collisionSystem == 4 || collisionSystem == 7) {
406 centMin = ((centMin*5)+45);
407 centMax = ((centMax*5)+45);
410 fBackList[iCut] = new TList();
411 fBackList[iCut]->SetName(Form("%s_%s_%s Back histograms",cutstringEvent.Data(), cutstringPhoton.Data(),cutstringMeson.Data()));
412 fBackList[iCut]->SetOwner(kTRUE);
413 fCutFolder[iCut]->Add(fBackList[iCut]);
415 sESDMotherBackInvMassPtZM[iCut] = new THnSparseF("Back_Back_InvMass_Pt_z_m","Back_Back_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
416 fBackList[iCut]->Add(sESDMotherBackInvMassPtZM[iCut]);
418 fMotherList[iCut] = new TList();
419 fMotherList[iCut]->SetName(Form("%s_%s_%s Mother histograms",cutstringEvent.Data() ,cutstringPhoton.Data(),cutstringMeson.Data()));
420 fMotherList[iCut]->SetOwner(kTRUE);
421 fCutFolder[iCut]->Add(fMotherList[iCut]);
423 sESDMotherInvMassPtZM[iCut] = new THnSparseF("Back_Mother_InvMass_Pt_z_m","Back_Mother_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
424 fMotherList[iCut]->Add(sESDMotherInvMassPtZM[iCut]);
426 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->BackgroundHandlerType() == 0){
427 fBGHandler[iCut] = new AliGammaConversionAODBGHandler(
428 collisionSystem,centMin,centMax,
429 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents(),
430 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseTrackMultiplicity(),
432 fBGHandlerRP[iCut] = NULL;
434 fBGHandlerRP[iCut] = new AliConversionAODBGHandlerRP(
435 ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsHeavyIon(),
436 ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity(),
437 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents());
438 fBGHandler[iCut] = NULL;
443 //________________________________________________________________________
444 void AliAnalysisTaskGammaConvV1::UserCreateOutputObjects(){
447 if(fOutputContainer != NULL){
448 delete fOutputContainer;
449 fOutputContainer = NULL;
451 if(fOutputContainer == NULL){
452 fOutputContainer = new TList();
453 fOutputContainer->SetOwner(kTRUE);
456 // Array of current cut's gammas
457 fGammaCandidates = new TList();
459 fCutFolder = new TList*[fnCuts];
460 fESDList = new TList*[fnCuts];
461 fBackList = new TList*[fnCuts];
462 fMotherList = new TList*[fnCuts];
463 hNEvents = new TH1I*[fnCuts];
464 hNGoodESDTracks = new TH1I*[fnCuts];
465 hNGammaCandidates = new TH1I*[fnCuts];
466 hNGoodESDTracksVsNGammaCanditates = new TH2F*[fnCuts];
467 hNV0Tracks = new TH1I*[fnCuts];
468 hEtaShift = new TProfile*[fnCuts];
469 hESDConvGammaPt = new TH1F*[fnCuts];
471 if (fDoPhotonQA == 2){
472 fPhotonDCAList = new TList*[fnCuts];
473 tESDConvGammaPtDcazCat = new TTree*[fnCuts];
475 if (fDoPhotonQA > 0){
476 hESDConvGammaR = new TH1F*[fnCuts];
477 hESDConvGammaEta = new TH1F*[fnCuts];
480 if(fDoMesonAnalysis){
481 hESDMotherInvMassPt = new TH2F*[fnCuts];
482 hESDMotherBackInvMassPt = new TH2F*[fnCuts];
483 hESDMotherInvMassEalpha = new TH2F*[fnCuts];
484 if (fDoMesonQA == 2){
485 fMesonDCAList = new TList*[fnCuts];
486 tESDMesonsInvMassPtDcazMinDcazMaxFlag = new TTree*[fnCuts];
489 hESDMotherPi0PtY = new TH2F*[fnCuts];
490 hESDMotherEtaPtY = new TH2F*[fnCuts];
491 hESDMotherPi0PtAlpha = new TH2F*[fnCuts];
492 hESDMotherEtaPtAlpha = new TH2F*[fnCuts];
493 hESDMotherPi0PtOpenAngle = new TH2F*[fnCuts];
494 hESDMotherEtaPtOpenAngle = new TH2F*[fnCuts];
498 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
500 TString cutstringEvent = ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber();
501 TString cutstringPhoton = ((AliConversionPhotonCuts*)fCutArray->At(iCut))->GetCutNumber();
502 TString cutstringMeson = "NoMesonCut";
503 if(fDoMesonAnalysis)cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
505 fCutFolder[iCut] = new TList();
506 fCutFolder[iCut]->SetName(Form("Cut Number %s_%s_%s",cutstringEvent.Data() ,cutstringPhoton.Data(),cutstringMeson.Data()));
507 fCutFolder[iCut]->SetOwner(kTRUE);
508 fOutputContainer->Add(fCutFolder[iCut]);
509 fESDList[iCut] = new TList();
510 fESDList[iCut]->SetName(Form("%s_%s_%s ESD histograms",cutstringEvent.Data() ,cutstringPhoton.Data(),cutstringMeson.Data()));
511 fESDList[iCut]->SetOwner(kTRUE);
512 fCutFolder[iCut]->Add(fESDList[iCut]);
514 hNEvents[iCut] = new TH1I("NEvents","NEvents",10,-0.5,9.5);
515 hNEvents[iCut]->GetXaxis()->SetBinLabel(1,"Accepted");
516 hNEvents[iCut]->GetXaxis()->SetBinLabel(2,"Centrality");
517 hNEvents[iCut]->GetXaxis()->SetBinLabel(3,"Missing MC");
518 if (((AliConvEventCuts*)fEventCutArray->At(iCut))->IsSpecialTrigger() > 1 ){
519 TString TriggerNames = "Not Trigger: ";
520 TriggerNames = TriggerNames+ ( (AliConvEventCuts*)fEventCutArray->At(iCut))->GetSpecialTriggerName();
521 hNEvents[iCut]->GetXaxis()->SetBinLabel(4,TriggerNames.Data());
523 hNEvents[iCut]->GetXaxis()->SetBinLabel(4,"Trigger");
525 hNEvents[iCut]->GetXaxis()->SetBinLabel(5,"Vertex Z");
526 hNEvents[iCut]->GetXaxis()->SetBinLabel(6,"Cont. Vertex");
527 hNEvents[iCut]->GetXaxis()->SetBinLabel(7,"Pile-Up");
528 hNEvents[iCut]->GetXaxis()->SetBinLabel(8,"no SDD");
529 hNEvents[iCut]->GetXaxis()->SetBinLabel(9,"no V0AND");
530 hNEvents[iCut]->GetXaxis()->SetBinLabel(10,"EMCAL problem");
531 fESDList[iCut]->Add(hNEvents[iCut]);
533 if(fIsHeavyIon == 1) hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",4000,0,4000);
534 else if(fIsHeavyIon == 2) hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",400,0,400);
535 else hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",200,0,200);
536 fESDList[iCut]->Add(hNGoodESDTracks[iCut]);
537 if(fIsHeavyIon == 1) hNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",100,0,100);
538 else if(fIsHeavyIon == 2) hNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",50,0,50);
539 else hNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",50,0,50);
540 fESDList[iCut]->Add(hNGammaCandidates[iCut]);
541 if(fIsHeavyIon == 1) hNGoodESDTracksVsNGammaCanditates[iCut] = new TH2F("GoodESDTracksVsGammaCandidates","GoodESDTracksVsGammaCandidates",4000,0,4000,100,0,100);
542 else if(fIsHeavyIon == 2) hNGoodESDTracksVsNGammaCanditates[iCut] = new TH2F("GoodESDTracksVsGammaCandidates","GoodESDTracksVsGammaCandidates",400,0,400,50,0,50);
543 else hNGoodESDTracksVsNGammaCanditates[iCut] = new TH2F("GoodESDTracksVsGammaCandidates","GoodESDTracksVsGammaCandidates",200,0,200,50,0,50);
544 fESDList[iCut]->Add(hNGoodESDTracksVsNGammaCanditates[iCut]);
547 if(fIsHeavyIon == 1) hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",30000,0,30000);
548 else if(fIsHeavyIon == 2) hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",2500,0,2500);
549 else hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",1500,0,1500);
550 fESDList[iCut]->Add(hNV0Tracks[iCut]);
551 hEtaShift[iCut] = new TProfile("Eta Shift","Eta Shift",1, -0.5,0.5);
552 fESDList[iCut]->Add(hEtaShift[iCut]);
553 hESDConvGammaPt[iCut] = new TH1F("ESD_ConvGamma_Pt","ESD_ConvGamma_Pt",250,0,25);
554 fESDList[iCut]->Add(hESDConvGammaPt[iCut]);
556 if (fDoPhotonQA == 2){
557 fPhotonDCAList[iCut] = new TList();
558 fPhotonDCAList[iCut]->SetName(Form("%s_%s_%s Photon DCA tree",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringMeson.Data()));
559 fPhotonDCAList[iCut]->SetOwner(kTRUE);
560 fCutFolder[iCut]->Add(fPhotonDCAList[iCut]);
562 tESDConvGammaPtDcazCat[iCut] = new TTree("ESD_ConvGamma_Pt_Dcaz_R_Eta","ESD_ConvGamma_Pt_Dcaz_R_Eta_Cat");
563 tESDConvGammaPtDcazCat[iCut]->Branch("Pt",&fPtGamma,"fPtGamma/F");
564 tESDConvGammaPtDcazCat[iCut]->Branch("DcaZPhoton",&fDCAzPhoton,"fDCAzPhoton/F");
565 // tESDConvGammaPtDcazCat[iCut]->Branch("R",&fRConvPhoton,"fRConvPhoton/F");
566 // tESDConvGammaPtDcazCat[iCut]->Branch("Eta",&fEtaPhoton,"fEtaPhoton/F");
568 tESDConvGammaPtDcazCat[iCut]->Branch("cat",&iCatPhoton,"iCatPhoton/b");
570 tESDConvGammaPtDcazCat[iCut]->Branch("photonMCInfo",&iPhotonMCInfo,"iPhotonMCInfo/b");
572 fPhotonDCAList[iCut]->Add(tESDConvGammaPtDcazCat[iCut]);
575 if (fDoPhotonQA > 0){
576 hESDConvGammaR[iCut] = new TH1F("ESD_ConvGamma_R","ESD_ConvGamma_R",800,0,200);
577 fESDList[iCut]->Add(hESDConvGammaR[iCut]);
578 hESDConvGammaEta[iCut] = new TH1F("ESD_ConvGamma_Eta","ESD_ConvGamma_Eta",2000,-2,2);
579 fESDList[iCut]->Add(hESDConvGammaEta[iCut]);
582 if(fDoMesonAnalysis){
583 hESDMotherInvMassPt[iCut] = new TH2F("ESD_Mother_InvMass_Pt","ESD_Mother_InvMass_Pt",800,0,0.8,250,0,25);
584 fESDList[iCut]->Add(hESDMotherInvMassPt[iCut]);
585 hESDMotherBackInvMassPt[iCut] = new TH2F("ESD_Background_InvMass_Pt","ESD_Background_InvMass_Pt",800,0,0.8,250,0,25);
586 fESDList[iCut]->Add(hESDMotherBackInvMassPt[iCut]);
587 hESDMotherInvMassEalpha[iCut] = new TH2F("ESD_Mother_InvMass_vs_E_alpha","ESD_Mother_InvMass_vs_E_alpha",800,0,0.8,250,0,25);
588 fESDList[iCut]->Add(hESDMotherInvMassEalpha[iCut]);
589 if (fDoMesonQA == 2){
590 fMesonDCAList[iCut] = new TList();
591 fMesonDCAList[iCut]->SetName(Form("%s_%s_%s Meson DCA tree",cutstringEvent.Data() ,cutstringPhoton.Data(),cutstringMeson.Data()));
592 fMesonDCAList[iCut]->SetOwner(kTRUE);
593 fCutFolder[iCut]->Add(fMesonDCAList[iCut]);
595 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut] = new TTree("ESD_Mesons_InvMass_Pt_DcazMin_DcazMax_Flag","ESD_Mesons_InvMass_Pt_DcazMin_DcazMax_Flag");
596 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("InvMass",&fInvMass,"fInvMass/F");
597 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("Pt",&fPt,"fPt/F");
598 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("DcaZMin",&fDCAzGammaMin,"fDCAzGammaMin/F");
599 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("DcaZMax",&fDCAzGammaMax,"fDCAzGammaMax/F");
600 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("kind",&iFlag,"iFlag/b");
602 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("mesonMCInfo",&iMesonMCInfo,"iMesonMCInfo/b");
604 fMesonDCAList[iCut]->Add(tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]);
607 if (fDoMesonQA > 0 ){
608 hESDMotherPi0PtY[iCut] = new TH2F("ESD_MotherPi0_Pt_Y","ESD_MotherPi0_Pt_Y",150,0.03,15.,150,-1.5,1.5);
609 SetLogBinningXTH2(hESDMotherPi0PtY[iCut]);
610 fESDList[iCut]->Add(hESDMotherPi0PtY[iCut]);
611 hESDMotherEtaPtY[iCut] = new TH2F("ESD_MotherEta_Pt_Y","ESD_MotherEta_Pt_Y",150,0.03,15.,150,-1.5,1.5);
612 SetLogBinningXTH2(hESDMotherEtaPtY[iCut]);
613 fESDList[iCut]->Add(hESDMotherEtaPtY[iCut]);
614 hESDMotherPi0PtAlpha[iCut] = new TH2F("ESD_MotherPi0_Pt_Alpha","ESD_MotherPi0_Pt_Alpha",150,0.03,15.,100,0,1);
615 SetLogBinningXTH2(hESDMotherPi0PtAlpha[iCut]);
616 fESDList[iCut]->Add(hESDMotherPi0PtAlpha[iCut]);
617 hESDMotherEtaPtAlpha[iCut] = new TH2F("ESD_MotherEta_Pt_Alpha","ESD_MotherEta_Pt_Alpha",150,0.03,15.,100,0,1);
618 SetLogBinningXTH2(hESDMotherEtaPtAlpha[iCut]);
619 fESDList[iCut]->Add(hESDMotherEtaPtAlpha[iCut]);
620 hESDMotherPi0PtOpenAngle[iCut] = new TH2F("ESD_MotherPi0_Pt_OpenAngle","ESD_MotherPi0_Pt_OpenAngle",150,0.03,15.,100,0,TMath::Pi());
621 SetLogBinningXTH2(hESDMotherPi0PtOpenAngle[iCut]);
622 fESDList[iCut]->Add(hESDMotherPi0PtOpenAngle[iCut]);
623 hESDMotherEtaPtOpenAngle[iCut] = new TH2F("ESD_MotherEta_Pt_OpenAngle","ESD_MotherEta_Pt_OpenAngle",150,0.03,15.,100,0,TMath::Pi());
624 SetLogBinningXTH2(hESDMotherEtaPtOpenAngle[iCut]);
625 fESDList[iCut]->Add(hESDMotherEtaPtOpenAngle[iCut]);
633 if(fDoMesonAnalysis){
634 InitBack(); // Init Background Handler
639 fMCList = new TList*[fnCuts];
641 fTrueList = new TList*[fnCuts];
642 // Selected Header List
643 fHeaderNameList = new TList*[fnCuts];
644 hMCHeaders = new TH1I*[fnCuts];
645 hMCAllGammaPt = new TH1F*[fnCuts];
646 hMCDecayGammaPi0Pt = new TH1F*[fnCuts];
647 hMCDecayGammaRhoPt = new TH1F*[fnCuts];
648 hMCDecayGammaEtaPt = new TH1F*[fnCuts];
649 hMCDecayGammaOmegaPt = new TH1F*[fnCuts];
650 hMCDecayGammaEtapPt = new TH1F*[fnCuts];
651 hMCDecayGammaPhiPt = new TH1F*[fnCuts];
652 hMCDecayGammaSigmaPt = new TH1F*[fnCuts];
653 hMCConvGammaPt = new TH1F*[fnCuts];
654 hESDTrueConvGammaPt = new TH1F*[fnCuts];
656 hESDCombinatorialPt = new TH2F*[fnCuts];
657 hESDTruePrimaryConvGammaPt = new TH1F*[fnCuts];
658 hESDTruePrimaryConvGammaESDPtMCPt = new TH2F*[fnCuts];
659 hESDTrueSecondaryConvGammaPt = new TH1F*[fnCuts];
660 hESDTrueSecondaryConvGammaFromXFromK0sPt = new TH1F*[fnCuts];
661 hESDTrueSecondaryConvGammaFromXFromLambdaPt = new TH1F*[fnCuts];
663 hESDTrueDalitzPsiPairDeltaPhi= new TH2F*[fnCuts];
664 hESDTrueGammaPsiPairDeltaPhi= new TH2F*[fnCuts];
666 if (fDoPhotonQA > 0){
667 hMCConvGammaR = new TH1F*[fnCuts];
668 hMCConvGammaEta = new TH1F*[fnCuts];
669 hESDTrueConvGammaEta = new TH1F*[fnCuts];
670 hESDTrueConvGammaR = new TH1F*[fnCuts];
671 hESDTrueConvGammaRMC = new TH1F*[fnCuts];
672 hESDTrueConvGammaPtMC = new TH1F*[fnCuts];
675 if(fDoMesonAnalysis){
676 hMCPi0Pt = new TH1F*[fnCuts];
677 hMCPi0WOWeightPt = new TH1F*[fnCuts];
678 hMCEtaPt = new TH1F*[fnCuts];
679 hMCEtaWOWeightPt = new TH1F*[fnCuts];
680 hMCPi0InAccPt = new TH1F*[fnCuts];
681 hMCEtaInAccPt = new TH1F*[fnCuts];
683 hESDTrueMotherInvMassPt = new TH2F*[fnCuts];
684 hESDTruePrimaryMotherInvMassPt = new TH2F*[fnCuts];
685 hESDTruePrimaryMotherW0WeightingInvMassPt = new TH2F*[fnCuts];
686 pESDTruePrimaryMotherWeightsInvMassPt = new TProfile2D*[fnCuts];
687 hESDTrueSecondaryMotherInvMassPt = new TH2F*[fnCuts];
688 hESDTrueSecondaryMotherFromK0sInvMassPt = new TH2F*[fnCuts];
689 hESDTrueSecondaryMotherFromEtaInvMassPt = new TH2F*[fnCuts];
690 hESDTrueSecondaryMotherFromLambdaInvMassPt = new TH2F*[fnCuts];
691 hESDTrueMotherDalitzInvMassPt = new TH2F*[fnCuts];
693 hMCPi0PtY = new TH2F*[fnCuts];
694 hMCEtaPtY = new TH2F*[fnCuts];
695 hMCPi0PtAlpha = new TH2F*[fnCuts];
696 hMCEtaPtAlpha = new TH2F*[fnCuts];
697 hMCK0sPt = new TH1F*[fnCuts];
698 hMCK0sWOWeightPt = new TH1F*[fnCuts];
699 hMCK0sPtY = new TH2F*[fnCuts];
700 hMCSecPi0PtvsSource= new TH2F*[fnCuts];
701 hMCSecPi0Source = new TH1F*[fnCuts];
702 hMCSecEtaPt = new TH1F*[fnCuts];
703 hMCSecEtaSource = new TH1F*[fnCuts];
704 hESDTruePrimaryPi0MCPtResolPt = new TH2F*[fnCuts];
705 hESDTruePrimaryEtaMCPtResolPt = new TH2F*[fnCuts];
706 hESDTrueK0sWithPi0DaughterMCPt = new TH1F*[fnCuts];
707 hESDTrueEtaWithPi0DaughterMCPt = new TH1F*[fnCuts];
708 hESDTrueLambdaWithPi0DaughterMCPt = new TH1F*[fnCuts];
709 hESDTrueBckGGInvMassPt = new TH2F*[fnCuts];
710 hESDTrueBckContInvMassPt = new TH2F*[fnCuts];
711 hESDTruePi0PtY = new TH2F*[fnCuts];
712 hESDTrueEtaPtY = new TH2F*[fnCuts];
713 hESDTruePi0PtAlpha = new TH2F*[fnCuts];
714 hESDTrueEtaPtAlpha = new TH2F*[fnCuts];
715 hESDTruePi0PtOpenAngle = new TH2F*[fnCuts];
716 hESDTrueEtaPtOpenAngle = new TH2F*[fnCuts];
720 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
721 TString cutstringEvent = ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber();
722 TString cutstringPhoton = ((AliConversionPhotonCuts*)fCutArray->At(iCut))->GetCutNumber();
723 TString cutstringMeson = "NoMesonCut";
724 if(fDoMesonAnalysis)cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
726 fMCList[iCut] = new TList();
727 fMCList[iCut]->SetName(Form("%s_%s_%s MC histograms",cutstringEvent.Data() ,cutstringPhoton.Data(),cutstringMeson.Data()));
728 fMCList[iCut]->SetOwner(kTRUE);
729 fCutFolder[iCut]->Add(fMCList[iCut]);
730 hMCHeaders[iCut] = new TH1I("MC_Headers","MC_Headers",20,0,20);
731 fMCList[iCut]->Add(hMCHeaders[iCut]);
732 hMCAllGammaPt[iCut] = new TH1F("MC_AllGamma_Pt","MC_AllGamma_Pt",250,0,25);
733 fMCList[iCut]->Add(hMCAllGammaPt[iCut]);
734 hMCDecayGammaPi0Pt[iCut] = new TH1F("MC_DecayGammaPi0_Pt","MC_DecayGammaPi0_Pt",250,0,25);
735 fMCList[iCut]->Add(hMCDecayGammaPi0Pt[iCut]);
736 hMCDecayGammaRhoPt[iCut] = new TH1F("MC_DecayGammaRho_Pt","MC_DecayGammaRho_Pt",250,0,25);
737 fMCList[iCut]->Add(hMCDecayGammaRhoPt[iCut]);
738 hMCDecayGammaEtaPt[iCut] = new TH1F("MC_DecayGammaEta_Pt","MC_DecayGammaEta_Pt",250,0,25);
739 fMCList[iCut]->Add(hMCDecayGammaEtaPt[iCut]);
740 hMCDecayGammaOmegaPt[iCut] = new TH1F("MC_DecayGammaOmega_Pt","MC_DecayGammaOmmega_Pt",250,0,25);
741 fMCList[iCut]->Add(hMCDecayGammaOmegaPt[iCut]);
742 hMCDecayGammaEtapPt[iCut] = new TH1F("MC_DecayGammaEtap_Pt","MC_DecayGammaEtap_Pt",250,0,25);
743 fMCList[iCut]->Add(hMCDecayGammaEtapPt[iCut]);
744 hMCDecayGammaPhiPt[iCut] = new TH1F("MC_DecayGammaPhi_Pt","MC_DecayGammaPhi_Pt",250,0,25);
745 fMCList[iCut]->Add(hMCDecayGammaPhiPt[iCut]);
746 hMCDecayGammaSigmaPt[iCut] = new TH1F("MC_DecayGammaSigma_Pt","MC_DecayGammaSigma_Pt",250,0,25);
747 fMCList[iCut]->Add(hMCDecayGammaSigmaPt[iCut]);
748 hMCConvGammaPt[iCut] = new TH1F("MC_ConvGamma_Pt","MC_ConvGamma_Pt",250,0,25);
749 fMCList[iCut]->Add(hMCConvGammaPt[iCut]);
751 if (fDoPhotonQA > 0){
752 hMCConvGammaR[iCut] = new TH1F("MC_ConvGamma_R","MC_ConvGamma_R",800,0,200);
753 fMCList[iCut]->Add(hMCConvGammaR[iCut]);
754 hMCConvGammaEta[iCut] = new TH1F("MC_ConvGamma_Eta","MC_ConvGamma_Eta",2000,-2,2);
755 fMCList[iCut]->Add(hMCConvGammaEta[iCut]);
758 if(fDoMesonAnalysis){
759 hMCPi0Pt[iCut] = new TH1F("MC_Pi0_Pt","MC_Pi0_Pt",250,0,25);
760 hMCPi0Pt[iCut]->Sumw2();
761 fMCList[iCut]->Add(hMCPi0Pt[iCut]);
762 hMCPi0WOWeightPt[iCut] = new TH1F("MC_Pi0_WOWeights_Pt","MC_Pi0_WOWeights_Pt",250,0,25);
763 hMCPi0WOWeightPt[iCut]->Sumw2();
764 fMCList[iCut]->Add(hMCPi0WOWeightPt[iCut]);
766 hMCEtaPt[iCut] = new TH1F("MC_Eta_Pt","MC_Eta_Pt",250,0,25);
767 hMCEtaPt[iCut]->Sumw2();
768 fMCList[iCut]->Add(hMCEtaPt[iCut]);
769 hMCEtaWOWeightPt[iCut] = new TH1F("MC_Eta_WOWeights_Pt","MC_Eta_WOWeights_Pt",250,0,25);
770 hMCEtaWOWeightPt[iCut]->Sumw2();
771 fMCList[iCut]->Add(hMCEtaWOWeightPt[iCut]);
772 hMCPi0InAccPt[iCut] = new TH1F("MC_Pi0InAcc_Pt","MC_Pi0InAcc_Pt",250,0,25);
773 hMCPi0InAccPt[iCut]->Sumw2();
774 fMCList[iCut]->Add(hMCPi0InAccPt[iCut]);
775 hMCEtaInAccPt[iCut] = new TH1F("MC_EtaInAcc_Pt","MC_EtaInAcc_Pt",250,0,25);
776 hMCEtaInAccPt[iCut]->Sumw2();
777 fMCList[iCut]->Add(hMCEtaInAccPt[iCut]);
779 hMCPi0PtY[iCut] = new TH2F("MC_Pi0_Pt_Y","MC_Pi0_Pt_Y",150,0.03,15.,150,-1.5,1.5);
780 hMCPi0PtY[iCut]->Sumw2();
781 SetLogBinningXTH2(hMCPi0PtY[iCut]);
782 fMCList[iCut]->Add(hMCPi0PtY[iCut]);
783 hMCEtaPtY[iCut] = new TH2F("MC_Eta_Pt_Y","MC_Eta_Pt_Y",150,0.03,15.,150,-1.5,1.5);
784 hMCEtaPtY[iCut]->Sumw2();
785 SetLogBinningXTH2(hMCEtaPtY[iCut]);
786 fMCList[iCut]->Add(hMCEtaPtY[iCut]);
787 hMCPi0PtAlpha[iCut] = new TH2F("MC_Pi0_Pt_Alpha","MC_Pi0_Pt_Alpha",150,0.03,15.,100,0,1);
788 SetLogBinningXTH2(hMCPi0PtAlpha[iCut]);
789 fMCList[iCut]->Add(hMCPi0PtAlpha[iCut]);
790 hMCEtaPtAlpha[iCut] = new TH2F("MC_Eta_Pt_Alpha","MC_Eta_Pt_Alpha",150,0.03,15.,100,0,1);
791 SetLogBinningXTH2(hMCEtaPtAlpha[iCut]);
792 fMCList[iCut]->Add(hMCEtaPtAlpha[iCut]);
794 hMCK0sPt[iCut] = new TH1F("MC_K0s_Pt","MC_K0s_Pt",150,0,15);
795 hMCK0sPt[iCut]->Sumw2();
796 fMCList[iCut]->Add(hMCK0sPt[iCut]);
797 hMCK0sWOWeightPt[iCut] = new TH1F("MC_K0s_WOWeights_Pt","MC_K0s_WOWeights_Pt",150,0,15);
798 hMCK0sWOWeightPt[iCut]->Sumw2();
799 fMCList[iCut]->Add(hMCK0sWOWeightPt[iCut]);
800 hMCK0sPtY[iCut] = new TH2F("MC_K0s_Pt_Y","MC_K0s_Pt_Y",150,0.03,15.,150,-1.5,1.5);
801 hMCK0sPtY[iCut]->Sumw2();
802 SetLogBinningXTH2(hMCK0sPtY[iCut]);
803 fMCList[iCut]->Add(hMCK0sPtY[iCut]);
805 hMCSecPi0Source[iCut] = new TH1F("MC_SecPi0_Source","MC_SecPi0_Source",5000,0.,5000);
806 fMCList[iCut]->Add(hMCSecPi0Source[iCut]);
807 hMCSecEtaSource[iCut] = new TH1F("MC_SecEta_Source","MC_SecEta_Source",5000,0,5000);
808 fMCList[iCut]->Add(hMCSecEtaSource[iCut]);
809 hMCSecPi0PtvsSource[iCut] = new TH2F("MC_SecPi0_Pt_Source","MC_SecPi0_Pt_Source",250,0.0,25.,16,-0.5,15.5);
810 hMCSecPi0PtvsSource[iCut]->Sumw2();
811 fMCList[iCut]->Add(hMCSecPi0PtvsSource[iCut]);
812 hMCSecEtaPt[iCut] = new TH1F("MC_SecEta_Pt","MC_SecEta_Pt",250,0,25);
813 hMCSecEtaPt[iCut]->Sumw2();
814 fMCList[iCut]->Add(hMCSecEtaPt[iCut]);
818 fTrueList[iCut] = new TList();
819 fTrueList[iCut]->SetName(Form("%s_%s_%s True histograms",cutstringEvent.Data() ,cutstringPhoton.Data(),cutstringMeson.Data()));
820 fTrueList[iCut]->SetOwner(kTRUE);
821 fCutFolder[iCut]->Add(fTrueList[iCut]);
823 hESDTrueConvGammaPt[iCut] = new TH1F("ESD_TrueConvGamma_Pt","ESD_TrueConvGamma_Pt",250,0,25);
824 fTrueList[iCut]->Add(hESDTrueConvGammaPt[iCut]);
826 hESDCombinatorialPt[iCut] = new TH2F("ESD_TrueCombinatorial_Pt","ESD_TrueCombinatorial_Pt",250,0,25,16,-0.5,15.5);
827 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 1,"Elec+Elec");
828 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 2,"Elec+Pion");
829 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 3,"Elec+Kaon");
830 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 4,"Elec+Proton");
831 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 5,"Elec+Muon");
832 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 6,"Pion+Pion");
833 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 7,"Pion+Kaon");
834 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 8,"Pion+Proton");
835 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 9,"Pion+Muon");
836 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(10,"Kaon+Kaon");
837 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(11,"Kaon+Proton");
838 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(12,"Kaon+Muon");
839 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(13,"Proton+Proton");
840 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(14,"Proton+Muon");
841 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(15,"Muon+Muon");
842 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(16,"Rest");
843 fTrueList[iCut]->Add(hESDCombinatorialPt[iCut]);
844 hESDTruePrimaryConvGammaPt[iCut] = new TH1F("ESD_TruePrimaryConvGamma_Pt","ESD_TruePrimaryConvGamma_Pt",250,0,25);
845 fTrueList[iCut]->Add(hESDTruePrimaryConvGammaPt[iCut]);
846 hESDTrueSecondaryConvGammaPt[iCut] = new TH1F("ESD_TrueSecondaryConvGamma_Pt","ESD_TrueSecondaryConvGamma_Pt",250,0,25);
847 fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaPt[iCut]);
849 hESDTrueSecondaryConvGammaFromXFromK0sPt[iCut]
850 = new TH1F("ESD_TrueSecondaryConvGammaFromXFromK0s_Pt", "ESD_TrueSecondaryConvGammaFromXFromK0s_Pt",250,0,25);
851 fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaFromXFromK0sPt[iCut]);
852 hESDTrueSecondaryConvGammaFromXFromLambdaPt[iCut]
853 = new TH1F("ESD_TrueSecondaryConvGammaFromXFromLambda_Pt", "ESD_TrueSecondaryConvGammaFromXFromLambda_Pt",250,0,25);
854 fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaFromXFromLambdaPt[iCut]);
856 hESDTrueDalitzPsiPairDeltaPhi[iCut]
857 = new TH2F("ESD_TrueDalitzPsiPairDeltaPhi_Pt", "ESD_TrueDalitzPsiPairDeltaPhi_Pt",100,-0.5,2,100,-0.5,0.5);
858 fTrueList[iCut]->Add(hESDTrueDalitzPsiPairDeltaPhi[iCut]);
860 hESDTrueGammaPsiPairDeltaPhi[iCut]
861 = new TH2F("ESD_TrueGammaPsiPairDeltaPhi_Pt", "ESD_TrueGammaPsiPairDeltaPhi_Pt",100,-0.5,2,100,-0.5,0.5);
862 fTrueList[iCut]->Add(hESDTrueGammaPsiPairDeltaPhi[iCut]);
864 hESDTruePrimaryConvGammaESDPtMCPt[iCut] = new TH2F("ESD_TruePrimaryConvGammaESD_PtMCPt", "ESD_TruePrimaryConvGammaESD_PtMCPt",250,0,25,250,0,25);
865 fTrueList[iCut]->Add(hESDTruePrimaryConvGammaESDPtMCPt[iCut]);
868 if (fDoPhotonQA > 0){
870 hESDTrueConvGammaEta[iCut] = new TH1F("ESD_TrueConvGamma_Eta","ESD_TrueConvGamma_Eta",2000,-2,2);
871 fTrueList[iCut]->Add(hESDTrueConvGammaEta[iCut]);
872 hESDTrueConvGammaR[iCut] = new TH1F("ESD_TrueConvGamma_R","ESD_TrueConvGamma_R",800,0,200);
873 fTrueList[iCut]->Add(hESDTrueConvGammaR[iCut]);
874 hESDTrueConvGammaRMC[iCut] = new TH1F("ESD_TrueConvGamma_RMC","ESD_TrueConvGamma_RMC",800,0,200);
875 fTrueList[iCut]->Add(hESDTrueConvGammaRMC[iCut]);
876 hESDTrueConvGammaPtMC[iCut] = new TH1F("ESD_TrueConvGamma_PtMC","ESD_TrueConvGamma_PtMC",250,0,25);
877 fTrueList[iCut]->Add(hESDTrueConvGammaPtMC[iCut]);
880 if(fDoMesonAnalysis){
881 hESDTrueMotherInvMassPt[iCut] = new TH2F("ESD_TrueMother_InvMass_Pt","ESD_TrueMother_InvMass_Pt",800,0,0.8,250,0,25);
882 fTrueList[iCut]->Add(hESDTrueMotherInvMassPt[iCut]);
883 hESDTruePrimaryMotherInvMassPt[iCut]
884 = new TH2F("ESD_TruePrimaryMother_InvMass_Pt", "ESD_TruePrimaryMother_InvMass_Pt", 800,0,0.8,250,0,25);
885 hESDTruePrimaryMotherInvMassPt[iCut]->Sumw2();
886 fTrueList[iCut]->Add(hESDTruePrimaryMotherInvMassPt[iCut]);
887 hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]
888 = new TH2F("ESD_TruePrimaryMotherW0Weights_InvMass_Pt", "ESD_TruePrimaryMotherW0Weights_InvMass_Pt", 800,0,0.8,250,0,25);
889 hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]->Sumw2();
890 fTrueList[iCut]->Add(hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]);
891 pESDTruePrimaryMotherWeightsInvMassPt[iCut]
892 = new TProfile2D("ESD_TruePrimaryMotherWeights_InvMass_Pt", "ESD_TruePrimaryMotherWeights_InvMass_Pt", 800,0,0.8,250,0,25);
893 pESDTruePrimaryMotherWeightsInvMassPt[iCut]->Sumw2();
894 fTrueList[iCut]->Add(pESDTruePrimaryMotherWeightsInvMassPt[iCut]);
895 hESDTrueSecondaryMotherInvMassPt[iCut]
896 = new TH2F("ESD_TrueSecondaryMother_InvMass_Pt", "ESD_TrueSecondaryMother_InvMass_Pt", 800,0,0.8,250,0,25);
897 hESDTrueSecondaryMotherInvMassPt[iCut]->Sumw2();
898 fTrueList[iCut]->Add(hESDTrueSecondaryMotherInvMassPt[iCut]);
899 hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]
900 = new TH2F("ESD_TrueSecondaryMotherFromK0s_InvMass_Pt","ESD_TrueSecondaryMotherFromK0s_InvMass_Pt",800,0,0.8,250,0,25);
901 hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]->Sumw2();
902 fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]);
903 hESDTrueSecondaryMotherFromEtaInvMassPt[iCut]
904 = new TH2F("ESD_TrueSecondaryMotherFromEta_InvMass_Pt","ESD_TrueSecondaryMotherFromEta_InvMass_Pt",800,0,0.8,250,0,25);
905 fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromEtaInvMassPt[iCut]);
906 hESDTrueSecondaryMotherFromLambdaInvMassPt[iCut]
907 = new TH2F("ESD_TrueSecondaryMotherFromLambda_InvMass_Pt","ESD_TrueSecondaryMotherFromLambda_InvMass_Pt",800,0,0.8,250,0,25);
908 fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromLambdaInvMassPt[iCut]);
909 hESDTrueMotherDalitzInvMassPt[iCut] = new TH2F("ESD_TrueDalitz_InvMass_Pt","ESD_TrueDalitz_InvMass_Pt",800,0,0.8,250,0,25);
910 fTrueList[iCut]->Add(hESDTrueMotherDalitzInvMassPt[iCut]);
912 hESDTruePrimaryPi0MCPtResolPt[iCut] = new TH2F("ESD_TruePrimaryPi0_MCPt_ResolPt","ESD_TruePrimaryPi0_ResolPt_MCPt",500,0.03,25,1000,-1.,1.);
913 hESDTruePrimaryPi0MCPtResolPt[iCut]->Sumw2();
914 SetLogBinningXTH2(hESDTruePrimaryPi0MCPtResolPt[iCut]);
915 fTrueList[iCut]->Add(hESDTruePrimaryPi0MCPtResolPt[iCut]);
916 hESDTruePrimaryEtaMCPtResolPt[iCut] = new TH2F("ESD_TruePrimaryEta_MCPt_ResolPt","ESD_TruePrimaryEta_ResolPt_MCPt",500,0.03,25,1000,-1.,1.);
917 hESDTruePrimaryEtaMCPtResolPt[iCut]->Sumw2();
918 SetLogBinningXTH2(hESDTruePrimaryEtaMCPtResolPt[iCut]);
919 fTrueList[iCut]->Add(hESDTruePrimaryEtaMCPtResolPt[iCut]);
920 hESDTrueBckGGInvMassPt[iCut] = new TH2F("ESD_TrueBckGG_InvMass_Pt","ESD_TrueBckGG_InvMass_Pt",800,0,0.8,250,0,25);
921 fTrueList[iCut]->Add(hESDTrueBckGGInvMassPt[iCut]);
922 hESDTrueBckContInvMassPt[iCut] = new TH2F("ESD_TrueBckCont_InvMass_Pt","ESD_TrueBckCont_InvMass_Pt",800,0,0.8,250,0,25);
923 fTrueList[iCut]->Add(hESDTrueBckContInvMassPt[iCut]);
924 hESDTrueK0sWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueK0sWithPi0Daughter_MCPt","ESD_TrueK0sWithPi0Daughter_MCPt",250,0,25);
925 fTrueList[iCut]->Add(hESDTrueK0sWithPi0DaughterMCPt[iCut]);
926 hESDTrueEtaWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueEtaWithPi0Daughter_MCPt","ESD_TrueEtaWithPi0Daughter_MCPt",250,0,25);
927 fTrueList[iCut]->Add(hESDTrueEtaWithPi0DaughterMCPt[iCut]);
928 hESDTrueLambdaWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueLambdaWithPi0Daughter_MCPt","ESD_TrueLambdaWithPi0Daughter_MCPt",250,0,25);
929 fTrueList[iCut]->Add(hESDTrueLambdaWithPi0DaughterMCPt[iCut]);
931 hESDTruePi0PtY[iCut] = new TH2F("ESD_TruePi0_Pt_Y","ESD_TruePi0_Pt_Y",150,0.03,15.,150,-1.5,1.5);
932 SetLogBinningXTH2(hESDTruePi0PtY[iCut]);
933 fTrueList[iCut]->Add(hESDTruePi0PtY[iCut]);
934 hESDTrueEtaPtY[iCut] = new TH2F("ESD_TrueEta_Pt_Y","ESD_TrueEta_Pt_Y",150,0.03,15.,150,-1.5,1.5);
935 SetLogBinningXTH2(hESDTrueEtaPtY[iCut]);
936 fTrueList[iCut]->Add(hESDTrueEtaPtY[iCut]);
937 hESDTruePi0PtAlpha[iCut] = new TH2F("ESD_TruePi0_Pt_Alpha","ESD_TruePi0_Pt_Alpha",150,0.03,15.,100,0,1);
938 SetLogBinningXTH2(hESDTruePi0PtAlpha[iCut]);
939 fTrueList[iCut]->Add(hESDTruePi0PtAlpha[iCut]);
940 hESDTrueEtaPtAlpha[iCut] = new TH2F("ESD_TrueEta_Pt_Alpha","ESD_TrueEta_Pt_Alpha",150,0.03,15.,100,0,1);
941 SetLogBinningXTH2(hESDTrueEtaPtAlpha[iCut]);
942 fTrueList[iCut]->Add(hESDTrueEtaPtAlpha[iCut]);
944 hESDTruePi0PtOpenAngle[iCut] = new TH2F("ESD_TruePi0_Pt_OpenAngle","ESD_TruePi0_Pt_OpenAngle",150,0.03,15.,200,0,2*TMath::Pi());
945 SetLogBinningXTH2(hESDTruePi0PtOpenAngle[iCut]);
946 fTrueList[iCut]->Add(hESDTruePi0PtOpenAngle[iCut]);
947 hESDTrueEtaPtOpenAngle[iCut] = new TH2F("ESD_TrueEta_Pt_OpenAngle","ESD_TrueEta_Pt_OpenAngle",150,0.03,15.,200,0,2*TMath::Pi());
948 SetLogBinningXTH2(hESDTrueEtaPtOpenAngle[iCut]);
949 fTrueList[iCut]->Add(hESDTrueEtaPtOpenAngle[iCut]);
956 fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
957 if(!fV0Reader){printf("Error: No V0 Reader");return;} // GetV0Reader
960 if((AliConvEventCuts*)fV0Reader->GetEventCuts())
961 if(((AliConvEventCuts*)fV0Reader->GetEventCuts())->GetCutHistograms())
962 fOutputContainer->Add(((AliConvEventCuts*)fV0Reader->GetEventCuts())->GetCutHistograms());
965 if((AliConversionPhotonCuts*)fV0Reader->GetConversionCuts())
966 if(((AliConversionPhotonCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms())
967 fOutputContainer->Add(((AliConversionPhotonCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms());
969 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
970 if(!((AliConvEventCuts*)fEventCutArray->At(iCut))) continue;
971 if(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutHistograms()){
972 fCutFolder[iCut]->Add(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutHistograms());
974 if(!((AliConversionPhotonCuts*)fCutArray->At(iCut))) continue;
975 if(((AliConversionPhotonCuts*)fCutArray->At(iCut))->GetCutHistograms()){
976 fCutFolder[iCut]->Add(((AliConversionPhotonCuts*)fCutArray->At(iCut))->GetCutHistograms());
978 if(fDoMesonAnalysis){
979 if(!((AliConversionMesonCuts*)fMesonCutArray->At(iCut))) continue;
980 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms()){
981 fCutFolder[iCut]->Add(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms());
985 PostData(1, fOutputContainer);
987 //_____________________________________________________________________________
988 Bool_t AliAnalysisTaskGammaConvV1::Notify()
990 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
991 if(!((AliConvEventCuts*)fEventCutArray->At(iCut))->GetDoEtaShift()){
992 hEtaShift[iCut]->Fill(0.,(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetEtaShift()));
993 continue; // No Eta Shift requested, continue
995 if(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetEtaShift() == 0.0){ // Eta Shift requested but not set, get shift automatically
996 ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCorrectEtaShiftFromPeriod(fV0Reader->GetPeriodName());
997 hEtaShift[iCut]->Fill(0.,(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetEtaShift()));
998 ((AliConvEventCuts*)fEventCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
1002 printf(" Gamma Conversion Task %s :: Eta Shift Manually Set to %f \n\n",
1003 (((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber()).Data(),((AliConvEventCuts*)fEventCutArray->At(iCut))->GetEtaShift());
1004 hEtaShift[iCut]->Fill(0.,(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetEtaShift()));
1005 ((AliConvEventCuts*)fEventCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
1010 //_____________________________________________________________________________
1011 void AliAnalysisTaskGammaConvV1::UserExec(Option_t *)
1014 // Called for each event
1016 Int_t eventQuality = ((AliConvEventCuts*)fV0Reader->GetEventCuts())->GetEventQuality();
1017 if(eventQuality == 2 || eventQuality == 3){// Event Not Accepted due to MC event missing or wrong trigger for V0ReaderV1
1018 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
1019 hNEvents[iCut]->Fill(eventQuality);
1024 if(fIsMC) fMCEvent = MCEvent();
1025 if(fMCEvent == NULL) fIsMC = kFALSE;
1027 fInputEvent = InputEvent();
1029 if(fIsMC && fInputEvent->IsA()==AliESDEvent::Class()){
1030 fMCStack = fMCEvent->Stack();
1031 if(fMCStack == NULL) fIsMC = kFALSE;
1034 fReaderGammas = fV0Reader->GetReconstructedGammas(); // Gammas from default Cut
1036 // ------------------- BeginEvent ----------------------------
1038 AliEventplane *EventPlane = fInputEvent->GetEventplane();
1039 if(fIsHeavyIon ==1)fEventPlaneAngle = EventPlane->GetEventplane("V0",fInputEvent,2);
1040 else fEventPlaneAngle=0.0;
1042 if(fIsMC && fInputEvent->IsA()==AliAODEvent::Class() && !(fV0Reader->AreAODsRelabeled())){
1043 RelabelAODPhotonCandidates(kTRUE); // In case of AODMC relabeling MC
1044 fV0Reader->RelabelAODs(kTRUE);
1046 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
1048 Int_t eventNotAccepted =
1049 ((AliConvEventCuts*)fEventCutArray->At(iCut))
1050 ->IsEventAcceptedByCut(fV0Reader->GetEventCuts(),fInputEvent,fMCEvent,fIsHeavyIon,kFALSE);
1051 if(eventNotAccepted){
1052 // cout << "event rejected due to wrong trigger: " <<eventNotAccepted << endl;
1053 hNEvents[iCut]->Fill(eventNotAccepted); // Check Centrality, PileUp, SDD and V0AND --> Not Accepted => eventQuality = 1
1057 if(eventQuality != 0){// Event Not Accepted
1058 // cout << "event rejected due to: " <<eventQuality << endl;
1059 hNEvents[iCut]->Fill(eventQuality);
1063 hNEvents[iCut]->Fill(eventQuality); // Should be 0 here
1064 hNGoodESDTracks[iCut]->Fill(fV0Reader->GetNumberOfPrimaryTracks());
1065 if(((AliConvEventCuts*)fEventCutArray->At(iCut))->IsHeavyIon() == 2) hNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A());
1066 else hNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A()+fInputEvent->GetVZEROData()->GetMTotV0C());
1069 // Process MC Particle
1070 if(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetSignalRejection() != 0){
1071 if(fInputEvent->IsA()==AliESDEvent::Class()){
1072 ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetNotRejectedParticles(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetSignalRejection(),
1073 ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetAcceptedHeader(),
1076 else if(fInputEvent->IsA()==AliAODEvent::Class()){
1077 ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetNotRejectedParticles(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetSignalRejection(),
1078 ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetAcceptedHeader(),
1082 if(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetAcceptedHeader()){
1083 for(Int_t i = 0;i<(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetAcceptedHeader())->GetEntries();i++){
1084 TString nameBin= hMCHeaders[iCut]->GetXaxis()->GetBinLabel(i+1);
1085 if (nameBin.CompareTo("")== 0){
1086 TString nameHeader = ((TObjString*)((TList*)((AliConvEventCuts*)fEventCutArray->At(iCut))
1087 ->GetAcceptedHeader())->At(i))->GetString();
1088 // cout << nameHeader << endl;
1089 hMCHeaders[iCut]->GetXaxis()->SetBinLabel(i+1,nameHeader.Data());
1096 if(fInputEvent->IsA()==AliESDEvent::Class())
1097 ProcessMCParticles();
1098 if(fInputEvent->IsA()==AliAODEvent::Class())
1099 ProcessAODMCParticles();
1102 ProcessPhotonCandidates(); // Process this cuts gammas
1104 hNGammaCandidates[iCut]->Fill(fGammaCandidates->GetEntries());
1105 hNGoodESDTracksVsNGammaCanditates[iCut]->Fill(fV0Reader->GetNumberOfPrimaryTracks(),fGammaCandidates->GetEntries());
1106 if(fDoMesonAnalysis){ // Meson Analysis
1107 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseMCPSmearing() && fIsMC){
1108 fUnsmearedPx = new Double_t[fGammaCandidates->GetEntries()]; // Store unsmeared Momenta
1109 fUnsmearedPy = new Double_t[fGammaCandidates->GetEntries()];
1110 fUnsmearedPz = new Double_t[fGammaCandidates->GetEntries()];
1111 fUnsmearedE = new Double_t[fGammaCandidates->GetEntries()];
1113 for(Int_t gamma=0;gamma<fGammaCandidates->GetEntries();gamma++){ // Smear the AODPhotons in MC
1114 fUnsmearedPx[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Px();
1115 fUnsmearedPy[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Py();
1116 fUnsmearedPz[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Pz();
1117 fUnsmearedE[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->E();
1118 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->SmearParticle(dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(gamma)));
1122 CalculatePi0Candidates(); // Combine Gammas
1123 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->DoBGCalculation()){
1124 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->BackgroundHandlerType() == 0){
1125 CalculateBackground(); // Combinatorial Background
1126 UpdateEventByEventData(); // Store Event for mixed Events
1129 CalculateBackgroundRP(); // Combinatorial Background
1130 fBGHandlerRP[iCut]->AddEvent(fGammaCandidates,fInputEvent); // Store Event for mixed Events
1133 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseMCPSmearing() && fIsMC){
1134 for(Int_t gamma=0;gamma<fGammaCandidates->GetEntries();gamma++){ // Smear the AODPhotons in MC
1135 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPx(fUnsmearedPx[gamma]); // Reset Unsmeared Momenta
1136 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPy(fUnsmearedPy[gamma]);
1137 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPz(fUnsmearedPz[gamma]);
1138 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetE(fUnsmearedE[gamma]);
1140 delete[] fUnsmearedPx; fUnsmearedPx = 0x0;
1141 delete[] fUnsmearedPy; fUnsmearedPy = 0x0;
1142 delete[] fUnsmearedPz; fUnsmearedPz = 0x0;
1143 delete[] fUnsmearedE; fUnsmearedE = 0x0;
1146 fGammaCandidates->Clear(); // delete this cuts good gammas
1149 if(fIsMC && fInputEvent->IsA()==AliAODEvent::Class() && !(fV0Reader->AreAODsRelabeled())){
1150 RelabelAODPhotonCandidates(kFALSE); // Back to ESDMC Label
1151 fV0Reader->RelabelAODs(kFALSE);
1154 PostData(1, fOutputContainer);
1156 //________________________________________________________________________
1157 void AliAnalysisTaskGammaConvV1::ProcessPhotonCandidates()
1160 TList *GammaCandidatesStepOne = new TList();
1161 TList *GammaCandidatesStepTwo = new TList();
1162 // Loop over Photon Candidates allocated by ReaderV1
1163 for(Int_t i = 0; i < fReaderGammas->GetEntriesFast(); i++){
1164 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(i);
1165 if(!PhotonCandidate) continue;
1166 fIsFromMBHeader = kTRUE;
1167 if(fIsMC && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
1168 Int_t isPosFromMBHeader
1169 = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1170 if(isPosFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1171 Int_t isNegFromMBHeader
1172 = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
1173 if(isNegFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1175 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1178 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelected(PhotonCandidate,fInputEvent)) continue;
1179 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(PhotonCandidate->GetPhotonPhi(),fEventPlaneAngle)) continue;
1180 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseElecSharingCut() &&
1181 !((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){
1182 fGammaCandidates->Add(PhotonCandidate); // if no second loop is required add to events good gammas
1184 if(fIsFromMBHeader){
1185 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1186 if (fDoPhotonQA > 0){
1187 hESDConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
1188 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1192 if(fInputEvent->IsA()==AliESDEvent::Class())
1193 ProcessTruePhotonCandidates(PhotonCandidate);
1194 if(fInputEvent->IsA()==AliAODEvent::Class())
1195 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
1197 if (fIsFromMBHeader && fDoPhotonQA == 2){
1198 if (fIsHeavyIon == 1 && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
1199 fPtGamma = PhotonCandidate->Pt();
1200 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1201 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1202 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1203 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1204 tESDConvGammaPtDcazCat[fiCut]->Fill();
1205 } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
1206 fPtGamma = PhotonCandidate->Pt();
1207 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1208 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1209 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1210 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1211 tESDConvGammaPtDcazCat[fiCut]->Fill();
1214 } else if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseElecSharingCut()){ // if Shared Electron cut is enabled, Fill array, add to step one
1215 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->FillElectonLabelArray(PhotonCandidate,nV0);
1217 GammaCandidatesStepOne->Add(PhotonCandidate);
1218 } else if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseElecSharingCut() &&
1219 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){ // shared electron is disabled, step one not needed -> step two
1220 GammaCandidatesStepTwo->Add(PhotonCandidate);
1223 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseElecSharingCut()){
1224 for(Int_t i = 0;i<GammaCandidatesStepOne->GetEntries();i++){
1225 AliAODConversionPhoton *PhotonCandidate= (AliAODConversionPhoton*) GammaCandidatesStepOne->At(i);
1226 if(!PhotonCandidate) continue;
1227 fIsFromMBHeader = kTRUE;
1228 if(fMCStack && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
1229 Int_t isPosFromMBHeader
1230 = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1231 Int_t isNegFromMBHeader
1232 = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
1233 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1235 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->RejectSharedElectronV0s(PhotonCandidate,i,GammaCandidatesStepOne->GetEntries())) continue;
1236 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){ // To Colse v0s cut diabled, step two not needed
1237 fGammaCandidates->Add(PhotonCandidate);
1238 if(fIsFromMBHeader){
1239 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1240 if (fDoPhotonQA > 0){
1241 hESDConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
1242 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1247 if(fInputEvent->IsA()==AliESDEvent::Class())
1248 ProcessTruePhotonCandidates(PhotonCandidate);
1249 if(fInputEvent->IsA()==AliAODEvent::Class())
1250 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
1251 } else GammaCandidatesStepTwo->Add(PhotonCandidate); // Close v0s cut enabled -> add to list two
1253 if (fIsFromMBHeader && fDoPhotonQA == 2){
1254 if (fIsHeavyIon ==1 && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
1255 fPtGamma = PhotonCandidate->Pt();
1256 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1257 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1258 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1259 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1260 tESDConvGammaPtDcazCat[fiCut]->Fill();
1261 } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
1262 fPtGamma = PhotonCandidate->Pt();
1263 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1264 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1265 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1266 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1267 tESDConvGammaPtDcazCat[fiCut]->Fill();
1272 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){
1273 for(Int_t i = 0;i<GammaCandidatesStepTwo->GetEntries();i++){
1274 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) GammaCandidatesStepTwo->At(i);
1275 if(!PhotonCandidate) continue;
1276 fIsFromMBHeader = kTRUE;
1277 if(fMCStack && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
1278 Int_t isPosFromMBHeader
1279 = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1280 Int_t isNegFromMBHeader
1281 = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
1282 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1284 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->RejectToCloseV0s(PhotonCandidate,GammaCandidatesStepTwo,i)) continue;
1285 fGammaCandidates->Add(PhotonCandidate); // Add gamma to current cut TList
1286 if(fIsFromMBHeader){
1287 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1288 if (fDoPhotonQA > 0){
1289 hESDConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
1290 hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1294 if(fInputEvent->IsA()==AliESDEvent::Class())
1295 ProcessTruePhotonCandidates(PhotonCandidate);
1296 if(fInputEvent->IsA()==AliAODEvent::Class())
1297 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
1299 if (fIsFromMBHeader){
1300 if (fIsHeavyIon == 1 && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
1301 fPtGamma = PhotonCandidate->Pt();
1302 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1303 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1304 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1305 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1306 tESDConvGammaPtDcazCat[fiCut]->Fill();
1307 } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
1308 fPtGamma = PhotonCandidate->Pt();
1309 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1310 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1311 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1312 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1313 tESDConvGammaPtDcazCat[fiCut]->Fill();
1319 delete GammaCandidatesStepOne;
1320 GammaCandidatesStepOne = 0x0;
1321 delete GammaCandidatesStepTwo;
1322 GammaCandidatesStepTwo = 0x0;
1325 //________________________________________________________________________
1326 void AliAnalysisTaskGammaConvV1::ProcessTruePhotonCandidatesAOD(AliAODConversionPhoton *TruePhotonCandidate)
1328 Double_t magField = fInputEvent->GetMagneticField();
1329 if( magField < 0.0 ){
1336 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1337 if (AODMCTrackArray != NULL && TruePhotonCandidate != NULL){
1339 AliAODMCParticle *posDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelPositive());
1340 AliAODMCParticle *negDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelNegative());
1343 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
1344 Int_t pdgCode[2] = {abs(posDaughter->GetPdgCode()),abs(negDaughter->GetPdgCode())};
1346 if(posDaughter->GetMother() != negDaughter->GetMother()){
1347 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1351 else if(posDaughter->GetMother() == -1){
1352 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1357 if(pdgCode[0]!=11 || pdgCode[1]!=11){
1359 return; //One Particle is not a electron
1361 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()){
1363 return; // Same Charge
1366 AliAODMCParticle *Photon = (AliAODMCParticle*) AODMCTrackArray->At(posDaughter->GetMother());
1367 AliVTrack * electronCandidate = ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelNegative() );
1368 AliVTrack * positronCandidate = ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelPositive() );
1369 Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronCandidate->Phi()-positronCandidate->Phi());
1371 if(Photon->GetPdgCode() != 22){
1372 hESDTrueDalitzPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
1374 return; // Mother is no Photon
1377 if(((posDaughter->GetMCProcessCode())) != 5 || ((negDaughter->GetMCProcessCode())) != 5){
1379 return;// check if the daughters come from a conversion
1381 // STILL A BUG IN ALIROOT >>8 HAS TPO BE REMOVED AFTER FIX
1384 rConv = sqrt( (posDaughter->Xv()*posDaughter->Xv()) + (posDaughter->Yv()*posDaughter->Yv()) );
1387 if(fIsFromMBHeader){
1388 hESDTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1389 if (fDoPhotonQA > 0){
1390 hESDTrueConvGammaEta[fiCut]->Fill(TruePhotonCandidate->Eta());
1391 hESDTrueConvGammaR[fiCut]->Fill(TruePhotonCandidate->GetConversionRadius());
1392 hESDTrueConvGammaRMC[fiCut]->Fill(rConv);
1393 hESDTrueConvGammaPtMC[fiCut]->Fill(Photon->Pt());
1397 hESDTrueGammaPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
1398 if(Photon->IsPrimary()){
1399 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
1400 if(fIsFromMBHeader){
1402 hESDTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1403 hESDTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
1405 // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
1408 if(fIsFromMBHeader){
1409 hESDTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1411 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
1412 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 3122){
1414 hESDTrueSecondaryConvGammaFromXFromLambdaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1416 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
1417 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 310){
1419 hESDTrueSecondaryConvGammaFromXFromK0sPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1421 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
1422 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 221){
1430 //________________________________________________________________________
1431 void AliAnalysisTaskGammaConvV1::ProcessTruePhotonCandidates(AliAODConversionPhoton *TruePhotonCandidate)
1434 Double_t magField = fInputEvent->GetMagneticField();
1435 if( magField < 0.0 ){
1442 // Process True Photons
1443 TParticle *posDaughter = TruePhotonCandidate->GetPositiveMCDaughter(fMCStack);
1444 TParticle *negDaughter = TruePhotonCandidate->GetNegativeMCDaughter(fMCStack);
1448 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
1449 Int_t pdgCode[2] = {abs(posDaughter->GetPdgCode()),abs(negDaughter->GetPdgCode())};
1451 if(posDaughter->GetMother(0) != negDaughter->GetMother(0)){
1452 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1454 } else if(posDaughter->GetMother(0) == -1){
1455 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1459 if(pdgCode[0]!=11 || pdgCode[1]!=11) return; //One Particle is not a electron
1461 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()) return; // Same Charge
1463 TParticle *Photon = TruePhotonCandidate->GetMCParticle(fMCStack);
1464 AliVTrack * electronCandidate = ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelNegative() );
1465 AliVTrack * positronCandidate = ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelPositive() );
1466 Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronCandidate->Phi()-positronCandidate->Phi());
1468 if(Photon->GetPdgCode() != 22){
1469 hESDTrueDalitzPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
1470 return; // Mother is no Photon
1473 if(posDaughter->GetUniqueID() != 5 || negDaughter->GetUniqueID() !=5) return;// check if the daughters come from a conversion
1478 if(fIsFromMBHeader){
1479 hESDTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1480 if (fDoPhotonQA > 0){
1481 hESDTrueConvGammaEta[fiCut]->Fill(TruePhotonCandidate->Eta());
1482 hESDTrueConvGammaR[fiCut]->Fill(TruePhotonCandidate->GetConversionRadius());
1483 hESDTrueConvGammaRMC[fiCut]->Fill(posDaughter->R());
1484 hESDTrueConvGammaPtMC[fiCut]->Fill(Photon->Pt());
1488 hESDTrueGammaPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
1489 if(posDaughter->GetMother(0) <= fMCStack->GetNprimary()){
1490 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
1491 if(fIsFromMBHeader){
1493 hESDTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1494 hESDTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
1497 // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
1499 if(fIsFromMBHeader){
1501 hESDTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1502 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
1503 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 3122){
1504 hESDTrueSecondaryConvGammaFromXFromLambdaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1507 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
1508 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 310){
1509 hESDTrueSecondaryConvGammaFromXFromK0sPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1512 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
1513 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 221){
1519 //________________________________________________________________________
1520 void AliAnalysisTaskGammaConvV1::ProcessAODMCParticles()
1523 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1525 if (AODMCTrackArray){
1526 // Loop over all primary MC particle
1527 for(Int_t i = 0; i < AODMCTrackArray->GetEntriesFast(); i++) {
1529 AliAODMCParticle* particle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(i));
1530 if (!particle) continue;
1531 if (!particle->IsPrimary()) continue;
1533 Int_t isMCFromMBHeader = -1;
1534 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
1536 = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
1537 if(isMCFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1540 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(particle->Phi(),fEventPlaneAngle,kFALSE)) continue;
1541 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kFALSE)){
1542 hMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
1543 if(particle->GetMother() >-1){ // Meson Decay Gamma
1544 switch((static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetMother())))->GetPdgCode()){
1546 hMCDecayGammaPi0Pt[fiCut]->Fill(particle->Pt());
1549 hMCDecayGammaRhoPt[fiCut]->Fill(particle->Pt());
1552 hMCDecayGammaEtaPt[fiCut]->Fill(particle->Pt());
1555 hMCDecayGammaOmegaPt[fiCut]->Fill(particle->Pt());
1558 hMCDecayGammaEtapPt[fiCut]->Fill(particle->Pt());
1561 hMCDecayGammaPhiPt[fiCut]->Fill(particle->Pt());
1564 hMCDecayGammaSigmaPt[fiCut]->Fill(particle->Pt());
1569 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kTRUE)){
1571 for(Int_t daughterIndex=particle->GetDaughter(0);daughterIndex<=particle->GetDaughter(1);daughterIndex++){
1572 AliAODMCParticle *tmpDaughter = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(daughterIndex));
1573 if(!tmpDaughter) continue;
1574 if(abs(tmpDaughter->GetPdgCode()) == 11){
1575 rConv = sqrt( (tmpDaughter->Xv()*tmpDaughter->Xv()) + (tmpDaughter->Yv()*tmpDaughter->Yv()) );
1578 hMCConvGammaPt[fiCut]->Fill(particle->Pt());
1579 if (fDoPhotonQA > 0){
1580 hMCConvGammaR[fiCut]->Fill(rConv);
1581 hMCConvGammaEta[fiCut]->Fill(particle->Eta());
1584 // Converted MC Gamma
1585 if(fDoMesonAnalysis){
1586 if(particle->GetPdgCode() == 310 && fDoMesonQA > 0){
1587 Double_t mesonY = 10.;
1588 if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
1589 mesonY=10.-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
1591 mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))
1592 -((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
1594 Float_t weightedK0s= 1;
1595 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1596 if (particle->Pt()>0.005){
1597 weightedK0s= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
1598 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1601 hMCK0sPt[fiCut]->Fill(particle->Pt(),weightedK0s);
1602 hMCK0sWOWeightPt[fiCut]->Fill(particle->Pt());
1603 hMCK0sPtY[fiCut]->Fill(particle->Pt(),mesonY,weightedK0s);
1605 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelectedAODMC(particle,AODMCTrackArray,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
1606 AliAODMCParticle* daughter0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(0)));
1607 AliAODMCParticle* daughter1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(1)));
1608 Float_t weighted= 1;
1609 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1610 if (particle->Pt()>0.005){
1611 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
1612 // if(particle->GetPdgCode() == 221){
1613 // cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1617 Double_t mesonY = 10.;
1618 if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
1619 mesonY=10.-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
1621 mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))
1622 -((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
1625 Double_t alpha = -1;
1626 if (particle->GetPdgCode() == 111 || particle->GetPdgCode() == 221){
1627 alpha = TMath::Abs((daughter0->E() - daughter1->E()))/(daughter0->E() + daughter1->E());
1630 if(particle->GetPdgCode() == 111){
1631 hMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
1632 hMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
1633 if (fDoMesonQA > 0){
1634 hMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1635 hMCPi0PtAlpha[fiCut]->Fill(particle->Pt(),alpha); // All MC Pi0
1637 } else if(particle->GetPdgCode() == 221){
1638 hMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
1639 hMCEtaWOWeightPt[fiCut]->Fill(particle->Pt());
1640 if (fDoMesonQA > 0){
1641 hMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1642 hMCEtaPtAlpha[fiCut]->Fill(particle->Pt(),alpha); // All MC Pi0
1646 // Check the acceptance for both gammas
1647 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter0,AODMCTrackArray,kFALSE) &&
1648 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter1,AODMCTrackArray,kFALSE) &&
1649 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter0->Phi(),fEventPlaneAngle,kFALSE) &&
1650 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter1->Phi(),fEventPlaneAngle,kFALSE)){
1652 if(particle->GetPdgCode() == 111){
1653 hMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
1654 } else if(particle->GetPdgCode() == 221){
1655 hMCEtaInAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Eta with gamma in acc
1664 //________________________________________________________________________
1665 void AliAnalysisTaskGammaConvV1::ProcessMCParticles()
1667 // Loop over all primary MC particle
1668 for(Int_t i = 0; i < fMCStack->GetNprimary(); i++) {
1669 TParticle* particle = (TParticle *)fMCStack->Particle(i);
1670 if (!particle) continue;
1672 Int_t isMCFromMBHeader = -1;
1673 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
1675 = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
1676 if(isMCFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1679 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(particle->Phi(),fEventPlaneAngle,kFALSE)) continue;
1680 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kFALSE)){
1681 hMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
1682 if(particle->GetMother(0) >-1){ // Meson Decay Gamma
1683 switch(fMCStack->Particle(particle->GetMother(0))->GetPdgCode()){
1685 hMCDecayGammaPi0Pt[fiCut]->Fill(particle->Pt());
1688 hMCDecayGammaRhoPt[fiCut]->Fill(particle->Pt());
1691 hMCDecayGammaEtaPt[fiCut]->Fill(particle->Pt());
1694 hMCDecayGammaOmegaPt[fiCut]->Fill(particle->Pt());
1697 hMCDecayGammaEtapPt[fiCut]->Fill(particle->Pt());
1700 hMCDecayGammaPhiPt[fiCut]->Fill(particle->Pt());
1703 hMCDecayGammaSigmaPt[fiCut]->Fill(particle->Pt());
1708 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kTRUE)){
1709 hMCConvGammaPt[fiCut]->Fill(particle->Pt());
1710 if (fDoPhotonQA > 0){
1711 hMCConvGammaR[fiCut]->Fill(((TParticle*)fMCStack->Particle(particle->GetFirstDaughter()))->R());
1712 hMCConvGammaEta[fiCut]->Fill(particle->Eta());
1714 } // Converted MC Gamma
1715 if(fDoMesonAnalysis){
1716 if(particle->GetPdgCode() == 310 && fDoMesonQA > 0){
1717 Double_t mesonY = 10.;
1718 if(particle->Energy() - particle->Pz() == 0 || particle->Energy() + particle->Pz() == 0){
1719 mesonY=10.-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
1721 mesonY = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())))
1722 -((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
1724 Float_t weightedK0s= 1;
1725 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1726 if (particle->Pt()>0.005){
1727 weightedK0s= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
1728 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1731 if (fMCStack->IsPhysicalPrimary(i)){
1732 hMCK0sPt[fiCut]->Fill(particle->Pt(),weightedK0s);
1733 hMCK0sWOWeightPt[fiCut]->Fill(particle->Pt());
1734 hMCK0sPtY[fiCut]->Fill(particle->Pt(),mesonY,weightedK0s);
1737 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
1738 ->MesonIsSelectedMC(particle,fMCStack,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
1739 TParticle* daughter0 = (TParticle*)fMCStack->Particle(particle->GetFirstDaughter());
1740 TParticle* daughter1 = (TParticle*)fMCStack->Particle(particle->GetLastDaughter());
1742 Float_t weighted= 1;
1743 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1744 if (particle->Pt()>0.005){
1745 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
1746 // if(particle->GetPdgCode() == 221){
1747 // cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1751 Double_t mesonY = 10.;
1752 if(particle->Energy() - particle->Pz() == 0 || particle->Energy() + particle->Pz() == 0){
1753 mesonY=10.-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
1755 mesonY = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())))
1756 -((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
1758 Double_t alpha = -1;
1759 if (particle->GetPdgCode() == 111 || particle->GetPdgCode() == 221){
1760 alpha = TMath::Abs((daughter0->Energy() - daughter1->Energy()))/(daughter0->Energy() + daughter1->Energy());
1763 if(particle->GetPdgCode() == 111){
1764 hMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
1765 hMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
1766 if (fDoMesonQA > 0){
1767 hMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1768 hMCPi0PtAlpha[fiCut]->Fill(particle->Pt(),alpha); // All MC Pi0
1770 } else if(particle->GetPdgCode() == 221){
1771 hMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
1772 hMCEtaWOWeightPt[fiCut]->Fill(particle->Pt());
1773 if (fDoMesonQA > 0){
1774 hMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1775 hMCEtaPtAlpha[fiCut]->Fill(particle->Pt(),alpha); // All MC Pi0
1779 // Check the acceptance for both gammas
1780 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter0,fMCStack,kFALSE) &&
1781 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter1,fMCStack,kFALSE) &&
1782 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter0->Phi(),fEventPlaneAngle,kFALSE) &&
1783 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter1->Phi(),fEventPlaneAngle,kFALSE)){
1785 if(particle->GetPdgCode() == 111){
1786 hMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
1787 } else if(particle->GetPdgCode() == 221){
1788 hMCEtaInAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Eta with gamma in acc
1796 for(Int_t i = fMCStack->GetNprimary(); i < fMCStack->GetNtrack(); i++) {
1797 TParticle* particle = (TParticle *)fMCStack->Particle(i);
1798 if (!particle) continue;
1800 Int_t isMCFromMBHeader = -1;
1801 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
1803 = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
1804 if(isMCFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1807 if(fDoMesonAnalysis){
1808 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelectedMC(particle,fMCStack,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
1809 Float_t weighted= 1;
1810 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1811 if (particle->Pt()>0.005){
1812 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
1813 // if(particle->GetPdgCode() == 221){
1814 // cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1819 if(particle->GetPdgCode() == 111){
1820 Int_t pdgCode = ((TParticle*)fMCStack->Particle( particle->GetFirstMother() ))->GetPdgCode();
1821 Int_t source = GetSourceClassification(111,pdgCode);
1822 hMCSecPi0PtvsSource[fiCut]->Fill(particle->Pt(),source,weighted); // All MC Pi0
1823 hMCSecPi0Source[fiCut]->Fill(pdgCode);
1824 } else if(particle->GetPdgCode() == 221){
1825 Int_t pdgCode = ((TParticle*)fMCStack->Particle( particle->GetFirstMother() ))->GetPdgCode();
1826 hMCSecEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
1827 hMCSecEtaSource[fiCut]->Fill(pdgCode);
1835 //________________________________________________________________________
1836 void AliAnalysisTaskGammaConvV1::CalculatePi0Candidates(){
1838 // Conversion Gammas
1839 if(fGammaCandidates->GetEntries()>1){
1840 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries()-1;firstGammaIndex++){
1841 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
1842 if (gamma0==NULL) continue;
1843 for(Int_t secondGammaIndex=firstGammaIndex+1;secondGammaIndex<fGammaCandidates->GetEntries();secondGammaIndex++){
1844 AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(secondGammaIndex));
1845 //Check for same Electron ID
1846 if (gamma1==NULL) continue;
1847 if(gamma0->GetTrackLabelPositive() == gamma1->GetTrackLabelPositive() ||
1848 gamma0->GetTrackLabelNegative() == gamma1->GetTrackLabelNegative() ||
1849 gamma0->GetTrackLabelNegative() == gamma1->GetTrackLabelPositive() ||
1850 gamma0->GetTrackLabelPositive() == gamma1->GetTrackLabelNegative() ) continue;
1852 AliAODConversionMother *pi0cand = new AliAODConversionMother(gamma0,gamma1);
1853 pi0cand->SetLabels(firstGammaIndex,secondGammaIndex);
1855 pi0cand->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
1856 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(pi0cand,kTRUE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift()))){
1857 hESDMotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
1858 if(pi0cand->GetAlpha()<0.1) hESDMotherInvMassEalpha[fiCut]->Fill(pi0cand->M(),pi0cand->E());
1860 if (fDoMesonQA > 0){
1861 if ( pi0cand->M() > 0.05 && pi0cand->M() < 0.17){
1862 hESDMotherPi0PtY[fiCut]->Fill(pi0cand->Pt(),pi0cand->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
1863 hESDMotherPi0PtAlpha[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetAlpha());
1864 hESDMotherPi0PtOpenAngle[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetOpeningAngle());
1867 if ( pi0cand->M() > 0.45 && pi0cand->M() < 0.65){
1868 hESDMotherEtaPtY[fiCut]->Fill(pi0cand->Pt(),pi0cand->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
1869 hESDMotherEtaPtAlpha[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetAlpha());
1870 hESDMotherEtaPtOpenAngle[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetOpeningAngle());
1873 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->DoBGCalculation()){
1877 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->BackgroundHandlerType() == 0){
1878 zbin = fBGHandler[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
1879 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1880 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
1882 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
1886 zbin = fBGHandlerRP[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
1887 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1888 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
1890 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
1893 Double_t sparesFill[4] = {pi0cand->M(),pi0cand->Pt(),(Double_t)zbin,(Double_t)mbin};
1894 sESDMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
1899 if(fInputEvent->IsA()==AliESDEvent::Class())
1900 ProcessTrueMesonCandidates(pi0cand,gamma0,gamma1);
1901 if(fInputEvent->IsA()==AliAODEvent::Class())
1902 ProcessTrueMesonCandidatesAOD(pi0cand,gamma0,gamma1);
1904 if (fDoMesonQA == 2){
1905 fInvMass = pi0cand->M();
1906 fPt = pi0cand->Pt();
1907 if (abs(gamma0->GetDCAzToPrimVtx()) < abs(gamma1->GetDCAzToPrimVtx())){
1908 fDCAzGammaMin = gamma0->GetDCAzToPrimVtx();
1909 fDCAzGammaMax = gamma1->GetDCAzToPrimVtx();
1911 fDCAzGammaMin = gamma1->GetDCAzToPrimVtx();
1912 fDCAzGammaMax = gamma0->GetDCAzToPrimVtx();
1914 iFlag = pi0cand->GetMesonQuality();
1915 // cout << "gamma 0: " << gamma0->GetV0Index()<< "\t" << gamma0->GetPx() << "\t" << gamma0->GetPy() << "\t" << gamma0->GetPz() << "\t" << endl;
1916 // cout << "gamma 1: " << gamma1->GetV0Index()<< "\t"<< gamma1->GetPx() << "\t" << gamma1->GetPy() << "\t" << gamma1->GetPz() << "\t" << endl;
1917 // cout << "pi0: "<<fInvMass << "\t" << fPt <<"\t" << fDCAzGammaMin << "\t" << fDCAzGammaMax << "\t" << (Int_t)iFlag << "\t" << (Int_t)iMesonMCInfo <<endl;
1918 if (fIsHeavyIon == 1 && fPt > 0.399 && fPt < 20. ) {
1919 if (fInvMass > 0.08 && fInvMass < 0.2) tESDMesonsInvMassPtDcazMinDcazMaxFlag[fiCut]->Fill();
1920 if ((fInvMass > 0.45 && fInvMass < 0.6) && (fPt > 0.999 && fPt < 20.) )tESDMesonsInvMassPtDcazMinDcazMaxFlag[fiCut]->Fill();
1921 } else if (fPt > 0.299 && fPt < 20. ) {
1922 if ( (fInvMass > 0.08 && fInvMass < 0.2) || (fInvMass > 0.45 && fInvMass < 0.6)) tESDMesonsInvMassPtDcazMinDcazMaxFlag[fiCut]->Fill();
1933 //______________________________________________________________________
1934 void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidates(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1)
1936 // Process True Mesons
1937 AliStack *MCStack = fMCEvent->Stack();
1939 if(TrueGammaCandidate0->GetV0Index()<fInputEvent->GetNumberOfV0s()){
1940 Bool_t isTruePi0 = kFALSE;
1941 Bool_t isTrueEta = kFALSE;
1942 Bool_t isTruePi0Dalitz = kFALSE;
1943 Bool_t isTrueEtaDalitz = kFALSE;
1944 Bool_t gamma0DalitzCand = kFALSE;
1945 Bool_t gamma1DalitzCand = kFALSE;
1946 Int_t gamma0MCLabel = TrueGammaCandidate0->GetMCParticleLabel(MCStack);
1947 Int_t gamma0MotherLabel = -1;
1948 if(gamma0MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1949 // Daughters Gamma 0
1950 TParticle * negativeMC = (TParticle*)TrueGammaCandidate0->GetNegativeMCDaughter(MCStack);
1951 TParticle * positiveMC = (TParticle*)TrueGammaCandidate0->GetPositiveMCDaughter(MCStack);
1952 TParticle * gammaMC0 = (TParticle*)MCStack->Particle(gamma0MCLabel);
1953 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
1954 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
1955 if(gammaMC0->GetPdgCode() == 22){ // ... with Gamma Mother
1956 gamma0MotherLabel=gammaMC0->GetFirstMother();
1959 if(gammaMC0->GetPdgCode() ==111){ // Dalitz candidate
1960 gamma0DalitzCand = kTRUE;
1961 gamma0MotherLabel=-111;
1963 if(gammaMC0->GetPdgCode() ==221){ // Dalitz candidate
1964 gamma0DalitzCand = kTRUE;
1965 gamma0MotherLabel=-221;
1969 if(TrueGammaCandidate1->GetV0Index()<fInputEvent->GetNumberOfV0s()){
1970 Int_t gamma1MCLabel = TrueGammaCandidate1->GetMCParticleLabel(MCStack);
1971 Int_t gamma1MotherLabel = -1;
1972 if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1973 // Daughters Gamma 1
1974 TParticle * negativeMC = (TParticle*)TrueGammaCandidate1->GetNegativeMCDaughter(MCStack);
1975 TParticle * positiveMC = (TParticle*)TrueGammaCandidate1->GetPositiveMCDaughter(MCStack);
1976 TParticle * gammaMC1 = (TParticle*)MCStack->Particle(gamma1MCLabel);
1977 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
1978 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
1979 if(gammaMC1->GetPdgCode() == 22){ // ... with Gamma Mother
1980 gamma1MotherLabel=gammaMC1->GetFirstMother();
1983 if(gammaMC1->GetPdgCode() ==111 ){ // Dalitz candidate
1984 gamma1DalitzCand = kTRUE;
1985 gamma1MotherLabel=-111;
1987 if(gammaMC1->GetPdgCode() ==221){ // Dalitz candidate
1988 gamma1DalitzCand = kTRUE;
1989 gamma1MotherLabel=-221;
1993 if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
1994 if(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 111){
1997 if(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 221){
2002 //Identify Dalitz candidate
2003 if (gamma1DalitzCand || gamma0DalitzCand){
2004 if (gamma0DalitzCand && gamma0MCLabel >=0 && gamma0MCLabel==gamma1MotherLabel){
2005 if (gamma0MotherLabel == -111) isTruePi0Dalitz = kTRUE;
2006 if (gamma0MotherLabel == -221) isTrueEtaDalitz = kTRUE;
2008 if (gamma1DalitzCand && gamma1MCLabel >=0 && gamma1MCLabel==gamma0MotherLabel){
2009 if (gamma1MotherLabel == -111) isTruePi0Dalitz = kTRUE;
2010 if (gamma1MotherLabel == -221) isTrueEtaDalitz = kTRUE;
2015 if(isTruePi0 || isTrueEta){// True Pion or Eta
2016 hESDTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2017 if (fDoMesonQA > 0){
2019 if ( Pi0Candidate->M() > 0.05 && Pi0Candidate->M() < 0.17){
2020 hESDTruePi0PtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2021 hESDTruePi0PtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
2022 hESDTruePi0PtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
2024 } else if (isTrueEta){
2025 if ( Pi0Candidate->M() > 0.45 && Pi0Candidate->M() < 0.65){
2026 hESDTrueEtaPtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2027 hESDTrueEtaPtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
2028 hESDTrueEtaPtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
2032 if(gamma0MotherLabel >= MCStack->GetNprimary()){ // Secondary Meson
2033 Int_t secMotherLabel = ((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetMother(0);
2034 Float_t weightedSec= 1;
2035 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, fMCStack, fInputEvent) && MCStack->Particle(secMotherLabel)->GetPdgCode()==310){
2036 weightedSec= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),secMotherLabel, fMCStack, fInputEvent)/2.; //invariant mass is additive thus the weight for the daughters has to be devide by two for the K0s at a certain pt
2037 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
2039 hESDTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2041 if (secMotherLabel >-1){
2042 if(MCStack->Particle(secMotherLabel)->GetPdgCode()==310){
2044 hESDTrueSecondaryMotherFromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2045 if (fDoMesonQA > 0)hESDTrueK0sWithPi0DaughterMCPt[fiCut]
2046 ->Fill(MCStack->Particle(secMotherLabel)->Pt());
2048 if(MCStack->Particle(secMotherLabel)->GetPdgCode()==221){
2050 hESDTrueSecondaryMotherFromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2051 if (fDoMesonQA > 0)hESDTrueEtaWithPi0DaughterMCPt[fiCut]
2052 ->Fill(MCStack->Particle(secMotherLabel)->Pt());
2054 if(MCStack->Particle(secMotherLabel)->GetPdgCode()==3122){
2056 hESDTrueSecondaryMotherFromLambdaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2057 if (fDoMesonQA > 0)hESDTrueLambdaWithPi0DaughterMCPt[fiCut]
2058 ->Fill(MCStack->Particle(secMotherLabel)->Pt());
2061 } else { // Only primary pi0 for efficiency calculation
2063 Float_t weighted= 1;
2064 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, fMCStack, fInputEvent)){
2065 if (((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt()>0.005){
2066 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, fMCStack, fInputEvent);
2067 // cout << "rec \t " <<gamma1MotherLabel << "\t" << weighted << endl;
2070 hESDTruePrimaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2071 hESDTruePrimaryMotherW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2072 pESDTruePrimaryMotherWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2075 if (fDoMesonQA > 0){
2076 if(isTruePi0){ // Only primary pi0 for resolution
2077 hESDTruePrimaryPi0MCPtResolPt[fiCut]->Fill(((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
2079 if (isTrueEta){ // Only primary eta for resolution
2080 hESDTruePrimaryEtaMCPtResolPt[fiCut]->Fill(((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
2084 } else if(!isTruePi0 && !isTrueEta){ // Background
2085 if (fDoMesonQA > 0){
2086 if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
2087 hESDTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2089 } else { // No photon or without mother
2090 hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2093 if( isTruePi0Dalitz || isTrueEtaDalitz ){
2096 hESDTrueMotherDalitzInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2097 } else if (gamma0DalitzCand || gamma1DalitzCand){
2098 if (fDoMesonQA > 0)hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2104 //______________________________________________________________________
2105 void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidatesAOD(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1)
2108 // Process True Mesons
2109 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
2110 Bool_t isTruePi0 = kFALSE;
2111 Bool_t isTrueEta = kFALSE;
2112 Bool_t isTruePi0Dalitz = kFALSE;
2113 Bool_t isTrueEtaDalitz = kFALSE;
2114 Bool_t gamma0DalitzCand = kFALSE;
2115 Bool_t gamma1DalitzCand = kFALSE;
2117 if (AODMCTrackArray!=NULL && TrueGammaCandidate0 != NULL){
2118 AliAODMCParticle *positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelPositive()));
2119 AliAODMCParticle *negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelNegative()));
2122 Int_t gamma0MCLabel = -1;
2123 Int_t gamma0MotherLabel = -1;
2124 if(!positiveMC||!negativeMC)
2127 if(positiveMC->GetMother()>-1&&(negativeMC->GetMother() == positiveMC->GetMother())){
2128 gamma0MCLabel = positiveMC->GetMother();
2131 if(gamma0MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
2132 // Daughters Gamma 0
2133 AliAODMCParticle * gammaMC0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MCLabel));
2134 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
2135 if(((positiveMC->GetMCProcessCode())) == 5 && ((negativeMC->GetMCProcessCode())) == 5){ // ... From Conversion ...
2136 if(gammaMC0->GetPdgCode() == 22){ // ... with Gamma Mother
2137 gamma0MotherLabel=gammaMC0->GetMother();
2140 if(gammaMC0->GetPdgCode() ==111){ // Dalitz candidate
2141 gamma0DalitzCand = kTRUE;
2142 gamma0MotherLabel=-111;
2144 if(gammaMC0->GetPdgCode() ==221){ // Dalitz candidate
2145 gamma0DalitzCand = kTRUE;
2146 gamma0MotherLabel=-221;
2150 positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate1->GetMCLabelPositive()));
2151 negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate1->GetMCLabelNegative()));
2153 Int_t gamma1MCLabel = -1;
2154 Int_t gamma1MotherLabel = -1;
2155 if(!positiveMC||!negativeMC)
2158 if(positiveMC->GetMother()>-1&&(negativeMC->GetMother() == positiveMC->GetMother())){
2159 gamma1MCLabel = positiveMC->GetMother();
2161 if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
2162 // Daughters Gamma 1
2163 AliAODMCParticle * gammaMC1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MCLabel));
2164 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
2165 if(((positiveMC->GetMCProcessCode())) == 5 && ((negativeMC->GetMCProcessCode())) == 5){ // ... From Conversion ...
2166 if(gammaMC1->GetPdgCode() == 22){ // ... with Gamma Mother
2167 gamma1MotherLabel=gammaMC1->GetMother();
2170 if(gammaMC1->GetPdgCode() ==111 ){ // Dalitz candidate
2171 gamma1DalitzCand = kTRUE;
2172 gamma1MotherLabel=-111;
2174 if(gammaMC1->GetPdgCode() ==221){ // Dalitz candidate
2175 gamma1DalitzCand = kTRUE;
2176 gamma1MotherLabel=-221;
2180 if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
2181 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 111){
2184 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 221){
2189 //Identify Dalitz candidate
2190 if (gamma1DalitzCand || gamma0DalitzCand){
2191 if (gamma0DalitzCand && gamma0MCLabel >=0 && gamma0MCLabel==gamma1MotherLabel){
2192 if (gamma0MotherLabel == -111) isTruePi0Dalitz = kTRUE;
2193 if (gamma0MotherLabel == -221) isTrueEtaDalitz = kTRUE;
2195 if (gamma1DalitzCand && gamma1MCLabel >=0 && gamma1MCLabel==gamma0MotherLabel){
2196 if (gamma1MotherLabel == -111) isTruePi0Dalitz = kTRUE;
2197 if (gamma1MotherLabel == -221) isTrueEtaDalitz = kTRUE;
2201 if(isTruePi0 || isTrueEta){// True Pion or Eta
2202 hESDTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2203 if (fDoMesonQA > 0){
2205 if ( Pi0Candidate->M() > 0.05 && Pi0Candidate->M() < 0.17){
2206 hESDTruePi0PtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2207 hESDTruePi0PtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
2208 hESDTruePi0PtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
2210 } else if (isTrueEta){
2211 if ( Pi0Candidate->M() > 0.45 && Pi0Candidate->M() < 0.65){
2212 hESDTrueEtaPtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2213 hESDTrueEtaPtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
2214 hESDTrueEtaPtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
2218 if(!(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MotherLabel))->IsPrimary())){ // Secondary Meson
2219 Int_t secMotherLabel = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetMother();
2220 Float_t weightedSec= 1;
2221 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, 0x0, fInputEvent) && static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
2222 weightedSec= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),secMotherLabel, 0x0, fInputEvent)/2.; //invariant mass is additive thus the weight for the daughters has to be devide by two for the K0s at a certain pt
2223 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
2225 hESDTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2227 if (secMotherLabel >-1){
2228 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
2230 hESDTrueSecondaryMotherFromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2231 if (fDoMesonQA > 0)hESDTrueK0sWithPi0DaughterMCPt[fiCut]
2232 ->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
2234 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==221){
2236 hESDTrueSecondaryMotherFromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2237 if (fDoMesonQA > 0)hESDTrueEtaWithPi0DaughterMCPt[fiCut]
2238 ->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
2240 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==3122){
2242 hESDTrueSecondaryMotherFromLambdaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2243 if (fDoMesonQA > 0)hESDTrueLambdaWithPi0DaughterMCPt[fiCut]
2244 ->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
2247 }else{ // Only primary pi0 for efficiency calculation
2248 Float_t weighted= 1;
2250 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, 0x0, fInputEvent)){
2251 if (static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt()>0.005){
2252 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, 0x0, fInputEvent);
2253 // cout << "rec \t " <<gamma1MotherLabel << "\t" << weighted << endl;
2256 hESDTruePrimaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2257 hESDTruePrimaryMotherW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2258 pESDTruePrimaryMotherWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2260 if (fDoMesonQA > 0){
2261 if(isTruePi0){ // Only primary pi0 for resolution
2262 hESDTruePrimaryPi0MCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
2263 (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
2266 if (isTrueEta){ // Only primary eta for resolution
2267 hESDTruePrimaryEtaMCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
2268 (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
2272 } else if(!isTruePi0 && !isTrueEta) { // Background
2273 if (fDoMesonQA > 0){
2274 if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
2275 hESDTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2277 } else { // No photon or without mother
2278 hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2281 if( isTruePi0Dalitz || isTrueEtaDalitz ){
2284 hESDTrueMotherDalitzInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2285 } else if (gamma0DalitzCand || gamma1DalitzCand){
2286 if (fDoMesonQA > 0)hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2292 //________________________________________________________________________
2293 void AliAnalysisTaskGammaConvV1::CalculateBackground(){
2295 Int_t zbin= fBGHandler[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
2298 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2299 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
2301 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
2304 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseRotationMethod()){
2306 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
2307 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2308 for(Int_t iCurrent2=iCurrent+1;iCurrent2<fGammaCandidates->GetEntries();iCurrent2++){
2309 for(Int_t nRandom=0;nRandom<((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents();nRandom++){
2310 AliAODConversionPhoton currentEventGoodV02 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent2));
2312 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->DoBGProbability()){
2313 AliAODConversionMother *backgroundCandidateProb = new AliAODConversionMother(¤tEventGoodV0,¤tEventGoodV02);
2314 Double_t massBGprob = backgroundCandidateProb->M();
2315 if(massBGprob>0.1 && massBGprob<0.14){
2316 if(fRandom.Rndm()>fBGHandler[fiCut]->GetBGProb(zbin,mbin)){
2317 delete backgroundCandidateProb;
2321 delete backgroundCandidateProb;
2322 backgroundCandidateProb = 0x0;
2325 RotateParticle(¤tEventGoodV02);
2326 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,¤tEventGoodV02);
2327 backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2328 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2329 ->MesonIsSelected(backgroundCandidate,kFALSE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift()))){
2330 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2331 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2332 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2334 delete backgroundCandidate;
2335 backgroundCandidate = 0x0;
2340 AliGammaConversionAODBGHandler::GammaConversionVertex *bgEventVertex = NULL;
2342 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2343 for(Int_t nEventsInBG=0;nEventsInBG<fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
2344 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
2345 if(fMoveParticleAccordingToVertex == kTRUE){
2346 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
2349 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
2350 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2351 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
2352 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
2353 if(fMoveParticleAccordingToVertex == kTRUE){
2354 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
2356 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->GetInPlaneOutOfPlaneCut() != 0){
2357 RotateParticleAccordingToEP(&previousGoodV0,bgEventVertex->fEP,fEventPlaneAngle);
2360 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
2361 backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2362 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2363 ->MesonIsSelected(backgroundCandidate,kFALSE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift()))){
2364 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2365 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2366 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2368 delete backgroundCandidate;
2369 backgroundCandidate = 0x0;
2375 for(Int_t nEventsInBG=0;nEventsInBG <fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
2376 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
2377 if(previousEventV0s){
2378 if(fMoveParticleAccordingToVertex == kTRUE){
2379 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
2381 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
2382 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2383 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
2385 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
2387 if(fMoveParticleAccordingToVertex == kTRUE){
2388 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
2390 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->GetInPlaneOutOfPlaneCut() != 0){
2391 RotateParticleAccordingToEP(&previousGoodV0,bgEventVertex->fEP,fEventPlaneAngle);
2395 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
2396 backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2397 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2398 ->MesonIsSelected(backgroundCandidate,kFALSE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift()))){
2399 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2400 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2401 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2403 delete backgroundCandidate;
2404 backgroundCandidate = 0x0;
2412 //________________________________________________________________________
2413 void AliAnalysisTaskGammaConvV1::CalculateBackgroundRP(){
2415 Int_t zbin= fBGHandlerRP[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
2417 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2418 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
2420 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
2425 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseRotationMethod()){
2426 // Correct for the number of rotations
2427 // BG is for rotation the same, except for factor NRotations
2428 Double_t weight=1./Double_t(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents());
2430 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries();firstGammaIndex++){
2432 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
2433 if (gamma0==NULL) continue;
2434 for(Int_t secondGammaIndex=firstGammaIndex+1;secondGammaIndex<fGammaCandidates->GetEntries();secondGammaIndex++){
2435 AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(secondGammaIndex));
2436 if (gamma1 == NULL) continue;
2437 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelected(gamma1,fInputEvent))continue;
2438 for(Int_t nRandom=0;nRandom<((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents();nRandom++){
2439 RotateParticle(gamma1);
2440 AliAODConversionMother backgroundCandidate(gamma0,gamma1);
2441 backgroundCandidate.CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2442 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(&backgroundCandidate,kFALSE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
2443 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate.M(),backgroundCandidate.Pt());
2444 Double_t sparesFill[4] = {backgroundCandidate.M(),backgroundCandidate.Pt(),(Double_t)zbin,(Double_t)mbin};
2445 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,weight);
2453 for(Int_t nEventsInBG=0;nEventsInBG <fBGHandlerRP[fiCut]->GetNBGEvents(fGammaCandidates,fInputEvent);nEventsInBG++){
2455 AliGammaConversionPhotonVector *previousEventGammas = fBGHandlerRP[fiCut]->GetBGGoodGammas(fGammaCandidates,fInputEvent,nEventsInBG);
2457 if(previousEventGammas){
2458 // test weighted background
2459 Double_t weight=1.0;
2460 // Correct for the number of eventmixing:
2461 // N gammas -> (N-1) + (N-2) +(N-3) ...+ (N-(N-1)) using sum formula sum(i)=N*(N-1)/2 -> N*(N-1)/2
2462 // real combinations (since you cannot combine a photon with its own)
2463 // but BG leads to N_{a}*N_{b} combinations
2464 weight*=0.5*(Double_t(fGammaCandidates->GetEntries()-1))/Double_t(previousEventGammas->size());
2466 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
2468 AliAODConversionPhoton *gamma0 = (AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2470 for(UInt_t iPrevious=0;iPrevious<previousEventGammas->size();iPrevious++){
2472 AliAODConversionPhoton *gamma1 = (AliAODConversionPhoton*)(previousEventGammas->at(iPrevious));
2474 AliAODConversionMother backgroundCandidate(gamma0,gamma1);
2475 backgroundCandidate.CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2476 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2477 ->MesonIsSelected(&backgroundCandidate,kFALSE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
2478 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate.M(),backgroundCandidate.Pt());
2479 Double_t sparesFill[4] = {backgroundCandidate.M(),backgroundCandidate.Pt(),(Double_t)zbin,(Double_t)mbin};
2480 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,weight);
2489 //________________________________________________________________________
2490 void AliAnalysisTaskGammaConvV1::RotateParticle(AliAODConversionPhoton *gamma){
2491 Int_t fNDegreesPMBackground= ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->NDegreesRotation();
2492 Double_t nRadiansPM = fNDegreesPMBackground*TMath::Pi()/180;
2493 Double_t rotationValue = fRandom.Rndm()*2*nRadiansPM + TMath::Pi()-nRadiansPM;
2494 gamma->RotateZ(rotationValue);
2497 //________________________________________________________________________
2498 void AliAnalysisTaskGammaConvV1::RotateParticleAccordingToEP(AliAODConversionPhoton *gamma, Double_t previousEventEP, Double_t thisEventEP){
2500 previousEventEP=previousEventEP+TMath::Pi();
2501 thisEventEP=thisEventEP+TMath::Pi();
2502 Double_t rotationValue= thisEventEP-previousEventEP;
2503 gamma->RotateZ(rotationValue);
2506 //________________________________________________________________________
2507 void AliAnalysisTaskGammaConvV1::MoveParticleAccordingToVertex(AliAODConversionPhoton* particle,const AliGammaConversionAODBGHandler::GammaConversionVertex *vertex){
2508 //see header file for documentation
2510 Double_t dx = vertex->fX - fInputEvent->GetPrimaryVertex()->GetX();
2511 Double_t dy = vertex->fY - fInputEvent->GetPrimaryVertex()->GetY();
2512 Double_t dz = vertex->fZ - fInputEvent->GetPrimaryVertex()->GetZ();
2514 Double_t movedPlace[3] = {particle->GetConversionX() - dx,particle->GetConversionY() - dy,particle->GetConversionZ() - dz};
2515 particle->SetConversionPoint(movedPlace);
2518 //________________________________________________________________________
2519 void AliAnalysisTaskGammaConvV1::UpdateEventByEventData(){
2520 //see header file for documentation
2521 if(fGammaCandidates->GetEntries() >0 ){
2522 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2523 fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fV0Reader->GetNumberOfPrimaryTracks(),fEventPlaneAngle);
2525 else{ // means we use #V0s for multiplicity
2526 fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fGammaCandidates->GetEntries(),fEventPlaneAngle);
2531 //________________________________________________________________________
2532 void AliAnalysisTaskGammaConvV1::FillPhotonCombinatorialBackgroundHist(AliAODConversionPhoton *TruePhotonCandidate, Int_t pdgCode[])
2534 // 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
2535 if(pdgCode[0]==11 && pdgCode[1]==11){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),0);}
2536 else if( (pdgCode[0]==11 && pdgCode[1]==211) || (pdgCode[0]==211 && pdgCode[1]==11) )
2537 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),1);}
2538 else if( (pdgCode[0]==11 && pdgCode[1]==321) || (pdgCode[0]==321 && pdgCode[1]==11) )
2539 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),2);}
2540 else if( (pdgCode[0]==11 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==11) )
2541 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),3);}
2542 else if( (pdgCode[0]==11 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==11) )
2543 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),4);}
2544 else if( pdgCode[0]==211 && pdgCode[1]==211 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),5);}
2545 else if( (pdgCode[0]==211 && pdgCode[1]==321) || (pdgCode[0]==321 && pdgCode[1]==211) )
2546 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),6);}
2547 else if( (pdgCode[0]==211 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==211) )
2548 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),7);}
2549 else if( (pdgCode[0]==211 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==211) )
2550 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),8);}
2551 else if( pdgCode[0]==321 && pdgCode[1]==321 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),9);}
2552 else if( (pdgCode[0]==321 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==321) )
2553 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),10);}
2554 else if( (pdgCode[0]==321 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==321) )
2555 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),11);}
2556 else if( pdgCode[0]==2212 && pdgCode[1]==2212 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),12);}
2557 else if( (pdgCode[0]==2212 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==2212) )
2558 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),13);}
2559 else if( pdgCode[0]==13 && pdgCode[1]==13 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),14);}
2560 else {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),15);}
2563 //________________________________________________________________________
2564 void AliAnalysisTaskGammaConvV1::RelabelAODPhotonCandidates(Bool_t mode){
2566 // Relabeling For AOD Event
2568 // MCLabel -> AODMCLabel
2571 fMCStackPos = new Int_t[fReaderGammas->GetEntries()];
2572 fMCStackNeg = new Int_t[fReaderGammas->GetEntries()];
2573 fESDArrayPos = new Int_t[fReaderGammas->GetEntries()];
2574 fESDArrayNeg = new Int_t[fReaderGammas->GetEntries()];
2577 for(Int_t iGamma = 0;iGamma<fReaderGammas->GetEntries();iGamma++){
2578 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(iGamma);
2579 if(!PhotonCandidate) continue;
2580 if(!mode){// Back to ESD Labels
2581 PhotonCandidate->SetMCLabelPositive(fMCStackPos[iGamma]);
2582 PhotonCandidate->SetMCLabelNegative(fMCStackNeg[iGamma]);
2583 PhotonCandidate->SetLabelPositive(fESDArrayPos[iGamma]);
2584 PhotonCandidate->SetLabelNegative(fESDArrayNeg[iGamma]);
2587 fMCStackPos[iGamma] = PhotonCandidate->GetMCLabelPositive();
2588 fMCStackNeg[iGamma] = PhotonCandidate->GetMCLabelNegative();
2589 fESDArrayPos[iGamma] = PhotonCandidate->GetTrackLabelPositive();
2590 fESDArrayNeg[iGamma] = PhotonCandidate->GetTrackLabelNegative();
2592 Bool_t AODLabelPos = kFALSE;
2593 Bool_t AODLabelNeg = kFALSE;
2595 for(Int_t i = 0; i<fInputEvent->GetNumberOfTracks();i++){
2596 AliAODTrack *tempDaughter = static_cast<AliAODTrack*>(fInputEvent->GetTrack(i));
2598 if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelPositive() ){
2599 PhotonCandidate->SetMCLabelPositive(abs(tempDaughter->GetLabel()));
2600 PhotonCandidate->SetLabelPositive(i);
2601 AODLabelPos = kTRUE;
2605 if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelNegative()){
2606 PhotonCandidate->SetMCLabelNegative(abs(tempDaughter->GetLabel()));
2607 PhotonCandidate->SetLabelNegative(i);
2608 AODLabelNeg = kTRUE;
2611 if(AODLabelNeg && AODLabelPos){
2615 if(!AODLabelPos || !AODLabelNeg){
2616 cout<<"WARNING!!! AOD TRACKS NOT FOUND FOR"<<endl;
2622 delete[] fMCStackPos;
2623 delete[] fMCStackNeg;
2624 delete[] fESDArrayPos;
2625 delete[] fESDArrayNeg;
2629 //________________________________________________________________________
2630 void AliAnalysisTaskGammaConvV1::SetLogBinningXTH2(TH2* histoRebin){
2631 TAxis *axisafter = histoRebin->GetXaxis();
2632 Int_t bins = axisafter->GetNbins();
2633 Double_t from = axisafter->GetXmin();
2634 Double_t to = axisafter->GetXmax();
2635 Double_t *newbins = new Double_t[bins+1];
2637 Double_t factor = TMath::Power(to/from, 1./bins);
2638 for(Int_t i=1; i<=bins; ++i) newbins[i] = factor * newbins[i-1];
2639 axisafter->Set(bins, newbins);
2643 //________________________________________________________________________
2644 void AliAnalysisTaskGammaConvV1::Terminate(const Option_t *)
2647 //fOutputContainer->Print(); // Will crash on GRID
2650 //________________________________________________________________________
2651 Int_t AliAnalysisTaskGammaConvV1::GetSourceClassification(Int_t daughter, Int_t pdgCode){
2653 if (daughter == 111) {
2654 if (abs(pdgCode) == 310) return 1; // k0s
2655 else if (abs(pdgCode) == 3122) return 2; // Lambda
2656 else if (abs(pdgCode) == 130) return 3; // K0L
2657 else if (abs(pdgCode) == 2212) return 4; // proton
2658 else if (abs(pdgCode) == 2112) return 5; // neutron
2659 else if (abs(pdgCode) == 211) return 6; // pion
2660 else if (abs(pdgCode) == 321) return 7; // kaon
2661 else if (abs(pdgCode) == 113 || abs(pdgCode) == 213 ) return 8; // rho 0,+,-
2662 else if (abs(pdgCode) == 3222 || abs(pdgCode) == 3212 || abs(pdgCode) == 3112 ) return 9; // Sigma
2663 else if (abs(pdgCode) == 2224 || abs(pdgCode) == 2214 || abs(pdgCode) == 2114 || abs(pdgCode) == 1114 ) return 10; // Delta
2664 else if (abs(pdgCode) == 313 || abs(pdgCode) == 323 ) return 11; // K*