1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: Martin Wilde, Daniel Lohner, Friederike Bock *
7 * based on: on older version (see aliroot up to v5-04-42-AN) *
8 * AliAnalysisTaskGammaConversion.cxx *
9 * Authors: Kathrin Koch, Kenneth Aamodt, Ana Marin *
11 * Permission to use, copy, modify and distribute this software and its *
12 * documentation strictly for non-commercial purposes is hereby granted *
13 * without fee, provided that the above copyright notice appears in all *
14 * copies and that both the copyright notice and this permission notice *
15 * appear in the supporting documentation. The authors make no claims *
16 * about the suitability of this software for any purpose. It is *
17 * provided "as is" without express or implied warranty. *
18 **************************************************************************/
20 ////////////////////////////////////////////////
21 //---------------------------------------------
23 // Class used to do analysis on conversion pairs
24 //---------------------------------------------
25 ///////////////////////////////////////////////
33 #include "THnSparse.h"
36 #include "AliAnalysisTask.h"
37 #include "AliAnalysisManager.h"
38 #include "AliESDEvent.h"
39 #include "AliESDInputHandler.h"
40 #include "AliMCEventHandler.h"
41 #include "AliMCEvent.h"
42 #include "AliMCParticle.h"
43 #include "AliCentrality.h"
44 #include "AliESDVZERO.h"
45 #include "AliESDpid.h"
46 #include "AliAnalysisTaskGammaConvV1.h"
47 #include "AliVParticle.h"
48 #include "AliESDtrackCuts.h"
49 #include "AliKFVertex.h"
50 #include "AliV0ReaderV1.h"
51 #include "AliGenCocktailEventHeader.h"
52 #include "AliConversionAODBGHandlerRP.h"
53 #include "AliAODMCParticle.h"
54 #include "AliAODMCHeader.h"
56 ClassImp(AliAnalysisTaskGammaConvV1)
58 //________________________________________________________________________
59 AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(): AliAnalysisTaskSE(),
73 fTrueMotherRapList(NULL),
75 fHeaderNameList(NULL),
78 fGammaCandidates(NULL),
80 fConversionCuts(NULL),
83 hESDConvGammaPt(NULL),
84 tESDConvGammaPtDcazCat(NULL),
91 hESDMotherInvMassPt(NULL),
92 sESDMotherInvMassPtZM(NULL),
93 hESDMotherBackInvMassPt(NULL),
94 sESDMotherBackInvMassPtZM(NULL),
95 hESDMotherInvMassEalpha(NULL),
98 hMCDecayGammaPi0Pt(NULL),
99 hMCDecayGammaRhoPt(NULL),
100 hMCDecayGammaEtaPt(NULL),
101 hMCDecayGammaOmegaPt(NULL),
102 hMCDecayGammaEtapPt(NULL),
103 hMCDecayGammaPhiPt(NULL),
104 hMCDecayGammaSigmaPt(NULL),
105 hMCConvGammaPt(NULL),
107 hMCConvGammaEta(NULL),
108 hMCConvGammaRSPt(NULL),
109 hMCConvGammaRSR(NULL),
110 hMCConvGammaRSEta(NULL),
112 hMCPi0WOWeightPt(NULL),
119 hMCK0sWOWeightPt(NULL),
121 hESDTrueMotherInvMassPt(NULL),
122 hESDTruePrimaryMotherInvMassPt(NULL),
123 hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
124 pESDTruePrimaryMotherWeightsInvMassPt(NULL),
125 hESDTruePrimaryPi0MCPtResolPt(NULL),
126 hESDTruePrimaryEtaMCPtResolPt(NULL),
127 hESDTrueSecondaryMotherInvMassPt(NULL),
128 hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
129 hESDTrueK0sWithPi0DaughterMCPt(NULL),
130 hESDTrueSecondaryMotherFromEtaInvMassPt(NULL),
131 hESDTrueEtaWithPi0DaughterMCPt(NULL),
132 hESDTrueBckGGInvMassPt(NULL),
133 hESDTrueBckContInvMassPt(NULL),
134 hESDTrueMotherDalitzInvMassPt(NULL),
135 hESDTrueConvGammaPt(NULL),
136 hESDCombinatorialPt(NULL),
137 hESDTruePrimaryConvGammaPt(NULL),
138 hESDTruePrimaryConvGammaESDPtMCPt(NULL),
139 hESDTruePrimaryConvGammaRSESDPtMCPt(NULL),
140 hESDTrueSecondaryConvGammaPt(NULL),
141 hESDTrueSecondaryConvGammaFromXFromK0sPt(NULL),
142 hESDTrueSecondaryConvGammaFromXFromLambdaPt(NULL),
144 hNGoodESDTracks(NULL),
145 hNGammaCandidates(NULL),
148 tESDMesonsInvMassPtDcazMinDcazMaxFlag(NULL),
156 fnGammaCandidates(0),
167 fMoveParticleAccordingToVertex(kTRUE),
169 fDoMesonAnalysis(kTRUE),
172 fIsFromMBHeader(kTRUE),
178 //________________________________________________________________________
179 AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(const char *name):
180 AliAnalysisTaskSE(name),
191 fPhotonDCAList(NULL),
194 fTrueMotherRapList(NULL),
196 fHeaderNameList(NULL),
199 fGammaCandidates(NULL),
201 fConversionCuts(NULL),
202 fMesonCutArray(NULL),
204 hESDConvGammaPt(NULL),
205 tESDConvGammaPtDcazCat(NULL),
212 hESDMotherInvMassPt(NULL),
213 sESDMotherInvMassPtZM(NULL),
214 hESDMotherBackInvMassPt(NULL),
215 sESDMotherBackInvMassPtZM(NULL),
216 hESDMotherInvMassEalpha(NULL),
219 hMCDecayGammaPi0Pt(NULL),
220 hMCDecayGammaRhoPt(NULL),
221 hMCDecayGammaEtaPt(NULL),
222 hMCDecayGammaOmegaPt(NULL),
223 hMCDecayGammaEtapPt(NULL),
224 hMCDecayGammaPhiPt(NULL),
225 hMCDecayGammaSigmaPt(NULL),
226 hMCConvGammaPt(NULL),
228 hMCConvGammaEta(NULL),
229 hMCConvGammaRSPt(NULL),
230 hMCConvGammaRSR(NULL),
231 hMCConvGammaRSEta(NULL),
233 hMCPi0WOWeightPt(NULL),
240 hMCK0sWOWeightPt(NULL),
242 hESDTrueMotherInvMassPt(NULL),
243 hESDTruePrimaryMotherInvMassPt(NULL),
244 hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
245 pESDTruePrimaryMotherWeightsInvMassPt(NULL),
246 hESDTruePrimaryPi0MCPtResolPt(NULL),
247 hESDTruePrimaryEtaMCPtResolPt(NULL),
248 hESDTrueSecondaryMotherInvMassPt(NULL),
249 hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
250 hESDTrueK0sWithPi0DaughterMCPt(NULL),
251 hESDTrueSecondaryMotherFromEtaInvMassPt(NULL),
252 hESDTrueEtaWithPi0DaughterMCPt(NULL),
253 hESDTrueBckGGInvMassPt(NULL),
254 hESDTrueBckContInvMassPt(NULL),
255 hESDTrueMotherDalitzInvMassPt(NULL),
256 hESDTrueConvGammaPt(NULL),
257 hESDCombinatorialPt(NULL),
258 hESDTruePrimaryConvGammaPt(NULL),
259 hESDTruePrimaryConvGammaESDPtMCPt(NULL),
260 hESDTruePrimaryConvGammaRSESDPtMCPt(NULL),
261 hESDTrueSecondaryConvGammaPt(NULL),
262 hESDTrueSecondaryConvGammaFromXFromK0sPt(NULL),
263 hESDTrueSecondaryConvGammaFromXFromLambdaPt(NULL),
265 hNGoodESDTracks(NULL),
266 hNGammaCandidates(NULL),
269 tESDMesonsInvMassPtDcazMinDcazMaxFlag(NULL),
277 fnGammaCandidates(0),
288 fMoveParticleAccordingToVertex(kTRUE),
290 fDoMesonAnalysis(kTRUE),
293 fIsFromMBHeader(kTRUE),
296 // Define output slots here
297 DefineOutput(1, TList::Class());
300 AliAnalysisTaskGammaConvV1::~AliAnalysisTaskGammaConvV1()
302 if(fGammaCandidates){
303 delete fGammaCandidates;
304 fGammaCandidates = 0x0;
311 delete[] fBGHandlerRP;
315 //___________________________________________________________
316 void AliAnalysisTaskGammaConvV1::InitBack(){
318 const Int_t nDim = 4;
319 Int_t nBins[nDim] = {800,250,7,4};
320 Double_t xMin[nDim] = {0,0, 0,0};
321 Double_t xMax[nDim] = {0.8,25,7,4};
323 sESDMotherInvMassPtZM = new THnSparseF*[fnCuts];
324 sESDMotherBackInvMassPtZM = new THnSparseF*[fnCuts];
326 fBGHandler = new AliGammaConversionAODBGHandler*[fnCuts];
327 fBGHandlerRP = new AliConversionAODBGHandlerRP*[fnCuts];
328 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
329 if (((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->DoBGCalculation()){
330 TString cutstring = ((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber();
331 TString cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
333 Int_t collisionSystem = atoi((TString)(((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber())(0,1));
334 Int_t centMin = atoi((TString)(((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber())(1,1));
335 Int_t centMax = atoi((TString)(((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber())(2,1));
337 if(collisionSystem == 1 || collisionSystem == 2 ||
338 collisionSystem == 5 || collisionSystem == 8 ||
339 collisionSystem == 9){
340 centMin = centMin*10;
341 centMax = centMax*10;
343 else if(collisionSystem == 3 || collisionSystem == 6){
347 else if(collisionSystem == 4 || collisionSystem == 7){
348 centMin = ((centMin*5)+45);
349 centMax = ((centMax*5)+45);
352 fBackList[iCut] = new TList();
353 fBackList[iCut]->SetName(Form("%s_%s Back histograms",cutstring.Data(),cutstringMeson.Data()));
354 fBackList[iCut]->SetOwner(kTRUE);
355 fCutFolder[iCut]->Add(fBackList[iCut]);
357 sESDMotherBackInvMassPtZM[iCut] = new THnSparseF("Back_Back_InvMass_Pt_z_m","Back_Back_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
358 fBackList[iCut]->Add(sESDMotherBackInvMassPtZM[iCut]);
360 fMotherList[iCut] = new TList();
361 fMotherList[iCut]->SetName(Form("%s_%s Mother histograms",cutstring.Data(),cutstringMeson.Data()));
362 fMotherList[iCut]->SetOwner(kTRUE);
363 fCutFolder[iCut]->Add(fMotherList[iCut]);
365 sESDMotherInvMassPtZM[iCut] = new THnSparseF("Back_Mother_InvMass_Pt_z_m","Back_Mother_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
366 fMotherList[iCut]->Add(sESDMotherInvMassPtZM[iCut]);
368 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->BackgroundHandlerType() == 0){
369 fBGHandler[iCut] = new AliGammaConversionAODBGHandler(
370 collisionSystem,centMin,centMax,
371 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents(),
372 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseTrackMultiplicity());
373 fBGHandlerRP[iCut] = NULL;
376 fBGHandlerRP[iCut] = new AliConversionAODBGHandlerRP(
377 ((AliConversionCuts*)fCutArray->At(fiCut))->IsHeavyIon(),
378 ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity(),
379 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents());
380 fBGHandler[iCut] = NULL;
385 //________________________________________________________________________
386 void AliAnalysisTaskGammaConvV1::UserCreateOutputObjects()
390 if(fOutputContainer != NULL){
391 delete fOutputContainer;
392 fOutputContainer = NULL;
394 if(fOutputContainer == NULL){
395 fOutputContainer = new TList();
396 fOutputContainer->SetOwner(kTRUE);
399 // Array of current cut's gammas
400 fGammaCandidates = new TList();
402 fCutFolder = new TList*[fnCuts];
403 fESDList = new TList*[fnCuts];
404 fBackList = new TList*[fnCuts];
405 fMotherList = new TList*[fnCuts];
406 hNEvents = new TH1I*[fnCuts];
407 hNGoodESDTracks = new TH1I*[fnCuts];
408 hNGammaCandidates = new TH1I*[fnCuts];
409 hNV0Tracks = new TH1I*[fnCuts];
410 hEtaShift = new TProfile*[fnCuts];
411 hESDConvGammaPt = new TH1F*[fnCuts];
414 fPhotonDCAList = new TList*[fnCuts];
415 tESDConvGammaPtDcazCat = new TTree*[fnCuts];
418 if(fDoMesonAnalysis){
419 hESDMotherInvMassPt = new TH2F*[fnCuts];
420 hESDMotherBackInvMassPt = new TH2F*[fnCuts];
421 hESDMotherInvMassEalpha = new TH2F*[fnCuts];
423 fMesonDCAList = new TList*[fnCuts];
424 tESDMesonsInvMassPtDcazMinDcazMaxFlag = new TTree*[fnCuts];
428 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
430 TString cutstring = ((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber();
431 TString cutstringMeson = "NoMesonCut";
432 if(fDoMesonAnalysis)cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
434 fCutFolder[iCut] = new TList();
435 fCutFolder[iCut]->SetName(Form("Cut Number %s_%s",cutstring.Data(),cutstringMeson.Data()));
436 fCutFolder[iCut]->SetOwner(kTRUE);
437 fOutputContainer->Add(fCutFolder[iCut]);
438 fESDList[iCut] = new TList();
439 fESDList[iCut]->SetName(Form("%s_%s ESD histograms",cutstring.Data(),cutstringMeson.Data()));
440 fESDList[iCut]->SetOwner(kTRUE);
441 fCutFolder[iCut]->Add(fESDList[iCut]);
443 hNEvents[iCut] = new TH1I("NEvents","NEvents",9,-0.5,8.5);
444 hNEvents[iCut]->GetXaxis()->SetBinLabel(1,"Accepted");
445 hNEvents[iCut]->GetXaxis()->SetBinLabel(2,"Centrality");
446 hNEvents[iCut]->GetXaxis()->SetBinLabel(3,"Missing MC");
447 if (((AliConversionCuts*)fCutArray->At(iCut))->IsSpecialTrigger() == 4 ){
448 TString TriggerNames = "Not Trigger: ";
449 TriggerNames = TriggerNames+ ( (AliConversionCuts*)fCutArray->At(iCut))->GetSpecialTriggerName();
450 hNEvents[iCut]->GetXaxis()->SetBinLabel(4,TriggerNames.Data());
452 hNEvents[iCut]->GetXaxis()->SetBinLabel(4,"Trigger");
454 hNEvents[iCut]->GetXaxis()->SetBinLabel(5,"Vertex Z");
455 hNEvents[iCut]->GetXaxis()->SetBinLabel(6,"Cont. Vertex");
456 hNEvents[iCut]->GetXaxis()->SetBinLabel(7,"Pile-Up");
457 hNEvents[iCut]->GetXaxis()->SetBinLabel(8,"no SDD");
458 hNEvents[iCut]->GetXaxis()->SetBinLabel(9,"no V0AND");
459 fESDList[iCut]->Add(hNEvents[iCut]);
460 if(fIsHeavyIon) hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",4000,0,4000);
461 else hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",200,0,200);
462 fESDList[iCut]->Add(hNGoodESDTracks[iCut]);
463 if(fIsHeavyIon) hNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",100,0,100);
464 else hNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",50,0,50);
465 fESDList[iCut]->Add(hNGammaCandidates[iCut]);
466 if(fIsHeavyIon) hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",30000,0,30000);
467 else hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",2000,0,2000);
468 fESDList[iCut]->Add(hNV0Tracks[iCut]);
469 hEtaShift[iCut] = new TProfile("Eta Shift","Eta Shift",1, -0.5,0.5);
470 fESDList[iCut]->Add(hEtaShift[iCut]);
471 hESDConvGammaPt[iCut] = new TH1F("ESD_ConvGamma_Pt","ESD_ConvGamma_Pt",250,0,25);
472 fESDList[iCut]->Add(hESDConvGammaPt[iCut]);
475 fPhotonDCAList[iCut] = new TList();
476 fPhotonDCAList[iCut]->SetName(Form("%s_%s Photon DCA tree",cutstring.Data(),cutstringMeson.Data()));
477 fPhotonDCAList[iCut]->SetOwner(kTRUE);
478 fCutFolder[iCut]->Add(fPhotonDCAList[iCut]);
480 tESDConvGammaPtDcazCat[iCut] = new TTree("ESD_ConvGamma_Pt_Dcaz_R_Eta","ESD_ConvGamma_Pt_Dcaz_R_Eta_Cat");
481 tESDConvGammaPtDcazCat[iCut]->Branch("Pt",&fPtGamma,"fPtGamma/F");
482 tESDConvGammaPtDcazCat[iCut]->Branch("DcaZPhoton",&fDCAzPhoton,"fDCAzPhoton/F");
483 // tESDConvGammaPtDcazCat[iCut]->Branch("R",&fRConvPhoton,"fRConvPhoton/F");
484 // tESDConvGammaPtDcazCat[iCut]->Branch("Eta",&fEtaPhoton,"fEtaPhoton/F");
486 tESDConvGammaPtDcazCat[iCut]->Branch("cat",&iCatPhoton,"iCatPhoton/b");
488 tESDConvGammaPtDcazCat[iCut]->Branch("photonMCInfo",&iPhotonMCInfo,"iPhotonMCInfo/b");
490 fPhotonDCAList[iCut]->Add(tESDConvGammaPtDcazCat[iCut]);
493 if(fDoMesonAnalysis){
494 hESDMotherInvMassPt[iCut] = new TH2F("ESD_Mother_InvMass_Pt","ESD_Mother_InvMass_Pt",800,0,0.8,250,0,25);
495 fESDList[iCut]->Add(hESDMotherInvMassPt[iCut]);
496 hESDMotherBackInvMassPt[iCut] = new TH2F("ESD_Background_InvMass_Pt","ESD_Background_InvMass_Pt",800,0,0.8,250,0,25);
497 fESDList[iCut]->Add(hESDMotherBackInvMassPt[iCut]);
498 hESDMotherInvMassEalpha[iCut] = new TH2F("ESD_Mother_InvMass_vs_E_alpha","ESD_Mother_InvMass_vs_E_alpha",800,0,0.8,250,0,25);
499 fESDList[iCut]->Add(hESDMotherInvMassEalpha[iCut]);
501 fMesonDCAList[iCut] = new TList();
502 fMesonDCAList[iCut]->SetName(Form("%s_%s Meson DCA tree",cutstring.Data(),cutstringMeson.Data()));
503 fMesonDCAList[iCut]->SetOwner(kTRUE);
504 fCutFolder[iCut]->Add(fMesonDCAList[iCut]);
506 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut] = new TTree("ESD_Mesons_InvMass_Pt_DcazMin_DcazMax_Flag","ESD_Mesons_InvMass_Pt_DcazMin_DcazMax_Flag");
507 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("InvMass",&fInvMass,"fInvMass/F");
508 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("Pt",&fPt,"fPt/F");
509 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("DcaZMin",&fDCAzGammaMin,"fDCAzGammaMin/F");
510 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("DcaZMax",&fDCAzGammaMax,"fDCAzGammaMax/F");
511 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("kind",&iFlag,"iFlag/b");
513 tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("mesonMCInfo",&iMesonMCInfo,"iMesonMCInfo/b");
515 fMesonDCAList[iCut]->Add(tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]);
522 if(fDoMesonAnalysis){
523 InitBack(); // Init Background Handler
528 fMCList = new TList*[fnCuts];
530 fTrueList = new TList*[fnCuts];
531 // Selected Header List
532 fHeaderNameList = new TList*[fnCuts];
533 hMCHeaders = new TH1I*[fnCuts];
534 hMCAllGammaPt = new TH1F*[fnCuts];
535 hMCDecayGammaPi0Pt = new TH1F*[fnCuts];
536 hMCDecayGammaRhoPt = new TH1F*[fnCuts];
537 hMCDecayGammaEtaPt = new TH1F*[fnCuts];
538 hMCDecayGammaOmegaPt = new TH1F*[fnCuts];
539 hMCDecayGammaEtapPt = new TH1F*[fnCuts];
540 hMCDecayGammaPhiPt = new TH1F*[fnCuts];
541 hMCDecayGammaSigmaPt = new TH1F*[fnCuts];
542 hMCConvGammaPt = new TH1F*[fnCuts];
543 hMCConvGammaRSPt = new TH1F*[fnCuts];
544 hESDTrueConvGammaPt = new TH1F*[fnCuts];
546 hESDCombinatorialPt = new TH2F*[fnCuts];
547 hESDTruePrimaryConvGammaPt = new TH1F*[fnCuts];
548 hESDTruePrimaryConvGammaESDPtMCPt = new TH2F*[fnCuts];
549 hESDTruePrimaryConvGammaRSESDPtMCPt = new TH2F*[fnCuts];
550 hESDTrueSecondaryConvGammaPt = new TH1F*[fnCuts];
552 hESDTrueSecondaryConvGammaFromXFromK0sPt = new TH1F*[fnCuts];
553 hESDTrueSecondaryConvGammaFromXFromLambdaPt = new TH1F*[fnCuts];
556 hMCConvGammaR = new TH1F*[fnCuts];
557 hMCConvGammaEta = new TH1F*[fnCuts];
558 hMCConvGammaRSR = new TH1F*[fnCuts];
559 hMCConvGammaRSEta = new TH1F*[fnCuts];
562 if(fDoMesonAnalysis){
563 hMCPi0Pt = new TH1F*[fnCuts];
564 hMCPi0WOWeightPt = new TH1F*[fnCuts];
565 hMCEtaPt = new TH1F*[fnCuts];
566 hMCPi0InAccPt = new TH1F*[fnCuts];
567 hMCEtaInAccPt = new TH1F*[fnCuts];
569 hESDTrueMotherInvMassPt = new TH2F*[fnCuts];
570 hESDTruePrimaryMotherInvMassPt = new TH2F*[fnCuts];
571 hESDTruePrimaryMotherW0WeightingInvMassPt = new TH2F*[fnCuts];
572 pESDTruePrimaryMotherWeightsInvMassPt = new TProfile2D*[fnCuts];
573 hESDTrueSecondaryMotherInvMassPt = new TH2F*[fnCuts];
574 hESDTrueSecondaryMotherFromK0sInvMassPt = new TH2F*[fnCuts];
575 hESDTrueSecondaryMotherFromEtaInvMassPt = new TH2F*[fnCuts];
577 hMCPi0PtY = new TH2F*[fnCuts];
578 hMCEtaPtY = new TH2F*[fnCuts];
579 hMCK0sPt = new TH1F*[fnCuts];
580 hMCK0sWOWeightPt = new TH1F*[fnCuts];
581 hMCK0sPtY = new TH2F*[fnCuts];
582 hESDTruePrimaryPi0MCPtResolPt = new TH2F*[fnCuts];
583 hESDTruePrimaryEtaMCPtResolPt = new TH2F*[fnCuts];
584 hESDTrueK0sWithPi0DaughterMCPt = new TH1F*[fnCuts];
585 hESDTrueEtaWithPi0DaughterMCPt = new TH1F*[fnCuts];
586 hESDTrueBckGGInvMassPt = new TH2F*[fnCuts];
587 hESDTrueBckContInvMassPt = new TH2F*[fnCuts];
588 hESDTrueMotherDalitzInvMassPt = new TH2F*[fnCuts];
589 fTrueMotherRapList = new TList*[fnCuts];
593 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
594 TString cutstring = ((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber();
595 TString cutstringMeson = "NoMesonCut";
596 if(fDoMesonAnalysis)cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
598 fMCList[iCut] = new TList();
599 fMCList[iCut]->SetName(Form("%s_%s MC histograms",cutstring.Data(),cutstringMeson.Data()));
600 fMCList[iCut]->SetOwner(kTRUE);
601 fCutFolder[iCut]->Add(fMCList[iCut]);
602 hMCHeaders[iCut] = new TH1I("MC_Headers","MC_Headers",20,0,20);
603 fMCList[iCut]->Add(hMCHeaders[iCut]);
604 hMCAllGammaPt[iCut] = new TH1F("MC_AllGamma_Pt","MC_AllGamma_Pt",250,0,25);
605 fMCList[iCut]->Add(hMCAllGammaPt[iCut]);
606 hMCDecayGammaPi0Pt[iCut] = new TH1F("MC_DecayGammaPi0_Pt","MC_DecayGammaPi0_Pt",250,0,25);
607 fMCList[iCut]->Add(hMCDecayGammaPi0Pt[iCut]);
608 hMCDecayGammaRhoPt[iCut] = new TH1F("MC_DecayGammaRho_Pt","MC_DecayGammaRho_Pt",250,0,25);
609 fMCList[iCut]->Add(hMCDecayGammaRhoPt[iCut]);
610 hMCDecayGammaEtaPt[iCut] = new TH1F("MC_DecayGammaEta_Pt","MC_DecayGammaEta_Pt",250,0,25);
611 fMCList[iCut]->Add(hMCDecayGammaEtaPt[iCut]);
612 hMCDecayGammaOmegaPt[iCut] = new TH1F("MC_DecayGammaOmega_Pt","MC_DecayGammaOmmega_Pt",250,0,25);
613 fMCList[iCut]->Add(hMCDecayGammaOmegaPt[iCut]);
614 hMCDecayGammaEtapPt[iCut] = new TH1F("MC_DecayGammaEtap_Pt","MC_DecayGammaEtap_Pt",250,0,25);
615 fMCList[iCut]->Add(hMCDecayGammaEtapPt[iCut]);
616 hMCDecayGammaPhiPt[iCut] = new TH1F("MC_DecayGammaPhi_Pt","MC_DecayGammaPhi_Pt",250,0,25);
617 fMCList[iCut]->Add(hMCDecayGammaPhiPt[iCut]);
618 hMCDecayGammaSigmaPt[iCut] = new TH1F("MC_DecayGammaSigma_Pt","MC_DecayGammaSigma_Pt",250,0,25);
619 fMCList[iCut]->Add(hMCDecayGammaSigmaPt[iCut]);
620 hMCConvGammaPt[iCut] = new TH1F("MC_ConvGamma_Pt","MC_ConvGamma_Pt",250,0,25);
621 fMCList[iCut]->Add(hMCConvGammaPt[iCut]);
622 hMCConvGammaRSPt[iCut] = new TH1F("MC_ConvGamma_RS_Pt","MC_ConvGamma_RS_Pt",250,0,25);
623 fMCList[iCut]->Add(hMCConvGammaRSPt[iCut]);
626 hMCConvGammaR[iCut] = new TH1F("MC_ConvGamma_R","MC_ConvGamma_R",800,0,200);
627 fMCList[iCut]->Add(hMCConvGammaR[iCut]);
628 hMCConvGammaEta[iCut] = new TH1F("MC_ConvGamma_Eta","MC_ConvGamma_Eta",100,-4,4);
629 fMCList[iCut]->Add(hMCConvGammaEta[iCut]);
630 hMCConvGammaRSR[iCut] = new TH1F("MC_ConvGamma_RS_R","MC_ConvGamma_RS_R",800,0,200);
631 fMCList[iCut]->Add(hMCConvGammaRSR[iCut]);
632 hMCConvGammaRSEta[iCut] = new TH1F("MC_ConvGamma_RS_Eta","MC_ConvGamma_RS_Eta",100,-4,4);
633 fMCList[iCut]->Add(hMCConvGammaRSEta[iCut]);
636 if(fDoMesonAnalysis){
637 hMCPi0Pt[iCut] = new TH1F("MC_Pi0_Pt","MC_Pi0_Pt",250,0,25);
638 hMCPi0Pt[iCut]->Sumw2();
639 fMCList[iCut]->Add(hMCPi0Pt[iCut]);
640 hMCPi0WOWeightPt[iCut] = new TH1F("MC_Pi0_WOWeights_Pt","MC_Pi0_WOWeights_Pt",250,0,25);
641 hMCPi0WOWeightPt[iCut]->Sumw2();
642 fMCList[iCut]->Add(hMCPi0WOWeightPt[iCut]);
644 hMCEtaPt[iCut] = new TH1F("MC_Eta_Pt","MC_Eta_Pt",250,0,25);
645 hMCEtaPt[iCut]->Sumw2();
646 fMCList[iCut]->Add(hMCEtaPt[iCut]);
647 hMCPi0InAccPt[iCut] = new TH1F("MC_Pi0InAcc_Pt","MC_Pi0InAcc_Pt",250,0,25);
648 hMCPi0InAccPt[iCut]->Sumw2();
649 fMCList[iCut]->Add(hMCPi0InAccPt[iCut]);
650 hMCEtaInAccPt[iCut] = new TH1F("MC_EtaInAcc_Pt","MC_EtaInAcc_Pt",250,0,25);
651 hMCEtaInAccPt[iCut]->Sumw2();
652 fMCList[iCut]->Add(hMCEtaInAccPt[iCut]);
654 hMCPi0PtY[iCut] = new TH2F("MC_Pi0_Pt_Y","MC_Pi0_Pt_Y",250,0,25,20,-1,1);
655 hMCPi0PtY[iCut]->Sumw2();
656 fMCList[iCut]->Add(hMCPi0PtY[iCut]);
657 hMCEtaPtY[iCut] = new TH2F("MC_Eta_Pt_Y","MC_Eta_Pt_Y",250,0,25,20,-1,1);
658 hMCEtaPtY[iCut]->Sumw2();
659 fMCList[iCut]->Add(hMCEtaPtY[iCut]);
660 hMCK0sPt[iCut] = new TH1F("MC_K0s_Pt","MC_K0s_Pt",250,0,25);
661 hMCK0sPt[iCut]->Sumw2();
662 fMCList[iCut]->Add(hMCK0sPt[iCut]);
663 hMCK0sWOWeightPt[iCut] = new TH1F("MC_K0s_WOWeights_Pt","MC_K0s_WOWeights_Pt",250,0,25);
664 hMCK0sWOWeightPt[iCut]->Sumw2();
665 fMCList[iCut]->Add(hMCK0sWOWeightPt[iCut]);
666 hMCK0sPtY[iCut] = new TH2F("MC_K0s_Pt_Y","MC_K0s_Pt_Y",250,0,25,20,-1,1);
667 hMCK0sPtY[iCut]->Sumw2();
668 fMCList[iCut]->Add(hMCK0sPtY[iCut]);
673 fTrueList[iCut] = new TList();
674 fTrueList[iCut]->SetName(Form("%s_%s True histograms",cutstring.Data(),cutstringMeson.Data()));
675 fTrueList[iCut]->SetOwner(kTRUE);
676 fCutFolder[iCut]->Add(fTrueList[iCut]);
678 hESDTrueConvGammaPt[iCut] = new TH1F("ESD_TrueConvGamma_Pt","ESD_TrueConvGamma_Pt",250,0,25);
679 fTrueList[iCut]->Add(hESDTrueConvGammaPt[iCut]);
681 hESDCombinatorialPt[iCut] = new TH2F("ESD_TrueCombinatorial_Pt","ESD_TrueCombinatorial_Pt",250,0,25,16,-0.5,15.5);
682 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 1,"Elec+Elec");
683 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 2,"Elec+Pion");
684 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 3,"Elec+Kaon");
685 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 4,"Elec+Proton");
686 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 5,"Elec+Muon");
687 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 6,"Pion+Pion");
688 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 7,"Pion+Kaon");
689 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 8,"Pion+Proton");
690 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 9,"Pion+Muon");
691 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(10,"Kaon+Kaon");
692 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(11,"Kaon+Proton");
693 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(12,"Kaon+Muon");
694 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(13,"Proton+Proton");
695 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(14,"Proton+Muon");
696 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(15,"Muon+Muon");
697 hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(16,"Rest");
698 fTrueList[iCut]->Add(hESDCombinatorialPt[iCut]);
699 hESDTruePrimaryConvGammaPt[iCut] = new TH1F("ESD_TruePrimaryConvGamma_Pt","ESD_TruePrimaryConvGamma_Pt",250,0,25);
700 fTrueList[iCut]->Add(hESDTruePrimaryConvGammaPt[iCut]);
701 hESDTrueSecondaryConvGammaPt[iCut] = new TH1F("ESD_TrueSecondaryConvGamma_Pt","ESD_TrueSecondaryConvGamma_Pt",250,0,25);
702 fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaPt[iCut]);
704 hESDTrueSecondaryConvGammaFromXFromK0sPt[iCut]
705 = new TH1F("ESD_TrueSecondaryConvGammaFromXFromK0s_Pt", "ESD_TrueSecondaryConvGammaFromXFromK0s_Pt",250,0,25);
706 fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaFromXFromK0sPt[iCut]);
707 hESDTrueSecondaryConvGammaFromXFromLambdaPt[iCut]
708 = new TH1F("ESD_TrueSecondaryConvGammaFromXFromLambda_Pt", "ESD_TrueSecondaryConvGammaFromXFromLambda_Pt",250,0,25);
709 fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaFromXFromLambdaPt[iCut]);
711 hESDTruePrimaryConvGammaESDPtMCPt[iCut] = new TH2F("ESD_TruePrimaryConvGammaESD_PtMCPt", "ESD_TruePrimaryConvGammaESD_PtMCPt",250,0,25,250,0,25);
712 fTrueList[iCut]->Add(hESDTruePrimaryConvGammaESDPtMCPt[iCut]);
713 hESDTruePrimaryConvGammaRSESDPtMCPt[iCut]
714 = new TH2F("ESD_TruePrimaryConvGammaESD_RS_PtMCPt", "ESD_TruePrimaryConvGammaESD_RS_PtMCPt",250,0,25,250,0,25);
715 fTrueList[iCut]->Add(hESDTruePrimaryConvGammaRSESDPtMCPt[iCut]);
717 if(fDoMesonAnalysis){
718 hESDTrueMotherInvMassPt[iCut] = new TH2F("ESD_TrueMother_InvMass_Pt","ESD_TrueMother_InvMass_Pt",800,0,0.8,250,0,25);
719 fTrueList[iCut]->Add(hESDTrueMotherInvMassPt[iCut]);
720 hESDTruePrimaryMotherInvMassPt[iCut]
721 = new TH2F("ESD_TruePrimaryMother_InvMass_Pt", "ESD_TruePrimaryMother_InvMass_Pt", 800,0,0.8,250,0,25);
722 hESDTruePrimaryMotherInvMassPt[iCut]->Sumw2();
723 fTrueList[iCut]->Add(hESDTruePrimaryMotherInvMassPt[iCut]);
724 hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]
725 = new TH2F("ESD_TruePrimaryMotherW0Weights_InvMass_Pt", "ESD_TruePrimaryMotherW0Weights_InvMass_Pt", 800,0,0.8,250,0,25);
726 hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]->Sumw2();
727 fTrueList[iCut]->Add(hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]);
728 pESDTruePrimaryMotherWeightsInvMassPt[iCut]
729 = new TProfile2D("ESD_TruePrimaryMotherWeights_InvMass_Pt", "ESD_TruePrimaryMotherWeights_InvMass_Pt", 800,0,0.8,250,0,25);
730 pESDTruePrimaryMotherWeightsInvMassPt[iCut]->Sumw2();
731 fTrueList[iCut]->Add(pESDTruePrimaryMotherWeightsInvMassPt[iCut]);
732 hESDTrueSecondaryMotherInvMassPt[iCut]
733 = new TH2F("ESD_TrueSecondaryMother_InvMass_Pt", "ESD_TrueSecondaryMother_InvMass_Pt", 800,0,0.8,250,0,25);
734 hESDTrueSecondaryMotherInvMassPt[iCut]->Sumw2();
735 fTrueList[iCut]->Add(hESDTrueSecondaryMotherInvMassPt[iCut]);
736 hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]
737 = new TH2F("ESD_TrueSecondaryMotherFromK0s_InvMass_Pt","ESD_TrueSecondaryMotherFromK0s_InvMass_Pt",800,0,0.8,250,0,25);
738 hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]->Sumw2();
739 fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]);
740 hESDTrueSecondaryMotherFromEtaInvMassPt[iCut]
741 = new TH2F("ESD_TrueSecondaryMotherFromEta_InvMass_Pt","ESD_TrueSecondaryMotherFromEta_InvMass_Pt",800,0,0.8,250,0,25);
742 fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromEtaInvMassPt[iCut]);
745 hESDTruePrimaryPi0MCPtResolPt[iCut] = new TH2F("ESD_TruePrimaryPi0_MCPt_ResolPt","ESD_TruePrimaryPi0_ResolPt_MCPt",500,0,25,1000,-1.,1.);
746 hESDTruePrimaryPi0MCPtResolPt[iCut]->Sumw2();
747 fTrueList[iCut]->Add(hESDTruePrimaryPi0MCPtResolPt[iCut]);
748 hESDTruePrimaryEtaMCPtResolPt[iCut] = new TH2F("ESD_TruePrimaryEta_MCPt_ResolPt","ESD_TruePrimaryEta_ResolPt_MCPt",500,0,25,1000,-1.,1.);
749 hESDTruePrimaryEtaMCPtResolPt[iCut]->Sumw2();
750 fTrueList[iCut]->Add(hESDTruePrimaryEtaMCPtResolPt[iCut]);
751 hESDTrueBckGGInvMassPt[iCut] = new TH2F("ESD_TrueBckGG_InvMass_Pt","ESD_TrueBckGG_InvMass_Pt",800,0,0.8,250,0,25);
752 fTrueList[iCut]->Add(hESDTrueBckGGInvMassPt[iCut]);
753 hESDTrueBckContInvMassPt[iCut] = new TH2F("ESD_TrueBckCont_InvMass_Pt","ESD_TrueBckCont_InvMass_Pt",800,0,0.8,250,0,25);
754 fTrueList[iCut]->Add(hESDTrueBckContInvMassPt[iCut]);
755 hESDTrueMotherDalitzInvMassPt[iCut] = new TH2F("ESD_TrueDalitz_InvMass_Pt","ESD_TrueDalitz_InvMass_Pt",800,0,0.8,250,0,25);
756 fTrueList[iCut]->Add(hESDTrueMotherDalitzInvMassPt[iCut]);
757 hESDTrueK0sWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueK0sWithPi0Daughter_MCPt","ESD_TrueK0sWithPi0Daughter_MCPt",250,0,25);
758 fTrueList[iCut]->Add(hESDTrueK0sWithPi0DaughterMCPt[iCut]);
759 hESDTrueEtaWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueEtaWithPi0Daughter_MCPt","ESD_TrueEtaWithPi0Daughter_MCPt",250,0,25);
760 fTrueList[iCut]->Add(hESDTrueEtaWithPi0DaughterMCPt[iCut]);
766 fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
767 if(!fV0Reader){printf("Error: No V0 Reader");return;} // GetV0Reader
770 if((AliConversionCuts*)fV0Reader->GetConversionCuts())
771 if(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms())
772 fOutputContainer->Add(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms());
774 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
775 if(!((AliConversionCuts*)fCutArray->At(iCut))) continue;
776 if(((AliConversionCuts*)fCutArray->At(iCut))->GetCutHistograms()){
777 fCutFolder[iCut]->Add(((AliConversionCuts*)fCutArray->At(iCut))->GetCutHistograms());
779 if(fDoMesonAnalysis){
780 if(!((AliConversionMesonCuts*)fMesonCutArray->At(iCut))) continue;
781 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms()){
782 fCutFolder[iCut]->Add(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms());
786 PostData(1, fOutputContainer);
788 //_____________________________________________________________________________
789 Bool_t AliAnalysisTaskGammaConvV1::Notify()
791 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
792 if(!((AliConversionCuts*)fCutArray->At(iCut))->GetDoEtaShift()){
793 if (((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift() != 0.){
794 printf("Error: Gamma Conversion Task %s :: Eta Shift not requested but set to %f, reset to 0. \n\n",
795 (((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber()).Data(),((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift());
796 ((AliConversionCuts*)fCutArray->At(iCut))->SetEtaShift(0.);
798 hEtaShift[iCut]->Fill(0.,0.);
799 continue; // No Eta Shift requested, continue
801 if(((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift() == 0.0){ // Eta Shift requested but not set, get shift automatically
802 ((AliConversionCuts*)fCutArray->At(iCut))->GetCorrectEtaShiftFromPeriod(fV0Reader->GetPeriodName());
803 hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift()));
804 ((AliConversionCuts*)fCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
808 printf(" Gamma Conversion Task %s :: Eta Shift Manually Set to %f \n\n",
809 (((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber()).Data(),((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift());
810 hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift()));
811 ((AliConversionCuts*)fCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
817 //_____________________________________________________________________________
818 void AliAnalysisTaskGammaConvV1::UserExec(Option_t *)
821 // Called for each event
823 Int_t eventQuality = ((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetEventQuality();
824 if(eventQuality == 2 || eventQuality == 3){// Event Not Accepted due to MC event missing or wrong trigger for V0ReaderV1
825 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
826 hNEvents[iCut]->Fill(eventQuality);
831 if(fIsMC) fMCEvent = MCEvent();
832 if(fMCEvent == NULL) fIsMC = kFALSE;
834 fInputEvent = InputEvent();
836 if(fIsMC && fInputEvent->IsA()==AliESDEvent::Class()){
837 fMCStack = fMCEvent->Stack();
838 if(fMCStack == NULL) fIsMC = kFALSE;
841 fReaderGammas = fV0Reader->GetReconstructedGammas(); // Gammas from default Cut
843 // ------------------- BeginEvent ----------------------------
845 if(fIsMC && fInputEvent->IsA()==AliAODEvent::Class() && !(fV0Reader->AreAODsRelabeled())){
846 RelabelAODPhotonCandidates(kTRUE); // In case of AODMC relabeling MC
847 fV0Reader->RelabelAODs(kTRUE);
849 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
851 Int_t eventNotAccepted =
852 ((AliConversionCuts*)fCutArray->At(iCut))
853 ->IsEventAcceptedByConversionCut(fV0Reader->GetConversionCuts(),fInputEvent,fMCEvent,fIsHeavyIon);
854 if(eventNotAccepted){
855 // cout << "event rejected due to wrong trigger: " <<eventNotAccepted << endl;
856 hNEvents[iCut]->Fill(eventNotAccepted); // Check Centrality, PileUp, SDD and V0AND --> Not Accepted => eventQuality = 1
860 if(eventQuality != 0){// Event Not Accepted
861 // cout << "event rejected due to: " <<eventQuality << endl;
862 hNEvents[iCut]->Fill(eventQuality);
866 hNEvents[iCut]->Fill(eventQuality); // Should be 0 here
867 hNGoodESDTracks[iCut]->Fill(fV0Reader->GetNumberOfPrimaryTracks());
868 if(((AliConversionCuts*)fCutArray->At(iCut))->IsHeavyIon() == 2) hNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A());
869 else hNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A()+fInputEvent->GetVZEROData()->GetMTotV0C());
872 // Process MC Particle
873 if(((AliConversionCuts*)fCutArray->At(iCut))->GetSignalRejection() != 0){
874 if(fInputEvent->IsA()==AliESDEvent::Class()){
875 ((AliConversionCuts*)fCutArray->At(iCut))->GetNotRejectedParticles(((AliConversionCuts*)fCutArray->At(iCut))->GetSignalRejection(),
876 ((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader(),
879 else if(fInputEvent->IsA()==AliAODEvent::Class()){
880 ((AliConversionCuts*)fCutArray->At(iCut))->GetNotRejectedParticles(((AliConversionCuts*)fCutArray->At(iCut))->GetSignalRejection(),
881 ((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader(),
885 if(((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader()){
886 for(Int_t i = 0;i<(((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader())->GetEntries();i++){
887 TString nameBin= hMCHeaders[iCut]->GetXaxis()->GetBinLabel(i+1);
888 if (nameBin.CompareTo("")== 0){
889 TString nameHeader = ((TObjString*)((TList*)((AliConversionCuts*)fCutArray->At(iCut))
890 ->GetAcceptedHeader())->At(i))->GetString();
891 hMCHeaders[iCut]->GetXaxis()->SetBinLabel(i+1,nameHeader.Data());
898 if(fInputEvent->IsA()==AliESDEvent::Class())
899 ProcessMCParticles();
900 if(fInputEvent->IsA()==AliAODEvent::Class())
901 ProcessAODMCParticles();
904 ProcessPhotonCandidates(); // Process this cuts gammas
906 hNGammaCandidates[iCut]->Fill(fGammaCandidates->GetEntries());
907 if(fDoMesonAnalysis){ // Meson Analysis
908 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseMCPSmearing() && fIsMC){
909 fUnsmearedPx = new Double_t[fGammaCandidates->GetEntries()]; // Store unsmeared Momenta
910 fUnsmearedPy = new Double_t[fGammaCandidates->GetEntries()];
911 fUnsmearedPz = new Double_t[fGammaCandidates->GetEntries()];
912 fUnsmearedE = new Double_t[fGammaCandidates->GetEntries()];
914 for(Int_t gamma=0;gamma<fGammaCandidates->GetEntries();gamma++){ // Smear the AODPhotons in MC
915 fUnsmearedPx[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Px();
916 fUnsmearedPy[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Py();
917 fUnsmearedPz[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Pz();
918 fUnsmearedE[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->E();
919 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->SmearParticle(dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(gamma)));
923 CalculatePi0Candidates(); // Combine Gammas
924 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->DoBGCalculation()){
925 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->BackgroundHandlerType() == 0){
926 CalculateBackground(); // Combinatorial Background
927 UpdateEventByEventData(); // Store Event for mixed Events
930 CalculateBackgroundRP(); // Combinatorial Background
931 fBGHandlerRP[iCut]->AddEvent(fGammaCandidates,fInputEvent); // Store Event for mixed Events
934 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseMCPSmearing() && fIsMC){
935 for(Int_t gamma=0;gamma<fGammaCandidates->GetEntries();gamma++){ // Smear the AODPhotons in MC
936 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPx(fUnsmearedPx[gamma]); // Reset Unsmeared Momenta
937 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPy(fUnsmearedPy[gamma]);
938 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPz(fUnsmearedPz[gamma]);
939 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetE(fUnsmearedE[gamma]);
941 delete[] fUnsmearedPx; fUnsmearedPx = 0x0;
942 delete[] fUnsmearedPy; fUnsmearedPy = 0x0;
943 delete[] fUnsmearedPz; fUnsmearedPz = 0x0;
944 delete[] fUnsmearedE; fUnsmearedE = 0x0;
947 fGammaCandidates->Clear(); // delete this cuts good gammas
950 if(fIsMC && fInputEvent->IsA()==AliAODEvent::Class() && !(fV0Reader->AreAODsRelabeled())){
951 RelabelAODPhotonCandidates(kFALSE); // Back to ESDMC Label
952 fV0Reader->RelabelAODs(kFALSE);
955 PostData(1, fOutputContainer);
957 //________________________________________________________________________
958 void AliAnalysisTaskGammaConvV1::ProcessPhotonCandidates()
961 TList *GammaCandidatesStepOne = new TList();
962 TList *GammaCandidatesStepTwo = new TList();
963 // Loop over Photon Candidates allocated by ReaderV1
964 for(Int_t i = 0; i < fReaderGammas->GetEntriesFast(); i++){
965 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(i);
966 if(!PhotonCandidate) continue;
967 fIsFromMBHeader = kTRUE;
968 if(fIsMC && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
969 Int_t isPosFromMBHeader
970 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
971 if(isPosFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
972 Int_t isNegFromMBHeader
973 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
974 if(isNegFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
976 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
979 if(!((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelected(PhotonCandidate,fInputEvent)) continue;
980 if(!((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut() &&
981 !((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){
982 fGammaCandidates->Add(PhotonCandidate); // if no second loop is required add to events good gammas
985 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
988 if(fInputEvent->IsA()==AliESDEvent::Class())
989 ProcessTruePhotonCandidates(PhotonCandidate);
990 if(fInputEvent->IsA()==AliAODEvent::Class())
991 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
993 if (fIsFromMBHeader && fDoPhotonQA){
994 if (fIsHeavyIon && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
995 fPtGamma = PhotonCandidate->Pt();
996 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
997 fRConvPhoton = PhotonCandidate->GetConversionRadius();
998 fEtaPhoton = PhotonCandidate->GetPhotonEta();
999 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1000 tESDConvGammaPtDcazCat[fiCut]->Fill();
1001 } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
1002 fPtGamma = PhotonCandidate->Pt();
1003 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1004 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1005 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1006 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1007 tESDConvGammaPtDcazCat[fiCut]->Fill();
1010 } else if(((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut()){ // if Shared Electron cut is enabled, Fill array, add to step one
1011 ((AliConversionCuts*)fCutArray->At(fiCut))->FillElectonLabelArray(PhotonCandidate,nV0);
1013 GammaCandidatesStepOne->Add(PhotonCandidate);
1014 } else if(!((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut() &&
1015 ((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){ // shared electron is disabled, step one not needed -> step two
1016 GammaCandidatesStepTwo->Add(PhotonCandidate);
1019 if(((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut()){
1020 for(Int_t i = 0;i<GammaCandidatesStepOne->GetEntries();i++){
1021 AliAODConversionPhoton *PhotonCandidate= (AliAODConversionPhoton*) GammaCandidatesStepOne->At(i);
1022 if(!PhotonCandidate) continue;
1023 fIsFromMBHeader = kTRUE;
1024 if(fMCStack && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
1025 Int_t isPosFromMBHeader
1026 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1027 Int_t isNegFromMBHeader
1028 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
1029 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1031 if(!((AliConversionCuts*)fCutArray->At(fiCut))->RejectSharedElectronV0s(PhotonCandidate,i,GammaCandidatesStepOne->GetEntries())) continue;
1032 if(!((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){ // To Colse v0s cut diabled, step two not needed
1033 fGammaCandidates->Add(PhotonCandidate);
1034 if(fIsFromMBHeader){
1035 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1039 if(fInputEvent->IsA()==AliESDEvent::Class())
1040 ProcessTruePhotonCandidates(PhotonCandidate);
1041 if(fInputEvent->IsA()==AliAODEvent::Class())
1042 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
1043 } else GammaCandidatesStepTwo->Add(PhotonCandidate); // Close v0s cut enabled -> add to list two
1045 if (fIsFromMBHeader && fDoPhotonQA){
1046 if (fIsHeavyIon && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
1047 fPtGamma = PhotonCandidate->Pt();
1048 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1049 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1050 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1051 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1052 tESDConvGammaPtDcazCat[fiCut]->Fill();
1053 } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
1054 fPtGamma = PhotonCandidate->Pt();
1055 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1056 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1057 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1058 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1059 tESDConvGammaPtDcazCat[fiCut]->Fill();
1064 if(((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){
1065 for(Int_t i = 0;i<GammaCandidatesStepTwo->GetEntries();i++){
1066 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) GammaCandidatesStepTwo->At(i);
1067 if(!PhotonCandidate) continue;
1068 fIsFromMBHeader = kTRUE;
1069 if(fMCStack && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
1070 Int_t isPosFromMBHeader
1071 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1072 Int_t isNegFromMBHeader
1073 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
1074 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1076 if(!((AliConversionCuts*)fCutArray->At(fiCut))->RejectToCloseV0s(PhotonCandidate,GammaCandidatesStepTwo,i)) continue;
1077 fGammaCandidates->Add(PhotonCandidate); // Add gamma to current cut TList
1078 if(fIsFromMBHeader){
1079 hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1082 if(fInputEvent->IsA()==AliESDEvent::Class())
1083 ProcessTruePhotonCandidates(PhotonCandidate);
1084 if(fInputEvent->IsA()==AliAODEvent::Class())
1085 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
1087 if (fIsFromMBHeader){
1088 if (fIsHeavyIon == 1 && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
1089 fPtGamma = PhotonCandidate->Pt();
1090 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1091 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1092 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1093 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1094 tESDConvGammaPtDcazCat[fiCut]->Fill();
1095 } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
1096 fPtGamma = PhotonCandidate->Pt();
1097 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1098 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1099 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1100 iCatPhoton = PhotonCandidate->GetPhotonQuality();
1101 tESDConvGammaPtDcazCat[fiCut]->Fill();
1107 delete GammaCandidatesStepOne;
1108 GammaCandidatesStepOne = 0x0;
1109 delete GammaCandidatesStepTwo;
1110 GammaCandidatesStepTwo = 0x0;
1113 //________________________________________________________________________
1114 void AliAnalysisTaskGammaConvV1::ProcessTruePhotonCandidatesAOD(AliAODConversionPhoton *TruePhotonCandidate)
1117 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1118 AliAODMCParticle *posDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelPositive());
1119 AliAODMCParticle *negDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelNegative());
1122 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
1123 Int_t pdgCode[2] = {abs(posDaughter->GetPdgCode()),abs(negDaughter->GetPdgCode())};
1125 if(posDaughter->GetMother() != negDaughter->GetMother()){
1126 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1130 else if(posDaughter->GetMother() == -1){
1131 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1136 if(pdgCode[0]!=11 || pdgCode[1]!=11){
1138 return; //One Particle is not a electron
1140 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()){
1142 return; // Same Charge
1145 if(((posDaughter->GetMCProcessCode())) != 5 || ((negDaughter->GetMCProcessCode())) != 5){
1147 return;// check if the daughters come from a conversion
1149 // STILL A BUG IN ALIROOT >>8 HAS TPO BE REMOVED AFTER FIX
1151 AliAODMCParticle *Photon = (AliAODMCParticle*) AODMCTrackArray->At(posDaughter->GetMother());
1152 if(Photon->GetPdgCode() != 22){
1154 return; // Mother is no Photon
1157 if(fIsFromMBHeader)hESDTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1159 if(Photon->IsPrimary()){
1160 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
1161 if(fIsFromMBHeader){
1163 hESDTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1164 hESDTruePrimaryConvGammaRSESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
1166 hESDTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
1167 // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
1170 if(fIsFromMBHeader){
1171 hESDTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1173 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
1174 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 3122){
1176 hESDTrueSecondaryConvGammaFromXFromLambdaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1178 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
1179 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 310){
1181 hESDTrueSecondaryConvGammaFromXFromK0sPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1183 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
1184 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 221){
1191 //________________________________________________________________________
1192 void AliAnalysisTaskGammaConvV1::ProcessTruePhotonCandidates(AliAODConversionPhoton *TruePhotonCandidate)
1194 // Process True Photons
1195 TParticle *posDaughter = TruePhotonCandidate->GetPositiveMCDaughter(fMCStack);
1196 TParticle *negDaughter = TruePhotonCandidate->GetNegativeMCDaughter(fMCStack);
1200 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
1201 Int_t pdgCode[2] = {abs(posDaughter->GetPdgCode()),abs(negDaughter->GetPdgCode())};
1203 if(posDaughter->GetMother(0) != negDaughter->GetMother(0)){
1204 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1207 else if(posDaughter->GetMother(0) == -1){
1208 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1212 if(pdgCode[0]!=11 || pdgCode[1]!=11) return; //One Particle is not a electron
1214 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()) return; // Same Charge
1216 if(posDaughter->GetUniqueID() != 5 || negDaughter->GetUniqueID() !=5) return;// check if the daughters come from a conversion
1218 TParticle *Photon = TruePhotonCandidate->GetMCParticle(fMCStack);
1219 if(Photon->GetPdgCode() != 22) return; // Mother is no Photon
1222 if(fIsFromMBHeader)hESDTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1224 if(posDaughter->GetMother(0) <= fMCStack->GetNprimary()){
1225 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
1226 if(fIsFromMBHeader){
1228 hESDTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1229 hESDTruePrimaryConvGammaRSESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
1231 hESDTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
1232 // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
1235 if(fIsFromMBHeader){
1237 hESDTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1238 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
1239 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 3122){
1240 hESDTrueSecondaryConvGammaFromXFromLambdaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1243 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
1244 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 310){
1245 hESDTrueSecondaryConvGammaFromXFromK0sPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1248 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
1249 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 221){
1255 //________________________________________________________________________
1256 void AliAnalysisTaskGammaConvV1::ProcessAODMCParticles()
1259 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1261 // Loop over all primary MC particle
1262 for(Int_t i = 0; i < AODMCTrackArray->GetEntriesFast(); i++) {
1264 AliAODMCParticle* particle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(i));
1265 if (!particle) continue;
1266 if (!particle->IsPrimary()) continue;
1268 Bool_t mcIsFromMB = kTRUE;
1269 Int_t isMCFromMBHeader = -1;
1270 if(((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
1272 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
1273 if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1274 if(isMCFromMBHeader != 2) mcIsFromMB = kFALSE;
1277 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kFALSE)){
1278 hMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
1279 if(particle->GetMother() >-1){ // Meson Decay Gamma
1280 switch((static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetMother())))->GetPdgCode()){
1282 hMCDecayGammaPi0Pt[fiCut]->Fill(particle->Pt());
1285 hMCDecayGammaRhoPt[fiCut]->Fill(particle->Pt());
1288 hMCDecayGammaEtaPt[fiCut]->Fill(particle->Pt());
1291 hMCDecayGammaOmegaPt[fiCut]->Fill(particle->Pt());
1294 hMCDecayGammaEtapPt[fiCut]->Fill(particle->Pt());
1297 hMCDecayGammaPhiPt[fiCut]->Fill(particle->Pt());
1300 hMCDecayGammaSigmaPt[fiCut]->Fill(particle->Pt());
1305 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kTRUE)){
1307 for(Int_t daughterIndex=particle->GetDaughter(0);daughterIndex<=particle->GetDaughter(1);daughterIndex++){
1308 AliAODMCParticle *tmpDaughter = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(daughterIndex));
1309 if(!tmpDaughter) continue;
1310 if(abs(tmpDaughter->GetPdgCode()) == 11){
1311 rConv = sqrt( (tmpDaughter->Xv()*tmpDaughter->Xv()) + (tmpDaughter->Yv()*tmpDaughter->Yv()) );
1314 hMCConvGammaPt[fiCut]->Fill(particle->Pt());
1316 hMCConvGammaR[fiCut]->Fill(rConv);
1317 hMCConvGammaEta[fiCut]->Fill(particle->Eta());
1320 hMCConvGammaRSPt[fiCut]->Fill(particle->Pt());
1322 hMCConvGammaRSR[fiCut]->Fill(rConv);
1323 hMCConvGammaRSEta[fiCut]->Fill(particle->Eta());
1327 // Converted MC Gamma
1328 if(fDoMesonAnalysis){
1329 if(particle->GetPdgCode() == 310 && fDoMesonQA){
1330 Double_t mesonY = 10.;
1331 if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
1332 mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1334 mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))
1335 -((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1337 Float_t weightedK0s= 1;
1338 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1339 if (particle->Pt()>0.005){
1340 weightedK0s= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
1341 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1344 hMCK0sPt[fiCut]->Fill(particle->Pt(),weightedK0s);
1345 hMCK0sWOWeightPt[fiCut]->Fill(particle->Pt());
1346 hMCK0sPtY[fiCut]->Fill(particle->Pt(),mesonY,weightedK0s);
1348 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
1349 ->MesonIsSelectedAODMC(particle,AODMCTrackArray,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
1350 AliAODMCParticle* daughter0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(0)));
1351 AliAODMCParticle* daughter1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(1)));
1352 Float_t weighted= 1;
1353 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1354 if (particle->Pt()>0.005){
1355 weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
1356 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1359 Double_t mesonY = 10.;
1360 if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
1361 mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1363 mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))
1364 -((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1367 if(particle->GetPdgCode() == 111){
1368 hMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
1369 hMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
1370 if (fDoMesonQA) hMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1371 } else if(particle->GetPdgCode() == 221){
1372 hMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
1373 if (fDoMesonQA) hMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1376 // Check the acceptance for both gammas
1377 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter0,AODMCTrackArray,kFALSE) &&
1378 ((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter1,AODMCTrackArray,kFALSE) ){
1380 if(particle->GetPdgCode() == 111){
1381 hMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
1382 } else if(particle->GetPdgCode() == 221){
1383 hMCEtaInAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Eta with gamma in acc
1390 //________________________________________________________________________
1391 void AliAnalysisTaskGammaConvV1::ProcessMCParticles()
1393 // Loop over all primary MC particle
1394 for(Int_t i = 0; i < fMCStack->GetNprimary(); i++) {
1395 TParticle* particle = (TParticle *)fMCStack->Particle(i);
1396 if (!particle) continue;
1398 Bool_t mcIsFromMB = kTRUE;
1399 Int_t isMCFromMBHeader = -1;
1400 if(((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
1402 = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
1403 if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1404 if(isMCFromMBHeader != 2) mcIsFromMB = kFALSE;
1407 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kFALSE)){
1408 hMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
1409 if(particle->GetMother(0) >-1){ // Meson Decay Gamma
1410 switch(fMCStack->Particle(particle->GetMother(0))->GetPdgCode()){
1412 hMCDecayGammaPi0Pt[fiCut]->Fill(particle->Pt());
1415 hMCDecayGammaRhoPt[fiCut]->Fill(particle->Pt());
1418 hMCDecayGammaEtaPt[fiCut]->Fill(particle->Pt());
1421 hMCDecayGammaOmegaPt[fiCut]->Fill(particle->Pt());
1424 hMCDecayGammaEtapPt[fiCut]->Fill(particle->Pt());
1427 hMCDecayGammaPhiPt[fiCut]->Fill(particle->Pt());
1430 hMCDecayGammaSigmaPt[fiCut]->Fill(particle->Pt());
1435 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kTRUE)){
1436 hMCConvGammaPt[fiCut]->Fill(particle->Pt());
1438 hMCConvGammaR[fiCut]->Fill(((TParticle*)fMCStack->Particle(particle->GetFirstDaughter()))->R());
1439 hMCConvGammaEta[fiCut]->Fill(particle->Eta());
1442 hMCConvGammaRSPt[fiCut]->Fill(particle->Pt());
1444 hMCConvGammaRSR[fiCut]->Fill(((TParticle*)fMCStack->Particle(particle->GetFirstDaughter()))->R());
1445 hMCConvGammaRSEta[fiCut]->Fill(particle->Eta());
1448 } // Converted MC Gamma
1449 if(fDoMesonAnalysis){
1450 if(particle->GetPdgCode() == 310 && fDoMesonQA){
1451 Double_t mesonY = 10.;
1452 if(particle->Energy() - particle->Pz() == 0 || particle->Energy() + particle->Pz() == 0){
1453 mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1455 mesonY = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())))
1456 -((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1458 Float_t weightedK0s= 1;
1459 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1460 if (particle->Pt()>0.005){
1461 weightedK0s= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
1462 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1465 hMCK0sPt[fiCut]->Fill(particle->Pt(),weightedK0s);
1466 hMCK0sWOWeightPt[fiCut]->Fill(particle->Pt());
1467 hMCK0sPtY[fiCut]->Fill(particle->Pt(),mesonY,weightedK0s);
1469 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
1470 ->MesonIsSelectedMC(particle,fMCStack,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
1471 TParticle* daughter0 = (TParticle*)fMCStack->Particle(particle->GetFirstDaughter());
1472 TParticle* daughter1 = (TParticle*)fMCStack->Particle(particle->GetLastDaughter());
1474 Float_t weighted= 1;
1475 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
1476 if (particle->Pt()>0.005){
1477 weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
1478 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1481 Double_t mesonY = 10.;
1482 if(particle->Energy() - particle->Pz() == 0 || particle->Energy() + particle->Pz() == 0){
1483 mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1485 mesonY = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())))
1486 -((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
1489 if(particle->GetPdgCode() == 111){
1490 hMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
1491 hMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
1492 if (fDoMesonQA) hMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1493 } else if(particle->GetPdgCode() == 221){
1494 hMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
1495 if (fDoMesonQA) hMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
1498 // Check the acceptance for both gammas
1499 if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter0,fMCStack,kFALSE) &&
1500 ((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter1,fMCStack,kFALSE) ){
1502 if(particle->GetPdgCode() == 111){
1503 hMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
1504 } else if(particle->GetPdgCode() == 221){
1505 hMCEtaInAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Eta with gamma in acc
1512 //________________________________________________________________________
1513 void AliAnalysisTaskGammaConvV1::CalculatePi0Candidates(){
1515 // Conversion Gammas
1516 if(fGammaCandidates->GetEntries()>1){
1517 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries()-1;firstGammaIndex++){
1518 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
1519 if (gamma0==NULL) continue;
1520 for(Int_t secondGammaIndex=firstGammaIndex+1;secondGammaIndex<fGammaCandidates->GetEntries();secondGammaIndex++){
1521 AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(secondGammaIndex));
1522 //Check for same Electron ID
1523 if (gamma1==NULL) continue;
1524 if(gamma0->GetTrackLabelPositive() == gamma1->GetTrackLabelPositive() ||
1525 gamma0->GetTrackLabelNegative() == gamma1->GetTrackLabelNegative() ||
1526 gamma0->GetTrackLabelNegative() == gamma1->GetTrackLabelPositive() ||
1527 gamma0->GetTrackLabelPositive() == gamma1->GetTrackLabelNegative() ) continue;
1529 AliAODConversionMother *pi0cand = new AliAODConversionMother(gamma0,gamma1);
1530 pi0cand->SetLabels(firstGammaIndex,secondGammaIndex);
1532 pi0cand->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
1533 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
1534 ->MesonIsSelected(pi0cand,kTRUE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()))){
1535 hESDMotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
1536 if(pi0cand->GetAlpha()<0.1)
1537 hESDMotherInvMassEalpha[fiCut]->Fill(pi0cand->M(),pi0cand->E());
1538 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->DoBGCalculation()){
1542 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->BackgroundHandlerType() == 0){
1543 zbin = fBGHandler[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
1544 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1545 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
1547 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
1551 zbin = fBGHandlerRP[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
1552 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1553 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
1555 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
1558 Double_t sparesFill[4] = {pi0cand->M(),pi0cand->Pt(),(Double_t)zbin,(Double_t)mbin};
1559 sESDMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
1564 if(fInputEvent->IsA()==AliESDEvent::Class())
1565 ProcessTrueMesonCandidates(pi0cand,gamma0,gamma1);
1566 if(fInputEvent->IsA()==AliAODEvent::Class())
1567 ProcessTrueMesonCandidatesAOD(pi0cand,gamma0,gamma1);
1570 fInvMass = pi0cand->M();
1571 fPt = pi0cand->Pt();
1572 if (abs(gamma0->GetDCAzToPrimVtx()) < abs(gamma1->GetDCAzToPrimVtx())){
1573 fDCAzGammaMin = gamma0->GetDCAzToPrimVtx();
1574 fDCAzGammaMax = gamma1->GetDCAzToPrimVtx();
1576 fDCAzGammaMin = gamma1->GetDCAzToPrimVtx();
1577 fDCAzGammaMax = gamma0->GetDCAzToPrimVtx();
1579 iFlag = pi0cand->GetMesonQuality();
1580 // cout << "gamma 0: " << gamma0->GetV0Index()<< "\t" << gamma0->GetPx() << "\t" << gamma0->GetPy() << "\t" << gamma0->GetPz() << "\t" << endl;
1581 // cout << "gamma 1: " << gamma1->GetV0Index()<< "\t"<< gamma1->GetPx() << "\t" << gamma1->GetPy() << "\t" << gamma1->GetPz() << "\t" << endl;
1582 // cout << "pi0: "<<fInvMass << "\t" << fPt <<"\t" << fDCAzGammaMin << "\t" << fDCAzGammaMax << "\t" << (Int_t)iFlag << "\t" << (Int_t)iMesonMCInfo <<endl;
1583 if (fIsHeavyIon == 1 && fPt > 0.399 && fPt < 20. ) {
1584 if (fInvMass > 0.08 && fInvMass < 0.2) tESDMesonsInvMassPtDcazMinDcazMaxFlag[fiCut]->Fill();
1585 if ((fInvMass > 0.45 && fInvMass < 0.6) && (fPt > 0.999 && fPt < 20.) )tESDMesonsInvMassPtDcazMinDcazMaxFlag[fiCut]->Fill();
1586 } else if (fPt > 0.299 && fPt < 20. ) {
1587 if ( (fInvMass > 0.08 && fInvMass < 0.2) || (fInvMass > 0.45 && fInvMass < 0.6)) tESDMesonsInvMassPtDcazMinDcazMaxFlag[fiCut]->Fill();
1597 //______________________________________________________________________
1598 void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidates(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1)
1600 // Process True Mesons
1601 AliStack *MCStack = fMCEvent->Stack();
1603 if(TrueGammaCandidate0->GetV0Index()<fInputEvent->GetNumberOfV0s()){
1604 Bool_t isTruePi0 = kFALSE;
1605 Bool_t isTrueEta = kFALSE;
1606 Int_t gamma0MCLabel = TrueGammaCandidate0->GetMCParticleLabel(MCStack);
1607 Int_t gamma0MotherLabel = -1;
1608 if(gamma0MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1609 // Daughters Gamma 0
1610 TParticle * negativeMC = (TParticle*)TrueGammaCandidate0->GetNegativeMCDaughter(MCStack);
1611 TParticle * positiveMC = (TParticle*)TrueGammaCandidate0->GetPositiveMCDaughter(MCStack);
1612 TParticle * gammaMC0 = (TParticle*)MCStack->Particle(gamma0MCLabel);
1613 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
1614 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
1615 if(gammaMC0->GetPdgCode() == 22){ // ... with Gamma Mother
1616 gamma0MotherLabel=gammaMC0->GetFirstMother();
1619 if(gammaMC0->GetPdgCode() ==111){ // Conversion but Pi0 Mother
1620 gamma0MotherLabel=-111;
1622 if(gammaMC0->GetPdgCode() ==221){ // Conversion but Eta Mother
1623 gamma0MotherLabel=-221;
1627 if(TrueGammaCandidate1->GetV0Index()<fInputEvent->GetNumberOfV0s()){
1628 Int_t gamma1MCLabel = TrueGammaCandidate1->GetMCParticleLabel(MCStack);
1629 Int_t gamma1MotherLabel = -1;
1630 if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1631 // Daughters Gamma 1
1632 TParticle * negativeMC = (TParticle*)TrueGammaCandidate1->GetNegativeMCDaughter(MCStack);
1633 TParticle * positiveMC = (TParticle*)TrueGammaCandidate1->GetPositiveMCDaughter(MCStack);
1634 TParticle * gammaMC1 = (TParticle*)MCStack->Particle(gamma1MCLabel);
1635 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
1636 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
1637 if(gammaMC1->GetPdgCode() == 22){ // ... with Gamma Mother
1638 gamma1MotherLabel=gammaMC1->GetFirstMother();
1641 if(gammaMC1->GetPdgCode() ==111){ // Conversion but Pi0 Mother
1642 gamma1MotherLabel=-111;
1644 if(gammaMC1->GetPdgCode() ==221){ // Conversion but Eta Mother
1645 gamma1MotherLabel=-221;
1649 if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
1650 if(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 111){
1653 if(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 221){
1657 if(isTruePi0 || isTrueEta){// True Pion or Eta
1658 hESDTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1659 if(gamma0MotherLabel >= MCStack->GetNprimary()){ // Secondary Meson
1660 Int_t secMotherLabel = ((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetMother(0);
1661 Float_t weightedSec= 1;
1662 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, fMCStack, fInputEvent) && MCStack->Particle(secMotherLabel)->GetPdgCode()==310){
1663 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
1664 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1666 hESDTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
1668 if (secMotherLabel >-1){
1669 if(MCStack->Particle(secMotherLabel)->GetPdgCode()==310){
1671 hESDTrueSecondaryMotherFromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
1672 if (fDoMesonQA)hESDTrueK0sWithPi0DaughterMCPt[fiCut]
1673 ->Fill(MCStack->Particle(secMotherLabel)->Pt());
1675 if(MCStack->Particle(secMotherLabel)->GetPdgCode()==221){
1677 hESDTrueSecondaryMotherFromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
1678 if (fDoMesonQA)hESDTrueEtaWithPi0DaughterMCPt[fiCut]
1679 ->Fill(MCStack->Particle(secMotherLabel)->Pt());
1682 }else{ // Only primary pi0 for efficiency calculation
1684 Float_t weighted= 1;
1685 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, fMCStack, fInputEvent)){
1686 if (((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt()>0.005){
1687 weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, fMCStack, fInputEvent);
1688 // cout << "rec \t " <<gamma1MotherLabel << "\t" << weighted << endl;
1691 hESDTruePrimaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
1692 hESDTruePrimaryMotherW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1693 pESDTruePrimaryMotherWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
1695 if(isTruePi0){ // Only primary pi0 for resolution
1696 hESDTruePrimaryPi0MCPtResolPt[fiCut]->Fill(((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
1698 if (isTrueEta){ // Only primary eta for resolution
1699 hESDTruePrimaryEtaMCPtResolPt[fiCut]->Fill(((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
1704 else if(!isTruePi0 && !isTrueEta && fDoMesonQA){ // Background
1705 if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
1706 hESDTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1708 } else { // No photon or without mother
1709 hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1711 if((gamma0MotherLabel==-111 || gamma1MotherLabel==-111 || gamma0MotherLabel==-221 || gamma1MotherLabel==-221) ){
1714 hESDTrueMotherDalitzInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1720 //______________________________________________________________________
1721 void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidatesAOD(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1)
1724 // Process True Mesons
1725 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1726 Bool_t isTruePi0 = kFALSE;
1727 Bool_t isTrueEta = kFALSE;
1729 AliAODMCParticle *positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelPositive()));
1730 AliAODMCParticle *negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelNegative()));
1733 Int_t gamma0MCLabel = -1;
1734 Int_t gamma0MotherLabel = -1;
1735 if(!positiveMC||!negativeMC)
1738 if(positiveMC->GetMother()>-1&&(negativeMC->GetMother() == positiveMC->GetMother())){
1739 gamma0MCLabel = positiveMC->GetMother();
1742 if(gamma0MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1743 // Daughters Gamma 0
1744 AliAODMCParticle * gammaMC0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MCLabel));
1745 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
1746 if(((positiveMC->GetMCProcessCode())) == 5 && ((negativeMC->GetMCProcessCode())) == 5){ // ... From Conversion ... // STILL A BUG IN ALIROOT >>8 HAS TPO BE REMOVED AFTER FIX
1747 if(gammaMC0->GetPdgCode() == 22){ // ... with Gamma Mother
1748 gamma0MotherLabel=gammaMC0->GetMother();
1751 if(gammaMC0->GetPdgCode() ==111){ // Conversion but Pi0 Mother
1752 gamma0MotherLabel=-111;
1754 if(gammaMC0->GetPdgCode() ==221){ // Conversion but Eta Mother
1755 gamma0MotherLabel=-221;
1759 positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate1->GetMCLabelPositive()));
1760 negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate1->GetMCLabelNegative()));
1762 Int_t gamma1MCLabel = -1;
1763 Int_t gamma1MotherLabel = -1;
1764 if(!positiveMC||!negativeMC)
1767 if(positiveMC->GetMother()>-1&&(negativeMC->GetMother() == positiveMC->GetMother())){
1768 gamma1MCLabel = positiveMC->GetMother();
1770 if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
1771 // Daughters Gamma 1
1772 AliAODMCParticle * gammaMC1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MCLabel));
1773 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
1774 if(((positiveMC->GetMCProcessCode())) == 5 && ((negativeMC->GetMCProcessCode())) == 5){ // ... From Conversion ... // STILL A BUG IN ALIROOT >>8 HAS TPO BE REMOVED AFTER FIX
1775 if(gammaMC1->GetPdgCode() == 22){ // ... with Gamma Mother
1776 gamma1MotherLabel=gammaMC1->GetMother();
1779 if(gammaMC1->GetPdgCode() ==111){ // Conversion but Pi0 Mother
1780 gamma1MotherLabel=-111;
1782 if(gammaMC1->GetPdgCode() ==221){ // Conversion but Eta Mother
1783 gamma1MotherLabel=-221;
1787 if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
1788 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 111){
1791 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 221){
1795 if(isTruePi0 || isTrueEta){// True Pion or Eta
1796 hESDTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1798 if(!(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MotherLabel))->IsPrimary())){ // Secondary Meson
1799 Int_t secMotherLabel = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetMother();
1800 Float_t weightedSec= 1;
1801 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, 0x0, fInputEvent) && static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
1802 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
1803 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
1805 hESDTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
1807 if (secMotherLabel >-1){
1808 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
1810 hESDTrueSecondaryMotherFromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
1811 if (fDoMesonQA)hESDTrueK0sWithPi0DaughterMCPt[fiCut]
1812 ->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
1814 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==221){
1816 hESDTrueSecondaryMotherFromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
1817 if (fDoMesonQA)hESDTrueEtaWithPi0DaughterMCPt[fiCut]
1818 ->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
1821 }else{ // Only primary pi0 for efficiency calculation
1822 Float_t weighted= 1;
1824 if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, 0x0, fInputEvent)){
1825 if (static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt()>0.005){
1826 weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, 0x0, fInputEvent);
1827 // cout << "rec \t " <<gamma1MotherLabel << "\t" << weighted << endl;
1830 hESDTruePrimaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
1831 hESDTruePrimaryMotherW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1832 pESDTruePrimaryMotherWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
1835 if(isTruePi0){ // Only primary pi0 for resolution
1836 hESDTruePrimaryPi0MCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
1837 (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
1839 if (isTrueEta){ // Only primary eta for resolution
1840 hESDTruePrimaryEtaMCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
1841 (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
1846 else if(!isTruePi0 && !isTrueEta && fDoMesonQA){ // Background
1847 if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
1849 hESDTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1850 } else { // No photon or without mother
1851 hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1853 if((gamma0MotherLabel==-111 || gamma1MotherLabel==-111 || gamma0MotherLabel==-221 || gamma1MotherLabel==-221) ){
1856 hESDTrueMotherDalitzInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
1860 //________________________________________________________________________
1861 void AliAnalysisTaskGammaConvV1::CalculateBackground(){
1863 Int_t zbin= fBGHandler[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
1866 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1867 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
1869 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
1872 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseRotationMethod()){
1874 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
1875 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
1876 for(Int_t iCurrent2=iCurrent+1;iCurrent2<fGammaCandidates->GetEntries();iCurrent2++){
1877 for(Int_t nRandom=0;nRandom<((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents();nRandom++){
1878 AliAODConversionPhoton currentEventGoodV02 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent2));
1880 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->DoBGProbability()){
1881 AliAODConversionMother *backgroundCandidateProb = new AliAODConversionMother(¤tEventGoodV0,¤tEventGoodV02);
1882 Double_t massBGprob = backgroundCandidateProb->M();
1883 if(massBGprob>0.1 && massBGprob<0.14){
1884 if(fRandom.Rndm()>fBGHandler[fiCut]->GetBGProb(zbin,mbin)){
1885 delete backgroundCandidateProb;
1889 delete backgroundCandidateProb;
1890 backgroundCandidateProb = 0x0;
1893 RotateParticle(¤tEventGoodV02);
1894 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,¤tEventGoodV02);
1895 backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
1896 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
1897 ->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()))){
1898 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
1899 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
1900 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
1902 delete backgroundCandidate;
1903 backgroundCandidate = 0x0;
1908 AliGammaConversionAODBGHandler::GammaConversionVertex *bgEventVertex = NULL;
1910 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1911 for(Int_t nEventsInBG=0;nEventsInBG<fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
1912 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
1913 if(fMoveParticleAccordingToVertex == kTRUE){
1914 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
1917 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
1918 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
1919 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
1920 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
1921 if(fMoveParticleAccordingToVertex == kTRUE){
1922 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
1925 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
1926 backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
1927 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
1928 ->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()))){
1929 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
1930 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
1931 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
1933 delete backgroundCandidate;
1934 backgroundCandidate = 0x0;
1940 for(Int_t nEventsInBG=0;nEventsInBG <fBGHandler[fiCut]->GetNBGEvents();nEventsInBG++){
1941 AliGammaConversionAODVector *previousEventV0s = fBGHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
1942 if(previousEventV0s){
1943 if(fMoveParticleAccordingToVertex == kTRUE){
1944 bgEventVertex = fBGHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
1946 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
1947 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
1948 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
1950 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
1952 if(fMoveParticleAccordingToVertex == kTRUE){
1953 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
1956 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(¤tEventGoodV0,&previousGoodV0);
1957 backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
1958 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
1959 ->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()))){
1960 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
1961 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
1962 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
1964 delete backgroundCandidate;
1965 backgroundCandidate = 0x0;
1973 //________________________________________________________________________
1974 void AliAnalysisTaskGammaConvV1::CalculateBackgroundRP(){
1976 Int_t zbin= fBGHandlerRP[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
1978 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
1979 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
1981 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
1986 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseRotationMethod()){
1987 // Correct for the number of rotations
1988 // BG is for rotation the same, except for factor NRotations
1989 Double_t weight=1./Double_t(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents());
1991 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries();firstGammaIndex++){
1993 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
1994 if (gamma0==NULL) continue;
1995 for(Int_t secondGammaIndex=firstGammaIndex+1;secondGammaIndex<fGammaCandidates->GetEntries();secondGammaIndex++){
1996 AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(secondGammaIndex));
1997 if (gamma1 == NULL) continue;
1998 if(!((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelected(gamma1,fInputEvent))continue;
1999 for(Int_t nRandom=0;nRandom<((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents();nRandom++){
2001 RotateParticle(gamma1);
2003 AliAODConversionMother backgroundCandidate(gamma0,gamma1);
2004 backgroundCandidate.CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2005 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2006 ->MesonIsSelected(&backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
2007 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate.M(),backgroundCandidate.Pt());
2008 Double_t sparesFill[4] = {backgroundCandidate.M(),backgroundCandidate.Pt(),(Double_t)zbin,(Double_t)mbin};
2009 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,weight);
2017 for(Int_t nEventsInBG=0;nEventsInBG <fBGHandlerRP[fiCut]->GetNBGEvents(fGammaCandidates,fInputEvent);nEventsInBG++){
2019 AliGammaConversionPhotonVector *previousEventGammas = fBGHandlerRP[fiCut]->GetBGGoodGammas(fGammaCandidates,fInputEvent,nEventsInBG);
2021 if(previousEventGammas){
2022 // test weighted background
2023 Double_t weight=1.0;
2024 // Correct for the number of eventmixing:
2025 // N gammas -> (N-1) + (N-2) +(N-3) ...+ (N-(N-1)) using sum formula sum(i)=N*(N-1)/2 -> N*(N-1)/2
2026 // real combinations (since you cannot combine a photon with its own)
2027 // but BG leads to N_{a}*N_{b} combinations
2028 weight*=0.5*(Double_t(fGammaCandidates->GetEntries()-1))/Double_t(previousEventGammas->size());
2030 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
2032 AliAODConversionPhoton *gamma0 = (AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2034 for(UInt_t iPrevious=0;iPrevious<previousEventGammas->size();iPrevious++){
2036 AliAODConversionPhoton *gamma1 = (AliAODConversionPhoton*)(previousEventGammas->at(iPrevious));
2038 AliAODConversionMother backgroundCandidate(gamma0,gamma1);
2039 backgroundCandidate.CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2040 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2041 ->MesonIsSelected(&backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
2042 hESDMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate.M(),backgroundCandidate.Pt());
2043 Double_t sparesFill[4] = {backgroundCandidate.M(),backgroundCandidate.Pt(),(Double_t)zbin,(Double_t)mbin};
2044 sESDMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,weight);
2052 //________________________________________________________________________
2053 void AliAnalysisTaskGammaConvV1::RotateParticle(AliAODConversionPhoton *gamma){
2054 Int_t fNDegreesPMBackground= ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->NDegreesRotation();
2055 Double_t nRadiansPM = fNDegreesPMBackground*TMath::Pi()/180;
2056 Double_t rotationValue = fRandom.Rndm()*2*nRadiansPM + TMath::Pi()-nRadiansPM;
2057 gamma->RotateZ(rotationValue);
2059 //________________________________________________________________________
2060 void AliAnalysisTaskGammaConvV1::MoveParticleAccordingToVertex(AliAODConversionPhoton* particle,const AliGammaConversionAODBGHandler::GammaConversionVertex *vertex){
2061 //see header file for documentation
2063 Double_t dx = vertex->fX - fInputEvent->GetPrimaryVertex()->GetX();
2064 Double_t dy = vertex->fY - fInputEvent->GetPrimaryVertex()->GetY();
2065 Double_t dz = vertex->fZ - fInputEvent->GetPrimaryVertex()->GetZ();
2067 Double_t movedPlace[3] = {particle->GetConversionX() - dx,particle->GetConversionY() - dy,particle->GetConversionZ() - dz};
2068 particle->SetConversionPoint(movedPlace);
2070 //________________________________________________________________________
2071 void AliAnalysisTaskGammaConvV1::UpdateEventByEventData(){
2072 //see header file for documentation
2073 if(fGammaCandidates->GetEntries() >0 ){
2074 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2075 fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fV0Reader->GetNumberOfPrimaryTracks());
2077 else{ // means we use #V0s for multiplicity
2078 fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fGammaCandidates->GetEntries());
2084 //________________________________________________________________________
2085 void AliAnalysisTaskGammaConvV1::FillPhotonCombinatorialBackgroundHist(AliAODConversionPhoton *TruePhotonCandidate, Int_t pdgCode[])
2087 // 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
2088 if(pdgCode[0]==11 && pdgCode[1]==11){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),0);}
2089 else if( (pdgCode[0]==11 && pdgCode[1]==211) || (pdgCode[0]==211 && pdgCode[1]==11) )
2090 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),1);}
2091 else if( (pdgCode[0]==11 && pdgCode[1]==321) || (pdgCode[0]==321 && pdgCode[1]==11) )
2092 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),2);}
2093 else if( (pdgCode[0]==11 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==11) )
2094 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),3);}
2095 else if( (pdgCode[0]==11 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==11) )
2096 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),4);}
2097 else if( pdgCode[0]==211 && pdgCode[1]==211 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),5);}
2098 else if( (pdgCode[0]==211 && pdgCode[1]==321) || (pdgCode[0]==321 && pdgCode[1]==211) )
2099 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),6);}
2100 else if( (pdgCode[0]==211 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==211) )
2101 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),7);}
2102 else if( (pdgCode[0]==211 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==211) )
2103 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),8);}
2104 else if( pdgCode[0]==321 && pdgCode[1]==321 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),9);}
2105 else if( (pdgCode[0]==321 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==321) )
2106 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),10);}
2107 else if( (pdgCode[0]==321 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==321) )
2108 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),11);}
2109 else if( pdgCode[0]==2212 && pdgCode[1]==2212 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),12);}
2110 else if( (pdgCode[0]==2212 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==2212) )
2111 {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),13);}
2112 else if( pdgCode[0]==13 && pdgCode[1]==13 ){if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),14);}
2113 else {if(fIsFromMBHeader)hESDCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),15);}
2115 //________________________________________________________________________
2116 void AliAnalysisTaskGammaConvV1::RelabelAODPhotonCandidates(Bool_t mode){
2118 // Relabeling For AOD Event
2120 // MCLabel -> AODMCLabel
2123 fMCStackPos = new Int_t[fReaderGammas->GetEntries()];
2124 fMCStackNeg = new Int_t[fReaderGammas->GetEntries()];
2125 fESDArrayPos = new Int_t[fReaderGammas->GetEntries()];
2126 fESDArrayNeg = new Int_t[fReaderGammas->GetEntries()];
2129 for(Int_t iGamma = 0;iGamma<fReaderGammas->GetEntries();iGamma++){
2130 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(iGamma);
2131 if(!PhotonCandidate) continue;
2132 if(!mode){// Back to ESD Labels
2133 PhotonCandidate->SetMCLabelPositive(fMCStackPos[iGamma]);
2134 PhotonCandidate->SetMCLabelNegative(fMCStackNeg[iGamma]);
2135 PhotonCandidate->SetLabelPositive(fESDArrayPos[iGamma]);
2136 PhotonCandidate->SetLabelNegative(fESDArrayNeg[iGamma]);
2139 fMCStackPos[iGamma] = PhotonCandidate->GetMCLabelPositive();
2140 fMCStackNeg[iGamma] = PhotonCandidate->GetMCLabelNegative();
2141 fESDArrayPos[iGamma] = PhotonCandidate->GetTrackLabelPositive();
2142 fESDArrayNeg[iGamma] = PhotonCandidate->GetTrackLabelNegative();
2144 Bool_t AODLabelPos = kFALSE;
2145 Bool_t AODLabelNeg = kFALSE;
2147 for(Int_t i = 0; i<fInputEvent->GetNumberOfTracks();i++){
2148 AliAODTrack *tempDaughter = static_cast<AliAODTrack*>(fInputEvent->GetTrack(i));
2150 if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelPositive() ){
2151 PhotonCandidate->SetMCLabelPositive(abs(tempDaughter->GetLabel()));
2152 PhotonCandidate->SetLabelPositive(i);
2153 AODLabelPos = kTRUE;
2157 if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelNegative()){
2158 PhotonCandidate->SetMCLabelNegative(abs(tempDaughter->GetLabel()));
2159 PhotonCandidate->SetLabelNegative(i);
2160 AODLabelNeg = kTRUE;
2163 if(AODLabelNeg && AODLabelPos){
2167 if(!AODLabelPos || !AODLabelNeg){
2168 cout<<"WARNING!!! AOD TRACKS NOT FOUND FOR"<<endl;
2174 delete[] fMCStackPos;
2175 delete[] fMCStackNeg;
2176 delete[] fESDArrayPos;
2177 delete[] fESDArrayNeg;
2180 //________________________________________________________________________
2181 void AliAnalysisTaskGammaConvV1::Terminate(const Option_t *)
2184 //fOutputContainer->Print(); // Will crash on GRID