#include "AliMCEvent.h"\r
#include "AliESD.h"\r
#include "AliESDEvent.h"\r
+#include "AliPID.h"\r
#include "AliPIDResponse.h"\r
#include "AliESDVZERO.h"\r
#include "AliESDUtils.h"\r
#include "AliFlowVector.h"\r
#include "AliFlowCommonConstants.h"\r
#include "AliKFParticle.h"\r
+#include "AliKFVertex.h"\r
\r
#include "AliHFEcuts.h"\r
#include "AliHFEpid.h"\r
fUseMCReactionPlane(kFALSE),\r
fMCPID(kFALSE),\r
fNoPID(kFALSE),\r
- fChi2OverNDFCut(999),\r
+ fChi2OverNDFCut(3.0),\r
fMaxdca(3.0),\r
fMaxopeningtheta(0.02),\r
fMaxopeningphi(0.1),\r
fMaxopening3D(0.1),\r
fMaxInvmass(0.1),\r
+ fSetMassConstraint(kFALSE),\r
fDebugLevel(0),\r
fcutsRP(0),\r
fcutsPOI(0),\r
fHFECuts(0),\r
fPID(0),\r
+ fPIDTOFOnly(0),\r
fPIDqa(0),\r
fflowEvent(NULL),\r
fHFEBackgroundCuts(0),\r
fDeltaPhiMapsBeforePID(0x0),\r
fCosPhiMapsBeforePID(0x0),\r
fDeltaPhiMaps(0x0),\r
+ fDeltaPhiMapsContamination(0x0),\r
fCosPhiMaps(0x0),\r
fProfileCosPhiMaps(0x0),\r
fDeltaPhiMapsTaggedPhotonic(0x0),\r
fUseMCReactionPlane(kFALSE),\r
fMCPID(kFALSE),\r
fNoPID(kFALSE),\r
- fChi2OverNDFCut(999),\r
+ fChi2OverNDFCut(3.0),\r
fMaxdca(3.0),\r
fMaxopeningtheta(0.02),\r
fMaxopeningphi(0.1),\r
fMaxopening3D(0.1),\r
fMaxInvmass(0.1),\r
+ fSetMassConstraint(kFALSE),\r
fDebugLevel(0),\r
fcutsRP(0),\r
fcutsPOI(0),\r
fHFECuts(0),\r
fPID(0),\r
+ fPIDTOFOnly(0),\r
fPIDqa(0),\r
fflowEvent(NULL),\r
fHFEBackgroundCuts(0),\r
fDeltaPhiMapsBeforePID(0x0),\r
fCosPhiMapsBeforePID(0x0),\r
fDeltaPhiMaps(0x0),\r
+ fDeltaPhiMapsContamination(0x0),\r
fCosPhiMaps(0x0),\r
fProfileCosPhiMaps(0x0),\r
fDeltaPhiMapsTaggedPhotonic(0x0),\r
fPIDBackground = new AliHFEpid("hfePidBackground");\r
fPIDBackgroundqa = new AliHFEpidQAmanager;\r
\r
+ fPIDTOFOnly = new AliHFEpid("hfePidTOFOnly");\r
+\r
DefineInput(0,TChain::Class());\r
DefineOutput(1, TList::Class());\r
for(Int_t bincless = 0; bincless < fNbBinsCentralityQCumulant; bincless++) {\r
fMaxopeningphi(ref.fMaxopeningphi),\r
fMaxopening3D(ref.fMaxopening3D),\r
fMaxInvmass(ref.fMaxInvmass),\r
+ fSetMassConstraint(ref.fSetMassConstraint),\r
fDebugLevel(ref.fDebugLevel),\r
fcutsRP(NULL),\r
fcutsPOI(NULL),\r
fHFECuts(NULL),\r
fPID(NULL),\r
+ fPIDTOFOnly(NULL),\r
fPIDqa(NULL),\r
fflowEvent(NULL),\r
fHFEBackgroundCuts(NULL),\r
fDeltaPhiMapsBeforePID(NULL),\r
fCosPhiMapsBeforePID(NULL),\r
fDeltaPhiMaps(NULL),\r
+ fDeltaPhiMapsContamination(NULL),\r
fCosPhiMaps(NULL),\r
fProfileCosPhiMaps(NULL),\r
fDeltaPhiMapsTaggedPhotonic(NULL),\r
target.fMaxopeningphi = fMaxopeningphi;\r
target.fMaxopening3D = fMaxopening3D;\r
target.fMaxInvmass = fMaxInvmass;\r
+ target.fSetMassConstraint = fSetMassConstraint;\r
target.fAlgorithmMA = fAlgorithmMA;\r
target.fCounterPoolBackground = fCounterPoolBackground;\r
target.fDebugLevel = fDebugLevel;\r
if(fcutsPOI) delete fcutsPOI;\r
if(fHFECuts) delete fHFECuts;\r
if(fPID) delete fPID;\r
+ if(fPIDTOFOnly) delete fPIDTOFOnly;\r
if(fPIDqa) delete fPIDqa;\r
if(fflowEvent) delete fflowEvent;\r
if(fHFEBackgroundCuts) delete fHFEBackgroundCuts;\r
fPIDqa->Initialize(fPID);\r
fPID->SortDetectors();\r
\r
+ if(!fPIDTOFOnly->GetNumberOfPIDdetectors()) fPIDTOFOnly->AddDetector("TPC", 0);\r
+ fPIDTOFOnly->InitializePID();\r
+ fPIDTOFOnly->SortDetectors();\r
+\r
// HFE Background cuts\r
\r
if(!fHFEBackgroundCuts){\r
// Bins for the THnSparse\r
//**************************\r
\r
+ /*\r
Int_t nBinsPt = 44;\r
Double_t minPt = 0.1;\r
Double_t maxPt = 20.0;\r
Double_t binLimPt[nBinsPt+1];\r
for(Int_t i=0; i<=nBinsPt; i++) binLimLogPt[i]=(Double_t)TMath::Log10(minPt) + (TMath::Log10(maxPt)-TMath::Log10(minPt))/nBinsPt*(Double_t)i ;\r
for(Int_t i=0; i<=nBinsPt; i++) binLimPt[i]=(Double_t)TMath::Power(10,binLimLogPt[i]);\r
+ */\r
+\r
+ Int_t nBinsPt = 35;\r
+ Double_t binLimPt[36] = {0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1., 1.1, 1.2,\r
+ 1.3, 1.4, 1.5, 1.75, 2., 2.25, 2.5, 2.75, 3., 3.5, 4., 4.5, 5.,\r
+ 5.5, 6., 7., 8., 10., 12., 14., 16., 18., 20.};\r
+\r
\r
Int_t nBinsPtPlus = fNbBinsPtQCumulant;\r
Double_t minPtPlus = fMinPtQCumulant;\r
Double_t binLimEta[nBinsEta+1];\r
for(Int_t i=0; i<=nBinsEta; i++) binLimEta[i]=(Double_t)minEta + (maxEta-minEta)/nBinsEta*(Double_t)i ;\r
\r
- Int_t nBinsStep = 6;\r
+ Int_t nBinsStep = 7;\r
Double_t minStep = 0.;\r
- Double_t maxStep = 6.;\r
+ Double_t maxStep = 7.;\r
Double_t binLimStep[nBinsStep+1];\r
for(Int_t i=0; i<=nBinsStep; i++) binLimStep[i]=(Double_t)minStep + (maxStep-minStep)/nBinsStep*(Double_t)i ;\r
\r
//printf("bin phi is %f for %d\n",binLimPhi[i],i);\r
}\r
\r
+ Int_t nBinsPhiLess = 2.0;\r
+ Double_t minPhiLess = 0.0;\r
+ Double_t maxPhiLess = 2.0;\r
+ Double_t binLimPhiLess[nBinsPhiLess+1];\r
+ for(Int_t i=0; i<=nBinsPhiLess; i++) {\r
+ binLimPhiLess[i]=(Double_t)minPhiLess + (maxPhiLess-minPhiLess)/nBinsPhiLess*(Double_t)i ;\r
+ }\r
+\r
+ Int_t nBinsTPCdEdx = 140;\r
+ Double_t minTPCdEdx = -12.0;\r
+ Double_t maxTPCdEdx = 12.0;\r
+ Double_t binLimTPCdEdx[nBinsTPCdEdx+1];\r
+ for(Int_t i=0; i<=nBinsTPCdEdx; i++) {\r
+ binLimTPCdEdx[i]=(Double_t)minTPCdEdx + (maxTPCdEdx-minTPCdEdx)/nBinsTPCdEdx*(Double_t)i ;\r
+ }\r
+\r
Int_t nBinsAngle = 40;\r
Double_t minAngle = 0.0;\r
Double_t maxAngle = 1.0;\r
Double_t binLimCharge[nBinsCharge+1];\r
for(Int_t i=0; i<=nBinsCharge; i++) binLimCharge[i]=(Double_t)minCharge + (maxCharge-minCharge)/nBinsCharge*(Double_t)i ;\r
\r
- Int_t nBinsSource = 8;\r
+ Int_t nBinsSource = 10;\r
Double_t minSource = 0.;\r
- Double_t maxSource = 8.;\r
+ Double_t maxSource = 10.;\r
Double_t binLimSource[nBinsSource+1];\r
for(Int_t i=0; i<=nBinsSource; i++) binLimSource[i]=(Double_t)minSource + (maxSource-minSource)/nBinsSource*(Double_t)i ;\r
\r
fDeltaPhiMaps->SetBinEdges(4,binLimEtaLess);\r
fDeltaPhiMaps->Sumw2(); \r
\r
+ // Maps delta phi contamination\r
+ const Int_t nDimgcont=4;\r
+ Int_t nBingcont[nDimgcont] = {nBinsPhiLess,nBinsC,nBinsPt, nBinsTPCdEdx};\r
+ fDeltaPhiMapsContamination = new THnSparseF("DeltaPhiMapsContamination","DeltaPhiMapsContamination",nDimgcont,nBingcont);\r
+ fDeltaPhiMapsContamination->SetBinEdges(0,binLimPhiLess);\r
+ fDeltaPhiMapsContamination->SetBinEdges(1,binLimC);\r
+ fDeltaPhiMapsContamination->SetBinEdges(2,binLimPt);\r
+ fDeltaPhiMapsContamination->SetBinEdges(3,binLimTPCdEdx);\r
+ fDeltaPhiMapsContamination->Sumw2(); \r
+\r
+\r
+ //\r
const Int_t nDimgb=3;\r
Int_t nBingb[nDimgb] = {nBinsPhi,nBinsC,nBinsPt};\r
\r
fListHist->Add(fDeltaPhiMapsBeforePID);\r
fListHist->Add(fCosPhiMapsBeforePID);\r
fListHist->Add(fDeltaPhiMaps);\r
+ fListHist->Add(fDeltaPhiMapsContamination);\r
fListHist->Add(fCosPhiMaps);\r
fListHist->Add(fProfileCosPhiMaps);\r
fListHist->Add(fDeltaPhiMapsTaggedPhotonic);\r
Double_t valuensparsehprofile[3];\r
Double_t valuensparseMCSourceDeltaPhiMaps[3];\r
Double_t valuetrackingcuts[2];\r
+ Double_t valuedeltaphicontamination[4];\r
\r
AliMCEvent *mcEvent = MCEvent();\r
AliMCParticle *mctrack = NULL;\r
valuensparsehprofile[1] = binct; \r
valuecossinephiep[2] = binctMore;\r
valuensparseMCSourceDeltaPhiMaps[0] = binct;\r
+ valuedeltaphicontamination[1] = binct;\r
\r
//////////////////////\r
// run number\r
// Initialize PID with the given run number\r
fPID->InitializePID(runnumber);\r
}\r
+ if(!fPIDTOFOnly->IsInitialized()){\r
+ // Initialize PID with the given run number\r
+ fPIDTOFOnly->InitializePID(runnumber);\r
+ }\r
\r
+ //\r
if(!fPIDBackground->IsInitialized()){\r
// Initialize PID with the given run number\r
fPIDBackground->InitializePID(runnumber);\r
return;\r
}\r
fPID->SetPIDResponse(pidResponse);\r
+ fPIDTOFOnly->SetPIDResponse(pidResponse);\r
fPIDBackground->SetPIDResponse(pidResponse);\r
\r
fHistEV->Fill(binctt,0.0);\r
else {\r
\r
eventPlaneV0 = TVector2::Phi_0_2pi(vEPa->GetEventplane("V0", fInputEvent,2));\r
+ //printf("eventPlaneV0 %f\n",eventPlaneV0);\r
if(eventPlaneV0 > TMath::Pi()) eventPlaneV0 = eventPlaneV0 - TMath::Pi();\r
+ //printf("eventPlaneV0 %f\n",eventPlaneV0);\r
eventPlaneV0A = TVector2::Phi_0_2pi(vEPa->GetEventplane("V0A", fInputEvent,2));\r
if(eventPlaneV0A > TMath::Pi()) eventPlaneV0A = eventPlaneV0A - TMath::Pi();\r
eventPlaneV0C = TVector2::Phi_0_2pi(vEPa->GetEventplane("V0C", fInputEvent,2));\r
} // Quick and dirty fix to reject both kink mothers and daughters\r
}\r
\r
- valuetrackingcuts[1] = 0; \r
+ valuetrackingcuts[1] = 1; \r
if(fDebugLevel > 3) fTrackingCuts->Fill(&valuetrackingcuts[0]); \r
// RecPrim\r
if(!fHFECuts->CheckParticleCuts(AliHFEcuts::kStepRecPrim + AliHFEcuts::kNcutStepsMCTrack, (TObject *)track)) continue;\r
- valuetrackingcuts[1] = 1; \r
+ valuetrackingcuts[1] = 2; \r
if(fDebugLevel > 3) fTrackingCuts->Fill(&valuetrackingcuts[0]); \r
\r
// HFEcuts: ITS layers cuts\r
if(!fHFECuts->CheckParticleCuts(AliHFEcuts::kStepHFEcutsITS + AliHFEcuts::kNcutStepsMCTrack, (TObject *)track)) continue;\r
- valuetrackingcuts[1] = 2; \r
+ valuetrackingcuts[1] = 3; \r
if(fDebugLevel > 3) fTrackingCuts->Fill(&valuetrackingcuts[0]); \r
\r
// HFE cuts: TOF PID and mismatch flag\r
if(!fHFECuts->CheckParticleCuts(AliHFEcuts::kStepHFEcutsTOF + AliHFEcuts::kNcutStepsMCTrack, (TObject *)track)) continue;\r
- valuetrackingcuts[1] = 3; \r
+ valuetrackingcuts[1] = 4; \r
if(fDebugLevel > 3) fTrackingCuts->Fill(&valuetrackingcuts[0]); \r
\r
// HFE cuts: TPC PID cleanup\r
if(!fHFECuts->CheckParticleCuts(AliHFEcuts::kStepHFEcutsTPC + AliHFEcuts::kNcutStepsMCTrack, (TObject *)track)) continue;\r
- valuetrackingcuts[1] = 4; \r
+ valuetrackingcuts[1] = 5; \r
if(fDebugLevel > 3) fTrackingCuts->Fill(&valuetrackingcuts[0]); \r
\r
// HFEcuts: Nb of tracklets TRD0\r
if(!fHFECuts->CheckParticleCuts(AliHFEcuts::kStepHFEcutsTRD + AliHFEcuts::kNcutStepsMCTrack, (TObject *)track)) continue;\r
- valuetrackingcuts[1] = 5; \r
+ valuetrackingcuts[1] = 6; \r
if(fDebugLevel > 3) fTrackingCuts->Fill(&valuetrackingcuts[0]); \r
\r
}\r
Double_t deltaphi = TVector2::Phi_0_2pi(phitrack - eventplanesubtracted);\r
if(deltaphi > TMath::Pi()) deltaphi = deltaphi - TMath::Pi();\r
\r
+ ////////////////////////////////\r
+ // Determine the deltaphi bin\r
+ ///////////////////////////////\r
+\r
+ // in-plane\r
+ if(((deltaphi<(TMath::Pi()/4.)) && (deltaphi>0.0)) || ((deltaphi>(3*TMath::Pi()/4.)) && (deltaphi<TMath::Pi()))) valuedeltaphicontamination[0] = 0.5;\r
+ // out-of-plane\r
+ if((deltaphi>(TMath::Pi()/4.)) && (deltaphi<(3*TMath::Pi()/4.))) valuedeltaphicontamination[0] = 1.5;\r
+\r
////////////////////////////////////////\r
// Define variables\r
///////////////////////////////////////\r
\r
+\r
+ valuedeltaphicontamination[2] = track->Pt();\r
valuensparsee[2] = track->Pt();\r
valuensparsee[3] = track->Eta(); \r
valuensparseg[2] = track->Pt();\r
// Fill before PID\r
///////////////////////\r
\r
- if(fDebugLevel > 4) { \r
+ if(fDebugLevel > 5) { \r
\r
valuensparseg[0] = deltaphi;\r
if(fillEventPlane) fDeltaPhiMapsBeforePID->Fill(&valuensparseg[0]);\r
if(!fNoPID) {\r
// Apply PID for Data\r
if(!fMCPID) {\r
+ // pid object\r
AliHFEpidObject hfetrack;\r
if(!fAODAnalysis) hfetrack.SetAnalysisType(AliHFEpidObject::kESDanalysis);\r
else hfetrack.SetAnalysisType(AliHFEpidObject::kAODanalysis);\r
hfetrack.SetCentrality((Int_t)binct);\r
//printf("centrality %f and %d\n",binct,hfetrack.GetCentrality());\r
hfetrack.SetPbPb();\r
+\r
+ // Only TOF PID\r
+ if(fPIDTOFOnly->IsSelected(&hfetrack,0x0,"recTrackCont",0x0)) {\r
+ Float_t nsigma = pidResponse->NumberOfSigmasTPC(track, AliPID::kElectron);\r
+ valuedeltaphicontamination[3] = nsigma;\r
+ fDeltaPhiMapsContamination->Fill(&valuedeltaphicontamination[0]);\r
+ }\r
+\r
+ // Complete PID TOF+TPC\r
if(!fPID->IsSelected(&hfetrack,0x0,"recTrackCont",fPIDqa)) {\r
continue;\r
}\r
valueangle[2] = source;\r
valueangle[1] = binct;\r
\r
+ // Pdg code\r
+ Int_t pdg1 = CheckPdg(TMath::Abs(track1->GetLabel()),mcEvent);\r
+ Int_t numberfound = 0;\r
+\r
//Magnetic Field\r
Double_t bfield = vEvent->GetMagneticField();\r
+\r
+ // Get Primary vertex\r
+ const AliVVertex *pVtx = vEvent->GetPrimaryVertex();\r
\r
for(Int_t idex = 0; idex < fCounterPoolBackground; idex++) \r
{\r
if(iTrack2==iTrack1) continue;\r
//printf("Different\n");\r
\r
+ // Reset the MC info\r
+ valueangle[2] = source;\r
+ valuensparseDeltaPhiMaps[4] = source;\r
+\r
// track cuts and PID already done\r
\r
// if MC look\r
+ Int_t pdg2 = -100;\r
if(mcEvent) {\r
Int_t source2 = 0;\r
Int_t indexmother2 = -1;\r
source2 = FindMother(TMath::Abs(track2->GetLabel()),mcEvent, indexmother2);\r
- if((indexmother2 == indexmother) && (source == source2)) {\r
- if(source == kElectronfromconversion) {\r
- valueangle[2] = kElectronfromconversionboth;\r
- valuensparseDeltaPhiMaps[4] = kElectronfromconversionboth;\r
- }\r
- if(source == kElectronfrompi0) {\r
- valueangle[2] = kElectronfrompi0both;\r
- valuensparseDeltaPhiMaps[4] = kElectronfrompi0both;\r
- }\r
- if(source == kElectronfrometa) {\r
- valueangle[2] = kElectronfrometaboth;\r
- valuensparseDeltaPhiMaps[4] = kElectronfrometaboth;\r
+ pdg2 = CheckPdg(TMath::Abs(track2->GetLabel()),mcEvent);\r
+ if(source2 >=0 ) {\r
+ if((indexmother2 == indexmother) && (source == source2) && ((pdg1*pdg2)<0.0)) {\r
+ if(source == kElectronfromconversion) {\r
+ valueangle[2] = kElectronfromconversionboth;\r
+ valuensparseDeltaPhiMaps[4] = kElectronfromconversionboth;\r
+ numberfound++;\r
+ }\r
+ if(source == kElectronfrompi0) {\r
+ valueangle[2] = kElectronfrompi0both;\r
+ valuensparseDeltaPhiMaps[4] = kElectronfrompi0both;\r
+ }\r
+ if(source == kElectronfrometa) {\r
+ valueangle[2] = kElectronfrometaboth;\r
+ valuensparseDeltaPhiMaps[4] = kElectronfrometaboth;\r
+ }\r
}\r
}\r
}\r
if(fCharge1>0) fPDGtrack1 = -11;\r
if(fCharge2>0) fPDGtrack2 = -11;\r
\r
- AliKFParticle fKFtrack1(*track1, fPDGtrack1);\r
- AliKFParticle fKFtrack2(*track2, fPDGtrack2);\r
- AliKFParticle fRecoGamma(fKFtrack1, fKFtrack2);\r
+ AliKFParticle ktrack1(*track1, fPDGtrack1);\r
+ AliKFParticle ktrack2(*track2, fPDGtrack2);\r
+ AliKFParticle recoGamma(ktrack1, ktrack2);\r
\r
//Reconstruction Cuts\r
- if(fRecoGamma.GetNDF()<1) continue;\r
- Double_t chi2OverNDF = fRecoGamma.GetChi2()/fRecoGamma.GetNDF();\r
+ if(recoGamma.GetNDF()<1) continue;\r
+ Double_t chi2OverNDF = recoGamma.GetChi2()/recoGamma.GetNDF();\r
if(TMath::Sqrt(TMath::Abs(chi2OverNDF))>fChi2OverNDFCut) continue;\r
- \r
+\r
+ // DCA\r
+ //Double_t dca12 = ktrack1.GetDistanceFromParticle(ktrack2);\r
+ //if(dca12 > fMaxdca) continue; \r
+\r
+ // if set mass constraint\r
+ if(fSetMassConstraint && pVtx) {\r
+ AliKFVertex primV(*pVtx);\r
+ primV += recoGamma;\r
+ primV -= ktrack1;\r
+ primV -= ktrack2;\r
+ recoGamma.SetProductionVertex(primV);\r
+ recoGamma.SetMassConstraint(0,0.0001);\r
+ } \r
+\r
//Invariant Mass\r
Double_t imass; \r
Double_t width;\r
- fRecoGamma.GetMass(imass,width);\r
+ recoGamma.GetMass(imass,width);\r
\r
//Opening Angle (Total Angle)\r
- Double_t angle = fKFtrack1.GetAngle(fKFtrack2);\r
+ Double_t angle = ktrack1.GetAngle(ktrack2);\r
valueangle[0] = angle;\r
if((fCharge1*fCharge2)>0.0) fSameSignAngle->Fill(&valueangle[0]);\r
- else fOppSignAngle->Fill(&valueangle[0]); \r
+ else fOppSignAngle->Fill(&valueangle[0]);\r
+\r
+ // Cut\r
+ if(angle > fMaxopening3D) continue; \r
\r
// Invmass\r
valuensparseDeltaPhiMaps[3] = imass;\r
if((fCharge1*fCharge2)>0.0) fSameSignDeltaPhiMaps->Fill(&valuensparseDeltaPhiMaps[0]);\r
- else fOppSignDeltaPhiMaps->Fill(&valuensparseDeltaPhiMaps[0]);\r
- \r
+ else {\r
+ fOppSignDeltaPhiMaps->Fill(&valuensparseDeltaPhiMaps[0]);\r
+ /*\r
+ if(valueangle[2] == kElectronfromconversionboth) {\r
+ printf("Reconstructed charge1 %f, charge 2 %f and invmass %f\n",fCharge1,fCharge2,imass);\r
+ printf("MC charge1 %d, charge 2 %d\n",pdg1,pdg2);\r
+ printf("DCA %f\n",dca12);\r
+ printf("Number of found %d\n",numberfound);\r
+ }\r
+ */\r
+ }\r
\r
// Cut\r
if(imass < fMaxInvmass) {\r
if((fCharge1*fCharge2)<0.0) oppositetaggedphotonic=kTRUE;\r
if((fCharge1*fCharge2)>0.0) sametaggedphotonic=kTRUE;\r
}\r
- \r
}\r
}\r
-\r
+ \r
if(oppositetaggedphotonic && sametaggedphotonic){\r
taggedphotonic = 6;\r
}\r
\r
return taggedphotonic;\r
}\r
-\r
//_________________________________________________________________________\r
Int_t AliAnalysisTaskHFEFlow::FindMother(Int_t tr, AliMCEvent *mcEvent, Int_t &indexmother){\r
//\r
//\r
\r
if(!mcEvent) return 0;\r
+\r
+ Int_t pdg = CheckPdg(tr,mcEvent);\r
+ if(TMath::Abs(pdg)!= 11) {\r
+ indexmother = -1;\r
+ return kNoElectron;\r
+ }\r
\r
indexmother = IsMotherGamma(tr,mcEvent);\r
if(indexmother > 0) return kElectronfromconversion;\r
return kElectronfromother;\r
\r
\r
+}\r
+//____________________________________________________________________________________________________________\r
+Int_t AliAnalysisTaskHFEFlow::CheckPdg(Int_t tr, AliMCEvent* mcEvent) {\r
+\r
+ //\r
+ // Return the pdg of the particle\r
+ //\r
+\r
+\r
+ Int_t pdgcode = -1;\r
+ if(tr < 0) return pdgcode;\r
+\r
+ if(!mcEvent) return pdgcode;\r
+\r
+ AliVParticle *mctrack = mcEvent->GetTrack(tr);\r
+ \r
+ \r
+ if(mctrack->IsA() == AliMCParticle::Class()) {\r
+ AliMCParticle *mctrackesd = NULL;\r
+ if(!(mctrackesd = dynamic_cast<AliMCParticle *>(mcEvent->GetTrack(TMath::Abs(tr))))) return pdgcode;\r
+ pdgcode = mctrackesd->PdgCode();\r
+ }\r
+\r
+ if(mctrack->IsA() == AliAODMCParticle::Class()) {\r
+ AliAODMCParticle *mctrackaod = NULL;\r
+ if(!(mctrackaod = dynamic_cast<AliAODMCParticle *>(mcEvent->GetTrack(TMath::Abs(tr))))) return pdgcode;\r
+ pdgcode = mctrackaod->GetPdgCode();\r
+ }\r
+ \r
+ return pdgcode;\r
+\r
+ \r
}\r
//____________________________________________________________________________________________________________\r
Int_t AliAnalysisTaskHFEFlow::IsMotherGamma(Int_t tr, AliMCEvent* mcEvent) {\r