#include "AliPIDResponse.h"
#include "TFile.h"
#include "AliESDtrackCuts.h"
+#include "AliAODMCParticle.h"
+#include "AliAODMCHeader.h"
+
class iostream;
ClassImp(AliAnalysisTaskConversionQA)
//________________________________________________________________________
+AliAnalysisTaskConversionQA::AliAnalysisTaskConversionQA() : AliAnalysisTaskSE(),
+ fV0Reader(NULL),
+ fConversionGammas(NULL),
+ fConversionCuts(NULL),
+ fInputEvent(NULL),
+ fNumberOfESDTracks(0),
+ fMCEvent(NULL),
+ fMCStack(NULL),
+ fStreamQA(NULL),
+ fIsHeavyIon(kFALSE),
+ ffillTree(kFALSE),
+ ffillHistograms(kFALSE),
+ fOutputList(NULL),
+ fESDList(NULL),
+ hVertexZ(NULL),
+ hNGoodESDTracks(NULL),
+ hNV0Tracks(NULL),
+ hNContributorsVertex(NULL),
+ hITSClusterPhi(NULL),
+ hGammaPt(NULL),
+ hGammaPhi(NULL),
+ hGammaEta(NULL),
+ hGammaChi2perNDF(NULL),
+ hGammaPsiPair(NULL),
+ hGammaQt(NULL),
+ hGammaCosinePointingAngle(NULL),
+ hGammaXY(NULL),
+ hGammaZR(NULL),
+ hElecPt(NULL),
+ hElecEta(NULL),
+ hElecPhi(NULL),
+ hElecNfindableClsTPC(NULL),
+ hPosiNfindableClsTPC(NULL),
+ fTrueList(NULL),
+ hTrueResolutionR(NULL),
+ hTrueResolutionZ(NULL),
+ hTrueResolutionPhi(NULL),
+ hTrueGammaPt(NULL),
+ hTrueGammaPhi(NULL),
+ hTrueGammaEta(NULL),
+ hTrueGammaMass(NULL),
+ hTrueGammaChi2perNDF(NULL),
+ hTrueGammaPsiPair(NULL),
+ hTrueGammaQt(NULL),
+ hTrueGammaCosinePointingAngle(NULL),
+ hTrueGammaXY(NULL),
+ hTrueGammaZR(NULL),
+ hTrueElecPt(NULL),
+ hTrueElecEta(NULL),
+ hTrueElecPhi(NULL),
+ hTrueElecNfindableClsTPC(NULL),
+ hTruePosiNfindableClsTPC(NULL),
+ fIsMC(kFALSE),
+ fnGammaCandidates(1),
+ fMCStackPos(NULL),
+ fMCStackNeg(NULL)
+{
+
+}
AliAnalysisTaskConversionQA::AliAnalysisTaskConversionQA(const char *name) : AliAnalysisTaskSE(name),
fV0Reader(NULL),
fConversionGammas(NULL),
hElecNfindableClsTPC(NULL),
hPosiNfindableClsTPC(NULL),
fTrueList(NULL),
- hTrueResoulutionR(NULL),
- hTrueResoulutionZ(NULL),
- hTrueResoulutionPhi(NULL),
+ hTrueResolutionR(NULL),
+ hTrueResolutionZ(NULL),
+ hTrueResolutionPhi(NULL),
hTrueGammaPt(NULL),
hTrueGammaPhi(NULL),
hTrueGammaEta(NULL),
hTrueElecEta(NULL),
hTrueElecPhi(NULL),
hTrueElecNfindableClsTPC(NULL),
- hTruePosiNfindableClsTPC(NULL)
+ hTruePosiNfindableClsTPC(NULL),
+ fIsMC(kFALSE),
+ fnGammaCandidates(1),
+ fMCStackPos(NULL),
+ fMCStackNeg(NULL)
{
// Default constructor
hPosiNfindableClsTPC = new TH1F("Positron_findableClusterTPC","Positron_findableClusterTPC",100,0,1);
fESDList->Add(hPosiNfindableClsTPC);
- if(MCEvent()){
+ if(fIsMC){
fTrueList = new TList();
fTrueList->SetOwner(kTRUE);
fTrueList->SetName("True QA");
fOutputList->Add(fTrueList);
- hTrueResoulutionR = new TH2F("True_ConversionPointResolution_R","True_ConversionPointResolution_R",240,0,120,200,-20,20);
- fTrueList->Add(hTrueResoulutionR);
- hTrueResoulutionZ = new TH2F("True_ConversionPointResolution_Z","True_ConversionPointResolution_Z",480,-120,120,200,-20,20);
- fTrueList->Add(hTrueResoulutionZ);
- hTrueResoulutionPhi = new TH2F("True_ConversionPointResolution_Phi","True_ConversionPointResolution_Phi",360,0,2*TMath::Pi(),200,-20,20);
- fTrueList->Add(hTrueResoulutionPhi);
+ hTrueResolutionR = new TH2F("True_ConversionPointResolution_R","True_ConversionPointResolution_R",240,0,120,200,-20,20);
+ fTrueList->Add(hTrueResolutionR);
+ hTrueResolutionZ = new TH2F("True_ConversionPointResolution_Z","True_ConversionPointResolution_Z",480,-120,120,200,-20,20);
+ fTrueList->Add(hTrueResolutionZ);
+ hTrueResolutionPhi = new TH2F("True_ConversionPointResolution_Phi","True_ConversionPointResolution_Phi",360,0,2*TMath::Pi(),200,-TMath::Pi()/30., TMath::Pi()/30.);
+ fTrueList->Add(hTrueResolutionPhi);
hTrueGammaPt = new TH1F("True_Gamma_Pt","True_Gamma_Pt",250,0,25);
fTrueList->Add(hTrueGammaPt);
return;
}
fInputEvent = InputEvent();
- fMCEvent = MCEvent();
- if(fMCEvent) fMCStack = fMCEvent->Stack();
+ if(fIsMC) fMCEvent = MCEvent();
+ if(fMCEvent && fInputEvent->IsA()==AliESDEvent::Class()){ fMCStack = fMCEvent->Stack(); }
Int_t eventNotAccepted =
fConversionCuts->IsEventAcceptedByConversionCut(fV0Reader->GetConversionCuts(),fInputEvent,fMCEvent,fIsHeavyIon);
if(fMCEvent){
if(fConversionCuts->GetSignalRejection() != 0){
- fConversionCuts->GetNotRejectedParticles(fConversionCuts->GetSignalRejection(),
- fConversionCuts->GetAcceptedHeader(),
- fMCEvent);
+ if(fInputEvent->IsA()==AliESDEvent::Class()){
+ fConversionCuts->GetNotRejectedParticles(fConversionCuts->GetSignalRejection(),
+ fConversionCuts->GetAcceptedHeader(),
+ fMCEvent);
+ }
+ else if(fInputEvent->IsA()==AliAODEvent::Class()){
+ fConversionCuts->GetNotRejectedParticles(fConversionCuts->GetSignalRejection(),
+ fConversionCuts->GetAcceptedHeader(),
+ fInputEvent);
+ }
}
}
if(ffillHistograms){
- CountESDTracks();
+ CountTracks();
hVertexZ->Fill(fInputEvent->GetPrimaryVertex()->GetZ());
hNContributorsVertex->Fill(fConversionCuts->GetNumberOfContributorsVtx(fInputEvent));
hNGoodESDTracks->Fill(fNumberOfESDTracks);
hNV0Tracks->Fill(fInputEvent->GetVZEROData()->GetMTotV0A()+fInputEvent->GetVZEROData()->GetMTotV0C());
}
+ if(fMCEvent && fInputEvent->IsA()==AliAODEvent::Class())
+ RelabelAODPhotonCandidates(kTRUE); // In case of AODMC relabeling MC
+
for(Int_t firstGammaIndex=0;firstGammaIndex<fConversionGammas->GetEntriesFast();firstGammaIndex++){
AliAODConversionPhoton *gamma=dynamic_cast<AliAODConversionPhoton*>(fConversionGammas->At(firstGammaIndex));
if (gamma==NULL) continue;
if(fMCEvent && fConversionCuts->GetSignalRejection() != 0){
- if(!fConversionCuts->IsParticleFromBGEvent(gamma->GetMCLabelPositive(), fMCStack))
+ if(!fConversionCuts->IsParticleFromBGEvent(gamma->GetMCLabelPositive(), fMCStack, fInputEvent))
continue;
- if(!fConversionCuts->IsParticleFromBGEvent(gamma->GetMCLabelNegative(), fMCStack))
+ if(!fConversionCuts->IsParticleFromBGEvent(gamma->GetMCLabelNegative(), fMCStack, fInputEvent))
continue;
}
if(!fConversionCuts->PhotonIsSelected(gamma,fInputEvent)){
if(ffillTree) ProcessQATree(gamma);
if(ffillHistograms) ProcessQA(gamma);
}
-
+ if(fMCEvent && fInputEvent->IsA()==AliAODEvent::Class())
+ RelabelAODPhotonCandidates(kFALSE); // In case of AODMC relabeling MC
+
PostData(1, fOutputList);
}
void AliAnalysisTaskConversionQA::ProcessQATree(AliAODConversionPhoton *gamma){
// Fill Histograms for QA and MC
- AliESDEvent* event = (AliESDEvent*) InputEvent();
+ AliVEvent* event = (AliVEvent*) InputEvent();
AliPIDResponse* pidResonse = ((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetPIDResponse();
Float_t gammaPt = gamma->GetPhotonPt();
conversionPoint(1) = gamma->GetConversionY();
conversionPoint(2) = gamma->GetConversionZ();
TVectorF daughterProp(20);
- AliESDtrack * negTrack = fConversionCuts->GetESDTrack(event, gamma->GetTrackLabelNegative());
- AliESDtrack * posTrack = fConversionCuts->GetESDTrack(event, gamma->GetTrackLabelPositive());
+ AliVTrack * negTrack = fConversionCuts->GetTrack(event, gamma->GetTrackLabelNegative());
+ AliVTrack * posTrack = fConversionCuts->GetTrack(event, gamma->GetTrackLabelPositive());
if(!negTrack||!posTrack)return;
Bool_t isTruePhoton = kFALSE;
- if(fMCEvent){
- if(IsTruePhoton(gamma)) isTruePhoton = kTRUE;
+ if(fMCEvent && fInputEvent->IsA()==AliVEvent::Class()){
+ isTruePhoton = IsTruePhotonESD(gamma);
+ } else if (fMCEvent && fInputEvent->IsA()==AliAODEvent::Class()){
+ isTruePhoton = IsTruePhotonAOD(gamma);
}
daughterProp(0) = posTrack->Pt();
daughterProp(18) = posTrack->GetNcls(1);
daughterProp(13) = (Float_t)negTrack->GetTPCClusterInfo(2,0,fConversionCuts->GetFirstTPCRow(gamma->GetConversionRadius()));
daughterProp(19) = negTrack->GetNcls(1);
-
+
if (fStreamQA){
if(fMCEvent){
(*fStreamQA)<<"PhotonQA"
hGammaXY->Fill(gamma->GetConversionX(),gamma->GetConversionY());
hGammaZR->Fill(gamma->GetConversionZ(),gamma->GetConversionRadius());
- AliESDtrack * negTrack = fConversionCuts->GetESDTrack((AliESDEvent*)fInputEvent, gamma->GetTrackLabelNegative());
- AliESDtrack * posTrack = fConversionCuts->GetESDTrack((AliESDEvent*)fInputEvent, gamma->GetTrackLabelPositive());
+ AliVTrack * negTrack = fConversionCuts->GetTrack(fInputEvent, gamma->GetTrackLabelNegative());
+ AliVTrack * posTrack = fConversionCuts->GetTrack(fInputEvent, gamma->GetTrackLabelPositive());
if(!negTrack||!posTrack)return;
Double_t negtrackPhi = negTrack->Phi();
// hElecNfindableClsTPC->Fill((Float_t)negTrack->GetNcls(1)/(Float_t)negTrack->GetTPCNclsF());
// hPosiNfindableClsTPC->Fill((Float_t)posTrack->GetNcls(1)/(Float_t)posTrack->GetTPCNclsF());
-
- if(fMCEvent) ProcessTrueQA(gamma,negTrack,posTrack);
+ if(fMCEvent && fInputEvent->IsA()==AliESDEvent::Class()){
+ ProcessTrueQAESD(gamma,(AliESDtrack*)negTrack,(AliESDtrack*)posTrack);
+ } else if(fMCEvent && fInputEvent->IsA()==AliAODEvent::Class()){
+ ProcessTrueQAAOD(gamma,(AliAODTrack*)negTrack,(AliAODTrack*)posTrack);
+ }
}
//________________________________________________________________________
-void AliAnalysisTaskConversionQA::ProcessTrueQA(AliAODConversionPhoton *TruePhotonCandidate, AliESDtrack *elec, AliESDtrack *posi)
+void AliAnalysisTaskConversionQA::ProcessTrueQAESD(AliAODConversionPhoton *TruePhotonCandidate, AliESDtrack *elec, AliESDtrack *posi)
{
-
- if(!IsTruePhoton(TruePhotonCandidate)) return;
-
+ if(!IsTruePhotonESD(TruePhotonCandidate)) return;
TParticle *negDaughter = TruePhotonCandidate->GetNegativeMCDaughter(fMCStack);
TParticle *mcPhoton = TruePhotonCandidate->GetMCParticle(fMCStack);
-
// True Photon
- hTrueResoulutionR->Fill(TruePhotonCandidate->GetConversionRadius(),
+ hTrueResolutionR->Fill(TruePhotonCandidate->GetConversionRadius(),
TruePhotonCandidate->GetConversionRadius()-negDaughter->R());
- hTrueResoulutionZ->Fill(TruePhotonCandidate->GetConversionZ(),
+ hTrueResolutionZ->Fill(TruePhotonCandidate->GetConversionZ(),
TruePhotonCandidate->GetConversionZ()-negDaughter->Vz());
- hTrueResoulutionPhi->Fill(TruePhotonCandidate->Phi(),
+ hTrueResolutionPhi->Fill(TruePhotonCandidate->Phi(),
TruePhotonCandidate->Phi()-mcPhoton->Phi());
hTrueGammaPt->Fill(TruePhotonCandidate->Pt());
hTrueGammaPhi->Fill(TruePhotonCandidate->Phi());
hTrueGammaCosinePointingAngle->Fill(fConversionCuts->GetCosineOfPointingAngle(TruePhotonCandidate,fInputEvent));
hTrueGammaXY->Fill(TruePhotonCandidate->GetConversionX(),TruePhotonCandidate->GetConversionY());
hTrueGammaZR->Fill(TruePhotonCandidate->GetConversionZ(),TruePhotonCandidate->GetConversionRadius());
-
hTrueElecPt->Fill(elec->Pt(),posi->Pt());
hTrueElecEta->Fill(elec->Eta(),posi->Eta());
hTrueElecPhi->Fill(elec->Phi(),posi->Phi());
->Fill((Float_t)posi->GetTPCClusterInfo(2,0,fConversionCuts->GetFirstTPCRow(TruePhotonCandidate->GetConversionRadius())));
// hTrueElecNfindableClsTPC->Fill((Float_t)elec->GetNcls(1)/(Float_t)elec->GetTPCNclsF());
// hTruePosiNfindableClsTPC->Fill((Float_t)posi->GetNcls(1)/(Float_t)posi->GetTPCNclsF());
+}
+
+//________________________________________________________________________
+void AliAnalysisTaskConversionQA::ProcessTrueQAAOD(AliAODConversionPhoton *TruePhotonCandidate, AliAODTrack *elec, AliAODTrack *posi)
+{
+ if(!IsTruePhotonAOD(TruePhotonCandidate)) return;
+ TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
+ AliAODMCParticle *negDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelNegative());
+ AliAODMCParticle *mcPhoton = (AliAODMCParticle*) AODMCTrackArray->At(negDaughter->GetMother());
+ // True Photon
+ hTrueResolutionR->Fill(TruePhotonCandidate->GetConversionRadius(),
+ TruePhotonCandidate->GetConversionRadius()-(TMath::Sqrt(negDaughter->Xv()*negDaughter->Xv()+negDaughter->Yv()*negDaughter->Yv())));
+ hTrueResolutionZ->Fill(TruePhotonCandidate->GetConversionZ(),
+ TruePhotonCandidate->GetConversionZ()-negDaughter->Zv());
+ hTrueResolutionPhi->Fill(TruePhotonCandidate->Phi(),
+ TruePhotonCandidate->Phi()-mcPhoton->Phi());
+ hTrueGammaPt->Fill(TruePhotonCandidate->Pt());
+ hTrueGammaPhi->Fill(TruePhotonCandidate->Phi());
+ hTrueGammaEta->Fill(TruePhotonCandidate->Eta());
+ hTrueGammaMass->Fill(TruePhotonCandidate->GetMass());
+ hTrueGammaChi2perNDF->Fill(TruePhotonCandidate->GetChi2perNDF());
+ hTrueGammaPsiPair->Fill(TruePhotonCandidate->GetPsiPair());
+ hTrueGammaQt->Fill(TruePhotonCandidate->GetArmenterosQt());
+ hTrueGammaCosinePointingAngle->Fill(fConversionCuts->GetCosineOfPointingAngle(TruePhotonCandidate,fInputEvent));
+ hTrueGammaXY->Fill(TruePhotonCandidate->GetConversionX(),TruePhotonCandidate->GetConversionY());
+ hTrueGammaZR->Fill(TruePhotonCandidate->GetConversionZ(),TruePhotonCandidate->GetConversionRadius());
+ hTrueElecPt->Fill(elec->Pt(),posi->Pt());
+ hTrueElecEta->Fill(elec->Eta(),posi->Eta());
+ hTrueElecPhi->Fill(elec->Phi(),posi->Phi());
+ hTrueElecNfindableClsTPC
+ ->Fill((Float_t)elec->GetTPCClusterInfo(2,0,fConversionCuts->GetFirstTPCRow(TruePhotonCandidate->GetConversionRadius())));
+ hTruePosiNfindableClsTPC
+ ->Fill((Float_t)posi->GetTPCClusterInfo(2,0,fConversionCuts->GetFirstTPCRow(TruePhotonCandidate->GetConversionRadius())));
+ // hTrueElecNfindableClsTPC->Fill((Float_t)elec->GetNcls(1)/(Float_t)elec->GetTPCNclsF());
+ // hTruePosiNfindableClsTPC->Fill((Float_t)posi->GetNcls(1)/(Float_t)posi->GetTPCNclsF());
}
+
//________________________________________________________________________
-void AliAnalysisTaskConversionQA::CountESDTracks(){
+void AliAnalysisTaskConversionQA::CountTracks(){
+ if(fInputEvent->IsA()==AliESDEvent::Class()){
// Using standard function for setting Cuts
Bool_t selectPrimaries=kTRUE;
AliESDtrackCuts *EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
EsdTrackCuts->SetMaxDCAToVertexZ(2);
EsdTrackCuts->SetEtaRange(-0.8, 0.8);
EsdTrackCuts->SetPtRange(0.15);
-
- fNumberOfESDTracks = 0;
- for(Int_t iTracks = 0; iTracks < fInputEvent->GetNumberOfTracks(); iTracks++){
- AliESDtrack* curTrack = (AliESDtrack*)fInputEvent->GetTrack(iTracks);
- if(!curTrack) continue;
- // if(fMCEvent && fConversionCuts->GetSignalRejection() != 0){
- // if(!fConversionCuts->IsParticleFromBGEvent(abs(curTrack->GetLabel()), fMCStack)) continue;
- // }
- if(EsdTrackCuts->AcceptTrack(curTrack) ) fNumberOfESDTracks++;
+ fNumberOfESDTracks = 0;
+ for(Int_t iTracks = 0; iTracks < fInputEvent->GetNumberOfTracks(); iTracks++){
+ AliESDtrack* curTrack = (AliESDtrack*) fInputEvent->GetTrack(iTracks);
+ if(!curTrack) continue;
+ // if(fMCEvent && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
+ // if(!((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(abs(curTrack->GetLabel()), fMCStack)) continue;
+ // }
+ if(EsdTrackCuts->AcceptTrack(curTrack) ) fNumberOfESDTracks++;
+ }
+ delete EsdTrackCuts;
+ EsdTrackCuts=0x0;
}
- delete EsdTrackCuts;
- EsdTrackCuts=0x0;
-
+ else if(fInputEvent->IsA()==AliAODEvent::Class()){
+ fNumberOfESDTracks = 0;
+ for(Int_t iTracks = 0; iTracks<fInputEvent->GetNumberOfTracks(); iTracks++){
+ AliAODTrack* curTrack = (AliAODTrack*) fInputEvent->GetTrack(iTracks);
+ if(!curTrack->IsPrimaryCandidate()) continue;
+ if(abs(curTrack->Eta())>0.8) continue;
+ if(curTrack->Pt()<0.15) continue;
+ if(abs(curTrack->ZAtDCA())>2) continue;
+ fNumberOfESDTracks++;
+ }
+ }
+
return;
}
//________________________________________________________________________
-Bool_t AliAnalysisTaskConversionQA::IsTruePhoton(AliAODConversionPhoton *TruePhotonCandidate)
+Bool_t AliAnalysisTaskConversionQA::IsTruePhotonESD(AliAODConversionPhoton *TruePhotonCandidate)
{
TParticle *posDaughter = TruePhotonCandidate->GetPositiveMCDaughter(fMCStack);
TParticle *negDaughter = TruePhotonCandidate->GetNegativeMCDaughter(fMCStack);
return kTRUE;
}
+//________________________________________________________________________
+Bool_t AliAnalysisTaskConversionQA::IsTruePhotonAOD(AliAODConversionPhoton *TruePhotonCandidate)
+{
+ TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
+ AliAODMCParticle *posDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelPositive());
+ AliAODMCParticle *negDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelNegative());
+
+ if(posDaughter == NULL || negDaughter == NULL) return kFALSE; // One particle does not exist
+ Int_t pdgCode[2] = {abs(posDaughter->GetPdgCode()),abs(negDaughter->GetPdgCode())};
+ if(posDaughter->GetMother() != negDaughter->GetMother()) return kFALSE;
+ else if(posDaughter->GetMother() == -1) return kFALSE;
+
+ if(pdgCode[0]!=11 || pdgCode[1]!=11) return kFALSE; //One Particle is not a electron
+
+ if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()) return kFALSE; // Same Charge
+
+ if(((posDaughter->GetMCProcessCode())) != 5 || ((negDaughter->GetMCProcessCode())) != 5) return kFALSE;// check if the daughters come from a conversion
+ // STILL A BUG IN ALIROOT >>8 HAS TPO BE REMOVED AFTER FIX
+
+ AliAODMCParticle *Photon = (AliAODMCParticle*) AODMCTrackArray->At(posDaughter->GetMother());
+ if(Photon->GetPdgCode() != 22) return kFALSE; // Mother is no Photon
+
+ return kTRUE;
+}
+
+//________________________________________________________________________
+void AliAnalysisTaskConversionQA::RelabelAODPhotonCandidates(Bool_t mode){
+
+ // Relabeling For AOD Event
+ // ESDiD -> AODiD
+ // MCLabel -> AODMCLabel
+
+ if(mode){
+ fMCStackPos = new Int_t[fConversionGammas->GetEntries()];
+ fMCStackNeg = new Int_t[fConversionGammas->GetEntries()];
+ }
+
+ for(Int_t iGamma = 0;iGamma<fConversionGammas->GetEntries();iGamma++){
+ AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fConversionGammas->At(iGamma);
+ if(!PhotonCandidate) continue;
+ if(!mode){// Back to ESD Labels
+ PhotonCandidate->SetMCLabelPositive(fMCStackPos[iGamma]);
+ PhotonCandidate->SetMCLabelNegative(fMCStackNeg[iGamma]);
+ //PhotonCandidate->IsAODMCLabel(kFALSE);
+ continue;
+ }
+ fMCStackPos[iGamma] = PhotonCandidate->GetMCLabelPositive();
+ fMCStackNeg[iGamma] = PhotonCandidate->GetMCLabelNegative();
+
+ Bool_t AODLabelPos = kFALSE;
+ Bool_t AODLabelNeg = kFALSE;
+
+ for(Int_t i = 0; i<fInputEvent->GetNumberOfTracks();i++){
+ AliAODTrack *tempDaughter = static_cast<AliAODTrack*>(fInputEvent->GetTrack(i));
+ if(!AODLabelPos){
+ if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelPositive() ){
+ PhotonCandidate->SetMCLabelPositive(abs(tempDaughter->GetLabel()));
+ AODLabelPos = kTRUE;
+ }
+ }
+ if(!AODLabelNeg){
+ if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelNegative()){
+ PhotonCandidate->SetMCLabelNegative(abs(tempDaughter->GetLabel()));
+ AODLabelNeg = kTRUE;
+ }
+ }
+ if(AODLabelNeg && AODLabelPos){
+ break;
+ }
+ } // Both ESD Tracks have AOD Tracks with Positive IDs
+ if(!AODLabelPos || !AODLabelNeg){
+ for(Int_t i = 0; i<fInputEvent->GetNumberOfTracks();i++){
+ AliAODTrack *tempDaughter = static_cast<AliAODTrack*>(fInputEvent->GetTrack(i));
+ if(tempDaughter->GetID()<0){
+ if(!AODLabelPos){
+ if( (abs(tempDaughter->GetID())-1) == PhotonCandidate->GetTrackLabelPositive()){
+ PhotonCandidate->SetMCLabelPositive(abs(tempDaughter->GetLabel()));
+ AODLabelPos = kTRUE;
+ }
+ }
+ if(!AODLabelNeg){
+ if( (abs(tempDaughter->GetID())-1) == PhotonCandidate->GetTrackLabelNegative()){
+ PhotonCandidate->SetMCLabelNegative(abs(tempDaughter->GetLabel()));
+ AODLabelNeg = kTRUE;
+ }
+ }
+ }
+ if(AODLabelNeg && AODLabelPos){
+ break;
+ }
+ }
+ if(!AODLabelPos || !AODLabelNeg){
+ cout<<"WARNING!!! AOD TRACKS NOT FOUND FOR"<<endl;
+ }
+ }
+ }
+
+ if(!mode){
+ delete[] fMCStackPos;
+ delete[] fMCStackNeg;
+ }
+}
+
//________________________________________________________________________
void AliAnalysisTaskConversionQA::Terminate(Option_t *)
{