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 ///////////////////////////////////////////////
31 #include "THnSparse.h"
34 #include "AliAnalysisTask.h"
35 #include "AliAnalysisManager.h"
36 #include "AliESDEvent.h"
37 #include "AliESDInputHandler.h"
38 #include "AliMCEventHandler.h"
39 #include "AliMCEvent.h"
40 #include "AliMCParticle.h"
41 #include "AliCentrality.h"
42 #include "AliESDVZERO.h"
43 #include "AliESDpid.h"
44 #include "AliAnalysisTaskGammaConvV1.h"
45 #include "AliVParticle.h"
46 #include "AliESDtrackCuts.h"
47 #include "AliKFVertex.h"
48 #include "AliV0ReaderV1.h"
49 #include "AliGenCocktailEventHeader.h"
50 #include "AliConversionAODBGHandlerRP.h"
51 #include "AliAODMCParticle.h"
52 #include "AliAODMCHeader.h"
54 ClassImp(AliAnalysisTaskGammaConvV1)
56 //________________________________________________________________________
57 AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(): AliAnalysisTaskSE(),
70 fTrueMotherRapList(NULL),
72 fHeaderNameList(NULL),
75 fGammaCandidates(NULL),
77 fConversionCuts(NULL),
80 hESDConvGammaPt(NULL),
82 hESDMotherInvMassPt(NULL),
83 sESDMotherInvMassPtZM(NULL),
84 sESDMotherInvMassPtY(NULL),
85 hESDMotherBackInvMassPt(NULL),
86 sESDMotherBackInvMassPtZM(NULL),
87 hESDMotherInvMassEalpha(NULL),
90 hMCDecayGammaPi0Pt(NULL),
91 hMCDecayGammaRhoPt(NULL),
92 hMCDecayGammaEtaPt(NULL),
93 hMCDecayGammaOmegaPt(NULL),
94 hMCDecayGammaEtapPt(NULL),
95 hMCDecayGammaPhiPt(NULL),
96 hMCDecayGammaSigmaPt(NULL),
99 hMCConvGammaEta(NULL),
100 hMCConvGammaRSPt(NULL),
101 hMCConvGammaRSR(NULL),
102 hMCConvGammaRSEta(NULL),
104 hMCPi0WOWeightPt(NULL),
111 hMCK0sWOWeightPt(NULL),
113 hESDTrueMotherInvMassPt(NULL),
114 hESDTruePrimaryMotherInvMassPt(NULL),
115 hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
116 pESDTruePrimaryMotherWeightsInvMassPt(NULL),
117 hESDTruePrimaryPi0MCPtResolPt(NULL),
118 hESDTruePrimaryEtaMCPtResolPt(NULL),
119 sESDTruePrimaryMotherInvMassPtY(NULL),
120 hESDTrueSecondaryMotherInvMassPt(NULL),
121 hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
122 hESDTrueK0sWithPi0DaughterMCPt(NULL),
123 hESDTrueSecondaryMotherFromEtaInvMassPt(NULL),
124 hESDTrueEtaWithPi0DaughterMCPt(NULL),
125 hESDTrueBckGGInvMassPt(NULL),
126 hESDTrueBckContInvMassPt(NULL),
127 hESDTrueMotherDalitzInvMassPt(NULL),
128 hESDTrueConvGammaPt(NULL),
129 hESDCombinatorialPt(NULL),
130 hESDTruePrimaryConvGammaPt(NULL),
131 hESDTruePrimaryConvGammaR(NULL),
132 hESDTruePrimaryConvGammaEta(NULL),
133 hESDTruePrimaryConvGammaESDPtMCPt(NULL),
134 hESDTruePrimaryConvGammaRSESDPtMCPt(NULL),
135 hESDTrueSecondaryConvGammaPt(NULL),
136 hESDTrueSecondaryConvGammaR(NULL),
137 hESDTrueSecondaryConvGammaFromXFromK0sPt(NULL),
139 hNGoodESDTracks(NULL),
140 hNGammaCandidates(NULL),
144 fnGammaCandidates(0),
155 fNumberOfESDTracks(0),
156 fMoveParticleAccordingToVertex(kTRUE),
158 fDoMesonAnalysis(kTRUE),
161 fIsFromMBHeader(kTRUE),
167 //________________________________________________________________________
168 AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(const char *name):
169 AliAnalysisTaskSE(name),
180 fMotherRapList(NULL),
182 fTrueMotherRapList(NULL),
184 fHeaderNameList(NULL),
187 fGammaCandidates(NULL),
189 fConversionCuts(NULL),
190 fMesonCutArray(NULL),
192 hESDConvGammaPt(NULL),
193 hESDConvGammaR(NULL),
194 hESDMotherInvMassPt(NULL),
195 sESDMotherInvMassPtZM(NULL),
196 sESDMotherInvMassPtY(NULL),
197 hESDMotherBackInvMassPt(NULL),
198 sESDMotherBackInvMassPtZM(NULL),
199 hESDMotherInvMassEalpha(NULL),
202 hMCDecayGammaPi0Pt(NULL),
203 hMCDecayGammaRhoPt(NULL),
204 hMCDecayGammaEtaPt(NULL),
205 hMCDecayGammaOmegaPt(NULL),
206 hMCDecayGammaEtapPt(NULL),
207 hMCDecayGammaPhiPt(NULL),
208 hMCDecayGammaSigmaPt(NULL),
209 hMCConvGammaPt(NULL),
211 hMCConvGammaEta(NULL),
212 hMCConvGammaRSPt(NULL),
213 hMCConvGammaRSR(NULL),
214 hMCConvGammaRSEta(NULL),
216 hMCPi0WOWeightPt(NULL),
223 hMCK0sWOWeightPt(NULL),
225 hESDTrueMotherInvMassPt(NULL),
226 hESDTruePrimaryMotherInvMassPt(NULL),
227 hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
228 pESDTruePrimaryMotherWeightsInvMassPt(NULL),
229 hESDTruePrimaryPi0MCPtResolPt(NULL),
230 hESDTruePrimaryEtaMCPtResolPt(NULL),
231 sESDTruePrimaryMotherInvMassPtY(NULL),
232 hESDTrueSecondaryMotherInvMassPt(NULL),
233 hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
234 hESDTrueK0sWithPi0DaughterMCPt(NULL),
235 hESDTrueSecondaryMotherFromEtaInvMassPt(NULL),
236 hESDTrueEtaWithPi0DaughterMCPt(NULL),
237 hESDTrueBckGGInvMassPt(NULL),
238 hESDTrueBckContInvMassPt(NULL),
239 hESDTrueMotherDalitzInvMassPt(NULL),
240 hESDTrueConvGammaPt(NULL),
241 hESDCombinatorialPt(NULL),
242 hESDTruePrimaryConvGammaPt(NULL),
243 hESDTruePrimaryConvGammaR(NULL),
244 hESDTruePrimaryConvGammaEta(NULL),
245 hESDTruePrimaryConvGammaESDPtMCPt(NULL),
246 hESDTruePrimaryConvGammaRSESDPtMCPt(NULL),
247 hESDTrueSecondaryConvGammaPt(NULL),
248 hESDTrueSecondaryConvGammaR(NULL),
249 hESDTrueSecondaryConvGammaFromXFromK0sPt(NULL),
251 hNGoodESDTracks(NULL),
252 hNGammaCandidates(NULL),
256 fnGammaCandidates(0),
267 fNumberOfESDTracks(0),
268 fMoveParticleAccordingToVertex(kTRUE),
270 fDoMesonAnalysis(kTRUE),
273 fIsFromMBHeader(kTRUE),
276 // Define output slots here
277 DefineOutput(1, TList::Class());
280 AliAnalysisTaskGammaConvV1::~AliAnalysisTaskGammaConvV1()
282 if(fGammaCandidates){
283 delete fGammaCandidates;
284 fGammaCandidates = 0x0;
291 delete[] fBGHandlerRP;
295 //___________________________________________________________
296 void AliAnalysisTaskGammaConvV1::InitBack(){
298 const Int_t nDim = 4;
299 Int_t nBins[nDim] = {800,250,7,4};
300 Double_t xMin[nDim] = {0,0, 0,0};
301 Double_t xMax[nDim] = {0.8,25,7,4};
303 sESDMotherInvMassPtZM = new THnSparseF*[fnCuts];
304 sESDMotherBackInvMassPtZM = new THnSparseF*[fnCuts];
306 fBGHandler = new AliGammaConversionAODBGHandler*[fnCuts];
307 fBGHandlerRP = new AliConversionAODBGHandlerRP*[fnCuts];
308 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
309 if (((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->DoBGCalculation()){
310 TString cutstring = ((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber();
311 TString cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
313 Int_t collisionSystem = atoi((TString)(((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber())(0,1));
314 Int_t centMin = atoi((TString)(((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber())(1,1));
315 Int_t centMax = atoi((TString)(((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber())(2,1));
317 if(collisionSystem == 1 || collisionSystem == 2 ||
318 collisionSystem == 5 || collisionSystem == 8 ||
319 collisionSystem == 9){
320 centMin = centMin*10;
321 centMax = centMax*10;
323 else if(collisionSystem == 3 || collisionSystem == 6){
327 else if(collisionSystem == 4 || collisionSystem == 7){
328 centMin = ((centMin*5)+45);
329 centMax = ((centMax*5)+45);
332 fBackList[iCut] = new TList();
333 fBackList[iCut]->SetName(Form("%s_%s Back histograms",cutstring.Data(),cutstringMeson.Data()));
334 fBackList[iCut]->SetOwner(kTRUE);
335 fCutFolder[iCut]->Add(fBackList[iCut]);
337 sESDMotherBackInvMassPtZM[iCut] = new THnSparseF("Back_Back_InvMass_Pt_z_m","Back_Back_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
338 fBackList[iCut]->Add(sESDMotherBackInvMassPtZM[iCut]);
340 fMotherList[iCut] = new TList();
341 fMotherList[iCut]->SetName(Form("%s_%s Mother histograms",cutstring.Data(),cutstringMeson.Data()));
342 fMotherList[iCut]->SetOwner(kTRUE);
343 fCutFolder[iCut]->Add(fMotherList[iCut]);
345 sESDMotherInvMassPtZM[iCut] = new THnSparseF("Back_Mother_InvMass_Pt_z_m","Back_Mother_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
346 fMotherList[iCut]->Add(sESDMotherInvMassPtZM[iCut]);
348 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->BackgroundHandlerType() == 0){
349 fBGHandler[iCut] = new AliGammaConversionAODBGHandler(
350 collisionSystem,centMin,centMax,
351 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents(),
352 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseTrackMultiplicity());
353 fBGHandlerRP[iCut] = NULL;
356 fBGHandlerRP[iCut] = new AliConversionAODBGHandlerRP(
357 ((AliConversionCuts*)fCutArray->At(fiCut))->IsHeavyIon(),
358 ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity(),
359 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents());
360 fBGHandler[iCut] = NULL;
365 //________________________________________________________________________
366 void AliAnalysisTaskGammaConvV1::UserCreateOutputObjects()
370 if(fOutputContainer != NULL){
371 delete fOutputContainer;
372 fOutputContainer = NULL;
374 if(fOutputContainer == NULL){
375 fOutputContainer = new TList();
376 fOutputContainer->SetOwner(kTRUE);
379 // Array of current cut's gammas
380 fGammaCandidates = new TList();
382 fCutFolder = new TList*[fnCuts];
383 fESDList = new TList*[fnCuts];
384 fBackList = new TList*[fnCuts];
385 fMotherList = new TList*[fnCuts];
386 hNEvents = new TH1I*[fnCuts];
387 hNGoodESDTracks = new TH1I*[fnCuts];
388 hNGammaCandidates = new TH1I*[fnCuts];
389 hNV0Tracks = new TH1I*[fnCuts];
390 hEtaShift = new TH1F*[fnCuts];
391 hESDConvGammaPt = new TH1F*[fnCuts];
394 hESDConvGammaR = new TH1F*[fnCuts];
396 const Int_t nDim = 3;
397 Int_t nBins[nDim] = {800,250,40};
398 Double_t xMin[nDim] = {0,0, -1};
399 Double_t xMax[nDim] = {0.8,25,1};
401 if(fDoMesonAnalysis){
402 hESDMotherInvMassPt = new TH2F*[fnCuts];
403 hESDMotherBackInvMassPt = new TH2F*[fnCuts];
404 hESDMotherInvMassEalpha = new TH2F*[fnCuts];
406 fMotherRapList = new TList*[fnCuts];
407 sESDMotherInvMassPtY = new THnSparseF*[fnCuts];
411 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
413 TString cutstring = ((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber();
414 TString cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
416 fCutFolder[iCut] = new TList();
417 fCutFolder[iCut]->SetName(Form("Cut Number %s_%s",cutstring.Data(),cutstringMeson.Data()));
418 fCutFolder[iCut]->SetOwner(kTRUE);
419 fOutputContainer->Add(fCutFolder[iCut]);
420 fESDList[iCut] = new TList();
421 fESDList[iCut]->SetName(Form("%s_%s ESD histograms",cutstring.Data(),cutstringMeson.Data()));
422 fESDList[iCut]->SetOwner(kTRUE);
423 fCutFolder[iCut]->Add(fESDList[iCut]);
425 hNEvents[iCut] = new TH1I("NEvents","NEvents",9,-0.5,8.5);
426 hNEvents[iCut]->GetXaxis()->SetBinLabel(1,"Accepted");
427 hNEvents[iCut]->GetXaxis()->SetBinLabel(2,"Centrality");
428 hNEvents[iCut]->GetXaxis()->SetBinLabel(3,"Missing MC");
429 if (((AliConversionCuts*)fCutArray->At(iCut))->IsSpecialTrigger() == 4 ){
430 TString TriggerNames = "Not Trigger: ";
431 TriggerNames = TriggerNames+ ( (AliConversionCuts*)fCutArray->At(iCut))->GetSpecialTriggerName();
432 hNEvents[iCut]->GetXaxis()->SetBinLabel(4,TriggerNames.Data());
434 hNEvents[iCut]->GetXaxis()->SetBinLabel(4,"Trigger");
436 hNEvents[iCut]->GetXaxis()->SetBinLabel(5,"Vertex Z");
437 hNEvents[iCut]->GetXaxis()->SetBinLabel(6,"Cont. Vertex");
438 hNEvents[iCut]->GetXaxis()->SetBinLabel(7,"Pile-Up");
439 hNEvents[iCut]->GetXaxis()->SetBinLabel(8,"no SDD");
440 hNEvents[iCut]->GetXaxis()->SetBinLabel(9,"no V0AND");
441 fESDList[iCut]->Add(hNEvents[iCut]);
442 if(fIsHeavyIon) hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",3000,0,3000);
443 else hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",200,0,200);
444 fESDList[iCut]->Add(hNGoodESDTracks[iCut]);
445 if(fIsHeavyIon) hNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",100,0,100);
446 else hNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",50,0,50);
447 fESDList[iCut]->Add(hNGammaCandidates[iCut]);
448 if(fIsHeavyIon) hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",30000,0,30000);
449 else hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",2000,0,2000);
450 fESDList[iCut]->Add(hNV0Tracks[iCut]);
451 hEtaShift[iCut] = new TH1F("Eta Shift","Eta Shift",1, -0.5,0.5);
452 fESDList[iCut]->Add(hEtaShift[iCut]);
453 hESDConvGammaPt[iCut] = new TH1F("ESD_ConvGamma_Pt","ESD_ConvGamma_Pt",250,0,25);
454 fESDList[iCut]->Add(hESDConvGammaPt[iCut]);
457 hESDConvGammaR[iCut] = new TH1F("ESD_ConvGamma_R","ESD_ConvGamma_R",800,0,200);
458 fESDList[iCut]->Add(hESDConvGammaR[iCut]);
461 if(fDoMesonAnalysis){
462 hESDMotherInvMassPt[iCut] = new TH2F("ESD_Mother_InvMass_Pt","ESD_Mother_InvMass_Pt",800,0,0.8,250,0,25);
463 fESDList[iCut]->Add(hESDMotherInvMassPt[iCut]);
464 hESDMotherBackInvMassPt[iCut] = new TH2F("ESD_Background_InvMass_Pt","ESD_Background_InvMass_Pt",800,0,0.8,250,0,25);
465 fESDList[iCut]->Add(hESDMotherBackInvMassPt[iCut]);
466 hESDMotherInvMassEalpha[iCut] = new TH2F("ESD_Mother_InvMass_vs_E_alpha","ESD_Mother_InvMass_vs_E_alpha",800,0,0.8,250,0,25);
467 fESDList[iCut]->Add(hESDMotherInvMassEalpha[iCut]);
469 fMotherRapList[iCut] = new TList();
470 fMotherRapList[iCut]->SetName(Form("%s_%s Mother Y histograms",cutstring.Data(),cutstringMeson.Data()));
471 fMotherRapList[iCut]->SetOwner(kTRUE);
472 fCutFolder[iCut]->Add(fMotherRapList[iCut]);
473 sESDMotherInvMassPtY[iCut] = new THnSparseF("Mother_InvMass_Pt_Y","Mother_InvMass_Pt_Y",nDim,nBins,xMin,xMax);
474 fMotherRapList[iCut]->Add(sESDMotherInvMassPtY[iCut]);
480 if(fDoMesonAnalysis){
481 InitBack(); // Init Background Handler
486 fMCList = new TList*[fnCuts];
488 fTrueList = new TList*[fnCuts];
489 // Selected Header List
490 fHeaderNameList = new TList*[fnCuts];
491 hMCHeaders = new TH1I*[fnCuts];
492 hMCAllGammaPt = new TH1F*[fnCuts];
493 hMCDecayGammaPi0Pt = new TH1F*[fnCuts];
494 hMCDecayGammaRhoPt = new TH1F*[fnCuts];
495 hMCDecayGammaEtaPt = new TH1F*[fnCuts];
496 hMCDecayGammaOmegaPt = new TH1F*[fnCuts];
497 hMCDecayGammaEtapPt = new TH1F*[fnCuts];
498 hMCDecayGammaPhiPt = new TH1F*[fnCuts];
499 hMCDecayGammaSigmaPt = new TH1F*[fnCuts];
500 hMCConvGammaPt = new TH1F*[fnCuts];
501 hMCConvGammaRSPt = new TH1F*[fnCuts];
502 hESDTrueConvGammaPt = new TH1F*[fnCuts];
504 hESDCombinatorialPt = new TH2F*[fnCuts];
505 hESDTruePrimaryConvGammaPt = new TH1F*[fnCuts];
506 hESDTruePrimaryConvGammaESDPtMCPt = new TH2F*[fnCuts];
507 hESDTruePrimaryConvGammaRSESDPtMCPt = new TH2F*[fnCuts];
508 hESDTrueSecondaryConvGammaPt = new TH1F*[fnCuts];
510 hESDTrueSecondaryConvGammaFromXFromK0sPt = new TH1F*[fnCuts];
513 hMCConvGammaR = new TH1F*[fnCuts];
514 hMCConvGammaEta = new TH1F*[fnCuts];
515 hMCConvGammaRSR = new TH1F*[fnCuts];
516 hMCConvGammaRSEta = new TH1F*[fnCuts];
517 hESDTruePrimaryConvGammaR = new TH1F*[fnCuts];
518 hESDTruePrimaryConvGammaEta = new TH1F*[fnCuts];
519 hESDTrueSecondaryConvGammaR = new TH1F*[fnCuts];
522 if(fDoMesonAnalysis){
523 hMCPi0Pt = new TH1F*[fnCuts];
524 hMCPi0WOWeightPt = new TH1F*[fnCuts];
525 hMCEtaPt = new TH1F*[fnCuts];
526 hMCPi0InAccPt = new TH1F*[fnCuts];
527 hMCEtaInAccPt = new TH1F*[fnCuts];
529 hESDTrueMotherInvMassPt = new TH2F*[fnCuts];
530 hESDTruePrimaryMotherInvMassPt = new TH2F*[fnCuts];
531 hESDTruePrimaryMotherW0WeightingInvMassPt = new TH2F*[fnCuts];
532 pESDTruePrimaryMotherWeightsInvMassPt = new TProfile2D*[fnCuts];
533 hESDTrueSecondaryMotherInvMassPt = new TH2F*[fnCuts];
534 hESDTrueSecondaryMotherFromK0sInvMassPt = new TH2F*[fnCuts];
535 hESDTrueSecondaryMotherFromEtaInvMassPt = new TH2F*[fnCuts];
537 hMCPi0PtY = new TH2F*[fnCuts];
538 hMCEtaPtY = new TH2F*[fnCuts];
539 hMCK0sPt = new TH1F*[fnCuts];
540 hMCK0sWOWeightPt = new TH1F*[fnCuts];
541 hMCK0sPtY = new TH2F*[fnCuts];
542 hESDTruePrimaryPi0MCPtResolPt = new TH2F*[fnCuts];
543 hESDTruePrimaryEtaMCPtResolPt = new TH2F*[fnCuts];
544 hESDTrueK0sWithPi0DaughterMCPt = new TH1F*[fnCuts];
545 hESDTrueEtaWithPi0DaughterMCPt = new TH1F*[fnCuts];
546 hESDTrueBckGGInvMassPt = new TH2F*[fnCuts];
547 hESDTrueBckContInvMassPt = new TH2F*[fnCuts];
548 hESDTrueMotherDalitzInvMassPt = new TH2F*[fnCuts];
549 fTrueMotherRapList = new TList*[fnCuts];
550 sESDTruePrimaryMotherInvMassPtY = new THnSparseF*[fnCuts];
554 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
555 TString cutstring = ((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber();
556 TString cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
558 fMCList[iCut] = new TList();
559 fMCList[iCut]->SetName(Form("%s_%s MC histograms",cutstring.Data(),cutstringMeson.Data()));
560 fMCList[iCut]->SetOwner(kTRUE);
561 fCutFolder[iCut]->Add(fMCList[iCut]);
562 hMCHeaders[iCut] = new TH1I("MC_Headers","MC_Headers",20,0,20);
563 fMCList[iCut]->Add(hMCHeaders[iCut]);
564 hMCAllGammaPt[iCut] = new TH1F("MC_AllGamma_Pt","MC_AllGamma_Pt",250,0,25);
565 fMCList[iCut]->Add(hMCAllGammaPt[iCut]);
566 hMCDecayGammaPi0Pt[iCut] = new TH1F("MC_DecayGammaPi0_Pt","MC_DecayGammaPi0_Pt",250,0,25);
567 fMCList[iCut]->Add(hMCDecayGammaPi0Pt[iCut]);
568 hMCDecayGammaRhoPt[iCut] = new TH1F("MC_DecayGammaRho_Pt","MC_DecayGammaRho_Pt",250,0,25);
569 fMCList[iCut]->Add(hMCDecayGammaRhoPt[iCut]);
570 hMCDecayGammaEtaPt[iCut] = new TH1F("MC_DecayGammaEta_Pt","MC_DecayGammaEta_Pt",250,0,25);
571 fMCList[iCut]->Add(hMCDecayGammaEtaPt[iCut]);
572 hMCDecayGammaOmegaPt[iCut] = new TH1F("MC_DecayGammaOmega_Pt","MC_DecayGammaOmmega_Pt",250,0,25);
573 fMCList[iCut]->Add(hMCDecayGammaOmegaPt[iCut]);
574 hMCDecayGammaEtapPt[iCut] = new TH1F("MC_DecayGammaEtap_Pt","MC_DecayGammaEtap_Pt",250,0,25);
575 fMCList[iCut]->Add(hMCDecayGammaEtapPt[iCut]);
576 hMCDecayGammaPhiPt[iCut] = new TH1F("MC_DecayGammaPhi_Pt","MC_DecayGammaPhi_Pt",250,0,25);
577 fMCList[iCut]->Add(hMCDecayGammaPhiPt[iCut]);
578 hMCDecayGammaSigmaPt[iCut] = new TH1F("MC_DecayGammaSigma_Pt","MC_DecayGammaSigma_Pt",250,0,25);
579 fMCList[iCut]->Add(hMCDecayGammaSigmaPt[iCut]);
580 hMCConvGammaPt[iCut] = new TH1F("MC_ConvGamma_Pt","MC_ConvGamma_Pt",250,0,25);
581 fMCList[iCut]->Add(hMCConvGammaPt[iCut]);
582 hMCConvGammaRSPt[iCut] = new TH1F("MC_ConvGamma_RS_Pt","MC_ConvGamma_RS_Pt",250,0,25);
583 fMCList[iCut]->Add(hMCConvGammaRSPt[iCut]);
586 hMCConvGammaR[iCut] = new TH1F("MC_ConvGamma_R","MC_ConvGamma_R",800,0,200);
587 fMCList[iCut]->Add(hMCConvGammaR[iCut]);
588 hMCConvGammaEta[iCut] = new TH1F("MC_ConvGamma_Eta","MC_ConvGamma_Eta",100,-4,4);
589 fMCList[iCut]->Add(hMCConvGammaEta[iCut]);
590 hMCConvGammaRSR[iCut] = new TH1F("MC_ConvGamma_RS_R","MC_ConvGamma_RS_R",800,0,200);
591 fMCList[iCut]->Add(hMCConvGammaRSR[iCut]);
592 hMCConvGammaRSEta[iCut] = new TH1F("MC_ConvGamma_RS_Eta","MC_ConvGamma_RS_Eta",100,-4,4);
593 fMCList[iCut]->Add(hMCConvGammaRSEta[iCut]);
596 if(fDoMesonAnalysis){
597 hMCPi0Pt[iCut] = new TH1F("MC_Pi0_Pt","MC_Pi0_Pt",250,0,25);
598 hMCPi0Pt[iCut]->Sumw2();
599 fMCList[iCut]->Add(hMCPi0Pt[iCut]);
600 hMCPi0WOWeightPt[iCut] = new TH1F("MC_Pi0_WOWeights_Pt","MC_Pi0_WOWeights_Pt",250,0,25);
601 hMCPi0WOWeightPt[iCut]->Sumw2();
602 fMCList[iCut]->Add(hMCPi0WOWeightPt[iCut]);
604 hMCEtaPt[iCut] = new TH1F("MC_Eta_Pt","MC_Eta_Pt",250,0,25);
605 hMCEtaPt[iCut]->Sumw2();
606 fMCList[iCut]->Add(hMCEtaPt[iCut]);
607 hMCPi0InAccPt[iCut] = new TH1F("MC_Pi0InAcc_Pt","MC_Pi0InAcc_Pt",250,0,25);
608 hMCPi0InAccPt[iCut]->Sumw2();
609 fMCList[iCut]->Add(hMCPi0InAccPt[iCut]);
610 hMCEtaInAccPt[iCut] = new TH1F("MC_EtaInAcc_Pt","MC_EtaInAcc_Pt",250,0,25);
611 hMCEtaInAccPt[iCut]->Sumw2();
612 fMCList[iCut]->Add(hMCEtaInAccPt[iCut]);
614 hMCPi0PtY[iCut] = new TH2F("MC_Pi0_Pt_Y","MC_Pi0_Pt_Y",250,0,25,20,-1,1);
615 hMCPi0PtY[iCut]->Sumw2();
616 fMCList[iCut]->Add(hMCPi0PtY[iCut]);
617 hMCEtaPtY[iCut] = new TH2F("MC_Eta_Pt_Y","MC_Eta_Pt_Y",250,0,25,20,-1,1);
618 hMCEtaPtY[iCut]->Sumw2();
619 fMCList[iCut]->Add(hMCEtaPtY[iCut]);
620 hMCK0sPt[iCut] = new TH1F("MC_K0s_Pt","MC_K0s_Pt",250,0,25);
621 hMCK0sPt[iCut]->Sumw2();
622 fMCList[iCut]->Add(hMCK0sPt[iCut]);
623 hMCK0sWOWeightPt[iCut] = new TH1F("MC_K0s_WOWeights_Pt","MC_K0s_WOWeights_Pt",250,0,25);
624 hMCK0sWOWeightPt[iCut]->Sumw2();
625 fMCList[iCut]->Add(hMCK0sWOWeightPt[iCut]);
626 hMCK0sPtY[iCut] = new TH2F("MC_K0s_Pt_Y","MC_K0s_Pt_Y",250,0,25,20,-1,1);
627 hMCK0sPtY[iCut]->Sumw2();
628 fMCList[iCut]->Add(hMCK0sPtY[iCut]);
633 fTrueList[iCut] = new TList();
634 fTrueList[iCut]->SetName(Form("%s_%s True histograms",cutstring.Data(),cutstringMeson.Data()));
635 fTrueList[iCut]->SetOwner(kTRUE);
636 fCutFolder[iCut]->Add(fTrueList[iCut]);
638 hESDTrueConvGammaPt[iCut] = new TH1F("ESD_TrueConvGamma_Pt","ESD_TrueConvGamma_Pt",250,0,25);
639 fTrueList[iCut]->Add(hESDTrueConvGammaPt[iCut]);
641 hESDCombinatorialPt[iCut] = new TH2F("ESD_TrueCombinatorial_Pt","ESD_TrueCombinatorial_Pt",250,0,25,16,-0.5,15.5);
642 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 1,"Elec+Elec");
643 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 2,"Elec+Pion");
644 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 3,"Elec+Kaon");
645 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 4,"Elec+Proton");
646 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 5,"Elec+Muon");
647 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 6,"Pion+Pion");
648 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 7,"Pion+Kaon");
649 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 8,"Pion+Proton");
650 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 9,"Pion+Muon");
651 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(10,"Kaon+Kaon");
652 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(11,"Kaon+Proton");
653 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(12,"Kaon+Muon");
654 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(13,"Proton+Proton");
655 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(14,"Proton+Muon");
656 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(15,"Muon+Muon");
657 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(16,"Rest");
658 fTrueList[iCut]->Add(hESDCombinatorialPt[iCut]);
659 hESDTruePrimaryConvGammaPt[iCut] = new TH1F("ESD_TruePrimaryConvGamma_Pt","ESD_TruePrimaryConvGamma_Pt",250,0,25);
660 fTrueList[iCut]->Add(hESDTruePrimaryConvGammaPt[iCut]);
661 hESDTrueSecondaryConvGammaPt[iCut] = new TH1F("ESD_TrueSecondaryConvGamma_Pt","ESD_TrueSecondaryConvGamma_Pt",250,0,25);
662 fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaPt[iCut]);
664 hESDTrueSecondaryConvGammaFromXFromK0sPt[iCut]
665 = new TH1F("ESD_TrueSecondaryConvGammaFromXFromK0s_Pt", "ESD_TrueSecondaryConvGammaFromXFromK0s_Pt",250,0,25);
666 fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaFromXFromK0sPt[iCut]);
667 hESDTruePrimaryConvGammaESDPtMCPt[iCut] = new TH2F("ESD_TruePrimaryConvGammaESD_PtMCPt", "ESD_TruePrimaryConvGammaESD_PtMCPt",250,0,25,250,0,25);
668 fTrueList[iCut]->Add(hESDTruePrimaryConvGammaESDPtMCPt[iCut]);
669 hESDTruePrimaryConvGammaRSESDPtMCPt[iCut]
670 = new TH2F("ESD_TruePrimaryConvGammaESD_RS_PtMCPt", "ESD_TruePrimaryConvGammaESD_RS_PtMCPt",250,0,25,250,0,25);
671 fTrueList[iCut]->Add(hESDTruePrimaryConvGammaRSESDPtMCPt[iCut]);
674 hESDTruePrimaryConvGammaR[iCut] = new TH1F("ESD_TruePrimaryConvGamma_R","ESD_TruePrimaryConvGamma_R",800,0,200);
675 fTrueList[iCut]->Add(hESDTruePrimaryConvGammaR[iCut]);
676 hESDTrueSecondaryConvGammaR[iCut] = new TH1F("ESD_TrueSecondaryConvGamma_R","ESD_TrueSecondaryConvGamma_R",800,0,200);
677 fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaR[iCut]);
678 hESDTruePrimaryConvGammaEta[iCut] = new TH1F("ESD_TruePrimaryConvGamma_Eta","ESD_TruePrimaryConvGamma_Eta",100,-4,4);
679 fTrueList[iCut]->Add(hESDTruePrimaryConvGammaEta[iCut]);
682 if(fDoMesonAnalysis){
683 hESDTrueMotherInvMassPt[iCut] = new TH2F("ESD_TrueMother_InvMass_Pt","ESD_TrueMother_InvMass_Pt",800,0,0.8,250,0,25);
684 fTrueList[iCut]->Add(hESDTrueMotherInvMassPt[iCut]);
685 hESDTruePrimaryMotherInvMassPt[iCut]
686 = new TH2F("ESD_TruePrimaryMother_InvMass_Pt", "ESD_TruePrimaryMother_InvMass_Pt", 800,0,0.8,250,0,25);
687 hESDTruePrimaryMotherInvMassPt[iCut]->Sumw2();
688 fTrueList[iCut]->Add(hESDTruePrimaryMotherInvMassPt[iCut]);
689 hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]
690 = new TH2F("ESD_TruePrimaryMotherW0Weights_InvMass_Pt", "ESD_TruePrimaryMotherW0Weights_InvMass_Pt", 800,0,0.8,250,0,25);
691 hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]->Sumw2();
692 fTrueList[iCut]->Add(hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]);
693 pESDTruePrimaryMotherWeightsInvMassPt[iCut]
694 = new TProfile2D("ESD_TruePrimaryMotherWeights_InvMass_Pt", "ESD_TruePrimaryMotherWeights_InvMass_Pt", 800,0,0.8,250,0,25);
695 pESDTruePrimaryMotherWeightsInvMassPt[iCut]->Sumw2();
696 fTrueList[iCut]->Add(pESDTruePrimaryMotherWeightsInvMassPt[iCut]);
697 hESDTrueSecondaryMotherInvMassPt[iCut]
698 = new TH2F("ESD_TrueSecondaryMother_InvMass_Pt", "ESD_TrueSecondaryMother_InvMass_Pt", 800,0,0.8,250,0,25);
699 hESDTrueSecondaryMotherInvMassPt[iCut]->Sumw2();
700 fTrueList[iCut]->Add(hESDTrueSecondaryMotherInvMassPt[iCut]);
701 hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]
702 = new TH2F("ESD_TrueSecondaryMotherFromK0s_InvMass_Pt","ESD_TrueSecondaryMotherFromK0s_InvMass_Pt",800,0,0.8,250,0,25);
703 hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]->Sumw2();
704 fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]);
705 hESDTrueSecondaryMotherFromEtaInvMassPt[iCut]
706 = new TH2F("ESD_TrueSecondaryMotherFromEta_InvMass_Pt","ESD_TrueSecondaryMotherFromEta_InvMass_Pt",800,0,0.8,250,0,25);
707 fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromEtaInvMassPt[iCut]);
710 hESDTruePrimaryPi0MCPtResolPt[iCut] = new TH2F("ESD_TruePrimaryPi0_MCPt_ResolPt","ESD_TruePrimaryPi0_ResolPt_MCPt",500,0,25,1000,-1.,1.);
711 hESDTruePrimaryPi0MCPtResolPt[iCut]->Sumw2();
712 fTrueList[iCut]->Add(hESDTruePrimaryPi0MCPtResolPt[iCut]);
713 hESDTruePrimaryEtaMCPtResolPt[iCut] = new TH2F("ESD_TruePrimaryEta_MCPt_ResolPt","ESD_TruePrimaryEta_ResolPt_MCPt",500,0,25,1000,-1.,1.);
714 hESDTruePrimaryEtaMCPtResolPt[iCut]->Sumw2();
715 fTrueList[iCut]->Add(hESDTruePrimaryEtaMCPtResolPt[iCut]);
716 hESDTrueBckGGInvMassPt[iCut] = new TH2F("ESD_TrueBckGG_InvMass_Pt","ESD_TrueBckGG_InvMass_Pt",800,0,0.8,250,0,25);
717 fTrueList[iCut]->Add(hESDTrueBckGGInvMassPt[iCut]);
718 hESDTrueBckContInvMassPt[iCut] = new TH2F("ESD_TrueBckCont_InvMass_Pt","ESD_TrueBckCont_InvMass_Pt",800,0,0.8,250,0,25);
719 fTrueList[iCut]->Add(hESDTrueBckContInvMassPt[iCut]);
720 hESDTrueMotherDalitzInvMassPt[iCut] = new TH2F("ESD_TrueDalitz_InvMass_Pt","ESD_TrueDalitz_InvMass_Pt",800,0,0.8,250,0,25);
721 fTrueList[iCut]->Add(hESDTrueMotherDalitzInvMassPt[iCut]);
722 hESDTrueK0sWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueK0sWithPi0Daughter_MCPt","ESD_TrueK0sWithPi0Daughter_MCPt",250,0,25);
723 fTrueList[iCut]->Add(hESDTrueK0sWithPi0DaughterMCPt[iCut]);
724 hESDTrueEtaWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueEtaWithPi0Daughter_MCPt","ESD_TrueEtaWithPi0Daughter_MCPt",250,0,25);
725 fTrueList[iCut]->Add(hESDTrueEtaWithPi0DaughterMCPt[iCut]);
727 fTrueMotherRapList[iCut] = new TList();
728 fTrueMotherRapList[iCut]->SetName(Form("%s_%s True Mother Y histograms",cutstring.Data(),cutstringMeson.Data()));
729 fTrueMotherRapList[iCut]->SetOwner(kTRUE);
730 fCutFolder[iCut]->Add(fTrueMotherRapList[iCut]);
731 sESDTruePrimaryMotherInvMassPtY[iCut] = new THnSparseF("TruePrimaryMother_InvMass_Pt_Y","TruePrimaryMother_InvMass_Pt_Y",nDim,nBins,xMin,xMax);
732 fTrueMotherRapList[iCut]->Add(sESDTruePrimaryMotherInvMassPtY[iCut]);
739 fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
740 if(!fV0Reader){printf("Error: No V0 Reader");return;} // GetV0Reader
743 if((AliConversionCuts*)fV0Reader->GetConversionCuts())
744 if(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms())
745 fOutputContainer->Add(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms());
747 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
748 if(!((AliConversionCuts*)fCutArray->At(iCut))) continue;
749 if(((AliConversionCuts*)fCutArray->At(iCut))->GetCutHistograms()){
750 fCutFolder[iCut]->Add(((AliConversionCuts*)fCutArray->At(iCut))->GetCutHistograms());
752 if(!((AliConversionMesonCuts*)fMesonCutArray->At(iCut))) continue;
753 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms()){
754 fCutFolder[iCut]->Add(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms());
758 PostData(1, fOutputContainer);
760 //_____________________________________________________________________________
761 Bool_t AliAnalysisTaskGammaConvV1::Notify()
763 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
764 if(!((AliConversionCuts*)fCutArray->At(iCut))->GetDoEtaShift()){
765 hEtaShift[iCut]->Fill(0.,0.);
766 continue; // No Eta Shift requested, continue
769 if(((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift() == 0.0){ // Eta Shift requested but not set, get shift automatically
770 ((AliConversionCuts*)fCutArray->At(iCut))->GetCorrectEtaShiftFromPeriod(fV0Reader->GetPeriodName());
771 hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift()));
772 // hEtaShift[iCut]->Fill(0);
773 ((AliConversionCuts*)fCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
777 printf(" Gamma Conversion Task %s :: Eta Shift Manually Set to %f \n\n",
778 (((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber()).Data(),((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift());
779 hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift()));
780 // hEtaShift[iCut]->Fill(-0.5);
781 ((AliConversionCuts*)fCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
787 //_____________________________________________________________________________
788 void AliAnalysisTaskGammaConvV1::UserExec(Option_t *)
791 // Called for each event
793 Int_t eventQuality = ((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetEventQuality();
794 if(eventQuality == 2 || eventQuality == 3){// Event Not Accepted due to MC event missing or wrong trigger for V0ReaderV1
795 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
796 hNEvents[iCut]->Fill(eventQuality);
801 if(fIsMC) fMCEvent = MCEvent();
802 fInputEvent = InputEvent();
804 if(fMCEvent && fInputEvent->IsA()==AliESDEvent::Class()){
805 fMCStack = fMCEvent->Stack();
808 fReaderGammas = fV0Reader->GetReconstructedGammas(); // Gammas from default Cut
809 CountTracks(); // Estimate Event Multiplicity
811 // ------------------- BeginEvent ----------------------------
813 if(fMCEvent && fInputEvent->IsA()==AliAODEvent::Class() && !(fV0Reader->AreAODsRelabeled())){
814 RelabelAODPhotonCandidates(kTRUE); // In case of AODMC relabeling MC
815 fV0Reader->RelabelAODs(kTRUE);
817 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
820 Int_t eventNotAccepted =
821 ((AliConversionCuts*)fCutArray->At(iCut))
822 ->IsEventAcceptedByConversionCut(fV0Reader->GetConversionCuts(),fInputEvent,fMCEvent,fIsHeavyIon);
823 if(eventNotAccepted){
824 // cout << "event rejected due to wrong trigger: " <<eventNotAccepted << endl;
825 hNEvents[iCut]->Fill(eventNotAccepted); // Check Centrality, PileUp, SDD and V0AND --> Not Accepted => eventQuality = 1
829 if(eventQuality != 0){// Event Not Accepted
830 // cout << "event rejected due to: " <<eventQuality << endl;
831 hNEvents[iCut]->Fill(eventQuality);
835 hNEvents[iCut]->Fill(eventQuality); // Should be 0 here
836 hNGoodESDTracks[iCut]->Fill(fNumberOfESDTracks);
837 if(((AliConversionCuts*)fCutArray->At(iCut))->IsHeavyIon() == 2) hNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A());
838 else hNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A()+fInputEvent->GetVZEROData()->GetMTotV0C());
841 // Process MC Particle
842 if(((AliConversionCuts*)fCutArray->At(iCut))->GetSignalRejection() != 0){
843 if(fInputEvent->IsA()==AliESDEvent::Class()){
844 ((AliConversionCuts*)fCutArray->At(iCut))->GetNotRejectedParticles(((AliConversionCuts*)fCutArray->At(iCut))->GetSignalRejection(),
845 ((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader(),
848 else if(fInputEvent->IsA()==AliAODEvent::Class()){
849 ((AliConversionCuts*)fCutArray->At(iCut))->GetNotRejectedParticles(((AliConversionCuts*)fCutArray->At(iCut))->GetSignalRejection(),
850 ((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader(),
854 for(Int_t i = 0;i<(((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader())->GetEntries();i++){
855 TString nameBin= hMCHeaders[iCut]->GetXaxis()->GetBinLabel(i+1);
856 if (nameBin.CompareTo("")== 0){
857 TString nameHeader = ((TObjString*)((TList*)((AliConversionCuts*)fCutArray->At(iCut))
858 ->GetAcceptedHeader())->At(i))->GetString();
859 hMCHeaders[iCut]->GetXaxis()->SetBinLabel(i+1,nameHeader.Data());
866 if(fInputEvent->IsA()==AliESDEvent::Class())
867 ProcessMCParticles();
868 if(fInputEvent->IsA()==AliAODEvent::Class())
869 ProcessAODMCParticles();
872 ProcessPhotonCandidates(); // Process this cuts gammas
874 hNGammaCandidates[iCut]->Fill(fGammaCandidates->GetEntries());
875 if(fDoMesonAnalysis){ // Meson Analysis
876 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseMCPSmearing() && fMCEvent){
877 fUnsmearedPx = new Double_t[fGammaCandidates->GetEntries()]; // Store unsmeared Momenta
878 fUnsmearedPy = new Double_t[fGammaCandidates->GetEntries()];
879 fUnsmearedPz = new Double_t[fGammaCandidates->GetEntries()];
880 fUnsmearedE = new Double_t[fGammaCandidates->GetEntries()];
882 for(Int_t gamma=0;gamma<fGammaCandidates->GetEntries();gamma++){ // Smear the AODPhotons in MC
883 fUnsmearedPx[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Px();
884 fUnsmearedPy[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Py();
885 fUnsmearedPz[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Pz();
886 fUnsmearedE[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->E();
887 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->SmearParticle(dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(gamma)));
891 CalculatePi0Candidates(); // Combine Gammas
892 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->DoBGCalculation()){
893 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->BackgroundHandlerType() == 0){
894 CalculateBackground(); // Combinatorial Background
895 UpdateEventByEventData(); // Store Event for mixed Events
898 CalculateBackgroundRP(); // Combinatorial Background
899 fBGHandlerRP[iCut]->AddEvent(fGammaCandidates,fInputEvent); // Store Event for mixed Events
902 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseMCPSmearing() && fMCEvent){
903 for(Int_t gamma=0;gamma<fGammaCandidates->GetEntries();gamma++){ // Smear the AODPhotons in MC
904 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPx(fUnsmearedPx[gamma]); // Reset Unsmeared Momenta
905 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPy(fUnsmearedPy[gamma]);
906 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPz(fUnsmearedPz[gamma]);
907 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetE(fUnsmearedE[gamma]);
909 delete[] fUnsmearedPx; fUnsmearedPx = 0x0;
910 delete[] fUnsmearedPy; fUnsmearedPy = 0x0;
911 delete[] fUnsmearedPz; fUnsmearedPz = 0x0;
912 delete[] fUnsmearedE; fUnsmearedE = 0x0;
915 fGammaCandidates->Clear(); // delete this cuts good gammas
918 if(fMCEvent && fInputEvent->IsA()==AliAODEvent::Class() && !(fV0Reader->AreAODsRelabeled())){
919 RelabelAODPhotonCandidates(kFALSE); // Back to ESDMC Label
920 fV0Reader->RelabelAODs(kFALSE);
923 PostData(1, fOutputContainer);
925 //________________________________________________________________________
926 void AliAnalysisTaskGammaConvV1::ProcessPhotonCandidates()
929 TList *GammaCandidatesStepOne = new TList();
930 TList *GammaCandidatesStepTwo = new TList();
931 // Loop over Photon Candidates allocated by ReaderV1
932 for(Int_t i = 0; i < fReaderGammas->GetEntriesFast(); i++){
933 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(i);
934 if(!PhotonCandidate) continue;
935 fIsFromMBHeader = kTRUE;
936 if(fMCEvent && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
937 Int_t isPosFromMBHeader
938 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
939 if(isPosFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
940 Int_t isNegFromMBHeader
941 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
942 if(isNegFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
944 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
947 if(!((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelected(PhotonCandidate,fInputEvent)) continue;
948 if(!((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut() &&
949 !((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){
950 fGammaCandidates->Add(PhotonCandidate); // if no second loop is required add to events good gammas
953 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
954 if (fDoPhotonQA)hESDConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
957 if(fInputEvent->IsA()==AliESDEvent::Class())
958 ProcessTruePhotonCandidates(PhotonCandidate);
959 if(fInputEvent->IsA()==AliAODEvent::Class())
960 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
963 else if(((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut()){ // if Shared Electron cut is enabled, Fill array, add to step one
964 ((AliConversionCuts*)fCutArray->At(fiCut))->FillElectonLabelArray(PhotonCandidate,nV0);
966 GammaCandidatesStepOne->Add(PhotonCandidate);
968 else if(!((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut() &&
969 ((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){ // shared electron is disabled, step one not needed -> step two
970 GammaCandidatesStepTwo->Add(PhotonCandidate);
973 if(((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut()){
974 for(Int_t i = 0;i<GammaCandidatesStepOne->GetEntries();i++){
975 AliAODConversionPhoton *PhotonCandidate= (AliAODConversionPhoton*) GammaCandidatesStepOne->At(i);
976 if(!PhotonCandidate) continue;
977 fIsFromMBHeader = kTRUE;
978 if(fMCStack && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
979 Int_t isPosFromMBHeader
980 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
981 Int_t isNegFromMBHeader
982 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
983 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
985 if(!((AliConversionCuts*)fCutArray->At(fiCut))->RejectSharedElectronV0s(PhotonCandidate,i,GammaCandidatesStepOne->GetEntries())) continue;
986 if(!((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){ // To Colse v0s cut diabled, step two not needed
987 fGammaCandidates->Add(PhotonCandidate);
989 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
990 if (fDoPhotonQA)hESDConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
994 if(fInputEvent->IsA()==AliESDEvent::Class())
995 ProcessTruePhotonCandidates(PhotonCandidate);
996 if(fInputEvent->IsA()==AliAODEvent::Class())
997 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
999 else GammaCandidatesStepTwo->Add(PhotonCandidate); // Close v0s cut enabled -> add to list two
1002 if(((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){
1003 for(Int_t i = 0;i<GammaCandidatesStepTwo->GetEntries();i++){
1004 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) GammaCandidatesStepTwo->At(i);
1005 if(!PhotonCandidate) continue;
1006 fIsFromMBHeader = kTRUE;
1007 if(fMCStack && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
1008 Int_t isPosFromMBHeader
1009 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1010 Int_t isNegFromMBHeader
1011 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
1012 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1014 if(!((AliConversionCuts*)fCutArray->At(fiCut))->RejectToCloseV0s(PhotonCandidate,GammaCandidatesStepTwo,i)) continue;
1015 fGammaCandidates->Add(PhotonCandidate); // Add gamma to current cut TList
1016 if(fIsFromMBHeader){
1017 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1018 if (fDoPhotonQA)hESDConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
1021 if(fInputEvent->IsA()==AliESDEvent::Class())
1022 ProcessTruePhotonCandidates(PhotonCandidate);
1023 if(fInputEvent->IsA()==AliAODEvent::Class())
1024 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
1029 delete GammaCandidatesStepOne;
1030 GammaCandidatesStepOne = 0x0;
1031 delete GammaCandidatesStepTwo;
1032 GammaCandidatesStepTwo = 0x0;
1035 //________________________________________________________________________
1036 void AliAnalysisTaskGammaConvV1::ProcessTruePhotonCandidatesAOD(AliAODConversionPhoton *TruePhotonCandidate)
1039 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1040 AliAODMCParticle *posDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelPositive());
1041 AliAODMCParticle *negDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelNegative());
1043 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
1044 Int_t pdgCode[2] = {abs(posDaughter->GetPdgCode()),abs(negDaughter->GetPdgCode())};
1046 if(posDaughter->GetMother() != negDaughter->GetMother()){
1047 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1050 else if(posDaughter->GetMother() == -1){
1051 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1055 if(pdgCode[0]!=11 || pdgCode[1]!=11) return; //One Particle is not a electron
1057 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()) return; // Same Charge
1059 if(((posDaughter->GetMCProcessCode())) != 5 || ((negDaughter->GetMCProcessCode())) != 5) return;// check if the daughters come from a conversion
1060 // STILL A BUG IN ALIROOT >>8 HAS TPO BE REMOVED AFTER FIX
1062 AliAODMCParticle *Photon = (AliAODMCParticle*) AODMCTrackArray->At(posDaughter->GetMother());
1063 if(Photon->GetPdgCode() != 22) return; // Mother is no Photon
1066 if(fIsFromMBHeader)hESDTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1068 if(Photon->IsPrimary()){ // OR ISPHYSICALPRIMARY() ???????
1069 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
1070 if(fIsFromMBHeader){
1071 hESDTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1073 hESDTruePrimaryConvGammaR[fiCut]->Fill(TruePhotonCandidate->GetConversionRadius());
1074 hESDTruePrimaryConvGammaEta[fiCut]->Fill(TruePhotonCandidate->Eta());
1076 hESDTruePrimaryConvGammaRSESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
1078 hESDTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
1079 // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
1082 if(fIsFromMBHeader){
1083 hESDTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1084 if (fDoPhotonQA) hESDTrueSecondaryConvGammaR[fiCut]->Fill(TruePhotonCandidate->GetConversionRadius());
1085 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
1086 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 310){
1087 hESDTrueSecondaryConvGammaFromXFromK0sPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1093 //________________________________________________________________________
1094 void AliAnalysisTaskGammaConvV1::ProcessTruePhotonCandidates(AliAODConversionPhoton *TruePhotonCandidate)
1096 // Process True Photons
1097 TParticle *posDaughter = TruePhotonCandidate->GetPositiveMCDaughter(fMCStack);
1098 TParticle *negDaughter = TruePhotonCandidate->GetNegativeMCDaughter(fMCStack);
1100 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
1102 Int_t pdgCode[2] = {abs(posDaughter->GetPdgCode()),abs(negDaughter->GetPdgCode())};
1104 if(posDaughter->GetMother(0) != negDaughter->GetMother(0)){
1105 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1108 else if(posDaughter->GetMother(0) == -1){
1109 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1113 if(pdgCode[0]!=11 || pdgCode[1]!=11) return; //One Particle is not a electron
1115 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()) return; // Same Charge
1117 if(posDaughter->GetUniqueID() != 5 || negDaughter->GetUniqueID() !=5) return;// check if the daughters come from a conversion
1119 TParticle *Photon = TruePhotonCandidate->GetMCParticle(fMCStack);
1120 if(Photon->GetPdgCode() != 22) return; // Mother is no Photon
1123 if(fIsFromMBHeader)hESDTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1125 if(posDaughter->GetMother(0) <= fMCStack->GetNprimary()){
1126 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
1127 if(fIsFromMBHeader){
1128 hESDTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1130 hESDTruePrimaryConvGammaR[fiCut]->Fill(TruePhotonCandidate->GetConversionRadius());
1131 hESDTruePrimaryConvGammaEta[fiCut]->Fill(TruePhotonCandidate->Eta());
1133 hESDTruePrimaryConvGammaRSESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
1135 hESDTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
1136 // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
1139 if(fIsFromMBHeader){
1140 hESDTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1141 if (fDoPhotonQA) hESDTrueSecondaryConvGammaR[fiCut]->Fill(TruePhotonCandidate->GetConversionRadius());
1142 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
1143 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 310){
1144 hESDTrueSecondaryConvGammaFromXFromK0sPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1149 //________________________________________________________________________
1150 void AliAnalysisTaskGammaConvV1::ProcessAODMCParticles()
1153 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1155 // Loop over all primary MC particle
1156 for(Int_t i = 0; i < AODMCTrackArray->GetEntriesFast(); i++) {
1158 AliAODMCParticle* particle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(i));
1159 if (!particle) continue;
1160 if (!particle->IsPrimary()) continue;
1162 Bool_t mcIsFromMB = kTRUE;
1163 Int_t isMCFromMBHeader = -1;
1164 if(((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
1166 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
1167 if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1168 if(isMCFromMBHeader != 2) mcIsFromMB = kFALSE;
1171 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kFALSE)){
1172 hMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
1173 if(particle->GetMother() >-1){ // Meson Decay Gamma
1174 switch((static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetMother())))->GetPdgCode()){
1176 hMCDecayGammaPi0Pt[fiCut]->Fill(particle->Pt());
1179 hMCDecayGammaRhoPt[fiCut]->Fill(particle->Pt());
1182 hMCDecayGammaEtaPt[fiCut]->Fill(particle->Pt());
1185 hMCDecayGammaOmegaPt[fiCut]->Fill(particle->Pt());
1188 hMCDecayGammaEtapPt[fiCut]->Fill(particle->Pt());
1191 hMCDecayGammaPhiPt[fiCut]->Fill(particle->Pt());
1194 hMCDecayGammaSigmaPt[fiCut]->Fill(particle->Pt());
1199 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kTRUE)){
1201 for(Int_t daughterIndex=particle->GetDaughter(0);daughterIndex<=particle->GetDaughter(1);daughterIndex++){
1202 AliAODMCParticle *tmpDaughter = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(daughterIndex));
1203 if(!tmpDaughter) continue;
1204 if(abs(tmpDaughter->GetPdgCode()) == 11){
1205 rConv = sqrt( (tmpDaughter->Xv()*tmpDaughter->Xv()) + (tmpDaughter->Yv()*tmpDaughter->Yv()) );
1208 hMCConvGammaPt[fiCut]->Fill(particle->Pt());
1210 hMCConvGammaR[fiCut]->Fill(rConv);
1211 hMCConvGammaEta[fiCut]->Fill(particle->Eta());
1214 hMCConvGammaRSPt[fiCut]->Fill(particle->Pt());
1216 hMCConvGammaRSR[fiCut]->Fill(rConv);
1217 hMCConvGammaRSEta[fiCut]->Fill(particle->Eta());
1221 // Converted MC Gamma
1222 if(fDoMesonAnalysis){
1223 if(particle->GetPdgCode() == 310 && fDoMesonQA){
1224 Double_t mesonY = 10.;
1225 if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
1226 mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1228 mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1230 Float_t weightedK0s= 1;
1231 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1232 if (particle->Pt()>0.005){
1233 weightedK0s= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
1234 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1237 hMCK0sPt[fiCut]->Fill(particle->Pt(),weightedK0s);
1238 hMCK0sWOWeightPt[fiCut]->Fill(particle->Pt());
1239 hMCK0sPtY[fiCut]->Fill(particle->Pt(),mesonY,weightedK0s);
1241 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelectedAODMC(particle,AODMCTrackArray,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
1242 AliAODMCParticle* daughter0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(0)));
1243 AliAODMCParticle* daughter1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(1)));
1244 Float_t weighted= 1;
1245 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1246 if (particle->Pt()>0.005){
1247 weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
1248 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1251 Double_t mesonY = 10.;
1252 if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
1253 mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1255 mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1258 if(particle->GetPdgCode() == 111){
1259 hMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
1260 hMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
1261 if (fDoMesonQA) hMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1262 } else if(particle->GetPdgCode() == 221){
1263 hMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
1264 if (fDoMesonQA) hMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1267 // Check the acceptance for both gammas
1268 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter0,AODMCTrackArray,kFALSE) &&
1269 ((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter1,AODMCTrackArray,kFALSE) ){
1271 if(particle->GetPdgCode() == 111){
1272 hMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
1273 } else if(particle->GetPdgCode() == 221){
1274 hMCEtaInAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Eta with gamma in acc
1281 //________________________________________________________________________
1282 void AliAnalysisTaskGammaConvV1::ProcessMCParticles()
1284 // Loop over all primary MC particle
1285 for(Int_t i = 0; i < fMCStack->GetNprimary(); i++) {
1286 TParticle* particle = (TParticle *)fMCStack->Particle(i);
1287 if (!particle) continue;
1289 Bool_t mcIsFromMB = kTRUE;
1290 Int_t isMCFromMBHeader = -1;
1291 if(((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
1293 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
1294 if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1295 if(isMCFromMBHeader != 2) mcIsFromMB = kFALSE;
1298 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kFALSE)){
1299 hMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
1300 if(particle->GetMother(0) >-1){ // Meson Decay Gamma
1301 switch(fMCStack->Particle(particle->GetMother(0))->GetPdgCode()){
1303 hMCDecayGammaPi0Pt[fiCut]->Fill(particle->Pt());
1306 hMCDecayGammaRhoPt[fiCut]->Fill(particle->Pt());
1309 hMCDecayGammaEtaPt[fiCut]->Fill(particle->Pt());
1312 hMCDecayGammaOmegaPt[fiCut]->Fill(particle->Pt());
1315 hMCDecayGammaEtapPt[fiCut]->Fill(particle->Pt());
1318 hMCDecayGammaPhiPt[fiCut]->Fill(particle->Pt());
1321 hMCDecayGammaSigmaPt[fiCut]->Fill(particle->Pt());
1326 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kTRUE)){
1327 hMCConvGammaPt[fiCut]->Fill(particle->Pt());
1329 hMCConvGammaR[fiCut]->Fill(((TParticle*)fMCStack->Particle(particle->GetFirstDaughter()))->R());
1330 hMCConvGammaEta[fiCut]->Fill(particle->Eta());
1333 hMCConvGammaRSPt[fiCut]->Fill(particle->Pt());
1335 hMCConvGammaRSR[fiCut]->Fill(((TParticle*)fMCStack->Particle(particle->GetFirstDaughter()))->R());
1336 hMCConvGammaRSEta[fiCut]->Fill(particle->Eta());
1339 } // Converted MC Gamma
1340 if(fDoMesonAnalysis){
1341 if(particle->GetPdgCode() == 310 && fDoMesonQA){
1342 Double_t mesonY = 10.;
1343 if(particle->Energy() - particle->Pz() == 0 || particle->Energy() + particle->Pz() == 0){
1344 mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1346 mesonY = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())))-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1348 Float_t weightedK0s= 1;
1349 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1350 if (particle->Pt()>0.005){
1351 weightedK0s= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
1352 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1355 hMCK0sPt[fiCut]->Fill(particle->Pt(),weightedK0s);
1356 hMCK0sWOWeightPt[fiCut]->Fill(particle->Pt());
1357 hMCK0sPtY[fiCut]->Fill(particle->Pt(),mesonY,weightedK0s);
1359 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelectedMC(particle,fMCStack,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
1360 TParticle* daughter0 = (TParticle*)fMCStack->Particle(particle->GetFirstDaughter());
1361 TParticle* daughter1 = (TParticle*)fMCStack->Particle(particle->GetLastDaughter());
1363 Float_t weighted= 1;
1364 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1365 if (particle->Pt()>0.005){
1366 weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
1367 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1370 Double_t mesonY = 10.;
1371 if(particle->Energy() - particle->Pz() == 0 || particle->Energy() + particle->Pz() == 0){
1372 mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1374 mesonY = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())))-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1377 if(particle->GetPdgCode() == 111){
1378 hMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
1379 hMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
1380 if (fDoMesonQA) hMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1381 } else if(particle->GetPdgCode() == 221){
1382 hMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
1383 if (fDoMesonQA) hMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1386 // Check the acceptance for both gammas
1387 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter0,fMCStack,kFALSE) &&
1388 ((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter1,fMCStack,kFALSE) ){
1390 if(particle->GetPdgCode() == 111){
1391 hMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
1392 } else if(particle->GetPdgCode() == 221){
1393 hMCEtaInAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Eta with gamma in acc
1400 //________________________________________________________________________
1401 void AliAnalysisTaskGammaConvV1::CalculatePi0Candidates(){
1403 // Conversion Gammas
1404 if(fGammaCandidates->GetEntries()>1){
1405 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries()-1;firstGammaIndex++){
1406 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
1407 if (gamma0==NULL) continue;
1408 for(Int_t secondGammaIndex=firstGammaIndex+1;secondGammaIndex<fGammaCandidates->GetEntries();secondGammaIndex++){
1409 AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(secondGammaIndex));
1410 //Check for same Electron ID
1411 if (gamma1==NULL) continue;
1412 if(gamma0->GetTrackLabelPositive() == gamma1->GetTrackLabelPositive() ||
1413 gamma0->GetTrackLabelNegative() == gamma1->GetTrackLabelNegative() ||
1414 gamma0->GetTrackLabelNegative() == gamma1->GetTrackLabelPositive() ||
1415 gamma0->GetTrackLabelPositive() == gamma1->GetTrackLabelNegative() ) continue;
1417 AliAODConversionMother *pi0cand = new AliAODConversionMother(gamma0,gamma1);
1418 pi0cand->SetLabels(firstGammaIndex,secondGammaIndex);
1420 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(pi0cand,kTRUE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()))){
1421 hESDMotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
1422 if(pi0cand->GetAlpha()<0.1)
1423 hESDMotherInvMassEalpha[fiCut]->Fill(pi0cand->M(),pi0cand->E());
1425 Double_t sparesFill2[3] = {pi0cand->M(),pi0cand->Pt(),pi0cand->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()};
1426 sESDMotherInvMassPtY[fiCut]->Fill(sparesFill2,1);
1428 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->DoBGCalculation()){
1432 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->BackgroundHandlerType() == 0){
1433 zbin = fBGHandler[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
1434 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1435 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fNumberOfESDTracks);
1437 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
1441 zbin = fBGHandlerRP[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
1442 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1443 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fNumberOfESDTracks);
1445 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
1448 Double_t sparesFill[4] = {pi0cand->M(),pi0cand->Pt(),(Double_t)zbin,(Double_t)mbin};
1449 sESDMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
1454 if(fInputEvent->IsA()==AliESDEvent::Class())
1455 ProcessTrueMesonCandidates(pi0cand,gamma0,gamma1);
1456 if(fInputEvent->IsA()==AliAODEvent::Class())
1457 ProcessTrueMesonCandidatesAOD(pi0cand,gamma0,gamma1);
1466 //______________________________________________________________________
1467 void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidates(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1)
1469 // Process True Mesons
1470 AliStack *MCStack = fMCEvent->Stack();
1472 if(TrueGammaCandidate0->GetV0Index()<fInputEvent->GetNumberOfV0s()){
1473 Bool_t isTruePi0 = kFALSE;
1474 Bool_t isTrueEta = kFALSE;
1475 Int_t gamma0MCLabel = TrueGammaCandidate0->GetMCParticleLabel(MCStack);
1476 Int_t gamma0MotherLabel = -1;
1477 if(gamma0MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1478 // Daughters Gamma 0
1479 TParticle * negativeMC = (TParticle*)TrueGammaCandidate0->GetNegativeMCDaughter(MCStack);
1480 TParticle * positiveMC = (TParticle*)TrueGammaCandidate0->GetPositiveMCDaughter(MCStack);
1481 TParticle * gammaMC0 = (TParticle*)MCStack->Particle(gamma0MCLabel);
1482 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
1483 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
1484 if(gammaMC0->GetPdgCode() == 22){ // ... with Gamma Mother
1485 gamma0MotherLabel=gammaMC0->GetFirstMother();
1488 if(gammaMC0->GetPdgCode() ==111){ // Conversion but Pi0 Mother
1489 gamma0MotherLabel=-111;
1491 if(gammaMC0->GetPdgCode() ==221){ // Conversion but Eta Mother
1492 gamma0MotherLabel=-221;
1496 if(TrueGammaCandidate1->GetV0Index()<fInputEvent->GetNumberOfV0s()){
1497 Int_t gamma1MCLabel = TrueGammaCandidate1->GetMCParticleLabel(MCStack);
1498 Int_t gamma1MotherLabel = -1;
1499 if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1500 // Daughters Gamma 1
1501 TParticle * negativeMC = (TParticle*)TrueGammaCandidate1->GetNegativeMCDaughter(MCStack);
1502 TParticle * positiveMC = (TParticle*)TrueGammaCandidate1->GetPositiveMCDaughter(MCStack);
1503 TParticle * gammaMC1 = (TParticle*)MCStack->Particle(gamma1MCLabel);
1504 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
1505 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
1506 if(gammaMC1->GetPdgCode() == 22){ // ... with Gamma Mother
1507 gamma1MotherLabel=gammaMC1->GetFirstMother();
1510 if(gammaMC1->GetPdgCode() ==111){ // Conversion but Pi0 Mother
1511 gamma1MotherLabel=-111;
1513 if(gammaMC1->GetPdgCode() ==221){ // Conversion but Eta Mother
1514 gamma1MotherLabel=-221;
1518 if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
1519 if(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 111){
1522 if(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 221){
1526 if(isTruePi0 || isTrueEta){// True Pion or Eta
1527 hESDTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1529 if(gamma0MotherLabel >= MCStack->GetNprimary()){ // Secondary Meson
1530 Int_t secMotherLabel = ((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetMother(0);
1531 Float_t weightedSec= 1;
1532 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, fMCStack, fInputEvent) && MCStack->Particle(secMotherLabel)->GetPdgCode()==310){
1533 weightedSec= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),secMotherLabel, fMCStack, fInputEvent)/2.; //invariant mass is additive thus the weight for the daughters has to be devide by two for the K0s at a certain pt
1534 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1536 hESDTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
1538 if (secMotherLabel >-1){
1539 if(MCStack->Particle(secMotherLabel)->GetPdgCode()==310){
1540 hESDTrueSecondaryMotherFromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
1541 if (fDoMesonQA)hESDTrueK0sWithPi0DaughterMCPt[fiCut]
1542 ->Fill(MCStack->Particle(secMotherLabel)->Pt());
1544 if(MCStack->Particle(secMotherLabel)->GetPdgCode()==221){
1545 hESDTrueSecondaryMotherFromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
1546 if (fDoMesonQA)hESDTrueEtaWithPi0DaughterMCPt[fiCut]
1547 ->Fill(MCStack->Particle(secMotherLabel)->Pt());
1550 }else{ // Only primary pi0 for efficiency calculation
1551 Float_t weighted= 1;
1552 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, fMCStack, fInputEvent)){
1553 if (((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt()>0.005){
1554 weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, fMCStack, fInputEvent);
1555 // cout << "rec \t " <<gamma1MotherLabel << "\t" << weighted << endl;
1558 hESDTruePrimaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
1559 hESDTruePrimaryMotherW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1560 pESDTruePrimaryMotherWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
1562 Double_t sparesFill[3] = {Pi0Candidate->M(),Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()};
1563 sESDTruePrimaryMotherInvMassPtY[fiCut]->Fill(sparesFill,1);
1564 if(isTruePi0){ // Only primary pi0 for resolution
1565 hESDTruePrimaryPi0MCPtResolPt[fiCut]->Fill(((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
1567 if (isTrueEta){ // Only primary eta for resolution
1568 hESDTruePrimaryEtaMCPtResolPt[fiCut]->Fill(((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
1573 else if(!isTruePi0 && !isTrueEta && fDoMesonQA){ // Background
1574 if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
1575 hESDTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1576 } else { // No photon or without mother
1577 hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1579 if((gamma0MotherLabel==-111 || gamma1MotherLabel==-111 || gamma0MotherLabel==-221 || gamma1MotherLabel==-221) ){
1581 hESDTrueMotherDalitzInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1587 //______________________________________________________________________
1588 void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidatesAOD(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1)
1591 // Process True Mesons
1592 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1593 Bool_t isTruePi0 = kFALSE;
1594 Bool_t isTrueEta = kFALSE;
1596 AliAODMCParticle *positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelPositive()));
1597 AliAODMCParticle *negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelNegative()));
1599 Int_t gamma0MCLabel = -1;
1600 Int_t gamma0MotherLabel = -1;
1601 if(!positiveMC||!negativeMC)
1604 if(positiveMC->GetMother()>-1&&(negativeMC->GetMother() == positiveMC->GetMother())){
1605 gamma0MCLabel = positiveMC->GetMother();
1608 if(gamma0MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1609 // Daughters Gamma 0
1610 AliAODMCParticle * gammaMC0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MCLabel));
1611 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
1612 if(((positiveMC->GetMCProcessCode())) == 5 && ((negativeMC->GetMCProcessCode())) == 5){ // ... From Conversion ... // STILL A BUG IN ALIROOT >>8 HAS TPO BE REMOVED AFTER FIX
1613 if(gammaMC0->GetPdgCode() == 22){ // ... with Gamma Mother
1614 gamma0MotherLabel=gammaMC0->GetMother();
1617 if(gammaMC0->GetPdgCode() ==111){ // Conversion but Pi0 Mother
1618 gamma0MotherLabel=-111;
1620 if(gammaMC0->GetPdgCode() ==221){ // Conversion but Eta Mother
1621 gamma0MotherLabel=-221;
1625 positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate1->GetMCLabelPositive()));
1626 negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate1->GetMCLabelNegative()));
1628 Int_t gamma1MCLabel = -1;
1629 Int_t gamma1MotherLabel = -1;
1630 if(!positiveMC||!negativeMC)
1633 if(positiveMC->GetMother()>-1&&(negativeMC->GetMother() == positiveMC->GetMother())){
1634 gamma1MCLabel = positiveMC->GetMother();
1636 if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1637 // Daughters Gamma 1
1638 AliAODMCParticle * gammaMC1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MCLabel));
1639 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
1640 if(((positiveMC->GetMCProcessCode())) == 5 && ((negativeMC->GetMCProcessCode())) == 5){ // ... From Conversion ... // STILL A BUG IN ALIROOT >>8 HAS TPO BE REMOVED AFTER FIX
1641 if(gammaMC1->GetPdgCode() == 22){ // ... with Gamma Mother
1642 gamma1MotherLabel=gammaMC1->GetMother();
1645 if(gammaMC1->GetPdgCode() ==111){ // Conversion but Pi0 Mother
1646 gamma1MotherLabel=-111;
1648 if(gammaMC1->GetPdgCode() ==221){ // Conversion but Eta Mother
1649 gamma1MotherLabel=-221;
1653 if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
1654 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 111){
1657 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 221){
1661 if(isTruePi0 || isTrueEta){// True Pion or Eta
1662 hESDTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1664 if(!(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MotherLabel))->IsPrimary())){ // Secondary Meson
1665 Int_t secMotherLabel = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetMother();
1666 Float_t weightedSec= 1;
1667 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, 0x0, fInputEvent) && static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
1668 weightedSec= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),secMotherLabel, 0x0, fInputEvent)/2.; //invariant mass is additive thus the weight for the daughters has to be devide by two for the K0s at a certain pt
1669 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1671 hESDTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
1673 if (secMotherLabel >-1){
1674 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
1675 hESDTrueSecondaryMotherFromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
1676 if (fDoMesonQA)hESDTrueK0sWithPi0DaughterMCPt[fiCut]
1677 ->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
1679 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==221){
1680 hESDTrueSecondaryMotherFromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
1681 if (fDoMesonQA)hESDTrueEtaWithPi0DaughterMCPt[fiCut]
1682 ->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
1685 }else{ // Only primary pi0 for efficiency calculation
1686 Float_t weighted= 1;
1687 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, 0x0, fInputEvent)){
1688 if (static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt()>0.005){
1689 weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, 0x0, fInputEvent);
1690 // cout << "rec \t " <<gamma1MotherLabel << "\t" << weighted << endl;
1693 hESDTruePrimaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
1696 Double_t sparesFill[3] = {Pi0Candidate->M(),Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()};
1697 sESDTruePrimaryMotherInvMassPtY[fiCut]->Fill(sparesFill,1);
1698 if(isTruePi0){ // Only primary pi0 for resolution
1699 hESDTruePrimaryPi0MCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
1700 (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
1702 if (isTrueEta){ // Only primary eta for resolution
1703 hESDTruePrimaryEtaMCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
1704 (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
1709 else if(!isTruePi0 && !isTrueEta && fDoMesonQA){ // Background
1710 if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
1711 hESDTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1712 } else { // No photon or without mother
1713 hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1715 if((gamma0MotherLabel==-111 || gamma1MotherLabel==-111 || gamma0MotherLabel==-221 || gamma1MotherLabel==-221) ){
1717 hESDTrueMotherDalitzInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1721 //________________________________________________________________________
1722 void AliAnalysisTaskGammaConvV1::CalculateBackground(){
1724 Int_t zbin= fBGHandler[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
1727 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1728 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fNumberOfESDTracks);
1730 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
1733 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseRotationMethod()){
1735 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
1736 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
1737 for(Int_t iCurrent2=iCurrent+1;iCurrent2<fGammaCandidates->GetEntries();iCurrent2++){
1738 for(Int_t nRandom=0;nRandom<((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents();nRandom++){
1739 AliAODConversionPhoton currentEventGoodV02 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent2));
1741 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->DoBGProbability()){
1742 AliAODConversionMother *backgroundCandidateProb = new AliAODConversionMother(¤tEventGoodV0,¤tEventGoodV02);
1743 Double_t massBGprob = backgroundCandidateProb->M();
1744 if(massBGprob>0.1 && massBGprob<0.14){
1745 if(fRandom.Rndm()>fBGHandler[fiCut]->GetBGProb(zbin,mbin)){
1746 delete backgroundCandidateProb;
1750 delete backgroundCandidateProb;
1751 backgroundCandidateProb = 0x0;
1754 RotateParticle(¤tEventGoodV02);
1755 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,¤tEventGoodV02);
1756 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()))){
1757 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
1758 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
1759 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
1761 delete backgroundCandidate;
1762 backgroundCandidate = 0x0;
1767 AliGammaConversionAODBGHandler::GammaConversionVertex *bgEventVertex = NULL;
1769 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1770 for(Int_t nEventsInBG=0;nEventsInBG<fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
1771 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
1772 if(fMoveParticleAccordingToVertex == kTRUE){
1773 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
1776 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
1777 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
1778 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
1779 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
1780 if(fMoveParticleAccordingToVertex == kTRUE){
1781 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
1784 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
1785 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()))){
1786 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
1787 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
1788 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
1790 delete backgroundCandidate;
1791 backgroundCandidate = 0x0;
1797 for(Int_t nEventsInBG=0;nEventsInBG <fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
1798 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
1799 if(previousEventV0s){
1800 if(fMoveParticleAccordingToVertex == kTRUE){
1801 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
1803 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
1804 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
1805 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
1807 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
1809 if(fMoveParticleAccordingToVertex == kTRUE){
1810 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
1813 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
1815 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()))){
1816 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
1817 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
1818 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
1820 delete backgroundCandidate;
1821 backgroundCandidate = 0x0;
1829 //________________________________________________________________________
1830 void AliAnalysisTaskGammaConvV1::CalculateBackgroundRP(){
1832 Int_t zbin= fBGHandlerRP[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
1834 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1835 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fNumberOfESDTracks);
1837 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
1842 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseRotationMethod()){
1843 // Correct for the number of rotations
1844 // BG is for rotation the same, except for factor NRotations
1845 Double_t weight=1./Double_t(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents());
1847 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries();firstGammaIndex++){
1849 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
1850 if (gamma0==NULL) continue;
1851 for(Int_t secondGammaIndex=firstGammaIndex+1;secondGammaIndex<fGammaCandidates->GetEntries();secondGammaIndex++){
1852 AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(secondGammaIndex));
1853 if (gamma1 == NULL) continue;
1854 if(!((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelected(gamma1,fInputEvent))continue;
1855 for(Int_t nRandom=0;nRandom<((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents();nRandom++){
1857 RotateParticle(gamma1);
1859 AliAODConversionMother backgroundCandidate(gamma0,gamma1);
1861 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(&backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
1862 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate.M(),backgroundCandidate.Pt());
1863 Double_t sparesFill[4] = {backgroundCandidate.M(),backgroundCandidate.Pt(),(Double_t)zbin,(Double_t)mbin};
1864 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,weight);
1872 for(Int_t nEventsInBG=0;nEventsInBG <fBGHandlerRP[fiCut]->GetNBGEvents(fGammaCandidates,fInputEvent);nEventsInBG++){
1874 AliGammaConversionPhotonVector *previousEventGammas = fBGHandlerRP[fiCut]->GetBGGoodGammas(fGammaCandidates,fInputEvent,nEventsInBG);
1876 if(previousEventGammas){
1877 // test weighted background
1878 Double_t weight=1.0;
1879 // Correct for the number of eventmixing:
1880 // N gammas -> (N-1) + (N-2) +(N-3) ...+ (N-(N-1)) using sum formula sum(i)=N*(N-1)/2 -> N*(N-1)/2
1881 // real combinations (since you cannot combine a photon with its own)
1882 // but BG leads to N_{a}*N_{b} combinations
1883 weight*=0.5*(Double_t(fGammaCandidates->GetEntries()-1))/Double_t(previousEventGammas->size());
1885 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
1887 AliAODConversionPhoton *gamma0 = (AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
1889 for(UInt_t iPrevious=0;iPrevious<previousEventGammas->size();iPrevious++){
1891 AliAODConversionPhoton *gamma1 = (AliAODConversionPhoton*)(previousEventGammas->at(iPrevious));
1893 AliAODConversionMother backgroundCandidate(gamma0,gamma1);
1895 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(&backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
1896 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate.M(),backgroundCandidate.Pt());
1897 Double_t sparesFill[4] = {backgroundCandidate.M(),backgroundCandidate.Pt(),(Double_t)zbin,(Double_t)mbin};
1898 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,weight);
1906 //________________________________________________________________________
1907 void AliAnalysisTaskGammaConvV1::RotateParticle(AliAODConversionPhoton *gamma){
1908 Int_t fNDegreesPMBackground= ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->NDegreesRotation();
1909 Double_t nRadiansPM = fNDegreesPMBackground*TMath::Pi()/180;
1910 Double_t rotationValue = fRandom.Rndm()*2*nRadiansPM + TMath::Pi()-nRadiansPM;
1911 gamma->RotateZ(rotationValue);
1913 //________________________________________________________________________
1914 void AliAnalysisTaskGammaConvV1::MoveParticleAccordingToVertex(AliAODConversionPhoton* particle,const AliGammaConversionAODBGHandler::GammaConversionVertex *vertex){
1915 //see header file for documentation
1917 Double_t dx = vertex->fX - fInputEvent->GetPrimaryVertex()->GetX();
1918 Double_t dy = vertex->fY - fInputEvent->GetPrimaryVertex()->GetY();
1919 Double_t dz = vertex->fZ - fInputEvent->GetPrimaryVertex()->GetZ();
1921 Double_t movedPlace[3] = {particle->GetConversionX() - dx,particle->GetConversionY() - dy,particle->GetConversionZ() - dz};
1922 particle->SetConversionPoint(movedPlace);
1924 //________________________________________________________________________
1925 void AliAnalysisTaskGammaConvV1::UpdateEventByEventData(){
1926 //see header file for documentation
1927 if(fGammaCandidates->GetEntries() >0 ){
1928 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1929 fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fNumberOfESDTracks);
1931 else{ // means we use #V0s for multiplicity
1932 fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fGammaCandidates->GetEntries());
1937 //________________________________________________________________________
1938 void AliAnalysisTaskGammaConvV1::CountTracks(){
1940 if(fInputEvent->IsA()==AliESDEvent::Class()){
1941 // Using standard function for setting Cuts
1942 Bool_t selectPrimaries=kTRUE;
1943 AliESDtrackCuts *EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
1944 EsdTrackCuts->SetMaxDCAToVertexZ(2);
1945 EsdTrackCuts->SetEtaRange(-0.8, 0.8);
1946 EsdTrackCuts->SetPtRange(0.15);
1947 fNumberOfESDTracks = 0;
1948 for(Int_t iTracks = 0; iTracks < fInputEvent->GetNumberOfTracks(); iTracks++){
1949 AliESDtrack* curTrack = (AliESDtrack*) fInputEvent->GetTrack(iTracks);
1950 if(!curTrack) continue;
1951 // if(fMCEvent && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
1952 // if(!((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(abs(curTrack->GetLabel()), fMCStack)) continue;
1954 if(EsdTrackCuts->AcceptTrack(curTrack) ) fNumberOfESDTracks++;
1956 delete EsdTrackCuts;
1959 else if(fInputEvent->IsA()==AliAODEvent::Class()){
1960 fNumberOfESDTracks = 0;
1961 for(Int_t iTracks = 0; iTracks<fInputEvent->GetNumberOfTracks(); iTracks++){
1962 AliAODTrack* curTrack = (AliAODTrack*) fInputEvent->GetTrack(iTracks);
1963 if(!curTrack->IsPrimaryCandidate()) continue;
1964 if(abs(curTrack->Eta())>0.8) continue;
1965 if(curTrack->Pt()<0.15) continue;
1966 if(abs(curTrack->ZAtDCA())>2) continue;
1967 fNumberOfESDTracks++;
1973 //________________________________________________________________________
1974 void AliAnalysisTaskGammaConvV1::FillPhotonCombinatorialBackgroundHist(AliAODConversionPhoton *TruePhotonCandidate, Int_t pdgCode[])
1976 // 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
1977 if(pdgCode[0]==11 && pdgCode[1]==11){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),0);}
1978 else if( (pdgCode[0]==11 && pdgCode[1]==211) || (pdgCode[0]==211 && pdgCode[1]==11) )
1979 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),1);}
1980 else if( (pdgCode[0]==11 && pdgCode[1]==321) || (pdgCode[0]==321 && pdgCode[1]==11) )
1981 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),2);}
1982 else if( (pdgCode[0]==11 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==11) )
1983 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),3);}
1984 else if( (pdgCode[0]==11 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==11) )
1985 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),4);}
1986 else if( pdgCode[0]==211 && pdgCode[1]==211 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),5);}
1987 else if( (pdgCode[0]==211 && pdgCode[1]==321) || (pdgCode[0]==321 && pdgCode[1]==211) )
1988 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),6);}
1989 else if( (pdgCode[0]==211 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==211) )
1990 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),7);}
1991 else if( (pdgCode[0]==211 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==211) )
1992 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),8);}
1993 else if( pdgCode[0]==321 && pdgCode[1]==321 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),9);}
1994 else if( (pdgCode[0]==321 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==321) )
1995 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),10);}
1996 else if( (pdgCode[0]==321 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==321) )
1997 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),11);}
1998 else if( pdgCode[0]==2212 && pdgCode[1]==2212 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),12);}
1999 else if( (pdgCode[0]==2212 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==2212) )
2000 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),13);}
2001 else if( pdgCode[0]==13 && pdgCode[1]==13 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),14);}
2002 else {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),15);}
2004 //________________________________________________________________________
2005 void AliAnalysisTaskGammaConvV1::RelabelAODPhotonCandidates(Bool_t mode){
2007 // Relabeling For AOD Event
2009 // MCLabel -> AODMCLabel
2012 fMCStackPos = new Int_t[fReaderGammas->GetEntries()];
2013 fMCStackNeg = new Int_t[fReaderGammas->GetEntries()];
2014 fESDArrayPos = new Int_t[fReaderGammas->GetEntries()];
2015 fESDArrayNeg = new Int_t[fReaderGammas->GetEntries()];
2018 for(Int_t iGamma = 0;iGamma<fReaderGammas->GetEntries();iGamma++){
2019 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(iGamma);
2020 if(!PhotonCandidate) continue;
2021 if(!mode){// Back to ESD Labels
2022 PhotonCandidate->SetMCLabelPositive(fMCStackPos[iGamma]);
2023 PhotonCandidate->SetMCLabelNegative(fMCStackNeg[iGamma]);
2024 PhotonCandidate->SetLabelPositive(fESDArrayPos[iGamma]);
2025 PhotonCandidate->SetLabelNegative(fESDArrayNeg[iGamma]);
2028 fMCStackPos[iGamma] = PhotonCandidate->GetMCLabelPositive();
2029 fMCStackNeg[iGamma] = PhotonCandidate->GetMCLabelNegative();
2030 fESDArrayPos[iGamma] = PhotonCandidate->GetTrackLabelPositive();
2031 fESDArrayNeg[iGamma] = PhotonCandidate->GetTrackLabelNegative();
2033 Bool_t AODLabelPos = kFALSE;
2034 Bool_t AODLabelNeg = kFALSE;
2036 for(Int_t i = 0; i<fInputEvent->GetNumberOfTracks();i++){
2037 AliAODTrack *tempDaughter = static_cast<AliAODTrack*>(fInputEvent->GetTrack(i));
2039 if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelPositive() ){
2040 PhotonCandidate->SetMCLabelPositive(abs(tempDaughter->GetLabel()));
2041 PhotonCandidate->SetLabelPositive(i);
2042 AODLabelPos = kTRUE;
2046 if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelNegative()){
2047 PhotonCandidate->SetMCLabelNegative(abs(tempDaughter->GetLabel()));
2048 PhotonCandidate->SetLabelNegative(i);
2049 AODLabelNeg = kTRUE;
2052 if(AODLabelNeg && AODLabelPos){
2056 if(!AODLabelPos || !AODLabelNeg){
2057 cout<<"WARNING!!! AOD TRACKS NOT FOUND FOR"<<endl;
2063 delete[] fMCStackPos;
2064 delete[] fMCStackNeg;
2065 delete[] fESDArrayPos;
2066 delete[] fESDArrayNeg;
2069 //________________________________________________________________________
2070 void AliAnalysisTaskGammaConvV1::Terminate(const Option_t *)
2073 //fOutputContainer->Print(); // Will crash on GRID